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 ================================================

license MIT version 2.0.4 php74

vmrack.net - 全球自动化云基础设施服务商 提供先进的云服务器、裸金属、CDN、媒体处理、对象存储和网络解决方案,助力企业轻松上云

## 📢停更通知2026/02/12 ### 项目已经停止更新和维护,请前往新版[Dujiao-Next(dujiao-next.com)](https://dujiao-next.com) ================================================ FILE: app/Admin/Actions/Post/BatchRestore.php ================================================ * @copyright assimon * @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 ================================================ * @copyright assimon * @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 ================================================ * @copyright assimon * @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 * @copyright assimon * @link http://utf8.hk/ */ public function withOrderCount($count) { $title = admin_trans('dujiaoka.order_count_number'); return $this->content( <<

{$count}

{$title} 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 * @copyright assimon * @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( <<

{$statusPendingTitle}

{$pending}

{$statusProcessingNumber}

{$processing}

{$statusCompletedNumber}

{$completed}

{$statusFailureNumber}

{$failure}

{$statusAbnormalNumber}

{$abnormal}
HTML ); } } ================================================ FILE: app/Admin/Charts/PayoutRateCard.php ================================================ * @copyright assimon * @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( <<
{$this->labels[0]}
{$success}
{$this->labels[1]}
{$unpaid}
HTML ); } } ================================================ FILE: app/Admin/Charts/SalesCard.php ================================================ * @copyright assimon * @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( <<

{$title}¥

{$value}
View Details HTML ); } } ================================================ FILE: app/Admin/Charts/SuccessOrderCard.php ================================================ * @copyright assimon * @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( <<

{$content}

{$this->title} HTML ); } } ================================================ FILE: app/Admin/Controllers/AuthController.php ================================================ 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 * @copyright assimon * @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 ================================================ 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 ================================================ * @copyright ZhangYiQiu * @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 * @copyright assimon * @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 ================================================ 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 ================================================ 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 ""; }); $show->other_ipu_cnf()->unescape()->as(function ($otherIpuCnf) { return ""; }); $show->api_hook()->unescape()->as(function ($apiHook) { return ""; });; }); } /** * 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 ================================================ 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 ================================================ 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 ================================================ 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 ""; }); $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 ================================================ 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 ================================================ * @copyright assimon * @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 * @copyright assimon * @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 ================================================ * @copyright ZhangYiQiu * @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("这是一条测试邮件的正文内容

正文比较长

非常长

测试测试测试")->required(); }); } public function default() { } } ================================================ FILE: app/Admin/Forms/ImportCarmis.php ================================================ 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 ================================================ 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 ================================================ * * 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 ================================================ 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 ================================================ 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 ================================================ 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 ================================================ 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 ================================================ 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 ================================================ __('dujiaoka.error_title'), 'content' => $exception->getMessage(), 'url' => ""]); } return parent::render($request, $exception); } } ================================================ FILE: app/Exceptions/RuleValidationException.php ================================================ * @copyright assimon * @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 * @copyright assimon * @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 * @copyright assimon * @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 * @copyright assimon * @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 * @copyright assimon * @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 ================================================ * @copyright assimon * @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 * @copyright assimon * @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 * @copyright assimon * @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 ================================================ goodsService = app('Service\GoodsService'); $this->payService = app('Service\PayService'); } /** * 首页. * * @param Request $request * * @author assimon * @copyright assimon * @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 * @copyright assimon * @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 * @copyright assimon * @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 * @copyright assimon * @link http://utf8.hk/ */ public function install(Request $request) { return view('common/install'); } /** * 执行安装 * * @param Request $request * * @author assimon * @copyright assimon * @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 ================================================ 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 * @copyright assimon * @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 * @copyright assimon * @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 * @copyright assimon * @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 * @copyright assimon * @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 * @copyright assimon * @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 * @copyright assimon * @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 * @copyright assimon * @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 * @copyright assimon * @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 ================================================ 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 ================================================ 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 ================================================ * @copyright assimon * @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 ================================================ 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 ================================================ 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 ================================================ 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 ================================================ 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 = " loading pay...
"; 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 ================================================ 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 = " 收银台

收银台


付款信息
¥{$price}

订单编号:$orderid

正在加载中...
支付失败,请更换卡片或检查输入信息
"; 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 ================================================ 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 ================================================ 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 ================================================ 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 ================================================ 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 = "
"; foreach($parameter as $key => $val) { $sHtml.= ""; } //submit按钮控件请不要含有name属性 $sHtml = $sHtml."
"; $sHtml = $sHtml.""; 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 ================================================ orderService = app('Service\OrderService'); $this->payService = app('Service\PayService'); $this->orderProcessService = app('Service\OrderProcessService'); } /** * 订单检测 * * @param string $orderSN * @throws RuleValidationException * * @author assimon * @copyright assimon * @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 * @copyright assimon * @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 * @copyright assimon * @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 ================================================ [ \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 ================================================ expectsJson()) { return route('login'); } } } ================================================ FILE: app/Http/Middleware/CheckForMaintenanceMode.php ================================================ 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 ================================================ 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 ================================================ check()) { return redirect(RouteServiceProvider::HOME); } return $next($request); } } ================================================ FILE: app/Http/Middleware/TrimStrings.php ================================================ 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 ================================================ 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 ================================================ 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 ================================================ 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 ================================================ 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 ================================================ 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 ================================================ 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 ================================================ 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').'('.$this->order->actual_price."元)\n" .'>'.__('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."" ] ]; $client->post($apiUrl,['json' => $params, 'verify' => false]); } } ================================================ FILE: app/Listeners/GoodsDeleted.php ================================================ where('goods_id', $event->goods->id)->delete(); } } ================================================ FILE: app/Listeners/GoodsGroupDeleted.php ================================================ where('group_id', $event->goodsGroup->id)->delete(); } } ================================================ FILE: app/Listeners/OrderUpdated.php ================================================ date('Y-m-d H:i'), 'ord_title' => $event->order->title, 'webname' => $sysCache['text_logo'] ?? '独角数卡', 'weburl' => config('app.url'), 'order_id' => $event->order->order_sn, 'ord_price' => $event->order->actual_price, 'ord_info' => str_replace(PHP_EOL, '
', $event->order->info) ]; $to = $event->order->email; // 邮件 if ($event->order->type == Order::MANUAL_PROCESSING) { switch ($event->order->status) { case Order::STATUS_PENDING: $mailtpl = Emailtpl::query()->where('tpl_token', 'pending_order')->first()->toArray(); self::sendMailToOrderStatus($mailtpl, $order, $to); break; case Order::STATUS_COMPLETED: $mailtpl = Emailtpl::query()->where('tpl_token', 'completed_order')->first()->toArray(); self::sendMailToOrderStatus($mailtpl, $order, $to); break; case Order::STATUS_FAILURE: $mailtpl = Emailtpl::query()->where('tpl_token', 'failed_order')->first()->toArray(); self::sendMailToOrderStatus($mailtpl, $order, $to); break; } } } /** * 邮件发送 * * @param array $mailtpl 模板 * @param array $order 内容 * @param string $to 接受者 * * @author assimon * @copyright assimon * @link http://utf8.hk/ */ private static function sendMailToOrderStatus(array $mailtpl, array $order, string $to) :void { $info = replace_mail_tpl($mailtpl, $order); MailSend::dispatch($to, $info['tpl_name'], $info['tpl_content']); } } ================================================ FILE: app/Models/BaseModel.php ================================================ * @copyright assimon * @link http://utf8.hk/ */ namespace App\Models; use Illuminate\Database\Eloquent\Model; class BaseModel extends Model { const STATUS_OPEN = 1; // 状态开启 const STATUS_CLOSE = 0; // 状态关闭 const AUTOMATIC_DELIVERY = 1; // 自动发货 const MANUAL_PROCESSING = 2; // 人工处理 /** * map * * @return array * * @author assimon * @copyright assimon * @link http://utf8.hk/ */ public static function getIsOpenMap() { return [ self::STATUS_OPEN => admin_trans('dujiaoka.status_open'), self::STATUS_CLOSE => admin_trans('dujiaoka.status_close') ]; } } ================================================ FILE: app/Models/Carmis.php ================================================ * @copyright assimon * @link http://utf8.hk/ */ public static function getStatusMap() { return [ self::STATUS_UNSOLD => admin_trans('carmis.fields.status_unsold'), self::STATUS_SOLD => admin_trans('carmis.fields.status_sold') ]; } /** * 关联商品 * * @return \Illuminate\Database\Eloquent\Relations\BelongsTo * * @author assimon * @copyright assimon * @link http://utf8.hk/ */ public function goods() { return $this->belongsTo(Goods::class, 'goods_id'); } } ================================================ FILE: app/Models/Coupon.php ================================================ * @copyright assimon * @link http://utf8.hk/ */ public function goods() { return $this->belongsToMany(Goods::class, 'coupons_goods', 'coupons_id', 'goods_id'); } public static function getStatusUseMap() { return [ self::STATUS_USE => admin_trans('coupon.fields.status_use'), self::STATUS_UNUSED => admin_trans('coupon.fields.status_unused'), ]; } } ================================================ FILE: app/Models/Emailtpl.php ================================================ GoodsDeleted::class ]; /** * 关联分类 * * @return \Illuminate\Database\Eloquent\Relations\BelongsTo * * @author assimon * @copyright assimon * @link http://utf8.hk/ */ public function group() { return $this->belongsTo(GoodsGroup::class, 'group_id'); } /** * 关联优惠券 * * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany * * @author assimon * @copyright assimon * @link http://utf8.hk/ */ public function coupon() { return $this->belongsToMany(Coupon::class, 'coupons_goods', 'goods_id', 'coupons_id'); } /** * 关联卡密 * * @return \Illuminate\Database\Eloquent\Relations\HasMany * * @author assimon * @copyright assimon * @link http://utf8.hk/ */ public function carmis() { return $this->hasMany(Carmis::class, 'goods_id'); } /** * 库存读取器,将自动发货的库存更改为未出售卡密的数量 * * @author assimon * @copyright assimon * @link http://utf8.hk/ */ public function getInStockAttribute() { if (isset($this->attributes['carmis_count']) && $this->attributes['type'] == self::AUTOMATIC_DELIVERY ) { $this->attributes['in_stock'] = $this->attributes['carmis_count']; } return $this->attributes['in_stock']; } /** * 获取组建映射 * * @return array * * @author assimon * @copyright assimon * @link http://utf8.hk/ */ public static function getGoodsTypeMap() { return [ self::AUTOMATIC_DELIVERY => admin_trans('goods.fields.automatic_delivery'), self::MANUAL_PROCESSING => admin_trans('goods.fields.manual_processing') ]; } } ================================================ FILE: app/Models/GoodsGroup.php ================================================ GoodsGroupDeleted::class ]; /** * 关联商品 * * @return \Illuminate\Database\Eloquent\Relations\HasMany * * @author assimon * @copyright assimon * @link http://utf8.hk/ */ public function goods() { return $this->hasMany(Goods::class, 'group_id'); } } ================================================ FILE: app/Models/Order.php ================================================ OrderUpdated::class ]; /** * 状态映射 * * @return array * * @author assimon * @copyright assimon * @link http://utf8.hk/ */ public static function getStatusMap() { return [ self::STATUS_WAIT_PAY => admin_trans('order.fields.status_wait_pay'), self::STATUS_PENDING => admin_trans('order.fields.status_pending'), self::STATUS_PROCESSING => admin_trans('order.fields.status_processing'), self::STATUS_COMPLETED => admin_trans('order.fields.status_completed'), self::STATUS_FAILURE => admin_trans('order.fields.status_failure'), self::STATUS_ABNORMAL => admin_trans('order.fields.status_abnormal'), self::STATUS_EXPIRED => admin_trans('order.fields.status_expired') ]; } /** * 类型映射 * * @return array * * @author assimon * @copyright assimon * @link http://utf8.hk/ */ public static function getTypeMap() { return [ self::AUTOMATIC_DELIVERY => admin_trans('goods.fields.automatic_delivery'), self::MANUAL_PROCESSING => admin_trans('goods.fields.manual_processing') ]; } /** * 关联商品 * * @return \Illuminate\Database\Eloquent\Relations\BelongsTo * * @author assimon * @copyright assimon * @link http://utf8.hk/ */ public function goods() { return $this->belongsTo(Goods::class, 'goods_id'); } /** * 关联优惠券 * * @return \Illuminate\Database\Eloquent\Relations\BelongsTo * * @author assimon * @copyright assimon * @link http://utf8.hk/ */ public function coupon() { return $this->belongsTo(Coupon::class, 'coupon_id'); } /** * 关联支付 * * @return \Illuminate\Database\Eloquent\Relations\BelongsTo * * @author assimon * @copyright assimon * @link http://utf8.hk/ */ public function pay() { return $this->belongsTo(Pay::class, 'pay_id'); } } ================================================ FILE: app/Models/Pay.php ================================================ admin_trans('pay.fields.method_jump'), self::METHOD_SCAN => admin_trans('pay.fields.method_scan'), ]; } public static function getClientMap() { return [ self::PAY_CLIENT_PC => admin_trans('pay.fields.pay_client_pc'), self::PAY_CLIENT_MOBILE => admin_trans('pay.fields.pay_client_mobile'), self::PAY_CLIENT_ALL => admin_trans('pay.fields.pay_client_all'), ]; } } ================================================ FILE: app/Providers/AppServiceProvider.php ================================================ app->singleton('Service\GoodsService', function () { return $this->app->make(GoodsService::class); }); $this->app->singleton('Service\PayService', function () { return $this->app->make(PayService::class); }); $this->app->singleton('Service\CarmisService', function () { return $this->app->make(CarmisService::class); }); $this->app->singleton('Service\OrderService', function () { return $this->app->make(OrderService::class); }); $this->app->singleton('Service\CouponService', function () { return $this->app->make(CouponService::class); }); $this->app->singleton('Service\OrderProcessService', function () { return $this->app->make(OrderProcessService::class); }); $this->app->singleton('Service\EmailtplService', function () { return $this->app->make(EmailtplService::class); }); $this->app->singleton('Jenssegers\Agent', function () { return $this->app->make(Agent::class); }); } /** * Bootstrap any application services. * * @return void */ public function boot() { } } ================================================ FILE: app/Providers/AuthServiceProvider.php ================================================ 'App\Policies\ModelPolicy', ]; /** * Register any authentication / authorization services. * * @return void */ public function boot() { $this->registerPolicies(); // } } ================================================ FILE: app/Providers/BroadcastServiceProvider.php ================================================ [ SendEmailVerificationNotification::class, ], GoodsGroupDeleted::class => [ \App\Listeners\GoodsGroupDeleted::class, ], GoodsDeleted::class => [ \App\Listeners\GoodsDeleted::class, ], OrderUpdated::class => [ \App\Listeners\OrderUpdated::class, ], ]; /** * Register any events for your application. * * @return void */ public function boot() { parent::boot(); // } } ================================================ FILE: app/Providers/RouteServiceProvider.php ================================================ mapApiRoutes(); $this->mapWebRoutes(); // } /** * Define the "web" routes for the application. * * These routes all receive session state, CSRF protection, etc. * * @return void */ protected function mapWebRoutes() { Route::middleware('web') ->namespace($this->namespace) ->group(base_path('routes/web.php')); } /** * Define the "api" routes for the application. * * These routes are typically stateless. * * @return void */ protected function mapApiRoutes() { Route::prefix('api') ->middleware('api') ->namespace($this->namespace) ->group(base_path('routes/api.php')); } } ================================================ FILE: app/Rules/SearchPwd.php ================================================ * @copyright assimon * @link http://utf8.hk/ */ namespace App\Service; use App\Models\Carmis; class CarmisService { /** * 通过商品查询一些数量未使用的卡密 * * @param int $goodsID 商品id * @param int $byAmount 数量 * @return array|null * * @author assimon * @copyright assimon * @link http://utf8.hk/ */ public function withGoodsByAmountAndStatusUnsold(int $goodsID, int $byAmount) { $carmis = Carmis::query() ->where('goods_id', $goodsID) ->where('status', Carmis::STATUS_UNSOLD) ->take($byAmount) ->get(); return $carmis ? $carmis->toArray() : null; } /** * 通过id集合设置卡密已售出 * * @param array $ids 卡密id集合 * @return bool * * @author assimon * @copyright assimon * @link http://utf8.hk/ */ public function soldByIDS(array $ids): bool { return Carmis::query()->whereIn('id', $ids)->where('is_loop', 0)->update(['status' => Carmis::STATUS_SOLD]); } } ================================================ FILE: app/Service/CouponService.php ================================================ * @copyright assimon * @link http://utf8.hk/ */ namespace App\Service; use App\Models\Coupon; class CouponService { /** * 获得优惠码,通过商品关联 * * @param string $coupon 优惠码 * @param int $goodsID 商品id * @return \Illuminate\Database\Eloquent\Builder|\Illuminate\Database\Eloquent\Model|object|null * * @author assimon * @copyright assimon * @link http://utf8.hk/ */ public function withHasGoods(string $coupon, int $goodsID) { $coupon = Coupon::query()->whereHas('goods', function ($query) use ($goodsID) { $query->where('goods_id', $goodsID); })->where('is_open', Coupon::STATUS_OPEN)->where('coupon', $coupon)->first(); return $coupon; } /** * 设置优惠券已使用 * @param string $coupon * @return bool */ public function used(string $coupon): bool { return Coupon::query() ->where('coupon', $coupon) ->update(['is_use' => Coupon::STATUS_USE]); } /** * 设置优惠券使用次数 -1 * @param string $coupon * @return int * * @author assimon * @copyright assimon * @link http://utf8.hk/ */ public function retDecr(string $coupon) { return Coupon::query() ->where('coupon', $coupon) ->decrement('ret', 1); } /** * 设置优惠券次数+1 * * @param int $id * @return int * * @author assimon * @copyright assimon * @link http://utf8.hk/ */ public function retIncrByID(int $id) { return Coupon::query()->where('id', $id)->increment('ret', 1); } } ================================================ FILE: app/Service/EmailtplService.php ================================================ * @copyright assimon * @link http://utf8.hk/ */ namespace App\Service; use App\Models\Emailtpl; class EmailtplService { /** * 通过邮件标识获得邮件模板 * * @param string $token 邮件标识 * @return Emailtpl * * @author assimon * @copyright assimon * @link http://utf8.hk/ */ public function detailByToken(string $token): Emailtpl { $tpl = Emailtpl::query()->where('tpl_token', $token)->first(); return $tpl; } } ================================================ FILE: app/Service/GoodsService.php ================================================ * @copyright assimon * @link http://utf8.hk/ */ namespace App\Service; use App\Exceptions\RuleValidationException; use App\Models\Carmis; use App\Models\Goods; use App\Models\GoodsGroup; /** * 商品服务层 * * Class GoodsService * @package App\Service * @author: Assimon * @email: Ashang@utf8.hk * @blog: https://utf8.hk * Date: 2021/5/30 */ class GoodsService { /** * 获取所有分类并加载该分类下的商品 * * @return array|null * * @author assimon * @copyright assimon * @link http://utf8.hk/ */ public function withGroup(): ?array { $goods = GoodsGroup::query() ->with(['goods' => function($query) { $query->withCount(['carmis' => function($query) { $query->where('status', Carmis::STATUS_UNSOLD); }])->where('is_open', Goods::STATUS_OPEN)->orderBy('ord', 'DESC'); }]) ->where('is_open', GoodsGroup::STATUS_OPEN) ->orderBy('ord', 'DESC') ->get(); // 将自动 return $goods ? $goods->toArray() : null; } /** * 商品详情 * * @param int $id 商品id * @return \Illuminate\Database\Eloquent\Builder|\Illuminate\Database\Eloquent\Model|object|null * * @author assimon * @copyright assimon * @link http://utf8.hk/ */ public function detail(int $id) { $goods = Goods::query() ->with(['coupon']) ->withCount(['carmis' => function($query) { $query->where('status', Carmis::STATUS_UNSOLD); }])->where('id', $id)->first(); return $goods; } /** * 格式化商品信息 * * @param Goods $goods 商品模型 * @return Goods * * @author assimon * @copyright assimon * @link http://utf8.hk/ */ public function format(Goods $goods) { // 格式化批发配置以及输入框配置 $goods->wholesale_price_cnf = $goods->wholesale_price_cnf ? format_wholesale_price($goods->wholesale_price_cnf) : null; // 如果存在其他配置输入框且为代充 $goods->other_ipu = $goods->other_ipu_cnf ? format_charge_input($goods->other_ipu_cnf) : null; return $goods; } /** * 验证商品状态 * * @param Goods $goods * @return Goods * @throws RuleValidationException * * @author assimon * @copyright assimon * @link http://utf8.hk/ */ public function validatorGoodsStatus(Goods $goods): Goods { if (empty($goods)) { throw new RuleValidationException(__('dujiaoka.prompt.goods_does_not_exist')); } // 上架判断. if ($goods->is_open != Goods::STATUS_OPEN) { throw new RuleValidationException(__('dujiaoka.prompt.the_goods_is_not_on_the_shelves')); } return $goods; } /** * 库存减去 * * @param int $id 商品id * @param int $number 出库数量 * * @author assimon * @copyright assimon * @link http://utf8.hk/ */ public function inStockDecr(int $id, int $number = 1): bool { return Goods::query()->where('id', $id)->decrement('in_stock', $number); } /** * 商品销量加 * * @param int $id 商品id * @param int $number 数量 * @return bool * * @author assimon * @copyright assimon * @link http://utf8.hk/ */ public function salesVolumeIncr(int $id, int $number = 1): bool { return Goods::query()->where('id', $id)->increment('sales_volume', $number); } } ================================================ FILE: app/Service/OrderProcessService.php ================================================ * @copyright assimon * @link http://utf8.hk/ */ namespace App\Service; use App\Exceptions\RuleValidationException; use App\Jobs\ApiHook; use App\Jobs\MailSend; use App\Jobs\OrderExpired; use App\Jobs\ServerJiang; use App\Jobs\TelegramPush; use App\Jobs\BarkPush; use App\Jobs\WorkWeiXinPush; use App\Models\BaseModel; use App\Models\Coupon; use App\Models\Goods; use App\Models\Order; use Carbon\Carbon; use Illuminate\Support\Facades\DB; use Illuminate\Support\Str; /** * 订单处理层 * * Class OrderProcessService * @package App\Service * @author: Assimon * @email: Ashang@utf8.hk * @blog: https://utf8.hk * Date: 2021/5/30 */ class OrderProcessService { const PENDING_CACHE_KEY = 'PENDING_ORDERS_LIST'; /** * 优惠码服务层 * @var \App\Service\CouponService */ private $couponService; /** * 订单服务层 * @var \App\Service\OrderService */ private $orderService; /** * 卡密服务层 * @var \App\Service\CarmisService */ private $carmisService; /** * 邮件服务层 * @var \App\Service\EmailtplService */ private $emailtplService; /** * 商品服务层. * @var \App\Service\GoodsService */ private $goodsService; /** * 商品 * @var Goods */ private $goods; /** * 优惠码 * @var Coupon; */ private $coupon; /** * 其他输入框 * @var string */ private $otherIpt; /** * 购买数量 * @var int */ private $buyAmount; /** * 购买邮箱 * @var string */ private $email; /** * 查询密码 * @var string */ private $searchPwd; /** * 下单id * @var string */ private $buyIP; /** * 支付方式 * @var int */ private $payID; public function __construct() { $this->couponService = app('Service\CouponService'); $this->orderService = app('Service\OrderService'); $this->carmisService = app('Service\CarmisService'); $this->emailtplService = app('Service\EmailtplService'); $this->goodsService = app('Service\GoodsService'); } /** * 设置支付方式 * @param int $payID */ public function setPayID(int $payID): void { $this->payID = $payID; } /** * 下单ip * @param mixed $buyIP */ public function setBuyIP($buyIP): void { $this->buyIP = $buyIP; } /** * 设置查询密码 * @param mixed $searchPwd */ public function setSearchPwd($searchPwd): void { $this->searchPwd = $searchPwd; } /** * 设置购买数量 * @param mixed $buyAmount */ public function setBuyAmount($buyAmount): void { $this->buyAmount = $buyAmount; } /** * 设置下单邮箱 * @param mixed $email */ public function setEmail($email): void { $this->email = $email; } /** * 设置商品 * * @param Goods $goods * * @author assimon * @copyright assimon * @link http://utf8.hk/ */ public function setGoods(Goods $goods) { $this->goods = $goods; } /** * 设置优惠码. * * @param ?Coupon $coupon * * @author assimon * @copyright assimon * @link http://utf8.hk/ */ public function setCoupon(?Coupon $coupon) { $this->coupon = $coupon; } /** * 其他输入框设置. * * @param ?string $otherIpt * * @author assimon * @copyright assimon * @link http://utf8.hk/ */ public function setOtherIpt(?string $otherIpt) { $this->otherIpt = $otherIpt; } /** * 计算优惠码价格 * * @return float * * @author assimon * @copyright assimon * @link http://utf8.hk/ */ private function calculateTheCouponPrice(): float { $couponPrice = 0; // 优惠码优惠价格 if ($this->coupon) { $couponPrice = $this->coupon->discount; } return $couponPrice; } /** * 计算批发优惠 * @return float * * @author assimon * @copyright assimon * @link http://utf8.hk/ */ private function calculateTheWholesalePrice(): float { $wholesalePrice = 0; // 优惠单价 $wholesaleTotalPrice = 0; // 优惠总价 if ($this->goods->wholesale_price_cnf) { $formatWholesalePrice = format_wholesale_price($this->goods->wholesale_price_cnf); foreach ($formatWholesalePrice as $item) { if ($this->buyAmount >= $item['number']) { $wholesalePrice = $item['price']; } } } if ($wholesalePrice > 0 ) { $totalPrice = $this->calculateTheTotalPrice(); // 实际原总价 $newTotalPrice = bcmul($wholesalePrice, $this->buyAmount, 2); // 批发价优惠后的总价 $wholesaleTotalPrice = bcsub($totalPrice, $newTotalPrice, 2); // 批发总优惠 } return $wholesaleTotalPrice; } /** * 订单总价 * @return float * * @author assimon * @copyright assimon * @link http://utf8.hk/ */ private function calculateTheTotalPrice(): float { $price = $this->goods->actual_price; return bcmul($price, $this->buyAmount, 2); } /** * 计算实际需要支付的价格 * * @param float $totalPrice 总价 * @param float $couponPrice 优惠码优惠价 * @param float $wholesalePrice 批发优惠 * @return float * * @author assimon * @copyright assimon * @link http://utf8.hk/ */ private function calculateTheActualPrice(float $totalPrice, float $couponPrice, float $wholesalePrice): float { $actualPrice = bcsub($totalPrice, $couponPrice, 2); $actualPrice = bcsub($actualPrice, $wholesalePrice, 2); if ($actualPrice <= 0) { $actualPrice = 0; } return $actualPrice; } /** * 创建订单. * @return Order * @throws RuleValidationException * * @author assimon * @copyright assimon * @link http://utf8.hk/ */ public function createOrder(): Order { try { $order = new Order(); // 生成订单号 $order->order_sn = strtoupper(Str::random(16)); // 设置商品 $order->goods_id = $this->goods->id; // 标题 $order->title = $this->goods->gd_name . ' x ' . $this->buyAmount; // 订单类型 $order->type = $this->goods->type; // 查询密码 $order->search_pwd = $this->searchPwd; // 邮箱 $order->email = $this->email; // 支付方式. $order->pay_id = $this->payID; // 商品单价 $order->goods_price = $this->goods->actual_price; // 购买数量 $order->buy_amount = $this->buyAmount; // 订单详情 $order->info = $this->otherIpt; // ip地址 $order->buy_ip = $this->buyIP; // 优惠码优惠价格 $order->coupon_discount_price = $this->calculateTheCouponPrice(); if ($this->coupon) { $order->coupon_id = $this->coupon->id; } // 批发价 $order->wholesale_discount_price = $this->calculateTheWholesalePrice(); // 订单总价 $order->total_price = $this->calculateTheTotalPrice(); // 订单实际需要支付价格 $order->actual_price = $this->calculateTheActualPrice( $this->calculateTheTotalPrice(), $this->calculateTheCouponPrice(), $this->calculateTheWholesalePrice() ); // 保存订单 $order->save(); // 如果有用到优惠券 if ($this->coupon) { // 设置优惠码已经使用 $this->couponService->used($this->coupon->coupon); // 使用次数-1 $this->couponService->retDecr($this->coupon->coupon); } // 将订单加入队列 x分钟后过期 $expiredOrderDate = dujiaoka_config_get('order_expire_time', 5); OrderExpired::dispatch($order->order_sn)->delay(Carbon::now()->addMinutes($expiredOrderDate)); return $order; } catch (\Exception $exception) { throw new RuleValidationException($exception->getMessage()); } } /** * 订单成功方法 * * @param string $orderSN 订单号 * @param float $actualPrice 实际支付金额 * @param string $tradeNo 第三方订单号 * @return Order * * @author assimon * @copyright assimon * @link http://utf8.hk/ */ public function completedOrder(string $orderSN, float $actualPrice, string $tradeNo = '') { DB::beginTransaction(); try { // 得到订单详情 $order = $this->orderService->detailOrderSN($orderSN); if (!$order) { throw new \Exception(__('dujiaoka.prompt.order_does_not_exist')); } // 订单已经处理 if ($order->status == Order::STATUS_COMPLETED) { throw new \Exception(__('dujiaoka.prompt.order_status_completed')); } $bccomp = bccomp($order->actual_price, $actualPrice, 2); // 金额不一致 if ($bccomp != 0) { throw new \Exception(__('dujiaoka.prompt.order_inconsistent_amounts')); } $order->actual_price = $actualPrice; $order->trade_no = $tradeNo; // 区分订单类型 // 自动发货 if ($order->type == Order::AUTOMATIC_DELIVERY) { $completedOrder = $this->processAuto($order); } else { $completedOrder = $this->processManual($order); } // 销量加上 $this->goodsService->salesVolumeIncr($order->goods_id, $order->buy_amount); DB::commit(); // 如果开启了server酱 if (dujiaoka_config_get('is_open_server_jiang', 0) == BaseModel::STATUS_OPEN) { ServerJiang::dispatch($order); } // 如果开启了TG推送 if (dujiaoka_config_get('is_open_telegram_push', 0) == BaseModel::STATUS_OPEN) { TelegramPush::dispatch($order); } // 如果开启了Bark推送 if (dujiaoka_config_get('is_open_bark_push', 0) == BaseModel::STATUS_OPEN) { BarkPush::dispatch($order); } // 如果开启了企业微信Bot推送 if (dujiaoka_config_get('is_open_qywxbot_push', 0) == BaseModel::STATUS_OPEN) { WorkWeiXinPush::dispatch($order); } // 回调事件 ApiHook::dispatch($order); return $completedOrder; } catch (\Exception $exception) { DB::rollBack(); throw new RuleValidationException($exception->getMessage()); } } /** * 手动处理的订单. * * @param Order $order 订单 * @return Order 订单 * * @author assimon * @copyright assimon * @link http://utf8.hk/ */ public function processManual(Order $order) { // 设置订单为待处理 $order->status = Order::STATUS_PENDING; // 保存订单 $order->save(); // 商品库存减去 $this->goodsService->inStockDecr($order->goods_id, $order->buy_amount); // 邮件数据 $mailData = [ 'created_at' => $order->create_at, 'product_name' => $order->goods->gd_name, 'webname' => dujiaoka_config_get('text_logo', '独角数卡'), 'weburl' => config('app.url') ?? 'http://dujiaoka.com', 'ord_info' => str_replace(PHP_EOL, '
', $order->info), 'ord_title' => $order->title, 'order_id' => $order->order_sn, 'buy_amount' => $order->buy_amount, 'ord_price' => $order->actual_price, 'created_at' => $order->created_at, ]; $tpl = $this->emailtplService->detailByToken('manual_send_manage_mail'); $mailBody = replace_mail_tpl($tpl, $mailData); $manageMail = dujiaoka_config_get('manage_email', ''); // 邮件发送 MailSend::dispatch($manageMail, $mailBody['tpl_name'], $mailBody['tpl_content']); return $order; } /** * 处理自动发货. * * @param Order $order 订单 * @return Order 订单 * * @author assimon * @copyright assimon * @link http://utf8.hk/ */ public function processAuto(Order $order): Order { // 获得卡密 $carmis = $this->carmisService->withGoodsByAmountAndStatusUnsold($order->goods_id, $order->buy_amount); // 实际可使用的库存已经少于购买数量了 if (count($carmis) != $order->buy_amount) { $order->info = __('dujiaoka.prompt.order_carmis_insufficient_quantity_available'); $order->status = Order::STATUS_ABNORMAL; $order->save(); return $order; } $carmisInfo = array_column($carmis, 'carmi'); $ids = array_column($carmis, 'id'); $order->info = implode(PHP_EOL, $carmisInfo); $order->status = Order::STATUS_COMPLETED; $order->save(); // 将卡密设置为已售出 $this->carmisService->soldByIDS($ids); // 邮件数据 $mailData = [ 'created_at' => $order->create_at, 'product_name' => $order->goods->gd_name, 'webname' => dujiaoka_config_get('text_logo', '独角数卡'), 'weburl' => config('app.url') ?? 'http://dujiaoka.com', 'ord_info' => implode('
', $carmisInfo), 'ord_title' => $order->title, 'order_id' => $order->order_sn, 'buy_amount' => $order->buy_amount, 'ord_price' => $order->actual_price, ]; $tpl = $this->emailtplService->detailByToken('card_send_user_email'); $mailBody = replace_mail_tpl($tpl, $mailData); // 邮件发送 MailSend::dispatch($order->email, $mailBody['tpl_name'], $mailBody['tpl_content']); return $order; } } ================================================ FILE: app/Service/OrderService.php ================================================ * @copyright assimon * @link http://utf8.hk/ */ namespace App\Service; use App\Exceptions\RuleValidationException; use App\Models\BaseModel; use App\Models\Coupon; use App\Models\Goods; use App\Models\Carmis; use App\Models\Order; use App\Rules\SearchPwd; use App\Rules\VerifyImg; use Illuminate\Http\Request; use Illuminate\Support\Facades\Validator; class OrderService { /** * 商品服务层. * @var \App\Service\PayService */ private $goodsService; /** * 优惠码服务层 * @var \App\Service\CouponService */ private $couponService; public function __construct() { $this->goodsService = app('Service\GoodsService'); $this->couponService = app('Service\CouponService'); } /** * 验证集合 * * @param Request $request * @throws RuleValidationException * @throws \Illuminate\Validation\ValidationException * * @author assimon * @copyright assimon * @link http://utf8.hk/ */ public function validatorCreateOrder(Request $request): void { $validator = Validator::make($request->all(), [ 'gid' => 'required' , 'email' => ['required', 'email'], 'payway' => ['required', 'integer'], 'search_pwd' => [new SearchPwd()], 'by_amount' => ['required', 'integer', 'min:1'], 'img_verify_code' => [new VerifyImg()], ], [ 'by_amount.required' => __('dujiaoka.prompt.buy_amount_format_error'), 'by_amount.integer' => __('dujiaoka.prompt.buy_amount_format_error'), 'by_amount.min' => __('dujiaoka.prompt.buy_amount_format_error'), 'payway.required' => __('dujiaoka.prompt.please_select_mode_of_payment'), 'payway.integer' => __('dujiaoka.prompt.please_select_mode_of_payment'), 'email.required' => __('dujiaoka.prompt.email_format_error'), 'email.email' => __('dujiaoka.prompt.email_format_error'), 'gid.required' => __('dujiaoka.prompt.goods_does_not_exist'), ]); if ($validator->fails()) { throw new RuleValidationException($validator->errors()->first()); } // 极验验证 if ( dujiaoka_config_get('is_open_geetest') == BaseModel::STATUS_OPEN && !Validator::make($request->all(), ['geetest_challenge' => 'geetest',], [ 'geetest' => __('dujiaoka.prompt.geetest_validate_fail')]) ) { throw new RuleValidationException(__('dujiaoka.prompt.geetest_validate_fail')); } } /** * 得到商品详情并验证 * * @param Request $request 请求 * @throws RuleValidationException * * @author assimon * @copyright assimon * @link http://utf8.hk/ */ public function validatorGoods(Request $request): Goods { // 获得商品详情 $goods = $this->goodsService->detail($request->input('gid')); // 商品状态验证 $this->goodsService->validatorGoodsStatus($goods); // 如果有限购 if ($goods->buy_limit_num > 0 && $request->input('by_amount') > $goods->buy_limit_num) { throw new RuleValidationException(__('dujiaoka.prompt.purchase_limit_exceeded')); } // 库存不足 if ($request->input('by_amount') > $goods->in_stock) { throw new RuleValidationException(__('dujiaoka.prompt.inventory_shortage')); } return $goods; } /** * 判断是否有循环卡密 * * @param int $goodsID 商品id * @return array|null * * @author ZhangYiQiu * @copyright ZhangYiQiu * @link http://zhangyiqiu.net/ */ public function validatorLoopCarmis(Request $request) { $carmis = Carmis::query() ->where('goods_id', $request->input('gid')) ->where('status', Carmis::STATUS_UNSOLD) ->where('is_loop', true) ->count(); if($carmis > 0 && $request->input('by_amount') > 1){ throw new RuleValidationException(__('dujiaoka.prompt.loop_carmis_limit')); } return $carmis; } /** * 优惠码验证 * * @param Request $request * @return Coupon|null * @throws RuleValidationException * * @author assimon * @copyright assimon * @link http://utf8.hk/ */ public function validatorCoupon(Request $request):? Coupon { // 如果提交了优惠码 if ($request->filled('coupon_code')) { // 查询优惠码是否存在 $coupon = $this->couponService->withHasGoods($request->input('coupon_code'), $request->input('gid')); // 此商品没有这个优惠码 if (empty($coupon)) { throw new RuleValidationException(__('dujiaoka.prompt.coupon_does_not_exist')); } // 剩余次数不足 if ($coupon->ret <= 0) { throw new RuleValidationException(__('dujiaoka.prompt.coupon_lack_of_available_opportunities')); } return $coupon; } return null; } /** * 代充框验证. * * @param Goods $goods * @param Request $request * @return string * @throws RuleValidationException * * @author assimon * @copyright assimon * @link http://utf8.hk/ */ public function validatorChargeInput(Goods $goods, Request $request): string { $otherIpt = ''; // 代充框验证 if ($goods->type == Goods::MANUAL_PROCESSING && !empty($goods->other_ipu_cnf)) { // 如果有其他输入框 判断其他输入框内容 然后载入信息 $formatIpt = format_charge_input($goods->other_ipu_cnf); foreach ($formatIpt as $item) { if ($item['rule'] && !$request->filled($item['field'])) { $errMessage = $item['desc'] . __('dujiaoka.prompt.can_not_be_empty'); throw new RuleValidationException($errMessage); } $otherIpt .= $item['desc'].':'.$request->input($item['field']) . PHP_EOL; } } return $otherIpt; } /** * 通过订单号查询订单 * @param string $orderSN * @return Order * * @author assimon * @copyright assimon * @link http://utf8.hk/ */ public function detailOrderSN(string $orderSN):? Order { $order = Order::query()->with(['coupon', 'pay', 'goods'])->where('order_sn', $orderSN)->first(); return $order; } /** * 根据订单号过期订单. * * @param string $orderSN * @return bool * * @author assimon * @copyright assimon * @link http://utf8.hk/ */ public function expiredOrderSN(string $orderSN): bool { return Order::query()->where('order_sn', $orderSN)->update(['status' => Order::STATUS_EXPIRED]); } /** * 设置订单优惠码已回退 * * @param string $orderSN * @return bool * * @author assimon * @copyright assimon * @link http://utf8.hk/ */ public function couponIsBack(string $orderSN): bool { return Order::query()->where('order_sn', $orderSN)->update(['coupon_ret_back' => Order::COUPON_BACK_OK]); } /** * 通过邮箱和查询密码查询 * * @param string $email 邮箱 * @param string $searchPwd 查询面面 * @return array|\Illuminate\Database\Concerns\BuildsQueries[]|\Illuminate\Database\Eloquent\Builder[]|\Illuminate\Database\Eloquent\Collection|\Illuminate\Database\Query\Builder[]|\Illuminate\Support\Collection * * @author assimon * @copyright assimon * @link http://utf8.hk/ */ public function withEmailAndPassword(string $email, string $searchPwd = '') { return Order::query() ->where('email', $email) ->when(!empty($searchPwd), function ($query) use ($searchPwd) { $query->where('search_pwd', $searchPwd); }) ->orderBy('created_at', 'DESC') ->take(5) ->get(); } /** * 通过订单号集合查询 * * @param array $orderSNS 订单号集合 * @return \Illuminate\Database\Eloquent\Builder[]|\Illuminate\Database\Eloquent\Collection|\Illuminate\Database\Query\Builder[]|\Illuminate\Support\Collection * * @author assimon * @copyright assimon * @link http://utf8.hk/ */ public function byOrderSNS(array $orderSNS) { return Order::query() ->whereIn('order_sn', $orderSNS) ->orderBy('created_at', 'DESC') ->take(5) ->get(); } } ================================================ FILE: app/Service/PayService.php ================================================ * @copyright assimon * @link http://utf8.hk/ */ namespace App\Service; use App\Models\Pay; class PayService { /** * 加载支付网关 * * @param string|int $payClient 支付场景客户端 * @return array|null * * @author assimon * @copyright assimon * @link http://utf8.hk/ */ public function pays(string $payClient = Pay::PAY_CLIENT_PC): ?array { $payGateway = Pay::query() ->whereIn('pay_client', [$payClient, Pay::PAY_CLIENT_ALL]) ->where('is_open', Pay::STATUS_OPEN) ->get(); return $payGateway ? $payGateway->toArray() : null; } /** * 通过支付标识获得支付配置 * * @param string $check 支付标识 * @return \Illuminate\Database\Eloquent\Builder|\Illuminate\Database\Eloquent\Model|object|null * * @author assimon * @copyright assimon * @link http://utf8.hk/ */ public function detailByCheck(string $check) { $gateway = Pay::query() ->where('pay_check', $check) ->where('is_open', Pay::STATUS_OPEN) ->first(); return $gateway; } /** * 通过id查询支付网关 * * @param int $id 支付网关id * @return \Illuminate\Database\Eloquent\Builder|\Illuminate\Database\Eloquent\Model|object|null * * @author assimon * @copyright assimon * @link http://utf8.hk/ */ public function detail(int $id) { $gateway = Pay::query() ->where('id', $id) ->where('is_open', Pay::STATUS_OPEN) ->first(); return $gateway; } } ================================================ FILE: app/User.php ================================================ 'datetime', ]; } ================================================ FILE: artisan ================================================ #!/usr/bin/env php make(Illuminate\Contracts\Console\Kernel::class); $status = $kernel->handle( $input = new Symfony\Component\Console\Input\ArgvInput, new Symfony\Component\Console\Output\ConsoleOutput ); /* |-------------------------------------------------------------------------- | Shutdown The Application |-------------------------------------------------------------------------- | | Once Artisan has finished running, we will fire off the shutdown events | so that any final work may be done by the application before we shut | down the process. This is the last thing to happen to the request. | */ $kernel->terminate($input, $status); exit($status); ================================================ FILE: bootstrap/app.php ================================================ singleton( Illuminate\Contracts\Http\Kernel::class, App\Http\Kernel::class ); $app->singleton( Illuminate\Contracts\Console\Kernel::class, App\Console\Kernel::class ); $app->singleton( Illuminate\Contracts\Debug\ExceptionHandler::class, App\Exceptions\Handler::class ); /* |-------------------------------------------------------------------------- | Return The Application |-------------------------------------------------------------------------- | | This script returns the application instance. The instance is given to | the calling script so we can separate the building of the instances | from the actual running of the application and sending responses. | */ return $app; ================================================ FILE: bootstrap/cache/.gitignore ================================================ * !.gitignore ================================================ FILE: composer.json ================================================ { "name": "laravel/laravel", "type": "project", "description": "The Laravel Framework.", "keywords": [ "framework", "laravel" ], "license": "MIT", "require": { "php": "^7.2.5|^8.0", "amrshawky/laravel-currency": "^4.0", "dcat/easy-excel": "^1.0", "dcat/laravel-admin": "2.*", "fideloper/proxy": "^4.4", "germey/geetest": "^3.1", "jenssegers/agent": "^2.6", "laravel/framework": "^6.20.26", "laravel/tinker": "^2.5", "mews/captcha": "^3.2", "paypal/rest-api-sdk-php": "^1.14", "simplesoftwareio/simple-qrcode": "2.0.0", "stripe/stripe-php": "^7.84", "xhat/payjs-laravel": "^1.6", "yansongda/pay": "^2.10" }, "require-dev": { "facade/ignition": "^1.16.15", "fakerphp/faker": "^1.9.1", "mockery/mockery": "^1.0", "nunomaduro/collision": "^3.0", "phpunit/phpunit": "^8.5.8|^9.3.3" }, "config": { "optimize-autoloader": true, "preferred-install": "dist", "sort-packages": true, "platform-check": false }, "extra": { "laravel": { "dont-discover": [] } }, "autoload": { "psr-4": { "App\\": "app/" }, "classmap": [ "database/seeds", "database/factories" ], "files":[ "app/Helpers/functions.php" ] }, "autoload-dev": { "psr-4": { "Tests\\": "tests/" } }, "minimum-stability": "dev", "prefer-stable": true, "scripts": { "post-autoload-dump": [ "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", "@php artisan package:discover --ansi" ], "post-root-package-install": [ "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"" ], "post-create-project-cmd": [ "@php artisan key:generate --ansi" ] } } ================================================ FILE: config/admin.php ================================================ '独角数卡', /* |-------------------------------------------------------------------------- | dcat-admin logo |-------------------------------------------------------------------------- | | The logo of all admin pages. You can also set it as an image by using a | `img` tag, eg 'Admin logo'. | */ 'logo' => '  独角 数卡', /* |-------------------------------------------------------------------------- | dcat-admin mini logo |-------------------------------------------------------------------------- | | The logo of all admin pages when the sidebar menu is collapsed. You can | also set it as an image by using a `img` tag, eg | 'Admin logo'. | */ 'logo-mini' => '', /* |-------------------------------------------------------------------------- | User default avatar |-------------------------------------------------------------------------- | | Set a default avatar for newly created users. | */ 'default_avatar' => '@admin/images/default-avatar.jpg', /* |-------------------------------------------------------------------------- | dcat-admin route settings |-------------------------------------------------------------------------- | | The routing configuration of the admin page, including the path prefix, | the controller namespace, and the default middleware. If you want to | access through the root path, just set the prefix to empty string. | */ 'route' => [ 'domain' => env('ADMIN_ROUTE_DOMAIN'), 'prefix' => env('ADMIN_ROUTE_PREFIX', 'admin'), 'namespace' => 'App\\Admin\\Controllers', 'middleware' => ['web', 'admin'], 'enable_session_middleware' => false, ], /* |-------------------------------------------------------------------------- | dcat-admin install directory |-------------------------------------------------------------------------- | | The installation directory of the controller and routing configuration | files of the administration page. The default is `app/Admin`, which must | be set before running `artisan admin::install` to take effect. | */ 'directory' => app_path('Admin'), /* |-------------------------------------------------------------------------- | dcat-admin html title |-------------------------------------------------------------------------- | | Html title for all pages. | */ 'title' => '独角数卡 - 后台控制中心', /* |-------------------------------------------------------------------------- | Assets hostname |-------------------------------------------------------------------------- | */ 'assets_server' => env('ADMIN_ASSETS_SERVER'), /* |-------------------------------------------------------------------------- | Access via `https` |-------------------------------------------------------------------------- | | If your page is going to be accessed via https, set it to `true`. | */ 'https' => env('ADMIN_HTTPS', false), /* |-------------------------------------------------------------------------- | dcat-admin auth setting |-------------------------------------------------------------------------- | | Authentication settings for all admin pages. Include an authentication | guard and a user provider setting of authentication driver. | | You can specify a controller for `login` `logout` and other auth routes. | */ 'auth' => [ 'enable' => true, 'controller' => App\Admin\Controllers\AuthController::class, 'guard' => 'admin', 'guards' => [ 'admin' => [ 'driver' => 'session', 'provider' => 'admin', ], ], 'providers' => [ 'admin' => [ 'driver' => 'eloquent', 'model' => Dcat\Admin\Models\Administrator::class, ], ], // Add "remember me" to login form 'remember' => true, // All method to path like: auth/users/*/edit // or specific method to path like: get:auth/users. 'except' => [ 'auth/login', 'auth/logout', ], 'enable_session_middleware' => false, ], /* |-------------------------------------------------------------------------- | The global Grid setting |-------------------------------------------------------------------------- */ 'grid' => [ // The global Grid action display class. 'grid_action_class' => Dcat\Admin\Grid\Displayers\DropdownActions::class, // The global Grid batch action display class. 'batch_action_class' => Dcat\Admin\Grid\Tools\BatchActions::class, // The global Grid pagination display class. 'paginator_class' => Dcat\Admin\Grid\Tools\Paginator::class, 'actions' => [ 'view' => Dcat\Admin\Grid\Actions\Show::class, 'edit' => Dcat\Admin\Grid\Actions\Edit::class, 'quick_edit' => Dcat\Admin\Grid\Actions\QuickEdit::class, 'delete' => Dcat\Admin\Grid\Actions\Delete::class, 'batch_delete' => Dcat\Admin\Grid\Tools\BatchDelete::class, ], // The global Grid column selector setting. 'column_selector' => [ 'store' => Dcat\Admin\Grid\ColumnSelector\SessionStore::class, 'store_params' => [ 'driver' => 'file', ], ], ], /* |-------------------------------------------------------------------------- | dcat-admin helpers setting. |-------------------------------------------------------------------------- */ 'helpers' => [ 'enable' => false, ], /* |-------------------------------------------------------------------------- | dcat-admin permission setting |-------------------------------------------------------------------------- | | Permission settings for all admin pages. | */ 'permission' => [ // Whether enable permission. 'enable' => true, // All method to path like: auth/users/*/edit // or specific method to path like: get:auth/users. 'except' => [ '/', 'auth/login', 'auth/logout', 'auth/setting', ], ], /* |-------------------------------------------------------------------------- | dcat-admin menu setting |-------------------------------------------------------------------------- | */ 'menu' => [ 'cache' => [ // enable cache or not 'enable' => false, 'store' => 'file', ], // Whether enable menu bind to a permission. 'bind_permission' => true, // Whether enable role bind to menu. 'role_bind_menu' => true, // Whether enable permission bind to menu. 'permission_bind_menu' => true, 'default_icon' => 'feather icon-circle', ], /* |-------------------------------------------------------------------------- | dcat-admin upload setting |-------------------------------------------------------------------------- | | File system configuration for form upload files and images, including | disk and upload path. | */ 'upload' => [ // Disk in `config/filesystem.php`. 'disk' => 'admin', // Image and file upload path under the disk above. 'directory' => [ 'image' => 'images', 'file' => 'files', ], ], /* |-------------------------------------------------------------------------- | dcat-admin database settings |-------------------------------------------------------------------------- | | Here are database settings for dcat-admin builtin model & tables. | */ 'database' => [ // Database connection for following tables. 'connection' => '', // User tables and model. 'users_table' => 'admin_users', 'users_model' => Dcat\Admin\Models\Administrator::class, // Role table and model. 'roles_table' => 'admin_roles', 'roles_model' => Dcat\Admin\Models\Role::class, // Permission table and model. 'permissions_table' => 'admin_permissions', 'permissions_model' => Dcat\Admin\Models\Permission::class, // Menu table and model. 'menu_table' => 'admin_menu', 'menu_model' => Dcat\Admin\Models\Menu::class, // Pivot table for table above. 'role_users_table' => 'admin_role_users', 'role_permissions_table' => 'admin_role_permissions', 'role_menu_table' => 'admin_role_menu', 'permission_menu_table' => 'admin_permission_menu', 'settings_table' => 'admin_settings', 'extensions_table' => 'admin_extensions', 'extension_histories_table' => 'admin_extension_histories', ], /* |-------------------------------------------------------------------------- | Application layout |-------------------------------------------------------------------------- | | This value is the layout of admin pages. */ 'layout' => [ // default, blue, blue-light, green 'color' => 'default', // sidebar-separate 'body_class' => [], 'horizontal_menu' => false, 'sidebar_collapsed' => false, // light, primary, dark 'sidebar_style' => 'light', 'dark_mode_switch' => true, // bg-primary, bg-info, bg-warning, bg-success, bg-danger, bg-dark 'navbar_color' => '', ], /* |-------------------------------------------------------------------------- | The exception handler class |-------------------------------------------------------------------------- | */ 'exception_handler' => Dcat\Admin\Exception\Handler::class, /* |-------------------------------------------------------------------------- | Enable default breadcrumb |-------------------------------------------------------------------------- | | Whether enable default breadcrumb for every page content. */ 'enable_default_breadcrumb' => true, /* |-------------------------------------------------------------------------- | Extension |-------------------------------------------------------------------------- */ 'extension' => [ // When you use command `php artisan admin:ext-make` to generate extensions, // the extension files will be generated in this directory. 'dir' => base_path('dcat-admin-extensions'), ], ]; ================================================ FILE: config/app.php ================================================ env('APP_NAME', 'Laravel'), /* |-------------------------------------------------------------------------- | Application Environment |-------------------------------------------------------------------------- | | This value determines the "environment" your application is currently | running in. This may determine how you prefer to configure various | services the application utilizes. Set this in your ".env" file. | */ 'env' => env('APP_ENV', 'production'), /* |-------------------------------------------------------------------------- | Application Debug Mode |-------------------------------------------------------------------------- | | When your application is in debug mode, detailed error messages with | stack traces will be shown on every error that occurs within your | application. If disabled, a simple generic error page is shown. | */ 'debug' => (bool) env('APP_DEBUG', false), /* |-------------------------------------------------------------------------- | Application URL |-------------------------------------------------------------------------- | | This URL is used by the console to properly generate URLs when using | the Artisan command line tool. You should set this to the root of | your application so that it is used when running Artisan tasks. | */ 'url' => env('APP_URL', 'http://localhost'), 'asset_url' => env('ASSET_URL', null), /* |-------------------------------------------------------------------------- | Application Timezone |-------------------------------------------------------------------------- | | Here you may specify the default timezone for your application, which | will be used by the PHP date and date-time functions. We have gone | ahead and set this to a sensible default for you out of the box. | */ 'timezone' => 'PRC', /* |-------------------------------------------------------------------------- | Application Locale Configuration |-------------------------------------------------------------------------- | | The application locale determines the default locale that will be used | by the translation service provider. You are free to set this value | to any of the locales which will be supported by the application. | */ 'locale' => env('DUJIAO_ADMIN_LANGUAGE', 'zh_CN'), /* |-------------------------------------------------------------------------- | Application Fallback Locale |-------------------------------------------------------------------------- | | The fallback locale determines the locale to use when the current one | is not available. You may change the value to correspond to any of | the language folders that are provided through your application. | */ 'fallback_locale' => 'en', /* |-------------------------------------------------------------------------- | Faker Locale |-------------------------------------------------------------------------- | | This locale will be used by the Faker PHP library when generating fake | data for your database seeds. For example, this will be used to get | localized telephone numbers, street address information and more. | */ 'faker_locale' => 'en_US', /* |-------------------------------------------------------------------------- | Encryption Key |-------------------------------------------------------------------------- | | This key is used by the Illuminate encrypter service and should be set | to a random, 32 character string, otherwise these encrypted strings | will not be safe. Please do this before deploying an application! | */ 'key' => env('APP_KEY'), 'cipher' => 'AES-256-CBC', /* |-------------------------------------------------------------------------- | Autoloaded Service Providers |-------------------------------------------------------------------------- | | The service providers listed here will be automatically loaded on the | request to your application. Feel free to add your own services to | this array to grant expanded functionality to your applications. | */ 'providers' => [ /* * Laravel Framework Service Providers... */ Illuminate\Auth\AuthServiceProvider::class, Illuminate\Broadcasting\BroadcastServiceProvider::class, Illuminate\Bus\BusServiceProvider::class, Illuminate\Cache\CacheServiceProvider::class, Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class, Illuminate\Cookie\CookieServiceProvider::class, Illuminate\Database\DatabaseServiceProvider::class, Illuminate\Encryption\EncryptionServiceProvider::class, Illuminate\Filesystem\FilesystemServiceProvider::class, Illuminate\Foundation\Providers\FoundationServiceProvider::class, Illuminate\Hashing\HashServiceProvider::class, Illuminate\Mail\MailServiceProvider::class, Illuminate\Notifications\NotificationServiceProvider::class, Illuminate\Pagination\PaginationServiceProvider::class, Illuminate\Pipeline\PipelineServiceProvider::class, Illuminate\Queue\QueueServiceProvider::class, Illuminate\Redis\RedisServiceProvider::class, Illuminate\Auth\Passwords\PasswordResetServiceProvider::class, Illuminate\Session\SessionServiceProvider::class, Illuminate\Translation\TranslationServiceProvider::class, Illuminate\Validation\ValidationServiceProvider::class, Illuminate\View\ViewServiceProvider::class, /* * Package Service Providers... */ /* * Application Service Providers... */ App\Providers\AppServiceProvider::class, App\Providers\AuthServiceProvider::class, // App\Providers\BroadcastServiceProvider::class, App\Providers\EventServiceProvider::class, App\Providers\RouteServiceProvider::class, Jenssegers\Agent\AgentServiceProvider::class, Germey\Geetest\GeetestServiceProvider::class ], /* |-------------------------------------------------------------------------- | Class Aliases |-------------------------------------------------------------------------- | | This array of class aliases will be registered when this application | is started. However, feel free to register as many as you wish as | the aliases are "lazy" loaded so they don't hinder performance. | */ 'aliases' => [ 'App' => Illuminate\Support\Facades\App::class, 'Arr' => Illuminate\Support\Arr::class, 'Artisan' => Illuminate\Support\Facades\Artisan::class, 'Auth' => Illuminate\Support\Facades\Auth::class, 'Blade' => Illuminate\Support\Facades\Blade::class, 'Broadcast' => Illuminate\Support\Facades\Broadcast::class, 'Bus' => Illuminate\Support\Facades\Bus::class, 'Cache' => Illuminate\Support\Facades\Cache::class, 'Config' => Illuminate\Support\Facades\Config::class, 'Cookie' => Illuminate\Support\Facades\Cookie::class, 'Crypt' => Illuminate\Support\Facades\Crypt::class, 'DB' => Illuminate\Support\Facades\DB::class, 'Eloquent' => Illuminate\Database\Eloquent\Model::class, 'Event' => Illuminate\Support\Facades\Event::class, 'File' => Illuminate\Support\Facades\File::class, 'Gate' => Illuminate\Support\Facades\Gate::class, 'Hash' => Illuminate\Support\Facades\Hash::class, 'Lang' => Illuminate\Support\Facades\Lang::class, 'Log' => Illuminate\Support\Facades\Log::class, 'Mail' => Illuminate\Support\Facades\Mail::class, 'Notification' => Illuminate\Support\Facades\Notification::class, 'Password' => Illuminate\Support\Facades\Password::class, 'Queue' => Illuminate\Support\Facades\Queue::class, 'Redirect' => Illuminate\Support\Facades\Redirect::class, 'Redis' => Illuminate\Support\Facades\Redis::class, 'Request' => Illuminate\Support\Facades\Request::class, 'Response' => Illuminate\Support\Facades\Response::class, 'Route' => Illuminate\Support\Facades\Route::class, 'Schema' => Illuminate\Support\Facades\Schema::class, 'Session' => Illuminate\Support\Facades\Session::class, 'Storage' => Illuminate\Support\Facades\Storage::class, 'Str' => Illuminate\Support\Str::class, 'URL' => Illuminate\Support\Facades\URL::class, 'Validator' => Illuminate\Support\Facades\Validator::class, 'View' => Illuminate\Support\Facades\View::class, 'Agent' => Jenssegers\Agent\Facades\Agent::class, 'Geetest' => Germey\Geetest\Geetest::class, ], ]; ================================================ FILE: config/auth.php ================================================ [ 'guard' => 'web', 'passwords' => 'users', ], /* |-------------------------------------------------------------------------- | Authentication Guards |-------------------------------------------------------------------------- | | Next, you may define every authentication guard for your application. | Of course, a great default configuration has been defined for you | here which uses session storage and the Eloquent user provider. | | All authentication drivers have a user provider. This defines how the | users are actually retrieved out of your database or other storage | mechanisms used by this application to persist your user's data. | | Supported: "session", "token" | */ 'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'token', 'provider' => 'users', 'hash' => false, ], ], /* |-------------------------------------------------------------------------- | User Providers |-------------------------------------------------------------------------- | | All authentication drivers have a user provider. This defines how the | users are actually retrieved out of your database or other storage | mechanisms used by this application to persist your user's data. | | If you have multiple user tables or models you may configure multiple | sources which represent each model / table. These sources may then | be assigned to any extra authentication guards you have defined. | | Supported: "database", "eloquent" | */ 'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\User::class, ], // 'users' => [ // 'driver' => 'database', // 'table' => 'users', // ], ], /* |-------------------------------------------------------------------------- | Resetting Passwords |-------------------------------------------------------------------------- | | You may specify multiple password reset configurations if you have more | than one user table or model in the application and you want to have | separate password reset settings based on the specific user types. | | The expire time is the number of minutes that the reset token should be | considered valid. This security feature keeps tokens short-lived so | they have less time to be guessed. You may change this as needed. | */ 'passwords' => [ 'users' => [ 'provider' => 'users', 'table' => 'password_resets', 'expire' => 60, 'throttle' => 60, ], ], /* |-------------------------------------------------------------------------- | Password Confirmation Timeout |-------------------------------------------------------------------------- | | Here you may define the amount of seconds before a password confirmation | times out and the user is prompted to re-enter their password via the | confirmation screen. By default, the timeout lasts for three hours. | */ 'password_timeout' => 10800, ]; ================================================ FILE: config/broadcasting.php ================================================ env('BROADCAST_DRIVER', 'null'), /* |-------------------------------------------------------------------------- | Broadcast Connections |-------------------------------------------------------------------------- | | Here you may define all of the broadcast connections that will be used | to broadcast events to other systems or over websockets. Samples of | each available type of connection are provided inside this array. | */ 'connections' => [ 'pusher' => [ 'driver' => 'pusher', 'key' => env('PUSHER_APP_KEY'), 'secret' => env('PUSHER_APP_SECRET'), 'app_id' => env('PUSHER_APP_ID'), 'options' => [ 'cluster' => env('PUSHER_APP_CLUSTER'), 'useTLS' => true, ], ], 'redis' => [ 'driver' => 'redis', 'connection' => 'default', ], 'log' => [ 'driver' => 'log', ], 'null' => [ 'driver' => 'null', ], ], ]; ================================================ FILE: config/cache.php ================================================ env('CACHE_DRIVER', 'file'), /* |-------------------------------------------------------------------------- | Cache Stores |-------------------------------------------------------------------------- | | Here you may define all of the cache "stores" for your application as | well as their drivers. You may even define multiple stores for the | same cache driver to group types of items stored in your caches. | */ 'stores' => [ 'apc' => [ 'driver' => 'apc', ], 'array' => [ 'driver' => 'array', ], 'database' => [ 'driver' => 'database', 'table' => 'cache', 'connection' => null, ], 'file' => [ 'driver' => 'file', 'path' => storage_path('framework/cache/data'), ], 'memcached' => [ 'driver' => 'memcached', 'persistent_id' => env('MEMCACHED_PERSISTENT_ID'), 'sasl' => [ env('MEMCACHED_USERNAME'), env('MEMCACHED_PASSWORD'), ], 'options' => [ // Memcached::OPT_CONNECT_TIMEOUT => 2000, ], 'servers' => [ [ 'host' => env('MEMCACHED_HOST', '127.0.0.1'), 'port' => env('MEMCACHED_PORT', 11211), 'weight' => 100, ], ], ], 'redis' => [ 'driver' => 'redis', 'connection' => 'cache', ], 'dynamodb' => [ 'driver' => 'dynamodb', 'key' => env('AWS_ACCESS_KEY_ID'), 'secret' => env('AWS_SECRET_ACCESS_KEY'), 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), 'table' => env('DYNAMODB_CACHE_TABLE', 'cache'), 'endpoint' => env('DYNAMODB_ENDPOINT'), ], ], /* |-------------------------------------------------------------------------- | Cache Key Prefix |-------------------------------------------------------------------------- | | When utilizing a RAM based store such as APC or Memcached, there might | be other applications utilizing the same cache. So, we'll specify a | value to get prefixed to all our keys so we can avoid collisions. | */ 'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_cache'), ]; ================================================ FILE: config/database.php ================================================ env('DB_CONNECTION', 'mysql'), /* |-------------------------------------------------------------------------- | Database Connections |-------------------------------------------------------------------------- | | Here are each of the database connections setup for your application. | Of course, examples of configuring each database platform that is | supported by Laravel is shown below to make development simple. | | | All database work in Laravel is done through the PHP PDO facilities | so make sure you have the driver for your particular database of | choice installed on your machine before you begin development. | */ 'connections' => [ 'sqlite' => [ 'driver' => 'sqlite', 'url' => env('DATABASE_URL'), 'database' => env('DB_DATABASE', database_path('database.sqlite')), 'prefix' => '', 'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true), ], 'mysql' => [ 'driver' => 'mysql', 'url' => env('DATABASE_URL'), 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', '3306'), 'database' => env('DB_DATABASE', 'forge'), 'username' => env('DB_USERNAME', 'forge'), 'password' => env('DB_PASSWORD', ''), 'unix_socket' => env('DB_SOCKET', ''), 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', 'prefix_indexes' => true, 'strict' => true, 'engine' => null, 'options' => extension_loaded('pdo_mysql') ? array_filter([ PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), ]) : [], ], 'pgsql' => [ 'driver' => 'pgsql', 'url' => env('DATABASE_URL'), 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', '5432'), 'database' => env('DB_DATABASE', 'forge'), 'username' => env('DB_USERNAME', 'forge'), 'password' => env('DB_PASSWORD', ''), 'charset' => 'utf8', 'prefix' => '', 'prefix_indexes' => true, 'schema' => 'public', 'sslmode' => 'prefer', ], 'sqlsrv' => [ 'driver' => 'sqlsrv', 'url' => env('DATABASE_URL'), 'host' => env('DB_HOST', 'localhost'), 'port' => env('DB_PORT', '1433'), 'database' => env('DB_DATABASE', 'forge'), 'username' => env('DB_USERNAME', 'forge'), 'password' => env('DB_PASSWORD', ''), 'charset' => 'utf8', 'prefix' => '', 'prefix_indexes' => true, ], ], /* |-------------------------------------------------------------------------- | Migration Repository Table |-------------------------------------------------------------------------- | | This table keeps track of all the migrations that have already run for | your application. Using this information, we can determine which of | the migrations on disk haven't actually been run in the database. | */ 'migrations' => 'migrations', /* |-------------------------------------------------------------------------- | Redis Databases |-------------------------------------------------------------------------- | | Redis is an open source, fast, and advanced key-value store that also | provides a richer body of commands than a typical key-value system | such as APC or Memcached. Laravel makes it easy to dig right in. | */ 'redis' => [ 'client' => env('REDIS_CLIENT', 'phpredis'), 'options' => [ 'cluster' => env('REDIS_CLUSTER', 'redis'), 'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'), ], 'default' => [ 'url' => env('REDIS_URL'), 'host' => env('REDIS_HOST', '127.0.0.1'), 'password' => env('REDIS_PASSWORD', null), 'port' => (int) env('REDIS_PORT', '6379'), 'database' => env('REDIS_DB', '0'), ], 'cache' => [ 'url' => env('REDIS_URL'), 'host' => env('REDIS_HOST', '127.0.0.1'), 'password' => env('REDIS_PASSWORD', null), 'port' => (int) env('REDIS_PORT', '6379'), 'database' => env('REDIS_CACHE_DB', '1'), ], ], ]; ================================================ FILE: config/dujiaoka.php ================================================ * @copyright assimon * @link http://utf8.hk/ */ return [ 'dujiaoka_version' => '2.0.6', // 模板集合 'templates' => [ 'unicorn' => '官方[unicorn-独角兽]', 'luna' => 'Luna[Julyssn]', 'hyper' => 'hyper[Bimoe]' ], // 语言 'language' => [ 'zh_CN' => '简体中文', 'zh_TW' => '繁体中文', ], ]; ================================================ FILE: config/filesystems.php ================================================ env('FILESYSTEM_DRIVER', 'local'), /* |-------------------------------------------------------------------------- | Default Cloud Filesystem Disk |-------------------------------------------------------------------------- | | Many applications store files both locally and in the cloud. For this | reason, you may specify a default "cloud" driver here. This driver | will be bound as the Cloud disk implementation in the container. | */ 'cloud' => env('FILESYSTEM_CLOUD', 's3'), /* |-------------------------------------------------------------------------- | Filesystem Disks |-------------------------------------------------------------------------- | | Here you may configure as many filesystem "disks" as you wish, and you | may even configure multiple disks of the same driver. Defaults have | been setup for each driver as an example of the required options. | | Supported Drivers: "local", "ftp", "sftp", "s3" | */ 'disks' => [ 'local' => [ 'driver' => 'local', 'root' => storage_path('app'), ], 'public' => [ 'driver' => 'local', 'root' => storage_path('app/public'), 'url' => env('APP_URL').'/storage', 'visibility' => 'public', ], 's3' => [ 'driver' => 's3', 'key' => env('AWS_ACCESS_KEY_ID'), 'secret' => env('AWS_SECRET_ACCESS_KEY'), 'region' => env('AWS_DEFAULT_REGION'), 'bucket' => env('AWS_BUCKET'), 'url' => env('AWS_URL'), 'endpoint' => env('AWS_ENDPOINT'), ], 'admin' => [ 'driver' => 'local', 'root' => public_path('uploads'), 'visibility' => 'public', 'url' => env('APP_URL').'/uploads', ], ], ]; ================================================ FILE: config/geetest.php ================================================ 'zh-cn', /* |-------------------------------------------------------------------------- | Config Geetest Id |-------------------------------------------------------------------------- | | Here you can config your yunpian api key from yunpian provided. | */ 'id' => env('GEETEST_ID'), /* |-------------------------------------------------------------------------- | Config Geetest Key |-------------------------------------------------------------------------- | | Here you can config your yunpian api key from yunpian provided. | */ 'key' => env('GEETEST_KEY'), /* |-------------------------------------------------------------------------- | Config Geetest URL |-------------------------------------------------------------------------- | | Here you can config your geetest url for ajax validation. | */ 'url' => '/geetest', /* |-------------------------------------------------------------------------- | Config Geetest Protocol |-------------------------------------------------------------------------- | | Here you can config your geetest url for ajax validation. | | Options: http or https | */ 'protocol' => 'http', /* |-------------------------------------------------------------------------- | Config Geetest Product |-------------------------------------------------------------------------- | | Here you can config your geetest url for ajax validation. | | Options: float, popup, custom, bind | */ 'product' => 'float', /* |-------------------------------------------------------------------------- | Config Client Fail Alert Text |-------------------------------------------------------------------------- | | Here you can config the alert text when it failed in client. | */ 'client_fail_alert' => '请正确完成验证码操作', /* |-------------------------------------------------------------------------- | Config Server Fail Alert |-------------------------------------------------------------------------- | | Here you can config the alert text when it failed in server (two factor validation). | */ 'server_fail_alert' => '验证码校验失败', ]; ================================================ FILE: config/hashing.php ================================================ 'bcrypt', /* |-------------------------------------------------------------------------- | Bcrypt Options |-------------------------------------------------------------------------- | | Here you may specify the configuration options that should be used when | passwords are hashed using the Bcrypt algorithm. This will allow you | to control the amount of time it takes to hash the given password. | */ 'bcrypt' => [ 'rounds' => env('BCRYPT_ROUNDS', 10), ], /* |-------------------------------------------------------------------------- | Argon Options |-------------------------------------------------------------------------- | | Here you may specify the configuration options that should be used when | passwords are hashed using the Argon algorithm. These will allow you | to control the amount of time it takes to hash the given password. | */ 'argon' => [ 'memory' => 1024, 'threads' => 2, 'time' => 2, ], ]; ================================================ FILE: config/logging.php ================================================ env('LOG_CHANNEL', 'stack'), /* |-------------------------------------------------------------------------- | Log Channels |-------------------------------------------------------------------------- | | Here you may configure the log channels for your application. Out of | the box, Laravel uses the Monolog PHP logging library. This gives | you a variety of powerful log handlers / formatters to utilize. | | Available Drivers: "single", "daily", "slack", "syslog", | "errorlog", "monolog", | "custom", "stack" | */ 'channels' => [ 'stack' => [ 'driver' => 'stack', 'channels' => ['single'], 'ignore_exceptions' => false, ], 'single' => [ 'driver' => 'single', 'path' => storage_path('logs/laravel.log'), 'level' => 'debug', ], 'daily' => [ 'driver' => 'daily', 'path' => storage_path('logs/laravel.log'), 'level' => 'debug', 'days' => 14, ], 'slack' => [ 'driver' => 'slack', 'url' => env('LOG_SLACK_WEBHOOK_URL'), 'username' => 'Laravel Log', 'emoji' => ':boom:', 'level' => 'critical', ], 'papertrail' => [ 'driver' => 'monolog', 'level' => 'debug', 'handler' => SyslogUdpHandler::class, 'handler_with' => [ 'host' => env('PAPERTRAIL_URL'), 'port' => env('PAPERTRAIL_PORT'), ], ], 'stderr' => [ 'driver' => 'monolog', 'handler' => StreamHandler::class, 'formatter' => env('LOG_STDERR_FORMATTER'), 'with' => [ 'stream' => 'php://stderr', ], ], 'syslog' => [ 'driver' => 'syslog', 'level' => 'debug', ], 'errorlog' => [ 'driver' => 'errorlog', 'level' => 'debug', ], 'null' => [ 'driver' => 'monolog', 'handler' => NullHandler::class, ], 'emergency' => [ 'path' => storage_path('logs/laravel.log'), ], ], ]; ================================================ FILE: config/mail.php ================================================ env('MAIL_DRIVER', 'smtp'), /* |-------------------------------------------------------------------------- | SMTP Host Address |-------------------------------------------------------------------------- | | Here you may provide the host address of the SMTP server used by your | applications. A default option is provided that is compatible with | the Mailgun mail service which will provide reliable deliveries. | */ 'host' => env('MAIL_HOST', 'smtp.mailgun.org'), /* |-------------------------------------------------------------------------- | SMTP Host Port |-------------------------------------------------------------------------- | | This is the SMTP port used by your application to deliver e-mails to | users of the application. Like the host we have set this value to | stay compatible with the Mailgun e-mail application by default. | */ 'port' => env('MAIL_PORT', 587), /* |-------------------------------------------------------------------------- | Global "From" Address |-------------------------------------------------------------------------- | | You may wish for all e-mails sent by your application to be sent from | the same address. Here, you may specify a name and address that is | used globally for all e-mails that are sent by your application. | */ 'from' => [ 'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'), 'name' => env('MAIL_FROM_NAME', 'Example'), ], /* |-------------------------------------------------------------------------- | E-Mail Encryption Protocol |-------------------------------------------------------------------------- | | Here you may specify the encryption protocol that should be used when | the application send e-mail messages. A sensible default using the | transport layer security protocol should provide great security. | */ 'encryption' => env('MAIL_ENCRYPTION', 'tls'), /* |-------------------------------------------------------------------------- | SMTP Server Username |-------------------------------------------------------------------------- | | If your SMTP server requires a username for authentication, you should | set it here. This will get used to authenticate with your server on | connection. You may also set the "password" value below this one. | */ 'username' => env('MAIL_USERNAME'), 'password' => env('MAIL_PASSWORD'), /* |-------------------------------------------------------------------------- | Sendmail System Path |-------------------------------------------------------------------------- | | When using the "sendmail" driver to send e-mails, we will need to know | the path to where Sendmail lives on this server. A default path has | been provided here, which will work well on most of your systems. | */ 'sendmail' => '/usr/sbin/sendmail -bs', /* |-------------------------------------------------------------------------- | Markdown Mail Settings |-------------------------------------------------------------------------- | | If you are using Markdown based email rendering, you may configure your | theme and component paths here, allowing you to customize the design | of the emails. Or, you may simply stick with the Laravel defaults! | */ 'markdown' => [ 'theme' => 'default', 'paths' => [ resource_path('views/vendor/mail'), ], ], /* |-------------------------------------------------------------------------- | Log Channel |-------------------------------------------------------------------------- | | If you are using the "log" driver, you may specify the logging channel | if you prefer to keep mail messages separate from other log entries | for simpler reading. Otherwise, the default channel will be used. | */ 'log_channel' => env('MAIL_LOG_CHANNEL'), ]; ================================================ FILE: config/queue.php ================================================ env('QUEUE_CONNECTION', 'sync'), /* |-------------------------------------------------------------------------- | Queue Connections |-------------------------------------------------------------------------- | | Here you may configure the connection information for each server that | is used by your application. A default configuration has been added | for each back-end shipped with Laravel. You are free to add more. | | Drivers: "sync", "database", "beanstalkd", "sqs", "redis", "null" | */ 'connections' => [ 'sync' => [ 'driver' => 'sync', ], 'database' => [ 'driver' => 'database', 'table' => 'jobs', 'queue' => 'default', 'retry_after' => 90, ], 'beanstalkd' => [ 'driver' => 'beanstalkd', 'host' => 'localhost', 'queue' => 'default', 'retry_after' => 90, 'block_for' => 0, ], 'sqs' => [ 'driver' => 'sqs', 'key' => env('AWS_ACCESS_KEY_ID'), 'secret' => env('AWS_SECRET_ACCESS_KEY'), 'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'), 'queue' => env('SQS_QUEUE', 'your-queue-name'), 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), ], 'redis' => [ 'driver' => 'redis', 'connection' => 'default', 'queue' => env('REDIS_QUEUE', 'default'), 'retry_after' => 90, 'block_for' => null, ], ], /* |-------------------------------------------------------------------------- | Failed Queue Jobs |-------------------------------------------------------------------------- | | These options configure the behavior of failed queue job logging so you | can control which database and table are used to store the jobs that | have failed. You may change them to any database / table you wish. | */ 'failed' => [ 'driver' => env('QUEUE_FAILED_DRIVER', 'database'), 'database' => env('DB_CONNECTION', 'mysql'), 'table' => 'failed_jobs', ], ]; ================================================ FILE: config/services.php ================================================ [ 'domain' => env('MAILGUN_DOMAIN'), 'secret' => env('MAILGUN_SECRET'), 'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'), ], 'postmark' => [ 'token' => env('POSTMARK_TOKEN'), ], 'ses' => [ 'key' => env('AWS_ACCESS_KEY_ID'), 'secret' => env('AWS_SECRET_ACCESS_KEY'), 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), ], ]; ================================================ FILE: config/session.php ================================================ env('SESSION_DRIVER', 'file'), /* |-------------------------------------------------------------------------- | Session Lifetime |-------------------------------------------------------------------------- | | Here you may specify the number of minutes that you wish the session | to be allowed to remain idle before it expires. If you want them | to immediately expire on the browser closing, set that option. | */ 'lifetime' => env('SESSION_LIFETIME', 120), 'expire_on_close' => false, /* |-------------------------------------------------------------------------- | Session Encryption |-------------------------------------------------------------------------- | | This option allows you to easily specify that all of your session data | should be encrypted before it is stored. All encryption will be run | automatically by Laravel and you can use the Session like normal. | */ 'encrypt' => false, /* |-------------------------------------------------------------------------- | Session File Location |-------------------------------------------------------------------------- | | When using the native session driver, we need a location where session | files may be stored. A default has been set for you but a different | location may be specified. This is only needed for file sessions. | */ 'files' => storage_path('framework/sessions'), /* |-------------------------------------------------------------------------- | Session Database Connection |-------------------------------------------------------------------------- | | When using the "database" or "redis" session drivers, you may specify a | connection that should be used to manage these sessions. This should | correspond to a connection in your database configuration options. | */ 'connection' => env('SESSION_CONNECTION', null), /* |-------------------------------------------------------------------------- | Session Database Table |-------------------------------------------------------------------------- | | When using the "database" session driver, you may specify the table we | should use to manage the sessions. Of course, a sensible default is | provided for you; however, you are free to change this as needed. | */ 'table' => 'sessions', /* |-------------------------------------------------------------------------- | Session Cache Store |-------------------------------------------------------------------------- | | When using the "apc", "memcached", or "dynamodb" session drivers you may | list a cache store that should be used for these sessions. This value | must match with one of the application's configured cache "stores". | */ 'store' => env('SESSION_STORE', null), /* |-------------------------------------------------------------------------- | Session Sweeping Lottery |-------------------------------------------------------------------------- | | Some session drivers must manually sweep their storage location to get | rid of old sessions from storage. Here are the chances that it will | happen on a given request. By default, the odds are 2 out of 100. | */ 'lottery' => [2, 100], /* |-------------------------------------------------------------------------- | Session Cookie Name |-------------------------------------------------------------------------- | | Here you may change the name of the cookie used to identify a session | instance by ID. The name specified here will get used every time a | new session cookie is created by the framework for every driver. | */ 'cookie' => env( 'SESSION_COOKIE', Str::slug(env('APP_NAME', 'laravel'), '_').'_session' ), /* |-------------------------------------------------------------------------- | Session Cookie Path |-------------------------------------------------------------------------- | | The session cookie path determines the path for which the cookie will | be regarded as available. Typically, this will be the root path of | your application but you are free to change this when necessary. | */ 'path' => '/', /* |-------------------------------------------------------------------------- | Session Cookie Domain |-------------------------------------------------------------------------- | | Here you may change the domain of the cookie used to identify a session | in your application. This will determine which domains the cookie is | available to in your application. A sensible default has been set. | */ 'domain' => env('SESSION_DOMAIN', null), /* |-------------------------------------------------------------------------- | HTTPS Only Cookies |-------------------------------------------------------------------------- | | By setting this option to true, session cookies will only be sent back | to the server if the browser has a HTTPS connection. This will keep | the cookie from being sent to you if it can not be done securely. | */ 'secure' => env('SESSION_SECURE_COOKIE', false), /* |-------------------------------------------------------------------------- | HTTP Access Only |-------------------------------------------------------------------------- | | Setting this value to true will prevent JavaScript from accessing the | value of the cookie and the cookie will only be accessible through | the HTTP protocol. You are free to modify this option if needed. | */ 'http_only' => true, /* |-------------------------------------------------------------------------- | Same-Site Cookies |-------------------------------------------------------------------------- | | This option determines how your cookies behave when cross-site requests | take place, and can be used to mitigate CSRF attacks. By default, we | do not enable this as other CSRF protection services are in place. | | Supported: "lax", "strict", "none" | */ 'same_site' => null, ]; ================================================ FILE: config/view.php ================================================ [ resource_path('views'), ], /* |-------------------------------------------------------------------------- | Compiled View Path |-------------------------------------------------------------------------- | | This option determines where all the compiled Blade templates will be | stored for your application. Typically, this is within the storage | directory. However, as usual, you are free to change this value. | */ 'compiled' => env( 'VIEW_COMPILED_PATH', realpath(storage_path('framework/views')) ), ]; ================================================ FILE: database/.gitignore ================================================ *.sqlite *.sqlite-journal ================================================ FILE: database/factories/OrderFactory.php ================================================ define(\App\Models\Order::class, function (Faker $faker) { return [ 'order_sn' => strtoupper(Str::random(12)), 'goods_id' => rand(1, 3), 'coupon_id' => rand(1, 3), 'title' => $faker->words(3, true), 'type' => rand(1,2), 'goods_price' => $faker->randomFloat(2, 10, 100), 'buy_amount' => rand(1, 10), 'coupon_discount_price' => $faker->randomFloat(2, 0, 100), 'wholesale_discount_price' => $faker->randomFloat(2, 0, 100), 'total_price' => $faker->randomFloat(2, 10, 100), 'actual_price' => $faker->randomFloat(2, 10, 100), 'search_pwd' => $faker->password(6, 10), 'email' => $faker->email, 'info' => $faker->words(3, true), 'pay_id' => rand(1, 20), 'buy_ip' => $faker->ipv4, 'trade_no' => strtoupper(Str::random(12)), 'status' => rand(1, 5), 'created_at' => $faker->dateTimeBetween('-7 days', 'now', 'PRC'), 'updated_at' => $faker->dateTimeBetween('-7 days', 'now', 'PRC'), ]; }); ================================================ FILE: database/seeds/DatabaseSeeder.php ================================================ call(OrderTableSeeder::class); } } ================================================ FILE: database/seeds/OrderTableSeeder.php ================================================ create(); } } ================================================ FILE: database/sql/install.sql ================================================ SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for admin_menu -- ---------------------------- DROP TABLE IF EXISTS `admin_menu`; CREATE TABLE `admin_menu` ( `id` bigint unsigned NOT NULL AUTO_INCREMENT, `parent_id` bigint NOT NULL DEFAULT '0', `order` int NOT NULL DEFAULT '0', `title` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, `icon` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL, `uri` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL, `extension` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '', `show` tinyint NOT NULL DEFAULT '1', `created_at` timestamp NULL DEFAULT NULL, `updated_at` timestamp NULL DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- ---------------------------- -- Records of admin_menu -- ---------------------------- BEGIN; INSERT INTO `admin_menu` VALUES (1, 0, 1, 'Index', 'feather icon-bar-chart-2', '/', '', 1, '2021-05-16 02:06:08', NULL); INSERT INTO `admin_menu` VALUES (2, 0, 2, 'Admin', 'feather icon-settings', '', '', 1, '2021-05-16 02:06:08', NULL); INSERT INTO `admin_menu` VALUES (3, 2, 3, 'Users', '', 'auth/users', '', 1, '2021-05-16 02:06:08', NULL); INSERT INTO `admin_menu` VALUES (4, 2, 4, 'Roles', '', 'auth/roles', '', 1, '2021-05-16 02:06:08', NULL); INSERT INTO `admin_menu` VALUES (5, 2, 5, 'Permission', '', 'auth/permissions', '', 1, '2021-05-16 02:06:08', NULL); INSERT INTO `admin_menu` VALUES (6, 2, 6, 'Menu', '', 'auth/menu', '', 1, '2021-05-16 02:06:08', NULL); INSERT INTO `admin_menu` VALUES (7, 2, 7, 'Extensions', '', 'auth/extensions', '', 1, '2021-05-16 02:06:08', NULL); INSERT INTO `admin_menu` VALUES (11, 0, 9, 'Goods_Manage', 'fa-shopping-bag', NULL, '', 1, '2021-05-16 11:39:55', '2021-05-23 20:44:20'); INSERT INTO `admin_menu` VALUES (12, 11, 11, 'Goods', 'fa-shopping-bag', '/goods', '', 1, '2021-05-16 11:44:35', '2021-05-23 20:44:20'); INSERT INTO `admin_menu` VALUES (13, 11, 10, 'Goods_Group', 'fa-star-half-o', '/goods-group', '', 1, '2021-05-16 17:08:43', '2021-05-23 20:44:20'); INSERT INTO `admin_menu` VALUES (14, 0, 12, 'Carmis_Manage', 'fa-credit-card-alt', NULL, '', 1, '2021-05-17 21:29:50', '2021-05-23 20:44:20'); INSERT INTO `admin_menu` VALUES (15, 14, 13, 'Carmis', 'fa-credit-card', '/carmis', '', 1, '2021-05-17 21:37:59', '2021-05-23 20:44:20'); INSERT INTO `admin_menu` VALUES (16, 14, 14, 'Import_Carmis', 'fa-plus-circle', '/import-carmis', '', 1, '2021-05-18 14:46:35', '2021-05-23 20:44:20'); INSERT INTO `admin_menu` VALUES (17, 18, 16, 'Coupon', 'fa-dollar', '/coupon', '', 1, '2021-05-18 17:29:53', '2021-05-23 20:44:20'); INSERT INTO `admin_menu` VALUES (18, 0, 15, 'Coupon_Manage', 'fa-diamond', NULL, '', 1, '2021-05-18 17:32:03', '2021-05-18 17:32:03'); INSERT INTO `admin_menu` VALUES (19, 0, 17, 'Configuration', 'fa-wrench', NULL, '', 1, '2021-05-20 20:06:47', '2021-05-23 20:44:20'); INSERT INTO `admin_menu` VALUES (20, 19, 18, 'Email_Template_Configuration', 'fa-envelope', '/emailtpl', '', 1, '2021-05-20 20:17:07', '2021-05-23 20:44:20'); INSERT INTO `admin_menu` VALUES (21, 19, 19, 'Pay_Configuration', 'fa-cc-visa', '/pay', '', 1, '2021-05-20 20:41:24', '2021-05-23 20:44:20'); INSERT INTO `admin_menu` VALUES (22, 0, 8, 'Order_Manage', 'fa-table', NULL, '', 1, '2021-05-23 20:43:43', '2021-05-23 20:44:20'); INSERT INTO `admin_menu` VALUES (23, 22, 20, 'Order', 'fa-heart', '/order', '', 1, '2021-05-23 20:46:13', '2021-05-23 20:47:16'); INSERT INTO `admin_menu` VALUES (24, 19, 21, 'System_Setting', 'fa-cogs', '/system-setting', '', 1, '2021-05-26 10:26:34', '2021-05-26 10:26:34'); INSERT INTO `admin_menu` VALUES (25, 19, 22, 'Email_Test', 'fa-envelope', '/email-test', '', 1, '2022-07-26 12:09:34', '2022-07-26 12:17:21'); COMMIT; -- ---------------------------- -- Table structure for admin_permission_menu -- ---------------------------- DROP TABLE IF EXISTS `admin_permission_menu`; CREATE TABLE `admin_permission_menu` ( `permission_id` bigint NOT NULL, `menu_id` bigint NOT NULL, `created_at` timestamp NULL DEFAULT NULL, `updated_at` timestamp NULL DEFAULT NULL, UNIQUE KEY `admin_permission_menu_permission_id_menu_id_unique` (`permission_id`,`menu_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- ---------------------------- -- Records of admin_permission_menu -- ---------------------------- BEGIN; COMMIT; -- ---------------------------- -- Table structure for admin_permissions -- ---------------------------- DROP TABLE IF EXISTS `admin_permissions`; CREATE TABLE `admin_permissions` ( `id` bigint unsigned NOT NULL AUTO_INCREMENT, `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, `slug` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, `http_method` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL, `http_path` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci, `order` int NOT NULL DEFAULT '0', `parent_id` bigint NOT NULL DEFAULT '0', `created_at` timestamp NULL DEFAULT NULL, `updated_at` timestamp NULL DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `admin_permissions_slug_unique` (`slug`) ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- ---------------------------- -- Records of admin_permissions -- ---------------------------- BEGIN; INSERT INTO `admin_permissions` VALUES (1, 'Auth management', 'auth-management', '', '', 1, 0, '2021-05-16 02:06:08', NULL); INSERT INTO `admin_permissions` VALUES (2, 'Users', 'users', '', '/auth/users*', 2, 1, '2021-05-16 02:06:08', NULL); INSERT INTO `admin_permissions` VALUES (3, 'Roles', 'roles', '', '/auth/roles*', 3, 1, '2021-05-16 02:06:08', NULL); INSERT INTO `admin_permissions` VALUES (4, 'Permissions', 'permissions', '', '/auth/permissions*', 4, 1, '2021-05-16 02:06:08', NULL); INSERT INTO `admin_permissions` VALUES (5, 'Menu', 'menu', '', '/auth/menu*', 5, 1, '2021-05-16 02:06:08', NULL); INSERT INTO `admin_permissions` VALUES (6, 'Extension', 'extension', '', '/auth/extensions*', 6, 1, '2021-05-16 02:06:08', NULL); COMMIT; -- ---------------------------- -- Table structure for admin_role_menu -- ---------------------------- DROP TABLE IF EXISTS `admin_role_menu`; CREATE TABLE `admin_role_menu` ( `role_id` bigint NOT NULL, `menu_id` bigint NOT NULL, `created_at` timestamp NULL DEFAULT NULL, `updated_at` timestamp NULL DEFAULT NULL, UNIQUE KEY `admin_role_menu_role_id_menu_id_unique` (`role_id`,`menu_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- ---------------------------- -- Records of admin_role_menu -- ---------------------------- BEGIN; COMMIT; -- ---------------------------- -- Table structure for admin_role_permissions -- ---------------------------- DROP TABLE IF EXISTS `admin_role_permissions`; CREATE TABLE `admin_role_permissions` ( `role_id` bigint NOT NULL, `permission_id` bigint NOT NULL, `created_at` timestamp NULL DEFAULT NULL, `updated_at` timestamp NULL DEFAULT NULL, UNIQUE KEY `admin_role_permissions_role_id_permission_id_unique` (`role_id`,`permission_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- ---------------------------- -- Records of admin_role_permissions -- ---------------------------- BEGIN; COMMIT; -- ---------------------------- -- Table structure for admin_role_users -- ---------------------------- DROP TABLE IF EXISTS `admin_role_users`; CREATE TABLE `admin_role_users` ( `role_id` bigint NOT NULL, `user_id` bigint NOT NULL, `created_at` timestamp NULL DEFAULT NULL, `updated_at` timestamp NULL DEFAULT NULL, UNIQUE KEY `admin_role_users_role_id_user_id_unique` (`role_id`,`user_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- ---------------------------- -- Records of admin_role_users -- ---------------------------- BEGIN; INSERT INTO `admin_role_users` VALUES (1, 1, '2021-05-16 02:06:08', '2021-05-16 02:06:08'); COMMIT; -- ---------------------------- -- Table structure for admin_roles -- ---------------------------- DROP TABLE IF EXISTS `admin_roles`; CREATE TABLE `admin_roles` ( `id` bigint unsigned NOT NULL AUTO_INCREMENT, `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, `slug` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, `created_at` timestamp NULL DEFAULT NULL, `updated_at` timestamp NULL DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `admin_roles_slug_unique` (`slug`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- ---------------------------- -- Records of admin_roles -- ---------------------------- BEGIN; INSERT INTO `admin_roles` VALUES (1, 'Administrator', 'administrator', '2021-05-16 02:06:08', '2021-05-16 02:06:08'); COMMIT; -- ---------------------------- -- Table structure for admin_settings -- ---------------------------- DROP TABLE IF EXISTS `admin_settings`; CREATE TABLE `admin_settings` ( `slug` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, `value` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, `created_at` timestamp NULL DEFAULT NULL, `updated_at` timestamp NULL DEFAULT NULL, PRIMARY KEY (`slug`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- ---------------------------- -- Records of admin_settings -- ---------------------------- BEGIN; COMMIT; -- ---------------------------- -- Table structure for admin_users -- ---------------------------- DROP TABLE IF EXISTS `admin_users`; CREATE TABLE `admin_users` ( `id` bigint unsigned NOT NULL AUTO_INCREMENT, `username` varchar(120) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, `password` varchar(80) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, `avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL, `remember_token` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL, `created_at` timestamp NULL DEFAULT NULL, `updated_at` timestamp NULL DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `admin_users_username_unique` (`username`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- ---------------------------- -- Records of admin_users -- ---------------------------- BEGIN; INSERT INTO `admin_users` VALUES (1, 'admin', '$2y$10$e7z99Mhxm9BOHL55xHZTx.QcNTZJC6ftRXHCR/ZkBja/jBeasVeBy', 'Administrator', NULL, '4UAXF2BEw9EL1Tr2aGmwkv5DKwxqRF6djOMAHSiBMSOrPfPNHYrjCCQMtnTC', '2021-05-16 02:06:08', '2021-05-16 02:06:08'); COMMIT; -- ---------------------------- -- Table structure for carmis -- ---------------------------- DROP TABLE IF EXISTS `carmis`; CREATE TABLE `carmis` ( `id` bigint NOT NULL AUTO_INCREMENT, `goods_id` int NOT NULL COMMENT '所属商品', `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态 1未售出 2已售出', `is_loop` tinyint(1) NOT NULL DEFAULT '0' COMMENT '循环卡密 1是 0否', `carmi` text CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL COMMENT '卡密', `created_at` timestamp NULL DEFAULT NULL, `updated_at` timestamp NULL DEFAULT NULL, `deleted_at` timestamp NULL DEFAULT NULL, PRIMARY KEY (`id`), KEY `idx_goods_id` (`goods_id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_unicode_ci COMMENT='卡密表'; -- ---------------------------- -- Records of carmis -- ---------------------------- BEGIN; COMMIT; -- ---------------------------- -- Table structure for coupons -- ---------------------------- DROP TABLE IF EXISTS `coupons`; CREATE TABLE `coupons` ( `id` int NOT NULL AUTO_INCREMENT, `discount` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '优惠金额', `is_use` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否已经使用 1未使用 2已使用', `is_open` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否启用 1是 0否', `coupon` varchar(150) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL COMMENT '优惠码', `ret` int NOT NULL DEFAULT '0' COMMENT '剩余使用次数', `created_at` timestamp NULL DEFAULT NULL, `updated_at` timestamp NULL DEFAULT NULL, `deleted_at` timestamp NULL DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `idx_coupon` (`coupon`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_unicode_ci COMMENT='优惠码表'; -- ---------------------------- -- Records of coupons -- ---------------------------- BEGIN; COMMIT; -- ---------------------------- -- Table structure for coupons_goods -- ---------------------------- DROP TABLE IF EXISTS `coupons_goods`; CREATE TABLE `coupons_goods` ( `id` int NOT NULL AUTO_INCREMENT, `goods_id` int NOT NULL COMMENT '商品id', `coupons_id` int NOT NULL COMMENT '优惠码id', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_unicode_ci COMMENT='优惠码关联商品表'; -- ---------------------------- -- Records of coupons_goods -- ---------------------------- BEGIN; COMMIT; -- ---------------------------- -- Table structure for emailtpls -- ---------------------------- DROP TABLE IF EXISTS `emailtpls`; CREATE TABLE `emailtpls` ( `id` int NOT NULL AUTO_INCREMENT, `tpl_name` varchar(150) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '邮件标题', `tpl_content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '邮件内容', `tpl_token` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '邮件标识', `created_at` timestamp NULL DEFAULT NULL, `updated_at` timestamp NULL DEFAULT NULL, `deleted_at` timestamp NULL DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `mail_token` (`tpl_token`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- ---------------------------- -- Records of emailtpls -- ---------------------------- BEGIN; INSERT INTO `emailtpls` VALUES (2, '【{webname}】感谢您的购买,请查收您的收据', '\r\n\r\n\r\n \r\n \r\n Billing e.g. invoices and receipts\r\n\r\n \r\n\r\n\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n

{ord_title}

\r\n
\r\n

感谢您的购买。

\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n 订单号: {order_id}
\r\n {created_at}
\r\n 以下是您的卡密信息:
\r\n {ord_info}\r\n
\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n
{product_name}\r\n x {buy_amount}\r\n
总价\r\n {ord_price} ¥\r\n
\r\n
\r\n
\r\n {webname}\r\n
\r\n {webname} Inc. {created_at}\r\n
\r\n
\r\n
\r\n \r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n', 'card_send_user_email', '2020-04-06 13:27:56', '2021-05-20 20:24:42', NULL); INSERT INTO `emailtpls` VALUES (3, '【{webname}】新订单等待处理!', '

尊敬的管理员:

客户购买的商品:【{product_name}】 已支付成功,请及时处理。

订单号:{order_id}

数量:{buy_amount}

金额:{ord_price}

时间:{created_at}


{ord_info}


来自{webname} -{weburl}

', 'manual_send_manage_mail', '2020-04-06 13:32:03', '2020-04-06 13:32:18', NULL); INSERT INTO `emailtpls` VALUES (4, '【{webname}】订单处理失败!', '\r\n\r\n\r\n \r\n \r\n Billing e.g. invoices and receipts\r\n\r\n \r\n\r\n\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n

{ord_title}

\r\n
\r\n

非常遗憾,您的订单处理失败(╥﹏╥).

\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n 订单号: {order_id}
\r\n {created_at}
\r\n 尊敬的客户,十分抱歉,订单处理失败,请联系网站工作人员核查原因。\r\n
\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n
{ord_title}\r\n \r\n
总价\r\n {ord_price} ¥\r\n
\r\n
\r\n
\r\n {webname}\r\n
\r\n {webname} Inc. {created_at}\r\n
\r\n
\r\n
\r\n \r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n', 'failed_order', '2020-06-30 09:54:58', '2020-06-30 10:47:21', NULL); INSERT INTO `emailtpls` VALUES (5, '【{webname}】您的订单已经处理完成!', '

 

\r\n

 

\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n
 \r\n
\r\n\r\n\r\n\r\n\r\n\r\n\r\n
\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n
\r\n

{ord_title}

\r\n
\r\n

您的订单已完成。

\r\n
\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n
订单号: {order_id}
{created_at}
尊敬的客户,您的订单已经处理完毕,请及时前往网站核对处理结果,如有疑问请联系网站工作人员!
\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n
{ord_title} 
{ord_info} 
总价{ord_price} ¥
\r\n
\r\n
{webname}
{webname} Inc. {created_at}
\r\n
\r\n
 
\r\n
\r\n
 
', 'completed_order', '2022-05-08 15:41:49', '2022-05-08 15:47:26', NULL); INSERT INTO `emailtpls` VALUES (6, '【{webname}】已收到您的订单,请等候处理', '\r\n\r\n\r\n \r\n \r\n Billing e.g. invoices and receipts\r\n\r\n \r\n\r\n\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n

{ord_title}

\r\n
\r\n

感谢您的惠顾。

\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n 订单号: {order_id}
\r\n {created_at}
\r\n 系统已向工作人员发送订单通知,代充类商品需要工作人员手动处理,请耐心等待通知!\r\n
\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n
{ord_title}\r\n \r\n
总价\r\n {ord_price} ¥\r\n
\r\n
\r\n
\r\n {webname}\r\n
\r\n {webname} Inc. {created_at}\r\n
\r\n
\r\n
\r\n \r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n', 'pending_order', '2020-06-30 09:55:55', '2020-06-30 10:45:40', NULL); COMMIT; -- ---------------------------- -- Table structure for failed_jobs -- ---------------------------- DROP TABLE IF EXISTS `failed_jobs`; CREATE TABLE `failed_jobs` ( `id` bigint unsigned NOT NULL AUTO_INCREMENT, `connection` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, `queue` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, `payload` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, `exception` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, `failed_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- ---------------------------- -- Records of failed_jobs -- ---------------------------- BEGIN; COMMIT; -- ---------------------------- -- Table structure for goods -- ---------------------------- DROP TABLE IF EXISTS `goods`; CREATE TABLE `goods` ( `id` int NOT NULL AUTO_INCREMENT, `group_id` int NOT NULL COMMENT '所属分类id', `gd_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '商品名称', `gd_description` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '商品描述', `gd_keywords` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '商品关键字', `picture` text CHARACTER SET utf8 COLLATE utf8_unicode_ci COMMENT '商品图片', `retail_price` decimal(10,2) DEFAULT '0.00' COMMENT '零售价', `actual_price` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '实际售价', `in_stock` int NOT NULL DEFAULT '0' COMMENT '库存', `sales_volume` int DEFAULT '0' COMMENT '销量', `ord` int DEFAULT '1' COMMENT '排序权重 越大越靠前', `buy_limit_num` int NOT NULL DEFAULT '0' COMMENT '限制单次购买最大数量,0为不限制', `buy_prompt` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '购买提示', `description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '商品描述', `type` tinyint(1) NOT NULL DEFAULT '1' COMMENT '商品类型 1自动发货 2人工处理', `wholesale_price_cnf` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '批发价配置', `other_ipu_cnf` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '其他输入框配置', `api_hook` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '回调事件', `is_open` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否启用,1是 0否', `created_at` timestamp NULL DEFAULT NULL, `updated_at` timestamp NULL DEFAULT NULL, `deleted_at` timestamp NULL DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_unicode_ci COMMENT='商品表'; -- ---------------------------- -- Records of goods -- ---------------------------- BEGIN; COMMIT; -- ---------------------------- -- Table structure for goods_group -- ---------------------------- DROP TABLE IF EXISTS `goods_group`; CREATE TABLE `goods_group` ( `id` int NOT NULL AUTO_INCREMENT, `gp_name` varchar(200) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL COMMENT '分类名称', `is_open` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否启用,1是 0否', `ord` int NOT NULL DEFAULT '1' COMMENT '排序权重 越大越靠前', `created_at` timestamp NULL DEFAULT NULL, `updated_at` timestamp NULL DEFAULT NULL, `deleted_at` timestamp NULL DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_unicode_ci COMMENT='商品分类表'; -- ---------------------------- -- Records of goods_group -- ---------------------------- BEGIN; COMMIT; -- ---------------------------- -- Table structure for migrations -- ---------------------------- DROP TABLE IF EXISTS `migrations`; CREATE TABLE `migrations` ( `id` int unsigned NOT NULL AUTO_INCREMENT, `migration` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, `batch` int NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- ---------------------------- -- Records of migrations -- ---------------------------- BEGIN; COMMIT; -- ---------------------------- -- Table structure for orders -- ---------------------------- DROP TABLE IF EXISTS `orders`; CREATE TABLE `orders` ( `id` bigint NOT NULL AUTO_INCREMENT, `order_sn` varchar(150) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL COMMENT '订单号', `goods_id` int NOT NULL COMMENT '关联商品id', `coupon_id` int DEFAULT '0' COMMENT '关联优惠码id', `title` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '订单名称', `type` tinyint(1) NOT NULL DEFAULT '1' COMMENT '1自动发货 2人工处理', `goods_price` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '商品单价', `buy_amount` int NOT NULL DEFAULT '1' COMMENT '购买数量', `coupon_discount_price` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '优惠码优惠价格', `wholesale_discount_price` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '批发价优惠', `total_price` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '订单总价', `actual_price` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '实际支付价格', `search_pwd` varchar(200) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT '' COMMENT '查询密码', `email` varchar(200) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL COMMENT '下单邮箱', `info` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '订单详情', `pay_id` int DEFAULT NULL COMMENT '支付通道id', `buy_ip` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL COMMENT '购买者下单IP地址', `trade_no` varchar(200) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT '' COMMENT '第三方支付订单号', `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '1待支付 2待处理 3处理中 4已完成 5处理失败 6异常 -1过期', `coupon_ret_back` tinyint(1) NOT NULL DEFAULT '0' COMMENT '优惠码使用次数是否已经回退 0否 1是', `created_at` timestamp NULL DEFAULT NULL, `updated_at` timestamp NULL DEFAULT NULL, `deleted_at` timestamp NULL DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `idx_order_sn` (`order_sn`) USING BTREE, KEY `idx_goods_id` (`goods_id`) USING BTREE, KEY `idex_email` (`email`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_unicode_ci COMMENT='订单表'; -- ---------------------------- -- Records of orders -- ---------------------------- BEGIN; COMMIT; -- ---------------------------- -- Table structure for pays -- ---------------------------- DROP TABLE IF EXISTS `pays`; CREATE TABLE `pays` ( `id` int NOT NULL AUTO_INCREMENT, `pay_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '支付名称', `pay_check` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '支付标识', `pay_method` tinyint(1) NOT NULL COMMENT '支付方式 1跳转 2扫码', `pay_client` tinyint(1) NOT NULL DEFAULT '1' COMMENT '支付场景:1电脑pc 2手机 3全部', `merchant_id` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '商户 ID', `merchant_key` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '商户 KEY', `merchant_pem` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '商户密钥', `pay_handleroute` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '支付处理路由', `is_open` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否启用 1是 0否', `created_at` timestamp NULL DEFAULT NULL, `updated_at` timestamp NULL DEFAULT NULL, `deleted_at` timestamp NULL DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `idx_pay_check` (`pay_check`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- ---------------------------- -- Records of pays -- ---------------------------- BEGIN; INSERT INTO `pays` VALUES (1, '支付宝当面付', 'zfbf2f', 2, 3, '商户号', '支付宝公钥', '商户私钥', '/pay/alipay', 1, '2019-03-11 05:04:52', '2021-06-08 16:28:06', NULL); INSERT INTO `pays` VALUES (2, '支付宝 PC', 'aliweb', 1, 1, '商户号', '', '密钥', '/pay/alipay', 1, '2019-07-08 13:25:27', '2019-07-12 09:47:53', NULL); INSERT INTO `pays` VALUES (3, '码支付 QQ', 'mqq', 1, 1, '商户号', '', '密钥', '/pay/mapay', 1, '2019-07-11 09:05:27', '2019-07-11 12:13:11', NULL); INSERT INTO `pays` VALUES (4, '码支付支付宝', 'mzfb', 1, 1, '商户号', '', '密钥', '/pay/mapay', 1, '2019-07-11 09:06:02', '2019-07-11 12:12:58', NULL); INSERT INTO `pays` VALUES (5, '码支付微信', 'mwx', 1, 1, '商户号', '', '密钥', '/pay/mapay', 1, '2019-07-11 09:06:23', '2019-07-11 12:13:05', NULL); INSERT INTO `pays` VALUES (6, 'Paysapi 支付宝', 'pszfb', 1, 1, '商户号', '', '密钥', '/pay/paysapi', 1, '2019-07-11 09:31:12', '2019-07-11 09:31:12', NULL); INSERT INTO `pays` VALUES (7, 'Paysapi 微信', 'pswx', 1, 1, '商户号', '', '密钥', '/pay/paysapi', 1, '2019-07-11 09:31:43', '2019-07-11 09:31:43', NULL); INSERT INTO `pays` VALUES (8, '微信扫码', 'wescan', 2, 1, '商户号', '', '密钥', '/pay/wepay', 1, '2019-07-12 07:50:20', '2019-07-12 08:08:26', NULL); INSERT INTO `pays` VALUES (11, 'Payjs 微信扫码', 'payjswescan', 1, 1, '商户号', '', '密钥', '/pay/payjs', 1, '2019-07-25 07:28:42', '2019-08-20 12:17:58', NULL); INSERT INTO `pays` VALUES (14, '易支付-支付宝', 'alipay', 1, 1, '商户号', '', '密钥', '/pay/yipay', 2, '2020-01-10 15:22:56', '2020-01-11 06:33:07', NULL); INSERT INTO `pays` VALUES (15, '易支付-微信', 'wxpay', 1, 1, '商户号', NULL, '密钥', '/pay/yipay', 1, '2020-07-14 16:27:06', NULL, NULL); INSERT INTO `pays` VALUES (16, '易支付-QQ 钱包', 'qqpay', 1, 1, '商户号', NULL, '密钥', '/pay/yipay', 1, '2020-07-14 16:27:03', NULL, NULL); INSERT INTO `pays` VALUES (17, 'PayPal', 'paypal', 1, 1, '商户号', NULL, '密钥', '/pay/paypal', 1, '2020-07-14 16:25:20', NULL, NULL); INSERT INTO `pays` VALUES (19, 'V 免签支付宝', 'vzfb', 1, 1, 'V 免签通讯密钥', NULL, 'V 免签地址 例如 https://vpay.qq.com/ 结尾必须有/', 'pay/vpay', 1, '2020-05-01 13:15:56', '2020-05-01 13:18:29', NULL); INSERT INTO `pays` VALUES (20, 'V 免签微信', 'vwx', 1, 1, 'V 免签通讯密钥', NULL, 'V 免签地址 例如 https://vpay.qq.com/ 结尾必须有/', 'pay/vpay', 1, '2020-05-01 13:17:28', '2020-05-01 13:18:38', NULL); INSERT INTO `pays` VALUES (21, 'Stripe[微信支付宝]', 'stripe', 1, 1, 'pk开头的可发布密钥', NULL, 'sk开头的密钥', 'pay/stripe', 1, '2020-10-29 13:15:56', '2020-10-29 13:18:29', NULL); INSERT INTO `pays` VALUES (22, 'Coinbase[加密货币]', 'coinbase', 1, 3, '费率', 'API密钥', '共享密钥', 'pay/coinbase', 0, '2021-08-15 13:15:56', '2021-10-12 13:15:56', NULL); INSERT INTO `pays` VALUES (23, 'Epusdt[trc20]', 'epusdt', 1, 3, 'API密钥', '不填即可', 'api请求地址', 'pay/epusdt', 0, '2022-03-22 13:15:56', '2022-03-22 13:15:56', NULL); INSERT INTO `pays` VALUES (24,'TRX', 'tokenpay-trx', 1, 3, 'TRX', '你的API密钥', 'https://token-pay.xxx.com', 'pay/tokenpay', 1, now(), now(), NULL); INSERT INTO `pays` VALUES (25,'USDT-TRC20', 'tokenpay-usdt-trc', 1, 3, 'USDT_TRC20', '你的API密钥', 'https://token-pay.xxx.com', 'pay/tokenpay', 1, now(), now(), NULL); INSERT INTO `pays` VALUES (26,'ETH', 'tokenpay-eth', 1, 3, 'EVM_ETH_ETH', '你的API密钥', 'https://token-pay.xxx.com', 'pay/tokenpay', 1, now(), now(), NULL); INSERT INTO `pays` VALUES (27,'USDT-ERC20', 'tokenpay-usdt-eth', 1, 3, 'EVM_ETH_USDT_ERC20', '你的API密钥', 'https://token-pay.xxx.com', 'pay/tokenpay', 1, now(), now(), NULL); INSERT INTO `pays` VALUES (28,'USDC-ERC20', 'tokenpay-usdc-eth', 1, 3, 'EVM_ETH_USDC_ERC20', '你的API密钥', 'https://token-pay.xxx.com', 'pay/tokenpay', 1, now(), now(), NULL); INSERT INTO `pays` VALUES (29,'BNB', 'tokenpay-bnb', 1, 3, 'EVM_BSC_BNB', '你的API密钥', 'https://token-pay.xxx.com', 'pay/tokenpay', 1, now(), now(), NULL); INSERT INTO `pays` VALUES (30,'USDT-BSC', 'tokenpay-usdt-bsc', 1, 3, 'EVM_BSC_USDT_BEP20', '你的API密钥', 'https://token-pay.xxx.com', 'pay/tokenpay', 1, now(), now(), NULL); INSERT INTO `pays` VALUES (31,'USDC-BSC', 'tokenpay-usdc-bsc', 1, 3, 'EVM_BSC_USDC_BEP20', '你的API密钥', 'https://token-pay.xxx.com', 'pay/tokenpay', 1, now(), now(), NULL); INSERT INTO `pays` VALUES (32,'MATIC', 'tokenpay-matic', 1, 3, 'EVM_Polygon_MATIC', '你的API密钥', 'https://token-pay.xxx.com', 'pay/tokenpay', 1, now(), now(), NULL); INSERT INTO `pays` VALUES (33,'USDT-Polygon', 'tokenpay-usdt-polygon', 1, 3, 'EVM_Polygon_USDT_ERC20', '你的API密钥', 'https://token-pay.xxx.com', 'pay/tokenpay', 1, now(), now(), NULL); INSERT INTO `pays` VALUES (34,'USDC-Polygon', 'tokenpay-usdc-polygon', 1, 3, 'EVM_Polygon_USDC_ERC20', '你的API密钥', 'https://token-pay.xxx.com', 'pay/tokenpay', 1, now(), now(), NULL); -- ---------------------------- COMMIT; SET FOREIGN_KEY_CHECKS = 1; ================================================ FILE: dcat_admin_ide_helper.php ================================================ */ namespace Dcat\Admin { use Illuminate\Support\Collection; /** * @property Grid\Column|Collection id * @property Grid\Column|Collection wholesale_price_cnf * @property Grid\Column|Collection other_ipu_cnf * @property Grid\Column|Collection api_hook * @property Grid\Column|Collection created_at * @property Grid\Column|Collection detail * @property Grid\Column|Collection name * @property Grid\Column|Collection type * @property Grid\Column|Collection updated_at * @property Grid\Column|Collection version * @property Grid\Column|Collection is_enabled * @property Grid\Column|Collection extension * @property Grid\Column|Collection icon * @property Grid\Column|Collection order * @property Grid\Column|Collection parent_id * @property Grid\Column|Collection uri * @property Grid\Column|Collection menu_id * @property Grid\Column|Collection permission_id * @property Grid\Column|Collection http_method * @property Grid\Column|Collection http_path * @property Grid\Column|Collection slug * @property Grid\Column|Collection role_id * @property Grid\Column|Collection user_id * @property Grid\Column|Collection value * @property Grid\Column|Collection avatar * @property Grid\Column|Collection password * @property Grid\Column|Collection remember_token * @property Grid\Column|Collection username * @property Grid\Column|Collection carmi * @property Grid\Column|Collection deleted_at * @property Grid\Column|Collection goods_id * @property Grid\Column|Collection status * @property Grid\Column|Collection coupon * @property Grid\Column|Collection discount * @property Grid\Column|Collection is_open * @property Grid\Column|Collection is_use * @property Grid\Column|Collection ret * @property Grid\Column|Collection coupons_id * @property Grid\Column|Collection tpl_content * @property Grid\Column|Collection tpl_name * @property Grid\Column|Collection tpl_token * @property Grid\Column|Collection connection * @property Grid\Column|Collection exception * @property Grid\Column|Collection failed_at * @property Grid\Column|Collection payload * @property Grid\Column|Collection queue * @property Grid\Column|Collection actual_price * @property Grid\Column|Collection buy_limit_num * @property Grid\Column|Collection buy_prompt * @property Grid\Column|Collection gd_name * @property Grid\Column|Collection group_id * @property Grid\Column|Collection in_stock * @property Grid\Column|Collection ord * @property Grid\Column|Collection picture * @property Grid\Column|Collection retail_price * @property Grid\Column|Collection sales_volume * @property Grid\Column|Collection gp_name * @property Grid\Column|Collection buy_amount * @property Grid\Column|Collection buy_ip * @property Grid\Column|Collection coupon_discount_price * @property Grid\Column|Collection coupon_id * @property Grid\Column|Collection email * @property Grid\Column|Collection goods_price * @property Grid\Column|Collection info * @property Grid\Column|Collection order_sn * @property Grid\Column|Collection pay_id * @property Grid\Column|Collection search_pwd * @property Grid\Column|Collection total_price * @property Grid\Column|Collection trade_no * @property Grid\Column|Collection wholesale_discount_price * @property Grid\Column|Collection merchant_id * @property Grid\Column|Collection merchant_key * @property Grid\Column|Collection merchant_pem * @property Grid\Column|Collection pay_check * @property Grid\Column|Collection pay_client * @property Grid\Column|Collection pay_handleroute * @property Grid\Column|Collection pay_method * @property Grid\Column|Collection pay_name * * @method Grid\Column|Collection id(string $label = null) * @method Grid\Column|Collection wholesale_price_cnf(string $label = null) * @method Grid\Column|Collection other_ipu_cnf(string $label = null) * @method Grid\Column|Collection api_hook(string $label = null) * @method Grid\Column|Collection created_at(string $label = null) * @method Grid\Column|Collection detail(string $label = null) * @method Grid\Column|Collection name(string $label = null) * @method Grid\Column|Collection type(string $label = null) * @method Grid\Column|Collection updated_at(string $label = null) * @method Grid\Column|Collection version(string $label = null) * @method Grid\Column|Collection is_enabled(string $label = null) * @method Grid\Column|Collection extension(string $label = null) * @method Grid\Column|Collection icon(string $label = null) * @method Grid\Column|Collection order(string $label = null) * @method Grid\Column|Collection parent_id(string $label = null) * @method Grid\Column|Collection uri(string $label = null) * @method Grid\Column|Collection menu_id(string $label = null) * @method Grid\Column|Collection permission_id(string $label = null) * @method Grid\Column|Collection http_method(string $label = null) * @method Grid\Column|Collection http_path(string $label = null) * @method Grid\Column|Collection slug(string $label = null) * @method Grid\Column|Collection role_id(string $label = null) * @method Grid\Column|Collection user_id(string $label = null) * @method Grid\Column|Collection value(string $label = null) * @method Grid\Column|Collection avatar(string $label = null) * @method Grid\Column|Collection password(string $label = null) * @method Grid\Column|Collection remember_token(string $label = null) * @method Grid\Column|Collection username(string $label = null) * @method Grid\Column|Collection carmi(string $label = null) * @method Grid\Column|Collection deleted_at(string $label = null) * @method Grid\Column|Collection goods_id(string $label = null) * @method Grid\Column|Collection status(string $label = null) * @method Grid\Column|Collection coupon(string $label = null) * @method Grid\Column|Collection discount(string $label = null) * @method Grid\Column|Collection is_open(string $label = null) * @method Grid\Column|Collection is_use(string $label = null) * @method Grid\Column|Collection ret(string $label = null) * @method Grid\Column|Collection coupons_id(string $label = null) * @method Grid\Column|Collection tpl_content(string $label = null) * @method Grid\Column|Collection tpl_name(string $label = null) * @method Grid\Column|Collection tpl_token(string $label = null) * @method Grid\Column|Collection connection(string $label = null) * @method Grid\Column|Collection exception(string $label = null) * @method Grid\Column|Collection failed_at(string $label = null) * @method Grid\Column|Collection payload(string $label = null) * @method Grid\Column|Collection queue(string $label = null) * @method Grid\Column|Collection actual_price(string $label = null) * @method Grid\Column|Collection buy_limit_num(string $label = null) * @method Grid\Column|Collection buy_prompt(string $label = null) * @method Grid\Column|Collection gd_name(string $label = null) * @method Grid\Column|Collection group_id(string $label = null) * @method Grid\Column|Collection in_stock(string $label = null) * @method Grid\Column|Collection ord(string $label = null) * @method Grid\Column|Collection picture(string $label = null) * @method Grid\Column|Collection retail_price(string $label = null) * @method Grid\Column|Collection sales_volume(string $label = null) * @method Grid\Column|Collection gp_name(string $label = null) * @method Grid\Column|Collection buy_amount(string $label = null) * @method Grid\Column|Collection buy_ip(string $label = null) * @method Grid\Column|Collection coupon_discount_price(string $label = null) * @method Grid\Column|Collection coupon_id(string $label = null) * @method Grid\Column|Collection email(string $label = null) * @method Grid\Column|Collection goods_price(string $label = null) * @method Grid\Column|Collection info(string $label = null) * @method Grid\Column|Collection order_sn(string $label = null) * @method Grid\Column|Collection pay_id(string $label = null) * @method Grid\Column|Collection search_pwd(string $label = null) * @method Grid\Column|Collection total_price(string $label = null) * @method Grid\Column|Collection trade_no(string $label = null) * @method Grid\Column|Collection wholesale_discount_price(string $label = null) * @method Grid\Column|Collection merchant_id(string $label = null) * @method Grid\Column|Collection merchant_key(string $label = null) * @method Grid\Column|Collection merchant_pem(string $label = null) * @method Grid\Column|Collection pay_check(string $label = null) * @method Grid\Column|Collection pay_client(string $label = null) * @method Grid\Column|Collection pay_handleroute(string $label = null) * @method Grid\Column|Collection pay_method(string $label = null) * @method Grid\Column|Collection pay_name(string $label = null) */ class Grid {} class MiniGrid extends Grid {} /** * @property Show\Field|Collection id * @property Show\Field|Collection wholesale_price_cnf * @property Show\Field|Collection other_ipu_cnf * @property Show\Field|Collection api_hook * @property Show\Field|Collection created_at * @property Show\Field|Collection detail * @property Show\Field|Collection name * @property Show\Field|Collection type * @property Show\Field|Collection updated_at * @property Show\Field|Collection version * @property Show\Field|Collection is_enabled * @property Show\Field|Collection extension * @property Show\Field|Collection icon * @property Show\Field|Collection order * @property Show\Field|Collection parent_id * @property Show\Field|Collection uri * @property Show\Field|Collection menu_id * @property Show\Field|Collection permission_id * @property Show\Field|Collection http_method * @property Show\Field|Collection http_path * @property Show\Field|Collection slug * @property Show\Field|Collection role_id * @property Show\Field|Collection user_id * @property Show\Field|Collection value * @property Show\Field|Collection avatar * @property Show\Field|Collection password * @property Show\Field|Collection remember_token * @property Show\Field|Collection username * @property Show\Field|Collection carmi * @property Show\Field|Collection deleted_at * @property Show\Field|Collection goods_id * @property Show\Field|Collection status * @property Show\Field|Collection coupon * @property Show\Field|Collection discount * @property Show\Field|Collection is_open * @property Show\Field|Collection is_use * @property Show\Field|Collection ret * @property Show\Field|Collection coupons_id * @property Show\Field|Collection tpl_content * @property Show\Field|Collection tpl_name * @property Show\Field|Collection tpl_token * @property Show\Field|Collection connection * @property Show\Field|Collection exception * @property Show\Field|Collection failed_at * @property Show\Field|Collection payload * @property Show\Field|Collection queue * @property Show\Field|Collection actual_price * @property Show\Field|Collection buy_limit_num * @property Show\Field|Collection buy_prompt * @property Show\Field|Collection gd_name * @property Show\Field|Collection group_id * @property Show\Field|Collection in_stock * @property Show\Field|Collection ord * @property Show\Field|Collection picture * @property Show\Field|Collection retail_price * @property Show\Field|Collection sales_volume * @property Show\Field|Collection gp_name * @property Show\Field|Collection buy_amount * @property Show\Field|Collection buy_ip * @property Show\Field|Collection coupon_discount_price * @property Show\Field|Collection coupon_id * @property Show\Field|Collection email * @property Show\Field|Collection goods_price * @property Show\Field|Collection info * @property Show\Field|Collection order_sn * @property Show\Field|Collection pay_id * @property Show\Field|Collection search_pwd * @property Show\Field|Collection total_price * @property Show\Field|Collection trade_no * @property Show\Field|Collection wholesale_discount_price * @property Show\Field|Collection merchant_id * @property Show\Field|Collection merchant_key * @property Show\Field|Collection merchant_pem * @property Show\Field|Collection pay_check * @property Show\Field|Collection pay_client * @property Show\Field|Collection pay_handleroute * @property Show\Field|Collection pay_method * @property Show\Field|Collection pay_name * * @method Show\Field|Collection id(string $label = null) * @method Show\Field|Collection wholesale_price_cnf(string $label = null) * @method Show\Field|Collection other_ipu_cnf(string $label = null) * @method Show\Field|Collection api_hook(string $label = null) * @method Show\Field|Collection created_at(string $label = null) * @method Show\Field|Collection detail(string $label = null) * @method Show\Field|Collection name(string $label = null) * @method Show\Field|Collection type(string $label = null) * @method Show\Field|Collection updated_at(string $label = null) * @method Show\Field|Collection version(string $label = null) * @method Show\Field|Collection is_enabled(string $label = null) * @method Show\Field|Collection extension(string $label = null) * @method Show\Field|Collection icon(string $label = null) * @method Show\Field|Collection order(string $label = null) * @method Show\Field|Collection parent_id(string $label = null) * @method Show\Field|Collection uri(string $label = null) * @method Show\Field|Collection menu_id(string $label = null) * @method Show\Field|Collection permission_id(string $label = null) * @method Show\Field|Collection http_method(string $label = null) * @method Show\Field|Collection http_path(string $label = null) * @method Show\Field|Collection slug(string $label = null) * @method Show\Field|Collection role_id(string $label = null) * @method Show\Field|Collection user_id(string $label = null) * @method Show\Field|Collection value(string $label = null) * @method Show\Field|Collection avatar(string $label = null) * @method Show\Field|Collection password(string $label = null) * @method Show\Field|Collection remember_token(string $label = null) * @method Show\Field|Collection username(string $label = null) * @method Show\Field|Collection carmi(string $label = null) * @method Show\Field|Collection deleted_at(string $label = null) * @method Show\Field|Collection goods_id(string $label = null) * @method Show\Field|Collection status(string $label = null) * @method Show\Field|Collection coupon(string $label = null) * @method Show\Field|Collection discount(string $label = null) * @method Show\Field|Collection is_open(string $label = null) * @method Show\Field|Collection is_use(string $label = null) * @method Show\Field|Collection ret(string $label = null) * @method Show\Field|Collection coupons_id(string $label = null) * @method Show\Field|Collection tpl_content(string $label = null) * @method Show\Field|Collection tpl_name(string $label = null) * @method Show\Field|Collection tpl_token(string $label = null) * @method Show\Field|Collection connection(string $label = null) * @method Show\Field|Collection exception(string $label = null) * @method Show\Field|Collection failed_at(string $label = null) * @method Show\Field|Collection payload(string $label = null) * @method Show\Field|Collection queue(string $label = null) * @method Show\Field|Collection actual_price(string $label = null) * @method Show\Field|Collection buy_limit_num(string $label = null) * @method Show\Field|Collection buy_prompt(string $label = null) * @method Show\Field|Collection gd_name(string $label = null) * @method Show\Field|Collection group_id(string $label = null) * @method Show\Field|Collection in_stock(string $label = null) * @method Show\Field|Collection ord(string $label = null) * @method Show\Field|Collection picture(string $label = null) * @method Show\Field|Collection retail_price(string $label = null) * @method Show\Field|Collection sales_volume(string $label = null) * @method Show\Field|Collection gp_name(string $label = null) * @method Show\Field|Collection buy_amount(string $label = null) * @method Show\Field|Collection buy_ip(string $label = null) * @method Show\Field|Collection coupon_discount_price(string $label = null) * @method Show\Field|Collection coupon_id(string $label = null) * @method Show\Field|Collection email(string $label = null) * @method Show\Field|Collection goods_price(string $label = null) * @method Show\Field|Collection info(string $label = null) * @method Show\Field|Collection order_sn(string $label = null) * @method Show\Field|Collection pay_id(string $label = null) * @method Show\Field|Collection search_pwd(string $label = null) * @method Show\Field|Collection total_price(string $label = null) * @method Show\Field|Collection trade_no(string $label = null) * @method Show\Field|Collection wholesale_discount_price(string $label = null) * @method Show\Field|Collection merchant_id(string $label = null) * @method Show\Field|Collection merchant_key(string $label = null) * @method Show\Field|Collection merchant_pem(string $label = null) * @method Show\Field|Collection pay_check(string $label = null) * @method Show\Field|Collection pay_client(string $label = null) * @method Show\Field|Collection pay_handleroute(string $label = null) * @method Show\Field|Collection pay_method(string $label = null) * @method Show\Field|Collection pay_name(string $label = null) */ class Show {} /** */ class Form {} } namespace Dcat\Admin\Grid { /** */ class Column {} /** */ class Filter {} } namespace Dcat\Admin\Show { /** */ class Field {} } ================================================ FILE: debian_manual.md ================================================ ## 写在前面 - 此教程专为有洁癖的宝宝们准备。不使用任何一键安装脚本。面板党可以退散了!! - 本人测试环境是 Debian 11 其他的没测试。 ## 手动安装lnmp - 更新源 ```bash apt update apt upgrade ``` - 安装Nginx ```bash apt install nginx ``` - 安装Mariadb ```bash apt install mariadb-server ``` - 配置Mariadb ```bash mysql_secure_installation ``` 根据提示操作即可。 - 创建数据库 ```bash mariadb ``` 之后会显示 ```bash Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 74 Server version: 10.3.15-MariaDB-1 Debian 10 Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> ``` 接下来输入命令 ```sql CREATE DATABASE [这里替换为数据库名] ; GRANT ALL ON [这里替换为数据库名].* TO '[这里替换为用户名]'@'localhost' IDENTIFIED BY '[这里替换为密码]' WITH GRANT OPTION; FLUSH PRIVILEGES; EXIT ``` - 安装PHP7.4 ```bash apt install php php-fpm php-mysql php-gd php-zip php-opcache php-curl php-mbstring php-intl php-dom php-bcmath php-redis php-fileinfo ``` - 安装redis ```bash apt install redis ``` - 启用函数 `nano /etc/php/7.4/fpm/php.ini`,`ctrl+w` 搜索 `putenv`,`proc_open`,`pcntl_signal`,`pcntl_alarm` 在`disable_functions` 一行 有就去掉。 之后 `/etc/init.d/php7.4-fpm reload` ## 下载源代码 ```bash cd /var/www/dujiaoka apt install git git clone https://github.com/assimon/dujiaoka.git chmod 777 -R /var/www/dujiaoka ``` ## 配置 nginx - 假设你的域名是:`domain.com` - 假设你的网站目录是:`/home/wwwroot/dujiaoka` - 配置文件的存放目录是:`/usr/local/nginx/conf/vhost` - 按下文教程配置时,注意修改演示配置中的域名和目录 ```bash nano /etc/nginx/sites-enabled/dujiaoka ``` 你可以参考我的配置文件 ```bash server { listen 80; listen [::]:80; server_name domain.com ; return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name domain.com ; index index.html index.htm index.php default.html default.htm default.php; root /var/www/dujiaoka/public; ssl_certificate /etc/nginx/sslcert/cert.crt; ssl_certificate_key /etc/nginx/sslcert/key.key; # openssl dhparam -out /usr/local/nginx/conf/ssl/dhparam.pem 2048 #ssl_dhparam /usr/local/nginx/conf/ssl/dhparam.pem; location / { try_files $uri $uri/ /index.php?$query_string; } #error_page 404 /404.html; # Deny access to PHP files in specific directory #location ~ /(wp-content|uploads|wp-includes|images)/.*\.php$ { deny all; } location ~ [^/]\.php(/|$) { fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; include snippets/fastcgi-php.conf; } location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; } location ~ .*\.(js|css)?$ { expires 12h; } location ~ /.well-known { allow all; } location ~ /\. { deny all; } access_log off; } ``` 在 `/etc/nginx/sslcert/` 上传你的https证书 之后 `nginx -t` 没有报错就重启nginx `/etc/init.d/nginx restart` ## composer 安装 ```bash cd /var/www/dujiaoka php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" php composer-setup.php php -r "unlink('composer-setup.php');" mv composer.phar /usr/local/bin/composer adduser user su user composer install composer update su ``` ## 访问安装页面 访问你的域名,进行安装 - MySQL 数据库名:`dujiaoka` - MySQl 密码:`你设置的密码` - Redis 密码:`无需填写` - 网站URL:你的域名,如 `https://domain.com` ##编辑配置文件 编辑 `/var/www/dujiaoka/.env` - 将 `APP_DEBUG=true` 改为 `APP_DEBUG=false` - 另起一行,添加 `ADMIN_HTTPS=true` - 尝试登入后台。如果提示 `0 error` ,刷新页面即可 ## 配置 Supervisor 先安装 ```bash apt install supervisor ``` 创建配置文件 ```bash nano /etc/supervisor/conf.d/dujiaoka.conf ``` 写入配置文件 - 注意修改网站目录 ```bash [program:laravel-worker] process_name=%(program_name)s_%(process_num)02d command=php /home/wwwroot/dujiaoka/artisan queue:work autostart=true autorestart=true user=www numprocs=1 redirect_stderr=true stdout_logfile=/home/wwwlogs/worker.log ``` 启动 ```bash supervisorctl reread supervisorctl update supervisorctl start laravel-worker:* ``` ## 参考来源 https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mariadb-php-lemp-stack-on-debian-10 https://github.com/assimon/dujiaoka/wiki/2.x_linux_install ================================================ FILE: docker-compose.yml ================================================ version: "2.2" services: web: build: . container_name: dujiaoka ports: - "80:80" - "9000:9000" volumes: # 增加此行,则将环境信息进行复制到容器,请确保你存在该文件 - ${DATA_DIR}/dujiaoka/.env:/app/.env # 增加此行,避免每次重新创建容器都需要初始化 - ${DATA_DIR}/dujiaoka/install.lock:/app/install.lock # 增加此行,确保将上传的资源映射出来,避免容器重新创建后图片不在了 - ${DATA_DIR}/dujiaoka/public/uploads:/app/public/uploads environment: WEB_DOCUMENT_ROOT: "/app/public" TZ: Asia/Shanghai tty: true restart: always ================================================ FILE: package.json ================================================ { "private": true, "scripts": { "dev": "npm run development", "development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --config=node_modules/laravel-mix/setup/webpack.config.js", "watch": "npm run development -- --watch", "watch-poll": "npm run watch -- --watch-poll", "hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --disable-host-check --config=node_modules/laravel-mix/setup/webpack.config.js", "prod": "npm run production", "production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --config=node_modules/laravel-mix/setup/webpack.config.js" }, "devDependencies": { "axios": "^0.19", "cross-env": "^7.0", "laravel-mix": "^5.0.1", "lodash": "^4.17.19", "resolve-url-loader": "^3.1.0", "sass": "^1.15.2", "sass-loader": "^8.0.0" } } ================================================ FILE: phpunit.xml ================================================ ./tests/Unit ./tests/Feature ./app ================================================ FILE: public/.htaccess ================================================ Options -MultiViews -Indexes RewriteEngine On # Handle Authorization Header RewriteCond %{HTTP:Authorization} . RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] # Redirect Trailing Slashes If Not A Folder... RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} (.+)/$ RewriteRule ^ %1 [L,R=301] # Handle Front Controller... RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] ================================================ FILE: public/assets/hyper/css/hyper-loading.css ================================================ #loading { background-color: #eee; height: 100%; width: 100%; position: fixed; z-index: 1; margin-top: 0px; top: 0px; } #loading-center { width:100%; height:100%; position:relative; } #loading-center-absolute { position:absolute; left:50%; top:50%; height:150px; width:150px; margin-top:-75px; margin-left:-75px; } .object { width:20px; height:20px; background-color:#313a46; float:left; margin-right:20px; margin-top:65px; -moz-border-radius:50% 50% 50% 50%; -webkit-border-radius:50% 50% 50% 50%; border-radius:50% 50% 50% 50%; } #object_one { -webkit-animation:object_one 1.5s infinite; animation:object_one 1.5s infinite; } #object_two { -webkit-animation:object_two 1.5s infinite; animation:object_two 1.5s infinite; -webkit-animation-delay:0.25s; animation-delay:0.25s; } #object_three { -webkit-animation:object_three 1.5s infinite; animation:object_three 1.5s infinite; -webkit-animation-delay:0.5s; animation-delay:0.5s; } @-webkit-keyframes object_one { 75% { -webkit-transform:scale(0); } }@keyframes object_one { 75% { transform:scale(0); -webkit-transform:scale(0); } }@-webkit-keyframes object_two { 75% { -webkit-transform:scale(0); } }@keyframes object_two { 75% { transform:scale(0); -webkit-transform:scale(0); } }@-webkit-keyframes object_three { 75% { -webkit-transform:scale(0); } }@keyframes object_three { 75% { transform:scale(0); -webkit-transform:scale(0); } } ================================================ FILE: public/assets/hyper/css/hyper.css ================================================ /* app-creative.min.css */ .modal-header { padding: 6px 12px !important; } .btn-danger:focus, .btn-danger:not(:disabled):not(.disabled):active:focus, .btn-outline-primary:focus, .btn-primary:focus, .btn-outline-primary:not(:disabled):not(.disabled):active:focus, .btn-primary:not(:disabled):not(.disabled):active:focus { box-shadow: none; } body, .wrapper, .content-page { overflow: visible; } /* header */ .header-navbar { height: 70px; background-color: #fff; box-shadow: 0 0 35px 0 rgb(154 161 171 / 15%); } .header-flex { height: 70px; display: flex; align-items: center; justify-content: space-between; } .logo-title { font-size: 24px; font-weight: 700; display: inline-block; color: #000; margin-left: 10px; vertical-align: middle; font-family: "SimHei"; } body { background-color: #fafafa; height: 100%; } body[data-leftbar-compact-mode=condensed] { min-height: 0; } body[data-layout=topnav] .content-page { padding: 0!important; min-height: 0; } .content { margin-bottom: 69px; } .page-title-right { display: block !important; float: right !important; margin-top: 17px !important; } @media screen and (max-width: 380px) { .app-search { width: 160px; } } .hyper-wrapper a { color: #000; } .hyper-footer { position: absolute; width: 100%; bottom: 0; padding: 20px 0; line-height: 16px; border-top: 1px solid rgba(152,166,173,.2); color: #98a6ad; } @media screen and (max-width: 768px) { .hyper-footer { text-align: center; } } .hyper-footer a { color: #919ca7; } @media screen and (max-width: 576px) { .container { padding: 0 12px; } } @media screen and (min-width: 576px) { .container { padding: 0; } } @media screen and (min-width: 992px) { .hyper-sm-last { -webkit-box-ordinal-group: 14; -ms-flex-order: 13; order: 13; } } /* Home Page */ /* modal-dialog */ .modal-body img { max-width: 100%; height: auto; } @media screen and (min-width: 1367px) { .modal-dialog { max-width: 900px !important; } } @media screen and (max-width: 1367px) { .modal-dialog { max-width: 700px !important; } } @media screen and (max-width: 768px) { .modal-dialog { max-width: 500px !important; } } /* Select Button */ .nav-list { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 12px; } .nav-list::-webkit-scrollbar { display: none; } @media screen and (min-width: 767px) { .tab-link { min-width: 100px; } } @media screen and (max-width: 767px) { .tab-link { min-width: 60px; } } .tab-link { font-size: 1rem; padding: 6px 12px; border-radius: .5rem; border: 1px solid #3688fc; text-align: center; position: relative; overflow: hidden; } .tab-link.active { color: #fff; background: linear-gradient(-45deg, #3369ff, #3798f7); } .img-checkmark img { width: 36px; } .tab-link.active .img-checkmark { display: block; } .img-checkmark { position: absolute; opacity: 0.8; right: -6px; bottom: -12px; display: none; } /* Home Card */ .home-card { box-shadow: 0 3px 6px 0 rgb(0 0 0 / 12%); transition: all .5s; } .home-card:hover { box-shadow: 1px 3px 2px 0 rgb(0 0 0 / 5%); } @media screen and (max-width: 767px) { .hyper-wrapper { padding-left: 0; padding-right: 0; display: grid; grid-gap: 12px; gap: 12px; } .home-card { padding: 12px; margin-bottom: 0; font-size: 14px; display: flex; align-items: flex-start; border-radius: 5px; cursor: pointer; background-color: #fff; } .home-img { max-width: 80px; margin-right: 12px; } .flex { display: flex; flex-direction: column; } .name { font-size: 14px; min-height: 42px; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; text-align: left; } .price { color: #d0021b; } .price b { font-size: 14px; } } @media screen and (min-width: 768px) { .hyper-wrapper { padding-left: 0; padding-right: 0; display: grid; grid-template-columns: repeat(3,minmax(0,1fr)); grid-gap: 12px; } .home-card { padding: 32px 20px 14px 20px; font-size: 14px; display: flex; flex-direction: column; border-radius: 5px; cursor: pointer; background-color: #fff; } .home-img { max-width: 88%; margin: 0 auto auto auto; } .flex { display: flex; flex-direction: column; margin-top: 12px; } .name { font-size: 16px; min-height: 42px; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; } .price { color: #d0021b; text-align: center; } .price b { font-size: 24px; } } @media screen and (min-width: 992px) { .hyper-wrapper { padding-left: 0; padding-right: 0; display: grid; grid-template-columns: repeat(4,minmax(0,1fr)); grid-gap: 12px; } .home-card { padding: 32px 20px 14px 20px; font-size: 14px; display: flex; flex-direction: column; border-radius: 5px; cursor: pointer; background-color: #fff; } .home-img { max-width: 88%; margin: 0 auto auto auto; } .flex { display: flex; flex-direction: column; margin-top: 12px; } .name { font-size: 16px; min-height: 42px; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; } .price { color: #d0021b; text-align: center; } .price b { font-size: 24px; } } @media screen and (min-width: 1320px) { .hyper-wrapper { padding-left: 0; padding-right: 0; display: grid; grid-template-columns: repeat(5,minmax(0,1fr)); grid-gap: 12px; } .home-card { padding: 32px 20px 14px 20px; font-size: 14px; display: flex; flex-direction: column; border-radius: 5px; cursor: pointer; background-color: #fff; } .home-img { max-width: 88%; margin: 0 auto auto auto; } .flex { display: flex; flex-direction: column; margin-top: 12px; } .name { font-size: 16px; min-height: 42px; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; } .price { color: #d0021b; text-align: center; } .price b { font-size: 24px; } } /* Buy Page*/ .form-group h3 { font-weight: 400; color: #212529; } .geetest_holder.geetest_wind { width: 100% !important; min-width: 100% !important; } .buy-product img { max-width:100%; height: auto; border-radius: 5px; cursor: pointer; } @media screen and (min-width: 992px) { .buy-grid { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 12px; } .sticky { position: -webkit-sticky; position: sticky; top: 6px; } .buy-shop { grid-column: span 2 / span 2; } .buy-product { grid-column: span 4 / span 4; } } /* pay-type */ @media screen and (min-width: 1367px) { .pay-grid { display: grid; grid-template-columns: repeat(2,minmax(0,200px)); grid-gap: 12px; } } @media screen and (min-width: 991px) and (max-width: 1367px) { .pay-grid { display: grid; grid-template-columns: repeat(1,minmax(0,300px)); grid-gap: 6px; } } @media screen and (min-width: 768px) and (max-width: 991px) { .pay-grid { display: grid; grid-template-columns: repeat(4,minmax(0,200px)); grid-gap: 12px; } } @media screen and (min-width: 576px) and (max-width: 768px) { .pay-grid { display: grid; grid-template-columns: repeat(3,minmax(0,200px)); grid-gap: 12px; } } @media screen and (max-width: 576px) { .pay-grid { display: grid; grid-template-columns: repeat(2,minmax(0,200px)); grid-gap: 12px; } } @media screen and (max-width: 380px) { .pay-grid { display: grid; grid-template-columns: repeat(1,minmax(0,300px)); grid-gap: 6px; } } .pay-type { background-color: #fff; color: #000; border: 2px solid #bdcfe1; } .pay-type:hover { background-color: #fff; color: #000; } .pay-type.active { background-color: #fff; color: #3688fc; border: 2px solid #3688fc; } .buy-price { color: #ea5455; } /* Orderinfo Page */ .orderinfo-grid { display: grid; grid-template-columns: auto; } @media screen and (min-width: 767px) { .orderinfo-card-grid { display: grid; grid-template-columns: repeat(6,minmax(0,1fr)); grid-gap: 12px; } .orderinfo-info { grid-column: span 2 / span 2; } .orderinfo-kami { grid-column: span 4 / span 4; } } @media screen and (max-width: 767px) { .orderinfo-info { display: grid; justify-content: center; } } .textarea-kami { min-height: calc(100% - 48px - 38px) } .kami-btn { margin-top: 6px; float: right; } /* Footer */ .back-to-top { display: none; position: fixed; bottom: 120px; right: 20px; z-index: 99; } #back-to-top { display: flex; align-items: center; justify-content: center; border-radius: 100%; width: 44px; height: 44px; } ================================================ FILE: public/assets/hyper/css/vendor/buttons.bootstrap4.css ================================================ @keyframes dtb-spinner { 100% { transform: rotate(360deg); } } @-o-keyframes dtb-spinner { 100% { -o-transform: rotate(360deg); transform: rotate(360deg); } } @-ms-keyframes dtb-spinner { 100% { -ms-transform: rotate(360deg); transform: rotate(360deg); } } @-webkit-keyframes dtb-spinner { 100% { -webkit-transform: rotate(360deg); transform: rotate(360deg); } } @-moz-keyframes dtb-spinner { 100% { -moz-transform: rotate(360deg); transform: rotate(360deg); } } div.dt-button-info { position: fixed; top: 50%; left: 50%; width: 400px; margin-top: -100px; margin-left: -200px; background-color: white; border: 2px solid #111; box-shadow: 3px 3px 8px rgba(0, 0, 0, 0.3); border-radius: 3px; text-align: center; z-index: 21; } div.dt-button-info h2 { padding: 0.5em; margin: 0; font-weight: normal; border-bottom: 1px solid #ddd; background-color: #f3f3f3; } div.dt-button-info > div { padding: 1em; } div.dt-button-collection-title { text-align: center; padding: 0.3em 0 0.5em; font-size: 0.9em; } div.dt-button-collection-title:empty { display: none; } div.dt-button-collection.dropdown-menu { display: block; z-index: 2002; -webkit-column-gap: 8px; -moz-column-gap: 8px; -ms-column-gap: 8px; -o-column-gap: 8px; column-gap: 8px; } div.dt-button-collection.dropdown-menu.fixed { position: fixed; top: 50%; left: 50%; margin-left: -75px; border-radius: 0; } div.dt-button-collection.dropdown-menu.fixed.two-column { margin-left: -150px; } div.dt-button-collection.dropdown-menu.fixed.three-column { margin-left: -225px; } div.dt-button-collection.dropdown-menu.fixed.four-column { margin-left: -300px; } div.dt-button-collection.dropdown-menu > * { -webkit-column-break-inside: avoid; break-inside: avoid; } div.dt-button-collection.dropdown-menu.two-column { width: 300px; padding-bottom: 1px; -webkit-column-count: 2; -moz-column-count: 2; -ms-column-count: 2; -o-column-count: 2; column-count: 2; } div.dt-button-collection.dropdown-menu.three-column { width: 450px; padding-bottom: 1px; -webkit-column-count: 3; -moz-column-count: 3; -ms-column-count: 3; -o-column-count: 3; column-count: 3; } div.dt-button-collection.dropdown-menu.four-column { width: 600px; padding-bottom: 1px; -webkit-column-count: 4; -moz-column-count: 4; -ms-column-count: 4; -o-column-count: 4; column-count: 4; } div.dt-button-collection.dropdown-menu .dt-button { border-radius: 0; } div.dt-button-collection { -webkit-column-gap: 8px; -moz-column-gap: 8px; -ms-column-gap: 8px; -o-column-gap: 8px; column-gap: 8px; } div.dt-button-collection.fixed { position: fixed; top: 50%; left: 50%; margin-left: -75px; border-radius: 0; } div.dt-button-collection.fixed.two-column { margin-left: -150px; } div.dt-button-collection.fixed.three-column { margin-left: -225px; } div.dt-button-collection.fixed.four-column { margin-left: -300px; } div.dt-button-collection > * { -webkit-column-break-inside: avoid; break-inside: avoid; } div.dt-button-collection.two-column { width: 300px; padding-bottom: 1px; -webkit-column-count: 2; -moz-column-count: 2; -ms-column-count: 2; -o-column-count: 2; column-count: 2; } div.dt-button-collection.three-column { width: 450px; padding-bottom: 1px; -webkit-column-count: 3; -moz-column-count: 3; -ms-column-count: 3; -o-column-count: 3; column-count: 3; } div.dt-button-collection.four-column { width: 600px; padding-bottom: 1px; -webkit-column-count: 4; -moz-column-count: 4; -ms-column-count: 4; -o-column-count: 4; column-count: 4; } div.dt-button-collection .dt-button { border-radius: 0; } div.dt-button-collection.fixed { max-width: none; } div.dt-button-collection.fixed:before, div.dt-button-collection.fixed:after { display: none; } div.dt-button-background { position: fixed; top: 0; left: 0; width: 100%; height: 100%; z-index: 999; } @media screen and (max-width: 767px) { div.dt-buttons { float: none; width: 100%; text-align: center; margin-bottom: 0.5em; } div.dt-buttons a.btn { float: none; } } div.dt-buttons button.btn.processing, div.dt-buttons div.btn.processing, div.dt-buttons a.btn.processing { color: rgba(0, 0, 0, 0.2); } div.dt-buttons button.btn.processing:after, div.dt-buttons div.btn.processing:after, div.dt-buttons a.btn.processing:after { position: absolute; top: 50%; left: 50%; width: 16px; height: 16px; margin: -8px 0 0 -8px; box-sizing: border-box; display: block; content: ' '; border: 2px solid #282828; border-radius: 50%; border-left-color: transparent; border-right-color: transparent; animation: dtb-spinner 1500ms infinite linear; -o-animation: dtb-spinner 1500ms infinite linear; -ms-animation: dtb-spinner 1500ms infinite linear; -webkit-animation: dtb-spinner 1500ms infinite linear; -moz-animation: dtb-spinner 1500ms infinite linear; } ================================================ FILE: public/assets/hyper/css/vendor/dataTables.bootstrap4.css ================================================ table.dataTable { clear: both; margin-top: 6px !important; margin-bottom: 6px !important; max-width: none !important; border-collapse: separate !important; border-spacing: 0; } table.dataTable td, table.dataTable th { -webkit-box-sizing: content-box; box-sizing: content-box; } table.dataTable td.dataTables_empty, table.dataTable th.dataTables_empty { text-align: center; } table.dataTable.nowrap th, table.dataTable.nowrap td { white-space: nowrap; } div.dataTables_wrapper div.dataTables_length label { font-weight: normal; text-align: left; white-space: nowrap; } div.dataTables_wrapper div.dataTables_length select { width: auto; display: inline-block; } div.dataTables_wrapper div.dataTables_filter { text-align: right; } div.dataTables_wrapper div.dataTables_filter label { font-weight: normal; white-space: nowrap; text-align: left; } div.dataTables_wrapper div.dataTables_filter input { margin-left: 0.5em; display: inline-block; width: auto; } div.dataTables_wrapper div.dataTables_info { padding-top: 0.85em; white-space: nowrap; } div.dataTables_wrapper div.dataTables_paginate { margin: 0; white-space: nowrap; text-align: right; } div.dataTables_wrapper div.dataTables_paginate ul.pagination { margin: 2px 0; white-space: nowrap; justify-content: flex-end; } div.dataTables_wrapper div.dataTables_processing { position: absolute; top: 50%; left: 50%; width: 200px; margin-left: -100px; margin-top: -26px; text-align: center; padding: 1em 0; } table.dataTable thead > tr > th.sorting_asc, table.dataTable thead > tr > th.sorting_desc, table.dataTable thead > tr > th.sorting, table.dataTable thead > tr > td.sorting_asc, table.dataTable thead > tr > td.sorting_desc, table.dataTable thead > tr > td.sorting { padding-right: 30px; } table.dataTable thead > tr > th:active, table.dataTable thead > tr > td:active { outline: none; } table.dataTable thead .sorting, table.dataTable thead .sorting_asc, table.dataTable thead .sorting_desc, table.dataTable thead .sorting_asc_disabled, table.dataTable thead .sorting_desc_disabled { cursor: pointer; position: relative; } table.dataTable thead .sorting:before, table.dataTable thead .sorting:after, table.dataTable thead .sorting_asc:before, table.dataTable thead .sorting_asc:after, table.dataTable thead .sorting_desc:before, table.dataTable thead .sorting_desc:after, table.dataTable thead .sorting_asc_disabled:before, table.dataTable thead .sorting_asc_disabled:after, table.dataTable thead .sorting_desc_disabled:before, table.dataTable thead .sorting_desc_disabled:after { position: absolute; bottom: 0.9em; display: block; opacity: 0.3; } table.dataTable thead .sorting:before, table.dataTable thead .sorting_asc:before, table.dataTable thead .sorting_desc:before, table.dataTable thead .sorting_asc_disabled:before, table.dataTable thead .sorting_desc_disabled:before { right: 1em; content: "\2191"; } table.dataTable thead .sorting:after, table.dataTable thead .sorting_asc:after, table.dataTable thead .sorting_desc:after, table.dataTable thead .sorting_asc_disabled:after, table.dataTable thead .sorting_desc_disabled:after { right: 0.5em; content: "\2193"; } table.dataTable thead .sorting_asc:before, table.dataTable thead .sorting_desc:after { opacity: 1; } table.dataTable thead .sorting_asc_disabled:before, table.dataTable thead .sorting_desc_disabled:after { opacity: 0; } div.dataTables_scrollHead table.dataTable { margin-bottom: 0 !important; } div.dataTables_scrollBody table { border-top: none; margin-top: 0 !important; margin-bottom: 0 !important; } div.dataTables_scrollBody table thead .sorting:before, div.dataTables_scrollBody table thead .sorting_asc:before, div.dataTables_scrollBody table thead .sorting_desc:before, div.dataTables_scrollBody table thead .sorting:after, div.dataTables_scrollBody table thead .sorting_asc:after, div.dataTables_scrollBody table thead .sorting_desc:after { display: none; } div.dataTables_scrollBody table tbody tr:first-child th, div.dataTables_scrollBody table tbody tr:first-child td { border-top: none; } div.dataTables_scrollFoot > .dataTables_scrollFootInner { box-sizing: content-box; } div.dataTables_scrollFoot > .dataTables_scrollFootInner > table { margin-top: 0 !important; border-top: none; } @media screen and (max-width: 767px) { div.dataTables_wrapper div.dataTables_length, div.dataTables_wrapper div.dataTables_filter, div.dataTables_wrapper div.dataTables_info, div.dataTables_wrapper div.dataTables_paginate { text-align: center; } } table.dataTable.table-sm > thead > tr > th { padding-right: 20px; } table.dataTable.table-sm .sorting:before, table.dataTable.table-sm .sorting_asc:before, table.dataTable.table-sm .sorting_desc:before { top: 5px; right: 0.85em; } table.dataTable.table-sm .sorting:after, table.dataTable.table-sm .sorting_asc:after, table.dataTable.table-sm .sorting_desc:after { top: 5px; } table.table-bordered.dataTable th, table.table-bordered.dataTable td { border-left-width: 0; } table.table-bordered.dataTable th:last-child, table.table-bordered.dataTable th:last-child, table.table-bordered.dataTable td:last-child, table.table-bordered.dataTable td:last-child { border-right-width: 0; } table.table-bordered.dataTable tbody th, table.table-bordered.dataTable tbody td { border-bottom-width: 0; } div.dataTables_scrollHead table.table-bordered { border-bottom-width: 0; } div.table-responsive > div.dataTables_wrapper > div.row { margin: 0; } div.table-responsive > div.dataTables_wrapper > div.row > div[class^="col-"]:first-child { padding-left: 0; } div.table-responsive > div.dataTables_wrapper > div.row > div[class^="col-"]:last-child { padding-right: 0; } ================================================ FILE: public/assets/hyper/css/vendor/frappe-gantt.css ================================================ .gantt .grid-background { fill: none; } .gantt .grid-header { fill: #ffffff; stroke: #e0e0e0; stroke-width: 1.4; } .gantt .grid-row { fill: #ffffff; } .gantt .grid-row:nth-child(even) { fill: #f5f5f5; } .gantt .row-line { stroke: #ebeff2; } .gantt .tick { stroke: #e0e0e0; stroke-width: 0.2; } .gantt .tick.thick { stroke-width: 0.4; } .gantt .today-highlight { fill: #fcf8e3; opacity: 0.5; } .gantt .arrow { fill: none; stroke: #666; stroke-width: 1.4; } .gantt .bar { fill: #b8c2cc; stroke: #8D99A6; stroke-width: 0; transition: stroke-width .3s ease; user-select: none; } .gantt .bar-progress { fill: #a3a3ff; } .gantt .bar-invalid { fill: transparent; stroke: #8D99A6; stroke-width: 1; stroke-dasharray: 5; } .gantt .bar-invalid ~ .bar-label { fill: #555; } .gantt .bar-label { fill: #fff; dominant-baseline: central; text-anchor: middle; font-size: 12px; font-weight: lighter; } .gantt .bar-label.big { fill: #555; text-anchor: start; } .gantt .handle { fill: #ddd; cursor: ew-resize; opacity: 0; visibility: hidden; transition: opacity .3s ease; } .gantt .bar-wrapper { cursor: pointer; outline: none; } .gantt .bar-wrapper:hover .bar { fill: #a9b5c1; } .gantt .bar-wrapper:hover .bar-progress { fill: #8a8aff; } .gantt .bar-wrapper:hover .handle { visibility: visible; opacity: 1; } .gantt .bar-wrapper.active .bar { fill: #a9b5c1; } .gantt .bar-wrapper.active .bar-progress { fill: #8a8aff; } .gantt .lower-text, .gantt .upper-text { font-size: 12px; text-anchor: middle; } .gantt .upper-text { fill: #555; } .gantt .lower-text { fill: #333; } .gantt .hide { display: none; } .gantt-container { position: relative; overflow: auto; font-size: 12px; } .gantt-container .popup-wrapper { position: absolute; top: 0; left: 0; background: rgba(0, 0, 0, 0.8); padding: 0; color: #959da5; border-radius: 3px; } .gantt-container .popup-wrapper .title { border-bottom: 3px solid #a3a3ff; padding: 10px; } .gantt-container .popup-wrapper .subtitle { padding: 10px; color: #dfe2e5; } .gantt-container .popup-wrapper .pointer { position: absolute; height: 5px; margin: 0 0 0 -5px; border: 5px solid transparent; border-top-color: rgba(0, 0, 0, 0.8); } ================================================ FILE: public/assets/hyper/css/vendor/jquery-jvectormap-1.2.2.css ================================================ .jvectormap-label { position: absolute; display: none; border: solid 1px #CDCDCD; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; background: #292929; color: white; font-family: sans-serif, Verdana; font-size: smaller; padding: 3px; } .jvectormap-zoomin, .jvectormap-zoomout { position: absolute; left: 10px; -webkit-border-radius: 3px; -moz-border-radius: 3px; background: #424242; padding: 2px; color: white; width: 15px; height: 15px; cursor: pointer; line-height: 10px; text-align: center; } .jvectormap-zoomin { top: 10px; } .jvectormap-zoomout { top: 30px; } ================================================ FILE: public/assets/hyper/css/vendor/responsive.bootstrap4.css ================================================ table.dataTable.dtr-inline.collapsed > tbody > tr > td.child, table.dataTable.dtr-inline.collapsed > tbody > tr > th.child, table.dataTable.dtr-inline.collapsed > tbody > tr > td.dataTables_empty { cursor: default !important; } table.dataTable.dtr-inline.collapsed > tbody > tr > td.child:before, table.dataTable.dtr-inline.collapsed > tbody > tr > th.child:before, table.dataTable.dtr-inline.collapsed > tbody > tr > td.dataTables_empty:before { display: none !important; } table.dataTable.dtr-inline.collapsed > tbody > tr[role="row"] > td:first-child, table.dataTable.dtr-inline.collapsed > tbody > tr[role="row"] > th:first-child { position: relative; padding-left: 30px; cursor: pointer; } table.dataTable.dtr-inline.collapsed > tbody > tr[role="row"] > td:first-child:before, table.dataTable.dtr-inline.collapsed > tbody > tr[role="row"] > th:first-child:before { top: 12px; left: 4px; height: 14px; width: 14px; display: block; position: absolute; color: white; border: 2px solid white; border-radius: 14px; box-shadow: 0 0 3px #444; box-sizing: content-box; text-align: center; text-indent: 0 !important; font-family: 'Courier New', Courier, monospace; line-height: 14px; content: '+'; background-color: #0275d8; } table.dataTable.dtr-inline.collapsed > tbody > tr.parent > td:first-child:before, table.dataTable.dtr-inline.collapsed > tbody > tr.parent > th:first-child:before { content: '-'; background-color: #d33333; } table.dataTable.dtr-inline.collapsed.compact > tbody > tr > td:first-child, table.dataTable.dtr-inline.collapsed.compact > tbody > tr > th:first-child { padding-left: 27px; } table.dataTable.dtr-inline.collapsed.compact > tbody > tr > td:first-child:before, table.dataTable.dtr-inline.collapsed.compact > tbody > tr > th:first-child:before { top: 5px; left: 4px; height: 14px; width: 14px; border-radius: 14px; line-height: 14px; text-indent: 3px; } table.dataTable.dtr-column > tbody > tr > td.control, table.dataTable.dtr-column > tbody > tr > th.control { position: relative; cursor: pointer; } table.dataTable.dtr-column > tbody > tr > td.control:before, table.dataTable.dtr-column > tbody > tr > th.control:before { top: 50%; left: 50%; height: 16px; width: 16px; margin-top: -10px; margin-left: -10px; display: block; position: absolute; color: white; border: 2px solid white; border-radius: 14px; box-shadow: 0 0 3px #444; box-sizing: content-box; text-align: center; text-indent: 0 !important; font-family: 'Courier New', Courier, monospace; line-height: 14px; content: '+'; background-color: #0275d8; } table.dataTable.dtr-column > tbody > tr.parent td.control:before, table.dataTable.dtr-column > tbody > tr.parent th.control:before { content: '-'; background-color: #d33333; } table.dataTable > tbody > tr.child { padding: 0.5em 1em; } table.dataTable > tbody > tr.child:hover { background: transparent !important; } table.dataTable > tbody > tr.child ul.dtr-details { display: inline-block; list-style-type: none; margin: 0; padding: 0; } table.dataTable > tbody > tr.child ul.dtr-details > li { border-bottom: 1px solid #efefef; padding: 0.5em 0; } table.dataTable > tbody > tr.child ul.dtr-details > li:first-child { padding-top: 0; } table.dataTable > tbody > tr.child ul.dtr-details > li:last-child { border-bottom: none; } table.dataTable > tbody > tr.child span.dtr-title { display: inline-block; min-width: 75px; font-weight: bold; } div.dtr-modal { position: fixed; box-sizing: border-box; top: 0; left: 0; height: 100%; width: 100%; z-index: 100; padding: 10em 1em; } div.dtr-modal div.dtr-modal-display { position: absolute; top: 0; left: 0; bottom: 0; right: 0; width: 50%; height: 50%; overflow: auto; margin: auto; z-index: 102; overflow: auto; background-color: #f5f5f7; border: 1px solid black; border-radius: 0.5em; box-shadow: 0 12px 30px rgba(0, 0, 0, 0.6); } div.dtr-modal div.dtr-modal-content { position: relative; padding: 1em; } div.dtr-modal div.dtr-modal-close { position: absolute; top: 6px; right: 6px; width: 22px; height: 22px; border: 1px solid #eaeaea; background-color: #f9f9f9; text-align: center; border-radius: 3px; cursor: pointer; z-index: 12; } div.dtr-modal div.dtr-modal-close:hover { background-color: #eaeaea; } div.dtr-modal div.dtr-modal-background { position: fixed; top: 0; left: 0; right: 0; bottom: 0; z-index: 101; background: rgba(0, 0, 0, 0.6); } @media screen and (max-width: 767px) { div.dtr-modal div.dtr-modal-display { width: 95%; } } div.dtr-bs-modal table.table tr:first-child td { border-top: none; } ================================================ FILE: public/assets/hyper/css/vendor/select.bootstrap4.css ================================================ table.dataTable tbody > tr.selected, table.dataTable tbody > tr > .selected { background-color: #0275d8; } table.dataTable.stripe tbody > tr.odd.selected, table.dataTable.stripe tbody > tr.odd > .selected, table.dataTable.display tbody > tr.odd.selected, table.dataTable.display tbody > tr.odd > .selected { background-color: #0172d2; } table.dataTable.hover tbody > tr.selected:hover, table.dataTable.hover tbody > tr > .selected:hover, table.dataTable.display tbody > tr.selected:hover, table.dataTable.display tbody > tr > .selected:hover { background-color: #0170d0; } table.dataTable.order-column tbody > tr.selected > .sorting_1, table.dataTable.order-column tbody > tr.selected > .sorting_2, table.dataTable.order-column tbody > tr.selected > .sorting_3, table.dataTable.order-column tbody > tr > .selected, table.dataTable.display tbody > tr.selected > .sorting_1, table.dataTable.display tbody > tr.selected > .sorting_2, table.dataTable.display tbody > tr.selected > .sorting_3, table.dataTable.display tbody > tr > .selected { background-color: #0172d3; } table.dataTable.display tbody > tr.odd.selected > .sorting_1, table.dataTable.order-column.stripe tbody > tr.odd.selected > .sorting_1 { background-color: #016ecc; } table.dataTable.display tbody > tr.odd.selected > .sorting_2, table.dataTable.order-column.stripe tbody > tr.odd.selected > .sorting_2 { background-color: #016fcd; } table.dataTable.display tbody > tr.odd.selected > .sorting_3, table.dataTable.order-column.stripe tbody > tr.odd.selected > .sorting_3 { background-color: #0170cf; } table.dataTable.display tbody > tr.even.selected > .sorting_1, table.dataTable.order-column.stripe tbody > tr.even.selected > .sorting_1 { background-color: #0172d3; } table.dataTable.display tbody > tr.even.selected > .sorting_2, table.dataTable.order-column.stripe tbody > tr.even.selected > .sorting_2 { background-color: #0173d5; } table.dataTable.display tbody > tr.even.selected > .sorting_3, table.dataTable.order-column.stripe tbody > tr.even.selected > .sorting_3 { background-color: #0174d7; } table.dataTable.display tbody > tr.odd > .selected, table.dataTable.order-column.stripe tbody > tr.odd > .selected { background-color: #016ecc; } table.dataTable.display tbody > tr.even > .selected, table.dataTable.order-column.stripe tbody > tr.even > .selected { background-color: #0172d3; } table.dataTable.display tbody > tr.selected:hover > .sorting_1, table.dataTable.order-column.hover tbody > tr.selected:hover > .sorting_1 { background-color: #016bc6; } table.dataTable.display tbody > tr.selected:hover > .sorting_2, table.dataTable.order-column.hover tbody > tr.selected:hover > .sorting_2 { background-color: #016cc7; } table.dataTable.display tbody > tr.selected:hover > .sorting_3, table.dataTable.order-column.hover tbody > tr.selected:hover > .sorting_3 { background-color: #016dca; } table.dataTable.display tbody > tr:hover > .selected, table.dataTable.display tbody > tr > .selected:hover, table.dataTable.order-column.hover tbody > tr:hover > .selected, table.dataTable.order-column.hover tbody > tr > .selected:hover { background-color: #016bc6; } table.dataTable tbody td.select-checkbox, table.dataTable tbody th.select-checkbox { position: relative; } table.dataTable tbody td.select-checkbox:before, table.dataTable tbody td.select-checkbox:after, table.dataTable tbody th.select-checkbox:before, table.dataTable tbody th.select-checkbox:after { display: block; position: absolute; top: 1.2em; left: 50%; width: 12px; height: 12px; box-sizing: border-box; } table.dataTable tbody td.select-checkbox:before, table.dataTable tbody th.select-checkbox:before { content: ' '; margin-top: -6px; margin-left: -6px; border: 1px solid black; border-radius: 3px; } table.dataTable tr.selected td.select-checkbox:after, table.dataTable tr.selected th.select-checkbox:after { content: '\2714'; margin-top: -11px; margin-left: -4px; text-align: center; text-shadow: 1px 1px #B0BED9, -1px -1px #B0BED9, 1px -1px #B0BED9, -1px 1px #B0BED9; } div.dataTables_wrapper span.select-info, div.dataTables_wrapper span.select-item { margin-left: 0.5em; } @media screen and (max-width: 640px) { div.dataTables_wrapper span.select-info, div.dataTables_wrapper span.select-item { margin-left: 0; display: block; } } table.dataTable tbody tr.selected, table.dataTable tbody th.selected, table.dataTable tbody td.selected { color: white; } table.dataTable tbody tr.selected a, table.dataTable tbody th.selected a, table.dataTable tbody td.selected a { color: #a2d4ed; } ================================================ FILE: public/assets/hyper/css/vendor/summernote-bs4.css ================================================ @font-face{font-family:"summernote";font-style:normal;font-weight:normal;src:url("https://coderthemes.com/hyper/creative/assets/css/vendor/font/summernote.eot?1d9aeaaff0a8939558a45be6cd52cd4c");src:url("https://coderthemes.com/hyper/creative/assets/css/vendor/font/summernote.eot?1d9aeaaff0a8939558a45be6cd52cd4c") format("embedded-opentype"),url("https://coderthemes.com/hyper/creative/assets/css/vendor/font/summernote.woff?1d9aeaaff0a8939558a45be6cd52cd4c") format("woff"),url("https://coderthemes.com/hyper/creative/assets/css/vendor/font/summernote.ttf?1d9aeaaff0a8939558a45be6cd52cd4c") format("truetype")}[class^="note-icon-"]:before,[class*=" note-icon-"]:before{display:inline-block;font:normal normal normal 14px summernote;font-size:inherit;-webkit-font-smoothing:antialiased;text-decoration:inherit;text-rendering:auto;text-transform:none;vertical-align:middle;speak:none;-moz-osx-font-smoothing:grayscale}.note-icon-align-center:before,.note-icon-align-indent:before,.note-icon-align-justify:before,.note-icon-align-left:before,.note-icon-align-outdent:before,.note-icon-align-right:before,.note-icon-align:before,.note-icon-arrow-circle-down:before,.note-icon-arrow-circle-left:before,.note-icon-arrow-circle-right:before,.note-icon-arrow-circle-up:before,.note-icon-arrows-alt:before,.note-icon-arrows-h:before,.note-icon-arrows-v:before,.note-icon-bold:before,.note-icon-caret:before,.note-icon-chain-broken:before,.note-icon-circle:before,.note-icon-close:before,.note-icon-code:before,.note-icon-col-after:before,.note-icon-col-before:before,.note-icon-col-remove:before,.note-icon-eraser:before,.note-icon-float-left:before,.note-icon-float-none:before,.note-icon-float-right:before,.note-icon-font:before,.note-icon-frame:before,.note-icon-italic:before,.note-icon-link:before,.note-icon-magic:before,.note-icon-menu-check:before,.note-icon-minus:before,.note-icon-orderedlist:before,.note-icon-pencil:before,.note-icon-picture:before,.note-icon-question:before,.note-icon-redo:before,.note-icon-rollback:before,.note-icon-row-above:before,.note-icon-row-below:before,.note-icon-row-remove:before,.note-icon-special-character:before,.note-icon-square:before,.note-icon-strikethrough:before,.note-icon-subscript:before,.note-icon-summernote:before,.note-icon-superscript:before,.note-icon-table:before,.note-icon-text-height:before,.note-icon-trash:before,.note-icon-underline:before,.note-icon-undo:before,.note-icon-unorderedlist:before,.note-icon-video:before{display:inline-block;font-family:"summernote";font-style:normal;font-weight:normal;text-decoration:inherit}.note-icon-align-center:before{content:"\f101"}.note-icon-align-indent:before{content:"\f102"}.note-icon-align-justify:before{content:"\f103"}.note-icon-align-left:before{content:"\f104"}.note-icon-align-outdent:before{content:"\f105"}.note-icon-align-right:before{content:"\f106"}.note-icon-align:before{content:"\f107"}.note-icon-arrow-circle-down:before{content:"\f108"}.note-icon-arrow-circle-left:before{content:"\f109"}.note-icon-arrow-circle-right:before{content:"\f10a"}.note-icon-arrow-circle-up:before{content:"\f10b"}.note-icon-arrows-alt:before{content:"\f10c"}.note-icon-arrows-h:before{content:"\f10d"}.note-icon-arrows-v:before{content:"\f10e"}.note-icon-bold:before{content:"\f10f"}.note-icon-caret:before{content:"\f110"}.note-icon-chain-broken:before{content:"\f111"}.note-icon-circle:before{content:"\f112"}.note-icon-close:before{content:"\f113"}.note-icon-code:before{content:"\f114"}.note-icon-col-after:before{content:"\f115"}.note-icon-col-before:before{content:"\f116"}.note-icon-col-remove:before{content:"\f117"}.note-icon-eraser:before{content:"\f118"}.note-icon-float-left:before{content:"\f119"}.note-icon-float-none:before{content:"\f11a"}.note-icon-float-right:before{content:"\f11b"}.note-icon-font:before{content:"\f11c"}.note-icon-frame:before{content:"\f11d"}.note-icon-italic:before{content:"\f11e"}.note-icon-link:before{content:"\f11f"}.note-icon-magic:before{content:"\f120"}.note-icon-menu-check:before{content:"\f121"}.note-icon-minus:before{content:"\f122"}.note-icon-orderedlist:before{content:"\f123"}.note-icon-pencil:before{content:"\f124"}.note-icon-picture:before{content:"\f125"}.note-icon-question:before{content:"\f126"}.note-icon-redo:before{content:"\f127"}.note-icon-rollback:before{content:"\f128"}.note-icon-row-above:before{content:"\f129"}.note-icon-row-below:before{content:"\f12a"}.note-icon-row-remove:before{content:"\f12b"}.note-icon-special-character:before{content:"\f12c"}.note-icon-square:before{content:"\f12d"}.note-icon-strikethrough:before{content:"\f12e"}.note-icon-subscript:before{content:"\f12f"}.note-icon-summernote:before{content:"\f130"}.note-icon-superscript:before{content:"\f131"}.note-icon-table:before{content:"\f132"}.note-icon-text-height:before{content:"\f133"}.note-icon-trash:before{content:"\f134"}.note-icon-underline:before{content:"\f135"}.note-icon-undo:before{content:"\f136"}.note-icon-unorderedlist:before{content:"\f137"}.note-icon-video:before{content:"\f138"}.note-editor{position:relative}.note-editor .note-dropzone{position:absolute;z-index:100;display:none;color:#87cefa;background-color:#fff;opacity:.95}.note-editor .note-dropzone .note-dropzone-message{display:table-cell;font-size:28px;font-weight:700;text-align:center;vertical-align:middle}.note-editor .note-dropzone.hover{color:#098ddf}.note-editor.dragover .note-dropzone{display:table}.note-editor .note-editing-area{position:relative}.note-editor .note-editing-area .note-editable{outline:0}.note-editor .note-editing-area .note-editable sup{vertical-align:super}.note-editor .note-editing-area .note-editable sub{vertical-align:sub}.note-editor .note-editing-area img.note-float-left{margin-right:10px}.note-editor .note-editing-area img.note-float-right{margin-left:10px}.note-editor.note-frame{border:1px solid #a9a9a9}.note-editor.note-frame.codeview .note-editing-area .note-editable{display:none}.note-editor.note-frame.codeview .note-editing-area .note-codable{display:block}.note-editor.note-frame .note-editing-area{overflow:hidden}.note-editor.note-frame .note-editing-area .note-editable{padding:10px;overflow:auto;color:#000;word-wrap:break-word;background-color:#fff}.note-editor.note-frame .note-editing-area .note-editable[contenteditable="false"]{background-color:#e5e5e5}.note-editor.note-frame .note-editing-area .note-codable{display:none;width:100%;padding:10px;margin-bottom:0;font-family:Menlo,Monaco,monospace,sans-serif;font-size:14px;color:#ccc;background-color:#222;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;outline:0;box-shadow:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;resize:none}.note-editor.note-frame.fullscreen{position:fixed;top:0;left:0;z-index:1050;width:100%!important}.note-editor.note-frame.fullscreen .note-editable{background-color:#fff}.note-editor.note-frame.fullscreen .note-resizebar{display:none}.note-editor.note-frame .note-status-output{display:block;width:100%;height:20px;margin-bottom:0;font-size:14px;line-height:1.42857143;color:#000;border:0;border-top:1px solid #e2e2e2}.note-editor.note-frame .note-status-output:empty{height:0;border-top:0 solid transparent}.note-editor.note-frame .note-status-output .pull-right{float:right!important}.note-editor.note-frame .note-status-output .text-muted{color:#777}.note-editor.note-frame .note-status-output .text-primary{color:#286090}.note-editor.note-frame .note-status-output .text-success{color:#3c763d}.note-editor.note-frame .note-status-output .text-info{color:#31708f}.note-editor.note-frame .note-status-output .text-warning{color:#8a6d3b}.note-editor.note-frame .note-status-output .text-danger{color:#a94442}.note-editor.note-frame .note-status-output .alert{padding:7px 10px 2px 10px;margin:-7px 0 0 0;color:#000;background-color:#f5f5f5;border-radius:0}.note-editor.note-frame .note-status-output .alert .note-icon{margin-right:5px}.note-editor.note-frame .note-status-output .alert-success{color:#3c763d!important;background-color:#dff0d8!important}.note-editor.note-frame .note-status-output .alert-info{color:#31708f!important;background-color:#d9edf7!important}.note-editor.note-frame .note-status-output .alert-warning{color:#8a6d3b!important;background-color:#fcf8e3!important}.note-editor.note-frame .note-status-output .alert-danger{color:#a94442!important;background-color:#f2dede!important}.note-editor.note-frame .note-statusbar{background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.note-editor.note-frame .note-statusbar .note-resizebar{width:100%;height:9px;padding-top:1px;cursor:ns-resize}.note-editor.note-frame .note-statusbar .note-resizebar .note-icon-bar{width:20px;margin:1px auto;border-top:1px solid #a9a9a9}.note-editor.note-frame .note-statusbar.locked .note-resizebar{cursor:default}.note-editor.note-frame .note-statusbar.locked .note-resizebar .note-icon-bar{display:none}.note-editor.note-frame .note-placeholder{padding:10px}.note-popover.popover{display:none;max-width:none}.note-popover.popover .popover-content a{display:inline-block;max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle}.note-popover.popover .arrow{left:20px!important}.note-toolbar{position:relative;z-index:500}.note-popover .popover-content,.card-header.note-toolbar{padding:0 0 5px 5px;margin:0;background:#f5f5f5}.note-popover .popover-content>.btn-group,.card-header.note-toolbar>.btn-group{margin-top:5px;margin-right:5px;margin-left:0}.note-popover .popover-content .btn-group .note-table,.card-header.note-toolbar .btn-group .note-table{min-width:0;padding:5px}.note-popover .popover-content .btn-group .note-table .note-dimension-picker,.card-header.note-toolbar .btn-group .note-table .note-dimension-picker{font-size:18px}.note-popover .popover-content .btn-group .note-table .note-dimension-picker .note-dimension-picker-mousecatcher,.card-header.note-toolbar .btn-group .note-table .note-dimension-picker .note-dimension-picker-mousecatcher{position:absolute!important;z-index:3;width:10em;height:10em;cursor:pointer}.note-popover .popover-content .btn-group .note-table .note-dimension-picker .note-dimension-picker-unhighlighted,.card-header.note-toolbar .btn-group .note-table .note-dimension-picker .note-dimension-picker-unhighlighted{position:relative!important;z-index:1;width:5em;height:5em;background:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASAgMAAAAroGbEAAAACVBMVEUAAIj4+Pjp6ekKlAqjAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfYAR0BKhmnaJzPAAAAG0lEQVQI12NgAAOtVatWMTCohoaGUY+EmIkEAEruEzK2J7tvAAAAAElFTkSuQmCC') repeat}.note-popover .popover-content .btn-group .note-table .note-dimension-picker .note-dimension-picker-highlighted,.card-header.note-toolbar .btn-group .note-table .note-dimension-picker .note-dimension-picker-highlighted{position:absolute!important;z-index:2;width:1em;height:1em;background:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASAgMAAAAroGbEAAAACVBMVEUAAIjd6vvD2f9LKLW+AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfYAR0BKwNDEVT0AAAAG0lEQVQI12NgAAOtVatWMTCohoaGUY+EmIkEAEruEzK2J7tvAAAAAElFTkSuQmCC') repeat}.note-popover .popover-content .note-style .dropdown-style blockquote,.card-header.note-toolbar .note-style .dropdown-style blockquote,.note-popover .popover-content .note-style .dropdown-style pre,.card-header.note-toolbar .note-style .dropdown-style pre{padding:5px 10px;margin:0}.note-popover .popover-content .note-style .dropdown-style h1,.card-header.note-toolbar .note-style .dropdown-style h1,.note-popover .popover-content .note-style .dropdown-style h2,.card-header.note-toolbar .note-style .dropdown-style h2,.note-popover .popover-content .note-style .dropdown-style h3,.card-header.note-toolbar .note-style .dropdown-style h3,.note-popover .popover-content .note-style .dropdown-style h4,.card-header.note-toolbar .note-style .dropdown-style h4,.note-popover .popover-content .note-style .dropdown-style h5,.card-header.note-toolbar .note-style .dropdown-style h5,.note-popover .popover-content .note-style .dropdown-style h6,.card-header.note-toolbar .note-style .dropdown-style h6,.note-popover .popover-content .note-style .dropdown-style p,.card-header.note-toolbar .note-style .dropdown-style p{padding:0;margin:0}.note-popover .popover-content .note-color-all .dropdown-menu,.card-header.note-toolbar .note-color-all .dropdown-menu{min-width:337px}.note-popover .popover-content .note-color .dropdown-toggle,.card-header.note-toolbar .note-color .dropdown-toggle{width:20px;padding-left:5px}.note-popover .popover-content .note-color .dropdown-menu .note-palette,.card-header.note-toolbar .note-color .dropdown-menu .note-palette{display:inline-block;width:160px;margin:0}.note-popover .popover-content .note-color .dropdown-menu .note-palette:first-child,.card-header.note-toolbar .note-color .dropdown-menu .note-palette:first-child{margin:0 5px}.note-popover .popover-content .note-color .dropdown-menu .note-palette .note-palette-title,.card-header.note-toolbar .note-color .dropdown-menu .note-palette .note-palette-title{margin:2px 7px;font-size:12px;text-align:center;border-bottom:1px solid #eee}.note-popover .popover-content .note-color .dropdown-menu .note-palette .note-color-reset,.card-header.note-toolbar .note-color .dropdown-menu .note-palette .note-color-reset,.note-popover .popover-content .note-color .dropdown-menu .note-palette .note-color-select,.card-header.note-toolbar .note-color .dropdown-menu .note-palette .note-color-select{width:100%;padding:0 3px;margin:3px;font-size:11px;cursor:pointer;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.note-popover .popover-content .note-color .dropdown-menu .note-palette .note-color-row,.card-header.note-toolbar .note-color .dropdown-menu .note-palette .note-color-row{height:20px}.note-popover .popover-content .note-color .dropdown-menu .note-palette .note-color-reset:hover,.card-header.note-toolbar .note-color .dropdown-menu .note-palette .note-color-reset:hover{background:#eee}.note-popover .popover-content .note-color .dropdown-menu .note-palette .note-color-select-btn,.card-header.note-toolbar .note-color .dropdown-menu .note-palette .note-color-select-btn{display:none}.note-popover .popover-content .note-color .dropdown-menu .note-palette .note-holder-custom .note-color-btn,.card-header.note-toolbar .note-color .dropdown-menu .note-palette .note-holder-custom .note-color-btn{border:1px solid #eee}.note-popover .popover-content .note-para .dropdown-menu,.card-header.note-toolbar .note-para .dropdown-menu{min-width:216px;padding:5px}.note-popover .popover-content .note-para .dropdown-menu>div:first-child,.card-header.note-toolbar .note-para .dropdown-menu>div:first-child{margin-right:5px}.note-popover .popover-content .dropdown-menu,.card-header.note-toolbar .dropdown-menu{min-width:90px}.note-popover .popover-content .dropdown-menu.right,.card-header.note-toolbar .dropdown-menu.right{right:0;left:auto}.note-popover .popover-content .dropdown-menu.right::before,.card-header.note-toolbar .dropdown-menu.right::before{right:9px;left:auto!important}.note-popover .popover-content .dropdown-menu.right::after,.card-header.note-toolbar .dropdown-menu.right::after{right:10px;left:auto!important}.note-popover .popover-content .dropdown-menu.note-check a i,.card-header.note-toolbar .dropdown-menu.note-check a i{color:deepskyblue;visibility:hidden}.note-popover .popover-content .dropdown-menu.note-check a.checked i,.card-header.note-toolbar .dropdown-menu.note-check a.checked i{visibility:visible}.note-popover .popover-content .note-fontsize-10,.card-header.note-toolbar .note-fontsize-10{font-size:10px}.note-popover .popover-content .note-color-palette,.card-header.note-toolbar .note-color-palette{line-height:1}.note-popover .popover-content .note-color-palette div .note-color-btn,.card-header.note-toolbar .note-color-palette div .note-color-btn{width:20px;height:20px;padding:0;margin:0;border:1px solid #fff}.note-popover .popover-content .note-color-palette div .note-color-btn:hover,.card-header.note-toolbar .note-color-palette div .note-color-btn:hover{border:1px solid #000}.note-dialog>div{display:none}.note-dialog .form-group{margin-right:0;margin-left:0}.note-dialog .note-modal-form{margin:0}.note-dialog .note-image-dialog .note-dropzone{min-height:100px;margin-bottom:10px;font-size:30px;line-height:4;color:lightgray;text-align:center;border:4px dashed lightgray}@-moz-document url-prefix(){.note-image-input{height:auto}}.note-placeholder{position:absolute;display:none;color:gray}.note-handle .note-control-selection{position:absolute;display:none;border:1px solid black}.note-handle .note-control-selection>div{position:absolute}.note-handle .note-control-selection .note-control-selection-bg{width:100%;height:100%;background-color:black;-webkit-opacity:.3;-khtml-opacity:.3;-moz-opacity:.3;opacity:.3;-ms-filter:alpha(opacity=30);filter:alpha(opacity=30)}.note-handle .note-control-selection .note-control-handle{width:7px;height:7px;border:1px solid black}.note-handle .note-control-selection .note-control-holder{width:7px;height:7px;border:1px solid black}.note-handle .note-control-selection .note-control-sizing{width:7px;height:7px;background-color:white;border:1px solid black}.note-handle .note-control-selection .note-control-nw{top:-5px;left:-5px;border-right:0;border-bottom:0}.note-handle .note-control-selection .note-control-ne{top:-5px;right:-5px;border-bottom:0;border-left:none}.note-handle .note-control-selection .note-control-sw{bottom:-5px;left:-5px;border-top:0;border-right:0}.note-handle .note-control-selection .note-control-se{right:-5px;bottom:-5px;cursor:se-resize}.note-handle .note-control-selection .note-control-se.note-control-holder{cursor:default;border-top:0;border-left:none}.note-handle .note-control-selection .note-control-selection-info{right:0;bottom:0;padding:5px;margin:5px;font-size:12px;color:#fff;background-color:#000;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;-webkit-opacity:.7;-khtml-opacity:.7;-moz-opacity:.7;opacity:.7;-ms-filter:alpha(opacity=70);filter:alpha(opacity=70)}.note-hint-popover{min-width:100px;padding:2px}.note-hint-popover .popover-content{max-height:150px;padding:3px;overflow:auto}.note-hint-popover .popover-content .note-hint-group .note-hint-item{display:block!important;padding:3px}.note-hint-popover .popover-content .note-hint-group .note-hint-item.active,.note-hint-popover .popover-content .note-hint-group .note-hint-item:hover{display:block;clear:both;font-weight:400;line-height:1.4;color:#fff;text-decoration:none;white-space:nowrap;cursor:pointer;background-color:#428bca;outline:0} ================================================ FILE: public/assets/hyper/js/hyper.js ================================================ $(function() { let tipsSvg = ''; let qrSvg = ''; let alipaySvg = ''; let weChatSvg = ''; let qqSvg = ''; let otherSvg = ''; let paypal = ''; let coinbaseSvg = ''; let epusdtSvg = ''; let paySvgArr = { zfbf2f : alipaySvg, aliweb : alipaySvg, aliwap : alipaySvg, mqq : qqSvg, mzfb : alipaySvg, mwx : weChatSvg, pszfb : alipaySvg, pswx : weChatSvg, wescan : weChatSvg, payjswescan: weChatSvg, alipay : alipaySvg, wxpay : weChatSvg, qqpay : qqSvg, paypal : paypal, mgcoin : otherSvg, coinbase : coinbaseSvg, epusdt : epusdtSvg, vzfb : alipaySvg, vwx : weChatSvg, }; // 付款方式按钮 $('.pay-type').each(function () { let t = $(this), type = t.data('type'), name = t.data('name'); if (paySvgArr[type] !== undefined) { t.append(paySvgArr[type] + ' ' + name); } else { t.append(otherSvg + ' ' + name); } }).click(function () { $('.pay-type').removeClass('active') $(this).toggleClass("active"); $('input[name=payway]').val($(this).data('id')); }); $(window).scroll(function () { if ($(window).scrollTop() >= 100) { $(".back-to-top").fadeIn(600); } else { $(".back-to-top").stop(true, true).fadeOut(600); } }); // 置顶 $(".back-to-top").on("click", function () { $("html, body").animate({ scrollTop: 0 }, 500); }); // 设置公告 let expiration = localStorage.announcement; if (new Date().getTime() > expiration || expiration == null) { $('#notice-modal').modal(); let setTime = new Date().getTime() + (1 * 60 * 60 * 1000); localStorage.setItem("announcement",setTime); } // 版权 console.group("Faka");console.log("Name: 独角数卡");console.log("Github: https://github.com/assimon/dujiaoka");console.groupEnd(); console.group("Theme");console.log("Name: Hyper Theme");console.log("Author: Bimoes");console.groupEnd(); }); // 图片懒加载 $(function () { var imgArr = document.querySelectorAll("img[data-src]"); for (var i = 0; i < imgArr.length; i++) { imgArr[i].style.opacity = "0"; } Limg(); window.addEventListener("scroll", function () { Limg(); }); function Limg() { var viewHeight = document.documentElement.clientHeight var limg = document.querySelectorAll("img[data-src]") Array.prototype.forEach.call(limg, function (item, index) { var rect if (item.getAttribute("data-src") === "") return rect = item.getBoundingClientRect() if (rect.bottom >= 0 && rect.top < viewHeight) { (function () { var img = new Image() img.src = item.getAttribute("data-src") item.src = img.src var j = 0 setInterval(function () { j += 0.2 if (j <= 1) { item.style.opacity = j return } }, 100) item.removeAttribute('data-src') })() } }) } }); ================================================ FILE: public/assets/luna/js/viewerjs/viewer.common.js ================================================ /*! * Viewer.js v1.7.1 * https://fengyuanchen.github.io/viewerjs * * Copyright 2015-present Chen Fengyuan * Released under the MIT license * * Date: 2020-09-29T13:45:20.981Z */ 'use strict'; function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function (obj) { return typeof obj; }; } else { _typeof = function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } function _objectSpread2(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } var DEFAULTS = { /** * Enable a modal backdrop, specify `static` for a backdrop * which doesn't close the modal on click. * @type {boolean} */ backdrop: true, /** * Show the button on the top-right of the viewer. * @type {boolean} */ button: true, /** * Show the navbar. * @type {boolean | number} */ navbar: true, /** * Specify the visibility and the content of the title. * @type {boolean | number | Function | Array} */ title: true, /** * Show the toolbar. * @type {boolean | number | Object} */ toolbar: true, /** * Custom class name(s) to add to the viewer's root element. * @type {string} */ className: '', /** * Define where to put the viewer in modal mode. * @type {string | Element} */ container: 'body', /** * Filter the images for viewing. Return true if the image is viewable. * @type {Function} */ filter: null, /** * Enable to request fullscreen when play. * @type {boolean} */ fullscreen: true, /** * Define the extra attributes to inherit from the original image. * @type {Array} */ inheritedAttributes: ['crossOrigin', 'decoding', 'isMap', 'loading', 'referrerPolicy', 'sizes', 'srcset', 'useMap'], /** * Define the initial index of image for viewing. * @type {number} */ initialViewIndex: 0, /** * Enable inline mode. * @type {boolean} */ inline: false, /** * The amount of time to delay between automatically cycling an image when playing. * @type {number} */ interval: 5000, /** * Enable keyboard support. * @type {boolean} */ keyboard: true, /** * Indicate if show a loading spinner when load image or not. * @type {boolean} */ loading: true, /** * Indicate if enable loop viewing or not. * @type {boolean} */ loop: true, /** * Min width of the viewer in inline mode. * @type {number} */ minWidth: 200, /** * Min height of the viewer in inline mode. * @type {number} */ minHeight: 100, /** * Enable to move the image. * @type {boolean} */ movable: true, /** * Enable to rotate the image. * @type {boolean} */ rotatable: true, /** * Enable to scale the image. * @type {boolean} */ scalable: true, /** * Enable to zoom the image. * @type {boolean} */ zoomable: true, /** * Enable to zoom the current image by dragging on the touch screen. * @type {boolean} */ zoomOnTouch: true, /** * Enable to zoom the image by wheeling mouse. * @type {boolean} */ zoomOnWheel: true, /** * Enable to slide to the next or previous image by swiping on the touch screen. * @type {boolean} */ slideOnTouch: true, /** * Indicate if toggle the image size between its natural size * and initial size when double click on the image or not. * @type {boolean} */ toggleOnDblclick: true, /** * Show the tooltip with image ratio (percentage) when zoom in or zoom out. * @type {boolean} */ tooltip: true, /** * Enable CSS3 Transition for some special elements. * @type {boolean} */ transition: true, /** * Define the CSS `z-index` value of viewer in modal mode. * @type {number} */ zIndex: 2015, /** * Define the CSS `z-index` value of viewer in inline mode. * @type {number} */ zIndexInline: 0, /** * Define the ratio when zoom the image by wheeling mouse. * @type {number} */ zoomRatio: 0.1, /** * Define the min ratio of the image when zoom out. * @type {number} */ minZoomRatio: 0.01, /** * Define the max ratio of the image when zoom in. * @type {number} */ maxZoomRatio: 100, /** * Define where to get the original image URL for viewing. * @type {string | Function} */ url: 'src', /** * Event shortcuts. * @type {Function} */ ready: null, show: null, shown: null, hide: null, hidden: null, view: null, viewed: null, zoom: null, zoomed: null, play: null, stop: null }; var TEMPLATE = '
' + '
' + '' + '
' + '
' + '
' + '
'; var IS_BROWSER = typeof window !== 'undefined' && typeof window.document !== 'undefined'; var WINDOW = IS_BROWSER ? window : {}; var IS_TOUCH_DEVICE = IS_BROWSER && WINDOW.document.documentElement ? 'ontouchstart' in WINDOW.document.documentElement : false; var HAS_POINTER_EVENT = IS_BROWSER ? 'PointerEvent' in WINDOW : false; var NAMESPACE = 'viewer'; // Actions var ACTION_MOVE = 'move'; var ACTION_SWITCH = 'switch'; var ACTION_ZOOM = 'zoom'; // Classes var CLASS_ACTIVE = "".concat(NAMESPACE, "-active"); var CLASS_CLOSE = "".concat(NAMESPACE, "-close"); var CLASS_FADE = "".concat(NAMESPACE, "-fade"); var CLASS_FIXED = "".concat(NAMESPACE, "-fixed"); var CLASS_FULLSCREEN = "".concat(NAMESPACE, "-fullscreen"); var CLASS_FULLSCREEN_EXIT = "".concat(NAMESPACE, "-fullscreen-exit"); var CLASS_HIDE = "".concat(NAMESPACE, "-hide"); var CLASS_HIDE_MD_DOWN = "".concat(NAMESPACE, "-hide-md-down"); var CLASS_HIDE_SM_DOWN = "".concat(NAMESPACE, "-hide-sm-down"); var CLASS_HIDE_XS_DOWN = "".concat(NAMESPACE, "-hide-xs-down"); var CLASS_IN = "".concat(NAMESPACE, "-in"); var CLASS_INVISIBLE = "".concat(NAMESPACE, "-invisible"); var CLASS_LOADING = "".concat(NAMESPACE, "-loading"); var CLASS_MOVE = "".concat(NAMESPACE, "-move"); var CLASS_OPEN = "".concat(NAMESPACE, "-open"); var CLASS_SHOW = "".concat(NAMESPACE, "-show"); var CLASS_TRANSITION = "".concat(NAMESPACE, "-transition"); // Events var EVENT_CLICK = 'click'; var EVENT_DBLCLICK = 'dblclick'; var EVENT_DRAG_START = 'dragstart'; var EVENT_HIDDEN = 'hidden'; var EVENT_HIDE = 'hide'; var EVENT_KEY_DOWN = 'keydown'; var EVENT_LOAD = 'load'; var EVENT_TOUCH_START = IS_TOUCH_DEVICE ? 'touchstart' : 'mousedown'; var EVENT_TOUCH_MOVE = IS_TOUCH_DEVICE ? 'touchmove' : 'mousemove'; var EVENT_TOUCH_END = IS_TOUCH_DEVICE ? 'touchend touchcancel' : 'mouseup'; var EVENT_POINTER_DOWN = HAS_POINTER_EVENT ? 'pointerdown' : EVENT_TOUCH_START; var EVENT_POINTER_MOVE = HAS_POINTER_EVENT ? 'pointermove' : EVENT_TOUCH_MOVE; var EVENT_POINTER_UP = HAS_POINTER_EVENT ? 'pointerup pointercancel' : EVENT_TOUCH_END; var EVENT_READY = 'ready'; var EVENT_RESIZE = 'resize'; var EVENT_SHOW = 'show'; var EVENT_SHOWN = 'shown'; var EVENT_TRANSITION_END = 'transitionend'; var EVENT_VIEW = 'view'; var EVENT_VIEWED = 'viewed'; var EVENT_WHEEL = 'wheel'; var EVENT_ZOOM = 'zoom'; var EVENT_ZOOMED = 'zoomed'; var EVENT_PLAY = 'play'; var EVENT_STOP = 'stop'; // Data keys var DATA_ACTION = "".concat(NAMESPACE, "Action"); // RegExps var REGEXP_SPACES = /\s\s*/; // Misc var BUTTONS = ['zoom-in', 'zoom-out', 'one-to-one', 'reset', 'prev', 'play', 'next', 'rotate-left', 'rotate-right', 'flip-horizontal', 'flip-vertical']; /** * Check if the given value is a string. * @param {*} value - The value to check. * @returns {boolean} Returns `true` if the given value is a string, else `false`. */ function isString(value) { return typeof value === 'string'; } /** * Check if the given value is not a number. */ var isNaN = Number.isNaN || WINDOW.isNaN; /** * Check if the given value is a number. * @param {*} value - The value to check. * @returns {boolean} Returns `true` if the given value is a number, else `false`. */ function isNumber(value) { return typeof value === 'number' && !isNaN(value); } /** * Check if the given value is undefined. * @param {*} value - The value to check. * @returns {boolean} Returns `true` if the given value is undefined, else `false`. */ function isUndefined(value) { return typeof value === 'undefined'; } /** * Check if the given value is an object. * @param {*} value - The value to check. * @returns {boolean} Returns `true` if the given value is an object, else `false`. */ function isObject(value) { return _typeof(value) === 'object' && value !== null; } var hasOwnProperty = Object.prototype.hasOwnProperty; /** * Check if the given value is a plain object. * @param {*} value - The value to check. * @returns {boolean} Returns `true` if the given value is a plain object, else `false`. */ function isPlainObject(value) { if (!isObject(value)) { return false; } try { var _constructor = value.constructor; var prototype = _constructor.prototype; return _constructor && prototype && hasOwnProperty.call(prototype, 'isPrototypeOf'); } catch (error) { return false; } } /** * Check if the given value is a function. * @param {*} value - The value to check. * @returns {boolean} Returns `true` if the given value is a function, else `false`. */ function isFunction(value) { return typeof value === 'function'; } /** * Iterate the given data. * @param {*} data - The data to iterate. * @param {Function} callback - The process function for each element. * @returns {*} The original data. */ function forEach(data, callback) { if (data && isFunction(callback)) { if (Array.isArray(data) || isNumber(data.length) /* array-like */ ) { var length = data.length; var i; for (i = 0; i < length; i += 1) { if (callback.call(data, data[i], i, data) === false) { break; } } } else if (isObject(data)) { Object.keys(data).forEach(function (key) { callback.call(data, data[key], key, data); }); } } return data; } /** * Extend the given object. * @param {*} obj - The object to be extended. * @param {*} args - The rest objects which will be merged to the first object. * @returns {Object} The extended object. */ var assign = Object.assign || function assign(obj) { for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { args[_key - 1] = arguments[_key]; } if (isObject(obj) && args.length > 0) { args.forEach(function (arg) { if (isObject(arg)) { Object.keys(arg).forEach(function (key) { obj[key] = arg[key]; }); } }); } return obj; }; var REGEXP_SUFFIX = /^(?:width|height|left|top|marginLeft|marginTop)$/; /** * Apply styles to the given element. * @param {Element} element - The target element. * @param {Object} styles - The styles for applying. */ function setStyle(element, styles) { var style = element.style; forEach(styles, function (value, property) { if (REGEXP_SUFFIX.test(property) && isNumber(value)) { value += 'px'; } style[property] = value; }); } /** * Escape a string for using in HTML. * @param {String} value - The string to escape. * @returns {String} Returns the escaped string. */ function escapeHTMLEntities(value) { return isString(value) ? value.replace(/&(?!amp;|quot;|#39;|lt;|gt;)/g, '&').replace(/"/g, '"').replace(/'/g, ''').replace(//g, '>') : value; } /** * Check if the given element has a special class. * @param {Element} element - The element to check. * @param {string} value - The class to search. * @returns {boolean} Returns `true` if the special class was found. */ function hasClass(element, value) { if (!element || !value) { return false; } return element.classList ? element.classList.contains(value) : element.className.indexOf(value) > -1; } /** * Add classes to the given element. * @param {Element} element - The target element. * @param {string} value - The classes to be added. */ function addClass(element, value) { if (!element || !value) { return; } if (isNumber(element.length)) { forEach(element, function (elem) { addClass(elem, value); }); return; } if (element.classList) { element.classList.add(value); return; } var className = element.className.trim(); if (!className) { element.className = value; } else if (className.indexOf(value) < 0) { element.className = "".concat(className, " ").concat(value); } } /** * Remove classes from the given element. * @param {Element} element - The target element. * @param {string} value - The classes to be removed. */ function removeClass(element, value) { if (!element || !value) { return; } if (isNumber(element.length)) { forEach(element, function (elem) { removeClass(elem, value); }); return; } if (element.classList) { element.classList.remove(value); return; } if (element.className.indexOf(value) >= 0) { element.className = element.className.replace(value, ''); } } /** * Add or remove classes from the given element. * @param {Element} element - The target element. * @param {string} value - The classes to be toggled. * @param {boolean} added - Add only. */ function toggleClass(element, value, added) { if (!value) { return; } if (isNumber(element.length)) { forEach(element, function (elem) { toggleClass(elem, value, added); }); return; } // IE10-11 doesn't support the second parameter of `classList.toggle` if (added) { addClass(element, value); } else { removeClass(element, value); } } var REGEXP_HYPHENATE = /([a-z\d])([A-Z])/g; /** * Transform the given string from camelCase to kebab-case * @param {string} value - The value to transform. * @returns {string} The transformed value. */ function hyphenate(value) { return value.replace(REGEXP_HYPHENATE, '$1-$2').toLowerCase(); } /** * Get data from the given element. * @param {Element} element - The target element. * @param {string} name - The data key to get. * @returns {string} The data value. */ function getData(element, name) { if (isObject(element[name])) { return element[name]; } if (element.dataset) { return element.dataset[name]; } return element.getAttribute("data-".concat(hyphenate(name))); } /** * Set data to the given element. * @param {Element} element - The target element. * @param {string} name - The data key to set. * @param {string} data - The data value. */ function setData(element, name, data) { if (isObject(data)) { element[name] = data; } else if (element.dataset) { element.dataset[name] = data; } else { element.setAttribute("data-".concat(hyphenate(name)), data); } } var onceSupported = function () { var supported = false; if (IS_BROWSER) { var once = false; var listener = function listener() {}; var options = Object.defineProperty({}, 'once', { get: function get() { supported = true; return once; }, /** * This setter can fix a `TypeError` in strict mode * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Getter_only} * @param {boolean} value - The value to set */ set: function set(value) { once = value; } }); WINDOW.addEventListener('test', listener, options); WINDOW.removeEventListener('test', listener, options); } return supported; }(); /** * Remove event listener from the target element. * @param {Element} element - The event target. * @param {string} type - The event type(s). * @param {Function} listener - The event listener. * @param {Object} options - The event options. */ function removeListener(element, type, listener) { var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; var handler = listener; type.trim().split(REGEXP_SPACES).forEach(function (event) { if (!onceSupported) { var listeners = element.listeners; if (listeners && listeners[event] && listeners[event][listener]) { handler = listeners[event][listener]; delete listeners[event][listener]; if (Object.keys(listeners[event]).length === 0) { delete listeners[event]; } if (Object.keys(listeners).length === 0) { delete element.listeners; } } } element.removeEventListener(event, handler, options); }); } /** * Add event listener to the target element. * @param {Element} element - The event target. * @param {string} type - The event type(s). * @param {Function} listener - The event listener. * @param {Object} options - The event options. */ function addListener(element, type, listener) { var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; var _handler = listener; type.trim().split(REGEXP_SPACES).forEach(function (event) { if (options.once && !onceSupported) { var _element$listeners = element.listeners, listeners = _element$listeners === void 0 ? {} : _element$listeners; _handler = function handler() { delete listeners[event][listener]; element.removeEventListener(event, _handler, options); for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { args[_key2] = arguments[_key2]; } listener.apply(element, args); }; if (!listeners[event]) { listeners[event] = {}; } if (listeners[event][listener]) { element.removeEventListener(event, listeners[event][listener], options); } listeners[event][listener] = _handler; element.listeners = listeners; } element.addEventListener(event, _handler, options); }); } /** * Dispatch event on the target element. * @param {Element} element - The event target. * @param {string} type - The event type(s). * @param {Object} data - The additional event data. * @param {Object} options - The additional event options. * @returns {boolean} Indicate if the event is default prevented or not. */ function dispatchEvent(element, type, data, options) { var event; // Event and CustomEvent on IE9-11 are global objects, not constructors if (isFunction(Event) && isFunction(CustomEvent)) { event = new CustomEvent(type, _objectSpread2({ bubbles: true, cancelable: true, detail: data }, options)); } else { event = document.createEvent('CustomEvent'); event.initCustomEvent(type, true, true, data); } return element.dispatchEvent(event); } /** * Get the offset base on the document. * @param {Element} element - The target element. * @returns {Object} The offset data. */ function getOffset(element) { var box = element.getBoundingClientRect(); return { left: box.left + (window.pageXOffset - document.documentElement.clientLeft), top: box.top + (window.pageYOffset - document.documentElement.clientTop) }; } /** * Get transforms base on the given object. * @param {Object} obj - The target object. * @returns {string} A string contains transform values. */ function getTransforms(_ref) { var rotate = _ref.rotate, scaleX = _ref.scaleX, scaleY = _ref.scaleY, translateX = _ref.translateX, translateY = _ref.translateY; var values = []; if (isNumber(translateX) && translateX !== 0) { values.push("translateX(".concat(translateX, "px)")); } if (isNumber(translateY) && translateY !== 0) { values.push("translateY(".concat(translateY, "px)")); } // Rotate should come first before scale to match orientation transform if (isNumber(rotate) && rotate !== 0) { values.push("rotate(".concat(rotate, "deg)")); } if (isNumber(scaleX) && scaleX !== 1) { values.push("scaleX(".concat(scaleX, ")")); } if (isNumber(scaleY) && scaleY !== 1) { values.push("scaleY(".concat(scaleY, ")")); } var transform = values.length ? values.join(' ') : 'none'; return { WebkitTransform: transform, msTransform: transform, transform: transform }; } /** * Get an image name from an image url. * @param {string} url - The target url. * @example * // picture.jpg * getImageNameFromURL('https://domain.com/path/to/picture.jpg?size=1280×960') * @returns {string} A string contains the image name. */ function getImageNameFromURL(url) { return isString(url) ? decodeURIComponent(url.replace(/^.*\//, '').replace(/[?&#].*$/, '')) : ''; } var IS_SAFARI = WINDOW.navigator && /(Macintosh|iPhone|iPod|iPad).*AppleWebKit/i.test(WINDOW.navigator.userAgent); /** * Get an image's natural sizes. * @param {string} image - The target image. * @param {Object} options - The viewer options. * @param {Function} callback - The callback function. * @returns {HTMLImageElement} The new image. */ function getImageNaturalSizes(image, options, callback) { var newImage = document.createElement('img'); // Modern browsers (except Safari) if (image.naturalWidth && !IS_SAFARI) { callback(image.naturalWidth, image.naturalHeight); return newImage; } var body = document.body || document.documentElement; newImage.onload = function () { callback(newImage.width, newImage.height); if (!IS_SAFARI) { body.removeChild(newImage); } }; forEach(options.inheritedAttributes, function (name) { var value = image.getAttribute(name); if (value !== null) { newImage.setAttribute(name, value); } }); newImage.src = image.src; // iOS Safari will convert the image automatically // with its orientation once append it into DOM if (!IS_SAFARI) { newImage.style.cssText = 'left:0;' + 'max-height:none!important;' + 'max-width:none!important;' + 'min-height:0!important;' + 'min-width:0!important;' + 'opacity:0;' + 'position:absolute;' + 'top:0;' + 'z-index:-1;'; body.appendChild(newImage); } return newImage; } /** * Get the related class name of a responsive type number. * @param {string} type - The responsive type. * @returns {string} The related class name. */ function getResponsiveClass(type) { switch (type) { case 2: return CLASS_HIDE_XS_DOWN; case 3: return CLASS_HIDE_SM_DOWN; case 4: return CLASS_HIDE_MD_DOWN; default: return ''; } } /** * Get the max ratio of a group of pointers. * @param {string} pointers - The target pointers. * @returns {number} The result ratio. */ function getMaxZoomRatio(pointers) { var pointers2 = _objectSpread2({}, pointers); var ratios = []; forEach(pointers, function (pointer, pointerId) { delete pointers2[pointerId]; forEach(pointers2, function (pointer2) { var x1 = Math.abs(pointer.startX - pointer2.startX); var y1 = Math.abs(pointer.startY - pointer2.startY); var x2 = Math.abs(pointer.endX - pointer2.endX); var y2 = Math.abs(pointer.endY - pointer2.endY); var z1 = Math.sqrt(x1 * x1 + y1 * y1); var z2 = Math.sqrt(x2 * x2 + y2 * y2); var ratio = (z2 - z1) / z1; ratios.push(ratio); }); }); ratios.sort(function (a, b) { return Math.abs(a) < Math.abs(b); }); return ratios[0]; } /** * Get a pointer from an event object. * @param {Object} event - The target event object. * @param {boolean} endOnly - Indicates if only returns the end point coordinate or not. * @returns {Object} The result pointer contains start and/or end point coordinates. */ function getPointer(_ref2, endOnly) { var pageX = _ref2.pageX, pageY = _ref2.pageY; var end = { endX: pageX, endY: pageY }; return endOnly ? end : _objectSpread2({ timeStamp: Date.now(), startX: pageX, startY: pageY }, end); } /** * Get the center point coordinate of a group of pointers. * @param {Object} pointers - The target pointers. * @returns {Object} The center point coordinate. */ function getPointersCenter(pointers) { var pageX = 0; var pageY = 0; var count = 0; forEach(pointers, function (_ref3) { var startX = _ref3.startX, startY = _ref3.startY; pageX += startX; pageY += startY; count += 1; }); pageX /= count; pageY /= count; return { pageX: pageX, pageY: pageY }; } var render = { render: function render() { this.initContainer(); this.initViewer(); this.initList(); this.renderViewer(); }, initBody: function initBody() { var ownerDocument = this.element.ownerDocument; var body = ownerDocument.body || ownerDocument.documentElement; this.body = body; this.scrollbarWidth = window.innerWidth - ownerDocument.documentElement.clientWidth; this.initialBodyPaddingRight = body.style.paddingRight; this.initialBodyComputedPaddingRight = window.getComputedStyle(body).paddingRight; }, initContainer: function initContainer() { this.containerData = { width: window.innerWidth, height: window.innerHeight }; }, initViewer: function initViewer() { var options = this.options, parent = this.parent; var viewerData; if (options.inline) { viewerData = { width: Math.max(parent.offsetWidth, options.minWidth), height: Math.max(parent.offsetHeight, options.minHeight) }; this.parentData = viewerData; } if (this.fulled || !viewerData) { viewerData = this.containerData; } this.viewerData = assign({}, viewerData); }, renderViewer: function renderViewer() { if (this.options.inline && !this.fulled) { setStyle(this.viewer, this.viewerData); } }, initList: function initList() { var _this = this; var element = this.element, options = this.options, list = this.list; var items = []; // initList may be called in this.update, so should keep idempotent list.innerHTML = ''; forEach(this.images, function (image, index) { var src = image.src; var alt = image.alt || getImageNameFromURL(src); var url = _this.getImageURL(image); if (src || url) { var item = document.createElement('li'); var img = document.createElement('img'); forEach(options.inheritedAttributes, function (name) { var value = image.getAttribute(name); if (value !== null) { img.setAttribute(name, value); } }); img.src = src || url; img.alt = alt; img.setAttribute('data-index', index); img.setAttribute('data-original-url', url || src); img.setAttribute('data-viewer-action', 'view'); img.setAttribute('role', 'button'); item.appendChild(img); list.appendChild(item); items.push(item); } }); this.items = items; forEach(items, function (item) { var image = item.firstElementChild; setData(image, 'filled', true); if (options.loading) { addClass(item, CLASS_LOADING); } addListener(image, EVENT_LOAD, function (event) { if (options.loading) { removeClass(item, CLASS_LOADING); } _this.loadImage(event); }, { once: true }); }); if (options.transition) { addListener(element, EVENT_VIEWED, function () { addClass(list, CLASS_TRANSITION); }, { once: true }); } }, renderList: function renderList(index) { var i = index || this.index; var width = this.items[i].offsetWidth || 30; var outerWidth = width + 1; // 1 pixel of `margin-left` width // Place the active item in the center of the screen setStyle(this.list, assign({ width: outerWidth * this.length }, getTransforms({ translateX: (this.viewerData.width - width) / 2 - outerWidth * i }))); }, resetList: function resetList() { var list = this.list; list.innerHTML = ''; removeClass(list, CLASS_TRANSITION); setStyle(list, getTransforms({ translateX: 0 })); }, initImage: function initImage(done) { var _this2 = this; var options = this.options, image = this.image, viewerData = this.viewerData; var footerHeight = this.footer.offsetHeight; var viewerWidth = viewerData.width; var viewerHeight = Math.max(viewerData.height - footerHeight, footerHeight); var oldImageData = this.imageData || {}; var sizingImage; this.imageInitializing = { abort: function abort() { sizingImage.onload = null; } }; sizingImage = getImageNaturalSizes(image, options, function (naturalWidth, naturalHeight) { var aspectRatio = naturalWidth / naturalHeight; var width = viewerWidth; var height = viewerHeight; _this2.imageInitializing = false; if (viewerHeight * aspectRatio > viewerWidth) { height = viewerWidth / aspectRatio; } else { width = viewerHeight * aspectRatio; } width = Math.min(width * 0.9, naturalWidth); height = Math.min(height * 0.9, naturalHeight); var imageData = { naturalWidth: naturalWidth, naturalHeight: naturalHeight, aspectRatio: aspectRatio, ratio: width / naturalWidth, width: width, height: height, left: (viewerWidth - width) / 2, top: (viewerHeight - height) / 2 }; var initialImageData = assign({}, imageData); if (options.rotatable) { imageData.rotate = oldImageData.rotate || 0; initialImageData.rotate = 0; } if (options.scalable) { imageData.scaleX = oldImageData.scaleX || 1; imageData.scaleY = oldImageData.scaleY || 1; initialImageData.scaleX = 1; initialImageData.scaleY = 1; } _this2.imageData = imageData; _this2.initialImageData = initialImageData; if (done) { done(); } }); }, renderImage: function renderImage(done) { var _this3 = this; var image = this.image, imageData = this.imageData; setStyle(image, assign({ width: imageData.width, height: imageData.height, // XXX: Not to use translateX/Y to avoid image shaking when zooming marginLeft: imageData.left, marginTop: imageData.top }, getTransforms(imageData))); if (done) { if ((this.viewing || this.zooming) && this.options.transition) { var onTransitionEnd = function onTransitionEnd() { _this3.imageRendering = false; done(); }; this.imageRendering = { abort: function abort() { removeListener(image, EVENT_TRANSITION_END, onTransitionEnd); } }; addListener(image, EVENT_TRANSITION_END, onTransitionEnd, { once: true }); } else { done(); } } }, resetImage: function resetImage() { // this.image only defined after viewed if (this.viewing || this.viewed) { var image = this.image; if (this.viewing) { this.viewing.abort(); } image.parentNode.removeChild(image); this.image = null; } } }; var events = { bind: function bind() { var options = this.options, viewer = this.viewer, canvas = this.canvas; var document = this.element.ownerDocument; addListener(viewer, EVENT_CLICK, this.onClick = this.click.bind(this)); addListener(viewer, EVENT_DRAG_START, this.onDragStart = this.dragstart.bind(this)); addListener(canvas, EVENT_POINTER_DOWN, this.onPointerDown = this.pointerdown.bind(this)); addListener(document, EVENT_POINTER_MOVE, this.onPointerMove = this.pointermove.bind(this)); addListener(document, EVENT_POINTER_UP, this.onPointerUp = this.pointerup.bind(this)); addListener(document, EVENT_KEY_DOWN, this.onKeyDown = this.keydown.bind(this)); addListener(window, EVENT_RESIZE, this.onResize = this.resize.bind(this)); if (options.zoomable && options.zoomOnWheel) { addListener(viewer, EVENT_WHEEL, this.onWheel = this.wheel.bind(this), { passive: false, capture: true }); } if (options.toggleOnDblclick) { addListener(canvas, EVENT_DBLCLICK, this.onDblclick = this.dblclick.bind(this)); } }, unbind: function unbind() { var options = this.options, viewer = this.viewer, canvas = this.canvas; var document = this.element.ownerDocument; removeListener(viewer, EVENT_CLICK, this.onClick); removeListener(viewer, EVENT_DRAG_START, this.onDragStart); removeListener(canvas, EVENT_POINTER_DOWN, this.onPointerDown); removeListener(document, EVENT_POINTER_MOVE, this.onPointerMove); removeListener(document, EVENT_POINTER_UP, this.onPointerUp); removeListener(document, EVENT_KEY_DOWN, this.onKeyDown); removeListener(window, EVENT_RESIZE, this.onResize); if (options.zoomable && options.zoomOnWheel) { removeListener(viewer, EVENT_WHEEL, this.onWheel, { passive: false, capture: true }); } if (options.toggleOnDblclick) { removeListener(canvas, EVENT_DBLCLICK, this.onDblclick); } } }; var handlers = { click: function click(event) { var target = event.target; var options = this.options, imageData = this.imageData; var action = getData(target, DATA_ACTION); // Cancel the emulated click when the native click event was triggered. if (IS_TOUCH_DEVICE && event.isTrusted && target === this.canvas) { clearTimeout(this.clickCanvasTimeout); } switch (action) { case 'mix': if (this.played) { this.stop(); } else if (options.inline) { if (this.fulled) { this.exit(); } else { this.full(); } } else { this.hide(); } break; case 'hide': this.hide(); break; case 'view': this.view(getData(target, 'index')); break; case 'zoom-in': this.zoom(0.1, true); break; case 'zoom-out': this.zoom(-0.1, true); break; case 'one-to-one': this.toggle(); break; case 'reset': this.reset(); break; case 'prev': this.prev(options.loop); break; case 'play': this.play(options.fullscreen); break; case 'next': this.next(options.loop); break; case 'rotate-left': this.rotate(-90); break; case 'rotate-right': this.rotate(90); break; case 'flip-horizontal': this.scaleX(-imageData.scaleX || -1); break; case 'flip-vertical': this.scaleY(-imageData.scaleY || -1); break; default: if (this.played) { this.stop(); } } }, dblclick: function dblclick(event) { event.preventDefault(); if (this.viewed && event.target === this.image) { // Cancel the emulated double click when the native dblclick event was triggered. if (IS_TOUCH_DEVICE && event.isTrusted) { clearTimeout(this.doubleClickImageTimeout); } this.toggle(); } }, load: function load() { var _this = this; if (this.timeout) { clearTimeout(this.timeout); this.timeout = false; } var element = this.element, options = this.options, image = this.image, index = this.index, viewerData = this.viewerData; removeClass(image, CLASS_INVISIBLE); if (options.loading) { removeClass(this.canvas, CLASS_LOADING); } image.style.cssText = 'height:0;' + "margin-left:".concat(viewerData.width / 2, "px;") + "margin-top:".concat(viewerData.height / 2, "px;") + 'max-width:none!important;' + 'position:absolute;' + 'width:0;'; this.initImage(function () { toggleClass(image, CLASS_MOVE, options.movable); toggleClass(image, CLASS_TRANSITION, options.transition); _this.renderImage(function () { _this.viewed = true; _this.viewing = false; if (isFunction(options.viewed)) { addListener(element, EVENT_VIEWED, options.viewed, { once: true }); } dispatchEvent(element, EVENT_VIEWED, { originalImage: _this.images[index], index: index, image: image }, { cancelable: false }); }); }); }, loadImage: function loadImage(event) { var image = event.target; var parent = image.parentNode; var parentWidth = parent.offsetWidth || 30; var parentHeight = parent.offsetHeight || 50; var filled = !!getData(image, 'filled'); getImageNaturalSizes(image, this.options, function (naturalWidth, naturalHeight) { var aspectRatio = naturalWidth / naturalHeight; var width = parentWidth; var height = parentHeight; if (parentHeight * aspectRatio > parentWidth) { if (filled) { width = parentHeight * aspectRatio; } else { height = parentWidth / aspectRatio; } } else if (filled) { height = parentWidth / aspectRatio; } else { width = parentHeight * aspectRatio; } setStyle(image, assign({ width: width, height: height }, getTransforms({ translateX: (parentWidth - width) / 2, translateY: (parentHeight - height) / 2 }))); }); }, keydown: function keydown(event) { var options = this.options; if (!this.fulled || !options.keyboard) { return; } switch (event.keyCode || event.which || event.charCode) { // Escape case 27: if (this.played) { this.stop(); } else if (options.inline) { if (this.fulled) { this.exit(); } } else { this.hide(); } break; // Space case 32: if (this.played) { this.stop(); } break; // ArrowLeft case 37: this.prev(options.loop); break; // ArrowUp case 38: // Prevent scroll on Firefox event.preventDefault(); // Zoom in this.zoom(options.zoomRatio, true); break; // ArrowRight case 39: this.next(options.loop); break; // ArrowDown case 40: // Prevent scroll on Firefox event.preventDefault(); // Zoom out this.zoom(-options.zoomRatio, true); break; // Ctrl + 0 case 48: // Fall through // Ctrl + 1 // eslint-disable-next-line no-fallthrough case 49: if (event.ctrlKey) { event.preventDefault(); this.toggle(); } break; } }, dragstart: function dragstart(event) { if (event.target.tagName.toLowerCase() === 'img') { event.preventDefault(); } }, pointerdown: function pointerdown(event) { var options = this.options, pointers = this.pointers; var buttons = event.buttons, button = event.button; if (!this.viewed || this.showing || this.viewing || this.hiding // Handle mouse event and pointer event and ignore touch event || (event.type === 'mousedown' || event.type === 'pointerdown' && event.pointerType === 'mouse') && ( // No primary button (Usually the left button) isNumber(buttons) && buttons !== 1 || isNumber(button) && button !== 0 // Open context menu || event.ctrlKey)) { return; } // Prevent default behaviours as page zooming in touch devices. event.preventDefault(); if (event.changedTouches) { forEach(event.changedTouches, function (touch) { pointers[touch.identifier] = getPointer(touch); }); } else { pointers[event.pointerId || 0] = getPointer(event); } var action = options.movable ? ACTION_MOVE : false; if (options.zoomOnTouch && options.zoomable && Object.keys(pointers).length > 1) { action = ACTION_ZOOM; } else if (options.slideOnTouch && (event.pointerType === 'touch' || event.type === 'touchstart') && this.isSwitchable()) { action = ACTION_SWITCH; } if (options.transition && (action === ACTION_MOVE || action === ACTION_ZOOM)) { removeClass(this.image, CLASS_TRANSITION); } this.action = action; }, pointermove: function pointermove(event) { var pointers = this.pointers, action = this.action; if (!this.viewed || !action) { return; } event.preventDefault(); if (event.changedTouches) { forEach(event.changedTouches, function (touch) { assign(pointers[touch.identifier] || {}, getPointer(touch, true)); }); } else { assign(pointers[event.pointerId || 0] || {}, getPointer(event, true)); } this.change(event); }, pointerup: function pointerup(event) { var _this2 = this; var options = this.options, action = this.action, pointers = this.pointers; var pointer; if (event.changedTouches) { forEach(event.changedTouches, function (touch) { pointer = pointers[touch.identifier]; delete pointers[touch.identifier]; }); } else { pointer = pointers[event.pointerId || 0]; delete pointers[event.pointerId || 0]; } if (!action) { return; } event.preventDefault(); if (options.transition && (action === ACTION_MOVE || action === ACTION_ZOOM)) { addClass(this.image, CLASS_TRANSITION); } this.action = false; // Emulate click and double click in touch devices to support backdrop and image zooming (#210). if (IS_TOUCH_DEVICE && action !== ACTION_ZOOM && pointer && Date.now() - pointer.timeStamp < 500) { clearTimeout(this.clickCanvasTimeout); clearTimeout(this.doubleClickImageTimeout); if (options.toggleOnDblclick && this.viewed && event.target === this.image) { if (this.imageClicked) { this.imageClicked = false; // This timeout will be cleared later when a native dblclick event is triggering this.doubleClickImageTimeout = setTimeout(function () { dispatchEvent(_this2.image, EVENT_DBLCLICK); }, 50); } else { this.imageClicked = true; // The default timing of a double click in Windows is 500 ms this.doubleClickImageTimeout = setTimeout(function () { _this2.imageClicked = false; }, 500); } } else { this.imageClicked = false; if (options.backdrop && options.backdrop !== 'static' && event.target === this.canvas) { // This timeout will be cleared later when a native click event is triggering this.clickCanvasTimeout = setTimeout(function () { dispatchEvent(_this2.canvas, EVENT_CLICK); }, 50); } } } }, resize: function resize() { var _this3 = this; if (!this.isShown || this.hiding) { return; } if (this.fulled) { this.close(); this.initBody(); this.open(); } this.initContainer(); this.initViewer(); this.renderViewer(); this.renderList(); if (this.viewed) { this.initImage(function () { _this3.renderImage(); }); } if (this.played) { if (this.options.fullscreen && this.fulled && !(document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement)) { this.stop(); return; } forEach(this.player.getElementsByTagName('img'), function (image) { addListener(image, EVENT_LOAD, _this3.loadImage.bind(_this3), { once: true }); dispatchEvent(image, EVENT_LOAD); }); } }, wheel: function wheel(event) { var _this4 = this; if (!this.viewed) { return; } event.preventDefault(); // Limit wheel speed to prevent zoom too fast if (this.wheeling) { return; } this.wheeling = true; setTimeout(function () { _this4.wheeling = false; }, 50); var ratio = Number(this.options.zoomRatio) || 0.1; var delta = 1; if (event.deltaY) { delta = event.deltaY > 0 ? 1 : -1; } else if (event.wheelDelta) { delta = -event.wheelDelta / 120; } else if (event.detail) { delta = event.detail > 0 ? 1 : -1; } this.zoom(-delta * ratio, true, event); } }; var methods = { /** Show the viewer (only available in modal mode) * @param {boolean} [immediate=false] - Indicates if show the viewer immediately or not. * @returns {Viewer} this */ show: function show() { var immediate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; var element = this.element, options = this.options; if (options.inline || this.showing || this.isShown || this.showing) { return this; } if (!this.ready) { this.build(); if (this.ready) { this.show(immediate); } return this; } if (isFunction(options.show)) { addListener(element, EVENT_SHOW, options.show, { once: true }); } if (dispatchEvent(element, EVENT_SHOW) === false || !this.ready) { return this; } if (this.hiding) { this.transitioning.abort(); } this.showing = true; this.open(); var viewer = this.viewer; removeClass(viewer, CLASS_HIDE); if (options.transition && !immediate) { var shown = this.shown.bind(this); this.transitioning = { abort: function abort() { removeListener(viewer, EVENT_TRANSITION_END, shown); removeClass(viewer, CLASS_IN); } }; addClass(viewer, CLASS_TRANSITION); // Force reflow to enable CSS3 transition viewer.initialOffsetWidth = viewer.offsetWidth; addListener(viewer, EVENT_TRANSITION_END, shown, { once: true }); addClass(viewer, CLASS_IN); } else { addClass(viewer, CLASS_IN); this.shown(); } return this; }, /** * Hide the viewer (only available in modal mode) * @param {boolean} [immediate=false] - Indicates if hide the viewer immediately or not. * @returns {Viewer} this */ hide: function hide() { var _this = this; var immediate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; var element = this.element, options = this.options; if (options.inline || this.hiding || !(this.isShown || this.showing)) { return this; } if (isFunction(options.hide)) { addListener(element, EVENT_HIDE, options.hide, { once: true }); } if (dispatchEvent(element, EVENT_HIDE) === false) { return this; } if (this.showing) { this.transitioning.abort(); } this.hiding = true; if (this.played) { this.stop(); } else if (this.viewing) { this.viewing.abort(); } var viewer = this.viewer, image = this.image; var hideImmediately = function hideImmediately() { removeClass(viewer, CLASS_IN); _this.hidden(); }; if (options.transition && !immediate) { var onViewerTransitionEnd = function onViewerTransitionEnd(event) { // Ignore all propagating `transitionend` events (#275). if (event && event.target === viewer) { removeListener(viewer, EVENT_TRANSITION_END, onViewerTransitionEnd); _this.hidden(); } }; var onImageTransitionEnd = function onImageTransitionEnd() { // In case of show the viewer by `viewer.show(true)` previously (#407). if (hasClass(viewer, CLASS_TRANSITION)) { addListener(viewer, EVENT_TRANSITION_END, onViewerTransitionEnd); removeClass(viewer, CLASS_IN); } else { hideImmediately(); } }; this.transitioning = { abort: function abort() { if (_this.viewed && hasClass(image, CLASS_TRANSITION)) { removeListener(image, EVENT_TRANSITION_END, onImageTransitionEnd); } else if (hasClass(viewer, CLASS_TRANSITION)) { removeListener(viewer, EVENT_TRANSITION_END, onViewerTransitionEnd); } } }; // In case of hiding the viewer when holding on the image (#255), // note that the `CLASS_TRANSITION` class will be removed on pointer down. if (this.viewed && hasClass(image, CLASS_TRANSITION)) { addListener(image, EVENT_TRANSITION_END, onImageTransitionEnd, { once: true }); this.zoomTo(0, false, false, true); } else { onImageTransitionEnd(); } } else { hideImmediately(); } return this; }, /** * View one of the images with image's index * @param {number} index - The index of the image to view. * @returns {Viewer} this */ view: function view() { var _this2 = this; var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.options.initialViewIndex; index = Number(index) || 0; if (this.hiding || this.played || index < 0 || index >= this.length || this.viewed && index === this.index) { return this; } if (!this.isShown) { this.index = index; return this.show(); } if (this.viewing) { this.viewing.abort(); } var element = this.element, options = this.options, title = this.title, canvas = this.canvas; var item = this.items[index]; var img = item.querySelector('img'); var url = getData(img, 'originalUrl'); var alt = img.getAttribute('alt'); var image = document.createElement('img'); forEach(options.inheritedAttributes, function (name) { var value = img.getAttribute(name); if (value !== null) { image.setAttribute(name, value); } }); image.src = url; image.alt = alt; if (isFunction(options.view)) { addListener(element, EVENT_VIEW, options.view, { once: true }); } if (dispatchEvent(element, EVENT_VIEW, { originalImage: this.images[index], index: index, image: image }) === false || !this.isShown || this.hiding || this.played) { return this; } this.image = image; removeClass(this.items[this.index], CLASS_ACTIVE); addClass(item, CLASS_ACTIVE); this.viewed = false; this.index = index; this.imageData = {}; addClass(image, CLASS_INVISIBLE); if (options.loading) { addClass(canvas, CLASS_LOADING); } canvas.innerHTML = ''; canvas.appendChild(image); // Center current item this.renderList(); // Clear title title.innerHTML = ''; // Generate title after viewed var onViewed = function onViewed() { var imageData = _this2.imageData; var render = Array.isArray(options.title) ? options.title[1] : options.title; title.innerHTML = escapeHTMLEntities(isFunction(render) ? render.call(_this2, image, imageData) : "".concat(alt, " (").concat(imageData.naturalWidth, " \xD7 ").concat(imageData.naturalHeight, ")")); }; var onLoad; addListener(element, EVENT_VIEWED, onViewed, { once: true }); this.viewing = { abort: function abort() { removeListener(element, EVENT_VIEWED, onViewed); if (image.complete) { if (_this2.imageRendering) { _this2.imageRendering.abort(); } else if (_this2.imageInitializing) { _this2.imageInitializing.abort(); } } else { // Cancel download to save bandwidth. image.src = ''; removeListener(image, EVENT_LOAD, onLoad); if (_this2.timeout) { clearTimeout(_this2.timeout); } } } }; if (image.complete) { this.load(); } else { addListener(image, EVENT_LOAD, onLoad = this.load.bind(this), { once: true }); if (this.timeout) { clearTimeout(this.timeout); } // Make the image visible if it fails to load within 1s this.timeout = setTimeout(function () { removeClass(image, CLASS_INVISIBLE); _this2.timeout = false; }, 1000); } return this; }, /** * View the previous image * @param {boolean} [loop=false] - Indicate if view the last one * when it is the first one at present. * @returns {Viewer} this */ prev: function prev() { var loop = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; var index = this.index - 1; if (index < 0) { index = loop ? this.length - 1 : 0; } this.view(index); return this; }, /** * View the next image * @param {boolean} [loop=false] - Indicate if view the first one * when it is the last one at present. * @returns {Viewer} this */ next: function next() { var loop = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; var maxIndex = this.length - 1; var index = this.index + 1; if (index > maxIndex) { index = loop ? 0 : maxIndex; } this.view(index); return this; }, /** * Move the image with relative offsets. * @param {number} offsetX - The relative offset distance on the x-axis. * @param {number} offsetY - The relative offset distance on the y-axis. * @returns {Viewer} this */ move: function move(offsetX, offsetY) { var imageData = this.imageData; this.moveTo(isUndefined(offsetX) ? offsetX : imageData.left + Number(offsetX), isUndefined(offsetY) ? offsetY : imageData.top + Number(offsetY)); return this; }, /** * Move the image to an absolute point. * @param {number} x - The x-axis coordinate. * @param {number} [y=x] - The y-axis coordinate. * @returns {Viewer} this */ moveTo: function moveTo(x) { var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : x; var imageData = this.imageData; x = Number(x); y = Number(y); if (this.viewed && !this.played && this.options.movable) { var changed = false; if (isNumber(x)) { imageData.left = x; changed = true; } if (isNumber(y)) { imageData.top = y; changed = true; } if (changed) { this.renderImage(); } } return this; }, /** * Zoom the image with a relative ratio. * @param {number} ratio - The target ratio. * @param {boolean} [hasTooltip=false] - Indicates if it has a tooltip or not. * @param {Event} [_originalEvent=null] - The original event if any. * @returns {Viewer} this */ zoom: function zoom(ratio) { var hasTooltip = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; var _originalEvent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; var imageData = this.imageData; ratio = Number(ratio); if (ratio < 0) { ratio = 1 / (1 - ratio); } else { ratio = 1 + ratio; } this.zoomTo(imageData.width * ratio / imageData.naturalWidth, hasTooltip, _originalEvent); return this; }, /** * Zoom the image to an absolute ratio. * @param {number} ratio - The target ratio. * @param {boolean} [hasTooltip=false] - Indicates if it has a tooltip or not. * @param {Event} [_originalEvent=null] - The original event if any. * @param {Event} [_zoomable=false] - Indicates if the current zoom is available or not. * @returns {Viewer} this */ zoomTo: function zoomTo(ratio) { var _this3 = this; var hasTooltip = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; var _originalEvent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; var _zoomable = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; var element = this.element, options = this.options, pointers = this.pointers, imageData = this.imageData; var width = imageData.width, height = imageData.height, left = imageData.left, top = imageData.top, naturalWidth = imageData.naturalWidth, naturalHeight = imageData.naturalHeight; ratio = Math.max(0, ratio); if (isNumber(ratio) && this.viewed && !this.played && (_zoomable || options.zoomable)) { if (!_zoomable) { var minZoomRatio = Math.max(0.01, options.minZoomRatio); var maxZoomRatio = Math.min(100, options.maxZoomRatio); ratio = Math.min(Math.max(ratio, minZoomRatio), maxZoomRatio); } if (_originalEvent && options.zoomRatio >= 0.055 && ratio > 0.95 && ratio < 1.05) { ratio = 1; } var newWidth = naturalWidth * ratio; var newHeight = naturalHeight * ratio; var offsetWidth = newWidth - width; var offsetHeight = newHeight - height; var oldRatio = width / naturalWidth; if (isFunction(options.zoom)) { addListener(element, EVENT_ZOOM, options.zoom, { once: true }); } if (dispatchEvent(element, EVENT_ZOOM, { ratio: ratio, oldRatio: oldRatio, originalEvent: _originalEvent }) === false) { return this; } this.zooming = true; if (_originalEvent) { var offset = getOffset(this.viewer); var center = pointers && Object.keys(pointers).length ? getPointersCenter(pointers) : { pageX: _originalEvent.pageX, pageY: _originalEvent.pageY }; // Zoom from the triggering point of the event imageData.left -= offsetWidth * ((center.pageX - offset.left - left) / width); imageData.top -= offsetHeight * ((center.pageY - offset.top - top) / height); } else { // Zoom from the center of the image imageData.left -= offsetWidth / 2; imageData.top -= offsetHeight / 2; } imageData.width = newWidth; imageData.height = newHeight; imageData.ratio = ratio; this.renderImage(function () { _this3.zooming = false; if (isFunction(options.zoomed)) { addListener(element, EVENT_ZOOMED, options.zoomed, { once: true }); } dispatchEvent(element, EVENT_ZOOMED, { ratio: ratio, oldRatio: oldRatio, originalEvent: _originalEvent }, { cancelable: false }); }); if (hasTooltip) { this.tooltip(); } } return this; }, /** * Rotate the image with a relative degree. * @param {number} degree - The rotate degree. * @returns {Viewer} this */ rotate: function rotate(degree) { this.rotateTo((this.imageData.rotate || 0) + Number(degree)); return this; }, /** * Rotate the image to an absolute degree. * @param {number} degree - The rotate degree. * @returns {Viewer} this */ rotateTo: function rotateTo(degree) { var imageData = this.imageData; degree = Number(degree); if (isNumber(degree) && this.viewed && !this.played && this.options.rotatable) { imageData.rotate = degree; this.renderImage(); } return this; }, /** * Scale the image on the x-axis. * @param {number} scaleX - The scale ratio on the x-axis. * @returns {Viewer} this */ scaleX: function scaleX(_scaleX) { this.scale(_scaleX, this.imageData.scaleY); return this; }, /** * Scale the image on the y-axis. * @param {number} scaleY - The scale ratio on the y-axis. * @returns {Viewer} this */ scaleY: function scaleY(_scaleY) { this.scale(this.imageData.scaleX, _scaleY); return this; }, /** * Scale the image. * @param {number} scaleX - The scale ratio on the x-axis. * @param {number} [scaleY=scaleX] - The scale ratio on the y-axis. * @returns {Viewer} this */ scale: function scale(scaleX) { var scaleY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : scaleX; var imageData = this.imageData; scaleX = Number(scaleX); scaleY = Number(scaleY); if (this.viewed && !this.played && this.options.scalable) { var changed = false; if (isNumber(scaleX)) { imageData.scaleX = scaleX; changed = true; } if (isNumber(scaleY)) { imageData.scaleY = scaleY; changed = true; } if (changed) { this.renderImage(); } } return this; }, /** * Play the images * @param {boolean} [fullscreen=false] - Indicate if request fullscreen or not. * @returns {Viewer} this */ play: function play() { var _this4 = this; var fullscreen = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; if (!this.isShown || this.played) { return this; } var element = this.element, options = this.options; if (isFunction(options.play)) { addListener(element, EVENT_PLAY, options.play, { once: true }); } if (dispatchEvent(element, EVENT_PLAY) === false) { return this; } var player = this.player; var onLoad = this.loadImage.bind(this); var list = []; var total = 0; var index = 0; this.played = true; this.onLoadWhenPlay = onLoad; if (fullscreen) { this.requestFullscreen(); } addClass(player, CLASS_SHOW); forEach(this.items, function (item, i) { var img = item.querySelector('img'); var image = document.createElement('img'); image.src = getData(img, 'originalUrl'); image.alt = img.getAttribute('alt'); image.referrerPolicy = img.referrerPolicy; total += 1; addClass(image, CLASS_FADE); toggleClass(image, CLASS_TRANSITION, options.transition); if (hasClass(item, CLASS_ACTIVE)) { addClass(image, CLASS_IN); index = i; } list.push(image); addListener(image, EVENT_LOAD, onLoad, { once: true }); player.appendChild(image); }); if (isNumber(options.interval) && options.interval > 0) { var play = function play() { _this4.playing = setTimeout(function () { removeClass(list[index], CLASS_IN); index += 1; index = index < total ? index : 0; addClass(list[index], CLASS_IN); play(); }, options.interval); }; if (total > 1) { play(); } } return this; }, // Stop play stop: function stop() { var _this5 = this; if (!this.played) { return this; } var element = this.element, options = this.options; if (isFunction(options.stop)) { addListener(element, EVENT_STOP, options.stop, { once: true }); } if (dispatchEvent(element, EVENT_STOP) === false) { return this; } var player = this.player; this.played = false; clearTimeout(this.playing); forEach(player.getElementsByTagName('img'), function (image) { removeListener(image, EVENT_LOAD, _this5.onLoadWhenPlay); }); removeClass(player, CLASS_SHOW); player.innerHTML = ''; this.exitFullscreen(); return this; }, // Enter modal mode (only available in inline mode) full: function full() { var _this6 = this; var options = this.options, viewer = this.viewer, image = this.image, list = this.list; if (!this.isShown || this.played || this.fulled || !options.inline) { return this; } this.fulled = true; this.open(); addClass(this.button, CLASS_FULLSCREEN_EXIT); if (options.transition) { removeClass(list, CLASS_TRANSITION); if (this.viewed) { removeClass(image, CLASS_TRANSITION); } } addClass(viewer, CLASS_FIXED); viewer.setAttribute('style', ''); setStyle(viewer, { zIndex: options.zIndex }); this.initContainer(); this.viewerData = assign({}, this.containerData); this.renderList(); if (this.viewed) { this.initImage(function () { _this6.renderImage(function () { if (options.transition) { setTimeout(function () { addClass(image, CLASS_TRANSITION); addClass(list, CLASS_TRANSITION); }, 0); } }); }); } return this; }, // Exit modal mode (only available in inline mode) exit: function exit() { var _this7 = this; var options = this.options, viewer = this.viewer, image = this.image, list = this.list; if (!this.isShown || this.played || !this.fulled || !options.inline) { return this; } this.fulled = false; this.close(); removeClass(this.button, CLASS_FULLSCREEN_EXIT); if (options.transition) { removeClass(list, CLASS_TRANSITION); if (this.viewed) { removeClass(image, CLASS_TRANSITION); } } removeClass(viewer, CLASS_FIXED); setStyle(viewer, { zIndex: options.zIndexInline }); this.viewerData = assign({}, this.parentData); this.renderViewer(); this.renderList(); if (this.viewed) { this.initImage(function () { _this7.renderImage(function () { if (options.transition) { setTimeout(function () { addClass(image, CLASS_TRANSITION); addClass(list, CLASS_TRANSITION); }, 0); } }); }); } return this; }, // Show the current ratio of the image with percentage tooltip: function tooltip() { var _this8 = this; var options = this.options, tooltipBox = this.tooltipBox, imageData = this.imageData; if (!this.viewed || this.played || !options.tooltip) { return this; } tooltipBox.textContent = "".concat(Math.round(imageData.ratio * 100), "%"); if (!this.tooltipping) { if (options.transition) { if (this.fading) { dispatchEvent(tooltipBox, EVENT_TRANSITION_END); } addClass(tooltipBox, CLASS_SHOW); addClass(tooltipBox, CLASS_FADE); addClass(tooltipBox, CLASS_TRANSITION); // Force reflow to enable CSS3 transition tooltipBox.initialOffsetWidth = tooltipBox.offsetWidth; addClass(tooltipBox, CLASS_IN); } else { addClass(tooltipBox, CLASS_SHOW); } } else { clearTimeout(this.tooltipping); } this.tooltipping = setTimeout(function () { if (options.transition) { addListener(tooltipBox, EVENT_TRANSITION_END, function () { removeClass(tooltipBox, CLASS_SHOW); removeClass(tooltipBox, CLASS_FADE); removeClass(tooltipBox, CLASS_TRANSITION); _this8.fading = false; }, { once: true }); removeClass(tooltipBox, CLASS_IN); _this8.fading = true; } else { removeClass(tooltipBox, CLASS_SHOW); } _this8.tooltipping = false; }, 1000); return this; }, // Toggle the image size between its natural size and initial size toggle: function toggle() { if (this.imageData.ratio === 1) { this.zoomTo(this.initialImageData.ratio, true); } else { this.zoomTo(1, true); } return this; }, // Reset the image to its initial state reset: function reset() { if (this.viewed && !this.played) { this.imageData = assign({}, this.initialImageData); this.renderImage(); } return this; }, // Update viewer when images changed update: function update() { var _this9 = this; var element = this.element, options = this.options, isImg = this.isImg; // Destroy viewer if the target image was deleted if (isImg && !element.parentNode) { return this.destroy(); } var images = []; forEach(isImg ? [element] : element.querySelectorAll('img'), function (image) { if (isFunction(options.filter)) { if (options.filter.call(_this9, image)) { images.push(image); } } else if (_this9.getImageURL(image)) { images.push(image); } }); if (!images.length) { return this; } this.images = images; this.length = images.length; if (this.ready) { var changedIndexes = []; forEach(this.items, function (item, i) { var img = item.querySelector('img'); var image = images[i]; if (image && img) { if (image.src !== img.src // Title changed (#408) || image.alt !== img.alt) { changedIndexes.push(i); } } else { changedIndexes.push(i); } }); setStyle(this.list, { width: 'auto' }); this.initList(); if (this.isShown) { if (this.length) { if (this.viewed) { var changedIndex = changedIndexes.indexOf(this.index); if (changedIndex >= 0) { this.viewed = false; this.view(Math.max(Math.min(this.index - changedIndex, this.length - 1), 0)); } else { // Reactivate the current viewing item after reset the list. addClass(this.items[this.index], CLASS_ACTIVE); } } } else { this.image = null; this.viewed = false; this.index = 0; this.imageData = {}; this.canvas.innerHTML = ''; this.title.innerHTML = ''; } } } else { this.build(); } return this; }, // Destroy the viewer destroy: function destroy() { var element = this.element, options = this.options; if (!element[NAMESPACE]) { return this; } this.destroyed = true; if (this.ready) { if (this.played) { this.stop(); } if (options.inline) { if (this.fulled) { this.exit(); } this.unbind(); } else if (this.isShown) { if (this.viewing) { if (this.imageRendering) { this.imageRendering.abort(); } else if (this.imageInitializing) { this.imageInitializing.abort(); } } if (this.hiding) { this.transitioning.abort(); } this.hidden(); } else if (this.showing) { this.transitioning.abort(); this.hidden(); } this.ready = false; this.viewer.parentNode.removeChild(this.viewer); } else if (options.inline) { if (this.delaying) { this.delaying.abort(); } else if (this.initializing) { this.initializing.abort(); } } if (!options.inline) { removeListener(element, EVENT_CLICK, this.onStart); } element[NAMESPACE] = undefined; return this; } }; var others = { getImageURL: function getImageURL(image) { var url = this.options.url; if (isString(url)) { url = image.getAttribute(url); } else if (isFunction(url)) { url = url.call(this, image); } else { url = ''; } return url; }, open: function open() { var body = this.body; addClass(body, CLASS_OPEN); body.style.paddingRight = "".concat(this.scrollbarWidth + (parseFloat(this.initialBodyComputedPaddingRight) || 0), "px"); }, close: function close() { var body = this.body; removeClass(body, CLASS_OPEN); body.style.paddingRight = this.initialBodyPaddingRight; }, shown: function shown() { var element = this.element, options = this.options; this.fulled = true; this.isShown = true; this.render(); this.bind(); this.showing = false; if (isFunction(options.shown)) { addListener(element, EVENT_SHOWN, options.shown, { once: true }); } if (dispatchEvent(element, EVENT_SHOWN) === false) { return; } if (this.ready && this.isShown && !this.hiding) { this.view(this.index); } }, hidden: function hidden() { var element = this.element, options = this.options; this.fulled = false; this.viewed = false; this.isShown = false; this.close(); this.unbind(); addClass(this.viewer, CLASS_HIDE); this.resetList(); this.resetImage(); this.hiding = false; if (!this.destroyed) { if (isFunction(options.hidden)) { addListener(element, EVENT_HIDDEN, options.hidden, { once: true }); } dispatchEvent(element, EVENT_HIDDEN, null, { cancelable: false }); } }, requestFullscreen: function requestFullscreen() { var document = this.element.ownerDocument; if (this.fulled && !(document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement)) { var documentElement = document.documentElement; // Element.requestFullscreen() if (documentElement.requestFullscreen) { documentElement.requestFullscreen(); } else if (documentElement.webkitRequestFullscreen) { documentElement.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT); } else if (documentElement.mozRequestFullScreen) { documentElement.mozRequestFullScreen(); } else if (documentElement.msRequestFullscreen) { documentElement.msRequestFullscreen(); } } }, exitFullscreen: function exitFullscreen() { var document = this.element.ownerDocument; if (this.fulled && (document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement)) { // Document.exitFullscreen() if (document.exitFullscreen) { document.exitFullscreen(); } else if (document.webkitExitFullscreen) { document.webkitExitFullscreen(); } else if (document.mozCancelFullScreen) { document.mozCancelFullScreen(); } else if (document.msExitFullscreen) { document.msExitFullscreen(); } } }, change: function change(event) { var options = this.options, pointers = this.pointers; var pointer = pointers[Object.keys(pointers)[0]]; var offsetX = pointer.endX - pointer.startX; var offsetY = pointer.endY - pointer.startY; switch (this.action) { // Move the current image case ACTION_MOVE: this.move(offsetX, offsetY); break; // Zoom the current image case ACTION_ZOOM: this.zoom(getMaxZoomRatio(pointers), false, event); break; case ACTION_SWITCH: { this.action = 'switched'; var absoluteOffsetX = Math.abs(offsetX); if (absoluteOffsetX > 1 && absoluteOffsetX > Math.abs(offsetY)) { // Empty `pointers` as `touchend` event will not be fired after swiped in iOS browsers. this.pointers = {}; if (offsetX > 1) { this.prev(options.loop); } else if (offsetX < -1) { this.next(options.loop); } } break; } } // Override forEach(pointers, function (p) { p.startX = p.endX; p.startY = p.endY; }); }, isSwitchable: function isSwitchable() { var imageData = this.imageData, viewerData = this.viewerData; return this.length > 1 && imageData.left >= 0 && imageData.top >= 0 && imageData.width <= viewerData.width && imageData.height <= viewerData.height; } }; var AnotherViewer = WINDOW.Viewer; var Viewer = /*#__PURE__*/function () { /** * Create a new Viewer. * @param {Element} element - The target element for viewing. * @param {Object} [options={}] - The configuration options. */ function Viewer(element) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; _classCallCheck(this, Viewer); if (!element || element.nodeType !== 1) { throw new Error('The first argument is required and must be an element.'); } this.element = element; this.options = assign({}, DEFAULTS, isPlainObject(options) && options); this.action = false; this.fading = false; this.fulled = false; this.hiding = false; this.imageClicked = false; this.imageData = {}; this.index = this.options.initialViewIndex; this.isImg = false; this.isShown = false; this.length = 0; this.played = false; this.playing = false; this.pointers = {}; this.ready = false; this.showing = false; this.timeout = false; this.tooltipping = false; this.viewed = false; this.viewing = false; this.wheeling = false; this.zooming = false; this.init(); } _createClass(Viewer, [{ key: "init", value: function init() { var _this = this; var element = this.element, options = this.options; if (element[NAMESPACE]) { return; } element[NAMESPACE] = this; var isImg = element.tagName.toLowerCase() === 'img'; var images = []; forEach(isImg ? [element] : element.querySelectorAll('img'), function (image) { if (isFunction(options.filter)) { if (options.filter.call(_this, image)) { images.push(image); } } else if (_this.getImageURL(image)) { images.push(image); } }); this.isImg = isImg; this.length = images.length; this.images = images; this.initBody(); // Override `transition` option if it is not supported if (isUndefined(document.createElement(NAMESPACE).style.transition)) { options.transition = false; } if (options.inline) { var count = 0; var progress = function progress() { count += 1; if (count === _this.length) { var timeout; _this.initializing = false; _this.delaying = { abort: function abort() { clearTimeout(timeout); } }; // build asynchronously to keep `this.viewer` is accessible in `ready` event handler. timeout = setTimeout(function () { _this.delaying = false; _this.build(); }, 0); } }; this.initializing = { abort: function abort() { forEach(images, function (image) { if (!image.complete) { removeListener(image, EVENT_LOAD, progress); } }); } }; forEach(images, function (image) { if (image.complete) { progress(); } else { addListener(image, EVENT_LOAD, progress, { once: true }); } }); } else { addListener(element, EVENT_CLICK, this.onStart = function (_ref) { var target = _ref.target; if (target.tagName.toLowerCase() === 'img' && (!isFunction(options.filter) || options.filter.call(_this, target))) { _this.view(_this.images.indexOf(target)); } }); } } }, { key: "build", value: function build() { if (this.ready) { return; } var element = this.element, options = this.options; var parent = element.parentNode; var template = document.createElement('div'); template.innerHTML = TEMPLATE; var viewer = template.querySelector(".".concat(NAMESPACE, "-container")); var title = viewer.querySelector(".".concat(NAMESPACE, "-title")); var toolbar = viewer.querySelector(".".concat(NAMESPACE, "-toolbar")); var navbar = viewer.querySelector(".".concat(NAMESPACE, "-navbar")); var button = viewer.querySelector(".".concat(NAMESPACE, "-button")); var canvas = viewer.querySelector(".".concat(NAMESPACE, "-canvas")); this.parent = parent; this.viewer = viewer; this.title = title; this.toolbar = toolbar; this.navbar = navbar; this.button = button; this.canvas = canvas; this.footer = viewer.querySelector(".".concat(NAMESPACE, "-footer")); this.tooltipBox = viewer.querySelector(".".concat(NAMESPACE, "-tooltip")); this.player = viewer.querySelector(".".concat(NAMESPACE, "-player")); this.list = viewer.querySelector(".".concat(NAMESPACE, "-list")); addClass(title, !options.title ? CLASS_HIDE : getResponsiveClass(Array.isArray(options.title) ? options.title[0] : options.title)); addClass(navbar, !options.navbar ? CLASS_HIDE : getResponsiveClass(options.navbar)); toggleClass(button, CLASS_HIDE, !options.button); if (options.backdrop) { addClass(viewer, "".concat(NAMESPACE, "-backdrop")); if (!options.inline && options.backdrop !== 'static') { setData(canvas, DATA_ACTION, 'hide'); } } if (isString(options.className) && options.className) { // In case there are multiple class names options.className.split(REGEXP_SPACES).forEach(function (className) { addClass(viewer, className); }); } if (options.toolbar) { var list = document.createElement('ul'); var custom = isPlainObject(options.toolbar); var zoomButtons = BUTTONS.slice(0, 3); var rotateButtons = BUTTONS.slice(7, 9); var scaleButtons = BUTTONS.slice(9); if (!custom) { addClass(toolbar, getResponsiveClass(options.toolbar)); } forEach(custom ? options.toolbar : BUTTONS, function (value, index) { var deep = custom && isPlainObject(value); var name = custom ? hyphenate(index) : value; var show = deep && !isUndefined(value.show) ? value.show : value; if (!show || !options.zoomable && zoomButtons.indexOf(name) !== -1 || !options.rotatable && rotateButtons.indexOf(name) !== -1 || !options.scalable && scaleButtons.indexOf(name) !== -1) { return; } var size = deep && !isUndefined(value.size) ? value.size : value; var click = deep && !isUndefined(value.click) ? value.click : value; var item = document.createElement('li'); item.setAttribute('role', 'button'); addClass(item, "".concat(NAMESPACE, "-").concat(name)); if (!isFunction(click)) { setData(item, DATA_ACTION, name); } if (isNumber(show)) { addClass(item, getResponsiveClass(show)); } if (['small', 'large'].indexOf(size) !== -1) { addClass(item, "".concat(NAMESPACE, "-").concat(size)); } else if (name === 'play') { addClass(item, "".concat(NAMESPACE, "-large")); } if (isFunction(click)) { addListener(item, EVENT_CLICK, click); } list.appendChild(item); }); toolbar.appendChild(list); } else { addClass(toolbar, CLASS_HIDE); } if (!options.rotatable) { var rotates = toolbar.querySelectorAll('li[class*="rotate"]'); addClass(rotates, CLASS_INVISIBLE); forEach(rotates, function (rotate) { toolbar.appendChild(rotate); }); } if (options.inline) { addClass(button, CLASS_FULLSCREEN); setStyle(viewer, { zIndex: options.zIndexInline }); if (window.getComputedStyle(parent).position === 'static') { setStyle(parent, { position: 'relative' }); } parent.insertBefore(viewer, element.nextSibling); } else { addClass(button, CLASS_CLOSE); addClass(viewer, CLASS_FIXED); addClass(viewer, CLASS_FADE); addClass(viewer, CLASS_HIDE); setStyle(viewer, { zIndex: options.zIndex }); var container = options.container; if (isString(container)) { container = element.ownerDocument.querySelector(container); } if (!container) { container = this.body; } container.appendChild(viewer); } if (options.inline) { this.render(); this.bind(); this.isShown = true; } this.ready = true; if (isFunction(options.ready)) { addListener(element, EVENT_READY, options.ready, { once: true }); } if (dispatchEvent(element, EVENT_READY) === false) { this.ready = false; return; } if (this.ready && options.inline) { this.view(this.index); } } /** * Get the no conflict viewer class. * @returns {Viewer} The viewer class. */ }], [{ key: "noConflict", value: function noConflict() { window.Viewer = AnotherViewer; return Viewer; } /** * Change the default options. * @param {Object} options - The new default options. */ }, { key: "setDefaults", value: function setDefaults(options) { assign(DEFAULTS, isPlainObject(options) && options); } }]); return Viewer; }(); assign(Viewer.prototype, render, events, handlers, methods, others); module.exports = Viewer; ================================================ FILE: public/assets/luna/js/viewerjs/viewer.css ================================================ /*! * Viewer.js v1.7.1 * https://fengyuanchen.github.io/viewerjs * * Copyright 2015-present Chen Fengyuan * Released under the MIT license * * Date: 2020-09-29T13:45:16.438Z */ .viewer-zoom-in::before, .viewer-zoom-out::before, .viewer-one-to-one::before, .viewer-reset::before, .viewer-prev::before, .viewer-play::before, .viewer-next::before, .viewer-rotate-left::before, .viewer-rotate-right::before, .viewer-flip-horizontal::before, .viewer-flip-vertical::before, .viewer-fullscreen::before, .viewer-fullscreen-exit::before, .viewer-close::before { background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAARgAAAAUCAYAAABWOyJDAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAQPSURBVHic7Zs/iFxVFMa/0U2UaJGksUgnIVhYxVhpjDbZCBmLdAYECxsRFBTUamcXUiSNncgKQbSxsxH8gzAP3FU2jY0kKKJNiiiIghFlccnP4p3nPCdv3p9778vsLOcHB2bfveeb7955c3jvvNkBIMdxnD64a94GHMfZu3iBcRynN7zAOI7TG15gHCeeNUkr8zaxG2lbYDYsdgMbktBsP03jdQwljSXdtBhLOmtjowC9Mg9L+knSlcD8TNKpSA9lBpK2JF2VdDSR5n5J64m0qli399hNFMUlpshQii5jbXTbHGviB0nLNeNDSd9VO4A2UdB2fp+x0eCnaXxWXGA2X0au/3HgN9P4LFCjIANOJdrLr0zzZ+BEpNYDwKbpnQMeAw4m8HjQtM6Z9qa917zPQwFr3M5KgA6J5rTJCdFZJj9/lyvGhsDvwFNVuV2MhhjrK6b9bFiE+j1r87eBl4HDwCF7/U/k+ofAX5b/EXBv5JoLMuILzf3Ap6Z3EzgdqHMCuF7hcQf4HDgeoHnccncqdK/TvSDWffFXI/exICY/xZyqc6XLWF1UFZna4gJ7q8BsRvgd2/xXpo6P+D9dfT7PpECtA3cnWPM0GXGFZh/wgWltA+cDNC7X+AP4GzjZQe+k5dRxuYPeiuXU7e1qwLpDz7dFjXKRaSwuMLvAlG8zZlG+YmiK1HoFqT7wP2z+4Q45TfEGcMt01xLoNZEBTwRqD4BLpnMLeC1A41UmVxsXgXeBayV/Wx20rpTyrpnWRft7p6O/FdqzGrDukPNtkaMoMo3FBdBSQMOnYBCReyf05s126fU9ytfX98+mY54Kxnp7S9K3kj6U9KYdG0h6UdLbkh7poFXMfUnSOyVvL0h6VtIXHbS6nOP+s/Zm9mvyXW1uuC9ohZ72E9uDmXWLJOB1GxsH+DxPftsB8B6wlGDN02TAkxG6+4D3TWsbeC5CS8CDFce+AW500LhhOW2020TRjK3b21HEmgti9m0RonxbdMZeVzV+/4tF3cBpP7E9mKHNL5q8h5g0eYsCMQz0epq8gQrwMXAgcs0FGXGFRcB9wCemF9PkbYqM/Bas7fxLwNeJPdTdpo4itQti8lPMqTpXuozVRVXPpbHI3KkNTB1NfkL81j2mvhDp91HgV9MKuRIqrykj3WPq4rHyL+axj8/qGPmTqi6F9YDlHOvJU6oYcTsh/TYSzWmTE6JT19CtLTJt32D6CmHe0eQn1O8z5AXgT4sx4Vcu0/EQecMydB8z0hUWkTd2t4CrwNEePqMBcAR4mrBbwyXLPWJa8zrXmmLEhNBmfpkuY2102xxrih+pb+ieAb6vGhuA97UcJ5KR8gZ77K+99xxeYBzH6Q3/Z0fHcXrDC4zjOL3hBcZxnN74F+zlvXFWXF9PAAAAAElFTkSuQmCC'); background-repeat: no-repeat; background-size: 280px; color: transparent; display: block; font-size: 0; height: 20px; line-height: 0; width: 20px; } .viewer-zoom-in::before { background-position: 0 0; content: 'Zoom In'; } .viewer-zoom-out::before { background-position: -20px 0; content: 'Zoom Out'; } .viewer-one-to-one::before { background-position: -40px 0; content: 'One to One'; } .viewer-reset::before { background-position: -60px 0; content: 'Reset'; } .viewer-prev::before { background-position: -80px 0; content: 'Previous'; } .viewer-play::before { background-position: -100px 0; content: 'Play'; } .viewer-next::before { background-position: -120px 0; content: 'Next'; } .viewer-rotate-left::before { background-position: -140px 0; content: 'Rotate Left'; } .viewer-rotate-right::before { background-position: -160px 0; content: 'Rotate Right'; } .viewer-flip-horizontal::before { background-position: -180px 0; content: 'Flip Horizontal'; } .viewer-flip-vertical::before { background-position: -200px 0; content: 'Flip Vertical'; } .viewer-fullscreen::before { background-position: -220px 0; content: 'Enter Full Screen'; } .viewer-fullscreen-exit::before { background-position: -240px 0; content: 'Exit Full Screen'; } .viewer-close::before { background-position: -260px 0; content: 'Close'; } .viewer-container { bottom: 0; direction: ltr; font-size: 0; left: 0; line-height: 0; overflow: hidden; position: absolute; right: 0; -webkit-tap-highlight-color: transparent; top: 0; -ms-touch-action: none; touch-action: none; -webkit-touch-callout: none; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } .viewer-container::-moz-selection, .viewer-container *::-moz-selection { background-color: transparent; } .viewer-container::selection, .viewer-container *::selection { background-color: transparent; } .viewer-container img { display: block; height: auto; max-height: none !important; max-width: none !important; min-height: 0 !important; min-width: 0 !important; width: 100%; } .viewer-canvas { bottom: 0; left: 0; overflow: hidden; position: absolute; right: 0; top: 0; } .viewer-canvas > img { height: auto; margin: 15px auto; max-width: 90% !important; width: auto; } .viewer-footer { bottom: 0; left: 0; overflow: hidden; position: absolute; right: 0; text-align: center; } .viewer-navbar { background-color: rgba(0, 0, 0, 0.5); overflow: hidden; } .viewer-list { -webkit-box-sizing: content-box; box-sizing: content-box; height: 50px; margin: 0; overflow: hidden; padding: 1px 0; } .viewer-list > li { color: transparent; cursor: pointer; float: left; font-size: 0; height: 50px; line-height: 0; opacity: 0.5; overflow: hidden; -webkit-transition: opacity 0.15s; transition: opacity 0.15s; width: 30px; } .viewer-list > li:hover { opacity: 0.75; } .viewer-list > li + li { margin-left: 1px; } .viewer-list > .viewer-loading { position: relative; } .viewer-list > .viewer-loading::after { border-width: 2px; height: 20px; margin-left: -10px; margin-top: -10px; width: 20px; } .viewer-list > .viewer-active, .viewer-list > .viewer-active:hover { opacity: 1; } .viewer-player { background-color: #000; bottom: 0; cursor: none; display: none; left: 0; position: absolute; right: 0; top: 0; } .viewer-player > img { left: 0; position: absolute; top: 0; } .viewer-toolbar > ul { display: inline-block; margin: 0 auto 5px; overflow: hidden; padding: 3px 0; } .viewer-toolbar > ul > li { background-color: rgba(0, 0, 0, 0.5); border-radius: 50%; cursor: pointer; float: left; height: 24px; overflow: hidden; -webkit-transition: background-color 0.15s; transition: background-color 0.15s; width: 24px; } .viewer-toolbar > ul > li:hover { background-color: rgba(0, 0, 0, 0.8); } .viewer-toolbar > ul > li::before { margin: 2px; } .viewer-toolbar > ul > li + li { margin-left: 1px; } .viewer-toolbar > ul > .viewer-small { height: 18px; margin-bottom: 3px; margin-top: 3px; width: 18px; } .viewer-toolbar > ul > .viewer-small::before { margin: -1px; } .viewer-toolbar > ul > .viewer-large { height: 30px; margin-bottom: -3px; margin-top: -3px; width: 30px; } .viewer-toolbar > ul > .viewer-large::before { margin: 5px; } .viewer-tooltip { background-color: rgba(0, 0, 0, 0.8); border-radius: 10px; color: #fff; display: none; font-size: 12px; height: 20px; left: 50%; line-height: 20px; margin-left: -25px; margin-top: -10px; position: absolute; text-align: center; top: 50%; width: 50px; } .viewer-title { color: #ccc; display: inline-block; font-size: 12px; line-height: 1; margin: 0 5% 5px; max-width: 90%; opacity: 0.8; overflow: hidden; text-overflow: ellipsis; -webkit-transition: opacity 0.15s; transition: opacity 0.15s; white-space: nowrap; } .viewer-title:hover { opacity: 1; } .viewer-button { background-color: rgba(0, 0, 0, 0.5); border-radius: 50%; cursor: pointer; height: 80px; overflow: hidden; position: absolute; right: -40px; top: -40px; -webkit-transition: background-color 0.15s; transition: background-color 0.15s; width: 80px; } .viewer-button:focus, .viewer-button:hover { background-color: rgba(0, 0, 0, 0.8); } .viewer-button::before { bottom: 15px; left: 15px; position: absolute; } .viewer-fixed { position: fixed; } .viewer-open { overflow: hidden; } .viewer-show { display: block; } .viewer-hide { display: none; } .viewer-backdrop { background-color: rgba(0, 0, 0, 0.5); } .viewer-invisible { visibility: hidden; } .viewer-move { cursor: move; cursor: -webkit-grab; cursor: grab; } .viewer-fade { opacity: 0; } .viewer-in { opacity: 1; } .viewer-transition { -webkit-transition: all 0.3s; transition: all 0.3s; } @-webkit-keyframes viewer-spinner { 0% { -webkit-transform: rotate(0deg); transform: rotate(0deg); } 100% { -webkit-transform: rotate(360deg); transform: rotate(360deg); } } @keyframes viewer-spinner { 0% { -webkit-transform: rotate(0deg); transform: rotate(0deg); } 100% { -webkit-transform: rotate(360deg); transform: rotate(360deg); } } .viewer-loading::after { -webkit-animation: viewer-spinner 1s linear infinite; animation: viewer-spinner 1s linear infinite; border: 4px solid rgba(255, 255, 255, 0.1); border-left-color: rgba(255, 255, 255, 0.5); border-radius: 50%; content: ''; display: inline-block; height: 40px; left: 50%; margin-left: -20px; margin-top: -20px; position: absolute; top: 50%; width: 40px; z-index: 1; } @media (max-width: 767px) { .viewer-hide-xs-down { display: none; } } @media (max-width: 991px) { .viewer-hide-sm-down { display: none; } } @media (max-width: 1199px) { .viewer-hide-md-down { display: none; } } ================================================ FILE: public/assets/luna/js/viewerjs/viewer.esm.js ================================================ /*! * Viewer.js v1.7.1 * https://fengyuanchen.github.io/viewerjs * * Copyright 2015-present Chen Fengyuan * Released under the MIT license * * Date: 2020-09-29T13:45:20.981Z */ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function (obj) { return typeof obj; }; } else { _typeof = function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } function _objectSpread2(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } var DEFAULTS = { /** * Enable a modal backdrop, specify `static` for a backdrop * which doesn't close the modal on click. * @type {boolean} */ backdrop: true, /** * Show the button on the top-right of the viewer. * @type {boolean} */ button: true, /** * Show the navbar. * @type {boolean | number} */ navbar: true, /** * Specify the visibility and the content of the title. * @type {boolean | number | Function | Array} */ title: true, /** * Show the toolbar. * @type {boolean | number | Object} */ toolbar: true, /** * Custom class name(s) to add to the viewer's root element. * @type {string} */ className: '', /** * Define where to put the viewer in modal mode. * @type {string | Element} */ container: 'body', /** * Filter the images for viewing. Return true if the image is viewable. * @type {Function} */ filter: null, /** * Enable to request fullscreen when play. * @type {boolean} */ fullscreen: true, /** * Define the extra attributes to inherit from the original image. * @type {Array} */ inheritedAttributes: ['crossOrigin', 'decoding', 'isMap', 'loading', 'referrerPolicy', 'sizes', 'srcset', 'useMap'], /** * Define the initial index of image for viewing. * @type {number} */ initialViewIndex: 0, /** * Enable inline mode. * @type {boolean} */ inline: false, /** * The amount of time to delay between automatically cycling an image when playing. * @type {number} */ interval: 5000, /** * Enable keyboard support. * @type {boolean} */ keyboard: true, /** * Indicate if show a loading spinner when load image or not. * @type {boolean} */ loading: true, /** * Indicate if enable loop viewing or not. * @type {boolean} */ loop: true, /** * Min width of the viewer in inline mode. * @type {number} */ minWidth: 200, /** * Min height of the viewer in inline mode. * @type {number} */ minHeight: 100, /** * Enable to move the image. * @type {boolean} */ movable: true, /** * Enable to rotate the image. * @type {boolean} */ rotatable: true, /** * Enable to scale the image. * @type {boolean} */ scalable: true, /** * Enable to zoom the image. * @type {boolean} */ zoomable: true, /** * Enable to zoom the current image by dragging on the touch screen. * @type {boolean} */ zoomOnTouch: true, /** * Enable to zoom the image by wheeling mouse. * @type {boolean} */ zoomOnWheel: true, /** * Enable to slide to the next or previous image by swiping on the touch screen. * @type {boolean} */ slideOnTouch: true, /** * Indicate if toggle the image size between its natural size * and initial size when double click on the image or not. * @type {boolean} */ toggleOnDblclick: true, /** * Show the tooltip with image ratio (percentage) when zoom in or zoom out. * @type {boolean} */ tooltip: true, /** * Enable CSS3 Transition for some special elements. * @type {boolean} */ transition: true, /** * Define the CSS `z-index` value of viewer in modal mode. * @type {number} */ zIndex: 2015, /** * Define the CSS `z-index` value of viewer in inline mode. * @type {number} */ zIndexInline: 0, /** * Define the ratio when zoom the image by wheeling mouse. * @type {number} */ zoomRatio: 0.1, /** * Define the min ratio of the image when zoom out. * @type {number} */ minZoomRatio: 0.01, /** * Define the max ratio of the image when zoom in. * @type {number} */ maxZoomRatio: 100, /** * Define where to get the original image URL for viewing. * @type {string | Function} */ url: 'src', /** * Event shortcuts. * @type {Function} */ ready: null, show: null, shown: null, hide: null, hidden: null, view: null, viewed: null, zoom: null, zoomed: null, play: null, stop: null }; var TEMPLATE = '
' + '
' + '' + '
' + '
' + '
' + '
'; var IS_BROWSER = typeof window !== 'undefined' && typeof window.document !== 'undefined'; var WINDOW = IS_BROWSER ? window : {}; var IS_TOUCH_DEVICE = IS_BROWSER && WINDOW.document.documentElement ? 'ontouchstart' in WINDOW.document.documentElement : false; var HAS_POINTER_EVENT = IS_BROWSER ? 'PointerEvent' in WINDOW : false; var NAMESPACE = 'viewer'; // Actions var ACTION_MOVE = 'move'; var ACTION_SWITCH = 'switch'; var ACTION_ZOOM = 'zoom'; // Classes var CLASS_ACTIVE = "".concat(NAMESPACE, "-active"); var CLASS_CLOSE = "".concat(NAMESPACE, "-close"); var CLASS_FADE = "".concat(NAMESPACE, "-fade"); var CLASS_FIXED = "".concat(NAMESPACE, "-fixed"); var CLASS_FULLSCREEN = "".concat(NAMESPACE, "-fullscreen"); var CLASS_FULLSCREEN_EXIT = "".concat(NAMESPACE, "-fullscreen-exit"); var CLASS_HIDE = "".concat(NAMESPACE, "-hide"); var CLASS_HIDE_MD_DOWN = "".concat(NAMESPACE, "-hide-md-down"); var CLASS_HIDE_SM_DOWN = "".concat(NAMESPACE, "-hide-sm-down"); var CLASS_HIDE_XS_DOWN = "".concat(NAMESPACE, "-hide-xs-down"); var CLASS_IN = "".concat(NAMESPACE, "-in"); var CLASS_INVISIBLE = "".concat(NAMESPACE, "-invisible"); var CLASS_LOADING = "".concat(NAMESPACE, "-loading"); var CLASS_MOVE = "".concat(NAMESPACE, "-move"); var CLASS_OPEN = "".concat(NAMESPACE, "-open"); var CLASS_SHOW = "".concat(NAMESPACE, "-show"); var CLASS_TRANSITION = "".concat(NAMESPACE, "-transition"); // Events var EVENT_CLICK = 'click'; var EVENT_DBLCLICK = 'dblclick'; var EVENT_DRAG_START = 'dragstart'; var EVENT_HIDDEN = 'hidden'; var EVENT_HIDE = 'hide'; var EVENT_KEY_DOWN = 'keydown'; var EVENT_LOAD = 'load'; var EVENT_TOUCH_START = IS_TOUCH_DEVICE ? 'touchstart' : 'mousedown'; var EVENT_TOUCH_MOVE = IS_TOUCH_DEVICE ? 'touchmove' : 'mousemove'; var EVENT_TOUCH_END = IS_TOUCH_DEVICE ? 'touchend touchcancel' : 'mouseup'; var EVENT_POINTER_DOWN = HAS_POINTER_EVENT ? 'pointerdown' : EVENT_TOUCH_START; var EVENT_POINTER_MOVE = HAS_POINTER_EVENT ? 'pointermove' : EVENT_TOUCH_MOVE; var EVENT_POINTER_UP = HAS_POINTER_EVENT ? 'pointerup pointercancel' : EVENT_TOUCH_END; var EVENT_READY = 'ready'; var EVENT_RESIZE = 'resize'; var EVENT_SHOW = 'show'; var EVENT_SHOWN = 'shown'; var EVENT_TRANSITION_END = 'transitionend'; var EVENT_VIEW = 'view'; var EVENT_VIEWED = 'viewed'; var EVENT_WHEEL = 'wheel'; var EVENT_ZOOM = 'zoom'; var EVENT_ZOOMED = 'zoomed'; var EVENT_PLAY = 'play'; var EVENT_STOP = 'stop'; // Data keys var DATA_ACTION = "".concat(NAMESPACE, "Action"); // RegExps var REGEXP_SPACES = /\s\s*/; // Misc var BUTTONS = ['zoom-in', 'zoom-out', 'one-to-one', 'reset', 'prev', 'play', 'next', 'rotate-left', 'rotate-right', 'flip-horizontal', 'flip-vertical']; /** * Check if the given value is a string. * @param {*} value - The value to check. * @returns {boolean} Returns `true` if the given value is a string, else `false`. */ function isString(value) { return typeof value === 'string'; } /** * Check if the given value is not a number. */ var isNaN = Number.isNaN || WINDOW.isNaN; /** * Check if the given value is a number. * @param {*} value - The value to check. * @returns {boolean} Returns `true` if the given value is a number, else `false`. */ function isNumber(value) { return typeof value === 'number' && !isNaN(value); } /** * Check if the given value is undefined. * @param {*} value - The value to check. * @returns {boolean} Returns `true` if the given value is undefined, else `false`. */ function isUndefined(value) { return typeof value === 'undefined'; } /** * Check if the given value is an object. * @param {*} value - The value to check. * @returns {boolean} Returns `true` if the given value is an object, else `false`. */ function isObject(value) { return _typeof(value) === 'object' && value !== null; } var hasOwnProperty = Object.prototype.hasOwnProperty; /** * Check if the given value is a plain object. * @param {*} value - The value to check. * @returns {boolean} Returns `true` if the given value is a plain object, else `false`. */ function isPlainObject(value) { if (!isObject(value)) { return false; } try { var _constructor = value.constructor; var prototype = _constructor.prototype; return _constructor && prototype && hasOwnProperty.call(prototype, 'isPrototypeOf'); } catch (error) { return false; } } /** * Check if the given value is a function. * @param {*} value - The value to check. * @returns {boolean} Returns `true` if the given value is a function, else `false`. */ function isFunction(value) { return typeof value === 'function'; } /** * Iterate the given data. * @param {*} data - The data to iterate. * @param {Function} callback - The process function for each element. * @returns {*} The original data. */ function forEach(data, callback) { if (data && isFunction(callback)) { if (Array.isArray(data) || isNumber(data.length) /* array-like */ ) { var length = data.length; var i; for (i = 0; i < length; i += 1) { if (callback.call(data, data[i], i, data) === false) { break; } } } else if (isObject(data)) { Object.keys(data).forEach(function (key) { callback.call(data, data[key], key, data); }); } } return data; } /** * Extend the given object. * @param {*} obj - The object to be extended. * @param {*} args - The rest objects which will be merged to the first object. * @returns {Object} The extended object. */ var assign = Object.assign || function assign(obj) { for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { args[_key - 1] = arguments[_key]; } if (isObject(obj) && args.length > 0) { args.forEach(function (arg) { if (isObject(arg)) { Object.keys(arg).forEach(function (key) { obj[key] = arg[key]; }); } }); } return obj; }; var REGEXP_SUFFIX = /^(?:width|height|left|top|marginLeft|marginTop)$/; /** * Apply styles to the given element. * @param {Element} element - The target element. * @param {Object} styles - The styles for applying. */ function setStyle(element, styles) { var style = element.style; forEach(styles, function (value, property) { if (REGEXP_SUFFIX.test(property) && isNumber(value)) { value += 'px'; } style[property] = value; }); } /** * Escape a string for using in HTML. * @param {String} value - The string to escape. * @returns {String} Returns the escaped string. */ function escapeHTMLEntities(value) { return isString(value) ? value.replace(/&(?!amp;|quot;|#39;|lt;|gt;)/g, '&').replace(/"/g, '"').replace(/'/g, ''').replace(//g, '>') : value; } /** * Check if the given element has a special class. * @param {Element} element - The element to check. * @param {string} value - The class to search. * @returns {boolean} Returns `true` if the special class was found. */ function hasClass(element, value) { if (!element || !value) { return false; } return element.classList ? element.classList.contains(value) : element.className.indexOf(value) > -1; } /** * Add classes to the given element. * @param {Element} element - The target element. * @param {string} value - The classes to be added. */ function addClass(element, value) { if (!element || !value) { return; } if (isNumber(element.length)) { forEach(element, function (elem) { addClass(elem, value); }); return; } if (element.classList) { element.classList.add(value); return; } var className = element.className.trim(); if (!className) { element.className = value; } else if (className.indexOf(value) < 0) { element.className = "".concat(className, " ").concat(value); } } /** * Remove classes from the given element. * @param {Element} element - The target element. * @param {string} value - The classes to be removed. */ function removeClass(element, value) { if (!element || !value) { return; } if (isNumber(element.length)) { forEach(element, function (elem) { removeClass(elem, value); }); return; } if (element.classList) { element.classList.remove(value); return; } if (element.className.indexOf(value) >= 0) { element.className = element.className.replace(value, ''); } } /** * Add or remove classes from the given element. * @param {Element} element - The target element. * @param {string} value - The classes to be toggled. * @param {boolean} added - Add only. */ function toggleClass(element, value, added) { if (!value) { return; } if (isNumber(element.length)) { forEach(element, function (elem) { toggleClass(elem, value, added); }); return; } // IE10-11 doesn't support the second parameter of `classList.toggle` if (added) { addClass(element, value); } else { removeClass(element, value); } } var REGEXP_HYPHENATE = /([a-z\d])([A-Z])/g; /** * Transform the given string from camelCase to kebab-case * @param {string} value - The value to transform. * @returns {string} The transformed value. */ function hyphenate(value) { return value.replace(REGEXP_HYPHENATE, '$1-$2').toLowerCase(); } /** * Get data from the given element. * @param {Element} element - The target element. * @param {string} name - The data key to get. * @returns {string} The data value. */ function getData(element, name) { if (isObject(element[name])) { return element[name]; } if (element.dataset) { return element.dataset[name]; } return element.getAttribute("data-".concat(hyphenate(name))); } /** * Set data to the given element. * @param {Element} element - The target element. * @param {string} name - The data key to set. * @param {string} data - The data value. */ function setData(element, name, data) { if (isObject(data)) { element[name] = data; } else if (element.dataset) { element.dataset[name] = data; } else { element.setAttribute("data-".concat(hyphenate(name)), data); } } var onceSupported = function () { var supported = false; if (IS_BROWSER) { var once = false; var listener = function listener() {}; var options = Object.defineProperty({}, 'once', { get: function get() { supported = true; return once; }, /** * This setter can fix a `TypeError` in strict mode * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Getter_only} * @param {boolean} value - The value to set */ set: function set(value) { once = value; } }); WINDOW.addEventListener('test', listener, options); WINDOW.removeEventListener('test', listener, options); } return supported; }(); /** * Remove event listener from the target element. * @param {Element} element - The event target. * @param {string} type - The event type(s). * @param {Function} listener - The event listener. * @param {Object} options - The event options. */ function removeListener(element, type, listener) { var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; var handler = listener; type.trim().split(REGEXP_SPACES).forEach(function (event) { if (!onceSupported) { var listeners = element.listeners; if (listeners && listeners[event] && listeners[event][listener]) { handler = listeners[event][listener]; delete listeners[event][listener]; if (Object.keys(listeners[event]).length === 0) { delete listeners[event]; } if (Object.keys(listeners).length === 0) { delete element.listeners; } } } element.removeEventListener(event, handler, options); }); } /** * Add event listener to the target element. * @param {Element} element - The event target. * @param {string} type - The event type(s). * @param {Function} listener - The event listener. * @param {Object} options - The event options. */ function addListener(element, type, listener) { var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; var _handler = listener; type.trim().split(REGEXP_SPACES).forEach(function (event) { if (options.once && !onceSupported) { var _element$listeners = element.listeners, listeners = _element$listeners === void 0 ? {} : _element$listeners; _handler = function handler() { delete listeners[event][listener]; element.removeEventListener(event, _handler, options); for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { args[_key2] = arguments[_key2]; } listener.apply(element, args); }; if (!listeners[event]) { listeners[event] = {}; } if (listeners[event][listener]) { element.removeEventListener(event, listeners[event][listener], options); } listeners[event][listener] = _handler; element.listeners = listeners; } element.addEventListener(event, _handler, options); }); } /** * Dispatch event on the target element. * @param {Element} element - The event target. * @param {string} type - The event type(s). * @param {Object} data - The additional event data. * @param {Object} options - The additional event options. * @returns {boolean} Indicate if the event is default prevented or not. */ function dispatchEvent(element, type, data, options) { var event; // Event and CustomEvent on IE9-11 are global objects, not constructors if (isFunction(Event) && isFunction(CustomEvent)) { event = new CustomEvent(type, _objectSpread2({ bubbles: true, cancelable: true, detail: data }, options)); } else { event = document.createEvent('CustomEvent'); event.initCustomEvent(type, true, true, data); } return element.dispatchEvent(event); } /** * Get the offset base on the document. * @param {Element} element - The target element. * @returns {Object} The offset data. */ function getOffset(element) { var box = element.getBoundingClientRect(); return { left: box.left + (window.pageXOffset - document.documentElement.clientLeft), top: box.top + (window.pageYOffset - document.documentElement.clientTop) }; } /** * Get transforms base on the given object. * @param {Object} obj - The target object. * @returns {string} A string contains transform values. */ function getTransforms(_ref) { var rotate = _ref.rotate, scaleX = _ref.scaleX, scaleY = _ref.scaleY, translateX = _ref.translateX, translateY = _ref.translateY; var values = []; if (isNumber(translateX) && translateX !== 0) { values.push("translateX(".concat(translateX, "px)")); } if (isNumber(translateY) && translateY !== 0) { values.push("translateY(".concat(translateY, "px)")); } // Rotate should come first before scale to match orientation transform if (isNumber(rotate) && rotate !== 0) { values.push("rotate(".concat(rotate, "deg)")); } if (isNumber(scaleX) && scaleX !== 1) { values.push("scaleX(".concat(scaleX, ")")); } if (isNumber(scaleY) && scaleY !== 1) { values.push("scaleY(".concat(scaleY, ")")); } var transform = values.length ? values.join(' ') : 'none'; return { WebkitTransform: transform, msTransform: transform, transform: transform }; } /** * Get an image name from an image url. * @param {string} url - The target url. * @example * // picture.jpg * getImageNameFromURL('https://domain.com/path/to/picture.jpg?size=1280×960') * @returns {string} A string contains the image name. */ function getImageNameFromURL(url) { return isString(url) ? decodeURIComponent(url.replace(/^.*\//, '').replace(/[?&#].*$/, '')) : ''; } var IS_SAFARI = WINDOW.navigator && /(Macintosh|iPhone|iPod|iPad).*AppleWebKit/i.test(WINDOW.navigator.userAgent); /** * Get an image's natural sizes. * @param {string} image - The target image. * @param {Object} options - The viewer options. * @param {Function} callback - The callback function. * @returns {HTMLImageElement} The new image. */ function getImageNaturalSizes(image, options, callback) { var newImage = document.createElement('img'); // Modern browsers (except Safari) if (image.naturalWidth && !IS_SAFARI) { callback(image.naturalWidth, image.naturalHeight); return newImage; } var body = document.body || document.documentElement; newImage.onload = function () { callback(newImage.width, newImage.height); if (!IS_SAFARI) { body.removeChild(newImage); } }; forEach(options.inheritedAttributes, function (name) { var value = image.getAttribute(name); if (value !== null) { newImage.setAttribute(name, value); } }); newImage.src = image.src; // iOS Safari will convert the image automatically // with its orientation once append it into DOM if (!IS_SAFARI) { newImage.style.cssText = 'left:0;' + 'max-height:none!important;' + 'max-width:none!important;' + 'min-height:0!important;' + 'min-width:0!important;' + 'opacity:0;' + 'position:absolute;' + 'top:0;' + 'z-index:-1;'; body.appendChild(newImage); } return newImage; } /** * Get the related class name of a responsive type number. * @param {string} type - The responsive type. * @returns {string} The related class name. */ function getResponsiveClass(type) { switch (type) { case 2: return CLASS_HIDE_XS_DOWN; case 3: return CLASS_HIDE_SM_DOWN; case 4: return CLASS_HIDE_MD_DOWN; default: return ''; } } /** * Get the max ratio of a group of pointers. * @param {string} pointers - The target pointers. * @returns {number} The result ratio. */ function getMaxZoomRatio(pointers) { var pointers2 = _objectSpread2({}, pointers); var ratios = []; forEach(pointers, function (pointer, pointerId) { delete pointers2[pointerId]; forEach(pointers2, function (pointer2) { var x1 = Math.abs(pointer.startX - pointer2.startX); var y1 = Math.abs(pointer.startY - pointer2.startY); var x2 = Math.abs(pointer.endX - pointer2.endX); var y2 = Math.abs(pointer.endY - pointer2.endY); var z1 = Math.sqrt(x1 * x1 + y1 * y1); var z2 = Math.sqrt(x2 * x2 + y2 * y2); var ratio = (z2 - z1) / z1; ratios.push(ratio); }); }); ratios.sort(function (a, b) { return Math.abs(a) < Math.abs(b); }); return ratios[0]; } /** * Get a pointer from an event object. * @param {Object} event - The target event object. * @param {boolean} endOnly - Indicates if only returns the end point coordinate or not. * @returns {Object} The result pointer contains start and/or end point coordinates. */ function getPointer(_ref2, endOnly) { var pageX = _ref2.pageX, pageY = _ref2.pageY; var end = { endX: pageX, endY: pageY }; return endOnly ? end : _objectSpread2({ timeStamp: Date.now(), startX: pageX, startY: pageY }, end); } /** * Get the center point coordinate of a group of pointers. * @param {Object} pointers - The target pointers. * @returns {Object} The center point coordinate. */ function getPointersCenter(pointers) { var pageX = 0; var pageY = 0; var count = 0; forEach(pointers, function (_ref3) { var startX = _ref3.startX, startY = _ref3.startY; pageX += startX; pageY += startY; count += 1; }); pageX /= count; pageY /= count; return { pageX: pageX, pageY: pageY }; } var render = { render: function render() { this.initContainer(); this.initViewer(); this.initList(); this.renderViewer(); }, initBody: function initBody() { var ownerDocument = this.element.ownerDocument; var body = ownerDocument.body || ownerDocument.documentElement; this.body = body; this.scrollbarWidth = window.innerWidth - ownerDocument.documentElement.clientWidth; this.initialBodyPaddingRight = body.style.paddingRight; this.initialBodyComputedPaddingRight = window.getComputedStyle(body).paddingRight; }, initContainer: function initContainer() { this.containerData = { width: window.innerWidth, height: window.innerHeight }; }, initViewer: function initViewer() { var options = this.options, parent = this.parent; var viewerData; if (options.inline) { viewerData = { width: Math.max(parent.offsetWidth, options.minWidth), height: Math.max(parent.offsetHeight, options.minHeight) }; this.parentData = viewerData; } if (this.fulled || !viewerData) { viewerData = this.containerData; } this.viewerData = assign({}, viewerData); }, renderViewer: function renderViewer() { if (this.options.inline && !this.fulled) { setStyle(this.viewer, this.viewerData); } }, initList: function initList() { var _this = this; var element = this.element, options = this.options, list = this.list; var items = []; // initList may be called in this.update, so should keep idempotent list.innerHTML = ''; forEach(this.images, function (image, index) { var src = image.src; var alt = image.alt || getImageNameFromURL(src); var url = _this.getImageURL(image); if (src || url) { var item = document.createElement('li'); var img = document.createElement('img'); forEach(options.inheritedAttributes, function (name) { var value = image.getAttribute(name); if (value !== null) { img.setAttribute(name, value); } }); img.src = src || url; img.alt = alt; img.setAttribute('data-index', index); img.setAttribute('data-original-url', url || src); img.setAttribute('data-viewer-action', 'view'); img.setAttribute('role', 'button'); item.appendChild(img); list.appendChild(item); items.push(item); } }); this.items = items; forEach(items, function (item) { var image = item.firstElementChild; setData(image, 'filled', true); if (options.loading) { addClass(item, CLASS_LOADING); } addListener(image, EVENT_LOAD, function (event) { if (options.loading) { removeClass(item, CLASS_LOADING); } _this.loadImage(event); }, { once: true }); }); if (options.transition) { addListener(element, EVENT_VIEWED, function () { addClass(list, CLASS_TRANSITION); }, { once: true }); } }, renderList: function renderList(index) { var i = index || this.index; var width = this.items[i].offsetWidth || 30; var outerWidth = width + 1; // 1 pixel of `margin-left` width // Place the active item in the center of the screen setStyle(this.list, assign({ width: outerWidth * this.length }, getTransforms({ translateX: (this.viewerData.width - width) / 2 - outerWidth * i }))); }, resetList: function resetList() { var list = this.list; list.innerHTML = ''; removeClass(list, CLASS_TRANSITION); setStyle(list, getTransforms({ translateX: 0 })); }, initImage: function initImage(done) { var _this2 = this; var options = this.options, image = this.image, viewerData = this.viewerData; var footerHeight = this.footer.offsetHeight; var viewerWidth = viewerData.width; var viewerHeight = Math.max(viewerData.height - footerHeight, footerHeight); var oldImageData = this.imageData || {}; var sizingImage; this.imageInitializing = { abort: function abort() { sizingImage.onload = null; } }; sizingImage = getImageNaturalSizes(image, options, function (naturalWidth, naturalHeight) { var aspectRatio = naturalWidth / naturalHeight; var width = viewerWidth; var height = viewerHeight; _this2.imageInitializing = false; if (viewerHeight * aspectRatio > viewerWidth) { height = viewerWidth / aspectRatio; } else { width = viewerHeight * aspectRatio; } width = Math.min(width * 0.9, naturalWidth); height = Math.min(height * 0.9, naturalHeight); var imageData = { naturalWidth: naturalWidth, naturalHeight: naturalHeight, aspectRatio: aspectRatio, ratio: width / naturalWidth, width: width, height: height, left: (viewerWidth - width) / 2, top: (viewerHeight - height) / 2 }; var initialImageData = assign({}, imageData); if (options.rotatable) { imageData.rotate = oldImageData.rotate || 0; initialImageData.rotate = 0; } if (options.scalable) { imageData.scaleX = oldImageData.scaleX || 1; imageData.scaleY = oldImageData.scaleY || 1; initialImageData.scaleX = 1; initialImageData.scaleY = 1; } _this2.imageData = imageData; _this2.initialImageData = initialImageData; if (done) { done(); } }); }, renderImage: function renderImage(done) { var _this3 = this; var image = this.image, imageData = this.imageData; setStyle(image, assign({ width: imageData.width, height: imageData.height, // XXX: Not to use translateX/Y to avoid image shaking when zooming marginLeft: imageData.left, marginTop: imageData.top }, getTransforms(imageData))); if (done) { if ((this.viewing || this.zooming) && this.options.transition) { var onTransitionEnd = function onTransitionEnd() { _this3.imageRendering = false; done(); }; this.imageRendering = { abort: function abort() { removeListener(image, EVENT_TRANSITION_END, onTransitionEnd); } }; addListener(image, EVENT_TRANSITION_END, onTransitionEnd, { once: true }); } else { done(); } } }, resetImage: function resetImage() { // this.image only defined after viewed if (this.viewing || this.viewed) { var image = this.image; if (this.viewing) { this.viewing.abort(); } image.parentNode.removeChild(image); this.image = null; } } }; var events = { bind: function bind() { var options = this.options, viewer = this.viewer, canvas = this.canvas; var document = this.element.ownerDocument; addListener(viewer, EVENT_CLICK, this.onClick = this.click.bind(this)); addListener(viewer, EVENT_DRAG_START, this.onDragStart = this.dragstart.bind(this)); addListener(canvas, EVENT_POINTER_DOWN, this.onPointerDown = this.pointerdown.bind(this)); addListener(document, EVENT_POINTER_MOVE, this.onPointerMove = this.pointermove.bind(this)); addListener(document, EVENT_POINTER_UP, this.onPointerUp = this.pointerup.bind(this)); addListener(document, EVENT_KEY_DOWN, this.onKeyDown = this.keydown.bind(this)); addListener(window, EVENT_RESIZE, this.onResize = this.resize.bind(this)); if (options.zoomable && options.zoomOnWheel) { addListener(viewer, EVENT_WHEEL, this.onWheel = this.wheel.bind(this), { passive: false, capture: true }); } if (options.toggleOnDblclick) { addListener(canvas, EVENT_DBLCLICK, this.onDblclick = this.dblclick.bind(this)); } }, unbind: function unbind() { var options = this.options, viewer = this.viewer, canvas = this.canvas; var document = this.element.ownerDocument; removeListener(viewer, EVENT_CLICK, this.onClick); removeListener(viewer, EVENT_DRAG_START, this.onDragStart); removeListener(canvas, EVENT_POINTER_DOWN, this.onPointerDown); removeListener(document, EVENT_POINTER_MOVE, this.onPointerMove); removeListener(document, EVENT_POINTER_UP, this.onPointerUp); removeListener(document, EVENT_KEY_DOWN, this.onKeyDown); removeListener(window, EVENT_RESIZE, this.onResize); if (options.zoomable && options.zoomOnWheel) { removeListener(viewer, EVENT_WHEEL, this.onWheel, { passive: false, capture: true }); } if (options.toggleOnDblclick) { removeListener(canvas, EVENT_DBLCLICK, this.onDblclick); } } }; var handlers = { click: function click(event) { var target = event.target; var options = this.options, imageData = this.imageData; var action = getData(target, DATA_ACTION); // Cancel the emulated click when the native click event was triggered. if (IS_TOUCH_DEVICE && event.isTrusted && target === this.canvas) { clearTimeout(this.clickCanvasTimeout); } switch (action) { case 'mix': if (this.played) { this.stop(); } else if (options.inline) { if (this.fulled) { this.exit(); } else { this.full(); } } else { this.hide(); } break; case 'hide': this.hide(); break; case 'view': this.view(getData(target, 'index')); break; case 'zoom-in': this.zoom(0.1, true); break; case 'zoom-out': this.zoom(-0.1, true); break; case 'one-to-one': this.toggle(); break; case 'reset': this.reset(); break; case 'prev': this.prev(options.loop); break; case 'play': this.play(options.fullscreen); break; case 'next': this.next(options.loop); break; case 'rotate-left': this.rotate(-90); break; case 'rotate-right': this.rotate(90); break; case 'flip-horizontal': this.scaleX(-imageData.scaleX || -1); break; case 'flip-vertical': this.scaleY(-imageData.scaleY || -1); break; default: if (this.played) { this.stop(); } } }, dblclick: function dblclick(event) { event.preventDefault(); if (this.viewed && event.target === this.image) { // Cancel the emulated double click when the native dblclick event was triggered. if (IS_TOUCH_DEVICE && event.isTrusted) { clearTimeout(this.doubleClickImageTimeout); } this.toggle(); } }, load: function load() { var _this = this; if (this.timeout) { clearTimeout(this.timeout); this.timeout = false; } var element = this.element, options = this.options, image = this.image, index = this.index, viewerData = this.viewerData; removeClass(image, CLASS_INVISIBLE); if (options.loading) { removeClass(this.canvas, CLASS_LOADING); } image.style.cssText = 'height:0;' + "margin-left:".concat(viewerData.width / 2, "px;") + "margin-top:".concat(viewerData.height / 2, "px;") + 'max-width:none!important;' + 'position:absolute;' + 'width:0;'; this.initImage(function () { toggleClass(image, CLASS_MOVE, options.movable); toggleClass(image, CLASS_TRANSITION, options.transition); _this.renderImage(function () { _this.viewed = true; _this.viewing = false; if (isFunction(options.viewed)) { addListener(element, EVENT_VIEWED, options.viewed, { once: true }); } dispatchEvent(element, EVENT_VIEWED, { originalImage: _this.images[index], index: index, image: image }, { cancelable: false }); }); }); }, loadImage: function loadImage(event) { var image = event.target; var parent = image.parentNode; var parentWidth = parent.offsetWidth || 30; var parentHeight = parent.offsetHeight || 50; var filled = !!getData(image, 'filled'); getImageNaturalSizes(image, this.options, function (naturalWidth, naturalHeight) { var aspectRatio = naturalWidth / naturalHeight; var width = parentWidth; var height = parentHeight; if (parentHeight * aspectRatio > parentWidth) { if (filled) { width = parentHeight * aspectRatio; } else { height = parentWidth / aspectRatio; } } else if (filled) { height = parentWidth / aspectRatio; } else { width = parentHeight * aspectRatio; } setStyle(image, assign({ width: width, height: height }, getTransforms({ translateX: (parentWidth - width) / 2, translateY: (parentHeight - height) / 2 }))); }); }, keydown: function keydown(event) { var options = this.options; if (!this.fulled || !options.keyboard) { return; } switch (event.keyCode || event.which || event.charCode) { // Escape case 27: if (this.played) { this.stop(); } else if (options.inline) { if (this.fulled) { this.exit(); } } else { this.hide(); } break; // Space case 32: if (this.played) { this.stop(); } break; // ArrowLeft case 37: this.prev(options.loop); break; // ArrowUp case 38: // Prevent scroll on Firefox event.preventDefault(); // Zoom in this.zoom(options.zoomRatio, true); break; // ArrowRight case 39: this.next(options.loop); break; // ArrowDown case 40: // Prevent scroll on Firefox event.preventDefault(); // Zoom out this.zoom(-options.zoomRatio, true); break; // Ctrl + 0 case 48: // Fall through // Ctrl + 1 // eslint-disable-next-line no-fallthrough case 49: if (event.ctrlKey) { event.preventDefault(); this.toggle(); } break; } }, dragstart: function dragstart(event) { if (event.target.tagName.toLowerCase() === 'img') { event.preventDefault(); } }, pointerdown: function pointerdown(event) { var options = this.options, pointers = this.pointers; var buttons = event.buttons, button = event.button; if (!this.viewed || this.showing || this.viewing || this.hiding // Handle mouse event and pointer event and ignore touch event || (event.type === 'mousedown' || event.type === 'pointerdown' && event.pointerType === 'mouse') && ( // No primary button (Usually the left button) isNumber(buttons) && buttons !== 1 || isNumber(button) && button !== 0 // Open context menu || event.ctrlKey)) { return; } // Prevent default behaviours as page zooming in touch devices. event.preventDefault(); if (event.changedTouches) { forEach(event.changedTouches, function (touch) { pointers[touch.identifier] = getPointer(touch); }); } else { pointers[event.pointerId || 0] = getPointer(event); } var action = options.movable ? ACTION_MOVE : false; if (options.zoomOnTouch && options.zoomable && Object.keys(pointers).length > 1) { action = ACTION_ZOOM; } else if (options.slideOnTouch && (event.pointerType === 'touch' || event.type === 'touchstart') && this.isSwitchable()) { action = ACTION_SWITCH; } if (options.transition && (action === ACTION_MOVE || action === ACTION_ZOOM)) { removeClass(this.image, CLASS_TRANSITION); } this.action = action; }, pointermove: function pointermove(event) { var pointers = this.pointers, action = this.action; if (!this.viewed || !action) { return; } event.preventDefault(); if (event.changedTouches) { forEach(event.changedTouches, function (touch) { assign(pointers[touch.identifier] || {}, getPointer(touch, true)); }); } else { assign(pointers[event.pointerId || 0] || {}, getPointer(event, true)); } this.change(event); }, pointerup: function pointerup(event) { var _this2 = this; var options = this.options, action = this.action, pointers = this.pointers; var pointer; if (event.changedTouches) { forEach(event.changedTouches, function (touch) { pointer = pointers[touch.identifier]; delete pointers[touch.identifier]; }); } else { pointer = pointers[event.pointerId || 0]; delete pointers[event.pointerId || 0]; } if (!action) { return; } event.preventDefault(); if (options.transition && (action === ACTION_MOVE || action === ACTION_ZOOM)) { addClass(this.image, CLASS_TRANSITION); } this.action = false; // Emulate click and double click in touch devices to support backdrop and image zooming (#210). if (IS_TOUCH_DEVICE && action !== ACTION_ZOOM && pointer && Date.now() - pointer.timeStamp < 500) { clearTimeout(this.clickCanvasTimeout); clearTimeout(this.doubleClickImageTimeout); if (options.toggleOnDblclick && this.viewed && event.target === this.image) { if (this.imageClicked) { this.imageClicked = false; // This timeout will be cleared later when a native dblclick event is triggering this.doubleClickImageTimeout = setTimeout(function () { dispatchEvent(_this2.image, EVENT_DBLCLICK); }, 50); } else { this.imageClicked = true; // The default timing of a double click in Windows is 500 ms this.doubleClickImageTimeout = setTimeout(function () { _this2.imageClicked = false; }, 500); } } else { this.imageClicked = false; if (options.backdrop && options.backdrop !== 'static' && event.target === this.canvas) { // This timeout will be cleared later when a native click event is triggering this.clickCanvasTimeout = setTimeout(function () { dispatchEvent(_this2.canvas, EVENT_CLICK); }, 50); } } } }, resize: function resize() { var _this3 = this; if (!this.isShown || this.hiding) { return; } if (this.fulled) { this.close(); this.initBody(); this.open(); } this.initContainer(); this.initViewer(); this.renderViewer(); this.renderList(); if (this.viewed) { this.initImage(function () { _this3.renderImage(); }); } if (this.played) { if (this.options.fullscreen && this.fulled && !(document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement)) { this.stop(); return; } forEach(this.player.getElementsByTagName('img'), function (image) { addListener(image, EVENT_LOAD, _this3.loadImage.bind(_this3), { once: true }); dispatchEvent(image, EVENT_LOAD); }); } }, wheel: function wheel(event) { var _this4 = this; if (!this.viewed) { return; } event.preventDefault(); // Limit wheel speed to prevent zoom too fast if (this.wheeling) { return; } this.wheeling = true; setTimeout(function () { _this4.wheeling = false; }, 50); var ratio = Number(this.options.zoomRatio) || 0.1; var delta = 1; if (event.deltaY) { delta = event.deltaY > 0 ? 1 : -1; } else if (event.wheelDelta) { delta = -event.wheelDelta / 120; } else if (event.detail) { delta = event.detail > 0 ? 1 : -1; } this.zoom(-delta * ratio, true, event); } }; var methods = { /** Show the viewer (only available in modal mode) * @param {boolean} [immediate=false] - Indicates if show the viewer immediately or not. * @returns {Viewer} this */ show: function show() { var immediate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; var element = this.element, options = this.options; if (options.inline || this.showing || this.isShown || this.showing) { return this; } if (!this.ready) { this.build(); if (this.ready) { this.show(immediate); } return this; } if (isFunction(options.show)) { addListener(element, EVENT_SHOW, options.show, { once: true }); } if (dispatchEvent(element, EVENT_SHOW) === false || !this.ready) { return this; } if (this.hiding) { this.transitioning.abort(); } this.showing = true; this.open(); var viewer = this.viewer; removeClass(viewer, CLASS_HIDE); if (options.transition && !immediate) { var shown = this.shown.bind(this); this.transitioning = { abort: function abort() { removeListener(viewer, EVENT_TRANSITION_END, shown); removeClass(viewer, CLASS_IN); } }; addClass(viewer, CLASS_TRANSITION); // Force reflow to enable CSS3 transition viewer.initialOffsetWidth = viewer.offsetWidth; addListener(viewer, EVENT_TRANSITION_END, shown, { once: true }); addClass(viewer, CLASS_IN); } else { addClass(viewer, CLASS_IN); this.shown(); } return this; }, /** * Hide the viewer (only available in modal mode) * @param {boolean} [immediate=false] - Indicates if hide the viewer immediately or not. * @returns {Viewer} this */ hide: function hide() { var _this = this; var immediate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; var element = this.element, options = this.options; if (options.inline || this.hiding || !(this.isShown || this.showing)) { return this; } if (isFunction(options.hide)) { addListener(element, EVENT_HIDE, options.hide, { once: true }); } if (dispatchEvent(element, EVENT_HIDE) === false) { return this; } if (this.showing) { this.transitioning.abort(); } this.hiding = true; if (this.played) { this.stop(); } else if (this.viewing) { this.viewing.abort(); } var viewer = this.viewer, image = this.image; var hideImmediately = function hideImmediately() { removeClass(viewer, CLASS_IN); _this.hidden(); }; if (options.transition && !immediate) { var onViewerTransitionEnd = function onViewerTransitionEnd(event) { // Ignore all propagating `transitionend` events (#275). if (event && event.target === viewer) { removeListener(viewer, EVENT_TRANSITION_END, onViewerTransitionEnd); _this.hidden(); } }; var onImageTransitionEnd = function onImageTransitionEnd() { // In case of show the viewer by `viewer.show(true)` previously (#407). if (hasClass(viewer, CLASS_TRANSITION)) { addListener(viewer, EVENT_TRANSITION_END, onViewerTransitionEnd); removeClass(viewer, CLASS_IN); } else { hideImmediately(); } }; this.transitioning = { abort: function abort() { if (_this.viewed && hasClass(image, CLASS_TRANSITION)) { removeListener(image, EVENT_TRANSITION_END, onImageTransitionEnd); } else if (hasClass(viewer, CLASS_TRANSITION)) { removeListener(viewer, EVENT_TRANSITION_END, onViewerTransitionEnd); } } }; // In case of hiding the viewer when holding on the image (#255), // note that the `CLASS_TRANSITION` class will be removed on pointer down. if (this.viewed && hasClass(image, CLASS_TRANSITION)) { addListener(image, EVENT_TRANSITION_END, onImageTransitionEnd, { once: true }); this.zoomTo(0, false, false, true); } else { onImageTransitionEnd(); } } else { hideImmediately(); } return this; }, /** * View one of the images with image's index * @param {number} index - The index of the image to view. * @returns {Viewer} this */ view: function view() { var _this2 = this; var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.options.initialViewIndex; index = Number(index) || 0; if (this.hiding || this.played || index < 0 || index >= this.length || this.viewed && index === this.index) { return this; } if (!this.isShown) { this.index = index; return this.show(); } if (this.viewing) { this.viewing.abort(); } var element = this.element, options = this.options, title = this.title, canvas = this.canvas; var item = this.items[index]; var img = item.querySelector('img'); var url = getData(img, 'originalUrl'); var alt = img.getAttribute('alt'); var image = document.createElement('img'); forEach(options.inheritedAttributes, function (name) { var value = img.getAttribute(name); if (value !== null) { image.setAttribute(name, value); } }); image.src = url; image.alt = alt; if (isFunction(options.view)) { addListener(element, EVENT_VIEW, options.view, { once: true }); } if (dispatchEvent(element, EVENT_VIEW, { originalImage: this.images[index], index: index, image: image }) === false || !this.isShown || this.hiding || this.played) { return this; } this.image = image; removeClass(this.items[this.index], CLASS_ACTIVE); addClass(item, CLASS_ACTIVE); this.viewed = false; this.index = index; this.imageData = {}; addClass(image, CLASS_INVISIBLE); if (options.loading) { addClass(canvas, CLASS_LOADING); } canvas.innerHTML = ''; canvas.appendChild(image); // Center current item this.renderList(); // Clear title title.innerHTML = ''; // Generate title after viewed var onViewed = function onViewed() { var imageData = _this2.imageData; var render = Array.isArray(options.title) ? options.title[1] : options.title; title.innerHTML = escapeHTMLEntities(isFunction(render) ? render.call(_this2, image, imageData) : "".concat(alt, " (").concat(imageData.naturalWidth, " \xD7 ").concat(imageData.naturalHeight, ")")); }; var onLoad; addListener(element, EVENT_VIEWED, onViewed, { once: true }); this.viewing = { abort: function abort() { removeListener(element, EVENT_VIEWED, onViewed); if (image.complete) { if (_this2.imageRendering) { _this2.imageRendering.abort(); } else if (_this2.imageInitializing) { _this2.imageInitializing.abort(); } } else { // Cancel download to save bandwidth. image.src = ''; removeListener(image, EVENT_LOAD, onLoad); if (_this2.timeout) { clearTimeout(_this2.timeout); } } } }; if (image.complete) { this.load(); } else { addListener(image, EVENT_LOAD, onLoad = this.load.bind(this), { once: true }); if (this.timeout) { clearTimeout(this.timeout); } // Make the image visible if it fails to load within 1s this.timeout = setTimeout(function () { removeClass(image, CLASS_INVISIBLE); _this2.timeout = false; }, 1000); } return this; }, /** * View the previous image * @param {boolean} [loop=false] - Indicate if view the last one * when it is the first one at present. * @returns {Viewer} this */ prev: function prev() { var loop = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; var index = this.index - 1; if (index < 0) { index = loop ? this.length - 1 : 0; } this.view(index); return this; }, /** * View the next image * @param {boolean} [loop=false] - Indicate if view the first one * when it is the last one at present. * @returns {Viewer} this */ next: function next() { var loop = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; var maxIndex = this.length - 1; var index = this.index + 1; if (index > maxIndex) { index = loop ? 0 : maxIndex; } this.view(index); return this; }, /** * Move the image with relative offsets. * @param {number} offsetX - The relative offset distance on the x-axis. * @param {number} offsetY - The relative offset distance on the y-axis. * @returns {Viewer} this */ move: function move(offsetX, offsetY) { var imageData = this.imageData; this.moveTo(isUndefined(offsetX) ? offsetX : imageData.left + Number(offsetX), isUndefined(offsetY) ? offsetY : imageData.top + Number(offsetY)); return this; }, /** * Move the image to an absolute point. * @param {number} x - The x-axis coordinate. * @param {number} [y=x] - The y-axis coordinate. * @returns {Viewer} this */ moveTo: function moveTo(x) { var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : x; var imageData = this.imageData; x = Number(x); y = Number(y); if (this.viewed && !this.played && this.options.movable) { var changed = false; if (isNumber(x)) { imageData.left = x; changed = true; } if (isNumber(y)) { imageData.top = y; changed = true; } if (changed) { this.renderImage(); } } return this; }, /** * Zoom the image with a relative ratio. * @param {number} ratio - The target ratio. * @param {boolean} [hasTooltip=false] - Indicates if it has a tooltip or not. * @param {Event} [_originalEvent=null] - The original event if any. * @returns {Viewer} this */ zoom: function zoom(ratio) { var hasTooltip = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; var _originalEvent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; var imageData = this.imageData; ratio = Number(ratio); if (ratio < 0) { ratio = 1 / (1 - ratio); } else { ratio = 1 + ratio; } this.zoomTo(imageData.width * ratio / imageData.naturalWidth, hasTooltip, _originalEvent); return this; }, /** * Zoom the image to an absolute ratio. * @param {number} ratio - The target ratio. * @param {boolean} [hasTooltip=false] - Indicates if it has a tooltip or not. * @param {Event} [_originalEvent=null] - The original event if any. * @param {Event} [_zoomable=false] - Indicates if the current zoom is available or not. * @returns {Viewer} this */ zoomTo: function zoomTo(ratio) { var _this3 = this; var hasTooltip = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; var _originalEvent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; var _zoomable = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; var element = this.element, options = this.options, pointers = this.pointers, imageData = this.imageData; var width = imageData.width, height = imageData.height, left = imageData.left, top = imageData.top, naturalWidth = imageData.naturalWidth, naturalHeight = imageData.naturalHeight; ratio = Math.max(0, ratio); if (isNumber(ratio) && this.viewed && !this.played && (_zoomable || options.zoomable)) { if (!_zoomable) { var minZoomRatio = Math.max(0.01, options.minZoomRatio); var maxZoomRatio = Math.min(100, options.maxZoomRatio); ratio = Math.min(Math.max(ratio, minZoomRatio), maxZoomRatio); } if (_originalEvent && options.zoomRatio >= 0.055 && ratio > 0.95 && ratio < 1.05) { ratio = 1; } var newWidth = naturalWidth * ratio; var newHeight = naturalHeight * ratio; var offsetWidth = newWidth - width; var offsetHeight = newHeight - height; var oldRatio = width / naturalWidth; if (isFunction(options.zoom)) { addListener(element, EVENT_ZOOM, options.zoom, { once: true }); } if (dispatchEvent(element, EVENT_ZOOM, { ratio: ratio, oldRatio: oldRatio, originalEvent: _originalEvent }) === false) { return this; } this.zooming = true; if (_originalEvent) { var offset = getOffset(this.viewer); var center = pointers && Object.keys(pointers).length ? getPointersCenter(pointers) : { pageX: _originalEvent.pageX, pageY: _originalEvent.pageY }; // Zoom from the triggering point of the event imageData.left -= offsetWidth * ((center.pageX - offset.left - left) / width); imageData.top -= offsetHeight * ((center.pageY - offset.top - top) / height); } else { // Zoom from the center of the image imageData.left -= offsetWidth / 2; imageData.top -= offsetHeight / 2; } imageData.width = newWidth; imageData.height = newHeight; imageData.ratio = ratio; this.renderImage(function () { _this3.zooming = false; if (isFunction(options.zoomed)) { addListener(element, EVENT_ZOOMED, options.zoomed, { once: true }); } dispatchEvent(element, EVENT_ZOOMED, { ratio: ratio, oldRatio: oldRatio, originalEvent: _originalEvent }, { cancelable: false }); }); if (hasTooltip) { this.tooltip(); } } return this; }, /** * Rotate the image with a relative degree. * @param {number} degree - The rotate degree. * @returns {Viewer} this */ rotate: function rotate(degree) { this.rotateTo((this.imageData.rotate || 0) + Number(degree)); return this; }, /** * Rotate the image to an absolute degree. * @param {number} degree - The rotate degree. * @returns {Viewer} this */ rotateTo: function rotateTo(degree) { var imageData = this.imageData; degree = Number(degree); if (isNumber(degree) && this.viewed && !this.played && this.options.rotatable) { imageData.rotate = degree; this.renderImage(); } return this; }, /** * Scale the image on the x-axis. * @param {number} scaleX - The scale ratio on the x-axis. * @returns {Viewer} this */ scaleX: function scaleX(_scaleX) { this.scale(_scaleX, this.imageData.scaleY); return this; }, /** * Scale the image on the y-axis. * @param {number} scaleY - The scale ratio on the y-axis. * @returns {Viewer} this */ scaleY: function scaleY(_scaleY) { this.scale(this.imageData.scaleX, _scaleY); return this; }, /** * Scale the image. * @param {number} scaleX - The scale ratio on the x-axis. * @param {number} [scaleY=scaleX] - The scale ratio on the y-axis. * @returns {Viewer} this */ scale: function scale(scaleX) { var scaleY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : scaleX; var imageData = this.imageData; scaleX = Number(scaleX); scaleY = Number(scaleY); if (this.viewed && !this.played && this.options.scalable) { var changed = false; if (isNumber(scaleX)) { imageData.scaleX = scaleX; changed = true; } if (isNumber(scaleY)) { imageData.scaleY = scaleY; changed = true; } if (changed) { this.renderImage(); } } return this; }, /** * Play the images * @param {boolean} [fullscreen=false] - Indicate if request fullscreen or not. * @returns {Viewer} this */ play: function play() { var _this4 = this; var fullscreen = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; if (!this.isShown || this.played) { return this; } var element = this.element, options = this.options; if (isFunction(options.play)) { addListener(element, EVENT_PLAY, options.play, { once: true }); } if (dispatchEvent(element, EVENT_PLAY) === false) { return this; } var player = this.player; var onLoad = this.loadImage.bind(this); var list = []; var total = 0; var index = 0; this.played = true; this.onLoadWhenPlay = onLoad; if (fullscreen) { this.requestFullscreen(); } addClass(player, CLASS_SHOW); forEach(this.items, function (item, i) { var img = item.querySelector('img'); var image = document.createElement('img'); image.src = getData(img, 'originalUrl'); image.alt = img.getAttribute('alt'); image.referrerPolicy = img.referrerPolicy; total += 1; addClass(image, CLASS_FADE); toggleClass(image, CLASS_TRANSITION, options.transition); if (hasClass(item, CLASS_ACTIVE)) { addClass(image, CLASS_IN); index = i; } list.push(image); addListener(image, EVENT_LOAD, onLoad, { once: true }); player.appendChild(image); }); if (isNumber(options.interval) && options.interval > 0) { var play = function play() { _this4.playing = setTimeout(function () { removeClass(list[index], CLASS_IN); index += 1; index = index < total ? index : 0; addClass(list[index], CLASS_IN); play(); }, options.interval); }; if (total > 1) { play(); } } return this; }, // Stop play stop: function stop() { var _this5 = this; if (!this.played) { return this; } var element = this.element, options = this.options; if (isFunction(options.stop)) { addListener(element, EVENT_STOP, options.stop, { once: true }); } if (dispatchEvent(element, EVENT_STOP) === false) { return this; } var player = this.player; this.played = false; clearTimeout(this.playing); forEach(player.getElementsByTagName('img'), function (image) { removeListener(image, EVENT_LOAD, _this5.onLoadWhenPlay); }); removeClass(player, CLASS_SHOW); player.innerHTML = ''; this.exitFullscreen(); return this; }, // Enter modal mode (only available in inline mode) full: function full() { var _this6 = this; var options = this.options, viewer = this.viewer, image = this.image, list = this.list; if (!this.isShown || this.played || this.fulled || !options.inline) { return this; } this.fulled = true; this.open(); addClass(this.button, CLASS_FULLSCREEN_EXIT); if (options.transition) { removeClass(list, CLASS_TRANSITION); if (this.viewed) { removeClass(image, CLASS_TRANSITION); } } addClass(viewer, CLASS_FIXED); viewer.setAttribute('style', ''); setStyle(viewer, { zIndex: options.zIndex }); this.initContainer(); this.viewerData = assign({}, this.containerData); this.renderList(); if (this.viewed) { this.initImage(function () { _this6.renderImage(function () { if (options.transition) { setTimeout(function () { addClass(image, CLASS_TRANSITION); addClass(list, CLASS_TRANSITION); }, 0); } }); }); } return this; }, // Exit modal mode (only available in inline mode) exit: function exit() { var _this7 = this; var options = this.options, viewer = this.viewer, image = this.image, list = this.list; if (!this.isShown || this.played || !this.fulled || !options.inline) { return this; } this.fulled = false; this.close(); removeClass(this.button, CLASS_FULLSCREEN_EXIT); if (options.transition) { removeClass(list, CLASS_TRANSITION); if (this.viewed) { removeClass(image, CLASS_TRANSITION); } } removeClass(viewer, CLASS_FIXED); setStyle(viewer, { zIndex: options.zIndexInline }); this.viewerData = assign({}, this.parentData); this.renderViewer(); this.renderList(); if (this.viewed) { this.initImage(function () { _this7.renderImage(function () { if (options.transition) { setTimeout(function () { addClass(image, CLASS_TRANSITION); addClass(list, CLASS_TRANSITION); }, 0); } }); }); } return this; }, // Show the current ratio of the image with percentage tooltip: function tooltip() { var _this8 = this; var options = this.options, tooltipBox = this.tooltipBox, imageData = this.imageData; if (!this.viewed || this.played || !options.tooltip) { return this; } tooltipBox.textContent = "".concat(Math.round(imageData.ratio * 100), "%"); if (!this.tooltipping) { if (options.transition) { if (this.fading) { dispatchEvent(tooltipBox, EVENT_TRANSITION_END); } addClass(tooltipBox, CLASS_SHOW); addClass(tooltipBox, CLASS_FADE); addClass(tooltipBox, CLASS_TRANSITION); // Force reflow to enable CSS3 transition tooltipBox.initialOffsetWidth = tooltipBox.offsetWidth; addClass(tooltipBox, CLASS_IN); } else { addClass(tooltipBox, CLASS_SHOW); } } else { clearTimeout(this.tooltipping); } this.tooltipping = setTimeout(function () { if (options.transition) { addListener(tooltipBox, EVENT_TRANSITION_END, function () { removeClass(tooltipBox, CLASS_SHOW); removeClass(tooltipBox, CLASS_FADE); removeClass(tooltipBox, CLASS_TRANSITION); _this8.fading = false; }, { once: true }); removeClass(tooltipBox, CLASS_IN); _this8.fading = true; } else { removeClass(tooltipBox, CLASS_SHOW); } _this8.tooltipping = false; }, 1000); return this; }, // Toggle the image size between its natural size and initial size toggle: function toggle() { if (this.imageData.ratio === 1) { this.zoomTo(this.initialImageData.ratio, true); } else { this.zoomTo(1, true); } return this; }, // Reset the image to its initial state reset: function reset() { if (this.viewed && !this.played) { this.imageData = assign({}, this.initialImageData); this.renderImage(); } return this; }, // Update viewer when images changed update: function update() { var _this9 = this; var element = this.element, options = this.options, isImg = this.isImg; // Destroy viewer if the target image was deleted if (isImg && !element.parentNode) { return this.destroy(); } var images = []; forEach(isImg ? [element] : element.querySelectorAll('img'), function (image) { if (isFunction(options.filter)) { if (options.filter.call(_this9, image)) { images.push(image); } } else if (_this9.getImageURL(image)) { images.push(image); } }); if (!images.length) { return this; } this.images = images; this.length = images.length; if (this.ready) { var changedIndexes = []; forEach(this.items, function (item, i) { var img = item.querySelector('img'); var image = images[i]; if (image && img) { if (image.src !== img.src // Title changed (#408) || image.alt !== img.alt) { changedIndexes.push(i); } } else { changedIndexes.push(i); } }); setStyle(this.list, { width: 'auto' }); this.initList(); if (this.isShown) { if (this.length) { if (this.viewed) { var changedIndex = changedIndexes.indexOf(this.index); if (changedIndex >= 0) { this.viewed = false; this.view(Math.max(Math.min(this.index - changedIndex, this.length - 1), 0)); } else { // Reactivate the current viewing item after reset the list. addClass(this.items[this.index], CLASS_ACTIVE); } } } else { this.image = null; this.viewed = false; this.index = 0; this.imageData = {}; this.canvas.innerHTML = ''; this.title.innerHTML = ''; } } } else { this.build(); } return this; }, // Destroy the viewer destroy: function destroy() { var element = this.element, options = this.options; if (!element[NAMESPACE]) { return this; } this.destroyed = true; if (this.ready) { if (this.played) { this.stop(); } if (options.inline) { if (this.fulled) { this.exit(); } this.unbind(); } else if (this.isShown) { if (this.viewing) { if (this.imageRendering) { this.imageRendering.abort(); } else if (this.imageInitializing) { this.imageInitializing.abort(); } } if (this.hiding) { this.transitioning.abort(); } this.hidden(); } else if (this.showing) { this.transitioning.abort(); this.hidden(); } this.ready = false; this.viewer.parentNode.removeChild(this.viewer); } else if (options.inline) { if (this.delaying) { this.delaying.abort(); } else if (this.initializing) { this.initializing.abort(); } } if (!options.inline) { removeListener(element, EVENT_CLICK, this.onStart); } element[NAMESPACE] = undefined; return this; } }; var others = { getImageURL: function getImageURL(image) { var url = this.options.url; if (isString(url)) { url = image.getAttribute(url); } else if (isFunction(url)) { url = url.call(this, image); } else { url = ''; } return url; }, open: function open() { var body = this.body; addClass(body, CLASS_OPEN); body.style.paddingRight = "".concat(this.scrollbarWidth + (parseFloat(this.initialBodyComputedPaddingRight) || 0), "px"); }, close: function close() { var body = this.body; removeClass(body, CLASS_OPEN); body.style.paddingRight = this.initialBodyPaddingRight; }, shown: function shown() { var element = this.element, options = this.options; this.fulled = true; this.isShown = true; this.render(); this.bind(); this.showing = false; if (isFunction(options.shown)) { addListener(element, EVENT_SHOWN, options.shown, { once: true }); } if (dispatchEvent(element, EVENT_SHOWN) === false) { return; } if (this.ready && this.isShown && !this.hiding) { this.view(this.index); } }, hidden: function hidden() { var element = this.element, options = this.options; this.fulled = false; this.viewed = false; this.isShown = false; this.close(); this.unbind(); addClass(this.viewer, CLASS_HIDE); this.resetList(); this.resetImage(); this.hiding = false; if (!this.destroyed) { if (isFunction(options.hidden)) { addListener(element, EVENT_HIDDEN, options.hidden, { once: true }); } dispatchEvent(element, EVENT_HIDDEN, null, { cancelable: false }); } }, requestFullscreen: function requestFullscreen() { var document = this.element.ownerDocument; if (this.fulled && !(document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement)) { var documentElement = document.documentElement; // Element.requestFullscreen() if (documentElement.requestFullscreen) { documentElement.requestFullscreen(); } else if (documentElement.webkitRequestFullscreen) { documentElement.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT); } else if (documentElement.mozRequestFullScreen) { documentElement.mozRequestFullScreen(); } else if (documentElement.msRequestFullscreen) { documentElement.msRequestFullscreen(); } } }, exitFullscreen: function exitFullscreen() { var document = this.element.ownerDocument; if (this.fulled && (document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement)) { // Document.exitFullscreen() if (document.exitFullscreen) { document.exitFullscreen(); } else if (document.webkitExitFullscreen) { document.webkitExitFullscreen(); } else if (document.mozCancelFullScreen) { document.mozCancelFullScreen(); } else if (document.msExitFullscreen) { document.msExitFullscreen(); } } }, change: function change(event) { var options = this.options, pointers = this.pointers; var pointer = pointers[Object.keys(pointers)[0]]; var offsetX = pointer.endX - pointer.startX; var offsetY = pointer.endY - pointer.startY; switch (this.action) { // Move the current image case ACTION_MOVE: this.move(offsetX, offsetY); break; // Zoom the current image case ACTION_ZOOM: this.zoom(getMaxZoomRatio(pointers), false, event); break; case ACTION_SWITCH: { this.action = 'switched'; var absoluteOffsetX = Math.abs(offsetX); if (absoluteOffsetX > 1 && absoluteOffsetX > Math.abs(offsetY)) { // Empty `pointers` as `touchend` event will not be fired after swiped in iOS browsers. this.pointers = {}; if (offsetX > 1) { this.prev(options.loop); } else if (offsetX < -1) { this.next(options.loop); } } break; } } // Override forEach(pointers, function (p) { p.startX = p.endX; p.startY = p.endY; }); }, isSwitchable: function isSwitchable() { var imageData = this.imageData, viewerData = this.viewerData; return this.length > 1 && imageData.left >= 0 && imageData.top >= 0 && imageData.width <= viewerData.width && imageData.height <= viewerData.height; } }; var AnotherViewer = WINDOW.Viewer; var Viewer = /*#__PURE__*/function () { /** * Create a new Viewer. * @param {Element} element - The target element for viewing. * @param {Object} [options={}] - The configuration options. */ function Viewer(element) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; _classCallCheck(this, Viewer); if (!element || element.nodeType !== 1) { throw new Error('The first argument is required and must be an element.'); } this.element = element; this.options = assign({}, DEFAULTS, isPlainObject(options) && options); this.action = false; this.fading = false; this.fulled = false; this.hiding = false; this.imageClicked = false; this.imageData = {}; this.index = this.options.initialViewIndex; this.isImg = false; this.isShown = false; this.length = 0; this.played = false; this.playing = false; this.pointers = {}; this.ready = false; this.showing = false; this.timeout = false; this.tooltipping = false; this.viewed = false; this.viewing = false; this.wheeling = false; this.zooming = false; this.init(); } _createClass(Viewer, [{ key: "init", value: function init() { var _this = this; var element = this.element, options = this.options; if (element[NAMESPACE]) { return; } element[NAMESPACE] = this; var isImg = element.tagName.toLowerCase() === 'img'; var images = []; forEach(isImg ? [element] : element.querySelectorAll('img'), function (image) { if (isFunction(options.filter)) { if (options.filter.call(_this, image)) { images.push(image); } } else if (_this.getImageURL(image)) { images.push(image); } }); this.isImg = isImg; this.length = images.length; this.images = images; this.initBody(); // Override `transition` option if it is not supported if (isUndefined(document.createElement(NAMESPACE).style.transition)) { options.transition = false; } if (options.inline) { var count = 0; var progress = function progress() { count += 1; if (count === _this.length) { var timeout; _this.initializing = false; _this.delaying = { abort: function abort() { clearTimeout(timeout); } }; // build asynchronously to keep `this.viewer` is accessible in `ready` event handler. timeout = setTimeout(function () { _this.delaying = false; _this.build(); }, 0); } }; this.initializing = { abort: function abort() { forEach(images, function (image) { if (!image.complete) { removeListener(image, EVENT_LOAD, progress); } }); } }; forEach(images, function (image) { if (image.complete) { progress(); } else { addListener(image, EVENT_LOAD, progress, { once: true }); } }); } else { addListener(element, EVENT_CLICK, this.onStart = function (_ref) { var target = _ref.target; if (target.tagName.toLowerCase() === 'img' && (!isFunction(options.filter) || options.filter.call(_this, target))) { _this.view(_this.images.indexOf(target)); } }); } } }, { key: "build", value: function build() { if (this.ready) { return; } var element = this.element, options = this.options; var parent = element.parentNode; var template = document.createElement('div'); template.innerHTML = TEMPLATE; var viewer = template.querySelector(".".concat(NAMESPACE, "-container")); var title = viewer.querySelector(".".concat(NAMESPACE, "-title")); var toolbar = viewer.querySelector(".".concat(NAMESPACE, "-toolbar")); var navbar = viewer.querySelector(".".concat(NAMESPACE, "-navbar")); var button = viewer.querySelector(".".concat(NAMESPACE, "-button")); var canvas = viewer.querySelector(".".concat(NAMESPACE, "-canvas")); this.parent = parent; this.viewer = viewer; this.title = title; this.toolbar = toolbar; this.navbar = navbar; this.button = button; this.canvas = canvas; this.footer = viewer.querySelector(".".concat(NAMESPACE, "-footer")); this.tooltipBox = viewer.querySelector(".".concat(NAMESPACE, "-tooltip")); this.player = viewer.querySelector(".".concat(NAMESPACE, "-player")); this.list = viewer.querySelector(".".concat(NAMESPACE, "-list")); addClass(title, !options.title ? CLASS_HIDE : getResponsiveClass(Array.isArray(options.title) ? options.title[0] : options.title)); addClass(navbar, !options.navbar ? CLASS_HIDE : getResponsiveClass(options.navbar)); toggleClass(button, CLASS_HIDE, !options.button); if (options.backdrop) { addClass(viewer, "".concat(NAMESPACE, "-backdrop")); if (!options.inline && options.backdrop !== 'static') { setData(canvas, DATA_ACTION, 'hide'); } } if (isString(options.className) && options.className) { // In case there are multiple class names options.className.split(REGEXP_SPACES).forEach(function (className) { addClass(viewer, className); }); } if (options.toolbar) { var list = document.createElement('ul'); var custom = isPlainObject(options.toolbar); var zoomButtons = BUTTONS.slice(0, 3); var rotateButtons = BUTTONS.slice(7, 9); var scaleButtons = BUTTONS.slice(9); if (!custom) { addClass(toolbar, getResponsiveClass(options.toolbar)); } forEach(custom ? options.toolbar : BUTTONS, function (value, index) { var deep = custom && isPlainObject(value); var name = custom ? hyphenate(index) : value; var show = deep && !isUndefined(value.show) ? value.show : value; if (!show || !options.zoomable && zoomButtons.indexOf(name) !== -1 || !options.rotatable && rotateButtons.indexOf(name) !== -1 || !options.scalable && scaleButtons.indexOf(name) !== -1) { return; } var size = deep && !isUndefined(value.size) ? value.size : value; var click = deep && !isUndefined(value.click) ? value.click : value; var item = document.createElement('li'); item.setAttribute('role', 'button'); addClass(item, "".concat(NAMESPACE, "-").concat(name)); if (!isFunction(click)) { setData(item, DATA_ACTION, name); } if (isNumber(show)) { addClass(item, getResponsiveClass(show)); } if (['small', 'large'].indexOf(size) !== -1) { addClass(item, "".concat(NAMESPACE, "-").concat(size)); } else if (name === 'play') { addClass(item, "".concat(NAMESPACE, "-large")); } if (isFunction(click)) { addListener(item, EVENT_CLICK, click); } list.appendChild(item); }); toolbar.appendChild(list); } else { addClass(toolbar, CLASS_HIDE); } if (!options.rotatable) { var rotates = toolbar.querySelectorAll('li[class*="rotate"]'); addClass(rotates, CLASS_INVISIBLE); forEach(rotates, function (rotate) { toolbar.appendChild(rotate); }); } if (options.inline) { addClass(button, CLASS_FULLSCREEN); setStyle(viewer, { zIndex: options.zIndexInline }); if (window.getComputedStyle(parent).position === 'static') { setStyle(parent, { position: 'relative' }); } parent.insertBefore(viewer, element.nextSibling); } else { addClass(button, CLASS_CLOSE); addClass(viewer, CLASS_FIXED); addClass(viewer, CLASS_FADE); addClass(viewer, CLASS_HIDE); setStyle(viewer, { zIndex: options.zIndex }); var container = options.container; if (isString(container)) { container = element.ownerDocument.querySelector(container); } if (!container) { container = this.body; } container.appendChild(viewer); } if (options.inline) { this.render(); this.bind(); this.isShown = true; } this.ready = true; if (isFunction(options.ready)) { addListener(element, EVENT_READY, options.ready, { once: true }); } if (dispatchEvent(element, EVENT_READY) === false) { this.ready = false; return; } if (this.ready && options.inline) { this.view(this.index); } } /** * Get the no conflict viewer class. * @returns {Viewer} The viewer class. */ }], [{ key: "noConflict", value: function noConflict() { window.Viewer = AnotherViewer; return Viewer; } /** * Change the default options. * @param {Object} options - The new default options. */ }, { key: "setDefaults", value: function setDefaults(options) { assign(DEFAULTS, isPlainObject(options) && options); } }]); return Viewer; }(); assign(Viewer.prototype, render, events, handlers, methods, others); export default Viewer; ================================================ FILE: public/assets/luna/js/viewerjs/viewer.js ================================================ /*! * Viewer.js v1.7.1 * https://fengyuanchen.github.io/viewerjs * * Copyright 2015-present Chen Fengyuan * Released under the MIT license * * Date: 2020-09-29T13:45:20.981Z */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Viewer = factory()); }(this, (function () { 'use strict'; function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function (obj) { return typeof obj; }; } else { _typeof = function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } function _objectSpread2(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } var DEFAULTS = { /** * Enable a modal backdrop, specify `static` for a backdrop * which doesn't close the modal on click. * @type {boolean} */ backdrop: true, /** * Show the button on the top-right of the viewer. * @type {boolean} */ button: true, /** * Show the navbar. * @type {boolean | number} */ navbar: true, /** * Specify the visibility and the content of the title. * @type {boolean | number | Function | Array} */ title: true, /** * Show the toolbar. * @type {boolean | number | Object} */ toolbar: true, /** * Custom class name(s) to add to the viewer's root element. * @type {string} */ className: '', /** * Define where to put the viewer in modal mode. * @type {string | Element} */ container: 'body', /** * Filter the images for viewing. Return true if the image is viewable. * @type {Function} */ filter: null, /** * Enable to request fullscreen when play. * @type {boolean} */ fullscreen: true, /** * Define the extra attributes to inherit from the original image. * @type {Array} */ inheritedAttributes: ['crossOrigin', 'decoding', 'isMap', 'loading', 'referrerPolicy', 'sizes', 'srcset', 'useMap'], /** * Define the initial index of image for viewing. * @type {number} */ initialViewIndex: 0, /** * Enable inline mode. * @type {boolean} */ inline: false, /** * The amount of time to delay between automatically cycling an image when playing. * @type {number} */ interval: 5000, /** * Enable keyboard support. * @type {boolean} */ keyboard: true, /** * Indicate if show a loading spinner when load image or not. * @type {boolean} */ loading: true, /** * Indicate if enable loop viewing or not. * @type {boolean} */ loop: true, /** * Min width of the viewer in inline mode. * @type {number} */ minWidth: 200, /** * Min height of the viewer in inline mode. * @type {number} */ minHeight: 100, /** * Enable to move the image. * @type {boolean} */ movable: true, /** * Enable to rotate the image. * @type {boolean} */ rotatable: true, /** * Enable to scale the image. * @type {boolean} */ scalable: true, /** * Enable to zoom the image. * @type {boolean} */ zoomable: true, /** * Enable to zoom the current image by dragging on the touch screen. * @type {boolean} */ zoomOnTouch: true, /** * Enable to zoom the image by wheeling mouse. * @type {boolean} */ zoomOnWheel: true, /** * Enable to slide to the next or previous image by swiping on the touch screen. * @type {boolean} */ slideOnTouch: true, /** * Indicate if toggle the image size between its natural size * and initial size when double click on the image or not. * @type {boolean} */ toggleOnDblclick: true, /** * Show the tooltip with image ratio (percentage) when zoom in or zoom out. * @type {boolean} */ tooltip: true, /** * Enable CSS3 Transition for some special elements. * @type {boolean} */ transition: true, /** * Define the CSS `z-index` value of viewer in modal mode. * @type {number} */ zIndex: 2015, /** * Define the CSS `z-index` value of viewer in inline mode. * @type {number} */ zIndexInline: 0, /** * Define the ratio when zoom the image by wheeling mouse. * @type {number} */ zoomRatio: 0.1, /** * Define the min ratio of the image when zoom out. * @type {number} */ minZoomRatio: 0.01, /** * Define the max ratio of the image when zoom in. * @type {number} */ maxZoomRatio: 100, /** * Define where to get the original image URL for viewing. * @type {string | Function} */ url: 'src', /** * Event shortcuts. * @type {Function} */ ready: null, show: null, shown: null, hide: null, hidden: null, view: null, viewed: null, zoom: null, zoomed: null, play: null, stop: null }; var TEMPLATE = '
' + '
' + '' + '
' + '
' + '
' + '
'; var IS_BROWSER = typeof window !== 'undefined' && typeof window.document !== 'undefined'; var WINDOW = IS_BROWSER ? window : {}; var IS_TOUCH_DEVICE = IS_BROWSER && WINDOW.document.documentElement ? 'ontouchstart' in WINDOW.document.documentElement : false; var HAS_POINTER_EVENT = IS_BROWSER ? 'PointerEvent' in WINDOW : false; var NAMESPACE = 'viewer'; // Actions var ACTION_MOVE = 'move'; var ACTION_SWITCH = 'switch'; var ACTION_ZOOM = 'zoom'; // Classes var CLASS_ACTIVE = "".concat(NAMESPACE, "-active"); var CLASS_CLOSE = "".concat(NAMESPACE, "-close"); var CLASS_FADE = "".concat(NAMESPACE, "-fade"); var CLASS_FIXED = "".concat(NAMESPACE, "-fixed"); var CLASS_FULLSCREEN = "".concat(NAMESPACE, "-fullscreen"); var CLASS_FULLSCREEN_EXIT = "".concat(NAMESPACE, "-fullscreen-exit"); var CLASS_HIDE = "".concat(NAMESPACE, "-hide"); var CLASS_HIDE_MD_DOWN = "".concat(NAMESPACE, "-hide-md-down"); var CLASS_HIDE_SM_DOWN = "".concat(NAMESPACE, "-hide-sm-down"); var CLASS_HIDE_XS_DOWN = "".concat(NAMESPACE, "-hide-xs-down"); var CLASS_IN = "".concat(NAMESPACE, "-in"); var CLASS_INVISIBLE = "".concat(NAMESPACE, "-invisible"); var CLASS_LOADING = "".concat(NAMESPACE, "-loading"); var CLASS_MOVE = "".concat(NAMESPACE, "-move"); var CLASS_OPEN = "".concat(NAMESPACE, "-open"); var CLASS_SHOW = "".concat(NAMESPACE, "-show"); var CLASS_TRANSITION = "".concat(NAMESPACE, "-transition"); // Events var EVENT_CLICK = 'click'; var EVENT_DBLCLICK = 'dblclick'; var EVENT_DRAG_START = 'dragstart'; var EVENT_HIDDEN = 'hidden'; var EVENT_HIDE = 'hide'; var EVENT_KEY_DOWN = 'keydown'; var EVENT_LOAD = 'load'; var EVENT_TOUCH_START = IS_TOUCH_DEVICE ? 'touchstart' : 'mousedown'; var EVENT_TOUCH_MOVE = IS_TOUCH_DEVICE ? 'touchmove' : 'mousemove'; var EVENT_TOUCH_END = IS_TOUCH_DEVICE ? 'touchend touchcancel' : 'mouseup'; var EVENT_POINTER_DOWN = HAS_POINTER_EVENT ? 'pointerdown' : EVENT_TOUCH_START; var EVENT_POINTER_MOVE = HAS_POINTER_EVENT ? 'pointermove' : EVENT_TOUCH_MOVE; var EVENT_POINTER_UP = HAS_POINTER_EVENT ? 'pointerup pointercancel' : EVENT_TOUCH_END; var EVENT_READY = 'ready'; var EVENT_RESIZE = 'resize'; var EVENT_SHOW = 'show'; var EVENT_SHOWN = 'shown'; var EVENT_TRANSITION_END = 'transitionend'; var EVENT_VIEW = 'view'; var EVENT_VIEWED = 'viewed'; var EVENT_WHEEL = 'wheel'; var EVENT_ZOOM = 'zoom'; var EVENT_ZOOMED = 'zoomed'; var EVENT_PLAY = 'play'; var EVENT_STOP = 'stop'; // Data keys var DATA_ACTION = "".concat(NAMESPACE, "Action"); // RegExps var REGEXP_SPACES = /\s\s*/; // Misc var BUTTONS = ['zoom-in', 'zoom-out', 'one-to-one', 'reset', 'prev', 'play', 'next', 'rotate-left', 'rotate-right', 'flip-horizontal', 'flip-vertical']; /** * Check if the given value is a string. * @param {*} value - The value to check. * @returns {boolean} Returns `true` if the given value is a string, else `false`. */ function isString(value) { return typeof value === 'string'; } /** * Check if the given value is not a number. */ var isNaN = Number.isNaN || WINDOW.isNaN; /** * Check if the given value is a number. * @param {*} value - The value to check. * @returns {boolean} Returns `true` if the given value is a number, else `false`. */ function isNumber(value) { return typeof value === 'number' && !isNaN(value); } /** * Check if the given value is undefined. * @param {*} value - The value to check. * @returns {boolean} Returns `true` if the given value is undefined, else `false`. */ function isUndefined(value) { return typeof value === 'undefined'; } /** * Check if the given value is an object. * @param {*} value - The value to check. * @returns {boolean} Returns `true` if the given value is an object, else `false`. */ function isObject(value) { return _typeof(value) === 'object' && value !== null; } var hasOwnProperty = Object.prototype.hasOwnProperty; /** * Check if the given value is a plain object. * @param {*} value - The value to check. * @returns {boolean} Returns `true` if the given value is a plain object, else `false`. */ function isPlainObject(value) { if (!isObject(value)) { return false; } try { var _constructor = value.constructor; var prototype = _constructor.prototype; return _constructor && prototype && hasOwnProperty.call(prototype, 'isPrototypeOf'); } catch (error) { return false; } } /** * Check if the given value is a function. * @param {*} value - The value to check. * @returns {boolean} Returns `true` if the given value is a function, else `false`. */ function isFunction(value) { return typeof value === 'function'; } /** * Iterate the given data. * @param {*} data - The data to iterate. * @param {Function} callback - The process function for each element. * @returns {*} The original data. */ function forEach(data, callback) { if (data && isFunction(callback)) { if (Array.isArray(data) || isNumber(data.length) /* array-like */ ) { var length = data.length; var i; for (i = 0; i < length; i += 1) { if (callback.call(data, data[i], i, data) === false) { break; } } } else if (isObject(data)) { Object.keys(data).forEach(function (key) { callback.call(data, data[key], key, data); }); } } return data; } /** * Extend the given object. * @param {*} obj - The object to be extended. * @param {*} args - The rest objects which will be merged to the first object. * @returns {Object} The extended object. */ var assign = Object.assign || function assign(obj) { for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { args[_key - 1] = arguments[_key]; } if (isObject(obj) && args.length > 0) { args.forEach(function (arg) { if (isObject(arg)) { Object.keys(arg).forEach(function (key) { obj[key] = arg[key]; }); } }); } return obj; }; var REGEXP_SUFFIX = /^(?:width|height|left|top|marginLeft|marginTop)$/; /** * Apply styles to the given element. * @param {Element} element - The target element. * @param {Object} styles - The styles for applying. */ function setStyle(element, styles) { var style = element.style; forEach(styles, function (value, property) { if (REGEXP_SUFFIX.test(property) && isNumber(value)) { value += 'px'; } style[property] = value; }); } /** * Escape a string for using in HTML. * @param {String} value - The string to escape. * @returns {String} Returns the escaped string. */ function escapeHTMLEntities(value) { return isString(value) ? value.replace(/&(?!amp;|quot;|#39;|lt;|gt;)/g, '&').replace(/"/g, '"').replace(/'/g, ''').replace(//g, '>') : value; } /** * Check if the given element has a special class. * @param {Element} element - The element to check. * @param {string} value - The class to search. * @returns {boolean} Returns `true` if the special class was found. */ function hasClass(element, value) { if (!element || !value) { return false; } return element.classList ? element.classList.contains(value) : element.className.indexOf(value) > -1; } /** * Add classes to the given element. * @param {Element} element - The target element. * @param {string} value - The classes to be added. */ function addClass(element, value) { if (!element || !value) { return; } if (isNumber(element.length)) { forEach(element, function (elem) { addClass(elem, value); }); return; } if (element.classList) { element.classList.add(value); return; } var className = element.className.trim(); if (!className) { element.className = value; } else if (className.indexOf(value) < 0) { element.className = "".concat(className, " ").concat(value); } } /** * Remove classes from the given element. * @param {Element} element - The target element. * @param {string} value - The classes to be removed. */ function removeClass(element, value) { if (!element || !value) { return; } if (isNumber(element.length)) { forEach(element, function (elem) { removeClass(elem, value); }); return; } if (element.classList) { element.classList.remove(value); return; } if (element.className.indexOf(value) >= 0) { element.className = element.className.replace(value, ''); } } /** * Add or remove classes from the given element. * @param {Element} element - The target element. * @param {string} value - The classes to be toggled. * @param {boolean} added - Add only. */ function toggleClass(element, value, added) { if (!value) { return; } if (isNumber(element.length)) { forEach(element, function (elem) { toggleClass(elem, value, added); }); return; } // IE10-11 doesn't support the second parameter of `classList.toggle` if (added) { addClass(element, value); } else { removeClass(element, value); } } var REGEXP_HYPHENATE = /([a-z\d])([A-Z])/g; /** * Transform the given string from camelCase to kebab-case * @param {string} value - The value to transform. * @returns {string} The transformed value. */ function hyphenate(value) { return value.replace(REGEXP_HYPHENATE, '$1-$2').toLowerCase(); } /** * Get data from the given element. * @param {Element} element - The target element. * @param {string} name - The data key to get. * @returns {string} The data value. */ function getData(element, name) { if (isObject(element[name])) { return element[name]; } if (element.dataset) { return element.dataset[name]; } return element.getAttribute("data-".concat(hyphenate(name))); } /** * Set data to the given element. * @param {Element} element - The target element. * @param {string} name - The data key to set. * @param {string} data - The data value. */ function setData(element, name, data) { if (isObject(data)) { element[name] = data; } else if (element.dataset) { element.dataset[name] = data; } else { element.setAttribute("data-".concat(hyphenate(name)), data); } } var onceSupported = function () { var supported = false; if (IS_BROWSER) { var once = false; var listener = function listener() {}; var options = Object.defineProperty({}, 'once', { get: function get() { supported = true; return once; }, /** * This setter can fix a `TypeError` in strict mode * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Getter_only} * @param {boolean} value - The value to set */ set: function set(value) { once = value; } }); WINDOW.addEventListener('test', listener, options); WINDOW.removeEventListener('test', listener, options); } return supported; }(); /** * Remove event listener from the target element. * @param {Element} element - The event target. * @param {string} type - The event type(s). * @param {Function} listener - The event listener. * @param {Object} options - The event options. */ function removeListener(element, type, listener) { var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; var handler = listener; type.trim().split(REGEXP_SPACES).forEach(function (event) { if (!onceSupported) { var listeners = element.listeners; if (listeners && listeners[event] && listeners[event][listener]) { handler = listeners[event][listener]; delete listeners[event][listener]; if (Object.keys(listeners[event]).length === 0) { delete listeners[event]; } if (Object.keys(listeners).length === 0) { delete element.listeners; } } } element.removeEventListener(event, handler, options); }); } /** * Add event listener to the target element. * @param {Element} element - The event target. * @param {string} type - The event type(s). * @param {Function} listener - The event listener. * @param {Object} options - The event options. */ function addListener(element, type, listener) { var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; var _handler = listener; type.trim().split(REGEXP_SPACES).forEach(function (event) { if (options.once && !onceSupported) { var _element$listeners = element.listeners, listeners = _element$listeners === void 0 ? {} : _element$listeners; _handler = function handler() { delete listeners[event][listener]; element.removeEventListener(event, _handler, options); for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { args[_key2] = arguments[_key2]; } listener.apply(element, args); }; if (!listeners[event]) { listeners[event] = {}; } if (listeners[event][listener]) { element.removeEventListener(event, listeners[event][listener], options); } listeners[event][listener] = _handler; element.listeners = listeners; } element.addEventListener(event, _handler, options); }); } /** * Dispatch event on the target element. * @param {Element} element - The event target. * @param {string} type - The event type(s). * @param {Object} data - The additional event data. * @param {Object} options - The additional event options. * @returns {boolean} Indicate if the event is default prevented or not. */ function dispatchEvent(element, type, data, options) { var event; // Event and CustomEvent on IE9-11 are global objects, not constructors if (isFunction(Event) && isFunction(CustomEvent)) { event = new CustomEvent(type, _objectSpread2({ bubbles: true, cancelable: true, detail: data }, options)); } else { event = document.createEvent('CustomEvent'); event.initCustomEvent(type, true, true, data); } return element.dispatchEvent(event); } /** * Get the offset base on the document. * @param {Element} element - The target element. * @returns {Object} The offset data. */ function getOffset(element) { var box = element.getBoundingClientRect(); return { left: box.left + (window.pageXOffset - document.documentElement.clientLeft), top: box.top + (window.pageYOffset - document.documentElement.clientTop) }; } /** * Get transforms base on the given object. * @param {Object} obj - The target object. * @returns {string} A string contains transform values. */ function getTransforms(_ref) { var rotate = _ref.rotate, scaleX = _ref.scaleX, scaleY = _ref.scaleY, translateX = _ref.translateX, translateY = _ref.translateY; var values = []; if (isNumber(translateX) && translateX !== 0) { values.push("translateX(".concat(translateX, "px)")); } if (isNumber(translateY) && translateY !== 0) { values.push("translateY(".concat(translateY, "px)")); } // Rotate should come first before scale to match orientation transform if (isNumber(rotate) && rotate !== 0) { values.push("rotate(".concat(rotate, "deg)")); } if (isNumber(scaleX) && scaleX !== 1) { values.push("scaleX(".concat(scaleX, ")")); } if (isNumber(scaleY) && scaleY !== 1) { values.push("scaleY(".concat(scaleY, ")")); } var transform = values.length ? values.join(' ') : 'none'; return { WebkitTransform: transform, msTransform: transform, transform: transform }; } /** * Get an image name from an image url. * @param {string} url - The target url. * @example * // picture.jpg * getImageNameFromURL('https://domain.com/path/to/picture.jpg?size=1280×960') * @returns {string} A string contains the image name. */ function getImageNameFromURL(url) { return isString(url) ? decodeURIComponent(url.replace(/^.*\//, '').replace(/[?&#].*$/, '')) : ''; } var IS_SAFARI = WINDOW.navigator && /(Macintosh|iPhone|iPod|iPad).*AppleWebKit/i.test(WINDOW.navigator.userAgent); /** * Get an image's natural sizes. * @param {string} image - The target image. * @param {Object} options - The viewer options. * @param {Function} callback - The callback function. * @returns {HTMLImageElement} The new image. */ function getImageNaturalSizes(image, options, callback) { var newImage = document.createElement('img'); // Modern browsers (except Safari) if (image.naturalWidth && !IS_SAFARI) { callback(image.naturalWidth, image.naturalHeight); return newImage; } var body = document.body || document.documentElement; newImage.onload = function () { callback(newImage.width, newImage.height); if (!IS_SAFARI) { body.removeChild(newImage); } }; forEach(options.inheritedAttributes, function (name) { var value = image.getAttribute(name); if (value !== null) { newImage.setAttribute(name, value); } }); newImage.src = image.src; // iOS Safari will convert the image automatically // with its orientation once append it into DOM if (!IS_SAFARI) { newImage.style.cssText = 'left:0;' + 'max-height:none!important;' + 'max-width:none!important;' + 'min-height:0!important;' + 'min-width:0!important;' + 'opacity:0;' + 'position:absolute;' + 'top:0;' + 'z-index:-1;'; body.appendChild(newImage); } return newImage; } /** * Get the related class name of a responsive type number. * @param {string} type - The responsive type. * @returns {string} The related class name. */ function getResponsiveClass(type) { switch (type) { case 2: return CLASS_HIDE_XS_DOWN; case 3: return CLASS_HIDE_SM_DOWN; case 4: return CLASS_HIDE_MD_DOWN; default: return ''; } } /** * Get the max ratio of a group of pointers. * @param {string} pointers - The target pointers. * @returns {number} The result ratio. */ function getMaxZoomRatio(pointers) { var pointers2 = _objectSpread2({}, pointers); var ratios = []; forEach(pointers, function (pointer, pointerId) { delete pointers2[pointerId]; forEach(pointers2, function (pointer2) { var x1 = Math.abs(pointer.startX - pointer2.startX); var y1 = Math.abs(pointer.startY - pointer2.startY); var x2 = Math.abs(pointer.endX - pointer2.endX); var y2 = Math.abs(pointer.endY - pointer2.endY); var z1 = Math.sqrt(x1 * x1 + y1 * y1); var z2 = Math.sqrt(x2 * x2 + y2 * y2); var ratio = (z2 - z1) / z1; ratios.push(ratio); }); }); ratios.sort(function (a, b) { return Math.abs(a) < Math.abs(b); }); return ratios[0]; } /** * Get a pointer from an event object. * @param {Object} event - The target event object. * @param {boolean} endOnly - Indicates if only returns the end point coordinate or not. * @returns {Object} The result pointer contains start and/or end point coordinates. */ function getPointer(_ref2, endOnly) { var pageX = _ref2.pageX, pageY = _ref2.pageY; var end = { endX: pageX, endY: pageY }; return endOnly ? end : _objectSpread2({ timeStamp: Date.now(), startX: pageX, startY: pageY }, end); } /** * Get the center point coordinate of a group of pointers. * @param {Object} pointers - The target pointers. * @returns {Object} The center point coordinate. */ function getPointersCenter(pointers) { var pageX = 0; var pageY = 0; var count = 0; forEach(pointers, function (_ref3) { var startX = _ref3.startX, startY = _ref3.startY; pageX += startX; pageY += startY; count += 1; }); pageX /= count; pageY /= count; return { pageX: pageX, pageY: pageY }; } var render = { render: function render() { this.initContainer(); this.initViewer(); this.initList(); this.renderViewer(); }, initBody: function initBody() { var ownerDocument = this.element.ownerDocument; var body = ownerDocument.body || ownerDocument.documentElement; this.body = body; this.scrollbarWidth = window.innerWidth - ownerDocument.documentElement.clientWidth; this.initialBodyPaddingRight = body.style.paddingRight; this.initialBodyComputedPaddingRight = window.getComputedStyle(body).paddingRight; }, initContainer: function initContainer() { this.containerData = { width: window.innerWidth, height: window.innerHeight }; }, initViewer: function initViewer() { var options = this.options, parent = this.parent; var viewerData; if (options.inline) { viewerData = { width: Math.max(parent.offsetWidth, options.minWidth), height: Math.max(parent.offsetHeight, options.minHeight) }; this.parentData = viewerData; } if (this.fulled || !viewerData) { viewerData = this.containerData; } this.viewerData = assign({}, viewerData); }, renderViewer: function renderViewer() { if (this.options.inline && !this.fulled) { setStyle(this.viewer, this.viewerData); } }, initList: function initList() { var _this = this; var element = this.element, options = this.options, list = this.list; var items = []; // initList may be called in this.update, so should keep idempotent list.innerHTML = ''; forEach(this.images, function (image, index) { var src = image.src; var alt = image.alt || getImageNameFromURL(src); var url = _this.getImageURL(image); if (src || url) { var item = document.createElement('li'); var img = document.createElement('img'); forEach(options.inheritedAttributes, function (name) { var value = image.getAttribute(name); if (value !== null) { img.setAttribute(name, value); } }); img.src = src || url; img.alt = alt; img.setAttribute('data-index', index); img.setAttribute('data-original-url', url || src); img.setAttribute('data-viewer-action', 'view'); img.setAttribute('role', 'button'); item.appendChild(img); list.appendChild(item); items.push(item); } }); this.items = items; forEach(items, function (item) { var image = item.firstElementChild; setData(image, 'filled', true); if (options.loading) { addClass(item, CLASS_LOADING); } addListener(image, EVENT_LOAD, function (event) { if (options.loading) { removeClass(item, CLASS_LOADING); } _this.loadImage(event); }, { once: true }); }); if (options.transition) { addListener(element, EVENT_VIEWED, function () { addClass(list, CLASS_TRANSITION); }, { once: true }); } }, renderList: function renderList(index) { var i = index || this.index; var width = this.items[i].offsetWidth || 30; var outerWidth = width + 1; // 1 pixel of `margin-left` width // Place the active item in the center of the screen setStyle(this.list, assign({ width: outerWidth * this.length }, getTransforms({ translateX: (this.viewerData.width - width) / 2 - outerWidth * i }))); }, resetList: function resetList() { var list = this.list; list.innerHTML = ''; removeClass(list, CLASS_TRANSITION); setStyle(list, getTransforms({ translateX: 0 })); }, initImage: function initImage(done) { var _this2 = this; var options = this.options, image = this.image, viewerData = this.viewerData; var footerHeight = this.footer.offsetHeight; var viewerWidth = viewerData.width; var viewerHeight = Math.max(viewerData.height - footerHeight, footerHeight); var oldImageData = this.imageData || {}; var sizingImage; this.imageInitializing = { abort: function abort() { sizingImage.onload = null; } }; sizingImage = getImageNaturalSizes(image, options, function (naturalWidth, naturalHeight) { var aspectRatio = naturalWidth / naturalHeight; var width = viewerWidth; var height = viewerHeight; _this2.imageInitializing = false; if (viewerHeight * aspectRatio > viewerWidth) { height = viewerWidth / aspectRatio; } else { width = viewerHeight * aspectRatio; } width = Math.min(width * 0.9, naturalWidth); height = Math.min(height * 0.9, naturalHeight); var imageData = { naturalWidth: naturalWidth, naturalHeight: naturalHeight, aspectRatio: aspectRatio, ratio: width / naturalWidth, width: width, height: height, left: (viewerWidth - width) / 2, top: (viewerHeight - height) / 2 }; var initialImageData = assign({}, imageData); if (options.rotatable) { imageData.rotate = oldImageData.rotate || 0; initialImageData.rotate = 0; } if (options.scalable) { imageData.scaleX = oldImageData.scaleX || 1; imageData.scaleY = oldImageData.scaleY || 1; initialImageData.scaleX = 1; initialImageData.scaleY = 1; } _this2.imageData = imageData; _this2.initialImageData = initialImageData; if (done) { done(); } }); }, renderImage: function renderImage(done) { var _this3 = this; var image = this.image, imageData = this.imageData; setStyle(image, assign({ width: imageData.width, height: imageData.height, // XXX: Not to use translateX/Y to avoid image shaking when zooming marginLeft: imageData.left, marginTop: imageData.top }, getTransforms(imageData))); if (done) { if ((this.viewing || this.zooming) && this.options.transition) { var onTransitionEnd = function onTransitionEnd() { _this3.imageRendering = false; done(); }; this.imageRendering = { abort: function abort() { removeListener(image, EVENT_TRANSITION_END, onTransitionEnd); } }; addListener(image, EVENT_TRANSITION_END, onTransitionEnd, { once: true }); } else { done(); } } }, resetImage: function resetImage() { // this.image only defined after viewed if (this.viewing || this.viewed) { var image = this.image; if (this.viewing) { this.viewing.abort(); } image.parentNode.removeChild(image); this.image = null; } } }; var events = { bind: function bind() { var options = this.options, viewer = this.viewer, canvas = this.canvas; var document = this.element.ownerDocument; addListener(viewer, EVENT_CLICK, this.onClick = this.click.bind(this)); addListener(viewer, EVENT_DRAG_START, this.onDragStart = this.dragstart.bind(this)); addListener(canvas, EVENT_POINTER_DOWN, this.onPointerDown = this.pointerdown.bind(this)); addListener(document, EVENT_POINTER_MOVE, this.onPointerMove = this.pointermove.bind(this)); addListener(document, EVENT_POINTER_UP, this.onPointerUp = this.pointerup.bind(this)); addListener(document, EVENT_KEY_DOWN, this.onKeyDown = this.keydown.bind(this)); addListener(window, EVENT_RESIZE, this.onResize = this.resize.bind(this)); if (options.zoomable && options.zoomOnWheel) { addListener(viewer, EVENT_WHEEL, this.onWheel = this.wheel.bind(this), { passive: false, capture: true }); } if (options.toggleOnDblclick) { addListener(canvas, EVENT_DBLCLICK, this.onDblclick = this.dblclick.bind(this)); } }, unbind: function unbind() { var options = this.options, viewer = this.viewer, canvas = this.canvas; var document = this.element.ownerDocument; removeListener(viewer, EVENT_CLICK, this.onClick); removeListener(viewer, EVENT_DRAG_START, this.onDragStart); removeListener(canvas, EVENT_POINTER_DOWN, this.onPointerDown); removeListener(document, EVENT_POINTER_MOVE, this.onPointerMove); removeListener(document, EVENT_POINTER_UP, this.onPointerUp); removeListener(document, EVENT_KEY_DOWN, this.onKeyDown); removeListener(window, EVENT_RESIZE, this.onResize); if (options.zoomable && options.zoomOnWheel) { removeListener(viewer, EVENT_WHEEL, this.onWheel, { passive: false, capture: true }); } if (options.toggleOnDblclick) { removeListener(canvas, EVENT_DBLCLICK, this.onDblclick); } } }; var handlers = { click: function click(event) { var target = event.target; var options = this.options, imageData = this.imageData; var action = getData(target, DATA_ACTION); // Cancel the emulated click when the native click event was triggered. if (IS_TOUCH_DEVICE && event.isTrusted && target === this.canvas) { clearTimeout(this.clickCanvasTimeout); } switch (action) { case 'mix': if (this.played) { this.stop(); } else if (options.inline) { if (this.fulled) { this.exit(); } else { this.full(); } } else { this.hide(); } break; case 'hide': this.hide(); break; case 'view': this.view(getData(target, 'index')); break; case 'zoom-in': this.zoom(0.1, true); break; case 'zoom-out': this.zoom(-0.1, true); break; case 'one-to-one': this.toggle(); break; case 'reset': this.reset(); break; case 'prev': this.prev(options.loop); break; case 'play': this.play(options.fullscreen); break; case 'next': this.next(options.loop); break; case 'rotate-left': this.rotate(-90); break; case 'rotate-right': this.rotate(90); break; case 'flip-horizontal': this.scaleX(-imageData.scaleX || -1); break; case 'flip-vertical': this.scaleY(-imageData.scaleY || -1); break; default: if (this.played) { this.stop(); } } }, dblclick: function dblclick(event) { event.preventDefault(); if (this.viewed && event.target === this.image) { // Cancel the emulated double click when the native dblclick event was triggered. if (IS_TOUCH_DEVICE && event.isTrusted) { clearTimeout(this.doubleClickImageTimeout); } this.toggle(); } }, load: function load() { var _this = this; if (this.timeout) { clearTimeout(this.timeout); this.timeout = false; } var element = this.element, options = this.options, image = this.image, index = this.index, viewerData = this.viewerData; removeClass(image, CLASS_INVISIBLE); if (options.loading) { removeClass(this.canvas, CLASS_LOADING); } image.style.cssText = 'height:0;' + "margin-left:".concat(viewerData.width / 2, "px;") + "margin-top:".concat(viewerData.height / 2, "px;") + 'max-width:none!important;' + 'position:absolute;' + 'width:0;'; this.initImage(function () { toggleClass(image, CLASS_MOVE, options.movable); toggleClass(image, CLASS_TRANSITION, options.transition); _this.renderImage(function () { _this.viewed = true; _this.viewing = false; if (isFunction(options.viewed)) { addListener(element, EVENT_VIEWED, options.viewed, { once: true }); } dispatchEvent(element, EVENT_VIEWED, { originalImage: _this.images[index], index: index, image: image }, { cancelable: false }); }); }); }, loadImage: function loadImage(event) { var image = event.target; var parent = image.parentNode; var parentWidth = parent.offsetWidth || 30; var parentHeight = parent.offsetHeight || 50; var filled = !!getData(image, 'filled'); getImageNaturalSizes(image, this.options, function (naturalWidth, naturalHeight) { var aspectRatio = naturalWidth / naturalHeight; var width = parentWidth; var height = parentHeight; if (parentHeight * aspectRatio > parentWidth) { if (filled) { width = parentHeight * aspectRatio; } else { height = parentWidth / aspectRatio; } } else if (filled) { height = parentWidth / aspectRatio; } else { width = parentHeight * aspectRatio; } setStyle(image, assign({ width: width, height: height }, getTransforms({ translateX: (parentWidth - width) / 2, translateY: (parentHeight - height) / 2 }))); }); }, keydown: function keydown(event) { var options = this.options; if (!this.fulled || !options.keyboard) { return; } switch (event.keyCode || event.which || event.charCode) { // Escape case 27: if (this.played) { this.stop(); } else if (options.inline) { if (this.fulled) { this.exit(); } } else { this.hide(); } break; // Space case 32: if (this.played) { this.stop(); } break; // ArrowLeft case 37: this.prev(options.loop); break; // ArrowUp case 38: // Prevent scroll on Firefox event.preventDefault(); // Zoom in this.zoom(options.zoomRatio, true); break; // ArrowRight case 39: this.next(options.loop); break; // ArrowDown case 40: // Prevent scroll on Firefox event.preventDefault(); // Zoom out this.zoom(-options.zoomRatio, true); break; // Ctrl + 0 case 48: // Fall through // Ctrl + 1 // eslint-disable-next-line no-fallthrough case 49: if (event.ctrlKey) { event.preventDefault(); this.toggle(); } break; } }, dragstart: function dragstart(event) { if (event.target.tagName.toLowerCase() === 'img') { event.preventDefault(); } }, pointerdown: function pointerdown(event) { var options = this.options, pointers = this.pointers; var buttons = event.buttons, button = event.button; if (!this.viewed || this.showing || this.viewing || this.hiding // Handle mouse event and pointer event and ignore touch event || (event.type === 'mousedown' || event.type === 'pointerdown' && event.pointerType === 'mouse') && ( // No primary button (Usually the left button) isNumber(buttons) && buttons !== 1 || isNumber(button) && button !== 0 // Open context menu || event.ctrlKey)) { return; } // Prevent default behaviours as page zooming in touch devices. event.preventDefault(); if (event.changedTouches) { forEach(event.changedTouches, function (touch) { pointers[touch.identifier] = getPointer(touch); }); } else { pointers[event.pointerId || 0] = getPointer(event); } var action = options.movable ? ACTION_MOVE : false; if (options.zoomOnTouch && options.zoomable && Object.keys(pointers).length > 1) { action = ACTION_ZOOM; } else if (options.slideOnTouch && (event.pointerType === 'touch' || event.type === 'touchstart') && this.isSwitchable()) { action = ACTION_SWITCH; } if (options.transition && (action === ACTION_MOVE || action === ACTION_ZOOM)) { removeClass(this.image, CLASS_TRANSITION); } this.action = action; }, pointermove: function pointermove(event) { var pointers = this.pointers, action = this.action; if (!this.viewed || !action) { return; } event.preventDefault(); if (event.changedTouches) { forEach(event.changedTouches, function (touch) { assign(pointers[touch.identifier] || {}, getPointer(touch, true)); }); } else { assign(pointers[event.pointerId || 0] || {}, getPointer(event, true)); } this.change(event); }, pointerup: function pointerup(event) { var _this2 = this; var options = this.options, action = this.action, pointers = this.pointers; var pointer; if (event.changedTouches) { forEach(event.changedTouches, function (touch) { pointer = pointers[touch.identifier]; delete pointers[touch.identifier]; }); } else { pointer = pointers[event.pointerId || 0]; delete pointers[event.pointerId || 0]; } if (!action) { return; } event.preventDefault(); if (options.transition && (action === ACTION_MOVE || action === ACTION_ZOOM)) { addClass(this.image, CLASS_TRANSITION); } this.action = false; // Emulate click and double click in touch devices to support backdrop and image zooming (#210). if (IS_TOUCH_DEVICE && action !== ACTION_ZOOM && pointer && Date.now() - pointer.timeStamp < 500) { clearTimeout(this.clickCanvasTimeout); clearTimeout(this.doubleClickImageTimeout); if (options.toggleOnDblclick && this.viewed && event.target === this.image) { if (this.imageClicked) { this.imageClicked = false; // This timeout will be cleared later when a native dblclick event is triggering this.doubleClickImageTimeout = setTimeout(function () { dispatchEvent(_this2.image, EVENT_DBLCLICK); }, 50); } else { this.imageClicked = true; // The default timing of a double click in Windows is 500 ms this.doubleClickImageTimeout = setTimeout(function () { _this2.imageClicked = false; }, 500); } } else { this.imageClicked = false; if (options.backdrop && options.backdrop !== 'static' && event.target === this.canvas) { // This timeout will be cleared later when a native click event is triggering this.clickCanvasTimeout = setTimeout(function () { dispatchEvent(_this2.canvas, EVENT_CLICK); }, 50); } } } }, resize: function resize() { var _this3 = this; if (!this.isShown || this.hiding) { return; } if (this.fulled) { this.close(); this.initBody(); this.open(); } this.initContainer(); this.initViewer(); this.renderViewer(); this.renderList(); if (this.viewed) { this.initImage(function () { _this3.renderImage(); }); } if (this.played) { if (this.options.fullscreen && this.fulled && !(document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement)) { this.stop(); return; } forEach(this.player.getElementsByTagName('img'), function (image) { addListener(image, EVENT_LOAD, _this3.loadImage.bind(_this3), { once: true }); dispatchEvent(image, EVENT_LOAD); }); } }, wheel: function wheel(event) { var _this4 = this; if (!this.viewed) { return; } event.preventDefault(); // Limit wheel speed to prevent zoom too fast if (this.wheeling) { return; } this.wheeling = true; setTimeout(function () { _this4.wheeling = false; }, 50); var ratio = Number(this.options.zoomRatio) || 0.1; var delta = 1; if (event.deltaY) { delta = event.deltaY > 0 ? 1 : -1; } else if (event.wheelDelta) { delta = -event.wheelDelta / 120; } else if (event.detail) { delta = event.detail > 0 ? 1 : -1; } this.zoom(-delta * ratio, true, event); } }; var methods = { /** Show the viewer (only available in modal mode) * @param {boolean} [immediate=false] - Indicates if show the viewer immediately or not. * @returns {Viewer} this */ show: function show() { var immediate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; var element = this.element, options = this.options; if (options.inline || this.showing || this.isShown || this.showing) { return this; } if (!this.ready) { this.build(); if (this.ready) { this.show(immediate); } return this; } if (isFunction(options.show)) { addListener(element, EVENT_SHOW, options.show, { once: true }); } if (dispatchEvent(element, EVENT_SHOW) === false || !this.ready) { return this; } if (this.hiding) { this.transitioning.abort(); } this.showing = true; this.open(); var viewer = this.viewer; removeClass(viewer, CLASS_HIDE); if (options.transition && !immediate) { var shown = this.shown.bind(this); this.transitioning = { abort: function abort() { removeListener(viewer, EVENT_TRANSITION_END, shown); removeClass(viewer, CLASS_IN); } }; addClass(viewer, CLASS_TRANSITION); // Force reflow to enable CSS3 transition viewer.initialOffsetWidth = viewer.offsetWidth; addListener(viewer, EVENT_TRANSITION_END, shown, { once: true }); addClass(viewer, CLASS_IN); } else { addClass(viewer, CLASS_IN); this.shown(); } return this; }, /** * Hide the viewer (only available in modal mode) * @param {boolean} [immediate=false] - Indicates if hide the viewer immediately or not. * @returns {Viewer} this */ hide: function hide() { var _this = this; var immediate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; var element = this.element, options = this.options; if (options.inline || this.hiding || !(this.isShown || this.showing)) { return this; } if (isFunction(options.hide)) { addListener(element, EVENT_HIDE, options.hide, { once: true }); } if (dispatchEvent(element, EVENT_HIDE) === false) { return this; } if (this.showing) { this.transitioning.abort(); } this.hiding = true; if (this.played) { this.stop(); } else if (this.viewing) { this.viewing.abort(); } var viewer = this.viewer, image = this.image; var hideImmediately = function hideImmediately() { removeClass(viewer, CLASS_IN); _this.hidden(); }; if (options.transition && !immediate) { var onViewerTransitionEnd = function onViewerTransitionEnd(event) { // Ignore all propagating `transitionend` events (#275). if (event && event.target === viewer) { removeListener(viewer, EVENT_TRANSITION_END, onViewerTransitionEnd); _this.hidden(); } }; var onImageTransitionEnd = function onImageTransitionEnd() { // In case of show the viewer by `viewer.show(true)` previously (#407). if (hasClass(viewer, CLASS_TRANSITION)) { addListener(viewer, EVENT_TRANSITION_END, onViewerTransitionEnd); removeClass(viewer, CLASS_IN); } else { hideImmediately(); } }; this.transitioning = { abort: function abort() { if (_this.viewed && hasClass(image, CLASS_TRANSITION)) { removeListener(image, EVENT_TRANSITION_END, onImageTransitionEnd); } else if (hasClass(viewer, CLASS_TRANSITION)) { removeListener(viewer, EVENT_TRANSITION_END, onViewerTransitionEnd); } } }; // In case of hiding the viewer when holding on the image (#255), // note that the `CLASS_TRANSITION` class will be removed on pointer down. if (this.viewed && hasClass(image, CLASS_TRANSITION)) { addListener(image, EVENT_TRANSITION_END, onImageTransitionEnd, { once: true }); this.zoomTo(0, false, false, true); } else { onImageTransitionEnd(); } } else { hideImmediately(); } return this; }, /** * View one of the images with image's index * @param {number} index - The index of the image to view. * @returns {Viewer} this */ view: function view() { var _this2 = this; var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.options.initialViewIndex; index = Number(index) || 0; if (this.hiding || this.played || index < 0 || index >= this.length || this.viewed && index === this.index) { return this; } if (!this.isShown) { this.index = index; return this.show(); } if (this.viewing) { this.viewing.abort(); } var element = this.element, options = this.options, title = this.title, canvas = this.canvas; var item = this.items[index]; var img = item.querySelector('img'); var url = getData(img, 'originalUrl'); var alt = img.getAttribute('alt'); var image = document.createElement('img'); forEach(options.inheritedAttributes, function (name) { var value = img.getAttribute(name); if (value !== null) { image.setAttribute(name, value); } }); image.src = url; image.alt = alt; if (isFunction(options.view)) { addListener(element, EVENT_VIEW, options.view, { once: true }); } if (dispatchEvent(element, EVENT_VIEW, { originalImage: this.images[index], index: index, image: image }) === false || !this.isShown || this.hiding || this.played) { return this; } this.image = image; removeClass(this.items[this.index], CLASS_ACTIVE); addClass(item, CLASS_ACTIVE); this.viewed = false; this.index = index; this.imageData = {}; addClass(image, CLASS_INVISIBLE); if (options.loading) { addClass(canvas, CLASS_LOADING); } canvas.innerHTML = ''; canvas.appendChild(image); // Center current item this.renderList(); // Clear title title.innerHTML = ''; // Generate title after viewed var onViewed = function onViewed() { var imageData = _this2.imageData; var render = Array.isArray(options.title) ? options.title[1] : options.title; title.innerHTML = escapeHTMLEntities(isFunction(render) ? render.call(_this2, image, imageData) : "".concat(alt, " (").concat(imageData.naturalWidth, " \xD7 ").concat(imageData.naturalHeight, ")")); }; var onLoad; addListener(element, EVENT_VIEWED, onViewed, { once: true }); this.viewing = { abort: function abort() { removeListener(element, EVENT_VIEWED, onViewed); if (image.complete) { if (_this2.imageRendering) { _this2.imageRendering.abort(); } else if (_this2.imageInitializing) { _this2.imageInitializing.abort(); } } else { // Cancel download to save bandwidth. image.src = ''; removeListener(image, EVENT_LOAD, onLoad); if (_this2.timeout) { clearTimeout(_this2.timeout); } } } }; if (image.complete) { this.load(); } else { addListener(image, EVENT_LOAD, onLoad = this.load.bind(this), { once: true }); if (this.timeout) { clearTimeout(this.timeout); } // Make the image visible if it fails to load within 1s this.timeout = setTimeout(function () { removeClass(image, CLASS_INVISIBLE); _this2.timeout = false; }, 1000); } return this; }, /** * View the previous image * @param {boolean} [loop=false] - Indicate if view the last one * when it is the first one at present. * @returns {Viewer} this */ prev: function prev() { var loop = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; var index = this.index - 1; if (index < 0) { index = loop ? this.length - 1 : 0; } this.view(index); return this; }, /** * View the next image * @param {boolean} [loop=false] - Indicate if view the first one * when it is the last one at present. * @returns {Viewer} this */ next: function next() { var loop = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; var maxIndex = this.length - 1; var index = this.index + 1; if (index > maxIndex) { index = loop ? 0 : maxIndex; } this.view(index); return this; }, /** * Move the image with relative offsets. * @param {number} offsetX - The relative offset distance on the x-axis. * @param {number} offsetY - The relative offset distance on the y-axis. * @returns {Viewer} this */ move: function move(offsetX, offsetY) { var imageData = this.imageData; this.moveTo(isUndefined(offsetX) ? offsetX : imageData.left + Number(offsetX), isUndefined(offsetY) ? offsetY : imageData.top + Number(offsetY)); return this; }, /** * Move the image to an absolute point. * @param {number} x - The x-axis coordinate. * @param {number} [y=x] - The y-axis coordinate. * @returns {Viewer} this */ moveTo: function moveTo(x) { var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : x; var imageData = this.imageData; x = Number(x); y = Number(y); if (this.viewed && !this.played && this.options.movable) { var changed = false; if (isNumber(x)) { imageData.left = x; changed = true; } if (isNumber(y)) { imageData.top = y; changed = true; } if (changed) { this.renderImage(); } } return this; }, /** * Zoom the image with a relative ratio. * @param {number} ratio - The target ratio. * @param {boolean} [hasTooltip=false] - Indicates if it has a tooltip or not. * @param {Event} [_originalEvent=null] - The original event if any. * @returns {Viewer} this */ zoom: function zoom(ratio) { var hasTooltip = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; var _originalEvent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; var imageData = this.imageData; ratio = Number(ratio); if (ratio < 0) { ratio = 1 / (1 - ratio); } else { ratio = 1 + ratio; } this.zoomTo(imageData.width * ratio / imageData.naturalWidth, hasTooltip, _originalEvent); return this; }, /** * Zoom the image to an absolute ratio. * @param {number} ratio - The target ratio. * @param {boolean} [hasTooltip=false] - Indicates if it has a tooltip or not. * @param {Event} [_originalEvent=null] - The original event if any. * @param {Event} [_zoomable=false] - Indicates if the current zoom is available or not. * @returns {Viewer} this */ zoomTo: function zoomTo(ratio) { var _this3 = this; var hasTooltip = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; var _originalEvent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; var _zoomable = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; var element = this.element, options = this.options, pointers = this.pointers, imageData = this.imageData; var width = imageData.width, height = imageData.height, left = imageData.left, top = imageData.top, naturalWidth = imageData.naturalWidth, naturalHeight = imageData.naturalHeight; ratio = Math.max(0, ratio); if (isNumber(ratio) && this.viewed && !this.played && (_zoomable || options.zoomable)) { if (!_zoomable) { var minZoomRatio = Math.max(0.01, options.minZoomRatio); var maxZoomRatio = Math.min(100, options.maxZoomRatio); ratio = Math.min(Math.max(ratio, minZoomRatio), maxZoomRatio); } if (_originalEvent && options.zoomRatio >= 0.055 && ratio > 0.95 && ratio < 1.05) { ratio = 1; } var newWidth = naturalWidth * ratio; var newHeight = naturalHeight * ratio; var offsetWidth = newWidth - width; var offsetHeight = newHeight - height; var oldRatio = width / naturalWidth; if (isFunction(options.zoom)) { addListener(element, EVENT_ZOOM, options.zoom, { once: true }); } if (dispatchEvent(element, EVENT_ZOOM, { ratio: ratio, oldRatio: oldRatio, originalEvent: _originalEvent }) === false) { return this; } this.zooming = true; if (_originalEvent) { var offset = getOffset(this.viewer); var center = pointers && Object.keys(pointers).length ? getPointersCenter(pointers) : { pageX: _originalEvent.pageX, pageY: _originalEvent.pageY }; // Zoom from the triggering point of the event imageData.left -= offsetWidth * ((center.pageX - offset.left - left) / width); imageData.top -= offsetHeight * ((center.pageY - offset.top - top) / height); } else { // Zoom from the center of the image imageData.left -= offsetWidth / 2; imageData.top -= offsetHeight / 2; } imageData.width = newWidth; imageData.height = newHeight; imageData.ratio = ratio; this.renderImage(function () { _this3.zooming = false; if (isFunction(options.zoomed)) { addListener(element, EVENT_ZOOMED, options.zoomed, { once: true }); } dispatchEvent(element, EVENT_ZOOMED, { ratio: ratio, oldRatio: oldRatio, originalEvent: _originalEvent }, { cancelable: false }); }); if (hasTooltip) { this.tooltip(); } } return this; }, /** * Rotate the image with a relative degree. * @param {number} degree - The rotate degree. * @returns {Viewer} this */ rotate: function rotate(degree) { this.rotateTo((this.imageData.rotate || 0) + Number(degree)); return this; }, /** * Rotate the image to an absolute degree. * @param {number} degree - The rotate degree. * @returns {Viewer} this */ rotateTo: function rotateTo(degree) { var imageData = this.imageData; degree = Number(degree); if (isNumber(degree) && this.viewed && !this.played && this.options.rotatable) { imageData.rotate = degree; this.renderImage(); } return this; }, /** * Scale the image on the x-axis. * @param {number} scaleX - The scale ratio on the x-axis. * @returns {Viewer} this */ scaleX: function scaleX(_scaleX) { this.scale(_scaleX, this.imageData.scaleY); return this; }, /** * Scale the image on the y-axis. * @param {number} scaleY - The scale ratio on the y-axis. * @returns {Viewer} this */ scaleY: function scaleY(_scaleY) { this.scale(this.imageData.scaleX, _scaleY); return this; }, /** * Scale the image. * @param {number} scaleX - The scale ratio on the x-axis. * @param {number} [scaleY=scaleX] - The scale ratio on the y-axis. * @returns {Viewer} this */ scale: function scale(scaleX) { var scaleY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : scaleX; var imageData = this.imageData; scaleX = Number(scaleX); scaleY = Number(scaleY); if (this.viewed && !this.played && this.options.scalable) { var changed = false; if (isNumber(scaleX)) { imageData.scaleX = scaleX; changed = true; } if (isNumber(scaleY)) { imageData.scaleY = scaleY; changed = true; } if (changed) { this.renderImage(); } } return this; }, /** * Play the images * @param {boolean} [fullscreen=false] - Indicate if request fullscreen or not. * @returns {Viewer} this */ play: function play() { var _this4 = this; var fullscreen = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; if (!this.isShown || this.played) { return this; } var element = this.element, options = this.options; if (isFunction(options.play)) { addListener(element, EVENT_PLAY, options.play, { once: true }); } if (dispatchEvent(element, EVENT_PLAY) === false) { return this; } var player = this.player; var onLoad = this.loadImage.bind(this); var list = []; var total = 0; var index = 0; this.played = true; this.onLoadWhenPlay = onLoad; if (fullscreen) { this.requestFullscreen(); } addClass(player, CLASS_SHOW); forEach(this.items, function (item, i) { var img = item.querySelector('img'); var image = document.createElement('img'); image.src = getData(img, 'originalUrl'); image.alt = img.getAttribute('alt'); image.referrerPolicy = img.referrerPolicy; total += 1; addClass(image, CLASS_FADE); toggleClass(image, CLASS_TRANSITION, options.transition); if (hasClass(item, CLASS_ACTIVE)) { addClass(image, CLASS_IN); index = i; } list.push(image); addListener(image, EVENT_LOAD, onLoad, { once: true }); player.appendChild(image); }); if (isNumber(options.interval) && options.interval > 0) { var play = function play() { _this4.playing = setTimeout(function () { removeClass(list[index], CLASS_IN); index += 1; index = index < total ? index : 0; addClass(list[index], CLASS_IN); play(); }, options.interval); }; if (total > 1) { play(); } } return this; }, // Stop play stop: function stop() { var _this5 = this; if (!this.played) { return this; } var element = this.element, options = this.options; if (isFunction(options.stop)) { addListener(element, EVENT_STOP, options.stop, { once: true }); } if (dispatchEvent(element, EVENT_STOP) === false) { return this; } var player = this.player; this.played = false; clearTimeout(this.playing); forEach(player.getElementsByTagName('img'), function (image) { removeListener(image, EVENT_LOAD, _this5.onLoadWhenPlay); }); removeClass(player, CLASS_SHOW); player.innerHTML = ''; this.exitFullscreen(); return this; }, // Enter modal mode (only available in inline mode) full: function full() { var _this6 = this; var options = this.options, viewer = this.viewer, image = this.image, list = this.list; if (!this.isShown || this.played || this.fulled || !options.inline) { return this; } this.fulled = true; this.open(); addClass(this.button, CLASS_FULLSCREEN_EXIT); if (options.transition) { removeClass(list, CLASS_TRANSITION); if (this.viewed) { removeClass(image, CLASS_TRANSITION); } } addClass(viewer, CLASS_FIXED); viewer.setAttribute('style', ''); setStyle(viewer, { zIndex: options.zIndex }); this.initContainer(); this.viewerData = assign({}, this.containerData); this.renderList(); if (this.viewed) { this.initImage(function () { _this6.renderImage(function () { if (options.transition) { setTimeout(function () { addClass(image, CLASS_TRANSITION); addClass(list, CLASS_TRANSITION); }, 0); } }); }); } return this; }, // Exit modal mode (only available in inline mode) exit: function exit() { var _this7 = this; var options = this.options, viewer = this.viewer, image = this.image, list = this.list; if (!this.isShown || this.played || !this.fulled || !options.inline) { return this; } this.fulled = false; this.close(); removeClass(this.button, CLASS_FULLSCREEN_EXIT); if (options.transition) { removeClass(list, CLASS_TRANSITION); if (this.viewed) { removeClass(image, CLASS_TRANSITION); } } removeClass(viewer, CLASS_FIXED); setStyle(viewer, { zIndex: options.zIndexInline }); this.viewerData = assign({}, this.parentData); this.renderViewer(); this.renderList(); if (this.viewed) { this.initImage(function () { _this7.renderImage(function () { if (options.transition) { setTimeout(function () { addClass(image, CLASS_TRANSITION); addClass(list, CLASS_TRANSITION); }, 0); } }); }); } return this; }, // Show the current ratio of the image with percentage tooltip: function tooltip() { var _this8 = this; var options = this.options, tooltipBox = this.tooltipBox, imageData = this.imageData; if (!this.viewed || this.played || !options.tooltip) { return this; } tooltipBox.textContent = "".concat(Math.round(imageData.ratio * 100), "%"); if (!this.tooltipping) { if (options.transition) { if (this.fading) { dispatchEvent(tooltipBox, EVENT_TRANSITION_END); } addClass(tooltipBox, CLASS_SHOW); addClass(tooltipBox, CLASS_FADE); addClass(tooltipBox, CLASS_TRANSITION); // Force reflow to enable CSS3 transition tooltipBox.initialOffsetWidth = tooltipBox.offsetWidth; addClass(tooltipBox, CLASS_IN); } else { addClass(tooltipBox, CLASS_SHOW); } } else { clearTimeout(this.tooltipping); } this.tooltipping = setTimeout(function () { if (options.transition) { addListener(tooltipBox, EVENT_TRANSITION_END, function () { removeClass(tooltipBox, CLASS_SHOW); removeClass(tooltipBox, CLASS_FADE); removeClass(tooltipBox, CLASS_TRANSITION); _this8.fading = false; }, { once: true }); removeClass(tooltipBox, CLASS_IN); _this8.fading = true; } else { removeClass(tooltipBox, CLASS_SHOW); } _this8.tooltipping = false; }, 1000); return this; }, // Toggle the image size between its natural size and initial size toggle: function toggle() { if (this.imageData.ratio === 1) { this.zoomTo(this.initialImageData.ratio, true); } else { this.zoomTo(1, true); } return this; }, // Reset the image to its initial state reset: function reset() { if (this.viewed && !this.played) { this.imageData = assign({}, this.initialImageData); this.renderImage(); } return this; }, // Update viewer when images changed update: function update() { var _this9 = this; var element = this.element, options = this.options, isImg = this.isImg; // Destroy viewer if the target image was deleted if (isImg && !element.parentNode) { return this.destroy(); } var images = []; forEach(isImg ? [element] : element.querySelectorAll('img'), function (image) { if (isFunction(options.filter)) { if (options.filter.call(_this9, image)) { images.push(image); } } else if (_this9.getImageURL(image)) { images.push(image); } }); if (!images.length) { return this; } this.images = images; this.length = images.length; if (this.ready) { var changedIndexes = []; forEach(this.items, function (item, i) { var img = item.querySelector('img'); var image = images[i]; if (image && img) { if (image.src !== img.src // Title changed (#408) || image.alt !== img.alt) { changedIndexes.push(i); } } else { changedIndexes.push(i); } }); setStyle(this.list, { width: 'auto' }); this.initList(); if (this.isShown) { if (this.length) { if (this.viewed) { var changedIndex = changedIndexes.indexOf(this.index); if (changedIndex >= 0) { this.viewed = false; this.view(Math.max(Math.min(this.index - changedIndex, this.length - 1), 0)); } else { // Reactivate the current viewing item after reset the list. addClass(this.items[this.index], CLASS_ACTIVE); } } } else { this.image = null; this.viewed = false; this.index = 0; this.imageData = {}; this.canvas.innerHTML = ''; this.title.innerHTML = ''; } } } else { this.build(); } return this; }, // Destroy the viewer destroy: function destroy() { var element = this.element, options = this.options; if (!element[NAMESPACE]) { return this; } this.destroyed = true; if (this.ready) { if (this.played) { this.stop(); } if (options.inline) { if (this.fulled) { this.exit(); } this.unbind(); } else if (this.isShown) { if (this.viewing) { if (this.imageRendering) { this.imageRendering.abort(); } else if (this.imageInitializing) { this.imageInitializing.abort(); } } if (this.hiding) { this.transitioning.abort(); } this.hidden(); } else if (this.showing) { this.transitioning.abort(); this.hidden(); } this.ready = false; this.viewer.parentNode.removeChild(this.viewer); } else if (options.inline) { if (this.delaying) { this.delaying.abort(); } else if (this.initializing) { this.initializing.abort(); } } if (!options.inline) { removeListener(element, EVENT_CLICK, this.onStart); } element[NAMESPACE] = undefined; return this; } }; var others = { getImageURL: function getImageURL(image) { var url = this.options.url; if (isString(url)) { url = image.getAttribute(url); } else if (isFunction(url)) { url = url.call(this, image); } else { url = ''; } return url; }, open: function open() { var body = this.body; addClass(body, CLASS_OPEN); body.style.paddingRight = "".concat(this.scrollbarWidth + (parseFloat(this.initialBodyComputedPaddingRight) || 0), "px"); }, close: function close() { var body = this.body; removeClass(body, CLASS_OPEN); body.style.paddingRight = this.initialBodyPaddingRight; }, shown: function shown() { var element = this.element, options = this.options; this.fulled = true; this.isShown = true; this.render(); this.bind(); this.showing = false; if (isFunction(options.shown)) { addListener(element, EVENT_SHOWN, options.shown, { once: true }); } if (dispatchEvent(element, EVENT_SHOWN) === false) { return; } if (this.ready && this.isShown && !this.hiding) { this.view(this.index); } }, hidden: function hidden() { var element = this.element, options = this.options; this.fulled = false; this.viewed = false; this.isShown = false; this.close(); this.unbind(); addClass(this.viewer, CLASS_HIDE); this.resetList(); this.resetImage(); this.hiding = false; if (!this.destroyed) { if (isFunction(options.hidden)) { addListener(element, EVENT_HIDDEN, options.hidden, { once: true }); } dispatchEvent(element, EVENT_HIDDEN, null, { cancelable: false }); } }, requestFullscreen: function requestFullscreen() { var document = this.element.ownerDocument; if (this.fulled && !(document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement)) { var documentElement = document.documentElement; // Element.requestFullscreen() if (documentElement.requestFullscreen) { documentElement.requestFullscreen(); } else if (documentElement.webkitRequestFullscreen) { documentElement.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT); } else if (documentElement.mozRequestFullScreen) { documentElement.mozRequestFullScreen(); } else if (documentElement.msRequestFullscreen) { documentElement.msRequestFullscreen(); } } }, exitFullscreen: function exitFullscreen() { var document = this.element.ownerDocument; if (this.fulled && (document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement)) { // Document.exitFullscreen() if (document.exitFullscreen) { document.exitFullscreen(); } else if (document.webkitExitFullscreen) { document.webkitExitFullscreen(); } else if (document.mozCancelFullScreen) { document.mozCancelFullScreen(); } else if (document.msExitFullscreen) { document.msExitFullscreen(); } } }, change: function change(event) { var options = this.options, pointers = this.pointers; var pointer = pointers[Object.keys(pointers)[0]]; var offsetX = pointer.endX - pointer.startX; var offsetY = pointer.endY - pointer.startY; switch (this.action) { // Move the current image case ACTION_MOVE: this.move(offsetX, offsetY); break; // Zoom the current image case ACTION_ZOOM: this.zoom(getMaxZoomRatio(pointers), false, event); break; case ACTION_SWITCH: { this.action = 'switched'; var absoluteOffsetX = Math.abs(offsetX); if (absoluteOffsetX > 1 && absoluteOffsetX > Math.abs(offsetY)) { // Empty `pointers` as `touchend` event will not be fired after swiped in iOS browsers. this.pointers = {}; if (offsetX > 1) { this.prev(options.loop); } else if (offsetX < -1) { this.next(options.loop); } } break; } } // Override forEach(pointers, function (p) { p.startX = p.endX; p.startY = p.endY; }); }, isSwitchable: function isSwitchable() { var imageData = this.imageData, viewerData = this.viewerData; return this.length > 1 && imageData.left >= 0 && imageData.top >= 0 && imageData.width <= viewerData.width && imageData.height <= viewerData.height; } }; var AnotherViewer = WINDOW.Viewer; var Viewer = /*#__PURE__*/function () { /** * Create a new Viewer. * @param {Element} element - The target element for viewing. * @param {Object} [options={}] - The configuration options. */ function Viewer(element) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; _classCallCheck(this, Viewer); if (!element || element.nodeType !== 1) { throw new Error('The first argument is required and must be an element.'); } this.element = element; this.options = assign({}, DEFAULTS, isPlainObject(options) && options); this.action = false; this.fading = false; this.fulled = false; this.hiding = false; this.imageClicked = false; this.imageData = {}; this.index = this.options.initialViewIndex; this.isImg = false; this.isShown = false; this.length = 0; this.played = false; this.playing = false; this.pointers = {}; this.ready = false; this.showing = false; this.timeout = false; this.tooltipping = false; this.viewed = false; this.viewing = false; this.wheeling = false; this.zooming = false; this.init(); } _createClass(Viewer, [{ key: "init", value: function init() { var _this = this; var element = this.element, options = this.options; if (element[NAMESPACE]) { return; } element[NAMESPACE] = this; var isImg = element.tagName.toLowerCase() === 'img'; var images = []; forEach(isImg ? [element] : element.querySelectorAll('img'), function (image) { if (isFunction(options.filter)) { if (options.filter.call(_this, image)) { images.push(image); } } else if (_this.getImageURL(image)) { images.push(image); } }); this.isImg = isImg; this.length = images.length; this.images = images; this.initBody(); // Override `transition` option if it is not supported if (isUndefined(document.createElement(NAMESPACE).style.transition)) { options.transition = false; } if (options.inline) { var count = 0; var progress = function progress() { count += 1; if (count === _this.length) { var timeout; _this.initializing = false; _this.delaying = { abort: function abort() { clearTimeout(timeout); } }; // build asynchronously to keep `this.viewer` is accessible in `ready` event handler. timeout = setTimeout(function () { _this.delaying = false; _this.build(); }, 0); } }; this.initializing = { abort: function abort() { forEach(images, function (image) { if (!image.complete) { removeListener(image, EVENT_LOAD, progress); } }); } }; forEach(images, function (image) { if (image.complete) { progress(); } else { addListener(image, EVENT_LOAD, progress, { once: true }); } }); } else { addListener(element, EVENT_CLICK, this.onStart = function (_ref) { var target = _ref.target; if (target.tagName.toLowerCase() === 'img' && (!isFunction(options.filter) || options.filter.call(_this, target))) { _this.view(_this.images.indexOf(target)); } }); } } }, { key: "build", value: function build() { if (this.ready) { return; } var element = this.element, options = this.options; var parent = element.parentNode; var template = document.createElement('div'); template.innerHTML = TEMPLATE; var viewer = template.querySelector(".".concat(NAMESPACE, "-container")); var title = viewer.querySelector(".".concat(NAMESPACE, "-title")); var toolbar = viewer.querySelector(".".concat(NAMESPACE, "-toolbar")); var navbar = viewer.querySelector(".".concat(NAMESPACE, "-navbar")); var button = viewer.querySelector(".".concat(NAMESPACE, "-button")); var canvas = viewer.querySelector(".".concat(NAMESPACE, "-canvas")); this.parent = parent; this.viewer = viewer; this.title = title; this.toolbar = toolbar; this.navbar = navbar; this.button = button; this.canvas = canvas; this.footer = viewer.querySelector(".".concat(NAMESPACE, "-footer")); this.tooltipBox = viewer.querySelector(".".concat(NAMESPACE, "-tooltip")); this.player = viewer.querySelector(".".concat(NAMESPACE, "-player")); this.list = viewer.querySelector(".".concat(NAMESPACE, "-list")); addClass(title, !options.title ? CLASS_HIDE : getResponsiveClass(Array.isArray(options.title) ? options.title[0] : options.title)); addClass(navbar, !options.navbar ? CLASS_HIDE : getResponsiveClass(options.navbar)); toggleClass(button, CLASS_HIDE, !options.button); if (options.backdrop) { addClass(viewer, "".concat(NAMESPACE, "-backdrop")); if (!options.inline && options.backdrop !== 'static') { setData(canvas, DATA_ACTION, 'hide'); } } if (isString(options.className) && options.className) { // In case there are multiple class names options.className.split(REGEXP_SPACES).forEach(function (className) { addClass(viewer, className); }); } if (options.toolbar) { var list = document.createElement('ul'); var custom = isPlainObject(options.toolbar); var zoomButtons = BUTTONS.slice(0, 3); var rotateButtons = BUTTONS.slice(7, 9); var scaleButtons = BUTTONS.slice(9); if (!custom) { addClass(toolbar, getResponsiveClass(options.toolbar)); } forEach(custom ? options.toolbar : BUTTONS, function (value, index) { var deep = custom && isPlainObject(value); var name = custom ? hyphenate(index) : value; var show = deep && !isUndefined(value.show) ? value.show : value; if (!show || !options.zoomable && zoomButtons.indexOf(name) !== -1 || !options.rotatable && rotateButtons.indexOf(name) !== -1 || !options.scalable && scaleButtons.indexOf(name) !== -1) { return; } var size = deep && !isUndefined(value.size) ? value.size : value; var click = deep && !isUndefined(value.click) ? value.click : value; var item = document.createElement('li'); item.setAttribute('role', 'button'); addClass(item, "".concat(NAMESPACE, "-").concat(name)); if (!isFunction(click)) { setData(item, DATA_ACTION, name); } if (isNumber(show)) { addClass(item, getResponsiveClass(show)); } if (['small', 'large'].indexOf(size) !== -1) { addClass(item, "".concat(NAMESPACE, "-").concat(size)); } else if (name === 'play') { addClass(item, "".concat(NAMESPACE, "-large")); } if (isFunction(click)) { addListener(item, EVENT_CLICK, click); } list.appendChild(item); }); toolbar.appendChild(list); } else { addClass(toolbar, CLASS_HIDE); } if (!options.rotatable) { var rotates = toolbar.querySelectorAll('li[class*="rotate"]'); addClass(rotates, CLASS_INVISIBLE); forEach(rotates, function (rotate) { toolbar.appendChild(rotate); }); } if (options.inline) { addClass(button, CLASS_FULLSCREEN); setStyle(viewer, { zIndex: options.zIndexInline }); if (window.getComputedStyle(parent).position === 'static') { setStyle(parent, { position: 'relative' }); } parent.insertBefore(viewer, element.nextSibling); } else { addClass(button, CLASS_CLOSE); addClass(viewer, CLASS_FIXED); addClass(viewer, CLASS_FADE); addClass(viewer, CLASS_HIDE); setStyle(viewer, { zIndex: options.zIndex }); var container = options.container; if (isString(container)) { container = element.ownerDocument.querySelector(container); } if (!container) { container = this.body; } container.appendChild(viewer); } if (options.inline) { this.render(); this.bind(); this.isShown = true; } this.ready = true; if (isFunction(options.ready)) { addListener(element, EVENT_READY, options.ready, { once: true }); } if (dispatchEvent(element, EVENT_READY) === false) { this.ready = false; return; } if (this.ready && options.inline) { this.view(this.index); } } /** * Get the no conflict viewer class. * @returns {Viewer} The viewer class. */ }], [{ key: "noConflict", value: function noConflict() { window.Viewer = AnotherViewer; return Viewer; } /** * Change the default options. * @param {Object} options - The new default options. */ }, { key: "setDefaults", value: function setDefaults(options) { assign(DEFAULTS, isPlainObject(options) && options); } }]); return Viewer; }(); assign(Viewer.prototype, render, events, handlers, methods, others); return Viewer; }))); ================================================ FILE: public/assets/luna/layui/css/layui.css ================================================ /** layui-v2.5.6 MIT License By https://www.layui.com */ .layui-inline,img{display:inline-block;vertical-align:middle}h1,h2,h3,h4,h5,h6{font-weight:400}.layui-edge,.layui-header,.layui-inline,.layui-main{position:relative}.layui-body,.layui-edge,.layui-elip{overflow:hidden}.layui-btn,.layui-edge,.layui-inline,img{vertical-align:middle}.layui-btn,.layui-disabled,.layui-icon,.layui-unselect{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.layui-elip,.layui-form-checkbox span,.layui-form-pane .layui-form-label{text-overflow:ellipsis;white-space:nowrap}.layui-breadcrumb,.layui-tree-btnGroup{visibility:hidden}blockquote,body,button,dd,div,dl,dt,form,h1,h2,h3,h4,h5,h6,input,li,ol,p,pre,td,textarea,th,ul{margin:0;padding:0;-webkit-tap-highlight-color:rgba(0,0,0,0)}a:active,a:hover{outline:0}img{border:none}li{list-style:none}table{border-collapse:collapse;border-spacing:0}h4,h5,h6{font-size:100%}button,input,optgroup,option,select,textarea{font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;outline:0}pre{white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word}body{line-height:24px;font:14px Helvetica Neue,Helvetica,PingFang SC,Tahoma,Arial,sans-serif}hr{height:1px;margin:10px 0;border:0;clear:both}a{color:#333;text-decoration:none}a:hover{color:#777}a cite{font-style:normal;*cursor:pointer}.layui-border-box,.layui-border-box *{box-sizing:border-box}.layui-box,.layui-box *{box-sizing:content-box}.layui-clear{clear:both;*zoom:1}.layui-clear:after{content:'\20';clear:both;*zoom:1;display:block;height:0}.layui-inline{*display:inline;*zoom:1}.layui-edge{display:inline-block;width:0;height:0;border-width:6px;border-style:dashed;border-color:transparent}.layui-edge-top{top:-4px;border-bottom-color:#999;border-bottom-style:solid}.layui-edge-right{border-left-color:#999;border-left-style:solid}.layui-edge-bottom{top:2px;border-top-color:#999;border-top-style:solid}.layui-edge-left{border-right-color:#999;border-right-style:solid}.layui-disabled,.layui-disabled:hover{color:#d2d2d2!important;cursor:not-allowed!important}.layui-circle{border-radius:100%}.layui-show{display:block!important}.layui-hide{display:none!important}@font-face{font-family:layui-icon;src:url(../font/iconfont.eot?v=256);src:url(../font/iconfont.eot?v=256#iefix) format('embedded-opentype'),url(../font/iconfont.woff2?v=256) format('woff2'),url(../font/iconfont.woff?v=256) format('woff'),url(../font/iconfont.ttf?v=256) format('truetype'),url(../font/iconfont.svg?v=256#layui-icon) format('svg')}.layui-icon{font-family:layui-icon!important;font-size:16px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.layui-icon-reply-fill:before{content:"\e611"}.layui-icon-set-fill:before{content:"\e614"}.layui-icon-menu-fill:before{content:"\e60f"}.layui-icon-search:before{content:"\e615"}.layui-icon-share:before{content:"\e641"}.layui-icon-set-sm:before{content:"\e620"}.layui-icon-engine:before{content:"\e628"}.layui-icon-close:before{content:"\1006"}.layui-icon-close-fill:before{content:"\1007"}.layui-icon-chart-screen:before{content:"\e629"}.layui-icon-star:before{content:"\e600"}.layui-icon-circle-dot:before{content:"\e617"}.layui-icon-chat:before{content:"\e606"}.layui-icon-release:before{content:"\e609"}.layui-icon-list:before{content:"\e60a"}.layui-icon-chart:before{content:"\e62c"}.layui-icon-ok-circle:before{content:"\1005"}.layui-icon-layim-theme:before{content:"\e61b"}.layui-icon-table:before{content:"\e62d"}.layui-icon-right:before{content:"\e602"}.layui-icon-left:before{content:"\e603"}.layui-icon-cart-simple:before{content:"\e698"}.layui-icon-face-cry:before{content:"\e69c"}.layui-icon-face-smile:before{content:"\e6af"}.layui-icon-survey:before{content:"\e6b2"}.layui-icon-tree:before{content:"\e62e"}.layui-icon-ie:before{content:"\e7bb"}.layui-icon-upload-circle:before{content:"\e62f"}.layui-icon-add-circle:before{content:"\e61f"}.layui-icon-download-circle:before{content:"\e601"}.layui-icon-templeate-1:before{content:"\e630"}.layui-icon-util:before{content:"\e631"}.layui-icon-face-surprised:before{content:"\e664"}.layui-icon-edit:before{content:"\e642"}.layui-icon-speaker:before{content:"\e645"}.layui-icon-down:before{content:"\e61a"}.layui-icon-file:before{content:"\e621"}.layui-icon-layouts:before{content:"\e632"}.layui-icon-rate-half:before{content:"\e6c9"}.layui-icon-add-circle-fine:before{content:"\e608"}.layui-icon-prev-circle:before{content:"\e633"}.layui-icon-read:before{content:"\e705"}.layui-icon-404:before{content:"\e61c"}.layui-icon-carousel:before{content:"\e634"}.layui-icon-help:before{content:"\e607"}.layui-icon-code-circle:before{content:"\e635"}.layui-icon-windows:before{content:"\e67f"}.layui-icon-water:before{content:"\e636"}.layui-icon-username:before{content:"\e66f"}.layui-icon-find-fill:before{content:"\e670"}.layui-icon-about:before{content:"\e60b"}.layui-icon-location:before{content:"\e715"}.layui-icon-up:before{content:"\e619"}.layui-icon-pause:before{content:"\e651"}.layui-icon-date:before{content:"\e637"}.layui-icon-layim-uploadfile:before{content:"\e61d"}.layui-icon-delete:before{content:"\e640"}.layui-icon-play:before{content:"\e652"}.layui-icon-top:before{content:"\e604"}.layui-icon-firefox:before{content:"\e686"}.layui-icon-friends:before{content:"\e612"}.layui-icon-refresh-3:before{content:"\e9aa"}.layui-icon-ok:before{content:"\e605"}.layui-icon-layer:before{content:"\e638"}.layui-icon-face-smile-fine:before{content:"\e60c"}.layui-icon-dollar:before{content:"\e659"}.layui-icon-group:before{content:"\e613"}.layui-icon-layim-download:before{content:"\e61e"}.layui-icon-picture-fine:before{content:"\e60d"}.layui-icon-link:before{content:"\e64c"}.layui-icon-diamond:before{content:"\e735"}.layui-icon-log:before{content:"\e60e"}.layui-icon-key:before{content:"\e683"}.layui-icon-rate-solid:before{content:"\e67a"}.layui-icon-fonts-del:before{content:"\e64f"}.layui-icon-unlink:before{content:"\e64d"}.layui-icon-fonts-clear:before{content:"\e639"}.layui-icon-triangle-r:before{content:"\e623"}.layui-icon-circle:before{content:"\e63f"}.layui-icon-radio:before{content:"\e643"}.layui-icon-align-center:before{content:"\e647"}.layui-icon-align-right:before{content:"\e648"}.layui-icon-align-left:before{content:"\e649"}.layui-icon-loading-1:before{content:"\e63e"}.layui-icon-return:before{content:"\e65c"}.layui-icon-fonts-strong:before{content:"\e62b"}.layui-icon-upload:before{content:"\e67c"}.layui-icon-dialogue:before{content:"\e63a"}.layui-icon-video:before{content:"\e6ed"}.layui-icon-headset:before{content:"\e6fc"}.layui-icon-cellphone-fine:before{content:"\e63b"}.layui-icon-add-1:before{content:"\e654"}.layui-icon-face-smile-b:before{content:"\e650"}.layui-icon-fonts-html:before{content:"\e64b"}.layui-icon-screen-full:before{content:"\e622"}.layui-icon-form:before{content:"\e63c"}.layui-icon-cart:before{content:"\e657"}.layui-icon-camera-fill:before{content:"\e65d"}.layui-icon-tabs:before{content:"\e62a"}.layui-icon-heart-fill:before{content:"\e68f"}.layui-icon-fonts-code:before{content:"\e64e"}.layui-icon-ios:before{content:"\e680"}.layui-icon-at:before{content:"\e687"}.layui-icon-fire:before{content:"\e756"}.layui-icon-set:before{content:"\e716"}.layui-icon-fonts-u:before{content:"\e646"}.layui-icon-triangle-d:before{content:"\e625"}.layui-icon-tips:before{content:"\e702"}.layui-icon-picture:before{content:"\e64a"}.layui-icon-more-vertical:before{content:"\e671"}.layui-icon-bluetooth:before{content:"\e689"}.layui-icon-flag:before{content:"\e66c"}.layui-icon-loading:before{content:"\e63d"}.layui-icon-fonts-i:before{content:"\e644"}.layui-icon-refresh-1:before{content:"\e666"}.layui-icon-rmb:before{content:"\e65e"}.layui-icon-addition:before{content:"\e624"}.layui-icon-home:before{content:"\e68e"}.layui-icon-time:before{content:"\e68d"}.layui-icon-user:before{content:"\e770"}.layui-icon-notice:before{content:"\e667"}.layui-icon-chrome:before{content:"\e68a"}.layui-icon-edge:before{content:"\e68b"}.layui-icon-login-weibo:before{content:"\e675"}.layui-icon-voice:before{content:"\e688"}.layui-icon-upload-drag:before{content:"\e681"}.layui-icon-login-qq:before{content:"\e676"}.layui-icon-snowflake:before{content:"\e6b1"}.layui-icon-heart:before{content:"\e68c"}.layui-icon-logout:before{content:"\e682"}.layui-icon-file-b:before{content:"\e655"}.layui-icon-template:before{content:"\e663"}.layui-icon-transfer:before{content:"\e691"}.layui-icon-auz:before{content:"\e672"}.layui-icon-console:before{content:"\e665"}.layui-icon-app:before{content:"\e653"}.layui-icon-prev:before{content:"\e65a"}.layui-icon-website:before{content:"\e7ae"}.layui-icon-next:before{content:"\e65b"}.layui-icon-component:before{content:"\e857"}.layui-icon-android:before{content:"\e684"}.layui-icon-more:before{content:"\e65f"}.layui-icon-login-wechat:before{content:"\e677"}.layui-icon-shrink-right:before{content:"\e668"}.layui-icon-spread-left:before{content:"\e66b"}.layui-icon-camera:before{content:"\e660"}.layui-icon-note:before{content:"\e66e"}.layui-icon-refresh:before{content:"\e669"}.layui-icon-female:before{content:"\e661"}.layui-icon-male:before{content:"\e662"}.layui-icon-screen-restore:before{content:"\e758"}.layui-icon-password:before{content:"\e673"}.layui-icon-senior:before{content:"\e674"}.layui-icon-theme:before{content:"\e66a"}.layui-icon-tread:before{content:"\e6c5"}.layui-icon-praise:before{content:"\e6c6"}.layui-icon-star-fill:before{content:"\e658"}.layui-icon-rate:before{content:"\e67b"}.layui-icon-template-1:before{content:"\e656"}.layui-icon-vercode:before{content:"\e679"}.layui-icon-service:before{content:"\e626"}.layui-icon-cellphone:before{content:"\e678"}.layui-icon-print:before{content:"\e66d"}.layui-icon-cols:before{content:"\e610"}.layui-icon-wifi:before{content:"\e7e0"}.layui-icon-export:before{content:"\e67d"}.layui-icon-rss:before{content:"\e808"}.layui-icon-slider:before{content:"\e714"}.layui-icon-email:before{content:"\e618"}.layui-icon-subtraction:before{content:"\e67e"}.layui-icon-mike:before{content:"\e6dc"}.layui-icon-light:before{content:"\e748"}.layui-icon-gift:before{content:"\e627"}.layui-icon-mute:before{content:"\e685"}.layui-icon-reduce-circle:before{content:"\e616"}.layui-icon-music:before{content:"\e690"}.layui-main{width:1140px;margin:0 auto}.layui-header{z-index:1000;height:60px}.layui-header a:hover{transition:all .5s;-webkit-transition:all .5s}.layui-side{position:fixed;left:0;top:0;bottom:0;z-index:999;width:200px;overflow-x:hidden}.layui-side-scroll{position:relative;width:220px;height:100%;overflow-x:hidden}.layui-body{position:absolute;left:200px;right:0;top:0;bottom:0;z-index:998;width:auto;overflow-y:auto;box-sizing:border-box}.layui-layout-body{overflow:hidden}.layui-layout-admin .layui-header{background-color:#23262E}.layui-layout-admin .layui-side{top:60px;width:200px;overflow-x:hidden}.layui-layout-admin .layui-body{position:fixed;top:60px;bottom:44px}.layui-layout-admin .layui-main{width:auto;margin:0 15px}.layui-layout-admin .layui-footer{position:fixed;left:200px;right:0;bottom:0;height:44px;line-height:44px;padding:0 15px;background-color:#eee}.layui-layout-admin .layui-logo{position:absolute;left:0;top:0;width:200px;height:100%;line-height:60px;text-align:center;color:#009688;font-size:16px}.layui-layout-admin .layui-header .layui-nav{background:0 0}.layui-layout-left{position:absolute!important;left:200px;top:0}.layui-layout-right{position:absolute!important;right:0;top:0}.layui-container{position:relative;margin:0 auto;padding:0 15px;box-sizing:border-box}.layui-fluid{position:relative;margin:0 auto;padding:0 15px}.layui-row:after,.layui-row:before{content:'';display:block;clear:both}.layui-col-lg1,.layui-col-lg10,.layui-col-lg11,.layui-col-lg12,.layui-col-lg2,.layui-col-lg3,.layui-col-lg4,.layui-col-lg5,.layui-col-lg6,.layui-col-lg7,.layui-col-lg8,.layui-col-lg9,.layui-col-md1,.layui-col-md10,.layui-col-md11,.layui-col-md12,.layui-col-md2,.layui-col-md3,.layui-col-md4,.layui-col-md5,.layui-col-md6,.layui-col-md7,.layui-col-md8,.layui-col-md9,.layui-col-sm1,.layui-col-sm10,.layui-col-sm11,.layui-col-sm12,.layui-col-sm2,.layui-col-sm3,.layui-col-sm4,.layui-col-sm5,.layui-col-sm6,.layui-col-sm7,.layui-col-sm8,.layui-col-sm9,.layui-col-xs1,.layui-col-xs10,.layui-col-xs11,.layui-col-xs12,.layui-col-xs2,.layui-col-xs3,.layui-col-xs4,.layui-col-xs5,.layui-col-xs6,.layui-col-xs7,.layui-col-xs8,.layui-col-xs9{position:relative;display:block;box-sizing:border-box}.layui-col-xs1,.layui-col-xs10,.layui-col-xs11,.layui-col-xs12,.layui-col-xs2,.layui-col-xs3,.layui-col-xs4,.layui-col-xs5,.layui-col-xs6,.layui-col-xs7,.layui-col-xs8,.layui-col-xs9{float:left}.layui-col-xs1{width:8.33333333%}.layui-col-xs2{width:16.66666667%}.layui-col-xs3{width:25%}.layui-col-xs4{width:33.33333333%}.layui-col-xs5{width:41.66666667%}.layui-col-xs6{width:50%}.layui-col-xs7{width:58.33333333%}.layui-col-xs8{width:66.66666667%}.layui-col-xs9{width:75%}.layui-col-xs10{width:83.33333333%}.layui-col-xs11{width:91.66666667%}.layui-col-xs12{width:100%}.layui-col-xs-offset1{margin-left:8.33333333%}.layui-col-xs-offset2{margin-left:16.66666667%}.layui-col-xs-offset3{margin-left:25%}.layui-col-xs-offset4{margin-left:33.33333333%}.layui-col-xs-offset5{margin-left:41.66666667%}.layui-col-xs-offset6{margin-left:50%}.layui-col-xs-offset7{margin-left:58.33333333%}.layui-col-xs-offset8{margin-left:66.66666667%}.layui-col-xs-offset9{margin-left:75%}.layui-col-xs-offset10{margin-left:83.33333333%}.layui-col-xs-offset11{margin-left:91.66666667%}.layui-col-xs-offset12{margin-left:100%}@media screen and (max-width:768px){.layui-hide-xs{display:none!important}.layui-show-xs-block{display:block!important}.layui-show-xs-inline{display:inline!important}.layui-show-xs-inline-block{display:inline-block!important}}@media screen and (min-width:768px){.layui-container{width:750px}.layui-hide-sm{display:none!important}.layui-show-sm-block{display:block!important}.layui-show-sm-inline{display:inline!important}.layui-show-sm-inline-block{display:inline-block!important}.layui-col-sm1,.layui-col-sm10,.layui-col-sm11,.layui-col-sm12,.layui-col-sm2,.layui-col-sm3,.layui-col-sm4,.layui-col-sm5,.layui-col-sm6,.layui-col-sm7,.layui-col-sm8,.layui-col-sm9{float:left}.layui-col-sm1{width:8.33333333%}.layui-col-sm2{width:16.66666667%}.layui-col-sm3{width:25%}.layui-col-sm4{width:33.33333333%}.layui-col-sm5{width:41.66666667%}.layui-col-sm6{width:50%}.layui-col-sm7{width:58.33333333%}.layui-col-sm8{width:66.66666667%}.layui-col-sm9{width:75%}.layui-col-sm10{width:83.33333333%}.layui-col-sm11{width:91.66666667%}.layui-col-sm12{width:100%}.layui-col-sm-offset1{margin-left:8.33333333%}.layui-col-sm-offset2{margin-left:16.66666667%}.layui-col-sm-offset3{margin-left:25%}.layui-col-sm-offset4{margin-left:33.33333333%}.layui-col-sm-offset5{margin-left:41.66666667%}.layui-col-sm-offset6{margin-left:50%}.layui-col-sm-offset7{margin-left:58.33333333%}.layui-col-sm-offset8{margin-left:66.66666667%}.layui-col-sm-offset9{margin-left:75%}.layui-col-sm-offset10{margin-left:83.33333333%}.layui-col-sm-offset11{margin-left:91.66666667%}.layui-col-sm-offset12{margin-left:100%}}@media screen and (min-width:992px){.layui-container{width:970px}.layui-hide-md{display:none!important}.layui-show-md-block{display:block!important}.layui-show-md-inline{display:inline!important}.layui-show-md-inline-block{display:inline-block!important}.layui-col-md1,.layui-col-md10,.layui-col-md11,.layui-col-md12,.layui-col-md2,.layui-col-md3,.layui-col-md4,.layui-col-md5,.layui-col-md6,.layui-col-md7,.layui-col-md8,.layui-col-md9{float:left}.layui-col-md1{width:8.33333333%}.layui-col-md2{width:16.66666667%}.layui-col-md3{width:25%}.layui-col-md4{width:33.33333333%}.layui-col-md5{width:41.66666667%}.layui-col-md6{width:50%}.layui-col-md7{width:58.33333333%}.layui-col-md8{width:66.66666667%}.layui-col-md9{width:75%}.layui-col-md10{width:83.33333333%}.layui-col-md11{width:91.66666667%}.layui-col-md12{width:100%}.layui-col-md-offset1{margin-left:8.33333333%}.layui-col-md-offset2{margin-left:16.66666667%}.layui-col-md-offset3{margin-left:25%}.layui-col-md-offset4{margin-left:33.33333333%}.layui-col-md-offset5{margin-left:41.66666667%}.layui-col-md-offset6{margin-left:50%}.layui-col-md-offset7{margin-left:58.33333333%}.layui-col-md-offset8{margin-left:66.66666667%}.layui-col-md-offset9{margin-left:75%}.layui-col-md-offset10{margin-left:83.33333333%}.layui-col-md-offset11{margin-left:91.66666667%}.layui-col-md-offset12{margin-left:100%}}@media screen and (min-width:1200px){.layui-container{width:1170px}.layui-hide-lg{display:none!important}.layui-show-lg-block{display:block!important}.layui-show-lg-inline{display:inline!important}.layui-show-lg-inline-block{display:inline-block!important}.layui-col-lg1,.layui-col-lg10,.layui-col-lg11,.layui-col-lg12,.layui-col-lg2,.layui-col-lg3,.layui-col-lg4,.layui-col-lg5,.layui-col-lg6,.layui-col-lg7,.layui-col-lg8,.layui-col-lg9{float:left}.layui-col-lg1{width:8.33333333%}.layui-col-lg2{width:16.66666667%}.layui-col-lg3{width:25%}.layui-col-lg4{width:33.33333333%}.layui-col-lg5{width:41.66666667%}.layui-col-lg6{width:50%}.layui-col-lg7{width:58.33333333%}.layui-col-lg8{width:66.66666667%}.layui-col-lg9{width:75%}.layui-col-lg10{width:83.33333333%}.layui-col-lg11{width:91.66666667%}.layui-col-lg12{width:100%}.layui-col-lg-offset1{margin-left:8.33333333%}.layui-col-lg-offset2{margin-left:16.66666667%}.layui-col-lg-offset3{margin-left:25%}.layui-col-lg-offset4{margin-left:33.33333333%}.layui-col-lg-offset5{margin-left:41.66666667%}.layui-col-lg-offset6{margin-left:50%}.layui-col-lg-offset7{margin-left:58.33333333%}.layui-col-lg-offset8{margin-left:66.66666667%}.layui-col-lg-offset9{margin-left:75%}.layui-col-lg-offset10{margin-left:83.33333333%}.layui-col-lg-offset11{margin-left:91.66666667%}.layui-col-lg-offset12{margin-left:100%}}.layui-col-space1{margin:-.5px}.layui-col-space1>*{padding:.5px}.layui-col-space2{margin:-1px}.layui-col-space2>*{padding:1px}.layui-col-space4{margin:-2px}.layui-col-space4>*{padding:2px}.layui-col-space5{margin:-2.5px}.layui-col-space5>*{padding:2.5px}.layui-col-space6{margin:-3px}.layui-col-space6>*{padding:3px}.layui-col-space8{margin:-4px}.layui-col-space8>*{padding:4px}.layui-col-space10{margin:-5px}.layui-col-space10>*{padding:5px}.layui-col-space12{margin:-6px}.layui-col-space12>*{padding:6px}.layui-col-space14{margin:-7px}.layui-col-space14>*{padding:7px}.layui-col-space15{margin:-7.5px}.layui-col-space15>*{padding:7.5px}.layui-col-space16{margin:-8px}.layui-col-space16>*{padding:8px}.layui-col-space18{margin:-9px}.layui-col-space18>*{padding:9px}.layui-col-space20{margin:-10px}.layui-col-space20>*{padding:10px}.layui-col-space22{margin:-11px}.layui-col-space22>*{padding:11px}.layui-col-space24{margin:-12px}.layui-col-space24>*{padding:12px}.layui-col-space25{margin:-12.5px}.layui-col-space25>*{padding:12.5px}.layui-col-space26{margin:-13px}.layui-col-space26>*{padding:13px}.layui-col-space28{margin:-14px}.layui-col-space28>*{padding:14px}.layui-col-space30{margin:-15px}.layui-col-space30>*{padding:15px}.layui-btn,.layui-input,.layui-select,.layui-textarea,.layui-upload-button{outline:0;-webkit-appearance:none;transition:all .3s;-webkit-transition:all .3s;box-sizing:border-box}.layui-elem-quote{margin-bottom:10px;padding:15px;line-height:22px;border-left:5px solid #009688;border-radius:0 2px 2px 0;background-color:#f2f2f2}.layui-quote-nm{border-style:solid;border-width:1px 1px 1px 5px;background:0 0}.layui-elem-field{margin-bottom:10px;padding:0;border-width:1px;border-style:solid}.layui-elem-field legend{margin-left:20px;padding:0 10px;font-size:20px;font-weight:300}.layui-field-title{margin:10px 0 20px;border-width:1px 0 0}.layui-field-box{padding:10px 15px}.layui-field-title .layui-field-box{padding:10px 0}.layui-progress{position:relative;height:6px;border-radius:20px;background-color:#e2e2e2}.layui-progress-bar{position:absolute;left:0;top:0;width:0;max-width:100%;height:6px;border-radius:20px;text-align:right;background-color:#5FB878;transition:all .3s;-webkit-transition:all .3s}.layui-progress-big,.layui-progress-big .layui-progress-bar{height:18px;line-height:18px}.layui-progress-text{position:relative;top:-20px;line-height:18px;font-size:12px;color:#666}.layui-progress-big .layui-progress-text{position:static;padding:0 10px;color:#fff}.layui-collapse{border-width:1px;border-style:solid;border-radius:2px}.layui-colla-content,.layui-colla-item{border-top-width:1px;border-top-style:solid}.layui-colla-item:first-child{border-top:none}.layui-colla-title{position:relative;height:42px;line-height:42px;padding:0 15px 0 35px;color:#333;background-color:#f2f2f2;cursor:pointer;font-size:14px;overflow:hidden}.layui-colla-content{display:none;padding:10px 15px;line-height:22px;color:#666}.layui-colla-icon{position:absolute;left:15px;top:0;font-size:14px}.layui-card{margin-bottom:15px;border-radius:2px;background-color:#fff;box-shadow:0 1px 2px 0 rgba(0,0,0,.05)}.layui-card:last-child{margin-bottom:0}.layui-card-header{position:relative;height:42px;line-height:42px;padding:0 15px;border-bottom:1px solid #f6f6f6;color:#333;border-radius:2px 2px 0 0;font-size:14px}.layui-bg-black,.layui-bg-blue,.layui-bg-cyan,.layui-bg-green,.layui-bg-orange,.layui-bg-red{color:#fff!important}.layui-card-body{position:relative;padding:10px 15px;line-height:24px}.layui-card-body[pad15]{padding:15px}.layui-card-body[pad20]{padding:20px}.layui-card-body .layui-table{margin:5px 0}.layui-card .layui-tab{margin:0}.layui-panel-window{position:relative;padding:15px;border-radius:0;border-top:5px solid #E6E6E6;background-color:#fff}.layui-auxiliar-moving{position:fixed;left:0;right:0;top:0;bottom:0;width:100%;height:100%;background:0 0;z-index:9999999999}.layui-form-label,.layui-form-mid,.layui-form-select,.layui-input-block,.layui-input-inline,.layui-textarea{position:relative}.layui-bg-red{background-color:#FF5722!important}.layui-bg-orange{background-color:#FFB800!important}.layui-bg-green{background-color:#009688!important}.layui-bg-cyan{background-color:#2F4056!important}.layui-bg-blue{background-color:#1E9FFF!important}.layui-bg-black{background-color:#393D49!important}.layui-bg-gray{background-color:#eee!important;color:#666!important}.layui-badge-rim,.layui-colla-content,.layui-colla-item,.layui-collapse,.layui-elem-field,.layui-form-pane .layui-form-item[pane],.layui-form-pane .layui-form-label,.layui-input,.layui-layedit,.layui-layedit-tool,.layui-quote-nm,.layui-select,.layui-tab-bar,.layui-tab-card,.layui-tab-title,.layui-tab-title .layui-this:after,.layui-textarea{border-color:#e6e6e6}.layui-timeline-item:before,hr{background-color:#e6e6e6}.layui-text{line-height:22px;font-size:14px;color:#666}.layui-text h1,.layui-text h2,.layui-text h3{font-weight:500;color:#333}.layui-text h1{font-size:30px}.layui-text h2{font-size:24px}.layui-text h3{font-size:18px}.layui-text a:not(.layui-btn){color:#01AAED}.layui-text a:not(.layui-btn):hover{text-decoration:underline}.layui-text ul{padding:5px 0 5px 15px}.layui-text ul li{margin-top:5px;list-style-type:disc}.layui-text em,.layui-word-aux{color:#999!important;padding:0 5px!important}.layui-btn{display:inline-block;height:38px;line-height:38px;padding:0 18px;background-color:#009688;color:#fff;white-space:nowrap;text-align:center;font-size:14px;border:none;border-radius:2px;cursor:pointer}.layui-btn:hover{opacity:.8;filter:alpha(opacity=80);color:#fff}.layui-btn:active{opacity:1;filter:alpha(opacity=100)}.layui-btn+.layui-btn{margin-left:10px}.layui-btn-container{font-size:0}.layui-btn-container .layui-btn{margin-right:10px;margin-bottom:10px}.layui-btn-container .layui-btn+.layui-btn{margin-left:0}.layui-table .layui-btn-container .layui-btn{margin-bottom:9px}.layui-btn-radius{border-radius:100px}.layui-btn .layui-icon{margin-right:3px;font-size:18px;vertical-align:bottom;vertical-align:middle\9}.layui-btn-primary{border:1px solid #C9C9C9;background-color:#fff;color:#555}.layui-btn-primary:hover{border-color:#009688;color:#333}.layui-btn-normal{background-color:#1E9FFF}.layui-btn-warm{background-color:#FFB800}.layui-btn-danger{background-color:#FF5722}.layui-btn-checked{background-color:#5FB878}.layui-btn-disabled,.layui-btn-disabled:active,.layui-btn-disabled:hover{border:1px solid #e6e6e6;background-color:#FBFBFB;color:#C9C9C9;cursor:not-allowed;opacity:1}.layui-btn-lg{height:44px;line-height:44px;padding:0 25px;font-size:16px}.layui-btn-sm{height:30px;line-height:30px;padding:0 10px;font-size:12px}.layui-btn-sm i{font-size:16px!important}.layui-btn-xs{height:22px;line-height:22px;padding:0 5px;font-size:12px}.layui-btn-xs i{font-size:14px!important}.layui-btn-group{display:inline-block;vertical-align:middle;font-size:0}.layui-btn-group .layui-btn{margin-left:0!important;margin-right:0!important;border-left:1px solid rgba(255,255,255,.5);border-radius:0}.layui-btn-group .layui-btn-primary{border-left:none}.layui-btn-group .layui-btn-primary:hover{border-color:#C9C9C9;color:#009688}.layui-btn-group .layui-btn:first-child{border-left:none;border-radius:2px 0 0 2px}.layui-btn-group .layui-btn-primary:first-child{border-left:1px solid #c9c9c9}.layui-btn-group .layui-btn:last-child{border-radius:0 2px 2px 0}.layui-btn-group .layui-btn+.layui-btn{margin-left:0}.layui-btn-group+.layui-btn-group{margin-left:10px}.layui-btn-fluid{width:100%}.layui-input,.layui-select,.layui-textarea{height:38px;line-height:1.3;line-height:38px\9;border-width:1px;border-style:solid;background-color:#fff;border-radius:2px}.layui-input::-webkit-input-placeholder,.layui-select::-webkit-input-placeholder,.layui-textarea::-webkit-input-placeholder{line-height:1.3}.layui-input,.layui-textarea{display:block;width:100%;padding-left:10px}.layui-input:hover,.layui-textarea:hover{border-color:#D2D2D2!important}.layui-input:focus,.layui-textarea:focus{border-color:#C9C9C9!important}.layui-textarea{min-height:100px;height:auto;line-height:20px;padding:6px 10px;resize:vertical}.layui-select{padding:0 10px}.layui-form input[type=checkbox],.layui-form input[type=radio],.layui-form select{display:none}.layui-form [lay-ignore]{display:initial}.layui-form-item{margin-bottom:15px;clear:both;*zoom:1}.layui-form-item:after{content:'\20';clear:both;*zoom:1;display:block;height:0}.layui-form-label{float:left;display:block;padding:9px 15px;width:80px;font-weight:400;line-height:20px;text-align:right}.layui-form-label-col{display:block;float:none;padding:9px 0;line-height:20px;text-align:left}.layui-form-item .layui-inline{margin-bottom:5px;margin-right:10px}.layui-input-block{margin-left:110px;min-height:36px}.layui-input-inline{display:inline-block;vertical-align:middle}.layui-form-item .layui-input-inline{float:left;width:190px;margin-right:10px}.layui-form-text .layui-input-inline{width:auto}.layui-form-mid{float:left;display:block;padding:9px 0!important;line-height:20px;margin-right:10px}.layui-form-danger+.layui-form-select .layui-input,.layui-form-danger:focus{border-color:#FF5722!important}.layui-form-select .layui-input{padding-right:30px;cursor:pointer}.layui-form-select .layui-edge{position:absolute;right:10px;top:50%;margin-top:-3px;cursor:pointer;border-width:6px;border-top-color:#c2c2c2;border-top-style:solid;transition:all .3s;-webkit-transition:all .3s}.layui-form-select dl{display:none;position:absolute;left:0;top:42px;padding:5px 0;z-index:899;min-width:100%;border:1px solid #d2d2d2;max-height:300px;overflow-y:auto;background-color:#fff;border-radius:2px;box-shadow:0 2px 4px rgba(0,0,0,.12);box-sizing:border-box}.layui-form-select dl dd,.layui-form-select dl dt{padding:0 10px;line-height:36px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.layui-form-select dl dt{font-size:12px;color:#999}.layui-form-select dl dd{cursor:pointer}.layui-form-select dl dd:hover{background-color:#f2f2f2;-webkit-transition:.5s all;transition:.5s all}.layui-form-select .layui-select-group dd{padding-left:20px}.layui-form-select dl dd.layui-select-tips{padding-left:10px!important;color:#999}.layui-form-select dl dd.layui-this{background-color:#5FB878;color:#fff}.layui-form-checkbox,.layui-form-select dl dd.layui-disabled{background-color:#fff}.layui-form-selected dl{display:block}.layui-form-checkbox,.layui-form-checkbox *,.layui-form-switch{display:inline-block;vertical-align:middle}.layui-form-selected .layui-edge{margin-top:-9px;-webkit-transform:rotate(180deg);transform:rotate(180deg);margin-top:-3px\9}:root .layui-form-selected .layui-edge{margin-top:-9px\0/IE9}.layui-form-selectup dl{top:auto;bottom:42px}.layui-select-none{margin:5px 0;text-align:center;color:#999}.layui-select-disabled .layui-disabled{border-color:#eee!important}.layui-select-disabled .layui-edge{border-top-color:#d2d2d2}.layui-form-checkbox{position:relative;height:30px;line-height:30px;margin-right:10px;padding-right:30px;cursor:pointer;font-size:0;-webkit-transition:.1s linear;transition:.1s linear;box-sizing:border-box}.layui-form-checkbox span{padding:0 10px;height:100%;font-size:14px;border-radius:2px 0 0 2px;background-color:#d2d2d2;color:#fff;overflow:hidden}.layui-form-checkbox:hover span{background-color:#c2c2c2}.layui-form-checkbox i{position:absolute;right:0;top:0;width:30px;height:28px;border:1px solid #d2d2d2;border-left:none;border-radius:0 2px 2px 0;color:#fff;font-size:20px;text-align:center}.layui-form-checkbox:hover i{border-color:#c2c2c2;color:#c2c2c2}.layui-form-checked,.layui-form-checked:hover{border-color:#5FB878}.layui-form-checked span,.layui-form-checked:hover span{background-color:#5FB878}.layui-form-checked i,.layui-form-checked:hover i{color:#5FB878}.layui-form-item .layui-form-checkbox{margin-top:4px}.layui-form-checkbox[lay-skin=primary]{height:auto!important;line-height:normal!important;min-width:18px;min-height:18px;border:none!important;margin-right:0;padding-left:28px;padding-right:0;background:0 0}.layui-form-checkbox[lay-skin=primary] span{padding-left:0;padding-right:15px;line-height:18px;background:0 0;color:#666}.layui-form-checkbox[lay-skin=primary] i{right:auto;left:0;width:16px;height:16px;line-height:16px;border:1px solid #d2d2d2;font-size:12px;border-radius:2px;background-color:#fff;-webkit-transition:.1s linear;transition:.1s linear}.layui-form-checkbox[lay-skin=primary]:hover i{border-color:#5FB878;color:#fff}.layui-form-checked[lay-skin=primary] i{border-color:#5FB878!important;background-color:#5FB878;color:#fff}.layui-checkbox-disbaled[lay-skin=primary] span{background:0 0!important;color:#c2c2c2}.layui-checkbox-disbaled[lay-skin=primary]:hover i{border-color:#d2d2d2}.layui-form-item .layui-form-checkbox[lay-skin=primary]{margin-top:10px}.layui-form-switch{position:relative;height:22px;line-height:22px;min-width:35px;padding:0 5px;margin-top:8px;border:1px solid #d2d2d2;border-radius:20px;cursor:pointer;background-color:#fff;-webkit-transition:.1s linear;transition:.1s linear}.layui-form-switch i{position:absolute;left:5px;top:3px;width:16px;height:16px;border-radius:20px;background-color:#d2d2d2;-webkit-transition:.1s linear;transition:.1s linear}.layui-form-switch em{position:relative;top:0;width:25px;margin-left:21px;padding:0!important;text-align:center!important;color:#999!important;font-style:normal!important;font-size:12px}.layui-form-onswitch{border-color:#5FB878;background-color:#5FB878}.layui-checkbox-disbaled,.layui-checkbox-disbaled i{border-color:#e2e2e2!important}.layui-form-onswitch i{left:100%;margin-left:-21px;background-color:#fff}.layui-form-onswitch em{margin-left:5px;margin-right:21px;color:#fff!important}.layui-checkbox-disbaled span{background-color:#e2e2e2!important}.layui-checkbox-disbaled:hover i{color:#fff!important}[lay-radio]{display:none}.layui-form-radio,.layui-form-radio *{display:inline-block;vertical-align:middle}.layui-form-radio{line-height:28px;margin:6px 10px 0 0;padding-right:10px;cursor:pointer;font-size:0}.layui-form-radio *{font-size:14px}.layui-form-radio>i{margin-right:8px;font-size:22px;color:#c2c2c2}.layui-form-radio>i:hover,.layui-form-radioed>i{color:#5FB878}.layui-radio-disbaled>i{color:#e2e2e2!important}.layui-form-pane .layui-form-label{width:110px;padding:8px 15px;height:38px;line-height:20px;border-width:1px;border-style:solid;border-radius:2px 0 0 2px;text-align:center;background-color:#FBFBFB;overflow:hidden;box-sizing:border-box}.layui-form-pane .layui-input-inline{margin-left:-1px}.layui-form-pane .layui-input-block{margin-left:110px;left:-1px}.layui-form-pane .layui-input{border-radius:0 2px 2px 0}.layui-form-pane .layui-form-text .layui-form-label{float:none;width:100%;border-radius:2px;box-sizing:border-box;text-align:left}.layui-form-pane .layui-form-text .layui-input-inline{display:block;margin:0;top:-1px;clear:both}.layui-form-pane .layui-form-text .layui-input-block{margin:0;left:0;top:-1px}.layui-form-pane .layui-form-text .layui-textarea{min-height:100px;border-radius:0 0 2px 2px}.layui-form-pane .layui-form-checkbox{margin:4px 0 4px 10px}.layui-form-pane .layui-form-radio,.layui-form-pane .layui-form-switch{margin-top:6px;margin-left:10px}.layui-form-pane .layui-form-item[pane]{position:relative;border-width:1px;border-style:solid}.layui-form-pane .layui-form-item[pane] .layui-form-label{position:absolute;left:0;top:0;height:100%;border-width:0 1px 0 0}.layui-form-pane .layui-form-item[pane] .layui-input-inline{margin-left:110px}@media screen and (max-width:450px){.layui-form-item .layui-form-label{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-form-item .layui-inline{display:block;margin-right:0;margin-bottom:20px;clear:both}.layui-form-item .layui-inline:after{content:'\20';clear:both;display:block;height:0}.layui-form-item .layui-input-inline{display:block;float:none;left:-3px;width:auto;margin:0 0 10px 112px}.layui-form-item .layui-input-inline+.layui-form-mid{margin-left:110px;top:-5px;padding:0}.layui-form-item .layui-form-checkbox{margin-right:5px;margin-bottom:5px}}.layui-layedit{border-width:1px;border-style:solid;border-radius:2px}.layui-layedit-tool{padding:3px 5px;border-bottom-width:1px;border-bottom-style:solid;font-size:0}.layedit-tool-fixed{position:fixed;top:0;border-top:1px solid #e2e2e2}.layui-layedit-tool .layedit-tool-mid,.layui-layedit-tool .layui-icon{display:inline-block;vertical-align:middle;text-align:center;font-size:14px}.layui-layedit-tool .layui-icon{position:relative;width:32px;height:30px;line-height:30px;margin:3px 5px;color:#777;cursor:pointer;border-radius:2px}.layui-layedit-tool .layui-icon:hover{color:#393D49}.layui-layedit-tool .layui-icon:active{color:#000}.layui-layedit-tool .layedit-tool-active{background-color:#e2e2e2;color:#000}.layui-layedit-tool .layui-disabled,.layui-layedit-tool .layui-disabled:hover{color:#d2d2d2;cursor:not-allowed}.layui-layedit-tool .layedit-tool-mid{width:1px;height:18px;margin:0 10px;background-color:#d2d2d2}.layedit-tool-html{width:50px!important;font-size:30px!important}.layedit-tool-b,.layedit-tool-code,.layedit-tool-help{font-size:16px!important}.layedit-tool-d,.layedit-tool-face,.layedit-tool-image,.layedit-tool-unlink{font-size:18px!important}.layedit-tool-image input{position:absolute;font-size:0;left:0;top:0;width:100%;height:100%;opacity:.01;filter:Alpha(opacity=1);cursor:pointer}.layui-layedit-iframe iframe{display:block;width:100%}#LAY_layedit_code{overflow:hidden}.layui-laypage{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;margin:10px 0;font-size:0}.layui-laypage>a:first-child,.layui-laypage>a:first-child em{border-radius:2px 0 0 2px}.layui-laypage>a:last-child,.layui-laypage>a:last-child em{border-radius:0 2px 2px 0}.layui-laypage>:first-child{margin-left:0!important}.layui-laypage>:last-child{margin-right:0!important}.layui-laypage a,.layui-laypage button,.layui-laypage input,.layui-laypage select,.layui-laypage span{border:1px solid #e2e2e2}.layui-laypage a,.layui-laypage span{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;padding:0 15px;height:28px;line-height:28px;margin:0 -1px 5px 0;background-color:#fff;color:#333;font-size:12px}.layui-flow-more a *,.layui-laypage input,.layui-table-view select[lay-ignore]{display:inline-block}.layui-laypage a:hover{color:#009688}.layui-laypage em{font-style:normal}.layui-laypage .layui-laypage-spr{color:#999;font-weight:700}.layui-laypage a{text-decoration:none}.layui-laypage .layui-laypage-curr{position:relative}.layui-laypage .layui-laypage-curr em{position:relative;color:#fff}.layui-laypage .layui-laypage-curr .layui-laypage-em{position:absolute;left:-1px;top:-1px;padding:1px;width:100%;height:100%;background-color:#009688}.layui-laypage-em{border-radius:2px}.layui-laypage-next em,.layui-laypage-prev em{font-family:Sim sun;font-size:16px}.layui-laypage .layui-laypage-count,.layui-laypage .layui-laypage-limits,.layui-laypage .layui-laypage-refresh,.layui-laypage .layui-laypage-skip{margin-left:10px;margin-right:10px;padding:0;border:none}.layui-laypage .layui-laypage-limits,.layui-laypage .layui-laypage-refresh{vertical-align:top}.layui-laypage .layui-laypage-refresh i{font-size:18px;cursor:pointer}.layui-laypage select{height:22px;padding:3px;border-radius:2px;cursor:pointer}.layui-laypage .layui-laypage-skip{height:30px;line-height:30px;color:#999}.layui-laypage button,.layui-laypage input{height:30px;line-height:30px;border-radius:2px;vertical-align:top;background-color:#fff;box-sizing:border-box}.layui-laypage input{width:40px;margin:0 10px;padding:0 3px;text-align:center}.layui-laypage input:focus,.layui-laypage select:focus{border-color:#009688!important}.layui-laypage button{margin-left:10px;padding:0 10px;cursor:pointer}.layui-table,.layui-table-view{margin:10px 0}.layui-flow-more{margin:10px 0;text-align:center;color:#999;font-size:14px}.layui-flow-more a{height:32px;line-height:32px}.layui-flow-more a *{vertical-align:top}.layui-flow-more a cite{padding:0 20px;border-radius:3px;background-color:#eee;color:#333;font-style:normal}.layui-flow-more a cite:hover{opacity:.8}.layui-flow-more a i{font-size:30px;color:#737383}.layui-table{width:100%;background-color:#fff;color:#666}.layui-table tr{transition:all .3s;-webkit-transition:all .3s}.layui-table th{text-align:left;font-weight:400}.layui-table tbody tr:hover,.layui-table thead tr,.layui-table-click,.layui-table-header,.layui-table-hover,.layui-table-mend,.layui-table-patch,.layui-table-tool,.layui-table-total,.layui-table-total tr,.layui-table[lay-even] tr:nth-child(even){background-color:#f2f2f2}.layui-table td,.layui-table th,.layui-table-col-set,.layui-table-fixed-r,.layui-table-grid-down,.layui-table-header,.layui-table-page,.layui-table-tips-main,.layui-table-tool,.layui-table-total,.layui-table-view,.layui-table[lay-skin=line],.layui-table[lay-skin=row]{border-width:1px;border-style:solid;border-color:#e6e6e6}.layui-table td,.layui-table th{position:relative;padding:9px 15px;min-height:20px;line-height:20px;font-size:14px}.layui-table[lay-skin=line] td,.layui-table[lay-skin=line] th{border-width:0 0 1px}.layui-table[lay-skin=row] td,.layui-table[lay-skin=row] th{border-width:0 1px 0 0}.layui-table[lay-skin=nob] td,.layui-table[lay-skin=nob] th{border:none}.layui-table img{max-width:100px}.layui-table[lay-size=lg] td,.layui-table[lay-size=lg] th{padding:15px 30px}.layui-table-view .layui-table[lay-size=lg] .layui-table-cell{height:40px;line-height:40px}.layui-table[lay-size=sm] td,.layui-table[lay-size=sm] th{font-size:12px;padding:5px 10px}.layui-table-view .layui-table[lay-size=sm] .layui-table-cell{height:20px;line-height:20px}.layui-table[lay-data]{display:none}.layui-table-box{position:relative;overflow:hidden}.layui-table-view .layui-table{position:relative;width:auto;margin:0}.layui-table-view .layui-table[lay-skin=line]{border-width:0 1px 0 0}.layui-table-view .layui-table[lay-skin=row]{border-width:0 0 1px}.layui-table-view .layui-table td,.layui-table-view .layui-table th{padding:5px 0;border-top:none;border-left:none}.layui-table-view .layui-table th.layui-unselect .layui-table-cell span{cursor:pointer}.layui-table-view .layui-table td{cursor:default}.layui-table-view .layui-table td[data-edit=text]{cursor:text}.layui-table-view .layui-form-checkbox[lay-skin=primary] i{width:18px;height:18px}.layui-table-view .layui-form-radio{line-height:0;padding:0}.layui-table-view .layui-form-radio>i{margin:0;font-size:20px}.layui-table-init{position:absolute;left:0;top:0;width:100%;height:100%;text-align:center;z-index:110}.layui-table-init .layui-icon{position:absolute;left:50%;top:50%;margin:-15px 0 0 -15px;font-size:30px;color:#c2c2c2}.layui-table-header{border-width:0 0 1px;overflow:hidden}.layui-table-header .layui-table{margin-bottom:-1px}.layui-table-tool .layui-inline[lay-event]{position:relative;width:26px;height:26px;padding:5px;line-height:16px;margin-right:10px;text-align:center;color:#333;border:1px solid #ccc;cursor:pointer;-webkit-transition:.5s all;transition:.5s all}.layui-table-tool .layui-inline[lay-event]:hover{border:1px solid #999}.layui-table-tool-temp{padding-right:120px}.layui-table-tool-self{position:absolute;right:17px;top:10px}.layui-table-tool .layui-table-tool-self .layui-inline[lay-event]{margin:0 0 0 10px}.layui-table-tool-panel{position:absolute;top:29px;left:-1px;padding:5px 0;min-width:150px;min-height:40px;border:1px solid #d2d2d2;text-align:left;overflow-y:auto;background-color:#fff;box-shadow:0 2px 4px rgba(0,0,0,.12)}.layui-table-cell,.layui-table-tool-panel li{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.layui-table-tool-panel li{padding:0 10px;line-height:30px;-webkit-transition:.5s all;transition:.5s all}.layui-table-tool-panel li .layui-form-checkbox[lay-skin=primary]{width:100%;padding-left:28px}.layui-table-tool-panel li:hover{background-color:#f2f2f2}.layui-table-tool-panel li .layui-form-checkbox[lay-skin=primary] i{position:absolute;left:0;top:0}.layui-table-tool-panel li .layui-form-checkbox[lay-skin=primary] span{padding:0}.layui-table-tool .layui-table-tool-self .layui-table-tool-panel{left:auto;right:-1px}.layui-table-col-set{position:absolute;right:0;top:0;width:20px;height:100%;border-width:0 0 0 1px;background-color:#fff}.layui-table-sort{width:10px;height:20px;margin-left:5px;cursor:pointer!important}.layui-table-sort .layui-edge{position:absolute;left:5px;border-width:5px}.layui-table-sort .layui-table-sort-asc{top:3px;border-top:none;border-bottom-style:solid;border-bottom-color:#b2b2b2}.layui-table-sort .layui-table-sort-asc:hover{border-bottom-color:#666}.layui-table-sort .layui-table-sort-desc{bottom:5px;border-bottom:none;border-top-style:solid;border-top-color:#b2b2b2}.layui-table-sort .layui-table-sort-desc:hover{border-top-color:#666}.layui-table-sort[lay-sort=asc] .layui-table-sort-asc{border-bottom-color:#000}.layui-table-sort[lay-sort=desc] .layui-table-sort-desc{border-top-color:#000}.layui-table-cell{height:28px;line-height:28px;padding:0 15px;position:relative;box-sizing:border-box}.layui-table-cell .layui-form-checkbox[lay-skin=primary]{top:-1px;padding:0}.layui-table-cell .layui-table-link{color:#01AAED}.laytable-cell-checkbox,.laytable-cell-numbers,.laytable-cell-radio,.laytable-cell-space{padding:0;text-align:center}.layui-table-body{position:relative;overflow:auto;margin-right:-1px;margin-bottom:-1px}.layui-table-body .layui-none{line-height:26px;padding:15px;text-align:center;color:#999}.layui-table-fixed{position:absolute;left:0;top:0;z-index:101}.layui-table-fixed .layui-table-body{overflow:hidden}.layui-table-fixed-l{box-shadow:0 -1px 8px rgba(0,0,0,.08)}.layui-table-fixed-r{left:auto;right:-1px;border-width:0 0 0 1px;box-shadow:-1px 0 8px rgba(0,0,0,.08)}.layui-table-fixed-r .layui-table-header{position:relative;overflow:visible}.layui-table-mend{position:absolute;right:-49px;top:0;height:100%;width:50px}.layui-table-tool{position:relative;z-index:890;width:100%;min-height:50px;line-height:30px;padding:10px 15px;border-width:0 0 1px}.layui-table-tool .layui-btn-container{margin-bottom:-10px}.layui-table-page,.layui-table-total{border-width:1px 0 0;margin-bottom:-1px;overflow:hidden}.layui-table-page{position:relative;width:100%;padding:7px 7px 0;height:41px;font-size:12px;white-space:nowrap}.layui-table-page>div{height:26px}.layui-table-page .layui-laypage{margin:0}.layui-table-page .layui-laypage a,.layui-table-page .layui-laypage span{height:26px;line-height:26px;margin-bottom:10px;border:none;background:0 0}.layui-table-page .layui-laypage a,.layui-table-page .layui-laypage span.layui-laypage-curr{padding:0 12px}.layui-table-page .layui-laypage span{margin-left:0;padding:0}.layui-table-page .layui-laypage .layui-laypage-prev{margin-left:-7px!important}.layui-table-page .layui-laypage .layui-laypage-curr .layui-laypage-em{left:0;top:0;padding:0}.layui-table-page .layui-laypage button,.layui-table-page .layui-laypage input{height:26px;line-height:26px}.layui-table-page .layui-laypage input{width:40px}.layui-table-page .layui-laypage button{padding:0 10px}.layui-table-page select{height:18px}.layui-table-patch .layui-table-cell{padding:0;width:30px}.layui-table-edit{position:absolute;left:0;top:0;width:100%;height:100%;padding:0 14px 1px;border-radius:0;box-shadow:1px 1px 20px rgba(0,0,0,.15)}.layui-table-edit:focus{border-color:#5FB878!important}select.layui-table-edit{padding:0 0 0 10px;border-color:#C9C9C9}.layui-table-view .layui-form-checkbox,.layui-table-view .layui-form-radio,.layui-table-view .layui-form-switch{top:0;margin:0;box-sizing:content-box}.layui-table-view .layui-form-checkbox{top:-1px;height:26px;line-height:26px}.layui-table-view .layui-form-checkbox i{height:26px}.layui-table-grid .layui-table-cell{overflow:visible}.layui-table-grid-down{position:absolute;top:0;right:0;width:26px;height:100%;padding:5px 0;border-width:0 0 0 1px;text-align:center;background-color:#fff;color:#999;cursor:pointer}.layui-table-grid-down .layui-icon{position:absolute;top:50%;left:50%;margin:-8px 0 0 -8px}.layui-table-grid-down:hover{background-color:#fbfbfb}body .layui-table-tips .layui-layer-content{background:0 0;padding:0;box-shadow:0 1px 6px rgba(0,0,0,.12)}.layui-table-tips-main{margin:-44px 0 0 -1px;max-height:150px;padding:8px 15px;font-size:14px;overflow-y:scroll;background-color:#fff;color:#666}.layui-table-tips-c{position:absolute;right:-3px;top:-13px;width:20px;height:20px;padding:3px;cursor:pointer;background-color:#666;border-radius:50%;color:#fff}.layui-table-tips-c:hover{background-color:#777}.layui-table-tips-c:before{position:relative;right:-2px}.layui-upload-file{display:none!important;opacity:.01;filter:Alpha(opacity=1)}.layui-upload-drag,.layui-upload-form,.layui-upload-wrap{display:inline-block}.layui-upload-list{margin:10px 0}.layui-upload-choose{padding:0 10px;color:#999}.layui-upload-drag{position:relative;padding:30px;border:1px dashed #e2e2e2;background-color:#fff;text-align:center;cursor:pointer;color:#999}.layui-upload-drag .layui-icon{font-size:50px;color:#009688}.layui-upload-drag[lay-over]{border-color:#009688}.layui-upload-iframe{position:absolute;width:0;height:0;border:0;visibility:hidden}.layui-upload-wrap{position:relative;vertical-align:middle}.layui-upload-wrap .layui-upload-file{display:block!important;position:absolute;left:0;top:0;z-index:10;font-size:100px;width:100%;height:100%;opacity:.01;filter:Alpha(opacity=1);cursor:pointer}.layui-transfer-active,.layui-transfer-box{display:inline-block;vertical-align:middle}.layui-transfer-box,.layui-transfer-header,.layui-transfer-search{border-width:0;border-style:solid;border-color:#e6e6e6}.layui-transfer-box{position:relative;border-width:1px;width:200px;height:360px;border-radius:2px;background-color:#fff}.layui-transfer-box .layui-form-checkbox{width:100%;margin:0!important}.layui-transfer-header{height:38px;line-height:38px;padding:0 10px;border-bottom-width:1px}.layui-transfer-search{position:relative;padding:10px;border-bottom-width:1px}.layui-transfer-search .layui-input{height:32px;padding-left:30px;font-size:12px}.layui-transfer-search .layui-icon-search{position:absolute;left:20px;top:50%;margin-top:-8px;color:#666}.layui-transfer-active{margin:0 15px}.layui-transfer-active .layui-btn{display:block;margin:0;padding:0 15px;background-color:#5FB878;border-color:#5FB878;color:#fff}.layui-transfer-active .layui-btn-disabled{background-color:#FBFBFB;border-color:#e6e6e6;color:#C9C9C9}.layui-transfer-active .layui-btn:first-child{margin-bottom:15px}.layui-transfer-active .layui-btn .layui-icon{margin:0;font-size:14px!important}.layui-transfer-data{padding:5px 0;overflow:auto}.layui-transfer-data li{height:32px;line-height:32px;padding:0 10px}.layui-transfer-data li:hover{background-color:#f2f2f2;transition:.5s all}.layui-transfer-data .layui-none{padding:15px 10px;text-align:center;color:#999}.layui-nav{position:relative;padding:0 20px;background-color:#393D49;color:#fff;border-radius:2px;font-size:0;box-sizing:border-box}.layui-nav *{font-size:14px}.layui-nav .layui-nav-item{position:relative;display:inline-block;*display:inline;*zoom:1;vertical-align:middle;line-height:60px}.layui-nav .layui-nav-item a{display:block;padding:0 20px;color:#fff;color:rgba(255,255,255,.7);transition:all .3s;-webkit-transition:all .3s}.layui-nav .layui-this:after,.layui-nav-bar,.layui-nav-tree .layui-nav-itemed:after{position:absolute;left:0;top:0;width:0;height:5px;background-color:#5FB878;transition:all .2s;-webkit-transition:all .2s}.layui-nav-bar{z-index:1000}.layui-nav .layui-nav-item a:hover,.layui-nav .layui-this a{color:#fff}.layui-nav .layui-this:after{content:'';top:auto;bottom:0;width:100%}.layui-nav-img{width:30px;height:30px;margin-right:10px;border-radius:50%}.layui-nav .layui-nav-more{content:'';width:0;height:0;border-style:solid dashed dashed;border-color:#fff transparent transparent;overflow:hidden;cursor:pointer;transition:all .2s;-webkit-transition:all .2s;position:absolute;top:50%;right:3px;margin-top:-3px;border-width:6px;border-top-color:rgba(255,255,255,.7)}.layui-nav .layui-nav-mored,.layui-nav-itemed>a .layui-nav-more{margin-top:-9px;border-style:dashed dashed solid;border-color:transparent transparent #fff}.layui-nav-child{display:none;position:absolute;left:0;top:65px;min-width:100%;line-height:36px;padding:5px 0;box-shadow:0 2px 4px rgba(0,0,0,.12);border:1px solid #d2d2d2;background-color:#fff;z-index:100;border-radius:2px;white-space:nowrap}.layui-nav .layui-nav-child a{color:#333}.layui-nav .layui-nav-child a:hover{background-color:#f2f2f2;color:#000}.layui-nav-child dd{position:relative}.layui-nav .layui-nav-child dd.layui-this a,.layui-nav-child dd.layui-this{background-color:#5FB878;color:#fff}.layui-nav-child dd.layui-this:after{display:none}.layui-nav-tree{width:200px;padding:0}.layui-nav-tree .layui-nav-item{display:block;width:100%;line-height:45px}.layui-nav-tree .layui-nav-item a{position:relative;height:45px;line-height:45px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-nav-tree .layui-nav-item a:hover{background-color:#4E5465}.layui-nav-tree .layui-nav-bar{width:5px;height:0;background-color:#009688}.layui-nav-tree .layui-nav-child dd.layui-this,.layui-nav-tree .layui-nav-child dd.layui-this a,.layui-nav-tree .layui-this,.layui-nav-tree .layui-this>a,.layui-nav-tree .layui-this>a:hover{background-color:#009688;color:#fff}.layui-nav-tree .layui-this:after{display:none}.layui-nav-itemed>a,.layui-nav-tree .layui-nav-title a,.layui-nav-tree .layui-nav-title a:hover{color:#fff!important}.layui-nav-tree .layui-nav-child{position:relative;z-index:0;top:0;border:none;box-shadow:none}.layui-nav-tree .layui-nav-child a{height:40px;line-height:40px;color:#fff;color:rgba(255,255,255,.7)}.layui-nav-tree .layui-nav-child,.layui-nav-tree .layui-nav-child a:hover{background:0 0;color:#fff}.layui-nav-tree .layui-nav-more{right:10px}.layui-nav-itemed>.layui-nav-child{display:block;padding:0;background-color:rgba(0,0,0,.3)!important}.layui-nav-itemed>.layui-nav-child>.layui-this>.layui-nav-child{display:block}.layui-nav-side{position:fixed;top:0;bottom:0;left:0;overflow-x:hidden;z-index:999}.layui-bg-blue .layui-nav-bar,.layui-bg-blue .layui-nav-itemed:after,.layui-bg-blue .layui-this:after{background-color:#93D1FF}.layui-bg-blue .layui-nav-child dd.layui-this{background-color:#1E9FFF}.layui-bg-blue .layui-nav-itemed>a,.layui-nav-tree.layui-bg-blue .layui-nav-title a,.layui-nav-tree.layui-bg-blue .layui-nav-title a:hover{background-color:#007DDB!important}.layui-breadcrumb{font-size:0}.layui-breadcrumb>*{font-size:14px}.layui-breadcrumb a{color:#999!important}.layui-breadcrumb a:hover{color:#5FB878!important}.layui-breadcrumb a cite{color:#666;font-style:normal}.layui-breadcrumb span[lay-separator]{margin:0 10px;color:#999}.layui-tab{margin:10px 0;text-align:left!important}.layui-tab[overflow]>.layui-tab-title{overflow:hidden}.layui-tab-title{position:relative;left:0;height:40px;white-space:nowrap;font-size:0;border-bottom-width:1px;border-bottom-style:solid;transition:all .2s;-webkit-transition:all .2s}.layui-tab-title li{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;font-size:14px;transition:all .2s;-webkit-transition:all .2s;position:relative;line-height:40px;min-width:65px;padding:0 15px;text-align:center;cursor:pointer}.layui-tab-title li a{display:block}.layui-tab-title .layui-this{color:#000}.layui-tab-title .layui-this:after{position:absolute;left:0;top:0;content:'';width:100%;height:41px;border-width:1px;border-style:solid;border-bottom-color:#fff;border-radius:2px 2px 0 0;box-sizing:border-box;pointer-events:none}.layui-tab-bar{position:absolute;right:0;top:0;z-index:10;width:30px;height:39px;line-height:39px;border-width:1px;border-style:solid;border-radius:2px;text-align:center;background-color:#fff;cursor:pointer}.layui-tab-bar .layui-icon{position:relative;display:inline-block;top:3px;transition:all .3s;-webkit-transition:all .3s}.layui-tab-item{display:none}.layui-tab-more{padding-right:30px;height:auto!important;white-space:normal!important}.layui-tab-more li.layui-this:after{border-bottom-color:#e2e2e2;border-radius:2px}.layui-tab-more .layui-tab-bar .layui-icon{top:-2px;top:3px\9;-webkit-transform:rotate(180deg);transform:rotate(180deg)}:root .layui-tab-more .layui-tab-bar .layui-icon{top:-2px\0/IE9}.layui-tab-content{padding:10px}.layui-tab-title li .layui-tab-close{position:relative;display:inline-block;width:18px;height:18px;line-height:20px;margin-left:8px;top:1px;text-align:center;font-size:14px;color:#c2c2c2;transition:all .2s;-webkit-transition:all .2s}.layui-tab-title li .layui-tab-close:hover{border-radius:2px;background-color:#FF5722;color:#fff}.layui-tab-brief>.layui-tab-title .layui-this{color:#009688}.layui-tab-brief>.layui-tab-more li.layui-this:after,.layui-tab-brief>.layui-tab-title .layui-this:after{border:none;border-radius:0;border-bottom:2px solid #5FB878}.layui-tab-brief[overflow]>.layui-tab-title .layui-this:after{top:-1px}.layui-tab-card{border-width:1px;border-style:solid;border-radius:2px;box-shadow:0 2px 5px 0 rgba(0,0,0,.1)}.layui-tab-card>.layui-tab-title{background-color:#f2f2f2}.layui-tab-card>.layui-tab-title li{margin-right:-1px;margin-left:-1px}.layui-tab-card>.layui-tab-title .layui-this{background-color:#fff}.layui-tab-card>.layui-tab-title .layui-this:after{border-top:none;border-width:1px;border-bottom-color:#fff}.layui-tab-card>.layui-tab-title .layui-tab-bar{height:40px;line-height:40px;border-radius:0;border-top:none;border-right:none}.layui-tab-card>.layui-tab-more .layui-this{background:0 0;color:#5FB878}.layui-tab-card>.layui-tab-more .layui-this:after{border:none}.layui-timeline{padding-left:5px}.layui-timeline-item{position:relative;padding-bottom:20px}.layui-timeline-axis{position:absolute;left:-5px;top:0;z-index:10;width:20px;height:20px;line-height:20px;background-color:#fff;color:#5FB878;border-radius:50%;text-align:center;cursor:pointer}.layui-timeline-axis:hover{color:#FF5722}.layui-timeline-item:before{content:'';position:absolute;left:5px;top:0;z-index:0;width:1px;height:100%}.layui-timeline-item:last-child:before{display:none}.layui-timeline-item:first-child:before{display:block}.layui-timeline-content{padding-left:25px}.layui-timeline-title{position:relative;margin-bottom:10px}.layui-badge,.layui-badge-dot,.layui-badge-rim{position:relative;display:inline-block;padding:0 6px;font-size:12px;text-align:center;background-color:#FF5722;color:#fff;border-radius:2px}.layui-badge{height:18px;line-height:18px}.layui-badge-dot{width:8px;height:8px;padding:0;border-radius:50%}.layui-badge-rim{height:18px;line-height:18px;border-width:1px;border-style:solid;background-color:#fff;color:#666}.layui-btn .layui-badge,.layui-btn .layui-badge-dot{margin-left:5px}.layui-nav .layui-badge,.layui-nav .layui-badge-dot{position:absolute;top:50%;margin:-8px 6px 0}.layui-tab-title .layui-badge,.layui-tab-title .layui-badge-dot{left:5px;top:-2px}.layui-carousel{position:relative;left:0;top:0;background-color:#f8f8f8}.layui-carousel>[carousel-item]{position:relative;width:100%;height:100%;overflow:hidden}.layui-carousel>[carousel-item]:before{position:absolute;content:'\e63d';left:50%;top:50%;width:100px;line-height:20px;margin:-10px 0 0 -50px;text-align:center;color:#c2c2c2;font-family:layui-icon!important;font-size:30px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.layui-carousel>[carousel-item]>*{display:none;position:absolute;left:0;top:0;width:100%;height:100%;background-color:#f8f8f8;transition-duration:.3s;-webkit-transition-duration:.3s}.layui-carousel-updown>*{-webkit-transition:.3s ease-in-out up;transition:.3s ease-in-out up}.layui-carousel-arrow{display:none\9;opacity:0;position:absolute;left:10px;top:50%;margin-top:-18px;width:36px;height:36px;line-height:36px;text-align:center;font-size:20px;border:0;border-radius:50%;background-color:rgba(0,0,0,.2);color:#fff;-webkit-transition-duration:.3s;transition-duration:.3s;cursor:pointer}.layui-carousel-arrow[lay-type=add]{left:auto!important;right:10px}.layui-carousel:hover .layui-carousel-arrow[lay-type=add],.layui-carousel[lay-arrow=always] .layui-carousel-arrow[lay-type=add]{right:20px}.layui-carousel[lay-arrow=always] .layui-carousel-arrow{opacity:1;left:20px}.layui-carousel[lay-arrow=none] .layui-carousel-arrow{display:none}.layui-carousel-arrow:hover,.layui-carousel-ind ul:hover{background-color:rgba(0,0,0,.35)}.layui-carousel:hover .layui-carousel-arrow{display:block\9;opacity:1;left:20px}.layui-carousel-ind{position:relative;top:-35px;width:100%;line-height:0!important;text-align:center;font-size:0}.layui-carousel[lay-indicator=outside]{margin-bottom:30px}.layui-carousel[lay-indicator=outside] .layui-carousel-ind{top:10px}.layui-carousel[lay-indicator=outside] .layui-carousel-ind ul{background-color:rgba(0,0,0,.5)}.layui-carousel[lay-indicator=none] .layui-carousel-ind{display:none}.layui-carousel-ind ul{display:inline-block;padding:5px;background-color:rgba(0,0,0,.2);border-radius:10px;-webkit-transition-duration:.3s;transition-duration:.3s}.layui-carousel-ind li{display:inline-block;width:10px;height:10px;margin:0 3px;font-size:14px;background-color:#e2e2e2;background-color:rgba(255,255,255,.5);border-radius:50%;cursor:pointer;-webkit-transition-duration:.3s;transition-duration:.3s}.layui-carousel-ind li:hover{background-color:rgba(255,255,255,.7)}.layui-carousel-ind li.layui-this{background-color:#fff}.layui-carousel>[carousel-item]>.layui-carousel-next,.layui-carousel>[carousel-item]>.layui-carousel-prev,.layui-carousel>[carousel-item]>.layui-this{display:block}.layui-carousel>[carousel-item]>.layui-this{left:0}.layui-carousel>[carousel-item]>.layui-carousel-prev{left:-100%}.layui-carousel>[carousel-item]>.layui-carousel-next{left:100%}.layui-carousel>[carousel-item]>.layui-carousel-next.layui-carousel-left,.layui-carousel>[carousel-item]>.layui-carousel-prev.layui-carousel-right{left:0}.layui-carousel>[carousel-item]>.layui-this.layui-carousel-left{left:-100%}.layui-carousel>[carousel-item]>.layui-this.layui-carousel-right{left:100%}.layui-carousel[lay-anim=updown] .layui-carousel-arrow{left:50%!important;top:20px;margin:0 0 0 -18px}.layui-carousel[lay-anim=updown]>[carousel-item]>*,.layui-carousel[lay-anim=fade]>[carousel-item]>*{left:0!important}.layui-carousel[lay-anim=updown] .layui-carousel-arrow[lay-type=add]{top:auto!important;bottom:20px}.layui-carousel[lay-anim=updown] .layui-carousel-ind{position:absolute;top:50%;right:20px;width:auto;height:auto}.layui-carousel[lay-anim=updown] .layui-carousel-ind ul{padding:3px 5px}.layui-carousel[lay-anim=updown] .layui-carousel-ind li{display:block;margin:6px 0}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-this{top:0}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-carousel-prev{top:-100%}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-carousel-next{top:100%}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-carousel-next.layui-carousel-left,.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-carousel-prev.layui-carousel-right{top:0}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-this.layui-carousel-left{top:-100%}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-this.layui-carousel-right{top:100%}.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-carousel-next,.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-carousel-prev{opacity:0}.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-carousel-next.layui-carousel-left,.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-carousel-prev.layui-carousel-right{opacity:1}.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-this.layui-carousel-left,.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-this.layui-carousel-right{opacity:0}.layui-fixbar{position:fixed;right:15px;bottom:15px;z-index:999999}.layui-fixbar li{width:50px;height:50px;line-height:50px;margin-bottom:1px;text-align:center;cursor:pointer;font-size:30px;background-color:#9F9F9F;color:#fff;border-radius:2px;opacity:.95}.layui-fixbar li:hover{opacity:.85}.layui-fixbar li:active{opacity:1}.layui-fixbar .layui-fixbar-top{display:none;font-size:40px}body .layui-util-face{border:none;background:0 0}body .layui-util-face .layui-layer-content{padding:0;background-color:#fff;color:#666;box-shadow:none}.layui-util-face .layui-layer-TipsG{display:none}.layui-util-face ul{position:relative;width:372px;padding:10px;border:1px solid #D9D9D9;background-color:#fff;box-shadow:0 0 20px rgba(0,0,0,.2)}.layui-util-face ul li{cursor:pointer;float:left;border:1px solid #e8e8e8;height:22px;width:26px;overflow:hidden;margin:-1px 0 0 -1px;padding:4px 2px;text-align:center}.layui-util-face ul li:hover{position:relative;z-index:2;border:1px solid #eb7350;background:#fff9ec}.layui-code{position:relative;margin:10px 0;padding:15px;line-height:20px;border:1px solid #ddd;border-left-width:6px;background-color:#F2F2F2;color:#333;font-family:Courier New;font-size:12px}.layui-rate,.layui-rate *{display:inline-block;vertical-align:middle}.layui-rate{padding:10px 5px 10px 0;font-size:0}.layui-rate li i.layui-icon{font-size:20px;color:#FFB800;margin-right:5px;transition:all .3s;-webkit-transition:all .3s}.layui-rate li i:hover{cursor:pointer;transform:scale(1.12);-webkit-transform:scale(1.12)}.layui-rate[readonly] li i:hover{cursor:default;transform:scale(1)}.layui-colorpicker{width:26px;height:26px;border:1px solid #e6e6e6;padding:5px;border-radius:2px;line-height:24px;display:inline-block;cursor:pointer;transition:all .3s;-webkit-transition:all .3s}.layui-colorpicker:hover{border-color:#d2d2d2}.layui-colorpicker.layui-colorpicker-lg{width:34px;height:34px;line-height:32px}.layui-colorpicker.layui-colorpicker-sm{width:24px;height:24px;line-height:22px}.layui-colorpicker.layui-colorpicker-xs{width:22px;height:22px;line-height:20px}.layui-colorpicker-trigger-bgcolor{display:block;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==);border-radius:2px}.layui-colorpicker-trigger-span{display:block;height:100%;box-sizing:border-box;border:1px solid rgba(0,0,0,.15);border-radius:2px;text-align:center}.layui-colorpicker-trigger-i{display:inline-block;color:#FFF;font-size:12px}.layui-colorpicker-trigger-i.layui-icon-close{color:#999}.layui-colorpicker-main{position:absolute;z-index:66666666;width:280px;padding:7px;background:#FFF;border:1px solid #d2d2d2;border-radius:2px;box-shadow:0 2px 4px rgba(0,0,0,.12)}.layui-colorpicker-main-wrapper{height:180px;position:relative}.layui-colorpicker-basis{width:260px;height:100%;position:relative}.layui-colorpicker-basis-white{width:100%;height:100%;position:absolute;top:0;left:0;background:linear-gradient(90deg,#FFF,hsla(0,0%,100%,0))}.layui-colorpicker-basis-black{width:100%;height:100%;position:absolute;top:0;left:0;background:linear-gradient(0deg,#000,transparent)}.layui-colorpicker-basis-cursor{width:10px;height:10px;border:1px solid #FFF;border-radius:50%;position:absolute;top:-3px;right:-3px;cursor:pointer}.layui-colorpicker-side{position:absolute;top:0;right:0;width:12px;height:100%;background:linear-gradient(red,#FF0,#0F0,#0FF,#00F,#F0F,red)}.layui-colorpicker-side-slider{width:100%;height:5px;box-shadow:0 0 1px #888;box-sizing:border-box;background:#FFF;border-radius:1px;border:1px solid #f0f0f0;cursor:pointer;position:absolute;left:0}.layui-colorpicker-main-alpha{display:none;height:12px;margin-top:7px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.layui-colorpicker-alpha-bgcolor{height:100%;position:relative}.layui-colorpicker-alpha-slider{width:5px;height:100%;box-shadow:0 0 1px #888;box-sizing:border-box;background:#FFF;border-radius:1px;border:1px solid #f0f0f0;cursor:pointer;position:absolute;top:0}.layui-colorpicker-main-pre{padding-top:7px;font-size:0}.layui-colorpicker-pre{width:20px;height:20px;border-radius:2px;display:inline-block;margin-left:6px;margin-bottom:7px;cursor:pointer}.layui-colorpicker-pre:nth-child(11n+1){margin-left:0}.layui-colorpicker-pre-isalpha{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.layui-colorpicker-pre.layui-this{box-shadow:0 0 3px 2px rgba(0,0,0,.15)}.layui-colorpicker-pre>div{height:100%;border-radius:2px}.layui-colorpicker-main-input{text-align:right;padding-top:7px}.layui-colorpicker-main-input .layui-btn-container .layui-btn{margin:0 0 0 10px}.layui-colorpicker-main-input div.layui-inline{float:left;margin-right:10px;font-size:14px}.layui-colorpicker-main-input input.layui-input{width:150px;height:30px;color:#666}.layui-slider{height:4px;background:#e2e2e2;border-radius:3px;position:relative;cursor:pointer}.layui-slider-bar{border-radius:3px;position:absolute;height:100%}.layui-slider-step{position:absolute;top:0;width:4px;height:4px;border-radius:50%;background:#FFF;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.layui-slider-wrap{width:36px;height:36px;position:absolute;top:-16px;-webkit-transform:translateX(-50%);transform:translateX(-50%);z-index:10;text-align:center}.layui-slider-wrap-btn{width:12px;height:12px;border-radius:50%;background:#FFF;display:inline-block;vertical-align:middle;cursor:pointer;transition:.3s}.layui-slider-wrap:after{content:"";height:100%;display:inline-block;vertical-align:middle}.layui-slider-wrap-btn.layui-slider-hover,.layui-slider-wrap-btn:hover{transform:scale(1.2)}.layui-slider-wrap-btn.layui-disabled:hover{transform:scale(1)!important}.layui-slider-tips{position:absolute;top:-42px;z-index:66666666;white-space:nowrap;display:none;-webkit-transform:translateX(-50%);transform:translateX(-50%);color:#FFF;background:#000;border-radius:3px;height:25px;line-height:25px;padding:0 10px}.layui-slider-tips:after{content:'';position:absolute;bottom:-12px;left:50%;margin-left:-6px;width:0;height:0;border-width:6px;border-style:solid;border-color:#000 transparent transparent}.layui-slider-input{width:70px;height:32px;border:1px solid #e6e6e6;border-radius:3px;font-size:16px;line-height:32px;position:absolute;right:0;top:-15px}.layui-slider-input-btn{display:none;position:absolute;top:0;right:0;width:20px;height:100%;border-left:1px solid #d2d2d2}.layui-slider-input-btn i{cursor:pointer;position:absolute;right:0;bottom:0;width:20px;height:50%;font-size:12px;line-height:16px;text-align:center;color:#999}.layui-slider-input-btn i:first-child{top:0;border-bottom:1px solid #d2d2d2}.layui-slider-input-txt{height:100%;font-size:14px}.layui-slider-input-txt input{height:100%;border:none}.layui-slider-input-btn i:hover{color:#009688}.layui-slider-vertical{width:4px;margin-left:34px}.layui-slider-vertical .layui-slider-bar{width:4px}.layui-slider-vertical .layui-slider-step{top:auto;left:0;-webkit-transform:translateY(50%);transform:translateY(50%)}.layui-slider-vertical .layui-slider-wrap{top:auto;left:-16px;-webkit-transform:translateY(50%);transform:translateY(50%)}.layui-slider-vertical .layui-slider-tips{top:auto;left:2px}@media \0screen{.layui-slider-wrap-btn{margin-left:-20px}.layui-slider-vertical .layui-slider-wrap-btn{margin-left:0;margin-bottom:-20px}.layui-slider-vertical .layui-slider-tips{margin-left:-8px}.layui-slider>span{margin-left:8px}}.layui-tree{line-height:22px}.layui-tree .layui-form-checkbox{margin:0!important}.layui-tree-set{width:100%;position:relative}.layui-tree-pack{display:none;padding-left:20px;position:relative}.layui-tree-iconClick,.layui-tree-main{display:inline-block;vertical-align:middle}.layui-tree-line .layui-tree-pack{padding-left:27px}.layui-tree-line .layui-tree-set .layui-tree-set:after{content:'';position:absolute;top:14px;left:-9px;width:17px;height:0;border-top:1px dotted #c0c4cc}.layui-tree-entry{position:relative;padding:3px 0;height:20px;white-space:nowrap}.layui-tree-entry:hover{background-color:#eee}.layui-tree-line .layui-tree-entry:hover{background-color:rgba(0,0,0,0)}.layui-tree-line .layui-tree-entry:hover .layui-tree-txt{color:#999;text-decoration:underline;transition:.3s}.layui-tree-main{cursor:pointer;padding-right:10px}.layui-tree-line .layui-tree-set:before{content:'';position:absolute;top:0;left:-9px;width:0;height:100%;border-left:1px dotted #c0c4cc}.layui-tree-line .layui-tree-set.layui-tree-setLineShort:before{height:13px}.layui-tree-line .layui-tree-set.layui-tree-setHide:before{height:0}.layui-tree-iconClick{position:relative;height:20px;line-height:20px;margin:0 10px;color:#c0c4cc}.layui-tree-icon{height:12px;line-height:12px;width:12px;text-align:center;border:1px solid #c0c4cc}.layui-tree-iconClick .layui-icon{font-size:18px}.layui-tree-icon .layui-icon{font-size:12px;color:#666}.layui-tree-iconArrow{padding:0 5px}.layui-tree-iconArrow:after{content:'';position:absolute;left:4px;top:3px;z-index:100;width:0;height:0;border-width:5px;border-style:solid;border-color:transparent transparent transparent #c0c4cc;transition:.5s}.layui-tree-btnGroup,.layui-tree-editInput{position:relative;vertical-align:middle;display:inline-block}.layui-tree-spread>.layui-tree-entry>.layui-tree-iconClick>.layui-tree-iconArrow:after{transform:rotate(90deg) translate(3px,4px)}.layui-tree-txt{display:inline-block;vertical-align:middle;color:#555}.layui-tree-search{margin-bottom:15px;color:#666}.layui-tree-btnGroup .layui-icon{display:inline-block;vertical-align:middle;padding:0 2px;cursor:pointer}.layui-tree-btnGroup .layui-icon:hover{color:#999;transition:.3s}.layui-tree-entry:hover .layui-tree-btnGroup{visibility:visible}.layui-tree-editInput{height:20px;line-height:20px;padding:0 3px;border:none;background-color:rgba(0,0,0,.05)}.layui-tree-emptyText{text-align:center;color:#999}.layui-anim{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.layui-anim.layui-icon{display:inline-block}.layui-anim-loop{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.layui-trans,.layui-trans a{transition:all .3s;-webkit-transition:all .3s}@-webkit-keyframes layui-rotate{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(360deg)}}@keyframes layui-rotate{from{transform:rotate(0)}to{transform:rotate(360deg)}}.layui-anim-rotate{-webkit-animation-name:layui-rotate;animation-name:layui-rotate;-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-timing-function:linear;animation-timing-function:linear}@-webkit-keyframes layui-up{from{-webkit-transform:translate3d(0,100%,0);opacity:.3}to{-webkit-transform:translate3d(0,0,0);opacity:1}}@keyframes layui-up{from{transform:translate3d(0,100%,0);opacity:.3}to{transform:translate3d(0,0,0);opacity:1}}.layui-anim-up{-webkit-animation-name:layui-up;animation-name:layui-up}@-webkit-keyframes layui-upbit{from{-webkit-transform:translate3d(0,30px,0);opacity:.3}to{-webkit-transform:translate3d(0,0,0);opacity:1}}@keyframes layui-upbit{from{transform:translate3d(0,30px,0);opacity:.3}to{transform:translate3d(0,0,0);opacity:1}}.layui-anim-upbit{-webkit-animation-name:layui-upbit;animation-name:layui-upbit}@-webkit-keyframes layui-scale{0%{opacity:.3;-webkit-transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1)}}@keyframes layui-scale{0%{opacity:.3;-ms-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-ms-transform:scale(1);transform:scale(1)}}.layui-anim-scale{-webkit-animation-name:layui-scale;animation-name:layui-scale}@-webkit-keyframes layui-scale-spring{0%{opacity:.5;-webkit-transform:scale(.5)}80%{opacity:.8;-webkit-transform:scale(1.1)}100%{opacity:1;-webkit-transform:scale(1)}}@keyframes layui-scale-spring{0%{opacity:.5;transform:scale(.5)}80%{opacity:.8;transform:scale(1.1)}100%{opacity:1;transform:scale(1)}}.layui-anim-scaleSpring{-webkit-animation-name:layui-scale-spring;animation-name:layui-scale-spring}@-webkit-keyframes layui-fadein{0%{opacity:0}100%{opacity:1}}@keyframes layui-fadein{0%{opacity:0}100%{opacity:1}}.layui-anim-fadein{-webkit-animation-name:layui-fadein;animation-name:layui-fadein}@-webkit-keyframes layui-fadeout{0%{opacity:1}100%{opacity:0}}@keyframes layui-fadeout{0%{opacity:1}100%{opacity:0}}.layui-anim-fadeout{-webkit-animation-name:layui-fadeout;animation-name:layui-fadeout} ================================================ FILE: public/assets/luna/layui/css/layui.mobile.css ================================================ /** layui-v2.5.6 MIT License By https://www.layui.com */ blockquote,body,button,dd,div,dl,dt,form,h1,h2,h3,h4,h5,h6,input,legend,li,ol,p,td,textarea,th,ul{margin:0;padding:0;-webkit-tap-highlight-color:rgba(0,0,0,0)}html{font:12px 'Helvetica Neue','PingFang SC',STHeitiSC-Light,Helvetica,Arial,sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}a,button,input{-webkit-tap-highlight-color:rgba(255,0,0,0)}a{text-decoration:none;background:0 0}a:active,a:hover{outline:0}table{border-collapse:collapse;border-spacing:0}li{list-style:none}b,strong{font-weight:700}h1,h2,h3,h4,h5,h6{font-weight:500}address,cite,dfn,em,var{font-style:normal}dfn{font-style:italic}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}img{border:0;vertical-align:bottom}.layui-inline,input,label{vertical-align:middle}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0;outline:0}button,select{text-transform:none}select{-webkit-appearance:none;border:none}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}@font-face{font-family:layui-icon;src:url(../font/iconfont.eot?v=1.0.7);src:url(../font/iconfont.eot?v=1.0.7#iefix) format('embedded-opentype'),url(../font/iconfont.woff?v=1.0.7) format('woff'),url(../font/iconfont.ttf?v=1.0.7) format('truetype'),url(../font/iconfont.svg?v=1.0.7#iconfont) format('svg')}.layui-icon{font-family:layui-icon!important;font-size:16px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.layui-box,.layui-box *{-webkit-box-sizing:content-box!important;-moz-box-sizing:content-box!important;box-sizing:content-box!important}.layui-border-box,.layui-border-box *{-webkit-box-sizing:border-box!important;-moz-box-sizing:border-box!important;box-sizing:border-box!important}.layui-inline{position:relative;display:inline-block;*display:inline;*zoom:1}.layui-edge,.layui-upload-iframe{position:absolute;width:0;height:0}.layui-edge{border-style:dashed;border-color:transparent;overflow:hidden}.layui-elip{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-unselect{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.layui-disabled,.layui-disabled:active{background-color:#d2d2d2!important;color:#fff!important;cursor:not-allowed!important}.layui-circle{border-radius:100%}.layui-show{display:block!important}.layui-hide{display:none!important}.layui-upload-iframe{border:0;visibility:hidden}.layui-upload-enter{border:1px solid #009E94;background-color:#009E94;color:#fff;-webkit-transform:scale(1.1);transform:scale(1.1)}@-webkit-keyframes layui-m-anim-scale{0%{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes layui-m-anim-scale{0%{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}.layui-m-anim-scale{animation-name:layui-m-anim-scale;-webkit-animation-name:layui-m-anim-scale}@-webkit-keyframes layui-m-anim-up{0%{opacity:0;-webkit-transform:translateY(800px);transform:translateY(800px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes layui-m-anim-up{0%{opacity:0;-webkit-transform:translateY(800px);transform:translateY(800px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}.layui-m-anim-up{-webkit-animation-name:layui-m-anim-up;animation-name:layui-m-anim-up}@-webkit-keyframes layui-m-anim-left{0%{-webkit-transform:translateX(100%);transform:translateX(100%)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes layui-m-anim-left{0%{-webkit-transform:translateX(100%);transform:translateX(100%)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}.layui-m-anim-left{-webkit-animation-name:layui-m-anim-left;animation-name:layui-m-anim-left}@-webkit-keyframes layui-m-anim-right{0%{-webkit-transform:translateX(-100%);transform:translateX(-100%)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes layui-m-anim-right{0%{-webkit-transform:translateX(-100%);transform:translateX(-100%)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}.layui-m-anim-right{-webkit-animation-name:layui-m-anim-right;animation-name:layui-m-anim-right}@-webkit-keyframes layui-m-anim-lout{0%{-webkit-transform:translateX(0);transform:translateX(0)}100%{-webkit-transform:translateX(-100%);transform:translateX(-100%)}}@keyframes layui-m-anim-lout{0%{-webkit-transform:translateX(0);transform:translateX(0)}100%{-webkit-transform:translateX(-100%);transform:translateX(-100%)}}.layui-m-anim-lout{-webkit-animation-name:layui-m-anim-lout;animation-name:layui-m-anim-lout}@-webkit-keyframes layui-m-anim-rout{0%{-webkit-transform:translateX(0);transform:translateX(0)}100%{-webkit-transform:translateX(100%);transform:translateX(100%)}}@keyframes layui-m-anim-rout{0%{-webkit-transform:translateX(0);transform:translateX(0)}100%{-webkit-transform:translateX(100%);transform:translateX(100%)}}.layui-m-anim-rout{-webkit-animation-name:layui-m-anim-rout;animation-name:layui-m-anim-rout}.layui-m-layer{position:relative;z-index:19891014}.layui-m-layer *{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.layui-m-layermain,.layui-m-layershade{position:fixed;left:0;top:0;width:100%;height:100%}.layui-m-layershade{background-color:rgba(0,0,0,.7);pointer-events:auto}.layui-m-layermain{display:table;font-family:Helvetica,arial,sans-serif;pointer-events:none}.layui-m-layermain .layui-m-layersection{display:table-cell;vertical-align:middle;text-align:center}.layui-m-layerchild{position:relative;display:inline-block;text-align:left;background-color:#fff;font-size:14px;border-radius:5px;box-shadow:0 0 8px rgba(0,0,0,.1);pointer-events:auto;-webkit-overflow-scrolling:touch;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.2s;animation-duration:.2s}.layui-m-layer0 .layui-m-layerchild{width:90%;max-width:640px}.layui-m-layer1 .layui-m-layerchild{border:none;border-radius:0}.layui-m-layer2 .layui-m-layerchild{width:auto;max-width:260px;min-width:40px;border:none;background:0 0;box-shadow:none;color:#fff}.layui-m-layerchild h3{padding:0 10px;height:60px;line-height:60px;font-size:16px;font-weight:400;border-radius:5px 5px 0 0;text-align:center}.layui-m-layerbtn span,.layui-m-layerchild h3{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-m-layercont{padding:50px 30px;line-height:22px;text-align:center}.layui-m-layer1 .layui-m-layercont{padding:0;text-align:left}.layui-m-layer2 .layui-m-layercont{text-align:center;padding:0;line-height:0}.layui-m-layer2 .layui-m-layercont i{width:25px;height:25px;margin-left:8px;display:inline-block;background-color:#fff;border-radius:100%;-webkit-animation:layui-m-anim-loading 1.4s infinite ease-in-out;animation:layui-m-anim-loading 1.4s infinite ease-in-out;-webkit-animation-fill-mode:both;animation-fill-mode:both}.layui-m-layerbtn,.layui-m-layerbtn span{position:relative;text-align:center;border-radius:0 0 5px 5px}.layui-m-layer2 .layui-m-layercont p{margin-top:20px}@-webkit-keyframes layui-m-anim-loading{0%,100%,80%{transform:scale(0);-webkit-transform:scale(0)}40%{transform:scale(1);-webkit-transform:scale(1)}}@keyframes layui-m-anim-loading{0%,100%,80%{transform:scale(0);-webkit-transform:scale(0)}40%{transform:scale(1);-webkit-transform:scale(1)}}.layui-m-layer2 .layui-m-layercont i:first-child{margin-left:0;-webkit-animation-delay:-.32s;animation-delay:-.32s}.layui-m-layer2 .layui-m-layercont i.layui-m-layerload{-webkit-animation-delay:-.16s;animation-delay:-.16s}.layui-m-layer2 .layui-m-layercont>div{line-height:22px;padding-top:7px;margin-bottom:20px;font-size:14px}.layui-m-layerbtn{display:box;display:-moz-box;display:-webkit-box;width:100%;height:50px;line-height:50px;font-size:0;border-top:1px solid #D0D0D0;background-color:#F2F2F2}.layui-m-layerbtn span{display:block;-moz-box-flex:1;box-flex:1;-webkit-box-flex:1;font-size:14px;cursor:pointer}.layui-m-layerbtn span[yes]{color:#40AFFE}.layui-m-layerbtn span[no]{border-right:1px solid #D0D0D0;border-radius:0 0 0 5px}.layui-m-layerbtn span:active{background-color:#F6F6F6}.layui-m-layerend{position:absolute;right:7px;top:10px;width:30px;height:30px;border:0;font-weight:400;background:0 0;cursor:pointer;-webkit-appearance:none;font-size:30px}.layui-m-layerend::after,.layui-m-layerend::before{position:absolute;left:5px;top:15px;content:'';width:18px;height:1px;background-color:#999;transform:rotate(45deg);-webkit-transform:rotate(45deg);border-radius:3px}.layui-m-layerend::after{transform:rotate(-45deg);-webkit-transform:rotate(-45deg)}body .layui-m-layer .layui-m-layer-footer{position:fixed;width:95%;max-width:100%;margin:0 auto;left:0;right:0;bottom:10px;background:0 0}.layui-m-layer-footer .layui-m-layercont{padding:20px;border-radius:5px 5px 0 0;background-color:rgba(255,255,255,.8)}.layui-m-layer-footer .layui-m-layerbtn{display:block;height:auto;background:0 0;border-top:none}.layui-m-layer-footer .layui-m-layerbtn span{background-color:rgba(255,255,255,.8)}.layui-m-layer-footer .layui-m-layerbtn span[no]{color:#FD482C;border-top:1px solid #c2c2c2;border-radius:0 0 5px 5px}.layui-m-layer-footer .layui-m-layerbtn span[yes]{margin-top:10px;border-radius:5px}body .layui-m-layer .layui-m-layer-msg{width:auto;max-width:90%;margin:0 auto;bottom:-150px;background-color:rgba(0,0,0,.7);color:#fff}.layui-m-layer-msg .layui-m-layercont{padding:10px 20px} ================================================ FILE: public/assets/luna/layui/css/modules/code.css ================================================ /** layui-v2.5.6 MIT License By https://www.layui.com */ html #layuicss-skincodecss{display:none;position:absolute;width:1989px}.layui-code-h3,.layui-code-view{position:relative;font-size:12px}.layui-code-view{display:block;margin:10px 0;padding:0;border:1px solid #e2e2e2;border-left-width:6px;background-color:#F2F2F2;color:#333;font-family:Courier New}.layui-code-h3{padding:0 10px;height:32px;line-height:32px;border-bottom:1px solid #e2e2e2}.layui-code-h3 a{position:absolute;right:10px;top:0;color:#999}.layui-code-view .layui-code-ol{position:relative;overflow:auto}.layui-code-view .layui-code-ol li{position:relative;margin-left:45px;line-height:20px;padding:0 5px;border-left:1px solid #e2e2e2;list-style-type:decimal-leading-zero;*list-style-type:decimal;background-color:#fff}.layui-code-view pre{margin:0}.layui-code-notepad{border:1px solid #0C0C0C;border-left-color:#3F3F3F;background-color:#0C0C0C;color:#C2BE9E}.layui-code-notepad .layui-code-h3{border-bottom:none}.layui-code-notepad .layui-code-ol li{background-color:#3F3F3F;border-left:none} ================================================ FILE: public/assets/luna/layui/css/modules/laydate/default/laydate.css ================================================ /** layui-v2.5.6 MIT License By https://www.layui.com */ .laydate-set-ym,.layui-laydate,.layui-laydate *,.layui-laydate-list{box-sizing:border-box}html #layuicss-laydate{display:none;position:absolute;width:1989px}.layui-laydate *{margin:0;padding:0}.layui-laydate{position:absolute;z-index:66666666;margin:5px 0;border-radius:2px;font-size:14px;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-name:laydate-upbit;animation-name:laydate-upbit}.layui-laydate-main{width:272px}.layui-laydate-content td,.layui-laydate-header *,.layui-laydate-list li{transition-duration:.3s;-webkit-transition-duration:.3s}@-webkit-keyframes laydate-upbit{from{-webkit-transform:translate3d(0,20px,0);opacity:.3}to{-webkit-transform:translate3d(0,0,0);opacity:1}}@keyframes laydate-upbit{from{transform:translate3d(0,20px,0);opacity:.3}to{transform:translate3d(0,0,0);opacity:1}}.layui-laydate-static{position:relative;z-index:0;display:inline-block;margin:0;-webkit-animation:none;animation:none}.laydate-ym-show .laydate-next-m,.laydate-ym-show .laydate-prev-m{display:none!important}.laydate-ym-show .laydate-next-y,.laydate-ym-show .laydate-prev-y{display:inline-block!important}.laydate-time-show .laydate-set-ym span[lay-type=month],.laydate-time-show .laydate-set-ym span[lay-type=year],.laydate-time-show .layui-laydate-header .layui-icon,.laydate-ym-show .laydate-set-ym span[lay-type=month]{display:none!important}.layui-laydate-header{position:relative;line-height:30px;padding:10px 70px 5px}.laydate-set-ym span,.layui-laydate-header i{padding:0 5px;cursor:pointer}.layui-laydate-header *{display:inline-block;vertical-align:bottom}.layui-laydate-header i{position:absolute;top:10px;color:#999;font-size:18px}.layui-laydate-header i.laydate-prev-y{left:15px}.layui-laydate-header i.laydate-prev-m{left:45px}.layui-laydate-header i.laydate-next-y{right:15px}.layui-laydate-header i.laydate-next-m{right:45px}.laydate-set-ym{width:100%;text-align:center;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.laydate-time-text{cursor:default!important}.layui-laydate-content{position:relative;padding:10px;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.layui-laydate-content table{border-collapse:collapse;border-spacing:0}.layui-laydate-content td,.layui-laydate-content th{width:36px;height:30px;padding:5px;text-align:center}.layui-laydate-content td{position:relative;cursor:pointer}.laydate-day-mark{position:absolute;left:0;top:0;width:100%;height:100%;line-height:30px;font-size:12px;overflow:hidden}.laydate-day-mark::after{position:absolute;content:'';right:2px;top:2px;width:5px;height:5px;border-radius:50%}.layui-laydate-footer{position:relative;height:46px;line-height:26px;padding:10px 20px}.layui-laydate-footer span{margin-right:15px;display:inline-block;cursor:pointer;font-size:12px}.layui-laydate-footer span:hover{color:#5FB878}.laydate-footer-btns{position:absolute;right:10px;top:10px}.laydate-footer-btns span{height:26px;line-height:26px;margin:0 0 0 -1px;padding:0 10px;border:1px solid #C9C9C9;background-color:#fff;white-space:nowrap;vertical-align:top;border-radius:2px}.layui-laydate-list>li,.layui-laydate-range .layui-laydate-main{display:inline-block;vertical-align:middle}.layui-laydate-list{position:absolute;left:0;top:0;width:100%;height:100%;padding:10px;background-color:#fff}.layui-laydate-list>li{position:relative;width:33.3%;height:36px;line-height:36px;margin:3px 0;text-align:center;cursor:pointer}.laydate-month-list>li{width:25%;margin:17px 0}.laydate-time-list>li{height:100%;margin:0;line-height:normal;cursor:default}.laydate-time-list p{position:relative;top:-4px;line-height:29px}.laydate-time-list ol{height:181px;overflow:hidden}.laydate-time-list>li:hover ol{overflow-y:auto}.laydate-time-list ol li{width:130%;padding-left:33px;line-height:30px;text-align:left;cursor:pointer}.layui-laydate-hint{position:absolute;top:115px;left:50%;width:250px;margin-left:-125px;line-height:20px;padding:15px;text-align:center;font-size:12px}.layui-laydate-range{width:546px}.layui-laydate-range .laydate-main-list-0 .laydate-next-m,.layui-laydate-range .laydate-main-list-0 .laydate-next-y,.layui-laydate-range .laydate-main-list-1 .laydate-prev-m,.layui-laydate-range .laydate-main-list-1 .laydate-prev-y{display:none}.layui-laydate-range .laydate-main-list-1 .layui-laydate-content{border-left:1px solid #e2e2e2}.layui-laydate,.layui-laydate-hint{border:1px solid #d2d2d2;box-shadow:0 2px 4px rgba(0,0,0,.12);background-color:#fff;color:#666}.layui-laydate-header{border-bottom:1px solid #e2e2e2}.layui-laydate-header i:hover,.layui-laydate-header span:hover{color:#5FB878}.layui-laydate-content{border-top:none 0;border-bottom:none 0}.layui-laydate-content th{font-weight:400;color:#333}.layui-laydate-content td{color:#666}.layui-laydate-content td.laydate-selected{background-color:#00F7DE}.laydate-selected:hover{background-color:#00F7DE!important}.layui-laydate-content td:hover,.layui-laydate-list li:hover{background-color:#eaeaea;color:#333}.laydate-time-list li ol{margin:0;padding:0;border:1px solid #e2e2e2;border-left-width:0}.laydate-time-list li:first-child ol{border-left-width:1px}.laydate-time-list>li:hover{background:0 0}.layui-laydate-content .laydate-day-next,.layui-laydate-content .laydate-day-prev{color:#d2d2d2}.laydate-selected.laydate-day-next,.laydate-selected.laydate-day-prev{background-color:#f8f8f8!important}.layui-laydate-footer{border-top:1px solid #e2e2e2}.layui-laydate-hint{color:#FF5722}.laydate-day-mark::after{background-color:#5FB878}.layui-laydate-content td.layui-this .laydate-day-mark::after{display:none}.layui-laydate-footer span[lay-type=date]{color:#5FB878}.layui-laydate .layui-this{background-color:#009688!important;color:#fff!important}.layui-laydate .laydate-disabled,.layui-laydate .laydate-disabled:hover{background:0 0!important;color:#d2d2d2!important;cursor:not-allowed!important;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.laydate-theme-molv{border:none}.laydate-theme-molv.layui-laydate-range{width:548px}.laydate-theme-molv .layui-laydate-main{width:274px}.laydate-theme-molv .layui-laydate-header{border:none;background-color:#009688}.laydate-theme-molv .layui-laydate-header i,.laydate-theme-molv .layui-laydate-header span{color:#f6f6f6}.laydate-theme-molv .layui-laydate-header i:hover,.laydate-theme-molv .layui-laydate-header span:hover{color:#fff}.laydate-theme-molv .layui-laydate-content{border:1px solid #e2e2e2;border-top:none;border-bottom:none}.laydate-theme-molv .laydate-main-list-1 .layui-laydate-content{border-left:none}.laydate-theme-grid .laydate-month-list>li,.laydate-theme-grid .laydate-year-list>li,.laydate-theme-grid .layui-laydate-content td,.laydate-theme-grid .layui-laydate-content thead,.laydate-theme-molv .layui-laydate-footer{border:1px solid #e2e2e2}.laydate-theme-grid .laydate-selected,.laydate-theme-grid .laydate-selected:hover{background-color:#f2f2f2!important;color:#009688!important}.laydate-theme-grid .laydate-selected.laydate-day-next,.laydate-theme-grid .laydate-selected.laydate-day-prev{color:#d2d2d2!important}.laydate-theme-grid .laydate-month-list,.laydate-theme-grid .laydate-year-list{margin:1px 0 0 1px}.laydate-theme-grid .laydate-month-list>li,.laydate-theme-grid .laydate-year-list>li{margin:0 -1px -1px 0}.laydate-theme-grid .laydate-year-list>li{height:43px;line-height:43px}.laydate-theme-grid .laydate-month-list>li{height:71px;line-height:71px} ================================================ FILE: public/assets/luna/layui/css/modules/layer/default/layer.css ================================================ /** layui-v2.5.6 MIT License By https://www.layui.com */ .layui-layer-imgbar,.layui-layer-imgtit a,.layui-layer-tab .layui-layer-title span,.layui-layer-title{text-overflow:ellipsis;white-space:nowrap}html #layuicss-layer{display:none;position:absolute;width:1989px}.layui-layer,.layui-layer-shade{position:fixed;_position:absolute;pointer-events:auto}.layui-layer-shade{top:0;left:0;width:100%;height:100%;_height:expression(document.body.offsetHeight+"px")}.layui-layer{-webkit-overflow-scrolling:touch;top:150px;left:0;margin:0;padding:0;background-color:#fff;-webkit-background-clip:content;border-radius:2px;box-shadow:1px 1px 50px rgba(0,0,0,.3)}.layui-layer-close{position:absolute}.layui-layer-content{position:relative}.layui-layer-border{border:1px solid #B2B2B2;border:1px solid rgba(0,0,0,.1);box-shadow:1px 1px 5px rgba(0,0,0,.2)}.layui-layer-load{background:url(loading-1.gif) center center no-repeat #eee}.layui-layer-ico{background:url(icon.png) no-repeat}.layui-layer-btn a,.layui-layer-dialog .layui-layer-ico,.layui-layer-setwin a{display:inline-block;*display:inline;*zoom:1;vertical-align:top}.layui-layer-move{display:none;position:fixed;*position:absolute;left:0;top:0;width:100%;height:100%;cursor:move;opacity:0;filter:alpha(opacity=0);background-color:#fff;z-index:2147483647}.layui-layer-resize{position:absolute;width:15px;height:15px;right:0;bottom:0;cursor:se-resize}.layer-anim{-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.3s;animation-duration:.3s}@-webkit-keyframes layer-bounceIn{0%{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes layer-bounceIn{0%{opacity:0;-webkit-transform:scale(.5);-ms-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}.layer-anim-00{-webkit-animation-name:layer-bounceIn;animation-name:layer-bounceIn}@-webkit-keyframes layer-zoomInDown{0%{opacity:0;-webkit-transform:scale(.1) translateY(-2000px);transform:scale(.1) translateY(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateY(60px);transform:scale(.475) translateY(60px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}@keyframes layer-zoomInDown{0%{opacity:0;-webkit-transform:scale(.1) translateY(-2000px);-ms-transform:scale(.1) translateY(-2000px);transform:scale(.1) translateY(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateY(60px);-ms-transform:scale(.475) translateY(60px);transform:scale(.475) translateY(60px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}.layer-anim-01{-webkit-animation-name:layer-zoomInDown;animation-name:layer-zoomInDown}@-webkit-keyframes layer-fadeInUpBig{0%{opacity:0;-webkit-transform:translateY(2000px);transform:translateY(2000px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes layer-fadeInUpBig{0%{opacity:0;-webkit-transform:translateY(2000px);-ms-transform:translateY(2000px);transform:translateY(2000px)}100%{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}.layer-anim-02{-webkit-animation-name:layer-fadeInUpBig;animation-name:layer-fadeInUpBig}@-webkit-keyframes layer-zoomInLeft{0%{opacity:0;-webkit-transform:scale(.1) translateX(-2000px);transform:scale(.1) translateX(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateX(48px);transform:scale(.475) translateX(48px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}@keyframes layer-zoomInLeft{0%{opacity:0;-webkit-transform:scale(.1) translateX(-2000px);-ms-transform:scale(.1) translateX(-2000px);transform:scale(.1) translateX(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateX(48px);-ms-transform:scale(.475) translateX(48px);transform:scale(.475) translateX(48px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}.layer-anim-03{-webkit-animation-name:layer-zoomInLeft;animation-name:layer-zoomInLeft}@-webkit-keyframes layer-rollIn{0%{opacity:0;-webkit-transform:translateX(-100%) rotate(-120deg);transform:translateX(-100%) rotate(-120deg)}100%{opacity:1;-webkit-transform:translateX(0) rotate(0);transform:translateX(0) rotate(0)}}@keyframes layer-rollIn{0%{opacity:0;-webkit-transform:translateX(-100%) rotate(-120deg);-ms-transform:translateX(-100%) rotate(-120deg);transform:translateX(-100%) rotate(-120deg)}100%{opacity:1;-webkit-transform:translateX(0) rotate(0);-ms-transform:translateX(0) rotate(0);transform:translateX(0) rotate(0)}}.layer-anim-04{-webkit-animation-name:layer-rollIn;animation-name:layer-rollIn}@keyframes layer-fadeIn{0%{opacity:0}100%{opacity:1}}.layer-anim-05{-webkit-animation-name:layer-fadeIn;animation-name:layer-fadeIn}@-webkit-keyframes layer-shake{0%,100%{-webkit-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px);transform:translateX(10px)}}@keyframes layer-shake{0%,100%{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px);-ms-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px);-ms-transform:translateX(10px);transform:translateX(10px)}}.layer-anim-06{-webkit-animation-name:layer-shake;animation-name:layer-shake}@-webkit-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}.layui-layer-title{padding:0 80px 0 20px;height:42px;line-height:42px;border-bottom:1px solid #eee;font-size:14px;color:#333;overflow:hidden;background-color:#F8F8F8;border-radius:2px 2px 0 0}.layui-layer-setwin{position:absolute;right:15px;*right:0;top:15px;font-size:0;line-height:initial}.layui-layer-setwin a{position:relative;width:16px;height:16px;margin-left:10px;font-size:12px;_overflow:hidden}.layui-layer-setwin .layui-layer-min cite{position:absolute;width:14px;height:2px;left:0;top:50%;margin-top:-1px;background-color:#2E2D3C;cursor:pointer;_overflow:hidden}.layui-layer-setwin .layui-layer-min:hover cite{background-color:#2D93CA}.layui-layer-setwin .layui-layer-max{background-position:-32px -40px}.layui-layer-setwin .layui-layer-max:hover{background-position:-16px -40px}.layui-layer-setwin .layui-layer-maxmin{background-position:-65px -40px}.layui-layer-setwin .layui-layer-maxmin:hover{background-position:-49px -40px}.layui-layer-setwin .layui-layer-close1{background-position:1px -40px;cursor:pointer}.layui-layer-setwin .layui-layer-close1:hover{opacity:.7}.layui-layer-setwin .layui-layer-close2{position:absolute;right:-28px;top:-28px;width:30px;height:30px;margin-left:0;background-position:-149px -31px;*right:-18px;_display:none}.layui-layer-setwin .layui-layer-close2:hover{background-position:-180px -31px}.layui-layer-btn{text-align:right;padding:0 15px 12px;pointer-events:auto;user-select:none;-webkit-user-select:none}.layui-layer-btn a{height:28px;line-height:28px;margin:5px 5px 0;padding:0 15px;border:1px solid #dedede;background-color:#fff;color:#333;border-radius:2px;font-weight:400;cursor:pointer;text-decoration:none}.layui-layer-btn a:hover{opacity:.9;text-decoration:none}.layui-layer-btn a:active{opacity:.8}.layui-layer-btn .layui-layer-btn0{border-color:#1E9FFF;background-color:#1E9FFF;color:#fff}.layui-layer-btn-l{text-align:left}.layui-layer-btn-c{text-align:center}.layui-layer-dialog{min-width:260px}.layui-layer-dialog .layui-layer-content{position:relative;padding:20px;line-height:24px;word-break:break-all;overflow:hidden;font-size:14px;overflow-x:hidden;overflow-y:auto}.layui-layer-dialog .layui-layer-content .layui-layer-ico{position:absolute;top:16px;left:15px;_left:-40px;width:30px;height:30px}.layui-layer-ico1{background-position:-30px 0}.layui-layer-ico2{background-position:-60px 0}.layui-layer-ico3{background-position:-90px 0}.layui-layer-ico4{background-position:-120px 0}.layui-layer-ico5{background-position:-150px 0}.layui-layer-ico6{background-position:-180px 0}.layui-layer-rim{border:6px solid #8D8D8D;border:6px solid rgba(0,0,0,.3);border-radius:5px;box-shadow:none}.layui-layer-msg{min-width:180px;border:1px solid #D3D4D3;box-shadow:none}.layui-layer-hui{min-width:100px;background-color:#000;filter:alpha(opacity=60);background-color:rgba(0,0,0,.6);color:#fff;border:none}.layui-layer-hui .layui-layer-content{padding:12px 25px;text-align:center}.layui-layer-dialog .layui-layer-padding{padding:20px 20px 20px 55px;text-align:left}.layui-layer-page .layui-layer-content{position:relative;overflow:auto}.layui-layer-iframe .layui-layer-btn,.layui-layer-page .layui-layer-btn{padding-top:10px}.layui-layer-nobg{background:0 0}.layui-layer-iframe iframe{display:block;width:100%}.layui-layer-loading{border-radius:100%;background:0 0;box-shadow:none;border:none}.layui-layer-loading .layui-layer-content{width:60px;height:24px;background:url(loading-0.gif) no-repeat}.layui-layer-loading .layui-layer-loading1{width:37px;height:37px;background:url(loading-1.gif) no-repeat}.layui-layer-ico16,.layui-layer-loading .layui-layer-loading2{width:32px;height:32px;background:url(loading-2.gif) no-repeat}.layui-layer-tips{background:0 0;box-shadow:none;border:none}.layui-layer-tips .layui-layer-content{position:relative;line-height:22px;min-width:12px;padding:8px 15px;font-size:12px;_float:left;border-radius:2px;box-shadow:1px 1px 3px rgba(0,0,0,.2);background-color:#000;color:#fff}.layui-layer-tips .layui-layer-close{right:-2px;top:-1px}.layui-layer-tips i.layui-layer-TipsG{position:absolute;width:0;height:0;border-width:8px;border-color:transparent;border-style:dashed;*overflow:hidden}.layui-layer-tips i.layui-layer-TipsB,.layui-layer-tips i.layui-layer-TipsT{left:5px;border-right-style:solid;border-right-color:#000}.layui-layer-tips i.layui-layer-TipsT{bottom:-8px}.layui-layer-tips i.layui-layer-TipsB{top:-8px}.layui-layer-tips i.layui-layer-TipsL,.layui-layer-tips i.layui-layer-TipsR{top:5px;border-bottom-style:solid;border-bottom-color:#000}.layui-layer-tips i.layui-layer-TipsR{left:-8px}.layui-layer-tips i.layui-layer-TipsL{right:-8px}.layui-layer-lan[type=dialog]{min-width:280px}.layui-layer-lan .layui-layer-title{background:#4476A7;color:#fff;border:none}.layui-layer-lan .layui-layer-btn{padding:5px 10px 10px;text-align:right;border-top:1px solid #E9E7E7}.layui-layer-lan .layui-layer-btn a{background:#fff;border-color:#E9E7E7;color:#333}.layui-layer-lan .layui-layer-btn .layui-layer-btn1{background:#C9C5C5}.layui-layer-molv .layui-layer-title{background:#009f95;color:#fff;border:none}.layui-layer-molv .layui-layer-btn a{background:#009f95;border-color:#009f95}.layui-layer-molv .layui-layer-btn .layui-layer-btn1{background:#92B8B1}.layui-layer-iconext{background:url(icon-ext.png) no-repeat}.layui-layer-prompt .layui-layer-input{display:block;width:230px;height:36px;margin:0 auto;line-height:30px;padding-left:10px;border:1px solid #e6e6e6;color:#333}.layui-layer-prompt textarea.layui-layer-input{width:300px;height:100px;line-height:20px;padding:6px 10px}.layui-layer-prompt .layui-layer-content{padding:20px}.layui-layer-prompt .layui-layer-btn{padding-top:0}.layui-layer-tab{box-shadow:1px 1px 50px rgba(0,0,0,.4)}.layui-layer-tab .layui-layer-title{padding-left:0;overflow:visible}.layui-layer-tab .layui-layer-title span{position:relative;float:left;min-width:80px;max-width:260px;padding:0 20px;text-align:center;overflow:hidden;cursor:pointer}.layui-layer-tab .layui-layer-title span.layui-this{height:43px;border-left:1px solid #eee;border-right:1px solid #eee;background-color:#fff;z-index:10}.layui-layer-tab .layui-layer-title span:first-child{border-left:none}.layui-layer-tabmain{line-height:24px;clear:both}.layui-layer-tabmain .layui-layer-tabli{display:none}.layui-layer-tabmain .layui-layer-tabli.layui-this{display:block}.layui-layer-photos{-webkit-animation-duration:.8s;animation-duration:.8s}.layui-layer-photos .layui-layer-content{overflow:hidden;text-align:center}.layui-layer-photos .layui-layer-phimg img{position:relative;width:100%;display:inline-block;*display:inline;*zoom:1;vertical-align:top}.layui-layer-imgbar,.layui-layer-imguide{display:none}.layui-layer-imgnext,.layui-layer-imgprev{position:absolute;top:50%;width:27px;_width:44px;height:44px;margin-top:-22px;outline:0;blr:expression(this.onFocus=this.blur())}.layui-layer-imgprev{left:10px;background-position:-5px -5px;_background-position:-70px -5px}.layui-layer-imgprev:hover{background-position:-33px -5px;_background-position:-120px -5px}.layui-layer-imgnext{right:10px;_right:8px;background-position:-5px -50px;_background-position:-70px -50px}.layui-layer-imgnext:hover{background-position:-33px -50px;_background-position:-120px -50px}.layui-layer-imgbar{position:absolute;left:0;bottom:0;width:100%;height:32px;line-height:32px;background-color:rgba(0,0,0,.8);background-color:#000\9;filter:Alpha(opacity=80);color:#fff;overflow:hidden;font-size:0}.layui-layer-imgtit *{display:inline-block;*display:inline;*zoom:1;vertical-align:top;font-size:12px}.layui-layer-imgtit a{max-width:65%;overflow:hidden;color:#fff}.layui-layer-imgtit a:hover{color:#fff;text-decoration:underline}.layui-layer-imgtit em{padding-left:10px;font-style:normal}@-webkit-keyframes layer-bounceOut{100%{opacity:0;-webkit-transform:scale(.7);transform:scale(.7)}30%{-webkit-transform:scale(1.05);transform:scale(1.05)}0%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes layer-bounceOut{100%{opacity:0;-webkit-transform:scale(.7);-ms-transform:scale(.7);transform:scale(.7)}30%{-webkit-transform:scale(1.05);-ms-transform:scale(1.05);transform:scale(1.05)}0%{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}.layer-anim-close{-webkit-animation-name:layer-bounceOut;animation-name:layer-bounceOut;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.2s;animation-duration:.2s}@media screen and (max-width:1100px){.layui-layer-iframe{overflow-y:auto;-webkit-overflow-scrolling:touch}} ================================================ FILE: public/assets/luna/layui/lay/modules/carousel.js ================================================ /** layui-v2.5.6 MIT License By https://www.layui.com */ ;layui.define("jquery",function(e){"use strict";var i=layui.$,n=(layui.hint(),layui.device(),{config:{},set:function(e){var n=this;return n.config=i.extend({},n.config,e),n},on:function(e,i){return layui.onevent.call(this,t,e,i)}}),t="carousel",a="layui-this",l=">*[carousel-item]>*",o="layui-carousel-left",r="layui-carousel-right",d="layui-carousel-prev",s="layui-carousel-next",u="layui-carousel-arrow",c="layui-carousel-ind",m=function(e){var t=this;t.config=i.extend({},t.config,n.config,e),t.render()};m.prototype.config={width:"600px",height:"280px",full:!1,arrow:"hover",indicator:"inside",autoplay:!0,interval:3e3,anim:"",trigger:"click",index:0},m.prototype.render=function(){var e=this,n=e.config;n.elem=i(n.elem),n.elem[0]&&(e.elemItem=n.elem.find(l),n.index<0&&(n.index=0),n.index>=e.elemItem.length&&(n.index=e.elemItem.length-1),n.interval<800&&(n.interval=800),n.full?n.elem.css({position:"fixed",width:"100%",height:"100%",zIndex:9999}):n.elem.css({width:n.width,height:n.height}),n.elem.attr("lay-anim",n.anim),e.elemItem.eq(n.index).addClass(a),e.elemItem.length<=1||(e.indicator(),e.arrow(),e.autoplay(),e.events()))},m.prototype.reload=function(e){var n=this;clearInterval(n.timer),n.config=i.extend({},n.config,e),n.render()},m.prototype.prevIndex=function(){var e=this,i=e.config,n=i.index-1;return n<0&&(n=e.elemItem.length-1),n},m.prototype.nextIndex=function(){var e=this,i=e.config,n=i.index+1;return n>=e.elemItem.length&&(n=0),n},m.prototype.addIndex=function(e){var i=this,n=i.config;e=e||1,n.index=n.index+e,n.index>=i.elemItem.length&&(n.index=0)},m.prototype.subIndex=function(e){var i=this,n=i.config;e=e||1,n.index=n.index-e,n.index<0&&(n.index=i.elemItem.length-1)},m.prototype.autoplay=function(){var e=this,i=e.config;i.autoplay&&(clearInterval(e.timer),e.timer=setInterval(function(){e.slide()},i.interval))},m.prototype.arrow=function(){var e=this,n=e.config,t=i(['",'"].join(""));n.elem.attr("lay-arrow",n.arrow),n.elem.find("."+u)[0]&&n.elem.find("."+u).remove(),n.elem.append(t),t.on("click",function(){var n=i(this),t=n.attr("lay-type");e.slide(t)})},m.prototype.indicator=function(){var e=this,n=e.config,t=e.elemInd=i(['
    ',function(){var i=[];return layui.each(e.elemItem,function(e){i.push("")}),i.join("")}(),"
"].join(""));n.elem.attr("lay-indicator",n.indicator),n.elem.find("."+c)[0]&&n.elem.find("."+c).remove(),n.elem.append(t),"updown"===n.anim&&t.css("margin-top",-(t.height()/2)),t.find("li").on("hover"===n.trigger?"mouseover":n.trigger,function(){var t=i(this),a=t.index();a>n.index?e.slide("add",a-n.index):a/g,">").replace(/'/g,"'").replace(/"/g,""")),c.html('
  1. '+o.replace(/[\r\t\n]+/g,"
  2. ")+"
"),c.find(">.layui-code-h3")[0]||c.prepend('

'+(c.attr("lay-title")||e.title||"code")+(e.about?'layui.code':"")+"

");var d=c.find(">.layui-code-ol");c.addClass("layui-box layui-code-view"),(c.attr("lay-skin")||e.skin)&&c.addClass("layui-code-"+(c.attr("lay-skin")||e.skin)),(d.find("li").length/100|0)>0&&d.css("margin-left",(d.find("li").length/100|0)+"px"),(c.attr("lay-height")||e.height)&&d.css("max-height",c.attr("lay-height")||e.height)})})}).addcss("modules/code.css","skincodecss"); ================================================ FILE: public/assets/luna/layui/lay/modules/colorpicker.js ================================================ /** layui-v2.5.6 MIT License By https://www.layui.com */ ;layui.define("jquery",function(e){"use strict";var i=layui.jquery,o={config:{},index:layui.colorpicker?layui.colorpicker.index+1e4:0,set:function(e){var o=this;return o.config=i.extend({},o.config,e),o},on:function(e,i){return layui.onevent.call(this,"colorpicker",e,i)}},r=function(){var e=this,i=e.config;return{config:i}},t="colorpicker",n="layui-show",l="layui-colorpicker",c=".layui-colorpicker-main",a="layui-icon-down",s="layui-icon-close",f="layui-colorpicker-trigger-span",d="layui-colorpicker-trigger-i",u="layui-colorpicker-side",p="layui-colorpicker-side-slider",g="layui-colorpicker-basis",v="layui-colorpicker-alpha-bgcolor",h="layui-colorpicker-alpha-slider",m="layui-colorpicker-basis-cursor",b="layui-colorpicker-main-input",k=function(e){var i={h:0,s:0,b:0},o=Math.min(e.r,e.g,e.b),r=Math.max(e.r,e.g,e.b),t=r-o;return i.b=r,i.s=0!=r?255*t/r:0,0!=i.s?e.r==r?i.h=(e.g-e.b)/t:e.g==r?i.h=2+(e.b-e.r)/t:i.h=4+(e.r-e.g)/t:i.h=-1,r==o&&(i.h=0),i.h*=60,i.h<0&&(i.h+=360),i.s*=100/255,i.b*=100/255,i},y=function(e){var e=e.indexOf("#")>-1?e.substring(1):e;if(3==e.length){var i=e.split("");e=i[0]+i[0]+i[1]+i[1]+i[2]+i[2]}e=parseInt(e,16);var o={r:e>>16,g:(65280&e)>>8,b:255&e};return k(o)},x=function(e){var i={},o=e.h,r=255*e.s/100,t=255*e.b/100;if(0==r)i.r=i.g=i.b=t;else{var n=t,l=(255-r)*t/255,c=(n-l)*(o%60)/60;360==o&&(o=0),o<60?(i.r=n,i.b=l,i.g=l+c):o<120?(i.g=n,i.b=l,i.r=n-c):o<180?(i.g=n,i.r=l,i.b=l+c):o<240?(i.b=n,i.r=l,i.g=n-c):o<300?(i.b=n,i.g=l,i.r=l+c):o<360?(i.r=n,i.g=l,i.b=n-c):(i.r=0,i.g=0,i.b=0)}return{r:Math.round(i.r),g:Math.round(i.g),b:Math.round(i.b)}},C=function(e){var o=x(e),r=[o.r.toString(16),o.g.toString(16),o.b.toString(16)];return i.each(r,function(e,i){1==i.length&&(r[e]="0"+i)}),r.join("")},P=function(e){var i=/[0-9]{1,3}/g,o=e.match(i)||[];return{r:o[0],g:o[1],b:o[2]}},B=i(window),w=i(document),D=function(e){var r=this;r.index=++o.index,r.config=i.extend({},r.config,o.config,e),r.render()};D.prototype.config={color:"",size:null,alpha:!1,format:"hex",predefine:!1,colors:["#009688","#5FB878","#1E9FFF","#FF5722","#FFB800","#01AAED","#999","#c00","#ff8c00","#ffd700","#90ee90","#00ced1","#1e90ff","#c71585","rgb(0, 186, 189)","rgb(255, 120, 0)","rgb(250, 212, 0)","#393D49","rgba(0,0,0,.5)","rgba(255, 69, 0, 0.68)","rgba(144, 240, 144, 0.5)","rgba(31, 147, 255, 0.73)"]},D.prototype.render=function(){var e=this,o=e.config,r=i(['
',"",'3&&(o.alpha&&"rgb"==o.format||(e="#"+C(k(P(o.color))))),"background: "+e):e}()+'">','',"","","
"].join("")),t=i(o.elem);o.size&&r.addClass("layui-colorpicker-"+o.size),t.addClass("layui-inline").html(e.elemColorBox=r),e.color=e.elemColorBox.find("."+f)[0].style.background,e.events()},D.prototype.renderPicker=function(){var e=this,o=e.config,r=e.elemColorBox[0],t=e.elemPicker=i(['
','
','
','
','
','
',"
",'
','
',"
","
",'
','
','
',"
","
",function(){if(o.predefine){var e=['
'];return layui.each(o.colors,function(i,o){e.push(['
','
',"
"].join(""))}),e.push("
"),e.join("")}return""}(),'
','
','',"
",'
','','',"","
"].join(""));e.elemColorBox.find("."+f)[0];i(c)[0]&&i(c).data("index")==e.index?e.removePicker(D.thisElemInd):(e.removePicker(D.thisElemInd),i("body").append(t)),D.thisElemInd=e.index,D.thisColor=r.style.background,e.position(),e.pickerEvents()},D.prototype.removePicker=function(e){var o=this;o.config;return i("#layui-colorpicker"+(e||o.index)).remove(),o},D.prototype.position=function(){var e=this,i=e.config,o=e.bindElem||e.elemColorBox[0],r=e.elemPicker[0],t=o.getBoundingClientRect(),n=r.offsetWidth,l=r.offsetHeight,c=function(e){return e=e?"scrollLeft":"scrollTop",document.body[e]|document.documentElement[e]},a=function(e){return document.documentElement[e?"clientWidth":"clientHeight"]},s=5,f=t.left,d=t.bottom;f-=(n-o.offsetWidth)/2,d+=s,f+n+s>a("width")?f=a("width")-n-s:fa()&&(d=t.top>l?t.top-l:a()-l,d-=2*s),i.position&&(r.style.position=i.position),r.style.left=f+("fixed"===i.position?0:c(1))+"px",r.style.top=d+("fixed"===i.position?0:c())+"px"},D.prototype.val=function(){var e=this,i=(e.config,e.elemColorBox.find("."+f)),o=e.elemPicker.find("."+b),r=i[0],t=r.style.backgroundColor;if(t){var n=k(P(t)),l=i.attr("lay-type");if(e.select(n.h,n.s,n.b),"torgb"===l&&o.find("input").val(t),"rgba"===l){var c=P(t);if(3==(t.match(/[0-9]{1,3}/g)||[]).length)o.find("input").val("rgba("+c.r+", "+c.g+", "+c.b+", 1)"),e.elemPicker.find("."+h).css("left",280);else{o.find("input").val(t);var a=280*t.slice(t.lastIndexOf(",")+1,t.length-1);e.elemPicker.find("."+h).css("left",a)}e.elemPicker.find("."+v)[0].style.background="linear-gradient(to right, rgba("+c.r+", "+c.g+", "+c.b+", 0), rgb("+c.r+", "+c.g+", "+c.b+"))"}}else e.select(0,100,100),o.find("input").val(""),e.elemPicker.find("."+v)[0].style.background="",e.elemPicker.find("."+h).css("left",280)},D.prototype.side=function(){var e=this,o=e.config,r=e.elemColorBox.find("."+f),t=r.attr("lay-type"),n=e.elemPicker.find("."+u),l=e.elemPicker.find("."+p),c=e.elemPicker.find("."+g),y=e.elemPicker.find("."+m),C=e.elemPicker.find("."+v),w=e.elemPicker.find("."+h),D=l[0].offsetTop/180*360,E=100-(y[0].offsetTop+3)/180*100,H=(y[0].offsetLeft+3)/260*100,W=Math.round(w[0].offsetLeft/280*100)/100,j=e.elemColorBox.find("."+d),F=e.elemPicker.find(".layui-colorpicker-pre").children("div"),L=function(i,n,l,c){e.select(i,n,l);var f=x({h:i,s:n,b:l});if(j.addClass(a).removeClass(s),r[0].style.background="rgb("+f.r+", "+f.g+", "+f.b+")","torgb"===t&&e.elemPicker.find("."+b).find("input").val("rgb("+f.r+", "+f.g+", "+f.b+")"),"rgba"===t){var d=0;d=280*c,w.css("left",d),e.elemPicker.find("."+b).find("input").val("rgba("+f.r+", "+f.g+", "+f.b+", "+c+")"),r[0].style.background="rgba("+f.r+", "+f.g+", "+f.b+", "+c+")",C[0].style.background="linear-gradient(to right, rgba("+f.r+", "+f.g+", "+f.b+", 0), rgb("+f.r+", "+f.g+", "+f.b+"))"}o.change&&o.change(e.elemPicker.find("."+b).find("input").val())},M=i(['
t&&(r=t);var l=r/180*360;D=l,L(l,H,E,W),e.preventDefault()};Y(r),e.preventDefault()}),n.on("click",function(e){var o=e.clientY-i(this).offset().top;o<0&&(o=0),o>this.offsetHeight&&(o=this.offsetHeight);var r=o/180*360;D=r,L(r,H,E,W),e.preventDefault()}),y.on("mousedown",function(e){var i=this.offsetTop,o=this.offsetLeft,r=e.clientY,t=e.clientX,n=function(e){var n=i+(e.clientY-r),l=o+(e.clientX-t),a=c[0].offsetHeight-3,s=c[0].offsetWidth-3;n<-3&&(n=-3),n>a&&(n=a),l<-3&&(l=-3),l>s&&(l=s);var f=(l+3)/260*100,d=100-(n+3)/180*100;E=d,H=f,L(D,f,d,W),e.preventDefault()};layui.stope(e),Y(n),e.preventDefault()}),c.on("mousedown",function(e){var o=e.clientY-i(this).offset().top-3+B.scrollTop(),r=e.clientX-i(this).offset().left-3+B.scrollLeft();o<-3&&(o=-3),o>this.offsetHeight-3&&(o=this.offsetHeight-3),r<-3&&(r=-3),r>this.offsetWidth-3&&(r=this.offsetWidth-3);var t=(r+3)/260*100,n=100-(o+3)/180*100;E=n,H=t,L(D,t,n,W),e.preventDefault(),y.trigger(e,"mousedown")}),w.on("mousedown",function(e){var i=this.offsetLeft,o=e.clientX,r=function(e){var r=i+(e.clientX-o),t=C[0].offsetWidth;r<0&&(r=0),r>t&&(r=t);var n=Math.round(r/280*100)/100;W=n,L(D,H,E,n),e.preventDefault()};Y(r),e.preventDefault()}),C.on("click",function(e){var o=e.clientX-i(this).offset().left;o<0&&(o=0),o>this.offsetWidth&&(o=this.offsetWidth);var r=Math.round(o/280*100)/100;W=r,L(D,H,E,r),e.preventDefault()}),F.each(function(){i(this).on("click",function(){i(this).parent(".layui-colorpicker-pre").addClass("selected").siblings().removeClass("selected");var e,o=this.style.backgroundColor,r=k(P(o)),t=o.slice(o.lastIndexOf(",")+1,o.length-1);D=r.h,H=r.s,E=r.b,3==(o.match(/[0-9]{1,3}/g)||[]).length&&(t=1),W=t,e=280*t,L(r.h,r.s,r.b,t)})})},D.prototype.select=function(e,i,o,r){var t=this,n=(t.config,C({h:e,s:100,b:100})),l=C({h:e,s:i,b:o}),c=e/360*180,a=180-o/100*180-3,s=i/100*260-3;t.elemPicker.find("."+p).css("top",c),t.elemPicker.find("."+g)[0].style.background="#"+n,t.elemPicker.find("."+m).css({top:a,left:s}),"change"!==r&&t.elemPicker.find("."+b).find("input").val("#"+l)},D.prototype.pickerEvents=function(){var e=this,o=e.config,r=e.elemColorBox.find("."+f),t=e.elemPicker.find("."+b+" input"),n={clear:function(i){r[0].style.background="",e.elemColorBox.find("."+d).removeClass(a).addClass(s),e.color="",o.done&&o.done(""),e.removePicker()},confirm:function(i,n){var l=t.val(),c=l,f={};if(l.indexOf(",")>-1){if(f=k(P(l)),e.select(f.h,f.s,f.b),r[0].style.background=c="#"+C(f),(l.match(/[0-9]{1,3}/g)||[]).length>3&&"rgba"===r.attr("lay-type")){var u=280*l.slice(l.lastIndexOf(",")+1,l.length-1);e.elemPicker.find("."+h).css("left",u),r[0].style.background=l,c=l}}else f=y(l),r[0].style.background=c="#"+C(f),e.elemColorBox.find("."+d).removeClass(s).addClass(a);return"change"===n?(e.select(f.h,f.s,f.b,n),void(o.change&&o.change(c))):(e.color=l,o.done&&o.done(l),void e.removePicker())}};e.elemPicker.on("click","*[colorpicker-events]",function(){var e=i(this),o=e.attr("colorpicker-events");n[o]&&n[o].call(this,e)}),t.on("keyup",function(e){var o=i(this);n.confirm.call(this,o,13===e.keyCode?null:"change")})},D.prototype.events=function(){var e=this,o=e.config,r=e.elemColorBox.find("."+f);e.elemColorBox.on("click",function(){e.renderPicker(),i(c)[0]&&(e.val(),e.side())}),o.elem[0]&&!e.elemColorBox[0].eventHandler&&(w.on("click",function(o){if(!i(o.target).hasClass(l)&&!i(o.target).parents("."+l)[0]&&!i(o.target).hasClass(c.replace(/\./g,""))&&!i(o.target).parents(c)[0]&&e.elemPicker){if(e.color){var t=k(P(e.color));e.select(t.h,t.s,t.b)}else e.elemColorBox.find("."+d).removeClass(a).addClass(s);r[0].style.background=e.color||"",e.removePicker()}}),B.on("resize",function(){return!(!e.elemPicker||!i(c)[0])&&void e.position()}),e.elemColorBox[0].eventHandler=!0)},o.render=function(e){var i=new D(e);return r.call(i)},e(t,o)}); ================================================ FILE: public/assets/luna/layui/lay/modules/element.js ================================================ /** layui-v2.5.6 MIT License By https://www.layui.com */ ;layui.define("jquery",function(t){"use strict";var a=layui.$,i=(layui.hint(),layui.device()),e="element",l="layui-this",n="layui-show",s=function(){this.config={}};s.prototype.set=function(t){var i=this;return a.extend(!0,i.config,t),i},s.prototype.on=function(t,a){return layui.onevent.call(this,e,t,a)},s.prototype.tabAdd=function(t,i){var e=".layui-tab-title",l=a(".layui-tab[lay-filter="+t+"]"),n=l.children(e),s=n.children(".layui-tab-bar"),o=l.children(".layui-tab-content"),r='
  • "+(i.title||"unnaming")+"
  • ";return s[0]?s.before(r):n.append(r),o.append('
    '+(i.content||"")+"
    "),f.hideTabMore(!0),f.tabAuto(),this},s.prototype.tabDelete=function(t,i){var e=".layui-tab-title",l=a(".layui-tab[lay-filter="+t+"]"),n=l.children(e),s=n.find('>li[lay-id="'+i+'"]');return f.tabDelete(null,s),this},s.prototype.tabChange=function(t,i){var e=".layui-tab-title",l=a(".layui-tab[lay-filter="+t+"]"),n=l.children(e),s=n.find('>li[lay-id="'+i+'"]');return f.tabClick.call(s[0],null,null,s),this},s.prototype.tab=function(t){t=t||{},b.on("click",t.headerElem,function(i){var e=a(this).index();f.tabClick.call(this,i,e,null,t)})},s.prototype.progress=function(t,i){var e="layui-progress",l=a("."+e+"[lay-filter="+t+"]"),n=l.find("."+e+"-bar"),s=n.find("."+e+"-text");return n.css("width",i),s.text(i),this};var o=".layui-nav",r="layui-nav-item",c="layui-nav-bar",u="layui-nav-tree",d="layui-nav-child",y="layui-nav-more",h="layui-anim layui-anim-upbit",f={tabClick:function(t,i,s,o){o=o||{};var r=s||a(this),i=i||r.parent().children("li").index(r),c=o.headerElem?r.parent():r.parents(".layui-tab").eq(0),u=o.bodyElem?a(o.bodyElem):c.children(".layui-tab-content").children(".layui-tab-item"),d=r.find("a"),y=c.attr("lay-filter");"javascript:;"!==d.attr("href")&&"_blank"===d.attr("target")||(r.addClass(l).siblings().removeClass(l),u.eq(i).addClass(n).siblings().removeClass(n)),layui.event.call(this,e,"tab("+y+")",{elem:c,index:i})},tabDelete:function(t,i){var n=i||a(this).parent(),s=n.index(),o=n.parents(".layui-tab").eq(0),r=o.children(".layui-tab-content").children(".layui-tab-item"),c=o.attr("lay-filter");n.hasClass(l)&&(n.next()[0]?f.tabClick.call(n.next()[0],null,s+1):n.prev()[0]&&f.tabClick.call(n.prev()[0],null,s-1)),n.remove(),r.eq(s).remove(),setTimeout(function(){f.tabAuto()},50),layui.event.call(this,e,"tabDelete("+c+")",{elem:o,index:s})},tabAuto:function(){var t="layui-tab-more",e="layui-tab-bar",l="layui-tab-close",n=this;a(".layui-tab").each(function(){var s=a(this),o=s.children(".layui-tab-title"),r=(s.children(".layui-tab-content").children(".layui-tab-item"),'lay-stope="tabmore"'),c=a('');if(n===window&&8!=i.ie&&f.hideTabMore(!0),s.attr("lay-allowClose")&&o.find("li").each(function(){var t=a(this);if(!t.find("."+l)[0]){var i=a('');i.on("click",f.tabDelete),t.append(i)}}),"string"!=typeof s.attr("lay-unauto"))if(o.prop("scrollWidth")>o.outerWidth()+1){if(o.find("."+e)[0])return;o.append(c),s.attr("overflow",""),c.on("click",function(a){o[this.title?"removeClass":"addClass"](t),this.title=this.title?"":"收缩"})}else o.find("."+e).remove(),s.removeAttr("overflow")})},hideTabMore:function(t){var i=a(".layui-tab-title");t!==!0&&"tabmore"===a(t.target).attr("lay-stope")||(i.removeClass("layui-tab-more"),i.find(".layui-tab-bar").attr("title",""))},clickThis:function(){var t=a(this),i=t.parents(o),n=i.attr("lay-filter"),s=t.parent(),c=t.siblings("."+d),y="string"==typeof s.attr("lay-unselect");"javascript:;"!==t.attr("href")&&"_blank"===t.attr("target")||y||c[0]||(i.find("."+l).removeClass(l),s.addClass(l)),i.hasClass(u)&&(c.removeClass(h),c[0]&&(s["none"===c.css("display")?"addClass":"removeClass"](r+"ed"),"all"===i.attr("lay-shrink")&&s.siblings().removeClass(r+"ed"))),layui.event.call(this,e,"nav("+n+")",t)},collapse:function(){var t=a(this),i=t.find(".layui-colla-icon"),l=t.siblings(".layui-colla-content"),s=t.parents(".layui-collapse").eq(0),o=s.attr("lay-filter"),r="none"===l.css("display");if("string"==typeof s.attr("lay-accordion")){var c=s.children(".layui-colla-item").children("."+n);c.siblings(".layui-colla-title").children(".layui-colla-icon").html(""),c.removeClass(n)}l[r?"addClass":"removeClass"](n),i.html(r?"":""),layui.event.call(this,e,"collapse("+o+")",{title:t,content:l,show:r})}};s.prototype.init=function(t,e){var l=function(){return e?'[lay-filter="'+e+'"]':""}(),s={tab:function(){f.tabAuto.call({})},nav:function(){var t=200,e={},s={},p={},b=function(l,o,r){var c=a(this),f=c.find("."+d);o.hasClass(u)?l.css({top:c.position().top,height:c.children("a").outerHeight(),opacity:1}):(f.addClass(h),l.css({left:c.position().left+parseFloat(c.css("marginLeft")),top:c.position().top+c.height()-l.height()}),e[r]=setTimeout(function(){l.css({width:c.width(),opacity:1})},i.ie&&i.ie<10?0:t),clearTimeout(p[r]),"block"===f.css("display")&&clearTimeout(s[r]),s[r]=setTimeout(function(){f.addClass(n),c.find("."+y).addClass(y+"d")},300))};a(o+l).each(function(i){var l=a(this),o=a(''),h=l.find("."+r);l.find("."+c)[0]||(l.append(o),h.on("mouseenter",function(){b.call(this,o,l,i)}).on("mouseleave",function(){l.hasClass(u)||(clearTimeout(s[i]),s[i]=setTimeout(function(){l.find("."+d).removeClass(n),l.find("."+y).removeClass(y+"d")},300))}),l.on("mouseleave",function(){clearTimeout(e[i]),p[i]=setTimeout(function(){l.hasClass(u)?o.css({height:0,top:o.position().top+o.height()/2,opacity:0}):o.css({width:0,left:o.position().left+o.width()/2,opacity:0})},t)})),h.find("a").each(function(){var t=a(this),i=(t.parent(),t.siblings("."+d));i[0]&&!t.children("."+y)[0]&&t.append(''),t.off("click",f.clickThis).on("click",f.clickThis)})})},breadcrumb:function(){var t=".layui-breadcrumb";a(t+l).each(function(){var t=a(this),i="lay-separator",e=t.attr(i)||"/",l=t.find("a");l.next("span["+i+"]")[0]||(l.each(function(t){t!==l.length-1&&a(this).after(""+e+"")}),t.css("visibility","visible"))})},progress:function(){var t="layui-progress";a("."+t+l).each(function(){var i=a(this),e=i.find(".layui-progress-bar"),l=e.attr("lay-percent");e.css("width",function(){return/^.+\/.+$/.test(l)?100*new Function("return "+l)()+"%":l}()),i.attr("lay-showPercent")&&setTimeout(function(){e.html(''+l+"")},350)})},collapse:function(){var t="layui-collapse";a("."+t+l).each(function(){var t=a(this).find(".layui-colla-item");t.each(function(){var t=a(this),i=t.find(".layui-colla-title"),e=t.find(".layui-colla-content"),l="none"===e.css("display");i.find(".layui-colla-icon").remove(),i.append(''+(l?"":"")+""),i.off("click",f.collapse).on("click",f.collapse)})})}};return s[t]?s[t]():layui.each(s,function(t,a){a()})},s.prototype.render=s.prototype.init;var p=new s,b=a(document);p.render();var v=".layui-tab-title li";b.on("click",v,f.tabClick),b.on("click",f.hideTabMore),a(window).on("resize",f.tabAuto),t(e,p)}); ================================================ FILE: public/assets/luna/layui/lay/modules/flow.js ================================================ /** layui-v2.5.6 MIT License By https://www.layui.com */ ;layui.define("jquery",function(e){"use strict";var l=layui.$,o=function(e){},t='';o.prototype.load=function(e){var o,i,n,r,a=this,c=0;e=e||{};var f=l(e.elem);if(f[0]){var m=l(e.scrollElem||document),u=e.mb||50,s=!("isAuto"in e)||e.isAuto,v=e.end||"没有更多了",y=e.scrollElem&&e.scrollElem!==document,d="加载更多",h=l('");f.find(".layui-flow-more")[0]||f.append(h);var p=function(e,t){e=l(e),h.before(e),t=0==t||null,t?h.html(v):h.find("a").html(d),i=t,o=null,n&&n()},g=function(){o=!0,h.find("a").html(t),"function"==typeof e.done&&e.done(++c,p)};if(g(),h.find("a").on("click",function(){l(this);i||o||g()}),e.isLazyimg)var n=a.lazyimg({elem:e.elem+" img",scrollElem:e.scrollElem});return s?(m.on("scroll",function(){var e=l(this),t=e.scrollTop();r&&clearTimeout(r),!i&&f.width()&&(r=setTimeout(function(){var i=y?e.height():l(window).height(),n=y?e.prop("scrollHeight"):document.documentElement.scrollHeight;n-t-i<=u&&(o||g())},100))}),a):a}},o.prototype.lazyimg=function(e){var o,t=this,i=0;e=e||{};var n=l(e.scrollElem||document),r=e.elem||"img",a=e.scrollElem&&e.scrollElem!==document,c=function(e,l){var o=n.scrollTop(),r=o+l,c=a?function(){return e.offset().top-n.offset().top+o}():e.offset().top;if(c>=o&&c<=r&&!e.attr("src")){var m=e.attr("lay-src");layui.img(m,function(){var l=t.lazyimg.elem.eq(i);e.attr("src",m).removeAttr("lay-src"),l[0]&&f(l),i++})}},f=function(e,o){var f=a?(o||n).height():l(window).height(),m=n.scrollTop(),u=m+f;if(t.lazyimg.elem=l(r),e)c(e,f);else for(var s=0;su)break}};if(f(),!o){var m;n.on("scroll",function(){var e=l(this);m&&clearTimeout(m),m=setTimeout(function(){f(null,e)},50)}),o=!0}return f},e("flow",new o)}); ================================================ FILE: public/assets/luna/layui/lay/modules/form.js ================================================ /** layui-v2.5.6 MIT License By https://www.layui.com */ ;layui.define("layer",function(e){"use strict";var t=layui.$,i=layui.layer,a=layui.hint(),n=layui.device(),l="form",r=".layui-form",s="layui-this",o="layui-hide",c="layui-disabled",u=function(){this.config={verify:{required:[/[\S]+/,"必填项不能为空"],phone:[/^1\d{10}$/,"请输入正确的手机号"],email:[/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/,"邮箱格式不正确"],url:[/(^#)|(^http(s*):\/\/[^\s]+\.[^\s]+)/,"链接格式不正确"],number:function(e){if(!e||isNaN(e))return"只能填写数字"},date:[/^(\d{4})[-\/](\d{1}|0\d{1}|1[0-2])([-\/](\d{1}|0\d{1}|[1-2][0-9]|3[0-1]))*$/,"日期格式不正确"],identity:[/(^\d{15}$)|(^\d{17}(x|X|\d)$)/,"请输入正确的身份证号"]}}};u.prototype.set=function(e){var i=this;return t.extend(!0,i.config,e),i},u.prototype.verify=function(e){var i=this;return t.extend(!0,i.config.verify,e),i},u.prototype.on=function(e,t){return layui.onevent.call(this,l,e,t)},u.prototype.val=function(e,i){var a=this,n=t(r+'[lay-filter="'+e+'"]');return n.each(function(e,a){var n=t(this);layui.each(i,function(e,t){var i,a=n.find('[name="'+e+'"]');a[0]&&(i=a[0].type,"checkbox"===i?a[0].checked=t:"radio"===i?a.each(function(){this.value==t&&(this.checked=!0)}):a.val(t))})}),f.render(null,e),a.getValue(e)},u.prototype.getValue=function(e,i){i=i||t(r+'[lay-filter="'+e+'"]').eq(0);var a={},n={},l=i.find("input,select,textarea");return layui.each(l,function(e,t){if(t.name=(t.name||"").replace(/^\s*|\s*&/,""),t.name){if(/^.*\[\]$/.test(t.name)){var i=t.name.match(/^(.*)\[\]$/g)[0];a[i]=0|a[i],t.name=t.name.replace(/^(.*)\[\]$/,"$1["+a[i]++ +"]")}/^checkbox|radio$/.test(t.type)&&!t.checked||(n[t.name]=t.value)}}),n},u.prototype.render=function(e,i){var n=this,u=t(r+function(){return i?'[lay-filter="'+i+'"]':""}()),d={select:function(){var e,i="请选择",a="layui-form-select",n="layui-select-title",r="layui-select-none",d="",f=u.find("select"),v=function(i,l){t(i.target).parent().hasClass(n)&&!l||(t("."+a).removeClass(a+"ed "+a+"up"),e&&d&&e.val(d)),e=null},y=function(i,u,f){var y,p=t(this),m=i.find("."+n),k=m.find("input"),g=i.find("dl"),x=g.children("dd"),b=this.selectedIndex;if(!u){var C=function(){var e=i.offset().top+i.outerHeight()+5-h.scrollTop(),t=g.outerHeight();b=p[0].selectedIndex,i.addClass(a+"ed"),x.removeClass(o),y=null,x.eq(b).addClass(s).siblings().removeClass(s),e+t>h.height()&&e>=t&&i.addClass(a+"up"),T()},w=function(e){i.removeClass(a+"ed "+a+"up"),k.blur(),y=null,e||$(k.val(),function(e){var i=p[0].selectedIndex;e&&(d=t(p[0].options[i]).html(),0===i&&d===k.attr("placeholder")&&(d=""),k.val(d||""))})},T=function(){var e=g.children("dd."+s);if(e[0]){var t=e.position().top,i=g.height(),a=e.height();t>i&&g.scrollTop(t+g.scrollTop()-i+a-5),t<0&&g.scrollTop(t+g.scrollTop()-5)}};m.on("click",function(e){i.hasClass(a+"ed")?w():(v(e,!0),C()),g.find("."+r).remove()}),m.find(".layui-edge").on("click",function(){k.focus()}),k.on("keyup",function(e){var t=e.keyCode;9===t&&C()}).on("keydown",function(e){var t=e.keyCode;9===t&&w();var i=function(t,a){var n,l;e.preventDefault();var r=function(){var e=g.children("dd."+s);if(g.children("dd."+o)[0]&&"next"===t){var i=g.children("dd:not(."+o+",."+c+")"),n=i.eq(0).index();if(n>=0&&n无匹配项

    '):g.find("."+r).remove()},"keyup"),""===t&&g.find("."+r).remove(),void T())};f&&k.on("keyup",q).on("blur",function(i){var a=p[0].selectedIndex;e=k,d=t(p[0].options[a]).html(),0===a&&d===k.attr("placeholder")&&(d=""),setTimeout(function(){$(k.val(),function(e){d||k.val("")},"blur")},200)}),x.on("click",function(){var e=t(this),a=e.attr("lay-value"),n=p.attr("lay-filter");return!e.hasClass(c)&&(e.hasClass("layui-select-tips")?k.val(""):(k.val(e.text()),e.addClass(s)),e.siblings().removeClass(s),p.val(a).removeClass("layui-form-danger"),layui.event.call(this,l,"select("+n+")",{elem:p[0],value:a,othis:i}),w(!0),!1)}),i.find("dl>dt").on("click",function(e){return!1}),t(document).off("click",v).on("click",v)}};f.each(function(e,l){var r=t(this),o=r.next("."+a),u=this.disabled,d=l.value,f=t(l.options[l.selectedIndex]),v=l.options[0];if("string"==typeof r.attr("lay-ignore"))return r.show();var h="string"==typeof r.attr("lay-search"),p=v?v.value?i:v.innerHTML||i:i,m=t(['
    ','
    ','','
    ','
    ',function(e){var t=[];return layui.each(e,function(e,a){0!==e||a.value?"optgroup"===a.tagName.toLowerCase()?t.push("
    "+a.label+"
    "):t.push('
    '+a.innerHTML+"
    "):t.push('
    '+(a.innerHTML||i)+"
    ")}),0===t.length&&t.push('
    没有选项
    '),t.join("")}(r.find("*"))+"
    ","
    "].join(""));o[0]&&o.remove(),r.after(m),y.call(this,m,u,h)})},checkbox:function(){var e={checkbox:["layui-form-checkbox","layui-form-checked","checkbox"],_switch:["layui-form-switch","layui-form-onswitch","switch"]},i=u.find("input[type=checkbox]"),a=function(e,i){var a=t(this);e.on("click",function(){var t=a.attr("lay-filter"),n=(a.attr("lay-text")||"").split("|");a[0].disabled||(a[0].checked?(a[0].checked=!1,e.removeClass(i[1]).find("em").text(n[1])):(a[0].checked=!0,e.addClass(i[1]).find("em").text(n[0])),layui.event.call(a[0],l,i[2]+"("+t+")",{elem:a[0],value:a[0].value,othis:e}))})};i.each(function(i,n){var l=t(this),r=l.attr("lay-skin"),s=(l.attr("lay-text")||"").split("|"),o=this.disabled;"switch"===r&&(r="_"+r);var u=e[r]||e.checkbox;if("string"==typeof l.attr("lay-ignore"))return l.show();var d=l.next("."+u[0]),f=t(['
    ",function(){var e=n.title.replace(/\s/g,""),t={checkbox:[e?""+n.title+"":"",''].join(""),_switch:""+((n.checked?s[0]:s[1])||"")+""};return t[r]||t.checkbox}(),"
    "].join(""));d[0]&&d.remove(),l.after(f),a.call(this,f,u)})},radio:function(){var e="layui-form-radio",i=["",""],a=u.find("input[type=radio]"),n=function(a){var n=t(this),s="layui-anim-scaleSpring";a.on("click",function(){var o=n[0].name,c=n.parents(r),u=n.attr("lay-filter"),d=c.find("input[name="+o.replace(/(\.|#|\[|\])/g,"\\$1")+"]");n[0].disabled||(layui.each(d,function(){var a=t(this).next("."+e);this.checked=!1,a.removeClass(e+"ed"),a.find(".layui-icon").removeClass(s).html(i[1])}),n[0].checked=!0,a.addClass(e+"ed"),a.find(".layui-icon").addClass(s).html(i[0]),layui.event.call(n[0],l,"radio("+u+")",{elem:n[0],value:n[0].value,othis:a}))})};a.each(function(a,l){var r=t(this),s=r.next("."+e),o=this.disabled;if("string"==typeof r.attr("lay-ignore"))return r.show();s[0]&&s.remove();var u=t(['
    ',''+i[l.checked?0:1]+"","
    "+function(){var e=l.title||"";return"string"==typeof r.next().attr("lay-radio")&&(e=r.next().html(),r.next().remove()),e}()+"
    ","
    "].join(""));r.after(u),n.call(this,u)})}};return e?d[e]?d[e]():a.error("不支持的"+e+"表单渲染"):layui.each(d,function(e,t){t()}),n};var d=function(){var e=null,a=f.config.verify,s="layui-form-danger",o={},c=t(this),u=c.parents(r),d=u.find("*[lay-verify]"),v=c.parents("form")[0],h=c.attr("lay-filter");return layui.each(d,function(l,r){var o=t(this),c=o.attr("lay-verify").split("|"),u=o.attr("lay-verType"),d=o.val();if(o.removeClass(s),layui.each(c,function(t,l){var c,f="",v="function"==typeof a[l];if(a[l]){var c=v?f=a[l](d,r):!a[l][0].test(d);if(f=f||a[l][1],"required"===l&&(f=o.attr("lay-reqText")||f),c)return"tips"===u?i.tips(f,function(){return"string"==typeof o.attr("lay-ignore")||"select"!==r.tagName.toLowerCase()&&!/^checkbox|radio$/.test(r.type)?o:o.next()}(),{tips:1}):"alert"===u?i.alert(f,{title:"提示",shadeClose:!0}):i.msg(f,{icon:5,shift:6}),n.android||n.ios||setTimeout(function(){r.focus()},7),o.addClass(s),e=!0}}),e)return e}),!e&&(o=f.getValue(null,u),layui.event.call(this,l,"submit("+h+")",{elem:this,form:v,field:o}))},f=new u,v=t(document),h=t(window);f.render(),v.on("reset",r,function(){var e=t(this).attr("lay-filter");setTimeout(function(){f.render(null,e)},50)}),v.on("submit",r,d).on("click","*[lay-submit]",d),e(l,f)}); ================================================ FILE: public/assets/luna/layui/lay/modules/jquery.js ================================================ /** layui-v2.5.6 MIT License By https://www.layui.com */ ;!function(e,t){"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){function n(e){var t=!!e&&"length"in e&&e.length,n=pe.type(e);return"function"!==n&&!pe.isWindow(e)&&("array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e)}function r(e,t,n){if(pe.isFunction(t))return pe.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return pe.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(Ce.test(t))return pe.filter(t,e,n);t=pe.filter(t,e)}return pe.grep(e,function(e){return pe.inArray(e,t)>-1!==n})}function i(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}function o(e){var t={};return pe.each(e.match(De)||[],function(e,n){t[n]=!0}),t}function a(){re.addEventListener?(re.removeEventListener("DOMContentLoaded",s),e.removeEventListener("load",s)):(re.detachEvent("onreadystatechange",s),e.detachEvent("onload",s))}function s(){(re.addEventListener||"load"===e.event.type||"complete"===re.readyState)&&(a(),pe.ready())}function u(e,t,n){if(void 0===n&&1===e.nodeType){var r="data-"+t.replace(_e,"-$1").toLowerCase();if(n=e.getAttribute(r),"string"==typeof n){try{n="true"===n||"false"!==n&&("null"===n?null:+n+""===n?+n:qe.test(n)?pe.parseJSON(n):n)}catch(i){}pe.data(e,t,n)}else n=void 0}return n}function l(e){var t;for(t in e)if(("data"!==t||!pe.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}function c(e,t,n,r){if(He(e)){var i,o,a=pe.expando,s=e.nodeType,u=s?pe.cache:e,l=s?e[a]:e[a]&&a;if(l&&u[l]&&(r||u[l].data)||void 0!==n||"string"!=typeof t)return l||(l=s?e[a]=ne.pop()||pe.guid++:a),u[l]||(u[l]=s?{}:{toJSON:pe.noop}),"object"!=typeof t&&"function"!=typeof t||(r?u[l]=pe.extend(u[l],t):u[l].data=pe.extend(u[l].data,t)),o=u[l],r||(o.data||(o.data={}),o=o.data),void 0!==n&&(o[pe.camelCase(t)]=n),"string"==typeof t?(i=o[t],null==i&&(i=o[pe.camelCase(t)])):i=o,i}}function f(e,t,n){if(He(e)){var r,i,o=e.nodeType,a=o?pe.cache:e,s=o?e[pe.expando]:pe.expando;if(a[s]){if(t&&(r=n?a[s]:a[s].data)){pe.isArray(t)?t=t.concat(pe.map(t,pe.camelCase)):t in r?t=[t]:(t=pe.camelCase(t),t=t in r?[t]:t.split(" ")),i=t.length;for(;i--;)delete r[t[i]];if(n?!l(r):!pe.isEmptyObject(r))return}(n||(delete a[s].data,l(a[s])))&&(o?pe.cleanData([e],!0):fe.deleteExpando||a!=a.window?delete a[s]:a[s]=void 0)}}}function d(e,t,n,r){var i,o=1,a=20,s=r?function(){return r.cur()}:function(){return pe.css(e,t,"")},u=s(),l=n&&n[3]||(pe.cssNumber[t]?"":"px"),c=(pe.cssNumber[t]||"px"!==l&&+u)&&Me.exec(pe.css(e,t));if(c&&c[3]!==l){l=l||c[3],n=n||[],c=+u||1;do o=o||".5",c/=o,pe.style(e,t,c+l);while(o!==(o=s()/u)&&1!==o&&--a)}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}function p(e){var t=ze.split("|"),n=e.createDocumentFragment();if(n.createElement)for(;t.length;)n.createElement(t.pop());return n}function h(e,t){var n,r,i=0,o="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):void 0;if(!o)for(o=[],n=e.childNodes||e;null!=(r=n[i]);i++)!t||pe.nodeName(r,t)?o.push(r):pe.merge(o,h(r,t));return void 0===t||t&&pe.nodeName(e,t)?pe.merge([e],o):o}function g(e,t){for(var n,r=0;null!=(n=e[r]);r++)pe._data(n,"globalEval",!t||pe._data(t[r],"globalEval"))}function m(e){Be.test(e.type)&&(e.defaultChecked=e.checked)}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"!==f[1]||Ve.test(a)?0:u:u.firstChild,o=a&&a.childNodes.length;o--;)pe.nodeName(c=a.childNodes[o],"tbody")&&!c.childNodes.length&&a.removeChild(c);for(pe.merge(v,u.childNodes),u.textContent="";u.firstChild;)u.removeChild(u.firstChild);u=y.lastChild}else v.push(t.createTextNode(a));for(u&&y.removeChild(u),fe.appendChecked||pe.grep(h(v,"input"),m),x=0;a=v[x++];)if(r&&pe.inArray(a,r)>-1)i&&i.push(a);else if(s=pe.contains(a.ownerDocument,a),u=h(y.appendChild(a),"script"),s&&g(u),n)for(o=0;a=u[o++];)Ie.test(a.type||"")&&n.push(a);return u=null,y}function v(){return!0}function x(){return!1}function b(){try{return re.activeElement}catch(e){}}function w(e,t,n,r,i,o){var a,s;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(s in t)w(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),i===!1)i=x;else if(!i)return e;return 1===o&&(a=i,i=function(e){return pe().off(e),a.apply(this,arguments)},i.guid=a.guid||(a.guid=pe.guid++)),e.each(function(){pe.event.add(this,t,i,r,n)})}function T(e,t){return pe.nodeName(e,"table")&&pe.nodeName(11!==t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function C(e){return e.type=(null!==pe.find.attr(e,"type"))+"/"+e.type,e}function E(e){var t=it.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function N(e,t){if(1===t.nodeType&&pe.hasData(e)){var n,r,i,o=pe._data(e),a=pe._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;r1&&"string"==typeof p&&!fe.checkClone&&rt.test(p))return e.each(function(i){var o=e.eq(i);g&&(t[0]=p.call(this,i,o.html())),S(o,t,n,r)});if(f&&(l=y(t,e[0].ownerDocument,!1,e,r),i=l.firstChild,1===l.childNodes.length&&(l=i),i||r)){for(s=pe.map(h(l,"script"),C),a=s.length;c")).appendTo(t.documentElement),t=(ut[0].contentWindow||ut[0].contentDocument).document,t.write(),t.close(),n=D(e,t),ut.detach()),lt[e]=n),n}function L(e,t){return{get:function(){return e()?void delete this.get:(this.get=t).apply(this,arguments)}}}function H(e){if(e in Et)return e;for(var t=e.charAt(0).toUpperCase()+e.slice(1),n=Ct.length;n--;)if(e=Ct[n]+t,e in Et)return e}function q(e,t){for(var n,r,i,o=[],a=0,s=e.length;a=0&&n=0},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},isPlainObject:function(e){var t;if(!e||"object"!==pe.type(e)||e.nodeType||pe.isWindow(e))return!1;try{if(e.constructor&&!ce.call(e,"constructor")&&!ce.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(n){return!1}if(!fe.ownFirst)for(t in e)return ce.call(e,t);for(t in e);return void 0===t||ce.call(e,t)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?ue[le.call(e)]||"object":typeof e},globalEval:function(t){t&&pe.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(ge,"ms-").replace(me,ye)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t){var r,i=0;if(n(e))for(r=e.length;iT.cacheLength&&delete e[t.shift()],e[n+" "]=r}var t=[];return e}function r(e){return e[P]=!0,e}function i(e){var t=H.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function o(e,t){for(var n=e.split("|"),r=n.length;r--;)T.attrHandle[n[r]]=t}function a(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||V)-(~e.sourceIndex||V);if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function s(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function u(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function l(e){return r(function(t){return t=+t,r(function(n,r){for(var i,o=e([],n.length,t),a=o.length;a--;)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function c(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function f(){}function d(e){for(var t=0,n=e.length,r="";t1?function(t,n,r){for(var i=e.length;i--;)if(!e[i](t,n,r))return!1;return!0}:e[0]}function g(e,n,r){for(var i=0,o=n.length;i-1&&(r[l]=!(a[l]=f))}}else x=m(x===a?x.splice(h,x.length):x),o?o(null,a,x,u):Q.apply(a,x)})}function v(e){for(var t,n,r,i=e.length,o=T.relative[e[0].type],a=o||T.relative[" "],s=o?1:0,u=p(function(e){return e===t},a,!0),l=p(function(e){return ee(t,e)>-1},a,!0),c=[function(e,n,r){var i=!o&&(r||n!==A)||((t=n).nodeType?u(e,n,r):l(e,n,r));return t=null,i}];s1&&h(c),s>1&&d(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace(se,"$1"),n,s0,o=e.length>0,a=function(r,a,s,u,l){var c,f,d,p=0,h="0",g=r&&[],y=[],v=A,x=r||o&&T.find.TAG("*",l),b=W+=null==v?1:Math.random()||.1,w=x.length;for(l&&(A=a===H||a||l);h!==w&&null!=(c=x[h]);h++){if(o&&c){for(f=0,a||c.ownerDocument===H||(L(c),s=!_);d=e[f++];)if(d(c,a||H,s)){u.push(c);break}l&&(W=b)}i&&((c=!d&&c)&&p--,r&&g.push(c))}if(p+=h,i&&h!==p){for(f=0;d=n[f++];)d(g,y,a,s);if(r){if(p>0)for(;h--;)g[h]||y[h]||(y[h]=G.call(u));y=m(y)}Q.apply(u,y),l&&!r&&y.length>0&&p+n.length>1&&t.uniqueSort(u)}return l&&(W=b,A=v),g};return i?r(a):a}var b,w,T,C,E,N,k,S,A,D,j,L,H,q,_,F,M,O,R,P="sizzle"+1*new Date,B=e.document,W=0,I=0,$=n(),z=n(),X=n(),U=function(e,t){return e===t&&(j=!0),0},V=1<<31,Y={}.hasOwnProperty,J=[],G=J.pop,K=J.push,Q=J.push,Z=J.slice,ee=function(e,t){for(var n=0,r=e.length;n+~]|"+ne+")"+ne+"*"),ce=new RegExp("="+ne+"*([^\\]'\"]*?)"+ne+"*\\]","g"),fe=new RegExp(oe),de=new RegExp("^"+re+"$"),pe={ID:new RegExp("^#("+re+")"),CLASS:new RegExp("^\\.("+re+")"),TAG:new RegExp("^("+re+"|[*])"),ATTR:new RegExp("^"+ie),PSEUDO:new RegExp("^"+oe),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ne+"*(even|odd|(([+-]|)(\\d*)n|)"+ne+"*(?:([+-]|)"+ne+"*(\\d+)|))"+ne+"*\\)|)","i"),bool:new RegExp("^(?:"+te+")$","i"),needsContext:new RegExp("^"+ne+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ne+"*((?:-\\d)?\\d*)"+ne+"*\\)|)(?=[^-]|$)","i")},he=/^(?:input|select|textarea|button)$/i,ge=/^h\d$/i,me=/^[^{]+\{\s*\[native \w/,ye=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ve=/[+~]/,xe=/'|\\/g,be=new RegExp("\\\\([\\da-f]{1,6}"+ne+"?|("+ne+")|.)","ig"),we=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},Te=function(){L()};try{Q.apply(J=Z.call(B.childNodes),B.childNodes),J[B.childNodes.length].nodeType}catch(Ce){Q={apply:J.length?function(e,t){K.apply(e,Z.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}w=t.support={},E=t.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},L=t.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:B;return r!==H&&9===r.nodeType&&r.documentElement?(H=r,q=H.documentElement,_=!E(H),(n=H.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",Te,!1):n.attachEvent&&n.attachEvent("onunload",Te)),w.attributes=i(function(e){return e.className="i",!e.getAttribute("className")}),w.getElementsByTagName=i(function(e){return e.appendChild(H.createComment("")),!e.getElementsByTagName("*").length}),w.getElementsByClassName=me.test(H.getElementsByClassName),w.getById=i(function(e){return q.appendChild(e).id=P,!H.getElementsByName||!H.getElementsByName(P).length}),w.getById?(T.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&_){var n=t.getElementById(e);return n?[n]:[]}},T.filter.ID=function(e){var t=e.replace(be,we);return function(e){return e.getAttribute("id")===t}}):(delete T.find.ID,T.filter.ID=function(e){var t=e.replace(be,we);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}}),T.find.TAG=w.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):w.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){for(;n=o[i++];)1===n.nodeType&&r.push(n);return r}return o},T.find.CLASS=w.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&_)return t.getElementsByClassName(e)},M=[],F=[],(w.qsa=me.test(H.querySelectorAll))&&(i(function(e){q.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&F.push("[*^$]="+ne+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||F.push("\\["+ne+"*(?:value|"+te+")"),e.querySelectorAll("[id~="+P+"-]").length||F.push("~="),e.querySelectorAll(":checked").length||F.push(":checked"),e.querySelectorAll("a#"+P+"+*").length||F.push(".#.+[+~]")}),i(function(e){var t=H.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&F.push("name"+ne+"*[*^$|!~]?="),e.querySelectorAll(":enabled").length||F.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),F.push(",.*:")})),(w.matchesSelector=me.test(O=q.matches||q.webkitMatchesSelector||q.mozMatchesSelector||q.oMatchesSelector||q.msMatchesSelector))&&i(function(e){w.disconnectedMatch=O.call(e,"div"),O.call(e,"[s!='']:x"),M.push("!=",oe)}),F=F.length&&new RegExp(F.join("|")),M=M.length&&new RegExp(M.join("|")),t=me.test(q.compareDocumentPosition),R=t||me.test(q.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},U=t?function(e,t){if(e===t)return j=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n?n:(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1,1&n||!w.sortDetached&&t.compareDocumentPosition(e)===n?e===H||e.ownerDocument===B&&R(B,e)?-1:t===H||t.ownerDocument===B&&R(B,t)?1:D?ee(D,e)-ee(D,t):0:4&n?-1:1)}:function(e,t){if(e===t)return j=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,s=[e],u=[t];if(!i||!o)return e===H?-1:t===H?1:i?-1:o?1:D?ee(D,e)-ee(D,t):0;if(i===o)return a(e,t);for(n=e;n=n.parentNode;)s.unshift(n);for(n=t;n=n.parentNode;)u.unshift(n);for(;s[r]===u[r];)r++;return r?a(s[r],u[r]):s[r]===B?-1:u[r]===B?1:0},H):H},t.matches=function(e,n){return t(e,null,null,n)},t.matchesSelector=function(e,n){if((e.ownerDocument||e)!==H&&L(e),n=n.replace(ce,"='$1']"),w.matchesSelector&&_&&!X[n+" "]&&(!M||!M.test(n))&&(!F||!F.test(n)))try{var r=O.call(e,n);if(r||w.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(i){}return t(n,H,null,[e]).length>0},t.contains=function(e,t){return(e.ownerDocument||e)!==H&&L(e),R(e,t)},t.attr=function(e,t){(e.ownerDocument||e)!==H&&L(e);var n=T.attrHandle[t.toLowerCase()],r=n&&Y.call(T.attrHandle,t.toLowerCase())?n(e,t,!_):void 0;return void 0!==r?r:w.attributes||!_?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},t.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},t.uniqueSort=function(e){var t,n=[],r=0,i=0;if(j=!w.detectDuplicates,D=!w.sortStable&&e.slice(0),e.sort(U),j){for(;t=e[i++];)t===e[i]&&(r=n.push(i));for(;r--;)e.splice(n[r],1)}return D=null,e},C=t.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=C(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r++];)n+=C(t);return n},T=t.selectors={cacheLength:50,createPseudo:r,match:pe,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(be,we),e[3]=(e[3]||e[4]||e[5]||"").replace(be,we),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||t.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&t.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return pe.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&fe.test(n)&&(t=N(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(be,we).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=$[e+" "];return t||(t=new RegExp("(^|"+ne+")"+e+"("+ne+"|$)"))&&$(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,n,r){return function(i){var o=t.attr(i,e);return null==o?"!="===n:!n||(o+="","="===n?o===r:"!="===n?o!==r:"^="===n?r&&0===o.indexOf(r):"*="===n?r&&o.indexOf(r)>-1:"$="===n?r&&o.slice(-r.length)===r:"~="===n?(" "+o.replace(ae," ")+" ").indexOf(r)>-1:"|="===n&&(o===r||o.slice(0,r.length+1)===r+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,d,p,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!u&&!s,x=!1;if(m){if(o){for(;g;){for(d=t;d=d[g];)if(s?d.nodeName.toLowerCase()===y:1===d.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){for(d=m,f=d[P]||(d[P]={}),c=f[d.uniqueID]||(f[d.uniqueID]={}), l=c[e]||[],p=l[0]===W&&l[1],x=p&&l[2],d=p&&m.childNodes[p];d=++p&&d&&d[g]||(x=p=0)||h.pop();)if(1===d.nodeType&&++x&&d===t){c[e]=[W,p,x];break}}else if(v&&(d=t,f=d[P]||(d[P]={}),c=f[d.uniqueID]||(f[d.uniqueID]={}),l=c[e]||[],p=l[0]===W&&l[1],x=p),x===!1)for(;(d=++p&&d&&d[g]||(x=p=0)||h.pop())&&((s?d.nodeName.toLowerCase()!==y:1!==d.nodeType)||!++x||(v&&(f=d[P]||(d[P]={}),c=f[d.uniqueID]||(f[d.uniqueID]={}),c[e]=[W,x]),d!==t)););return x-=i,x===r||x%r===0&&x/r>=0}}},PSEUDO:function(e,n){var i,o=T.pseudos[e]||T.setFilters[e.toLowerCase()]||t.error("unsupported pseudo: "+e);return o[P]?o(n):o.length>1?(i=[e,e,"",n],T.setFilters.hasOwnProperty(e.toLowerCase())?r(function(e,t){for(var r,i=o(e,n),a=i.length;a--;)r=ee(e,i[a]),e[r]=!(t[r]=i[a])}):function(e){return o(e,0,i)}):o}},pseudos:{not:r(function(e){var t=[],n=[],i=k(e.replace(se,"$1"));return i[P]?r(function(e,t,n,r){for(var o,a=i(e,null,r,[]),s=e.length;s--;)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,r,o){return t[0]=e,i(t,null,o,n),t[0]=null,!n.pop()}}),has:r(function(e){return function(n){return t(e,n).length>0}}),contains:r(function(e){return e=e.replace(be,we),function(t){return(t.textContent||t.innerText||C(t)).indexOf(e)>-1}}),lang:r(function(e){return de.test(e||"")||t.error("unsupported lang: "+e),e=e.replace(be,we).toLowerCase(),function(t){var n;do if(n=_?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===q},focus:function(e){return e===H.activeElement&&(!H.hasFocus||H.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!T.pseudos.empty(e)},header:function(e){return ge.test(e.nodeName)},input:function(e){return he.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:l(function(){return[0]}),last:l(function(e,t){return[t-1]}),eq:l(function(e,t,n){return[n<0?n+t:n]}),even:l(function(e,t){for(var n=0;n=0;)e.push(r);return e}),gt:l(function(e,t,n){for(var r=n<0?n+t:n;++r2&&"ID"===(a=o[0]).type&&w.getById&&9===t.nodeType&&_&&T.relative[o[1].type]){if(t=(T.find.ID(a.matches[0].replace(be,we),t)||[])[0],!t)return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}for(i=pe.needsContext.test(e)?0:o.length;i--&&(a=o[i],!T.relative[s=a.type]);)if((u=T.find[s])&&(r=u(a.matches[0].replace(be,we),ve.test(o[0].type)&&c(t.parentNode)||t))){if(o.splice(i,1),e=r.length&&d(o),!e)return Q.apply(n,r),n;break}}return(l||k(e,f))(r,t,!_,n,!t||ve.test(e)&&c(t.parentNode)||t),n},w.sortStable=P.split("").sort(U).join("")===P,w.detectDuplicates=!!j,L(),w.sortDetached=i(function(e){return 1&e.compareDocumentPosition(H.createElement("div"))}),i(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||o("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),w.attributes&&i(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||o("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),i(function(e){return null==e.getAttribute("disabled")})||o(te,function(e,t,n){var r;if(!n)return e[t]===!0?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),t}(e);pe.find=ve,pe.expr=ve.selectors,pe.expr[":"]=pe.expr.pseudos,pe.uniqueSort=pe.unique=ve.uniqueSort,pe.text=ve.getText,pe.isXMLDoc=ve.isXML,pe.contains=ve.contains;var xe=function(e,t,n){for(var r=[],i=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(i&&pe(e).is(n))break;r.push(e)}return r},be=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},we=pe.expr.match.needsContext,Te=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,Ce=/^.[^:#\[\.,]*$/;pe.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?pe.find.matchesSelector(r,e)?[r]:[]:pe.find.matches(e,pe.grep(t,function(e){return 1===e.nodeType}))},pe.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if("string"!=typeof e)return this.pushStack(pe(e).filter(function(){for(t=0;t1?pe.unique(n):n),n.selector=this.selector?this.selector+" "+e:e,n},filter:function(e){return this.pushStack(r(this,e||[],!1))},not:function(e){return this.pushStack(r(this,e||[],!0))},is:function(e){return!!r(this,"string"==typeof e&&we.test(e)?pe(e):e||[],!1).length}});var Ee,Ne=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,ke=pe.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||Ee,"string"==typeof e){if(r="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:Ne.exec(e),!r||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof pe?t[0]:t,pe.merge(this,pe.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:re,!0)),Te.test(r[1])&&pe.isPlainObject(t))for(r in t)pe.isFunction(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}if(i=re.getElementById(r[2]),i&&i.parentNode){if(i.id!==r[2])return Ee.find(e);this.length=1,this[0]=i}return this.context=re,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):pe.isFunction(e)?"undefined"!=typeof n.ready?n.ready(e):e(pe):(void 0!==e.selector&&(this.selector=e.selector,this.context=e.context),pe.makeArray(e,this))};ke.prototype=pe.fn,Ee=pe(re);var Se=/^(?:parents|prev(?:Until|All))/,Ae={children:!0,contents:!0,next:!0,prev:!0};pe.fn.extend({has:function(e){var t,n=pe(e,this),r=n.length;return this.filter(function(){for(t=0;t-1:1===n.nodeType&&pe.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?pe.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?pe.inArray(this[0],pe(e)):pe.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(pe.uniqueSort(pe.merge(this.get(),pe(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),pe.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return xe(e,"parentNode")},parentsUntil:function(e,t,n){return xe(e,"parentNode",n)},next:function(e){return i(e,"nextSibling")},prev:function(e){return i(e,"previousSibling")},nextAll:function(e){return xe(e,"nextSibling")},prevAll:function(e){return xe(e,"previousSibling")},nextUntil:function(e,t,n){return xe(e,"nextSibling",n)},prevUntil:function(e,t,n){return xe(e,"previousSibling",n)},siblings:function(e){return be((e.parentNode||{}).firstChild,e)},children:function(e){return be(e.firstChild)},contents:function(e){return pe.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:pe.merge([],e.childNodes)}},function(e,t){pe.fn[e]=function(n,r){var i=pe.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=pe.filter(r,i)),this.length>1&&(Ae[e]||(i=pe.uniqueSort(i)),Se.test(e)&&(i=i.reverse())),this.pushStack(i)}});var De=/\S+/g;pe.Callbacks=function(e){e="string"==typeof e?o(e):pe.extend({},e);var t,n,r,i,a=[],s=[],u=-1,l=function(){for(i=e.once,r=t=!0;s.length;u=-1)for(n=s.shift();++u-1;)a.splice(n,1),n<=u&&u--}),this},has:function(e){return e?pe.inArray(e,a)>-1:a.length>0},empty:function(){return a&&(a=[]),this},disable:function(){return i=s=[],a=n="",this},disabled:function(){return!a},lock:function(){return i=!0,n||c.disable(),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=n||[],n=[e,n.slice?n.slice():n],s.push(n),t||l()),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!r}};return c},pe.extend({Deferred:function(e){var t=[["resolve","done",pe.Callbacks("once memory"),"resolved"],["reject","fail",pe.Callbacks("once memory"),"rejected"],["notify","progress",pe.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return pe.Deferred(function(n){pe.each(t,function(t,o){var a=pe.isFunction(e[t])&&e[t];i[o[1]](function(){var e=a&&a.apply(this,arguments);e&&pe.isFunction(e.promise)?e.promise().progress(n.notify).done(n.resolve).fail(n.reject):n[o[0]+"With"](this===r?n.promise():this,a?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?pe.extend(e,r):r}},i={};return r.pipe=r.then,pe.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t,n,r,i=0,o=ie.call(arguments),a=o.length,s=1!==a||e&&pe.isFunction(e.promise)?a:0,u=1===s?e:pe.Deferred(),l=function(e,n,r){return function(i){n[e]=this,r[e]=arguments.length>1?ie.call(arguments):i,r===t?u.notifyWith(n,r):--s||u.resolveWith(n,r)}};if(a>1)for(t=new Array(a),n=new Array(a),r=new Array(a);i0||(je.resolveWith(re,[pe]),pe.fn.triggerHandler&&(pe(re).triggerHandler("ready"),pe(re).off("ready"))))}}),pe.ready.promise=function(t){if(!je)if(je=pe.Deferred(),"complete"===re.readyState||"loading"!==re.readyState&&!re.documentElement.doScroll)e.setTimeout(pe.ready);else if(re.addEventListener)re.addEventListener("DOMContentLoaded",s),e.addEventListener("load",s);else{re.attachEvent("onreadystatechange",s),e.attachEvent("onload",s);var n=!1;try{n=null==e.frameElement&&re.documentElement}catch(r){}n&&n.doScroll&&!function i(){if(!pe.isReady){try{n.doScroll("left")}catch(t){return e.setTimeout(i,50)}a(),pe.ready()}}()}return je.promise(t)},pe.ready.promise();var Le;for(Le in pe(fe))break;fe.ownFirst="0"===Le,fe.inlineBlockNeedsLayout=!1,pe(function(){var e,t,n,r;n=re.getElementsByTagName("body")[0],n&&n.style&&(t=re.createElement("div"),r=re.createElement("div"),r.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",n.appendChild(r).appendChild(t),"undefined"!=typeof t.style.zoom&&(t.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",fe.inlineBlockNeedsLayout=e=3===t.offsetWidth,e&&(n.style.zoom=1)),n.removeChild(r))}),function(){var e=re.createElement("div");fe.deleteExpando=!0;try{delete e.test}catch(t){fe.deleteExpando=!1}e=null}();var He=function(e){var t=pe.noData[(e.nodeName+" ").toLowerCase()],n=+e.nodeType||1;return(1===n||9===n)&&(!t||t!==!0&&e.getAttribute("classid")===t)},qe=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,_e=/([A-Z])/g;pe.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(e){return e=e.nodeType?pe.cache[e[pe.expando]]:e[pe.expando],!!e&&!l(e)},data:function(e,t,n){return c(e,t,n)},removeData:function(e,t){return f(e,t)},_data:function(e,t,n){return c(e,t,n,!0)},_removeData:function(e,t){return f(e,t,!0)}}),pe.fn.extend({data:function(e,t){var n,r,i,o=this[0],a=o&&o.attributes;if(void 0===e){if(this.length&&(i=pe.data(o),1===o.nodeType&&!pe._data(o,"parsedAttrs"))){for(n=a.length;n--;)a[n]&&(r=a[n].name,0===r.indexOf("data-")&&(r=pe.camelCase(r.slice(5)),u(o,r,i[r])));pe._data(o,"parsedAttrs",!0)}return i}return"object"==typeof e?this.each(function(){pe.data(this,e)}):arguments.length>1?this.each(function(){pe.data(this,e,t)}):o?u(o,e,pe.data(o,e)):void 0},removeData:function(e){return this.each(function(){pe.removeData(this,e)})}}),pe.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=pe._data(e,t),n&&(!r||pe.isArray(n)?r=pe._data(e,t,pe.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=pe.queue(e,t),r=n.length,i=n.shift(),o=pe._queueHooks(e,t),a=function(){pe.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return pe._data(e,n)||pe._data(e,n,{empty:pe.Callbacks("once memory").add(function(){pe._removeData(e,t+"queue"),pe._removeData(e,n)})})}}),pe.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length
    a",fe.leadingWhitespace=3===e.firstChild.nodeType,fe.tbody=!e.getElementsByTagName("tbody").length,fe.htmlSerialize=!!e.getElementsByTagName("link").length,fe.html5Clone="<:nav>"!==re.createElement("nav").cloneNode(!0).outerHTML,n.type="checkbox",n.checked=!0,t.appendChild(n),fe.appendChecked=n.checked,e.innerHTML="",fe.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue,t.appendChild(e),n=re.createElement("input"),n.setAttribute("type","radio"),n.setAttribute("checked","checked"),n.setAttribute("name","t"),e.appendChild(n),fe.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,fe.noCloneEvent=!!e.addEventListener,e[pe.expando]=1,fe.attributes=!e.getAttribute(pe.expando)}();var Xe={option:[1,""],legend:[1,"
    ","
    "],area:[1,"",""],param:[1,"",""],thead:[1,"","
    "],tr:[2,"","
    "],col:[2,"","
    "],td:[3,"","
    "],_default:fe.htmlSerialize?[0,"",""]:[1,"X
    ","
    "]};Xe.optgroup=Xe.option,Xe.tbody=Xe.tfoot=Xe.colgroup=Xe.caption=Xe.thead,Xe.th=Xe.td;var Ue=/<|&#?\w+;/,Ve=/-1&&(h=p.split("."),p=h.shift(),h.sort()),a=p.indexOf(":")<0&&"on"+p,t=t[pe.expando]?t:new pe.Event(p,"object"==typeof t&&t),t.isTrigger=i?2:3,t.namespace=h.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=r),n=null==n?[t]:pe.makeArray(n,[t]),l=pe.event.special[p]||{},i||!l.trigger||l.trigger.apply(r,n)!==!1)){if(!i&&!l.noBubble&&!pe.isWindow(r)){for(u=l.delegateType||p,Ke.test(u+p)||(s=s.parentNode);s;s=s.parentNode)d.push(s),c=s;c===(r.ownerDocument||re)&&d.push(c.defaultView||c.parentWindow||e)}for(f=0;(s=d[f++])&&!t.isPropagationStopped();)t.type=f>1?u:l.bindType||p,o=(pe._data(s,"events")||{})[t.type]&&pe._data(s,"handle"),o&&o.apply(s,n),o=a&&s[a],o&&o.apply&&He(s)&&(t.result=o.apply(s,n),t.result===!1&&t.preventDefault());if(t.type=p,!i&&!t.isDefaultPrevented()&&(!l._default||l._default.apply(d.pop(),n)===!1)&&He(r)&&a&&r[p]&&!pe.isWindow(r)){c=r[a],c&&(r[a]=null),pe.event.triggered=p;try{r[p]()}catch(g){}pe.event.triggered=void 0,c&&(r[a]=c)}return t.result}},dispatch:function(e){e=pe.event.fix(e);var t,n,r,i,o,a=[],s=ie.call(arguments),u=(pe._data(this,"events")||{})[e.type]||[],l=pe.event.special[e.type]||{};if(s[0]=e,e.delegateTarget=this,!l.preDispatch||l.preDispatch.call(this,e)!==!1){for(a=pe.event.handlers.call(this,e,u),t=0;(i=a[t++])&&!e.isPropagationStopped();)for(e.currentTarget=i.elem,n=0;(o=i.handlers[n++])&&!e.isImmediatePropagationStopped();)e.rnamespace&&!e.rnamespace.test(o.namespace)||(e.handleObj=o,e.data=o.data,r=((pe.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s),void 0!==r&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()));return l.postDispatch&&l.postDispatch.call(this,e),e.result}},handlers:function(e,t){var n,r,i,o,a=[],s=t.delegateCount,u=e.target;if(s&&u.nodeType&&("click"!==e.type||isNaN(e.button)||e.button<1))for(;u!=this;u=u.parentNode||this)if(1===u.nodeType&&(u.disabled!==!0||"click"!==e.type)){for(r=[],n=0;n-1:pe.find(i,this,null,[u]).length),r[i]&&r.push(o);r.length&&a.push({elem:u,handlers:r})}return s]","i"),tt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,nt=/\s*$/g,at=p(re),st=at.appendChild(re.createElement("div"));pe.extend({htmlPrefilter:function(e){return e.replace(tt,"<$1>")},clone:function(e,t,n){var r,i,o,a,s,u=pe.contains(e.ownerDocument,e);if(fe.html5Clone||pe.isXMLDoc(e)||!et.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(st.innerHTML=e.outerHTML,st.removeChild(o=st.firstChild)),!(fe.noCloneEvent&&fe.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||pe.isXMLDoc(e)))for(r=h(o),s=h(e),a=0;null!=(i=s[a]);++a)r[a]&&k(i,r[a]);if(t)if(n)for(s=s||h(e),r=r||h(o),a=0;null!=(i=s[a]);a++)N(i,r[a]);else N(e,o);return r=h(o,"script"),r.length>0&&g(r,!u&&h(e,"script")),r=s=i=null,o},cleanData:function(e,t){for(var n,r,i,o,a=0,s=pe.expando,u=pe.cache,l=fe.attributes,c=pe.event.special;null!=(n=e[a]);a++)if((t||He(n))&&(i=n[s],o=i&&u[i])){if(o.events)for(r in o.events)c[r]?pe.event.remove(n,r):pe.removeEvent(n,r,o.handle);u[i]&&(delete u[i],l||"undefined"==typeof n.removeAttribute?n[s]=void 0:n.removeAttribute(s),ne.push(i))}}}),pe.fn.extend({domManip:S,detach:function(e){return A(this,e,!0)},remove:function(e){return A(this,e)},text:function(e){return Pe(this,function(e){return void 0===e?pe.text(this):this.empty().append((this[0]&&this[0].ownerDocument||re).createTextNode(e))},null,e,arguments.length)},append:function(){return S(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=T(this,e);t.appendChild(e)}})},prepend:function(){return S(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=T(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return S(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return S(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++){for(1===e.nodeType&&pe.cleanData(h(e,!1));e.firstChild;)e.removeChild(e.firstChild);e.options&&pe.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return pe.clone(this,e,t)})},html:function(e){return Pe(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e)return 1===t.nodeType?t.innerHTML.replace(Ze,""):void 0;if("string"==typeof e&&!nt.test(e)&&(fe.htmlSerialize||!et.test(e))&&(fe.leadingWhitespace||!$e.test(e))&&!Xe[(We.exec(e)||["",""])[1].toLowerCase()]){e=pe.htmlPrefilter(e);try{for(;nt",t=l.getElementsByTagName("td"),t[0].style.cssText="margin:0;border:0;padding:0;display:none",o=0===t[0].offsetHeight,o&&(t[0].style.display="",t[1].style.display="none",o=0===t[0].offsetHeight)),f.removeChild(u)}var n,r,i,o,a,s,u=re.createElement("div"),l=re.createElement("div");l.style&&(l.style.cssText="float:left;opacity:.5",fe.opacity="0.5"===l.style.opacity,fe.cssFloat=!!l.style.cssFloat,l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",fe.clearCloneStyle="content-box"===l.style.backgroundClip,u=re.createElement("div"),u.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",l.innerHTML="",u.appendChild(l),fe.boxSizing=""===l.style.boxSizing||""===l.style.MozBoxSizing||""===l.style.WebkitBoxSizing,pe.extend(fe,{reliableHiddenOffsets:function(){return null==n&&t(),o},boxSizingReliable:function(){return null==n&&t(),i},pixelMarginRight:function(){return null==n&&t(),r},pixelPosition:function(){return null==n&&t(),n},reliableMarginRight:function(){return null==n&&t(),a},reliableMarginLeft:function(){return null==n&&t(),s}}))}();var ht,gt,mt=/^(top|right|bottom|left)$/;e.getComputedStyle?(ht=function(t){var n=t.ownerDocument.defaultView;return n&&n.opener||(n=e),n.getComputedStyle(t)},gt=function(e,t,n){var r,i,o,a,s=e.style;return n=n||ht(e),a=n?n.getPropertyValue(t)||n[t]:void 0,""!==a&&void 0!==a||pe.contains(e.ownerDocument,e)||(a=pe.style(e,t)),n&&!fe.pixelMarginRight()&&ft.test(a)&&ct.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o),void 0===a?a:a+""}):pt.currentStyle&&(ht=function(e){return e.currentStyle},gt=function(e,t,n){var r,i,o,a,s=e.style;return n=n||ht(e),a=n?n[t]:void 0,null==a&&s&&s[t]&&(a=s[t]),ft.test(a)&&!mt.test(t)&&(r=s.left,i=e.runtimeStyle,o=i&&i.left,o&&(i.left=e.currentStyle.left),s.left="fontSize"===t?"1em":a,a=s.pixelLeft+"px",s.left=r,o&&(i.left=o)),void 0===a?a:a+""||"auto"});var yt=/alpha\([^)]*\)/i,vt=/opacity\s*=\s*([^)]*)/i,xt=/^(none|table(?!-c[ea]).+)/,bt=new RegExp("^("+Fe+")(.*)$","i"),wt={position:"absolute",visibility:"hidden",display:"block"},Tt={letterSpacing:"0",fontWeight:"400"},Ct=["Webkit","O","Moz","ms"],Et=re.createElement("div").style;pe.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=gt(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":fe.cssFloat?"cssFloat":"styleFloat"},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=pe.camelCase(t),u=e.style;if(t=pe.cssProps[s]||(pe.cssProps[s]=H(s)||s),a=pe.cssHooks[t]||pe.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:u[t];if(o=typeof n,"string"===o&&(i=Me.exec(n))&&i[1]&&(n=d(e,t,i),o="number"),null!=n&&n===n&&("number"===o&&(n+=i&&i[3]||(pe.cssNumber[s]?"":"px")),fe.clearCloneStyle||""!==n||0!==t.indexOf("background")||(u[t]="inherit"),!(a&&"set"in a&&void 0===(n=a.set(e,n,r)))))try{u[t]=n}catch(l){}}},css:function(e,t,n,r){var i,o,a,s=pe.camelCase(t);return t=pe.cssProps[s]||(pe.cssProps[s]=H(s)||s),a=pe.cssHooks[t]||pe.cssHooks[s],a&&"get"in a&&(o=a.get(e,!0,n)),void 0===o&&(o=gt(e,t,r)),"normal"===o&&t in Tt&&(o=Tt[t]),""===n||n?(i=parseFloat(o),n===!0||isFinite(i)?i||0:o):o}}),pe.each(["height","width"],function(e,t){pe.cssHooks[t]={get:function(e,n,r){if(n)return xt.test(pe.css(e,"display"))&&0===e.offsetWidth?dt(e,wt,function(){return M(e,t,r)}):M(e,t,r)},set:function(e,n,r){var i=r&&ht(e);return _(e,n,r?F(e,t,r,fe.boxSizing&&"border-box"===pe.css(e,"boxSizing",!1,i),i):0)}}}),fe.opacity||(pe.cssHooks.opacity={get:function(e,t){return vt.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=pe.isNumeric(t)?"alpha(opacity="+100*t+")":"",o=r&&r.filter||n.filter||"";n.zoom=1,(t>=1||""===t)&&""===pe.trim(o.replace(yt,""))&&n.removeAttribute&&(n.removeAttribute("filter"),""===t||r&&!r.filter)||(n.filter=yt.test(o)?o.replace(yt,i):o+" "+i)}}),pe.cssHooks.marginRight=L(fe.reliableMarginRight,function(e,t){if(t)return dt(e,{display:"inline-block"},gt,[e,"marginRight"])}),pe.cssHooks.marginLeft=L(fe.reliableMarginLeft,function(e,t){if(t)return(parseFloat(gt(e,"marginLeft"))||(pe.contains(e.ownerDocument,e)?e.getBoundingClientRect().left-dt(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}):0))+"px"}),pe.each({margin:"",padding:"",border:"Width"},function(e,t){pe.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o="string"==typeof n?n.split(" "):[n];r<4;r++)i[e+Oe[r]+t]=o[r]||o[r-2]||o[0];return i}},ct.test(e)||(pe.cssHooks[e+t].set=_)}),pe.fn.extend({css:function(e,t){return Pe(this,function(e,t,n){var r,i,o={},a=0;if(pe.isArray(t)){for(r=ht(e),i=t.length;a1)},show:function(){return q(this,!0)},hide:function(){return q(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){Re(this)?pe(this).show():pe(this).hide()})}}),pe.Tween=O,O.prototype={constructor:O,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||pe.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(pe.cssNumber[n]?"":"px")},cur:function(){var e=O.propHooks[this.prop];return e&&e.get?e.get(this):O.propHooks._default.get(this)},run:function(e){var t,n=O.propHooks[this.prop];return this.options.duration?this.pos=t=pe.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):O.propHooks._default.set(this),this}},O.prototype.init.prototype=O.prototype,O.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=pe.css(e.elem,e.prop,""),t&&"auto"!==t?t:0)},set:function(e){pe.fx.step[e.prop]?pe.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[pe.cssProps[e.prop]]&&!pe.cssHooks[e.prop]?e.elem[e.prop]=e.now:pe.style(e.elem,e.prop,e.now+e.unit)}}},O.propHooks.scrollTop=O.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},pe.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},pe.fx=O.prototype.init,pe.fx.step={};var Nt,kt,St=/^(?:toggle|show|hide)$/,At=/queueHooks$/;pe.Animation=pe.extend($,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return d(n.elem,e,Me.exec(t),n),n}]},tweener:function(e,t){pe.isFunction(e)?(t=e,e=["*"]):e=e.match(De);for(var n,r=0,i=e.length;r
    a",e=n.getElementsByTagName("a")[0],t.setAttribute("type","checkbox"),n.appendChild(t),e=n.getElementsByTagName("a")[0],e.style.cssText="top:1px",fe.getSetAttribute="t"!==n.className,fe.style=/top/.test(e.getAttribute("style")),fe.hrefNormalized="/a"===e.getAttribute("href"),fe.checkOn=!!t.value,fe.optSelected=i.selected,fe.enctype=!!re.createElement("form").enctype,r.disabled=!0,fe.optDisabled=!i.disabled,t=re.createElement("input"),t.setAttribute("value",""),fe.input=""===t.getAttribute("value"),t.value="t",t.setAttribute("type","radio"),fe.radioValue="t"===t.value}();var Dt=/\r/g,jt=/[\x20\t\r\n\f]+/g;pe.fn.extend({val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=pe.isFunction(e),this.each(function(n){var i;1===this.nodeType&&(i=r?e.call(this,n,pe(this).val()):e,null==i?i="":"number"==typeof i?i+="":pe.isArray(i)&&(i=pe.map(i,function(e){return null==e?"":e+""})),t=pe.valHooks[this.type]||pe.valHooks[this.nodeName.toLowerCase()],t&&"set"in t&&void 0!==t.set(this,i,"value")||(this.value=i))});if(i)return t=pe.valHooks[i.type]||pe.valHooks[i.nodeName.toLowerCase()],t&&"get"in t&&void 0!==(n=t.get(i,"value"))?n:(n=i.value,"string"==typeof n?n.replace(Dt,""):null==n?"":n)}}}),pe.extend({valHooks:{option:{get:function(e){var t=pe.find.attr(e,"value");return null!=t?t:pe.trim(pe.text(e)).replace(jt," ")}},select:{get:function(e){for(var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||i<0,a=o?null:[],s=o?i+1:r.length,u=i<0?s:o?i:0;u-1)try{r.selected=n=!0}catch(s){r.scrollHeight}else r.selected=!1;return n||(e.selectedIndex=-1),i}}}}),pe.each(["radio","checkbox"],function(){pe.valHooks[this]={set:function(e,t){if(pe.isArray(t))return e.checked=pe.inArray(pe(e).val(),t)>-1}},fe.checkOn||(pe.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Lt,Ht,qt=pe.expr.attrHandle,_t=/^(?:checked|selected)$/i,Ft=fe.getSetAttribute,Mt=fe.input;pe.fn.extend({attr:function(e,t){return Pe(this,pe.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){pe.removeAttr(this,e)})}}),pe.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?pe.prop(e,t,n):(1===o&&pe.isXMLDoc(e)||(t=t.toLowerCase(),i=pe.attrHooks[t]||(pe.expr.match.bool.test(t)?Ht:Lt)),void 0!==n?null===n?void pe.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:(r=pe.find.attr(e,t),null==r?void 0:r))},attrHooks:{type:{set:function(e,t){if(!fe.radioValue&&"radio"===t&&pe.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(De);if(o&&1===e.nodeType)for(;n=o[i++];)r=pe.propFix[n]||n,pe.expr.match.bool.test(n)?Mt&&Ft||!_t.test(n)?e[r]=!1:e[pe.camelCase("default-"+n)]=e[r]=!1:pe.attr(e,n,""),e.removeAttribute(Ft?n:r)}}),Ht={set:function(e,t,n){return t===!1?pe.removeAttr(e,n):Mt&&Ft||!_t.test(n)?e.setAttribute(!Ft&&pe.propFix[n]||n,n):e[pe.camelCase("default-"+n)]=e[n]=!0,n}},pe.each(pe.expr.match.bool.source.match(/\w+/g),function(e,t){var n=qt[t]||pe.find.attr;Mt&&Ft||!_t.test(t)?qt[t]=function(e,t,r){var i,o;return r||(o=qt[t],qt[t]=i,i=null!=n(e,t,r)?t.toLowerCase():null,qt[t]=o),i}:qt[t]=function(e,t,n){if(!n)return e[pe.camelCase("default-"+t)]?t.toLowerCase():null}}),Mt&&Ft||(pe.attrHooks.value={set:function(e,t,n){return pe.nodeName(e,"input")?void(e.defaultValue=t):Lt&&Lt.set(e,t,n)}}),Ft||(Lt={set:function(e,t,n){var r=e.getAttributeNode(n);if(r||e.setAttributeNode(r=e.ownerDocument.createAttribute(n)),r.value=t+="","value"===n||t===e.getAttribute(n))return t}},qt.id=qt.name=qt.coords=function(e,t,n){var r;if(!n)return(r=e.getAttributeNode(t))&&""!==r.value?r.value:null},pe.valHooks.button={get:function(e,t){var n=e.getAttributeNode(t);if(n&&n.specified)return n.value},set:Lt.set},pe.attrHooks.contenteditable={set:function(e,t,n){Lt.set(e,""!==t&&t,n)}},pe.each(["width","height"],function(e,t){pe.attrHooks[t]={set:function(e,n){if(""===n)return e.setAttribute(t,"auto"),n}}})),fe.style||(pe.attrHooks.style={get:function(e){return e.style.cssText||void 0},set:function(e,t){return e.style.cssText=t+""}});var Ot=/^(?:input|select|textarea|button|object)$/i,Rt=/^(?:a|area)$/i;pe.fn.extend({prop:function(e,t){return Pe(this,pe.prop,e,t,arguments.length>1)},removeProp:function(e){return e=pe.propFix[e]||e,this.each(function(){try{this[e]=void 0,delete this[e]}catch(t){}})}}),pe.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&pe.isXMLDoc(e)||(t=pe.propFix[t]||t,i=pe.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=pe.find.attr(e,"tabindex");return t?parseInt(t,10):Ot.test(e.nodeName)||Rt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),fe.hrefNormalized||pe.each(["href","src"],function(e,t){pe.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}}),fe.optSelected||(pe.propHooks.selected={get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),pe.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){pe.propFix[this.toLowerCase()]=this}),fe.enctype||(pe.propFix.enctype="encoding");var Pt=/[\t\r\n\f]/g;pe.fn.extend({addClass:function(e){var t,n,r,i,o,a,s,u=0;if(pe.isFunction(e))return this.each(function(t){pe(this).addClass(e.call(this,t,z(this)))});if("string"==typeof e&&e)for(t=e.match(De)||[];n=this[u++];)if(i=z(n),r=1===n.nodeType&&(" "+i+" ").replace(Pt," ")){for(a=0;o=t[a++];)r.indexOf(" "+o+" ")<0&&(r+=o+" ");s=pe.trim(r),i!==s&&pe.attr(n,"class",s)}return this},removeClass:function(e){var t,n,r,i,o,a,s,u=0;if(pe.isFunction(e))return this.each(function(t){pe(this).removeClass(e.call(this,t,z(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof e&&e)for(t=e.match(De)||[];n=this[u++];)if(i=z(n),r=1===n.nodeType&&(" "+i+" ").replace(Pt," ")){for(a=0;o=t[a++];)for(;r.indexOf(" "+o+" ")>-1;)r=r.replace(" "+o+" "," ");s=pe.trim(r),i!==s&&pe.attr(n,"class",s)}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):pe.isFunction(e)?this.each(function(n){pe(this).toggleClass(e.call(this,n,z(this),t),t)}):this.each(function(){var t,r,i,o;if("string"===n)for(r=0,i=pe(this),o=e.match(De)||[];t=o[r++];)i.hasClass(t)?i.removeClass(t):i.addClass(t);else void 0!==e&&"boolean"!==n||(t=z(this),t&&pe._data(this,"__className__",t),pe.attr(this,"class",t||e===!1?"":pe._data(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;for(t=" "+e+" ";n=this[r++];)if(1===n.nodeType&&(" "+z(n)+" ").replace(Pt," ").indexOf(t)>-1)return!0;return!1}}),pe.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(e,t){pe.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),pe.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}});var Bt=e.location,Wt=pe.now(),It=/\?/,$t=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;pe.parseJSON=function(t){if(e.JSON&&e.JSON.parse)return e.JSON.parse(t+"");var n,r=null,i=pe.trim(t+"");return i&&!pe.trim(i.replace($t,function(e,t,i,o){return n&&t&&(r=0),0===r?e:(n=i||t,r+=!o-!i,"")}))?Function("return "+i)():pe.error("Invalid JSON: "+t)},pe.parseXML=function(t){var n,r;if(!t||"string"!=typeof t)return null;try{e.DOMParser?(r=new e.DOMParser,n=r.parseFromString(t,"text/xml")):(n=new e.ActiveXObject("Microsoft.XMLDOM"),n.async="false",n.loadXML(t))}catch(i){n=void 0}return n&&n.documentElement&&!n.getElementsByTagName("parsererror").length||pe.error("Invalid XML: "+t),n};var zt=/#.*$/,Xt=/([?&])_=[^&]*/,Ut=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Vt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Yt=/^(?:GET|HEAD)$/,Jt=/^\/\//,Gt=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Kt={},Qt={},Zt="*/".concat("*"),en=Bt.href,tn=Gt.exec(en.toLowerCase())||[];pe.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:en,type:"GET",isLocal:Vt.test(tn[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Zt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":pe.parseJSON,"text xml":pe.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?V(V(e,pe.ajaxSettings),t):V(pe.ajaxSettings,e)},ajaxPrefilter:X(Kt),ajaxTransport:X(Qt),ajax:function(t,n){function r(t,n,r,i){var o,f,v,x,w,C=n;2!==b&&(b=2,u&&e.clearTimeout(u),c=void 0,s=i||"",T.readyState=t>0?4:0,o=t>=200&&t<300||304===t,r&&(x=Y(d,T,r)),x=J(d,x,T,o),o?(d.ifModified&&(w=T.getResponseHeader("Last-Modified"),w&&(pe.lastModified[a]=w),w=T.getResponseHeader("etag"),w&&(pe.etag[a]=w)),204===t||"HEAD"===d.type?C="nocontent":304===t?C="notmodified":(C=x.state,f=x.data,v=x.error,o=!v)):(v=C,!t&&C||(C="error",t<0&&(t=0))),T.status=t,T.statusText=(n||C)+"",o?g.resolveWith(p,[f,C,T]):g.rejectWith(p,[T,C,v]),T.statusCode(y),y=void 0,l&&h.trigger(o?"ajaxSuccess":"ajaxError",[T,d,o?f:v]),m.fireWith(p,[T,C]),l&&(h.trigger("ajaxComplete",[T,d]),--pe.active||pe.event.trigger("ajaxStop")))}"object"==typeof t&&(n=t,t=void 0),n=n||{};var i,o,a,s,u,l,c,f,d=pe.ajaxSetup({},n),p=d.context||d,h=d.context&&(p.nodeType||p.jquery)?pe(p):pe.event,g=pe.Deferred(),m=pe.Callbacks("once memory"),y=d.statusCode||{},v={},x={},b=0,w="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(2===b){if(!f)for(f={};t=Ut.exec(s);)f[t[1].toLowerCase()]=t[2];t=f[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===b?s:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return b||(e=x[n]=x[n]||e,v[e]=t),this},overrideMimeType:function(e){return b||(d.mimeType=e),this},statusCode:function(e){var t;if(e)if(b<2)for(t in e)y[t]=[y[t],e[t]];else T.always(e[T.status]);return this},abort:function(e){var t=e||w;return c&&c.abort(t),r(0,t),this}};if(g.promise(T).complete=m.add,T.success=T.done,T.error=T.fail,d.url=((t||d.url||en)+"").replace(zt,"").replace(Jt,tn[1]+"//"),d.type=n.method||n.type||d.method||d.type,d.dataTypes=pe.trim(d.dataType||"*").toLowerCase().match(De)||[""],null==d.crossDomain&&(i=Gt.exec(d.url.toLowerCase()),d.crossDomain=!(!i||i[1]===tn[1]&&i[2]===tn[2]&&(i[3]||("http:"===i[1]?"80":"443"))===(tn[3]||("http:"===tn[1]?"80":"443")))),d.data&&d.processData&&"string"!=typeof d.data&&(d.data=pe.param(d.data,d.traditional)),U(Kt,d,n,T),2===b)return T;l=pe.event&&d.global,l&&0===pe.active++&&pe.event.trigger("ajaxStart"),d.type=d.type.toUpperCase(),d.hasContent=!Yt.test(d.type),a=d.url,d.hasContent||(d.data&&(a=d.url+=(It.test(a)?"&":"?")+d.data,delete d.data),d.cache===!1&&(d.url=Xt.test(a)?a.replace(Xt,"$1_="+Wt++):a+(It.test(a)?"&":"?")+"_="+Wt++)),d.ifModified&&(pe.lastModified[a]&&T.setRequestHeader("If-Modified-Since",pe.lastModified[a]),pe.etag[a]&&T.setRequestHeader("If-None-Match",pe.etag[a])),(d.data&&d.hasContent&&d.contentType!==!1||n.contentType)&&T.setRequestHeader("Content-Type",d.contentType),T.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+("*"!==d.dataTypes[0]?", "+Zt+"; q=0.01":""):d.accepts["*"]);for(o in d.headers)T.setRequestHeader(o,d.headers[o]);if(d.beforeSend&&(d.beforeSend.call(p,T,d)===!1||2===b))return T.abort();w="abort";for(o in{success:1,error:1,complete:1})T[o](d[o]);if(c=U(Qt,d,n,T)){if(T.readyState=1,l&&h.trigger("ajaxSend",[T,d]),2===b)return T;d.async&&d.timeout>0&&(u=e.setTimeout(function(){T.abort("timeout")},d.timeout));try{b=1,c.send(v,r)}catch(C){if(!(b<2))throw C;r(-1,C)}}else r(-1,"No Transport");return T},getJSON:function(e,t,n){return pe.get(e,t,n,"json")},getScript:function(e,t){return pe.get(e,void 0,t,"script")}}),pe.each(["get","post"],function(e,t){pe[t]=function(e,n,r,i){return pe.isFunction(n)&&(i=i||r,r=n,n=void 0),pe.ajax(pe.extend({url:e,type:t,dataType:i,data:n,success:r},pe.isPlainObject(e)&&e))}}),pe._evalUrl=function(e){return pe.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},pe.fn.extend({wrapAll:function(e){if(pe.isFunction(e))return this.each(function(t){pe(this).wrapAll(e.call(this,t))});if(this[0]){var t=pe(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){for(var e=this;e.firstChild&&1===e.firstChild.nodeType;)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return pe.isFunction(e)?this.each(function(t){pe(this).wrapInner(e.call(this,t))}):this.each(function(){var t=pe(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=pe.isFunction(e);return this.each(function(n){pe(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){pe.nodeName(this,"body")||pe(this).replaceWith(this.childNodes)}).end()}}),pe.expr.filters.hidden=function(e){return fe.reliableHiddenOffsets()?e.offsetWidth<=0&&e.offsetHeight<=0&&!e.getClientRects().length:K(e)},pe.expr.filters.visible=function(e){return!pe.expr.filters.hidden(e)};var nn=/%20/g,rn=/\[\]$/,on=/\r?\n/g,an=/^(?:submit|button|image|reset|file)$/i,sn=/^(?:input|select|textarea|keygen)/i;pe.param=function(e,t){var n,r=[],i=function(e,t){t=pe.isFunction(t)?t():null==t?"":t,r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(void 0===t&&(t=pe.ajaxSettings&&pe.ajaxSettings.traditional),pe.isArray(e)||e.jquery&&!pe.isPlainObject(e))pe.each(e,function(){i(this.name,this.value)});else for(n in e)Q(n,e[n],t,i);return r.join("&").replace(nn,"+")},pe.fn.extend({serialize:function(){return pe.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=pe.prop(this,"elements");return e?pe.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!pe(this).is(":disabled")&&sn.test(this.nodeName)&&!an.test(e)&&(this.checked||!Be.test(e))}).map(function(e,t){var n=pe(this).val();return null==n?null:pe.isArray(n)?pe.map(n,function(e){return{name:t.name,value:e.replace(on,"\r\n")}}):{name:t.name,value:n.replace(on,"\r\n")}}).get()}}),pe.ajaxSettings.xhr=void 0!==e.ActiveXObject?function(){return this.isLocal?ee():re.documentMode>8?Z():/^(get|post|head|put|delete|options)$/i.test(this.type)&&Z()||ee()}:Z;var un=0,ln={},cn=pe.ajaxSettings.xhr();e.attachEvent&&e.attachEvent("onunload",function(){for(var e in ln)ln[e](void 0,!0)}),fe.cors=!!cn&&"withCredentials"in cn,cn=fe.ajax=!!cn,cn&&pe.ajaxTransport(function(t){if(!t.crossDomain||fe.cors){var n;return{send:function(r,i){var o,a=t.xhr(),s=++un;if(a.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(o in t.xhrFields)a[o]=t.xhrFields[o];t.mimeType&&a.overrideMimeType&&a.overrideMimeType(t.mimeType),t.crossDomain||r["X-Requested-With"]||(r["X-Requested-With"]="XMLHttpRequest");for(o in r)void 0!==r[o]&&a.setRequestHeader(o,r[o]+"");a.send(t.hasContent&&t.data||null),n=function(e,r){var o,u,l;if(n&&(r||4===a.readyState))if(delete ln[s],n=void 0,a.onreadystatechange=pe.noop,r)4!==a.readyState&&a.abort();else{l={},o=a.status,"string"==typeof a.responseText&&(l.text=a.responseText);try{u=a.statusText}catch(c){u=""}o||!t.isLocal||t.crossDomain?1223===o&&(o=204):o=l.text?200:404}l&&i(o,u,l,a.getAllResponseHeaders())},t.async?4===a.readyState?e.setTimeout(n):a.onreadystatechange=ln[s]=n:n()},abort:function(){n&&n(void 0,!0)}}}}),pe.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return pe.globalEval(e),e}}}),pe.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),pe.ajaxTransport("script",function(e){if(e.crossDomain){var t,n=re.head||pe("head")[0]||re.documentElement;return{send:function(r,i){t=re.createElement("script"),t.async=!0,e.scriptCharset&&(t.charset=e.scriptCharset),t.src=e.url,t.onload=t.onreadystatechange=function(e,n){(n||!t.readyState||/loaded|complete/.test(t.readyState))&&(t.onload=t.onreadystatechange=null,t.parentNode&&t.parentNode.removeChild(t),t=null,n||i(200,"success"))},n.insertBefore(t,n.firstChild)},abort:function(){t&&t.onload(void 0,!0)}}}});var fn=[],dn=/(=)\?(?=&|$)|\?\?/;pe.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=fn.pop()||pe.expando+"_"+Wt++;return this[e]=!0,e}}),pe.ajaxPrefilter("json jsonp",function(t,n,r){var i,o,a,s=t.jsonp!==!1&&(dn.test(t.url)?"url":"string"==typeof t.data&&0===(t.contentType||"").indexOf("application/x-www-form-urlencoded")&&dn.test(t.data)&&"data");if(s||"jsonp"===t.dataTypes[0])return i=t.jsonpCallback=pe.isFunction(t.jsonpCallback)?t.jsonpCallback():t.jsonpCallback,s?t[s]=t[s].replace(dn,"$1"+i):t.jsonp!==!1&&(t.url+=(It.test(t.url)?"&":"?")+t.jsonp+"="+i),t.converters["script json"]=function(){return a||pe.error(i+" was not called"),a[0]},t.dataTypes[0]="json",o=e[i],e[i]=function(){a=arguments},r.always(function(){void 0===o?pe(e).removeProp(i):e[i]=o,t[i]&&(t.jsonpCallback=n.jsonpCallback,fn.push(i)),a&&pe.isFunction(o)&&o(a[0]),a=o=void 0}),"script"}),pe.parseHTML=function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||re;var r=Te.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=y([e],t,i),i&&i.length&&pe(i).remove(),pe.merge([],r.childNodes))};var pn=pe.fn.load;return pe.fn.load=function(e,t,n){if("string"!=typeof e&&pn)return pn.apply(this,arguments);var r,i,o,a=this,s=e.indexOf(" ");return s>-1&&(r=pe.trim(e.slice(s,e.length)),e=e.slice(0,s)),pe.isFunction(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),a.length>0&&pe.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?pe("
    ").append(pe.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},pe.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){pe.fn[t]=function(e){return this.on(t,e)}}),pe.expr.filters.animated=function(e){return pe.grep(pe.timers,function(t){return e===t.elem}).length},pe.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l,c=pe.css(e,"position"),f=pe(e),d={};"static"===c&&(e.style.position="relative"),s=f.offset(),o=pe.css(e,"top"),u=pe.css(e,"left"),l=("absolute"===c||"fixed"===c)&&pe.inArray("auto",[o,u])>-1,l?(r=f.position(),a=r.top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),pe.isFunction(t)&&(t=t.call(e,n,pe.extend({},s))),null!=t.top&&(d.top=t.top-s.top+a),null!=t.left&&(d.left=t.left-s.left+i),"using"in t?t.using.call(e,d):f.css(d)}},pe.fn.extend({offset:function(e){if(arguments.length)return void 0===e?this:this.each(function(t){pe.offset.setOffset(this,e,t)});var t,n,r={top:0,left:0},i=this[0],o=i&&i.ownerDocument;if(o)return t=o.documentElement,pe.contains(t,i)?("undefined"!=typeof i.getBoundingClientRect&&(r=i.getBoundingClientRect()),n=te(o),{top:r.top+(n.pageYOffset||t.scrollTop)-(t.clientTop||0),left:r.left+(n.pageXOffset||t.scrollLeft)-(t.clientLeft||0)}):r},position:function(){if(this[0]){var e,t,n={top:0,left:0},r=this[0];return"fixed"===pe.css(r,"position")?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),pe.nodeName(e[0],"html")||(n=e.offset()),n.top+=pe.css(e[0],"borderTopWidth",!0),n.left+=pe.css(e[0],"borderLeftWidth",!0)),{top:t.top-n.top-pe.css(r,"marginTop",!0),left:t.left-n.left-pe.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){ for(var e=this.offsetParent;e&&!pe.nodeName(e,"html")&&"static"===pe.css(e,"position");)e=e.offsetParent;return e||pt})}}),pe.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,t){var n=/Y/.test(t);pe.fn[e]=function(r){return Pe(this,function(e,r,i){var o=te(e);return void 0===i?o?t in o?o[t]:o.document.documentElement[r]:e[r]:void(o?o.scrollTo(n?pe(o).scrollLeft():i,n?i:pe(o).scrollTop()):e[r]=i)},e,r,arguments.length,null)}}),pe.each(["top","left"],function(e,t){pe.cssHooks[t]=L(fe.pixelPosition,function(e,n){if(n)return n=gt(e,t),ft.test(n)?pe(e).position()[t]+"px":n})}),pe.each({Height:"height",Width:"width"},function(e,t){pe.each({padding:"inner"+e,content:t,"":"outer"+e},function(n,r){pe.fn[r]=function(r,i){var o=arguments.length&&(n||"boolean"!=typeof r),a=n||(r===!0||i===!0?"margin":"border");return Pe(this,function(t,n,r){var i;return pe.isWindow(t)?t.document.documentElement["client"+e]:9===t.nodeType?(i=t.documentElement,Math.max(t.body["scroll"+e],i["scroll"+e],t.body["offset"+e],i["offset"+e],i["client"+e])):void 0===r?pe.css(t,n,a):pe.style(t,n,r,a)},t,o?r:void 0,o,null)}})}),pe.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)}}),pe.fn.size=function(){return this.length},pe.fn.andSelf=pe.fn.addBack,layui.define(function(e){layui.$=pe,e("jquery",pe)}),pe}); ================================================ FILE: public/assets/luna/layui/lay/modules/laydate.js ================================================ /** layui-v2.5.6 MIT License By https://www.layui.com */ ;!function(){"use strict";var e=window.layui&&layui.define,t={getPath:function(){var e=document.currentScript?document.currentScript.src:function(){for(var e,t=document.scripts,n=t.length-1,a=n;a>0;a--)if("interactive"===t[a].readyState){e=t[a].src;break}return e||t[n].src}();return e.substring(0,e.lastIndexOf("/")+1)}(),getStyle:function(e,t){var n=e.currentStyle?e.currentStyle:window.getComputedStyle(e,null);return n[n.getPropertyValue?"getPropertyValue":"getAttribute"](t)},link:function(e,a,i){if(n.path){var r=document.getElementsByTagName("head")[0],o=document.createElement("link");"string"==typeof a&&(i=a);var s=(i||e).replace(/\.|\//g,""),l="layuicss-"+s,d=0;o.rel="stylesheet",o.href=n.path+e,o.id=l,document.getElementById(l)||r.appendChild(o),"function"==typeof a&&!function c(){return++d>80?window.console&&console.error("laydate.css: Invalid"):void(1989===parseInt(t.getStyle(document.getElementById(l),"width"))?a():setTimeout(c,100))}()}}},n={v:"5.0.9",config:{},index:window.laydate&&window.laydate.v?1e5:0,path:t.getPath,set:function(e){var t=this;return t.config=w.extend({},t.config,e),t},ready:function(a){var i="laydate",r="",o=(e?"modules/laydate/":"theme/")+"default/laydate.css?v="+n.v+r;return e?layui.addcss(o,a,i):t.link(o,a,i),this}},a=function(){var e=this;return{hint:function(t){e.hint.call(e,t)},config:e.config}},i="laydate",r=".layui-laydate",o="layui-this",s="laydate-disabled",l="开始日期超出了结束日期
    建议重新选择",d=[100,2e5],c="layui-laydate-static",m="layui-laydate-list",u="laydate-selected",h="layui-laydate-hint",y="laydate-day-prev",f="laydate-day-next",p="layui-laydate-footer",g=".laydate-btns-confirm",v="laydate-time-text",D=".laydate-btns-time",T=function(e){var t=this;t.index=++n.index,t.config=w.extend({},t.config,n.config,e),n.ready(function(){t.init()})},w=function(e){return new C(e)},C=function(e){for(var t=0,n="object"==typeof e?[e]:(this.selector=e,document.querySelectorAll(e||null));t0)return n[0].getAttribute(e)}():n.each(function(n,a){a.setAttribute(e,t)})},C.prototype.removeAttr=function(e){return this.each(function(t,n){n.removeAttribute(e)})},C.prototype.html=function(e){return this.each(function(t,n){n.innerHTML=e})},C.prototype.val=function(e){return this.each(function(t,n){n.value=e})},C.prototype.append=function(e){return this.each(function(t,n){"object"==typeof e?n.appendChild(e):n.innerHTML=n.innerHTML+e})},C.prototype.remove=function(e){return this.each(function(t,n){e?n.removeChild(e):n.parentNode.removeChild(n)})},C.prototype.on=function(e,t){return this.each(function(n,a){a.attachEvent?a.attachEvent("on"+e,function(e){e.target=e.srcElement,t.call(a,e)}):a.addEventListener(e,t,!1)})},C.prototype.off=function(e,t){return this.each(function(n,a){a.detachEvent?a.detachEvent("on"+e,t):a.removeEventListener(e,t,!1)})},T.isLeapYear=function(e){return e%4===0&&e%100!==0||e%400===0},T.prototype.config={type:"date",range:!1,format:"yyyy-MM-dd",value:null,isInitValue:!0,min:"1900-1-1",max:"2099-12-31",trigger:"focus",show:!1,showBottom:!0,btns:["clear","now","confirm"],lang:"cn",theme:"default",position:null,calendar:!1,mark:{},zIndex:null,done:null,change:null},T.prototype.lang=function(){var e=this,t=e.config,n={cn:{weeks:["日","一","二","三","四","五","六"],time:["时","分","秒"],timeTips:"选择时间",startTime:"开始时间",endTime:"结束时间",dateTips:"返回日期",month:["一","二","三","四","五","六","七","八","九","十","十一","十二"],tools:{confirm:"确定",clear:"清空",now:"现在"}},en:{weeks:["Su","Mo","Tu","We","Th","Fr","Sa"],time:["Hours","Minutes","Seconds"],timeTips:"Select Time",startTime:"Start Time",endTime:"End Time",dateTips:"Select Date",month:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],tools:{confirm:"Confirm",clear:"Clear",now:"Now"}}};return n[t.lang]||n.cn},T.prototype.init=function(){var e=this,t=e.config,n="yyyy|y|MM|M|dd|d|HH|H|mm|m|ss|s",a="static"===t.position,i={year:"yyyy",month:"yyyy-MM",date:"yyyy-MM-dd",time:"HH:mm:ss",datetime:"yyyy-MM-dd HH:mm:ss"};t.elem=w(t.elem),t.eventElem=w(t.eventElem),t.elem[0]&&(t.range===!0&&(t.range="-"),t.format===i.date&&(t.format=i[t.type]),e.format=t.format.match(new RegExp(n+"|.","g"))||[],e.EXP_IF="",e.EXP_SPLIT="",w.each(e.format,function(t,a){var i=new RegExp(n).test(a)?"\\d{"+function(){return new RegExp(n).test(e.format[0===t?t+1:t-1]||"")?/^yyyy|y$/.test(a)?4:a.length:/^yyyy$/.test(a)?"1,4":/^y$/.test(a)?"1,308":"1,2"}()+"}":"\\"+a;e.EXP_IF=e.EXP_IF+i,e.EXP_SPLIT=e.EXP_SPLIT+"("+i+")"}),e.EXP_IF=new RegExp("^"+(t.range?e.EXP_IF+"\\s\\"+t.range+"\\s"+e.EXP_IF:e.EXP_IF)+"$"),e.EXP_SPLIT=new RegExp("^"+e.EXP_SPLIT+"$",""),e.isInput(t.elem[0])||"focus"===t.trigger&&(t.trigger="click"),t.elem.attr("lay-key")||(t.elem.attr("lay-key",e.index),t.eventElem.attr("lay-key",e.index)),t.mark=w.extend({},t.calendar&&"cn"===t.lang?{"0-1-1":"元旦","0-2-14":"情人","0-3-8":"妇女","0-3-12":"植树","0-4-1":"愚人","0-5-1":"劳动","0-5-4":"青年","0-6-1":"儿童","0-9-10":"教师","0-9-18":"国耻","0-10-1":"国庆","0-12-25":"圣诞"}:{},t.mark),w.each(["min","max"],function(e,n){var a=[],i=[];if("number"==typeof t[n]){var r=t[n],o=(new Date).getTime(),s=864e5,l=new Date(r?r0)return!0;var a=w.elem("div",{"class":"layui-laydate-header"}),i=[function(){var e=w.elem("i",{"class":"layui-icon laydate-icon laydate-prev-y"});return e.innerHTML="",e}(),function(){var e=w.elem("i",{"class":"layui-icon laydate-icon laydate-prev-m"});return e.innerHTML="",e}(),function(){var e=w.elem("div",{"class":"laydate-set-ym"}),t=w.elem("span"),n=w.elem("span");return e.appendChild(t),e.appendChild(n),e}(),function(){var e=w.elem("i",{"class":"layui-icon laydate-icon laydate-next-m"});return e.innerHTML="",e}(),function(){var e=w.elem("i",{"class":"layui-icon laydate-icon laydate-next-y"});return e.innerHTML="",e}()],d=w.elem("div",{"class":"layui-laydate-content"}),c=w.elem("table"),m=w.elem("thead"),u=w.elem("tr");w.each(i,function(e,t){a.appendChild(t)}),m.appendChild(u),w.each(new Array(6),function(e){var t=c.insertRow(0);w.each(new Array(7),function(a){if(0===e){var i=w.elem("th");i.innerHTML=n.weeks[a],u.appendChild(i)}t.insertCell(a)})}),c.insertBefore(m,c.children[0]),d.appendChild(c),r[e]=w.elem("div",{"class":"layui-laydate-main laydate-main-list-"+e}),r[e].appendChild(a),r[e].appendChild(d),o.push(i),s.push(d),l.push(c)}),w(d).html(function(){var e=[],i=[];return"datetime"===t.type&&e.push(''+n.timeTips+""),w.each(t.btns,function(e,r){var o=n.tools[r]||"btn";t.range&&"now"===r||(a&&"clear"===r&&(o="cn"===t.lang?"重置":"Reset"),i.push(''+o+""))}),e.push('"),e.join("")}()),w.each(r,function(e,t){i.appendChild(t)}),t.showBottom&&i.appendChild(d),/^#/.test(t.theme)){var m=w.elem("style"),u=["#{{id}} .layui-laydate-header{background-color:{{theme}};}","#{{id}} .layui-this{background-color:{{theme}} !important;}"].join("").replace(/{{id}}/g,e.elemID).replace(/{{theme}}/g,t.theme);"styleSheet"in m?(m.setAttribute("type","text/css"),m.styleSheet.cssText=u):m.innerHTML=u,w(i).addClass("laydate-theme-molv"),i.appendChild(m)}e.remove(T.thisElemDate),a?t.elem.append(i):(document.body.appendChild(i),e.position()),e.checkDate().calendar(),e.changeEvent(),T.thisElemDate=e.elemID,"function"==typeof t.ready&&t.ready(w.extend({},t.dateTime,{month:t.dateTime.month+1}))},T.prototype.remove=function(e){var t=this,n=(t.config,w("#"+(e||t.elemID)));return n.hasClass(c)||t.checkDate(function(){n.remove()}),t},T.prototype.position=function(){var e=this,t=e.config,n=e.bindElem||t.elem[0],a=n.getBoundingClientRect(),i=e.elem.offsetWidth,r=e.elem.offsetHeight,o=function(e){return e=e?"scrollLeft":"scrollTop",document.body[e]|document.documentElement[e]},s=function(e){return document.documentElement[e?"clientWidth":"clientHeight"]},l=5,d=a.left,c=a.bottom;d+i+l>s("width")&&(d=s("width")-i-l),c+r+l>s()&&(c=a.top>r?a.top-r:s()-r,c-=2*l),t.position&&(e.elem.style.position=t.position),e.elem.style.left=d+("fixed"===t.position?0:o(1))+"px",e.elem.style.top=c+("fixed"===t.position?0:o())+"px"},T.prototype.hint=function(e){var t=this,n=(t.config,w.elem("div",{"class":h}));t.elem&&(n.innerHTML=e||"",w(t.elem).find("."+h).remove(),t.elem.appendChild(n),clearTimeout(t.hinTimer),t.hinTimer=setTimeout(function(){w(t.elem).find("."+h).remove()},3e3))},T.prototype.getAsYM=function(e,t,n){return n?t--:t++,t<0&&(t=11,e--),t>11&&(t=0,e++),[e,t]},T.prototype.systemDate=function(e){var t=e||new Date;return{year:t.getFullYear(),month:t.getMonth(),date:t.getDate(),hours:e?e.getHours():0,minutes:e?e.getMinutes():0,seconds:e?e.getSeconds():0}},T.prototype.checkDate=function(e){var t,a,i=this,r=(new Date,i.config),o=r.dateTime=r.dateTime||i.systemDate(),s=i.bindElem||r.elem[0],l=(i.isInput(s)?"val":"html",i.isInput(s)?s.value:"static"===r.position?"":s.innerHTML),c=function(e){e.year>d[1]&&(e.year=d[1],a=!0),e.month>11&&(e.month=11,a=!0),e.hours>23&&(e.hours=0,a=!0),e.minutes>59&&(e.minutes=0,e.hours++,a=!0),e.seconds>59&&(e.seconds=0,e.minutes++,a=!0),t=n.getEndDate(e.month+1,e.year),e.date>t&&(e.date=t,a=!0)},m=function(e,t,n){var o=["startTime","endTime"];t=(t.match(i.EXP_SPLIT)||[]).slice(1),n=n||0,r.range&&(i[o[n]]=i[o[n]]||{}),w.each(i.format,function(s,l){var c=parseFloat(t[s]);t[s].length必须遵循下述格式:
    "+(r.range?r.format+" "+r.range+" "+r.format:r.format)+"
    已为你重置"),a=!0):l&&l.constructor===Date?r.dateTime=i.systemDate(l):(r.dateTime=i.systemDate(),delete i.startState,delete i.endState,delete i.startDate,delete i.endDate,delete i.startTime,delete i.endTime),c(o),a&&l&&i.setValue(r.range?i.endDate?i.parse():"":i.parse()),e&&e(),i)},T.prototype.mark=function(e,t){var n,a=this,i=a.config;return w.each(i.mark,function(e,a){var i=e.split("-");i[0]!=t[0]&&0!=i[0]||i[1]!=t[1]&&0!=i[1]||i[2]!=t[2]||(n=a||t[2])}),n&&e.html(''+n+""),a},T.prototype.limit=function(e,t,n,a){var i,r=this,o=r.config,l={},d=o[n>41?"endDate":"dateTime"],c=w.extend({},d,t||{});return w.each({now:c,min:o.min,max:o.max},function(e,t){l[e]=r.newDate(w.extend({year:t.year,month:t.month,date:t.date},function(){var e={};return w.each(a,function(n,a){e[a]=t[a]}),e}())).getTime()}),i=l.nowl.max,e&&e[i?"addClass":"removeClass"](s),i},T.prototype.calendar=function(e){var t,a,i,r=this,s=r.config,l=e||s.dateTime,c=new Date,m=r.lang(),u="date"!==s.type&&"datetime"!==s.type,h=e?1:0,y=w(r.table[h]).find("td"),f=w(r.elemHeader[h][2]).find("span");if(l.yeard[1]&&(l.year=d[1],r.hint("最高只能支持到公元"+d[1]+"年")),r.firstDate||(r.firstDate=w.extend({},l)),c.setFullYear(l.year,l.month,1),t=c.getDay(),a=n.getEndDate(l.month||12,l.year),i=n.getEndDate(l.month+1,l.year),w.each(y,function(e,n){var d=[l.year,l.month],c=0;n=w(n),n.removeAttr("class"),e=t&&e=n.firstDate.year&&(r.month=a.max.month,r.date=a.max.date),n.limit(w(i),r,t),M++}),w(u[f?0:1]).attr("lay-ym",M-8+"-"+T[1]).html(b+p+" - "+(M-1+p))}else if("month"===e)w.each(new Array(12),function(e){var i=w.elem("li",{"lay-ym":e}),s={year:T[0],month:e};e+1==T[1]&&w(i).addClass(o),i.innerHTML=r.month[e]+(f?"月":""),d.appendChild(i),T[0]=n.firstDate.year&&(s.date=a.max.date),n.limit(w(i),s,t)}),w(u[f?0:1]).attr("lay-ym",T[0]+"-"+T[1]).html(T[0]+p);else if("time"===e){var E=function(){w(d).find("ol").each(function(e,a){w(a).find("li").each(function(a,i){n.limit(w(i),[{hours:a},{hours:n[x].hours,minutes:a},{hours:n[x].hours,minutes:n[x].minutes,seconds:a}][e],t,[["hours"],["hours","minutes"],["hours","minutes","seconds"]][e])})}),a.range||n.limit(w(n.footer).find(g),n[x],0,["hours","minutes","seconds"])};a.range?n[x]||(n[x]={hours:0,minutes:0,seconds:0}):n[x]=i,w.each([24,60,60],function(e,t){var a=w.elem("li"),i=["

    "+r.time[e]+"

      "];w.each(new Array(t),function(t){i.push(""+w.digit(t,2)+"")}),a.innerHTML=i.join("")+"
    ",d.appendChild(a)}),E()}if(y&&h.removeChild(y),h.appendChild(d),"year"===e||"month"===e)w(n.elemMain[t]).addClass("laydate-ym-show"),w(d).find("li").on("click",function(){var r=0|w(this).attr("lay-ym");if(!w(this).hasClass(s)){if(0===t)i[e]=r,l&&(n.startDate[e]=r),n.limit(w(n.footer).find(g),null,0);else if(l)n.endDate[e]=r;else{var c="year"===e?n.getAsYM(r,T[1]-1,"sub"):n.getAsYM(T[0],r,"sub");w.extend(i,{year:c[0],month:c[1]})}"year"===a.type||"month"===a.type?(w(d).find("."+o).removeClass(o),w(this).addClass(o),"month"===a.type&&"year"===e&&(n.listYM[t][0]=r,l&&(n[["startDate","endDate"][t]].year=r),n.list("month",t))):(n.checkDate("limit").calendar(),n.closeList()),n.setBtnStatus(),a.range||n.done(null,"change"),w(n.footer).find(D).removeClass(s)}});else{var S=w.elem("span",{"class":v}),k=function(){w(d).find("ol").each(function(e){var t=this,a=w(t).find("li");t.scrollTop=30*(n[x][C[e]]-2),t.scrollTop<=0&&a.each(function(e,n){if(!w(this).hasClass(s))return t.scrollTop=30*(e-2),!0})})},H=w(c[2]).find("."+v);k(),S.innerHTML=a.range?[r.startTime,r.endTime][t]:r.timeTips,w(n.elemMain[t]).addClass("laydate-time-show"),H[0]&&H.remove(),c[2].appendChild(S),w(d).find("ol").each(function(e){var t=this;w(t).find("li").on("click",function(){var r=0|this.innerHTML;w(this).hasClass(s)||(a.range?n[x][C[e]]=r:i[C[e]]=r,w(t).find("."+o).removeClass(o),w(this).addClass(o),E(),k(),(n.endDate||"time"===a.type)&&n.done(null,"change"),n.setBtnStatus())})})}return n},T.prototype.listYM=[],T.prototype.closeList=function(){var e=this;e.config;w.each(e.elemCont,function(t,n){w(this).find("."+m).remove(),w(e.elemMain[t]).removeClass("laydate-ym-show laydate-time-show")}),w(e.elem).find("."+v).remove()},T.prototype.setBtnStatus=function(e,t,n){var a,i=this,r=i.config,o=w(i.footer).find(g),d=r.range&&"date"!==r.type&&"time"!==r.type;d&&(t=t||i.startDate,n=n||i.endDate,a=i.newDate(t).getTime()>i.newDate(n).getTime(),i.limit(null,t)||i.limit(null,n)?o.addClass(s):o[a?"addClass":"removeClass"](s),e&&a&&i.hint("string"==typeof e?l.replace(/日期/g,e):l))},T.prototype.parse=function(e,t){var n=this,a=n.config,i=t||(e?w.extend({},n.endDate,n.endTime):a.range?w.extend({},n.startDate,n.startTime):a.dateTime),r=n.format.concat();return w.each(r,function(e,t){/yyyy|y/.test(t)?r[e]=w.digit(i.year,t.length):/MM|M/.test(t)?r[e]=w.digit(i.month+1,t.length):/dd|d/.test(t)?r[e]=w.digit(i.date,t.length):/HH|H/.test(t)?r[e]=w.digit(i.hours,t.length):/mm|m/.test(t)?r[e]=w.digit(i.minutes,t.length):/ss|s/.test(t)&&(r[e]=w.digit(i.seconds,t.length))}),a.range&&!e?r.join("")+" "+a.range+" "+n.parse(1):r.join("")},T.prototype.newDate=function(e){return e=e||{},new Date(e.year||1,e.month||0,e.date||1,e.hours||0,e.minutes||0,e.seconds||0)},T.prototype.setValue=function(e){var t=this,n=t.config,a=t.bindElem||n.elem[0],i=t.isInput(a)?"val":"html";return"static"===n.position||w(a)[i](e||""),this},T.prototype.stampRange=function(){var e,t,n=this,a=n.config,i=w(n.elem).find("td");if(a.range&&!n.endDate&&w(n.footer).find(g).addClass(s),n.endDate)return e=n.newDate({year:n.startDate.year,month:n.startDate.month,date:n.startDate.date}).getTime(),t=n.newDate({year:n.endDate.year,month:n.endDate.month,date:n.endDate.date}).getTime(),e>t?n.hint(l):void w.each(i,function(a,i){var r=w(i).attr("lay-ymd").split("-"),s=n.newDate({year:r[0],month:r[1]-1,date:r[2]}).getTime();w(i).removeClass(u+" "+o),s!==e&&s!==t||w(i).addClass(w(i).hasClass(y)||w(i).hasClass(f)?u:o),s>e&&s','
    '+f+"
    ",'
    ','',"
    ","
    "].join(""));return l.ie&&l.ie<8?c.removeClass("layui-hide").addClass(o):(d[0]&&d.remove(),s.call(a,m,c[0],y),c.addClass("layui-hide").after(m),a.index)},c.prototype.getContent=function(t){var e=u(t);if(e[0])return d(e[0].document.body.innerHTML)},c.prototype.getText=function(t){var i=u(t);if(i[0])return e(i[0].document.body).text()},c.prototype.setContent=function(t,i,a){var l=u(t);l[0]&&(a?e(l[0].document.body).append(i):e(l[0].document.body).html(i),layedit.sync(t))},c.prototype.sync=function(t){var i=u(t);if(i[0]){var a=e("#"+i[1].attr("textarea"));a.val(d(i[0].document.body.innerHTML))}},c.prototype.getSelection=function(t){var e=u(t);if(e[0]){var i=m(e[0].document);return document.selection?i.text:i.toString()}};var s=function(t,i,a){var l=this,n=t.find("iframe");n.css({height:a.height}).on("load",function(){var o=n.contents(),r=n.prop("contentWindow"),c=o.find("head"),s=e([""].join("")),u=o.find("body");c.append(s),u.attr("contenteditable","true").css({"min-height":a.height}).html(i.value||""),y.apply(l,[r,n,i,a]),g.call(l,r,t,a)})},u=function(t){var i=e("#LAY_layedit_"+t),a=i.prop("contentWindow");return[a,i]},d=function(t){return 8==l.ie&&(t=t.replace(/<.+>/g,function(t){return t.toLowerCase()})),t},y=function(t,a,n,o){var r=t.document,c=e(r.body);c.on("keydown",function(t){var e=t.keyCode;if(13===e){var a=m(r),l=p(a),n=l.parentNode;if("pre"===n.tagName.toLowerCase()){if(t.shiftKey)return;return i.msg("请暂时用shift+enter"),!1}r.execCommand("formatBlock",!1,"

    ")}}),e(n).parents("form").on("submit",function(){var t=c.html();8==l.ie&&(t=t.replace(/<.+>/g,function(t){return t.toLowerCase()})),n.value=t}),c.on("paste",function(e){r.execCommand("formatBlock",!1,"

    "),setTimeout(function(){f.call(t,c),n.value=c.html()},100)})},f=function(t){var i=this;i.document;t.find("*[style]").each(function(){var t=this.style.textAlign;this.removeAttribute("style"),e(this).css({"text-align":t||""})}),t.find("table").addClass("layui-table"),t.find("script,link").remove()},m=function(t){return t.selection?t.selection.createRange():t.getSelection().getRangeAt(0)},p=function(t){return t.endContainer||t.parentElement().childNodes[0]},v=function(t,i,a){var l=this.document,n=document.createElement(t);for(var o in i)n.setAttribute(o,i[o]);if(n.removeAttribute("text"),l.selection){var r=a.text||i.text;if("a"===t&&!r)return;r&&(n.innerHTML=r),a.pasteHTML(e(n).prop("outerHTML")),a.select()}else{var r=a.toString()||i.text;if("a"===t&&!r)return;r&&(n.innerHTML=r),a.deleteContents(),a.insertNode(n)}},h=function(t,i){var a=this.document,l="layedit-tool-active",n=p(m(a)),o=function(e){return t.find(".layedit-tool-"+e)};i&&i[i.hasClass(l)?"removeClass":"addClass"](l),t.find(">i").removeClass(l),o("unlink").addClass(r),e(n).parents().each(function(){var t=this.tagName.toLowerCase(),e=this.style.textAlign;"b"!==t&&"strong"!==t||o("b").addClass(l),"i"!==t&&"em"!==t||o("i").addClass(l),"u"===t&&o("u").addClass(l),"strike"===t&&o("d").addClass(l),"p"===t&&("center"===e?o("center").addClass(l):"right"===e?o("right").addClass(l):o("left").addClass(l)),"a"===t&&(o("link").addClass(l),o("unlink").removeClass(r))})},g=function(t,a,l){var n=t.document,o=e(n.body),c={link:function(i){var a=p(i),l=e(a).parent();b.call(o,{href:l.attr("href"),target:l.attr("target")},function(e){var a=l[0];"A"===a.tagName?a.href=e.url:v.call(t,"a",{target:e.target,href:e.url,text:e.url},i)})},unlink:function(t){n.execCommand("unlink")},face:function(e){x.call(this,function(i){v.call(t,"img",{src:i.src,alt:i.alt},e)})},image:function(a){var n=this;layui.use("upload",function(o){var r=l.uploadImage||{};o.render({url:r.url,method:r.type,elem:e(n).find("input")[0],done:function(e){0==e.code?(e.data=e.data||{},v.call(t,"img",{src:e.data.src,alt:e.data.title},a)):i.msg(e.msg||"上传失败")}})})},code:function(e){k.call(o,function(i){v.call(t,"pre",{text:i.code,"lay-lang":i.lang},e)})},help:function(){i.open({type:2,title:"帮助",area:["600px","380px"],shadeClose:!0,shade:.1,skin:"layui-layer-msg",content:["http://www.layui.com/about/layedit/help.html","no"]})}},s=a.find(".layui-layedit-tool"),u=function(){var i=e(this),a=i.attr("layedit-event"),l=i.attr("lay-command");if(!i.hasClass(r)){o.focus();var u=m(n);u.commonAncestorContainer;l?(n.execCommand(l),/justifyLeft|justifyCenter|justifyRight/.test(l)&&n.execCommand("formatBlock",!1,"

    "),setTimeout(function(){o.focus()},10)):c[a]&&c[a].call(this,u),h.call(t,s,i)}},d=/image/;s.find(">i").on("mousedown",function(){var t=e(this),i=t.attr("layedit-event");d.test(i)||u.call(this)}).on("click",function(){var t=e(this),i=t.attr("layedit-event");d.test(i)&&u.call(this)}),o.on("click",function(){h.call(t,s),i.close(x.index)})},b=function(t,e){var l=this,n=i.open({type:1,id:"LAY_layedit_link",area:"350px",shade:.05,shadeClose:!0,moveType:1,title:"超链接",skin:"layui-layer-msg",content:['

      ','
    • ','','
      ','',"
      ","
    • ",'
    • ','','
      ','",'","
      ","
    • ",'
    • ','','',"
    • ","
    "].join(""),success:function(t,n){var o="submit(layedit-link-yes)";a.render("radio"),t.find(".layui-btn-primary").on("click",function(){i.close(n),l.focus()}),a.on(o,function(t){i.close(b.index),e&&e(t.field)})}});b.index=n},x=function(t){var a=function(){var t=["[微笑]","[嘻嘻]","[哈哈]","[可爱]","[可怜]","[挖鼻]","[吃惊]","[害羞]","[挤眼]","[闭嘴]","[鄙视]","[爱你]","[泪]","[偷笑]","[亲亲]","[生病]","[太开心]","[白眼]","[右哼哼]","[左哼哼]","[嘘]","[衰]","[委屈]","[吐]","[哈欠]","[抱抱]","[怒]","[疑问]","[馋嘴]","[拜拜]","[思考]","[汗]","[困]","[睡]","[钱]","[失望]","[酷]","[色]","[哼]","[鼓掌]","[晕]","[悲伤]","[抓狂]","[黑线]","[阴险]","[怒骂]","[互粉]","[心]","[伤心]","[猪头]","[熊猫]","[兔子]","[ok]","[耶]","[good]","[NO]","[赞]","[来]","[弱]","[草泥马]","[神马]","[囧]","[浮云]","[给力]","[围观]","[威武]","[奥特曼]","[礼物]","[钟]","[话筒]","[蜡烛]","[蛋糕]"],e={};return layui.each(t,function(t,i){e[i]=layui.cache.dir+"images/face/"+t+".gif"}),e}();return x.hide=x.hide||function(t){"face"!==e(t.target).attr("layedit-event")&&i.close(x.index)},x.index=i.tips(function(){var t=[];return layui.each(a,function(e,i){t.push('
  • '+e+'
  • ')}),'
      '+t.join("")+"
    "}(),this,{tips:1,time:0,skin:"layui-box layui-util-face",maxWidth:500,success:function(l,n){l.css({marginTop:-4,marginLeft:-10}).find(".layui-clear>li").on("click",function(){t&&t({src:a[this.title],alt:this.title}),i.close(n)}),e(document).off("click",x.hide).on("click",x.hide)}})},k=function(t){var e=this,l=i.open({type:1,id:"LAY_layedit_code",area:"550px",shade:.05,shadeClose:!0,moveType:1,title:"插入代码",skin:"layui-layer-msg",content:['
      ','
    • ','','
      ','","
      ","
    • ",'
    • ','','
      ','',"
      ","
    • ",'
    • ','','',"
    • ","
    "].join(""),success:function(l,n){var o="submit(layedit-code-yes)";a.render("select"),l.find(".layui-btn-primary").on("click",function(){i.close(n),e.focus()}),a.on(o,function(e){i.close(k.index),t&&t(e.field)})}});k.index=l},C={html:'',strong:'',italic:'',underline:'',del:'',"|":'',left:'',center:'',right:'',link:'',unlink:'',face:'',image:'',code:'',help:''},w=new c;t(n,w)}); ================================================ FILE: public/assets/luna/layui/lay/modules/layer.js ================================================ /** layui-v2.5.6 MIT License By https://www.layui.com */ ;!function(e,t){"use strict";var i,n,a=e.layui&&layui.define,o={getPath:function(){var e=document.currentScript?document.currentScript.src:function(){for(var e,t=document.scripts,i=t.length-1,n=i;n>0;n--)if("interactive"===t[n].readyState){e=t[n].src;break}return e||t[i].src}();return e.substring(0,e.lastIndexOf("/")+1)}(),config:{},end:{},minIndex:0,minLeft:[],btn:["确定","取消"],type:["dialog","page","iframe","loading","tips"],getStyle:function(t,i){var n=t.currentStyle?t.currentStyle:e.getComputedStyle(t,null);return n[n.getPropertyValue?"getPropertyValue":"getAttribute"](i)},link:function(t,i,n){if(r.path){var a=document.getElementsByTagName("head")[0],s=document.createElement("link");"string"==typeof i&&(n=i);var l=(n||t).replace(/\.|\//g,""),f="layuicss-"+l,c=0;s.rel="stylesheet",s.href=r.path+t,s.id=f,document.getElementById(f)||a.appendChild(s),"function"==typeof i&&!function u(){return++c>80?e.console&&console.error("layer.css: Invalid"):void(1989===parseInt(o.getStyle(document.getElementById(f),"width"))?i():setTimeout(u,100))}()}}},r={v:"3.1.1",ie:function(){var t=navigator.userAgent.toLowerCase();return!!(e.ActiveXObject||"ActiveXObject"in e)&&((t.match(/msie\s(\d+)/)||[])[1]||"11")}(),index:e.layer&&e.layer.v?1e5:0,path:o.getPath,config:function(e,t){return e=e||{},r.cache=o.config=i.extend({},o.config,e),r.path=o.config.path||r.path,"string"==typeof e.extend&&(e.extend=[e.extend]),o.config.path&&r.ready(),e.extend?(a?layui.addcss("modules/layer/"+e.extend):o.link("theme/"+e.extend),this):this},ready:function(e){var t="layer",i="",n=(a?"modules/layer/":"theme/")+"default/layer.css?v="+r.v+i;return a?layui.addcss(n,e,t):o.link(n,e,t),this},alert:function(e,t,n){var a="function"==typeof t;return a&&(n=t),r.open(i.extend({content:e,yes:n},a?{}:t))},confirm:function(e,t,n,a){var s="function"==typeof t;return s&&(a=n,n=t),r.open(i.extend({content:e,btn:o.btn,yes:n,btn2:a},s?{}:t))},msg:function(e,n,a){var s="function"==typeof n,f=o.config.skin,c=(f?f+" "+f+"-msg":"")||"layui-layer-msg",u=l.anim.length-1;return s&&(a=n),r.open(i.extend({content:e,time:3e3,shade:!1,skin:c,title:!1,closeBtn:!1,btn:!1,resize:!1,end:a},s&&!o.config.skin?{skin:c+" layui-layer-hui",anim:u}:function(){return n=n||{},(n.icon===-1||n.icon===t&&!o.config.skin)&&(n.skin=c+" "+(n.skin||"layui-layer-hui")),n}()))},load:function(e,t){return r.open(i.extend({type:3,icon:e||0,resize:!1,shade:.01},t))},tips:function(e,t,n){return r.open(i.extend({type:4,content:[e,t],closeBtn:!1,time:3e3,shade:!1,resize:!1,fixed:!1,maxWidth:210},n))}},s=function(e){var t=this;t.index=++r.index,t.config=i.extend({},t.config,o.config,e),document.body?t.creat():setTimeout(function(){t.creat()},30)};s.pt=s.prototype;var l=["layui-layer",".layui-layer-title",".layui-layer-main",".layui-layer-dialog","layui-layer-iframe","layui-layer-content","layui-layer-btn","layui-layer-close"];l.anim=["layer-anim-00","layer-anim-01","layer-anim-02","layer-anim-03","layer-anim-04","layer-anim-05","layer-anim-06"],s.pt.config={type:0,shade:.3,fixed:!0,move:l[1],title:"信息",offset:"auto",area:"auto",closeBtn:1,time:0,zIndex:19891014,maxWidth:360,anim:0,isOutAnim:!0,icon:-1,moveType:1,resize:!0,scrollbar:!0,tips:2},s.pt.vessel=function(e,t){var n=this,a=n.index,r=n.config,s=r.zIndex+a,f="object"==typeof r.title,c=r.maxmin&&(1===r.type||2===r.type),u=r.title?'
    '+(f?r.title[0]:r.title)+"
    ":"";return r.zIndex=s,t([r.shade?'
    ':"",'
    '+(e&&2!=r.type?"":u)+'
    '+(0==r.type&&r.icon!==-1?'':"")+(1==r.type&&e?"":r.content||"")+'
    '+function(){var e=c?'':"";return r.closeBtn&&(e+=''),e}()+""+(r.btn?function(){var e="";"string"==typeof r.btn&&(r.btn=[r.btn]);for(var t=0,i=r.btn.length;t'+r.btn[t]+"";return'
    '+e+"
    "}():"")+(r.resize?'':"")+"
    "],u,i('
    ')),n},s.pt.creat=function(){var e=this,t=e.config,a=e.index,s=t.content,f="object"==typeof s,c=i("body");if(!t.id||!i("#"+t.id)[0]){switch("string"==typeof t.area&&(t.area="auto"===t.area?["",""]:[t.area,""]),t.shift&&(t.anim=t.shift),6==r.ie&&(t.fixed=!1),t.type){case 0:t.btn="btn"in t?t.btn:o.btn[0],r.closeAll("dialog");break;case 2:var s=t.content=f?t.content:[t.content||"","auto"];t.content='';break;case 3:delete t.title,delete t.closeBtn,t.icon===-1&&0===t.icon,r.closeAll("loading");break;case 4:f||(t.content=[t.content,"body"]),t.follow=t.content[1],t.content=t.content[0]+'',delete t.title,t.tips="object"==typeof t.tips?t.tips:[t.tips,!0],t.tipsMore||r.closeAll("tips")}if(e.vessel(f,function(n,r,u){c.append(n[0]),f?function(){2==t.type||4==t.type?function(){i("body").append(n[1])}():function(){s.parents("."+l[0])[0]||(s.data("display",s.css("display")).show().addClass("layui-layer-wrap").wrap(n[1]),i("#"+l[0]+a).find("."+l[5]).before(r))}()}():c.append(n[1]),i(".layui-layer-move")[0]||c.append(o.moveElem=u),e.layero=i("#"+l[0]+a),t.scrollbar||l.html.css("overflow","hidden").attr("layer-full",a)}).auto(a),i("#layui-layer-shade"+e.index).css({"background-color":t.shade[1]||"#000",opacity:t.shade[0]||t.shade}),2==t.type&&6==r.ie&&e.layero.find("iframe").attr("src",s[0]),4==t.type?e.tips():e.offset(),t.fixed&&n.on("resize",function(){e.offset(),(/^\d+%$/.test(t.area[0])||/^\d+%$/.test(t.area[1]))&&e.auto(a),4==t.type&&e.tips()}),t.time<=0||setTimeout(function(){r.close(e.index)},t.time),e.move().callback(),l.anim[t.anim]){var u="layer-anim "+l.anim[t.anim];e.layero.addClass(u).one("webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend",function(){i(this).removeClass(u)})}t.isOutAnim&&e.layero.data("isOutAnim",!0)}},s.pt.auto=function(e){var t=this,a=t.config,o=i("#"+l[0]+e);""===a.area[0]&&a.maxWidth>0&&(r.ie&&r.ie<8&&a.btn&&o.width(o.innerWidth()),o.outerWidth()>a.maxWidth&&o.width(a.maxWidth));var s=[o.innerWidth(),o.innerHeight()],f=o.find(l[1]).outerHeight()||0,c=o.find("."+l[6]).outerHeight()||0,u=function(e){e=o.find(e),e.height(s[1]-f-c-2*(0|parseFloat(e.css("padding-top"))))};switch(a.type){case 2:u("iframe");break;default:""===a.area[1]?a.maxHeight>0&&o.outerHeight()>a.maxHeight?(s[1]=a.maxHeight,u("."+l[5])):a.fixed&&s[1]>=n.height()&&(s[1]=n.height(),u("."+l[5])):u("."+l[5])}return t},s.pt.offset=function(){var e=this,t=e.config,i=e.layero,a=[i.outerWidth(),i.outerHeight()],o="object"==typeof t.offset;e.offsetTop=(n.height()-a[1])/2,e.offsetLeft=(n.width()-a[0])/2,o?(e.offsetTop=t.offset[0],e.offsetLeft=t.offset[1]||e.offsetLeft):"auto"!==t.offset&&("t"===t.offset?e.offsetTop=0:"r"===t.offset?e.offsetLeft=n.width()-a[0]:"b"===t.offset?e.offsetTop=n.height()-a[1]:"l"===t.offset?e.offsetLeft=0:"lt"===t.offset?(e.offsetTop=0,e.offsetLeft=0):"lb"===t.offset?(e.offsetTop=n.height()-a[1],e.offsetLeft=0):"rt"===t.offset?(e.offsetTop=0,e.offsetLeft=n.width()-a[0]):"rb"===t.offset?(e.offsetTop=n.height()-a[1],e.offsetLeft=n.width()-a[0]):e.offsetTop=t.offset),t.fixed||(e.offsetTop=/%$/.test(e.offsetTop)?n.height()*parseFloat(e.offsetTop)/100:parseFloat(e.offsetTop),e.offsetLeft=/%$/.test(e.offsetLeft)?n.width()*parseFloat(e.offsetLeft)/100:parseFloat(e.offsetLeft),e.offsetTop+=n.scrollTop(),e.offsetLeft+=n.scrollLeft()),i.attr("minLeft")&&(e.offsetTop=n.height()-(i.find(l[1]).outerHeight()||0),e.offsetLeft=i.css("left")),i.css({top:e.offsetTop,left:e.offsetLeft})},s.pt.tips=function(){var e=this,t=e.config,a=e.layero,o=[a.outerWidth(),a.outerHeight()],r=i(t.follow);r[0]||(r=i("body"));var s={width:r.outerWidth(),height:r.outerHeight(),top:r.offset().top,left:r.offset().left},f=a.find(".layui-layer-TipsG"),c=t.tips[0];t.tips[1]||f.remove(),s.autoLeft=function(){s.left+o[0]-n.width()>0?(s.tipLeft=s.left+s.width-o[0],f.css({right:12,left:"auto"})):s.tipLeft=s.left},s.where=[function(){s.autoLeft(),s.tipTop=s.top-o[1]-10,f.removeClass("layui-layer-TipsB").addClass("layui-layer-TipsT").css("border-right-color",t.tips[1])},function(){s.tipLeft=s.left+s.width+10,s.tipTop=s.top,f.removeClass("layui-layer-TipsL").addClass("layui-layer-TipsR").css("border-bottom-color",t.tips[1])},function(){s.autoLeft(),s.tipTop=s.top+s.height+10,f.removeClass("layui-layer-TipsT").addClass("layui-layer-TipsB").css("border-right-color",t.tips[1])},function(){s.tipLeft=s.left-o[0]-10,s.tipTop=s.top,f.removeClass("layui-layer-TipsR").addClass("layui-layer-TipsL").css("border-bottom-color",t.tips[1])}],s.where[c-1](),1===c?s.top-(n.scrollTop()+o[1]+16)<0&&s.where[2]():2===c?n.width()-(s.left+s.width+o[0]+16)>0||s.where[3]():3===c?s.top-n.scrollTop()+s.height+o[1]+16-n.height()>0&&s.where[0]():4===c&&o[0]+16-s.left>0&&s.where[1](),a.find("."+l[5]).css({"background-color":t.tips[1],"padding-right":t.closeBtn?"30px":""}),a.css({left:s.tipLeft-(t.fixed?n.scrollLeft():0),top:s.tipTop-(t.fixed?n.scrollTop():0)})},s.pt.move=function(){var e=this,t=e.config,a=i(document),s=e.layero,l=s.find(t.move),f=s.find(".layui-layer-resize"),c={};return t.move&&l.css("cursor","move"),l.on("mousedown",function(e){e.preventDefault(),t.move&&(c.moveStart=!0,c.offset=[e.clientX-parseFloat(s.css("left")),e.clientY-parseFloat(s.css("top"))],o.moveElem.css("cursor","move").show())}),f.on("mousedown",function(e){e.preventDefault(),c.resizeStart=!0,c.offset=[e.clientX,e.clientY],c.area=[s.outerWidth(),s.outerHeight()],o.moveElem.css("cursor","se-resize").show()}),a.on("mousemove",function(i){if(c.moveStart){var a=i.clientX-c.offset[0],o=i.clientY-c.offset[1],l="fixed"===s.css("position");if(i.preventDefault(),c.stX=l?0:n.scrollLeft(),c.stY=l?0:n.scrollTop(),!t.moveOut){var f=n.width()-s.outerWidth()+c.stX,u=n.height()-s.outerHeight()+c.stY;af&&(a=f),ou&&(o=u)}s.css({left:a,top:o})}if(t.resize&&c.resizeStart){var a=i.clientX-c.offset[0],o=i.clientY-c.offset[1];i.preventDefault(),r.style(e.index,{width:c.area[0]+a,height:c.area[1]+o}),c.isResize=!0,t.resizing&&t.resizing(s)}}).on("mouseup",function(e){c.moveStart&&(delete c.moveStart,o.moveElem.hide(),t.moveEnd&&t.moveEnd(s)),c.resizeStart&&(delete c.resizeStart,o.moveElem.hide())}),e},s.pt.callback=function(){function e(){var e=a.cancel&&a.cancel(t.index,n);e===!1||r.close(t.index)}var t=this,n=t.layero,a=t.config;t.openLayer(),a.success&&(2==a.type?n.find("iframe").on("load",function(){a.success(n,t.index)}):a.success(n,t.index)),6==r.ie&&t.IE6(n),n.find("."+l[6]).children("a").on("click",function(){var e=i(this).index();if(0===e)a.yes?a.yes(t.index,n):a.btn1?a.btn1(t.index,n):r.close(t.index);else{var o=a["btn"+(e+1)]&&a["btn"+(e+1)](t.index,n);o===!1||r.close(t.index)}}),n.find("."+l[7]).on("click",e),a.shadeClose&&i("#layui-layer-shade"+t.index).on("click",function(){r.close(t.index)}),n.find(".layui-layer-min").on("click",function(){var e=a.min&&a.min(n);e===!1||r.min(t.index,a)}),n.find(".layui-layer-max").on("click",function(){i(this).hasClass("layui-layer-maxmin")?(r.restore(t.index),a.restore&&a.restore(n)):(r.full(t.index,a),setTimeout(function(){a.full&&a.full(n)},100))}),a.end&&(o.end[t.index]=a.end)},o.reselect=function(){i.each(i("select"),function(e,t){var n=i(this);n.parents("."+l[0])[0]||1==n.attr("layer")&&i("."+l[0]).length<1&&n.removeAttr("layer").show(),n=null})},s.pt.IE6=function(e){i("select").each(function(e,t){var n=i(this);n.parents("."+l[0])[0]||"none"===n.css("display")||n.attr({layer:"1"}).hide(),n=null})},s.pt.openLayer=function(){var e=this;r.zIndex=e.config.zIndex,r.setTop=function(e){var t=function(){r.zIndex++,e.css("z-index",r.zIndex+1)};return r.zIndex=parseInt(e[0].style.zIndex),e.on("mousedown",t),r.zIndex}},o.record=function(e){var t=[e.width(),e.height(),e.position().top,e.position().left+parseFloat(e.css("margin-left"))];e.find(".layui-layer-max").addClass("layui-layer-maxmin"),e.attr({area:t})},o.rescollbar=function(e){l.html.attr("layer-full")==e&&(l.html[0].style.removeProperty?l.html[0].style.removeProperty("overflow"):l.html[0].style.removeAttribute("overflow"),l.html.removeAttr("layer-full"))},e.layer=r,r.getChildFrame=function(e,t){return t=t||i("."+l[4]).attr("times"),i("#"+l[0]+t).find("iframe").contents().find(e)},r.getFrameIndex=function(e){return i("#"+e).parents("."+l[4]).attr("times")},r.iframeAuto=function(e){if(e){var t=r.getChildFrame("html",e).outerHeight(),n=i("#"+l[0]+e),a=n.find(l[1]).outerHeight()||0,o=n.find("."+l[6]).outerHeight()||0;n.css({height:t+a+o}),n.find("iframe").css({height:t})}},r.iframeSrc=function(e,t){i("#"+l[0]+e).find("iframe").attr("src",t)},r.style=function(e,t,n){var a=i("#"+l[0]+e),r=a.find(".layui-layer-content"),s=a.attr("type"),f=a.find(l[1]).outerHeight()||0,c=a.find("."+l[6]).outerHeight()||0;a.attr("minLeft");s!==o.type[3]&&s!==o.type[4]&&(n||(parseFloat(t.width)<=260&&(t.width=260),parseFloat(t.height)-f-c<=64&&(t.height=64+f+c)),a.css(t),c=a.find("."+l[6]).outerHeight(),s===o.type[2]?a.find("iframe").css({height:parseFloat(t.height)-f-c}):r.css({height:parseFloat(t.height)-f-c-parseFloat(r.css("padding-top"))-parseFloat(r.css("padding-bottom"))}))},r.min=function(e,t){var a=i("#"+l[0]+e),s=a.find(l[1]).outerHeight()||0,f=a.attr("minLeft")||181*o.minIndex+"px",c=a.css("position");o.record(a),o.minLeft[0]&&(f=o.minLeft[0],o.minLeft.shift()),a.attr("position",c),r.style(e,{width:180,height:s,left:f,top:n.height()-s,position:"fixed",overflow:"hidden"},!0),a.find(".layui-layer-min").hide(),"page"===a.attr("type")&&a.find(l[4]).hide(),o.rescollbar(e),a.attr("minLeft")||o.minIndex++,a.attr("minLeft",f)},r.restore=function(e){var t=i("#"+l[0]+e),n=t.attr("area").split(",");t.attr("type");r.style(e,{width:parseFloat(n[0]),height:parseFloat(n[1]),top:parseFloat(n[2]),left:parseFloat(n[3]),position:t.attr("position"),overflow:"visible"},!0),t.find(".layui-layer-max").removeClass("layui-layer-maxmin"),t.find(".layui-layer-min").show(),"page"===t.attr("type")&&t.find(l[4]).show(),o.rescollbar(e)},r.full=function(e){var t,a=i("#"+l[0]+e);o.record(a),l.html.attr("layer-full")||l.html.css("overflow","hidden").attr("layer-full",e),clearTimeout(t),t=setTimeout(function(){var t="fixed"===a.css("position");r.style(e,{top:t?0:n.scrollTop(),left:t?0:n.scrollLeft(),width:n.width(),height:n.height()},!0),a.find(".layui-layer-min").hide()},100)},r.title=function(e,t){var n=i("#"+l[0]+(t||r.index)).find(l[1]);n.html(e)},r.close=function(e){var t=i("#"+l[0]+e),n=t.attr("type"),a="layer-anim-close";if(t[0]){var s="layui-layer-wrap",f=function(){if(n===o.type[1]&&"object"===t.attr("conType")){t.children(":not(."+l[5]+")").remove();for(var a=t.find("."+s),r=0;r<2;r++)a.unwrap();a.css("display",a.data("display")).removeClass(s)}else{if(n===o.type[2])try{var f=i("#"+l[4]+e)[0];f.contentWindow.document.write(""),f.contentWindow.close(),t.find("."+l[5])[0].removeChild(f)}catch(c){}t[0].innerHTML="",t.remove()}"function"==typeof o.end[e]&&o.end[e](),delete o.end[e]};t.data("isOutAnim")&&t.addClass("layer-anim "+a),i("#layui-layer-moves, #layui-layer-shade"+e).remove(),6==r.ie&&o.reselect(),o.rescollbar(e),t.attr("minLeft")&&(o.minIndex--,o.minLeft.push(t.attr("minLeft"))),r.ie&&r.ie<10||!t.data("isOutAnim")?f():setTimeout(function(){f()},200)}},r.closeAll=function(e){i.each(i("."+l[0]),function(){var t=i(this),n=e?t.attr("type")===e:1;n&&r.close(t.attr("times")),n=null})};var f=r.cache||{},c=function(e){return f.skin?" "+f.skin+" "+f.skin+"-"+e:""};r.prompt=function(e,t){var a="";if(e=e||{},"function"==typeof e&&(t=e),e.area){var o=e.area;a='style="width: '+o[0]+"; height: "+o[1]+';"',delete e.area}var s,l=2==e.formType?'":function(){return''}(),f=e.success;return delete e.success,r.open(i.extend({type:1,btn:["确定","取消"],content:l,skin:"layui-layer-prompt"+c("prompt"),maxWidth:n.width(),success:function(t){s=t.find(".layui-layer-input"),s.val(e.value||"").focus(),"function"==typeof f&&f(t)},resize:!1,yes:function(i){var n=s.val();""===n?s.focus():n.length>(e.maxlength||500)?r.tips("最多输入"+(e.maxlength||500)+"个字数",s,{tips:1}):t&&t(n,i,s)}},e))},r.tab=function(e){e=e||{};var t=e.tab||{},n="layui-this",a=e.success;return delete e.success,r.open(i.extend({type:1,skin:"layui-layer-tab"+c("tab"),resize:!1,title:function(){var e=t.length,i=1,a="";if(e>0)for(a=''+t[0].title+"";i"+t[i].title+"";return a}(),content:'
      '+function(){var e=t.length,i=1,a="";if(e>0)for(a='
    • '+(t[0].content||"no content")+"
    • ";i'+(t[i].content||"no content")+"";return a}()+"
    ",success:function(t){var o=t.find(".layui-layer-title").children(),r=t.find(".layui-layer-tabmain").children();o.on("mousedown",function(t){t.stopPropagation?t.stopPropagation():t.cancelBubble=!0;var a=i(this),o=a.index();a.addClass(n).siblings().removeClass(n),r.eq(o).show().siblings().hide(),"function"==typeof e.change&&e.change(o)}),"function"==typeof a&&a(t)}},e))},r.photos=function(t,n,a){function o(e,t,i){var n=new Image;return n.src=e,n.complete?t(n):(n.onload=function(){n.onload=null,t(n)},void(n.onerror=function(e){n.onerror=null,i(e)}))}var s={};if(t=t||{},t.photos){var l=t.photos.constructor===Object,f=l?t.photos:{},u=f.data||[],d=f.start||0;s.imgIndex=(0|d)+1,t.img=t.img||"img";var y=t.success;if(delete t.success,l){if(0===u.length)return r.msg("没有图片")}else{var p=i(t.photos),h=function(){u=[],p.find(t.img).each(function(e){var t=i(this);t.attr("layer-index",e),u.push({alt:t.attr("alt"),pid:t.attr("layer-pid"),src:t.attr("layer-src")||t.attr("src"),thumb:t.attr("src")})})};if(h(),0===u.length)return;if(n||p.on("click",t.img,function(){var e=i(this),n=e.attr("layer-index");r.photos(i.extend(t,{photos:{start:n,data:u,tab:t.tab},full:t.full}),!0),h()}),!n)return}s.imgprev=function(e){s.imgIndex--,s.imgIndex<1&&(s.imgIndex=u.length),s.tabimg(e)},s.imgnext=function(e,t){s.imgIndex++,s.imgIndex>u.length&&(s.imgIndex=1,t)||s.tabimg(e)},s.keyup=function(e){if(!s.end){var t=e.keyCode;e.preventDefault(),37===t?s.imgprev(!0):39===t?s.imgnext(!0):27===t&&r.close(s.index)}},s.tabimg=function(e){if(!(u.length<=1))return f.start=s.imgIndex-1,r.close(s.index),r.photos(t,!0,e)},s.event=function(){s.bigimg.hover(function(){s.imgsee.show()},function(){s.imgsee.hide()}),s.bigimg.find(".layui-layer-imgprev").on("click",function(e){e.preventDefault(),s.imgprev()}),s.bigimg.find(".layui-layer-imgnext").on("click",function(e){e.preventDefault(),s.imgnext()}),i(document).on("keyup",s.keyup)},s.loadi=r.load(1,{shade:!("shade"in t)&&.9,scrollbar:!1}),o(u[d].src,function(n){r.close(s.loadi),s.index=r.open(i.extend({type:1,id:"layui-layer-photos",area:function(){var a=[n.width,n.height],o=[i(e).width()-100,i(e).height()-100];if(!t.full&&(a[0]>o[0]||a[1]>o[1])){var r=[a[0]/o[0],a[1]/o[1]];r[0]>r[1]?(a[0]=a[0]/r[0],a[1]=a[1]/r[0]):r[0]'+(u[d].alt||
    '+(u.length>1?'':"")+'
    '+(u[d].alt||"")+""+s.imgIndex+"/"+u.length+"
    ",success:function(e,i){s.bigimg=e.find(".layui-layer-phimg"),s.imgsee=e.find(".layui-layer-imguide,.layui-layer-imgbar"),s.event(e),t.tab&&t.tab(u[d],e),"function"==typeof y&&y(e)},end:function(){s.end=!0,i(document).off("keyup",s.keyup)}},t))},function(){r.close(s.loadi),r.msg("当前图片地址异常
    是否继续查看下一张?",{time:3e4,btn:["下一张","不看了"],yes:function(){u.length>1&&s.imgnext(!0,!0)}})})}},o.run=function(t){i=t,n=i(e),l.html=i("html"),r.open=function(e){var t=new s(e);return t.index}},e.layui&&layui.define?(r.ready(),layui.define("jquery",function(t){r.path=layui.cache.dir,o.run(layui.$),e.layer=r,t("layer",r)})):"function"==typeof define&&define.amd?define(["jquery"],function(){return o.run(e.jQuery),r}):function(){o.run(e.jQuery),r.ready()}()}(window); ================================================ FILE: public/assets/luna/layui/lay/modules/laypage.js ================================================ /** layui-v2.5.6 MIT License By https://www.layui.com */ ;layui.define(function(e){"use strict";var a=document,t="getElementById",n="getElementsByTagName",i="laypage",r="layui-disabled",u=function(e){var a=this;a.config=e||{},a.config.index=++s.index,a.render(!0)};u.prototype.type=function(){var e=this.config;if("object"==typeof e.elem)return void 0===e.elem.length?2:3},u.prototype.view=function(){var e=this,a=e.config,t=a.groups="groups"in a?0|a.groups:5;a.layout="object"==typeof a.layout?a.layout:["prev","page","next"],a.count=0|a.count,a.curr=0|a.curr||1,a.limits="object"==typeof a.limits?a.limits:[10,20,30,40,50],a.limit=0|a.limit||10,a.pages=Math.ceil(a.count/a.limit)||1,a.curr>a.pages&&(a.curr=a.pages),t<0?t=1:t>a.pages&&(t=a.pages),a.prev="prev"in a?a.prev:"上一页",a.next="next"in a?a.next:"下一页";var n=a.pages>t?Math.ceil((a.curr+(t>1?1:0))/(t>0?t:1)):1,i={prev:function(){return a.prev?''+a.prev+"":""}(),page:function(){var e=[];if(a.count<1)return"";n>1&&a.first!==!1&&0!==t&&e.push(''+(a.first||1)+"");var i=Math.floor((t-1)/2),r=n>1?a.curr-i:1,u=n>1?function(){var e=a.curr+(t-i-1);return e>a.pages?a.pages:e}():t;for(u-r2&&e.push('');r<=u;r++)r===a.curr?e.push('"+r+""):e.push(''+r+"");return a.pages>t&&a.pages>u&&a.last!==!1&&(u+1…'),0!==t&&e.push(''+(a.last||a.pages)+"")),e.join("")}(),next:function(){return a.next?''+a.next+"":""}(),count:'共 '+a.count+" 条",limit:function(){var e=['"}(),refresh:['','',""].join(""),skip:function(){return['到第','','页',""].join("")}()};return['
    ',function(){var e=[];return layui.each(a.layout,function(a,t){i[t]&&e.push(i[t])}),e.join("")}(),"
    "].join("")},u.prototype.jump=function(e,a){if(e){var t=this,i=t.config,r=e.children,u=e[n]("button")[0],l=e[n]("input")[0],p=e[n]("select")[0],c=function(){var e=0|l.value.replace(/\s|\D/g,"");e&&(i.curr=e,t.render())};if(a)return c();for(var o=0,y=r.length;oi.pages||(i.curr=e,t.render())});p&&s.on(p,"change",function(){var e=this.value;i.curr*e>i.count&&(i.curr=Math.ceil(i.count/e)),i.limit=e,t.render()}),u&&s.on(u,"click",function(){c()})}},u.prototype.skip=function(e){if(e){var a=this,t=e[n]("input")[0];t&&s.on(t,"keyup",function(t){var n=this.value,i=t.keyCode;/^(37|38|39|40)$/.test(i)||(/\D/.test(n)&&(this.value=n.replace(/\D/,"")),13===i&&a.jump(e,!0))})}},u.prototype.render=function(e){var n=this,i=n.config,r=n.type(),u=n.view();2===r?i.elem&&(i.elem.innerHTML=u):3===r?i.elem.html(u):a[t](i.elem)&&(a[t](i.elem).innerHTML=u),i.jump&&i.jump(i,e);var s=a[t]("layui-laypage-"+i.index);n.jump(s),i.hash&&!e&&(location.hash="!"+i.hash+"="+i.curr),n.skip(s)};var s={render:function(e){var a=new u(e);return a.index},index:layui.laypage?layui.laypage.index+1e4:0,on:function(e,a,t){return e.attachEvent?e.attachEvent("on"+a,function(a){a.target=a.srcElement,t.call(e,a)}):e.addEventListener(a,t,!1),this}};e(i,s)}); ================================================ FILE: public/assets/luna/layui/lay/modules/laytpl.js ================================================ /** layui-v2.5.6 MIT License By https://www.layui.com */ ;layui.define(function(e){"use strict";var r={open:"{{",close:"}}"},c={exp:function(e){return new RegExp(e,"g")},query:function(e,c,t){var o=["#([\\s\\S])+?","([^{#}])*?"][e||0];return n((c||"")+r.open+o+r.close+(t||""))},escape:function(e){return String(e||"").replace(/&(?!#?[a-zA-Z0-9]+;)/g,"&").replace(//g,">").replace(/'/g,"'").replace(/"/g,""")},error:function(e,r){var c="Laytpl Error:";return"object"==typeof console&&console.error(c+e+"\n"+(r||"")),c+e}},n=c.exp,t=function(e){this.tpl=e};t.pt=t.prototype,window.errors=0,t.pt.parse=function(e,t){var o=this,p=e,a=n("^"+r.open+"#",""),l=n(r.close+"$","");e=e.replace(/\s+|\r|\t|\n/g," ").replace(n(r.open+"#"),r.open+"# ").replace(n(r.close+"}"),"} "+r.close).replace(/\\/g,"\\\\").replace(n(r.open+"!(.+?)!"+r.close),function(e){return e=e.replace(n("^"+r.open+"!"),"").replace(n("!"+r.close),"").replace(n(r.open+"|"+r.close),function(e){return e.replace(/(.)/g,"\\$1")})}).replace(/(?="|')/g,"\\").replace(c.query(),function(e){return e=e.replace(a,"").replace(l,""),'";'+e.replace(/\\/g,"")+';view+="'}).replace(c.query(1),function(e){var c='"+(';return e.replace(/\s/g,"")===r.open+r.close?"":(e=e.replace(n(r.open+"|"+r.close),""),/^=/.test(e)&&(e=e.replace(/^=/,""),c='"+_escape_('),c+e.replace(/\\/g,"")+')+"')}),e='"use strict";var view = "'+e+'";return view;';try{return o.cache=e=new Function("d, _escape_",e),e(t,c.escape)}catch(u){return delete o.cache,c.error(u,p)}},t.pt.render=function(e,r){var n,t=this;return e?(n=t.cache?t.cache(e,c.escape):t.parse(t.tpl,e),r?void r(n):n):c.error("no data")};var o=function(e){return"string"!=typeof e?c.error("Template not found"):new t(e)};o.config=function(e){e=e||{};for(var c in e)r[c]=e[c]},o.v="1.2.0",e("laytpl",o)}); ================================================ FILE: public/assets/luna/layui/lay/modules/mobile.js ================================================ /** layui-v2.5.6 MIT License By https://www.layui.com */ ;layui.define(function(i){i("layui.mobile",layui.v)});layui.define(function(e){"use strict";var r={open:"{{",close:"}}"},c={exp:function(e){return new RegExp(e,"g")},query:function(e,c,t){var o=["#([\\s\\S])+?","([^{#}])*?"][e||0];return n((c||"")+r.open+o+r.close+(t||""))},escape:function(e){return String(e||"").replace(/&(?!#?[a-zA-Z0-9]+;)/g,"&").replace(//g,">").replace(/'/g,"'").replace(/"/g,""")},error:function(e,r){var c="Laytpl Error:";return"object"==typeof console&&console.error(c+e+"\n"+(r||"")),c+e}},n=c.exp,t=function(e){this.tpl=e};t.pt=t.prototype,window.errors=0,t.pt.parse=function(e,t){var o=this,p=e,a=n("^"+r.open+"#",""),l=n(r.close+"$","");e=e.replace(/\s+|\r|\t|\n/g," ").replace(n(r.open+"#"),r.open+"# ").replace(n(r.close+"}"),"} "+r.close).replace(/\\/g,"\\\\").replace(n(r.open+"!(.+?)!"+r.close),function(e){return e=e.replace(n("^"+r.open+"!"),"").replace(n("!"+r.close),"").replace(n(r.open+"|"+r.close),function(e){return e.replace(/(.)/g,"\\$1")})}).replace(/(?="|')/g,"\\").replace(c.query(),function(e){return e=e.replace(a,"").replace(l,""),'";'+e.replace(/\\/g,"")+';view+="'}).replace(c.query(1),function(e){var c='"+(';return e.replace(/\s/g,"")===r.open+r.close?"":(e=e.replace(n(r.open+"|"+r.close),""),/^=/.test(e)&&(e=e.replace(/^=/,""),c='"+_escape_('),c+e.replace(/\\/g,"")+')+"')}),e='"use strict";var view = "'+e+'";return view;';try{return o.cache=e=new Function("d, _escape_",e),e(t,c.escape)}catch(u){return delete o.cache,c.error(u,p)}},t.pt.render=function(e,r){var n,t=this;return e?(n=t.cache?t.cache(e,c.escape):t.parse(t.tpl,e),r?void r(n):n):c.error("no data")};var o=function(e){return"string"!=typeof e?c.error("Template not found"):new t(e)};o.config=function(e){e=e||{};for(var c in e)r[c]=e[c]},o.v="1.2.0",e("laytpl",o)});layui.define(function(e){"use strict";var t=(window,document),i="querySelectorAll",n="getElementsByClassName",a=function(e){return t[i](e)},s={type:0,shade:!0,shadeClose:!0,fixed:!0,anim:"scale"},l={extend:function(e){var t=JSON.parse(JSON.stringify(s));for(var i in e)t[i]=e[i];return t},timer:{},end:{}};l.touch=function(e,t){e.addEventListener("click",function(e){t.call(this,e)},!1)};var o=0,r=["layui-m-layer"],d=function(e){var t=this;t.config=l.extend(e),t.view()};d.prototype.view=function(){var e=this,i=e.config,s=t.createElement("div");e.id=s.id=r[0]+o,s.setAttribute("class",r[0]+" "+r[0]+(i.type||0)),s.setAttribute("index",o);var l=function(){var e="object"==typeof i.title;return i.title?'

    '+(e?i.title[0]:i.title)+"

    ":""}(),d=function(){"string"==typeof i.btn&&(i.btn=[i.btn]);var e,t=(i.btn||[]).length;return 0!==t&&i.btn?(e=''+i.btn[0]+"",2===t&&(e=''+i.btn[1]+""+e),'
    '+e+"
    "):""}();if(i.fixed||(i.top=i.hasOwnProperty("top")?i.top:100,i.style=i.style||"",i.style+=" top:"+(t.body.scrollTop+i.top)+"px"),2===i.type&&(i.content='

    '+(i.content||"")+"

    "),i.skin&&(i.anim="up"),"msg"===i.skin&&(i.shade=!1),s.innerHTML=(i.shade?"
    ':"")+'
    "+l+'
    '+i.content+"
    "+d+"
    ",!i.type||2===i.type){var y=t[n](r[0]+i.type),u=y.length;u>=1&&c.close(y[0].getAttribute("index"))}document.body.appendChild(s);var m=e.elem=a("#"+e.id)[0];i.success&&i.success(m),e.index=o++,e.action(i,m)},d.prototype.action=function(e,t){var i=this;e.time&&(l.timer[i.index]=setTimeout(function(){c.close(i.index)},1e3*e.time));var a=function(){var t=this.getAttribute("type");0==t?(e.no&&e.no(),c.close(i.index)):e.yes?e.yes(i.index):c.close(i.index)};if(e.btn)for(var s=t[n]("layui-m-layerbtn")[0].children,o=s.length,r=0;r0&&e-1 in t)}function s(t){return A.call(t,function(t){return null!=t})}function u(t){return t.length>0?T.fn.concat.apply([],t):t}function c(t){return t.replace(/::/g,"/").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").replace(/_/g,"-").toLowerCase()}function l(t){return t in F?F[t]:F[t]=new RegExp("(^|\\s)"+t+"(\\s|$)")}function f(t,e){return"number"!=typeof e||k[c(t)]?e:e+"px"}function h(t){var e,n;return $[t]||(e=L.createElement(t),L.body.appendChild(e),n=getComputedStyle(e,"").getPropertyValue("display"),e.parentNode.removeChild(e),"none"==n&&(n="block"),$[t]=n),$[t]}function p(t){return"children"in t?D.call(t.children):T.map(t.childNodes,function(t){if(1==t.nodeType)return t})}function d(t,e){var n,r=t?t.length:0;for(n=0;n]*>/,R=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,z=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,Z=/^(?:body|html)$/i,q=/([A-Z])/g,H=["val","css","html","text","data","width","height","offset"],I=["after","prepend","before","append"],V=L.createElement("table"),_=L.createElement("tr"),B={tr:L.createElement("tbody"),tbody:V,thead:V,tfoot:V,td:_,th:_,"*":L.createElement("div")},U=/complete|loaded|interactive/,X=/^[\w-]*$/,J={},W=J.toString,Y={},G=L.createElement("div"),K={tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},Q=Array.isArray||function(t){return t instanceof Array};return Y.matches=function(t,e){if(!e||!t||1!==t.nodeType)return!1;var n=t.matches||t.webkitMatchesSelector||t.mozMatchesSelector||t.oMatchesSelector||t.matchesSelector;if(n)return n.call(t,e);var r,i=t.parentNode,o=!i;return o&&(i=G).appendChild(t),r=~Y.qsa(i,e).indexOf(t),o&&G.removeChild(t),r},C=function(t){return t.replace(/-+(.)?/g,function(t,e){return e?e.toUpperCase():""})},N=function(t){return A.call(t,function(e,n){return t.indexOf(e)==n})},Y.fragment=function(t,e,n){var r,i,a;return R.test(t)&&(r=T(L.createElement(RegExp.$1))),r||(t.replace&&(t=t.replace(z,"<$1>")),e===E&&(e=M.test(t)&&RegExp.$1),e in B||(e="*"),a=B[e],a.innerHTML=""+t,r=T.each(D.call(a.childNodes),function(){a.removeChild(this)})),o(n)&&(i=T(r),T.each(n,function(t,e){H.indexOf(t)>-1?i[t](e):i.attr(t,e)})),r},Y.Z=function(t,e){return new d(t,e)},Y.isZ=function(t){return t instanceof Y.Z},Y.init=function(t,n){var r;if(!t)return Y.Z();if("string"==typeof t)if(t=t.trim(),"<"==t[0]&&M.test(t))r=Y.fragment(t,RegExp.$1,n),t=null;else{if(n!==E)return T(n).find(t);r=Y.qsa(L,t)}else{if(e(t))return T(L).ready(t);if(Y.isZ(t))return t;if(Q(t))r=s(t);else if(i(t))r=[t],t=null;else if(M.test(t))r=Y.fragment(t.trim(),RegExp.$1,n),t=null;else{if(n!==E)return T(n).find(t);r=Y.qsa(L,t)}}return Y.Z(r,t)},T=function(t,e){return Y.init(t,e)},T.extend=function(t){var e,n=D.call(arguments,1);return"boolean"==typeof t&&(e=t,t=n.shift()),n.forEach(function(n){m(t,n,e)}),t},Y.qsa=function(t,e){var n,r="#"==e[0],i=!r&&"."==e[0],o=r||i?e.slice(1):e,a=X.test(o);return t.getElementById&&a&&r?(n=t.getElementById(o))?[n]:[]:1!==t.nodeType&&9!==t.nodeType&&11!==t.nodeType?[]:D.call(a&&!r&&t.getElementsByClassName?i?t.getElementsByClassName(o):t.getElementsByTagName(e):t.querySelectorAll(e))},T.contains=L.documentElement.contains?function(t,e){return t!==e&&t.contains(e)}:function(t,e){for(;e&&(e=e.parentNode);)if(e===t)return!0;return!1},T.type=t,T.isFunction=e,T.isWindow=n,T.isArray=Q,T.isPlainObject=o,T.isEmptyObject=function(t){var e;for(e in t)return!1;return!0},T.isNumeric=function(t){var e=Number(t),n=typeof t;return null!=t&&"boolean"!=n&&("string"!=n||t.length)&&!isNaN(e)&&isFinite(e)||!1},T.inArray=function(t,e,n){return O.indexOf.call(e,t,n)},T.camelCase=C,T.trim=function(t){return null==t?"":String.prototype.trim.call(t)},T.uuid=0,T.support={},T.expr={},T.noop=function(){},T.map=function(t,e){var n,r,i,o=[];if(a(t))for(r=0;r=0?t:t+this.length]},toArray:function(){return this.get()},size:function(){return this.length},remove:function(){return this.each(function(){null!=this.parentNode&&this.parentNode.removeChild(this)})},each:function(t){return O.every.call(this,function(e,n){return t.call(e,n,e)!==!1}),this},filter:function(t){return e(t)?this.not(this.not(t)):T(A.call(this,function(e){return Y.matches(e,t)}))},add:function(t,e){return T(N(this.concat(T(t,e))))},is:function(t){return this.length>0&&Y.matches(this[0],t)},not:function(t){var n=[];if(e(t)&&t.call!==E)this.each(function(e){t.call(this,e)||n.push(this)});else{var r="string"==typeof t?this.filter(t):a(t)&&e(t.item)?D.call(t):T(t);this.forEach(function(t){r.indexOf(t)<0&&n.push(t)})}return T(n)},has:function(t){return this.filter(function(){return i(t)?T.contains(this,t):T(this).find(t).size()})},eq:function(t){return t===-1?this.slice(t):this.slice(t,+t+1)},first:function(){var t=this[0];return t&&!i(t)?t:T(t)},last:function(){var t=this[this.length-1];return t&&!i(t)?t:T(t)},find:function(t){var e,n=this;return e=t?"object"==typeof t?T(t).filter(function(){var t=this;return O.some.call(n,function(e){return T.contains(e,t)})}):1==this.length?T(Y.qsa(this[0],t)):this.map(function(){return Y.qsa(this,t)}):T()},closest:function(t,e){var n=[],i="object"==typeof t&&T(t);return this.each(function(o,a){for(;a&&!(i?i.indexOf(a)>=0:Y.matches(a,t));)a=a!==e&&!r(a)&&a.parentNode;a&&n.indexOf(a)<0&&n.push(a)}),T(n)},parents:function(t){for(var e=[],n=this;n.length>0;)n=T.map(n,function(t){if((t=t.parentNode)&&!r(t)&&e.indexOf(t)<0)return e.push(t),t});return v(e,t)},parent:function(t){return v(N(this.pluck("parentNode")),t)},children:function(t){return v(this.map(function(){return p(this)}),t)},contents:function(){return this.map(function(){return this.contentDocument||D.call(this.childNodes)})},siblings:function(t){return v(this.map(function(t,e){return A.call(p(e.parentNode),function(t){return t!==e})}),t)},empty:function(){return this.each(function(){this.innerHTML=""})},pluck:function(t){return T.map(this,function(e){return e[t]})},show:function(){return this.each(function(){"none"==this.style.display&&(this.style.display=""),"none"==getComputedStyle(this,"").getPropertyValue("display")&&(this.style.display=h(this.nodeName))})},replaceWith:function(t){return this.before(t).remove()},wrap:function(t){var n=e(t);if(this[0]&&!n)var r=T(t).get(0),i=r.parentNode||this.length>1;return this.each(function(e){T(this).wrapAll(n?t.call(this,e):i?r.cloneNode(!0):r)})},wrapAll:function(t){if(this[0]){T(this[0]).before(t=T(t));for(var e;(e=t.children()).length;)t=e.first();T(t).append(this)}return this},wrapInner:function(t){var n=e(t);return this.each(function(e){var r=T(this),i=r.contents(),o=n?t.call(this,e):t;i.length?i.wrapAll(o):r.append(o)})},unwrap:function(){return this.parent().each(function(){T(this).replaceWith(T(this).children())}),this},clone:function(){return this.map(function(){return this.cloneNode(!0)})},hide:function(){return this.css("display","none")},toggle:function(t){return this.each(function(){var e=T(this);(t===E?"none"==e.css("display"):t)?e.show():e.hide()})},prev:function(t){return T(this.pluck("previousElementSibling")).filter(t||"*")},next:function(t){return T(this.pluck("nextElementSibling")).filter(t||"*")},html:function(t){return 0 in arguments?this.each(function(e){var n=this.innerHTML;T(this).empty().append(g(this,t,e,n))}):0 in this?this[0].innerHTML:null},text:function(t){return 0 in arguments?this.each(function(e){var n=g(this,t,e,this.textContent);this.textContent=null==n?"":""+n}):0 in this?this.pluck("textContent").join(""):null},attr:function(t,e){var n;return"string"!=typeof t||1 in arguments?this.each(function(n){if(1===this.nodeType)if(i(t))for(j in t)y(this,j,t[j]);else y(this,t,g(this,e,n,this.getAttribute(t)))}):0 in this&&1==this[0].nodeType&&null!=(n=this[0].getAttribute(t))?n:E},removeAttr:function(t){return this.each(function(){1===this.nodeType&&t.split(" ").forEach(function(t){y(this,t)},this)})},prop:function(t,e){return t=K[t]||t,1 in arguments?this.each(function(n){this[t]=g(this,e,n,this[t])}):this[0]&&this[0][t]},removeProp:function(t){return t=K[t]||t,this.each(function(){delete this[t]})},data:function(t,e){var n="data-"+t.replace(q,"-$1").toLowerCase(),r=1 in arguments?this.attr(n,e):this.attr(n);return null!==r?b(r):E},val:function(t){return 0 in arguments?(null==t&&(t=""),this.each(function(e){this.value=g(this,t,e,this.value)})):this[0]&&(this[0].multiple?T(this[0]).find("option").filter(function(){return this.selected}).pluck("value"):this[0].value)},offset:function(t){if(t)return this.each(function(e){var n=T(this),r=g(this,t,e,n.offset()),i=n.offsetParent().offset(),o={top:r.top-i.top,left:r.left-i.left};"static"==n.css("position")&&(o.position="relative"),n.css(o)});if(!this.length)return null;if(L.documentElement!==this[0]&&!T.contains(L.documentElement,this[0]))return{top:0,left:0};var e=this[0].getBoundingClientRect();return{left:e.left+window.pageXOffset,top:e.top+window.pageYOffset,width:Math.round(e.width),height:Math.round(e.height)}},css:function(e,n){if(arguments.length<2){var r=this[0];if("string"==typeof e){if(!r)return;return r.style[C(e)]||getComputedStyle(r,"").getPropertyValue(e)}if(Q(e)){if(!r)return;var i={},o=getComputedStyle(r,"");return T.each(e,function(t,e){i[e]=r.style[C(e)]||o.getPropertyValue(e)}),i}}var a="";if("string"==t(e))n||0===n?a=c(e)+":"+f(e,n):this.each(function(){this.style.removeProperty(c(e))});else for(j in e)e[j]||0===e[j]?a+=c(j)+":"+f(j,e[j])+";":this.each(function(){this.style.removeProperty(c(j))});return this.each(function(){this.style.cssText+=";"+a})},index:function(t){return t?this.indexOf(T(t)[0]):this.parent().children().indexOf(this[0])},hasClass:function(t){return!!t&&O.some.call(this,function(t){return this.test(x(t))},l(t))},addClass:function(t){return t?this.each(function(e){if("className"in this){S=[];var n=x(this),r=g(this,t,e,n);r.split(/\s+/g).forEach(function(t){T(this).hasClass(t)||S.push(t)},this),S.length&&x(this,n+(n?" ":"")+S.join(" "))}}):this},removeClass:function(t){return this.each(function(e){if("className"in this){if(t===E)return x(this,"");S=x(this),g(this,t,e,S).split(/\s+/g).forEach(function(t){S=S.replace(l(t)," ")}),x(this,S.trim())}})},toggleClass:function(t,e){return t?this.each(function(n){var r=T(this),i=g(this,t,n,x(this));i.split(/\s+/g).forEach(function(t){(e===E?!r.hasClass(t):e)?r.addClass(t):r.removeClass(t)})}):this},scrollTop:function(t){if(this.length){var e="scrollTop"in this[0];return t===E?e?this[0].scrollTop:this[0].pageYOffset:this.each(e?function(){this.scrollTop=t}:function(){this.scrollTo(this.scrollX,t)})}},scrollLeft:function(t){if(this.length){var e="scrollLeft"in this[0];return t===E?e?this[0].scrollLeft:this[0].pageXOffset:this.each(e?function(){this.scrollLeft=t}:function(){this.scrollTo(t,this.scrollY)})}},position:function(){if(this.length){var t=this[0],e=this.offsetParent(),n=this.offset(),r=Z.test(e[0].nodeName)?{top:0,left:0}:e.offset();return n.top-=parseFloat(T(t).css("margin-top"))||0,n.left-=parseFloat(T(t).css("margin-left"))||0,r.top+=parseFloat(T(e[0]).css("border-top-width"))||0,r.left+=parseFloat(T(e[0]).css("border-left-width"))||0,{top:n.top-r.top,left:n.left-r.left}}},offsetParent:function(){return this.map(function(){for(var t=this.offsetParent||L.body;t&&!Z.test(t.nodeName)&&"static"==T(t).css("position");)t=t.offsetParent;return t})}},T.fn.detach=T.fn.remove,["width","height"].forEach(function(t){var e=t.replace(/./,function(t){return t[0].toUpperCase()});T.fn[t]=function(i){var o,a=this[0];return i===E?n(a)?a["inner"+e]:r(a)?a.documentElement["scroll"+e]:(o=this.offset())&&o[t]:this.each(function(e){a=T(this),a.css(t,g(this,i,e,a[t]()))})}}),I.forEach(function(e,n){var r=n%2;T.fn[e]=function(){var e,i,o=T.map(arguments,function(n){var r=[];return e=t(n),"array"==e?(n.forEach(function(t){return t.nodeType!==E?r.push(t):T.zepto.isZ(t)?r=r.concat(t.get()):void(r=r.concat(Y.fragment(t)))}),r):"object"==e||null==n?n:Y.fragment(n)}),a=this.length>1;return o.length<1?this:this.each(function(t,e){i=r?e:e.parentNode,e=0==n?e.nextSibling:1==n?e.firstChild:2==n?e:null;var s=T.contains(L.documentElement,i);o.forEach(function(t){if(a)t=t.cloneNode(!0);else if(!i)return T(t).remove();i.insertBefore(t,e),s&&w(t,function(t){if(!(null==t.nodeName||"SCRIPT"!==t.nodeName.toUpperCase()||t.type&&"text/javascript"!==t.type||t.src)){var e=t.ownerDocument?t.ownerDocument.defaultView:window;e.eval.call(e,t.innerHTML)}})})})},T.fn[r?e+"To":"insert"+(n?"Before":"After")]=function(t){return T(t)[e](this),this}}),Y.Z.prototype=d.prototype=T.fn,Y.uniq=N,Y.deserializeValue=b,T.zepto=Y,T}();!function(t){function e(t){return t._zid||(t._zid=h++)}function n(t,n,o,a){if(n=r(n),n.ns)var s=i(n.ns);return(v[e(t)]||[]).filter(function(t){return t&&(!n.e||t.e==n.e)&&(!n.ns||s.test(t.ns))&&(!o||e(t.fn)===e(o))&&(!a||t.sel==a)})}function r(t){var e=(""+t).split(".");return{e:e[0],ns:e.slice(1).sort().join(" ")}}function i(t){return new RegExp("(?:^| )"+t.replace(" "," .* ?")+"(?: |$)")}function o(t,e){return t.del&&!y&&t.e in x||!!e}function a(t){return b[t]||y&&x[t]||t}function s(n,i,s,u,l,h,p){var d=e(n),m=v[d]||(v[d]=[]);i.split(/\s/).forEach(function(e){if("ready"==e)return t(document).ready(s);var i=r(e);i.fn=s,i.sel=l,i.e in b&&(s=function(e){var n=e.relatedTarget;if(!n||n!==this&&!t.contains(this,n))return i.fn.apply(this,arguments)}),i.del=h;var d=h||s;i.proxy=function(t){if(t=c(t),!t.isImmediatePropagationStopped()){t.data=u;var e=d.apply(n,t._args==f?[t]:[t].concat(t._args));return e===!1&&(t.preventDefault(),t.stopPropagation()),e}},i.i=m.length,m.push(i),"addEventListener"in n&&n.addEventListener(a(i.e),i.proxy,o(i,p))})}function u(t,r,i,s,u){var c=e(t);(r||"").split(/\s/).forEach(function(e){n(t,e,i,s).forEach(function(e){delete v[c][e.i],"removeEventListener"in t&&t.removeEventListener(a(e.e),e.proxy,o(e,u))})})}function c(e,n){return!n&&e.isDefaultPrevented||(n||(n=e),t.each(T,function(t,r){var i=n[t];e[t]=function(){return this[r]=w,i&&i.apply(n,arguments)},e[r]=E}),e.timeStamp||(e.timeStamp=Date.now()),(n.defaultPrevented!==f?n.defaultPrevented:"returnValue"in n?n.returnValue===!1:n.getPreventDefault&&n.getPreventDefault())&&(e.isDefaultPrevented=w)),e}function l(t){var e,n={originalEvent:t};for(e in t)j.test(e)||t[e]===f||(n[e]=t[e]);return c(n,t)}var f,h=1,p=Array.prototype.slice,d=t.isFunction,m=function(t){return"string"==typeof t},v={},g={},y="onfocusin"in window,x={focus:"focusin",blur:"focusout"},b={mouseenter:"mouseover",mouseleave:"mouseout"};g.click=g.mousedown=g.mouseup=g.mousemove="MouseEvents",t.event={add:s,remove:u},t.proxy=function(n,r){var i=2 in arguments&&p.call(arguments,2);if(d(n)){var o=function(){return n.apply(r,i?i.concat(p.call(arguments)):arguments)};return o._zid=e(n),o}if(m(r))return i?(i.unshift(n[r],n),t.proxy.apply(null,i)):t.proxy(n[r],n);throw new TypeError("expected function")},t.fn.bind=function(t,e,n){return this.on(t,e,n)},t.fn.unbind=function(t,e){return this.off(t,e)},t.fn.one=function(t,e,n,r){return this.on(t,e,n,r,1)};var w=function(){return!0},E=function(){return!1},j=/^([A-Z]|returnValue$|layer[XY]$|webkitMovement[XY]$)/,T={preventDefault:"isDefaultPrevented",stopImmediatePropagation:"isImmediatePropagationStopped",stopPropagation:"isPropagationStopped"};t.fn.delegate=function(t,e,n){return this.on(e,t,n)},t.fn.undelegate=function(t,e,n){return this.off(e,t,n)},t.fn.live=function(e,n){return t(document.body).delegate(this.selector,e,n),this},t.fn.die=function(e,n){return t(document.body).undelegate(this.selector,e,n),this},t.fn.on=function(e,n,r,i,o){var a,c,h=this;return e&&!m(e)?(t.each(e,function(t,e){h.on(t,n,r,e,o)}),h):(m(n)||d(i)||i===!1||(i=r,r=n,n=f),i!==f&&r!==!1||(i=r,r=f),i===!1&&(i=E),h.each(function(f,h){o&&(a=function(t){return u(h,t.type,i),i.apply(this,arguments)}),n&&(c=function(e){var r,o=t(e.target).closest(n,h).get(0);if(o&&o!==h)return r=t.extend(l(e),{currentTarget:o,liveFired:h}),(a||i).apply(o,[r].concat(p.call(arguments,1)))}),s(h,e,i,r,n,c||a)}))},t.fn.off=function(e,n,r){var i=this;return e&&!m(e)?(t.each(e,function(t,e){i.off(t,n,e)}),i):(m(n)||d(r)||r===!1||(r=n,n=f),r===!1&&(r=E),i.each(function(){u(this,e,r,n)}))},t.fn.trigger=function(e,n){return e=m(e)||t.isPlainObject(e)?t.Event(e):c(e),e._args=n,this.each(function(){e.type in x&&"function"==typeof this[e.type]?this[e.type]():"dispatchEvent"in this?this.dispatchEvent(e):t(this).triggerHandler(e,n)})},t.fn.triggerHandler=function(e,r){var i,o;return this.each(function(a,s){i=l(m(e)?t.Event(e):e),i._args=r,i.target=s,t.each(n(s,e.type||e),function(t,e){if(o=e.proxy(i),i.isImmediatePropagationStopped())return!1})}),o},"focusin focusout focus blur load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select keydown keypress keyup error".split(" ").forEach(function(e){t.fn[e]=function(t){return 0 in arguments?this.bind(e,t):this.trigger(e)}}),t.Event=function(t,e){m(t)||(e=t,t=e.type);var n=document.createEvent(g[t]||"Events"),r=!0;if(e)for(var i in e)"bubbles"==i?r=!!e[i]:n[i]=e[i];return n.initEvent(t,r,!0),c(n)}}(e),function(t){function e(e,n,r){var i=t.Event(n);return t(e).trigger(i,r),!i.isDefaultPrevented()}function n(t,n,r,i){if(t.global)return e(n||x,r,i)}function r(e){e.global&&0===t.active++&&n(e,null,"ajaxStart")}function i(e){e.global&&!--t.active&&n(e,null,"ajaxStop")}function o(t,e){var r=e.context;return e.beforeSend.call(r,t,e)!==!1&&n(e,r,"ajaxBeforeSend",[t,e])!==!1&&void n(e,r,"ajaxSend",[t,e])}function a(t,e,r,i){var o=r.context,a="success";r.success.call(o,t,a,e),i&&i.resolveWith(o,[t,a,e]),n(r,o,"ajaxSuccess",[e,r,t]),u(a,e,r)}function s(t,e,r,i,o){var a=i.context;i.error.call(a,r,e,t),o&&o.rejectWith(a,[r,e,t]),n(i,a,"ajaxError",[r,i,t||e]),u(e,r,i)}function u(t,e,r){var o=r.context;r.complete.call(o,e,t),n(r,o,"ajaxComplete",[e,r]),i(r)}function c(t,e,n){if(n.dataFilter==l)return t;var r=n.context;return n.dataFilter.call(r,t,e)}function l(){}function f(t){return t&&(t=t.split(";",2)[0]),t&&(t==T?"html":t==j?"json":w.test(t)?"script":E.test(t)&&"xml")||"text"}function h(t,e){return""==e?t:(t+"&"+e).replace(/[&?]{1,2}/,"?")}function p(e){e.processData&&e.data&&"string"!=t.type(e.data)&&(e.data=t.param(e.data,e.traditional)),!e.data||e.type&&"GET"!=e.type.toUpperCase()&&"jsonp"!=e.dataType||(e.url=h(e.url,e.data),e.data=void 0)}function d(e,n,r,i){return t.isFunction(n)&&(i=r,r=n,n=void 0),t.isFunction(r)||(i=r,r=void 0),{url:e,data:n,success:r,dataType:i}}function m(e,n,r,i){var o,a=t.isArray(n),s=t.isPlainObject(n);t.each(n,function(n,u){o=t.type(u),i&&(n=r?i:i+"["+(s||"object"==o||"array"==o?n:"")+"]"),!i&&a?e.add(u.name,u.value):"array"==o||!r&&"object"==o?m(e,u,r,n):e.add(n,u)})}var v,g,y=+new Date,x=window.document,b=/)<[^<]*)*<\/script>/gi,w=/^(?:text|application)\/javascript/i,E=/^(?:text|application)\/xml/i,j="application/json",T="text/html",S=/^\s*$/,C=x.createElement("a");C.href=window.location.href,t.active=0,t.ajaxJSONP=function(e,n){if(!("type"in e))return t.ajax(e);var r,i,u=e.jsonpCallback,c=(t.isFunction(u)?u():u)||"Zepto"+y++,l=x.createElement("script"),f=window[c],h=function(e){t(l).triggerHandler("error",e||"abort")},p={abort:h};return n&&n.promise(p),t(l).on("load error",function(o,u){clearTimeout(i),t(l).off().remove(),"error"!=o.type&&r?a(r[0],p,e,n):s(null,u||"error",p,e,n),window[c]=f,r&&t.isFunction(f)&&f(r[0]),f=r=void 0}),o(p,e)===!1?(h("abort"),p):(window[c]=function(){r=arguments},l.src=e.url.replace(/\?(.+)=\?/,"?$1="+c),x.head.appendChild(l),e.timeout>0&&(i=setTimeout(function(){h("timeout")},e.timeout)),p)},t.ajaxSettings={type:"GET",beforeSend:l,success:l,error:l,complete:l,context:null,global:!0,xhr:function(){return new window.XMLHttpRequest},accepts:{script:"text/javascript, application/javascript, application/x-javascript",json:j,xml:"application/xml, text/xml",html:T,text:"text/plain"},crossDomain:!1,timeout:0,processData:!0,cache:!0,dataFilter:l},t.ajax=function(e){var n,i,u=t.extend({},e||{}),d=t.Deferred&&t.Deferred();for(v in t.ajaxSettings)void 0===u[v]&&(u[v]=t.ajaxSettings[v]);r(u),u.crossDomain||(n=x.createElement("a"),n.href=u.url,n.href=n.href,u.crossDomain=C.protocol+"//"+C.host!=n.protocol+"//"+n.host),u.url||(u.url=window.location.toString()),(i=u.url.indexOf("#"))>-1&&(u.url=u.url.slice(0,i)),p(u);var m=u.dataType,y=/\?.+=\?/.test(u.url);if(y&&(m="jsonp"),u.cache!==!1&&(e&&e.cache===!0||"script"!=m&&"jsonp"!=m)||(u.url=h(u.url,"_="+Date.now())),"jsonp"==m)return y||(u.url=h(u.url,u.jsonp?u.jsonp+"=?":u.jsonp===!1?"":"callback=?")),t.ajaxJSONP(u,d);var b,w=u.accepts[m],E={},j=function(t,e){E[t.toLowerCase()]=[t,e]},T=/^([\w-]+:)\/\//.test(u.url)?RegExp.$1:window.location.protocol,N=u.xhr(),O=N.setRequestHeader;if(d&&d.promise(N),u.crossDomain||j("X-Requested-With","XMLHttpRequest"),j("Accept",w||"*/*"),(w=u.mimeType||w)&&(w.indexOf(",")>-1&&(w=w.split(",",2)[0]),N.overrideMimeType&&N.overrideMimeType(w)),(u.contentType||u.contentType!==!1&&u.data&&"GET"!=u.type.toUpperCase())&&j("Content-Type",u.contentType||"application/x-www-form-urlencoded"),u.headers)for(g in u.headers)j(g,u.headers[g]);if(N.setRequestHeader=j,N.onreadystatechange=function(){if(4==N.readyState){N.onreadystatechange=l,clearTimeout(b);var e,n=!1;if(N.status>=200&&N.status<300||304==N.status||0==N.status&&"file:"==T){if(m=m||f(u.mimeType||N.getResponseHeader("content-type")),"arraybuffer"==N.responseType||"blob"==N.responseType)e=N.response;else{e=N.responseText;try{e=c(e,m,u),"script"==m?(0,eval)(e):"xml"==m?e=N.responseXML:"json"==m&&(e=S.test(e)?null:t.parseJSON(e))}catch(r){n=r}if(n)return s(n,"parsererror",N,u,d)}a(e,N,u,d)}else s(N.statusText||null,N.status?"error":"abort",N,u,d)}},o(N,u)===!1)return N.abort(),s(null,"abort",N,u,d),N;var P=!("async"in u)||u.async;if(N.open(u.type,u.url,P,u.username,u.password),u.xhrFields)for(g in u.xhrFields)N[g]=u.xhrFields[g];for(g in E)O.apply(N,E[g]);return u.timeout>0&&(b=setTimeout(function(){N.onreadystatechange=l,N.abort(),s(null,"timeout",N,u,d)},u.timeout)),N.send(u.data?u.data:null),N},t.get=function(){return t.ajax(d.apply(null,arguments))},t.post=function(){var e=d.apply(null,arguments);return e.type="POST",t.ajax(e)},t.getJSON=function(){var e=d.apply(null,arguments);return e.dataType="json",t.ajax(e)},t.fn.load=function(e,n,r){if(!this.length)return this;var i,o=this,a=e.split(/\s/),s=d(e,n,r),u=s.success;return a.length>1&&(s.url=a[0],i=a[1]),s.success=function(e){o.html(i?t("
    ").html(e.replace(b,"")).find(i):e),u&&u.apply(o,arguments)},t.ajax(s),this};var N=encodeURIComponent;t.param=function(e,n){var r=[];return r.add=function(e,n){t.isFunction(n)&&(n=n()),null==n&&(n=""),this.push(N(e)+"="+N(n))},m(r,e,n),r.join("&").replace(/%20/g,"+")}}(e),function(t){t.fn.serializeArray=function(){var e,n,r=[],i=function(t){return t.forEach?t.forEach(i):void r.push({name:e,value:t})};return this[0]&&t.each(this[0].elements,function(r,o){n=o.type,e=o.name,e&&"fieldset"!=o.nodeName.toLowerCase()&&!o.disabled&&"submit"!=n&&"reset"!=n&&"button"!=n&&"file"!=n&&("radio"!=n&&"checkbox"!=n||o.checked)&&i(t(o).val())}),r},t.fn.serialize=function(){var t=[];return this.serializeArray().forEach(function(e){t.push(encodeURIComponent(e.name)+"="+encodeURIComponent(e.value))}),t.join("&")},t.fn.submit=function(e){if(0 in arguments)this.bind("submit",e);else if(this.length){var n=t.Event("submit");this.eq(0).trigger(n),n.isDefaultPrevented()||this.get(0).submit()}return this}}(e),function(){try{getComputedStyle(void 0)}catch(t){var e=getComputedStyle;window.getComputedStyle=function(t,n){try{return e(t,n)}catch(r){return null}}}}(),t("zepto",e)});layui.define(function(i){i("layim-mobile",layui.v)});layui["layui.mobile"]||layui.config({base:layui.cache.dir+"lay/modules/mobile/"}).extend({"layer-mobile":"layer-mobile",zepto:"zepto","upload-mobile":"upload-mobile","layim-mobile":"layim-mobile"}),layui.define(["layer-mobile","zepto","layim-mobile"],function(l){l("mobile",{layer:layui["layer-mobile"],layim:layui["layim-mobile"]})}); ================================================ FILE: public/assets/luna/layui/lay/modules/rate.js ================================================ /** layui-v2.5.6 MIT License By https://www.layui.com */ ;layui.define("jquery",function(e){"use strict";var a=layui.jquery,i={config:{},index:layui.rate?layui.rate.index+1e4:0,set:function(e){var i=this;return i.config=a.extend({},i.config,e),i},on:function(e,a){return layui.onevent.call(this,n,e,a)}},l=function(){var e=this,a=e.config;return{setvalue:function(a){e.setvalue.call(e,a)},config:a}},n="rate",t="layui-rate",o="layui-icon-rate",s="layui-icon-rate-solid",u="layui-icon-rate-half",r="layui-icon-rate-solid layui-icon-rate-half",c="layui-icon-rate-solid layui-icon-rate",f="layui-icon-rate layui-icon-rate-half",v=function(e){var l=this;l.index=++i.index,l.config=a.extend({},l.config,i.config,e),l.render()};v.prototype.config={length:5,text:!1,readonly:!1,half:!1,value:0,theme:""},v.prototype.render=function(){var e=this,i=e.config,l=i.theme?'style="color: '+i.theme+';"':"";i.elem=a(i.elem),parseInt(i.value)!==i.value&&(i.half||(i.value=Math.ceil(i.value)-i.value<.5?Math.ceil(i.value):Math.floor(i.value)));for(var n='
      ",u=1;u<=i.length;u++){var r='
    • ";i.half&&parseInt(i.value)!==i.value&&u==Math.ceil(i.value)?n=n+'
    • ":n+=r}n+="
    "+(i.text?''+i.value+"星":"")+"";var c=i.elem,f=c.next("."+t);f[0]&&f.remove(),e.elemTemp=a(n),i.span=e.elemTemp.next("span"),i.setText&&i.setText(i.value),c.html(e.elemTemp),c.addClass("layui-inline"),i.readonly||e.action()},v.prototype.setvalue=function(e){var a=this,i=a.config;i.value=e,a.render()},v.prototype.action=function(){var e=this,i=e.config,l=e.elemTemp,n=l.find("i").width();l.children("li").each(function(e){var t=e+1,v=a(this);v.on("click",function(e){if(i.value=t,i.half){var o=e.pageX-a(this).offset().left;o<=n/2&&(i.value=i.value-.5)}i.text&&l.next("span").text(i.value+"星"),i.choose&&i.choose(i.value),i.setText&&i.setText(i.value)}),v.on("mousemove",function(e){if(l.find("i").each(function(){a(this).addClass(o).removeClass(r)}),l.find("i:lt("+t+")").each(function(){a(this).addClass(s).removeClass(f)}),i.half){var c=e.pageX-a(this).offset().left;c<=n/2&&v.children("i").addClass(u).removeClass(s)}}),v.on("mouseleave",function(){l.find("i").each(function(){a(this).addClass(o).removeClass(r)}),l.find("i:lt("+Math.floor(i.value)+")").each(function(){a(this).addClass(s).removeClass(f)}),i.half&&parseInt(i.value)!==i.value&&l.children("li:eq("+Math.floor(i.value)+")").children("i").addClass(u).removeClass(c)})})},v.prototype.events=function(){var e=this;e.config},i.render=function(e){var a=new v(e);return l.call(a)},e(n,i)}); ================================================ FILE: public/assets/luna/layui/lay/modules/slider.js ================================================ /** layui-v2.5.6 MIT License By https://www.layui.com */ ;layui.define("jquery",function(e){"use strict";var i=layui.jquery,t={config:{},index:layui.slider?layui.slider.index+1e4:0,set:function(e){var t=this;return t.config=i.extend({},t.config,e),t},on:function(e,i){return layui.onevent.call(this,n,e,i)}},a=function(){var e=this,i=e.config;return{setValue:function(i,t){return e.slide("set",i,t||0)},config:i}},n="slider",l="layui-disabled",s="layui-slider",r="layui-slider-bar",o="layui-slider-wrap",u="layui-slider-wrap-btn",d="layui-slider-tips",v="layui-slider-input",c="layui-slider-input-txt",m="layui-slider-input-btn",p="layui-slider-hover",f=function(e){var a=this;a.index=++t.index,a.config=i.extend({},a.config,t.config,e),a.render()};f.prototype.config={type:"default",min:0,max:100,value:0,step:1,showstep:!1,tips:!0,input:!1,range:!1,height:200,disabled:!1,theme:"#009688"},f.prototype.render=function(){var e=this,t=e.config;if(t.step<1&&(t.step=1),t.maxt.min?a:t.min,t.value[1]=n>t.min?n:t.min,t.value[0]=t.value[0]>t.max?t.max:t.value[0],t.value[1]=t.value[1]>t.max?t.max:t.value[1];var r=Math.floor((t.value[0]-t.min)/(t.max-t.min)*100),v=Math.floor((t.value[1]-t.min)/(t.max-t.min)*100),m=v-r+"%";r+="%",v+="%"}else{"object"==typeof t.value&&(t.value=Math.min.apply(null,t.value)),t.valuet.max&&(t.value=t.max);var m=Math.floor((t.value-t.min)/(t.max-t.min)*100)+"%"}var p=t.disabled?"#c2c2c2":t.theme,f='
    '+(t.tips?'
    ':"")+'
    '+(t.range?'
    ':"")+"
    ",h=i(t.elem),y=h.next("."+s);if(y[0]&&y.remove(),e.elemTemp=i(f),t.range?(e.elemTemp.find("."+o).eq(0).data("value",t.value[0]),e.elemTemp.find("."+o).eq(1).data("value",t.value[1])):e.elemTemp.find("."+o).data("value",t.value),h.html(e.elemTemp),"vertical"===t.type&&e.elemTemp.height(t.height+"px"),t.showstep){for(var g=(t.max-t.min)/t.step,b="",x=1;x
    ')}e.elemTemp.append(b)}if(t.input&&!t.range){var w=i('
    ');h.css("position","relative"),h.append(w),h.find("."+c).children("input").val(t.value),"vertical"===t.type?w.css({left:0,top:-48}):e.elemTemp.css("margin-right",w.outerWidth()+15)}t.disabled?(e.elemTemp.addClass(l),e.elemTemp.find("."+u).addClass(l)):e.slide(),e.elemTemp.find("."+u).on("mouseover",function(){var a="vertical"===t.type?t.height:e.elemTemp[0].offsetWidth,n=e.elemTemp.find("."+o),l="vertical"===t.type?a-i(this).parent()[0].offsetTop-n.height():i(this).parent()[0].offsetLeft,s=l/a*100,r=i(this).parent().data("value"),u=t.setTips?t.setTips(r):r;e.elemTemp.find("."+d).html(u),"vertical"===t.type?e.elemTemp.find("."+d).css({bottom:s+"%","margin-bottom":"20px",display:"inline-block"}):e.elemTemp.find("."+d).css({left:s+"%",display:"inline-block"})}).on("mouseout",function(){e.elemTemp.find("."+d).css("display","none")})},f.prototype.slide=function(e,t,a){var n=this,l=n.config,s=n.elemTemp,f=function(){return"vertical"===l.type?l.height:s[0].offsetWidth},h=s.find("."+o),y=s.next("."+v),g=y.children("."+c).children("input").val(),b=100/((l.max-l.min)/Math.ceil(l.step)),x=function(e,i){e=Math.ceil(e)*b>100?Math.ceil(e)*b:Math.round(e)*b,e=e>100?100:e,h.eq(i).css("vertical"===l.type?"bottom":"left",e+"%");var t=T(h[0].offsetLeft),a=l.range?T(h[1].offsetLeft):0;"vertical"===l.type?(s.find("."+d).css({bottom:e+"%","margin-bottom":"20px"}),t=T(f()-h[0].offsetTop-h.height()),a=l.range?T(f()-h[1].offsetTop-h.height()):0):s.find("."+d).css("left",e+"%"),t=t>100?100:t,a=a>100?100:a;var n=Math.min(t,a),o=Math.abs(t-a);"vertical"===l.type?s.find("."+r).css({height:o+"%",bottom:n+"%"}):s.find("."+r).css({width:o+"%",left:n+"%"});var u=l.min+Math.round((l.max-l.min)*e/100);if(g=u,y.children("."+c).children("input").val(g),h.eq(i).data("value",u),u=l.setTips?l.setTips(u):u,s.find("."+d).html(u),l.range){var v=[h.eq(0).data("value"),h.eq(1).data("value")];v[0]>v[1]&&v.reverse()}l.change&&l.change(l.range?v:u)},T=function(e){var i=e/f()*100/b,t=Math.round(i)*b;return e==f()&&(t=Math.ceil(i)*b),t},w=i(['
    f()&&(r=f());var o=r/f()*100/b;x(o,e),t.addClass(p),s.find("."+d).show(),i.preventDefault()},o=function(){t.removeClass(p),s.find("."+d).hide()};M(r,o)})}),s.on("click",function(e){var t=i("."+u);if(!t.is(event.target)&&0===t.has(event.target).length&&t.length){var a,n="vertical"===l.type?f()-e.clientY+i(this).offset().top:e.clientX-i(this).offset().left;n<0&&(n=0),n>f()&&(n=f());var s=n/f()*100/b;a=l.range?"vertical"===l.type?Math.abs(n-parseInt(i(h[0]).css("bottom")))>Math.abs(n-parseInt(i(h[1]).css("bottom")))?1:0:Math.abs(n-h[0].offsetLeft)>Math.abs(n-h[1].offsetLeft)?1:0:0,x(s,a),e.preventDefault()}}),y.hover(function(){var e=i(this);e.children("."+m).fadeIn("fast")},function(){var e=i(this);e.children("."+m).fadeOut("fast")}),y.children("."+m).children("i").each(function(e){i(this).on("click",function(){g=1==e?g-l.stepl.max?l.max:Number(g)+l.step;var i=(g-l.min)/(l.max-l.min)*100/b;x(i,0)})});var q=function(){var e=this.value;e=isNaN(e)?0:e,e=el.max?l.max:e,this.value=e;var i=(e-l.min)/(l.max-l.min)*100/b;x(i,0)};y.children("."+c).children("input").on("keydown",function(e){13===e.keyCode&&(e.preventDefault(),q.call(this))}).on("change",q)},f.prototype.events=function(){var e=this;e.config},t.render=function(e){var i=new f(e);return a.call(i)},e(n,t)}); ================================================ FILE: public/assets/luna/layui/lay/modules/table.js ================================================ /** layui-v2.5.6 MIT License By https://www.layui.com */ ;layui.define(["laytpl","laypage","layer","form","util"],function(e){"use strict";var t=layui.$,i=layui.laytpl,a=layui.laypage,l=layui.layer,n=layui.form,o=(layui.util,layui.hint()),r=layui.device(),d={config:{checkName:"LAY_CHECKED",indexName:"LAY_TABLE_INDEX"},cache:{},index:layui.table?layui.table.index+1e4:0,set:function(e){var i=this;return i.config=t.extend({},i.config,e),i},on:function(e,t){return layui.onevent.call(this,y,e,t)}},c=function(){var e=this,t=e.config,i=t.id||t.index;return i&&(c.that[i]=e,c.config[i]=t),{config:t,reload:function(t){e.reload.call(e,t)},setColsWidth:function(){e.setColsWidth.call(e)},resize:function(){e.resize.call(e)}}},s=function(e){var t=c.config[e];return t||o.error("The ID option was not found in the table instance"),t||null},u=function(e,a,l,n){var o=e.templet?function(){return"function"==typeof e.templet?e.templet(l):i(t(e.templet).html()||String(a)).render(l)}():a;return n?t("
    "+o+"
    ").text():o},y="table",h=".layui-table",f="layui-hide",p="layui-none",v="layui-table-view",m=".layui-table-tool",g=".layui-table-box",b=".layui-table-init",x=".layui-table-header",k=".layui-table-body",C=".layui-table-main",w=".layui-table-fixed",T=".layui-table-fixed-l",A=".layui-table-fixed-r",L=".layui-table-total",N=".layui-table-page",S=".layui-table-sort",R="layui-table-edit",W="layui-table-hover",_=function(e){var t='{{#if(item2.colspan){}} colspan="{{item2.colspan}}"{{#} if(item2.rowspan){}} rowspan="{{item2.rowspan}}"{{#}}}';return e=e||{},['',"","{{# layui.each(d.data.cols, function(i1, item1){ }}","","{{# layui.each(item1, function(i2, item2){ }}",'{{# if(item2.fixed && item2.fixed !== "right"){ left = true; } }}','{{# if(item2.fixed === "right"){ right = true; } }}',function(){return e.fixed&&"right"!==e.fixed?'{{# if(item2.fixed && item2.fixed !== "right"){ }}':"right"===e.fixed?'{{# if(item2.fixed === "right"){ }}':""}(),"{{# var isSort = !(item2.colGroup) && item2.sort; }}",'",e.fixed?"{{# }; }}":"","{{# }); }}","","{{# }); }}","","
    ','
    ','{{# if(item2.type === "checkbox"){ }}','',"{{# } else { }}",'{{item2.title||""}}',"{{# if(isSort){ }}",'',"{{# } }}","{{# } }}","
    ","
    "].join("")},E=['',"","
    "].join(""),z=['
    ',"{{# if(d.data.toolbar){ }}",'
    ','
    ','
    ',"
    ","{{# } }}",'
    ',"{{# if(d.data.loading){ }}",'
    ','',"
    ","{{# } }}","{{# var left, right; }}",'
    ',_(),"
    ",'
    ',E,"
    ","{{# if(left){ }}",'
    ','
    ',_({fixed:!0}),"
    ",'
    ',E,"
    ","
    ","{{# }; }}","{{# if(right){ }}",'
    ','
    ',_({fixed:"right"}),'
    ',"
    ",'
    ',E,"
    ","
    ","{{# }; }}","
    ","{{# if(d.data.totalRow){ }}",'
    ','','',"
    ","
    ","{{# } }}","{{# if(d.data.page){ }}",'
    ','
    ',"
    ","{{# } }}","","
    "].join(""),H=t(window),j=t(document),F=function(e){var i=this;i.index=++d.index,i.config=t.extend({},i.config,d.config,e),i.render()};F.prototype.config={limit:10,loading:!0,cellMinWidth:60,defaultToolbar:["filter","exports","print"],autoSort:!0,text:{none:"无数据"}},F.prototype.render=function(){var e=this,a=e.config;if(a.elem=t(a.elem),a.where=a.where||{},a.id=a.id||a.elem.attr("id")||e.index,a.request=t.extend({pageName:"page",limitName:"limit"},a.request),a.response=t.extend({statusName:"code",statusCode:0,msgName:"msg",dataName:"data",totalRowName:"totalRow",countName:"count"},a.response),"object"==typeof a.page&&(a.limit=a.page.limit||a.limit,a.limits=a.page.limits||a.limits,e.page=a.page.curr=a.page.curr||1,delete a.page.elem,delete a.page.jump),!a.elem[0])return e;a.height&&/^full-\d+$/.test(a.height)&&(e.fullHeightGap=a.height.split("-")[1],a.height=H.height()-e.fullHeightGap),e.setInit();var l=a.elem,n=l.next("."+v),o=e.elem=t(i(z).render({VIEW_CLASS:v,data:a,index:e.index}));if(a.index=e.index,e.key=a.id||a.index,n[0]&&n.remove(),l.after(o),e.layTool=o.find(m),e.layBox=o.find(g),e.layHeader=o.find(x),e.layMain=o.find(C),e.layBody=o.find(k),e.layFixed=o.find(w),e.layFixLeft=o.find(T),e.layFixRight=o.find(A),e.layTotal=o.find(L),e.layPage=o.find(N),e.renderToolbar(),e.fullSize(),a.cols.length>1){var r=e.layFixed.find(x).find("th");r.height(e.layHeader.height()-1-parseFloat(r.css("padding-top"))-parseFloat(r.css("padding-bottom")))}e.pullData(e.page),e.events()},F.prototype.initOpts=function(e){var t=this,i=(t.config,{checkbox:48,radio:48,space:15,numbers:40});e.checkbox&&(e.type="checkbox"),e.space&&(e.type="space"),e.type||(e.type="normal"),"normal"!==e.type&&(e.unresize=!0,e.width=e.width||i[e.type])},F.prototype.setInit=function(e){var t=this,i=t.config;return i.clientWidth=i.width||function(){var e=function(t){var a,l;t=t||i.elem.parent(),a=t.width();try{l="none"===t.css("display")}catch(n){}return!t[0]||a&&!l?a:e(t.parent())};return e()}(),"width"===e?i.clientWidth:void layui.each(i.cols,function(e,a){layui.each(a,function(l,n){if(!n)return void a.splice(l,1);if(n.key=e+"-"+l,n.hide=n.hide||!1,n.colGroup||n.colspan>1){var o=0;layui.each(i.cols[e+1],function(t,i){i.HAS_PARENT||o>1&&o==n.colspan||(i.HAS_PARENT=!0,i.parentKey=e+"-"+l,o+=parseInt(i.colspan>1?i.colspan:1))}),n.colGroup=!0}t.initOpts(n)})})},F.prototype.renderToolbar=function(){var e=this,a=e.config,l=['
    ','
    ','
    '].join(""),n=e.layTool.find(".layui-table-tool-temp");if("default"===a.toolbar)n.html(l);else if("string"==typeof a.toolbar){var o=t(a.toolbar).html()||"";o&&n.html(i(o).render(a))}var r={filter:{title:"筛选列",layEvent:"LAYTABLE_COLS",icon:"layui-icon-cols"},exports:{title:"导出",layEvent:"LAYTABLE_EXPORT",icon:"layui-icon-export"},print:{title:"打印",layEvent:"LAYTABLE_PRINT",icon:"layui-icon-print"}},d=[];"object"==typeof a.defaultToolbar&&layui.each(a.defaultToolbar,function(e,t){var i="string"==typeof t?r[t]:t;i&&d.push('
    ')}),e.layTool.find(".layui-table-tool-self").html(d.join(""))},F.prototype.setParentCol=function(e,t){var i=this,a=i.config,l=i.layHeader.find('th[data-key="'+a.index+"-"+t+'"]'),n=parseInt(l.attr("colspan"))||0;if(l[0]){var o=t.split("-"),r=a.cols[o[0]][o[1]];e?n--:n++,l.attr("colspan",n),l[n<1?"addClass":"removeClass"](f),r.colspan=n,r.hide=n<1;var d=l.data("parentkey");d&&i.setParentCol(e,d)}},F.prototype.setColsPatch=function(){var e=this,t=e.config;layui.each(t.cols,function(t,i){layui.each(i,function(t,i){i.hide&&e.setParentCol(i.hide,i.parentKey)})})},F.prototype.setColsWidth=function(){var e=this,t=e.config,i=0,a=0,l=0,n=0,o=e.setInit("width");e.eachCols(function(e,t){t.hide||i++}),o=o-function(){return"line"===t.skin||"nob"===t.skin?2:i+1}()-e.getScrollWidth(e.layMain[0])-1;var r=function(e){layui.each(t.cols,function(i,r){layui.each(r,function(i,d){var c=0,s=d.minWidth||t.cellMinWidth;return d?void(d.colGroup||d.hide||(e?l&&ln&&a&&(l=(o-n)/a)};r(),r(!0),e.autoColNums=a,e.eachCols(function(i,a){var n=a.minWidth||t.cellMinWidth;a.colGroup||a.hide||(0===a.width?e.getCssRule(t.index+"-"+a.key,function(e){e.style.width=Math.floor(l>=n?l:n)+"px"}):/\d+%$/.test(a.width)&&e.getCssRule(t.index+"-"+a.key,function(e){e.style.width=Math.floor(parseFloat(a.width)/100*o)+"px"}))});var d=e.layMain.width()-e.getScrollWidth(e.layMain[0])-e.layMain.children("table").outerWidth();if(e.autoColNums&&d>=-i&&d<=i){var c=function(t){var i;return t=t||e.layHeader.eq(0).find("thead th:last-child"),i=t.data("field"),!i&&t.prev()[0]?c(t.prev()):t},s=c(),u=s.data("key");e.getCssRule(u,function(t){var i=t.style.width||s.outerWidth();t.style.width=parseFloat(i)+d+"px",e.layMain.height()-e.layMain.prop("clientHeight")>0&&(t.style.width=parseFloat(t.style.width)-1+"px")})}e.loading(!0)},F.prototype.resize=function(){var e=this;e.fullSize(),e.setColsWidth(),e.scrollPatch()},F.prototype.reload=function(e){var i=this;e=e||{},delete i.haveInit,e.data&&e.data.constructor===Array&&delete i.config.data,i.config=t.extend(!0,{},i.config,e),i.render()},F.prototype.errorView=function(e){var i=this,a=i.layMain.find("."+p),l=t('
    '+(e||"Error")+"
    ");a[0]&&(i.layNone.remove(),a.remove()),i.layFixed.addClass(f),i.layMain.find("tbody").html(""),i.layMain.append(i.layNone=l),d.cache[i.key]=[]},F.prototype.page=1,F.prototype.pullData=function(e){var i=this,a=i.config,l=a.request,n=a.response,o=function(){"object"==typeof a.initSort&&i.sort(a.initSort.field,a.initSort.type)};if(i.startTime=(new Date).getTime(),a.url){var r={};r[l.pageName]=e,r[l.limitName]=a.limit;var d=t.extend(r,a.where);a.contentType&&0==a.contentType.indexOf("application/json")&&(d=JSON.stringify(d)),i.loading(),t.ajax({type:a.method||"get",url:a.url,contentType:a.contentType,data:d,dataType:"json",headers:a.headers||{},success:function(t){"function"==typeof a.parseData&&(t=a.parseData(t)||t),t[n.statusName]!=n.statusCode?(i.renderForm(),i.errorView(t[n.msgName]||'返回的数据不符合规范,正确的成功状态码应为:"'+n.statusName+'": '+n.statusCode)):(i.renderData(t,e,t[n.countName]),o(),a.time=(new Date).getTime()-i.startTime+" ms"),i.setColsWidth(),"function"==typeof a.done&&a.done(t,e,t[n.countName])},error:function(e,t){i.errorView("数据接口请求异常:"+t),i.renderForm(),i.setColsWidth()}})}else if(a.data&&a.data.constructor===Array){var c={},s=e*a.limit-a.limit;c[n.dataName]=a.data.concat().splice(s,a.limit),c[n.countName]=a.data.length,"object"==typeof a.totalRow&&(c[n.totalRowName]=t.extend({},a.totalRow)),i.renderData(c,e,c[n.countName]),o(),i.setColsWidth(),"function"==typeof a.done&&a.done(c,e,c[n.countName])}},F.prototype.eachCols=function(e){var t=this;return d.eachCols(null,e,t.config.cols),t},F.prototype.renderData=function(e,n,o,r){var c=this,s=c.config,y=e[s.response.dataName]||[],h=e[s.response.totalRowName],v=[],m=[],g=[],b=function(){var e;return!r&&c.sortKey?c.sort(c.sortKey.field,c.sortKey.sort,!0):(layui.each(y,function(a,l){var o=[],y=[],h=[],p=a+s.limit*(n-1)+1;0!==l.length&&(r||(l[d.config.indexName]=a),c.eachCols(function(n,r){var c=r.field||n,v=s.index+"-"+r.key,m=l[c];if(void 0!==m&&null!==m||(m=""),!r.colGroup){var g=['','
    '+function(){var n=t.extend(!0,{LAY_INDEX:p},l),o=d.config.checkName;switch(r.type){case"checkbox":return'";case"radio":return n[o]&&(e=a),'';case"numbers":return p}return r.toolbar?i(t(r.toolbar).html()||"").render(n):u(r,m,n)}(),"
    "].join("");o.push(g),r.fixed&&"right"!==r.fixed&&y.push(g),"right"===r.fixed&&h.push(g)}}),v.push(''+o.join("")+""),m.push(''+y.join("")+""),g.push(''+h.join("")+""))}),c.layBody.scrollTop(0),c.layMain.find("."+p).remove(),c.layMain.find("tbody").html(v.join("")),c.layFixLeft.find("tbody").html(m.join("")),c.layFixRight.find("tbody").html(g.join("")),c.renderForm(),"number"==typeof e&&c.setThisRowChecked(e),c.syncCheckAll(),c.haveInit?c.scrollPatch():setTimeout(function(){c.scrollPatch()},50),c.haveInit=!0,l.close(c.tipsIndex),s.HAS_SET_COLS_PATCH||c.setColsPatch(),void(s.HAS_SET_COLS_PATCH=!0))};return d.cache[c.key]=y,c.layPage[0==o||0===y.length&&1==n?"addClass":"removeClass"](f),r?b():0===y.length?(c.renderForm(),c.errorView(s.text.none)):(c.layFixed.removeClass(f),b(),c.renderTotal(y,h),void(s.page&&(s.page=t.extend({elem:"layui-table-page"+s.index,count:o,limit:s.limit,limits:s.limits||[10,20,30,40,50,60,70,80,90],groups:3,layout:["prev","page","next","skip","count","limit"],prev:'',next:'',jump:function(e,t){t||(c.page=e.curr,s.limit=e.limit,c.pullData(e.curr))}},s.page),s.page.count=o,a.render(s.page))))},F.prototype.renderTotal=function(e,t){var i=this,a=i.config,l={};if(a.totalRow){layui.each(e,function(e,t){0!==t.length&&i.eachCols(function(e,i){var a=i.field||e,n=t[a];i.totalRow&&(l[a]=(l[a]||0)+(parseFloat(n)||0))})}),i.dataTotal={};var n=[];i.eachCols(function(e,o){var r=o.field||e,d=function(){var e=o.totalRowText||"",i=parseFloat(l[r]).toFixed(2),a={};return a[r]=i,i=u(o,i,a),t?t[o.field]||e:o.totalRow?i||e:e}(),c=['','
    '+d,"
    "].join("");o.field&&(i.dataTotal[r]=d),n.push(c)}),i.layTotal.find("tbody").html(""+n.join("")+"")}},F.prototype.getColElem=function(e,t){var i=this,a=i.config;return e.eq(0).find(".laytable-cell-"+(a.index+"-"+t)+":eq(0)")},F.prototype.renderForm=function(e){n.render(e,"LAY-table-"+this.index)},F.prototype.setThisRowChecked=function(e){var t=this,i=(t.config,"layui-table-click"),a=t.layBody.find('tr[data-index="'+e+'"]');a.addClass(i).siblings("tr").removeClass(i)},F.prototype.sort=function(e,i,a,l){var n,r,c=this,s={},u=c.config,h=u.elem.attr("lay-filter"),f=d.cache[c.key];"string"==typeof e&&c.layHeader.find("th").each(function(i,a){var l=t(this),o=l.data("field");if(o===e)return e=l,n=o,!1});try{var n=n||e.data("field"),p=e.data("key");if(c.sortKey&&!a&&n===c.sortKey.field&&i===c.sortKey.sort)return;var v=c.layHeader.find("th .laytable-cell-"+p).find(S);c.layHeader.find("th").find(S).removeAttr("lay-sort"),v.attr("lay-sort",i||null),c.layFixed.find("th")}catch(m){return o.error("Table modules: Did not match to field")}c.sortKey={field:n,sort:i},u.autoSort&&("asc"===i?r=layui.sort(f,n):"desc"===i?r=layui.sort(f,n,!0):(r=layui.sort(f,d.config.indexName),delete c.sortKey)),s[u.response.dataName]=r||f,c.renderData(s,c.page,c.count,!0),l&&layui.event.call(e,y,"sort("+h+")",{field:n,type:i})},F.prototype.loading=function(e){var i=this,a=i.config;a.loading&&(e?(i.layInit&&i.layInit.remove(),delete i.layInit,i.layBox.find(b).remove()):(i.layInit=t(['
    ','',"
    "].join("")),i.layBox.append(i.layInit)))},F.prototype.setCheckData=function(e,t){var i=this,a=i.config,l=d.cache[i.key];l[e]&&l[e].constructor!==Array&&(l[e][a.checkName]=t)},F.prototype.syncCheckAll=function(){var e=this,t=e.config,i=e.layHeader.find('input[name="layTableCheckbox"]'),a=function(i){return e.eachCols(function(e,a){"checkbox"===a.type&&(a[t.checkName]=i)}),i};i[0]&&(d.checkStatus(e.key).isAll?(i[0].checked||(i.prop("checked",!0),e.renderForm("checkbox")),a(!0)):(i[0].checked&&(i.prop("checked",!1),e.renderForm("checkbox")),a(!1)))},F.prototype.getCssRule=function(e,t){var i=this,a=i.elem.find("style")[0],l=a.sheet||a.styleSheet||{},n=l.cssRules||l.rules;layui.each(n,function(i,a){if(a.selectorText===".laytable-cell-"+e)return t(a),!0})},F.prototype.fullSize=function(){var e,t=this,i=t.config,a=i.height;t.fullHeightGap&&(a=H.height()-t.fullHeightGap,a<135&&(a=135),t.elem.css("height",a)),a&&(e=parseFloat(a)-(t.layHeader.outerHeight()||38),i.toolbar&&(e-=t.layTool.outerHeight()||50),i.totalRow&&(e-=t.layTotal.outerHeight()||40),i.page&&(e-=t.layPage.outerHeight()||41),t.layMain.css("height",e-2))},F.prototype.getScrollWidth=function(e){var t=0;return e?t=e.offsetWidth-e.clientWidth:(e=document.createElement("div"),e.style.width="100px",e.style.height="100px",e.style.overflowY="scroll",document.body.appendChild(e),t=e.offsetWidth-e.clientWidth,document.body.removeChild(e)),t},F.prototype.scrollPatch=function(){var e=this,i=e.layMain.children("table"),a=e.layMain.width()-e.layMain.prop("clientWidth"),l=e.layMain.height()-e.layMain.prop("clientHeight"),n=(e.getScrollWidth(e.layMain[0]),i.outerWidth()-e.layMain.width()),o=function(e){if(a&&l){if(e=e.eq(0),!e.find(".layui-table-patch")[0]){var i=t('
    ');i.find("div").css({width:a}),e.find("tr").append(i)}}else e.find(".layui-table-patch").remove()};o(e.layHeader),o(e.layTotal);var r=e.layMain.height(),d=r-l;e.layFixed.find(k).css("height",i.height()>=d?d:"auto"),e.layFixRight[n>0?"removeClass":"addClass"](f),e.layFixRight.css("right",a-1)},F.prototype.events=function(){var e,i=this,a=i.config,o=t("body"),c={},s=i.layHeader.find("th"),h=".layui-table-cell",p=a.elem.attr("lay-filter");i.layTool.on("click","*[lay-event]",function(e){var o=t(this),c=o.attr("lay-event"),s=function(e){var l=t(e.list),n=t('
      ');n.html(l),a.height&&n.css("max-height",a.height-(i.layTool.outerHeight()||50)),o.find(".layui-table-tool-panel")[0]||o.append(n),i.renderForm(),n.on("click",function(e){layui.stope(e)}),e.done&&e.done(n,l)};switch(layui.stope(e),j.trigger("table.tool.panel.remove"),l.close(i.tipsIndex),c){case"LAYTABLE_COLS":s({list:function(){var e=[];return i.eachCols(function(t,i){i.field&&"normal"==i.type&&e.push('
    • ')}),e.join("")}(),done:function(){n.on("checkbox(LAY_TABLE_TOOL_COLS)",function(e){var l=t(e.elem),n=this.checked,o=l.data("key"),r=l.data("parentkey");layui.each(a.cols,function(e,t){layui.each(t,function(t,l){if(e+"-"+t===o){var d=l.hide;l.hide=!n,i.elem.find('*[data-key="'+a.index+"-"+o+'"]')[n?"removeClass":"addClass"](f),d!=l.hide&&i.setParentCol(!n,r),i.resize()}})})})}});break;case"LAYTABLE_EXPORT":r.ie?l.tips("导出功能不支持 IE,请用 Chrome 等高级浏览器导出",this,{tips:3}):s({list:function(){return['
    • 导出到 Csv 文件
    • ','
    • 导出到 Excel 文件
    • '].join("")}(),done:function(e,l){l.on("click",function(){var e=t(this).data("type");d.exportFile.call(i,a.id,null,e)})}});break;case"LAYTABLE_PRINT":var u=window.open("打印窗口","_blank"),h=[""].join(""),v=t(i.layHeader.html());v.append(i.layMain.find("table").html()),v.append(i.layTotal.find("table").html()),v.find("th.layui-table-patch").remove(),v.find(".layui-table-col-special").remove(),u.document.write(h+v.prop("outerHTML")),u.document.close(),u.print(),u.close()}layui.event.call(this,y,"toolbar("+p+")",t.extend({event:c,config:a},{}))}),s.on("mousemove",function(e){var i=t(this),a=i.offset().left,l=e.clientX-a;i.data("unresize")||c.resizeStart||(c.allowResize=i.width()-l<=10,o.css("cursor",c.allowResize?"col-resize":""))}).on("mouseleave",function(){t(this);c.resizeStart||o.css("cursor","")}).on("mousedown",function(e){var l=t(this);if(c.allowResize){var n=l.data("key");e.preventDefault(),c.resizeStart=!0,c.offset=[e.clientX,e.clientY],i.getCssRule(n,function(e){var t=e.style.width||l.outerWidth();c.rule=e,c.ruleWidth=parseFloat(t),c.minWidth=l.data("minwidth")||a.cellMinWidth})}}),j.on("mousemove",function(t){if(c.resizeStart){if(t.preventDefault(),c.rule){var a=c.ruleWidth+t.clientX-c.offset[0];a');return n[0].value=i.data("content")||l.text(),i.find("."+R)[0]||i.append(n),n.focus(),void layui.stope(e)}}).on("mouseenter","td",function(){b.call(this)}).on("mouseleave","td",function(){b.call(this,"hide")});var g="layui-table-grid-down",b=function(e){var i=t(this),a=i.children(h);if(!i.data("off"))if(e)i.find(".layui-table-grid-down").remove();else if(a.prop("scrollWidth")>a.outerWidth()){if(a.find("."+g)[0])return;i.append('
      ')}};i.layBody.on("click","."+g,function(e){var n=t(this),o=n.parent(),d=o.children(h);i.tipsIndex=l.tips(['
      ',d.html(),"
      ",''].join(""),d[0],{tips:[3,""],time:-1,anim:-1,maxWidth:r.ios||r.android?300:i.elem.width()/2,isOutAnim:!1,skin:"layui-table-tips",success:function(e,t){e.find(".layui-table-tips-c").on("click",function(){l.close(t)})}}),layui.stope(e)}),i.layBody.on("click","*[lay-event]",function(){var e=t(this),a=e.parents("tr").eq(0).data("index");layui.event.call(this,y,"tool("+p+")",v.call(this,{event:e.attr("lay-event")})),i.setThisRowChecked(a)}),i.layMain.on("scroll",function(){var e=t(this),a=e.scrollLeft(),n=e.scrollTop();i.layHeader.scrollLeft(a),i.layTotal.scrollLeft(a),i.layFixed.find(k).scrollTop(n),l.close(i.tipsIndex)}),H.on("resize",function(){i.resize()})},function(){j.on("click",function(){j.trigger("table.remove.tool.panel")}),j.on("table.remove.tool.panel",function(){t(".layui-table-tool-panel").remove()})}(),d.init=function(e,i){i=i||{};var a=this,l=t(e?'table[lay-filter="'+e+'"]':h+"[lay-data]"),n="Table element property lay-data configuration item has a syntax error: ";return l.each(function(){var a=t(this),l=a.attr("lay-data");try{l=new Function("return "+l)()}catch(r){o.error(n+l)}var c=[],s=t.extend({elem:this,cols:[],data:[],skin:a.attr("lay-skin"),size:a.attr("lay-size"),even:"string"==typeof a.attr("lay-even")},d.config,i,l);e&&a.hide(),a.find("thead>tr").each(function(e){s.cols[e]=[],t(this).children().each(function(i){var a=t(this),l=a.attr("lay-data");try{l=new Function("return "+l)()}catch(r){return o.error(n+l)}var d=t.extend({title:a.text(),colspan:a.attr("colspan")||0,rowspan:a.attr("rowspan")||0},l);d.colspan<2&&c.push(d),s.cols[e].push(d)})}),a.find("tbody>tr").each(function(e){var i=t(this),a={};i.children("td").each(function(e,i){var l=t(this),n=l.data("field");if(n)return a[n]=l.html()}),layui.each(c,function(e,t){var l=i.children("td").eq(e);a[t.field]=l.html()}),s.data[e]=a}),d.render(s)}),a},c.that={},c.config={},d.eachCols=function(e,i,a){var l=c.config[e]||{},n=[],o=0;a=t.extend(!0,[],a||l.cols),layui.each(a,function(e,t){layui.each(t,function(t,i){if(i.colGroup){var l=0;o++,i.CHILD_COLS=[],layui.each(a[e+1],function(e,t){t.PARENT_COL_INDEX||l>1&&l==i.colspan||(t.PARENT_COL_INDEX=o,i.CHILD_COLS.push(t),l+=parseInt(t.colspan>1?t.colspan:1))})}i.PARENT_COL_INDEX||n.push(i)})});var r=function(e){layui.each(e||n,function(e,t){return t.CHILD_COLS?r(t.CHILD_COLS):void("function"==typeof i&&i(e,t))})};r()},d.checkStatus=function(e){var t=0,i=0,a=[],l=d.cache[e]||[];return layui.each(l,function(e,l){return l.constructor===Array?void i++:void(l[d.config.checkName]&&(t++,a.push(d.clearCacheKey(l))))}),{data:a,isAll:!!l.length&&t===l.length-i}},d.exportFile=function(e,t,i){var a=this;t=t||d.clearCacheKey(d.cache[e]),i=i||"csv";var l=c.config[e]||{},n={csv:"text/csv",xls:"application/vnd.ms-excel"}[i],s=document.createElement("a");return r.ie?o.error("IE_NOT_SUPPORT_EXPORTS"):(s.href="data:"+n+";charset=utf-8,\ufeff"+encodeURIComponent(function(){var i=[],l=[],n=[];return layui.each(t,function(t,a){var n=[];"object"==typeof e?(layui.each(e,function(e,a){0==t&&i.push(a||"")}),layui.each(d.clearCacheKey(a),function(e,t){n.push('"'+(t||"")+'"')})):d.eachCols(e,function(e,l){if(l.field&&"normal"==l.type&&!l.hide){var o=a[l.field];void 0!==o&&null!==o||(o=""),0==t&&i.push(l.title||""),n.push('"'+u(l,o,a,"text")+'"')}}),l.push(n.join(","))}),layui.each(a.dataTotal,function(e,t){n.push(t)}),i.join(",")+"\r\n"+l.join("\r\n")+"\r\n"+n.join(",")}()),s.download=(l.title||"table_"+(l.index||""))+"."+i,document.body.appendChild(s),s.click(),void document.body.removeChild(s))},d.resize=function(e){if(e){var t=s(e);if(!t)return;c.that[e].resize()}else layui.each(c.that,function(){this.resize()})},d.reload=function(e,t){var i=s(e);if(i){var a=c.that[e];return a.reload(t),c.call(a)}},d.render=function(e){var t=new F(e);return c.call(t)},d.clearCacheKey=function(e){return e=t.extend({},e),delete e[d.config.checkName],delete e[d.config.indexName],e},d.init(),e(y,d)}); ================================================ FILE: public/assets/luna/layui/lay/modules/transfer.js ================================================ /** layui-v2.5.6 MIT License By https://www.layui.com */ ;layui.define(["laytpl","form"],function(e){"use strict";var a=layui.$,t=layui.laytpl,n=layui.form,i="transfer",l={config:{},index:layui[i]?layui[i].index+1e4:0,set:function(e){var t=this;return t.config=a.extend({},t.config,e),t},on:function(e,a){return layui.onevent.call(this,i,e,a)}},r=function(){var e=this,a=e.config,t=a.id||e.index;return r.that[t]=e,r.config[t]=a,{config:a,reload:function(a){e.reload.call(e,a)},getData:function(){return e.getData.call(e)}}},c="layui-hide",o="layui-btn-disabled",d="layui-none",s="layui-transfer-box",u="layui-transfer-header",h="layui-transfer-search",f="layui-transfer-active",y="layui-transfer-data",p=function(e){return e=e||{},['
      ','
      ','","
      ","{{# if(d.data.showSearch){ }}",'","{{# } }}",'
        ',"
        "].join("")},v=['
        ',p({index:0,checkAllName:"layTransferLeftCheckAll"}),'
        ','",'","
        ",p({index:1,checkAllName:"layTransferRightCheckAll"}),"
        "].join(""),x=function(e){var t=this;t.index=++l.index,t.config=a.extend({},t.config,l.config,e),t.render()};x.prototype.config={title:["列表一","列表二"],width:200,height:360,data:[],value:[],showSearch:!1,id:"",text:{none:"无数据",searchNone:"无匹配数据"}},x.prototype.reload=function(e){var t=this;layui.each(e,function(e,a){a.constructor===Array&&delete t.config[e]}),t.config=a.extend(!0,{},t.config,e),t.render()},x.prototype.render=function(){var e=this,n=e.config,i=e.elem=a(t(v).render({data:n,index:e.index})),l=n.elem=a(n.elem);l[0]&&(n.data=n.data||[],n.value=n.value||[],e.key=n.id||e.index,l.html(e.elem),e.layBox=e.elem.find("."+s),e.layHeader=e.elem.find("."+u),e.laySearch=e.elem.find("."+h),e.layData=i.find("."+y),e.layBtn=i.find("."+f+" .layui-btn"),e.layBox.css({width:n.width,height:n.height}),e.layData.css({height:function(){return n.height-e.layHeader.outerHeight()-e.laySearch.outerHeight()-2}()}),e.renderData(),e.events())},x.prototype.renderData=function(){var e=this,a=(e.config,[{checkName:"layTransferLeftCheck",views:[]},{checkName:"layTransferRightCheck",views:[]}]);e.parseData(function(e){var t=e.selected?1:0,n=["
      • ",'',"
      • "].join("");a[t].views.push(n),delete e.selected}),e.layData.eq(0).html(a[0].views.join("")),e.layData.eq(1).html(a[1].views.join("")),e.renderCheckBtn()},x.prototype.renderForm=function(e){n.render(e,"LAY-transfer-"+this.index)},x.prototype.renderCheckBtn=function(e){var t=this,n=t.config;e=e||{},t.layBox.each(function(i){var l=a(this),r=l.find("."+y),d=l.find("."+u).find('input[type="checkbox"]'),s=r.find('input[type="checkbox"]'),h=0,f=!1;if(s.each(function(){var e=a(this).data("hide");(this.checked||this.disabled||e)&&h++,this.checked&&!e&&(f=!0)}),d.prop("checked",f&&h===s.length),t.layBtn.eq(i)[f?"removeClass":"addClass"](o),!e.stopNone){var p=r.children("li:not(."+c+")").length;t.noneView(r,p?"":n.text.none)}}),t.renderForm("checkbox")},x.prototype.noneView=function(e,t){var n=a('

        '+(t||"")+"

        ");e.find("."+d)[0]&&e.find("."+d).remove(),t.replace(/\s/g,"")&&e.append(n)},x.prototype.setValue=function(){var e=this,t=e.config,n=[];return e.layBox.eq(1).find("."+y+' input[type="checkbox"]').each(function(){var e=a(this).data("hide");e||n.push(this.value)}),t.value=n,e},x.prototype.parseData=function(e){var t=this,n=t.config,i=[];return layui.each(n.data,function(t,l){l=("function"==typeof n.parseData?n.parseData(l):l)||l,i.push(l=a.extend({},l)),layui.each(n.value,function(e,a){a==l.value&&(l.selected=!0)}),e&&e(l)}),n.data=i,t},x.prototype.getData=function(e){var a=this,t=a.config,n=[];return a.setValue(),layui.each(e||t.value,function(e,a){layui.each(t.data,function(e,t){delete t.selected,a==t.value&&n.push(t)})}),n},x.prototype.events=function(){var e=this,t=e.config;e.elem.on("click",'input[lay-filter="layTransferCheckbox"]+',function(){var t=a(this).prev(),n=t[0].checked,i=t.parents("."+s).eq(0).find("."+y);t[0].disabled||("all"===t.attr("lay-type")&&i.find('input[type="checkbox"]').each(function(){this.disabled||(this.checked=n)}),e.renderCheckBtn({stopNone:!0}))}),e.layBtn.on("click",function(){var n=a(this),i=n.data("index"),l=e.layBox.eq(i),r=[];if(!n.hasClass(o)){e.layBox.eq(i).each(function(t){var n=a(this),i=n.find("."+y);i.children("li").each(function(){var t=a(this),n=t.find('input[type="checkbox"]'),i=n.data("hide");n[0].checked&&!i&&(n[0].checked=!1,l.siblings("."+s).find("."+y).append(t.clone()),t.remove(),r.push(n[0].value)),e.setValue()})}),e.renderCheckBtn();var c=l.siblings("."+s).find("."+h+" input");""===c.val()||c.trigger("keyup"),t.onchange&&t.onchange(e.getData(r),i)}}),e.laySearch.find("input").on("keyup",function(){var n=this.value,i=a(this).parents("."+h).eq(0).siblings("."+y),l=i.children("li");l.each(function(){var e=a(this),t=e.find('input[type="checkbox"]'),i=t[0].title.indexOf(n)!==-1;e[i?"removeClass":"addClass"](c),t.data("hide",!i)}),e.renderCheckBtn();var r=l.length===i.children("li."+c).length;e.noneView(i,r?t.text.searchNone:"")})},r.that={},r.config={},l.reload=function(e,a){var t=r.that[e];return t.reload(a),r.call(t)},l.getData=function(e){var a=r.that[e];return a.getData()},l.render=function(e){var a=new x(e);return r.call(a)},e(i,l)}); ================================================ FILE: public/assets/luna/layui/lay/modules/tree.js ================================================ /** layui-v2.5.6 MIT License By https://www.layui.com */ ;layui.define("form",function(e){"use strict";var i=layui.$,a=layui.form,n=layui.layer,t="tree",r={config:{},index:layui[t]?layui[t].index+1e4:0,set:function(e){var a=this;return a.config=i.extend({},a.config,e),a},on:function(e,i){return layui.onevent.call(this,t,e,i)}},l=function(){var e=this,i=e.config,a=i.id||e.index;return l.that[a]=e,l.config[a]=i,{config:i,reload:function(i){e.reload.call(e,i)},getChecked:function(){return e.getChecked.call(e)},setChecked:function(i){return e.setChecked.call(e,i)}}},c="layui-hide",d="layui-disabled",s="layui-tree-set",o="layui-tree-iconClick",h="layui-icon-addition",u="layui-icon-subtraction",p="layui-tree-entry",f="layui-tree-main",y="layui-tree-txt",v="layui-tree-pack",C="layui-tree-spread",k="layui-tree-setLineShort",m="layui-tree-showLine",x="layui-tree-lineExtend",b=function(e){var a=this;a.index=++r.index,a.config=i.extend({},a.config,r.config,e),a.render()};b.prototype.config={data:[],showCheckbox:!1,showLine:!0,accordion:!1,onlyIconControl:!1,isJump:!1,edit:!1,text:{defaultNodeName:"未命名",none:"无数据"}},b.prototype.reload=function(e){var a=this;layui.each(e,function(e,i){i.constructor===Array&&delete a.config[e]}),a.config=i.extend(!0,{},a.config,e),a.render()},b.prototype.render=function(){var e=this,a=e.config;e.checkids=[];var n=i('
        ');e.tree(n);var t=a.elem=i(a.elem);if(t[0]){if(e.key=a.id||e.index,e.elem=n,e.elemNone=i('
        '+a.text.none+"
        "),t.html(e.elem),0==e.elem.find(".layui-tree-set").length)return e.elem.append(e.elemNone);a.showCheckbox&&e.renderForm("checkbox"),e.elem.find(".layui-tree-set").each(function(){var e=i(this);e.parent(".layui-tree-pack")[0]||e.addClass("layui-tree-setHide"),!e.next()[0]&&e.parents(".layui-tree-pack").eq(1).hasClass("layui-tree-lineExtend")&&e.addClass(k),e.next()[0]||e.parents(".layui-tree-set").eq(0).next()[0]||e.addClass(k)}),e.events()}},b.prototype.renderForm=function(e){a.render(e,"LAY-tree-"+this.index)},b.prototype.tree=function(e,a){var n=this,t=n.config,r=a||t.data;layui.each(r,function(a,r){var l=r.children&&r.children.length>0,o=i('
        '),h=i(['
        ','
        ','
        ',function(){return t.showLine?l?'':'':''}(),function(){return t.showCheckbox?'':""}(),function(){return t.isJump&&r.href?''+(r.title||r.label||t.text.defaultNodeName)+"":''+(r.title||r.label||t.text.defaultNodeName)+""}(),"
        ",function(){if(!t.edit)return"";var e={add:'',update:'',del:''},i=['
        '];return t.edit===!0&&(t.edit=["update","del"]),"object"==typeof t.edit?(layui.each(t.edit,function(a,n){i.push(e[n]||"")}),i.join("")+"
        "):void 0}(),"
        "].join(""));l&&(h.append(o),n.tree(o,r.children)),e.append(h),h.prev("."+s)[0]&&h.prev().children(".layui-tree-pack").addClass("layui-tree-showLine"),l||h.parent(".layui-tree-pack").addClass("layui-tree-lineExtend"),n.spread(h,r),t.showCheckbox&&(r.checked&&n.checkids.push(r.id),n.checkClick(h,r)),t.edit&&n.operate(h,r)})},b.prototype.spread=function(e,a){var n=this,t=n.config,r=e.children("."+p),l=r.children("."+f),c=r.find("."+o),k=r.find("."+y),m=t.onlyIconControl?c:l,x="";m.on("click",function(i){var a=e.children("."+v),n=m.children(".layui-icon")[0]?m.children(".layui-icon"):m.find(".layui-tree-icon").children(".layui-icon");if(a[0]){if(e.hasClass(C))e.removeClass(C),a.slideUp(200),n.removeClass(u).addClass(h);else if(e.addClass(C),a.slideDown(200),n.addClass(u).removeClass(h),t.accordion){var r=e.siblings("."+s);r.removeClass(C),r.children("."+v).slideUp(200),r.find(".layui-tree-icon").children(".layui-icon").removeClass(u).addClass(h)}}else x="normal"}),k.on("click",function(){var n=i(this);n.hasClass(d)||(x=e.hasClass(C)?t.onlyIconControl?"open":"close":t.onlyIconControl?"close":"open",t.click&&t.click({elem:e,state:x,data:a}))})},b.prototype.setCheckbox=function(e,i,a){var n=this,t=(n.config,a.prop("checked"));if(!a.prop("disabled")){if("object"==typeof i.children||e.find("."+v)[0]){var r=e.find("."+v).find('input[same="layuiTreeCheck"]');r.each(function(){this.disabled||(this.checked=t)})}var l=function(e){if(e.parents("."+s)[0]){var i,a=e.parent("."+v),n=a.parent(),r=a.prev().find('input[same="layuiTreeCheck"]');t?r.prop("checked",t):(a.find('input[same="layuiTreeCheck"]').each(function(){this.checked&&(i=!0)}),i||r.prop("checked",!1)),l(n)}};l(e),n.renderForm("checkbox")}},b.prototype.checkClick=function(e,a){var n=this,t=n.config,r=e.children("."+p),l=r.children("."+f);l.on("click",'input[same="layuiTreeCheck"]+',function(r){layui.stope(r);var l=i(this).prev(),c=l.prop("checked");l.prop("disabled")||(n.setCheckbox(e,a,l),t.oncheck&&t.oncheck({elem:e,checked:c,data:a}))})},b.prototype.operate=function(e,a){var t=this,r=t.config,l=e.children("."+p),d=l.children("."+f);l.children(".layui-tree-btnGroup").on("click",".layui-icon",function(l){layui.stope(l);var f=i(this).data("type"),b=e.children("."+v),g={data:a,type:f,elem:e};if("add"==f){b[0]||(r.showLine?(d.find("."+o).addClass("layui-tree-icon"),d.find("."+o).children(".layui-icon").addClass(h).removeClass("layui-icon-file")):d.find(".layui-tree-iconArrow").removeClass(c),e.append('
        '));var w=r.operate&&r.operate(g),N={};if(N.title=r.text.defaultNodeName,N.id=w,t.tree(e.children("."+v),[N]),r.showLine)if(b[0])b.hasClass(x)||b.addClass(x),e.find("."+v).each(function(){i(this).children("."+s).last().addClass(k)}),b.children("."+s).last().prev().hasClass(k)?b.children("."+s).last().prev().removeClass(k):b.children("."+s).last().removeClass(k),!e.parent("."+v)[0]&&e.next()[0]&&b.children("."+s).last().removeClass(k);else{var T=e.siblings("."+s),L=1,A=e.parent("."+v);layui.each(T,function(e,a){i(a).children("."+v)[0]||(L=0)}),1==L?(T.children("."+v).addClass(m),T.children("."+v).children("."+s).removeClass(k),e.children("."+v).addClass(m),A.removeClass(x),A.children("."+s).last().children("."+v).children("."+s).last().addClass(k)):e.children("."+v).children("."+s).addClass(k)}if(!r.showCheckbox)return;if(d.find('input[same="layuiTreeCheck"]')[0].checked){var I=e.children("."+v).children("."+s).last();I.find('input[same="layuiTreeCheck"]')[0].checked=!0}t.renderForm("checkbox")}else if("update"==f){var F=d.children("."+y).html();d.children("."+y).html(""),d.append(''),d.children(".layui-tree-editInput").val(F).focus();var j=function(e){var i=e.val().trim();i=i?i:r.text.defaultNodeName,e.remove(),d.children("."+y).html(i),g.data.title=i,r.operate&&r.operate(g)};d.children(".layui-tree-editInput").blur(function(){j(i(this))}),d.children(".layui-tree-editInput").on("keydown",function(e){13===e.keyCode&&(e.preventDefault(),j(i(this)))})}else n.confirm('确认删除该节点 "'+(a.title||"")+'" 吗?',function(a){if(r.operate&&r.operate(g),g.status="remove",n.close(a),!e.prev("."+s)[0]&&!e.next("."+s)[0]&&!e.parent("."+v)[0])return e.remove(),void t.elem.append(t.elemNone);if(e.siblings("."+s).children("."+p)[0]){if(r.showCheckbox){var l=function(e){if(e.parents("."+s)[0]){var a=e.siblings("."+s).children("."+p),n=e.parent("."+v).prev(),r=n.find('input[same="layuiTreeCheck"]')[0],c=1,d=0;0==r.checked&&(a.each(function(e,a){var n=i(a).find('input[same="layuiTreeCheck"]')[0];0!=n.checked||n.disabled||(c=0),n.disabled||(d=1)}),1==c&&1==d&&(r.checked=!0,t.renderForm("checkbox"),l(n.parent("."+s))))}};l(e)}if(r.showLine){var d=e.siblings("."+s),h=1,f=e.parent("."+v);layui.each(d,function(e,a){i(a).children("."+v)[0]||(h=0)}),1==h?(b[0]||(f.removeClass(x),d.children("."+v).addClass(m),d.children("."+v).children("."+s).removeClass(k)),e.next()[0]?f.children("."+s).last().children("."+v).children("."+s).last().addClass(k):e.prev().children("."+v).children("."+s).last().addClass(k),e.next()[0]||e.parents("."+s)[1]||e.parents("."+s).eq(0).next()[0]||e.prev("."+s).addClass(k)):!e.next()[0]&&e.hasClass(k)&&e.prev().addClass(k)}}else{var y=e.parent("."+v).prev();if(r.showLine){y.find("."+o).removeClass("layui-tree-icon"),y.find("."+o).children(".layui-icon").removeClass(u).addClass("layui-icon-file");var w=y.parents("."+v).eq(0);w.addClass(x),w.children("."+s).each(function(){i(this).children("."+v).children("."+s).last().addClass(k)})}else y.find(".layui-tree-iconArrow").addClass(c);e.parents("."+s).eq(0).removeClass(C),e.parent("."+v).remove()}e.remove()})})},b.prototype.events=function(){var e=this,a=e.config;e.elem.find(".layui-tree-checkedFirst");e.setChecked(e.checkids),e.elem.find(".layui-tree-search").on("keyup",function(){var n=i(this),t=n.val(),r=n.nextAll(),l=[];r.find("."+y).each(function(){var e=i(this).parents("."+p);if(i(this).html().indexOf(t)!=-1){l.push(i(this).parent());var a=function(e){e.addClass("layui-tree-searchShow"),e.parent("."+v)[0]&&a(e.parent("."+v).parent("."+s))};a(e.parent("."+s))}}),r.find("."+p).each(function(){var e=i(this).parent("."+s);e.hasClass("layui-tree-searchShow")||e.addClass(c)}),0==r.find(".layui-tree-searchShow").length&&e.elem.append(e.elemNone),a.onsearch&&a.onsearch({elem:l})}),e.elem.find(".layui-tree-search").on("keydown",function(){i(this).nextAll().find("."+p).each(function(){var e=i(this).parent("."+s);e.removeClass("layui-tree-searchShow "+c)}),i(".layui-tree-emptyText")[0]&&i(".layui-tree-emptyText").remove()})},b.prototype.getChecked=function(){var e=this,a=e.config,n=[],t=[];e.elem.find(".layui-form-checked").each(function(){n.push(i(this).prev()[0].value)});var r=function(e,a){layui.each(e,function(e,t){layui.each(n,function(e,n){if(t.id==n){var l=i.extend({},t);return delete l.children,a.push(l),t.children&&(l.children=[],r(t.children,l.children)),!0}})})};return r(i.extend({},a.data),t),t},b.prototype.setChecked=function(e){var a=this;a.config;a.elem.find("."+s).each(function(a,n){var t=i(this).data("id"),r=i(n).children("."+p).find('input[same="layuiTreeCheck"]'),l=r.next();if("number"==typeof e){if(t==e)return r[0].checked||l.click(),!1}else"object"==typeof e&&layui.each(e,function(e,i){if(i==t&&!r[0].checked)return l.click(),!0})})},l.that={},l.config={},r.reload=function(e,i){var a=l.that[e];return a.reload(i),l.call(a)},r.getChecked=function(e){var i=l.that[e];return i.getChecked()},r.setChecked=function(e,i){var a=l.that[e];return a.setChecked(i)},r.render=function(e){var i=new b(e);return l.call(i)},e(t,r)}); ================================================ FILE: public/assets/luna/layui/lay/modules/upload.js ================================================ /** layui-v2.5.6 MIT License By https://www.layui.com */ ;layui.define("layer",function(e){"use strict";var t=layui.$,i=layui.layer,n=layui.hint(),o=layui.device(),a={config:{},set:function(e){var i=this;return i.config=t.extend({},i.config,e),i},on:function(e,t){return layui.onevent.call(this,r,e,t)}},l=function(){var e=this;return{upload:function(t){e.upload.call(e,t)},reload:function(t){e.reload.call(e,t)},config:e.config}},r="upload",u="layui-upload-file",c="layui-upload-form",f="layui-upload-iframe",s="layui-upload-choose",p=function(e){var i=this;i.config=t.extend({},i.config,a.config,e),i.render()};p.prototype.config={accept:"images",exts:"",auto:!0,bindAction:"",url:"",field:"file",acceptMime:"",method:"post",data:{},drag:!0,size:0,number:0,multiple:!1},p.prototype.render=function(e){var i=this,e=i.config;e.elem=t(e.elem),e.bindAction=t(e.bindAction),i.file(),i.events()},p.prototype.file=function(){var e=this,i=e.config,n=e.elemFile=t(['"].join("")),a=i.elem.next();(a.hasClass(u)||a.hasClass(c))&&a.remove(),o.ie&&o.ie<10&&i.elem.wrap('
        '),e.isFile()?(e.elemFile=i.elem,i.field=i.elem[0].name):i.elem.after(n),o.ie&&o.ie<10&&e.initIE()},p.prototype.initIE=function(){var e=this,i=e.config,n=t(''),o=t(['
        ',"
        "].join(""));t("#"+f)[0]||t("body").append(n),i.elem.next().hasClass(c)||(e.elemFile.wrap(o),i.elem.next("."+c).append(function(){var e=[];return layui.each(i.data,function(t,i){i="function"==typeof i?i():i,e.push('')}),e.join("")}()))},p.prototype.msg=function(e){return i.msg(e,{icon:2,shift:6})},p.prototype.isFile=function(){var e=this.config.elem[0];if(e)return"input"===e.tagName.toLocaleLowerCase()&&"file"===e.type},p.prototype.preview=function(e){var t=this;window.FileReader&&layui.each(t.chooseFiles,function(t,i){var n=new FileReader;n.readAsDataURL(i),n.onload=function(){e&&e(t,i,this.result)}})},p.prototype.upload=function(e,i){var n,a=this,l=a.config,r=a.elemFile[0],u=function(){var i=0,n=0,o=e||a.files||a.chooseFiles||r.files,u=function(){l.multiple&&i+n===a.fileLength&&"function"==typeof l.allDone&&l.allDone({total:a.fileLength,successful:i,aborted:n})};layui.each(o,function(e,o){var r=new FormData;r.append(l.field,o),layui.each(l.data,function(e,t){t="function"==typeof t?t():t,r.append(e,t)});var c={url:l.url,type:"post",data:r,contentType:!1,processData:!1,dataType:"json",headers:l.headers||{},success:function(t){i++,d(e,t),u()},error:function(){n++,a.msg("请求上传接口出现异常"),m(e),u()}};"function"==typeof l.progress&&(c.xhr=function(){var e=t.ajaxSettings.xhr();return e.upload.addEventListener("progress",function(e){if(e.lengthComputable){var t=Math.floor(e.loaded/e.total*100);l.progress(t,l.item[0],e)}}),e}),t.ajax(c)})},c=function(){var e=t("#"+f);a.elemFile.parent().submit(),clearInterval(p.timer),p.timer=setInterval(function(){var t,i=e.contents().find("body");try{t=i.text()}catch(n){a.msg("获取上传后的响应信息出现异常"),clearInterval(p.timer),m()}t&&(clearInterval(p.timer),i.html(""),d(0,t))},30)},d=function(e,t){if(a.elemFile.next("."+s).remove(),r.value="","object"!=typeof t)try{t=JSON.parse(t)}catch(i){return t={},a.msg("请对上传接口返回有效JSON")}"function"==typeof l.done&&l.done(t,e||0,function(e){a.upload(e)})},m=function(e){l.auto&&(r.value=""),"function"==typeof l.error&&l.error(e||0,function(e){a.upload(e)})},h=l.exts,v=function(){var t=[];return layui.each(e||a.chooseFiles,function(e,i){t.push(i.name)}),t}(),g={preview:function(e){a.preview(e)},upload:function(e,t){var i={};i[e]=t,a.upload(i)},pushFile:function(){return a.files=a.files||{},layui.each(a.chooseFiles,function(e,t){a.files[e]=t}),a.files},resetFile:function(e,t,i){var n=new File([t],i);a.files=a.files||{},a.files[e]=n}},y=function(){if("choose"!==i&&!l.auto||(l.choose&&l.choose(g),"choose"!==i))return l.before&&l.before(g),o.ie?o.ie>9?u():c():void u()};if(v=0===v.length?r.value.match(/[^\/\\]+\..+/g)||[]||"":v,0!==v.length){switch(l.accept){case"file":if(h&&!RegExp("\\w\\.("+h+")$","i").test(escape(v)))return a.msg("选择的文件中包含不支持的格式"),r.value="";break;case"video":if(!RegExp("\\w\\.("+(h||"avi|mp4|wma|rmvb|rm|flash|3gp|flv")+")$","i").test(escape(v)))return a.msg("选择的视频中包含不支持的格式"),r.value="";break;case"audio":if(!RegExp("\\w\\.("+(h||"mp3|wav|mid")+")$","i").test(escape(v)))return a.msg("选择的音频中包含不支持的格式"),r.value="";break;default:if(layui.each(v,function(e,t){RegExp("\\w\\.("+(h||"jpg|png|gif|bmp|jpeg$")+")","i").test(escape(t))||(n=!0)}),n)return a.msg("选择的图片中包含不支持的格式"),r.value=""}if(a.fileLength=function(){var t=0,i=e||a.files||a.chooseFiles||r.files;return layui.each(i,function(){t++}),t}(),l.number&&a.fileLength>l.number)return a.msg("同时最多只能上传的数量为:"+l.number);if(l.size>0&&!(o.ie&&o.ie<10)){var F;if(layui.each(a.chooseFiles,function(e,t){if(t.size>1024*l.size){var i=l.size/1024;i=i>=1?i.toFixed(2)+"MB":l.size+"KB",r.value="",F=i}}),F)return a.msg("文件不能超过"+F)}y()}},p.prototype.reload=function(e){e=e||{},delete e.elem,delete e.bindAction;var i=this,e=i.config=t.extend({},i.config,a.config,e),n=e.elem.next();n.attr({name:e.name,accept:e.acceptMime,multiple:e.multiple})},p.prototype.events=function(){var e=this,i=e.config,a=function(t){e.chooseFiles={},layui.each(t,function(t,i){var n=(new Date).getTime();e.chooseFiles[n+"-"+t]=i})},l=function(t,n){var o=e.elemFile,a=t.length>1?t.length+"个文件":(t[0]||{}).name||o[0].value.match(/[^\/\\]+\..+/g)||[]||"";o.next().hasClass(s)&&o.next().remove(),e.upload(null,"choose"),e.isFile()||i.choose||o.after(''+a+"")};i.elem.off("upload.start").on("upload.start",function(){var o=t(this),a=o.attr("lay-data");if(a)try{a=new Function("return "+a)(),e.config=t.extend({},i,a)}catch(l){n.error("Upload element property lay-data configuration item has a syntax error: "+a)}e.config.item=o,e.elemFile[0].click()}),o.ie&&o.ie<10||i.elem.off("upload.over").on("upload.over",function(){var e=t(this);e.attr("lay-over","")}).off("upload.leave").on("upload.leave",function(){var e=t(this);e.removeAttr("lay-over")}).off("upload.drop").on("upload.drop",function(n,o){var r=t(this),u=o.originalEvent.dataTransfer.files||[];r.removeAttr("lay-over"),a(u),i.auto?e.upload(u):l(u)}),e.elemFile.off("upload.change").on("upload.change",function(){var t=this.files||[];a(t),i.auto?e.upload():l(t)}),i.bindAction.off("upload.action").on("upload.action",function(){e.upload()}),i.elem.data("haveEvents")||(e.elemFile.on("change",function(){t(this).trigger("upload.change")}),i.elem.on("click",function(){e.isFile()||t(this).trigger("upload.start")}),i.drag&&i.elem.on("dragover",function(e){e.preventDefault(),t(this).trigger("upload.over")}).on("dragleave",function(e){t(this).trigger("upload.leave")}).on("drop",function(e){e.preventDefault(),t(this).trigger("upload.drop",e)}),i.bindAction.on("click",function(){t(this).trigger("upload.action")}),i.elem.data("haveEvents",!0))},a.render=function(e){var t=new p(e);return l.call(t)},e(r,a)}); ================================================ FILE: public/assets/luna/layui/lay/modules/util.js ================================================ /** layui-v2.5.6 MIT License By https://www.layui.com */ ;layui.define("jquery",function(e){"use strict";var t=layui.$,i={fixbar:function(e){var i,n,a="layui-fixbar",o="layui-fixbar-top",r=t(document),l=t("body");e=t.extend({showHeight:200},e),e.bar1=e.bar1===!0?"":e.bar1,e.bar2=e.bar2===!0?"":e.bar2,e.bgcolor=e.bgcolor?"background-color:"+e.bgcolor:"";var c=[e.bar1,e.bar2,""],u=t(['
          ',e.bar1?'
        • '+c[0]+"
        • ":"",e.bar2?'
        • '+c[1]+"
        • ":"",'
        • '+c[2]+"
        • ","
        "].join("")),g=u.find("."+o),s=function(){var t=r.scrollTop();t>=e.showHeight?i||(g.show(),i=1):i&&(g.hide(),i=0)};t("."+a)[0]||("object"==typeof e.css&&u.css(e.css),l.append(u),s(),u.find("li").on("click",function(){var i=t(this),n=i.attr("lay-type");"top"===n&&t("html,body").animate({scrollTop:0},200),e.click&&e.click.call(this,n)}),r.on("scroll",function(){clearTimeout(n),n=setTimeout(function(){s()},100)}))},countdown:function(e,t,i){var n=this,a="function"==typeof t,o=new Date(e).getTime(),r=new Date(!t||a?(new Date).getTime():t).getTime(),l=o-r,c=[Math.floor(l/864e5),Math.floor(l/36e5)%24,Math.floor(l/6e4)%60,Math.floor(l/1e3)%60];a&&(i=t);var u=setTimeout(function(){n.countdown(e,r+1e3,i)},1e3);return i&&i(l>0?c:[0,0,0,0],t,u),l<=0&&clearTimeout(u),u},timeAgo:function(e,t){var i=this,n=[[],[]],a=(new Date).getTime()-new Date(e).getTime();return a>26784e5?(a=new Date(e),n[0][0]=i.digit(a.getFullYear(),4),n[0][1]=i.digit(a.getMonth()+1),n[0][2]=i.digit(a.getDate()),t||(n[1][0]=i.digit(a.getHours()),n[1][1]=i.digit(a.getMinutes()),n[1][2]=i.digit(a.getSeconds())),n[0].join("-")+" "+n[1].join(":")):a>=864e5?(a/1e3/60/60/24|0)+"天前":a>=36e5?(a/1e3/60/60|0)+"小时前":a>=18e4?(a/1e3/60|0)+"分钟前":a<0?"未来":"刚刚"},digit:function(e,t){var i="";e=String(e),t=t||2;for(var n=e.length;n/g,">").replace(/'/g,"'").replace(/"/g,""")},event:function(e,n,a){var o=t("body");return a=a||"click",n=i.event[e]=t.extend(!0,i.event[e],n)||{},i.event.UTIL_EVENT_CALLBACK=i.event.UTIL_EVENT_CALLBACK||{},o.off(a,"*["+e+"]",i.event.UTIL_EVENT_CALLBACK[e]),i.event.UTIL_EVENT_CALLBACK[e]=function(){var i=t(this),a=i.attr(e);"function"==typeof n[a]&&n[a].call(this,i)},o.on(a,"*["+e+"]",i.event.UTIL_EVENT_CALLBACK[e]),n}};!function(e,t,i){"$:nomunge";function n(){a=t[l](function(){o.each(function(){var t=e(this),i=t.width(),n=t.height(),a=e.data(this,u);(i!==a.w||n!==a.h)&&t.trigger(c,[a.w=i,a.h=n])}),n()},r[g])}var a,o=e([]),r=e.resize=e.extend(e.resize,{}),l="setTimeout",c="resize",u=c+"-special-event",g="delay",s="throttleWindow";r[g]=250,r[s]=!0,e.event.special[c]={setup:function(){if(!r[s]&&this[l])return!1;var t=e(this);o=o.add(t),e.data(this,u,{w:t.width(),h:t.height()}),1===o.length&&n()},teardown:function(){if(!r[s]&&this[l])return!1;var t=e(this);o=o.not(t),t.removeData(u),o.length||clearTimeout(a)},add:function(t){function n(t,n,o){var r=e(this),l=e.data(this,u)||{};l.w=n!==i?n:r.width(),l.h=o!==i?o:r.height(),a.apply(this,arguments)}if(!r[s]&&this[l])return!1;var a;return e.isFunction(t)?(a=t,n):(a=t.handler,void(t.handler=n))}}}(t,window),e("util",i)}); ================================================ FILE: public/assets/luna/layui/layui.js ================================================ /** layui-v2.5.6 MIT License By https://www.layui.com */ ;!function(e){"use strict";var t=document,n={modules:{},status:{},timeout:10,event:{}},r=function(){this.v="2.5.6"},o=function(){var e=t.currentScript?t.currentScript.src:function(){for(var e,n=t.scripts,r=n.length-1,o=r;o>0;o--)if("interactive"===n[o].readyState){e=n[o].src;break}return e||n[r].src}();return e.substring(0,e.lastIndexOf("/")+1)}(),a=function(t){e.console&&console.error&&console.error("Layui hint: "+t)},i="undefined"!=typeof opera&&"[object Opera]"===opera.toString(),u={layer:"modules/layer",laydate:"modules/laydate",laypage:"modules/laypage",laytpl:"modules/laytpl",layim:"modules/layim",layedit:"modules/layedit",form:"modules/form",upload:"modules/upload",transfer:"modules/transfer",tree:"modules/tree",table:"modules/table",element:"modules/element",rate:"modules/rate",colorpicker:"modules/colorpicker",slider:"modules/slider",carousel:"modules/carousel",flow:"modules/flow",util:"modules/util",code:"modules/code",jquery:"modules/jquery",mobile:"modules/mobile","layui.all":"../layui.all"};r.prototype.cache=n,r.prototype.define=function(e,t){var r=this,o="function"==typeof e,a=function(){var e=function(e,t){layui[e]=t,n.status[e]=!0};return"function"==typeof t&&t(function(r,o){e(r,o),n.callback[r]=function(){t(e)}}),this};return o&&(t=e,e=[]),!layui["layui.all"]&&layui["layui.mobile"]?a.call(r):(r.use(e,a),r)},r.prototype.use=function(e,r,l){function c(e,t){var r="PLaySTATION 3"===navigator.platform?/^complete$/:/^(complete|loaded)$/;("load"===e.type||r.test((e.currentTarget||e.srcElement).readyState))&&(n.modules[d]=t,y.removeChild(h),function o(){return++m>1e3*n.timeout/4?a(d+" is not a valid module"):void(n.status[d]?s():setTimeout(o,4))}())}function s(){l.push(layui[d]),e.length>1?p.use(e.slice(1),r,l):"function"==typeof r&&r.apply(layui,l)}var p=this,f=n.dir=n.dir?n.dir:o,y=t.getElementsByTagName("head")[0];e="string"==typeof e?[e]:e,window.jQuery&&jQuery.fn.on&&(p.each(e,function(t,n){"jquery"===n&&e.splice(t,1)}),layui.jquery=layui.$=jQuery);var d=e[0],m=0;if(l=l||[],n.host=n.host||(f.match(/\/\/([\s\S]+?)\//)||["//"+location.host+"/"])[0],0===e.length||layui["layui.all"]&&u[d]||!layui["layui.all"]&&layui["layui.mobile"]&&u[d])return s(),p;var v=(u[d]?f+"lay/":/^\{\/\}/.test(p.modules[d])?"":n.base||"")+(p.modules[d]||d)+".js";if(v=v.replace(/^\{\/\}/,""),!n.modules[d]&&layui[d]&&(n.modules[d]=v),n.modules[d])!function g(){return++m>1e3*n.timeout/4?a(d+" is not a valid module"):void("string"==typeof n.modules[d]&&n.status[d]?s():setTimeout(g,4))}();else{var h=t.createElement("script");h.async=!0,h.charset="utf-8",h.src=v+function(){var e=n.version===!0?n.v||(new Date).getTime():n.version||"";return e?"?v="+e:""}(),y.appendChild(h),!h.attachEvent||h.attachEvent.toString&&h.attachEvent.toString().indexOf("[native code")<0||i?h.addEventListener("load",function(e){c(e,v)},!1):h.attachEvent("onreadystatechange",function(e){c(e,v)}),n.modules[d]=v}return p},r.prototype.getStyle=function(t,n){var r=t.currentStyle?t.currentStyle:e.getComputedStyle(t,null);return r[r.getPropertyValue?"getPropertyValue":"getAttribute"](n)},r.prototype.link=function(e,r,o){var i=this,u=t.createElement("link"),l=t.getElementsByTagName("head")[0];"string"==typeof r&&(o=r);var c=(o||e).replace(/\.|\//g,""),s=u.id="layuicss-"+c,p=0;return u.rel="stylesheet",u.href=e+(n.debug?"?v="+(new Date).getTime():""),u.media="all",t.getElementById(s)||l.appendChild(u),"function"!=typeof r?i:(function f(){return++p>1e3*n.timeout/100?a(e+" timeout"):void(1989===parseInt(i.getStyle(t.getElementById(s),"width"))?function(){r()}():setTimeout(f,100))}(),i)},n.callback={},r.prototype.factory=function(e){if(layui[e])return"function"==typeof n.callback[e]?n.callback[e]:null},r.prototype.addcss=function(e,t,r){return layui.link(n.dir+"css/"+e,t,r)},r.prototype.img=function(e,t,n){var r=new Image;return r.src=e,r.complete?t(r):(r.onload=function(){r.onload=null,"function"==typeof t&&t(r)},void(r.onerror=function(e){r.onerror=null,"function"==typeof n&&n(e)}))},r.prototype.config=function(e){e=e||{};for(var t in e)n[t]=e[t];return this},r.prototype.modules=function(){var e={};for(var t in u)e[t]=u[t];return e}(),r.prototype.extend=function(e){var t=this;e=e||{};for(var n in e)t[n]||t.modules[n]?a("模块名 "+n+" 已被占用"):t.modules[n]=e[n];return t},r.prototype.router=function(e){var t=this,e=e||location.hash,n={path:[],search:{},hash:(e.match(/[^#](#.*$)/)||[])[1]||""};return/^#\//.test(e)?(e=e.replace(/^#\//,""),n.href="/"+e,e=e.replace(/([^#])(#.*$)/,"$1").split("/")||[],t.each(e,function(e,t){/^\w+=/.test(t)?function(){t=t.split("="),n.search[t[0]]=t[1]}():n.path.push(t)}),n):n},r.prototype.url=function(e){var t=this,n={pathname:function(){var t=e?function(){var t=(e.match(/\.[^.]+?\/.+/)||[])[0]||"";return t.replace(/^[^\/]+/,"").replace(/\?.+/,"")}():location.pathname;return t.replace(/^\//,"").split("/")}(),search:function(){var n={},r=(e?function(){var t=(e.match(/\?.+/)||[])[0]||"";return t.replace(/\#.+/,"")}():location.search).replace(/^\?+/,"").split("&");return t.each(r,function(e,t){var r=t.indexOf("="),o=function(){return r<0?t.substr(0,t.length):0!==r&&t.substr(0,r)}();o&&(n[o]=r>0?t.substr(r+1):null)}),n}(),hash:t.router(function(){return e?(e.match(/#.+/)||[])[0]||"":location.hash}())};return n},r.prototype.data=function(t,n,r){if(t=t||"layui",r=r||localStorage,e.JSON&&e.JSON.parse){if(null===n)return delete r[t];n="object"==typeof n?n:{key:n};try{var o=JSON.parse(r[t])}catch(a){var o={}}return"value"in n&&(o[n.key]=n.value),n.remove&&delete o[n.key],r[t]=JSON.stringify(o),n.key?o[n.key]:o}},r.prototype.sessionData=function(e,t){return this.data(e,t,sessionStorage)},r.prototype.device=function(t){var n=navigator.userAgent.toLowerCase(),r=function(e){var t=new RegExp(e+"/([^\\s\\_\\-]+)");return e=(n.match(t)||[])[1],e||!1},o={os:function(){return/windows/.test(n)?"windows":/linux/.test(n)?"linux":/iphone|ipod|ipad|ios/.test(n)?"ios":/mac/.test(n)?"mac":void 0}(),ie:function(){return!!(e.ActiveXObject||"ActiveXObject"in e)&&((n.match(/msie\s(\d+)/)||[])[1]||"11")}(),weixin:r("micromessenger")};return t&&!o[t]&&(o[t]=r(t)),o.android=/android/.test(n),o.ios="ios"===o.os,o.mobile=!(!o.android&&!o.ios),o},r.prototype.hint=function(){return{error:a}},r.prototype.each=function(e,t){var n,r=this;if("function"!=typeof t)return r;if(e=e||[],e.constructor===Object){for(n in e)if(t.call(e[n],n,e[n]))break}else for(n=0;na?1:o>'}); if (w.clientWidth <= 768 && typeof tipsCon !== 'undefined' && tipsCon !== '') { layer.open({ type : 1, title : tipsSvg + title, closeBtn: 2, area : msgArea, skin : 'home-tips', anim : 5, shade : 0.7, content : tipsCon }); } //渲染首页商品 if (typeof goodsMsg !== 'undefined' && goodsMsg !== '') { let cateTpl = document.getElementById('cateTpl').innerHTML, cateHtml = ''; let goodsTpl = document.getElementById('goodsTpl').innerHTML, goodsHtml; let changeCate = function (key) { goodsHtml = ''; goodsMsg[key].goods.forEach(function (i) { if (i.wholesale_price_cnf != "" && i.wholesale_price_cnf != null) { i.wholesale_price_arr = i.wholesale_price_cnf.split("\r\n"); i.wholesale_price_arr.forEach(function (ii, k) { i.wholesale_price_arr[k] = ii.split("="); }) } i.proportion = i.in_stock ? (i.in_stock / (i.in_stock + i.sales_volume)) * 100 : 0; laytpl(goodsTpl).render(i, function (html) { goodsHtml += html; }); }); $('.goods-list').empty().append(goodsHtml) $('.cate-box').removeClass('cate-box-select').eq(key).addClass('cate-box-select'); }; goodsMsg.forEach(function (i, k) { i.key = k; laytpl(cateTpl).render(i, function (html) { cateHtml += html; }); }); $('.cate').empty().append(cateHtml).on('click', '.cate-box', function () { changeCate($(this).data('key')); }); changeCate(0); } }); //页面操作 $('.pay-type').each(function () { let t = $(this), type = t.data('type'), name = t.data('name'); if (paySvgArr[type] !== undefined) { t.append(paySvgArr[type] + ' ' + name); } else { t.append(otherSvg + ' ' + name); } }).click(function () { $('.pay-type').removeClass('pay-select') $(this).toggleClass("pay-select"); $('input[name=payway]').val($(this).data('id')); }); //加减商品数量 let orderNumber = 1; let numDoc = $("#orderNumber"); $('.sub').click(function () { if (orderNumber <= 1) return layer.msg(tipsMsg.least_one); orderNumber--; numDoc.val(orderNumber); }) $('.add').click(function () { if (limitNum > 0 && stock > limitNum) { if (orderNumber >= limitNum) return layer.msg(tipsMsg.exceeds_limit); } else { if (orderNumber >= stock) return layer.msg(tipsMsg.exceeds); } orderNumber++; numDoc.val(orderNumber + ''); }) numDoc.change(function () { let val = parseInt($(this).val()); if (val <= 0) { $(this).val(1); orderNumber = 1; return layer.msg(tipsMsg.least_one); } if (limitNum > 0 && stock > limitNum) { if (val > limitNum) { $(this).val(limitNum); orderNumber = limitNum; return layer.msg(tipsMsg.exceeds_limit); } } else { if (val > stock) { $(this).val(stock); orderNumber = stock; return layer.msg(tipsMsg.exceeds); } } orderNumber = val; }) //方法定义 w.showQrcode = function (imgUrl) { let html = '
        ' + '' + '
        '; layer.open({ type : 1, title : qrSvg + tipsMsg.mobile_order, closeBtn: 2, area : msgArea, skin : 'home-tips', anim : 5, shade : 0.7, content : html }); } w.tipsMsg = function (title, content) { layer.open({ type : 1, title : tipsSvg + title, closeBtn: 2, area : msgArea, skin : 'home-tips', anim : 5, shade : 0.7, content : content }); } }(window); ================================================ FILE: public/assets/style/js/clipboard/clipboard.js ================================================ /*! * clipboard.js v2.0.6 * https://clipboardjs.com/ * * Licensed MIT © Zeno Rocha */ (function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(); else if(typeof define === 'function' && define.amd) define([], factory); else if(typeof exports === 'object') exports["ClipboardJS"] = factory(); else root["ClipboardJS"] = factory(); })(this, function() { return /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) { /******/ return installedModules[moduleId].exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ i: moduleId, /******/ l: false, /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Flag the module as loaded /******/ module.l = true; /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ /******/ // define getter function for harmony exports /******/ __webpack_require__.d = function(exports, name, getter) { /******/ if(!__webpack_require__.o(exports, name)) { /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); /******/ } /******/ }; /******/ /******/ // define __esModule on exports /******/ __webpack_require__.r = function(exports) { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ /******/ // create a fake namespace object /******/ // mode & 1: value is a module id, require it /******/ // mode & 2: merge all properties of value into the ns /******/ // mode & 4: return value when already ns object /******/ // mode & 8|1: behave like require /******/ __webpack_require__.t = function(value, mode) { /******/ if(mode & 1) value = __webpack_require__(value); /******/ if(mode & 8) return value; /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; /******/ var ns = Object.create(null); /******/ __webpack_require__.r(ns); /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); /******/ return ns; /******/ }; /******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? /******/ function getDefault() { return module['default']; } : /******/ function getModuleExports() { return module; }; /******/ __webpack_require__.d(getter, 'a', getter); /******/ return getter; /******/ }; /******/ /******/ // Object.prototype.hasOwnProperty.call /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; /******/ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ /******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(__webpack_require__.s = 6); /******/ }) /************************************************************************/ /******/ ([ /* 0 */ /***/ (function(module, exports) { function select(element) { var selectedText; if (element.nodeName === 'SELECT') { element.focus(); selectedText = element.value; } else if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') { var isReadOnly = element.hasAttribute('readonly'); if (!isReadOnly) { element.setAttribute('readonly', ''); } element.select(); element.setSelectionRange(0, element.value.length); if (!isReadOnly) { element.removeAttribute('readonly'); } selectedText = element.value; } else { if (element.hasAttribute('contenteditable')) { element.focus(); } var selection = window.getSelection(); var range = document.createRange(); range.selectNodeContents(element); selection.removeAllRanges(); selection.addRange(range); selectedText = selection.toString(); } return selectedText; } module.exports = select; /***/ }), /* 1 */ /***/ (function(module, exports) { function E () { // Keep this empty so it's easier to inherit from // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3) } E.prototype = { on: function (name, callback, ctx) { var e = this.e || (this.e = {}); (e[name] || (e[name] = [])).push({ fn: callback, ctx: ctx }); return this; }, once: function (name, callback, ctx) { var self = this; function listener () { self.off(name, listener); callback.apply(ctx, arguments); }; listener._ = callback return this.on(name, listener, ctx); }, emit: function (name) { var data = [].slice.call(arguments, 1); var evtArr = ((this.e || (this.e = {}))[name] || []).slice(); var i = 0; var len = evtArr.length; for (i; i < len; i++) { evtArr[i].fn.apply(evtArr[i].ctx, data); } return this; }, off: function (name, callback) { var e = this.e || (this.e = {}); var evts = e[name]; var liveEvents = []; if (evts && callback) { for (var i = 0, len = evts.length; i < len; i++) { if (evts[i].fn !== callback && evts[i].fn._ !== callback) liveEvents.push(evts[i]); } } // Remove event from queue to prevent memory leak // Suggested by https://github.com/lazd // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910 (liveEvents.length) ? e[name] = liveEvents : delete e[name]; return this; } }; module.exports = E; module.exports.TinyEmitter = E; /***/ }), /* 2 */ /***/ (function(module, exports, __webpack_require__) { var is = __webpack_require__(3); var delegate = __webpack_require__(4); /** * Validates all params and calls the right * listener function based on its target type. * * @param {String|HTMLElement|HTMLCollection|NodeList} target * @param {String} type * @param {Function} callback * @return {Object} */ function listen(target, type, callback) { if (!target && !type && !callback) { throw new Error('Missing required arguments'); } if (!is.string(type)) { throw new TypeError('Second argument must be a String'); } if (!is.fn(callback)) { throw new TypeError('Third argument must be a Function'); } if (is.node(target)) { return listenNode(target, type, callback); } else if (is.nodeList(target)) { return listenNodeList(target, type, callback); } else if (is.string(target)) { return listenSelector(target, type, callback); } else { throw new TypeError('First argument must be a String, HTMLElement, HTMLCollection, or NodeList'); } } /** * Adds an event listener to a HTML element * and returns a remove listener function. * * @param {HTMLElement} node * @param {String} type * @param {Function} callback * @return {Object} */ function listenNode(node, type, callback) { node.addEventListener(type, callback); return { destroy: function() { node.removeEventListener(type, callback); } } } /** * Add an event listener to a list of HTML elements * and returns a remove listener function. * * @param {NodeList|HTMLCollection} nodeList * @param {String} type * @param {Function} callback * @return {Object} */ function listenNodeList(nodeList, type, callback) { Array.prototype.forEach.call(nodeList, function(node) { node.addEventListener(type, callback); }); return { destroy: function() { Array.prototype.forEach.call(nodeList, function(node) { node.removeEventListener(type, callback); }); } } } /** * Add an event listener to a selector * and returns a remove listener function. * * @param {String} selector * @param {String} type * @param {Function} callback * @return {Object} */ function listenSelector(selector, type, callback) { return delegate(document.body, selector, type, callback); } module.exports = listen; /***/ }), /* 3 */ /***/ (function(module, exports) { /** * Check if argument is a HTML element. * * @param {Object} value * @return {Boolean} */ exports.node = function(value) { return value !== undefined && value instanceof HTMLElement && value.nodeType === 1; }; /** * Check if argument is a list of HTML elements. * * @param {Object} value * @return {Boolean} */ exports.nodeList = function(value) { var type = Object.prototype.toString.call(value); return value !== undefined && (type === '[object NodeList]' || type === '[object HTMLCollection]') && ('length' in value) && (value.length === 0 || exports.node(value[0])); }; /** * Check if argument is a string. * * @param {Object} value * @return {Boolean} */ exports.string = function(value) { return typeof value === 'string' || value instanceof String; }; /** * Check if argument is a function. * * @param {Object} value * @return {Boolean} */ exports.fn = function(value) { var type = Object.prototype.toString.call(value); return type === '[object Function]'; }; /***/ }), /* 4 */ /***/ (function(module, exports, __webpack_require__) { var closest = __webpack_require__(5); /** * Delegates event to a selector. * * @param {Element} element * @param {String} selector * @param {String} type * @param {Function} callback * @param {Boolean} useCapture * @return {Object} */ function _delegate(element, selector, type, callback, useCapture) { var listenerFn = listener.apply(this, arguments); element.addEventListener(type, listenerFn, useCapture); return { destroy: function() { element.removeEventListener(type, listenerFn, useCapture); } } } /** * Delegates event to a selector. * * @param {Element|String|Array} [elements] * @param {String} selector * @param {String} type * @param {Function} callback * @param {Boolean} useCapture * @return {Object} */ function delegate(elements, selector, type, callback, useCapture) { // Handle the regular Element usage if (typeof elements.addEventListener === 'function') { return _delegate.apply(null, arguments); } // Handle Element-less usage, it defaults to global delegation if (typeof type === 'function') { // Use `document` as the first parameter, then apply arguments // This is a short way to .unshift `arguments` without running into deoptimizations return _delegate.bind(null, document).apply(null, arguments); } // Handle Selector-based usage if (typeof elements === 'string') { elements = document.querySelectorAll(elements); } // Handle Array-like based usage return Array.prototype.map.call(elements, function (element) { return _delegate(element, selector, type, callback, useCapture); }); } /** * Finds closest match and invokes callback. * * @param {Element} element * @param {String} selector * @param {String} type * @param {Function} callback * @return {Function} */ function listener(element, selector, type, callback) { return function(e) { e.delegateTarget = closest(e.target, selector); if (e.delegateTarget) { callback.call(element, e); } } } module.exports = delegate; /***/ }), /* 5 */ /***/ (function(module, exports) { var DOCUMENT_NODE_TYPE = 9; /** * A polyfill for Element.matches() */ if (typeof Element !== 'undefined' && !Element.prototype.matches) { var proto = Element.prototype; proto.matches = proto.matchesSelector || proto.mozMatchesSelector || proto.msMatchesSelector || proto.oMatchesSelector || proto.webkitMatchesSelector; } /** * Finds the closest parent that matches a selector. * * @param {Element} element * @param {String} selector * @return {Function} */ function closest (element, selector) { while (element && element.nodeType !== DOCUMENT_NODE_TYPE) { if (typeof element.matches === 'function' && element.matches(selector)) { return element; } element = element.parentNode; } } module.exports = closest; /***/ }), /* 6 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); // EXTERNAL MODULE: ./node_modules/select/src/select.js var src_select = __webpack_require__(0); var select_default = /*#__PURE__*/__webpack_require__.n(src_select); // CONCATENATED MODULE: ./src/clipboard-action.js var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } /** * Inner class which performs selection from either `text` or `target` * properties and then executes copy or cut operations. */ var clipboard_action_ClipboardAction = function () { /** * @param {Object} options */ function ClipboardAction(options) { _classCallCheck(this, ClipboardAction); this.resolveOptions(options); this.initSelection(); } /** * Defines base properties passed from constructor. * @param {Object} options */ _createClass(ClipboardAction, [{ key: 'resolveOptions', value: function resolveOptions() { var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; this.action = options.action; this.container = options.container; this.emitter = options.emitter; this.target = options.target; this.text = options.text; this.trigger = options.trigger; this.selectedText = ''; } /** * Decides which selection strategy is going to be applied based * on the existence of `text` and `target` properties. */ }, { key: 'initSelection', value: function initSelection() { if (this.text) { this.selectFake(); } else if (this.target) { this.selectTarget(); } } /** * Creates a fake textarea element, sets its value from `text` property, * and makes a selection on it. */ }, { key: 'selectFake', value: function selectFake() { var _this = this; var isRTL = document.documentElement.getAttribute('dir') == 'rtl'; this.removeFake(); this.fakeHandlerCallback = function () { return _this.removeFake(); }; this.fakeHandler = this.container.addEventListener('click', this.fakeHandlerCallback) || true; this.fakeElem = document.createElement('textarea'); // Prevent zooming on iOS this.fakeElem.style.fontSize = '12pt'; // Reset box model this.fakeElem.style.border = '0'; this.fakeElem.style.padding = '0'; this.fakeElem.style.margin = '0'; // Move element out of screen horizontally this.fakeElem.style.position = 'absolute'; this.fakeElem.style[isRTL ? 'right' : 'left'] = '-9999px'; // Move element to the same position vertically var yPosition = window.pageYOffset || document.documentElement.scrollTop; this.fakeElem.style.top = yPosition + 'px'; this.fakeElem.setAttribute('readonly', ''); this.fakeElem.value = this.text; this.container.appendChild(this.fakeElem); this.selectedText = select_default()(this.fakeElem); this.copyText(); } /** * Only removes the fake element after another click event, that way * a user can hit `Ctrl+C` to copy because selection still exists. */ }, { key: 'removeFake', value: function removeFake() { if (this.fakeHandler) { this.container.removeEventListener('click', this.fakeHandlerCallback); this.fakeHandler = null; this.fakeHandlerCallback = null; } if (this.fakeElem) { this.container.removeChild(this.fakeElem); this.fakeElem = null; } } /** * Selects the content from element passed on `target` property. */ }, { key: 'selectTarget', value: function selectTarget() { this.selectedText = select_default()(this.target); this.copyText(); } /** * Executes the copy operation based on the current selection. */ }, { key: 'copyText', value: function copyText() { var succeeded = void 0; try { succeeded = document.execCommand(this.action); } catch (err) { succeeded = false; } this.handleResult(succeeded); } /** * Fires an event based on the copy operation result. * @param {Boolean} succeeded */ }, { key: 'handleResult', value: function handleResult(succeeded) { this.emitter.emit(succeeded ? 'success' : 'error', { action: this.action, text: this.selectedText, trigger: this.trigger, clearSelection: this.clearSelection.bind(this) }); } /** * Moves focus away from `target` and back to the trigger, removes current selection. */ }, { key: 'clearSelection', value: function clearSelection() { if (this.trigger) { this.trigger.focus(); } document.activeElement.blur(); window.getSelection().removeAllRanges(); } /** * Sets the `action` to be performed which can be either 'copy' or 'cut'. * @param {String} action */ }, { key: 'destroy', /** * Destroy lifecycle. */ value: function destroy() { this.removeFake(); } }, { key: 'action', set: function set() { var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'copy'; this._action = action; if (this._action !== 'copy' && this._action !== 'cut') { throw new Error('Invalid "action" value, use either "copy" or "cut"'); } } /** * Gets the `action` property. * @return {String} */ , get: function get() { return this._action; } /** * Sets the `target` property using an element * that will be have its content copied. * @param {Element} target */ }, { key: 'target', set: function set(target) { if (target !== undefined) { if (target && (typeof target === 'undefined' ? 'undefined' : _typeof(target)) === 'object' && target.nodeType === 1) { if (this.action === 'copy' && target.hasAttribute('disabled')) { throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute'); } if (this.action === 'cut' && (target.hasAttribute('readonly') || target.hasAttribute('disabled'))) { throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes'); } this._target = target; } else { throw new Error('Invalid "target" value, use a valid Element'); } } } /** * Gets the `target` property. * @return {String|HTMLElement} */ , get: function get() { return this._target; } }]); return ClipboardAction; }(); /* harmony default export */ var clipboard_action = (clipboard_action_ClipboardAction); // EXTERNAL MODULE: ./node_modules/tiny-emitter/index.js var tiny_emitter = __webpack_require__(1); var tiny_emitter_default = /*#__PURE__*/__webpack_require__.n(tiny_emitter); // EXTERNAL MODULE: ./node_modules/good-listener/src/listen.js var listen = __webpack_require__(2); var listen_default = /*#__PURE__*/__webpack_require__.n(listen); // CONCATENATED MODULE: ./src/clipboard.js var clipboard_typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; var clipboard_createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); function clipboard_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /** * Base class which takes one or more elements, adds event listeners to them, * and instantiates a new `ClipboardAction` on each click. */ var clipboard_Clipboard = function (_Emitter) { _inherits(Clipboard, _Emitter); /** * @param {String|HTMLElement|HTMLCollection|NodeList} trigger * @param {Object} options */ function Clipboard(trigger, options) { clipboard_classCallCheck(this, Clipboard); var _this = _possibleConstructorReturn(this, (Clipboard.__proto__ || Object.getPrototypeOf(Clipboard)).call(this)); _this.resolveOptions(options); _this.listenClick(trigger); return _this; } /** * Defines if attributes would be resolved using internal setter functions * or custom functions that were passed in the constructor. * @param {Object} options */ clipboard_createClass(Clipboard, [{ key: 'resolveOptions', value: function resolveOptions() { var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; this.action = typeof options.action === 'function' ? options.action : this.defaultAction; this.target = typeof options.target === 'function' ? options.target : this.defaultTarget; this.text = typeof options.text === 'function' ? options.text : this.defaultText; this.container = clipboard_typeof(options.container) === 'object' ? options.container : document.body; } /** * Adds a click event listener to the passed trigger. * @param {String|HTMLElement|HTMLCollection|NodeList} trigger */ }, { key: 'listenClick', value: function listenClick(trigger) { var _this2 = this; this.listener = listen_default()(trigger, 'click', function (e) { return _this2.onClick(e); }); } /** * Defines a new `ClipboardAction` on each click event. * @param {Event} e */ }, { key: 'onClick', value: function onClick(e) { var trigger = e.delegateTarget || e.currentTarget; if (this.clipboardAction) { this.clipboardAction = null; } this.clipboardAction = new clipboard_action({ action: this.action(trigger), target: this.target(trigger), text: this.text(trigger), container: this.container, trigger: trigger, emitter: this }); } /** * Default `action` lookup function. * @param {Element} trigger */ }, { key: 'defaultAction', value: function defaultAction(trigger) { return getAttributeValue('action', trigger); } /** * Default `target` lookup function. * @param {Element} trigger */ }, { key: 'defaultTarget', value: function defaultTarget(trigger) { var selector = getAttributeValue('target', trigger); if (selector) { return document.querySelector(selector); } } /** * Returns the support of the given action, or all actions if no action is * given. * @param {String} [action] */ }, { key: 'defaultText', /** * Default `text` lookup function. * @param {Element} trigger */ value: function defaultText(trigger) { return getAttributeValue('text', trigger); } /** * Destroy lifecycle. */ }, { key: 'destroy', value: function destroy() { this.listener.destroy(); if (this.clipboardAction) { this.clipboardAction.destroy(); this.clipboardAction = null; } } }], [{ key: 'isSupported', value: function isSupported() { var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['copy', 'cut']; var actions = typeof action === 'string' ? [action] : action; var support = !!document.queryCommandSupported; actions.forEach(function (action) { support = support && !!document.queryCommandSupported(action); }); return support; } }]); return Clipboard; }(tiny_emitter_default.a); /** * Helper function to retrieve attribute value. * @param {String} suffix * @param {Element} element */ function getAttributeValue(suffix, element) { var attribute = 'data-clipboard-' + suffix; if (!element.hasAttribute(attribute)) { return; } return element.getAttribute(attribute); } /* harmony default export */ var clipboard = __webpack_exports__["default"] = (clipboard_Clipboard); /***/ }) /******/ ])["default"]; }); ================================================ FILE: public/assets/style/main.css ================================================ * { margin: 0; padding: 0; } body { background-color: #F2F2F2; } .cardcon { margin-top: 20px; } .logo { pointer-events: none; } .footer-wrap { text-align: center; color: #909399; font-size: 15px; } .product-info { background-color:#e2e2e2; padding: 10px; margin-bottom: 5px; padding-left: 35px; } .product-price { color: #1E9FFF; font-size: 20px; font-weight: 500; } .product-pay-price{ margin-top: 10px; color: #F40; font-size: 20px; font-weight: 500; } .ws-price { color: #01AAED; font-size: 14px; font-weight: 500; } .product-price-cost-price { text-decoration: line-through; padding-left: 10px; } .buy-prompt{ padding: 20px; } .errpanl { margin-top: 20px; } .order-info { height: 75px; border: 1px solid #ccc; overflow-wrap: break-word; padding: 5px; border-radius: 2px 2px 0 0; overflow:auto; } .info-box { border-top: 2px solid #fd7f83; padding-top: 20px; } .info-ui { font-size: 15px; } .info-ui strong { font-size: 16px; color: #666; font-weight: bold; } ul { display: block; list-style-type: disc; margin-block-start: 1em; margin-block-end: 1em; margin-inline-start: 0px; margin-inline-end: 0px; padding-inline-start: 10px; } .product-box { padding: 10px; } .product-panl{ border: 1px solid #dddddd; } .product-box-info{ padding: 10px; } .product-box-price{ display: inline-block; color: #1E9FFF; font-size: 15px; font-weight: 500; } .product-title{ text-overflow: ellipsis; white-space: nowrap; font-size: 14px; line-height: 20px; width: 100%; overflow: hidden; color: #666; } .product-class span{ height: 20px; line-height: 20px; border-radius: 2px; } .product-volume { float: right; font-size: 10px; color: #666; font-weight: 500; } .product-content img { max-width: 100%; height: auto; } ================================================ FILE: public/assets/unicorn/css/base.css ================================================ * { margin: 0; padding: 0; /* css3盒子模型 */ box-sizing: border-box; } em, i { font-style: normal } li { list-style: none } img { /* border 0 照顾低版本浏览器 如果 图片外面包含了链接会有边框的问题 */ border: 0; vertical-align: middle } button { cursor: pointer } a { color: #666; text-decoration: none } button, input { font-family: Microsoft YaHei, Heiti SC, tahoma, arial, Hiragino Sans GB, "\5B8B\4F53", sans-serif; border: 0; outline: none; } body { -webkit-font-smoothing: antialiased; background-color: #fff; font: 14px/1.5 Microsoft YaHei, Heiti SC, tahoma, arial, Hiragino Sans GB, "\5B8B\4F53", sans-serif; } .hide, .none { display: none } ================================================ FILE: public/assets/unicorn/css/common.css ================================================ @font-face { font-family: 'iconfont'; src: url('../fonts/iconfont.woff2?t=1631608872177') format('woff2'), url('../fonts/iconfont.woff?t=1631608872177') format('woff'), url('../fonts/iconfont.ttf?t=1631608872177') format('truetype'); } .ali-icon { font-family: "iconfont" !important; font-style: normal; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } .fl { float: left; } .fr { float: right; } /* 页面装载 */ .page-wrapper { background-color: #fff; } .header-top { background-color: #f1f1f1; border-bottom: 1px solid #dadada; -webkit-box-shadow: 0 -1px 3px rgb(0 0 0 / 3%) inset; box-shadow: 0 -1px 3px rgb(0 0 0 / 3%) inset; font-size: 14px; } .header-top-right-btns { float: right; text-align: center; font-size: 0; } .header-top-right-btns .btn-group>button { padding: 8px 10px; margin: 0; text-align: center; color: #999; font-size: 14px; border-right: 1px solid #e3e3e3; border-left: 1px solid transparent; } .btn-group>button:hover { color: #e84c3d; background-color: #fafafa; border-right-color: #e3e3e3; } .header-top-right-btns .btn-group:last-child>button { border-right-color: transparent; } .header { padding: 20px 0; border-bottom: 1px solid #eaeaea; background: #fff; } .logo img { height: 52px; } .footer { background-color:transparent; } ================================================ FILE: public/assets/unicorn/css/index.css ================================================ .recommend p { font-size: 14px; } .category { padding: 40px 0; } .separator { display: block; width: 60px; height: 5px; margin: 15px auto 15px; background-color: #cccccc; position: relative; border: 1px solid #cccccc; } .separator:after { width: 30px; height: 5px; background: #333333; position: absolute; top: -1px; left: -1px; content: ""; } .category-menus li { display: inline-block; margin: 4px; } .goods-buy { line-height: 40px; font-size: 13px; } .goods-introduction-cate { display: -webkit-box; overflow: hidden; -webkit-line-clamp: 2; -webkit-box-orient: vertical; } .buy-form label { font-size: 16px; } ================================================ FILE: public/assets/unicorn/js/bootstrap-input-spinner.js ================================================ /** * Author and copyright: Stefan Haack (https://shaack.com) * Repository: https://github.com/shaack/bootstrap-input-spinner * License: MIT, see file 'LICENSE' */ ;(function ($) { "use strict" // the default editor for parsing and rendering var I18nEditor = function (props, element) { var locale = props.locale || "en-US" this.parse = function (customFormat) { var numberFormat = new Intl.NumberFormat(locale) var thousandSeparator = numberFormat.format(11111).replace(/1/g, '') || '.' var decimalSeparator = numberFormat.format(1.1).replace(/1/g, '') return parseFloat(customFormat .replace(new RegExp(' ', 'g'), '') .replace(new RegExp('\\' + thousandSeparator, 'g'), '') .replace(new RegExp('\\' + decimalSeparator), '.') ) } this.render = function (number) { var decimals = parseInt(element.getAttribute("data-decimals")) || 0 var digitGrouping = !(element.getAttribute("data-digit-grouping") === "false") var numberFormat = new Intl.NumberFormat(locale, { minimumFractionDigits: decimals, maximumFractionDigits: decimals, useGrouping: digitGrouping }) return numberFormat.format(number) } } var triggerKeyPressed = false var originalVal = $.fn.val $.fn.val = function (value) { if (arguments.length >= 1) { for (var i = 0; i < this.length; i++) { if (this[i]["bootstrap-input-spinner"] && this[i].setValue) { this[i].setValue(value) } } } return originalVal.apply(this, arguments) } $.fn.inputSpinner = function (methodOrProps) { if (methodOrProps === "destroy") { this.each(function () { if (this["bootstrap-input-spinner"]) { this.destroyInputSpinner() } else { console.warn("element", this, "is no bootstrap-input-spinner") } }) return this } var props = { decrementButton: "", // button text incrementButton: "+", // .. groupClass: "", // css class of the resulting input-group buttonsClass: "btn-outline-secondary", buttonsWidth: "2.5rem", textAlign: "center", // alignment of the entered number autoDelay: 500, // ms threshold before auto value change autoInterval: 50, // speed of auto value change buttonsOnly: false, // set this `true` to disable the possibility to enter or paste the number via keyboard keyboardStepping: true, // set this to `false` to disallow the use of the up and down arrow keys to step locale: navigator.language, // the locale, per default detected automatically from the browser editor: I18nEditor, // the editor (parsing and rendering of the input) template: // the template of the input '
        ' + '' + '' + '' + '
        ' } for (var option in methodOrProps) { // noinspection JSUnfilteredForInLoop props[option] = methodOrProps[option] } var html = props.template .replace(/\${groupClass}/g, props.groupClass) .replace(/\${buttonsWidth}/g, props.buttonsWidth) .replace(/\${buttonsClass}/g, props.buttonsClass) .replace(/\${decrementButton}/g, props.decrementButton) .replace(/\${incrementButton}/g, props.incrementButton) .replace(/\${textAlign}/g, props.textAlign) this.each(function () { if (this["bootstrap-input-spinner"]) { console.warn("element", this, "is already a bootstrap-input-spinner") } else { var $original = $(this) $original[0]["bootstrap-input-spinner"] = true $original.hide() $original[0].inputSpinnerEditor = new props.editor(props, this) var autoDelayHandler = null var autoIntervalHandler = null var $inputGroup = $(html) var $buttonDecrement = $inputGroup.find(".btn-decrement") var $buttonIncrement = $inputGroup.find(".btn-increment") var $input = $inputGroup.find("input") var $label = $("label[for='" + $original.attr("id") + "']") if (!$label[0]) { $label = $original.closest("label") } var min = null var max = null var step = null updateAttributes() var value = parseFloat($original[0].value) var prefix = $original.attr("data-prefix") || "" var suffix = $original.attr("data-suffix") || "" if (prefix) { var prefixElement = $('' + prefix + '') $inputGroup.find("input").before(prefixElement) } if (suffix) { var suffixElement = $('' + suffix + '') $inputGroup.find("input").after(suffixElement) } $original[0].setValue = function (newValue) { setValue(newValue) } $original[0].destroyInputSpinner = function () { destroy() } var observer = new MutationObserver(function () { updateAttributes() setValue(value, true) }) observer.observe($original[0], {attributes: true}) $original.after($inputGroup) setValue(value) $input.on("paste input change focusout", function (event) { var newValue = $input[0].value var focusOut = event.type === "focusout" newValue = $original[0].inputSpinnerEditor.parse(newValue) setValue(newValue, focusOut) dispatchEvent($original, event.type) }).on("keydown", function (event) { if (props.keyboardStepping) { if (event.which === 38) { // up arrow pressed event.preventDefault() if (!$buttonDecrement.prop("disabled")) { stepHandling(step) } } else if (event.which === 40) { // down arrow pressed event.preventDefault() if (!$buttonIncrement.prop("disabled")) { stepHandling(-step) } } } }).on("keyup", function (event) { // up/down arrow released if (props.keyboardStepping && (event.which === 38 || event.which === 40)) { event.preventDefault() resetTimer() } }) onPointerDown($buttonDecrement[0], function () { if (!$buttonDecrement.prop("disabled")) { stepHandling(-step) } }) onPointerDown($buttonIncrement[0], function () { if (!$buttonIncrement.prop("disabled")) { stepHandling(step) } }) onPointerUp(document.body, function () { resetTimer() }) } function setValue(newValue, updateInput) { if (updateInput === undefined) { updateInput = true } if (isNaN(newValue) || newValue === "") { $original[0].value = "" if (updateInput) { $input[0].value = "" } value = NaN } else { newValue = parseFloat(newValue) newValue = Math.min(Math.max(newValue, min), max) // newValue = Math.round(newValue * Math.pow(10, decimals)) / Math.pow(10, decimals) $original[0].value = newValue if (updateInput) { // $input[0].value = numberFormat.format(newValue) $input[0].value = $original[0].inputSpinnerEditor.render(newValue) } value = newValue } } function destroy() { $original.prop("required", $input.prop("required")) observer.disconnect() resetTimer() $input.off("paste input change focusout") $inputGroup.remove() $original.show() $original[0]["bootstrap-input-spinner"] = undefined if ($label[0]) { $label.attr("for", $original.attr("id")) } } function dispatchEvent($element, type) { if (type) { setTimeout(function () { var event if (typeof (Event) === 'function') { event = new Event(type, {bubbles: true}) } else { // IE event = document.createEvent('Event') event.initEvent(type, true, true) } $element[0].dispatchEvent(event) }) } } function stepHandling(step) { calcStep(step) resetTimer() autoDelayHandler = setTimeout(function () { autoIntervalHandler = setInterval(function () { calcStep(step) }, props.autoInterval) }, props.autoDelay) } function calcStep(step) { if (isNaN(value)) { value = 0 } setValue(Math.round(value / step) * step + step) dispatchEvent($original, "input") dispatchEvent($original, "change") } function resetTimer() { clearTimeout(autoDelayHandler) clearTimeout(autoIntervalHandler) } function updateAttributes() { // copy properties from original to the new input if ($original.prop("required")) { $input.prop("required", $original.prop("required")) $original.removeAttr('required') } $input.prop("placeholder", $original.prop("placeholder")) $input.attr("inputmode", $original.attr("inputmode") || "decimal") var disabled = $original.prop("disabled") var readonly = $original.prop("readonly") $input.prop("disabled", disabled) $input.prop("readonly", readonly || props.buttonsOnly) $buttonIncrement.prop("disabled", disabled || readonly) $buttonDecrement.prop("disabled", disabled || readonly) if (disabled || readonly) { resetTimer() } var originalClass = $original.prop("class") var groupClass = "" // sizing if (/form-control-sm/g.test(originalClass)) { groupClass = "input-group-sm" } else if (/form-control-lg/g.test(originalClass)) { groupClass = "input-group-lg" } var inputClass = originalClass.replace(/form-control(-(sm|lg))?/g, "") $inputGroup.prop("class", "input-group " + groupClass + " " + props.groupClass) $input.prop("class", "form-control " + inputClass) // update the main attributes min = isNaN($original.prop("min")) || $original.prop("min") === "" ? -Infinity : parseFloat($original.prop("min")) max = isNaN($original.prop("max")) || $original.prop("max") === "" ? Infinity : parseFloat($original.prop("max")) step = parseFloat($original.prop("step")) || 1 if ($original.attr("hidden")) { $inputGroup.attr("hidden", $original.attr("hidden")) } else { $inputGroup.removeAttr("hidden") } if ($original.attr("id")) { $input.attr("id", $original.attr("id") + "_MP_cBdLN29i2") if ($label[0]) { $label.attr("for", $input.attr("id")) } } } }) return this } function onPointerUp(element, callback) { element.addEventListener("mouseup", function (e) { callback(e) }) element.addEventListener("touchend", function (e) { callback(e) }) element.addEventListener("keyup", function (e) { if ((e.keyCode === 32 || e.keyCode === 13)) { triggerKeyPressed = false callback(e) } }) } function onPointerDown(element, callback) { element.addEventListener("mousedown", function (e) { if (e.button === 0) { e.preventDefault() callback(e) } }) element.addEventListener("touchstart", function (e) { if (e.cancelable) { e.preventDefault() } callback(e) }) element.addEventListener("keydown", function (e) { if ((e.keyCode === 32 || e.keyCode === 13) && !triggerKeyPressed) { triggerKeyPressed = true callback(e) } }) } }(jQuery)) ================================================ FILE: public/index.php ================================================ */ define('LARAVEL_START', microtime(true)); /* |-------------------------------------------------------------------------- | Register The Auto Loader |-------------------------------------------------------------------------- | | Composer provides a convenient, automatically generated class loader for | our application. We just need to utilize it! We'll simply require it | into the script here so that we don't have to worry about manual | loading any of our classes later on. It feels great to relax. | */ require __DIR__.'/../vendor/autoload.php'; /* |-------------------------------------------------------------------------- | Turn On The Lights |-------------------------------------------------------------------------- | | We need to illuminate PHP development, so let us turn on the lights. | This bootstraps the framework and gets it ready for use, then it | will load up this application so that we can run it and send | the responses back to the browser and delight our users. | */ $app = require_once __DIR__.'/../bootstrap/app.php'; /* |-------------------------------------------------------------------------- | Run The Application |-------------------------------------------------------------------------- | | Once we have the application, we can handle the incoming request | through the kernel, and send the associated response back to | the client's browser allowing them to enjoy the creative | and wonderful application we have prepared for them. | */ $kernel = $app->make(Illuminate\Contracts\Http\Kernel::class); $response = $kernel->handle( $request = Illuminate\Http\Request::capture() ); $response->send(); $kernel->terminate($request, $response); ================================================ FILE: public/robots.txt ================================================ User-agent: * Disallow: ================================================ FILE: public/vendor/dcat-admin/adminlte/adminlte-blue-light.css ================================================ /*! * AdminLTE v3.0.4 * Author: Colorlib * Website: AdminLTE.io * License: Open source - MIT */ /*! * Bootstrap v4.3.1 (https://getbootstrap.com/) * Copyright 2011-2019 The Bootstrap Authors * Copyright 2011-2019 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */ /*! * Bootstrap v4.3.1 (https://getbootstrap.com/) * Copyright 2011-2019 The Bootstrap Authors * Copyright 2011-2019 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */:root{--blue:#3085d6;--indigo:#5c6bc6;--purple:#6f42c1;--pink:#ff8acc;--red:#ea5455;--orange:#dda451;--yellow:#edc30e;--green:#21b978;--teal:#20c997;--cyan:#7367f0;--white:#fff;--gray:#b8c2cc;--gray-dark:#1e1e1e;--primary:#62a8ea;--secondary:#b8c2cc;--success:#21b978;--info:#4277cf;--warning:#dda451;--danger:#ea5455;--light:#f7f7f9;--dark:#22292f;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:"Montserrat",Helvetica,Arial,serif;--font-family-monospace:"Montserrat",Helvetica,Arial,serif}*,:after,:before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(34,41,47,0)}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:Montserrat,Helvetica,Arial,serif;font-size:1rem;font-weight:400;line-height:1.45;color:#626262;text-align:left;background-color:#eff1f7}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{font-style:normal;line-height:inherit}address,dl,ol,ul{margin-bottom:1rem}dl,ol,ul{margin-top:0}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#4c9ce7;background-color:transparent}a,a:hover{text-decoration:none}a:hover{color:#1f83e1}a:not([href]):not([tabindex]),a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:Montserrat,Helvetica,Arial,serif;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{border-style:none}img,svg{vertical-align:middle}svg{overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#b8c2cc;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-family:inherit;font-weight:500;line-height:1.2;color:#2c2c2c}.h1,h1{font-size:2rem}.h2,h2{font-size:1.74rem}.h3,h3{font-size:1.51rem}.h4,h4{font-size:1.32rem}.h5,h5{font-size:1.14rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem}.display-1,.display-2{font-weight:300;line-height:1.2}.display-2{font-size:5.5rem}.display-3{font-size:4.5rem}.display-3,.display-4{font-weight:300;line-height:1.2}.display-4{font-size:3.5rem}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(34,41,47,.1)}.small,small{font-size:smaller;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-inline,.list-unstyled{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:smaller;color:#b8c2cc}.blockquote-footer:before{content:"\2014\A0"}.img-fluid,.img-thumbnail{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#eff1f7;border:1px solid #dae1e7;border-radius:.5rem}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#b8c2cc}code{word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:90%;color:#fff;background-color:#eee;border-radius:.25rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:90%;color:#2a2e30}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:14px;padding-left:14px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:14px;padding-left:14px;margin-right:auto;margin-left:auto}.row{display:flex;flex-wrap:wrap;margin-right:-14px;margin-left:-14px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col-auto,.col-lg,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-auto,.col-md,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-md-auto,.col-sm,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-auto{position:relative;width:100%;padding-right:14px;padding-left:14px}.col{flex-basis:0;flex-grow:1;max-width:100%}.col-auto{flex:0 0 auto;width:auto;max-width:100%}.col-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-3{flex:0 0 25%;max-width:25%}.col-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-6{flex:0 0 50%;max-width:50%}.col-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-9{flex:0 0 75%;max-width:75%}.col-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-12{flex:0 0 100%;max-width:100%}.order-first{order:-1}.order-last{order:13}.order-0{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.offset-1{margin-left:8.3333333333%}.offset-2{margin-left:16.6666666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.3333333333%}.offset-5{margin-left:41.6666666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.3333333333%}.offset-8{margin-left:66.6666666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.3333333333%}.offset-11{margin-left:91.6666666667%}@media (min-width:576px){.col-sm{flex-basis:0;flex-grow:1;max-width:100%}.col-sm-auto{flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-sm-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-sm-3{flex:0 0 25%;max-width:25%}.col-sm-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-sm-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-sm-6{flex:0 0 50%;max-width:50%}.col-sm-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-sm-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-sm-9{flex:0 0 75%;max-width:75%}.col-sm-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-sm-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-sm-12{flex:0 0 100%;max-width:100%}.order-sm-first{order:-1}.order-sm-last{order:13}.order-sm-0{order:0}.order-sm-1{order:1}.order-sm-2{order:2}.order-sm-3{order:3}.order-sm-4{order:4}.order-sm-5{order:5}.order-sm-6{order:6}.order-sm-7{order:7}.order-sm-8{order:8}.order-sm-9{order:9}.order-sm-10{order:10}.order-sm-11{order:11}.order-sm-12{order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.3333333333%}.offset-sm-2{margin-left:16.6666666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.3333333333%}.offset-sm-5{margin-left:41.6666666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.3333333333%}.offset-sm-8{margin-left:66.6666666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.3333333333%}.offset-sm-11{margin-left:91.6666666667%}}@media (min-width:768px){.col-md{flex-basis:0;flex-grow:1;max-width:100%}.col-md-auto{flex:0 0 auto;width:auto;max-width:100%}.col-md-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-md-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-md-3{flex:0 0 25%;max-width:25%}.col-md-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-md-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-md-6{flex:0 0 50%;max-width:50%}.col-md-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-md-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-md-9{flex:0 0 75%;max-width:75%}.col-md-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-md-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-md-12{flex:0 0 100%;max-width:100%}.order-md-first{order:-1}.order-md-last{order:13}.order-md-0{order:0}.order-md-1{order:1}.order-md-2{order:2}.order-md-3{order:3}.order-md-4{order:4}.order-md-5{order:5}.order-md-6{order:6}.order-md-7{order:7}.order-md-8{order:8}.order-md-9{order:9}.order-md-10{order:10}.order-md-11{order:11}.order-md-12{order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.3333333333%}.offset-md-2{margin-left:16.6666666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.3333333333%}.offset-md-5{margin-left:41.6666666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.3333333333%}.offset-md-8{margin-left:66.6666666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.3333333333%}.offset-md-11{margin-left:91.6666666667%}}@media (min-width:992px){.col-lg{flex-basis:0;flex-grow:1;max-width:100%}.col-lg-auto{flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-lg-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-lg-3{flex:0 0 25%;max-width:25%}.col-lg-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-lg-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-lg-6{flex:0 0 50%;max-width:50%}.col-lg-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-lg-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-lg-9{flex:0 0 75%;max-width:75%}.col-lg-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-lg-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-lg-12{flex:0 0 100%;max-width:100%}.order-lg-first{order:-1}.order-lg-last{order:13}.order-lg-0{order:0}.order-lg-1{order:1}.order-lg-2{order:2}.order-lg-3{order:3}.order-lg-4{order:4}.order-lg-5{order:5}.order-lg-6{order:6}.order-lg-7{order:7}.order-lg-8{order:8}.order-lg-9{order:9}.order-lg-10{order:10}.order-lg-11{order:11}.order-lg-12{order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.3333333333%}.offset-lg-2{margin-left:16.6666666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.3333333333%}.offset-lg-5{margin-left:41.6666666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.3333333333%}.offset-lg-8{margin-left:66.6666666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.3333333333%}.offset-lg-11{margin-left:91.6666666667%}}@media (min-width:1200px){.col-xl{flex-basis:0;flex-grow:1;max-width:100%}.col-xl-auto{flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-xl-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-xl-3{flex:0 0 25%;max-width:25%}.col-xl-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-xl-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-xl-6{flex:0 0 50%;max-width:50%}.col-xl-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-xl-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-xl-9{flex:0 0 75%;max-width:75%}.col-xl-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-xl-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-xl-12{flex:0 0 100%;max-width:100%}.order-xl-first{order:-1}.order-xl-last{order:13}.order-xl-0{order:0}.order-xl-1{order:1}.order-xl-2{order:2}.order-xl-3{order:3}.order-xl-4{order:4}.order-xl-5{order:5}.order-xl-6{order:6}.order-xl-7{order:7}.order-xl-8{order:8}.order-xl-9{order:9}.order-xl-10{order:10}.order-xl-11{order:11}.order-xl-12{order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.3333333333%}.offset-xl-2{margin-left:16.6666666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.3333333333%}.offset-xl-5{margin-left:41.6666666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.3333333333%}.offset-xl-8{margin-left:66.6666666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.3333333333%}.offset-xl-11{margin-left:91.6666666667%}}.table{width:100%;margin-bottom:1rem;color:#626262}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #eff1f7}.table thead th{vertical-align:bottom;border-bottom:2px solid #eff1f7}.table tbody+tbody{border-top:2px solid #eff1f7}.table-sm td,.table-sm th{padding:.3rem}.table-bordered,.table-bordered td,.table-bordered th{border:1px solid #eff1f7}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(34,41,47,.05)}.table-hover tbody tr:hover{color:#626262;background-color:rgba(34,41,47,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#d3e7f9}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#add2f4}.table-hover .table-primary:hover,.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#bddbf6}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#ebeef1}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#dadfe4}.table-hover .table-secondary:hover,.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#dce1e7}.table-success,.table-success>td,.table-success>th{background-color:#c1ebd9}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8cdbb9}.table-hover .table-success:hover,.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#aee5cd}.table-info,.table-info>td,.table-info>th{background-color:#cad9f2}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#9db8e6}.table-hover .table-info:hover,.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#b6caed}.table-warning,.table-warning>td,.table-warning>th{background-color:#f5e6ce}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#edd0a5}.table-hover .table-warning:hover,.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#f1dbb9}.table-danger,.table-danger>td,.table-danger>th{background-color:#f9cfcf}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#f4a6a7}.table-hover .table-danger:hover,.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f6b8b8}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfd}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfbfc}.table-hover .table-light:hover,.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#f0f0f0}.table-dark,.table-dark>td,.table-dark>th{background-color:#c1c3c5}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#8c9093}.table-hover .table-dark:hover,.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b4b6b9}.table-active,.table-active>td,.table-active>th{background-color:rgba(34,41,47,.075)}.table-hover .table-active:hover,.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(23,28,32,.075)}.table .thead-dark th{color:#fff;background-color:#1e1e1e;border-color:#313131}.table .thead-light th{color:#4e5154;background-color:#ededed;border-color:#eff1f7}.table-dark{color:#fff;background-color:#1e1e1e}.table-dark td,.table-dark th,.table-dark thead th{border-color:#313131}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:hsla(0,0%,100%,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:hsla(0,0%,100%,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:34px;padding:.7rem;font-size:.96rem;font-weight:400;line-height:1.25;color:#4e5154;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:5px;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#4e5154;background-color:#fff;border-color:#62a8ea;outline:0;box-shadow:0 3px 10px 0 rgba(0,0,0,.15)}.form-control::-moz-placeholder{color:rgba(0,0,0,.5);opacity:1}.form-control:-ms-input-placeholder{color:rgba(0,0,0,.5);opacity:1}.form-control::placeholder{color:rgba(0,0,0,.5);opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#f5f5f1;opacity:1}select.form-control:focus::-ms-value{color:#4e5154;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.7rem + 1px);padding-bottom:calc(.7rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.25}.col-form-label-lg{padding-top:calc(1rem + 1px);padding-bottom:calc(1rem + 1px);font-size:1.25rem;line-height:1.25}.col-form-label-sm{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:.7rem;line-height:1}.form-control-plaintext{display:block;width:100%;padding-top:.7rem;padding-bottom:.7rem;margin-bottom:0;line-height:1.25;color:#adb5bd;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:2rem;padding:.5rem 1.5rem;font-size:.7rem;line-height:1;border-radius:4px}.form-control-lg{height:calc(1.25em + 2rem + 2px);padding:1rem 2.5rem;font-size:1.25rem;line-height:1.25;border-radius:6px}select.form-control[multiple],select.form-control[size],textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:flex;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#b8c2cc}.form-check-label{margin-bottom:0}.form-check-inline{display:inline-flex;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:smaller;color:#21b978}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:1rem;line-height:1.45;color:#fff;background-color:rgba(33,185,120,.9);border-radius:.5rem}.form-control.is-valid,.was-validated .form-control:valid{border-color:#21b978;padding-right:calc(1.25em + 1.4rem);background-repeat:no-repeat;background-position:100% calc(.3125em + .35rem);background-size:calc(.625em + .7rem) calc(.625em + .7rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#21b978;box-shadow:0 0 0 .2rem rgba(33,185,120,.25)}.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.25em + 1.4rem);background-position:top calc(.3125em + .35rem) right calc(.3125em + .35rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#21b978;padding-right:calc(.75em + 2.75rem);background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%231e1e1e' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .7rem center/8px 10px,url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%2321b978' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E") #fff no-repeat center right 1.7rem/calc(.625em + .7rem) calc(.625em + .7rem)}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#21b978;box-shadow:0 0 0 .2rem rgba(33,185,120,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.form-control-file.is-valid~.valid-feedback,.form-control-file.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip,.was-validated .form-control-file:valid~.valid-feedback,.was-validated .form-control-file:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#21b978}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#21b978}.custom-control-input.is-valid~.custom-control-label:before,.was-validated .custom-control-input:valid~.custom-control-label:before{border-color:#21b978}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label:before,.was-validated .custom-control-input:valid:checked~.custom-control-label:before{border-color:#32db93;background-color:#32db93}.custom-control-input.is-valid:focus~.custom-control-label:before,.was-validated .custom-control-input:valid:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem rgba(33,185,120,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label:before,.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#21b978}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#21b978;box-shadow:0 0 0 .2rem rgba(33,185,120,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:smaller;color:#ea5455}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:1rem;line-height:1.45;color:#fff;background-color:rgba(234,84,85,.9);border-radius:.5rem}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#ea5455;padding-right:calc(1.25em + 1.4rem);background-repeat:no-repeat;background-position:100% calc(.3125em + .35rem);background-size:calc(.625em + .7rem) calc(.625em + .7rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#ea5455;box-shadow:0 0 0 .2rem rgba(234,84,85,.25)}.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.25em + 1.4rem);background-position:top calc(.3125em + .35rem) right calc(.3125em + .35rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#ea5455;padding-right:calc(.75em + 2.75rem);background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%231e1e1e' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .7rem center/8px 10px,url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23ea5455' viewBox='-2 -2 7 7'%3E%3Cpath stroke='%23ea5455' d='M0 0l3 3m0-3L0 3'/%3E%3Ccircle r='.5'/%3E%3Ccircle cx='3' r='.5'/%3E%3Ccircle cy='3' r='.5'/%3E%3Ccircle cx='3' cy='3' r='.5'/%3E%3C/svg%3E") #fff no-repeat center right 1.7rem/calc(.625em + .7rem) calc(.625em + .7rem)}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#ea5455;box-shadow:0 0 0 .2rem rgba(234,84,85,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.form-control-file.is-invalid~.invalid-feedback,.form-control-file.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip,.was-validated .form-control-file:invalid~.invalid-feedback,.was-validated .form-control-file:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#ea5455}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#ea5455}.custom-control-input.is-invalid~.custom-control-label:before,.was-validated .custom-control-input:invalid~.custom-control-label:before{border-color:#ea5455}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label:before,.was-validated .custom-control-input:invalid:checked~.custom-control-label:before{border-color:#f08182;background-color:#f08182}.custom-control-input.is-invalid:focus~.custom-control-label:before,.was-validated .custom-control-input:invalid:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem rgba(234,84,85,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label:before,.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#ea5455}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#ea5455;box-shadow:0 0 0 .2rem rgba(234,84,85,.25)}.form-inline{display:flex;flex-flow:row wrap;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{justify-content:center}.form-inline .form-group,.form-inline label{display:flex;align-items:center;margin-bottom:0}.form-inline .form-group{flex:0 0 auto;flex-flow:row wrap}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:flex;align-items:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{align-items:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#626262;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:0 solid transparent;padding:.9rem 2rem;font-size:1rem;line-height:1;border-radius:.42rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#626262;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(98,168,234,.25)}.btn.disabled,.btn:disabled{opacity:.65}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#2a2e30;background-color:#62a8ea;border-color:#62a8ea}.btn-primary:hover{color:#fff;background-color:#529fe8;border-color:#529fe8}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(90,150,206,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#2a2e30;background-color:#62a8ea;border-color:#62a8ea}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#4c9ce7;border-color:#4c9ce7}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(90,150,206,.5)}.btn-secondary{color:#2a2e30;background-color:#b8c2cc;border-color:#b8c2cc}.btn-secondary:hover{color:#2a2e30;background-color:#aeb9c5;border-color:#aeb9c5}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(163,172,181,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#2a2e30;background-color:#b8c2cc;border-color:#b8c2cc}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#2a2e30;background-color:#a9b5c1;border-color:#a9b5c1}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(163,172,181,.5)}.btn-success{color:#fff;background-color:#21b978;border-color:#21b978}.btn-success:hover{color:#fff;background-color:#1eaa6e;border-color:#1eaa6e}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(66,196,140,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#21b978;border-color:#21b978}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1da36a;border-color:#1da36a}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(66,196,140,.5)}.btn-info{color:#fff;background-color:#4277cf;border-color:#4277cf}.btn-info:hover{color:#fff;background-color:#346dcb;border-color:#346dcb}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(94,139,214,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#4277cf;border-color:#4277cf}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#3269c5;border-color:#3269c5}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(94,139,214,.5)}.btn-warning{color:#2a2e30;background-color:#dda451;border-color:#dda451}.btn-warning:hover{color:#2a2e30;background-color:#da9c42;border-color:#da9c42}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(194,146,76,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#2a2e30;background-color:#dda451;border-color:#dda451}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#2a2e30;background-color:#d9993c;border-color:#d9993c}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(194,146,76,.5)}.btn-danger{color:#fff;background-color:#ea5455;border-color:#ea5455}.btn-danger:hover{color:#fff;background-color:#e84445;border-color:#e84445}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(237,110,111,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#ea5455;border-color:#ea5455}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#e73d3e;border-color:#e73d3e}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(237,110,111,.5)}.btn-light{color:#2a2e30;background-color:#f7f7f9;border-color:#f7f7f9}.btn-light:hover{color:#2a2e30;background-color:#ededf1;border-color:#ededf1}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#2a2e30;background-color:#f7f7f9;border-color:#f7f7f9}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#2a2e30;background-color:#e8e8ee;border-color:#e8e8ee}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#22292f;border-color:#22292f}.btn-dark:hover{color:#fff;background-color:#1b2025;border-color:#1b2025}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(67,73,78,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#22292f;border-color:#22292f}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#171c20;border-color:#171c20}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(67,73,78,.5)}.btn-outline-primary,.btn-outline-primary:hover{color:#62a8ea;border-color:#62a8ea}.btn-outline-primary:hover{background-color:rgba(98,168,234,.1)}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(98,168,234,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#62a8ea;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#2a2e30;background-color:#62a8ea;border-color:#62a8ea}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(98,168,234,.5)}.btn-outline-secondary,.btn-outline-secondary:hover{color:#b8c2cc;border-color:#b8c2cc}.btn-outline-secondary:hover{background-color:rgba(184,194,204,.1)}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(184,194,204,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#b8c2cc;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#2a2e30;background-color:#b8c2cc;border-color:#b8c2cc}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(184,194,204,.5)}.btn-outline-success,.btn-outline-success:hover{color:#21b978;border-color:#21b978}.btn-outline-success:hover{background-color:rgba(33,185,120,.1)}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(33,185,120,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#21b978;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#21b978;border-color:#21b978}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(33,185,120,.5)}.btn-outline-info,.btn-outline-info:hover{color:#4277cf;border-color:#4277cf}.btn-outline-info:hover{background-color:rgba(66,119,207,.1)}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(66,119,207,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#4277cf;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#4277cf;border-color:#4277cf}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(66,119,207,.5)}.btn-outline-warning,.btn-outline-warning:hover{color:#dda451;border-color:#dda451}.btn-outline-warning:hover{background-color:rgba(221,164,81,.1)}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(221,164,81,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#dda451;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#2a2e30;background-color:#dda451;border-color:#dda451}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(221,164,81,.5)}.btn-outline-danger,.btn-outline-danger:hover{color:#ea5455;border-color:#ea5455}.btn-outline-danger:hover{background-color:rgba(234,84,85,.1)}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(234,84,85,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#ea5455;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#ea5455;border-color:#ea5455}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(234,84,85,.5)}.btn-outline-light,.btn-outline-light:hover{color:#f7f7f9;border-color:#f7f7f9}.btn-outline-light:hover{background-color:rgba(247,247,249,.1)}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(247,247,249,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f7f7f9;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#2a2e30;background-color:#f7f7f9;border-color:#f7f7f9}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(247,247,249,.5)}.btn-outline-dark,.btn-outline-dark:hover{color:#22292f;border-color:#22292f}.btn-outline-dark:hover{background-color:rgba(34,41,47,.1)}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(34,41,47,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#22292f;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#22292f;border-color:#22292f}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(34,41,47,.5)}.btn-link{font-weight:400;color:#4c9ce7;text-decoration:none}.btn-link:hover{color:#1f83e1;text-decoration:none}.btn-link.focus,.btn-link:focus{text-decoration:none;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#b8c2cc;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:1rem 2.5rem;font-size:1.25rem;line-height:1.25;border-radius:.4285rem}.btn-group-sm>.btn,.btn-sm{padding:.5rem 1.5rem;font-size:.7rem;line-height:1;border-radius:.4285rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown-toggle{white-space:nowrap}.dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty:after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:10;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.5rem 0 0;font-size:.9375rem;color:#626262;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(34,41,47,.15);border-radius:5px}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.5rem}.dropup .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.5rem}.dropright .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-toggle:after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.5rem}.dropleft .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";display:none}.dropleft .dropdown-toggle:before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty:after{margin-left:0}.dropleft .dropdown-toggle:before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid rgba(0,0,0,.08)}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#2a2e30;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#1e2122;text-decoration:none;background-color:#eff1f7}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#62a8ea}.dropdown-item.disabled,.dropdown-item:disabled{color:#b8c2cc;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:1rem;color:#b8c2cc;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#2a2e30}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;flex:1 1 auto}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:0}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:1.5rem;padding-left:1.5rem}.dropdown-toggle-split:after,.dropright .dropdown-toggle-split:after,.dropup .dropdown-toggle-split:after{margin-left:0}.dropleft .dropdown-toggle-split:before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:1.125rem;padding-left:1.125rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:1.875rem;padding-left:1.875rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:0}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio],.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:flex;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label:after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:flex;align-items:center;padding:.7rem;margin-bottom:0;font-size:.96rem;font-weight:400;line-height:1.25;color:#4e5154;text-align:center;white-space:nowrap;background-color:#ededed;border:1px solid rgba(0,0,0,.2);border-radius:5px}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.25em + 2rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:1rem 2.5rem;font-size:1.25rem;line-height:1.25;border-radius:6px}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:2rem}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.5rem 1.5rem;font-size:.7rem;line-height:1;border-radius:4px}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.7rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.45rem;padding-left:1.5rem}.custom-control-inline{display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label:before{color:#fff;border-color:#62a8ea;background-color:#62a8ea}.custom-control-input:focus~.custom-control-label:before{box-shadow:0 3px 10px 0 rgba(0,0,0,.15)}.custom-control-input:focus:not(:checked)~.custom-control-label:before{border-color:#62a8ea}.custom-control-input:not(:disabled):active~.custom-control-label:before{color:#fff;background-color:#fff;border-color:#fff}.custom-control-input:disabled~.custom-control-label{color:#b8c2cc}.custom-control-input:disabled~.custom-control-label:before{background-color:#f5f5f1}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label:before{pointer-events:none;background-color:#fff;border:1px solid #adb5bd}.custom-control-label:after,.custom-control-label:before{position:absolute;top:.225rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:""}.custom-control-label:after{background:no-repeat 50%/50% 50%}.custom-checkbox .custom-control-label:before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:before{border-color:#62a8ea;background-color:#62a8ea}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(98,168,234,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label:before{background-color:rgba(98,168,234,.5)}.custom-radio .custom-control-label:before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(98,168,234,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label:before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label:after{top:calc(.225rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label:after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label:after{background-color:#fff;transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(98,168,234,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.25em + 1.4rem + 1px);padding:.7rem 1.7rem .7rem .7rem;font-size:.96rem;font-weight:400;line-height:1.25;color:#4e5154;vertical-align:middle;background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%231e1e1e' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .7rem center/8px 10px;background-color:#fff;border:1px solid rgba(0,0,0,.2);border-radius:5px;appearance:none}.custom-select:focus{border-color:#62a8ea;outline:0;box-shadow:0 3px 10px 0 rgba(0,0,0,.15)}.custom-select:focus::-ms-value{color:#4e5154;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.7rem;background-image:none}.custom-select:disabled{color:#b8c2cc;background-color:#ededed}.custom-select::-ms-expand{display:none}.custom-select-sm{height:2rem;padding-top:.5rem;padding-bottom:.5rem;padding-left:1.5rem;font-size:.7rem}.custom-select-lg{height:calc(1.25em + 2rem + 2px);padding-top:1rem;padding-bottom:1rem;padding-left:2.5rem;font-size:1.25rem}.custom-file{display:inline-block;margin-bottom:0}.custom-file,.custom-file-input{position:relative;width:100%;height:calc(1.25em + 1.4rem + 1px)}.custom-file-input{z-index:2;margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#62a8ea;box-shadow:0 3px 10px 0 rgba(0,0,0,.15)}.custom-file-input:disabled~.custom-file-label{background-color:#f5f5f1}.custom-file-input:lang(en)~.custom-file-label:after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]:after{content:attr(data-browse)}.custom-file-label{left:0;z-index:1;height:calc(1.25em + 1.4rem + 1px);font-weight:400;background-color:#fff;border:1px solid rgba(0,0,0,.2);border-radius:5px}.custom-file-label,.custom-file-label:after{position:absolute;top:0;right:0;padding:.7rem;line-height:1.5rem;color:#4e5154}.custom-file-label:after{bottom:0;z-index:3;display:block;height:calc(1.25em + 1.4rem);content:"Browse";background-color:#ededed;border-left:inherit;border-radius:0 5px 5px 0}.custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:none}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 3px 10px 0 rgba(0,0,0,.15)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 3px 10px 0 rgba(0,0,0,.15)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 3px 10px 0 rgba(0,0,0,.15)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#62a8ea;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#fff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dae1e7;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#62a8ea;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{-moz-transition:none;transition:none}}.custom-range::-moz-range-thumb:active{background-color:#fff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dae1e7;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#62a8ea;border:0;border-radius:1rem;-ms-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{-ms-transition:none;transition:none}}.custom-range::-ms-thumb:active{background-color:#fff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower,.custom-range::-ms-fill-upper{background-color:#dae1e7;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label:before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label:before,.custom-file-label,.custom-select{transition:none}}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.357rem .5rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#b8c2cc;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dae1e7}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.5rem;border-top-right-radius:.5rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#ededed #ededed #dae1e7}.nav-tabs .nav-link.disabled{color:#b8c2cc;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#4e5154;background-color:#eff1f7;border-color:#dae1e7 #dae1e7 #eff1f7}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.5rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#62a8ea}.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;padding:.5rem 1rem}.navbar,.navbar>.container,.navbar>.container-fluid{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:-.368rem;padding-bottom:-.368rem;margin-right:1rem;font-size:2rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.357rem;padding-bottom:.357rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:2rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.42rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat 50%;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand,.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(34,41,47,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(34,41,47,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(34,41,47,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(34,41,47,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(34,41,47,.9)}.navbar-light .navbar-toggler{color:rgba(34,41,47,.5);border-color:rgba(34,41,47,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(34, 41, 47, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-light .navbar-text{color:rgba(34,41,47,.5)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(34,41,47,.9)}.navbar-dark .navbar-brand,.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:hsla(0,0%,100%,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:hsla(0,0%,100%,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:hsla(0,0%,100%,.5);border-color:hsla(0,0%,100%,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-dark .navbar-text{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(34,41,47,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem}.card-subtitle,.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{margin-bottom:0;background-color:rgba(34,41,47,.03);border-bottom:1px solid rgba(34,41,47,.125)}.card-header:first-child{border-radius:calc(.5rem - 1px) calc(.5rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(34,41,47,.03);border-top:1px solid rgba(34,41,47,.125)}.card-footer:last-child{border-radius:0 0 calc(.5rem - 1px) calc(.5rem - 1px)}.card-header-tabs{margin-bottom:-.75rem;border-bottom:0}.card-header-pills,.card-header-tabs{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.5rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.5rem - 1px);border-top-right-radius:calc(.5rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.5rem - 1px);border-bottom-left-radius:calc(.5rem - 1px)}.card-deck{display:flex;flex-direction:column}.card-deck .card{margin-bottom:14px}@media (min-width:576px){.card-deck{flex-flow:row wrap;margin-right:-14px;margin-left:-14px}.card-deck .card{display:flex;flex:1 0 0%;flex-direction:column;margin-right:14px;margin-bottom:0;margin-left:14px}}.card-group{display:flex;flex-direction:column}.card-group>.card{margin-bottom:14px}@media (min-width:576px){.card-group{flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-moz-column-count:3;column-count:3;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion>.card{overflow:hidden}.accordion>.card:not(:first-of-type) .card-header:first-child{border-radius:0}.accordion>.card:not(:first-of-type):not(:last-of-type){border-bottom:0;border-radius:0}.accordion>.card:first-of-type{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:last-of-type{border-top-left-radius:0;border-top-right-radius:0}.accordion>.card .card-header{margin-bottom:-1px}.breadcrumb{display:flex;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#ededed;border-radius:.5rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item:before{display:inline-block;padding-right:.5rem;color:#b8c2cc;content:"/"}.breadcrumb-item+.breadcrumb-item:hover:before{text-decoration:underline;text-decoration:none}.breadcrumb-item.active{color:#b8c2cc}.pagination{display:flex;padding-left:0;list-style:none;border-radius:.5rem}.page-link{position:relative;display:block;padding:.65rem .911rem;margin-left:-1px;line-height:1.25;color:#4c9ce7;background-color:#fff;border:1px solid #dae1e7}.page-link:hover{z-index:2;color:#1f83e1;text-decoration:none;background-color:#ededed;border-color:#dae1e7}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(98,168,234,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.5rem;border-bottom-left-radius:.5rem}.page-item:last-child .page-link{border-top-right-radius:.5rem;border-bottom-right-radius:.5rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#62a8ea;border-color:#62a8ea}.page-item.disabled .page-link{color:#b8c2cc;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dae1e7}.pagination-lg .page-link{padding:.5rem 1rem;font-size:2rem;line-height:1.25}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.6rem;border-bottom-left-radius:.6rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.6rem;border-bottom-right-radius:.6rem}.pagination-sm .page-link{padding:.5rem .75rem;font-size:1rem;line-height:1}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.5rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#2a2e30;background-color:#62a8ea}a.badge-primary:focus,a.badge-primary:hover{color:#2a2e30;background-color:#358fe4}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(98,168,234,.5)}.badge-secondary{color:#2a2e30;background-color:#b8c2cc}a.badge-secondary:focus,a.badge-secondary:hover{color:#2a2e30;background-color:#9aa9b7}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(184,194,204,.5)}.badge-success{color:#fff;background-color:#21b978}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#198e5c}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(33,185,120,.5)}.badge-info{color:#fff;background-color:#4277cf}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#2d5fb1}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(66,119,207,.5)}.badge-warning{color:#2a2e30;background-color:#dda451}a.badge-warning:focus,a.badge-warning:hover{color:#2a2e30;background-color:#d28d29}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(221,164,81,.5)}.badge-danger{color:#fff;background-color:#ea5455}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#e42728}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(234,84,85,.5)}.badge-light{color:#2a2e30;background-color:#f7f7f9}a.badge-light:focus,a.badge-light:hover{color:#2a2e30;background-color:#dadae3}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(247,247,249,.5)}.badge-dark{color:#fff;background-color:#22292f}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#0d0f11}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(34,41,47,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#ededed;border-radius:.6rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.5rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close,.alert-dismissible .mailbox-attachment-close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#436b90;background-color:#e0eefb;border-color:#d3e7f9}.alert-primary hr{border-top-color:#bddbf6}.alert-primary .alert-link{color:#33516d}.alert-secondary{color:#707981;background-color:#f1f3f5;border-color:#ebeef1}.alert-secondary hr{border-top-color:#dce1e7}.alert-secondary .alert-link{color:#585f66}.alert-success{color:#217455;background-color:#d3f1e4;border-color:#c1ebd9}.alert-success hr{border-top-color:#aee5cd}.alert-success .alert-link{color:#164c38}.alert-info{color:#335282;background-color:#d9e4f5;border-color:#cad9f2}.alert-info hr{border-top-color:#b6caed}.alert-info .alert-link{color:#253b5d}.alert-warning{color:#836941;background-color:#f8eddc;border-color:#f5e6ce}.alert-warning hr{border-top-color:#f1dbb9}.alert-warning .alert-link{color:#614e30}.alert-danger{color:#8a3f43;background-color:#fbdddd;border-color:#f9cfcf}.alert-danger hr{border-top-color:#f6b8b8}.alert-danger .alert-link{color:#672f32}.alert-light{color:#919498;background-color:#fdfdfe;border-color:#fdfdfd}.alert-light hr{border-top-color:#f0f0f0}.alert-light .alert-link{color:#777a7f}.alert-dark{color:#22292f;background-color:#d3d4d5;border-color:#c1c3c5}.alert-dark hr{border-top-color:#b4b6b9}.alert-dark .alert-link{color:#0d0f11}@-webkit-keyframes progress-bar-stripes{0%{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{0%{background-position:1rem 0}to{background-position:0 0}}.progress{display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#ededed;border-radius:.5rem}.progress-bar{display:flex;flex-direction:column;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#62a8ea;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.media{display:flex;align-items:flex-start}.media-body{flex:1}.list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#4e5154;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#4e5154;text-decoration:none;background-color:#babfc7}.list-group-item-action:active{color:#626262;background-color:#ededed}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(34,41,47,.125)}.list-group-item:first-child{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.5rem;border-bottom-left-radius:.5rem}.list-group-item.disabled,.list-group-item:disabled{color:#b8c2cc;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#62a8ea;border-color:#62a8ea}.list-group-horizontal{flex-direction:row}.list-group-horizontal .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal .list-group-item:first-child{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem;border-top-right-radius:0}.list-group-horizontal .list-group-item:last-child{margin-right:0;border-top-right-radius:.5rem;border-bottom-right-radius:.5rem;border-bottom-left-radius:0}@media (min-width:576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-sm .list-group-item:first-child{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem;border-top-right-radius:0}.list-group-horizontal-sm .list-group-item:last-child{margin-right:0;border-top-right-radius:.5rem;border-bottom-right-radius:.5rem;border-bottom-left-radius:0}}@media (min-width:768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-md .list-group-item:first-child{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem;border-top-right-radius:0}.list-group-horizontal-md .list-group-item:last-child{margin-right:0;border-top-right-radius:.5rem;border-bottom-right-radius:.5rem;border-bottom-left-radius:0}}@media (min-width:992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-lg .list-group-item:first-child{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem;border-top-right-radius:0}.list-group-horizontal-lg .list-group-item:last-child{margin-right:0;border-top-right-radius:.5rem;border-bottom-right-radius:.5rem;border-bottom-left-radius:0}}@media (min-width:1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-xl .list-group-item:first-child{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem;border-top-right-radius:0}.list-group-horizontal-xl .list-group-item:last-child{margin-right:0;border-top-right-radius:.5rem;border-bottom-right-radius:.5rem;border-bottom-left-radius:0}}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush .list-group-item:last-child{margin-bottom:-1px}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{margin-bottom:0;border-bottom:0}.list-group-item-primary{color:#436b90;background-color:#d3e7f9}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#436b90;background-color:#bddbf6}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#436b90;border-color:#436b90}.list-group-item-secondary{color:#707981;background-color:#ebeef1}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#707981;background-color:#dce1e7}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#707981;border-color:#707981}.list-group-item-success{color:#217455;background-color:#c1ebd9}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#217455;background-color:#aee5cd}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#217455;border-color:#217455}.list-group-item-info{color:#335282;background-color:#cad9f2}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#335282;background-color:#b6caed}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#335282;border-color:#335282}.list-group-item-warning{color:#836941;background-color:#f5e6ce}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#836941;background-color:#f1dbb9}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#836941;border-color:#836941}.list-group-item-danger{color:#8a3f43;background-color:#f9cfcf}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#8a3f43;background-color:#f6b8b8}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#8a3f43;border-color:#8a3f43}.list-group-item-light{color:#919498;background-color:#fdfdfd}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#919498;background-color:#f0f0f0}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#919498;border-color:#919498}.list-group-item-dark{color:#22292f;background-color:#c1c3c5}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#22292f;background-color:#b4b6b9}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#22292f;border-color:#22292f}.close,.mailbox-attachment-close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#22292f;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover,.mailbox-attachment-close:hover{color:#22292f;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover,.mailbox-attachment-close:not(:disabled):not(.disabled):focus,.mailbox-attachment-close:not(:disabled):not(.disabled):hover{opacity:.75}button.close,button.mailbox-attachment-close{padding:0;background-color:transparent;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}a.close.disabled,a.disabled.mailbox-attachment-close{pointer-events:none}.toast{max-width:350px;overflow:hidden;font-size:.875rem;background-color:hsla(0,0%,100%,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(34,41,47,.1);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:flex;align-items:center;padding:.25rem .75rem;color:#b8c2cc;background-color:hsla(0,0%,100%,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translateY(-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal-dialog-scrollable{display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered:before{display:block;height:calc(100vh - 1rem);content:""}.modal-dialog-centered.modal-dialog-scrollable{flex-direction:column;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable:before{content:none}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(34,41,47,.2);border-radius:.6rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#22292f}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;align-items:flex-start;justify-content:space-between;padding:1rem;border-bottom:1px solid #ededed;border-top-left-radius:.6rem;border-top-right-radius:.6rem}.modal-header .close,.modal-header .mailbox-attachment-close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.45}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;align-items:center;justify-content:flex-end;padding:1rem;border-top:1px solid #ededed;border-bottom-right-radius:.6rem;border-bottom-left-radius:.6rem}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered:before{height:calc(100vh - 3.5rem)}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:Montserrat,Helvetica,Arial,serif;font-style:normal;font-weight:400;line-height:1.45;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:1rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow:before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow:before,.bs-tooltip-top .arrow:before{top:0;border-width:.4rem .4rem 0;border-top-color:#22292f}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow:before,.bs-tooltip-right .arrow:before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#22292f}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow:before,.bs-tooltip-bottom .arrow:before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#22292f}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow:before,.bs-tooltip-left .arrow:before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#22292f}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#22292f;border-radius:.5rem}.popover{top:0;left:0;z-index:1060;max-width:276px;font-family:Montserrat,Helvetica,Arial,serif;font-style:normal;font-weight:400;line-height:1.45;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:1rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(34,41,47,.2);border-radius:.6rem}.popover,.popover .arrow{position:absolute;display:block}.popover .arrow{width:1rem;height:.5rem;margin:0 .6rem}.popover .arrow:after,.popover .arrow:before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc(-.5rem + -1px)}.bs-popover-auto[x-placement^=top]>.arrow:before,.bs-popover-top>.arrow:before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(34,41,47,.25)}.bs-popover-auto[x-placement^=top]>.arrow:after,.bs-popover-top>.arrow:after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc(-.5rem + -1px);width:.5rem;height:1rem;margin:.6rem 0}.bs-popover-auto[x-placement^=right]>.arrow:before,.bs-popover-right>.arrow:before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(34,41,47,.25)}.bs-popover-auto[x-placement^=right]>.arrow:after,.bs-popover-right>.arrow:after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc(-.5rem + -1px)}.bs-popover-auto[x-placement^=bottom]>.arrow:before,.bs-popover-bottom>.arrow:before{top:0;border-width:0 .5rem .5rem;border-bottom-color:rgba(34,41,47,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow:after,.bs-popover-bottom>.arrow:after{top:1px;border-width:0 .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header:before,.bs-popover-bottom .popover-header:before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc(-.5rem + -1px);width:.5rem;height:1rem;margin:.6rem 0}.bs-popover-auto[x-placement^=left]>.arrow:before,.bs-popover-left>.arrow:before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(34,41,47,.25)}.bs-popover-auto[x-placement^=left]>.arrow:after,.bs-popover-left>.arrow:after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;color:#2c2c2c;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.6rem - 1px);border-top-right-radius:calc(.6rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#626262}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner:after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:no-repeat 50%/100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3E%3C/svg%3E")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:flex;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@-webkit-keyframes spinner-border{to{transform:rotate(1turn)}}@keyframes spinner-border{to{transform:rotate(1turn)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid;border-right:.25em solid transparent;border-radius:50%;-webkit-animation:spinner-border .75s linear infinite;animation:spinner-border .75s linear infinite}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1}}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:spinner-grow .75s linear infinite;animation:spinner-grow .75s linear infinite}.spinner-grow-sm{width:1rem;height:1rem}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#358fe4!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#9aa9b7!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#198e5c!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#2d5fb1!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d28d29!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#e42728!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dadae3!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#0d0f11!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #ededed!important}.border-top{border-top:1px solid #ededed!important}.border-right{border-right:1px solid #ededed!important}.border-bottom{border-bottom:1px solid #ededed!important}.border-left{border-left:1px solid #ededed!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#62a8ea!important}.border-secondary{border-color:#b8c2cc!important}.border-success{border-color:#21b978!important}.border-info{border-color:#4277cf!important}.border-warning{border-color:#dda451!important}.border-danger{border-color:#ea5455!important}.border-light{border-color:#f7f7f9!important}.border-dark{border-color:#22292f!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.25rem!important}.rounded{border-radius:.5rem!important}.rounded-top{border-top-left-radius:.5rem!important}.rounded-right,.rounded-top{border-top-right-radius:.5rem!important}.rounded-bottom,.rounded-right{border-bottom-right-radius:.5rem!important}.rounded-bottom,.rounded-left{border-bottom-left-radius:.5rem!important}.rounded-left{border-top-left-radius:.5rem!important}.rounded-lg{border-radius:.6rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix:after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive:before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9:before{padding-top:42.8571428571%}.embed-responsive-16by9:before{padding-top:56.25%}.embed-responsive-4by3:before{padding-top:75%}.embed-responsive-1by1:before{padding-top:100%}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-fill{flex:1 1 auto!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}@media (min-width:576px){.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}}@media (min-width:768px){.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{top:0}.fixed-footer .footer,.fixed-top{position:fixed;right:0;left:0;z-index:1030}.fixed-footer .footer{bottom:0}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(34,41,47,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(34,41,47,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(34,41,47,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.stretched-link:after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:transparent}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:1rem!important}.mt-1,.my-1{margin-top:1rem!important}.mr-1,.mx-1{margin-right:1rem!important}.mb-1,.my-1{margin-bottom:1rem!important}.ml-1,.mx-1{margin-left:1rem!important}.m-2{margin:1.5rem!important}.mt-2,.my-2{margin-top:1.5rem!important}.mr-2,.mx-2{margin-right:1.5rem!important}.mb-2,.my-2{margin-bottom:1.5rem!important}.ml-2,.mx-2{margin-left:1.5rem!important}.m-3{margin:3rem!important}.mt-3,.my-3{margin-top:3rem!important}.mr-3,.mx-3{margin-right:3rem!important}.mb-3,.my-3{margin-bottom:3rem!important}.ml-3,.mx-3{margin-left:3rem!important}.m-4{margin:3.5rem!important}.mt-4,.my-4{margin-top:3.5rem!important}.mr-4,.mx-4{margin-right:3.5rem!important}.mb-4,.my-4{margin-bottom:3.5rem!important}.ml-4,.mx-4{margin-left:3.5rem!important}.m-5{margin:4rem!important}.mt-5,.my-5{margin-top:4rem!important}.mr-5,.mx-5{margin-right:4rem!important}.mb-5,.my-5{margin-bottom:4rem!important}.ml-5,.mx-5{margin-left:4rem!important}.m-25{margin:.25rem!important}.mt-25,.my-25{margin-top:.25rem!important}.mr-25,.mx-25{margin-right:.25rem!important}.mb-25,.my-25{margin-bottom:.25rem!important}.ml-25,.mx-25{margin-left:.25rem!important}.m-50{margin:.5rem!important}.mt-50,.my-50{margin-top:.5rem!important}.mr-50,.mx-50{margin-right:.5rem!important}.mb-50,.my-50{margin-bottom:.5rem!important}.ml-50,.mx-50{margin-left:.5rem!important}.m-75{margin:.75rem!important}.mt-75,.my-75{margin-top:.75rem!important}.mr-75,.mx-75{margin-right:.75rem!important}.mb-75,.my-75{margin-bottom:.75rem!important}.ml-75,.mx-75{margin-left:.75rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:1rem!important}.pt-1,.py-1{padding-top:1rem!important}.pr-1,.px-1{padding-right:1rem!important}.pb-1,.py-1{padding-bottom:1rem!important}.pl-1,.px-1{padding-left:1rem!important}.p-2{padding:1.5rem!important}.pt-2,.py-2{padding-top:1.5rem!important}.pr-2,.px-2{padding-right:1.5rem!important}.pb-2,.py-2{padding-bottom:1.5rem!important}.pl-2,.px-2{padding-left:1.5rem!important}.p-3{padding:3rem!important}.pt-3,.py-3{padding-top:3rem!important}.pr-3,.px-3{padding-right:3rem!important}.pb-3,.py-3{padding-bottom:3rem!important}.pl-3,.px-3{padding-left:3rem!important}.p-4{padding:3.5rem!important}.pt-4,.py-4{padding-top:3.5rem!important}.pr-4,.px-4{padding-right:3.5rem!important}.pb-4,.py-4{padding-bottom:3.5rem!important}.pl-4,.px-4{padding-left:3.5rem!important}.p-5{padding:4rem!important}.pt-5,.py-5{padding-top:4rem!important}.pr-5,.px-5{padding-right:4rem!important}.pb-5,.py-5{padding-bottom:4rem!important}.pl-5,.px-5{padding-left:4rem!important}.p-25{padding:.25rem!important}.pt-25,.py-25{padding-top:.25rem!important}.pr-25,.px-25{padding-right:.25rem!important}.pb-25,.py-25{padding-bottom:.25rem!important}.pl-25,.px-25{padding-left:.25rem!important}.p-50{padding:.5rem!important}.pt-50,.py-50{padding-top:.5rem!important}.pr-50,.px-50{padding-right:.5rem!important}.pb-50,.py-50{padding-bottom:.5rem!important}.pl-50,.px-50{padding-left:.5rem!important}.p-75{padding:.75rem!important}.pt-75,.py-75{padding-top:.75rem!important}.pr-75,.px-75{padding-right:.75rem!important}.pb-75,.py-75{padding-bottom:.75rem!important}.pl-75,.px-75{padding-left:.75rem!important}.m-n1{margin:-1rem!important}.mt-n1,.my-n1{margin-top:-1rem!important}.mr-n1,.mx-n1{margin-right:-1rem!important}.mb-n1,.my-n1{margin-bottom:-1rem!important}.ml-n1,.mx-n1{margin-left:-1rem!important}.m-n2{margin:-1.5rem!important}.mt-n2,.my-n2{margin-top:-1.5rem!important}.mr-n2,.mx-n2{margin-right:-1.5rem!important}.mb-n2,.my-n2{margin-bottom:-1.5rem!important}.ml-n2,.mx-n2{margin-left:-1.5rem!important}.m-n3{margin:-3rem!important}.mt-n3,.my-n3{margin-top:-3rem!important}.mr-n3,.mx-n3{margin-right:-3rem!important}.mb-n3,.my-n3{margin-bottom:-3rem!important}.ml-n3,.mx-n3{margin-left:-3rem!important}.m-n4{margin:-3.5rem!important}.mt-n4,.my-n4{margin-top:-3.5rem!important}.mr-n4,.mx-n4{margin-right:-3.5rem!important}.mb-n4,.my-n4{margin-bottom:-3.5rem!important}.ml-n4,.mx-n4{margin-left:-3.5rem!important}.m-n5{margin:-4rem!important}.mt-n5,.my-n5{margin-top:-4rem!important}.mr-n5,.mx-n5{margin-right:-4rem!important}.mb-n5,.my-n5{margin-bottom:-4rem!important}.ml-n5,.mx-n5{margin-left:-4rem!important}.m-n25{margin:-.25rem!important}.mt-n25,.my-n25{margin-top:-.25rem!important}.mr-n25,.mx-n25{margin-right:-.25rem!important}.mb-n25,.my-n25{margin-bottom:-.25rem!important}.ml-n25,.mx-n25{margin-left:-.25rem!important}.m-n50{margin:-.5rem!important}.mt-n50,.my-n50{margin-top:-.5rem!important}.mr-n50,.mx-n50{margin-right:-.5rem!important}.mb-n50,.my-n50{margin-bottom:-.5rem!important}.ml-n50,.mx-n50{margin-left:-.5rem!important}.m-n75{margin:-.75rem!important}.mt-n75,.my-n75{margin-top:-.75rem!important}.mr-n75,.mx-n75{margin-right:-.75rem!important}.mb-n75,.my-n75{margin-bottom:-.75rem!important}.ml-n75,.mx-n75{margin-left:-.75rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:1rem!important}.mt-sm-1,.my-sm-1{margin-top:1rem!important}.mr-sm-1,.mx-sm-1{margin-right:1rem!important}.mb-sm-1,.my-sm-1{margin-bottom:1rem!important}.ml-sm-1,.mx-sm-1{margin-left:1rem!important}.m-sm-2{margin:1.5rem!important}.mt-sm-2,.my-sm-2{margin-top:1.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:1.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:1.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:1.5rem!important}.m-sm-3{margin:3rem!important}.mt-sm-3,.my-sm-3{margin-top:3rem!important}.mr-sm-3,.mx-sm-3{margin-right:3rem!important}.mb-sm-3,.my-sm-3{margin-bottom:3rem!important}.ml-sm-3,.mx-sm-3{margin-left:3rem!important}.m-sm-4{margin:3.5rem!important}.mt-sm-4,.my-sm-4{margin-top:3.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:3.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:3.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:3.5rem!important}.m-sm-5{margin:4rem!important}.mt-sm-5,.my-sm-5{margin-top:4rem!important}.mr-sm-5,.mx-sm-5{margin-right:4rem!important}.mb-sm-5,.my-sm-5{margin-bottom:4rem!important}.ml-sm-5,.mx-sm-5{margin-left:4rem!important}.m-sm-25{margin:.25rem!important}.mt-sm-25,.my-sm-25{margin-top:.25rem!important}.mr-sm-25,.mx-sm-25{margin-right:.25rem!important}.mb-sm-25,.my-sm-25{margin-bottom:.25rem!important}.ml-sm-25,.mx-sm-25{margin-left:.25rem!important}.m-sm-50{margin:.5rem!important}.mt-sm-50,.my-sm-50{margin-top:.5rem!important}.mr-sm-50,.mx-sm-50{margin-right:.5rem!important}.mb-sm-50,.my-sm-50{margin-bottom:.5rem!important}.ml-sm-50,.mx-sm-50{margin-left:.5rem!important}.m-sm-75{margin:.75rem!important}.mt-sm-75,.my-sm-75{margin-top:.75rem!important}.mr-sm-75,.mx-sm-75{margin-right:.75rem!important}.mb-sm-75,.my-sm-75{margin-bottom:.75rem!important}.ml-sm-75,.mx-sm-75{margin-left:.75rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:1rem!important}.pt-sm-1,.py-sm-1{padding-top:1rem!important}.pr-sm-1,.px-sm-1{padding-right:1rem!important}.pb-sm-1,.py-sm-1{padding-bottom:1rem!important}.pl-sm-1,.px-sm-1{padding-left:1rem!important}.p-sm-2{padding:1.5rem!important}.pt-sm-2,.py-sm-2{padding-top:1.5rem!important}.pr-sm-2,.px-sm-2{padding-right:1.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:1.5rem!important}.pl-sm-2,.px-sm-2{padding-left:1.5rem!important}.p-sm-3{padding:3rem!important}.pt-sm-3,.py-sm-3{padding-top:3rem!important}.pr-sm-3,.px-sm-3{padding-right:3rem!important}.pb-sm-3,.py-sm-3{padding-bottom:3rem!important}.pl-sm-3,.px-sm-3{padding-left:3rem!important}.p-sm-4{padding:3.5rem!important}.pt-sm-4,.py-sm-4{padding-top:3.5rem!important}.pr-sm-4,.px-sm-4{padding-right:3.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:3.5rem!important}.pl-sm-4,.px-sm-4{padding-left:3.5rem!important}.p-sm-5{padding:4rem!important}.pt-sm-5,.py-sm-5{padding-top:4rem!important}.pr-sm-5,.px-sm-5{padding-right:4rem!important}.pb-sm-5,.py-sm-5{padding-bottom:4rem!important}.pl-sm-5,.px-sm-5{padding-left:4rem!important}.p-sm-25{padding:.25rem!important}.pt-sm-25,.py-sm-25{padding-top:.25rem!important}.pr-sm-25,.px-sm-25{padding-right:.25rem!important}.pb-sm-25,.py-sm-25{padding-bottom:.25rem!important}.pl-sm-25,.px-sm-25{padding-left:.25rem!important}.p-sm-50{padding:.5rem!important}.pt-sm-50,.py-sm-50{padding-top:.5rem!important}.pr-sm-50,.px-sm-50{padding-right:.5rem!important}.pb-sm-50,.py-sm-50{padding-bottom:.5rem!important}.pl-sm-50,.px-sm-50{padding-left:.5rem!important}.p-sm-75{padding:.75rem!important}.pt-sm-75,.py-sm-75{padding-top:.75rem!important}.pr-sm-75,.px-sm-75{padding-right:.75rem!important}.pb-sm-75,.py-sm-75{padding-bottom:.75rem!important}.pl-sm-75,.px-sm-75{padding-left:.75rem!important}.m-sm-n1{margin:-1rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-1rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-1rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-1rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-1rem!important}.m-sm-n2{margin:-1.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-1.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-1.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-1.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-1.5rem!important}.m-sm-n3{margin:-3rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-3rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-3rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-3rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-3rem!important}.m-sm-n4{margin:-3.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-3.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-3.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-3.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-3.5rem!important}.m-sm-n5{margin:-4rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-4rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-4rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-4rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-4rem!important}.m-sm-n25{margin:-.25rem!important}.mt-sm-n25,.my-sm-n25{margin-top:-.25rem!important}.mr-sm-n25,.mx-sm-n25{margin-right:-.25rem!important}.mb-sm-n25,.my-sm-n25{margin-bottom:-.25rem!important}.ml-sm-n25,.mx-sm-n25{margin-left:-.25rem!important}.m-sm-n50{margin:-.5rem!important}.mt-sm-n50,.my-sm-n50{margin-top:-.5rem!important}.mr-sm-n50,.mx-sm-n50{margin-right:-.5rem!important}.mb-sm-n50,.my-sm-n50{margin-bottom:-.5rem!important}.ml-sm-n50,.mx-sm-n50{margin-left:-.5rem!important}.m-sm-n75{margin:-.75rem!important}.mt-sm-n75,.my-sm-n75{margin-top:-.75rem!important}.mr-sm-n75,.mx-sm-n75{margin-right:-.75rem!important}.mb-sm-n75,.my-sm-n75{margin-bottom:-.75rem!important}.ml-sm-n75,.mx-sm-n75{margin-left:-.75rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:1rem!important}.mt-md-1,.my-md-1{margin-top:1rem!important}.mr-md-1,.mx-md-1{margin-right:1rem!important}.mb-md-1,.my-md-1{margin-bottom:1rem!important}.ml-md-1,.mx-md-1{margin-left:1rem!important}.m-md-2{margin:1.5rem!important}.mt-md-2,.my-md-2{margin-top:1.5rem!important}.mr-md-2,.mx-md-2{margin-right:1.5rem!important}.mb-md-2,.my-md-2{margin-bottom:1.5rem!important}.ml-md-2,.mx-md-2{margin-left:1.5rem!important}.m-md-3{margin:3rem!important}.mt-md-3,.my-md-3{margin-top:3rem!important}.mr-md-3,.mx-md-3{margin-right:3rem!important}.mb-md-3,.my-md-3{margin-bottom:3rem!important}.ml-md-3,.mx-md-3{margin-left:3rem!important}.m-md-4{margin:3.5rem!important}.mt-md-4,.my-md-4{margin-top:3.5rem!important}.mr-md-4,.mx-md-4{margin-right:3.5rem!important}.mb-md-4,.my-md-4{margin-bottom:3.5rem!important}.ml-md-4,.mx-md-4{margin-left:3.5rem!important}.m-md-5{margin:4rem!important}.mt-md-5,.my-md-5{margin-top:4rem!important}.mr-md-5,.mx-md-5{margin-right:4rem!important}.mb-md-5,.my-md-5{margin-bottom:4rem!important}.ml-md-5,.mx-md-5{margin-left:4rem!important}.m-md-25{margin:.25rem!important}.mt-md-25,.my-md-25{margin-top:.25rem!important}.mr-md-25,.mx-md-25{margin-right:.25rem!important}.mb-md-25,.my-md-25{margin-bottom:.25rem!important}.ml-md-25,.mx-md-25{margin-left:.25rem!important}.m-md-50{margin:.5rem!important}.mt-md-50,.my-md-50{margin-top:.5rem!important}.mr-md-50,.mx-md-50{margin-right:.5rem!important}.mb-md-50,.my-md-50{margin-bottom:.5rem!important}.ml-md-50,.mx-md-50{margin-left:.5rem!important}.m-md-75{margin:.75rem!important}.mt-md-75,.my-md-75{margin-top:.75rem!important}.mr-md-75,.mx-md-75{margin-right:.75rem!important}.mb-md-75,.my-md-75{margin-bottom:.75rem!important}.ml-md-75,.mx-md-75{margin-left:.75rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:1rem!important}.pt-md-1,.py-md-1{padding-top:1rem!important}.pr-md-1,.px-md-1{padding-right:1rem!important}.pb-md-1,.py-md-1{padding-bottom:1rem!important}.pl-md-1,.px-md-1{padding-left:1rem!important}.p-md-2{padding:1.5rem!important}.pt-md-2,.py-md-2{padding-top:1.5rem!important}.pr-md-2,.px-md-2{padding-right:1.5rem!important}.pb-md-2,.py-md-2{padding-bottom:1.5rem!important}.pl-md-2,.px-md-2{padding-left:1.5rem!important}.p-md-3{padding:3rem!important}.pt-md-3,.py-md-3{padding-top:3rem!important}.pr-md-3,.px-md-3{padding-right:3rem!important}.pb-md-3,.py-md-3{padding-bottom:3rem!important}.pl-md-3,.px-md-3{padding-left:3rem!important}.p-md-4{padding:3.5rem!important}.pt-md-4,.py-md-4{padding-top:3.5rem!important}.pr-md-4,.px-md-4{padding-right:3.5rem!important}.pb-md-4,.py-md-4{padding-bottom:3.5rem!important}.pl-md-4,.px-md-4{padding-left:3.5rem!important}.p-md-5{padding:4rem!important}.pt-md-5,.py-md-5{padding-top:4rem!important}.pr-md-5,.px-md-5{padding-right:4rem!important}.pb-md-5,.py-md-5{padding-bottom:4rem!important}.pl-md-5,.px-md-5{padding-left:4rem!important}.p-md-25{padding:.25rem!important}.pt-md-25,.py-md-25{padding-top:.25rem!important}.pr-md-25,.px-md-25{padding-right:.25rem!important}.pb-md-25,.py-md-25{padding-bottom:.25rem!important}.pl-md-25,.px-md-25{padding-left:.25rem!important}.p-md-50{padding:.5rem!important}.pt-md-50,.py-md-50{padding-top:.5rem!important}.pr-md-50,.px-md-50{padding-right:.5rem!important}.pb-md-50,.py-md-50{padding-bottom:.5rem!important}.pl-md-50,.px-md-50{padding-left:.5rem!important}.p-md-75{padding:.75rem!important}.pt-md-75,.py-md-75{padding-top:.75rem!important}.pr-md-75,.px-md-75{padding-right:.75rem!important}.pb-md-75,.py-md-75{padding-bottom:.75rem!important}.pl-md-75,.px-md-75{padding-left:.75rem!important}.m-md-n1{margin:-1rem!important}.mt-md-n1,.my-md-n1{margin-top:-1rem!important}.mr-md-n1,.mx-md-n1{margin-right:-1rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-1rem!important}.ml-md-n1,.mx-md-n1{margin-left:-1rem!important}.m-md-n2{margin:-1.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-1.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-1.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-1.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-1.5rem!important}.m-md-n3{margin:-3rem!important}.mt-md-n3,.my-md-n3{margin-top:-3rem!important}.mr-md-n3,.mx-md-n3{margin-right:-3rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-3rem!important}.ml-md-n3,.mx-md-n3{margin-left:-3rem!important}.m-md-n4{margin:-3.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-3.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-3.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-3.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-3.5rem!important}.m-md-n5{margin:-4rem!important}.mt-md-n5,.my-md-n5{margin-top:-4rem!important}.mr-md-n5,.mx-md-n5{margin-right:-4rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-4rem!important}.ml-md-n5,.mx-md-n5{margin-left:-4rem!important}.m-md-n25{margin:-.25rem!important}.mt-md-n25,.my-md-n25{margin-top:-.25rem!important}.mr-md-n25,.mx-md-n25{margin-right:-.25rem!important}.mb-md-n25,.my-md-n25{margin-bottom:-.25rem!important}.ml-md-n25,.mx-md-n25{margin-left:-.25rem!important}.m-md-n50{margin:-.5rem!important}.mt-md-n50,.my-md-n50{margin-top:-.5rem!important}.mr-md-n50,.mx-md-n50{margin-right:-.5rem!important}.mb-md-n50,.my-md-n50{margin-bottom:-.5rem!important}.ml-md-n50,.mx-md-n50{margin-left:-.5rem!important}.m-md-n75{margin:-.75rem!important}.mt-md-n75,.my-md-n75{margin-top:-.75rem!important}.mr-md-n75,.mx-md-n75{margin-right:-.75rem!important}.mb-md-n75,.my-md-n75{margin-bottom:-.75rem!important}.ml-md-n75,.mx-md-n75{margin-left:-.75rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:1rem!important}.mt-lg-1,.my-lg-1{margin-top:1rem!important}.mr-lg-1,.mx-lg-1{margin-right:1rem!important}.mb-lg-1,.my-lg-1{margin-bottom:1rem!important}.ml-lg-1,.mx-lg-1{margin-left:1rem!important}.m-lg-2{margin:1.5rem!important}.mt-lg-2,.my-lg-2{margin-top:1.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:1.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:1.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:1.5rem!important}.m-lg-3{margin:3rem!important}.mt-lg-3,.my-lg-3{margin-top:3rem!important}.mr-lg-3,.mx-lg-3{margin-right:3rem!important}.mb-lg-3,.my-lg-3{margin-bottom:3rem!important}.ml-lg-3,.mx-lg-3{margin-left:3rem!important}.m-lg-4{margin:3.5rem!important}.mt-lg-4,.my-lg-4{margin-top:3.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:3.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:3.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:3.5rem!important}.m-lg-5{margin:4rem!important}.mt-lg-5,.my-lg-5{margin-top:4rem!important}.mr-lg-5,.mx-lg-5{margin-right:4rem!important}.mb-lg-5,.my-lg-5{margin-bottom:4rem!important}.ml-lg-5,.mx-lg-5{margin-left:4rem!important}.m-lg-25{margin:.25rem!important}.mt-lg-25,.my-lg-25{margin-top:.25rem!important}.mr-lg-25,.mx-lg-25{margin-right:.25rem!important}.mb-lg-25,.my-lg-25{margin-bottom:.25rem!important}.ml-lg-25,.mx-lg-25{margin-left:.25rem!important}.m-lg-50{margin:.5rem!important}.mt-lg-50,.my-lg-50{margin-top:.5rem!important}.mr-lg-50,.mx-lg-50{margin-right:.5rem!important}.mb-lg-50,.my-lg-50{margin-bottom:.5rem!important}.ml-lg-50,.mx-lg-50{margin-left:.5rem!important}.m-lg-75{margin:.75rem!important}.mt-lg-75,.my-lg-75{margin-top:.75rem!important}.mr-lg-75,.mx-lg-75{margin-right:.75rem!important}.mb-lg-75,.my-lg-75{margin-bottom:.75rem!important}.ml-lg-75,.mx-lg-75{margin-left:.75rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:1rem!important}.pt-lg-1,.py-lg-1{padding-top:1rem!important}.pr-lg-1,.px-lg-1{padding-right:1rem!important}.pb-lg-1,.py-lg-1{padding-bottom:1rem!important}.pl-lg-1,.px-lg-1{padding-left:1rem!important}.p-lg-2{padding:1.5rem!important}.pt-lg-2,.py-lg-2{padding-top:1.5rem!important}.pr-lg-2,.px-lg-2{padding-right:1.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:1.5rem!important}.pl-lg-2,.px-lg-2{padding-left:1.5rem!important}.p-lg-3{padding:3rem!important}.pt-lg-3,.py-lg-3{padding-top:3rem!important}.pr-lg-3,.px-lg-3{padding-right:3rem!important}.pb-lg-3,.py-lg-3{padding-bottom:3rem!important}.pl-lg-3,.px-lg-3{padding-left:3rem!important}.p-lg-4{padding:3.5rem!important}.pt-lg-4,.py-lg-4{padding-top:3.5rem!important}.pr-lg-4,.px-lg-4{padding-right:3.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:3.5rem!important}.pl-lg-4,.px-lg-4{padding-left:3.5rem!important}.p-lg-5{padding:4rem!important}.pt-lg-5,.py-lg-5{padding-top:4rem!important}.pr-lg-5,.px-lg-5{padding-right:4rem!important}.pb-lg-5,.py-lg-5{padding-bottom:4rem!important}.pl-lg-5,.px-lg-5{padding-left:4rem!important}.p-lg-25{padding:.25rem!important}.pt-lg-25,.py-lg-25{padding-top:.25rem!important}.pr-lg-25,.px-lg-25{padding-right:.25rem!important}.pb-lg-25,.py-lg-25{padding-bottom:.25rem!important}.pl-lg-25,.px-lg-25{padding-left:.25rem!important}.p-lg-50{padding:.5rem!important}.pt-lg-50,.py-lg-50{padding-top:.5rem!important}.pr-lg-50,.px-lg-50{padding-right:.5rem!important}.pb-lg-50,.py-lg-50{padding-bottom:.5rem!important}.pl-lg-50,.px-lg-50{padding-left:.5rem!important}.p-lg-75{padding:.75rem!important}.pt-lg-75,.py-lg-75{padding-top:.75rem!important}.pr-lg-75,.px-lg-75{padding-right:.75rem!important}.pb-lg-75,.py-lg-75{padding-bottom:.75rem!important}.pl-lg-75,.px-lg-75{padding-left:.75rem!important}.m-lg-n1{margin:-1rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-1rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-1rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-1rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-1rem!important}.m-lg-n2{margin:-1.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-1.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-1.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-1.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-1.5rem!important}.m-lg-n3{margin:-3rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-3rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-3rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-3rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-3rem!important}.m-lg-n4{margin:-3.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-3.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-3.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-3.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-3.5rem!important}.m-lg-n5{margin:-4rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-4rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-4rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-4rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-4rem!important}.m-lg-n25{margin:-.25rem!important}.mt-lg-n25,.my-lg-n25{margin-top:-.25rem!important}.mr-lg-n25,.mx-lg-n25{margin-right:-.25rem!important}.mb-lg-n25,.my-lg-n25{margin-bottom:-.25rem!important}.ml-lg-n25,.mx-lg-n25{margin-left:-.25rem!important}.m-lg-n50{margin:-.5rem!important}.mt-lg-n50,.my-lg-n50{margin-top:-.5rem!important}.mr-lg-n50,.mx-lg-n50{margin-right:-.5rem!important}.mb-lg-n50,.my-lg-n50{margin-bottom:-.5rem!important}.ml-lg-n50,.mx-lg-n50{margin-left:-.5rem!important}.m-lg-n75{margin:-.75rem!important}.mt-lg-n75,.my-lg-n75{margin-top:-.75rem!important}.mr-lg-n75,.mx-lg-n75{margin-right:-.75rem!important}.mb-lg-n75,.my-lg-n75{margin-bottom:-.75rem!important}.ml-lg-n75,.mx-lg-n75{margin-left:-.75rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:1rem!important}.mt-xl-1,.my-xl-1{margin-top:1rem!important}.mr-xl-1,.mx-xl-1{margin-right:1rem!important}.mb-xl-1,.my-xl-1{margin-bottom:1rem!important}.ml-xl-1,.mx-xl-1{margin-left:1rem!important}.m-xl-2{margin:1.5rem!important}.mt-xl-2,.my-xl-2{margin-top:1.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:1.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:1.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:1.5rem!important}.m-xl-3{margin:3rem!important}.mt-xl-3,.my-xl-3{margin-top:3rem!important}.mr-xl-3,.mx-xl-3{margin-right:3rem!important}.mb-xl-3,.my-xl-3{margin-bottom:3rem!important}.ml-xl-3,.mx-xl-3{margin-left:3rem!important}.m-xl-4{margin:3.5rem!important}.mt-xl-4,.my-xl-4{margin-top:3.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:3.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:3.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:3.5rem!important}.m-xl-5{margin:4rem!important}.mt-xl-5,.my-xl-5{margin-top:4rem!important}.mr-xl-5,.mx-xl-5{margin-right:4rem!important}.mb-xl-5,.my-xl-5{margin-bottom:4rem!important}.ml-xl-5,.mx-xl-5{margin-left:4rem!important}.m-xl-25{margin:.25rem!important}.mt-xl-25,.my-xl-25{margin-top:.25rem!important}.mr-xl-25,.mx-xl-25{margin-right:.25rem!important}.mb-xl-25,.my-xl-25{margin-bottom:.25rem!important}.ml-xl-25,.mx-xl-25{margin-left:.25rem!important}.m-xl-50{margin:.5rem!important}.mt-xl-50,.my-xl-50{margin-top:.5rem!important}.mr-xl-50,.mx-xl-50{margin-right:.5rem!important}.mb-xl-50,.my-xl-50{margin-bottom:.5rem!important}.ml-xl-50,.mx-xl-50{margin-left:.5rem!important}.m-xl-75{margin:.75rem!important}.mt-xl-75,.my-xl-75{margin-top:.75rem!important}.mr-xl-75,.mx-xl-75{margin-right:.75rem!important}.mb-xl-75,.my-xl-75{margin-bottom:.75rem!important}.ml-xl-75,.mx-xl-75{margin-left:.75rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:1rem!important}.pt-xl-1,.py-xl-1{padding-top:1rem!important}.pr-xl-1,.px-xl-1{padding-right:1rem!important}.pb-xl-1,.py-xl-1{padding-bottom:1rem!important}.pl-xl-1,.px-xl-1{padding-left:1rem!important}.p-xl-2{padding:1.5rem!important}.pt-xl-2,.py-xl-2{padding-top:1.5rem!important}.pr-xl-2,.px-xl-2{padding-right:1.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:1.5rem!important}.pl-xl-2,.px-xl-2{padding-left:1.5rem!important}.p-xl-3{padding:3rem!important}.pt-xl-3,.py-xl-3{padding-top:3rem!important}.pr-xl-3,.px-xl-3{padding-right:3rem!important}.pb-xl-3,.py-xl-3{padding-bottom:3rem!important}.pl-xl-3,.px-xl-3{padding-left:3rem!important}.p-xl-4{padding:3.5rem!important}.pt-xl-4,.py-xl-4{padding-top:3.5rem!important}.pr-xl-4,.px-xl-4{padding-right:3.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:3.5rem!important}.pl-xl-4,.px-xl-4{padding-left:3.5rem!important}.p-xl-5{padding:4rem!important}.pt-xl-5,.py-xl-5{padding-top:4rem!important}.pr-xl-5,.px-xl-5{padding-right:4rem!important}.pb-xl-5,.py-xl-5{padding-bottom:4rem!important}.pl-xl-5,.px-xl-5{padding-left:4rem!important}.p-xl-25{padding:.25rem!important}.pt-xl-25,.py-xl-25{padding-top:.25rem!important}.pr-xl-25,.px-xl-25{padding-right:.25rem!important}.pb-xl-25,.py-xl-25{padding-bottom:.25rem!important}.pl-xl-25,.px-xl-25{padding-left:.25rem!important}.p-xl-50{padding:.5rem!important}.pt-xl-50,.py-xl-50{padding-top:.5rem!important}.pr-xl-50,.px-xl-50{padding-right:.5rem!important}.pb-xl-50,.py-xl-50{padding-bottom:.5rem!important}.pl-xl-50,.px-xl-50{padding-left:.5rem!important}.p-xl-75{padding:.75rem!important}.pt-xl-75,.py-xl-75{padding-top:.75rem!important}.pr-xl-75,.px-xl-75{padding-right:.75rem!important}.pb-xl-75,.py-xl-75{padding-bottom:.75rem!important}.pl-xl-75,.px-xl-75{padding-left:.75rem!important}.m-xl-n1{margin:-1rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-1rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-1rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-1rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-1rem!important}.m-xl-n2{margin:-1.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-1.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-1.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-1.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-1.5rem!important}.m-xl-n3{margin:-3rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-3rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-3rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-3rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-3rem!important}.m-xl-n4{margin:-3.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-3.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-3.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-3.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-3.5rem!important}.m-xl-n5{margin:-4rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-4rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-4rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-4rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-4rem!important}.m-xl-n25{margin:-.25rem!important}.mt-xl-n25,.my-xl-n25{margin-top:-.25rem!important}.mr-xl-n25,.mx-xl-n25{margin-right:-.25rem!important}.mb-xl-n25,.my-xl-n25{margin-bottom:-.25rem!important}.ml-xl-n25,.mx-xl-n25{margin-left:-.25rem!important}.m-xl-n50{margin:-.5rem!important}.mt-xl-n50,.my-xl-n50{margin-top:-.5rem!important}.mr-xl-n50,.mx-xl-n50{margin-right:-.5rem!important}.mb-xl-n50,.my-xl-n50{margin-bottom:-.5rem!important}.ml-xl-n50,.mx-xl-n50{margin-left:-.5rem!important}.m-xl-n75{margin:-.75rem!important}.mt-xl-n75,.my-xl-n75{margin-top:-.75rem!important}.mr-xl-n75,.mx-xl-n75{margin-right:-.75rem!important}.mb-xl-n75,.my-xl-n75{margin-bottom:-.75rem!important}.ml-xl-n75,.mx-xl-n75{margin-left:-.75rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-monospace{font-family:Montserrat,Helvetica,Arial,serif!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#62a8ea!important}a.text-primary:focus,a.text-primary:hover{color:#1f83e1!important}.text-secondary{color:#b8c2cc!important}a.text-secondary:focus,a.text-secondary:hover{color:#8b9cac!important}.text-success{color:#21b978!important}a.text-success:focus,a.text-success:hover{color:#15784e!important}.text-info{color:#4277cf!important}a.text-info:focus,a.text-info:hover{color:#28549d!important}.text-warning{color:#dda451!important}a.text-warning:focus,a.text-warning:hover{color:#bd7f25!important}.text-danger{color:#ea5455!important}a.text-danger:focus,a.text-danger:hover{color:#d71a1c!important}.text-light{color:#f7f7f9!important}a.text-light:focus,a.text-light:hover{color:#cbcbd8!important}.text-dark{color:#22292f!important}a.text-dark:focus,a.text-dark:hover{color:#020203!important}.text-body{color:#626262!important}.text-muted{color:#b8c2cc!important}.text-black-50{color:rgba(34,41,47,.5)!important}.text-white-50{color:hsla(0,0%,100%,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;overflow-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,:after,:before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]:after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}.container,body{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #22292f}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dae1e7!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#eff1f7}.table .thead-dark th{color:inherit;border-color:#eff1f7}}code{padding:.1rem .4rem;font-size:90%;color:#ff8acc;background-color:#eee;border-radius:.25rem}pre{background-color:#f7f7f9}pre code{background-color:transparent!important}.form-control::-moz-placeholder{font-size:.85rem;color:rgba(34,41,47,.4);-moz-transition:all .2s ease;transition:all .2s ease}.form-control:-ms-input-placeholder{font-size:.85rem;color:rgba(34,41,47,.4);-ms-transition:all .2s ease;transition:all .2s ease}.form-control::placeholder{font-size:.85rem;color:rgba(34,41,47,.4);transition:all .2s ease}.form-control:-ms-input-placeholder{color:#abb6d5}.form-control:focus::-moz-placeholder{transform:translate(5px);-moz-transition:all .2s ease;transition:all .2s ease}.form-control:focus:-ms-input-placeholder{transform:translate(5px);-ms-transition:all .2s ease;transition:all .2s ease}.form-control:focus::placeholder{transform:translate(5px);transition:all .2s ease}.form-control:focus~.form-control-position i{color:#62a8ea}label{color:#2b3656;font-size:.85rem;margin-bottom:0;padding-left:.2rem}textarea.form-control{line-height:1.6rem;font-size:1rem}.form-group{margin-bottom:1.5rem}.form-control{border:1px solid #c6cde3;color:#3c4b78}.form-section{color:#b8c2cc;line-height:3rem;margin-bottom:20px;border-bottom:1px solid #b8c2cc}.form-section i{font-size:20px;margin-left:5px;margin-right:10px}.form-actions{border-top:1px solid #cdd3e6;padding:20px 0;margin-top:20px}.form-actions.filled{background-color:#eff1f7}.form-actions.center{text-align:center}.form-actions.right{text-align:right}.form-actions.top{border-top:0;border-bottom:1px solid #cdd3e6;margin-top:0;margin-bottom:20px}@media (max-width:767.98px){.form-actions .buttons-group{float:left!important;margin-bottom:10px}}@media (min-width:576px){.form-horizontal .form-group .label-control{text-align:right}}.form-control.form-control-lg{padding:1rem}.form-control.form-control-lg::-moz-placeholder{font-size:1.25rem}.form-control.form-control-lg:-ms-input-placeholder{font-size:1.25rem}.form-control.form-control-lg::placeholder{font-size:1.25rem}.form-control.form-control-sm{padding:.6rem}.form-control.form-control-sm::-moz-placeholder{font-size:.7rem}.form-control.form-control-sm:-ms-input-placeholder{font-size:.7rem}.form-control.form-control-sm::placeholder{font-size:.7rem}.custom-file-label{padding:.4rem .7rem}.custom-file-label:after{padding:.4rem .7rem;height:auto}select.form-control:not([multiple=multiple]){background-position:calc(100% - 12px) 13px,calc(100% - 20px) 13px,100% 0;background-size:12px 12px,10px 10px;background-repeat:no-repeat;-webkit-appearance:none;-moz-appearance:none;padding-right:1.5rem}.custom-select{-moz-appearance:none;-webkit-appearance:none}.input-group-addon{background-color:#eceff1;border-color:#babfc7}.custom-control-label:after,.custom-control-label:before{width:1.143rem;height:1.143rem;top:.08rem}.custom-control-input:not(:disabled):active~.custom-control-label:before{background-color:#62a8ea;border-color:#62a8ea}.form-label-group{position:relative;margin-bottom:1.5rem}.form-label-group .form-control-lg~label{font-size:1.25rem;padding:1rem}.form-label-group .form-control-sm~label{font-size:.7rem}.form-label-group>label{position:absolute;top:0;left:0;display:block;transition:all .25s ease-in-out;padding:.6rem;pointer-events:none;cursor:text;color:rgba(34,41,47,.4);font-size:.85rem;opacity:0}.form-label-group>input,.form-label-group textarea{padding:.6rem}.form-label-group>input:focus:not(:-moz-placeholder-shown)~label,.form-label-group>input:not(:active):not(:-moz-placeholder-shown)~label,.form-label-group textarea:focus:not(:-moz-placeholder-shown)~label,.form-label-group textarea:not(:active):not(:-moz-placeholder-shown)~label{color:#62a8ea!important;-moz-transition:all .25s ease-in-out;transition:all .25s ease-in-out;opacity:1}.form-label-group>input:focus:not(:-ms-input-placeholder)~label,.form-label-group>input:not(:active):not(:-ms-input-placeholder)~label,.form-label-group textarea:focus:not(:-ms-input-placeholder)~label,.form-label-group textarea:not(:active):not(:-ms-input-placeholder)~label{color:#62a8ea!important;-ms-transition:all .25s ease-in-out;transition:all .25s ease-in-out;opacity:1}.form-label-group>input:focus:not(:placeholder-shown)~label,.form-label-group>input:not(:active):not(:placeholder-shown)~label,.form-label-group textarea:focus:not(:placeholder-shown)~label,.form-label-group textarea:not(:active):not(:placeholder-shown)~label{color:#62a8ea!important;transition:all .25s ease-in-out;opacity:1}.form-label-group>input:not(:focus):not(:-moz-placeholder-shown)~label,.form-label-group textarea:not(:focus):not(:-moz-placeholder-shown)~label{color:rgba(34,41,47,.4)!important}.form-label-group>input:not(:focus):not(:-ms-input-placeholder)~label,.form-label-group textarea:not(:focus):not(:-ms-input-placeholder)~label{color:rgba(34,41,47,.4)!important}.form-label-group>input:not(:focus):not(:placeholder-shown)~label,.form-label-group textarea:not(:focus):not(:placeholder-shown)~label{color:rgba(34,41,47,.4)!important}.form-label-group>input:not(:-moz-placeholder-shown)~label,.form-label-group textarea:not(:-moz-placeholder-shown)~label{padding:.25rem 0;font-size:.7rem;top:-20px;left:3px}.form-label-group>input:not(:-ms-input-placeholder)~label,.form-label-group textarea:not(:-ms-input-placeholder)~label{padding:.25rem 0;font-size:.7rem;top:-20px;left:3px}.form-label-group>input:not(:placeholder-shown)~label,.form-label-group textarea:not(:placeholder-shown)~label{padding:.25rem 0;font-size:.7rem;top:-20px;left:3px}.form-label-group.has-icon-left>label{left:36px}.vs-checkbox-con{position:relative;display:flex;align-items:center;justify-content:flex-start;margin:.25rem 0}.vs-checkbox-con input{position:absolute;width:100%;height:100%;opacity:0;z-index:200;cursor:pointer;top:0}.vs-checkbox-con input:checked~.vs-checkbox{transform:rotate(0deg);border-color:#62a8ea}.vs-checkbox-con input:checked~.vs-checkbox .vs-checkbox--check{transform:translate(0);background-color:#62a8ea}.vs-checkbox-con input:checked~.vs-checkbox .vs-checkbox--check .vs-icon{transform:translate(0);line-height:1.2;opacity:1}.vs-checkbox-con input:checked~.vs-checkbox.vs-checkbox-sm .vs-checkbox--check .vs-icon{font-size:.75rem}.vs-checkbox-con input:checked~.vs-checkbox.vs-checkbox-lg .vs-checkbox--check .vs-icon{font-size:1.2rem}.vs-checkbox-con input:active:checked+.vs-checkbox .vs-checkbox--check{transform:translate(3px);background-color:#62a8ea}.vs-checkbox-con input:active:checked+.vs-checkbox .vs-checkbox--check .vs-icon{opacity:1;transform:translate(6px)}.vs-checkbox-con input:disabled{cursor:default;pointer-events:none}.vs-checkbox-con input:disabled+.vs-checkbox{cursor:default;opacity:.5}.vs-checkbox-con .vs-checkbox{cursor:pointer;position:relative;width:20px;height:20px;border:2px solid #b8c2cc;border-radius:2px;transform:rotate(-90deg);transition:all .2s ease;overflow:hidden;margin-right:.5rem}.vs-checkbox-con .vs-checkbox.vs-checkbox-sm{width:15px;height:15px}.vs-checkbox-con .vs-checkbox.vs-checkbox-lg{width:24px;height:24px}.vs-checkbox-con .vs-checkbox .vs-checkbox--check{width:100%;height:100%;position:absolute;left:0;transform:translate(100%);transform-origin:right;transition:all .2s ease;z-index:10}.vs-checkbox-con .vs-checkbox .vs-checkbox--check .vs-icon{display:flex;justify-content:center;align-items:center;color:#fff}.vs-radio-con{position:relative;display:flex;align-items:center;justify-content:flex-start;margin:.25rem 0}.vs-radio-con input{position:absolute;width:100%;height:100%;opacity:0;z-index:200;cursor:pointer}.vs-radio-con input:checked~.vs-radio{transform:rotate(0deg);outline:0}.vs-radio-con input:checked~.vs-radio .vs-radio--circle{background:#62a8ea;box-shadow:0 3px 12px 0 rgba(98,168,234,.4);opacity:1;transform:scale(1)}.vs-radio-con input:checked~.vs-radio .vs-radio--border{opacity:0;transform:scale(.3)}.vs-radio-con input:disabled{cursor:default;pointer-events:none}.vs-radio-con input:disabled+.vs-radio{cursor:default;opacity:.5}.vs-radio-con input:active~.vs-radio{transform:scale(1.1)}.vs-radio-con .vs-radio{cursor:pointer;position:relative;width:18px;height:18px;transition:all .2s ease;margin-right:.5rem}.vs-radio-con .vs-radio.vs-radio-sm{width:13px;height:13px}.vs-radio-con .vs-radio.vs-radio-lg{width:22px;height:22px}.vs-radio-con .vs-radio .vs-radio--border,.vs-radio-con .vs-radio .vs-radio--circle{width:100%;height:100%;position:absolute;left:0;transition:all .25s ease;top:0;border-radius:50%}.vs-radio-con .vs-radio .vs-radio--border{background:transparent;border:2px solid #b8c2cc}.vs-radio-con .vs-radio .vs-radio--circle{opacity:0;transform:scale(.1)}.counter-value{background-color:#62a8ea;color:#fff;padding:1px 6px;font-size:.6rem;border-radius:0 0 5px 5px;margin-right:1rem}.form-group.input-divider-left .form-control-position i{padding:.2rem .5rem;border-right:1px solid #c6cde3}.form-group.input-divider-right .form-control-position i{padding:.2rem .5rem;border-left:1px solid #c6cde3}.input-group-lg .form-control,.input-group-sm .form-control{padding:.7rem}.bootstrap-touchspin.input-group{width:8.4rem;align-items:center}.bootstrap-touchspin.input-group .form-control{padding:5px;height:auto;border:0;background-color:#eff1f7;border-radius:5px!important;text-align:center;font-weight:500}.bootstrap-touchspin.input-group .form-control:focus{z-index:1;box-shadow:none}.bootstrap-touchspin .bootstrap-touchspin-injected{margin:0!important}.bootstrap-touchspin .bootstrap-touchspin-injected .bootstrap-touchspin-down,.bootstrap-touchspin .bootstrap-touchspin-injected .bootstrap-touchspin-up{padding:0;min-width:22px;min-height:22px;border-radius:5px!important;position:relative}.bootstrap-touchspin .bootstrap-touchspin-injected .bootstrap-touchspin-down i,.bootstrap-touchspin .bootstrap-touchspin-injected .bootstrap-touchspin-up i{font-size:.8rem;position:relative;top:-1px}.bootstrap-touchspin .bootstrap-touchspin-injected .bootstrap-touchspin-down{left:12px}.bootstrap-touchspin .bootstrap-touchspin-injected .bootstrap-touchspin-up{right:12px}.bootstrap-touchspin.disabled-touchspin .bootstrap-touchspin-down,.bootstrap-touchspin.disabled-touchspin .bootstrap-touchspin-up{background-color:rgba(0,0,0,.5)!important;cursor:default;opacity:.5}.bootstrap-touchspin.input-group-lg{width:9.375rem}.bootstrap-touchspin.input-group-lg .touchspin.form-control{height:auto!important}.bootstrap-touchspin.input-group-lg .bootstrap-touchspin-down i,.bootstrap-touchspin.input-group-lg .bootstrap-touchspin-up i{font-size:1rem}.bootstrap-touchspin.input-group-sm{width:6.25rem}.bootstrap-touchspin.input-group-sm .touchspin.form-control{height:auto!important}.bootstrap-touchspin.input-group-sm .bootstrap-touchspin-injected .bootstrap-touchspin-down,.bootstrap-touchspin.input-group-sm .bootstrap-touchspin-injected .bootstrap-touchspin-up{min-width:16px;min-height:16px;padding-top:2.2px}.bootstrap-touchspin.input-group-sm .bootstrap-touchspin-injected .bootstrap-touchspin-down i,.bootstrap-touchspin.input-group-sm .bootstrap-touchspin-injected .bootstrap-touchspin-up i{font-size:.6rem}.btn.disabled-max-min{background-color:rgba(0,0,0,.5)!important;cursor:default}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none}.bootstrap-touchspin.input-group input[type=number]{-moz-appearance:textfield}@media (-ms-high-contrast:none),screen and (-ms-high-contrast:active){.form-label-group label{display:none}select.form-control:not([multiple=multiple]){background:none}.custom-file-label:after{padding:1.34rem .7rem 1.25rem}}.picker__input.form-control{background-color:#fff}.input-group .form-control{height:auto}.input-group .input-group-append .dropdown-toggle:after,.input-group .input-group-prepend .dropdown-toggle:after{left:0}.input-group .input-group-append .vs-checkbox,.input-group .input-group-append .vs-checkbox-con,.input-group .input-group-append .vs-radio,.input-group .input-group-append .vs-radio-con,.input-group .input-group-prepend .vs-checkbox,.input-group .input-group-prepend .vs-checkbox-con,.input-group .input-group-prepend .vs-radio,.input-group .input-group-prepend .vs-radio-con{margin:0}.input-group.input-group-lg .form-control::-moz-placeholder{font-size:1.25rem}.input-group.input-group-lg .form-control:-ms-input-placeholder{font-size:1.25rem}.input-group.input-group-lg .form-control::placeholder{font-size:1.25rem}.input-group.input-group-lg .input-group-append .btn,.input-group.input-group-lg .input-group-prepend .btn{line-height:1.3;font-size:1.3rem}.input-group.input-group-sm .form-control::-moz-placeholder{font-size:.7rem}.input-group.input-group-sm .form-control:-ms-input-placeholder{font-size:.7rem}.input-group.input-group-sm .form-control::placeholder{font-size:.7rem}.btn:disabled{cursor:default}.btn.btn-white{background-color:#fff;color:#626262}.btn.btn-white:active,.btn.btn-white:focus,.btn.btn-white:hover{color:#626262!important}.btn.btn-white.btn-primary{background-color:#62a8ea}.btn[class*=bg-gradient-]:hover{box-shadow:0 8px 25px -8px #aaa}.btn.btn-secondary{color:#fff}.btn.btn-secondary:hover{box-shadow:0 8px 25px -8px #b8c2cc}.btn.btn-dark:hover{box-shadow:0 8px 25px -8px #22292f}.btn.btn-light:hover{box-shadow:0 8px 25px -8px #f7f7f9}.btn.btn-outline-dark,.btn.btn-outline-light,.btn.btn-outline-secondary{border:1px solid}.btn[class*=btn-outline-]{padding-top:calc(.9rem - 1px);padding-bottom:calc(.9rem - 1px)}.btn-group-sm>.btn[class*=btn-outline-],.btn[class*=btn-outline-].btn-sm{padding-top:calc(.5rem - 1px);padding-bottom:calc(.5rem - 1px)}.btn.btn-icon{padding:.715rem .736rem}.btn-group-sm>.btn.btn-icon,.btn.btn-sm.btn-icon{padding:.5rem}.btn-group-lg>.btn.btn-icon,.btn.btn-lg.btn-icon{padding:1rem}.btn.btn-round{border-radius:2rem}.btn.active,.btn.focus,.btn:active,.btn:focus{outline:none;box-shadow:none!important}.btn.btn-icon i{font-size:1.1rem}.btn-white:hover,.btn.btn-outline-white:hover{color:#22292f!important}[type=reset],[type=submit],button,html [type=button]{cursor:pointer}.waves-button-input{padding:unset}.dropdown.show .btn-outline-light.dropdown-toggle,.dropdown.show .btn-outline-warning.dropdown-toggle{color:#fff}.dropdown .btn:not(.btn-sm):not(.btn-lg),.dropdown .btn:not(.btn-sm):not(.btn-lg).dropdown-toggle{padding:.85rem 1.5rem}.dropdown .btn:not(.btn-sm):not(.btn-lg).btn-round,.dropdown .btn:not(.btn-sm):not(.btn-lg).dropdown-toggle.btn-round{border-radius:2rem}.dropdown .btn.dropdown-toggle.dropdown-toggle-split{padding:.85rem 1rem;border-left-color:hsla(0,0%,100%,.2)!important;border-top-left-radius:0;border-bottom-left-radius:0}.dropdown [class*=btn-outline-].dropdown-toggle.dropdown-toggle-split{border-left:0!important}.dropdown [class*=btn-outline-].dropdown-toggle.dropdown-toggle-split:active{color:#fff}.dropdown .dropdown-menu{border:1px solid rgba(86,86,86,.05);border-radius:5px;transform:scaleY(0);box-shadow:0 5px 25px rgba(86,86,86,.1);min-width:8rem}.dropdown .dropdown-menu:before{content:"";position:absolute;top:-1px;left:1.2rem;width:.75rem;height:.75rem;display:block;background:#fff;transform:rotate(45deg) translate(-7px);border-top:1px solid rgba(86,86,86,.1);border-left:1px solid rgba(86,86,86,.1);z-index:10;box-sizing:border-box}.dropdown .dropdown-menu.dropdown-menu-right:before{right:.6rem;left:auto}.dropdown .dropdown-menu .dropdown-header{padding:.714rem 1.428rem;margin-top:.714rem}.dropdown .dropdown-menu .dropdown-item{padding:.5rem 1rem;color:#626262;width:auto;cursor:pointer}.dropdown .dropdown-menu .dropdown-item:hover{background-color:#eff1f7;color:#62a8ea}.dropdown .dropdown-menu .dropdown-item.active{color:#fff}.dropdown .dropdown-menu .dropdown-item:active{background-color:transparent;color:#626262}.dropdown i{margin-right:.5rem}.dropdown.no-arrow .dropdown-toggle:after{display:none}.dropdown.no-arrow .dropdown-toggle i{margin-right:0}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown .dropdown-menu .dropdown-item,.dropleft .dropdown-menu .dropdown-item,.dropright .dropdown-menu .dropdown-item,.dropup .dropdown-menu .dropdown-item{padding:.714rem 1.428rem}.show>.dropdown-menu{transform:scale(1);opacity:1;display:block}.dropdown-toggle:after{border:none!important;font-family:feather;content:"\E842"!important;position:relative;top:1px;right:0;left:.714rem;padding:0;margin:0;vertical-align:0}.dropdown-toggle.dropdown-toggle-split{border-left:1px solid hsla(0,0%,100%,.2)}.dropdown-toggle.dropdown-toggle-split:after{left:0}.dropdown-toggle.nav-hide-arrow:after{display:none}.dropdown-toggle:focus{outline:0}.btn-secondary~.dropdown-menu .dropdown-item.active,.btn-secondary~.dropdown-menu .dropdown-item:hover{background-color:#ccc}.dropup{position:relative}.dropup .btn,.dropup .btn.dropdown-toggle{padding:.85rem 1.5rem}.dropup .btn.dropdown-toggle.dropdown-toggle-split{padding:.85rem 1rem;border-color:hsla(0,0%,100%,.2)!important}.dropup .dropdown-toggle:after{content:"\E845"!important;vertical-align:.05rem}.dropup .dropdown-menu:before{content:"";position:absolute;bottom:-.714rem;left:1.214rem;width:.714rem;height:.714rem;display:block;background:#fff;transform:rotate(45deg) translate(-7px);border-bottom:1px solid rgba(86,86,86,.1);border-right:1px solid rgba(86,86,86,.1);z-index:10;box-sizing:border-box}.dropup .dropdown-menu.dropdown-menu-right:before{left:auto;right:.714rem}.dropup .dropdown-submenu .dropdown-menu{bottom:auto;top:0}.dropleft .btn,.dropleft .btn.dropdown-toggle{padding:.85rem 1.5rem}.dropleft .btn.dropdown-toggle.dropdown-toggle-split{padding:.85rem 1rem}.dropleft .dropdown-toggle:before{border:none!important;font-family:feather;content:"\E843"!important}.dropleft .dropdown-menu:before{content:"";position:absolute;top:1.285rem;right:0;width:.714rem;height:.714rem;display:block;background:#fff;transform:rotate(130deg) translate(-8px);border-top:1px solid rgba(86,86,86,.1);border-left:1px solid rgba(86,86,86,.1);z-index:10;box-sizing:border-box}.dropright .btn,.dropright .btn.dropdown-toggle{padding:.85rem 1.5rem}.dropright .btn.dropdown-toggle.dropdown-toggle-split{padding:.85rem 1rem}.dropright .dropdown-toggle:after{border:none!important;font-family:feather;content:"\E844"!important}.dropright .dropdown-menu:before{content:"";position:absolute;top:1.285rem;left:-.9rem;width:.714rem;height:.714rem;display:block;background:#fff;transform:rotate(140deg) translate(-9px);border-bottom:1px solid rgba(86,86,86,.1);border-right:1px solid rgba(86,86,86,.1);z-index:10;box-sizing:border-box}.dropdown.dropdown-icon-wrapper .dropdown-toggle:after,.dropup.dropdown-icon-wrapper .dropdown-toggle:after{display:none}.dropdown.dropdown-icon-wrapper .dropdown-menu,.dropup.dropdown-icon-wrapper .dropdown-menu{min-width:auto}.dropdown.dropdown-icon-wrapper .dropdown-menu .dropdown-item,.dropup.dropdown-icon-wrapper .dropdown-menu .dropdown-item{padding:.5rem 1.1rem;cursor:pointer}.dropdown.dropdown-icon-wrapper .dropdown-menu .dropdown-item i,.dropup.dropdown-icon-wrapper .dropdown-menu .dropdown-item i{font-size:1.3rem;color:#626262}.dropdown.dropdown-icon-wrapper .dropdown-menu .dropdown-item:hover,.dropup.dropdown-icon-wrapper .dropdown-menu .dropdown-item:hover{color:#fff}.btn.btn-white~.dropdown-menu .dropdown-item:not(.acitve):hover{color:#626262!important}.btn.btn-white~.dropdown-menu .dropdown-item.active{color:#626262}.header-navbar .dropdown-menu,.horizontal-menu-wrapper .dropdown-menu{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-name:slideIn;animation-name:slideIn}@-webkit-keyframes slideIn{to{transform:translateY(0);opacity:1}0%{transform:translateY(1rem);opacity:0}}@keyframes slideIn{to{transform:translateY(0);opacity:1}0%{transform:translateY(1rem);opacity:0}}.navbar-dark .hamburger-inner,.navbar-dark .hamburger-inner:after,.navbar-dark .hamburger-inner:before{background-color:#fff}.header-navbar-shadow{display:none}.navbar-floating .header-navbar-shadow{display:block;background:linear-gradient(180deg,hsla(0,0%,97.3%,.95) 44%,hsla(0,0%,97.3%,.46) 73%,hsla(0,0%,100%,0));padding-top:2.2rem;background-repeat:repeat;width:100%;height:102px;position:fixed;top:0;z-index:11}.header-navbar{padding:0;min-height:3.8rem;font-family:Montserrat,Helvetica,Arial,serif;transition:all .3s ease;background:linear-gradient(180deg,hsla(0,0%,97.3%,.95) 44%,hsla(0,0%,97.3%,.46) 73%,hsla(0,0%,100%,0));z-index:997}.header-navbar.fixed-top{left:260px}.header-navbar[class*=bg-] .navbar-nav .nav-item>a,.header-navbar[class*=bg-] .navbar-nav .nav-item>a i,.header-navbar[class*=bg-] .navbar-nav .nav-item>a span{color:#fff!important}.header-navbar[class*=bg-] .navbar-nav .nav-item .dropdown-menu i{color:inherit!important}.header-navbar[class*=bg-] .navbar-nav .search-input .input,.header-navbar[class*=bg-] .navbar-nav .search-input .search-list .auto-suggestion span{color:#626262!important}.header-navbar.floating-nav{margin:1.3rem 2.2rem 0;border-radius:.5rem;position:fixed;width:calc(100% - 4.4rem - 260px);z-index:12;right:0}.header-navbar.navbar-static-top{background:transparent;box-shadow:none!important;top:0;right:0;left:260px;width:calc(100% - 260px)}.header-navbar .navbar-wrapper{width:100%}.header-navbar.navbar-border{border-bottom:1px solid #e4e7ed}.header-navbar.navbar-dark.navbar-border{border-bottom:1px solid #8596b5}.header-navbar.navbar-shadow{box-shadow:0 4px 20px 0 rgba(0,0,0,.05)}.header-navbar:not(.navbar-horizontal) .nav-link.dropdown-toggle:after{display:none}.header-navbar .navbar-container ul.nav li.dropdown-language{padding-right:0}.header-navbar .navbar-container ul.nav li.dropdown-language .selected-language{font-size:.97rem;letter-spacing:-.25px;font-weight:500}.header-navbar .navbar-container{padding-left:1rem;transition:all .3s ease;background:inherit;margin-left:0}.header-navbar .navbar-container .bookmark-wrapper ul.nav li>a.nav-link{padding:1.4rem .5rem 1.35rem}.header-navbar .navbar-container .bookmark-wrapper ul.nav li>a.nav-link i:hover{color:#62a8ea}.header-navbar .navbar-container .bookmark-input{z-index:1}.header-navbar .navbar-container ul.nav li.dropdown .dropdown-menu{top:48px}.header-navbar .navbar-container ul.nav li .badge{padding:.42em .6em .25rem}.header-navbar .navbar-container ul.nav li .badge.badge-up{position:absolute;top:12px;right:-2px}.header-navbar .navbar-container ul.nav li.dropdown-language>a.nav-link{padding:1.65rem .5rem}.header-navbar .navbar-container ul.nav li>a.nav-link{color:#626262;padding:1.6rem .5rem 1.35rem 1rem}.header-navbar .navbar-container ul.nav li>a.nav-link i.flag-icon{margin-right:.5rem}.header-navbar .navbar-container ul.nav li.dropdown-user .dropdown-menu-right{right:12px;left:auto;padding:.5rem}.header-navbar .navbar-container ul.nav li.dropdown-user .dropdown-menu-right .dropdown-item{padding:10px}.header-navbar .navbar-container ul.nav li.dropdown-user .dropdown-menu-right .dropdown-item:active,.header-navbar .navbar-container ul.nav li.dropdown-user .dropdown-menu-right .dropdown-item:hover{background:#62a8ea;color:#fff!important}.header-navbar .navbar-container ul.nav li a.dropdown-user-link{padding:.7rem 1rem;display:flex;align-items:center}.header-navbar .navbar-container ul.nav li a.dropdown-user-link .user-name{display:inline-block;margin-bottom:.435rem;margin-left:.2rem}.header-navbar .navbar-container ul.nav li a.dropdown-user-link .user-status{font-size:smaller}.header-navbar .navbar-container ul.nav li a.dropdown-user-link img{box-shadow:0 4px 8px 0 rgba(0,0,0,.12),0 2px 4px 0 rgba(0,0,0,.08)}.header-navbar .navbar-container ul.nav li a.menu-toggle{padding:1.34rem .22rem 1.35rem 0}.header-navbar .navbar-container ul.nav li a.menu-toggle i{font-size:1.4rem}.header-navbar .navbar-container ul.nav li a.nav-link-label{padding:1.6rem 0 1.35rem .8rem}.header-navbar .navbar-container ul.nav li a.dropdown-user-link .user-nav{display:flex;flex-direction:column;align-items:flex-end;float:left;margin-right:.8rem}.header-navbar .navbar-container ul.nav li div.input-group{padding:.7rem 1rem}.header-navbar .navbar-container ul.nav li i.ficon{font-size:1.5rem;color:#626262}.header-navbar .navbar-container ul.nav li i.ficon:hover{color:#62a8ea}.header-navbar .navbar-container ul.nav li .media-list{max-height:18.2rem}.header-navbar .navbar-container ul.nav li .scrollable-container{position:relative}.header-navbar .navbar-container .dropdown-menu-media{width:26rem}.header-navbar .navbar-container .dropdown-menu-media .media-list .media{padding:1rem;border:none;border-bottom:1px solid #dae1e7}.header-navbar .navbar-container .dropdown-menu-media .media-list .media:hover{background:#eff1f7}.header-navbar .navbar-container .dropdown-menu-media .media-list .media .media-meta{color:#626262}.header-navbar .navbar-container .dropdown-menu-media .media-list a:last-of-type .media{border-bottom:none}.header-navbar .navbar-container .dropdown-menu-media .dropdown-menu-header{border-bottom:1px solid #dae1e7}.header-navbar .navbar-container .dropdown-menu-media .dropdown-menu-footer a{padding:.3rem;border-top:1px solid #dae1e7}.header-navbar .nav-item+.nav-item,.header-navbar.navbar-without-menu .navbar-container{margin-left:0}@media (max-width:767.98px){.header-navbar .navbar-header{width:100%!important;padding:.5rem 1rem;position:relative}.header-navbar .navbar-header .menu-toggle{top:2px;position:relative}.header-navbar .navbar-header .open-navbar-container i{font-size:1.8rem}.header-navbar .navbar-header .navbar-brand{position:absolute;left:50%;top:0;transform:translate(-50%)}.header-navbar.navbar-with-menu .navbar-container{width:100%;display:table;margin:0;height:auto}}@media (max-width:991.98px){[data-menu=vertical-menu-modern] .header-navbar .navbar-header{width:100%!important;padding:.5rem 1rem;position:relative}[data-menu=vertical-menu-modern] .header-navbar .navbar-header .menu-toggle{top:2px;position:relative}[data-menu=vertical-menu-modern] .header-navbar .navbar-header .open-navbar-container i{font-size:1.8rem}[data-menu=vertical-menu-modern] .header-navbar .navbar-header .navbar-brand{position:absolute;left:50%;top:0;transform:translate(-50%)}[data-menu=vertical-menu-modern] .header-navbar.navbar-with-menu .navbar-container{width:100%;display:table;margin:0;height:auto}[data-menu=vertical-menu-modern] .navbar-dark .navbar-header .navbar-nav .nav-link,[data-menu=vertical-menu-modern] .navbar-semi-dark .navbar-header .navbar-nav .nav-link{color:#fff}[data-menu=vertical-menu-modern] .navbar-dark .navbar-container .navbar-nav .nav-link,[data-menu=vertical-menu-modern] .navbar-light .navbar-header .navbar-nav .nav-link,[data-menu=vertical-menu-modern] .navbar-semi-dark .navbar-container .navbar-nav .nav-link{color:#b8c2cc}}.navbar-light,.navbar-light.navbar-horizontal{background:#fff}.navbar-light .navbar-nav li{line-height:1}.navbar-light .navbar-nav .active.nav-link{background-color:rgba(0,0,0,.03)}.navbar-light .navbar-nav .disabled.nav-link{color:#b8c2cc}.navbar-dark{background:#b8c2cc}.navbar-dark .navbar-brand{color:#fff!important}.navbar-dark.navbar-horizontal{background:#b8c2cc}.navbar-dark .nav-search .btn-secondary,.navbar-dark .nav-search .form-control{color:#fff;background:#b8c2cc}.navbar-dark .navbar-nav li{line-height:1}.navbar-dark .navbar-nav .active.nav-link{background-color:hsla(0,0%,100%,.05)}.navbar-dark .navbar-nav .disabled.nav-link{color:#dae1e7}.navbar-semi-dark{background:#fff}.navbar-semi-dark .navbar-header{background:#b8c2cc}.navbar-semi-dark .navbar-header .brand-text{color:#fff}.navbar-semi-dark .navbar-nav li{line-height:1}.navbar-semi-dark .navbar-nav .nav-link{color:#b8c2cc}.navbar-semi-dark .navbar-nav .active.nav-link{background-color:rgba(0,0,0,.03)}.navbar-semi-dark .navbar-nav .disabled.nav-link{color:#b8c2cc}.navbar-semi-light{background:#b8c2cc}.navbar-semi-light .navbar-header{background:#fff}.navbar-semi-light .navbar-header .brand-text{color:#b8c2cc}.navbar-semi-light .navbar-nav li{line-height:1}.navbar-semi-light .navbar-nav .nav-link{color:#fff}.navbar-semi-light .navbar-nav .active.nav-link{background-color:rgba(0,0,0,.03)}.navbar-semi-light .navbar-nav .disabled.nav-link{color:#b8c2cc}@-moz-document url-prefix(){ul li a .children-in{position:relative;right:3px;top:-14px}}.navbar-menu-icon span{display:block;position:absolute;height:2px;width:100%;background:#b8c2cc;border-radius:9px;opacity:1;left:0;transform:rotate(0deg);transition:.25s ease-in-out}.navbar-menu-icon span:first-child{top:0}.navbar-menu-icon span:nth-child(2){top:10px}.navbar-menu-icon span:nth-child(3){top:20px}.navbar-menu-icon.show span:first-child{top:10px;transform:rotate(135deg)}.navbar-menu-icon.show span:nth-child(2){opacity:0;left:-60px}.navbar-menu-icon.show span:nth-child(3){top:10px;transform:rotate(-135deg)}@media (max-width:767.98px){.header-navbar .navbar-nav .show{position:static}.header-navbar .navbar-nav .open-navbar-container{padding-top:.625rem}.header-navbar .navbar-container .show .dropdown-menu{right:0;left:0!important;float:none;width:auto;margin-top:0;max-height:400px;overflow-x:hidden}.header-navbar .navbar-container .dropdown-user .dropdown-menu-right{right:0!important}.header-navbar .navbar-container ul.nav li.nav-item i{margin-right:.2rem}.header-navbar .navbar-container ul.nav li a.dropdown-user-link{padding:.8rem .6rem}.header-navbar .navbar-container ul.nav li .dropdown-toggle:after{margin-right:0;margin-left:-2px}.navbar-dark .hamburger-inner,.navbar-dark .hamburger-inner:after,.navbar-dark .hamburger-inner:before,.navbar-semi-dark .hamburger-inner,.navbar-semi-dark .hamburger-inner:after,.navbar-semi-dark .hamburger-inner:before{background-color:#fff}.navbar-dark .navbar-header .navbar-nav .nav-link,.navbar-semi-dark .navbar-header .navbar-nav .nav-link{color:#fff}.navbar-dark .navbar-container .navbar-nav .nav-link,.navbar-light .navbar-container .navbar-nav .nav-link,.navbar-light .navbar-header .navbar-nav .nav-link,.navbar-semi-dark .navbar-container .navbar-nav .nav-link,.navbar-semi-light .navbar-container .navbar-nav .nav-link,.navbar-semi-light .navbar-header .navbar-nav .nav-link{color:#b8c2cc}}.headroom{will-change:transform;transition:transform .2s linear}.headroom--pinned-top{transform:translateY(0)}.headroom--unpinned-top{transform:translateY(-100%)}.headroom--pinned-bottom{transform:translateY(0)}.headroom--unpinned-bottom{transform:translateY(100%)}@media (max-width:575.98px){.header-navbar .navbar-container ul.nav li .selected-language{display:none}}body[data-col="1-column"] .header-navbar.floating-nav{width:calc(100% - 4.4rem)}@media (-ms-high-contrast:none),(min-width:1200px) and (-ms-high-contrast:active){body:not([data-col="1-columns"]) .header-navbar.floating-nav{width:calc(100% - 320px)}}@media (max-width:1199.98px){.header-navbar .navbar-container ul.nav li a.dropdown-user-link{padding:.7rem 1.23rem}.header-navbar .navbar-container ul.nav li .dropdown-toggle:after{margin-right:0;margin-left:-2px}.header-navbar.navbar-static-top{left:0;width:100%}}@media (max-width:767px){#navbar-mobile.navbar-collapse .navbar-nav{margin:0;flex-flow:row wrap}#navbar-mobile.navbar-collapse .navbar-nav .dropdown-menu{position:absolute}#navbar-mobile.navbar-collapse .navbar-nav .nav-item{float:left}}@media (max-width:991.98px){#navbar-mobile.navbar-collapse .navbar-nav{margin:0;flex-flow:row wrap}#navbar-mobile.navbar-collapse .navbar-nav .dropdown-menu{position:absolute}#navbar-mobile.navbar-collapse .navbar-nav .nav-item{float:left}}@media only screen and (min-device-width:26.78em) and (max-device-width:47.64em) and (-webkit-min-device-pixel-ratio:2) and (orientation:landscape){.header-navbar .navbar-container .show .dropdown-menu{max-height:180px}}@media only screen and (min-device-width:29.57em) and (max-device-width:52.57em) and (-webkit-min-device-pixel-ratio:3) and (orientation:landscape){.header-navbar .navbar-container .show .dropdown-menu{max-height:280px}}#navbar-component .navbar{z-index:auto!important}#navbar-component .navbar.floating-nav{border-radius:.5rem}#navbar-component .navbar .navbar-nav .nav-item a{color:inherit}#navbar-component .navbar.header-navbar.navbar-dark .navbar-nav .nav-link,#navbar-component .navbar.header-navbar.navbar-dark .navbar-nav .nav-link i{color:#fff}#navbar-component .navbar .navbar-nav .dropdown-language.show,#navbar-component .navbar .navbar-nav .dropdown-notification.show,#navbar-component .navbar .navbar-nav .dropdown-user.show{position:relative}#navbar-component .navbar .navbar-nav .dropdown-language .dropdown-menu.show,#navbar-component .navbar .navbar-nav .dropdown-notification .dropdown-menu.show,#navbar-component .navbar .navbar-nav .dropdown-user .dropdown-menu.show{position:absolute;right:0;left:auto!important}#navbar-component .navbar.navbar-dark .navbar-toggler,#navbar-component .navbar.navbar-light .navbar-toggler{font-size:1.2rem}#navbar-component .navbar.navbar-dark .navbar-toggler:focus,#navbar-component .navbar.navbar-light .navbar-toggler:focus{outline:0}#navbar-component #navbar-collapsed .navbar{border-radius:0}@media (min-width:992px){#navbar-component .navbar .navbar-container{background:inherit}#navbar-component .nav .dropdown-language{float:right}}@media (max-width:992px){#navbar-component .navbar .navbar-container{background:inherit}#navbar-component .navbar .navbar-container .navbar-nav{flex-direction:row}}@media (max-width:1201px){.header-navbar.fixed-top{left:0}.horizontal-layout .header-navbar .navbar-container{padding-left:1.5rem;padding-right:1.2rem}}@media (max-width:1199px){.header-navbar .navbar-container ul.nav li a.dropdown-user-link .user-name{margin-bottom:0}}@media (max-width:768px){#navbar-component .navbar .navbar-nav .dropdown-notification.show{position:static}}@media (max-width:575.98px){.header-navbar.floating-nav{width:calc(100% - 2.4rem)!important;margin-left:1.2rem;margin-right:1.2rem}.content.app-content .content-area-wrapper{margin-left:1.2rem!important;margin-right:1.2rem!important}.header-navbar .navbar-container{padding-left:1rem!important;padding-right:0!important}}@media (max-width:992px){.navbar-container #navbar-mobile .nav-back{margin-top:5px}}.nav{border-radius:.25rem}.nav.wrap-border{border:1px solid #ddd}.nav.wrap-border li.nav-header{margin:0 .5rem}.nav.wrap-border div,.nav.wrap-border li.nav-item{padding:2px .714rem}.nav.square-border,.nav.square-border .nav-item .nav-link.active{border-radius:0}.nav .modern-nav-toggle{padding:1.571rem 0}.nav.nav-pills{margin-bottom:1rem}.nav.nav-pills .nav-item .nav-link{border-radius:.357rem;padding:.3rem 1rem .2rem;margin-right:.5rem}.nav.nav-pills .nav-item .nav-link.active{color:#fff}.nav.nav-pills .nav-item .nav-link.disabled{color:#b8c2cc}.nav.nav-pills .nav-item .nav-link.dropdown-toggle:after{top:1px;left:1px}.nav.nav-pills .nav-item.dropdown.show .nav-link{color:#fff}.nav.nav-pills .nav-item.dropdown.show .dropdown-item.active:hover{color:#62a8ea}.nav.nav-pills.nav-justified{width:100%}.nav.nav-pills.nav-justified .nav-item{float:none}.nav.nav-pills.nav-justified .nav-link{text-align:center;margin-bottom:5px}.nav.nav-pills.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:576px){.nav.nav-pills.nav-justified .nav-item{display:block;width:1%}.nav.nav-pills.nav-justified .nav-link{margin-bottom:0}}.nav.nav-pills.nav-justified .nav-link{margin-right:0;border-radius:.5rem}@media (min-width:576px){.nav.nav-pills.nav-justified .nav-link.active,.nav.nav-pills.nav-justified .nav-link.active:focus,.nav.nav-pills.nav-justified .nav-link.active:hover{border-bottom-color:transparent}}.nav.nav-pills.nav-justified .nav-link{display:block}.nav.nav-pills.nav-justified .nav-link.active,.nav.nav-pills.nav-justified .nav-link.active:focus,.nav.nav-pills.nav-justified .nav-link.active:hover{border:none}.nav.nav-pills.nav-active-bordered-pill .nav-item a.nav-link.active{border:1px solid #62a8ea;border-radius:.25rem;color:#62a8ea;background-color:#fff}.nav.nav-tabs{border:none;margin-bottom:1rem;border-radius:0}.nav.nav-tabs,.nav.nav-tabs .nav-item{position:relative}.nav.nav-tabs .nav-item .nav-link{color:#626262;font-size:.95rem;border:none;min-width:auto;font-weight:450;padding:.61rem .635rem;border-radius:0}.nav.nav-tabs .nav-item .nav-link.active{border:none;position:relative;color:#62a8ea;transition:all .2s ease;background-color:transparent}.nav.nav-tabs .nav-item .nav-link.active:after{content:attr(data-before);height:2px;width:100%;left:0;position:absolute;bottom:0;top:100%;background:linear-gradient(30deg,#62a8ea,rgba(98,168,234,.5))!important;box-shadow:0 0 8px 0 rgba(98,168,234,.5)!important;transform:translateY(0);transition:all .2s linear}.nav.nav-tabs .nav-item .nav-link.dropdown-toggle:after{top:1px;left:1px}.nav.nav-tabs .nav-item .nav-link.disabled{color:#b8c2cc}.nav.nav-tabs.nav-justified{width:100%}.nav.nav-tabs.nav-justified .nav-item{float:none}.nav.nav-tabs.nav-justified .nav-link{text-align:center;margin-bottom:5px}.nav.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:576px){.nav.nav-tabs.nav-justified .nav-item{display:block;width:1%}.nav.nav-tabs.nav-justified .nav-link{margin-bottom:0}}.nav.nav-tabs.nav-justified .nav-link{margin-right:0;border-radius:.5rem}@media (min-width:576px){.nav.nav-tabs.nav-justified .nav-link.active,.nav.nav-tabs.nav-justified .nav-link.active:focus,.nav.nav-tabs.nav-justified .nav-link.active:hover{border-bottom-color:transparent}}.nav.nav-tabs.nav-justified .nav-item a.nav-link{display:block;border-radius:0}.nav.nav-tabs.nav-justified .nav-item a.nav-link.active{border:none;background-color:#fff}.nav.nav-tabs.nav-justified .nav-item a.nav-link:hover{border-color:transparent}.nav-vertical{overflow:hidden}.nav-vertical .nav.nav-tabs .nav-item .nav-link{border:none;margin-bottom:0}.nav-vertical .nav.nav-tabs .nav-item .nav-link.active{border:none;border-radius:0}.nav-vertical .nav.nav-tabs .nav-item .nav-link.active:after{transform:rotate(90deg);left:auto;right:-1.5rem;bottom:100%;top:1.25rem;width:2.14rem}.nav-vertical .nav.nav-tabs .nav-item .nav-link:hover{border-right:none}.nav-vertical .nav.nav-tabs.nav-left{float:left;display:table;margin-right:1rem}.nav-vertical .nav.nav-tabs.nav-left~.tab-content .tab-pane{display:none;background-color:#fff;overflow-y:auto}.nav-vertical .nav.nav-tabs.nav-left~.tab-content .tab-pane.active{display:block}.nav-vertical .nav.nav-tabs.nav-right{float:right;display:table;margin-left:1rem}.nav-vertical .nav.nav-tabs.nav-right .nav-item .nav-link.active:after{left:-1.5rem}.nav-vertical .nav.nav-tabs.nav-right~.tab-content .tab-pane{display:none;background-color:#fff;overflow-y:auto;padding-right:1rem}.nav-vertical .nav.nav-tabs.nav-right~.tab-content .tab-pane.active{display:block}@media (max-width:576px){.nav-vertical .nav.nav-tabs .nav-item .nav-link.active:after{height:0}}.toast-bs-container{z-index:1040;position:fixed;top:0;left:0;width:100%}.toast-bs-container .toast-position{position:relative;top:0;right:0;display:flex;flex-direction:column;flex-wrap:wrap-reverse}.toast-bs-container .toast-position .toast.show{opacity:1;z-index:1030}.toast-placement{position:static;top:0}.toast-placement .toast{position:fixed;top:0;z-index:1030}.toast{display:none;background-color:#fff;margin-top:.75rem}.toast .toast-header .close:active,.toast .toast-header .close:focus,.toast .toast-header .mailbox-attachment-close:active,.toast .toast-header .mailbox-attachment-close:focus{outline:none}.toast.show.toast-wrapper{position:static}.toast.toast-translucent{opacity:1;display:block}.toast-header img{width:35px;height:24px}@media (-ms-high-contrast:none),screen and (-ms-high-contrast:active){.toast-bs-container{position:fixed!important;left:74%!important}}.toast-bs-container,_:-ms-lang(x){position:fixed!important;left:74%!important}.pagination .page-item{border-radius:5rem}.pagination .page-item.first .page-link,.pagination .page-item.last .page-link,.pagination .page-item.next-item .page-link,.pagination .page-item.prev-item .page-link{color:#62a8ea}.pagination .page-item.first.disabled .page-link,.pagination .page-item.last.disabled .page-link,.pagination .page-item.next-item.disabled .page-link,.pagination .page-item.prev-item.disabled .page-link{color:#b8c2cc}.pagination .page-item:not(.active) .page-link,.pagination .page-item:not(.first) .page-link,.pagination .page-item:not(.last) .page-link,.pagination .page-item:not(.next-item) .page-link,.pagination .page-item:not(.prev-item) .page-link{line-height:1.3}.pagination .page-item.prev-item{margin-right:.3571rem}.pagination .page-item.prev-item .page-link{background-color:#f0f0f0;padding:.572rem .651rem;border-radius:50%}.pagination .page-item.prev-item .page-link:before{content:"\E843";font-family:feather}.pagination .page-item.prev-item .page-link:hover{background:#62a8ea;color:#fff}.pagination .page-item.prev-item~.page-item:nth-child(2){border-top-left-radius:5rem;border-bottom-left-radius:5rem}.pagination .page-item.prev-item~.page-item:nth-child(2) .page-link{border-top-left-radius:5rem!important;border-bottom-left-radius:5rem!important}.pagination .page-item.prev-item~.page-item:nth-last-child(2){border-top-right-radius:5rem;border-bottom-right-radius:5rem}.pagination .page-item.prev-item~.page-item:nth-last-child(2) .page-link{border-top-right-radius:5rem!important;border-bottom-right-radius:5rem!important}.pagination .page-item.next-item{margin-left:.3571rem}.pagination .page-item.next-item .page-link{background-color:#f0f0f0;padding:.572rem .651rem;border-radius:50%}.pagination .page-item.next-item .page-link:after{content:"\E844";font-family:feather}.pagination .page-item.next-item .page-link:hover{background:#62a8ea;color:#fff}.pagination .page-item.prev .page-link:before,.pagination .page-item.previous .page-link:before{content:"\E843";font-family:feather}.pagination .page-item.next .page-link:after{content:"\E844";font-family:feather}.pagination .page-item .page-link{border:none;color:rgba(86,86,86,.9);background-color:#f0f0f0;margin:0;font-size:1rem;font-weight:700}.pagination .page-item .page-link i{position:relative;top:1px}.pagination .page-item .page-link:focus{box-shadow:none}.pagination .page-item .page-link:hover{color:#62a8ea}.pagination .page-item.active{background-color:#f0f0f0;border-radius:0}.pagination .page-item.active .page-link{z-index:3;border-radius:5rem;background-color:#62a8ea;color:#fff;transform:scale(1.05)}.pagination .page-item:first-child:not(.prev-item).active{border-top-left-radius:1.428rem;border-bottom-left-radius:1.428rem}.pagination .page-item:first-child:not(.prev-item).active .page-link{border-radius:5rem}.pagination .page-item:first-child:not(.prev-item) .page-link{border-top-left-radius:1.428rem;border-bottom-left-radius:1.428rem}.pagination .page-item:last-child:not(.next-item).active{border-top-right-radius:1.428rem;border-bottom-right-radius:1.428rem}.pagination .page-item:last-child:not(.next-item).active .page-link{border-radius:5rem}.pagination .page-item:last-child:not(.next-item) .page-link{border-top-right-radius:1.428rem;border-bottom-right-radius:1.428rem}.pagination.pagination-lg .page-item .page-link{font-size:1.5rem;transform:scale(1)}html.scroll-smooth{scroll-behavior:smooth}.wrapper,body,html{min-height:100%}.wrapper{position:relative}.wrapper .content-wrapper{min-height:calc(100vh - 6.614rem - 1px)}.layout-boxed .wrapper,.layout-boxed .wrapper:before{margin:0 auto;max-width:1250px}.layout-boxed .wrapper .main-sidebar{left:inherit}@supports not (-webkit-touch-callout:none){.layout-fixed .wrapper .sidebar{height:calc(100vh - 3.164rem - 1px)}.layout-fixed.text-sm .wrapper .sidebar{height:calc(100vh - 2.62475rem - 1px)}}.layout-navbar-fixed.layout-fixed .wrapper .main-header.text-sm~.control-sidebar{top:calc(2.62475rem + 1px)}.layout-navbar-fixed.layout-fixed .wrapper .brand-link.text-sm~.sidebar{margin-top:calc(2.62475rem + 1px)}.layout-navbar-fixed.sidebar-mini-md.sidebar-collapse .wrapper .brand-link,.layout-navbar-fixed.sidebar-mini.sidebar-collapse .wrapper .brand-link{height:calc(3.164rem + 1px);width:5.4rem}.layout-navbar-fixed.sidebar-mini-md.sidebar-collapse.text-sm .wrapper .brand-link,.layout-navbar-fixed.sidebar-mini-md.sidebar-collapse .wrapper .brand-link.text-sm,.layout-navbar-fixed.sidebar-mini.sidebar-collapse.text-sm .wrapper .brand-link,.layout-navbar-fixed.sidebar-mini.sidebar-collapse .wrapper .brand-link.text-sm{height:calc(2.62475rem + 1px)}.layout-navbar-fixed .wrapper .main-sidebar:hover .brand-link{transition:width .3s ease-in-out;width:260px}.layout-navbar-fixed .wrapper .main-header.text-sm~.content-wrapper{margin-top:calc(2.62475rem + 1px)}.layout-navbar-fixed .wrapper .main-header{z-index:1033}.layout-navbar-fixed.layout-fixed .wrapper .control-sidebar{top:calc(3.164rem + 1px)}.layout-navbar-fixed.layout-fixed .wrapper .main-header.text-sm~.control-sidebar,.text-sm .layout-navbar-fixed.layout-fixed .wrapper .main-header~.control-sidebar{top:calc(2.62475rem + 1px)}.layout-navbar-fixed.layout-fixed .wrapper .sidebar{margin-top:calc(3.164rem + 1px)}.layout-navbar-fixed.layout-fixed .wrapper .brand-link.text-sm~.sidebar,.text-sm .layout-navbar-fixed.layout-fixed .wrapper .brand-link~.sidebar{margin-top:calc(2.62475rem + 1px)}.layout-navbar-fixed.layout-fixed.text-sm .wrapper .control-sidebar{top:calc(2.62475rem + 1px)}.layout-navbar-fixed.layout-fixed.text-sm .wrapper .sidebar{margin-top:calc(2.62475rem + 1px)}.layout-navbar-fixed .wrapper .control-sidebar{top:0}.layout-navbar-fixed .wrapper a.anchor{display:block;position:relative;top:calc(-4.164rem + -1px)}.layout-navbar-fixed .wrapper.sidebar-collapse .brand-link{height:calc(3.164rem + 1px);transition:width .3s ease-in-out;width:5.4rem}.layout-navbar-fixed .wrapper.sidebar-collapse .brand-link.text-sm,.text-sm .layout-navbar-fixed .wrapper.sidebar-collapse .brand-link{height:calc(2.62475rem + 1px)}.layout-navbar-fixed .wrapper .brand-link,.layout-navbar-fixed .wrapper.sidebar-collapse .main-sidebar:hover .brand-link{transition:width .3s ease-in-out;width:260px}.layout-navbar-fixed .wrapper .brand-link{overflow:hidden;position:fixed;top:0;z-index:1035}.layout-navbar-fixed .wrapper .sidebar-dark-primary .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-navbar-fixed .wrapper .sidebar-light-primary .brand-link:not([class*=navbar]){background-color:#fff}.layout-navbar-fixed .wrapper .sidebar-dark-secondary .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-navbar-fixed .wrapper .sidebar-light-secondary .brand-link:not([class*=navbar]){background-color:#fff}.layout-navbar-fixed .wrapper .sidebar-dark-success .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-navbar-fixed .wrapper .sidebar-light-success .brand-link:not([class*=navbar]){background-color:#fff}.layout-navbar-fixed .wrapper .sidebar-dark-info .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-navbar-fixed .wrapper .sidebar-light-info .brand-link:not([class*=navbar]){background-color:#fff}.layout-navbar-fixed .wrapper .sidebar-dark-warning .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-navbar-fixed .wrapper .sidebar-light-warning .brand-link:not([class*=navbar]){background-color:#fff}.layout-navbar-fixed .wrapper .sidebar-dark-danger .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-navbar-fixed .wrapper .sidebar-light-danger .brand-link:not([class*=navbar]){background-color:#fff}.layout-navbar-fixed .wrapper .sidebar-dark-light .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-navbar-fixed .wrapper .sidebar-light-light .brand-link:not([class*=navbar]){background-color:#fff}.layout-navbar-fixed .wrapper .sidebar-dark-dark .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-navbar-fixed .wrapper .sidebar-light-dark .brand-link:not([class*=navbar]){background-color:#fff}.layout-navbar-fixed .wrapper .content-wrapper{margin-top:calc(3.164rem + 1px)}.layout-navbar-fixed .wrapper .main-header.text-sm~.content-wrapper,.text-sm .layout-navbar-fixed .wrapper .main-header~.content-wrapper{margin-top:calc(2.62475rem + 1px)}.layout-navbar-fixed .wrapper .main-header{left:0;position:fixed;right:0;top:0;z-index:1037}.layout-navbar-fixed.text-sm .wrapper .content-wrapper{margin-top:calc(2.62475rem + 1px)}body:not(.layout-fixed).layout-navbar-fixed .wrapper .main-sidebar{margin-top:calc(-3.164rem + -1px)}body:not(.layout-fixed).layout-navbar-fixed .wrapper .main-sidebar .sidebar{margin-top:calc(3.164rem + 1px)}body:not(.layout-fixed).layout-navbar-fixed.text-sm .wrapper .main-sidebar{margin-top:calc(-2.62475rem + -1px)}body:not(.layout-fixed).layout-navbar-fixed.text-sm .wrapper .main-sidebar .sidebar{margin-top:calc(2.62475rem + 1px)}.layout-navbar-not-fixed .wrapper .brand-link{position:static}.layout-navbar-not-fixed .wrapper .content-wrapper,.layout-navbar-not-fixed .wrapper .sidebar{margin-top:0}.layout-navbar-not-fixed .wrapper .main-header{position:static}.layout-navbar-not-fixed.layout-fixed .wrapper .sidebar{margin-top:0}@media (min-width:576px){.layout-sm-navbar-fixed.layout-fixed .wrapper .control-sidebar{top:calc(3.164rem + 1px)}.layout-sm-navbar-fixed.layout-fixed .wrapper .main-header.text-sm~.control-sidebar,.text-sm .layout-sm-navbar-fixed.layout-fixed .wrapper .main-header~.control-sidebar{top:calc(2.62475rem + 1px)}.layout-sm-navbar-fixed.layout-fixed .wrapper .sidebar{margin-top:calc(3.164rem + 1px)}.layout-sm-navbar-fixed.layout-fixed .wrapper .brand-link.text-sm~.sidebar,.text-sm .layout-sm-navbar-fixed.layout-fixed .wrapper .brand-link~.sidebar{margin-top:calc(2.62475rem + 1px)}.layout-sm-navbar-fixed.layout-fixed.text-sm .wrapper .control-sidebar{top:calc(2.62475rem + 1px)}.layout-sm-navbar-fixed.layout-fixed.text-sm .wrapper .sidebar{margin-top:calc(2.62475rem + 1px)}.layout-sm-navbar-fixed .wrapper .control-sidebar{top:0}.layout-sm-navbar-fixed .wrapper a.anchor{display:block;position:relative;top:calc(-4.164rem + -1px)}.layout-sm-navbar-fixed .wrapper.sidebar-collapse .brand-link{height:calc(3.164rem + 1px);transition:width .3s ease-in-out;width:5.4rem}.layout-sm-navbar-fixed .wrapper.sidebar-collapse .brand-link.text-sm,.text-sm .layout-sm-navbar-fixed .wrapper.sidebar-collapse .brand-link{height:calc(2.62475rem + 1px)}.layout-sm-navbar-fixed .wrapper.sidebar-collapse .main-sidebar:hover .brand-link{transition:width .3s ease-in-out;width:260px}.layout-sm-navbar-fixed .wrapper .brand-link{overflow:hidden;position:fixed;top:0;transition:width .3s ease-in-out;width:260px;z-index:1035}.layout-sm-navbar-fixed .wrapper .sidebar-dark-primary .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-sm-navbar-fixed .wrapper .sidebar-light-primary .brand-link:not([class*=navbar]){background-color:#fff}.layout-sm-navbar-fixed .wrapper .sidebar-dark-secondary .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-sm-navbar-fixed .wrapper .sidebar-light-secondary .brand-link:not([class*=navbar]){background-color:#fff}.layout-sm-navbar-fixed .wrapper .sidebar-dark-success .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-sm-navbar-fixed .wrapper .sidebar-light-success .brand-link:not([class*=navbar]){background-color:#fff}.layout-sm-navbar-fixed .wrapper .sidebar-dark-info .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-sm-navbar-fixed .wrapper .sidebar-light-info .brand-link:not([class*=navbar]){background-color:#fff}.layout-sm-navbar-fixed .wrapper .sidebar-dark-warning .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-sm-navbar-fixed .wrapper .sidebar-light-warning .brand-link:not([class*=navbar]){background-color:#fff}.layout-sm-navbar-fixed .wrapper .sidebar-dark-danger .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-sm-navbar-fixed .wrapper .sidebar-light-danger .brand-link:not([class*=navbar]){background-color:#fff}.layout-sm-navbar-fixed .wrapper .sidebar-dark-light .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-sm-navbar-fixed .wrapper .sidebar-light-light .brand-link:not([class*=navbar]){background-color:#fff}.layout-sm-navbar-fixed .wrapper .sidebar-dark-dark .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-sm-navbar-fixed .wrapper .sidebar-light-dark .brand-link:not([class*=navbar]){background-color:#fff}.layout-sm-navbar-fixed .wrapper .content-wrapper{margin-top:calc(3.164rem + 1px)}.layout-sm-navbar-fixed .wrapper .main-header.text-sm~.content-wrapper,.text-sm .layout-sm-navbar-fixed .wrapper .main-header~.content-wrapper{margin-top:calc(2.62475rem + 1px)}.layout-sm-navbar-fixed .wrapper .main-header{left:0;position:fixed;right:0;top:0;z-index:1037}.layout-sm-navbar-fixed.text-sm .wrapper .content-wrapper{margin-top:calc(2.62475rem + 1px)}body:not(.layout-fixed).layout-sm-navbar-fixed .wrapper .main-sidebar{margin-top:calc(-3.164rem + -1px)}body:not(.layout-fixed).layout-sm-navbar-fixed .wrapper .main-sidebar .sidebar{margin-top:calc(3.164rem + 1px)}body:not(.layout-fixed).layout-sm-navbar-fixed.text-sm .wrapper .main-sidebar{margin-top:calc(-2.62475rem + -1px)}body:not(.layout-fixed).layout-sm-navbar-fixed.text-sm .wrapper .main-sidebar .sidebar{margin-top:calc(2.62475rem + 1px)}.layout-sm-navbar-not-fixed .wrapper .brand-link{position:static}.layout-sm-navbar-not-fixed .wrapper .content-wrapper,.layout-sm-navbar-not-fixed .wrapper .sidebar{margin-top:0}.layout-sm-navbar-not-fixed .wrapper .main-header{position:static}.layout-sm-navbar-not-fixed.layout-fixed .wrapper .sidebar{margin-top:0}}@media (min-width:768px){.layout-md-navbar-fixed.layout-fixed .wrapper .control-sidebar{top:calc(3.164rem + 1px)}.layout-md-navbar-fixed.layout-fixed .wrapper .main-header.text-sm~.control-sidebar,.text-sm .layout-md-navbar-fixed.layout-fixed .wrapper .main-header~.control-sidebar{top:calc(2.62475rem + 1px)}.layout-md-navbar-fixed.layout-fixed .wrapper .sidebar{margin-top:calc(3.164rem + 1px)}.layout-md-navbar-fixed.layout-fixed .wrapper .brand-link.text-sm~.sidebar,.text-sm .layout-md-navbar-fixed.layout-fixed .wrapper .brand-link~.sidebar{margin-top:calc(2.62475rem + 1px)}.layout-md-navbar-fixed.layout-fixed.text-sm .wrapper .control-sidebar{top:calc(2.62475rem + 1px)}.layout-md-navbar-fixed.layout-fixed.text-sm .wrapper .sidebar{margin-top:calc(2.62475rem + 1px)}.layout-md-navbar-fixed .wrapper .control-sidebar{top:0}.layout-md-navbar-fixed .wrapper a.anchor{display:block;position:relative;top:calc(-4.164rem + -1px)}.layout-md-navbar-fixed .wrapper.sidebar-collapse .brand-link{height:calc(3.164rem + 1px);transition:width .3s ease-in-out;width:5.4rem}.layout-md-navbar-fixed .wrapper.sidebar-collapse .brand-link.text-sm,.text-sm .layout-md-navbar-fixed .wrapper.sidebar-collapse .brand-link{height:calc(2.62475rem + 1px)}.layout-md-navbar-fixed .wrapper.sidebar-collapse .main-sidebar:hover .brand-link{transition:width .3s ease-in-out;width:260px}.layout-md-navbar-fixed .wrapper .brand-link{overflow:hidden;position:fixed;top:0;transition:width .3s ease-in-out;width:260px;z-index:1035}.layout-md-navbar-fixed .wrapper .sidebar-dark-primary .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-md-navbar-fixed .wrapper .sidebar-light-primary .brand-link:not([class*=navbar]){background-color:#fff}.layout-md-navbar-fixed .wrapper .sidebar-dark-secondary .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-md-navbar-fixed .wrapper .sidebar-light-secondary .brand-link:not([class*=navbar]){background-color:#fff}.layout-md-navbar-fixed .wrapper .sidebar-dark-success .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-md-navbar-fixed .wrapper .sidebar-light-success .brand-link:not([class*=navbar]){background-color:#fff}.layout-md-navbar-fixed .wrapper .sidebar-dark-info .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-md-navbar-fixed .wrapper .sidebar-light-info .brand-link:not([class*=navbar]){background-color:#fff}.layout-md-navbar-fixed .wrapper .sidebar-dark-warning .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-md-navbar-fixed .wrapper .sidebar-light-warning .brand-link:not([class*=navbar]){background-color:#fff}.layout-md-navbar-fixed .wrapper .sidebar-dark-danger .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-md-navbar-fixed .wrapper .sidebar-light-danger .brand-link:not([class*=navbar]){background-color:#fff}.layout-md-navbar-fixed .wrapper .sidebar-dark-light .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-md-navbar-fixed .wrapper .sidebar-light-light .brand-link:not([class*=navbar]){background-color:#fff}.layout-md-navbar-fixed .wrapper .sidebar-dark-dark .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-md-navbar-fixed .wrapper .sidebar-light-dark .brand-link:not([class*=navbar]){background-color:#fff}.layout-md-navbar-fixed .wrapper .content-wrapper{margin-top:calc(3.164rem + 1px)}.layout-md-navbar-fixed .wrapper .main-header.text-sm~.content-wrapper,.text-sm .layout-md-navbar-fixed .wrapper .main-header~.content-wrapper{margin-top:calc(2.62475rem + 1px)}.layout-md-navbar-fixed .wrapper .main-header{left:0;position:fixed;right:0;top:0;z-index:1037}.layout-md-navbar-fixed.text-sm .wrapper .content-wrapper{margin-top:calc(2.62475rem + 1px)}body:not(.layout-fixed).layout-md-navbar-fixed .wrapper .main-sidebar{margin-top:calc(-3.164rem + -1px)}body:not(.layout-fixed).layout-md-navbar-fixed .wrapper .main-sidebar .sidebar{margin-top:calc(3.164rem + 1px)}body:not(.layout-fixed).layout-md-navbar-fixed.text-sm .wrapper .main-sidebar{margin-top:calc(-2.62475rem + -1px)}body:not(.layout-fixed).layout-md-navbar-fixed.text-sm .wrapper .main-sidebar .sidebar{margin-top:calc(2.62475rem + 1px)}.layout-md-navbar-not-fixed .wrapper .brand-link{position:static}.layout-md-navbar-not-fixed .wrapper .content-wrapper,.layout-md-navbar-not-fixed .wrapper .sidebar{margin-top:0}.layout-md-navbar-not-fixed .wrapper .main-header{position:static}.layout-md-navbar-not-fixed.layout-fixed .wrapper .sidebar{margin-top:0}}@media (min-width:992px){.layout-lg-navbar-fixed.layout-fixed .wrapper .control-sidebar{top:calc(3.164rem + 1px)}.layout-lg-navbar-fixed.layout-fixed .wrapper .main-header.text-sm~.control-sidebar,.text-sm .layout-lg-navbar-fixed.layout-fixed .wrapper .main-header~.control-sidebar{top:calc(2.62475rem + 1px)}.layout-lg-navbar-fixed.layout-fixed .wrapper .sidebar{margin-top:calc(3.164rem + 1px)}.layout-lg-navbar-fixed.layout-fixed .wrapper .brand-link.text-sm~.sidebar,.text-sm .layout-lg-navbar-fixed.layout-fixed .wrapper .brand-link~.sidebar{margin-top:calc(2.62475rem + 1px)}.layout-lg-navbar-fixed.layout-fixed.text-sm .wrapper .control-sidebar{top:calc(2.62475rem + 1px)}.layout-lg-navbar-fixed.layout-fixed.text-sm .wrapper .sidebar{margin-top:calc(2.62475rem + 1px)}.layout-lg-navbar-fixed .wrapper .control-sidebar{top:0}.layout-lg-navbar-fixed .wrapper a.anchor{display:block;position:relative;top:calc(-4.164rem + -1px)}.layout-lg-navbar-fixed .wrapper.sidebar-collapse .brand-link{height:calc(3.164rem + 1px);transition:width .3s ease-in-out;width:5.4rem}.layout-lg-navbar-fixed .wrapper.sidebar-collapse .brand-link.text-sm,.text-sm .layout-lg-navbar-fixed .wrapper.sidebar-collapse .brand-link{height:calc(2.62475rem + 1px)}.layout-lg-navbar-fixed .wrapper.sidebar-collapse .main-sidebar:hover .brand-link{transition:width .3s ease-in-out;width:260px}.layout-lg-navbar-fixed .wrapper .brand-link{overflow:hidden;position:fixed;top:0;transition:width .3s ease-in-out;width:260px;z-index:1035}.layout-lg-navbar-fixed .wrapper .sidebar-dark-primary .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-lg-navbar-fixed .wrapper .sidebar-light-primary .brand-link:not([class*=navbar]){background-color:#fff}.layout-lg-navbar-fixed .wrapper .sidebar-dark-secondary .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-lg-navbar-fixed .wrapper .sidebar-light-secondary .brand-link:not([class*=navbar]){background-color:#fff}.layout-lg-navbar-fixed .wrapper .sidebar-dark-success .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-lg-navbar-fixed .wrapper .sidebar-light-success .brand-link:not([class*=navbar]){background-color:#fff}.layout-lg-navbar-fixed .wrapper .sidebar-dark-info .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-lg-navbar-fixed .wrapper .sidebar-light-info .brand-link:not([class*=navbar]){background-color:#fff}.layout-lg-navbar-fixed .wrapper .sidebar-dark-warning .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-lg-navbar-fixed .wrapper .sidebar-light-warning .brand-link:not([class*=navbar]){background-color:#fff}.layout-lg-navbar-fixed .wrapper .sidebar-dark-danger .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-lg-navbar-fixed .wrapper .sidebar-light-danger .brand-link:not([class*=navbar]){background-color:#fff}.layout-lg-navbar-fixed .wrapper .sidebar-dark-light .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-lg-navbar-fixed .wrapper .sidebar-light-light .brand-link:not([class*=navbar]){background-color:#fff}.layout-lg-navbar-fixed .wrapper .sidebar-dark-dark .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-lg-navbar-fixed .wrapper .sidebar-light-dark .brand-link:not([class*=navbar]){background-color:#fff}.layout-lg-navbar-fixed .wrapper .content-wrapper{margin-top:calc(3.164rem + 1px)}.layout-lg-navbar-fixed .wrapper .main-header.text-sm~.content-wrapper,.text-sm .layout-lg-navbar-fixed .wrapper .main-header~.content-wrapper{margin-top:calc(2.62475rem + 1px)}.layout-lg-navbar-fixed .wrapper .main-header{left:0;position:fixed;right:0;top:0;z-index:1037}.layout-lg-navbar-fixed.text-sm .wrapper .content-wrapper{margin-top:calc(2.62475rem + 1px)}body:not(.layout-fixed).layout-lg-navbar-fixed .wrapper .main-sidebar{margin-top:calc(-3.164rem + -1px)}body:not(.layout-fixed).layout-lg-navbar-fixed .wrapper .main-sidebar .sidebar{margin-top:calc(3.164rem + 1px)}body:not(.layout-fixed).layout-lg-navbar-fixed.text-sm .wrapper .main-sidebar{margin-top:calc(-2.62475rem + -1px)}body:not(.layout-fixed).layout-lg-navbar-fixed.text-sm .wrapper .main-sidebar .sidebar{margin-top:calc(2.62475rem + 1px)}.layout-lg-navbar-not-fixed .wrapper .brand-link{position:static}.layout-lg-navbar-not-fixed .wrapper .content-wrapper,.layout-lg-navbar-not-fixed .wrapper .sidebar{margin-top:0}.layout-lg-navbar-not-fixed .wrapper .main-header{position:static}.layout-lg-navbar-not-fixed.layout-fixed .wrapper .sidebar{margin-top:0}}@media (min-width:1200px){.layout-xl-navbar-fixed.layout-fixed .wrapper .control-sidebar{top:calc(3.164rem + 1px)}.layout-xl-navbar-fixed.layout-fixed .wrapper .main-header.text-sm~.control-sidebar,.text-sm .layout-xl-navbar-fixed.layout-fixed .wrapper .main-header~.control-sidebar{top:calc(2.62475rem + 1px)}.layout-xl-navbar-fixed.layout-fixed .wrapper .sidebar{margin-top:calc(3.164rem + 1px)}.layout-xl-navbar-fixed.layout-fixed .wrapper .brand-link.text-sm~.sidebar,.text-sm .layout-xl-navbar-fixed.layout-fixed .wrapper .brand-link~.sidebar{margin-top:calc(2.62475rem + 1px)}.layout-xl-navbar-fixed.layout-fixed.text-sm .wrapper .control-sidebar{top:calc(2.62475rem + 1px)}.layout-xl-navbar-fixed.layout-fixed.text-sm .wrapper .sidebar{margin-top:calc(2.62475rem + 1px)}.layout-xl-navbar-fixed .wrapper .control-sidebar{top:0}.layout-xl-navbar-fixed .wrapper a.anchor{display:block;position:relative;top:calc(-4.164rem + -1px)}.layout-xl-navbar-fixed .wrapper.sidebar-collapse .brand-link{height:calc(3.164rem + 1px);transition:width .3s ease-in-out;width:5.4rem}.layout-xl-navbar-fixed .wrapper.sidebar-collapse .brand-link.text-sm,.text-sm .layout-xl-navbar-fixed .wrapper.sidebar-collapse .brand-link{height:calc(2.62475rem + 1px)}.layout-xl-navbar-fixed .wrapper.sidebar-collapse .main-sidebar:hover .brand-link{transition:width .3s ease-in-out;width:260px}.layout-xl-navbar-fixed .wrapper .brand-link{overflow:hidden;position:fixed;top:0;transition:width .3s ease-in-out;width:260px;z-index:1035}.layout-xl-navbar-fixed .wrapper .sidebar-dark-primary .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-xl-navbar-fixed .wrapper .sidebar-light-primary .brand-link:not([class*=navbar]){background-color:#fff}.layout-xl-navbar-fixed .wrapper .sidebar-dark-secondary .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-xl-navbar-fixed .wrapper .sidebar-light-secondary .brand-link:not([class*=navbar]){background-color:#fff}.layout-xl-navbar-fixed .wrapper .sidebar-dark-success .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-xl-navbar-fixed .wrapper .sidebar-light-success .brand-link:not([class*=navbar]){background-color:#fff}.layout-xl-navbar-fixed .wrapper .sidebar-dark-info .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-xl-navbar-fixed .wrapper .sidebar-light-info .brand-link:not([class*=navbar]){background-color:#fff}.layout-xl-navbar-fixed .wrapper .sidebar-dark-warning .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-xl-navbar-fixed .wrapper .sidebar-light-warning .brand-link:not([class*=navbar]){background-color:#fff}.layout-xl-navbar-fixed .wrapper .sidebar-dark-danger .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-xl-navbar-fixed .wrapper .sidebar-light-danger .brand-link:not([class*=navbar]){background-color:#fff}.layout-xl-navbar-fixed .wrapper .sidebar-dark-light .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-xl-navbar-fixed .wrapper .sidebar-light-light .brand-link:not([class*=navbar]){background-color:#fff}.layout-xl-navbar-fixed .wrapper .sidebar-dark-dark .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-xl-navbar-fixed .wrapper .sidebar-light-dark .brand-link:not([class*=navbar]){background-color:#fff}.layout-xl-navbar-fixed .wrapper .content-wrapper{margin-top:calc(3.164rem + 1px)}.layout-xl-navbar-fixed .wrapper .main-header.text-sm~.content-wrapper,.text-sm .layout-xl-navbar-fixed .wrapper .main-header~.content-wrapper{margin-top:calc(2.62475rem + 1px)}.layout-xl-navbar-fixed .wrapper .main-header{left:0;position:fixed;right:0;top:0;z-index:1037}.layout-xl-navbar-fixed.text-sm .wrapper .content-wrapper{margin-top:calc(2.62475rem + 1px)}body:not(.layout-fixed).layout-xl-navbar-fixed .wrapper .main-sidebar{margin-top:calc(-3.164rem + -1px)}body:not(.layout-fixed).layout-xl-navbar-fixed .wrapper .main-sidebar .sidebar{margin-top:calc(3.164rem + 1px)}body:not(.layout-fixed).layout-xl-navbar-fixed.text-sm .wrapper .main-sidebar{margin-top:calc(-2.62475rem + -1px)}body:not(.layout-fixed).layout-xl-navbar-fixed.text-sm .wrapper .main-sidebar .sidebar{margin-top:calc(2.62475rem + 1px)}.layout-xl-navbar-not-fixed .wrapper .brand-link{position:static}.layout-xl-navbar-not-fixed .wrapper .content-wrapper,.layout-xl-navbar-not-fixed .wrapper .sidebar{margin-top:0}.layout-xl-navbar-not-fixed .wrapper .main-header{position:static}.layout-xl-navbar-not-fixed.layout-fixed .wrapper .sidebar{margin-top:0}}.layout-footer-not-fixed .wrapper .content-wrapper{margin-bottom:0}.layout-footer-fixed .wrapper .control-sidebar{bottom:0}.layout-footer-fixed .wrapper .main-footer{bottom:0;left:0;position:fixed;right:0;z-index:1032}.layout-footer-fixed .wrapper .content-wrapper{padding-bottom:3.45rem}.layout-footer-not-fixed .wrapper .main-footer{position:static}@media (min-width:576px){.layout-sm-footer-fixed .wrapper .control-sidebar{bottom:0}.layout-sm-footer-fixed .wrapper .main-footer{bottom:0;left:0;position:fixed;right:0;z-index:1032}.layout-sm-footer-fixed .wrapper .content-wrapper{padding-bottom:3.45rem}.layout-sm-footer-not-fixed .wrapper .main-footer{position:static}}@media (min-width:768px){.layout-md-footer-fixed .wrapper .control-sidebar{bottom:0}.layout-md-footer-fixed .wrapper .main-footer{bottom:0;left:0;position:fixed;right:0;z-index:1032}.layout-md-footer-fixed .wrapper .content-wrapper{padding-bottom:3.45rem}.layout-md-footer-not-fixed .wrapper .main-footer{position:static}}@media (min-width:992px){.layout-lg-footer-fixed .wrapper .control-sidebar{bottom:0}.layout-lg-footer-fixed .wrapper .main-footer{bottom:0;left:0;position:fixed;right:0;z-index:1032}.layout-lg-footer-fixed .wrapper .content-wrapper{padding-bottom:3.45rem}.layout-lg-footer-not-fixed .wrapper .main-footer{position:static}}@media (min-width:1200px){.layout-xl-footer-fixed .wrapper .control-sidebar{bottom:0}.layout-xl-footer-fixed .wrapper .main-footer{bottom:0;left:0;position:fixed;right:0;z-index:1032}.layout-xl-footer-fixed .wrapper .content-wrapper{padding-bottom:3.45rem}.layout-xl-footer-not-fixed .wrapper .main-footer{position:static}}.layout-top-nav .wrapper{margin-left:0}.layout-top-nav .wrapper .main-header .brand-image{margin-top:-.5rem;margin-right:.2rem;height:33px}.layout-top-nav .wrapper .main-sidebar{bottom:inherit;height:inherit}.layout-top-nav .wrapper .content-wrapper,.layout-top-nav .wrapper .main-footer,.layout-top-nav .wrapper .main-header,body.sidebar-collapse:not(.sidebar-mini-md):not(.sidebar-mini) .content-wrapper,body.sidebar-collapse:not(.sidebar-mini-md):not(.sidebar-mini) .content-wrapper:before,body.sidebar-collapse:not(.sidebar-mini-md):not(.sidebar-mini) .main-footer,body.sidebar-collapse:not(.sidebar-mini-md):not(.sidebar-mini) .main-footer:before,body.sidebar-collapse:not(.sidebar-mini-md):not(.sidebar-mini) .main-header,body.sidebar-collapse:not(.sidebar-mini-md):not(.sidebar-mini) .main-header:before{margin-left:0}@media (min-width:768px){body:not(.sidebar-mini-md) .content-wrapper,body:not(.sidebar-mini-md) .main-footer,body:not(.sidebar-mini-md) .main-header{transition:margin-left .3s ease-in-out;margin-left:260px}}@media (min-width:768px) and (prefers-reduced-motion:reduce){body:not(.sidebar-mini-md) .content-wrapper,body:not(.sidebar-mini-md) .main-footer,body:not(.sidebar-mini-md) .main-header{transition:none}}@media (min-width:768px){.sidebar-collapse body:not(.sidebar-mini-md) .content-wrapper,.sidebar-collapse body:not(.sidebar-mini-md) .main-footer,.sidebar-collapse body:not(.sidebar-mini-md) .main-header{margin-left:0}}@media (max-width:991.98px){body:not(.sidebar-mini-md) .content-wrapper,body:not(.sidebar-mini-md) .content-wrapper:before,body:not(.sidebar-mini-md) .main-footer,body:not(.sidebar-mini-md) .main-footer:before,body:not(.sidebar-mini-md) .main-header,body:not(.sidebar-mini-md) .main-header:before{margin-left:0}}@media (min-width:768px){.sidebar-mini-md .content-wrapper,.sidebar-mini-md .main-footer,.sidebar-mini-md .main-header{transition:margin-left .3s ease-in-out;margin-left:260px}}@media (min-width:768px) and (prefers-reduced-motion:reduce){.sidebar-mini-md .content-wrapper,.sidebar-mini-md .main-footer,.sidebar-mini-md .main-header{transition:none}}@media (min-width:768px){.sidebar-collapse .sidebar-mini-md .content-wrapper,.sidebar-collapse .sidebar-mini-md .main-footer,.sidebar-collapse .sidebar-mini-md .main-header{margin-left:5.4rem}}@media (max-width:991.98px){.sidebar-mini-md .content-wrapper,.sidebar-mini-md .content-wrapper:before,.sidebar-mini-md .main-footer,.sidebar-mini-md .main-footer:before,.sidebar-mini-md .main-header,.sidebar-mini-md .main-header:before{margin-left:5.4rem}}.content-wrapper{background:#f4f6f9}.content-wrapper>.content{padding:0 1rem}.main-sidebar,.main-sidebar:before{transition:margin-left .3s ease-in-out,width .3s ease-in-out;width:260px}@media (prefers-reduced-motion:reduce){.main-sidebar,.main-sidebar:before{transition:none}}.sidebar-collapse:not(.sidebar-mini):not(.sidebar-mini-md) .main-sidebar,.sidebar-collapse:not(.sidebar-mini):not(.sidebar-mini-md) .main-sidebar:before{box-shadow:none!important}.sidebar-collapse .main-sidebar,.sidebar-collapse .main-sidebar:before{margin-left:-260px}.sidebar-collapse .main-sidebar .nav-sidebar.nav-child-indent .nav-treeview{padding:0}@media (max-width:767.98px){.main-sidebar,.main-sidebar:before{box-shadow:none!important;margin-left:-260px}.sidebar-open .main-sidebar,.sidebar-open .main-sidebar:before{margin-left:0}}:not(.layout-fixed) .main-sidebar{height:inherit;min-height:100%;position:absolute;top:0}.layout-fixed .brand-link{width:260px}.layout-fixed .main-sidebar{left:0}.layout-fixed .control-sidebar,.layout-fixed .main-sidebar{bottom:0;float:none;height:100vh;position:fixed;top:0}.layout-fixed .control-sidebar .control-sidebar-content{height:calc(100vh - 3.164rem - 1px)}@supports (-webkit-touch-callout:none){.layout-fixed .main-sidebar{height:inherit}}.main-footer{background:transparent;border-top:0 solid #dae1e7;padding:.5rem 1rem;font-size:90%}.main-footer.text-sm,.text-sm .main-footer{padding:.812rem}.content-header{padding:15px 1rem}.text-sm .content-header{padding:10px 1rem}.content-header h1{font-size:1.8rem;margin:0}.text-sm .content-header h1{font-size:1.5rem}.content-header .breadcrumb{background:transparent;line-height:1.8rem;margin-bottom:0;padding:0;font-size:97%}.text-sm .content-header .breadcrumb{line-height:1.5rem}.hold-transition .content-wrapper,.hold-transition .control-sidebar,.hold-transition .control-sidebar *,.hold-transition .main-footer,.hold-transition .main-header,.hold-transition .main-sidebar,.hold-transition .main-sidebar *{transition:none!important}.main-header{border-bottom:1px solid #dae1e7;z-index:1034}.main-header .nav-link{height:2.164rem;position:relative}.main-header.text-sm .nav-link,.text-sm .main-header .nav-link{height:1.62475rem;padding:.35rem .5rem}.main-header.text-sm .nav-link>.fa,.main-header.text-sm .nav-link>.fab,.main-header.text-sm .nav-link>.far,.main-header.text-sm .nav-link>.fas,.main-header.text-sm .nav-link>.glyphicon,.main-header.text-sm .nav-link>.ion,.text-sm .main-header .nav-link>.fa,.text-sm .main-header .nav-link>.fab,.text-sm .main-header .nav-link>.far,.text-sm .main-header .nav-link>.fas,.text-sm .main-header .nav-link>.glyphicon,.text-sm .main-header .nav-link>.ion{font-size:1rem}.main-header .navbar-nav .nav-item{margin:0}.main-header .navbar-nav[class*=-right] .dropdown-menu{left:auto;margin-top:-3px;right:0}@media (max-width:575.98px){.main-header .navbar-nav[class*=-right] .dropdown-menu{left:0;right:auto}}.navbar-img{height:calc(3.164rem + 1px)/2;width:auto}.navbar-badge{font-size:.6rem;font-weight:300;padding:2px 4px;position:absolute;right:5px;top:9px}.btn-navbar{background-color:transparent;border-left-width:0}.form-control-navbar{border-right-width:0}.form-control-navbar+.input-group-append{margin-left:0}.btn-navbar,.form-control-navbar{transition:none}.navbar-dark .btn-navbar,.navbar-dark .form-control-navbar{background-color:hsla(0,0%,100%,.2);border:0}.navbar-dark .form-control-navbar::-moz-placeholder{color:hsla(0,0%,100%,.6)}.navbar-dark .form-control-navbar:-ms-input-placeholder{color:hsla(0,0%,100%,.6)}.navbar-dark .form-control-navbar::placeholder{color:hsla(0,0%,100%,.6)}.navbar-dark .form-control-navbar+.input-group-append>.btn-navbar{color:hsla(0,0%,100%,.6)}.navbar-dark .form-control-navbar:focus,.navbar-dark .form-control-navbar:focus+.input-group-append .btn-navbar{background-color:hsla(0,0%,100%,.6);border:0!important;color:#1e1e1e}.navbar-light .btn-navbar,.navbar-light .form-control-navbar{background-color:#b4bac2;border:0}.navbar-light .form-control-navbar::-moz-placeholder{color:rgba(0,0,0,.6)}.navbar-light .form-control-navbar:-ms-input-placeholder{color:rgba(0,0,0,.6)}.navbar-light .form-control-navbar::placeholder{color:rgba(0,0,0,.6)}.navbar-light .form-control-navbar+.input-group-append>.btn-navbar{color:rgba(0,0,0,.6)}.navbar-light .form-control-navbar:focus,.navbar-light .form-control-navbar:focus+.input-group-append .btn-navbar{background-color:#ededed;border:0!important;color:#1e1e1e}.brand-link{display:block;font-size:2rem;line-height:1.25;padding:.132rem .5rem;transition:width .3s ease-in-out;white-space:nowrap}.brand-link:hover{color:#fff;text-decoration:none}.text-sm .brand-link{font-size:inherit}[class*=sidebar-dark] .brand-link{border-bottom:0;color:hsla(0,0%,100%,.8)}[class*=sidebar-light] .brand-link{border-bottom:0;color:rgba(34,41,47,.8)}.brand-link .brand-image{float:left;line-height:.8;margin-left:.8rem;margin-right:.5rem;margin-top:-3px;max-height:33px;width:auto}.brand-link .brand-image-xs{float:left;line-height:.8;margin-top:-.1rem;max-height:33px;width:auto}.brand-link .brand-image-xl{line-height:.8;max-height:40px;width:auto}.brand-link.text-sm .brand-image,.text-sm .brand-link .brand-image{height:29px;margin-bottom:-.25rem;margin-left:.95rem;margin-top:-.25rem}.brand-link.text-sm .brand-image-xs,.text-sm .brand-link .brand-image-xs{margin-top:-.2rem;max-height:29px}.brand-link.text-sm .brand-image-xl,.text-sm .brand-link .brand-image-xl{margin-top:-.225rem;max-height:38px}.main-sidebar{height:100vh;overflow-y:hidden;z-index:1038}.main-sidebar a:-moz-focusring{border:0;outline:none}.main-sidebar .nav .nav-item .nav-link{padding:10px 10px 10px 25px!important}.main-sidebar .nav-treeview.nav .nav-item .nav-link{padding:5px 10px 7px 25px!important}.sidebar{height:calc(100% - 3.164rem - 1px);overflow-y:auto;padding:0 .5rem}.user-panel{position:relative}[class*=sidebar-dark] .user-panel{border-bottom:1px solid #3c4853}[class*=sidebar-light] .user-panel{border-bottom:1px solid #dae1e7}.user-panel,.user-panel .info{overflow:hidden;white-space:nowrap}.user-panel .image{display:inline-block;padding-left:.3rem}.user-panel img{height:auto;width:2.5666666667rem}.user-panel .info{display:inline-block;padding:5px 5px 5px 10px}.user-panel .dropdown-menu,.user-panel .status{font-size:1rem}.nav-sidebar .nav-item>.nav-link{margin-bottom:.2rem}.nav-sidebar .nav-item>.nav-link .right{transition:transform .3s ease-in-out}@media (prefers-reduced-motion:reduce){.nav-sidebar .nav-item>.nav-link .right{transition:none}}.nav-sidebar .nav-link>.right,.nav-sidebar .nav-link>p>.right{position:absolute;right:1rem;top:.9rem}.nav-sidebar .nav-link>.right i,.nav-sidebar .nav-link>.right span,.nav-sidebar .nav-link>p>.right i,.nav-sidebar .nav-link>p>.right span{margin-left:.5rem}.nav-sidebar .nav-link>.right:nth-child(2),.nav-sidebar .nav-link>p>.right:nth-child(2){right:2.2rem}.nav-sidebar .menu-open>.nav-treeview{display:block;border-radius:0}.nav-sidebar .menu-open>.nav-link i.right{transform:rotate(-90deg)}.nav-sidebar>.nav-item{margin-bottom:0}.nav-sidebar>.nav-item .nav-icon{margin-left:.05rem;font-size:1.2rem;margin-right:.2rem;text-align:center;width:2.4rem}.nav-sidebar>.nav-item .nav-icon.fa,.nav-sidebar>.nav-item .nav-icon.fab,.nav-sidebar>.nav-item .nav-icon.far,.nav-sidebar>.nav-item .nav-icon.fas,.nav-sidebar>.nav-item .nav-icon.glyphicon,.nav-sidebar>.nav-item .nav-icon.ion{font-size:1.1rem}.nav-sidebar>.nav-item .float-right{margin-top:3px}.nav-sidebar .nav-treeview{display:none;list-style:none;padding:0}.nav-sidebar .nav-treeview>.nav-item>.nav-link>.nav-icon{width:2.4rem}.nav-sidebar.nav-child-indent .nav-treeview{transition:padding .3s ease-in-out;padding-left:1rem}.text-sm .nav-sidebar.nav-child-indent .nav-treeview{padding-left:.5rem}.nav-sidebar.nav-child-indent.nav-legacy .nav-treeview .nav-treeview{padding-left:2rem;margin-left:-1rem}.text-sm .nav-sidebar.nav-child-indent.nav-legacy .nav-treeview .nav-treeview{padding-left:1rem;margin-left:-.5rem}.nav-sidebar .nav-header{font-size:.9rem;padding:.357rem}.nav-sidebar .nav-header:not(:first-of-type){padding:1.7rem 1rem .5rem}.nav-sidebar .nav-link p{display:inline-block;margin:0}#sidebar-overlay{background-color:rgba(34,41,47,.1);bottom:0;display:none;left:0;position:fixed;right:0;top:0;z-index:1037}@media (max-width:991.98px){.sidebar-open #sidebar-overlay{display:block}}[class*=sidebar-light-]{background-color:#fff}[class*=sidebar-light-] .user-panel a:hover{color:#555}[class*=sidebar-light-] .user-panel .status,[class*=sidebar-light-] .user-panel .status:active,[class*=sidebar-light-] .user-panel .status:focus,[class*=sidebar-light-] .user-panel .status:hover{background:transparent;color:#555}[class*=sidebar-light-] .user-panel .dropdown-menu{border-color:transparent}[class*=sidebar-light-] .user-panel .dropdown-item{color:#626262}[class*=sidebar-light-] .nav-sidebar>.nav-item>.nav-link:active,[class*=sidebar-light-] .nav-sidebar>.nav-item>.nav-link:focus{color:#555}[class*=sidebar-light-] .nav-sidebar>.nav-item>.nav-link i{margin-right:.75rem;font-size:1.2rem}[class*=sidebar-light-] .nav-sidebar>.nav-item>.nav-link p i{margin-right:0;margin-top:1px}[class*=sidebar-light-] .nav-sidebar>.nav-item.menu-open>.nav-link,[class*=sidebar-light-] .nav-sidebar>.nav-item:hover>.nav-link{background-color:transparent;color:#555}[class*=sidebar-light-] .nav-sidebar>.nav-item>.nav-link.active{color:#fff}[class*=sidebar-light-] .nav-sidebar>.nav-item>.nav-treeview{background:transparent}[class*=sidebar-light-] .nav-header{background:inherit;color:#484848}[class*=sidebar-light-] .sidebar a{color:#555}[class*=sidebar-light-] .sidebar a:hover{text-decoration:none}[class*=sidebar-light-] .nav-treeview>.nav-item>.nav-link{color:#555}[class*=sidebar-light-] .nav-treeview>.nav-item>.nav-link i{margin-right:.75rem;margin-left:3px}[class*=sidebar-light-] .nav-treeview>.nav-item>.nav-link p i{margin-right:0}[class*=sidebar-light-] .nav-treeview>.nav-item>.nav-link.active,[class*=sidebar-light-] .nav-treeview>.nav-item>.nav-link.active:hover{background-color:transparent!important;background-image:linear-gradient(118deg,rgba(98,168,234,.95),rgba(98,168,234,.7));color:#fff;box-shadow:0 0 8px 1px rgba(98,168,234,.7)}[class*=sidebar-light-] .nav-treeview>.nav-item>.nav-link:hover{background-color:transparent}[class*=sidebar-light-] .nav-flat .nav-item .nav-treeview .nav-treeview,[class*=sidebar-light-] .nav-flat .nav-item .nav-treeview>.nav-item>.nav-link,[class*=sidebar-light-] .nav-flat .nav-item .nav-treeview>.nav-item>.nav-link.active{border-color:linear-gradient(118deg,#62a8ea,rgba(98,168,234,.7))}[class*=sidebar-dark-]{background-image:linear-gradient(0deg,#77889f,#3e4958)}[class*=sidebar-dark-] .nav-treeview.nav .nav-item .nav-link{font-size:1rem!important;margin-bottom:0}[class*=sidebar-dark-] .nav-sidebar .nav-link>p>.right{right:.5rem}[class*=sidebar-dark-] .user-panel a:hover{color:hsla(0,0%,100%,.95)}[class*=sidebar-dark-] .user-panel .status,[class*=sidebar-dark-] .user-panel .status:active,[class*=sidebar-dark-] .user-panel .status:focus,[class*=sidebar-dark-] .user-panel .status:hover{background:transparent;color:hsla(0,0%,100%,.95)}[class*=sidebar-dark-] .user-panel .dropdown-menu{border-color:transparent}[class*=sidebar-dark-] .user-panel .dropdown-item{color:#626262}[class*=sidebar-dark-] .nav-sidebar>.nav-item>.nav-link:active{color:#fff;font-weight:700}[class*=sidebar-dark-] .nav-sidebar>.nav-item>.nav-link:hover{color:hsla(0,0%,100%,.95)}[class*=sidebar-dark-] .nav-sidebar>.nav-item i{margin-right:.75rem;color:hsla(0,0%,100%,.95)}[class*=sidebar-dark-] .nav-sidebar>.nav-item.menu-open>.nav-link,[class*=sidebar-dark-] .nav-sidebar>.nav-item:hover>.nav-link,[class*=sidebar-dark-] .nav-sidebar>.nav-item>.nav-link:focus{background-color:transparent;color:hsla(0,0%,100%,.95)}[class*=sidebar-dark-] .nav-sidebar>.nav-item>.nav-link.active{color:#fff;background:transparent;font-weight:700}[class*=sidebar-dark-] .nav-header{background:inherit;color:hsla(0,0%,100%,.95)}[class*=sidebar-dark-] .sidebar a{color:hsla(0,0%,100%,.95)}[class*=sidebar-dark-] .sidebar a:focus,[class*=sidebar-dark-] .sidebar a:hover{text-decoration:none}[class*=sidebar-dark-] .nav-treeview>.nav-item>.nav-link{color:hsla(0,0%,100%,.95)}[class*=sidebar-dark-] .nav-treeview>.nav-item>.nav-link.active,[class*=sidebar-dark-] .nav-treeview>.nav-item>.nav-link.active:focus,[class*=sidebar-dark-] .nav-treeview>.nav-item>.nav-link.active:hover,[class*=sidebar-dark-] .nav-treeview>.nav-item>.nav-link:focus,[class*=sidebar-dark-] .nav-treeview>.nav-item>.nav-link:hover{background-color:transparent;color:#fff;font-weight:700}[class*=sidebar-dark-] .nav-flat .nav-item .nav-treeview .nav-treeview,[class*=sidebar-dark-] .nav-flat .nav-item .nav-treeview>.nav-item>.nav-link,[class*=sidebar-dark-] .nav-flat .nav-item .nav-treeview>.nav-item>.nav-link.active{border-color:transparent}.sidebar-light-primary .nav-item>.nav-link.active{background-color:transparent!important;background-image:linear-gradient(118deg,rgba(98,168,234,.95),rgba(98,168,234,.7));color:#fff;box-shadow:0 0 8px 1px rgba(98,168,234,.7)}.sidebar-light-primary .active-bg-light .nav-item>.nav-link.active{background-color:rgba(98,168,234,.15)!important;color:#62a8ea!important;font-weight:700;box-shadow:0 0 8px 1px rgba(98,168,234,.15)}.sidebar-mini-md .main-sidebar.sidebar-focused .nav-compact.nav-sidebar.nav-child-indent:not(.nav-flat) .nav-treeview,.sidebar-mini-md .main-sidebar:not(.sidebar-no-expand) .nav-compact.nav-sidebar.nav-child-indent:not(.nav-flat) .nav-treeview,.sidebar-mini-md .main-sidebar:not(.sidebar-no-expand):hover .nav-compact.nav-sidebar.nav-child-indent:not(.nav-flat) .nav-treeview,.sidebar-mini .main-sidebar.sidebar-focused .nav-compact.nav-sidebar.nav-child-indent:not(.nav-flat) .nav-treeview,.sidebar-mini .main-sidebar:not(.sidebar-no-expand) .nav-compact.nav-sidebar.nav-child-indent:not(.nav-flat) .nav-treeview,.sidebar-mini .main-sidebar:not(.sidebar-no-expand):hover .nav-compact.nav-sidebar.nav-child-indent:not(.nav-flat) .nav-treeview{padding-left:1rem;margin-left:-.5rem}.nav-flat{margin:-.25rem -.5rem 0}.nav-flat .nav-item>.nav-link{border-radius:0;margin-bottom:0}.nav-flat .nav-item>.nav-link>.nav-icon{margin-left:.55rem}.nav-flat:not(.nav-child-indent) .nav-treeview .nav-item>.nav-link>.nav-icon{margin-left:.4rem}.nav-flat.nav-child-indent .nav-treeview{padding-left:0}.nav-flat.nav-child-indent .nav-treeview .nav-icon{margin-left:.85rem}.nav-flat.nav-child-indent .nav-treeview .nav-treeview{border-left:.2rem solid}.nav-flat.nav-child-indent .nav-treeview .nav-treeview .nav-icon{margin-left:1.15rem}.nav-flat.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-icon{margin-left:1.45rem}.nav-flat.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-icon{margin-left:1.75rem}.nav-flat.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-icon{margin-left:2.05rem}.sidebar-collapse .nav-flat.nav-child-indent .nav-treeview .nav-icon{margin-left:.55rem}.sidebar-collapse .nav-flat.nav-child-indent .nav-treeview .nav-link{padding-left:.3rem}.sidebar-collapse .nav-flat.nav-child-indent .nav-treeview .nav-treeview .nav-icon{margin-left:.35rem}.sidebar-collapse .nav-flat.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-icon{margin-left:.15rem}.sidebar-collapse .nav-flat.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-icon{margin-left:-.15rem}.sidebar-collapse .nav-flat.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-icon{margin-left:-.35rem}.sidebar-mini-md .main-sidebar.sidebar-focused .nav-flat.nav-compact.nav-sidebar .nav-treeview .nav-icon,.sidebar-mini-md .main-sidebar:not(.sidebar-no-expand):hover .nav-flat.nav-compact.nav-sidebar .nav-treeview .nav-icon,.sidebar-mini .main-sidebar.sidebar-focused .nav-flat.nav-compact.nav-sidebar .nav-treeview .nav-icon,.sidebar-mini .main-sidebar:not(.sidebar-no-expand):hover .nav-flat.nav-compact.nav-sidebar .nav-treeview .nav-icon{margin-left:.4rem}.sidebar-mini-md .main-sidebar.sidebar-focused .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-icon,.sidebar-mini-md .main-sidebar:not(.sidebar-no-expand):hover .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-icon,.sidebar-mini .main-sidebar.sidebar-focused .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-icon,.sidebar-mini .main-sidebar:not(.sidebar-no-expand):hover .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-icon{margin-left:.85rem}.sidebar-mini-md .main-sidebar.sidebar-focused .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-icon,.sidebar-mini-md .main-sidebar:not(.sidebar-no-expand):hover .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-icon,.sidebar-mini .main-sidebar.sidebar-focused .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-icon,.sidebar-mini .main-sidebar:not(.sidebar-no-expand):hover .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-icon{margin-left:1.15rem}.sidebar-mini-md .main-sidebar.sidebar-focused .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-icon,.sidebar-mini-md .main-sidebar:not(.sidebar-no-expand):hover .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-icon,.sidebar-mini .main-sidebar.sidebar-focused .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-icon,.sidebar-mini .main-sidebar:not(.sidebar-no-expand):hover .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-icon{margin-left:1.45rem}.sidebar-mini-md .main-sidebar.sidebar-focused .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-icon,.sidebar-mini-md .main-sidebar:not(.sidebar-no-expand):hover .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-icon,.sidebar-mini .main-sidebar.sidebar-focused .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-icon,.sidebar-mini .main-sidebar:not(.sidebar-no-expand):hover .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-icon{margin-left:1.75rem}.sidebar-mini-md .main-sidebar.sidebar-focused .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-icon,.sidebar-mini-md .main-sidebar:not(.sidebar-no-expand):hover .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-icon,.sidebar-mini .main-sidebar.sidebar-focused .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-icon,.sidebar-mini .main-sidebar:not(.sidebar-no-expand):hover .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-icon{margin-left:2.05rem}.nav-flat .nav-icon{transition:margin-left .3s ease-in-out}@media (prefers-reduced-motion:reduce){.nav-flat .nav-icon{transition:none}}.nav-flat .nav-treeview .nav-icon{margin-left:-.2rem}.nav-flat.nav-sidebar>.nav-item .nav-treeview,.nav-flat.nav-sidebar>.nav-item>.nav-treeview{background:hsla(0,0%,100%,.05)}.nav-flat.nav-sidebar>.nav-item .nav-treeview .nav-item>.nav-link,.nav-flat.nav-sidebar>.nav-item>.nav-treeview .nav-item>.nav-link{border-left:.2rem solid}.nav-legacy{margin:-.25rem -.5rem 0}.nav-legacy.nav-sidebar .nav-item>.nav-link{border-radius:0;margin-bottom:0}.nav-legacy.nav-sidebar .nav-item>.nav-link>.nav-icon{margin-left:.55rem}.text-sm .nav-legacy.nav-sidebar .nav-item>.nav-link>.nav-icon{margin-left:.75rem}.nav-legacy.nav-sidebar>.nav-item>.nav-link.active{background:inherit;border-left:3px solid transparent;box-shadow:none}.nav-legacy.nav-sidebar>.nav-item>.nav-link.active>.nav-icon{margin-left:calc(.55rem - 3px)}.text-sm .nav-legacy.nav-sidebar.nav-flat .nav-treeview .nav-item>.nav-link>.nav-icon,.text-sm .nav-legacy.nav-sidebar>.nav-item>.nav-link.active>.nav-icon{margin-left:calc(.75rem - 3px)}.sidebar-mini-md .nav-legacy>.nav-item .nav-link .nav-icon,.sidebar-mini .nav-legacy>.nav-item .nav-link .nav-icon{transition:margin-left .3s ease-in-out;margin-left:.75rem}@media (prefers-reduced-motion:reduce){.sidebar-mini-md .nav-legacy>.nav-item .nav-link .nav-icon,.sidebar-mini .nav-legacy>.nav-item .nav-link .nav-icon{transition:none}}.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused .nav-legacy.nav-child-indent .nav-treeview,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover .nav-legacy.nav-child-indent .nav-treeview,.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused .nav-legacy.nav-child-indent .nav-treeview,.sidebar-mini.sidebar-collapse .main-sidebar:hover .nav-legacy.nav-child-indent .nav-treeview{padding-left:1rem}.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused .nav-legacy.nav-child-indent .nav-treeview .nav-treeview,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover .nav-legacy.nav-child-indent .nav-treeview .nav-treeview,.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused .nav-legacy.nav-child-indent .nav-treeview .nav-treeview,.sidebar-mini.sidebar-collapse .main-sidebar:hover .nav-legacy.nav-child-indent .nav-treeview .nav-treeview{padding-left:2rem;margin-left:-1rem}.sidebar-mini-md.sidebar-collapse.text-sm .main-sidebar.sidebar-focused .nav-legacy.nav-child-indent .nav-treeview,.sidebar-mini-md.sidebar-collapse.text-sm .main-sidebar:hover .nav-legacy.nav-child-indent .nav-treeview,.sidebar-mini.sidebar-collapse.text-sm .main-sidebar.sidebar-focused .nav-legacy.nav-child-indent .nav-treeview,.sidebar-mini.sidebar-collapse.text-sm .main-sidebar:hover .nav-legacy.nav-child-indent .nav-treeview{padding-left:.5rem}.sidebar-mini-md.sidebar-collapse.text-sm .main-sidebar.sidebar-focused .nav-legacy.nav-child-indent .nav-treeview .nav-treeview,.sidebar-mini-md.sidebar-collapse.text-sm .main-sidebar:hover .nav-legacy.nav-child-indent .nav-treeview .nav-treeview,.sidebar-mini.sidebar-collapse.text-sm .main-sidebar.sidebar-focused .nav-legacy.nav-child-indent .nav-treeview .nav-treeview,.sidebar-mini.sidebar-collapse.text-sm .main-sidebar:hover .nav-legacy.nav-child-indent .nav-treeview .nav-treeview{padding-left:1rem;margin-left:-.5rem}.sidebar-mini-md.sidebar-collapse .nav-legacy>.nav-item>.nav-link .nav-icon,.sidebar-mini.sidebar-collapse .nav-legacy>.nav-item>.nav-link .nav-icon{margin-left:.55rem}.sidebar-mini-md.sidebar-collapse .nav-legacy>.nav-item>.nav-link.active>.nav-icon,.sidebar-mini.sidebar-collapse .nav-legacy>.nav-item>.nav-link.active>.nav-icon{margin-left:.36rem}.sidebar-mini-md.sidebar-collapse .nav-legacy.nav-child-indent .nav-treeview .nav-treeview,.sidebar-mini.sidebar-collapse .nav-legacy.nav-child-indent .nav-treeview .nav-treeview{padding-left:0;margin-left:0}.sidebar-mini-md.sidebar-collapse.text-sm .nav-legacy>.nav-item>.nav-link .nav-icon,.sidebar-mini.sidebar-collapse.text-sm .nav-legacy>.nav-item>.nav-link .nav-icon{margin-left:.75rem}.sidebar-mini-md.sidebar-collapse.text-sm .nav-legacy>.nav-item>.nav-link.active>.nav-icon,.sidebar-mini.sidebar-collapse.text-sm .nav-legacy>.nav-item>.nav-link.active>.nav-icon{margin-left:calc(.75rem - 3px)}[class*=sidebar-dark] .nav-legacy.nav-sidebar>.nav-item .nav-treeview,[class*=sidebar-dark] .nav-legacy.nav-sidebar>.nav-item>.nav-treeview{background:hsla(0,0%,100%,.05)}[class*=sidebar-dark] .nav-legacy.nav-sidebar>.nav-item>.nav-link.active{color:#fff}[class*=sidebar-dark] .nav-legacy .nav-treeview>.nav-item>.nav-link.active,[class*=sidebar-dark] .nav-legacy .nav-treeview>.nav-item>.nav-link:focus,[class*=sidebar-dark] .nav-legacy .nav-treeview>.nav-item>.nav-link:hover{background:none;color:#fff}[class*=sidebar-light] .nav-legacy.nav-sidebar>.nav-item .nav-treeview,[class*=sidebar-light] .nav-legacy.nav-sidebar>.nav-item>.nav-treeview{background:rgba(34,41,47,.05)}[class*=sidebar-light] .nav-legacy.nav-sidebar>.nav-item>.nav-link.active{color:#fff}[class*=sidebar-light] .nav-legacy .nav-treeview>.nav-item>.nav-link.active,[class*=sidebar-light] .nav-legacy .nav-treeview>.nav-item>.nav-link:focus,[class*=sidebar-light] .nav-legacy .nav-treeview>.nav-item>.nav-link:hover{background:none;color:#fff}.nav-collapse-hide-child .menu-open>.nav-treeview{max-height:-webkit-min-content;max-height:-moz-min-content;max-height:min-content;opacity:1}.sidebar-collapse .nav-collapse-hide-child .menu-open>.nav-treeview{max-height:0;opacity:0}.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused .nav-collapse-hide-child .menu-open>.nav-treeview,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover .nav-collapse-hide-child .menu-open>.nav-treeview,.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused .nav-collapse-hide-child .menu-open>.nav-treeview,.sidebar-mini.sidebar-collapse .main-sidebar:hover .nav-collapse-hide-child .menu-open>.nav-treeview{max-height:-webkit-min-content;max-height:-moz-min-content;max-height:min-content;opacity:1}.nav-compact .nav-header,.nav-compact .nav-link{padding-top:.1785rem;padding-bottom:.1785rem}.nav-compact .nav-header:not(:first-of-type){padding-top:.5355rem;padding-bottom:.1785rem}.nav-compact .nav-link>.right,.nav-compact .nav-link>p>.right{top:.465rem}.text-sm .nav-compact .nav-link>.right,.text-sm .nav-compact .nav-link>p>.right{top:.7rem}[class*=sidebar-dark] .btn-sidebar,[class*=sidebar-dark] .form-control-sidebar{background:#495567;border:1px solid #5e6e85;color:#fff}[class*=sidebar-dark] .btn-sidebar:focus,[class*=sidebar-dark] .form-control-sidebar:focus{border:1px solid #8695a9}[class*=sidebar-dark] .btn-sidebar:hover{background:#4e5c6e}[class*=sidebar-dark] .btn-sidebar:focus{background:#536276}[class*=sidebar-light] .btn-sidebar,[class*=sidebar-light] .form-control-sidebar{background:#f2f2f2;border:1px solid #d9d9d9;color:#2a2e30}[class*=sidebar-light] .btn-sidebar:focus,[class*=sidebar-light] .form-control-sidebar:focus{border:1px solid #b3b3b3}[class*=sidebar-light] .btn-sidebar:hover{background:#ececec}[class*=sidebar-light] .btn-sidebar:focus{background:#e6e6e6}.logo-xl,.logo-xs{opacity:1;position:absolute;visibility:visible}.logo-xl.brand-image-xs,.logo-xs.brand-image-xs{left:18px;top:12px}.logo-xl.brand-image-xl,.logo-xs.brand-image-xl{left:12px;top:6px}.logo-xs{opacity:0;visibility:hidden}.logo-xs.brand-image-xl{left:16px;top:8px}.brand-link.logo-switch:before{content:"\A0"}@media (min-width:992px){.sidebar-mini .nav-sidebar,.sidebar-mini .nav-sidebar .nav-link,.sidebar-mini .nav-sidebar>.nav-header{white-space:nowrap;overflow:hidden}.sidebar-mini.sidebar-collapse .d-hidden-mini{display:none}.sidebar-mini.sidebar-collapse .content-wrapper,.sidebar-mini.sidebar-collapse .main-footer,.sidebar-mini.sidebar-collapse .main-header{margin-left:5.4rem!important}.sidebar-mini.sidebar-collapse .nav-sidebar .nav-header{display:none}.sidebar-mini.sidebar-collapse .nav-sidebar .nav-link p{width:0}.sidebar-mini.sidebar-collapse .brand-text,.sidebar-mini.sidebar-collapse .nav-sidebar .nav-link p,.sidebar-mini.sidebar-collapse .sidebar .user-panel>.info{margin-left:-10px;opacity:0;visibility:hidden}.sidebar-mini.sidebar-collapse .logo-xl{opacity:0;visibility:hidden}.sidebar-mini.sidebar-collapse .logo-xs{display:inline-block;opacity:1;visibility:visible}.sidebar-mini.sidebar-collapse .main-sidebar{overflow-x:hidden}.sidebar-mini.sidebar-collapse .main-sidebar,.sidebar-mini.sidebar-collapse .main-sidebar:before{margin-left:0;width:5.4rem}.sidebar-mini.sidebar-collapse .main-sidebar .user-panel .image{float:none}.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused,.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused .brand-link,.sidebar-mini.sidebar-collapse .main-sidebar:hover,.sidebar-mini.sidebar-collapse .main-sidebar:hover .brand-link{width:260px}.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused .user-panel,.sidebar-mini.sidebar-collapse .main-sidebar:hover .user-panel{text-align:left}.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused .user-panel .image,.sidebar-mini.sidebar-collapse .main-sidebar:hover .user-panel .image{float:left}.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused .brand-text,.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused .logo-xl,.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused .nav-sidebar .nav-link p,.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused .user-panel>.info,.sidebar-mini.sidebar-collapse .main-sidebar:hover .brand-text,.sidebar-mini.sidebar-collapse .main-sidebar:hover .logo-xl,.sidebar-mini.sidebar-collapse .main-sidebar:hover .nav-sidebar .nav-link p,.sidebar-mini.sidebar-collapse .main-sidebar:hover .user-panel>.info{display:inline-block;margin-left:0;opacity:1;visibility:visible}.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused .logo-xs,.sidebar-mini.sidebar-collapse .main-sidebar:hover .logo-xs{opacity:0;visibility:hidden}.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused .brand-image,.sidebar-mini.sidebar-collapse .main-sidebar:hover .brand-image{margin-right:.5rem}.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused .sidebar-form,.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused .user-panel>.info,.sidebar-mini.sidebar-collapse .main-sidebar:hover .sidebar-form,.sidebar-mini.sidebar-collapse .main-sidebar:hover .user-panel>.info{display:block!important;-webkit-transform:translateZ(0)}.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused .nav-sidebar>.nav-item>.nav-link>span,.sidebar-mini.sidebar-collapse .main-sidebar:hover .nav-sidebar>.nav-item>.nav-link>span{display:inline-block!important}.sidebar-mini.sidebar-collapse .visible-sidebar-mini{display:block!important}.sidebar-mini.sidebar-collapse.layout-fixed .main-sidebar:hover .brand-link{width:260px}.sidebar-mini.sidebar-collapse.layout-fixed .brand-link{width:5.4rem}}@media (max-width:991.98px){.sidebar-mini.sidebar-collapse .main-sidebar{box-shadow:none!important}}@media (min-width:768px){.sidebar-mini-md .nav-sidebar,.sidebar-mini-md .nav-sidebar .nav-link,.sidebar-mini-md .nav-sidebar>.nav-header{white-space:nowrap;overflow:hidden}.sidebar-mini-md.sidebar-collapse .d-hidden-mini{display:none}.sidebar-mini-md.sidebar-collapse .content-wrapper,.sidebar-mini-md.sidebar-collapse .main-footer,.sidebar-mini-md.sidebar-collapse .main-header{margin-left:5.4rem!important}.sidebar-mini-md.sidebar-collapse .nav-sidebar .nav-header{display:none}.sidebar-mini-md.sidebar-collapse .nav-sidebar .nav-link p{width:0}.sidebar-mini-md.sidebar-collapse .brand-text,.sidebar-mini-md.sidebar-collapse .nav-sidebar .nav-link p,.sidebar-mini-md.sidebar-collapse .sidebar .user-panel>.info{margin-left:-10px;opacity:0;visibility:hidden}.sidebar-mini-md.sidebar-collapse .logo-xl{opacity:0;visibility:hidden}.sidebar-mini-md.sidebar-collapse .logo-xs{display:inline-block;opacity:1;visibility:visible}.sidebar-mini-md.sidebar-collapse .main-sidebar{overflow-x:hidden}.sidebar-mini-md.sidebar-collapse .main-sidebar,.sidebar-mini-md.sidebar-collapse .main-sidebar:before{margin-left:0;width:5.4rem}.sidebar-mini-md.sidebar-collapse .main-sidebar .user-panel .image{float:none}.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused,.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused .brand-link,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover .brand-link{width:260px}.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused .user-panel,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover .user-panel{text-align:left}.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused .user-panel .image,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover .user-panel .image{float:left}.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused .brand-text,.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused .logo-xl,.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused .nav-sidebar .nav-link p,.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused .user-panel>.info,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover .brand-text,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover .logo-xl,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover .nav-sidebar .nav-link p,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover .user-panel>.info{display:inline-block;margin-left:0;opacity:1;visibility:visible}.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused .logo-xs,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover .logo-xs{opacity:0;visibility:hidden}.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused .brand-image,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover .brand-image{margin-right:.5rem}.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused .sidebar-form,.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused .user-panel>.info,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover .sidebar-form,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover .user-panel>.info{display:block!important;-webkit-transform:translateZ(0)}.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused .nav-sidebar>.nav-item>.nav-link>span,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover .nav-sidebar>.nav-item>.nav-link>span{display:inline-block!important}.sidebar-mini-md.sidebar-collapse .visible-sidebar-mini{display:block!important}.sidebar-mini-md.sidebar-collapse.layout-fixed .main-sidebar:hover .brand-link{width:260px}.sidebar-mini-md.sidebar-collapse.layout-fixed .brand-link{width:5.4rem}}.sidebar-collapse .main-sidebar.sidebar-focused .nav-header,.sidebar-collapse .main-sidebar:hover .nav-header{display:inline-block}.sidebar-collapse .main-sidebar.sidebar-focused .nav .menu-open .nav-treeview,.sidebar-collapse .main-sidebar:hover .nav .menu-open .nav-treeview{display:block!important}.sidebar-collapse .main-sidebar.sidebar-focused .nav-sidebar>.nav-item>.nav-link i,.sidebar-collapse .main-sidebar:hover .nav-sidebar>.nav-item>.nav-link i{font-size:1.2rem}.sidebar-collapse .main-sidebar .nav .nav-item .nav-link{padding:10px 21px!important}.sidebar-collapse .main-sidebar .nav .menu-open .nav-treeview{display:none!important}.sidebar-collapse .header-navbar.floating-nav{width:calc(100% - 70px - 5.4rem)}.sidebar-collapse .header-navbar.fixed-top{left:5.4rem}.sidebar-collapse .nav-sidebar>.nav-item>.nav-link i{font-size:1.3rem}.sidebar-collapse .sidebar-no-expand.main-sidebar.sidebar-focused,.sidebar-collapse .sidebar-no-expand.main-sidebar:hover{width:5.4rem}.sidebar-collapse .sidebar-no-expand.main-sidebar.sidebar-focused .nav-header,.sidebar-collapse .sidebar-no-expand.main-sidebar:hover .nav-header{display:none}.sidebar-collapse .sidebar-no-expand.main-sidebar.sidebar-focused .brand-link,.sidebar-collapse .sidebar-no-expand.main-sidebar:hover .brand-link{width:5.4rem!important}.sidebar-collapse .sidebar-no-expand.main-sidebar.sidebar-focused .user-panel .image,.sidebar-collapse .sidebar-no-expand.main-sidebar:hover .user-panel .image{float:none!important}.sidebar-collapse .sidebar-no-expand.main-sidebar.sidebar-focused .logo-xs,.sidebar-collapse .sidebar-no-expand.main-sidebar:hover .logo-xs{opacity:1;visibility:visible}.sidebar-collapse .sidebar-no-expand.main-sidebar.sidebar-focused .logo-xl,.sidebar-collapse .sidebar-no-expand.main-sidebar:hover .logo-xl{opacity:0;visibility:hidden}.sidebar-collapse .sidebar-no-expand.main-sidebar.sidebar-focused .nav-sidebar.nav-child-indent .nav-treeview,.sidebar-collapse .sidebar-no-expand.main-sidebar:hover .nav-sidebar.nav-child-indent .nav-treeview{padding-left:0}.sidebar-collapse .sidebar-no-expand.main-sidebar.sidebar-focused .brand-text,.sidebar-collapse .sidebar-no-expand.main-sidebar.sidebar-focused .nav-sidebar .nav-link p,.sidebar-collapse .sidebar-no-expand.main-sidebar.sidebar-focused .user-panel>.info,.sidebar-collapse .sidebar-no-expand.main-sidebar:hover .brand-text,.sidebar-collapse .sidebar-no-expand.main-sidebar:hover .nav-sidebar .nav-link p,.sidebar-collapse .sidebar-no-expand.main-sidebar:hover .user-panel>.info{margin-left:-10px;opacity:0;visibility:hidden;width:0}.sidebar-collapse .sidebar-no-expand.main-sidebar.sidebar-focused .nav-sidebar>.nav-item .nav-icon,.sidebar-collapse .sidebar-no-expand.main-sidebar:hover .nav-sidebar>.nav-item .nav-icon{margin-right:0}.nav-sidebar{position:relative}.nav-sidebar:hover{overflow:visible}.nav-sidebar>.nav-header,.sidebar-form{overflow:hidden;text-overflow:clip}.nav-sidebar .nav-item>.nav-link{position:relative}.nav-sidebar .nav-item>.nav-link>.float-right{margin-top:-7px;position:absolute;right:10px;top:50%}@media (max-width:767.98px){.sidebar-mini-md.sidebar-collapse .main-sidebar{box-shadow:none!important}.sidebar-collapse .header-navbar.fixed-top{left:0}}@media (max-width:1201px){.sidebar-collapse .header-navbar.fixed-top{left:0}}.main-sidebar .brand-text,.main-sidebar .logo-xl,.main-sidebar .logo-xs,.sidebar .nav-link p,.sidebar .user-panel .info{transition:margin-left .3s linear,opacity .3s ease,visibility .3s ease}@media (prefers-reduced-motion:reduce){.main-sidebar .brand-text,.main-sidebar .logo-xl,.main-sidebar .logo-xs,.sidebar .nav-link p,.sidebar .user-panel .info{transition:none}}html.control-sidebar-animate{overflow-x:hidden}.control-sidebar{bottom:3.45rem;position:absolute;top:calc(3.164rem + 1px);z-index:1031}.control-sidebar,.control-sidebar:before{bottom:3.45rem;display:none;right:-260px;width:260px;transition:right .3s ease-in-out,display .3s ease-in-out}@media (prefers-reduced-motion:reduce){.control-sidebar,.control-sidebar:before{transition:none}}.control-sidebar:before{content:"";display:block;position:fixed;top:0;z-index:-1}body.text-sm .control-sidebar{bottom:3.074rem;top:calc(2.62475rem + 1px)}.main-header.text-sm~.control-sidebar{top:calc(2.62475rem + 1px)}.main-footer.text-sm~.control-sidebar{bottom:3.074rem}.control-sidebar-push-slide .content-wrapper,.control-sidebar-push-slide .main-footer{transition:margin-right .3s ease-in-out}@media (prefers-reduced-motion:reduce){.control-sidebar-push-slide .content-wrapper,.control-sidebar-push-slide .main-footer{transition:none}}.control-sidebar-open .control-sidebar{display:block}.control-sidebar-open .control-sidebar,.control-sidebar-open .control-sidebar:before{right:0}.control-sidebar-open.control-sidebar-push-slide .content-wrapper,.control-sidebar-open.control-sidebar-push-slide .main-footer,.control-sidebar-open.control-sidebar-push .content-wrapper,.control-sidebar-open.control-sidebar-push .main-footer{margin-right:260px}.control-sidebar-slide-open .control-sidebar{display:block}.control-sidebar-slide-open .control-sidebar,.control-sidebar-slide-open .control-sidebar:before{right:0;transition:right .3s ease-in-out,display .3s ease-in-out}@media (prefers-reduced-motion:reduce){.control-sidebar-slide-open .control-sidebar,.control-sidebar-slide-open .control-sidebar:before{transition:none}}.control-sidebar-slide-open.control-sidebar-push-slide .content-wrapper,.control-sidebar-slide-open.control-sidebar-push-slide .main-footer,.control-sidebar-slide-open.control-sidebar-push .content-wrapper,.control-sidebar-slide-open.control-sidebar-push .main-footer{margin-right:260px}.control-sidebar-dark,.control-sidebar-dark .nav-link,.control-sidebar-dark a{color:hsla(0,0%,100%,.95)}.control-sidebar-dark{background:#3e4958}.control-sidebar-dark a:hover,.control-sidebar-dark h1,.control-sidebar-dark h2,.control-sidebar-dark h3,.control-sidebar-dark h4,.control-sidebar-dark h5,.control-sidebar-dark h6,.control-sidebar-dark label{color:hsla(0,0%,100%,.95)}.control-sidebar-dark .nav-tabs{background-color:transparent;border-bottom:0;margin-bottom:5px}.control-sidebar-dark .nav-tabs .nav-item{margin:0}.control-sidebar-dark .nav-tabs .nav-link{border-radius:0;padding:10px 20px;position:relative;text-align:center}.control-sidebar-dark .nav-tabs .nav-link,.control-sidebar-dark .nav-tabs .nav-link.active,.control-sidebar-dark .nav-tabs .nav-link:active,.control-sidebar-dark .nav-tabs .nav-link:focus,.control-sidebar-dark .nav-tabs .nav-link:hover{border:0}.control-sidebar-dark .nav-tabs .nav-link.active,.control-sidebar-dark .nav-tabs .nav-link:active,.control-sidebar-dark .nav-tabs .nav-link:focus,.control-sidebar-dark .nav-tabs .nav-link:hover{border-bottom-color:transparent;border-left-color:transparent;border-top-color:transparent;color:hsla(0,0%,100%,.95)}.control-sidebar-dark .nav-tabs .nav-link.active{background-color:#3e4958}.control-sidebar-dark .tab-pane{padding:10px 15px}.control-sidebar-light{color:#6f6f6f;background:#fff;border-left:1px solid #dae1e7}.text-sm .dropdown-menu{font-size:1rem!important}.text-sm .dropdown-toggle:after{vertical-align:.2rem}.dropdown-item-title{font-size:1rem;margin:0}.dropdown-icon:after{margin-left:0}.dropdown-menu-lg{max-width:300px;min-width:280px;padding:0}.dropdown-menu-lg .dropdown-divider{margin:0}.dropdown-menu-lg .dropdown-item{padding:.5rem 1.5rem}.dropdown-menu-lg p{margin:0;white-space:normal}.dropdown-submenu{position:relative}.dropdown-submenu>a:after{border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid;float:right;margin-left:.5rem;margin-top:.5rem}.dropdown-submenu>.dropdown-menu{left:100%;margin-left:0;margin-top:0;top:0}.dropdown-hover.dropdown-submenu:hover>.dropdown-menu,.dropdown-hover .dropdown-submenu:hover>.dropdown-menu,.dropdown-hover.nav-item.dropdown:hover>.dropdown-menu,.dropdown-hover:hover>.dropdown-menu{display:block}.dropdown-menu-xl{max-width:420px;min-width:360px;padding:0}.dropdown-menu-xl .dropdown-divider{margin:0}.dropdown-menu-xl .dropdown-item{padding:.5rem 1.5rem}.dropdown-menu-xl p{margin:0;white-space:normal}.dropdown-footer,.dropdown-header{display:block;font-size:1rem;padding:.5rem 1.5rem;text-align:center}.open:not(.dropup)>.animated-dropdown-menu{-webkit-animation:flipInX .7s both;animation:flipInX .7s both;-webkit-backface-visibility:visible!important;backface-visibility:visible!important}@-webkit-keyframes flipInX{0%{transform:perspective(400px) rotateX(90deg);transition-timing-function:ease-in;opacity:0}40%{transform:perspective(400px) rotateX(-20deg);transition-timing-function:ease-in}60%{transform:perspective(400px) rotateX(10deg);opacity:1}80%{transform:perspective(400px) rotateX(-5deg)}to{transform:perspective(400px)}}@keyframes flipInX{0%{transform:perspective(400px) rotateX(90deg);transition-timing-function:ease-in;opacity:0}40%{transform:perspective(400px) rotateX(-20deg);transition-timing-function:ease-in}60%{transform:perspective(400px) rotateX(10deg);opacity:1}80%{transform:perspective(400px) rotateX(-5deg)}to{transform:perspective(400px)}}.navbar-custom-menu>.navbar-nav>li{position:relative}.navbar-custom-menu>.navbar-nav>li>.dropdown-menu{position:absolute;right:0;left:auto}@media (max-width:767.98px){.navbar-custom-menu>.navbar-nav{float:right}.navbar-custom-menu>.navbar-nav>li{position:static}.navbar-custom-menu>.navbar-nav>li>.dropdown-menu{position:absolute;right:5%;left:auto;border:1px solid #ddd;background:#fff}}.navbar-nav>.user-menu>.nav-link:after{content:none}.navbar-nav>.user-menu>.dropdown-menu{border-top-left-radius:0;border-top-right-radius:0;padding:0;width:280px}.navbar-nav>.user-menu>.dropdown-menu,.navbar-nav>.user-menu>.dropdown-menu>.user-body{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.navbar-nav>.user-menu>.dropdown-menu>li.user-header{height:175px;padding:10px;text-align:center}.navbar-nav>.user-menu>.dropdown-menu>li.user-header>img{z-index:5;height:90px;width:90px;border:3px solid hsla(0,0%,100%,.2)}.navbar-nav>.user-menu>.dropdown-menu>li.user-header>p{z-index:5;font-size:17px;margin-top:10px}.navbar-nav>.user-menu>.dropdown-menu>li.user-header>p>small{display:block;font-size:12px}.navbar-nav>.user-menu>.dropdown-menu>.user-body{border-bottom:1px solid #4e5154;border-top:1px solid #dae1e7;padding:15px}.navbar-nav>.user-menu>.dropdown-menu>.user-body:after{display:block;clear:both;content:""}@media (min-width:576px){.navbar-nav>.user-menu>.dropdown-menu>.user-body a{background:#fff!important;color:#4e5154!important}}.navbar-nav>.user-menu>.dropdown-menu>.user-footer{background-color:#babfc7;padding:10px}.navbar-nav>.user-menu>.dropdown-menu>.user-footer:after{display:block;clear:both;content:""}.navbar-nav>.user-menu>.dropdown-menu>.user-footer .btn-default{color:#b8c2cc}@media (min-width:576px){.navbar-nav>.user-menu>.dropdown-menu>.user-footer .btn-default:hover{background-color:#babfc7}}.navbar-nav>.user-menu .user-image{border-radius:50%;float:left;height:2.5666666667rem;margin-right:10px;margin-top:-2px;width:2.5666666667rem}@media (min-width:576px){.navbar-nav>.user-menu .user-image{float:none;line-height:10px;margin-right:.4rem;margin-top:-8px}}.nav-pills .nav-link{color:#b8c2cc}.nav-pills .nav-link:not(.active):hover{color:#62a8ea}.nav-pills .nav-item.dropdown.show .nav-link:hover{color:#fff}.nav-tabs.flex-column{border-bottom:0;border-right:1px solid #dae1e7}.nav-tabs.flex-column .nav-link{border-bottom-left-radius:.5rem;border-top-right-radius:0;margin-right:-1px}.nav-tabs.flex-column .nav-link:focus,.nav-tabs.flex-column .nav-link:hover{border-color:#ededed transparent #ededed #ededed}.nav-tabs.flex-column .nav-item.show .nav-link,.nav-tabs.flex-column .nav-link.active{border-color:#dae1e7 transparent #dae1e7 #dae1e7}.nav-tabs.flex-column.nav-tabs-right{border-left:1px solid #dae1e7;border-right:0}.nav-tabs.flex-column.nav-tabs-right .nav-link{border-bottom-left-radius:0;border-bottom-right-radius:.5rem;border-top-left-radius:0;border-top-right-radius:.5rem;margin-left:-1px}.nav-tabs.flex-column.nav-tabs-right .nav-link:focus,.nav-tabs.flex-column.nav-tabs-right .nav-link:hover{border-color:#ededed #ededed #ededed transparent}.nav-tabs.flex-column.nav-tabs-right .nav-item.show .nav-link,.nav-tabs.flex-column.nav-tabs-right .nav-link.active{border-color:#dae1e7 #dae1e7 #dae1e7 transparent}.navbar-no-expand{flex-direction:row}.navbar-no-expand .nav-link{padding-left:.5rem;padding-right:.5rem}.navbar-no-expand .dropdown-menu{position:absolute}.navbar-light{background-color:#f7f7f9}.navbar-dark{background-color:#22292f}.navbar-primary{background-color:#62a8ea}.navbar-secondary{background-color:#b8c2cc}.navbar-success{background-color:#21b978}.navbar-info{background-color:#4277cf}.navbar-warning{background-color:#dda451}.navbar-danger{background-color:#ea5455}.navbar-lightblue{background-color:#3c8dbc}.navbar-navy{background-color:#001f3f}.navbar-olive{background-color:#3d9970}.navbar-lime{background-color:#01ff70}.navbar-fuchsia{background-color:#f012be}.navbar-maroon{background-color:#d81b60}.navbar-blue{background-color:#3085d6}.navbar-indigo{background-color:#5c6bc6}.navbar-purple{background-color:#6f42c1}.navbar-pink{background-color:#ff8acc}.navbar-red{background-color:#ea5455}.navbar-orange{background-color:#dda451}.navbar-yellow{background-color:#edc30e}.navbar-green{background-color:#21b978}.navbar-teal{background-color:#20c997}.navbar-cyan{background-color:#7367f0}.navbar-white{background-color:#fff}.navbar-gray{background-color:#b8c2cc}.navbar-gray-dark{background-color:#1e1e1e}.form-group.has-icon{position:relative}.form-group.has-icon .form-control{padding-right:35px}.form-group.has-icon .form-icon{background-color:transparent;border:0;cursor:pointer;font-size:1rem;padding:.75rem 2rem;position:absolute;right:3px;top:0}.btn-group-vertical .btn.btn-flat:first-of-type,.btn-group-vertical .btn.btn-flat:last-of-type{border-radius:0}.form-control-feedback.fa,.form-control-feedback.fab,.form-control-feedback.far,.form-control-feedback.fas,.form-control-feedback.glyphicon,.form-control-feedback.ion{line-height:34px}.form-group-lg .form-control+.form-control-feedback.fa,.form-group-lg .form-control+.form-control-feedback.fab,.form-group-lg .form-control+.form-control-feedback.far,.form-group-lg .form-control+.form-control-feedback.fas,.form-group-lg .form-control+.form-control-feedback.glyphicon,.form-group-lg .form-control+.form-control-feedback.ion,.input-group-lg+.form-control-feedback.fa,.input-group-lg+.form-control-feedback.fab,.input-group-lg+.form-control-feedback.far,.input-group-lg+.form-control-feedback.fas,.input-group-lg+.form-control-feedback.glyphicon,.input-group-lg+.form-control-feedback.ion,.input-lg+.form-control-feedback.fa,.input-lg+.form-control-feedback.fab,.input-lg+.form-control-feedback.far,.input-lg+.form-control-feedback.fas,.input-lg+.form-control-feedback.glyphicon,.input-lg+.form-control-feedback.ion{line-height:calc(1.25em + 2rem + 2px)}.form-group-sm .form-control+.form-control-feedback.fa,.form-group-sm .form-control+.form-control-feedback.fab,.form-group-sm .form-control+.form-control-feedback.far,.form-group-sm .form-control+.form-control-feedback.fas,.form-group-sm .form-control+.form-control-feedback.glyphicon,.form-group-sm .form-control+.form-control-feedback.ion,.input-group-sm+.form-control-feedback.fa,.input-group-sm+.form-control-feedback.fab,.input-group-sm+.form-control-feedback.far,.input-group-sm+.form-control-feedback.fas,.input-group-sm+.form-control-feedback.glyphicon,.input-group-sm+.form-control-feedback.ion,.input-sm+.form-control-feedback.fa,.input-sm+.form-control-feedback.fab,.input-sm+.form-control-feedback.far,.input-sm+.form-control-feedback.fas,.input-sm+.form-control-feedback.glyphicon,.input-sm+.form-control-feedback.ion{line-height:2rem}.warning-feedback{font-size:smaller;color:#dda451;display:none;margin-top:.25rem;width:100%}.warning-tooltip{border-radius:.5rem;font-size:1rem;background-color:rgba(221,164,81,.9);color:#2a2e30;display:none;line-height:1.45;margin-top:.1rem;max-width:100%;padding:.25rem .5rem;position:absolute;top:100%;z-index:5}.form-control.is-warning{border-color:#dda451}.form-control.is-warning:focus{border-color:#dda451;box-shadow:0 0 0 .2rem rgba(221,164,81,.25)}.form-control.is-warning~.warning-feedback,.form-control.is-warning~.warning-tooltip{display:block}textarea.form-control.is-warning{padding-right:calc(1.25em + 1.4rem);background-position:top calc(.3125em + .35rem) right calc(.3125em + .35rem)}.custom-select.is-warning{border-color:#dda451}.custom-select.is-warning:focus{border-color:#dda451;box-shadow:0 0 0 .2rem rgba(221,164,81,.25)}.custom-select.is-warning~.warning-feedback,.custom-select.is-warning~.warning-tooltip,.form-control-file.is-warning~.warning-feedback,.form-control-file.is-warning~.warning-tooltip{display:block}.form-check-input.is-warning~.form-check-label{color:#dda451}.form-check-input.is-warning~.warning-feedback,.form-check-input.is-warning~.warning-tooltip{display:block}.custom-control-input.is-warning~.custom-control-label{color:#dda451}.custom-control-input.is-warning~.custom-control-label:before{border-color:#dda451}.custom-control-input.is-warning~.warning-feedback,.custom-control-input.is-warning~.warning-tooltip{display:block}.custom-control-input.is-warning:checked~.custom-control-label:before{background-color:#e5ba7c;border-color:#e5ba7c}.custom-control-input.is-warning:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem rgba(221,164,81,.25)}.custom-control-input.is-warning:focus:not(:checked)~.custom-control-label:before,.custom-file-input.is-warning~.custom-file-label{border-color:#dda451}.custom-file-input.is-warning~.warning-feedback,.custom-file-input.is-warning~.warning-tooltip{display:block}.custom-file-input.is-warning:focus~.custom-file-label{border-color:#dda451;box-shadow:0 0 0 .2rem rgba(221,164,81,.25)}.custom-switch.custom-switch-off-primary .custom-control-input~.custom-control-label:before{background:#62a8ea;border-color:#1b76cb}.custom-switch.custom-switch-off-primary .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(98,168,234,.25)}.custom-switch.custom-switch-off-primary .custom-control-input~.custom-control-label:after{background:#1869b4}.custom-switch.custom-switch-on-primary .custom-control-input:checked~.custom-control-label:before{background:#62a8ea;border-color:#1b76cb}.custom-switch.custom-switch-on-primary .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(98,168,234,.25)}.custom-switch.custom-switch-on-primary .custom-control-input:checked~.custom-control-label:after{background:#e9f3fc}.custom-switch.custom-switch-off-secondary .custom-control-input~.custom-control-label:before{background:#b8c2cc;border-color:#7d8fa1}.custom-switch.custom-switch-off-secondary .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(184,194,204,.25)}.custom-switch.custom-switch-off-secondary .custom-control-input~.custom-control-label:after{background:#6e8297}.custom-switch.custom-switch-on-secondary .custom-control-input:checked~.custom-control-label:before{background:#b8c2cc;border-color:#7d8fa1}.custom-switch.custom-switch-on-secondary .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(184,194,204,.25)}.custom-switch.custom-switch-on-secondary .custom-control-input:checked~.custom-control-label:after{background:#fff}.custom-switch.custom-switch-off-success .custom-control-input~.custom-control-label:before{background:#21b978;border-color:#126240}.custom-switch.custom-switch-off-success .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(33,185,120,.25)}.custom-switch.custom-switch-off-success .custom-control-input~.custom-control-label:after{background:#0e4d32}.custom-switch.custom-switch-on-success .custom-control-input:checked~.custom-control-label:before{background:#21b978;border-color:#126240}.custom-switch.custom-switch-on-success .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(33,185,120,.25)}.custom-switch.custom-switch-on-success .custom-control-input:checked~.custom-control-label:after{background:#89eac1}.custom-switch.custom-switch-off-info .custom-control-input~.custom-control-label:before{background:#4277cf;border-color:#234988}.custom-switch.custom-switch-off-info .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(66,119,207,.25)}.custom-switch.custom-switch-off-info .custom-control-input~.custom-control-label:after{background:#1d3e74}.custom-switch.custom-switch-on-info .custom-control-input:checked~.custom-control-label:before{background:#4277cf;border-color:#234988}.custom-switch.custom-switch-on-info .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(66,119,207,.25)}.custom-switch.custom-switch-on-info .custom-control-input:checked~.custom-control-label:after{background:#bccfee}.custom-switch.custom-switch-off-warning .custom-control-input~.custom-control-label:before{background:#dda451;border-color:#a77121}.custom-switch.custom-switch-off-warning .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(221,164,81,.25)}.custom-switch.custom-switch-off-warning .custom-control-input~.custom-control-label:after{background:#92621d}.custom-switch.custom-switch-on-warning .custom-control-input:checked~.custom-control-label:before{background:#dda451;border-color:#a77121}.custom-switch.custom-switch-on-warning .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(221,164,81,.25)}.custom-switch.custom-switch-on-warning .custom-control-input:checked~.custom-control-label:after{background:#f6e7d1}.custom-switch.custom-switch-off-danger .custom-control-input~.custom-control-label:before{background:#ea5455;border-color:#c01819}.custom-switch.custom-switch-off-danger .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(234,84,85,.25)}.custom-switch.custom-switch-off-danger .custom-control-input~.custom-control-label:after{background:#aa1516}.custom-switch.custom-switch-on-danger .custom-control-input:checked~.custom-control-label:before{background:#ea5455;border-color:#c01819}.custom-switch.custom-switch-on-danger .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(234,84,85,.25)}.custom-switch.custom-switch-on-danger .custom-control-input:checked~.custom-control-label:after{background:#fbdcdc}.custom-switch.custom-switch-off-light .custom-control-input~.custom-control-label:before{background:#f7f7f9;border-color:#bdbdcd}.custom-switch.custom-switch-off-light .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(247,247,249,.25)}.custom-switch.custom-switch-off-light .custom-control-input~.custom-control-label:after{background:#aeaec2}.custom-switch.custom-switch-on-light .custom-control-input:checked~.custom-control-label:before{background:#f7f7f9;border-color:#bdbdcd}.custom-switch.custom-switch-on-light .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(247,247,249,.25)}.custom-switch.custom-switch-on-light .custom-control-input:checked~.custom-control-label:after{background:#fff}.custom-switch.custom-switch-off-dark .custom-control-input~.custom-control-label:before{background:#22292f;border-color:#000}.custom-switch.custom-switch-off-dark .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(34,41,47,.25)}.custom-switch.custom-switch-off-dark .custom-control-input~.custom-control-label:after{background:#000}.custom-switch.custom-switch-on-dark .custom-control-input:checked~.custom-control-label:before{background:#22292f;border-color:#000}.custom-switch.custom-switch-on-dark .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(34,41,47,.25)}.custom-switch.custom-switch-on-dark .custom-control-input:checked~.custom-control-label:after{background:#627688}.custom-switch.custom-switch-off-lightblue .custom-control-input~.custom-control-label:before{background:#3c8dbc;border-color:#23536f}.custom-switch.custom-switch-off-lightblue .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(60,141,188,.25)}.custom-switch.custom-switch-off-lightblue .custom-control-input~.custom-control-label:after{background:#1d455b}.custom-switch.custom-switch-on-lightblue .custom-control-input:checked~.custom-control-label:before{background:#3c8dbc;border-color:#23536f}.custom-switch.custom-switch-on-lightblue .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(60,141,188,.25)}.custom-switch.custom-switch-on-lightblue .custom-control-input:checked~.custom-control-label:after{background:#acd0e5}.custom-switch.custom-switch-off-navy .custom-control-input~.custom-control-label:before{background:#001f3f;border-color:#000}.custom-switch.custom-switch-off-navy .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(0,31,63,.25)}.custom-switch.custom-switch-off-navy .custom-control-input~.custom-control-label:after{background:#000}.custom-switch.custom-switch-on-navy .custom-control-input:checked~.custom-control-label:before{background:#001f3f;border-color:#000}.custom-switch.custom-switch-on-navy .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(0,31,63,.25)}.custom-switch.custom-switch-on-navy .custom-control-input:checked~.custom-control-label:after{background:#006ad8}.custom-switch.custom-switch-off-olive .custom-control-input~.custom-control-label:before{background:#3d9970;border-color:#20503b}.custom-switch.custom-switch-off-olive .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(61,153,112,.25)}.custom-switch.custom-switch-off-olive .custom-control-input~.custom-control-label:after{background:#193e2d}.custom-switch.custom-switch-on-olive .custom-control-input:checked~.custom-control-label:before{background:#3d9970;border-color:#20503b}.custom-switch.custom-switch-on-olive .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(61,153,112,.25)}.custom-switch.custom-switch-on-olive .custom-control-input:checked~.custom-control-label:after{background:#99d6bb}.custom-switch.custom-switch-off-lime .custom-control-input~.custom-control-label:before{background:#01ff70;border-color:#009a43}.custom-switch.custom-switch-off-lime .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(1,255,112,.25)}.custom-switch.custom-switch-off-lime .custom-control-input~.custom-control-label:after{background:#008138}.custom-switch.custom-switch-on-lime .custom-control-input:checked~.custom-control-label:before{background:#01ff70;border-color:#009a43}.custom-switch.custom-switch-on-lime .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(1,255,112,.25)}.custom-switch.custom-switch-on-lime .custom-control-input:checked~.custom-control-label:after{background:#9affc6}.custom-switch.custom-switch-off-fuchsia .custom-control-input~.custom-control-label:before{background:#f012be;border-color:#930974}.custom-switch.custom-switch-off-fuchsia .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(240,18,190,.25)}.custom-switch.custom-switch-off-fuchsia .custom-control-input~.custom-control-label:after{background:#7b0861}.custom-switch.custom-switch-on-fuchsia .custom-control-input:checked~.custom-control-label:before{background:#f012be;border-color:#930974}.custom-switch.custom-switch-on-fuchsia .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(240,18,190,.25)}.custom-switch.custom-switch-on-fuchsia .custom-control-input:checked~.custom-control-label:after{background:#f9a2e5}.custom-switch.custom-switch-off-maroon .custom-control-input~.custom-control-label:before{background:#d81b60;border-color:#7d1038}.custom-switch.custom-switch-off-maroon .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(216,27,96,.25)}.custom-switch.custom-switch-off-maroon .custom-control-input~.custom-control-label:after{background:#670d2e}.custom-switch.custom-switch-on-maroon .custom-control-input:checked~.custom-control-label:before{background:#d81b60;border-color:#7d1038}.custom-switch.custom-switch-on-maroon .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(216,27,96,.25)}.custom-switch.custom-switch-on-maroon .custom-control-input:checked~.custom-control-label:after{background:#f29aba}.custom-switch.custom-switch-off-blue .custom-control-input~.custom-control-label:before{background:#3085d6;border-color:#1a5186}.custom-switch.custom-switch-off-blue .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(48,133,214,.25)}.custom-switch.custom-switch-off-blue .custom-control-input~.custom-control-label:after{background:#164470}.custom-switch.custom-switch-on-blue .custom-control-input:checked~.custom-control-label:before{background:#3085d6;border-color:#1a5186}.custom-switch.custom-switch-on-blue .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(48,133,214,.25)}.custom-switch.custom-switch-on-blue .custom-control-input:checked~.custom-control-label:after{background:#b0d0ef}.custom-switch.custom-switch-off-indigo .custom-control-input~.custom-control-label:before{background:#5c6bc6;border-color:#313e8b}.custom-switch.custom-switch-off-indigo .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(92,107,198,.25)}.custom-switch.custom-switch-off-indigo .custom-control-input~.custom-control-label:after{background:#2a3578}.custom-switch.custom-switch-on-indigo .custom-control-input:checked~.custom-control-label:before{background:#5c6bc6;border-color:#313e8b}.custom-switch.custom-switch-on-indigo .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(92,107,198,.25)}.custom-switch.custom-switch-on-indigo .custom-control-input:checked~.custom-control-label:after{background:#cdd2ee}.custom-switch.custom-switch-off-purple .custom-control-input~.custom-control-label:before{background:#6f42c1;border-color:#432776}.custom-switch.custom-switch-off-purple .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(111,66,193,.25)}.custom-switch.custom-switch-off-purple .custom-control-input~.custom-control-label:after{background:#382063}.custom-switch.custom-switch-on-purple .custom-control-input:checked~.custom-control-label:before{background:#6f42c1;border-color:#432776}.custom-switch.custom-switch-on-purple .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(111,66,193,.25)}.custom-switch.custom-switch-on-purple .custom-control-input:checked~.custom-control-label:after{background:#c7b5e7}.custom-switch.custom-switch-off-pink .custom-control-input~.custom-control-label:before{background:#ff8acc;border-color:#ff24a0}.custom-switch.custom-switch-off-pink .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(255,138,204,.25)}.custom-switch.custom-switch-off-pink .custom-control-input~.custom-control-label:after{background:#ff0b94}.custom-switch.custom-switch-on-pink .custom-control-input:checked~.custom-control-label:before{background:#ff8acc;border-color:#ff24a0}.custom-switch.custom-switch-on-pink .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(255,138,204,.25)}.custom-switch.custom-switch-on-pink .custom-control-input:checked~.custom-control-label:after{background:#fff}.custom-switch.custom-switch-off-red .custom-control-input~.custom-control-label:before{background:#ea5455;border-color:#c01819}.custom-switch.custom-switch-off-red .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(234,84,85,.25)}.custom-switch.custom-switch-off-red .custom-control-input~.custom-control-label:after{background:#aa1516}.custom-switch.custom-switch-on-red .custom-control-input:checked~.custom-control-label:before{background:#ea5455;border-color:#c01819}.custom-switch.custom-switch-on-red .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(234,84,85,.25)}.custom-switch.custom-switch-on-red .custom-control-input:checked~.custom-control-label:after{background:#fbdcdc}.custom-switch.custom-switch-off-orange .custom-control-input~.custom-control-label:before{background:#dda451;border-color:#a77121}.custom-switch.custom-switch-off-orange .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(221,164,81,.25)}.custom-switch.custom-switch-off-orange .custom-control-input~.custom-control-label:after{background:#92621d}.custom-switch.custom-switch-on-orange .custom-control-input:checked~.custom-control-label:before{background:#dda451;border-color:#a77121}.custom-switch.custom-switch-on-orange .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(221,164,81,.25)}.custom-switch.custom-switch-on-orange .custom-control-input:checked~.custom-control-label:after{background:#f6e7d1}.custom-switch.custom-switch-off-yellow .custom-control-input~.custom-control-label:before{background:#edc30e;border-color:#8d7408}.custom-switch.custom-switch-off-yellow .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(237,195,14,.25)}.custom-switch.custom-switch-off-yellow .custom-control-input~.custom-control-label:after{background:#756007}.custom-switch.custom-switch-on-yellow .custom-control-input:checked~.custom-control-label:before{background:#edc30e;border-color:#8d7408}.custom-switch.custom-switch-on-yellow .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(237,195,14,.25)}.custom-switch.custom-switch-on-yellow .custom-control-input:checked~.custom-control-label:after{background:#f9e79b}.custom-switch.custom-switch-off-green .custom-control-input~.custom-control-label:before{background:#21b978;border-color:#126240}.custom-switch.custom-switch-off-green .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(33,185,120,.25)}.custom-switch.custom-switch-off-green .custom-control-input~.custom-control-label:after{background:#0e4d32}.custom-switch.custom-switch-on-green .custom-control-input:checked~.custom-control-label:before{background:#21b978;border-color:#126240}.custom-switch.custom-switch-on-green .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(33,185,120,.25)}.custom-switch.custom-switch-on-green .custom-control-input:checked~.custom-control-label:after{background:#89eac1}.custom-switch.custom-switch-off-teal .custom-control-input~.custom-control-label:before{background:#20c997;border-color:#127155}.custom-switch.custom-switch-off-teal .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(32,201,151,.25)}.custom-switch.custom-switch-off-teal .custom-control-input~.custom-control-label:after{background:#0e5b44}.custom-switch.custom-switch-on-teal .custom-control-input:checked~.custom-control-label:before{background:#20c997;border-color:#127155}.custom-switch.custom-switch-on-teal .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(32,201,151,.25)}.custom-switch.custom-switch-on-teal .custom-control-input:checked~.custom-control-label:after{background:#94eed3}.custom-switch.custom-switch-off-cyan .custom-control-input~.custom-control-label:before{background:#7367f0;border-color:#2716db}.custom-switch.custom-switch-off-cyan .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(115,103,240,.25)}.custom-switch.custom-switch-off-cyan .custom-control-input~.custom-control-label:after{background:#2313c4}.custom-switch.custom-switch-on-cyan .custom-control-input:checked~.custom-control-label:before{background:#7367f0;border-color:#2716db}.custom-switch.custom-switch-on-cyan .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(115,103,240,.25)}.custom-switch.custom-switch-on-cyan .custom-control-input:checked~.custom-control-label:after{background:#f3f2fe}.custom-switch.custom-switch-off-white .custom-control-input~.custom-control-label:before{background:#fff;border-color:#ccc}.custom-switch.custom-switch-off-white .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px hsla(0,0%,100%,.25)}.custom-switch.custom-switch-off-white .custom-control-input~.custom-control-label:after{background:#bfbfbf}.custom-switch.custom-switch-on-white .custom-control-input:checked~.custom-control-label:before{background:#fff;border-color:#ccc}.custom-switch.custom-switch-on-white .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px hsla(0,0%,100%,.25)}.custom-switch.custom-switch-on-white .custom-control-input:checked~.custom-control-label:after{background:#fff}.custom-switch.custom-switch-off-gray .custom-control-input~.custom-control-label:before{background:#b8c2cc;border-color:#7d8fa1}.custom-switch.custom-switch-off-gray .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(184,194,204,.25)}.custom-switch.custom-switch-off-gray .custom-control-input~.custom-control-label:after{background:#6e8297}.custom-switch.custom-switch-on-gray .custom-control-input:checked~.custom-control-label:before{background:#b8c2cc;border-color:#7d8fa1}.custom-switch.custom-switch-on-gray .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(184,194,204,.25)}.custom-switch.custom-switch-on-gray .custom-control-input:checked~.custom-control-label:after{background:#fff}.custom-switch.custom-switch-off-gray-dark .custom-control-input~.custom-control-label:before{background:#1e1e1e;border-color:#000}.custom-switch.custom-switch-off-gray-dark .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(30,30,30,.25)}.custom-switch.custom-switch-off-gray-dark .custom-control-input~.custom-control-label:after{background:#000}.custom-switch.custom-switch-on-gray-dark .custom-control-input:checked~.custom-control-label:before{background:#1e1e1e;border-color:#000}.custom-switch.custom-switch-on-gray-dark .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(30,30,30,.25)}.custom-switch.custom-switch-on-gray-dark .custom-control-input:checked~.custom-control-label:after{background:#6b6b6b}.custom-range.custom-range-primary:focus{outline:none}.custom-range.custom-range-primary:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(98,168,234,.25)}.custom-range.custom-range-primary:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(98,168,234,.25)}.custom-range.custom-range-primary:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(98,168,234,.25)}.custom-range.custom-range-primary::-webkit-slider-thumb{background-color:#62a8ea}.custom-range.custom-range-primary::-webkit-slider-thumb:active{background-color:#fff}.custom-range.custom-range-primary::-moz-range-thumb{background-color:#62a8ea}.custom-range.custom-range-primary::-moz-range-thumb:active{background-color:#fff}.custom-range.custom-range-primary::-ms-thumb{background-color:#62a8ea}.custom-range.custom-range-primary::-ms-thumb:active{background-color:#fff}.custom-range.custom-range-secondary:focus{outline:none}.custom-range.custom-range-secondary:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(184,194,204,.25)}.custom-range.custom-range-secondary:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(184,194,204,.25)}.custom-range.custom-range-secondary:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(184,194,204,.25)}.custom-range.custom-range-secondary::-webkit-slider-thumb{background-color:#b8c2cc}.custom-range.custom-range-secondary::-webkit-slider-thumb:active{background-color:#fff}.custom-range.custom-range-secondary::-moz-range-thumb{background-color:#b8c2cc}.custom-range.custom-range-secondary::-moz-range-thumb:active{background-color:#fff}.custom-range.custom-range-secondary::-ms-thumb{background-color:#b8c2cc}.custom-range.custom-range-secondary::-ms-thumb:active{background-color:#fff}.custom-range.custom-range-success:focus{outline:none}.custom-range.custom-range-success:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(33,185,120,.25)}.custom-range.custom-range-success:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(33,185,120,.25)}.custom-range.custom-range-success:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(33,185,120,.25)}.custom-range.custom-range-success::-webkit-slider-thumb{background-color:#21b978}.custom-range.custom-range-success::-webkit-slider-thumb:active{background-color:#9feecc}.custom-range.custom-range-success::-moz-range-thumb{background-color:#21b978}.custom-range.custom-range-success::-moz-range-thumb:active{background-color:#9feecc}.custom-range.custom-range-success::-ms-thumb{background-color:#21b978}.custom-range.custom-range-success::-ms-thumb:active{background-color:#9feecc}.custom-range.custom-range-info:focus{outline:none}.custom-range.custom-range-info:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(66,119,207,.25)}.custom-range.custom-range-info:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(66,119,207,.25)}.custom-range.custom-range-info:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(66,119,207,.25)}.custom-range.custom-range-info::-webkit-slider-thumb{background-color:#4277cf}.custom-range.custom-range-info::-webkit-slider-thumb:active{background-color:#d0ddf3}.custom-range.custom-range-info::-moz-range-thumb{background-color:#4277cf}.custom-range.custom-range-info::-moz-range-thumb:active{background-color:#d0ddf3}.custom-range.custom-range-info::-ms-thumb{background-color:#4277cf}.custom-range.custom-range-info::-ms-thumb:active{background-color:#d0ddf3}.custom-range.custom-range-warning:focus{outline:none}.custom-range.custom-range-warning:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(221,164,81,.25)}.custom-range.custom-range-warning:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(221,164,81,.25)}.custom-range.custom-range-warning:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(221,164,81,.25)}.custom-range.custom-range-warning::-webkit-slider-thumb{background-color:#dda451}.custom-range.custom-range-warning::-webkit-slider-thumb:active{background-color:#faf2e6}.custom-range.custom-range-warning::-moz-range-thumb{background-color:#dda451}.custom-range.custom-range-warning::-moz-range-thumb:active{background-color:#faf2e6}.custom-range.custom-range-warning::-ms-thumb{background-color:#dda451}.custom-range.custom-range-warning::-ms-thumb:active{background-color:#faf2e6}.custom-range.custom-range-danger:focus{outline:none}.custom-range.custom-range-danger:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(234,84,85,.25)}.custom-range.custom-range-danger:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(234,84,85,.25)}.custom-range.custom-range-danger:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(234,84,85,.25)}.custom-range.custom-range-danger::-webkit-slider-thumb{background-color:#ea5455}.custom-range.custom-range-danger::-webkit-slider-thumb:active{background-color:#fef3f3}.custom-range.custom-range-danger::-moz-range-thumb{background-color:#ea5455}.custom-range.custom-range-danger::-moz-range-thumb:active{background-color:#fef3f3}.custom-range.custom-range-danger::-ms-thumb{background-color:#ea5455}.custom-range.custom-range-danger::-ms-thumb:active{background-color:#fef3f3}.custom-range.custom-range-light:focus{outline:none}.custom-range.custom-range-light:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(247,247,249,.25)}.custom-range.custom-range-light:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(247,247,249,.25)}.custom-range.custom-range-light:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(247,247,249,.25)}.custom-range.custom-range-light::-webkit-slider-thumb{background-color:#f7f7f9}.custom-range.custom-range-light::-webkit-slider-thumb:active{background-color:#fff}.custom-range.custom-range-light::-moz-range-thumb{background-color:#f7f7f9}.custom-range.custom-range-light::-moz-range-thumb:active{background-color:#fff}.custom-range.custom-range-light::-ms-thumb{background-color:#f7f7f9}.custom-range.custom-range-light::-ms-thumb:active{background-color:#fff}.custom-range.custom-range-dark:focus{outline:none}.custom-range.custom-range-dark:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(34,41,47,.25)}.custom-range.custom-range-dark:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(34,41,47,.25)}.custom-range.custom-range-dark:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(34,41,47,.25)}.custom-range.custom-range-dark::-webkit-slider-thumb{background-color:#22292f}.custom-range.custom-range-dark::-webkit-slider-thumb:active{background-color:#6e8396}.custom-range.custom-range-dark::-moz-range-thumb{background-color:#22292f}.custom-range.custom-range-dark::-moz-range-thumb:active{background-color:#6e8396}.custom-range.custom-range-dark::-ms-thumb{background-color:#22292f}.custom-range.custom-range-dark::-ms-thumb:active{background-color:#6e8396}.custom-range.custom-range-lightblue:focus{outline:none}.custom-range.custom-range-lightblue:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(60,141,188,.25)}.custom-range.custom-range-lightblue:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(60,141,188,.25)}.custom-range.custom-range-lightblue:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(60,141,188,.25)}.custom-range.custom-range-lightblue::-webkit-slider-thumb{background-color:#3c8dbc}.custom-range.custom-range-lightblue::-webkit-slider-thumb:active{background-color:#c0dbeb}.custom-range.custom-range-lightblue::-moz-range-thumb{background-color:#3c8dbc}.custom-range.custom-range-lightblue::-moz-range-thumb:active{background-color:#c0dbeb}.custom-range.custom-range-lightblue::-ms-thumb{background-color:#3c8dbc}.custom-range.custom-range-lightblue::-ms-thumb:active{background-color:#c0dbeb}.custom-range.custom-range-navy:focus{outline:none}.custom-range.custom-range-navy:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(0,31,63,.25)}.custom-range.custom-range-navy:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(0,31,63,.25)}.custom-range.custom-range-navy:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(0,31,63,.25)}.custom-range.custom-range-navy::-webkit-slider-thumb{background-color:#001f3f}.custom-range.custom-range-navy::-webkit-slider-thumb:active{background-color:#0077f2}.custom-range.custom-range-navy::-moz-range-thumb{background-color:#001f3f}.custom-range.custom-range-navy::-moz-range-thumb:active{background-color:#0077f2}.custom-range.custom-range-navy::-ms-thumb{background-color:#001f3f}.custom-range.custom-range-navy::-ms-thumb:active{background-color:#0077f2}.custom-range.custom-range-olive:focus{outline:none}.custom-range.custom-range-olive:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(61,153,112,.25)}.custom-range.custom-range-olive:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(61,153,112,.25)}.custom-range.custom-range-olive:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(61,153,112,.25)}.custom-range.custom-range-olive::-webkit-slider-thumb{background-color:#3d9970}.custom-range.custom-range-olive::-webkit-slider-thumb:active{background-color:#abdec7}.custom-range.custom-range-olive::-moz-range-thumb{background-color:#3d9970}.custom-range.custom-range-olive::-moz-range-thumb:active{background-color:#abdec7}.custom-range.custom-range-olive::-ms-thumb{background-color:#3d9970}.custom-range.custom-range-olive::-ms-thumb:active{background-color:#abdec7}.custom-range.custom-range-lime:focus{outline:none}.custom-range.custom-range-lime:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(1,255,112,.25)}.custom-range.custom-range-lime:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(1,255,112,.25)}.custom-range.custom-range-lime:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(1,255,112,.25)}.custom-range.custom-range-lime::-webkit-slider-thumb{background-color:#01ff70}.custom-range.custom-range-lime::-webkit-slider-thumb:active{background-color:#b4ffd4}.custom-range.custom-range-lime::-moz-range-thumb{background-color:#01ff70}.custom-range.custom-range-lime::-moz-range-thumb:active{background-color:#b4ffd4}.custom-range.custom-range-lime::-ms-thumb{background-color:#01ff70}.custom-range.custom-range-lime::-ms-thumb:active{background-color:#b4ffd4}.custom-range.custom-range-fuchsia:focus{outline:none}.custom-range.custom-range-fuchsia:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(240,18,190,.25)}.custom-range.custom-range-fuchsia:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(240,18,190,.25)}.custom-range.custom-range-fuchsia:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(240,18,190,.25)}.custom-range.custom-range-fuchsia::-webkit-slider-thumb{background-color:#f012be}.custom-range.custom-range-fuchsia::-webkit-slider-thumb:active{background-color:#fbbaec}.custom-range.custom-range-fuchsia::-moz-range-thumb{background-color:#f012be}.custom-range.custom-range-fuchsia::-moz-range-thumb:active{background-color:#fbbaec}.custom-range.custom-range-fuchsia::-ms-thumb{background-color:#f012be}.custom-range.custom-range-fuchsia::-ms-thumb:active{background-color:#fbbaec}.custom-range.custom-range-maroon:focus{outline:none}.custom-range.custom-range-maroon:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(216,27,96,.25)}.custom-range.custom-range-maroon:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(216,27,96,.25)}.custom-range.custom-range-maroon:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(216,27,96,.25)}.custom-range.custom-range-maroon::-webkit-slider-thumb{background-color:#d81b60}.custom-range.custom-range-maroon::-webkit-slider-thumb:active{background-color:#f5b0c9}.custom-range.custom-range-maroon::-moz-range-thumb{background-color:#d81b60}.custom-range.custom-range-maroon::-moz-range-thumb:active{background-color:#f5b0c9}.custom-range.custom-range-maroon::-ms-thumb{background-color:#d81b60}.custom-range.custom-range-maroon::-ms-thumb:active{background-color:#f5b0c9}.custom-range.custom-range-blue:focus{outline:none}.custom-range.custom-range-blue:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(48,133,214,.25)}.custom-range.custom-range-blue:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(48,133,214,.25)}.custom-range.custom-range-blue:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(48,133,214,.25)}.custom-range.custom-range-blue::-webkit-slider-thumb{background-color:#3085d6}.custom-range.custom-range-blue::-webkit-slider-thumb:active{background-color:#c5ddf4}.custom-range.custom-range-blue::-moz-range-thumb{background-color:#3085d6}.custom-range.custom-range-blue::-moz-range-thumb:active{background-color:#c5ddf4}.custom-range.custom-range-blue::-ms-thumb{background-color:#3085d6}.custom-range.custom-range-blue::-ms-thumb:active{background-color:#c5ddf4}.custom-range.custom-range-indigo:focus{outline:none}.custom-range.custom-range-indigo:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(92,107,198,.25)}.custom-range.custom-range-indigo:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(92,107,198,.25)}.custom-range.custom-range-indigo:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(92,107,198,.25)}.custom-range.custom-range-indigo::-webkit-slider-thumb{background-color:#5c6bc6}.custom-range.custom-range-indigo::-webkit-slider-thumb:active{background-color:#e0e3f4}.custom-range.custom-range-indigo::-moz-range-thumb{background-color:#5c6bc6}.custom-range.custom-range-indigo::-moz-range-thumb:active{background-color:#e0e3f4}.custom-range.custom-range-indigo::-ms-thumb{background-color:#5c6bc6}.custom-range.custom-range-indigo::-ms-thumb:active{background-color:#e0e3f4}.custom-range.custom-range-purple:focus{outline:none}.custom-range.custom-range-purple:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(111,66,193,.25)}.custom-range.custom-range-purple:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(111,66,193,.25)}.custom-range.custom-range-purple:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(111,66,193,.25)}.custom-range.custom-range-purple::-webkit-slider-thumb{background-color:#6f42c1}.custom-range.custom-range-purple::-webkit-slider-thumb:active{background-color:#d5c8ed}.custom-range.custom-range-purple::-moz-range-thumb{background-color:#6f42c1}.custom-range.custom-range-purple::-moz-range-thumb:active{background-color:#d5c8ed}.custom-range.custom-range-purple::-ms-thumb{background-color:#6f42c1}.custom-range.custom-range-purple::-ms-thumb:active{background-color:#d5c8ed}.custom-range.custom-range-pink:focus{outline:none}.custom-range.custom-range-pink:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(255,138,204,.25)}.custom-range.custom-range-pink:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(255,138,204,.25)}.custom-range.custom-range-pink:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(255,138,204,.25)}.custom-range.custom-range-pink::-webkit-slider-thumb{background-color:#ff8acc}.custom-range.custom-range-pink::-webkit-slider-thumb:active{background-color:#fff}.custom-range.custom-range-pink::-moz-range-thumb{background-color:#ff8acc}.custom-range.custom-range-pink::-moz-range-thumb:active{background-color:#fff}.custom-range.custom-range-pink::-ms-thumb{background-color:#ff8acc}.custom-range.custom-range-pink::-ms-thumb:active{background-color:#fff}.custom-range.custom-range-red:focus{outline:none}.custom-range.custom-range-red:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(234,84,85,.25)}.custom-range.custom-range-red:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(234,84,85,.25)}.custom-range.custom-range-red:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(234,84,85,.25)}.custom-range.custom-range-red::-webkit-slider-thumb{background-color:#ea5455}.custom-range.custom-range-red::-webkit-slider-thumb:active{background-color:#fef3f3}.custom-range.custom-range-red::-moz-range-thumb{background-color:#ea5455}.custom-range.custom-range-red::-moz-range-thumb:active{background-color:#fef3f3}.custom-range.custom-range-red::-ms-thumb{background-color:#ea5455}.custom-range.custom-range-red::-ms-thumb:active{background-color:#fef3f3}.custom-range.custom-range-orange:focus{outline:none}.custom-range.custom-range-orange:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(221,164,81,.25)}.custom-range.custom-range-orange:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(221,164,81,.25)}.custom-range.custom-range-orange:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(221,164,81,.25)}.custom-range.custom-range-orange::-webkit-slider-thumb{background-color:#dda451}.custom-range.custom-range-orange::-webkit-slider-thumb:active{background-color:#faf2e6}.custom-range.custom-range-orange::-moz-range-thumb{background-color:#dda451}.custom-range.custom-range-orange::-moz-range-thumb:active{background-color:#faf2e6}.custom-range.custom-range-orange::-ms-thumb{background-color:#dda451}.custom-range.custom-range-orange::-ms-thumb:active{background-color:#faf2e6}.custom-range.custom-range-yellow:focus{outline:none}.custom-range.custom-range-yellow:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(237,195,14,.25)}.custom-range.custom-range-yellow:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(237,195,14,.25)}.custom-range.custom-range-yellow:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(237,195,14,.25)}.custom-range.custom-range-yellow::-webkit-slider-thumb{background-color:#edc30e}.custom-range.custom-range-yellow::-webkit-slider-thumb:active{background-color:#fbedb3}.custom-range.custom-range-yellow::-moz-range-thumb{background-color:#edc30e}.custom-range.custom-range-yellow::-moz-range-thumb:active{background-color:#fbedb3}.custom-range.custom-range-yellow::-ms-thumb{background-color:#edc30e}.custom-range.custom-range-yellow::-ms-thumb:active{background-color:#fbedb3}.custom-range.custom-range-green:focus{outline:none}.custom-range.custom-range-green:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(33,185,120,.25)}.custom-range.custom-range-green:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(33,185,120,.25)}.custom-range.custom-range-green:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(33,185,120,.25)}.custom-range.custom-range-green::-webkit-slider-thumb{background-color:#21b978}.custom-range.custom-range-green::-webkit-slider-thumb:active{background-color:#9feecc}.custom-range.custom-range-green::-moz-range-thumb{background-color:#21b978}.custom-range.custom-range-green::-moz-range-thumb:active{background-color:#9feecc}.custom-range.custom-range-green::-ms-thumb{background-color:#21b978}.custom-range.custom-range-green::-ms-thumb:active{background-color:#9feecc}.custom-range.custom-range-teal:focus{outline:none}.custom-range.custom-range-teal:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(32,201,151,.25)}.custom-range.custom-range-teal:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(32,201,151,.25)}.custom-range.custom-range-teal:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(32,201,151,.25)}.custom-range.custom-range-teal::-webkit-slider-thumb{background-color:#20c997}.custom-range.custom-range-teal::-webkit-slider-thumb:active{background-color:#aaf1dc}.custom-range.custom-range-teal::-moz-range-thumb{background-color:#20c997}.custom-range.custom-range-teal::-moz-range-thumb:active{background-color:#aaf1dc}.custom-range.custom-range-teal::-ms-thumb{background-color:#20c997}.custom-range.custom-range-teal::-ms-thumb:active{background-color:#aaf1dc}.custom-range.custom-range-cyan:focus{outline:none}.custom-range.custom-range-cyan:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(115,103,240,.25)}.custom-range.custom-range-cyan:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(115,103,240,.25)}.custom-range.custom-range-cyan:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(115,103,240,.25)}.custom-range.custom-range-cyan::-webkit-slider-thumb{background-color:#7367f0}.custom-range.custom-range-cyan::-webkit-slider-thumb:active{background-color:#fff}.custom-range.custom-range-cyan::-moz-range-thumb{background-color:#7367f0}.custom-range.custom-range-cyan::-moz-range-thumb:active{background-color:#fff}.custom-range.custom-range-cyan::-ms-thumb{background-color:#7367f0}.custom-range.custom-range-cyan::-ms-thumb:active{background-color:#fff}.custom-range.custom-range-white:focus{outline:none}.custom-range.custom-range-white:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px hsla(0,0%,100%,.25)}.custom-range.custom-range-white:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px hsla(0,0%,100%,.25)}.custom-range.custom-range-white:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px hsla(0,0%,100%,.25)}.custom-range.custom-range-white::-webkit-slider-thumb,.custom-range.custom-range-white::-webkit-slider-thumb:active{background-color:#fff}.custom-range.custom-range-white::-moz-range-thumb,.custom-range.custom-range-white::-moz-range-thumb:active{background-color:#fff}.custom-range.custom-range-white::-ms-thumb,.custom-range.custom-range-white::-ms-thumb:active{background-color:#fff}.custom-range.custom-range-gray:focus{outline:none}.custom-range.custom-range-gray:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(184,194,204,.25)}.custom-range.custom-range-gray:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(184,194,204,.25)}.custom-range.custom-range-gray:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(184,194,204,.25)}.custom-range.custom-range-gray::-webkit-slider-thumb{background-color:#b8c2cc}.custom-range.custom-range-gray::-webkit-slider-thumb:active{background-color:#fff}.custom-range.custom-range-gray::-moz-range-thumb{background-color:#b8c2cc}.custom-range.custom-range-gray::-moz-range-thumb:active{background-color:#fff}.custom-range.custom-range-gray::-ms-thumb{background-color:#b8c2cc}.custom-range.custom-range-gray::-ms-thumb:active{background-color:#fff}.custom-range.custom-range-gray-dark:focus{outline:none}.custom-range.custom-range-gray-dark:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(30,30,30,.25)}.custom-range.custom-range-gray-dark:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(30,30,30,.25)}.custom-range.custom-range-gray-dark:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(30,30,30,.25)}.custom-range.custom-range-gray-dark::-webkit-slider-thumb{background-color:#1e1e1e}.custom-range.custom-range-gray-dark::-webkit-slider-thumb:active{background-color:#777}.custom-range.custom-range-gray-dark::-moz-range-thumb{background-color:#1e1e1e}.custom-range.custom-range-gray-dark::-moz-range-thumb:active{background-color:#777}.custom-range.custom-range-gray-dark::-ms-thumb{background-color:#1e1e1e}.custom-range.custom-range-gray-dark::-ms-thumb:active{background-color:#777}.progress{border-radius:1px}.progress.vertical{display:inline-block;height:200px;margin-right:10px;position:relative;width:30px}.progress.vertical>.progress-bar{bottom:0;position:absolute;width:100%}.progress.vertical.progress-sm,.progress.vertical.sm{width:20px}.progress.vertical.progress-xs,.progress.vertical.xs{width:10px}.progress.vertical.progress-xxs,.progress.vertical.xxs{width:3px}.progress-group{margin-bottom:1.5rem}.progress-sm{height:10px}.progress-xs{height:7px}.progress-xxs{height:3px}.table tr>td .progress{margin:0}.card-primary:not(.card-outline)>.card-header{background-color:#62a8ea}.card-primary:not(.card-outline)>.card-header,.card-primary:not(.card-outline)>.card-header a,.card-primary:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-primary.card-outline{border-top:3px solid #62a8ea}.card-primary.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-primary.card-outline-tabs>.card-header a.active{border-top:3px solid #62a8ea}.bg-gradient-primary .btn-tool,.bg-primary .btn-tool,.card-primary:not(.card-outline) .btn-tool{color:rgba(42,46,48,.8)}.bg-gradient-primary .btn-tool:hover,.bg-primary .btn-tool:hover,.card-primary:not(.card-outline) .btn-tool:hover{color:#2a2e30}.card.bg-gradient-primary .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-primary .bootstrap-datetimepicker-widget .table th,.card.bg-primary .bootstrap-datetimepicker-widget .table td,.card.bg-primary .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-primary .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-primary .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-primary .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-primary .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-primary .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-primary .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-primary .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-primary .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-primary .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-primary .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#3e94e5;color:#2a2e30}.card.bg-gradient-primary .bootstrap-datetimepicker-widget table td.today:before,.card.bg-primary .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#2a2e30}.card.bg-gradient-primary .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-primary .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-primary .bootstrap-datetimepicker-widget table td.active,.card.bg-primary .bootstrap-datetimepicker-widget table td.active:hover{background:#8fc1f0;color:#2a2e30}.card-secondary:not(.card-outline)>.card-header{background-color:#b8c2cc}.card-secondary:not(.card-outline)>.card-header,.card-secondary:not(.card-outline)>.card-header a,.card-secondary:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-secondary.card-outline{border-top:3px solid #b8c2cc}.card-secondary.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-secondary.card-outline-tabs>.card-header a.active{border-top:3px solid #b8c2cc}.bg-gradient-secondary .btn-tool,.bg-secondary .btn-tool,.card-secondary:not(.card-outline) .btn-tool{color:rgba(42,46,48,.8)}.bg-gradient-secondary .btn-tool:hover,.bg-secondary .btn-tool:hover,.card-secondary:not(.card-outline) .btn-tool:hover{color:#2a2e30}.card.bg-gradient-secondary .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-secondary .bootstrap-datetimepicker-widget .table th,.card.bg-secondary .bootstrap-datetimepicker-widget .table td,.card.bg-secondary .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-secondary .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-secondary .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-secondary .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-secondary .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-secondary .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-secondary .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-secondary .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-secondary .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-secondary .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-secondary .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#a0aebb;color:#2a2e30}.card.bg-gradient-secondary .bootstrap-datetimepicker-widget table td.today:before,.card.bg-secondary .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#2a2e30}.card.bg-gradient-secondary .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-secondary .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-secondary .bootstrap-datetimepicker-widget table td.active,.card.bg-secondary .bootstrap-datetimepicker-widget table td.active:hover{background:#d6dce1;color:#2a2e30}.card-success:not(.card-outline)>.card-header{background-color:#21b978}.card-success:not(.card-outline)>.card-header,.card-success:not(.card-outline)>.card-header a{color:#fff}.card-success:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-success.card-outline{border-top:3px solid #21b978}.card-success.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-success.card-outline-tabs>.card-header a.active{border-top:3px solid #21b978}.bg-gradient-success .btn-tool,.bg-success .btn-tool,.card-success:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-gradient-success .btn-tool:hover,.bg-success .btn-tool:hover,.card-success:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-gradient-success .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-success .bootstrap-datetimepicker-widget .table th,.card.bg-success .bootstrap-datetimepicker-widget .table td,.card.bg-success .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-success .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-success .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-success .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-success .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-success .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-success .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-success .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-success .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-success .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-success .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#1b9662;color:#fff}.card.bg-gradient-success .bootstrap-datetimepicker-widget table td.today:before,.card.bg-success .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-gradient-success .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-success .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-success .bootstrap-datetimepicker-widget table td.active,.card.bg-success .bootstrap-datetimepicker-widget table td.active:hover{background:#32db93;color:#fff}.card-info:not(.card-outline)>.card-header{background-color:#4277cf}.card-info:not(.card-outline)>.card-header,.card-info:not(.card-outline)>.card-header a{color:#fff}.card-info:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-info.card-outline{border-top:3px solid #4277cf}.card-info.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-info.card-outline-tabs>.card-header a.active{border-top:3px solid #4277cf}.bg-gradient-info .btn-tool,.bg-info .btn-tool,.card-info:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-gradient-info .btn-tool:hover,.bg-info .btn-tool:hover,.card-info:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-gradient-info .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-info .bootstrap-datetimepicker-widget .table th,.card.bg-info .bootstrap-datetimepicker-widget .table td,.card.bg-info .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-info .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-info .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-info .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-info .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-info .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-info .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-info .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-info .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-info .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-info .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#2f63b9;color:#fff}.card.bg-gradient-info .bootstrap-datetimepicker-widget table td.today:before,.card.bg-info .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-gradient-info .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-info .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-info .bootstrap-datetimepicker-widget table td.active,.card.bg-info .bootstrap-datetimepicker-widget table td.active:hover{background:#6b94d9;color:#fff}.card-warning:not(.card-outline)>.card-header{background-color:#dda451}.card-warning:not(.card-outline)>.card-header,.card-warning:not(.card-outline)>.card-header a,.card-warning:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-warning.card-outline{border-top:3px solid #dda451}.card-warning.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-warning.card-outline-tabs>.card-header a.active{border-top:3px solid #dda451}.bg-gradient-warning .btn-tool,.bg-warning .btn-tool,.card-warning:not(.card-outline) .btn-tool{color:rgba(42,46,48,.8)}.bg-gradient-warning .btn-tool:hover,.bg-warning .btn-tool:hover,.card-warning:not(.card-outline) .btn-tool:hover{color:#2a2e30}.card.bg-gradient-warning .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-warning .bootstrap-datetimepicker-widget .table th,.card.bg-warning .bootstrap-datetimepicker-widget .table td,.card.bg-warning .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-warning .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-warning .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-warning .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-warning .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-warning .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-warning .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-warning .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-warning .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-warning .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-warning .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#d6922f;color:#2a2e30}.card.bg-gradient-warning .bootstrap-datetimepicker-widget table td.today:before,.card.bg-warning .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#2a2e30}.card.bg-gradient-warning .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-warning .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-warning .bootstrap-datetimepicker-widget table td.active,.card.bg-warning .bootstrap-datetimepicker-widget table td.active:hover{background:#e5ba7c;color:#2a2e30}.card-danger:not(.card-outline)>.card-header{background-color:#ea5455}.card-danger:not(.card-outline)>.card-header,.card-danger:not(.card-outline)>.card-header a{color:#fff}.card-danger:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-danger.card-outline{border-top:3px solid #ea5455}.card-danger.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-danger.card-outline-tabs>.card-header a.active{border-top:3px solid #ea5455}.bg-danger .btn-tool,.bg-gradient-danger .btn-tool,.card-danger:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-danger .btn-tool:hover,.bg-gradient-danger .btn-tool:hover,.card-danger:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-danger .bootstrap-datetimepicker-widget .table td,.card.bg-danger .bootstrap-datetimepicker-widget .table th,.card.bg-gradient-danger .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-danger .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-danger .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-danger .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-danger .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-danger .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-danger .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-gradient-danger .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-danger .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-danger .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-danger .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-danger .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#e63031;color:#fff}.card.bg-danger .bootstrap-datetimepicker-widget table td.today:before,.card.bg-gradient-danger .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-danger .bootstrap-datetimepicker-widget table td.active,.card.bg-danger .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-gradient-danger .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-danger .bootstrap-datetimepicker-widget table td.active:hover{background:#f08182;color:#fff}.card-light:not(.card-outline)>.card-header{background-color:#f7f7f9}.card-light:not(.card-outline)>.card-header,.card-light:not(.card-outline)>.card-header a,.card-light:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-light.card-outline{border-top:3px solid #f7f7f9}.card-light.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-light.card-outline-tabs>.card-header a.active{border-top:3px solid #f7f7f9}.bg-gradient-light .btn-tool,.bg-light .btn-tool,.card-light:not(.card-outline) .btn-tool{color:rgba(42,46,48,.8)}.bg-gradient-light .btn-tool:hover,.bg-light .btn-tool:hover,.card-light:not(.card-outline) .btn-tool:hover{color:#2a2e30}.card.bg-gradient-light .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-light .bootstrap-datetimepicker-widget .table th,.card.bg-light .bootstrap-datetimepicker-widget .table td,.card.bg-light .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-light .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-light .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-light .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-light .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-light .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-light .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-light .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-light .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-light .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-light .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#e0e0e8;color:#2a2e30}.card.bg-gradient-light .bootstrap-datetimepicker-widget table td.today:before,.card.bg-light .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#2a2e30}.card.bg-gradient-light .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-light .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-light .bootstrap-datetimepicker-widget table td.active,.card.bg-light .bootstrap-datetimepicker-widget table td.active:hover{background:#fff;color:#2a2e30}.card-dark:not(.card-outline)>.card-header{background-color:#22292f}.card-dark:not(.card-outline)>.card-header,.card-dark:not(.card-outline)>.card-header a{color:#fff}.card-dark:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-dark.card-outline{border-top:3px solid #22292f}.card-dark.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-dark.card-outline-tabs>.card-header a.active{border-top:3px solid #22292f}.bg-dark .btn-tool,.bg-gradient-dark .btn-tool,.card-dark:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-dark .btn-tool:hover,.bg-gradient-dark .btn-tool:hover,.card-dark:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-dark .bootstrap-datetimepicker-widget .table td,.card.bg-dark .bootstrap-datetimepicker-widget .table th,.card.bg-gradient-dark .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-dark .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-dark .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-dark .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-dark .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-dark .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-dark .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-gradient-dark .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-dark .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-dark .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-dark .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-dark .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#111417;color:#fff}.card.bg-dark .bootstrap-datetimepicker-widget table td.today:before,.card.bg-gradient-dark .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-dark .bootstrap-datetimepicker-widget table td.active,.card.bg-dark .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-gradient-dark .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-dark .bootstrap-datetimepicker-widget table td.active:hover{background:#37434d;color:#fff}.card-lightblue:not(.card-outline)>.card-header{background-color:#3c8dbc}.card-lightblue:not(.card-outline)>.card-header,.card-lightblue:not(.card-outline)>.card-header a{color:#fff}.card-lightblue:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-lightblue.card-outline{border-top:3px solid #3c8dbc}.card-lightblue.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-lightblue.card-outline-tabs>.card-header a.active{border-top:3px solid #3c8dbc}.bg-gradient-lightblue .btn-tool,.bg-lightblue .btn-tool,.card-lightblue:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-gradient-lightblue .btn-tool:hover,.bg-lightblue .btn-tool:hover,.card-lightblue:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-gradient-lightblue .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-lightblue .bootstrap-datetimepicker-widget .table th,.card.bg-lightblue .bootstrap-datetimepicker-widget .table td,.card.bg-lightblue .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-lightblue .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-lightblue .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-lightblue .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-lightblue .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-lightblue .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-lightblue .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-lightblue .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-lightblue .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-lightblue .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-lightblue .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#32769d;color:#fff}.card.bg-gradient-lightblue .bootstrap-datetimepicker-widget table td.today:before,.card.bg-lightblue .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-gradient-lightblue .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-lightblue .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-lightblue .bootstrap-datetimepicker-widget table td.active,.card.bg-lightblue .bootstrap-datetimepicker-widget table td.active:hover{background:#5fa4cc;color:#fff}.card-navy:not(.card-outline)>.card-header{background-color:#001f3f}.card-navy:not(.card-outline)>.card-header,.card-navy:not(.card-outline)>.card-header a{color:#fff}.card-navy:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-navy.card-outline{border-top:3px solid #001f3f}.card-navy.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-navy.card-outline-tabs>.card-header a.active{border-top:3px solid #001f3f}.bg-gradient-navy .btn-tool,.bg-navy .btn-tool,.card-navy:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-gradient-navy .btn-tool:hover,.bg-navy .btn-tool:hover,.card-navy:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-gradient-navy .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-navy .bootstrap-datetimepicker-widget .table th,.card.bg-navy .bootstrap-datetimepicker-widget .table td,.card.bg-navy .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-navy .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-navy .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-navy .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-navy .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-navy .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-navy .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-navy .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-navy .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-navy .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-navy .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#000b16;color:#fff}.card.bg-gradient-navy .bootstrap-datetimepicker-widget table td.today:before,.card.bg-navy .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-gradient-navy .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-navy .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-navy .bootstrap-datetimepicker-widget table td.active,.card.bg-navy .bootstrap-datetimepicker-widget table td.active:hover{background:#003872;color:#fff}.card-olive:not(.card-outline)>.card-header{background-color:#3d9970}.card-olive:not(.card-outline)>.card-header,.card-olive:not(.card-outline)>.card-header a{color:#fff}.card-olive:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-olive.card-outline{border-top:3px solid #3d9970}.card-olive.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-olive.card-outline-tabs>.card-header a.active{border-top:3px solid #3d9970}.bg-gradient-olive .btn-tool,.bg-olive .btn-tool,.card-olive:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-gradient-olive .btn-tool:hover,.bg-olive .btn-tool:hover,.card-olive:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-gradient-olive .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-olive .bootstrap-datetimepicker-widget .table th,.card.bg-olive .bootstrap-datetimepicker-widget .table td,.card.bg-olive .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-olive .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-olive .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-olive .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-olive .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-olive .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-olive .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-olive .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-olive .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-olive .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-olive .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#317c5b;color:#fff}.card.bg-gradient-olive .bootstrap-datetimepicker-widget table td.today:before,.card.bg-olive .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-gradient-olive .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-olive .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-olive .bootstrap-datetimepicker-widget table td.active,.card.bg-olive .bootstrap-datetimepicker-widget table td.active:hover{background:#50b98a;color:#fff}.card-lime:not(.card-outline)>.card-header{background-color:#01ff70}.card-lime:not(.card-outline)>.card-header,.card-lime:not(.card-outline)>.card-header a,.card-lime:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-lime.card-outline{border-top:3px solid #01ff70}.card-lime.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-lime.card-outline-tabs>.card-header a.active{border-top:3px solid #01ff70}.bg-gradient-lime .btn-tool,.bg-lime .btn-tool,.card-lime:not(.card-outline) .btn-tool{color:rgba(42,46,48,.8)}.bg-gradient-lime .btn-tool:hover,.bg-lime .btn-tool:hover,.card-lime:not(.card-outline) .btn-tool:hover{color:#2a2e30}.card.bg-gradient-lime .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-lime .bootstrap-datetimepicker-widget .table th,.card.bg-lime .bootstrap-datetimepicker-widget .table td,.card.bg-lime .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-lime .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-lime .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-lime .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-lime .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-lime .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-lime .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-lime .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-lime .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-lime .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-lime .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#00d75e;color:#2a2e30}.card.bg-gradient-lime .bootstrap-datetimepicker-widget table td.today:before,.card.bg-lime .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#2a2e30}.card.bg-gradient-lime .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-lime .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-lime .bootstrap-datetimepicker-widget table td.active,.card.bg-lime .bootstrap-datetimepicker-widget table td.active:hover{background:#34ff8d;color:#2a2e30}.card-fuchsia:not(.card-outline)>.card-header{background-color:#f012be}.card-fuchsia:not(.card-outline)>.card-header,.card-fuchsia:not(.card-outline)>.card-header a{color:#fff}.card-fuchsia:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-fuchsia.card-outline{border-top:3px solid #f012be}.card-fuchsia.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-fuchsia.card-outline-tabs>.card-header a.active{border-top:3px solid #f012be}.bg-fuchsia .btn-tool,.bg-gradient-fuchsia .btn-tool,.card-fuchsia:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-fuchsia .btn-tool:hover,.bg-gradient-fuchsia .btn-tool:hover,.card-fuchsia:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-fuchsia .bootstrap-datetimepicker-widget .table td,.card.bg-fuchsia .bootstrap-datetimepicker-widget .table th,.card.bg-gradient-fuchsia .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-fuchsia .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-fuchsia .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-fuchsia .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-fuchsia .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-fuchsia .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-fuchsia .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-gradient-fuchsia .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-fuchsia .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-fuchsia .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-fuchsia .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-fuchsia .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#cc0da1;color:#fff}.card.bg-fuchsia .bootstrap-datetimepicker-widget table td.today:before,.card.bg-gradient-fuchsia .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-fuchsia .bootstrap-datetimepicker-widget table td.active,.card.bg-fuchsia .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-gradient-fuchsia .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-fuchsia .bootstrap-datetimepicker-widget table td.active:hover{background:#f342cb;color:#fff}.card-maroon:not(.card-outline)>.card-header{background-color:#d81b60}.card-maroon:not(.card-outline)>.card-header,.card-maroon:not(.card-outline)>.card-header a{color:#fff}.card-maroon:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-maroon.card-outline{border-top:3px solid #d81b60}.card-maroon.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-maroon.card-outline-tabs>.card-header a.active{border-top:3px solid #d81b60}.bg-gradient-maroon .btn-tool,.bg-maroon .btn-tool,.card-maroon:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-gradient-maroon .btn-tool:hover,.bg-maroon .btn-tool:hover,.card-maroon:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-gradient-maroon .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-maroon .bootstrap-datetimepicker-widget .table th,.card.bg-maroon .bootstrap-datetimepicker-widget .table td,.card.bg-maroon .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-maroon .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-maroon .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-maroon .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-maroon .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-maroon .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-maroon .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-maroon .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-maroon .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-maroon .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-maroon .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#b41650;color:#fff}.card.bg-gradient-maroon .bootstrap-datetimepicker-widget table td.today:before,.card.bg-maroon .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-gradient-maroon .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-maroon .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-maroon .bootstrap-datetimepicker-widget table td.active,.card.bg-maroon .bootstrap-datetimepicker-widget table td.active:hover{background:#e73f7c;color:#fff}.card-blue:not(.card-outline)>.card-header{background-color:#3085d6}.card-blue:not(.card-outline)>.card-header,.card-blue:not(.card-outline)>.card-header a{color:#fff}.card-blue:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-blue.card-outline{border-top:3px solid #3085d6}.card-blue.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-blue.card-outline-tabs>.card-header a.active{border-top:3px solid #3085d6}.bg-blue .btn-tool,.bg-gradient-blue .btn-tool,.card-blue:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-blue .btn-tool:hover,.bg-gradient-blue .btn-tool:hover,.card-blue:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-blue .bootstrap-datetimepicker-widget .table td,.card.bg-blue .bootstrap-datetimepicker-widget .table th,.card.bg-gradient-blue .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-blue .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-blue .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-blue .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-blue .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-blue .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-blue .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-gradient-blue .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-blue .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-blue .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-blue .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-blue .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#2570b9;color:#fff}.card.bg-blue .bootstrap-datetimepicker-widget table td.today:before,.card.bg-gradient-blue .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-blue .bootstrap-datetimepicker-widget table td.active,.card.bg-blue .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-gradient-blue .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-blue .bootstrap-datetimepicker-widget table td.active:hover{background:#5b9ede;color:#fff}.card-indigo:not(.card-outline)>.card-header{background-color:#5c6bc6}.card-indigo:not(.card-outline)>.card-header,.card-indigo:not(.card-outline)>.card-header a{color:#fff}.card-indigo:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-indigo.card-outline{border-top:3px solid #5c6bc6}.card-indigo.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-indigo.card-outline-tabs>.card-header a.active{border-top:3px solid #5c6bc6}.bg-gradient-indigo .btn-tool,.bg-indigo .btn-tool,.card-indigo:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-gradient-indigo .btn-tool:hover,.bg-indigo .btn-tool:hover,.card-indigo:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-gradient-indigo .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-indigo .bootstrap-datetimepicker-widget .table th,.card.bg-indigo .bootstrap-datetimepicker-widget .table td,.card.bg-indigo .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-indigo .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-indigo .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-indigo .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-indigo .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-indigo .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-indigo .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-indigo .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-indigo .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-indigo .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-indigo .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#4152b9;color:#fff}.card.bg-gradient-indigo .bootstrap-datetimepicker-widget table td.today:before,.card.bg-indigo .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-gradient-indigo .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-indigo .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-indigo .bootstrap-datetimepicker-widget table td.active,.card.bg-indigo .bootstrap-datetimepicker-widget table td.active:hover{background:#828dd3;color:#fff}.card-purple:not(.card-outline)>.card-header{background-color:#6f42c1}.card-purple:not(.card-outline)>.card-header,.card-purple:not(.card-outline)>.card-header a{color:#fff}.card-purple:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-purple.card-outline{border-top:3px solid #6f42c1}.card-purple.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-purple.card-outline-tabs>.card-header a.active{border-top:3px solid #6f42c1}.bg-gradient-purple .btn-tool,.bg-purple .btn-tool,.card-purple:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-gradient-purple .btn-tool:hover,.bg-purple .btn-tool:hover,.card-purple:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-gradient-purple .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-purple .bootstrap-datetimepicker-widget .table th,.card.bg-purple .bootstrap-datetimepicker-widget .table td,.card.bg-purple .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-purple .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-purple .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-purple .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-purple .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-purple .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-purple .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-purple .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-purple .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-purple .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-purple .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#5d36a4;color:#fff}.card.bg-gradient-purple .bootstrap-datetimepicker-widget table td.today:before,.card.bg-purple .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-gradient-purple .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-purple .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-purple .bootstrap-datetimepicker-widget table td.active,.card.bg-purple .bootstrap-datetimepicker-widget table td.active:hover{background:#8c68ce;color:#fff}.card-pink:not(.card-outline)>.card-header{background-color:#ff8acc}.card-pink:not(.card-outline)>.card-header,.card-pink:not(.card-outline)>.card-header a,.card-pink:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-pink.card-outline{border-top:3px solid #ff8acc}.card-pink.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-pink.card-outline-tabs>.card-header a.active{border-top:3px solid #ff8acc}.bg-gradient-pink .btn-tool,.bg-pink .btn-tool,.card-pink:not(.card-outline) .btn-tool{color:rgba(42,46,48,.8)}.bg-gradient-pink .btn-tool:hover,.bg-pink .btn-tool:hover,.card-pink:not(.card-outline) .btn-tool:hover{color:#2a2e30}.card.bg-gradient-pink .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-pink .bootstrap-datetimepicker-widget .table th,.card.bg-pink .bootstrap-datetimepicker-widget .table td,.card.bg-pink .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-pink .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-pink .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-pink .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-pink .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-pink .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-pink .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-pink .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-pink .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-pink .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-pink .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#ff61ba;color:#2a2e30}.card.bg-gradient-pink .bootstrap-datetimepicker-widget table td.today:before,.card.bg-pink .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#2a2e30}.card.bg-gradient-pink .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-pink .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-pink .bootstrap-datetimepicker-widget table td.active,.card.bg-pink .bootstrap-datetimepicker-widget table td.active:hover{background:#ffbde2;color:#2a2e30}.card-red:not(.card-outline)>.card-header{background-color:#ea5455}.card-red:not(.card-outline)>.card-header,.card-red:not(.card-outline)>.card-header a{color:#fff}.card-red:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-red.card-outline{border-top:3px solid #ea5455}.card-red.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-red.card-outline-tabs>.card-header a.active{border-top:3px solid #ea5455}.bg-gradient-red .btn-tool,.bg-red .btn-tool,.card-red:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-gradient-red .btn-tool:hover,.bg-red .btn-tool:hover,.card-red:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-gradient-red .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-red .bootstrap-datetimepicker-widget .table th,.card.bg-red .bootstrap-datetimepicker-widget .table td,.card.bg-red .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-red .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-red .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-red .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-red .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-red .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-red .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-red .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-red .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-red .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-red .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#e63031;color:#fff}.card.bg-gradient-red .bootstrap-datetimepicker-widget table td.today:before,.card.bg-red .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-gradient-red .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-red .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-red .bootstrap-datetimepicker-widget table td.active,.card.bg-red .bootstrap-datetimepicker-widget table td.active:hover{background:#f08182;color:#fff}.card-orange:not(.card-outline)>.card-header{background-color:#dda451}.card-orange:not(.card-outline)>.card-header,.card-orange:not(.card-outline)>.card-header a,.card-orange:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-orange.card-outline{border-top:3px solid #dda451}.card-orange.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-orange.card-outline-tabs>.card-header a.active{border-top:3px solid #dda451}.bg-gradient-orange .btn-tool,.bg-orange .btn-tool,.card-orange:not(.card-outline) .btn-tool{color:rgba(42,46,48,.8)}.bg-gradient-orange .btn-tool:hover,.bg-orange .btn-tool:hover,.card-orange:not(.card-outline) .btn-tool:hover{color:#2a2e30}.card.bg-gradient-orange .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-orange .bootstrap-datetimepicker-widget .table th,.card.bg-orange .bootstrap-datetimepicker-widget .table td,.card.bg-orange .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-orange .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-orange .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-orange .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-orange .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-orange .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-orange .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-orange .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-orange .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-orange .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-orange .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#d6922f;color:#2a2e30}.card.bg-gradient-orange .bootstrap-datetimepicker-widget table td.today:before,.card.bg-orange .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#2a2e30}.card.bg-gradient-orange .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-orange .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-orange .bootstrap-datetimepicker-widget table td.active,.card.bg-orange .bootstrap-datetimepicker-widget table td.active:hover{background:#e5ba7c;color:#2a2e30}.card-yellow:not(.card-outline)>.card-header{background-color:#edc30e}.card-yellow:not(.card-outline)>.card-header,.card-yellow:not(.card-outline)>.card-header a,.card-yellow:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-yellow.card-outline{border-top:3px solid #edc30e}.card-yellow.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-yellow.card-outline-tabs>.card-header a.active{border-top:3px solid #edc30e}.bg-gradient-yellow .btn-tool,.bg-yellow .btn-tool,.card-yellow:not(.card-outline) .btn-tool{color:rgba(42,46,48,.8)}.bg-gradient-yellow .btn-tool:hover,.bg-yellow .btn-tool:hover,.card-yellow:not(.card-outline) .btn-tool:hover{color:#2a2e30}.card.bg-gradient-yellow .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-yellow .bootstrap-datetimepicker-widget .table th,.card.bg-yellow .bootstrap-datetimepicker-widget .table td,.card.bg-yellow .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-yellow .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-yellow .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-yellow .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-yellow .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-yellow .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-yellow .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-yellow .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-yellow .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-yellow .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-yellow .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#c6a30c;color:#2a2e30}.card.bg-gradient-yellow .bootstrap-datetimepicker-widget table td.today:before,.card.bg-yellow .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#2a2e30}.card.bg-gradient-yellow .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-yellow .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-yellow .bootstrap-datetimepicker-widget table td.active,.card.bg-yellow .bootstrap-datetimepicker-widget table td.active:hover{background:#f3d13b;color:#2a2e30}.card-green:not(.card-outline)>.card-header{background-color:#21b978}.card-green:not(.card-outline)>.card-header,.card-green:not(.card-outline)>.card-header a{color:#fff}.card-green:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-green.card-outline{border-top:3px solid #21b978}.card-green.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-green.card-outline-tabs>.card-header a.active{border-top:3px solid #21b978}.bg-gradient-green .btn-tool,.bg-green .btn-tool,.card-green:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-gradient-green .btn-tool:hover,.bg-green .btn-tool:hover,.card-green:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-gradient-green .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-green .bootstrap-datetimepicker-widget .table th,.card.bg-green .bootstrap-datetimepicker-widget .table td,.card.bg-green .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-green .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-green .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-green .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-green .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-green .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-green .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-green .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-green .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-green .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-green .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#1b9662;color:#fff}.card.bg-gradient-green .bootstrap-datetimepicker-widget table td.today:before,.card.bg-green .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-gradient-green .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-green .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-green .bootstrap-datetimepicker-widget table td.active,.card.bg-green .bootstrap-datetimepicker-widget table td.active:hover{background:#32db93;color:#fff}.card-teal:not(.card-outline)>.card-header{background-color:#20c997}.card-teal:not(.card-outline)>.card-header,.card-teal:not(.card-outline)>.card-header a{color:#fff}.card-teal:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-teal.card-outline{border-top:3px solid #20c997}.card-teal.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-teal.card-outline-tabs>.card-header a.active{border-top:3px solid #20c997}.bg-gradient-teal .btn-tool,.bg-teal .btn-tool,.card-teal:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-gradient-teal .btn-tool:hover,.bg-teal .btn-tool:hover,.card-teal:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-gradient-teal .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-teal .bootstrap-datetimepicker-widget .table th,.card.bg-teal .bootstrap-datetimepicker-widget .table td,.card.bg-teal .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-teal .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-teal .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-teal .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-teal .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-teal .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-teal .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-teal .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-teal .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-teal .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-teal .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#1aa67d;color:#fff}.card.bg-gradient-teal .bootstrap-datetimepicker-widget table td.today:before,.card.bg-teal .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-gradient-teal .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-teal .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-teal .bootstrap-datetimepicker-widget table td.active,.card.bg-teal .bootstrap-datetimepicker-widget table td.active:hover{background:#3ce0af;color:#fff}.card-cyan:not(.card-outline)>.card-header{background-color:#7367f0}.card-cyan:not(.card-outline)>.card-header,.card-cyan:not(.card-outline)>.card-header a{color:#fff}.card-cyan:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-cyan.card-outline{border-top:3px solid #7367f0}.card-cyan.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-cyan.card-outline-tabs>.card-header a.active{border-top:3px solid #7367f0}.bg-cyan .btn-tool,.bg-gradient-cyan .btn-tool,.card-cyan:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-cyan .btn-tool:hover,.bg-gradient-cyan .btn-tool:hover,.card-cyan:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-cyan .bootstrap-datetimepicker-widget .table td,.card.bg-cyan .bootstrap-datetimepicker-widget .table th,.card.bg-gradient-cyan .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-cyan .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-cyan .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-cyan .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-cyan .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-cyan .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-cyan .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-gradient-cyan .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-cyan .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-cyan .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-cyan .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-cyan .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#5142ec;color:#fff}.card.bg-cyan .bootstrap-datetimepicker-widget table td.today:before,.card.bg-gradient-cyan .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-cyan .bootstrap-datetimepicker-widget table td.active,.card.bg-cyan .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-gradient-cyan .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-cyan .bootstrap-datetimepicker-widget table td.active:hover{background:#9e95f5;color:#fff}.card-white:not(.card-outline)>.card-header{background-color:#fff}.card-white:not(.card-outline)>.card-header,.card-white:not(.card-outline)>.card-header a,.card-white:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-white.card-outline{border-top:3px solid #fff}.card-white.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-white.card-outline-tabs>.card-header a.active{border-top:3px solid #fff}.bg-gradient-white .btn-tool,.bg-white .btn-tool,.card-white:not(.card-outline) .btn-tool{color:rgba(42,46,48,.8)}.bg-gradient-white .btn-tool:hover,.bg-white .btn-tool:hover,.card-white:not(.card-outline) .btn-tool:hover{color:#2a2e30}.card.bg-gradient-white .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-white .bootstrap-datetimepicker-widget .table th,.card.bg-white .bootstrap-datetimepicker-widget .table td,.card.bg-white .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-white .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-white .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-white .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-white .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-white .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-white .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-white .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-white .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-white .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-white .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#ebebeb;color:#2a2e30}.card.bg-gradient-white .bootstrap-datetimepicker-widget table td.today:before,.card.bg-white .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#2a2e30}.card.bg-gradient-white .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-white .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-white .bootstrap-datetimepicker-widget table td.active,.card.bg-white .bootstrap-datetimepicker-widget table td.active:hover{background:#fff;color:#2a2e30}.card-gray:not(.card-outline)>.card-header{background-color:#b8c2cc}.card-gray:not(.card-outline)>.card-header,.card-gray:not(.card-outline)>.card-header a,.card-gray:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-gray.card-outline{border-top:3px solid #b8c2cc}.card-gray.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-gray.card-outline-tabs>.card-header a.active{border-top:3px solid #b8c2cc}.bg-gradient-gray .btn-tool,.bg-gray .btn-tool,.card-gray:not(.card-outline) .btn-tool{color:rgba(42,46,48,.8)}.bg-gradient-gray .btn-tool:hover,.bg-gray .btn-tool:hover,.card-gray:not(.card-outline) .btn-tool:hover{color:#2a2e30}.card.bg-gradient-gray .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-gray .bootstrap-datetimepicker-widget .table th,.card.bg-gray .bootstrap-datetimepicker-widget .table td,.card.bg-gray .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-gray .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-gray .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-gray .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-gray .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-gray .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-gray .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gray .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gray .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gray .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gray .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#a0aebb;color:#2a2e30}.card.bg-gradient-gray .bootstrap-datetimepicker-widget table td.today:before,.card.bg-gray .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#2a2e30}.card.bg-gradient-gray .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-gray .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-gray .bootstrap-datetimepicker-widget table td.active,.card.bg-gray .bootstrap-datetimepicker-widget table td.active:hover{background:#d6dce1;color:#2a2e30}.card-gray-dark:not(.card-outline)>.card-header{background-color:#1e1e1e}.card-gray-dark:not(.card-outline)>.card-header,.card-gray-dark:not(.card-outline)>.card-header a{color:#fff}.card-gray-dark:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-gray-dark.card-outline{border-top:3px solid #1e1e1e}.card-gray-dark.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-gray-dark.card-outline-tabs>.card-header a.active{border-top:3px solid #1e1e1e}.bg-gradient-gray-dark .btn-tool,.bg-gray-dark .btn-tool,.card-gray-dark:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-gradient-gray-dark .btn-tool:hover,.bg-gray-dark .btn-tool:hover,.card-gray-dark:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-gradient-gray-dark .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-gray-dark .bootstrap-datetimepicker-widget .table th,.card.bg-gray-dark .bootstrap-datetimepicker-widget .table td,.card.bg-gray-dark .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-gray-dark .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-gray-dark .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-gray-dark .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-gray-dark .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-gray-dark .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-gray-dark .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gray-dark .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gray-dark .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gray-dark .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gray-dark .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#0a0a0a;color:#fff}.card.bg-gradient-gray-dark .bootstrap-datetimepicker-widget table td.today:before,.card.bg-gray-dark .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-gradient-gray-dark .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-gray-dark .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-gray-dark .bootstrap-datetimepicker-widget table td.active,.card.bg-gray-dark .bootstrap-datetimepicker-widget table td.active:hover{background:#383838;color:#fff}.card{margin-bottom:3rem;border:0}.card.bg-dark .card-header{border-color:#42484b}.card.bg-dark,.card.bg-dark .card-body{color:#fff}.card.maximized-card{height:100%!important;left:0;max-height:100%!important;max-width:100%!important;position:fixed;top:0;width:100%!important;z-index:9999}.card.maximized-card.was-collapsed .card-body{display:block!important}.card.maximized-card [data-widget=collapse]{display:none}.card.maximized-card .card-footer,.card.maximized-card .card-header{border-radius:0!important}.card.collapsed-card .card-body,.card.collapsed-card .card-footer{display:none}.card .nav.flex-column>li{border-bottom:1px solid rgba(34,41,47,.125);margin:0}.card .nav.flex-column>li:last-of-type{border-bottom:0}.card.height-control .card-body{max-height:300px;overflow:auto}.card .border-right{border-right:1px solid rgba(34,41,47,.125)}.card .border-left{border-left:1px solid rgba(34,41,47,.125)}.card.card-tabs:not(.card-outline)>.card-header{border-bottom:0}.card.card-tabs:not(.card-outline)>.card-header .nav-item:first-child .nav-link{margin-left:-1px}.card.card-tabs.card-outline .nav-item{border-bottom:0}.card.card-tabs.card-outline .nav-item:first-child .nav-link{border-left:0;margin-left:0}.card.card-tabs .card-tools{margin:.3rem .5rem}.card.card-tabs:not(.expanding-card).collapsed-card .card-header,.card.card-tabs:not(.expanding-card).collapsed-card .card-header .nav-tabs{border-bottom:0}.card.card-tabs:not(.expanding-card).collapsed-card .card-header .nav-tabs .nav-item{margin-bottom:0}.card.card-tabs.expanding-card .card-header .nav-tabs .nav-item{margin-bottom:-1px}.card.card-outline-tabs{border-top:0}.card.card-outline-tabs .card-header .nav-item:first-child .nav-link{border-left:0;margin-left:0}.card.card-outline-tabs .card-header a{border-top:3px solid transparent}.card.card-outline-tabs .card-header a:hover{border-top:3px solid #dae1e7}.card.card-outline-tabs .card-header a.active:hover{margin-top:0}.card.card-outline-tabs .card-tools{margin:.5rem .5rem .3rem}.card.card-outline-tabs:not(.expanding-card).collapsed-card .card-header,.card.card-outline-tabs:not(.expanding-card).collapsed-card .card-header .nav-tabs{border-bottom:0}.card.card-outline-tabs:not(.expanding-card).collapsed-card .card-header .nav-tabs .nav-item{margin-bottom:0}.card.card-outline-tabs.expanding-card .card-header .nav-tabs .nav-item{margin-bottom:-1px}html.maximized-card{overflow:hidden}.card-header{background-color:transparent;border-bottom:0;padding:.75rem 1.25rem;position:relative;border-top-left-radius:.5rem;border-top-right-radius:.5rem}.collapsed-card .card-header{border-bottom:0}.card-header>.card-tools{float:right;margin-right:-.625rem}.card-header>.card-tools .input-group,.card-header>.card-tools .nav,.card-header>.card-tools .pagination{margin-bottom:-.3rem;margin-top:-.3rem}.card-header>.card-tools [data-toggle=tooltip]{position:relative}.card-title{float:left;font-size:1.1rem;font-weight:400;margin:0}.card-text{clear:both}.btn-tool{background:transparent;color:#adb5bd;font-size:1rem;margin:-.75rem 0;padding:.25rem .5rem}.btn-group.show .btn-tool,.btn-tool:hover{color:#4e5154}.btn-tool:focus,.show .btn-tool{box-shadow:none!important}.text-sm .card-title{font-size:1rem}.text-sm .nav-link{padding:.4rem .8rem}.card-body>.table{margin-bottom:0}.card-body>.table>thead>tr>td,.card-body>.table>thead>tr>th{border-top-width:0}.card-body .fc{margin-top:5px}.card-body .full-width-chart{margin:-19px}.card-body.p-0 .full-width-chart{margin:-9px}.chart-legend{padding-left:0;list-style:none;margin:10px 0}@media (max-width:576px){.chart-legend>li{float:left;margin-right:10px}}.card-comments{background:#babfc7}.card-comments .card-comment{border-bottom:1px solid #ededed;padding:8px 0}.card-comments .card-comment:after{display:block;clear:both;content:""}.card-comments .card-comment:last-of-type{border-bottom:0}.card-comments .card-comment:first-of-type{padding-top:0}.card-comments .card-comment img{height:1.875rem;width:1.875rem;float:left}.card-comments .comment-text{color:#7f8489;margin-left:40px}.card-comments .username{color:#4e5154;display:block;font-weight:600}.card-comments .text-muted{font-size:12px;font-weight:400}.todo-list{list-style:none;margin:0;overflow:auto;padding:0}.todo-list>li{border-radius:2px;background:#babfc7;border-left:2px solid #ededed;color:#4e5154;margin-bottom:2px;padding:10px}.todo-list>li:last-of-type{margin-bottom:0}.todo-list>li>input[type=checkbox]{margin:0 10px 0 5px}.todo-list>li .text{display:inline-block;font-weight:600;margin-left:5px}.todo-list>li .badge{font-size:.7rem;margin-left:10px}.todo-list>li .tools{color:#ea5455;display:none;float:right}.todo-list>li .tools>.fa,.todo-list>li .tools>.fab,.todo-list>li .tools>.far,.todo-list>li .tools>.fas,.todo-list>li .tools>.glyphicon,.todo-list>li .tools>.ion{cursor:pointer;margin-right:5px}.todo-list>li:hover .tools{display:inline-block}.todo-list>li.done{color:#697582}.todo-list>li.done .text{font-weight:500;text-decoration:line-through}.todo-list>li.done .badge{background:#adb5bd!important}.todo-list .primary{border-left-color:#62a8ea}.todo-list .secondary{border-left-color:#b8c2cc}.todo-list .success{border-left-color:#21b978}.todo-list .info{border-left-color:#4277cf}.todo-list .warning{border-left-color:#dda451}.todo-list .danger{border-left-color:#ea5455}.todo-list .light{border-left-color:#f7f7f9}.todo-list .dark{border-left-color:#22292f}.todo-list .lightblue{border-left-color:#3c8dbc}.todo-list .navy{border-left-color:#001f3f}.todo-list .olive{border-left-color:#3d9970}.todo-list .lime{border-left-color:#01ff70}.todo-list .fuchsia{border-left-color:#f012be}.todo-list .maroon{border-left-color:#d81b60}.todo-list .blue{border-left-color:#3085d6}.todo-list .indigo{border-left-color:#5c6bc6}.todo-list .purple{border-left-color:#6f42c1}.todo-list .pink{border-left-color:#ff8acc}.todo-list .red{border-left-color:#ea5455}.todo-list .orange{border-left-color:#dda451}.todo-list .yellow{border-left-color:#edc30e}.todo-list .green{border-left-color:#21b978}.todo-list .teal{border-left-color:#20c997}.todo-list .cyan{border-left-color:#7367f0}.todo-list .white{border-left-color:#fff}.todo-list .gray{border-left-color:#b8c2cc}.todo-list .gray-dark{border-left-color:#1e1e1e}.todo-list .handle{cursor:move;display:inline-block;margin:0 5px}.card-input{max-width:200px}.card-default .nav-item:first-child .nav-link{border-left:0}.modal-dialog .overlay{background-color:#22292f;display:block;height:100%;left:0;opacity:.7;position:absolute;top:0;width:100%;z-index:1052}.modal-content.bg-warning .modal-footer,.modal-content.bg-warning .modal-header{border-color:#1e1e1e}.modal-content.bg-danger .close,.modal-content.bg-danger .mailbox-attachment-close,.modal-content.bg-info .close,.modal-content.bg-info .mailbox-attachment-close,.modal-content.bg-primary .close,.modal-content.bg-primary .mailbox-attachment-close,.modal-content.bg-secondary .close,.modal-content.bg-secondary .mailbox-attachment-close,.modal-content.bg-success .close,.modal-content.bg-success .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toasts-top-right{position:absolute;right:0;top:0;z-index:1040}.toasts-top-right.fixed{position:fixed}.toasts-top-left{left:0;position:absolute;top:0;z-index:1040}.toasts-top-left.fixed{position:fixed}.toasts-bottom-right{bottom:0;position:absolute;right:0;z-index:1040}.toasts-bottom-right.fixed{position:fixed}.toasts-bottom-left{bottom:0;left:0;position:absolute;z-index:1040}.toasts-bottom-left.fixed{position:fixed}.toast.bg-primary{background:rgba(98,168,234,.9)!important}.toast.bg-primary .toast-header{background:rgba(98,168,234,.85);color:#2a2e30}.toast.bg-secondary{background:rgba(184,194,204,.9)!important}.toast.bg-secondary .toast-header{background:rgba(184,194,204,.85);color:#2a2e30}.toast.bg-success{background:rgba(33,185,120,.9)!important}.toast.bg-success .close,.toast.bg-success .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-success .toast-header{background:rgba(33,185,120,.85);color:#fff}.toast.bg-info{background:rgba(66,119,207,.9)!important}.toast.bg-info .close,.toast.bg-info .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-info .toast-header{background:rgba(66,119,207,.85);color:#fff}.toast.bg-warning{background:rgba(221,164,81,.9)!important}.toast.bg-warning .toast-header{background:rgba(221,164,81,.85);color:#2a2e30}.toast.bg-danger{background:rgba(234,84,85,.9)!important}.toast.bg-danger .close,.toast.bg-danger .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-danger .toast-header{background:rgba(234,84,85,.85);color:#fff}.toast.bg-light{background:rgba(247,247,249,.9)!important}.toast.bg-light .toast-header{background:rgba(247,247,249,.85);color:#2a2e30}.toast.bg-dark{background:rgba(34,41,47,.9)!important}.toast.bg-dark .close,.toast.bg-dark .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-dark .toast-header{background:rgba(34,41,47,.85);color:#fff}.toast.bg-lightblue{background:rgba(60,141,188,.9)!important}.toast.bg-lightblue .close,.toast.bg-lightblue .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-lightblue .toast-header{background:rgba(60,141,188,.85);color:#fff}.toast.bg-navy{background:rgba(0,31,63,.9)!important}.toast.bg-navy .close,.toast.bg-navy .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-navy .toast-header{background:rgba(0,31,63,.85);color:#fff}.toast.bg-olive{background:rgba(61,153,112,.9)!important}.toast.bg-olive .close,.toast.bg-olive .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-olive .toast-header{background:rgba(61,153,112,.85);color:#fff}.toast.bg-lime{background:rgba(1,255,112,.9)!important}.toast.bg-lime .toast-header{background:rgba(1,255,112,.85);color:#2a2e30}.toast.bg-fuchsia{background:rgba(240,18,190,.9)!important}.toast.bg-fuchsia .close,.toast.bg-fuchsia .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-fuchsia .toast-header{background:rgba(240,18,190,.85);color:#fff}.toast.bg-maroon{background:rgba(216,27,96,.9)!important}.toast.bg-maroon .close,.toast.bg-maroon .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-maroon .toast-header{background:rgba(216,27,96,.85);color:#fff}.toast.bg-blue{background:rgba(48,133,214,.9)!important}.toast.bg-blue .close,.toast.bg-blue .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-blue .toast-header{background:rgba(48,133,214,.85);color:#fff}.toast.bg-indigo{background:rgba(92,107,198,.9)!important}.toast.bg-indigo .close,.toast.bg-indigo .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-indigo .toast-header{background:rgba(92,107,198,.85);color:#fff}.toast.bg-purple{background:rgba(111,66,193,.9)!important}.toast.bg-purple .close,.toast.bg-purple .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-purple .toast-header{background:rgba(111,66,193,.85);color:#fff}.toast.bg-pink{background:rgba(255,138,204,.9)!important}.toast.bg-pink .toast-header{background:rgba(255,138,204,.85);color:#2a2e30}.toast.bg-red{background:rgba(234,84,85,.9)!important}.toast.bg-red .close,.toast.bg-red .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-red .toast-header{background:rgba(234,84,85,.85);color:#fff}.toast.bg-orange{background:rgba(221,164,81,.9)!important}.toast.bg-orange .toast-header{background:rgba(221,164,81,.85);color:#2a2e30}.toast.bg-yellow{background:rgba(237,195,14,.9)!important}.toast.bg-yellow .toast-header{background:rgba(237,195,14,.85);color:#2a2e30}.toast.bg-green{background:rgba(33,185,120,.9)!important}.toast.bg-green .close,.toast.bg-green .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-green .toast-header{background:rgba(33,185,120,.85);color:#fff}.toast.bg-teal{background:rgba(32,201,151,.9)!important}.toast.bg-teal .close,.toast.bg-teal .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-teal .toast-header{background:rgba(32,201,151,.85);color:#fff}.toast.bg-cyan{background:rgba(115,103,240,.9)!important}.toast.bg-cyan .close,.toast.bg-cyan .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-cyan .toast-header{background:rgba(115,103,240,.85);color:#fff}.toast.bg-white{background:hsla(0,0%,100%,.9)!important}.toast.bg-white .toast-header{background:hsla(0,0%,100%,.85);color:#2a2e30}.toast.bg-gray{background:rgba(184,194,204,.9)!important}.toast.bg-gray .toast-header{background:rgba(184,194,204,.85);color:#2a2e30}.toast.bg-gray-dark{background:rgba(30,30,30,.9)!important}.toast.bg-gray-dark .close,.toast.bg-gray-dark .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-gray-dark .toast-header{background:rgba(30,30,30,.85);color:#fff}.btn{border-width:1px}.btn.disabled,.btn:disabled{cursor:not-allowed}.btn.btn-flat{border-radius:0;border-width:1px;box-shadow:none}.btn.btn-file{overflow:hidden;position:relative}.btn.btn-file>input[type=file]{background:#fff;cursor:inherit;display:block;font-size:100px;min-height:100%;min-width:100%;opacity:0;outline:none;position:absolute;right:0;text-align:right;top:0}.text-sm .btn{font-size:1rem!important}.btn-default{background-color:#babfc7;border-color:#babfc7;color:#444}.btn-default.hover,.btn-default:active,.btn-default:hover{background-color:#acb2bc;color:#2b2b2b}.btn-app{border-radius:3px;background-color:#babfc7;border:1px solid #ddd;color:#b8c2cc;font-size:12px;height:60px;margin:0 0 10px 10px;min-width:80px;padding:15px 5px;position:relative;text-align:center}.btn-app>.fa,.btn-app>.fab,.btn-app>.far,.btn-app>.fas,.btn-app>.glyphicon,.btn-app>.ion{display:block;font-size:20px}.btn-app:hover{background:#babfc7;border-color:#aaa;color:#444}.btn-app>.badge{font-size:10px;font-weight:400;position:absolute;right:-10px;top:-3px}.btn-xs{padding:.125rem .25rem;font-size:.75rem;border-radius:.15rem}.callout{border-radius:.5rem;background-color:#fff;border:1px solid #dae1e7;border-left:5px solid #ededed;margin-bottom:3rem;padding:1rem}.callout a{color:#4e5154;text-decoration:underline}.callout a:hover{color:#ededed}.callout p:last-child{margin-bottom:0}.callout.callout-danger{border-left-color:#e42728}.callout.callout-warning{border-left-color:#d28d29}.callout.callout-info{border-left-color:#2d5fb1}.callout.callout-success{border-left-color:#198e5c}.alert .icon{margin-right:10px}.alert .close,.alert .mailbox-attachment-close{color:#22292f;opacity:.2}.alert .close:hover,.alert .mailbox-attachment-close:hover{opacity:.5}.alert a{color:#fff;text-decoration:underline}.alert-primary{color:#2a2e30;background:#62a8ea;border-color:#4c9ce7}.alert-default-primary{color:#436b90;background-color:#e0eefb;border-color:#d3e7f9}.alert-default-primary hr{border-top-color:#bddbf6}.alert-default-primary .alert-link{color:#33516d}.alert-secondary{color:#2a2e30;background:#b8c2cc;border-color:#a9b5c1}.alert-default-secondary{color:#707981;background-color:#f1f3f5;border-color:#ebeef1}.alert-default-secondary hr{border-top-color:#dce1e7}.alert-default-secondary .alert-link{color:#585f66}.alert-success{color:#fff;background:#21b978;border-color:#1da36a}.alert-default-success{color:#217455;background-color:#d3f1e4;border-color:#c1ebd9}.alert-default-success hr{border-top-color:#aee5cd}.alert-default-success .alert-link{color:#164c38}.alert-info{color:#fff;background:#4277cf;border-color:#3269c5}.alert-default-info{color:#335282;background-color:#d9e4f5;border-color:#cad9f2}.alert-default-info hr{border-top-color:#b6caed}.alert-default-info .alert-link{color:#253b5d}.alert-warning{color:#2a2e30;background:#dda451;border-color:#d9993c}.alert-default-warning{color:#836941;background-color:#f8eddc;border-color:#f5e6ce}.alert-default-warning hr{border-top-color:#f1dbb9}.alert-default-warning .alert-link{color:#614e30}.alert-danger{color:#fff;background:#ea5455;border-color:#e73d3e}.alert-default-danger{color:#8a3f43;background-color:#fbdddd;border-color:#f9cfcf}.alert-default-danger hr{border-top-color:#f6b8b8}.alert-default-danger .alert-link{color:#672f32}.alert-light{color:#2a2e30;background:#f7f7f9;border-color:#e8e8ee}.alert-default-light{color:#919498;background-color:#fdfdfe;border-color:#fdfdfd}.alert-default-light hr{border-top-color:#f0f0f0}.alert-default-light .alert-link{color:#777a7f}.alert-dark{color:#fff;background:#22292f;border-color:#171c20}.alert-default-dark{color:#22292f;background-color:#d3d4d5;border-color:#c1c3c5}.alert-default-dark hr{border-top-color:#b4b6b9}.alert-default-dark .alert-link{color:#0d0f11}.table:not(.table-dark){color:inherit}.table.table-head-fixed thead tr:first-child th{background-color:#fff;border-bottom:0;box-shadow:inset 0 1px 0 #eff1f7,inset 0 -1px 0 #eff1f7;position:-webkit-sticky;position:sticky;top:0;z-index:10}.table.table-head-fixed.table-dark thead tr:first-child th{background-color:#1e1e1e;box-shadow:inset 0 1px 0 #313131,inset 0 -1px 0 #313131}.table.no-border,.table.no-border td,.table.no-border th{border:0}.table.text-center,.table.text-center td,.table.text-center th{text-align:center}.table.table-valign-middle tbody>tr>td,.table.table-valign-middle tbody>tr>th,.table.table-valign-middle thead>tr>td,.table.table-valign-middle thead>tr>th{vertical-align:middle}.card-body.p-0 .table tbody>tr>td:first-of-type,.card-body.p-0 .table tbody>tr>th:first-of-type,.card-body.p-0 .table thead>tr>td:first-of-type,.card-body.p-0 .table thead>tr>th:first-of-type{padding-left:3.5rem}.card-body.p-0 .table tbody>tr>td:last-of-type,.card-body.p-0 .table tbody>tr>th:last-of-type,.card-body.p-0 .table thead>tr>td:last-of-type,.card-body.p-0 .table thead>tr>th:last-of-type{padding-right:3.5rem}.carousel-control.left,.carousel-control.right{background-image:none}.carousel-control>.fa,.carousel-control>.fab,.carousel-control>.far,.carousel-control>.fas,.carousel-control>.glyphicon,.carousel-control>.ion{display:inline-block;font-size:40px;margin-top:-20px;position:absolute;top:50%;z-index:5}.small-box{border-radius:.5rem;display:block;margin-bottom:20px;position:relative}.small-box>.inner{padding:10px}.small-box>.small-box-footer{background:rgba(34,41,47,.1);color:hsla(0,0%,100%,.8);display:block;padding:3px 0;position:relative;text-align:center;text-decoration:none;z-index:10}.small-box>.small-box-footer:hover{background:rgba(34,41,47,.15);color:#fff}.small-box h3{font-size:2.2rem;font-weight:700;margin:0 0 10px;padding:0;white-space:nowrap}@media (min-width:992px){.col-lg-2 .small-box h3,.col-lg-3 .small-box h3,.col-md-2 .small-box h3,.col-md-3 .small-box h3,.col-xl-2 .small-box h3,.col-xl-3 .small-box h3{font-size:1.6rem}}@media (min-width:1200px){.col-lg-2 .small-box h3,.col-lg-3 .small-box h3,.col-md-2 .small-box h3,.col-md-3 .small-box h3,.col-xl-2 .small-box h3,.col-xl-3 .small-box h3{font-size:2.2rem}}.small-box p{font-size:1rem}.small-box p>small{color:#babfc7;display:block;font-size:.9rem;margin-top:5px}.small-box h3,.small-box p{z-index:5}.small-box .icon{color:rgba(34,41,47,.15);z-index:0}.small-box .icon>i{font-size:90px;position:absolute;right:15px;top:15px;transition:all .3s linear}.small-box .icon>i.fa,.small-box .icon>i.fab,.small-box .icon>i.far,.small-box .icon>i.fas,.small-box .icon>i.glyphicon,.small-box .icon>i.ion{font-size:70px;top:20px}.small-box:hover{text-decoration:none}.small-box:hover .icon>i{font-size:95px}.small-box:hover .icon>i.fa,.small-box:hover .icon>i.fab,.small-box:hover .icon>i.far,.small-box:hover .icon>i.fas,.small-box:hover .icon>i.glyphicon,.small-box:hover .icon>i.ion{font-size:75px}@media (max-width:767.98px){.small-box{text-align:center}.small-box .icon{display:none}.small-box p{font-size:12px}}.info-box{border-radius:.5rem;background:#fff;display:flex;margin-bottom:3rem;min-height:80px;padding:.5rem;position:relative}.info-box .progress{background-color:rgba(34,41,47,.125);height:2px;margin:5px 0}.info-box .progress .progress-bar{background-color:#fff}.info-box .info-box-icon{border-radius:.5rem;align-items:center;display:flex;font-size:1.875rem;justify-content:center;text-align:center;width:70px}.info-box .info-box-icon>img{max-width:100%}.info-box .info-box-content{flex:1;padding:5px 10px}.info-box .info-box-number{display:block;font-weight:700}.info-box .info-box-text,.info-box .progress-description{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.info-box .info-box .bg-gradient-primary,.info-box .info-box .bg-primary{color:#2a2e30}.info-box .info-box .bg-gradient-primary .progress-bar,.info-box .info-box .bg-primary .progress-bar{background-color:#2a2e30}.info-box .info-box .bg-gradient-secondary,.info-box .info-box .bg-secondary{color:#2a2e30}.info-box .info-box .bg-gradient-secondary .progress-bar,.info-box .info-box .bg-secondary .progress-bar{background-color:#2a2e30}.info-box .info-box .bg-gradient-success,.info-box .info-box .bg-success{color:#fff}.info-box .info-box .bg-gradient-success .progress-bar,.info-box .info-box .bg-success .progress-bar{background-color:#fff}.info-box .info-box .bg-gradient-info,.info-box .info-box .bg-info{color:#fff}.info-box .info-box .bg-gradient-info .progress-bar,.info-box .info-box .bg-info .progress-bar{background-color:#fff}.info-box .info-box .bg-gradient-warning,.info-box .info-box .bg-warning{color:#2a2e30}.info-box .info-box .bg-gradient-warning .progress-bar,.info-box .info-box .bg-warning .progress-bar{background-color:#2a2e30}.info-box .info-box .bg-danger,.info-box .info-box .bg-gradient-danger{color:#fff}.info-box .info-box .bg-danger .progress-bar,.info-box .info-box .bg-gradient-danger .progress-bar{background-color:#fff}.info-box .info-box .bg-gradient-light,.info-box .info-box .bg-light{color:#2a2e30}.info-box .info-box .bg-gradient-light .progress-bar,.info-box .info-box .bg-light .progress-bar{background-color:#2a2e30}.info-box .info-box .bg-dark,.info-box .info-box .bg-gradient-dark{color:#fff}.info-box .info-box .bg-dark .progress-bar,.info-box .info-box .bg-gradient-dark .progress-bar{background-color:#fff}.info-box .info-box-more{display:block}.info-box .progress-description{margin:0}@media (min-width:768px){.col-lg-2 .info-box .progress-description,.col-lg-3 .info-box .progress-description,.col-md-2 .info-box .progress-description,.col-md-3 .info-box .progress-description,.col-xl-2 .info-box .progress-description,.col-xl-3 .info-box .progress-description{display:none}}@media (min-width:992px){.col-lg-2 .info-box .progress-description,.col-lg-3 .info-box .progress-description,.col-md-2 .info-box .progress-description,.col-md-3 .info-box .progress-description,.col-xl-2 .info-box .progress-description,.col-xl-3 .info-box .progress-description{font-size:.75rem;display:block}}@media (min-width:1200px){.col-lg-2 .info-box .progress-description,.col-lg-3 .info-box .progress-description,.col-md-2 .info-box .progress-description,.col-md-3 .info-box .progress-description,.col-xl-2 .info-box .progress-description,.col-xl-3 .info-box .progress-description{font-size:1rem;display:block}}.timeline{margin:0 0 45px;padding:0;position:relative}.timeline:before{border-radius:.5rem;background:#dae1e7;bottom:0;content:"";left:31px;margin:0;position:absolute;top:0;width:4px}.timeline>div{margin-bottom:15px;margin-right:10px;position:relative}.timeline>div:after,.timeline>div:before{content:"";display:table}.timeline>div>.timeline-item{border-radius:.5rem;background:#fff;color:#4e5154;margin-left:60px;margin-right:15px;margin-top:0;padding:0;position:relative}.timeline>div>.timeline-item>.time{color:#999;float:right;font-size:12px;padding:10px}.timeline>div>.timeline-item>.timeline-header{border-bottom:1px solid rgba(34,41,47,.125);color:#4e5154;font-size:16px;line-height:1.1;margin:0;padding:10px}.timeline>div>.timeline-item>.timeline-header>a{font-weight:600}.timeline>div>.timeline-item>.timeline-body,.timeline>div>.timeline-item>.timeline-footer{padding:10px}.timeline>div>.timeline-item>.timeline-body>img{margin:10px}.timeline>div>.timeline-item>.timeline-body>dl,.timeline>div>.timeline-item>.timeline-body ol,.timeline>div>.timeline-item>.timeline-body ul{margin:0}.timeline>div>.timeline-item>.timeline-footer>a{color:#fff}.timeline>div>.fa,.timeline>div>.fab,.timeline>div>.far,.timeline>div>.fas,.timeline>div>.glyphicon,.timeline>div>.ion{background:#adb5bd;border-radius:50%;font-size:15px;height:30px;left:18px;line-height:30px;position:absolute;text-align:center;top:0;width:30px}.timeline>.time-label>span{border-radius:4px;background-color:#fff;display:inline-block;font-weight:600;padding:5px}.timeline-inverse>div>.timeline-item{background:#babfc7;border:1px solid #dae1e7}.timeline-inverse>div>.timeline-item>.timeline-header{border-bottom-color:#dae1e7}.products-list{list-style:none;margin:0;padding:0}.products-list>.item{border-radius:.5rem;background:#fff;padding:10px 0}.products-list>.item:after{display:block;clear:both;content:""}.products-list .product-img{float:left}.products-list .product-img img{height:50px;width:50px}.products-list .product-info{margin-left:60px}.products-list .product-title{font-weight:600}.products-list .product-description{color:#b8c2cc;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.product-list-in-card>.item{border-radius:0;border-bottom:1px solid rgba(34,41,47,.125)}.product-list-in-card>.item:last-of-type{border-bottom-width:0}.direct-chat .card-body{overflow-x:hidden;padding:0;position:relative}.direct-chat.chat-pane-open .direct-chat-contacts{transform:translate(0)}.direct-chat.timestamp-light .direct-chat-timestamp{color:#42484b}.direct-chat.timestamp-dark .direct-chat-timestamp{color:#ccc}.direct-chat-messages{transform:translate(0);height:250px;overflow:auto;padding:10px}.direct-chat-msg,.direct-chat-text{display:block}.direct-chat-msg{margin-bottom:10px}.direct-chat-msg:after{display:block;clear:both;content:""}.direct-chat-contacts,.direct-chat-messages{transition:transform .5s ease-in-out}.direct-chat-text{border-radius:.6rem;background:#d2d6de;border:1px solid #d2d6de;color:#444;margin:5px 0 0 50px;padding:5px 10px;position:relative}.direct-chat-text:after,.direct-chat-text:before{border:solid transparent;border-right:solid #d2d6de;content:" ";height:0;pointer-events:none;position:absolute;right:100%;top:15px;width:0}.direct-chat-text:after{border-width:5px;margin-top:-5px}.direct-chat-text:before{border-width:6px;margin-top:-6px}.right .direct-chat-text{margin-left:0;margin-right:50px}.right .direct-chat-text:after,.right .direct-chat-text:before{border-left-color:#d2d6de;border-right-color:transparent;left:100%;right:auto}.direct-chat-img{border-radius:50%;float:left;height:40px;width:40px}.right .direct-chat-img{float:right}.direct-chat-infos{display:block;font-size:1rem;margin-bottom:2px}.direct-chat-name{font-weight:600}.direct-chat-timestamp{color:#697582}.direct-chat-contacts-open .direct-chat-contacts{transform:translate(0)}.direct-chat-contacts{transform:translate(101%);background:#22292f;bottom:0;color:#fff;height:250px;overflow:auto;position:absolute;top:0;width:100%}.direct-chat-contacts-light{background:#f7f7f9}.direct-chat-contacts-light .contacts-list-name{color:#4e5154}.direct-chat-contacts-light .contacts-list-date{color:#b8c2cc}.direct-chat-contacts-light .contacts-list-msg{color:#9aa9b7}.contacts-list{padding-left:0;list-style:none}.contacts-list>li{border-bottom:1px solid rgba(34,41,47,.2);margin:0;padding:10px}.contacts-list>li:after{display:block;clear:both;content:""}.contacts-list>li:last-of-type{border-bottom:0}.contacts-list-img{border-radius:50%;float:left;width:40px}.contacts-list-info{color:#fff;margin-left:45px}.contacts-list-name,.contacts-list-status{display:block}.contacts-list-name{font-weight:600}.contacts-list-status{font-size:1rem}.contacts-list-date{color:#636363;font-weight:400}.contacts-list-msg{color:#4a4a4a}.direct-chat-primary .right>.direct-chat-text{background:#62a8ea;border-color:#62a8ea;color:#2a2e30}.direct-chat-primary .right>.direct-chat-text:after,.direct-chat-primary .right>.direct-chat-text:before{border-left-color:#62a8ea}.direct-chat-secondary .right>.direct-chat-text{background:#b8c2cc;border-color:#b8c2cc;color:#2a2e30}.direct-chat-secondary .right>.direct-chat-text:after,.direct-chat-secondary .right>.direct-chat-text:before{border-left-color:#b8c2cc}.direct-chat-success .right>.direct-chat-text{background:#21b978;border-color:#21b978;color:#fff}.direct-chat-success .right>.direct-chat-text:after,.direct-chat-success .right>.direct-chat-text:before{border-left-color:#21b978}.direct-chat-info .right>.direct-chat-text{background:#4277cf;border-color:#4277cf;color:#fff}.direct-chat-info .right>.direct-chat-text:after,.direct-chat-info .right>.direct-chat-text:before{border-left-color:#4277cf}.direct-chat-warning .right>.direct-chat-text{background:#dda451;border-color:#dda451;color:#2a2e30}.direct-chat-warning .right>.direct-chat-text:after,.direct-chat-warning .right>.direct-chat-text:before{border-left-color:#dda451}.direct-chat-danger .right>.direct-chat-text{background:#ea5455;border-color:#ea5455;color:#fff}.direct-chat-danger .right>.direct-chat-text:after,.direct-chat-danger .right>.direct-chat-text:before{border-left-color:#ea5455}.direct-chat-light .right>.direct-chat-text{background:#f7f7f9;border-color:#f7f7f9;color:#2a2e30}.direct-chat-light .right>.direct-chat-text:after,.direct-chat-light .right>.direct-chat-text:before{border-left-color:#f7f7f9}.direct-chat-dark .right>.direct-chat-text{background:#22292f;border-color:#22292f;color:#fff}.direct-chat-dark .right>.direct-chat-text:after,.direct-chat-dark .right>.direct-chat-text:before{border-left-color:#22292f}.direct-chat-lightblue .right>.direct-chat-text{background:#3c8dbc;border-color:#3c8dbc;color:#fff}.direct-chat-lightblue .right>.direct-chat-text:after,.direct-chat-lightblue .right>.direct-chat-text:before{border-left-color:#3c8dbc}.direct-chat-navy .right>.direct-chat-text{background:#001f3f;border-color:#001f3f;color:#fff}.direct-chat-navy .right>.direct-chat-text:after,.direct-chat-navy .right>.direct-chat-text:before{border-left-color:#001f3f}.direct-chat-olive .right>.direct-chat-text{background:#3d9970;border-color:#3d9970;color:#fff}.direct-chat-olive .right>.direct-chat-text:after,.direct-chat-olive .right>.direct-chat-text:before{border-left-color:#3d9970}.direct-chat-lime .right>.direct-chat-text{background:#01ff70;border-color:#01ff70;color:#2a2e30}.direct-chat-lime .right>.direct-chat-text:after,.direct-chat-lime .right>.direct-chat-text:before{border-left-color:#01ff70}.direct-chat-fuchsia .right>.direct-chat-text{background:#f012be;border-color:#f012be;color:#fff}.direct-chat-fuchsia .right>.direct-chat-text:after,.direct-chat-fuchsia .right>.direct-chat-text:before{border-left-color:#f012be}.direct-chat-maroon .right>.direct-chat-text{background:#d81b60;border-color:#d81b60;color:#fff}.direct-chat-maroon .right>.direct-chat-text:after,.direct-chat-maroon .right>.direct-chat-text:before{border-left-color:#d81b60}.direct-chat-blue .right>.direct-chat-text{background:#3085d6;border-color:#3085d6;color:#fff}.direct-chat-blue .right>.direct-chat-text:after,.direct-chat-blue .right>.direct-chat-text:before{border-left-color:#3085d6}.direct-chat-indigo .right>.direct-chat-text{background:#5c6bc6;border-color:#5c6bc6;color:#fff}.direct-chat-indigo .right>.direct-chat-text:after,.direct-chat-indigo .right>.direct-chat-text:before{border-left-color:#5c6bc6}.direct-chat-purple .right>.direct-chat-text{background:#6f42c1;border-color:#6f42c1;color:#fff}.direct-chat-purple .right>.direct-chat-text:after,.direct-chat-purple .right>.direct-chat-text:before{border-left-color:#6f42c1}.direct-chat-pink .right>.direct-chat-text{background:#ff8acc;border-color:#ff8acc;color:#2a2e30}.direct-chat-pink .right>.direct-chat-text:after,.direct-chat-pink .right>.direct-chat-text:before{border-left-color:#ff8acc}.direct-chat-red .right>.direct-chat-text{background:#ea5455;border-color:#ea5455;color:#fff}.direct-chat-red .right>.direct-chat-text:after,.direct-chat-red .right>.direct-chat-text:before{border-left-color:#ea5455}.direct-chat-orange .right>.direct-chat-text{background:#dda451;border-color:#dda451;color:#2a2e30}.direct-chat-orange .right>.direct-chat-text:after,.direct-chat-orange .right>.direct-chat-text:before{border-left-color:#dda451}.direct-chat-yellow .right>.direct-chat-text{background:#edc30e;border-color:#edc30e;color:#2a2e30}.direct-chat-yellow .right>.direct-chat-text:after,.direct-chat-yellow .right>.direct-chat-text:before{border-left-color:#edc30e}.direct-chat-green .right>.direct-chat-text{background:#21b978;border-color:#21b978;color:#fff}.direct-chat-green .right>.direct-chat-text:after,.direct-chat-green .right>.direct-chat-text:before{border-left-color:#21b978}.direct-chat-teal .right>.direct-chat-text{background:#20c997;border-color:#20c997;color:#fff}.direct-chat-teal .right>.direct-chat-text:after,.direct-chat-teal .right>.direct-chat-text:before{border-left-color:#20c997}.direct-chat-cyan .right>.direct-chat-text{background:#7367f0;border-color:#7367f0;color:#fff}.direct-chat-cyan .right>.direct-chat-text:after,.direct-chat-cyan .right>.direct-chat-text:before{border-left-color:#7367f0}.direct-chat-white .right>.direct-chat-text{background:#fff;border-color:#fff;color:#2a2e30}.direct-chat-white .right>.direct-chat-text:after,.direct-chat-white .right>.direct-chat-text:before{border-left-color:#fff}.direct-chat-gray .right>.direct-chat-text{background:#b8c2cc;border-color:#b8c2cc;color:#2a2e30}.direct-chat-gray .right>.direct-chat-text:after,.direct-chat-gray .right>.direct-chat-text:before{border-left-color:#b8c2cc}.direct-chat-gray-dark .right>.direct-chat-text{background:#1e1e1e;border-color:#1e1e1e;color:#fff}.direct-chat-gray-dark .right>.direct-chat-text:after,.direct-chat-gray-dark .right>.direct-chat-text:before{border-left-color:#1e1e1e}.users-list{padding-left:0;list-style:none}.users-list>li{float:left;padding:10px;text-align:center;width:25%}.users-list>li img{border-radius:50%;height:auto;max-width:100%}.users-list>li>a:hover,.users-list>li>a:hover .users-list-name{color:#999}.users-list-date,.users-list-name{display:block}.users-list-name{color:#4e5154;font-size:1rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.users-list-date{color:#748290;font-size:12px}.card-widget{border:0;position:relative}.widget-user .widget-user-header{border-top-left-radius:.5rem;border-top-right-radius:.5rem;height:135px;padding:1rem;text-align:center}.widget-user .widget-user-username{font-size:25px;font-weight:300;margin-bottom:0;margin-top:0;text-shadow:0 1px 1px rgba(34,41,47,.2)}.widget-user .widget-user-desc{margin-top:0}.widget-user .widget-user-image{left:50%;margin-left:-45px;position:absolute;top:80px}.widget-user .widget-user-image>img{border:3px solid #fff;height:auto;width:90px}.widget-user .card-footer{padding-top:50px}.widget-user-2 .widget-user-header{border-top-left-radius:.5rem;border-top-right-radius:.5rem;padding:1rem}.widget-user-2 .widget-user-username{font-size:25px;font-weight:300;margin-bottom:5px;margin-top:5px}.widget-user-2 .widget-user-desc{margin-top:0}.widget-user-2 .widget-user-desc,.widget-user-2 .widget-user-username{margin-left:75px}.widget-user-2 .widget-user-image>img{float:left;height:auto;width:65px}.mailbox-messages>.table{margin:0}.mailbox-controls{padding:5px}.mailbox-controls.with-border,.mailbox-read-info{border-bottom:1px solid rgba(34,41,47,.125)}.mailbox-read-info{padding:10px}.mailbox-read-info h3{font-size:20px;margin:0}.mailbox-read-info h5{margin:0;padding:5px 0 0}.mailbox-read-time{color:#999;font-size:13px}.mailbox-read-message{padding:10px}.mailbox-attachments{padding-left:0;list-style:none}.mailbox-attachments li{border:1px solid #eee;float:left;margin-bottom:10px;margin-right:10px;width:200px}.mailbox-attachment-name{color:#666;font-weight:700}.mailbox-attachment-icon,.mailbox-attachment-info,.mailbox-attachment-size{display:block}.mailbox-attachment-info{background:#babfc7;padding:10px}.mailbox-attachment-size{color:#999;font-size:12px}.mailbox-attachment-size>span{display:inline-block;padding-top:.75rem}.mailbox-attachment-icon{color:#666;font-size:65px;max-height:132.5px;padding:20px 10px;text-align:center}.mailbox-attachment-icon.has-img{padding:0}.mailbox-attachment-icon.has-img>img{height:auto;max-width:100%}.lockscreen{background:#ededed}.lockscreen .lockscreen-name{font-weight:600;text-align:center}.lockscreen-logo{font-size:35px;font-weight:300;margin-bottom:25px;text-align:center}.lockscreen-logo a{color:#4e5154}.lockscreen-wrapper{margin:10% auto 0;max-width:400px}.lockscreen-item{border-radius:4px;background:#fff;margin:10px auto 30px;padding:0;position:relative;width:290px}.lockscreen-image{border-radius:50%;background:#fff;left:-10px;padding:5px;position:absolute;top:-25px;z-index:10}.lockscreen-image>img{border-radius:50%;height:70px;width:70px}.lockscreen-credentials{margin-left:70px}.lockscreen-credentials .form-control{border:0}.lockscreen-credentials .btn{background-color:#fff;border:0;padding:0 10px}.lockscreen-footer{margin-top:10px}.login-logo,.register-logo{font-size:2.1rem;font-weight:300;margin-bottom:.9rem;text-align:center}.login-logo a,.register-logo a{color:#4e5154}.login-page,.register-page{align-items:center;background:#ededed;display:flex;flex-direction:column;height:100vh;justify-content:center}.login-box,.register-box{width:360px}@media (max-width:576px){.login-box,.register-box{margin-top:.5rem;width:90%}}.login-card-body,.register-card-body{background:#fff;border-top:0;color:#666;padding:20px}.login-card-body .input-group .form-control,.register-card-body .input-group .form-control{border-right:0}.login-card-body .input-group .form-control:focus,.register-card-body .input-group .form-control:focus{box-shadow:none}.login-card-body .input-group .form-control:focus~.input-group-append .input-group-text,.register-card-body .input-group .form-control:focus~.input-group-append .input-group-text{border-color:#62a8ea}.login-card-body .input-group .form-control.is-valid:focus,.register-card-body .input-group .form-control.is-valid:focus{box-shadow:none}.login-card-body .input-group .form-control.is-valid~.input-group-append .input-group-text,.register-card-body .input-group .form-control.is-valid~.input-group-append .input-group-text{border-color:#21b978}.login-card-body .input-group .form-control.is-invalid:focus,.register-card-body .input-group .form-control.is-invalid:focus{box-shadow:none}.login-card-body .input-group .form-control.is-invalid~.input-group-append .input-group-text,.register-card-body .input-group .form-control.is-invalid~.input-group-append .input-group-text{border-color:#ea5455}.login-card-body .input-group .input-group-text,.register-card-body .input-group .input-group-text{background-color:transparent;border-bottom-right-radius:.5rem;border-left:0;border-top-right-radius:.5rem;color:#777;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.login-box-msg,.register-box-msg{margin:0;padding:0 20px 20px;text-align:center}.social-auth-links{margin:10px 0}.error-page{margin:20px auto 0;width:600px}@media (max-width:767.98px){.error-page{width:100%}}.error-page>.headline{float:left;font-size:100px;font-weight:300}@media (max-width:767.98px){.error-page>.headline{float:none;text-align:center}}.error-page>.error-content{display:block;margin-left:190px}@media (max-width:767.98px){.error-page>.error-content{margin-left:0}}.error-page>.error-content>h3{font-size:25px;font-weight:300}@media (max-width:767.98px){.error-page>.error-content>h3{text-align:center}}.invoice{background:#fff;border:1px solid rgba(34,41,47,.125);position:relative}.invoice-title{margin-top:0}.profile-user-img{border:3px solid #adb5bd;margin:0 auto;padding:3px;width:100px}.profile-username{font-size:21px;margin-top:5px}.post{border-bottom:1px solid #adb5bd;color:#666;margin-bottom:15px;padding-bottom:15px}.post:last-of-type{border-bottom:0;margin-bottom:0;padding-bottom:0}.post .user-block{margin-bottom:15px;width:100%}.post .row{width:100%}.product-image{max-width:100%;height:auto;width:100%}.product-image-thumbs{align-items:stretch;display:flex;margin-top:2rem}.product-image-thumb{border-radius:.5rem;background-color:#eff1f7;border:1px solid #dae1e7;display:flex;margin-right:1rem;max-width:7rem;padding:.5rem}.product-image-thumb img{max-width:100%;height:auto;align-self:center}.product-image-thumb:hover{opacity:.5}.product-share a{margin-right:.5rem}.projects td{vertical-align:middle}.projects .list-inline{margin-bottom:0}.projects .table-avatar img,.projects img.table-avatar{border-radius:50%;display:inline;width:2.5rem}.projects .project-state{text-align:center}.fc-button{background:#babfc7;background-image:none;border-color:#ddd;color:#4e5154}.fc-button.hover,.fc-button:active,.fc-button:hover{background-color:#e9e9e9}.fc-header-title h2{color:#666;font-size:15px;line-height:1.6em;margin-left:10px}.fc-header-right{padding-right:10px}.fc-header-left{padding-left:10px}.fc-widget-header{background:#fafafa}.fc-grid{border:0;width:100%}.fc-widget-content:first-of-type,.fc-widget-header:first-of-type{border-left:0;border-right:0}.fc-widget-content:last-of-type,.fc-widget-header:last-of-type{border-right:0}.fc-toolbar,.fc-toolbar.fc-header-toolbar{margin:0;padding:1rem}@media (max-width:575.98px){.fc-toolbar{flex-direction:column}.fc-toolbar .fc-left{order:1;margin-bottom:.5rem}.fc-toolbar .fc-center{order:0;margin-bottom:.375rem}.fc-toolbar .fc-right{order:2}}.fc-day-number{font-size:20px;font-weight:300;padding-right:10px}.fc-color-picker{list-style:none;margin:0;padding:0}.fc-color-picker>li{float:left;font-size:30px;line-height:30px;margin-right:5px}.fc-color-picker>li .fa,.fc-color-picker>li .fab,.fc-color-picker>li .far,.fc-color-picker>li .fas,.fc-color-picker>li .glyphicon,.fc-color-picker>li .ion{transition:transform .3s linear}.fc-color-picker>li .fa:hover,.fc-color-picker>li .fab:hover,.fc-color-picker>li .far:hover,.fc-color-picker>li .fas:hover,.fc-color-picker>li .glyphicon:hover,.fc-color-picker>li .ion:hover{transform:rotate(30deg)}#add-new-event{transition:all .3s linear}.external-event{border-radius:.5rem;cursor:move;font-weight:700;margin-bottom:4px;padding:5px 10px}.select2-container--default .select2-selection--single{border:1px solid rgba(0,0,0,.2);padding:.875rem .7rem;height:34px}.select2-container--default.select2-container--open .select2-selection--single{border-color:#d2e6f9}.select2-container--default .select2-dropdown{border:1px solid rgba(0,0,0,.2)}.select2-container--default .select2-results__option{padding:6px 12px;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-user-select:none}.select2-container--default .select2-selection--single .select2-selection__rendered{padding-left:0;height:auto;margin-top:-3px}.select2-container--default[dir=rtl] .select2-selection--single .select2-selection__rendered{padding-right:6px;padding-left:20px}.select2-container--default .select2-selection--single .select2-selection__arrow{height:31px;right:6px}.select2-container--default .select2-selection--single .select2-selection__arrow b{margin-top:0}.select2-container--default .select2-dropdown .select2-search__field,.select2-container--default .select2-search--inline .select2-search__field{border:1px solid rgba(0,0,0,.2)}.select2-container--default .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-search--inline .select2-search__field:focus{outline:none;border:1px solid #62a8ea}.select2-container--default .select2-dropdown.select2-dropdown--below{border-top:0}.select2-container--default .select2-dropdown.select2-dropdown--above{border-bottom:0}.select2-container--default .select2-results__option[aria-disabled=true]{color:#b8c2cc}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#dae1e7}.select2-container--default .select2-results__option[aria-selected=true],.select2-container--default .select2-results__option[aria-selected=true]:hover{color:#2a2e30}.select2-container--default .select2-results__option--highlighted{background-color:#62a8ea;color:#2a2e30}.select2-container--default .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#55a1e8;color:#fff}.select2-container--default .select2-selection--multiple{border:1px solid rgba(0,0,0,.2);min-height:34px}.select2-container--default .select2-selection--multiple:focus{border-color:#62a8ea}.select2-container--default .select2-selection--multiple .select2-selection__rendered{padding:0 .35rem .7rem;margin-bottom:-.35rem}.select2-container--default .select2-selection--multiple .select2-selection__rendered li:first-child.select2-search.select2-search--inline{width:100%;margin-left:.35rem}.select2-container--default .select2-selection--multiple .select2-selection__rendered li:first-child.select2-search.select2-search--inline .select2-search__field{width:100%!important}.select2-container--default .select2-selection--multiple .select2-selection__rendered .select2-search.select2-search--inline .select2-search__field{border:0;margin-top:6px}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#62a8ea;border-color:#4c9ce7;color:#2a2e30;padding:0 10px;margin-top:.31rem}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7);float:right;margin-left:5px;margin-right:-2px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-selection--multiple.text-sm .select2-search.select2-search--inline .select2-search__field,.text-sm .select2-container--default .select2-selection--multiple .select2-search.select2-search--inline .select2-search__field{margin-top:8px}.select2-container--default .select2-selection--multiple.text-sm .select2-selection__choice,.text-sm .select2-container--default .select2-selection--multiple .select2-selection__choice{margin-top:.4rem}.select2-container--default.select2-container--focus .select2-selection--multiple,.select2-container--default.select2-container--focus .select2-selection--single{border-color:#62a8ea}.select2-container--default.select2-container--focus .select2-search__field{border:0}.select2-container--default .select2-selection--single .select2-selection__rendered li{padding-right:10px}.input-group-prepend~.select2-container--default .select2-selection{border-bottom-left-radius:0;border-top-left-radius:0}.input-group>.select2-container--default:not(:last-child) .select2-selection{border-bottom-right-radius:0;border-top-right-radius:0}.select2-container--bootstrap4.select2-container--focus .select2-selection{box-shadow:none}select.form-control-sm~.select2-container--default{font-size:1rem}.text-sm .select2-container--default .select2-selection--single,select.form-control-sm~.select2-container--default .select2-selection--single{height:2rem}.text-sm .select2-container--default .select2-selection--single .select2-selection__rendered,select.form-control-sm~.select2-container--default .select2-selection--single .select2-selection__rendered{margin-top:-.4rem}.text-sm .select2-container--default .select2-selection--single .select2-selection__arrow,select.form-control-sm~.select2-container--default .select2-selection--single .select2-selection__arrow{top:-.12rem}.text-sm .select2-container--default .select2-selection--multiple,select.form-control-sm~.select2-container--default .select2-selection--multiple{min-height:2rem}.text-sm .select2-container--default .select2-selection--multiple .select2-selection__rendered,select.form-control-sm~.select2-container--default .select2-selection--multiple .select2-selection__rendered{padding:0 .75rem .5rem;margin-top:-.3rem}.text-sm .select2-container--default .select2-selection--multiple .select2-selection__rendered li:first-child.select2-search.select2-search--inline,select.form-control-sm~.select2-container--default .select2-selection--multiple .select2-selection__rendered li:first-child.select2-search.select2-search--inline{margin-left:.75rem}.text-sm .select2-container--default .select2-selection--multiple .select2-selection__rendered .select2-search.select2-search--inline .select2-search__field,select.form-control-sm~.select2-container--default .select2-selection--multiple .select2-selection__rendered .select2-search.select2-search--inline .select2-search__field{margin-top:6px}.select2-primary+.select2-container--default.select2-container--focus .select2-selection--single,.select2-primary+.select2-container--default.select2-container--open .select2-selection--single{border-color:#d2e6f9}.select2-container--default .select2-primary.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-primary .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-primary .select2-search--inline .select2-search__field:focus,.select2-primary .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-primary .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-primary .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #d2e6f9}.select2-container--default .select2-primary .select2-results__option--highlighted,.select2-primary .select2-container--default .select2-results__option--highlighted{background-color:#62a8ea;color:#2a2e30}.select2-container--default .select2-primary .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-primary .select2-results__option--highlighted[aria-selected]:hover,.select2-primary .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-primary .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#55a1e8;color:#fff}.select2-container--default .select2-primary .select2-selection--multiple:focus,.select2-primary .select2-container--default .select2-selection--multiple:focus{border-color:#d2e6f9}.select2-container--default .select2-primary .select2-selection--multiple .select2-selection__choice,.select2-primary .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#62a8ea;border-color:#4c9ce7;color:#2a2e30}.select2-container--default .select2-primary .select2-selection--multiple .select2-selection__choice__remove,.select2-primary .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:rgba(42,46,48,.7)}.select2-container--default .select2-primary .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-primary .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#2a2e30}.select2-container--default .select2-primary.select2-container--focus .select2-selection--multiple,.select2-primary .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#d2e6f9}.select2-secondary+.select2-container--default.select2-container--focus .select2-selection--single,.select2-secondary+.select2-container--default.select2-container--open .select2-selection--single{border-color:#fff}.select2-container--default .select2-secondary.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-secondary .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-secondary .select2-search--inline .select2-search__field:focus,.select2-secondary .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-secondary .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-secondary .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #fff}.select2-container--default .select2-secondary .select2-results__option--highlighted,.select2-secondary .select2-container--default .select2-results__option--highlighted{background-color:#b8c2cc;color:#2a2e30}.select2-container--default .select2-secondary .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-secondary .select2-results__option--highlighted[aria-selected]:hover,.select2-secondary .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-secondary .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#afbac6;color:#2a2e30}.select2-container--default .select2-secondary .select2-selection--multiple:focus,.select2-secondary .select2-container--default .select2-selection--multiple:focus{border-color:#fff}.select2-container--default .select2-secondary .select2-selection--multiple .select2-selection__choice,.select2-secondary .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#b8c2cc;border-color:#a9b5c1;color:#2a2e30}.select2-container--default .select2-secondary .select2-selection--multiple .select2-selection__choice__remove,.select2-secondary .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:rgba(42,46,48,.7)}.select2-container--default .select2-secondary .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-secondary .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#2a2e30}.select2-container--default .select2-secondary.select2-container--focus .select2-selection--multiple,.select2-secondary .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#fff}.select2-success+.select2-container--default.select2-container--focus .select2-selection--single,.select2-success+.select2-container--default.select2-container--open .select2-selection--single{border-color:#73e6b5}.select2-container--default .select2-success.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-success .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-success .select2-search--inline .select2-search__field:focus,.select2-success .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-success .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-success .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #73e6b5}.select2-container--default .select2-success .select2-results__option--highlighted,.select2-success .select2-container--default .select2-results__option--highlighted{background-color:#21b978;color:#fff}.select2-container--default .select2-success .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-success .select2-results__option--highlighted[aria-selected]:hover,.select2-success .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-success .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#1fac70;color:#fff}.select2-container--default .select2-success .select2-selection--multiple:focus,.select2-success .select2-container--default .select2-selection--multiple:focus{border-color:#73e6b5}.select2-container--default .select2-success .select2-selection--multiple .select2-selection__choice,.select2-success .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#21b978;border-color:#1da36a;color:#fff}.select2-container--default .select2-success .select2-selection--multiple .select2-selection__choice__remove,.select2-success .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-success .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-success .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-success.select2-container--focus .select2-selection--multiple,.select2-success .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#73e6b5}.select2-info+.select2-container--default.select2-container--focus .select2-selection--single,.select2-info+.select2-container--default.select2-container--open .select2-selection--single{border-color:#a8c0e9}.select2-container--default .select2-info.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-info .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-info .select2-search--inline .select2-search__field:focus,.select2-info .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-info .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-info .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #a8c0e9}.select2-container--default .select2-info .select2-results__option--highlighted,.select2-info .select2-container--default .select2-results__option--highlighted{background-color:#4277cf;color:#fff}.select2-container--default .select2-info .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-info .select2-results__option--highlighted[aria-selected]:hover,.select2-info .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-info .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#366ecc;color:#fff}.select2-container--default .select2-info .select2-selection--multiple:focus,.select2-info .select2-container--default .select2-selection--multiple:focus{border-color:#a8c0e9}.select2-container--default .select2-info .select2-selection--multiple .select2-selection__choice,.select2-info .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#4277cf;border-color:#3269c5;color:#fff}.select2-container--default .select2-info .select2-selection--multiple .select2-selection__choice__remove,.select2-info .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-info .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-info .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-info.select2-container--focus .select2-selection--multiple,.select2-info .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#a8c0e9}.select2-warning+.select2-container--default.select2-container--focus .select2-selection--single,.select2-warning+.select2-container--default.select2-container--open .select2-selection--single{border-color:#f2dcbc}.select2-container--default .select2-warning.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-warning .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-warning .select2-search--inline .select2-search__field:focus,.select2-warning .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-warning .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-warning .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #f2dcbc}.select2-container--default .select2-warning .select2-results__option--highlighted,.select2-warning .select2-container--default .select2-results__option--highlighted{background-color:#dda451;color:#2a2e30}.select2-container--default .select2-warning .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-warning .select2-results__option--highlighted[aria-selected]:hover,.select2-warning .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-warning .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#da9d44;color:#2a2e30}.select2-container--default .select2-warning .select2-selection--multiple:focus,.select2-warning .select2-container--default .select2-selection--multiple:focus{border-color:#f2dcbc}.select2-container--default .select2-warning .select2-selection--multiple .select2-selection__choice,.select2-warning .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#dda451;border-color:#d9993c;color:#2a2e30}.select2-container--default .select2-warning .select2-selection--multiple .select2-selection__choice__remove,.select2-warning .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:rgba(42,46,48,.7)}.select2-container--default .select2-warning .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-warning .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#2a2e30}.select2-container--default .select2-warning.select2-container--focus .select2-selection--multiple,.select2-warning .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#f2dcbc}.select2-danger+.select2-container--default.select2-container--focus .select2-selection--single,.select2-danger+.select2-container--default.select2-container--open .select2-selection--single{border-color:#f8c6c6}.select2-container--default .select2-danger.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-danger .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-danger .select2-search--inline .select2-search__field:focus,.select2-danger .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-danger .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-danger .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #f8c6c6}.select2-container--default .select2-danger .select2-results__option--highlighted,.select2-danger .select2-container--default .select2-results__option--highlighted{background-color:#ea5455;color:#fff}.select2-container--default .select2-danger .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-danger .select2-results__option--highlighted[aria-selected]:hover,.select2-danger .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-danger .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#e84647;color:#fff}.select2-container--default .select2-danger .select2-selection--multiple:focus,.select2-danger .select2-container--default .select2-selection--multiple:focus{border-color:#f8c6c6}.select2-container--default .select2-danger .select2-selection--multiple .select2-selection__choice,.select2-danger .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#ea5455;border-color:#e73d3e;color:#fff}.select2-container--default .select2-danger .select2-selection--multiple .select2-selection__choice__remove,.select2-danger .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-danger .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-danger .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-danger.select2-container--focus .select2-selection--multiple,.select2-danger .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#f8c6c6}.select2-light+.select2-container--default.select2-container--focus .select2-selection--single,.select2-light+.select2-container--default.select2-container--open .select2-selection--single{border-color:#fff}.select2-container--default .select2-light.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-light .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-light .select2-search--inline .select2-search__field:focus,.select2-light .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-light .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-light .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #fff}.select2-container--default .select2-light .select2-results__option--highlighted,.select2-light .select2-container--default .select2-results__option--highlighted{background-color:#f7f7f9;color:#2a2e30}.select2-container--default .select2-light .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-light .select2-results__option--highlighted[aria-selected]:hover,.select2-light .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-light .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#eeeef2;color:#2a2e30}.select2-container--default .select2-light .select2-selection--multiple:focus,.select2-light .select2-container--default .select2-selection--multiple:focus{border-color:#fff}.select2-container--default .select2-light .select2-selection--multiple .select2-selection__choice,.select2-light .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#f7f7f9;border-color:#e8e8ee;color:#2a2e30}.select2-container--default .select2-light .select2-selection--multiple .select2-selection__choice__remove,.select2-light .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:rgba(42,46,48,.7)}.select2-container--default .select2-light .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-light .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#2a2e30}.select2-container--default .select2-light.select2-container--focus .select2-selection--multiple,.select2-light .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#fff}.select2-dark+.select2-container--default.select2-container--focus .select2-selection--single,.select2-dark+.select2-container--default.select2-container--open .select2-selection--single{border-color:#586a79}.select2-container--default .select2-dark.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-dark .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-dark .select2-search--inline .select2-search__field:focus,.select2-dark .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-dark .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-dark .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #586a79}.select2-container--default .select2-dark .select2-results__option--highlighted,.select2-dark .select2-container--default .select2-results__option--highlighted{background-color:#22292f;color:#fff}.select2-container--default .select2-dark .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-dark .select2-results__option--highlighted[aria-selected]:hover,.select2-dark .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-dark .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#1c2126;color:#fff}.select2-container--default .select2-dark .select2-selection--multiple:focus,.select2-dark .select2-container--default .select2-selection--multiple:focus{border-color:#586a79}.select2-container--default .select2-dark .select2-selection--multiple .select2-selection__choice,.select2-dark .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#22292f;border-color:#171c20;color:#fff}.select2-container--default .select2-dark .select2-selection--multiple .select2-selection__choice__remove,.select2-dark .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-dark .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-dark .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-dark.select2-container--focus .select2-selection--multiple,.select2-dark .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#586a79}.select2-lightblue+.select2-container--default.select2-container--focus .select2-selection--single,.select2-lightblue+.select2-container--default.select2-container--open .select2-selection--single{border-color:#99c5de}.select2-container--default .select2-lightblue.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-lightblue .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-lightblue .select2-search--inline .select2-search__field:focus,.select2-lightblue .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-lightblue .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-lightblue .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #99c5de}.select2-container--default .select2-lightblue .select2-results__option--highlighted,.select2-lightblue .select2-container--default .select2-results__option--highlighted{background-color:#3c8dbc;color:#fff}.select2-container--default .select2-lightblue .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-lightblue .select2-results__option--highlighted[aria-selected]:hover,.select2-lightblue .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-lightblue .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#3884b0;color:#fff}.select2-container--default .select2-lightblue .select2-selection--multiple:focus,.select2-lightblue .select2-container--default .select2-selection--multiple:focus{border-color:#99c5de}.select2-container--default .select2-lightblue .select2-selection--multiple .select2-selection__choice,.select2-lightblue .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#3c8dbc;border-color:#367fa9;color:#fff}.select2-container--default .select2-lightblue .select2-selection--multiple .select2-selection__choice__remove,.select2-lightblue .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-lightblue .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-lightblue .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-lightblue.select2-container--focus .select2-selection--multiple,.select2-lightblue .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#99c5de}.select2-navy+.select2-container--default.select2-container--focus .select2-selection--single,.select2-navy+.select2-container--default.select2-container--open .select2-selection--single{border-color:#005ebf}.select2-container--default .select2-navy.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-navy .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-navy .select2-search--inline .select2-search__field:focus,.select2-navy .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-navy .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-navy .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #005ebf}.select2-container--default .select2-navy .select2-results__option--highlighted,.select2-navy .select2-container--default .select2-results__option--highlighted{background-color:#001f3f;color:#fff}.select2-container--default .select2-navy .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-navy .select2-results__option--highlighted[aria-selected]:hover,.select2-navy .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-navy .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#001730;color:#fff}.select2-container--default .select2-navy .select2-selection--multiple:focus,.select2-navy .select2-container--default .select2-selection--multiple:focus{border-color:#005ebf}.select2-container--default .select2-navy .select2-selection--multiple .select2-selection__choice,.select2-navy .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#001f3f;border-color:#001226;color:#fff}.select2-container--default .select2-navy .select2-selection--multiple .select2-selection__choice__remove,.select2-navy .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-navy .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-navy .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-navy.select2-container--focus .select2-selection--multiple,.select2-navy .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#005ebf}.select2-olive+.select2-container--default.select2-container--focus .select2-selection--single,.select2-olive+.select2-container--default.select2-container--open .select2-selection--single{border-color:#87cfaf}.select2-container--default .select2-olive.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-olive .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-olive .select2-search--inline .select2-search__field:focus,.select2-olive .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-olive .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-olive .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #87cfaf}.select2-container--default .select2-olive .select2-results__option--highlighted,.select2-olive .select2-container--default .select2-results__option--highlighted{background-color:#3d9970;color:#fff}.select2-container--default .select2-olive .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-olive .select2-results__option--highlighted[aria-selected]:hover,.select2-olive .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-olive .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#398e68;color:#fff}.select2-container--default .select2-olive .select2-selection--multiple:focus,.select2-olive .select2-container--default .select2-selection--multiple:focus{border-color:#87cfaf}.select2-container--default .select2-olive .select2-selection--multiple .select2-selection__choice,.select2-olive .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#3d9970;border-color:#368763;color:#fff}.select2-container--default .select2-olive .select2-selection--multiple .select2-selection__choice__remove,.select2-olive .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-olive .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-olive .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-olive.select2-container--focus .select2-selection--multiple,.select2-olive .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#87cfaf}.select2-lime+.select2-container--default.select2-container--focus .select2-selection--single,.select2-lime+.select2-container--default.select2-container--open .select2-selection--single{border-color:#81ffb8}.select2-container--default .select2-lime.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-lime .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-lime .select2-search--inline .select2-search__field:focus,.select2-lime .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-lime .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-lime .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #81ffb8}.select2-container--default .select2-lime .select2-results__option--highlighted,.select2-lime .select2-container--default .select2-results__option--highlighted{background-color:#01ff70;color:#2a2e30}.select2-container--default .select2-lime .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-lime .select2-results__option--highlighted[aria-selected]:hover,.select2-lime .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-lime .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#00f169;color:#2a2e30}.select2-container--default .select2-lime .select2-selection--multiple:focus,.select2-lime .select2-container--default .select2-selection--multiple:focus{border-color:#81ffb8}.select2-container--default .select2-lime .select2-selection--multiple .select2-selection__choice,.select2-lime .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#01ff70;border-color:#00e765;color:#2a2e30}.select2-container--default .select2-lime .select2-selection--multiple .select2-selection__choice__remove,.select2-lime .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:rgba(42,46,48,.7)}.select2-container--default .select2-lime .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-lime .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#2a2e30}.select2-container--default .select2-lime.select2-container--focus .select2-selection--multiple,.select2-lime .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#81ffb8}.select2-fuchsia+.select2-container--default.select2-container--focus .select2-selection--single,.select2-fuchsia+.select2-container--default.select2-container--open .select2-selection--single{border-color:#f88adf}.select2-container--default .select2-fuchsia.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-fuchsia .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-fuchsia .select2-search--inline .select2-search__field:focus,.select2-fuchsia .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-fuchsia .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-fuchsia .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #f88adf}.select2-container--default .select2-fuchsia .select2-results__option--highlighted,.select2-fuchsia .select2-container--default .select2-results__option--highlighted{background-color:#f012be;color:#fff}.select2-container--default .select2-fuchsia .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-fuchsia .select2-results__option--highlighted[aria-selected]:hover,.select2-fuchsia .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-fuchsia .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#e40eb4;color:#fff}.select2-container--default .select2-fuchsia .select2-selection--multiple:focus,.select2-fuchsia .select2-container--default .select2-selection--multiple:focus{border-color:#f88adf}.select2-container--default .select2-fuchsia .select2-selection--multiple .select2-selection__choice,.select2-fuchsia .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#f012be;border-color:#db0ead;color:#fff}.select2-container--default .select2-fuchsia .select2-selection--multiple .select2-selection__choice__remove,.select2-fuchsia .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-fuchsia .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-fuchsia .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-fuchsia.select2-container--focus .select2-selection--multiple,.select2-fuchsia .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#f88adf}.select2-maroon+.select2-container--default.select2-container--focus .select2-selection--single,.select2-maroon+.select2-container--default.select2-container--open .select2-selection--single{border-color:#f083ab}.select2-container--default .select2-maroon.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-maroon .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-maroon .select2-search--inline .select2-search__field:focus,.select2-maroon .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-maroon .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-maroon .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #f083ab}.select2-container--default .select2-maroon .select2-results__option--highlighted,.select2-maroon .select2-container--default .select2-results__option--highlighted{background-color:#d81b60;color:#fff}.select2-container--default .select2-maroon .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-maroon .select2-results__option--highlighted[aria-selected]:hover,.select2-maroon .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-maroon .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#ca195a;color:#fff}.select2-container--default .select2-maroon .select2-selection--multiple:focus,.select2-maroon .select2-container--default .select2-selection--multiple:focus{border-color:#f083ab}.select2-container--default .select2-maroon .select2-selection--multiple .select2-selection__choice,.select2-maroon .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#d81b60;border-color:#c11856;color:#fff}.select2-container--default .select2-maroon .select2-selection--multiple .select2-selection__choice__remove,.select2-maroon .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-maroon .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-maroon .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-maroon.select2-container--focus .select2-selection--multiple,.select2-maroon .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#f083ab}.select2-blue+.select2-container--default.select2-container--focus .select2-selection--single,.select2-blue+.select2-container--default.select2-container--open .select2-selection--single{border-color:#9ac4eb}.select2-blue .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-blue .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-blue .select2-container--default .select2-search--inline .select2-search__field:focus,.select2-container--default .select2-blue.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-blue .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-blue .select2-search--inline .select2-search__field:focus{border:1px solid #9ac4eb}.select2-blue .select2-container--default .select2-results__option--highlighted,.select2-container--default .select2-blue .select2-results__option--highlighted{background-color:#3085d6;color:#fff}.select2-blue .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-blue .select2-container--default .select2-results__option--highlighted[aria-selected]:hover,.select2-container--default .select2-blue .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-blue .select2-results__option--highlighted[aria-selected]:hover{background-color:#297dce;color:#fff}.select2-blue .select2-container--default .select2-selection--multiple:focus,.select2-container--default .select2-blue .select2-selection--multiple:focus{border-color:#9ac4eb}.select2-blue .select2-container--default .select2-selection--multiple .select2-selection__choice,.select2-container--default .select2-blue .select2-selection--multiple .select2-selection__choice{background-color:#3085d6;border-color:#2778c5;color:#fff}.select2-blue .select2-container--default .select2-selection--multiple .select2-selection__choice__remove,.select2-container--default .select2-blue .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-blue .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-container--default .select2-blue .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-blue .select2-container--default.select2-container--focus .select2-selection--multiple,.select2-container--default .select2-blue.select2-container--focus .select2-selection--multiple{border-color:#9ac4eb}.select2-indigo+.select2-container--default.select2-container--focus .select2-selection--single,.select2-indigo+.select2-container--default.select2-container--open .select2-selection--single{border-color:#bac1e7}.select2-container--default .select2-indigo.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-indigo .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-indigo .select2-search--inline .select2-search__field:focus,.select2-indigo .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-indigo .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-indigo .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #bac1e7}.select2-container--default .select2-indigo .select2-results__option--highlighted,.select2-indigo .select2-container--default .select2-results__option--highlighted{background-color:#5c6bc6;color:#fff}.select2-container--default .select2-indigo .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-indigo .select2-results__option--highlighted[aria-selected]:hover,.select2-indigo .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-indigo .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#5161c2;color:#fff}.select2-container--default .select2-indigo .select2-selection--multiple:focus,.select2-indigo .select2-container--default .select2-selection--multiple:focus{border-color:#bac1e7}.select2-container--default .select2-indigo .select2-selection--multiple .select2-selection__choice,.select2-indigo .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#5c6bc6;border-color:#495abf;color:#fff}.select2-container--default .select2-indigo .select2-selection--multiple .select2-selection__choice__remove,.select2-indigo .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-indigo .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-indigo .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-indigo.select2-container--focus .select2-selection--multiple,.select2-indigo .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#bac1e7}.select2-purple+.select2-container--default.select2-container--focus .select2-selection--single,.select2-purple+.select2-container--default.select2-container--open .select2-selection--single{border-color:#b8a2e0}.select2-container--default .select2-purple.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-purple .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-purple .select2-search--inline .select2-search__field:focus,.select2-purple .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-purple .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-purple .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #b8a2e0}.select2-container--default .select2-purple .select2-results__option--highlighted,.select2-purple .select2-container--default .select2-results__option--highlighted{background-color:#6f42c1;color:#fff}.select2-container--default .select2-purple .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-purple .select2-results__option--highlighted[aria-selected]:hover,.select2-purple .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-purple .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#683cb8;color:#fff}.select2-container--default .select2-purple .select2-selection--multiple:focus,.select2-purple .select2-container--default .select2-selection--multiple:focus{border-color:#b8a2e0}.select2-container--default .select2-purple .select2-selection--multiple .select2-selection__choice,.select2-purple .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#6f42c1;border-color:#643ab0;color:#fff}.select2-container--default .select2-purple .select2-selection--multiple .select2-selection__choice__remove,.select2-purple .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-purple .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-purple .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-purple.select2-container--focus .select2-selection--multiple,.select2-purple .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#b8a2e0}.select2-pink+.select2-container--default.select2-container--focus .select2-selection--single,.select2-pink+.select2-container--default.select2-container--open .select2-selection--single{border-color:#fff}.select2-container--default .select2-pink.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-pink .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-pink .select2-search--inline .select2-search__field:focus,.select2-pink .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-pink .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-pink .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #fff}.select2-container--default .select2-pink .select2-results__option--highlighted,.select2-pink .select2-container--default .select2-results__option--highlighted{background-color:#ff8acc;color:#2a2e30}.select2-container--default .select2-pink .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-pink .select2-results__option--highlighted[aria-selected]:hover,.select2-pink .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-pink .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#ff7bc5;color:#2a2e30}.select2-container--default .select2-pink .select2-selection--multiple:focus,.select2-pink .select2-container--default .select2-selection--multiple:focus{border-color:#fff}.select2-container--default .select2-pink .select2-selection--multiple .select2-selection__choice,.select2-pink .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#ff8acc;border-color:#ff71c1;color:#2a2e30}.select2-container--default .select2-pink .select2-selection--multiple .select2-selection__choice__remove,.select2-pink .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:rgba(42,46,48,.7)}.select2-container--default .select2-pink .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-pink .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#2a2e30}.select2-container--default .select2-pink.select2-container--focus .select2-selection--multiple,.select2-pink .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#fff}.select2-red+.select2-container--default.select2-container--focus .select2-selection--single,.select2-red+.select2-container--default.select2-container--open .select2-selection--single{border-color:#f8c6c6}.select2-container--default .select2-red.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-red .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-red .select2-search--inline .select2-search__field:focus,.select2-red .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-red .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-red .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #f8c6c6}.select2-container--default .select2-red .select2-results__option--highlighted,.select2-red .select2-container--default .select2-results__option--highlighted{background-color:#ea5455;color:#fff}.select2-container--default .select2-red .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-red .select2-results__option--highlighted[aria-selected]:hover,.select2-red .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-red .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#e84647;color:#fff}.select2-container--default .select2-red .select2-selection--multiple:focus,.select2-red .select2-container--default .select2-selection--multiple:focus{border-color:#f8c6c6}.select2-container--default .select2-red .select2-selection--multiple .select2-selection__choice,.select2-red .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#ea5455;border-color:#e73d3e;color:#fff}.select2-container--default .select2-red .select2-selection--multiple .select2-selection__choice__remove,.select2-red .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-red .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-red .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-red.select2-container--focus .select2-selection--multiple,.select2-red .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#f8c6c6}.select2-orange+.select2-container--default.select2-container--focus .select2-selection--single,.select2-orange+.select2-container--default.select2-container--open .select2-selection--single{border-color:#f2dcbc}.select2-container--default .select2-orange.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-orange .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-orange .select2-search--inline .select2-search__field:focus,.select2-orange .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-orange .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-orange .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #f2dcbc}.select2-container--default .select2-orange .select2-results__option--highlighted,.select2-orange .select2-container--default .select2-results__option--highlighted{background-color:#dda451;color:#2a2e30}.select2-container--default .select2-orange .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-orange .select2-results__option--highlighted[aria-selected]:hover,.select2-orange .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-orange .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#da9d44;color:#2a2e30}.select2-container--default .select2-orange .select2-selection--multiple:focus,.select2-orange .select2-container--default .select2-selection--multiple:focus{border-color:#f2dcbc}.select2-container--default .select2-orange .select2-selection--multiple .select2-selection__choice,.select2-orange .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#dda451;border-color:#d9993c;color:#2a2e30}.select2-container--default .select2-orange .select2-selection--multiple .select2-selection__choice__remove,.select2-orange .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:rgba(42,46,48,.7)}.select2-container--default .select2-orange .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-orange .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#2a2e30}.select2-container--default .select2-orange.select2-container--focus .select2-selection--multiple,.select2-orange .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#f2dcbc}.select2-yellow+.select2-container--default.select2-container--focus .select2-selection--single,.select2-yellow+.select2-container--default.select2-container--open .select2-selection--single{border-color:#f8e283}.select2-container--default .select2-yellow.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-yellow .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-yellow .select2-search--inline .select2-search__field:focus,.select2-yellow .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-yellow .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-yellow .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #f8e283}.select2-container--default .select2-yellow .select2-results__option--highlighted,.select2-yellow .select2-container--default .select2-results__option--highlighted{background-color:#edc30e;color:#2a2e30}.select2-container--default .select2-yellow .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-yellow .select2-results__option--highlighted[aria-selected]:hover,.select2-yellow .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-yellow .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#dfb70d;color:#2a2e30}.select2-container--default .select2-yellow .select2-selection--multiple:focus,.select2-yellow .select2-container--default .select2-selection--multiple:focus{border-color:#f8e283}.select2-container--default .select2-yellow .select2-selection--multiple .select2-selection__choice,.select2-yellow .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#edc30e;border-color:#d5af0d;color:#2a2e30}.select2-container--default .select2-yellow .select2-selection--multiple .select2-selection__choice__remove,.select2-yellow .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:rgba(42,46,48,.7)}.select2-container--default .select2-yellow .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-yellow .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#2a2e30}.select2-container--default .select2-yellow.select2-container--focus .select2-selection--multiple,.select2-yellow .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#f8e283}.select2-green+.select2-container--default.select2-container--focus .select2-selection--single,.select2-green+.select2-container--default.select2-container--open .select2-selection--single{border-color:#73e6b5}.select2-container--default .select2-green.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-green .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-green .select2-search--inline .select2-search__field:focus,.select2-green .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-green .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-green .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #73e6b5}.select2-container--default .select2-green .select2-results__option--highlighted,.select2-green .select2-container--default .select2-results__option--highlighted{background-color:#21b978;color:#fff}.select2-container--default .select2-green .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-green .select2-results__option--highlighted[aria-selected]:hover,.select2-green .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-green .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#1fac70;color:#fff}.select2-container--default .select2-green .select2-selection--multiple:focus,.select2-green .select2-container--default .select2-selection--multiple:focus{border-color:#73e6b5}.select2-container--default .select2-green .select2-selection--multiple .select2-selection__choice,.select2-green .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#21b978;border-color:#1da36a;color:#fff}.select2-container--default .select2-green .select2-selection--multiple .select2-selection__choice__remove,.select2-green .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-green .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-green .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-green.select2-container--focus .select2-selection--multiple,.select2-green .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#73e6b5}.select2-teal+.select2-container--default.select2-container--focus .select2-selection--single,.select2-teal+.select2-container--default.select2-container--open .select2-selection--single{border-color:#7eeaca}.select2-container--default .select2-teal.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-teal .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-teal .select2-search--inline .select2-search__field:focus,.select2-teal .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-teal .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-teal .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #7eeaca}.select2-container--default .select2-teal .select2-results__option--highlighted,.select2-teal .select2-container--default .select2-results__option--highlighted{background-color:#20c997;color:#fff}.select2-container--default .select2-teal .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-teal .select2-results__option--highlighted[aria-selected]:hover,.select2-teal .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-teal .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#1ebc8d;color:#fff}.select2-container--default .select2-teal .select2-selection--multiple:focus,.select2-teal .select2-container--default .select2-selection--multiple:focus{border-color:#7eeaca}.select2-container--default .select2-teal .select2-selection--multiple .select2-selection__choice,.select2-teal .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#20c997;border-color:#1cb386;color:#fff}.select2-container--default .select2-teal .select2-selection--multiple .select2-selection__choice__remove,.select2-teal .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-teal .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-teal .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-teal.select2-container--focus .select2-selection--multiple,.select2-teal .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#7eeaca}.select2-cyan+.select2-container--default.select2-container--focus .select2-selection--single,.select2-cyan+.select2-container--default.select2-container--open .select2-selection--single{border-color:#dedbfb}.select2-container--default .select2-cyan.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-cyan .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-cyan .select2-search--inline .select2-search__field:focus,.select2-cyan .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-cyan .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-cyan .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #dedbfb}.select2-container--default .select2-cyan .select2-results__option--highlighted,.select2-cyan .select2-container--default .select2-results__option--highlighted{background-color:#7367f0;color:#fff}.select2-container--default .select2-cyan .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-cyan .select2-results__option--highlighted[aria-selected]:hover,.select2-cyan .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-cyan .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#6659ef;color:#fff}.select2-container--default .select2-cyan .select2-selection--multiple:focus,.select2-cyan .select2-container--default .select2-selection--multiple:focus{border-color:#dedbfb}.select2-container--default .select2-cyan .select2-selection--multiple .select2-selection__choice,.select2-cyan .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#7367f0;border-color:#5e50ee;color:#fff}.select2-container--default .select2-cyan .select2-selection--multiple .select2-selection__choice__remove,.select2-cyan .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-cyan .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-cyan .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-cyan.select2-container--focus .select2-selection--multiple,.select2-cyan .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#dedbfb}.select2-white+.select2-container--default.select2-container--focus .select2-selection--single,.select2-white+.select2-container--default.select2-container--open .select2-selection--single{border-color:#fff}.select2-container--default .select2-white.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-white .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-white .select2-search--inline .select2-search__field:focus,.select2-white .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-white .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-white .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #fff}.select2-container--default .select2-white .select2-results__option--highlighted,.select2-white .select2-container--default .select2-results__option--highlighted{background-color:#fff;color:#2a2e30}.select2-container--default .select2-white .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-white .select2-results__option--highlighted[aria-selected]:hover,.select2-white .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-white .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#f7f7f7;color:#2a2e30}.select2-container--default .select2-white .select2-selection--multiple:focus,.select2-white .select2-container--default .select2-selection--multiple:focus{border-color:#fff}.select2-container--default .select2-white .select2-selection--multiple .select2-selection__choice,.select2-white .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#fff;border-color:#f2f2f2;color:#2a2e30}.select2-container--default .select2-white .select2-selection--multiple .select2-selection__choice__remove,.select2-white .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:rgba(42,46,48,.7)}.select2-container--default .select2-white .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-white .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#2a2e30}.select2-container--default .select2-white.select2-container--focus .select2-selection--multiple,.select2-gray+.select2-container--default.select2-container--focus .select2-selection--single,.select2-gray+.select2-container--default.select2-container--open .select2-selection--single,.select2-white .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#fff}.select2-container--default .select2-gray.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-gray .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-gray .select2-search--inline .select2-search__field:focus,.select2-gray .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-gray .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-gray .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #fff}.select2-container--default .select2-gray .select2-results__option--highlighted,.select2-gray .select2-container--default .select2-results__option--highlighted{background-color:#b8c2cc;color:#2a2e30}.select2-container--default .select2-gray .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-gray .select2-results__option--highlighted[aria-selected]:hover,.select2-gray .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-gray .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#afbac6;color:#2a2e30}.select2-container--default .select2-gray .select2-selection--multiple:focus,.select2-gray .select2-container--default .select2-selection--multiple:focus{border-color:#fff}.select2-container--default .select2-gray .select2-selection--multiple .select2-selection__choice,.select2-gray .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#b8c2cc;border-color:#a9b5c1;color:#2a2e30}.select2-container--default .select2-gray .select2-selection--multiple .select2-selection__choice__remove,.select2-gray .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:rgba(42,46,48,.7)}.select2-container--default .select2-gray .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-gray .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#2a2e30}.select2-container--default .select2-gray.select2-container--focus .select2-selection--multiple,.select2-gray .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#fff}.select2-gray-dark+.select2-container--default.select2-container--focus .select2-selection--single,.select2-gray-dark+.select2-container--default.select2-container--open .select2-selection--single{border-color:#5e5e5e}.select2-container--default .select2-gray-dark.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-gray-dark .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-gray-dark .select2-search--inline .select2-search__field:focus,.select2-gray-dark .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-gray-dark .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-gray-dark .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #5e5e5e}.select2-container--default .select2-gray-dark .select2-results__option--highlighted,.select2-gray-dark .select2-container--default .select2-results__option--highlighted{background-color:#1e1e1e;color:#fff}.select2-container--default .select2-gray-dark .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-gray-dark .select2-results__option--highlighted[aria-selected]:hover,.select2-gray-dark .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-gray-dark .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#161616;color:#fff}.select2-container--default .select2-gray-dark .select2-selection--multiple:focus,.select2-gray-dark .select2-container--default .select2-selection--multiple:focus{border-color:#5e5e5e}.select2-container--default .select2-gray-dark .select2-selection--multiple .select2-selection__choice,.select2-gray-dark .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#1e1e1e;border-color:#111;color:#fff}.select2-container--default .select2-gray-dark .select2-selection--multiple .select2-selection__choice__remove,.select2-gray-dark .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-gray-dark .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-gray-dark .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-gray-dark.select2-container--focus .select2-selection--multiple,.select2-gray-dark .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#5e5e5e}.slider .tooltip.in{opacity:.9}.slider.slider-vertical{height:100%}.slider.slider-horizontal{width:100%}.slider-primary .slider .slider-selection{background:#62a8ea}.slider-secondary .slider .slider-selection{background:#b8c2cc}.slider-success .slider .slider-selection{background:#21b978}.slider-info .slider .slider-selection{background:#4277cf}.slider-warning .slider .slider-selection{background:#dda451}.slider-danger .slider .slider-selection{background:#ea5455}.slider-light .slider .slider-selection{background:#f7f7f9}.slider-dark .slider .slider-selection{background:#22292f}.slider-lightblue .slider .slider-selection{background:#3c8dbc}.slider-navy .slider .slider-selection{background:#001f3f}.slider-olive .slider .slider-selection{background:#3d9970}.slider-lime .slider .slider-selection{background:#01ff70}.slider-fuchsia .slider .slider-selection{background:#f012be}.slider-maroon .slider .slider-selection{background:#d81b60}.slider-blue .slider .slider-selection{background:#3085d6}.slider-indigo .slider .slider-selection{background:#5c6bc6}.slider-purple .slider .slider-selection{background:#6f42c1}.slider-pink .slider .slider-selection{background:#ff8acc}.slider-red .slider .slider-selection{background:#ea5455}.slider-orange .slider .slider-selection{background:#dda451}.slider-yellow .slider .slider-selection{background:#edc30e}.slider-green .slider .slider-selection{background:#21b978}.slider-teal .slider .slider-selection{background:#20c997}.slider-cyan .slider .slider-selection{background:#7367f0}.slider-white .slider .slider-selection{background:#fff}.slider-gray .slider .slider-selection{background:#b8c2cc}.slider-gray-dark .slider .slider-selection{background:#1e1e1e}.mapael .map{position:relative}.mapael .mapTooltip{font-family:Montserrat,Helvetica,Arial,serif;font-style:normal;font-weight:400;line-height:1.45;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;border-radius:.5rem;font-size:1rem;background-color:#22292f;color:#fff;display:block;max-width:200px;padding:.25rem .5rem;position:absolute;text-align:center;word-wrap:break-word;z-index:1070}.mapael .myLegend{background-color:#babfc7;border:1px solid #adb5bd;padding:10px;width:600px}.mapael .zoomButton{background-color:#babfc7;border:1px solid #ddd;border-radius:.42rem;color:#444;cursor:pointer;font-weight:700;height:16px;left:10px;line-height:14px;padding-left:1px;position:absolute;text-align:center;top:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:16px}.mapael .zoomButton.hover,.mapael .zoomButton:active,.mapael .zoomButton:hover{background-color:#acb2bc;color:#2b2b2b}.mapael .zoomReset{line-height:12px;top:10px}.mapael .zoomIn{top:30px}.mapael .zoomOut{top:50px}.jqvmap-zoomin,.jqvmap-zoomout{background-color:#babfc7;border:1px solid #ddd;border-radius:.42rem;color:#444;height:15px;width:15px}.jqvmap-zoomin.hover,.jqvmap-zoomin:active,.jqvmap-zoomin:hover,.jqvmap-zoomout.hover,.jqvmap-zoomout:active,.jqvmap-zoomout:hover{background-color:#acb2bc;color:#2b2b2b}.pace{z-index:1048}.pace .pace-progress{z-index:1049}.pace .pace-activity{z-index:1050}.pace-primary .pace .pace-progress{background:#62a8ea}.pace-barber-shop-primary .pace{background:#2a2e30}.pace-barber-shop-primary .pace .pace-progress{background:#62a8ea}.pace-barber-shop-primary .pace .pace-activity{background-image:linear-gradient(45deg,rgba(42,46,48,.2) 25%,transparent 0,transparent 50%,rgba(42,46,48,.2) 0,rgba(42,46,48,.2) 75%,transparent 0,transparent)}.pace-big-counter-primary .pace .pace-progress:after{color:rgba(98,168,234,.2)}.pace-bounce-primary .pace .pace-activity{background:#62a8ea}.pace-center-atom-primary .pace-progress{height:100px;width:80px}.pace-center-atom-primary .pace-progress:before{background:#62a8ea;color:#2a2e30;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-primary .pace-activity,.pace-center-atom-primary .pace-activity:after,.pace-center-atom-primary .pace-activity:before{border-color:#62a8ea}.pace-center-circle-primary .pace .pace-progress{background:rgba(98,168,234,.8);color:#2a2e30}.pace-center-radar-primary .pace .pace-activity,.pace-center-radar-primary .pace .pace-activity:before{border-color:#62a8ea transparent transparent}.pace-center-simple-primary .pace{background:#2a2e30;border-color:#62a8ea}.pace-center-simple-primary .pace .pace-progress{background:#62a8ea}.pace-material-primary .pace{color:#62a8ea}.pace-corner-indicator-primary .pace .pace-activity{background:#62a8ea}.pace-corner-indicator-primary .pace .pace-activity:after,.pace-corner-indicator-primary .pace .pace-activity:before{border:5px solid #2a2e30}.pace-corner-indicator-primary .pace .pace-activity:before{border-right-color:rgba(98,168,234,.2);border-left-color:rgba(98,168,234,.2)}.pace-corner-indicator-primary .pace .pace-activity:after{border-top-color:rgba(98,168,234,.2);border-bottom-color:rgba(98,168,234,.2)}.pace-fill-left-primary .pace .pace-progress{background-color:rgba(98,168,234,.2)}.pace-flash-primary .pace .pace-progress{background:#62a8ea}.pace-flash-primary .pace .pace-progress-inner{box-shadow:0 0 10px #62a8ea,0 0 5px #62a8ea}.pace-flash-primary .pace .pace-activity{border-top-color:#62a8ea;border-left-color:#62a8ea}.pace-loading-bar-primary .pace .pace-progress{background:#62a8ea;color:#62a8ea;box-shadow:120px 0 #2a2e30,240px 0 #2a2e30}.pace-loading-bar-primary .pace .pace-activity{box-shadow:inset 0 0 0 2px #62a8ea,inset 0 0 0 7px #2a2e30}.pace-mac-osx-primary .pace .pace-progress{background-color:#62a8ea;box-shadow:inset -1px 0 #62a8ea,inset 0 -1px #62a8ea,inset 0 2px rgba(42,46,48,.5),inset 0 6px rgba(42,46,48,.3)}.pace-mac-osx-primary .pace .pace-activity{background-image:radial-gradient(rgba(42,46,48,.65) 0,rgba(42,46,48,.15) 100%);height:12px}.pace-progress-color-primary .pace-progress{color:#62a8ea}.pace-secondary .pace .pace-progress{background:#b8c2cc}.pace-barber-shop-secondary .pace{background:#2a2e30}.pace-barber-shop-secondary .pace .pace-progress{background:#b8c2cc}.pace-barber-shop-secondary .pace .pace-activity{background-image:linear-gradient(45deg,rgba(42,46,48,.2) 25%,transparent 0,transparent 50%,rgba(42,46,48,.2) 0,rgba(42,46,48,.2) 75%,transparent 0,transparent)}.pace-big-counter-secondary .pace .pace-progress:after{color:rgba(184,194,204,.2)}.pace-bounce-secondary .pace .pace-activity{background:#b8c2cc}.pace-center-atom-secondary .pace-progress{height:100px;width:80px}.pace-center-atom-secondary .pace-progress:before{background:#b8c2cc;color:#2a2e30;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-secondary .pace-activity,.pace-center-atom-secondary .pace-activity:after,.pace-center-atom-secondary .pace-activity:before{border-color:#b8c2cc}.pace-center-circle-secondary .pace .pace-progress{background:rgba(184,194,204,.8);color:#2a2e30}.pace-center-radar-secondary .pace .pace-activity,.pace-center-radar-secondary .pace .pace-activity:before{border-color:#b8c2cc transparent transparent}.pace-center-simple-secondary .pace{background:#2a2e30;border-color:#b8c2cc}.pace-center-simple-secondary .pace .pace-progress{background:#b8c2cc}.pace-material-secondary .pace{color:#b8c2cc}.pace-corner-indicator-secondary .pace .pace-activity{background:#b8c2cc}.pace-corner-indicator-secondary .pace .pace-activity:after,.pace-corner-indicator-secondary .pace .pace-activity:before{border:5px solid #2a2e30}.pace-corner-indicator-secondary .pace .pace-activity:before{border-right-color:rgba(184,194,204,.2);border-left-color:rgba(184,194,204,.2)}.pace-corner-indicator-secondary .pace .pace-activity:after{border-top-color:rgba(184,194,204,.2);border-bottom-color:rgba(184,194,204,.2)}.pace-fill-left-secondary .pace .pace-progress{background-color:rgba(184,194,204,.2)}.pace-flash-secondary .pace .pace-progress{background:#b8c2cc}.pace-flash-secondary .pace .pace-progress-inner{box-shadow:0 0 10px #b8c2cc,0 0 5px #b8c2cc}.pace-flash-secondary .pace .pace-activity{border-top-color:#b8c2cc;border-left-color:#b8c2cc}.pace-loading-bar-secondary .pace .pace-progress{background:#b8c2cc;color:#b8c2cc;box-shadow:120px 0 #2a2e30,240px 0 #2a2e30}.pace-loading-bar-secondary .pace .pace-activity{box-shadow:inset 0 0 0 2px #b8c2cc,inset 0 0 0 7px #2a2e30}.pace-mac-osx-secondary .pace .pace-progress{background-color:#b8c2cc;box-shadow:inset -1px 0 #b8c2cc,inset 0 -1px #b8c2cc,inset 0 2px rgba(42,46,48,.5),inset 0 6px rgba(42,46,48,.3)}.pace-mac-osx-secondary .pace .pace-activity{background-image:radial-gradient(rgba(42,46,48,.65) 0,rgba(42,46,48,.15) 100%);height:12px}.pace-progress-color-secondary .pace-progress{color:#b8c2cc}.pace-success .pace .pace-progress{background:#21b978}.pace-barber-shop-success .pace{background:#fff}.pace-barber-shop-success .pace .pace-progress{background:#21b978}.pace-barber-shop-success .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-success .pace .pace-progress:after{color:rgba(33,185,120,.2)}.pace-bounce-success .pace .pace-activity{background:#21b978}.pace-center-atom-success .pace-progress{height:100px;width:80px}.pace-center-atom-success .pace-progress:before{background:#21b978;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-success .pace-activity,.pace-center-atom-success .pace-activity:after,.pace-center-atom-success .pace-activity:before{border-color:#21b978}.pace-center-circle-success .pace .pace-progress{background:rgba(33,185,120,.8);color:#fff}.pace-center-radar-success .pace .pace-activity,.pace-center-radar-success .pace .pace-activity:before{border-color:#21b978 transparent transparent}.pace-center-simple-success .pace{background:#fff;border-color:#21b978}.pace-center-simple-success .pace .pace-progress{background:#21b978}.pace-material-success .pace{color:#21b978}.pace-corner-indicator-success .pace .pace-activity{background:#21b978}.pace-corner-indicator-success .pace .pace-activity:after,.pace-corner-indicator-success .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-success .pace .pace-activity:before{border-right-color:rgba(33,185,120,.2);border-left-color:rgba(33,185,120,.2)}.pace-corner-indicator-success .pace .pace-activity:after{border-top-color:rgba(33,185,120,.2);border-bottom-color:rgba(33,185,120,.2)}.pace-fill-left-success .pace .pace-progress{background-color:rgba(33,185,120,.2)}.pace-flash-success .pace .pace-progress{background:#21b978}.pace-flash-success .pace .pace-progress-inner{box-shadow:0 0 10px #21b978,0 0 5px #21b978}.pace-flash-success .pace .pace-activity{border-top-color:#21b978;border-left-color:#21b978}.pace-loading-bar-success .pace .pace-progress{background:#21b978;color:#21b978;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-success .pace .pace-activity{box-shadow:inset 0 0 0 2px #21b978,inset 0 0 0 7px #fff}.pace-mac-osx-success .pace .pace-progress{background-color:#21b978;box-shadow:inset -1px 0 #21b978,inset 0 -1px #21b978,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-success .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-success .pace-progress{color:#21b978}.pace-info .pace .pace-progress{background:#4277cf}.pace-barber-shop-info .pace{background:#fff}.pace-barber-shop-info .pace .pace-progress{background:#4277cf}.pace-barber-shop-info .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-info .pace .pace-progress:after{color:rgba(66,119,207,.2)}.pace-bounce-info .pace .pace-activity{background:#4277cf}.pace-center-atom-info .pace-progress{height:100px;width:80px}.pace-center-atom-info .pace-progress:before{background:#4277cf;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-info .pace-activity,.pace-center-atom-info .pace-activity:after,.pace-center-atom-info .pace-activity:before{border-color:#4277cf}.pace-center-circle-info .pace .pace-progress{background:rgba(66,119,207,.8);color:#fff}.pace-center-radar-info .pace .pace-activity,.pace-center-radar-info .pace .pace-activity:before{border-color:#4277cf transparent transparent}.pace-center-simple-info .pace{background:#fff;border-color:#4277cf}.pace-center-simple-info .pace .pace-progress{background:#4277cf}.pace-material-info .pace{color:#4277cf}.pace-corner-indicator-info .pace .pace-activity{background:#4277cf}.pace-corner-indicator-info .pace .pace-activity:after,.pace-corner-indicator-info .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-info .pace .pace-activity:before{border-right-color:rgba(66,119,207,.2);border-left-color:rgba(66,119,207,.2)}.pace-corner-indicator-info .pace .pace-activity:after{border-top-color:rgba(66,119,207,.2);border-bottom-color:rgba(66,119,207,.2)}.pace-fill-left-info .pace .pace-progress{background-color:rgba(66,119,207,.2)}.pace-flash-info .pace .pace-progress{background:#4277cf}.pace-flash-info .pace .pace-progress-inner{box-shadow:0 0 10px #4277cf,0 0 5px #4277cf}.pace-flash-info .pace .pace-activity{border-top-color:#4277cf;border-left-color:#4277cf}.pace-loading-bar-info .pace .pace-progress{background:#4277cf;color:#4277cf;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-info .pace .pace-activity{box-shadow:inset 0 0 0 2px #4277cf,inset 0 0 0 7px #fff}.pace-mac-osx-info .pace .pace-progress{background-color:#4277cf;box-shadow:inset -1px 0 #4277cf,inset 0 -1px #4277cf,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-info .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-info .pace-progress{color:#4277cf}.pace-warning .pace .pace-progress{background:#dda451}.pace-barber-shop-warning .pace{background:#2a2e30}.pace-barber-shop-warning .pace .pace-progress{background:#dda451}.pace-barber-shop-warning .pace .pace-activity{background-image:linear-gradient(45deg,rgba(42,46,48,.2) 25%,transparent 0,transparent 50%,rgba(42,46,48,.2) 0,rgba(42,46,48,.2) 75%,transparent 0,transparent)}.pace-big-counter-warning .pace .pace-progress:after{color:rgba(221,164,81,.2)}.pace-bounce-warning .pace .pace-activity{background:#dda451}.pace-center-atom-warning .pace-progress{height:100px;width:80px}.pace-center-atom-warning .pace-progress:before{background:#dda451;color:#2a2e30;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-warning .pace-activity,.pace-center-atom-warning .pace-activity:after,.pace-center-atom-warning .pace-activity:before{border-color:#dda451}.pace-center-circle-warning .pace .pace-progress{background:rgba(221,164,81,.8);color:#2a2e30}.pace-center-radar-warning .pace .pace-activity,.pace-center-radar-warning .pace .pace-activity:before{border-color:#dda451 transparent transparent}.pace-center-simple-warning .pace{background:#2a2e30;border-color:#dda451}.pace-center-simple-warning .pace .pace-progress{background:#dda451}.pace-material-warning .pace{color:#dda451}.pace-corner-indicator-warning .pace .pace-activity{background:#dda451}.pace-corner-indicator-warning .pace .pace-activity:after,.pace-corner-indicator-warning .pace .pace-activity:before{border:5px solid #2a2e30}.pace-corner-indicator-warning .pace .pace-activity:before{border-right-color:rgba(221,164,81,.2);border-left-color:rgba(221,164,81,.2)}.pace-corner-indicator-warning .pace .pace-activity:after{border-top-color:rgba(221,164,81,.2);border-bottom-color:rgba(221,164,81,.2)}.pace-fill-left-warning .pace .pace-progress{background-color:rgba(221,164,81,.2)}.pace-flash-warning .pace .pace-progress{background:#dda451}.pace-flash-warning .pace .pace-progress-inner{box-shadow:0 0 10px #dda451,0 0 5px #dda451}.pace-flash-warning .pace .pace-activity{border-top-color:#dda451;border-left-color:#dda451}.pace-loading-bar-warning .pace .pace-progress{background:#dda451;color:#dda451;box-shadow:120px 0 #2a2e30,240px 0 #2a2e30}.pace-loading-bar-warning .pace .pace-activity{box-shadow:inset 0 0 0 2px #dda451,inset 0 0 0 7px #2a2e30}.pace-mac-osx-warning .pace .pace-progress{background-color:#dda451;box-shadow:inset -1px 0 #dda451,inset 0 -1px #dda451,inset 0 2px rgba(42,46,48,.5),inset 0 6px rgba(42,46,48,.3)}.pace-mac-osx-warning .pace .pace-activity{background-image:radial-gradient(rgba(42,46,48,.65) 0,rgba(42,46,48,.15) 100%);height:12px}.pace-progress-color-warning .pace-progress{color:#dda451}.pace-danger .pace .pace-progress{background:#ea5455}.pace-barber-shop-danger .pace{background:#fff}.pace-barber-shop-danger .pace .pace-progress{background:#ea5455}.pace-barber-shop-danger .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-danger .pace .pace-progress:after{color:rgba(234,84,85,.2)}.pace-bounce-danger .pace .pace-activity{background:#ea5455}.pace-center-atom-danger .pace-progress{height:100px;width:80px}.pace-center-atom-danger .pace-progress:before{background:#ea5455;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-danger .pace-activity,.pace-center-atom-danger .pace-activity:after,.pace-center-atom-danger .pace-activity:before{border-color:#ea5455}.pace-center-circle-danger .pace .pace-progress{background:rgba(234,84,85,.8);color:#fff}.pace-center-radar-danger .pace .pace-activity,.pace-center-radar-danger .pace .pace-activity:before{border-color:#ea5455 transparent transparent}.pace-center-simple-danger .pace{background:#fff;border-color:#ea5455}.pace-center-simple-danger .pace .pace-progress{background:#ea5455}.pace-material-danger .pace{color:#ea5455}.pace-corner-indicator-danger .pace .pace-activity{background:#ea5455}.pace-corner-indicator-danger .pace .pace-activity:after,.pace-corner-indicator-danger .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-danger .pace .pace-activity:before{border-right-color:rgba(234,84,85,.2);border-left-color:rgba(234,84,85,.2)}.pace-corner-indicator-danger .pace .pace-activity:after{border-top-color:rgba(234,84,85,.2);border-bottom-color:rgba(234,84,85,.2)}.pace-fill-left-danger .pace .pace-progress{background-color:rgba(234,84,85,.2)}.pace-flash-danger .pace .pace-progress{background:#ea5455}.pace-flash-danger .pace .pace-progress-inner{box-shadow:0 0 10px #ea5455,0 0 5px #ea5455}.pace-flash-danger .pace .pace-activity{border-top-color:#ea5455;border-left-color:#ea5455}.pace-loading-bar-danger .pace .pace-progress{background:#ea5455;color:#ea5455;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-danger .pace .pace-activity{box-shadow:inset 0 0 0 2px #ea5455,inset 0 0 0 7px #fff}.pace-mac-osx-danger .pace .pace-progress{background-color:#ea5455;box-shadow:inset -1px 0 #ea5455,inset 0 -1px #ea5455,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-danger .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-danger .pace-progress{color:#ea5455}.pace-light .pace .pace-progress{background:#f7f7f9}.pace-barber-shop-light .pace{background:#2a2e30}.pace-barber-shop-light .pace .pace-progress{background:#f7f7f9}.pace-barber-shop-light .pace .pace-activity{background-image:linear-gradient(45deg,rgba(42,46,48,.2) 25%,transparent 0,transparent 50%,rgba(42,46,48,.2) 0,rgba(42,46,48,.2) 75%,transparent 0,transparent)}.pace-big-counter-light .pace .pace-progress:after{color:rgba(247,247,249,.2)}.pace-bounce-light .pace .pace-activity{background:#f7f7f9}.pace-center-atom-light .pace-progress{height:100px;width:80px}.pace-center-atom-light .pace-progress:before{background:#f7f7f9;color:#2a2e30;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-light .pace-activity,.pace-center-atom-light .pace-activity:after,.pace-center-atom-light .pace-activity:before{border-color:#f7f7f9}.pace-center-circle-light .pace .pace-progress{background:rgba(247,247,249,.8);color:#2a2e30}.pace-center-radar-light .pace .pace-activity,.pace-center-radar-light .pace .pace-activity:before{border-color:#f7f7f9 transparent transparent}.pace-center-simple-light .pace{background:#2a2e30;border-color:#f7f7f9}.pace-center-simple-light .pace .pace-progress{background:#f7f7f9}.pace-material-light .pace{color:#f7f7f9}.pace-corner-indicator-light .pace .pace-activity{background:#f7f7f9}.pace-corner-indicator-light .pace .pace-activity:after,.pace-corner-indicator-light .pace .pace-activity:before{border:5px solid #2a2e30}.pace-corner-indicator-light .pace .pace-activity:before{border-right-color:rgba(247,247,249,.2);border-left-color:rgba(247,247,249,.2)}.pace-corner-indicator-light .pace .pace-activity:after{border-top-color:rgba(247,247,249,.2);border-bottom-color:rgba(247,247,249,.2)}.pace-fill-left-light .pace .pace-progress{background-color:rgba(247,247,249,.2)}.pace-flash-light .pace .pace-progress{background:#f7f7f9}.pace-flash-light .pace .pace-progress-inner{box-shadow:0 0 10px #f7f7f9,0 0 5px #f7f7f9}.pace-flash-light .pace .pace-activity{border-top-color:#f7f7f9;border-left-color:#f7f7f9}.pace-loading-bar-light .pace .pace-progress{background:#f7f7f9;color:#f7f7f9;box-shadow:120px 0 #2a2e30,240px 0 #2a2e30}.pace-loading-bar-light .pace .pace-activity{box-shadow:inset 0 0 0 2px #f7f7f9,inset 0 0 0 7px #2a2e30}.pace-mac-osx-light .pace .pace-progress{background-color:#f7f7f9;box-shadow:inset -1px 0 #f7f7f9,inset 0 -1px #f7f7f9,inset 0 2px rgba(42,46,48,.5),inset 0 6px rgba(42,46,48,.3)}.pace-mac-osx-light .pace .pace-activity{background-image:radial-gradient(rgba(42,46,48,.65) 0,rgba(42,46,48,.15) 100%);height:12px}.pace-progress-color-light .pace-progress{color:#f7f7f9}.pace-dark .pace .pace-progress{background:#22292f}.pace-barber-shop-dark .pace{background:#fff}.pace-barber-shop-dark .pace .pace-progress{background:#22292f}.pace-barber-shop-dark .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-dark .pace .pace-progress:after{color:rgba(34,41,47,.2)}.pace-bounce-dark .pace .pace-activity{background:#22292f}.pace-center-atom-dark .pace-progress{height:100px;width:80px}.pace-center-atom-dark .pace-progress:before{background:#22292f;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-dark .pace-activity,.pace-center-atom-dark .pace-activity:after,.pace-center-atom-dark .pace-activity:before{border-color:#22292f}.pace-center-circle-dark .pace .pace-progress{background:rgba(34,41,47,.8);color:#fff}.pace-center-radar-dark .pace .pace-activity,.pace-center-radar-dark .pace .pace-activity:before{border-color:#22292f transparent transparent}.pace-center-simple-dark .pace{background:#fff;border-color:#22292f}.pace-center-simple-dark .pace .pace-progress{background:#22292f}.pace-material-dark .pace{color:#22292f}.pace-corner-indicator-dark .pace .pace-activity{background:#22292f}.pace-corner-indicator-dark .pace .pace-activity:after,.pace-corner-indicator-dark .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-dark .pace .pace-activity:before{border-right-color:rgba(34,41,47,.2);border-left-color:rgba(34,41,47,.2)}.pace-corner-indicator-dark .pace .pace-activity:after{border-top-color:rgba(34,41,47,.2);border-bottom-color:rgba(34,41,47,.2)}.pace-fill-left-dark .pace .pace-progress{background-color:rgba(34,41,47,.2)}.pace-flash-dark .pace .pace-progress{background:#22292f}.pace-flash-dark .pace .pace-progress-inner{box-shadow:0 0 10px #22292f,0 0 5px #22292f}.pace-flash-dark .pace .pace-activity{border-top-color:#22292f;border-left-color:#22292f}.pace-loading-bar-dark .pace .pace-progress{background:#22292f;color:#22292f;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-dark .pace .pace-activity{box-shadow:inset 0 0 0 2px #22292f,inset 0 0 0 7px #fff}.pace-mac-osx-dark .pace .pace-progress{background-color:#22292f;box-shadow:inset -1px 0 #22292f,inset 0 -1px #22292f,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-dark .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-dark .pace-progress{color:#22292f}.pace-lightblue .pace .pace-progress{background:#3c8dbc}.pace-barber-shop-lightblue .pace{background:#fff}.pace-barber-shop-lightblue .pace .pace-progress{background:#3c8dbc}.pace-barber-shop-lightblue .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-lightblue .pace .pace-progress:after{color:rgba(60,141,188,.2)}.pace-bounce-lightblue .pace .pace-activity{background:#3c8dbc}.pace-center-atom-lightblue .pace-progress{height:100px;width:80px}.pace-center-atom-lightblue .pace-progress:before{background:#3c8dbc;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-lightblue .pace-activity,.pace-center-atom-lightblue .pace-activity:after,.pace-center-atom-lightblue .pace-activity:before{border-color:#3c8dbc}.pace-center-circle-lightblue .pace .pace-progress{background:rgba(60,141,188,.8);color:#fff}.pace-center-radar-lightblue .pace .pace-activity,.pace-center-radar-lightblue .pace .pace-activity:before{border-color:#3c8dbc transparent transparent}.pace-center-simple-lightblue .pace{background:#fff;border-color:#3c8dbc}.pace-center-simple-lightblue .pace .pace-progress{background:#3c8dbc}.pace-material-lightblue .pace{color:#3c8dbc}.pace-corner-indicator-lightblue .pace .pace-activity{background:#3c8dbc}.pace-corner-indicator-lightblue .pace .pace-activity:after,.pace-corner-indicator-lightblue .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-lightblue .pace .pace-activity:before{border-right-color:rgba(60,141,188,.2);border-left-color:rgba(60,141,188,.2)}.pace-corner-indicator-lightblue .pace .pace-activity:after{border-top-color:rgba(60,141,188,.2);border-bottom-color:rgba(60,141,188,.2)}.pace-fill-left-lightblue .pace .pace-progress{background-color:rgba(60,141,188,.2)}.pace-flash-lightblue .pace .pace-progress{background:#3c8dbc}.pace-flash-lightblue .pace .pace-progress-inner{box-shadow:0 0 10px #3c8dbc,0 0 5px #3c8dbc}.pace-flash-lightblue .pace .pace-activity{border-top-color:#3c8dbc;border-left-color:#3c8dbc}.pace-loading-bar-lightblue .pace .pace-progress{background:#3c8dbc;color:#3c8dbc;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-lightblue .pace .pace-activity{box-shadow:inset 0 0 0 2px #3c8dbc,inset 0 0 0 7px #fff}.pace-mac-osx-lightblue .pace .pace-progress{background-color:#3c8dbc;box-shadow:inset -1px 0 #3c8dbc,inset 0 -1px #3c8dbc,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-lightblue .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-lightblue .pace-progress{color:#3c8dbc}.pace-navy .pace .pace-progress{background:#001f3f}.pace-barber-shop-navy .pace{background:#fff}.pace-barber-shop-navy .pace .pace-progress{background:#001f3f}.pace-barber-shop-navy .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-navy .pace .pace-progress:after{color:rgba(0,31,63,.2)}.pace-bounce-navy .pace .pace-activity{background:#001f3f}.pace-center-atom-navy .pace-progress{height:100px;width:80px}.pace-center-atom-navy .pace-progress:before{background:#001f3f;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-navy .pace-activity,.pace-center-atom-navy .pace-activity:after,.pace-center-atom-navy .pace-activity:before{border-color:#001f3f}.pace-center-circle-navy .pace .pace-progress{background:rgba(0,31,63,.8);color:#fff}.pace-center-radar-navy .pace .pace-activity,.pace-center-radar-navy .pace .pace-activity:before{border-color:#001f3f transparent transparent}.pace-center-simple-navy .pace{background:#fff;border-color:#001f3f}.pace-center-simple-navy .pace .pace-progress{background:#001f3f}.pace-material-navy .pace{color:#001f3f}.pace-corner-indicator-navy .pace .pace-activity{background:#001f3f}.pace-corner-indicator-navy .pace .pace-activity:after,.pace-corner-indicator-navy .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-navy .pace .pace-activity:before{border-right-color:rgba(0,31,63,.2);border-left-color:rgba(0,31,63,.2)}.pace-corner-indicator-navy .pace .pace-activity:after{border-top-color:rgba(0,31,63,.2);border-bottom-color:rgba(0,31,63,.2)}.pace-fill-left-navy .pace .pace-progress{background-color:rgba(0,31,63,.2)}.pace-flash-navy .pace .pace-progress{background:#001f3f}.pace-flash-navy .pace .pace-progress-inner{box-shadow:0 0 10px #001f3f,0 0 5px #001f3f}.pace-flash-navy .pace .pace-activity{border-top-color:#001f3f;border-left-color:#001f3f}.pace-loading-bar-navy .pace .pace-progress{background:#001f3f;color:#001f3f;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-navy .pace .pace-activity{box-shadow:inset 0 0 0 2px #001f3f,inset 0 0 0 7px #fff}.pace-mac-osx-navy .pace .pace-progress{background-color:#001f3f;box-shadow:inset -1px 0 #001f3f,inset 0 -1px #001f3f,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-navy .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-navy .pace-progress{color:#001f3f}.pace-olive .pace .pace-progress{background:#3d9970}.pace-barber-shop-olive .pace{background:#fff}.pace-barber-shop-olive .pace .pace-progress{background:#3d9970}.pace-barber-shop-olive .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-olive .pace .pace-progress:after{color:rgba(61,153,112,.2)}.pace-bounce-olive .pace .pace-activity{background:#3d9970}.pace-center-atom-olive .pace-progress{height:100px;width:80px}.pace-center-atom-olive .pace-progress:before{background:#3d9970;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-olive .pace-activity,.pace-center-atom-olive .pace-activity:after,.pace-center-atom-olive .pace-activity:before{border-color:#3d9970}.pace-center-circle-olive .pace .pace-progress{background:rgba(61,153,112,.8);color:#fff}.pace-center-radar-olive .pace .pace-activity,.pace-center-radar-olive .pace .pace-activity:before{border-color:#3d9970 transparent transparent}.pace-center-simple-olive .pace{background:#fff;border-color:#3d9970}.pace-center-simple-olive .pace .pace-progress{background:#3d9970}.pace-material-olive .pace{color:#3d9970}.pace-corner-indicator-olive .pace .pace-activity{background:#3d9970}.pace-corner-indicator-olive .pace .pace-activity:after,.pace-corner-indicator-olive .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-olive .pace .pace-activity:before{border-right-color:rgba(61,153,112,.2);border-left-color:rgba(61,153,112,.2)}.pace-corner-indicator-olive .pace .pace-activity:after{border-top-color:rgba(61,153,112,.2);border-bottom-color:rgba(61,153,112,.2)}.pace-fill-left-olive .pace .pace-progress{background-color:rgba(61,153,112,.2)}.pace-flash-olive .pace .pace-progress{background:#3d9970}.pace-flash-olive .pace .pace-progress-inner{box-shadow:0 0 10px #3d9970,0 0 5px #3d9970}.pace-flash-olive .pace .pace-activity{border-top-color:#3d9970;border-left-color:#3d9970}.pace-loading-bar-olive .pace .pace-progress{background:#3d9970;color:#3d9970;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-olive .pace .pace-activity{box-shadow:inset 0 0 0 2px #3d9970,inset 0 0 0 7px #fff}.pace-mac-osx-olive .pace .pace-progress{background-color:#3d9970;box-shadow:inset -1px 0 #3d9970,inset 0 -1px #3d9970,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-olive .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-olive .pace-progress{color:#3d9970}.pace-lime .pace .pace-progress{background:#01ff70}.pace-barber-shop-lime .pace{background:#2a2e30}.pace-barber-shop-lime .pace .pace-progress{background:#01ff70}.pace-barber-shop-lime .pace .pace-activity{background-image:linear-gradient(45deg,rgba(42,46,48,.2) 25%,transparent 0,transparent 50%,rgba(42,46,48,.2) 0,rgba(42,46,48,.2) 75%,transparent 0,transparent)}.pace-big-counter-lime .pace .pace-progress:after{color:rgba(1,255,112,.2)}.pace-bounce-lime .pace .pace-activity{background:#01ff70}.pace-center-atom-lime .pace-progress{height:100px;width:80px}.pace-center-atom-lime .pace-progress:before{background:#01ff70;color:#2a2e30;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-lime .pace-activity,.pace-center-atom-lime .pace-activity:after,.pace-center-atom-lime .pace-activity:before{border-color:#01ff70}.pace-center-circle-lime .pace .pace-progress{background:rgba(1,255,112,.8);color:#2a2e30}.pace-center-radar-lime .pace .pace-activity,.pace-center-radar-lime .pace .pace-activity:before{border-color:#01ff70 transparent transparent}.pace-center-simple-lime .pace{background:#2a2e30;border-color:#01ff70}.pace-center-simple-lime .pace .pace-progress{background:#01ff70}.pace-material-lime .pace{color:#01ff70}.pace-corner-indicator-lime .pace .pace-activity{background:#01ff70}.pace-corner-indicator-lime .pace .pace-activity:after,.pace-corner-indicator-lime .pace .pace-activity:before{border:5px solid #2a2e30}.pace-corner-indicator-lime .pace .pace-activity:before{border-right-color:rgba(1,255,112,.2);border-left-color:rgba(1,255,112,.2)}.pace-corner-indicator-lime .pace .pace-activity:after{border-top-color:rgba(1,255,112,.2);border-bottom-color:rgba(1,255,112,.2)}.pace-fill-left-lime .pace .pace-progress{background-color:rgba(1,255,112,.2)}.pace-flash-lime .pace .pace-progress{background:#01ff70}.pace-flash-lime .pace .pace-progress-inner{box-shadow:0 0 10px #01ff70,0 0 5px #01ff70}.pace-flash-lime .pace .pace-activity{border-top-color:#01ff70;border-left-color:#01ff70}.pace-loading-bar-lime .pace .pace-progress{background:#01ff70;color:#01ff70;box-shadow:120px 0 #2a2e30,240px 0 #2a2e30}.pace-loading-bar-lime .pace .pace-activity{box-shadow:inset 0 0 0 2px #01ff70,inset 0 0 0 7px #2a2e30}.pace-mac-osx-lime .pace .pace-progress{background-color:#01ff70;box-shadow:inset -1px 0 #01ff70,inset 0 -1px #01ff70,inset 0 2px rgba(42,46,48,.5),inset 0 6px rgba(42,46,48,.3)}.pace-mac-osx-lime .pace .pace-activity{background-image:radial-gradient(rgba(42,46,48,.65) 0,rgba(42,46,48,.15) 100%);height:12px}.pace-progress-color-lime .pace-progress{color:#01ff70}.pace-fuchsia .pace .pace-progress{background:#f012be}.pace-barber-shop-fuchsia .pace{background:#fff}.pace-barber-shop-fuchsia .pace .pace-progress{background:#f012be}.pace-barber-shop-fuchsia .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-fuchsia .pace .pace-progress:after{color:rgba(240,18,190,.2)}.pace-bounce-fuchsia .pace .pace-activity{background:#f012be}.pace-center-atom-fuchsia .pace-progress{height:100px;width:80px}.pace-center-atom-fuchsia .pace-progress:before{background:#f012be;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-fuchsia .pace-activity,.pace-center-atom-fuchsia .pace-activity:after,.pace-center-atom-fuchsia .pace-activity:before{border-color:#f012be}.pace-center-circle-fuchsia .pace .pace-progress{background:rgba(240,18,190,.8);color:#fff}.pace-center-radar-fuchsia .pace .pace-activity,.pace-center-radar-fuchsia .pace .pace-activity:before{border-color:#f012be transparent transparent}.pace-center-simple-fuchsia .pace{background:#fff;border-color:#f012be}.pace-center-simple-fuchsia .pace .pace-progress{background:#f012be}.pace-material-fuchsia .pace{color:#f012be}.pace-corner-indicator-fuchsia .pace .pace-activity{background:#f012be}.pace-corner-indicator-fuchsia .pace .pace-activity:after,.pace-corner-indicator-fuchsia .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-fuchsia .pace .pace-activity:before{border-right-color:rgba(240,18,190,.2);border-left-color:rgba(240,18,190,.2)}.pace-corner-indicator-fuchsia .pace .pace-activity:after{border-top-color:rgba(240,18,190,.2);border-bottom-color:rgba(240,18,190,.2)}.pace-fill-left-fuchsia .pace .pace-progress{background-color:rgba(240,18,190,.2)}.pace-flash-fuchsia .pace .pace-progress{background:#f012be}.pace-flash-fuchsia .pace .pace-progress-inner{box-shadow:0 0 10px #f012be,0 0 5px #f012be}.pace-flash-fuchsia .pace .pace-activity{border-top-color:#f012be;border-left-color:#f012be}.pace-loading-bar-fuchsia .pace .pace-progress{background:#f012be;color:#f012be;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-fuchsia .pace .pace-activity{box-shadow:inset 0 0 0 2px #f012be,inset 0 0 0 7px #fff}.pace-mac-osx-fuchsia .pace .pace-progress{background-color:#f012be;box-shadow:inset -1px 0 #f012be,inset 0 -1px #f012be,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-fuchsia .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-fuchsia .pace-progress{color:#f012be}.pace-maroon .pace .pace-progress{background:#d81b60}.pace-barber-shop-maroon .pace{background:#fff}.pace-barber-shop-maroon .pace .pace-progress{background:#d81b60}.pace-barber-shop-maroon .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-maroon .pace .pace-progress:after{color:rgba(216,27,96,.2)}.pace-bounce-maroon .pace .pace-activity{background:#d81b60}.pace-center-atom-maroon .pace-progress{height:100px;width:80px}.pace-center-atom-maroon .pace-progress:before{background:#d81b60;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-maroon .pace-activity,.pace-center-atom-maroon .pace-activity:after,.pace-center-atom-maroon .pace-activity:before{border-color:#d81b60}.pace-center-circle-maroon .pace .pace-progress{background:rgba(216,27,96,.8);color:#fff}.pace-center-radar-maroon .pace .pace-activity,.pace-center-radar-maroon .pace .pace-activity:before{border-color:#d81b60 transparent transparent}.pace-center-simple-maroon .pace{background:#fff;border-color:#d81b60}.pace-center-simple-maroon .pace .pace-progress{background:#d81b60}.pace-material-maroon .pace{color:#d81b60}.pace-corner-indicator-maroon .pace .pace-activity{background:#d81b60}.pace-corner-indicator-maroon .pace .pace-activity:after,.pace-corner-indicator-maroon .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-maroon .pace .pace-activity:before{border-right-color:rgba(216,27,96,.2);border-left-color:rgba(216,27,96,.2)}.pace-corner-indicator-maroon .pace .pace-activity:after{border-top-color:rgba(216,27,96,.2);border-bottom-color:rgba(216,27,96,.2)}.pace-fill-left-maroon .pace .pace-progress{background-color:rgba(216,27,96,.2)}.pace-flash-maroon .pace .pace-progress{background:#d81b60}.pace-flash-maroon .pace .pace-progress-inner{box-shadow:0 0 10px #d81b60,0 0 5px #d81b60}.pace-flash-maroon .pace .pace-activity{border-top-color:#d81b60;border-left-color:#d81b60}.pace-loading-bar-maroon .pace .pace-progress{background:#d81b60;color:#d81b60;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-maroon .pace .pace-activity{box-shadow:inset 0 0 0 2px #d81b60,inset 0 0 0 7px #fff}.pace-mac-osx-maroon .pace .pace-progress{background-color:#d81b60;box-shadow:inset -1px 0 #d81b60,inset 0 -1px #d81b60,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-maroon .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-maroon .pace-progress{color:#d81b60}.pace-blue .pace .pace-progress{background:#3085d6}.pace-barber-shop-blue .pace{background:#fff}.pace-barber-shop-blue .pace .pace-progress{background:#3085d6}.pace-barber-shop-blue .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-blue .pace .pace-progress:after{color:rgba(48,133,214,.2)}.pace-bounce-blue .pace .pace-activity{background:#3085d6}.pace-center-atom-blue .pace-progress{height:100px;width:80px}.pace-center-atom-blue .pace-progress:before{background:#3085d6;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-blue .pace-activity,.pace-center-atom-blue .pace-activity:after,.pace-center-atom-blue .pace-activity:before{border-color:#3085d6}.pace-center-circle-blue .pace .pace-progress{background:rgba(48,133,214,.8);color:#fff}.pace-center-radar-blue .pace .pace-activity,.pace-center-radar-blue .pace .pace-activity:before{border-color:#3085d6 transparent transparent}.pace-center-simple-blue .pace{background:#fff;border-color:#3085d6}.pace-center-simple-blue .pace .pace-progress{background:#3085d6}.pace-material-blue .pace{color:#3085d6}.pace-corner-indicator-blue .pace .pace-activity{background:#3085d6}.pace-corner-indicator-blue .pace .pace-activity:after,.pace-corner-indicator-blue .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-blue .pace .pace-activity:before{border-right-color:rgba(48,133,214,.2);border-left-color:rgba(48,133,214,.2)}.pace-corner-indicator-blue .pace .pace-activity:after{border-top-color:rgba(48,133,214,.2);border-bottom-color:rgba(48,133,214,.2)}.pace-fill-left-blue .pace .pace-progress{background-color:rgba(48,133,214,.2)}.pace-flash-blue .pace .pace-progress{background:#3085d6}.pace-flash-blue .pace .pace-progress-inner{box-shadow:0 0 10px #3085d6,0 0 5px #3085d6}.pace-flash-blue .pace .pace-activity{border-top-color:#3085d6;border-left-color:#3085d6}.pace-loading-bar-blue .pace .pace-progress{background:#3085d6;color:#3085d6;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-blue .pace .pace-activity{box-shadow:inset 0 0 0 2px #3085d6,inset 0 0 0 7px #fff}.pace-mac-osx-blue .pace .pace-progress{background-color:#3085d6;box-shadow:inset -1px 0 #3085d6,inset 0 -1px #3085d6,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-blue .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-blue .pace-progress{color:#3085d6}.pace-indigo .pace .pace-progress{background:#5c6bc6}.pace-barber-shop-indigo .pace{background:#fff}.pace-barber-shop-indigo .pace .pace-progress{background:#5c6bc6}.pace-barber-shop-indigo .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-indigo .pace .pace-progress:after{color:rgba(92,107,198,.2)}.pace-bounce-indigo .pace .pace-activity{background:#5c6bc6}.pace-center-atom-indigo .pace-progress{height:100px;width:80px}.pace-center-atom-indigo .pace-progress:before{background:#5c6bc6;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-indigo .pace-activity,.pace-center-atom-indigo .pace-activity:after,.pace-center-atom-indigo .pace-activity:before{border-color:#5c6bc6}.pace-center-circle-indigo .pace .pace-progress{background:rgba(92,107,198,.8);color:#fff}.pace-center-radar-indigo .pace .pace-activity,.pace-center-radar-indigo .pace .pace-activity:before{border-color:#5c6bc6 transparent transparent}.pace-center-simple-indigo .pace{background:#fff;border-color:#5c6bc6}.pace-center-simple-indigo .pace .pace-progress{background:#5c6bc6}.pace-material-indigo .pace{color:#5c6bc6}.pace-corner-indicator-indigo .pace .pace-activity{background:#5c6bc6}.pace-corner-indicator-indigo .pace .pace-activity:after,.pace-corner-indicator-indigo .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-indigo .pace .pace-activity:before{border-right-color:rgba(92,107,198,.2);border-left-color:rgba(92,107,198,.2)}.pace-corner-indicator-indigo .pace .pace-activity:after{border-top-color:rgba(92,107,198,.2);border-bottom-color:rgba(92,107,198,.2)}.pace-fill-left-indigo .pace .pace-progress{background-color:rgba(92,107,198,.2)}.pace-flash-indigo .pace .pace-progress{background:#5c6bc6}.pace-flash-indigo .pace .pace-progress-inner{box-shadow:0 0 10px #5c6bc6,0 0 5px #5c6bc6}.pace-flash-indigo .pace .pace-activity{border-top-color:#5c6bc6;border-left-color:#5c6bc6}.pace-loading-bar-indigo .pace .pace-progress{background:#5c6bc6;color:#5c6bc6;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-indigo .pace .pace-activity{box-shadow:inset 0 0 0 2px #5c6bc6,inset 0 0 0 7px #fff}.pace-mac-osx-indigo .pace .pace-progress{background-color:#5c6bc6;box-shadow:inset -1px 0 #5c6bc6,inset 0 -1px #5c6bc6,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-indigo .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-indigo .pace-progress{color:#5c6bc6}.pace-purple .pace .pace-progress{background:#6f42c1}.pace-barber-shop-purple .pace{background:#fff}.pace-barber-shop-purple .pace .pace-progress{background:#6f42c1}.pace-barber-shop-purple .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-purple .pace .pace-progress:after{color:rgba(111,66,193,.2)}.pace-bounce-purple .pace .pace-activity{background:#6f42c1}.pace-center-atom-purple .pace-progress{height:100px;width:80px}.pace-center-atom-purple .pace-progress:before{background:#6f42c1;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-purple .pace-activity,.pace-center-atom-purple .pace-activity:after,.pace-center-atom-purple .pace-activity:before{border-color:#6f42c1}.pace-center-circle-purple .pace .pace-progress{background:rgba(111,66,193,.8);color:#fff}.pace-center-radar-purple .pace .pace-activity,.pace-center-radar-purple .pace .pace-activity:before{border-color:#6f42c1 transparent transparent}.pace-center-simple-purple .pace{background:#fff;border-color:#6f42c1}.pace-center-simple-purple .pace .pace-progress{background:#6f42c1}.pace-material-purple .pace{color:#6f42c1}.pace-corner-indicator-purple .pace .pace-activity{background:#6f42c1}.pace-corner-indicator-purple .pace .pace-activity:after,.pace-corner-indicator-purple .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-purple .pace .pace-activity:before{border-right-color:rgba(111,66,193,.2);border-left-color:rgba(111,66,193,.2)}.pace-corner-indicator-purple .pace .pace-activity:after{border-top-color:rgba(111,66,193,.2);border-bottom-color:rgba(111,66,193,.2)}.pace-fill-left-purple .pace .pace-progress{background-color:rgba(111,66,193,.2)}.pace-flash-purple .pace .pace-progress{background:#6f42c1}.pace-flash-purple .pace .pace-progress-inner{box-shadow:0 0 10px #6f42c1,0 0 5px #6f42c1}.pace-flash-purple .pace .pace-activity{border-top-color:#6f42c1;border-left-color:#6f42c1}.pace-loading-bar-purple .pace .pace-progress{background:#6f42c1;color:#6f42c1;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-purple .pace .pace-activity{box-shadow:inset 0 0 0 2px #6f42c1,inset 0 0 0 7px #fff}.pace-mac-osx-purple .pace .pace-progress{background-color:#6f42c1;box-shadow:inset -1px 0 #6f42c1,inset 0 -1px #6f42c1,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-purple .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-purple .pace-progress{color:#6f42c1}.pace-pink .pace .pace-progress{background:#ff8acc}.pace-barber-shop-pink .pace{background:#2a2e30}.pace-barber-shop-pink .pace .pace-progress{background:#ff8acc}.pace-barber-shop-pink .pace .pace-activity{background-image:linear-gradient(45deg,rgba(42,46,48,.2) 25%,transparent 0,transparent 50%,rgba(42,46,48,.2) 0,rgba(42,46,48,.2) 75%,transparent 0,transparent)}.pace-big-counter-pink .pace .pace-progress:after{color:rgba(255,138,204,.2)}.pace-bounce-pink .pace .pace-activity{background:#ff8acc}.pace-center-atom-pink .pace-progress{height:100px;width:80px}.pace-center-atom-pink .pace-progress:before{background:#ff8acc;color:#2a2e30;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-pink .pace-activity,.pace-center-atom-pink .pace-activity:after,.pace-center-atom-pink .pace-activity:before{border-color:#ff8acc}.pace-center-circle-pink .pace .pace-progress{background:rgba(255,138,204,.8);color:#2a2e30}.pace-center-radar-pink .pace .pace-activity,.pace-center-radar-pink .pace .pace-activity:before{border-color:#ff8acc transparent transparent}.pace-center-simple-pink .pace{background:#2a2e30;border-color:#ff8acc}.pace-center-simple-pink .pace .pace-progress{background:#ff8acc}.pace-material-pink .pace{color:#ff8acc}.pace-corner-indicator-pink .pace .pace-activity{background:#ff8acc}.pace-corner-indicator-pink .pace .pace-activity:after,.pace-corner-indicator-pink .pace .pace-activity:before{border:5px solid #2a2e30}.pace-corner-indicator-pink .pace .pace-activity:before{border-right-color:rgba(255,138,204,.2);border-left-color:rgba(255,138,204,.2)}.pace-corner-indicator-pink .pace .pace-activity:after{border-top-color:rgba(255,138,204,.2);border-bottom-color:rgba(255,138,204,.2)}.pace-fill-left-pink .pace .pace-progress{background-color:rgba(255,138,204,.2)}.pace-flash-pink .pace .pace-progress{background:#ff8acc}.pace-flash-pink .pace .pace-progress-inner{box-shadow:0 0 10px #ff8acc,0 0 5px #ff8acc}.pace-flash-pink .pace .pace-activity{border-top-color:#ff8acc;border-left-color:#ff8acc}.pace-loading-bar-pink .pace .pace-progress{background:#ff8acc;color:#ff8acc;box-shadow:120px 0 #2a2e30,240px 0 #2a2e30}.pace-loading-bar-pink .pace .pace-activity{box-shadow:inset 0 0 0 2px #ff8acc,inset 0 0 0 7px #2a2e30}.pace-mac-osx-pink .pace .pace-progress{background-color:#ff8acc;box-shadow:inset -1px 0 #ff8acc,inset 0 -1px #ff8acc,inset 0 2px rgba(42,46,48,.5),inset 0 6px rgba(42,46,48,.3)}.pace-mac-osx-pink .pace .pace-activity{background-image:radial-gradient(rgba(42,46,48,.65) 0,rgba(42,46,48,.15) 100%);height:12px}.pace-progress-color-pink .pace-progress{color:#ff8acc}.pace-red .pace .pace-progress{background:#ea5455}.pace-barber-shop-red .pace{background:#fff}.pace-barber-shop-red .pace .pace-progress{background:#ea5455}.pace-barber-shop-red .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-red .pace .pace-progress:after{color:rgba(234,84,85,.2)}.pace-bounce-red .pace .pace-activity{background:#ea5455}.pace-center-atom-red .pace-progress{height:100px;width:80px}.pace-center-atom-red .pace-progress:before{background:#ea5455;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-red .pace-activity,.pace-center-atom-red .pace-activity:after,.pace-center-atom-red .pace-activity:before{border-color:#ea5455}.pace-center-circle-red .pace .pace-progress{background:rgba(234,84,85,.8);color:#fff}.pace-center-radar-red .pace .pace-activity,.pace-center-radar-red .pace .pace-activity:before{border-color:#ea5455 transparent transparent}.pace-center-simple-red .pace{background:#fff;border-color:#ea5455}.pace-center-simple-red .pace .pace-progress{background:#ea5455}.pace-material-red .pace{color:#ea5455}.pace-corner-indicator-red .pace .pace-activity{background:#ea5455}.pace-corner-indicator-red .pace .pace-activity:after,.pace-corner-indicator-red .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-red .pace .pace-activity:before{border-right-color:rgba(234,84,85,.2);border-left-color:rgba(234,84,85,.2)}.pace-corner-indicator-red .pace .pace-activity:after{border-top-color:rgba(234,84,85,.2);border-bottom-color:rgba(234,84,85,.2)}.pace-fill-left-red .pace .pace-progress{background-color:rgba(234,84,85,.2)}.pace-flash-red .pace .pace-progress{background:#ea5455}.pace-flash-red .pace .pace-progress-inner{box-shadow:0 0 10px #ea5455,0 0 5px #ea5455}.pace-flash-red .pace .pace-activity{border-top-color:#ea5455;border-left-color:#ea5455}.pace-loading-bar-red .pace .pace-progress{background:#ea5455;color:#ea5455;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-red .pace .pace-activity{box-shadow:inset 0 0 0 2px #ea5455,inset 0 0 0 7px #fff}.pace-mac-osx-red .pace .pace-progress{background-color:#ea5455;box-shadow:inset -1px 0 #ea5455,inset 0 -1px #ea5455,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-red .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-red .pace-progress{color:#ea5455}.pace-orange .pace .pace-progress{background:#dda451}.pace-barber-shop-orange .pace{background:#2a2e30}.pace-barber-shop-orange .pace .pace-progress{background:#dda451}.pace-barber-shop-orange .pace .pace-activity{background-image:linear-gradient(45deg,rgba(42,46,48,.2) 25%,transparent 0,transparent 50%,rgba(42,46,48,.2) 0,rgba(42,46,48,.2) 75%,transparent 0,transparent)}.pace-big-counter-orange .pace .pace-progress:after{color:rgba(221,164,81,.2)}.pace-bounce-orange .pace .pace-activity{background:#dda451}.pace-center-atom-orange .pace-progress{height:100px;width:80px}.pace-center-atom-orange .pace-progress:before{background:#dda451;color:#2a2e30;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-orange .pace-activity,.pace-center-atom-orange .pace-activity:after,.pace-center-atom-orange .pace-activity:before{border-color:#dda451}.pace-center-circle-orange .pace .pace-progress{background:rgba(221,164,81,.8);color:#2a2e30}.pace-center-radar-orange .pace .pace-activity,.pace-center-radar-orange .pace .pace-activity:before{border-color:#dda451 transparent transparent}.pace-center-simple-orange .pace{background:#2a2e30;border-color:#dda451}.pace-center-simple-orange .pace .pace-progress{background:#dda451}.pace-material-orange .pace{color:#dda451}.pace-corner-indicator-orange .pace .pace-activity{background:#dda451}.pace-corner-indicator-orange .pace .pace-activity:after,.pace-corner-indicator-orange .pace .pace-activity:before{border:5px solid #2a2e30}.pace-corner-indicator-orange .pace .pace-activity:before{border-right-color:rgba(221,164,81,.2);border-left-color:rgba(221,164,81,.2)}.pace-corner-indicator-orange .pace .pace-activity:after{border-top-color:rgba(221,164,81,.2);border-bottom-color:rgba(221,164,81,.2)}.pace-fill-left-orange .pace .pace-progress{background-color:rgba(221,164,81,.2)}.pace-flash-orange .pace .pace-progress{background:#dda451}.pace-flash-orange .pace .pace-progress-inner{box-shadow:0 0 10px #dda451,0 0 5px #dda451}.pace-flash-orange .pace .pace-activity{border-top-color:#dda451;border-left-color:#dda451}.pace-loading-bar-orange .pace .pace-progress{background:#dda451;color:#dda451;box-shadow:120px 0 #2a2e30,240px 0 #2a2e30}.pace-loading-bar-orange .pace .pace-activity{box-shadow:inset 0 0 0 2px #dda451,inset 0 0 0 7px #2a2e30}.pace-mac-osx-orange .pace .pace-progress{background-color:#dda451;box-shadow:inset -1px 0 #dda451,inset 0 -1px #dda451,inset 0 2px rgba(42,46,48,.5),inset 0 6px rgba(42,46,48,.3)}.pace-mac-osx-orange .pace .pace-activity{background-image:radial-gradient(rgba(42,46,48,.65) 0,rgba(42,46,48,.15) 100%);height:12px}.pace-progress-color-orange .pace-progress{color:#dda451}.pace-yellow .pace .pace-progress{background:#edc30e}.pace-barber-shop-yellow .pace{background:#2a2e30}.pace-barber-shop-yellow .pace .pace-progress{background:#edc30e}.pace-barber-shop-yellow .pace .pace-activity{background-image:linear-gradient(45deg,rgba(42,46,48,.2) 25%,transparent 0,transparent 50%,rgba(42,46,48,.2) 0,rgba(42,46,48,.2) 75%,transparent 0,transparent)}.pace-big-counter-yellow .pace .pace-progress:after{color:rgba(237,195,14,.2)}.pace-bounce-yellow .pace .pace-activity{background:#edc30e}.pace-center-atom-yellow .pace-progress{height:100px;width:80px}.pace-center-atom-yellow .pace-progress:before{background:#edc30e;color:#2a2e30;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-yellow .pace-activity,.pace-center-atom-yellow .pace-activity:after,.pace-center-atom-yellow .pace-activity:before{border-color:#edc30e}.pace-center-circle-yellow .pace .pace-progress{background:rgba(237,195,14,.8);color:#2a2e30}.pace-center-radar-yellow .pace .pace-activity,.pace-center-radar-yellow .pace .pace-activity:before{border-color:#edc30e transparent transparent}.pace-center-simple-yellow .pace{background:#2a2e30;border-color:#edc30e}.pace-center-simple-yellow .pace .pace-progress{background:#edc30e}.pace-material-yellow .pace{color:#edc30e}.pace-corner-indicator-yellow .pace .pace-activity{background:#edc30e}.pace-corner-indicator-yellow .pace .pace-activity:after,.pace-corner-indicator-yellow .pace .pace-activity:before{border:5px solid #2a2e30}.pace-corner-indicator-yellow .pace .pace-activity:before{border-right-color:rgba(237,195,14,.2);border-left-color:rgba(237,195,14,.2)}.pace-corner-indicator-yellow .pace .pace-activity:after{border-top-color:rgba(237,195,14,.2);border-bottom-color:rgba(237,195,14,.2)}.pace-fill-left-yellow .pace .pace-progress{background-color:rgba(237,195,14,.2)}.pace-flash-yellow .pace .pace-progress{background:#edc30e}.pace-flash-yellow .pace .pace-progress-inner{box-shadow:0 0 10px #edc30e,0 0 5px #edc30e}.pace-flash-yellow .pace .pace-activity{border-top-color:#edc30e;border-left-color:#edc30e}.pace-loading-bar-yellow .pace .pace-progress{background:#edc30e;color:#edc30e;box-shadow:120px 0 #2a2e30,240px 0 #2a2e30}.pace-loading-bar-yellow .pace .pace-activity{box-shadow:inset 0 0 0 2px #edc30e,inset 0 0 0 7px #2a2e30}.pace-mac-osx-yellow .pace .pace-progress{background-color:#edc30e;box-shadow:inset -1px 0 #edc30e,inset 0 -1px #edc30e,inset 0 2px rgba(42,46,48,.5),inset 0 6px rgba(42,46,48,.3)}.pace-mac-osx-yellow .pace .pace-activity{background-image:radial-gradient(rgba(42,46,48,.65) 0,rgba(42,46,48,.15) 100%);height:12px}.pace-progress-color-yellow .pace-progress{color:#edc30e}.pace-green .pace .pace-progress{background:#21b978}.pace-barber-shop-green .pace{background:#fff}.pace-barber-shop-green .pace .pace-progress{background:#21b978}.pace-barber-shop-green .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-green .pace .pace-progress:after{color:rgba(33,185,120,.2)}.pace-bounce-green .pace .pace-activity{background:#21b978}.pace-center-atom-green .pace-progress{height:100px;width:80px}.pace-center-atom-green .pace-progress:before{background:#21b978;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-green .pace-activity,.pace-center-atom-green .pace-activity:after,.pace-center-atom-green .pace-activity:before{border-color:#21b978}.pace-center-circle-green .pace .pace-progress{background:rgba(33,185,120,.8);color:#fff}.pace-center-radar-green .pace .pace-activity,.pace-center-radar-green .pace .pace-activity:before{border-color:#21b978 transparent transparent}.pace-center-simple-green .pace{background:#fff;border-color:#21b978}.pace-center-simple-green .pace .pace-progress{background:#21b978}.pace-material-green .pace{color:#21b978}.pace-corner-indicator-green .pace .pace-activity{background:#21b978}.pace-corner-indicator-green .pace .pace-activity:after,.pace-corner-indicator-green .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-green .pace .pace-activity:before{border-right-color:rgba(33,185,120,.2);border-left-color:rgba(33,185,120,.2)}.pace-corner-indicator-green .pace .pace-activity:after{border-top-color:rgba(33,185,120,.2);border-bottom-color:rgba(33,185,120,.2)}.pace-fill-left-green .pace .pace-progress{background-color:rgba(33,185,120,.2)}.pace-flash-green .pace .pace-progress{background:#21b978}.pace-flash-green .pace .pace-progress-inner{box-shadow:0 0 10px #21b978,0 0 5px #21b978}.pace-flash-green .pace .pace-activity{border-top-color:#21b978;border-left-color:#21b978}.pace-loading-bar-green .pace .pace-progress{background:#21b978;color:#21b978;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-green .pace .pace-activity{box-shadow:inset 0 0 0 2px #21b978,inset 0 0 0 7px #fff}.pace-mac-osx-green .pace .pace-progress{background-color:#21b978;box-shadow:inset -1px 0 #21b978,inset 0 -1px #21b978,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-green .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-green .pace-progress{color:#21b978}.pace-teal .pace .pace-progress{background:#20c997}.pace-barber-shop-teal .pace{background:#fff}.pace-barber-shop-teal .pace .pace-progress{background:#20c997}.pace-barber-shop-teal .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-teal .pace .pace-progress:after{color:rgba(32,201,151,.2)}.pace-bounce-teal .pace .pace-activity{background:#20c997}.pace-center-atom-teal .pace-progress{height:100px;width:80px}.pace-center-atom-teal .pace-progress:before{background:#20c997;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-teal .pace-activity,.pace-center-atom-teal .pace-activity:after,.pace-center-atom-teal .pace-activity:before{border-color:#20c997}.pace-center-circle-teal .pace .pace-progress{background:rgba(32,201,151,.8);color:#fff}.pace-center-radar-teal .pace .pace-activity,.pace-center-radar-teal .pace .pace-activity:before{border-color:#20c997 transparent transparent}.pace-center-simple-teal .pace{background:#fff;border-color:#20c997}.pace-center-simple-teal .pace .pace-progress{background:#20c997}.pace-material-teal .pace{color:#20c997}.pace-corner-indicator-teal .pace .pace-activity{background:#20c997}.pace-corner-indicator-teal .pace .pace-activity:after,.pace-corner-indicator-teal .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-teal .pace .pace-activity:before{border-right-color:rgba(32,201,151,.2);border-left-color:rgba(32,201,151,.2)}.pace-corner-indicator-teal .pace .pace-activity:after{border-top-color:rgba(32,201,151,.2);border-bottom-color:rgba(32,201,151,.2)}.pace-fill-left-teal .pace .pace-progress{background-color:rgba(32,201,151,.2)}.pace-flash-teal .pace .pace-progress{background:#20c997}.pace-flash-teal .pace .pace-progress-inner{box-shadow:0 0 10px #20c997,0 0 5px #20c997}.pace-flash-teal .pace .pace-activity{border-top-color:#20c997;border-left-color:#20c997}.pace-loading-bar-teal .pace .pace-progress{background:#20c997;color:#20c997;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-teal .pace .pace-activity{box-shadow:inset 0 0 0 2px #20c997,inset 0 0 0 7px #fff}.pace-mac-osx-teal .pace .pace-progress{background-color:#20c997;box-shadow:inset -1px 0 #20c997,inset 0 -1px #20c997,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-teal .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-teal .pace-progress{color:#20c997}.pace-cyan .pace .pace-progress{background:#7367f0}.pace-barber-shop-cyan .pace{background:#fff}.pace-barber-shop-cyan .pace .pace-progress{background:#7367f0}.pace-barber-shop-cyan .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-cyan .pace .pace-progress:after{color:rgba(115,103,240,.2)}.pace-bounce-cyan .pace .pace-activity{background:#7367f0}.pace-center-atom-cyan .pace-progress{height:100px;width:80px}.pace-center-atom-cyan .pace-progress:before{background:#7367f0;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-cyan .pace-activity,.pace-center-atom-cyan .pace-activity:after,.pace-center-atom-cyan .pace-activity:before{border-color:#7367f0}.pace-center-circle-cyan .pace .pace-progress{background:rgba(115,103,240,.8);color:#fff}.pace-center-radar-cyan .pace .pace-activity,.pace-center-radar-cyan .pace .pace-activity:before{border-color:#7367f0 transparent transparent}.pace-center-simple-cyan .pace{background:#fff;border-color:#7367f0}.pace-center-simple-cyan .pace .pace-progress{background:#7367f0}.pace-material-cyan .pace{color:#7367f0}.pace-corner-indicator-cyan .pace .pace-activity{background:#7367f0}.pace-corner-indicator-cyan .pace .pace-activity:after,.pace-corner-indicator-cyan .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-cyan .pace .pace-activity:before{border-right-color:rgba(115,103,240,.2);border-left-color:rgba(115,103,240,.2)}.pace-corner-indicator-cyan .pace .pace-activity:after{border-top-color:rgba(115,103,240,.2);border-bottom-color:rgba(115,103,240,.2)}.pace-fill-left-cyan .pace .pace-progress{background-color:rgba(115,103,240,.2)}.pace-flash-cyan .pace .pace-progress{background:#7367f0}.pace-flash-cyan .pace .pace-progress-inner{box-shadow:0 0 10px #7367f0,0 0 5px #7367f0}.pace-flash-cyan .pace .pace-activity{border-top-color:#7367f0;border-left-color:#7367f0}.pace-loading-bar-cyan .pace .pace-progress{background:#7367f0;color:#7367f0;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-cyan .pace .pace-activity{box-shadow:inset 0 0 0 2px #7367f0,inset 0 0 0 7px #fff}.pace-mac-osx-cyan .pace .pace-progress{background-color:#7367f0;box-shadow:inset -1px 0 #7367f0,inset 0 -1px #7367f0,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-cyan .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-cyan .pace-progress{color:#7367f0}.pace-white .pace .pace-progress{background:#fff}.pace-barber-shop-white .pace{background:#2a2e30}.pace-barber-shop-white .pace .pace-progress{background:#fff}.pace-barber-shop-white .pace .pace-activity{background-image:linear-gradient(45deg,rgba(42,46,48,.2) 25%,transparent 0,transparent 50%,rgba(42,46,48,.2) 0,rgba(42,46,48,.2) 75%,transparent 0,transparent)}.pace-big-counter-white .pace .pace-progress:after{color:hsla(0,0%,100%,.2)}.pace-bounce-white .pace .pace-activity{background:#fff}.pace-center-atom-white .pace-progress{height:100px;width:80px}.pace-center-atom-white .pace-progress:before{background:#fff;color:#2a2e30;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-white .pace-activity,.pace-center-atom-white .pace-activity:after,.pace-center-atom-white .pace-activity:before{border-color:#fff}.pace-center-circle-white .pace .pace-progress{background:hsla(0,0%,100%,.8);color:#2a2e30}.pace-center-radar-white .pace .pace-activity,.pace-center-radar-white .pace .pace-activity:before{border-color:#fff transparent transparent}.pace-center-simple-white .pace{background:#2a2e30;border-color:#fff}.pace-center-simple-white .pace .pace-progress{background:#fff}.pace-material-white .pace{color:#fff}.pace-corner-indicator-white .pace .pace-activity{background:#fff}.pace-corner-indicator-white .pace .pace-activity:after,.pace-corner-indicator-white .pace .pace-activity:before{border:5px solid #2a2e30}.pace-corner-indicator-white .pace .pace-activity:before{border-right-color:hsla(0,0%,100%,.2);border-left-color:hsla(0,0%,100%,.2)}.pace-corner-indicator-white .pace .pace-activity:after{border-top-color:hsla(0,0%,100%,.2);border-bottom-color:hsla(0,0%,100%,.2)}.pace-fill-left-white .pace .pace-progress{background-color:hsla(0,0%,100%,.2)}.pace-flash-white .pace .pace-progress{background:#fff}.pace-flash-white .pace .pace-progress-inner{box-shadow:0 0 10px #fff,0 0 5px #fff}.pace-flash-white .pace .pace-activity{border-top-color:#fff;border-left-color:#fff}.pace-loading-bar-white .pace .pace-progress{background:#fff;color:#fff;box-shadow:120px 0 #2a2e30,240px 0 #2a2e30}.pace-loading-bar-white .pace .pace-activity{box-shadow:inset 0 0 0 2px #fff,inset 0 0 0 7px #2a2e30}.pace-mac-osx-white .pace .pace-progress{background-color:#fff;box-shadow:inset -1px 0 #fff,inset 0 -1px #fff,inset 0 2px rgba(42,46,48,.5),inset 0 6px rgba(42,46,48,.3)}.pace-mac-osx-white .pace .pace-activity{background-image:radial-gradient(rgba(42,46,48,.65) 0,rgba(42,46,48,.15) 100%);height:12px}.pace-progress-color-white .pace-progress{color:#fff}.pace-gray .pace .pace-progress{background:#b8c2cc}.pace-barber-shop-gray .pace{background:#2a2e30}.pace-barber-shop-gray .pace .pace-progress{background:#b8c2cc}.pace-barber-shop-gray .pace .pace-activity{background-image:linear-gradient(45deg,rgba(42,46,48,.2) 25%,transparent 0,transparent 50%,rgba(42,46,48,.2) 0,rgba(42,46,48,.2) 75%,transparent 0,transparent)}.pace-big-counter-gray .pace .pace-progress:after{color:rgba(184,194,204,.2)}.pace-bounce-gray .pace .pace-activity{background:#b8c2cc}.pace-center-atom-gray .pace-progress{height:100px;width:80px}.pace-center-atom-gray .pace-progress:before{background:#b8c2cc;color:#2a2e30;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-gray .pace-activity,.pace-center-atom-gray .pace-activity:after,.pace-center-atom-gray .pace-activity:before{border-color:#b8c2cc}.pace-center-circle-gray .pace .pace-progress{background:rgba(184,194,204,.8);color:#2a2e30}.pace-center-radar-gray .pace .pace-activity,.pace-center-radar-gray .pace .pace-activity:before{border-color:#b8c2cc transparent transparent}.pace-center-simple-gray .pace{background:#2a2e30;border-color:#b8c2cc}.pace-center-simple-gray .pace .pace-progress{background:#b8c2cc}.pace-material-gray .pace{color:#b8c2cc}.pace-corner-indicator-gray .pace .pace-activity{background:#b8c2cc}.pace-corner-indicator-gray .pace .pace-activity:after,.pace-corner-indicator-gray .pace .pace-activity:before{border:5px solid #2a2e30}.pace-corner-indicator-gray .pace .pace-activity:before{border-right-color:rgba(184,194,204,.2);border-left-color:rgba(184,194,204,.2)}.pace-corner-indicator-gray .pace .pace-activity:after{border-top-color:rgba(184,194,204,.2);border-bottom-color:rgba(184,194,204,.2)}.pace-fill-left-gray .pace .pace-progress{background-color:rgba(184,194,204,.2)}.pace-flash-gray .pace .pace-progress{background:#b8c2cc}.pace-flash-gray .pace .pace-progress-inner{box-shadow:0 0 10px #b8c2cc,0 0 5px #b8c2cc}.pace-flash-gray .pace .pace-activity{border-top-color:#b8c2cc;border-left-color:#b8c2cc}.pace-loading-bar-gray .pace .pace-progress{background:#b8c2cc;color:#b8c2cc;box-shadow:120px 0 #2a2e30,240px 0 #2a2e30}.pace-loading-bar-gray .pace .pace-activity{box-shadow:inset 0 0 0 2px #b8c2cc,inset 0 0 0 7px #2a2e30}.pace-mac-osx-gray .pace .pace-progress{background-color:#b8c2cc;box-shadow:inset -1px 0 #b8c2cc,inset 0 -1px #b8c2cc,inset 0 2px rgba(42,46,48,.5),inset 0 6px rgba(42,46,48,.3)}.pace-mac-osx-gray .pace .pace-activity{background-image:radial-gradient(rgba(42,46,48,.65) 0,rgba(42,46,48,.15) 100%);height:12px}.pace-progress-color-gray .pace-progress{color:#b8c2cc}.pace-gray-dark .pace .pace-progress{background:#1e1e1e}.pace-barber-shop-gray-dark .pace{background:#fff}.pace-barber-shop-gray-dark .pace .pace-progress{background:#1e1e1e}.pace-barber-shop-gray-dark .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-gray-dark .pace .pace-progress:after{color:rgba(30,30,30,.2)}.pace-bounce-gray-dark .pace .pace-activity{background:#1e1e1e}.pace-center-atom-gray-dark .pace-progress{height:100px;width:80px}.pace-center-atom-gray-dark .pace-progress:before{background:#1e1e1e;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-gray-dark .pace-activity,.pace-center-atom-gray-dark .pace-activity:after,.pace-center-atom-gray-dark .pace-activity:before{border-color:#1e1e1e}.pace-center-circle-gray-dark .pace .pace-progress{background:rgba(30,30,30,.8);color:#fff}.pace-center-radar-gray-dark .pace .pace-activity,.pace-center-radar-gray-dark .pace .pace-activity:before{border-color:#1e1e1e transparent transparent}.pace-center-simple-gray-dark .pace{background:#fff;border-color:#1e1e1e}.pace-center-simple-gray-dark .pace .pace-progress{background:#1e1e1e}.pace-material-gray-dark .pace{color:#1e1e1e}.pace-corner-indicator-gray-dark .pace .pace-activity{background:#1e1e1e}.pace-corner-indicator-gray-dark .pace .pace-activity:after,.pace-corner-indicator-gray-dark .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-gray-dark .pace .pace-activity:before{border-right-color:rgba(30,30,30,.2);border-left-color:rgba(30,30,30,.2)}.pace-corner-indicator-gray-dark .pace .pace-activity:after{border-top-color:rgba(30,30,30,.2);border-bottom-color:rgba(30,30,30,.2)}.pace-fill-left-gray-dark .pace .pace-progress{background-color:rgba(30,30,30,.2)}.pace-flash-gray-dark .pace .pace-progress{background:#1e1e1e}.pace-flash-gray-dark .pace .pace-progress-inner{box-shadow:0 0 10px #1e1e1e,0 0 5px #1e1e1e}.pace-flash-gray-dark .pace .pace-activity{border-top-color:#1e1e1e;border-left-color:#1e1e1e}.pace-loading-bar-gray-dark .pace .pace-progress{background:#1e1e1e;color:#1e1e1e;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-gray-dark .pace .pace-activity{box-shadow:inset 0 0 0 2px #1e1e1e,inset 0 0 0 7px #fff}.pace-mac-osx-gray-dark .pace .pace-progress{background-color:#1e1e1e;box-shadow:inset -1px 0 #1e1e1e,inset 0 -1px #1e1e1e,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-gray-dark .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-gray-dark .pace-progress{color:#1e1e1e}.jqstooltip{height:auto!important;padding:5px!important;width:auto!important}.connectedSortable{min-height:100px}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sort-highlight{background:#babfc7;border:1px dashed #dae1e7;margin-bottom:10px}.chart{overflow:hidden;position:relative}.border-transparent{border-color:transparent!important}.description-block{display:block;margin:10px 0;text-align:center}.description-block.margin-bottom{margin-bottom:25px}.description-block>.description-header{font-size:16px;font-weight:600;margin:0;padding:0}.description-block>.description-text{text-transform:uppercase}.description-block .description-icon{font-size:16px}.list-group-unbordered>.list-group-item{border-left:0;border-radius:0;border-right:0;padding-left:0;padding-right:0}.list-header{color:#b8c2cc;font-size:15px;font-weight:700;padding:10px 4px}.list-seperator{background:rgba(34,41,47,.125);height:1px;margin:15px 0 9px}.list-link>a{color:#b8c2cc;padding:4px}.list-link>a:hover{color:#2a2e30}.user-block{float:left}.user-block img{float:left;height:40px;width:40px}.user-block .comment,.user-block .description,.user-block .username{display:block;margin-left:50px}.user-block .username{font-size:16px;font-weight:600;margin-top:-1px}.user-block .description{color:#b8c2cc;font-size:13px;margin-top:-3px}.user-block.user-block-sm img{width:1.875rem;height:1.875rem}.user-block.user-block-sm .comment,.user-block.user-block-sm .description,.user-block.user-block-sm .username{margin-left:40px}.user-block.user-block-sm .username{font-size:14px}.img-lg,.img-md,.img-sm{float:left}.img-sm{height:1.875rem;width:1.875rem}.img-sm+.img-push{margin-left:2.5rem}.img-md{width:3.75rem;height:3.75rem}.img-md+.img-push{margin-left:4.375rem}.img-lg{width:6.25rem;height:6.25rem}.img-lg+.img-push{margin-left:6.875rem}.img-bordered{border:3px solid #adb5bd;padding:3px}.img-bordered-sm{border:2px solid #adb5bd;padding:2px}.img-rounded{border-radius:.5rem}.img-circle{border-radius:50%}.img-size-32,.img-size-50,.img-size-64{height:auto}.img-size-64{width:64px}.img-size-50{width:50px}.img-size-32{width:32px}.size-32,.size-40,.size-50{display:block;text-align:center}.size-32{height:32px;line-height:32px;width:32px}.size-40{height:40px;line-height:40px;width:40px}.size-50{height:50px;line-height:50px;width:50px}.attachment-block{background:#babfc7;border:1px solid rgba(34,41,47,.125);margin-bottom:10px;padding:5px}.attachment-block .attachment-img{float:left;height:auto;max-height:100px;max-width:100px}.attachment-block .attachment-pushed{margin-left:110px}.attachment-block .attachment-heading{margin:0}.attachment-block .attachment-text{color:#4e5154}.card>.loading-img,.card>.overlay,.info-box>.loading-img,.info-box>.overlay,.overlay-wrapper>.loading-img,.overlay-wrapper>.overlay,.small-box>.loading-img,.small-box>.overlay{height:100%;left:0;position:absolute;top:0;width:100%}.card .overlay,.info-box .overlay,.overlay-wrapper .overlay,.small-box .overlay{border-radius:.5rem;align-items:center;background:hsla(0,0%,100%,.7);display:flex;justify-content:center;z-index:50}.card .overlay>.fa,.card .overlay>.fab,.card .overlay>.far,.card .overlay>.fas,.card .overlay>.glyphicon,.card .overlay>.ion,.info-box .overlay>.fa,.info-box .overlay>.fab,.info-box .overlay>.far,.info-box .overlay>.fas,.info-box .overlay>.glyphicon,.info-box .overlay>.ion,.overlay-wrapper .overlay>.fa,.overlay-wrapper .overlay>.fab,.overlay-wrapper .overlay>.far,.overlay-wrapper .overlay>.fas,.overlay-wrapper .overlay>.glyphicon,.overlay-wrapper .overlay>.ion,.small-box .overlay>.fa,.small-box .overlay>.fab,.small-box .overlay>.far,.small-box .overlay>.fas,.small-box .overlay>.glyphicon,.small-box .overlay>.ion{color:#1e1e1e}.card .overlay.dark,.info-box .overlay.dark,.overlay-wrapper .overlay.dark,.small-box .overlay.dark{background:rgba(34,41,47,.5)}.card .overlay.dark>.fa,.card .overlay.dark>.fab,.card .overlay.dark>.far,.card .overlay.dark>.fas,.card .overlay.dark>.glyphicon,.card .overlay.dark>.ion,.info-box .overlay.dark>.fa,.info-box .overlay.dark>.fab,.info-box .overlay.dark>.far,.info-box .overlay.dark>.fas,.info-box .overlay.dark>.glyphicon,.info-box .overlay.dark>.ion,.overlay-wrapper .overlay.dark>.fa,.overlay-wrapper .overlay.dark>.fab,.overlay-wrapper .overlay.dark>.far,.overlay-wrapper .overlay.dark>.fas,.overlay-wrapper .overlay.dark>.glyphicon,.overlay-wrapper .overlay.dark>.ion,.small-box .overlay.dark>.fa,.small-box .overlay.dark>.fab,.small-box .overlay.dark>.far,.small-box .overlay.dark>.fas,.small-box .overlay.dark>.glyphicon,.small-box .overlay.dark>.ion{color:#636363}.tab-pane>.overlay-wrapper{position:relative}.tab-pane>.overlay-wrapper>.overlay{border-top-left-radius:0;border-top-right-radius:0;flex-direction:column;margin-top:-1.25rem;margin-left:-1.25rem;height:calc(100% + 2.5rem);width:calc(100% + 2.5rem)}.tab-pane>.overlay-wrapper>.overlay.dark{color:#fff}.ribbon-wrapper{height:70px;overflow:hidden;position:absolute;right:-2px;top:-2px;width:70px;z-index:10}.ribbon-wrapper.ribbon-lg{height:120px;width:120px}.ribbon-wrapper.ribbon-lg .ribbon{right:0;top:26px;width:160px}.ribbon-wrapper.ribbon-xl{height:180px;width:180px}.ribbon-wrapper.ribbon-xl .ribbon{right:4px;top:47px;width:240px}.ribbon-wrapper .ribbon{box-shadow:0 0 3px rgba(34,41,47,.3);font-size:.8rem;line-height:100%;padding:.375rem 0;position:relative;right:-2px;text-align:center;text-shadow:0 -1px 0 rgba(34,41,47,.4);text-transform:uppercase;top:10px;transform:rotate(45deg);width:90px}.ribbon-wrapper .ribbon:after,.ribbon-wrapper .ribbon:before{border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #9e9e9e;bottom:-3px;content:"";position:absolute}.ribbon-wrapper .ribbon:before{left:0}.ribbon-wrapper .ribbon:after{right:0}.back-to-top{bottom:1.25rem;position:fixed;right:1.25rem;z-index:1032}.back-to-top:focus{box-shadow:none}pre{padding:.75rem}blockquote{background:#fff;border-left:.7rem solid #62a8ea;margin:1.5em .7rem;padding:.5em .7rem}.box blockquote{background:#ededed}blockquote p:last-child{margin-bottom:0}blockquote h1,blockquote h2,blockquote h3,blockquote h4,blockquote h5,blockquote h6{color:#62a8ea;font-size:1.25rem;font-weight:600}blockquote.quote-primary{border-color:#62a8ea}blockquote.quote-primary h1,blockquote.quote-primary h2,blockquote.quote-primary h3,blockquote.quote-primary h4,blockquote.quote-primary h5,blockquote.quote-primary h6{color:#62a8ea}blockquote.quote-secondary{border-color:#b8c2cc}blockquote.quote-secondary h1,blockquote.quote-secondary h2,blockquote.quote-secondary h3,blockquote.quote-secondary h4,blockquote.quote-secondary h5,blockquote.quote-secondary h6{color:#b8c2cc}blockquote.quote-success{border-color:#21b978}blockquote.quote-success h1,blockquote.quote-success h2,blockquote.quote-success h3,blockquote.quote-success h4,blockquote.quote-success h5,blockquote.quote-success h6{color:#21b978}blockquote.quote-info{border-color:#4277cf}blockquote.quote-info h1,blockquote.quote-info h2,blockquote.quote-info h3,blockquote.quote-info h4,blockquote.quote-info h5,blockquote.quote-info h6{color:#4277cf}blockquote.quote-warning{border-color:#dda451}blockquote.quote-warning h1,blockquote.quote-warning h2,blockquote.quote-warning h3,blockquote.quote-warning h4,blockquote.quote-warning h5,blockquote.quote-warning h6{color:#dda451}blockquote.quote-danger{border-color:#ea5455}blockquote.quote-danger h1,blockquote.quote-danger h2,blockquote.quote-danger h3,blockquote.quote-danger h4,blockquote.quote-danger h5,blockquote.quote-danger h6{color:#ea5455}blockquote.quote-light{border-color:#f7f7f9}blockquote.quote-light h1,blockquote.quote-light h2,blockquote.quote-light h3,blockquote.quote-light h4,blockquote.quote-light h5,blockquote.quote-light h6{color:#f7f7f9}blockquote.quote-dark{border-color:#22292f}blockquote.quote-dark h1,blockquote.quote-dark h2,blockquote.quote-dark h3,blockquote.quote-dark h4,blockquote.quote-dark h5,blockquote.quote-dark h6{color:#22292f}blockquote.quote-lightblue{border-color:#3c8dbc}blockquote.quote-lightblue h1,blockquote.quote-lightblue h2,blockquote.quote-lightblue h3,blockquote.quote-lightblue h4,blockquote.quote-lightblue h5,blockquote.quote-lightblue h6{color:#3c8dbc}blockquote.quote-navy{border-color:#001f3f}blockquote.quote-navy h1,blockquote.quote-navy h2,blockquote.quote-navy h3,blockquote.quote-navy h4,blockquote.quote-navy h5,blockquote.quote-navy h6{color:#001f3f}blockquote.quote-olive{border-color:#3d9970}blockquote.quote-olive h1,blockquote.quote-olive h2,blockquote.quote-olive h3,blockquote.quote-olive h4,blockquote.quote-olive h5,blockquote.quote-olive h6{color:#3d9970}blockquote.quote-lime{border-color:#01ff70}blockquote.quote-lime h1,blockquote.quote-lime h2,blockquote.quote-lime h3,blockquote.quote-lime h4,blockquote.quote-lime h5,blockquote.quote-lime h6{color:#01ff70}blockquote.quote-fuchsia{border-color:#f012be}blockquote.quote-fuchsia h1,blockquote.quote-fuchsia h2,blockquote.quote-fuchsia h3,blockquote.quote-fuchsia h4,blockquote.quote-fuchsia h5,blockquote.quote-fuchsia h6{color:#f012be}blockquote.quote-maroon{border-color:#d81b60}blockquote.quote-maroon h1,blockquote.quote-maroon h2,blockquote.quote-maroon h3,blockquote.quote-maroon h4,blockquote.quote-maroon h5,blockquote.quote-maroon h6{color:#d81b60}blockquote.quote-blue{border-color:#3085d6}blockquote.quote-blue h1,blockquote.quote-blue h2,blockquote.quote-blue h3,blockquote.quote-blue h4,blockquote.quote-blue h5,blockquote.quote-blue h6{color:#3085d6}blockquote.quote-indigo{border-color:#5c6bc6}blockquote.quote-indigo h1,blockquote.quote-indigo h2,blockquote.quote-indigo h3,blockquote.quote-indigo h4,blockquote.quote-indigo h5,blockquote.quote-indigo h6{color:#5c6bc6}blockquote.quote-purple{border-color:#6f42c1}blockquote.quote-purple h1,blockquote.quote-purple h2,blockquote.quote-purple h3,blockquote.quote-purple h4,blockquote.quote-purple h5,blockquote.quote-purple h6{color:#6f42c1}blockquote.quote-pink{border-color:#ff8acc}blockquote.quote-pink h1,blockquote.quote-pink h2,blockquote.quote-pink h3,blockquote.quote-pink h4,blockquote.quote-pink h5,blockquote.quote-pink h6{color:#ff8acc}blockquote.quote-red{border-color:#ea5455}blockquote.quote-red h1,blockquote.quote-red h2,blockquote.quote-red h3,blockquote.quote-red h4,blockquote.quote-red h5,blockquote.quote-red h6{color:#ea5455}blockquote.quote-orange{border-color:#dda451}blockquote.quote-orange h1,blockquote.quote-orange h2,blockquote.quote-orange h3,blockquote.quote-orange h4,blockquote.quote-orange h5,blockquote.quote-orange h6{color:#dda451}blockquote.quote-yellow{border-color:#edc30e}blockquote.quote-yellow h1,blockquote.quote-yellow h2,blockquote.quote-yellow h3,blockquote.quote-yellow h4,blockquote.quote-yellow h5,blockquote.quote-yellow h6{color:#edc30e}blockquote.quote-green{border-color:#21b978}blockquote.quote-green h1,blockquote.quote-green h2,blockquote.quote-green h3,blockquote.quote-green h4,blockquote.quote-green h5,blockquote.quote-green h6{color:#21b978}blockquote.quote-teal{border-color:#20c997}blockquote.quote-teal h1,blockquote.quote-teal h2,blockquote.quote-teal h3,blockquote.quote-teal h4,blockquote.quote-teal h5,blockquote.quote-teal h6{color:#20c997}blockquote.quote-cyan{border-color:#7367f0}blockquote.quote-cyan h1,blockquote.quote-cyan h2,blockquote.quote-cyan h3,blockquote.quote-cyan h4,blockquote.quote-cyan h5,blockquote.quote-cyan h6{color:#7367f0}blockquote.quote-white{border-color:#fff}blockquote.quote-white h1,blockquote.quote-white h2,blockquote.quote-white h3,blockquote.quote-white h4,blockquote.quote-white h5,blockquote.quote-white h6{color:#fff}blockquote.quote-gray{border-color:#b8c2cc}blockquote.quote-gray h1,blockquote.quote-gray h2,blockquote.quote-gray h3,blockquote.quote-gray h4,blockquote.quote-gray h5,blockquote.quote-gray h6{color:#b8c2cc}blockquote.quote-gray-dark{border-color:#1e1e1e}blockquote.quote-gray-dark h1,blockquote.quote-gray-dark h2,blockquote.quote-gray-dark h3,blockquote.quote-gray-dark h4,blockquote.quote-gray-dark h5,blockquote.quote-gray-dark h6{color:#1e1e1e}.tab-custom-content{border-top:1px solid #dae1e7;margin-top:.5rem;padding-top:.5rem}.nav+.tab-custom-content{border-top:none;border-bottom:1px solid #dae1e7;margin-top:0;margin-bottom:.5rem;padding-bottom:.5rem}.badge-btn{border-radius:.15rem;font-size:.75rem;font-weight:400;padding:.25rem .5rem}.badge-btn.badge-pill{padding:.375rem .6rem}@media print{.content-header,.main-header,.main-sidebar,.no-print{display:none!important}.content-wrapper,.main-footer{transform:translate(0);margin-left:0!important;min-height:0!important}.layout-fixed .content-wrapper{padding-top:0!important}.invoice{border:0;margin:0;padding:0;width:100%}.invoice-col{float:left;width:33.3333333%}.table-responsive{overflow:auto}.table-responsive>.table tr td,.table-responsive>.table tr th{white-space:normal!important}}.text-bold,.text-bold.table td,.text-bold.table th{font-weight:700}.text-xs{font-size:.75rem!important}.text-md,.text-sm{font-size:1rem!important}.text-lg{font-size:2rem!important}.text-xl{font-size:1.5rem!important}.text-lightblue{color:#3c8dbc}.text-navy{color:#001f3f}.text-olive{color:#3d9970}.text-lime{color:#01ff70}.text-fuchsia{color:#f012be}.text-maroon{color:#d81b60}.text-blue{color:#3085d6}.text-indigo{color:#5c6bc6}.text-purple{color:#6f42c1}.text-pink{color:#ff8acc}.text-red{color:#ea5455}.text-orange{color:#dda451}.text-yellow{color:#edc30e}.text-green{color:#21b978}.text-teal{color:#20c997}.text-cyan{color:#7367f0}.text-white{color:#fff}.text-gray{color:#b8c2cc}.text-gray-dark{color:#1e1e1e}.elevation-0{box-shadow:none!important}.elevation-1{box-shadow:0 1px 3px rgba(34,41,47,.12),0 1px 2px rgba(34,41,47,.24)!important}.elevation-2{box-shadow:0 3px 6px rgba(34,41,47,.16),0 3px 6px rgba(34,41,47,.23)!important}.elevation-3{box-shadow:0 10px 20px rgba(34,41,47,.19),0 6px 6px rgba(34,41,47,.23)!important}.elevation-4{box-shadow:0 14px 28px rgba(34,41,47,.25),0 10px 10px rgba(34,41,47,.22)!important}.elevation-5{box-shadow:0 19px 38px rgba(34,41,47,.3),0 15px 12px rgba(34,41,47,.22)!important}.bg-primary{background-color:#62a8ea!important}.bg-primary,.bg-primary>a{color:#2a2e30!important}.bg-primary.btn:hover{border-color:#358fe4;color:#181a1c}.bg-primary.btn.active,.bg-primary.btn:active,.bg-primary.btn:not(:disabled):not(.disabled).active,.bg-primary.btn:not(:disabled):not(.disabled):active{background-color:#358fe4!important;border-color:#2a89e2;color:#fff}.bg-secondary{background-color:#b8c2cc!important}.bg-secondary,.bg-secondary>a{color:#2a2e30!important}.bg-secondary.btn:hover{border-color:#9aa9b7;color:#181a1c}.bg-secondary.btn.active,.bg-secondary.btn:active,.bg-secondary.btn:not(:disabled):not(.disabled).active,.bg-secondary.btn:not(:disabled):not(.disabled):active{background-color:#9aa9b7!important;border-color:#93a2b1;color:#2a2e30}.bg-success{background-color:#21b978!important}.bg-success,.bg-success>a{color:#fff!important}.bg-success.btn:hover{border-color:#198e5c;color:#ececec}.bg-success.btn.active,.bg-success.btn:active,.bg-success.btn:not(:disabled):not(.disabled).active,.bg-success.btn:not(:disabled):not(.disabled):active{background-color:#198e5c!important;border-color:#178355;color:#fff}.bg-info{background-color:#4277cf!important}.bg-info,.bg-info>a{color:#fff!important}.bg-info.btn:hover{border-color:#2d5fb1;color:#ececec}.bg-info.btn.active,.bg-info.btn:active,.bg-info.btn:not(:disabled):not(.disabled).active,.bg-info.btn:not(:disabled):not(.disabled):active{background-color:#2d5fb1!important;border-color:#2a59a7;color:#fff}.bg-warning{background-color:#dda451!important}.bg-warning,.bg-warning>a{color:#2a2e30!important}.bg-warning.btn:hover{border-color:#d28d29;color:#181a1c}.bg-warning.btn.active,.bg-warning.btn:active,.bg-warning.btn:not(:disabled):not(.disabled).active,.bg-warning.btn:not(:disabled):not(.disabled):active{background-color:#d28d29!important;border-color:#c78627;color:#2a2e30}.bg-danger{background-color:#ea5455!important}.bg-danger,.bg-danger>a{color:#fff!important}.bg-danger.btn:hover{border-color:#e42728;color:#ececec}.bg-danger.btn.active,.bg-danger.btn:active,.bg-danger.btn:not(:disabled):not(.disabled).active,.bg-danger.btn:not(:disabled):not(.disabled):active{background-color:#e42728!important;border-color:#e21c1d;color:#fff}.bg-light{background-color:#f7f7f9!important}.bg-light,.bg-light>a{color:#2a2e30!important}.bg-light.btn:hover{border-color:#dadae3;color:#181a1c}.bg-light.btn.active,.bg-light.btn:active,.bg-light.btn:not(:disabled):not(.disabled).active,.bg-light.btn:not(:disabled):not(.disabled):active{background-color:#dadae3!important;border-color:#d3d3de;color:#2a2e30}.bg-dark{background-color:#22292f!important}.bg-dark,.bg-dark>a{color:#fff!important}.bg-dark.btn:hover{border-color:#0d0f11;color:#ececec}.bg-dark.btn.active,.bg-dark.btn:active,.bg-dark.btn:not(:disabled):not(.disabled).active,.bg-dark.btn:not(:disabled):not(.disabled):active{background-color:#0d0f11!important;border-color:#07090a;color:#fff}.bg-lightblue{background-color:#3c8dbc!important}.bg-lightblue,.bg-lightblue>a{color:#fff!important}.bg-lightblue.btn:hover{border-color:#307095;color:#ececec}.bg-lightblue.btn.active,.bg-lightblue.btn:active,.bg-lightblue.btn:not(:disabled):not(.disabled).active,.bg-lightblue.btn:not(:disabled):not(.disabled):active{background-color:#307095!important;border-color:#2d698c;color:#fff}.bg-navy{background-color:#001f3f!important}.bg-navy,.bg-navy>a{color:#fff!important}.bg-navy.btn:hover{border-color:#00060c;color:#ececec}.bg-navy.btn.active,.bg-navy.btn:active,.bg-navy.btn:not(:disabled):not(.disabled).active,.bg-navy.btn:not(:disabled):not(.disabled):active{background-color:#00060c!important;border-color:#000;color:#fff}.bg-olive{background-color:#3d9970!important}.bg-olive,.bg-olive>a{color:#fff!important}.bg-olive.btn:hover{border-color:#2e7555;color:#ececec}.bg-olive.btn.active,.bg-olive.btn:active,.bg-olive.btn:not(:disabled):not(.disabled).active,.bg-olive.btn:not(:disabled):not(.disabled):active{background-color:#2e7555!important;border-color:#2b6b4f;color:#fff}.bg-lime{background-color:#01ff70!important}.bg-lime,.bg-lime>a{color:#2a2e30!important}.bg-lime.btn:hover{border-color:#00cd5a;color:#181a1c}.bg-lime.btn.active,.bg-lime.btn:active,.bg-lime.btn:not(:disabled):not(.disabled).active,.bg-lime.btn:not(:disabled):not(.disabled):active{background-color:#00cd5a!important;border-color:#00c054;color:#fff}.bg-fuchsia{background-color:#f012be!important}.bg-fuchsia,.bg-fuchsia>a{color:#fff!important}.bg-fuchsia.btn:hover{border-color:#c30c9a;color:#ececec}.bg-fuchsia.btn.active,.bg-fuchsia.btn:active,.bg-fuchsia.btn:not(:disabled):not(.disabled).active,.bg-fuchsia.btn:not(:disabled):not(.disabled):active{background-color:#c30c9a!important;border-color:#b70c90;color:#fff}.bg-maroon{background-color:#d81b60!important}.bg-maroon,.bg-maroon>a{color:#fff!important}.bg-maroon.btn:hover{border-color:#ab154c;color:#ececec}.bg-maroon.btn.active,.bg-maroon.btn:active,.bg-maroon.btn:not(:disabled):not(.disabled).active,.bg-maroon.btn:not(:disabled):not(.disabled):active{background-color:#ab154c!important;border-color:#9f1447;color:#fff}.bg-blue{background-color:#3085d6!important}.bg-blue,.bg-blue>a{color:#fff!important}.bg-blue.btn:hover{border-color:#236bb0;color:#ececec}.bg-blue.btn.active,.bg-blue.btn:active,.bg-blue.btn:not(:disabled):not(.disabled).active,.bg-blue.btn:not(:disabled):not(.disabled):active{background-color:#236bb0!important;border-color:#2165a5;color:#fff}.bg-indigo{background-color:#5c6bc6!important}.bg-indigo,.bg-indigo>a{color:#fff!important}.bg-indigo.btn:hover{border-color:#3e4eb1;color:#ececec}.bg-indigo.btn.active,.bg-indigo.btn:active,.bg-indigo.btn:not(:disabled):not(.disabled).active,.bg-indigo.btn:not(:disabled):not(.disabled):active{background-color:#3e4eb1!important;border-color:#3b4aa8;color:#fff}.bg-purple{background-color:#6f42c1!important}.bg-purple,.bg-purple>a{color:#fff!important}.bg-purple.btn:hover{border-color:#59339d;color:#ececec}.bg-purple.btn.active,.bg-purple.btn:active,.bg-purple.btn:not(:disabled):not(.disabled).active,.bg-purple.btn:not(:disabled):not(.disabled):active{background-color:#59339d!important;border-color:#533093;color:#fff}.bg-pink{background-color:#ff8acc!important}.bg-pink,.bg-pink>a{color:#2a2e30!important}.bg-pink.btn:hover{border-color:#ff57b6;color:#181a1c}.bg-pink.btn.active,.bg-pink.btn:active,.bg-pink.btn:not(:disabled):not(.disabled).active,.bg-pink.btn:not(:disabled):not(.disabled):active{background-color:#ff57b6!important;border-color:#ff4ab0;color:#fff}.bg-red{background-color:#ea5455!important}.bg-red,.bg-red>a{color:#fff!important}.bg-red.btn:hover{border-color:#e42728;color:#ececec}.bg-red.btn.active,.bg-red.btn:active,.bg-red.btn:not(:disabled):not(.disabled).active,.bg-red.btn:not(:disabled):not(.disabled):active{background-color:#e42728!important;border-color:#e21c1d;color:#fff}.bg-orange{background-color:#dda451!important}.bg-orange,.bg-orange>a{color:#2a2e30!important}.bg-orange.btn:hover{border-color:#d28d29;color:#181a1c}.bg-orange.btn.active,.bg-orange.btn:active,.bg-orange.btn:not(:disabled):not(.disabled).active,.bg-orange.btn:not(:disabled):not(.disabled):active{background-color:#d28d29!important;border-color:#c78627;color:#2a2e30}.bg-yellow{background-color:#edc30e!important}.bg-yellow,.bg-yellow>a{color:#2a2e30!important}.bg-yellow.btn:hover{border-color:#bd9b0b;color:#181a1c}.bg-yellow.btn.active,.bg-yellow.btn:active,.bg-yellow.btn:not(:disabled):not(.disabled).active,.bg-yellow.btn:not(:disabled):not(.disabled):active{background-color:#bd9b0b!important;border-color:#b1910a;color:#fff}.bg-green{background-color:#21b978!important}.bg-green,.bg-green>a{color:#fff!important}.bg-green.btn:hover{border-color:#198e5c;color:#ececec}.bg-green.btn.active,.bg-green.btn:active,.bg-green.btn:not(:disabled):not(.disabled).active,.bg-green.btn:not(:disabled):not(.disabled):active{background-color:#198e5c!important;border-color:#178355;color:#fff}.bg-teal{background-color:#20c997!important}.bg-teal,.bg-teal>a{color:#fff!important}.bg-teal.btn:hover{border-color:#199d76;color:#ececec}.bg-teal.btn.active,.bg-teal.btn:active,.bg-teal.btn:not(:disabled):not(.disabled).active,.bg-teal.btn:not(:disabled):not(.disabled):active{background-color:#199d76!important;border-color:#17926e;color:#fff}.bg-cyan{background-color:#7367f0!important}.bg-cyan,.bg-cyan>a{color:#fff!important}.bg-cyan.btn:hover{border-color:#4839eb;color:#ececec}.bg-cyan.btn.active,.bg-cyan.btn:active,.bg-cyan.btn:not(:disabled):not(.disabled).active,.bg-cyan.btn:not(:disabled):not(.disabled):active{background-color:#4839eb!important;border-color:#3e2dea;color:#fff}.bg-white{background-color:#fff!important}.bg-white,.bg-white>a{color:#2a2e30!important}.bg-white.btn:hover{border-color:#e6e6e6;color:#181a1c}.bg-white.btn.active,.bg-white.btn:active,.bg-white.btn:not(:disabled):not(.disabled).active,.bg-white.btn:not(:disabled):not(.disabled):active{background-color:#e6e6e6!important;border-color:#dfdfdf;color:#2a2e30}.bg-gray{background-color:#b8c2cc!important}.bg-gray,.bg-gray>a{color:#2a2e30!important}.bg-gray.btn:hover{border-color:#9aa9b7;color:#181a1c}.bg-gray.btn.active,.bg-gray.btn:active,.bg-gray.btn:not(:disabled):not(.disabled).active,.bg-gray.btn:not(:disabled):not(.disabled):active{background-color:#9aa9b7!important;border-color:#93a2b1;color:#2a2e30}.bg-gray-dark{background-color:#1e1e1e!important}.bg-gray-dark,.bg-gray-dark>a{color:#fff!important}.bg-gray-dark.btn:hover{border-color:#050505;color:#ececec}.bg-gray-dark.btn.active,.bg-gray-dark.btn:active,.bg-gray-dark.btn:not(:disabled):not(.disabled).active,.bg-gray-dark.btn:not(:disabled):not(.disabled):active{background-color:#050505!important;border-color:#000;color:#fff}.bg-gray{background-color:#adb5bd;color:#2a2e30}.bg-gray-light{background-color:#f5f5f5;color:#2a2e30!important}.bg-black{background-color:#22292f;color:#fff!important}.bg-white{background-color:#fff;color:#2a2e30!important}.bg-gradient-primary{color:#2a2e30;background:#62a8ea linear-gradient(180deg,#77b3ec,#62a8ea) repeat-x!important}.bg-gradient-primary.btn.disabled,.bg-gradient-primary.btn:disabled,.bg-gradient-primary.btn:not(:disabled):not(.disabled).active,.bg-gradient-primary.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-primary.btn.dropdown-toggle{background-image:none!important}.bg-gradient-primary.btn:hover{border-color:#358fe4;color:#181a1c;background:#4095e5 linear-gradient(180deg,#5aa3e8,#4095e5) repeat-x!important}.bg-gradient-primary.btn.active,.bg-gradient-primary.btn:active,.bg-gradient-primary.btn:not(:disabled):not(.disabled).active,.bg-gradient-primary.btn:not(:disabled):not(.disabled):active{border-color:#2a89e2;color:#fff;background:#358fe4 linear-gradient(180deg,#519ee7,#358fe4) repeat-x!important}.bg-gradient-secondary{color:#2a2e30;background:#b8c2cc linear-gradient(180deg,#c0c9d2,#b8c2cc) repeat-x!important}.bg-gradient-secondary.btn.disabled,.bg-gradient-secondary.btn:disabled,.bg-gradient-secondary.btn:not(:disabled):not(.disabled).active,.bg-gradient-secondary.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-secondary.btn.dropdown-toggle{background-image:none!important}.bg-gradient-secondary.btn:hover{border-color:#9aa9b7;color:#181a1c;background:#a2afbc linear-gradient(180deg,#aeb9c5,#a2afbc) repeat-x!important}.bg-gradient-secondary.btn.active,.bg-gradient-secondary.btn:active,.bg-gradient-secondary.btn:not(:disabled):not(.disabled).active,.bg-gradient-secondary.btn:not(:disabled):not(.disabled):active{border-color:#93a2b1;color:#2a2e30;background:#9aa9b7 linear-gradient(180deg,#a7b4c1,#9aa9b7) repeat-x!important}.bg-gradient-success{color:#fff;background:#21b978 linear-gradient(180deg,#40c18b,#21b978) repeat-x!important}.bg-gradient-success.btn.disabled,.bg-gradient-success.btn:disabled,.bg-gradient-success.btn:not(:disabled):not(.disabled).active,.bg-gradient-success.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-success.btn.dropdown-toggle{background-image:none!important}.bg-gradient-success.btn:hover{border-color:#198e5c;color:#ececec;background:#1b9963 linear-gradient(180deg,#3ba679,#1b9963) repeat-x!important}.bg-gradient-success.btn.active,.bg-gradient-success.btn:active,.bg-gradient-success.btn:not(:disabled):not(.disabled).active,.bg-gradient-success.btn:not(:disabled):not(.disabled):active{border-color:#178355;color:#fff;background:#198e5c linear-gradient(180deg,#399d73,#198e5c) repeat-x!important}.bg-gradient-info{color:#fff;background:#4277cf linear-gradient(180deg,#5c89d5,#4277cf) repeat-x!important}.bg-gradient-info.btn.disabled,.bg-gradient-info.btn:disabled,.bg-gradient-info.btn:not(:disabled):not(.disabled).active,.bg-gradient-info.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-info.btn.dropdown-toggle{background-image:none!important}.bg-gradient-info.btn:hover{border-color:#2d5fb1;color:#ececec;background:#3064bb linear-gradient(180deg,#4d79c4,#3064bb) repeat-x!important}.bg-gradient-info.btn.active,.bg-gradient-info.btn:active,.bg-gradient-info.btn:not(:disabled):not(.disabled).active,.bg-gradient-info.btn:not(:disabled):not(.disabled):active{border-color:#2a59a7;color:#fff;background:#2d5fb1 linear-gradient(180deg,#4a75bc,#2d5fb1) repeat-x!important}.bg-gradient-warning{color:#2a2e30;background:#dda451 linear-gradient(180deg,#e0b06a,#dda451) repeat-x!important}.bg-gradient-warning.btn.disabled,.bg-gradient-warning.btn:disabled,.bg-gradient-warning.btn:not(:disabled):not(.disabled).active,.bg-gradient-warning.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-warning.btn.dropdown-toggle{background-image:none!important}.bg-gradient-warning.btn:hover{border-color:#d28d29;color:#181a1c;background:#d79331 linear-gradient(180deg,#dba14f,#d79331) repeat-x!important}.bg-gradient-warning.btn.active,.bg-gradient-warning.btn:active,.bg-gradient-warning.btn:not(:disabled):not(.disabled).active,.bg-gradient-warning.btn:not(:disabled):not(.disabled):active{border-color:#c78627;color:#2a2e30;background:#d28d29 linear-gradient(180deg,#d69c48,#d28d29) repeat-x!important}.bg-gradient-danger{color:#fff;background:#ea5455 linear-gradient(180deg,#eb6c6d,#ea5455) repeat-x!important}.bg-gradient-danger.btn.disabled,.bg-gradient-danger.btn:disabled,.bg-gradient-danger.btn:not(:disabled):not(.disabled).active,.bg-gradient-danger.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-danger.btn.dropdown-toggle{background-image:none!important}.bg-gradient-danger.btn:hover{border-color:#e42728;color:#ececec;background:#e63233 linear-gradient(180deg,#e74f50,#e63233) repeat-x!important}.bg-gradient-danger.btn.active,.bg-gradient-danger.btn:active,.bg-gradient-danger.btn:not(:disabled):not(.disabled).active,.bg-gradient-danger.btn:not(:disabled):not(.disabled):active{border-color:#e21c1d;color:#fff;background:#e42728 linear-gradient(180deg,#e64547,#e42728) repeat-x!important}.bg-gradient-light{color:#2a2e30;background:#f7f7f9 linear-gradient(180deg,#f6f6f9,#f7f7f9) repeat-x!important}.bg-gradient-light.btn.disabled,.bg-gradient-light.btn:disabled,.bg-gradient-light.btn:not(:disabled):not(.disabled).active,.bg-gradient-light.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-light.btn.dropdown-toggle{background-image:none!important}.bg-gradient-light.btn:hover{border-color:#dadae3;color:#181a1c;background:#e1e1e9 linear-gradient(180deg,#e3e3eb,#e1e1e9) repeat-x!important}.bg-gradient-light.btn.active,.bg-gradient-light.btn:active,.bg-gradient-light.btn:not(:disabled):not(.disabled).active,.bg-gradient-light.btn:not(:disabled):not(.disabled):active{border-color:#d3d3de;color:#2a2e30;background:#dadae3 linear-gradient(180deg,#dddde6,#dadae3) repeat-x!important}.bg-gradient-dark{color:#fff;background:#22292f linear-gradient(180deg,#41474d,#22292f) repeat-x!important}.bg-gradient-dark.btn.disabled,.bg-gradient-dark.btn:disabled,.bg-gradient-dark.btn:not(:disabled):not(.disabled).active,.bg-gradient-dark.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-dark.btn.dropdown-toggle{background-image:none!important}.bg-gradient-dark.btn:hover{border-color:#0d0f11;color:#ececec;background:#121619 linear-gradient(180deg,#33373a,#121619) repeat-x!important}.bg-gradient-dark.btn.active,.bg-gradient-dark.btn:active,.bg-gradient-dark.btn:not(:disabled):not(.disabled).active,.bg-gradient-dark.btn:not(:disabled):not(.disabled):active{border-color:#07090a;color:#fff;background:#0d0f11 linear-gradient(180deg,#2f3134,#0d0f11) repeat-x!important}.bg-gradient-lightblue{color:#fff;background:#3c8dbc linear-gradient(180deg,#579cc5,#3c8dbc) repeat-x!important}.bg-gradient-lightblue.btn.disabled,.bg-gradient-lightblue.btn:disabled,.bg-gradient-lightblue.btn:not(:disabled):not(.disabled).active,.bg-gradient-lightblue.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-lightblue.btn.dropdown-toggle{background-image:none!important}.bg-gradient-lightblue.btn:hover{border-color:#307095;color:#ececec;background:#33779f linear-gradient(180deg,#4f89ac,#33779f) repeat-x!important}.bg-gradient-lightblue.btn.active,.bg-gradient-lightblue.btn:active,.bg-gradient-lightblue.btn:not(:disabled):not(.disabled).active,.bg-gradient-lightblue.btn:not(:disabled):not(.disabled):active{border-color:#2d698c;color:#fff;background:#307095 linear-gradient(180deg,#4d83a4,#307095) repeat-x!important}.bg-gradient-navy{color:#fff;background:#001f3f linear-gradient(180deg,#243f5b,#001f3f) repeat-x!important}.bg-gradient-navy.btn.disabled,.bg-gradient-navy.btn:disabled,.bg-gradient-navy.btn:not(:disabled):not(.disabled).active,.bg-gradient-navy.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-navy.btn.dropdown-toggle{background-image:none!important}.bg-gradient-navy.btn:hover{border-color:#00060c;color:#ececec;background:#000c19 linear-gradient(180deg,#242e3a,#000c19) repeat-x!important}.bg-gradient-navy.btn.active,.bg-gradient-navy.btn:active,.bg-gradient-navy.btn:not(:disabled):not(.disabled).active,.bg-gradient-navy.btn:not(:disabled):not(.disabled):active{border-color:#000;color:#fff;background:#00060c linear-gradient(180deg,#24292f,#00060c) repeat-x!important}.bg-gradient-olive{color:#fff;background:#3d9970 linear-gradient(180deg,#58a684,#3d9970) repeat-x!important}.bg-gradient-olive.btn.disabled,.bg-gradient-olive.btn:disabled,.bg-gradient-olive.btn:not(:disabled):not(.disabled).active,.bg-gradient-olive.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-olive.btn.dropdown-toggle{background-image:none!important}.bg-gradient-olive.btn:hover{border-color:#2e7555;color:#ececec;background:#327e5c linear-gradient(180deg,#4e8f73,#327e5c) repeat-x!important}.bg-gradient-olive.btn.active,.bg-gradient-olive.btn:active,.bg-gradient-olive.btn:not(:disabled):not(.disabled).active,.bg-gradient-olive.btn:not(:disabled):not(.disabled):active{border-color:#2b6b4f;color:#fff;background:#2e7555 linear-gradient(180deg,#4b886d,#2e7555) repeat-x!important}.bg-gradient-lime{color:#2a2e30;background:#01ff70 linear-gradient(180deg,#25fd84,#01ff70) repeat-x!important}.bg-gradient-lime.btn.disabled,.bg-gradient-lime.btn:disabled,.bg-gradient-lime.btn:not(:disabled):not(.disabled).active,.bg-gradient-lime.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-lime.btn.dropdown-toggle{background-image:none!important}.bg-gradient-lime.btn:hover{border-color:#00cd5a;color:#181a1c;background:#00da5f linear-gradient(180deg,#24dd76,#00da5f) repeat-x!important}.bg-gradient-lime.btn.active,.bg-gradient-lime.btn:active,.bg-gradient-lime.btn:not(:disabled):not(.disabled).active,.bg-gradient-lime.btn:not(:disabled):not(.disabled):active{border-color:#00c054;color:#fff;background:#00cd5a linear-gradient(180deg,#24d272,#00cd5a) repeat-x!important}.bg-gradient-fuchsia{color:#fff;background:#f012be linear-gradient(180deg,#f033c7,#f012be) repeat-x!important}.bg-gradient-fuchsia.btn.disabled,.bg-gradient-fuchsia.btn:disabled,.bg-gradient-fuchsia.btn:not(:disabled):not(.disabled).active,.bg-gradient-fuchsia.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-fuchsia.btn.dropdown-toggle{background-image:none!important}.bg-gradient-fuchsia.btn:hover{border-color:#c30c9a;color:#ececec;background:#cf0da3 linear-gradient(180deg,#d42fb0,#cf0da3) repeat-x!important}.bg-gradient-fuchsia.btn.active,.bg-gradient-fuchsia.btn:active,.bg-gradient-fuchsia.btn:not(:disabled):not(.disabled).active,.bg-gradient-fuchsia.btn:not(:disabled):not(.disabled):active{border-color:#b70c90;color:#fff;background:#c30c9a linear-gradient(180deg,#ca2ea8,#c30c9a) repeat-x!important}.bg-gradient-maroon{color:#fff;background:#d81b60 linear-gradient(180deg,#db3b77,#d81b60) repeat-x!important}.bg-gradient-maroon.btn.disabled,.bg-gradient-maroon.btn:disabled,.bg-gradient-maroon.btn:not(:disabled):not(.disabled).active,.bg-gradient-maroon.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-maroon.btn.dropdown-toggle{background-image:none!important}.bg-gradient-maroon.btn:hover{border-color:#ab154c;color:#ececec;background:#b61751 linear-gradient(180deg,#bf386a,#b61751) repeat-x!important}.bg-gradient-maroon.btn.active,.bg-gradient-maroon.btn:active,.bg-gradient-maroon.btn:not(:disabled):not(.disabled).active,.bg-gradient-maroon.btn:not(:disabled):not(.disabled):active{border-color:#9f1447;color:#fff;background:#ab154c linear-gradient(180deg,#b53666,#ab154c) repeat-x!important}.bg-gradient-blue{color:#fff;background:#3085d6 linear-gradient(180deg,#4d95db,#3085d6) repeat-x!important}.bg-gradient-blue.btn.disabled,.bg-gradient-blue.btn:disabled,.bg-gradient-blue.btn:not(:disabled):not(.disabled).active,.bg-gradient-blue.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-blue.btn.dropdown-toggle{background-image:none!important}.bg-gradient-blue.btn:hover{border-color:#236bb0;color:#ececec;background:#2572bb linear-gradient(180deg,#4385c4,#2572bb) repeat-x!important}.bg-gradient-blue.btn.active,.bg-gradient-blue.btn:active,.bg-gradient-blue.btn:not(:disabled):not(.disabled).active,.bg-gradient-blue.btn:not(:disabled):not(.disabled):active{border-color:#2165a5;color:#fff;background:#236bb0 linear-gradient(180deg,#427fbb,#236bb0) repeat-x!important}.bg-gradient-indigo{color:#fff;background:#5c6bc6 linear-gradient(180deg,#727fcd,#5c6bc6) repeat-x!important}.bg-gradient-indigo.btn.disabled,.bg-gradient-indigo.btn:disabled,.bg-gradient-indigo.btn:not(:disabled):not(.disabled).active,.bg-gradient-indigo.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-indigo.btn.dropdown-toggle{background-image:none!important}.bg-gradient-indigo.btn:hover{border-color:#3e4eb1;color:#ececec;background:#4152bb linear-gradient(180deg,#5b6ac4,#4152bb) repeat-x!important}.bg-gradient-indigo.btn.active,.bg-gradient-indigo.btn:active,.bg-gradient-indigo.btn:not(:disabled):not(.disabled).active,.bg-gradient-indigo.btn:not(:disabled):not(.disabled):active{border-color:#3b4aa8;color:#fff;background:#3e4eb1 linear-gradient(180deg,#5966bc,#3e4eb1) repeat-x!important}.bg-gradient-purple{color:#fff;background:#6f42c1 linear-gradient(180deg,#825cc9,#6f42c1) repeat-x!important}.bg-gradient-purple.btn.disabled,.bg-gradient-purple.btn:disabled,.bg-gradient-purple.btn:not(:disabled):not(.disabled).active,.bg-gradient-purple.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-purple.btn.dropdown-toggle{background-image:none!important}.bg-gradient-purple.btn:hover{border-color:#59339d;color:#ececec;background:#5e37a6 linear-gradient(180deg,#7453b2,#5e37a6) repeat-x!important}.bg-gradient-purple.btn.active,.bg-gradient-purple.btn:active,.bg-gradient-purple.btn:not(:disabled):not(.disabled).active,.bg-gradient-purple.btn:not(:disabled):not(.disabled):active{border-color:#533093;color:#fff;background:#59339d linear-gradient(180deg,#7050ab,#59339d) repeat-x!important}.bg-gradient-pink{color:#2a2e30;background:#ff8acc linear-gradient(180deg,#fd99d2,#ff8acc) repeat-x!important}.bg-gradient-pink.btn.disabled,.bg-gradient-pink.btn:disabled,.bg-gradient-pink.btn:not(:disabled):not(.disabled).active,.bg-gradient-pink.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-pink.btn.dropdown-toggle{background-image:none!important}.bg-gradient-pink.btn:hover{border-color:#ff57b6;color:#181a1c;background:#ff64bb linear-gradient(180deg,#fd79c4,#ff64bb) repeat-x!important}.bg-gradient-pink.btn.active,.bg-gradient-pink.btn:active,.bg-gradient-pink.btn:not(:disabled):not(.disabled).active,.bg-gradient-pink.btn:not(:disabled):not(.disabled):active{border-color:#ff4ab0;color:#fff;background:#ff57b6 linear-gradient(180deg,#fd6ec0,#ff57b6) repeat-x!important}.bg-gradient-red{color:#fff;background:#ea5455 linear-gradient(180deg,#eb6c6d,#ea5455) repeat-x!important}.bg-gradient-red.btn.disabled,.bg-gradient-red.btn:disabled,.bg-gradient-red.btn:not(:disabled):not(.disabled).active,.bg-gradient-red.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-red.btn.dropdown-toggle{background-image:none!important}.bg-gradient-red.btn:hover{border-color:#e42728;color:#ececec;background:#e63233 linear-gradient(180deg,#e74f50,#e63233) repeat-x!important}.bg-gradient-red.btn.active,.bg-gradient-red.btn:active,.bg-gradient-red.btn:not(:disabled):not(.disabled).active,.bg-gradient-red.btn:not(:disabled):not(.disabled):active{border-color:#e21c1d;color:#fff;background:#e42728 linear-gradient(180deg,#e64547,#e42728) repeat-x!important}.bg-gradient-orange{color:#2a2e30;background:#dda451 linear-gradient(180deg,#e0b06a,#dda451) repeat-x!important}.bg-gradient-orange.btn.disabled,.bg-gradient-orange.btn:disabled,.bg-gradient-orange.btn:not(:disabled):not(.disabled).active,.bg-gradient-orange.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-orange.btn.dropdown-toggle{background-image:none!important}.bg-gradient-orange.btn:hover{border-color:#d28d29;color:#181a1c;background:#d79331 linear-gradient(180deg,#dba14f,#d79331) repeat-x!important}.bg-gradient-orange.btn.active,.bg-gradient-orange.btn:active,.bg-gradient-orange.btn:not(:disabled):not(.disabled).active,.bg-gradient-orange.btn:not(:disabled):not(.disabled):active{border-color:#c78627;color:#2a2e30;background:#d28d29 linear-gradient(180deg,#d69c48,#d28d29) repeat-x!important}.bg-gradient-yellow{color:#2a2e30;background:#edc30e linear-gradient(180deg,#edca31,#edc30e) repeat-x!important}.bg-gradient-yellow.btn.disabled,.bg-gradient-yellow.btn:disabled,.bg-gradient-yellow.btn:not(:disabled):not(.disabled).active,.bg-gradient-yellow.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-yellow.btn.dropdown-toggle{background-image:none!important}.bg-gradient-yellow.btn:hover{border-color:#bd9b0b;color:#181a1c;background:#c9a50c linear-gradient(180deg,#cfb02f,#c9a50c) repeat-x!important}.bg-gradient-yellow.btn.active,.bg-gradient-yellow.btn:active,.bg-gradient-yellow.btn:not(:disabled):not(.disabled).active,.bg-gradient-yellow.btn:not(:disabled):not(.disabled):active{border-color:#b1910a;color:#fff;background:#bd9b0b linear-gradient(180deg,#c5a82e,#bd9b0b) repeat-x!important}.bg-gradient-green{color:#fff;background:#21b978 linear-gradient(180deg,#40c18b,#21b978) repeat-x!important}.bg-gradient-green.btn.disabled,.bg-gradient-green.btn:disabled,.bg-gradient-green.btn:not(:disabled):not(.disabled).active,.bg-gradient-green.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-green.btn.dropdown-toggle{background-image:none!important}.bg-gradient-green.btn:hover{border-color:#198e5c;color:#ececec;background:#1b9963 linear-gradient(180deg,#3ba679,#1b9963) repeat-x!important}.bg-gradient-green.btn.active,.bg-gradient-green.btn:active,.bg-gradient-green.btn:not(:disabled):not(.disabled).active,.bg-gradient-green.btn:not(:disabled):not(.disabled):active{border-color:#178355;color:#fff;background:#198e5c linear-gradient(180deg,#399d73,#198e5c) repeat-x!important}.bg-gradient-teal{color:#fff;background:#20c997 linear-gradient(180deg,#3fcfa5,#20c997) repeat-x!important}.bg-gradient-teal.btn.disabled,.bg-gradient-teal.btn:disabled,.bg-gradient-teal.btn:not(:disabled):not(.disabled).active,.bg-gradient-teal.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-teal.btn.dropdown-toggle{background-image:none!important}.bg-gradient-teal.btn:hover{border-color:#199d76;color:#ececec;background:#1ba87e linear-gradient(180deg,#3bb390,#1ba87e) repeat-x!important}.bg-gradient-teal.btn.active,.bg-gradient-teal.btn:active,.bg-gradient-teal.btn:not(:disabled):not(.disabled).active,.bg-gradient-teal.btn:not(:disabled):not(.disabled):active{border-color:#17926e;color:#fff;background:#199d76 linear-gradient(180deg,#39aa89,#199d76) repeat-x!important}.bg-gradient-cyan{color:#fff;background:#7367f0 linear-gradient(180deg,#867cf1,#7367f0) repeat-x!important}.bg-gradient-cyan.btn.disabled,.bg-gradient-cyan.btn:disabled,.bg-gradient-cyan.btn:not(:disabled):not(.disabled).active,.bg-gradient-cyan.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-cyan.btn.dropdown-toggle{background-image:none!important}.bg-gradient-cyan.btn:hover{border-color:#4839eb;color:#ececec;background:#5344ed linear-gradient(180deg,#6a5eef,#5344ed) repeat-x!important}.bg-gradient-cyan.btn.active,.bg-gradient-cyan.btn:active,.bg-gradient-cyan.btn:not(:disabled):not(.disabled).active,.bg-gradient-cyan.btn:not(:disabled):not(.disabled):active{border-color:#3e2dea;color:#fff;background:#4839eb linear-gradient(180deg,#6155ed,#4839eb) repeat-x!important}.bg-gradient-white{color:#2a2e30;background:#fff linear-gradient(180deg,#fdfdfe,#fff) repeat-x!important}.bg-gradient-white.btn.disabled,.bg-gradient-white.btn:disabled,.bg-gradient-white.btn:not(:disabled):not(.disabled).active,.bg-gradient-white.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-white.btn.dropdown-toggle{background-image:none!important}.bg-gradient-white.btn:hover{border-color:#e6e6e6;color:#181a1c;background:#ececec linear-gradient(180deg,#ecedee,#ececec) repeat-x!important}.bg-gradient-white.btn.active,.bg-gradient-white.btn:active,.bg-gradient-white.btn:not(:disabled):not(.disabled).active,.bg-gradient-white.btn:not(:disabled):not(.disabled):active{border-color:#dfdfdf;color:#2a2e30;background:#e6e6e6 linear-gradient(180deg,#e7e8e9,#e6e6e6) repeat-x!important}.bg-gradient-gray{color:#2a2e30;background:#b8c2cc linear-gradient(180deg,#c0c9d2,#b8c2cc) repeat-x!important}.bg-gradient-gray.btn.disabled,.bg-gradient-gray.btn:disabled,.bg-gradient-gray.btn:not(:disabled):not(.disabled).active,.bg-gradient-gray.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-gray.btn.dropdown-toggle{background-image:none!important}.bg-gradient-gray.btn:hover{border-color:#9aa9b7;color:#181a1c;background:#a2afbc linear-gradient(180deg,#aeb9c5,#a2afbc) repeat-x!important}.bg-gradient-gray.btn.active,.bg-gradient-gray.btn:active,.bg-gradient-gray.btn:not(:disabled):not(.disabled).active,.bg-gradient-gray.btn:not(:disabled):not(.disabled):active{border-color:#93a2b1;color:#2a2e30;background:#9aa9b7 linear-gradient(180deg,#a7b4c1,#9aa9b7) repeat-x!important}.bg-gradient-gray-dark{color:#fff;background:#1e1e1e linear-gradient(180deg,#3d3e3f,#1e1e1e) repeat-x!important}.bg-gradient-gray-dark.btn.disabled,.bg-gradient-gray-dark.btn:disabled,.bg-gradient-gray-dark.btn:not(:disabled):not(.disabled).active,.bg-gradient-gray-dark.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-gray-dark.btn.dropdown-toggle{background-image:none!important}.bg-gradient-gray-dark.btn:hover{border-color:#050505;color:#ececec;background:#0b0b0b linear-gradient(180deg,#2d2e2e,#0b0b0b) repeat-x!important}.bg-gradient-gray-dark.btn.active,.bg-gradient-gray-dark.btn:active,.bg-gradient-gray-dark.btn:not(:disabled):not(.disabled).active,.bg-gradient-gray-dark.btn:not(:disabled):not(.disabled):active{border-color:#000;color:#fff;background:#050505 linear-gradient(180deg,#282829,#050505) repeat-x!important}[class^=bg-].disabled{opacity:.65}a.text-muted:hover{color:#62a8ea!important}.link-muted{color:#5d6974}.link-muted:focus,.link-muted:hover{color:#464f58}.link-black{color:#b8c2cc}.link-black:focus,.link-black:hover{color:#e6e8ea}.accent-primary .btn-link,.accent-primary a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#62a8ea}.accent-primary .btn-link:hover,.accent-primary a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#1f83e1}.accent-primary .dropdown-item.active,.accent-primary .dropdown-item:active{background:#62a8ea;color:#2a2e30}.accent-primary .custom-control-input:checked~.custom-control-label:before{background:#62a8ea;border-color:#1b76cb}.accent-primary .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%232a2e30' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-primary .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-primary .custom-file-input:focus~.custom-file-label,.accent-primary .custom-select:focus,.accent-primary .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#d2e6f9}.accent-primary .page-item .page-link{color:#62a8ea}.accent-primary .page-item.active .page-link,.accent-primary .page-item.active a{background-color:#62a8ea;border-color:#62a8ea;color:#fff}.accent-primary .page-item.disabled .page-link,.accent-primary .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-primary [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-primary [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-primary [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-primary [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-secondary .btn-link,.accent-secondary a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#b8c2cc}.accent-secondary .btn-link:hover,.accent-secondary a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#8b9cac}.accent-secondary .dropdown-item.active,.accent-secondary .dropdown-item:active{background:#b8c2cc;color:#2a2e30}.accent-secondary .custom-control-input:checked~.custom-control-label:before{background:#b8c2cc;border-color:#7d8fa1}.accent-secondary .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%232a2e30' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-secondary .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-secondary .custom-file-input:focus~.custom-file-label,.accent-secondary .custom-select:focus,.accent-secondary .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#fff}.accent-secondary .page-item .page-link{color:#b8c2cc}.accent-secondary .page-item.active .page-link,.accent-secondary .page-item.active a{background-color:#b8c2cc;border-color:#b8c2cc;color:#fff}.accent-secondary .page-item.disabled .page-link,.accent-secondary .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-secondary [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-secondary [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-secondary [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-secondary [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-success .btn-link,.accent-success a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#21b978}.accent-success .btn-link:hover,.accent-success a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#15784e}.accent-success .dropdown-item.active,.accent-success .dropdown-item:active{background:#21b978;color:#fff}.accent-success .custom-control-input:checked~.custom-control-label:before{background:#21b978;border-color:#126240}.accent-success .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-success .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-success .custom-file-input:focus~.custom-file-label,.accent-success .custom-select:focus,.accent-success .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#73e6b5}.accent-success .page-item .page-link{color:#21b978}.accent-success .page-item.active .page-link,.accent-success .page-item.active a{background-color:#21b978;border-color:#21b978;color:#fff}.accent-success .page-item.disabled .page-link,.accent-success .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-success [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-success [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-success [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-success [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-info .btn-link,.accent-info a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#4277cf}.accent-info .btn-link:hover,.accent-info a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#28549d}.accent-info .dropdown-item.active,.accent-info .dropdown-item:active{background:#4277cf;color:#fff}.accent-info .custom-control-input:checked~.custom-control-label:before{background:#4277cf;border-color:#234988}.accent-info .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-info .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-info .custom-file-input:focus~.custom-file-label,.accent-info .custom-select:focus,.accent-info .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#a8c0e9}.accent-info .page-item .page-link{color:#4277cf}.accent-info .page-item.active .page-link,.accent-info .page-item.active a{background-color:#4277cf;border-color:#4277cf;color:#fff}.accent-info .page-item.disabled .page-link,.accent-info .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-info [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-info [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-info [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-info [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-warning .btn-link,.accent-warning a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#dda451}.accent-warning .btn-link:hover,.accent-warning a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#bd7f25}.accent-warning .dropdown-item.active,.accent-warning .dropdown-item:active{background:#dda451;color:#2a2e30}.accent-warning .custom-control-input:checked~.custom-control-label:before{background:#dda451;border-color:#a77121}.accent-warning .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%232a2e30' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-warning .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-warning .custom-file-input:focus~.custom-file-label,.accent-warning .custom-select:focus,.accent-warning .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#f2dcbc}.accent-warning .page-item .page-link{color:#dda451}.accent-warning .page-item.active .page-link,.accent-warning .page-item.active a{background-color:#dda451;border-color:#dda451;color:#fff}.accent-warning .page-item.disabled .page-link,.accent-warning .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-warning [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-warning [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-warning [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-warning [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-danger .btn-link,.accent-danger a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#ea5455}.accent-danger .btn-link:hover,.accent-danger a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#d71a1c}.accent-danger .dropdown-item.active,.accent-danger .dropdown-item:active{background:#ea5455;color:#fff}.accent-danger .custom-control-input:checked~.custom-control-label:before{background:#ea5455;border-color:#c01819}.accent-danger .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-danger .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-danger .custom-file-input:focus~.custom-file-label,.accent-danger .custom-select:focus,.accent-danger .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#f8c6c6}.accent-danger .page-item .page-link{color:#ea5455}.accent-danger .page-item.active .page-link,.accent-danger .page-item.active a{background-color:#ea5455;border-color:#ea5455;color:#fff}.accent-danger .page-item.disabled .page-link,.accent-danger .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-danger [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-danger [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-danger [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-danger [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-light .btn-link,.accent-light a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#f7f7f9}.accent-light .btn-link:hover,.accent-light a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#cbcbd8}.accent-light .dropdown-item.active,.accent-light .dropdown-item:active{background:#f7f7f9;color:#2a2e30}.accent-light .custom-control-input:checked~.custom-control-label:before{background:#f7f7f9;border-color:#bdbdcd}.accent-light .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%232a2e30' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-light .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-light .custom-file-input:focus~.custom-file-label,.accent-light .custom-select:focus,.accent-light .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#fff}.accent-light .page-item .page-link{color:#f7f7f9}.accent-light .page-item.active .page-link,.accent-light .page-item.active a{background-color:#f7f7f9;border-color:#f7f7f9;color:#fff}.accent-light .page-item.disabled .page-link,.accent-light .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-light [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-light [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-light [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-light [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-dark .btn-link,.accent-dark a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#22292f}.accent-dark .btn-link:hover,.accent-dark a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#020203}.accent-dark .dropdown-item.active,.accent-dark .dropdown-item:active{background:#22292f;color:#fff}.accent-dark .custom-control-input:checked~.custom-control-label:before{background:#22292f;border-color:#000}.accent-dark .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-dark .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-dark .custom-file-input:focus~.custom-file-label,.accent-dark .custom-select:focus,.accent-dark .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#586a79}.accent-dark .page-item .page-link{color:#22292f}.accent-dark .page-item.active .page-link,.accent-dark .page-item.active a{background-color:#22292f;border-color:#22292f;color:#fff}.accent-dark .page-item.disabled .page-link,.accent-dark .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-dark [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-dark [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-dark [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-dark [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-lightblue .btn-link,.accent-lightblue a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#3c8dbc}.accent-lightblue .btn-link:hover,.accent-lightblue a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#296282}.accent-lightblue .dropdown-item.active,.accent-lightblue .dropdown-item:active{background:#3c8dbc;color:#fff}.accent-lightblue .custom-control-input:checked~.custom-control-label:before{background:#3c8dbc;border-color:#23536f}.accent-lightblue .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-lightblue .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-lightblue .custom-file-input:focus~.custom-file-label,.accent-lightblue .custom-select:focus,.accent-lightblue .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#99c5de}.accent-lightblue .page-item .page-link{color:#3c8dbc}.accent-lightblue .page-item.active .page-link,.accent-lightblue .page-item.active a{background-color:#3c8dbc;border-color:#3c8dbc;color:#fff}.accent-lightblue .page-item.disabled .page-link,.accent-lightblue .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-lightblue [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-lightblue [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-lightblue [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-lightblue [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-navy .btn-link,.accent-navy a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#001f3f}.accent-navy .btn-link:hover,.accent-navy a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#000}.accent-navy .dropdown-item.active,.accent-navy .dropdown-item:active{background:#001f3f;color:#fff}.accent-navy .custom-control-input:checked~.custom-control-label:before{background:#001f3f;border-color:#000}.accent-navy .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-navy .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-navy .custom-file-input:focus~.custom-file-label,.accent-navy .custom-select:focus,.accent-navy .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#005ebf}.accent-navy .page-item .page-link{color:#001f3f}.accent-navy .page-item.active .page-link,.accent-navy .page-item.active a{background-color:#001f3f;border-color:#001f3f;color:#fff}.accent-navy .page-item.disabled .page-link,.accent-navy .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-navy [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-navy [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-navy [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-navy [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-olive .btn-link,.accent-olive a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#3d9970}.accent-olive .btn-link:hover,.accent-olive a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#276248}.accent-olive .dropdown-item.active,.accent-olive .dropdown-item:active{background:#3d9970;color:#fff}.accent-olive .custom-control-input:checked~.custom-control-label:before{background:#3d9970;border-color:#20503b}.accent-olive .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-olive .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-olive .custom-file-input:focus~.custom-file-label,.accent-olive .custom-select:focus,.accent-olive .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#87cfaf}.accent-olive .page-item .page-link{color:#3d9970}.accent-olive .page-item.active .page-link,.accent-olive .page-item.active a{background-color:#3d9970;border-color:#3d9970;color:#fff}.accent-olive .page-item.disabled .page-link,.accent-olive .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-olive [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-olive [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-olive [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-olive [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-lime .btn-link,.accent-lime a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#01ff70}.accent-lime .btn-link:hover,.accent-lime a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#00b44e}.accent-lime .dropdown-item.active,.accent-lime .dropdown-item:active{background:#01ff70;color:#2a2e30}.accent-lime .custom-control-input:checked~.custom-control-label:before{background:#01ff70;border-color:#009a43}.accent-lime .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%232a2e30' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-lime .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-lime .custom-file-input:focus~.custom-file-label,.accent-lime .custom-select:focus,.accent-lime .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#81ffb8}.accent-lime .page-item .page-link{color:#01ff70}.accent-lime .page-item.active .page-link,.accent-lime .page-item.active a{background-color:#01ff70;border-color:#01ff70;color:#fff}.accent-lime .page-item.disabled .page-link,.accent-lime .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-lime [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-lime [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-lime [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-lime [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-fuchsia .btn-link,.accent-fuchsia a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#f012be}.accent-fuchsia .btn-link:hover,.accent-fuchsia a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#ab0b87}.accent-fuchsia .dropdown-item.active,.accent-fuchsia .dropdown-item:active{background:#f012be;color:#fff}.accent-fuchsia .custom-control-input:checked~.custom-control-label:before{background:#f012be;border-color:#930974}.accent-fuchsia .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-fuchsia .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-fuchsia .custom-file-input:focus~.custom-file-label,.accent-fuchsia .custom-select:focus,.accent-fuchsia .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#f88adf}.accent-fuchsia .page-item .page-link{color:#f012be}.accent-fuchsia .page-item.active .page-link,.accent-fuchsia .page-item.active a{background-color:#f012be;border-color:#f012be;color:#fff}.accent-fuchsia .page-item.disabled .page-link,.accent-fuchsia .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-fuchsia [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-fuchsia [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-fuchsia [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-fuchsia [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-maroon .btn-link,.accent-maroon a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#d81b60}.accent-maroon .btn-link:hover,.accent-maroon a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#941342}.accent-maroon .dropdown-item.active,.accent-maroon .dropdown-item:active{background:#d81b60;color:#fff}.accent-maroon .custom-control-input:checked~.custom-control-label:before{background:#d81b60;border-color:#7d1038}.accent-maroon .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-maroon .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-maroon .custom-file-input:focus~.custom-file-label,.accent-maroon .custom-select:focus,.accent-maroon .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#f083ab}.accent-maroon .page-item .page-link{color:#d81b60}.accent-maroon .page-item.active .page-link,.accent-maroon .page-item.active a{background-color:#d81b60;border-color:#d81b60;color:#fff}.accent-maroon .page-item.disabled .page-link,.accent-maroon .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-maroon [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-maroon [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-maroon [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-maroon [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-blue .btn-link,.accent-blue a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#3085d6}.accent-blue .btn-link:hover,.accent-blue a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#1f5e9b}.accent-blue .dropdown-item.active,.accent-blue .dropdown-item:active{background:#3085d6;color:#fff}.accent-blue .custom-control-input:checked~.custom-control-label:before{background:#3085d6;border-color:#1a5186}.accent-blue .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-blue .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-blue .custom-file-input:focus~.custom-file-label,.accent-blue .custom-select:focus,.accent-blue .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#9ac4eb}.accent-blue .page-item .page-link{color:#3085d6}.accent-blue .page-item.active .page-link,.accent-blue .page-item.active a{background-color:#3085d6;border-color:#3085d6;color:#fff}.accent-blue .page-item.disabled .page-link,.accent-blue .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-blue [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-blue [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-blue [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-blue [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-indigo .btn-link,.accent-indigo a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#5c6bc6}.accent-indigo .btn-link:hover,.accent-indigo a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#37469e}.accent-indigo .dropdown-item.active,.accent-indigo .dropdown-item:active{background:#5c6bc6;color:#fff}.accent-indigo .custom-control-input:checked~.custom-control-label:before{background:#5c6bc6;border-color:#313e8b}.accent-indigo .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-indigo .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-indigo .custom-file-input:focus~.custom-file-label,.accent-indigo .custom-select:focus,.accent-indigo .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#bac1e7}.accent-indigo .page-item .page-link{color:#5c6bc6}.accent-indigo .page-item.active .page-link,.accent-indigo .page-item.active a{background-color:#5c6bc6;border-color:#5c6bc6;color:#fff}.accent-indigo .page-item.disabled .page-link,.accent-indigo .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-indigo [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-indigo [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-indigo [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-indigo [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-purple .btn-link,.accent-purple a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#6f42c1}.accent-purple .btn-link:hover,.accent-purple a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#4e2d89}.accent-purple .dropdown-item.active,.accent-purple .dropdown-item:active{background:#6f42c1;color:#fff}.accent-purple .custom-control-input:checked~.custom-control-label:before{background:#6f42c1;border-color:#432776}.accent-purple .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-purple .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-purple .custom-file-input:focus~.custom-file-label,.accent-purple .custom-select:focus,.accent-purple .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#b8a2e0}.accent-purple .page-item .page-link{color:#6f42c1}.accent-purple .page-item.active .page-link,.accent-purple .page-item.active a{background-color:#6f42c1;border-color:#6f42c1;color:#fff}.accent-purple .page-item.disabled .page-link,.accent-purple .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-purple [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-purple [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-purple [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-purple [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-pink .btn-link,.accent-pink a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#ff8acc}.accent-pink .btn-link:hover,.accent-pink a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#ff3eab}.accent-pink .dropdown-item.active,.accent-pink .dropdown-item:active{background:#ff8acc;color:#2a2e30}.accent-pink .custom-control-input:checked~.custom-control-label:before{background:#ff8acc;border-color:#ff24a0}.accent-pink .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%232a2e30' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-pink .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-pink .custom-file-input:focus~.custom-file-label,.accent-pink .custom-select:focus,.accent-pink .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#fff}.accent-pink .page-item .page-link{color:#ff8acc}.accent-pink .page-item.active .page-link,.accent-pink .page-item.active a{background-color:#ff8acc;border-color:#ff8acc;color:#fff}.accent-pink .page-item.disabled .page-link,.accent-pink .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-pink [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-pink [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-pink [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-pink [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-red .btn-link,.accent-red a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#ea5455}.accent-red .btn-link:hover,.accent-red a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#d71a1c}.accent-red .dropdown-item.active,.accent-red .dropdown-item:active{background:#ea5455;color:#fff}.accent-red .custom-control-input:checked~.custom-control-label:before{background:#ea5455;border-color:#c01819}.accent-red .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-red .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-red .custom-file-input:focus~.custom-file-label,.accent-red .custom-select:focus,.accent-red .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#f8c6c6}.accent-red .page-item .page-link{color:#ea5455}.accent-red .page-item.active .page-link,.accent-red .page-item.active a{background-color:#ea5455;border-color:#ea5455;color:#fff}.accent-red .page-item.disabled .page-link,.accent-red .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-red [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-red [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-red [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-red [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-orange .btn-link,.accent-orange a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#dda451}.accent-orange .btn-link:hover,.accent-orange a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#bd7f25}.accent-orange .dropdown-item.active,.accent-orange .dropdown-item:active{background:#dda451;color:#2a2e30}.accent-orange .custom-control-input:checked~.custom-control-label:before{background:#dda451;border-color:#a77121}.accent-orange .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%232a2e30' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-orange .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-orange .custom-file-input:focus~.custom-file-label,.accent-orange .custom-select:focus,.accent-orange .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#f2dcbc}.accent-orange .page-item .page-link{color:#dda451}.accent-orange .page-item.active .page-link,.accent-orange .page-item.active a{background-color:#dda451;border-color:#dda451;color:#fff}.accent-orange .page-item.disabled .page-link,.accent-orange .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-orange [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-orange [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-orange [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-orange [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-yellow .btn-link,.accent-yellow a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#edc30e}.accent-yellow .btn-link:hover,.accent-yellow a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#a5880a}.accent-yellow .dropdown-item.active,.accent-yellow .dropdown-item:active{background:#edc30e;color:#2a2e30}.accent-yellow .custom-control-input:checked~.custom-control-label:before{background:#edc30e;border-color:#8d7408}.accent-yellow .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%232a2e30' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-yellow .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-yellow .custom-file-input:focus~.custom-file-label,.accent-yellow .custom-select:focus,.accent-yellow .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#f8e283}.accent-yellow .page-item .page-link{color:#edc30e}.accent-yellow .page-item.active .page-link,.accent-yellow .page-item.active a{background-color:#edc30e;border-color:#edc30e;color:#fff}.accent-yellow .page-item.disabled .page-link,.accent-yellow .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-yellow [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-yellow [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-yellow [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-yellow [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-green .btn-link,.accent-green a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#21b978}.accent-green .btn-link:hover,.accent-green a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#15784e}.accent-green .dropdown-item.active,.accent-green .dropdown-item:active{background:#21b978;color:#fff}.accent-green .custom-control-input:checked~.custom-control-label:before{background:#21b978;border-color:#126240}.accent-green .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-green .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-green .custom-file-input:focus~.custom-file-label,.accent-green .custom-select:focus,.accent-green .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#73e6b5}.accent-green .page-item .page-link{color:#21b978}.accent-green .page-item.active .page-link,.accent-green .page-item.active a{background-color:#21b978;border-color:#21b978;color:#fff}.accent-green .page-item.disabled .page-link,.accent-green .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-green [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-green [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-green [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-green [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-teal .btn-link,.accent-teal a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#20c997}.accent-teal .btn-link:hover,.accent-teal a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#158765}.accent-teal .dropdown-item.active,.accent-teal .dropdown-item:active{background:#20c997;color:#fff}.accent-teal .custom-control-input:checked~.custom-control-label:before{background:#20c997;border-color:#127155}.accent-teal .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-teal .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-teal .custom-file-input:focus~.custom-file-label,.accent-teal .custom-select:focus,.accent-teal .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#7eeaca}.accent-teal .page-item .page-link{color:#20c997}.accent-teal .page-item.active .page-link,.accent-teal .page-item.active a{background-color:#20c997;border-color:#20c997;color:#fff}.accent-teal .page-item.disabled .page-link,.accent-teal .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-teal [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-teal [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-teal [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-teal [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-cyan .btn-link,.accent-cyan a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#7367f0}.accent-cyan .btn-link:hover,.accent-cyan a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#3321e9}.accent-cyan .dropdown-item.active,.accent-cyan .dropdown-item:active{background:#7367f0;color:#fff}.accent-cyan .custom-control-input:checked~.custom-control-label:before{background:#7367f0;border-color:#2716db}.accent-cyan .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-cyan .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-cyan .custom-file-input:focus~.custom-file-label,.accent-cyan .custom-select:focus,.accent-cyan .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#dedbfb}.accent-cyan .page-item .page-link{color:#7367f0}.accent-cyan .page-item.active .page-link,.accent-cyan .page-item.active a{background-color:#7367f0;border-color:#7367f0;color:#fff}.accent-cyan .page-item.disabled .page-link,.accent-cyan .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-cyan [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-cyan [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-cyan [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-cyan [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-white .btn-link,.accent-white a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#fff}.accent-white .btn-link:hover,.accent-white a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#d9d9d9}.accent-white .dropdown-item.active,.accent-white .dropdown-item:active{background:#fff;color:#2a2e30}.accent-white .custom-control-input:checked~.custom-control-label:before{background:#fff;border-color:#ccc}.accent-white .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%232a2e30' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-white .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-white .custom-file-input:focus~.custom-file-label,.accent-white .custom-select:focus,.accent-white .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#fff}.accent-white .page-item .page-link{color:#fff}.accent-white .page-item.active .page-link,.accent-white .page-item.active a{background-color:#fff;border-color:#fff;color:#fff}.accent-white .page-item.disabled .page-link,.accent-white .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-white [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-white [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-white [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-white [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-gray .btn-link,.accent-gray a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#b8c2cc}.accent-gray .btn-link:hover,.accent-gray a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#8b9cac}.accent-gray .dropdown-item.active,.accent-gray .dropdown-item:active{background:#b8c2cc;color:#2a2e30}.accent-gray .custom-control-input:checked~.custom-control-label:before{background:#b8c2cc;border-color:#7d8fa1}.accent-gray .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%232a2e30' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-gray .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-gray .custom-file-input:focus~.custom-file-label,.accent-gray .custom-select:focus,.accent-gray .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#fff}.accent-gray .page-item .page-link{color:#b8c2cc}.accent-gray .page-item.active .page-link,.accent-gray .page-item.active a{background-color:#b8c2cc;border-color:#b8c2cc;color:#fff}.accent-gray .page-item.disabled .page-link,.accent-gray .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-gray [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-gray [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-gray [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-gray [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-gray-dark .btn-link,.accent-gray-dark a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#1e1e1e}.accent-gray-dark .btn-link:hover,.accent-gray-dark a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#000}.accent-gray-dark .dropdown-item.active,.accent-gray-dark .dropdown-item:active{background:#1e1e1e;color:#fff}.accent-gray-dark .custom-control-input:checked~.custom-control-label:before{background:#1e1e1e;border-color:#000}.accent-gray-dark .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-gray-dark .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-gray-dark .custom-file-input:focus~.custom-file-label,.accent-gray-dark .custom-select:focus,.accent-gray-dark .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#5e5e5e}.accent-gray-dark .page-item .page-link{color:#1e1e1e}.accent-gray-dark .page-item.active .page-link,.accent-gray-dark .page-item.active a{background-color:#1e1e1e;border-color:#1e1e1e;color:#fff}.accent-gray-dark .page-item.disabled .page-link,.accent-gray-dark .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-gray-dark [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-gray-dark [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-gray-dark [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-gray-dark [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}[class*=accent-] a.btn-primary,[class*=accent-] a.btn-secondary{color:#2a2e30}[class*=accent-] a.btn-info,[class*=accent-] a.btn-success{color:#fff}[class*=accent-] a.btn-warning{color:#2a2e30}[class*=accent-] a.btn-danger{color:#fff}[class*=accent-] a.btn-light{color:#2a2e30}[class*=accent-] a.btn-dark{color:#fff} ================================================ FILE: public/vendor/dcat-admin/adminlte/adminlte-blue.css ================================================ /*! * AdminLTE v3.0.4 * Author: Colorlib * Website: AdminLTE.io * License: Open source - MIT */ /*! * Bootstrap v4.3.1 (https://getbootstrap.com/) * Copyright 2011-2019 The Bootstrap Authors * Copyright 2011-2019 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */ /*! * Bootstrap v4.3.1 (https://getbootstrap.com/) * Copyright 2011-2019 The Bootstrap Authors * Copyright 2011-2019 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */:root{--blue:#3085d6;--indigo:#5c6bc6;--purple:#6f42c1;--pink:#ff8acc;--red:#ea5455;--orange:#dda451;--yellow:#edc30e;--green:#21b978;--teal:#20c997;--cyan:#7367f0;--white:#fff;--gray:#b8c2cc;--gray-dark:#1e1e1e;--primary:#6d8be6;--secondary:#b8c2cc;--success:#21b978;--info:#4277cf;--warning:#dda451;--danger:#ea5455;--light:#f7f7f9;--dark:#22292f;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:"Montserrat",Helvetica,Arial,serif;--font-family-monospace:"Montserrat",Helvetica,Arial,serif}*,:after,:before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(34,41,47,0)}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:Montserrat,Helvetica,Arial,serif;font-size:1rem;font-weight:400;line-height:1.45;color:#626262;text-align:left;background-color:#eff1f7}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{font-style:normal;line-height:inherit}address,dl,ol,ul{margin-bottom:1rem}dl,ol,ul{margin-top:0}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#577ae2;background-color:transparent}a,a:hover{text-decoration:none}a:hover{color:#2c57db}a:not([href]):not([tabindex]),a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:Montserrat,Helvetica,Arial,serif;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{border-style:none}img,svg{vertical-align:middle}svg{overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#b8c2cc;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-family:inherit;font-weight:500;line-height:1.2;color:#2c2c2c}.h1,h1{font-size:2rem}.h2,h2{font-size:1.74rem}.h3,h3{font-size:1.51rem}.h4,h4{font-size:1.32rem}.h5,h5{font-size:1.14rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem}.display-1,.display-2{font-weight:300;line-height:1.2}.display-2{font-size:5.5rem}.display-3{font-size:4.5rem}.display-3,.display-4{font-weight:300;line-height:1.2}.display-4{font-size:3.5rem}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(34,41,47,.1)}.small,small{font-size:smaller;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-inline,.list-unstyled{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:smaller;color:#b8c2cc}.blockquote-footer:before{content:"\2014\A0"}.img-fluid,.img-thumbnail{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#eff1f7;border:1px solid #dae1e7;border-radius:.5rem}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#b8c2cc}code{word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:90%;color:#fff;background-color:#eee;border-radius:.25rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:90%;color:#2a2e30}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:14px;padding-left:14px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:14px;padding-left:14px;margin-right:auto;margin-left:auto}.row{display:flex;flex-wrap:wrap;margin-right:-14px;margin-left:-14px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col-auto,.col-lg,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-auto,.col-md,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-md-auto,.col-sm,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-auto{position:relative;width:100%;padding-right:14px;padding-left:14px}.col{flex-basis:0;flex-grow:1;max-width:100%}.col-auto{flex:0 0 auto;width:auto;max-width:100%}.col-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-3{flex:0 0 25%;max-width:25%}.col-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-6{flex:0 0 50%;max-width:50%}.col-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-9{flex:0 0 75%;max-width:75%}.col-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-12{flex:0 0 100%;max-width:100%}.order-first{order:-1}.order-last{order:13}.order-0{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.offset-1{margin-left:8.3333333333%}.offset-2{margin-left:16.6666666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.3333333333%}.offset-5{margin-left:41.6666666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.3333333333%}.offset-8{margin-left:66.6666666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.3333333333%}.offset-11{margin-left:91.6666666667%}@media (min-width:576px){.col-sm{flex-basis:0;flex-grow:1;max-width:100%}.col-sm-auto{flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-sm-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-sm-3{flex:0 0 25%;max-width:25%}.col-sm-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-sm-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-sm-6{flex:0 0 50%;max-width:50%}.col-sm-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-sm-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-sm-9{flex:0 0 75%;max-width:75%}.col-sm-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-sm-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-sm-12{flex:0 0 100%;max-width:100%}.order-sm-first{order:-1}.order-sm-last{order:13}.order-sm-0{order:0}.order-sm-1{order:1}.order-sm-2{order:2}.order-sm-3{order:3}.order-sm-4{order:4}.order-sm-5{order:5}.order-sm-6{order:6}.order-sm-7{order:7}.order-sm-8{order:8}.order-sm-9{order:9}.order-sm-10{order:10}.order-sm-11{order:11}.order-sm-12{order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.3333333333%}.offset-sm-2{margin-left:16.6666666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.3333333333%}.offset-sm-5{margin-left:41.6666666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.3333333333%}.offset-sm-8{margin-left:66.6666666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.3333333333%}.offset-sm-11{margin-left:91.6666666667%}}@media (min-width:768px){.col-md{flex-basis:0;flex-grow:1;max-width:100%}.col-md-auto{flex:0 0 auto;width:auto;max-width:100%}.col-md-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-md-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-md-3{flex:0 0 25%;max-width:25%}.col-md-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-md-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-md-6{flex:0 0 50%;max-width:50%}.col-md-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-md-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-md-9{flex:0 0 75%;max-width:75%}.col-md-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-md-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-md-12{flex:0 0 100%;max-width:100%}.order-md-first{order:-1}.order-md-last{order:13}.order-md-0{order:0}.order-md-1{order:1}.order-md-2{order:2}.order-md-3{order:3}.order-md-4{order:4}.order-md-5{order:5}.order-md-6{order:6}.order-md-7{order:7}.order-md-8{order:8}.order-md-9{order:9}.order-md-10{order:10}.order-md-11{order:11}.order-md-12{order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.3333333333%}.offset-md-2{margin-left:16.6666666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.3333333333%}.offset-md-5{margin-left:41.6666666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.3333333333%}.offset-md-8{margin-left:66.6666666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.3333333333%}.offset-md-11{margin-left:91.6666666667%}}@media (min-width:992px){.col-lg{flex-basis:0;flex-grow:1;max-width:100%}.col-lg-auto{flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-lg-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-lg-3{flex:0 0 25%;max-width:25%}.col-lg-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-lg-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-lg-6{flex:0 0 50%;max-width:50%}.col-lg-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-lg-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-lg-9{flex:0 0 75%;max-width:75%}.col-lg-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-lg-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-lg-12{flex:0 0 100%;max-width:100%}.order-lg-first{order:-1}.order-lg-last{order:13}.order-lg-0{order:0}.order-lg-1{order:1}.order-lg-2{order:2}.order-lg-3{order:3}.order-lg-4{order:4}.order-lg-5{order:5}.order-lg-6{order:6}.order-lg-7{order:7}.order-lg-8{order:8}.order-lg-9{order:9}.order-lg-10{order:10}.order-lg-11{order:11}.order-lg-12{order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.3333333333%}.offset-lg-2{margin-left:16.6666666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.3333333333%}.offset-lg-5{margin-left:41.6666666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.3333333333%}.offset-lg-8{margin-left:66.6666666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.3333333333%}.offset-lg-11{margin-left:91.6666666667%}}@media (min-width:1200px){.col-xl{flex-basis:0;flex-grow:1;max-width:100%}.col-xl-auto{flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-xl-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-xl-3{flex:0 0 25%;max-width:25%}.col-xl-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-xl-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-xl-6{flex:0 0 50%;max-width:50%}.col-xl-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-xl-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-xl-9{flex:0 0 75%;max-width:75%}.col-xl-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-xl-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-xl-12{flex:0 0 100%;max-width:100%}.order-xl-first{order:-1}.order-xl-last{order:13}.order-xl-0{order:0}.order-xl-1{order:1}.order-xl-2{order:2}.order-xl-3{order:3}.order-xl-4{order:4}.order-xl-5{order:5}.order-xl-6{order:6}.order-xl-7{order:7}.order-xl-8{order:8}.order-xl-9{order:9}.order-xl-10{order:10}.order-xl-11{order:11}.order-xl-12{order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.3333333333%}.offset-xl-2{margin-left:16.6666666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.3333333333%}.offset-xl-5{margin-left:41.6666666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.3333333333%}.offset-xl-8{margin-left:66.6666666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.3333333333%}.offset-xl-11{margin-left:91.6666666667%}}.table{width:100%;margin-bottom:1rem;color:#626262}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #eff1f7}.table thead th{vertical-align:bottom;border-bottom:2px solid #eff1f7}.table tbody+tbody{border-top:2px solid #eff1f7}.table-sm td,.table-sm th{padding:.3rem}.table-bordered,.table-bordered td,.table-bordered th{border:1px solid #eff1f7}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(34,41,47,.05)}.table-hover tbody tr:hover{color:#626262;background-color:rgba(34,41,47,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#d6dff8}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#b3c3f2}.table-hover .table-primary:hover,.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#c0cef4}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#ebeef1}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#dadfe4}.table-hover .table-secondary:hover,.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#dce1e7}.table-success,.table-success>td,.table-success>th{background-color:#c1ebd9}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8cdbb9}.table-hover .table-success:hover,.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#aee5cd}.table-info,.table-info>td,.table-info>th{background-color:#cad9f2}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#9db8e6}.table-hover .table-info:hover,.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#b6caed}.table-warning,.table-warning>td,.table-warning>th{background-color:#f5e6ce}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#edd0a5}.table-hover .table-warning:hover,.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#f1dbb9}.table-danger,.table-danger>td,.table-danger>th{background-color:#f9cfcf}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#f4a6a7}.table-hover .table-danger:hover,.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f6b8b8}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfd}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfbfc}.table-hover .table-light:hover,.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#f0f0f0}.table-dark,.table-dark>td,.table-dark>th{background-color:#c1c3c5}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#8c9093}.table-hover .table-dark:hover,.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b4b6b9}.table-active,.table-active>td,.table-active>th{background-color:rgba(34,41,47,.075)}.table-hover .table-active:hover,.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(23,28,32,.075)}.table .thead-dark th{color:#fff;background-color:#1e1e1e;border-color:#313131}.table .thead-light th{color:#4e5154;background-color:#ededed;border-color:#eff1f7}.table-dark{color:#fff;background-color:#1e1e1e}.table-dark td,.table-dark th,.table-dark thead th{border-color:#313131}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:hsla(0,0%,100%,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:hsla(0,0%,100%,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:34px;padding:.7rem;font-size:.96rem;font-weight:400;line-height:1.25;color:#4e5154;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:5px;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#4e5154;background-color:#fff;border-color:#6d8be6;outline:0;box-shadow:0 3px 10px 0 rgba(0,0,0,.15)}.form-control::-moz-placeholder{color:rgba(0,0,0,.5);opacity:1}.form-control:-ms-input-placeholder{color:rgba(0,0,0,.5);opacity:1}.form-control::placeholder{color:rgba(0,0,0,.5);opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#f5f5f1;opacity:1}select.form-control:focus::-ms-value{color:#4e5154;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.7rem + 1px);padding-bottom:calc(.7rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.25}.col-form-label-lg{padding-top:calc(1rem + 1px);padding-bottom:calc(1rem + 1px);font-size:1.25rem;line-height:1.25}.col-form-label-sm{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:.7rem;line-height:1}.form-control-plaintext{display:block;width:100%;padding-top:.7rem;padding-bottom:.7rem;margin-bottom:0;line-height:1.25;color:#adb5bd;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:2rem;padding:.5rem 1.5rem;font-size:.7rem;line-height:1;border-radius:4px}.form-control-lg{height:calc(1.25em + 2rem + 2px);padding:1rem 2.5rem;font-size:1.25rem;line-height:1.25;border-radius:6px}select.form-control[multiple],select.form-control[size],textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:flex;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#b8c2cc}.form-check-label{margin-bottom:0}.form-check-inline{display:inline-flex;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:smaller;color:#21b978}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:1rem;line-height:1.45;color:#fff;background-color:rgba(33,185,120,.9);border-radius:.5rem}.form-control.is-valid,.was-validated .form-control:valid{border-color:#21b978;padding-right:calc(1.25em + 1.4rem);background-repeat:no-repeat;background-position:100% calc(.3125em + .35rem);background-size:calc(.625em + .7rem) calc(.625em + .7rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#21b978;box-shadow:0 0 0 .2rem rgba(33,185,120,.25)}.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.25em + 1.4rem);background-position:top calc(.3125em + .35rem) right calc(.3125em + .35rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#21b978;padding-right:calc(.75em + 2.75rem);background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%231e1e1e' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .7rem center/8px 10px,url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%2321b978' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E") #fff no-repeat center right 1.7rem/calc(.625em + .7rem) calc(.625em + .7rem)}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#21b978;box-shadow:0 0 0 .2rem rgba(33,185,120,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.form-control-file.is-valid~.valid-feedback,.form-control-file.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip,.was-validated .form-control-file:valid~.valid-feedback,.was-validated .form-control-file:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#21b978}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#21b978}.custom-control-input.is-valid~.custom-control-label:before,.was-validated .custom-control-input:valid~.custom-control-label:before{border-color:#21b978}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label:before,.was-validated .custom-control-input:valid:checked~.custom-control-label:before{border-color:#32db93;background-color:#32db93}.custom-control-input.is-valid:focus~.custom-control-label:before,.was-validated .custom-control-input:valid:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem rgba(33,185,120,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label:before,.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#21b978}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#21b978;box-shadow:0 0 0 .2rem rgba(33,185,120,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:smaller;color:#ea5455}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:1rem;line-height:1.45;color:#fff;background-color:rgba(234,84,85,.9);border-radius:.5rem}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#ea5455;padding-right:calc(1.25em + 1.4rem);background-repeat:no-repeat;background-position:100% calc(.3125em + .35rem);background-size:calc(.625em + .7rem) calc(.625em + .7rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#ea5455;box-shadow:0 0 0 .2rem rgba(234,84,85,.25)}.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.25em + 1.4rem);background-position:top calc(.3125em + .35rem) right calc(.3125em + .35rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#ea5455;padding-right:calc(.75em + 2.75rem);background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%231e1e1e' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .7rem center/8px 10px,url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23ea5455' viewBox='-2 -2 7 7'%3E%3Cpath stroke='%23ea5455' d='M0 0l3 3m0-3L0 3'/%3E%3Ccircle r='.5'/%3E%3Ccircle cx='3' r='.5'/%3E%3Ccircle cy='3' r='.5'/%3E%3Ccircle cx='3' cy='3' r='.5'/%3E%3C/svg%3E") #fff no-repeat center right 1.7rem/calc(.625em + .7rem) calc(.625em + .7rem)}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#ea5455;box-shadow:0 0 0 .2rem rgba(234,84,85,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.form-control-file.is-invalid~.invalid-feedback,.form-control-file.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip,.was-validated .form-control-file:invalid~.invalid-feedback,.was-validated .form-control-file:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#ea5455}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#ea5455}.custom-control-input.is-invalid~.custom-control-label:before,.was-validated .custom-control-input:invalid~.custom-control-label:before{border-color:#ea5455}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label:before,.was-validated .custom-control-input:invalid:checked~.custom-control-label:before{border-color:#f08182;background-color:#f08182}.custom-control-input.is-invalid:focus~.custom-control-label:before,.was-validated .custom-control-input:invalid:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem rgba(234,84,85,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label:before,.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#ea5455}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#ea5455;box-shadow:0 0 0 .2rem rgba(234,84,85,.25)}.form-inline{display:flex;flex-flow:row wrap;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{justify-content:center}.form-inline .form-group,.form-inline label{display:flex;align-items:center;margin-bottom:0}.form-inline .form-group{flex:0 0 auto;flex-flow:row wrap}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:flex;align-items:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{align-items:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#626262;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:0 solid transparent;padding:.9rem 2rem;font-size:1rem;line-height:1;border-radius:.42rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#626262;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(109,139,230,.25)}.btn.disabled,.btn:disabled{opacity:.65}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#6d8be6;border-color:#6d8be6}.btn-primary:hover{color:#fff;background-color:#5e7fe3;border-color:#5e7fe3}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(131,156,234,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#6d8be6;border-color:#6d8be6}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#577ae2;border-color:#577ae2}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(131,156,234,.5)}.btn-secondary{color:#2a2e30;background-color:#b8c2cc;border-color:#b8c2cc}.btn-secondary:hover{color:#2a2e30;background-color:#aeb9c5;border-color:#aeb9c5}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(163,172,181,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#2a2e30;background-color:#b8c2cc;border-color:#b8c2cc}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#2a2e30;background-color:#a9b5c1;border-color:#a9b5c1}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(163,172,181,.5)}.btn-success{color:#fff;background-color:#21b978;border-color:#21b978}.btn-success:hover{color:#fff;background-color:#1eaa6e;border-color:#1eaa6e}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(66,196,140,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#21b978;border-color:#21b978}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1da36a;border-color:#1da36a}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(66,196,140,.5)}.btn-info{color:#fff;background-color:#4277cf;border-color:#4277cf}.btn-info:hover{color:#fff;background-color:#346dcb;border-color:#346dcb}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(94,139,214,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#4277cf;border-color:#4277cf}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#3269c5;border-color:#3269c5}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(94,139,214,.5)}.btn-warning{color:#2a2e30;background-color:#dda451;border-color:#dda451}.btn-warning:hover{color:#2a2e30;background-color:#da9c42;border-color:#da9c42}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(194,146,76,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#2a2e30;background-color:#dda451;border-color:#dda451}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#2a2e30;background-color:#d9993c;border-color:#d9993c}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(194,146,76,.5)}.btn-danger{color:#fff;background-color:#ea5455;border-color:#ea5455}.btn-danger:hover{color:#fff;background-color:#e84445;border-color:#e84445}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(237,110,111,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#ea5455;border-color:#ea5455}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#e73d3e;border-color:#e73d3e}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(237,110,111,.5)}.btn-light{color:#2a2e30;background-color:#f7f7f9;border-color:#f7f7f9}.btn-light:hover{color:#2a2e30;background-color:#ededf1;border-color:#ededf1}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#2a2e30;background-color:#f7f7f9;border-color:#f7f7f9}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#2a2e30;background-color:#e8e8ee;border-color:#e8e8ee}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#22292f;border-color:#22292f}.btn-dark:hover{color:#fff;background-color:#1b2025;border-color:#1b2025}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(67,73,78,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#22292f;border-color:#22292f}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#171c20;border-color:#171c20}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(67,73,78,.5)}.btn-outline-primary,.btn-outline-primary:hover{color:#6d8be6;border-color:#6d8be6}.btn-outline-primary:hover{background-color:rgba(109,139,230,.1)}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(109,139,230,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#6d8be6;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#6d8be6;border-color:#6d8be6}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(109,139,230,.5)}.btn-outline-secondary,.btn-outline-secondary:hover{color:#b8c2cc;border-color:#b8c2cc}.btn-outline-secondary:hover{background-color:rgba(184,194,204,.1)}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(184,194,204,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#b8c2cc;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#2a2e30;background-color:#b8c2cc;border-color:#b8c2cc}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(184,194,204,.5)}.btn-outline-success,.btn-outline-success:hover{color:#21b978;border-color:#21b978}.btn-outline-success:hover{background-color:rgba(33,185,120,.1)}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(33,185,120,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#21b978;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#21b978;border-color:#21b978}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(33,185,120,.5)}.btn-outline-info,.btn-outline-info:hover{color:#4277cf;border-color:#4277cf}.btn-outline-info:hover{background-color:rgba(66,119,207,.1)}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(66,119,207,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#4277cf;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#4277cf;border-color:#4277cf}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(66,119,207,.5)}.btn-outline-warning,.btn-outline-warning:hover{color:#dda451;border-color:#dda451}.btn-outline-warning:hover{background-color:rgba(221,164,81,.1)}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(221,164,81,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#dda451;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#2a2e30;background-color:#dda451;border-color:#dda451}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(221,164,81,.5)}.btn-outline-danger,.btn-outline-danger:hover{color:#ea5455;border-color:#ea5455}.btn-outline-danger:hover{background-color:rgba(234,84,85,.1)}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(234,84,85,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#ea5455;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#ea5455;border-color:#ea5455}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(234,84,85,.5)}.btn-outline-light,.btn-outline-light:hover{color:#f7f7f9;border-color:#f7f7f9}.btn-outline-light:hover{background-color:rgba(247,247,249,.1)}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(247,247,249,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f7f7f9;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#2a2e30;background-color:#f7f7f9;border-color:#f7f7f9}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(247,247,249,.5)}.btn-outline-dark,.btn-outline-dark:hover{color:#22292f;border-color:#22292f}.btn-outline-dark:hover{background-color:rgba(34,41,47,.1)}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(34,41,47,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#22292f;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#22292f;border-color:#22292f}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(34,41,47,.5)}.btn-link{font-weight:400;color:#577ae2;text-decoration:none}.btn-link:hover{color:#2c57db;text-decoration:none}.btn-link.focus,.btn-link:focus{text-decoration:none;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#b8c2cc;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:1rem 2.5rem;font-size:1.25rem;line-height:1.25;border-radius:.4285rem}.btn-group-sm>.btn,.btn-sm{padding:.5rem 1.5rem;font-size:.7rem;line-height:1;border-radius:.4285rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown-toggle{white-space:nowrap}.dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty:after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:10;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.5rem 0 0;font-size:.9375rem;color:#626262;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(34,41,47,.15);border-radius:5px}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.5rem}.dropup .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.5rem}.dropright .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-toggle:after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.5rem}.dropleft .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";display:none}.dropleft .dropdown-toggle:before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty:after{margin-left:0}.dropleft .dropdown-toggle:before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid rgba(0,0,0,.08)}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#2a2e30;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#1e2122;text-decoration:none;background-color:#eff1f7}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#6d8be6}.dropdown-item.disabled,.dropdown-item:disabled{color:#b8c2cc;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:1rem;color:#b8c2cc;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#2a2e30}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;flex:1 1 auto}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:0}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:1.5rem;padding-left:1.5rem}.dropdown-toggle-split:after,.dropright .dropdown-toggle-split:after,.dropup .dropdown-toggle-split:after{margin-left:0}.dropleft .dropdown-toggle-split:before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:1.125rem;padding-left:1.125rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:1.875rem;padding-left:1.875rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:0}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio],.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:flex;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label:after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:flex;align-items:center;padding:.7rem;margin-bottom:0;font-size:.96rem;font-weight:400;line-height:1.25;color:#4e5154;text-align:center;white-space:nowrap;background-color:#ededed;border:1px solid rgba(0,0,0,.2);border-radius:5px}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.25em + 2rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:1rem 2.5rem;font-size:1.25rem;line-height:1.25;border-radius:6px}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:2rem}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.5rem 1.5rem;font-size:.7rem;line-height:1;border-radius:4px}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.7rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.45rem;padding-left:1.5rem}.custom-control-inline{display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label:before{color:#fff;border-color:#6d8be6;background-color:#6d8be6}.custom-control-input:focus~.custom-control-label:before{box-shadow:0 3px 10px 0 rgba(0,0,0,.15)}.custom-control-input:focus:not(:checked)~.custom-control-label:before{border-color:#6d8be6}.custom-control-input:not(:disabled):active~.custom-control-label:before{color:#fff;background-color:#fff;border-color:#fff}.custom-control-input:disabled~.custom-control-label{color:#b8c2cc}.custom-control-input:disabled~.custom-control-label:before{background-color:#f5f5f1}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label:before{pointer-events:none;background-color:#fff;border:1px solid #adb5bd}.custom-control-label:after,.custom-control-label:before{position:absolute;top:.225rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:""}.custom-control-label:after{background:no-repeat 50%/50% 50%}.custom-checkbox .custom-control-label:before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:before{border-color:#6d8be6;background-color:#6d8be6}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(109,139,230,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label:before{background-color:rgba(109,139,230,.5)}.custom-radio .custom-control-label:before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(109,139,230,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label:before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label:after{top:calc(.225rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label:after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label:after{background-color:#fff;transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(109,139,230,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.25em + 1.4rem + 1px);padding:.7rem 1.7rem .7rem .7rem;font-size:.96rem;font-weight:400;line-height:1.25;color:#4e5154;vertical-align:middle;background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%231e1e1e' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .7rem center/8px 10px;background-color:#fff;border:1px solid rgba(0,0,0,.2);border-radius:5px;appearance:none}.custom-select:focus{border-color:#6d8be6;outline:0;box-shadow:0 3px 10px 0 rgba(0,0,0,.15)}.custom-select:focus::-ms-value{color:#4e5154;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.7rem;background-image:none}.custom-select:disabled{color:#b8c2cc;background-color:#ededed}.custom-select::-ms-expand{display:none}.custom-select-sm{height:2rem;padding-top:.5rem;padding-bottom:.5rem;padding-left:1.5rem;font-size:.7rem}.custom-select-lg{height:calc(1.25em + 2rem + 2px);padding-top:1rem;padding-bottom:1rem;padding-left:2.5rem;font-size:1.25rem}.custom-file{display:inline-block;margin-bottom:0}.custom-file,.custom-file-input{position:relative;width:100%;height:calc(1.25em + 1.4rem + 1px)}.custom-file-input{z-index:2;margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#6d8be6;box-shadow:0 3px 10px 0 rgba(0,0,0,.15)}.custom-file-input:disabled~.custom-file-label{background-color:#f5f5f1}.custom-file-input:lang(en)~.custom-file-label:after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]:after{content:attr(data-browse)}.custom-file-label{left:0;z-index:1;height:calc(1.25em + 1.4rem + 1px);font-weight:400;background-color:#fff;border:1px solid rgba(0,0,0,.2);border-radius:5px}.custom-file-label,.custom-file-label:after{position:absolute;top:0;right:0;padding:.7rem;line-height:1.5rem;color:#4e5154}.custom-file-label:after{bottom:0;z-index:3;display:block;height:calc(1.25em + 1.4rem);content:"Browse";background-color:#ededed;border-left:inherit;border-radius:0 5px 5px 0}.custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:none}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 3px 10px 0 rgba(0,0,0,.15)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 3px 10px 0 rgba(0,0,0,.15)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 3px 10px 0 rgba(0,0,0,.15)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#6d8be6;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#fff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dae1e7;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#6d8be6;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{-moz-transition:none;transition:none}}.custom-range::-moz-range-thumb:active{background-color:#fff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dae1e7;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#6d8be6;border:0;border-radius:1rem;-ms-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{-ms-transition:none;transition:none}}.custom-range::-ms-thumb:active{background-color:#fff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower,.custom-range::-ms-fill-upper{background-color:#dae1e7;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label:before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label:before,.custom-file-label,.custom-select{transition:none}}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.357rem .5rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#b8c2cc;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dae1e7}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.5rem;border-top-right-radius:.5rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#ededed #ededed #dae1e7}.nav-tabs .nav-link.disabled{color:#b8c2cc;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#4e5154;background-color:#eff1f7;border-color:#dae1e7 #dae1e7 #eff1f7}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.5rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#6d8be6}.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;padding:.5rem 1rem}.navbar,.navbar>.container,.navbar>.container-fluid{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:-.368rem;padding-bottom:-.368rem;margin-right:1rem;font-size:2rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.357rem;padding-bottom:.357rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:2rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.42rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat 50%;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand,.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(34,41,47,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(34,41,47,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(34,41,47,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(34,41,47,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(34,41,47,.9)}.navbar-light .navbar-toggler{color:rgba(34,41,47,.5);border-color:rgba(34,41,47,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(34, 41, 47, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-light .navbar-text{color:rgba(34,41,47,.5)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(34,41,47,.9)}.navbar-dark .navbar-brand,.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:hsla(0,0%,100%,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:hsla(0,0%,100%,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:hsla(0,0%,100%,.5);border-color:hsla(0,0%,100%,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-dark .navbar-text{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(34,41,47,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem}.card-subtitle,.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{margin-bottom:0;background-color:rgba(34,41,47,.03);border-bottom:1px solid rgba(34,41,47,.125)}.card-header:first-child{border-radius:calc(.5rem - 1px) calc(.5rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(34,41,47,.03);border-top:1px solid rgba(34,41,47,.125)}.card-footer:last-child{border-radius:0 0 calc(.5rem - 1px) calc(.5rem - 1px)}.card-header-tabs{margin-bottom:-.75rem;border-bottom:0}.card-header-pills,.card-header-tabs{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.5rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.5rem - 1px);border-top-right-radius:calc(.5rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.5rem - 1px);border-bottom-left-radius:calc(.5rem - 1px)}.card-deck{display:flex;flex-direction:column}.card-deck .card{margin-bottom:14px}@media (min-width:576px){.card-deck{flex-flow:row wrap;margin-right:-14px;margin-left:-14px}.card-deck .card{display:flex;flex:1 0 0%;flex-direction:column;margin-right:14px;margin-bottom:0;margin-left:14px}}.card-group{display:flex;flex-direction:column}.card-group>.card{margin-bottom:14px}@media (min-width:576px){.card-group{flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-moz-column-count:3;column-count:3;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion>.card{overflow:hidden}.accordion>.card:not(:first-of-type) .card-header:first-child{border-radius:0}.accordion>.card:not(:first-of-type):not(:last-of-type){border-bottom:0;border-radius:0}.accordion>.card:first-of-type{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:last-of-type{border-top-left-radius:0;border-top-right-radius:0}.accordion>.card .card-header{margin-bottom:-1px}.breadcrumb{display:flex;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#ededed;border-radius:.5rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item:before{display:inline-block;padding-right:.5rem;color:#b8c2cc;content:"/"}.breadcrumb-item+.breadcrumb-item:hover:before{text-decoration:underline;text-decoration:none}.breadcrumb-item.active{color:#b8c2cc}.pagination{display:flex;padding-left:0;list-style:none;border-radius:.5rem}.page-link{position:relative;display:block;padding:.65rem .911rem;margin-left:-1px;line-height:1.25;color:#577ae2;background-color:#fff;border:1px solid #dae1e7}.page-link:hover{z-index:2;color:#2c57db;text-decoration:none;background-color:#ededed;border-color:#dae1e7}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(109,139,230,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.5rem;border-bottom-left-radius:.5rem}.page-item:last-child .page-link{border-top-right-radius:.5rem;border-bottom-right-radius:.5rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#6d8be6;border-color:#6d8be6}.page-item.disabled .page-link{color:#b8c2cc;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dae1e7}.pagination-lg .page-link{padding:.5rem 1rem;font-size:2rem;line-height:1.25}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.6rem;border-bottom-left-radius:.6rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.6rem;border-bottom-right-radius:.6rem}.pagination-sm .page-link{padding:.5rem .75rem;font-size:1rem;line-height:1}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.5rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#6d8be6}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#4168df}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(109,139,230,.5)}.badge-secondary{color:#2a2e30;background-color:#b8c2cc}a.badge-secondary:focus,a.badge-secondary:hover{color:#2a2e30;background-color:#9aa9b7}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(184,194,204,.5)}.badge-success{color:#fff;background-color:#21b978}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#198e5c}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(33,185,120,.5)}.badge-info{color:#fff;background-color:#4277cf}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#2d5fb1}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(66,119,207,.5)}.badge-warning{color:#2a2e30;background-color:#dda451}a.badge-warning:focus,a.badge-warning:hover{color:#2a2e30;background-color:#d28d29}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(221,164,81,.5)}.badge-danger{color:#fff;background-color:#ea5455}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#e42728}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(234,84,85,.5)}.badge-light{color:#2a2e30;background-color:#f7f7f9}a.badge-light:focus,a.badge-light:hover{color:#2a2e30;background-color:#dadae3}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(247,247,249,.5)}.badge-dark{color:#fff;background-color:#22292f}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#0d0f11}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(34,41,47,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#ededed;border-radius:.6rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.5rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close,.alert-dismissible .mailbox-attachment-close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#495c8e;background-color:#e2e8fa;border-color:#d6dff8}.alert-primary hr{border-top-color:#c0cef4}.alert-primary .alert-link{color:#38466c}.alert-secondary{color:#707981;background-color:#f1f3f5;border-color:#ebeef1}.alert-secondary hr{border-top-color:#dce1e7}.alert-secondary .alert-link{color:#585f66}.alert-success{color:#217455;background-color:#d3f1e4;border-color:#c1ebd9}.alert-success hr{border-top-color:#aee5cd}.alert-success .alert-link{color:#164c38}.alert-info{color:#335282;background-color:#d9e4f5;border-color:#cad9f2}.alert-info hr{border-top-color:#b6caed}.alert-info .alert-link{color:#253b5d}.alert-warning{color:#836941;background-color:#f8eddc;border-color:#f5e6ce}.alert-warning hr{border-top-color:#f1dbb9}.alert-warning .alert-link{color:#614e30}.alert-danger{color:#8a3f43;background-color:#fbdddd;border-color:#f9cfcf}.alert-danger hr{border-top-color:#f6b8b8}.alert-danger .alert-link{color:#672f32}.alert-light{color:#919498;background-color:#fdfdfe;border-color:#fdfdfd}.alert-light hr{border-top-color:#f0f0f0}.alert-light .alert-link{color:#777a7f}.alert-dark{color:#22292f;background-color:#d3d4d5;border-color:#c1c3c5}.alert-dark hr{border-top-color:#b4b6b9}.alert-dark .alert-link{color:#0d0f11}@-webkit-keyframes progress-bar-stripes{0%{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{0%{background-position:1rem 0}to{background-position:0 0}}.progress{display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#ededed;border-radius:.5rem}.progress-bar{display:flex;flex-direction:column;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#6d8be6;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.media{display:flex;align-items:flex-start}.media-body{flex:1}.list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#4e5154;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#4e5154;text-decoration:none;background-color:#babfc7}.list-group-item-action:active{color:#626262;background-color:#ededed}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(34,41,47,.125)}.list-group-item:first-child{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.5rem;border-bottom-left-radius:.5rem}.list-group-item.disabled,.list-group-item:disabled{color:#b8c2cc;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#6d8be6;border-color:#6d8be6}.list-group-horizontal{flex-direction:row}.list-group-horizontal .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal .list-group-item:first-child{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem;border-top-right-radius:0}.list-group-horizontal .list-group-item:last-child{margin-right:0;border-top-right-radius:.5rem;border-bottom-right-radius:.5rem;border-bottom-left-radius:0}@media (min-width:576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-sm .list-group-item:first-child{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem;border-top-right-radius:0}.list-group-horizontal-sm .list-group-item:last-child{margin-right:0;border-top-right-radius:.5rem;border-bottom-right-radius:.5rem;border-bottom-left-radius:0}}@media (min-width:768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-md .list-group-item:first-child{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem;border-top-right-radius:0}.list-group-horizontal-md .list-group-item:last-child{margin-right:0;border-top-right-radius:.5rem;border-bottom-right-radius:.5rem;border-bottom-left-radius:0}}@media (min-width:992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-lg .list-group-item:first-child{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem;border-top-right-radius:0}.list-group-horizontal-lg .list-group-item:last-child{margin-right:0;border-top-right-radius:.5rem;border-bottom-right-radius:.5rem;border-bottom-left-radius:0}}@media (min-width:1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-xl .list-group-item:first-child{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem;border-top-right-radius:0}.list-group-horizontal-xl .list-group-item:last-child{margin-right:0;border-top-right-radius:.5rem;border-bottom-right-radius:.5rem;border-bottom-left-radius:0}}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush .list-group-item:last-child{margin-bottom:-1px}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{margin-bottom:0;border-bottom:0}.list-group-item-primary{color:#495c8e;background-color:#d6dff8}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#495c8e;background-color:#c0cef4}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#495c8e;border-color:#495c8e}.list-group-item-secondary{color:#707981;background-color:#ebeef1}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#707981;background-color:#dce1e7}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#707981;border-color:#707981}.list-group-item-success{color:#217455;background-color:#c1ebd9}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#217455;background-color:#aee5cd}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#217455;border-color:#217455}.list-group-item-info{color:#335282;background-color:#cad9f2}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#335282;background-color:#b6caed}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#335282;border-color:#335282}.list-group-item-warning{color:#836941;background-color:#f5e6ce}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#836941;background-color:#f1dbb9}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#836941;border-color:#836941}.list-group-item-danger{color:#8a3f43;background-color:#f9cfcf}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#8a3f43;background-color:#f6b8b8}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#8a3f43;border-color:#8a3f43}.list-group-item-light{color:#919498;background-color:#fdfdfd}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#919498;background-color:#f0f0f0}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#919498;border-color:#919498}.list-group-item-dark{color:#22292f;background-color:#c1c3c5}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#22292f;background-color:#b4b6b9}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#22292f;border-color:#22292f}.close,.mailbox-attachment-close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#22292f;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover,.mailbox-attachment-close:hover{color:#22292f;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover,.mailbox-attachment-close:not(:disabled):not(.disabled):focus,.mailbox-attachment-close:not(:disabled):not(.disabled):hover{opacity:.75}button.close,button.mailbox-attachment-close{padding:0;background-color:transparent;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}a.close.disabled,a.disabled.mailbox-attachment-close{pointer-events:none}.toast{max-width:350px;overflow:hidden;font-size:.875rem;background-color:hsla(0,0%,100%,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(34,41,47,.1);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:flex;align-items:center;padding:.25rem .75rem;color:#b8c2cc;background-color:hsla(0,0%,100%,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translateY(-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal-dialog-scrollable{display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered:before{display:block;height:calc(100vh - 1rem);content:""}.modal-dialog-centered.modal-dialog-scrollable{flex-direction:column;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable:before{content:none}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(34,41,47,.2);border-radius:.6rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#22292f}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;align-items:flex-start;justify-content:space-between;padding:1rem;border-bottom:1px solid #ededed;border-top-left-radius:.6rem;border-top-right-radius:.6rem}.modal-header .close,.modal-header .mailbox-attachment-close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.45}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;align-items:center;justify-content:flex-end;padding:1rem;border-top:1px solid #ededed;border-bottom-right-radius:.6rem;border-bottom-left-radius:.6rem}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered:before{height:calc(100vh - 3.5rem)}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:Montserrat,Helvetica,Arial,serif;font-style:normal;font-weight:400;line-height:1.45;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:1rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow:before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow:before,.bs-tooltip-top .arrow:before{top:0;border-width:.4rem .4rem 0;border-top-color:#22292f}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow:before,.bs-tooltip-right .arrow:before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#22292f}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow:before,.bs-tooltip-bottom .arrow:before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#22292f}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow:before,.bs-tooltip-left .arrow:before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#22292f}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#22292f;border-radius:.5rem}.popover{top:0;left:0;z-index:1060;max-width:276px;font-family:Montserrat,Helvetica,Arial,serif;font-style:normal;font-weight:400;line-height:1.45;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:1rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(34,41,47,.2);border-radius:.6rem}.popover,.popover .arrow{position:absolute;display:block}.popover .arrow{width:1rem;height:.5rem;margin:0 .6rem}.popover .arrow:after,.popover .arrow:before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc(-.5rem + -1px)}.bs-popover-auto[x-placement^=top]>.arrow:before,.bs-popover-top>.arrow:before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(34,41,47,.25)}.bs-popover-auto[x-placement^=top]>.arrow:after,.bs-popover-top>.arrow:after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc(-.5rem + -1px);width:.5rem;height:1rem;margin:.6rem 0}.bs-popover-auto[x-placement^=right]>.arrow:before,.bs-popover-right>.arrow:before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(34,41,47,.25)}.bs-popover-auto[x-placement^=right]>.arrow:after,.bs-popover-right>.arrow:after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc(-.5rem + -1px)}.bs-popover-auto[x-placement^=bottom]>.arrow:before,.bs-popover-bottom>.arrow:before{top:0;border-width:0 .5rem .5rem;border-bottom-color:rgba(34,41,47,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow:after,.bs-popover-bottom>.arrow:after{top:1px;border-width:0 .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header:before,.bs-popover-bottom .popover-header:before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc(-.5rem + -1px);width:.5rem;height:1rem;margin:.6rem 0}.bs-popover-auto[x-placement^=left]>.arrow:before,.bs-popover-left>.arrow:before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(34,41,47,.25)}.bs-popover-auto[x-placement^=left]>.arrow:after,.bs-popover-left>.arrow:after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;color:#2c2c2c;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.6rem - 1px);border-top-right-radius:calc(.6rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#626262}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner:after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:no-repeat 50%/100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3E%3C/svg%3E")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:flex;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@-webkit-keyframes spinner-border{to{transform:rotate(1turn)}}@keyframes spinner-border{to{transform:rotate(1turn)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid;border-right:.25em solid transparent;border-radius:50%;-webkit-animation:spinner-border .75s linear infinite;animation:spinner-border .75s linear infinite}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1}}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:spinner-grow .75s linear infinite;animation:spinner-grow .75s linear infinite}.spinner-grow-sm{width:1rem;height:1rem}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#4168df!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#9aa9b7!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#198e5c!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#2d5fb1!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d28d29!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#e42728!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dadae3!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#0d0f11!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #ededed!important}.border-top{border-top:1px solid #ededed!important}.border-right{border-right:1px solid #ededed!important}.border-bottom{border-bottom:1px solid #ededed!important}.border-left{border-left:1px solid #ededed!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#6d8be6!important}.border-secondary{border-color:#b8c2cc!important}.border-success{border-color:#21b978!important}.border-info{border-color:#4277cf!important}.border-warning{border-color:#dda451!important}.border-danger{border-color:#ea5455!important}.border-light{border-color:#f7f7f9!important}.border-dark{border-color:#22292f!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.25rem!important}.rounded{border-radius:.5rem!important}.rounded-top{border-top-left-radius:.5rem!important}.rounded-right,.rounded-top{border-top-right-radius:.5rem!important}.rounded-bottom,.rounded-right{border-bottom-right-radius:.5rem!important}.rounded-bottom,.rounded-left{border-bottom-left-radius:.5rem!important}.rounded-left{border-top-left-radius:.5rem!important}.rounded-lg{border-radius:.6rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix:after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive:before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9:before{padding-top:42.8571428571%}.embed-responsive-16by9:before{padding-top:56.25%}.embed-responsive-4by3:before{padding-top:75%}.embed-responsive-1by1:before{padding-top:100%}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-fill{flex:1 1 auto!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}@media (min-width:576px){.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}}@media (min-width:768px){.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{top:0}.fixed-footer .footer,.fixed-top{position:fixed;right:0;left:0;z-index:1030}.fixed-footer .footer{bottom:0}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(34,41,47,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(34,41,47,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(34,41,47,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.stretched-link:after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:transparent}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:1rem!important}.mt-1,.my-1{margin-top:1rem!important}.mr-1,.mx-1{margin-right:1rem!important}.mb-1,.my-1{margin-bottom:1rem!important}.ml-1,.mx-1{margin-left:1rem!important}.m-2{margin:1.5rem!important}.mt-2,.my-2{margin-top:1.5rem!important}.mr-2,.mx-2{margin-right:1.5rem!important}.mb-2,.my-2{margin-bottom:1.5rem!important}.ml-2,.mx-2{margin-left:1.5rem!important}.m-3{margin:3rem!important}.mt-3,.my-3{margin-top:3rem!important}.mr-3,.mx-3{margin-right:3rem!important}.mb-3,.my-3{margin-bottom:3rem!important}.ml-3,.mx-3{margin-left:3rem!important}.m-4{margin:3.5rem!important}.mt-4,.my-4{margin-top:3.5rem!important}.mr-4,.mx-4{margin-right:3.5rem!important}.mb-4,.my-4{margin-bottom:3.5rem!important}.ml-4,.mx-4{margin-left:3.5rem!important}.m-5{margin:4rem!important}.mt-5,.my-5{margin-top:4rem!important}.mr-5,.mx-5{margin-right:4rem!important}.mb-5,.my-5{margin-bottom:4rem!important}.ml-5,.mx-5{margin-left:4rem!important}.m-25{margin:.25rem!important}.mt-25,.my-25{margin-top:.25rem!important}.mr-25,.mx-25{margin-right:.25rem!important}.mb-25,.my-25{margin-bottom:.25rem!important}.ml-25,.mx-25{margin-left:.25rem!important}.m-50{margin:.5rem!important}.mt-50,.my-50{margin-top:.5rem!important}.mr-50,.mx-50{margin-right:.5rem!important}.mb-50,.my-50{margin-bottom:.5rem!important}.ml-50,.mx-50{margin-left:.5rem!important}.m-75{margin:.75rem!important}.mt-75,.my-75{margin-top:.75rem!important}.mr-75,.mx-75{margin-right:.75rem!important}.mb-75,.my-75{margin-bottom:.75rem!important}.ml-75,.mx-75{margin-left:.75rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:1rem!important}.pt-1,.py-1{padding-top:1rem!important}.pr-1,.px-1{padding-right:1rem!important}.pb-1,.py-1{padding-bottom:1rem!important}.pl-1,.px-1{padding-left:1rem!important}.p-2{padding:1.5rem!important}.pt-2,.py-2{padding-top:1.5rem!important}.pr-2,.px-2{padding-right:1.5rem!important}.pb-2,.py-2{padding-bottom:1.5rem!important}.pl-2,.px-2{padding-left:1.5rem!important}.p-3{padding:3rem!important}.pt-3,.py-3{padding-top:3rem!important}.pr-3,.px-3{padding-right:3rem!important}.pb-3,.py-3{padding-bottom:3rem!important}.pl-3,.px-3{padding-left:3rem!important}.p-4{padding:3.5rem!important}.pt-4,.py-4{padding-top:3.5rem!important}.pr-4,.px-4{padding-right:3.5rem!important}.pb-4,.py-4{padding-bottom:3.5rem!important}.pl-4,.px-4{padding-left:3.5rem!important}.p-5{padding:4rem!important}.pt-5,.py-5{padding-top:4rem!important}.pr-5,.px-5{padding-right:4rem!important}.pb-5,.py-5{padding-bottom:4rem!important}.pl-5,.px-5{padding-left:4rem!important}.p-25{padding:.25rem!important}.pt-25,.py-25{padding-top:.25rem!important}.pr-25,.px-25{padding-right:.25rem!important}.pb-25,.py-25{padding-bottom:.25rem!important}.pl-25,.px-25{padding-left:.25rem!important}.p-50{padding:.5rem!important}.pt-50,.py-50{padding-top:.5rem!important}.pr-50,.px-50{padding-right:.5rem!important}.pb-50,.py-50{padding-bottom:.5rem!important}.pl-50,.px-50{padding-left:.5rem!important}.p-75{padding:.75rem!important}.pt-75,.py-75{padding-top:.75rem!important}.pr-75,.px-75{padding-right:.75rem!important}.pb-75,.py-75{padding-bottom:.75rem!important}.pl-75,.px-75{padding-left:.75rem!important}.m-n1{margin:-1rem!important}.mt-n1,.my-n1{margin-top:-1rem!important}.mr-n1,.mx-n1{margin-right:-1rem!important}.mb-n1,.my-n1{margin-bottom:-1rem!important}.ml-n1,.mx-n1{margin-left:-1rem!important}.m-n2{margin:-1.5rem!important}.mt-n2,.my-n2{margin-top:-1.5rem!important}.mr-n2,.mx-n2{margin-right:-1.5rem!important}.mb-n2,.my-n2{margin-bottom:-1.5rem!important}.ml-n2,.mx-n2{margin-left:-1.5rem!important}.m-n3{margin:-3rem!important}.mt-n3,.my-n3{margin-top:-3rem!important}.mr-n3,.mx-n3{margin-right:-3rem!important}.mb-n3,.my-n3{margin-bottom:-3rem!important}.ml-n3,.mx-n3{margin-left:-3rem!important}.m-n4{margin:-3.5rem!important}.mt-n4,.my-n4{margin-top:-3.5rem!important}.mr-n4,.mx-n4{margin-right:-3.5rem!important}.mb-n4,.my-n4{margin-bottom:-3.5rem!important}.ml-n4,.mx-n4{margin-left:-3.5rem!important}.m-n5{margin:-4rem!important}.mt-n5,.my-n5{margin-top:-4rem!important}.mr-n5,.mx-n5{margin-right:-4rem!important}.mb-n5,.my-n5{margin-bottom:-4rem!important}.ml-n5,.mx-n5{margin-left:-4rem!important}.m-n25{margin:-.25rem!important}.mt-n25,.my-n25{margin-top:-.25rem!important}.mr-n25,.mx-n25{margin-right:-.25rem!important}.mb-n25,.my-n25{margin-bottom:-.25rem!important}.ml-n25,.mx-n25{margin-left:-.25rem!important}.m-n50{margin:-.5rem!important}.mt-n50,.my-n50{margin-top:-.5rem!important}.mr-n50,.mx-n50{margin-right:-.5rem!important}.mb-n50,.my-n50{margin-bottom:-.5rem!important}.ml-n50,.mx-n50{margin-left:-.5rem!important}.m-n75{margin:-.75rem!important}.mt-n75,.my-n75{margin-top:-.75rem!important}.mr-n75,.mx-n75{margin-right:-.75rem!important}.mb-n75,.my-n75{margin-bottom:-.75rem!important}.ml-n75,.mx-n75{margin-left:-.75rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:1rem!important}.mt-sm-1,.my-sm-1{margin-top:1rem!important}.mr-sm-1,.mx-sm-1{margin-right:1rem!important}.mb-sm-1,.my-sm-1{margin-bottom:1rem!important}.ml-sm-1,.mx-sm-1{margin-left:1rem!important}.m-sm-2{margin:1.5rem!important}.mt-sm-2,.my-sm-2{margin-top:1.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:1.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:1.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:1.5rem!important}.m-sm-3{margin:3rem!important}.mt-sm-3,.my-sm-3{margin-top:3rem!important}.mr-sm-3,.mx-sm-3{margin-right:3rem!important}.mb-sm-3,.my-sm-3{margin-bottom:3rem!important}.ml-sm-3,.mx-sm-3{margin-left:3rem!important}.m-sm-4{margin:3.5rem!important}.mt-sm-4,.my-sm-4{margin-top:3.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:3.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:3.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:3.5rem!important}.m-sm-5{margin:4rem!important}.mt-sm-5,.my-sm-5{margin-top:4rem!important}.mr-sm-5,.mx-sm-5{margin-right:4rem!important}.mb-sm-5,.my-sm-5{margin-bottom:4rem!important}.ml-sm-5,.mx-sm-5{margin-left:4rem!important}.m-sm-25{margin:.25rem!important}.mt-sm-25,.my-sm-25{margin-top:.25rem!important}.mr-sm-25,.mx-sm-25{margin-right:.25rem!important}.mb-sm-25,.my-sm-25{margin-bottom:.25rem!important}.ml-sm-25,.mx-sm-25{margin-left:.25rem!important}.m-sm-50{margin:.5rem!important}.mt-sm-50,.my-sm-50{margin-top:.5rem!important}.mr-sm-50,.mx-sm-50{margin-right:.5rem!important}.mb-sm-50,.my-sm-50{margin-bottom:.5rem!important}.ml-sm-50,.mx-sm-50{margin-left:.5rem!important}.m-sm-75{margin:.75rem!important}.mt-sm-75,.my-sm-75{margin-top:.75rem!important}.mr-sm-75,.mx-sm-75{margin-right:.75rem!important}.mb-sm-75,.my-sm-75{margin-bottom:.75rem!important}.ml-sm-75,.mx-sm-75{margin-left:.75rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:1rem!important}.pt-sm-1,.py-sm-1{padding-top:1rem!important}.pr-sm-1,.px-sm-1{padding-right:1rem!important}.pb-sm-1,.py-sm-1{padding-bottom:1rem!important}.pl-sm-1,.px-sm-1{padding-left:1rem!important}.p-sm-2{padding:1.5rem!important}.pt-sm-2,.py-sm-2{padding-top:1.5rem!important}.pr-sm-2,.px-sm-2{padding-right:1.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:1.5rem!important}.pl-sm-2,.px-sm-2{padding-left:1.5rem!important}.p-sm-3{padding:3rem!important}.pt-sm-3,.py-sm-3{padding-top:3rem!important}.pr-sm-3,.px-sm-3{padding-right:3rem!important}.pb-sm-3,.py-sm-3{padding-bottom:3rem!important}.pl-sm-3,.px-sm-3{padding-left:3rem!important}.p-sm-4{padding:3.5rem!important}.pt-sm-4,.py-sm-4{padding-top:3.5rem!important}.pr-sm-4,.px-sm-4{padding-right:3.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:3.5rem!important}.pl-sm-4,.px-sm-4{padding-left:3.5rem!important}.p-sm-5{padding:4rem!important}.pt-sm-5,.py-sm-5{padding-top:4rem!important}.pr-sm-5,.px-sm-5{padding-right:4rem!important}.pb-sm-5,.py-sm-5{padding-bottom:4rem!important}.pl-sm-5,.px-sm-5{padding-left:4rem!important}.p-sm-25{padding:.25rem!important}.pt-sm-25,.py-sm-25{padding-top:.25rem!important}.pr-sm-25,.px-sm-25{padding-right:.25rem!important}.pb-sm-25,.py-sm-25{padding-bottom:.25rem!important}.pl-sm-25,.px-sm-25{padding-left:.25rem!important}.p-sm-50{padding:.5rem!important}.pt-sm-50,.py-sm-50{padding-top:.5rem!important}.pr-sm-50,.px-sm-50{padding-right:.5rem!important}.pb-sm-50,.py-sm-50{padding-bottom:.5rem!important}.pl-sm-50,.px-sm-50{padding-left:.5rem!important}.p-sm-75{padding:.75rem!important}.pt-sm-75,.py-sm-75{padding-top:.75rem!important}.pr-sm-75,.px-sm-75{padding-right:.75rem!important}.pb-sm-75,.py-sm-75{padding-bottom:.75rem!important}.pl-sm-75,.px-sm-75{padding-left:.75rem!important}.m-sm-n1{margin:-1rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-1rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-1rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-1rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-1rem!important}.m-sm-n2{margin:-1.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-1.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-1.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-1.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-1.5rem!important}.m-sm-n3{margin:-3rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-3rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-3rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-3rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-3rem!important}.m-sm-n4{margin:-3.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-3.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-3.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-3.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-3.5rem!important}.m-sm-n5{margin:-4rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-4rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-4rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-4rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-4rem!important}.m-sm-n25{margin:-.25rem!important}.mt-sm-n25,.my-sm-n25{margin-top:-.25rem!important}.mr-sm-n25,.mx-sm-n25{margin-right:-.25rem!important}.mb-sm-n25,.my-sm-n25{margin-bottom:-.25rem!important}.ml-sm-n25,.mx-sm-n25{margin-left:-.25rem!important}.m-sm-n50{margin:-.5rem!important}.mt-sm-n50,.my-sm-n50{margin-top:-.5rem!important}.mr-sm-n50,.mx-sm-n50{margin-right:-.5rem!important}.mb-sm-n50,.my-sm-n50{margin-bottom:-.5rem!important}.ml-sm-n50,.mx-sm-n50{margin-left:-.5rem!important}.m-sm-n75{margin:-.75rem!important}.mt-sm-n75,.my-sm-n75{margin-top:-.75rem!important}.mr-sm-n75,.mx-sm-n75{margin-right:-.75rem!important}.mb-sm-n75,.my-sm-n75{margin-bottom:-.75rem!important}.ml-sm-n75,.mx-sm-n75{margin-left:-.75rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:1rem!important}.mt-md-1,.my-md-1{margin-top:1rem!important}.mr-md-1,.mx-md-1{margin-right:1rem!important}.mb-md-1,.my-md-1{margin-bottom:1rem!important}.ml-md-1,.mx-md-1{margin-left:1rem!important}.m-md-2{margin:1.5rem!important}.mt-md-2,.my-md-2{margin-top:1.5rem!important}.mr-md-2,.mx-md-2{margin-right:1.5rem!important}.mb-md-2,.my-md-2{margin-bottom:1.5rem!important}.ml-md-2,.mx-md-2{margin-left:1.5rem!important}.m-md-3{margin:3rem!important}.mt-md-3,.my-md-3{margin-top:3rem!important}.mr-md-3,.mx-md-3{margin-right:3rem!important}.mb-md-3,.my-md-3{margin-bottom:3rem!important}.ml-md-3,.mx-md-3{margin-left:3rem!important}.m-md-4{margin:3.5rem!important}.mt-md-4,.my-md-4{margin-top:3.5rem!important}.mr-md-4,.mx-md-4{margin-right:3.5rem!important}.mb-md-4,.my-md-4{margin-bottom:3.5rem!important}.ml-md-4,.mx-md-4{margin-left:3.5rem!important}.m-md-5{margin:4rem!important}.mt-md-5,.my-md-5{margin-top:4rem!important}.mr-md-5,.mx-md-5{margin-right:4rem!important}.mb-md-5,.my-md-5{margin-bottom:4rem!important}.ml-md-5,.mx-md-5{margin-left:4rem!important}.m-md-25{margin:.25rem!important}.mt-md-25,.my-md-25{margin-top:.25rem!important}.mr-md-25,.mx-md-25{margin-right:.25rem!important}.mb-md-25,.my-md-25{margin-bottom:.25rem!important}.ml-md-25,.mx-md-25{margin-left:.25rem!important}.m-md-50{margin:.5rem!important}.mt-md-50,.my-md-50{margin-top:.5rem!important}.mr-md-50,.mx-md-50{margin-right:.5rem!important}.mb-md-50,.my-md-50{margin-bottom:.5rem!important}.ml-md-50,.mx-md-50{margin-left:.5rem!important}.m-md-75{margin:.75rem!important}.mt-md-75,.my-md-75{margin-top:.75rem!important}.mr-md-75,.mx-md-75{margin-right:.75rem!important}.mb-md-75,.my-md-75{margin-bottom:.75rem!important}.ml-md-75,.mx-md-75{margin-left:.75rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:1rem!important}.pt-md-1,.py-md-1{padding-top:1rem!important}.pr-md-1,.px-md-1{padding-right:1rem!important}.pb-md-1,.py-md-1{padding-bottom:1rem!important}.pl-md-1,.px-md-1{padding-left:1rem!important}.p-md-2{padding:1.5rem!important}.pt-md-2,.py-md-2{padding-top:1.5rem!important}.pr-md-2,.px-md-2{padding-right:1.5rem!important}.pb-md-2,.py-md-2{padding-bottom:1.5rem!important}.pl-md-2,.px-md-2{padding-left:1.5rem!important}.p-md-3{padding:3rem!important}.pt-md-3,.py-md-3{padding-top:3rem!important}.pr-md-3,.px-md-3{padding-right:3rem!important}.pb-md-3,.py-md-3{padding-bottom:3rem!important}.pl-md-3,.px-md-3{padding-left:3rem!important}.p-md-4{padding:3.5rem!important}.pt-md-4,.py-md-4{padding-top:3.5rem!important}.pr-md-4,.px-md-4{padding-right:3.5rem!important}.pb-md-4,.py-md-4{padding-bottom:3.5rem!important}.pl-md-4,.px-md-4{padding-left:3.5rem!important}.p-md-5{padding:4rem!important}.pt-md-5,.py-md-5{padding-top:4rem!important}.pr-md-5,.px-md-5{padding-right:4rem!important}.pb-md-5,.py-md-5{padding-bottom:4rem!important}.pl-md-5,.px-md-5{padding-left:4rem!important}.p-md-25{padding:.25rem!important}.pt-md-25,.py-md-25{padding-top:.25rem!important}.pr-md-25,.px-md-25{padding-right:.25rem!important}.pb-md-25,.py-md-25{padding-bottom:.25rem!important}.pl-md-25,.px-md-25{padding-left:.25rem!important}.p-md-50{padding:.5rem!important}.pt-md-50,.py-md-50{padding-top:.5rem!important}.pr-md-50,.px-md-50{padding-right:.5rem!important}.pb-md-50,.py-md-50{padding-bottom:.5rem!important}.pl-md-50,.px-md-50{padding-left:.5rem!important}.p-md-75{padding:.75rem!important}.pt-md-75,.py-md-75{padding-top:.75rem!important}.pr-md-75,.px-md-75{padding-right:.75rem!important}.pb-md-75,.py-md-75{padding-bottom:.75rem!important}.pl-md-75,.px-md-75{padding-left:.75rem!important}.m-md-n1{margin:-1rem!important}.mt-md-n1,.my-md-n1{margin-top:-1rem!important}.mr-md-n1,.mx-md-n1{margin-right:-1rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-1rem!important}.ml-md-n1,.mx-md-n1{margin-left:-1rem!important}.m-md-n2{margin:-1.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-1.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-1.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-1.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-1.5rem!important}.m-md-n3{margin:-3rem!important}.mt-md-n3,.my-md-n3{margin-top:-3rem!important}.mr-md-n3,.mx-md-n3{margin-right:-3rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-3rem!important}.ml-md-n3,.mx-md-n3{margin-left:-3rem!important}.m-md-n4{margin:-3.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-3.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-3.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-3.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-3.5rem!important}.m-md-n5{margin:-4rem!important}.mt-md-n5,.my-md-n5{margin-top:-4rem!important}.mr-md-n5,.mx-md-n5{margin-right:-4rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-4rem!important}.ml-md-n5,.mx-md-n5{margin-left:-4rem!important}.m-md-n25{margin:-.25rem!important}.mt-md-n25,.my-md-n25{margin-top:-.25rem!important}.mr-md-n25,.mx-md-n25{margin-right:-.25rem!important}.mb-md-n25,.my-md-n25{margin-bottom:-.25rem!important}.ml-md-n25,.mx-md-n25{margin-left:-.25rem!important}.m-md-n50{margin:-.5rem!important}.mt-md-n50,.my-md-n50{margin-top:-.5rem!important}.mr-md-n50,.mx-md-n50{margin-right:-.5rem!important}.mb-md-n50,.my-md-n50{margin-bottom:-.5rem!important}.ml-md-n50,.mx-md-n50{margin-left:-.5rem!important}.m-md-n75{margin:-.75rem!important}.mt-md-n75,.my-md-n75{margin-top:-.75rem!important}.mr-md-n75,.mx-md-n75{margin-right:-.75rem!important}.mb-md-n75,.my-md-n75{margin-bottom:-.75rem!important}.ml-md-n75,.mx-md-n75{margin-left:-.75rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:1rem!important}.mt-lg-1,.my-lg-1{margin-top:1rem!important}.mr-lg-1,.mx-lg-1{margin-right:1rem!important}.mb-lg-1,.my-lg-1{margin-bottom:1rem!important}.ml-lg-1,.mx-lg-1{margin-left:1rem!important}.m-lg-2{margin:1.5rem!important}.mt-lg-2,.my-lg-2{margin-top:1.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:1.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:1.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:1.5rem!important}.m-lg-3{margin:3rem!important}.mt-lg-3,.my-lg-3{margin-top:3rem!important}.mr-lg-3,.mx-lg-3{margin-right:3rem!important}.mb-lg-3,.my-lg-3{margin-bottom:3rem!important}.ml-lg-3,.mx-lg-3{margin-left:3rem!important}.m-lg-4{margin:3.5rem!important}.mt-lg-4,.my-lg-4{margin-top:3.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:3.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:3.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:3.5rem!important}.m-lg-5{margin:4rem!important}.mt-lg-5,.my-lg-5{margin-top:4rem!important}.mr-lg-5,.mx-lg-5{margin-right:4rem!important}.mb-lg-5,.my-lg-5{margin-bottom:4rem!important}.ml-lg-5,.mx-lg-5{margin-left:4rem!important}.m-lg-25{margin:.25rem!important}.mt-lg-25,.my-lg-25{margin-top:.25rem!important}.mr-lg-25,.mx-lg-25{margin-right:.25rem!important}.mb-lg-25,.my-lg-25{margin-bottom:.25rem!important}.ml-lg-25,.mx-lg-25{margin-left:.25rem!important}.m-lg-50{margin:.5rem!important}.mt-lg-50,.my-lg-50{margin-top:.5rem!important}.mr-lg-50,.mx-lg-50{margin-right:.5rem!important}.mb-lg-50,.my-lg-50{margin-bottom:.5rem!important}.ml-lg-50,.mx-lg-50{margin-left:.5rem!important}.m-lg-75{margin:.75rem!important}.mt-lg-75,.my-lg-75{margin-top:.75rem!important}.mr-lg-75,.mx-lg-75{margin-right:.75rem!important}.mb-lg-75,.my-lg-75{margin-bottom:.75rem!important}.ml-lg-75,.mx-lg-75{margin-left:.75rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:1rem!important}.pt-lg-1,.py-lg-1{padding-top:1rem!important}.pr-lg-1,.px-lg-1{padding-right:1rem!important}.pb-lg-1,.py-lg-1{padding-bottom:1rem!important}.pl-lg-1,.px-lg-1{padding-left:1rem!important}.p-lg-2{padding:1.5rem!important}.pt-lg-2,.py-lg-2{padding-top:1.5rem!important}.pr-lg-2,.px-lg-2{padding-right:1.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:1.5rem!important}.pl-lg-2,.px-lg-2{padding-left:1.5rem!important}.p-lg-3{padding:3rem!important}.pt-lg-3,.py-lg-3{padding-top:3rem!important}.pr-lg-3,.px-lg-3{padding-right:3rem!important}.pb-lg-3,.py-lg-3{padding-bottom:3rem!important}.pl-lg-3,.px-lg-3{padding-left:3rem!important}.p-lg-4{padding:3.5rem!important}.pt-lg-4,.py-lg-4{padding-top:3.5rem!important}.pr-lg-4,.px-lg-4{padding-right:3.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:3.5rem!important}.pl-lg-4,.px-lg-4{padding-left:3.5rem!important}.p-lg-5{padding:4rem!important}.pt-lg-5,.py-lg-5{padding-top:4rem!important}.pr-lg-5,.px-lg-5{padding-right:4rem!important}.pb-lg-5,.py-lg-5{padding-bottom:4rem!important}.pl-lg-5,.px-lg-5{padding-left:4rem!important}.p-lg-25{padding:.25rem!important}.pt-lg-25,.py-lg-25{padding-top:.25rem!important}.pr-lg-25,.px-lg-25{padding-right:.25rem!important}.pb-lg-25,.py-lg-25{padding-bottom:.25rem!important}.pl-lg-25,.px-lg-25{padding-left:.25rem!important}.p-lg-50{padding:.5rem!important}.pt-lg-50,.py-lg-50{padding-top:.5rem!important}.pr-lg-50,.px-lg-50{padding-right:.5rem!important}.pb-lg-50,.py-lg-50{padding-bottom:.5rem!important}.pl-lg-50,.px-lg-50{padding-left:.5rem!important}.p-lg-75{padding:.75rem!important}.pt-lg-75,.py-lg-75{padding-top:.75rem!important}.pr-lg-75,.px-lg-75{padding-right:.75rem!important}.pb-lg-75,.py-lg-75{padding-bottom:.75rem!important}.pl-lg-75,.px-lg-75{padding-left:.75rem!important}.m-lg-n1{margin:-1rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-1rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-1rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-1rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-1rem!important}.m-lg-n2{margin:-1.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-1.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-1.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-1.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-1.5rem!important}.m-lg-n3{margin:-3rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-3rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-3rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-3rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-3rem!important}.m-lg-n4{margin:-3.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-3.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-3.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-3.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-3.5rem!important}.m-lg-n5{margin:-4rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-4rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-4rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-4rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-4rem!important}.m-lg-n25{margin:-.25rem!important}.mt-lg-n25,.my-lg-n25{margin-top:-.25rem!important}.mr-lg-n25,.mx-lg-n25{margin-right:-.25rem!important}.mb-lg-n25,.my-lg-n25{margin-bottom:-.25rem!important}.ml-lg-n25,.mx-lg-n25{margin-left:-.25rem!important}.m-lg-n50{margin:-.5rem!important}.mt-lg-n50,.my-lg-n50{margin-top:-.5rem!important}.mr-lg-n50,.mx-lg-n50{margin-right:-.5rem!important}.mb-lg-n50,.my-lg-n50{margin-bottom:-.5rem!important}.ml-lg-n50,.mx-lg-n50{margin-left:-.5rem!important}.m-lg-n75{margin:-.75rem!important}.mt-lg-n75,.my-lg-n75{margin-top:-.75rem!important}.mr-lg-n75,.mx-lg-n75{margin-right:-.75rem!important}.mb-lg-n75,.my-lg-n75{margin-bottom:-.75rem!important}.ml-lg-n75,.mx-lg-n75{margin-left:-.75rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:1rem!important}.mt-xl-1,.my-xl-1{margin-top:1rem!important}.mr-xl-1,.mx-xl-1{margin-right:1rem!important}.mb-xl-1,.my-xl-1{margin-bottom:1rem!important}.ml-xl-1,.mx-xl-1{margin-left:1rem!important}.m-xl-2{margin:1.5rem!important}.mt-xl-2,.my-xl-2{margin-top:1.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:1.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:1.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:1.5rem!important}.m-xl-3{margin:3rem!important}.mt-xl-3,.my-xl-3{margin-top:3rem!important}.mr-xl-3,.mx-xl-3{margin-right:3rem!important}.mb-xl-3,.my-xl-3{margin-bottom:3rem!important}.ml-xl-3,.mx-xl-3{margin-left:3rem!important}.m-xl-4{margin:3.5rem!important}.mt-xl-4,.my-xl-4{margin-top:3.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:3.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:3.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:3.5rem!important}.m-xl-5{margin:4rem!important}.mt-xl-5,.my-xl-5{margin-top:4rem!important}.mr-xl-5,.mx-xl-5{margin-right:4rem!important}.mb-xl-5,.my-xl-5{margin-bottom:4rem!important}.ml-xl-5,.mx-xl-5{margin-left:4rem!important}.m-xl-25{margin:.25rem!important}.mt-xl-25,.my-xl-25{margin-top:.25rem!important}.mr-xl-25,.mx-xl-25{margin-right:.25rem!important}.mb-xl-25,.my-xl-25{margin-bottom:.25rem!important}.ml-xl-25,.mx-xl-25{margin-left:.25rem!important}.m-xl-50{margin:.5rem!important}.mt-xl-50,.my-xl-50{margin-top:.5rem!important}.mr-xl-50,.mx-xl-50{margin-right:.5rem!important}.mb-xl-50,.my-xl-50{margin-bottom:.5rem!important}.ml-xl-50,.mx-xl-50{margin-left:.5rem!important}.m-xl-75{margin:.75rem!important}.mt-xl-75,.my-xl-75{margin-top:.75rem!important}.mr-xl-75,.mx-xl-75{margin-right:.75rem!important}.mb-xl-75,.my-xl-75{margin-bottom:.75rem!important}.ml-xl-75,.mx-xl-75{margin-left:.75rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:1rem!important}.pt-xl-1,.py-xl-1{padding-top:1rem!important}.pr-xl-1,.px-xl-1{padding-right:1rem!important}.pb-xl-1,.py-xl-1{padding-bottom:1rem!important}.pl-xl-1,.px-xl-1{padding-left:1rem!important}.p-xl-2{padding:1.5rem!important}.pt-xl-2,.py-xl-2{padding-top:1.5rem!important}.pr-xl-2,.px-xl-2{padding-right:1.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:1.5rem!important}.pl-xl-2,.px-xl-2{padding-left:1.5rem!important}.p-xl-3{padding:3rem!important}.pt-xl-3,.py-xl-3{padding-top:3rem!important}.pr-xl-3,.px-xl-3{padding-right:3rem!important}.pb-xl-3,.py-xl-3{padding-bottom:3rem!important}.pl-xl-3,.px-xl-3{padding-left:3rem!important}.p-xl-4{padding:3.5rem!important}.pt-xl-4,.py-xl-4{padding-top:3.5rem!important}.pr-xl-4,.px-xl-4{padding-right:3.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:3.5rem!important}.pl-xl-4,.px-xl-4{padding-left:3.5rem!important}.p-xl-5{padding:4rem!important}.pt-xl-5,.py-xl-5{padding-top:4rem!important}.pr-xl-5,.px-xl-5{padding-right:4rem!important}.pb-xl-5,.py-xl-5{padding-bottom:4rem!important}.pl-xl-5,.px-xl-5{padding-left:4rem!important}.p-xl-25{padding:.25rem!important}.pt-xl-25,.py-xl-25{padding-top:.25rem!important}.pr-xl-25,.px-xl-25{padding-right:.25rem!important}.pb-xl-25,.py-xl-25{padding-bottom:.25rem!important}.pl-xl-25,.px-xl-25{padding-left:.25rem!important}.p-xl-50{padding:.5rem!important}.pt-xl-50,.py-xl-50{padding-top:.5rem!important}.pr-xl-50,.px-xl-50{padding-right:.5rem!important}.pb-xl-50,.py-xl-50{padding-bottom:.5rem!important}.pl-xl-50,.px-xl-50{padding-left:.5rem!important}.p-xl-75{padding:.75rem!important}.pt-xl-75,.py-xl-75{padding-top:.75rem!important}.pr-xl-75,.px-xl-75{padding-right:.75rem!important}.pb-xl-75,.py-xl-75{padding-bottom:.75rem!important}.pl-xl-75,.px-xl-75{padding-left:.75rem!important}.m-xl-n1{margin:-1rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-1rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-1rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-1rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-1rem!important}.m-xl-n2{margin:-1.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-1.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-1.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-1.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-1.5rem!important}.m-xl-n3{margin:-3rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-3rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-3rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-3rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-3rem!important}.m-xl-n4{margin:-3.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-3.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-3.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-3.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-3.5rem!important}.m-xl-n5{margin:-4rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-4rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-4rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-4rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-4rem!important}.m-xl-n25{margin:-.25rem!important}.mt-xl-n25,.my-xl-n25{margin-top:-.25rem!important}.mr-xl-n25,.mx-xl-n25{margin-right:-.25rem!important}.mb-xl-n25,.my-xl-n25{margin-bottom:-.25rem!important}.ml-xl-n25,.mx-xl-n25{margin-left:-.25rem!important}.m-xl-n50{margin:-.5rem!important}.mt-xl-n50,.my-xl-n50{margin-top:-.5rem!important}.mr-xl-n50,.mx-xl-n50{margin-right:-.5rem!important}.mb-xl-n50,.my-xl-n50{margin-bottom:-.5rem!important}.ml-xl-n50,.mx-xl-n50{margin-left:-.5rem!important}.m-xl-n75{margin:-.75rem!important}.mt-xl-n75,.my-xl-n75{margin-top:-.75rem!important}.mr-xl-n75,.mx-xl-n75{margin-right:-.75rem!important}.mb-xl-n75,.my-xl-n75{margin-bottom:-.75rem!important}.ml-xl-n75,.mx-xl-n75{margin-left:-.75rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-monospace{font-family:Montserrat,Helvetica,Arial,serif!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#6d8be6!important}a.text-primary:focus,a.text-primary:hover{color:#2c57db!important}.text-secondary{color:#b8c2cc!important}a.text-secondary:focus,a.text-secondary:hover{color:#8b9cac!important}.text-success{color:#21b978!important}a.text-success:focus,a.text-success:hover{color:#15784e!important}.text-info{color:#4277cf!important}a.text-info:focus,a.text-info:hover{color:#28549d!important}.text-warning{color:#dda451!important}a.text-warning:focus,a.text-warning:hover{color:#bd7f25!important}.text-danger{color:#ea5455!important}a.text-danger:focus,a.text-danger:hover{color:#d71a1c!important}.text-light{color:#f7f7f9!important}a.text-light:focus,a.text-light:hover{color:#cbcbd8!important}.text-dark{color:#22292f!important}a.text-dark:focus,a.text-dark:hover{color:#020203!important}.text-body{color:#626262!important}.text-muted{color:#b8c2cc!important}.text-black-50{color:rgba(34,41,47,.5)!important}.text-white-50{color:hsla(0,0%,100%,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;overflow-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,:after,:before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]:after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}.container,body{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #22292f}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dae1e7!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#eff1f7}.table .thead-dark th{color:inherit;border-color:#eff1f7}}code{padding:.1rem .4rem;font-size:90%;color:#ff8acc;background-color:#eee;border-radius:.25rem}pre{background-color:#f7f7f9}pre code{background-color:transparent!important}.form-control::-moz-placeholder{font-size:.85rem;color:rgba(34,41,47,.4);-moz-transition:all .2s ease;transition:all .2s ease}.form-control:-ms-input-placeholder{font-size:.85rem;color:rgba(34,41,47,.4);-ms-transition:all .2s ease;transition:all .2s ease}.form-control::placeholder{font-size:.85rem;color:rgba(34,41,47,.4);transition:all .2s ease}.form-control:-ms-input-placeholder{color:#abb6d5}.form-control:focus::-moz-placeholder{transform:translate(5px);-moz-transition:all .2s ease;transition:all .2s ease}.form-control:focus:-ms-input-placeholder{transform:translate(5px);-ms-transition:all .2s ease;transition:all .2s ease}.form-control:focus::placeholder{transform:translate(5px);transition:all .2s ease}.form-control:focus~.form-control-position i{color:#6d8be6}label{color:#2b3656;font-size:.85rem;margin-bottom:0;padding-left:.2rem}textarea.form-control{line-height:1.6rem;font-size:1rem}.form-group{margin-bottom:1.5rem}.form-control{border:1px solid #c6cde3;color:#3c4b78}.form-section{color:#b8c2cc;line-height:3rem;margin-bottom:20px;border-bottom:1px solid #b8c2cc}.form-section i{font-size:20px;margin-left:5px;margin-right:10px}.form-actions{border-top:1px solid #cdd3e6;padding:20px 0;margin-top:20px}.form-actions.filled{background-color:#eff1f7}.form-actions.center{text-align:center}.form-actions.right{text-align:right}.form-actions.top{border-top:0;border-bottom:1px solid #cdd3e6;margin-top:0;margin-bottom:20px}@media (max-width:767.98px){.form-actions .buttons-group{float:left!important;margin-bottom:10px}}@media (min-width:576px){.form-horizontal .form-group .label-control{text-align:right}}.form-control.form-control-lg{padding:1rem}.form-control.form-control-lg::-moz-placeholder{font-size:1.25rem}.form-control.form-control-lg:-ms-input-placeholder{font-size:1.25rem}.form-control.form-control-lg::placeholder{font-size:1.25rem}.form-control.form-control-sm{padding:.6rem}.form-control.form-control-sm::-moz-placeholder{font-size:.7rem}.form-control.form-control-sm:-ms-input-placeholder{font-size:.7rem}.form-control.form-control-sm::placeholder{font-size:.7rem}.custom-file-label{padding:.4rem .7rem}.custom-file-label:after{padding:.4rem .7rem;height:auto}select.form-control:not([multiple=multiple]){background-position:calc(100% - 12px) 13px,calc(100% - 20px) 13px,100% 0;background-size:12px 12px,10px 10px;background-repeat:no-repeat;-webkit-appearance:none;-moz-appearance:none;padding-right:1.5rem}.custom-select{-moz-appearance:none;-webkit-appearance:none}.input-group-addon{background-color:#eceff1;border-color:#babfc7}.custom-control-label:after,.custom-control-label:before{width:1.143rem;height:1.143rem;top:.08rem}.custom-control-input:not(:disabled):active~.custom-control-label:before{background-color:#6d8be6;border-color:#6d8be6}.form-label-group{position:relative;margin-bottom:1.5rem}.form-label-group .form-control-lg~label{font-size:1.25rem;padding:1rem}.form-label-group .form-control-sm~label{font-size:.7rem}.form-label-group>label{position:absolute;top:0;left:0;display:block;transition:all .25s ease-in-out;padding:.6rem;pointer-events:none;cursor:text;color:rgba(34,41,47,.4);font-size:.85rem;opacity:0}.form-label-group>input,.form-label-group textarea{padding:.6rem}.form-label-group>input:focus:not(:-moz-placeholder-shown)~label,.form-label-group>input:not(:active):not(:-moz-placeholder-shown)~label,.form-label-group textarea:focus:not(:-moz-placeholder-shown)~label,.form-label-group textarea:not(:active):not(:-moz-placeholder-shown)~label{color:#6d8be6!important;-moz-transition:all .25s ease-in-out;transition:all .25s ease-in-out;opacity:1}.form-label-group>input:focus:not(:-ms-input-placeholder)~label,.form-label-group>input:not(:active):not(:-ms-input-placeholder)~label,.form-label-group textarea:focus:not(:-ms-input-placeholder)~label,.form-label-group textarea:not(:active):not(:-ms-input-placeholder)~label{color:#6d8be6!important;-ms-transition:all .25s ease-in-out;transition:all .25s ease-in-out;opacity:1}.form-label-group>input:focus:not(:placeholder-shown)~label,.form-label-group>input:not(:active):not(:placeholder-shown)~label,.form-label-group textarea:focus:not(:placeholder-shown)~label,.form-label-group textarea:not(:active):not(:placeholder-shown)~label{color:#6d8be6!important;transition:all .25s ease-in-out;opacity:1}.form-label-group>input:not(:focus):not(:-moz-placeholder-shown)~label,.form-label-group textarea:not(:focus):not(:-moz-placeholder-shown)~label{color:rgba(34,41,47,.4)!important}.form-label-group>input:not(:focus):not(:-ms-input-placeholder)~label,.form-label-group textarea:not(:focus):not(:-ms-input-placeholder)~label{color:rgba(34,41,47,.4)!important}.form-label-group>input:not(:focus):not(:placeholder-shown)~label,.form-label-group textarea:not(:focus):not(:placeholder-shown)~label{color:rgba(34,41,47,.4)!important}.form-label-group>input:not(:-moz-placeholder-shown)~label,.form-label-group textarea:not(:-moz-placeholder-shown)~label{padding:.25rem 0;font-size:.7rem;top:-20px;left:3px}.form-label-group>input:not(:-ms-input-placeholder)~label,.form-label-group textarea:not(:-ms-input-placeholder)~label{padding:.25rem 0;font-size:.7rem;top:-20px;left:3px}.form-label-group>input:not(:placeholder-shown)~label,.form-label-group textarea:not(:placeholder-shown)~label{padding:.25rem 0;font-size:.7rem;top:-20px;left:3px}.form-label-group.has-icon-left>label{left:36px}.vs-checkbox-con{position:relative;display:flex;align-items:center;justify-content:flex-start;margin:.25rem 0}.vs-checkbox-con input{position:absolute;width:100%;height:100%;opacity:0;z-index:200;cursor:pointer;top:0}.vs-checkbox-con input:checked~.vs-checkbox{transform:rotate(0deg);border-color:#6d8be6}.vs-checkbox-con input:checked~.vs-checkbox .vs-checkbox--check{transform:translate(0);background-color:#6d8be6}.vs-checkbox-con input:checked~.vs-checkbox .vs-checkbox--check .vs-icon{transform:translate(0);line-height:1.2;opacity:1}.vs-checkbox-con input:checked~.vs-checkbox.vs-checkbox-sm .vs-checkbox--check .vs-icon{font-size:.75rem}.vs-checkbox-con input:checked~.vs-checkbox.vs-checkbox-lg .vs-checkbox--check .vs-icon{font-size:1.2rem}.vs-checkbox-con input:active:checked+.vs-checkbox .vs-checkbox--check{transform:translate(3px);background-color:#6d8be6}.vs-checkbox-con input:active:checked+.vs-checkbox .vs-checkbox--check .vs-icon{opacity:1;transform:translate(6px)}.vs-checkbox-con input:disabled{cursor:default;pointer-events:none}.vs-checkbox-con input:disabled+.vs-checkbox{cursor:default;opacity:.5}.vs-checkbox-con .vs-checkbox{cursor:pointer;position:relative;width:20px;height:20px;border:2px solid #b8c2cc;border-radius:2px;transform:rotate(-90deg);transition:all .2s ease;overflow:hidden;margin-right:.5rem}.vs-checkbox-con .vs-checkbox.vs-checkbox-sm{width:15px;height:15px}.vs-checkbox-con .vs-checkbox.vs-checkbox-lg{width:24px;height:24px}.vs-checkbox-con .vs-checkbox .vs-checkbox--check{width:100%;height:100%;position:absolute;left:0;transform:translate(100%);transform-origin:right;transition:all .2s ease;z-index:10}.vs-checkbox-con .vs-checkbox .vs-checkbox--check .vs-icon{display:flex;justify-content:center;align-items:center;color:#fff}.vs-radio-con{position:relative;display:flex;align-items:center;justify-content:flex-start;margin:.25rem 0}.vs-radio-con input{position:absolute;width:100%;height:100%;opacity:0;z-index:200;cursor:pointer}.vs-radio-con input:checked~.vs-radio{transform:rotate(0deg);outline:0}.vs-radio-con input:checked~.vs-radio .vs-radio--circle{background:#6d8be6;box-shadow:0 3px 12px 0 rgba(109,139,230,.4);opacity:1;transform:scale(1)}.vs-radio-con input:checked~.vs-radio .vs-radio--border{opacity:0;transform:scale(.3)}.vs-radio-con input:disabled{cursor:default;pointer-events:none}.vs-radio-con input:disabled+.vs-radio{cursor:default;opacity:.5}.vs-radio-con input:active~.vs-radio{transform:scale(1.1)}.vs-radio-con .vs-radio{cursor:pointer;position:relative;width:18px;height:18px;transition:all .2s ease;margin-right:.5rem}.vs-radio-con .vs-radio.vs-radio-sm{width:13px;height:13px}.vs-radio-con .vs-radio.vs-radio-lg{width:22px;height:22px}.vs-radio-con .vs-radio .vs-radio--border,.vs-radio-con .vs-radio .vs-radio--circle{width:100%;height:100%;position:absolute;left:0;transition:all .25s ease;top:0;border-radius:50%}.vs-radio-con .vs-radio .vs-radio--border{background:transparent;border:2px solid #b8c2cc}.vs-radio-con .vs-radio .vs-radio--circle{opacity:0;transform:scale(.1)}.counter-value{background-color:#6d8be6;color:#fff;padding:1px 6px;font-size:.6rem;border-radius:0 0 5px 5px;margin-right:1rem}.form-group.input-divider-left .form-control-position i{padding:.2rem .5rem;border-right:1px solid #c6cde3}.form-group.input-divider-right .form-control-position i{padding:.2rem .5rem;border-left:1px solid #c6cde3}.input-group-lg .form-control,.input-group-sm .form-control{padding:.7rem}.bootstrap-touchspin.input-group{width:8.4rem;align-items:center}.bootstrap-touchspin.input-group .form-control{padding:5px;height:auto;border:0;background-color:#eff1f7;border-radius:5px!important;text-align:center;font-weight:500}.bootstrap-touchspin.input-group .form-control:focus{z-index:1;box-shadow:none}.bootstrap-touchspin .bootstrap-touchspin-injected{margin:0!important}.bootstrap-touchspin .bootstrap-touchspin-injected .bootstrap-touchspin-down,.bootstrap-touchspin .bootstrap-touchspin-injected .bootstrap-touchspin-up{padding:0;min-width:22px;min-height:22px;border-radius:5px!important;position:relative}.bootstrap-touchspin .bootstrap-touchspin-injected .bootstrap-touchspin-down i,.bootstrap-touchspin .bootstrap-touchspin-injected .bootstrap-touchspin-up i{font-size:.8rem;position:relative;top:-1px}.bootstrap-touchspin .bootstrap-touchspin-injected .bootstrap-touchspin-down{left:12px}.bootstrap-touchspin .bootstrap-touchspin-injected .bootstrap-touchspin-up{right:12px}.bootstrap-touchspin.disabled-touchspin .bootstrap-touchspin-down,.bootstrap-touchspin.disabled-touchspin .bootstrap-touchspin-up{background-color:rgba(0,0,0,.5)!important;cursor:default;opacity:.5}.bootstrap-touchspin.input-group-lg{width:9.375rem}.bootstrap-touchspin.input-group-lg .touchspin.form-control{height:auto!important}.bootstrap-touchspin.input-group-lg .bootstrap-touchspin-down i,.bootstrap-touchspin.input-group-lg .bootstrap-touchspin-up i{font-size:1rem}.bootstrap-touchspin.input-group-sm{width:6.25rem}.bootstrap-touchspin.input-group-sm .touchspin.form-control{height:auto!important}.bootstrap-touchspin.input-group-sm .bootstrap-touchspin-injected .bootstrap-touchspin-down,.bootstrap-touchspin.input-group-sm .bootstrap-touchspin-injected .bootstrap-touchspin-up{min-width:16px;min-height:16px;padding-top:2.2px}.bootstrap-touchspin.input-group-sm .bootstrap-touchspin-injected .bootstrap-touchspin-down i,.bootstrap-touchspin.input-group-sm .bootstrap-touchspin-injected .bootstrap-touchspin-up i{font-size:.6rem}.btn.disabled-max-min{background-color:rgba(0,0,0,.5)!important;cursor:default}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none}.bootstrap-touchspin.input-group input[type=number]{-moz-appearance:textfield}@media (-ms-high-contrast:none),screen and (-ms-high-contrast:active){.form-label-group label{display:none}select.form-control:not([multiple=multiple]){background:none}.custom-file-label:after{padding:1.34rem .7rem 1.25rem}}.picker__input.form-control{background-color:#fff}.input-group .form-control{height:auto}.input-group .input-group-append .dropdown-toggle:after,.input-group .input-group-prepend .dropdown-toggle:after{left:0}.input-group .input-group-append .vs-checkbox,.input-group .input-group-append .vs-checkbox-con,.input-group .input-group-append .vs-radio,.input-group .input-group-append .vs-radio-con,.input-group .input-group-prepend .vs-checkbox,.input-group .input-group-prepend .vs-checkbox-con,.input-group .input-group-prepend .vs-radio,.input-group .input-group-prepend .vs-radio-con{margin:0}.input-group.input-group-lg .form-control::-moz-placeholder{font-size:1.25rem}.input-group.input-group-lg .form-control:-ms-input-placeholder{font-size:1.25rem}.input-group.input-group-lg .form-control::placeholder{font-size:1.25rem}.input-group.input-group-lg .input-group-append .btn,.input-group.input-group-lg .input-group-prepend .btn{line-height:1.3;font-size:1.3rem}.input-group.input-group-sm .form-control::-moz-placeholder{font-size:.7rem}.input-group.input-group-sm .form-control:-ms-input-placeholder{font-size:.7rem}.input-group.input-group-sm .form-control::placeholder{font-size:.7rem}.btn:disabled{cursor:default}.btn.btn-white{background-color:#fff;color:#626262}.btn.btn-white:active,.btn.btn-white:focus,.btn.btn-white:hover{color:#626262!important}.btn.btn-white.btn-primary{background-color:#6d8be6}.btn[class*=bg-gradient-]:hover{box-shadow:0 8px 25px -8px #aaa}.btn.btn-secondary{color:#fff}.btn.btn-secondary:hover{box-shadow:0 8px 25px -8px #b8c2cc}.btn.btn-dark:hover{box-shadow:0 8px 25px -8px #22292f}.btn.btn-light:hover{box-shadow:0 8px 25px -8px #f7f7f9}.btn.btn-outline-dark,.btn.btn-outline-light,.btn.btn-outline-secondary{border:1px solid}.btn[class*=btn-outline-]{padding-top:calc(.9rem - 1px);padding-bottom:calc(.9rem - 1px)}.btn-group-sm>.btn[class*=btn-outline-],.btn[class*=btn-outline-].btn-sm{padding-top:calc(.5rem - 1px);padding-bottom:calc(.5rem - 1px)}.btn.btn-icon{padding:.715rem .736rem}.btn-group-sm>.btn.btn-icon,.btn.btn-sm.btn-icon{padding:.5rem}.btn-group-lg>.btn.btn-icon,.btn.btn-lg.btn-icon{padding:1rem}.btn.btn-round{border-radius:2rem}.btn.active,.btn.focus,.btn:active,.btn:focus{outline:none;box-shadow:none!important}.btn.btn-icon i{font-size:1.1rem}.btn-white:hover,.btn.btn-outline-white:hover{color:#22292f!important}[type=reset],[type=submit],button,html [type=button]{cursor:pointer}.waves-button-input{padding:unset}.dropdown.show .btn-outline-light.dropdown-toggle,.dropdown.show .btn-outline-warning.dropdown-toggle{color:#fff}.dropdown .btn:not(.btn-sm):not(.btn-lg),.dropdown .btn:not(.btn-sm):not(.btn-lg).dropdown-toggle{padding:.85rem 1.5rem}.dropdown .btn:not(.btn-sm):not(.btn-lg).btn-round,.dropdown .btn:not(.btn-sm):not(.btn-lg).dropdown-toggle.btn-round{border-radius:2rem}.dropdown .btn.dropdown-toggle.dropdown-toggle-split{padding:.85rem 1rem;border-left-color:hsla(0,0%,100%,.2)!important;border-top-left-radius:0;border-bottom-left-radius:0}.dropdown [class*=btn-outline-].dropdown-toggle.dropdown-toggle-split{border-left:0!important}.dropdown [class*=btn-outline-].dropdown-toggle.dropdown-toggle-split:active{color:#fff}.dropdown .dropdown-menu{border:1px solid rgba(86,86,86,.05);border-radius:5px;transform:scaleY(0);box-shadow:0 5px 25px rgba(86,86,86,.1);min-width:8rem}.dropdown .dropdown-menu:before{content:"";position:absolute;top:-1px;left:1.2rem;width:.75rem;height:.75rem;display:block;background:#fff;transform:rotate(45deg) translate(-7px);border-top:1px solid rgba(86,86,86,.1);border-left:1px solid rgba(86,86,86,.1);z-index:10;box-sizing:border-box}.dropdown .dropdown-menu.dropdown-menu-right:before{right:.6rem;left:auto}.dropdown .dropdown-menu .dropdown-header{padding:.714rem 1.428rem;margin-top:.714rem}.dropdown .dropdown-menu .dropdown-item{padding:.5rem 1rem;color:#626262;width:auto;cursor:pointer}.dropdown .dropdown-menu .dropdown-item:hover{background-color:#eff1f7;color:#6d8be6}.dropdown .dropdown-menu .dropdown-item.active{color:#fff}.dropdown .dropdown-menu .dropdown-item:active{background-color:transparent;color:#626262}.dropdown i{margin-right:.5rem}.dropdown.no-arrow .dropdown-toggle:after{display:none}.dropdown.no-arrow .dropdown-toggle i{margin-right:0}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown .dropdown-menu .dropdown-item,.dropleft .dropdown-menu .dropdown-item,.dropright .dropdown-menu .dropdown-item,.dropup .dropdown-menu .dropdown-item{padding:.714rem 1.428rem}.show>.dropdown-menu{transform:scale(1);opacity:1;display:block}.dropdown-toggle:after{border:none!important;font-family:feather;content:"\E842"!important;position:relative;top:1px;right:0;left:.714rem;padding:0;margin:0;vertical-align:0}.dropdown-toggle.dropdown-toggle-split{border-left:1px solid hsla(0,0%,100%,.2)}.dropdown-toggle.dropdown-toggle-split:after{left:0}.dropdown-toggle.nav-hide-arrow:after{display:none}.dropdown-toggle:focus{outline:0}.btn-secondary~.dropdown-menu .dropdown-item.active,.btn-secondary~.dropdown-menu .dropdown-item:hover{background-color:#ccc}.dropup{position:relative}.dropup .btn,.dropup .btn.dropdown-toggle{padding:.85rem 1.5rem}.dropup .btn.dropdown-toggle.dropdown-toggle-split{padding:.85rem 1rem;border-color:hsla(0,0%,100%,.2)!important}.dropup .dropdown-toggle:after{content:"\E845"!important;vertical-align:.05rem}.dropup .dropdown-menu:before{content:"";position:absolute;bottom:-.714rem;left:1.214rem;width:.714rem;height:.714rem;display:block;background:#fff;transform:rotate(45deg) translate(-7px);border-bottom:1px solid rgba(86,86,86,.1);border-right:1px solid rgba(86,86,86,.1);z-index:10;box-sizing:border-box}.dropup .dropdown-menu.dropdown-menu-right:before{left:auto;right:.714rem}.dropup .dropdown-submenu .dropdown-menu{bottom:auto;top:0}.dropleft .btn,.dropleft .btn.dropdown-toggle{padding:.85rem 1.5rem}.dropleft .btn.dropdown-toggle.dropdown-toggle-split{padding:.85rem 1rem}.dropleft .dropdown-toggle:before{border:none!important;font-family:feather;content:"\E843"!important}.dropleft .dropdown-menu:before{content:"";position:absolute;top:1.285rem;right:0;width:.714rem;height:.714rem;display:block;background:#fff;transform:rotate(130deg) translate(-8px);border-top:1px solid rgba(86,86,86,.1);border-left:1px solid rgba(86,86,86,.1);z-index:10;box-sizing:border-box}.dropright .btn,.dropright .btn.dropdown-toggle{padding:.85rem 1.5rem}.dropright .btn.dropdown-toggle.dropdown-toggle-split{padding:.85rem 1rem}.dropright .dropdown-toggle:after{border:none!important;font-family:feather;content:"\E844"!important}.dropright .dropdown-menu:before{content:"";position:absolute;top:1.285rem;left:-.9rem;width:.714rem;height:.714rem;display:block;background:#fff;transform:rotate(140deg) translate(-9px);border-bottom:1px solid rgba(86,86,86,.1);border-right:1px solid rgba(86,86,86,.1);z-index:10;box-sizing:border-box}.dropdown.dropdown-icon-wrapper .dropdown-toggle:after,.dropup.dropdown-icon-wrapper .dropdown-toggle:after{display:none}.dropdown.dropdown-icon-wrapper .dropdown-menu,.dropup.dropdown-icon-wrapper .dropdown-menu{min-width:auto}.dropdown.dropdown-icon-wrapper .dropdown-menu .dropdown-item,.dropup.dropdown-icon-wrapper .dropdown-menu .dropdown-item{padding:.5rem 1.1rem;cursor:pointer}.dropdown.dropdown-icon-wrapper .dropdown-menu .dropdown-item i,.dropup.dropdown-icon-wrapper .dropdown-menu .dropdown-item i{font-size:1.3rem;color:#626262}.dropdown.dropdown-icon-wrapper .dropdown-menu .dropdown-item:hover,.dropup.dropdown-icon-wrapper .dropdown-menu .dropdown-item:hover{color:#fff}.btn.btn-white~.dropdown-menu .dropdown-item:not(.acitve):hover{color:#626262!important}.btn.btn-white~.dropdown-menu .dropdown-item.active{color:#626262}.header-navbar .dropdown-menu,.horizontal-menu-wrapper .dropdown-menu{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-name:slideIn;animation-name:slideIn}@-webkit-keyframes slideIn{to{transform:translateY(0);opacity:1}0%{transform:translateY(1rem);opacity:0}}@keyframes slideIn{to{transform:translateY(0);opacity:1}0%{transform:translateY(1rem);opacity:0}}.navbar-dark .hamburger-inner,.navbar-dark .hamburger-inner:after,.navbar-dark .hamburger-inner:before{background-color:#fff}.header-navbar-shadow{display:none}.navbar-floating .header-navbar-shadow{display:block;background:linear-gradient(180deg,hsla(0,0%,97.3%,.95) 44%,hsla(0,0%,97.3%,.46) 73%,hsla(0,0%,100%,0));padding-top:2.2rem;background-repeat:repeat;width:100%;height:102px;position:fixed;top:0;z-index:11}.header-navbar{padding:0;min-height:3.8rem;font-family:Montserrat,Helvetica,Arial,serif;transition:all .3s ease;background:linear-gradient(180deg,hsla(0,0%,97.3%,.95) 44%,hsla(0,0%,97.3%,.46) 73%,hsla(0,0%,100%,0));z-index:997}.header-navbar.fixed-top{left:260px}.header-navbar[class*=bg-] .navbar-nav .nav-item>a,.header-navbar[class*=bg-] .navbar-nav .nav-item>a i,.header-navbar[class*=bg-] .navbar-nav .nav-item>a span{color:#fff!important}.header-navbar[class*=bg-] .navbar-nav .nav-item .dropdown-menu i{color:inherit!important}.header-navbar[class*=bg-] .navbar-nav .search-input .input,.header-navbar[class*=bg-] .navbar-nav .search-input .search-list .auto-suggestion span{color:#626262!important}.header-navbar.floating-nav{margin:1.3rem 2.2rem 0;border-radius:.5rem;position:fixed;width:calc(100% - 4.4rem - 260px);z-index:12;right:0}.header-navbar.navbar-static-top{background:transparent;box-shadow:none!important;top:0;right:0;left:260px;width:calc(100% - 260px)}.header-navbar .navbar-wrapper{width:100%}.header-navbar.navbar-border{border-bottom:1px solid #e4e7ed}.header-navbar.navbar-dark.navbar-border{border-bottom:1px solid #8596b5}.header-navbar.navbar-shadow{box-shadow:0 4px 20px 0 rgba(0,0,0,.05)}.header-navbar:not(.navbar-horizontal) .nav-link.dropdown-toggle:after{display:none}.header-navbar .navbar-container ul.nav li.dropdown-language{padding-right:0}.header-navbar .navbar-container ul.nav li.dropdown-language .selected-language{font-size:.97rem;letter-spacing:-.25px;font-weight:500}.header-navbar .navbar-container{padding-left:1rem;transition:all .3s ease;background:inherit;margin-left:0}.header-navbar .navbar-container .bookmark-wrapper ul.nav li>a.nav-link{padding:1.4rem .5rem 1.35rem}.header-navbar .navbar-container .bookmark-wrapper ul.nav li>a.nav-link i:hover{color:#6d8be6}.header-navbar .navbar-container .bookmark-input{z-index:1}.header-navbar .navbar-container ul.nav li.dropdown .dropdown-menu{top:48px}.header-navbar .navbar-container ul.nav li .badge{padding:.42em .6em .25rem}.header-navbar .navbar-container ul.nav li .badge.badge-up{position:absolute;top:12px;right:-2px}.header-navbar .navbar-container ul.nav li.dropdown-language>a.nav-link{padding:1.65rem .5rem}.header-navbar .navbar-container ul.nav li>a.nav-link{color:#626262;padding:1.6rem .5rem 1.35rem 1rem}.header-navbar .navbar-container ul.nav li>a.nav-link i.flag-icon{margin-right:.5rem}.header-navbar .navbar-container ul.nav li.dropdown-user .dropdown-menu-right{right:12px;left:auto;padding:.5rem}.header-navbar .navbar-container ul.nav li.dropdown-user .dropdown-menu-right .dropdown-item{padding:10px}.header-navbar .navbar-container ul.nav li.dropdown-user .dropdown-menu-right .dropdown-item:active,.header-navbar .navbar-container ul.nav li.dropdown-user .dropdown-menu-right .dropdown-item:hover{background:#6d8be6;color:#fff!important}.header-navbar .navbar-container ul.nav li a.dropdown-user-link{padding:.7rem 1rem;display:flex;align-items:center}.header-navbar .navbar-container ul.nav li a.dropdown-user-link .user-name{display:inline-block;margin-bottom:.435rem;margin-left:.2rem}.header-navbar .navbar-container ul.nav li a.dropdown-user-link .user-status{font-size:smaller}.header-navbar .navbar-container ul.nav li a.dropdown-user-link img{box-shadow:0 4px 8px 0 rgba(0,0,0,.12),0 2px 4px 0 rgba(0,0,0,.08)}.header-navbar .navbar-container ul.nav li a.menu-toggle{padding:1.34rem .22rem 1.35rem 0}.header-navbar .navbar-container ul.nav li a.menu-toggle i{font-size:1.4rem}.header-navbar .navbar-container ul.nav li a.nav-link-label{padding:1.6rem 0 1.35rem .8rem}.header-navbar .navbar-container ul.nav li a.dropdown-user-link .user-nav{display:flex;flex-direction:column;align-items:flex-end;float:left;margin-right:.8rem}.header-navbar .navbar-container ul.nav li div.input-group{padding:.7rem 1rem}.header-navbar .navbar-container ul.nav li i.ficon{font-size:1.5rem;color:#626262}.header-navbar .navbar-container ul.nav li i.ficon:hover{color:#6d8be6}.header-navbar .navbar-container ul.nav li .media-list{max-height:18.2rem}.header-navbar .navbar-container ul.nav li .scrollable-container{position:relative}.header-navbar .navbar-container .dropdown-menu-media{width:26rem}.header-navbar .navbar-container .dropdown-menu-media .media-list .media{padding:1rem;border:none;border-bottom:1px solid #dae1e7}.header-navbar .navbar-container .dropdown-menu-media .media-list .media:hover{background:#eff1f7}.header-navbar .navbar-container .dropdown-menu-media .media-list .media .media-meta{color:#626262}.header-navbar .navbar-container .dropdown-menu-media .media-list a:last-of-type .media{border-bottom:none}.header-navbar .navbar-container .dropdown-menu-media .dropdown-menu-header{border-bottom:1px solid #dae1e7}.header-navbar .navbar-container .dropdown-menu-media .dropdown-menu-footer a{padding:.3rem;border-top:1px solid #dae1e7}.header-navbar .nav-item+.nav-item,.header-navbar.navbar-without-menu .navbar-container{margin-left:0}@media (max-width:767.98px){.header-navbar .navbar-header{width:100%!important;padding:.5rem 1rem;position:relative}.header-navbar .navbar-header .menu-toggle{top:2px;position:relative}.header-navbar .navbar-header .open-navbar-container i{font-size:1.8rem}.header-navbar .navbar-header .navbar-brand{position:absolute;left:50%;top:0;transform:translate(-50%)}.header-navbar.navbar-with-menu .navbar-container{width:100%;display:table;margin:0;height:auto}}@media (max-width:991.98px){[data-menu=vertical-menu-modern] .header-navbar .navbar-header{width:100%!important;padding:.5rem 1rem;position:relative}[data-menu=vertical-menu-modern] .header-navbar .navbar-header .menu-toggle{top:2px;position:relative}[data-menu=vertical-menu-modern] .header-navbar .navbar-header .open-navbar-container i{font-size:1.8rem}[data-menu=vertical-menu-modern] .header-navbar .navbar-header .navbar-brand{position:absolute;left:50%;top:0;transform:translate(-50%)}[data-menu=vertical-menu-modern] .header-navbar.navbar-with-menu .navbar-container{width:100%;display:table;margin:0;height:auto}[data-menu=vertical-menu-modern] .navbar-dark .navbar-header .navbar-nav .nav-link,[data-menu=vertical-menu-modern] .navbar-semi-dark .navbar-header .navbar-nav .nav-link{color:#fff}[data-menu=vertical-menu-modern] .navbar-dark .navbar-container .navbar-nav .nav-link,[data-menu=vertical-menu-modern] .navbar-light .navbar-header .navbar-nav .nav-link,[data-menu=vertical-menu-modern] .navbar-semi-dark .navbar-container .navbar-nav .nav-link{color:#b8c2cc}}.navbar-light,.navbar-light.navbar-horizontal{background:#fff}.navbar-light .navbar-nav li{line-height:1}.navbar-light .navbar-nav .active.nav-link{background-color:rgba(0,0,0,.03)}.navbar-light .navbar-nav .disabled.nav-link{color:#b8c2cc}.navbar-dark{background:#b8c2cc}.navbar-dark .navbar-brand{color:#fff!important}.navbar-dark.navbar-horizontal{background:#b8c2cc}.navbar-dark .nav-search .btn-secondary,.navbar-dark .nav-search .form-control{color:#fff;background:#b8c2cc}.navbar-dark .navbar-nav li{line-height:1}.navbar-dark .navbar-nav .active.nav-link{background-color:hsla(0,0%,100%,.05)}.navbar-dark .navbar-nav .disabled.nav-link{color:#dae1e7}.navbar-semi-dark{background:#fff}.navbar-semi-dark .navbar-header{background:#b8c2cc}.navbar-semi-dark .navbar-header .brand-text{color:#fff}.navbar-semi-dark .navbar-nav li{line-height:1}.navbar-semi-dark .navbar-nav .nav-link{color:#b8c2cc}.navbar-semi-dark .navbar-nav .active.nav-link{background-color:rgba(0,0,0,.03)}.navbar-semi-dark .navbar-nav .disabled.nav-link{color:#b8c2cc}.navbar-semi-light{background:#b8c2cc}.navbar-semi-light .navbar-header{background:#fff}.navbar-semi-light .navbar-header .brand-text{color:#b8c2cc}.navbar-semi-light .navbar-nav li{line-height:1}.navbar-semi-light .navbar-nav .nav-link{color:#fff}.navbar-semi-light .navbar-nav .active.nav-link{background-color:rgba(0,0,0,.03)}.navbar-semi-light .navbar-nav .disabled.nav-link{color:#b8c2cc}@-moz-document url-prefix(){ul li a .children-in{position:relative;right:3px;top:-14px}}.navbar-menu-icon span{display:block;position:absolute;height:2px;width:100%;background:#b8c2cc;border-radius:9px;opacity:1;left:0;transform:rotate(0deg);transition:.25s ease-in-out}.navbar-menu-icon span:first-child{top:0}.navbar-menu-icon span:nth-child(2){top:10px}.navbar-menu-icon span:nth-child(3){top:20px}.navbar-menu-icon.show span:first-child{top:10px;transform:rotate(135deg)}.navbar-menu-icon.show span:nth-child(2){opacity:0;left:-60px}.navbar-menu-icon.show span:nth-child(3){top:10px;transform:rotate(-135deg)}@media (max-width:767.98px){.header-navbar .navbar-nav .show{position:static}.header-navbar .navbar-nav .open-navbar-container{padding-top:.625rem}.header-navbar .navbar-container .show .dropdown-menu{right:0;left:0!important;float:none;width:auto;margin-top:0;max-height:400px;overflow-x:hidden}.header-navbar .navbar-container .dropdown-user .dropdown-menu-right{right:0!important}.header-navbar .navbar-container ul.nav li.nav-item i{margin-right:.2rem}.header-navbar .navbar-container ul.nav li a.dropdown-user-link{padding:.8rem .6rem}.header-navbar .navbar-container ul.nav li .dropdown-toggle:after{margin-right:0;margin-left:-2px}.navbar-dark .hamburger-inner,.navbar-dark .hamburger-inner:after,.navbar-dark .hamburger-inner:before,.navbar-semi-dark .hamburger-inner,.navbar-semi-dark .hamburger-inner:after,.navbar-semi-dark .hamburger-inner:before{background-color:#fff}.navbar-dark .navbar-header .navbar-nav .nav-link,.navbar-semi-dark .navbar-header .navbar-nav .nav-link{color:#fff}.navbar-dark .navbar-container .navbar-nav .nav-link,.navbar-light .navbar-container .navbar-nav .nav-link,.navbar-light .navbar-header .navbar-nav .nav-link,.navbar-semi-dark .navbar-container .navbar-nav .nav-link,.navbar-semi-light .navbar-container .navbar-nav .nav-link,.navbar-semi-light .navbar-header .navbar-nav .nav-link{color:#b8c2cc}}.headroom{will-change:transform;transition:transform .2s linear}.headroom--pinned-top{transform:translateY(0)}.headroom--unpinned-top{transform:translateY(-100%)}.headroom--pinned-bottom{transform:translateY(0)}.headroom--unpinned-bottom{transform:translateY(100%)}@media (max-width:575.98px){.header-navbar .navbar-container ul.nav li .selected-language{display:none}}body[data-col="1-column"] .header-navbar.floating-nav{width:calc(100% - 4.4rem)}@media (-ms-high-contrast:none),(min-width:1200px) and (-ms-high-contrast:active){body:not([data-col="1-columns"]) .header-navbar.floating-nav{width:calc(100% - 320px)}}@media (max-width:1199.98px){.header-navbar .navbar-container ul.nav li a.dropdown-user-link{padding:.7rem 1.23rem}.header-navbar .navbar-container ul.nav li .dropdown-toggle:after{margin-right:0;margin-left:-2px}.header-navbar.navbar-static-top{left:0;width:100%}}@media (max-width:767px){#navbar-mobile.navbar-collapse .navbar-nav{margin:0;flex-flow:row wrap}#navbar-mobile.navbar-collapse .navbar-nav .dropdown-menu{position:absolute}#navbar-mobile.navbar-collapse .navbar-nav .nav-item{float:left}}@media (max-width:991.98px){#navbar-mobile.navbar-collapse .navbar-nav{margin:0;flex-flow:row wrap}#navbar-mobile.navbar-collapse .navbar-nav .dropdown-menu{position:absolute}#navbar-mobile.navbar-collapse .navbar-nav .nav-item{float:left}}@media only screen and (min-device-width:26.78em) and (max-device-width:47.64em) and (-webkit-min-device-pixel-ratio:2) and (orientation:landscape){.header-navbar .navbar-container .show .dropdown-menu{max-height:180px}}@media only screen and (min-device-width:29.57em) and (max-device-width:52.57em) and (-webkit-min-device-pixel-ratio:3) and (orientation:landscape){.header-navbar .navbar-container .show .dropdown-menu{max-height:280px}}#navbar-component .navbar{z-index:auto!important}#navbar-component .navbar.floating-nav{border-radius:.5rem}#navbar-component .navbar .navbar-nav .nav-item a{color:inherit}#navbar-component .navbar.header-navbar.navbar-dark .navbar-nav .nav-link,#navbar-component .navbar.header-navbar.navbar-dark .navbar-nav .nav-link i{color:#fff}#navbar-component .navbar .navbar-nav .dropdown-language.show,#navbar-component .navbar .navbar-nav .dropdown-notification.show,#navbar-component .navbar .navbar-nav .dropdown-user.show{position:relative}#navbar-component .navbar .navbar-nav .dropdown-language .dropdown-menu.show,#navbar-component .navbar .navbar-nav .dropdown-notification .dropdown-menu.show,#navbar-component .navbar .navbar-nav .dropdown-user .dropdown-menu.show{position:absolute;right:0;left:auto!important}#navbar-component .navbar.navbar-dark .navbar-toggler,#navbar-component .navbar.navbar-light .navbar-toggler{font-size:1.2rem}#navbar-component .navbar.navbar-dark .navbar-toggler:focus,#navbar-component .navbar.navbar-light .navbar-toggler:focus{outline:0}#navbar-component #navbar-collapsed .navbar{border-radius:0}@media (min-width:992px){#navbar-component .navbar .navbar-container{background:inherit}#navbar-component .nav .dropdown-language{float:right}}@media (max-width:992px){#navbar-component .navbar .navbar-container{background:inherit}#navbar-component .navbar .navbar-container .navbar-nav{flex-direction:row}}@media (max-width:1201px){.header-navbar.fixed-top{left:0}.horizontal-layout .header-navbar .navbar-container{padding-left:1.5rem;padding-right:1.2rem}}@media (max-width:1199px){.header-navbar .navbar-container ul.nav li a.dropdown-user-link .user-name{margin-bottom:0}}@media (max-width:768px){#navbar-component .navbar .navbar-nav .dropdown-notification.show{position:static}}@media (max-width:575.98px){.header-navbar.floating-nav{width:calc(100% - 2.4rem)!important;margin-left:1.2rem;margin-right:1.2rem}.content.app-content .content-area-wrapper{margin-left:1.2rem!important;margin-right:1.2rem!important}.header-navbar .navbar-container{padding-left:1rem!important;padding-right:0!important}}@media (max-width:992px){.navbar-container #navbar-mobile .nav-back{margin-top:5px}}.nav{border-radius:.25rem}.nav.wrap-border{border:1px solid #ddd}.nav.wrap-border li.nav-header{margin:0 .5rem}.nav.wrap-border div,.nav.wrap-border li.nav-item{padding:2px .714rem}.nav.square-border,.nav.square-border .nav-item .nav-link.active{border-radius:0}.nav .modern-nav-toggle{padding:1.571rem 0}.nav.nav-pills{margin-bottom:1rem}.nav.nav-pills .nav-item .nav-link{border-radius:.357rem;padding:.3rem 1rem .2rem;margin-right:.5rem}.nav.nav-pills .nav-item .nav-link.active{color:#fff}.nav.nav-pills .nav-item .nav-link.disabled{color:#b8c2cc}.nav.nav-pills .nav-item .nav-link.dropdown-toggle:after{top:1px;left:1px}.nav.nav-pills .nav-item.dropdown.show .nav-link{color:#fff}.nav.nav-pills .nav-item.dropdown.show .dropdown-item.active:hover{color:#6d8be6}.nav.nav-pills.nav-justified{width:100%}.nav.nav-pills.nav-justified .nav-item{float:none}.nav.nav-pills.nav-justified .nav-link{text-align:center;margin-bottom:5px}.nav.nav-pills.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:576px){.nav.nav-pills.nav-justified .nav-item{display:block;width:1%}.nav.nav-pills.nav-justified .nav-link{margin-bottom:0}}.nav.nav-pills.nav-justified .nav-link{margin-right:0;border-radius:.5rem}@media (min-width:576px){.nav.nav-pills.nav-justified .nav-link.active,.nav.nav-pills.nav-justified .nav-link.active:focus,.nav.nav-pills.nav-justified .nav-link.active:hover{border-bottom-color:transparent}}.nav.nav-pills.nav-justified .nav-link{display:block}.nav.nav-pills.nav-justified .nav-link.active,.nav.nav-pills.nav-justified .nav-link.active:focus,.nav.nav-pills.nav-justified .nav-link.active:hover{border:none}.nav.nav-pills.nav-active-bordered-pill .nav-item a.nav-link.active{border:1px solid #6d8be6;border-radius:.25rem;color:#6d8be6;background-color:#fff}.nav.nav-tabs{border:none;margin-bottom:1rem;border-radius:0}.nav.nav-tabs,.nav.nav-tabs .nav-item{position:relative}.nav.nav-tabs .nav-item .nav-link{color:#626262;font-size:.95rem;border:none;min-width:auto;font-weight:450;padding:.61rem .635rem;border-radius:0}.nav.nav-tabs .nav-item .nav-link.active{border:none;position:relative;color:#6d8be6;transition:all .2s ease;background-color:transparent}.nav.nav-tabs .nav-item .nav-link.active:after{content:attr(data-before);height:2px;width:100%;left:0;position:absolute;bottom:0;top:100%;background:linear-gradient(30deg,#6d8be6,rgba(109,139,230,.5))!important;box-shadow:0 0 8px 0 rgba(109,139,230,.5)!important;transform:translateY(0);transition:all .2s linear}.nav.nav-tabs .nav-item .nav-link.dropdown-toggle:after{top:1px;left:1px}.nav.nav-tabs .nav-item .nav-link.disabled{color:#b8c2cc}.nav.nav-tabs.nav-justified{width:100%}.nav.nav-tabs.nav-justified .nav-item{float:none}.nav.nav-tabs.nav-justified .nav-link{text-align:center;margin-bottom:5px}.nav.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:576px){.nav.nav-tabs.nav-justified .nav-item{display:block;width:1%}.nav.nav-tabs.nav-justified .nav-link{margin-bottom:0}}.nav.nav-tabs.nav-justified .nav-link{margin-right:0;border-radius:.5rem}@media (min-width:576px){.nav.nav-tabs.nav-justified .nav-link.active,.nav.nav-tabs.nav-justified .nav-link.active:focus,.nav.nav-tabs.nav-justified .nav-link.active:hover{border-bottom-color:transparent}}.nav.nav-tabs.nav-justified .nav-item a.nav-link{display:block;border-radius:0}.nav.nav-tabs.nav-justified .nav-item a.nav-link.active{border:none;background-color:#fff}.nav.nav-tabs.nav-justified .nav-item a.nav-link:hover{border-color:transparent}.nav-vertical{overflow:hidden}.nav-vertical .nav.nav-tabs .nav-item .nav-link{border:none;margin-bottom:0}.nav-vertical .nav.nav-tabs .nav-item .nav-link.active{border:none;border-radius:0}.nav-vertical .nav.nav-tabs .nav-item .nav-link.active:after{transform:rotate(90deg);left:auto;right:-1.5rem;bottom:100%;top:1.25rem;width:2.14rem}.nav-vertical .nav.nav-tabs .nav-item .nav-link:hover{border-right:none}.nav-vertical .nav.nav-tabs.nav-left{float:left;display:table;margin-right:1rem}.nav-vertical .nav.nav-tabs.nav-left~.tab-content .tab-pane{display:none;background-color:#fff;overflow-y:auto}.nav-vertical .nav.nav-tabs.nav-left~.tab-content .tab-pane.active{display:block}.nav-vertical .nav.nav-tabs.nav-right{float:right;display:table;margin-left:1rem}.nav-vertical .nav.nav-tabs.nav-right .nav-item .nav-link.active:after{left:-1.5rem}.nav-vertical .nav.nav-tabs.nav-right~.tab-content .tab-pane{display:none;background-color:#fff;overflow-y:auto;padding-right:1rem}.nav-vertical .nav.nav-tabs.nav-right~.tab-content .tab-pane.active{display:block}@media (max-width:576px){.nav-vertical .nav.nav-tabs .nav-item .nav-link.active:after{height:0}}.toast-bs-container{z-index:1040;position:fixed;top:0;left:0;width:100%}.toast-bs-container .toast-position{position:relative;top:0;right:0;display:flex;flex-direction:column;flex-wrap:wrap-reverse}.toast-bs-container .toast-position .toast.show{opacity:1;z-index:1030}.toast-placement{position:static;top:0}.toast-placement .toast{position:fixed;top:0;z-index:1030}.toast{display:none;background-color:#fff;margin-top:.75rem}.toast .toast-header .close:active,.toast .toast-header .close:focus,.toast .toast-header .mailbox-attachment-close:active,.toast .toast-header .mailbox-attachment-close:focus{outline:none}.toast.show.toast-wrapper{position:static}.toast.toast-translucent{opacity:1;display:block}.toast-header img{width:35px;height:24px}@media (-ms-high-contrast:none),screen and (-ms-high-contrast:active){.toast-bs-container{position:fixed!important;left:74%!important}}.toast-bs-container,_:-ms-lang(x){position:fixed!important;left:74%!important}.pagination .page-item{border-radius:5rem}.pagination .page-item.first .page-link,.pagination .page-item.last .page-link,.pagination .page-item.next-item .page-link,.pagination .page-item.prev-item .page-link{color:#6d8be6}.pagination .page-item.first.disabled .page-link,.pagination .page-item.last.disabled .page-link,.pagination .page-item.next-item.disabled .page-link,.pagination .page-item.prev-item.disabled .page-link{color:#b8c2cc}.pagination .page-item:not(.active) .page-link,.pagination .page-item:not(.first) .page-link,.pagination .page-item:not(.last) .page-link,.pagination .page-item:not(.next-item) .page-link,.pagination .page-item:not(.prev-item) .page-link{line-height:1.3}.pagination .page-item.prev-item{margin-right:.3571rem}.pagination .page-item.prev-item .page-link{background-color:#f0f0f0;padding:.572rem .651rem;border-radius:50%}.pagination .page-item.prev-item .page-link:before{content:"\E843";font-family:feather}.pagination .page-item.prev-item .page-link:hover{background:#6d8be6;color:#fff}.pagination .page-item.prev-item~.page-item:nth-child(2){border-top-left-radius:5rem;border-bottom-left-radius:5rem}.pagination .page-item.prev-item~.page-item:nth-child(2) .page-link{border-top-left-radius:5rem!important;border-bottom-left-radius:5rem!important}.pagination .page-item.prev-item~.page-item:nth-last-child(2){border-top-right-radius:5rem;border-bottom-right-radius:5rem}.pagination .page-item.prev-item~.page-item:nth-last-child(2) .page-link{border-top-right-radius:5rem!important;border-bottom-right-radius:5rem!important}.pagination .page-item.next-item{margin-left:.3571rem}.pagination .page-item.next-item .page-link{background-color:#f0f0f0;padding:.572rem .651rem;border-radius:50%}.pagination .page-item.next-item .page-link:after{content:"\E844";font-family:feather}.pagination .page-item.next-item .page-link:hover{background:#6d8be6;color:#fff}.pagination .page-item.prev .page-link:before,.pagination .page-item.previous .page-link:before{content:"\E843";font-family:feather}.pagination .page-item.next .page-link:after{content:"\E844";font-family:feather}.pagination .page-item .page-link{border:none;color:rgba(86,86,86,.9);background-color:#f0f0f0;margin:0;font-size:1rem;font-weight:700}.pagination .page-item .page-link i{position:relative;top:1px}.pagination .page-item .page-link:focus{box-shadow:none}.pagination .page-item .page-link:hover{color:#6d8be6}.pagination .page-item.active{background-color:#f0f0f0;border-radius:0}.pagination .page-item.active .page-link{z-index:3;border-radius:5rem;background-color:#6d8be6;color:#fff;transform:scale(1.05)}.pagination .page-item:first-child:not(.prev-item).active{border-top-left-radius:1.428rem;border-bottom-left-radius:1.428rem}.pagination .page-item:first-child:not(.prev-item).active .page-link{border-radius:5rem}.pagination .page-item:first-child:not(.prev-item) .page-link{border-top-left-radius:1.428rem;border-bottom-left-radius:1.428rem}.pagination .page-item:last-child:not(.next-item).active{border-top-right-radius:1.428rem;border-bottom-right-radius:1.428rem}.pagination .page-item:last-child:not(.next-item).active .page-link{border-radius:5rem}.pagination .page-item:last-child:not(.next-item) .page-link{border-top-right-radius:1.428rem;border-bottom-right-radius:1.428rem}.pagination.pagination-lg .page-item .page-link{font-size:1.5rem;transform:scale(1)}html.scroll-smooth{scroll-behavior:smooth}.wrapper,body,html{min-height:100%}.wrapper{position:relative}.wrapper .content-wrapper{min-height:calc(100vh - 6.614rem - 1px)}.layout-boxed .wrapper,.layout-boxed .wrapper:before{margin:0 auto;max-width:1250px}.layout-boxed .wrapper .main-sidebar{left:inherit}@supports not (-webkit-touch-callout:none){.layout-fixed .wrapper .sidebar{height:calc(100vh - 3.164rem - 1px)}.layout-fixed.text-sm .wrapper .sidebar{height:calc(100vh - 2.62475rem - 1px)}}.layout-navbar-fixed.layout-fixed .wrapper .main-header.text-sm~.control-sidebar{top:calc(2.62475rem + 1px)}.layout-navbar-fixed.layout-fixed .wrapper .brand-link.text-sm~.sidebar{margin-top:calc(2.62475rem + 1px)}.layout-navbar-fixed.sidebar-mini-md.sidebar-collapse .wrapper .brand-link,.layout-navbar-fixed.sidebar-mini.sidebar-collapse .wrapper .brand-link{height:calc(3.164rem + 1px);width:5.4rem}.layout-navbar-fixed.sidebar-mini-md.sidebar-collapse.text-sm .wrapper .brand-link,.layout-navbar-fixed.sidebar-mini-md.sidebar-collapse .wrapper .brand-link.text-sm,.layout-navbar-fixed.sidebar-mini.sidebar-collapse.text-sm .wrapper .brand-link,.layout-navbar-fixed.sidebar-mini.sidebar-collapse .wrapper .brand-link.text-sm{height:calc(2.62475rem + 1px)}.layout-navbar-fixed .wrapper .main-sidebar:hover .brand-link{transition:width .3s ease-in-out;width:260px}.layout-navbar-fixed .wrapper .main-header.text-sm~.content-wrapper{margin-top:calc(2.62475rem + 1px)}.layout-navbar-fixed .wrapper .main-header{z-index:1033}.layout-navbar-fixed.layout-fixed .wrapper .control-sidebar{top:calc(3.164rem + 1px)}.layout-navbar-fixed.layout-fixed .wrapper .main-header.text-sm~.control-sidebar,.text-sm .layout-navbar-fixed.layout-fixed .wrapper .main-header~.control-sidebar{top:calc(2.62475rem + 1px)}.layout-navbar-fixed.layout-fixed .wrapper .sidebar{margin-top:calc(3.164rem + 1px)}.layout-navbar-fixed.layout-fixed .wrapper .brand-link.text-sm~.sidebar,.text-sm .layout-navbar-fixed.layout-fixed .wrapper .brand-link~.sidebar{margin-top:calc(2.62475rem + 1px)}.layout-navbar-fixed.layout-fixed.text-sm .wrapper .control-sidebar{top:calc(2.62475rem + 1px)}.layout-navbar-fixed.layout-fixed.text-sm .wrapper .sidebar{margin-top:calc(2.62475rem + 1px)}.layout-navbar-fixed .wrapper .control-sidebar{top:0}.layout-navbar-fixed .wrapper a.anchor{display:block;position:relative;top:calc(-4.164rem + -1px)}.layout-navbar-fixed .wrapper.sidebar-collapse .brand-link{height:calc(3.164rem + 1px);transition:width .3s ease-in-out;width:5.4rem}.layout-navbar-fixed .wrapper.sidebar-collapse .brand-link.text-sm,.text-sm .layout-navbar-fixed .wrapper.sidebar-collapse .brand-link{height:calc(2.62475rem + 1px)}.layout-navbar-fixed .wrapper .brand-link,.layout-navbar-fixed .wrapper.sidebar-collapse .main-sidebar:hover .brand-link{transition:width .3s ease-in-out;width:260px}.layout-navbar-fixed .wrapper .brand-link{overflow:hidden;position:fixed;top:0;z-index:1035}.layout-navbar-fixed .wrapper .sidebar-dark-primary .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-navbar-fixed .wrapper .sidebar-light-primary .brand-link:not([class*=navbar]){background-color:#fff}.layout-navbar-fixed .wrapper .sidebar-dark-secondary .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-navbar-fixed .wrapper .sidebar-light-secondary .brand-link:not([class*=navbar]){background-color:#fff}.layout-navbar-fixed .wrapper .sidebar-dark-success .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-navbar-fixed .wrapper .sidebar-light-success .brand-link:not([class*=navbar]){background-color:#fff}.layout-navbar-fixed .wrapper .sidebar-dark-info .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-navbar-fixed .wrapper .sidebar-light-info .brand-link:not([class*=navbar]){background-color:#fff}.layout-navbar-fixed .wrapper .sidebar-dark-warning .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-navbar-fixed .wrapper .sidebar-light-warning .brand-link:not([class*=navbar]){background-color:#fff}.layout-navbar-fixed .wrapper .sidebar-dark-danger .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-navbar-fixed .wrapper .sidebar-light-danger .brand-link:not([class*=navbar]){background-color:#fff}.layout-navbar-fixed .wrapper .sidebar-dark-light .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-navbar-fixed .wrapper .sidebar-light-light .brand-link:not([class*=navbar]){background-color:#fff}.layout-navbar-fixed .wrapper .sidebar-dark-dark .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-navbar-fixed .wrapper .sidebar-light-dark .brand-link:not([class*=navbar]){background-color:#fff}.layout-navbar-fixed .wrapper .content-wrapper{margin-top:calc(3.164rem + 1px)}.layout-navbar-fixed .wrapper .main-header.text-sm~.content-wrapper,.text-sm .layout-navbar-fixed .wrapper .main-header~.content-wrapper{margin-top:calc(2.62475rem + 1px)}.layout-navbar-fixed .wrapper .main-header{left:0;position:fixed;right:0;top:0;z-index:1037}.layout-navbar-fixed.text-sm .wrapper .content-wrapper{margin-top:calc(2.62475rem + 1px)}body:not(.layout-fixed).layout-navbar-fixed .wrapper .main-sidebar{margin-top:calc(-3.164rem + -1px)}body:not(.layout-fixed).layout-navbar-fixed .wrapper .main-sidebar .sidebar{margin-top:calc(3.164rem + 1px)}body:not(.layout-fixed).layout-navbar-fixed.text-sm .wrapper .main-sidebar{margin-top:calc(-2.62475rem + -1px)}body:not(.layout-fixed).layout-navbar-fixed.text-sm .wrapper .main-sidebar .sidebar{margin-top:calc(2.62475rem + 1px)}.layout-navbar-not-fixed .wrapper .brand-link{position:static}.layout-navbar-not-fixed .wrapper .content-wrapper,.layout-navbar-not-fixed .wrapper .sidebar{margin-top:0}.layout-navbar-not-fixed .wrapper .main-header{position:static}.layout-navbar-not-fixed.layout-fixed .wrapper .sidebar{margin-top:0}@media (min-width:576px){.layout-sm-navbar-fixed.layout-fixed .wrapper .control-sidebar{top:calc(3.164rem + 1px)}.layout-sm-navbar-fixed.layout-fixed .wrapper .main-header.text-sm~.control-sidebar,.text-sm .layout-sm-navbar-fixed.layout-fixed .wrapper .main-header~.control-sidebar{top:calc(2.62475rem + 1px)}.layout-sm-navbar-fixed.layout-fixed .wrapper .sidebar{margin-top:calc(3.164rem + 1px)}.layout-sm-navbar-fixed.layout-fixed .wrapper .brand-link.text-sm~.sidebar,.text-sm .layout-sm-navbar-fixed.layout-fixed .wrapper .brand-link~.sidebar{margin-top:calc(2.62475rem + 1px)}.layout-sm-navbar-fixed.layout-fixed.text-sm .wrapper .control-sidebar{top:calc(2.62475rem + 1px)}.layout-sm-navbar-fixed.layout-fixed.text-sm .wrapper .sidebar{margin-top:calc(2.62475rem + 1px)}.layout-sm-navbar-fixed .wrapper .control-sidebar{top:0}.layout-sm-navbar-fixed .wrapper a.anchor{display:block;position:relative;top:calc(-4.164rem + -1px)}.layout-sm-navbar-fixed .wrapper.sidebar-collapse .brand-link{height:calc(3.164rem + 1px);transition:width .3s ease-in-out;width:5.4rem}.layout-sm-navbar-fixed .wrapper.sidebar-collapse .brand-link.text-sm,.text-sm .layout-sm-navbar-fixed .wrapper.sidebar-collapse .brand-link{height:calc(2.62475rem + 1px)}.layout-sm-navbar-fixed .wrapper.sidebar-collapse .main-sidebar:hover .brand-link{transition:width .3s ease-in-out;width:260px}.layout-sm-navbar-fixed .wrapper .brand-link{overflow:hidden;position:fixed;top:0;transition:width .3s ease-in-out;width:260px;z-index:1035}.layout-sm-navbar-fixed .wrapper .sidebar-dark-primary .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-sm-navbar-fixed .wrapper .sidebar-light-primary .brand-link:not([class*=navbar]){background-color:#fff}.layout-sm-navbar-fixed .wrapper .sidebar-dark-secondary .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-sm-navbar-fixed .wrapper .sidebar-light-secondary .brand-link:not([class*=navbar]){background-color:#fff}.layout-sm-navbar-fixed .wrapper .sidebar-dark-success .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-sm-navbar-fixed .wrapper .sidebar-light-success .brand-link:not([class*=navbar]){background-color:#fff}.layout-sm-navbar-fixed .wrapper .sidebar-dark-info .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-sm-navbar-fixed .wrapper .sidebar-light-info .brand-link:not([class*=navbar]){background-color:#fff}.layout-sm-navbar-fixed .wrapper .sidebar-dark-warning .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-sm-navbar-fixed .wrapper .sidebar-light-warning .brand-link:not([class*=navbar]){background-color:#fff}.layout-sm-navbar-fixed .wrapper .sidebar-dark-danger .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-sm-navbar-fixed .wrapper .sidebar-light-danger .brand-link:not([class*=navbar]){background-color:#fff}.layout-sm-navbar-fixed .wrapper .sidebar-dark-light .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-sm-navbar-fixed .wrapper .sidebar-light-light .brand-link:not([class*=navbar]){background-color:#fff}.layout-sm-navbar-fixed .wrapper .sidebar-dark-dark .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-sm-navbar-fixed .wrapper .sidebar-light-dark .brand-link:not([class*=navbar]){background-color:#fff}.layout-sm-navbar-fixed .wrapper .content-wrapper{margin-top:calc(3.164rem + 1px)}.layout-sm-navbar-fixed .wrapper .main-header.text-sm~.content-wrapper,.text-sm .layout-sm-navbar-fixed .wrapper .main-header~.content-wrapper{margin-top:calc(2.62475rem + 1px)}.layout-sm-navbar-fixed .wrapper .main-header{left:0;position:fixed;right:0;top:0;z-index:1037}.layout-sm-navbar-fixed.text-sm .wrapper .content-wrapper{margin-top:calc(2.62475rem + 1px)}body:not(.layout-fixed).layout-sm-navbar-fixed .wrapper .main-sidebar{margin-top:calc(-3.164rem + -1px)}body:not(.layout-fixed).layout-sm-navbar-fixed .wrapper .main-sidebar .sidebar{margin-top:calc(3.164rem + 1px)}body:not(.layout-fixed).layout-sm-navbar-fixed.text-sm .wrapper .main-sidebar{margin-top:calc(-2.62475rem + -1px)}body:not(.layout-fixed).layout-sm-navbar-fixed.text-sm .wrapper .main-sidebar .sidebar{margin-top:calc(2.62475rem + 1px)}.layout-sm-navbar-not-fixed .wrapper .brand-link{position:static}.layout-sm-navbar-not-fixed .wrapper .content-wrapper,.layout-sm-navbar-not-fixed .wrapper .sidebar{margin-top:0}.layout-sm-navbar-not-fixed .wrapper .main-header{position:static}.layout-sm-navbar-not-fixed.layout-fixed .wrapper .sidebar{margin-top:0}}@media (min-width:768px){.layout-md-navbar-fixed.layout-fixed .wrapper .control-sidebar{top:calc(3.164rem + 1px)}.layout-md-navbar-fixed.layout-fixed .wrapper .main-header.text-sm~.control-sidebar,.text-sm .layout-md-navbar-fixed.layout-fixed .wrapper .main-header~.control-sidebar{top:calc(2.62475rem + 1px)}.layout-md-navbar-fixed.layout-fixed .wrapper .sidebar{margin-top:calc(3.164rem + 1px)}.layout-md-navbar-fixed.layout-fixed .wrapper .brand-link.text-sm~.sidebar,.text-sm .layout-md-navbar-fixed.layout-fixed .wrapper .brand-link~.sidebar{margin-top:calc(2.62475rem + 1px)}.layout-md-navbar-fixed.layout-fixed.text-sm .wrapper .control-sidebar{top:calc(2.62475rem + 1px)}.layout-md-navbar-fixed.layout-fixed.text-sm .wrapper .sidebar{margin-top:calc(2.62475rem + 1px)}.layout-md-navbar-fixed .wrapper .control-sidebar{top:0}.layout-md-navbar-fixed .wrapper a.anchor{display:block;position:relative;top:calc(-4.164rem + -1px)}.layout-md-navbar-fixed .wrapper.sidebar-collapse .brand-link{height:calc(3.164rem + 1px);transition:width .3s ease-in-out;width:5.4rem}.layout-md-navbar-fixed .wrapper.sidebar-collapse .brand-link.text-sm,.text-sm .layout-md-navbar-fixed .wrapper.sidebar-collapse .brand-link{height:calc(2.62475rem + 1px)}.layout-md-navbar-fixed .wrapper.sidebar-collapse .main-sidebar:hover .brand-link{transition:width .3s ease-in-out;width:260px}.layout-md-navbar-fixed .wrapper .brand-link{overflow:hidden;position:fixed;top:0;transition:width .3s ease-in-out;width:260px;z-index:1035}.layout-md-navbar-fixed .wrapper .sidebar-dark-primary .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-md-navbar-fixed .wrapper .sidebar-light-primary .brand-link:not([class*=navbar]){background-color:#fff}.layout-md-navbar-fixed .wrapper .sidebar-dark-secondary .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-md-navbar-fixed .wrapper .sidebar-light-secondary .brand-link:not([class*=navbar]){background-color:#fff}.layout-md-navbar-fixed .wrapper .sidebar-dark-success .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-md-navbar-fixed .wrapper .sidebar-light-success .brand-link:not([class*=navbar]){background-color:#fff}.layout-md-navbar-fixed .wrapper .sidebar-dark-info .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-md-navbar-fixed .wrapper .sidebar-light-info .brand-link:not([class*=navbar]){background-color:#fff}.layout-md-navbar-fixed .wrapper .sidebar-dark-warning .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-md-navbar-fixed .wrapper .sidebar-light-warning .brand-link:not([class*=navbar]){background-color:#fff}.layout-md-navbar-fixed .wrapper .sidebar-dark-danger .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-md-navbar-fixed .wrapper .sidebar-light-danger .brand-link:not([class*=navbar]){background-color:#fff}.layout-md-navbar-fixed .wrapper .sidebar-dark-light .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-md-navbar-fixed .wrapper .sidebar-light-light .brand-link:not([class*=navbar]){background-color:#fff}.layout-md-navbar-fixed .wrapper .sidebar-dark-dark .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-md-navbar-fixed .wrapper .sidebar-light-dark .brand-link:not([class*=navbar]){background-color:#fff}.layout-md-navbar-fixed .wrapper .content-wrapper{margin-top:calc(3.164rem + 1px)}.layout-md-navbar-fixed .wrapper .main-header.text-sm~.content-wrapper,.text-sm .layout-md-navbar-fixed .wrapper .main-header~.content-wrapper{margin-top:calc(2.62475rem + 1px)}.layout-md-navbar-fixed .wrapper .main-header{left:0;position:fixed;right:0;top:0;z-index:1037}.layout-md-navbar-fixed.text-sm .wrapper .content-wrapper{margin-top:calc(2.62475rem + 1px)}body:not(.layout-fixed).layout-md-navbar-fixed .wrapper .main-sidebar{margin-top:calc(-3.164rem + -1px)}body:not(.layout-fixed).layout-md-navbar-fixed .wrapper .main-sidebar .sidebar{margin-top:calc(3.164rem + 1px)}body:not(.layout-fixed).layout-md-navbar-fixed.text-sm .wrapper .main-sidebar{margin-top:calc(-2.62475rem + -1px)}body:not(.layout-fixed).layout-md-navbar-fixed.text-sm .wrapper .main-sidebar .sidebar{margin-top:calc(2.62475rem + 1px)}.layout-md-navbar-not-fixed .wrapper .brand-link{position:static}.layout-md-navbar-not-fixed .wrapper .content-wrapper,.layout-md-navbar-not-fixed .wrapper .sidebar{margin-top:0}.layout-md-navbar-not-fixed .wrapper .main-header{position:static}.layout-md-navbar-not-fixed.layout-fixed .wrapper .sidebar{margin-top:0}}@media (min-width:992px){.layout-lg-navbar-fixed.layout-fixed .wrapper .control-sidebar{top:calc(3.164rem + 1px)}.layout-lg-navbar-fixed.layout-fixed .wrapper .main-header.text-sm~.control-sidebar,.text-sm .layout-lg-navbar-fixed.layout-fixed .wrapper .main-header~.control-sidebar{top:calc(2.62475rem + 1px)}.layout-lg-navbar-fixed.layout-fixed .wrapper .sidebar{margin-top:calc(3.164rem + 1px)}.layout-lg-navbar-fixed.layout-fixed .wrapper .brand-link.text-sm~.sidebar,.text-sm .layout-lg-navbar-fixed.layout-fixed .wrapper .brand-link~.sidebar{margin-top:calc(2.62475rem + 1px)}.layout-lg-navbar-fixed.layout-fixed.text-sm .wrapper .control-sidebar{top:calc(2.62475rem + 1px)}.layout-lg-navbar-fixed.layout-fixed.text-sm .wrapper .sidebar{margin-top:calc(2.62475rem + 1px)}.layout-lg-navbar-fixed .wrapper .control-sidebar{top:0}.layout-lg-navbar-fixed .wrapper a.anchor{display:block;position:relative;top:calc(-4.164rem + -1px)}.layout-lg-navbar-fixed .wrapper.sidebar-collapse .brand-link{height:calc(3.164rem + 1px);transition:width .3s ease-in-out;width:5.4rem}.layout-lg-navbar-fixed .wrapper.sidebar-collapse .brand-link.text-sm,.text-sm .layout-lg-navbar-fixed .wrapper.sidebar-collapse .brand-link{height:calc(2.62475rem + 1px)}.layout-lg-navbar-fixed .wrapper.sidebar-collapse .main-sidebar:hover .brand-link{transition:width .3s ease-in-out;width:260px}.layout-lg-navbar-fixed .wrapper .brand-link{overflow:hidden;position:fixed;top:0;transition:width .3s ease-in-out;width:260px;z-index:1035}.layout-lg-navbar-fixed .wrapper .sidebar-dark-primary .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-lg-navbar-fixed .wrapper .sidebar-light-primary .brand-link:not([class*=navbar]){background-color:#fff}.layout-lg-navbar-fixed .wrapper .sidebar-dark-secondary .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-lg-navbar-fixed .wrapper .sidebar-light-secondary .brand-link:not([class*=navbar]){background-color:#fff}.layout-lg-navbar-fixed .wrapper .sidebar-dark-success .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-lg-navbar-fixed .wrapper .sidebar-light-success .brand-link:not([class*=navbar]){background-color:#fff}.layout-lg-navbar-fixed .wrapper .sidebar-dark-info .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-lg-navbar-fixed .wrapper .sidebar-light-info .brand-link:not([class*=navbar]){background-color:#fff}.layout-lg-navbar-fixed .wrapper .sidebar-dark-warning .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-lg-navbar-fixed .wrapper .sidebar-light-warning .brand-link:not([class*=navbar]){background-color:#fff}.layout-lg-navbar-fixed .wrapper .sidebar-dark-danger .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-lg-navbar-fixed .wrapper .sidebar-light-danger .brand-link:not([class*=navbar]){background-color:#fff}.layout-lg-navbar-fixed .wrapper .sidebar-dark-light .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-lg-navbar-fixed .wrapper .sidebar-light-light .brand-link:not([class*=navbar]){background-color:#fff}.layout-lg-navbar-fixed .wrapper .sidebar-dark-dark .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-lg-navbar-fixed .wrapper .sidebar-light-dark .brand-link:not([class*=navbar]){background-color:#fff}.layout-lg-navbar-fixed .wrapper .content-wrapper{margin-top:calc(3.164rem + 1px)}.layout-lg-navbar-fixed .wrapper .main-header.text-sm~.content-wrapper,.text-sm .layout-lg-navbar-fixed .wrapper .main-header~.content-wrapper{margin-top:calc(2.62475rem + 1px)}.layout-lg-navbar-fixed .wrapper .main-header{left:0;position:fixed;right:0;top:0;z-index:1037}.layout-lg-navbar-fixed.text-sm .wrapper .content-wrapper{margin-top:calc(2.62475rem + 1px)}body:not(.layout-fixed).layout-lg-navbar-fixed .wrapper .main-sidebar{margin-top:calc(-3.164rem + -1px)}body:not(.layout-fixed).layout-lg-navbar-fixed .wrapper .main-sidebar .sidebar{margin-top:calc(3.164rem + 1px)}body:not(.layout-fixed).layout-lg-navbar-fixed.text-sm .wrapper .main-sidebar{margin-top:calc(-2.62475rem + -1px)}body:not(.layout-fixed).layout-lg-navbar-fixed.text-sm .wrapper .main-sidebar .sidebar{margin-top:calc(2.62475rem + 1px)}.layout-lg-navbar-not-fixed .wrapper .brand-link{position:static}.layout-lg-navbar-not-fixed .wrapper .content-wrapper,.layout-lg-navbar-not-fixed .wrapper .sidebar{margin-top:0}.layout-lg-navbar-not-fixed .wrapper .main-header{position:static}.layout-lg-navbar-not-fixed.layout-fixed .wrapper .sidebar{margin-top:0}}@media (min-width:1200px){.layout-xl-navbar-fixed.layout-fixed .wrapper .control-sidebar{top:calc(3.164rem + 1px)}.layout-xl-navbar-fixed.layout-fixed .wrapper .main-header.text-sm~.control-sidebar,.text-sm .layout-xl-navbar-fixed.layout-fixed .wrapper .main-header~.control-sidebar{top:calc(2.62475rem + 1px)}.layout-xl-navbar-fixed.layout-fixed .wrapper .sidebar{margin-top:calc(3.164rem + 1px)}.layout-xl-navbar-fixed.layout-fixed .wrapper .brand-link.text-sm~.sidebar,.text-sm .layout-xl-navbar-fixed.layout-fixed .wrapper .brand-link~.sidebar{margin-top:calc(2.62475rem + 1px)}.layout-xl-navbar-fixed.layout-fixed.text-sm .wrapper .control-sidebar{top:calc(2.62475rem + 1px)}.layout-xl-navbar-fixed.layout-fixed.text-sm .wrapper .sidebar{margin-top:calc(2.62475rem + 1px)}.layout-xl-navbar-fixed .wrapper .control-sidebar{top:0}.layout-xl-navbar-fixed .wrapper a.anchor{display:block;position:relative;top:calc(-4.164rem + -1px)}.layout-xl-navbar-fixed .wrapper.sidebar-collapse .brand-link{height:calc(3.164rem + 1px);transition:width .3s ease-in-out;width:5.4rem}.layout-xl-navbar-fixed .wrapper.sidebar-collapse .brand-link.text-sm,.text-sm .layout-xl-navbar-fixed .wrapper.sidebar-collapse .brand-link{height:calc(2.62475rem + 1px)}.layout-xl-navbar-fixed .wrapper.sidebar-collapse .main-sidebar:hover .brand-link{transition:width .3s ease-in-out;width:260px}.layout-xl-navbar-fixed .wrapper .brand-link{overflow:hidden;position:fixed;top:0;transition:width .3s ease-in-out;width:260px;z-index:1035}.layout-xl-navbar-fixed .wrapper .sidebar-dark-primary .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-xl-navbar-fixed .wrapper .sidebar-light-primary .brand-link:not([class*=navbar]){background-color:#fff}.layout-xl-navbar-fixed .wrapper .sidebar-dark-secondary .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-xl-navbar-fixed .wrapper .sidebar-light-secondary .brand-link:not([class*=navbar]){background-color:#fff}.layout-xl-navbar-fixed .wrapper .sidebar-dark-success .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-xl-navbar-fixed .wrapper .sidebar-light-success .brand-link:not([class*=navbar]){background-color:#fff}.layout-xl-navbar-fixed .wrapper .sidebar-dark-info .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-xl-navbar-fixed .wrapper .sidebar-light-info .brand-link:not([class*=navbar]){background-color:#fff}.layout-xl-navbar-fixed .wrapper .sidebar-dark-warning .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-xl-navbar-fixed .wrapper .sidebar-light-warning .brand-link:not([class*=navbar]){background-color:#fff}.layout-xl-navbar-fixed .wrapper .sidebar-dark-danger .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-xl-navbar-fixed .wrapper .sidebar-light-danger .brand-link:not([class*=navbar]){background-color:#fff}.layout-xl-navbar-fixed .wrapper .sidebar-dark-light .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-xl-navbar-fixed .wrapper .sidebar-light-light .brand-link:not([class*=navbar]){background-color:#fff}.layout-xl-navbar-fixed .wrapper .sidebar-dark-dark .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-xl-navbar-fixed .wrapper .sidebar-light-dark .brand-link:not([class*=navbar]){background-color:#fff}.layout-xl-navbar-fixed .wrapper .content-wrapper{margin-top:calc(3.164rem + 1px)}.layout-xl-navbar-fixed .wrapper .main-header.text-sm~.content-wrapper,.text-sm .layout-xl-navbar-fixed .wrapper .main-header~.content-wrapper{margin-top:calc(2.62475rem + 1px)}.layout-xl-navbar-fixed .wrapper .main-header{left:0;position:fixed;right:0;top:0;z-index:1037}.layout-xl-navbar-fixed.text-sm .wrapper .content-wrapper{margin-top:calc(2.62475rem + 1px)}body:not(.layout-fixed).layout-xl-navbar-fixed .wrapper .main-sidebar{margin-top:calc(-3.164rem + -1px)}body:not(.layout-fixed).layout-xl-navbar-fixed .wrapper .main-sidebar .sidebar{margin-top:calc(3.164rem + 1px)}body:not(.layout-fixed).layout-xl-navbar-fixed.text-sm .wrapper .main-sidebar{margin-top:calc(-2.62475rem + -1px)}body:not(.layout-fixed).layout-xl-navbar-fixed.text-sm .wrapper .main-sidebar .sidebar{margin-top:calc(2.62475rem + 1px)}.layout-xl-navbar-not-fixed .wrapper .brand-link{position:static}.layout-xl-navbar-not-fixed .wrapper .content-wrapper,.layout-xl-navbar-not-fixed .wrapper .sidebar{margin-top:0}.layout-xl-navbar-not-fixed .wrapper .main-header{position:static}.layout-xl-navbar-not-fixed.layout-fixed .wrapper .sidebar{margin-top:0}}.layout-footer-not-fixed .wrapper .content-wrapper{margin-bottom:0}.layout-footer-fixed .wrapper .control-sidebar{bottom:0}.layout-footer-fixed .wrapper .main-footer{bottom:0;left:0;position:fixed;right:0;z-index:1032}.layout-footer-fixed .wrapper .content-wrapper{padding-bottom:3.45rem}.layout-footer-not-fixed .wrapper .main-footer{position:static}@media (min-width:576px){.layout-sm-footer-fixed .wrapper .control-sidebar{bottom:0}.layout-sm-footer-fixed .wrapper .main-footer{bottom:0;left:0;position:fixed;right:0;z-index:1032}.layout-sm-footer-fixed .wrapper .content-wrapper{padding-bottom:3.45rem}.layout-sm-footer-not-fixed .wrapper .main-footer{position:static}}@media (min-width:768px){.layout-md-footer-fixed .wrapper .control-sidebar{bottom:0}.layout-md-footer-fixed .wrapper .main-footer{bottom:0;left:0;position:fixed;right:0;z-index:1032}.layout-md-footer-fixed .wrapper .content-wrapper{padding-bottom:3.45rem}.layout-md-footer-not-fixed .wrapper .main-footer{position:static}}@media (min-width:992px){.layout-lg-footer-fixed .wrapper .control-sidebar{bottom:0}.layout-lg-footer-fixed .wrapper .main-footer{bottom:0;left:0;position:fixed;right:0;z-index:1032}.layout-lg-footer-fixed .wrapper .content-wrapper{padding-bottom:3.45rem}.layout-lg-footer-not-fixed .wrapper .main-footer{position:static}}@media (min-width:1200px){.layout-xl-footer-fixed .wrapper .control-sidebar{bottom:0}.layout-xl-footer-fixed .wrapper .main-footer{bottom:0;left:0;position:fixed;right:0;z-index:1032}.layout-xl-footer-fixed .wrapper .content-wrapper{padding-bottom:3.45rem}.layout-xl-footer-not-fixed .wrapper .main-footer{position:static}}.layout-top-nav .wrapper{margin-left:0}.layout-top-nav .wrapper .main-header .brand-image{margin-top:-.5rem;margin-right:.2rem;height:33px}.layout-top-nav .wrapper .main-sidebar{bottom:inherit;height:inherit}.layout-top-nav .wrapper .content-wrapper,.layout-top-nav .wrapper .main-footer,.layout-top-nav .wrapper .main-header,body.sidebar-collapse:not(.sidebar-mini-md):not(.sidebar-mini) .content-wrapper,body.sidebar-collapse:not(.sidebar-mini-md):not(.sidebar-mini) .content-wrapper:before,body.sidebar-collapse:not(.sidebar-mini-md):not(.sidebar-mini) .main-footer,body.sidebar-collapse:not(.sidebar-mini-md):not(.sidebar-mini) .main-footer:before,body.sidebar-collapse:not(.sidebar-mini-md):not(.sidebar-mini) .main-header,body.sidebar-collapse:not(.sidebar-mini-md):not(.sidebar-mini) .main-header:before{margin-left:0}@media (min-width:768px){body:not(.sidebar-mini-md) .content-wrapper,body:not(.sidebar-mini-md) .main-footer,body:not(.sidebar-mini-md) .main-header{transition:margin-left .3s ease-in-out;margin-left:260px}}@media (min-width:768px) and (prefers-reduced-motion:reduce){body:not(.sidebar-mini-md) .content-wrapper,body:not(.sidebar-mini-md) .main-footer,body:not(.sidebar-mini-md) .main-header{transition:none}}@media (min-width:768px){.sidebar-collapse body:not(.sidebar-mini-md) .content-wrapper,.sidebar-collapse body:not(.sidebar-mini-md) .main-footer,.sidebar-collapse body:not(.sidebar-mini-md) .main-header{margin-left:0}}@media (max-width:991.98px){body:not(.sidebar-mini-md) .content-wrapper,body:not(.sidebar-mini-md) .content-wrapper:before,body:not(.sidebar-mini-md) .main-footer,body:not(.sidebar-mini-md) .main-footer:before,body:not(.sidebar-mini-md) .main-header,body:not(.sidebar-mini-md) .main-header:before{margin-left:0}}@media (min-width:768px){.sidebar-mini-md .content-wrapper,.sidebar-mini-md .main-footer,.sidebar-mini-md .main-header{transition:margin-left .3s ease-in-out;margin-left:260px}}@media (min-width:768px) and (prefers-reduced-motion:reduce){.sidebar-mini-md .content-wrapper,.sidebar-mini-md .main-footer,.sidebar-mini-md .main-header{transition:none}}@media (min-width:768px){.sidebar-collapse .sidebar-mini-md .content-wrapper,.sidebar-collapse .sidebar-mini-md .main-footer,.sidebar-collapse .sidebar-mini-md .main-header{margin-left:5.4rem}}@media (max-width:991.98px){.sidebar-mini-md .content-wrapper,.sidebar-mini-md .content-wrapper:before,.sidebar-mini-md .main-footer,.sidebar-mini-md .main-footer:before,.sidebar-mini-md .main-header,.sidebar-mini-md .main-header:before{margin-left:5.4rem}}.content-wrapper{background:#f4f6f9}.content-wrapper>.content{padding:0 1rem}.main-sidebar,.main-sidebar:before{transition:margin-left .3s ease-in-out,width .3s ease-in-out;width:260px}@media (prefers-reduced-motion:reduce){.main-sidebar,.main-sidebar:before{transition:none}}.sidebar-collapse:not(.sidebar-mini):not(.sidebar-mini-md) .main-sidebar,.sidebar-collapse:not(.sidebar-mini):not(.sidebar-mini-md) .main-sidebar:before{box-shadow:none!important}.sidebar-collapse .main-sidebar,.sidebar-collapse .main-sidebar:before{margin-left:-260px}.sidebar-collapse .main-sidebar .nav-sidebar.nav-child-indent .nav-treeview{padding:0}@media (max-width:767.98px){.main-sidebar,.main-sidebar:before{box-shadow:none!important;margin-left:-260px}.sidebar-open .main-sidebar,.sidebar-open .main-sidebar:before{margin-left:0}}:not(.layout-fixed) .main-sidebar{height:inherit;min-height:100%;position:absolute;top:0}.layout-fixed .brand-link{width:260px}.layout-fixed .main-sidebar{left:0}.layout-fixed .control-sidebar,.layout-fixed .main-sidebar{bottom:0;float:none;height:100vh;position:fixed;top:0}.layout-fixed .control-sidebar .control-sidebar-content{height:calc(100vh - 3.164rem - 1px)}@supports (-webkit-touch-callout:none){.layout-fixed .main-sidebar{height:inherit}}.main-footer{background:transparent;border-top:0 solid #dae1e7;padding:.5rem 1rem;font-size:90%}.main-footer.text-sm,.text-sm .main-footer{padding:.812rem}.content-header{padding:15px 1rem}.text-sm .content-header{padding:10px 1rem}.content-header h1{font-size:1.8rem;margin:0}.text-sm .content-header h1{font-size:1.5rem}.content-header .breadcrumb{background:transparent;line-height:1.8rem;margin-bottom:0;padding:0;font-size:97%}.text-sm .content-header .breadcrumb{line-height:1.5rem}.hold-transition .content-wrapper,.hold-transition .control-sidebar,.hold-transition .control-sidebar *,.hold-transition .main-footer,.hold-transition .main-header,.hold-transition .main-sidebar,.hold-transition .main-sidebar *{transition:none!important}.main-header{border-bottom:1px solid #dae1e7;z-index:1034}.main-header .nav-link{height:2.164rem;position:relative}.main-header.text-sm .nav-link,.text-sm .main-header .nav-link{height:1.62475rem;padding:.35rem .5rem}.main-header.text-sm .nav-link>.fa,.main-header.text-sm .nav-link>.fab,.main-header.text-sm .nav-link>.far,.main-header.text-sm .nav-link>.fas,.main-header.text-sm .nav-link>.glyphicon,.main-header.text-sm .nav-link>.ion,.text-sm .main-header .nav-link>.fa,.text-sm .main-header .nav-link>.fab,.text-sm .main-header .nav-link>.far,.text-sm .main-header .nav-link>.fas,.text-sm .main-header .nav-link>.glyphicon,.text-sm .main-header .nav-link>.ion{font-size:1rem}.main-header .navbar-nav .nav-item{margin:0}.main-header .navbar-nav[class*=-right] .dropdown-menu{left:auto;margin-top:-3px;right:0}@media (max-width:575.98px){.main-header .navbar-nav[class*=-right] .dropdown-menu{left:0;right:auto}}.navbar-img{height:calc(3.164rem + 1px)/2;width:auto}.navbar-badge{font-size:.6rem;font-weight:300;padding:2px 4px;position:absolute;right:5px;top:9px}.btn-navbar{background-color:transparent;border-left-width:0}.form-control-navbar{border-right-width:0}.form-control-navbar+.input-group-append{margin-left:0}.btn-navbar,.form-control-navbar{transition:none}.navbar-dark .btn-navbar,.navbar-dark .form-control-navbar{background-color:hsla(0,0%,100%,.2);border:0}.navbar-dark .form-control-navbar::-moz-placeholder{color:hsla(0,0%,100%,.6)}.navbar-dark .form-control-navbar:-ms-input-placeholder{color:hsla(0,0%,100%,.6)}.navbar-dark .form-control-navbar::placeholder{color:hsla(0,0%,100%,.6)}.navbar-dark .form-control-navbar+.input-group-append>.btn-navbar{color:hsla(0,0%,100%,.6)}.navbar-dark .form-control-navbar:focus,.navbar-dark .form-control-navbar:focus+.input-group-append .btn-navbar{background-color:hsla(0,0%,100%,.6);border:0!important;color:#1e1e1e}.navbar-light .btn-navbar,.navbar-light .form-control-navbar{background-color:#b4bac2;border:0}.navbar-light .form-control-navbar::-moz-placeholder{color:rgba(0,0,0,.6)}.navbar-light .form-control-navbar:-ms-input-placeholder{color:rgba(0,0,0,.6)}.navbar-light .form-control-navbar::placeholder{color:rgba(0,0,0,.6)}.navbar-light .form-control-navbar+.input-group-append>.btn-navbar{color:rgba(0,0,0,.6)}.navbar-light .form-control-navbar:focus,.navbar-light .form-control-navbar:focus+.input-group-append .btn-navbar{background-color:#ededed;border:0!important;color:#1e1e1e}.brand-link{display:block;font-size:2rem;line-height:1.25;padding:.132rem .5rem;transition:width .3s ease-in-out;white-space:nowrap}.brand-link:hover{color:#fff;text-decoration:none}.text-sm .brand-link{font-size:inherit}[class*=sidebar-dark] .brand-link{border-bottom:0;color:hsla(0,0%,100%,.8)}[class*=sidebar-light] .brand-link{border-bottom:0;color:rgba(34,41,47,.8)}.brand-link .brand-image{float:left;line-height:.8;margin-left:.8rem;margin-right:.5rem;margin-top:-3px;max-height:33px;width:auto}.brand-link .brand-image-xs{float:left;line-height:.8;margin-top:-.1rem;max-height:33px;width:auto}.brand-link .brand-image-xl{line-height:.8;max-height:40px;width:auto}.brand-link.text-sm .brand-image,.text-sm .brand-link .brand-image{height:29px;margin-bottom:-.25rem;margin-left:.95rem;margin-top:-.25rem}.brand-link.text-sm .brand-image-xs,.text-sm .brand-link .brand-image-xs{margin-top:-.2rem;max-height:29px}.brand-link.text-sm .brand-image-xl,.text-sm .brand-link .brand-image-xl{margin-top:-.225rem;max-height:38px}.main-sidebar{height:100vh;overflow-y:hidden;z-index:1038}.main-sidebar a:-moz-focusring{border:0;outline:none}.main-sidebar .nav .nav-item .nav-link{padding:10px 10px 10px 25px!important}.main-sidebar .nav-treeview.nav .nav-item .nav-link{padding:5px 10px 7px 25px!important}.sidebar{height:calc(100% - 3.164rem - 1px);overflow-y:auto;padding:0 .5rem}.user-panel{position:relative}[class*=sidebar-dark] .user-panel{border-bottom:1px solid #3c4853}[class*=sidebar-light] .user-panel{border-bottom:1px solid #dae1e7}.user-panel,.user-panel .info{overflow:hidden;white-space:nowrap}.user-panel .image{display:inline-block;padding-left:.3rem}.user-panel img{height:auto;width:2.5666666667rem}.user-panel .info{display:inline-block;padding:5px 5px 5px 10px}.user-panel .dropdown-menu,.user-panel .status{font-size:1rem}.nav-sidebar .nav-item>.nav-link{margin-bottom:.2rem}.nav-sidebar .nav-item>.nav-link .right{transition:transform .3s ease-in-out}@media (prefers-reduced-motion:reduce){.nav-sidebar .nav-item>.nav-link .right{transition:none}}.nav-sidebar .nav-link>.right,.nav-sidebar .nav-link>p>.right{position:absolute;right:1rem;top:.9rem}.nav-sidebar .nav-link>.right i,.nav-sidebar .nav-link>.right span,.nav-sidebar .nav-link>p>.right i,.nav-sidebar .nav-link>p>.right span{margin-left:.5rem}.nav-sidebar .nav-link>.right:nth-child(2),.nav-sidebar .nav-link>p>.right:nth-child(2){right:2.2rem}.nav-sidebar .menu-open>.nav-treeview{display:block;border-radius:0}.nav-sidebar .menu-open>.nav-link i.right{transform:rotate(-90deg)}.nav-sidebar>.nav-item{margin-bottom:0}.nav-sidebar>.nav-item .nav-icon{margin-left:.05rem;font-size:1.2rem;margin-right:.2rem;text-align:center;width:2.4rem}.nav-sidebar>.nav-item .nav-icon.fa,.nav-sidebar>.nav-item .nav-icon.fab,.nav-sidebar>.nav-item .nav-icon.far,.nav-sidebar>.nav-item .nav-icon.fas,.nav-sidebar>.nav-item .nav-icon.glyphicon,.nav-sidebar>.nav-item .nav-icon.ion{font-size:1.1rem}.nav-sidebar>.nav-item .float-right{margin-top:3px}.nav-sidebar .nav-treeview{display:none;list-style:none;padding:0}.nav-sidebar .nav-treeview>.nav-item>.nav-link>.nav-icon{width:2.4rem}.nav-sidebar.nav-child-indent .nav-treeview{transition:padding .3s ease-in-out;padding-left:1rem}.text-sm .nav-sidebar.nav-child-indent .nav-treeview{padding-left:.5rem}.nav-sidebar.nav-child-indent.nav-legacy .nav-treeview .nav-treeview{padding-left:2rem;margin-left:-1rem}.text-sm .nav-sidebar.nav-child-indent.nav-legacy .nav-treeview .nav-treeview{padding-left:1rem;margin-left:-.5rem}.nav-sidebar .nav-header{font-size:.9rem;padding:.357rem}.nav-sidebar .nav-header:not(:first-of-type){padding:1.7rem 1rem .5rem}.nav-sidebar .nav-link p{display:inline-block;margin:0}#sidebar-overlay{background-color:rgba(34,41,47,.1);bottom:0;display:none;left:0;position:fixed;right:0;top:0;z-index:1037}@media (max-width:991.98px){.sidebar-open #sidebar-overlay{display:block}}[class*=sidebar-light-]{background-color:#fff}[class*=sidebar-light-] .user-panel a:hover{color:#555}[class*=sidebar-light-] .user-panel .status,[class*=sidebar-light-] .user-panel .status:active,[class*=sidebar-light-] .user-panel .status:focus,[class*=sidebar-light-] .user-panel .status:hover{background:transparent;color:#555}[class*=sidebar-light-] .user-panel .dropdown-menu{border-color:transparent}[class*=sidebar-light-] .user-panel .dropdown-item{color:#626262}[class*=sidebar-light-] .nav-sidebar>.nav-item>.nav-link:active,[class*=sidebar-light-] .nav-sidebar>.nav-item>.nav-link:focus{color:#555}[class*=sidebar-light-] .nav-sidebar>.nav-item>.nav-link i{margin-right:.75rem;font-size:1.2rem}[class*=sidebar-light-] .nav-sidebar>.nav-item>.nav-link p i{margin-right:0;margin-top:1px}[class*=sidebar-light-] .nav-sidebar>.nav-item.menu-open>.nav-link,[class*=sidebar-light-] .nav-sidebar>.nav-item:hover>.nav-link{background-color:transparent;color:#555}[class*=sidebar-light-] .nav-sidebar>.nav-item>.nav-link.active{color:#fff}[class*=sidebar-light-] .nav-sidebar>.nav-item>.nav-treeview{background:transparent}[class*=sidebar-light-] .nav-header{background:inherit;color:#484848}[class*=sidebar-light-] .sidebar a{color:#555}[class*=sidebar-light-] .sidebar a:hover{text-decoration:none}[class*=sidebar-light-] .nav-treeview>.nav-item>.nav-link{color:#555}[class*=sidebar-light-] .nav-treeview>.nav-item>.nav-link i{margin-right:.75rem;margin-left:3px}[class*=sidebar-light-] .nav-treeview>.nav-item>.nav-link p i{margin-right:0}[class*=sidebar-light-] .nav-treeview>.nav-item>.nav-link.active,[class*=sidebar-light-] .nav-treeview>.nav-item>.nav-link.active:hover{background-color:transparent!important;background-image:linear-gradient(118deg,rgba(109,139,230,.95),rgba(109,139,230,.7));color:#fff;box-shadow:0 0 8px 1px rgba(109,139,230,.7)}[class*=sidebar-light-] .nav-treeview>.nav-item>.nav-link:hover{background-color:transparent}[class*=sidebar-light-] .nav-flat .nav-item .nav-treeview .nav-treeview,[class*=sidebar-light-] .nav-flat .nav-item .nav-treeview>.nav-item>.nav-link,[class*=sidebar-light-] .nav-flat .nav-item .nav-treeview>.nav-item>.nav-link.active{border-color:linear-gradient(118deg,#6d8be6,rgba(109,139,230,.7))}[class*=sidebar-dark-]{background-image:linear-gradient(0deg,#77889f,#3e4958)}[class*=sidebar-dark-] .nav-treeview.nav .nav-item .nav-link{font-size:1rem!important;margin-bottom:0}[class*=sidebar-dark-] .nav-sidebar .nav-link>p>.right{right:.5rem}[class*=sidebar-dark-] .user-panel a:hover{color:hsla(0,0%,100%,.95)}[class*=sidebar-dark-] .user-panel .status,[class*=sidebar-dark-] .user-panel .status:active,[class*=sidebar-dark-] .user-panel .status:focus,[class*=sidebar-dark-] .user-panel .status:hover{background:transparent;color:hsla(0,0%,100%,.95)}[class*=sidebar-dark-] .user-panel .dropdown-menu{border-color:transparent}[class*=sidebar-dark-] .user-panel .dropdown-item{color:#626262}[class*=sidebar-dark-] .nav-sidebar>.nav-item>.nav-link:active{color:#fff;font-weight:700}[class*=sidebar-dark-] .nav-sidebar>.nav-item>.nav-link:hover{color:hsla(0,0%,100%,.95)}[class*=sidebar-dark-] .nav-sidebar>.nav-item i{margin-right:.75rem;color:hsla(0,0%,100%,.95)}[class*=sidebar-dark-] .nav-sidebar>.nav-item.menu-open>.nav-link,[class*=sidebar-dark-] .nav-sidebar>.nav-item:hover>.nav-link,[class*=sidebar-dark-] .nav-sidebar>.nav-item>.nav-link:focus{background-color:transparent;color:hsla(0,0%,100%,.95)}[class*=sidebar-dark-] .nav-sidebar>.nav-item>.nav-link.active{color:#fff;background:transparent;font-weight:700}[class*=sidebar-dark-] .nav-header{background:inherit;color:hsla(0,0%,100%,.95)}[class*=sidebar-dark-] .sidebar a{color:hsla(0,0%,100%,.95)}[class*=sidebar-dark-] .sidebar a:focus,[class*=sidebar-dark-] .sidebar a:hover{text-decoration:none}[class*=sidebar-dark-] .nav-treeview>.nav-item>.nav-link{color:hsla(0,0%,100%,.95)}[class*=sidebar-dark-] .nav-treeview>.nav-item>.nav-link.active,[class*=sidebar-dark-] .nav-treeview>.nav-item>.nav-link.active:focus,[class*=sidebar-dark-] .nav-treeview>.nav-item>.nav-link.active:hover,[class*=sidebar-dark-] .nav-treeview>.nav-item>.nav-link:focus,[class*=sidebar-dark-] .nav-treeview>.nav-item>.nav-link:hover{background-color:transparent;color:#fff;font-weight:700}[class*=sidebar-dark-] .nav-flat .nav-item .nav-treeview .nav-treeview,[class*=sidebar-dark-] .nav-flat .nav-item .nav-treeview>.nav-item>.nav-link,[class*=sidebar-dark-] .nav-flat .nav-item .nav-treeview>.nav-item>.nav-link.active{border-color:transparent}.sidebar-light-primary .nav-item>.nav-link.active{background-color:transparent!important;background-image:linear-gradient(118deg,rgba(109,139,230,.95),rgba(109,139,230,.7));color:#fff;box-shadow:0 0 8px 1px rgba(109,139,230,.7)}.sidebar-light-primary .active-bg-light .nav-item>.nav-link.active{background-color:rgba(109,139,230,.15)!important;color:#6d8be6!important;font-weight:700;box-shadow:0 0 8px 1px rgba(109,139,230,.15)}.sidebar-mini-md .main-sidebar.sidebar-focused .nav-compact.nav-sidebar.nav-child-indent:not(.nav-flat) .nav-treeview,.sidebar-mini-md .main-sidebar:not(.sidebar-no-expand) .nav-compact.nav-sidebar.nav-child-indent:not(.nav-flat) .nav-treeview,.sidebar-mini-md .main-sidebar:not(.sidebar-no-expand):hover .nav-compact.nav-sidebar.nav-child-indent:not(.nav-flat) .nav-treeview,.sidebar-mini .main-sidebar.sidebar-focused .nav-compact.nav-sidebar.nav-child-indent:not(.nav-flat) .nav-treeview,.sidebar-mini .main-sidebar:not(.sidebar-no-expand) .nav-compact.nav-sidebar.nav-child-indent:not(.nav-flat) .nav-treeview,.sidebar-mini .main-sidebar:not(.sidebar-no-expand):hover .nav-compact.nav-sidebar.nav-child-indent:not(.nav-flat) .nav-treeview{padding-left:1rem;margin-left:-.5rem}.nav-flat{margin:-.25rem -.5rem 0}.nav-flat .nav-item>.nav-link{border-radius:0;margin-bottom:0}.nav-flat .nav-item>.nav-link>.nav-icon{margin-left:.55rem}.nav-flat:not(.nav-child-indent) .nav-treeview .nav-item>.nav-link>.nav-icon{margin-left:.4rem}.nav-flat.nav-child-indent .nav-treeview{padding-left:0}.nav-flat.nav-child-indent .nav-treeview .nav-icon{margin-left:.85rem}.nav-flat.nav-child-indent .nav-treeview .nav-treeview{border-left:.2rem solid}.nav-flat.nav-child-indent .nav-treeview .nav-treeview .nav-icon{margin-left:1.15rem}.nav-flat.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-icon{margin-left:1.45rem}.nav-flat.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-icon{margin-left:1.75rem}.nav-flat.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-icon{margin-left:2.05rem}.sidebar-collapse .nav-flat.nav-child-indent .nav-treeview .nav-icon{margin-left:.55rem}.sidebar-collapse .nav-flat.nav-child-indent .nav-treeview .nav-link{padding-left:.3rem}.sidebar-collapse .nav-flat.nav-child-indent .nav-treeview .nav-treeview .nav-icon{margin-left:.35rem}.sidebar-collapse .nav-flat.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-icon{margin-left:.15rem}.sidebar-collapse .nav-flat.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-icon{margin-left:-.15rem}.sidebar-collapse .nav-flat.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-icon{margin-left:-.35rem}.sidebar-mini-md .main-sidebar.sidebar-focused .nav-flat.nav-compact.nav-sidebar .nav-treeview .nav-icon,.sidebar-mini-md .main-sidebar:not(.sidebar-no-expand):hover .nav-flat.nav-compact.nav-sidebar .nav-treeview .nav-icon,.sidebar-mini .main-sidebar.sidebar-focused .nav-flat.nav-compact.nav-sidebar .nav-treeview .nav-icon,.sidebar-mini .main-sidebar:not(.sidebar-no-expand):hover .nav-flat.nav-compact.nav-sidebar .nav-treeview .nav-icon{margin-left:.4rem}.sidebar-mini-md .main-sidebar.sidebar-focused .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-icon,.sidebar-mini-md .main-sidebar:not(.sidebar-no-expand):hover .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-icon,.sidebar-mini .main-sidebar.sidebar-focused .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-icon,.sidebar-mini .main-sidebar:not(.sidebar-no-expand):hover .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-icon{margin-left:.85rem}.sidebar-mini-md .main-sidebar.sidebar-focused .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-icon,.sidebar-mini-md .main-sidebar:not(.sidebar-no-expand):hover .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-icon,.sidebar-mini .main-sidebar.sidebar-focused .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-icon,.sidebar-mini .main-sidebar:not(.sidebar-no-expand):hover .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-icon{margin-left:1.15rem}.sidebar-mini-md .main-sidebar.sidebar-focused .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-icon,.sidebar-mini-md .main-sidebar:not(.sidebar-no-expand):hover .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-icon,.sidebar-mini .main-sidebar.sidebar-focused .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-icon,.sidebar-mini .main-sidebar:not(.sidebar-no-expand):hover .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-icon{margin-left:1.45rem}.sidebar-mini-md .main-sidebar.sidebar-focused .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-icon,.sidebar-mini-md .main-sidebar:not(.sidebar-no-expand):hover .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-icon,.sidebar-mini .main-sidebar.sidebar-focused .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-icon,.sidebar-mini .main-sidebar:not(.sidebar-no-expand):hover .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-icon{margin-left:1.75rem}.sidebar-mini-md .main-sidebar.sidebar-focused .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-icon,.sidebar-mini-md .main-sidebar:not(.sidebar-no-expand):hover .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-icon,.sidebar-mini .main-sidebar.sidebar-focused .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-icon,.sidebar-mini .main-sidebar:not(.sidebar-no-expand):hover .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-icon{margin-left:2.05rem}.nav-flat .nav-icon{transition:margin-left .3s ease-in-out}@media (prefers-reduced-motion:reduce){.nav-flat .nav-icon{transition:none}}.nav-flat .nav-treeview .nav-icon{margin-left:-.2rem}.nav-flat.nav-sidebar>.nav-item .nav-treeview,.nav-flat.nav-sidebar>.nav-item>.nav-treeview{background:hsla(0,0%,100%,.05)}.nav-flat.nav-sidebar>.nav-item .nav-treeview .nav-item>.nav-link,.nav-flat.nav-sidebar>.nav-item>.nav-treeview .nav-item>.nav-link{border-left:.2rem solid}.nav-legacy{margin:-.25rem -.5rem 0}.nav-legacy.nav-sidebar .nav-item>.nav-link{border-radius:0;margin-bottom:0}.nav-legacy.nav-sidebar .nav-item>.nav-link>.nav-icon{margin-left:.55rem}.text-sm .nav-legacy.nav-sidebar .nav-item>.nav-link>.nav-icon{margin-left:.75rem}.nav-legacy.nav-sidebar>.nav-item>.nav-link.active{background:inherit;border-left:3px solid transparent;box-shadow:none}.nav-legacy.nav-sidebar>.nav-item>.nav-link.active>.nav-icon{margin-left:calc(.55rem - 3px)}.text-sm .nav-legacy.nav-sidebar.nav-flat .nav-treeview .nav-item>.nav-link>.nav-icon,.text-sm .nav-legacy.nav-sidebar>.nav-item>.nav-link.active>.nav-icon{margin-left:calc(.75rem - 3px)}.sidebar-mini-md .nav-legacy>.nav-item .nav-link .nav-icon,.sidebar-mini .nav-legacy>.nav-item .nav-link .nav-icon{transition:margin-left .3s ease-in-out;margin-left:.75rem}@media (prefers-reduced-motion:reduce){.sidebar-mini-md .nav-legacy>.nav-item .nav-link .nav-icon,.sidebar-mini .nav-legacy>.nav-item .nav-link .nav-icon{transition:none}}.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused .nav-legacy.nav-child-indent .nav-treeview,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover .nav-legacy.nav-child-indent .nav-treeview,.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused .nav-legacy.nav-child-indent .nav-treeview,.sidebar-mini.sidebar-collapse .main-sidebar:hover .nav-legacy.nav-child-indent .nav-treeview{padding-left:1rem}.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused .nav-legacy.nav-child-indent .nav-treeview .nav-treeview,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover .nav-legacy.nav-child-indent .nav-treeview .nav-treeview,.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused .nav-legacy.nav-child-indent .nav-treeview .nav-treeview,.sidebar-mini.sidebar-collapse .main-sidebar:hover .nav-legacy.nav-child-indent .nav-treeview .nav-treeview{padding-left:2rem;margin-left:-1rem}.sidebar-mini-md.sidebar-collapse.text-sm .main-sidebar.sidebar-focused .nav-legacy.nav-child-indent .nav-treeview,.sidebar-mini-md.sidebar-collapse.text-sm .main-sidebar:hover .nav-legacy.nav-child-indent .nav-treeview,.sidebar-mini.sidebar-collapse.text-sm .main-sidebar.sidebar-focused .nav-legacy.nav-child-indent .nav-treeview,.sidebar-mini.sidebar-collapse.text-sm .main-sidebar:hover .nav-legacy.nav-child-indent .nav-treeview{padding-left:.5rem}.sidebar-mini-md.sidebar-collapse.text-sm .main-sidebar.sidebar-focused .nav-legacy.nav-child-indent .nav-treeview .nav-treeview,.sidebar-mini-md.sidebar-collapse.text-sm .main-sidebar:hover .nav-legacy.nav-child-indent .nav-treeview .nav-treeview,.sidebar-mini.sidebar-collapse.text-sm .main-sidebar.sidebar-focused .nav-legacy.nav-child-indent .nav-treeview .nav-treeview,.sidebar-mini.sidebar-collapse.text-sm .main-sidebar:hover .nav-legacy.nav-child-indent .nav-treeview .nav-treeview{padding-left:1rem;margin-left:-.5rem}.sidebar-mini-md.sidebar-collapse .nav-legacy>.nav-item>.nav-link .nav-icon,.sidebar-mini.sidebar-collapse .nav-legacy>.nav-item>.nav-link .nav-icon{margin-left:.55rem}.sidebar-mini-md.sidebar-collapse .nav-legacy>.nav-item>.nav-link.active>.nav-icon,.sidebar-mini.sidebar-collapse .nav-legacy>.nav-item>.nav-link.active>.nav-icon{margin-left:.36rem}.sidebar-mini-md.sidebar-collapse .nav-legacy.nav-child-indent .nav-treeview .nav-treeview,.sidebar-mini.sidebar-collapse .nav-legacy.nav-child-indent .nav-treeview .nav-treeview{padding-left:0;margin-left:0}.sidebar-mini-md.sidebar-collapse.text-sm .nav-legacy>.nav-item>.nav-link .nav-icon,.sidebar-mini.sidebar-collapse.text-sm .nav-legacy>.nav-item>.nav-link .nav-icon{margin-left:.75rem}.sidebar-mini-md.sidebar-collapse.text-sm .nav-legacy>.nav-item>.nav-link.active>.nav-icon,.sidebar-mini.sidebar-collapse.text-sm .nav-legacy>.nav-item>.nav-link.active>.nav-icon{margin-left:calc(.75rem - 3px)}[class*=sidebar-dark] .nav-legacy.nav-sidebar>.nav-item .nav-treeview,[class*=sidebar-dark] .nav-legacy.nav-sidebar>.nav-item>.nav-treeview{background:hsla(0,0%,100%,.05)}[class*=sidebar-dark] .nav-legacy.nav-sidebar>.nav-item>.nav-link.active{color:#fff}[class*=sidebar-dark] .nav-legacy .nav-treeview>.nav-item>.nav-link.active,[class*=sidebar-dark] .nav-legacy .nav-treeview>.nav-item>.nav-link:focus,[class*=sidebar-dark] .nav-legacy .nav-treeview>.nav-item>.nav-link:hover{background:none;color:#fff}[class*=sidebar-light] .nav-legacy.nav-sidebar>.nav-item .nav-treeview,[class*=sidebar-light] .nav-legacy.nav-sidebar>.nav-item>.nav-treeview{background:rgba(34,41,47,.05)}[class*=sidebar-light] .nav-legacy.nav-sidebar>.nav-item>.nav-link.active{color:#fff}[class*=sidebar-light] .nav-legacy .nav-treeview>.nav-item>.nav-link.active,[class*=sidebar-light] .nav-legacy .nav-treeview>.nav-item>.nav-link:focus,[class*=sidebar-light] .nav-legacy .nav-treeview>.nav-item>.nav-link:hover{background:none;color:#fff}.nav-collapse-hide-child .menu-open>.nav-treeview{max-height:-webkit-min-content;max-height:-moz-min-content;max-height:min-content;opacity:1}.sidebar-collapse .nav-collapse-hide-child .menu-open>.nav-treeview{max-height:0;opacity:0}.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused .nav-collapse-hide-child .menu-open>.nav-treeview,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover .nav-collapse-hide-child .menu-open>.nav-treeview,.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused .nav-collapse-hide-child .menu-open>.nav-treeview,.sidebar-mini.sidebar-collapse .main-sidebar:hover .nav-collapse-hide-child .menu-open>.nav-treeview{max-height:-webkit-min-content;max-height:-moz-min-content;max-height:min-content;opacity:1}.nav-compact .nav-header,.nav-compact .nav-link{padding-top:.1785rem;padding-bottom:.1785rem}.nav-compact .nav-header:not(:first-of-type){padding-top:.5355rem;padding-bottom:.1785rem}.nav-compact .nav-link>.right,.nav-compact .nav-link>p>.right{top:.465rem}.text-sm .nav-compact .nav-link>.right,.text-sm .nav-compact .nav-link>p>.right{top:.7rem}[class*=sidebar-dark] .btn-sidebar,[class*=sidebar-dark] .form-control-sidebar{background:#495567;border:1px solid #5e6e85;color:#fff}[class*=sidebar-dark] .btn-sidebar:focus,[class*=sidebar-dark] .form-control-sidebar:focus{border:1px solid #8695a9}[class*=sidebar-dark] .btn-sidebar:hover{background:#4e5c6e}[class*=sidebar-dark] .btn-sidebar:focus{background:#536276}[class*=sidebar-light] .btn-sidebar,[class*=sidebar-light] .form-control-sidebar{background:#f2f2f2;border:1px solid #d9d9d9;color:#2a2e30}[class*=sidebar-light] .btn-sidebar:focus,[class*=sidebar-light] .form-control-sidebar:focus{border:1px solid #b3b3b3}[class*=sidebar-light] .btn-sidebar:hover{background:#ececec}[class*=sidebar-light] .btn-sidebar:focus{background:#e6e6e6}.logo-xl,.logo-xs{opacity:1;position:absolute;visibility:visible}.logo-xl.brand-image-xs,.logo-xs.brand-image-xs{left:18px;top:12px}.logo-xl.brand-image-xl,.logo-xs.brand-image-xl{left:12px;top:6px}.logo-xs{opacity:0;visibility:hidden}.logo-xs.brand-image-xl{left:16px;top:8px}.brand-link.logo-switch:before{content:"\A0"}@media (min-width:992px){.sidebar-mini .nav-sidebar,.sidebar-mini .nav-sidebar .nav-link,.sidebar-mini .nav-sidebar>.nav-header{white-space:nowrap;overflow:hidden}.sidebar-mini.sidebar-collapse .d-hidden-mini{display:none}.sidebar-mini.sidebar-collapse .content-wrapper,.sidebar-mini.sidebar-collapse .main-footer,.sidebar-mini.sidebar-collapse .main-header{margin-left:5.4rem!important}.sidebar-mini.sidebar-collapse .nav-sidebar .nav-header{display:none}.sidebar-mini.sidebar-collapse .nav-sidebar .nav-link p{width:0}.sidebar-mini.sidebar-collapse .brand-text,.sidebar-mini.sidebar-collapse .nav-sidebar .nav-link p,.sidebar-mini.sidebar-collapse .sidebar .user-panel>.info{margin-left:-10px;opacity:0;visibility:hidden}.sidebar-mini.sidebar-collapse .logo-xl{opacity:0;visibility:hidden}.sidebar-mini.sidebar-collapse .logo-xs{display:inline-block;opacity:1;visibility:visible}.sidebar-mini.sidebar-collapse .main-sidebar{overflow-x:hidden}.sidebar-mini.sidebar-collapse .main-sidebar,.sidebar-mini.sidebar-collapse .main-sidebar:before{margin-left:0;width:5.4rem}.sidebar-mini.sidebar-collapse .main-sidebar .user-panel .image{float:none}.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused,.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused .brand-link,.sidebar-mini.sidebar-collapse .main-sidebar:hover,.sidebar-mini.sidebar-collapse .main-sidebar:hover .brand-link{width:260px}.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused .user-panel,.sidebar-mini.sidebar-collapse .main-sidebar:hover .user-panel{text-align:left}.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused .user-panel .image,.sidebar-mini.sidebar-collapse .main-sidebar:hover .user-panel .image{float:left}.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused .brand-text,.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused .logo-xl,.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused .nav-sidebar .nav-link p,.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused .user-panel>.info,.sidebar-mini.sidebar-collapse .main-sidebar:hover .brand-text,.sidebar-mini.sidebar-collapse .main-sidebar:hover .logo-xl,.sidebar-mini.sidebar-collapse .main-sidebar:hover .nav-sidebar .nav-link p,.sidebar-mini.sidebar-collapse .main-sidebar:hover .user-panel>.info{display:inline-block;margin-left:0;opacity:1;visibility:visible}.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused .logo-xs,.sidebar-mini.sidebar-collapse .main-sidebar:hover .logo-xs{opacity:0;visibility:hidden}.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused .brand-image,.sidebar-mini.sidebar-collapse .main-sidebar:hover .brand-image{margin-right:.5rem}.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused .sidebar-form,.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused .user-panel>.info,.sidebar-mini.sidebar-collapse .main-sidebar:hover .sidebar-form,.sidebar-mini.sidebar-collapse .main-sidebar:hover .user-panel>.info{display:block!important;-webkit-transform:translateZ(0)}.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused .nav-sidebar>.nav-item>.nav-link>span,.sidebar-mini.sidebar-collapse .main-sidebar:hover .nav-sidebar>.nav-item>.nav-link>span{display:inline-block!important}.sidebar-mini.sidebar-collapse .visible-sidebar-mini{display:block!important}.sidebar-mini.sidebar-collapse.layout-fixed .main-sidebar:hover .brand-link{width:260px}.sidebar-mini.sidebar-collapse.layout-fixed .brand-link{width:5.4rem}}@media (max-width:991.98px){.sidebar-mini.sidebar-collapse .main-sidebar{box-shadow:none!important}}@media (min-width:768px){.sidebar-mini-md .nav-sidebar,.sidebar-mini-md .nav-sidebar .nav-link,.sidebar-mini-md .nav-sidebar>.nav-header{white-space:nowrap;overflow:hidden}.sidebar-mini-md.sidebar-collapse .d-hidden-mini{display:none}.sidebar-mini-md.sidebar-collapse .content-wrapper,.sidebar-mini-md.sidebar-collapse .main-footer,.sidebar-mini-md.sidebar-collapse .main-header{margin-left:5.4rem!important}.sidebar-mini-md.sidebar-collapse .nav-sidebar .nav-header{display:none}.sidebar-mini-md.sidebar-collapse .nav-sidebar .nav-link p{width:0}.sidebar-mini-md.sidebar-collapse .brand-text,.sidebar-mini-md.sidebar-collapse .nav-sidebar .nav-link p,.sidebar-mini-md.sidebar-collapse .sidebar .user-panel>.info{margin-left:-10px;opacity:0;visibility:hidden}.sidebar-mini-md.sidebar-collapse .logo-xl{opacity:0;visibility:hidden}.sidebar-mini-md.sidebar-collapse .logo-xs{display:inline-block;opacity:1;visibility:visible}.sidebar-mini-md.sidebar-collapse .main-sidebar{overflow-x:hidden}.sidebar-mini-md.sidebar-collapse .main-sidebar,.sidebar-mini-md.sidebar-collapse .main-sidebar:before{margin-left:0;width:5.4rem}.sidebar-mini-md.sidebar-collapse .main-sidebar .user-panel .image{float:none}.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused,.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused .brand-link,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover .brand-link{width:260px}.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused .user-panel,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover .user-panel{text-align:left}.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused .user-panel .image,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover .user-panel .image{float:left}.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused .brand-text,.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused .logo-xl,.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused .nav-sidebar .nav-link p,.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused .user-panel>.info,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover .brand-text,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover .logo-xl,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover .nav-sidebar .nav-link p,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover .user-panel>.info{display:inline-block;margin-left:0;opacity:1;visibility:visible}.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused .logo-xs,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover .logo-xs{opacity:0;visibility:hidden}.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused .brand-image,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover .brand-image{margin-right:.5rem}.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused .sidebar-form,.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused .user-panel>.info,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover .sidebar-form,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover .user-panel>.info{display:block!important;-webkit-transform:translateZ(0)}.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused .nav-sidebar>.nav-item>.nav-link>span,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover .nav-sidebar>.nav-item>.nav-link>span{display:inline-block!important}.sidebar-mini-md.sidebar-collapse .visible-sidebar-mini{display:block!important}.sidebar-mini-md.sidebar-collapse.layout-fixed .main-sidebar:hover .brand-link{width:260px}.sidebar-mini-md.sidebar-collapse.layout-fixed .brand-link{width:5.4rem}}.sidebar-collapse .main-sidebar.sidebar-focused .nav-header,.sidebar-collapse .main-sidebar:hover .nav-header{display:inline-block}.sidebar-collapse .main-sidebar.sidebar-focused .nav .menu-open .nav-treeview,.sidebar-collapse .main-sidebar:hover .nav .menu-open .nav-treeview{display:block!important}.sidebar-collapse .main-sidebar.sidebar-focused .nav-sidebar>.nav-item>.nav-link i,.sidebar-collapse .main-sidebar:hover .nav-sidebar>.nav-item>.nav-link i{font-size:1.2rem}.sidebar-collapse .main-sidebar .nav .nav-item .nav-link{padding:10px 21px!important}.sidebar-collapse .main-sidebar .nav .menu-open .nav-treeview{display:none!important}.sidebar-collapse .header-navbar.floating-nav{width:calc(100% - 70px - 5.4rem)}.sidebar-collapse .header-navbar.fixed-top{left:5.4rem}.sidebar-collapse .nav-sidebar>.nav-item>.nav-link i{font-size:1.3rem}.sidebar-collapse .sidebar-no-expand.main-sidebar.sidebar-focused,.sidebar-collapse .sidebar-no-expand.main-sidebar:hover{width:5.4rem}.sidebar-collapse .sidebar-no-expand.main-sidebar.sidebar-focused .nav-header,.sidebar-collapse .sidebar-no-expand.main-sidebar:hover .nav-header{display:none}.sidebar-collapse .sidebar-no-expand.main-sidebar.sidebar-focused .brand-link,.sidebar-collapse .sidebar-no-expand.main-sidebar:hover .brand-link{width:5.4rem!important}.sidebar-collapse .sidebar-no-expand.main-sidebar.sidebar-focused .user-panel .image,.sidebar-collapse .sidebar-no-expand.main-sidebar:hover .user-panel .image{float:none!important}.sidebar-collapse .sidebar-no-expand.main-sidebar.sidebar-focused .logo-xs,.sidebar-collapse .sidebar-no-expand.main-sidebar:hover .logo-xs{opacity:1;visibility:visible}.sidebar-collapse .sidebar-no-expand.main-sidebar.sidebar-focused .logo-xl,.sidebar-collapse .sidebar-no-expand.main-sidebar:hover .logo-xl{opacity:0;visibility:hidden}.sidebar-collapse .sidebar-no-expand.main-sidebar.sidebar-focused .nav-sidebar.nav-child-indent .nav-treeview,.sidebar-collapse .sidebar-no-expand.main-sidebar:hover .nav-sidebar.nav-child-indent .nav-treeview{padding-left:0}.sidebar-collapse .sidebar-no-expand.main-sidebar.sidebar-focused .brand-text,.sidebar-collapse .sidebar-no-expand.main-sidebar.sidebar-focused .nav-sidebar .nav-link p,.sidebar-collapse .sidebar-no-expand.main-sidebar.sidebar-focused .user-panel>.info,.sidebar-collapse .sidebar-no-expand.main-sidebar:hover .brand-text,.sidebar-collapse .sidebar-no-expand.main-sidebar:hover .nav-sidebar .nav-link p,.sidebar-collapse .sidebar-no-expand.main-sidebar:hover .user-panel>.info{margin-left:-10px;opacity:0;visibility:hidden;width:0}.sidebar-collapse .sidebar-no-expand.main-sidebar.sidebar-focused .nav-sidebar>.nav-item .nav-icon,.sidebar-collapse .sidebar-no-expand.main-sidebar:hover .nav-sidebar>.nav-item .nav-icon{margin-right:0}.nav-sidebar{position:relative}.nav-sidebar:hover{overflow:visible}.nav-sidebar>.nav-header,.sidebar-form{overflow:hidden;text-overflow:clip}.nav-sidebar .nav-item>.nav-link{position:relative}.nav-sidebar .nav-item>.nav-link>.float-right{margin-top:-7px;position:absolute;right:10px;top:50%}@media (max-width:767.98px){.sidebar-mini-md.sidebar-collapse .main-sidebar{box-shadow:none!important}.sidebar-collapse .header-navbar.fixed-top{left:0}}@media (max-width:1201px){.sidebar-collapse .header-navbar.fixed-top{left:0}}.main-sidebar .brand-text,.main-sidebar .logo-xl,.main-sidebar .logo-xs,.sidebar .nav-link p,.sidebar .user-panel .info{transition:margin-left .3s linear,opacity .3s ease,visibility .3s ease}@media (prefers-reduced-motion:reduce){.main-sidebar .brand-text,.main-sidebar .logo-xl,.main-sidebar .logo-xs,.sidebar .nav-link p,.sidebar .user-panel .info{transition:none}}html.control-sidebar-animate{overflow-x:hidden}.control-sidebar{bottom:3.45rem;position:absolute;top:calc(3.164rem + 1px);z-index:1031}.control-sidebar,.control-sidebar:before{bottom:3.45rem;display:none;right:-260px;width:260px;transition:right .3s ease-in-out,display .3s ease-in-out}@media (prefers-reduced-motion:reduce){.control-sidebar,.control-sidebar:before{transition:none}}.control-sidebar:before{content:"";display:block;position:fixed;top:0;z-index:-1}body.text-sm .control-sidebar{bottom:3.074rem;top:calc(2.62475rem + 1px)}.main-header.text-sm~.control-sidebar{top:calc(2.62475rem + 1px)}.main-footer.text-sm~.control-sidebar{bottom:3.074rem}.control-sidebar-push-slide .content-wrapper,.control-sidebar-push-slide .main-footer{transition:margin-right .3s ease-in-out}@media (prefers-reduced-motion:reduce){.control-sidebar-push-slide .content-wrapper,.control-sidebar-push-slide .main-footer{transition:none}}.control-sidebar-open .control-sidebar{display:block}.control-sidebar-open .control-sidebar,.control-sidebar-open .control-sidebar:before{right:0}.control-sidebar-open.control-sidebar-push-slide .content-wrapper,.control-sidebar-open.control-sidebar-push-slide .main-footer,.control-sidebar-open.control-sidebar-push .content-wrapper,.control-sidebar-open.control-sidebar-push .main-footer{margin-right:260px}.control-sidebar-slide-open .control-sidebar{display:block}.control-sidebar-slide-open .control-sidebar,.control-sidebar-slide-open .control-sidebar:before{right:0;transition:right .3s ease-in-out,display .3s ease-in-out}@media (prefers-reduced-motion:reduce){.control-sidebar-slide-open .control-sidebar,.control-sidebar-slide-open .control-sidebar:before{transition:none}}.control-sidebar-slide-open.control-sidebar-push-slide .content-wrapper,.control-sidebar-slide-open.control-sidebar-push-slide .main-footer,.control-sidebar-slide-open.control-sidebar-push .content-wrapper,.control-sidebar-slide-open.control-sidebar-push .main-footer{margin-right:260px}.control-sidebar-dark,.control-sidebar-dark .nav-link,.control-sidebar-dark a{color:hsla(0,0%,100%,.95)}.control-sidebar-dark{background:#3e4958}.control-sidebar-dark a:hover,.control-sidebar-dark h1,.control-sidebar-dark h2,.control-sidebar-dark h3,.control-sidebar-dark h4,.control-sidebar-dark h5,.control-sidebar-dark h6,.control-sidebar-dark label{color:hsla(0,0%,100%,.95)}.control-sidebar-dark .nav-tabs{background-color:transparent;border-bottom:0;margin-bottom:5px}.control-sidebar-dark .nav-tabs .nav-item{margin:0}.control-sidebar-dark .nav-tabs .nav-link{border-radius:0;padding:10px 20px;position:relative;text-align:center}.control-sidebar-dark .nav-tabs .nav-link,.control-sidebar-dark .nav-tabs .nav-link.active,.control-sidebar-dark .nav-tabs .nav-link:active,.control-sidebar-dark .nav-tabs .nav-link:focus,.control-sidebar-dark .nav-tabs .nav-link:hover{border:0}.control-sidebar-dark .nav-tabs .nav-link.active,.control-sidebar-dark .nav-tabs .nav-link:active,.control-sidebar-dark .nav-tabs .nav-link:focus,.control-sidebar-dark .nav-tabs .nav-link:hover{border-bottom-color:transparent;border-left-color:transparent;border-top-color:transparent;color:hsla(0,0%,100%,.95)}.control-sidebar-dark .nav-tabs .nav-link.active{background-color:#3e4958}.control-sidebar-dark .tab-pane{padding:10px 15px}.control-sidebar-light{color:#6f6f6f;background:#fff;border-left:1px solid #dae1e7}.text-sm .dropdown-menu{font-size:1rem!important}.text-sm .dropdown-toggle:after{vertical-align:.2rem}.dropdown-item-title{font-size:1rem;margin:0}.dropdown-icon:after{margin-left:0}.dropdown-menu-lg{max-width:300px;min-width:280px;padding:0}.dropdown-menu-lg .dropdown-divider{margin:0}.dropdown-menu-lg .dropdown-item{padding:.5rem 1.5rem}.dropdown-menu-lg p{margin:0;white-space:normal}.dropdown-submenu{position:relative}.dropdown-submenu>a:after{border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid;float:right;margin-left:.5rem;margin-top:.5rem}.dropdown-submenu>.dropdown-menu{left:100%;margin-left:0;margin-top:0;top:0}.dropdown-hover.dropdown-submenu:hover>.dropdown-menu,.dropdown-hover .dropdown-submenu:hover>.dropdown-menu,.dropdown-hover.nav-item.dropdown:hover>.dropdown-menu,.dropdown-hover:hover>.dropdown-menu{display:block}.dropdown-menu-xl{max-width:420px;min-width:360px;padding:0}.dropdown-menu-xl .dropdown-divider{margin:0}.dropdown-menu-xl .dropdown-item{padding:.5rem 1.5rem}.dropdown-menu-xl p{margin:0;white-space:normal}.dropdown-footer,.dropdown-header{display:block;font-size:1rem;padding:.5rem 1.5rem;text-align:center}.open:not(.dropup)>.animated-dropdown-menu{-webkit-animation:flipInX .7s both;animation:flipInX .7s both;-webkit-backface-visibility:visible!important;backface-visibility:visible!important}@-webkit-keyframes flipInX{0%{transform:perspective(400px) rotateX(90deg);transition-timing-function:ease-in;opacity:0}40%{transform:perspective(400px) rotateX(-20deg);transition-timing-function:ease-in}60%{transform:perspective(400px) rotateX(10deg);opacity:1}80%{transform:perspective(400px) rotateX(-5deg)}to{transform:perspective(400px)}}@keyframes flipInX{0%{transform:perspective(400px) rotateX(90deg);transition-timing-function:ease-in;opacity:0}40%{transform:perspective(400px) rotateX(-20deg);transition-timing-function:ease-in}60%{transform:perspective(400px) rotateX(10deg);opacity:1}80%{transform:perspective(400px) rotateX(-5deg)}to{transform:perspective(400px)}}.navbar-custom-menu>.navbar-nav>li{position:relative}.navbar-custom-menu>.navbar-nav>li>.dropdown-menu{position:absolute;right:0;left:auto}@media (max-width:767.98px){.navbar-custom-menu>.navbar-nav{float:right}.navbar-custom-menu>.navbar-nav>li{position:static}.navbar-custom-menu>.navbar-nav>li>.dropdown-menu{position:absolute;right:5%;left:auto;border:1px solid #ddd;background:#fff}}.navbar-nav>.user-menu>.nav-link:after{content:none}.navbar-nav>.user-menu>.dropdown-menu{border-top-left-radius:0;border-top-right-radius:0;padding:0;width:280px}.navbar-nav>.user-menu>.dropdown-menu,.navbar-nav>.user-menu>.dropdown-menu>.user-body{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.navbar-nav>.user-menu>.dropdown-menu>li.user-header{height:175px;padding:10px;text-align:center}.navbar-nav>.user-menu>.dropdown-menu>li.user-header>img{z-index:5;height:90px;width:90px;border:3px solid hsla(0,0%,100%,.2)}.navbar-nav>.user-menu>.dropdown-menu>li.user-header>p{z-index:5;font-size:17px;margin-top:10px}.navbar-nav>.user-menu>.dropdown-menu>li.user-header>p>small{display:block;font-size:12px}.navbar-nav>.user-menu>.dropdown-menu>.user-body{border-bottom:1px solid #4e5154;border-top:1px solid #dae1e7;padding:15px}.navbar-nav>.user-menu>.dropdown-menu>.user-body:after{display:block;clear:both;content:""}@media (min-width:576px){.navbar-nav>.user-menu>.dropdown-menu>.user-body a{background:#fff!important;color:#4e5154!important}}.navbar-nav>.user-menu>.dropdown-menu>.user-footer{background-color:#babfc7;padding:10px}.navbar-nav>.user-menu>.dropdown-menu>.user-footer:after{display:block;clear:both;content:""}.navbar-nav>.user-menu>.dropdown-menu>.user-footer .btn-default{color:#b8c2cc}@media (min-width:576px){.navbar-nav>.user-menu>.dropdown-menu>.user-footer .btn-default:hover{background-color:#babfc7}}.navbar-nav>.user-menu .user-image{border-radius:50%;float:left;height:2.5666666667rem;margin-right:10px;margin-top:-2px;width:2.5666666667rem}@media (min-width:576px){.navbar-nav>.user-menu .user-image{float:none;line-height:10px;margin-right:.4rem;margin-top:-8px}}.nav-pills .nav-link{color:#b8c2cc}.nav-pills .nav-link:not(.active):hover{color:#6d8be6}.nav-pills .nav-item.dropdown.show .nav-link:hover{color:#fff}.nav-tabs.flex-column{border-bottom:0;border-right:1px solid #dae1e7}.nav-tabs.flex-column .nav-link{border-bottom-left-radius:.5rem;border-top-right-radius:0;margin-right:-1px}.nav-tabs.flex-column .nav-link:focus,.nav-tabs.flex-column .nav-link:hover{border-color:#ededed transparent #ededed #ededed}.nav-tabs.flex-column .nav-item.show .nav-link,.nav-tabs.flex-column .nav-link.active{border-color:#dae1e7 transparent #dae1e7 #dae1e7}.nav-tabs.flex-column.nav-tabs-right{border-left:1px solid #dae1e7;border-right:0}.nav-tabs.flex-column.nav-tabs-right .nav-link{border-bottom-left-radius:0;border-bottom-right-radius:.5rem;border-top-left-radius:0;border-top-right-radius:.5rem;margin-left:-1px}.nav-tabs.flex-column.nav-tabs-right .nav-link:focus,.nav-tabs.flex-column.nav-tabs-right .nav-link:hover{border-color:#ededed #ededed #ededed transparent}.nav-tabs.flex-column.nav-tabs-right .nav-item.show .nav-link,.nav-tabs.flex-column.nav-tabs-right .nav-link.active{border-color:#dae1e7 #dae1e7 #dae1e7 transparent}.navbar-no-expand{flex-direction:row}.navbar-no-expand .nav-link{padding-left:.5rem;padding-right:.5rem}.navbar-no-expand .dropdown-menu{position:absolute}.navbar-light{background-color:#f7f7f9}.navbar-dark{background-color:#22292f}.navbar-primary{background-color:#6d8be6}.navbar-secondary{background-color:#b8c2cc}.navbar-success{background-color:#21b978}.navbar-info{background-color:#4277cf}.navbar-warning{background-color:#dda451}.navbar-danger{background-color:#ea5455}.navbar-lightblue{background-color:#3c8dbc}.navbar-navy{background-color:#001f3f}.navbar-olive{background-color:#3d9970}.navbar-lime{background-color:#01ff70}.navbar-fuchsia{background-color:#f012be}.navbar-maroon{background-color:#d81b60}.navbar-blue{background-color:#3085d6}.navbar-indigo{background-color:#5c6bc6}.navbar-purple{background-color:#6f42c1}.navbar-pink{background-color:#ff8acc}.navbar-red{background-color:#ea5455}.navbar-orange{background-color:#dda451}.navbar-yellow{background-color:#edc30e}.navbar-green{background-color:#21b978}.navbar-teal{background-color:#20c997}.navbar-cyan{background-color:#7367f0}.navbar-white{background-color:#fff}.navbar-gray{background-color:#b8c2cc}.navbar-gray-dark{background-color:#1e1e1e}.form-group.has-icon{position:relative}.form-group.has-icon .form-control{padding-right:35px}.form-group.has-icon .form-icon{background-color:transparent;border:0;cursor:pointer;font-size:1rem;padding:.75rem 2rem;position:absolute;right:3px;top:0}.btn-group-vertical .btn.btn-flat:first-of-type,.btn-group-vertical .btn.btn-flat:last-of-type{border-radius:0}.form-control-feedback.fa,.form-control-feedback.fab,.form-control-feedback.far,.form-control-feedback.fas,.form-control-feedback.glyphicon,.form-control-feedback.ion{line-height:34px}.form-group-lg .form-control+.form-control-feedback.fa,.form-group-lg .form-control+.form-control-feedback.fab,.form-group-lg .form-control+.form-control-feedback.far,.form-group-lg .form-control+.form-control-feedback.fas,.form-group-lg .form-control+.form-control-feedback.glyphicon,.form-group-lg .form-control+.form-control-feedback.ion,.input-group-lg+.form-control-feedback.fa,.input-group-lg+.form-control-feedback.fab,.input-group-lg+.form-control-feedback.far,.input-group-lg+.form-control-feedback.fas,.input-group-lg+.form-control-feedback.glyphicon,.input-group-lg+.form-control-feedback.ion,.input-lg+.form-control-feedback.fa,.input-lg+.form-control-feedback.fab,.input-lg+.form-control-feedback.far,.input-lg+.form-control-feedback.fas,.input-lg+.form-control-feedback.glyphicon,.input-lg+.form-control-feedback.ion{line-height:calc(1.25em + 2rem + 2px)}.form-group-sm .form-control+.form-control-feedback.fa,.form-group-sm .form-control+.form-control-feedback.fab,.form-group-sm .form-control+.form-control-feedback.far,.form-group-sm .form-control+.form-control-feedback.fas,.form-group-sm .form-control+.form-control-feedback.glyphicon,.form-group-sm .form-control+.form-control-feedback.ion,.input-group-sm+.form-control-feedback.fa,.input-group-sm+.form-control-feedback.fab,.input-group-sm+.form-control-feedback.far,.input-group-sm+.form-control-feedback.fas,.input-group-sm+.form-control-feedback.glyphicon,.input-group-sm+.form-control-feedback.ion,.input-sm+.form-control-feedback.fa,.input-sm+.form-control-feedback.fab,.input-sm+.form-control-feedback.far,.input-sm+.form-control-feedback.fas,.input-sm+.form-control-feedback.glyphicon,.input-sm+.form-control-feedback.ion{line-height:2rem}.warning-feedback{font-size:smaller;color:#dda451;display:none;margin-top:.25rem;width:100%}.warning-tooltip{border-radius:.5rem;font-size:1rem;background-color:rgba(221,164,81,.9);color:#2a2e30;display:none;line-height:1.45;margin-top:.1rem;max-width:100%;padding:.25rem .5rem;position:absolute;top:100%;z-index:5}.form-control.is-warning{border-color:#dda451}.form-control.is-warning:focus{border-color:#dda451;box-shadow:0 0 0 .2rem rgba(221,164,81,.25)}.form-control.is-warning~.warning-feedback,.form-control.is-warning~.warning-tooltip{display:block}textarea.form-control.is-warning{padding-right:calc(1.25em + 1.4rem);background-position:top calc(.3125em + .35rem) right calc(.3125em + .35rem)}.custom-select.is-warning{border-color:#dda451}.custom-select.is-warning:focus{border-color:#dda451;box-shadow:0 0 0 .2rem rgba(221,164,81,.25)}.custom-select.is-warning~.warning-feedback,.custom-select.is-warning~.warning-tooltip,.form-control-file.is-warning~.warning-feedback,.form-control-file.is-warning~.warning-tooltip{display:block}.form-check-input.is-warning~.form-check-label{color:#dda451}.form-check-input.is-warning~.warning-feedback,.form-check-input.is-warning~.warning-tooltip{display:block}.custom-control-input.is-warning~.custom-control-label{color:#dda451}.custom-control-input.is-warning~.custom-control-label:before{border-color:#dda451}.custom-control-input.is-warning~.warning-feedback,.custom-control-input.is-warning~.warning-tooltip{display:block}.custom-control-input.is-warning:checked~.custom-control-label:before{background-color:#e5ba7c;border-color:#e5ba7c}.custom-control-input.is-warning:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem rgba(221,164,81,.25)}.custom-control-input.is-warning:focus:not(:checked)~.custom-control-label:before,.custom-file-input.is-warning~.custom-file-label{border-color:#dda451}.custom-file-input.is-warning~.warning-feedback,.custom-file-input.is-warning~.warning-tooltip{display:block}.custom-file-input.is-warning:focus~.custom-file-label{border-color:#dda451;box-shadow:0 0 0 .2rem rgba(221,164,81,.25)}.custom-switch.custom-switch-off-primary .custom-control-input~.custom-control-label:before{background:#6d8be6;border-color:#234cca}.custom-switch.custom-switch-off-primary .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(109,139,230,.25)}.custom-switch.custom-switch-off-primary .custom-control-input~.custom-control-label:after{background:#1f44b5}.custom-switch.custom-switch-on-primary .custom-control-input:checked~.custom-control-label:before{background:#6d8be6;border-color:#234cca}.custom-switch.custom-switch-on-primary .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(109,139,230,.25)}.custom-switch.custom-switch-on-primary .custom-control-input:checked~.custom-control-label:after{background:#f0f3fc}.custom-switch.custom-switch-off-secondary .custom-control-input~.custom-control-label:before{background:#b8c2cc;border-color:#7d8fa1}.custom-switch.custom-switch-off-secondary .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(184,194,204,.25)}.custom-switch.custom-switch-off-secondary .custom-control-input~.custom-control-label:after{background:#6e8297}.custom-switch.custom-switch-on-secondary .custom-control-input:checked~.custom-control-label:before{background:#b8c2cc;border-color:#7d8fa1}.custom-switch.custom-switch-on-secondary .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(184,194,204,.25)}.custom-switch.custom-switch-on-secondary .custom-control-input:checked~.custom-control-label:after{background:#fff}.custom-switch.custom-switch-off-success .custom-control-input~.custom-control-label:before{background:#21b978;border-color:#126240}.custom-switch.custom-switch-off-success .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(33,185,120,.25)}.custom-switch.custom-switch-off-success .custom-control-input~.custom-control-label:after{background:#0e4d32}.custom-switch.custom-switch-on-success .custom-control-input:checked~.custom-control-label:before{background:#21b978;border-color:#126240}.custom-switch.custom-switch-on-success .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(33,185,120,.25)}.custom-switch.custom-switch-on-success .custom-control-input:checked~.custom-control-label:after{background:#89eac1}.custom-switch.custom-switch-off-info .custom-control-input~.custom-control-label:before{background:#4277cf;border-color:#234988}.custom-switch.custom-switch-off-info .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(66,119,207,.25)}.custom-switch.custom-switch-off-info .custom-control-input~.custom-control-label:after{background:#1d3e74}.custom-switch.custom-switch-on-info .custom-control-input:checked~.custom-control-label:before{background:#4277cf;border-color:#234988}.custom-switch.custom-switch-on-info .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(66,119,207,.25)}.custom-switch.custom-switch-on-info .custom-control-input:checked~.custom-control-label:after{background:#bccfee}.custom-switch.custom-switch-off-warning .custom-control-input~.custom-control-label:before{background:#dda451;border-color:#a77121}.custom-switch.custom-switch-off-warning .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(221,164,81,.25)}.custom-switch.custom-switch-off-warning .custom-control-input~.custom-control-label:after{background:#92621d}.custom-switch.custom-switch-on-warning .custom-control-input:checked~.custom-control-label:before{background:#dda451;border-color:#a77121}.custom-switch.custom-switch-on-warning .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(221,164,81,.25)}.custom-switch.custom-switch-on-warning .custom-control-input:checked~.custom-control-label:after{background:#f6e7d1}.custom-switch.custom-switch-off-danger .custom-control-input~.custom-control-label:before{background:#ea5455;border-color:#c01819}.custom-switch.custom-switch-off-danger .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(234,84,85,.25)}.custom-switch.custom-switch-off-danger .custom-control-input~.custom-control-label:after{background:#aa1516}.custom-switch.custom-switch-on-danger .custom-control-input:checked~.custom-control-label:before{background:#ea5455;border-color:#c01819}.custom-switch.custom-switch-on-danger .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(234,84,85,.25)}.custom-switch.custom-switch-on-danger .custom-control-input:checked~.custom-control-label:after{background:#fbdcdc}.custom-switch.custom-switch-off-light .custom-control-input~.custom-control-label:before{background:#f7f7f9;border-color:#bdbdcd}.custom-switch.custom-switch-off-light .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(247,247,249,.25)}.custom-switch.custom-switch-off-light .custom-control-input~.custom-control-label:after{background:#aeaec2}.custom-switch.custom-switch-on-light .custom-control-input:checked~.custom-control-label:before{background:#f7f7f9;border-color:#bdbdcd}.custom-switch.custom-switch-on-light .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(247,247,249,.25)}.custom-switch.custom-switch-on-light .custom-control-input:checked~.custom-control-label:after{background:#fff}.custom-switch.custom-switch-off-dark .custom-control-input~.custom-control-label:before{background:#22292f;border-color:#000}.custom-switch.custom-switch-off-dark .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(34,41,47,.25)}.custom-switch.custom-switch-off-dark .custom-control-input~.custom-control-label:after{background:#000}.custom-switch.custom-switch-on-dark .custom-control-input:checked~.custom-control-label:before{background:#22292f;border-color:#000}.custom-switch.custom-switch-on-dark .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(34,41,47,.25)}.custom-switch.custom-switch-on-dark .custom-control-input:checked~.custom-control-label:after{background:#627688}.custom-switch.custom-switch-off-lightblue .custom-control-input~.custom-control-label:before{background:#3c8dbc;border-color:#23536f}.custom-switch.custom-switch-off-lightblue .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(60,141,188,.25)}.custom-switch.custom-switch-off-lightblue .custom-control-input~.custom-control-label:after{background:#1d455b}.custom-switch.custom-switch-on-lightblue .custom-control-input:checked~.custom-control-label:before{background:#3c8dbc;border-color:#23536f}.custom-switch.custom-switch-on-lightblue .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(60,141,188,.25)}.custom-switch.custom-switch-on-lightblue .custom-control-input:checked~.custom-control-label:after{background:#acd0e5}.custom-switch.custom-switch-off-navy .custom-control-input~.custom-control-label:before{background:#001f3f;border-color:#000}.custom-switch.custom-switch-off-navy .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(0,31,63,.25)}.custom-switch.custom-switch-off-navy .custom-control-input~.custom-control-label:after{background:#000}.custom-switch.custom-switch-on-navy .custom-control-input:checked~.custom-control-label:before{background:#001f3f;border-color:#000}.custom-switch.custom-switch-on-navy .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(0,31,63,.25)}.custom-switch.custom-switch-on-navy .custom-control-input:checked~.custom-control-label:after{background:#006ad8}.custom-switch.custom-switch-off-olive .custom-control-input~.custom-control-label:before{background:#3d9970;border-color:#20503b}.custom-switch.custom-switch-off-olive .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(61,153,112,.25)}.custom-switch.custom-switch-off-olive .custom-control-input~.custom-control-label:after{background:#193e2d}.custom-switch.custom-switch-on-olive .custom-control-input:checked~.custom-control-label:before{background:#3d9970;border-color:#20503b}.custom-switch.custom-switch-on-olive .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(61,153,112,.25)}.custom-switch.custom-switch-on-olive .custom-control-input:checked~.custom-control-label:after{background:#99d6bb}.custom-switch.custom-switch-off-lime .custom-control-input~.custom-control-label:before{background:#01ff70;border-color:#009a43}.custom-switch.custom-switch-off-lime .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(1,255,112,.25)}.custom-switch.custom-switch-off-lime .custom-control-input~.custom-control-label:after{background:#008138}.custom-switch.custom-switch-on-lime .custom-control-input:checked~.custom-control-label:before{background:#01ff70;border-color:#009a43}.custom-switch.custom-switch-on-lime .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(1,255,112,.25)}.custom-switch.custom-switch-on-lime .custom-control-input:checked~.custom-control-label:after{background:#9affc6}.custom-switch.custom-switch-off-fuchsia .custom-control-input~.custom-control-label:before{background:#f012be;border-color:#930974}.custom-switch.custom-switch-off-fuchsia .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(240,18,190,.25)}.custom-switch.custom-switch-off-fuchsia .custom-control-input~.custom-control-label:after{background:#7b0861}.custom-switch.custom-switch-on-fuchsia .custom-control-input:checked~.custom-control-label:before{background:#f012be;border-color:#930974}.custom-switch.custom-switch-on-fuchsia .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(240,18,190,.25)}.custom-switch.custom-switch-on-fuchsia .custom-control-input:checked~.custom-control-label:after{background:#f9a2e5}.custom-switch.custom-switch-off-maroon .custom-control-input~.custom-control-label:before{background:#d81b60;border-color:#7d1038}.custom-switch.custom-switch-off-maroon .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(216,27,96,.25)}.custom-switch.custom-switch-off-maroon .custom-control-input~.custom-control-label:after{background:#670d2e}.custom-switch.custom-switch-on-maroon .custom-control-input:checked~.custom-control-label:before{background:#d81b60;border-color:#7d1038}.custom-switch.custom-switch-on-maroon .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(216,27,96,.25)}.custom-switch.custom-switch-on-maroon .custom-control-input:checked~.custom-control-label:after{background:#f29aba}.custom-switch.custom-switch-off-blue .custom-control-input~.custom-control-label:before{background:#3085d6;border-color:#1a5186}.custom-switch.custom-switch-off-blue .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(48,133,214,.25)}.custom-switch.custom-switch-off-blue .custom-control-input~.custom-control-label:after{background:#164470}.custom-switch.custom-switch-on-blue .custom-control-input:checked~.custom-control-label:before{background:#3085d6;border-color:#1a5186}.custom-switch.custom-switch-on-blue .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(48,133,214,.25)}.custom-switch.custom-switch-on-blue .custom-control-input:checked~.custom-control-label:after{background:#b0d0ef}.custom-switch.custom-switch-off-indigo .custom-control-input~.custom-control-label:before{background:#5c6bc6;border-color:#313e8b}.custom-switch.custom-switch-off-indigo .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(92,107,198,.25)}.custom-switch.custom-switch-off-indigo .custom-control-input~.custom-control-label:after{background:#2a3578}.custom-switch.custom-switch-on-indigo .custom-control-input:checked~.custom-control-label:before{background:#5c6bc6;border-color:#313e8b}.custom-switch.custom-switch-on-indigo .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(92,107,198,.25)}.custom-switch.custom-switch-on-indigo .custom-control-input:checked~.custom-control-label:after{background:#cdd2ee}.custom-switch.custom-switch-off-purple .custom-control-input~.custom-control-label:before{background:#6f42c1;border-color:#432776}.custom-switch.custom-switch-off-purple .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(111,66,193,.25)}.custom-switch.custom-switch-off-purple .custom-control-input~.custom-control-label:after{background:#382063}.custom-switch.custom-switch-on-purple .custom-control-input:checked~.custom-control-label:before{background:#6f42c1;border-color:#432776}.custom-switch.custom-switch-on-purple .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(111,66,193,.25)}.custom-switch.custom-switch-on-purple .custom-control-input:checked~.custom-control-label:after{background:#c7b5e7}.custom-switch.custom-switch-off-pink .custom-control-input~.custom-control-label:before{background:#ff8acc;border-color:#ff24a0}.custom-switch.custom-switch-off-pink .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(255,138,204,.25)}.custom-switch.custom-switch-off-pink .custom-control-input~.custom-control-label:after{background:#ff0b94}.custom-switch.custom-switch-on-pink .custom-control-input:checked~.custom-control-label:before{background:#ff8acc;border-color:#ff24a0}.custom-switch.custom-switch-on-pink .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(255,138,204,.25)}.custom-switch.custom-switch-on-pink .custom-control-input:checked~.custom-control-label:after{background:#fff}.custom-switch.custom-switch-off-red .custom-control-input~.custom-control-label:before{background:#ea5455;border-color:#c01819}.custom-switch.custom-switch-off-red .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(234,84,85,.25)}.custom-switch.custom-switch-off-red .custom-control-input~.custom-control-label:after{background:#aa1516}.custom-switch.custom-switch-on-red .custom-control-input:checked~.custom-control-label:before{background:#ea5455;border-color:#c01819}.custom-switch.custom-switch-on-red .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(234,84,85,.25)}.custom-switch.custom-switch-on-red .custom-control-input:checked~.custom-control-label:after{background:#fbdcdc}.custom-switch.custom-switch-off-orange .custom-control-input~.custom-control-label:before{background:#dda451;border-color:#a77121}.custom-switch.custom-switch-off-orange .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(221,164,81,.25)}.custom-switch.custom-switch-off-orange .custom-control-input~.custom-control-label:after{background:#92621d}.custom-switch.custom-switch-on-orange .custom-control-input:checked~.custom-control-label:before{background:#dda451;border-color:#a77121}.custom-switch.custom-switch-on-orange .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(221,164,81,.25)}.custom-switch.custom-switch-on-orange .custom-control-input:checked~.custom-control-label:after{background:#f6e7d1}.custom-switch.custom-switch-off-yellow .custom-control-input~.custom-control-label:before{background:#edc30e;border-color:#8d7408}.custom-switch.custom-switch-off-yellow .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(237,195,14,.25)}.custom-switch.custom-switch-off-yellow .custom-control-input~.custom-control-label:after{background:#756007}.custom-switch.custom-switch-on-yellow .custom-control-input:checked~.custom-control-label:before{background:#edc30e;border-color:#8d7408}.custom-switch.custom-switch-on-yellow .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(237,195,14,.25)}.custom-switch.custom-switch-on-yellow .custom-control-input:checked~.custom-control-label:after{background:#f9e79b}.custom-switch.custom-switch-off-green .custom-control-input~.custom-control-label:before{background:#21b978;border-color:#126240}.custom-switch.custom-switch-off-green .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(33,185,120,.25)}.custom-switch.custom-switch-off-green .custom-control-input~.custom-control-label:after{background:#0e4d32}.custom-switch.custom-switch-on-green .custom-control-input:checked~.custom-control-label:before{background:#21b978;border-color:#126240}.custom-switch.custom-switch-on-green .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(33,185,120,.25)}.custom-switch.custom-switch-on-green .custom-control-input:checked~.custom-control-label:after{background:#89eac1}.custom-switch.custom-switch-off-teal .custom-control-input~.custom-control-label:before{background:#20c997;border-color:#127155}.custom-switch.custom-switch-off-teal .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(32,201,151,.25)}.custom-switch.custom-switch-off-teal .custom-control-input~.custom-control-label:after{background:#0e5b44}.custom-switch.custom-switch-on-teal .custom-control-input:checked~.custom-control-label:before{background:#20c997;border-color:#127155}.custom-switch.custom-switch-on-teal .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(32,201,151,.25)}.custom-switch.custom-switch-on-teal .custom-control-input:checked~.custom-control-label:after{background:#94eed3}.custom-switch.custom-switch-off-cyan .custom-control-input~.custom-control-label:before{background:#7367f0;border-color:#2716db}.custom-switch.custom-switch-off-cyan .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(115,103,240,.25)}.custom-switch.custom-switch-off-cyan .custom-control-input~.custom-control-label:after{background:#2313c4}.custom-switch.custom-switch-on-cyan .custom-control-input:checked~.custom-control-label:before{background:#7367f0;border-color:#2716db}.custom-switch.custom-switch-on-cyan .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(115,103,240,.25)}.custom-switch.custom-switch-on-cyan .custom-control-input:checked~.custom-control-label:after{background:#f3f2fe}.custom-switch.custom-switch-off-white .custom-control-input~.custom-control-label:before{background:#fff;border-color:#ccc}.custom-switch.custom-switch-off-white .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px hsla(0,0%,100%,.25)}.custom-switch.custom-switch-off-white .custom-control-input~.custom-control-label:after{background:#bfbfbf}.custom-switch.custom-switch-on-white .custom-control-input:checked~.custom-control-label:before{background:#fff;border-color:#ccc}.custom-switch.custom-switch-on-white .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px hsla(0,0%,100%,.25)}.custom-switch.custom-switch-on-white .custom-control-input:checked~.custom-control-label:after{background:#fff}.custom-switch.custom-switch-off-gray .custom-control-input~.custom-control-label:before{background:#b8c2cc;border-color:#7d8fa1}.custom-switch.custom-switch-off-gray .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(184,194,204,.25)}.custom-switch.custom-switch-off-gray .custom-control-input~.custom-control-label:after{background:#6e8297}.custom-switch.custom-switch-on-gray .custom-control-input:checked~.custom-control-label:before{background:#b8c2cc;border-color:#7d8fa1}.custom-switch.custom-switch-on-gray .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(184,194,204,.25)}.custom-switch.custom-switch-on-gray .custom-control-input:checked~.custom-control-label:after{background:#fff}.custom-switch.custom-switch-off-gray-dark .custom-control-input~.custom-control-label:before{background:#1e1e1e;border-color:#000}.custom-switch.custom-switch-off-gray-dark .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(30,30,30,.25)}.custom-switch.custom-switch-off-gray-dark .custom-control-input~.custom-control-label:after{background:#000}.custom-switch.custom-switch-on-gray-dark .custom-control-input:checked~.custom-control-label:before{background:#1e1e1e;border-color:#000}.custom-switch.custom-switch-on-gray-dark .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(30,30,30,.25)}.custom-switch.custom-switch-on-gray-dark .custom-control-input:checked~.custom-control-label:after{background:#6b6b6b}.custom-range.custom-range-primary:focus{outline:none}.custom-range.custom-range-primary:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(109,139,230,.25)}.custom-range.custom-range-primary:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(109,139,230,.25)}.custom-range.custom-range-primary:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(109,139,230,.25)}.custom-range.custom-range-primary::-webkit-slider-thumb{background-color:#6d8be6}.custom-range.custom-range-primary::-webkit-slider-thumb:active{background-color:#fff}.custom-range.custom-range-primary::-moz-range-thumb{background-color:#6d8be6}.custom-range.custom-range-primary::-moz-range-thumb:active{background-color:#fff}.custom-range.custom-range-primary::-ms-thumb{background-color:#6d8be6}.custom-range.custom-range-primary::-ms-thumb:active{background-color:#fff}.custom-range.custom-range-secondary:focus{outline:none}.custom-range.custom-range-secondary:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(184,194,204,.25)}.custom-range.custom-range-secondary:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(184,194,204,.25)}.custom-range.custom-range-secondary:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(184,194,204,.25)}.custom-range.custom-range-secondary::-webkit-slider-thumb{background-color:#b8c2cc}.custom-range.custom-range-secondary::-webkit-slider-thumb:active{background-color:#fff}.custom-range.custom-range-secondary::-moz-range-thumb{background-color:#b8c2cc}.custom-range.custom-range-secondary::-moz-range-thumb:active{background-color:#fff}.custom-range.custom-range-secondary::-ms-thumb{background-color:#b8c2cc}.custom-range.custom-range-secondary::-ms-thumb:active{background-color:#fff}.custom-range.custom-range-success:focus{outline:none}.custom-range.custom-range-success:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(33,185,120,.25)}.custom-range.custom-range-success:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(33,185,120,.25)}.custom-range.custom-range-success:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(33,185,120,.25)}.custom-range.custom-range-success::-webkit-slider-thumb{background-color:#21b978}.custom-range.custom-range-success::-webkit-slider-thumb:active{background-color:#9feecc}.custom-range.custom-range-success::-moz-range-thumb{background-color:#21b978}.custom-range.custom-range-success::-moz-range-thumb:active{background-color:#9feecc}.custom-range.custom-range-success::-ms-thumb{background-color:#21b978}.custom-range.custom-range-success::-ms-thumb:active{background-color:#9feecc}.custom-range.custom-range-info:focus{outline:none}.custom-range.custom-range-info:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(66,119,207,.25)}.custom-range.custom-range-info:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(66,119,207,.25)}.custom-range.custom-range-info:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(66,119,207,.25)}.custom-range.custom-range-info::-webkit-slider-thumb{background-color:#4277cf}.custom-range.custom-range-info::-webkit-slider-thumb:active{background-color:#d0ddf3}.custom-range.custom-range-info::-moz-range-thumb{background-color:#4277cf}.custom-range.custom-range-info::-moz-range-thumb:active{background-color:#d0ddf3}.custom-range.custom-range-info::-ms-thumb{background-color:#4277cf}.custom-range.custom-range-info::-ms-thumb:active{background-color:#d0ddf3}.custom-range.custom-range-warning:focus{outline:none}.custom-range.custom-range-warning:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(221,164,81,.25)}.custom-range.custom-range-warning:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(221,164,81,.25)}.custom-range.custom-range-warning:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(221,164,81,.25)}.custom-range.custom-range-warning::-webkit-slider-thumb{background-color:#dda451}.custom-range.custom-range-warning::-webkit-slider-thumb:active{background-color:#faf2e6}.custom-range.custom-range-warning::-moz-range-thumb{background-color:#dda451}.custom-range.custom-range-warning::-moz-range-thumb:active{background-color:#faf2e6}.custom-range.custom-range-warning::-ms-thumb{background-color:#dda451}.custom-range.custom-range-warning::-ms-thumb:active{background-color:#faf2e6}.custom-range.custom-range-danger:focus{outline:none}.custom-range.custom-range-danger:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(234,84,85,.25)}.custom-range.custom-range-danger:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(234,84,85,.25)}.custom-range.custom-range-danger:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(234,84,85,.25)}.custom-range.custom-range-danger::-webkit-slider-thumb{background-color:#ea5455}.custom-range.custom-range-danger::-webkit-slider-thumb:active{background-color:#fef3f3}.custom-range.custom-range-danger::-moz-range-thumb{background-color:#ea5455}.custom-range.custom-range-danger::-moz-range-thumb:active{background-color:#fef3f3}.custom-range.custom-range-danger::-ms-thumb{background-color:#ea5455}.custom-range.custom-range-danger::-ms-thumb:active{background-color:#fef3f3}.custom-range.custom-range-light:focus{outline:none}.custom-range.custom-range-light:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(247,247,249,.25)}.custom-range.custom-range-light:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(247,247,249,.25)}.custom-range.custom-range-light:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(247,247,249,.25)}.custom-range.custom-range-light::-webkit-slider-thumb{background-color:#f7f7f9}.custom-range.custom-range-light::-webkit-slider-thumb:active{background-color:#fff}.custom-range.custom-range-light::-moz-range-thumb{background-color:#f7f7f9}.custom-range.custom-range-light::-moz-range-thumb:active{background-color:#fff}.custom-range.custom-range-light::-ms-thumb{background-color:#f7f7f9}.custom-range.custom-range-light::-ms-thumb:active{background-color:#fff}.custom-range.custom-range-dark:focus{outline:none}.custom-range.custom-range-dark:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(34,41,47,.25)}.custom-range.custom-range-dark:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(34,41,47,.25)}.custom-range.custom-range-dark:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(34,41,47,.25)}.custom-range.custom-range-dark::-webkit-slider-thumb{background-color:#22292f}.custom-range.custom-range-dark::-webkit-slider-thumb:active{background-color:#6e8396}.custom-range.custom-range-dark::-moz-range-thumb{background-color:#22292f}.custom-range.custom-range-dark::-moz-range-thumb:active{background-color:#6e8396}.custom-range.custom-range-dark::-ms-thumb{background-color:#22292f}.custom-range.custom-range-dark::-ms-thumb:active{background-color:#6e8396}.custom-range.custom-range-lightblue:focus{outline:none}.custom-range.custom-range-lightblue:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(60,141,188,.25)}.custom-range.custom-range-lightblue:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(60,141,188,.25)}.custom-range.custom-range-lightblue:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(60,141,188,.25)}.custom-range.custom-range-lightblue::-webkit-slider-thumb{background-color:#3c8dbc}.custom-range.custom-range-lightblue::-webkit-slider-thumb:active{background-color:#c0dbeb}.custom-range.custom-range-lightblue::-moz-range-thumb{background-color:#3c8dbc}.custom-range.custom-range-lightblue::-moz-range-thumb:active{background-color:#c0dbeb}.custom-range.custom-range-lightblue::-ms-thumb{background-color:#3c8dbc}.custom-range.custom-range-lightblue::-ms-thumb:active{background-color:#c0dbeb}.custom-range.custom-range-navy:focus{outline:none}.custom-range.custom-range-navy:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(0,31,63,.25)}.custom-range.custom-range-navy:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(0,31,63,.25)}.custom-range.custom-range-navy:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(0,31,63,.25)}.custom-range.custom-range-navy::-webkit-slider-thumb{background-color:#001f3f}.custom-range.custom-range-navy::-webkit-slider-thumb:active{background-color:#0077f2}.custom-range.custom-range-navy::-moz-range-thumb{background-color:#001f3f}.custom-range.custom-range-navy::-moz-range-thumb:active{background-color:#0077f2}.custom-range.custom-range-navy::-ms-thumb{background-color:#001f3f}.custom-range.custom-range-navy::-ms-thumb:active{background-color:#0077f2}.custom-range.custom-range-olive:focus{outline:none}.custom-range.custom-range-olive:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(61,153,112,.25)}.custom-range.custom-range-olive:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(61,153,112,.25)}.custom-range.custom-range-olive:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(61,153,112,.25)}.custom-range.custom-range-olive::-webkit-slider-thumb{background-color:#3d9970}.custom-range.custom-range-olive::-webkit-slider-thumb:active{background-color:#abdec7}.custom-range.custom-range-olive::-moz-range-thumb{background-color:#3d9970}.custom-range.custom-range-olive::-moz-range-thumb:active{background-color:#abdec7}.custom-range.custom-range-olive::-ms-thumb{background-color:#3d9970}.custom-range.custom-range-olive::-ms-thumb:active{background-color:#abdec7}.custom-range.custom-range-lime:focus{outline:none}.custom-range.custom-range-lime:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(1,255,112,.25)}.custom-range.custom-range-lime:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(1,255,112,.25)}.custom-range.custom-range-lime:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(1,255,112,.25)}.custom-range.custom-range-lime::-webkit-slider-thumb{background-color:#01ff70}.custom-range.custom-range-lime::-webkit-slider-thumb:active{background-color:#b4ffd4}.custom-range.custom-range-lime::-moz-range-thumb{background-color:#01ff70}.custom-range.custom-range-lime::-moz-range-thumb:active{background-color:#b4ffd4}.custom-range.custom-range-lime::-ms-thumb{background-color:#01ff70}.custom-range.custom-range-lime::-ms-thumb:active{background-color:#b4ffd4}.custom-range.custom-range-fuchsia:focus{outline:none}.custom-range.custom-range-fuchsia:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(240,18,190,.25)}.custom-range.custom-range-fuchsia:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(240,18,190,.25)}.custom-range.custom-range-fuchsia:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(240,18,190,.25)}.custom-range.custom-range-fuchsia::-webkit-slider-thumb{background-color:#f012be}.custom-range.custom-range-fuchsia::-webkit-slider-thumb:active{background-color:#fbbaec}.custom-range.custom-range-fuchsia::-moz-range-thumb{background-color:#f012be}.custom-range.custom-range-fuchsia::-moz-range-thumb:active{background-color:#fbbaec}.custom-range.custom-range-fuchsia::-ms-thumb{background-color:#f012be}.custom-range.custom-range-fuchsia::-ms-thumb:active{background-color:#fbbaec}.custom-range.custom-range-maroon:focus{outline:none}.custom-range.custom-range-maroon:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(216,27,96,.25)}.custom-range.custom-range-maroon:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(216,27,96,.25)}.custom-range.custom-range-maroon:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(216,27,96,.25)}.custom-range.custom-range-maroon::-webkit-slider-thumb{background-color:#d81b60}.custom-range.custom-range-maroon::-webkit-slider-thumb:active{background-color:#f5b0c9}.custom-range.custom-range-maroon::-moz-range-thumb{background-color:#d81b60}.custom-range.custom-range-maroon::-moz-range-thumb:active{background-color:#f5b0c9}.custom-range.custom-range-maroon::-ms-thumb{background-color:#d81b60}.custom-range.custom-range-maroon::-ms-thumb:active{background-color:#f5b0c9}.custom-range.custom-range-blue:focus{outline:none}.custom-range.custom-range-blue:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(48,133,214,.25)}.custom-range.custom-range-blue:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(48,133,214,.25)}.custom-range.custom-range-blue:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(48,133,214,.25)}.custom-range.custom-range-blue::-webkit-slider-thumb{background-color:#3085d6}.custom-range.custom-range-blue::-webkit-slider-thumb:active{background-color:#c5ddf4}.custom-range.custom-range-blue::-moz-range-thumb{background-color:#3085d6}.custom-range.custom-range-blue::-moz-range-thumb:active{background-color:#c5ddf4}.custom-range.custom-range-blue::-ms-thumb{background-color:#3085d6}.custom-range.custom-range-blue::-ms-thumb:active{background-color:#c5ddf4}.custom-range.custom-range-indigo:focus{outline:none}.custom-range.custom-range-indigo:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(92,107,198,.25)}.custom-range.custom-range-indigo:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(92,107,198,.25)}.custom-range.custom-range-indigo:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(92,107,198,.25)}.custom-range.custom-range-indigo::-webkit-slider-thumb{background-color:#5c6bc6}.custom-range.custom-range-indigo::-webkit-slider-thumb:active{background-color:#e0e3f4}.custom-range.custom-range-indigo::-moz-range-thumb{background-color:#5c6bc6}.custom-range.custom-range-indigo::-moz-range-thumb:active{background-color:#e0e3f4}.custom-range.custom-range-indigo::-ms-thumb{background-color:#5c6bc6}.custom-range.custom-range-indigo::-ms-thumb:active{background-color:#e0e3f4}.custom-range.custom-range-purple:focus{outline:none}.custom-range.custom-range-purple:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(111,66,193,.25)}.custom-range.custom-range-purple:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(111,66,193,.25)}.custom-range.custom-range-purple:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(111,66,193,.25)}.custom-range.custom-range-purple::-webkit-slider-thumb{background-color:#6f42c1}.custom-range.custom-range-purple::-webkit-slider-thumb:active{background-color:#d5c8ed}.custom-range.custom-range-purple::-moz-range-thumb{background-color:#6f42c1}.custom-range.custom-range-purple::-moz-range-thumb:active{background-color:#d5c8ed}.custom-range.custom-range-purple::-ms-thumb{background-color:#6f42c1}.custom-range.custom-range-purple::-ms-thumb:active{background-color:#d5c8ed}.custom-range.custom-range-pink:focus{outline:none}.custom-range.custom-range-pink:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(255,138,204,.25)}.custom-range.custom-range-pink:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(255,138,204,.25)}.custom-range.custom-range-pink:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(255,138,204,.25)}.custom-range.custom-range-pink::-webkit-slider-thumb{background-color:#ff8acc}.custom-range.custom-range-pink::-webkit-slider-thumb:active{background-color:#fff}.custom-range.custom-range-pink::-moz-range-thumb{background-color:#ff8acc}.custom-range.custom-range-pink::-moz-range-thumb:active{background-color:#fff}.custom-range.custom-range-pink::-ms-thumb{background-color:#ff8acc}.custom-range.custom-range-pink::-ms-thumb:active{background-color:#fff}.custom-range.custom-range-red:focus{outline:none}.custom-range.custom-range-red:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(234,84,85,.25)}.custom-range.custom-range-red:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(234,84,85,.25)}.custom-range.custom-range-red:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(234,84,85,.25)}.custom-range.custom-range-red::-webkit-slider-thumb{background-color:#ea5455}.custom-range.custom-range-red::-webkit-slider-thumb:active{background-color:#fef3f3}.custom-range.custom-range-red::-moz-range-thumb{background-color:#ea5455}.custom-range.custom-range-red::-moz-range-thumb:active{background-color:#fef3f3}.custom-range.custom-range-red::-ms-thumb{background-color:#ea5455}.custom-range.custom-range-red::-ms-thumb:active{background-color:#fef3f3}.custom-range.custom-range-orange:focus{outline:none}.custom-range.custom-range-orange:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(221,164,81,.25)}.custom-range.custom-range-orange:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(221,164,81,.25)}.custom-range.custom-range-orange:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(221,164,81,.25)}.custom-range.custom-range-orange::-webkit-slider-thumb{background-color:#dda451}.custom-range.custom-range-orange::-webkit-slider-thumb:active{background-color:#faf2e6}.custom-range.custom-range-orange::-moz-range-thumb{background-color:#dda451}.custom-range.custom-range-orange::-moz-range-thumb:active{background-color:#faf2e6}.custom-range.custom-range-orange::-ms-thumb{background-color:#dda451}.custom-range.custom-range-orange::-ms-thumb:active{background-color:#faf2e6}.custom-range.custom-range-yellow:focus{outline:none}.custom-range.custom-range-yellow:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(237,195,14,.25)}.custom-range.custom-range-yellow:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(237,195,14,.25)}.custom-range.custom-range-yellow:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(237,195,14,.25)}.custom-range.custom-range-yellow::-webkit-slider-thumb{background-color:#edc30e}.custom-range.custom-range-yellow::-webkit-slider-thumb:active{background-color:#fbedb3}.custom-range.custom-range-yellow::-moz-range-thumb{background-color:#edc30e}.custom-range.custom-range-yellow::-moz-range-thumb:active{background-color:#fbedb3}.custom-range.custom-range-yellow::-ms-thumb{background-color:#edc30e}.custom-range.custom-range-yellow::-ms-thumb:active{background-color:#fbedb3}.custom-range.custom-range-green:focus{outline:none}.custom-range.custom-range-green:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(33,185,120,.25)}.custom-range.custom-range-green:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(33,185,120,.25)}.custom-range.custom-range-green:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(33,185,120,.25)}.custom-range.custom-range-green::-webkit-slider-thumb{background-color:#21b978}.custom-range.custom-range-green::-webkit-slider-thumb:active{background-color:#9feecc}.custom-range.custom-range-green::-moz-range-thumb{background-color:#21b978}.custom-range.custom-range-green::-moz-range-thumb:active{background-color:#9feecc}.custom-range.custom-range-green::-ms-thumb{background-color:#21b978}.custom-range.custom-range-green::-ms-thumb:active{background-color:#9feecc}.custom-range.custom-range-teal:focus{outline:none}.custom-range.custom-range-teal:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(32,201,151,.25)}.custom-range.custom-range-teal:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(32,201,151,.25)}.custom-range.custom-range-teal:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(32,201,151,.25)}.custom-range.custom-range-teal::-webkit-slider-thumb{background-color:#20c997}.custom-range.custom-range-teal::-webkit-slider-thumb:active{background-color:#aaf1dc}.custom-range.custom-range-teal::-moz-range-thumb{background-color:#20c997}.custom-range.custom-range-teal::-moz-range-thumb:active{background-color:#aaf1dc}.custom-range.custom-range-teal::-ms-thumb{background-color:#20c997}.custom-range.custom-range-teal::-ms-thumb:active{background-color:#aaf1dc}.custom-range.custom-range-cyan:focus{outline:none}.custom-range.custom-range-cyan:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(115,103,240,.25)}.custom-range.custom-range-cyan:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(115,103,240,.25)}.custom-range.custom-range-cyan:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(115,103,240,.25)}.custom-range.custom-range-cyan::-webkit-slider-thumb{background-color:#7367f0}.custom-range.custom-range-cyan::-webkit-slider-thumb:active{background-color:#fff}.custom-range.custom-range-cyan::-moz-range-thumb{background-color:#7367f0}.custom-range.custom-range-cyan::-moz-range-thumb:active{background-color:#fff}.custom-range.custom-range-cyan::-ms-thumb{background-color:#7367f0}.custom-range.custom-range-cyan::-ms-thumb:active{background-color:#fff}.custom-range.custom-range-white:focus{outline:none}.custom-range.custom-range-white:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px hsla(0,0%,100%,.25)}.custom-range.custom-range-white:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px hsla(0,0%,100%,.25)}.custom-range.custom-range-white:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px hsla(0,0%,100%,.25)}.custom-range.custom-range-white::-webkit-slider-thumb,.custom-range.custom-range-white::-webkit-slider-thumb:active{background-color:#fff}.custom-range.custom-range-white::-moz-range-thumb,.custom-range.custom-range-white::-moz-range-thumb:active{background-color:#fff}.custom-range.custom-range-white::-ms-thumb,.custom-range.custom-range-white::-ms-thumb:active{background-color:#fff}.custom-range.custom-range-gray:focus{outline:none}.custom-range.custom-range-gray:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(184,194,204,.25)}.custom-range.custom-range-gray:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(184,194,204,.25)}.custom-range.custom-range-gray:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(184,194,204,.25)}.custom-range.custom-range-gray::-webkit-slider-thumb{background-color:#b8c2cc}.custom-range.custom-range-gray::-webkit-slider-thumb:active{background-color:#fff}.custom-range.custom-range-gray::-moz-range-thumb{background-color:#b8c2cc}.custom-range.custom-range-gray::-moz-range-thumb:active{background-color:#fff}.custom-range.custom-range-gray::-ms-thumb{background-color:#b8c2cc}.custom-range.custom-range-gray::-ms-thumb:active{background-color:#fff}.custom-range.custom-range-gray-dark:focus{outline:none}.custom-range.custom-range-gray-dark:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(30,30,30,.25)}.custom-range.custom-range-gray-dark:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(30,30,30,.25)}.custom-range.custom-range-gray-dark:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(30,30,30,.25)}.custom-range.custom-range-gray-dark::-webkit-slider-thumb{background-color:#1e1e1e}.custom-range.custom-range-gray-dark::-webkit-slider-thumb:active{background-color:#777}.custom-range.custom-range-gray-dark::-moz-range-thumb{background-color:#1e1e1e}.custom-range.custom-range-gray-dark::-moz-range-thumb:active{background-color:#777}.custom-range.custom-range-gray-dark::-ms-thumb{background-color:#1e1e1e}.custom-range.custom-range-gray-dark::-ms-thumb:active{background-color:#777}.progress{border-radius:1px}.progress.vertical{display:inline-block;height:200px;margin-right:10px;position:relative;width:30px}.progress.vertical>.progress-bar{bottom:0;position:absolute;width:100%}.progress.vertical.progress-sm,.progress.vertical.sm{width:20px}.progress.vertical.progress-xs,.progress.vertical.xs{width:10px}.progress.vertical.progress-xxs,.progress.vertical.xxs{width:3px}.progress-group{margin-bottom:1.5rem}.progress-sm{height:10px}.progress-xs{height:7px}.progress-xxs{height:3px}.table tr>td .progress{margin:0}.card-primary:not(.card-outline)>.card-header{background-color:#6d8be6}.card-primary:not(.card-outline)>.card-header,.card-primary:not(.card-outline)>.card-header a{color:#fff}.card-primary:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-primary.card-outline{border-top:3px solid #6d8be6}.card-primary.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-primary.card-outline-tabs>.card-header a.active{border-top:3px solid #6d8be6}.bg-gradient-primary .btn-tool,.bg-primary .btn-tool,.card-primary:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-gradient-primary .btn-tool:hover,.bg-primary .btn-tool:hover,.card-primary:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-gradient-primary .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-primary .bootstrap-datetimepicker-widget .table th,.card.bg-primary .bootstrap-datetimepicker-widget .table td,.card.bg-primary .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-primary .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-primary .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-primary .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-primary .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-primary .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-primary .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-primary .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-primary .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-primary .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-primary .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#4a6fe0;color:#fff}.card.bg-gradient-primary .bootstrap-datetimepicker-widget table td.today:before,.card.bg-primary .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-gradient-primary .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-primary .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-primary .bootstrap-datetimepicker-widget table td.active,.card.bg-primary .bootstrap-datetimepicker-widget table td.active:hover{background:#99aeed;color:#fff}.card-secondary:not(.card-outline)>.card-header{background-color:#b8c2cc}.card-secondary:not(.card-outline)>.card-header,.card-secondary:not(.card-outline)>.card-header a,.card-secondary:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-secondary.card-outline{border-top:3px solid #b8c2cc}.card-secondary.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-secondary.card-outline-tabs>.card-header a.active{border-top:3px solid #b8c2cc}.bg-gradient-secondary .btn-tool,.bg-secondary .btn-tool,.card-secondary:not(.card-outline) .btn-tool{color:rgba(42,46,48,.8)}.bg-gradient-secondary .btn-tool:hover,.bg-secondary .btn-tool:hover,.card-secondary:not(.card-outline) .btn-tool:hover{color:#2a2e30}.card.bg-gradient-secondary .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-secondary .bootstrap-datetimepicker-widget .table th,.card.bg-secondary .bootstrap-datetimepicker-widget .table td,.card.bg-secondary .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-secondary .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-secondary .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-secondary .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-secondary .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-secondary .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-secondary .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-secondary .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-secondary .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-secondary .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-secondary .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#a0aebb;color:#2a2e30}.card.bg-gradient-secondary .bootstrap-datetimepicker-widget table td.today:before,.card.bg-secondary .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#2a2e30}.card.bg-gradient-secondary .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-secondary .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-secondary .bootstrap-datetimepicker-widget table td.active,.card.bg-secondary .bootstrap-datetimepicker-widget table td.active:hover{background:#d6dce1;color:#2a2e30}.card-success:not(.card-outline)>.card-header{background-color:#21b978}.card-success:not(.card-outline)>.card-header,.card-success:not(.card-outline)>.card-header a{color:#fff}.card-success:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-success.card-outline{border-top:3px solid #21b978}.card-success.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-success.card-outline-tabs>.card-header a.active{border-top:3px solid #21b978}.bg-gradient-success .btn-tool,.bg-success .btn-tool,.card-success:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-gradient-success .btn-tool:hover,.bg-success .btn-tool:hover,.card-success:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-gradient-success .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-success .bootstrap-datetimepicker-widget .table th,.card.bg-success .bootstrap-datetimepicker-widget .table td,.card.bg-success .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-success .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-success .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-success .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-success .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-success .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-success .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-success .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-success .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-success .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-success .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#1b9662;color:#fff}.card.bg-gradient-success .bootstrap-datetimepicker-widget table td.today:before,.card.bg-success .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-gradient-success .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-success .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-success .bootstrap-datetimepicker-widget table td.active,.card.bg-success .bootstrap-datetimepicker-widget table td.active:hover{background:#32db93;color:#fff}.card-info:not(.card-outline)>.card-header{background-color:#4277cf}.card-info:not(.card-outline)>.card-header,.card-info:not(.card-outline)>.card-header a{color:#fff}.card-info:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-info.card-outline{border-top:3px solid #4277cf}.card-info.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-info.card-outline-tabs>.card-header a.active{border-top:3px solid #4277cf}.bg-gradient-info .btn-tool,.bg-info .btn-tool,.card-info:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-gradient-info .btn-tool:hover,.bg-info .btn-tool:hover,.card-info:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-gradient-info .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-info .bootstrap-datetimepicker-widget .table th,.card.bg-info .bootstrap-datetimepicker-widget .table td,.card.bg-info .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-info .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-info .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-info .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-info .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-info .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-info .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-info .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-info .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-info .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-info .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#2f63b9;color:#fff}.card.bg-gradient-info .bootstrap-datetimepicker-widget table td.today:before,.card.bg-info .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-gradient-info .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-info .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-info .bootstrap-datetimepicker-widget table td.active,.card.bg-info .bootstrap-datetimepicker-widget table td.active:hover{background:#6b94d9;color:#fff}.card-warning:not(.card-outline)>.card-header{background-color:#dda451}.card-warning:not(.card-outline)>.card-header,.card-warning:not(.card-outline)>.card-header a,.card-warning:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-warning.card-outline{border-top:3px solid #dda451}.card-warning.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-warning.card-outline-tabs>.card-header a.active{border-top:3px solid #dda451}.bg-gradient-warning .btn-tool,.bg-warning .btn-tool,.card-warning:not(.card-outline) .btn-tool{color:rgba(42,46,48,.8)}.bg-gradient-warning .btn-tool:hover,.bg-warning .btn-tool:hover,.card-warning:not(.card-outline) .btn-tool:hover{color:#2a2e30}.card.bg-gradient-warning .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-warning .bootstrap-datetimepicker-widget .table th,.card.bg-warning .bootstrap-datetimepicker-widget .table td,.card.bg-warning .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-warning .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-warning .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-warning .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-warning .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-warning .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-warning .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-warning .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-warning .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-warning .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-warning .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#d6922f;color:#2a2e30}.card.bg-gradient-warning .bootstrap-datetimepicker-widget table td.today:before,.card.bg-warning .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#2a2e30}.card.bg-gradient-warning .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-warning .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-warning .bootstrap-datetimepicker-widget table td.active,.card.bg-warning .bootstrap-datetimepicker-widget table td.active:hover{background:#e5ba7c;color:#2a2e30}.card-danger:not(.card-outline)>.card-header{background-color:#ea5455}.card-danger:not(.card-outline)>.card-header,.card-danger:not(.card-outline)>.card-header a{color:#fff}.card-danger:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-danger.card-outline{border-top:3px solid #ea5455}.card-danger.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-danger.card-outline-tabs>.card-header a.active{border-top:3px solid #ea5455}.bg-danger .btn-tool,.bg-gradient-danger .btn-tool,.card-danger:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-danger .btn-tool:hover,.bg-gradient-danger .btn-tool:hover,.card-danger:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-danger .bootstrap-datetimepicker-widget .table td,.card.bg-danger .bootstrap-datetimepicker-widget .table th,.card.bg-gradient-danger .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-danger .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-danger .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-danger .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-danger .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-danger .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-danger .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-gradient-danger .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-danger .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-danger .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-danger .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-danger .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#e63031;color:#fff}.card.bg-danger .bootstrap-datetimepicker-widget table td.today:before,.card.bg-gradient-danger .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-danger .bootstrap-datetimepicker-widget table td.active,.card.bg-danger .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-gradient-danger .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-danger .bootstrap-datetimepicker-widget table td.active:hover{background:#f08182;color:#fff}.card-light:not(.card-outline)>.card-header{background-color:#f7f7f9}.card-light:not(.card-outline)>.card-header,.card-light:not(.card-outline)>.card-header a,.card-light:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-light.card-outline{border-top:3px solid #f7f7f9}.card-light.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-light.card-outline-tabs>.card-header a.active{border-top:3px solid #f7f7f9}.bg-gradient-light .btn-tool,.bg-light .btn-tool,.card-light:not(.card-outline) .btn-tool{color:rgba(42,46,48,.8)}.bg-gradient-light .btn-tool:hover,.bg-light .btn-tool:hover,.card-light:not(.card-outline) .btn-tool:hover{color:#2a2e30}.card.bg-gradient-light .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-light .bootstrap-datetimepicker-widget .table th,.card.bg-light .bootstrap-datetimepicker-widget .table td,.card.bg-light .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-light .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-light .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-light .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-light .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-light .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-light .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-light .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-light .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-light .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-light .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#e0e0e8;color:#2a2e30}.card.bg-gradient-light .bootstrap-datetimepicker-widget table td.today:before,.card.bg-light .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#2a2e30}.card.bg-gradient-light .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-light .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-light .bootstrap-datetimepicker-widget table td.active,.card.bg-light .bootstrap-datetimepicker-widget table td.active:hover{background:#fff;color:#2a2e30}.card-dark:not(.card-outline)>.card-header{background-color:#22292f}.card-dark:not(.card-outline)>.card-header,.card-dark:not(.card-outline)>.card-header a{color:#fff}.card-dark:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-dark.card-outline{border-top:3px solid #22292f}.card-dark.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-dark.card-outline-tabs>.card-header a.active{border-top:3px solid #22292f}.bg-dark .btn-tool,.bg-gradient-dark .btn-tool,.card-dark:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-dark .btn-tool:hover,.bg-gradient-dark .btn-tool:hover,.card-dark:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-dark .bootstrap-datetimepicker-widget .table td,.card.bg-dark .bootstrap-datetimepicker-widget .table th,.card.bg-gradient-dark .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-dark .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-dark .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-dark .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-dark .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-dark .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-dark .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-gradient-dark .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-dark .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-dark .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-dark .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-dark .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#111417;color:#fff}.card.bg-dark .bootstrap-datetimepicker-widget table td.today:before,.card.bg-gradient-dark .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-dark .bootstrap-datetimepicker-widget table td.active,.card.bg-dark .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-gradient-dark .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-dark .bootstrap-datetimepicker-widget table td.active:hover{background:#37434d;color:#fff}.card-lightblue:not(.card-outline)>.card-header{background-color:#3c8dbc}.card-lightblue:not(.card-outline)>.card-header,.card-lightblue:not(.card-outline)>.card-header a{color:#fff}.card-lightblue:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-lightblue.card-outline{border-top:3px solid #3c8dbc}.card-lightblue.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-lightblue.card-outline-tabs>.card-header a.active{border-top:3px solid #3c8dbc}.bg-gradient-lightblue .btn-tool,.bg-lightblue .btn-tool,.card-lightblue:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-gradient-lightblue .btn-tool:hover,.bg-lightblue .btn-tool:hover,.card-lightblue:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-gradient-lightblue .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-lightblue .bootstrap-datetimepicker-widget .table th,.card.bg-lightblue .bootstrap-datetimepicker-widget .table td,.card.bg-lightblue .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-lightblue .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-lightblue .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-lightblue .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-lightblue .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-lightblue .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-lightblue .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-lightblue .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-lightblue .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-lightblue .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-lightblue .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#32769d;color:#fff}.card.bg-gradient-lightblue .bootstrap-datetimepicker-widget table td.today:before,.card.bg-lightblue .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-gradient-lightblue .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-lightblue .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-lightblue .bootstrap-datetimepicker-widget table td.active,.card.bg-lightblue .bootstrap-datetimepicker-widget table td.active:hover{background:#5fa4cc;color:#fff}.card-navy:not(.card-outline)>.card-header{background-color:#001f3f}.card-navy:not(.card-outline)>.card-header,.card-navy:not(.card-outline)>.card-header a{color:#fff}.card-navy:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-navy.card-outline{border-top:3px solid #001f3f}.card-navy.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-navy.card-outline-tabs>.card-header a.active{border-top:3px solid #001f3f}.bg-gradient-navy .btn-tool,.bg-navy .btn-tool,.card-navy:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-gradient-navy .btn-tool:hover,.bg-navy .btn-tool:hover,.card-navy:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-gradient-navy .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-navy .bootstrap-datetimepicker-widget .table th,.card.bg-navy .bootstrap-datetimepicker-widget .table td,.card.bg-navy .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-navy .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-navy .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-navy .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-navy .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-navy .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-navy .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-navy .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-navy .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-navy .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-navy .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#000b16;color:#fff}.card.bg-gradient-navy .bootstrap-datetimepicker-widget table td.today:before,.card.bg-navy .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-gradient-navy .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-navy .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-navy .bootstrap-datetimepicker-widget table td.active,.card.bg-navy .bootstrap-datetimepicker-widget table td.active:hover{background:#003872;color:#fff}.card-olive:not(.card-outline)>.card-header{background-color:#3d9970}.card-olive:not(.card-outline)>.card-header,.card-olive:not(.card-outline)>.card-header a{color:#fff}.card-olive:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-olive.card-outline{border-top:3px solid #3d9970}.card-olive.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-olive.card-outline-tabs>.card-header a.active{border-top:3px solid #3d9970}.bg-gradient-olive .btn-tool,.bg-olive .btn-tool,.card-olive:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-gradient-olive .btn-tool:hover,.bg-olive .btn-tool:hover,.card-olive:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-gradient-olive .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-olive .bootstrap-datetimepicker-widget .table th,.card.bg-olive .bootstrap-datetimepicker-widget .table td,.card.bg-olive .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-olive .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-olive .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-olive .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-olive .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-olive .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-olive .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-olive .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-olive .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-olive .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-olive .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#317c5b;color:#fff}.card.bg-gradient-olive .bootstrap-datetimepicker-widget table td.today:before,.card.bg-olive .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-gradient-olive .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-olive .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-olive .bootstrap-datetimepicker-widget table td.active,.card.bg-olive .bootstrap-datetimepicker-widget table td.active:hover{background:#50b98a;color:#fff}.card-lime:not(.card-outline)>.card-header{background-color:#01ff70}.card-lime:not(.card-outline)>.card-header,.card-lime:not(.card-outline)>.card-header a,.card-lime:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-lime.card-outline{border-top:3px solid #01ff70}.card-lime.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-lime.card-outline-tabs>.card-header a.active{border-top:3px solid #01ff70}.bg-gradient-lime .btn-tool,.bg-lime .btn-tool,.card-lime:not(.card-outline) .btn-tool{color:rgba(42,46,48,.8)}.bg-gradient-lime .btn-tool:hover,.bg-lime .btn-tool:hover,.card-lime:not(.card-outline) .btn-tool:hover{color:#2a2e30}.card.bg-gradient-lime .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-lime .bootstrap-datetimepicker-widget .table th,.card.bg-lime .bootstrap-datetimepicker-widget .table td,.card.bg-lime .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-lime .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-lime .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-lime .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-lime .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-lime .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-lime .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-lime .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-lime .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-lime .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-lime .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#00d75e;color:#2a2e30}.card.bg-gradient-lime .bootstrap-datetimepicker-widget table td.today:before,.card.bg-lime .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#2a2e30}.card.bg-gradient-lime .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-lime .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-lime .bootstrap-datetimepicker-widget table td.active,.card.bg-lime .bootstrap-datetimepicker-widget table td.active:hover{background:#34ff8d;color:#2a2e30}.card-fuchsia:not(.card-outline)>.card-header{background-color:#f012be}.card-fuchsia:not(.card-outline)>.card-header,.card-fuchsia:not(.card-outline)>.card-header a{color:#fff}.card-fuchsia:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-fuchsia.card-outline{border-top:3px solid #f012be}.card-fuchsia.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-fuchsia.card-outline-tabs>.card-header a.active{border-top:3px solid #f012be}.bg-fuchsia .btn-tool,.bg-gradient-fuchsia .btn-tool,.card-fuchsia:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-fuchsia .btn-tool:hover,.bg-gradient-fuchsia .btn-tool:hover,.card-fuchsia:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-fuchsia .bootstrap-datetimepicker-widget .table td,.card.bg-fuchsia .bootstrap-datetimepicker-widget .table th,.card.bg-gradient-fuchsia .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-fuchsia .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-fuchsia .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-fuchsia .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-fuchsia .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-fuchsia .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-fuchsia .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-gradient-fuchsia .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-fuchsia .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-fuchsia .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-fuchsia .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-fuchsia .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#cc0da1;color:#fff}.card.bg-fuchsia .bootstrap-datetimepicker-widget table td.today:before,.card.bg-gradient-fuchsia .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-fuchsia .bootstrap-datetimepicker-widget table td.active,.card.bg-fuchsia .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-gradient-fuchsia .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-fuchsia .bootstrap-datetimepicker-widget table td.active:hover{background:#f342cb;color:#fff}.card-maroon:not(.card-outline)>.card-header{background-color:#d81b60}.card-maroon:not(.card-outline)>.card-header,.card-maroon:not(.card-outline)>.card-header a{color:#fff}.card-maroon:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-maroon.card-outline{border-top:3px solid #d81b60}.card-maroon.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-maroon.card-outline-tabs>.card-header a.active{border-top:3px solid #d81b60}.bg-gradient-maroon .btn-tool,.bg-maroon .btn-tool,.card-maroon:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-gradient-maroon .btn-tool:hover,.bg-maroon .btn-tool:hover,.card-maroon:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-gradient-maroon .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-maroon .bootstrap-datetimepicker-widget .table th,.card.bg-maroon .bootstrap-datetimepicker-widget .table td,.card.bg-maroon .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-maroon .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-maroon .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-maroon .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-maroon .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-maroon .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-maroon .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-maroon .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-maroon .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-maroon .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-maroon .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#b41650;color:#fff}.card.bg-gradient-maroon .bootstrap-datetimepicker-widget table td.today:before,.card.bg-maroon .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-gradient-maroon .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-maroon .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-maroon .bootstrap-datetimepicker-widget table td.active,.card.bg-maroon .bootstrap-datetimepicker-widget table td.active:hover{background:#e73f7c;color:#fff}.card-blue:not(.card-outline)>.card-header{background-color:#3085d6}.card-blue:not(.card-outline)>.card-header,.card-blue:not(.card-outline)>.card-header a{color:#fff}.card-blue:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-blue.card-outline{border-top:3px solid #3085d6}.card-blue.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-blue.card-outline-tabs>.card-header a.active{border-top:3px solid #3085d6}.bg-blue .btn-tool,.bg-gradient-blue .btn-tool,.card-blue:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-blue .btn-tool:hover,.bg-gradient-blue .btn-tool:hover,.card-blue:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-blue .bootstrap-datetimepicker-widget .table td,.card.bg-blue .bootstrap-datetimepicker-widget .table th,.card.bg-gradient-blue .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-blue .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-blue .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-blue .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-blue .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-blue .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-blue .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-gradient-blue .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-blue .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-blue .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-blue .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-blue .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#2570b9;color:#fff}.card.bg-blue .bootstrap-datetimepicker-widget table td.today:before,.card.bg-gradient-blue .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-blue .bootstrap-datetimepicker-widget table td.active,.card.bg-blue .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-gradient-blue .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-blue .bootstrap-datetimepicker-widget table td.active:hover{background:#5b9ede;color:#fff}.card-indigo:not(.card-outline)>.card-header{background-color:#5c6bc6}.card-indigo:not(.card-outline)>.card-header,.card-indigo:not(.card-outline)>.card-header a{color:#fff}.card-indigo:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-indigo.card-outline{border-top:3px solid #5c6bc6}.card-indigo.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-indigo.card-outline-tabs>.card-header a.active{border-top:3px solid #5c6bc6}.bg-gradient-indigo .btn-tool,.bg-indigo .btn-tool,.card-indigo:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-gradient-indigo .btn-tool:hover,.bg-indigo .btn-tool:hover,.card-indigo:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-gradient-indigo .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-indigo .bootstrap-datetimepicker-widget .table th,.card.bg-indigo .bootstrap-datetimepicker-widget .table td,.card.bg-indigo .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-indigo .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-indigo .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-indigo .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-indigo .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-indigo .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-indigo .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-indigo .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-indigo .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-indigo .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-indigo .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#4152b9;color:#fff}.card.bg-gradient-indigo .bootstrap-datetimepicker-widget table td.today:before,.card.bg-indigo .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-gradient-indigo .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-indigo .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-indigo .bootstrap-datetimepicker-widget table td.active,.card.bg-indigo .bootstrap-datetimepicker-widget table td.active:hover{background:#828dd3;color:#fff}.card-purple:not(.card-outline)>.card-header{background-color:#6f42c1}.card-purple:not(.card-outline)>.card-header,.card-purple:not(.card-outline)>.card-header a{color:#fff}.card-purple:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-purple.card-outline{border-top:3px solid #6f42c1}.card-purple.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-purple.card-outline-tabs>.card-header a.active{border-top:3px solid #6f42c1}.bg-gradient-purple .btn-tool,.bg-purple .btn-tool,.card-purple:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-gradient-purple .btn-tool:hover,.bg-purple .btn-tool:hover,.card-purple:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-gradient-purple .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-purple .bootstrap-datetimepicker-widget .table th,.card.bg-purple .bootstrap-datetimepicker-widget .table td,.card.bg-purple .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-purple .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-purple .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-purple .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-purple .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-purple .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-purple .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-purple .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-purple .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-purple .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-purple .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#5d36a4;color:#fff}.card.bg-gradient-purple .bootstrap-datetimepicker-widget table td.today:before,.card.bg-purple .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-gradient-purple .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-purple .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-purple .bootstrap-datetimepicker-widget table td.active,.card.bg-purple .bootstrap-datetimepicker-widget table td.active:hover{background:#8c68ce;color:#fff}.card-pink:not(.card-outline)>.card-header{background-color:#ff8acc}.card-pink:not(.card-outline)>.card-header,.card-pink:not(.card-outline)>.card-header a,.card-pink:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-pink.card-outline{border-top:3px solid #ff8acc}.card-pink.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-pink.card-outline-tabs>.card-header a.active{border-top:3px solid #ff8acc}.bg-gradient-pink .btn-tool,.bg-pink .btn-tool,.card-pink:not(.card-outline) .btn-tool{color:rgba(42,46,48,.8)}.bg-gradient-pink .btn-tool:hover,.bg-pink .btn-tool:hover,.card-pink:not(.card-outline) .btn-tool:hover{color:#2a2e30}.card.bg-gradient-pink .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-pink .bootstrap-datetimepicker-widget .table th,.card.bg-pink .bootstrap-datetimepicker-widget .table td,.card.bg-pink .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-pink .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-pink .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-pink .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-pink .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-pink .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-pink .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-pink .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-pink .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-pink .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-pink .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#ff61ba;color:#2a2e30}.card.bg-gradient-pink .bootstrap-datetimepicker-widget table td.today:before,.card.bg-pink .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#2a2e30}.card.bg-gradient-pink .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-pink .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-pink .bootstrap-datetimepicker-widget table td.active,.card.bg-pink .bootstrap-datetimepicker-widget table td.active:hover{background:#ffbde2;color:#2a2e30}.card-red:not(.card-outline)>.card-header{background-color:#ea5455}.card-red:not(.card-outline)>.card-header,.card-red:not(.card-outline)>.card-header a{color:#fff}.card-red:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-red.card-outline{border-top:3px solid #ea5455}.card-red.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-red.card-outline-tabs>.card-header a.active{border-top:3px solid #ea5455}.bg-gradient-red .btn-tool,.bg-red .btn-tool,.card-red:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-gradient-red .btn-tool:hover,.bg-red .btn-tool:hover,.card-red:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-gradient-red .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-red .bootstrap-datetimepicker-widget .table th,.card.bg-red .bootstrap-datetimepicker-widget .table td,.card.bg-red .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-red .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-red .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-red .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-red .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-red .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-red .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-red .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-red .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-red .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-red .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#e63031;color:#fff}.card.bg-gradient-red .bootstrap-datetimepicker-widget table td.today:before,.card.bg-red .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-gradient-red .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-red .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-red .bootstrap-datetimepicker-widget table td.active,.card.bg-red .bootstrap-datetimepicker-widget table td.active:hover{background:#f08182;color:#fff}.card-orange:not(.card-outline)>.card-header{background-color:#dda451}.card-orange:not(.card-outline)>.card-header,.card-orange:not(.card-outline)>.card-header a,.card-orange:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-orange.card-outline{border-top:3px solid #dda451}.card-orange.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-orange.card-outline-tabs>.card-header a.active{border-top:3px solid #dda451}.bg-gradient-orange .btn-tool,.bg-orange .btn-tool,.card-orange:not(.card-outline) .btn-tool{color:rgba(42,46,48,.8)}.bg-gradient-orange .btn-tool:hover,.bg-orange .btn-tool:hover,.card-orange:not(.card-outline) .btn-tool:hover{color:#2a2e30}.card.bg-gradient-orange .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-orange .bootstrap-datetimepicker-widget .table th,.card.bg-orange .bootstrap-datetimepicker-widget .table td,.card.bg-orange .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-orange .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-orange .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-orange .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-orange .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-orange .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-orange .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-orange .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-orange .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-orange .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-orange .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#d6922f;color:#2a2e30}.card.bg-gradient-orange .bootstrap-datetimepicker-widget table td.today:before,.card.bg-orange .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#2a2e30}.card.bg-gradient-orange .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-orange .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-orange .bootstrap-datetimepicker-widget table td.active,.card.bg-orange .bootstrap-datetimepicker-widget table td.active:hover{background:#e5ba7c;color:#2a2e30}.card-yellow:not(.card-outline)>.card-header{background-color:#edc30e}.card-yellow:not(.card-outline)>.card-header,.card-yellow:not(.card-outline)>.card-header a,.card-yellow:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-yellow.card-outline{border-top:3px solid #edc30e}.card-yellow.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-yellow.card-outline-tabs>.card-header a.active{border-top:3px solid #edc30e}.bg-gradient-yellow .btn-tool,.bg-yellow .btn-tool,.card-yellow:not(.card-outline) .btn-tool{color:rgba(42,46,48,.8)}.bg-gradient-yellow .btn-tool:hover,.bg-yellow .btn-tool:hover,.card-yellow:not(.card-outline) .btn-tool:hover{color:#2a2e30}.card.bg-gradient-yellow .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-yellow .bootstrap-datetimepicker-widget .table th,.card.bg-yellow .bootstrap-datetimepicker-widget .table td,.card.bg-yellow .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-yellow .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-yellow .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-yellow .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-yellow .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-yellow .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-yellow .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-yellow .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-yellow .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-yellow .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-yellow .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#c6a30c;color:#2a2e30}.card.bg-gradient-yellow .bootstrap-datetimepicker-widget table td.today:before,.card.bg-yellow .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#2a2e30}.card.bg-gradient-yellow .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-yellow .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-yellow .bootstrap-datetimepicker-widget table td.active,.card.bg-yellow .bootstrap-datetimepicker-widget table td.active:hover{background:#f3d13b;color:#2a2e30}.card-green:not(.card-outline)>.card-header{background-color:#21b978}.card-green:not(.card-outline)>.card-header,.card-green:not(.card-outline)>.card-header a{color:#fff}.card-green:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-green.card-outline{border-top:3px solid #21b978}.card-green.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-green.card-outline-tabs>.card-header a.active{border-top:3px solid #21b978}.bg-gradient-green .btn-tool,.bg-green .btn-tool,.card-green:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-gradient-green .btn-tool:hover,.bg-green .btn-tool:hover,.card-green:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-gradient-green .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-green .bootstrap-datetimepicker-widget .table th,.card.bg-green .bootstrap-datetimepicker-widget .table td,.card.bg-green .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-green .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-green .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-green .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-green .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-green .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-green .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-green .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-green .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-green .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-green .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#1b9662;color:#fff}.card.bg-gradient-green .bootstrap-datetimepicker-widget table td.today:before,.card.bg-green .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-gradient-green .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-green .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-green .bootstrap-datetimepicker-widget table td.active,.card.bg-green .bootstrap-datetimepicker-widget table td.active:hover{background:#32db93;color:#fff}.card-teal:not(.card-outline)>.card-header{background-color:#20c997}.card-teal:not(.card-outline)>.card-header,.card-teal:not(.card-outline)>.card-header a{color:#fff}.card-teal:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-teal.card-outline{border-top:3px solid #20c997}.card-teal.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-teal.card-outline-tabs>.card-header a.active{border-top:3px solid #20c997}.bg-gradient-teal .btn-tool,.bg-teal .btn-tool,.card-teal:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-gradient-teal .btn-tool:hover,.bg-teal .btn-tool:hover,.card-teal:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-gradient-teal .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-teal .bootstrap-datetimepicker-widget .table th,.card.bg-teal .bootstrap-datetimepicker-widget .table td,.card.bg-teal .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-teal .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-teal .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-teal .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-teal .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-teal .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-teal .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-teal .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-teal .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-teal .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-teal .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#1aa67d;color:#fff}.card.bg-gradient-teal .bootstrap-datetimepicker-widget table td.today:before,.card.bg-teal .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-gradient-teal .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-teal .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-teal .bootstrap-datetimepicker-widget table td.active,.card.bg-teal .bootstrap-datetimepicker-widget table td.active:hover{background:#3ce0af;color:#fff}.card-cyan:not(.card-outline)>.card-header{background-color:#7367f0}.card-cyan:not(.card-outline)>.card-header,.card-cyan:not(.card-outline)>.card-header a{color:#fff}.card-cyan:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-cyan.card-outline{border-top:3px solid #7367f0}.card-cyan.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-cyan.card-outline-tabs>.card-header a.active{border-top:3px solid #7367f0}.bg-cyan .btn-tool,.bg-gradient-cyan .btn-tool,.card-cyan:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-cyan .btn-tool:hover,.bg-gradient-cyan .btn-tool:hover,.card-cyan:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-cyan .bootstrap-datetimepicker-widget .table td,.card.bg-cyan .bootstrap-datetimepicker-widget .table th,.card.bg-gradient-cyan .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-cyan .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-cyan .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-cyan .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-cyan .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-cyan .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-cyan .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-gradient-cyan .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-cyan .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-cyan .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-cyan .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-cyan .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#5142ec;color:#fff}.card.bg-cyan .bootstrap-datetimepicker-widget table td.today:before,.card.bg-gradient-cyan .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-cyan .bootstrap-datetimepicker-widget table td.active,.card.bg-cyan .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-gradient-cyan .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-cyan .bootstrap-datetimepicker-widget table td.active:hover{background:#9e95f5;color:#fff}.card-white:not(.card-outline)>.card-header{background-color:#fff}.card-white:not(.card-outline)>.card-header,.card-white:not(.card-outline)>.card-header a,.card-white:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-white.card-outline{border-top:3px solid #fff}.card-white.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-white.card-outline-tabs>.card-header a.active{border-top:3px solid #fff}.bg-gradient-white .btn-tool,.bg-white .btn-tool,.card-white:not(.card-outline) .btn-tool{color:rgba(42,46,48,.8)}.bg-gradient-white .btn-tool:hover,.bg-white .btn-tool:hover,.card-white:not(.card-outline) .btn-tool:hover{color:#2a2e30}.card.bg-gradient-white .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-white .bootstrap-datetimepicker-widget .table th,.card.bg-white .bootstrap-datetimepicker-widget .table td,.card.bg-white .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-white .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-white .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-white .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-white .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-white .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-white .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-white .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-white .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-white .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-white .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#ebebeb;color:#2a2e30}.card.bg-gradient-white .bootstrap-datetimepicker-widget table td.today:before,.card.bg-white .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#2a2e30}.card.bg-gradient-white .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-white .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-white .bootstrap-datetimepicker-widget table td.active,.card.bg-white .bootstrap-datetimepicker-widget table td.active:hover{background:#fff;color:#2a2e30}.card-gray:not(.card-outline)>.card-header{background-color:#b8c2cc}.card-gray:not(.card-outline)>.card-header,.card-gray:not(.card-outline)>.card-header a,.card-gray:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-gray.card-outline{border-top:3px solid #b8c2cc}.card-gray.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-gray.card-outline-tabs>.card-header a.active{border-top:3px solid #b8c2cc}.bg-gradient-gray .btn-tool,.bg-gray .btn-tool,.card-gray:not(.card-outline) .btn-tool{color:rgba(42,46,48,.8)}.bg-gradient-gray .btn-tool:hover,.bg-gray .btn-tool:hover,.card-gray:not(.card-outline) .btn-tool:hover{color:#2a2e30}.card.bg-gradient-gray .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-gray .bootstrap-datetimepicker-widget .table th,.card.bg-gray .bootstrap-datetimepicker-widget .table td,.card.bg-gray .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-gray .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-gray .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-gray .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-gray .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-gray .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-gray .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gray .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gray .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gray .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gray .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#a0aebb;color:#2a2e30}.card.bg-gradient-gray .bootstrap-datetimepicker-widget table td.today:before,.card.bg-gray .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#2a2e30}.card.bg-gradient-gray .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-gray .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-gray .bootstrap-datetimepicker-widget table td.active,.card.bg-gray .bootstrap-datetimepicker-widget table td.active:hover{background:#d6dce1;color:#2a2e30}.card-gray-dark:not(.card-outline)>.card-header{background-color:#1e1e1e}.card-gray-dark:not(.card-outline)>.card-header,.card-gray-dark:not(.card-outline)>.card-header a{color:#fff}.card-gray-dark:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-gray-dark.card-outline{border-top:3px solid #1e1e1e}.card-gray-dark.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-gray-dark.card-outline-tabs>.card-header a.active{border-top:3px solid #1e1e1e}.bg-gradient-gray-dark .btn-tool,.bg-gray-dark .btn-tool,.card-gray-dark:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-gradient-gray-dark .btn-tool:hover,.bg-gray-dark .btn-tool:hover,.card-gray-dark:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-gradient-gray-dark .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-gray-dark .bootstrap-datetimepicker-widget .table th,.card.bg-gray-dark .bootstrap-datetimepicker-widget .table td,.card.bg-gray-dark .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-gray-dark .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-gray-dark .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-gray-dark .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-gray-dark .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-gray-dark .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-gray-dark .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gray-dark .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gray-dark .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gray-dark .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gray-dark .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#0a0a0a;color:#fff}.card.bg-gradient-gray-dark .bootstrap-datetimepicker-widget table td.today:before,.card.bg-gray-dark .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-gradient-gray-dark .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-gray-dark .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-gray-dark .bootstrap-datetimepicker-widget table td.active,.card.bg-gray-dark .bootstrap-datetimepicker-widget table td.active:hover{background:#383838;color:#fff}.card{margin-bottom:3rem;border:0}.card.bg-dark .card-header{border-color:#42484b}.card.bg-dark,.card.bg-dark .card-body{color:#fff}.card.maximized-card{height:100%!important;left:0;max-height:100%!important;max-width:100%!important;position:fixed;top:0;width:100%!important;z-index:9999}.card.maximized-card.was-collapsed .card-body{display:block!important}.card.maximized-card [data-widget=collapse]{display:none}.card.maximized-card .card-footer,.card.maximized-card .card-header{border-radius:0!important}.card.collapsed-card .card-body,.card.collapsed-card .card-footer{display:none}.card .nav.flex-column>li{border-bottom:1px solid rgba(34,41,47,.125);margin:0}.card .nav.flex-column>li:last-of-type{border-bottom:0}.card.height-control .card-body{max-height:300px;overflow:auto}.card .border-right{border-right:1px solid rgba(34,41,47,.125)}.card .border-left{border-left:1px solid rgba(34,41,47,.125)}.card.card-tabs:not(.card-outline)>.card-header{border-bottom:0}.card.card-tabs:not(.card-outline)>.card-header .nav-item:first-child .nav-link{margin-left:-1px}.card.card-tabs.card-outline .nav-item{border-bottom:0}.card.card-tabs.card-outline .nav-item:first-child .nav-link{border-left:0;margin-left:0}.card.card-tabs .card-tools{margin:.3rem .5rem}.card.card-tabs:not(.expanding-card).collapsed-card .card-header,.card.card-tabs:not(.expanding-card).collapsed-card .card-header .nav-tabs{border-bottom:0}.card.card-tabs:not(.expanding-card).collapsed-card .card-header .nav-tabs .nav-item{margin-bottom:0}.card.card-tabs.expanding-card .card-header .nav-tabs .nav-item{margin-bottom:-1px}.card.card-outline-tabs{border-top:0}.card.card-outline-tabs .card-header .nav-item:first-child .nav-link{border-left:0;margin-left:0}.card.card-outline-tabs .card-header a{border-top:3px solid transparent}.card.card-outline-tabs .card-header a:hover{border-top:3px solid #dae1e7}.card.card-outline-tabs .card-header a.active:hover{margin-top:0}.card.card-outline-tabs .card-tools{margin:.5rem .5rem .3rem}.card.card-outline-tabs:not(.expanding-card).collapsed-card .card-header,.card.card-outline-tabs:not(.expanding-card).collapsed-card .card-header .nav-tabs{border-bottom:0}.card.card-outline-tabs:not(.expanding-card).collapsed-card .card-header .nav-tabs .nav-item{margin-bottom:0}.card.card-outline-tabs.expanding-card .card-header .nav-tabs .nav-item{margin-bottom:-1px}html.maximized-card{overflow:hidden}.card-header{background-color:transparent;border-bottom:0;padding:.75rem 1.25rem;position:relative;border-top-left-radius:.5rem;border-top-right-radius:.5rem}.collapsed-card .card-header{border-bottom:0}.card-header>.card-tools{float:right;margin-right:-.625rem}.card-header>.card-tools .input-group,.card-header>.card-tools .nav,.card-header>.card-tools .pagination{margin-bottom:-.3rem;margin-top:-.3rem}.card-header>.card-tools [data-toggle=tooltip]{position:relative}.card-title{float:left;font-size:1.1rem;font-weight:400;margin:0}.card-text{clear:both}.btn-tool{background:transparent;color:#adb5bd;font-size:1rem;margin:-.75rem 0;padding:.25rem .5rem}.btn-group.show .btn-tool,.btn-tool:hover{color:#4e5154}.btn-tool:focus,.show .btn-tool{box-shadow:none!important}.text-sm .card-title{font-size:1rem}.text-sm .nav-link{padding:.4rem .8rem}.card-body>.table{margin-bottom:0}.card-body>.table>thead>tr>td,.card-body>.table>thead>tr>th{border-top-width:0}.card-body .fc{margin-top:5px}.card-body .full-width-chart{margin:-19px}.card-body.p-0 .full-width-chart{margin:-9px}.chart-legend{padding-left:0;list-style:none;margin:10px 0}@media (max-width:576px){.chart-legend>li{float:left;margin-right:10px}}.card-comments{background:#babfc7}.card-comments .card-comment{border-bottom:1px solid #ededed;padding:8px 0}.card-comments .card-comment:after{display:block;clear:both;content:""}.card-comments .card-comment:last-of-type{border-bottom:0}.card-comments .card-comment:first-of-type{padding-top:0}.card-comments .card-comment img{height:1.875rem;width:1.875rem;float:left}.card-comments .comment-text{color:#7f8489;margin-left:40px}.card-comments .username{color:#4e5154;display:block;font-weight:600}.card-comments .text-muted{font-size:12px;font-weight:400}.todo-list{list-style:none;margin:0;overflow:auto;padding:0}.todo-list>li{border-radius:2px;background:#babfc7;border-left:2px solid #ededed;color:#4e5154;margin-bottom:2px;padding:10px}.todo-list>li:last-of-type{margin-bottom:0}.todo-list>li>input[type=checkbox]{margin:0 10px 0 5px}.todo-list>li .text{display:inline-block;font-weight:600;margin-left:5px}.todo-list>li .badge{font-size:.7rem;margin-left:10px}.todo-list>li .tools{color:#ea5455;display:none;float:right}.todo-list>li .tools>.fa,.todo-list>li .tools>.fab,.todo-list>li .tools>.far,.todo-list>li .tools>.fas,.todo-list>li .tools>.glyphicon,.todo-list>li .tools>.ion{cursor:pointer;margin-right:5px}.todo-list>li:hover .tools{display:inline-block}.todo-list>li.done{color:#697582}.todo-list>li.done .text{font-weight:500;text-decoration:line-through}.todo-list>li.done .badge{background:#adb5bd!important}.todo-list .primary{border-left-color:#6d8be6}.todo-list .secondary{border-left-color:#b8c2cc}.todo-list .success{border-left-color:#21b978}.todo-list .info{border-left-color:#4277cf}.todo-list .warning{border-left-color:#dda451}.todo-list .danger{border-left-color:#ea5455}.todo-list .light{border-left-color:#f7f7f9}.todo-list .dark{border-left-color:#22292f}.todo-list .lightblue{border-left-color:#3c8dbc}.todo-list .navy{border-left-color:#001f3f}.todo-list .olive{border-left-color:#3d9970}.todo-list .lime{border-left-color:#01ff70}.todo-list .fuchsia{border-left-color:#f012be}.todo-list .maroon{border-left-color:#d81b60}.todo-list .blue{border-left-color:#3085d6}.todo-list .indigo{border-left-color:#5c6bc6}.todo-list .purple{border-left-color:#6f42c1}.todo-list .pink{border-left-color:#ff8acc}.todo-list .red{border-left-color:#ea5455}.todo-list .orange{border-left-color:#dda451}.todo-list .yellow{border-left-color:#edc30e}.todo-list .green{border-left-color:#21b978}.todo-list .teal{border-left-color:#20c997}.todo-list .cyan{border-left-color:#7367f0}.todo-list .white{border-left-color:#fff}.todo-list .gray{border-left-color:#b8c2cc}.todo-list .gray-dark{border-left-color:#1e1e1e}.todo-list .handle{cursor:move;display:inline-block;margin:0 5px}.card-input{max-width:200px}.card-default .nav-item:first-child .nav-link{border-left:0}.modal-dialog .overlay{background-color:#22292f;display:block;height:100%;left:0;opacity:.7;position:absolute;top:0;width:100%;z-index:1052}.modal-content.bg-warning .modal-footer,.modal-content.bg-warning .modal-header{border-color:#1e1e1e}.modal-content.bg-danger .close,.modal-content.bg-danger .mailbox-attachment-close,.modal-content.bg-info .close,.modal-content.bg-info .mailbox-attachment-close,.modal-content.bg-primary .close,.modal-content.bg-primary .mailbox-attachment-close,.modal-content.bg-secondary .close,.modal-content.bg-secondary .mailbox-attachment-close,.modal-content.bg-success .close,.modal-content.bg-success .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toasts-top-right{position:absolute;right:0;top:0;z-index:1040}.toasts-top-right.fixed{position:fixed}.toasts-top-left{left:0;position:absolute;top:0;z-index:1040}.toasts-top-left.fixed{position:fixed}.toasts-bottom-right{bottom:0;position:absolute;right:0;z-index:1040}.toasts-bottom-right.fixed{position:fixed}.toasts-bottom-left{bottom:0;left:0;position:absolute;z-index:1040}.toasts-bottom-left.fixed{position:fixed}.toast.bg-primary{background:rgba(109,139,230,.9)!important}.toast.bg-primary .close,.toast.bg-primary .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-primary .toast-header{background:rgba(109,139,230,.85);color:#fff}.toast.bg-secondary{background:rgba(184,194,204,.9)!important}.toast.bg-secondary .toast-header{background:rgba(184,194,204,.85);color:#2a2e30}.toast.bg-success{background:rgba(33,185,120,.9)!important}.toast.bg-success .close,.toast.bg-success .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-success .toast-header{background:rgba(33,185,120,.85);color:#fff}.toast.bg-info{background:rgba(66,119,207,.9)!important}.toast.bg-info .close,.toast.bg-info .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-info .toast-header{background:rgba(66,119,207,.85);color:#fff}.toast.bg-warning{background:rgba(221,164,81,.9)!important}.toast.bg-warning .toast-header{background:rgba(221,164,81,.85);color:#2a2e30}.toast.bg-danger{background:rgba(234,84,85,.9)!important}.toast.bg-danger .close,.toast.bg-danger .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-danger .toast-header{background:rgba(234,84,85,.85);color:#fff}.toast.bg-light{background:rgba(247,247,249,.9)!important}.toast.bg-light .toast-header{background:rgba(247,247,249,.85);color:#2a2e30}.toast.bg-dark{background:rgba(34,41,47,.9)!important}.toast.bg-dark .close,.toast.bg-dark .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-dark .toast-header{background:rgba(34,41,47,.85);color:#fff}.toast.bg-lightblue{background:rgba(60,141,188,.9)!important}.toast.bg-lightblue .close,.toast.bg-lightblue .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-lightblue .toast-header{background:rgba(60,141,188,.85);color:#fff}.toast.bg-navy{background:rgba(0,31,63,.9)!important}.toast.bg-navy .close,.toast.bg-navy .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-navy .toast-header{background:rgba(0,31,63,.85);color:#fff}.toast.bg-olive{background:rgba(61,153,112,.9)!important}.toast.bg-olive .close,.toast.bg-olive .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-olive .toast-header{background:rgba(61,153,112,.85);color:#fff}.toast.bg-lime{background:rgba(1,255,112,.9)!important}.toast.bg-lime .toast-header{background:rgba(1,255,112,.85);color:#2a2e30}.toast.bg-fuchsia{background:rgba(240,18,190,.9)!important}.toast.bg-fuchsia .close,.toast.bg-fuchsia .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-fuchsia .toast-header{background:rgba(240,18,190,.85);color:#fff}.toast.bg-maroon{background:rgba(216,27,96,.9)!important}.toast.bg-maroon .close,.toast.bg-maroon .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-maroon .toast-header{background:rgba(216,27,96,.85);color:#fff}.toast.bg-blue{background:rgba(48,133,214,.9)!important}.toast.bg-blue .close,.toast.bg-blue .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-blue .toast-header{background:rgba(48,133,214,.85);color:#fff}.toast.bg-indigo{background:rgba(92,107,198,.9)!important}.toast.bg-indigo .close,.toast.bg-indigo .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-indigo .toast-header{background:rgba(92,107,198,.85);color:#fff}.toast.bg-purple{background:rgba(111,66,193,.9)!important}.toast.bg-purple .close,.toast.bg-purple .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-purple .toast-header{background:rgba(111,66,193,.85);color:#fff}.toast.bg-pink{background:rgba(255,138,204,.9)!important}.toast.bg-pink .toast-header{background:rgba(255,138,204,.85);color:#2a2e30}.toast.bg-red{background:rgba(234,84,85,.9)!important}.toast.bg-red .close,.toast.bg-red .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-red .toast-header{background:rgba(234,84,85,.85);color:#fff}.toast.bg-orange{background:rgba(221,164,81,.9)!important}.toast.bg-orange .toast-header{background:rgba(221,164,81,.85);color:#2a2e30}.toast.bg-yellow{background:rgba(237,195,14,.9)!important}.toast.bg-yellow .toast-header{background:rgba(237,195,14,.85);color:#2a2e30}.toast.bg-green{background:rgba(33,185,120,.9)!important}.toast.bg-green .close,.toast.bg-green .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-green .toast-header{background:rgba(33,185,120,.85);color:#fff}.toast.bg-teal{background:rgba(32,201,151,.9)!important}.toast.bg-teal .close,.toast.bg-teal .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-teal .toast-header{background:rgba(32,201,151,.85);color:#fff}.toast.bg-cyan{background:rgba(115,103,240,.9)!important}.toast.bg-cyan .close,.toast.bg-cyan .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-cyan .toast-header{background:rgba(115,103,240,.85);color:#fff}.toast.bg-white{background:hsla(0,0%,100%,.9)!important}.toast.bg-white .toast-header{background:hsla(0,0%,100%,.85);color:#2a2e30}.toast.bg-gray{background:rgba(184,194,204,.9)!important}.toast.bg-gray .toast-header{background:rgba(184,194,204,.85);color:#2a2e30}.toast.bg-gray-dark{background:rgba(30,30,30,.9)!important}.toast.bg-gray-dark .close,.toast.bg-gray-dark .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-gray-dark .toast-header{background:rgba(30,30,30,.85);color:#fff}.btn{border-width:1px}.btn.disabled,.btn:disabled{cursor:not-allowed}.btn.btn-flat{border-radius:0;border-width:1px;box-shadow:none}.btn.btn-file{overflow:hidden;position:relative}.btn.btn-file>input[type=file]{background:#fff;cursor:inherit;display:block;font-size:100px;min-height:100%;min-width:100%;opacity:0;outline:none;position:absolute;right:0;text-align:right;top:0}.text-sm .btn{font-size:1rem!important}.btn-default{background-color:#babfc7;border-color:#babfc7;color:#444}.btn-default.hover,.btn-default:active,.btn-default:hover{background-color:#acb2bc;color:#2b2b2b}.btn-app{border-radius:3px;background-color:#babfc7;border:1px solid #ddd;color:#b8c2cc;font-size:12px;height:60px;margin:0 0 10px 10px;min-width:80px;padding:15px 5px;position:relative;text-align:center}.btn-app>.fa,.btn-app>.fab,.btn-app>.far,.btn-app>.fas,.btn-app>.glyphicon,.btn-app>.ion{display:block;font-size:20px}.btn-app:hover{background:#babfc7;border-color:#aaa;color:#444}.btn-app>.badge{font-size:10px;font-weight:400;position:absolute;right:-10px;top:-3px}.btn-xs{padding:.125rem .25rem;font-size:.75rem;border-radius:.15rem}.callout{border-radius:.5rem;background-color:#fff;border:1px solid #dae1e7;border-left:5px solid #ededed;margin-bottom:3rem;padding:1rem}.callout a{color:#4e5154;text-decoration:underline}.callout a:hover{color:#ededed}.callout p:last-child{margin-bottom:0}.callout.callout-danger{border-left-color:#e42728}.callout.callout-warning{border-left-color:#d28d29}.callout.callout-info{border-left-color:#2d5fb1}.callout.callout-success{border-left-color:#198e5c}.alert .icon{margin-right:10px}.alert .close,.alert .mailbox-attachment-close{color:#22292f;opacity:.2}.alert .close:hover,.alert .mailbox-attachment-close:hover{opacity:.5}.alert a{color:#fff;text-decoration:underline}.alert-primary{color:#fff;background:#6d8be6;border-color:#577ae2}.alert-default-primary{color:#495c8e;background-color:#e2e8fa;border-color:#d6dff8}.alert-default-primary hr{border-top-color:#c0cef4}.alert-default-primary .alert-link{color:#38466c}.alert-secondary{color:#2a2e30;background:#b8c2cc;border-color:#a9b5c1}.alert-default-secondary{color:#707981;background-color:#f1f3f5;border-color:#ebeef1}.alert-default-secondary hr{border-top-color:#dce1e7}.alert-default-secondary .alert-link{color:#585f66}.alert-success{color:#fff;background:#21b978;border-color:#1da36a}.alert-default-success{color:#217455;background-color:#d3f1e4;border-color:#c1ebd9}.alert-default-success hr{border-top-color:#aee5cd}.alert-default-success .alert-link{color:#164c38}.alert-info{color:#fff;background:#4277cf;border-color:#3269c5}.alert-default-info{color:#335282;background-color:#d9e4f5;border-color:#cad9f2}.alert-default-info hr{border-top-color:#b6caed}.alert-default-info .alert-link{color:#253b5d}.alert-warning{color:#2a2e30;background:#dda451;border-color:#d9993c}.alert-default-warning{color:#836941;background-color:#f8eddc;border-color:#f5e6ce}.alert-default-warning hr{border-top-color:#f1dbb9}.alert-default-warning .alert-link{color:#614e30}.alert-danger{color:#fff;background:#ea5455;border-color:#e73d3e}.alert-default-danger{color:#8a3f43;background-color:#fbdddd;border-color:#f9cfcf}.alert-default-danger hr{border-top-color:#f6b8b8}.alert-default-danger .alert-link{color:#672f32}.alert-light{color:#2a2e30;background:#f7f7f9;border-color:#e8e8ee}.alert-default-light{color:#919498;background-color:#fdfdfe;border-color:#fdfdfd}.alert-default-light hr{border-top-color:#f0f0f0}.alert-default-light .alert-link{color:#777a7f}.alert-dark{color:#fff;background:#22292f;border-color:#171c20}.alert-default-dark{color:#22292f;background-color:#d3d4d5;border-color:#c1c3c5}.alert-default-dark hr{border-top-color:#b4b6b9}.alert-default-dark .alert-link{color:#0d0f11}.table:not(.table-dark){color:inherit}.table.table-head-fixed thead tr:first-child th{background-color:#fff;border-bottom:0;box-shadow:inset 0 1px 0 #eff1f7,inset 0 -1px 0 #eff1f7;position:-webkit-sticky;position:sticky;top:0;z-index:10}.table.table-head-fixed.table-dark thead tr:first-child th{background-color:#1e1e1e;box-shadow:inset 0 1px 0 #313131,inset 0 -1px 0 #313131}.table.no-border,.table.no-border td,.table.no-border th{border:0}.table.text-center,.table.text-center td,.table.text-center th{text-align:center}.table.table-valign-middle tbody>tr>td,.table.table-valign-middle tbody>tr>th,.table.table-valign-middle thead>tr>td,.table.table-valign-middle thead>tr>th{vertical-align:middle}.card-body.p-0 .table tbody>tr>td:first-of-type,.card-body.p-0 .table tbody>tr>th:first-of-type,.card-body.p-0 .table thead>tr>td:first-of-type,.card-body.p-0 .table thead>tr>th:first-of-type{padding-left:3.5rem}.card-body.p-0 .table tbody>tr>td:last-of-type,.card-body.p-0 .table tbody>tr>th:last-of-type,.card-body.p-0 .table thead>tr>td:last-of-type,.card-body.p-0 .table thead>tr>th:last-of-type{padding-right:3.5rem}.carousel-control.left,.carousel-control.right{background-image:none}.carousel-control>.fa,.carousel-control>.fab,.carousel-control>.far,.carousel-control>.fas,.carousel-control>.glyphicon,.carousel-control>.ion{display:inline-block;font-size:40px;margin-top:-20px;position:absolute;top:50%;z-index:5}.small-box{border-radius:.5rem;display:block;margin-bottom:20px;position:relative}.small-box>.inner{padding:10px}.small-box>.small-box-footer{background:rgba(34,41,47,.1);color:hsla(0,0%,100%,.8);display:block;padding:3px 0;position:relative;text-align:center;text-decoration:none;z-index:10}.small-box>.small-box-footer:hover{background:rgba(34,41,47,.15);color:#fff}.small-box h3{font-size:2.2rem;font-weight:700;margin:0 0 10px;padding:0;white-space:nowrap}@media (min-width:992px){.col-lg-2 .small-box h3,.col-lg-3 .small-box h3,.col-md-2 .small-box h3,.col-md-3 .small-box h3,.col-xl-2 .small-box h3,.col-xl-3 .small-box h3{font-size:1.6rem}}@media (min-width:1200px){.col-lg-2 .small-box h3,.col-lg-3 .small-box h3,.col-md-2 .small-box h3,.col-md-3 .small-box h3,.col-xl-2 .small-box h3,.col-xl-3 .small-box h3{font-size:2.2rem}}.small-box p{font-size:1rem}.small-box p>small{color:#babfc7;display:block;font-size:.9rem;margin-top:5px}.small-box h3,.small-box p{z-index:5}.small-box .icon{color:rgba(34,41,47,.15);z-index:0}.small-box .icon>i{font-size:90px;position:absolute;right:15px;top:15px;transition:all .3s linear}.small-box .icon>i.fa,.small-box .icon>i.fab,.small-box .icon>i.far,.small-box .icon>i.fas,.small-box .icon>i.glyphicon,.small-box .icon>i.ion{font-size:70px;top:20px}.small-box:hover{text-decoration:none}.small-box:hover .icon>i{font-size:95px}.small-box:hover .icon>i.fa,.small-box:hover .icon>i.fab,.small-box:hover .icon>i.far,.small-box:hover .icon>i.fas,.small-box:hover .icon>i.glyphicon,.small-box:hover .icon>i.ion{font-size:75px}@media (max-width:767.98px){.small-box{text-align:center}.small-box .icon{display:none}.small-box p{font-size:12px}}.info-box{border-radius:.5rem;background:#fff;display:flex;margin-bottom:3rem;min-height:80px;padding:.5rem;position:relative}.info-box .progress{background-color:rgba(34,41,47,.125);height:2px;margin:5px 0}.info-box .progress .progress-bar{background-color:#fff}.info-box .info-box-icon{border-radius:.5rem;align-items:center;display:flex;font-size:1.875rem;justify-content:center;text-align:center;width:70px}.info-box .info-box-icon>img{max-width:100%}.info-box .info-box-content{flex:1;padding:5px 10px}.info-box .info-box-number{display:block;font-weight:700}.info-box .info-box-text,.info-box .progress-description{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.info-box .info-box .bg-gradient-primary,.info-box .info-box .bg-primary{color:#fff}.info-box .info-box .bg-gradient-primary .progress-bar,.info-box .info-box .bg-primary .progress-bar{background-color:#fff}.info-box .info-box .bg-gradient-secondary,.info-box .info-box .bg-secondary{color:#2a2e30}.info-box .info-box .bg-gradient-secondary .progress-bar,.info-box .info-box .bg-secondary .progress-bar{background-color:#2a2e30}.info-box .info-box .bg-gradient-success,.info-box .info-box .bg-success{color:#fff}.info-box .info-box .bg-gradient-success .progress-bar,.info-box .info-box .bg-success .progress-bar{background-color:#fff}.info-box .info-box .bg-gradient-info,.info-box .info-box .bg-info{color:#fff}.info-box .info-box .bg-gradient-info .progress-bar,.info-box .info-box .bg-info .progress-bar{background-color:#fff}.info-box .info-box .bg-gradient-warning,.info-box .info-box .bg-warning{color:#2a2e30}.info-box .info-box .bg-gradient-warning .progress-bar,.info-box .info-box .bg-warning .progress-bar{background-color:#2a2e30}.info-box .info-box .bg-danger,.info-box .info-box .bg-gradient-danger{color:#fff}.info-box .info-box .bg-danger .progress-bar,.info-box .info-box .bg-gradient-danger .progress-bar{background-color:#fff}.info-box .info-box .bg-gradient-light,.info-box .info-box .bg-light{color:#2a2e30}.info-box .info-box .bg-gradient-light .progress-bar,.info-box .info-box .bg-light .progress-bar{background-color:#2a2e30}.info-box .info-box .bg-dark,.info-box .info-box .bg-gradient-dark{color:#fff}.info-box .info-box .bg-dark .progress-bar,.info-box .info-box .bg-gradient-dark .progress-bar{background-color:#fff}.info-box .info-box-more{display:block}.info-box .progress-description{margin:0}@media (min-width:768px){.col-lg-2 .info-box .progress-description,.col-lg-3 .info-box .progress-description,.col-md-2 .info-box .progress-description,.col-md-3 .info-box .progress-description,.col-xl-2 .info-box .progress-description,.col-xl-3 .info-box .progress-description{display:none}}@media (min-width:992px){.col-lg-2 .info-box .progress-description,.col-lg-3 .info-box .progress-description,.col-md-2 .info-box .progress-description,.col-md-3 .info-box .progress-description,.col-xl-2 .info-box .progress-description,.col-xl-3 .info-box .progress-description{font-size:.75rem;display:block}}@media (min-width:1200px){.col-lg-2 .info-box .progress-description,.col-lg-3 .info-box .progress-description,.col-md-2 .info-box .progress-description,.col-md-3 .info-box .progress-description,.col-xl-2 .info-box .progress-description,.col-xl-3 .info-box .progress-description{font-size:1rem;display:block}}.timeline{margin:0 0 45px;padding:0;position:relative}.timeline:before{border-radius:.5rem;background:#dae1e7;bottom:0;content:"";left:31px;margin:0;position:absolute;top:0;width:4px}.timeline>div{margin-bottom:15px;margin-right:10px;position:relative}.timeline>div:after,.timeline>div:before{content:"";display:table}.timeline>div>.timeline-item{border-radius:.5rem;background:#fff;color:#4e5154;margin-left:60px;margin-right:15px;margin-top:0;padding:0;position:relative}.timeline>div>.timeline-item>.time{color:#999;float:right;font-size:12px;padding:10px}.timeline>div>.timeline-item>.timeline-header{border-bottom:1px solid rgba(34,41,47,.125);color:#4e5154;font-size:16px;line-height:1.1;margin:0;padding:10px}.timeline>div>.timeline-item>.timeline-header>a{font-weight:600}.timeline>div>.timeline-item>.timeline-body,.timeline>div>.timeline-item>.timeline-footer{padding:10px}.timeline>div>.timeline-item>.timeline-body>img{margin:10px}.timeline>div>.timeline-item>.timeline-body>dl,.timeline>div>.timeline-item>.timeline-body ol,.timeline>div>.timeline-item>.timeline-body ul{margin:0}.timeline>div>.timeline-item>.timeline-footer>a{color:#fff}.timeline>div>.fa,.timeline>div>.fab,.timeline>div>.far,.timeline>div>.fas,.timeline>div>.glyphicon,.timeline>div>.ion{background:#adb5bd;border-radius:50%;font-size:15px;height:30px;left:18px;line-height:30px;position:absolute;text-align:center;top:0;width:30px}.timeline>.time-label>span{border-radius:4px;background-color:#fff;display:inline-block;font-weight:600;padding:5px}.timeline-inverse>div>.timeline-item{background:#babfc7;border:1px solid #dae1e7}.timeline-inverse>div>.timeline-item>.timeline-header{border-bottom-color:#dae1e7}.products-list{list-style:none;margin:0;padding:0}.products-list>.item{border-radius:.5rem;background:#fff;padding:10px 0}.products-list>.item:after{display:block;clear:both;content:""}.products-list .product-img{float:left}.products-list .product-img img{height:50px;width:50px}.products-list .product-info{margin-left:60px}.products-list .product-title{font-weight:600}.products-list .product-description{color:#b8c2cc;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.product-list-in-card>.item{border-radius:0;border-bottom:1px solid rgba(34,41,47,.125)}.product-list-in-card>.item:last-of-type{border-bottom-width:0}.direct-chat .card-body{overflow-x:hidden;padding:0;position:relative}.direct-chat.chat-pane-open .direct-chat-contacts{transform:translate(0)}.direct-chat.timestamp-light .direct-chat-timestamp{color:#42484b}.direct-chat.timestamp-dark .direct-chat-timestamp{color:#ccc}.direct-chat-messages{transform:translate(0);height:250px;overflow:auto;padding:10px}.direct-chat-msg,.direct-chat-text{display:block}.direct-chat-msg{margin-bottom:10px}.direct-chat-msg:after{display:block;clear:both;content:""}.direct-chat-contacts,.direct-chat-messages{transition:transform .5s ease-in-out}.direct-chat-text{border-radius:.6rem;background:#d2d6de;border:1px solid #d2d6de;color:#444;margin:5px 0 0 50px;padding:5px 10px;position:relative}.direct-chat-text:after,.direct-chat-text:before{border:solid transparent;border-right:solid #d2d6de;content:" ";height:0;pointer-events:none;position:absolute;right:100%;top:15px;width:0}.direct-chat-text:after{border-width:5px;margin-top:-5px}.direct-chat-text:before{border-width:6px;margin-top:-6px}.right .direct-chat-text{margin-left:0;margin-right:50px}.right .direct-chat-text:after,.right .direct-chat-text:before{border-left-color:#d2d6de;border-right-color:transparent;left:100%;right:auto}.direct-chat-img{border-radius:50%;float:left;height:40px;width:40px}.right .direct-chat-img{float:right}.direct-chat-infos{display:block;font-size:1rem;margin-bottom:2px}.direct-chat-name{font-weight:600}.direct-chat-timestamp{color:#697582}.direct-chat-contacts-open .direct-chat-contacts{transform:translate(0)}.direct-chat-contacts{transform:translate(101%);background:#22292f;bottom:0;color:#fff;height:250px;overflow:auto;position:absolute;top:0;width:100%}.direct-chat-contacts-light{background:#f7f7f9}.direct-chat-contacts-light .contacts-list-name{color:#4e5154}.direct-chat-contacts-light .contacts-list-date{color:#b8c2cc}.direct-chat-contacts-light .contacts-list-msg{color:#9aa9b7}.contacts-list{padding-left:0;list-style:none}.contacts-list>li{border-bottom:1px solid rgba(34,41,47,.2);margin:0;padding:10px}.contacts-list>li:after{display:block;clear:both;content:""}.contacts-list>li:last-of-type{border-bottom:0}.contacts-list-img{border-radius:50%;float:left;width:40px}.contacts-list-info{color:#fff;margin-left:45px}.contacts-list-name,.contacts-list-status{display:block}.contacts-list-name{font-weight:600}.contacts-list-status{font-size:1rem}.contacts-list-date{color:#636363;font-weight:400}.contacts-list-msg{color:#4a4a4a}.direct-chat-primary .right>.direct-chat-text{background:#6d8be6;border-color:#6d8be6;color:#fff}.direct-chat-primary .right>.direct-chat-text:after,.direct-chat-primary .right>.direct-chat-text:before{border-left-color:#6d8be6}.direct-chat-secondary .right>.direct-chat-text{background:#b8c2cc;border-color:#b8c2cc;color:#2a2e30}.direct-chat-secondary .right>.direct-chat-text:after,.direct-chat-secondary .right>.direct-chat-text:before{border-left-color:#b8c2cc}.direct-chat-success .right>.direct-chat-text{background:#21b978;border-color:#21b978;color:#fff}.direct-chat-success .right>.direct-chat-text:after,.direct-chat-success .right>.direct-chat-text:before{border-left-color:#21b978}.direct-chat-info .right>.direct-chat-text{background:#4277cf;border-color:#4277cf;color:#fff}.direct-chat-info .right>.direct-chat-text:after,.direct-chat-info .right>.direct-chat-text:before{border-left-color:#4277cf}.direct-chat-warning .right>.direct-chat-text{background:#dda451;border-color:#dda451;color:#2a2e30}.direct-chat-warning .right>.direct-chat-text:after,.direct-chat-warning .right>.direct-chat-text:before{border-left-color:#dda451}.direct-chat-danger .right>.direct-chat-text{background:#ea5455;border-color:#ea5455;color:#fff}.direct-chat-danger .right>.direct-chat-text:after,.direct-chat-danger .right>.direct-chat-text:before{border-left-color:#ea5455}.direct-chat-light .right>.direct-chat-text{background:#f7f7f9;border-color:#f7f7f9;color:#2a2e30}.direct-chat-light .right>.direct-chat-text:after,.direct-chat-light .right>.direct-chat-text:before{border-left-color:#f7f7f9}.direct-chat-dark .right>.direct-chat-text{background:#22292f;border-color:#22292f;color:#fff}.direct-chat-dark .right>.direct-chat-text:after,.direct-chat-dark .right>.direct-chat-text:before{border-left-color:#22292f}.direct-chat-lightblue .right>.direct-chat-text{background:#3c8dbc;border-color:#3c8dbc;color:#fff}.direct-chat-lightblue .right>.direct-chat-text:after,.direct-chat-lightblue .right>.direct-chat-text:before{border-left-color:#3c8dbc}.direct-chat-navy .right>.direct-chat-text{background:#001f3f;border-color:#001f3f;color:#fff}.direct-chat-navy .right>.direct-chat-text:after,.direct-chat-navy .right>.direct-chat-text:before{border-left-color:#001f3f}.direct-chat-olive .right>.direct-chat-text{background:#3d9970;border-color:#3d9970;color:#fff}.direct-chat-olive .right>.direct-chat-text:after,.direct-chat-olive .right>.direct-chat-text:before{border-left-color:#3d9970}.direct-chat-lime .right>.direct-chat-text{background:#01ff70;border-color:#01ff70;color:#2a2e30}.direct-chat-lime .right>.direct-chat-text:after,.direct-chat-lime .right>.direct-chat-text:before{border-left-color:#01ff70}.direct-chat-fuchsia .right>.direct-chat-text{background:#f012be;border-color:#f012be;color:#fff}.direct-chat-fuchsia .right>.direct-chat-text:after,.direct-chat-fuchsia .right>.direct-chat-text:before{border-left-color:#f012be}.direct-chat-maroon .right>.direct-chat-text{background:#d81b60;border-color:#d81b60;color:#fff}.direct-chat-maroon .right>.direct-chat-text:after,.direct-chat-maroon .right>.direct-chat-text:before{border-left-color:#d81b60}.direct-chat-blue .right>.direct-chat-text{background:#3085d6;border-color:#3085d6;color:#fff}.direct-chat-blue .right>.direct-chat-text:after,.direct-chat-blue .right>.direct-chat-text:before{border-left-color:#3085d6}.direct-chat-indigo .right>.direct-chat-text{background:#5c6bc6;border-color:#5c6bc6;color:#fff}.direct-chat-indigo .right>.direct-chat-text:after,.direct-chat-indigo .right>.direct-chat-text:before{border-left-color:#5c6bc6}.direct-chat-purple .right>.direct-chat-text{background:#6f42c1;border-color:#6f42c1;color:#fff}.direct-chat-purple .right>.direct-chat-text:after,.direct-chat-purple .right>.direct-chat-text:before{border-left-color:#6f42c1}.direct-chat-pink .right>.direct-chat-text{background:#ff8acc;border-color:#ff8acc;color:#2a2e30}.direct-chat-pink .right>.direct-chat-text:after,.direct-chat-pink .right>.direct-chat-text:before{border-left-color:#ff8acc}.direct-chat-red .right>.direct-chat-text{background:#ea5455;border-color:#ea5455;color:#fff}.direct-chat-red .right>.direct-chat-text:after,.direct-chat-red .right>.direct-chat-text:before{border-left-color:#ea5455}.direct-chat-orange .right>.direct-chat-text{background:#dda451;border-color:#dda451;color:#2a2e30}.direct-chat-orange .right>.direct-chat-text:after,.direct-chat-orange .right>.direct-chat-text:before{border-left-color:#dda451}.direct-chat-yellow .right>.direct-chat-text{background:#edc30e;border-color:#edc30e;color:#2a2e30}.direct-chat-yellow .right>.direct-chat-text:after,.direct-chat-yellow .right>.direct-chat-text:before{border-left-color:#edc30e}.direct-chat-green .right>.direct-chat-text{background:#21b978;border-color:#21b978;color:#fff}.direct-chat-green .right>.direct-chat-text:after,.direct-chat-green .right>.direct-chat-text:before{border-left-color:#21b978}.direct-chat-teal .right>.direct-chat-text{background:#20c997;border-color:#20c997;color:#fff}.direct-chat-teal .right>.direct-chat-text:after,.direct-chat-teal .right>.direct-chat-text:before{border-left-color:#20c997}.direct-chat-cyan .right>.direct-chat-text{background:#7367f0;border-color:#7367f0;color:#fff}.direct-chat-cyan .right>.direct-chat-text:after,.direct-chat-cyan .right>.direct-chat-text:before{border-left-color:#7367f0}.direct-chat-white .right>.direct-chat-text{background:#fff;border-color:#fff;color:#2a2e30}.direct-chat-white .right>.direct-chat-text:after,.direct-chat-white .right>.direct-chat-text:before{border-left-color:#fff}.direct-chat-gray .right>.direct-chat-text{background:#b8c2cc;border-color:#b8c2cc;color:#2a2e30}.direct-chat-gray .right>.direct-chat-text:after,.direct-chat-gray .right>.direct-chat-text:before{border-left-color:#b8c2cc}.direct-chat-gray-dark .right>.direct-chat-text{background:#1e1e1e;border-color:#1e1e1e;color:#fff}.direct-chat-gray-dark .right>.direct-chat-text:after,.direct-chat-gray-dark .right>.direct-chat-text:before{border-left-color:#1e1e1e}.users-list{padding-left:0;list-style:none}.users-list>li{float:left;padding:10px;text-align:center;width:25%}.users-list>li img{border-radius:50%;height:auto;max-width:100%}.users-list>li>a:hover,.users-list>li>a:hover .users-list-name{color:#999}.users-list-date,.users-list-name{display:block}.users-list-name{color:#4e5154;font-size:1rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.users-list-date{color:#748290;font-size:12px}.card-widget{border:0;position:relative}.widget-user .widget-user-header{border-top-left-radius:.5rem;border-top-right-radius:.5rem;height:135px;padding:1rem;text-align:center}.widget-user .widget-user-username{font-size:25px;font-weight:300;margin-bottom:0;margin-top:0;text-shadow:0 1px 1px rgba(34,41,47,.2)}.widget-user .widget-user-desc{margin-top:0}.widget-user .widget-user-image{left:50%;margin-left:-45px;position:absolute;top:80px}.widget-user .widget-user-image>img{border:3px solid #fff;height:auto;width:90px}.widget-user .card-footer{padding-top:50px}.widget-user-2 .widget-user-header{border-top-left-radius:.5rem;border-top-right-radius:.5rem;padding:1rem}.widget-user-2 .widget-user-username{font-size:25px;font-weight:300;margin-bottom:5px;margin-top:5px}.widget-user-2 .widget-user-desc{margin-top:0}.widget-user-2 .widget-user-desc,.widget-user-2 .widget-user-username{margin-left:75px}.widget-user-2 .widget-user-image>img{float:left;height:auto;width:65px}.mailbox-messages>.table{margin:0}.mailbox-controls{padding:5px}.mailbox-controls.with-border,.mailbox-read-info{border-bottom:1px solid rgba(34,41,47,.125)}.mailbox-read-info{padding:10px}.mailbox-read-info h3{font-size:20px;margin:0}.mailbox-read-info h5{margin:0;padding:5px 0 0}.mailbox-read-time{color:#999;font-size:13px}.mailbox-read-message{padding:10px}.mailbox-attachments{padding-left:0;list-style:none}.mailbox-attachments li{border:1px solid #eee;float:left;margin-bottom:10px;margin-right:10px;width:200px}.mailbox-attachment-name{color:#666;font-weight:700}.mailbox-attachment-icon,.mailbox-attachment-info,.mailbox-attachment-size{display:block}.mailbox-attachment-info{background:#babfc7;padding:10px}.mailbox-attachment-size{color:#999;font-size:12px}.mailbox-attachment-size>span{display:inline-block;padding-top:.75rem}.mailbox-attachment-icon{color:#666;font-size:65px;max-height:132.5px;padding:20px 10px;text-align:center}.mailbox-attachment-icon.has-img{padding:0}.mailbox-attachment-icon.has-img>img{height:auto;max-width:100%}.lockscreen{background:#ededed}.lockscreen .lockscreen-name{font-weight:600;text-align:center}.lockscreen-logo{font-size:35px;font-weight:300;margin-bottom:25px;text-align:center}.lockscreen-logo a{color:#4e5154}.lockscreen-wrapper{margin:10% auto 0;max-width:400px}.lockscreen-item{border-radius:4px;background:#fff;margin:10px auto 30px;padding:0;position:relative;width:290px}.lockscreen-image{border-radius:50%;background:#fff;left:-10px;padding:5px;position:absolute;top:-25px;z-index:10}.lockscreen-image>img{border-radius:50%;height:70px;width:70px}.lockscreen-credentials{margin-left:70px}.lockscreen-credentials .form-control{border:0}.lockscreen-credentials .btn{background-color:#fff;border:0;padding:0 10px}.lockscreen-footer{margin-top:10px}.login-logo,.register-logo{font-size:2.1rem;font-weight:300;margin-bottom:.9rem;text-align:center}.login-logo a,.register-logo a{color:#4e5154}.login-page,.register-page{align-items:center;background:#ededed;display:flex;flex-direction:column;height:100vh;justify-content:center}.login-box,.register-box{width:360px}@media (max-width:576px){.login-box,.register-box{margin-top:.5rem;width:90%}}.login-card-body,.register-card-body{background:#fff;border-top:0;color:#666;padding:20px}.login-card-body .input-group .form-control,.register-card-body .input-group .form-control{border-right:0}.login-card-body .input-group .form-control:focus,.register-card-body .input-group .form-control:focus{box-shadow:none}.login-card-body .input-group .form-control:focus~.input-group-append .input-group-text,.register-card-body .input-group .form-control:focus~.input-group-append .input-group-text{border-color:#6d8be6}.login-card-body .input-group .form-control.is-valid:focus,.register-card-body .input-group .form-control.is-valid:focus{box-shadow:none}.login-card-body .input-group .form-control.is-valid~.input-group-append .input-group-text,.register-card-body .input-group .form-control.is-valid~.input-group-append .input-group-text{border-color:#21b978}.login-card-body .input-group .form-control.is-invalid:focus,.register-card-body .input-group .form-control.is-invalid:focus{box-shadow:none}.login-card-body .input-group .form-control.is-invalid~.input-group-append .input-group-text,.register-card-body .input-group .form-control.is-invalid~.input-group-append .input-group-text{border-color:#ea5455}.login-card-body .input-group .input-group-text,.register-card-body .input-group .input-group-text{background-color:transparent;border-bottom-right-radius:.5rem;border-left:0;border-top-right-radius:.5rem;color:#777;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.login-box-msg,.register-box-msg{margin:0;padding:0 20px 20px;text-align:center}.social-auth-links{margin:10px 0}.error-page{margin:20px auto 0;width:600px}@media (max-width:767.98px){.error-page{width:100%}}.error-page>.headline{float:left;font-size:100px;font-weight:300}@media (max-width:767.98px){.error-page>.headline{float:none;text-align:center}}.error-page>.error-content{display:block;margin-left:190px}@media (max-width:767.98px){.error-page>.error-content{margin-left:0}}.error-page>.error-content>h3{font-size:25px;font-weight:300}@media (max-width:767.98px){.error-page>.error-content>h3{text-align:center}}.invoice{background:#fff;border:1px solid rgba(34,41,47,.125);position:relative}.invoice-title{margin-top:0}.profile-user-img{border:3px solid #adb5bd;margin:0 auto;padding:3px;width:100px}.profile-username{font-size:21px;margin-top:5px}.post{border-bottom:1px solid #adb5bd;color:#666;margin-bottom:15px;padding-bottom:15px}.post:last-of-type{border-bottom:0;margin-bottom:0;padding-bottom:0}.post .user-block{margin-bottom:15px;width:100%}.post .row{width:100%}.product-image{max-width:100%;height:auto;width:100%}.product-image-thumbs{align-items:stretch;display:flex;margin-top:2rem}.product-image-thumb{border-radius:.5rem;background-color:#eff1f7;border:1px solid #dae1e7;display:flex;margin-right:1rem;max-width:7rem;padding:.5rem}.product-image-thumb img{max-width:100%;height:auto;align-self:center}.product-image-thumb:hover{opacity:.5}.product-share a{margin-right:.5rem}.projects td{vertical-align:middle}.projects .list-inline{margin-bottom:0}.projects .table-avatar img,.projects img.table-avatar{border-radius:50%;display:inline;width:2.5rem}.projects .project-state{text-align:center}.fc-button{background:#babfc7;background-image:none;border-color:#ddd;color:#4e5154}.fc-button.hover,.fc-button:active,.fc-button:hover{background-color:#e9e9e9}.fc-header-title h2{color:#666;font-size:15px;line-height:1.6em;margin-left:10px}.fc-header-right{padding-right:10px}.fc-header-left{padding-left:10px}.fc-widget-header{background:#fafafa}.fc-grid{border:0;width:100%}.fc-widget-content:first-of-type,.fc-widget-header:first-of-type{border-left:0;border-right:0}.fc-widget-content:last-of-type,.fc-widget-header:last-of-type{border-right:0}.fc-toolbar,.fc-toolbar.fc-header-toolbar{margin:0;padding:1rem}@media (max-width:575.98px){.fc-toolbar{flex-direction:column}.fc-toolbar .fc-left{order:1;margin-bottom:.5rem}.fc-toolbar .fc-center{order:0;margin-bottom:.375rem}.fc-toolbar .fc-right{order:2}}.fc-day-number{font-size:20px;font-weight:300;padding-right:10px}.fc-color-picker{list-style:none;margin:0;padding:0}.fc-color-picker>li{float:left;font-size:30px;line-height:30px;margin-right:5px}.fc-color-picker>li .fa,.fc-color-picker>li .fab,.fc-color-picker>li .far,.fc-color-picker>li .fas,.fc-color-picker>li .glyphicon,.fc-color-picker>li .ion{transition:transform .3s linear}.fc-color-picker>li .fa:hover,.fc-color-picker>li .fab:hover,.fc-color-picker>li .far:hover,.fc-color-picker>li .fas:hover,.fc-color-picker>li .glyphicon:hover,.fc-color-picker>li .ion:hover{transform:rotate(30deg)}#add-new-event{transition:all .3s linear}.external-event{border-radius:.5rem;cursor:move;font-weight:700;margin-bottom:4px;padding:5px 10px}.select2-container--default .select2-selection--single{border:1px solid rgba(0,0,0,.2);padding:.875rem .7rem;height:34px}.select2-container--default.select2-container--open .select2-selection--single{border-color:#dae1f9}.select2-container--default .select2-dropdown{border:1px solid rgba(0,0,0,.2)}.select2-container--default .select2-results__option{padding:6px 12px;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-user-select:none}.select2-container--default .select2-selection--single .select2-selection__rendered{padding-left:0;height:auto;margin-top:-3px}.select2-container--default[dir=rtl] .select2-selection--single .select2-selection__rendered{padding-right:6px;padding-left:20px}.select2-container--default .select2-selection--single .select2-selection__arrow{height:31px;right:6px}.select2-container--default .select2-selection--single .select2-selection__arrow b{margin-top:0}.select2-container--default .select2-dropdown .select2-search__field,.select2-container--default .select2-search--inline .select2-search__field{border:1px solid rgba(0,0,0,.2)}.select2-container--default .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-search--inline .select2-search__field:focus{outline:none;border:1px solid #6d8be6}.select2-container--default .select2-dropdown.select2-dropdown--below{border-top:0}.select2-container--default .select2-dropdown.select2-dropdown--above{border-bottom:0}.select2-container--default .select2-results__option[aria-disabled=true]{color:#b8c2cc}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#dae1e7}.select2-container--default .select2-results__option[aria-selected=true],.select2-container--default .select2-results__option[aria-selected=true]:hover{color:#2a2e30}.select2-container--default .select2-results__option--highlighted{background-color:#6d8be6;color:#fff}.select2-container--default .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#6081e4;color:#fff}.select2-container--default .select2-selection--multiple{border:1px solid rgba(0,0,0,.2);min-height:34px}.select2-container--default .select2-selection--multiple:focus{border-color:#6d8be6}.select2-container--default .select2-selection--multiple .select2-selection__rendered{padding:0 .35rem .7rem;margin-bottom:-.35rem}.select2-container--default .select2-selection--multiple .select2-selection__rendered li:first-child.select2-search.select2-search--inline{width:100%;margin-left:.35rem}.select2-container--default .select2-selection--multiple .select2-selection__rendered li:first-child.select2-search.select2-search--inline .select2-search__field{width:100%!important}.select2-container--default .select2-selection--multiple .select2-selection__rendered .select2-search.select2-search--inline .select2-search__field{border:0;margin-top:6px}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#6d8be6;border-color:#577ae2;color:#fff;padding:0 10px;margin-top:.31rem}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7);float:right;margin-left:5px;margin-right:-2px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-selection--multiple.text-sm .select2-search.select2-search--inline .select2-search__field,.text-sm .select2-container--default .select2-selection--multiple .select2-search.select2-search--inline .select2-search__field{margin-top:8px}.select2-container--default .select2-selection--multiple.text-sm .select2-selection__choice,.text-sm .select2-container--default .select2-selection--multiple .select2-selection__choice{margin-top:.4rem}.select2-container--default.select2-container--focus .select2-selection--multiple,.select2-container--default.select2-container--focus .select2-selection--single{border-color:#6d8be6}.select2-container--default.select2-container--focus .select2-search__field{border:0}.select2-container--default .select2-selection--single .select2-selection__rendered li{padding-right:10px}.input-group-prepend~.select2-container--default .select2-selection{border-bottom-left-radius:0;border-top-left-radius:0}.input-group>.select2-container--default:not(:last-child) .select2-selection{border-bottom-right-radius:0;border-top-right-radius:0}.select2-container--bootstrap4.select2-container--focus .select2-selection{box-shadow:none}select.form-control-sm~.select2-container--default{font-size:1rem}.text-sm .select2-container--default .select2-selection--single,select.form-control-sm~.select2-container--default .select2-selection--single{height:2rem}.text-sm .select2-container--default .select2-selection--single .select2-selection__rendered,select.form-control-sm~.select2-container--default .select2-selection--single .select2-selection__rendered{margin-top:-.4rem}.text-sm .select2-container--default .select2-selection--single .select2-selection__arrow,select.form-control-sm~.select2-container--default .select2-selection--single .select2-selection__arrow{top:-.12rem}.text-sm .select2-container--default .select2-selection--multiple,select.form-control-sm~.select2-container--default .select2-selection--multiple{min-height:2rem}.text-sm .select2-container--default .select2-selection--multiple .select2-selection__rendered,select.form-control-sm~.select2-container--default .select2-selection--multiple .select2-selection__rendered{padding:0 .75rem .5rem;margin-top:-.3rem}.text-sm .select2-container--default .select2-selection--multiple .select2-selection__rendered li:first-child.select2-search.select2-search--inline,select.form-control-sm~.select2-container--default .select2-selection--multiple .select2-selection__rendered li:first-child.select2-search.select2-search--inline{margin-left:.75rem}.text-sm .select2-container--default .select2-selection--multiple .select2-selection__rendered .select2-search.select2-search--inline .select2-search__field,select.form-control-sm~.select2-container--default .select2-selection--multiple .select2-selection__rendered .select2-search.select2-search--inline .select2-search__field{margin-top:6px}.select2-primary+.select2-container--default.select2-container--focus .select2-selection--single,.select2-primary+.select2-container--default.select2-container--open .select2-selection--single{border-color:#dae1f9}.select2-container--default .select2-primary.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-primary .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-primary .select2-search--inline .select2-search__field:focus,.select2-primary .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-primary .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-primary .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #dae1f9}.select2-container--default .select2-primary .select2-results__option--highlighted,.select2-primary .select2-container--default .select2-results__option--highlighted{background-color:#6d8be6;color:#fff}.select2-container--default .select2-primary .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-primary .select2-results__option--highlighted[aria-selected]:hover,.select2-primary .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-primary .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#6081e4;color:#fff}.select2-container--default .select2-primary .select2-selection--multiple:focus,.select2-primary .select2-container--default .select2-selection--multiple:focus{border-color:#dae1f9}.select2-container--default .select2-primary .select2-selection--multiple .select2-selection__choice,.select2-primary .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#6d8be6;border-color:#577ae2;color:#fff}.select2-container--default .select2-primary .select2-selection--multiple .select2-selection__choice__remove,.select2-primary .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-primary .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-primary .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-primary.select2-container--focus .select2-selection--multiple,.select2-primary .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#dae1f9}.select2-secondary+.select2-container--default.select2-container--focus .select2-selection--single,.select2-secondary+.select2-container--default.select2-container--open .select2-selection--single{border-color:#fff}.select2-container--default .select2-secondary.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-secondary .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-secondary .select2-search--inline .select2-search__field:focus,.select2-secondary .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-secondary .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-secondary .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #fff}.select2-container--default .select2-secondary .select2-results__option--highlighted,.select2-secondary .select2-container--default .select2-results__option--highlighted{background-color:#b8c2cc;color:#2a2e30}.select2-container--default .select2-secondary .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-secondary .select2-results__option--highlighted[aria-selected]:hover,.select2-secondary .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-secondary .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#afbac6;color:#2a2e30}.select2-container--default .select2-secondary .select2-selection--multiple:focus,.select2-secondary .select2-container--default .select2-selection--multiple:focus{border-color:#fff}.select2-container--default .select2-secondary .select2-selection--multiple .select2-selection__choice,.select2-secondary .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#b8c2cc;border-color:#a9b5c1;color:#2a2e30}.select2-container--default .select2-secondary .select2-selection--multiple .select2-selection__choice__remove,.select2-secondary .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:rgba(42,46,48,.7)}.select2-container--default .select2-secondary .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-secondary .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#2a2e30}.select2-container--default .select2-secondary.select2-container--focus .select2-selection--multiple,.select2-secondary .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#fff}.select2-success+.select2-container--default.select2-container--focus .select2-selection--single,.select2-success+.select2-container--default.select2-container--open .select2-selection--single{border-color:#73e6b5}.select2-container--default .select2-success.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-success .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-success .select2-search--inline .select2-search__field:focus,.select2-success .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-success .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-success .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #73e6b5}.select2-container--default .select2-success .select2-results__option--highlighted,.select2-success .select2-container--default .select2-results__option--highlighted{background-color:#21b978;color:#fff}.select2-container--default .select2-success .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-success .select2-results__option--highlighted[aria-selected]:hover,.select2-success .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-success .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#1fac70;color:#fff}.select2-container--default .select2-success .select2-selection--multiple:focus,.select2-success .select2-container--default .select2-selection--multiple:focus{border-color:#73e6b5}.select2-container--default .select2-success .select2-selection--multiple .select2-selection__choice,.select2-success .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#21b978;border-color:#1da36a;color:#fff}.select2-container--default .select2-success .select2-selection--multiple .select2-selection__choice__remove,.select2-success .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-success .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-success .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-success.select2-container--focus .select2-selection--multiple,.select2-success .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#73e6b5}.select2-info+.select2-container--default.select2-container--focus .select2-selection--single,.select2-info+.select2-container--default.select2-container--open .select2-selection--single{border-color:#a8c0e9}.select2-container--default .select2-info.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-info .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-info .select2-search--inline .select2-search__field:focus,.select2-info .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-info .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-info .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #a8c0e9}.select2-container--default .select2-info .select2-results__option--highlighted,.select2-info .select2-container--default .select2-results__option--highlighted{background-color:#4277cf;color:#fff}.select2-container--default .select2-info .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-info .select2-results__option--highlighted[aria-selected]:hover,.select2-info .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-info .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#366ecc;color:#fff}.select2-container--default .select2-info .select2-selection--multiple:focus,.select2-info .select2-container--default .select2-selection--multiple:focus{border-color:#a8c0e9}.select2-container--default .select2-info .select2-selection--multiple .select2-selection__choice,.select2-info .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#4277cf;border-color:#3269c5;color:#fff}.select2-container--default .select2-info .select2-selection--multiple .select2-selection__choice__remove,.select2-info .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-info .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-info .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-info.select2-container--focus .select2-selection--multiple,.select2-info .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#a8c0e9}.select2-warning+.select2-container--default.select2-container--focus .select2-selection--single,.select2-warning+.select2-container--default.select2-container--open .select2-selection--single{border-color:#f2dcbc}.select2-container--default .select2-warning.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-warning .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-warning .select2-search--inline .select2-search__field:focus,.select2-warning .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-warning .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-warning .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #f2dcbc}.select2-container--default .select2-warning .select2-results__option--highlighted,.select2-warning .select2-container--default .select2-results__option--highlighted{background-color:#dda451;color:#2a2e30}.select2-container--default .select2-warning .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-warning .select2-results__option--highlighted[aria-selected]:hover,.select2-warning .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-warning .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#da9d44;color:#2a2e30}.select2-container--default .select2-warning .select2-selection--multiple:focus,.select2-warning .select2-container--default .select2-selection--multiple:focus{border-color:#f2dcbc}.select2-container--default .select2-warning .select2-selection--multiple .select2-selection__choice,.select2-warning .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#dda451;border-color:#d9993c;color:#2a2e30}.select2-container--default .select2-warning .select2-selection--multiple .select2-selection__choice__remove,.select2-warning .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:rgba(42,46,48,.7)}.select2-container--default .select2-warning .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-warning .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#2a2e30}.select2-container--default .select2-warning.select2-container--focus .select2-selection--multiple,.select2-warning .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#f2dcbc}.select2-danger+.select2-container--default.select2-container--focus .select2-selection--single,.select2-danger+.select2-container--default.select2-container--open .select2-selection--single{border-color:#f8c6c6}.select2-container--default .select2-danger.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-danger .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-danger .select2-search--inline .select2-search__field:focus,.select2-danger .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-danger .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-danger .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #f8c6c6}.select2-container--default .select2-danger .select2-results__option--highlighted,.select2-danger .select2-container--default .select2-results__option--highlighted{background-color:#ea5455;color:#fff}.select2-container--default .select2-danger .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-danger .select2-results__option--highlighted[aria-selected]:hover,.select2-danger .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-danger .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#e84647;color:#fff}.select2-container--default .select2-danger .select2-selection--multiple:focus,.select2-danger .select2-container--default .select2-selection--multiple:focus{border-color:#f8c6c6}.select2-container--default .select2-danger .select2-selection--multiple .select2-selection__choice,.select2-danger .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#ea5455;border-color:#e73d3e;color:#fff}.select2-container--default .select2-danger .select2-selection--multiple .select2-selection__choice__remove,.select2-danger .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-danger .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-danger .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-danger.select2-container--focus .select2-selection--multiple,.select2-danger .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#f8c6c6}.select2-light+.select2-container--default.select2-container--focus .select2-selection--single,.select2-light+.select2-container--default.select2-container--open .select2-selection--single{border-color:#fff}.select2-container--default .select2-light.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-light .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-light .select2-search--inline .select2-search__field:focus,.select2-light .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-light .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-light .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #fff}.select2-container--default .select2-light .select2-results__option--highlighted,.select2-light .select2-container--default .select2-results__option--highlighted{background-color:#f7f7f9;color:#2a2e30}.select2-container--default .select2-light .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-light .select2-results__option--highlighted[aria-selected]:hover,.select2-light .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-light .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#eeeef2;color:#2a2e30}.select2-container--default .select2-light .select2-selection--multiple:focus,.select2-light .select2-container--default .select2-selection--multiple:focus{border-color:#fff}.select2-container--default .select2-light .select2-selection--multiple .select2-selection__choice,.select2-light .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#f7f7f9;border-color:#e8e8ee;color:#2a2e30}.select2-container--default .select2-light .select2-selection--multiple .select2-selection__choice__remove,.select2-light .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:rgba(42,46,48,.7)}.select2-container--default .select2-light .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-light .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#2a2e30}.select2-container--default .select2-light.select2-container--focus .select2-selection--multiple,.select2-light .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#fff}.select2-dark+.select2-container--default.select2-container--focus .select2-selection--single,.select2-dark+.select2-container--default.select2-container--open .select2-selection--single{border-color:#586a79}.select2-container--default .select2-dark.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-dark .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-dark .select2-search--inline .select2-search__field:focus,.select2-dark .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-dark .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-dark .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #586a79}.select2-container--default .select2-dark .select2-results__option--highlighted,.select2-dark .select2-container--default .select2-results__option--highlighted{background-color:#22292f;color:#fff}.select2-container--default .select2-dark .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-dark .select2-results__option--highlighted[aria-selected]:hover,.select2-dark .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-dark .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#1c2126;color:#fff}.select2-container--default .select2-dark .select2-selection--multiple:focus,.select2-dark .select2-container--default .select2-selection--multiple:focus{border-color:#586a79}.select2-container--default .select2-dark .select2-selection--multiple .select2-selection__choice,.select2-dark .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#22292f;border-color:#171c20;color:#fff}.select2-container--default .select2-dark .select2-selection--multiple .select2-selection__choice__remove,.select2-dark .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-dark .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-dark .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-dark.select2-container--focus .select2-selection--multiple,.select2-dark .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#586a79}.select2-lightblue+.select2-container--default.select2-container--focus .select2-selection--single,.select2-lightblue+.select2-container--default.select2-container--open .select2-selection--single{border-color:#99c5de}.select2-container--default .select2-lightblue.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-lightblue .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-lightblue .select2-search--inline .select2-search__field:focus,.select2-lightblue .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-lightblue .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-lightblue .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #99c5de}.select2-container--default .select2-lightblue .select2-results__option--highlighted,.select2-lightblue .select2-container--default .select2-results__option--highlighted{background-color:#3c8dbc;color:#fff}.select2-container--default .select2-lightblue .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-lightblue .select2-results__option--highlighted[aria-selected]:hover,.select2-lightblue .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-lightblue .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#3884b0;color:#fff}.select2-container--default .select2-lightblue .select2-selection--multiple:focus,.select2-lightblue .select2-container--default .select2-selection--multiple:focus{border-color:#99c5de}.select2-container--default .select2-lightblue .select2-selection--multiple .select2-selection__choice,.select2-lightblue .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#3c8dbc;border-color:#367fa9;color:#fff}.select2-container--default .select2-lightblue .select2-selection--multiple .select2-selection__choice__remove,.select2-lightblue .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-lightblue .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-lightblue .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-lightblue.select2-container--focus .select2-selection--multiple,.select2-lightblue .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#99c5de}.select2-navy+.select2-container--default.select2-container--focus .select2-selection--single,.select2-navy+.select2-container--default.select2-container--open .select2-selection--single{border-color:#005ebf}.select2-container--default .select2-navy.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-navy .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-navy .select2-search--inline .select2-search__field:focus,.select2-navy .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-navy .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-navy .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #005ebf}.select2-container--default .select2-navy .select2-results__option--highlighted,.select2-navy .select2-container--default .select2-results__option--highlighted{background-color:#001f3f;color:#fff}.select2-container--default .select2-navy .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-navy .select2-results__option--highlighted[aria-selected]:hover,.select2-navy .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-navy .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#001730;color:#fff}.select2-container--default .select2-navy .select2-selection--multiple:focus,.select2-navy .select2-container--default .select2-selection--multiple:focus{border-color:#005ebf}.select2-container--default .select2-navy .select2-selection--multiple .select2-selection__choice,.select2-navy .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#001f3f;border-color:#001226;color:#fff}.select2-container--default .select2-navy .select2-selection--multiple .select2-selection__choice__remove,.select2-navy .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-navy .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-navy .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-navy.select2-container--focus .select2-selection--multiple,.select2-navy .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#005ebf}.select2-olive+.select2-container--default.select2-container--focus .select2-selection--single,.select2-olive+.select2-container--default.select2-container--open .select2-selection--single{border-color:#87cfaf}.select2-container--default .select2-olive.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-olive .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-olive .select2-search--inline .select2-search__field:focus,.select2-olive .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-olive .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-olive .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #87cfaf}.select2-container--default .select2-olive .select2-results__option--highlighted,.select2-olive .select2-container--default .select2-results__option--highlighted{background-color:#3d9970;color:#fff}.select2-container--default .select2-olive .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-olive .select2-results__option--highlighted[aria-selected]:hover,.select2-olive .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-olive .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#398e68;color:#fff}.select2-container--default .select2-olive .select2-selection--multiple:focus,.select2-olive .select2-container--default .select2-selection--multiple:focus{border-color:#87cfaf}.select2-container--default .select2-olive .select2-selection--multiple .select2-selection__choice,.select2-olive .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#3d9970;border-color:#368763;color:#fff}.select2-container--default .select2-olive .select2-selection--multiple .select2-selection__choice__remove,.select2-olive .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-olive .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-olive .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-olive.select2-container--focus .select2-selection--multiple,.select2-olive .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#87cfaf}.select2-lime+.select2-container--default.select2-container--focus .select2-selection--single,.select2-lime+.select2-container--default.select2-container--open .select2-selection--single{border-color:#81ffb8}.select2-container--default .select2-lime.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-lime .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-lime .select2-search--inline .select2-search__field:focus,.select2-lime .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-lime .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-lime .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #81ffb8}.select2-container--default .select2-lime .select2-results__option--highlighted,.select2-lime .select2-container--default .select2-results__option--highlighted{background-color:#01ff70;color:#2a2e30}.select2-container--default .select2-lime .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-lime .select2-results__option--highlighted[aria-selected]:hover,.select2-lime .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-lime .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#00f169;color:#2a2e30}.select2-container--default .select2-lime .select2-selection--multiple:focus,.select2-lime .select2-container--default .select2-selection--multiple:focus{border-color:#81ffb8}.select2-container--default .select2-lime .select2-selection--multiple .select2-selection__choice,.select2-lime .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#01ff70;border-color:#00e765;color:#2a2e30}.select2-container--default .select2-lime .select2-selection--multiple .select2-selection__choice__remove,.select2-lime .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:rgba(42,46,48,.7)}.select2-container--default .select2-lime .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-lime .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#2a2e30}.select2-container--default .select2-lime.select2-container--focus .select2-selection--multiple,.select2-lime .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#81ffb8}.select2-fuchsia+.select2-container--default.select2-container--focus .select2-selection--single,.select2-fuchsia+.select2-container--default.select2-container--open .select2-selection--single{border-color:#f88adf}.select2-container--default .select2-fuchsia.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-fuchsia .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-fuchsia .select2-search--inline .select2-search__field:focus,.select2-fuchsia .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-fuchsia .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-fuchsia .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #f88adf}.select2-container--default .select2-fuchsia .select2-results__option--highlighted,.select2-fuchsia .select2-container--default .select2-results__option--highlighted{background-color:#f012be;color:#fff}.select2-container--default .select2-fuchsia .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-fuchsia .select2-results__option--highlighted[aria-selected]:hover,.select2-fuchsia .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-fuchsia .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#e40eb4;color:#fff}.select2-container--default .select2-fuchsia .select2-selection--multiple:focus,.select2-fuchsia .select2-container--default .select2-selection--multiple:focus{border-color:#f88adf}.select2-container--default .select2-fuchsia .select2-selection--multiple .select2-selection__choice,.select2-fuchsia .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#f012be;border-color:#db0ead;color:#fff}.select2-container--default .select2-fuchsia .select2-selection--multiple .select2-selection__choice__remove,.select2-fuchsia .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-fuchsia .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-fuchsia .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-fuchsia.select2-container--focus .select2-selection--multiple,.select2-fuchsia .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#f88adf}.select2-maroon+.select2-container--default.select2-container--focus .select2-selection--single,.select2-maroon+.select2-container--default.select2-container--open .select2-selection--single{border-color:#f083ab}.select2-container--default .select2-maroon.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-maroon .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-maroon .select2-search--inline .select2-search__field:focus,.select2-maroon .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-maroon .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-maroon .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #f083ab}.select2-container--default .select2-maroon .select2-results__option--highlighted,.select2-maroon .select2-container--default .select2-results__option--highlighted{background-color:#d81b60;color:#fff}.select2-container--default .select2-maroon .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-maroon .select2-results__option--highlighted[aria-selected]:hover,.select2-maroon .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-maroon .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#ca195a;color:#fff}.select2-container--default .select2-maroon .select2-selection--multiple:focus,.select2-maroon .select2-container--default .select2-selection--multiple:focus{border-color:#f083ab}.select2-container--default .select2-maroon .select2-selection--multiple .select2-selection__choice,.select2-maroon .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#d81b60;border-color:#c11856;color:#fff}.select2-container--default .select2-maroon .select2-selection--multiple .select2-selection__choice__remove,.select2-maroon .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-maroon .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-maroon .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-maroon.select2-container--focus .select2-selection--multiple,.select2-maroon .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#f083ab}.select2-blue+.select2-container--default.select2-container--focus .select2-selection--single,.select2-blue+.select2-container--default.select2-container--open .select2-selection--single{border-color:#9ac4eb}.select2-blue .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-blue .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-blue .select2-container--default .select2-search--inline .select2-search__field:focus,.select2-container--default .select2-blue.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-blue .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-blue .select2-search--inline .select2-search__field:focus{border:1px solid #9ac4eb}.select2-blue .select2-container--default .select2-results__option--highlighted,.select2-container--default .select2-blue .select2-results__option--highlighted{background-color:#3085d6;color:#fff}.select2-blue .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-blue .select2-container--default .select2-results__option--highlighted[aria-selected]:hover,.select2-container--default .select2-blue .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-blue .select2-results__option--highlighted[aria-selected]:hover{background-color:#297dce;color:#fff}.select2-blue .select2-container--default .select2-selection--multiple:focus,.select2-container--default .select2-blue .select2-selection--multiple:focus{border-color:#9ac4eb}.select2-blue .select2-container--default .select2-selection--multiple .select2-selection__choice,.select2-container--default .select2-blue .select2-selection--multiple .select2-selection__choice{background-color:#3085d6;border-color:#2778c5;color:#fff}.select2-blue .select2-container--default .select2-selection--multiple .select2-selection__choice__remove,.select2-container--default .select2-blue .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-blue .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-container--default .select2-blue .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-blue .select2-container--default.select2-container--focus .select2-selection--multiple,.select2-container--default .select2-blue.select2-container--focus .select2-selection--multiple{border-color:#9ac4eb}.select2-indigo+.select2-container--default.select2-container--focus .select2-selection--single,.select2-indigo+.select2-container--default.select2-container--open .select2-selection--single{border-color:#bac1e7}.select2-container--default .select2-indigo.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-indigo .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-indigo .select2-search--inline .select2-search__field:focus,.select2-indigo .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-indigo .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-indigo .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #bac1e7}.select2-container--default .select2-indigo .select2-results__option--highlighted,.select2-indigo .select2-container--default .select2-results__option--highlighted{background-color:#5c6bc6;color:#fff}.select2-container--default .select2-indigo .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-indigo .select2-results__option--highlighted[aria-selected]:hover,.select2-indigo .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-indigo .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#5161c2;color:#fff}.select2-container--default .select2-indigo .select2-selection--multiple:focus,.select2-indigo .select2-container--default .select2-selection--multiple:focus{border-color:#bac1e7}.select2-container--default .select2-indigo .select2-selection--multiple .select2-selection__choice,.select2-indigo .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#5c6bc6;border-color:#495abf;color:#fff}.select2-container--default .select2-indigo .select2-selection--multiple .select2-selection__choice__remove,.select2-indigo .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-indigo .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-indigo .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-indigo.select2-container--focus .select2-selection--multiple,.select2-indigo .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#bac1e7}.select2-purple+.select2-container--default.select2-container--focus .select2-selection--single,.select2-purple+.select2-container--default.select2-container--open .select2-selection--single{border-color:#b8a2e0}.select2-container--default .select2-purple.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-purple .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-purple .select2-search--inline .select2-search__field:focus,.select2-purple .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-purple .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-purple .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #b8a2e0}.select2-container--default .select2-purple .select2-results__option--highlighted,.select2-purple .select2-container--default .select2-results__option--highlighted{background-color:#6f42c1;color:#fff}.select2-container--default .select2-purple .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-purple .select2-results__option--highlighted[aria-selected]:hover,.select2-purple .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-purple .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#683cb8;color:#fff}.select2-container--default .select2-purple .select2-selection--multiple:focus,.select2-purple .select2-container--default .select2-selection--multiple:focus{border-color:#b8a2e0}.select2-container--default .select2-purple .select2-selection--multiple .select2-selection__choice,.select2-purple .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#6f42c1;border-color:#643ab0;color:#fff}.select2-container--default .select2-purple .select2-selection--multiple .select2-selection__choice__remove,.select2-purple .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-purple .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-purple .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-purple.select2-container--focus .select2-selection--multiple,.select2-purple .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#b8a2e0}.select2-pink+.select2-container--default.select2-container--focus .select2-selection--single,.select2-pink+.select2-container--default.select2-container--open .select2-selection--single{border-color:#fff}.select2-container--default .select2-pink.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-pink .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-pink .select2-search--inline .select2-search__field:focus,.select2-pink .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-pink .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-pink .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #fff}.select2-container--default .select2-pink .select2-results__option--highlighted,.select2-pink .select2-container--default .select2-results__option--highlighted{background-color:#ff8acc;color:#2a2e30}.select2-container--default .select2-pink .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-pink .select2-results__option--highlighted[aria-selected]:hover,.select2-pink .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-pink .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#ff7bc5;color:#2a2e30}.select2-container--default .select2-pink .select2-selection--multiple:focus,.select2-pink .select2-container--default .select2-selection--multiple:focus{border-color:#fff}.select2-container--default .select2-pink .select2-selection--multiple .select2-selection__choice,.select2-pink .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#ff8acc;border-color:#ff71c1;color:#2a2e30}.select2-container--default .select2-pink .select2-selection--multiple .select2-selection__choice__remove,.select2-pink .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:rgba(42,46,48,.7)}.select2-container--default .select2-pink .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-pink .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#2a2e30}.select2-container--default .select2-pink.select2-container--focus .select2-selection--multiple,.select2-pink .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#fff}.select2-red+.select2-container--default.select2-container--focus .select2-selection--single,.select2-red+.select2-container--default.select2-container--open .select2-selection--single{border-color:#f8c6c6}.select2-container--default .select2-red.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-red .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-red .select2-search--inline .select2-search__field:focus,.select2-red .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-red .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-red .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #f8c6c6}.select2-container--default .select2-red .select2-results__option--highlighted,.select2-red .select2-container--default .select2-results__option--highlighted{background-color:#ea5455;color:#fff}.select2-container--default .select2-red .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-red .select2-results__option--highlighted[aria-selected]:hover,.select2-red .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-red .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#e84647;color:#fff}.select2-container--default .select2-red .select2-selection--multiple:focus,.select2-red .select2-container--default .select2-selection--multiple:focus{border-color:#f8c6c6}.select2-container--default .select2-red .select2-selection--multiple .select2-selection__choice,.select2-red .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#ea5455;border-color:#e73d3e;color:#fff}.select2-container--default .select2-red .select2-selection--multiple .select2-selection__choice__remove,.select2-red .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-red .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-red .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-red.select2-container--focus .select2-selection--multiple,.select2-red .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#f8c6c6}.select2-orange+.select2-container--default.select2-container--focus .select2-selection--single,.select2-orange+.select2-container--default.select2-container--open .select2-selection--single{border-color:#f2dcbc}.select2-container--default .select2-orange.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-orange .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-orange .select2-search--inline .select2-search__field:focus,.select2-orange .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-orange .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-orange .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #f2dcbc}.select2-container--default .select2-orange .select2-results__option--highlighted,.select2-orange .select2-container--default .select2-results__option--highlighted{background-color:#dda451;color:#2a2e30}.select2-container--default .select2-orange .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-orange .select2-results__option--highlighted[aria-selected]:hover,.select2-orange .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-orange .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#da9d44;color:#2a2e30}.select2-container--default .select2-orange .select2-selection--multiple:focus,.select2-orange .select2-container--default .select2-selection--multiple:focus{border-color:#f2dcbc}.select2-container--default .select2-orange .select2-selection--multiple .select2-selection__choice,.select2-orange .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#dda451;border-color:#d9993c;color:#2a2e30}.select2-container--default .select2-orange .select2-selection--multiple .select2-selection__choice__remove,.select2-orange .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:rgba(42,46,48,.7)}.select2-container--default .select2-orange .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-orange .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#2a2e30}.select2-container--default .select2-orange.select2-container--focus .select2-selection--multiple,.select2-orange .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#f2dcbc}.select2-yellow+.select2-container--default.select2-container--focus .select2-selection--single,.select2-yellow+.select2-container--default.select2-container--open .select2-selection--single{border-color:#f8e283}.select2-container--default .select2-yellow.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-yellow .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-yellow .select2-search--inline .select2-search__field:focus,.select2-yellow .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-yellow .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-yellow .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #f8e283}.select2-container--default .select2-yellow .select2-results__option--highlighted,.select2-yellow .select2-container--default .select2-results__option--highlighted{background-color:#edc30e;color:#2a2e30}.select2-container--default .select2-yellow .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-yellow .select2-results__option--highlighted[aria-selected]:hover,.select2-yellow .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-yellow .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#dfb70d;color:#2a2e30}.select2-container--default .select2-yellow .select2-selection--multiple:focus,.select2-yellow .select2-container--default .select2-selection--multiple:focus{border-color:#f8e283}.select2-container--default .select2-yellow .select2-selection--multiple .select2-selection__choice,.select2-yellow .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#edc30e;border-color:#d5af0d;color:#2a2e30}.select2-container--default .select2-yellow .select2-selection--multiple .select2-selection__choice__remove,.select2-yellow .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:rgba(42,46,48,.7)}.select2-container--default .select2-yellow .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-yellow .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#2a2e30}.select2-container--default .select2-yellow.select2-container--focus .select2-selection--multiple,.select2-yellow .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#f8e283}.select2-green+.select2-container--default.select2-container--focus .select2-selection--single,.select2-green+.select2-container--default.select2-container--open .select2-selection--single{border-color:#73e6b5}.select2-container--default .select2-green.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-green .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-green .select2-search--inline .select2-search__field:focus,.select2-green .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-green .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-green .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #73e6b5}.select2-container--default .select2-green .select2-results__option--highlighted,.select2-green .select2-container--default .select2-results__option--highlighted{background-color:#21b978;color:#fff}.select2-container--default .select2-green .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-green .select2-results__option--highlighted[aria-selected]:hover,.select2-green .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-green .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#1fac70;color:#fff}.select2-container--default .select2-green .select2-selection--multiple:focus,.select2-green .select2-container--default .select2-selection--multiple:focus{border-color:#73e6b5}.select2-container--default .select2-green .select2-selection--multiple .select2-selection__choice,.select2-green .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#21b978;border-color:#1da36a;color:#fff}.select2-container--default .select2-green .select2-selection--multiple .select2-selection__choice__remove,.select2-green .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-green .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-green .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-green.select2-container--focus .select2-selection--multiple,.select2-green .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#73e6b5}.select2-teal+.select2-container--default.select2-container--focus .select2-selection--single,.select2-teal+.select2-container--default.select2-container--open .select2-selection--single{border-color:#7eeaca}.select2-container--default .select2-teal.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-teal .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-teal .select2-search--inline .select2-search__field:focus,.select2-teal .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-teal .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-teal .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #7eeaca}.select2-container--default .select2-teal .select2-results__option--highlighted,.select2-teal .select2-container--default .select2-results__option--highlighted{background-color:#20c997;color:#fff}.select2-container--default .select2-teal .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-teal .select2-results__option--highlighted[aria-selected]:hover,.select2-teal .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-teal .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#1ebc8d;color:#fff}.select2-container--default .select2-teal .select2-selection--multiple:focus,.select2-teal .select2-container--default .select2-selection--multiple:focus{border-color:#7eeaca}.select2-container--default .select2-teal .select2-selection--multiple .select2-selection__choice,.select2-teal .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#20c997;border-color:#1cb386;color:#fff}.select2-container--default .select2-teal .select2-selection--multiple .select2-selection__choice__remove,.select2-teal .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-teal .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-teal .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-teal.select2-container--focus .select2-selection--multiple,.select2-teal .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#7eeaca}.select2-cyan+.select2-container--default.select2-container--focus .select2-selection--single,.select2-cyan+.select2-container--default.select2-container--open .select2-selection--single{border-color:#dedbfb}.select2-container--default .select2-cyan.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-cyan .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-cyan .select2-search--inline .select2-search__field:focus,.select2-cyan .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-cyan .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-cyan .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #dedbfb}.select2-container--default .select2-cyan .select2-results__option--highlighted,.select2-cyan .select2-container--default .select2-results__option--highlighted{background-color:#7367f0;color:#fff}.select2-container--default .select2-cyan .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-cyan .select2-results__option--highlighted[aria-selected]:hover,.select2-cyan .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-cyan .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#6659ef;color:#fff}.select2-container--default .select2-cyan .select2-selection--multiple:focus,.select2-cyan .select2-container--default .select2-selection--multiple:focus{border-color:#dedbfb}.select2-container--default .select2-cyan .select2-selection--multiple .select2-selection__choice,.select2-cyan .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#7367f0;border-color:#5e50ee;color:#fff}.select2-container--default .select2-cyan .select2-selection--multiple .select2-selection__choice__remove,.select2-cyan .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-cyan .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-cyan .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-cyan.select2-container--focus .select2-selection--multiple,.select2-cyan .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#dedbfb}.select2-white+.select2-container--default.select2-container--focus .select2-selection--single,.select2-white+.select2-container--default.select2-container--open .select2-selection--single{border-color:#fff}.select2-container--default .select2-white.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-white .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-white .select2-search--inline .select2-search__field:focus,.select2-white .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-white .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-white .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #fff}.select2-container--default .select2-white .select2-results__option--highlighted,.select2-white .select2-container--default .select2-results__option--highlighted{background-color:#fff;color:#2a2e30}.select2-container--default .select2-white .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-white .select2-results__option--highlighted[aria-selected]:hover,.select2-white .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-white .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#f7f7f7;color:#2a2e30}.select2-container--default .select2-white .select2-selection--multiple:focus,.select2-white .select2-container--default .select2-selection--multiple:focus{border-color:#fff}.select2-container--default .select2-white .select2-selection--multiple .select2-selection__choice,.select2-white .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#fff;border-color:#f2f2f2;color:#2a2e30}.select2-container--default .select2-white .select2-selection--multiple .select2-selection__choice__remove,.select2-white .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:rgba(42,46,48,.7)}.select2-container--default .select2-white .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-white .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#2a2e30}.select2-container--default .select2-white.select2-container--focus .select2-selection--multiple,.select2-gray+.select2-container--default.select2-container--focus .select2-selection--single,.select2-gray+.select2-container--default.select2-container--open .select2-selection--single,.select2-white .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#fff}.select2-container--default .select2-gray.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-gray .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-gray .select2-search--inline .select2-search__field:focus,.select2-gray .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-gray .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-gray .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #fff}.select2-container--default .select2-gray .select2-results__option--highlighted,.select2-gray .select2-container--default .select2-results__option--highlighted{background-color:#b8c2cc;color:#2a2e30}.select2-container--default .select2-gray .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-gray .select2-results__option--highlighted[aria-selected]:hover,.select2-gray .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-gray .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#afbac6;color:#2a2e30}.select2-container--default .select2-gray .select2-selection--multiple:focus,.select2-gray .select2-container--default .select2-selection--multiple:focus{border-color:#fff}.select2-container--default .select2-gray .select2-selection--multiple .select2-selection__choice,.select2-gray .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#b8c2cc;border-color:#a9b5c1;color:#2a2e30}.select2-container--default .select2-gray .select2-selection--multiple .select2-selection__choice__remove,.select2-gray .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:rgba(42,46,48,.7)}.select2-container--default .select2-gray .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-gray .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#2a2e30}.select2-container--default .select2-gray.select2-container--focus .select2-selection--multiple,.select2-gray .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#fff}.select2-gray-dark+.select2-container--default.select2-container--focus .select2-selection--single,.select2-gray-dark+.select2-container--default.select2-container--open .select2-selection--single{border-color:#5e5e5e}.select2-container--default .select2-gray-dark.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-gray-dark .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-gray-dark .select2-search--inline .select2-search__field:focus,.select2-gray-dark .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-gray-dark .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-gray-dark .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #5e5e5e}.select2-container--default .select2-gray-dark .select2-results__option--highlighted,.select2-gray-dark .select2-container--default .select2-results__option--highlighted{background-color:#1e1e1e;color:#fff}.select2-container--default .select2-gray-dark .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-gray-dark .select2-results__option--highlighted[aria-selected]:hover,.select2-gray-dark .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-gray-dark .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#161616;color:#fff}.select2-container--default .select2-gray-dark .select2-selection--multiple:focus,.select2-gray-dark .select2-container--default .select2-selection--multiple:focus{border-color:#5e5e5e}.select2-container--default .select2-gray-dark .select2-selection--multiple .select2-selection__choice,.select2-gray-dark .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#1e1e1e;border-color:#111;color:#fff}.select2-container--default .select2-gray-dark .select2-selection--multiple .select2-selection__choice__remove,.select2-gray-dark .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-gray-dark .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-gray-dark .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-gray-dark.select2-container--focus .select2-selection--multiple,.select2-gray-dark .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#5e5e5e}.slider .tooltip.in{opacity:.9}.slider.slider-vertical{height:100%}.slider.slider-horizontal{width:100%}.slider-primary .slider .slider-selection{background:#6d8be6}.slider-secondary .slider .slider-selection{background:#b8c2cc}.slider-success .slider .slider-selection{background:#21b978}.slider-info .slider .slider-selection{background:#4277cf}.slider-warning .slider .slider-selection{background:#dda451}.slider-danger .slider .slider-selection{background:#ea5455}.slider-light .slider .slider-selection{background:#f7f7f9}.slider-dark .slider .slider-selection{background:#22292f}.slider-lightblue .slider .slider-selection{background:#3c8dbc}.slider-navy .slider .slider-selection{background:#001f3f}.slider-olive .slider .slider-selection{background:#3d9970}.slider-lime .slider .slider-selection{background:#01ff70}.slider-fuchsia .slider .slider-selection{background:#f012be}.slider-maroon .slider .slider-selection{background:#d81b60}.slider-blue .slider .slider-selection{background:#3085d6}.slider-indigo .slider .slider-selection{background:#5c6bc6}.slider-purple .slider .slider-selection{background:#6f42c1}.slider-pink .slider .slider-selection{background:#ff8acc}.slider-red .slider .slider-selection{background:#ea5455}.slider-orange .slider .slider-selection{background:#dda451}.slider-yellow .slider .slider-selection{background:#edc30e}.slider-green .slider .slider-selection{background:#21b978}.slider-teal .slider .slider-selection{background:#20c997}.slider-cyan .slider .slider-selection{background:#7367f0}.slider-white .slider .slider-selection{background:#fff}.slider-gray .slider .slider-selection{background:#b8c2cc}.slider-gray-dark .slider .slider-selection{background:#1e1e1e}.mapael .map{position:relative}.mapael .mapTooltip{font-family:Montserrat,Helvetica,Arial,serif;font-style:normal;font-weight:400;line-height:1.45;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;border-radius:.5rem;font-size:1rem;background-color:#22292f;color:#fff;display:block;max-width:200px;padding:.25rem .5rem;position:absolute;text-align:center;word-wrap:break-word;z-index:1070}.mapael .myLegend{background-color:#babfc7;border:1px solid #adb5bd;padding:10px;width:600px}.mapael .zoomButton{background-color:#babfc7;border:1px solid #ddd;border-radius:.42rem;color:#444;cursor:pointer;font-weight:700;height:16px;left:10px;line-height:14px;padding-left:1px;position:absolute;text-align:center;top:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:16px}.mapael .zoomButton.hover,.mapael .zoomButton:active,.mapael .zoomButton:hover{background-color:#acb2bc;color:#2b2b2b}.mapael .zoomReset{line-height:12px;top:10px}.mapael .zoomIn{top:30px}.mapael .zoomOut{top:50px}.jqvmap-zoomin,.jqvmap-zoomout{background-color:#babfc7;border:1px solid #ddd;border-radius:.42rem;color:#444;height:15px;width:15px}.jqvmap-zoomin.hover,.jqvmap-zoomin:active,.jqvmap-zoomin:hover,.jqvmap-zoomout.hover,.jqvmap-zoomout:active,.jqvmap-zoomout:hover{background-color:#acb2bc;color:#2b2b2b}.pace{z-index:1048}.pace .pace-progress{z-index:1049}.pace .pace-activity{z-index:1050}.pace-primary .pace .pace-progress{background:#6d8be6}.pace-barber-shop-primary .pace{background:#fff}.pace-barber-shop-primary .pace .pace-progress{background:#6d8be6}.pace-barber-shop-primary .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-primary .pace .pace-progress:after{color:rgba(109,139,230,.2)}.pace-bounce-primary .pace .pace-activity{background:#6d8be6}.pace-center-atom-primary .pace-progress{height:100px;width:80px}.pace-center-atom-primary .pace-progress:before{background:#6d8be6;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-primary .pace-activity,.pace-center-atom-primary .pace-activity:after,.pace-center-atom-primary .pace-activity:before{border-color:#6d8be6}.pace-center-circle-primary .pace .pace-progress{background:rgba(109,139,230,.8);color:#fff}.pace-center-radar-primary .pace .pace-activity,.pace-center-radar-primary .pace .pace-activity:before{border-color:#6d8be6 transparent transparent}.pace-center-simple-primary .pace{background:#fff;border-color:#6d8be6}.pace-center-simple-primary .pace .pace-progress{background:#6d8be6}.pace-material-primary .pace{color:#6d8be6}.pace-corner-indicator-primary .pace .pace-activity{background:#6d8be6}.pace-corner-indicator-primary .pace .pace-activity:after,.pace-corner-indicator-primary .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-primary .pace .pace-activity:before{border-right-color:rgba(109,139,230,.2);border-left-color:rgba(109,139,230,.2)}.pace-corner-indicator-primary .pace .pace-activity:after{border-top-color:rgba(109,139,230,.2);border-bottom-color:rgba(109,139,230,.2)}.pace-fill-left-primary .pace .pace-progress{background-color:rgba(109,139,230,.2)}.pace-flash-primary .pace .pace-progress{background:#6d8be6}.pace-flash-primary .pace .pace-progress-inner{box-shadow:0 0 10px #6d8be6,0 0 5px #6d8be6}.pace-flash-primary .pace .pace-activity{border-top-color:#6d8be6;border-left-color:#6d8be6}.pace-loading-bar-primary .pace .pace-progress{background:#6d8be6;color:#6d8be6;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-primary .pace .pace-activity{box-shadow:inset 0 0 0 2px #6d8be6,inset 0 0 0 7px #fff}.pace-mac-osx-primary .pace .pace-progress{background-color:#6d8be6;box-shadow:inset -1px 0 #6d8be6,inset 0 -1px #6d8be6,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-primary .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-primary .pace-progress{color:#6d8be6}.pace-secondary .pace .pace-progress{background:#b8c2cc}.pace-barber-shop-secondary .pace{background:#2a2e30}.pace-barber-shop-secondary .pace .pace-progress{background:#b8c2cc}.pace-barber-shop-secondary .pace .pace-activity{background-image:linear-gradient(45deg,rgba(42,46,48,.2) 25%,transparent 0,transparent 50%,rgba(42,46,48,.2) 0,rgba(42,46,48,.2) 75%,transparent 0,transparent)}.pace-big-counter-secondary .pace .pace-progress:after{color:rgba(184,194,204,.2)}.pace-bounce-secondary .pace .pace-activity{background:#b8c2cc}.pace-center-atom-secondary .pace-progress{height:100px;width:80px}.pace-center-atom-secondary .pace-progress:before{background:#b8c2cc;color:#2a2e30;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-secondary .pace-activity,.pace-center-atom-secondary .pace-activity:after,.pace-center-atom-secondary .pace-activity:before{border-color:#b8c2cc}.pace-center-circle-secondary .pace .pace-progress{background:rgba(184,194,204,.8);color:#2a2e30}.pace-center-radar-secondary .pace .pace-activity,.pace-center-radar-secondary .pace .pace-activity:before{border-color:#b8c2cc transparent transparent}.pace-center-simple-secondary .pace{background:#2a2e30;border-color:#b8c2cc}.pace-center-simple-secondary .pace .pace-progress{background:#b8c2cc}.pace-material-secondary .pace{color:#b8c2cc}.pace-corner-indicator-secondary .pace .pace-activity{background:#b8c2cc}.pace-corner-indicator-secondary .pace .pace-activity:after,.pace-corner-indicator-secondary .pace .pace-activity:before{border:5px solid #2a2e30}.pace-corner-indicator-secondary .pace .pace-activity:before{border-right-color:rgba(184,194,204,.2);border-left-color:rgba(184,194,204,.2)}.pace-corner-indicator-secondary .pace .pace-activity:after{border-top-color:rgba(184,194,204,.2);border-bottom-color:rgba(184,194,204,.2)}.pace-fill-left-secondary .pace .pace-progress{background-color:rgba(184,194,204,.2)}.pace-flash-secondary .pace .pace-progress{background:#b8c2cc}.pace-flash-secondary .pace .pace-progress-inner{box-shadow:0 0 10px #b8c2cc,0 0 5px #b8c2cc}.pace-flash-secondary .pace .pace-activity{border-top-color:#b8c2cc;border-left-color:#b8c2cc}.pace-loading-bar-secondary .pace .pace-progress{background:#b8c2cc;color:#b8c2cc;box-shadow:120px 0 #2a2e30,240px 0 #2a2e30}.pace-loading-bar-secondary .pace .pace-activity{box-shadow:inset 0 0 0 2px #b8c2cc,inset 0 0 0 7px #2a2e30}.pace-mac-osx-secondary .pace .pace-progress{background-color:#b8c2cc;box-shadow:inset -1px 0 #b8c2cc,inset 0 -1px #b8c2cc,inset 0 2px rgba(42,46,48,.5),inset 0 6px rgba(42,46,48,.3)}.pace-mac-osx-secondary .pace .pace-activity{background-image:radial-gradient(rgba(42,46,48,.65) 0,rgba(42,46,48,.15) 100%);height:12px}.pace-progress-color-secondary .pace-progress{color:#b8c2cc}.pace-success .pace .pace-progress{background:#21b978}.pace-barber-shop-success .pace{background:#fff}.pace-barber-shop-success .pace .pace-progress{background:#21b978}.pace-barber-shop-success .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-success .pace .pace-progress:after{color:rgba(33,185,120,.2)}.pace-bounce-success .pace .pace-activity{background:#21b978}.pace-center-atom-success .pace-progress{height:100px;width:80px}.pace-center-atom-success .pace-progress:before{background:#21b978;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-success .pace-activity,.pace-center-atom-success .pace-activity:after,.pace-center-atom-success .pace-activity:before{border-color:#21b978}.pace-center-circle-success .pace .pace-progress{background:rgba(33,185,120,.8);color:#fff}.pace-center-radar-success .pace .pace-activity,.pace-center-radar-success .pace .pace-activity:before{border-color:#21b978 transparent transparent}.pace-center-simple-success .pace{background:#fff;border-color:#21b978}.pace-center-simple-success .pace .pace-progress{background:#21b978}.pace-material-success .pace{color:#21b978}.pace-corner-indicator-success .pace .pace-activity{background:#21b978}.pace-corner-indicator-success .pace .pace-activity:after,.pace-corner-indicator-success .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-success .pace .pace-activity:before{border-right-color:rgba(33,185,120,.2);border-left-color:rgba(33,185,120,.2)}.pace-corner-indicator-success .pace .pace-activity:after{border-top-color:rgba(33,185,120,.2);border-bottom-color:rgba(33,185,120,.2)}.pace-fill-left-success .pace .pace-progress{background-color:rgba(33,185,120,.2)}.pace-flash-success .pace .pace-progress{background:#21b978}.pace-flash-success .pace .pace-progress-inner{box-shadow:0 0 10px #21b978,0 0 5px #21b978}.pace-flash-success .pace .pace-activity{border-top-color:#21b978;border-left-color:#21b978}.pace-loading-bar-success .pace .pace-progress{background:#21b978;color:#21b978;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-success .pace .pace-activity{box-shadow:inset 0 0 0 2px #21b978,inset 0 0 0 7px #fff}.pace-mac-osx-success .pace .pace-progress{background-color:#21b978;box-shadow:inset -1px 0 #21b978,inset 0 -1px #21b978,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-success .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-success .pace-progress{color:#21b978}.pace-info .pace .pace-progress{background:#4277cf}.pace-barber-shop-info .pace{background:#fff}.pace-barber-shop-info .pace .pace-progress{background:#4277cf}.pace-barber-shop-info .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-info .pace .pace-progress:after{color:rgba(66,119,207,.2)}.pace-bounce-info .pace .pace-activity{background:#4277cf}.pace-center-atom-info .pace-progress{height:100px;width:80px}.pace-center-atom-info .pace-progress:before{background:#4277cf;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-info .pace-activity,.pace-center-atom-info .pace-activity:after,.pace-center-atom-info .pace-activity:before{border-color:#4277cf}.pace-center-circle-info .pace .pace-progress{background:rgba(66,119,207,.8);color:#fff}.pace-center-radar-info .pace .pace-activity,.pace-center-radar-info .pace .pace-activity:before{border-color:#4277cf transparent transparent}.pace-center-simple-info .pace{background:#fff;border-color:#4277cf}.pace-center-simple-info .pace .pace-progress{background:#4277cf}.pace-material-info .pace{color:#4277cf}.pace-corner-indicator-info .pace .pace-activity{background:#4277cf}.pace-corner-indicator-info .pace .pace-activity:after,.pace-corner-indicator-info .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-info .pace .pace-activity:before{border-right-color:rgba(66,119,207,.2);border-left-color:rgba(66,119,207,.2)}.pace-corner-indicator-info .pace .pace-activity:after{border-top-color:rgba(66,119,207,.2);border-bottom-color:rgba(66,119,207,.2)}.pace-fill-left-info .pace .pace-progress{background-color:rgba(66,119,207,.2)}.pace-flash-info .pace .pace-progress{background:#4277cf}.pace-flash-info .pace .pace-progress-inner{box-shadow:0 0 10px #4277cf,0 0 5px #4277cf}.pace-flash-info .pace .pace-activity{border-top-color:#4277cf;border-left-color:#4277cf}.pace-loading-bar-info .pace .pace-progress{background:#4277cf;color:#4277cf;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-info .pace .pace-activity{box-shadow:inset 0 0 0 2px #4277cf,inset 0 0 0 7px #fff}.pace-mac-osx-info .pace .pace-progress{background-color:#4277cf;box-shadow:inset -1px 0 #4277cf,inset 0 -1px #4277cf,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-info .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-info .pace-progress{color:#4277cf}.pace-warning .pace .pace-progress{background:#dda451}.pace-barber-shop-warning .pace{background:#2a2e30}.pace-barber-shop-warning .pace .pace-progress{background:#dda451}.pace-barber-shop-warning .pace .pace-activity{background-image:linear-gradient(45deg,rgba(42,46,48,.2) 25%,transparent 0,transparent 50%,rgba(42,46,48,.2) 0,rgba(42,46,48,.2) 75%,transparent 0,transparent)}.pace-big-counter-warning .pace .pace-progress:after{color:rgba(221,164,81,.2)}.pace-bounce-warning .pace .pace-activity{background:#dda451}.pace-center-atom-warning .pace-progress{height:100px;width:80px}.pace-center-atom-warning .pace-progress:before{background:#dda451;color:#2a2e30;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-warning .pace-activity,.pace-center-atom-warning .pace-activity:after,.pace-center-atom-warning .pace-activity:before{border-color:#dda451}.pace-center-circle-warning .pace .pace-progress{background:rgba(221,164,81,.8);color:#2a2e30}.pace-center-radar-warning .pace .pace-activity,.pace-center-radar-warning .pace .pace-activity:before{border-color:#dda451 transparent transparent}.pace-center-simple-warning .pace{background:#2a2e30;border-color:#dda451}.pace-center-simple-warning .pace .pace-progress{background:#dda451}.pace-material-warning .pace{color:#dda451}.pace-corner-indicator-warning .pace .pace-activity{background:#dda451}.pace-corner-indicator-warning .pace .pace-activity:after,.pace-corner-indicator-warning .pace .pace-activity:before{border:5px solid #2a2e30}.pace-corner-indicator-warning .pace .pace-activity:before{border-right-color:rgba(221,164,81,.2);border-left-color:rgba(221,164,81,.2)}.pace-corner-indicator-warning .pace .pace-activity:after{border-top-color:rgba(221,164,81,.2);border-bottom-color:rgba(221,164,81,.2)}.pace-fill-left-warning .pace .pace-progress{background-color:rgba(221,164,81,.2)}.pace-flash-warning .pace .pace-progress{background:#dda451}.pace-flash-warning .pace .pace-progress-inner{box-shadow:0 0 10px #dda451,0 0 5px #dda451}.pace-flash-warning .pace .pace-activity{border-top-color:#dda451;border-left-color:#dda451}.pace-loading-bar-warning .pace .pace-progress{background:#dda451;color:#dda451;box-shadow:120px 0 #2a2e30,240px 0 #2a2e30}.pace-loading-bar-warning .pace .pace-activity{box-shadow:inset 0 0 0 2px #dda451,inset 0 0 0 7px #2a2e30}.pace-mac-osx-warning .pace .pace-progress{background-color:#dda451;box-shadow:inset -1px 0 #dda451,inset 0 -1px #dda451,inset 0 2px rgba(42,46,48,.5),inset 0 6px rgba(42,46,48,.3)}.pace-mac-osx-warning .pace .pace-activity{background-image:radial-gradient(rgba(42,46,48,.65) 0,rgba(42,46,48,.15) 100%);height:12px}.pace-progress-color-warning .pace-progress{color:#dda451}.pace-danger .pace .pace-progress{background:#ea5455}.pace-barber-shop-danger .pace{background:#fff}.pace-barber-shop-danger .pace .pace-progress{background:#ea5455}.pace-barber-shop-danger .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-danger .pace .pace-progress:after{color:rgba(234,84,85,.2)}.pace-bounce-danger .pace .pace-activity{background:#ea5455}.pace-center-atom-danger .pace-progress{height:100px;width:80px}.pace-center-atom-danger .pace-progress:before{background:#ea5455;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-danger .pace-activity,.pace-center-atom-danger .pace-activity:after,.pace-center-atom-danger .pace-activity:before{border-color:#ea5455}.pace-center-circle-danger .pace .pace-progress{background:rgba(234,84,85,.8);color:#fff}.pace-center-radar-danger .pace .pace-activity,.pace-center-radar-danger .pace .pace-activity:before{border-color:#ea5455 transparent transparent}.pace-center-simple-danger .pace{background:#fff;border-color:#ea5455}.pace-center-simple-danger .pace .pace-progress{background:#ea5455}.pace-material-danger .pace{color:#ea5455}.pace-corner-indicator-danger .pace .pace-activity{background:#ea5455}.pace-corner-indicator-danger .pace .pace-activity:after,.pace-corner-indicator-danger .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-danger .pace .pace-activity:before{border-right-color:rgba(234,84,85,.2);border-left-color:rgba(234,84,85,.2)}.pace-corner-indicator-danger .pace .pace-activity:after{border-top-color:rgba(234,84,85,.2);border-bottom-color:rgba(234,84,85,.2)}.pace-fill-left-danger .pace .pace-progress{background-color:rgba(234,84,85,.2)}.pace-flash-danger .pace .pace-progress{background:#ea5455}.pace-flash-danger .pace .pace-progress-inner{box-shadow:0 0 10px #ea5455,0 0 5px #ea5455}.pace-flash-danger .pace .pace-activity{border-top-color:#ea5455;border-left-color:#ea5455}.pace-loading-bar-danger .pace .pace-progress{background:#ea5455;color:#ea5455;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-danger .pace .pace-activity{box-shadow:inset 0 0 0 2px #ea5455,inset 0 0 0 7px #fff}.pace-mac-osx-danger .pace .pace-progress{background-color:#ea5455;box-shadow:inset -1px 0 #ea5455,inset 0 -1px #ea5455,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-danger .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-danger .pace-progress{color:#ea5455}.pace-light .pace .pace-progress{background:#f7f7f9}.pace-barber-shop-light .pace{background:#2a2e30}.pace-barber-shop-light .pace .pace-progress{background:#f7f7f9}.pace-barber-shop-light .pace .pace-activity{background-image:linear-gradient(45deg,rgba(42,46,48,.2) 25%,transparent 0,transparent 50%,rgba(42,46,48,.2) 0,rgba(42,46,48,.2) 75%,transparent 0,transparent)}.pace-big-counter-light .pace .pace-progress:after{color:rgba(247,247,249,.2)}.pace-bounce-light .pace .pace-activity{background:#f7f7f9}.pace-center-atom-light .pace-progress{height:100px;width:80px}.pace-center-atom-light .pace-progress:before{background:#f7f7f9;color:#2a2e30;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-light .pace-activity,.pace-center-atom-light .pace-activity:after,.pace-center-atom-light .pace-activity:before{border-color:#f7f7f9}.pace-center-circle-light .pace .pace-progress{background:rgba(247,247,249,.8);color:#2a2e30}.pace-center-radar-light .pace .pace-activity,.pace-center-radar-light .pace .pace-activity:before{border-color:#f7f7f9 transparent transparent}.pace-center-simple-light .pace{background:#2a2e30;border-color:#f7f7f9}.pace-center-simple-light .pace .pace-progress{background:#f7f7f9}.pace-material-light .pace{color:#f7f7f9}.pace-corner-indicator-light .pace .pace-activity{background:#f7f7f9}.pace-corner-indicator-light .pace .pace-activity:after,.pace-corner-indicator-light .pace .pace-activity:before{border:5px solid #2a2e30}.pace-corner-indicator-light .pace .pace-activity:before{border-right-color:rgba(247,247,249,.2);border-left-color:rgba(247,247,249,.2)}.pace-corner-indicator-light .pace .pace-activity:after{border-top-color:rgba(247,247,249,.2);border-bottom-color:rgba(247,247,249,.2)}.pace-fill-left-light .pace .pace-progress{background-color:rgba(247,247,249,.2)}.pace-flash-light .pace .pace-progress{background:#f7f7f9}.pace-flash-light .pace .pace-progress-inner{box-shadow:0 0 10px #f7f7f9,0 0 5px #f7f7f9}.pace-flash-light .pace .pace-activity{border-top-color:#f7f7f9;border-left-color:#f7f7f9}.pace-loading-bar-light .pace .pace-progress{background:#f7f7f9;color:#f7f7f9;box-shadow:120px 0 #2a2e30,240px 0 #2a2e30}.pace-loading-bar-light .pace .pace-activity{box-shadow:inset 0 0 0 2px #f7f7f9,inset 0 0 0 7px #2a2e30}.pace-mac-osx-light .pace .pace-progress{background-color:#f7f7f9;box-shadow:inset -1px 0 #f7f7f9,inset 0 -1px #f7f7f9,inset 0 2px rgba(42,46,48,.5),inset 0 6px rgba(42,46,48,.3)}.pace-mac-osx-light .pace .pace-activity{background-image:radial-gradient(rgba(42,46,48,.65) 0,rgba(42,46,48,.15) 100%);height:12px}.pace-progress-color-light .pace-progress{color:#f7f7f9}.pace-dark .pace .pace-progress{background:#22292f}.pace-barber-shop-dark .pace{background:#fff}.pace-barber-shop-dark .pace .pace-progress{background:#22292f}.pace-barber-shop-dark .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-dark .pace .pace-progress:after{color:rgba(34,41,47,.2)}.pace-bounce-dark .pace .pace-activity{background:#22292f}.pace-center-atom-dark .pace-progress{height:100px;width:80px}.pace-center-atom-dark .pace-progress:before{background:#22292f;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-dark .pace-activity,.pace-center-atom-dark .pace-activity:after,.pace-center-atom-dark .pace-activity:before{border-color:#22292f}.pace-center-circle-dark .pace .pace-progress{background:rgba(34,41,47,.8);color:#fff}.pace-center-radar-dark .pace .pace-activity,.pace-center-radar-dark .pace .pace-activity:before{border-color:#22292f transparent transparent}.pace-center-simple-dark .pace{background:#fff;border-color:#22292f}.pace-center-simple-dark .pace .pace-progress{background:#22292f}.pace-material-dark .pace{color:#22292f}.pace-corner-indicator-dark .pace .pace-activity{background:#22292f}.pace-corner-indicator-dark .pace .pace-activity:after,.pace-corner-indicator-dark .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-dark .pace .pace-activity:before{border-right-color:rgba(34,41,47,.2);border-left-color:rgba(34,41,47,.2)}.pace-corner-indicator-dark .pace .pace-activity:after{border-top-color:rgba(34,41,47,.2);border-bottom-color:rgba(34,41,47,.2)}.pace-fill-left-dark .pace .pace-progress{background-color:rgba(34,41,47,.2)}.pace-flash-dark .pace .pace-progress{background:#22292f}.pace-flash-dark .pace .pace-progress-inner{box-shadow:0 0 10px #22292f,0 0 5px #22292f}.pace-flash-dark .pace .pace-activity{border-top-color:#22292f;border-left-color:#22292f}.pace-loading-bar-dark .pace .pace-progress{background:#22292f;color:#22292f;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-dark .pace .pace-activity{box-shadow:inset 0 0 0 2px #22292f,inset 0 0 0 7px #fff}.pace-mac-osx-dark .pace .pace-progress{background-color:#22292f;box-shadow:inset -1px 0 #22292f,inset 0 -1px #22292f,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-dark .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-dark .pace-progress{color:#22292f}.pace-lightblue .pace .pace-progress{background:#3c8dbc}.pace-barber-shop-lightblue .pace{background:#fff}.pace-barber-shop-lightblue .pace .pace-progress{background:#3c8dbc}.pace-barber-shop-lightblue .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-lightblue .pace .pace-progress:after{color:rgba(60,141,188,.2)}.pace-bounce-lightblue .pace .pace-activity{background:#3c8dbc}.pace-center-atom-lightblue .pace-progress{height:100px;width:80px}.pace-center-atom-lightblue .pace-progress:before{background:#3c8dbc;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-lightblue .pace-activity,.pace-center-atom-lightblue .pace-activity:after,.pace-center-atom-lightblue .pace-activity:before{border-color:#3c8dbc}.pace-center-circle-lightblue .pace .pace-progress{background:rgba(60,141,188,.8);color:#fff}.pace-center-radar-lightblue .pace .pace-activity,.pace-center-radar-lightblue .pace .pace-activity:before{border-color:#3c8dbc transparent transparent}.pace-center-simple-lightblue .pace{background:#fff;border-color:#3c8dbc}.pace-center-simple-lightblue .pace .pace-progress{background:#3c8dbc}.pace-material-lightblue .pace{color:#3c8dbc}.pace-corner-indicator-lightblue .pace .pace-activity{background:#3c8dbc}.pace-corner-indicator-lightblue .pace .pace-activity:after,.pace-corner-indicator-lightblue .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-lightblue .pace .pace-activity:before{border-right-color:rgba(60,141,188,.2);border-left-color:rgba(60,141,188,.2)}.pace-corner-indicator-lightblue .pace .pace-activity:after{border-top-color:rgba(60,141,188,.2);border-bottom-color:rgba(60,141,188,.2)}.pace-fill-left-lightblue .pace .pace-progress{background-color:rgba(60,141,188,.2)}.pace-flash-lightblue .pace .pace-progress{background:#3c8dbc}.pace-flash-lightblue .pace .pace-progress-inner{box-shadow:0 0 10px #3c8dbc,0 0 5px #3c8dbc}.pace-flash-lightblue .pace .pace-activity{border-top-color:#3c8dbc;border-left-color:#3c8dbc}.pace-loading-bar-lightblue .pace .pace-progress{background:#3c8dbc;color:#3c8dbc;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-lightblue .pace .pace-activity{box-shadow:inset 0 0 0 2px #3c8dbc,inset 0 0 0 7px #fff}.pace-mac-osx-lightblue .pace .pace-progress{background-color:#3c8dbc;box-shadow:inset -1px 0 #3c8dbc,inset 0 -1px #3c8dbc,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-lightblue .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-lightblue .pace-progress{color:#3c8dbc}.pace-navy .pace .pace-progress{background:#001f3f}.pace-barber-shop-navy .pace{background:#fff}.pace-barber-shop-navy .pace .pace-progress{background:#001f3f}.pace-barber-shop-navy .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-navy .pace .pace-progress:after{color:rgba(0,31,63,.2)}.pace-bounce-navy .pace .pace-activity{background:#001f3f}.pace-center-atom-navy .pace-progress{height:100px;width:80px}.pace-center-atom-navy .pace-progress:before{background:#001f3f;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-navy .pace-activity,.pace-center-atom-navy .pace-activity:after,.pace-center-atom-navy .pace-activity:before{border-color:#001f3f}.pace-center-circle-navy .pace .pace-progress{background:rgba(0,31,63,.8);color:#fff}.pace-center-radar-navy .pace .pace-activity,.pace-center-radar-navy .pace .pace-activity:before{border-color:#001f3f transparent transparent}.pace-center-simple-navy .pace{background:#fff;border-color:#001f3f}.pace-center-simple-navy .pace .pace-progress{background:#001f3f}.pace-material-navy .pace{color:#001f3f}.pace-corner-indicator-navy .pace .pace-activity{background:#001f3f}.pace-corner-indicator-navy .pace .pace-activity:after,.pace-corner-indicator-navy .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-navy .pace .pace-activity:before{border-right-color:rgba(0,31,63,.2);border-left-color:rgba(0,31,63,.2)}.pace-corner-indicator-navy .pace .pace-activity:after{border-top-color:rgba(0,31,63,.2);border-bottom-color:rgba(0,31,63,.2)}.pace-fill-left-navy .pace .pace-progress{background-color:rgba(0,31,63,.2)}.pace-flash-navy .pace .pace-progress{background:#001f3f}.pace-flash-navy .pace .pace-progress-inner{box-shadow:0 0 10px #001f3f,0 0 5px #001f3f}.pace-flash-navy .pace .pace-activity{border-top-color:#001f3f;border-left-color:#001f3f}.pace-loading-bar-navy .pace .pace-progress{background:#001f3f;color:#001f3f;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-navy .pace .pace-activity{box-shadow:inset 0 0 0 2px #001f3f,inset 0 0 0 7px #fff}.pace-mac-osx-navy .pace .pace-progress{background-color:#001f3f;box-shadow:inset -1px 0 #001f3f,inset 0 -1px #001f3f,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-navy .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-navy .pace-progress{color:#001f3f}.pace-olive .pace .pace-progress{background:#3d9970}.pace-barber-shop-olive .pace{background:#fff}.pace-barber-shop-olive .pace .pace-progress{background:#3d9970}.pace-barber-shop-olive .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-olive .pace .pace-progress:after{color:rgba(61,153,112,.2)}.pace-bounce-olive .pace .pace-activity{background:#3d9970}.pace-center-atom-olive .pace-progress{height:100px;width:80px}.pace-center-atom-olive .pace-progress:before{background:#3d9970;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-olive .pace-activity,.pace-center-atom-olive .pace-activity:after,.pace-center-atom-olive .pace-activity:before{border-color:#3d9970}.pace-center-circle-olive .pace .pace-progress{background:rgba(61,153,112,.8);color:#fff}.pace-center-radar-olive .pace .pace-activity,.pace-center-radar-olive .pace .pace-activity:before{border-color:#3d9970 transparent transparent}.pace-center-simple-olive .pace{background:#fff;border-color:#3d9970}.pace-center-simple-olive .pace .pace-progress{background:#3d9970}.pace-material-olive .pace{color:#3d9970}.pace-corner-indicator-olive .pace .pace-activity{background:#3d9970}.pace-corner-indicator-olive .pace .pace-activity:after,.pace-corner-indicator-olive .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-olive .pace .pace-activity:before{border-right-color:rgba(61,153,112,.2);border-left-color:rgba(61,153,112,.2)}.pace-corner-indicator-olive .pace .pace-activity:after{border-top-color:rgba(61,153,112,.2);border-bottom-color:rgba(61,153,112,.2)}.pace-fill-left-olive .pace .pace-progress{background-color:rgba(61,153,112,.2)}.pace-flash-olive .pace .pace-progress{background:#3d9970}.pace-flash-olive .pace .pace-progress-inner{box-shadow:0 0 10px #3d9970,0 0 5px #3d9970}.pace-flash-olive .pace .pace-activity{border-top-color:#3d9970;border-left-color:#3d9970}.pace-loading-bar-olive .pace .pace-progress{background:#3d9970;color:#3d9970;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-olive .pace .pace-activity{box-shadow:inset 0 0 0 2px #3d9970,inset 0 0 0 7px #fff}.pace-mac-osx-olive .pace .pace-progress{background-color:#3d9970;box-shadow:inset -1px 0 #3d9970,inset 0 -1px #3d9970,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-olive .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-olive .pace-progress{color:#3d9970}.pace-lime .pace .pace-progress{background:#01ff70}.pace-barber-shop-lime .pace{background:#2a2e30}.pace-barber-shop-lime .pace .pace-progress{background:#01ff70}.pace-barber-shop-lime .pace .pace-activity{background-image:linear-gradient(45deg,rgba(42,46,48,.2) 25%,transparent 0,transparent 50%,rgba(42,46,48,.2) 0,rgba(42,46,48,.2) 75%,transparent 0,transparent)}.pace-big-counter-lime .pace .pace-progress:after{color:rgba(1,255,112,.2)}.pace-bounce-lime .pace .pace-activity{background:#01ff70}.pace-center-atom-lime .pace-progress{height:100px;width:80px}.pace-center-atom-lime .pace-progress:before{background:#01ff70;color:#2a2e30;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-lime .pace-activity,.pace-center-atom-lime .pace-activity:after,.pace-center-atom-lime .pace-activity:before{border-color:#01ff70}.pace-center-circle-lime .pace .pace-progress{background:rgba(1,255,112,.8);color:#2a2e30}.pace-center-radar-lime .pace .pace-activity,.pace-center-radar-lime .pace .pace-activity:before{border-color:#01ff70 transparent transparent}.pace-center-simple-lime .pace{background:#2a2e30;border-color:#01ff70}.pace-center-simple-lime .pace .pace-progress{background:#01ff70}.pace-material-lime .pace{color:#01ff70}.pace-corner-indicator-lime .pace .pace-activity{background:#01ff70}.pace-corner-indicator-lime .pace .pace-activity:after,.pace-corner-indicator-lime .pace .pace-activity:before{border:5px solid #2a2e30}.pace-corner-indicator-lime .pace .pace-activity:before{border-right-color:rgba(1,255,112,.2);border-left-color:rgba(1,255,112,.2)}.pace-corner-indicator-lime .pace .pace-activity:after{border-top-color:rgba(1,255,112,.2);border-bottom-color:rgba(1,255,112,.2)}.pace-fill-left-lime .pace .pace-progress{background-color:rgba(1,255,112,.2)}.pace-flash-lime .pace .pace-progress{background:#01ff70}.pace-flash-lime .pace .pace-progress-inner{box-shadow:0 0 10px #01ff70,0 0 5px #01ff70}.pace-flash-lime .pace .pace-activity{border-top-color:#01ff70;border-left-color:#01ff70}.pace-loading-bar-lime .pace .pace-progress{background:#01ff70;color:#01ff70;box-shadow:120px 0 #2a2e30,240px 0 #2a2e30}.pace-loading-bar-lime .pace .pace-activity{box-shadow:inset 0 0 0 2px #01ff70,inset 0 0 0 7px #2a2e30}.pace-mac-osx-lime .pace .pace-progress{background-color:#01ff70;box-shadow:inset -1px 0 #01ff70,inset 0 -1px #01ff70,inset 0 2px rgba(42,46,48,.5),inset 0 6px rgba(42,46,48,.3)}.pace-mac-osx-lime .pace .pace-activity{background-image:radial-gradient(rgba(42,46,48,.65) 0,rgba(42,46,48,.15) 100%);height:12px}.pace-progress-color-lime .pace-progress{color:#01ff70}.pace-fuchsia .pace .pace-progress{background:#f012be}.pace-barber-shop-fuchsia .pace{background:#fff}.pace-barber-shop-fuchsia .pace .pace-progress{background:#f012be}.pace-barber-shop-fuchsia .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-fuchsia .pace .pace-progress:after{color:rgba(240,18,190,.2)}.pace-bounce-fuchsia .pace .pace-activity{background:#f012be}.pace-center-atom-fuchsia .pace-progress{height:100px;width:80px}.pace-center-atom-fuchsia .pace-progress:before{background:#f012be;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-fuchsia .pace-activity,.pace-center-atom-fuchsia .pace-activity:after,.pace-center-atom-fuchsia .pace-activity:before{border-color:#f012be}.pace-center-circle-fuchsia .pace .pace-progress{background:rgba(240,18,190,.8);color:#fff}.pace-center-radar-fuchsia .pace .pace-activity,.pace-center-radar-fuchsia .pace .pace-activity:before{border-color:#f012be transparent transparent}.pace-center-simple-fuchsia .pace{background:#fff;border-color:#f012be}.pace-center-simple-fuchsia .pace .pace-progress{background:#f012be}.pace-material-fuchsia .pace{color:#f012be}.pace-corner-indicator-fuchsia .pace .pace-activity{background:#f012be}.pace-corner-indicator-fuchsia .pace .pace-activity:after,.pace-corner-indicator-fuchsia .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-fuchsia .pace .pace-activity:before{border-right-color:rgba(240,18,190,.2);border-left-color:rgba(240,18,190,.2)}.pace-corner-indicator-fuchsia .pace .pace-activity:after{border-top-color:rgba(240,18,190,.2);border-bottom-color:rgba(240,18,190,.2)}.pace-fill-left-fuchsia .pace .pace-progress{background-color:rgba(240,18,190,.2)}.pace-flash-fuchsia .pace .pace-progress{background:#f012be}.pace-flash-fuchsia .pace .pace-progress-inner{box-shadow:0 0 10px #f012be,0 0 5px #f012be}.pace-flash-fuchsia .pace .pace-activity{border-top-color:#f012be;border-left-color:#f012be}.pace-loading-bar-fuchsia .pace .pace-progress{background:#f012be;color:#f012be;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-fuchsia .pace .pace-activity{box-shadow:inset 0 0 0 2px #f012be,inset 0 0 0 7px #fff}.pace-mac-osx-fuchsia .pace .pace-progress{background-color:#f012be;box-shadow:inset -1px 0 #f012be,inset 0 -1px #f012be,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-fuchsia .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-fuchsia .pace-progress{color:#f012be}.pace-maroon .pace .pace-progress{background:#d81b60}.pace-barber-shop-maroon .pace{background:#fff}.pace-barber-shop-maroon .pace .pace-progress{background:#d81b60}.pace-barber-shop-maroon .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-maroon .pace .pace-progress:after{color:rgba(216,27,96,.2)}.pace-bounce-maroon .pace .pace-activity{background:#d81b60}.pace-center-atom-maroon .pace-progress{height:100px;width:80px}.pace-center-atom-maroon .pace-progress:before{background:#d81b60;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-maroon .pace-activity,.pace-center-atom-maroon .pace-activity:after,.pace-center-atom-maroon .pace-activity:before{border-color:#d81b60}.pace-center-circle-maroon .pace .pace-progress{background:rgba(216,27,96,.8);color:#fff}.pace-center-radar-maroon .pace .pace-activity,.pace-center-radar-maroon .pace .pace-activity:before{border-color:#d81b60 transparent transparent}.pace-center-simple-maroon .pace{background:#fff;border-color:#d81b60}.pace-center-simple-maroon .pace .pace-progress{background:#d81b60}.pace-material-maroon .pace{color:#d81b60}.pace-corner-indicator-maroon .pace .pace-activity{background:#d81b60}.pace-corner-indicator-maroon .pace .pace-activity:after,.pace-corner-indicator-maroon .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-maroon .pace .pace-activity:before{border-right-color:rgba(216,27,96,.2);border-left-color:rgba(216,27,96,.2)}.pace-corner-indicator-maroon .pace .pace-activity:after{border-top-color:rgba(216,27,96,.2);border-bottom-color:rgba(216,27,96,.2)}.pace-fill-left-maroon .pace .pace-progress{background-color:rgba(216,27,96,.2)}.pace-flash-maroon .pace .pace-progress{background:#d81b60}.pace-flash-maroon .pace .pace-progress-inner{box-shadow:0 0 10px #d81b60,0 0 5px #d81b60}.pace-flash-maroon .pace .pace-activity{border-top-color:#d81b60;border-left-color:#d81b60}.pace-loading-bar-maroon .pace .pace-progress{background:#d81b60;color:#d81b60;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-maroon .pace .pace-activity{box-shadow:inset 0 0 0 2px #d81b60,inset 0 0 0 7px #fff}.pace-mac-osx-maroon .pace .pace-progress{background-color:#d81b60;box-shadow:inset -1px 0 #d81b60,inset 0 -1px #d81b60,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-maroon .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-maroon .pace-progress{color:#d81b60}.pace-blue .pace .pace-progress{background:#3085d6}.pace-barber-shop-blue .pace{background:#fff}.pace-barber-shop-blue .pace .pace-progress{background:#3085d6}.pace-barber-shop-blue .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-blue .pace .pace-progress:after{color:rgba(48,133,214,.2)}.pace-bounce-blue .pace .pace-activity{background:#3085d6}.pace-center-atom-blue .pace-progress{height:100px;width:80px}.pace-center-atom-blue .pace-progress:before{background:#3085d6;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-blue .pace-activity,.pace-center-atom-blue .pace-activity:after,.pace-center-atom-blue .pace-activity:before{border-color:#3085d6}.pace-center-circle-blue .pace .pace-progress{background:rgba(48,133,214,.8);color:#fff}.pace-center-radar-blue .pace .pace-activity,.pace-center-radar-blue .pace .pace-activity:before{border-color:#3085d6 transparent transparent}.pace-center-simple-blue .pace{background:#fff;border-color:#3085d6}.pace-center-simple-blue .pace .pace-progress{background:#3085d6}.pace-material-blue .pace{color:#3085d6}.pace-corner-indicator-blue .pace .pace-activity{background:#3085d6}.pace-corner-indicator-blue .pace .pace-activity:after,.pace-corner-indicator-blue .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-blue .pace .pace-activity:before{border-right-color:rgba(48,133,214,.2);border-left-color:rgba(48,133,214,.2)}.pace-corner-indicator-blue .pace .pace-activity:after{border-top-color:rgba(48,133,214,.2);border-bottom-color:rgba(48,133,214,.2)}.pace-fill-left-blue .pace .pace-progress{background-color:rgba(48,133,214,.2)}.pace-flash-blue .pace .pace-progress{background:#3085d6}.pace-flash-blue .pace .pace-progress-inner{box-shadow:0 0 10px #3085d6,0 0 5px #3085d6}.pace-flash-blue .pace .pace-activity{border-top-color:#3085d6;border-left-color:#3085d6}.pace-loading-bar-blue .pace .pace-progress{background:#3085d6;color:#3085d6;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-blue .pace .pace-activity{box-shadow:inset 0 0 0 2px #3085d6,inset 0 0 0 7px #fff}.pace-mac-osx-blue .pace .pace-progress{background-color:#3085d6;box-shadow:inset -1px 0 #3085d6,inset 0 -1px #3085d6,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-blue .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-blue .pace-progress{color:#3085d6}.pace-indigo .pace .pace-progress{background:#5c6bc6}.pace-barber-shop-indigo .pace{background:#fff}.pace-barber-shop-indigo .pace .pace-progress{background:#5c6bc6}.pace-barber-shop-indigo .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-indigo .pace .pace-progress:after{color:rgba(92,107,198,.2)}.pace-bounce-indigo .pace .pace-activity{background:#5c6bc6}.pace-center-atom-indigo .pace-progress{height:100px;width:80px}.pace-center-atom-indigo .pace-progress:before{background:#5c6bc6;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-indigo .pace-activity,.pace-center-atom-indigo .pace-activity:after,.pace-center-atom-indigo .pace-activity:before{border-color:#5c6bc6}.pace-center-circle-indigo .pace .pace-progress{background:rgba(92,107,198,.8);color:#fff}.pace-center-radar-indigo .pace .pace-activity,.pace-center-radar-indigo .pace .pace-activity:before{border-color:#5c6bc6 transparent transparent}.pace-center-simple-indigo .pace{background:#fff;border-color:#5c6bc6}.pace-center-simple-indigo .pace .pace-progress{background:#5c6bc6}.pace-material-indigo .pace{color:#5c6bc6}.pace-corner-indicator-indigo .pace .pace-activity{background:#5c6bc6}.pace-corner-indicator-indigo .pace .pace-activity:after,.pace-corner-indicator-indigo .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-indigo .pace .pace-activity:before{border-right-color:rgba(92,107,198,.2);border-left-color:rgba(92,107,198,.2)}.pace-corner-indicator-indigo .pace .pace-activity:after{border-top-color:rgba(92,107,198,.2);border-bottom-color:rgba(92,107,198,.2)}.pace-fill-left-indigo .pace .pace-progress{background-color:rgba(92,107,198,.2)}.pace-flash-indigo .pace .pace-progress{background:#5c6bc6}.pace-flash-indigo .pace .pace-progress-inner{box-shadow:0 0 10px #5c6bc6,0 0 5px #5c6bc6}.pace-flash-indigo .pace .pace-activity{border-top-color:#5c6bc6;border-left-color:#5c6bc6}.pace-loading-bar-indigo .pace .pace-progress{background:#5c6bc6;color:#5c6bc6;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-indigo .pace .pace-activity{box-shadow:inset 0 0 0 2px #5c6bc6,inset 0 0 0 7px #fff}.pace-mac-osx-indigo .pace .pace-progress{background-color:#5c6bc6;box-shadow:inset -1px 0 #5c6bc6,inset 0 -1px #5c6bc6,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-indigo .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-indigo .pace-progress{color:#5c6bc6}.pace-purple .pace .pace-progress{background:#6f42c1}.pace-barber-shop-purple .pace{background:#fff}.pace-barber-shop-purple .pace .pace-progress{background:#6f42c1}.pace-barber-shop-purple .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-purple .pace .pace-progress:after{color:rgba(111,66,193,.2)}.pace-bounce-purple .pace .pace-activity{background:#6f42c1}.pace-center-atom-purple .pace-progress{height:100px;width:80px}.pace-center-atom-purple .pace-progress:before{background:#6f42c1;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-purple .pace-activity,.pace-center-atom-purple .pace-activity:after,.pace-center-atom-purple .pace-activity:before{border-color:#6f42c1}.pace-center-circle-purple .pace .pace-progress{background:rgba(111,66,193,.8);color:#fff}.pace-center-radar-purple .pace .pace-activity,.pace-center-radar-purple .pace .pace-activity:before{border-color:#6f42c1 transparent transparent}.pace-center-simple-purple .pace{background:#fff;border-color:#6f42c1}.pace-center-simple-purple .pace .pace-progress{background:#6f42c1}.pace-material-purple .pace{color:#6f42c1}.pace-corner-indicator-purple .pace .pace-activity{background:#6f42c1}.pace-corner-indicator-purple .pace .pace-activity:after,.pace-corner-indicator-purple .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-purple .pace .pace-activity:before{border-right-color:rgba(111,66,193,.2);border-left-color:rgba(111,66,193,.2)}.pace-corner-indicator-purple .pace .pace-activity:after{border-top-color:rgba(111,66,193,.2);border-bottom-color:rgba(111,66,193,.2)}.pace-fill-left-purple .pace .pace-progress{background-color:rgba(111,66,193,.2)}.pace-flash-purple .pace .pace-progress{background:#6f42c1}.pace-flash-purple .pace .pace-progress-inner{box-shadow:0 0 10px #6f42c1,0 0 5px #6f42c1}.pace-flash-purple .pace .pace-activity{border-top-color:#6f42c1;border-left-color:#6f42c1}.pace-loading-bar-purple .pace .pace-progress{background:#6f42c1;color:#6f42c1;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-purple .pace .pace-activity{box-shadow:inset 0 0 0 2px #6f42c1,inset 0 0 0 7px #fff}.pace-mac-osx-purple .pace .pace-progress{background-color:#6f42c1;box-shadow:inset -1px 0 #6f42c1,inset 0 -1px #6f42c1,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-purple .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-purple .pace-progress{color:#6f42c1}.pace-pink .pace .pace-progress{background:#ff8acc}.pace-barber-shop-pink .pace{background:#2a2e30}.pace-barber-shop-pink .pace .pace-progress{background:#ff8acc}.pace-barber-shop-pink .pace .pace-activity{background-image:linear-gradient(45deg,rgba(42,46,48,.2) 25%,transparent 0,transparent 50%,rgba(42,46,48,.2) 0,rgba(42,46,48,.2) 75%,transparent 0,transparent)}.pace-big-counter-pink .pace .pace-progress:after{color:rgba(255,138,204,.2)}.pace-bounce-pink .pace .pace-activity{background:#ff8acc}.pace-center-atom-pink .pace-progress{height:100px;width:80px}.pace-center-atom-pink .pace-progress:before{background:#ff8acc;color:#2a2e30;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-pink .pace-activity,.pace-center-atom-pink .pace-activity:after,.pace-center-atom-pink .pace-activity:before{border-color:#ff8acc}.pace-center-circle-pink .pace .pace-progress{background:rgba(255,138,204,.8);color:#2a2e30}.pace-center-radar-pink .pace .pace-activity,.pace-center-radar-pink .pace .pace-activity:before{border-color:#ff8acc transparent transparent}.pace-center-simple-pink .pace{background:#2a2e30;border-color:#ff8acc}.pace-center-simple-pink .pace .pace-progress{background:#ff8acc}.pace-material-pink .pace{color:#ff8acc}.pace-corner-indicator-pink .pace .pace-activity{background:#ff8acc}.pace-corner-indicator-pink .pace .pace-activity:after,.pace-corner-indicator-pink .pace .pace-activity:before{border:5px solid #2a2e30}.pace-corner-indicator-pink .pace .pace-activity:before{border-right-color:rgba(255,138,204,.2);border-left-color:rgba(255,138,204,.2)}.pace-corner-indicator-pink .pace .pace-activity:after{border-top-color:rgba(255,138,204,.2);border-bottom-color:rgba(255,138,204,.2)}.pace-fill-left-pink .pace .pace-progress{background-color:rgba(255,138,204,.2)}.pace-flash-pink .pace .pace-progress{background:#ff8acc}.pace-flash-pink .pace .pace-progress-inner{box-shadow:0 0 10px #ff8acc,0 0 5px #ff8acc}.pace-flash-pink .pace .pace-activity{border-top-color:#ff8acc;border-left-color:#ff8acc}.pace-loading-bar-pink .pace .pace-progress{background:#ff8acc;color:#ff8acc;box-shadow:120px 0 #2a2e30,240px 0 #2a2e30}.pace-loading-bar-pink .pace .pace-activity{box-shadow:inset 0 0 0 2px #ff8acc,inset 0 0 0 7px #2a2e30}.pace-mac-osx-pink .pace .pace-progress{background-color:#ff8acc;box-shadow:inset -1px 0 #ff8acc,inset 0 -1px #ff8acc,inset 0 2px rgba(42,46,48,.5),inset 0 6px rgba(42,46,48,.3)}.pace-mac-osx-pink .pace .pace-activity{background-image:radial-gradient(rgba(42,46,48,.65) 0,rgba(42,46,48,.15) 100%);height:12px}.pace-progress-color-pink .pace-progress{color:#ff8acc}.pace-red .pace .pace-progress{background:#ea5455}.pace-barber-shop-red .pace{background:#fff}.pace-barber-shop-red .pace .pace-progress{background:#ea5455}.pace-barber-shop-red .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-red .pace .pace-progress:after{color:rgba(234,84,85,.2)}.pace-bounce-red .pace .pace-activity{background:#ea5455}.pace-center-atom-red .pace-progress{height:100px;width:80px}.pace-center-atom-red .pace-progress:before{background:#ea5455;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-red .pace-activity,.pace-center-atom-red .pace-activity:after,.pace-center-atom-red .pace-activity:before{border-color:#ea5455}.pace-center-circle-red .pace .pace-progress{background:rgba(234,84,85,.8);color:#fff}.pace-center-radar-red .pace .pace-activity,.pace-center-radar-red .pace .pace-activity:before{border-color:#ea5455 transparent transparent}.pace-center-simple-red .pace{background:#fff;border-color:#ea5455}.pace-center-simple-red .pace .pace-progress{background:#ea5455}.pace-material-red .pace{color:#ea5455}.pace-corner-indicator-red .pace .pace-activity{background:#ea5455}.pace-corner-indicator-red .pace .pace-activity:after,.pace-corner-indicator-red .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-red .pace .pace-activity:before{border-right-color:rgba(234,84,85,.2);border-left-color:rgba(234,84,85,.2)}.pace-corner-indicator-red .pace .pace-activity:after{border-top-color:rgba(234,84,85,.2);border-bottom-color:rgba(234,84,85,.2)}.pace-fill-left-red .pace .pace-progress{background-color:rgba(234,84,85,.2)}.pace-flash-red .pace .pace-progress{background:#ea5455}.pace-flash-red .pace .pace-progress-inner{box-shadow:0 0 10px #ea5455,0 0 5px #ea5455}.pace-flash-red .pace .pace-activity{border-top-color:#ea5455;border-left-color:#ea5455}.pace-loading-bar-red .pace .pace-progress{background:#ea5455;color:#ea5455;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-red .pace .pace-activity{box-shadow:inset 0 0 0 2px #ea5455,inset 0 0 0 7px #fff}.pace-mac-osx-red .pace .pace-progress{background-color:#ea5455;box-shadow:inset -1px 0 #ea5455,inset 0 -1px #ea5455,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-red .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-red .pace-progress{color:#ea5455}.pace-orange .pace .pace-progress{background:#dda451}.pace-barber-shop-orange .pace{background:#2a2e30}.pace-barber-shop-orange .pace .pace-progress{background:#dda451}.pace-barber-shop-orange .pace .pace-activity{background-image:linear-gradient(45deg,rgba(42,46,48,.2) 25%,transparent 0,transparent 50%,rgba(42,46,48,.2) 0,rgba(42,46,48,.2) 75%,transparent 0,transparent)}.pace-big-counter-orange .pace .pace-progress:after{color:rgba(221,164,81,.2)}.pace-bounce-orange .pace .pace-activity{background:#dda451}.pace-center-atom-orange .pace-progress{height:100px;width:80px}.pace-center-atom-orange .pace-progress:before{background:#dda451;color:#2a2e30;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-orange .pace-activity,.pace-center-atom-orange .pace-activity:after,.pace-center-atom-orange .pace-activity:before{border-color:#dda451}.pace-center-circle-orange .pace .pace-progress{background:rgba(221,164,81,.8);color:#2a2e30}.pace-center-radar-orange .pace .pace-activity,.pace-center-radar-orange .pace .pace-activity:before{border-color:#dda451 transparent transparent}.pace-center-simple-orange .pace{background:#2a2e30;border-color:#dda451}.pace-center-simple-orange .pace .pace-progress{background:#dda451}.pace-material-orange .pace{color:#dda451}.pace-corner-indicator-orange .pace .pace-activity{background:#dda451}.pace-corner-indicator-orange .pace .pace-activity:after,.pace-corner-indicator-orange .pace .pace-activity:before{border:5px solid #2a2e30}.pace-corner-indicator-orange .pace .pace-activity:before{border-right-color:rgba(221,164,81,.2);border-left-color:rgba(221,164,81,.2)}.pace-corner-indicator-orange .pace .pace-activity:after{border-top-color:rgba(221,164,81,.2);border-bottom-color:rgba(221,164,81,.2)}.pace-fill-left-orange .pace .pace-progress{background-color:rgba(221,164,81,.2)}.pace-flash-orange .pace .pace-progress{background:#dda451}.pace-flash-orange .pace .pace-progress-inner{box-shadow:0 0 10px #dda451,0 0 5px #dda451}.pace-flash-orange .pace .pace-activity{border-top-color:#dda451;border-left-color:#dda451}.pace-loading-bar-orange .pace .pace-progress{background:#dda451;color:#dda451;box-shadow:120px 0 #2a2e30,240px 0 #2a2e30}.pace-loading-bar-orange .pace .pace-activity{box-shadow:inset 0 0 0 2px #dda451,inset 0 0 0 7px #2a2e30}.pace-mac-osx-orange .pace .pace-progress{background-color:#dda451;box-shadow:inset -1px 0 #dda451,inset 0 -1px #dda451,inset 0 2px rgba(42,46,48,.5),inset 0 6px rgba(42,46,48,.3)}.pace-mac-osx-orange .pace .pace-activity{background-image:radial-gradient(rgba(42,46,48,.65) 0,rgba(42,46,48,.15) 100%);height:12px}.pace-progress-color-orange .pace-progress{color:#dda451}.pace-yellow .pace .pace-progress{background:#edc30e}.pace-barber-shop-yellow .pace{background:#2a2e30}.pace-barber-shop-yellow .pace .pace-progress{background:#edc30e}.pace-barber-shop-yellow .pace .pace-activity{background-image:linear-gradient(45deg,rgba(42,46,48,.2) 25%,transparent 0,transparent 50%,rgba(42,46,48,.2) 0,rgba(42,46,48,.2) 75%,transparent 0,transparent)}.pace-big-counter-yellow .pace .pace-progress:after{color:rgba(237,195,14,.2)}.pace-bounce-yellow .pace .pace-activity{background:#edc30e}.pace-center-atom-yellow .pace-progress{height:100px;width:80px}.pace-center-atom-yellow .pace-progress:before{background:#edc30e;color:#2a2e30;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-yellow .pace-activity,.pace-center-atom-yellow .pace-activity:after,.pace-center-atom-yellow .pace-activity:before{border-color:#edc30e}.pace-center-circle-yellow .pace .pace-progress{background:rgba(237,195,14,.8);color:#2a2e30}.pace-center-radar-yellow .pace .pace-activity,.pace-center-radar-yellow .pace .pace-activity:before{border-color:#edc30e transparent transparent}.pace-center-simple-yellow .pace{background:#2a2e30;border-color:#edc30e}.pace-center-simple-yellow .pace .pace-progress{background:#edc30e}.pace-material-yellow .pace{color:#edc30e}.pace-corner-indicator-yellow .pace .pace-activity{background:#edc30e}.pace-corner-indicator-yellow .pace .pace-activity:after,.pace-corner-indicator-yellow .pace .pace-activity:before{border:5px solid #2a2e30}.pace-corner-indicator-yellow .pace .pace-activity:before{border-right-color:rgba(237,195,14,.2);border-left-color:rgba(237,195,14,.2)}.pace-corner-indicator-yellow .pace .pace-activity:after{border-top-color:rgba(237,195,14,.2);border-bottom-color:rgba(237,195,14,.2)}.pace-fill-left-yellow .pace .pace-progress{background-color:rgba(237,195,14,.2)}.pace-flash-yellow .pace .pace-progress{background:#edc30e}.pace-flash-yellow .pace .pace-progress-inner{box-shadow:0 0 10px #edc30e,0 0 5px #edc30e}.pace-flash-yellow .pace .pace-activity{border-top-color:#edc30e;border-left-color:#edc30e}.pace-loading-bar-yellow .pace .pace-progress{background:#edc30e;color:#edc30e;box-shadow:120px 0 #2a2e30,240px 0 #2a2e30}.pace-loading-bar-yellow .pace .pace-activity{box-shadow:inset 0 0 0 2px #edc30e,inset 0 0 0 7px #2a2e30}.pace-mac-osx-yellow .pace .pace-progress{background-color:#edc30e;box-shadow:inset -1px 0 #edc30e,inset 0 -1px #edc30e,inset 0 2px rgba(42,46,48,.5),inset 0 6px rgba(42,46,48,.3)}.pace-mac-osx-yellow .pace .pace-activity{background-image:radial-gradient(rgba(42,46,48,.65) 0,rgba(42,46,48,.15) 100%);height:12px}.pace-progress-color-yellow .pace-progress{color:#edc30e}.pace-green .pace .pace-progress{background:#21b978}.pace-barber-shop-green .pace{background:#fff}.pace-barber-shop-green .pace .pace-progress{background:#21b978}.pace-barber-shop-green .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-green .pace .pace-progress:after{color:rgba(33,185,120,.2)}.pace-bounce-green .pace .pace-activity{background:#21b978}.pace-center-atom-green .pace-progress{height:100px;width:80px}.pace-center-atom-green .pace-progress:before{background:#21b978;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-green .pace-activity,.pace-center-atom-green .pace-activity:after,.pace-center-atom-green .pace-activity:before{border-color:#21b978}.pace-center-circle-green .pace .pace-progress{background:rgba(33,185,120,.8);color:#fff}.pace-center-radar-green .pace .pace-activity,.pace-center-radar-green .pace .pace-activity:before{border-color:#21b978 transparent transparent}.pace-center-simple-green .pace{background:#fff;border-color:#21b978}.pace-center-simple-green .pace .pace-progress{background:#21b978}.pace-material-green .pace{color:#21b978}.pace-corner-indicator-green .pace .pace-activity{background:#21b978}.pace-corner-indicator-green .pace .pace-activity:after,.pace-corner-indicator-green .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-green .pace .pace-activity:before{border-right-color:rgba(33,185,120,.2);border-left-color:rgba(33,185,120,.2)}.pace-corner-indicator-green .pace .pace-activity:after{border-top-color:rgba(33,185,120,.2);border-bottom-color:rgba(33,185,120,.2)}.pace-fill-left-green .pace .pace-progress{background-color:rgba(33,185,120,.2)}.pace-flash-green .pace .pace-progress{background:#21b978}.pace-flash-green .pace .pace-progress-inner{box-shadow:0 0 10px #21b978,0 0 5px #21b978}.pace-flash-green .pace .pace-activity{border-top-color:#21b978;border-left-color:#21b978}.pace-loading-bar-green .pace .pace-progress{background:#21b978;color:#21b978;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-green .pace .pace-activity{box-shadow:inset 0 0 0 2px #21b978,inset 0 0 0 7px #fff}.pace-mac-osx-green .pace .pace-progress{background-color:#21b978;box-shadow:inset -1px 0 #21b978,inset 0 -1px #21b978,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-green .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-green .pace-progress{color:#21b978}.pace-teal .pace .pace-progress{background:#20c997}.pace-barber-shop-teal .pace{background:#fff}.pace-barber-shop-teal .pace .pace-progress{background:#20c997}.pace-barber-shop-teal .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-teal .pace .pace-progress:after{color:rgba(32,201,151,.2)}.pace-bounce-teal .pace .pace-activity{background:#20c997}.pace-center-atom-teal .pace-progress{height:100px;width:80px}.pace-center-atom-teal .pace-progress:before{background:#20c997;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-teal .pace-activity,.pace-center-atom-teal .pace-activity:after,.pace-center-atom-teal .pace-activity:before{border-color:#20c997}.pace-center-circle-teal .pace .pace-progress{background:rgba(32,201,151,.8);color:#fff}.pace-center-radar-teal .pace .pace-activity,.pace-center-radar-teal .pace .pace-activity:before{border-color:#20c997 transparent transparent}.pace-center-simple-teal .pace{background:#fff;border-color:#20c997}.pace-center-simple-teal .pace .pace-progress{background:#20c997}.pace-material-teal .pace{color:#20c997}.pace-corner-indicator-teal .pace .pace-activity{background:#20c997}.pace-corner-indicator-teal .pace .pace-activity:after,.pace-corner-indicator-teal .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-teal .pace .pace-activity:before{border-right-color:rgba(32,201,151,.2);border-left-color:rgba(32,201,151,.2)}.pace-corner-indicator-teal .pace .pace-activity:after{border-top-color:rgba(32,201,151,.2);border-bottom-color:rgba(32,201,151,.2)}.pace-fill-left-teal .pace .pace-progress{background-color:rgba(32,201,151,.2)}.pace-flash-teal .pace .pace-progress{background:#20c997}.pace-flash-teal .pace .pace-progress-inner{box-shadow:0 0 10px #20c997,0 0 5px #20c997}.pace-flash-teal .pace .pace-activity{border-top-color:#20c997;border-left-color:#20c997}.pace-loading-bar-teal .pace .pace-progress{background:#20c997;color:#20c997;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-teal .pace .pace-activity{box-shadow:inset 0 0 0 2px #20c997,inset 0 0 0 7px #fff}.pace-mac-osx-teal .pace .pace-progress{background-color:#20c997;box-shadow:inset -1px 0 #20c997,inset 0 -1px #20c997,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-teal .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-teal .pace-progress{color:#20c997}.pace-cyan .pace .pace-progress{background:#7367f0}.pace-barber-shop-cyan .pace{background:#fff}.pace-barber-shop-cyan .pace .pace-progress{background:#7367f0}.pace-barber-shop-cyan .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-cyan .pace .pace-progress:after{color:rgba(115,103,240,.2)}.pace-bounce-cyan .pace .pace-activity{background:#7367f0}.pace-center-atom-cyan .pace-progress{height:100px;width:80px}.pace-center-atom-cyan .pace-progress:before{background:#7367f0;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-cyan .pace-activity,.pace-center-atom-cyan .pace-activity:after,.pace-center-atom-cyan .pace-activity:before{border-color:#7367f0}.pace-center-circle-cyan .pace .pace-progress{background:rgba(115,103,240,.8);color:#fff}.pace-center-radar-cyan .pace .pace-activity,.pace-center-radar-cyan .pace .pace-activity:before{border-color:#7367f0 transparent transparent}.pace-center-simple-cyan .pace{background:#fff;border-color:#7367f0}.pace-center-simple-cyan .pace .pace-progress{background:#7367f0}.pace-material-cyan .pace{color:#7367f0}.pace-corner-indicator-cyan .pace .pace-activity{background:#7367f0}.pace-corner-indicator-cyan .pace .pace-activity:after,.pace-corner-indicator-cyan .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-cyan .pace .pace-activity:before{border-right-color:rgba(115,103,240,.2);border-left-color:rgba(115,103,240,.2)}.pace-corner-indicator-cyan .pace .pace-activity:after{border-top-color:rgba(115,103,240,.2);border-bottom-color:rgba(115,103,240,.2)}.pace-fill-left-cyan .pace .pace-progress{background-color:rgba(115,103,240,.2)}.pace-flash-cyan .pace .pace-progress{background:#7367f0}.pace-flash-cyan .pace .pace-progress-inner{box-shadow:0 0 10px #7367f0,0 0 5px #7367f0}.pace-flash-cyan .pace .pace-activity{border-top-color:#7367f0;border-left-color:#7367f0}.pace-loading-bar-cyan .pace .pace-progress{background:#7367f0;color:#7367f0;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-cyan .pace .pace-activity{box-shadow:inset 0 0 0 2px #7367f0,inset 0 0 0 7px #fff}.pace-mac-osx-cyan .pace .pace-progress{background-color:#7367f0;box-shadow:inset -1px 0 #7367f0,inset 0 -1px #7367f0,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-cyan .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-cyan .pace-progress{color:#7367f0}.pace-white .pace .pace-progress{background:#fff}.pace-barber-shop-white .pace{background:#2a2e30}.pace-barber-shop-white .pace .pace-progress{background:#fff}.pace-barber-shop-white .pace .pace-activity{background-image:linear-gradient(45deg,rgba(42,46,48,.2) 25%,transparent 0,transparent 50%,rgba(42,46,48,.2) 0,rgba(42,46,48,.2) 75%,transparent 0,transparent)}.pace-big-counter-white .pace .pace-progress:after{color:hsla(0,0%,100%,.2)}.pace-bounce-white .pace .pace-activity{background:#fff}.pace-center-atom-white .pace-progress{height:100px;width:80px}.pace-center-atom-white .pace-progress:before{background:#fff;color:#2a2e30;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-white .pace-activity,.pace-center-atom-white .pace-activity:after,.pace-center-atom-white .pace-activity:before{border-color:#fff}.pace-center-circle-white .pace .pace-progress{background:hsla(0,0%,100%,.8);color:#2a2e30}.pace-center-radar-white .pace .pace-activity,.pace-center-radar-white .pace .pace-activity:before{border-color:#fff transparent transparent}.pace-center-simple-white .pace{background:#2a2e30;border-color:#fff}.pace-center-simple-white .pace .pace-progress{background:#fff}.pace-material-white .pace{color:#fff}.pace-corner-indicator-white .pace .pace-activity{background:#fff}.pace-corner-indicator-white .pace .pace-activity:after,.pace-corner-indicator-white .pace .pace-activity:before{border:5px solid #2a2e30}.pace-corner-indicator-white .pace .pace-activity:before{border-right-color:hsla(0,0%,100%,.2);border-left-color:hsla(0,0%,100%,.2)}.pace-corner-indicator-white .pace .pace-activity:after{border-top-color:hsla(0,0%,100%,.2);border-bottom-color:hsla(0,0%,100%,.2)}.pace-fill-left-white .pace .pace-progress{background-color:hsla(0,0%,100%,.2)}.pace-flash-white .pace .pace-progress{background:#fff}.pace-flash-white .pace .pace-progress-inner{box-shadow:0 0 10px #fff,0 0 5px #fff}.pace-flash-white .pace .pace-activity{border-top-color:#fff;border-left-color:#fff}.pace-loading-bar-white .pace .pace-progress{background:#fff;color:#fff;box-shadow:120px 0 #2a2e30,240px 0 #2a2e30}.pace-loading-bar-white .pace .pace-activity{box-shadow:inset 0 0 0 2px #fff,inset 0 0 0 7px #2a2e30}.pace-mac-osx-white .pace .pace-progress{background-color:#fff;box-shadow:inset -1px 0 #fff,inset 0 -1px #fff,inset 0 2px rgba(42,46,48,.5),inset 0 6px rgba(42,46,48,.3)}.pace-mac-osx-white .pace .pace-activity{background-image:radial-gradient(rgba(42,46,48,.65) 0,rgba(42,46,48,.15) 100%);height:12px}.pace-progress-color-white .pace-progress{color:#fff}.pace-gray .pace .pace-progress{background:#b8c2cc}.pace-barber-shop-gray .pace{background:#2a2e30}.pace-barber-shop-gray .pace .pace-progress{background:#b8c2cc}.pace-barber-shop-gray .pace .pace-activity{background-image:linear-gradient(45deg,rgba(42,46,48,.2) 25%,transparent 0,transparent 50%,rgba(42,46,48,.2) 0,rgba(42,46,48,.2) 75%,transparent 0,transparent)}.pace-big-counter-gray .pace .pace-progress:after{color:rgba(184,194,204,.2)}.pace-bounce-gray .pace .pace-activity{background:#b8c2cc}.pace-center-atom-gray .pace-progress{height:100px;width:80px}.pace-center-atom-gray .pace-progress:before{background:#b8c2cc;color:#2a2e30;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-gray .pace-activity,.pace-center-atom-gray .pace-activity:after,.pace-center-atom-gray .pace-activity:before{border-color:#b8c2cc}.pace-center-circle-gray .pace .pace-progress{background:rgba(184,194,204,.8);color:#2a2e30}.pace-center-radar-gray .pace .pace-activity,.pace-center-radar-gray .pace .pace-activity:before{border-color:#b8c2cc transparent transparent}.pace-center-simple-gray .pace{background:#2a2e30;border-color:#b8c2cc}.pace-center-simple-gray .pace .pace-progress{background:#b8c2cc}.pace-material-gray .pace{color:#b8c2cc}.pace-corner-indicator-gray .pace .pace-activity{background:#b8c2cc}.pace-corner-indicator-gray .pace .pace-activity:after,.pace-corner-indicator-gray .pace .pace-activity:before{border:5px solid #2a2e30}.pace-corner-indicator-gray .pace .pace-activity:before{border-right-color:rgba(184,194,204,.2);border-left-color:rgba(184,194,204,.2)}.pace-corner-indicator-gray .pace .pace-activity:after{border-top-color:rgba(184,194,204,.2);border-bottom-color:rgba(184,194,204,.2)}.pace-fill-left-gray .pace .pace-progress{background-color:rgba(184,194,204,.2)}.pace-flash-gray .pace .pace-progress{background:#b8c2cc}.pace-flash-gray .pace .pace-progress-inner{box-shadow:0 0 10px #b8c2cc,0 0 5px #b8c2cc}.pace-flash-gray .pace .pace-activity{border-top-color:#b8c2cc;border-left-color:#b8c2cc}.pace-loading-bar-gray .pace .pace-progress{background:#b8c2cc;color:#b8c2cc;box-shadow:120px 0 #2a2e30,240px 0 #2a2e30}.pace-loading-bar-gray .pace .pace-activity{box-shadow:inset 0 0 0 2px #b8c2cc,inset 0 0 0 7px #2a2e30}.pace-mac-osx-gray .pace .pace-progress{background-color:#b8c2cc;box-shadow:inset -1px 0 #b8c2cc,inset 0 -1px #b8c2cc,inset 0 2px rgba(42,46,48,.5),inset 0 6px rgba(42,46,48,.3)}.pace-mac-osx-gray .pace .pace-activity{background-image:radial-gradient(rgba(42,46,48,.65) 0,rgba(42,46,48,.15) 100%);height:12px}.pace-progress-color-gray .pace-progress{color:#b8c2cc}.pace-gray-dark .pace .pace-progress{background:#1e1e1e}.pace-barber-shop-gray-dark .pace{background:#fff}.pace-barber-shop-gray-dark .pace .pace-progress{background:#1e1e1e}.pace-barber-shop-gray-dark .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-gray-dark .pace .pace-progress:after{color:rgba(30,30,30,.2)}.pace-bounce-gray-dark .pace .pace-activity{background:#1e1e1e}.pace-center-atom-gray-dark .pace-progress{height:100px;width:80px}.pace-center-atom-gray-dark .pace-progress:before{background:#1e1e1e;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-gray-dark .pace-activity,.pace-center-atom-gray-dark .pace-activity:after,.pace-center-atom-gray-dark .pace-activity:before{border-color:#1e1e1e}.pace-center-circle-gray-dark .pace .pace-progress{background:rgba(30,30,30,.8);color:#fff}.pace-center-radar-gray-dark .pace .pace-activity,.pace-center-radar-gray-dark .pace .pace-activity:before{border-color:#1e1e1e transparent transparent}.pace-center-simple-gray-dark .pace{background:#fff;border-color:#1e1e1e}.pace-center-simple-gray-dark .pace .pace-progress{background:#1e1e1e}.pace-material-gray-dark .pace{color:#1e1e1e}.pace-corner-indicator-gray-dark .pace .pace-activity{background:#1e1e1e}.pace-corner-indicator-gray-dark .pace .pace-activity:after,.pace-corner-indicator-gray-dark .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-gray-dark .pace .pace-activity:before{border-right-color:rgba(30,30,30,.2);border-left-color:rgba(30,30,30,.2)}.pace-corner-indicator-gray-dark .pace .pace-activity:after{border-top-color:rgba(30,30,30,.2);border-bottom-color:rgba(30,30,30,.2)}.pace-fill-left-gray-dark .pace .pace-progress{background-color:rgba(30,30,30,.2)}.pace-flash-gray-dark .pace .pace-progress{background:#1e1e1e}.pace-flash-gray-dark .pace .pace-progress-inner{box-shadow:0 0 10px #1e1e1e,0 0 5px #1e1e1e}.pace-flash-gray-dark .pace .pace-activity{border-top-color:#1e1e1e;border-left-color:#1e1e1e}.pace-loading-bar-gray-dark .pace .pace-progress{background:#1e1e1e;color:#1e1e1e;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-gray-dark .pace .pace-activity{box-shadow:inset 0 0 0 2px #1e1e1e,inset 0 0 0 7px #fff}.pace-mac-osx-gray-dark .pace .pace-progress{background-color:#1e1e1e;box-shadow:inset -1px 0 #1e1e1e,inset 0 -1px #1e1e1e,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-gray-dark .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-gray-dark .pace-progress{color:#1e1e1e}.jqstooltip{height:auto!important;padding:5px!important;width:auto!important}.connectedSortable{min-height:100px}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sort-highlight{background:#babfc7;border:1px dashed #dae1e7;margin-bottom:10px}.chart{overflow:hidden;position:relative}.border-transparent{border-color:transparent!important}.description-block{display:block;margin:10px 0;text-align:center}.description-block.margin-bottom{margin-bottom:25px}.description-block>.description-header{font-size:16px;font-weight:600;margin:0;padding:0}.description-block>.description-text{text-transform:uppercase}.description-block .description-icon{font-size:16px}.list-group-unbordered>.list-group-item{border-left:0;border-radius:0;border-right:0;padding-left:0;padding-right:0}.list-header{color:#b8c2cc;font-size:15px;font-weight:700;padding:10px 4px}.list-seperator{background:rgba(34,41,47,.125);height:1px;margin:15px 0 9px}.list-link>a{color:#b8c2cc;padding:4px}.list-link>a:hover{color:#2a2e30}.user-block{float:left}.user-block img{float:left;height:40px;width:40px}.user-block .comment,.user-block .description,.user-block .username{display:block;margin-left:50px}.user-block .username{font-size:16px;font-weight:600;margin-top:-1px}.user-block .description{color:#b8c2cc;font-size:13px;margin-top:-3px}.user-block.user-block-sm img{width:1.875rem;height:1.875rem}.user-block.user-block-sm .comment,.user-block.user-block-sm .description,.user-block.user-block-sm .username{margin-left:40px}.user-block.user-block-sm .username{font-size:14px}.img-lg,.img-md,.img-sm{float:left}.img-sm{height:1.875rem;width:1.875rem}.img-sm+.img-push{margin-left:2.5rem}.img-md{width:3.75rem;height:3.75rem}.img-md+.img-push{margin-left:4.375rem}.img-lg{width:6.25rem;height:6.25rem}.img-lg+.img-push{margin-left:6.875rem}.img-bordered{border:3px solid #adb5bd;padding:3px}.img-bordered-sm{border:2px solid #adb5bd;padding:2px}.img-rounded{border-radius:.5rem}.img-circle{border-radius:50%}.img-size-32,.img-size-50,.img-size-64{height:auto}.img-size-64{width:64px}.img-size-50{width:50px}.img-size-32{width:32px}.size-32,.size-40,.size-50{display:block;text-align:center}.size-32{height:32px;line-height:32px;width:32px}.size-40{height:40px;line-height:40px;width:40px}.size-50{height:50px;line-height:50px;width:50px}.attachment-block{background:#babfc7;border:1px solid rgba(34,41,47,.125);margin-bottom:10px;padding:5px}.attachment-block .attachment-img{float:left;height:auto;max-height:100px;max-width:100px}.attachment-block .attachment-pushed{margin-left:110px}.attachment-block .attachment-heading{margin:0}.attachment-block .attachment-text{color:#4e5154}.card>.loading-img,.card>.overlay,.info-box>.loading-img,.info-box>.overlay,.overlay-wrapper>.loading-img,.overlay-wrapper>.overlay,.small-box>.loading-img,.small-box>.overlay{height:100%;left:0;position:absolute;top:0;width:100%}.card .overlay,.info-box .overlay,.overlay-wrapper .overlay,.small-box .overlay{border-radius:.5rem;align-items:center;background:hsla(0,0%,100%,.7);display:flex;justify-content:center;z-index:50}.card .overlay>.fa,.card .overlay>.fab,.card .overlay>.far,.card .overlay>.fas,.card .overlay>.glyphicon,.card .overlay>.ion,.info-box .overlay>.fa,.info-box .overlay>.fab,.info-box .overlay>.far,.info-box .overlay>.fas,.info-box .overlay>.glyphicon,.info-box .overlay>.ion,.overlay-wrapper .overlay>.fa,.overlay-wrapper .overlay>.fab,.overlay-wrapper .overlay>.far,.overlay-wrapper .overlay>.fas,.overlay-wrapper .overlay>.glyphicon,.overlay-wrapper .overlay>.ion,.small-box .overlay>.fa,.small-box .overlay>.fab,.small-box .overlay>.far,.small-box .overlay>.fas,.small-box .overlay>.glyphicon,.small-box .overlay>.ion{color:#1e1e1e}.card .overlay.dark,.info-box .overlay.dark,.overlay-wrapper .overlay.dark,.small-box .overlay.dark{background:rgba(34,41,47,.5)}.card .overlay.dark>.fa,.card .overlay.dark>.fab,.card .overlay.dark>.far,.card .overlay.dark>.fas,.card .overlay.dark>.glyphicon,.card .overlay.dark>.ion,.info-box .overlay.dark>.fa,.info-box .overlay.dark>.fab,.info-box .overlay.dark>.far,.info-box .overlay.dark>.fas,.info-box .overlay.dark>.glyphicon,.info-box .overlay.dark>.ion,.overlay-wrapper .overlay.dark>.fa,.overlay-wrapper .overlay.dark>.fab,.overlay-wrapper .overlay.dark>.far,.overlay-wrapper .overlay.dark>.fas,.overlay-wrapper .overlay.dark>.glyphicon,.overlay-wrapper .overlay.dark>.ion,.small-box .overlay.dark>.fa,.small-box .overlay.dark>.fab,.small-box .overlay.dark>.far,.small-box .overlay.dark>.fas,.small-box .overlay.dark>.glyphicon,.small-box .overlay.dark>.ion{color:#636363}.tab-pane>.overlay-wrapper{position:relative}.tab-pane>.overlay-wrapper>.overlay{border-top-left-radius:0;border-top-right-radius:0;flex-direction:column;margin-top:-1.25rem;margin-left:-1.25rem;height:calc(100% + 2.5rem);width:calc(100% + 2.5rem)}.tab-pane>.overlay-wrapper>.overlay.dark{color:#fff}.ribbon-wrapper{height:70px;overflow:hidden;position:absolute;right:-2px;top:-2px;width:70px;z-index:10}.ribbon-wrapper.ribbon-lg{height:120px;width:120px}.ribbon-wrapper.ribbon-lg .ribbon{right:0;top:26px;width:160px}.ribbon-wrapper.ribbon-xl{height:180px;width:180px}.ribbon-wrapper.ribbon-xl .ribbon{right:4px;top:47px;width:240px}.ribbon-wrapper .ribbon{box-shadow:0 0 3px rgba(34,41,47,.3);font-size:.8rem;line-height:100%;padding:.375rem 0;position:relative;right:-2px;text-align:center;text-shadow:0 -1px 0 rgba(34,41,47,.4);text-transform:uppercase;top:10px;transform:rotate(45deg);width:90px}.ribbon-wrapper .ribbon:after,.ribbon-wrapper .ribbon:before{border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #9e9e9e;bottom:-3px;content:"";position:absolute}.ribbon-wrapper .ribbon:before{left:0}.ribbon-wrapper .ribbon:after{right:0}.back-to-top{bottom:1.25rem;position:fixed;right:1.25rem;z-index:1032}.back-to-top:focus{box-shadow:none}pre{padding:.75rem}blockquote{background:#fff;border-left:.7rem solid #6d8be6;margin:1.5em .7rem;padding:.5em .7rem}.box blockquote{background:#ededed}blockquote p:last-child{margin-bottom:0}blockquote h1,blockquote h2,blockquote h3,blockquote h4,blockquote h5,blockquote h6{color:#6d8be6;font-size:1.25rem;font-weight:600}blockquote.quote-primary{border-color:#6d8be6}blockquote.quote-primary h1,blockquote.quote-primary h2,blockquote.quote-primary h3,blockquote.quote-primary h4,blockquote.quote-primary h5,blockquote.quote-primary h6{color:#6d8be6}blockquote.quote-secondary{border-color:#b8c2cc}blockquote.quote-secondary h1,blockquote.quote-secondary h2,blockquote.quote-secondary h3,blockquote.quote-secondary h4,blockquote.quote-secondary h5,blockquote.quote-secondary h6{color:#b8c2cc}blockquote.quote-success{border-color:#21b978}blockquote.quote-success h1,blockquote.quote-success h2,blockquote.quote-success h3,blockquote.quote-success h4,blockquote.quote-success h5,blockquote.quote-success h6{color:#21b978}blockquote.quote-info{border-color:#4277cf}blockquote.quote-info h1,blockquote.quote-info h2,blockquote.quote-info h3,blockquote.quote-info h4,blockquote.quote-info h5,blockquote.quote-info h6{color:#4277cf}blockquote.quote-warning{border-color:#dda451}blockquote.quote-warning h1,blockquote.quote-warning h2,blockquote.quote-warning h3,blockquote.quote-warning h4,blockquote.quote-warning h5,blockquote.quote-warning h6{color:#dda451}blockquote.quote-danger{border-color:#ea5455}blockquote.quote-danger h1,blockquote.quote-danger h2,blockquote.quote-danger h3,blockquote.quote-danger h4,blockquote.quote-danger h5,blockquote.quote-danger h6{color:#ea5455}blockquote.quote-light{border-color:#f7f7f9}blockquote.quote-light h1,blockquote.quote-light h2,blockquote.quote-light h3,blockquote.quote-light h4,blockquote.quote-light h5,blockquote.quote-light h6{color:#f7f7f9}blockquote.quote-dark{border-color:#22292f}blockquote.quote-dark h1,blockquote.quote-dark h2,blockquote.quote-dark h3,blockquote.quote-dark h4,blockquote.quote-dark h5,blockquote.quote-dark h6{color:#22292f}blockquote.quote-lightblue{border-color:#3c8dbc}blockquote.quote-lightblue h1,blockquote.quote-lightblue h2,blockquote.quote-lightblue h3,blockquote.quote-lightblue h4,blockquote.quote-lightblue h5,blockquote.quote-lightblue h6{color:#3c8dbc}blockquote.quote-navy{border-color:#001f3f}blockquote.quote-navy h1,blockquote.quote-navy h2,blockquote.quote-navy h3,blockquote.quote-navy h4,blockquote.quote-navy h5,blockquote.quote-navy h6{color:#001f3f}blockquote.quote-olive{border-color:#3d9970}blockquote.quote-olive h1,blockquote.quote-olive h2,blockquote.quote-olive h3,blockquote.quote-olive h4,blockquote.quote-olive h5,blockquote.quote-olive h6{color:#3d9970}blockquote.quote-lime{border-color:#01ff70}blockquote.quote-lime h1,blockquote.quote-lime h2,blockquote.quote-lime h3,blockquote.quote-lime h4,blockquote.quote-lime h5,blockquote.quote-lime h6{color:#01ff70}blockquote.quote-fuchsia{border-color:#f012be}blockquote.quote-fuchsia h1,blockquote.quote-fuchsia h2,blockquote.quote-fuchsia h3,blockquote.quote-fuchsia h4,blockquote.quote-fuchsia h5,blockquote.quote-fuchsia h6{color:#f012be}blockquote.quote-maroon{border-color:#d81b60}blockquote.quote-maroon h1,blockquote.quote-maroon h2,blockquote.quote-maroon h3,blockquote.quote-maroon h4,blockquote.quote-maroon h5,blockquote.quote-maroon h6{color:#d81b60}blockquote.quote-blue{border-color:#3085d6}blockquote.quote-blue h1,blockquote.quote-blue h2,blockquote.quote-blue h3,blockquote.quote-blue h4,blockquote.quote-blue h5,blockquote.quote-blue h6{color:#3085d6}blockquote.quote-indigo{border-color:#5c6bc6}blockquote.quote-indigo h1,blockquote.quote-indigo h2,blockquote.quote-indigo h3,blockquote.quote-indigo h4,blockquote.quote-indigo h5,blockquote.quote-indigo h6{color:#5c6bc6}blockquote.quote-purple{border-color:#6f42c1}blockquote.quote-purple h1,blockquote.quote-purple h2,blockquote.quote-purple h3,blockquote.quote-purple h4,blockquote.quote-purple h5,blockquote.quote-purple h6{color:#6f42c1}blockquote.quote-pink{border-color:#ff8acc}blockquote.quote-pink h1,blockquote.quote-pink h2,blockquote.quote-pink h3,blockquote.quote-pink h4,blockquote.quote-pink h5,blockquote.quote-pink h6{color:#ff8acc}blockquote.quote-red{border-color:#ea5455}blockquote.quote-red h1,blockquote.quote-red h2,blockquote.quote-red h3,blockquote.quote-red h4,blockquote.quote-red h5,blockquote.quote-red h6{color:#ea5455}blockquote.quote-orange{border-color:#dda451}blockquote.quote-orange h1,blockquote.quote-orange h2,blockquote.quote-orange h3,blockquote.quote-orange h4,blockquote.quote-orange h5,blockquote.quote-orange h6{color:#dda451}blockquote.quote-yellow{border-color:#edc30e}blockquote.quote-yellow h1,blockquote.quote-yellow h2,blockquote.quote-yellow h3,blockquote.quote-yellow h4,blockquote.quote-yellow h5,blockquote.quote-yellow h6{color:#edc30e}blockquote.quote-green{border-color:#21b978}blockquote.quote-green h1,blockquote.quote-green h2,blockquote.quote-green h3,blockquote.quote-green h4,blockquote.quote-green h5,blockquote.quote-green h6{color:#21b978}blockquote.quote-teal{border-color:#20c997}blockquote.quote-teal h1,blockquote.quote-teal h2,blockquote.quote-teal h3,blockquote.quote-teal h4,blockquote.quote-teal h5,blockquote.quote-teal h6{color:#20c997}blockquote.quote-cyan{border-color:#7367f0}blockquote.quote-cyan h1,blockquote.quote-cyan h2,blockquote.quote-cyan h3,blockquote.quote-cyan h4,blockquote.quote-cyan h5,blockquote.quote-cyan h6{color:#7367f0}blockquote.quote-white{border-color:#fff}blockquote.quote-white h1,blockquote.quote-white h2,blockquote.quote-white h3,blockquote.quote-white h4,blockquote.quote-white h5,blockquote.quote-white h6{color:#fff}blockquote.quote-gray{border-color:#b8c2cc}blockquote.quote-gray h1,blockquote.quote-gray h2,blockquote.quote-gray h3,blockquote.quote-gray h4,blockquote.quote-gray h5,blockquote.quote-gray h6{color:#b8c2cc}blockquote.quote-gray-dark{border-color:#1e1e1e}blockquote.quote-gray-dark h1,blockquote.quote-gray-dark h2,blockquote.quote-gray-dark h3,blockquote.quote-gray-dark h4,blockquote.quote-gray-dark h5,blockquote.quote-gray-dark h6{color:#1e1e1e}.tab-custom-content{border-top:1px solid #dae1e7;margin-top:.5rem;padding-top:.5rem}.nav+.tab-custom-content{border-top:none;border-bottom:1px solid #dae1e7;margin-top:0;margin-bottom:.5rem;padding-bottom:.5rem}.badge-btn{border-radius:.15rem;font-size:.75rem;font-weight:400;padding:.25rem .5rem}.badge-btn.badge-pill{padding:.375rem .6rem}@media print{.content-header,.main-header,.main-sidebar,.no-print{display:none!important}.content-wrapper,.main-footer{transform:translate(0);margin-left:0!important;min-height:0!important}.layout-fixed .content-wrapper{padding-top:0!important}.invoice{border:0;margin:0;padding:0;width:100%}.invoice-col{float:left;width:33.3333333%}.table-responsive{overflow:auto}.table-responsive>.table tr td,.table-responsive>.table tr th{white-space:normal!important}}.text-bold,.text-bold.table td,.text-bold.table th{font-weight:700}.text-xs{font-size:.75rem!important}.text-md,.text-sm{font-size:1rem!important}.text-lg{font-size:2rem!important}.text-xl{font-size:1.5rem!important}.text-lightblue{color:#3c8dbc}.text-navy{color:#001f3f}.text-olive{color:#3d9970}.text-lime{color:#01ff70}.text-fuchsia{color:#f012be}.text-maroon{color:#d81b60}.text-blue{color:#3085d6}.text-indigo{color:#5c6bc6}.text-purple{color:#6f42c1}.text-pink{color:#ff8acc}.text-red{color:#ea5455}.text-orange{color:#dda451}.text-yellow{color:#edc30e}.text-green{color:#21b978}.text-teal{color:#20c997}.text-cyan{color:#7367f0}.text-white{color:#fff}.text-gray{color:#b8c2cc}.text-gray-dark{color:#1e1e1e}.elevation-0{box-shadow:none!important}.elevation-1{box-shadow:0 1px 3px rgba(34,41,47,.12),0 1px 2px rgba(34,41,47,.24)!important}.elevation-2{box-shadow:0 3px 6px rgba(34,41,47,.16),0 3px 6px rgba(34,41,47,.23)!important}.elevation-3{box-shadow:0 10px 20px rgba(34,41,47,.19),0 6px 6px rgba(34,41,47,.23)!important}.elevation-4{box-shadow:0 14px 28px rgba(34,41,47,.25),0 10px 10px rgba(34,41,47,.22)!important}.elevation-5{box-shadow:0 19px 38px rgba(34,41,47,.3),0 15px 12px rgba(34,41,47,.22)!important}.bg-primary{background-color:#6d8be6!important}.bg-primary,.bg-primary>a{color:#fff!important}.bg-primary.btn:hover{border-color:#4168df;color:#ececec}.bg-primary.btn.active,.bg-primary.btn:active,.bg-primary.btn:not(:disabled):not(.disabled).active,.bg-primary.btn:not(:disabled):not(.disabled):active{background-color:#4168df!important;border-color:#3760dd;color:#fff}.bg-secondary{background-color:#b8c2cc!important}.bg-secondary,.bg-secondary>a{color:#2a2e30!important}.bg-secondary.btn:hover{border-color:#9aa9b7;color:#181a1c}.bg-secondary.btn.active,.bg-secondary.btn:active,.bg-secondary.btn:not(:disabled):not(.disabled).active,.bg-secondary.btn:not(:disabled):not(.disabled):active{background-color:#9aa9b7!important;border-color:#93a2b1;color:#2a2e30}.bg-success{background-color:#21b978!important}.bg-success,.bg-success>a{color:#fff!important}.bg-success.btn:hover{border-color:#198e5c;color:#ececec}.bg-success.btn.active,.bg-success.btn:active,.bg-success.btn:not(:disabled):not(.disabled).active,.bg-success.btn:not(:disabled):not(.disabled):active{background-color:#198e5c!important;border-color:#178355;color:#fff}.bg-info{background-color:#4277cf!important}.bg-info,.bg-info>a{color:#fff!important}.bg-info.btn:hover{border-color:#2d5fb1;color:#ececec}.bg-info.btn.active,.bg-info.btn:active,.bg-info.btn:not(:disabled):not(.disabled).active,.bg-info.btn:not(:disabled):not(.disabled):active{background-color:#2d5fb1!important;border-color:#2a59a7;color:#fff}.bg-warning{background-color:#dda451!important}.bg-warning,.bg-warning>a{color:#2a2e30!important}.bg-warning.btn:hover{border-color:#d28d29;color:#181a1c}.bg-warning.btn.active,.bg-warning.btn:active,.bg-warning.btn:not(:disabled):not(.disabled).active,.bg-warning.btn:not(:disabled):not(.disabled):active{background-color:#d28d29!important;border-color:#c78627;color:#2a2e30}.bg-danger{background-color:#ea5455!important}.bg-danger,.bg-danger>a{color:#fff!important}.bg-danger.btn:hover{border-color:#e42728;color:#ececec}.bg-danger.btn.active,.bg-danger.btn:active,.bg-danger.btn:not(:disabled):not(.disabled).active,.bg-danger.btn:not(:disabled):not(.disabled):active{background-color:#e42728!important;border-color:#e21c1d;color:#fff}.bg-light{background-color:#f7f7f9!important}.bg-light,.bg-light>a{color:#2a2e30!important}.bg-light.btn:hover{border-color:#dadae3;color:#181a1c}.bg-light.btn.active,.bg-light.btn:active,.bg-light.btn:not(:disabled):not(.disabled).active,.bg-light.btn:not(:disabled):not(.disabled):active{background-color:#dadae3!important;border-color:#d3d3de;color:#2a2e30}.bg-dark{background-color:#22292f!important}.bg-dark,.bg-dark>a{color:#fff!important}.bg-dark.btn:hover{border-color:#0d0f11;color:#ececec}.bg-dark.btn.active,.bg-dark.btn:active,.bg-dark.btn:not(:disabled):not(.disabled).active,.bg-dark.btn:not(:disabled):not(.disabled):active{background-color:#0d0f11!important;border-color:#07090a;color:#fff}.bg-lightblue{background-color:#3c8dbc!important}.bg-lightblue,.bg-lightblue>a{color:#fff!important}.bg-lightblue.btn:hover{border-color:#307095;color:#ececec}.bg-lightblue.btn.active,.bg-lightblue.btn:active,.bg-lightblue.btn:not(:disabled):not(.disabled).active,.bg-lightblue.btn:not(:disabled):not(.disabled):active{background-color:#307095!important;border-color:#2d698c;color:#fff}.bg-navy{background-color:#001f3f!important}.bg-navy,.bg-navy>a{color:#fff!important}.bg-navy.btn:hover{border-color:#00060c;color:#ececec}.bg-navy.btn.active,.bg-navy.btn:active,.bg-navy.btn:not(:disabled):not(.disabled).active,.bg-navy.btn:not(:disabled):not(.disabled):active{background-color:#00060c!important;border-color:#000;color:#fff}.bg-olive{background-color:#3d9970!important}.bg-olive,.bg-olive>a{color:#fff!important}.bg-olive.btn:hover{border-color:#2e7555;color:#ececec}.bg-olive.btn.active,.bg-olive.btn:active,.bg-olive.btn:not(:disabled):not(.disabled).active,.bg-olive.btn:not(:disabled):not(.disabled):active{background-color:#2e7555!important;border-color:#2b6b4f;color:#fff}.bg-lime{background-color:#01ff70!important}.bg-lime,.bg-lime>a{color:#2a2e30!important}.bg-lime.btn:hover{border-color:#00cd5a;color:#181a1c}.bg-lime.btn.active,.bg-lime.btn:active,.bg-lime.btn:not(:disabled):not(.disabled).active,.bg-lime.btn:not(:disabled):not(.disabled):active{background-color:#00cd5a!important;border-color:#00c054;color:#fff}.bg-fuchsia{background-color:#f012be!important}.bg-fuchsia,.bg-fuchsia>a{color:#fff!important}.bg-fuchsia.btn:hover{border-color:#c30c9a;color:#ececec}.bg-fuchsia.btn.active,.bg-fuchsia.btn:active,.bg-fuchsia.btn:not(:disabled):not(.disabled).active,.bg-fuchsia.btn:not(:disabled):not(.disabled):active{background-color:#c30c9a!important;border-color:#b70c90;color:#fff}.bg-maroon{background-color:#d81b60!important}.bg-maroon,.bg-maroon>a{color:#fff!important}.bg-maroon.btn:hover{border-color:#ab154c;color:#ececec}.bg-maroon.btn.active,.bg-maroon.btn:active,.bg-maroon.btn:not(:disabled):not(.disabled).active,.bg-maroon.btn:not(:disabled):not(.disabled):active{background-color:#ab154c!important;border-color:#9f1447;color:#fff}.bg-blue{background-color:#3085d6!important}.bg-blue,.bg-blue>a{color:#fff!important}.bg-blue.btn:hover{border-color:#236bb0;color:#ececec}.bg-blue.btn.active,.bg-blue.btn:active,.bg-blue.btn:not(:disabled):not(.disabled).active,.bg-blue.btn:not(:disabled):not(.disabled):active{background-color:#236bb0!important;border-color:#2165a5;color:#fff}.bg-indigo{background-color:#5c6bc6!important}.bg-indigo,.bg-indigo>a{color:#fff!important}.bg-indigo.btn:hover{border-color:#3e4eb1;color:#ececec}.bg-indigo.btn.active,.bg-indigo.btn:active,.bg-indigo.btn:not(:disabled):not(.disabled).active,.bg-indigo.btn:not(:disabled):not(.disabled):active{background-color:#3e4eb1!important;border-color:#3b4aa8;color:#fff}.bg-purple{background-color:#6f42c1!important}.bg-purple,.bg-purple>a{color:#fff!important}.bg-purple.btn:hover{border-color:#59339d;color:#ececec}.bg-purple.btn.active,.bg-purple.btn:active,.bg-purple.btn:not(:disabled):not(.disabled).active,.bg-purple.btn:not(:disabled):not(.disabled):active{background-color:#59339d!important;border-color:#533093;color:#fff}.bg-pink{background-color:#ff8acc!important}.bg-pink,.bg-pink>a{color:#2a2e30!important}.bg-pink.btn:hover{border-color:#ff57b6;color:#181a1c}.bg-pink.btn.active,.bg-pink.btn:active,.bg-pink.btn:not(:disabled):not(.disabled).active,.bg-pink.btn:not(:disabled):not(.disabled):active{background-color:#ff57b6!important;border-color:#ff4ab0;color:#fff}.bg-red{background-color:#ea5455!important}.bg-red,.bg-red>a{color:#fff!important}.bg-red.btn:hover{border-color:#e42728;color:#ececec}.bg-red.btn.active,.bg-red.btn:active,.bg-red.btn:not(:disabled):not(.disabled).active,.bg-red.btn:not(:disabled):not(.disabled):active{background-color:#e42728!important;border-color:#e21c1d;color:#fff}.bg-orange{background-color:#dda451!important}.bg-orange,.bg-orange>a{color:#2a2e30!important}.bg-orange.btn:hover{border-color:#d28d29;color:#181a1c}.bg-orange.btn.active,.bg-orange.btn:active,.bg-orange.btn:not(:disabled):not(.disabled).active,.bg-orange.btn:not(:disabled):not(.disabled):active{background-color:#d28d29!important;border-color:#c78627;color:#2a2e30}.bg-yellow{background-color:#edc30e!important}.bg-yellow,.bg-yellow>a{color:#2a2e30!important}.bg-yellow.btn:hover{border-color:#bd9b0b;color:#181a1c}.bg-yellow.btn.active,.bg-yellow.btn:active,.bg-yellow.btn:not(:disabled):not(.disabled).active,.bg-yellow.btn:not(:disabled):not(.disabled):active{background-color:#bd9b0b!important;border-color:#b1910a;color:#fff}.bg-green{background-color:#21b978!important}.bg-green,.bg-green>a{color:#fff!important}.bg-green.btn:hover{border-color:#198e5c;color:#ececec}.bg-green.btn.active,.bg-green.btn:active,.bg-green.btn:not(:disabled):not(.disabled).active,.bg-green.btn:not(:disabled):not(.disabled):active{background-color:#198e5c!important;border-color:#178355;color:#fff}.bg-teal{background-color:#20c997!important}.bg-teal,.bg-teal>a{color:#fff!important}.bg-teal.btn:hover{border-color:#199d76;color:#ececec}.bg-teal.btn.active,.bg-teal.btn:active,.bg-teal.btn:not(:disabled):not(.disabled).active,.bg-teal.btn:not(:disabled):not(.disabled):active{background-color:#199d76!important;border-color:#17926e;color:#fff}.bg-cyan{background-color:#7367f0!important}.bg-cyan,.bg-cyan>a{color:#fff!important}.bg-cyan.btn:hover{border-color:#4839eb;color:#ececec}.bg-cyan.btn.active,.bg-cyan.btn:active,.bg-cyan.btn:not(:disabled):not(.disabled).active,.bg-cyan.btn:not(:disabled):not(.disabled):active{background-color:#4839eb!important;border-color:#3e2dea;color:#fff}.bg-white{background-color:#fff!important}.bg-white,.bg-white>a{color:#2a2e30!important}.bg-white.btn:hover{border-color:#e6e6e6;color:#181a1c}.bg-white.btn.active,.bg-white.btn:active,.bg-white.btn:not(:disabled):not(.disabled).active,.bg-white.btn:not(:disabled):not(.disabled):active{background-color:#e6e6e6!important;border-color:#dfdfdf;color:#2a2e30}.bg-gray{background-color:#b8c2cc!important}.bg-gray,.bg-gray>a{color:#2a2e30!important}.bg-gray.btn:hover{border-color:#9aa9b7;color:#181a1c}.bg-gray.btn.active,.bg-gray.btn:active,.bg-gray.btn:not(:disabled):not(.disabled).active,.bg-gray.btn:not(:disabled):not(.disabled):active{background-color:#9aa9b7!important;border-color:#93a2b1;color:#2a2e30}.bg-gray-dark{background-color:#1e1e1e!important}.bg-gray-dark,.bg-gray-dark>a{color:#fff!important}.bg-gray-dark.btn:hover{border-color:#050505;color:#ececec}.bg-gray-dark.btn.active,.bg-gray-dark.btn:active,.bg-gray-dark.btn:not(:disabled):not(.disabled).active,.bg-gray-dark.btn:not(:disabled):not(.disabled):active{background-color:#050505!important;border-color:#000;color:#fff}.bg-gray{background-color:#adb5bd;color:#2a2e30}.bg-gray-light{background-color:#f5f5f5;color:#2a2e30!important}.bg-black{background-color:#22292f;color:#fff!important}.bg-white{background-color:#fff;color:#2a2e30!important}.bg-gradient-primary{color:#fff;background:#6d8be6 linear-gradient(180deg,#819ae9,#6d8be6) repeat-x!important}.bg-gradient-primary.btn.disabled,.bg-gradient-primary.btn:disabled,.bg-gradient-primary.btn:not(:disabled):not(.disabled).active,.bg-gradient-primary.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-primary.btn.dropdown-toggle{background-image:none!important}.bg-gradient-primary.btn:hover{border-color:#4168df;color:#ececec;background:#4c71e0 linear-gradient(180deg,#6484e3,#4c71e0) repeat-x!important}.bg-gradient-primary.btn.active,.bg-gradient-primary.btn:active,.bg-gradient-primary.btn:not(:disabled):not(.disabled).active,.bg-gradient-primary.btn:not(:disabled):not(.disabled):active{border-color:#3760dd;color:#fff;background:#4168df linear-gradient(180deg,#5b7de3,#4168df) repeat-x!important}.bg-gradient-secondary{color:#2a2e30;background:#b8c2cc linear-gradient(180deg,#c0c9d2,#b8c2cc) repeat-x!important}.bg-gradient-secondary.btn.disabled,.bg-gradient-secondary.btn:disabled,.bg-gradient-secondary.btn:not(:disabled):not(.disabled).active,.bg-gradient-secondary.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-secondary.btn.dropdown-toggle{background-image:none!important}.bg-gradient-secondary.btn:hover{border-color:#9aa9b7;color:#181a1c;background:#a2afbc linear-gradient(180deg,#aeb9c5,#a2afbc) repeat-x!important}.bg-gradient-secondary.btn.active,.bg-gradient-secondary.btn:active,.bg-gradient-secondary.btn:not(:disabled):not(.disabled).active,.bg-gradient-secondary.btn:not(:disabled):not(.disabled):active{border-color:#93a2b1;color:#2a2e30;background:#9aa9b7 linear-gradient(180deg,#a7b4c1,#9aa9b7) repeat-x!important}.bg-gradient-success{color:#fff;background:#21b978 linear-gradient(180deg,#40c18b,#21b978) repeat-x!important}.bg-gradient-success.btn.disabled,.bg-gradient-success.btn:disabled,.bg-gradient-success.btn:not(:disabled):not(.disabled).active,.bg-gradient-success.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-success.btn.dropdown-toggle{background-image:none!important}.bg-gradient-success.btn:hover{border-color:#198e5c;color:#ececec;background:#1b9963 linear-gradient(180deg,#3ba679,#1b9963) repeat-x!important}.bg-gradient-success.btn.active,.bg-gradient-success.btn:active,.bg-gradient-success.btn:not(:disabled):not(.disabled).active,.bg-gradient-success.btn:not(:disabled):not(.disabled):active{border-color:#178355;color:#fff;background:#198e5c linear-gradient(180deg,#399d73,#198e5c) repeat-x!important}.bg-gradient-info{color:#fff;background:#4277cf linear-gradient(180deg,#5c89d5,#4277cf) repeat-x!important}.bg-gradient-info.btn.disabled,.bg-gradient-info.btn:disabled,.bg-gradient-info.btn:not(:disabled):not(.disabled).active,.bg-gradient-info.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-info.btn.dropdown-toggle{background-image:none!important}.bg-gradient-info.btn:hover{border-color:#2d5fb1;color:#ececec;background:#3064bb linear-gradient(180deg,#4d79c4,#3064bb) repeat-x!important}.bg-gradient-info.btn.active,.bg-gradient-info.btn:active,.bg-gradient-info.btn:not(:disabled):not(.disabled).active,.bg-gradient-info.btn:not(:disabled):not(.disabled):active{border-color:#2a59a7;color:#fff;background:#2d5fb1 linear-gradient(180deg,#4a75bc,#2d5fb1) repeat-x!important}.bg-gradient-warning{color:#2a2e30;background:#dda451 linear-gradient(180deg,#e0b06a,#dda451) repeat-x!important}.bg-gradient-warning.btn.disabled,.bg-gradient-warning.btn:disabled,.bg-gradient-warning.btn:not(:disabled):not(.disabled).active,.bg-gradient-warning.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-warning.btn.dropdown-toggle{background-image:none!important}.bg-gradient-warning.btn:hover{border-color:#d28d29;color:#181a1c;background:#d79331 linear-gradient(180deg,#dba14f,#d79331) repeat-x!important}.bg-gradient-warning.btn.active,.bg-gradient-warning.btn:active,.bg-gradient-warning.btn:not(:disabled):not(.disabled).active,.bg-gradient-warning.btn:not(:disabled):not(.disabled):active{border-color:#c78627;color:#2a2e30;background:#d28d29 linear-gradient(180deg,#d69c48,#d28d29) repeat-x!important}.bg-gradient-danger{color:#fff;background:#ea5455 linear-gradient(180deg,#eb6c6d,#ea5455) repeat-x!important}.bg-gradient-danger.btn.disabled,.bg-gradient-danger.btn:disabled,.bg-gradient-danger.btn:not(:disabled):not(.disabled).active,.bg-gradient-danger.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-danger.btn.dropdown-toggle{background-image:none!important}.bg-gradient-danger.btn:hover{border-color:#e42728;color:#ececec;background:#e63233 linear-gradient(180deg,#e74f50,#e63233) repeat-x!important}.bg-gradient-danger.btn.active,.bg-gradient-danger.btn:active,.bg-gradient-danger.btn:not(:disabled):not(.disabled).active,.bg-gradient-danger.btn:not(:disabled):not(.disabled):active{border-color:#e21c1d;color:#fff;background:#e42728 linear-gradient(180deg,#e64547,#e42728) repeat-x!important}.bg-gradient-light{color:#2a2e30;background:#f7f7f9 linear-gradient(180deg,#f6f6f9,#f7f7f9) repeat-x!important}.bg-gradient-light.btn.disabled,.bg-gradient-light.btn:disabled,.bg-gradient-light.btn:not(:disabled):not(.disabled).active,.bg-gradient-light.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-light.btn.dropdown-toggle{background-image:none!important}.bg-gradient-light.btn:hover{border-color:#dadae3;color:#181a1c;background:#e1e1e9 linear-gradient(180deg,#e3e3eb,#e1e1e9) repeat-x!important}.bg-gradient-light.btn.active,.bg-gradient-light.btn:active,.bg-gradient-light.btn:not(:disabled):not(.disabled).active,.bg-gradient-light.btn:not(:disabled):not(.disabled):active{border-color:#d3d3de;color:#2a2e30;background:#dadae3 linear-gradient(180deg,#dddde6,#dadae3) repeat-x!important}.bg-gradient-dark{color:#fff;background:#22292f linear-gradient(180deg,#41474d,#22292f) repeat-x!important}.bg-gradient-dark.btn.disabled,.bg-gradient-dark.btn:disabled,.bg-gradient-dark.btn:not(:disabled):not(.disabled).active,.bg-gradient-dark.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-dark.btn.dropdown-toggle{background-image:none!important}.bg-gradient-dark.btn:hover{border-color:#0d0f11;color:#ececec;background:#121619 linear-gradient(180deg,#33373a,#121619) repeat-x!important}.bg-gradient-dark.btn.active,.bg-gradient-dark.btn:active,.bg-gradient-dark.btn:not(:disabled):not(.disabled).active,.bg-gradient-dark.btn:not(:disabled):not(.disabled):active{border-color:#07090a;color:#fff;background:#0d0f11 linear-gradient(180deg,#2f3134,#0d0f11) repeat-x!important}.bg-gradient-lightblue{color:#fff;background:#3c8dbc linear-gradient(180deg,#579cc5,#3c8dbc) repeat-x!important}.bg-gradient-lightblue.btn.disabled,.bg-gradient-lightblue.btn:disabled,.bg-gradient-lightblue.btn:not(:disabled):not(.disabled).active,.bg-gradient-lightblue.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-lightblue.btn.dropdown-toggle{background-image:none!important}.bg-gradient-lightblue.btn:hover{border-color:#307095;color:#ececec;background:#33779f linear-gradient(180deg,#4f89ac,#33779f) repeat-x!important}.bg-gradient-lightblue.btn.active,.bg-gradient-lightblue.btn:active,.bg-gradient-lightblue.btn:not(:disabled):not(.disabled).active,.bg-gradient-lightblue.btn:not(:disabled):not(.disabled):active{border-color:#2d698c;color:#fff;background:#307095 linear-gradient(180deg,#4d83a4,#307095) repeat-x!important}.bg-gradient-navy{color:#fff;background:#001f3f linear-gradient(180deg,#243f5b,#001f3f) repeat-x!important}.bg-gradient-navy.btn.disabled,.bg-gradient-navy.btn:disabled,.bg-gradient-navy.btn:not(:disabled):not(.disabled).active,.bg-gradient-navy.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-navy.btn.dropdown-toggle{background-image:none!important}.bg-gradient-navy.btn:hover{border-color:#00060c;color:#ececec;background:#000c19 linear-gradient(180deg,#242e3a,#000c19) repeat-x!important}.bg-gradient-navy.btn.active,.bg-gradient-navy.btn:active,.bg-gradient-navy.btn:not(:disabled):not(.disabled).active,.bg-gradient-navy.btn:not(:disabled):not(.disabled):active{border-color:#000;color:#fff;background:#00060c linear-gradient(180deg,#24292f,#00060c) repeat-x!important}.bg-gradient-olive{color:#fff;background:#3d9970 linear-gradient(180deg,#58a684,#3d9970) repeat-x!important}.bg-gradient-olive.btn.disabled,.bg-gradient-olive.btn:disabled,.bg-gradient-olive.btn:not(:disabled):not(.disabled).active,.bg-gradient-olive.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-olive.btn.dropdown-toggle{background-image:none!important}.bg-gradient-olive.btn:hover{border-color:#2e7555;color:#ececec;background:#327e5c linear-gradient(180deg,#4e8f73,#327e5c) repeat-x!important}.bg-gradient-olive.btn.active,.bg-gradient-olive.btn:active,.bg-gradient-olive.btn:not(:disabled):not(.disabled).active,.bg-gradient-olive.btn:not(:disabled):not(.disabled):active{border-color:#2b6b4f;color:#fff;background:#2e7555 linear-gradient(180deg,#4b886d,#2e7555) repeat-x!important}.bg-gradient-lime{color:#2a2e30;background:#01ff70 linear-gradient(180deg,#25fd84,#01ff70) repeat-x!important}.bg-gradient-lime.btn.disabled,.bg-gradient-lime.btn:disabled,.bg-gradient-lime.btn:not(:disabled):not(.disabled).active,.bg-gradient-lime.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-lime.btn.dropdown-toggle{background-image:none!important}.bg-gradient-lime.btn:hover{border-color:#00cd5a;color:#181a1c;background:#00da5f linear-gradient(180deg,#24dd76,#00da5f) repeat-x!important}.bg-gradient-lime.btn.active,.bg-gradient-lime.btn:active,.bg-gradient-lime.btn:not(:disabled):not(.disabled).active,.bg-gradient-lime.btn:not(:disabled):not(.disabled):active{border-color:#00c054;color:#fff;background:#00cd5a linear-gradient(180deg,#24d272,#00cd5a) repeat-x!important}.bg-gradient-fuchsia{color:#fff;background:#f012be linear-gradient(180deg,#f033c7,#f012be) repeat-x!important}.bg-gradient-fuchsia.btn.disabled,.bg-gradient-fuchsia.btn:disabled,.bg-gradient-fuchsia.btn:not(:disabled):not(.disabled).active,.bg-gradient-fuchsia.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-fuchsia.btn.dropdown-toggle{background-image:none!important}.bg-gradient-fuchsia.btn:hover{border-color:#c30c9a;color:#ececec;background:#cf0da3 linear-gradient(180deg,#d42fb0,#cf0da3) repeat-x!important}.bg-gradient-fuchsia.btn.active,.bg-gradient-fuchsia.btn:active,.bg-gradient-fuchsia.btn:not(:disabled):not(.disabled).active,.bg-gradient-fuchsia.btn:not(:disabled):not(.disabled):active{border-color:#b70c90;color:#fff;background:#c30c9a linear-gradient(180deg,#ca2ea8,#c30c9a) repeat-x!important}.bg-gradient-maroon{color:#fff;background:#d81b60 linear-gradient(180deg,#db3b77,#d81b60) repeat-x!important}.bg-gradient-maroon.btn.disabled,.bg-gradient-maroon.btn:disabled,.bg-gradient-maroon.btn:not(:disabled):not(.disabled).active,.bg-gradient-maroon.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-maroon.btn.dropdown-toggle{background-image:none!important}.bg-gradient-maroon.btn:hover{border-color:#ab154c;color:#ececec;background:#b61751 linear-gradient(180deg,#bf386a,#b61751) repeat-x!important}.bg-gradient-maroon.btn.active,.bg-gradient-maroon.btn:active,.bg-gradient-maroon.btn:not(:disabled):not(.disabled).active,.bg-gradient-maroon.btn:not(:disabled):not(.disabled):active{border-color:#9f1447;color:#fff;background:#ab154c linear-gradient(180deg,#b53666,#ab154c) repeat-x!important}.bg-gradient-blue{color:#fff;background:#3085d6 linear-gradient(180deg,#4d95db,#3085d6) repeat-x!important}.bg-gradient-blue.btn.disabled,.bg-gradient-blue.btn:disabled,.bg-gradient-blue.btn:not(:disabled):not(.disabled).active,.bg-gradient-blue.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-blue.btn.dropdown-toggle{background-image:none!important}.bg-gradient-blue.btn:hover{border-color:#236bb0;color:#ececec;background:#2572bb linear-gradient(180deg,#4385c4,#2572bb) repeat-x!important}.bg-gradient-blue.btn.active,.bg-gradient-blue.btn:active,.bg-gradient-blue.btn:not(:disabled):not(.disabled).active,.bg-gradient-blue.btn:not(:disabled):not(.disabled):active{border-color:#2165a5;color:#fff;background:#236bb0 linear-gradient(180deg,#427fbb,#236bb0) repeat-x!important}.bg-gradient-indigo{color:#fff;background:#5c6bc6 linear-gradient(180deg,#727fcd,#5c6bc6) repeat-x!important}.bg-gradient-indigo.btn.disabled,.bg-gradient-indigo.btn:disabled,.bg-gradient-indigo.btn:not(:disabled):not(.disabled).active,.bg-gradient-indigo.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-indigo.btn.dropdown-toggle{background-image:none!important}.bg-gradient-indigo.btn:hover{border-color:#3e4eb1;color:#ececec;background:#4152bb linear-gradient(180deg,#5b6ac4,#4152bb) repeat-x!important}.bg-gradient-indigo.btn.active,.bg-gradient-indigo.btn:active,.bg-gradient-indigo.btn:not(:disabled):not(.disabled).active,.bg-gradient-indigo.btn:not(:disabled):not(.disabled):active{border-color:#3b4aa8;color:#fff;background:#3e4eb1 linear-gradient(180deg,#5966bc,#3e4eb1) repeat-x!important}.bg-gradient-purple{color:#fff;background:#6f42c1 linear-gradient(180deg,#825cc9,#6f42c1) repeat-x!important}.bg-gradient-purple.btn.disabled,.bg-gradient-purple.btn:disabled,.bg-gradient-purple.btn:not(:disabled):not(.disabled).active,.bg-gradient-purple.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-purple.btn.dropdown-toggle{background-image:none!important}.bg-gradient-purple.btn:hover{border-color:#59339d;color:#ececec;background:#5e37a6 linear-gradient(180deg,#7453b2,#5e37a6) repeat-x!important}.bg-gradient-purple.btn.active,.bg-gradient-purple.btn:active,.bg-gradient-purple.btn:not(:disabled):not(.disabled).active,.bg-gradient-purple.btn:not(:disabled):not(.disabled):active{border-color:#533093;color:#fff;background:#59339d linear-gradient(180deg,#7050ab,#59339d) repeat-x!important}.bg-gradient-pink{color:#2a2e30;background:#ff8acc linear-gradient(180deg,#fd99d2,#ff8acc) repeat-x!important}.bg-gradient-pink.btn.disabled,.bg-gradient-pink.btn:disabled,.bg-gradient-pink.btn:not(:disabled):not(.disabled).active,.bg-gradient-pink.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-pink.btn.dropdown-toggle{background-image:none!important}.bg-gradient-pink.btn:hover{border-color:#ff57b6;color:#181a1c;background:#ff64bb linear-gradient(180deg,#fd79c4,#ff64bb) repeat-x!important}.bg-gradient-pink.btn.active,.bg-gradient-pink.btn:active,.bg-gradient-pink.btn:not(:disabled):not(.disabled).active,.bg-gradient-pink.btn:not(:disabled):not(.disabled):active{border-color:#ff4ab0;color:#fff;background:#ff57b6 linear-gradient(180deg,#fd6ec0,#ff57b6) repeat-x!important}.bg-gradient-red{color:#fff;background:#ea5455 linear-gradient(180deg,#eb6c6d,#ea5455) repeat-x!important}.bg-gradient-red.btn.disabled,.bg-gradient-red.btn:disabled,.bg-gradient-red.btn:not(:disabled):not(.disabled).active,.bg-gradient-red.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-red.btn.dropdown-toggle{background-image:none!important}.bg-gradient-red.btn:hover{border-color:#e42728;color:#ececec;background:#e63233 linear-gradient(180deg,#e74f50,#e63233) repeat-x!important}.bg-gradient-red.btn.active,.bg-gradient-red.btn:active,.bg-gradient-red.btn:not(:disabled):not(.disabled).active,.bg-gradient-red.btn:not(:disabled):not(.disabled):active{border-color:#e21c1d;color:#fff;background:#e42728 linear-gradient(180deg,#e64547,#e42728) repeat-x!important}.bg-gradient-orange{color:#2a2e30;background:#dda451 linear-gradient(180deg,#e0b06a,#dda451) repeat-x!important}.bg-gradient-orange.btn.disabled,.bg-gradient-orange.btn:disabled,.bg-gradient-orange.btn:not(:disabled):not(.disabled).active,.bg-gradient-orange.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-orange.btn.dropdown-toggle{background-image:none!important}.bg-gradient-orange.btn:hover{border-color:#d28d29;color:#181a1c;background:#d79331 linear-gradient(180deg,#dba14f,#d79331) repeat-x!important}.bg-gradient-orange.btn.active,.bg-gradient-orange.btn:active,.bg-gradient-orange.btn:not(:disabled):not(.disabled).active,.bg-gradient-orange.btn:not(:disabled):not(.disabled):active{border-color:#c78627;color:#2a2e30;background:#d28d29 linear-gradient(180deg,#d69c48,#d28d29) repeat-x!important}.bg-gradient-yellow{color:#2a2e30;background:#edc30e linear-gradient(180deg,#edca31,#edc30e) repeat-x!important}.bg-gradient-yellow.btn.disabled,.bg-gradient-yellow.btn:disabled,.bg-gradient-yellow.btn:not(:disabled):not(.disabled).active,.bg-gradient-yellow.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-yellow.btn.dropdown-toggle{background-image:none!important}.bg-gradient-yellow.btn:hover{border-color:#bd9b0b;color:#181a1c;background:#c9a50c linear-gradient(180deg,#cfb02f,#c9a50c) repeat-x!important}.bg-gradient-yellow.btn.active,.bg-gradient-yellow.btn:active,.bg-gradient-yellow.btn:not(:disabled):not(.disabled).active,.bg-gradient-yellow.btn:not(:disabled):not(.disabled):active{border-color:#b1910a;color:#fff;background:#bd9b0b linear-gradient(180deg,#c5a82e,#bd9b0b) repeat-x!important}.bg-gradient-green{color:#fff;background:#21b978 linear-gradient(180deg,#40c18b,#21b978) repeat-x!important}.bg-gradient-green.btn.disabled,.bg-gradient-green.btn:disabled,.bg-gradient-green.btn:not(:disabled):not(.disabled).active,.bg-gradient-green.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-green.btn.dropdown-toggle{background-image:none!important}.bg-gradient-green.btn:hover{border-color:#198e5c;color:#ececec;background:#1b9963 linear-gradient(180deg,#3ba679,#1b9963) repeat-x!important}.bg-gradient-green.btn.active,.bg-gradient-green.btn:active,.bg-gradient-green.btn:not(:disabled):not(.disabled).active,.bg-gradient-green.btn:not(:disabled):not(.disabled):active{border-color:#178355;color:#fff;background:#198e5c linear-gradient(180deg,#399d73,#198e5c) repeat-x!important}.bg-gradient-teal{color:#fff;background:#20c997 linear-gradient(180deg,#3fcfa5,#20c997) repeat-x!important}.bg-gradient-teal.btn.disabled,.bg-gradient-teal.btn:disabled,.bg-gradient-teal.btn:not(:disabled):not(.disabled).active,.bg-gradient-teal.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-teal.btn.dropdown-toggle{background-image:none!important}.bg-gradient-teal.btn:hover{border-color:#199d76;color:#ececec;background:#1ba87e linear-gradient(180deg,#3bb390,#1ba87e) repeat-x!important}.bg-gradient-teal.btn.active,.bg-gradient-teal.btn:active,.bg-gradient-teal.btn:not(:disabled):not(.disabled).active,.bg-gradient-teal.btn:not(:disabled):not(.disabled):active{border-color:#17926e;color:#fff;background:#199d76 linear-gradient(180deg,#39aa89,#199d76) repeat-x!important}.bg-gradient-cyan{color:#fff;background:#7367f0 linear-gradient(180deg,#867cf1,#7367f0) repeat-x!important}.bg-gradient-cyan.btn.disabled,.bg-gradient-cyan.btn:disabled,.bg-gradient-cyan.btn:not(:disabled):not(.disabled).active,.bg-gradient-cyan.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-cyan.btn.dropdown-toggle{background-image:none!important}.bg-gradient-cyan.btn:hover{border-color:#4839eb;color:#ececec;background:#5344ed linear-gradient(180deg,#6a5eef,#5344ed) repeat-x!important}.bg-gradient-cyan.btn.active,.bg-gradient-cyan.btn:active,.bg-gradient-cyan.btn:not(:disabled):not(.disabled).active,.bg-gradient-cyan.btn:not(:disabled):not(.disabled):active{border-color:#3e2dea;color:#fff;background:#4839eb linear-gradient(180deg,#6155ed,#4839eb) repeat-x!important}.bg-gradient-white{color:#2a2e30;background:#fff linear-gradient(180deg,#fdfdfe,#fff) repeat-x!important}.bg-gradient-white.btn.disabled,.bg-gradient-white.btn:disabled,.bg-gradient-white.btn:not(:disabled):not(.disabled).active,.bg-gradient-white.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-white.btn.dropdown-toggle{background-image:none!important}.bg-gradient-white.btn:hover{border-color:#e6e6e6;color:#181a1c;background:#ececec linear-gradient(180deg,#ecedee,#ececec) repeat-x!important}.bg-gradient-white.btn.active,.bg-gradient-white.btn:active,.bg-gradient-white.btn:not(:disabled):not(.disabled).active,.bg-gradient-white.btn:not(:disabled):not(.disabled):active{border-color:#dfdfdf;color:#2a2e30;background:#e6e6e6 linear-gradient(180deg,#e7e8e9,#e6e6e6) repeat-x!important}.bg-gradient-gray{color:#2a2e30;background:#b8c2cc linear-gradient(180deg,#c0c9d2,#b8c2cc) repeat-x!important}.bg-gradient-gray.btn.disabled,.bg-gradient-gray.btn:disabled,.bg-gradient-gray.btn:not(:disabled):not(.disabled).active,.bg-gradient-gray.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-gray.btn.dropdown-toggle{background-image:none!important}.bg-gradient-gray.btn:hover{border-color:#9aa9b7;color:#181a1c;background:#a2afbc linear-gradient(180deg,#aeb9c5,#a2afbc) repeat-x!important}.bg-gradient-gray.btn.active,.bg-gradient-gray.btn:active,.bg-gradient-gray.btn:not(:disabled):not(.disabled).active,.bg-gradient-gray.btn:not(:disabled):not(.disabled):active{border-color:#93a2b1;color:#2a2e30;background:#9aa9b7 linear-gradient(180deg,#a7b4c1,#9aa9b7) repeat-x!important}.bg-gradient-gray-dark{color:#fff;background:#1e1e1e linear-gradient(180deg,#3d3e3f,#1e1e1e) repeat-x!important}.bg-gradient-gray-dark.btn.disabled,.bg-gradient-gray-dark.btn:disabled,.bg-gradient-gray-dark.btn:not(:disabled):not(.disabled).active,.bg-gradient-gray-dark.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-gray-dark.btn.dropdown-toggle{background-image:none!important}.bg-gradient-gray-dark.btn:hover{border-color:#050505;color:#ececec;background:#0b0b0b linear-gradient(180deg,#2d2e2e,#0b0b0b) repeat-x!important}.bg-gradient-gray-dark.btn.active,.bg-gradient-gray-dark.btn:active,.bg-gradient-gray-dark.btn:not(:disabled):not(.disabled).active,.bg-gradient-gray-dark.btn:not(:disabled):not(.disabled):active{border-color:#000;color:#fff;background:#050505 linear-gradient(180deg,#282829,#050505) repeat-x!important}[class^=bg-].disabled{opacity:.65}a.text-muted:hover{color:#6d8be6!important}.link-muted{color:#5d6974}.link-muted:focus,.link-muted:hover{color:#464f58}.link-black{color:#b8c2cc}.link-black:focus,.link-black:hover{color:#e6e8ea}.accent-primary .btn-link,.accent-primary a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#6d8be6}.accent-primary .btn-link:hover,.accent-primary a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#2c57db}.accent-primary .dropdown-item.active,.accent-primary .dropdown-item:active{background:#6d8be6;color:#fff}.accent-primary .custom-control-input:checked~.custom-control-label:before{background:#6d8be6;border-color:#234cca}.accent-primary .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-primary .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-primary .custom-file-input:focus~.custom-file-label,.accent-primary .custom-select:focus,.accent-primary .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#dae1f9}.accent-primary .page-item .page-link{color:#6d8be6}.accent-primary .page-item.active .page-link,.accent-primary .page-item.active a{background-color:#6d8be6;border-color:#6d8be6;color:#fff}.accent-primary .page-item.disabled .page-link,.accent-primary .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-primary [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-primary [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-primary [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-primary [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-secondary .btn-link,.accent-secondary a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#b8c2cc}.accent-secondary .btn-link:hover,.accent-secondary a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#8b9cac}.accent-secondary .dropdown-item.active,.accent-secondary .dropdown-item:active{background:#b8c2cc;color:#2a2e30}.accent-secondary .custom-control-input:checked~.custom-control-label:before{background:#b8c2cc;border-color:#7d8fa1}.accent-secondary .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%232a2e30' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-secondary .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-secondary .custom-file-input:focus~.custom-file-label,.accent-secondary .custom-select:focus,.accent-secondary .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#fff}.accent-secondary .page-item .page-link{color:#b8c2cc}.accent-secondary .page-item.active .page-link,.accent-secondary .page-item.active a{background-color:#b8c2cc;border-color:#b8c2cc;color:#fff}.accent-secondary .page-item.disabled .page-link,.accent-secondary .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-secondary [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-secondary [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-secondary [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-secondary [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-success .btn-link,.accent-success a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#21b978}.accent-success .btn-link:hover,.accent-success a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#15784e}.accent-success .dropdown-item.active,.accent-success .dropdown-item:active{background:#21b978;color:#fff}.accent-success .custom-control-input:checked~.custom-control-label:before{background:#21b978;border-color:#126240}.accent-success .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-success .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-success .custom-file-input:focus~.custom-file-label,.accent-success .custom-select:focus,.accent-success .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#73e6b5}.accent-success .page-item .page-link{color:#21b978}.accent-success .page-item.active .page-link,.accent-success .page-item.active a{background-color:#21b978;border-color:#21b978;color:#fff}.accent-success .page-item.disabled .page-link,.accent-success .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-success [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-success [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-success [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-success [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-info .btn-link,.accent-info a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#4277cf}.accent-info .btn-link:hover,.accent-info a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#28549d}.accent-info .dropdown-item.active,.accent-info .dropdown-item:active{background:#4277cf;color:#fff}.accent-info .custom-control-input:checked~.custom-control-label:before{background:#4277cf;border-color:#234988}.accent-info .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-info .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-info .custom-file-input:focus~.custom-file-label,.accent-info .custom-select:focus,.accent-info .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#a8c0e9}.accent-info .page-item .page-link{color:#4277cf}.accent-info .page-item.active .page-link,.accent-info .page-item.active a{background-color:#4277cf;border-color:#4277cf;color:#fff}.accent-info .page-item.disabled .page-link,.accent-info .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-info [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-info [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-info [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-info [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-warning .btn-link,.accent-warning a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#dda451}.accent-warning .btn-link:hover,.accent-warning a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#bd7f25}.accent-warning .dropdown-item.active,.accent-warning .dropdown-item:active{background:#dda451;color:#2a2e30}.accent-warning .custom-control-input:checked~.custom-control-label:before{background:#dda451;border-color:#a77121}.accent-warning .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%232a2e30' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-warning .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-warning .custom-file-input:focus~.custom-file-label,.accent-warning .custom-select:focus,.accent-warning .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#f2dcbc}.accent-warning .page-item .page-link{color:#dda451}.accent-warning .page-item.active .page-link,.accent-warning .page-item.active a{background-color:#dda451;border-color:#dda451;color:#fff}.accent-warning .page-item.disabled .page-link,.accent-warning .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-warning [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-warning [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-warning [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-warning [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-danger .btn-link,.accent-danger a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#ea5455}.accent-danger .btn-link:hover,.accent-danger a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#d71a1c}.accent-danger .dropdown-item.active,.accent-danger .dropdown-item:active{background:#ea5455;color:#fff}.accent-danger .custom-control-input:checked~.custom-control-label:before{background:#ea5455;border-color:#c01819}.accent-danger .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-danger .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-danger .custom-file-input:focus~.custom-file-label,.accent-danger .custom-select:focus,.accent-danger .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#f8c6c6}.accent-danger .page-item .page-link{color:#ea5455}.accent-danger .page-item.active .page-link,.accent-danger .page-item.active a{background-color:#ea5455;border-color:#ea5455;color:#fff}.accent-danger .page-item.disabled .page-link,.accent-danger .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-danger [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-danger [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-danger [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-danger [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-light .btn-link,.accent-light a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#f7f7f9}.accent-light .btn-link:hover,.accent-light a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#cbcbd8}.accent-light .dropdown-item.active,.accent-light .dropdown-item:active{background:#f7f7f9;color:#2a2e30}.accent-light .custom-control-input:checked~.custom-control-label:before{background:#f7f7f9;border-color:#bdbdcd}.accent-light .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%232a2e30' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-light .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-light .custom-file-input:focus~.custom-file-label,.accent-light .custom-select:focus,.accent-light .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#fff}.accent-light .page-item .page-link{color:#f7f7f9}.accent-light .page-item.active .page-link,.accent-light .page-item.active a{background-color:#f7f7f9;border-color:#f7f7f9;color:#fff}.accent-light .page-item.disabled .page-link,.accent-light .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-light [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-light [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-light [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-light [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-dark .btn-link,.accent-dark a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#22292f}.accent-dark .btn-link:hover,.accent-dark a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#020203}.accent-dark .dropdown-item.active,.accent-dark .dropdown-item:active{background:#22292f;color:#fff}.accent-dark .custom-control-input:checked~.custom-control-label:before{background:#22292f;border-color:#000}.accent-dark .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-dark .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-dark .custom-file-input:focus~.custom-file-label,.accent-dark .custom-select:focus,.accent-dark .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#586a79}.accent-dark .page-item .page-link{color:#22292f}.accent-dark .page-item.active .page-link,.accent-dark .page-item.active a{background-color:#22292f;border-color:#22292f;color:#fff}.accent-dark .page-item.disabled .page-link,.accent-dark .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-dark [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-dark [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-dark [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-dark [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-lightblue .btn-link,.accent-lightblue a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#3c8dbc}.accent-lightblue .btn-link:hover,.accent-lightblue a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#296282}.accent-lightblue .dropdown-item.active,.accent-lightblue .dropdown-item:active{background:#3c8dbc;color:#fff}.accent-lightblue .custom-control-input:checked~.custom-control-label:before{background:#3c8dbc;border-color:#23536f}.accent-lightblue .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-lightblue .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-lightblue .custom-file-input:focus~.custom-file-label,.accent-lightblue .custom-select:focus,.accent-lightblue .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#99c5de}.accent-lightblue .page-item .page-link{color:#3c8dbc}.accent-lightblue .page-item.active .page-link,.accent-lightblue .page-item.active a{background-color:#3c8dbc;border-color:#3c8dbc;color:#fff}.accent-lightblue .page-item.disabled .page-link,.accent-lightblue .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-lightblue [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-lightblue [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-lightblue [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-lightblue [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-navy .btn-link,.accent-navy a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#001f3f}.accent-navy .btn-link:hover,.accent-navy a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#000}.accent-navy .dropdown-item.active,.accent-navy .dropdown-item:active{background:#001f3f;color:#fff}.accent-navy .custom-control-input:checked~.custom-control-label:before{background:#001f3f;border-color:#000}.accent-navy .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-navy .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-navy .custom-file-input:focus~.custom-file-label,.accent-navy .custom-select:focus,.accent-navy .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#005ebf}.accent-navy .page-item .page-link{color:#001f3f}.accent-navy .page-item.active .page-link,.accent-navy .page-item.active a{background-color:#001f3f;border-color:#001f3f;color:#fff}.accent-navy .page-item.disabled .page-link,.accent-navy .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-navy [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-navy [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-navy [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-navy [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-olive .btn-link,.accent-olive a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#3d9970}.accent-olive .btn-link:hover,.accent-olive a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#276248}.accent-olive .dropdown-item.active,.accent-olive .dropdown-item:active{background:#3d9970;color:#fff}.accent-olive .custom-control-input:checked~.custom-control-label:before{background:#3d9970;border-color:#20503b}.accent-olive .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-olive .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-olive .custom-file-input:focus~.custom-file-label,.accent-olive .custom-select:focus,.accent-olive .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#87cfaf}.accent-olive .page-item .page-link{color:#3d9970}.accent-olive .page-item.active .page-link,.accent-olive .page-item.active a{background-color:#3d9970;border-color:#3d9970;color:#fff}.accent-olive .page-item.disabled .page-link,.accent-olive .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-olive [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-olive [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-olive [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-olive [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-lime .btn-link,.accent-lime a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#01ff70}.accent-lime .btn-link:hover,.accent-lime a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#00b44e}.accent-lime .dropdown-item.active,.accent-lime .dropdown-item:active{background:#01ff70;color:#2a2e30}.accent-lime .custom-control-input:checked~.custom-control-label:before{background:#01ff70;border-color:#009a43}.accent-lime .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%232a2e30' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-lime .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-lime .custom-file-input:focus~.custom-file-label,.accent-lime .custom-select:focus,.accent-lime .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#81ffb8}.accent-lime .page-item .page-link{color:#01ff70}.accent-lime .page-item.active .page-link,.accent-lime .page-item.active a{background-color:#01ff70;border-color:#01ff70;color:#fff}.accent-lime .page-item.disabled .page-link,.accent-lime .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-lime [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-lime [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-lime [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-lime [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-fuchsia .btn-link,.accent-fuchsia a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#f012be}.accent-fuchsia .btn-link:hover,.accent-fuchsia a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#ab0b87}.accent-fuchsia .dropdown-item.active,.accent-fuchsia .dropdown-item:active{background:#f012be;color:#fff}.accent-fuchsia .custom-control-input:checked~.custom-control-label:before{background:#f012be;border-color:#930974}.accent-fuchsia .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-fuchsia .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-fuchsia .custom-file-input:focus~.custom-file-label,.accent-fuchsia .custom-select:focus,.accent-fuchsia .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#f88adf}.accent-fuchsia .page-item .page-link{color:#f012be}.accent-fuchsia .page-item.active .page-link,.accent-fuchsia .page-item.active a{background-color:#f012be;border-color:#f012be;color:#fff}.accent-fuchsia .page-item.disabled .page-link,.accent-fuchsia .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-fuchsia [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-fuchsia [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-fuchsia [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-fuchsia [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-maroon .btn-link,.accent-maroon a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#d81b60}.accent-maroon .btn-link:hover,.accent-maroon a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#941342}.accent-maroon .dropdown-item.active,.accent-maroon .dropdown-item:active{background:#d81b60;color:#fff}.accent-maroon .custom-control-input:checked~.custom-control-label:before{background:#d81b60;border-color:#7d1038}.accent-maroon .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-maroon .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-maroon .custom-file-input:focus~.custom-file-label,.accent-maroon .custom-select:focus,.accent-maroon .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#f083ab}.accent-maroon .page-item .page-link{color:#d81b60}.accent-maroon .page-item.active .page-link,.accent-maroon .page-item.active a{background-color:#d81b60;border-color:#d81b60;color:#fff}.accent-maroon .page-item.disabled .page-link,.accent-maroon .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-maroon [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-maroon [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-maroon [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-maroon [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-blue .btn-link,.accent-blue a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#3085d6}.accent-blue .btn-link:hover,.accent-blue a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#1f5e9b}.accent-blue .dropdown-item.active,.accent-blue .dropdown-item:active{background:#3085d6;color:#fff}.accent-blue .custom-control-input:checked~.custom-control-label:before{background:#3085d6;border-color:#1a5186}.accent-blue .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-blue .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-blue .custom-file-input:focus~.custom-file-label,.accent-blue .custom-select:focus,.accent-blue .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#9ac4eb}.accent-blue .page-item .page-link{color:#3085d6}.accent-blue .page-item.active .page-link,.accent-blue .page-item.active a{background-color:#3085d6;border-color:#3085d6;color:#fff}.accent-blue .page-item.disabled .page-link,.accent-blue .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-blue [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-blue [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-blue [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-blue [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-indigo .btn-link,.accent-indigo a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#5c6bc6}.accent-indigo .btn-link:hover,.accent-indigo a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#37469e}.accent-indigo .dropdown-item.active,.accent-indigo .dropdown-item:active{background:#5c6bc6;color:#fff}.accent-indigo .custom-control-input:checked~.custom-control-label:before{background:#5c6bc6;border-color:#313e8b}.accent-indigo .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-indigo .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-indigo .custom-file-input:focus~.custom-file-label,.accent-indigo .custom-select:focus,.accent-indigo .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#bac1e7}.accent-indigo .page-item .page-link{color:#5c6bc6}.accent-indigo .page-item.active .page-link,.accent-indigo .page-item.active a{background-color:#5c6bc6;border-color:#5c6bc6;color:#fff}.accent-indigo .page-item.disabled .page-link,.accent-indigo .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-indigo [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-indigo [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-indigo [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-indigo [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-purple .btn-link,.accent-purple a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#6f42c1}.accent-purple .btn-link:hover,.accent-purple a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#4e2d89}.accent-purple .dropdown-item.active,.accent-purple .dropdown-item:active{background:#6f42c1;color:#fff}.accent-purple .custom-control-input:checked~.custom-control-label:before{background:#6f42c1;border-color:#432776}.accent-purple .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-purple .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-purple .custom-file-input:focus~.custom-file-label,.accent-purple .custom-select:focus,.accent-purple .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#b8a2e0}.accent-purple .page-item .page-link{color:#6f42c1}.accent-purple .page-item.active .page-link,.accent-purple .page-item.active a{background-color:#6f42c1;border-color:#6f42c1;color:#fff}.accent-purple .page-item.disabled .page-link,.accent-purple .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-purple [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-purple [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-purple [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-purple [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-pink .btn-link,.accent-pink a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#ff8acc}.accent-pink .btn-link:hover,.accent-pink a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#ff3eab}.accent-pink .dropdown-item.active,.accent-pink .dropdown-item:active{background:#ff8acc;color:#2a2e30}.accent-pink .custom-control-input:checked~.custom-control-label:before{background:#ff8acc;border-color:#ff24a0}.accent-pink .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%232a2e30' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-pink .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-pink .custom-file-input:focus~.custom-file-label,.accent-pink .custom-select:focus,.accent-pink .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#fff}.accent-pink .page-item .page-link{color:#ff8acc}.accent-pink .page-item.active .page-link,.accent-pink .page-item.active a{background-color:#ff8acc;border-color:#ff8acc;color:#fff}.accent-pink .page-item.disabled .page-link,.accent-pink .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-pink [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-pink [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-pink [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-pink [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-red .btn-link,.accent-red a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#ea5455}.accent-red .btn-link:hover,.accent-red a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#d71a1c}.accent-red .dropdown-item.active,.accent-red .dropdown-item:active{background:#ea5455;color:#fff}.accent-red .custom-control-input:checked~.custom-control-label:before{background:#ea5455;border-color:#c01819}.accent-red .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-red .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-red .custom-file-input:focus~.custom-file-label,.accent-red .custom-select:focus,.accent-red .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#f8c6c6}.accent-red .page-item .page-link{color:#ea5455}.accent-red .page-item.active .page-link,.accent-red .page-item.active a{background-color:#ea5455;border-color:#ea5455;color:#fff}.accent-red .page-item.disabled .page-link,.accent-red .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-red [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-red [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-red [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-red [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-orange .btn-link,.accent-orange a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#dda451}.accent-orange .btn-link:hover,.accent-orange a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#bd7f25}.accent-orange .dropdown-item.active,.accent-orange .dropdown-item:active{background:#dda451;color:#2a2e30}.accent-orange .custom-control-input:checked~.custom-control-label:before{background:#dda451;border-color:#a77121}.accent-orange .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%232a2e30' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-orange .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-orange .custom-file-input:focus~.custom-file-label,.accent-orange .custom-select:focus,.accent-orange .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#f2dcbc}.accent-orange .page-item .page-link{color:#dda451}.accent-orange .page-item.active .page-link,.accent-orange .page-item.active a{background-color:#dda451;border-color:#dda451;color:#fff}.accent-orange .page-item.disabled .page-link,.accent-orange .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-orange [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-orange [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-orange [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-orange [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-yellow .btn-link,.accent-yellow a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#edc30e}.accent-yellow .btn-link:hover,.accent-yellow a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#a5880a}.accent-yellow .dropdown-item.active,.accent-yellow .dropdown-item:active{background:#edc30e;color:#2a2e30}.accent-yellow .custom-control-input:checked~.custom-control-label:before{background:#edc30e;border-color:#8d7408}.accent-yellow .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%232a2e30' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-yellow .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-yellow .custom-file-input:focus~.custom-file-label,.accent-yellow .custom-select:focus,.accent-yellow .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#f8e283}.accent-yellow .page-item .page-link{color:#edc30e}.accent-yellow .page-item.active .page-link,.accent-yellow .page-item.active a{background-color:#edc30e;border-color:#edc30e;color:#fff}.accent-yellow .page-item.disabled .page-link,.accent-yellow .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-yellow [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-yellow [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-yellow [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-yellow [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-green .btn-link,.accent-green a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#21b978}.accent-green .btn-link:hover,.accent-green a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#15784e}.accent-green .dropdown-item.active,.accent-green .dropdown-item:active{background:#21b978;color:#fff}.accent-green .custom-control-input:checked~.custom-control-label:before{background:#21b978;border-color:#126240}.accent-green .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-green .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-green .custom-file-input:focus~.custom-file-label,.accent-green .custom-select:focus,.accent-green .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#73e6b5}.accent-green .page-item .page-link{color:#21b978}.accent-green .page-item.active .page-link,.accent-green .page-item.active a{background-color:#21b978;border-color:#21b978;color:#fff}.accent-green .page-item.disabled .page-link,.accent-green .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-green [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-green [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-green [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-green [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-teal .btn-link,.accent-teal a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#20c997}.accent-teal .btn-link:hover,.accent-teal a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#158765}.accent-teal .dropdown-item.active,.accent-teal .dropdown-item:active{background:#20c997;color:#fff}.accent-teal .custom-control-input:checked~.custom-control-label:before{background:#20c997;border-color:#127155}.accent-teal .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-teal .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-teal .custom-file-input:focus~.custom-file-label,.accent-teal .custom-select:focus,.accent-teal .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#7eeaca}.accent-teal .page-item .page-link{color:#20c997}.accent-teal .page-item.active .page-link,.accent-teal .page-item.active a{background-color:#20c997;border-color:#20c997;color:#fff}.accent-teal .page-item.disabled .page-link,.accent-teal .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-teal [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-teal [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-teal [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-teal [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-cyan .btn-link,.accent-cyan a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#7367f0}.accent-cyan .btn-link:hover,.accent-cyan a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#3321e9}.accent-cyan .dropdown-item.active,.accent-cyan .dropdown-item:active{background:#7367f0;color:#fff}.accent-cyan .custom-control-input:checked~.custom-control-label:before{background:#7367f0;border-color:#2716db}.accent-cyan .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-cyan .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-cyan .custom-file-input:focus~.custom-file-label,.accent-cyan .custom-select:focus,.accent-cyan .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#dedbfb}.accent-cyan .page-item .page-link{color:#7367f0}.accent-cyan .page-item.active .page-link,.accent-cyan .page-item.active a{background-color:#7367f0;border-color:#7367f0;color:#fff}.accent-cyan .page-item.disabled .page-link,.accent-cyan .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-cyan [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-cyan [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-cyan [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-cyan [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-white .btn-link,.accent-white a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#fff}.accent-white .btn-link:hover,.accent-white a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#d9d9d9}.accent-white .dropdown-item.active,.accent-white .dropdown-item:active{background:#fff;color:#2a2e30}.accent-white .custom-control-input:checked~.custom-control-label:before{background:#fff;border-color:#ccc}.accent-white .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%232a2e30' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-white .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-white .custom-file-input:focus~.custom-file-label,.accent-white .custom-select:focus,.accent-white .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#fff}.accent-white .page-item .page-link{color:#fff}.accent-white .page-item.active .page-link,.accent-white .page-item.active a{background-color:#fff;border-color:#fff;color:#fff}.accent-white .page-item.disabled .page-link,.accent-white .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-white [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-white [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-white [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-white [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-gray .btn-link,.accent-gray a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#b8c2cc}.accent-gray .btn-link:hover,.accent-gray a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#8b9cac}.accent-gray .dropdown-item.active,.accent-gray .dropdown-item:active{background:#b8c2cc;color:#2a2e30}.accent-gray .custom-control-input:checked~.custom-control-label:before{background:#b8c2cc;border-color:#7d8fa1}.accent-gray .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%232a2e30' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-gray .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-gray .custom-file-input:focus~.custom-file-label,.accent-gray .custom-select:focus,.accent-gray .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#fff}.accent-gray .page-item .page-link{color:#b8c2cc}.accent-gray .page-item.active .page-link,.accent-gray .page-item.active a{background-color:#b8c2cc;border-color:#b8c2cc;color:#fff}.accent-gray .page-item.disabled .page-link,.accent-gray .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-gray [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-gray [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-gray [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-gray [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-gray-dark .btn-link,.accent-gray-dark a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#1e1e1e}.accent-gray-dark .btn-link:hover,.accent-gray-dark a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#000}.accent-gray-dark .dropdown-item.active,.accent-gray-dark .dropdown-item:active{background:#1e1e1e;color:#fff}.accent-gray-dark .custom-control-input:checked~.custom-control-label:before{background:#1e1e1e;border-color:#000}.accent-gray-dark .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-gray-dark .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-gray-dark .custom-file-input:focus~.custom-file-label,.accent-gray-dark .custom-select:focus,.accent-gray-dark .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#5e5e5e}.accent-gray-dark .page-item .page-link{color:#1e1e1e}.accent-gray-dark .page-item.active .page-link,.accent-gray-dark .page-item.active a{background-color:#1e1e1e;border-color:#1e1e1e;color:#fff}.accent-gray-dark .page-item.disabled .page-link,.accent-gray-dark .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-gray-dark [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-gray-dark [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-gray-dark [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-gray-dark [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}[class*=accent-] a.btn-primary{color:#fff}[class*=accent-] a.btn-secondary{color:#2a2e30}[class*=accent-] a.btn-info,[class*=accent-] a.btn-success{color:#fff}[class*=accent-] a.btn-warning{color:#2a2e30}[class*=accent-] a.btn-danger{color:#fff}[class*=accent-] a.btn-light{color:#2a2e30}[class*=accent-] a.btn-dark{color:#fff} ================================================ FILE: public/vendor/dcat-admin/adminlte/adminlte-green.css ================================================ /*! * AdminLTE v3.0.4 * Author: Colorlib * Website: AdminLTE.io * License: Open source - MIT */ /*! * Bootstrap v4.3.1 (https://getbootstrap.com/) * Copyright 2011-2019 The Bootstrap Authors * Copyright 2011-2019 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */ /*! * Bootstrap v4.3.1 (https://getbootstrap.com/) * Copyright 2011-2019 The Bootstrap Authors * Copyright 2011-2019 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */:root{--blue:#3085d6;--indigo:#5c6bc6;--purple:#6f42c1;--pink:#ff8acc;--red:#ea5455;--orange:#dda451;--yellow:#edc30e;--green:#21b978;--teal:#20c997;--cyan:#7367f0;--white:#fff;--gray:#b8c2cc;--gray-dark:#1e1e1e;--primary:#4e9876;--secondary:#b8c2cc;--success:#21b978;--info:#4277cf;--warning:#dda451;--danger:#ea5455;--light:#f7f7f9;--dark:#22292f;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:"Montserrat",Helvetica,Arial,serif;--font-family-monospace:"Montserrat",Helvetica,Arial,serif}*,:after,:before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(34,41,47,0)}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:Montserrat,Helvetica,Arial,serif;font-size:1rem;font-weight:400;line-height:1.45;color:#626262;text-align:left;background-color:#eff1f7}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{font-style:normal;line-height:inherit}address,dl,ol,ul{margin-bottom:1rem}dl,ol,ul{margin-top:0}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#458769;background-color:transparent}a,a:hover{text-decoration:none}a:hover{color:#34654f}a:not([href]):not([tabindex]),a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:Montserrat,Helvetica,Arial,serif;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{border-style:none}img,svg{vertical-align:middle}svg{overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#b8c2cc;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-family:inherit;font-weight:500;line-height:1.2;color:#2c2c2c}.h1,h1{font-size:2rem}.h2,h2{font-size:1.74rem}.h3,h3{font-size:1.51rem}.h4,h4{font-size:1.32rem}.h5,h5{font-size:1.14rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem}.display-1,.display-2{font-weight:300;line-height:1.2}.display-2{font-size:5.5rem}.display-3{font-size:4.5rem}.display-3,.display-4{font-weight:300;line-height:1.2}.display-4{font-size:3.5rem}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(34,41,47,.1)}.small,small{font-size:smaller;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-inline,.list-unstyled{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:smaller;color:#b8c2cc}.blockquote-footer:before{content:"\2014\A0"}.img-fluid,.img-thumbnail{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#eff1f7;border:1px solid #dae1e7;border-radius:.5rem}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#b8c2cc}code{word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:90%;color:#fff;background-color:#eee;border-radius:.25rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:90%;color:#2a2e30}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:14px;padding-left:14px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:14px;padding-left:14px;margin-right:auto;margin-left:auto}.row{display:flex;flex-wrap:wrap;margin-right:-14px;margin-left:-14px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col-auto,.col-lg,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-auto,.col-md,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-md-auto,.col-sm,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-auto{position:relative;width:100%;padding-right:14px;padding-left:14px}.col{flex-basis:0;flex-grow:1;max-width:100%}.col-auto{flex:0 0 auto;width:auto;max-width:100%}.col-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-3{flex:0 0 25%;max-width:25%}.col-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-6{flex:0 0 50%;max-width:50%}.col-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-9{flex:0 0 75%;max-width:75%}.col-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-12{flex:0 0 100%;max-width:100%}.order-first{order:-1}.order-last{order:13}.order-0{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.offset-1{margin-left:8.3333333333%}.offset-2{margin-left:16.6666666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.3333333333%}.offset-5{margin-left:41.6666666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.3333333333%}.offset-8{margin-left:66.6666666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.3333333333%}.offset-11{margin-left:91.6666666667%}@media (min-width:576px){.col-sm{flex-basis:0;flex-grow:1;max-width:100%}.col-sm-auto{flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-sm-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-sm-3{flex:0 0 25%;max-width:25%}.col-sm-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-sm-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-sm-6{flex:0 0 50%;max-width:50%}.col-sm-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-sm-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-sm-9{flex:0 0 75%;max-width:75%}.col-sm-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-sm-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-sm-12{flex:0 0 100%;max-width:100%}.order-sm-first{order:-1}.order-sm-last{order:13}.order-sm-0{order:0}.order-sm-1{order:1}.order-sm-2{order:2}.order-sm-3{order:3}.order-sm-4{order:4}.order-sm-5{order:5}.order-sm-6{order:6}.order-sm-7{order:7}.order-sm-8{order:8}.order-sm-9{order:9}.order-sm-10{order:10}.order-sm-11{order:11}.order-sm-12{order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.3333333333%}.offset-sm-2{margin-left:16.6666666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.3333333333%}.offset-sm-5{margin-left:41.6666666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.3333333333%}.offset-sm-8{margin-left:66.6666666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.3333333333%}.offset-sm-11{margin-left:91.6666666667%}}@media (min-width:768px){.col-md{flex-basis:0;flex-grow:1;max-width:100%}.col-md-auto{flex:0 0 auto;width:auto;max-width:100%}.col-md-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-md-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-md-3{flex:0 0 25%;max-width:25%}.col-md-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-md-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-md-6{flex:0 0 50%;max-width:50%}.col-md-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-md-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-md-9{flex:0 0 75%;max-width:75%}.col-md-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-md-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-md-12{flex:0 0 100%;max-width:100%}.order-md-first{order:-1}.order-md-last{order:13}.order-md-0{order:0}.order-md-1{order:1}.order-md-2{order:2}.order-md-3{order:3}.order-md-4{order:4}.order-md-5{order:5}.order-md-6{order:6}.order-md-7{order:7}.order-md-8{order:8}.order-md-9{order:9}.order-md-10{order:10}.order-md-11{order:11}.order-md-12{order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.3333333333%}.offset-md-2{margin-left:16.6666666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.3333333333%}.offset-md-5{margin-left:41.6666666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.3333333333%}.offset-md-8{margin-left:66.6666666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.3333333333%}.offset-md-11{margin-left:91.6666666667%}}@media (min-width:992px){.col-lg{flex-basis:0;flex-grow:1;max-width:100%}.col-lg-auto{flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-lg-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-lg-3{flex:0 0 25%;max-width:25%}.col-lg-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-lg-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-lg-6{flex:0 0 50%;max-width:50%}.col-lg-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-lg-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-lg-9{flex:0 0 75%;max-width:75%}.col-lg-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-lg-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-lg-12{flex:0 0 100%;max-width:100%}.order-lg-first{order:-1}.order-lg-last{order:13}.order-lg-0{order:0}.order-lg-1{order:1}.order-lg-2{order:2}.order-lg-3{order:3}.order-lg-4{order:4}.order-lg-5{order:5}.order-lg-6{order:6}.order-lg-7{order:7}.order-lg-8{order:8}.order-lg-9{order:9}.order-lg-10{order:10}.order-lg-11{order:11}.order-lg-12{order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.3333333333%}.offset-lg-2{margin-left:16.6666666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.3333333333%}.offset-lg-5{margin-left:41.6666666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.3333333333%}.offset-lg-8{margin-left:66.6666666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.3333333333%}.offset-lg-11{margin-left:91.6666666667%}}@media (min-width:1200px){.col-xl{flex-basis:0;flex-grow:1;max-width:100%}.col-xl-auto{flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-xl-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-xl-3{flex:0 0 25%;max-width:25%}.col-xl-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-xl-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-xl-6{flex:0 0 50%;max-width:50%}.col-xl-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-xl-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-xl-9{flex:0 0 75%;max-width:75%}.col-xl-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-xl-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-xl-12{flex:0 0 100%;max-width:100%}.order-xl-first{order:-1}.order-xl-last{order:13}.order-xl-0{order:0}.order-xl-1{order:1}.order-xl-2{order:2}.order-xl-3{order:3}.order-xl-4{order:4}.order-xl-5{order:5}.order-xl-6{order:6}.order-xl-7{order:7}.order-xl-8{order:8}.order-xl-9{order:9}.order-xl-10{order:10}.order-xl-11{order:11}.order-xl-12{order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.3333333333%}.offset-xl-2{margin-left:16.6666666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.3333333333%}.offset-xl-5{margin-left:41.6666666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.3333333333%}.offset-xl-8{margin-left:66.6666666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.3333333333%}.offset-xl-11{margin-left:91.6666666667%}}.table{width:100%;margin-bottom:1rem;color:#626262}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #eff1f7}.table thead th{vertical-align:bottom;border-bottom:2px solid #eff1f7}.table tbody+tbody{border-top:2px solid #eff1f7}.table-sm td,.table-sm th{padding:.3rem}.table-bordered,.table-bordered td,.table-bordered th{border:1px solid #eff1f7}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(34,41,47,.05)}.table-hover tbody tr:hover{color:#626262;background-color:rgba(34,41,47,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#cde2d9}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#a3c9b8}.table-hover .table-primary:hover,.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#bdd9cd}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#ebeef1}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#dadfe4}.table-hover .table-secondary:hover,.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#dce1e7}.table-success,.table-success>td,.table-success>th{background-color:#c1ebd9}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8cdbb9}.table-hover .table-success:hover,.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#aee5cd}.table-info,.table-info>td,.table-info>th{background-color:#cad9f2}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#9db8e6}.table-hover .table-info:hover,.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#b6caed}.table-warning,.table-warning>td,.table-warning>th{background-color:#f5e6ce}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#edd0a5}.table-hover .table-warning:hover,.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#f1dbb9}.table-danger,.table-danger>td,.table-danger>th{background-color:#f9cfcf}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#f4a6a7}.table-hover .table-danger:hover,.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f6b8b8}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfd}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfbfc}.table-hover .table-light:hover,.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#f0f0f0}.table-dark,.table-dark>td,.table-dark>th{background-color:#c1c3c5}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#8c9093}.table-hover .table-dark:hover,.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b4b6b9}.table-active,.table-active>td,.table-active>th{background-color:rgba(34,41,47,.075)}.table-hover .table-active:hover,.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(23,28,32,.075)}.table .thead-dark th{color:#fff;background-color:#1e1e1e;border-color:#313131}.table .thead-light th{color:#4e5154;background-color:#ededed;border-color:#eff1f7}.table-dark{color:#fff;background-color:#1e1e1e}.table-dark td,.table-dark th,.table-dark thead th{border-color:#313131}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:hsla(0,0%,100%,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:hsla(0,0%,100%,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:34px;padding:.7rem;font-size:.96rem;font-weight:400;line-height:1.25;color:#4e5154;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:5px;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#4e5154;background-color:#fff;border-color:#4e9876;outline:0;box-shadow:0 3px 10px 0 rgba(0,0,0,.15)}.form-control::-moz-placeholder{color:rgba(0,0,0,.5);opacity:1}.form-control:-ms-input-placeholder{color:rgba(0,0,0,.5);opacity:1}.form-control::placeholder{color:rgba(0,0,0,.5);opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#f5f5f1;opacity:1}select.form-control:focus::-ms-value{color:#4e5154;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.7rem + 1px);padding-bottom:calc(.7rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.25}.col-form-label-lg{padding-top:calc(1rem + 1px);padding-bottom:calc(1rem + 1px);font-size:1.25rem;line-height:1.25}.col-form-label-sm{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:.7rem;line-height:1}.form-control-plaintext{display:block;width:100%;padding-top:.7rem;padding-bottom:.7rem;margin-bottom:0;line-height:1.25;color:#adb5bd;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:2rem;padding:.5rem 1.5rem;font-size:.7rem;line-height:1;border-radius:4px}.form-control-lg{height:calc(1.25em + 2rem + 2px);padding:1rem 2.5rem;font-size:1.25rem;line-height:1.25;border-radius:6px}select.form-control[multiple],select.form-control[size],textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:flex;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#b8c2cc}.form-check-label{margin-bottom:0}.form-check-inline{display:inline-flex;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:smaller;color:#21b978}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:1rem;line-height:1.45;color:#fff;background-color:rgba(33,185,120,.9);border-radius:.5rem}.form-control.is-valid,.was-validated .form-control:valid{border-color:#21b978;padding-right:calc(1.25em + 1.4rem);background-repeat:no-repeat;background-position:100% calc(.3125em + .35rem);background-size:calc(.625em + .7rem) calc(.625em + .7rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#21b978;box-shadow:0 0 0 .2rem rgba(33,185,120,.25)}.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.25em + 1.4rem);background-position:top calc(.3125em + .35rem) right calc(.3125em + .35rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#21b978;padding-right:calc(.75em + 2.75rem);background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%231e1e1e' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .7rem center/8px 10px,url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%2321b978' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E") #fff no-repeat center right 1.7rem/calc(.625em + .7rem) calc(.625em + .7rem)}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#21b978;box-shadow:0 0 0 .2rem rgba(33,185,120,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.form-control-file.is-valid~.valid-feedback,.form-control-file.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip,.was-validated .form-control-file:valid~.valid-feedback,.was-validated .form-control-file:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#21b978}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#21b978}.custom-control-input.is-valid~.custom-control-label:before,.was-validated .custom-control-input:valid~.custom-control-label:before{border-color:#21b978}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label:before,.was-validated .custom-control-input:valid:checked~.custom-control-label:before{border-color:#32db93;background-color:#32db93}.custom-control-input.is-valid:focus~.custom-control-label:before,.was-validated .custom-control-input:valid:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem rgba(33,185,120,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label:before,.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#21b978}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#21b978;box-shadow:0 0 0 .2rem rgba(33,185,120,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:smaller;color:#ea5455}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:1rem;line-height:1.45;color:#fff;background-color:rgba(234,84,85,.9);border-radius:.5rem}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#ea5455;padding-right:calc(1.25em + 1.4rem);background-repeat:no-repeat;background-position:100% calc(.3125em + .35rem);background-size:calc(.625em + .7rem) calc(.625em + .7rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#ea5455;box-shadow:0 0 0 .2rem rgba(234,84,85,.25)}.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.25em + 1.4rem);background-position:top calc(.3125em + .35rem) right calc(.3125em + .35rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#ea5455;padding-right:calc(.75em + 2.75rem);background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%231e1e1e' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .7rem center/8px 10px,url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23ea5455' viewBox='-2 -2 7 7'%3E%3Cpath stroke='%23ea5455' d='M0 0l3 3m0-3L0 3'/%3E%3Ccircle r='.5'/%3E%3Ccircle cx='3' r='.5'/%3E%3Ccircle cy='3' r='.5'/%3E%3Ccircle cx='3' cy='3' r='.5'/%3E%3C/svg%3E") #fff no-repeat center right 1.7rem/calc(.625em + .7rem) calc(.625em + .7rem)}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#ea5455;box-shadow:0 0 0 .2rem rgba(234,84,85,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.form-control-file.is-invalid~.invalid-feedback,.form-control-file.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip,.was-validated .form-control-file:invalid~.invalid-feedback,.was-validated .form-control-file:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#ea5455}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#ea5455}.custom-control-input.is-invalid~.custom-control-label:before,.was-validated .custom-control-input:invalid~.custom-control-label:before{border-color:#ea5455}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label:before,.was-validated .custom-control-input:invalid:checked~.custom-control-label:before{border-color:#f08182;background-color:#f08182}.custom-control-input.is-invalid:focus~.custom-control-label:before,.was-validated .custom-control-input:invalid:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem rgba(234,84,85,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label:before,.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#ea5455}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#ea5455;box-shadow:0 0 0 .2rem rgba(234,84,85,.25)}.form-inline{display:flex;flex-flow:row wrap;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{justify-content:center}.form-inline .form-group,.form-inline label{display:flex;align-items:center;margin-bottom:0}.form-inline .form-group{flex:0 0 auto;flex-flow:row wrap}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:flex;align-items:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{align-items:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#626262;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:0 solid transparent;padding:.9rem 2rem;font-size:1rem;line-height:1;border-radius:.42rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#626262;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(78,152,118,.25)}.btn.disabled,.btn:disabled{opacity:.65}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#4e9876;border-color:#4e9876}.btn-primary:hover{color:#fff;background-color:#488c6d;border-color:#488c6d}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(105,167,139,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#4e9876;border-color:#4e9876}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#458769;border-color:#458769}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(105,167,139,.5)}.btn-secondary{color:#2a2e30;background-color:#b8c2cc;border-color:#b8c2cc}.btn-secondary:hover{color:#2a2e30;background-color:#aeb9c5;border-color:#aeb9c5}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(163,172,181,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#2a2e30;background-color:#b8c2cc;border-color:#b8c2cc}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#2a2e30;background-color:#a9b5c1;border-color:#a9b5c1}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(163,172,181,.5)}.btn-success{color:#fff;background-color:#21b978;border-color:#21b978}.btn-success:hover{color:#fff;background-color:#1eaa6e;border-color:#1eaa6e}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(66,196,140,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#21b978;border-color:#21b978}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1da36a;border-color:#1da36a}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(66,196,140,.5)}.btn-info{color:#fff;background-color:#4277cf;border-color:#4277cf}.btn-info:hover{color:#fff;background-color:#346dcb;border-color:#346dcb}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(94,139,214,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#4277cf;border-color:#4277cf}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#3269c5;border-color:#3269c5}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(94,139,214,.5)}.btn-warning{color:#2a2e30;background-color:#dda451;border-color:#dda451}.btn-warning:hover{color:#2a2e30;background-color:#da9c42;border-color:#da9c42}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(194,146,76,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#2a2e30;background-color:#dda451;border-color:#dda451}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#2a2e30;background-color:#d9993c;border-color:#d9993c}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(194,146,76,.5)}.btn-danger{color:#fff;background-color:#ea5455;border-color:#ea5455}.btn-danger:hover{color:#fff;background-color:#e84445;border-color:#e84445}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(237,110,111,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#ea5455;border-color:#ea5455}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#e73d3e;border-color:#e73d3e}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(237,110,111,.5)}.btn-light{color:#2a2e30;background-color:#f7f7f9;border-color:#f7f7f9}.btn-light:hover{color:#2a2e30;background-color:#ededf1;border-color:#ededf1}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#2a2e30;background-color:#f7f7f9;border-color:#f7f7f9}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#2a2e30;background-color:#e8e8ee;border-color:#e8e8ee}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#22292f;border-color:#22292f}.btn-dark:hover{color:#fff;background-color:#1b2025;border-color:#1b2025}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(67,73,78,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#22292f;border-color:#22292f}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#171c20;border-color:#171c20}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(67,73,78,.5)}.btn-outline-primary,.btn-outline-primary:hover{color:#4e9876;border-color:#4e9876}.btn-outline-primary:hover{background-color:rgba(78,152,118,.1)}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(78,152,118,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#4e9876;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#4e9876;border-color:#4e9876}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(78,152,118,.5)}.btn-outline-secondary,.btn-outline-secondary:hover{color:#b8c2cc;border-color:#b8c2cc}.btn-outline-secondary:hover{background-color:rgba(184,194,204,.1)}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(184,194,204,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#b8c2cc;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#2a2e30;background-color:#b8c2cc;border-color:#b8c2cc}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(184,194,204,.5)}.btn-outline-success,.btn-outline-success:hover{color:#21b978;border-color:#21b978}.btn-outline-success:hover{background-color:rgba(33,185,120,.1)}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(33,185,120,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#21b978;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#21b978;border-color:#21b978}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(33,185,120,.5)}.btn-outline-info,.btn-outline-info:hover{color:#4277cf;border-color:#4277cf}.btn-outline-info:hover{background-color:rgba(66,119,207,.1)}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(66,119,207,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#4277cf;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#4277cf;border-color:#4277cf}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(66,119,207,.5)}.btn-outline-warning,.btn-outline-warning:hover{color:#dda451;border-color:#dda451}.btn-outline-warning:hover{background-color:rgba(221,164,81,.1)}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(221,164,81,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#dda451;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#2a2e30;background-color:#dda451;border-color:#dda451}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(221,164,81,.5)}.btn-outline-danger,.btn-outline-danger:hover{color:#ea5455;border-color:#ea5455}.btn-outline-danger:hover{background-color:rgba(234,84,85,.1)}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(234,84,85,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#ea5455;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#ea5455;border-color:#ea5455}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(234,84,85,.5)}.btn-outline-light,.btn-outline-light:hover{color:#f7f7f9;border-color:#f7f7f9}.btn-outline-light:hover{background-color:rgba(247,247,249,.1)}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(247,247,249,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f7f7f9;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#2a2e30;background-color:#f7f7f9;border-color:#f7f7f9}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(247,247,249,.5)}.btn-outline-dark,.btn-outline-dark:hover{color:#22292f;border-color:#22292f}.btn-outline-dark:hover{background-color:rgba(34,41,47,.1)}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(34,41,47,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#22292f;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#22292f;border-color:#22292f}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(34,41,47,.5)}.btn-link{font-weight:400;color:#458769;text-decoration:none}.btn-link:hover{color:#34654f;text-decoration:none}.btn-link.focus,.btn-link:focus{text-decoration:none;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#b8c2cc;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:1rem 2.5rem;font-size:1.25rem;line-height:1.25;border-radius:.4285rem}.btn-group-sm>.btn,.btn-sm{padding:.5rem 1.5rem;font-size:.7rem;line-height:1;border-radius:.4285rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown-toggle{white-space:nowrap}.dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty:after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:10;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.5rem 0 0;font-size:.9375rem;color:#626262;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(34,41,47,.15);border-radius:5px}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.5rem}.dropup .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.5rem}.dropright .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-toggle:after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.5rem}.dropleft .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";display:none}.dropleft .dropdown-toggle:before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty:after{margin-left:0}.dropleft .dropdown-toggle:before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid rgba(0,0,0,.08)}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#2a2e30;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#1e2122;text-decoration:none;background-color:#eff1f7}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#4e9876}.dropdown-item.disabled,.dropdown-item:disabled{color:#b8c2cc;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:1rem;color:#b8c2cc;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#2a2e30}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;flex:1 1 auto}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:0}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:1.5rem;padding-left:1.5rem}.dropdown-toggle-split:after,.dropright .dropdown-toggle-split:after,.dropup .dropdown-toggle-split:after{margin-left:0}.dropleft .dropdown-toggle-split:before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:1.125rem;padding-left:1.125rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:1.875rem;padding-left:1.875rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:0}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio],.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:flex;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label:after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:flex;align-items:center;padding:.7rem;margin-bottom:0;font-size:.96rem;font-weight:400;line-height:1.25;color:#4e5154;text-align:center;white-space:nowrap;background-color:#ededed;border:1px solid rgba(0,0,0,.2);border-radius:5px}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.25em + 2rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:1rem 2.5rem;font-size:1.25rem;line-height:1.25;border-radius:6px}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:2rem}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.5rem 1.5rem;font-size:.7rem;line-height:1;border-radius:4px}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.7rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.45rem;padding-left:1.5rem}.custom-control-inline{display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label:before{color:#fff;border-color:#4e9876;background-color:#4e9876}.custom-control-input:focus~.custom-control-label:before{box-shadow:0 3px 10px 0 rgba(0,0,0,.15)}.custom-control-input:focus:not(:checked)~.custom-control-label:before{border-color:#4e9876}.custom-control-input:not(:disabled):active~.custom-control-label:before{color:#fff;background-color:#bcddce;border-color:#bcddce}.custom-control-input:disabled~.custom-control-label{color:#b8c2cc}.custom-control-input:disabled~.custom-control-label:before{background-color:#f5f5f1}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label:before{pointer-events:none;background-color:#fff;border:1px solid #adb5bd}.custom-control-label:after,.custom-control-label:before{position:absolute;top:.225rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:""}.custom-control-label:after{background:no-repeat 50%/50% 50%}.custom-checkbox .custom-control-label:before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:before{border-color:#4e9876;background-color:#4e9876}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(78,152,118,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label:before{background-color:rgba(78,152,118,.5)}.custom-radio .custom-control-label:before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(78,152,118,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label:before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label:after{top:calc(.225rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label:after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label:after{background-color:#fff;transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(78,152,118,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.25em + 1.4rem + 1px);padding:.7rem 1.7rem .7rem .7rem;font-size:.96rem;font-weight:400;line-height:1.25;color:#4e5154;vertical-align:middle;background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%231e1e1e' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .7rem center/8px 10px;background-color:#fff;border:1px solid rgba(0,0,0,.2);border-radius:5px;appearance:none}.custom-select:focus{border-color:#4e9876;outline:0;box-shadow:0 3px 10px 0 rgba(0,0,0,.15)}.custom-select:focus::-ms-value{color:#4e5154;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.7rem;background-image:none}.custom-select:disabled{color:#b8c2cc;background-color:#ededed}.custom-select::-ms-expand{display:none}.custom-select-sm{height:2rem;padding-top:.5rem;padding-bottom:.5rem;padding-left:1.5rem;font-size:.7rem}.custom-select-lg{height:calc(1.25em + 2rem + 2px);padding-top:1rem;padding-bottom:1rem;padding-left:2.5rem;font-size:1.25rem}.custom-file{display:inline-block;margin-bottom:0}.custom-file,.custom-file-input{position:relative;width:100%;height:calc(1.25em + 1.4rem + 1px)}.custom-file-input{z-index:2;margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#4e9876;box-shadow:0 3px 10px 0 rgba(0,0,0,.15)}.custom-file-input:disabled~.custom-file-label{background-color:#f5f5f1}.custom-file-input:lang(en)~.custom-file-label:after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]:after{content:attr(data-browse)}.custom-file-label{left:0;z-index:1;height:calc(1.25em + 1.4rem + 1px);font-weight:400;background-color:#fff;border:1px solid rgba(0,0,0,.2);border-radius:5px}.custom-file-label,.custom-file-label:after{position:absolute;top:0;right:0;padding:.7rem;line-height:1.5rem;color:#4e5154}.custom-file-label:after{bottom:0;z-index:3;display:block;height:calc(1.25em + 1.4rem);content:"Browse";background-color:#ededed;border-left:inherit;border-radius:0 5px 5px 0}.custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:none}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 3px 10px 0 rgba(0,0,0,.15)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 3px 10px 0 rgba(0,0,0,.15)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 3px 10px 0 rgba(0,0,0,.15)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#4e9876;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#bcddce}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dae1e7;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#4e9876;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{-moz-transition:none;transition:none}}.custom-range::-moz-range-thumb:active{background-color:#bcddce}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dae1e7;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#4e9876;border:0;border-radius:1rem;-ms-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{-ms-transition:none;transition:none}}.custom-range::-ms-thumb:active{background-color:#bcddce}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower,.custom-range::-ms-fill-upper{background-color:#dae1e7;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label:before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label:before,.custom-file-label,.custom-select{transition:none}}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.357rem .5rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#b8c2cc;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dae1e7}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.5rem;border-top-right-radius:.5rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#ededed #ededed #dae1e7}.nav-tabs .nav-link.disabled{color:#b8c2cc;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#4e5154;background-color:#eff1f7;border-color:#dae1e7 #dae1e7 #eff1f7}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.5rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#4e9876}.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;padding:.5rem 1rem}.navbar,.navbar>.container,.navbar>.container-fluid{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:-.368rem;padding-bottom:-.368rem;margin-right:1rem;font-size:2rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.357rem;padding-bottom:.357rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:2rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.42rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat 50%;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand,.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(34,41,47,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(34,41,47,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(34,41,47,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(34,41,47,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(34,41,47,.9)}.navbar-light .navbar-toggler{color:rgba(34,41,47,.5);border-color:rgba(34,41,47,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(34, 41, 47, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-light .navbar-text{color:rgba(34,41,47,.5)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(34,41,47,.9)}.navbar-dark .navbar-brand,.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:hsla(0,0%,100%,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:hsla(0,0%,100%,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:hsla(0,0%,100%,.5);border-color:hsla(0,0%,100%,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-dark .navbar-text{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(34,41,47,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem}.card-subtitle,.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{margin-bottom:0;background-color:rgba(34,41,47,.03);border-bottom:1px solid rgba(34,41,47,.125)}.card-header:first-child{border-radius:calc(.5rem - 1px) calc(.5rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(34,41,47,.03);border-top:1px solid rgba(34,41,47,.125)}.card-footer:last-child{border-radius:0 0 calc(.5rem - 1px) calc(.5rem - 1px)}.card-header-tabs{margin-bottom:-.75rem;border-bottom:0}.card-header-pills,.card-header-tabs{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.5rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.5rem - 1px);border-top-right-radius:calc(.5rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.5rem - 1px);border-bottom-left-radius:calc(.5rem - 1px)}.card-deck{display:flex;flex-direction:column}.card-deck .card{margin-bottom:14px}@media (min-width:576px){.card-deck{flex-flow:row wrap;margin-right:-14px;margin-left:-14px}.card-deck .card{display:flex;flex:1 0 0%;flex-direction:column;margin-right:14px;margin-bottom:0;margin-left:14px}}.card-group{display:flex;flex-direction:column}.card-group>.card{margin-bottom:14px}@media (min-width:576px){.card-group{flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-moz-column-count:3;column-count:3;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion>.card{overflow:hidden}.accordion>.card:not(:first-of-type) .card-header:first-child{border-radius:0}.accordion>.card:not(:first-of-type):not(:last-of-type){border-bottom:0;border-radius:0}.accordion>.card:first-of-type{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:last-of-type{border-top-left-radius:0;border-top-right-radius:0}.accordion>.card .card-header{margin-bottom:-1px}.breadcrumb{display:flex;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#ededed;border-radius:.5rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item:before{display:inline-block;padding-right:.5rem;color:#b8c2cc;content:"/"}.breadcrumb-item+.breadcrumb-item:hover:before{text-decoration:underline;text-decoration:none}.breadcrumb-item.active{color:#b8c2cc}.pagination{display:flex;padding-left:0;list-style:none;border-radius:.5rem}.page-link{position:relative;display:block;padding:.65rem .911rem;margin-left:-1px;line-height:1.25;color:#458769;background-color:#fff;border:1px solid #dae1e7}.page-link:hover{z-index:2;color:#34654f;text-decoration:none;background-color:#ededed;border-color:#dae1e7}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(78,152,118,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.5rem;border-bottom-left-radius:.5rem}.page-item:last-child .page-link{border-top-right-radius:.5rem;border-bottom-right-radius:.5rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#4e9876;border-color:#4e9876}.page-item.disabled .page-link{color:#b8c2cc;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dae1e7}.pagination-lg .page-link{padding:.5rem 1rem;font-size:2rem;line-height:1.25}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.6rem;border-bottom-left-radius:.6rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.6rem;border-bottom-right-radius:.6rem}.pagination-sm .page-link{padding:.5rem .75rem;font-size:1rem;line-height:1}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.5rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#4e9876}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#3d765c}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(78,152,118,.5)}.badge-secondary{color:#2a2e30;background-color:#b8c2cc}a.badge-secondary:focus,a.badge-secondary:hover{color:#2a2e30;background-color:#9aa9b7}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(184,194,204,.5)}.badge-success{color:#fff;background-color:#21b978}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#198e5c}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(33,185,120,.5)}.badge-info{color:#fff;background-color:#4277cf}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#2d5fb1}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(66,119,207,.5)}.badge-warning{color:#2a2e30;background-color:#dda451}a.badge-warning:focus,a.badge-warning:hover{color:#2a2e30;background-color:#d28d29}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(221,164,81,.5)}.badge-danger{color:#fff;background-color:#ea5455}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#e42728}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(234,84,85,.5)}.badge-light{color:#2a2e30;background-color:#f7f7f9}a.badge-light:focus,a.badge-light:hover{color:#2a2e30;background-color:#dadae3}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(247,247,249,.5)}.badge-dark{color:#fff;background-color:#22292f}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#0d0f11}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(34,41,47,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#ededed;border-radius:.6rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.5rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close,.alert-dismissible .mailbox-attachment-close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#396354;background-color:#dceae4;border-color:#cde2d9}.alert-primary hr{border-top-color:#bdd9cd}.alert-primary .alert-link{color:#264339}.alert-secondary{color:#707981;background-color:#f1f3f5;border-color:#ebeef1}.alert-secondary hr{border-top-color:#dce1e7}.alert-secondary .alert-link{color:#585f66}.alert-success{color:#217455;background-color:#d3f1e4;border-color:#c1ebd9}.alert-success hr{border-top-color:#aee5cd}.alert-success .alert-link{color:#164c38}.alert-info{color:#335282;background-color:#d9e4f5;border-color:#cad9f2}.alert-info hr{border-top-color:#b6caed}.alert-info .alert-link{color:#253b5d}.alert-warning{color:#836941;background-color:#f8eddc;border-color:#f5e6ce}.alert-warning hr{border-top-color:#f1dbb9}.alert-warning .alert-link{color:#614e30}.alert-danger{color:#8a3f43;background-color:#fbdddd;border-color:#f9cfcf}.alert-danger hr{border-top-color:#f6b8b8}.alert-danger .alert-link{color:#672f32}.alert-light{color:#919498;background-color:#fdfdfe;border-color:#fdfdfd}.alert-light hr{border-top-color:#f0f0f0}.alert-light .alert-link{color:#777a7f}.alert-dark{color:#22292f;background-color:#d3d4d5;border-color:#c1c3c5}.alert-dark hr{border-top-color:#b4b6b9}.alert-dark .alert-link{color:#0d0f11}@-webkit-keyframes progress-bar-stripes{0%{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{0%{background-position:1rem 0}to{background-position:0 0}}.progress{display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#ededed;border-radius:.5rem}.progress-bar{display:flex;flex-direction:column;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#4e9876;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.media{display:flex;align-items:flex-start}.media-body{flex:1}.list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#4e5154;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#4e5154;text-decoration:none;background-color:#babfc7}.list-group-item-action:active{color:#626262;background-color:#ededed}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(34,41,47,.125)}.list-group-item:first-child{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.5rem;border-bottom-left-radius:.5rem}.list-group-item.disabled,.list-group-item:disabled{color:#b8c2cc;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#4e9876;border-color:#4e9876}.list-group-horizontal{flex-direction:row}.list-group-horizontal .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal .list-group-item:first-child{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem;border-top-right-radius:0}.list-group-horizontal .list-group-item:last-child{margin-right:0;border-top-right-radius:.5rem;border-bottom-right-radius:.5rem;border-bottom-left-radius:0}@media (min-width:576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-sm .list-group-item:first-child{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem;border-top-right-radius:0}.list-group-horizontal-sm .list-group-item:last-child{margin-right:0;border-top-right-radius:.5rem;border-bottom-right-radius:.5rem;border-bottom-left-radius:0}}@media (min-width:768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-md .list-group-item:first-child{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem;border-top-right-radius:0}.list-group-horizontal-md .list-group-item:last-child{margin-right:0;border-top-right-radius:.5rem;border-bottom-right-radius:.5rem;border-bottom-left-radius:0}}@media (min-width:992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-lg .list-group-item:first-child{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem;border-top-right-radius:0}.list-group-horizontal-lg .list-group-item:last-child{margin-right:0;border-top-right-radius:.5rem;border-bottom-right-radius:.5rem;border-bottom-left-radius:0}}@media (min-width:1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-xl .list-group-item:first-child{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem;border-top-right-radius:0}.list-group-horizontal-xl .list-group-item:last-child{margin-right:0;border-top-right-radius:.5rem;border-bottom-right-radius:.5rem;border-bottom-left-radius:0}}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush .list-group-item:last-child{margin-bottom:-1px}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{margin-bottom:0;border-bottom:0}.list-group-item-primary{color:#396354;background-color:#cde2d9}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#396354;background-color:#bdd9cd}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#396354;border-color:#396354}.list-group-item-secondary{color:#707981;background-color:#ebeef1}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#707981;background-color:#dce1e7}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#707981;border-color:#707981}.list-group-item-success{color:#217455;background-color:#c1ebd9}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#217455;background-color:#aee5cd}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#217455;border-color:#217455}.list-group-item-info{color:#335282;background-color:#cad9f2}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#335282;background-color:#b6caed}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#335282;border-color:#335282}.list-group-item-warning{color:#836941;background-color:#f5e6ce}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#836941;background-color:#f1dbb9}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#836941;border-color:#836941}.list-group-item-danger{color:#8a3f43;background-color:#f9cfcf}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#8a3f43;background-color:#f6b8b8}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#8a3f43;border-color:#8a3f43}.list-group-item-light{color:#919498;background-color:#fdfdfd}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#919498;background-color:#f0f0f0}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#919498;border-color:#919498}.list-group-item-dark{color:#22292f;background-color:#c1c3c5}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#22292f;background-color:#b4b6b9}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#22292f;border-color:#22292f}.close,.mailbox-attachment-close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#22292f;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover,.mailbox-attachment-close:hover{color:#22292f;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover,.mailbox-attachment-close:not(:disabled):not(.disabled):focus,.mailbox-attachment-close:not(:disabled):not(.disabled):hover{opacity:.75}button.close,button.mailbox-attachment-close{padding:0;background-color:transparent;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}a.close.disabled,a.disabled.mailbox-attachment-close{pointer-events:none}.toast{max-width:350px;overflow:hidden;font-size:.875rem;background-color:hsla(0,0%,100%,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(34,41,47,.1);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:flex;align-items:center;padding:.25rem .75rem;color:#b8c2cc;background-color:hsla(0,0%,100%,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translateY(-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal-dialog-scrollable{display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered:before{display:block;height:calc(100vh - 1rem);content:""}.modal-dialog-centered.modal-dialog-scrollable{flex-direction:column;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable:before{content:none}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(34,41,47,.2);border-radius:.6rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#22292f}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;align-items:flex-start;justify-content:space-between;padding:1rem;border-bottom:1px solid #ededed;border-top-left-radius:.6rem;border-top-right-radius:.6rem}.modal-header .close,.modal-header .mailbox-attachment-close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.45}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;align-items:center;justify-content:flex-end;padding:1rem;border-top:1px solid #ededed;border-bottom-right-radius:.6rem;border-bottom-left-radius:.6rem}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered:before{height:calc(100vh - 3.5rem)}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:Montserrat,Helvetica,Arial,serif;font-style:normal;font-weight:400;line-height:1.45;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:1rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow:before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow:before,.bs-tooltip-top .arrow:before{top:0;border-width:.4rem .4rem 0;border-top-color:#22292f}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow:before,.bs-tooltip-right .arrow:before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#22292f}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow:before,.bs-tooltip-bottom .arrow:before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#22292f}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow:before,.bs-tooltip-left .arrow:before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#22292f}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#22292f;border-radius:.5rem}.popover{top:0;left:0;z-index:1060;max-width:276px;font-family:Montserrat,Helvetica,Arial,serif;font-style:normal;font-weight:400;line-height:1.45;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:1rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(34,41,47,.2);border-radius:.6rem}.popover,.popover .arrow{position:absolute;display:block}.popover .arrow{width:1rem;height:.5rem;margin:0 .6rem}.popover .arrow:after,.popover .arrow:before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc(-.5rem + -1px)}.bs-popover-auto[x-placement^=top]>.arrow:before,.bs-popover-top>.arrow:before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(34,41,47,.25)}.bs-popover-auto[x-placement^=top]>.arrow:after,.bs-popover-top>.arrow:after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc(-.5rem + -1px);width:.5rem;height:1rem;margin:.6rem 0}.bs-popover-auto[x-placement^=right]>.arrow:before,.bs-popover-right>.arrow:before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(34,41,47,.25)}.bs-popover-auto[x-placement^=right]>.arrow:after,.bs-popover-right>.arrow:after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc(-.5rem + -1px)}.bs-popover-auto[x-placement^=bottom]>.arrow:before,.bs-popover-bottom>.arrow:before{top:0;border-width:0 .5rem .5rem;border-bottom-color:rgba(34,41,47,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow:after,.bs-popover-bottom>.arrow:after{top:1px;border-width:0 .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header:before,.bs-popover-bottom .popover-header:before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc(-.5rem + -1px);width:.5rem;height:1rem;margin:.6rem 0}.bs-popover-auto[x-placement^=left]>.arrow:before,.bs-popover-left>.arrow:before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(34,41,47,.25)}.bs-popover-auto[x-placement^=left]>.arrow:after,.bs-popover-left>.arrow:after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;color:#2c2c2c;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.6rem - 1px);border-top-right-radius:calc(.6rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#626262}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner:after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:no-repeat 50%/100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3E%3C/svg%3E")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:flex;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@-webkit-keyframes spinner-border{to{transform:rotate(1turn)}}@keyframes spinner-border{to{transform:rotate(1turn)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid;border-right:.25em solid transparent;border-radius:50%;-webkit-animation:spinner-border .75s linear infinite;animation:spinner-border .75s linear infinite}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1}}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:spinner-grow .75s linear infinite;animation:spinner-grow .75s linear infinite}.spinner-grow-sm{width:1rem;height:1rem}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#3d765c!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#9aa9b7!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#198e5c!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#2d5fb1!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d28d29!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#e42728!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dadae3!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#0d0f11!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #ededed!important}.border-top{border-top:1px solid #ededed!important}.border-right{border-right:1px solid #ededed!important}.border-bottom{border-bottom:1px solid #ededed!important}.border-left{border-left:1px solid #ededed!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#4e9876!important}.border-secondary{border-color:#b8c2cc!important}.border-success{border-color:#21b978!important}.border-info{border-color:#4277cf!important}.border-warning{border-color:#dda451!important}.border-danger{border-color:#ea5455!important}.border-light{border-color:#f7f7f9!important}.border-dark{border-color:#22292f!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.25rem!important}.rounded{border-radius:.5rem!important}.rounded-top{border-top-left-radius:.5rem!important}.rounded-right,.rounded-top{border-top-right-radius:.5rem!important}.rounded-bottom,.rounded-right{border-bottom-right-radius:.5rem!important}.rounded-bottom,.rounded-left{border-bottom-left-radius:.5rem!important}.rounded-left{border-top-left-radius:.5rem!important}.rounded-lg{border-radius:.6rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix:after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive:before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9:before{padding-top:42.8571428571%}.embed-responsive-16by9:before{padding-top:56.25%}.embed-responsive-4by3:before{padding-top:75%}.embed-responsive-1by1:before{padding-top:100%}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-fill{flex:1 1 auto!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}@media (min-width:576px){.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}}@media (min-width:768px){.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{top:0}.fixed-footer .footer,.fixed-top{position:fixed;right:0;left:0;z-index:1030}.fixed-footer .footer{bottom:0}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(34,41,47,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(34,41,47,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(34,41,47,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.stretched-link:after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:transparent}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:1rem!important}.mt-1,.my-1{margin-top:1rem!important}.mr-1,.mx-1{margin-right:1rem!important}.mb-1,.my-1{margin-bottom:1rem!important}.ml-1,.mx-1{margin-left:1rem!important}.m-2{margin:1.5rem!important}.mt-2,.my-2{margin-top:1.5rem!important}.mr-2,.mx-2{margin-right:1.5rem!important}.mb-2,.my-2{margin-bottom:1.5rem!important}.ml-2,.mx-2{margin-left:1.5rem!important}.m-3{margin:3rem!important}.mt-3,.my-3{margin-top:3rem!important}.mr-3,.mx-3{margin-right:3rem!important}.mb-3,.my-3{margin-bottom:3rem!important}.ml-3,.mx-3{margin-left:3rem!important}.m-4{margin:3.5rem!important}.mt-4,.my-4{margin-top:3.5rem!important}.mr-4,.mx-4{margin-right:3.5rem!important}.mb-4,.my-4{margin-bottom:3.5rem!important}.ml-4,.mx-4{margin-left:3.5rem!important}.m-5{margin:4rem!important}.mt-5,.my-5{margin-top:4rem!important}.mr-5,.mx-5{margin-right:4rem!important}.mb-5,.my-5{margin-bottom:4rem!important}.ml-5,.mx-5{margin-left:4rem!important}.m-25{margin:.25rem!important}.mt-25,.my-25{margin-top:.25rem!important}.mr-25,.mx-25{margin-right:.25rem!important}.mb-25,.my-25{margin-bottom:.25rem!important}.ml-25,.mx-25{margin-left:.25rem!important}.m-50{margin:.5rem!important}.mt-50,.my-50{margin-top:.5rem!important}.mr-50,.mx-50{margin-right:.5rem!important}.mb-50,.my-50{margin-bottom:.5rem!important}.ml-50,.mx-50{margin-left:.5rem!important}.m-75{margin:.75rem!important}.mt-75,.my-75{margin-top:.75rem!important}.mr-75,.mx-75{margin-right:.75rem!important}.mb-75,.my-75{margin-bottom:.75rem!important}.ml-75,.mx-75{margin-left:.75rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:1rem!important}.pt-1,.py-1{padding-top:1rem!important}.pr-1,.px-1{padding-right:1rem!important}.pb-1,.py-1{padding-bottom:1rem!important}.pl-1,.px-1{padding-left:1rem!important}.p-2{padding:1.5rem!important}.pt-2,.py-2{padding-top:1.5rem!important}.pr-2,.px-2{padding-right:1.5rem!important}.pb-2,.py-2{padding-bottom:1.5rem!important}.pl-2,.px-2{padding-left:1.5rem!important}.p-3{padding:3rem!important}.pt-3,.py-3{padding-top:3rem!important}.pr-3,.px-3{padding-right:3rem!important}.pb-3,.py-3{padding-bottom:3rem!important}.pl-3,.px-3{padding-left:3rem!important}.p-4{padding:3.5rem!important}.pt-4,.py-4{padding-top:3.5rem!important}.pr-4,.px-4{padding-right:3.5rem!important}.pb-4,.py-4{padding-bottom:3.5rem!important}.pl-4,.px-4{padding-left:3.5rem!important}.p-5{padding:4rem!important}.pt-5,.py-5{padding-top:4rem!important}.pr-5,.px-5{padding-right:4rem!important}.pb-5,.py-5{padding-bottom:4rem!important}.pl-5,.px-5{padding-left:4rem!important}.p-25{padding:.25rem!important}.pt-25,.py-25{padding-top:.25rem!important}.pr-25,.px-25{padding-right:.25rem!important}.pb-25,.py-25{padding-bottom:.25rem!important}.pl-25,.px-25{padding-left:.25rem!important}.p-50{padding:.5rem!important}.pt-50,.py-50{padding-top:.5rem!important}.pr-50,.px-50{padding-right:.5rem!important}.pb-50,.py-50{padding-bottom:.5rem!important}.pl-50,.px-50{padding-left:.5rem!important}.p-75{padding:.75rem!important}.pt-75,.py-75{padding-top:.75rem!important}.pr-75,.px-75{padding-right:.75rem!important}.pb-75,.py-75{padding-bottom:.75rem!important}.pl-75,.px-75{padding-left:.75rem!important}.m-n1{margin:-1rem!important}.mt-n1,.my-n1{margin-top:-1rem!important}.mr-n1,.mx-n1{margin-right:-1rem!important}.mb-n1,.my-n1{margin-bottom:-1rem!important}.ml-n1,.mx-n1{margin-left:-1rem!important}.m-n2{margin:-1.5rem!important}.mt-n2,.my-n2{margin-top:-1.5rem!important}.mr-n2,.mx-n2{margin-right:-1.5rem!important}.mb-n2,.my-n2{margin-bottom:-1.5rem!important}.ml-n2,.mx-n2{margin-left:-1.5rem!important}.m-n3{margin:-3rem!important}.mt-n3,.my-n3{margin-top:-3rem!important}.mr-n3,.mx-n3{margin-right:-3rem!important}.mb-n3,.my-n3{margin-bottom:-3rem!important}.ml-n3,.mx-n3{margin-left:-3rem!important}.m-n4{margin:-3.5rem!important}.mt-n4,.my-n4{margin-top:-3.5rem!important}.mr-n4,.mx-n4{margin-right:-3.5rem!important}.mb-n4,.my-n4{margin-bottom:-3.5rem!important}.ml-n4,.mx-n4{margin-left:-3.5rem!important}.m-n5{margin:-4rem!important}.mt-n5,.my-n5{margin-top:-4rem!important}.mr-n5,.mx-n5{margin-right:-4rem!important}.mb-n5,.my-n5{margin-bottom:-4rem!important}.ml-n5,.mx-n5{margin-left:-4rem!important}.m-n25{margin:-.25rem!important}.mt-n25,.my-n25{margin-top:-.25rem!important}.mr-n25,.mx-n25{margin-right:-.25rem!important}.mb-n25,.my-n25{margin-bottom:-.25rem!important}.ml-n25,.mx-n25{margin-left:-.25rem!important}.m-n50{margin:-.5rem!important}.mt-n50,.my-n50{margin-top:-.5rem!important}.mr-n50,.mx-n50{margin-right:-.5rem!important}.mb-n50,.my-n50{margin-bottom:-.5rem!important}.ml-n50,.mx-n50{margin-left:-.5rem!important}.m-n75{margin:-.75rem!important}.mt-n75,.my-n75{margin-top:-.75rem!important}.mr-n75,.mx-n75{margin-right:-.75rem!important}.mb-n75,.my-n75{margin-bottom:-.75rem!important}.ml-n75,.mx-n75{margin-left:-.75rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:1rem!important}.mt-sm-1,.my-sm-1{margin-top:1rem!important}.mr-sm-1,.mx-sm-1{margin-right:1rem!important}.mb-sm-1,.my-sm-1{margin-bottom:1rem!important}.ml-sm-1,.mx-sm-1{margin-left:1rem!important}.m-sm-2{margin:1.5rem!important}.mt-sm-2,.my-sm-2{margin-top:1.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:1.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:1.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:1.5rem!important}.m-sm-3{margin:3rem!important}.mt-sm-3,.my-sm-3{margin-top:3rem!important}.mr-sm-3,.mx-sm-3{margin-right:3rem!important}.mb-sm-3,.my-sm-3{margin-bottom:3rem!important}.ml-sm-3,.mx-sm-3{margin-left:3rem!important}.m-sm-4{margin:3.5rem!important}.mt-sm-4,.my-sm-4{margin-top:3.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:3.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:3.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:3.5rem!important}.m-sm-5{margin:4rem!important}.mt-sm-5,.my-sm-5{margin-top:4rem!important}.mr-sm-5,.mx-sm-5{margin-right:4rem!important}.mb-sm-5,.my-sm-5{margin-bottom:4rem!important}.ml-sm-5,.mx-sm-5{margin-left:4rem!important}.m-sm-25{margin:.25rem!important}.mt-sm-25,.my-sm-25{margin-top:.25rem!important}.mr-sm-25,.mx-sm-25{margin-right:.25rem!important}.mb-sm-25,.my-sm-25{margin-bottom:.25rem!important}.ml-sm-25,.mx-sm-25{margin-left:.25rem!important}.m-sm-50{margin:.5rem!important}.mt-sm-50,.my-sm-50{margin-top:.5rem!important}.mr-sm-50,.mx-sm-50{margin-right:.5rem!important}.mb-sm-50,.my-sm-50{margin-bottom:.5rem!important}.ml-sm-50,.mx-sm-50{margin-left:.5rem!important}.m-sm-75{margin:.75rem!important}.mt-sm-75,.my-sm-75{margin-top:.75rem!important}.mr-sm-75,.mx-sm-75{margin-right:.75rem!important}.mb-sm-75,.my-sm-75{margin-bottom:.75rem!important}.ml-sm-75,.mx-sm-75{margin-left:.75rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:1rem!important}.pt-sm-1,.py-sm-1{padding-top:1rem!important}.pr-sm-1,.px-sm-1{padding-right:1rem!important}.pb-sm-1,.py-sm-1{padding-bottom:1rem!important}.pl-sm-1,.px-sm-1{padding-left:1rem!important}.p-sm-2{padding:1.5rem!important}.pt-sm-2,.py-sm-2{padding-top:1.5rem!important}.pr-sm-2,.px-sm-2{padding-right:1.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:1.5rem!important}.pl-sm-2,.px-sm-2{padding-left:1.5rem!important}.p-sm-3{padding:3rem!important}.pt-sm-3,.py-sm-3{padding-top:3rem!important}.pr-sm-3,.px-sm-3{padding-right:3rem!important}.pb-sm-3,.py-sm-3{padding-bottom:3rem!important}.pl-sm-3,.px-sm-3{padding-left:3rem!important}.p-sm-4{padding:3.5rem!important}.pt-sm-4,.py-sm-4{padding-top:3.5rem!important}.pr-sm-4,.px-sm-4{padding-right:3.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:3.5rem!important}.pl-sm-4,.px-sm-4{padding-left:3.5rem!important}.p-sm-5{padding:4rem!important}.pt-sm-5,.py-sm-5{padding-top:4rem!important}.pr-sm-5,.px-sm-5{padding-right:4rem!important}.pb-sm-5,.py-sm-5{padding-bottom:4rem!important}.pl-sm-5,.px-sm-5{padding-left:4rem!important}.p-sm-25{padding:.25rem!important}.pt-sm-25,.py-sm-25{padding-top:.25rem!important}.pr-sm-25,.px-sm-25{padding-right:.25rem!important}.pb-sm-25,.py-sm-25{padding-bottom:.25rem!important}.pl-sm-25,.px-sm-25{padding-left:.25rem!important}.p-sm-50{padding:.5rem!important}.pt-sm-50,.py-sm-50{padding-top:.5rem!important}.pr-sm-50,.px-sm-50{padding-right:.5rem!important}.pb-sm-50,.py-sm-50{padding-bottom:.5rem!important}.pl-sm-50,.px-sm-50{padding-left:.5rem!important}.p-sm-75{padding:.75rem!important}.pt-sm-75,.py-sm-75{padding-top:.75rem!important}.pr-sm-75,.px-sm-75{padding-right:.75rem!important}.pb-sm-75,.py-sm-75{padding-bottom:.75rem!important}.pl-sm-75,.px-sm-75{padding-left:.75rem!important}.m-sm-n1{margin:-1rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-1rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-1rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-1rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-1rem!important}.m-sm-n2{margin:-1.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-1.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-1.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-1.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-1.5rem!important}.m-sm-n3{margin:-3rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-3rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-3rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-3rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-3rem!important}.m-sm-n4{margin:-3.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-3.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-3.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-3.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-3.5rem!important}.m-sm-n5{margin:-4rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-4rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-4rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-4rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-4rem!important}.m-sm-n25{margin:-.25rem!important}.mt-sm-n25,.my-sm-n25{margin-top:-.25rem!important}.mr-sm-n25,.mx-sm-n25{margin-right:-.25rem!important}.mb-sm-n25,.my-sm-n25{margin-bottom:-.25rem!important}.ml-sm-n25,.mx-sm-n25{margin-left:-.25rem!important}.m-sm-n50{margin:-.5rem!important}.mt-sm-n50,.my-sm-n50{margin-top:-.5rem!important}.mr-sm-n50,.mx-sm-n50{margin-right:-.5rem!important}.mb-sm-n50,.my-sm-n50{margin-bottom:-.5rem!important}.ml-sm-n50,.mx-sm-n50{margin-left:-.5rem!important}.m-sm-n75{margin:-.75rem!important}.mt-sm-n75,.my-sm-n75{margin-top:-.75rem!important}.mr-sm-n75,.mx-sm-n75{margin-right:-.75rem!important}.mb-sm-n75,.my-sm-n75{margin-bottom:-.75rem!important}.ml-sm-n75,.mx-sm-n75{margin-left:-.75rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:1rem!important}.mt-md-1,.my-md-1{margin-top:1rem!important}.mr-md-1,.mx-md-1{margin-right:1rem!important}.mb-md-1,.my-md-1{margin-bottom:1rem!important}.ml-md-1,.mx-md-1{margin-left:1rem!important}.m-md-2{margin:1.5rem!important}.mt-md-2,.my-md-2{margin-top:1.5rem!important}.mr-md-2,.mx-md-2{margin-right:1.5rem!important}.mb-md-2,.my-md-2{margin-bottom:1.5rem!important}.ml-md-2,.mx-md-2{margin-left:1.5rem!important}.m-md-3{margin:3rem!important}.mt-md-3,.my-md-3{margin-top:3rem!important}.mr-md-3,.mx-md-3{margin-right:3rem!important}.mb-md-3,.my-md-3{margin-bottom:3rem!important}.ml-md-3,.mx-md-3{margin-left:3rem!important}.m-md-4{margin:3.5rem!important}.mt-md-4,.my-md-4{margin-top:3.5rem!important}.mr-md-4,.mx-md-4{margin-right:3.5rem!important}.mb-md-4,.my-md-4{margin-bottom:3.5rem!important}.ml-md-4,.mx-md-4{margin-left:3.5rem!important}.m-md-5{margin:4rem!important}.mt-md-5,.my-md-5{margin-top:4rem!important}.mr-md-5,.mx-md-5{margin-right:4rem!important}.mb-md-5,.my-md-5{margin-bottom:4rem!important}.ml-md-5,.mx-md-5{margin-left:4rem!important}.m-md-25{margin:.25rem!important}.mt-md-25,.my-md-25{margin-top:.25rem!important}.mr-md-25,.mx-md-25{margin-right:.25rem!important}.mb-md-25,.my-md-25{margin-bottom:.25rem!important}.ml-md-25,.mx-md-25{margin-left:.25rem!important}.m-md-50{margin:.5rem!important}.mt-md-50,.my-md-50{margin-top:.5rem!important}.mr-md-50,.mx-md-50{margin-right:.5rem!important}.mb-md-50,.my-md-50{margin-bottom:.5rem!important}.ml-md-50,.mx-md-50{margin-left:.5rem!important}.m-md-75{margin:.75rem!important}.mt-md-75,.my-md-75{margin-top:.75rem!important}.mr-md-75,.mx-md-75{margin-right:.75rem!important}.mb-md-75,.my-md-75{margin-bottom:.75rem!important}.ml-md-75,.mx-md-75{margin-left:.75rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:1rem!important}.pt-md-1,.py-md-1{padding-top:1rem!important}.pr-md-1,.px-md-1{padding-right:1rem!important}.pb-md-1,.py-md-1{padding-bottom:1rem!important}.pl-md-1,.px-md-1{padding-left:1rem!important}.p-md-2{padding:1.5rem!important}.pt-md-2,.py-md-2{padding-top:1.5rem!important}.pr-md-2,.px-md-2{padding-right:1.5rem!important}.pb-md-2,.py-md-2{padding-bottom:1.5rem!important}.pl-md-2,.px-md-2{padding-left:1.5rem!important}.p-md-3{padding:3rem!important}.pt-md-3,.py-md-3{padding-top:3rem!important}.pr-md-3,.px-md-3{padding-right:3rem!important}.pb-md-3,.py-md-3{padding-bottom:3rem!important}.pl-md-3,.px-md-3{padding-left:3rem!important}.p-md-4{padding:3.5rem!important}.pt-md-4,.py-md-4{padding-top:3.5rem!important}.pr-md-4,.px-md-4{padding-right:3.5rem!important}.pb-md-4,.py-md-4{padding-bottom:3.5rem!important}.pl-md-4,.px-md-4{padding-left:3.5rem!important}.p-md-5{padding:4rem!important}.pt-md-5,.py-md-5{padding-top:4rem!important}.pr-md-5,.px-md-5{padding-right:4rem!important}.pb-md-5,.py-md-5{padding-bottom:4rem!important}.pl-md-5,.px-md-5{padding-left:4rem!important}.p-md-25{padding:.25rem!important}.pt-md-25,.py-md-25{padding-top:.25rem!important}.pr-md-25,.px-md-25{padding-right:.25rem!important}.pb-md-25,.py-md-25{padding-bottom:.25rem!important}.pl-md-25,.px-md-25{padding-left:.25rem!important}.p-md-50{padding:.5rem!important}.pt-md-50,.py-md-50{padding-top:.5rem!important}.pr-md-50,.px-md-50{padding-right:.5rem!important}.pb-md-50,.py-md-50{padding-bottom:.5rem!important}.pl-md-50,.px-md-50{padding-left:.5rem!important}.p-md-75{padding:.75rem!important}.pt-md-75,.py-md-75{padding-top:.75rem!important}.pr-md-75,.px-md-75{padding-right:.75rem!important}.pb-md-75,.py-md-75{padding-bottom:.75rem!important}.pl-md-75,.px-md-75{padding-left:.75rem!important}.m-md-n1{margin:-1rem!important}.mt-md-n1,.my-md-n1{margin-top:-1rem!important}.mr-md-n1,.mx-md-n1{margin-right:-1rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-1rem!important}.ml-md-n1,.mx-md-n1{margin-left:-1rem!important}.m-md-n2{margin:-1.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-1.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-1.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-1.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-1.5rem!important}.m-md-n3{margin:-3rem!important}.mt-md-n3,.my-md-n3{margin-top:-3rem!important}.mr-md-n3,.mx-md-n3{margin-right:-3rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-3rem!important}.ml-md-n3,.mx-md-n3{margin-left:-3rem!important}.m-md-n4{margin:-3.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-3.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-3.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-3.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-3.5rem!important}.m-md-n5{margin:-4rem!important}.mt-md-n5,.my-md-n5{margin-top:-4rem!important}.mr-md-n5,.mx-md-n5{margin-right:-4rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-4rem!important}.ml-md-n5,.mx-md-n5{margin-left:-4rem!important}.m-md-n25{margin:-.25rem!important}.mt-md-n25,.my-md-n25{margin-top:-.25rem!important}.mr-md-n25,.mx-md-n25{margin-right:-.25rem!important}.mb-md-n25,.my-md-n25{margin-bottom:-.25rem!important}.ml-md-n25,.mx-md-n25{margin-left:-.25rem!important}.m-md-n50{margin:-.5rem!important}.mt-md-n50,.my-md-n50{margin-top:-.5rem!important}.mr-md-n50,.mx-md-n50{margin-right:-.5rem!important}.mb-md-n50,.my-md-n50{margin-bottom:-.5rem!important}.ml-md-n50,.mx-md-n50{margin-left:-.5rem!important}.m-md-n75{margin:-.75rem!important}.mt-md-n75,.my-md-n75{margin-top:-.75rem!important}.mr-md-n75,.mx-md-n75{margin-right:-.75rem!important}.mb-md-n75,.my-md-n75{margin-bottom:-.75rem!important}.ml-md-n75,.mx-md-n75{margin-left:-.75rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:1rem!important}.mt-lg-1,.my-lg-1{margin-top:1rem!important}.mr-lg-1,.mx-lg-1{margin-right:1rem!important}.mb-lg-1,.my-lg-1{margin-bottom:1rem!important}.ml-lg-1,.mx-lg-1{margin-left:1rem!important}.m-lg-2{margin:1.5rem!important}.mt-lg-2,.my-lg-2{margin-top:1.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:1.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:1.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:1.5rem!important}.m-lg-3{margin:3rem!important}.mt-lg-3,.my-lg-3{margin-top:3rem!important}.mr-lg-3,.mx-lg-3{margin-right:3rem!important}.mb-lg-3,.my-lg-3{margin-bottom:3rem!important}.ml-lg-3,.mx-lg-3{margin-left:3rem!important}.m-lg-4{margin:3.5rem!important}.mt-lg-4,.my-lg-4{margin-top:3.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:3.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:3.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:3.5rem!important}.m-lg-5{margin:4rem!important}.mt-lg-5,.my-lg-5{margin-top:4rem!important}.mr-lg-5,.mx-lg-5{margin-right:4rem!important}.mb-lg-5,.my-lg-5{margin-bottom:4rem!important}.ml-lg-5,.mx-lg-5{margin-left:4rem!important}.m-lg-25{margin:.25rem!important}.mt-lg-25,.my-lg-25{margin-top:.25rem!important}.mr-lg-25,.mx-lg-25{margin-right:.25rem!important}.mb-lg-25,.my-lg-25{margin-bottom:.25rem!important}.ml-lg-25,.mx-lg-25{margin-left:.25rem!important}.m-lg-50{margin:.5rem!important}.mt-lg-50,.my-lg-50{margin-top:.5rem!important}.mr-lg-50,.mx-lg-50{margin-right:.5rem!important}.mb-lg-50,.my-lg-50{margin-bottom:.5rem!important}.ml-lg-50,.mx-lg-50{margin-left:.5rem!important}.m-lg-75{margin:.75rem!important}.mt-lg-75,.my-lg-75{margin-top:.75rem!important}.mr-lg-75,.mx-lg-75{margin-right:.75rem!important}.mb-lg-75,.my-lg-75{margin-bottom:.75rem!important}.ml-lg-75,.mx-lg-75{margin-left:.75rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:1rem!important}.pt-lg-1,.py-lg-1{padding-top:1rem!important}.pr-lg-1,.px-lg-1{padding-right:1rem!important}.pb-lg-1,.py-lg-1{padding-bottom:1rem!important}.pl-lg-1,.px-lg-1{padding-left:1rem!important}.p-lg-2{padding:1.5rem!important}.pt-lg-2,.py-lg-2{padding-top:1.5rem!important}.pr-lg-2,.px-lg-2{padding-right:1.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:1.5rem!important}.pl-lg-2,.px-lg-2{padding-left:1.5rem!important}.p-lg-3{padding:3rem!important}.pt-lg-3,.py-lg-3{padding-top:3rem!important}.pr-lg-3,.px-lg-3{padding-right:3rem!important}.pb-lg-3,.py-lg-3{padding-bottom:3rem!important}.pl-lg-3,.px-lg-3{padding-left:3rem!important}.p-lg-4{padding:3.5rem!important}.pt-lg-4,.py-lg-4{padding-top:3.5rem!important}.pr-lg-4,.px-lg-4{padding-right:3.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:3.5rem!important}.pl-lg-4,.px-lg-4{padding-left:3.5rem!important}.p-lg-5{padding:4rem!important}.pt-lg-5,.py-lg-5{padding-top:4rem!important}.pr-lg-5,.px-lg-5{padding-right:4rem!important}.pb-lg-5,.py-lg-5{padding-bottom:4rem!important}.pl-lg-5,.px-lg-5{padding-left:4rem!important}.p-lg-25{padding:.25rem!important}.pt-lg-25,.py-lg-25{padding-top:.25rem!important}.pr-lg-25,.px-lg-25{padding-right:.25rem!important}.pb-lg-25,.py-lg-25{padding-bottom:.25rem!important}.pl-lg-25,.px-lg-25{padding-left:.25rem!important}.p-lg-50{padding:.5rem!important}.pt-lg-50,.py-lg-50{padding-top:.5rem!important}.pr-lg-50,.px-lg-50{padding-right:.5rem!important}.pb-lg-50,.py-lg-50{padding-bottom:.5rem!important}.pl-lg-50,.px-lg-50{padding-left:.5rem!important}.p-lg-75{padding:.75rem!important}.pt-lg-75,.py-lg-75{padding-top:.75rem!important}.pr-lg-75,.px-lg-75{padding-right:.75rem!important}.pb-lg-75,.py-lg-75{padding-bottom:.75rem!important}.pl-lg-75,.px-lg-75{padding-left:.75rem!important}.m-lg-n1{margin:-1rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-1rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-1rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-1rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-1rem!important}.m-lg-n2{margin:-1.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-1.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-1.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-1.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-1.5rem!important}.m-lg-n3{margin:-3rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-3rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-3rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-3rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-3rem!important}.m-lg-n4{margin:-3.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-3.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-3.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-3.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-3.5rem!important}.m-lg-n5{margin:-4rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-4rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-4rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-4rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-4rem!important}.m-lg-n25{margin:-.25rem!important}.mt-lg-n25,.my-lg-n25{margin-top:-.25rem!important}.mr-lg-n25,.mx-lg-n25{margin-right:-.25rem!important}.mb-lg-n25,.my-lg-n25{margin-bottom:-.25rem!important}.ml-lg-n25,.mx-lg-n25{margin-left:-.25rem!important}.m-lg-n50{margin:-.5rem!important}.mt-lg-n50,.my-lg-n50{margin-top:-.5rem!important}.mr-lg-n50,.mx-lg-n50{margin-right:-.5rem!important}.mb-lg-n50,.my-lg-n50{margin-bottom:-.5rem!important}.ml-lg-n50,.mx-lg-n50{margin-left:-.5rem!important}.m-lg-n75{margin:-.75rem!important}.mt-lg-n75,.my-lg-n75{margin-top:-.75rem!important}.mr-lg-n75,.mx-lg-n75{margin-right:-.75rem!important}.mb-lg-n75,.my-lg-n75{margin-bottom:-.75rem!important}.ml-lg-n75,.mx-lg-n75{margin-left:-.75rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:1rem!important}.mt-xl-1,.my-xl-1{margin-top:1rem!important}.mr-xl-1,.mx-xl-1{margin-right:1rem!important}.mb-xl-1,.my-xl-1{margin-bottom:1rem!important}.ml-xl-1,.mx-xl-1{margin-left:1rem!important}.m-xl-2{margin:1.5rem!important}.mt-xl-2,.my-xl-2{margin-top:1.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:1.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:1.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:1.5rem!important}.m-xl-3{margin:3rem!important}.mt-xl-3,.my-xl-3{margin-top:3rem!important}.mr-xl-3,.mx-xl-3{margin-right:3rem!important}.mb-xl-3,.my-xl-3{margin-bottom:3rem!important}.ml-xl-3,.mx-xl-3{margin-left:3rem!important}.m-xl-4{margin:3.5rem!important}.mt-xl-4,.my-xl-4{margin-top:3.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:3.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:3.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:3.5rem!important}.m-xl-5{margin:4rem!important}.mt-xl-5,.my-xl-5{margin-top:4rem!important}.mr-xl-5,.mx-xl-5{margin-right:4rem!important}.mb-xl-5,.my-xl-5{margin-bottom:4rem!important}.ml-xl-5,.mx-xl-5{margin-left:4rem!important}.m-xl-25{margin:.25rem!important}.mt-xl-25,.my-xl-25{margin-top:.25rem!important}.mr-xl-25,.mx-xl-25{margin-right:.25rem!important}.mb-xl-25,.my-xl-25{margin-bottom:.25rem!important}.ml-xl-25,.mx-xl-25{margin-left:.25rem!important}.m-xl-50{margin:.5rem!important}.mt-xl-50,.my-xl-50{margin-top:.5rem!important}.mr-xl-50,.mx-xl-50{margin-right:.5rem!important}.mb-xl-50,.my-xl-50{margin-bottom:.5rem!important}.ml-xl-50,.mx-xl-50{margin-left:.5rem!important}.m-xl-75{margin:.75rem!important}.mt-xl-75,.my-xl-75{margin-top:.75rem!important}.mr-xl-75,.mx-xl-75{margin-right:.75rem!important}.mb-xl-75,.my-xl-75{margin-bottom:.75rem!important}.ml-xl-75,.mx-xl-75{margin-left:.75rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:1rem!important}.pt-xl-1,.py-xl-1{padding-top:1rem!important}.pr-xl-1,.px-xl-1{padding-right:1rem!important}.pb-xl-1,.py-xl-1{padding-bottom:1rem!important}.pl-xl-1,.px-xl-1{padding-left:1rem!important}.p-xl-2{padding:1.5rem!important}.pt-xl-2,.py-xl-2{padding-top:1.5rem!important}.pr-xl-2,.px-xl-2{padding-right:1.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:1.5rem!important}.pl-xl-2,.px-xl-2{padding-left:1.5rem!important}.p-xl-3{padding:3rem!important}.pt-xl-3,.py-xl-3{padding-top:3rem!important}.pr-xl-3,.px-xl-3{padding-right:3rem!important}.pb-xl-3,.py-xl-3{padding-bottom:3rem!important}.pl-xl-3,.px-xl-3{padding-left:3rem!important}.p-xl-4{padding:3.5rem!important}.pt-xl-4,.py-xl-4{padding-top:3.5rem!important}.pr-xl-4,.px-xl-4{padding-right:3.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:3.5rem!important}.pl-xl-4,.px-xl-4{padding-left:3.5rem!important}.p-xl-5{padding:4rem!important}.pt-xl-5,.py-xl-5{padding-top:4rem!important}.pr-xl-5,.px-xl-5{padding-right:4rem!important}.pb-xl-5,.py-xl-5{padding-bottom:4rem!important}.pl-xl-5,.px-xl-5{padding-left:4rem!important}.p-xl-25{padding:.25rem!important}.pt-xl-25,.py-xl-25{padding-top:.25rem!important}.pr-xl-25,.px-xl-25{padding-right:.25rem!important}.pb-xl-25,.py-xl-25{padding-bottom:.25rem!important}.pl-xl-25,.px-xl-25{padding-left:.25rem!important}.p-xl-50{padding:.5rem!important}.pt-xl-50,.py-xl-50{padding-top:.5rem!important}.pr-xl-50,.px-xl-50{padding-right:.5rem!important}.pb-xl-50,.py-xl-50{padding-bottom:.5rem!important}.pl-xl-50,.px-xl-50{padding-left:.5rem!important}.p-xl-75{padding:.75rem!important}.pt-xl-75,.py-xl-75{padding-top:.75rem!important}.pr-xl-75,.px-xl-75{padding-right:.75rem!important}.pb-xl-75,.py-xl-75{padding-bottom:.75rem!important}.pl-xl-75,.px-xl-75{padding-left:.75rem!important}.m-xl-n1{margin:-1rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-1rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-1rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-1rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-1rem!important}.m-xl-n2{margin:-1.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-1.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-1.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-1.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-1.5rem!important}.m-xl-n3{margin:-3rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-3rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-3rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-3rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-3rem!important}.m-xl-n4{margin:-3.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-3.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-3.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-3.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-3.5rem!important}.m-xl-n5{margin:-4rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-4rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-4rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-4rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-4rem!important}.m-xl-n25{margin:-.25rem!important}.mt-xl-n25,.my-xl-n25{margin-top:-.25rem!important}.mr-xl-n25,.mx-xl-n25{margin-right:-.25rem!important}.mb-xl-n25,.my-xl-n25{margin-bottom:-.25rem!important}.ml-xl-n25,.mx-xl-n25{margin-left:-.25rem!important}.m-xl-n50{margin:-.5rem!important}.mt-xl-n50,.my-xl-n50{margin-top:-.5rem!important}.mr-xl-n50,.mx-xl-n50{margin-right:-.5rem!important}.mb-xl-n50,.my-xl-n50{margin-bottom:-.5rem!important}.ml-xl-n50,.mx-xl-n50{margin-left:-.5rem!important}.m-xl-n75{margin:-.75rem!important}.mt-xl-n75,.my-xl-n75{margin-top:-.75rem!important}.mr-xl-n75,.mx-xl-n75{margin-right:-.75rem!important}.mb-xl-n75,.my-xl-n75{margin-bottom:-.75rem!important}.ml-xl-n75,.mx-xl-n75{margin-left:-.75rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-monospace{font-family:Montserrat,Helvetica,Arial,serif!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#4e9876!important}a.text-primary:focus,a.text-primary:hover{color:#34654f!important}.text-secondary{color:#b8c2cc!important}a.text-secondary:focus,a.text-secondary:hover{color:#8b9cac!important}.text-success{color:#21b978!important}a.text-success:focus,a.text-success:hover{color:#15784e!important}.text-info{color:#4277cf!important}a.text-info:focus,a.text-info:hover{color:#28549d!important}.text-warning{color:#dda451!important}a.text-warning:focus,a.text-warning:hover{color:#bd7f25!important}.text-danger{color:#ea5455!important}a.text-danger:focus,a.text-danger:hover{color:#d71a1c!important}.text-light{color:#f7f7f9!important}a.text-light:focus,a.text-light:hover{color:#cbcbd8!important}.text-dark{color:#22292f!important}a.text-dark:focus,a.text-dark:hover{color:#020203!important}.text-body{color:#626262!important}.text-muted{color:#b8c2cc!important}.text-black-50{color:rgba(34,41,47,.5)!important}.text-white-50{color:hsla(0,0%,100%,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;overflow-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,:after,:before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]:after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}.container,body{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #22292f}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dae1e7!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#eff1f7}.table .thead-dark th{color:inherit;border-color:#eff1f7}}code{padding:.1rem .4rem;font-size:90%;color:#ff8acc;background-color:#eee;border-radius:.25rem}pre{background-color:#f7f7f9}pre code{background-color:transparent!important}.form-control::-moz-placeholder{font-size:.85rem;color:rgba(34,41,47,.4);-moz-transition:all .2s ease;transition:all .2s ease}.form-control:-ms-input-placeholder{font-size:.85rem;color:rgba(34,41,47,.4);-ms-transition:all .2s ease;transition:all .2s ease}.form-control::placeholder{font-size:.85rem;color:rgba(34,41,47,.4);transition:all .2s ease}.form-control:-ms-input-placeholder{color:#abb6d5}.form-control:focus::-moz-placeholder{transform:translate(5px);-moz-transition:all .2s ease;transition:all .2s ease}.form-control:focus:-ms-input-placeholder{transform:translate(5px);-ms-transition:all .2s ease;transition:all .2s ease}.form-control:focus::placeholder{transform:translate(5px);transition:all .2s ease}.form-control:focus~.form-control-position i{color:#4e9876}label{color:#2b3656;font-size:.85rem;margin-bottom:0;padding-left:.2rem}textarea.form-control{line-height:1.6rem;font-size:1rem}.form-group{margin-bottom:1.5rem}.form-control{border:1px solid #c6cde3;color:#3c4b78}.form-section{color:#b8c2cc;line-height:3rem;margin-bottom:20px;border-bottom:1px solid #b8c2cc}.form-section i{font-size:20px;margin-left:5px;margin-right:10px}.form-actions{border-top:1px solid #cdd3e6;padding:20px 0;margin-top:20px}.form-actions.filled{background-color:#eff1f7}.form-actions.center{text-align:center}.form-actions.right{text-align:right}.form-actions.top{border-top:0;border-bottom:1px solid #cdd3e6;margin-top:0;margin-bottom:20px}@media (max-width:767.98px){.form-actions .buttons-group{float:left!important;margin-bottom:10px}}@media (min-width:576px){.form-horizontal .form-group .label-control{text-align:right}}.form-control.form-control-lg{padding:1rem}.form-control.form-control-lg::-moz-placeholder{font-size:1.25rem}.form-control.form-control-lg:-ms-input-placeholder{font-size:1.25rem}.form-control.form-control-lg::placeholder{font-size:1.25rem}.form-control.form-control-sm{padding:.6rem}.form-control.form-control-sm::-moz-placeholder{font-size:.7rem}.form-control.form-control-sm:-ms-input-placeholder{font-size:.7rem}.form-control.form-control-sm::placeholder{font-size:.7rem}.custom-file-label{padding:.4rem .7rem}.custom-file-label:after{padding:.4rem .7rem;height:auto}select.form-control:not([multiple=multiple]){background-position:calc(100% - 12px) 13px,calc(100% - 20px) 13px,100% 0;background-size:12px 12px,10px 10px;background-repeat:no-repeat;-webkit-appearance:none;-moz-appearance:none;padding-right:1.5rem}.custom-select{-moz-appearance:none;-webkit-appearance:none}.input-group-addon{background-color:#eceff1;border-color:#babfc7}.custom-control-label:after,.custom-control-label:before{width:1.143rem;height:1.143rem;top:.08rem}.custom-control-input:not(:disabled):active~.custom-control-label:before{background-color:#4e9876;border-color:#4e9876}.form-label-group{position:relative;margin-bottom:1.5rem}.form-label-group .form-control-lg~label{font-size:1.25rem;padding:1rem}.form-label-group .form-control-sm~label{font-size:.7rem}.form-label-group>label{position:absolute;top:0;left:0;display:block;transition:all .25s ease-in-out;padding:.6rem;pointer-events:none;cursor:text;color:rgba(34,41,47,.4);font-size:.85rem;opacity:0}.form-label-group>input,.form-label-group textarea{padding:.6rem}.form-label-group>input:focus:not(:-moz-placeholder-shown)~label,.form-label-group>input:not(:active):not(:-moz-placeholder-shown)~label,.form-label-group textarea:focus:not(:-moz-placeholder-shown)~label,.form-label-group textarea:not(:active):not(:-moz-placeholder-shown)~label{color:#4e9876!important;-moz-transition:all .25s ease-in-out;transition:all .25s ease-in-out;opacity:1}.form-label-group>input:focus:not(:-ms-input-placeholder)~label,.form-label-group>input:not(:active):not(:-ms-input-placeholder)~label,.form-label-group textarea:focus:not(:-ms-input-placeholder)~label,.form-label-group textarea:not(:active):not(:-ms-input-placeholder)~label{color:#4e9876!important;-ms-transition:all .25s ease-in-out;transition:all .25s ease-in-out;opacity:1}.form-label-group>input:focus:not(:placeholder-shown)~label,.form-label-group>input:not(:active):not(:placeholder-shown)~label,.form-label-group textarea:focus:not(:placeholder-shown)~label,.form-label-group textarea:not(:active):not(:placeholder-shown)~label{color:#4e9876!important;transition:all .25s ease-in-out;opacity:1}.form-label-group>input:not(:focus):not(:-moz-placeholder-shown)~label,.form-label-group textarea:not(:focus):not(:-moz-placeholder-shown)~label{color:rgba(34,41,47,.4)!important}.form-label-group>input:not(:focus):not(:-ms-input-placeholder)~label,.form-label-group textarea:not(:focus):not(:-ms-input-placeholder)~label{color:rgba(34,41,47,.4)!important}.form-label-group>input:not(:focus):not(:placeholder-shown)~label,.form-label-group textarea:not(:focus):not(:placeholder-shown)~label{color:rgba(34,41,47,.4)!important}.form-label-group>input:not(:-moz-placeholder-shown)~label,.form-label-group textarea:not(:-moz-placeholder-shown)~label{padding:.25rem 0;font-size:.7rem;top:-20px;left:3px}.form-label-group>input:not(:-ms-input-placeholder)~label,.form-label-group textarea:not(:-ms-input-placeholder)~label{padding:.25rem 0;font-size:.7rem;top:-20px;left:3px}.form-label-group>input:not(:placeholder-shown)~label,.form-label-group textarea:not(:placeholder-shown)~label{padding:.25rem 0;font-size:.7rem;top:-20px;left:3px}.form-label-group.has-icon-left>label{left:36px}.vs-checkbox-con{position:relative;display:flex;align-items:center;justify-content:flex-start;margin:.25rem 0}.vs-checkbox-con input{position:absolute;width:100%;height:100%;opacity:0;z-index:200;cursor:pointer;top:0}.vs-checkbox-con input:checked~.vs-checkbox{transform:rotate(0deg);border-color:#4e9876}.vs-checkbox-con input:checked~.vs-checkbox .vs-checkbox--check{transform:translate(0);background-color:#4e9876}.vs-checkbox-con input:checked~.vs-checkbox .vs-checkbox--check .vs-icon{transform:translate(0);line-height:1.2;opacity:1}.vs-checkbox-con input:checked~.vs-checkbox.vs-checkbox-sm .vs-checkbox--check .vs-icon{font-size:.75rem}.vs-checkbox-con input:checked~.vs-checkbox.vs-checkbox-lg .vs-checkbox--check .vs-icon{font-size:1.2rem}.vs-checkbox-con input:active:checked+.vs-checkbox .vs-checkbox--check{transform:translate(3px);background-color:#4e9876}.vs-checkbox-con input:active:checked+.vs-checkbox .vs-checkbox--check .vs-icon{opacity:1;transform:translate(6px)}.vs-checkbox-con input:disabled{cursor:default;pointer-events:none}.vs-checkbox-con input:disabled+.vs-checkbox{cursor:default;opacity:.5}.vs-checkbox-con .vs-checkbox{cursor:pointer;position:relative;width:20px;height:20px;border:2px solid #b8c2cc;border-radius:2px;transform:rotate(-90deg);transition:all .2s ease;overflow:hidden;margin-right:.5rem}.vs-checkbox-con .vs-checkbox.vs-checkbox-sm{width:15px;height:15px}.vs-checkbox-con .vs-checkbox.vs-checkbox-lg{width:24px;height:24px}.vs-checkbox-con .vs-checkbox .vs-checkbox--check{width:100%;height:100%;position:absolute;left:0;transform:translate(100%);transform-origin:right;transition:all .2s ease;z-index:10}.vs-checkbox-con .vs-checkbox .vs-checkbox--check .vs-icon{display:flex;justify-content:center;align-items:center;color:#fff}.vs-radio-con{position:relative;display:flex;align-items:center;justify-content:flex-start;margin:.25rem 0}.vs-radio-con input{position:absolute;width:100%;height:100%;opacity:0;z-index:200;cursor:pointer}.vs-radio-con input:checked~.vs-radio{transform:rotate(0deg);outline:0}.vs-radio-con input:checked~.vs-radio .vs-radio--circle{background:#4e9876;box-shadow:0 3px 12px 0 rgba(78,152,118,.4);opacity:1;transform:scale(1)}.vs-radio-con input:checked~.vs-radio .vs-radio--border{opacity:0;transform:scale(.3)}.vs-radio-con input:disabled{cursor:default;pointer-events:none}.vs-radio-con input:disabled+.vs-radio{cursor:default;opacity:.5}.vs-radio-con input:active~.vs-radio{transform:scale(1.1)}.vs-radio-con .vs-radio{cursor:pointer;position:relative;width:18px;height:18px;transition:all .2s ease;margin-right:.5rem}.vs-radio-con .vs-radio.vs-radio-sm{width:13px;height:13px}.vs-radio-con .vs-radio.vs-radio-lg{width:22px;height:22px}.vs-radio-con .vs-radio .vs-radio--border,.vs-radio-con .vs-radio .vs-radio--circle{width:100%;height:100%;position:absolute;left:0;transition:all .25s ease;top:0;border-radius:50%}.vs-radio-con .vs-radio .vs-radio--border{background:transparent;border:2px solid #b8c2cc}.vs-radio-con .vs-radio .vs-radio--circle{opacity:0;transform:scale(.1)}.counter-value{background-color:#4e9876;color:#fff;padding:1px 6px;font-size:.6rem;border-radius:0 0 5px 5px;margin-right:1rem}.form-group.input-divider-left .form-control-position i{padding:.2rem .5rem;border-right:1px solid #c6cde3}.form-group.input-divider-right .form-control-position i{padding:.2rem .5rem;border-left:1px solid #c6cde3}.input-group-lg .form-control,.input-group-sm .form-control{padding:.7rem}.bootstrap-touchspin.input-group{width:8.4rem;align-items:center}.bootstrap-touchspin.input-group .form-control{padding:5px;height:auto;border:0;background-color:#eff1f7;border-radius:5px!important;text-align:center;font-weight:500}.bootstrap-touchspin.input-group .form-control:focus{z-index:1;box-shadow:none}.bootstrap-touchspin .bootstrap-touchspin-injected{margin:0!important}.bootstrap-touchspin .bootstrap-touchspin-injected .bootstrap-touchspin-down,.bootstrap-touchspin .bootstrap-touchspin-injected .bootstrap-touchspin-up{padding:0;min-width:22px;min-height:22px;border-radius:5px!important;position:relative}.bootstrap-touchspin .bootstrap-touchspin-injected .bootstrap-touchspin-down i,.bootstrap-touchspin .bootstrap-touchspin-injected .bootstrap-touchspin-up i{font-size:.8rem;position:relative;top:-1px}.bootstrap-touchspin .bootstrap-touchspin-injected .bootstrap-touchspin-down{left:12px}.bootstrap-touchspin .bootstrap-touchspin-injected .bootstrap-touchspin-up{right:12px}.bootstrap-touchspin.disabled-touchspin .bootstrap-touchspin-down,.bootstrap-touchspin.disabled-touchspin .bootstrap-touchspin-up{background-color:rgba(0,0,0,.5)!important;cursor:default;opacity:.5}.bootstrap-touchspin.input-group-lg{width:9.375rem}.bootstrap-touchspin.input-group-lg .touchspin.form-control{height:auto!important}.bootstrap-touchspin.input-group-lg .bootstrap-touchspin-down i,.bootstrap-touchspin.input-group-lg .bootstrap-touchspin-up i{font-size:1rem}.bootstrap-touchspin.input-group-sm{width:6.25rem}.bootstrap-touchspin.input-group-sm .touchspin.form-control{height:auto!important}.bootstrap-touchspin.input-group-sm .bootstrap-touchspin-injected .bootstrap-touchspin-down,.bootstrap-touchspin.input-group-sm .bootstrap-touchspin-injected .bootstrap-touchspin-up{min-width:16px;min-height:16px;padding-top:2.2px}.bootstrap-touchspin.input-group-sm .bootstrap-touchspin-injected .bootstrap-touchspin-down i,.bootstrap-touchspin.input-group-sm .bootstrap-touchspin-injected .bootstrap-touchspin-up i{font-size:.6rem}.btn.disabled-max-min{background-color:rgba(0,0,0,.5)!important;cursor:default}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none}.bootstrap-touchspin.input-group input[type=number]{-moz-appearance:textfield}@media (-ms-high-contrast:none),screen and (-ms-high-contrast:active){.form-label-group label{display:none}select.form-control:not([multiple=multiple]){background:none}.custom-file-label:after{padding:1.34rem .7rem 1.25rem}}.picker__input.form-control{background-color:#fff}.input-group .form-control{height:auto}.input-group .input-group-append .dropdown-toggle:after,.input-group .input-group-prepend .dropdown-toggle:after{left:0}.input-group .input-group-append .vs-checkbox,.input-group .input-group-append .vs-checkbox-con,.input-group .input-group-append .vs-radio,.input-group .input-group-append .vs-radio-con,.input-group .input-group-prepend .vs-checkbox,.input-group .input-group-prepend .vs-checkbox-con,.input-group .input-group-prepend .vs-radio,.input-group .input-group-prepend .vs-radio-con{margin:0}.input-group.input-group-lg .form-control::-moz-placeholder{font-size:1.25rem}.input-group.input-group-lg .form-control:-ms-input-placeholder{font-size:1.25rem}.input-group.input-group-lg .form-control::placeholder{font-size:1.25rem}.input-group.input-group-lg .input-group-append .btn,.input-group.input-group-lg .input-group-prepend .btn{line-height:1.3;font-size:1.3rem}.input-group.input-group-sm .form-control::-moz-placeholder{font-size:.7rem}.input-group.input-group-sm .form-control:-ms-input-placeholder{font-size:.7rem}.input-group.input-group-sm .form-control::placeholder{font-size:.7rem}.btn:disabled{cursor:default}.btn.btn-white{background-color:#fff;color:#626262}.btn.btn-white:active,.btn.btn-white:focus,.btn.btn-white:hover{color:#626262!important}.btn.btn-white.btn-primary{background-color:#4e9876}.btn[class*=bg-gradient-]:hover{box-shadow:0 8px 25px -8px #aaa}.btn.btn-secondary{color:#fff}.btn.btn-secondary:hover{box-shadow:0 8px 25px -8px #b8c2cc}.btn.btn-dark:hover{box-shadow:0 8px 25px -8px #22292f}.btn.btn-light:hover{box-shadow:0 8px 25px -8px #f7f7f9}.btn.btn-outline-dark,.btn.btn-outline-light,.btn.btn-outline-secondary{border:1px solid}.btn[class*=btn-outline-]{padding-top:calc(.9rem - 1px);padding-bottom:calc(.9rem - 1px)}.btn-group-sm>.btn[class*=btn-outline-],.btn[class*=btn-outline-].btn-sm{padding-top:calc(.5rem - 1px);padding-bottom:calc(.5rem - 1px)}.btn.btn-icon{padding:.715rem .736rem}.btn-group-sm>.btn.btn-icon,.btn.btn-sm.btn-icon{padding:.5rem}.btn-group-lg>.btn.btn-icon,.btn.btn-lg.btn-icon{padding:1rem}.btn.btn-round{border-radius:2rem}.btn.active,.btn.focus,.btn:active,.btn:focus{outline:none;box-shadow:none!important}.btn.btn-icon i{font-size:1.1rem}.btn-white:hover,.btn.btn-outline-white:hover{color:#22292f!important}[type=reset],[type=submit],button,html [type=button]{cursor:pointer}.waves-button-input{padding:unset}.dropdown.show .btn-outline-light.dropdown-toggle,.dropdown.show .btn-outline-warning.dropdown-toggle{color:#fff}.dropdown .btn:not(.btn-sm):not(.btn-lg),.dropdown .btn:not(.btn-sm):not(.btn-lg).dropdown-toggle{padding:.85rem 1.5rem}.dropdown .btn:not(.btn-sm):not(.btn-lg).btn-round,.dropdown .btn:not(.btn-sm):not(.btn-lg).dropdown-toggle.btn-round{border-radius:2rem}.dropdown .btn.dropdown-toggle.dropdown-toggle-split{padding:.85rem 1rem;border-left-color:hsla(0,0%,100%,.2)!important;border-top-left-radius:0;border-bottom-left-radius:0}.dropdown [class*=btn-outline-].dropdown-toggle.dropdown-toggle-split{border-left:0!important}.dropdown [class*=btn-outline-].dropdown-toggle.dropdown-toggle-split:active{color:#fff}.dropdown .dropdown-menu{border:1px solid rgba(86,86,86,.05);border-radius:5px;transform:scaleY(0);box-shadow:0 5px 25px rgba(86,86,86,.1);min-width:8rem}.dropdown .dropdown-menu:before{content:"";position:absolute;top:-1px;left:1.2rem;width:.75rem;height:.75rem;display:block;background:#fff;transform:rotate(45deg) translate(-7px);border-top:1px solid rgba(86,86,86,.1);border-left:1px solid rgba(86,86,86,.1);z-index:10;box-sizing:border-box}.dropdown .dropdown-menu.dropdown-menu-right:before{right:.6rem;left:auto}.dropdown .dropdown-menu .dropdown-header{padding:.714rem 1.428rem;margin-top:.714rem}.dropdown .dropdown-menu .dropdown-item{padding:.5rem 1rem;color:#626262;width:auto;cursor:pointer}.dropdown .dropdown-menu .dropdown-item:hover{background-color:#eff1f7;color:#4e9876}.dropdown .dropdown-menu .dropdown-item.active{color:#fff}.dropdown .dropdown-menu .dropdown-item:active{background-color:transparent;color:#626262}.dropdown i{margin-right:.5rem}.dropdown.no-arrow .dropdown-toggle:after{display:none}.dropdown.no-arrow .dropdown-toggle i{margin-right:0}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown .dropdown-menu .dropdown-item,.dropleft .dropdown-menu .dropdown-item,.dropright .dropdown-menu .dropdown-item,.dropup .dropdown-menu .dropdown-item{padding:.714rem 1.428rem}.show>.dropdown-menu{transform:scale(1);opacity:1;display:block}.dropdown-toggle:after{border:none!important;font-family:feather;content:"\E842"!important;position:relative;top:1px;right:0;left:.714rem;padding:0;margin:0;vertical-align:0}.dropdown-toggle.dropdown-toggle-split{border-left:1px solid hsla(0,0%,100%,.2)}.dropdown-toggle.dropdown-toggle-split:after{left:0}.dropdown-toggle.nav-hide-arrow:after{display:none}.dropdown-toggle:focus{outline:0}.btn-secondary~.dropdown-menu .dropdown-item.active,.btn-secondary~.dropdown-menu .dropdown-item:hover{background-color:#ccc}.dropup{position:relative}.dropup .btn,.dropup .btn.dropdown-toggle{padding:.85rem 1.5rem}.dropup .btn.dropdown-toggle.dropdown-toggle-split{padding:.85rem 1rem;border-color:hsla(0,0%,100%,.2)!important}.dropup .dropdown-toggle:after{content:"\E845"!important;vertical-align:.05rem}.dropup .dropdown-menu:before{content:"";position:absolute;bottom:-.714rem;left:1.214rem;width:.714rem;height:.714rem;display:block;background:#fff;transform:rotate(45deg) translate(-7px);border-bottom:1px solid rgba(86,86,86,.1);border-right:1px solid rgba(86,86,86,.1);z-index:10;box-sizing:border-box}.dropup .dropdown-menu.dropdown-menu-right:before{left:auto;right:.714rem}.dropup .dropdown-submenu .dropdown-menu{bottom:auto;top:0}.dropleft .btn,.dropleft .btn.dropdown-toggle{padding:.85rem 1.5rem}.dropleft .btn.dropdown-toggle.dropdown-toggle-split{padding:.85rem 1rem}.dropleft .dropdown-toggle:before{border:none!important;font-family:feather;content:"\E843"!important}.dropleft .dropdown-menu:before{content:"";position:absolute;top:1.285rem;right:0;width:.714rem;height:.714rem;display:block;background:#fff;transform:rotate(130deg) translate(-8px);border-top:1px solid rgba(86,86,86,.1);border-left:1px solid rgba(86,86,86,.1);z-index:10;box-sizing:border-box}.dropright .btn,.dropright .btn.dropdown-toggle{padding:.85rem 1.5rem}.dropright .btn.dropdown-toggle.dropdown-toggle-split{padding:.85rem 1rem}.dropright .dropdown-toggle:after{border:none!important;font-family:feather;content:"\E844"!important}.dropright .dropdown-menu:before{content:"";position:absolute;top:1.285rem;left:-.9rem;width:.714rem;height:.714rem;display:block;background:#fff;transform:rotate(140deg) translate(-9px);border-bottom:1px solid rgba(86,86,86,.1);border-right:1px solid rgba(86,86,86,.1);z-index:10;box-sizing:border-box}.dropdown.dropdown-icon-wrapper .dropdown-toggle:after,.dropup.dropdown-icon-wrapper .dropdown-toggle:after{display:none}.dropdown.dropdown-icon-wrapper .dropdown-menu,.dropup.dropdown-icon-wrapper .dropdown-menu{min-width:auto}.dropdown.dropdown-icon-wrapper .dropdown-menu .dropdown-item,.dropup.dropdown-icon-wrapper .dropdown-menu .dropdown-item{padding:.5rem 1.1rem;cursor:pointer}.dropdown.dropdown-icon-wrapper .dropdown-menu .dropdown-item i,.dropup.dropdown-icon-wrapper .dropdown-menu .dropdown-item i{font-size:1.3rem;color:#626262}.dropdown.dropdown-icon-wrapper .dropdown-menu .dropdown-item:hover,.dropup.dropdown-icon-wrapper .dropdown-menu .dropdown-item:hover{color:#fff}.btn.btn-white~.dropdown-menu .dropdown-item:not(.acitve):hover{color:#626262!important}.btn.btn-white~.dropdown-menu .dropdown-item.active{color:#626262}.header-navbar .dropdown-menu,.horizontal-menu-wrapper .dropdown-menu{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-name:slideIn;animation-name:slideIn}@-webkit-keyframes slideIn{to{transform:translateY(0);opacity:1}0%{transform:translateY(1rem);opacity:0}}@keyframes slideIn{to{transform:translateY(0);opacity:1}0%{transform:translateY(1rem);opacity:0}}.navbar-dark .hamburger-inner,.navbar-dark .hamburger-inner:after,.navbar-dark .hamburger-inner:before{background-color:#fff}.header-navbar-shadow{display:none}.navbar-floating .header-navbar-shadow{display:block;background:linear-gradient(180deg,hsla(0,0%,97.3%,.95) 44%,hsla(0,0%,97.3%,.46) 73%,hsla(0,0%,100%,0));padding-top:2.2rem;background-repeat:repeat;width:100%;height:102px;position:fixed;top:0;z-index:11}.header-navbar{padding:0;min-height:3.8rem;font-family:Montserrat,Helvetica,Arial,serif;transition:all .3s ease;background:linear-gradient(180deg,hsla(0,0%,97.3%,.95) 44%,hsla(0,0%,97.3%,.46) 73%,hsla(0,0%,100%,0));z-index:997}.header-navbar.fixed-top{left:260px}.header-navbar[class*=bg-] .navbar-nav .nav-item>a,.header-navbar[class*=bg-] .navbar-nav .nav-item>a i,.header-navbar[class*=bg-] .navbar-nav .nav-item>a span{color:#fff!important}.header-navbar[class*=bg-] .navbar-nav .nav-item .dropdown-menu i{color:inherit!important}.header-navbar[class*=bg-] .navbar-nav .search-input .input,.header-navbar[class*=bg-] .navbar-nav .search-input .search-list .auto-suggestion span{color:#626262!important}.header-navbar.floating-nav{margin:1.3rem 2.2rem 0;border-radius:.5rem;position:fixed;width:calc(100% - 4.4rem - 260px);z-index:12;right:0}.header-navbar.navbar-static-top{background:transparent;box-shadow:none!important;top:0;right:0;left:260px;width:calc(100% - 260px)}.header-navbar .navbar-wrapper{width:100%}.header-navbar.navbar-border{border-bottom:1px solid #e4e7ed}.header-navbar.navbar-dark.navbar-border{border-bottom:1px solid #8596b5}.header-navbar.navbar-shadow{box-shadow:0 4px 20px 0 rgba(0,0,0,.05)}.header-navbar:not(.navbar-horizontal) .nav-link.dropdown-toggle:after{display:none}.header-navbar .navbar-container ul.nav li.dropdown-language{padding-right:0}.header-navbar .navbar-container ul.nav li.dropdown-language .selected-language{font-size:.97rem;letter-spacing:-.25px;font-weight:500}.header-navbar .navbar-container{padding-left:1rem;transition:all .3s ease;background:inherit;margin-left:0}.header-navbar .navbar-container .bookmark-wrapper ul.nav li>a.nav-link{padding:1.4rem .5rem 1.35rem}.header-navbar .navbar-container .bookmark-wrapper ul.nav li>a.nav-link i:hover{color:#4e9876}.header-navbar .navbar-container .bookmark-input{z-index:1}.header-navbar .navbar-container ul.nav li.dropdown .dropdown-menu{top:48px}.header-navbar .navbar-container ul.nav li .badge{padding:.42em .6em .25rem}.header-navbar .navbar-container ul.nav li .badge.badge-up{position:absolute;top:12px;right:-2px}.header-navbar .navbar-container ul.nav li.dropdown-language>a.nav-link{padding:1.65rem .5rem}.header-navbar .navbar-container ul.nav li>a.nav-link{color:#626262;padding:1.6rem .5rem 1.35rem 1rem}.header-navbar .navbar-container ul.nav li>a.nav-link i.flag-icon{margin-right:.5rem}.header-navbar .navbar-container ul.nav li.dropdown-user .dropdown-menu-right{right:12px;left:auto;padding:.5rem}.header-navbar .navbar-container ul.nav li.dropdown-user .dropdown-menu-right .dropdown-item{padding:10px}.header-navbar .navbar-container ul.nav li.dropdown-user .dropdown-menu-right .dropdown-item:active,.header-navbar .navbar-container ul.nav li.dropdown-user .dropdown-menu-right .dropdown-item:hover{background:#4e9876;color:#fff!important}.header-navbar .navbar-container ul.nav li a.dropdown-user-link{padding:.7rem 1rem;display:flex;align-items:center}.header-navbar .navbar-container ul.nav li a.dropdown-user-link .user-name{display:inline-block;margin-bottom:.435rem;margin-left:.2rem}.header-navbar .navbar-container ul.nav li a.dropdown-user-link .user-status{font-size:smaller}.header-navbar .navbar-container ul.nav li a.dropdown-user-link img{box-shadow:0 4px 8px 0 rgba(0,0,0,.12),0 2px 4px 0 rgba(0,0,0,.08)}.header-navbar .navbar-container ul.nav li a.menu-toggle{padding:1.34rem .22rem 1.35rem 0}.header-navbar .navbar-container ul.nav li a.menu-toggle i{font-size:1.4rem}.header-navbar .navbar-container ul.nav li a.nav-link-label{padding:1.6rem 0 1.35rem .8rem}.header-navbar .navbar-container ul.nav li a.dropdown-user-link .user-nav{display:flex;flex-direction:column;align-items:flex-end;float:left;margin-right:.8rem}.header-navbar .navbar-container ul.nav li div.input-group{padding:.7rem 1rem}.header-navbar .navbar-container ul.nav li i.ficon{font-size:1.5rem;color:#626262}.header-navbar .navbar-container ul.nav li i.ficon:hover{color:#4e9876}.header-navbar .navbar-container ul.nav li .media-list{max-height:18.2rem}.header-navbar .navbar-container ul.nav li .scrollable-container{position:relative}.header-navbar .navbar-container .dropdown-menu-media{width:26rem}.header-navbar .navbar-container .dropdown-menu-media .media-list .media{padding:1rem;border:none;border-bottom:1px solid #dae1e7}.header-navbar .navbar-container .dropdown-menu-media .media-list .media:hover{background:#eff1f7}.header-navbar .navbar-container .dropdown-menu-media .media-list .media .media-meta{color:#626262}.header-navbar .navbar-container .dropdown-menu-media .media-list a:last-of-type .media{border-bottom:none}.header-navbar .navbar-container .dropdown-menu-media .dropdown-menu-header{border-bottom:1px solid #dae1e7}.header-navbar .navbar-container .dropdown-menu-media .dropdown-menu-footer a{padding:.3rem;border-top:1px solid #dae1e7}.header-navbar .nav-item+.nav-item,.header-navbar.navbar-without-menu .navbar-container{margin-left:0}@media (max-width:767.98px){.header-navbar .navbar-header{width:100%!important;padding:.5rem 1rem;position:relative}.header-navbar .navbar-header .menu-toggle{top:2px;position:relative}.header-navbar .navbar-header .open-navbar-container i{font-size:1.8rem}.header-navbar .navbar-header .navbar-brand{position:absolute;left:50%;top:0;transform:translate(-50%)}.header-navbar.navbar-with-menu .navbar-container{width:100%;display:table;margin:0;height:auto}}@media (max-width:991.98px){[data-menu=vertical-menu-modern] .header-navbar .navbar-header{width:100%!important;padding:.5rem 1rem;position:relative}[data-menu=vertical-menu-modern] .header-navbar .navbar-header .menu-toggle{top:2px;position:relative}[data-menu=vertical-menu-modern] .header-navbar .navbar-header .open-navbar-container i{font-size:1.8rem}[data-menu=vertical-menu-modern] .header-navbar .navbar-header .navbar-brand{position:absolute;left:50%;top:0;transform:translate(-50%)}[data-menu=vertical-menu-modern] .header-navbar.navbar-with-menu .navbar-container{width:100%;display:table;margin:0;height:auto}[data-menu=vertical-menu-modern] .navbar-dark .navbar-header .navbar-nav .nav-link,[data-menu=vertical-menu-modern] .navbar-semi-dark .navbar-header .navbar-nav .nav-link{color:#fff}[data-menu=vertical-menu-modern] .navbar-dark .navbar-container .navbar-nav .nav-link,[data-menu=vertical-menu-modern] .navbar-light .navbar-header .navbar-nav .nav-link,[data-menu=vertical-menu-modern] .navbar-semi-dark .navbar-container .navbar-nav .nav-link{color:#b8c2cc}}.navbar-light,.navbar-light.navbar-horizontal{background:#fff}.navbar-light .navbar-nav li{line-height:1}.navbar-light .navbar-nav .active.nav-link{background-color:rgba(0,0,0,.03)}.navbar-light .navbar-nav .disabled.nav-link{color:#b8c2cc}.navbar-dark{background:#b8c2cc}.navbar-dark .navbar-brand{color:#fff!important}.navbar-dark.navbar-horizontal{background:#b8c2cc}.navbar-dark .nav-search .btn-secondary,.navbar-dark .nav-search .form-control{color:#fff;background:#b8c2cc}.navbar-dark .navbar-nav li{line-height:1}.navbar-dark .navbar-nav .active.nav-link{background-color:hsla(0,0%,100%,.05)}.navbar-dark .navbar-nav .disabled.nav-link{color:#dae1e7}.navbar-semi-dark{background:#fff}.navbar-semi-dark .navbar-header{background:#b8c2cc}.navbar-semi-dark .navbar-header .brand-text{color:#fff}.navbar-semi-dark .navbar-nav li{line-height:1}.navbar-semi-dark .navbar-nav .nav-link{color:#b8c2cc}.navbar-semi-dark .navbar-nav .active.nav-link{background-color:rgba(0,0,0,.03)}.navbar-semi-dark .navbar-nav .disabled.nav-link{color:#b8c2cc}.navbar-semi-light{background:#b8c2cc}.navbar-semi-light .navbar-header{background:#fff}.navbar-semi-light .navbar-header .brand-text{color:#b8c2cc}.navbar-semi-light .navbar-nav li{line-height:1}.navbar-semi-light .navbar-nav .nav-link{color:#fff}.navbar-semi-light .navbar-nav .active.nav-link{background-color:rgba(0,0,0,.03)}.navbar-semi-light .navbar-nav .disabled.nav-link{color:#b8c2cc}@-moz-document url-prefix(){ul li a .children-in{position:relative;right:3px;top:-14px}}.navbar-menu-icon span{display:block;position:absolute;height:2px;width:100%;background:#b8c2cc;border-radius:9px;opacity:1;left:0;transform:rotate(0deg);transition:.25s ease-in-out}.navbar-menu-icon span:first-child{top:0}.navbar-menu-icon span:nth-child(2){top:10px}.navbar-menu-icon span:nth-child(3){top:20px}.navbar-menu-icon.show span:first-child{top:10px;transform:rotate(135deg)}.navbar-menu-icon.show span:nth-child(2){opacity:0;left:-60px}.navbar-menu-icon.show span:nth-child(3){top:10px;transform:rotate(-135deg)}@media (max-width:767.98px){.header-navbar .navbar-nav .show{position:static}.header-navbar .navbar-nav .open-navbar-container{padding-top:.625rem}.header-navbar .navbar-container .show .dropdown-menu{right:0;left:0!important;float:none;width:auto;margin-top:0;max-height:400px;overflow-x:hidden}.header-navbar .navbar-container .dropdown-user .dropdown-menu-right{right:0!important}.header-navbar .navbar-container ul.nav li.nav-item i{margin-right:.2rem}.header-navbar .navbar-container ul.nav li a.dropdown-user-link{padding:.8rem .6rem}.header-navbar .navbar-container ul.nav li .dropdown-toggle:after{margin-right:0;margin-left:-2px}.navbar-dark .hamburger-inner,.navbar-dark .hamburger-inner:after,.navbar-dark .hamburger-inner:before,.navbar-semi-dark .hamburger-inner,.navbar-semi-dark .hamburger-inner:after,.navbar-semi-dark .hamburger-inner:before{background-color:#fff}.navbar-dark .navbar-header .navbar-nav .nav-link,.navbar-semi-dark .navbar-header .navbar-nav .nav-link{color:#fff}.navbar-dark .navbar-container .navbar-nav .nav-link,.navbar-light .navbar-container .navbar-nav .nav-link,.navbar-light .navbar-header .navbar-nav .nav-link,.navbar-semi-dark .navbar-container .navbar-nav .nav-link,.navbar-semi-light .navbar-container .navbar-nav .nav-link,.navbar-semi-light .navbar-header .navbar-nav .nav-link{color:#b8c2cc}}.headroom{will-change:transform;transition:transform .2s linear}.headroom--pinned-top{transform:translateY(0)}.headroom--unpinned-top{transform:translateY(-100%)}.headroom--pinned-bottom{transform:translateY(0)}.headroom--unpinned-bottom{transform:translateY(100%)}@media (max-width:575.98px){.header-navbar .navbar-container ul.nav li .selected-language{display:none}}body[data-col="1-column"] .header-navbar.floating-nav{width:calc(100% - 4.4rem)}@media (-ms-high-contrast:none),(min-width:1200px) and (-ms-high-contrast:active){body:not([data-col="1-columns"]) .header-navbar.floating-nav{width:calc(100% - 320px)}}@media (max-width:1199.98px){.header-navbar .navbar-container ul.nav li a.dropdown-user-link{padding:.7rem 1.23rem}.header-navbar .navbar-container ul.nav li .dropdown-toggle:after{margin-right:0;margin-left:-2px}.header-navbar.navbar-static-top{left:0;width:100%}}@media (max-width:767px){#navbar-mobile.navbar-collapse .navbar-nav{margin:0;flex-flow:row wrap}#navbar-mobile.navbar-collapse .navbar-nav .dropdown-menu{position:absolute}#navbar-mobile.navbar-collapse .navbar-nav .nav-item{float:left}}@media (max-width:991.98px){#navbar-mobile.navbar-collapse .navbar-nav{margin:0;flex-flow:row wrap}#navbar-mobile.navbar-collapse .navbar-nav .dropdown-menu{position:absolute}#navbar-mobile.navbar-collapse .navbar-nav .nav-item{float:left}}@media only screen and (min-device-width:26.78em) and (max-device-width:47.64em) and (-webkit-min-device-pixel-ratio:2) and (orientation:landscape){.header-navbar .navbar-container .show .dropdown-menu{max-height:180px}}@media only screen and (min-device-width:29.57em) and (max-device-width:52.57em) and (-webkit-min-device-pixel-ratio:3) and (orientation:landscape){.header-navbar .navbar-container .show .dropdown-menu{max-height:280px}}#navbar-component .navbar{z-index:auto!important}#navbar-component .navbar.floating-nav{border-radius:.5rem}#navbar-component .navbar .navbar-nav .nav-item a{color:inherit}#navbar-component .navbar.header-navbar.navbar-dark .navbar-nav .nav-link,#navbar-component .navbar.header-navbar.navbar-dark .navbar-nav .nav-link i{color:#fff}#navbar-component .navbar .navbar-nav .dropdown-language.show,#navbar-component .navbar .navbar-nav .dropdown-notification.show,#navbar-component .navbar .navbar-nav .dropdown-user.show{position:relative}#navbar-component .navbar .navbar-nav .dropdown-language .dropdown-menu.show,#navbar-component .navbar .navbar-nav .dropdown-notification .dropdown-menu.show,#navbar-component .navbar .navbar-nav .dropdown-user .dropdown-menu.show{position:absolute;right:0;left:auto!important}#navbar-component .navbar.navbar-dark .navbar-toggler,#navbar-component .navbar.navbar-light .navbar-toggler{font-size:1.2rem}#navbar-component .navbar.navbar-dark .navbar-toggler:focus,#navbar-component .navbar.navbar-light .navbar-toggler:focus{outline:0}#navbar-component #navbar-collapsed .navbar{border-radius:0}@media (min-width:992px){#navbar-component .navbar .navbar-container{background:inherit}#navbar-component .nav .dropdown-language{float:right}}@media (max-width:992px){#navbar-component .navbar .navbar-container{background:inherit}#navbar-component .navbar .navbar-container .navbar-nav{flex-direction:row}}@media (max-width:1201px){.header-navbar.fixed-top{left:0}.horizontal-layout .header-navbar .navbar-container{padding-left:1.5rem;padding-right:1.2rem}}@media (max-width:1199px){.header-navbar .navbar-container ul.nav li a.dropdown-user-link .user-name{margin-bottom:0}}@media (max-width:768px){#navbar-component .navbar .navbar-nav .dropdown-notification.show{position:static}}@media (max-width:575.98px){.header-navbar.floating-nav{width:calc(100% - 2.4rem)!important;margin-left:1.2rem;margin-right:1.2rem}.content.app-content .content-area-wrapper{margin-left:1.2rem!important;margin-right:1.2rem!important}.header-navbar .navbar-container{padding-left:1rem!important;padding-right:0!important}}@media (max-width:992px){.navbar-container #navbar-mobile .nav-back{margin-top:5px}}.nav{border-radius:.25rem}.nav.wrap-border{border:1px solid #ddd}.nav.wrap-border li.nav-header{margin:0 .5rem}.nav.wrap-border div,.nav.wrap-border li.nav-item{padding:2px .714rem}.nav.square-border,.nav.square-border .nav-item .nav-link.active{border-radius:0}.nav .modern-nav-toggle{padding:1.571rem 0}.nav.nav-pills{margin-bottom:1rem}.nav.nav-pills .nav-item .nav-link{border-radius:.357rem;padding:.3rem 1rem .2rem;margin-right:.5rem}.nav.nav-pills .nav-item .nav-link.active{color:#fff}.nav.nav-pills .nav-item .nav-link.disabled{color:#b8c2cc}.nav.nav-pills .nav-item .nav-link.dropdown-toggle:after{top:1px;left:1px}.nav.nav-pills .nav-item.dropdown.show .nav-link{color:#fff}.nav.nav-pills .nav-item.dropdown.show .dropdown-item.active:hover{color:#4e9876}.nav.nav-pills.nav-justified{width:100%}.nav.nav-pills.nav-justified .nav-item{float:none}.nav.nav-pills.nav-justified .nav-link{text-align:center;margin-bottom:5px}.nav.nav-pills.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:576px){.nav.nav-pills.nav-justified .nav-item{display:block;width:1%}.nav.nav-pills.nav-justified .nav-link{margin-bottom:0}}.nav.nav-pills.nav-justified .nav-link{margin-right:0;border-radius:.5rem}@media (min-width:576px){.nav.nav-pills.nav-justified .nav-link.active,.nav.nav-pills.nav-justified .nav-link.active:focus,.nav.nav-pills.nav-justified .nav-link.active:hover{border-bottom-color:transparent}}.nav.nav-pills.nav-justified .nav-link{display:block}.nav.nav-pills.nav-justified .nav-link.active,.nav.nav-pills.nav-justified .nav-link.active:focus,.nav.nav-pills.nav-justified .nav-link.active:hover{border:none}.nav.nav-pills.nav-active-bordered-pill .nav-item a.nav-link.active{border:1px solid #4e9876;border-radius:.25rem;color:#4e9876;background-color:#fff}.nav.nav-tabs{border:none;margin-bottom:1rem;border-radius:0}.nav.nav-tabs,.nav.nav-tabs .nav-item{position:relative}.nav.nav-tabs .nav-item .nav-link{color:#626262;font-size:.95rem;border:none;min-width:auto;font-weight:450;padding:.61rem .635rem;border-radius:0}.nav.nav-tabs .nav-item .nav-link.active{border:none;position:relative;color:#4e9876;transition:all .2s ease;background-color:transparent}.nav.nav-tabs .nav-item .nav-link.active:after{content:attr(data-before);height:2px;width:100%;left:0;position:absolute;bottom:0;top:100%;background:linear-gradient(30deg,#4e9876,rgba(78,152,118,.5))!important;box-shadow:0 0 8px 0 rgba(78,152,118,.5)!important;transform:translateY(0);transition:all .2s linear}.nav.nav-tabs .nav-item .nav-link.dropdown-toggle:after{top:1px;left:1px}.nav.nav-tabs .nav-item .nav-link.disabled{color:#b8c2cc}.nav.nav-tabs.nav-justified{width:100%}.nav.nav-tabs.nav-justified .nav-item{float:none}.nav.nav-tabs.nav-justified .nav-link{text-align:center;margin-bottom:5px}.nav.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:576px){.nav.nav-tabs.nav-justified .nav-item{display:block;width:1%}.nav.nav-tabs.nav-justified .nav-link{margin-bottom:0}}.nav.nav-tabs.nav-justified .nav-link{margin-right:0;border-radius:.5rem}@media (min-width:576px){.nav.nav-tabs.nav-justified .nav-link.active,.nav.nav-tabs.nav-justified .nav-link.active:focus,.nav.nav-tabs.nav-justified .nav-link.active:hover{border-bottom-color:transparent}}.nav.nav-tabs.nav-justified .nav-item a.nav-link{display:block;border-radius:0}.nav.nav-tabs.nav-justified .nav-item a.nav-link.active{border:none;background-color:#fff}.nav.nav-tabs.nav-justified .nav-item a.nav-link:hover{border-color:transparent}.nav-vertical{overflow:hidden}.nav-vertical .nav.nav-tabs .nav-item .nav-link{border:none;margin-bottom:0}.nav-vertical .nav.nav-tabs .nav-item .nav-link.active{border:none;border-radius:0}.nav-vertical .nav.nav-tabs .nav-item .nav-link.active:after{transform:rotate(90deg);left:auto;right:-1.5rem;bottom:100%;top:1.25rem;width:2.14rem}.nav-vertical .nav.nav-tabs .nav-item .nav-link:hover{border-right:none}.nav-vertical .nav.nav-tabs.nav-left{float:left;display:table;margin-right:1rem}.nav-vertical .nav.nav-tabs.nav-left~.tab-content .tab-pane{display:none;background-color:#fff;overflow-y:auto}.nav-vertical .nav.nav-tabs.nav-left~.tab-content .tab-pane.active{display:block}.nav-vertical .nav.nav-tabs.nav-right{float:right;display:table;margin-left:1rem}.nav-vertical .nav.nav-tabs.nav-right .nav-item .nav-link.active:after{left:-1.5rem}.nav-vertical .nav.nav-tabs.nav-right~.tab-content .tab-pane{display:none;background-color:#fff;overflow-y:auto;padding-right:1rem}.nav-vertical .nav.nav-tabs.nav-right~.tab-content .tab-pane.active{display:block}@media (max-width:576px){.nav-vertical .nav.nav-tabs .nav-item .nav-link.active:after{height:0}}.toast-bs-container{z-index:1040;position:fixed;top:0;left:0;width:100%}.toast-bs-container .toast-position{position:relative;top:0;right:0;display:flex;flex-direction:column;flex-wrap:wrap-reverse}.toast-bs-container .toast-position .toast.show{opacity:1;z-index:1030}.toast-placement{position:static;top:0}.toast-placement .toast{position:fixed;top:0;z-index:1030}.toast{display:none;background-color:#fff;margin-top:.75rem}.toast .toast-header .close:active,.toast .toast-header .close:focus,.toast .toast-header .mailbox-attachment-close:active,.toast .toast-header .mailbox-attachment-close:focus{outline:none}.toast.show.toast-wrapper{position:static}.toast.toast-translucent{opacity:1;display:block}.toast-header img{width:35px;height:24px}@media (-ms-high-contrast:none),screen and (-ms-high-contrast:active){.toast-bs-container{position:fixed!important;left:74%!important}}.toast-bs-container,_:-ms-lang(x){position:fixed!important;left:74%!important}.pagination .page-item{border-radius:5rem}.pagination .page-item.first .page-link,.pagination .page-item.last .page-link,.pagination .page-item.next-item .page-link,.pagination .page-item.prev-item .page-link{color:#4e9876}.pagination .page-item.first.disabled .page-link,.pagination .page-item.last.disabled .page-link,.pagination .page-item.next-item.disabled .page-link,.pagination .page-item.prev-item.disabled .page-link{color:#b8c2cc}.pagination .page-item:not(.active) .page-link,.pagination .page-item:not(.first) .page-link,.pagination .page-item:not(.last) .page-link,.pagination .page-item:not(.next-item) .page-link,.pagination .page-item:not(.prev-item) .page-link{line-height:1.3}.pagination .page-item.prev-item{margin-right:.3571rem}.pagination .page-item.prev-item .page-link{background-color:#f0f0f0;padding:.572rem .651rem;border-radius:50%}.pagination .page-item.prev-item .page-link:before{content:"\E843";font-family:feather}.pagination .page-item.prev-item .page-link:hover{background:#4e9876;color:#fff}.pagination .page-item.prev-item~.page-item:nth-child(2){border-top-left-radius:5rem;border-bottom-left-radius:5rem}.pagination .page-item.prev-item~.page-item:nth-child(2) .page-link{border-top-left-radius:5rem!important;border-bottom-left-radius:5rem!important}.pagination .page-item.prev-item~.page-item:nth-last-child(2){border-top-right-radius:5rem;border-bottom-right-radius:5rem}.pagination .page-item.prev-item~.page-item:nth-last-child(2) .page-link{border-top-right-radius:5rem!important;border-bottom-right-radius:5rem!important}.pagination .page-item.next-item{margin-left:.3571rem}.pagination .page-item.next-item .page-link{background-color:#f0f0f0;padding:.572rem .651rem;border-radius:50%}.pagination .page-item.next-item .page-link:after{content:"\E844";font-family:feather}.pagination .page-item.next-item .page-link:hover{background:#4e9876;color:#fff}.pagination .page-item.prev .page-link:before,.pagination .page-item.previous .page-link:before{content:"\E843";font-family:feather}.pagination .page-item.next .page-link:after{content:"\E844";font-family:feather}.pagination .page-item .page-link{border:none;color:rgba(86,86,86,.9);background-color:#f0f0f0;margin:0;font-size:1rem;font-weight:700}.pagination .page-item .page-link i{position:relative;top:1px}.pagination .page-item .page-link:focus{box-shadow:none}.pagination .page-item .page-link:hover{color:#4e9876}.pagination .page-item.active{background-color:#f0f0f0;border-radius:0}.pagination .page-item.active .page-link{z-index:3;border-radius:5rem;background-color:#4e9876;color:#fff;transform:scale(1.05)}.pagination .page-item:first-child:not(.prev-item).active{border-top-left-radius:1.428rem;border-bottom-left-radius:1.428rem}.pagination .page-item:first-child:not(.prev-item).active .page-link{border-radius:5rem}.pagination .page-item:first-child:not(.prev-item) .page-link{border-top-left-radius:1.428rem;border-bottom-left-radius:1.428rem}.pagination .page-item:last-child:not(.next-item).active{border-top-right-radius:1.428rem;border-bottom-right-radius:1.428rem}.pagination .page-item:last-child:not(.next-item).active .page-link{border-radius:5rem}.pagination .page-item:last-child:not(.next-item) .page-link{border-top-right-radius:1.428rem;border-bottom-right-radius:1.428rem}.pagination.pagination-lg .page-item .page-link{font-size:1.5rem;transform:scale(1)}html.scroll-smooth{scroll-behavior:smooth}.wrapper,body,html{min-height:100%}.wrapper{position:relative}.wrapper .content-wrapper{min-height:calc(100vh - 6.614rem - 1px)}.layout-boxed .wrapper,.layout-boxed .wrapper:before{margin:0 auto;max-width:1250px}.layout-boxed .wrapper .main-sidebar{left:inherit}@supports not (-webkit-touch-callout:none){.layout-fixed .wrapper .sidebar{height:calc(100vh - 3.164rem - 1px)}.layout-fixed.text-sm .wrapper .sidebar{height:calc(100vh - 2.62475rem - 1px)}}.layout-navbar-fixed.layout-fixed .wrapper .main-header.text-sm~.control-sidebar{top:calc(2.62475rem + 1px)}.layout-navbar-fixed.layout-fixed .wrapper .brand-link.text-sm~.sidebar{margin-top:calc(2.62475rem + 1px)}.layout-navbar-fixed.sidebar-mini-md.sidebar-collapse .wrapper .brand-link,.layout-navbar-fixed.sidebar-mini.sidebar-collapse .wrapper .brand-link{height:calc(3.164rem + 1px);width:5.4rem}.layout-navbar-fixed.sidebar-mini-md.sidebar-collapse.text-sm .wrapper .brand-link,.layout-navbar-fixed.sidebar-mini-md.sidebar-collapse .wrapper .brand-link.text-sm,.layout-navbar-fixed.sidebar-mini.sidebar-collapse.text-sm .wrapper .brand-link,.layout-navbar-fixed.sidebar-mini.sidebar-collapse .wrapper .brand-link.text-sm{height:calc(2.62475rem + 1px)}.layout-navbar-fixed .wrapper .main-sidebar:hover .brand-link{transition:width .3s ease-in-out;width:260px}.layout-navbar-fixed .wrapper .main-header.text-sm~.content-wrapper{margin-top:calc(2.62475rem + 1px)}.layout-navbar-fixed .wrapper .main-header{z-index:1033}.layout-navbar-fixed.layout-fixed .wrapper .control-sidebar{top:calc(3.164rem + 1px)}.layout-navbar-fixed.layout-fixed .wrapper .main-header.text-sm~.control-sidebar,.text-sm .layout-navbar-fixed.layout-fixed .wrapper .main-header~.control-sidebar{top:calc(2.62475rem + 1px)}.layout-navbar-fixed.layout-fixed .wrapper .sidebar{margin-top:calc(3.164rem + 1px)}.layout-navbar-fixed.layout-fixed .wrapper .brand-link.text-sm~.sidebar,.text-sm .layout-navbar-fixed.layout-fixed .wrapper .brand-link~.sidebar{margin-top:calc(2.62475rem + 1px)}.layout-navbar-fixed.layout-fixed.text-sm .wrapper .control-sidebar{top:calc(2.62475rem + 1px)}.layout-navbar-fixed.layout-fixed.text-sm .wrapper .sidebar{margin-top:calc(2.62475rem + 1px)}.layout-navbar-fixed .wrapper .control-sidebar{top:0}.layout-navbar-fixed .wrapper a.anchor{display:block;position:relative;top:calc(-4.164rem + -1px)}.layout-navbar-fixed .wrapper.sidebar-collapse .brand-link{height:calc(3.164rem + 1px);transition:width .3s ease-in-out;width:5.4rem}.layout-navbar-fixed .wrapper.sidebar-collapse .brand-link.text-sm,.text-sm .layout-navbar-fixed .wrapper.sidebar-collapse .brand-link{height:calc(2.62475rem + 1px)}.layout-navbar-fixed .wrapper .brand-link,.layout-navbar-fixed .wrapper.sidebar-collapse .main-sidebar:hover .brand-link{transition:width .3s ease-in-out;width:260px}.layout-navbar-fixed .wrapper .brand-link{overflow:hidden;position:fixed;top:0;z-index:1035}.layout-navbar-fixed .wrapper .sidebar-dark-primary .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-navbar-fixed .wrapper .sidebar-light-primary .brand-link:not([class*=navbar]){background-color:#fff}.layout-navbar-fixed .wrapper .sidebar-dark-secondary .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-navbar-fixed .wrapper .sidebar-light-secondary .brand-link:not([class*=navbar]){background-color:#fff}.layout-navbar-fixed .wrapper .sidebar-dark-success .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-navbar-fixed .wrapper .sidebar-light-success .brand-link:not([class*=navbar]){background-color:#fff}.layout-navbar-fixed .wrapper .sidebar-dark-info .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-navbar-fixed .wrapper .sidebar-light-info .brand-link:not([class*=navbar]){background-color:#fff}.layout-navbar-fixed .wrapper .sidebar-dark-warning .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-navbar-fixed .wrapper .sidebar-light-warning .brand-link:not([class*=navbar]){background-color:#fff}.layout-navbar-fixed .wrapper .sidebar-dark-danger .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-navbar-fixed .wrapper .sidebar-light-danger .brand-link:not([class*=navbar]){background-color:#fff}.layout-navbar-fixed .wrapper .sidebar-dark-light .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-navbar-fixed .wrapper .sidebar-light-light .brand-link:not([class*=navbar]){background-color:#fff}.layout-navbar-fixed .wrapper .sidebar-dark-dark .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-navbar-fixed .wrapper .sidebar-light-dark .brand-link:not([class*=navbar]){background-color:#fff}.layout-navbar-fixed .wrapper .content-wrapper{margin-top:calc(3.164rem + 1px)}.layout-navbar-fixed .wrapper .main-header.text-sm~.content-wrapper,.text-sm .layout-navbar-fixed .wrapper .main-header~.content-wrapper{margin-top:calc(2.62475rem + 1px)}.layout-navbar-fixed .wrapper .main-header{left:0;position:fixed;right:0;top:0;z-index:1037}.layout-navbar-fixed.text-sm .wrapper .content-wrapper{margin-top:calc(2.62475rem + 1px)}body:not(.layout-fixed).layout-navbar-fixed .wrapper .main-sidebar{margin-top:calc(-3.164rem + -1px)}body:not(.layout-fixed).layout-navbar-fixed .wrapper .main-sidebar .sidebar{margin-top:calc(3.164rem + 1px)}body:not(.layout-fixed).layout-navbar-fixed.text-sm .wrapper .main-sidebar{margin-top:calc(-2.62475rem + -1px)}body:not(.layout-fixed).layout-navbar-fixed.text-sm .wrapper .main-sidebar .sidebar{margin-top:calc(2.62475rem + 1px)}.layout-navbar-not-fixed .wrapper .brand-link{position:static}.layout-navbar-not-fixed .wrapper .content-wrapper,.layout-navbar-not-fixed .wrapper .sidebar{margin-top:0}.layout-navbar-not-fixed .wrapper .main-header{position:static}.layout-navbar-not-fixed.layout-fixed .wrapper .sidebar{margin-top:0}@media (min-width:576px){.layout-sm-navbar-fixed.layout-fixed .wrapper .control-sidebar{top:calc(3.164rem + 1px)}.layout-sm-navbar-fixed.layout-fixed .wrapper .main-header.text-sm~.control-sidebar,.text-sm .layout-sm-navbar-fixed.layout-fixed .wrapper .main-header~.control-sidebar{top:calc(2.62475rem + 1px)}.layout-sm-navbar-fixed.layout-fixed .wrapper .sidebar{margin-top:calc(3.164rem + 1px)}.layout-sm-navbar-fixed.layout-fixed .wrapper .brand-link.text-sm~.sidebar,.text-sm .layout-sm-navbar-fixed.layout-fixed .wrapper .brand-link~.sidebar{margin-top:calc(2.62475rem + 1px)}.layout-sm-navbar-fixed.layout-fixed.text-sm .wrapper .control-sidebar{top:calc(2.62475rem + 1px)}.layout-sm-navbar-fixed.layout-fixed.text-sm .wrapper .sidebar{margin-top:calc(2.62475rem + 1px)}.layout-sm-navbar-fixed .wrapper .control-sidebar{top:0}.layout-sm-navbar-fixed .wrapper a.anchor{display:block;position:relative;top:calc(-4.164rem + -1px)}.layout-sm-navbar-fixed .wrapper.sidebar-collapse .brand-link{height:calc(3.164rem + 1px);transition:width .3s ease-in-out;width:5.4rem}.layout-sm-navbar-fixed .wrapper.sidebar-collapse .brand-link.text-sm,.text-sm .layout-sm-navbar-fixed .wrapper.sidebar-collapse .brand-link{height:calc(2.62475rem + 1px)}.layout-sm-navbar-fixed .wrapper.sidebar-collapse .main-sidebar:hover .brand-link{transition:width .3s ease-in-out;width:260px}.layout-sm-navbar-fixed .wrapper .brand-link{overflow:hidden;position:fixed;top:0;transition:width .3s ease-in-out;width:260px;z-index:1035}.layout-sm-navbar-fixed .wrapper .sidebar-dark-primary .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-sm-navbar-fixed .wrapper .sidebar-light-primary .brand-link:not([class*=navbar]){background-color:#fff}.layout-sm-navbar-fixed .wrapper .sidebar-dark-secondary .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-sm-navbar-fixed .wrapper .sidebar-light-secondary .brand-link:not([class*=navbar]){background-color:#fff}.layout-sm-navbar-fixed .wrapper .sidebar-dark-success .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-sm-navbar-fixed .wrapper .sidebar-light-success .brand-link:not([class*=navbar]){background-color:#fff}.layout-sm-navbar-fixed .wrapper .sidebar-dark-info .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-sm-navbar-fixed .wrapper .sidebar-light-info .brand-link:not([class*=navbar]){background-color:#fff}.layout-sm-navbar-fixed .wrapper .sidebar-dark-warning .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-sm-navbar-fixed .wrapper .sidebar-light-warning .brand-link:not([class*=navbar]){background-color:#fff}.layout-sm-navbar-fixed .wrapper .sidebar-dark-danger .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-sm-navbar-fixed .wrapper .sidebar-light-danger .brand-link:not([class*=navbar]){background-color:#fff}.layout-sm-navbar-fixed .wrapper .sidebar-dark-light .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-sm-navbar-fixed .wrapper .sidebar-light-light .brand-link:not([class*=navbar]){background-color:#fff}.layout-sm-navbar-fixed .wrapper .sidebar-dark-dark .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-sm-navbar-fixed .wrapper .sidebar-light-dark .brand-link:not([class*=navbar]){background-color:#fff}.layout-sm-navbar-fixed .wrapper .content-wrapper{margin-top:calc(3.164rem + 1px)}.layout-sm-navbar-fixed .wrapper .main-header.text-sm~.content-wrapper,.text-sm .layout-sm-navbar-fixed .wrapper .main-header~.content-wrapper{margin-top:calc(2.62475rem + 1px)}.layout-sm-navbar-fixed .wrapper .main-header{left:0;position:fixed;right:0;top:0;z-index:1037}.layout-sm-navbar-fixed.text-sm .wrapper .content-wrapper{margin-top:calc(2.62475rem + 1px)}body:not(.layout-fixed).layout-sm-navbar-fixed .wrapper .main-sidebar{margin-top:calc(-3.164rem + -1px)}body:not(.layout-fixed).layout-sm-navbar-fixed .wrapper .main-sidebar .sidebar{margin-top:calc(3.164rem + 1px)}body:not(.layout-fixed).layout-sm-navbar-fixed.text-sm .wrapper .main-sidebar{margin-top:calc(-2.62475rem + -1px)}body:not(.layout-fixed).layout-sm-navbar-fixed.text-sm .wrapper .main-sidebar .sidebar{margin-top:calc(2.62475rem + 1px)}.layout-sm-navbar-not-fixed .wrapper .brand-link{position:static}.layout-sm-navbar-not-fixed .wrapper .content-wrapper,.layout-sm-navbar-not-fixed .wrapper .sidebar{margin-top:0}.layout-sm-navbar-not-fixed .wrapper .main-header{position:static}.layout-sm-navbar-not-fixed.layout-fixed .wrapper .sidebar{margin-top:0}}@media (min-width:768px){.layout-md-navbar-fixed.layout-fixed .wrapper .control-sidebar{top:calc(3.164rem + 1px)}.layout-md-navbar-fixed.layout-fixed .wrapper .main-header.text-sm~.control-sidebar,.text-sm .layout-md-navbar-fixed.layout-fixed .wrapper .main-header~.control-sidebar{top:calc(2.62475rem + 1px)}.layout-md-navbar-fixed.layout-fixed .wrapper .sidebar{margin-top:calc(3.164rem + 1px)}.layout-md-navbar-fixed.layout-fixed .wrapper .brand-link.text-sm~.sidebar,.text-sm .layout-md-navbar-fixed.layout-fixed .wrapper .brand-link~.sidebar{margin-top:calc(2.62475rem + 1px)}.layout-md-navbar-fixed.layout-fixed.text-sm .wrapper .control-sidebar{top:calc(2.62475rem + 1px)}.layout-md-navbar-fixed.layout-fixed.text-sm .wrapper .sidebar{margin-top:calc(2.62475rem + 1px)}.layout-md-navbar-fixed .wrapper .control-sidebar{top:0}.layout-md-navbar-fixed .wrapper a.anchor{display:block;position:relative;top:calc(-4.164rem + -1px)}.layout-md-navbar-fixed .wrapper.sidebar-collapse .brand-link{height:calc(3.164rem + 1px);transition:width .3s ease-in-out;width:5.4rem}.layout-md-navbar-fixed .wrapper.sidebar-collapse .brand-link.text-sm,.text-sm .layout-md-navbar-fixed .wrapper.sidebar-collapse .brand-link{height:calc(2.62475rem + 1px)}.layout-md-navbar-fixed .wrapper.sidebar-collapse .main-sidebar:hover .brand-link{transition:width .3s ease-in-out;width:260px}.layout-md-navbar-fixed .wrapper .brand-link{overflow:hidden;position:fixed;top:0;transition:width .3s ease-in-out;width:260px;z-index:1035}.layout-md-navbar-fixed .wrapper .sidebar-dark-primary .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-md-navbar-fixed .wrapper .sidebar-light-primary .brand-link:not([class*=navbar]){background-color:#fff}.layout-md-navbar-fixed .wrapper .sidebar-dark-secondary .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-md-navbar-fixed .wrapper .sidebar-light-secondary .brand-link:not([class*=navbar]){background-color:#fff}.layout-md-navbar-fixed .wrapper .sidebar-dark-success .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-md-navbar-fixed .wrapper .sidebar-light-success .brand-link:not([class*=navbar]){background-color:#fff}.layout-md-navbar-fixed .wrapper .sidebar-dark-info .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-md-navbar-fixed .wrapper .sidebar-light-info .brand-link:not([class*=navbar]){background-color:#fff}.layout-md-navbar-fixed .wrapper .sidebar-dark-warning .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-md-navbar-fixed .wrapper .sidebar-light-warning .brand-link:not([class*=navbar]){background-color:#fff}.layout-md-navbar-fixed .wrapper .sidebar-dark-danger .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-md-navbar-fixed .wrapper .sidebar-light-danger .brand-link:not([class*=navbar]){background-color:#fff}.layout-md-navbar-fixed .wrapper .sidebar-dark-light .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-md-navbar-fixed .wrapper .sidebar-light-light .brand-link:not([class*=navbar]){background-color:#fff}.layout-md-navbar-fixed .wrapper .sidebar-dark-dark .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-md-navbar-fixed .wrapper .sidebar-light-dark .brand-link:not([class*=navbar]){background-color:#fff}.layout-md-navbar-fixed .wrapper .content-wrapper{margin-top:calc(3.164rem + 1px)}.layout-md-navbar-fixed .wrapper .main-header.text-sm~.content-wrapper,.text-sm .layout-md-navbar-fixed .wrapper .main-header~.content-wrapper{margin-top:calc(2.62475rem + 1px)}.layout-md-navbar-fixed .wrapper .main-header{left:0;position:fixed;right:0;top:0;z-index:1037}.layout-md-navbar-fixed.text-sm .wrapper .content-wrapper{margin-top:calc(2.62475rem + 1px)}body:not(.layout-fixed).layout-md-navbar-fixed .wrapper .main-sidebar{margin-top:calc(-3.164rem + -1px)}body:not(.layout-fixed).layout-md-navbar-fixed .wrapper .main-sidebar .sidebar{margin-top:calc(3.164rem + 1px)}body:not(.layout-fixed).layout-md-navbar-fixed.text-sm .wrapper .main-sidebar{margin-top:calc(-2.62475rem + -1px)}body:not(.layout-fixed).layout-md-navbar-fixed.text-sm .wrapper .main-sidebar .sidebar{margin-top:calc(2.62475rem + 1px)}.layout-md-navbar-not-fixed .wrapper .brand-link{position:static}.layout-md-navbar-not-fixed .wrapper .content-wrapper,.layout-md-navbar-not-fixed .wrapper .sidebar{margin-top:0}.layout-md-navbar-not-fixed .wrapper .main-header{position:static}.layout-md-navbar-not-fixed.layout-fixed .wrapper .sidebar{margin-top:0}}@media (min-width:992px){.layout-lg-navbar-fixed.layout-fixed .wrapper .control-sidebar{top:calc(3.164rem + 1px)}.layout-lg-navbar-fixed.layout-fixed .wrapper .main-header.text-sm~.control-sidebar,.text-sm .layout-lg-navbar-fixed.layout-fixed .wrapper .main-header~.control-sidebar{top:calc(2.62475rem + 1px)}.layout-lg-navbar-fixed.layout-fixed .wrapper .sidebar{margin-top:calc(3.164rem + 1px)}.layout-lg-navbar-fixed.layout-fixed .wrapper .brand-link.text-sm~.sidebar,.text-sm .layout-lg-navbar-fixed.layout-fixed .wrapper .brand-link~.sidebar{margin-top:calc(2.62475rem + 1px)}.layout-lg-navbar-fixed.layout-fixed.text-sm .wrapper .control-sidebar{top:calc(2.62475rem + 1px)}.layout-lg-navbar-fixed.layout-fixed.text-sm .wrapper .sidebar{margin-top:calc(2.62475rem + 1px)}.layout-lg-navbar-fixed .wrapper .control-sidebar{top:0}.layout-lg-navbar-fixed .wrapper a.anchor{display:block;position:relative;top:calc(-4.164rem + -1px)}.layout-lg-navbar-fixed .wrapper.sidebar-collapse .brand-link{height:calc(3.164rem + 1px);transition:width .3s ease-in-out;width:5.4rem}.layout-lg-navbar-fixed .wrapper.sidebar-collapse .brand-link.text-sm,.text-sm .layout-lg-navbar-fixed .wrapper.sidebar-collapse .brand-link{height:calc(2.62475rem + 1px)}.layout-lg-navbar-fixed .wrapper.sidebar-collapse .main-sidebar:hover .brand-link{transition:width .3s ease-in-out;width:260px}.layout-lg-navbar-fixed .wrapper .brand-link{overflow:hidden;position:fixed;top:0;transition:width .3s ease-in-out;width:260px;z-index:1035}.layout-lg-navbar-fixed .wrapper .sidebar-dark-primary .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-lg-navbar-fixed .wrapper .sidebar-light-primary .brand-link:not([class*=navbar]){background-color:#fff}.layout-lg-navbar-fixed .wrapper .sidebar-dark-secondary .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-lg-navbar-fixed .wrapper .sidebar-light-secondary .brand-link:not([class*=navbar]){background-color:#fff}.layout-lg-navbar-fixed .wrapper .sidebar-dark-success .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-lg-navbar-fixed .wrapper .sidebar-light-success .brand-link:not([class*=navbar]){background-color:#fff}.layout-lg-navbar-fixed .wrapper .sidebar-dark-info .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-lg-navbar-fixed .wrapper .sidebar-light-info .brand-link:not([class*=navbar]){background-color:#fff}.layout-lg-navbar-fixed .wrapper .sidebar-dark-warning .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-lg-navbar-fixed .wrapper .sidebar-light-warning .brand-link:not([class*=navbar]){background-color:#fff}.layout-lg-navbar-fixed .wrapper .sidebar-dark-danger .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-lg-navbar-fixed .wrapper .sidebar-light-danger .brand-link:not([class*=navbar]){background-color:#fff}.layout-lg-navbar-fixed .wrapper .sidebar-dark-light .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-lg-navbar-fixed .wrapper .sidebar-light-light .brand-link:not([class*=navbar]){background-color:#fff}.layout-lg-navbar-fixed .wrapper .sidebar-dark-dark .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-lg-navbar-fixed .wrapper .sidebar-light-dark .brand-link:not([class*=navbar]){background-color:#fff}.layout-lg-navbar-fixed .wrapper .content-wrapper{margin-top:calc(3.164rem + 1px)}.layout-lg-navbar-fixed .wrapper .main-header.text-sm~.content-wrapper,.text-sm .layout-lg-navbar-fixed .wrapper .main-header~.content-wrapper{margin-top:calc(2.62475rem + 1px)}.layout-lg-navbar-fixed .wrapper .main-header{left:0;position:fixed;right:0;top:0;z-index:1037}.layout-lg-navbar-fixed.text-sm .wrapper .content-wrapper{margin-top:calc(2.62475rem + 1px)}body:not(.layout-fixed).layout-lg-navbar-fixed .wrapper .main-sidebar{margin-top:calc(-3.164rem + -1px)}body:not(.layout-fixed).layout-lg-navbar-fixed .wrapper .main-sidebar .sidebar{margin-top:calc(3.164rem + 1px)}body:not(.layout-fixed).layout-lg-navbar-fixed.text-sm .wrapper .main-sidebar{margin-top:calc(-2.62475rem + -1px)}body:not(.layout-fixed).layout-lg-navbar-fixed.text-sm .wrapper .main-sidebar .sidebar{margin-top:calc(2.62475rem + 1px)}.layout-lg-navbar-not-fixed .wrapper .brand-link{position:static}.layout-lg-navbar-not-fixed .wrapper .content-wrapper,.layout-lg-navbar-not-fixed .wrapper .sidebar{margin-top:0}.layout-lg-navbar-not-fixed .wrapper .main-header{position:static}.layout-lg-navbar-not-fixed.layout-fixed .wrapper .sidebar{margin-top:0}}@media (min-width:1200px){.layout-xl-navbar-fixed.layout-fixed .wrapper .control-sidebar{top:calc(3.164rem + 1px)}.layout-xl-navbar-fixed.layout-fixed .wrapper .main-header.text-sm~.control-sidebar,.text-sm .layout-xl-navbar-fixed.layout-fixed .wrapper .main-header~.control-sidebar{top:calc(2.62475rem + 1px)}.layout-xl-navbar-fixed.layout-fixed .wrapper .sidebar{margin-top:calc(3.164rem + 1px)}.layout-xl-navbar-fixed.layout-fixed .wrapper .brand-link.text-sm~.sidebar,.text-sm .layout-xl-navbar-fixed.layout-fixed .wrapper .brand-link~.sidebar{margin-top:calc(2.62475rem + 1px)}.layout-xl-navbar-fixed.layout-fixed.text-sm .wrapper .control-sidebar{top:calc(2.62475rem + 1px)}.layout-xl-navbar-fixed.layout-fixed.text-sm .wrapper .sidebar{margin-top:calc(2.62475rem + 1px)}.layout-xl-navbar-fixed .wrapper .control-sidebar{top:0}.layout-xl-navbar-fixed .wrapper a.anchor{display:block;position:relative;top:calc(-4.164rem + -1px)}.layout-xl-navbar-fixed .wrapper.sidebar-collapse .brand-link{height:calc(3.164rem + 1px);transition:width .3s ease-in-out;width:5.4rem}.layout-xl-navbar-fixed .wrapper.sidebar-collapse .brand-link.text-sm,.text-sm .layout-xl-navbar-fixed .wrapper.sidebar-collapse .brand-link{height:calc(2.62475rem + 1px)}.layout-xl-navbar-fixed .wrapper.sidebar-collapse .main-sidebar:hover .brand-link{transition:width .3s ease-in-out;width:260px}.layout-xl-navbar-fixed .wrapper .brand-link{overflow:hidden;position:fixed;top:0;transition:width .3s ease-in-out;width:260px;z-index:1035}.layout-xl-navbar-fixed .wrapper .sidebar-dark-primary .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-xl-navbar-fixed .wrapper .sidebar-light-primary .brand-link:not([class*=navbar]){background-color:#fff}.layout-xl-navbar-fixed .wrapper .sidebar-dark-secondary .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-xl-navbar-fixed .wrapper .sidebar-light-secondary .brand-link:not([class*=navbar]){background-color:#fff}.layout-xl-navbar-fixed .wrapper .sidebar-dark-success .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-xl-navbar-fixed .wrapper .sidebar-light-success .brand-link:not([class*=navbar]){background-color:#fff}.layout-xl-navbar-fixed .wrapper .sidebar-dark-info .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-xl-navbar-fixed .wrapper .sidebar-light-info .brand-link:not([class*=navbar]){background-color:#fff}.layout-xl-navbar-fixed .wrapper .sidebar-dark-warning .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-xl-navbar-fixed .wrapper .sidebar-light-warning .brand-link:not([class*=navbar]){background-color:#fff}.layout-xl-navbar-fixed .wrapper .sidebar-dark-danger .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-xl-navbar-fixed .wrapper .sidebar-light-danger .brand-link:not([class*=navbar]){background-color:#fff}.layout-xl-navbar-fixed .wrapper .sidebar-dark-light .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-xl-navbar-fixed .wrapper .sidebar-light-light .brand-link:not([class*=navbar]){background-color:#fff}.layout-xl-navbar-fixed .wrapper .sidebar-dark-dark .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-xl-navbar-fixed .wrapper .sidebar-light-dark .brand-link:not([class*=navbar]){background-color:#fff}.layout-xl-navbar-fixed .wrapper .content-wrapper{margin-top:calc(3.164rem + 1px)}.layout-xl-navbar-fixed .wrapper .main-header.text-sm~.content-wrapper,.text-sm .layout-xl-navbar-fixed .wrapper .main-header~.content-wrapper{margin-top:calc(2.62475rem + 1px)}.layout-xl-navbar-fixed .wrapper .main-header{left:0;position:fixed;right:0;top:0;z-index:1037}.layout-xl-navbar-fixed.text-sm .wrapper .content-wrapper{margin-top:calc(2.62475rem + 1px)}body:not(.layout-fixed).layout-xl-navbar-fixed .wrapper .main-sidebar{margin-top:calc(-3.164rem + -1px)}body:not(.layout-fixed).layout-xl-navbar-fixed .wrapper .main-sidebar .sidebar{margin-top:calc(3.164rem + 1px)}body:not(.layout-fixed).layout-xl-navbar-fixed.text-sm .wrapper .main-sidebar{margin-top:calc(-2.62475rem + -1px)}body:not(.layout-fixed).layout-xl-navbar-fixed.text-sm .wrapper .main-sidebar .sidebar{margin-top:calc(2.62475rem + 1px)}.layout-xl-navbar-not-fixed .wrapper .brand-link{position:static}.layout-xl-navbar-not-fixed .wrapper .content-wrapper,.layout-xl-navbar-not-fixed .wrapper .sidebar{margin-top:0}.layout-xl-navbar-not-fixed .wrapper .main-header{position:static}.layout-xl-navbar-not-fixed.layout-fixed .wrapper .sidebar{margin-top:0}}.layout-footer-not-fixed .wrapper .content-wrapper{margin-bottom:0}.layout-footer-fixed .wrapper .control-sidebar{bottom:0}.layout-footer-fixed .wrapper .main-footer{bottom:0;left:0;position:fixed;right:0;z-index:1032}.layout-footer-fixed .wrapper .content-wrapper{padding-bottom:3.45rem}.layout-footer-not-fixed .wrapper .main-footer{position:static}@media (min-width:576px){.layout-sm-footer-fixed .wrapper .control-sidebar{bottom:0}.layout-sm-footer-fixed .wrapper .main-footer{bottom:0;left:0;position:fixed;right:0;z-index:1032}.layout-sm-footer-fixed .wrapper .content-wrapper{padding-bottom:3.45rem}.layout-sm-footer-not-fixed .wrapper .main-footer{position:static}}@media (min-width:768px){.layout-md-footer-fixed .wrapper .control-sidebar{bottom:0}.layout-md-footer-fixed .wrapper .main-footer{bottom:0;left:0;position:fixed;right:0;z-index:1032}.layout-md-footer-fixed .wrapper .content-wrapper{padding-bottom:3.45rem}.layout-md-footer-not-fixed .wrapper .main-footer{position:static}}@media (min-width:992px){.layout-lg-footer-fixed .wrapper .control-sidebar{bottom:0}.layout-lg-footer-fixed .wrapper .main-footer{bottom:0;left:0;position:fixed;right:0;z-index:1032}.layout-lg-footer-fixed .wrapper .content-wrapper{padding-bottom:3.45rem}.layout-lg-footer-not-fixed .wrapper .main-footer{position:static}}@media (min-width:1200px){.layout-xl-footer-fixed .wrapper .control-sidebar{bottom:0}.layout-xl-footer-fixed .wrapper .main-footer{bottom:0;left:0;position:fixed;right:0;z-index:1032}.layout-xl-footer-fixed .wrapper .content-wrapper{padding-bottom:3.45rem}.layout-xl-footer-not-fixed .wrapper .main-footer{position:static}}.layout-top-nav .wrapper{margin-left:0}.layout-top-nav .wrapper .main-header .brand-image{margin-top:-.5rem;margin-right:.2rem;height:33px}.layout-top-nav .wrapper .main-sidebar{bottom:inherit;height:inherit}.layout-top-nav .wrapper .content-wrapper,.layout-top-nav .wrapper .main-footer,.layout-top-nav .wrapper .main-header,body.sidebar-collapse:not(.sidebar-mini-md):not(.sidebar-mini) .content-wrapper,body.sidebar-collapse:not(.sidebar-mini-md):not(.sidebar-mini) .content-wrapper:before,body.sidebar-collapse:not(.sidebar-mini-md):not(.sidebar-mini) .main-footer,body.sidebar-collapse:not(.sidebar-mini-md):not(.sidebar-mini) .main-footer:before,body.sidebar-collapse:not(.sidebar-mini-md):not(.sidebar-mini) .main-header,body.sidebar-collapse:not(.sidebar-mini-md):not(.sidebar-mini) .main-header:before{margin-left:0}@media (min-width:768px){body:not(.sidebar-mini-md) .content-wrapper,body:not(.sidebar-mini-md) .main-footer,body:not(.sidebar-mini-md) .main-header{transition:margin-left .3s ease-in-out;margin-left:260px}}@media (min-width:768px) and (prefers-reduced-motion:reduce){body:not(.sidebar-mini-md) .content-wrapper,body:not(.sidebar-mini-md) .main-footer,body:not(.sidebar-mini-md) .main-header{transition:none}}@media (min-width:768px){.sidebar-collapse body:not(.sidebar-mini-md) .content-wrapper,.sidebar-collapse body:not(.sidebar-mini-md) .main-footer,.sidebar-collapse body:not(.sidebar-mini-md) .main-header{margin-left:0}}@media (max-width:991.98px){body:not(.sidebar-mini-md) .content-wrapper,body:not(.sidebar-mini-md) .content-wrapper:before,body:not(.sidebar-mini-md) .main-footer,body:not(.sidebar-mini-md) .main-footer:before,body:not(.sidebar-mini-md) .main-header,body:not(.sidebar-mini-md) .main-header:before{margin-left:0}}@media (min-width:768px){.sidebar-mini-md .content-wrapper,.sidebar-mini-md .main-footer,.sidebar-mini-md .main-header{transition:margin-left .3s ease-in-out;margin-left:260px}}@media (min-width:768px) and (prefers-reduced-motion:reduce){.sidebar-mini-md .content-wrapper,.sidebar-mini-md .main-footer,.sidebar-mini-md .main-header{transition:none}}@media (min-width:768px){.sidebar-collapse .sidebar-mini-md .content-wrapper,.sidebar-collapse .sidebar-mini-md .main-footer,.sidebar-collapse .sidebar-mini-md .main-header{margin-left:5.4rem}}@media (max-width:991.98px){.sidebar-mini-md .content-wrapper,.sidebar-mini-md .content-wrapper:before,.sidebar-mini-md .main-footer,.sidebar-mini-md .main-footer:before,.sidebar-mini-md .main-header,.sidebar-mini-md .main-header:before{margin-left:5.4rem}}.content-wrapper{background:#f4f6f9}.content-wrapper>.content{padding:0 1rem}.main-sidebar,.main-sidebar:before{transition:margin-left .3s ease-in-out,width .3s ease-in-out;width:260px}@media (prefers-reduced-motion:reduce){.main-sidebar,.main-sidebar:before{transition:none}}.sidebar-collapse:not(.sidebar-mini):not(.sidebar-mini-md) .main-sidebar,.sidebar-collapse:not(.sidebar-mini):not(.sidebar-mini-md) .main-sidebar:before{box-shadow:none!important}.sidebar-collapse .main-sidebar,.sidebar-collapse .main-sidebar:before{margin-left:-260px}.sidebar-collapse .main-sidebar .nav-sidebar.nav-child-indent .nav-treeview{padding:0}@media (max-width:767.98px){.main-sidebar,.main-sidebar:before{box-shadow:none!important;margin-left:-260px}.sidebar-open .main-sidebar,.sidebar-open .main-sidebar:before{margin-left:0}}:not(.layout-fixed) .main-sidebar{height:inherit;min-height:100%;position:absolute;top:0}.layout-fixed .brand-link{width:260px}.layout-fixed .main-sidebar{left:0}.layout-fixed .control-sidebar,.layout-fixed .main-sidebar{bottom:0;float:none;height:100vh;position:fixed;top:0}.layout-fixed .control-sidebar .control-sidebar-content{height:calc(100vh - 3.164rem - 1px)}@supports (-webkit-touch-callout:none){.layout-fixed .main-sidebar{height:inherit}}.main-footer{background:transparent;border-top:0 solid #dae1e7;padding:.5rem 1rem;font-size:90%}.main-footer.text-sm,.text-sm .main-footer{padding:.812rem}.content-header{padding:15px 1rem}.text-sm .content-header{padding:10px 1rem}.content-header h1{font-size:1.8rem;margin:0}.text-sm .content-header h1{font-size:1.5rem}.content-header .breadcrumb{background:transparent;line-height:1.8rem;margin-bottom:0;padding:0;font-size:97%}.text-sm .content-header .breadcrumb{line-height:1.5rem}.hold-transition .content-wrapper,.hold-transition .control-sidebar,.hold-transition .control-sidebar *,.hold-transition .main-footer,.hold-transition .main-header,.hold-transition .main-sidebar,.hold-transition .main-sidebar *{transition:none!important}.main-header{border-bottom:1px solid #dae1e7;z-index:1034}.main-header .nav-link{height:2.164rem;position:relative}.main-header.text-sm .nav-link,.text-sm .main-header .nav-link{height:1.62475rem;padding:.35rem .5rem}.main-header.text-sm .nav-link>.fa,.main-header.text-sm .nav-link>.fab,.main-header.text-sm .nav-link>.far,.main-header.text-sm .nav-link>.fas,.main-header.text-sm .nav-link>.glyphicon,.main-header.text-sm .nav-link>.ion,.text-sm .main-header .nav-link>.fa,.text-sm .main-header .nav-link>.fab,.text-sm .main-header .nav-link>.far,.text-sm .main-header .nav-link>.fas,.text-sm .main-header .nav-link>.glyphicon,.text-sm .main-header .nav-link>.ion{font-size:1rem}.main-header .navbar-nav .nav-item{margin:0}.main-header .navbar-nav[class*=-right] .dropdown-menu{left:auto;margin-top:-3px;right:0}@media (max-width:575.98px){.main-header .navbar-nav[class*=-right] .dropdown-menu{left:0;right:auto}}.navbar-img{height:calc(3.164rem + 1px)/2;width:auto}.navbar-badge{font-size:.6rem;font-weight:300;padding:2px 4px;position:absolute;right:5px;top:9px}.btn-navbar{background-color:transparent;border-left-width:0}.form-control-navbar{border-right-width:0}.form-control-navbar+.input-group-append{margin-left:0}.btn-navbar,.form-control-navbar{transition:none}.navbar-dark .btn-navbar,.navbar-dark .form-control-navbar{background-color:hsla(0,0%,100%,.2);border:0}.navbar-dark .form-control-navbar::-moz-placeholder{color:hsla(0,0%,100%,.6)}.navbar-dark .form-control-navbar:-ms-input-placeholder{color:hsla(0,0%,100%,.6)}.navbar-dark .form-control-navbar::placeholder{color:hsla(0,0%,100%,.6)}.navbar-dark .form-control-navbar+.input-group-append>.btn-navbar{color:hsla(0,0%,100%,.6)}.navbar-dark .form-control-navbar:focus,.navbar-dark .form-control-navbar:focus+.input-group-append .btn-navbar{background-color:hsla(0,0%,100%,.6);border:0!important;color:#1e1e1e}.navbar-light .btn-navbar,.navbar-light .form-control-navbar{background-color:#b4bac2;border:0}.navbar-light .form-control-navbar::-moz-placeholder{color:rgba(0,0,0,.6)}.navbar-light .form-control-navbar:-ms-input-placeholder{color:rgba(0,0,0,.6)}.navbar-light .form-control-navbar::placeholder{color:rgba(0,0,0,.6)}.navbar-light .form-control-navbar+.input-group-append>.btn-navbar{color:rgba(0,0,0,.6)}.navbar-light .form-control-navbar:focus,.navbar-light .form-control-navbar:focus+.input-group-append .btn-navbar{background-color:#ededed;border:0!important;color:#1e1e1e}.brand-link{display:block;font-size:2rem;line-height:1.25;padding:.132rem .5rem;transition:width .3s ease-in-out;white-space:nowrap}.brand-link:hover{color:#fff;text-decoration:none}.text-sm .brand-link{font-size:inherit}[class*=sidebar-dark] .brand-link{border-bottom:0;color:hsla(0,0%,100%,.8)}[class*=sidebar-light] .brand-link{border-bottom:0;color:rgba(34,41,47,.8)}.brand-link .brand-image{float:left;line-height:.8;margin-left:.8rem;margin-right:.5rem;margin-top:-3px;max-height:33px;width:auto}.brand-link .brand-image-xs{float:left;line-height:.8;margin-top:-.1rem;max-height:33px;width:auto}.brand-link .brand-image-xl{line-height:.8;max-height:40px;width:auto}.brand-link.text-sm .brand-image,.text-sm .brand-link .brand-image{height:29px;margin-bottom:-.25rem;margin-left:.95rem;margin-top:-.25rem}.brand-link.text-sm .brand-image-xs,.text-sm .brand-link .brand-image-xs{margin-top:-.2rem;max-height:29px}.brand-link.text-sm .brand-image-xl,.text-sm .brand-link .brand-image-xl{margin-top:-.225rem;max-height:38px}.main-sidebar{height:100vh;overflow-y:hidden;z-index:1038}.main-sidebar a:-moz-focusring{border:0;outline:none}.main-sidebar .nav .nav-item .nav-link{padding:10px 10px 10px 25px!important}.main-sidebar .nav-treeview.nav .nav-item .nav-link{padding:5px 10px 7px 25px!important}.sidebar{height:calc(100% - 3.164rem - 1px);overflow-y:auto;padding:0 .5rem}.user-panel{position:relative}[class*=sidebar-dark] .user-panel{border-bottom:1px solid #3c4853}[class*=sidebar-light] .user-panel{border-bottom:1px solid #dae1e7}.user-panel,.user-panel .info{overflow:hidden;white-space:nowrap}.user-panel .image{display:inline-block;padding-left:.3rem}.user-panel img{height:auto;width:2.5666666667rem}.user-panel .info{display:inline-block;padding:5px 5px 5px 10px}.user-panel .dropdown-menu,.user-panel .status{font-size:1rem}.nav-sidebar .nav-item>.nav-link{margin-bottom:.2rem}.nav-sidebar .nav-item>.nav-link .right{transition:transform .3s ease-in-out}@media (prefers-reduced-motion:reduce){.nav-sidebar .nav-item>.nav-link .right{transition:none}}.nav-sidebar .nav-link>.right,.nav-sidebar .nav-link>p>.right{position:absolute;right:1rem;top:.9rem}.nav-sidebar .nav-link>.right i,.nav-sidebar .nav-link>.right span,.nav-sidebar .nav-link>p>.right i,.nav-sidebar .nav-link>p>.right span{margin-left:.5rem}.nav-sidebar .nav-link>.right:nth-child(2),.nav-sidebar .nav-link>p>.right:nth-child(2){right:2.2rem}.nav-sidebar .menu-open>.nav-treeview{display:block;border-radius:0}.nav-sidebar .menu-open>.nav-link i.right{transform:rotate(-90deg)}.nav-sidebar>.nav-item{margin-bottom:0}.nav-sidebar>.nav-item .nav-icon{margin-left:.05rem;font-size:1.2rem;margin-right:.2rem;text-align:center;width:2.4rem}.nav-sidebar>.nav-item .nav-icon.fa,.nav-sidebar>.nav-item .nav-icon.fab,.nav-sidebar>.nav-item .nav-icon.far,.nav-sidebar>.nav-item .nav-icon.fas,.nav-sidebar>.nav-item .nav-icon.glyphicon,.nav-sidebar>.nav-item .nav-icon.ion{font-size:1.1rem}.nav-sidebar>.nav-item .float-right{margin-top:3px}.nav-sidebar .nav-treeview{display:none;list-style:none;padding:0}.nav-sidebar .nav-treeview>.nav-item>.nav-link>.nav-icon{width:2.4rem}.nav-sidebar.nav-child-indent .nav-treeview{transition:padding .3s ease-in-out;padding-left:1rem}.text-sm .nav-sidebar.nav-child-indent .nav-treeview{padding-left:.5rem}.nav-sidebar.nav-child-indent.nav-legacy .nav-treeview .nav-treeview{padding-left:2rem;margin-left:-1rem}.text-sm .nav-sidebar.nav-child-indent.nav-legacy .nav-treeview .nav-treeview{padding-left:1rem;margin-left:-.5rem}.nav-sidebar .nav-header{font-size:.9rem;padding:.357rem}.nav-sidebar .nav-header:not(:first-of-type){padding:1.7rem 1rem .5rem}.nav-sidebar .nav-link p{display:inline-block;margin:0}#sidebar-overlay{background-color:rgba(34,41,47,.1);bottom:0;display:none;left:0;position:fixed;right:0;top:0;z-index:1037}@media (max-width:991.98px){.sidebar-open #sidebar-overlay{display:block}}[class*=sidebar-light-]{background-color:#fff}[class*=sidebar-light-] .user-panel a:hover{color:#555}[class*=sidebar-light-] .user-panel .status,[class*=sidebar-light-] .user-panel .status:active,[class*=sidebar-light-] .user-panel .status:focus,[class*=sidebar-light-] .user-panel .status:hover{background:transparent;color:#555}[class*=sidebar-light-] .user-panel .dropdown-menu{border-color:transparent}[class*=sidebar-light-] .user-panel .dropdown-item{color:#626262}[class*=sidebar-light-] .nav-sidebar>.nav-item>.nav-link:active,[class*=sidebar-light-] .nav-sidebar>.nav-item>.nav-link:focus{color:#555}[class*=sidebar-light-] .nav-sidebar>.nav-item>.nav-link i{margin-right:.75rem;font-size:1.2rem}[class*=sidebar-light-] .nav-sidebar>.nav-item>.nav-link p i{margin-right:0;margin-top:1px}[class*=sidebar-light-] .nav-sidebar>.nav-item.menu-open>.nav-link,[class*=sidebar-light-] .nav-sidebar>.nav-item:hover>.nav-link{background-color:transparent;color:#555}[class*=sidebar-light-] .nav-sidebar>.nav-item>.nav-link.active{color:#fff}[class*=sidebar-light-] .nav-sidebar>.nav-item>.nav-treeview{background:transparent}[class*=sidebar-light-] .nav-header{background:inherit;color:#484848}[class*=sidebar-light-] .sidebar a{color:#555}[class*=sidebar-light-] .sidebar a:hover{text-decoration:none}[class*=sidebar-light-] .nav-treeview>.nav-item>.nav-link{color:#555}[class*=sidebar-light-] .nav-treeview>.nav-item>.nav-link i{margin-right:.75rem;margin-left:3px}[class*=sidebar-light-] .nav-treeview>.nav-item>.nav-link p i{margin-right:0}[class*=sidebar-light-] .nav-treeview>.nav-item>.nav-link.active,[class*=sidebar-light-] .nav-treeview>.nav-item>.nav-link.active:hover{background-color:transparent!important;background-image:linear-gradient(118deg,rgba(78,152,118,.95),rgba(78,152,118,.7));color:#fff;box-shadow:0 0 8px 1px rgba(78,152,118,.7)}[class*=sidebar-light-] .nav-treeview>.nav-item>.nav-link:hover{background-color:transparent}[class*=sidebar-light-] .nav-flat .nav-item .nav-treeview .nav-treeview,[class*=sidebar-light-] .nav-flat .nav-item .nav-treeview>.nav-item>.nav-link,[class*=sidebar-light-] .nav-flat .nav-item .nav-treeview>.nav-item>.nav-link.active{border-color:linear-gradient(118deg,#4e9876,rgba(78,152,118,.7))}[class*=sidebar-dark-]{background-image:linear-gradient(0deg,#77889f,#3e4958)}[class*=sidebar-dark-] .nav-treeview.nav .nav-item .nav-link{font-size:1rem!important;margin-bottom:0}[class*=sidebar-dark-] .nav-sidebar .nav-link>p>.right{right:.5rem}[class*=sidebar-dark-] .user-panel a:hover{color:hsla(0,0%,100%,.95)}[class*=sidebar-dark-] .user-panel .status,[class*=sidebar-dark-] .user-panel .status:active,[class*=sidebar-dark-] .user-panel .status:focus,[class*=sidebar-dark-] .user-panel .status:hover{background:transparent;color:hsla(0,0%,100%,.95)}[class*=sidebar-dark-] .user-panel .dropdown-menu{border-color:transparent}[class*=sidebar-dark-] .user-panel .dropdown-item{color:#626262}[class*=sidebar-dark-] .nav-sidebar>.nav-item>.nav-link:active{color:#fff;font-weight:700}[class*=sidebar-dark-] .nav-sidebar>.nav-item>.nav-link:hover{color:hsla(0,0%,100%,.95)}[class*=sidebar-dark-] .nav-sidebar>.nav-item i{margin-right:.75rem;color:hsla(0,0%,100%,.95)}[class*=sidebar-dark-] .nav-sidebar>.nav-item.menu-open>.nav-link,[class*=sidebar-dark-] .nav-sidebar>.nav-item:hover>.nav-link,[class*=sidebar-dark-] .nav-sidebar>.nav-item>.nav-link:focus{background-color:transparent;color:hsla(0,0%,100%,.95)}[class*=sidebar-dark-] .nav-sidebar>.nav-item>.nav-link.active{color:#fff;background:transparent;font-weight:700}[class*=sidebar-dark-] .nav-header{background:inherit;color:hsla(0,0%,100%,.95)}[class*=sidebar-dark-] .sidebar a{color:hsla(0,0%,100%,.95)}[class*=sidebar-dark-] .sidebar a:focus,[class*=sidebar-dark-] .sidebar a:hover{text-decoration:none}[class*=sidebar-dark-] .nav-treeview>.nav-item>.nav-link{color:hsla(0,0%,100%,.95)}[class*=sidebar-dark-] .nav-treeview>.nav-item>.nav-link.active,[class*=sidebar-dark-] .nav-treeview>.nav-item>.nav-link.active:focus,[class*=sidebar-dark-] .nav-treeview>.nav-item>.nav-link.active:hover,[class*=sidebar-dark-] .nav-treeview>.nav-item>.nav-link:focus,[class*=sidebar-dark-] .nav-treeview>.nav-item>.nav-link:hover{background-color:transparent;color:#fff;font-weight:700}[class*=sidebar-dark-] .nav-flat .nav-item .nav-treeview .nav-treeview,[class*=sidebar-dark-] .nav-flat .nav-item .nav-treeview>.nav-item>.nav-link,[class*=sidebar-dark-] .nav-flat .nav-item .nav-treeview>.nav-item>.nav-link.active{border-color:transparent}.sidebar-light-primary .nav-item>.nav-link.active{background-color:transparent!important;background-image:linear-gradient(118deg,rgba(78,152,118,.95),rgba(78,152,118,.7));color:#fff;box-shadow:0 0 8px 1px rgba(78,152,118,.7)}.sidebar-light-primary .active-bg-light .nav-item>.nav-link.active{background-color:rgba(78,152,118,.15)!important;color:#4e9876!important;font-weight:700;box-shadow:0 0 8px 1px rgba(78,152,118,.15)}.sidebar-mini-md .main-sidebar.sidebar-focused .nav-compact.nav-sidebar.nav-child-indent:not(.nav-flat) .nav-treeview,.sidebar-mini-md .main-sidebar:not(.sidebar-no-expand) .nav-compact.nav-sidebar.nav-child-indent:not(.nav-flat) .nav-treeview,.sidebar-mini-md .main-sidebar:not(.sidebar-no-expand):hover .nav-compact.nav-sidebar.nav-child-indent:not(.nav-flat) .nav-treeview,.sidebar-mini .main-sidebar.sidebar-focused .nav-compact.nav-sidebar.nav-child-indent:not(.nav-flat) .nav-treeview,.sidebar-mini .main-sidebar:not(.sidebar-no-expand) .nav-compact.nav-sidebar.nav-child-indent:not(.nav-flat) .nav-treeview,.sidebar-mini .main-sidebar:not(.sidebar-no-expand):hover .nav-compact.nav-sidebar.nav-child-indent:not(.nav-flat) .nav-treeview{padding-left:1rem;margin-left:-.5rem}.nav-flat{margin:-.25rem -.5rem 0}.nav-flat .nav-item>.nav-link{border-radius:0;margin-bottom:0}.nav-flat .nav-item>.nav-link>.nav-icon{margin-left:.55rem}.nav-flat:not(.nav-child-indent) .nav-treeview .nav-item>.nav-link>.nav-icon{margin-left:.4rem}.nav-flat.nav-child-indent .nav-treeview{padding-left:0}.nav-flat.nav-child-indent .nav-treeview .nav-icon{margin-left:.85rem}.nav-flat.nav-child-indent .nav-treeview .nav-treeview{border-left:.2rem solid}.nav-flat.nav-child-indent .nav-treeview .nav-treeview .nav-icon{margin-left:1.15rem}.nav-flat.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-icon{margin-left:1.45rem}.nav-flat.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-icon{margin-left:1.75rem}.nav-flat.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-icon{margin-left:2.05rem}.sidebar-collapse .nav-flat.nav-child-indent .nav-treeview .nav-icon{margin-left:.55rem}.sidebar-collapse .nav-flat.nav-child-indent .nav-treeview .nav-link{padding-left:.3rem}.sidebar-collapse .nav-flat.nav-child-indent .nav-treeview .nav-treeview .nav-icon{margin-left:.35rem}.sidebar-collapse .nav-flat.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-icon{margin-left:.15rem}.sidebar-collapse .nav-flat.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-icon{margin-left:-.15rem}.sidebar-collapse .nav-flat.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-icon{margin-left:-.35rem}.sidebar-mini-md .main-sidebar.sidebar-focused .nav-flat.nav-compact.nav-sidebar .nav-treeview .nav-icon,.sidebar-mini-md .main-sidebar:not(.sidebar-no-expand):hover .nav-flat.nav-compact.nav-sidebar .nav-treeview .nav-icon,.sidebar-mini .main-sidebar.sidebar-focused .nav-flat.nav-compact.nav-sidebar .nav-treeview .nav-icon,.sidebar-mini .main-sidebar:not(.sidebar-no-expand):hover .nav-flat.nav-compact.nav-sidebar .nav-treeview .nav-icon{margin-left:.4rem}.sidebar-mini-md .main-sidebar.sidebar-focused .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-icon,.sidebar-mini-md .main-sidebar:not(.sidebar-no-expand):hover .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-icon,.sidebar-mini .main-sidebar.sidebar-focused .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-icon,.sidebar-mini .main-sidebar:not(.sidebar-no-expand):hover .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-icon{margin-left:.85rem}.sidebar-mini-md .main-sidebar.sidebar-focused .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-icon,.sidebar-mini-md .main-sidebar:not(.sidebar-no-expand):hover .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-icon,.sidebar-mini .main-sidebar.sidebar-focused .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-icon,.sidebar-mini .main-sidebar:not(.sidebar-no-expand):hover .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-icon{margin-left:1.15rem}.sidebar-mini-md .main-sidebar.sidebar-focused .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-icon,.sidebar-mini-md .main-sidebar:not(.sidebar-no-expand):hover .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-icon,.sidebar-mini .main-sidebar.sidebar-focused .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-icon,.sidebar-mini .main-sidebar:not(.sidebar-no-expand):hover .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-icon{margin-left:1.45rem}.sidebar-mini-md .main-sidebar.sidebar-focused .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-icon,.sidebar-mini-md .main-sidebar:not(.sidebar-no-expand):hover .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-icon,.sidebar-mini .main-sidebar.sidebar-focused .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-icon,.sidebar-mini .main-sidebar:not(.sidebar-no-expand):hover .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-icon{margin-left:1.75rem}.sidebar-mini-md .main-sidebar.sidebar-focused .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-icon,.sidebar-mini-md .main-sidebar:not(.sidebar-no-expand):hover .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-icon,.sidebar-mini .main-sidebar.sidebar-focused .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-icon,.sidebar-mini .main-sidebar:not(.sidebar-no-expand):hover .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-icon{margin-left:2.05rem}.nav-flat .nav-icon{transition:margin-left .3s ease-in-out}@media (prefers-reduced-motion:reduce){.nav-flat .nav-icon{transition:none}}.nav-flat .nav-treeview .nav-icon{margin-left:-.2rem}.nav-flat.nav-sidebar>.nav-item .nav-treeview,.nav-flat.nav-sidebar>.nav-item>.nav-treeview{background:hsla(0,0%,100%,.05)}.nav-flat.nav-sidebar>.nav-item .nav-treeview .nav-item>.nav-link,.nav-flat.nav-sidebar>.nav-item>.nav-treeview .nav-item>.nav-link{border-left:.2rem solid}.nav-legacy{margin:-.25rem -.5rem 0}.nav-legacy.nav-sidebar .nav-item>.nav-link{border-radius:0;margin-bottom:0}.nav-legacy.nav-sidebar .nav-item>.nav-link>.nav-icon{margin-left:.55rem}.text-sm .nav-legacy.nav-sidebar .nav-item>.nav-link>.nav-icon{margin-left:.75rem}.nav-legacy.nav-sidebar>.nav-item>.nav-link.active{background:inherit;border-left:3px solid transparent;box-shadow:none}.nav-legacy.nav-sidebar>.nav-item>.nav-link.active>.nav-icon{margin-left:calc(.55rem - 3px)}.text-sm .nav-legacy.nav-sidebar.nav-flat .nav-treeview .nav-item>.nav-link>.nav-icon,.text-sm .nav-legacy.nav-sidebar>.nav-item>.nav-link.active>.nav-icon{margin-left:calc(.75rem - 3px)}.sidebar-mini-md .nav-legacy>.nav-item .nav-link .nav-icon,.sidebar-mini .nav-legacy>.nav-item .nav-link .nav-icon{transition:margin-left .3s ease-in-out;margin-left:.75rem}@media (prefers-reduced-motion:reduce){.sidebar-mini-md .nav-legacy>.nav-item .nav-link .nav-icon,.sidebar-mini .nav-legacy>.nav-item .nav-link .nav-icon{transition:none}}.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused .nav-legacy.nav-child-indent .nav-treeview,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover .nav-legacy.nav-child-indent .nav-treeview,.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused .nav-legacy.nav-child-indent .nav-treeview,.sidebar-mini.sidebar-collapse .main-sidebar:hover .nav-legacy.nav-child-indent .nav-treeview{padding-left:1rem}.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused .nav-legacy.nav-child-indent .nav-treeview .nav-treeview,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover .nav-legacy.nav-child-indent .nav-treeview .nav-treeview,.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused .nav-legacy.nav-child-indent .nav-treeview .nav-treeview,.sidebar-mini.sidebar-collapse .main-sidebar:hover .nav-legacy.nav-child-indent .nav-treeview .nav-treeview{padding-left:2rem;margin-left:-1rem}.sidebar-mini-md.sidebar-collapse.text-sm .main-sidebar.sidebar-focused .nav-legacy.nav-child-indent .nav-treeview,.sidebar-mini-md.sidebar-collapse.text-sm .main-sidebar:hover .nav-legacy.nav-child-indent .nav-treeview,.sidebar-mini.sidebar-collapse.text-sm .main-sidebar.sidebar-focused .nav-legacy.nav-child-indent .nav-treeview,.sidebar-mini.sidebar-collapse.text-sm .main-sidebar:hover .nav-legacy.nav-child-indent .nav-treeview{padding-left:.5rem}.sidebar-mini-md.sidebar-collapse.text-sm .main-sidebar.sidebar-focused .nav-legacy.nav-child-indent .nav-treeview .nav-treeview,.sidebar-mini-md.sidebar-collapse.text-sm .main-sidebar:hover .nav-legacy.nav-child-indent .nav-treeview .nav-treeview,.sidebar-mini.sidebar-collapse.text-sm .main-sidebar.sidebar-focused .nav-legacy.nav-child-indent .nav-treeview .nav-treeview,.sidebar-mini.sidebar-collapse.text-sm .main-sidebar:hover .nav-legacy.nav-child-indent .nav-treeview .nav-treeview{padding-left:1rem;margin-left:-.5rem}.sidebar-mini-md.sidebar-collapse .nav-legacy>.nav-item>.nav-link .nav-icon,.sidebar-mini.sidebar-collapse .nav-legacy>.nav-item>.nav-link .nav-icon{margin-left:.55rem}.sidebar-mini-md.sidebar-collapse .nav-legacy>.nav-item>.nav-link.active>.nav-icon,.sidebar-mini.sidebar-collapse .nav-legacy>.nav-item>.nav-link.active>.nav-icon{margin-left:.36rem}.sidebar-mini-md.sidebar-collapse .nav-legacy.nav-child-indent .nav-treeview .nav-treeview,.sidebar-mini.sidebar-collapse .nav-legacy.nav-child-indent .nav-treeview .nav-treeview{padding-left:0;margin-left:0}.sidebar-mini-md.sidebar-collapse.text-sm .nav-legacy>.nav-item>.nav-link .nav-icon,.sidebar-mini.sidebar-collapse.text-sm .nav-legacy>.nav-item>.nav-link .nav-icon{margin-left:.75rem}.sidebar-mini-md.sidebar-collapse.text-sm .nav-legacy>.nav-item>.nav-link.active>.nav-icon,.sidebar-mini.sidebar-collapse.text-sm .nav-legacy>.nav-item>.nav-link.active>.nav-icon{margin-left:calc(.75rem - 3px)}[class*=sidebar-dark] .nav-legacy.nav-sidebar>.nav-item .nav-treeview,[class*=sidebar-dark] .nav-legacy.nav-sidebar>.nav-item>.nav-treeview{background:hsla(0,0%,100%,.05)}[class*=sidebar-dark] .nav-legacy.nav-sidebar>.nav-item>.nav-link.active{color:#fff}[class*=sidebar-dark] .nav-legacy .nav-treeview>.nav-item>.nav-link.active,[class*=sidebar-dark] .nav-legacy .nav-treeview>.nav-item>.nav-link:focus,[class*=sidebar-dark] .nav-legacy .nav-treeview>.nav-item>.nav-link:hover{background:none;color:#fff}[class*=sidebar-light] .nav-legacy.nav-sidebar>.nav-item .nav-treeview,[class*=sidebar-light] .nav-legacy.nav-sidebar>.nav-item>.nav-treeview{background:rgba(34,41,47,.05)}[class*=sidebar-light] .nav-legacy.nav-sidebar>.nav-item>.nav-link.active{color:#fff}[class*=sidebar-light] .nav-legacy .nav-treeview>.nav-item>.nav-link.active,[class*=sidebar-light] .nav-legacy .nav-treeview>.nav-item>.nav-link:focus,[class*=sidebar-light] .nav-legacy .nav-treeview>.nav-item>.nav-link:hover{background:none;color:#fff}.nav-collapse-hide-child .menu-open>.nav-treeview{max-height:-webkit-min-content;max-height:-moz-min-content;max-height:min-content;opacity:1}.sidebar-collapse .nav-collapse-hide-child .menu-open>.nav-treeview{max-height:0;opacity:0}.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused .nav-collapse-hide-child .menu-open>.nav-treeview,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover .nav-collapse-hide-child .menu-open>.nav-treeview,.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused .nav-collapse-hide-child .menu-open>.nav-treeview,.sidebar-mini.sidebar-collapse .main-sidebar:hover .nav-collapse-hide-child .menu-open>.nav-treeview{max-height:-webkit-min-content;max-height:-moz-min-content;max-height:min-content;opacity:1}.nav-compact .nav-header,.nav-compact .nav-link{padding-top:.1785rem;padding-bottom:.1785rem}.nav-compact .nav-header:not(:first-of-type){padding-top:.5355rem;padding-bottom:.1785rem}.nav-compact .nav-link>.right,.nav-compact .nav-link>p>.right{top:.465rem}.text-sm .nav-compact .nav-link>.right,.text-sm .nav-compact .nav-link>p>.right{top:.7rem}[class*=sidebar-dark] .btn-sidebar,[class*=sidebar-dark] .form-control-sidebar{background:#495567;border:1px solid #5e6e85;color:#fff}[class*=sidebar-dark] .btn-sidebar:focus,[class*=sidebar-dark] .form-control-sidebar:focus{border:1px solid #8695a9}[class*=sidebar-dark] .btn-sidebar:hover{background:#4e5c6e}[class*=sidebar-dark] .btn-sidebar:focus{background:#536276}[class*=sidebar-light] .btn-sidebar,[class*=sidebar-light] .form-control-sidebar{background:#f2f2f2;border:1px solid #d9d9d9;color:#2a2e30}[class*=sidebar-light] .btn-sidebar:focus,[class*=sidebar-light] .form-control-sidebar:focus{border:1px solid #b3b3b3}[class*=sidebar-light] .btn-sidebar:hover{background:#ececec}[class*=sidebar-light] .btn-sidebar:focus{background:#e6e6e6}.logo-xl,.logo-xs{opacity:1;position:absolute;visibility:visible}.logo-xl.brand-image-xs,.logo-xs.brand-image-xs{left:18px;top:12px}.logo-xl.brand-image-xl,.logo-xs.brand-image-xl{left:12px;top:6px}.logo-xs{opacity:0;visibility:hidden}.logo-xs.brand-image-xl{left:16px;top:8px}.brand-link.logo-switch:before{content:"\A0"}@media (min-width:992px){.sidebar-mini .nav-sidebar,.sidebar-mini .nav-sidebar .nav-link,.sidebar-mini .nav-sidebar>.nav-header{white-space:nowrap;overflow:hidden}.sidebar-mini.sidebar-collapse .d-hidden-mini{display:none}.sidebar-mini.sidebar-collapse .content-wrapper,.sidebar-mini.sidebar-collapse .main-footer,.sidebar-mini.sidebar-collapse .main-header{margin-left:5.4rem!important}.sidebar-mini.sidebar-collapse .nav-sidebar .nav-header{display:none}.sidebar-mini.sidebar-collapse .nav-sidebar .nav-link p{width:0}.sidebar-mini.sidebar-collapse .brand-text,.sidebar-mini.sidebar-collapse .nav-sidebar .nav-link p,.sidebar-mini.sidebar-collapse .sidebar .user-panel>.info{margin-left:-10px;opacity:0;visibility:hidden}.sidebar-mini.sidebar-collapse .logo-xl{opacity:0;visibility:hidden}.sidebar-mini.sidebar-collapse .logo-xs{display:inline-block;opacity:1;visibility:visible}.sidebar-mini.sidebar-collapse .main-sidebar{overflow-x:hidden}.sidebar-mini.sidebar-collapse .main-sidebar,.sidebar-mini.sidebar-collapse .main-sidebar:before{margin-left:0;width:5.4rem}.sidebar-mini.sidebar-collapse .main-sidebar .user-panel .image{float:none}.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused,.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused .brand-link,.sidebar-mini.sidebar-collapse .main-sidebar:hover,.sidebar-mini.sidebar-collapse .main-sidebar:hover .brand-link{width:260px}.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused .user-panel,.sidebar-mini.sidebar-collapse .main-sidebar:hover .user-panel{text-align:left}.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused .user-panel .image,.sidebar-mini.sidebar-collapse .main-sidebar:hover .user-panel .image{float:left}.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused .brand-text,.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused .logo-xl,.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused .nav-sidebar .nav-link p,.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused .user-panel>.info,.sidebar-mini.sidebar-collapse .main-sidebar:hover .brand-text,.sidebar-mini.sidebar-collapse .main-sidebar:hover .logo-xl,.sidebar-mini.sidebar-collapse .main-sidebar:hover .nav-sidebar .nav-link p,.sidebar-mini.sidebar-collapse .main-sidebar:hover .user-panel>.info{display:inline-block;margin-left:0;opacity:1;visibility:visible}.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused .logo-xs,.sidebar-mini.sidebar-collapse .main-sidebar:hover .logo-xs{opacity:0;visibility:hidden}.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused .brand-image,.sidebar-mini.sidebar-collapse .main-sidebar:hover .brand-image{margin-right:.5rem}.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused .sidebar-form,.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused .user-panel>.info,.sidebar-mini.sidebar-collapse .main-sidebar:hover .sidebar-form,.sidebar-mini.sidebar-collapse .main-sidebar:hover .user-panel>.info{display:block!important;-webkit-transform:translateZ(0)}.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused .nav-sidebar>.nav-item>.nav-link>span,.sidebar-mini.sidebar-collapse .main-sidebar:hover .nav-sidebar>.nav-item>.nav-link>span{display:inline-block!important}.sidebar-mini.sidebar-collapse .visible-sidebar-mini{display:block!important}.sidebar-mini.sidebar-collapse.layout-fixed .main-sidebar:hover .brand-link{width:260px}.sidebar-mini.sidebar-collapse.layout-fixed .brand-link{width:5.4rem}}@media (max-width:991.98px){.sidebar-mini.sidebar-collapse .main-sidebar{box-shadow:none!important}}@media (min-width:768px){.sidebar-mini-md .nav-sidebar,.sidebar-mini-md .nav-sidebar .nav-link,.sidebar-mini-md .nav-sidebar>.nav-header{white-space:nowrap;overflow:hidden}.sidebar-mini-md.sidebar-collapse .d-hidden-mini{display:none}.sidebar-mini-md.sidebar-collapse .content-wrapper,.sidebar-mini-md.sidebar-collapse .main-footer,.sidebar-mini-md.sidebar-collapse .main-header{margin-left:5.4rem!important}.sidebar-mini-md.sidebar-collapse .nav-sidebar .nav-header{display:none}.sidebar-mini-md.sidebar-collapse .nav-sidebar .nav-link p{width:0}.sidebar-mini-md.sidebar-collapse .brand-text,.sidebar-mini-md.sidebar-collapse .nav-sidebar .nav-link p,.sidebar-mini-md.sidebar-collapse .sidebar .user-panel>.info{margin-left:-10px;opacity:0;visibility:hidden}.sidebar-mini-md.sidebar-collapse .logo-xl{opacity:0;visibility:hidden}.sidebar-mini-md.sidebar-collapse .logo-xs{display:inline-block;opacity:1;visibility:visible}.sidebar-mini-md.sidebar-collapse .main-sidebar{overflow-x:hidden}.sidebar-mini-md.sidebar-collapse .main-sidebar,.sidebar-mini-md.sidebar-collapse .main-sidebar:before{margin-left:0;width:5.4rem}.sidebar-mini-md.sidebar-collapse .main-sidebar .user-panel .image{float:none}.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused,.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused .brand-link,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover .brand-link{width:260px}.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused .user-panel,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover .user-panel{text-align:left}.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused .user-panel .image,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover .user-panel .image{float:left}.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused .brand-text,.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused .logo-xl,.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused .nav-sidebar .nav-link p,.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused .user-panel>.info,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover .brand-text,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover .logo-xl,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover .nav-sidebar .nav-link p,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover .user-panel>.info{display:inline-block;margin-left:0;opacity:1;visibility:visible}.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused .logo-xs,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover .logo-xs{opacity:0;visibility:hidden}.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused .brand-image,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover .brand-image{margin-right:.5rem}.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused .sidebar-form,.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused .user-panel>.info,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover .sidebar-form,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover .user-panel>.info{display:block!important;-webkit-transform:translateZ(0)}.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused .nav-sidebar>.nav-item>.nav-link>span,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover .nav-sidebar>.nav-item>.nav-link>span{display:inline-block!important}.sidebar-mini-md.sidebar-collapse .visible-sidebar-mini{display:block!important}.sidebar-mini-md.sidebar-collapse.layout-fixed .main-sidebar:hover .brand-link{width:260px}.sidebar-mini-md.sidebar-collapse.layout-fixed .brand-link{width:5.4rem}}.sidebar-collapse .main-sidebar.sidebar-focused .nav-header,.sidebar-collapse .main-sidebar:hover .nav-header{display:inline-block}.sidebar-collapse .main-sidebar.sidebar-focused .nav .menu-open .nav-treeview,.sidebar-collapse .main-sidebar:hover .nav .menu-open .nav-treeview{display:block!important}.sidebar-collapse .main-sidebar.sidebar-focused .nav-sidebar>.nav-item>.nav-link i,.sidebar-collapse .main-sidebar:hover .nav-sidebar>.nav-item>.nav-link i{font-size:1.2rem}.sidebar-collapse .main-sidebar .nav .nav-item .nav-link{padding:10px 21px!important}.sidebar-collapse .main-sidebar .nav .menu-open .nav-treeview{display:none!important}.sidebar-collapse .header-navbar.floating-nav{width:calc(100% - 70px - 5.4rem)}.sidebar-collapse .header-navbar.fixed-top{left:5.4rem}.sidebar-collapse .nav-sidebar>.nav-item>.nav-link i{font-size:1.3rem}.sidebar-collapse .sidebar-no-expand.main-sidebar.sidebar-focused,.sidebar-collapse .sidebar-no-expand.main-sidebar:hover{width:5.4rem}.sidebar-collapse .sidebar-no-expand.main-sidebar.sidebar-focused .nav-header,.sidebar-collapse .sidebar-no-expand.main-sidebar:hover .nav-header{display:none}.sidebar-collapse .sidebar-no-expand.main-sidebar.sidebar-focused .brand-link,.sidebar-collapse .sidebar-no-expand.main-sidebar:hover .brand-link{width:5.4rem!important}.sidebar-collapse .sidebar-no-expand.main-sidebar.sidebar-focused .user-panel .image,.sidebar-collapse .sidebar-no-expand.main-sidebar:hover .user-panel .image{float:none!important}.sidebar-collapse .sidebar-no-expand.main-sidebar.sidebar-focused .logo-xs,.sidebar-collapse .sidebar-no-expand.main-sidebar:hover .logo-xs{opacity:1;visibility:visible}.sidebar-collapse .sidebar-no-expand.main-sidebar.sidebar-focused .logo-xl,.sidebar-collapse .sidebar-no-expand.main-sidebar:hover .logo-xl{opacity:0;visibility:hidden}.sidebar-collapse .sidebar-no-expand.main-sidebar.sidebar-focused .nav-sidebar.nav-child-indent .nav-treeview,.sidebar-collapse .sidebar-no-expand.main-sidebar:hover .nav-sidebar.nav-child-indent .nav-treeview{padding-left:0}.sidebar-collapse .sidebar-no-expand.main-sidebar.sidebar-focused .brand-text,.sidebar-collapse .sidebar-no-expand.main-sidebar.sidebar-focused .nav-sidebar .nav-link p,.sidebar-collapse .sidebar-no-expand.main-sidebar.sidebar-focused .user-panel>.info,.sidebar-collapse .sidebar-no-expand.main-sidebar:hover .brand-text,.sidebar-collapse .sidebar-no-expand.main-sidebar:hover .nav-sidebar .nav-link p,.sidebar-collapse .sidebar-no-expand.main-sidebar:hover .user-panel>.info{margin-left:-10px;opacity:0;visibility:hidden;width:0}.sidebar-collapse .sidebar-no-expand.main-sidebar.sidebar-focused .nav-sidebar>.nav-item .nav-icon,.sidebar-collapse .sidebar-no-expand.main-sidebar:hover .nav-sidebar>.nav-item .nav-icon{margin-right:0}.nav-sidebar{position:relative}.nav-sidebar:hover{overflow:visible}.nav-sidebar>.nav-header,.sidebar-form{overflow:hidden;text-overflow:clip}.nav-sidebar .nav-item>.nav-link{position:relative}.nav-sidebar .nav-item>.nav-link>.float-right{margin-top:-7px;position:absolute;right:10px;top:50%}@media (max-width:767.98px){.sidebar-mini-md.sidebar-collapse .main-sidebar{box-shadow:none!important}.sidebar-collapse .header-navbar.fixed-top{left:0}}@media (max-width:1201px){.sidebar-collapse .header-navbar.fixed-top{left:0}}.main-sidebar .brand-text,.main-sidebar .logo-xl,.main-sidebar .logo-xs,.sidebar .nav-link p,.sidebar .user-panel .info{transition:margin-left .3s linear,opacity .3s ease,visibility .3s ease}@media (prefers-reduced-motion:reduce){.main-sidebar .brand-text,.main-sidebar .logo-xl,.main-sidebar .logo-xs,.sidebar .nav-link p,.sidebar .user-panel .info{transition:none}}html.control-sidebar-animate{overflow-x:hidden}.control-sidebar{bottom:3.45rem;position:absolute;top:calc(3.164rem + 1px);z-index:1031}.control-sidebar,.control-sidebar:before{bottom:3.45rem;display:none;right:-260px;width:260px;transition:right .3s ease-in-out,display .3s ease-in-out}@media (prefers-reduced-motion:reduce){.control-sidebar,.control-sidebar:before{transition:none}}.control-sidebar:before{content:"";display:block;position:fixed;top:0;z-index:-1}body.text-sm .control-sidebar{bottom:3.074rem;top:calc(2.62475rem + 1px)}.main-header.text-sm~.control-sidebar{top:calc(2.62475rem + 1px)}.main-footer.text-sm~.control-sidebar{bottom:3.074rem}.control-sidebar-push-slide .content-wrapper,.control-sidebar-push-slide .main-footer{transition:margin-right .3s ease-in-out}@media (prefers-reduced-motion:reduce){.control-sidebar-push-slide .content-wrapper,.control-sidebar-push-slide .main-footer{transition:none}}.control-sidebar-open .control-sidebar{display:block}.control-sidebar-open .control-sidebar,.control-sidebar-open .control-sidebar:before{right:0}.control-sidebar-open.control-sidebar-push-slide .content-wrapper,.control-sidebar-open.control-sidebar-push-slide .main-footer,.control-sidebar-open.control-sidebar-push .content-wrapper,.control-sidebar-open.control-sidebar-push .main-footer{margin-right:260px}.control-sidebar-slide-open .control-sidebar{display:block}.control-sidebar-slide-open .control-sidebar,.control-sidebar-slide-open .control-sidebar:before{right:0;transition:right .3s ease-in-out,display .3s ease-in-out}@media (prefers-reduced-motion:reduce){.control-sidebar-slide-open .control-sidebar,.control-sidebar-slide-open .control-sidebar:before{transition:none}}.control-sidebar-slide-open.control-sidebar-push-slide .content-wrapper,.control-sidebar-slide-open.control-sidebar-push-slide .main-footer,.control-sidebar-slide-open.control-sidebar-push .content-wrapper,.control-sidebar-slide-open.control-sidebar-push .main-footer{margin-right:260px}.control-sidebar-dark,.control-sidebar-dark .nav-link,.control-sidebar-dark a{color:hsla(0,0%,100%,.95)}.control-sidebar-dark{background:#3e4958}.control-sidebar-dark a:hover,.control-sidebar-dark h1,.control-sidebar-dark h2,.control-sidebar-dark h3,.control-sidebar-dark h4,.control-sidebar-dark h5,.control-sidebar-dark h6,.control-sidebar-dark label{color:hsla(0,0%,100%,.95)}.control-sidebar-dark .nav-tabs{background-color:transparent;border-bottom:0;margin-bottom:5px}.control-sidebar-dark .nav-tabs .nav-item{margin:0}.control-sidebar-dark .nav-tabs .nav-link{border-radius:0;padding:10px 20px;position:relative;text-align:center}.control-sidebar-dark .nav-tabs .nav-link,.control-sidebar-dark .nav-tabs .nav-link.active,.control-sidebar-dark .nav-tabs .nav-link:active,.control-sidebar-dark .nav-tabs .nav-link:focus,.control-sidebar-dark .nav-tabs .nav-link:hover{border:0}.control-sidebar-dark .nav-tabs .nav-link.active,.control-sidebar-dark .nav-tabs .nav-link:active,.control-sidebar-dark .nav-tabs .nav-link:focus,.control-sidebar-dark .nav-tabs .nav-link:hover{border-bottom-color:transparent;border-left-color:transparent;border-top-color:transparent;color:hsla(0,0%,100%,.95)}.control-sidebar-dark .nav-tabs .nav-link.active{background-color:#3e4958}.control-sidebar-dark .tab-pane{padding:10px 15px}.control-sidebar-light{color:#6f6f6f;background:#fff;border-left:1px solid #dae1e7}.text-sm .dropdown-menu{font-size:1rem!important}.text-sm .dropdown-toggle:after{vertical-align:.2rem}.dropdown-item-title{font-size:1rem;margin:0}.dropdown-icon:after{margin-left:0}.dropdown-menu-lg{max-width:300px;min-width:280px;padding:0}.dropdown-menu-lg .dropdown-divider{margin:0}.dropdown-menu-lg .dropdown-item{padding:.5rem 1.5rem}.dropdown-menu-lg p{margin:0;white-space:normal}.dropdown-submenu{position:relative}.dropdown-submenu>a:after{border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid;float:right;margin-left:.5rem;margin-top:.5rem}.dropdown-submenu>.dropdown-menu{left:100%;margin-left:0;margin-top:0;top:0}.dropdown-hover.dropdown-submenu:hover>.dropdown-menu,.dropdown-hover .dropdown-submenu:hover>.dropdown-menu,.dropdown-hover.nav-item.dropdown:hover>.dropdown-menu,.dropdown-hover:hover>.dropdown-menu{display:block}.dropdown-menu-xl{max-width:420px;min-width:360px;padding:0}.dropdown-menu-xl .dropdown-divider{margin:0}.dropdown-menu-xl .dropdown-item{padding:.5rem 1.5rem}.dropdown-menu-xl p{margin:0;white-space:normal}.dropdown-footer,.dropdown-header{display:block;font-size:1rem;padding:.5rem 1.5rem;text-align:center}.open:not(.dropup)>.animated-dropdown-menu{-webkit-animation:flipInX .7s both;animation:flipInX .7s both;-webkit-backface-visibility:visible!important;backface-visibility:visible!important}@-webkit-keyframes flipInX{0%{transform:perspective(400px) rotateX(90deg);transition-timing-function:ease-in;opacity:0}40%{transform:perspective(400px) rotateX(-20deg);transition-timing-function:ease-in}60%{transform:perspective(400px) rotateX(10deg);opacity:1}80%{transform:perspective(400px) rotateX(-5deg)}to{transform:perspective(400px)}}@keyframes flipInX{0%{transform:perspective(400px) rotateX(90deg);transition-timing-function:ease-in;opacity:0}40%{transform:perspective(400px) rotateX(-20deg);transition-timing-function:ease-in}60%{transform:perspective(400px) rotateX(10deg);opacity:1}80%{transform:perspective(400px) rotateX(-5deg)}to{transform:perspective(400px)}}.navbar-custom-menu>.navbar-nav>li{position:relative}.navbar-custom-menu>.navbar-nav>li>.dropdown-menu{position:absolute;right:0;left:auto}@media (max-width:767.98px){.navbar-custom-menu>.navbar-nav{float:right}.navbar-custom-menu>.navbar-nav>li{position:static}.navbar-custom-menu>.navbar-nav>li>.dropdown-menu{position:absolute;right:5%;left:auto;border:1px solid #ddd;background:#fff}}.navbar-nav>.user-menu>.nav-link:after{content:none}.navbar-nav>.user-menu>.dropdown-menu{border-top-left-radius:0;border-top-right-radius:0;padding:0;width:280px}.navbar-nav>.user-menu>.dropdown-menu,.navbar-nav>.user-menu>.dropdown-menu>.user-body{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.navbar-nav>.user-menu>.dropdown-menu>li.user-header{height:175px;padding:10px;text-align:center}.navbar-nav>.user-menu>.dropdown-menu>li.user-header>img{z-index:5;height:90px;width:90px;border:3px solid hsla(0,0%,100%,.2)}.navbar-nav>.user-menu>.dropdown-menu>li.user-header>p{z-index:5;font-size:17px;margin-top:10px}.navbar-nav>.user-menu>.dropdown-menu>li.user-header>p>small{display:block;font-size:12px}.navbar-nav>.user-menu>.dropdown-menu>.user-body{border-bottom:1px solid #4e5154;border-top:1px solid #dae1e7;padding:15px}.navbar-nav>.user-menu>.dropdown-menu>.user-body:after{display:block;clear:both;content:""}@media (min-width:576px){.navbar-nav>.user-menu>.dropdown-menu>.user-body a{background:#fff!important;color:#4e5154!important}}.navbar-nav>.user-menu>.dropdown-menu>.user-footer{background-color:#babfc7;padding:10px}.navbar-nav>.user-menu>.dropdown-menu>.user-footer:after{display:block;clear:both;content:""}.navbar-nav>.user-menu>.dropdown-menu>.user-footer .btn-default{color:#b8c2cc}@media (min-width:576px){.navbar-nav>.user-menu>.dropdown-menu>.user-footer .btn-default:hover{background-color:#babfc7}}.navbar-nav>.user-menu .user-image{border-radius:50%;float:left;height:2.5666666667rem;margin-right:10px;margin-top:-2px;width:2.5666666667rem}@media (min-width:576px){.navbar-nav>.user-menu .user-image{float:none;line-height:10px;margin-right:.4rem;margin-top:-8px}}.nav-pills .nav-link{color:#b8c2cc}.nav-pills .nav-link:not(.active):hover{color:#4e9876}.nav-pills .nav-item.dropdown.show .nav-link:hover{color:#fff}.nav-tabs.flex-column{border-bottom:0;border-right:1px solid #dae1e7}.nav-tabs.flex-column .nav-link{border-bottom-left-radius:.5rem;border-top-right-radius:0;margin-right:-1px}.nav-tabs.flex-column .nav-link:focus,.nav-tabs.flex-column .nav-link:hover{border-color:#ededed transparent #ededed #ededed}.nav-tabs.flex-column .nav-item.show .nav-link,.nav-tabs.flex-column .nav-link.active{border-color:#dae1e7 transparent #dae1e7 #dae1e7}.nav-tabs.flex-column.nav-tabs-right{border-left:1px solid #dae1e7;border-right:0}.nav-tabs.flex-column.nav-tabs-right .nav-link{border-bottom-left-radius:0;border-bottom-right-radius:.5rem;border-top-left-radius:0;border-top-right-radius:.5rem;margin-left:-1px}.nav-tabs.flex-column.nav-tabs-right .nav-link:focus,.nav-tabs.flex-column.nav-tabs-right .nav-link:hover{border-color:#ededed #ededed #ededed transparent}.nav-tabs.flex-column.nav-tabs-right .nav-item.show .nav-link,.nav-tabs.flex-column.nav-tabs-right .nav-link.active{border-color:#dae1e7 #dae1e7 #dae1e7 transparent}.navbar-no-expand{flex-direction:row}.navbar-no-expand .nav-link{padding-left:.5rem;padding-right:.5rem}.navbar-no-expand .dropdown-menu{position:absolute}.navbar-light{background-color:#f7f7f9}.navbar-dark{background-color:#22292f}.navbar-primary{background-color:#4e9876}.navbar-secondary{background-color:#b8c2cc}.navbar-success{background-color:#21b978}.navbar-info{background-color:#4277cf}.navbar-warning{background-color:#dda451}.navbar-danger{background-color:#ea5455}.navbar-lightblue{background-color:#3c8dbc}.navbar-navy{background-color:#001f3f}.navbar-olive{background-color:#3d9970}.navbar-lime{background-color:#01ff70}.navbar-fuchsia{background-color:#f012be}.navbar-maroon{background-color:#d81b60}.navbar-blue{background-color:#3085d6}.navbar-indigo{background-color:#5c6bc6}.navbar-purple{background-color:#6f42c1}.navbar-pink{background-color:#ff8acc}.navbar-red{background-color:#ea5455}.navbar-orange{background-color:#dda451}.navbar-yellow{background-color:#edc30e}.navbar-green{background-color:#21b978}.navbar-teal{background-color:#20c997}.navbar-cyan{background-color:#7367f0}.navbar-white{background-color:#fff}.navbar-gray{background-color:#b8c2cc}.navbar-gray-dark{background-color:#1e1e1e}.form-group.has-icon{position:relative}.form-group.has-icon .form-control{padding-right:35px}.form-group.has-icon .form-icon{background-color:transparent;border:0;cursor:pointer;font-size:1rem;padding:.75rem 2rem;position:absolute;right:3px;top:0}.btn-group-vertical .btn.btn-flat:first-of-type,.btn-group-vertical .btn.btn-flat:last-of-type{border-radius:0}.form-control-feedback.fa,.form-control-feedback.fab,.form-control-feedback.far,.form-control-feedback.fas,.form-control-feedback.glyphicon,.form-control-feedback.ion{line-height:34px}.form-group-lg .form-control+.form-control-feedback.fa,.form-group-lg .form-control+.form-control-feedback.fab,.form-group-lg .form-control+.form-control-feedback.far,.form-group-lg .form-control+.form-control-feedback.fas,.form-group-lg .form-control+.form-control-feedback.glyphicon,.form-group-lg .form-control+.form-control-feedback.ion,.input-group-lg+.form-control-feedback.fa,.input-group-lg+.form-control-feedback.fab,.input-group-lg+.form-control-feedback.far,.input-group-lg+.form-control-feedback.fas,.input-group-lg+.form-control-feedback.glyphicon,.input-group-lg+.form-control-feedback.ion,.input-lg+.form-control-feedback.fa,.input-lg+.form-control-feedback.fab,.input-lg+.form-control-feedback.far,.input-lg+.form-control-feedback.fas,.input-lg+.form-control-feedback.glyphicon,.input-lg+.form-control-feedback.ion{line-height:calc(1.25em + 2rem + 2px)}.form-group-sm .form-control+.form-control-feedback.fa,.form-group-sm .form-control+.form-control-feedback.fab,.form-group-sm .form-control+.form-control-feedback.far,.form-group-sm .form-control+.form-control-feedback.fas,.form-group-sm .form-control+.form-control-feedback.glyphicon,.form-group-sm .form-control+.form-control-feedback.ion,.input-group-sm+.form-control-feedback.fa,.input-group-sm+.form-control-feedback.fab,.input-group-sm+.form-control-feedback.far,.input-group-sm+.form-control-feedback.fas,.input-group-sm+.form-control-feedback.glyphicon,.input-group-sm+.form-control-feedback.ion,.input-sm+.form-control-feedback.fa,.input-sm+.form-control-feedback.fab,.input-sm+.form-control-feedback.far,.input-sm+.form-control-feedback.fas,.input-sm+.form-control-feedback.glyphicon,.input-sm+.form-control-feedback.ion{line-height:2rem}.warning-feedback{font-size:smaller;color:#dda451;display:none;margin-top:.25rem;width:100%}.warning-tooltip{border-radius:.5rem;font-size:1rem;background-color:rgba(221,164,81,.9);color:#2a2e30;display:none;line-height:1.45;margin-top:.1rem;max-width:100%;padding:.25rem .5rem;position:absolute;top:100%;z-index:5}.form-control.is-warning{border-color:#dda451}.form-control.is-warning:focus{border-color:#dda451;box-shadow:0 0 0 .2rem rgba(221,164,81,.25)}.form-control.is-warning~.warning-feedback,.form-control.is-warning~.warning-tooltip{display:block}textarea.form-control.is-warning{padding-right:calc(1.25em + 1.4rem);background-position:top calc(.3125em + .35rem) right calc(.3125em + .35rem)}.custom-select.is-warning{border-color:#dda451}.custom-select.is-warning:focus{border-color:#dda451;box-shadow:0 0 0 .2rem rgba(221,164,81,.25)}.custom-select.is-warning~.warning-feedback,.custom-select.is-warning~.warning-tooltip,.form-control-file.is-warning~.warning-feedback,.form-control-file.is-warning~.warning-tooltip{display:block}.form-check-input.is-warning~.form-check-label{color:#dda451}.form-check-input.is-warning~.warning-feedback,.form-check-input.is-warning~.warning-tooltip{display:block}.custom-control-input.is-warning~.custom-control-label{color:#dda451}.custom-control-input.is-warning~.custom-control-label:before{border-color:#dda451}.custom-control-input.is-warning~.warning-feedback,.custom-control-input.is-warning~.warning-tooltip{display:block}.custom-control-input.is-warning:checked~.custom-control-label:before{background-color:#e5ba7c;border-color:#e5ba7c}.custom-control-input.is-warning:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem rgba(221,164,81,.25)}.custom-control-input.is-warning:focus:not(:checked)~.custom-control-label:before,.custom-file-input.is-warning~.custom-file-label{border-color:#dda451}.custom-file-input.is-warning~.warning-feedback,.custom-file-input.is-warning~.warning-tooltip{display:block}.custom-file-input.is-warning:focus~.custom-file-label{border-color:#dda451;box-shadow:0 0 0 .2rem rgba(221,164,81,.25)}.custom-switch.custom-switch-off-primary .custom-control-input~.custom-control-label:before{background:#4e9876;border-color:#2b5542}.custom-switch.custom-switch-off-primary .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(78,152,118,.25)}.custom-switch.custom-switch-off-primary .custom-control-input~.custom-control-label:after{background:#234435}.custom-switch.custom-switch-on-primary .custom-control-input:checked~.custom-control-label:before{background:#4e9876;border-color:#2b5542}.custom-switch.custom-switch-on-primary .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(78,152,118,.25)}.custom-switch.custom-switch-on-primary .custom-control-input:checked~.custom-control-label:after{background:#abd4c1}.custom-switch.custom-switch-off-secondary .custom-control-input~.custom-control-label:before{background:#b8c2cc;border-color:#7d8fa1}.custom-switch.custom-switch-off-secondary .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(184,194,204,.25)}.custom-switch.custom-switch-off-secondary .custom-control-input~.custom-control-label:after{background:#6e8297}.custom-switch.custom-switch-on-secondary .custom-control-input:checked~.custom-control-label:before{background:#b8c2cc;border-color:#7d8fa1}.custom-switch.custom-switch-on-secondary .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(184,194,204,.25)}.custom-switch.custom-switch-on-secondary .custom-control-input:checked~.custom-control-label:after{background:#fff}.custom-switch.custom-switch-off-success .custom-control-input~.custom-control-label:before{background:#21b978;border-color:#126240}.custom-switch.custom-switch-off-success .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(33,185,120,.25)}.custom-switch.custom-switch-off-success .custom-control-input~.custom-control-label:after{background:#0e4d32}.custom-switch.custom-switch-on-success .custom-control-input:checked~.custom-control-label:before{background:#21b978;border-color:#126240}.custom-switch.custom-switch-on-success .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(33,185,120,.25)}.custom-switch.custom-switch-on-success .custom-control-input:checked~.custom-control-label:after{background:#89eac1}.custom-switch.custom-switch-off-info .custom-control-input~.custom-control-label:before{background:#4277cf;border-color:#234988}.custom-switch.custom-switch-off-info .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(66,119,207,.25)}.custom-switch.custom-switch-off-info .custom-control-input~.custom-control-label:after{background:#1d3e74}.custom-switch.custom-switch-on-info .custom-control-input:checked~.custom-control-label:before{background:#4277cf;border-color:#234988}.custom-switch.custom-switch-on-info .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(66,119,207,.25)}.custom-switch.custom-switch-on-info .custom-control-input:checked~.custom-control-label:after{background:#bccfee}.custom-switch.custom-switch-off-warning .custom-control-input~.custom-control-label:before{background:#dda451;border-color:#a77121}.custom-switch.custom-switch-off-warning .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(221,164,81,.25)}.custom-switch.custom-switch-off-warning .custom-control-input~.custom-control-label:after{background:#92621d}.custom-switch.custom-switch-on-warning .custom-control-input:checked~.custom-control-label:before{background:#dda451;border-color:#a77121}.custom-switch.custom-switch-on-warning .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(221,164,81,.25)}.custom-switch.custom-switch-on-warning .custom-control-input:checked~.custom-control-label:after{background:#f6e7d1}.custom-switch.custom-switch-off-danger .custom-control-input~.custom-control-label:before{background:#ea5455;border-color:#c01819}.custom-switch.custom-switch-off-danger .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(234,84,85,.25)}.custom-switch.custom-switch-off-danger .custom-control-input~.custom-control-label:after{background:#aa1516}.custom-switch.custom-switch-on-danger .custom-control-input:checked~.custom-control-label:before{background:#ea5455;border-color:#c01819}.custom-switch.custom-switch-on-danger .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(234,84,85,.25)}.custom-switch.custom-switch-on-danger .custom-control-input:checked~.custom-control-label:after{background:#fbdcdc}.custom-switch.custom-switch-off-light .custom-control-input~.custom-control-label:before{background:#f7f7f9;border-color:#bdbdcd}.custom-switch.custom-switch-off-light .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(247,247,249,.25)}.custom-switch.custom-switch-off-light .custom-control-input~.custom-control-label:after{background:#aeaec2}.custom-switch.custom-switch-on-light .custom-control-input:checked~.custom-control-label:before{background:#f7f7f9;border-color:#bdbdcd}.custom-switch.custom-switch-on-light .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(247,247,249,.25)}.custom-switch.custom-switch-on-light .custom-control-input:checked~.custom-control-label:after{background:#fff}.custom-switch.custom-switch-off-dark .custom-control-input~.custom-control-label:before{background:#22292f;border-color:#000}.custom-switch.custom-switch-off-dark .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(34,41,47,.25)}.custom-switch.custom-switch-off-dark .custom-control-input~.custom-control-label:after{background:#000}.custom-switch.custom-switch-on-dark .custom-control-input:checked~.custom-control-label:before{background:#22292f;border-color:#000}.custom-switch.custom-switch-on-dark .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(34,41,47,.25)}.custom-switch.custom-switch-on-dark .custom-control-input:checked~.custom-control-label:after{background:#627688}.custom-switch.custom-switch-off-lightblue .custom-control-input~.custom-control-label:before{background:#3c8dbc;border-color:#23536f}.custom-switch.custom-switch-off-lightblue .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(60,141,188,.25)}.custom-switch.custom-switch-off-lightblue .custom-control-input~.custom-control-label:after{background:#1d455b}.custom-switch.custom-switch-on-lightblue .custom-control-input:checked~.custom-control-label:before{background:#3c8dbc;border-color:#23536f}.custom-switch.custom-switch-on-lightblue .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(60,141,188,.25)}.custom-switch.custom-switch-on-lightblue .custom-control-input:checked~.custom-control-label:after{background:#acd0e5}.custom-switch.custom-switch-off-navy .custom-control-input~.custom-control-label:before{background:#001f3f;border-color:#000}.custom-switch.custom-switch-off-navy .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(0,31,63,.25)}.custom-switch.custom-switch-off-navy .custom-control-input~.custom-control-label:after{background:#000}.custom-switch.custom-switch-on-navy .custom-control-input:checked~.custom-control-label:before{background:#001f3f;border-color:#000}.custom-switch.custom-switch-on-navy .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(0,31,63,.25)}.custom-switch.custom-switch-on-navy .custom-control-input:checked~.custom-control-label:after{background:#006ad8}.custom-switch.custom-switch-off-olive .custom-control-input~.custom-control-label:before{background:#3d9970;border-color:#20503b}.custom-switch.custom-switch-off-olive .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(61,153,112,.25)}.custom-switch.custom-switch-off-olive .custom-control-input~.custom-control-label:after{background:#193e2d}.custom-switch.custom-switch-on-olive .custom-control-input:checked~.custom-control-label:before{background:#3d9970;border-color:#20503b}.custom-switch.custom-switch-on-olive .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(61,153,112,.25)}.custom-switch.custom-switch-on-olive .custom-control-input:checked~.custom-control-label:after{background:#99d6bb}.custom-switch.custom-switch-off-lime .custom-control-input~.custom-control-label:before{background:#01ff70;border-color:#009a43}.custom-switch.custom-switch-off-lime .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(1,255,112,.25)}.custom-switch.custom-switch-off-lime .custom-control-input~.custom-control-label:after{background:#008138}.custom-switch.custom-switch-on-lime .custom-control-input:checked~.custom-control-label:before{background:#01ff70;border-color:#009a43}.custom-switch.custom-switch-on-lime .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(1,255,112,.25)}.custom-switch.custom-switch-on-lime .custom-control-input:checked~.custom-control-label:after{background:#9affc6}.custom-switch.custom-switch-off-fuchsia .custom-control-input~.custom-control-label:before{background:#f012be;border-color:#930974}.custom-switch.custom-switch-off-fuchsia .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(240,18,190,.25)}.custom-switch.custom-switch-off-fuchsia .custom-control-input~.custom-control-label:after{background:#7b0861}.custom-switch.custom-switch-on-fuchsia .custom-control-input:checked~.custom-control-label:before{background:#f012be;border-color:#930974}.custom-switch.custom-switch-on-fuchsia .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(240,18,190,.25)}.custom-switch.custom-switch-on-fuchsia .custom-control-input:checked~.custom-control-label:after{background:#f9a2e5}.custom-switch.custom-switch-off-maroon .custom-control-input~.custom-control-label:before{background:#d81b60;border-color:#7d1038}.custom-switch.custom-switch-off-maroon .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(216,27,96,.25)}.custom-switch.custom-switch-off-maroon .custom-control-input~.custom-control-label:after{background:#670d2e}.custom-switch.custom-switch-on-maroon .custom-control-input:checked~.custom-control-label:before{background:#d81b60;border-color:#7d1038}.custom-switch.custom-switch-on-maroon .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(216,27,96,.25)}.custom-switch.custom-switch-on-maroon .custom-control-input:checked~.custom-control-label:after{background:#f29aba}.custom-switch.custom-switch-off-blue .custom-control-input~.custom-control-label:before{background:#3085d6;border-color:#1a5186}.custom-switch.custom-switch-off-blue .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(48,133,214,.25)}.custom-switch.custom-switch-off-blue .custom-control-input~.custom-control-label:after{background:#164470}.custom-switch.custom-switch-on-blue .custom-control-input:checked~.custom-control-label:before{background:#3085d6;border-color:#1a5186}.custom-switch.custom-switch-on-blue .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(48,133,214,.25)}.custom-switch.custom-switch-on-blue .custom-control-input:checked~.custom-control-label:after{background:#b0d0ef}.custom-switch.custom-switch-off-indigo .custom-control-input~.custom-control-label:before{background:#5c6bc6;border-color:#313e8b}.custom-switch.custom-switch-off-indigo .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(92,107,198,.25)}.custom-switch.custom-switch-off-indigo .custom-control-input~.custom-control-label:after{background:#2a3578}.custom-switch.custom-switch-on-indigo .custom-control-input:checked~.custom-control-label:before{background:#5c6bc6;border-color:#313e8b}.custom-switch.custom-switch-on-indigo .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(92,107,198,.25)}.custom-switch.custom-switch-on-indigo .custom-control-input:checked~.custom-control-label:after{background:#cdd2ee}.custom-switch.custom-switch-off-purple .custom-control-input~.custom-control-label:before{background:#6f42c1;border-color:#432776}.custom-switch.custom-switch-off-purple .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(111,66,193,.25)}.custom-switch.custom-switch-off-purple .custom-control-input~.custom-control-label:after{background:#382063}.custom-switch.custom-switch-on-purple .custom-control-input:checked~.custom-control-label:before{background:#6f42c1;border-color:#432776}.custom-switch.custom-switch-on-purple .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(111,66,193,.25)}.custom-switch.custom-switch-on-purple .custom-control-input:checked~.custom-control-label:after{background:#c7b5e7}.custom-switch.custom-switch-off-pink .custom-control-input~.custom-control-label:before{background:#ff8acc;border-color:#ff24a0}.custom-switch.custom-switch-off-pink .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(255,138,204,.25)}.custom-switch.custom-switch-off-pink .custom-control-input~.custom-control-label:after{background:#ff0b94}.custom-switch.custom-switch-on-pink .custom-control-input:checked~.custom-control-label:before{background:#ff8acc;border-color:#ff24a0}.custom-switch.custom-switch-on-pink .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(255,138,204,.25)}.custom-switch.custom-switch-on-pink .custom-control-input:checked~.custom-control-label:after{background:#fff}.custom-switch.custom-switch-off-red .custom-control-input~.custom-control-label:before{background:#ea5455;border-color:#c01819}.custom-switch.custom-switch-off-red .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(234,84,85,.25)}.custom-switch.custom-switch-off-red .custom-control-input~.custom-control-label:after{background:#aa1516}.custom-switch.custom-switch-on-red .custom-control-input:checked~.custom-control-label:before{background:#ea5455;border-color:#c01819}.custom-switch.custom-switch-on-red .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(234,84,85,.25)}.custom-switch.custom-switch-on-red .custom-control-input:checked~.custom-control-label:after{background:#fbdcdc}.custom-switch.custom-switch-off-orange .custom-control-input~.custom-control-label:before{background:#dda451;border-color:#a77121}.custom-switch.custom-switch-off-orange .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(221,164,81,.25)}.custom-switch.custom-switch-off-orange .custom-control-input~.custom-control-label:after{background:#92621d}.custom-switch.custom-switch-on-orange .custom-control-input:checked~.custom-control-label:before{background:#dda451;border-color:#a77121}.custom-switch.custom-switch-on-orange .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(221,164,81,.25)}.custom-switch.custom-switch-on-orange .custom-control-input:checked~.custom-control-label:after{background:#f6e7d1}.custom-switch.custom-switch-off-yellow .custom-control-input~.custom-control-label:before{background:#edc30e;border-color:#8d7408}.custom-switch.custom-switch-off-yellow .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(237,195,14,.25)}.custom-switch.custom-switch-off-yellow .custom-control-input~.custom-control-label:after{background:#756007}.custom-switch.custom-switch-on-yellow .custom-control-input:checked~.custom-control-label:before{background:#edc30e;border-color:#8d7408}.custom-switch.custom-switch-on-yellow .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(237,195,14,.25)}.custom-switch.custom-switch-on-yellow .custom-control-input:checked~.custom-control-label:after{background:#f9e79b}.custom-switch.custom-switch-off-green .custom-control-input~.custom-control-label:before{background:#21b978;border-color:#126240}.custom-switch.custom-switch-off-green .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(33,185,120,.25)}.custom-switch.custom-switch-off-green .custom-control-input~.custom-control-label:after{background:#0e4d32}.custom-switch.custom-switch-on-green .custom-control-input:checked~.custom-control-label:before{background:#21b978;border-color:#126240}.custom-switch.custom-switch-on-green .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(33,185,120,.25)}.custom-switch.custom-switch-on-green .custom-control-input:checked~.custom-control-label:after{background:#89eac1}.custom-switch.custom-switch-off-teal .custom-control-input~.custom-control-label:before{background:#20c997;border-color:#127155}.custom-switch.custom-switch-off-teal .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(32,201,151,.25)}.custom-switch.custom-switch-off-teal .custom-control-input~.custom-control-label:after{background:#0e5b44}.custom-switch.custom-switch-on-teal .custom-control-input:checked~.custom-control-label:before{background:#20c997;border-color:#127155}.custom-switch.custom-switch-on-teal .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(32,201,151,.25)}.custom-switch.custom-switch-on-teal .custom-control-input:checked~.custom-control-label:after{background:#94eed3}.custom-switch.custom-switch-off-cyan .custom-control-input~.custom-control-label:before{background:#7367f0;border-color:#2716db}.custom-switch.custom-switch-off-cyan .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(115,103,240,.25)}.custom-switch.custom-switch-off-cyan .custom-control-input~.custom-control-label:after{background:#2313c4}.custom-switch.custom-switch-on-cyan .custom-control-input:checked~.custom-control-label:before{background:#7367f0;border-color:#2716db}.custom-switch.custom-switch-on-cyan .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(115,103,240,.25)}.custom-switch.custom-switch-on-cyan .custom-control-input:checked~.custom-control-label:after{background:#f3f2fe}.custom-switch.custom-switch-off-white .custom-control-input~.custom-control-label:before{background:#fff;border-color:#ccc}.custom-switch.custom-switch-off-white .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px hsla(0,0%,100%,.25)}.custom-switch.custom-switch-off-white .custom-control-input~.custom-control-label:after{background:#bfbfbf}.custom-switch.custom-switch-on-white .custom-control-input:checked~.custom-control-label:before{background:#fff;border-color:#ccc}.custom-switch.custom-switch-on-white .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px hsla(0,0%,100%,.25)}.custom-switch.custom-switch-on-white .custom-control-input:checked~.custom-control-label:after{background:#fff}.custom-switch.custom-switch-off-gray .custom-control-input~.custom-control-label:before{background:#b8c2cc;border-color:#7d8fa1}.custom-switch.custom-switch-off-gray .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(184,194,204,.25)}.custom-switch.custom-switch-off-gray .custom-control-input~.custom-control-label:after{background:#6e8297}.custom-switch.custom-switch-on-gray .custom-control-input:checked~.custom-control-label:before{background:#b8c2cc;border-color:#7d8fa1}.custom-switch.custom-switch-on-gray .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(184,194,204,.25)}.custom-switch.custom-switch-on-gray .custom-control-input:checked~.custom-control-label:after{background:#fff}.custom-switch.custom-switch-off-gray-dark .custom-control-input~.custom-control-label:before{background:#1e1e1e;border-color:#000}.custom-switch.custom-switch-off-gray-dark .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(30,30,30,.25)}.custom-switch.custom-switch-off-gray-dark .custom-control-input~.custom-control-label:after{background:#000}.custom-switch.custom-switch-on-gray-dark .custom-control-input:checked~.custom-control-label:before{background:#1e1e1e;border-color:#000}.custom-switch.custom-switch-on-gray-dark .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(30,30,30,.25)}.custom-switch.custom-switch-on-gray-dark .custom-control-input:checked~.custom-control-label:after{background:#6b6b6b}.custom-range.custom-range-primary:focus{outline:none}.custom-range.custom-range-primary:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(78,152,118,.25)}.custom-range.custom-range-primary:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(78,152,118,.25)}.custom-range.custom-range-primary:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(78,152,118,.25)}.custom-range.custom-range-primary::-webkit-slider-thumb{background-color:#4e9876}.custom-range.custom-range-primary::-webkit-slider-thumb:active{background-color:#bcddce}.custom-range.custom-range-primary::-moz-range-thumb{background-color:#4e9876}.custom-range.custom-range-primary::-moz-range-thumb:active{background-color:#bcddce}.custom-range.custom-range-primary::-ms-thumb{background-color:#4e9876}.custom-range.custom-range-primary::-ms-thumb:active{background-color:#bcddce}.custom-range.custom-range-secondary:focus{outline:none}.custom-range.custom-range-secondary:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(184,194,204,.25)}.custom-range.custom-range-secondary:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(184,194,204,.25)}.custom-range.custom-range-secondary:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(184,194,204,.25)}.custom-range.custom-range-secondary::-webkit-slider-thumb{background-color:#b8c2cc}.custom-range.custom-range-secondary::-webkit-slider-thumb:active{background-color:#fff}.custom-range.custom-range-secondary::-moz-range-thumb{background-color:#b8c2cc}.custom-range.custom-range-secondary::-moz-range-thumb:active{background-color:#fff}.custom-range.custom-range-secondary::-ms-thumb{background-color:#b8c2cc}.custom-range.custom-range-secondary::-ms-thumb:active{background-color:#fff}.custom-range.custom-range-success:focus{outline:none}.custom-range.custom-range-success:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(33,185,120,.25)}.custom-range.custom-range-success:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(33,185,120,.25)}.custom-range.custom-range-success:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(33,185,120,.25)}.custom-range.custom-range-success::-webkit-slider-thumb{background-color:#21b978}.custom-range.custom-range-success::-webkit-slider-thumb:active{background-color:#9feecc}.custom-range.custom-range-success::-moz-range-thumb{background-color:#21b978}.custom-range.custom-range-success::-moz-range-thumb:active{background-color:#9feecc}.custom-range.custom-range-success::-ms-thumb{background-color:#21b978}.custom-range.custom-range-success::-ms-thumb:active{background-color:#9feecc}.custom-range.custom-range-info:focus{outline:none}.custom-range.custom-range-info:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(66,119,207,.25)}.custom-range.custom-range-info:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(66,119,207,.25)}.custom-range.custom-range-info:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(66,119,207,.25)}.custom-range.custom-range-info::-webkit-slider-thumb{background-color:#4277cf}.custom-range.custom-range-info::-webkit-slider-thumb:active{background-color:#d0ddf3}.custom-range.custom-range-info::-moz-range-thumb{background-color:#4277cf}.custom-range.custom-range-info::-moz-range-thumb:active{background-color:#d0ddf3}.custom-range.custom-range-info::-ms-thumb{background-color:#4277cf}.custom-range.custom-range-info::-ms-thumb:active{background-color:#d0ddf3}.custom-range.custom-range-warning:focus{outline:none}.custom-range.custom-range-warning:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(221,164,81,.25)}.custom-range.custom-range-warning:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(221,164,81,.25)}.custom-range.custom-range-warning:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(221,164,81,.25)}.custom-range.custom-range-warning::-webkit-slider-thumb{background-color:#dda451}.custom-range.custom-range-warning::-webkit-slider-thumb:active{background-color:#faf2e6}.custom-range.custom-range-warning::-moz-range-thumb{background-color:#dda451}.custom-range.custom-range-warning::-moz-range-thumb:active{background-color:#faf2e6}.custom-range.custom-range-warning::-ms-thumb{background-color:#dda451}.custom-range.custom-range-warning::-ms-thumb:active{background-color:#faf2e6}.custom-range.custom-range-danger:focus{outline:none}.custom-range.custom-range-danger:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(234,84,85,.25)}.custom-range.custom-range-danger:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(234,84,85,.25)}.custom-range.custom-range-danger:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(234,84,85,.25)}.custom-range.custom-range-danger::-webkit-slider-thumb{background-color:#ea5455}.custom-range.custom-range-danger::-webkit-slider-thumb:active{background-color:#fef3f3}.custom-range.custom-range-danger::-moz-range-thumb{background-color:#ea5455}.custom-range.custom-range-danger::-moz-range-thumb:active{background-color:#fef3f3}.custom-range.custom-range-danger::-ms-thumb{background-color:#ea5455}.custom-range.custom-range-danger::-ms-thumb:active{background-color:#fef3f3}.custom-range.custom-range-light:focus{outline:none}.custom-range.custom-range-light:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(247,247,249,.25)}.custom-range.custom-range-light:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(247,247,249,.25)}.custom-range.custom-range-light:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(247,247,249,.25)}.custom-range.custom-range-light::-webkit-slider-thumb{background-color:#f7f7f9}.custom-range.custom-range-light::-webkit-slider-thumb:active{background-color:#fff}.custom-range.custom-range-light::-moz-range-thumb{background-color:#f7f7f9}.custom-range.custom-range-light::-moz-range-thumb:active{background-color:#fff}.custom-range.custom-range-light::-ms-thumb{background-color:#f7f7f9}.custom-range.custom-range-light::-ms-thumb:active{background-color:#fff}.custom-range.custom-range-dark:focus{outline:none}.custom-range.custom-range-dark:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(34,41,47,.25)}.custom-range.custom-range-dark:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(34,41,47,.25)}.custom-range.custom-range-dark:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(34,41,47,.25)}.custom-range.custom-range-dark::-webkit-slider-thumb{background-color:#22292f}.custom-range.custom-range-dark::-webkit-slider-thumb:active{background-color:#6e8396}.custom-range.custom-range-dark::-moz-range-thumb{background-color:#22292f}.custom-range.custom-range-dark::-moz-range-thumb:active{background-color:#6e8396}.custom-range.custom-range-dark::-ms-thumb{background-color:#22292f}.custom-range.custom-range-dark::-ms-thumb:active{background-color:#6e8396}.custom-range.custom-range-lightblue:focus{outline:none}.custom-range.custom-range-lightblue:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(60,141,188,.25)}.custom-range.custom-range-lightblue:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(60,141,188,.25)}.custom-range.custom-range-lightblue:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(60,141,188,.25)}.custom-range.custom-range-lightblue::-webkit-slider-thumb{background-color:#3c8dbc}.custom-range.custom-range-lightblue::-webkit-slider-thumb:active{background-color:#c0dbeb}.custom-range.custom-range-lightblue::-moz-range-thumb{background-color:#3c8dbc}.custom-range.custom-range-lightblue::-moz-range-thumb:active{background-color:#c0dbeb}.custom-range.custom-range-lightblue::-ms-thumb{background-color:#3c8dbc}.custom-range.custom-range-lightblue::-ms-thumb:active{background-color:#c0dbeb}.custom-range.custom-range-navy:focus{outline:none}.custom-range.custom-range-navy:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(0,31,63,.25)}.custom-range.custom-range-navy:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(0,31,63,.25)}.custom-range.custom-range-navy:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(0,31,63,.25)}.custom-range.custom-range-navy::-webkit-slider-thumb{background-color:#001f3f}.custom-range.custom-range-navy::-webkit-slider-thumb:active{background-color:#0077f2}.custom-range.custom-range-navy::-moz-range-thumb{background-color:#001f3f}.custom-range.custom-range-navy::-moz-range-thumb:active{background-color:#0077f2}.custom-range.custom-range-navy::-ms-thumb{background-color:#001f3f}.custom-range.custom-range-navy::-ms-thumb:active{background-color:#0077f2}.custom-range.custom-range-olive:focus{outline:none}.custom-range.custom-range-olive:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(61,153,112,.25)}.custom-range.custom-range-olive:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(61,153,112,.25)}.custom-range.custom-range-olive:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(61,153,112,.25)}.custom-range.custom-range-olive::-webkit-slider-thumb{background-color:#3d9970}.custom-range.custom-range-olive::-webkit-slider-thumb:active{background-color:#abdec7}.custom-range.custom-range-olive::-moz-range-thumb{background-color:#3d9970}.custom-range.custom-range-olive::-moz-range-thumb:active{background-color:#abdec7}.custom-range.custom-range-olive::-ms-thumb{background-color:#3d9970}.custom-range.custom-range-olive::-ms-thumb:active{background-color:#abdec7}.custom-range.custom-range-lime:focus{outline:none}.custom-range.custom-range-lime:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(1,255,112,.25)}.custom-range.custom-range-lime:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(1,255,112,.25)}.custom-range.custom-range-lime:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(1,255,112,.25)}.custom-range.custom-range-lime::-webkit-slider-thumb{background-color:#01ff70}.custom-range.custom-range-lime::-webkit-slider-thumb:active{background-color:#b4ffd4}.custom-range.custom-range-lime::-moz-range-thumb{background-color:#01ff70}.custom-range.custom-range-lime::-moz-range-thumb:active{background-color:#b4ffd4}.custom-range.custom-range-lime::-ms-thumb{background-color:#01ff70}.custom-range.custom-range-lime::-ms-thumb:active{background-color:#b4ffd4}.custom-range.custom-range-fuchsia:focus{outline:none}.custom-range.custom-range-fuchsia:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(240,18,190,.25)}.custom-range.custom-range-fuchsia:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(240,18,190,.25)}.custom-range.custom-range-fuchsia:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(240,18,190,.25)}.custom-range.custom-range-fuchsia::-webkit-slider-thumb{background-color:#f012be}.custom-range.custom-range-fuchsia::-webkit-slider-thumb:active{background-color:#fbbaec}.custom-range.custom-range-fuchsia::-moz-range-thumb{background-color:#f012be}.custom-range.custom-range-fuchsia::-moz-range-thumb:active{background-color:#fbbaec}.custom-range.custom-range-fuchsia::-ms-thumb{background-color:#f012be}.custom-range.custom-range-fuchsia::-ms-thumb:active{background-color:#fbbaec}.custom-range.custom-range-maroon:focus{outline:none}.custom-range.custom-range-maroon:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(216,27,96,.25)}.custom-range.custom-range-maroon:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(216,27,96,.25)}.custom-range.custom-range-maroon:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(216,27,96,.25)}.custom-range.custom-range-maroon::-webkit-slider-thumb{background-color:#d81b60}.custom-range.custom-range-maroon::-webkit-slider-thumb:active{background-color:#f5b0c9}.custom-range.custom-range-maroon::-moz-range-thumb{background-color:#d81b60}.custom-range.custom-range-maroon::-moz-range-thumb:active{background-color:#f5b0c9}.custom-range.custom-range-maroon::-ms-thumb{background-color:#d81b60}.custom-range.custom-range-maroon::-ms-thumb:active{background-color:#f5b0c9}.custom-range.custom-range-blue:focus{outline:none}.custom-range.custom-range-blue:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(48,133,214,.25)}.custom-range.custom-range-blue:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(48,133,214,.25)}.custom-range.custom-range-blue:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(48,133,214,.25)}.custom-range.custom-range-blue::-webkit-slider-thumb{background-color:#3085d6}.custom-range.custom-range-blue::-webkit-slider-thumb:active{background-color:#c5ddf4}.custom-range.custom-range-blue::-moz-range-thumb{background-color:#3085d6}.custom-range.custom-range-blue::-moz-range-thumb:active{background-color:#c5ddf4}.custom-range.custom-range-blue::-ms-thumb{background-color:#3085d6}.custom-range.custom-range-blue::-ms-thumb:active{background-color:#c5ddf4}.custom-range.custom-range-indigo:focus{outline:none}.custom-range.custom-range-indigo:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(92,107,198,.25)}.custom-range.custom-range-indigo:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(92,107,198,.25)}.custom-range.custom-range-indigo:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(92,107,198,.25)}.custom-range.custom-range-indigo::-webkit-slider-thumb{background-color:#5c6bc6}.custom-range.custom-range-indigo::-webkit-slider-thumb:active{background-color:#e0e3f4}.custom-range.custom-range-indigo::-moz-range-thumb{background-color:#5c6bc6}.custom-range.custom-range-indigo::-moz-range-thumb:active{background-color:#e0e3f4}.custom-range.custom-range-indigo::-ms-thumb{background-color:#5c6bc6}.custom-range.custom-range-indigo::-ms-thumb:active{background-color:#e0e3f4}.custom-range.custom-range-purple:focus{outline:none}.custom-range.custom-range-purple:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(111,66,193,.25)}.custom-range.custom-range-purple:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(111,66,193,.25)}.custom-range.custom-range-purple:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(111,66,193,.25)}.custom-range.custom-range-purple::-webkit-slider-thumb{background-color:#6f42c1}.custom-range.custom-range-purple::-webkit-slider-thumb:active{background-color:#d5c8ed}.custom-range.custom-range-purple::-moz-range-thumb{background-color:#6f42c1}.custom-range.custom-range-purple::-moz-range-thumb:active{background-color:#d5c8ed}.custom-range.custom-range-purple::-ms-thumb{background-color:#6f42c1}.custom-range.custom-range-purple::-ms-thumb:active{background-color:#d5c8ed}.custom-range.custom-range-pink:focus{outline:none}.custom-range.custom-range-pink:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(255,138,204,.25)}.custom-range.custom-range-pink:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(255,138,204,.25)}.custom-range.custom-range-pink:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(255,138,204,.25)}.custom-range.custom-range-pink::-webkit-slider-thumb{background-color:#ff8acc}.custom-range.custom-range-pink::-webkit-slider-thumb:active{background-color:#fff}.custom-range.custom-range-pink::-moz-range-thumb{background-color:#ff8acc}.custom-range.custom-range-pink::-moz-range-thumb:active{background-color:#fff}.custom-range.custom-range-pink::-ms-thumb{background-color:#ff8acc}.custom-range.custom-range-pink::-ms-thumb:active{background-color:#fff}.custom-range.custom-range-red:focus{outline:none}.custom-range.custom-range-red:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(234,84,85,.25)}.custom-range.custom-range-red:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(234,84,85,.25)}.custom-range.custom-range-red:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(234,84,85,.25)}.custom-range.custom-range-red::-webkit-slider-thumb{background-color:#ea5455}.custom-range.custom-range-red::-webkit-slider-thumb:active{background-color:#fef3f3}.custom-range.custom-range-red::-moz-range-thumb{background-color:#ea5455}.custom-range.custom-range-red::-moz-range-thumb:active{background-color:#fef3f3}.custom-range.custom-range-red::-ms-thumb{background-color:#ea5455}.custom-range.custom-range-red::-ms-thumb:active{background-color:#fef3f3}.custom-range.custom-range-orange:focus{outline:none}.custom-range.custom-range-orange:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(221,164,81,.25)}.custom-range.custom-range-orange:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(221,164,81,.25)}.custom-range.custom-range-orange:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(221,164,81,.25)}.custom-range.custom-range-orange::-webkit-slider-thumb{background-color:#dda451}.custom-range.custom-range-orange::-webkit-slider-thumb:active{background-color:#faf2e6}.custom-range.custom-range-orange::-moz-range-thumb{background-color:#dda451}.custom-range.custom-range-orange::-moz-range-thumb:active{background-color:#faf2e6}.custom-range.custom-range-orange::-ms-thumb{background-color:#dda451}.custom-range.custom-range-orange::-ms-thumb:active{background-color:#faf2e6}.custom-range.custom-range-yellow:focus{outline:none}.custom-range.custom-range-yellow:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(237,195,14,.25)}.custom-range.custom-range-yellow:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(237,195,14,.25)}.custom-range.custom-range-yellow:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(237,195,14,.25)}.custom-range.custom-range-yellow::-webkit-slider-thumb{background-color:#edc30e}.custom-range.custom-range-yellow::-webkit-slider-thumb:active{background-color:#fbedb3}.custom-range.custom-range-yellow::-moz-range-thumb{background-color:#edc30e}.custom-range.custom-range-yellow::-moz-range-thumb:active{background-color:#fbedb3}.custom-range.custom-range-yellow::-ms-thumb{background-color:#edc30e}.custom-range.custom-range-yellow::-ms-thumb:active{background-color:#fbedb3}.custom-range.custom-range-green:focus{outline:none}.custom-range.custom-range-green:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(33,185,120,.25)}.custom-range.custom-range-green:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(33,185,120,.25)}.custom-range.custom-range-green:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(33,185,120,.25)}.custom-range.custom-range-green::-webkit-slider-thumb{background-color:#21b978}.custom-range.custom-range-green::-webkit-slider-thumb:active{background-color:#9feecc}.custom-range.custom-range-green::-moz-range-thumb{background-color:#21b978}.custom-range.custom-range-green::-moz-range-thumb:active{background-color:#9feecc}.custom-range.custom-range-green::-ms-thumb{background-color:#21b978}.custom-range.custom-range-green::-ms-thumb:active{background-color:#9feecc}.custom-range.custom-range-teal:focus{outline:none}.custom-range.custom-range-teal:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(32,201,151,.25)}.custom-range.custom-range-teal:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(32,201,151,.25)}.custom-range.custom-range-teal:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(32,201,151,.25)}.custom-range.custom-range-teal::-webkit-slider-thumb{background-color:#20c997}.custom-range.custom-range-teal::-webkit-slider-thumb:active{background-color:#aaf1dc}.custom-range.custom-range-teal::-moz-range-thumb{background-color:#20c997}.custom-range.custom-range-teal::-moz-range-thumb:active{background-color:#aaf1dc}.custom-range.custom-range-teal::-ms-thumb{background-color:#20c997}.custom-range.custom-range-teal::-ms-thumb:active{background-color:#aaf1dc}.custom-range.custom-range-cyan:focus{outline:none}.custom-range.custom-range-cyan:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(115,103,240,.25)}.custom-range.custom-range-cyan:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(115,103,240,.25)}.custom-range.custom-range-cyan:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(115,103,240,.25)}.custom-range.custom-range-cyan::-webkit-slider-thumb{background-color:#7367f0}.custom-range.custom-range-cyan::-webkit-slider-thumb:active{background-color:#fff}.custom-range.custom-range-cyan::-moz-range-thumb{background-color:#7367f0}.custom-range.custom-range-cyan::-moz-range-thumb:active{background-color:#fff}.custom-range.custom-range-cyan::-ms-thumb{background-color:#7367f0}.custom-range.custom-range-cyan::-ms-thumb:active{background-color:#fff}.custom-range.custom-range-white:focus{outline:none}.custom-range.custom-range-white:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px hsla(0,0%,100%,.25)}.custom-range.custom-range-white:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px hsla(0,0%,100%,.25)}.custom-range.custom-range-white:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px hsla(0,0%,100%,.25)}.custom-range.custom-range-white::-webkit-slider-thumb,.custom-range.custom-range-white::-webkit-slider-thumb:active{background-color:#fff}.custom-range.custom-range-white::-moz-range-thumb,.custom-range.custom-range-white::-moz-range-thumb:active{background-color:#fff}.custom-range.custom-range-white::-ms-thumb,.custom-range.custom-range-white::-ms-thumb:active{background-color:#fff}.custom-range.custom-range-gray:focus{outline:none}.custom-range.custom-range-gray:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(184,194,204,.25)}.custom-range.custom-range-gray:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(184,194,204,.25)}.custom-range.custom-range-gray:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(184,194,204,.25)}.custom-range.custom-range-gray::-webkit-slider-thumb{background-color:#b8c2cc}.custom-range.custom-range-gray::-webkit-slider-thumb:active{background-color:#fff}.custom-range.custom-range-gray::-moz-range-thumb{background-color:#b8c2cc}.custom-range.custom-range-gray::-moz-range-thumb:active{background-color:#fff}.custom-range.custom-range-gray::-ms-thumb{background-color:#b8c2cc}.custom-range.custom-range-gray::-ms-thumb:active{background-color:#fff}.custom-range.custom-range-gray-dark:focus{outline:none}.custom-range.custom-range-gray-dark:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(30,30,30,.25)}.custom-range.custom-range-gray-dark:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(30,30,30,.25)}.custom-range.custom-range-gray-dark:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(30,30,30,.25)}.custom-range.custom-range-gray-dark::-webkit-slider-thumb{background-color:#1e1e1e}.custom-range.custom-range-gray-dark::-webkit-slider-thumb:active{background-color:#777}.custom-range.custom-range-gray-dark::-moz-range-thumb{background-color:#1e1e1e}.custom-range.custom-range-gray-dark::-moz-range-thumb:active{background-color:#777}.custom-range.custom-range-gray-dark::-ms-thumb{background-color:#1e1e1e}.custom-range.custom-range-gray-dark::-ms-thumb:active{background-color:#777}.progress{border-radius:1px}.progress.vertical{display:inline-block;height:200px;margin-right:10px;position:relative;width:30px}.progress.vertical>.progress-bar{bottom:0;position:absolute;width:100%}.progress.vertical.progress-sm,.progress.vertical.sm{width:20px}.progress.vertical.progress-xs,.progress.vertical.xs{width:10px}.progress.vertical.progress-xxs,.progress.vertical.xxs{width:3px}.progress-group{margin-bottom:1.5rem}.progress-sm{height:10px}.progress-xs{height:7px}.progress-xxs{height:3px}.table tr>td .progress{margin:0}.card-primary:not(.card-outline)>.card-header{background-color:#4e9876}.card-primary:not(.card-outline)>.card-header,.card-primary:not(.card-outline)>.card-header a{color:#fff}.card-primary:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-primary.card-outline{border-top:3px solid #4e9876}.card-primary.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-primary.card-outline-tabs>.card-header a.active{border-top:3px solid #4e9876}.bg-gradient-primary .btn-tool,.bg-primary .btn-tool,.card-primary:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-gradient-primary .btn-tool:hover,.bg-primary .btn-tool:hover,.card-primary:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-gradient-primary .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-primary .bootstrap-datetimepicker-widget .table th,.card.bg-primary .bootstrap-datetimepicker-widget .table td,.card.bg-primary .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-primary .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-primary .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-primary .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-primary .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-primary .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-primary .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-primary .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-primary .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-primary .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-primary .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#407d61;color:#fff}.card.bg-gradient-primary .bootstrap-datetimepicker-widget table td.today:before,.card.bg-primary .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-gradient-primary .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-primary .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-primary .bootstrap-datetimepicker-widget table td.active,.card.bg-primary .bootstrap-datetimepicker-widget table td.active:hover{background:#68b18f;color:#fff}.card-secondary:not(.card-outline)>.card-header{background-color:#b8c2cc}.card-secondary:not(.card-outline)>.card-header,.card-secondary:not(.card-outline)>.card-header a,.card-secondary:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-secondary.card-outline{border-top:3px solid #b8c2cc}.card-secondary.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-secondary.card-outline-tabs>.card-header a.active{border-top:3px solid #b8c2cc}.bg-gradient-secondary .btn-tool,.bg-secondary .btn-tool,.card-secondary:not(.card-outline) .btn-tool{color:rgba(42,46,48,.8)}.bg-gradient-secondary .btn-tool:hover,.bg-secondary .btn-tool:hover,.card-secondary:not(.card-outline) .btn-tool:hover{color:#2a2e30}.card.bg-gradient-secondary .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-secondary .bootstrap-datetimepicker-widget .table th,.card.bg-secondary .bootstrap-datetimepicker-widget .table td,.card.bg-secondary .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-secondary .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-secondary .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-secondary .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-secondary .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-secondary .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-secondary .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-secondary .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-secondary .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-secondary .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-secondary .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#a0aebb;color:#2a2e30}.card.bg-gradient-secondary .bootstrap-datetimepicker-widget table td.today:before,.card.bg-secondary .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#2a2e30}.card.bg-gradient-secondary .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-secondary .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-secondary .bootstrap-datetimepicker-widget table td.active,.card.bg-secondary .bootstrap-datetimepicker-widget table td.active:hover{background:#d6dce1;color:#2a2e30}.card-success:not(.card-outline)>.card-header{background-color:#21b978}.card-success:not(.card-outline)>.card-header,.card-success:not(.card-outline)>.card-header a{color:#fff}.card-success:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-success.card-outline{border-top:3px solid #21b978}.card-success.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-success.card-outline-tabs>.card-header a.active{border-top:3px solid #21b978}.bg-gradient-success .btn-tool,.bg-success .btn-tool,.card-success:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-gradient-success .btn-tool:hover,.bg-success .btn-tool:hover,.card-success:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-gradient-success .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-success .bootstrap-datetimepicker-widget .table th,.card.bg-success .bootstrap-datetimepicker-widget .table td,.card.bg-success .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-success .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-success .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-success .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-success .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-success .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-success .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-success .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-success .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-success .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-success .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#1b9662;color:#fff}.card.bg-gradient-success .bootstrap-datetimepicker-widget table td.today:before,.card.bg-success .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-gradient-success .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-success .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-success .bootstrap-datetimepicker-widget table td.active,.card.bg-success .bootstrap-datetimepicker-widget table td.active:hover{background:#32db93;color:#fff}.card-info:not(.card-outline)>.card-header{background-color:#4277cf}.card-info:not(.card-outline)>.card-header,.card-info:not(.card-outline)>.card-header a{color:#fff}.card-info:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-info.card-outline{border-top:3px solid #4277cf}.card-info.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-info.card-outline-tabs>.card-header a.active{border-top:3px solid #4277cf}.bg-gradient-info .btn-tool,.bg-info .btn-tool,.card-info:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-gradient-info .btn-tool:hover,.bg-info .btn-tool:hover,.card-info:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-gradient-info .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-info .bootstrap-datetimepicker-widget .table th,.card.bg-info .bootstrap-datetimepicker-widget .table td,.card.bg-info .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-info .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-info .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-info .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-info .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-info .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-info .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-info .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-info .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-info .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-info .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#2f63b9;color:#fff}.card.bg-gradient-info .bootstrap-datetimepicker-widget table td.today:before,.card.bg-info .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-gradient-info .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-info .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-info .bootstrap-datetimepicker-widget table td.active,.card.bg-info .bootstrap-datetimepicker-widget table td.active:hover{background:#6b94d9;color:#fff}.card-warning:not(.card-outline)>.card-header{background-color:#dda451}.card-warning:not(.card-outline)>.card-header,.card-warning:not(.card-outline)>.card-header a,.card-warning:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-warning.card-outline{border-top:3px solid #dda451}.card-warning.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-warning.card-outline-tabs>.card-header a.active{border-top:3px solid #dda451}.bg-gradient-warning .btn-tool,.bg-warning .btn-tool,.card-warning:not(.card-outline) .btn-tool{color:rgba(42,46,48,.8)}.bg-gradient-warning .btn-tool:hover,.bg-warning .btn-tool:hover,.card-warning:not(.card-outline) .btn-tool:hover{color:#2a2e30}.card.bg-gradient-warning .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-warning .bootstrap-datetimepicker-widget .table th,.card.bg-warning .bootstrap-datetimepicker-widget .table td,.card.bg-warning .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-warning .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-warning .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-warning .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-warning .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-warning .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-warning .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-warning .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-warning .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-warning .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-warning .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#d6922f;color:#2a2e30}.card.bg-gradient-warning .bootstrap-datetimepicker-widget table td.today:before,.card.bg-warning .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#2a2e30}.card.bg-gradient-warning .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-warning .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-warning .bootstrap-datetimepicker-widget table td.active,.card.bg-warning .bootstrap-datetimepicker-widget table td.active:hover{background:#e5ba7c;color:#2a2e30}.card-danger:not(.card-outline)>.card-header{background-color:#ea5455}.card-danger:not(.card-outline)>.card-header,.card-danger:not(.card-outline)>.card-header a{color:#fff}.card-danger:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-danger.card-outline{border-top:3px solid #ea5455}.card-danger.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-danger.card-outline-tabs>.card-header a.active{border-top:3px solid #ea5455}.bg-danger .btn-tool,.bg-gradient-danger .btn-tool,.card-danger:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-danger .btn-tool:hover,.bg-gradient-danger .btn-tool:hover,.card-danger:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-danger .bootstrap-datetimepicker-widget .table td,.card.bg-danger .bootstrap-datetimepicker-widget .table th,.card.bg-gradient-danger .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-danger .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-danger .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-danger .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-danger .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-danger .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-danger .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-gradient-danger .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-danger .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-danger .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-danger .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-danger .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#e63031;color:#fff}.card.bg-danger .bootstrap-datetimepicker-widget table td.today:before,.card.bg-gradient-danger .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-danger .bootstrap-datetimepicker-widget table td.active,.card.bg-danger .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-gradient-danger .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-danger .bootstrap-datetimepicker-widget table td.active:hover{background:#f08182;color:#fff}.card-light:not(.card-outline)>.card-header{background-color:#f7f7f9}.card-light:not(.card-outline)>.card-header,.card-light:not(.card-outline)>.card-header a,.card-light:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-light.card-outline{border-top:3px solid #f7f7f9}.card-light.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-light.card-outline-tabs>.card-header a.active{border-top:3px solid #f7f7f9}.bg-gradient-light .btn-tool,.bg-light .btn-tool,.card-light:not(.card-outline) .btn-tool{color:rgba(42,46,48,.8)}.bg-gradient-light .btn-tool:hover,.bg-light .btn-tool:hover,.card-light:not(.card-outline) .btn-tool:hover{color:#2a2e30}.card.bg-gradient-light .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-light .bootstrap-datetimepicker-widget .table th,.card.bg-light .bootstrap-datetimepicker-widget .table td,.card.bg-light .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-light .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-light .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-light .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-light .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-light .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-light .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-light .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-light .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-light .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-light .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#e0e0e8;color:#2a2e30}.card.bg-gradient-light .bootstrap-datetimepicker-widget table td.today:before,.card.bg-light .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#2a2e30}.card.bg-gradient-light .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-light .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-light .bootstrap-datetimepicker-widget table td.active,.card.bg-light .bootstrap-datetimepicker-widget table td.active:hover{background:#fff;color:#2a2e30}.card-dark:not(.card-outline)>.card-header{background-color:#22292f}.card-dark:not(.card-outline)>.card-header,.card-dark:not(.card-outline)>.card-header a{color:#fff}.card-dark:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-dark.card-outline{border-top:3px solid #22292f}.card-dark.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-dark.card-outline-tabs>.card-header a.active{border-top:3px solid #22292f}.bg-dark .btn-tool,.bg-gradient-dark .btn-tool,.card-dark:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-dark .btn-tool:hover,.bg-gradient-dark .btn-tool:hover,.card-dark:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-dark .bootstrap-datetimepicker-widget .table td,.card.bg-dark .bootstrap-datetimepicker-widget .table th,.card.bg-gradient-dark .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-dark .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-dark .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-dark .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-dark .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-dark .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-dark .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-gradient-dark .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-dark .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-dark .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-dark .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-dark .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#111417;color:#fff}.card.bg-dark .bootstrap-datetimepicker-widget table td.today:before,.card.bg-gradient-dark .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-dark .bootstrap-datetimepicker-widget table td.active,.card.bg-dark .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-gradient-dark .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-dark .bootstrap-datetimepicker-widget table td.active:hover{background:#37434d;color:#fff}.card-lightblue:not(.card-outline)>.card-header{background-color:#3c8dbc}.card-lightblue:not(.card-outline)>.card-header,.card-lightblue:not(.card-outline)>.card-header a{color:#fff}.card-lightblue:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-lightblue.card-outline{border-top:3px solid #3c8dbc}.card-lightblue.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-lightblue.card-outline-tabs>.card-header a.active{border-top:3px solid #3c8dbc}.bg-gradient-lightblue .btn-tool,.bg-lightblue .btn-tool,.card-lightblue:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-gradient-lightblue .btn-tool:hover,.bg-lightblue .btn-tool:hover,.card-lightblue:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-gradient-lightblue .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-lightblue .bootstrap-datetimepicker-widget .table th,.card.bg-lightblue .bootstrap-datetimepicker-widget .table td,.card.bg-lightblue .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-lightblue .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-lightblue .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-lightblue .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-lightblue .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-lightblue .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-lightblue .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-lightblue .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-lightblue .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-lightblue .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-lightblue .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#32769d;color:#fff}.card.bg-gradient-lightblue .bootstrap-datetimepicker-widget table td.today:before,.card.bg-lightblue .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-gradient-lightblue .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-lightblue .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-lightblue .bootstrap-datetimepicker-widget table td.active,.card.bg-lightblue .bootstrap-datetimepicker-widget table td.active:hover{background:#5fa4cc;color:#fff}.card-navy:not(.card-outline)>.card-header{background-color:#001f3f}.card-navy:not(.card-outline)>.card-header,.card-navy:not(.card-outline)>.card-header a{color:#fff}.card-navy:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-navy.card-outline{border-top:3px solid #001f3f}.card-navy.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-navy.card-outline-tabs>.card-header a.active{border-top:3px solid #001f3f}.bg-gradient-navy .btn-tool,.bg-navy .btn-tool,.card-navy:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-gradient-navy .btn-tool:hover,.bg-navy .btn-tool:hover,.card-navy:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-gradient-navy .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-navy .bootstrap-datetimepicker-widget .table th,.card.bg-navy .bootstrap-datetimepicker-widget .table td,.card.bg-navy .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-navy .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-navy .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-navy .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-navy .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-navy .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-navy .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-navy .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-navy .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-navy .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-navy .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#000b16;color:#fff}.card.bg-gradient-navy .bootstrap-datetimepicker-widget table td.today:before,.card.bg-navy .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-gradient-navy .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-navy .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-navy .bootstrap-datetimepicker-widget table td.active,.card.bg-navy .bootstrap-datetimepicker-widget table td.active:hover{background:#003872;color:#fff}.card-olive:not(.card-outline)>.card-header{background-color:#3d9970}.card-olive:not(.card-outline)>.card-header,.card-olive:not(.card-outline)>.card-header a{color:#fff}.card-olive:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-olive.card-outline{border-top:3px solid #3d9970}.card-olive.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-olive.card-outline-tabs>.card-header a.active{border-top:3px solid #3d9970}.bg-gradient-olive .btn-tool,.bg-olive .btn-tool,.card-olive:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-gradient-olive .btn-tool:hover,.bg-olive .btn-tool:hover,.card-olive:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-gradient-olive .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-olive .bootstrap-datetimepicker-widget .table th,.card.bg-olive .bootstrap-datetimepicker-widget .table td,.card.bg-olive .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-olive .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-olive .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-olive .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-olive .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-olive .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-olive .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-olive .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-olive .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-olive .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-olive .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#317c5b;color:#fff}.card.bg-gradient-olive .bootstrap-datetimepicker-widget table td.today:before,.card.bg-olive .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-gradient-olive .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-olive .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-olive .bootstrap-datetimepicker-widget table td.active,.card.bg-olive .bootstrap-datetimepicker-widget table td.active:hover{background:#50b98a;color:#fff}.card-lime:not(.card-outline)>.card-header{background-color:#01ff70}.card-lime:not(.card-outline)>.card-header,.card-lime:not(.card-outline)>.card-header a,.card-lime:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-lime.card-outline{border-top:3px solid #01ff70}.card-lime.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-lime.card-outline-tabs>.card-header a.active{border-top:3px solid #01ff70}.bg-gradient-lime .btn-tool,.bg-lime .btn-tool,.card-lime:not(.card-outline) .btn-tool{color:rgba(42,46,48,.8)}.bg-gradient-lime .btn-tool:hover,.bg-lime .btn-tool:hover,.card-lime:not(.card-outline) .btn-tool:hover{color:#2a2e30}.card.bg-gradient-lime .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-lime .bootstrap-datetimepicker-widget .table th,.card.bg-lime .bootstrap-datetimepicker-widget .table td,.card.bg-lime .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-lime .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-lime .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-lime .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-lime .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-lime .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-lime .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-lime .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-lime .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-lime .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-lime .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#00d75e;color:#2a2e30}.card.bg-gradient-lime .bootstrap-datetimepicker-widget table td.today:before,.card.bg-lime .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#2a2e30}.card.bg-gradient-lime .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-lime .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-lime .bootstrap-datetimepicker-widget table td.active,.card.bg-lime .bootstrap-datetimepicker-widget table td.active:hover{background:#34ff8d;color:#2a2e30}.card-fuchsia:not(.card-outline)>.card-header{background-color:#f012be}.card-fuchsia:not(.card-outline)>.card-header,.card-fuchsia:not(.card-outline)>.card-header a{color:#fff}.card-fuchsia:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-fuchsia.card-outline{border-top:3px solid #f012be}.card-fuchsia.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-fuchsia.card-outline-tabs>.card-header a.active{border-top:3px solid #f012be}.bg-fuchsia .btn-tool,.bg-gradient-fuchsia .btn-tool,.card-fuchsia:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-fuchsia .btn-tool:hover,.bg-gradient-fuchsia .btn-tool:hover,.card-fuchsia:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-fuchsia .bootstrap-datetimepicker-widget .table td,.card.bg-fuchsia .bootstrap-datetimepicker-widget .table th,.card.bg-gradient-fuchsia .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-fuchsia .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-fuchsia .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-fuchsia .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-fuchsia .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-fuchsia .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-fuchsia .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-gradient-fuchsia .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-fuchsia .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-fuchsia .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-fuchsia .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-fuchsia .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#cc0da1;color:#fff}.card.bg-fuchsia .bootstrap-datetimepicker-widget table td.today:before,.card.bg-gradient-fuchsia .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-fuchsia .bootstrap-datetimepicker-widget table td.active,.card.bg-fuchsia .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-gradient-fuchsia .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-fuchsia .bootstrap-datetimepicker-widget table td.active:hover{background:#f342cb;color:#fff}.card-maroon:not(.card-outline)>.card-header{background-color:#d81b60}.card-maroon:not(.card-outline)>.card-header,.card-maroon:not(.card-outline)>.card-header a{color:#fff}.card-maroon:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-maroon.card-outline{border-top:3px solid #d81b60}.card-maroon.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-maroon.card-outline-tabs>.card-header a.active{border-top:3px solid #d81b60}.bg-gradient-maroon .btn-tool,.bg-maroon .btn-tool,.card-maroon:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-gradient-maroon .btn-tool:hover,.bg-maroon .btn-tool:hover,.card-maroon:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-gradient-maroon .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-maroon .bootstrap-datetimepicker-widget .table th,.card.bg-maroon .bootstrap-datetimepicker-widget .table td,.card.bg-maroon .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-maroon .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-maroon .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-maroon .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-maroon .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-maroon .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-maroon .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-maroon .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-maroon .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-maroon .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-maroon .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#b41650;color:#fff}.card.bg-gradient-maroon .bootstrap-datetimepicker-widget table td.today:before,.card.bg-maroon .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-gradient-maroon .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-maroon .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-maroon .bootstrap-datetimepicker-widget table td.active,.card.bg-maroon .bootstrap-datetimepicker-widget table td.active:hover{background:#e73f7c;color:#fff}.card-blue:not(.card-outline)>.card-header{background-color:#3085d6}.card-blue:not(.card-outline)>.card-header,.card-blue:not(.card-outline)>.card-header a{color:#fff}.card-blue:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-blue.card-outline{border-top:3px solid #3085d6}.card-blue.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-blue.card-outline-tabs>.card-header a.active{border-top:3px solid #3085d6}.bg-blue .btn-tool,.bg-gradient-blue .btn-tool,.card-blue:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-blue .btn-tool:hover,.bg-gradient-blue .btn-tool:hover,.card-blue:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-blue .bootstrap-datetimepicker-widget .table td,.card.bg-blue .bootstrap-datetimepicker-widget .table th,.card.bg-gradient-blue .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-blue .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-blue .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-blue .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-blue .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-blue .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-blue .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-gradient-blue .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-blue .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-blue .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-blue .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-blue .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#2570b9;color:#fff}.card.bg-blue .bootstrap-datetimepicker-widget table td.today:before,.card.bg-gradient-blue .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-blue .bootstrap-datetimepicker-widget table td.active,.card.bg-blue .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-gradient-blue .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-blue .bootstrap-datetimepicker-widget table td.active:hover{background:#5b9ede;color:#fff}.card-indigo:not(.card-outline)>.card-header{background-color:#5c6bc6}.card-indigo:not(.card-outline)>.card-header,.card-indigo:not(.card-outline)>.card-header a{color:#fff}.card-indigo:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-indigo.card-outline{border-top:3px solid #5c6bc6}.card-indigo.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-indigo.card-outline-tabs>.card-header a.active{border-top:3px solid #5c6bc6}.bg-gradient-indigo .btn-tool,.bg-indigo .btn-tool,.card-indigo:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-gradient-indigo .btn-tool:hover,.bg-indigo .btn-tool:hover,.card-indigo:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-gradient-indigo .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-indigo .bootstrap-datetimepicker-widget .table th,.card.bg-indigo .bootstrap-datetimepicker-widget .table td,.card.bg-indigo .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-indigo .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-indigo .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-indigo .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-indigo .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-indigo .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-indigo .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-indigo .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-indigo .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-indigo .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-indigo .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#4152b9;color:#fff}.card.bg-gradient-indigo .bootstrap-datetimepicker-widget table td.today:before,.card.bg-indigo .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-gradient-indigo .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-indigo .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-indigo .bootstrap-datetimepicker-widget table td.active,.card.bg-indigo .bootstrap-datetimepicker-widget table td.active:hover{background:#828dd3;color:#fff}.card-purple:not(.card-outline)>.card-header{background-color:#6f42c1}.card-purple:not(.card-outline)>.card-header,.card-purple:not(.card-outline)>.card-header a{color:#fff}.card-purple:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-purple.card-outline{border-top:3px solid #6f42c1}.card-purple.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-purple.card-outline-tabs>.card-header a.active{border-top:3px solid #6f42c1}.bg-gradient-purple .btn-tool,.bg-purple .btn-tool,.card-purple:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-gradient-purple .btn-tool:hover,.bg-purple .btn-tool:hover,.card-purple:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-gradient-purple .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-purple .bootstrap-datetimepicker-widget .table th,.card.bg-purple .bootstrap-datetimepicker-widget .table td,.card.bg-purple .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-purple .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-purple .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-purple .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-purple .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-purple .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-purple .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-purple .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-purple .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-purple .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-purple .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#5d36a4;color:#fff}.card.bg-gradient-purple .bootstrap-datetimepicker-widget table td.today:before,.card.bg-purple .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-gradient-purple .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-purple .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-purple .bootstrap-datetimepicker-widget table td.active,.card.bg-purple .bootstrap-datetimepicker-widget table td.active:hover{background:#8c68ce;color:#fff}.card-pink:not(.card-outline)>.card-header{background-color:#ff8acc}.card-pink:not(.card-outline)>.card-header,.card-pink:not(.card-outline)>.card-header a,.card-pink:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-pink.card-outline{border-top:3px solid #ff8acc}.card-pink.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-pink.card-outline-tabs>.card-header a.active{border-top:3px solid #ff8acc}.bg-gradient-pink .btn-tool,.bg-pink .btn-tool,.card-pink:not(.card-outline) .btn-tool{color:rgba(42,46,48,.8)}.bg-gradient-pink .btn-tool:hover,.bg-pink .btn-tool:hover,.card-pink:not(.card-outline) .btn-tool:hover{color:#2a2e30}.card.bg-gradient-pink .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-pink .bootstrap-datetimepicker-widget .table th,.card.bg-pink .bootstrap-datetimepicker-widget .table td,.card.bg-pink .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-pink .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-pink .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-pink .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-pink .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-pink .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-pink .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-pink .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-pink .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-pink .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-pink .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#ff61ba;color:#2a2e30}.card.bg-gradient-pink .bootstrap-datetimepicker-widget table td.today:before,.card.bg-pink .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#2a2e30}.card.bg-gradient-pink .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-pink .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-pink .bootstrap-datetimepicker-widget table td.active,.card.bg-pink .bootstrap-datetimepicker-widget table td.active:hover{background:#ffbde2;color:#2a2e30}.card-red:not(.card-outline)>.card-header{background-color:#ea5455}.card-red:not(.card-outline)>.card-header,.card-red:not(.card-outline)>.card-header a{color:#fff}.card-red:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-red.card-outline{border-top:3px solid #ea5455}.card-red.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-red.card-outline-tabs>.card-header a.active{border-top:3px solid #ea5455}.bg-gradient-red .btn-tool,.bg-red .btn-tool,.card-red:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-gradient-red .btn-tool:hover,.bg-red .btn-tool:hover,.card-red:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-gradient-red .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-red .bootstrap-datetimepicker-widget .table th,.card.bg-red .bootstrap-datetimepicker-widget .table td,.card.bg-red .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-red .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-red .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-red .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-red .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-red .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-red .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-red .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-red .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-red .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-red .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#e63031;color:#fff}.card.bg-gradient-red .bootstrap-datetimepicker-widget table td.today:before,.card.bg-red .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-gradient-red .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-red .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-red .bootstrap-datetimepicker-widget table td.active,.card.bg-red .bootstrap-datetimepicker-widget table td.active:hover{background:#f08182;color:#fff}.card-orange:not(.card-outline)>.card-header{background-color:#dda451}.card-orange:not(.card-outline)>.card-header,.card-orange:not(.card-outline)>.card-header a,.card-orange:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-orange.card-outline{border-top:3px solid #dda451}.card-orange.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-orange.card-outline-tabs>.card-header a.active{border-top:3px solid #dda451}.bg-gradient-orange .btn-tool,.bg-orange .btn-tool,.card-orange:not(.card-outline) .btn-tool{color:rgba(42,46,48,.8)}.bg-gradient-orange .btn-tool:hover,.bg-orange .btn-tool:hover,.card-orange:not(.card-outline) .btn-tool:hover{color:#2a2e30}.card.bg-gradient-orange .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-orange .bootstrap-datetimepicker-widget .table th,.card.bg-orange .bootstrap-datetimepicker-widget .table td,.card.bg-orange .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-orange .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-orange .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-orange .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-orange .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-orange .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-orange .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-orange .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-orange .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-orange .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-orange .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#d6922f;color:#2a2e30}.card.bg-gradient-orange .bootstrap-datetimepicker-widget table td.today:before,.card.bg-orange .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#2a2e30}.card.bg-gradient-orange .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-orange .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-orange .bootstrap-datetimepicker-widget table td.active,.card.bg-orange .bootstrap-datetimepicker-widget table td.active:hover{background:#e5ba7c;color:#2a2e30}.card-yellow:not(.card-outline)>.card-header{background-color:#edc30e}.card-yellow:not(.card-outline)>.card-header,.card-yellow:not(.card-outline)>.card-header a,.card-yellow:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-yellow.card-outline{border-top:3px solid #edc30e}.card-yellow.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-yellow.card-outline-tabs>.card-header a.active{border-top:3px solid #edc30e}.bg-gradient-yellow .btn-tool,.bg-yellow .btn-tool,.card-yellow:not(.card-outline) .btn-tool{color:rgba(42,46,48,.8)}.bg-gradient-yellow .btn-tool:hover,.bg-yellow .btn-tool:hover,.card-yellow:not(.card-outline) .btn-tool:hover{color:#2a2e30}.card.bg-gradient-yellow .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-yellow .bootstrap-datetimepicker-widget .table th,.card.bg-yellow .bootstrap-datetimepicker-widget .table td,.card.bg-yellow .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-yellow .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-yellow .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-yellow .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-yellow .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-yellow .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-yellow .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-yellow .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-yellow .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-yellow .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-yellow .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#c6a30c;color:#2a2e30}.card.bg-gradient-yellow .bootstrap-datetimepicker-widget table td.today:before,.card.bg-yellow .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#2a2e30}.card.bg-gradient-yellow .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-yellow .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-yellow .bootstrap-datetimepicker-widget table td.active,.card.bg-yellow .bootstrap-datetimepicker-widget table td.active:hover{background:#f3d13b;color:#2a2e30}.card-green:not(.card-outline)>.card-header{background-color:#21b978}.card-green:not(.card-outline)>.card-header,.card-green:not(.card-outline)>.card-header a{color:#fff}.card-green:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-green.card-outline{border-top:3px solid #21b978}.card-green.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-green.card-outline-tabs>.card-header a.active{border-top:3px solid #21b978}.bg-gradient-green .btn-tool,.bg-green .btn-tool,.card-green:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-gradient-green .btn-tool:hover,.bg-green .btn-tool:hover,.card-green:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-gradient-green .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-green .bootstrap-datetimepicker-widget .table th,.card.bg-green .bootstrap-datetimepicker-widget .table td,.card.bg-green .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-green .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-green .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-green .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-green .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-green .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-green .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-green .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-green .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-green .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-green .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#1b9662;color:#fff}.card.bg-gradient-green .bootstrap-datetimepicker-widget table td.today:before,.card.bg-green .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-gradient-green .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-green .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-green .bootstrap-datetimepicker-widget table td.active,.card.bg-green .bootstrap-datetimepicker-widget table td.active:hover{background:#32db93;color:#fff}.card-teal:not(.card-outline)>.card-header{background-color:#20c997}.card-teal:not(.card-outline)>.card-header,.card-teal:not(.card-outline)>.card-header a{color:#fff}.card-teal:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-teal.card-outline{border-top:3px solid #20c997}.card-teal.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-teal.card-outline-tabs>.card-header a.active{border-top:3px solid #20c997}.bg-gradient-teal .btn-tool,.bg-teal .btn-tool,.card-teal:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-gradient-teal .btn-tool:hover,.bg-teal .btn-tool:hover,.card-teal:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-gradient-teal .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-teal .bootstrap-datetimepicker-widget .table th,.card.bg-teal .bootstrap-datetimepicker-widget .table td,.card.bg-teal .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-teal .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-teal .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-teal .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-teal .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-teal .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-teal .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-teal .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-teal .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-teal .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-teal .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#1aa67d;color:#fff}.card.bg-gradient-teal .bootstrap-datetimepicker-widget table td.today:before,.card.bg-teal .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-gradient-teal .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-teal .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-teal .bootstrap-datetimepicker-widget table td.active,.card.bg-teal .bootstrap-datetimepicker-widget table td.active:hover{background:#3ce0af;color:#fff}.card-cyan:not(.card-outline)>.card-header{background-color:#7367f0}.card-cyan:not(.card-outline)>.card-header,.card-cyan:not(.card-outline)>.card-header a{color:#fff}.card-cyan:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-cyan.card-outline{border-top:3px solid #7367f0}.card-cyan.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-cyan.card-outline-tabs>.card-header a.active{border-top:3px solid #7367f0}.bg-cyan .btn-tool,.bg-gradient-cyan .btn-tool,.card-cyan:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-cyan .btn-tool:hover,.bg-gradient-cyan .btn-tool:hover,.card-cyan:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-cyan .bootstrap-datetimepicker-widget .table td,.card.bg-cyan .bootstrap-datetimepicker-widget .table th,.card.bg-gradient-cyan .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-cyan .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-cyan .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-cyan .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-cyan .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-cyan .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-cyan .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-gradient-cyan .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-cyan .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-cyan .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-cyan .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-cyan .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#5142ec;color:#fff}.card.bg-cyan .bootstrap-datetimepicker-widget table td.today:before,.card.bg-gradient-cyan .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-cyan .bootstrap-datetimepicker-widget table td.active,.card.bg-cyan .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-gradient-cyan .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-cyan .bootstrap-datetimepicker-widget table td.active:hover{background:#9e95f5;color:#fff}.card-white:not(.card-outline)>.card-header{background-color:#fff}.card-white:not(.card-outline)>.card-header,.card-white:not(.card-outline)>.card-header a,.card-white:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-white.card-outline{border-top:3px solid #fff}.card-white.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-white.card-outline-tabs>.card-header a.active{border-top:3px solid #fff}.bg-gradient-white .btn-tool,.bg-white .btn-tool,.card-white:not(.card-outline) .btn-tool{color:rgba(42,46,48,.8)}.bg-gradient-white .btn-tool:hover,.bg-white .btn-tool:hover,.card-white:not(.card-outline) .btn-tool:hover{color:#2a2e30}.card.bg-gradient-white .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-white .bootstrap-datetimepicker-widget .table th,.card.bg-white .bootstrap-datetimepicker-widget .table td,.card.bg-white .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-white .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-white .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-white .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-white .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-white .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-white .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-white .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-white .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-white .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-white .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#ebebeb;color:#2a2e30}.card.bg-gradient-white .bootstrap-datetimepicker-widget table td.today:before,.card.bg-white .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#2a2e30}.card.bg-gradient-white .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-white .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-white .bootstrap-datetimepicker-widget table td.active,.card.bg-white .bootstrap-datetimepicker-widget table td.active:hover{background:#fff;color:#2a2e30}.card-gray:not(.card-outline)>.card-header{background-color:#b8c2cc}.card-gray:not(.card-outline)>.card-header,.card-gray:not(.card-outline)>.card-header a,.card-gray:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-gray.card-outline{border-top:3px solid #b8c2cc}.card-gray.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-gray.card-outline-tabs>.card-header a.active{border-top:3px solid #b8c2cc}.bg-gradient-gray .btn-tool,.bg-gray .btn-tool,.card-gray:not(.card-outline) .btn-tool{color:rgba(42,46,48,.8)}.bg-gradient-gray .btn-tool:hover,.bg-gray .btn-tool:hover,.card-gray:not(.card-outline) .btn-tool:hover{color:#2a2e30}.card.bg-gradient-gray .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-gray .bootstrap-datetimepicker-widget .table th,.card.bg-gray .bootstrap-datetimepicker-widget .table td,.card.bg-gray .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-gray .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-gray .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-gray .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-gray .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-gray .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-gray .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gray .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gray .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gray .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gray .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#a0aebb;color:#2a2e30}.card.bg-gradient-gray .bootstrap-datetimepicker-widget table td.today:before,.card.bg-gray .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#2a2e30}.card.bg-gradient-gray .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-gray .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-gray .bootstrap-datetimepicker-widget table td.active,.card.bg-gray .bootstrap-datetimepicker-widget table td.active:hover{background:#d6dce1;color:#2a2e30}.card-gray-dark:not(.card-outline)>.card-header{background-color:#1e1e1e}.card-gray-dark:not(.card-outline)>.card-header,.card-gray-dark:not(.card-outline)>.card-header a{color:#fff}.card-gray-dark:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-gray-dark.card-outline{border-top:3px solid #1e1e1e}.card-gray-dark.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-gray-dark.card-outline-tabs>.card-header a.active{border-top:3px solid #1e1e1e}.bg-gradient-gray-dark .btn-tool,.bg-gray-dark .btn-tool,.card-gray-dark:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-gradient-gray-dark .btn-tool:hover,.bg-gray-dark .btn-tool:hover,.card-gray-dark:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-gradient-gray-dark .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-gray-dark .bootstrap-datetimepicker-widget .table th,.card.bg-gray-dark .bootstrap-datetimepicker-widget .table td,.card.bg-gray-dark .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-gray-dark .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-gray-dark .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-gray-dark .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-gray-dark .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-gray-dark .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-gray-dark .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gray-dark .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gray-dark .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gray-dark .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gray-dark .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#0a0a0a;color:#fff}.card.bg-gradient-gray-dark .bootstrap-datetimepicker-widget table td.today:before,.card.bg-gray-dark .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-gradient-gray-dark .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-gray-dark .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-gray-dark .bootstrap-datetimepicker-widget table td.active,.card.bg-gray-dark .bootstrap-datetimepicker-widget table td.active:hover{background:#383838;color:#fff}.card{margin-bottom:3rem;border:0}.card.bg-dark .card-header{border-color:#42484b}.card.bg-dark,.card.bg-dark .card-body{color:#fff}.card.maximized-card{height:100%!important;left:0;max-height:100%!important;max-width:100%!important;position:fixed;top:0;width:100%!important;z-index:9999}.card.maximized-card.was-collapsed .card-body{display:block!important}.card.maximized-card [data-widget=collapse]{display:none}.card.maximized-card .card-footer,.card.maximized-card .card-header{border-radius:0!important}.card.collapsed-card .card-body,.card.collapsed-card .card-footer{display:none}.card .nav.flex-column>li{border-bottom:1px solid rgba(34,41,47,.125);margin:0}.card .nav.flex-column>li:last-of-type{border-bottom:0}.card.height-control .card-body{max-height:300px;overflow:auto}.card .border-right{border-right:1px solid rgba(34,41,47,.125)}.card .border-left{border-left:1px solid rgba(34,41,47,.125)}.card.card-tabs:not(.card-outline)>.card-header{border-bottom:0}.card.card-tabs:not(.card-outline)>.card-header .nav-item:first-child .nav-link{margin-left:-1px}.card.card-tabs.card-outline .nav-item{border-bottom:0}.card.card-tabs.card-outline .nav-item:first-child .nav-link{border-left:0;margin-left:0}.card.card-tabs .card-tools{margin:.3rem .5rem}.card.card-tabs:not(.expanding-card).collapsed-card .card-header,.card.card-tabs:not(.expanding-card).collapsed-card .card-header .nav-tabs{border-bottom:0}.card.card-tabs:not(.expanding-card).collapsed-card .card-header .nav-tabs .nav-item{margin-bottom:0}.card.card-tabs.expanding-card .card-header .nav-tabs .nav-item{margin-bottom:-1px}.card.card-outline-tabs{border-top:0}.card.card-outline-tabs .card-header .nav-item:first-child .nav-link{border-left:0;margin-left:0}.card.card-outline-tabs .card-header a{border-top:3px solid transparent}.card.card-outline-tabs .card-header a:hover{border-top:3px solid #dae1e7}.card.card-outline-tabs .card-header a.active:hover{margin-top:0}.card.card-outline-tabs .card-tools{margin:.5rem .5rem .3rem}.card.card-outline-tabs:not(.expanding-card).collapsed-card .card-header,.card.card-outline-tabs:not(.expanding-card).collapsed-card .card-header .nav-tabs{border-bottom:0}.card.card-outline-tabs:not(.expanding-card).collapsed-card .card-header .nav-tabs .nav-item{margin-bottom:0}.card.card-outline-tabs.expanding-card .card-header .nav-tabs .nav-item{margin-bottom:-1px}html.maximized-card{overflow:hidden}.card-header{background-color:transparent;border-bottom:0;padding:.75rem 1.25rem;position:relative;border-top-left-radius:.5rem;border-top-right-radius:.5rem}.collapsed-card .card-header{border-bottom:0}.card-header>.card-tools{float:right;margin-right:-.625rem}.card-header>.card-tools .input-group,.card-header>.card-tools .nav,.card-header>.card-tools .pagination{margin-bottom:-.3rem;margin-top:-.3rem}.card-header>.card-tools [data-toggle=tooltip]{position:relative}.card-title{float:left;font-size:1.1rem;font-weight:400;margin:0}.card-text{clear:both}.btn-tool{background:transparent;color:#adb5bd;font-size:1rem;margin:-.75rem 0;padding:.25rem .5rem}.btn-group.show .btn-tool,.btn-tool:hover{color:#4e5154}.btn-tool:focus,.show .btn-tool{box-shadow:none!important}.text-sm .card-title{font-size:1rem}.text-sm .nav-link{padding:.4rem .8rem}.card-body>.table{margin-bottom:0}.card-body>.table>thead>tr>td,.card-body>.table>thead>tr>th{border-top-width:0}.card-body .fc{margin-top:5px}.card-body .full-width-chart{margin:-19px}.card-body.p-0 .full-width-chart{margin:-9px}.chart-legend{padding-left:0;list-style:none;margin:10px 0}@media (max-width:576px){.chart-legend>li{float:left;margin-right:10px}}.card-comments{background:#babfc7}.card-comments .card-comment{border-bottom:1px solid #ededed;padding:8px 0}.card-comments .card-comment:after{display:block;clear:both;content:""}.card-comments .card-comment:last-of-type{border-bottom:0}.card-comments .card-comment:first-of-type{padding-top:0}.card-comments .card-comment img{height:1.875rem;width:1.875rem;float:left}.card-comments .comment-text{color:#7f8489;margin-left:40px}.card-comments .username{color:#4e5154;display:block;font-weight:600}.card-comments .text-muted{font-size:12px;font-weight:400}.todo-list{list-style:none;margin:0;overflow:auto;padding:0}.todo-list>li{border-radius:2px;background:#babfc7;border-left:2px solid #ededed;color:#4e5154;margin-bottom:2px;padding:10px}.todo-list>li:last-of-type{margin-bottom:0}.todo-list>li>input[type=checkbox]{margin:0 10px 0 5px}.todo-list>li .text{display:inline-block;font-weight:600;margin-left:5px}.todo-list>li .badge{font-size:.7rem;margin-left:10px}.todo-list>li .tools{color:#ea5455;display:none;float:right}.todo-list>li .tools>.fa,.todo-list>li .tools>.fab,.todo-list>li .tools>.far,.todo-list>li .tools>.fas,.todo-list>li .tools>.glyphicon,.todo-list>li .tools>.ion{cursor:pointer;margin-right:5px}.todo-list>li:hover .tools{display:inline-block}.todo-list>li.done{color:#697582}.todo-list>li.done .text{font-weight:500;text-decoration:line-through}.todo-list>li.done .badge{background:#adb5bd!important}.todo-list .primary{border-left-color:#4e9876}.todo-list .secondary{border-left-color:#b8c2cc}.todo-list .success{border-left-color:#21b978}.todo-list .info{border-left-color:#4277cf}.todo-list .warning{border-left-color:#dda451}.todo-list .danger{border-left-color:#ea5455}.todo-list .light{border-left-color:#f7f7f9}.todo-list .dark{border-left-color:#22292f}.todo-list .lightblue{border-left-color:#3c8dbc}.todo-list .navy{border-left-color:#001f3f}.todo-list .olive{border-left-color:#3d9970}.todo-list .lime{border-left-color:#01ff70}.todo-list .fuchsia{border-left-color:#f012be}.todo-list .maroon{border-left-color:#d81b60}.todo-list .blue{border-left-color:#3085d6}.todo-list .indigo{border-left-color:#5c6bc6}.todo-list .purple{border-left-color:#6f42c1}.todo-list .pink{border-left-color:#ff8acc}.todo-list .red{border-left-color:#ea5455}.todo-list .orange{border-left-color:#dda451}.todo-list .yellow{border-left-color:#edc30e}.todo-list .green{border-left-color:#21b978}.todo-list .teal{border-left-color:#20c997}.todo-list .cyan{border-left-color:#7367f0}.todo-list .white{border-left-color:#fff}.todo-list .gray{border-left-color:#b8c2cc}.todo-list .gray-dark{border-left-color:#1e1e1e}.todo-list .handle{cursor:move;display:inline-block;margin:0 5px}.card-input{max-width:200px}.card-default .nav-item:first-child .nav-link{border-left:0}.modal-dialog .overlay{background-color:#22292f;display:block;height:100%;left:0;opacity:.7;position:absolute;top:0;width:100%;z-index:1052}.modal-content.bg-warning .modal-footer,.modal-content.bg-warning .modal-header{border-color:#1e1e1e}.modal-content.bg-danger .close,.modal-content.bg-danger .mailbox-attachment-close,.modal-content.bg-info .close,.modal-content.bg-info .mailbox-attachment-close,.modal-content.bg-primary .close,.modal-content.bg-primary .mailbox-attachment-close,.modal-content.bg-secondary .close,.modal-content.bg-secondary .mailbox-attachment-close,.modal-content.bg-success .close,.modal-content.bg-success .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toasts-top-right{position:absolute;right:0;top:0;z-index:1040}.toasts-top-right.fixed{position:fixed}.toasts-top-left{left:0;position:absolute;top:0;z-index:1040}.toasts-top-left.fixed{position:fixed}.toasts-bottom-right{bottom:0;position:absolute;right:0;z-index:1040}.toasts-bottom-right.fixed{position:fixed}.toasts-bottom-left{bottom:0;left:0;position:absolute;z-index:1040}.toasts-bottom-left.fixed{position:fixed}.toast.bg-primary{background:rgba(78,152,118,.9)!important}.toast.bg-primary .close,.toast.bg-primary .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-primary .toast-header{background:rgba(78,152,118,.85);color:#fff}.toast.bg-secondary{background:rgba(184,194,204,.9)!important}.toast.bg-secondary .toast-header{background:rgba(184,194,204,.85);color:#2a2e30}.toast.bg-success{background:rgba(33,185,120,.9)!important}.toast.bg-success .close,.toast.bg-success .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-success .toast-header{background:rgba(33,185,120,.85);color:#fff}.toast.bg-info{background:rgba(66,119,207,.9)!important}.toast.bg-info .close,.toast.bg-info .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-info .toast-header{background:rgba(66,119,207,.85);color:#fff}.toast.bg-warning{background:rgba(221,164,81,.9)!important}.toast.bg-warning .toast-header{background:rgba(221,164,81,.85);color:#2a2e30}.toast.bg-danger{background:rgba(234,84,85,.9)!important}.toast.bg-danger .close,.toast.bg-danger .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-danger .toast-header{background:rgba(234,84,85,.85);color:#fff}.toast.bg-light{background:rgba(247,247,249,.9)!important}.toast.bg-light .toast-header{background:rgba(247,247,249,.85);color:#2a2e30}.toast.bg-dark{background:rgba(34,41,47,.9)!important}.toast.bg-dark .close,.toast.bg-dark .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-dark .toast-header{background:rgba(34,41,47,.85);color:#fff}.toast.bg-lightblue{background:rgba(60,141,188,.9)!important}.toast.bg-lightblue .close,.toast.bg-lightblue .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-lightblue .toast-header{background:rgba(60,141,188,.85);color:#fff}.toast.bg-navy{background:rgba(0,31,63,.9)!important}.toast.bg-navy .close,.toast.bg-navy .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-navy .toast-header{background:rgba(0,31,63,.85);color:#fff}.toast.bg-olive{background:rgba(61,153,112,.9)!important}.toast.bg-olive .close,.toast.bg-olive .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-olive .toast-header{background:rgba(61,153,112,.85);color:#fff}.toast.bg-lime{background:rgba(1,255,112,.9)!important}.toast.bg-lime .toast-header{background:rgba(1,255,112,.85);color:#2a2e30}.toast.bg-fuchsia{background:rgba(240,18,190,.9)!important}.toast.bg-fuchsia .close,.toast.bg-fuchsia .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-fuchsia .toast-header{background:rgba(240,18,190,.85);color:#fff}.toast.bg-maroon{background:rgba(216,27,96,.9)!important}.toast.bg-maroon .close,.toast.bg-maroon .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-maroon .toast-header{background:rgba(216,27,96,.85);color:#fff}.toast.bg-blue{background:rgba(48,133,214,.9)!important}.toast.bg-blue .close,.toast.bg-blue .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-blue .toast-header{background:rgba(48,133,214,.85);color:#fff}.toast.bg-indigo{background:rgba(92,107,198,.9)!important}.toast.bg-indigo .close,.toast.bg-indigo .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-indigo .toast-header{background:rgba(92,107,198,.85);color:#fff}.toast.bg-purple{background:rgba(111,66,193,.9)!important}.toast.bg-purple .close,.toast.bg-purple .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-purple .toast-header{background:rgba(111,66,193,.85);color:#fff}.toast.bg-pink{background:rgba(255,138,204,.9)!important}.toast.bg-pink .toast-header{background:rgba(255,138,204,.85);color:#2a2e30}.toast.bg-red{background:rgba(234,84,85,.9)!important}.toast.bg-red .close,.toast.bg-red .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-red .toast-header{background:rgba(234,84,85,.85);color:#fff}.toast.bg-orange{background:rgba(221,164,81,.9)!important}.toast.bg-orange .toast-header{background:rgba(221,164,81,.85);color:#2a2e30}.toast.bg-yellow{background:rgba(237,195,14,.9)!important}.toast.bg-yellow .toast-header{background:rgba(237,195,14,.85);color:#2a2e30}.toast.bg-green{background:rgba(33,185,120,.9)!important}.toast.bg-green .close,.toast.bg-green .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-green .toast-header{background:rgba(33,185,120,.85);color:#fff}.toast.bg-teal{background:rgba(32,201,151,.9)!important}.toast.bg-teal .close,.toast.bg-teal .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-teal .toast-header{background:rgba(32,201,151,.85);color:#fff}.toast.bg-cyan{background:rgba(115,103,240,.9)!important}.toast.bg-cyan .close,.toast.bg-cyan .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-cyan .toast-header{background:rgba(115,103,240,.85);color:#fff}.toast.bg-white{background:hsla(0,0%,100%,.9)!important}.toast.bg-white .toast-header{background:hsla(0,0%,100%,.85);color:#2a2e30}.toast.bg-gray{background:rgba(184,194,204,.9)!important}.toast.bg-gray .toast-header{background:rgba(184,194,204,.85);color:#2a2e30}.toast.bg-gray-dark{background:rgba(30,30,30,.9)!important}.toast.bg-gray-dark .close,.toast.bg-gray-dark .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-gray-dark .toast-header{background:rgba(30,30,30,.85);color:#fff}.btn{border-width:1px}.btn.disabled,.btn:disabled{cursor:not-allowed}.btn.btn-flat{border-radius:0;border-width:1px;box-shadow:none}.btn.btn-file{overflow:hidden;position:relative}.btn.btn-file>input[type=file]{background:#fff;cursor:inherit;display:block;font-size:100px;min-height:100%;min-width:100%;opacity:0;outline:none;position:absolute;right:0;text-align:right;top:0}.text-sm .btn{font-size:1rem!important}.btn-default{background-color:#babfc7;border-color:#babfc7;color:#444}.btn-default.hover,.btn-default:active,.btn-default:hover{background-color:#acb2bc;color:#2b2b2b}.btn-app{border-radius:3px;background-color:#babfc7;border:1px solid #ddd;color:#b8c2cc;font-size:12px;height:60px;margin:0 0 10px 10px;min-width:80px;padding:15px 5px;position:relative;text-align:center}.btn-app>.fa,.btn-app>.fab,.btn-app>.far,.btn-app>.fas,.btn-app>.glyphicon,.btn-app>.ion{display:block;font-size:20px}.btn-app:hover{background:#babfc7;border-color:#aaa;color:#444}.btn-app>.badge{font-size:10px;font-weight:400;position:absolute;right:-10px;top:-3px}.btn-xs{padding:.125rem .25rem;font-size:.75rem;border-radius:.15rem}.callout{border-radius:.5rem;background-color:#fff;border:1px solid #dae1e7;border-left:5px solid #ededed;margin-bottom:3rem;padding:1rem}.callout a{color:#4e5154;text-decoration:underline}.callout a:hover{color:#ededed}.callout p:last-child{margin-bottom:0}.callout.callout-danger{border-left-color:#e42728}.callout.callout-warning{border-left-color:#d28d29}.callout.callout-info{border-left-color:#2d5fb1}.callout.callout-success{border-left-color:#198e5c}.alert .icon{margin-right:10px}.alert .close,.alert .mailbox-attachment-close{color:#22292f;opacity:.2}.alert .close:hover,.alert .mailbox-attachment-close:hover{opacity:.5}.alert a{color:#fff;text-decoration:underline}.alert-primary{color:#fff;background:#4e9876;border-color:#458769}.alert-default-primary{color:#396354;background-color:#dceae4;border-color:#cde2d9}.alert-default-primary hr{border-top-color:#bdd9cd}.alert-default-primary .alert-link{color:#264339}.alert-secondary{color:#2a2e30;background:#b8c2cc;border-color:#a9b5c1}.alert-default-secondary{color:#707981;background-color:#f1f3f5;border-color:#ebeef1}.alert-default-secondary hr{border-top-color:#dce1e7}.alert-default-secondary .alert-link{color:#585f66}.alert-success{color:#fff;background:#21b978;border-color:#1da36a}.alert-default-success{color:#217455;background-color:#d3f1e4;border-color:#c1ebd9}.alert-default-success hr{border-top-color:#aee5cd}.alert-default-success .alert-link{color:#164c38}.alert-info{color:#fff;background:#4277cf;border-color:#3269c5}.alert-default-info{color:#335282;background-color:#d9e4f5;border-color:#cad9f2}.alert-default-info hr{border-top-color:#b6caed}.alert-default-info .alert-link{color:#253b5d}.alert-warning{color:#2a2e30;background:#dda451;border-color:#d9993c}.alert-default-warning{color:#836941;background-color:#f8eddc;border-color:#f5e6ce}.alert-default-warning hr{border-top-color:#f1dbb9}.alert-default-warning .alert-link{color:#614e30}.alert-danger{color:#fff;background:#ea5455;border-color:#e73d3e}.alert-default-danger{color:#8a3f43;background-color:#fbdddd;border-color:#f9cfcf}.alert-default-danger hr{border-top-color:#f6b8b8}.alert-default-danger .alert-link{color:#672f32}.alert-light{color:#2a2e30;background:#f7f7f9;border-color:#e8e8ee}.alert-default-light{color:#919498;background-color:#fdfdfe;border-color:#fdfdfd}.alert-default-light hr{border-top-color:#f0f0f0}.alert-default-light .alert-link{color:#777a7f}.alert-dark{color:#fff;background:#22292f;border-color:#171c20}.alert-default-dark{color:#22292f;background-color:#d3d4d5;border-color:#c1c3c5}.alert-default-dark hr{border-top-color:#b4b6b9}.alert-default-dark .alert-link{color:#0d0f11}.table:not(.table-dark){color:inherit}.table.table-head-fixed thead tr:first-child th{background-color:#fff;border-bottom:0;box-shadow:inset 0 1px 0 #eff1f7,inset 0 -1px 0 #eff1f7;position:-webkit-sticky;position:sticky;top:0;z-index:10}.table.table-head-fixed.table-dark thead tr:first-child th{background-color:#1e1e1e;box-shadow:inset 0 1px 0 #313131,inset 0 -1px 0 #313131}.table.no-border,.table.no-border td,.table.no-border th{border:0}.table.text-center,.table.text-center td,.table.text-center th{text-align:center}.table.table-valign-middle tbody>tr>td,.table.table-valign-middle tbody>tr>th,.table.table-valign-middle thead>tr>td,.table.table-valign-middle thead>tr>th{vertical-align:middle}.card-body.p-0 .table tbody>tr>td:first-of-type,.card-body.p-0 .table tbody>tr>th:first-of-type,.card-body.p-0 .table thead>tr>td:first-of-type,.card-body.p-0 .table thead>tr>th:first-of-type{padding-left:3.5rem}.card-body.p-0 .table tbody>tr>td:last-of-type,.card-body.p-0 .table tbody>tr>th:last-of-type,.card-body.p-0 .table thead>tr>td:last-of-type,.card-body.p-0 .table thead>tr>th:last-of-type{padding-right:3.5rem}.carousel-control.left,.carousel-control.right{background-image:none}.carousel-control>.fa,.carousel-control>.fab,.carousel-control>.far,.carousel-control>.fas,.carousel-control>.glyphicon,.carousel-control>.ion{display:inline-block;font-size:40px;margin-top:-20px;position:absolute;top:50%;z-index:5}.small-box{border-radius:.5rem;display:block;margin-bottom:20px;position:relative}.small-box>.inner{padding:10px}.small-box>.small-box-footer{background:rgba(34,41,47,.1);color:hsla(0,0%,100%,.8);display:block;padding:3px 0;position:relative;text-align:center;text-decoration:none;z-index:10}.small-box>.small-box-footer:hover{background:rgba(34,41,47,.15);color:#fff}.small-box h3{font-size:2.2rem;font-weight:700;margin:0 0 10px;padding:0;white-space:nowrap}@media (min-width:992px){.col-lg-2 .small-box h3,.col-lg-3 .small-box h3,.col-md-2 .small-box h3,.col-md-3 .small-box h3,.col-xl-2 .small-box h3,.col-xl-3 .small-box h3{font-size:1.6rem}}@media (min-width:1200px){.col-lg-2 .small-box h3,.col-lg-3 .small-box h3,.col-md-2 .small-box h3,.col-md-3 .small-box h3,.col-xl-2 .small-box h3,.col-xl-3 .small-box h3{font-size:2.2rem}}.small-box p{font-size:1rem}.small-box p>small{color:#babfc7;display:block;font-size:.9rem;margin-top:5px}.small-box h3,.small-box p{z-index:5}.small-box .icon{color:rgba(34,41,47,.15);z-index:0}.small-box .icon>i{font-size:90px;position:absolute;right:15px;top:15px;transition:all .3s linear}.small-box .icon>i.fa,.small-box .icon>i.fab,.small-box .icon>i.far,.small-box .icon>i.fas,.small-box .icon>i.glyphicon,.small-box .icon>i.ion{font-size:70px;top:20px}.small-box:hover{text-decoration:none}.small-box:hover .icon>i{font-size:95px}.small-box:hover .icon>i.fa,.small-box:hover .icon>i.fab,.small-box:hover .icon>i.far,.small-box:hover .icon>i.fas,.small-box:hover .icon>i.glyphicon,.small-box:hover .icon>i.ion{font-size:75px}@media (max-width:767.98px){.small-box{text-align:center}.small-box .icon{display:none}.small-box p{font-size:12px}}.info-box{border-radius:.5rem;background:#fff;display:flex;margin-bottom:3rem;min-height:80px;padding:.5rem;position:relative}.info-box .progress{background-color:rgba(34,41,47,.125);height:2px;margin:5px 0}.info-box .progress .progress-bar{background-color:#fff}.info-box .info-box-icon{border-radius:.5rem;align-items:center;display:flex;font-size:1.875rem;justify-content:center;text-align:center;width:70px}.info-box .info-box-icon>img{max-width:100%}.info-box .info-box-content{flex:1;padding:5px 10px}.info-box .info-box-number{display:block;font-weight:700}.info-box .info-box-text,.info-box .progress-description{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.info-box .info-box .bg-gradient-primary,.info-box .info-box .bg-primary{color:#fff}.info-box .info-box .bg-gradient-primary .progress-bar,.info-box .info-box .bg-primary .progress-bar{background-color:#fff}.info-box .info-box .bg-gradient-secondary,.info-box .info-box .bg-secondary{color:#2a2e30}.info-box .info-box .bg-gradient-secondary .progress-bar,.info-box .info-box .bg-secondary .progress-bar{background-color:#2a2e30}.info-box .info-box .bg-gradient-success,.info-box .info-box .bg-success{color:#fff}.info-box .info-box .bg-gradient-success .progress-bar,.info-box .info-box .bg-success .progress-bar{background-color:#fff}.info-box .info-box .bg-gradient-info,.info-box .info-box .bg-info{color:#fff}.info-box .info-box .bg-gradient-info .progress-bar,.info-box .info-box .bg-info .progress-bar{background-color:#fff}.info-box .info-box .bg-gradient-warning,.info-box .info-box .bg-warning{color:#2a2e30}.info-box .info-box .bg-gradient-warning .progress-bar,.info-box .info-box .bg-warning .progress-bar{background-color:#2a2e30}.info-box .info-box .bg-danger,.info-box .info-box .bg-gradient-danger{color:#fff}.info-box .info-box .bg-danger .progress-bar,.info-box .info-box .bg-gradient-danger .progress-bar{background-color:#fff}.info-box .info-box .bg-gradient-light,.info-box .info-box .bg-light{color:#2a2e30}.info-box .info-box .bg-gradient-light .progress-bar,.info-box .info-box .bg-light .progress-bar{background-color:#2a2e30}.info-box .info-box .bg-dark,.info-box .info-box .bg-gradient-dark{color:#fff}.info-box .info-box .bg-dark .progress-bar,.info-box .info-box .bg-gradient-dark .progress-bar{background-color:#fff}.info-box .info-box-more{display:block}.info-box .progress-description{margin:0}@media (min-width:768px){.col-lg-2 .info-box .progress-description,.col-lg-3 .info-box .progress-description,.col-md-2 .info-box .progress-description,.col-md-3 .info-box .progress-description,.col-xl-2 .info-box .progress-description,.col-xl-3 .info-box .progress-description{display:none}}@media (min-width:992px){.col-lg-2 .info-box .progress-description,.col-lg-3 .info-box .progress-description,.col-md-2 .info-box .progress-description,.col-md-3 .info-box .progress-description,.col-xl-2 .info-box .progress-description,.col-xl-3 .info-box .progress-description{font-size:.75rem;display:block}}@media (min-width:1200px){.col-lg-2 .info-box .progress-description,.col-lg-3 .info-box .progress-description,.col-md-2 .info-box .progress-description,.col-md-3 .info-box .progress-description,.col-xl-2 .info-box .progress-description,.col-xl-3 .info-box .progress-description{font-size:1rem;display:block}}.timeline{margin:0 0 45px;padding:0;position:relative}.timeline:before{border-radius:.5rem;background:#dae1e7;bottom:0;content:"";left:31px;margin:0;position:absolute;top:0;width:4px}.timeline>div{margin-bottom:15px;margin-right:10px;position:relative}.timeline>div:after,.timeline>div:before{content:"";display:table}.timeline>div>.timeline-item{border-radius:.5rem;background:#fff;color:#4e5154;margin-left:60px;margin-right:15px;margin-top:0;padding:0;position:relative}.timeline>div>.timeline-item>.time{color:#999;float:right;font-size:12px;padding:10px}.timeline>div>.timeline-item>.timeline-header{border-bottom:1px solid rgba(34,41,47,.125);color:#4e5154;font-size:16px;line-height:1.1;margin:0;padding:10px}.timeline>div>.timeline-item>.timeline-header>a{font-weight:600}.timeline>div>.timeline-item>.timeline-body,.timeline>div>.timeline-item>.timeline-footer{padding:10px}.timeline>div>.timeline-item>.timeline-body>img{margin:10px}.timeline>div>.timeline-item>.timeline-body>dl,.timeline>div>.timeline-item>.timeline-body ol,.timeline>div>.timeline-item>.timeline-body ul{margin:0}.timeline>div>.timeline-item>.timeline-footer>a{color:#fff}.timeline>div>.fa,.timeline>div>.fab,.timeline>div>.far,.timeline>div>.fas,.timeline>div>.glyphicon,.timeline>div>.ion{background:#adb5bd;border-radius:50%;font-size:15px;height:30px;left:18px;line-height:30px;position:absolute;text-align:center;top:0;width:30px}.timeline>.time-label>span{border-radius:4px;background-color:#fff;display:inline-block;font-weight:600;padding:5px}.timeline-inverse>div>.timeline-item{background:#babfc7;border:1px solid #dae1e7}.timeline-inverse>div>.timeline-item>.timeline-header{border-bottom-color:#dae1e7}.products-list{list-style:none;margin:0;padding:0}.products-list>.item{border-radius:.5rem;background:#fff;padding:10px 0}.products-list>.item:after{display:block;clear:both;content:""}.products-list .product-img{float:left}.products-list .product-img img{height:50px;width:50px}.products-list .product-info{margin-left:60px}.products-list .product-title{font-weight:600}.products-list .product-description{color:#b8c2cc;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.product-list-in-card>.item{border-radius:0;border-bottom:1px solid rgba(34,41,47,.125)}.product-list-in-card>.item:last-of-type{border-bottom-width:0}.direct-chat .card-body{overflow-x:hidden;padding:0;position:relative}.direct-chat.chat-pane-open .direct-chat-contacts{transform:translate(0)}.direct-chat.timestamp-light .direct-chat-timestamp{color:#42484b}.direct-chat.timestamp-dark .direct-chat-timestamp{color:#ccc}.direct-chat-messages{transform:translate(0);height:250px;overflow:auto;padding:10px}.direct-chat-msg,.direct-chat-text{display:block}.direct-chat-msg{margin-bottom:10px}.direct-chat-msg:after{display:block;clear:both;content:""}.direct-chat-contacts,.direct-chat-messages{transition:transform .5s ease-in-out}.direct-chat-text{border-radius:.6rem;background:#d2d6de;border:1px solid #d2d6de;color:#444;margin:5px 0 0 50px;padding:5px 10px;position:relative}.direct-chat-text:after,.direct-chat-text:before{border:solid transparent;border-right:solid #d2d6de;content:" ";height:0;pointer-events:none;position:absolute;right:100%;top:15px;width:0}.direct-chat-text:after{border-width:5px;margin-top:-5px}.direct-chat-text:before{border-width:6px;margin-top:-6px}.right .direct-chat-text{margin-left:0;margin-right:50px}.right .direct-chat-text:after,.right .direct-chat-text:before{border-left-color:#d2d6de;border-right-color:transparent;left:100%;right:auto}.direct-chat-img{border-radius:50%;float:left;height:40px;width:40px}.right .direct-chat-img{float:right}.direct-chat-infos{display:block;font-size:1rem;margin-bottom:2px}.direct-chat-name{font-weight:600}.direct-chat-timestamp{color:#697582}.direct-chat-contacts-open .direct-chat-contacts{transform:translate(0)}.direct-chat-contacts{transform:translate(101%);background:#22292f;bottom:0;color:#fff;height:250px;overflow:auto;position:absolute;top:0;width:100%}.direct-chat-contacts-light{background:#f7f7f9}.direct-chat-contacts-light .contacts-list-name{color:#4e5154}.direct-chat-contacts-light .contacts-list-date{color:#b8c2cc}.direct-chat-contacts-light .contacts-list-msg{color:#9aa9b7}.contacts-list{padding-left:0;list-style:none}.contacts-list>li{border-bottom:1px solid rgba(34,41,47,.2);margin:0;padding:10px}.contacts-list>li:after{display:block;clear:both;content:""}.contacts-list>li:last-of-type{border-bottom:0}.contacts-list-img{border-radius:50%;float:left;width:40px}.contacts-list-info{color:#fff;margin-left:45px}.contacts-list-name,.contacts-list-status{display:block}.contacts-list-name{font-weight:600}.contacts-list-status{font-size:1rem}.contacts-list-date{color:#636363;font-weight:400}.contacts-list-msg{color:#4a4a4a}.direct-chat-primary .right>.direct-chat-text{background:#4e9876;border-color:#4e9876;color:#fff}.direct-chat-primary .right>.direct-chat-text:after,.direct-chat-primary .right>.direct-chat-text:before{border-left-color:#4e9876}.direct-chat-secondary .right>.direct-chat-text{background:#b8c2cc;border-color:#b8c2cc;color:#2a2e30}.direct-chat-secondary .right>.direct-chat-text:after,.direct-chat-secondary .right>.direct-chat-text:before{border-left-color:#b8c2cc}.direct-chat-success .right>.direct-chat-text{background:#21b978;border-color:#21b978;color:#fff}.direct-chat-success .right>.direct-chat-text:after,.direct-chat-success .right>.direct-chat-text:before{border-left-color:#21b978}.direct-chat-info .right>.direct-chat-text{background:#4277cf;border-color:#4277cf;color:#fff}.direct-chat-info .right>.direct-chat-text:after,.direct-chat-info .right>.direct-chat-text:before{border-left-color:#4277cf}.direct-chat-warning .right>.direct-chat-text{background:#dda451;border-color:#dda451;color:#2a2e30}.direct-chat-warning .right>.direct-chat-text:after,.direct-chat-warning .right>.direct-chat-text:before{border-left-color:#dda451}.direct-chat-danger .right>.direct-chat-text{background:#ea5455;border-color:#ea5455;color:#fff}.direct-chat-danger .right>.direct-chat-text:after,.direct-chat-danger .right>.direct-chat-text:before{border-left-color:#ea5455}.direct-chat-light .right>.direct-chat-text{background:#f7f7f9;border-color:#f7f7f9;color:#2a2e30}.direct-chat-light .right>.direct-chat-text:after,.direct-chat-light .right>.direct-chat-text:before{border-left-color:#f7f7f9}.direct-chat-dark .right>.direct-chat-text{background:#22292f;border-color:#22292f;color:#fff}.direct-chat-dark .right>.direct-chat-text:after,.direct-chat-dark .right>.direct-chat-text:before{border-left-color:#22292f}.direct-chat-lightblue .right>.direct-chat-text{background:#3c8dbc;border-color:#3c8dbc;color:#fff}.direct-chat-lightblue .right>.direct-chat-text:after,.direct-chat-lightblue .right>.direct-chat-text:before{border-left-color:#3c8dbc}.direct-chat-navy .right>.direct-chat-text{background:#001f3f;border-color:#001f3f;color:#fff}.direct-chat-navy .right>.direct-chat-text:after,.direct-chat-navy .right>.direct-chat-text:before{border-left-color:#001f3f}.direct-chat-olive .right>.direct-chat-text{background:#3d9970;border-color:#3d9970;color:#fff}.direct-chat-olive .right>.direct-chat-text:after,.direct-chat-olive .right>.direct-chat-text:before{border-left-color:#3d9970}.direct-chat-lime .right>.direct-chat-text{background:#01ff70;border-color:#01ff70;color:#2a2e30}.direct-chat-lime .right>.direct-chat-text:after,.direct-chat-lime .right>.direct-chat-text:before{border-left-color:#01ff70}.direct-chat-fuchsia .right>.direct-chat-text{background:#f012be;border-color:#f012be;color:#fff}.direct-chat-fuchsia .right>.direct-chat-text:after,.direct-chat-fuchsia .right>.direct-chat-text:before{border-left-color:#f012be}.direct-chat-maroon .right>.direct-chat-text{background:#d81b60;border-color:#d81b60;color:#fff}.direct-chat-maroon .right>.direct-chat-text:after,.direct-chat-maroon .right>.direct-chat-text:before{border-left-color:#d81b60}.direct-chat-blue .right>.direct-chat-text{background:#3085d6;border-color:#3085d6;color:#fff}.direct-chat-blue .right>.direct-chat-text:after,.direct-chat-blue .right>.direct-chat-text:before{border-left-color:#3085d6}.direct-chat-indigo .right>.direct-chat-text{background:#5c6bc6;border-color:#5c6bc6;color:#fff}.direct-chat-indigo .right>.direct-chat-text:after,.direct-chat-indigo .right>.direct-chat-text:before{border-left-color:#5c6bc6}.direct-chat-purple .right>.direct-chat-text{background:#6f42c1;border-color:#6f42c1;color:#fff}.direct-chat-purple .right>.direct-chat-text:after,.direct-chat-purple .right>.direct-chat-text:before{border-left-color:#6f42c1}.direct-chat-pink .right>.direct-chat-text{background:#ff8acc;border-color:#ff8acc;color:#2a2e30}.direct-chat-pink .right>.direct-chat-text:after,.direct-chat-pink .right>.direct-chat-text:before{border-left-color:#ff8acc}.direct-chat-red .right>.direct-chat-text{background:#ea5455;border-color:#ea5455;color:#fff}.direct-chat-red .right>.direct-chat-text:after,.direct-chat-red .right>.direct-chat-text:before{border-left-color:#ea5455}.direct-chat-orange .right>.direct-chat-text{background:#dda451;border-color:#dda451;color:#2a2e30}.direct-chat-orange .right>.direct-chat-text:after,.direct-chat-orange .right>.direct-chat-text:before{border-left-color:#dda451}.direct-chat-yellow .right>.direct-chat-text{background:#edc30e;border-color:#edc30e;color:#2a2e30}.direct-chat-yellow .right>.direct-chat-text:after,.direct-chat-yellow .right>.direct-chat-text:before{border-left-color:#edc30e}.direct-chat-green .right>.direct-chat-text{background:#21b978;border-color:#21b978;color:#fff}.direct-chat-green .right>.direct-chat-text:after,.direct-chat-green .right>.direct-chat-text:before{border-left-color:#21b978}.direct-chat-teal .right>.direct-chat-text{background:#20c997;border-color:#20c997;color:#fff}.direct-chat-teal .right>.direct-chat-text:after,.direct-chat-teal .right>.direct-chat-text:before{border-left-color:#20c997}.direct-chat-cyan .right>.direct-chat-text{background:#7367f0;border-color:#7367f0;color:#fff}.direct-chat-cyan .right>.direct-chat-text:after,.direct-chat-cyan .right>.direct-chat-text:before{border-left-color:#7367f0}.direct-chat-white .right>.direct-chat-text{background:#fff;border-color:#fff;color:#2a2e30}.direct-chat-white .right>.direct-chat-text:after,.direct-chat-white .right>.direct-chat-text:before{border-left-color:#fff}.direct-chat-gray .right>.direct-chat-text{background:#b8c2cc;border-color:#b8c2cc;color:#2a2e30}.direct-chat-gray .right>.direct-chat-text:after,.direct-chat-gray .right>.direct-chat-text:before{border-left-color:#b8c2cc}.direct-chat-gray-dark .right>.direct-chat-text{background:#1e1e1e;border-color:#1e1e1e;color:#fff}.direct-chat-gray-dark .right>.direct-chat-text:after,.direct-chat-gray-dark .right>.direct-chat-text:before{border-left-color:#1e1e1e}.users-list{padding-left:0;list-style:none}.users-list>li{float:left;padding:10px;text-align:center;width:25%}.users-list>li img{border-radius:50%;height:auto;max-width:100%}.users-list>li>a:hover,.users-list>li>a:hover .users-list-name{color:#999}.users-list-date,.users-list-name{display:block}.users-list-name{color:#4e5154;font-size:1rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.users-list-date{color:#748290;font-size:12px}.card-widget{border:0;position:relative}.widget-user .widget-user-header{border-top-left-radius:.5rem;border-top-right-radius:.5rem;height:135px;padding:1rem;text-align:center}.widget-user .widget-user-username{font-size:25px;font-weight:300;margin-bottom:0;margin-top:0;text-shadow:0 1px 1px rgba(34,41,47,.2)}.widget-user .widget-user-desc{margin-top:0}.widget-user .widget-user-image{left:50%;margin-left:-45px;position:absolute;top:80px}.widget-user .widget-user-image>img{border:3px solid #fff;height:auto;width:90px}.widget-user .card-footer{padding-top:50px}.widget-user-2 .widget-user-header{border-top-left-radius:.5rem;border-top-right-radius:.5rem;padding:1rem}.widget-user-2 .widget-user-username{font-size:25px;font-weight:300;margin-bottom:5px;margin-top:5px}.widget-user-2 .widget-user-desc{margin-top:0}.widget-user-2 .widget-user-desc,.widget-user-2 .widget-user-username{margin-left:75px}.widget-user-2 .widget-user-image>img{float:left;height:auto;width:65px}.mailbox-messages>.table{margin:0}.mailbox-controls{padding:5px}.mailbox-controls.with-border,.mailbox-read-info{border-bottom:1px solid rgba(34,41,47,.125)}.mailbox-read-info{padding:10px}.mailbox-read-info h3{font-size:20px;margin:0}.mailbox-read-info h5{margin:0;padding:5px 0 0}.mailbox-read-time{color:#999;font-size:13px}.mailbox-read-message{padding:10px}.mailbox-attachments{padding-left:0;list-style:none}.mailbox-attachments li{border:1px solid #eee;float:left;margin-bottom:10px;margin-right:10px;width:200px}.mailbox-attachment-name{color:#666;font-weight:700}.mailbox-attachment-icon,.mailbox-attachment-info,.mailbox-attachment-size{display:block}.mailbox-attachment-info{background:#babfc7;padding:10px}.mailbox-attachment-size{color:#999;font-size:12px}.mailbox-attachment-size>span{display:inline-block;padding-top:.75rem}.mailbox-attachment-icon{color:#666;font-size:65px;max-height:132.5px;padding:20px 10px;text-align:center}.mailbox-attachment-icon.has-img{padding:0}.mailbox-attachment-icon.has-img>img{height:auto;max-width:100%}.lockscreen{background:#ededed}.lockscreen .lockscreen-name{font-weight:600;text-align:center}.lockscreen-logo{font-size:35px;font-weight:300;margin-bottom:25px;text-align:center}.lockscreen-logo a{color:#4e5154}.lockscreen-wrapper{margin:10% auto 0;max-width:400px}.lockscreen-item{border-radius:4px;background:#fff;margin:10px auto 30px;padding:0;position:relative;width:290px}.lockscreen-image{border-radius:50%;background:#fff;left:-10px;padding:5px;position:absolute;top:-25px;z-index:10}.lockscreen-image>img{border-radius:50%;height:70px;width:70px}.lockscreen-credentials{margin-left:70px}.lockscreen-credentials .form-control{border:0}.lockscreen-credentials .btn{background-color:#fff;border:0;padding:0 10px}.lockscreen-footer{margin-top:10px}.login-logo,.register-logo{font-size:2.1rem;font-weight:300;margin-bottom:.9rem;text-align:center}.login-logo a,.register-logo a{color:#4e5154}.login-page,.register-page{align-items:center;background:#ededed;display:flex;flex-direction:column;height:100vh;justify-content:center}.login-box,.register-box{width:360px}@media (max-width:576px){.login-box,.register-box{margin-top:.5rem;width:90%}}.login-card-body,.register-card-body{background:#fff;border-top:0;color:#666;padding:20px}.login-card-body .input-group .form-control,.register-card-body .input-group .form-control{border-right:0}.login-card-body .input-group .form-control:focus,.register-card-body .input-group .form-control:focus{box-shadow:none}.login-card-body .input-group .form-control:focus~.input-group-append .input-group-text,.register-card-body .input-group .form-control:focus~.input-group-append .input-group-text{border-color:#4e9876}.login-card-body .input-group .form-control.is-valid:focus,.register-card-body .input-group .form-control.is-valid:focus{box-shadow:none}.login-card-body .input-group .form-control.is-valid~.input-group-append .input-group-text,.register-card-body .input-group .form-control.is-valid~.input-group-append .input-group-text{border-color:#21b978}.login-card-body .input-group .form-control.is-invalid:focus,.register-card-body .input-group .form-control.is-invalid:focus{box-shadow:none}.login-card-body .input-group .form-control.is-invalid~.input-group-append .input-group-text,.register-card-body .input-group .form-control.is-invalid~.input-group-append .input-group-text{border-color:#ea5455}.login-card-body .input-group .input-group-text,.register-card-body .input-group .input-group-text{background-color:transparent;border-bottom-right-radius:.5rem;border-left:0;border-top-right-radius:.5rem;color:#777;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.login-box-msg,.register-box-msg{margin:0;padding:0 20px 20px;text-align:center}.social-auth-links{margin:10px 0}.error-page{margin:20px auto 0;width:600px}@media (max-width:767.98px){.error-page{width:100%}}.error-page>.headline{float:left;font-size:100px;font-weight:300}@media (max-width:767.98px){.error-page>.headline{float:none;text-align:center}}.error-page>.error-content{display:block;margin-left:190px}@media (max-width:767.98px){.error-page>.error-content{margin-left:0}}.error-page>.error-content>h3{font-size:25px;font-weight:300}@media (max-width:767.98px){.error-page>.error-content>h3{text-align:center}}.invoice{background:#fff;border:1px solid rgba(34,41,47,.125);position:relative}.invoice-title{margin-top:0}.profile-user-img{border:3px solid #adb5bd;margin:0 auto;padding:3px;width:100px}.profile-username{font-size:21px;margin-top:5px}.post{border-bottom:1px solid #adb5bd;color:#666;margin-bottom:15px;padding-bottom:15px}.post:last-of-type{border-bottom:0;margin-bottom:0;padding-bottom:0}.post .user-block{margin-bottom:15px;width:100%}.post .row{width:100%}.product-image{max-width:100%;height:auto;width:100%}.product-image-thumbs{align-items:stretch;display:flex;margin-top:2rem}.product-image-thumb{border-radius:.5rem;background-color:#eff1f7;border:1px solid #dae1e7;display:flex;margin-right:1rem;max-width:7rem;padding:.5rem}.product-image-thumb img{max-width:100%;height:auto;align-self:center}.product-image-thumb:hover{opacity:.5}.product-share a{margin-right:.5rem}.projects td{vertical-align:middle}.projects .list-inline{margin-bottom:0}.projects .table-avatar img,.projects img.table-avatar{border-radius:50%;display:inline;width:2.5rem}.projects .project-state{text-align:center}.fc-button{background:#babfc7;background-image:none;border-color:#ddd;color:#4e5154}.fc-button.hover,.fc-button:active,.fc-button:hover{background-color:#e9e9e9}.fc-header-title h2{color:#666;font-size:15px;line-height:1.6em;margin-left:10px}.fc-header-right{padding-right:10px}.fc-header-left{padding-left:10px}.fc-widget-header{background:#fafafa}.fc-grid{border:0;width:100%}.fc-widget-content:first-of-type,.fc-widget-header:first-of-type{border-left:0;border-right:0}.fc-widget-content:last-of-type,.fc-widget-header:last-of-type{border-right:0}.fc-toolbar,.fc-toolbar.fc-header-toolbar{margin:0;padding:1rem}@media (max-width:575.98px){.fc-toolbar{flex-direction:column}.fc-toolbar .fc-left{order:1;margin-bottom:.5rem}.fc-toolbar .fc-center{order:0;margin-bottom:.375rem}.fc-toolbar .fc-right{order:2}}.fc-day-number{font-size:20px;font-weight:300;padding-right:10px}.fc-color-picker{list-style:none;margin:0;padding:0}.fc-color-picker>li{float:left;font-size:30px;line-height:30px;margin-right:5px}.fc-color-picker>li .fa,.fc-color-picker>li .fab,.fc-color-picker>li .far,.fc-color-picker>li .fas,.fc-color-picker>li .glyphicon,.fc-color-picker>li .ion{transition:transform .3s linear}.fc-color-picker>li .fa:hover,.fc-color-picker>li .fab:hover,.fc-color-picker>li .far:hover,.fc-color-picker>li .fas:hover,.fc-color-picker>li .glyphicon:hover,.fc-color-picker>li .ion:hover{transform:rotate(30deg)}#add-new-event{transition:all .3s linear}.external-event{border-radius:.5rem;cursor:move;font-weight:700;margin-bottom:4px;padding:5px 10px}.select2-container--default .select2-selection--single{border:1px solid rgba(0,0,0,.2);padding:.875rem .7rem;height:34px}.select2-container--default.select2-container--open .select2-selection--single{border-color:#9acbb5}.select2-container--default .select2-dropdown{border:1px solid rgba(0,0,0,.2)}.select2-container--default .select2-results__option{padding:6px 12px;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-user-select:none}.select2-container--default .select2-selection--single .select2-selection__rendered{padding-left:0;height:auto;margin-top:-3px}.select2-container--default[dir=rtl] .select2-selection--single .select2-selection__rendered{padding-right:6px;padding-left:20px}.select2-container--default .select2-selection--single .select2-selection__arrow{height:31px;right:6px}.select2-container--default .select2-selection--single .select2-selection__arrow b{margin-top:0}.select2-container--default .select2-dropdown .select2-search__field,.select2-container--default .select2-search--inline .select2-search__field{border:1px solid rgba(0,0,0,.2)}.select2-container--default .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-search--inline .select2-search__field:focus{outline:none;border:1px solid #4e9876}.select2-container--default .select2-dropdown.select2-dropdown--below{border-top:0}.select2-container--default .select2-dropdown.select2-dropdown--above{border-bottom:0}.select2-container--default .select2-results__option[aria-disabled=true]{color:#b8c2cc}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#dae1e7}.select2-container--default .select2-results__option[aria-selected=true],.select2-container--default .select2-results__option[aria-selected=true]:hover{color:#2a2e30}.select2-container--default .select2-results__option--highlighted{background-color:#4e9876;color:#fff}.select2-container--default .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#498e6e;color:#fff}.select2-container--default .select2-selection--multiple{border:1px solid rgba(0,0,0,.2);min-height:34px}.select2-container--default .select2-selection--multiple:focus{border-color:#4e9876}.select2-container--default .select2-selection--multiple .select2-selection__rendered{padding:0 .35rem .7rem;margin-bottom:-.35rem}.select2-container--default .select2-selection--multiple .select2-selection__rendered li:first-child.select2-search.select2-search--inline{width:100%;margin-left:.35rem}.select2-container--default .select2-selection--multiple .select2-selection__rendered li:first-child.select2-search.select2-search--inline .select2-search__field{width:100%!important}.select2-container--default .select2-selection--multiple .select2-selection__rendered .select2-search.select2-search--inline .select2-search__field{border:0;margin-top:6px}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#4e9876;border-color:#458769;color:#fff;padding:0 10px;margin-top:.31rem}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7);float:right;margin-left:5px;margin-right:-2px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-selection--multiple.text-sm .select2-search.select2-search--inline .select2-search__field,.text-sm .select2-container--default .select2-selection--multiple .select2-search.select2-search--inline .select2-search__field{margin-top:8px}.select2-container--default .select2-selection--multiple.text-sm .select2-selection__choice,.text-sm .select2-container--default .select2-selection--multiple .select2-selection__choice{margin-top:.4rem}.select2-container--default.select2-container--focus .select2-selection--multiple,.select2-container--default.select2-container--focus .select2-selection--single{border-color:#4e9876}.select2-container--default.select2-container--focus .select2-search__field{border:0}.select2-container--default .select2-selection--single .select2-selection__rendered li{padding-right:10px}.input-group-prepend~.select2-container--default .select2-selection{border-bottom-left-radius:0;border-top-left-radius:0}.input-group>.select2-container--default:not(:last-child) .select2-selection{border-bottom-right-radius:0;border-top-right-radius:0}.select2-container--bootstrap4.select2-container--focus .select2-selection{box-shadow:none}select.form-control-sm~.select2-container--default{font-size:1rem}.text-sm .select2-container--default .select2-selection--single,select.form-control-sm~.select2-container--default .select2-selection--single{height:2rem}.text-sm .select2-container--default .select2-selection--single .select2-selection__rendered,select.form-control-sm~.select2-container--default .select2-selection--single .select2-selection__rendered{margin-top:-.4rem}.text-sm .select2-container--default .select2-selection--single .select2-selection__arrow,select.form-control-sm~.select2-container--default .select2-selection--single .select2-selection__arrow{top:-.12rem}.text-sm .select2-container--default .select2-selection--multiple,select.form-control-sm~.select2-container--default .select2-selection--multiple{min-height:2rem}.text-sm .select2-container--default .select2-selection--multiple .select2-selection__rendered,select.form-control-sm~.select2-container--default .select2-selection--multiple .select2-selection__rendered{padding:0 .75rem .5rem;margin-top:-.3rem}.text-sm .select2-container--default .select2-selection--multiple .select2-selection__rendered li:first-child.select2-search.select2-search--inline,select.form-control-sm~.select2-container--default .select2-selection--multiple .select2-selection__rendered li:first-child.select2-search.select2-search--inline{margin-left:.75rem}.text-sm .select2-container--default .select2-selection--multiple .select2-selection__rendered .select2-search.select2-search--inline .select2-search__field,select.form-control-sm~.select2-container--default .select2-selection--multiple .select2-selection__rendered .select2-search.select2-search--inline .select2-search__field{margin-top:6px}.select2-primary+.select2-container--default.select2-container--focus .select2-selection--single,.select2-primary+.select2-container--default.select2-container--open .select2-selection--single{border-color:#9acbb5}.select2-container--default .select2-primary.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-primary .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-primary .select2-search--inline .select2-search__field:focus,.select2-primary .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-primary .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-primary .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #9acbb5}.select2-container--default .select2-primary .select2-results__option--highlighted,.select2-primary .select2-container--default .select2-results__option--highlighted{background-color:#4e9876;color:#fff}.select2-container--default .select2-primary .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-primary .select2-results__option--highlighted[aria-selected]:hover,.select2-primary .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-primary .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#498e6e;color:#fff}.select2-container--default .select2-primary .select2-selection--multiple:focus,.select2-primary .select2-container--default .select2-selection--multiple:focus{border-color:#9acbb5}.select2-container--default .select2-primary .select2-selection--multiple .select2-selection__choice,.select2-primary .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#4e9876;border-color:#458769;color:#fff}.select2-container--default .select2-primary .select2-selection--multiple .select2-selection__choice__remove,.select2-primary .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-primary .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-primary .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-primary.select2-container--focus .select2-selection--multiple,.select2-primary .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#9acbb5}.select2-secondary+.select2-container--default.select2-container--focus .select2-selection--single,.select2-secondary+.select2-container--default.select2-container--open .select2-selection--single{border-color:#fff}.select2-container--default .select2-secondary.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-secondary .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-secondary .select2-search--inline .select2-search__field:focus,.select2-secondary .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-secondary .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-secondary .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #fff}.select2-container--default .select2-secondary .select2-results__option--highlighted,.select2-secondary .select2-container--default .select2-results__option--highlighted{background-color:#b8c2cc;color:#2a2e30}.select2-container--default .select2-secondary .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-secondary .select2-results__option--highlighted[aria-selected]:hover,.select2-secondary .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-secondary .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#afbac6;color:#2a2e30}.select2-container--default .select2-secondary .select2-selection--multiple:focus,.select2-secondary .select2-container--default .select2-selection--multiple:focus{border-color:#fff}.select2-container--default .select2-secondary .select2-selection--multiple .select2-selection__choice,.select2-secondary .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#b8c2cc;border-color:#a9b5c1;color:#2a2e30}.select2-container--default .select2-secondary .select2-selection--multiple .select2-selection__choice__remove,.select2-secondary .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:rgba(42,46,48,.7)}.select2-container--default .select2-secondary .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-secondary .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#2a2e30}.select2-container--default .select2-secondary.select2-container--focus .select2-selection--multiple,.select2-secondary .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#fff}.select2-success+.select2-container--default.select2-container--focus .select2-selection--single,.select2-success+.select2-container--default.select2-container--open .select2-selection--single{border-color:#73e6b5}.select2-container--default .select2-success.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-success .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-success .select2-search--inline .select2-search__field:focus,.select2-success .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-success .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-success .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #73e6b5}.select2-container--default .select2-success .select2-results__option--highlighted,.select2-success .select2-container--default .select2-results__option--highlighted{background-color:#21b978;color:#fff}.select2-container--default .select2-success .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-success .select2-results__option--highlighted[aria-selected]:hover,.select2-success .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-success .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#1fac70;color:#fff}.select2-container--default .select2-success .select2-selection--multiple:focus,.select2-success .select2-container--default .select2-selection--multiple:focus{border-color:#73e6b5}.select2-container--default .select2-success .select2-selection--multiple .select2-selection__choice,.select2-success .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#21b978;border-color:#1da36a;color:#fff}.select2-container--default .select2-success .select2-selection--multiple .select2-selection__choice__remove,.select2-success .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-success .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-success .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-success.select2-container--focus .select2-selection--multiple,.select2-success .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#73e6b5}.select2-info+.select2-container--default.select2-container--focus .select2-selection--single,.select2-info+.select2-container--default.select2-container--open .select2-selection--single{border-color:#a8c0e9}.select2-container--default .select2-info.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-info .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-info .select2-search--inline .select2-search__field:focus,.select2-info .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-info .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-info .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #a8c0e9}.select2-container--default .select2-info .select2-results__option--highlighted,.select2-info .select2-container--default .select2-results__option--highlighted{background-color:#4277cf;color:#fff}.select2-container--default .select2-info .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-info .select2-results__option--highlighted[aria-selected]:hover,.select2-info .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-info .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#366ecc;color:#fff}.select2-container--default .select2-info .select2-selection--multiple:focus,.select2-info .select2-container--default .select2-selection--multiple:focus{border-color:#a8c0e9}.select2-container--default .select2-info .select2-selection--multiple .select2-selection__choice,.select2-info .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#4277cf;border-color:#3269c5;color:#fff}.select2-container--default .select2-info .select2-selection--multiple .select2-selection__choice__remove,.select2-info .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-info .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-info .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-info.select2-container--focus .select2-selection--multiple,.select2-info .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#a8c0e9}.select2-warning+.select2-container--default.select2-container--focus .select2-selection--single,.select2-warning+.select2-container--default.select2-container--open .select2-selection--single{border-color:#f2dcbc}.select2-container--default .select2-warning.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-warning .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-warning .select2-search--inline .select2-search__field:focus,.select2-warning .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-warning .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-warning .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #f2dcbc}.select2-container--default .select2-warning .select2-results__option--highlighted,.select2-warning .select2-container--default .select2-results__option--highlighted{background-color:#dda451;color:#2a2e30}.select2-container--default .select2-warning .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-warning .select2-results__option--highlighted[aria-selected]:hover,.select2-warning .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-warning .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#da9d44;color:#2a2e30}.select2-container--default .select2-warning .select2-selection--multiple:focus,.select2-warning .select2-container--default .select2-selection--multiple:focus{border-color:#f2dcbc}.select2-container--default .select2-warning .select2-selection--multiple .select2-selection__choice,.select2-warning .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#dda451;border-color:#d9993c;color:#2a2e30}.select2-container--default .select2-warning .select2-selection--multiple .select2-selection__choice__remove,.select2-warning .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:rgba(42,46,48,.7)}.select2-container--default .select2-warning .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-warning .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#2a2e30}.select2-container--default .select2-warning.select2-container--focus .select2-selection--multiple,.select2-warning .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#f2dcbc}.select2-danger+.select2-container--default.select2-container--focus .select2-selection--single,.select2-danger+.select2-container--default.select2-container--open .select2-selection--single{border-color:#f8c6c6}.select2-container--default .select2-danger.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-danger .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-danger .select2-search--inline .select2-search__field:focus,.select2-danger .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-danger .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-danger .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #f8c6c6}.select2-container--default .select2-danger .select2-results__option--highlighted,.select2-danger .select2-container--default .select2-results__option--highlighted{background-color:#ea5455;color:#fff}.select2-container--default .select2-danger .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-danger .select2-results__option--highlighted[aria-selected]:hover,.select2-danger .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-danger .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#e84647;color:#fff}.select2-container--default .select2-danger .select2-selection--multiple:focus,.select2-danger .select2-container--default .select2-selection--multiple:focus{border-color:#f8c6c6}.select2-container--default .select2-danger .select2-selection--multiple .select2-selection__choice,.select2-danger .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#ea5455;border-color:#e73d3e;color:#fff}.select2-container--default .select2-danger .select2-selection--multiple .select2-selection__choice__remove,.select2-danger .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-danger .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-danger .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-danger.select2-container--focus .select2-selection--multiple,.select2-danger .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#f8c6c6}.select2-light+.select2-container--default.select2-container--focus .select2-selection--single,.select2-light+.select2-container--default.select2-container--open .select2-selection--single{border-color:#fff}.select2-container--default .select2-light.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-light .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-light .select2-search--inline .select2-search__field:focus,.select2-light .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-light .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-light .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #fff}.select2-container--default .select2-light .select2-results__option--highlighted,.select2-light .select2-container--default .select2-results__option--highlighted{background-color:#f7f7f9;color:#2a2e30}.select2-container--default .select2-light .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-light .select2-results__option--highlighted[aria-selected]:hover,.select2-light .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-light .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#eeeef2;color:#2a2e30}.select2-container--default .select2-light .select2-selection--multiple:focus,.select2-light .select2-container--default .select2-selection--multiple:focus{border-color:#fff}.select2-container--default .select2-light .select2-selection--multiple .select2-selection__choice,.select2-light .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#f7f7f9;border-color:#e8e8ee;color:#2a2e30}.select2-container--default .select2-light .select2-selection--multiple .select2-selection__choice__remove,.select2-light .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:rgba(42,46,48,.7)}.select2-container--default .select2-light .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-light .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#2a2e30}.select2-container--default .select2-light.select2-container--focus .select2-selection--multiple,.select2-light .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#fff}.select2-dark+.select2-container--default.select2-container--focus .select2-selection--single,.select2-dark+.select2-container--default.select2-container--open .select2-selection--single{border-color:#586a79}.select2-container--default .select2-dark.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-dark .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-dark .select2-search--inline .select2-search__field:focus,.select2-dark .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-dark .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-dark .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #586a79}.select2-container--default .select2-dark .select2-results__option--highlighted,.select2-dark .select2-container--default .select2-results__option--highlighted{background-color:#22292f;color:#fff}.select2-container--default .select2-dark .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-dark .select2-results__option--highlighted[aria-selected]:hover,.select2-dark .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-dark .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#1c2126;color:#fff}.select2-container--default .select2-dark .select2-selection--multiple:focus,.select2-dark .select2-container--default .select2-selection--multiple:focus{border-color:#586a79}.select2-container--default .select2-dark .select2-selection--multiple .select2-selection__choice,.select2-dark .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#22292f;border-color:#171c20;color:#fff}.select2-container--default .select2-dark .select2-selection--multiple .select2-selection__choice__remove,.select2-dark .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-dark .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-dark .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-dark.select2-container--focus .select2-selection--multiple,.select2-dark .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#586a79}.select2-lightblue+.select2-container--default.select2-container--focus .select2-selection--single,.select2-lightblue+.select2-container--default.select2-container--open .select2-selection--single{border-color:#99c5de}.select2-container--default .select2-lightblue.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-lightblue .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-lightblue .select2-search--inline .select2-search__field:focus,.select2-lightblue .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-lightblue .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-lightblue .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #99c5de}.select2-container--default .select2-lightblue .select2-results__option--highlighted,.select2-lightblue .select2-container--default .select2-results__option--highlighted{background-color:#3c8dbc;color:#fff}.select2-container--default .select2-lightblue .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-lightblue .select2-results__option--highlighted[aria-selected]:hover,.select2-lightblue .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-lightblue .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#3884b0;color:#fff}.select2-container--default .select2-lightblue .select2-selection--multiple:focus,.select2-lightblue .select2-container--default .select2-selection--multiple:focus{border-color:#99c5de}.select2-container--default .select2-lightblue .select2-selection--multiple .select2-selection__choice,.select2-lightblue .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#3c8dbc;border-color:#367fa9;color:#fff}.select2-container--default .select2-lightblue .select2-selection--multiple .select2-selection__choice__remove,.select2-lightblue .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-lightblue .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-lightblue .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-lightblue.select2-container--focus .select2-selection--multiple,.select2-lightblue .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#99c5de}.select2-navy+.select2-container--default.select2-container--focus .select2-selection--single,.select2-navy+.select2-container--default.select2-container--open .select2-selection--single{border-color:#005ebf}.select2-container--default .select2-navy.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-navy .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-navy .select2-search--inline .select2-search__field:focus,.select2-navy .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-navy .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-navy .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #005ebf}.select2-container--default .select2-navy .select2-results__option--highlighted,.select2-navy .select2-container--default .select2-results__option--highlighted{background-color:#001f3f;color:#fff}.select2-container--default .select2-navy .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-navy .select2-results__option--highlighted[aria-selected]:hover,.select2-navy .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-navy .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#001730;color:#fff}.select2-container--default .select2-navy .select2-selection--multiple:focus,.select2-navy .select2-container--default .select2-selection--multiple:focus{border-color:#005ebf}.select2-container--default .select2-navy .select2-selection--multiple .select2-selection__choice,.select2-navy .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#001f3f;border-color:#001226;color:#fff}.select2-container--default .select2-navy .select2-selection--multiple .select2-selection__choice__remove,.select2-navy .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-navy .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-navy .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-navy.select2-container--focus .select2-selection--multiple,.select2-navy .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#005ebf}.select2-olive+.select2-container--default.select2-container--focus .select2-selection--single,.select2-olive+.select2-container--default.select2-container--open .select2-selection--single{border-color:#87cfaf}.select2-container--default .select2-olive.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-olive .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-olive .select2-search--inline .select2-search__field:focus,.select2-olive .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-olive .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-olive .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #87cfaf}.select2-container--default .select2-olive .select2-results__option--highlighted,.select2-olive .select2-container--default .select2-results__option--highlighted{background-color:#3d9970;color:#fff}.select2-container--default .select2-olive .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-olive .select2-results__option--highlighted[aria-selected]:hover,.select2-olive .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-olive .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#398e68;color:#fff}.select2-container--default .select2-olive .select2-selection--multiple:focus,.select2-olive .select2-container--default .select2-selection--multiple:focus{border-color:#87cfaf}.select2-container--default .select2-olive .select2-selection--multiple .select2-selection__choice,.select2-olive .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#3d9970;border-color:#368763;color:#fff}.select2-container--default .select2-olive .select2-selection--multiple .select2-selection__choice__remove,.select2-olive .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-olive .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-olive .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-olive.select2-container--focus .select2-selection--multiple,.select2-olive .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#87cfaf}.select2-lime+.select2-container--default.select2-container--focus .select2-selection--single,.select2-lime+.select2-container--default.select2-container--open .select2-selection--single{border-color:#81ffb8}.select2-container--default .select2-lime.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-lime .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-lime .select2-search--inline .select2-search__field:focus,.select2-lime .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-lime .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-lime .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #81ffb8}.select2-container--default .select2-lime .select2-results__option--highlighted,.select2-lime .select2-container--default .select2-results__option--highlighted{background-color:#01ff70;color:#2a2e30}.select2-container--default .select2-lime .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-lime .select2-results__option--highlighted[aria-selected]:hover,.select2-lime .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-lime .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#00f169;color:#2a2e30}.select2-container--default .select2-lime .select2-selection--multiple:focus,.select2-lime .select2-container--default .select2-selection--multiple:focus{border-color:#81ffb8}.select2-container--default .select2-lime .select2-selection--multiple .select2-selection__choice,.select2-lime .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#01ff70;border-color:#00e765;color:#2a2e30}.select2-container--default .select2-lime .select2-selection--multiple .select2-selection__choice__remove,.select2-lime .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:rgba(42,46,48,.7)}.select2-container--default .select2-lime .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-lime .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#2a2e30}.select2-container--default .select2-lime.select2-container--focus .select2-selection--multiple,.select2-lime .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#81ffb8}.select2-fuchsia+.select2-container--default.select2-container--focus .select2-selection--single,.select2-fuchsia+.select2-container--default.select2-container--open .select2-selection--single{border-color:#f88adf}.select2-container--default .select2-fuchsia.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-fuchsia .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-fuchsia .select2-search--inline .select2-search__field:focus,.select2-fuchsia .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-fuchsia .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-fuchsia .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #f88adf}.select2-container--default .select2-fuchsia .select2-results__option--highlighted,.select2-fuchsia .select2-container--default .select2-results__option--highlighted{background-color:#f012be;color:#fff}.select2-container--default .select2-fuchsia .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-fuchsia .select2-results__option--highlighted[aria-selected]:hover,.select2-fuchsia .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-fuchsia .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#e40eb4;color:#fff}.select2-container--default .select2-fuchsia .select2-selection--multiple:focus,.select2-fuchsia .select2-container--default .select2-selection--multiple:focus{border-color:#f88adf}.select2-container--default .select2-fuchsia .select2-selection--multiple .select2-selection__choice,.select2-fuchsia .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#f012be;border-color:#db0ead;color:#fff}.select2-container--default .select2-fuchsia .select2-selection--multiple .select2-selection__choice__remove,.select2-fuchsia .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-fuchsia .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-fuchsia .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-fuchsia.select2-container--focus .select2-selection--multiple,.select2-fuchsia .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#f88adf}.select2-maroon+.select2-container--default.select2-container--focus .select2-selection--single,.select2-maroon+.select2-container--default.select2-container--open .select2-selection--single{border-color:#f083ab}.select2-container--default .select2-maroon.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-maroon .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-maroon .select2-search--inline .select2-search__field:focus,.select2-maroon .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-maroon .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-maroon .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #f083ab}.select2-container--default .select2-maroon .select2-results__option--highlighted,.select2-maroon .select2-container--default .select2-results__option--highlighted{background-color:#d81b60;color:#fff}.select2-container--default .select2-maroon .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-maroon .select2-results__option--highlighted[aria-selected]:hover,.select2-maroon .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-maroon .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#ca195a;color:#fff}.select2-container--default .select2-maroon .select2-selection--multiple:focus,.select2-maroon .select2-container--default .select2-selection--multiple:focus{border-color:#f083ab}.select2-container--default .select2-maroon .select2-selection--multiple .select2-selection__choice,.select2-maroon .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#d81b60;border-color:#c11856;color:#fff}.select2-container--default .select2-maroon .select2-selection--multiple .select2-selection__choice__remove,.select2-maroon .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-maroon .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-maroon .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-maroon.select2-container--focus .select2-selection--multiple,.select2-maroon .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#f083ab}.select2-blue+.select2-container--default.select2-container--focus .select2-selection--single,.select2-blue+.select2-container--default.select2-container--open .select2-selection--single{border-color:#9ac4eb}.select2-blue .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-blue .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-blue .select2-container--default .select2-search--inline .select2-search__field:focus,.select2-container--default .select2-blue.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-blue .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-blue .select2-search--inline .select2-search__field:focus{border:1px solid #9ac4eb}.select2-blue .select2-container--default .select2-results__option--highlighted,.select2-container--default .select2-blue .select2-results__option--highlighted{background-color:#3085d6;color:#fff}.select2-blue .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-blue .select2-container--default .select2-results__option--highlighted[aria-selected]:hover,.select2-container--default .select2-blue .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-blue .select2-results__option--highlighted[aria-selected]:hover{background-color:#297dce;color:#fff}.select2-blue .select2-container--default .select2-selection--multiple:focus,.select2-container--default .select2-blue .select2-selection--multiple:focus{border-color:#9ac4eb}.select2-blue .select2-container--default .select2-selection--multiple .select2-selection__choice,.select2-container--default .select2-blue .select2-selection--multiple .select2-selection__choice{background-color:#3085d6;border-color:#2778c5;color:#fff}.select2-blue .select2-container--default .select2-selection--multiple .select2-selection__choice__remove,.select2-container--default .select2-blue .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-blue .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-container--default .select2-blue .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-blue .select2-container--default.select2-container--focus .select2-selection--multiple,.select2-container--default .select2-blue.select2-container--focus .select2-selection--multiple{border-color:#9ac4eb}.select2-indigo+.select2-container--default.select2-container--focus .select2-selection--single,.select2-indigo+.select2-container--default.select2-container--open .select2-selection--single{border-color:#bac1e7}.select2-container--default .select2-indigo.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-indigo .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-indigo .select2-search--inline .select2-search__field:focus,.select2-indigo .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-indigo .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-indigo .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #bac1e7}.select2-container--default .select2-indigo .select2-results__option--highlighted,.select2-indigo .select2-container--default .select2-results__option--highlighted{background-color:#5c6bc6;color:#fff}.select2-container--default .select2-indigo .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-indigo .select2-results__option--highlighted[aria-selected]:hover,.select2-indigo .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-indigo .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#5161c2;color:#fff}.select2-container--default .select2-indigo .select2-selection--multiple:focus,.select2-indigo .select2-container--default .select2-selection--multiple:focus{border-color:#bac1e7}.select2-container--default .select2-indigo .select2-selection--multiple .select2-selection__choice,.select2-indigo .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#5c6bc6;border-color:#495abf;color:#fff}.select2-container--default .select2-indigo .select2-selection--multiple .select2-selection__choice__remove,.select2-indigo .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-indigo .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-indigo .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-indigo.select2-container--focus .select2-selection--multiple,.select2-indigo .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#bac1e7}.select2-purple+.select2-container--default.select2-container--focus .select2-selection--single,.select2-purple+.select2-container--default.select2-container--open .select2-selection--single{border-color:#b8a2e0}.select2-container--default .select2-purple.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-purple .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-purple .select2-search--inline .select2-search__field:focus,.select2-purple .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-purple .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-purple .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #b8a2e0}.select2-container--default .select2-purple .select2-results__option--highlighted,.select2-purple .select2-container--default .select2-results__option--highlighted{background-color:#6f42c1;color:#fff}.select2-container--default .select2-purple .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-purple .select2-results__option--highlighted[aria-selected]:hover,.select2-purple .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-purple .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#683cb8;color:#fff}.select2-container--default .select2-purple .select2-selection--multiple:focus,.select2-purple .select2-container--default .select2-selection--multiple:focus{border-color:#b8a2e0}.select2-container--default .select2-purple .select2-selection--multiple .select2-selection__choice,.select2-purple .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#6f42c1;border-color:#643ab0;color:#fff}.select2-container--default .select2-purple .select2-selection--multiple .select2-selection__choice__remove,.select2-purple .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-purple .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-purple .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-purple.select2-container--focus .select2-selection--multiple,.select2-purple .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#b8a2e0}.select2-pink+.select2-container--default.select2-container--focus .select2-selection--single,.select2-pink+.select2-container--default.select2-container--open .select2-selection--single{border-color:#fff}.select2-container--default .select2-pink.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-pink .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-pink .select2-search--inline .select2-search__field:focus,.select2-pink .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-pink .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-pink .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #fff}.select2-container--default .select2-pink .select2-results__option--highlighted,.select2-pink .select2-container--default .select2-results__option--highlighted{background-color:#ff8acc;color:#2a2e30}.select2-container--default .select2-pink .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-pink .select2-results__option--highlighted[aria-selected]:hover,.select2-pink .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-pink .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#ff7bc5;color:#2a2e30}.select2-container--default .select2-pink .select2-selection--multiple:focus,.select2-pink .select2-container--default .select2-selection--multiple:focus{border-color:#fff}.select2-container--default .select2-pink .select2-selection--multiple .select2-selection__choice,.select2-pink .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#ff8acc;border-color:#ff71c1;color:#2a2e30}.select2-container--default .select2-pink .select2-selection--multiple .select2-selection__choice__remove,.select2-pink .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:rgba(42,46,48,.7)}.select2-container--default .select2-pink .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-pink .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#2a2e30}.select2-container--default .select2-pink.select2-container--focus .select2-selection--multiple,.select2-pink .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#fff}.select2-red+.select2-container--default.select2-container--focus .select2-selection--single,.select2-red+.select2-container--default.select2-container--open .select2-selection--single{border-color:#f8c6c6}.select2-container--default .select2-red.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-red .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-red .select2-search--inline .select2-search__field:focus,.select2-red .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-red .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-red .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #f8c6c6}.select2-container--default .select2-red .select2-results__option--highlighted,.select2-red .select2-container--default .select2-results__option--highlighted{background-color:#ea5455;color:#fff}.select2-container--default .select2-red .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-red .select2-results__option--highlighted[aria-selected]:hover,.select2-red .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-red .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#e84647;color:#fff}.select2-container--default .select2-red .select2-selection--multiple:focus,.select2-red .select2-container--default .select2-selection--multiple:focus{border-color:#f8c6c6}.select2-container--default .select2-red .select2-selection--multiple .select2-selection__choice,.select2-red .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#ea5455;border-color:#e73d3e;color:#fff}.select2-container--default .select2-red .select2-selection--multiple .select2-selection__choice__remove,.select2-red .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-red .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-red .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-red.select2-container--focus .select2-selection--multiple,.select2-red .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#f8c6c6}.select2-orange+.select2-container--default.select2-container--focus .select2-selection--single,.select2-orange+.select2-container--default.select2-container--open .select2-selection--single{border-color:#f2dcbc}.select2-container--default .select2-orange.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-orange .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-orange .select2-search--inline .select2-search__field:focus,.select2-orange .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-orange .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-orange .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #f2dcbc}.select2-container--default .select2-orange .select2-results__option--highlighted,.select2-orange .select2-container--default .select2-results__option--highlighted{background-color:#dda451;color:#2a2e30}.select2-container--default .select2-orange .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-orange .select2-results__option--highlighted[aria-selected]:hover,.select2-orange .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-orange .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#da9d44;color:#2a2e30}.select2-container--default .select2-orange .select2-selection--multiple:focus,.select2-orange .select2-container--default .select2-selection--multiple:focus{border-color:#f2dcbc}.select2-container--default .select2-orange .select2-selection--multiple .select2-selection__choice,.select2-orange .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#dda451;border-color:#d9993c;color:#2a2e30}.select2-container--default .select2-orange .select2-selection--multiple .select2-selection__choice__remove,.select2-orange .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:rgba(42,46,48,.7)}.select2-container--default .select2-orange .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-orange .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#2a2e30}.select2-container--default .select2-orange.select2-container--focus .select2-selection--multiple,.select2-orange .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#f2dcbc}.select2-yellow+.select2-container--default.select2-container--focus .select2-selection--single,.select2-yellow+.select2-container--default.select2-container--open .select2-selection--single{border-color:#f8e283}.select2-container--default .select2-yellow.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-yellow .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-yellow .select2-search--inline .select2-search__field:focus,.select2-yellow .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-yellow .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-yellow .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #f8e283}.select2-container--default .select2-yellow .select2-results__option--highlighted,.select2-yellow .select2-container--default .select2-results__option--highlighted{background-color:#edc30e;color:#2a2e30}.select2-container--default .select2-yellow .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-yellow .select2-results__option--highlighted[aria-selected]:hover,.select2-yellow .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-yellow .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#dfb70d;color:#2a2e30}.select2-container--default .select2-yellow .select2-selection--multiple:focus,.select2-yellow .select2-container--default .select2-selection--multiple:focus{border-color:#f8e283}.select2-container--default .select2-yellow .select2-selection--multiple .select2-selection__choice,.select2-yellow .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#edc30e;border-color:#d5af0d;color:#2a2e30}.select2-container--default .select2-yellow .select2-selection--multiple .select2-selection__choice__remove,.select2-yellow .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:rgba(42,46,48,.7)}.select2-container--default .select2-yellow .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-yellow .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#2a2e30}.select2-container--default .select2-yellow.select2-container--focus .select2-selection--multiple,.select2-yellow .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#f8e283}.select2-green+.select2-container--default.select2-container--focus .select2-selection--single,.select2-green+.select2-container--default.select2-container--open .select2-selection--single{border-color:#73e6b5}.select2-container--default .select2-green.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-green .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-green .select2-search--inline .select2-search__field:focus,.select2-green .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-green .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-green .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #73e6b5}.select2-container--default .select2-green .select2-results__option--highlighted,.select2-green .select2-container--default .select2-results__option--highlighted{background-color:#21b978;color:#fff}.select2-container--default .select2-green .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-green .select2-results__option--highlighted[aria-selected]:hover,.select2-green .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-green .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#1fac70;color:#fff}.select2-container--default .select2-green .select2-selection--multiple:focus,.select2-green .select2-container--default .select2-selection--multiple:focus{border-color:#73e6b5}.select2-container--default .select2-green .select2-selection--multiple .select2-selection__choice,.select2-green .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#21b978;border-color:#1da36a;color:#fff}.select2-container--default .select2-green .select2-selection--multiple .select2-selection__choice__remove,.select2-green .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-green .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-green .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-green.select2-container--focus .select2-selection--multiple,.select2-green .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#73e6b5}.select2-teal+.select2-container--default.select2-container--focus .select2-selection--single,.select2-teal+.select2-container--default.select2-container--open .select2-selection--single{border-color:#7eeaca}.select2-container--default .select2-teal.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-teal .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-teal .select2-search--inline .select2-search__field:focus,.select2-teal .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-teal .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-teal .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #7eeaca}.select2-container--default .select2-teal .select2-results__option--highlighted,.select2-teal .select2-container--default .select2-results__option--highlighted{background-color:#20c997;color:#fff}.select2-container--default .select2-teal .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-teal .select2-results__option--highlighted[aria-selected]:hover,.select2-teal .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-teal .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#1ebc8d;color:#fff}.select2-container--default .select2-teal .select2-selection--multiple:focus,.select2-teal .select2-container--default .select2-selection--multiple:focus{border-color:#7eeaca}.select2-container--default .select2-teal .select2-selection--multiple .select2-selection__choice,.select2-teal .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#20c997;border-color:#1cb386;color:#fff}.select2-container--default .select2-teal .select2-selection--multiple .select2-selection__choice__remove,.select2-teal .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-teal .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-teal .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-teal.select2-container--focus .select2-selection--multiple,.select2-teal .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#7eeaca}.select2-cyan+.select2-container--default.select2-container--focus .select2-selection--single,.select2-cyan+.select2-container--default.select2-container--open .select2-selection--single{border-color:#dedbfb}.select2-container--default .select2-cyan.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-cyan .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-cyan .select2-search--inline .select2-search__field:focus,.select2-cyan .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-cyan .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-cyan .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #dedbfb}.select2-container--default .select2-cyan .select2-results__option--highlighted,.select2-cyan .select2-container--default .select2-results__option--highlighted{background-color:#7367f0;color:#fff}.select2-container--default .select2-cyan .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-cyan .select2-results__option--highlighted[aria-selected]:hover,.select2-cyan .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-cyan .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#6659ef;color:#fff}.select2-container--default .select2-cyan .select2-selection--multiple:focus,.select2-cyan .select2-container--default .select2-selection--multiple:focus{border-color:#dedbfb}.select2-container--default .select2-cyan .select2-selection--multiple .select2-selection__choice,.select2-cyan .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#7367f0;border-color:#5e50ee;color:#fff}.select2-container--default .select2-cyan .select2-selection--multiple .select2-selection__choice__remove,.select2-cyan .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-cyan .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-cyan .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-cyan.select2-container--focus .select2-selection--multiple,.select2-cyan .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#dedbfb}.select2-white+.select2-container--default.select2-container--focus .select2-selection--single,.select2-white+.select2-container--default.select2-container--open .select2-selection--single{border-color:#fff}.select2-container--default .select2-white.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-white .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-white .select2-search--inline .select2-search__field:focus,.select2-white .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-white .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-white .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #fff}.select2-container--default .select2-white .select2-results__option--highlighted,.select2-white .select2-container--default .select2-results__option--highlighted{background-color:#fff;color:#2a2e30}.select2-container--default .select2-white .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-white .select2-results__option--highlighted[aria-selected]:hover,.select2-white .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-white .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#f7f7f7;color:#2a2e30}.select2-container--default .select2-white .select2-selection--multiple:focus,.select2-white .select2-container--default .select2-selection--multiple:focus{border-color:#fff}.select2-container--default .select2-white .select2-selection--multiple .select2-selection__choice,.select2-white .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#fff;border-color:#f2f2f2;color:#2a2e30}.select2-container--default .select2-white .select2-selection--multiple .select2-selection__choice__remove,.select2-white .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:rgba(42,46,48,.7)}.select2-container--default .select2-white .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-white .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#2a2e30}.select2-container--default .select2-white.select2-container--focus .select2-selection--multiple,.select2-gray+.select2-container--default.select2-container--focus .select2-selection--single,.select2-gray+.select2-container--default.select2-container--open .select2-selection--single,.select2-white .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#fff}.select2-container--default .select2-gray.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-gray .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-gray .select2-search--inline .select2-search__field:focus,.select2-gray .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-gray .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-gray .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #fff}.select2-container--default .select2-gray .select2-results__option--highlighted,.select2-gray .select2-container--default .select2-results__option--highlighted{background-color:#b8c2cc;color:#2a2e30}.select2-container--default .select2-gray .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-gray .select2-results__option--highlighted[aria-selected]:hover,.select2-gray .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-gray .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#afbac6;color:#2a2e30}.select2-container--default .select2-gray .select2-selection--multiple:focus,.select2-gray .select2-container--default .select2-selection--multiple:focus{border-color:#fff}.select2-container--default .select2-gray .select2-selection--multiple .select2-selection__choice,.select2-gray .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#b8c2cc;border-color:#a9b5c1;color:#2a2e30}.select2-container--default .select2-gray .select2-selection--multiple .select2-selection__choice__remove,.select2-gray .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:rgba(42,46,48,.7)}.select2-container--default .select2-gray .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-gray .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#2a2e30}.select2-container--default .select2-gray.select2-container--focus .select2-selection--multiple,.select2-gray .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#fff}.select2-gray-dark+.select2-container--default.select2-container--focus .select2-selection--single,.select2-gray-dark+.select2-container--default.select2-container--open .select2-selection--single{border-color:#5e5e5e}.select2-container--default .select2-gray-dark.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-gray-dark .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-gray-dark .select2-search--inline .select2-search__field:focus,.select2-gray-dark .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-gray-dark .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-gray-dark .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #5e5e5e}.select2-container--default .select2-gray-dark .select2-results__option--highlighted,.select2-gray-dark .select2-container--default .select2-results__option--highlighted{background-color:#1e1e1e;color:#fff}.select2-container--default .select2-gray-dark .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-gray-dark .select2-results__option--highlighted[aria-selected]:hover,.select2-gray-dark .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-gray-dark .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#161616;color:#fff}.select2-container--default .select2-gray-dark .select2-selection--multiple:focus,.select2-gray-dark .select2-container--default .select2-selection--multiple:focus{border-color:#5e5e5e}.select2-container--default .select2-gray-dark .select2-selection--multiple .select2-selection__choice,.select2-gray-dark .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#1e1e1e;border-color:#111;color:#fff}.select2-container--default .select2-gray-dark .select2-selection--multiple .select2-selection__choice__remove,.select2-gray-dark .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-gray-dark .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-gray-dark .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-gray-dark.select2-container--focus .select2-selection--multiple,.select2-gray-dark .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#5e5e5e}.slider .tooltip.in{opacity:.9}.slider.slider-vertical{height:100%}.slider.slider-horizontal{width:100%}.slider-primary .slider .slider-selection{background:#4e9876}.slider-secondary .slider .slider-selection{background:#b8c2cc}.slider-success .slider .slider-selection{background:#21b978}.slider-info .slider .slider-selection{background:#4277cf}.slider-warning .slider .slider-selection{background:#dda451}.slider-danger .slider .slider-selection{background:#ea5455}.slider-light .slider .slider-selection{background:#f7f7f9}.slider-dark .slider .slider-selection{background:#22292f}.slider-lightblue .slider .slider-selection{background:#3c8dbc}.slider-navy .slider .slider-selection{background:#001f3f}.slider-olive .slider .slider-selection{background:#3d9970}.slider-lime .slider .slider-selection{background:#01ff70}.slider-fuchsia .slider .slider-selection{background:#f012be}.slider-maroon .slider .slider-selection{background:#d81b60}.slider-blue .slider .slider-selection{background:#3085d6}.slider-indigo .slider .slider-selection{background:#5c6bc6}.slider-purple .slider .slider-selection{background:#6f42c1}.slider-pink .slider .slider-selection{background:#ff8acc}.slider-red .slider .slider-selection{background:#ea5455}.slider-orange .slider .slider-selection{background:#dda451}.slider-yellow .slider .slider-selection{background:#edc30e}.slider-green .slider .slider-selection{background:#21b978}.slider-teal .slider .slider-selection{background:#20c997}.slider-cyan .slider .slider-selection{background:#7367f0}.slider-white .slider .slider-selection{background:#fff}.slider-gray .slider .slider-selection{background:#b8c2cc}.slider-gray-dark .slider .slider-selection{background:#1e1e1e}.mapael .map{position:relative}.mapael .mapTooltip{font-family:Montserrat,Helvetica,Arial,serif;font-style:normal;font-weight:400;line-height:1.45;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;border-radius:.5rem;font-size:1rem;background-color:#22292f;color:#fff;display:block;max-width:200px;padding:.25rem .5rem;position:absolute;text-align:center;word-wrap:break-word;z-index:1070}.mapael .myLegend{background-color:#babfc7;border:1px solid #adb5bd;padding:10px;width:600px}.mapael .zoomButton{background-color:#babfc7;border:1px solid #ddd;border-radius:.42rem;color:#444;cursor:pointer;font-weight:700;height:16px;left:10px;line-height:14px;padding-left:1px;position:absolute;text-align:center;top:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:16px}.mapael .zoomButton.hover,.mapael .zoomButton:active,.mapael .zoomButton:hover{background-color:#acb2bc;color:#2b2b2b}.mapael .zoomReset{line-height:12px;top:10px}.mapael .zoomIn{top:30px}.mapael .zoomOut{top:50px}.jqvmap-zoomin,.jqvmap-zoomout{background-color:#babfc7;border:1px solid #ddd;border-radius:.42rem;color:#444;height:15px;width:15px}.jqvmap-zoomin.hover,.jqvmap-zoomin:active,.jqvmap-zoomin:hover,.jqvmap-zoomout.hover,.jqvmap-zoomout:active,.jqvmap-zoomout:hover{background-color:#acb2bc;color:#2b2b2b}.pace{z-index:1048}.pace .pace-progress{z-index:1049}.pace .pace-activity{z-index:1050}.pace-primary .pace .pace-progress{background:#4e9876}.pace-barber-shop-primary .pace{background:#fff}.pace-barber-shop-primary .pace .pace-progress{background:#4e9876}.pace-barber-shop-primary .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-primary .pace .pace-progress:after{color:rgba(78,152,118,.2)}.pace-bounce-primary .pace .pace-activity{background:#4e9876}.pace-center-atom-primary .pace-progress{height:100px;width:80px}.pace-center-atom-primary .pace-progress:before{background:#4e9876;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-primary .pace-activity,.pace-center-atom-primary .pace-activity:after,.pace-center-atom-primary .pace-activity:before{border-color:#4e9876}.pace-center-circle-primary .pace .pace-progress{background:rgba(78,152,118,.8);color:#fff}.pace-center-radar-primary .pace .pace-activity,.pace-center-radar-primary .pace .pace-activity:before{border-color:#4e9876 transparent transparent}.pace-center-simple-primary .pace{background:#fff;border-color:#4e9876}.pace-center-simple-primary .pace .pace-progress{background:#4e9876}.pace-material-primary .pace{color:#4e9876}.pace-corner-indicator-primary .pace .pace-activity{background:#4e9876}.pace-corner-indicator-primary .pace .pace-activity:after,.pace-corner-indicator-primary .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-primary .pace .pace-activity:before{border-right-color:rgba(78,152,118,.2);border-left-color:rgba(78,152,118,.2)}.pace-corner-indicator-primary .pace .pace-activity:after{border-top-color:rgba(78,152,118,.2);border-bottom-color:rgba(78,152,118,.2)}.pace-fill-left-primary .pace .pace-progress{background-color:rgba(78,152,118,.2)}.pace-flash-primary .pace .pace-progress{background:#4e9876}.pace-flash-primary .pace .pace-progress-inner{box-shadow:0 0 10px #4e9876,0 0 5px #4e9876}.pace-flash-primary .pace .pace-activity{border-top-color:#4e9876;border-left-color:#4e9876}.pace-loading-bar-primary .pace .pace-progress{background:#4e9876;color:#4e9876;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-primary .pace .pace-activity{box-shadow:inset 0 0 0 2px #4e9876,inset 0 0 0 7px #fff}.pace-mac-osx-primary .pace .pace-progress{background-color:#4e9876;box-shadow:inset -1px 0 #4e9876,inset 0 -1px #4e9876,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-primary .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-primary .pace-progress{color:#4e9876}.pace-secondary .pace .pace-progress{background:#b8c2cc}.pace-barber-shop-secondary .pace{background:#2a2e30}.pace-barber-shop-secondary .pace .pace-progress{background:#b8c2cc}.pace-barber-shop-secondary .pace .pace-activity{background-image:linear-gradient(45deg,rgba(42,46,48,.2) 25%,transparent 0,transparent 50%,rgba(42,46,48,.2) 0,rgba(42,46,48,.2) 75%,transparent 0,transparent)}.pace-big-counter-secondary .pace .pace-progress:after{color:rgba(184,194,204,.2)}.pace-bounce-secondary .pace .pace-activity{background:#b8c2cc}.pace-center-atom-secondary .pace-progress{height:100px;width:80px}.pace-center-atom-secondary .pace-progress:before{background:#b8c2cc;color:#2a2e30;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-secondary .pace-activity,.pace-center-atom-secondary .pace-activity:after,.pace-center-atom-secondary .pace-activity:before{border-color:#b8c2cc}.pace-center-circle-secondary .pace .pace-progress{background:rgba(184,194,204,.8);color:#2a2e30}.pace-center-radar-secondary .pace .pace-activity,.pace-center-radar-secondary .pace .pace-activity:before{border-color:#b8c2cc transparent transparent}.pace-center-simple-secondary .pace{background:#2a2e30;border-color:#b8c2cc}.pace-center-simple-secondary .pace .pace-progress{background:#b8c2cc}.pace-material-secondary .pace{color:#b8c2cc}.pace-corner-indicator-secondary .pace .pace-activity{background:#b8c2cc}.pace-corner-indicator-secondary .pace .pace-activity:after,.pace-corner-indicator-secondary .pace .pace-activity:before{border:5px solid #2a2e30}.pace-corner-indicator-secondary .pace .pace-activity:before{border-right-color:rgba(184,194,204,.2);border-left-color:rgba(184,194,204,.2)}.pace-corner-indicator-secondary .pace .pace-activity:after{border-top-color:rgba(184,194,204,.2);border-bottom-color:rgba(184,194,204,.2)}.pace-fill-left-secondary .pace .pace-progress{background-color:rgba(184,194,204,.2)}.pace-flash-secondary .pace .pace-progress{background:#b8c2cc}.pace-flash-secondary .pace .pace-progress-inner{box-shadow:0 0 10px #b8c2cc,0 0 5px #b8c2cc}.pace-flash-secondary .pace .pace-activity{border-top-color:#b8c2cc;border-left-color:#b8c2cc}.pace-loading-bar-secondary .pace .pace-progress{background:#b8c2cc;color:#b8c2cc;box-shadow:120px 0 #2a2e30,240px 0 #2a2e30}.pace-loading-bar-secondary .pace .pace-activity{box-shadow:inset 0 0 0 2px #b8c2cc,inset 0 0 0 7px #2a2e30}.pace-mac-osx-secondary .pace .pace-progress{background-color:#b8c2cc;box-shadow:inset -1px 0 #b8c2cc,inset 0 -1px #b8c2cc,inset 0 2px rgba(42,46,48,.5),inset 0 6px rgba(42,46,48,.3)}.pace-mac-osx-secondary .pace .pace-activity{background-image:radial-gradient(rgba(42,46,48,.65) 0,rgba(42,46,48,.15) 100%);height:12px}.pace-progress-color-secondary .pace-progress{color:#b8c2cc}.pace-success .pace .pace-progress{background:#21b978}.pace-barber-shop-success .pace{background:#fff}.pace-barber-shop-success .pace .pace-progress{background:#21b978}.pace-barber-shop-success .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-success .pace .pace-progress:after{color:rgba(33,185,120,.2)}.pace-bounce-success .pace .pace-activity{background:#21b978}.pace-center-atom-success .pace-progress{height:100px;width:80px}.pace-center-atom-success .pace-progress:before{background:#21b978;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-success .pace-activity,.pace-center-atom-success .pace-activity:after,.pace-center-atom-success .pace-activity:before{border-color:#21b978}.pace-center-circle-success .pace .pace-progress{background:rgba(33,185,120,.8);color:#fff}.pace-center-radar-success .pace .pace-activity,.pace-center-radar-success .pace .pace-activity:before{border-color:#21b978 transparent transparent}.pace-center-simple-success .pace{background:#fff;border-color:#21b978}.pace-center-simple-success .pace .pace-progress{background:#21b978}.pace-material-success .pace{color:#21b978}.pace-corner-indicator-success .pace .pace-activity{background:#21b978}.pace-corner-indicator-success .pace .pace-activity:after,.pace-corner-indicator-success .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-success .pace .pace-activity:before{border-right-color:rgba(33,185,120,.2);border-left-color:rgba(33,185,120,.2)}.pace-corner-indicator-success .pace .pace-activity:after{border-top-color:rgba(33,185,120,.2);border-bottom-color:rgba(33,185,120,.2)}.pace-fill-left-success .pace .pace-progress{background-color:rgba(33,185,120,.2)}.pace-flash-success .pace .pace-progress{background:#21b978}.pace-flash-success .pace .pace-progress-inner{box-shadow:0 0 10px #21b978,0 0 5px #21b978}.pace-flash-success .pace .pace-activity{border-top-color:#21b978;border-left-color:#21b978}.pace-loading-bar-success .pace .pace-progress{background:#21b978;color:#21b978;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-success .pace .pace-activity{box-shadow:inset 0 0 0 2px #21b978,inset 0 0 0 7px #fff}.pace-mac-osx-success .pace .pace-progress{background-color:#21b978;box-shadow:inset -1px 0 #21b978,inset 0 -1px #21b978,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-success .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-success .pace-progress{color:#21b978}.pace-info .pace .pace-progress{background:#4277cf}.pace-barber-shop-info .pace{background:#fff}.pace-barber-shop-info .pace .pace-progress{background:#4277cf}.pace-barber-shop-info .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-info .pace .pace-progress:after{color:rgba(66,119,207,.2)}.pace-bounce-info .pace .pace-activity{background:#4277cf}.pace-center-atom-info .pace-progress{height:100px;width:80px}.pace-center-atom-info .pace-progress:before{background:#4277cf;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-info .pace-activity,.pace-center-atom-info .pace-activity:after,.pace-center-atom-info .pace-activity:before{border-color:#4277cf}.pace-center-circle-info .pace .pace-progress{background:rgba(66,119,207,.8);color:#fff}.pace-center-radar-info .pace .pace-activity,.pace-center-radar-info .pace .pace-activity:before{border-color:#4277cf transparent transparent}.pace-center-simple-info .pace{background:#fff;border-color:#4277cf}.pace-center-simple-info .pace .pace-progress{background:#4277cf}.pace-material-info .pace{color:#4277cf}.pace-corner-indicator-info .pace .pace-activity{background:#4277cf}.pace-corner-indicator-info .pace .pace-activity:after,.pace-corner-indicator-info .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-info .pace .pace-activity:before{border-right-color:rgba(66,119,207,.2);border-left-color:rgba(66,119,207,.2)}.pace-corner-indicator-info .pace .pace-activity:after{border-top-color:rgba(66,119,207,.2);border-bottom-color:rgba(66,119,207,.2)}.pace-fill-left-info .pace .pace-progress{background-color:rgba(66,119,207,.2)}.pace-flash-info .pace .pace-progress{background:#4277cf}.pace-flash-info .pace .pace-progress-inner{box-shadow:0 0 10px #4277cf,0 0 5px #4277cf}.pace-flash-info .pace .pace-activity{border-top-color:#4277cf;border-left-color:#4277cf}.pace-loading-bar-info .pace .pace-progress{background:#4277cf;color:#4277cf;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-info .pace .pace-activity{box-shadow:inset 0 0 0 2px #4277cf,inset 0 0 0 7px #fff}.pace-mac-osx-info .pace .pace-progress{background-color:#4277cf;box-shadow:inset -1px 0 #4277cf,inset 0 -1px #4277cf,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-info .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-info .pace-progress{color:#4277cf}.pace-warning .pace .pace-progress{background:#dda451}.pace-barber-shop-warning .pace{background:#2a2e30}.pace-barber-shop-warning .pace .pace-progress{background:#dda451}.pace-barber-shop-warning .pace .pace-activity{background-image:linear-gradient(45deg,rgba(42,46,48,.2) 25%,transparent 0,transparent 50%,rgba(42,46,48,.2) 0,rgba(42,46,48,.2) 75%,transparent 0,transparent)}.pace-big-counter-warning .pace .pace-progress:after{color:rgba(221,164,81,.2)}.pace-bounce-warning .pace .pace-activity{background:#dda451}.pace-center-atom-warning .pace-progress{height:100px;width:80px}.pace-center-atom-warning .pace-progress:before{background:#dda451;color:#2a2e30;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-warning .pace-activity,.pace-center-atom-warning .pace-activity:after,.pace-center-atom-warning .pace-activity:before{border-color:#dda451}.pace-center-circle-warning .pace .pace-progress{background:rgba(221,164,81,.8);color:#2a2e30}.pace-center-radar-warning .pace .pace-activity,.pace-center-radar-warning .pace .pace-activity:before{border-color:#dda451 transparent transparent}.pace-center-simple-warning .pace{background:#2a2e30;border-color:#dda451}.pace-center-simple-warning .pace .pace-progress{background:#dda451}.pace-material-warning .pace{color:#dda451}.pace-corner-indicator-warning .pace .pace-activity{background:#dda451}.pace-corner-indicator-warning .pace .pace-activity:after,.pace-corner-indicator-warning .pace .pace-activity:before{border:5px solid #2a2e30}.pace-corner-indicator-warning .pace .pace-activity:before{border-right-color:rgba(221,164,81,.2);border-left-color:rgba(221,164,81,.2)}.pace-corner-indicator-warning .pace .pace-activity:after{border-top-color:rgba(221,164,81,.2);border-bottom-color:rgba(221,164,81,.2)}.pace-fill-left-warning .pace .pace-progress{background-color:rgba(221,164,81,.2)}.pace-flash-warning .pace .pace-progress{background:#dda451}.pace-flash-warning .pace .pace-progress-inner{box-shadow:0 0 10px #dda451,0 0 5px #dda451}.pace-flash-warning .pace .pace-activity{border-top-color:#dda451;border-left-color:#dda451}.pace-loading-bar-warning .pace .pace-progress{background:#dda451;color:#dda451;box-shadow:120px 0 #2a2e30,240px 0 #2a2e30}.pace-loading-bar-warning .pace .pace-activity{box-shadow:inset 0 0 0 2px #dda451,inset 0 0 0 7px #2a2e30}.pace-mac-osx-warning .pace .pace-progress{background-color:#dda451;box-shadow:inset -1px 0 #dda451,inset 0 -1px #dda451,inset 0 2px rgba(42,46,48,.5),inset 0 6px rgba(42,46,48,.3)}.pace-mac-osx-warning .pace .pace-activity{background-image:radial-gradient(rgba(42,46,48,.65) 0,rgba(42,46,48,.15) 100%);height:12px}.pace-progress-color-warning .pace-progress{color:#dda451}.pace-danger .pace .pace-progress{background:#ea5455}.pace-barber-shop-danger .pace{background:#fff}.pace-barber-shop-danger .pace .pace-progress{background:#ea5455}.pace-barber-shop-danger .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-danger .pace .pace-progress:after{color:rgba(234,84,85,.2)}.pace-bounce-danger .pace .pace-activity{background:#ea5455}.pace-center-atom-danger .pace-progress{height:100px;width:80px}.pace-center-atom-danger .pace-progress:before{background:#ea5455;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-danger .pace-activity,.pace-center-atom-danger .pace-activity:after,.pace-center-atom-danger .pace-activity:before{border-color:#ea5455}.pace-center-circle-danger .pace .pace-progress{background:rgba(234,84,85,.8);color:#fff}.pace-center-radar-danger .pace .pace-activity,.pace-center-radar-danger .pace .pace-activity:before{border-color:#ea5455 transparent transparent}.pace-center-simple-danger .pace{background:#fff;border-color:#ea5455}.pace-center-simple-danger .pace .pace-progress{background:#ea5455}.pace-material-danger .pace{color:#ea5455}.pace-corner-indicator-danger .pace .pace-activity{background:#ea5455}.pace-corner-indicator-danger .pace .pace-activity:after,.pace-corner-indicator-danger .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-danger .pace .pace-activity:before{border-right-color:rgba(234,84,85,.2);border-left-color:rgba(234,84,85,.2)}.pace-corner-indicator-danger .pace .pace-activity:after{border-top-color:rgba(234,84,85,.2);border-bottom-color:rgba(234,84,85,.2)}.pace-fill-left-danger .pace .pace-progress{background-color:rgba(234,84,85,.2)}.pace-flash-danger .pace .pace-progress{background:#ea5455}.pace-flash-danger .pace .pace-progress-inner{box-shadow:0 0 10px #ea5455,0 0 5px #ea5455}.pace-flash-danger .pace .pace-activity{border-top-color:#ea5455;border-left-color:#ea5455}.pace-loading-bar-danger .pace .pace-progress{background:#ea5455;color:#ea5455;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-danger .pace .pace-activity{box-shadow:inset 0 0 0 2px #ea5455,inset 0 0 0 7px #fff}.pace-mac-osx-danger .pace .pace-progress{background-color:#ea5455;box-shadow:inset -1px 0 #ea5455,inset 0 -1px #ea5455,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-danger .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-danger .pace-progress{color:#ea5455}.pace-light .pace .pace-progress{background:#f7f7f9}.pace-barber-shop-light .pace{background:#2a2e30}.pace-barber-shop-light .pace .pace-progress{background:#f7f7f9}.pace-barber-shop-light .pace .pace-activity{background-image:linear-gradient(45deg,rgba(42,46,48,.2) 25%,transparent 0,transparent 50%,rgba(42,46,48,.2) 0,rgba(42,46,48,.2) 75%,transparent 0,transparent)}.pace-big-counter-light .pace .pace-progress:after{color:rgba(247,247,249,.2)}.pace-bounce-light .pace .pace-activity{background:#f7f7f9}.pace-center-atom-light .pace-progress{height:100px;width:80px}.pace-center-atom-light .pace-progress:before{background:#f7f7f9;color:#2a2e30;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-light .pace-activity,.pace-center-atom-light .pace-activity:after,.pace-center-atom-light .pace-activity:before{border-color:#f7f7f9}.pace-center-circle-light .pace .pace-progress{background:rgba(247,247,249,.8);color:#2a2e30}.pace-center-radar-light .pace .pace-activity,.pace-center-radar-light .pace .pace-activity:before{border-color:#f7f7f9 transparent transparent}.pace-center-simple-light .pace{background:#2a2e30;border-color:#f7f7f9}.pace-center-simple-light .pace .pace-progress{background:#f7f7f9}.pace-material-light .pace{color:#f7f7f9}.pace-corner-indicator-light .pace .pace-activity{background:#f7f7f9}.pace-corner-indicator-light .pace .pace-activity:after,.pace-corner-indicator-light .pace .pace-activity:before{border:5px solid #2a2e30}.pace-corner-indicator-light .pace .pace-activity:before{border-right-color:rgba(247,247,249,.2);border-left-color:rgba(247,247,249,.2)}.pace-corner-indicator-light .pace .pace-activity:after{border-top-color:rgba(247,247,249,.2);border-bottom-color:rgba(247,247,249,.2)}.pace-fill-left-light .pace .pace-progress{background-color:rgba(247,247,249,.2)}.pace-flash-light .pace .pace-progress{background:#f7f7f9}.pace-flash-light .pace .pace-progress-inner{box-shadow:0 0 10px #f7f7f9,0 0 5px #f7f7f9}.pace-flash-light .pace .pace-activity{border-top-color:#f7f7f9;border-left-color:#f7f7f9}.pace-loading-bar-light .pace .pace-progress{background:#f7f7f9;color:#f7f7f9;box-shadow:120px 0 #2a2e30,240px 0 #2a2e30}.pace-loading-bar-light .pace .pace-activity{box-shadow:inset 0 0 0 2px #f7f7f9,inset 0 0 0 7px #2a2e30}.pace-mac-osx-light .pace .pace-progress{background-color:#f7f7f9;box-shadow:inset -1px 0 #f7f7f9,inset 0 -1px #f7f7f9,inset 0 2px rgba(42,46,48,.5),inset 0 6px rgba(42,46,48,.3)}.pace-mac-osx-light .pace .pace-activity{background-image:radial-gradient(rgba(42,46,48,.65) 0,rgba(42,46,48,.15) 100%);height:12px}.pace-progress-color-light .pace-progress{color:#f7f7f9}.pace-dark .pace .pace-progress{background:#22292f}.pace-barber-shop-dark .pace{background:#fff}.pace-barber-shop-dark .pace .pace-progress{background:#22292f}.pace-barber-shop-dark .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-dark .pace .pace-progress:after{color:rgba(34,41,47,.2)}.pace-bounce-dark .pace .pace-activity{background:#22292f}.pace-center-atom-dark .pace-progress{height:100px;width:80px}.pace-center-atom-dark .pace-progress:before{background:#22292f;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-dark .pace-activity,.pace-center-atom-dark .pace-activity:after,.pace-center-atom-dark .pace-activity:before{border-color:#22292f}.pace-center-circle-dark .pace .pace-progress{background:rgba(34,41,47,.8);color:#fff}.pace-center-radar-dark .pace .pace-activity,.pace-center-radar-dark .pace .pace-activity:before{border-color:#22292f transparent transparent}.pace-center-simple-dark .pace{background:#fff;border-color:#22292f}.pace-center-simple-dark .pace .pace-progress{background:#22292f}.pace-material-dark .pace{color:#22292f}.pace-corner-indicator-dark .pace .pace-activity{background:#22292f}.pace-corner-indicator-dark .pace .pace-activity:after,.pace-corner-indicator-dark .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-dark .pace .pace-activity:before{border-right-color:rgba(34,41,47,.2);border-left-color:rgba(34,41,47,.2)}.pace-corner-indicator-dark .pace .pace-activity:after{border-top-color:rgba(34,41,47,.2);border-bottom-color:rgba(34,41,47,.2)}.pace-fill-left-dark .pace .pace-progress{background-color:rgba(34,41,47,.2)}.pace-flash-dark .pace .pace-progress{background:#22292f}.pace-flash-dark .pace .pace-progress-inner{box-shadow:0 0 10px #22292f,0 0 5px #22292f}.pace-flash-dark .pace .pace-activity{border-top-color:#22292f;border-left-color:#22292f}.pace-loading-bar-dark .pace .pace-progress{background:#22292f;color:#22292f;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-dark .pace .pace-activity{box-shadow:inset 0 0 0 2px #22292f,inset 0 0 0 7px #fff}.pace-mac-osx-dark .pace .pace-progress{background-color:#22292f;box-shadow:inset -1px 0 #22292f,inset 0 -1px #22292f,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-dark .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-dark .pace-progress{color:#22292f}.pace-lightblue .pace .pace-progress{background:#3c8dbc}.pace-barber-shop-lightblue .pace{background:#fff}.pace-barber-shop-lightblue .pace .pace-progress{background:#3c8dbc}.pace-barber-shop-lightblue .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-lightblue .pace .pace-progress:after{color:rgba(60,141,188,.2)}.pace-bounce-lightblue .pace .pace-activity{background:#3c8dbc}.pace-center-atom-lightblue .pace-progress{height:100px;width:80px}.pace-center-atom-lightblue .pace-progress:before{background:#3c8dbc;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-lightblue .pace-activity,.pace-center-atom-lightblue .pace-activity:after,.pace-center-atom-lightblue .pace-activity:before{border-color:#3c8dbc}.pace-center-circle-lightblue .pace .pace-progress{background:rgba(60,141,188,.8);color:#fff}.pace-center-radar-lightblue .pace .pace-activity,.pace-center-radar-lightblue .pace .pace-activity:before{border-color:#3c8dbc transparent transparent}.pace-center-simple-lightblue .pace{background:#fff;border-color:#3c8dbc}.pace-center-simple-lightblue .pace .pace-progress{background:#3c8dbc}.pace-material-lightblue .pace{color:#3c8dbc}.pace-corner-indicator-lightblue .pace .pace-activity{background:#3c8dbc}.pace-corner-indicator-lightblue .pace .pace-activity:after,.pace-corner-indicator-lightblue .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-lightblue .pace .pace-activity:before{border-right-color:rgba(60,141,188,.2);border-left-color:rgba(60,141,188,.2)}.pace-corner-indicator-lightblue .pace .pace-activity:after{border-top-color:rgba(60,141,188,.2);border-bottom-color:rgba(60,141,188,.2)}.pace-fill-left-lightblue .pace .pace-progress{background-color:rgba(60,141,188,.2)}.pace-flash-lightblue .pace .pace-progress{background:#3c8dbc}.pace-flash-lightblue .pace .pace-progress-inner{box-shadow:0 0 10px #3c8dbc,0 0 5px #3c8dbc}.pace-flash-lightblue .pace .pace-activity{border-top-color:#3c8dbc;border-left-color:#3c8dbc}.pace-loading-bar-lightblue .pace .pace-progress{background:#3c8dbc;color:#3c8dbc;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-lightblue .pace .pace-activity{box-shadow:inset 0 0 0 2px #3c8dbc,inset 0 0 0 7px #fff}.pace-mac-osx-lightblue .pace .pace-progress{background-color:#3c8dbc;box-shadow:inset -1px 0 #3c8dbc,inset 0 -1px #3c8dbc,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-lightblue .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-lightblue .pace-progress{color:#3c8dbc}.pace-navy .pace .pace-progress{background:#001f3f}.pace-barber-shop-navy .pace{background:#fff}.pace-barber-shop-navy .pace .pace-progress{background:#001f3f}.pace-barber-shop-navy .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-navy .pace .pace-progress:after{color:rgba(0,31,63,.2)}.pace-bounce-navy .pace .pace-activity{background:#001f3f}.pace-center-atom-navy .pace-progress{height:100px;width:80px}.pace-center-atom-navy .pace-progress:before{background:#001f3f;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-navy .pace-activity,.pace-center-atom-navy .pace-activity:after,.pace-center-atom-navy .pace-activity:before{border-color:#001f3f}.pace-center-circle-navy .pace .pace-progress{background:rgba(0,31,63,.8);color:#fff}.pace-center-radar-navy .pace .pace-activity,.pace-center-radar-navy .pace .pace-activity:before{border-color:#001f3f transparent transparent}.pace-center-simple-navy .pace{background:#fff;border-color:#001f3f}.pace-center-simple-navy .pace .pace-progress{background:#001f3f}.pace-material-navy .pace{color:#001f3f}.pace-corner-indicator-navy .pace .pace-activity{background:#001f3f}.pace-corner-indicator-navy .pace .pace-activity:after,.pace-corner-indicator-navy .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-navy .pace .pace-activity:before{border-right-color:rgba(0,31,63,.2);border-left-color:rgba(0,31,63,.2)}.pace-corner-indicator-navy .pace .pace-activity:after{border-top-color:rgba(0,31,63,.2);border-bottom-color:rgba(0,31,63,.2)}.pace-fill-left-navy .pace .pace-progress{background-color:rgba(0,31,63,.2)}.pace-flash-navy .pace .pace-progress{background:#001f3f}.pace-flash-navy .pace .pace-progress-inner{box-shadow:0 0 10px #001f3f,0 0 5px #001f3f}.pace-flash-navy .pace .pace-activity{border-top-color:#001f3f;border-left-color:#001f3f}.pace-loading-bar-navy .pace .pace-progress{background:#001f3f;color:#001f3f;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-navy .pace .pace-activity{box-shadow:inset 0 0 0 2px #001f3f,inset 0 0 0 7px #fff}.pace-mac-osx-navy .pace .pace-progress{background-color:#001f3f;box-shadow:inset -1px 0 #001f3f,inset 0 -1px #001f3f,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-navy .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-navy .pace-progress{color:#001f3f}.pace-olive .pace .pace-progress{background:#3d9970}.pace-barber-shop-olive .pace{background:#fff}.pace-barber-shop-olive .pace .pace-progress{background:#3d9970}.pace-barber-shop-olive .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-olive .pace .pace-progress:after{color:rgba(61,153,112,.2)}.pace-bounce-olive .pace .pace-activity{background:#3d9970}.pace-center-atom-olive .pace-progress{height:100px;width:80px}.pace-center-atom-olive .pace-progress:before{background:#3d9970;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-olive .pace-activity,.pace-center-atom-olive .pace-activity:after,.pace-center-atom-olive .pace-activity:before{border-color:#3d9970}.pace-center-circle-olive .pace .pace-progress{background:rgba(61,153,112,.8);color:#fff}.pace-center-radar-olive .pace .pace-activity,.pace-center-radar-olive .pace .pace-activity:before{border-color:#3d9970 transparent transparent}.pace-center-simple-olive .pace{background:#fff;border-color:#3d9970}.pace-center-simple-olive .pace .pace-progress{background:#3d9970}.pace-material-olive .pace{color:#3d9970}.pace-corner-indicator-olive .pace .pace-activity{background:#3d9970}.pace-corner-indicator-olive .pace .pace-activity:after,.pace-corner-indicator-olive .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-olive .pace .pace-activity:before{border-right-color:rgba(61,153,112,.2);border-left-color:rgba(61,153,112,.2)}.pace-corner-indicator-olive .pace .pace-activity:after{border-top-color:rgba(61,153,112,.2);border-bottom-color:rgba(61,153,112,.2)}.pace-fill-left-olive .pace .pace-progress{background-color:rgba(61,153,112,.2)}.pace-flash-olive .pace .pace-progress{background:#3d9970}.pace-flash-olive .pace .pace-progress-inner{box-shadow:0 0 10px #3d9970,0 0 5px #3d9970}.pace-flash-olive .pace .pace-activity{border-top-color:#3d9970;border-left-color:#3d9970}.pace-loading-bar-olive .pace .pace-progress{background:#3d9970;color:#3d9970;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-olive .pace .pace-activity{box-shadow:inset 0 0 0 2px #3d9970,inset 0 0 0 7px #fff}.pace-mac-osx-olive .pace .pace-progress{background-color:#3d9970;box-shadow:inset -1px 0 #3d9970,inset 0 -1px #3d9970,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-olive .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-olive .pace-progress{color:#3d9970}.pace-lime .pace .pace-progress{background:#01ff70}.pace-barber-shop-lime .pace{background:#2a2e30}.pace-barber-shop-lime .pace .pace-progress{background:#01ff70}.pace-barber-shop-lime .pace .pace-activity{background-image:linear-gradient(45deg,rgba(42,46,48,.2) 25%,transparent 0,transparent 50%,rgba(42,46,48,.2) 0,rgba(42,46,48,.2) 75%,transparent 0,transparent)}.pace-big-counter-lime .pace .pace-progress:after{color:rgba(1,255,112,.2)}.pace-bounce-lime .pace .pace-activity{background:#01ff70}.pace-center-atom-lime .pace-progress{height:100px;width:80px}.pace-center-atom-lime .pace-progress:before{background:#01ff70;color:#2a2e30;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-lime .pace-activity,.pace-center-atom-lime .pace-activity:after,.pace-center-atom-lime .pace-activity:before{border-color:#01ff70}.pace-center-circle-lime .pace .pace-progress{background:rgba(1,255,112,.8);color:#2a2e30}.pace-center-radar-lime .pace .pace-activity,.pace-center-radar-lime .pace .pace-activity:before{border-color:#01ff70 transparent transparent}.pace-center-simple-lime .pace{background:#2a2e30;border-color:#01ff70}.pace-center-simple-lime .pace .pace-progress{background:#01ff70}.pace-material-lime .pace{color:#01ff70}.pace-corner-indicator-lime .pace .pace-activity{background:#01ff70}.pace-corner-indicator-lime .pace .pace-activity:after,.pace-corner-indicator-lime .pace .pace-activity:before{border:5px solid #2a2e30}.pace-corner-indicator-lime .pace .pace-activity:before{border-right-color:rgba(1,255,112,.2);border-left-color:rgba(1,255,112,.2)}.pace-corner-indicator-lime .pace .pace-activity:after{border-top-color:rgba(1,255,112,.2);border-bottom-color:rgba(1,255,112,.2)}.pace-fill-left-lime .pace .pace-progress{background-color:rgba(1,255,112,.2)}.pace-flash-lime .pace .pace-progress{background:#01ff70}.pace-flash-lime .pace .pace-progress-inner{box-shadow:0 0 10px #01ff70,0 0 5px #01ff70}.pace-flash-lime .pace .pace-activity{border-top-color:#01ff70;border-left-color:#01ff70}.pace-loading-bar-lime .pace .pace-progress{background:#01ff70;color:#01ff70;box-shadow:120px 0 #2a2e30,240px 0 #2a2e30}.pace-loading-bar-lime .pace .pace-activity{box-shadow:inset 0 0 0 2px #01ff70,inset 0 0 0 7px #2a2e30}.pace-mac-osx-lime .pace .pace-progress{background-color:#01ff70;box-shadow:inset -1px 0 #01ff70,inset 0 -1px #01ff70,inset 0 2px rgba(42,46,48,.5),inset 0 6px rgba(42,46,48,.3)}.pace-mac-osx-lime .pace .pace-activity{background-image:radial-gradient(rgba(42,46,48,.65) 0,rgba(42,46,48,.15) 100%);height:12px}.pace-progress-color-lime .pace-progress{color:#01ff70}.pace-fuchsia .pace .pace-progress{background:#f012be}.pace-barber-shop-fuchsia .pace{background:#fff}.pace-barber-shop-fuchsia .pace .pace-progress{background:#f012be}.pace-barber-shop-fuchsia .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-fuchsia .pace .pace-progress:after{color:rgba(240,18,190,.2)}.pace-bounce-fuchsia .pace .pace-activity{background:#f012be}.pace-center-atom-fuchsia .pace-progress{height:100px;width:80px}.pace-center-atom-fuchsia .pace-progress:before{background:#f012be;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-fuchsia .pace-activity,.pace-center-atom-fuchsia .pace-activity:after,.pace-center-atom-fuchsia .pace-activity:before{border-color:#f012be}.pace-center-circle-fuchsia .pace .pace-progress{background:rgba(240,18,190,.8);color:#fff}.pace-center-radar-fuchsia .pace .pace-activity,.pace-center-radar-fuchsia .pace .pace-activity:before{border-color:#f012be transparent transparent}.pace-center-simple-fuchsia .pace{background:#fff;border-color:#f012be}.pace-center-simple-fuchsia .pace .pace-progress{background:#f012be}.pace-material-fuchsia .pace{color:#f012be}.pace-corner-indicator-fuchsia .pace .pace-activity{background:#f012be}.pace-corner-indicator-fuchsia .pace .pace-activity:after,.pace-corner-indicator-fuchsia .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-fuchsia .pace .pace-activity:before{border-right-color:rgba(240,18,190,.2);border-left-color:rgba(240,18,190,.2)}.pace-corner-indicator-fuchsia .pace .pace-activity:after{border-top-color:rgba(240,18,190,.2);border-bottom-color:rgba(240,18,190,.2)}.pace-fill-left-fuchsia .pace .pace-progress{background-color:rgba(240,18,190,.2)}.pace-flash-fuchsia .pace .pace-progress{background:#f012be}.pace-flash-fuchsia .pace .pace-progress-inner{box-shadow:0 0 10px #f012be,0 0 5px #f012be}.pace-flash-fuchsia .pace .pace-activity{border-top-color:#f012be;border-left-color:#f012be}.pace-loading-bar-fuchsia .pace .pace-progress{background:#f012be;color:#f012be;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-fuchsia .pace .pace-activity{box-shadow:inset 0 0 0 2px #f012be,inset 0 0 0 7px #fff}.pace-mac-osx-fuchsia .pace .pace-progress{background-color:#f012be;box-shadow:inset -1px 0 #f012be,inset 0 -1px #f012be,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-fuchsia .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-fuchsia .pace-progress{color:#f012be}.pace-maroon .pace .pace-progress{background:#d81b60}.pace-barber-shop-maroon .pace{background:#fff}.pace-barber-shop-maroon .pace .pace-progress{background:#d81b60}.pace-barber-shop-maroon .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-maroon .pace .pace-progress:after{color:rgba(216,27,96,.2)}.pace-bounce-maroon .pace .pace-activity{background:#d81b60}.pace-center-atom-maroon .pace-progress{height:100px;width:80px}.pace-center-atom-maroon .pace-progress:before{background:#d81b60;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-maroon .pace-activity,.pace-center-atom-maroon .pace-activity:after,.pace-center-atom-maroon .pace-activity:before{border-color:#d81b60}.pace-center-circle-maroon .pace .pace-progress{background:rgba(216,27,96,.8);color:#fff}.pace-center-radar-maroon .pace .pace-activity,.pace-center-radar-maroon .pace .pace-activity:before{border-color:#d81b60 transparent transparent}.pace-center-simple-maroon .pace{background:#fff;border-color:#d81b60}.pace-center-simple-maroon .pace .pace-progress{background:#d81b60}.pace-material-maroon .pace{color:#d81b60}.pace-corner-indicator-maroon .pace .pace-activity{background:#d81b60}.pace-corner-indicator-maroon .pace .pace-activity:after,.pace-corner-indicator-maroon .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-maroon .pace .pace-activity:before{border-right-color:rgba(216,27,96,.2);border-left-color:rgba(216,27,96,.2)}.pace-corner-indicator-maroon .pace .pace-activity:after{border-top-color:rgba(216,27,96,.2);border-bottom-color:rgba(216,27,96,.2)}.pace-fill-left-maroon .pace .pace-progress{background-color:rgba(216,27,96,.2)}.pace-flash-maroon .pace .pace-progress{background:#d81b60}.pace-flash-maroon .pace .pace-progress-inner{box-shadow:0 0 10px #d81b60,0 0 5px #d81b60}.pace-flash-maroon .pace .pace-activity{border-top-color:#d81b60;border-left-color:#d81b60}.pace-loading-bar-maroon .pace .pace-progress{background:#d81b60;color:#d81b60;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-maroon .pace .pace-activity{box-shadow:inset 0 0 0 2px #d81b60,inset 0 0 0 7px #fff}.pace-mac-osx-maroon .pace .pace-progress{background-color:#d81b60;box-shadow:inset -1px 0 #d81b60,inset 0 -1px #d81b60,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-maroon .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-maroon .pace-progress{color:#d81b60}.pace-blue .pace .pace-progress{background:#3085d6}.pace-barber-shop-blue .pace{background:#fff}.pace-barber-shop-blue .pace .pace-progress{background:#3085d6}.pace-barber-shop-blue .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-blue .pace .pace-progress:after{color:rgba(48,133,214,.2)}.pace-bounce-blue .pace .pace-activity{background:#3085d6}.pace-center-atom-blue .pace-progress{height:100px;width:80px}.pace-center-atom-blue .pace-progress:before{background:#3085d6;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-blue .pace-activity,.pace-center-atom-blue .pace-activity:after,.pace-center-atom-blue .pace-activity:before{border-color:#3085d6}.pace-center-circle-blue .pace .pace-progress{background:rgba(48,133,214,.8);color:#fff}.pace-center-radar-blue .pace .pace-activity,.pace-center-radar-blue .pace .pace-activity:before{border-color:#3085d6 transparent transparent}.pace-center-simple-blue .pace{background:#fff;border-color:#3085d6}.pace-center-simple-blue .pace .pace-progress{background:#3085d6}.pace-material-blue .pace{color:#3085d6}.pace-corner-indicator-blue .pace .pace-activity{background:#3085d6}.pace-corner-indicator-blue .pace .pace-activity:after,.pace-corner-indicator-blue .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-blue .pace .pace-activity:before{border-right-color:rgba(48,133,214,.2);border-left-color:rgba(48,133,214,.2)}.pace-corner-indicator-blue .pace .pace-activity:after{border-top-color:rgba(48,133,214,.2);border-bottom-color:rgba(48,133,214,.2)}.pace-fill-left-blue .pace .pace-progress{background-color:rgba(48,133,214,.2)}.pace-flash-blue .pace .pace-progress{background:#3085d6}.pace-flash-blue .pace .pace-progress-inner{box-shadow:0 0 10px #3085d6,0 0 5px #3085d6}.pace-flash-blue .pace .pace-activity{border-top-color:#3085d6;border-left-color:#3085d6}.pace-loading-bar-blue .pace .pace-progress{background:#3085d6;color:#3085d6;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-blue .pace .pace-activity{box-shadow:inset 0 0 0 2px #3085d6,inset 0 0 0 7px #fff}.pace-mac-osx-blue .pace .pace-progress{background-color:#3085d6;box-shadow:inset -1px 0 #3085d6,inset 0 -1px #3085d6,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-blue .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-blue .pace-progress{color:#3085d6}.pace-indigo .pace .pace-progress{background:#5c6bc6}.pace-barber-shop-indigo .pace{background:#fff}.pace-barber-shop-indigo .pace .pace-progress{background:#5c6bc6}.pace-barber-shop-indigo .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-indigo .pace .pace-progress:after{color:rgba(92,107,198,.2)}.pace-bounce-indigo .pace .pace-activity{background:#5c6bc6}.pace-center-atom-indigo .pace-progress{height:100px;width:80px}.pace-center-atom-indigo .pace-progress:before{background:#5c6bc6;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-indigo .pace-activity,.pace-center-atom-indigo .pace-activity:after,.pace-center-atom-indigo .pace-activity:before{border-color:#5c6bc6}.pace-center-circle-indigo .pace .pace-progress{background:rgba(92,107,198,.8);color:#fff}.pace-center-radar-indigo .pace .pace-activity,.pace-center-radar-indigo .pace .pace-activity:before{border-color:#5c6bc6 transparent transparent}.pace-center-simple-indigo .pace{background:#fff;border-color:#5c6bc6}.pace-center-simple-indigo .pace .pace-progress{background:#5c6bc6}.pace-material-indigo .pace{color:#5c6bc6}.pace-corner-indicator-indigo .pace .pace-activity{background:#5c6bc6}.pace-corner-indicator-indigo .pace .pace-activity:after,.pace-corner-indicator-indigo .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-indigo .pace .pace-activity:before{border-right-color:rgba(92,107,198,.2);border-left-color:rgba(92,107,198,.2)}.pace-corner-indicator-indigo .pace .pace-activity:after{border-top-color:rgba(92,107,198,.2);border-bottom-color:rgba(92,107,198,.2)}.pace-fill-left-indigo .pace .pace-progress{background-color:rgba(92,107,198,.2)}.pace-flash-indigo .pace .pace-progress{background:#5c6bc6}.pace-flash-indigo .pace .pace-progress-inner{box-shadow:0 0 10px #5c6bc6,0 0 5px #5c6bc6}.pace-flash-indigo .pace .pace-activity{border-top-color:#5c6bc6;border-left-color:#5c6bc6}.pace-loading-bar-indigo .pace .pace-progress{background:#5c6bc6;color:#5c6bc6;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-indigo .pace .pace-activity{box-shadow:inset 0 0 0 2px #5c6bc6,inset 0 0 0 7px #fff}.pace-mac-osx-indigo .pace .pace-progress{background-color:#5c6bc6;box-shadow:inset -1px 0 #5c6bc6,inset 0 -1px #5c6bc6,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-indigo .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-indigo .pace-progress{color:#5c6bc6}.pace-purple .pace .pace-progress{background:#6f42c1}.pace-barber-shop-purple .pace{background:#fff}.pace-barber-shop-purple .pace .pace-progress{background:#6f42c1}.pace-barber-shop-purple .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-purple .pace .pace-progress:after{color:rgba(111,66,193,.2)}.pace-bounce-purple .pace .pace-activity{background:#6f42c1}.pace-center-atom-purple .pace-progress{height:100px;width:80px}.pace-center-atom-purple .pace-progress:before{background:#6f42c1;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-purple .pace-activity,.pace-center-atom-purple .pace-activity:after,.pace-center-atom-purple .pace-activity:before{border-color:#6f42c1}.pace-center-circle-purple .pace .pace-progress{background:rgba(111,66,193,.8);color:#fff}.pace-center-radar-purple .pace .pace-activity,.pace-center-radar-purple .pace .pace-activity:before{border-color:#6f42c1 transparent transparent}.pace-center-simple-purple .pace{background:#fff;border-color:#6f42c1}.pace-center-simple-purple .pace .pace-progress{background:#6f42c1}.pace-material-purple .pace{color:#6f42c1}.pace-corner-indicator-purple .pace .pace-activity{background:#6f42c1}.pace-corner-indicator-purple .pace .pace-activity:after,.pace-corner-indicator-purple .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-purple .pace .pace-activity:before{border-right-color:rgba(111,66,193,.2);border-left-color:rgba(111,66,193,.2)}.pace-corner-indicator-purple .pace .pace-activity:after{border-top-color:rgba(111,66,193,.2);border-bottom-color:rgba(111,66,193,.2)}.pace-fill-left-purple .pace .pace-progress{background-color:rgba(111,66,193,.2)}.pace-flash-purple .pace .pace-progress{background:#6f42c1}.pace-flash-purple .pace .pace-progress-inner{box-shadow:0 0 10px #6f42c1,0 0 5px #6f42c1}.pace-flash-purple .pace .pace-activity{border-top-color:#6f42c1;border-left-color:#6f42c1}.pace-loading-bar-purple .pace .pace-progress{background:#6f42c1;color:#6f42c1;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-purple .pace .pace-activity{box-shadow:inset 0 0 0 2px #6f42c1,inset 0 0 0 7px #fff}.pace-mac-osx-purple .pace .pace-progress{background-color:#6f42c1;box-shadow:inset -1px 0 #6f42c1,inset 0 -1px #6f42c1,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-purple .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-purple .pace-progress{color:#6f42c1}.pace-pink .pace .pace-progress{background:#ff8acc}.pace-barber-shop-pink .pace{background:#2a2e30}.pace-barber-shop-pink .pace .pace-progress{background:#ff8acc}.pace-barber-shop-pink .pace .pace-activity{background-image:linear-gradient(45deg,rgba(42,46,48,.2) 25%,transparent 0,transparent 50%,rgba(42,46,48,.2) 0,rgba(42,46,48,.2) 75%,transparent 0,transparent)}.pace-big-counter-pink .pace .pace-progress:after{color:rgba(255,138,204,.2)}.pace-bounce-pink .pace .pace-activity{background:#ff8acc}.pace-center-atom-pink .pace-progress{height:100px;width:80px}.pace-center-atom-pink .pace-progress:before{background:#ff8acc;color:#2a2e30;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-pink .pace-activity,.pace-center-atom-pink .pace-activity:after,.pace-center-atom-pink .pace-activity:before{border-color:#ff8acc}.pace-center-circle-pink .pace .pace-progress{background:rgba(255,138,204,.8);color:#2a2e30}.pace-center-radar-pink .pace .pace-activity,.pace-center-radar-pink .pace .pace-activity:before{border-color:#ff8acc transparent transparent}.pace-center-simple-pink .pace{background:#2a2e30;border-color:#ff8acc}.pace-center-simple-pink .pace .pace-progress{background:#ff8acc}.pace-material-pink .pace{color:#ff8acc}.pace-corner-indicator-pink .pace .pace-activity{background:#ff8acc}.pace-corner-indicator-pink .pace .pace-activity:after,.pace-corner-indicator-pink .pace .pace-activity:before{border:5px solid #2a2e30}.pace-corner-indicator-pink .pace .pace-activity:before{border-right-color:rgba(255,138,204,.2);border-left-color:rgba(255,138,204,.2)}.pace-corner-indicator-pink .pace .pace-activity:after{border-top-color:rgba(255,138,204,.2);border-bottom-color:rgba(255,138,204,.2)}.pace-fill-left-pink .pace .pace-progress{background-color:rgba(255,138,204,.2)}.pace-flash-pink .pace .pace-progress{background:#ff8acc}.pace-flash-pink .pace .pace-progress-inner{box-shadow:0 0 10px #ff8acc,0 0 5px #ff8acc}.pace-flash-pink .pace .pace-activity{border-top-color:#ff8acc;border-left-color:#ff8acc}.pace-loading-bar-pink .pace .pace-progress{background:#ff8acc;color:#ff8acc;box-shadow:120px 0 #2a2e30,240px 0 #2a2e30}.pace-loading-bar-pink .pace .pace-activity{box-shadow:inset 0 0 0 2px #ff8acc,inset 0 0 0 7px #2a2e30}.pace-mac-osx-pink .pace .pace-progress{background-color:#ff8acc;box-shadow:inset -1px 0 #ff8acc,inset 0 -1px #ff8acc,inset 0 2px rgba(42,46,48,.5),inset 0 6px rgba(42,46,48,.3)}.pace-mac-osx-pink .pace .pace-activity{background-image:radial-gradient(rgba(42,46,48,.65) 0,rgba(42,46,48,.15) 100%);height:12px}.pace-progress-color-pink .pace-progress{color:#ff8acc}.pace-red .pace .pace-progress{background:#ea5455}.pace-barber-shop-red .pace{background:#fff}.pace-barber-shop-red .pace .pace-progress{background:#ea5455}.pace-barber-shop-red .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-red .pace .pace-progress:after{color:rgba(234,84,85,.2)}.pace-bounce-red .pace .pace-activity{background:#ea5455}.pace-center-atom-red .pace-progress{height:100px;width:80px}.pace-center-atom-red .pace-progress:before{background:#ea5455;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-red .pace-activity,.pace-center-atom-red .pace-activity:after,.pace-center-atom-red .pace-activity:before{border-color:#ea5455}.pace-center-circle-red .pace .pace-progress{background:rgba(234,84,85,.8);color:#fff}.pace-center-radar-red .pace .pace-activity,.pace-center-radar-red .pace .pace-activity:before{border-color:#ea5455 transparent transparent}.pace-center-simple-red .pace{background:#fff;border-color:#ea5455}.pace-center-simple-red .pace .pace-progress{background:#ea5455}.pace-material-red .pace{color:#ea5455}.pace-corner-indicator-red .pace .pace-activity{background:#ea5455}.pace-corner-indicator-red .pace .pace-activity:after,.pace-corner-indicator-red .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-red .pace .pace-activity:before{border-right-color:rgba(234,84,85,.2);border-left-color:rgba(234,84,85,.2)}.pace-corner-indicator-red .pace .pace-activity:after{border-top-color:rgba(234,84,85,.2);border-bottom-color:rgba(234,84,85,.2)}.pace-fill-left-red .pace .pace-progress{background-color:rgba(234,84,85,.2)}.pace-flash-red .pace .pace-progress{background:#ea5455}.pace-flash-red .pace .pace-progress-inner{box-shadow:0 0 10px #ea5455,0 0 5px #ea5455}.pace-flash-red .pace .pace-activity{border-top-color:#ea5455;border-left-color:#ea5455}.pace-loading-bar-red .pace .pace-progress{background:#ea5455;color:#ea5455;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-red .pace .pace-activity{box-shadow:inset 0 0 0 2px #ea5455,inset 0 0 0 7px #fff}.pace-mac-osx-red .pace .pace-progress{background-color:#ea5455;box-shadow:inset -1px 0 #ea5455,inset 0 -1px #ea5455,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-red .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-red .pace-progress{color:#ea5455}.pace-orange .pace .pace-progress{background:#dda451}.pace-barber-shop-orange .pace{background:#2a2e30}.pace-barber-shop-orange .pace .pace-progress{background:#dda451}.pace-barber-shop-orange .pace .pace-activity{background-image:linear-gradient(45deg,rgba(42,46,48,.2) 25%,transparent 0,transparent 50%,rgba(42,46,48,.2) 0,rgba(42,46,48,.2) 75%,transparent 0,transparent)}.pace-big-counter-orange .pace .pace-progress:after{color:rgba(221,164,81,.2)}.pace-bounce-orange .pace .pace-activity{background:#dda451}.pace-center-atom-orange .pace-progress{height:100px;width:80px}.pace-center-atom-orange .pace-progress:before{background:#dda451;color:#2a2e30;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-orange .pace-activity,.pace-center-atom-orange .pace-activity:after,.pace-center-atom-orange .pace-activity:before{border-color:#dda451}.pace-center-circle-orange .pace .pace-progress{background:rgba(221,164,81,.8);color:#2a2e30}.pace-center-radar-orange .pace .pace-activity,.pace-center-radar-orange .pace .pace-activity:before{border-color:#dda451 transparent transparent}.pace-center-simple-orange .pace{background:#2a2e30;border-color:#dda451}.pace-center-simple-orange .pace .pace-progress{background:#dda451}.pace-material-orange .pace{color:#dda451}.pace-corner-indicator-orange .pace .pace-activity{background:#dda451}.pace-corner-indicator-orange .pace .pace-activity:after,.pace-corner-indicator-orange .pace .pace-activity:before{border:5px solid #2a2e30}.pace-corner-indicator-orange .pace .pace-activity:before{border-right-color:rgba(221,164,81,.2);border-left-color:rgba(221,164,81,.2)}.pace-corner-indicator-orange .pace .pace-activity:after{border-top-color:rgba(221,164,81,.2);border-bottom-color:rgba(221,164,81,.2)}.pace-fill-left-orange .pace .pace-progress{background-color:rgba(221,164,81,.2)}.pace-flash-orange .pace .pace-progress{background:#dda451}.pace-flash-orange .pace .pace-progress-inner{box-shadow:0 0 10px #dda451,0 0 5px #dda451}.pace-flash-orange .pace .pace-activity{border-top-color:#dda451;border-left-color:#dda451}.pace-loading-bar-orange .pace .pace-progress{background:#dda451;color:#dda451;box-shadow:120px 0 #2a2e30,240px 0 #2a2e30}.pace-loading-bar-orange .pace .pace-activity{box-shadow:inset 0 0 0 2px #dda451,inset 0 0 0 7px #2a2e30}.pace-mac-osx-orange .pace .pace-progress{background-color:#dda451;box-shadow:inset -1px 0 #dda451,inset 0 -1px #dda451,inset 0 2px rgba(42,46,48,.5),inset 0 6px rgba(42,46,48,.3)}.pace-mac-osx-orange .pace .pace-activity{background-image:radial-gradient(rgba(42,46,48,.65) 0,rgba(42,46,48,.15) 100%);height:12px}.pace-progress-color-orange .pace-progress{color:#dda451}.pace-yellow .pace .pace-progress{background:#edc30e}.pace-barber-shop-yellow .pace{background:#2a2e30}.pace-barber-shop-yellow .pace .pace-progress{background:#edc30e}.pace-barber-shop-yellow .pace .pace-activity{background-image:linear-gradient(45deg,rgba(42,46,48,.2) 25%,transparent 0,transparent 50%,rgba(42,46,48,.2) 0,rgba(42,46,48,.2) 75%,transparent 0,transparent)}.pace-big-counter-yellow .pace .pace-progress:after{color:rgba(237,195,14,.2)}.pace-bounce-yellow .pace .pace-activity{background:#edc30e}.pace-center-atom-yellow .pace-progress{height:100px;width:80px}.pace-center-atom-yellow .pace-progress:before{background:#edc30e;color:#2a2e30;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-yellow .pace-activity,.pace-center-atom-yellow .pace-activity:after,.pace-center-atom-yellow .pace-activity:before{border-color:#edc30e}.pace-center-circle-yellow .pace .pace-progress{background:rgba(237,195,14,.8);color:#2a2e30}.pace-center-radar-yellow .pace .pace-activity,.pace-center-radar-yellow .pace .pace-activity:before{border-color:#edc30e transparent transparent}.pace-center-simple-yellow .pace{background:#2a2e30;border-color:#edc30e}.pace-center-simple-yellow .pace .pace-progress{background:#edc30e}.pace-material-yellow .pace{color:#edc30e}.pace-corner-indicator-yellow .pace .pace-activity{background:#edc30e}.pace-corner-indicator-yellow .pace .pace-activity:after,.pace-corner-indicator-yellow .pace .pace-activity:before{border:5px solid #2a2e30}.pace-corner-indicator-yellow .pace .pace-activity:before{border-right-color:rgba(237,195,14,.2);border-left-color:rgba(237,195,14,.2)}.pace-corner-indicator-yellow .pace .pace-activity:after{border-top-color:rgba(237,195,14,.2);border-bottom-color:rgba(237,195,14,.2)}.pace-fill-left-yellow .pace .pace-progress{background-color:rgba(237,195,14,.2)}.pace-flash-yellow .pace .pace-progress{background:#edc30e}.pace-flash-yellow .pace .pace-progress-inner{box-shadow:0 0 10px #edc30e,0 0 5px #edc30e}.pace-flash-yellow .pace .pace-activity{border-top-color:#edc30e;border-left-color:#edc30e}.pace-loading-bar-yellow .pace .pace-progress{background:#edc30e;color:#edc30e;box-shadow:120px 0 #2a2e30,240px 0 #2a2e30}.pace-loading-bar-yellow .pace .pace-activity{box-shadow:inset 0 0 0 2px #edc30e,inset 0 0 0 7px #2a2e30}.pace-mac-osx-yellow .pace .pace-progress{background-color:#edc30e;box-shadow:inset -1px 0 #edc30e,inset 0 -1px #edc30e,inset 0 2px rgba(42,46,48,.5),inset 0 6px rgba(42,46,48,.3)}.pace-mac-osx-yellow .pace .pace-activity{background-image:radial-gradient(rgba(42,46,48,.65) 0,rgba(42,46,48,.15) 100%);height:12px}.pace-progress-color-yellow .pace-progress{color:#edc30e}.pace-green .pace .pace-progress{background:#21b978}.pace-barber-shop-green .pace{background:#fff}.pace-barber-shop-green .pace .pace-progress{background:#21b978}.pace-barber-shop-green .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-green .pace .pace-progress:after{color:rgba(33,185,120,.2)}.pace-bounce-green .pace .pace-activity{background:#21b978}.pace-center-atom-green .pace-progress{height:100px;width:80px}.pace-center-atom-green .pace-progress:before{background:#21b978;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-green .pace-activity,.pace-center-atom-green .pace-activity:after,.pace-center-atom-green .pace-activity:before{border-color:#21b978}.pace-center-circle-green .pace .pace-progress{background:rgba(33,185,120,.8);color:#fff}.pace-center-radar-green .pace .pace-activity,.pace-center-radar-green .pace .pace-activity:before{border-color:#21b978 transparent transparent}.pace-center-simple-green .pace{background:#fff;border-color:#21b978}.pace-center-simple-green .pace .pace-progress{background:#21b978}.pace-material-green .pace{color:#21b978}.pace-corner-indicator-green .pace .pace-activity{background:#21b978}.pace-corner-indicator-green .pace .pace-activity:after,.pace-corner-indicator-green .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-green .pace .pace-activity:before{border-right-color:rgba(33,185,120,.2);border-left-color:rgba(33,185,120,.2)}.pace-corner-indicator-green .pace .pace-activity:after{border-top-color:rgba(33,185,120,.2);border-bottom-color:rgba(33,185,120,.2)}.pace-fill-left-green .pace .pace-progress{background-color:rgba(33,185,120,.2)}.pace-flash-green .pace .pace-progress{background:#21b978}.pace-flash-green .pace .pace-progress-inner{box-shadow:0 0 10px #21b978,0 0 5px #21b978}.pace-flash-green .pace .pace-activity{border-top-color:#21b978;border-left-color:#21b978}.pace-loading-bar-green .pace .pace-progress{background:#21b978;color:#21b978;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-green .pace .pace-activity{box-shadow:inset 0 0 0 2px #21b978,inset 0 0 0 7px #fff}.pace-mac-osx-green .pace .pace-progress{background-color:#21b978;box-shadow:inset -1px 0 #21b978,inset 0 -1px #21b978,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-green .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-green .pace-progress{color:#21b978}.pace-teal .pace .pace-progress{background:#20c997}.pace-barber-shop-teal .pace{background:#fff}.pace-barber-shop-teal .pace .pace-progress{background:#20c997}.pace-barber-shop-teal .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-teal .pace .pace-progress:after{color:rgba(32,201,151,.2)}.pace-bounce-teal .pace .pace-activity{background:#20c997}.pace-center-atom-teal .pace-progress{height:100px;width:80px}.pace-center-atom-teal .pace-progress:before{background:#20c997;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-teal .pace-activity,.pace-center-atom-teal .pace-activity:after,.pace-center-atom-teal .pace-activity:before{border-color:#20c997}.pace-center-circle-teal .pace .pace-progress{background:rgba(32,201,151,.8);color:#fff}.pace-center-radar-teal .pace .pace-activity,.pace-center-radar-teal .pace .pace-activity:before{border-color:#20c997 transparent transparent}.pace-center-simple-teal .pace{background:#fff;border-color:#20c997}.pace-center-simple-teal .pace .pace-progress{background:#20c997}.pace-material-teal .pace{color:#20c997}.pace-corner-indicator-teal .pace .pace-activity{background:#20c997}.pace-corner-indicator-teal .pace .pace-activity:after,.pace-corner-indicator-teal .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-teal .pace .pace-activity:before{border-right-color:rgba(32,201,151,.2);border-left-color:rgba(32,201,151,.2)}.pace-corner-indicator-teal .pace .pace-activity:after{border-top-color:rgba(32,201,151,.2);border-bottom-color:rgba(32,201,151,.2)}.pace-fill-left-teal .pace .pace-progress{background-color:rgba(32,201,151,.2)}.pace-flash-teal .pace .pace-progress{background:#20c997}.pace-flash-teal .pace .pace-progress-inner{box-shadow:0 0 10px #20c997,0 0 5px #20c997}.pace-flash-teal .pace .pace-activity{border-top-color:#20c997;border-left-color:#20c997}.pace-loading-bar-teal .pace .pace-progress{background:#20c997;color:#20c997;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-teal .pace .pace-activity{box-shadow:inset 0 0 0 2px #20c997,inset 0 0 0 7px #fff}.pace-mac-osx-teal .pace .pace-progress{background-color:#20c997;box-shadow:inset -1px 0 #20c997,inset 0 -1px #20c997,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-teal .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-teal .pace-progress{color:#20c997}.pace-cyan .pace .pace-progress{background:#7367f0}.pace-barber-shop-cyan .pace{background:#fff}.pace-barber-shop-cyan .pace .pace-progress{background:#7367f0}.pace-barber-shop-cyan .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-cyan .pace .pace-progress:after{color:rgba(115,103,240,.2)}.pace-bounce-cyan .pace .pace-activity{background:#7367f0}.pace-center-atom-cyan .pace-progress{height:100px;width:80px}.pace-center-atom-cyan .pace-progress:before{background:#7367f0;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-cyan .pace-activity,.pace-center-atom-cyan .pace-activity:after,.pace-center-atom-cyan .pace-activity:before{border-color:#7367f0}.pace-center-circle-cyan .pace .pace-progress{background:rgba(115,103,240,.8);color:#fff}.pace-center-radar-cyan .pace .pace-activity,.pace-center-radar-cyan .pace .pace-activity:before{border-color:#7367f0 transparent transparent}.pace-center-simple-cyan .pace{background:#fff;border-color:#7367f0}.pace-center-simple-cyan .pace .pace-progress{background:#7367f0}.pace-material-cyan .pace{color:#7367f0}.pace-corner-indicator-cyan .pace .pace-activity{background:#7367f0}.pace-corner-indicator-cyan .pace .pace-activity:after,.pace-corner-indicator-cyan .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-cyan .pace .pace-activity:before{border-right-color:rgba(115,103,240,.2);border-left-color:rgba(115,103,240,.2)}.pace-corner-indicator-cyan .pace .pace-activity:after{border-top-color:rgba(115,103,240,.2);border-bottom-color:rgba(115,103,240,.2)}.pace-fill-left-cyan .pace .pace-progress{background-color:rgba(115,103,240,.2)}.pace-flash-cyan .pace .pace-progress{background:#7367f0}.pace-flash-cyan .pace .pace-progress-inner{box-shadow:0 0 10px #7367f0,0 0 5px #7367f0}.pace-flash-cyan .pace .pace-activity{border-top-color:#7367f0;border-left-color:#7367f0}.pace-loading-bar-cyan .pace .pace-progress{background:#7367f0;color:#7367f0;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-cyan .pace .pace-activity{box-shadow:inset 0 0 0 2px #7367f0,inset 0 0 0 7px #fff}.pace-mac-osx-cyan .pace .pace-progress{background-color:#7367f0;box-shadow:inset -1px 0 #7367f0,inset 0 -1px #7367f0,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-cyan .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-cyan .pace-progress{color:#7367f0}.pace-white .pace .pace-progress{background:#fff}.pace-barber-shop-white .pace{background:#2a2e30}.pace-barber-shop-white .pace .pace-progress{background:#fff}.pace-barber-shop-white .pace .pace-activity{background-image:linear-gradient(45deg,rgba(42,46,48,.2) 25%,transparent 0,transparent 50%,rgba(42,46,48,.2) 0,rgba(42,46,48,.2) 75%,transparent 0,transparent)}.pace-big-counter-white .pace .pace-progress:after{color:hsla(0,0%,100%,.2)}.pace-bounce-white .pace .pace-activity{background:#fff}.pace-center-atom-white .pace-progress{height:100px;width:80px}.pace-center-atom-white .pace-progress:before{background:#fff;color:#2a2e30;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-white .pace-activity,.pace-center-atom-white .pace-activity:after,.pace-center-atom-white .pace-activity:before{border-color:#fff}.pace-center-circle-white .pace .pace-progress{background:hsla(0,0%,100%,.8);color:#2a2e30}.pace-center-radar-white .pace .pace-activity,.pace-center-radar-white .pace .pace-activity:before{border-color:#fff transparent transparent}.pace-center-simple-white .pace{background:#2a2e30;border-color:#fff}.pace-center-simple-white .pace .pace-progress{background:#fff}.pace-material-white .pace{color:#fff}.pace-corner-indicator-white .pace .pace-activity{background:#fff}.pace-corner-indicator-white .pace .pace-activity:after,.pace-corner-indicator-white .pace .pace-activity:before{border:5px solid #2a2e30}.pace-corner-indicator-white .pace .pace-activity:before{border-right-color:hsla(0,0%,100%,.2);border-left-color:hsla(0,0%,100%,.2)}.pace-corner-indicator-white .pace .pace-activity:after{border-top-color:hsla(0,0%,100%,.2);border-bottom-color:hsla(0,0%,100%,.2)}.pace-fill-left-white .pace .pace-progress{background-color:hsla(0,0%,100%,.2)}.pace-flash-white .pace .pace-progress{background:#fff}.pace-flash-white .pace .pace-progress-inner{box-shadow:0 0 10px #fff,0 0 5px #fff}.pace-flash-white .pace .pace-activity{border-top-color:#fff;border-left-color:#fff}.pace-loading-bar-white .pace .pace-progress{background:#fff;color:#fff;box-shadow:120px 0 #2a2e30,240px 0 #2a2e30}.pace-loading-bar-white .pace .pace-activity{box-shadow:inset 0 0 0 2px #fff,inset 0 0 0 7px #2a2e30}.pace-mac-osx-white .pace .pace-progress{background-color:#fff;box-shadow:inset -1px 0 #fff,inset 0 -1px #fff,inset 0 2px rgba(42,46,48,.5),inset 0 6px rgba(42,46,48,.3)}.pace-mac-osx-white .pace .pace-activity{background-image:radial-gradient(rgba(42,46,48,.65) 0,rgba(42,46,48,.15) 100%);height:12px}.pace-progress-color-white .pace-progress{color:#fff}.pace-gray .pace .pace-progress{background:#b8c2cc}.pace-barber-shop-gray .pace{background:#2a2e30}.pace-barber-shop-gray .pace .pace-progress{background:#b8c2cc}.pace-barber-shop-gray .pace .pace-activity{background-image:linear-gradient(45deg,rgba(42,46,48,.2) 25%,transparent 0,transparent 50%,rgba(42,46,48,.2) 0,rgba(42,46,48,.2) 75%,transparent 0,transparent)}.pace-big-counter-gray .pace .pace-progress:after{color:rgba(184,194,204,.2)}.pace-bounce-gray .pace .pace-activity{background:#b8c2cc}.pace-center-atom-gray .pace-progress{height:100px;width:80px}.pace-center-atom-gray .pace-progress:before{background:#b8c2cc;color:#2a2e30;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-gray .pace-activity,.pace-center-atom-gray .pace-activity:after,.pace-center-atom-gray .pace-activity:before{border-color:#b8c2cc}.pace-center-circle-gray .pace .pace-progress{background:rgba(184,194,204,.8);color:#2a2e30}.pace-center-radar-gray .pace .pace-activity,.pace-center-radar-gray .pace .pace-activity:before{border-color:#b8c2cc transparent transparent}.pace-center-simple-gray .pace{background:#2a2e30;border-color:#b8c2cc}.pace-center-simple-gray .pace .pace-progress{background:#b8c2cc}.pace-material-gray .pace{color:#b8c2cc}.pace-corner-indicator-gray .pace .pace-activity{background:#b8c2cc}.pace-corner-indicator-gray .pace .pace-activity:after,.pace-corner-indicator-gray .pace .pace-activity:before{border:5px solid #2a2e30}.pace-corner-indicator-gray .pace .pace-activity:before{border-right-color:rgba(184,194,204,.2);border-left-color:rgba(184,194,204,.2)}.pace-corner-indicator-gray .pace .pace-activity:after{border-top-color:rgba(184,194,204,.2);border-bottom-color:rgba(184,194,204,.2)}.pace-fill-left-gray .pace .pace-progress{background-color:rgba(184,194,204,.2)}.pace-flash-gray .pace .pace-progress{background:#b8c2cc}.pace-flash-gray .pace .pace-progress-inner{box-shadow:0 0 10px #b8c2cc,0 0 5px #b8c2cc}.pace-flash-gray .pace .pace-activity{border-top-color:#b8c2cc;border-left-color:#b8c2cc}.pace-loading-bar-gray .pace .pace-progress{background:#b8c2cc;color:#b8c2cc;box-shadow:120px 0 #2a2e30,240px 0 #2a2e30}.pace-loading-bar-gray .pace .pace-activity{box-shadow:inset 0 0 0 2px #b8c2cc,inset 0 0 0 7px #2a2e30}.pace-mac-osx-gray .pace .pace-progress{background-color:#b8c2cc;box-shadow:inset -1px 0 #b8c2cc,inset 0 -1px #b8c2cc,inset 0 2px rgba(42,46,48,.5),inset 0 6px rgba(42,46,48,.3)}.pace-mac-osx-gray .pace .pace-activity{background-image:radial-gradient(rgba(42,46,48,.65) 0,rgba(42,46,48,.15) 100%);height:12px}.pace-progress-color-gray .pace-progress{color:#b8c2cc}.pace-gray-dark .pace .pace-progress{background:#1e1e1e}.pace-barber-shop-gray-dark .pace{background:#fff}.pace-barber-shop-gray-dark .pace .pace-progress{background:#1e1e1e}.pace-barber-shop-gray-dark .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-gray-dark .pace .pace-progress:after{color:rgba(30,30,30,.2)}.pace-bounce-gray-dark .pace .pace-activity{background:#1e1e1e}.pace-center-atom-gray-dark .pace-progress{height:100px;width:80px}.pace-center-atom-gray-dark .pace-progress:before{background:#1e1e1e;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-gray-dark .pace-activity,.pace-center-atom-gray-dark .pace-activity:after,.pace-center-atom-gray-dark .pace-activity:before{border-color:#1e1e1e}.pace-center-circle-gray-dark .pace .pace-progress{background:rgba(30,30,30,.8);color:#fff}.pace-center-radar-gray-dark .pace .pace-activity,.pace-center-radar-gray-dark .pace .pace-activity:before{border-color:#1e1e1e transparent transparent}.pace-center-simple-gray-dark .pace{background:#fff;border-color:#1e1e1e}.pace-center-simple-gray-dark .pace .pace-progress{background:#1e1e1e}.pace-material-gray-dark .pace{color:#1e1e1e}.pace-corner-indicator-gray-dark .pace .pace-activity{background:#1e1e1e}.pace-corner-indicator-gray-dark .pace .pace-activity:after,.pace-corner-indicator-gray-dark .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-gray-dark .pace .pace-activity:before{border-right-color:rgba(30,30,30,.2);border-left-color:rgba(30,30,30,.2)}.pace-corner-indicator-gray-dark .pace .pace-activity:after{border-top-color:rgba(30,30,30,.2);border-bottom-color:rgba(30,30,30,.2)}.pace-fill-left-gray-dark .pace .pace-progress{background-color:rgba(30,30,30,.2)}.pace-flash-gray-dark .pace .pace-progress{background:#1e1e1e}.pace-flash-gray-dark .pace .pace-progress-inner{box-shadow:0 0 10px #1e1e1e,0 0 5px #1e1e1e}.pace-flash-gray-dark .pace .pace-activity{border-top-color:#1e1e1e;border-left-color:#1e1e1e}.pace-loading-bar-gray-dark .pace .pace-progress{background:#1e1e1e;color:#1e1e1e;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-gray-dark .pace .pace-activity{box-shadow:inset 0 0 0 2px #1e1e1e,inset 0 0 0 7px #fff}.pace-mac-osx-gray-dark .pace .pace-progress{background-color:#1e1e1e;box-shadow:inset -1px 0 #1e1e1e,inset 0 -1px #1e1e1e,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-gray-dark .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-gray-dark .pace-progress{color:#1e1e1e}.jqstooltip{height:auto!important;padding:5px!important;width:auto!important}.connectedSortable{min-height:100px}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sort-highlight{background:#babfc7;border:1px dashed #dae1e7;margin-bottom:10px}.chart{overflow:hidden;position:relative}.border-transparent{border-color:transparent!important}.description-block{display:block;margin:10px 0;text-align:center}.description-block.margin-bottom{margin-bottom:25px}.description-block>.description-header{font-size:16px;font-weight:600;margin:0;padding:0}.description-block>.description-text{text-transform:uppercase}.description-block .description-icon{font-size:16px}.list-group-unbordered>.list-group-item{border-left:0;border-radius:0;border-right:0;padding-left:0;padding-right:0}.list-header{color:#b8c2cc;font-size:15px;font-weight:700;padding:10px 4px}.list-seperator{background:rgba(34,41,47,.125);height:1px;margin:15px 0 9px}.list-link>a{color:#b8c2cc;padding:4px}.list-link>a:hover{color:#2a2e30}.user-block{float:left}.user-block img{float:left;height:40px;width:40px}.user-block .comment,.user-block .description,.user-block .username{display:block;margin-left:50px}.user-block .username{font-size:16px;font-weight:600;margin-top:-1px}.user-block .description{color:#b8c2cc;font-size:13px;margin-top:-3px}.user-block.user-block-sm img{width:1.875rem;height:1.875rem}.user-block.user-block-sm .comment,.user-block.user-block-sm .description,.user-block.user-block-sm .username{margin-left:40px}.user-block.user-block-sm .username{font-size:14px}.img-lg,.img-md,.img-sm{float:left}.img-sm{height:1.875rem;width:1.875rem}.img-sm+.img-push{margin-left:2.5rem}.img-md{width:3.75rem;height:3.75rem}.img-md+.img-push{margin-left:4.375rem}.img-lg{width:6.25rem;height:6.25rem}.img-lg+.img-push{margin-left:6.875rem}.img-bordered{border:3px solid #adb5bd;padding:3px}.img-bordered-sm{border:2px solid #adb5bd;padding:2px}.img-rounded{border-radius:.5rem}.img-circle{border-radius:50%}.img-size-32,.img-size-50,.img-size-64{height:auto}.img-size-64{width:64px}.img-size-50{width:50px}.img-size-32{width:32px}.size-32,.size-40,.size-50{display:block;text-align:center}.size-32{height:32px;line-height:32px;width:32px}.size-40{height:40px;line-height:40px;width:40px}.size-50{height:50px;line-height:50px;width:50px}.attachment-block{background:#babfc7;border:1px solid rgba(34,41,47,.125);margin-bottom:10px;padding:5px}.attachment-block .attachment-img{float:left;height:auto;max-height:100px;max-width:100px}.attachment-block .attachment-pushed{margin-left:110px}.attachment-block .attachment-heading{margin:0}.attachment-block .attachment-text{color:#4e5154}.card>.loading-img,.card>.overlay,.info-box>.loading-img,.info-box>.overlay,.overlay-wrapper>.loading-img,.overlay-wrapper>.overlay,.small-box>.loading-img,.small-box>.overlay{height:100%;left:0;position:absolute;top:0;width:100%}.card .overlay,.info-box .overlay,.overlay-wrapper .overlay,.small-box .overlay{border-radius:.5rem;align-items:center;background:hsla(0,0%,100%,.7);display:flex;justify-content:center;z-index:50}.card .overlay>.fa,.card .overlay>.fab,.card .overlay>.far,.card .overlay>.fas,.card .overlay>.glyphicon,.card .overlay>.ion,.info-box .overlay>.fa,.info-box .overlay>.fab,.info-box .overlay>.far,.info-box .overlay>.fas,.info-box .overlay>.glyphicon,.info-box .overlay>.ion,.overlay-wrapper .overlay>.fa,.overlay-wrapper .overlay>.fab,.overlay-wrapper .overlay>.far,.overlay-wrapper .overlay>.fas,.overlay-wrapper .overlay>.glyphicon,.overlay-wrapper .overlay>.ion,.small-box .overlay>.fa,.small-box .overlay>.fab,.small-box .overlay>.far,.small-box .overlay>.fas,.small-box .overlay>.glyphicon,.small-box .overlay>.ion{color:#1e1e1e}.card .overlay.dark,.info-box .overlay.dark,.overlay-wrapper .overlay.dark,.small-box .overlay.dark{background:rgba(34,41,47,.5)}.card .overlay.dark>.fa,.card .overlay.dark>.fab,.card .overlay.dark>.far,.card .overlay.dark>.fas,.card .overlay.dark>.glyphicon,.card .overlay.dark>.ion,.info-box .overlay.dark>.fa,.info-box .overlay.dark>.fab,.info-box .overlay.dark>.far,.info-box .overlay.dark>.fas,.info-box .overlay.dark>.glyphicon,.info-box .overlay.dark>.ion,.overlay-wrapper .overlay.dark>.fa,.overlay-wrapper .overlay.dark>.fab,.overlay-wrapper .overlay.dark>.far,.overlay-wrapper .overlay.dark>.fas,.overlay-wrapper .overlay.dark>.glyphicon,.overlay-wrapper .overlay.dark>.ion,.small-box .overlay.dark>.fa,.small-box .overlay.dark>.fab,.small-box .overlay.dark>.far,.small-box .overlay.dark>.fas,.small-box .overlay.dark>.glyphicon,.small-box .overlay.dark>.ion{color:#636363}.tab-pane>.overlay-wrapper{position:relative}.tab-pane>.overlay-wrapper>.overlay{border-top-left-radius:0;border-top-right-radius:0;flex-direction:column;margin-top:-1.25rem;margin-left:-1.25rem;height:calc(100% + 2.5rem);width:calc(100% + 2.5rem)}.tab-pane>.overlay-wrapper>.overlay.dark{color:#fff}.ribbon-wrapper{height:70px;overflow:hidden;position:absolute;right:-2px;top:-2px;width:70px;z-index:10}.ribbon-wrapper.ribbon-lg{height:120px;width:120px}.ribbon-wrapper.ribbon-lg .ribbon{right:0;top:26px;width:160px}.ribbon-wrapper.ribbon-xl{height:180px;width:180px}.ribbon-wrapper.ribbon-xl .ribbon{right:4px;top:47px;width:240px}.ribbon-wrapper .ribbon{box-shadow:0 0 3px rgba(34,41,47,.3);font-size:.8rem;line-height:100%;padding:.375rem 0;position:relative;right:-2px;text-align:center;text-shadow:0 -1px 0 rgba(34,41,47,.4);text-transform:uppercase;top:10px;transform:rotate(45deg);width:90px}.ribbon-wrapper .ribbon:after,.ribbon-wrapper .ribbon:before{border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #9e9e9e;bottom:-3px;content:"";position:absolute}.ribbon-wrapper .ribbon:before{left:0}.ribbon-wrapper .ribbon:after{right:0}.back-to-top{bottom:1.25rem;position:fixed;right:1.25rem;z-index:1032}.back-to-top:focus{box-shadow:none}pre{padding:.75rem}blockquote{background:#fff;border-left:.7rem solid #4e9876;margin:1.5em .7rem;padding:.5em .7rem}.box blockquote{background:#ededed}blockquote p:last-child{margin-bottom:0}blockquote h1,blockquote h2,blockquote h3,blockquote h4,blockquote h5,blockquote h6{color:#4e9876;font-size:1.25rem;font-weight:600}blockquote.quote-primary{border-color:#4e9876}blockquote.quote-primary h1,blockquote.quote-primary h2,blockquote.quote-primary h3,blockquote.quote-primary h4,blockquote.quote-primary h5,blockquote.quote-primary h6{color:#4e9876}blockquote.quote-secondary{border-color:#b8c2cc}blockquote.quote-secondary h1,blockquote.quote-secondary h2,blockquote.quote-secondary h3,blockquote.quote-secondary h4,blockquote.quote-secondary h5,blockquote.quote-secondary h6{color:#b8c2cc}blockquote.quote-success{border-color:#21b978}blockquote.quote-success h1,blockquote.quote-success h2,blockquote.quote-success h3,blockquote.quote-success h4,blockquote.quote-success h5,blockquote.quote-success h6{color:#21b978}blockquote.quote-info{border-color:#4277cf}blockquote.quote-info h1,blockquote.quote-info h2,blockquote.quote-info h3,blockquote.quote-info h4,blockquote.quote-info h5,blockquote.quote-info h6{color:#4277cf}blockquote.quote-warning{border-color:#dda451}blockquote.quote-warning h1,blockquote.quote-warning h2,blockquote.quote-warning h3,blockquote.quote-warning h4,blockquote.quote-warning h5,blockquote.quote-warning h6{color:#dda451}blockquote.quote-danger{border-color:#ea5455}blockquote.quote-danger h1,blockquote.quote-danger h2,blockquote.quote-danger h3,blockquote.quote-danger h4,blockquote.quote-danger h5,blockquote.quote-danger h6{color:#ea5455}blockquote.quote-light{border-color:#f7f7f9}blockquote.quote-light h1,blockquote.quote-light h2,blockquote.quote-light h3,blockquote.quote-light h4,blockquote.quote-light h5,blockquote.quote-light h6{color:#f7f7f9}blockquote.quote-dark{border-color:#22292f}blockquote.quote-dark h1,blockquote.quote-dark h2,blockquote.quote-dark h3,blockquote.quote-dark h4,blockquote.quote-dark h5,blockquote.quote-dark h6{color:#22292f}blockquote.quote-lightblue{border-color:#3c8dbc}blockquote.quote-lightblue h1,blockquote.quote-lightblue h2,blockquote.quote-lightblue h3,blockquote.quote-lightblue h4,blockquote.quote-lightblue h5,blockquote.quote-lightblue h6{color:#3c8dbc}blockquote.quote-navy{border-color:#001f3f}blockquote.quote-navy h1,blockquote.quote-navy h2,blockquote.quote-navy h3,blockquote.quote-navy h4,blockquote.quote-navy h5,blockquote.quote-navy h6{color:#001f3f}blockquote.quote-olive{border-color:#3d9970}blockquote.quote-olive h1,blockquote.quote-olive h2,blockquote.quote-olive h3,blockquote.quote-olive h4,blockquote.quote-olive h5,blockquote.quote-olive h6{color:#3d9970}blockquote.quote-lime{border-color:#01ff70}blockquote.quote-lime h1,blockquote.quote-lime h2,blockquote.quote-lime h3,blockquote.quote-lime h4,blockquote.quote-lime h5,blockquote.quote-lime h6{color:#01ff70}blockquote.quote-fuchsia{border-color:#f012be}blockquote.quote-fuchsia h1,blockquote.quote-fuchsia h2,blockquote.quote-fuchsia h3,blockquote.quote-fuchsia h4,blockquote.quote-fuchsia h5,blockquote.quote-fuchsia h6{color:#f012be}blockquote.quote-maroon{border-color:#d81b60}blockquote.quote-maroon h1,blockquote.quote-maroon h2,blockquote.quote-maroon h3,blockquote.quote-maroon h4,blockquote.quote-maroon h5,blockquote.quote-maroon h6{color:#d81b60}blockquote.quote-blue{border-color:#3085d6}blockquote.quote-blue h1,blockquote.quote-blue h2,blockquote.quote-blue h3,blockquote.quote-blue h4,blockquote.quote-blue h5,blockquote.quote-blue h6{color:#3085d6}blockquote.quote-indigo{border-color:#5c6bc6}blockquote.quote-indigo h1,blockquote.quote-indigo h2,blockquote.quote-indigo h3,blockquote.quote-indigo h4,blockquote.quote-indigo h5,blockquote.quote-indigo h6{color:#5c6bc6}blockquote.quote-purple{border-color:#6f42c1}blockquote.quote-purple h1,blockquote.quote-purple h2,blockquote.quote-purple h3,blockquote.quote-purple h4,blockquote.quote-purple h5,blockquote.quote-purple h6{color:#6f42c1}blockquote.quote-pink{border-color:#ff8acc}blockquote.quote-pink h1,blockquote.quote-pink h2,blockquote.quote-pink h3,blockquote.quote-pink h4,blockquote.quote-pink h5,blockquote.quote-pink h6{color:#ff8acc}blockquote.quote-red{border-color:#ea5455}blockquote.quote-red h1,blockquote.quote-red h2,blockquote.quote-red h3,blockquote.quote-red h4,blockquote.quote-red h5,blockquote.quote-red h6{color:#ea5455}blockquote.quote-orange{border-color:#dda451}blockquote.quote-orange h1,blockquote.quote-orange h2,blockquote.quote-orange h3,blockquote.quote-orange h4,blockquote.quote-orange h5,blockquote.quote-orange h6{color:#dda451}blockquote.quote-yellow{border-color:#edc30e}blockquote.quote-yellow h1,blockquote.quote-yellow h2,blockquote.quote-yellow h3,blockquote.quote-yellow h4,blockquote.quote-yellow h5,blockquote.quote-yellow h6{color:#edc30e}blockquote.quote-green{border-color:#21b978}blockquote.quote-green h1,blockquote.quote-green h2,blockquote.quote-green h3,blockquote.quote-green h4,blockquote.quote-green h5,blockquote.quote-green h6{color:#21b978}blockquote.quote-teal{border-color:#20c997}blockquote.quote-teal h1,blockquote.quote-teal h2,blockquote.quote-teal h3,blockquote.quote-teal h4,blockquote.quote-teal h5,blockquote.quote-teal h6{color:#20c997}blockquote.quote-cyan{border-color:#7367f0}blockquote.quote-cyan h1,blockquote.quote-cyan h2,blockquote.quote-cyan h3,blockquote.quote-cyan h4,blockquote.quote-cyan h5,blockquote.quote-cyan h6{color:#7367f0}blockquote.quote-white{border-color:#fff}blockquote.quote-white h1,blockquote.quote-white h2,blockquote.quote-white h3,blockquote.quote-white h4,blockquote.quote-white h5,blockquote.quote-white h6{color:#fff}blockquote.quote-gray{border-color:#b8c2cc}blockquote.quote-gray h1,blockquote.quote-gray h2,blockquote.quote-gray h3,blockquote.quote-gray h4,blockquote.quote-gray h5,blockquote.quote-gray h6{color:#b8c2cc}blockquote.quote-gray-dark{border-color:#1e1e1e}blockquote.quote-gray-dark h1,blockquote.quote-gray-dark h2,blockquote.quote-gray-dark h3,blockquote.quote-gray-dark h4,blockquote.quote-gray-dark h5,blockquote.quote-gray-dark h6{color:#1e1e1e}.tab-custom-content{border-top:1px solid #dae1e7;margin-top:.5rem;padding-top:.5rem}.nav+.tab-custom-content{border-top:none;border-bottom:1px solid #dae1e7;margin-top:0;margin-bottom:.5rem;padding-bottom:.5rem}.badge-btn{border-radius:.15rem;font-size:.75rem;font-weight:400;padding:.25rem .5rem}.badge-btn.badge-pill{padding:.375rem .6rem}@media print{.content-header,.main-header,.main-sidebar,.no-print{display:none!important}.content-wrapper,.main-footer{transform:translate(0);margin-left:0!important;min-height:0!important}.layout-fixed .content-wrapper{padding-top:0!important}.invoice{border:0;margin:0;padding:0;width:100%}.invoice-col{float:left;width:33.3333333%}.table-responsive{overflow:auto}.table-responsive>.table tr td,.table-responsive>.table tr th{white-space:normal!important}}.text-bold,.text-bold.table td,.text-bold.table th{font-weight:700}.text-xs{font-size:.75rem!important}.text-md,.text-sm{font-size:1rem!important}.text-lg{font-size:2rem!important}.text-xl{font-size:1.5rem!important}.text-lightblue{color:#3c8dbc}.text-navy{color:#001f3f}.text-olive{color:#3d9970}.text-lime{color:#01ff70}.text-fuchsia{color:#f012be}.text-maroon{color:#d81b60}.text-blue{color:#3085d6}.text-indigo{color:#5c6bc6}.text-purple{color:#6f42c1}.text-pink{color:#ff8acc}.text-red{color:#ea5455}.text-orange{color:#dda451}.text-yellow{color:#edc30e}.text-green{color:#21b978}.text-teal{color:#20c997}.text-cyan{color:#7367f0}.text-white{color:#fff}.text-gray{color:#b8c2cc}.text-gray-dark{color:#1e1e1e}.elevation-0{box-shadow:none!important}.elevation-1{box-shadow:0 1px 3px rgba(34,41,47,.12),0 1px 2px rgba(34,41,47,.24)!important}.elevation-2{box-shadow:0 3px 6px rgba(34,41,47,.16),0 3px 6px rgba(34,41,47,.23)!important}.elevation-3{box-shadow:0 10px 20px rgba(34,41,47,.19),0 6px 6px rgba(34,41,47,.23)!important}.elevation-4{box-shadow:0 14px 28px rgba(34,41,47,.25),0 10px 10px rgba(34,41,47,.22)!important}.elevation-5{box-shadow:0 19px 38px rgba(34,41,47,.3),0 15px 12px rgba(34,41,47,.22)!important}.bg-primary{background-color:#4e9876!important}.bg-primary,.bg-primary>a{color:#fff!important}.bg-primary.btn:hover{border-color:#3d765c;color:#ececec}.bg-primary.btn.active,.bg-primary.btn:active,.bg-primary.btn:not(:disabled):not(.disabled).active,.bg-primary.btn:not(:disabled):not(.disabled):active{background-color:#3d765c!important;border-color:#386e55;color:#fff}.bg-secondary{background-color:#b8c2cc!important}.bg-secondary,.bg-secondary>a{color:#2a2e30!important}.bg-secondary.btn:hover{border-color:#9aa9b7;color:#181a1c}.bg-secondary.btn.active,.bg-secondary.btn:active,.bg-secondary.btn:not(:disabled):not(.disabled).active,.bg-secondary.btn:not(:disabled):not(.disabled):active{background-color:#9aa9b7!important;border-color:#93a2b1;color:#2a2e30}.bg-success{background-color:#21b978!important}.bg-success,.bg-success>a{color:#fff!important}.bg-success.btn:hover{border-color:#198e5c;color:#ececec}.bg-success.btn.active,.bg-success.btn:active,.bg-success.btn:not(:disabled):not(.disabled).active,.bg-success.btn:not(:disabled):not(.disabled):active{background-color:#198e5c!important;border-color:#178355;color:#fff}.bg-info{background-color:#4277cf!important}.bg-info,.bg-info>a{color:#fff!important}.bg-info.btn:hover{border-color:#2d5fb1;color:#ececec}.bg-info.btn.active,.bg-info.btn:active,.bg-info.btn:not(:disabled):not(.disabled).active,.bg-info.btn:not(:disabled):not(.disabled):active{background-color:#2d5fb1!important;border-color:#2a59a7;color:#fff}.bg-warning{background-color:#dda451!important}.bg-warning,.bg-warning>a{color:#2a2e30!important}.bg-warning.btn:hover{border-color:#d28d29;color:#181a1c}.bg-warning.btn.active,.bg-warning.btn:active,.bg-warning.btn:not(:disabled):not(.disabled).active,.bg-warning.btn:not(:disabled):not(.disabled):active{background-color:#d28d29!important;border-color:#c78627;color:#2a2e30}.bg-danger{background-color:#ea5455!important}.bg-danger,.bg-danger>a{color:#fff!important}.bg-danger.btn:hover{border-color:#e42728;color:#ececec}.bg-danger.btn.active,.bg-danger.btn:active,.bg-danger.btn:not(:disabled):not(.disabled).active,.bg-danger.btn:not(:disabled):not(.disabled):active{background-color:#e42728!important;border-color:#e21c1d;color:#fff}.bg-light{background-color:#f7f7f9!important}.bg-light,.bg-light>a{color:#2a2e30!important}.bg-light.btn:hover{border-color:#dadae3;color:#181a1c}.bg-light.btn.active,.bg-light.btn:active,.bg-light.btn:not(:disabled):not(.disabled).active,.bg-light.btn:not(:disabled):not(.disabled):active{background-color:#dadae3!important;border-color:#d3d3de;color:#2a2e30}.bg-dark{background-color:#22292f!important}.bg-dark,.bg-dark>a{color:#fff!important}.bg-dark.btn:hover{border-color:#0d0f11;color:#ececec}.bg-dark.btn.active,.bg-dark.btn:active,.bg-dark.btn:not(:disabled):not(.disabled).active,.bg-dark.btn:not(:disabled):not(.disabled):active{background-color:#0d0f11!important;border-color:#07090a;color:#fff}.bg-lightblue{background-color:#3c8dbc!important}.bg-lightblue,.bg-lightblue>a{color:#fff!important}.bg-lightblue.btn:hover{border-color:#307095;color:#ececec}.bg-lightblue.btn.active,.bg-lightblue.btn:active,.bg-lightblue.btn:not(:disabled):not(.disabled).active,.bg-lightblue.btn:not(:disabled):not(.disabled):active{background-color:#307095!important;border-color:#2d698c;color:#fff}.bg-navy{background-color:#001f3f!important}.bg-navy,.bg-navy>a{color:#fff!important}.bg-navy.btn:hover{border-color:#00060c;color:#ececec}.bg-navy.btn.active,.bg-navy.btn:active,.bg-navy.btn:not(:disabled):not(.disabled).active,.bg-navy.btn:not(:disabled):not(.disabled):active{background-color:#00060c!important;border-color:#000;color:#fff}.bg-olive{background-color:#3d9970!important}.bg-olive,.bg-olive>a{color:#fff!important}.bg-olive.btn:hover{border-color:#2e7555;color:#ececec}.bg-olive.btn.active,.bg-olive.btn:active,.bg-olive.btn:not(:disabled):not(.disabled).active,.bg-olive.btn:not(:disabled):not(.disabled):active{background-color:#2e7555!important;border-color:#2b6b4f;color:#fff}.bg-lime{background-color:#01ff70!important}.bg-lime,.bg-lime>a{color:#2a2e30!important}.bg-lime.btn:hover{border-color:#00cd5a;color:#181a1c}.bg-lime.btn.active,.bg-lime.btn:active,.bg-lime.btn:not(:disabled):not(.disabled).active,.bg-lime.btn:not(:disabled):not(.disabled):active{background-color:#00cd5a!important;border-color:#00c054;color:#fff}.bg-fuchsia{background-color:#f012be!important}.bg-fuchsia,.bg-fuchsia>a{color:#fff!important}.bg-fuchsia.btn:hover{border-color:#c30c9a;color:#ececec}.bg-fuchsia.btn.active,.bg-fuchsia.btn:active,.bg-fuchsia.btn:not(:disabled):not(.disabled).active,.bg-fuchsia.btn:not(:disabled):not(.disabled):active{background-color:#c30c9a!important;border-color:#b70c90;color:#fff}.bg-maroon{background-color:#d81b60!important}.bg-maroon,.bg-maroon>a{color:#fff!important}.bg-maroon.btn:hover{border-color:#ab154c;color:#ececec}.bg-maroon.btn.active,.bg-maroon.btn:active,.bg-maroon.btn:not(:disabled):not(.disabled).active,.bg-maroon.btn:not(:disabled):not(.disabled):active{background-color:#ab154c!important;border-color:#9f1447;color:#fff}.bg-blue{background-color:#3085d6!important}.bg-blue,.bg-blue>a{color:#fff!important}.bg-blue.btn:hover{border-color:#236bb0;color:#ececec}.bg-blue.btn.active,.bg-blue.btn:active,.bg-blue.btn:not(:disabled):not(.disabled).active,.bg-blue.btn:not(:disabled):not(.disabled):active{background-color:#236bb0!important;border-color:#2165a5;color:#fff}.bg-indigo{background-color:#5c6bc6!important}.bg-indigo,.bg-indigo>a{color:#fff!important}.bg-indigo.btn:hover{border-color:#3e4eb1;color:#ececec}.bg-indigo.btn.active,.bg-indigo.btn:active,.bg-indigo.btn:not(:disabled):not(.disabled).active,.bg-indigo.btn:not(:disabled):not(.disabled):active{background-color:#3e4eb1!important;border-color:#3b4aa8;color:#fff}.bg-purple{background-color:#6f42c1!important}.bg-purple,.bg-purple>a{color:#fff!important}.bg-purple.btn:hover{border-color:#59339d;color:#ececec}.bg-purple.btn.active,.bg-purple.btn:active,.bg-purple.btn:not(:disabled):not(.disabled).active,.bg-purple.btn:not(:disabled):not(.disabled):active{background-color:#59339d!important;border-color:#533093;color:#fff}.bg-pink{background-color:#ff8acc!important}.bg-pink,.bg-pink>a{color:#2a2e30!important}.bg-pink.btn:hover{border-color:#ff57b6;color:#181a1c}.bg-pink.btn.active,.bg-pink.btn:active,.bg-pink.btn:not(:disabled):not(.disabled).active,.bg-pink.btn:not(:disabled):not(.disabled):active{background-color:#ff57b6!important;border-color:#ff4ab0;color:#fff}.bg-red{background-color:#ea5455!important}.bg-red,.bg-red>a{color:#fff!important}.bg-red.btn:hover{border-color:#e42728;color:#ececec}.bg-red.btn.active,.bg-red.btn:active,.bg-red.btn:not(:disabled):not(.disabled).active,.bg-red.btn:not(:disabled):not(.disabled):active{background-color:#e42728!important;border-color:#e21c1d;color:#fff}.bg-orange{background-color:#dda451!important}.bg-orange,.bg-orange>a{color:#2a2e30!important}.bg-orange.btn:hover{border-color:#d28d29;color:#181a1c}.bg-orange.btn.active,.bg-orange.btn:active,.bg-orange.btn:not(:disabled):not(.disabled).active,.bg-orange.btn:not(:disabled):not(.disabled):active{background-color:#d28d29!important;border-color:#c78627;color:#2a2e30}.bg-yellow{background-color:#edc30e!important}.bg-yellow,.bg-yellow>a{color:#2a2e30!important}.bg-yellow.btn:hover{border-color:#bd9b0b;color:#181a1c}.bg-yellow.btn.active,.bg-yellow.btn:active,.bg-yellow.btn:not(:disabled):not(.disabled).active,.bg-yellow.btn:not(:disabled):not(.disabled):active{background-color:#bd9b0b!important;border-color:#b1910a;color:#fff}.bg-green{background-color:#21b978!important}.bg-green,.bg-green>a{color:#fff!important}.bg-green.btn:hover{border-color:#198e5c;color:#ececec}.bg-green.btn.active,.bg-green.btn:active,.bg-green.btn:not(:disabled):not(.disabled).active,.bg-green.btn:not(:disabled):not(.disabled):active{background-color:#198e5c!important;border-color:#178355;color:#fff}.bg-teal{background-color:#20c997!important}.bg-teal,.bg-teal>a{color:#fff!important}.bg-teal.btn:hover{border-color:#199d76;color:#ececec}.bg-teal.btn.active,.bg-teal.btn:active,.bg-teal.btn:not(:disabled):not(.disabled).active,.bg-teal.btn:not(:disabled):not(.disabled):active{background-color:#199d76!important;border-color:#17926e;color:#fff}.bg-cyan{background-color:#7367f0!important}.bg-cyan,.bg-cyan>a{color:#fff!important}.bg-cyan.btn:hover{border-color:#4839eb;color:#ececec}.bg-cyan.btn.active,.bg-cyan.btn:active,.bg-cyan.btn:not(:disabled):not(.disabled).active,.bg-cyan.btn:not(:disabled):not(.disabled):active{background-color:#4839eb!important;border-color:#3e2dea;color:#fff}.bg-white{background-color:#fff!important}.bg-white,.bg-white>a{color:#2a2e30!important}.bg-white.btn:hover{border-color:#e6e6e6;color:#181a1c}.bg-white.btn.active,.bg-white.btn:active,.bg-white.btn:not(:disabled):not(.disabled).active,.bg-white.btn:not(:disabled):not(.disabled):active{background-color:#e6e6e6!important;border-color:#dfdfdf;color:#2a2e30}.bg-gray{background-color:#b8c2cc!important}.bg-gray,.bg-gray>a{color:#2a2e30!important}.bg-gray.btn:hover{border-color:#9aa9b7;color:#181a1c}.bg-gray.btn.active,.bg-gray.btn:active,.bg-gray.btn:not(:disabled):not(.disabled).active,.bg-gray.btn:not(:disabled):not(.disabled):active{background-color:#9aa9b7!important;border-color:#93a2b1;color:#2a2e30}.bg-gray-dark{background-color:#1e1e1e!important}.bg-gray-dark,.bg-gray-dark>a{color:#fff!important}.bg-gray-dark.btn:hover{border-color:#050505;color:#ececec}.bg-gray-dark.btn.active,.bg-gray-dark.btn:active,.bg-gray-dark.btn:not(:disabled):not(.disabled).active,.bg-gray-dark.btn:not(:disabled):not(.disabled):active{background-color:#050505!important;border-color:#000;color:#fff}.bg-gray{background-color:#adb5bd;color:#2a2e30}.bg-gray-light{background-color:#f5f5f5;color:#2a2e30!important}.bg-black{background-color:#22292f;color:#fff!important}.bg-white{background-color:#fff;color:#2a2e30!important}.bg-gradient-primary{color:#fff;background:#4e9876 linear-gradient(180deg,#66a589,#4e9876) repeat-x!important}.bg-gradient-primary.btn.disabled,.bg-gradient-primary.btn:disabled,.bg-gradient-primary.btn:not(:disabled):not(.disabled).active,.bg-gradient-primary.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-primary.btn.dropdown-toggle{background-image:none!important}.bg-gradient-primary.btn:hover{border-color:#3d765c;color:#ececec;background:#417f62 linear-gradient(180deg,#5b9078,#417f62) repeat-x!important}.bg-gradient-primary.btn.active,.bg-gradient-primary.btn:active,.bg-gradient-primary.btn:not(:disabled):not(.disabled).active,.bg-gradient-primary.btn:not(:disabled):not(.disabled):active{border-color:#386e55;color:#fff;background:#3d765c linear-gradient(180deg,#588873,#3d765c) repeat-x!important}.bg-gradient-secondary{color:#2a2e30;background:#b8c2cc linear-gradient(180deg,#c0c9d2,#b8c2cc) repeat-x!important}.bg-gradient-secondary.btn.disabled,.bg-gradient-secondary.btn:disabled,.bg-gradient-secondary.btn:not(:disabled):not(.disabled).active,.bg-gradient-secondary.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-secondary.btn.dropdown-toggle{background-image:none!important}.bg-gradient-secondary.btn:hover{border-color:#9aa9b7;color:#181a1c;background:#a2afbc linear-gradient(180deg,#aeb9c5,#a2afbc) repeat-x!important}.bg-gradient-secondary.btn.active,.bg-gradient-secondary.btn:active,.bg-gradient-secondary.btn:not(:disabled):not(.disabled).active,.bg-gradient-secondary.btn:not(:disabled):not(.disabled):active{border-color:#93a2b1;color:#2a2e30;background:#9aa9b7 linear-gradient(180deg,#a7b4c1,#9aa9b7) repeat-x!important}.bg-gradient-success{color:#fff;background:#21b978 linear-gradient(180deg,#40c18b,#21b978) repeat-x!important}.bg-gradient-success.btn.disabled,.bg-gradient-success.btn:disabled,.bg-gradient-success.btn:not(:disabled):not(.disabled).active,.bg-gradient-success.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-success.btn.dropdown-toggle{background-image:none!important}.bg-gradient-success.btn:hover{border-color:#198e5c;color:#ececec;background:#1b9963 linear-gradient(180deg,#3ba679,#1b9963) repeat-x!important}.bg-gradient-success.btn.active,.bg-gradient-success.btn:active,.bg-gradient-success.btn:not(:disabled):not(.disabled).active,.bg-gradient-success.btn:not(:disabled):not(.disabled):active{border-color:#178355;color:#fff;background:#198e5c linear-gradient(180deg,#399d73,#198e5c) repeat-x!important}.bg-gradient-info{color:#fff;background:#4277cf linear-gradient(180deg,#5c89d5,#4277cf) repeat-x!important}.bg-gradient-info.btn.disabled,.bg-gradient-info.btn:disabled,.bg-gradient-info.btn:not(:disabled):not(.disabled).active,.bg-gradient-info.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-info.btn.dropdown-toggle{background-image:none!important}.bg-gradient-info.btn:hover{border-color:#2d5fb1;color:#ececec;background:#3064bb linear-gradient(180deg,#4d79c4,#3064bb) repeat-x!important}.bg-gradient-info.btn.active,.bg-gradient-info.btn:active,.bg-gradient-info.btn:not(:disabled):not(.disabled).active,.bg-gradient-info.btn:not(:disabled):not(.disabled):active{border-color:#2a59a7;color:#fff;background:#2d5fb1 linear-gradient(180deg,#4a75bc,#2d5fb1) repeat-x!important}.bg-gradient-warning{color:#2a2e30;background:#dda451 linear-gradient(180deg,#e0b06a,#dda451) repeat-x!important}.bg-gradient-warning.btn.disabled,.bg-gradient-warning.btn:disabled,.bg-gradient-warning.btn:not(:disabled):not(.disabled).active,.bg-gradient-warning.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-warning.btn.dropdown-toggle{background-image:none!important}.bg-gradient-warning.btn:hover{border-color:#d28d29;color:#181a1c;background:#d79331 linear-gradient(180deg,#dba14f,#d79331) repeat-x!important}.bg-gradient-warning.btn.active,.bg-gradient-warning.btn:active,.bg-gradient-warning.btn:not(:disabled):not(.disabled).active,.bg-gradient-warning.btn:not(:disabled):not(.disabled):active{border-color:#c78627;color:#2a2e30;background:#d28d29 linear-gradient(180deg,#d69c48,#d28d29) repeat-x!important}.bg-gradient-danger{color:#fff;background:#ea5455 linear-gradient(180deg,#eb6c6d,#ea5455) repeat-x!important}.bg-gradient-danger.btn.disabled,.bg-gradient-danger.btn:disabled,.bg-gradient-danger.btn:not(:disabled):not(.disabled).active,.bg-gradient-danger.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-danger.btn.dropdown-toggle{background-image:none!important}.bg-gradient-danger.btn:hover{border-color:#e42728;color:#ececec;background:#e63233 linear-gradient(180deg,#e74f50,#e63233) repeat-x!important}.bg-gradient-danger.btn.active,.bg-gradient-danger.btn:active,.bg-gradient-danger.btn:not(:disabled):not(.disabled).active,.bg-gradient-danger.btn:not(:disabled):not(.disabled):active{border-color:#e21c1d;color:#fff;background:#e42728 linear-gradient(180deg,#e64547,#e42728) repeat-x!important}.bg-gradient-light{color:#2a2e30;background:#f7f7f9 linear-gradient(180deg,#f6f6f9,#f7f7f9) repeat-x!important}.bg-gradient-light.btn.disabled,.bg-gradient-light.btn:disabled,.bg-gradient-light.btn:not(:disabled):not(.disabled).active,.bg-gradient-light.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-light.btn.dropdown-toggle{background-image:none!important}.bg-gradient-light.btn:hover{border-color:#dadae3;color:#181a1c;background:#e1e1e9 linear-gradient(180deg,#e3e3eb,#e1e1e9) repeat-x!important}.bg-gradient-light.btn.active,.bg-gradient-light.btn:active,.bg-gradient-light.btn:not(:disabled):not(.disabled).active,.bg-gradient-light.btn:not(:disabled):not(.disabled):active{border-color:#d3d3de;color:#2a2e30;background:#dadae3 linear-gradient(180deg,#dddde6,#dadae3) repeat-x!important}.bg-gradient-dark{color:#fff;background:#22292f linear-gradient(180deg,#41474d,#22292f) repeat-x!important}.bg-gradient-dark.btn.disabled,.bg-gradient-dark.btn:disabled,.bg-gradient-dark.btn:not(:disabled):not(.disabled).active,.bg-gradient-dark.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-dark.btn.dropdown-toggle{background-image:none!important}.bg-gradient-dark.btn:hover{border-color:#0d0f11;color:#ececec;background:#121619 linear-gradient(180deg,#33373a,#121619) repeat-x!important}.bg-gradient-dark.btn.active,.bg-gradient-dark.btn:active,.bg-gradient-dark.btn:not(:disabled):not(.disabled).active,.bg-gradient-dark.btn:not(:disabled):not(.disabled):active{border-color:#07090a;color:#fff;background:#0d0f11 linear-gradient(180deg,#2f3134,#0d0f11) repeat-x!important}.bg-gradient-lightblue{color:#fff;background:#3c8dbc linear-gradient(180deg,#579cc5,#3c8dbc) repeat-x!important}.bg-gradient-lightblue.btn.disabled,.bg-gradient-lightblue.btn:disabled,.bg-gradient-lightblue.btn:not(:disabled):not(.disabled).active,.bg-gradient-lightblue.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-lightblue.btn.dropdown-toggle{background-image:none!important}.bg-gradient-lightblue.btn:hover{border-color:#307095;color:#ececec;background:#33779f linear-gradient(180deg,#4f89ac,#33779f) repeat-x!important}.bg-gradient-lightblue.btn.active,.bg-gradient-lightblue.btn:active,.bg-gradient-lightblue.btn:not(:disabled):not(.disabled).active,.bg-gradient-lightblue.btn:not(:disabled):not(.disabled):active{border-color:#2d698c;color:#fff;background:#307095 linear-gradient(180deg,#4d83a4,#307095) repeat-x!important}.bg-gradient-navy{color:#fff;background:#001f3f linear-gradient(180deg,#243f5b,#001f3f) repeat-x!important}.bg-gradient-navy.btn.disabled,.bg-gradient-navy.btn:disabled,.bg-gradient-navy.btn:not(:disabled):not(.disabled).active,.bg-gradient-navy.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-navy.btn.dropdown-toggle{background-image:none!important}.bg-gradient-navy.btn:hover{border-color:#00060c;color:#ececec;background:#000c19 linear-gradient(180deg,#242e3a,#000c19) repeat-x!important}.bg-gradient-navy.btn.active,.bg-gradient-navy.btn:active,.bg-gradient-navy.btn:not(:disabled):not(.disabled).active,.bg-gradient-navy.btn:not(:disabled):not(.disabled):active{border-color:#000;color:#fff;background:#00060c linear-gradient(180deg,#24292f,#00060c) repeat-x!important}.bg-gradient-olive{color:#fff;background:#3d9970 linear-gradient(180deg,#58a684,#3d9970) repeat-x!important}.bg-gradient-olive.btn.disabled,.bg-gradient-olive.btn:disabled,.bg-gradient-olive.btn:not(:disabled):not(.disabled).active,.bg-gradient-olive.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-olive.btn.dropdown-toggle{background-image:none!important}.bg-gradient-olive.btn:hover{border-color:#2e7555;color:#ececec;background:#327e5c linear-gradient(180deg,#4e8f73,#327e5c) repeat-x!important}.bg-gradient-olive.btn.active,.bg-gradient-olive.btn:active,.bg-gradient-olive.btn:not(:disabled):not(.disabled).active,.bg-gradient-olive.btn:not(:disabled):not(.disabled):active{border-color:#2b6b4f;color:#fff;background:#2e7555 linear-gradient(180deg,#4b886d,#2e7555) repeat-x!important}.bg-gradient-lime{color:#2a2e30;background:#01ff70 linear-gradient(180deg,#25fd84,#01ff70) repeat-x!important}.bg-gradient-lime.btn.disabled,.bg-gradient-lime.btn:disabled,.bg-gradient-lime.btn:not(:disabled):not(.disabled).active,.bg-gradient-lime.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-lime.btn.dropdown-toggle{background-image:none!important}.bg-gradient-lime.btn:hover{border-color:#00cd5a;color:#181a1c;background:#00da5f linear-gradient(180deg,#24dd76,#00da5f) repeat-x!important}.bg-gradient-lime.btn.active,.bg-gradient-lime.btn:active,.bg-gradient-lime.btn:not(:disabled):not(.disabled).active,.bg-gradient-lime.btn:not(:disabled):not(.disabled):active{border-color:#00c054;color:#fff;background:#00cd5a linear-gradient(180deg,#24d272,#00cd5a) repeat-x!important}.bg-gradient-fuchsia{color:#fff;background:#f012be linear-gradient(180deg,#f033c7,#f012be) repeat-x!important}.bg-gradient-fuchsia.btn.disabled,.bg-gradient-fuchsia.btn:disabled,.bg-gradient-fuchsia.btn:not(:disabled):not(.disabled).active,.bg-gradient-fuchsia.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-fuchsia.btn.dropdown-toggle{background-image:none!important}.bg-gradient-fuchsia.btn:hover{border-color:#c30c9a;color:#ececec;background:#cf0da3 linear-gradient(180deg,#d42fb0,#cf0da3) repeat-x!important}.bg-gradient-fuchsia.btn.active,.bg-gradient-fuchsia.btn:active,.bg-gradient-fuchsia.btn:not(:disabled):not(.disabled).active,.bg-gradient-fuchsia.btn:not(:disabled):not(.disabled):active{border-color:#b70c90;color:#fff;background:#c30c9a linear-gradient(180deg,#ca2ea8,#c30c9a) repeat-x!important}.bg-gradient-maroon{color:#fff;background:#d81b60 linear-gradient(180deg,#db3b77,#d81b60) repeat-x!important}.bg-gradient-maroon.btn.disabled,.bg-gradient-maroon.btn:disabled,.bg-gradient-maroon.btn:not(:disabled):not(.disabled).active,.bg-gradient-maroon.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-maroon.btn.dropdown-toggle{background-image:none!important}.bg-gradient-maroon.btn:hover{border-color:#ab154c;color:#ececec;background:#b61751 linear-gradient(180deg,#bf386a,#b61751) repeat-x!important}.bg-gradient-maroon.btn.active,.bg-gradient-maroon.btn:active,.bg-gradient-maroon.btn:not(:disabled):not(.disabled).active,.bg-gradient-maroon.btn:not(:disabled):not(.disabled):active{border-color:#9f1447;color:#fff;background:#ab154c linear-gradient(180deg,#b53666,#ab154c) repeat-x!important}.bg-gradient-blue{color:#fff;background:#3085d6 linear-gradient(180deg,#4d95db,#3085d6) repeat-x!important}.bg-gradient-blue.btn.disabled,.bg-gradient-blue.btn:disabled,.bg-gradient-blue.btn:not(:disabled):not(.disabled).active,.bg-gradient-blue.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-blue.btn.dropdown-toggle{background-image:none!important}.bg-gradient-blue.btn:hover{border-color:#236bb0;color:#ececec;background:#2572bb linear-gradient(180deg,#4385c4,#2572bb) repeat-x!important}.bg-gradient-blue.btn.active,.bg-gradient-blue.btn:active,.bg-gradient-blue.btn:not(:disabled):not(.disabled).active,.bg-gradient-blue.btn:not(:disabled):not(.disabled):active{border-color:#2165a5;color:#fff;background:#236bb0 linear-gradient(180deg,#427fbb,#236bb0) repeat-x!important}.bg-gradient-indigo{color:#fff;background:#5c6bc6 linear-gradient(180deg,#727fcd,#5c6bc6) repeat-x!important}.bg-gradient-indigo.btn.disabled,.bg-gradient-indigo.btn:disabled,.bg-gradient-indigo.btn:not(:disabled):not(.disabled).active,.bg-gradient-indigo.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-indigo.btn.dropdown-toggle{background-image:none!important}.bg-gradient-indigo.btn:hover{border-color:#3e4eb1;color:#ececec;background:#4152bb linear-gradient(180deg,#5b6ac4,#4152bb) repeat-x!important}.bg-gradient-indigo.btn.active,.bg-gradient-indigo.btn:active,.bg-gradient-indigo.btn:not(:disabled):not(.disabled).active,.bg-gradient-indigo.btn:not(:disabled):not(.disabled):active{border-color:#3b4aa8;color:#fff;background:#3e4eb1 linear-gradient(180deg,#5966bc,#3e4eb1) repeat-x!important}.bg-gradient-purple{color:#fff;background:#6f42c1 linear-gradient(180deg,#825cc9,#6f42c1) repeat-x!important}.bg-gradient-purple.btn.disabled,.bg-gradient-purple.btn:disabled,.bg-gradient-purple.btn:not(:disabled):not(.disabled).active,.bg-gradient-purple.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-purple.btn.dropdown-toggle{background-image:none!important}.bg-gradient-purple.btn:hover{border-color:#59339d;color:#ececec;background:#5e37a6 linear-gradient(180deg,#7453b2,#5e37a6) repeat-x!important}.bg-gradient-purple.btn.active,.bg-gradient-purple.btn:active,.bg-gradient-purple.btn:not(:disabled):not(.disabled).active,.bg-gradient-purple.btn:not(:disabled):not(.disabled):active{border-color:#533093;color:#fff;background:#59339d linear-gradient(180deg,#7050ab,#59339d) repeat-x!important}.bg-gradient-pink{color:#2a2e30;background:#ff8acc linear-gradient(180deg,#fd99d2,#ff8acc) repeat-x!important}.bg-gradient-pink.btn.disabled,.bg-gradient-pink.btn:disabled,.bg-gradient-pink.btn:not(:disabled):not(.disabled).active,.bg-gradient-pink.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-pink.btn.dropdown-toggle{background-image:none!important}.bg-gradient-pink.btn:hover{border-color:#ff57b6;color:#181a1c;background:#ff64bb linear-gradient(180deg,#fd79c4,#ff64bb) repeat-x!important}.bg-gradient-pink.btn.active,.bg-gradient-pink.btn:active,.bg-gradient-pink.btn:not(:disabled):not(.disabled).active,.bg-gradient-pink.btn:not(:disabled):not(.disabled):active{border-color:#ff4ab0;color:#fff;background:#ff57b6 linear-gradient(180deg,#fd6ec0,#ff57b6) repeat-x!important}.bg-gradient-red{color:#fff;background:#ea5455 linear-gradient(180deg,#eb6c6d,#ea5455) repeat-x!important}.bg-gradient-red.btn.disabled,.bg-gradient-red.btn:disabled,.bg-gradient-red.btn:not(:disabled):not(.disabled).active,.bg-gradient-red.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-red.btn.dropdown-toggle{background-image:none!important}.bg-gradient-red.btn:hover{border-color:#e42728;color:#ececec;background:#e63233 linear-gradient(180deg,#e74f50,#e63233) repeat-x!important}.bg-gradient-red.btn.active,.bg-gradient-red.btn:active,.bg-gradient-red.btn:not(:disabled):not(.disabled).active,.bg-gradient-red.btn:not(:disabled):not(.disabled):active{border-color:#e21c1d;color:#fff;background:#e42728 linear-gradient(180deg,#e64547,#e42728) repeat-x!important}.bg-gradient-orange{color:#2a2e30;background:#dda451 linear-gradient(180deg,#e0b06a,#dda451) repeat-x!important}.bg-gradient-orange.btn.disabled,.bg-gradient-orange.btn:disabled,.bg-gradient-orange.btn:not(:disabled):not(.disabled).active,.bg-gradient-orange.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-orange.btn.dropdown-toggle{background-image:none!important}.bg-gradient-orange.btn:hover{border-color:#d28d29;color:#181a1c;background:#d79331 linear-gradient(180deg,#dba14f,#d79331) repeat-x!important}.bg-gradient-orange.btn.active,.bg-gradient-orange.btn:active,.bg-gradient-orange.btn:not(:disabled):not(.disabled).active,.bg-gradient-orange.btn:not(:disabled):not(.disabled):active{border-color:#c78627;color:#2a2e30;background:#d28d29 linear-gradient(180deg,#d69c48,#d28d29) repeat-x!important}.bg-gradient-yellow{color:#2a2e30;background:#edc30e linear-gradient(180deg,#edca31,#edc30e) repeat-x!important}.bg-gradient-yellow.btn.disabled,.bg-gradient-yellow.btn:disabled,.bg-gradient-yellow.btn:not(:disabled):not(.disabled).active,.bg-gradient-yellow.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-yellow.btn.dropdown-toggle{background-image:none!important}.bg-gradient-yellow.btn:hover{border-color:#bd9b0b;color:#181a1c;background:#c9a50c linear-gradient(180deg,#cfb02f,#c9a50c) repeat-x!important}.bg-gradient-yellow.btn.active,.bg-gradient-yellow.btn:active,.bg-gradient-yellow.btn:not(:disabled):not(.disabled).active,.bg-gradient-yellow.btn:not(:disabled):not(.disabled):active{border-color:#b1910a;color:#fff;background:#bd9b0b linear-gradient(180deg,#c5a82e,#bd9b0b) repeat-x!important}.bg-gradient-green{color:#fff;background:#21b978 linear-gradient(180deg,#40c18b,#21b978) repeat-x!important}.bg-gradient-green.btn.disabled,.bg-gradient-green.btn:disabled,.bg-gradient-green.btn:not(:disabled):not(.disabled).active,.bg-gradient-green.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-green.btn.dropdown-toggle{background-image:none!important}.bg-gradient-green.btn:hover{border-color:#198e5c;color:#ececec;background:#1b9963 linear-gradient(180deg,#3ba679,#1b9963) repeat-x!important}.bg-gradient-green.btn.active,.bg-gradient-green.btn:active,.bg-gradient-green.btn:not(:disabled):not(.disabled).active,.bg-gradient-green.btn:not(:disabled):not(.disabled):active{border-color:#178355;color:#fff;background:#198e5c linear-gradient(180deg,#399d73,#198e5c) repeat-x!important}.bg-gradient-teal{color:#fff;background:#20c997 linear-gradient(180deg,#3fcfa5,#20c997) repeat-x!important}.bg-gradient-teal.btn.disabled,.bg-gradient-teal.btn:disabled,.bg-gradient-teal.btn:not(:disabled):not(.disabled).active,.bg-gradient-teal.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-teal.btn.dropdown-toggle{background-image:none!important}.bg-gradient-teal.btn:hover{border-color:#199d76;color:#ececec;background:#1ba87e linear-gradient(180deg,#3bb390,#1ba87e) repeat-x!important}.bg-gradient-teal.btn.active,.bg-gradient-teal.btn:active,.bg-gradient-teal.btn:not(:disabled):not(.disabled).active,.bg-gradient-teal.btn:not(:disabled):not(.disabled):active{border-color:#17926e;color:#fff;background:#199d76 linear-gradient(180deg,#39aa89,#199d76) repeat-x!important}.bg-gradient-cyan{color:#fff;background:#7367f0 linear-gradient(180deg,#867cf1,#7367f0) repeat-x!important}.bg-gradient-cyan.btn.disabled,.bg-gradient-cyan.btn:disabled,.bg-gradient-cyan.btn:not(:disabled):not(.disabled).active,.bg-gradient-cyan.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-cyan.btn.dropdown-toggle{background-image:none!important}.bg-gradient-cyan.btn:hover{border-color:#4839eb;color:#ececec;background:#5344ed linear-gradient(180deg,#6a5eef,#5344ed) repeat-x!important}.bg-gradient-cyan.btn.active,.bg-gradient-cyan.btn:active,.bg-gradient-cyan.btn:not(:disabled):not(.disabled).active,.bg-gradient-cyan.btn:not(:disabled):not(.disabled):active{border-color:#3e2dea;color:#fff;background:#4839eb linear-gradient(180deg,#6155ed,#4839eb) repeat-x!important}.bg-gradient-white{color:#2a2e30;background:#fff linear-gradient(180deg,#fdfdfe,#fff) repeat-x!important}.bg-gradient-white.btn.disabled,.bg-gradient-white.btn:disabled,.bg-gradient-white.btn:not(:disabled):not(.disabled).active,.bg-gradient-white.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-white.btn.dropdown-toggle{background-image:none!important}.bg-gradient-white.btn:hover{border-color:#e6e6e6;color:#181a1c;background:#ececec linear-gradient(180deg,#ecedee,#ececec) repeat-x!important}.bg-gradient-white.btn.active,.bg-gradient-white.btn:active,.bg-gradient-white.btn:not(:disabled):not(.disabled).active,.bg-gradient-white.btn:not(:disabled):not(.disabled):active{border-color:#dfdfdf;color:#2a2e30;background:#e6e6e6 linear-gradient(180deg,#e7e8e9,#e6e6e6) repeat-x!important}.bg-gradient-gray{color:#2a2e30;background:#b8c2cc linear-gradient(180deg,#c0c9d2,#b8c2cc) repeat-x!important}.bg-gradient-gray.btn.disabled,.bg-gradient-gray.btn:disabled,.bg-gradient-gray.btn:not(:disabled):not(.disabled).active,.bg-gradient-gray.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-gray.btn.dropdown-toggle{background-image:none!important}.bg-gradient-gray.btn:hover{border-color:#9aa9b7;color:#181a1c;background:#a2afbc linear-gradient(180deg,#aeb9c5,#a2afbc) repeat-x!important}.bg-gradient-gray.btn.active,.bg-gradient-gray.btn:active,.bg-gradient-gray.btn:not(:disabled):not(.disabled).active,.bg-gradient-gray.btn:not(:disabled):not(.disabled):active{border-color:#93a2b1;color:#2a2e30;background:#9aa9b7 linear-gradient(180deg,#a7b4c1,#9aa9b7) repeat-x!important}.bg-gradient-gray-dark{color:#fff;background:#1e1e1e linear-gradient(180deg,#3d3e3f,#1e1e1e) repeat-x!important}.bg-gradient-gray-dark.btn.disabled,.bg-gradient-gray-dark.btn:disabled,.bg-gradient-gray-dark.btn:not(:disabled):not(.disabled).active,.bg-gradient-gray-dark.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-gray-dark.btn.dropdown-toggle{background-image:none!important}.bg-gradient-gray-dark.btn:hover{border-color:#050505;color:#ececec;background:#0b0b0b linear-gradient(180deg,#2d2e2e,#0b0b0b) repeat-x!important}.bg-gradient-gray-dark.btn.active,.bg-gradient-gray-dark.btn:active,.bg-gradient-gray-dark.btn:not(:disabled):not(.disabled).active,.bg-gradient-gray-dark.btn:not(:disabled):not(.disabled):active{border-color:#000;color:#fff;background:#050505 linear-gradient(180deg,#282829,#050505) repeat-x!important}[class^=bg-].disabled{opacity:.65}a.text-muted:hover{color:#4e9876!important}.link-muted{color:#5d6974}.link-muted:focus,.link-muted:hover{color:#464f58}.link-black{color:#b8c2cc}.link-black:focus,.link-black:hover{color:#e6e8ea}.accent-primary .btn-link,.accent-primary a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#4e9876}.accent-primary .btn-link:hover,.accent-primary a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#34654f}.accent-primary .dropdown-item.active,.accent-primary .dropdown-item:active{background:#4e9876;color:#fff}.accent-primary .custom-control-input:checked~.custom-control-label:before{background:#4e9876;border-color:#2b5542}.accent-primary .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-primary .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-primary .custom-file-input:focus~.custom-file-label,.accent-primary .custom-select:focus,.accent-primary .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#9acbb5}.accent-primary .page-item .page-link{color:#4e9876}.accent-primary .page-item.active .page-link,.accent-primary .page-item.active a{background-color:#4e9876;border-color:#4e9876;color:#fff}.accent-primary .page-item.disabled .page-link,.accent-primary .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-primary [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-primary [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-primary [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-primary [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-secondary .btn-link,.accent-secondary a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#b8c2cc}.accent-secondary .btn-link:hover,.accent-secondary a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#8b9cac}.accent-secondary .dropdown-item.active,.accent-secondary .dropdown-item:active{background:#b8c2cc;color:#2a2e30}.accent-secondary .custom-control-input:checked~.custom-control-label:before{background:#b8c2cc;border-color:#7d8fa1}.accent-secondary .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%232a2e30' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-secondary .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-secondary .custom-file-input:focus~.custom-file-label,.accent-secondary .custom-select:focus,.accent-secondary .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#fff}.accent-secondary .page-item .page-link{color:#b8c2cc}.accent-secondary .page-item.active .page-link,.accent-secondary .page-item.active a{background-color:#b8c2cc;border-color:#b8c2cc;color:#fff}.accent-secondary .page-item.disabled .page-link,.accent-secondary .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-secondary [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-secondary [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-secondary [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-secondary [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-success .btn-link,.accent-success a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#21b978}.accent-success .btn-link:hover,.accent-success a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#15784e}.accent-success .dropdown-item.active,.accent-success .dropdown-item:active{background:#21b978;color:#fff}.accent-success .custom-control-input:checked~.custom-control-label:before{background:#21b978;border-color:#126240}.accent-success .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-success .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-success .custom-file-input:focus~.custom-file-label,.accent-success .custom-select:focus,.accent-success .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#73e6b5}.accent-success .page-item .page-link{color:#21b978}.accent-success .page-item.active .page-link,.accent-success .page-item.active a{background-color:#21b978;border-color:#21b978;color:#fff}.accent-success .page-item.disabled .page-link,.accent-success .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-success [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-success [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-success [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-success [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-info .btn-link,.accent-info a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#4277cf}.accent-info .btn-link:hover,.accent-info a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#28549d}.accent-info .dropdown-item.active,.accent-info .dropdown-item:active{background:#4277cf;color:#fff}.accent-info .custom-control-input:checked~.custom-control-label:before{background:#4277cf;border-color:#234988}.accent-info .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-info .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-info .custom-file-input:focus~.custom-file-label,.accent-info .custom-select:focus,.accent-info .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#a8c0e9}.accent-info .page-item .page-link{color:#4277cf}.accent-info .page-item.active .page-link,.accent-info .page-item.active a{background-color:#4277cf;border-color:#4277cf;color:#fff}.accent-info .page-item.disabled .page-link,.accent-info .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-info [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-info [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-info [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-info [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-warning .btn-link,.accent-warning a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#dda451}.accent-warning .btn-link:hover,.accent-warning a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#bd7f25}.accent-warning .dropdown-item.active,.accent-warning .dropdown-item:active{background:#dda451;color:#2a2e30}.accent-warning .custom-control-input:checked~.custom-control-label:before{background:#dda451;border-color:#a77121}.accent-warning .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%232a2e30' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-warning .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-warning .custom-file-input:focus~.custom-file-label,.accent-warning .custom-select:focus,.accent-warning .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#f2dcbc}.accent-warning .page-item .page-link{color:#dda451}.accent-warning .page-item.active .page-link,.accent-warning .page-item.active a{background-color:#dda451;border-color:#dda451;color:#fff}.accent-warning .page-item.disabled .page-link,.accent-warning .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-warning [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-warning [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-warning [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-warning [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-danger .btn-link,.accent-danger a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#ea5455}.accent-danger .btn-link:hover,.accent-danger a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#d71a1c}.accent-danger .dropdown-item.active,.accent-danger .dropdown-item:active{background:#ea5455;color:#fff}.accent-danger .custom-control-input:checked~.custom-control-label:before{background:#ea5455;border-color:#c01819}.accent-danger .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-danger .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-danger .custom-file-input:focus~.custom-file-label,.accent-danger .custom-select:focus,.accent-danger .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#f8c6c6}.accent-danger .page-item .page-link{color:#ea5455}.accent-danger .page-item.active .page-link,.accent-danger .page-item.active a{background-color:#ea5455;border-color:#ea5455;color:#fff}.accent-danger .page-item.disabled .page-link,.accent-danger .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-danger [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-danger [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-danger [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-danger [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-light .btn-link,.accent-light a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#f7f7f9}.accent-light .btn-link:hover,.accent-light a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#cbcbd8}.accent-light .dropdown-item.active,.accent-light .dropdown-item:active{background:#f7f7f9;color:#2a2e30}.accent-light .custom-control-input:checked~.custom-control-label:before{background:#f7f7f9;border-color:#bdbdcd}.accent-light .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%232a2e30' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-light .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-light .custom-file-input:focus~.custom-file-label,.accent-light .custom-select:focus,.accent-light .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#fff}.accent-light .page-item .page-link{color:#f7f7f9}.accent-light .page-item.active .page-link,.accent-light .page-item.active a{background-color:#f7f7f9;border-color:#f7f7f9;color:#fff}.accent-light .page-item.disabled .page-link,.accent-light .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-light [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-light [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-light [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-light [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-dark .btn-link,.accent-dark a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#22292f}.accent-dark .btn-link:hover,.accent-dark a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#020203}.accent-dark .dropdown-item.active,.accent-dark .dropdown-item:active{background:#22292f;color:#fff}.accent-dark .custom-control-input:checked~.custom-control-label:before{background:#22292f;border-color:#000}.accent-dark .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-dark .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-dark .custom-file-input:focus~.custom-file-label,.accent-dark .custom-select:focus,.accent-dark .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#586a79}.accent-dark .page-item .page-link{color:#22292f}.accent-dark .page-item.active .page-link,.accent-dark .page-item.active a{background-color:#22292f;border-color:#22292f;color:#fff}.accent-dark .page-item.disabled .page-link,.accent-dark .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-dark [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-dark [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-dark [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-dark [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-lightblue .btn-link,.accent-lightblue a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#3c8dbc}.accent-lightblue .btn-link:hover,.accent-lightblue a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#296282}.accent-lightblue .dropdown-item.active,.accent-lightblue .dropdown-item:active{background:#3c8dbc;color:#fff}.accent-lightblue .custom-control-input:checked~.custom-control-label:before{background:#3c8dbc;border-color:#23536f}.accent-lightblue .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-lightblue .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-lightblue .custom-file-input:focus~.custom-file-label,.accent-lightblue .custom-select:focus,.accent-lightblue .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#99c5de}.accent-lightblue .page-item .page-link{color:#3c8dbc}.accent-lightblue .page-item.active .page-link,.accent-lightblue .page-item.active a{background-color:#3c8dbc;border-color:#3c8dbc;color:#fff}.accent-lightblue .page-item.disabled .page-link,.accent-lightblue .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-lightblue [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-lightblue [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-lightblue [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-lightblue [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-navy .btn-link,.accent-navy a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#001f3f}.accent-navy .btn-link:hover,.accent-navy a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#000}.accent-navy .dropdown-item.active,.accent-navy .dropdown-item:active{background:#001f3f;color:#fff}.accent-navy .custom-control-input:checked~.custom-control-label:before{background:#001f3f;border-color:#000}.accent-navy .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-navy .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-navy .custom-file-input:focus~.custom-file-label,.accent-navy .custom-select:focus,.accent-navy .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#005ebf}.accent-navy .page-item .page-link{color:#001f3f}.accent-navy .page-item.active .page-link,.accent-navy .page-item.active a{background-color:#001f3f;border-color:#001f3f;color:#fff}.accent-navy .page-item.disabled .page-link,.accent-navy .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-navy [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-navy [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-navy [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-navy [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-olive .btn-link,.accent-olive a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#3d9970}.accent-olive .btn-link:hover,.accent-olive a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#276248}.accent-olive .dropdown-item.active,.accent-olive .dropdown-item:active{background:#3d9970;color:#fff}.accent-olive .custom-control-input:checked~.custom-control-label:before{background:#3d9970;border-color:#20503b}.accent-olive .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-olive .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-olive .custom-file-input:focus~.custom-file-label,.accent-olive .custom-select:focus,.accent-olive .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#87cfaf}.accent-olive .page-item .page-link{color:#3d9970}.accent-olive .page-item.active .page-link,.accent-olive .page-item.active a{background-color:#3d9970;border-color:#3d9970;color:#fff}.accent-olive .page-item.disabled .page-link,.accent-olive .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-olive [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-olive [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-olive [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-olive [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-lime .btn-link,.accent-lime a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#01ff70}.accent-lime .btn-link:hover,.accent-lime a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#00b44e}.accent-lime .dropdown-item.active,.accent-lime .dropdown-item:active{background:#01ff70;color:#2a2e30}.accent-lime .custom-control-input:checked~.custom-control-label:before{background:#01ff70;border-color:#009a43}.accent-lime .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%232a2e30' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-lime .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-lime .custom-file-input:focus~.custom-file-label,.accent-lime .custom-select:focus,.accent-lime .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#81ffb8}.accent-lime .page-item .page-link{color:#01ff70}.accent-lime .page-item.active .page-link,.accent-lime .page-item.active a{background-color:#01ff70;border-color:#01ff70;color:#fff}.accent-lime .page-item.disabled .page-link,.accent-lime .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-lime [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-lime [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-lime [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-lime [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-fuchsia .btn-link,.accent-fuchsia a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#f012be}.accent-fuchsia .btn-link:hover,.accent-fuchsia a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#ab0b87}.accent-fuchsia .dropdown-item.active,.accent-fuchsia .dropdown-item:active{background:#f012be;color:#fff}.accent-fuchsia .custom-control-input:checked~.custom-control-label:before{background:#f012be;border-color:#930974}.accent-fuchsia .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-fuchsia .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-fuchsia .custom-file-input:focus~.custom-file-label,.accent-fuchsia .custom-select:focus,.accent-fuchsia .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#f88adf}.accent-fuchsia .page-item .page-link{color:#f012be}.accent-fuchsia .page-item.active .page-link,.accent-fuchsia .page-item.active a{background-color:#f012be;border-color:#f012be;color:#fff}.accent-fuchsia .page-item.disabled .page-link,.accent-fuchsia .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-fuchsia [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-fuchsia [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-fuchsia [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-fuchsia [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-maroon .btn-link,.accent-maroon a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#d81b60}.accent-maroon .btn-link:hover,.accent-maroon a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#941342}.accent-maroon .dropdown-item.active,.accent-maroon .dropdown-item:active{background:#d81b60;color:#fff}.accent-maroon .custom-control-input:checked~.custom-control-label:before{background:#d81b60;border-color:#7d1038}.accent-maroon .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-maroon .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-maroon .custom-file-input:focus~.custom-file-label,.accent-maroon .custom-select:focus,.accent-maroon .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#f083ab}.accent-maroon .page-item .page-link{color:#d81b60}.accent-maroon .page-item.active .page-link,.accent-maroon .page-item.active a{background-color:#d81b60;border-color:#d81b60;color:#fff}.accent-maroon .page-item.disabled .page-link,.accent-maroon .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-maroon [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-maroon [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-maroon [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-maroon [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-blue .btn-link,.accent-blue a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#3085d6}.accent-blue .btn-link:hover,.accent-blue a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#1f5e9b}.accent-blue .dropdown-item.active,.accent-blue .dropdown-item:active{background:#3085d6;color:#fff}.accent-blue .custom-control-input:checked~.custom-control-label:before{background:#3085d6;border-color:#1a5186}.accent-blue .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-blue .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-blue .custom-file-input:focus~.custom-file-label,.accent-blue .custom-select:focus,.accent-blue .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#9ac4eb}.accent-blue .page-item .page-link{color:#3085d6}.accent-blue .page-item.active .page-link,.accent-blue .page-item.active a{background-color:#3085d6;border-color:#3085d6;color:#fff}.accent-blue .page-item.disabled .page-link,.accent-blue .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-blue [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-blue [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-blue [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-blue [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-indigo .btn-link,.accent-indigo a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#5c6bc6}.accent-indigo .btn-link:hover,.accent-indigo a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#37469e}.accent-indigo .dropdown-item.active,.accent-indigo .dropdown-item:active{background:#5c6bc6;color:#fff}.accent-indigo .custom-control-input:checked~.custom-control-label:before{background:#5c6bc6;border-color:#313e8b}.accent-indigo .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-indigo .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-indigo .custom-file-input:focus~.custom-file-label,.accent-indigo .custom-select:focus,.accent-indigo .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#bac1e7}.accent-indigo .page-item .page-link{color:#5c6bc6}.accent-indigo .page-item.active .page-link,.accent-indigo .page-item.active a{background-color:#5c6bc6;border-color:#5c6bc6;color:#fff}.accent-indigo .page-item.disabled .page-link,.accent-indigo .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-indigo [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-indigo [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-indigo [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-indigo [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-purple .btn-link,.accent-purple a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#6f42c1}.accent-purple .btn-link:hover,.accent-purple a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#4e2d89}.accent-purple .dropdown-item.active,.accent-purple .dropdown-item:active{background:#6f42c1;color:#fff}.accent-purple .custom-control-input:checked~.custom-control-label:before{background:#6f42c1;border-color:#432776}.accent-purple .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-purple .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-purple .custom-file-input:focus~.custom-file-label,.accent-purple .custom-select:focus,.accent-purple .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#b8a2e0}.accent-purple .page-item .page-link{color:#6f42c1}.accent-purple .page-item.active .page-link,.accent-purple .page-item.active a{background-color:#6f42c1;border-color:#6f42c1;color:#fff}.accent-purple .page-item.disabled .page-link,.accent-purple .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-purple [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-purple [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-purple [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-purple [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-pink .btn-link,.accent-pink a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#ff8acc}.accent-pink .btn-link:hover,.accent-pink a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#ff3eab}.accent-pink .dropdown-item.active,.accent-pink .dropdown-item:active{background:#ff8acc;color:#2a2e30}.accent-pink .custom-control-input:checked~.custom-control-label:before{background:#ff8acc;border-color:#ff24a0}.accent-pink .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%232a2e30' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-pink .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-pink .custom-file-input:focus~.custom-file-label,.accent-pink .custom-select:focus,.accent-pink .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#fff}.accent-pink .page-item .page-link{color:#ff8acc}.accent-pink .page-item.active .page-link,.accent-pink .page-item.active a{background-color:#ff8acc;border-color:#ff8acc;color:#fff}.accent-pink .page-item.disabled .page-link,.accent-pink .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-pink [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-pink [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-pink [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-pink [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-red .btn-link,.accent-red a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#ea5455}.accent-red .btn-link:hover,.accent-red a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#d71a1c}.accent-red .dropdown-item.active,.accent-red .dropdown-item:active{background:#ea5455;color:#fff}.accent-red .custom-control-input:checked~.custom-control-label:before{background:#ea5455;border-color:#c01819}.accent-red .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-red .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-red .custom-file-input:focus~.custom-file-label,.accent-red .custom-select:focus,.accent-red .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#f8c6c6}.accent-red .page-item .page-link{color:#ea5455}.accent-red .page-item.active .page-link,.accent-red .page-item.active a{background-color:#ea5455;border-color:#ea5455;color:#fff}.accent-red .page-item.disabled .page-link,.accent-red .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-red [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-red [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-red [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-red [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-orange .btn-link,.accent-orange a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#dda451}.accent-orange .btn-link:hover,.accent-orange a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#bd7f25}.accent-orange .dropdown-item.active,.accent-orange .dropdown-item:active{background:#dda451;color:#2a2e30}.accent-orange .custom-control-input:checked~.custom-control-label:before{background:#dda451;border-color:#a77121}.accent-orange .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%232a2e30' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-orange .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-orange .custom-file-input:focus~.custom-file-label,.accent-orange .custom-select:focus,.accent-orange .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#f2dcbc}.accent-orange .page-item .page-link{color:#dda451}.accent-orange .page-item.active .page-link,.accent-orange .page-item.active a{background-color:#dda451;border-color:#dda451;color:#fff}.accent-orange .page-item.disabled .page-link,.accent-orange .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-orange [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-orange [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-orange [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-orange [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-yellow .btn-link,.accent-yellow a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#edc30e}.accent-yellow .btn-link:hover,.accent-yellow a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#a5880a}.accent-yellow .dropdown-item.active,.accent-yellow .dropdown-item:active{background:#edc30e;color:#2a2e30}.accent-yellow .custom-control-input:checked~.custom-control-label:before{background:#edc30e;border-color:#8d7408}.accent-yellow .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%232a2e30' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-yellow .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-yellow .custom-file-input:focus~.custom-file-label,.accent-yellow .custom-select:focus,.accent-yellow .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#f8e283}.accent-yellow .page-item .page-link{color:#edc30e}.accent-yellow .page-item.active .page-link,.accent-yellow .page-item.active a{background-color:#edc30e;border-color:#edc30e;color:#fff}.accent-yellow .page-item.disabled .page-link,.accent-yellow .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-yellow [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-yellow [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-yellow [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-yellow [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-green .btn-link,.accent-green a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#21b978}.accent-green .btn-link:hover,.accent-green a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#15784e}.accent-green .dropdown-item.active,.accent-green .dropdown-item:active{background:#21b978;color:#fff}.accent-green .custom-control-input:checked~.custom-control-label:before{background:#21b978;border-color:#126240}.accent-green .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-green .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-green .custom-file-input:focus~.custom-file-label,.accent-green .custom-select:focus,.accent-green .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#73e6b5}.accent-green .page-item .page-link{color:#21b978}.accent-green .page-item.active .page-link,.accent-green .page-item.active a{background-color:#21b978;border-color:#21b978;color:#fff}.accent-green .page-item.disabled .page-link,.accent-green .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-green [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-green [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-green [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-green [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-teal .btn-link,.accent-teal a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#20c997}.accent-teal .btn-link:hover,.accent-teal a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#158765}.accent-teal .dropdown-item.active,.accent-teal .dropdown-item:active{background:#20c997;color:#fff}.accent-teal .custom-control-input:checked~.custom-control-label:before{background:#20c997;border-color:#127155}.accent-teal .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-teal .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-teal .custom-file-input:focus~.custom-file-label,.accent-teal .custom-select:focus,.accent-teal .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#7eeaca}.accent-teal .page-item .page-link{color:#20c997}.accent-teal .page-item.active .page-link,.accent-teal .page-item.active a{background-color:#20c997;border-color:#20c997;color:#fff}.accent-teal .page-item.disabled .page-link,.accent-teal .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-teal [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-teal [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-teal [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-teal [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-cyan .btn-link,.accent-cyan a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#7367f0}.accent-cyan .btn-link:hover,.accent-cyan a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#3321e9}.accent-cyan .dropdown-item.active,.accent-cyan .dropdown-item:active{background:#7367f0;color:#fff}.accent-cyan .custom-control-input:checked~.custom-control-label:before{background:#7367f0;border-color:#2716db}.accent-cyan .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-cyan .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-cyan .custom-file-input:focus~.custom-file-label,.accent-cyan .custom-select:focus,.accent-cyan .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#dedbfb}.accent-cyan .page-item .page-link{color:#7367f0}.accent-cyan .page-item.active .page-link,.accent-cyan .page-item.active a{background-color:#7367f0;border-color:#7367f0;color:#fff}.accent-cyan .page-item.disabled .page-link,.accent-cyan .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-cyan [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-cyan [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-cyan [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-cyan [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-white .btn-link,.accent-white a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#fff}.accent-white .btn-link:hover,.accent-white a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#d9d9d9}.accent-white .dropdown-item.active,.accent-white .dropdown-item:active{background:#fff;color:#2a2e30}.accent-white .custom-control-input:checked~.custom-control-label:before{background:#fff;border-color:#ccc}.accent-white .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%232a2e30' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-white .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-white .custom-file-input:focus~.custom-file-label,.accent-white .custom-select:focus,.accent-white .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#fff}.accent-white .page-item .page-link{color:#fff}.accent-white .page-item.active .page-link,.accent-white .page-item.active a{background-color:#fff;border-color:#fff;color:#fff}.accent-white .page-item.disabled .page-link,.accent-white .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-white [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-white [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-white [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-white [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-gray .btn-link,.accent-gray a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#b8c2cc}.accent-gray .btn-link:hover,.accent-gray a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#8b9cac}.accent-gray .dropdown-item.active,.accent-gray .dropdown-item:active{background:#b8c2cc;color:#2a2e30}.accent-gray .custom-control-input:checked~.custom-control-label:before{background:#b8c2cc;border-color:#7d8fa1}.accent-gray .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%232a2e30' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-gray .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-gray .custom-file-input:focus~.custom-file-label,.accent-gray .custom-select:focus,.accent-gray .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#fff}.accent-gray .page-item .page-link{color:#b8c2cc}.accent-gray .page-item.active .page-link,.accent-gray .page-item.active a{background-color:#b8c2cc;border-color:#b8c2cc;color:#fff}.accent-gray .page-item.disabled .page-link,.accent-gray .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-gray [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-gray [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-gray [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-gray [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-gray-dark .btn-link,.accent-gray-dark a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#1e1e1e}.accent-gray-dark .btn-link:hover,.accent-gray-dark a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#000}.accent-gray-dark .dropdown-item.active,.accent-gray-dark .dropdown-item:active{background:#1e1e1e;color:#fff}.accent-gray-dark .custom-control-input:checked~.custom-control-label:before{background:#1e1e1e;border-color:#000}.accent-gray-dark .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-gray-dark .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-gray-dark .custom-file-input:focus~.custom-file-label,.accent-gray-dark .custom-select:focus,.accent-gray-dark .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#5e5e5e}.accent-gray-dark .page-item .page-link{color:#1e1e1e}.accent-gray-dark .page-item.active .page-link,.accent-gray-dark .page-item.active a{background-color:#1e1e1e;border-color:#1e1e1e;color:#fff}.accent-gray-dark .page-item.disabled .page-link,.accent-gray-dark .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-gray-dark [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-gray-dark [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-gray-dark [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-gray-dark [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}[class*=accent-] a.btn-primary{color:#fff}[class*=accent-] a.btn-secondary{color:#2a2e30}[class*=accent-] a.btn-info,[class*=accent-] a.btn-success{color:#fff}[class*=accent-] a.btn-warning{color:#2a2e30}[class*=accent-] a.btn-danger{color:#fff}[class*=accent-] a.btn-light{color:#2a2e30}[class*=accent-] a.btn-dark{color:#fff} ================================================ FILE: public/vendor/dcat-admin/adminlte/adminlte.css ================================================ /*! * AdminLTE v3.0.4 * Author: Colorlib * Website: AdminLTE.io * License: Open source - MIT */ /*! * Bootstrap v4.3.1 (https://getbootstrap.com/) * Copyright 2011-2019 The Bootstrap Authors * Copyright 2011-2019 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */ /*! * Bootstrap v4.3.1 (https://getbootstrap.com/) * Copyright 2011-2019 The Bootstrap Authors * Copyright 2011-2019 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */:root{--blue:#3085d6;--indigo:#5c6bc6;--purple:#6f42c1;--pink:#ff8acc;--red:#ea5455;--orange:#dda451;--yellow:#edc30e;--green:#21b978;--teal:#20c997;--cyan:#7367f0;--white:#fff;--gray:#b8c2cc;--gray-dark:#1e1e1e;--primary:#586cb1;--secondary:#b8c2cc;--success:#21b978;--info:#4277cf;--warning:#dda451;--danger:#ea5455;--light:#f7f7f9;--dark:#22292f;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:"Montserrat",Helvetica,Arial,serif;--font-family-monospace:"Montserrat",Helvetica,Arial,serif}*,:after,:before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(34,41,47,0)}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:Montserrat,Helvetica,Arial,serif;font-size:1rem;font-weight:400;line-height:1.45;color:#626262;text-align:left;background-color:#eff1f7}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{font-style:normal;line-height:inherit}address,dl,ol,ul{margin-bottom:1rem}dl,ol,ul{margin-top:0}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#4c60a3;background-color:transparent}a,a:hover{text-decoration:none}a:hover{color:#3c4b80}a:not([href]):not([tabindex]),a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:Montserrat,Helvetica,Arial,serif;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{border-style:none}img,svg{vertical-align:middle}svg{overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#b8c2cc;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-family:inherit;font-weight:500;line-height:1.2;color:#2c2c2c}.h1,h1{font-size:2rem}.h2,h2{font-size:1.74rem}.h3,h3{font-size:1.51rem}.h4,h4{font-size:1.32rem}.h5,h5{font-size:1.14rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem}.display-1,.display-2{font-weight:300;line-height:1.2}.display-2{font-size:5.5rem}.display-3{font-size:4.5rem}.display-3,.display-4{font-weight:300;line-height:1.2}.display-4{font-size:3.5rem}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(34,41,47,.1)}.small,small{font-size:smaller;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-inline,.list-unstyled{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:smaller;color:#b8c2cc}.blockquote-footer:before{content:"\2014\A0"}.img-fluid,.img-thumbnail{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#eff1f7;border:1px solid #dae1e7;border-radius:.5rem}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#b8c2cc}code{word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:90%;color:#fff;background-color:#eee;border-radius:.25rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:90%;color:#2a2e30}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:14px;padding-left:14px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:14px;padding-left:14px;margin-right:auto;margin-left:auto}.row{display:flex;flex-wrap:wrap;margin-right:-14px;margin-left:-14px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col-auto,.col-lg,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-auto,.col-md,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-md-auto,.col-sm,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-auto{position:relative;width:100%;padding-right:14px;padding-left:14px}.col{flex-basis:0;flex-grow:1;max-width:100%}.col-auto{flex:0 0 auto;width:auto;max-width:100%}.col-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-3{flex:0 0 25%;max-width:25%}.col-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-6{flex:0 0 50%;max-width:50%}.col-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-9{flex:0 0 75%;max-width:75%}.col-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-12{flex:0 0 100%;max-width:100%}.order-first{order:-1}.order-last{order:13}.order-0{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.offset-1{margin-left:8.3333333333%}.offset-2{margin-left:16.6666666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.3333333333%}.offset-5{margin-left:41.6666666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.3333333333%}.offset-8{margin-left:66.6666666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.3333333333%}.offset-11{margin-left:91.6666666667%}@media (min-width:576px){.col-sm{flex-basis:0;flex-grow:1;max-width:100%}.col-sm-auto{flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-sm-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-sm-3{flex:0 0 25%;max-width:25%}.col-sm-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-sm-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-sm-6{flex:0 0 50%;max-width:50%}.col-sm-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-sm-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-sm-9{flex:0 0 75%;max-width:75%}.col-sm-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-sm-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-sm-12{flex:0 0 100%;max-width:100%}.order-sm-first{order:-1}.order-sm-last{order:13}.order-sm-0{order:0}.order-sm-1{order:1}.order-sm-2{order:2}.order-sm-3{order:3}.order-sm-4{order:4}.order-sm-5{order:5}.order-sm-6{order:6}.order-sm-7{order:7}.order-sm-8{order:8}.order-sm-9{order:9}.order-sm-10{order:10}.order-sm-11{order:11}.order-sm-12{order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.3333333333%}.offset-sm-2{margin-left:16.6666666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.3333333333%}.offset-sm-5{margin-left:41.6666666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.3333333333%}.offset-sm-8{margin-left:66.6666666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.3333333333%}.offset-sm-11{margin-left:91.6666666667%}}@media (min-width:768px){.col-md{flex-basis:0;flex-grow:1;max-width:100%}.col-md-auto{flex:0 0 auto;width:auto;max-width:100%}.col-md-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-md-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-md-3{flex:0 0 25%;max-width:25%}.col-md-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-md-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-md-6{flex:0 0 50%;max-width:50%}.col-md-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-md-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-md-9{flex:0 0 75%;max-width:75%}.col-md-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-md-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-md-12{flex:0 0 100%;max-width:100%}.order-md-first{order:-1}.order-md-last{order:13}.order-md-0{order:0}.order-md-1{order:1}.order-md-2{order:2}.order-md-3{order:3}.order-md-4{order:4}.order-md-5{order:5}.order-md-6{order:6}.order-md-7{order:7}.order-md-8{order:8}.order-md-9{order:9}.order-md-10{order:10}.order-md-11{order:11}.order-md-12{order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.3333333333%}.offset-md-2{margin-left:16.6666666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.3333333333%}.offset-md-5{margin-left:41.6666666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.3333333333%}.offset-md-8{margin-left:66.6666666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.3333333333%}.offset-md-11{margin-left:91.6666666667%}}@media (min-width:992px){.col-lg{flex-basis:0;flex-grow:1;max-width:100%}.col-lg-auto{flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-lg-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-lg-3{flex:0 0 25%;max-width:25%}.col-lg-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-lg-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-lg-6{flex:0 0 50%;max-width:50%}.col-lg-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-lg-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-lg-9{flex:0 0 75%;max-width:75%}.col-lg-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-lg-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-lg-12{flex:0 0 100%;max-width:100%}.order-lg-first{order:-1}.order-lg-last{order:13}.order-lg-0{order:0}.order-lg-1{order:1}.order-lg-2{order:2}.order-lg-3{order:3}.order-lg-4{order:4}.order-lg-5{order:5}.order-lg-6{order:6}.order-lg-7{order:7}.order-lg-8{order:8}.order-lg-9{order:9}.order-lg-10{order:10}.order-lg-11{order:11}.order-lg-12{order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.3333333333%}.offset-lg-2{margin-left:16.6666666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.3333333333%}.offset-lg-5{margin-left:41.6666666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.3333333333%}.offset-lg-8{margin-left:66.6666666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.3333333333%}.offset-lg-11{margin-left:91.6666666667%}}@media (min-width:1200px){.col-xl{flex-basis:0;flex-grow:1;max-width:100%}.col-xl-auto{flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-xl-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-xl-3{flex:0 0 25%;max-width:25%}.col-xl-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-xl-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-xl-6{flex:0 0 50%;max-width:50%}.col-xl-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-xl-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-xl-9{flex:0 0 75%;max-width:75%}.col-xl-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-xl-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-xl-12{flex:0 0 100%;max-width:100%}.order-xl-first{order:-1}.order-xl-last{order:13}.order-xl-0{order:0}.order-xl-1{order:1}.order-xl-2{order:2}.order-xl-3{order:3}.order-xl-4{order:4}.order-xl-5{order:5}.order-xl-6{order:6}.order-xl-7{order:7}.order-xl-8{order:8}.order-xl-9{order:9}.order-xl-10{order:10}.order-xl-11{order:11}.order-xl-12{order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.3333333333%}.offset-xl-2{margin-left:16.6666666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.3333333333%}.offset-xl-5{margin-left:41.6666666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.3333333333%}.offset-xl-8{margin-left:66.6666666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.3333333333%}.offset-xl-11{margin-left:91.6666666667%}}.table{width:100%;margin-bottom:1rem;color:#626262}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #eff1f7}.table thead th{vertical-align:bottom;border-bottom:2px solid #eff1f7}.table tbody+tbody{border-top:2px solid #eff1f7}.table-sm td,.table-sm th{padding:.3rem}.table-bordered,.table-bordered td,.table-bordered th{border:1px solid #eff1f7}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(34,41,47,.05)}.table-hover tbody tr:hover{color:#626262;background-color:rgba(34,41,47,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#d0d6e9}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#a8b3d6}.table-hover .table-primary:hover,.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#bfc7e1}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#ebeef1}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#dadfe4}.table-hover .table-secondary:hover,.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#dce1e7}.table-success,.table-success>td,.table-success>th{background-color:#c1ebd9}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8cdbb9}.table-hover .table-success:hover,.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#aee5cd}.table-info,.table-info>td,.table-info>th{background-color:#cad9f2}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#9db8e6}.table-hover .table-info:hover,.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#b6caed}.table-warning,.table-warning>td,.table-warning>th{background-color:#f5e6ce}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#edd0a5}.table-hover .table-warning:hover,.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#f1dbb9}.table-danger,.table-danger>td,.table-danger>th{background-color:#f9cfcf}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#f4a6a7}.table-hover .table-danger:hover,.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f6b8b8}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfd}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfbfc}.table-hover .table-light:hover,.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#f0f0f0}.table-dark,.table-dark>td,.table-dark>th{background-color:#c1c3c5}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#8c9093}.table-hover .table-dark:hover,.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b4b6b9}.table-active,.table-active>td,.table-active>th{background-color:rgba(34,41,47,.075)}.table-hover .table-active:hover,.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(23,28,32,.075)}.table .thead-dark th{color:#fff;background-color:#1e1e1e;border-color:#313131}.table .thead-light th{color:#4e5154;background-color:#ededed;border-color:#eff1f7}.table-dark{color:#fff;background-color:#1e1e1e}.table-dark td,.table-dark th,.table-dark thead th{border-color:#313131}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:hsla(0,0%,100%,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:hsla(0,0%,100%,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:34px;padding:.7rem;font-size:.96rem;font-weight:400;line-height:1.25;color:#4e5154;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:5px;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#4e5154;background-color:#fff;border-color:#586cb1;outline:0;box-shadow:0 3px 10px 0 rgba(0,0,0,.15)}.form-control::-moz-placeholder{color:rgba(0,0,0,.5);opacity:1}.form-control:-ms-input-placeholder{color:rgba(0,0,0,.5);opacity:1}.form-control::placeholder{color:rgba(0,0,0,.5);opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#f5f5f1;opacity:1}select.form-control:focus::-ms-value{color:#4e5154;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.7rem + 1px);padding-bottom:calc(.7rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.25}.col-form-label-lg{padding-top:calc(1rem + 1px);padding-bottom:calc(1rem + 1px);font-size:1.25rem;line-height:1.25}.col-form-label-sm{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:.7rem;line-height:1}.form-control-plaintext{display:block;width:100%;padding-top:.7rem;padding-bottom:.7rem;margin-bottom:0;line-height:1.25;color:#adb5bd;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:2rem;padding:.5rem 1.5rem;font-size:.7rem;line-height:1;border-radius:4px}.form-control-lg{height:calc(1.25em + 2rem + 2px);padding:1rem 2.5rem;font-size:1.25rem;line-height:1.25;border-radius:6px}select.form-control[multiple],select.form-control[size],textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:flex;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#b8c2cc}.form-check-label{margin-bottom:0}.form-check-inline{display:inline-flex;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:smaller;color:#21b978}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:1rem;line-height:1.45;color:#fff;background-color:rgba(33,185,120,.9);border-radius:.5rem}.form-control.is-valid,.was-validated .form-control:valid{border-color:#21b978;padding-right:calc(1.25em + 1.4rem);background-repeat:no-repeat;background-position:100% calc(.3125em + .35rem);background-size:calc(.625em + .7rem) calc(.625em + .7rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#21b978;box-shadow:0 0 0 .2rem rgba(33,185,120,.25)}.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.25em + 1.4rem);background-position:top calc(.3125em + .35rem) right calc(.3125em + .35rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#21b978;padding-right:calc(.75em + 2.75rem);background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%231e1e1e' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .7rem center/8px 10px,url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%2321b978' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E") #fff no-repeat center right 1.7rem/calc(.625em + .7rem) calc(.625em + .7rem)}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#21b978;box-shadow:0 0 0 .2rem rgba(33,185,120,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.form-control-file.is-valid~.valid-feedback,.form-control-file.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip,.was-validated .form-control-file:valid~.valid-feedback,.was-validated .form-control-file:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#21b978}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#21b978}.custom-control-input.is-valid~.custom-control-label:before,.was-validated .custom-control-input:valid~.custom-control-label:before{border-color:#21b978}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label:before,.was-validated .custom-control-input:valid:checked~.custom-control-label:before{border-color:#32db93;background-color:#32db93}.custom-control-input.is-valid:focus~.custom-control-label:before,.was-validated .custom-control-input:valid:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem rgba(33,185,120,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label:before,.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#21b978}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#21b978;box-shadow:0 0 0 .2rem rgba(33,185,120,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:smaller;color:#ea5455}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:1rem;line-height:1.45;color:#fff;background-color:rgba(234,84,85,.9);border-radius:.5rem}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#ea5455;padding-right:calc(1.25em + 1.4rem);background-repeat:no-repeat;background-position:100% calc(.3125em + .35rem);background-size:calc(.625em + .7rem) calc(.625em + .7rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#ea5455;box-shadow:0 0 0 .2rem rgba(234,84,85,.25)}.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.25em + 1.4rem);background-position:top calc(.3125em + .35rem) right calc(.3125em + .35rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#ea5455;padding-right:calc(.75em + 2.75rem);background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%231e1e1e' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .7rem center/8px 10px,url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23ea5455' viewBox='-2 -2 7 7'%3E%3Cpath stroke='%23ea5455' d='M0 0l3 3m0-3L0 3'/%3E%3Ccircle r='.5'/%3E%3Ccircle cx='3' r='.5'/%3E%3Ccircle cy='3' r='.5'/%3E%3Ccircle cx='3' cy='3' r='.5'/%3E%3C/svg%3E") #fff no-repeat center right 1.7rem/calc(.625em + .7rem) calc(.625em + .7rem)}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#ea5455;box-shadow:0 0 0 .2rem rgba(234,84,85,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.form-control-file.is-invalid~.invalid-feedback,.form-control-file.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip,.was-validated .form-control-file:invalid~.invalid-feedback,.was-validated .form-control-file:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#ea5455}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#ea5455}.custom-control-input.is-invalid~.custom-control-label:before,.was-validated .custom-control-input:invalid~.custom-control-label:before{border-color:#ea5455}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label:before,.was-validated .custom-control-input:invalid:checked~.custom-control-label:before{border-color:#f08182;background-color:#f08182}.custom-control-input.is-invalid:focus~.custom-control-label:before,.was-validated .custom-control-input:invalid:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem rgba(234,84,85,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label:before,.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#ea5455}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#ea5455;box-shadow:0 0 0 .2rem rgba(234,84,85,.25)}.form-inline{display:flex;flex-flow:row wrap;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{justify-content:center}.form-inline .form-group,.form-inline label{display:flex;align-items:center;margin-bottom:0}.form-inline .form-group{flex:0 0 auto;flex-flow:row wrap}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:flex;align-items:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{align-items:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#626262;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:0 solid transparent;padding:.9rem 2rem;font-size:1rem;line-height:1;border-radius:.42rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#626262;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(88,108,177,.25)}.btn.disabled,.btn:disabled{opacity:.65}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#586cb1;border-color:#586cb1}.btn-primary:hover{color:#fff;background-color:#4f63a8;border-color:#4f63a8}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(113,130,189,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#586cb1;border-color:#586cb1}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#4c60a3;border-color:#4c60a3}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(113,130,189,.5)}.btn-secondary{color:#2a2e30;background-color:#b8c2cc;border-color:#b8c2cc}.btn-secondary:hover{color:#2a2e30;background-color:#aeb9c5;border-color:#aeb9c5}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(163,172,181,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#2a2e30;background-color:#b8c2cc;border-color:#b8c2cc}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#2a2e30;background-color:#a9b5c1;border-color:#a9b5c1}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(163,172,181,.5)}.btn-success{color:#fff;background-color:#21b978;border-color:#21b978}.btn-success:hover{color:#fff;background-color:#1eaa6e;border-color:#1eaa6e}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(66,196,140,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#21b978;border-color:#21b978}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1da36a;border-color:#1da36a}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(66,196,140,.5)}.btn-info{color:#fff;background-color:#4277cf;border-color:#4277cf}.btn-info:hover{color:#fff;background-color:#346dcb;border-color:#346dcb}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(94,139,214,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#4277cf;border-color:#4277cf}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#3269c5;border-color:#3269c5}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(94,139,214,.5)}.btn-warning{color:#2a2e30;background-color:#dda451;border-color:#dda451}.btn-warning:hover{color:#2a2e30;background-color:#da9c42;border-color:#da9c42}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(194,146,76,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#2a2e30;background-color:#dda451;border-color:#dda451}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#2a2e30;background-color:#d9993c;border-color:#d9993c}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(194,146,76,.5)}.btn-danger{color:#fff;background-color:#ea5455;border-color:#ea5455}.btn-danger:hover{color:#fff;background-color:#e84445;border-color:#e84445}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(237,110,111,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#ea5455;border-color:#ea5455}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#e73d3e;border-color:#e73d3e}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(237,110,111,.5)}.btn-light{color:#2a2e30;background-color:#f7f7f9;border-color:#f7f7f9}.btn-light:hover{color:#2a2e30;background-color:#ededf1;border-color:#ededf1}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#2a2e30;background-color:#f7f7f9;border-color:#f7f7f9}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#2a2e30;background-color:#e8e8ee;border-color:#e8e8ee}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#22292f;border-color:#22292f}.btn-dark:hover{color:#fff;background-color:#1b2025;border-color:#1b2025}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(67,73,78,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#22292f;border-color:#22292f}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#171c20;border-color:#171c20}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(67,73,78,.5)}.btn-outline-primary,.btn-outline-primary:hover{color:#586cb1;border-color:#586cb1}.btn-outline-primary:hover{background-color:rgba(88,108,177,.1)}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(88,108,177,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#586cb1;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#586cb1;border-color:#586cb1}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(88,108,177,.5)}.btn-outline-secondary,.btn-outline-secondary:hover{color:#b8c2cc;border-color:#b8c2cc}.btn-outline-secondary:hover{background-color:rgba(184,194,204,.1)}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(184,194,204,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#b8c2cc;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#2a2e30;background-color:#b8c2cc;border-color:#b8c2cc}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(184,194,204,.5)}.btn-outline-success,.btn-outline-success:hover{color:#21b978;border-color:#21b978}.btn-outline-success:hover{background-color:rgba(33,185,120,.1)}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(33,185,120,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#21b978;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#21b978;border-color:#21b978}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(33,185,120,.5)}.btn-outline-info,.btn-outline-info:hover{color:#4277cf;border-color:#4277cf}.btn-outline-info:hover{background-color:rgba(66,119,207,.1)}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(66,119,207,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#4277cf;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#4277cf;border-color:#4277cf}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(66,119,207,.5)}.btn-outline-warning,.btn-outline-warning:hover{color:#dda451;border-color:#dda451}.btn-outline-warning:hover{background-color:rgba(221,164,81,.1)}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(221,164,81,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#dda451;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#2a2e30;background-color:#dda451;border-color:#dda451}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(221,164,81,.5)}.btn-outline-danger,.btn-outline-danger:hover{color:#ea5455;border-color:#ea5455}.btn-outline-danger:hover{background-color:rgba(234,84,85,.1)}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(234,84,85,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#ea5455;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#ea5455;border-color:#ea5455}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(234,84,85,.5)}.btn-outline-light,.btn-outline-light:hover{color:#f7f7f9;border-color:#f7f7f9}.btn-outline-light:hover{background-color:rgba(247,247,249,.1)}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(247,247,249,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f7f7f9;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#2a2e30;background-color:#f7f7f9;border-color:#f7f7f9}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(247,247,249,.5)}.btn-outline-dark,.btn-outline-dark:hover{color:#22292f;border-color:#22292f}.btn-outline-dark:hover{background-color:rgba(34,41,47,.1)}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(34,41,47,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#22292f;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#22292f;border-color:#22292f}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(34,41,47,.5)}.btn-link{font-weight:400;color:#4c60a3;text-decoration:none}.btn-link:hover{color:#3c4b80;text-decoration:none}.btn-link.focus,.btn-link:focus{text-decoration:none;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#b8c2cc;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:1rem 2.5rem;font-size:1.25rem;line-height:1.25;border-radius:.4285rem}.btn-group-sm>.btn,.btn-sm{padding:.5rem 1.5rem;font-size:.7rem;line-height:1;border-radius:.4285rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown-toggle{white-space:nowrap}.dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty:after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:10;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.5rem 0 0;font-size:.9375rem;color:#626262;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(34,41,47,.15);border-radius:5px}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.5rem}.dropup .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.5rem}.dropright .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-toggle:after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.5rem}.dropleft .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";display:none}.dropleft .dropdown-toggle:before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty:after{margin-left:0}.dropleft .dropdown-toggle:before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid rgba(0,0,0,.08)}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#2a2e30;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#1e2122;text-decoration:none;background-color:#eff1f7}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#586cb1}.dropdown-item.disabled,.dropdown-item:disabled{color:#b8c2cc;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:1rem;color:#b8c2cc;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#2a2e30}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;flex:1 1 auto}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:0}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:1.5rem;padding-left:1.5rem}.dropdown-toggle-split:after,.dropright .dropdown-toggle-split:after,.dropup .dropdown-toggle-split:after{margin-left:0}.dropleft .dropdown-toggle-split:before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:1.125rem;padding-left:1.125rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:1.875rem;padding-left:1.875rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:0}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio],.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:flex;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label:after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:flex;align-items:center;padding:.7rem;margin-bottom:0;font-size:.96rem;font-weight:400;line-height:1.25;color:#4e5154;text-align:center;white-space:nowrap;background-color:#ededed;border:1px solid rgba(0,0,0,.2);border-radius:5px}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.25em + 2rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:1rem 2.5rem;font-size:1.25rem;line-height:1.25;border-radius:6px}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:2rem}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.5rem 1.5rem;font-size:.7rem;line-height:1;border-radius:4px}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.7rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.45rem;padding-left:1.5rem}.custom-control-inline{display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label:before{color:#fff;border-color:#586cb1;background-color:#586cb1}.custom-control-input:focus~.custom-control-label:before{box-shadow:0 3px 10px 0 rgba(0,0,0,.15)}.custom-control-input:focus:not(:checked)~.custom-control-label:before{border-color:#586cb1}.custom-control-input:not(:disabled):active~.custom-control-label:before{color:#fff;background-color:#d2d7ea;border-color:#d2d7ea}.custom-control-input:disabled~.custom-control-label{color:#b8c2cc}.custom-control-input:disabled~.custom-control-label:before{background-color:#f5f5f1}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label:before{pointer-events:none;background-color:#fff;border:1px solid #adb5bd}.custom-control-label:after,.custom-control-label:before{position:absolute;top:.225rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:""}.custom-control-label:after{background:no-repeat 50%/50% 50%}.custom-checkbox .custom-control-label:before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:before{border-color:#586cb1;background-color:#586cb1}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(88,108,177,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label:before{background-color:rgba(88,108,177,.5)}.custom-radio .custom-control-label:before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(88,108,177,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label:before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label:after{top:calc(.225rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label:after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label:after{background-color:#fff;transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(88,108,177,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.25em + 1.4rem + 1px);padding:.7rem 1.7rem .7rem .7rem;font-size:.96rem;font-weight:400;line-height:1.25;color:#4e5154;vertical-align:middle;background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%231e1e1e' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .7rem center/8px 10px;background-color:#fff;border:1px solid rgba(0,0,0,.2);border-radius:5px;appearance:none}.custom-select:focus{border-color:#586cb1;outline:0;box-shadow:0 3px 10px 0 rgba(0,0,0,.15)}.custom-select:focus::-ms-value{color:#4e5154;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.7rem;background-image:none}.custom-select:disabled{color:#b8c2cc;background-color:#ededed}.custom-select::-ms-expand{display:none}.custom-select-sm{height:2rem;padding-top:.5rem;padding-bottom:.5rem;padding-left:1.5rem;font-size:.7rem}.custom-select-lg{height:calc(1.25em + 2rem + 2px);padding-top:1rem;padding-bottom:1rem;padding-left:2.5rem;font-size:1.25rem}.custom-file{display:inline-block;margin-bottom:0}.custom-file,.custom-file-input{position:relative;width:100%;height:calc(1.25em + 1.4rem + 1px)}.custom-file-input{z-index:2;margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#586cb1;box-shadow:0 3px 10px 0 rgba(0,0,0,.15)}.custom-file-input:disabled~.custom-file-label{background-color:#f5f5f1}.custom-file-input:lang(en)~.custom-file-label:after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]:after{content:attr(data-browse)}.custom-file-label{left:0;z-index:1;height:calc(1.25em + 1.4rem + 1px);font-weight:400;background-color:#fff;border:1px solid rgba(0,0,0,.2);border-radius:5px}.custom-file-label,.custom-file-label:after{position:absolute;top:0;right:0;padding:.7rem;line-height:1.5rem;color:#4e5154}.custom-file-label:after{bottom:0;z-index:3;display:block;height:calc(1.25em + 1.4rem);content:"Browse";background-color:#ededed;border-left:inherit;border-radius:0 5px 5px 0}.custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:none}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 3px 10px 0 rgba(0,0,0,.15)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 3px 10px 0 rgba(0,0,0,.15)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 3px 10px 0 rgba(0,0,0,.15)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#586cb1;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#d2d7ea}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dae1e7;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#586cb1;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{-moz-transition:none;transition:none}}.custom-range::-moz-range-thumb:active{background-color:#d2d7ea}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dae1e7;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#586cb1;border:0;border-radius:1rem;-ms-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{-ms-transition:none;transition:none}}.custom-range::-ms-thumb:active{background-color:#d2d7ea}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower,.custom-range::-ms-fill-upper{background-color:#dae1e7;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label:before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label:before,.custom-file-label,.custom-select{transition:none}}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.357rem .5rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#b8c2cc;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dae1e7}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.5rem;border-top-right-radius:.5rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#ededed #ededed #dae1e7}.nav-tabs .nav-link.disabled{color:#b8c2cc;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#4e5154;background-color:#eff1f7;border-color:#dae1e7 #dae1e7 #eff1f7}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.5rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#586cb1}.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;padding:.5rem 1rem}.navbar,.navbar>.container,.navbar>.container-fluid{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:-.368rem;padding-bottom:-.368rem;margin-right:1rem;font-size:2rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.357rem;padding-bottom:.357rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:2rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.42rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat 50%;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand,.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(34,41,47,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(34,41,47,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(34,41,47,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(34,41,47,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(34,41,47,.9)}.navbar-light .navbar-toggler{color:rgba(34,41,47,.5);border-color:rgba(34,41,47,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(34, 41, 47, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-light .navbar-text{color:rgba(34,41,47,.5)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(34,41,47,.9)}.navbar-dark .navbar-brand,.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:hsla(0,0%,100%,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:hsla(0,0%,100%,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:hsla(0,0%,100%,.5);border-color:hsla(0,0%,100%,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-dark .navbar-text{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(34,41,47,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem}.card-subtitle,.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{margin-bottom:0;background-color:rgba(34,41,47,.03);border-bottom:1px solid rgba(34,41,47,.125)}.card-header:first-child{border-radius:calc(.5rem - 1px) calc(.5rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(34,41,47,.03);border-top:1px solid rgba(34,41,47,.125)}.card-footer:last-child{border-radius:0 0 calc(.5rem - 1px) calc(.5rem - 1px)}.card-header-tabs{margin-bottom:-.75rem;border-bottom:0}.card-header-pills,.card-header-tabs{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.5rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.5rem - 1px);border-top-right-radius:calc(.5rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.5rem - 1px);border-bottom-left-radius:calc(.5rem - 1px)}.card-deck{display:flex;flex-direction:column}.card-deck .card{margin-bottom:14px}@media (min-width:576px){.card-deck{flex-flow:row wrap;margin-right:-14px;margin-left:-14px}.card-deck .card{display:flex;flex:1 0 0%;flex-direction:column;margin-right:14px;margin-bottom:0;margin-left:14px}}.card-group{display:flex;flex-direction:column}.card-group>.card{margin-bottom:14px}@media (min-width:576px){.card-group{flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-moz-column-count:3;column-count:3;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion>.card{overflow:hidden}.accordion>.card:not(:first-of-type) .card-header:first-child{border-radius:0}.accordion>.card:not(:first-of-type):not(:last-of-type){border-bottom:0;border-radius:0}.accordion>.card:first-of-type{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:last-of-type{border-top-left-radius:0;border-top-right-radius:0}.accordion>.card .card-header{margin-bottom:-1px}.breadcrumb{display:flex;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#ededed;border-radius:.5rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item:before{display:inline-block;padding-right:.5rem;color:#b8c2cc;content:"/"}.breadcrumb-item+.breadcrumb-item:hover:before{text-decoration:underline;text-decoration:none}.breadcrumb-item.active{color:#b8c2cc}.pagination{display:flex;padding-left:0;list-style:none;border-radius:.5rem}.page-link{position:relative;display:block;padding:.65rem .911rem;margin-left:-1px;line-height:1.25;color:#4c60a3;background-color:#fff;border:1px solid #dae1e7}.page-link:hover{z-index:2;color:#3c4b80;text-decoration:none;background-color:#ededed;border-color:#dae1e7}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(88,108,177,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.5rem;border-bottom-left-radius:.5rem}.page-item:last-child .page-link{border-top-right-radius:.5rem;border-bottom-right-radius:.5rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#586cb1;border-color:#586cb1}.page-item.disabled .page-link{color:#b8c2cc;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dae1e7}.pagination-lg .page-link{padding:.5rem 1rem;font-size:2rem;line-height:1.25}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.6rem;border-bottom-left-radius:.6rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.6rem;border-bottom-right-radius:.6rem}.pagination-sm .page-link{padding:.5rem .75rem;font-size:1rem;line-height:1}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.5rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#586cb1}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#445692}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(88,108,177,.5)}.badge-secondary{color:#2a2e30;background-color:#b8c2cc}a.badge-secondary:focus,a.badge-secondary:hover{color:#2a2e30;background-color:#9aa9b7}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(184,194,204,.5)}.badge-success{color:#fff;background-color:#21b978}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#198e5c}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(33,185,120,.5)}.badge-info{color:#fff;background-color:#4277cf}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#2d5fb1}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(66,119,207,.5)}.badge-warning{color:#2a2e30;background-color:#dda451}a.badge-warning:focus,a.badge-warning:hover{color:#2a2e30;background-color:#d28d29}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(221,164,81,.5)}.badge-danger{color:#fff;background-color:#ea5455}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#e42728}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(234,84,85,.5)}.badge-light{color:#2a2e30;background-color:#f7f7f9}a.badge-light:focus,a.badge-light:hover{color:#2a2e30;background-color:#dadae3}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(247,247,249,.5)}.badge-dark{color:#fff;background-color:#22292f}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#0d0f11}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(34,41,47,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#ededed;border-radius:.6rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.5rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close,.alert-dismissible .mailbox-attachment-close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#3e4c73;background-color:#dee2ef;border-color:#d0d6e9}.alert-primary hr{border-top-color:#bfc7e1}.alert-primary .alert-link{color:#2c3652}.alert-secondary{color:#707981;background-color:#f1f3f5;border-color:#ebeef1}.alert-secondary hr{border-top-color:#dce1e7}.alert-secondary .alert-link{color:#585f66}.alert-success{color:#217455;background-color:#d3f1e4;border-color:#c1ebd9}.alert-success hr{border-top-color:#aee5cd}.alert-success .alert-link{color:#164c38}.alert-info{color:#335282;background-color:#d9e4f5;border-color:#cad9f2}.alert-info hr{border-top-color:#b6caed}.alert-info .alert-link{color:#253b5d}.alert-warning{color:#836941;background-color:#f8eddc;border-color:#f5e6ce}.alert-warning hr{border-top-color:#f1dbb9}.alert-warning .alert-link{color:#614e30}.alert-danger{color:#8a3f43;background-color:#fbdddd;border-color:#f9cfcf}.alert-danger hr{border-top-color:#f6b8b8}.alert-danger .alert-link{color:#672f32}.alert-light{color:#919498;background-color:#fdfdfe;border-color:#fdfdfd}.alert-light hr{border-top-color:#f0f0f0}.alert-light .alert-link{color:#777a7f}.alert-dark{color:#22292f;background-color:#d3d4d5;border-color:#c1c3c5}.alert-dark hr{border-top-color:#b4b6b9}.alert-dark .alert-link{color:#0d0f11}@-webkit-keyframes progress-bar-stripes{0%{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{0%{background-position:1rem 0}to{background-position:0 0}}.progress{display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#ededed;border-radius:.5rem}.progress-bar{display:flex;flex-direction:column;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#586cb1;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.media{display:flex;align-items:flex-start}.media-body{flex:1}.list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#4e5154;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#4e5154;text-decoration:none;background-color:#babfc7}.list-group-item-action:active{color:#626262;background-color:#ededed}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(34,41,47,.125)}.list-group-item:first-child{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.5rem;border-bottom-left-radius:.5rem}.list-group-item.disabled,.list-group-item:disabled{color:#b8c2cc;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#586cb1;border-color:#586cb1}.list-group-horizontal{flex-direction:row}.list-group-horizontal .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal .list-group-item:first-child{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem;border-top-right-radius:0}.list-group-horizontal .list-group-item:last-child{margin-right:0;border-top-right-radius:.5rem;border-bottom-right-radius:.5rem;border-bottom-left-radius:0}@media (min-width:576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-sm .list-group-item:first-child{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem;border-top-right-radius:0}.list-group-horizontal-sm .list-group-item:last-child{margin-right:0;border-top-right-radius:.5rem;border-bottom-right-radius:.5rem;border-bottom-left-radius:0}}@media (min-width:768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-md .list-group-item:first-child{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem;border-top-right-radius:0}.list-group-horizontal-md .list-group-item:last-child{margin-right:0;border-top-right-radius:.5rem;border-bottom-right-radius:.5rem;border-bottom-left-radius:0}}@media (min-width:992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-lg .list-group-item:first-child{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem;border-top-right-radius:0}.list-group-horizontal-lg .list-group-item:last-child{margin-right:0;border-top-right-radius:.5rem;border-bottom-right-radius:.5rem;border-bottom-left-radius:0}}@media (min-width:1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-xl .list-group-item:first-child{border-top-left-radius:.5rem;border-bottom-left-radius:.5rem;border-top-right-radius:0}.list-group-horizontal-xl .list-group-item:last-child{margin-right:0;border-top-right-radius:.5rem;border-bottom-right-radius:.5rem;border-bottom-left-radius:0}}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush .list-group-item:last-child{margin-bottom:-1px}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{margin-bottom:0;border-bottom:0}.list-group-item-primary{color:#3e4c73;background-color:#d0d6e9}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#3e4c73;background-color:#bfc7e1}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#3e4c73;border-color:#3e4c73}.list-group-item-secondary{color:#707981;background-color:#ebeef1}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#707981;background-color:#dce1e7}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#707981;border-color:#707981}.list-group-item-success{color:#217455;background-color:#c1ebd9}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#217455;background-color:#aee5cd}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#217455;border-color:#217455}.list-group-item-info{color:#335282;background-color:#cad9f2}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#335282;background-color:#b6caed}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#335282;border-color:#335282}.list-group-item-warning{color:#836941;background-color:#f5e6ce}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#836941;background-color:#f1dbb9}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#836941;border-color:#836941}.list-group-item-danger{color:#8a3f43;background-color:#f9cfcf}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#8a3f43;background-color:#f6b8b8}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#8a3f43;border-color:#8a3f43}.list-group-item-light{color:#919498;background-color:#fdfdfd}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#919498;background-color:#f0f0f0}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#919498;border-color:#919498}.list-group-item-dark{color:#22292f;background-color:#c1c3c5}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#22292f;background-color:#b4b6b9}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#22292f;border-color:#22292f}.close,.mailbox-attachment-close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#22292f;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover,.mailbox-attachment-close:hover{color:#22292f;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover,.mailbox-attachment-close:not(:disabled):not(.disabled):focus,.mailbox-attachment-close:not(:disabled):not(.disabled):hover{opacity:.75}button.close,button.mailbox-attachment-close{padding:0;background-color:transparent;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}a.close.disabled,a.disabled.mailbox-attachment-close{pointer-events:none}.toast{max-width:350px;overflow:hidden;font-size:.875rem;background-color:hsla(0,0%,100%,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(34,41,47,.1);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:flex;align-items:center;padding:.25rem .75rem;color:#b8c2cc;background-color:hsla(0,0%,100%,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translateY(-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal-dialog-scrollable{display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered:before{display:block;height:calc(100vh - 1rem);content:""}.modal-dialog-centered.modal-dialog-scrollable{flex-direction:column;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable:before{content:none}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(34,41,47,.2);border-radius:.6rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#22292f}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;align-items:flex-start;justify-content:space-between;padding:1rem;border-bottom:1px solid #ededed;border-top-left-radius:.6rem;border-top-right-radius:.6rem}.modal-header .close,.modal-header .mailbox-attachment-close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.45}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;align-items:center;justify-content:flex-end;padding:1rem;border-top:1px solid #ededed;border-bottom-right-radius:.6rem;border-bottom-left-radius:.6rem}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered:before{height:calc(100vh - 3.5rem)}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:Montserrat,Helvetica,Arial,serif;font-style:normal;font-weight:400;line-height:1.45;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:1rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow:before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow:before,.bs-tooltip-top .arrow:before{top:0;border-width:.4rem .4rem 0;border-top-color:#22292f}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow:before,.bs-tooltip-right .arrow:before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#22292f}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow:before,.bs-tooltip-bottom .arrow:before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#22292f}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow:before,.bs-tooltip-left .arrow:before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#22292f}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#22292f;border-radius:.5rem}.popover{top:0;left:0;z-index:1060;max-width:276px;font-family:Montserrat,Helvetica,Arial,serif;font-style:normal;font-weight:400;line-height:1.45;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:1rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(34,41,47,.2);border-radius:.6rem}.popover,.popover .arrow{position:absolute;display:block}.popover .arrow{width:1rem;height:.5rem;margin:0 .6rem}.popover .arrow:after,.popover .arrow:before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc(-.5rem + -1px)}.bs-popover-auto[x-placement^=top]>.arrow:before,.bs-popover-top>.arrow:before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(34,41,47,.25)}.bs-popover-auto[x-placement^=top]>.arrow:after,.bs-popover-top>.arrow:after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc(-.5rem + -1px);width:.5rem;height:1rem;margin:.6rem 0}.bs-popover-auto[x-placement^=right]>.arrow:before,.bs-popover-right>.arrow:before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(34,41,47,.25)}.bs-popover-auto[x-placement^=right]>.arrow:after,.bs-popover-right>.arrow:after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc(-.5rem + -1px)}.bs-popover-auto[x-placement^=bottom]>.arrow:before,.bs-popover-bottom>.arrow:before{top:0;border-width:0 .5rem .5rem;border-bottom-color:rgba(34,41,47,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow:after,.bs-popover-bottom>.arrow:after{top:1px;border-width:0 .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header:before,.bs-popover-bottom .popover-header:before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc(-.5rem + -1px);width:.5rem;height:1rem;margin:.6rem 0}.bs-popover-auto[x-placement^=left]>.arrow:before,.bs-popover-left>.arrow:before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(34,41,47,.25)}.bs-popover-auto[x-placement^=left]>.arrow:after,.bs-popover-left>.arrow:after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;color:#2c2c2c;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.6rem - 1px);border-top-right-radius:calc(.6rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#626262}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner:after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:no-repeat 50%/100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3E%3C/svg%3E")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:flex;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@-webkit-keyframes spinner-border{to{transform:rotate(1turn)}}@keyframes spinner-border{to{transform:rotate(1turn)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid;border-right:.25em solid transparent;border-radius:50%;-webkit-animation:spinner-border .75s linear infinite;animation:spinner-border .75s linear infinite}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1}}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:spinner-grow .75s linear infinite;animation:spinner-grow .75s linear infinite}.spinner-grow-sm{width:1rem;height:1rem}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#445692!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#9aa9b7!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#198e5c!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#2d5fb1!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d28d29!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#e42728!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dadae3!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#0d0f11!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #ededed!important}.border-top{border-top:1px solid #ededed!important}.border-right{border-right:1px solid #ededed!important}.border-bottom{border-bottom:1px solid #ededed!important}.border-left{border-left:1px solid #ededed!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#586cb1!important}.border-secondary{border-color:#b8c2cc!important}.border-success{border-color:#21b978!important}.border-info{border-color:#4277cf!important}.border-warning{border-color:#dda451!important}.border-danger{border-color:#ea5455!important}.border-light{border-color:#f7f7f9!important}.border-dark{border-color:#22292f!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.25rem!important}.rounded{border-radius:.5rem!important}.rounded-top{border-top-left-radius:.5rem!important}.rounded-right,.rounded-top{border-top-right-radius:.5rem!important}.rounded-bottom,.rounded-right{border-bottom-right-radius:.5rem!important}.rounded-bottom,.rounded-left{border-bottom-left-radius:.5rem!important}.rounded-left{border-top-left-radius:.5rem!important}.rounded-lg{border-radius:.6rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix:after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive:before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9:before{padding-top:42.8571428571%}.embed-responsive-16by9:before{padding-top:56.25%}.embed-responsive-4by3:before{padding-top:75%}.embed-responsive-1by1:before{padding-top:100%}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-fill{flex:1 1 auto!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}@media (min-width:576px){.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}}@media (min-width:768px){.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{top:0}.fixed-footer .footer,.fixed-top{position:fixed;right:0;left:0;z-index:1030}.fixed-footer .footer{bottom:0}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(34,41,47,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(34,41,47,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(34,41,47,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.stretched-link:after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:transparent}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:1rem!important}.mt-1,.my-1{margin-top:1rem!important}.mr-1,.mx-1{margin-right:1rem!important}.mb-1,.my-1{margin-bottom:1rem!important}.ml-1,.mx-1{margin-left:1rem!important}.m-2{margin:1.5rem!important}.mt-2,.my-2{margin-top:1.5rem!important}.mr-2,.mx-2{margin-right:1.5rem!important}.mb-2,.my-2{margin-bottom:1.5rem!important}.ml-2,.mx-2{margin-left:1.5rem!important}.m-3{margin:3rem!important}.mt-3,.my-3{margin-top:3rem!important}.mr-3,.mx-3{margin-right:3rem!important}.mb-3,.my-3{margin-bottom:3rem!important}.ml-3,.mx-3{margin-left:3rem!important}.m-4{margin:3.5rem!important}.mt-4,.my-4{margin-top:3.5rem!important}.mr-4,.mx-4{margin-right:3.5rem!important}.mb-4,.my-4{margin-bottom:3.5rem!important}.ml-4,.mx-4{margin-left:3.5rem!important}.m-5{margin:4rem!important}.mt-5,.my-5{margin-top:4rem!important}.mr-5,.mx-5{margin-right:4rem!important}.mb-5,.my-5{margin-bottom:4rem!important}.ml-5,.mx-5{margin-left:4rem!important}.m-25{margin:.25rem!important}.mt-25,.my-25{margin-top:.25rem!important}.mr-25,.mx-25{margin-right:.25rem!important}.mb-25,.my-25{margin-bottom:.25rem!important}.ml-25,.mx-25{margin-left:.25rem!important}.m-50{margin:.5rem!important}.mt-50,.my-50{margin-top:.5rem!important}.mr-50,.mx-50{margin-right:.5rem!important}.mb-50,.my-50{margin-bottom:.5rem!important}.ml-50,.mx-50{margin-left:.5rem!important}.m-75{margin:.75rem!important}.mt-75,.my-75{margin-top:.75rem!important}.mr-75,.mx-75{margin-right:.75rem!important}.mb-75,.my-75{margin-bottom:.75rem!important}.ml-75,.mx-75{margin-left:.75rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:1rem!important}.pt-1,.py-1{padding-top:1rem!important}.pr-1,.px-1{padding-right:1rem!important}.pb-1,.py-1{padding-bottom:1rem!important}.pl-1,.px-1{padding-left:1rem!important}.p-2{padding:1.5rem!important}.pt-2,.py-2{padding-top:1.5rem!important}.pr-2,.px-2{padding-right:1.5rem!important}.pb-2,.py-2{padding-bottom:1.5rem!important}.pl-2,.px-2{padding-left:1.5rem!important}.p-3{padding:3rem!important}.pt-3,.py-3{padding-top:3rem!important}.pr-3,.px-3{padding-right:3rem!important}.pb-3,.py-3{padding-bottom:3rem!important}.pl-3,.px-3{padding-left:3rem!important}.p-4{padding:3.5rem!important}.pt-4,.py-4{padding-top:3.5rem!important}.pr-4,.px-4{padding-right:3.5rem!important}.pb-4,.py-4{padding-bottom:3.5rem!important}.pl-4,.px-4{padding-left:3.5rem!important}.p-5{padding:4rem!important}.pt-5,.py-5{padding-top:4rem!important}.pr-5,.px-5{padding-right:4rem!important}.pb-5,.py-5{padding-bottom:4rem!important}.pl-5,.px-5{padding-left:4rem!important}.p-25{padding:.25rem!important}.pt-25,.py-25{padding-top:.25rem!important}.pr-25,.px-25{padding-right:.25rem!important}.pb-25,.py-25{padding-bottom:.25rem!important}.pl-25,.px-25{padding-left:.25rem!important}.p-50{padding:.5rem!important}.pt-50,.py-50{padding-top:.5rem!important}.pr-50,.px-50{padding-right:.5rem!important}.pb-50,.py-50{padding-bottom:.5rem!important}.pl-50,.px-50{padding-left:.5rem!important}.p-75{padding:.75rem!important}.pt-75,.py-75{padding-top:.75rem!important}.pr-75,.px-75{padding-right:.75rem!important}.pb-75,.py-75{padding-bottom:.75rem!important}.pl-75,.px-75{padding-left:.75rem!important}.m-n1{margin:-1rem!important}.mt-n1,.my-n1{margin-top:-1rem!important}.mr-n1,.mx-n1{margin-right:-1rem!important}.mb-n1,.my-n1{margin-bottom:-1rem!important}.ml-n1,.mx-n1{margin-left:-1rem!important}.m-n2{margin:-1.5rem!important}.mt-n2,.my-n2{margin-top:-1.5rem!important}.mr-n2,.mx-n2{margin-right:-1.5rem!important}.mb-n2,.my-n2{margin-bottom:-1.5rem!important}.ml-n2,.mx-n2{margin-left:-1.5rem!important}.m-n3{margin:-3rem!important}.mt-n3,.my-n3{margin-top:-3rem!important}.mr-n3,.mx-n3{margin-right:-3rem!important}.mb-n3,.my-n3{margin-bottom:-3rem!important}.ml-n3,.mx-n3{margin-left:-3rem!important}.m-n4{margin:-3.5rem!important}.mt-n4,.my-n4{margin-top:-3.5rem!important}.mr-n4,.mx-n4{margin-right:-3.5rem!important}.mb-n4,.my-n4{margin-bottom:-3.5rem!important}.ml-n4,.mx-n4{margin-left:-3.5rem!important}.m-n5{margin:-4rem!important}.mt-n5,.my-n5{margin-top:-4rem!important}.mr-n5,.mx-n5{margin-right:-4rem!important}.mb-n5,.my-n5{margin-bottom:-4rem!important}.ml-n5,.mx-n5{margin-left:-4rem!important}.m-n25{margin:-.25rem!important}.mt-n25,.my-n25{margin-top:-.25rem!important}.mr-n25,.mx-n25{margin-right:-.25rem!important}.mb-n25,.my-n25{margin-bottom:-.25rem!important}.ml-n25,.mx-n25{margin-left:-.25rem!important}.m-n50{margin:-.5rem!important}.mt-n50,.my-n50{margin-top:-.5rem!important}.mr-n50,.mx-n50{margin-right:-.5rem!important}.mb-n50,.my-n50{margin-bottom:-.5rem!important}.ml-n50,.mx-n50{margin-left:-.5rem!important}.m-n75{margin:-.75rem!important}.mt-n75,.my-n75{margin-top:-.75rem!important}.mr-n75,.mx-n75{margin-right:-.75rem!important}.mb-n75,.my-n75{margin-bottom:-.75rem!important}.ml-n75,.mx-n75{margin-left:-.75rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:1rem!important}.mt-sm-1,.my-sm-1{margin-top:1rem!important}.mr-sm-1,.mx-sm-1{margin-right:1rem!important}.mb-sm-1,.my-sm-1{margin-bottom:1rem!important}.ml-sm-1,.mx-sm-1{margin-left:1rem!important}.m-sm-2{margin:1.5rem!important}.mt-sm-2,.my-sm-2{margin-top:1.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:1.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:1.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:1.5rem!important}.m-sm-3{margin:3rem!important}.mt-sm-3,.my-sm-3{margin-top:3rem!important}.mr-sm-3,.mx-sm-3{margin-right:3rem!important}.mb-sm-3,.my-sm-3{margin-bottom:3rem!important}.ml-sm-3,.mx-sm-3{margin-left:3rem!important}.m-sm-4{margin:3.5rem!important}.mt-sm-4,.my-sm-4{margin-top:3.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:3.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:3.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:3.5rem!important}.m-sm-5{margin:4rem!important}.mt-sm-5,.my-sm-5{margin-top:4rem!important}.mr-sm-5,.mx-sm-5{margin-right:4rem!important}.mb-sm-5,.my-sm-5{margin-bottom:4rem!important}.ml-sm-5,.mx-sm-5{margin-left:4rem!important}.m-sm-25{margin:.25rem!important}.mt-sm-25,.my-sm-25{margin-top:.25rem!important}.mr-sm-25,.mx-sm-25{margin-right:.25rem!important}.mb-sm-25,.my-sm-25{margin-bottom:.25rem!important}.ml-sm-25,.mx-sm-25{margin-left:.25rem!important}.m-sm-50{margin:.5rem!important}.mt-sm-50,.my-sm-50{margin-top:.5rem!important}.mr-sm-50,.mx-sm-50{margin-right:.5rem!important}.mb-sm-50,.my-sm-50{margin-bottom:.5rem!important}.ml-sm-50,.mx-sm-50{margin-left:.5rem!important}.m-sm-75{margin:.75rem!important}.mt-sm-75,.my-sm-75{margin-top:.75rem!important}.mr-sm-75,.mx-sm-75{margin-right:.75rem!important}.mb-sm-75,.my-sm-75{margin-bottom:.75rem!important}.ml-sm-75,.mx-sm-75{margin-left:.75rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:1rem!important}.pt-sm-1,.py-sm-1{padding-top:1rem!important}.pr-sm-1,.px-sm-1{padding-right:1rem!important}.pb-sm-1,.py-sm-1{padding-bottom:1rem!important}.pl-sm-1,.px-sm-1{padding-left:1rem!important}.p-sm-2{padding:1.5rem!important}.pt-sm-2,.py-sm-2{padding-top:1.5rem!important}.pr-sm-2,.px-sm-2{padding-right:1.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:1.5rem!important}.pl-sm-2,.px-sm-2{padding-left:1.5rem!important}.p-sm-3{padding:3rem!important}.pt-sm-3,.py-sm-3{padding-top:3rem!important}.pr-sm-3,.px-sm-3{padding-right:3rem!important}.pb-sm-3,.py-sm-3{padding-bottom:3rem!important}.pl-sm-3,.px-sm-3{padding-left:3rem!important}.p-sm-4{padding:3.5rem!important}.pt-sm-4,.py-sm-4{padding-top:3.5rem!important}.pr-sm-4,.px-sm-4{padding-right:3.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:3.5rem!important}.pl-sm-4,.px-sm-4{padding-left:3.5rem!important}.p-sm-5{padding:4rem!important}.pt-sm-5,.py-sm-5{padding-top:4rem!important}.pr-sm-5,.px-sm-5{padding-right:4rem!important}.pb-sm-5,.py-sm-5{padding-bottom:4rem!important}.pl-sm-5,.px-sm-5{padding-left:4rem!important}.p-sm-25{padding:.25rem!important}.pt-sm-25,.py-sm-25{padding-top:.25rem!important}.pr-sm-25,.px-sm-25{padding-right:.25rem!important}.pb-sm-25,.py-sm-25{padding-bottom:.25rem!important}.pl-sm-25,.px-sm-25{padding-left:.25rem!important}.p-sm-50{padding:.5rem!important}.pt-sm-50,.py-sm-50{padding-top:.5rem!important}.pr-sm-50,.px-sm-50{padding-right:.5rem!important}.pb-sm-50,.py-sm-50{padding-bottom:.5rem!important}.pl-sm-50,.px-sm-50{padding-left:.5rem!important}.p-sm-75{padding:.75rem!important}.pt-sm-75,.py-sm-75{padding-top:.75rem!important}.pr-sm-75,.px-sm-75{padding-right:.75rem!important}.pb-sm-75,.py-sm-75{padding-bottom:.75rem!important}.pl-sm-75,.px-sm-75{padding-left:.75rem!important}.m-sm-n1{margin:-1rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-1rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-1rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-1rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-1rem!important}.m-sm-n2{margin:-1.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-1.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-1.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-1.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-1.5rem!important}.m-sm-n3{margin:-3rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-3rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-3rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-3rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-3rem!important}.m-sm-n4{margin:-3.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-3.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-3.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-3.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-3.5rem!important}.m-sm-n5{margin:-4rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-4rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-4rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-4rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-4rem!important}.m-sm-n25{margin:-.25rem!important}.mt-sm-n25,.my-sm-n25{margin-top:-.25rem!important}.mr-sm-n25,.mx-sm-n25{margin-right:-.25rem!important}.mb-sm-n25,.my-sm-n25{margin-bottom:-.25rem!important}.ml-sm-n25,.mx-sm-n25{margin-left:-.25rem!important}.m-sm-n50{margin:-.5rem!important}.mt-sm-n50,.my-sm-n50{margin-top:-.5rem!important}.mr-sm-n50,.mx-sm-n50{margin-right:-.5rem!important}.mb-sm-n50,.my-sm-n50{margin-bottom:-.5rem!important}.ml-sm-n50,.mx-sm-n50{margin-left:-.5rem!important}.m-sm-n75{margin:-.75rem!important}.mt-sm-n75,.my-sm-n75{margin-top:-.75rem!important}.mr-sm-n75,.mx-sm-n75{margin-right:-.75rem!important}.mb-sm-n75,.my-sm-n75{margin-bottom:-.75rem!important}.ml-sm-n75,.mx-sm-n75{margin-left:-.75rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:1rem!important}.mt-md-1,.my-md-1{margin-top:1rem!important}.mr-md-1,.mx-md-1{margin-right:1rem!important}.mb-md-1,.my-md-1{margin-bottom:1rem!important}.ml-md-1,.mx-md-1{margin-left:1rem!important}.m-md-2{margin:1.5rem!important}.mt-md-2,.my-md-2{margin-top:1.5rem!important}.mr-md-2,.mx-md-2{margin-right:1.5rem!important}.mb-md-2,.my-md-2{margin-bottom:1.5rem!important}.ml-md-2,.mx-md-2{margin-left:1.5rem!important}.m-md-3{margin:3rem!important}.mt-md-3,.my-md-3{margin-top:3rem!important}.mr-md-3,.mx-md-3{margin-right:3rem!important}.mb-md-3,.my-md-3{margin-bottom:3rem!important}.ml-md-3,.mx-md-3{margin-left:3rem!important}.m-md-4{margin:3.5rem!important}.mt-md-4,.my-md-4{margin-top:3.5rem!important}.mr-md-4,.mx-md-4{margin-right:3.5rem!important}.mb-md-4,.my-md-4{margin-bottom:3.5rem!important}.ml-md-4,.mx-md-4{margin-left:3.5rem!important}.m-md-5{margin:4rem!important}.mt-md-5,.my-md-5{margin-top:4rem!important}.mr-md-5,.mx-md-5{margin-right:4rem!important}.mb-md-5,.my-md-5{margin-bottom:4rem!important}.ml-md-5,.mx-md-5{margin-left:4rem!important}.m-md-25{margin:.25rem!important}.mt-md-25,.my-md-25{margin-top:.25rem!important}.mr-md-25,.mx-md-25{margin-right:.25rem!important}.mb-md-25,.my-md-25{margin-bottom:.25rem!important}.ml-md-25,.mx-md-25{margin-left:.25rem!important}.m-md-50{margin:.5rem!important}.mt-md-50,.my-md-50{margin-top:.5rem!important}.mr-md-50,.mx-md-50{margin-right:.5rem!important}.mb-md-50,.my-md-50{margin-bottom:.5rem!important}.ml-md-50,.mx-md-50{margin-left:.5rem!important}.m-md-75{margin:.75rem!important}.mt-md-75,.my-md-75{margin-top:.75rem!important}.mr-md-75,.mx-md-75{margin-right:.75rem!important}.mb-md-75,.my-md-75{margin-bottom:.75rem!important}.ml-md-75,.mx-md-75{margin-left:.75rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:1rem!important}.pt-md-1,.py-md-1{padding-top:1rem!important}.pr-md-1,.px-md-1{padding-right:1rem!important}.pb-md-1,.py-md-1{padding-bottom:1rem!important}.pl-md-1,.px-md-1{padding-left:1rem!important}.p-md-2{padding:1.5rem!important}.pt-md-2,.py-md-2{padding-top:1.5rem!important}.pr-md-2,.px-md-2{padding-right:1.5rem!important}.pb-md-2,.py-md-2{padding-bottom:1.5rem!important}.pl-md-2,.px-md-2{padding-left:1.5rem!important}.p-md-3{padding:3rem!important}.pt-md-3,.py-md-3{padding-top:3rem!important}.pr-md-3,.px-md-3{padding-right:3rem!important}.pb-md-3,.py-md-3{padding-bottom:3rem!important}.pl-md-3,.px-md-3{padding-left:3rem!important}.p-md-4{padding:3.5rem!important}.pt-md-4,.py-md-4{padding-top:3.5rem!important}.pr-md-4,.px-md-4{padding-right:3.5rem!important}.pb-md-4,.py-md-4{padding-bottom:3.5rem!important}.pl-md-4,.px-md-4{padding-left:3.5rem!important}.p-md-5{padding:4rem!important}.pt-md-5,.py-md-5{padding-top:4rem!important}.pr-md-5,.px-md-5{padding-right:4rem!important}.pb-md-5,.py-md-5{padding-bottom:4rem!important}.pl-md-5,.px-md-5{padding-left:4rem!important}.p-md-25{padding:.25rem!important}.pt-md-25,.py-md-25{padding-top:.25rem!important}.pr-md-25,.px-md-25{padding-right:.25rem!important}.pb-md-25,.py-md-25{padding-bottom:.25rem!important}.pl-md-25,.px-md-25{padding-left:.25rem!important}.p-md-50{padding:.5rem!important}.pt-md-50,.py-md-50{padding-top:.5rem!important}.pr-md-50,.px-md-50{padding-right:.5rem!important}.pb-md-50,.py-md-50{padding-bottom:.5rem!important}.pl-md-50,.px-md-50{padding-left:.5rem!important}.p-md-75{padding:.75rem!important}.pt-md-75,.py-md-75{padding-top:.75rem!important}.pr-md-75,.px-md-75{padding-right:.75rem!important}.pb-md-75,.py-md-75{padding-bottom:.75rem!important}.pl-md-75,.px-md-75{padding-left:.75rem!important}.m-md-n1{margin:-1rem!important}.mt-md-n1,.my-md-n1{margin-top:-1rem!important}.mr-md-n1,.mx-md-n1{margin-right:-1rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-1rem!important}.ml-md-n1,.mx-md-n1{margin-left:-1rem!important}.m-md-n2{margin:-1.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-1.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-1.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-1.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-1.5rem!important}.m-md-n3{margin:-3rem!important}.mt-md-n3,.my-md-n3{margin-top:-3rem!important}.mr-md-n3,.mx-md-n3{margin-right:-3rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-3rem!important}.ml-md-n3,.mx-md-n3{margin-left:-3rem!important}.m-md-n4{margin:-3.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-3.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-3.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-3.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-3.5rem!important}.m-md-n5{margin:-4rem!important}.mt-md-n5,.my-md-n5{margin-top:-4rem!important}.mr-md-n5,.mx-md-n5{margin-right:-4rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-4rem!important}.ml-md-n5,.mx-md-n5{margin-left:-4rem!important}.m-md-n25{margin:-.25rem!important}.mt-md-n25,.my-md-n25{margin-top:-.25rem!important}.mr-md-n25,.mx-md-n25{margin-right:-.25rem!important}.mb-md-n25,.my-md-n25{margin-bottom:-.25rem!important}.ml-md-n25,.mx-md-n25{margin-left:-.25rem!important}.m-md-n50{margin:-.5rem!important}.mt-md-n50,.my-md-n50{margin-top:-.5rem!important}.mr-md-n50,.mx-md-n50{margin-right:-.5rem!important}.mb-md-n50,.my-md-n50{margin-bottom:-.5rem!important}.ml-md-n50,.mx-md-n50{margin-left:-.5rem!important}.m-md-n75{margin:-.75rem!important}.mt-md-n75,.my-md-n75{margin-top:-.75rem!important}.mr-md-n75,.mx-md-n75{margin-right:-.75rem!important}.mb-md-n75,.my-md-n75{margin-bottom:-.75rem!important}.ml-md-n75,.mx-md-n75{margin-left:-.75rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:1rem!important}.mt-lg-1,.my-lg-1{margin-top:1rem!important}.mr-lg-1,.mx-lg-1{margin-right:1rem!important}.mb-lg-1,.my-lg-1{margin-bottom:1rem!important}.ml-lg-1,.mx-lg-1{margin-left:1rem!important}.m-lg-2{margin:1.5rem!important}.mt-lg-2,.my-lg-2{margin-top:1.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:1.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:1.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:1.5rem!important}.m-lg-3{margin:3rem!important}.mt-lg-3,.my-lg-3{margin-top:3rem!important}.mr-lg-3,.mx-lg-3{margin-right:3rem!important}.mb-lg-3,.my-lg-3{margin-bottom:3rem!important}.ml-lg-3,.mx-lg-3{margin-left:3rem!important}.m-lg-4{margin:3.5rem!important}.mt-lg-4,.my-lg-4{margin-top:3.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:3.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:3.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:3.5rem!important}.m-lg-5{margin:4rem!important}.mt-lg-5,.my-lg-5{margin-top:4rem!important}.mr-lg-5,.mx-lg-5{margin-right:4rem!important}.mb-lg-5,.my-lg-5{margin-bottom:4rem!important}.ml-lg-5,.mx-lg-5{margin-left:4rem!important}.m-lg-25{margin:.25rem!important}.mt-lg-25,.my-lg-25{margin-top:.25rem!important}.mr-lg-25,.mx-lg-25{margin-right:.25rem!important}.mb-lg-25,.my-lg-25{margin-bottom:.25rem!important}.ml-lg-25,.mx-lg-25{margin-left:.25rem!important}.m-lg-50{margin:.5rem!important}.mt-lg-50,.my-lg-50{margin-top:.5rem!important}.mr-lg-50,.mx-lg-50{margin-right:.5rem!important}.mb-lg-50,.my-lg-50{margin-bottom:.5rem!important}.ml-lg-50,.mx-lg-50{margin-left:.5rem!important}.m-lg-75{margin:.75rem!important}.mt-lg-75,.my-lg-75{margin-top:.75rem!important}.mr-lg-75,.mx-lg-75{margin-right:.75rem!important}.mb-lg-75,.my-lg-75{margin-bottom:.75rem!important}.ml-lg-75,.mx-lg-75{margin-left:.75rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:1rem!important}.pt-lg-1,.py-lg-1{padding-top:1rem!important}.pr-lg-1,.px-lg-1{padding-right:1rem!important}.pb-lg-1,.py-lg-1{padding-bottom:1rem!important}.pl-lg-1,.px-lg-1{padding-left:1rem!important}.p-lg-2{padding:1.5rem!important}.pt-lg-2,.py-lg-2{padding-top:1.5rem!important}.pr-lg-2,.px-lg-2{padding-right:1.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:1.5rem!important}.pl-lg-2,.px-lg-2{padding-left:1.5rem!important}.p-lg-3{padding:3rem!important}.pt-lg-3,.py-lg-3{padding-top:3rem!important}.pr-lg-3,.px-lg-3{padding-right:3rem!important}.pb-lg-3,.py-lg-3{padding-bottom:3rem!important}.pl-lg-3,.px-lg-3{padding-left:3rem!important}.p-lg-4{padding:3.5rem!important}.pt-lg-4,.py-lg-4{padding-top:3.5rem!important}.pr-lg-4,.px-lg-4{padding-right:3.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:3.5rem!important}.pl-lg-4,.px-lg-4{padding-left:3.5rem!important}.p-lg-5{padding:4rem!important}.pt-lg-5,.py-lg-5{padding-top:4rem!important}.pr-lg-5,.px-lg-5{padding-right:4rem!important}.pb-lg-5,.py-lg-5{padding-bottom:4rem!important}.pl-lg-5,.px-lg-5{padding-left:4rem!important}.p-lg-25{padding:.25rem!important}.pt-lg-25,.py-lg-25{padding-top:.25rem!important}.pr-lg-25,.px-lg-25{padding-right:.25rem!important}.pb-lg-25,.py-lg-25{padding-bottom:.25rem!important}.pl-lg-25,.px-lg-25{padding-left:.25rem!important}.p-lg-50{padding:.5rem!important}.pt-lg-50,.py-lg-50{padding-top:.5rem!important}.pr-lg-50,.px-lg-50{padding-right:.5rem!important}.pb-lg-50,.py-lg-50{padding-bottom:.5rem!important}.pl-lg-50,.px-lg-50{padding-left:.5rem!important}.p-lg-75{padding:.75rem!important}.pt-lg-75,.py-lg-75{padding-top:.75rem!important}.pr-lg-75,.px-lg-75{padding-right:.75rem!important}.pb-lg-75,.py-lg-75{padding-bottom:.75rem!important}.pl-lg-75,.px-lg-75{padding-left:.75rem!important}.m-lg-n1{margin:-1rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-1rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-1rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-1rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-1rem!important}.m-lg-n2{margin:-1.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-1.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-1.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-1.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-1.5rem!important}.m-lg-n3{margin:-3rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-3rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-3rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-3rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-3rem!important}.m-lg-n4{margin:-3.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-3.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-3.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-3.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-3.5rem!important}.m-lg-n5{margin:-4rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-4rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-4rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-4rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-4rem!important}.m-lg-n25{margin:-.25rem!important}.mt-lg-n25,.my-lg-n25{margin-top:-.25rem!important}.mr-lg-n25,.mx-lg-n25{margin-right:-.25rem!important}.mb-lg-n25,.my-lg-n25{margin-bottom:-.25rem!important}.ml-lg-n25,.mx-lg-n25{margin-left:-.25rem!important}.m-lg-n50{margin:-.5rem!important}.mt-lg-n50,.my-lg-n50{margin-top:-.5rem!important}.mr-lg-n50,.mx-lg-n50{margin-right:-.5rem!important}.mb-lg-n50,.my-lg-n50{margin-bottom:-.5rem!important}.ml-lg-n50,.mx-lg-n50{margin-left:-.5rem!important}.m-lg-n75{margin:-.75rem!important}.mt-lg-n75,.my-lg-n75{margin-top:-.75rem!important}.mr-lg-n75,.mx-lg-n75{margin-right:-.75rem!important}.mb-lg-n75,.my-lg-n75{margin-bottom:-.75rem!important}.ml-lg-n75,.mx-lg-n75{margin-left:-.75rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:1rem!important}.mt-xl-1,.my-xl-1{margin-top:1rem!important}.mr-xl-1,.mx-xl-1{margin-right:1rem!important}.mb-xl-1,.my-xl-1{margin-bottom:1rem!important}.ml-xl-1,.mx-xl-1{margin-left:1rem!important}.m-xl-2{margin:1.5rem!important}.mt-xl-2,.my-xl-2{margin-top:1.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:1.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:1.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:1.5rem!important}.m-xl-3{margin:3rem!important}.mt-xl-3,.my-xl-3{margin-top:3rem!important}.mr-xl-3,.mx-xl-3{margin-right:3rem!important}.mb-xl-3,.my-xl-3{margin-bottom:3rem!important}.ml-xl-3,.mx-xl-3{margin-left:3rem!important}.m-xl-4{margin:3.5rem!important}.mt-xl-4,.my-xl-4{margin-top:3.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:3.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:3.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:3.5rem!important}.m-xl-5{margin:4rem!important}.mt-xl-5,.my-xl-5{margin-top:4rem!important}.mr-xl-5,.mx-xl-5{margin-right:4rem!important}.mb-xl-5,.my-xl-5{margin-bottom:4rem!important}.ml-xl-5,.mx-xl-5{margin-left:4rem!important}.m-xl-25{margin:.25rem!important}.mt-xl-25,.my-xl-25{margin-top:.25rem!important}.mr-xl-25,.mx-xl-25{margin-right:.25rem!important}.mb-xl-25,.my-xl-25{margin-bottom:.25rem!important}.ml-xl-25,.mx-xl-25{margin-left:.25rem!important}.m-xl-50{margin:.5rem!important}.mt-xl-50,.my-xl-50{margin-top:.5rem!important}.mr-xl-50,.mx-xl-50{margin-right:.5rem!important}.mb-xl-50,.my-xl-50{margin-bottom:.5rem!important}.ml-xl-50,.mx-xl-50{margin-left:.5rem!important}.m-xl-75{margin:.75rem!important}.mt-xl-75,.my-xl-75{margin-top:.75rem!important}.mr-xl-75,.mx-xl-75{margin-right:.75rem!important}.mb-xl-75,.my-xl-75{margin-bottom:.75rem!important}.ml-xl-75,.mx-xl-75{margin-left:.75rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:1rem!important}.pt-xl-1,.py-xl-1{padding-top:1rem!important}.pr-xl-1,.px-xl-1{padding-right:1rem!important}.pb-xl-1,.py-xl-1{padding-bottom:1rem!important}.pl-xl-1,.px-xl-1{padding-left:1rem!important}.p-xl-2{padding:1.5rem!important}.pt-xl-2,.py-xl-2{padding-top:1.5rem!important}.pr-xl-2,.px-xl-2{padding-right:1.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:1.5rem!important}.pl-xl-2,.px-xl-2{padding-left:1.5rem!important}.p-xl-3{padding:3rem!important}.pt-xl-3,.py-xl-3{padding-top:3rem!important}.pr-xl-3,.px-xl-3{padding-right:3rem!important}.pb-xl-3,.py-xl-3{padding-bottom:3rem!important}.pl-xl-3,.px-xl-3{padding-left:3rem!important}.p-xl-4{padding:3.5rem!important}.pt-xl-4,.py-xl-4{padding-top:3.5rem!important}.pr-xl-4,.px-xl-4{padding-right:3.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:3.5rem!important}.pl-xl-4,.px-xl-4{padding-left:3.5rem!important}.p-xl-5{padding:4rem!important}.pt-xl-5,.py-xl-5{padding-top:4rem!important}.pr-xl-5,.px-xl-5{padding-right:4rem!important}.pb-xl-5,.py-xl-5{padding-bottom:4rem!important}.pl-xl-5,.px-xl-5{padding-left:4rem!important}.p-xl-25{padding:.25rem!important}.pt-xl-25,.py-xl-25{padding-top:.25rem!important}.pr-xl-25,.px-xl-25{padding-right:.25rem!important}.pb-xl-25,.py-xl-25{padding-bottom:.25rem!important}.pl-xl-25,.px-xl-25{padding-left:.25rem!important}.p-xl-50{padding:.5rem!important}.pt-xl-50,.py-xl-50{padding-top:.5rem!important}.pr-xl-50,.px-xl-50{padding-right:.5rem!important}.pb-xl-50,.py-xl-50{padding-bottom:.5rem!important}.pl-xl-50,.px-xl-50{padding-left:.5rem!important}.p-xl-75{padding:.75rem!important}.pt-xl-75,.py-xl-75{padding-top:.75rem!important}.pr-xl-75,.px-xl-75{padding-right:.75rem!important}.pb-xl-75,.py-xl-75{padding-bottom:.75rem!important}.pl-xl-75,.px-xl-75{padding-left:.75rem!important}.m-xl-n1{margin:-1rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-1rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-1rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-1rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-1rem!important}.m-xl-n2{margin:-1.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-1.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-1.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-1.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-1.5rem!important}.m-xl-n3{margin:-3rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-3rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-3rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-3rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-3rem!important}.m-xl-n4{margin:-3.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-3.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-3.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-3.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-3.5rem!important}.m-xl-n5{margin:-4rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-4rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-4rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-4rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-4rem!important}.m-xl-n25{margin:-.25rem!important}.mt-xl-n25,.my-xl-n25{margin-top:-.25rem!important}.mr-xl-n25,.mx-xl-n25{margin-right:-.25rem!important}.mb-xl-n25,.my-xl-n25{margin-bottom:-.25rem!important}.ml-xl-n25,.mx-xl-n25{margin-left:-.25rem!important}.m-xl-n50{margin:-.5rem!important}.mt-xl-n50,.my-xl-n50{margin-top:-.5rem!important}.mr-xl-n50,.mx-xl-n50{margin-right:-.5rem!important}.mb-xl-n50,.my-xl-n50{margin-bottom:-.5rem!important}.ml-xl-n50,.mx-xl-n50{margin-left:-.5rem!important}.m-xl-n75{margin:-.75rem!important}.mt-xl-n75,.my-xl-n75{margin-top:-.75rem!important}.mr-xl-n75,.mx-xl-n75{margin-right:-.75rem!important}.mb-xl-n75,.my-xl-n75{margin-bottom:-.75rem!important}.ml-xl-n75,.mx-xl-n75{margin-left:-.75rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-monospace{font-family:Montserrat,Helvetica,Arial,serif!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#586cb1!important}a.text-primary:focus,a.text-primary:hover{color:#3c4b80!important}.text-secondary{color:#b8c2cc!important}a.text-secondary:focus,a.text-secondary:hover{color:#8b9cac!important}.text-success{color:#21b978!important}a.text-success:focus,a.text-success:hover{color:#15784e!important}.text-info{color:#4277cf!important}a.text-info:focus,a.text-info:hover{color:#28549d!important}.text-warning{color:#dda451!important}a.text-warning:focus,a.text-warning:hover{color:#bd7f25!important}.text-danger{color:#ea5455!important}a.text-danger:focus,a.text-danger:hover{color:#d71a1c!important}.text-light{color:#f7f7f9!important}a.text-light:focus,a.text-light:hover{color:#cbcbd8!important}.text-dark{color:#22292f!important}a.text-dark:focus,a.text-dark:hover{color:#020203!important}.text-body{color:#626262!important}.text-muted{color:#b8c2cc!important}.text-black-50{color:rgba(34,41,47,.5)!important}.text-white-50{color:hsla(0,0%,100%,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;overflow-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,:after,:before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]:after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}.container,body{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #22292f}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dae1e7!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#eff1f7}.table .thead-dark th{color:inherit;border-color:#eff1f7}}code{padding:.1rem .4rem;font-size:90%;color:#ff8acc;background-color:#eee;border-radius:.25rem}pre{background-color:#f7f7f9}pre code{background-color:transparent!important}.form-control::-moz-placeholder{font-size:.85rem;color:rgba(34,41,47,.4);-moz-transition:all .2s ease;transition:all .2s ease}.form-control:-ms-input-placeholder{font-size:.85rem;color:rgba(34,41,47,.4);-ms-transition:all .2s ease;transition:all .2s ease}.form-control::placeholder{font-size:.85rem;color:rgba(34,41,47,.4);transition:all .2s ease}.form-control:-ms-input-placeholder{color:#abb6d5}.form-control:focus::-moz-placeholder{transform:translate(5px);-moz-transition:all .2s ease;transition:all .2s ease}.form-control:focus:-ms-input-placeholder{transform:translate(5px);-ms-transition:all .2s ease;transition:all .2s ease}.form-control:focus::placeholder{transform:translate(5px);transition:all .2s ease}.form-control:focus~.form-control-position i{color:#586cb1}label{color:#2b3656;font-size:.85rem;margin-bottom:0;padding-left:.2rem}textarea.form-control{line-height:1.6rem;font-size:1rem}.form-group{margin-bottom:1.5rem}.form-control{border:1px solid #c6cde3;color:#3c4b78}.form-section{color:#b8c2cc;line-height:3rem;margin-bottom:20px;border-bottom:1px solid #b8c2cc}.form-section i{font-size:20px;margin-left:5px;margin-right:10px}.form-actions{border-top:1px solid #cdd3e6;padding:20px 0;margin-top:20px}.form-actions.filled{background-color:#eff1f7}.form-actions.center{text-align:center}.form-actions.right{text-align:right}.form-actions.top{border-top:0;border-bottom:1px solid #cdd3e6;margin-top:0;margin-bottom:20px}@media (max-width:767.98px){.form-actions .buttons-group{float:left!important;margin-bottom:10px}}@media (min-width:576px){.form-horizontal .form-group .label-control{text-align:right}}.form-control.form-control-lg{padding:1rem}.form-control.form-control-lg::-moz-placeholder{font-size:1.25rem}.form-control.form-control-lg:-ms-input-placeholder{font-size:1.25rem}.form-control.form-control-lg::placeholder{font-size:1.25rem}.form-control.form-control-sm{padding:.6rem}.form-control.form-control-sm::-moz-placeholder{font-size:.7rem}.form-control.form-control-sm:-ms-input-placeholder{font-size:.7rem}.form-control.form-control-sm::placeholder{font-size:.7rem}.custom-file-label{padding:.4rem .7rem}.custom-file-label:after{padding:.4rem .7rem;height:auto}select.form-control:not([multiple=multiple]){background-position:calc(100% - 12px) 13px,calc(100% - 20px) 13px,100% 0;background-size:12px 12px,10px 10px;background-repeat:no-repeat;-webkit-appearance:none;-moz-appearance:none;padding-right:1.5rem}.custom-select{-moz-appearance:none;-webkit-appearance:none}.input-group-addon{background-color:#eceff1;border-color:#babfc7}.custom-control-label:after,.custom-control-label:before{width:1.143rem;height:1.143rem;top:.08rem}.custom-control-input:not(:disabled):active~.custom-control-label:before{background-color:#586cb1;border-color:#586cb1}.form-label-group{position:relative;margin-bottom:1.5rem}.form-label-group .form-control-lg~label{font-size:1.25rem;padding:1rem}.form-label-group .form-control-sm~label{font-size:.7rem}.form-label-group>label{position:absolute;top:0;left:0;display:block;transition:all .25s ease-in-out;padding:.6rem;pointer-events:none;cursor:text;color:rgba(34,41,47,.4);font-size:.85rem;opacity:0}.form-label-group>input,.form-label-group textarea{padding:.6rem}.form-label-group>input:focus:not(:-moz-placeholder-shown)~label,.form-label-group>input:not(:active):not(:-moz-placeholder-shown)~label,.form-label-group textarea:focus:not(:-moz-placeholder-shown)~label,.form-label-group textarea:not(:active):not(:-moz-placeholder-shown)~label{color:#586cb1!important;-moz-transition:all .25s ease-in-out;transition:all .25s ease-in-out;opacity:1}.form-label-group>input:focus:not(:-ms-input-placeholder)~label,.form-label-group>input:not(:active):not(:-ms-input-placeholder)~label,.form-label-group textarea:focus:not(:-ms-input-placeholder)~label,.form-label-group textarea:not(:active):not(:-ms-input-placeholder)~label{color:#586cb1!important;-ms-transition:all .25s ease-in-out;transition:all .25s ease-in-out;opacity:1}.form-label-group>input:focus:not(:placeholder-shown)~label,.form-label-group>input:not(:active):not(:placeholder-shown)~label,.form-label-group textarea:focus:not(:placeholder-shown)~label,.form-label-group textarea:not(:active):not(:placeholder-shown)~label{color:#586cb1!important;transition:all .25s ease-in-out;opacity:1}.form-label-group>input:not(:focus):not(:-moz-placeholder-shown)~label,.form-label-group textarea:not(:focus):not(:-moz-placeholder-shown)~label{color:rgba(34,41,47,.4)!important}.form-label-group>input:not(:focus):not(:-ms-input-placeholder)~label,.form-label-group textarea:not(:focus):not(:-ms-input-placeholder)~label{color:rgba(34,41,47,.4)!important}.form-label-group>input:not(:focus):not(:placeholder-shown)~label,.form-label-group textarea:not(:focus):not(:placeholder-shown)~label{color:rgba(34,41,47,.4)!important}.form-label-group>input:not(:-moz-placeholder-shown)~label,.form-label-group textarea:not(:-moz-placeholder-shown)~label{padding:.25rem 0;font-size:.7rem;top:-20px;left:3px}.form-label-group>input:not(:-ms-input-placeholder)~label,.form-label-group textarea:not(:-ms-input-placeholder)~label{padding:.25rem 0;font-size:.7rem;top:-20px;left:3px}.form-label-group>input:not(:placeholder-shown)~label,.form-label-group textarea:not(:placeholder-shown)~label{padding:.25rem 0;font-size:.7rem;top:-20px;left:3px}.form-label-group.has-icon-left>label{left:36px}.vs-checkbox-con{position:relative;display:flex;align-items:center;justify-content:flex-start;margin:.25rem 0}.vs-checkbox-con input{position:absolute;width:100%;height:100%;opacity:0;z-index:200;cursor:pointer;top:0}.vs-checkbox-con input:checked~.vs-checkbox{transform:rotate(0deg);border-color:#586cb1}.vs-checkbox-con input:checked~.vs-checkbox .vs-checkbox--check{transform:translate(0);background-color:#586cb1}.vs-checkbox-con input:checked~.vs-checkbox .vs-checkbox--check .vs-icon{transform:translate(0);line-height:1.2;opacity:1}.vs-checkbox-con input:checked~.vs-checkbox.vs-checkbox-sm .vs-checkbox--check .vs-icon{font-size:.75rem}.vs-checkbox-con input:checked~.vs-checkbox.vs-checkbox-lg .vs-checkbox--check .vs-icon{font-size:1.2rem}.vs-checkbox-con input:active:checked+.vs-checkbox .vs-checkbox--check{transform:translate(3px);background-color:#586cb1}.vs-checkbox-con input:active:checked+.vs-checkbox .vs-checkbox--check .vs-icon{opacity:1;transform:translate(6px)}.vs-checkbox-con input:disabled{cursor:default;pointer-events:none}.vs-checkbox-con input:disabled+.vs-checkbox{cursor:default;opacity:.5}.vs-checkbox-con .vs-checkbox{cursor:pointer;position:relative;width:20px;height:20px;border:2px solid #b8c2cc;border-radius:2px;transform:rotate(-90deg);transition:all .2s ease;overflow:hidden;margin-right:.5rem}.vs-checkbox-con .vs-checkbox.vs-checkbox-sm{width:15px;height:15px}.vs-checkbox-con .vs-checkbox.vs-checkbox-lg{width:24px;height:24px}.vs-checkbox-con .vs-checkbox .vs-checkbox--check{width:100%;height:100%;position:absolute;left:0;transform:translate(100%);transform-origin:right;transition:all .2s ease;z-index:10}.vs-checkbox-con .vs-checkbox .vs-checkbox--check .vs-icon{display:flex;justify-content:center;align-items:center;color:#fff}.vs-radio-con{position:relative;display:flex;align-items:center;justify-content:flex-start;margin:.25rem 0}.vs-radio-con input{position:absolute;width:100%;height:100%;opacity:0;z-index:200;cursor:pointer}.vs-radio-con input:checked~.vs-radio{transform:rotate(0deg);outline:0}.vs-radio-con input:checked~.vs-radio .vs-radio--circle{background:#586cb1;box-shadow:0 3px 12px 0 rgba(88,108,177,.4);opacity:1;transform:scale(1)}.vs-radio-con input:checked~.vs-radio .vs-radio--border{opacity:0;transform:scale(.3)}.vs-radio-con input:disabled{cursor:default;pointer-events:none}.vs-radio-con input:disabled+.vs-radio{cursor:default;opacity:.5}.vs-radio-con input:active~.vs-radio{transform:scale(1.1)}.vs-radio-con .vs-radio{cursor:pointer;position:relative;width:18px;height:18px;transition:all .2s ease;margin-right:.5rem}.vs-radio-con .vs-radio.vs-radio-sm{width:13px;height:13px}.vs-radio-con .vs-radio.vs-radio-lg{width:22px;height:22px}.vs-radio-con .vs-radio .vs-radio--border,.vs-radio-con .vs-radio .vs-radio--circle{width:100%;height:100%;position:absolute;left:0;transition:all .25s ease;top:0;border-radius:50%}.vs-radio-con .vs-radio .vs-radio--border{background:transparent;border:2px solid #b8c2cc}.vs-radio-con .vs-radio .vs-radio--circle{opacity:0;transform:scale(.1)}.counter-value{background-color:#586cb1;color:#fff;padding:1px 6px;font-size:.6rem;border-radius:0 0 5px 5px;margin-right:1rem}.form-group.input-divider-left .form-control-position i{padding:.2rem .5rem;border-right:1px solid #c6cde3}.form-group.input-divider-right .form-control-position i{padding:.2rem .5rem;border-left:1px solid #c6cde3}.input-group-lg .form-control,.input-group-sm .form-control{padding:.7rem}.bootstrap-touchspin.input-group{width:8.4rem;align-items:center}.bootstrap-touchspin.input-group .form-control{padding:5px;height:auto;border:0;background-color:#eff1f7;border-radius:5px!important;text-align:center;font-weight:500}.bootstrap-touchspin.input-group .form-control:focus{z-index:1;box-shadow:none}.bootstrap-touchspin .bootstrap-touchspin-injected{margin:0!important}.bootstrap-touchspin .bootstrap-touchspin-injected .bootstrap-touchspin-down,.bootstrap-touchspin .bootstrap-touchspin-injected .bootstrap-touchspin-up{padding:0;min-width:22px;min-height:22px;border-radius:5px!important;position:relative}.bootstrap-touchspin .bootstrap-touchspin-injected .bootstrap-touchspin-down i,.bootstrap-touchspin .bootstrap-touchspin-injected .bootstrap-touchspin-up i{font-size:.8rem;position:relative;top:-1px}.bootstrap-touchspin .bootstrap-touchspin-injected .bootstrap-touchspin-down{left:12px}.bootstrap-touchspin .bootstrap-touchspin-injected .bootstrap-touchspin-up{right:12px}.bootstrap-touchspin.disabled-touchspin .bootstrap-touchspin-down,.bootstrap-touchspin.disabled-touchspin .bootstrap-touchspin-up{background-color:rgba(0,0,0,.5)!important;cursor:default;opacity:.5}.bootstrap-touchspin.input-group-lg{width:9.375rem}.bootstrap-touchspin.input-group-lg .touchspin.form-control{height:auto!important}.bootstrap-touchspin.input-group-lg .bootstrap-touchspin-down i,.bootstrap-touchspin.input-group-lg .bootstrap-touchspin-up i{font-size:1rem}.bootstrap-touchspin.input-group-sm{width:6.25rem}.bootstrap-touchspin.input-group-sm .touchspin.form-control{height:auto!important}.bootstrap-touchspin.input-group-sm .bootstrap-touchspin-injected .bootstrap-touchspin-down,.bootstrap-touchspin.input-group-sm .bootstrap-touchspin-injected .bootstrap-touchspin-up{min-width:16px;min-height:16px;padding-top:2.2px}.bootstrap-touchspin.input-group-sm .bootstrap-touchspin-injected .bootstrap-touchspin-down i,.bootstrap-touchspin.input-group-sm .bootstrap-touchspin-injected .bootstrap-touchspin-up i{font-size:.6rem}.btn.disabled-max-min{background-color:rgba(0,0,0,.5)!important;cursor:default}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none}.bootstrap-touchspin.input-group input[type=number]{-moz-appearance:textfield}@media (-ms-high-contrast:none),screen and (-ms-high-contrast:active){.form-label-group label{display:none}select.form-control:not([multiple=multiple]){background:none}.custom-file-label:after{padding:1.34rem .7rem 1.25rem}}.picker__input.form-control{background-color:#fff}.input-group .form-control{height:auto}.input-group .input-group-append .dropdown-toggle:after,.input-group .input-group-prepend .dropdown-toggle:after{left:0}.input-group .input-group-append .vs-checkbox,.input-group .input-group-append .vs-checkbox-con,.input-group .input-group-append .vs-radio,.input-group .input-group-append .vs-radio-con,.input-group .input-group-prepend .vs-checkbox,.input-group .input-group-prepend .vs-checkbox-con,.input-group .input-group-prepend .vs-radio,.input-group .input-group-prepend .vs-radio-con{margin:0}.input-group.input-group-lg .form-control::-moz-placeholder{font-size:1.25rem}.input-group.input-group-lg .form-control:-ms-input-placeholder{font-size:1.25rem}.input-group.input-group-lg .form-control::placeholder{font-size:1.25rem}.input-group.input-group-lg .input-group-append .btn,.input-group.input-group-lg .input-group-prepend .btn{line-height:1.3;font-size:1.3rem}.input-group.input-group-sm .form-control::-moz-placeholder{font-size:.7rem}.input-group.input-group-sm .form-control:-ms-input-placeholder{font-size:.7rem}.input-group.input-group-sm .form-control::placeholder{font-size:.7rem}.btn:disabled{cursor:default}.btn.btn-white{background-color:#fff;color:#626262}.btn.btn-white:active,.btn.btn-white:focus,.btn.btn-white:hover{color:#626262!important}.btn.btn-white.btn-primary{background-color:#586cb1}.btn[class*=bg-gradient-]:hover{box-shadow:0 8px 25px -8px #aaa}.btn.btn-secondary{color:#fff}.btn.btn-secondary:hover{box-shadow:0 8px 25px -8px #b8c2cc}.btn.btn-dark:hover{box-shadow:0 8px 25px -8px #22292f}.btn.btn-light:hover{box-shadow:0 8px 25px -8px #f7f7f9}.btn.btn-outline-dark,.btn.btn-outline-light,.btn.btn-outline-secondary{border:1px solid}.btn[class*=btn-outline-]{padding-top:calc(.9rem - 1px);padding-bottom:calc(.9rem - 1px)}.btn-group-sm>.btn[class*=btn-outline-],.btn[class*=btn-outline-].btn-sm{padding-top:calc(.5rem - 1px);padding-bottom:calc(.5rem - 1px)}.btn.btn-icon{padding:.715rem .736rem}.btn-group-sm>.btn.btn-icon,.btn.btn-sm.btn-icon{padding:.5rem}.btn-group-lg>.btn.btn-icon,.btn.btn-lg.btn-icon{padding:1rem}.btn.btn-round{border-radius:2rem}.btn.active,.btn.focus,.btn:active,.btn:focus{outline:none;box-shadow:none!important}.btn.btn-icon i{font-size:1.1rem}.btn-white:hover,.btn.btn-outline-white:hover{color:#22292f!important}[type=reset],[type=submit],button,html [type=button]{cursor:pointer}.waves-button-input{padding:unset}.dropdown.show .btn-outline-light.dropdown-toggle,.dropdown.show .btn-outline-warning.dropdown-toggle{color:#fff}.dropdown .btn:not(.btn-sm):not(.btn-lg),.dropdown .btn:not(.btn-sm):not(.btn-lg).dropdown-toggle{padding:.85rem 1.5rem}.dropdown .btn:not(.btn-sm):not(.btn-lg).btn-round,.dropdown .btn:not(.btn-sm):not(.btn-lg).dropdown-toggle.btn-round{border-radius:2rem}.dropdown .btn.dropdown-toggle.dropdown-toggle-split{padding:.85rem 1rem;border-left-color:hsla(0,0%,100%,.2)!important;border-top-left-radius:0;border-bottom-left-radius:0}.dropdown [class*=btn-outline-].dropdown-toggle.dropdown-toggle-split{border-left:0!important}.dropdown [class*=btn-outline-].dropdown-toggle.dropdown-toggle-split:active{color:#fff}.dropdown .dropdown-menu{border:1px solid rgba(86,86,86,.05);border-radius:5px;transform:scaleY(0);box-shadow:0 5px 25px rgba(86,86,86,.1);min-width:8rem}.dropdown .dropdown-menu:before{content:"";position:absolute;top:-1px;left:1.2rem;width:.75rem;height:.75rem;display:block;background:#fff;transform:rotate(45deg) translate(-7px);border-top:1px solid rgba(86,86,86,.1);border-left:1px solid rgba(86,86,86,.1);z-index:10;box-sizing:border-box}.dropdown .dropdown-menu.dropdown-menu-right:before{right:.6rem;left:auto}.dropdown .dropdown-menu .dropdown-header{padding:.714rem 1.428rem;margin-top:.714rem}.dropdown .dropdown-menu .dropdown-item{padding:.5rem 1rem;color:#626262;width:auto;cursor:pointer}.dropdown .dropdown-menu .dropdown-item:hover{background-color:#eff1f7;color:#586cb1}.dropdown .dropdown-menu .dropdown-item.active{color:#fff}.dropdown .dropdown-menu .dropdown-item:active{background-color:transparent;color:#626262}.dropdown i{margin-right:.5rem}.dropdown.no-arrow .dropdown-toggle:after{display:none}.dropdown.no-arrow .dropdown-toggle i{margin-right:0}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown .dropdown-menu .dropdown-item,.dropleft .dropdown-menu .dropdown-item,.dropright .dropdown-menu .dropdown-item,.dropup .dropdown-menu .dropdown-item{padding:.714rem 1.428rem}.show>.dropdown-menu{transform:scale(1);opacity:1;display:block}.dropdown-toggle:after{border:none!important;font-family:feather;content:"\E842"!important;position:relative;top:1px;right:0;left:.714rem;padding:0;margin:0;vertical-align:0}.dropdown-toggle.dropdown-toggle-split{border-left:1px solid hsla(0,0%,100%,.2)}.dropdown-toggle.dropdown-toggle-split:after{left:0}.dropdown-toggle.nav-hide-arrow:after{display:none}.dropdown-toggle:focus{outline:0}.btn-secondary~.dropdown-menu .dropdown-item.active,.btn-secondary~.dropdown-menu .dropdown-item:hover{background-color:#ccc}.dropup{position:relative}.dropup .btn,.dropup .btn.dropdown-toggle{padding:.85rem 1.5rem}.dropup .btn.dropdown-toggle.dropdown-toggle-split{padding:.85rem 1rem;border-color:hsla(0,0%,100%,.2)!important}.dropup .dropdown-toggle:after{content:"\E845"!important;vertical-align:.05rem}.dropup .dropdown-menu:before{content:"";position:absolute;bottom:-.714rem;left:1.214rem;width:.714rem;height:.714rem;display:block;background:#fff;transform:rotate(45deg) translate(-7px);border-bottom:1px solid rgba(86,86,86,.1);border-right:1px solid rgba(86,86,86,.1);z-index:10;box-sizing:border-box}.dropup .dropdown-menu.dropdown-menu-right:before{left:auto;right:.714rem}.dropup .dropdown-submenu .dropdown-menu{bottom:auto;top:0}.dropleft .btn,.dropleft .btn.dropdown-toggle{padding:.85rem 1.5rem}.dropleft .btn.dropdown-toggle.dropdown-toggle-split{padding:.85rem 1rem}.dropleft .dropdown-toggle:before{border:none!important;font-family:feather;content:"\E843"!important}.dropleft .dropdown-menu:before{content:"";position:absolute;top:1.285rem;right:0;width:.714rem;height:.714rem;display:block;background:#fff;transform:rotate(130deg) translate(-8px);border-top:1px solid rgba(86,86,86,.1);border-left:1px solid rgba(86,86,86,.1);z-index:10;box-sizing:border-box}.dropright .btn,.dropright .btn.dropdown-toggle{padding:.85rem 1.5rem}.dropright .btn.dropdown-toggle.dropdown-toggle-split{padding:.85rem 1rem}.dropright .dropdown-toggle:after{border:none!important;font-family:feather;content:"\E844"!important}.dropright .dropdown-menu:before{content:"";position:absolute;top:1.285rem;left:-.9rem;width:.714rem;height:.714rem;display:block;background:#fff;transform:rotate(140deg) translate(-9px);border-bottom:1px solid rgba(86,86,86,.1);border-right:1px solid rgba(86,86,86,.1);z-index:10;box-sizing:border-box}.dropdown.dropdown-icon-wrapper .dropdown-toggle:after,.dropup.dropdown-icon-wrapper .dropdown-toggle:after{display:none}.dropdown.dropdown-icon-wrapper .dropdown-menu,.dropup.dropdown-icon-wrapper .dropdown-menu{min-width:auto}.dropdown.dropdown-icon-wrapper .dropdown-menu .dropdown-item,.dropup.dropdown-icon-wrapper .dropdown-menu .dropdown-item{padding:.5rem 1.1rem;cursor:pointer}.dropdown.dropdown-icon-wrapper .dropdown-menu .dropdown-item i,.dropup.dropdown-icon-wrapper .dropdown-menu .dropdown-item i{font-size:1.3rem;color:#626262}.dropdown.dropdown-icon-wrapper .dropdown-menu .dropdown-item:hover,.dropup.dropdown-icon-wrapper .dropdown-menu .dropdown-item:hover{color:#fff}.btn.btn-white~.dropdown-menu .dropdown-item:not(.acitve):hover{color:#626262!important}.btn.btn-white~.dropdown-menu .dropdown-item.active{color:#626262}.header-navbar .dropdown-menu,.horizontal-menu-wrapper .dropdown-menu{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-name:slideIn;animation-name:slideIn}@-webkit-keyframes slideIn{to{transform:translateY(0);opacity:1}0%{transform:translateY(1rem);opacity:0}}@keyframes slideIn{to{transform:translateY(0);opacity:1}0%{transform:translateY(1rem);opacity:0}}.navbar-dark .hamburger-inner,.navbar-dark .hamburger-inner:after,.navbar-dark .hamburger-inner:before{background-color:#fff}.header-navbar-shadow{display:none}.navbar-floating .header-navbar-shadow{display:block;background:linear-gradient(180deg,hsla(0,0%,97.3%,.95) 44%,hsla(0,0%,97.3%,.46) 73%,hsla(0,0%,100%,0));padding-top:2.2rem;background-repeat:repeat;width:100%;height:102px;position:fixed;top:0;z-index:11}.header-navbar{padding:0;min-height:3.8rem;font-family:Montserrat,Helvetica,Arial,serif;transition:all .3s ease;background:linear-gradient(180deg,hsla(0,0%,97.3%,.95) 44%,hsla(0,0%,97.3%,.46) 73%,hsla(0,0%,100%,0));z-index:997}.header-navbar.fixed-top{left:260px}.header-navbar[class*=bg-] .navbar-nav .nav-item>a,.header-navbar[class*=bg-] .navbar-nav .nav-item>a i,.header-navbar[class*=bg-] .navbar-nav .nav-item>a span{color:#fff!important}.header-navbar[class*=bg-] .navbar-nav .nav-item .dropdown-menu i{color:inherit!important}.header-navbar[class*=bg-] .navbar-nav .search-input .input,.header-navbar[class*=bg-] .navbar-nav .search-input .search-list .auto-suggestion span{color:#626262!important}.header-navbar.floating-nav{margin:1.3rem 2.2rem 0;border-radius:.5rem;position:fixed;width:calc(100% - 4.4rem - 260px);z-index:12;right:0}.header-navbar.navbar-static-top{background:transparent;box-shadow:none!important;top:0;right:0;left:260px;width:calc(100% - 260px)}.header-navbar .navbar-wrapper{width:100%}.header-navbar.navbar-border{border-bottom:1px solid #e4e7ed}.header-navbar.navbar-dark.navbar-border{border-bottom:1px solid #8596b5}.header-navbar.navbar-shadow{box-shadow:0 4px 20px 0 rgba(0,0,0,.05)}.header-navbar:not(.navbar-horizontal) .nav-link.dropdown-toggle:after{display:none}.header-navbar .navbar-container ul.nav li.dropdown-language{padding-right:0}.header-navbar .navbar-container ul.nav li.dropdown-language .selected-language{font-size:.97rem;letter-spacing:-.25px;font-weight:500}.header-navbar .navbar-container{padding-left:1rem;transition:all .3s ease;background:inherit;margin-left:0}.header-navbar .navbar-container .bookmark-wrapper ul.nav li>a.nav-link{padding:1.4rem .5rem 1.35rem}.header-navbar .navbar-container .bookmark-wrapper ul.nav li>a.nav-link i:hover{color:#586cb1}.header-navbar .navbar-container .bookmark-input{z-index:1}.header-navbar .navbar-container ul.nav li.dropdown .dropdown-menu{top:48px}.header-navbar .navbar-container ul.nav li .badge{padding:.42em .6em .25rem}.header-navbar .navbar-container ul.nav li .badge.badge-up{position:absolute;top:12px;right:-2px}.header-navbar .navbar-container ul.nav li.dropdown-language>a.nav-link{padding:1.65rem .5rem}.header-navbar .navbar-container ul.nav li>a.nav-link{color:#626262;padding:1.6rem .5rem 1.35rem 1rem}.header-navbar .navbar-container ul.nav li>a.nav-link i.flag-icon{margin-right:.5rem}.header-navbar .navbar-container ul.nav li.dropdown-user .dropdown-menu-right{right:12px;left:auto;padding:.5rem}.header-navbar .navbar-container ul.nav li.dropdown-user .dropdown-menu-right .dropdown-item{padding:10px}.header-navbar .navbar-container ul.nav li.dropdown-user .dropdown-menu-right .dropdown-item:active,.header-navbar .navbar-container ul.nav li.dropdown-user .dropdown-menu-right .dropdown-item:hover{background:#586cb1;color:#fff!important}.header-navbar .navbar-container ul.nav li a.dropdown-user-link{padding:.7rem 1rem;display:flex;align-items:center}.header-navbar .navbar-container ul.nav li a.dropdown-user-link .user-name{display:inline-block;margin-bottom:.435rem;margin-left:.2rem}.header-navbar .navbar-container ul.nav li a.dropdown-user-link .user-status{font-size:smaller}.header-navbar .navbar-container ul.nav li a.dropdown-user-link img{box-shadow:0 4px 8px 0 rgba(0,0,0,.12),0 2px 4px 0 rgba(0,0,0,.08)}.header-navbar .navbar-container ul.nav li a.menu-toggle{padding:1.34rem .22rem 1.35rem 0}.header-navbar .navbar-container ul.nav li a.menu-toggle i{font-size:1.4rem}.header-navbar .navbar-container ul.nav li a.nav-link-label{padding:1.6rem 0 1.35rem .8rem}.header-navbar .navbar-container ul.nav li a.dropdown-user-link .user-nav{display:flex;flex-direction:column;align-items:flex-end;float:left;margin-right:.8rem}.header-navbar .navbar-container ul.nav li div.input-group{padding:.7rem 1rem}.header-navbar .navbar-container ul.nav li i.ficon{font-size:1.5rem;color:#626262}.header-navbar .navbar-container ul.nav li i.ficon:hover{color:#586cb1}.header-navbar .navbar-container ul.nav li .media-list{max-height:18.2rem}.header-navbar .navbar-container ul.nav li .scrollable-container{position:relative}.header-navbar .navbar-container .dropdown-menu-media{width:26rem}.header-navbar .navbar-container .dropdown-menu-media .media-list .media{padding:1rem;border:none;border-bottom:1px solid #dae1e7}.header-navbar .navbar-container .dropdown-menu-media .media-list .media:hover{background:#eff1f7}.header-navbar .navbar-container .dropdown-menu-media .media-list .media .media-meta{color:#626262}.header-navbar .navbar-container .dropdown-menu-media .media-list a:last-of-type .media{border-bottom:none}.header-navbar .navbar-container .dropdown-menu-media .dropdown-menu-header{border-bottom:1px solid #dae1e7}.header-navbar .navbar-container .dropdown-menu-media .dropdown-menu-footer a{padding:.3rem;border-top:1px solid #dae1e7}.header-navbar .nav-item+.nav-item,.header-navbar.navbar-without-menu .navbar-container{margin-left:0}@media (max-width:767.98px){.header-navbar .navbar-header{width:100%!important;padding:.5rem 1rem;position:relative}.header-navbar .navbar-header .menu-toggle{top:2px;position:relative}.header-navbar .navbar-header .open-navbar-container i{font-size:1.8rem}.header-navbar .navbar-header .navbar-brand{position:absolute;left:50%;top:0;transform:translate(-50%)}.header-navbar.navbar-with-menu .navbar-container{width:100%;display:table;margin:0;height:auto}}@media (max-width:991.98px){[data-menu=vertical-menu-modern] .header-navbar .navbar-header{width:100%!important;padding:.5rem 1rem;position:relative}[data-menu=vertical-menu-modern] .header-navbar .navbar-header .menu-toggle{top:2px;position:relative}[data-menu=vertical-menu-modern] .header-navbar .navbar-header .open-navbar-container i{font-size:1.8rem}[data-menu=vertical-menu-modern] .header-navbar .navbar-header .navbar-brand{position:absolute;left:50%;top:0;transform:translate(-50%)}[data-menu=vertical-menu-modern] .header-navbar.navbar-with-menu .navbar-container{width:100%;display:table;margin:0;height:auto}[data-menu=vertical-menu-modern] .navbar-dark .navbar-header .navbar-nav .nav-link,[data-menu=vertical-menu-modern] .navbar-semi-dark .navbar-header .navbar-nav .nav-link{color:#fff}[data-menu=vertical-menu-modern] .navbar-dark .navbar-container .navbar-nav .nav-link,[data-menu=vertical-menu-modern] .navbar-light .navbar-header .navbar-nav .nav-link,[data-menu=vertical-menu-modern] .navbar-semi-dark .navbar-container .navbar-nav .nav-link{color:#b8c2cc}}.navbar-light,.navbar-light.navbar-horizontal{background:#fff}.navbar-light .navbar-nav li{line-height:1}.navbar-light .navbar-nav .active.nav-link{background-color:rgba(0,0,0,.03)}.navbar-light .navbar-nav .disabled.nav-link{color:#b8c2cc}.navbar-dark{background:#b8c2cc}.navbar-dark .navbar-brand{color:#fff!important}.navbar-dark.navbar-horizontal{background:#b8c2cc}.navbar-dark .nav-search .btn-secondary,.navbar-dark .nav-search .form-control{color:#fff;background:#b8c2cc}.navbar-dark .navbar-nav li{line-height:1}.navbar-dark .navbar-nav .active.nav-link{background-color:hsla(0,0%,100%,.05)}.navbar-dark .navbar-nav .disabled.nav-link{color:#dae1e7}.navbar-semi-dark{background:#fff}.navbar-semi-dark .navbar-header{background:#b8c2cc}.navbar-semi-dark .navbar-header .brand-text{color:#fff}.navbar-semi-dark .navbar-nav li{line-height:1}.navbar-semi-dark .navbar-nav .nav-link{color:#b8c2cc}.navbar-semi-dark .navbar-nav .active.nav-link{background-color:rgba(0,0,0,.03)}.navbar-semi-dark .navbar-nav .disabled.nav-link{color:#b8c2cc}.navbar-semi-light{background:#b8c2cc}.navbar-semi-light .navbar-header{background:#fff}.navbar-semi-light .navbar-header .brand-text{color:#b8c2cc}.navbar-semi-light .navbar-nav li{line-height:1}.navbar-semi-light .navbar-nav .nav-link{color:#fff}.navbar-semi-light .navbar-nav .active.nav-link{background-color:rgba(0,0,0,.03)}.navbar-semi-light .navbar-nav .disabled.nav-link{color:#b8c2cc}@-moz-document url-prefix(){ul li a .children-in{position:relative;right:3px;top:-14px}}.navbar-menu-icon span{display:block;position:absolute;height:2px;width:100%;background:#b8c2cc;border-radius:9px;opacity:1;left:0;transform:rotate(0deg);transition:.25s ease-in-out}.navbar-menu-icon span:first-child{top:0}.navbar-menu-icon span:nth-child(2){top:10px}.navbar-menu-icon span:nth-child(3){top:20px}.navbar-menu-icon.show span:first-child{top:10px;transform:rotate(135deg)}.navbar-menu-icon.show span:nth-child(2){opacity:0;left:-60px}.navbar-menu-icon.show span:nth-child(3){top:10px;transform:rotate(-135deg)}@media (max-width:767.98px){.header-navbar .navbar-nav .show{position:static}.header-navbar .navbar-nav .open-navbar-container{padding-top:.625rem}.header-navbar .navbar-container .show .dropdown-menu{right:0;left:0!important;float:none;width:auto;margin-top:0;max-height:400px;overflow-x:hidden}.header-navbar .navbar-container .dropdown-user .dropdown-menu-right{right:0!important}.header-navbar .navbar-container ul.nav li.nav-item i{margin-right:.2rem}.header-navbar .navbar-container ul.nav li a.dropdown-user-link{padding:.8rem .6rem}.header-navbar .navbar-container ul.nav li .dropdown-toggle:after{margin-right:0;margin-left:-2px}.navbar-dark .hamburger-inner,.navbar-dark .hamburger-inner:after,.navbar-dark .hamburger-inner:before,.navbar-semi-dark .hamburger-inner,.navbar-semi-dark .hamburger-inner:after,.navbar-semi-dark .hamburger-inner:before{background-color:#fff}.navbar-dark .navbar-header .navbar-nav .nav-link,.navbar-semi-dark .navbar-header .navbar-nav .nav-link{color:#fff}.navbar-dark .navbar-container .navbar-nav .nav-link,.navbar-light .navbar-container .navbar-nav .nav-link,.navbar-light .navbar-header .navbar-nav .nav-link,.navbar-semi-dark .navbar-container .navbar-nav .nav-link,.navbar-semi-light .navbar-container .navbar-nav .nav-link,.navbar-semi-light .navbar-header .navbar-nav .nav-link{color:#b8c2cc}}.headroom{will-change:transform;transition:transform .2s linear}.headroom--pinned-top{transform:translateY(0)}.headroom--unpinned-top{transform:translateY(-100%)}.headroom--pinned-bottom{transform:translateY(0)}.headroom--unpinned-bottom{transform:translateY(100%)}@media (max-width:575.98px){.header-navbar .navbar-container ul.nav li .selected-language{display:none}}body[data-col="1-column"] .header-navbar.floating-nav{width:calc(100% - 4.4rem)}@media (-ms-high-contrast:none),(min-width:1200px) and (-ms-high-contrast:active){body:not([data-col="1-columns"]) .header-navbar.floating-nav{width:calc(100% - 320px)}}@media (max-width:1199.98px){.header-navbar .navbar-container ul.nav li a.dropdown-user-link{padding:.7rem 1.23rem}.header-navbar .navbar-container ul.nav li .dropdown-toggle:after{margin-right:0;margin-left:-2px}.header-navbar.navbar-static-top{left:0;width:100%}}@media (max-width:767px){#navbar-mobile.navbar-collapse .navbar-nav{margin:0;flex-flow:row wrap}#navbar-mobile.navbar-collapse .navbar-nav .dropdown-menu{position:absolute}#navbar-mobile.navbar-collapse .navbar-nav .nav-item{float:left}}@media (max-width:991.98px){#navbar-mobile.navbar-collapse .navbar-nav{margin:0;flex-flow:row wrap}#navbar-mobile.navbar-collapse .navbar-nav .dropdown-menu{position:absolute}#navbar-mobile.navbar-collapse .navbar-nav .nav-item{float:left}}@media only screen and (min-device-width:26.78em) and (max-device-width:47.64em) and (-webkit-min-device-pixel-ratio:2) and (orientation:landscape){.header-navbar .navbar-container .show .dropdown-menu{max-height:180px}}@media only screen and (min-device-width:29.57em) and (max-device-width:52.57em) and (-webkit-min-device-pixel-ratio:3) and (orientation:landscape){.header-navbar .navbar-container .show .dropdown-menu{max-height:280px}}#navbar-component .navbar{z-index:auto!important}#navbar-component .navbar.floating-nav{border-radius:.5rem}#navbar-component .navbar .navbar-nav .nav-item a{color:inherit}#navbar-component .navbar.header-navbar.navbar-dark .navbar-nav .nav-link,#navbar-component .navbar.header-navbar.navbar-dark .navbar-nav .nav-link i{color:#fff}#navbar-component .navbar .navbar-nav .dropdown-language.show,#navbar-component .navbar .navbar-nav .dropdown-notification.show,#navbar-component .navbar .navbar-nav .dropdown-user.show{position:relative}#navbar-component .navbar .navbar-nav .dropdown-language .dropdown-menu.show,#navbar-component .navbar .navbar-nav .dropdown-notification .dropdown-menu.show,#navbar-component .navbar .navbar-nav .dropdown-user .dropdown-menu.show{position:absolute;right:0;left:auto!important}#navbar-component .navbar.navbar-dark .navbar-toggler,#navbar-component .navbar.navbar-light .navbar-toggler{font-size:1.2rem}#navbar-component .navbar.navbar-dark .navbar-toggler:focus,#navbar-component .navbar.navbar-light .navbar-toggler:focus{outline:0}#navbar-component #navbar-collapsed .navbar{border-radius:0}@media (min-width:992px){#navbar-component .navbar .navbar-container{background:inherit}#navbar-component .nav .dropdown-language{float:right}}@media (max-width:992px){#navbar-component .navbar .navbar-container{background:inherit}#navbar-component .navbar .navbar-container .navbar-nav{flex-direction:row}}@media (max-width:1201px){.header-navbar.fixed-top{left:0}.horizontal-layout .header-navbar .navbar-container{padding-left:1.5rem;padding-right:1.2rem}}@media (max-width:1199px){.header-navbar .navbar-container ul.nav li a.dropdown-user-link .user-name{margin-bottom:0}}@media (max-width:768px){#navbar-component .navbar .navbar-nav .dropdown-notification.show{position:static}}@media (max-width:575.98px){.header-navbar.floating-nav{width:calc(100% - 2.4rem)!important;margin-left:1.2rem;margin-right:1.2rem}.content.app-content .content-area-wrapper{margin-left:1.2rem!important;margin-right:1.2rem!important}.header-navbar .navbar-container{padding-left:1rem!important;padding-right:0!important}}@media (max-width:992px){.navbar-container #navbar-mobile .nav-back{margin-top:5px}}.nav{border-radius:.25rem}.nav.wrap-border{border:1px solid #ddd}.nav.wrap-border li.nav-header{margin:0 .5rem}.nav.wrap-border div,.nav.wrap-border li.nav-item{padding:2px .714rem}.nav.square-border,.nav.square-border .nav-item .nav-link.active{border-radius:0}.nav .modern-nav-toggle{padding:1.571rem 0}.nav.nav-pills{margin-bottom:1rem}.nav.nav-pills .nav-item .nav-link{border-radius:.357rem;padding:.3rem 1rem .2rem;margin-right:.5rem}.nav.nav-pills .nav-item .nav-link.active{color:#fff}.nav.nav-pills .nav-item .nav-link.disabled{color:#b8c2cc}.nav.nav-pills .nav-item .nav-link.dropdown-toggle:after{top:1px;left:1px}.nav.nav-pills .nav-item.dropdown.show .nav-link{color:#fff}.nav.nav-pills .nav-item.dropdown.show .dropdown-item.active:hover{color:#586cb1}.nav.nav-pills.nav-justified{width:100%}.nav.nav-pills.nav-justified .nav-item{float:none}.nav.nav-pills.nav-justified .nav-link{text-align:center;margin-bottom:5px}.nav.nav-pills.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:576px){.nav.nav-pills.nav-justified .nav-item{display:block;width:1%}.nav.nav-pills.nav-justified .nav-link{margin-bottom:0}}.nav.nav-pills.nav-justified .nav-link{margin-right:0;border-radius:.5rem}@media (min-width:576px){.nav.nav-pills.nav-justified .nav-link.active,.nav.nav-pills.nav-justified .nav-link.active:focus,.nav.nav-pills.nav-justified .nav-link.active:hover{border-bottom-color:transparent}}.nav.nav-pills.nav-justified .nav-link{display:block}.nav.nav-pills.nav-justified .nav-link.active,.nav.nav-pills.nav-justified .nav-link.active:focus,.nav.nav-pills.nav-justified .nav-link.active:hover{border:none}.nav.nav-pills.nav-active-bordered-pill .nav-item a.nav-link.active{border:1px solid #586cb1;border-radius:.25rem;color:#586cb1;background-color:#fff}.nav.nav-tabs{border:none;margin-bottom:1rem;border-radius:0}.nav.nav-tabs,.nav.nav-tabs .nav-item{position:relative}.nav.nav-tabs .nav-item .nav-link{color:#626262;font-size:.95rem;border:none;min-width:auto;font-weight:450;padding:.61rem .635rem;border-radius:0}.nav.nav-tabs .nav-item .nav-link.active{border:none;position:relative;color:#586cb1;transition:all .2s ease;background-color:transparent}.nav.nav-tabs .nav-item .nav-link.active:after{content:attr(data-before);height:2px;width:100%;left:0;position:absolute;bottom:0;top:100%;background:linear-gradient(30deg,#586cb1,rgba(88,108,177,.5))!important;box-shadow:0 0 8px 0 rgba(88,108,177,.5)!important;transform:translateY(0);transition:all .2s linear}.nav.nav-tabs .nav-item .nav-link.dropdown-toggle:after{top:1px;left:1px}.nav.nav-tabs .nav-item .nav-link.disabled{color:#b8c2cc}.nav.nav-tabs.nav-justified{width:100%}.nav.nav-tabs.nav-justified .nav-item{float:none}.nav.nav-tabs.nav-justified .nav-link{text-align:center;margin-bottom:5px}.nav.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:576px){.nav.nav-tabs.nav-justified .nav-item{display:block;width:1%}.nav.nav-tabs.nav-justified .nav-link{margin-bottom:0}}.nav.nav-tabs.nav-justified .nav-link{margin-right:0;border-radius:.5rem}@media (min-width:576px){.nav.nav-tabs.nav-justified .nav-link.active,.nav.nav-tabs.nav-justified .nav-link.active:focus,.nav.nav-tabs.nav-justified .nav-link.active:hover{border-bottom-color:transparent}}.nav.nav-tabs.nav-justified .nav-item a.nav-link{display:block;border-radius:0}.nav.nav-tabs.nav-justified .nav-item a.nav-link.active{border:none;background-color:#fff}.nav.nav-tabs.nav-justified .nav-item a.nav-link:hover{border-color:transparent}.nav-vertical{overflow:hidden}.nav-vertical .nav.nav-tabs .nav-item .nav-link{border:none;margin-bottom:0}.nav-vertical .nav.nav-tabs .nav-item .nav-link.active{border:none;border-radius:0}.nav-vertical .nav.nav-tabs .nav-item .nav-link.active:after{transform:rotate(90deg);left:auto;right:-1.5rem;bottom:100%;top:1.25rem;width:2.14rem}.nav-vertical .nav.nav-tabs .nav-item .nav-link:hover{border-right:none}.nav-vertical .nav.nav-tabs.nav-left{float:left;display:table;margin-right:1rem}.nav-vertical .nav.nav-tabs.nav-left~.tab-content .tab-pane{display:none;background-color:#fff;overflow-y:auto}.nav-vertical .nav.nav-tabs.nav-left~.tab-content .tab-pane.active{display:block}.nav-vertical .nav.nav-tabs.nav-right{float:right;display:table;margin-left:1rem}.nav-vertical .nav.nav-tabs.nav-right .nav-item .nav-link.active:after{left:-1.5rem}.nav-vertical .nav.nav-tabs.nav-right~.tab-content .tab-pane{display:none;background-color:#fff;overflow-y:auto;padding-right:1rem}.nav-vertical .nav.nav-tabs.nav-right~.tab-content .tab-pane.active{display:block}@media (max-width:576px){.nav-vertical .nav.nav-tabs .nav-item .nav-link.active:after{height:0}}.toast-bs-container{z-index:1040;position:fixed;top:0;left:0;width:100%}.toast-bs-container .toast-position{position:relative;top:0;right:0;display:flex;flex-direction:column;flex-wrap:wrap-reverse}.toast-bs-container .toast-position .toast.show{opacity:1;z-index:1030}.toast-placement{position:static;top:0}.toast-placement .toast{position:fixed;top:0;z-index:1030}.toast{display:none;background-color:#fff;margin-top:.75rem}.toast .toast-header .close:active,.toast .toast-header .close:focus,.toast .toast-header .mailbox-attachment-close:active,.toast .toast-header .mailbox-attachment-close:focus{outline:none}.toast.show.toast-wrapper{position:static}.toast.toast-translucent{opacity:1;display:block}.toast-header img{width:35px;height:24px}@media (-ms-high-contrast:none),screen and (-ms-high-contrast:active){.toast-bs-container{position:fixed!important;left:74%!important}}.toast-bs-container,_:-ms-lang(x){position:fixed!important;left:74%!important}.pagination .page-item{border-radius:5rem}.pagination .page-item.first .page-link,.pagination .page-item.last .page-link,.pagination .page-item.next-item .page-link,.pagination .page-item.prev-item .page-link{color:#586cb1}.pagination .page-item.first.disabled .page-link,.pagination .page-item.last.disabled .page-link,.pagination .page-item.next-item.disabled .page-link,.pagination .page-item.prev-item.disabled .page-link{color:#b8c2cc}.pagination .page-item:not(.active) .page-link,.pagination .page-item:not(.first) .page-link,.pagination .page-item:not(.last) .page-link,.pagination .page-item:not(.next-item) .page-link,.pagination .page-item:not(.prev-item) .page-link{line-height:1.3}.pagination .page-item.prev-item{margin-right:.3571rem}.pagination .page-item.prev-item .page-link{background-color:#f0f0f0;padding:.572rem .651rem;border-radius:50%}.pagination .page-item.prev-item .page-link:before{content:"\E843";font-family:feather}.pagination .page-item.prev-item .page-link:hover{background:#586cb1;color:#fff}.pagination .page-item.prev-item~.page-item:nth-child(2){border-top-left-radius:5rem;border-bottom-left-radius:5rem}.pagination .page-item.prev-item~.page-item:nth-child(2) .page-link{border-top-left-radius:5rem!important;border-bottom-left-radius:5rem!important}.pagination .page-item.prev-item~.page-item:nth-last-child(2){border-top-right-radius:5rem;border-bottom-right-radius:5rem}.pagination .page-item.prev-item~.page-item:nth-last-child(2) .page-link{border-top-right-radius:5rem!important;border-bottom-right-radius:5rem!important}.pagination .page-item.next-item{margin-left:.3571rem}.pagination .page-item.next-item .page-link{background-color:#f0f0f0;padding:.572rem .651rem;border-radius:50%}.pagination .page-item.next-item .page-link:after{content:"\E844";font-family:feather}.pagination .page-item.next-item .page-link:hover{background:#586cb1;color:#fff}.pagination .page-item.prev .page-link:before,.pagination .page-item.previous .page-link:before{content:"\E843";font-family:feather}.pagination .page-item.next .page-link:after{content:"\E844";font-family:feather}.pagination .page-item .page-link{border:none;color:rgba(86,86,86,.9);background-color:#f0f0f0;margin:0;font-size:1rem;font-weight:700}.pagination .page-item .page-link i{position:relative;top:1px}.pagination .page-item .page-link:focus{box-shadow:none}.pagination .page-item .page-link:hover{color:#586cb1}.pagination .page-item.active{background-color:#f0f0f0;border-radius:0}.pagination .page-item.active .page-link{z-index:3;border-radius:5rem;background-color:#586cb1;color:#fff;transform:scale(1.05)}.pagination .page-item:first-child:not(.prev-item).active{border-top-left-radius:1.428rem;border-bottom-left-radius:1.428rem}.pagination .page-item:first-child:not(.prev-item).active .page-link{border-radius:5rem}.pagination .page-item:first-child:not(.prev-item) .page-link{border-top-left-radius:1.428rem;border-bottom-left-radius:1.428rem}.pagination .page-item:last-child:not(.next-item).active{border-top-right-radius:1.428rem;border-bottom-right-radius:1.428rem}.pagination .page-item:last-child:not(.next-item).active .page-link{border-radius:5rem}.pagination .page-item:last-child:not(.next-item) .page-link{border-top-right-radius:1.428rem;border-bottom-right-radius:1.428rem}.pagination.pagination-lg .page-item .page-link{font-size:1.5rem;transform:scale(1)}html.scroll-smooth{scroll-behavior:smooth}.wrapper,body,html{min-height:100%}.wrapper{position:relative}.wrapper .content-wrapper{min-height:calc(100vh - 6.614rem - 1px)}.layout-boxed .wrapper,.layout-boxed .wrapper:before{margin:0 auto;max-width:1250px}.layout-boxed .wrapper .main-sidebar{left:inherit}@supports not (-webkit-touch-callout:none){.layout-fixed .wrapper .sidebar{height:calc(100vh - 3.164rem - 1px)}.layout-fixed.text-sm .wrapper .sidebar{height:calc(100vh - 2.62475rem - 1px)}}.layout-navbar-fixed.layout-fixed .wrapper .main-header.text-sm~.control-sidebar{top:calc(2.62475rem + 1px)}.layout-navbar-fixed.layout-fixed .wrapper .brand-link.text-sm~.sidebar{margin-top:calc(2.62475rem + 1px)}.layout-navbar-fixed.sidebar-mini-md.sidebar-collapse .wrapper .brand-link,.layout-navbar-fixed.sidebar-mini.sidebar-collapse .wrapper .brand-link{height:calc(3.164rem + 1px);width:5.4rem}.layout-navbar-fixed.sidebar-mini-md.sidebar-collapse.text-sm .wrapper .brand-link,.layout-navbar-fixed.sidebar-mini-md.sidebar-collapse .wrapper .brand-link.text-sm,.layout-navbar-fixed.sidebar-mini.sidebar-collapse.text-sm .wrapper .brand-link,.layout-navbar-fixed.sidebar-mini.sidebar-collapse .wrapper .brand-link.text-sm{height:calc(2.62475rem + 1px)}.layout-navbar-fixed .wrapper .main-sidebar:hover .brand-link{transition:width .3s ease-in-out;width:260px}.layout-navbar-fixed .wrapper .main-header.text-sm~.content-wrapper{margin-top:calc(2.62475rem + 1px)}.layout-navbar-fixed .wrapper .main-header{z-index:1033}.layout-navbar-fixed.layout-fixed .wrapper .control-sidebar{top:calc(3.164rem + 1px)}.layout-navbar-fixed.layout-fixed .wrapper .main-header.text-sm~.control-sidebar,.text-sm .layout-navbar-fixed.layout-fixed .wrapper .main-header~.control-sidebar{top:calc(2.62475rem + 1px)}.layout-navbar-fixed.layout-fixed .wrapper .sidebar{margin-top:calc(3.164rem + 1px)}.layout-navbar-fixed.layout-fixed .wrapper .brand-link.text-sm~.sidebar,.text-sm .layout-navbar-fixed.layout-fixed .wrapper .brand-link~.sidebar{margin-top:calc(2.62475rem + 1px)}.layout-navbar-fixed.layout-fixed.text-sm .wrapper .control-sidebar{top:calc(2.62475rem + 1px)}.layout-navbar-fixed.layout-fixed.text-sm .wrapper .sidebar{margin-top:calc(2.62475rem + 1px)}.layout-navbar-fixed .wrapper .control-sidebar{top:0}.layout-navbar-fixed .wrapper a.anchor{display:block;position:relative;top:calc(-4.164rem + -1px)}.layout-navbar-fixed .wrapper.sidebar-collapse .brand-link{height:calc(3.164rem + 1px);transition:width .3s ease-in-out;width:5.4rem}.layout-navbar-fixed .wrapper.sidebar-collapse .brand-link.text-sm,.text-sm .layout-navbar-fixed .wrapper.sidebar-collapse .brand-link{height:calc(2.62475rem + 1px)}.layout-navbar-fixed .wrapper .brand-link,.layout-navbar-fixed .wrapper.sidebar-collapse .main-sidebar:hover .brand-link{transition:width .3s ease-in-out;width:260px}.layout-navbar-fixed .wrapper .brand-link{overflow:hidden;position:fixed;top:0;z-index:1035}.layout-navbar-fixed .wrapper .sidebar-dark-primary .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-navbar-fixed .wrapper .sidebar-light-primary .brand-link:not([class*=navbar]){background-color:#fff}.layout-navbar-fixed .wrapper .sidebar-dark-secondary .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-navbar-fixed .wrapper .sidebar-light-secondary .brand-link:not([class*=navbar]){background-color:#fff}.layout-navbar-fixed .wrapper .sidebar-dark-success .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-navbar-fixed .wrapper .sidebar-light-success .brand-link:not([class*=navbar]){background-color:#fff}.layout-navbar-fixed .wrapper .sidebar-dark-info .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-navbar-fixed .wrapper .sidebar-light-info .brand-link:not([class*=navbar]){background-color:#fff}.layout-navbar-fixed .wrapper .sidebar-dark-warning .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-navbar-fixed .wrapper .sidebar-light-warning .brand-link:not([class*=navbar]){background-color:#fff}.layout-navbar-fixed .wrapper .sidebar-dark-danger .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-navbar-fixed .wrapper .sidebar-light-danger .brand-link:not([class*=navbar]){background-color:#fff}.layout-navbar-fixed .wrapper .sidebar-dark-light .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-navbar-fixed .wrapper .sidebar-light-light .brand-link:not([class*=navbar]){background-color:#fff}.layout-navbar-fixed .wrapper .sidebar-dark-dark .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-navbar-fixed .wrapper .sidebar-light-dark .brand-link:not([class*=navbar]){background-color:#fff}.layout-navbar-fixed .wrapper .content-wrapper{margin-top:calc(3.164rem + 1px)}.layout-navbar-fixed .wrapper .main-header.text-sm~.content-wrapper,.text-sm .layout-navbar-fixed .wrapper .main-header~.content-wrapper{margin-top:calc(2.62475rem + 1px)}.layout-navbar-fixed .wrapper .main-header{left:0;position:fixed;right:0;top:0;z-index:1037}.layout-navbar-fixed.text-sm .wrapper .content-wrapper{margin-top:calc(2.62475rem + 1px)}body:not(.layout-fixed).layout-navbar-fixed .wrapper .main-sidebar{margin-top:calc(-3.164rem + -1px)}body:not(.layout-fixed).layout-navbar-fixed .wrapper .main-sidebar .sidebar{margin-top:calc(3.164rem + 1px)}body:not(.layout-fixed).layout-navbar-fixed.text-sm .wrapper .main-sidebar{margin-top:calc(-2.62475rem + -1px)}body:not(.layout-fixed).layout-navbar-fixed.text-sm .wrapper .main-sidebar .sidebar{margin-top:calc(2.62475rem + 1px)}.layout-navbar-not-fixed .wrapper .brand-link{position:static}.layout-navbar-not-fixed .wrapper .content-wrapper,.layout-navbar-not-fixed .wrapper .sidebar{margin-top:0}.layout-navbar-not-fixed .wrapper .main-header{position:static}.layout-navbar-not-fixed.layout-fixed .wrapper .sidebar{margin-top:0}@media (min-width:576px){.layout-sm-navbar-fixed.layout-fixed .wrapper .control-sidebar{top:calc(3.164rem + 1px)}.layout-sm-navbar-fixed.layout-fixed .wrapper .main-header.text-sm~.control-sidebar,.text-sm .layout-sm-navbar-fixed.layout-fixed .wrapper .main-header~.control-sidebar{top:calc(2.62475rem + 1px)}.layout-sm-navbar-fixed.layout-fixed .wrapper .sidebar{margin-top:calc(3.164rem + 1px)}.layout-sm-navbar-fixed.layout-fixed .wrapper .brand-link.text-sm~.sidebar,.text-sm .layout-sm-navbar-fixed.layout-fixed .wrapper .brand-link~.sidebar{margin-top:calc(2.62475rem + 1px)}.layout-sm-navbar-fixed.layout-fixed.text-sm .wrapper .control-sidebar{top:calc(2.62475rem + 1px)}.layout-sm-navbar-fixed.layout-fixed.text-sm .wrapper .sidebar{margin-top:calc(2.62475rem + 1px)}.layout-sm-navbar-fixed .wrapper .control-sidebar{top:0}.layout-sm-navbar-fixed .wrapper a.anchor{display:block;position:relative;top:calc(-4.164rem + -1px)}.layout-sm-navbar-fixed .wrapper.sidebar-collapse .brand-link{height:calc(3.164rem + 1px);transition:width .3s ease-in-out;width:5.4rem}.layout-sm-navbar-fixed .wrapper.sidebar-collapse .brand-link.text-sm,.text-sm .layout-sm-navbar-fixed .wrapper.sidebar-collapse .brand-link{height:calc(2.62475rem + 1px)}.layout-sm-navbar-fixed .wrapper.sidebar-collapse .main-sidebar:hover .brand-link{transition:width .3s ease-in-out;width:260px}.layout-sm-navbar-fixed .wrapper .brand-link{overflow:hidden;position:fixed;top:0;transition:width .3s ease-in-out;width:260px;z-index:1035}.layout-sm-navbar-fixed .wrapper .sidebar-dark-primary .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-sm-navbar-fixed .wrapper .sidebar-light-primary .brand-link:not([class*=navbar]){background-color:#fff}.layout-sm-navbar-fixed .wrapper .sidebar-dark-secondary .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-sm-navbar-fixed .wrapper .sidebar-light-secondary .brand-link:not([class*=navbar]){background-color:#fff}.layout-sm-navbar-fixed .wrapper .sidebar-dark-success .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-sm-navbar-fixed .wrapper .sidebar-light-success .brand-link:not([class*=navbar]){background-color:#fff}.layout-sm-navbar-fixed .wrapper .sidebar-dark-info .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-sm-navbar-fixed .wrapper .sidebar-light-info .brand-link:not([class*=navbar]){background-color:#fff}.layout-sm-navbar-fixed .wrapper .sidebar-dark-warning .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-sm-navbar-fixed .wrapper .sidebar-light-warning .brand-link:not([class*=navbar]){background-color:#fff}.layout-sm-navbar-fixed .wrapper .sidebar-dark-danger .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-sm-navbar-fixed .wrapper .sidebar-light-danger .brand-link:not([class*=navbar]){background-color:#fff}.layout-sm-navbar-fixed .wrapper .sidebar-dark-light .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-sm-navbar-fixed .wrapper .sidebar-light-light .brand-link:not([class*=navbar]){background-color:#fff}.layout-sm-navbar-fixed .wrapper .sidebar-dark-dark .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-sm-navbar-fixed .wrapper .sidebar-light-dark .brand-link:not([class*=navbar]){background-color:#fff}.layout-sm-navbar-fixed .wrapper .content-wrapper{margin-top:calc(3.164rem + 1px)}.layout-sm-navbar-fixed .wrapper .main-header.text-sm~.content-wrapper,.text-sm .layout-sm-navbar-fixed .wrapper .main-header~.content-wrapper{margin-top:calc(2.62475rem + 1px)}.layout-sm-navbar-fixed .wrapper .main-header{left:0;position:fixed;right:0;top:0;z-index:1037}.layout-sm-navbar-fixed.text-sm .wrapper .content-wrapper{margin-top:calc(2.62475rem + 1px)}body:not(.layout-fixed).layout-sm-navbar-fixed .wrapper .main-sidebar{margin-top:calc(-3.164rem + -1px)}body:not(.layout-fixed).layout-sm-navbar-fixed .wrapper .main-sidebar .sidebar{margin-top:calc(3.164rem + 1px)}body:not(.layout-fixed).layout-sm-navbar-fixed.text-sm .wrapper .main-sidebar{margin-top:calc(-2.62475rem + -1px)}body:not(.layout-fixed).layout-sm-navbar-fixed.text-sm .wrapper .main-sidebar .sidebar{margin-top:calc(2.62475rem + 1px)}.layout-sm-navbar-not-fixed .wrapper .brand-link{position:static}.layout-sm-navbar-not-fixed .wrapper .content-wrapper,.layout-sm-navbar-not-fixed .wrapper .sidebar{margin-top:0}.layout-sm-navbar-not-fixed .wrapper .main-header{position:static}.layout-sm-navbar-not-fixed.layout-fixed .wrapper .sidebar{margin-top:0}}@media (min-width:768px){.layout-md-navbar-fixed.layout-fixed .wrapper .control-sidebar{top:calc(3.164rem + 1px)}.layout-md-navbar-fixed.layout-fixed .wrapper .main-header.text-sm~.control-sidebar,.text-sm .layout-md-navbar-fixed.layout-fixed .wrapper .main-header~.control-sidebar{top:calc(2.62475rem + 1px)}.layout-md-navbar-fixed.layout-fixed .wrapper .sidebar{margin-top:calc(3.164rem + 1px)}.layout-md-navbar-fixed.layout-fixed .wrapper .brand-link.text-sm~.sidebar,.text-sm .layout-md-navbar-fixed.layout-fixed .wrapper .brand-link~.sidebar{margin-top:calc(2.62475rem + 1px)}.layout-md-navbar-fixed.layout-fixed.text-sm .wrapper .control-sidebar{top:calc(2.62475rem + 1px)}.layout-md-navbar-fixed.layout-fixed.text-sm .wrapper .sidebar{margin-top:calc(2.62475rem + 1px)}.layout-md-navbar-fixed .wrapper .control-sidebar{top:0}.layout-md-navbar-fixed .wrapper a.anchor{display:block;position:relative;top:calc(-4.164rem + -1px)}.layout-md-navbar-fixed .wrapper.sidebar-collapse .brand-link{height:calc(3.164rem + 1px);transition:width .3s ease-in-out;width:5.4rem}.layout-md-navbar-fixed .wrapper.sidebar-collapse .brand-link.text-sm,.text-sm .layout-md-navbar-fixed .wrapper.sidebar-collapse .brand-link{height:calc(2.62475rem + 1px)}.layout-md-navbar-fixed .wrapper.sidebar-collapse .main-sidebar:hover .brand-link{transition:width .3s ease-in-out;width:260px}.layout-md-navbar-fixed .wrapper .brand-link{overflow:hidden;position:fixed;top:0;transition:width .3s ease-in-out;width:260px;z-index:1035}.layout-md-navbar-fixed .wrapper .sidebar-dark-primary .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-md-navbar-fixed .wrapper .sidebar-light-primary .brand-link:not([class*=navbar]){background-color:#fff}.layout-md-navbar-fixed .wrapper .sidebar-dark-secondary .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-md-navbar-fixed .wrapper .sidebar-light-secondary .brand-link:not([class*=navbar]){background-color:#fff}.layout-md-navbar-fixed .wrapper .sidebar-dark-success .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-md-navbar-fixed .wrapper .sidebar-light-success .brand-link:not([class*=navbar]){background-color:#fff}.layout-md-navbar-fixed .wrapper .sidebar-dark-info .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-md-navbar-fixed .wrapper .sidebar-light-info .brand-link:not([class*=navbar]){background-color:#fff}.layout-md-navbar-fixed .wrapper .sidebar-dark-warning .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-md-navbar-fixed .wrapper .sidebar-light-warning .brand-link:not([class*=navbar]){background-color:#fff}.layout-md-navbar-fixed .wrapper .sidebar-dark-danger .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-md-navbar-fixed .wrapper .sidebar-light-danger .brand-link:not([class*=navbar]){background-color:#fff}.layout-md-navbar-fixed .wrapper .sidebar-dark-light .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-md-navbar-fixed .wrapper .sidebar-light-light .brand-link:not([class*=navbar]){background-color:#fff}.layout-md-navbar-fixed .wrapper .sidebar-dark-dark .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-md-navbar-fixed .wrapper .sidebar-light-dark .brand-link:not([class*=navbar]){background-color:#fff}.layout-md-navbar-fixed .wrapper .content-wrapper{margin-top:calc(3.164rem + 1px)}.layout-md-navbar-fixed .wrapper .main-header.text-sm~.content-wrapper,.text-sm .layout-md-navbar-fixed .wrapper .main-header~.content-wrapper{margin-top:calc(2.62475rem + 1px)}.layout-md-navbar-fixed .wrapper .main-header{left:0;position:fixed;right:0;top:0;z-index:1037}.layout-md-navbar-fixed.text-sm .wrapper .content-wrapper{margin-top:calc(2.62475rem + 1px)}body:not(.layout-fixed).layout-md-navbar-fixed .wrapper .main-sidebar{margin-top:calc(-3.164rem + -1px)}body:not(.layout-fixed).layout-md-navbar-fixed .wrapper .main-sidebar .sidebar{margin-top:calc(3.164rem + 1px)}body:not(.layout-fixed).layout-md-navbar-fixed.text-sm .wrapper .main-sidebar{margin-top:calc(-2.62475rem + -1px)}body:not(.layout-fixed).layout-md-navbar-fixed.text-sm .wrapper .main-sidebar .sidebar{margin-top:calc(2.62475rem + 1px)}.layout-md-navbar-not-fixed .wrapper .brand-link{position:static}.layout-md-navbar-not-fixed .wrapper .content-wrapper,.layout-md-navbar-not-fixed .wrapper .sidebar{margin-top:0}.layout-md-navbar-not-fixed .wrapper .main-header{position:static}.layout-md-navbar-not-fixed.layout-fixed .wrapper .sidebar{margin-top:0}}@media (min-width:992px){.layout-lg-navbar-fixed.layout-fixed .wrapper .control-sidebar{top:calc(3.164rem + 1px)}.layout-lg-navbar-fixed.layout-fixed .wrapper .main-header.text-sm~.control-sidebar,.text-sm .layout-lg-navbar-fixed.layout-fixed .wrapper .main-header~.control-sidebar{top:calc(2.62475rem + 1px)}.layout-lg-navbar-fixed.layout-fixed .wrapper .sidebar{margin-top:calc(3.164rem + 1px)}.layout-lg-navbar-fixed.layout-fixed .wrapper .brand-link.text-sm~.sidebar,.text-sm .layout-lg-navbar-fixed.layout-fixed .wrapper .brand-link~.sidebar{margin-top:calc(2.62475rem + 1px)}.layout-lg-navbar-fixed.layout-fixed.text-sm .wrapper .control-sidebar{top:calc(2.62475rem + 1px)}.layout-lg-navbar-fixed.layout-fixed.text-sm .wrapper .sidebar{margin-top:calc(2.62475rem + 1px)}.layout-lg-navbar-fixed .wrapper .control-sidebar{top:0}.layout-lg-navbar-fixed .wrapper a.anchor{display:block;position:relative;top:calc(-4.164rem + -1px)}.layout-lg-navbar-fixed .wrapper.sidebar-collapse .brand-link{height:calc(3.164rem + 1px);transition:width .3s ease-in-out;width:5.4rem}.layout-lg-navbar-fixed .wrapper.sidebar-collapse .brand-link.text-sm,.text-sm .layout-lg-navbar-fixed .wrapper.sidebar-collapse .brand-link{height:calc(2.62475rem + 1px)}.layout-lg-navbar-fixed .wrapper.sidebar-collapse .main-sidebar:hover .brand-link{transition:width .3s ease-in-out;width:260px}.layout-lg-navbar-fixed .wrapper .brand-link{overflow:hidden;position:fixed;top:0;transition:width .3s ease-in-out;width:260px;z-index:1035}.layout-lg-navbar-fixed .wrapper .sidebar-dark-primary .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-lg-navbar-fixed .wrapper .sidebar-light-primary .brand-link:not([class*=navbar]){background-color:#fff}.layout-lg-navbar-fixed .wrapper .sidebar-dark-secondary .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-lg-navbar-fixed .wrapper .sidebar-light-secondary .brand-link:not([class*=navbar]){background-color:#fff}.layout-lg-navbar-fixed .wrapper .sidebar-dark-success .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-lg-navbar-fixed .wrapper .sidebar-light-success .brand-link:not([class*=navbar]){background-color:#fff}.layout-lg-navbar-fixed .wrapper .sidebar-dark-info .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-lg-navbar-fixed .wrapper .sidebar-light-info .brand-link:not([class*=navbar]){background-color:#fff}.layout-lg-navbar-fixed .wrapper .sidebar-dark-warning .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-lg-navbar-fixed .wrapper .sidebar-light-warning .brand-link:not([class*=navbar]){background-color:#fff}.layout-lg-navbar-fixed .wrapper .sidebar-dark-danger .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-lg-navbar-fixed .wrapper .sidebar-light-danger .brand-link:not([class*=navbar]){background-color:#fff}.layout-lg-navbar-fixed .wrapper .sidebar-dark-light .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-lg-navbar-fixed .wrapper .sidebar-light-light .brand-link:not([class*=navbar]){background-color:#fff}.layout-lg-navbar-fixed .wrapper .sidebar-dark-dark .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-lg-navbar-fixed .wrapper .sidebar-light-dark .brand-link:not([class*=navbar]){background-color:#fff}.layout-lg-navbar-fixed .wrapper .content-wrapper{margin-top:calc(3.164rem + 1px)}.layout-lg-navbar-fixed .wrapper .main-header.text-sm~.content-wrapper,.text-sm .layout-lg-navbar-fixed .wrapper .main-header~.content-wrapper{margin-top:calc(2.62475rem + 1px)}.layout-lg-navbar-fixed .wrapper .main-header{left:0;position:fixed;right:0;top:0;z-index:1037}.layout-lg-navbar-fixed.text-sm .wrapper .content-wrapper{margin-top:calc(2.62475rem + 1px)}body:not(.layout-fixed).layout-lg-navbar-fixed .wrapper .main-sidebar{margin-top:calc(-3.164rem + -1px)}body:not(.layout-fixed).layout-lg-navbar-fixed .wrapper .main-sidebar .sidebar{margin-top:calc(3.164rem + 1px)}body:not(.layout-fixed).layout-lg-navbar-fixed.text-sm .wrapper .main-sidebar{margin-top:calc(-2.62475rem + -1px)}body:not(.layout-fixed).layout-lg-navbar-fixed.text-sm .wrapper .main-sidebar .sidebar{margin-top:calc(2.62475rem + 1px)}.layout-lg-navbar-not-fixed .wrapper .brand-link{position:static}.layout-lg-navbar-not-fixed .wrapper .content-wrapper,.layout-lg-navbar-not-fixed .wrapper .sidebar{margin-top:0}.layout-lg-navbar-not-fixed .wrapper .main-header{position:static}.layout-lg-navbar-not-fixed.layout-fixed .wrapper .sidebar{margin-top:0}}@media (min-width:1200px){.layout-xl-navbar-fixed.layout-fixed .wrapper .control-sidebar{top:calc(3.164rem + 1px)}.layout-xl-navbar-fixed.layout-fixed .wrapper .main-header.text-sm~.control-sidebar,.text-sm .layout-xl-navbar-fixed.layout-fixed .wrapper .main-header~.control-sidebar{top:calc(2.62475rem + 1px)}.layout-xl-navbar-fixed.layout-fixed .wrapper .sidebar{margin-top:calc(3.164rem + 1px)}.layout-xl-navbar-fixed.layout-fixed .wrapper .brand-link.text-sm~.sidebar,.text-sm .layout-xl-navbar-fixed.layout-fixed .wrapper .brand-link~.sidebar{margin-top:calc(2.62475rem + 1px)}.layout-xl-navbar-fixed.layout-fixed.text-sm .wrapper .control-sidebar{top:calc(2.62475rem + 1px)}.layout-xl-navbar-fixed.layout-fixed.text-sm .wrapper .sidebar{margin-top:calc(2.62475rem + 1px)}.layout-xl-navbar-fixed .wrapper .control-sidebar{top:0}.layout-xl-navbar-fixed .wrapper a.anchor{display:block;position:relative;top:calc(-4.164rem + -1px)}.layout-xl-navbar-fixed .wrapper.sidebar-collapse .brand-link{height:calc(3.164rem + 1px);transition:width .3s ease-in-out;width:5.4rem}.layout-xl-navbar-fixed .wrapper.sidebar-collapse .brand-link.text-sm,.text-sm .layout-xl-navbar-fixed .wrapper.sidebar-collapse .brand-link{height:calc(2.62475rem + 1px)}.layout-xl-navbar-fixed .wrapper.sidebar-collapse .main-sidebar:hover .brand-link{transition:width .3s ease-in-out;width:260px}.layout-xl-navbar-fixed .wrapper .brand-link{overflow:hidden;position:fixed;top:0;transition:width .3s ease-in-out;width:260px;z-index:1035}.layout-xl-navbar-fixed .wrapper .sidebar-dark-primary .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-xl-navbar-fixed .wrapper .sidebar-light-primary .brand-link:not([class*=navbar]){background-color:#fff}.layout-xl-navbar-fixed .wrapper .sidebar-dark-secondary .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-xl-navbar-fixed .wrapper .sidebar-light-secondary .brand-link:not([class*=navbar]){background-color:#fff}.layout-xl-navbar-fixed .wrapper .sidebar-dark-success .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-xl-navbar-fixed .wrapper .sidebar-light-success .brand-link:not([class*=navbar]){background-color:#fff}.layout-xl-navbar-fixed .wrapper .sidebar-dark-info .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-xl-navbar-fixed .wrapper .sidebar-light-info .brand-link:not([class*=navbar]){background-color:#fff}.layout-xl-navbar-fixed .wrapper .sidebar-dark-warning .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-xl-navbar-fixed .wrapper .sidebar-light-warning .brand-link:not([class*=navbar]){background-color:#fff}.layout-xl-navbar-fixed .wrapper .sidebar-dark-danger .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-xl-navbar-fixed .wrapper .sidebar-light-danger .brand-link:not([class*=navbar]){background-color:#fff}.layout-xl-navbar-fixed .wrapper .sidebar-dark-light .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-xl-navbar-fixed .wrapper .sidebar-light-light .brand-link:not([class*=navbar]){background-color:#fff}.layout-xl-navbar-fixed .wrapper .sidebar-dark-dark .brand-link:not([class*=navbar]){background-color:#3e4958}.layout-xl-navbar-fixed .wrapper .sidebar-light-dark .brand-link:not([class*=navbar]){background-color:#fff}.layout-xl-navbar-fixed .wrapper .content-wrapper{margin-top:calc(3.164rem + 1px)}.layout-xl-navbar-fixed .wrapper .main-header.text-sm~.content-wrapper,.text-sm .layout-xl-navbar-fixed .wrapper .main-header~.content-wrapper{margin-top:calc(2.62475rem + 1px)}.layout-xl-navbar-fixed .wrapper .main-header{left:0;position:fixed;right:0;top:0;z-index:1037}.layout-xl-navbar-fixed.text-sm .wrapper .content-wrapper{margin-top:calc(2.62475rem + 1px)}body:not(.layout-fixed).layout-xl-navbar-fixed .wrapper .main-sidebar{margin-top:calc(-3.164rem + -1px)}body:not(.layout-fixed).layout-xl-navbar-fixed .wrapper .main-sidebar .sidebar{margin-top:calc(3.164rem + 1px)}body:not(.layout-fixed).layout-xl-navbar-fixed.text-sm .wrapper .main-sidebar{margin-top:calc(-2.62475rem + -1px)}body:not(.layout-fixed).layout-xl-navbar-fixed.text-sm .wrapper .main-sidebar .sidebar{margin-top:calc(2.62475rem + 1px)}.layout-xl-navbar-not-fixed .wrapper .brand-link{position:static}.layout-xl-navbar-not-fixed .wrapper .content-wrapper,.layout-xl-navbar-not-fixed .wrapper .sidebar{margin-top:0}.layout-xl-navbar-not-fixed .wrapper .main-header{position:static}.layout-xl-navbar-not-fixed.layout-fixed .wrapper .sidebar{margin-top:0}}.layout-footer-not-fixed .wrapper .content-wrapper{margin-bottom:0}.layout-footer-fixed .wrapper .control-sidebar{bottom:0}.layout-footer-fixed .wrapper .main-footer{bottom:0;left:0;position:fixed;right:0;z-index:1032}.layout-footer-fixed .wrapper .content-wrapper{padding-bottom:3.45rem}.layout-footer-not-fixed .wrapper .main-footer{position:static}@media (min-width:576px){.layout-sm-footer-fixed .wrapper .control-sidebar{bottom:0}.layout-sm-footer-fixed .wrapper .main-footer{bottom:0;left:0;position:fixed;right:0;z-index:1032}.layout-sm-footer-fixed .wrapper .content-wrapper{padding-bottom:3.45rem}.layout-sm-footer-not-fixed .wrapper .main-footer{position:static}}@media (min-width:768px){.layout-md-footer-fixed .wrapper .control-sidebar{bottom:0}.layout-md-footer-fixed .wrapper .main-footer{bottom:0;left:0;position:fixed;right:0;z-index:1032}.layout-md-footer-fixed .wrapper .content-wrapper{padding-bottom:3.45rem}.layout-md-footer-not-fixed .wrapper .main-footer{position:static}}@media (min-width:992px){.layout-lg-footer-fixed .wrapper .control-sidebar{bottom:0}.layout-lg-footer-fixed .wrapper .main-footer{bottom:0;left:0;position:fixed;right:0;z-index:1032}.layout-lg-footer-fixed .wrapper .content-wrapper{padding-bottom:3.45rem}.layout-lg-footer-not-fixed .wrapper .main-footer{position:static}}@media (min-width:1200px){.layout-xl-footer-fixed .wrapper .control-sidebar{bottom:0}.layout-xl-footer-fixed .wrapper .main-footer{bottom:0;left:0;position:fixed;right:0;z-index:1032}.layout-xl-footer-fixed .wrapper .content-wrapper{padding-bottom:3.45rem}.layout-xl-footer-not-fixed .wrapper .main-footer{position:static}}.layout-top-nav .wrapper{margin-left:0}.layout-top-nav .wrapper .main-header .brand-image{margin-top:-.5rem;margin-right:.2rem;height:33px}.layout-top-nav .wrapper .main-sidebar{bottom:inherit;height:inherit}.layout-top-nav .wrapper .content-wrapper,.layout-top-nav .wrapper .main-footer,.layout-top-nav .wrapper .main-header,body.sidebar-collapse:not(.sidebar-mini-md):not(.sidebar-mini) .content-wrapper,body.sidebar-collapse:not(.sidebar-mini-md):not(.sidebar-mini) .content-wrapper:before,body.sidebar-collapse:not(.sidebar-mini-md):not(.sidebar-mini) .main-footer,body.sidebar-collapse:not(.sidebar-mini-md):not(.sidebar-mini) .main-footer:before,body.sidebar-collapse:not(.sidebar-mini-md):not(.sidebar-mini) .main-header,body.sidebar-collapse:not(.sidebar-mini-md):not(.sidebar-mini) .main-header:before{margin-left:0}@media (min-width:768px){body:not(.sidebar-mini-md) .content-wrapper,body:not(.sidebar-mini-md) .main-footer,body:not(.sidebar-mini-md) .main-header{transition:margin-left .3s ease-in-out;margin-left:260px}}@media (min-width:768px) and (prefers-reduced-motion:reduce){body:not(.sidebar-mini-md) .content-wrapper,body:not(.sidebar-mini-md) .main-footer,body:not(.sidebar-mini-md) .main-header{transition:none}}@media (min-width:768px){.sidebar-collapse body:not(.sidebar-mini-md) .content-wrapper,.sidebar-collapse body:not(.sidebar-mini-md) .main-footer,.sidebar-collapse body:not(.sidebar-mini-md) .main-header{margin-left:0}}@media (max-width:991.98px){body:not(.sidebar-mini-md) .content-wrapper,body:not(.sidebar-mini-md) .content-wrapper:before,body:not(.sidebar-mini-md) .main-footer,body:not(.sidebar-mini-md) .main-footer:before,body:not(.sidebar-mini-md) .main-header,body:not(.sidebar-mini-md) .main-header:before{margin-left:0}}@media (min-width:768px){.sidebar-mini-md .content-wrapper,.sidebar-mini-md .main-footer,.sidebar-mini-md .main-header{transition:margin-left .3s ease-in-out;margin-left:260px}}@media (min-width:768px) and (prefers-reduced-motion:reduce){.sidebar-mini-md .content-wrapper,.sidebar-mini-md .main-footer,.sidebar-mini-md .main-header{transition:none}}@media (min-width:768px){.sidebar-collapse .sidebar-mini-md .content-wrapper,.sidebar-collapse .sidebar-mini-md .main-footer,.sidebar-collapse .sidebar-mini-md .main-header{margin-left:5.4rem}}@media (max-width:991.98px){.sidebar-mini-md .content-wrapper,.sidebar-mini-md .content-wrapper:before,.sidebar-mini-md .main-footer,.sidebar-mini-md .main-footer:before,.sidebar-mini-md .main-header,.sidebar-mini-md .main-header:before{margin-left:5.4rem}}.content-wrapper{background:#f4f6f9}.content-wrapper>.content{padding:0 1rem}.main-sidebar,.main-sidebar:before{transition:margin-left .3s ease-in-out,width .3s ease-in-out;width:260px}@media (prefers-reduced-motion:reduce){.main-sidebar,.main-sidebar:before{transition:none}}.sidebar-collapse:not(.sidebar-mini):not(.sidebar-mini-md) .main-sidebar,.sidebar-collapse:not(.sidebar-mini):not(.sidebar-mini-md) .main-sidebar:before{box-shadow:none!important}.sidebar-collapse .main-sidebar,.sidebar-collapse .main-sidebar:before{margin-left:-260px}.sidebar-collapse .main-sidebar .nav-sidebar.nav-child-indent .nav-treeview{padding:0}@media (max-width:767.98px){.main-sidebar,.main-sidebar:before{box-shadow:none!important;margin-left:-260px}.sidebar-open .main-sidebar,.sidebar-open .main-sidebar:before{margin-left:0}}:not(.layout-fixed) .main-sidebar{height:inherit;min-height:100%;position:absolute;top:0}.layout-fixed .brand-link{width:260px}.layout-fixed .main-sidebar{left:0}.layout-fixed .control-sidebar,.layout-fixed .main-sidebar{bottom:0;float:none;height:100vh;position:fixed;top:0}.layout-fixed .control-sidebar .control-sidebar-content{height:calc(100vh - 3.164rem - 1px)}@supports (-webkit-touch-callout:none){.layout-fixed .main-sidebar{height:inherit}}.main-footer{background:transparent;border-top:0 solid #dae1e7;padding:.5rem 1rem;font-size:90%}.main-footer.text-sm,.text-sm .main-footer{padding:.812rem}.content-header{padding:15px 1rem}.text-sm .content-header{padding:10px 1rem}.content-header h1{font-size:1.8rem;margin:0}.text-sm .content-header h1{font-size:1.5rem}.content-header .breadcrumb{background:transparent;line-height:1.8rem;margin-bottom:0;padding:0;font-size:97%}.text-sm .content-header .breadcrumb{line-height:1.5rem}.hold-transition .content-wrapper,.hold-transition .control-sidebar,.hold-transition .control-sidebar *,.hold-transition .main-footer,.hold-transition .main-header,.hold-transition .main-sidebar,.hold-transition .main-sidebar *{transition:none!important}.main-header{border-bottom:1px solid #dae1e7;z-index:1034}.main-header .nav-link{height:2.164rem;position:relative}.main-header.text-sm .nav-link,.text-sm .main-header .nav-link{height:1.62475rem;padding:.35rem .5rem}.main-header.text-sm .nav-link>.fa,.main-header.text-sm .nav-link>.fab,.main-header.text-sm .nav-link>.far,.main-header.text-sm .nav-link>.fas,.main-header.text-sm .nav-link>.glyphicon,.main-header.text-sm .nav-link>.ion,.text-sm .main-header .nav-link>.fa,.text-sm .main-header .nav-link>.fab,.text-sm .main-header .nav-link>.far,.text-sm .main-header .nav-link>.fas,.text-sm .main-header .nav-link>.glyphicon,.text-sm .main-header .nav-link>.ion{font-size:1rem}.main-header .navbar-nav .nav-item{margin:0}.main-header .navbar-nav[class*=-right] .dropdown-menu{left:auto;margin-top:-3px;right:0}@media (max-width:575.98px){.main-header .navbar-nav[class*=-right] .dropdown-menu{left:0;right:auto}}.navbar-img{height:calc(3.164rem + 1px)/2;width:auto}.navbar-badge{font-size:.6rem;font-weight:300;padding:2px 4px;position:absolute;right:5px;top:9px}.btn-navbar{background-color:transparent;border-left-width:0}.form-control-navbar{border-right-width:0}.form-control-navbar+.input-group-append{margin-left:0}.btn-navbar,.form-control-navbar{transition:none}.navbar-dark .btn-navbar,.navbar-dark .form-control-navbar{background-color:hsla(0,0%,100%,.2);border:0}.navbar-dark .form-control-navbar::-moz-placeholder{color:hsla(0,0%,100%,.6)}.navbar-dark .form-control-navbar:-ms-input-placeholder{color:hsla(0,0%,100%,.6)}.navbar-dark .form-control-navbar::placeholder{color:hsla(0,0%,100%,.6)}.navbar-dark .form-control-navbar+.input-group-append>.btn-navbar{color:hsla(0,0%,100%,.6)}.navbar-dark .form-control-navbar:focus,.navbar-dark .form-control-navbar:focus+.input-group-append .btn-navbar{background-color:hsla(0,0%,100%,.6);border:0!important;color:#1e1e1e}.navbar-light .btn-navbar,.navbar-light .form-control-navbar{background-color:#b4bac2;border:0}.navbar-light .form-control-navbar::-moz-placeholder{color:rgba(0,0,0,.6)}.navbar-light .form-control-navbar:-ms-input-placeholder{color:rgba(0,0,0,.6)}.navbar-light .form-control-navbar::placeholder{color:rgba(0,0,0,.6)}.navbar-light .form-control-navbar+.input-group-append>.btn-navbar{color:rgba(0,0,0,.6)}.navbar-light .form-control-navbar:focus,.navbar-light .form-control-navbar:focus+.input-group-append .btn-navbar{background-color:#ededed;border:0!important;color:#1e1e1e}.brand-link{display:block;font-size:2rem;line-height:1.25;padding:.132rem .5rem;transition:width .3s ease-in-out;white-space:nowrap}.brand-link:hover{color:#fff;text-decoration:none}.text-sm .brand-link{font-size:inherit}[class*=sidebar-dark] .brand-link{border-bottom:0;color:hsla(0,0%,100%,.8)}[class*=sidebar-light] .brand-link{border-bottom:0;color:rgba(34,41,47,.8)}.brand-link .brand-image{float:left;line-height:.8;margin-left:.8rem;margin-right:.5rem;margin-top:-3px;max-height:33px;width:auto}.brand-link .brand-image-xs{float:left;line-height:.8;margin-top:-.1rem;max-height:33px;width:auto}.brand-link .brand-image-xl{line-height:.8;max-height:40px;width:auto}.brand-link.text-sm .brand-image,.text-sm .brand-link .brand-image{height:29px;margin-bottom:-.25rem;margin-left:.95rem;margin-top:-.25rem}.brand-link.text-sm .brand-image-xs,.text-sm .brand-link .brand-image-xs{margin-top:-.2rem;max-height:29px}.brand-link.text-sm .brand-image-xl,.text-sm .brand-link .brand-image-xl{margin-top:-.225rem;max-height:38px}.main-sidebar{height:100vh;overflow-y:hidden;z-index:1038}.main-sidebar a:-moz-focusring{border:0;outline:none}.main-sidebar .nav .nav-item .nav-link{padding:10px 10px 10px 25px!important}.main-sidebar .nav-treeview.nav .nav-item .nav-link{padding:5px 10px 7px 25px!important}.sidebar{height:calc(100% - 3.164rem - 1px);overflow-y:auto;padding:0 .5rem}.user-panel{position:relative}[class*=sidebar-dark] .user-panel{border-bottom:1px solid #3c4853}[class*=sidebar-light] .user-panel{border-bottom:1px solid #dae1e7}.user-panel,.user-panel .info{overflow:hidden;white-space:nowrap}.user-panel .image{display:inline-block;padding-left:.3rem}.user-panel img{height:auto;width:2.5666666667rem}.user-panel .info{display:inline-block;padding:5px 5px 5px 10px}.user-panel .dropdown-menu,.user-panel .status{font-size:1rem}.nav-sidebar .nav-item>.nav-link{margin-bottom:.2rem}.nav-sidebar .nav-item>.nav-link .right{transition:transform .3s ease-in-out}@media (prefers-reduced-motion:reduce){.nav-sidebar .nav-item>.nav-link .right{transition:none}}.nav-sidebar .nav-link>.right,.nav-sidebar .nav-link>p>.right{position:absolute;right:1rem;top:.9rem}.nav-sidebar .nav-link>.right i,.nav-sidebar .nav-link>.right span,.nav-sidebar .nav-link>p>.right i,.nav-sidebar .nav-link>p>.right span{margin-left:.5rem}.nav-sidebar .nav-link>.right:nth-child(2),.nav-sidebar .nav-link>p>.right:nth-child(2){right:2.2rem}.nav-sidebar .menu-open>.nav-treeview{display:block;border-radius:0}.nav-sidebar .menu-open>.nav-link i.right{transform:rotate(-90deg)}.nav-sidebar>.nav-item{margin-bottom:0}.nav-sidebar>.nav-item .nav-icon{margin-left:.05rem;font-size:1.2rem;margin-right:.2rem;text-align:center;width:2.4rem}.nav-sidebar>.nav-item .nav-icon.fa,.nav-sidebar>.nav-item .nav-icon.fab,.nav-sidebar>.nav-item .nav-icon.far,.nav-sidebar>.nav-item .nav-icon.fas,.nav-sidebar>.nav-item .nav-icon.glyphicon,.nav-sidebar>.nav-item .nav-icon.ion{font-size:1.1rem}.nav-sidebar>.nav-item .float-right{margin-top:3px}.nav-sidebar .nav-treeview{display:none;list-style:none;padding:0}.nav-sidebar .nav-treeview>.nav-item>.nav-link>.nav-icon{width:2.4rem}.nav-sidebar.nav-child-indent .nav-treeview{transition:padding .3s ease-in-out;padding-left:1rem}.text-sm .nav-sidebar.nav-child-indent .nav-treeview{padding-left:.5rem}.nav-sidebar.nav-child-indent.nav-legacy .nav-treeview .nav-treeview{padding-left:2rem;margin-left:-1rem}.text-sm .nav-sidebar.nav-child-indent.nav-legacy .nav-treeview .nav-treeview{padding-left:1rem;margin-left:-.5rem}.nav-sidebar .nav-header{font-size:.9rem;padding:.357rem}.nav-sidebar .nav-header:not(:first-of-type){padding:1.7rem 1rem .5rem}.nav-sidebar .nav-link p{display:inline-block;margin:0}#sidebar-overlay{background-color:rgba(34,41,47,.1);bottom:0;display:none;left:0;position:fixed;right:0;top:0;z-index:1037}@media (max-width:991.98px){.sidebar-open #sidebar-overlay{display:block}}[class*=sidebar-light-]{background-color:#fff}[class*=sidebar-light-] .user-panel a:hover{color:#555}[class*=sidebar-light-] .user-panel .status,[class*=sidebar-light-] .user-panel .status:active,[class*=sidebar-light-] .user-panel .status:focus,[class*=sidebar-light-] .user-panel .status:hover{background:transparent;color:#555}[class*=sidebar-light-] .user-panel .dropdown-menu{border-color:transparent}[class*=sidebar-light-] .user-panel .dropdown-item{color:#626262}[class*=sidebar-light-] .nav-sidebar>.nav-item>.nav-link:active,[class*=sidebar-light-] .nav-sidebar>.nav-item>.nav-link:focus{color:#555}[class*=sidebar-light-] .nav-sidebar>.nav-item>.nav-link i{margin-right:.75rem;font-size:1.2rem}[class*=sidebar-light-] .nav-sidebar>.nav-item>.nav-link p i{margin-right:0;margin-top:1px}[class*=sidebar-light-] .nav-sidebar>.nav-item.menu-open>.nav-link,[class*=sidebar-light-] .nav-sidebar>.nav-item:hover>.nav-link{background-color:transparent;color:#555}[class*=sidebar-light-] .nav-sidebar>.nav-item>.nav-link.active{color:#fff}[class*=sidebar-light-] .nav-sidebar>.nav-item>.nav-treeview{background:transparent}[class*=sidebar-light-] .nav-header{background:inherit;color:#484848}[class*=sidebar-light-] .sidebar a{color:#555}[class*=sidebar-light-] .sidebar a:hover{text-decoration:none}[class*=sidebar-light-] .nav-treeview>.nav-item>.nav-link{color:#555}[class*=sidebar-light-] .nav-treeview>.nav-item>.nav-link i{margin-right:.75rem;margin-left:3px}[class*=sidebar-light-] .nav-treeview>.nav-item>.nav-link p i{margin-right:0}[class*=sidebar-light-] .nav-treeview>.nav-item>.nav-link.active,[class*=sidebar-light-] .nav-treeview>.nav-item>.nav-link.active:hover{background-color:transparent!important;background-image:linear-gradient(118deg,rgba(88,108,177,.95),rgba(88,108,177,.7));color:#fff;box-shadow:0 0 8px 1px rgba(88,108,177,.7)}[class*=sidebar-light-] .nav-treeview>.nav-item>.nav-link:hover{background-color:transparent}[class*=sidebar-light-] .nav-flat .nav-item .nav-treeview .nav-treeview,[class*=sidebar-light-] .nav-flat .nav-item .nav-treeview>.nav-item>.nav-link,[class*=sidebar-light-] .nav-flat .nav-item .nav-treeview>.nav-item>.nav-link.active{border-color:linear-gradient(118deg,#586cb1,rgba(88,108,177,.7))}[class*=sidebar-dark-]{background-image:linear-gradient(0deg,#77889f,#3e4958)}[class*=sidebar-dark-] .nav-treeview.nav .nav-item .nav-link{font-size:1rem!important;margin-bottom:0}[class*=sidebar-dark-] .nav-sidebar .nav-link>p>.right{right:.5rem}[class*=sidebar-dark-] .user-panel a:hover{color:hsla(0,0%,100%,.95)}[class*=sidebar-dark-] .user-panel .status,[class*=sidebar-dark-] .user-panel .status:active,[class*=sidebar-dark-] .user-panel .status:focus,[class*=sidebar-dark-] .user-panel .status:hover{background:transparent;color:hsla(0,0%,100%,.95)}[class*=sidebar-dark-] .user-panel .dropdown-menu{border-color:transparent}[class*=sidebar-dark-] .user-panel .dropdown-item{color:#626262}[class*=sidebar-dark-] .nav-sidebar>.nav-item>.nav-link:active{color:#fff;font-weight:700}[class*=sidebar-dark-] .nav-sidebar>.nav-item>.nav-link:hover{color:hsla(0,0%,100%,.95)}[class*=sidebar-dark-] .nav-sidebar>.nav-item i{margin-right:.75rem;color:hsla(0,0%,100%,.95)}[class*=sidebar-dark-] .nav-sidebar>.nav-item.menu-open>.nav-link,[class*=sidebar-dark-] .nav-sidebar>.nav-item:hover>.nav-link,[class*=sidebar-dark-] .nav-sidebar>.nav-item>.nav-link:focus{background-color:transparent;color:hsla(0,0%,100%,.95)}[class*=sidebar-dark-] .nav-sidebar>.nav-item>.nav-link.active{color:#fff;background:transparent;font-weight:700}[class*=sidebar-dark-] .nav-header{background:inherit;color:hsla(0,0%,100%,.95)}[class*=sidebar-dark-] .sidebar a{color:hsla(0,0%,100%,.95)}[class*=sidebar-dark-] .sidebar a:focus,[class*=sidebar-dark-] .sidebar a:hover{text-decoration:none}[class*=sidebar-dark-] .nav-treeview>.nav-item>.nav-link{color:hsla(0,0%,100%,.95)}[class*=sidebar-dark-] .nav-treeview>.nav-item>.nav-link.active,[class*=sidebar-dark-] .nav-treeview>.nav-item>.nav-link.active:focus,[class*=sidebar-dark-] .nav-treeview>.nav-item>.nav-link.active:hover,[class*=sidebar-dark-] .nav-treeview>.nav-item>.nav-link:focus,[class*=sidebar-dark-] .nav-treeview>.nav-item>.nav-link:hover{background-color:transparent;color:#fff;font-weight:700}[class*=sidebar-dark-] .nav-flat .nav-item .nav-treeview .nav-treeview,[class*=sidebar-dark-] .nav-flat .nav-item .nav-treeview>.nav-item>.nav-link,[class*=sidebar-dark-] .nav-flat .nav-item .nav-treeview>.nav-item>.nav-link.active{border-color:transparent}.sidebar-light-primary .nav-item>.nav-link.active{background-color:transparent!important;background-image:linear-gradient(118deg,rgba(88,108,177,.95),rgba(88,108,177,.7));color:#fff;box-shadow:0 0 8px 1px rgba(88,108,177,.7)}.sidebar-light-primary .active-bg-light .nav-item>.nav-link.active{background-color:rgba(88,108,177,.15)!important;color:#586cb1!important;font-weight:700;box-shadow:0 0 8px 1px rgba(88,108,177,.15)}.sidebar-mini-md .main-sidebar.sidebar-focused .nav-compact.nav-sidebar.nav-child-indent:not(.nav-flat) .nav-treeview,.sidebar-mini-md .main-sidebar:not(.sidebar-no-expand) .nav-compact.nav-sidebar.nav-child-indent:not(.nav-flat) .nav-treeview,.sidebar-mini-md .main-sidebar:not(.sidebar-no-expand):hover .nav-compact.nav-sidebar.nav-child-indent:not(.nav-flat) .nav-treeview,.sidebar-mini .main-sidebar.sidebar-focused .nav-compact.nav-sidebar.nav-child-indent:not(.nav-flat) .nav-treeview,.sidebar-mini .main-sidebar:not(.sidebar-no-expand) .nav-compact.nav-sidebar.nav-child-indent:not(.nav-flat) .nav-treeview,.sidebar-mini .main-sidebar:not(.sidebar-no-expand):hover .nav-compact.nav-sidebar.nav-child-indent:not(.nav-flat) .nav-treeview{padding-left:1rem;margin-left:-.5rem}.nav-flat{margin:-.25rem -.5rem 0}.nav-flat .nav-item>.nav-link{border-radius:0;margin-bottom:0}.nav-flat .nav-item>.nav-link>.nav-icon{margin-left:.55rem}.nav-flat:not(.nav-child-indent) .nav-treeview .nav-item>.nav-link>.nav-icon{margin-left:.4rem}.nav-flat.nav-child-indent .nav-treeview{padding-left:0}.nav-flat.nav-child-indent .nav-treeview .nav-icon{margin-left:.85rem}.nav-flat.nav-child-indent .nav-treeview .nav-treeview{border-left:.2rem solid}.nav-flat.nav-child-indent .nav-treeview .nav-treeview .nav-icon{margin-left:1.15rem}.nav-flat.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-icon{margin-left:1.45rem}.nav-flat.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-icon{margin-left:1.75rem}.nav-flat.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-icon{margin-left:2.05rem}.sidebar-collapse .nav-flat.nav-child-indent .nav-treeview .nav-icon{margin-left:.55rem}.sidebar-collapse .nav-flat.nav-child-indent .nav-treeview .nav-link{padding-left:.3rem}.sidebar-collapse .nav-flat.nav-child-indent .nav-treeview .nav-treeview .nav-icon{margin-left:.35rem}.sidebar-collapse .nav-flat.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-icon{margin-left:.15rem}.sidebar-collapse .nav-flat.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-icon{margin-left:-.15rem}.sidebar-collapse .nav-flat.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-icon{margin-left:-.35rem}.sidebar-mini-md .main-sidebar.sidebar-focused .nav-flat.nav-compact.nav-sidebar .nav-treeview .nav-icon,.sidebar-mini-md .main-sidebar:not(.sidebar-no-expand):hover .nav-flat.nav-compact.nav-sidebar .nav-treeview .nav-icon,.sidebar-mini .main-sidebar.sidebar-focused .nav-flat.nav-compact.nav-sidebar .nav-treeview .nav-icon,.sidebar-mini .main-sidebar:not(.sidebar-no-expand):hover .nav-flat.nav-compact.nav-sidebar .nav-treeview .nav-icon{margin-left:.4rem}.sidebar-mini-md .main-sidebar.sidebar-focused .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-icon,.sidebar-mini-md .main-sidebar:not(.sidebar-no-expand):hover .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-icon,.sidebar-mini .main-sidebar.sidebar-focused .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-icon,.sidebar-mini .main-sidebar:not(.sidebar-no-expand):hover .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-icon{margin-left:.85rem}.sidebar-mini-md .main-sidebar.sidebar-focused .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-icon,.sidebar-mini-md .main-sidebar:not(.sidebar-no-expand):hover .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-icon,.sidebar-mini .main-sidebar.sidebar-focused .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-icon,.sidebar-mini .main-sidebar:not(.sidebar-no-expand):hover .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-icon{margin-left:1.15rem}.sidebar-mini-md .main-sidebar.sidebar-focused .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-icon,.sidebar-mini-md .main-sidebar:not(.sidebar-no-expand):hover .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-icon,.sidebar-mini .main-sidebar.sidebar-focused .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-icon,.sidebar-mini .main-sidebar:not(.sidebar-no-expand):hover .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-icon{margin-left:1.45rem}.sidebar-mini-md .main-sidebar.sidebar-focused .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-icon,.sidebar-mini-md .main-sidebar:not(.sidebar-no-expand):hover .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-icon,.sidebar-mini .main-sidebar.sidebar-focused .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-icon,.sidebar-mini .main-sidebar:not(.sidebar-no-expand):hover .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-icon{margin-left:1.75rem}.sidebar-mini-md .main-sidebar.sidebar-focused .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-icon,.sidebar-mini-md .main-sidebar:not(.sidebar-no-expand):hover .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-icon,.sidebar-mini .main-sidebar.sidebar-focused .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-icon,.sidebar-mini .main-sidebar:not(.sidebar-no-expand):hover .nav-flat.nav-sidebar.nav-child-indent .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-treeview .nav-icon{margin-left:2.05rem}.nav-flat .nav-icon{transition:margin-left .3s ease-in-out}@media (prefers-reduced-motion:reduce){.nav-flat .nav-icon{transition:none}}.nav-flat .nav-treeview .nav-icon{margin-left:-.2rem}.nav-flat.nav-sidebar>.nav-item .nav-treeview,.nav-flat.nav-sidebar>.nav-item>.nav-treeview{background:hsla(0,0%,100%,.05)}.nav-flat.nav-sidebar>.nav-item .nav-treeview .nav-item>.nav-link,.nav-flat.nav-sidebar>.nav-item>.nav-treeview .nav-item>.nav-link{border-left:.2rem solid}.nav-legacy{margin:-.25rem -.5rem 0}.nav-legacy.nav-sidebar .nav-item>.nav-link{border-radius:0;margin-bottom:0}.nav-legacy.nav-sidebar .nav-item>.nav-link>.nav-icon{margin-left:.55rem}.text-sm .nav-legacy.nav-sidebar .nav-item>.nav-link>.nav-icon{margin-left:.75rem}.nav-legacy.nav-sidebar>.nav-item>.nav-link.active{background:inherit;border-left:3px solid transparent;box-shadow:none}.nav-legacy.nav-sidebar>.nav-item>.nav-link.active>.nav-icon{margin-left:calc(.55rem - 3px)}.text-sm .nav-legacy.nav-sidebar.nav-flat .nav-treeview .nav-item>.nav-link>.nav-icon,.text-sm .nav-legacy.nav-sidebar>.nav-item>.nav-link.active>.nav-icon{margin-left:calc(.75rem - 3px)}.sidebar-mini-md .nav-legacy>.nav-item .nav-link .nav-icon,.sidebar-mini .nav-legacy>.nav-item .nav-link .nav-icon{transition:margin-left .3s ease-in-out;margin-left:.75rem}@media (prefers-reduced-motion:reduce){.sidebar-mini-md .nav-legacy>.nav-item .nav-link .nav-icon,.sidebar-mini .nav-legacy>.nav-item .nav-link .nav-icon{transition:none}}.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused .nav-legacy.nav-child-indent .nav-treeview,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover .nav-legacy.nav-child-indent .nav-treeview,.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused .nav-legacy.nav-child-indent .nav-treeview,.sidebar-mini.sidebar-collapse .main-sidebar:hover .nav-legacy.nav-child-indent .nav-treeview{padding-left:1rem}.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused .nav-legacy.nav-child-indent .nav-treeview .nav-treeview,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover .nav-legacy.nav-child-indent .nav-treeview .nav-treeview,.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused .nav-legacy.nav-child-indent .nav-treeview .nav-treeview,.sidebar-mini.sidebar-collapse .main-sidebar:hover .nav-legacy.nav-child-indent .nav-treeview .nav-treeview{padding-left:2rem;margin-left:-1rem}.sidebar-mini-md.sidebar-collapse.text-sm .main-sidebar.sidebar-focused .nav-legacy.nav-child-indent .nav-treeview,.sidebar-mini-md.sidebar-collapse.text-sm .main-sidebar:hover .nav-legacy.nav-child-indent .nav-treeview,.sidebar-mini.sidebar-collapse.text-sm .main-sidebar.sidebar-focused .nav-legacy.nav-child-indent .nav-treeview,.sidebar-mini.sidebar-collapse.text-sm .main-sidebar:hover .nav-legacy.nav-child-indent .nav-treeview{padding-left:.5rem}.sidebar-mini-md.sidebar-collapse.text-sm .main-sidebar.sidebar-focused .nav-legacy.nav-child-indent .nav-treeview .nav-treeview,.sidebar-mini-md.sidebar-collapse.text-sm .main-sidebar:hover .nav-legacy.nav-child-indent .nav-treeview .nav-treeview,.sidebar-mini.sidebar-collapse.text-sm .main-sidebar.sidebar-focused .nav-legacy.nav-child-indent .nav-treeview .nav-treeview,.sidebar-mini.sidebar-collapse.text-sm .main-sidebar:hover .nav-legacy.nav-child-indent .nav-treeview .nav-treeview{padding-left:1rem;margin-left:-.5rem}.sidebar-mini-md.sidebar-collapse .nav-legacy>.nav-item>.nav-link .nav-icon,.sidebar-mini.sidebar-collapse .nav-legacy>.nav-item>.nav-link .nav-icon{margin-left:.55rem}.sidebar-mini-md.sidebar-collapse .nav-legacy>.nav-item>.nav-link.active>.nav-icon,.sidebar-mini.sidebar-collapse .nav-legacy>.nav-item>.nav-link.active>.nav-icon{margin-left:.36rem}.sidebar-mini-md.sidebar-collapse .nav-legacy.nav-child-indent .nav-treeview .nav-treeview,.sidebar-mini.sidebar-collapse .nav-legacy.nav-child-indent .nav-treeview .nav-treeview{padding-left:0;margin-left:0}.sidebar-mini-md.sidebar-collapse.text-sm .nav-legacy>.nav-item>.nav-link .nav-icon,.sidebar-mini.sidebar-collapse.text-sm .nav-legacy>.nav-item>.nav-link .nav-icon{margin-left:.75rem}.sidebar-mini-md.sidebar-collapse.text-sm .nav-legacy>.nav-item>.nav-link.active>.nav-icon,.sidebar-mini.sidebar-collapse.text-sm .nav-legacy>.nav-item>.nav-link.active>.nav-icon{margin-left:calc(.75rem - 3px)}[class*=sidebar-dark] .nav-legacy.nav-sidebar>.nav-item .nav-treeview,[class*=sidebar-dark] .nav-legacy.nav-sidebar>.nav-item>.nav-treeview{background:hsla(0,0%,100%,.05)}[class*=sidebar-dark] .nav-legacy.nav-sidebar>.nav-item>.nav-link.active{color:#fff}[class*=sidebar-dark] .nav-legacy .nav-treeview>.nav-item>.nav-link.active,[class*=sidebar-dark] .nav-legacy .nav-treeview>.nav-item>.nav-link:focus,[class*=sidebar-dark] .nav-legacy .nav-treeview>.nav-item>.nav-link:hover{background:none;color:#fff}[class*=sidebar-light] .nav-legacy.nav-sidebar>.nav-item .nav-treeview,[class*=sidebar-light] .nav-legacy.nav-sidebar>.nav-item>.nav-treeview{background:rgba(34,41,47,.05)}[class*=sidebar-light] .nav-legacy.nav-sidebar>.nav-item>.nav-link.active{color:#fff}[class*=sidebar-light] .nav-legacy .nav-treeview>.nav-item>.nav-link.active,[class*=sidebar-light] .nav-legacy .nav-treeview>.nav-item>.nav-link:focus,[class*=sidebar-light] .nav-legacy .nav-treeview>.nav-item>.nav-link:hover{background:none;color:#fff}.nav-collapse-hide-child .menu-open>.nav-treeview{max-height:-webkit-min-content;max-height:-moz-min-content;max-height:min-content;opacity:1}.sidebar-collapse .nav-collapse-hide-child .menu-open>.nav-treeview{max-height:0;opacity:0}.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused .nav-collapse-hide-child .menu-open>.nav-treeview,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover .nav-collapse-hide-child .menu-open>.nav-treeview,.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused .nav-collapse-hide-child .menu-open>.nav-treeview,.sidebar-mini.sidebar-collapse .main-sidebar:hover .nav-collapse-hide-child .menu-open>.nav-treeview{max-height:-webkit-min-content;max-height:-moz-min-content;max-height:min-content;opacity:1}.nav-compact .nav-header,.nav-compact .nav-link{padding-top:.1785rem;padding-bottom:.1785rem}.nav-compact .nav-header:not(:first-of-type){padding-top:.5355rem;padding-bottom:.1785rem}.nav-compact .nav-link>.right,.nav-compact .nav-link>p>.right{top:.465rem}.text-sm .nav-compact .nav-link>.right,.text-sm .nav-compact .nav-link>p>.right{top:.7rem}[class*=sidebar-dark] .btn-sidebar,[class*=sidebar-dark] .form-control-sidebar{background:#495567;border:1px solid #5e6e85;color:#fff}[class*=sidebar-dark] .btn-sidebar:focus,[class*=sidebar-dark] .form-control-sidebar:focus{border:1px solid #8695a9}[class*=sidebar-dark] .btn-sidebar:hover{background:#4e5c6e}[class*=sidebar-dark] .btn-sidebar:focus{background:#536276}[class*=sidebar-light] .btn-sidebar,[class*=sidebar-light] .form-control-sidebar{background:#f2f2f2;border:1px solid #d9d9d9;color:#2a2e30}[class*=sidebar-light] .btn-sidebar:focus,[class*=sidebar-light] .form-control-sidebar:focus{border:1px solid #b3b3b3}[class*=sidebar-light] .btn-sidebar:hover{background:#ececec}[class*=sidebar-light] .btn-sidebar:focus{background:#e6e6e6}.logo-xl,.logo-xs{opacity:1;position:absolute;visibility:visible}.logo-xl.brand-image-xs,.logo-xs.brand-image-xs{left:18px;top:12px}.logo-xl.brand-image-xl,.logo-xs.brand-image-xl{left:12px;top:6px}.logo-xs{opacity:0;visibility:hidden}.logo-xs.brand-image-xl{left:16px;top:8px}.brand-link.logo-switch:before{content:"\A0"}@media (min-width:992px){.sidebar-mini .nav-sidebar,.sidebar-mini .nav-sidebar .nav-link,.sidebar-mini .nav-sidebar>.nav-header{white-space:nowrap;overflow:hidden}.sidebar-mini.sidebar-collapse .d-hidden-mini{display:none}.sidebar-mini.sidebar-collapse .content-wrapper,.sidebar-mini.sidebar-collapse .main-footer,.sidebar-mini.sidebar-collapse .main-header{margin-left:5.4rem!important}.sidebar-mini.sidebar-collapse .nav-sidebar .nav-header{display:none}.sidebar-mini.sidebar-collapse .nav-sidebar .nav-link p{width:0}.sidebar-mini.sidebar-collapse .brand-text,.sidebar-mini.sidebar-collapse .nav-sidebar .nav-link p,.sidebar-mini.sidebar-collapse .sidebar .user-panel>.info{margin-left:-10px;opacity:0;visibility:hidden}.sidebar-mini.sidebar-collapse .logo-xl{opacity:0;visibility:hidden}.sidebar-mini.sidebar-collapse .logo-xs{display:inline-block;opacity:1;visibility:visible}.sidebar-mini.sidebar-collapse .main-sidebar{overflow-x:hidden}.sidebar-mini.sidebar-collapse .main-sidebar,.sidebar-mini.sidebar-collapse .main-sidebar:before{margin-left:0;width:5.4rem}.sidebar-mini.sidebar-collapse .main-sidebar .user-panel .image{float:none}.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused,.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused .brand-link,.sidebar-mini.sidebar-collapse .main-sidebar:hover,.sidebar-mini.sidebar-collapse .main-sidebar:hover .brand-link{width:260px}.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused .user-panel,.sidebar-mini.sidebar-collapse .main-sidebar:hover .user-panel{text-align:left}.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused .user-panel .image,.sidebar-mini.sidebar-collapse .main-sidebar:hover .user-panel .image{float:left}.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused .brand-text,.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused .logo-xl,.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused .nav-sidebar .nav-link p,.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused .user-panel>.info,.sidebar-mini.sidebar-collapse .main-sidebar:hover .brand-text,.sidebar-mini.sidebar-collapse .main-sidebar:hover .logo-xl,.sidebar-mini.sidebar-collapse .main-sidebar:hover .nav-sidebar .nav-link p,.sidebar-mini.sidebar-collapse .main-sidebar:hover .user-panel>.info{display:inline-block;margin-left:0;opacity:1;visibility:visible}.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused .logo-xs,.sidebar-mini.sidebar-collapse .main-sidebar:hover .logo-xs{opacity:0;visibility:hidden}.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused .brand-image,.sidebar-mini.sidebar-collapse .main-sidebar:hover .brand-image{margin-right:.5rem}.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused .sidebar-form,.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused .user-panel>.info,.sidebar-mini.sidebar-collapse .main-sidebar:hover .sidebar-form,.sidebar-mini.sidebar-collapse .main-sidebar:hover .user-panel>.info{display:block!important;-webkit-transform:translateZ(0)}.sidebar-mini.sidebar-collapse .main-sidebar.sidebar-focused .nav-sidebar>.nav-item>.nav-link>span,.sidebar-mini.sidebar-collapse .main-sidebar:hover .nav-sidebar>.nav-item>.nav-link>span{display:inline-block!important}.sidebar-mini.sidebar-collapse .visible-sidebar-mini{display:block!important}.sidebar-mini.sidebar-collapse.layout-fixed .main-sidebar:hover .brand-link{width:260px}.sidebar-mini.sidebar-collapse.layout-fixed .brand-link{width:5.4rem}}@media (max-width:991.98px){.sidebar-mini.sidebar-collapse .main-sidebar{box-shadow:none!important}}@media (min-width:768px){.sidebar-mini-md .nav-sidebar,.sidebar-mini-md .nav-sidebar .nav-link,.sidebar-mini-md .nav-sidebar>.nav-header{white-space:nowrap;overflow:hidden}.sidebar-mini-md.sidebar-collapse .d-hidden-mini{display:none}.sidebar-mini-md.sidebar-collapse .content-wrapper,.sidebar-mini-md.sidebar-collapse .main-footer,.sidebar-mini-md.sidebar-collapse .main-header{margin-left:5.4rem!important}.sidebar-mini-md.sidebar-collapse .nav-sidebar .nav-header{display:none}.sidebar-mini-md.sidebar-collapse .nav-sidebar .nav-link p{width:0}.sidebar-mini-md.sidebar-collapse .brand-text,.sidebar-mini-md.sidebar-collapse .nav-sidebar .nav-link p,.sidebar-mini-md.sidebar-collapse .sidebar .user-panel>.info{margin-left:-10px;opacity:0;visibility:hidden}.sidebar-mini-md.sidebar-collapse .logo-xl{opacity:0;visibility:hidden}.sidebar-mini-md.sidebar-collapse .logo-xs{display:inline-block;opacity:1;visibility:visible}.sidebar-mini-md.sidebar-collapse .main-sidebar{overflow-x:hidden}.sidebar-mini-md.sidebar-collapse .main-sidebar,.sidebar-mini-md.sidebar-collapse .main-sidebar:before{margin-left:0;width:5.4rem}.sidebar-mini-md.sidebar-collapse .main-sidebar .user-panel .image{float:none}.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused,.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused .brand-link,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover .brand-link{width:260px}.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused .user-panel,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover .user-panel{text-align:left}.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused .user-panel .image,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover .user-panel .image{float:left}.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused .brand-text,.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused .logo-xl,.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused .nav-sidebar .nav-link p,.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused .user-panel>.info,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover .brand-text,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover .logo-xl,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover .nav-sidebar .nav-link p,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover .user-panel>.info{display:inline-block;margin-left:0;opacity:1;visibility:visible}.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused .logo-xs,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover .logo-xs{opacity:0;visibility:hidden}.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused .brand-image,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover .brand-image{margin-right:.5rem}.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused .sidebar-form,.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused .user-panel>.info,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover .sidebar-form,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover .user-panel>.info{display:block!important;-webkit-transform:translateZ(0)}.sidebar-mini-md.sidebar-collapse .main-sidebar.sidebar-focused .nav-sidebar>.nav-item>.nav-link>span,.sidebar-mini-md.sidebar-collapse .main-sidebar:hover .nav-sidebar>.nav-item>.nav-link>span{display:inline-block!important}.sidebar-mini-md.sidebar-collapse .visible-sidebar-mini{display:block!important}.sidebar-mini-md.sidebar-collapse.layout-fixed .main-sidebar:hover .brand-link{width:260px}.sidebar-mini-md.sidebar-collapse.layout-fixed .brand-link{width:5.4rem}}.sidebar-collapse .main-sidebar.sidebar-focused .nav-header,.sidebar-collapse .main-sidebar:hover .nav-header{display:inline-block}.sidebar-collapse .main-sidebar.sidebar-focused .nav .menu-open .nav-treeview,.sidebar-collapse .main-sidebar:hover .nav .menu-open .nav-treeview{display:block!important}.sidebar-collapse .main-sidebar.sidebar-focused .nav-sidebar>.nav-item>.nav-link i,.sidebar-collapse .main-sidebar:hover .nav-sidebar>.nav-item>.nav-link i{font-size:1.2rem}.sidebar-collapse .main-sidebar .nav .nav-item .nav-link{padding:10px 21px!important}.sidebar-collapse .main-sidebar .nav .menu-open .nav-treeview{display:none!important}.sidebar-collapse .header-navbar.floating-nav{width:calc(100% - 70px - 5.4rem)}.sidebar-collapse .header-navbar.fixed-top{left:5.4rem}.sidebar-collapse .nav-sidebar>.nav-item>.nav-link i{font-size:1.3rem}.sidebar-collapse .sidebar-no-expand.main-sidebar.sidebar-focused,.sidebar-collapse .sidebar-no-expand.main-sidebar:hover{width:5.4rem}.sidebar-collapse .sidebar-no-expand.main-sidebar.sidebar-focused .nav-header,.sidebar-collapse .sidebar-no-expand.main-sidebar:hover .nav-header{display:none}.sidebar-collapse .sidebar-no-expand.main-sidebar.sidebar-focused .brand-link,.sidebar-collapse .sidebar-no-expand.main-sidebar:hover .brand-link{width:5.4rem!important}.sidebar-collapse .sidebar-no-expand.main-sidebar.sidebar-focused .user-panel .image,.sidebar-collapse .sidebar-no-expand.main-sidebar:hover .user-panel .image{float:none!important}.sidebar-collapse .sidebar-no-expand.main-sidebar.sidebar-focused .logo-xs,.sidebar-collapse .sidebar-no-expand.main-sidebar:hover .logo-xs{opacity:1;visibility:visible}.sidebar-collapse .sidebar-no-expand.main-sidebar.sidebar-focused .logo-xl,.sidebar-collapse .sidebar-no-expand.main-sidebar:hover .logo-xl{opacity:0;visibility:hidden}.sidebar-collapse .sidebar-no-expand.main-sidebar.sidebar-focused .nav-sidebar.nav-child-indent .nav-treeview,.sidebar-collapse .sidebar-no-expand.main-sidebar:hover .nav-sidebar.nav-child-indent .nav-treeview{padding-left:0}.sidebar-collapse .sidebar-no-expand.main-sidebar.sidebar-focused .brand-text,.sidebar-collapse .sidebar-no-expand.main-sidebar.sidebar-focused .nav-sidebar .nav-link p,.sidebar-collapse .sidebar-no-expand.main-sidebar.sidebar-focused .user-panel>.info,.sidebar-collapse .sidebar-no-expand.main-sidebar:hover .brand-text,.sidebar-collapse .sidebar-no-expand.main-sidebar:hover .nav-sidebar .nav-link p,.sidebar-collapse .sidebar-no-expand.main-sidebar:hover .user-panel>.info{margin-left:-10px;opacity:0;visibility:hidden;width:0}.sidebar-collapse .sidebar-no-expand.main-sidebar.sidebar-focused .nav-sidebar>.nav-item .nav-icon,.sidebar-collapse .sidebar-no-expand.main-sidebar:hover .nav-sidebar>.nav-item .nav-icon{margin-right:0}.nav-sidebar{position:relative}.nav-sidebar:hover{overflow:visible}.nav-sidebar>.nav-header,.sidebar-form{overflow:hidden;text-overflow:clip}.nav-sidebar .nav-item>.nav-link{position:relative}.nav-sidebar .nav-item>.nav-link>.float-right{margin-top:-7px;position:absolute;right:10px;top:50%}@media (max-width:767.98px){.sidebar-mini-md.sidebar-collapse .main-sidebar{box-shadow:none!important}.sidebar-collapse .header-navbar.fixed-top{left:0}}@media (max-width:1201px){.sidebar-collapse .header-navbar.fixed-top{left:0}}.main-sidebar .brand-text,.main-sidebar .logo-xl,.main-sidebar .logo-xs,.sidebar .nav-link p,.sidebar .user-panel .info{transition:margin-left .3s linear,opacity .3s ease,visibility .3s ease}@media (prefers-reduced-motion:reduce){.main-sidebar .brand-text,.main-sidebar .logo-xl,.main-sidebar .logo-xs,.sidebar .nav-link p,.sidebar .user-panel .info{transition:none}}html.control-sidebar-animate{overflow-x:hidden}.control-sidebar{bottom:3.45rem;position:absolute;top:calc(3.164rem + 1px);z-index:1031}.control-sidebar,.control-sidebar:before{bottom:3.45rem;display:none;right:-260px;width:260px;transition:right .3s ease-in-out,display .3s ease-in-out}@media (prefers-reduced-motion:reduce){.control-sidebar,.control-sidebar:before{transition:none}}.control-sidebar:before{content:"";display:block;position:fixed;top:0;z-index:-1}body.text-sm .control-sidebar{bottom:3.074rem;top:calc(2.62475rem + 1px)}.main-header.text-sm~.control-sidebar{top:calc(2.62475rem + 1px)}.main-footer.text-sm~.control-sidebar{bottom:3.074rem}.control-sidebar-push-slide .content-wrapper,.control-sidebar-push-slide .main-footer{transition:margin-right .3s ease-in-out}@media (prefers-reduced-motion:reduce){.control-sidebar-push-slide .content-wrapper,.control-sidebar-push-slide .main-footer{transition:none}}.control-sidebar-open .control-sidebar{display:block}.control-sidebar-open .control-sidebar,.control-sidebar-open .control-sidebar:before{right:0}.control-sidebar-open.control-sidebar-push-slide .content-wrapper,.control-sidebar-open.control-sidebar-push-slide .main-footer,.control-sidebar-open.control-sidebar-push .content-wrapper,.control-sidebar-open.control-sidebar-push .main-footer{margin-right:260px}.control-sidebar-slide-open .control-sidebar{display:block}.control-sidebar-slide-open .control-sidebar,.control-sidebar-slide-open .control-sidebar:before{right:0;transition:right .3s ease-in-out,display .3s ease-in-out}@media (prefers-reduced-motion:reduce){.control-sidebar-slide-open .control-sidebar,.control-sidebar-slide-open .control-sidebar:before{transition:none}}.control-sidebar-slide-open.control-sidebar-push-slide .content-wrapper,.control-sidebar-slide-open.control-sidebar-push-slide .main-footer,.control-sidebar-slide-open.control-sidebar-push .content-wrapper,.control-sidebar-slide-open.control-sidebar-push .main-footer{margin-right:260px}.control-sidebar-dark,.control-sidebar-dark .nav-link,.control-sidebar-dark a{color:hsla(0,0%,100%,.95)}.control-sidebar-dark{background:#3e4958}.control-sidebar-dark a:hover,.control-sidebar-dark h1,.control-sidebar-dark h2,.control-sidebar-dark h3,.control-sidebar-dark h4,.control-sidebar-dark h5,.control-sidebar-dark h6,.control-sidebar-dark label{color:hsla(0,0%,100%,.95)}.control-sidebar-dark .nav-tabs{background-color:transparent;border-bottom:0;margin-bottom:5px}.control-sidebar-dark .nav-tabs .nav-item{margin:0}.control-sidebar-dark .nav-tabs .nav-link{border-radius:0;padding:10px 20px;position:relative;text-align:center}.control-sidebar-dark .nav-tabs .nav-link,.control-sidebar-dark .nav-tabs .nav-link.active,.control-sidebar-dark .nav-tabs .nav-link:active,.control-sidebar-dark .nav-tabs .nav-link:focus,.control-sidebar-dark .nav-tabs .nav-link:hover{border:0}.control-sidebar-dark .nav-tabs .nav-link.active,.control-sidebar-dark .nav-tabs .nav-link:active,.control-sidebar-dark .nav-tabs .nav-link:focus,.control-sidebar-dark .nav-tabs .nav-link:hover{border-bottom-color:transparent;border-left-color:transparent;border-top-color:transparent;color:hsla(0,0%,100%,.95)}.control-sidebar-dark .nav-tabs .nav-link.active{background-color:#3e4958}.control-sidebar-dark .tab-pane{padding:10px 15px}.control-sidebar-light{color:#6f6f6f;background:#fff;border-left:1px solid #dae1e7}.text-sm .dropdown-menu{font-size:1rem!important}.text-sm .dropdown-toggle:after{vertical-align:.2rem}.dropdown-item-title{font-size:1rem;margin:0}.dropdown-icon:after{margin-left:0}.dropdown-menu-lg{max-width:300px;min-width:280px;padding:0}.dropdown-menu-lg .dropdown-divider{margin:0}.dropdown-menu-lg .dropdown-item{padding:.5rem 1.5rem}.dropdown-menu-lg p{margin:0;white-space:normal}.dropdown-submenu{position:relative}.dropdown-submenu>a:after{border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid;float:right;margin-left:.5rem;margin-top:.5rem}.dropdown-submenu>.dropdown-menu{left:100%;margin-left:0;margin-top:0;top:0}.dropdown-hover.dropdown-submenu:hover>.dropdown-menu,.dropdown-hover .dropdown-submenu:hover>.dropdown-menu,.dropdown-hover.nav-item.dropdown:hover>.dropdown-menu,.dropdown-hover:hover>.dropdown-menu{display:block}.dropdown-menu-xl{max-width:420px;min-width:360px;padding:0}.dropdown-menu-xl .dropdown-divider{margin:0}.dropdown-menu-xl .dropdown-item{padding:.5rem 1.5rem}.dropdown-menu-xl p{margin:0;white-space:normal}.dropdown-footer,.dropdown-header{display:block;font-size:1rem;padding:.5rem 1.5rem;text-align:center}.open:not(.dropup)>.animated-dropdown-menu{-webkit-animation:flipInX .7s both;animation:flipInX .7s both;-webkit-backface-visibility:visible!important;backface-visibility:visible!important}@-webkit-keyframes flipInX{0%{transform:perspective(400px) rotateX(90deg);transition-timing-function:ease-in;opacity:0}40%{transform:perspective(400px) rotateX(-20deg);transition-timing-function:ease-in}60%{transform:perspective(400px) rotateX(10deg);opacity:1}80%{transform:perspective(400px) rotateX(-5deg)}to{transform:perspective(400px)}}@keyframes flipInX{0%{transform:perspective(400px) rotateX(90deg);transition-timing-function:ease-in;opacity:0}40%{transform:perspective(400px) rotateX(-20deg);transition-timing-function:ease-in}60%{transform:perspective(400px) rotateX(10deg);opacity:1}80%{transform:perspective(400px) rotateX(-5deg)}to{transform:perspective(400px)}}.navbar-custom-menu>.navbar-nav>li{position:relative}.navbar-custom-menu>.navbar-nav>li>.dropdown-menu{position:absolute;right:0;left:auto}@media (max-width:767.98px){.navbar-custom-menu>.navbar-nav{float:right}.navbar-custom-menu>.navbar-nav>li{position:static}.navbar-custom-menu>.navbar-nav>li>.dropdown-menu{position:absolute;right:5%;left:auto;border:1px solid #ddd;background:#fff}}.navbar-nav>.user-menu>.nav-link:after{content:none}.navbar-nav>.user-menu>.dropdown-menu{border-top-left-radius:0;border-top-right-radius:0;padding:0;width:280px}.navbar-nav>.user-menu>.dropdown-menu,.navbar-nav>.user-menu>.dropdown-menu>.user-body{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.navbar-nav>.user-menu>.dropdown-menu>li.user-header{height:175px;padding:10px;text-align:center}.navbar-nav>.user-menu>.dropdown-menu>li.user-header>img{z-index:5;height:90px;width:90px;border:3px solid hsla(0,0%,100%,.2)}.navbar-nav>.user-menu>.dropdown-menu>li.user-header>p{z-index:5;font-size:17px;margin-top:10px}.navbar-nav>.user-menu>.dropdown-menu>li.user-header>p>small{display:block;font-size:12px}.navbar-nav>.user-menu>.dropdown-menu>.user-body{border-bottom:1px solid #4e5154;border-top:1px solid #dae1e7;padding:15px}.navbar-nav>.user-menu>.dropdown-menu>.user-body:after{display:block;clear:both;content:""}@media (min-width:576px){.navbar-nav>.user-menu>.dropdown-menu>.user-body a{background:#fff!important;color:#4e5154!important}}.navbar-nav>.user-menu>.dropdown-menu>.user-footer{background-color:#babfc7;padding:10px}.navbar-nav>.user-menu>.dropdown-menu>.user-footer:after{display:block;clear:both;content:""}.navbar-nav>.user-menu>.dropdown-menu>.user-footer .btn-default{color:#b8c2cc}@media (min-width:576px){.navbar-nav>.user-menu>.dropdown-menu>.user-footer .btn-default:hover{background-color:#babfc7}}.navbar-nav>.user-menu .user-image{border-radius:50%;float:left;height:2.5666666667rem;margin-right:10px;margin-top:-2px;width:2.5666666667rem}@media (min-width:576px){.navbar-nav>.user-menu .user-image{float:none;line-height:10px;margin-right:.4rem;margin-top:-8px}}.nav-pills .nav-link{color:#b8c2cc}.nav-pills .nav-link:not(.active):hover{color:#586cb1}.nav-pills .nav-item.dropdown.show .nav-link:hover{color:#fff}.nav-tabs.flex-column{border-bottom:0;border-right:1px solid #dae1e7}.nav-tabs.flex-column .nav-link{border-bottom-left-radius:.5rem;border-top-right-radius:0;margin-right:-1px}.nav-tabs.flex-column .nav-link:focus,.nav-tabs.flex-column .nav-link:hover{border-color:#ededed transparent #ededed #ededed}.nav-tabs.flex-column .nav-item.show .nav-link,.nav-tabs.flex-column .nav-link.active{border-color:#dae1e7 transparent #dae1e7 #dae1e7}.nav-tabs.flex-column.nav-tabs-right{border-left:1px solid #dae1e7;border-right:0}.nav-tabs.flex-column.nav-tabs-right .nav-link{border-bottom-left-radius:0;border-bottom-right-radius:.5rem;border-top-left-radius:0;border-top-right-radius:.5rem;margin-left:-1px}.nav-tabs.flex-column.nav-tabs-right .nav-link:focus,.nav-tabs.flex-column.nav-tabs-right .nav-link:hover{border-color:#ededed #ededed #ededed transparent}.nav-tabs.flex-column.nav-tabs-right .nav-item.show .nav-link,.nav-tabs.flex-column.nav-tabs-right .nav-link.active{border-color:#dae1e7 #dae1e7 #dae1e7 transparent}.navbar-no-expand{flex-direction:row}.navbar-no-expand .nav-link{padding-left:.5rem;padding-right:.5rem}.navbar-no-expand .dropdown-menu{position:absolute}.navbar-light{background-color:#f7f7f9}.navbar-dark{background-color:#22292f}.navbar-primary{background-color:#586cb1}.navbar-secondary{background-color:#b8c2cc}.navbar-success{background-color:#21b978}.navbar-info{background-color:#4277cf}.navbar-warning{background-color:#dda451}.navbar-danger{background-color:#ea5455}.navbar-lightblue{background-color:#3c8dbc}.navbar-navy{background-color:#001f3f}.navbar-olive{background-color:#3d9970}.navbar-lime{background-color:#01ff70}.navbar-fuchsia{background-color:#f012be}.navbar-maroon{background-color:#d81b60}.navbar-blue{background-color:#3085d6}.navbar-indigo{background-color:#5c6bc6}.navbar-purple{background-color:#6f42c1}.navbar-pink{background-color:#ff8acc}.navbar-red{background-color:#ea5455}.navbar-orange{background-color:#dda451}.navbar-yellow{background-color:#edc30e}.navbar-green{background-color:#21b978}.navbar-teal{background-color:#20c997}.navbar-cyan{background-color:#7367f0}.navbar-white{background-color:#fff}.navbar-gray{background-color:#b8c2cc}.navbar-gray-dark{background-color:#1e1e1e}.form-group.has-icon{position:relative}.form-group.has-icon .form-control{padding-right:35px}.form-group.has-icon .form-icon{background-color:transparent;border:0;cursor:pointer;font-size:1rem;padding:.75rem 2rem;position:absolute;right:3px;top:0}.btn-group-vertical .btn.btn-flat:first-of-type,.btn-group-vertical .btn.btn-flat:last-of-type{border-radius:0}.form-control-feedback.fa,.form-control-feedback.fab,.form-control-feedback.far,.form-control-feedback.fas,.form-control-feedback.glyphicon,.form-control-feedback.ion{line-height:34px}.form-group-lg .form-control+.form-control-feedback.fa,.form-group-lg .form-control+.form-control-feedback.fab,.form-group-lg .form-control+.form-control-feedback.far,.form-group-lg .form-control+.form-control-feedback.fas,.form-group-lg .form-control+.form-control-feedback.glyphicon,.form-group-lg .form-control+.form-control-feedback.ion,.input-group-lg+.form-control-feedback.fa,.input-group-lg+.form-control-feedback.fab,.input-group-lg+.form-control-feedback.far,.input-group-lg+.form-control-feedback.fas,.input-group-lg+.form-control-feedback.glyphicon,.input-group-lg+.form-control-feedback.ion,.input-lg+.form-control-feedback.fa,.input-lg+.form-control-feedback.fab,.input-lg+.form-control-feedback.far,.input-lg+.form-control-feedback.fas,.input-lg+.form-control-feedback.glyphicon,.input-lg+.form-control-feedback.ion{line-height:calc(1.25em + 2rem + 2px)}.form-group-sm .form-control+.form-control-feedback.fa,.form-group-sm .form-control+.form-control-feedback.fab,.form-group-sm .form-control+.form-control-feedback.far,.form-group-sm .form-control+.form-control-feedback.fas,.form-group-sm .form-control+.form-control-feedback.glyphicon,.form-group-sm .form-control+.form-control-feedback.ion,.input-group-sm+.form-control-feedback.fa,.input-group-sm+.form-control-feedback.fab,.input-group-sm+.form-control-feedback.far,.input-group-sm+.form-control-feedback.fas,.input-group-sm+.form-control-feedback.glyphicon,.input-group-sm+.form-control-feedback.ion,.input-sm+.form-control-feedback.fa,.input-sm+.form-control-feedback.fab,.input-sm+.form-control-feedback.far,.input-sm+.form-control-feedback.fas,.input-sm+.form-control-feedback.glyphicon,.input-sm+.form-control-feedback.ion{line-height:2rem}.warning-feedback{font-size:smaller;color:#dda451;display:none;margin-top:.25rem;width:100%}.warning-tooltip{border-radius:.5rem;font-size:1rem;background-color:rgba(221,164,81,.9);color:#2a2e30;display:none;line-height:1.45;margin-top:.1rem;max-width:100%;padding:.25rem .5rem;position:absolute;top:100%;z-index:5}.form-control.is-warning{border-color:#dda451}.form-control.is-warning:focus{border-color:#dda451;box-shadow:0 0 0 .2rem rgba(221,164,81,.25)}.form-control.is-warning~.warning-feedback,.form-control.is-warning~.warning-tooltip{display:block}textarea.form-control.is-warning{padding-right:calc(1.25em + 1.4rem);background-position:top calc(.3125em + .35rem) right calc(.3125em + .35rem)}.custom-select.is-warning{border-color:#dda451}.custom-select.is-warning:focus{border-color:#dda451;box-shadow:0 0 0 .2rem rgba(221,164,81,.25)}.custom-select.is-warning~.warning-feedback,.custom-select.is-warning~.warning-tooltip,.form-control-file.is-warning~.warning-feedback,.form-control-file.is-warning~.warning-tooltip{display:block}.form-check-input.is-warning~.form-check-label{color:#dda451}.form-check-input.is-warning~.warning-feedback,.form-check-input.is-warning~.warning-tooltip{display:block}.custom-control-input.is-warning~.custom-control-label{color:#dda451}.custom-control-input.is-warning~.custom-control-label:before{border-color:#dda451}.custom-control-input.is-warning~.warning-feedback,.custom-control-input.is-warning~.warning-tooltip{display:block}.custom-control-input.is-warning:checked~.custom-control-label:before{background-color:#e5ba7c;border-color:#e5ba7c}.custom-control-input.is-warning:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem rgba(221,164,81,.25)}.custom-control-input.is-warning:focus:not(:checked)~.custom-control-label:before,.custom-file-input.is-warning~.custom-file-label{border-color:#dda451}.custom-file-input.is-warning~.warning-feedback,.custom-file-input.is-warning~.warning-tooltip{display:block}.custom-file-input.is-warning:focus~.custom-file-label{border-color:#dda451;box-shadow:0 0 0 .2rem rgba(221,164,81,.25)}.custom-switch.custom-switch-off-primary .custom-control-input~.custom-control-label:before{background:#586cb1;border-color:#34416f}.custom-switch.custom-switch-off-primary .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(88,108,177,.25)}.custom-switch.custom-switch-off-primary .custom-control-input~.custom-control-label:after{background:#2c375e}.custom-switch.custom-switch-on-primary .custom-control-input:checked~.custom-control-label:before{background:#586cb1;border-color:#34416f}.custom-switch.custom-switch-on-primary .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(88,108,177,.25)}.custom-switch.custom-switch-on-primary .custom-control-input:checked~.custom-control-label:after{background:#c0c8e2}.custom-switch.custom-switch-off-secondary .custom-control-input~.custom-control-label:before{background:#b8c2cc;border-color:#7d8fa1}.custom-switch.custom-switch-off-secondary .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(184,194,204,.25)}.custom-switch.custom-switch-off-secondary .custom-control-input~.custom-control-label:after{background:#6e8297}.custom-switch.custom-switch-on-secondary .custom-control-input:checked~.custom-control-label:before{background:#b8c2cc;border-color:#7d8fa1}.custom-switch.custom-switch-on-secondary .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(184,194,204,.25)}.custom-switch.custom-switch-on-secondary .custom-control-input:checked~.custom-control-label:after{background:#fff}.custom-switch.custom-switch-off-success .custom-control-input~.custom-control-label:before{background:#21b978;border-color:#126240}.custom-switch.custom-switch-off-success .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(33,185,120,.25)}.custom-switch.custom-switch-off-success .custom-control-input~.custom-control-label:after{background:#0e4d32}.custom-switch.custom-switch-on-success .custom-control-input:checked~.custom-control-label:before{background:#21b978;border-color:#126240}.custom-switch.custom-switch-on-success .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(33,185,120,.25)}.custom-switch.custom-switch-on-success .custom-control-input:checked~.custom-control-label:after{background:#89eac1}.custom-switch.custom-switch-off-info .custom-control-input~.custom-control-label:before{background:#4277cf;border-color:#234988}.custom-switch.custom-switch-off-info .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(66,119,207,.25)}.custom-switch.custom-switch-off-info .custom-control-input~.custom-control-label:after{background:#1d3e74}.custom-switch.custom-switch-on-info .custom-control-input:checked~.custom-control-label:before{background:#4277cf;border-color:#234988}.custom-switch.custom-switch-on-info .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(66,119,207,.25)}.custom-switch.custom-switch-on-info .custom-control-input:checked~.custom-control-label:after{background:#bccfee}.custom-switch.custom-switch-off-warning .custom-control-input~.custom-control-label:before{background:#dda451;border-color:#a77121}.custom-switch.custom-switch-off-warning .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(221,164,81,.25)}.custom-switch.custom-switch-off-warning .custom-control-input~.custom-control-label:after{background:#92621d}.custom-switch.custom-switch-on-warning .custom-control-input:checked~.custom-control-label:before{background:#dda451;border-color:#a77121}.custom-switch.custom-switch-on-warning .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(221,164,81,.25)}.custom-switch.custom-switch-on-warning .custom-control-input:checked~.custom-control-label:after{background:#f6e7d1}.custom-switch.custom-switch-off-danger .custom-control-input~.custom-control-label:before{background:#ea5455;border-color:#c01819}.custom-switch.custom-switch-off-danger .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(234,84,85,.25)}.custom-switch.custom-switch-off-danger .custom-control-input~.custom-control-label:after{background:#aa1516}.custom-switch.custom-switch-on-danger .custom-control-input:checked~.custom-control-label:before{background:#ea5455;border-color:#c01819}.custom-switch.custom-switch-on-danger .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(234,84,85,.25)}.custom-switch.custom-switch-on-danger .custom-control-input:checked~.custom-control-label:after{background:#fbdcdc}.custom-switch.custom-switch-off-light .custom-control-input~.custom-control-label:before{background:#f7f7f9;border-color:#bdbdcd}.custom-switch.custom-switch-off-light .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(247,247,249,.25)}.custom-switch.custom-switch-off-light .custom-control-input~.custom-control-label:after{background:#aeaec2}.custom-switch.custom-switch-on-light .custom-control-input:checked~.custom-control-label:before{background:#f7f7f9;border-color:#bdbdcd}.custom-switch.custom-switch-on-light .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(247,247,249,.25)}.custom-switch.custom-switch-on-light .custom-control-input:checked~.custom-control-label:after{background:#fff}.custom-switch.custom-switch-off-dark .custom-control-input~.custom-control-label:before{background:#22292f;border-color:#000}.custom-switch.custom-switch-off-dark .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(34,41,47,.25)}.custom-switch.custom-switch-off-dark .custom-control-input~.custom-control-label:after{background:#000}.custom-switch.custom-switch-on-dark .custom-control-input:checked~.custom-control-label:before{background:#22292f;border-color:#000}.custom-switch.custom-switch-on-dark .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(34,41,47,.25)}.custom-switch.custom-switch-on-dark .custom-control-input:checked~.custom-control-label:after{background:#627688}.custom-switch.custom-switch-off-lightblue .custom-control-input~.custom-control-label:before{background:#3c8dbc;border-color:#23536f}.custom-switch.custom-switch-off-lightblue .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(60,141,188,.25)}.custom-switch.custom-switch-off-lightblue .custom-control-input~.custom-control-label:after{background:#1d455b}.custom-switch.custom-switch-on-lightblue .custom-control-input:checked~.custom-control-label:before{background:#3c8dbc;border-color:#23536f}.custom-switch.custom-switch-on-lightblue .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(60,141,188,.25)}.custom-switch.custom-switch-on-lightblue .custom-control-input:checked~.custom-control-label:after{background:#acd0e5}.custom-switch.custom-switch-off-navy .custom-control-input~.custom-control-label:before{background:#001f3f;border-color:#000}.custom-switch.custom-switch-off-navy .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(0,31,63,.25)}.custom-switch.custom-switch-off-navy .custom-control-input~.custom-control-label:after{background:#000}.custom-switch.custom-switch-on-navy .custom-control-input:checked~.custom-control-label:before{background:#001f3f;border-color:#000}.custom-switch.custom-switch-on-navy .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(0,31,63,.25)}.custom-switch.custom-switch-on-navy .custom-control-input:checked~.custom-control-label:after{background:#006ad8}.custom-switch.custom-switch-off-olive .custom-control-input~.custom-control-label:before{background:#3d9970;border-color:#20503b}.custom-switch.custom-switch-off-olive .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(61,153,112,.25)}.custom-switch.custom-switch-off-olive .custom-control-input~.custom-control-label:after{background:#193e2d}.custom-switch.custom-switch-on-olive .custom-control-input:checked~.custom-control-label:before{background:#3d9970;border-color:#20503b}.custom-switch.custom-switch-on-olive .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(61,153,112,.25)}.custom-switch.custom-switch-on-olive .custom-control-input:checked~.custom-control-label:after{background:#99d6bb}.custom-switch.custom-switch-off-lime .custom-control-input~.custom-control-label:before{background:#01ff70;border-color:#009a43}.custom-switch.custom-switch-off-lime .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(1,255,112,.25)}.custom-switch.custom-switch-off-lime .custom-control-input~.custom-control-label:after{background:#008138}.custom-switch.custom-switch-on-lime .custom-control-input:checked~.custom-control-label:before{background:#01ff70;border-color:#009a43}.custom-switch.custom-switch-on-lime .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(1,255,112,.25)}.custom-switch.custom-switch-on-lime .custom-control-input:checked~.custom-control-label:after{background:#9affc6}.custom-switch.custom-switch-off-fuchsia .custom-control-input~.custom-control-label:before{background:#f012be;border-color:#930974}.custom-switch.custom-switch-off-fuchsia .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(240,18,190,.25)}.custom-switch.custom-switch-off-fuchsia .custom-control-input~.custom-control-label:after{background:#7b0861}.custom-switch.custom-switch-on-fuchsia .custom-control-input:checked~.custom-control-label:before{background:#f012be;border-color:#930974}.custom-switch.custom-switch-on-fuchsia .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(240,18,190,.25)}.custom-switch.custom-switch-on-fuchsia .custom-control-input:checked~.custom-control-label:after{background:#f9a2e5}.custom-switch.custom-switch-off-maroon .custom-control-input~.custom-control-label:before{background:#d81b60;border-color:#7d1038}.custom-switch.custom-switch-off-maroon .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(216,27,96,.25)}.custom-switch.custom-switch-off-maroon .custom-control-input~.custom-control-label:after{background:#670d2e}.custom-switch.custom-switch-on-maroon .custom-control-input:checked~.custom-control-label:before{background:#d81b60;border-color:#7d1038}.custom-switch.custom-switch-on-maroon .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(216,27,96,.25)}.custom-switch.custom-switch-on-maroon .custom-control-input:checked~.custom-control-label:after{background:#f29aba}.custom-switch.custom-switch-off-blue .custom-control-input~.custom-control-label:before{background:#3085d6;border-color:#1a5186}.custom-switch.custom-switch-off-blue .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(48,133,214,.25)}.custom-switch.custom-switch-off-blue .custom-control-input~.custom-control-label:after{background:#164470}.custom-switch.custom-switch-on-blue .custom-control-input:checked~.custom-control-label:before{background:#3085d6;border-color:#1a5186}.custom-switch.custom-switch-on-blue .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(48,133,214,.25)}.custom-switch.custom-switch-on-blue .custom-control-input:checked~.custom-control-label:after{background:#b0d0ef}.custom-switch.custom-switch-off-indigo .custom-control-input~.custom-control-label:before{background:#5c6bc6;border-color:#313e8b}.custom-switch.custom-switch-off-indigo .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(92,107,198,.25)}.custom-switch.custom-switch-off-indigo .custom-control-input~.custom-control-label:after{background:#2a3578}.custom-switch.custom-switch-on-indigo .custom-control-input:checked~.custom-control-label:before{background:#5c6bc6;border-color:#313e8b}.custom-switch.custom-switch-on-indigo .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(92,107,198,.25)}.custom-switch.custom-switch-on-indigo .custom-control-input:checked~.custom-control-label:after{background:#cdd2ee}.custom-switch.custom-switch-off-purple .custom-control-input~.custom-control-label:before{background:#6f42c1;border-color:#432776}.custom-switch.custom-switch-off-purple .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(111,66,193,.25)}.custom-switch.custom-switch-off-purple .custom-control-input~.custom-control-label:after{background:#382063}.custom-switch.custom-switch-on-purple .custom-control-input:checked~.custom-control-label:before{background:#6f42c1;border-color:#432776}.custom-switch.custom-switch-on-purple .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(111,66,193,.25)}.custom-switch.custom-switch-on-purple .custom-control-input:checked~.custom-control-label:after{background:#c7b5e7}.custom-switch.custom-switch-off-pink .custom-control-input~.custom-control-label:before{background:#ff8acc;border-color:#ff24a0}.custom-switch.custom-switch-off-pink .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(255,138,204,.25)}.custom-switch.custom-switch-off-pink .custom-control-input~.custom-control-label:after{background:#ff0b94}.custom-switch.custom-switch-on-pink .custom-control-input:checked~.custom-control-label:before{background:#ff8acc;border-color:#ff24a0}.custom-switch.custom-switch-on-pink .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(255,138,204,.25)}.custom-switch.custom-switch-on-pink .custom-control-input:checked~.custom-control-label:after{background:#fff}.custom-switch.custom-switch-off-red .custom-control-input~.custom-control-label:before{background:#ea5455;border-color:#c01819}.custom-switch.custom-switch-off-red .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(234,84,85,.25)}.custom-switch.custom-switch-off-red .custom-control-input~.custom-control-label:after{background:#aa1516}.custom-switch.custom-switch-on-red .custom-control-input:checked~.custom-control-label:before{background:#ea5455;border-color:#c01819}.custom-switch.custom-switch-on-red .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(234,84,85,.25)}.custom-switch.custom-switch-on-red .custom-control-input:checked~.custom-control-label:after{background:#fbdcdc}.custom-switch.custom-switch-off-orange .custom-control-input~.custom-control-label:before{background:#dda451;border-color:#a77121}.custom-switch.custom-switch-off-orange .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(221,164,81,.25)}.custom-switch.custom-switch-off-orange .custom-control-input~.custom-control-label:after{background:#92621d}.custom-switch.custom-switch-on-orange .custom-control-input:checked~.custom-control-label:before{background:#dda451;border-color:#a77121}.custom-switch.custom-switch-on-orange .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(221,164,81,.25)}.custom-switch.custom-switch-on-orange .custom-control-input:checked~.custom-control-label:after{background:#f6e7d1}.custom-switch.custom-switch-off-yellow .custom-control-input~.custom-control-label:before{background:#edc30e;border-color:#8d7408}.custom-switch.custom-switch-off-yellow .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(237,195,14,.25)}.custom-switch.custom-switch-off-yellow .custom-control-input~.custom-control-label:after{background:#756007}.custom-switch.custom-switch-on-yellow .custom-control-input:checked~.custom-control-label:before{background:#edc30e;border-color:#8d7408}.custom-switch.custom-switch-on-yellow .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(237,195,14,.25)}.custom-switch.custom-switch-on-yellow .custom-control-input:checked~.custom-control-label:after{background:#f9e79b}.custom-switch.custom-switch-off-green .custom-control-input~.custom-control-label:before{background:#21b978;border-color:#126240}.custom-switch.custom-switch-off-green .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(33,185,120,.25)}.custom-switch.custom-switch-off-green .custom-control-input~.custom-control-label:after{background:#0e4d32}.custom-switch.custom-switch-on-green .custom-control-input:checked~.custom-control-label:before{background:#21b978;border-color:#126240}.custom-switch.custom-switch-on-green .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(33,185,120,.25)}.custom-switch.custom-switch-on-green .custom-control-input:checked~.custom-control-label:after{background:#89eac1}.custom-switch.custom-switch-off-teal .custom-control-input~.custom-control-label:before{background:#20c997;border-color:#127155}.custom-switch.custom-switch-off-teal .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(32,201,151,.25)}.custom-switch.custom-switch-off-teal .custom-control-input~.custom-control-label:after{background:#0e5b44}.custom-switch.custom-switch-on-teal .custom-control-input:checked~.custom-control-label:before{background:#20c997;border-color:#127155}.custom-switch.custom-switch-on-teal .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(32,201,151,.25)}.custom-switch.custom-switch-on-teal .custom-control-input:checked~.custom-control-label:after{background:#94eed3}.custom-switch.custom-switch-off-cyan .custom-control-input~.custom-control-label:before{background:#7367f0;border-color:#2716db}.custom-switch.custom-switch-off-cyan .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(115,103,240,.25)}.custom-switch.custom-switch-off-cyan .custom-control-input~.custom-control-label:after{background:#2313c4}.custom-switch.custom-switch-on-cyan .custom-control-input:checked~.custom-control-label:before{background:#7367f0;border-color:#2716db}.custom-switch.custom-switch-on-cyan .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(115,103,240,.25)}.custom-switch.custom-switch-on-cyan .custom-control-input:checked~.custom-control-label:after{background:#f3f2fe}.custom-switch.custom-switch-off-white .custom-control-input~.custom-control-label:before{background:#fff;border-color:#ccc}.custom-switch.custom-switch-off-white .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px hsla(0,0%,100%,.25)}.custom-switch.custom-switch-off-white .custom-control-input~.custom-control-label:after{background:#bfbfbf}.custom-switch.custom-switch-on-white .custom-control-input:checked~.custom-control-label:before{background:#fff;border-color:#ccc}.custom-switch.custom-switch-on-white .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px hsla(0,0%,100%,.25)}.custom-switch.custom-switch-on-white .custom-control-input:checked~.custom-control-label:after{background:#fff}.custom-switch.custom-switch-off-gray .custom-control-input~.custom-control-label:before{background:#b8c2cc;border-color:#7d8fa1}.custom-switch.custom-switch-off-gray .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(184,194,204,.25)}.custom-switch.custom-switch-off-gray .custom-control-input~.custom-control-label:after{background:#6e8297}.custom-switch.custom-switch-on-gray .custom-control-input:checked~.custom-control-label:before{background:#b8c2cc;border-color:#7d8fa1}.custom-switch.custom-switch-on-gray .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(184,194,204,.25)}.custom-switch.custom-switch-on-gray .custom-control-input:checked~.custom-control-label:after{background:#fff}.custom-switch.custom-switch-off-gray-dark .custom-control-input~.custom-control-label:before{background:#1e1e1e;border-color:#000}.custom-switch.custom-switch-off-gray-dark .custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(30,30,30,.25)}.custom-switch.custom-switch-off-gray-dark .custom-control-input~.custom-control-label:after{background:#000}.custom-switch.custom-switch-on-gray-dark .custom-control-input:checked~.custom-control-label:before{background:#1e1e1e;border-color:#000}.custom-switch.custom-switch-on-gray-dark .custom-control-input:checked:focus~.custom-control-label:before{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(30,30,30,.25)}.custom-switch.custom-switch-on-gray-dark .custom-control-input:checked~.custom-control-label:after{background:#6b6b6b}.custom-range.custom-range-primary:focus{outline:none}.custom-range.custom-range-primary:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(88,108,177,.25)}.custom-range.custom-range-primary:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(88,108,177,.25)}.custom-range.custom-range-primary:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(88,108,177,.25)}.custom-range.custom-range-primary::-webkit-slider-thumb{background-color:#586cb1}.custom-range.custom-range-primary::-webkit-slider-thumb:active{background-color:#d2d7ea}.custom-range.custom-range-primary::-moz-range-thumb{background-color:#586cb1}.custom-range.custom-range-primary::-moz-range-thumb:active{background-color:#d2d7ea}.custom-range.custom-range-primary::-ms-thumb{background-color:#586cb1}.custom-range.custom-range-primary::-ms-thumb:active{background-color:#d2d7ea}.custom-range.custom-range-secondary:focus{outline:none}.custom-range.custom-range-secondary:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(184,194,204,.25)}.custom-range.custom-range-secondary:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(184,194,204,.25)}.custom-range.custom-range-secondary:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(184,194,204,.25)}.custom-range.custom-range-secondary::-webkit-slider-thumb{background-color:#b8c2cc}.custom-range.custom-range-secondary::-webkit-slider-thumb:active{background-color:#fff}.custom-range.custom-range-secondary::-moz-range-thumb{background-color:#b8c2cc}.custom-range.custom-range-secondary::-moz-range-thumb:active{background-color:#fff}.custom-range.custom-range-secondary::-ms-thumb{background-color:#b8c2cc}.custom-range.custom-range-secondary::-ms-thumb:active{background-color:#fff}.custom-range.custom-range-success:focus{outline:none}.custom-range.custom-range-success:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(33,185,120,.25)}.custom-range.custom-range-success:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(33,185,120,.25)}.custom-range.custom-range-success:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(33,185,120,.25)}.custom-range.custom-range-success::-webkit-slider-thumb{background-color:#21b978}.custom-range.custom-range-success::-webkit-slider-thumb:active{background-color:#9feecc}.custom-range.custom-range-success::-moz-range-thumb{background-color:#21b978}.custom-range.custom-range-success::-moz-range-thumb:active{background-color:#9feecc}.custom-range.custom-range-success::-ms-thumb{background-color:#21b978}.custom-range.custom-range-success::-ms-thumb:active{background-color:#9feecc}.custom-range.custom-range-info:focus{outline:none}.custom-range.custom-range-info:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(66,119,207,.25)}.custom-range.custom-range-info:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(66,119,207,.25)}.custom-range.custom-range-info:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(66,119,207,.25)}.custom-range.custom-range-info::-webkit-slider-thumb{background-color:#4277cf}.custom-range.custom-range-info::-webkit-slider-thumb:active{background-color:#d0ddf3}.custom-range.custom-range-info::-moz-range-thumb{background-color:#4277cf}.custom-range.custom-range-info::-moz-range-thumb:active{background-color:#d0ddf3}.custom-range.custom-range-info::-ms-thumb{background-color:#4277cf}.custom-range.custom-range-info::-ms-thumb:active{background-color:#d0ddf3}.custom-range.custom-range-warning:focus{outline:none}.custom-range.custom-range-warning:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(221,164,81,.25)}.custom-range.custom-range-warning:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(221,164,81,.25)}.custom-range.custom-range-warning:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(221,164,81,.25)}.custom-range.custom-range-warning::-webkit-slider-thumb{background-color:#dda451}.custom-range.custom-range-warning::-webkit-slider-thumb:active{background-color:#faf2e6}.custom-range.custom-range-warning::-moz-range-thumb{background-color:#dda451}.custom-range.custom-range-warning::-moz-range-thumb:active{background-color:#faf2e6}.custom-range.custom-range-warning::-ms-thumb{background-color:#dda451}.custom-range.custom-range-warning::-ms-thumb:active{background-color:#faf2e6}.custom-range.custom-range-danger:focus{outline:none}.custom-range.custom-range-danger:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(234,84,85,.25)}.custom-range.custom-range-danger:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(234,84,85,.25)}.custom-range.custom-range-danger:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(234,84,85,.25)}.custom-range.custom-range-danger::-webkit-slider-thumb{background-color:#ea5455}.custom-range.custom-range-danger::-webkit-slider-thumb:active{background-color:#fef3f3}.custom-range.custom-range-danger::-moz-range-thumb{background-color:#ea5455}.custom-range.custom-range-danger::-moz-range-thumb:active{background-color:#fef3f3}.custom-range.custom-range-danger::-ms-thumb{background-color:#ea5455}.custom-range.custom-range-danger::-ms-thumb:active{background-color:#fef3f3}.custom-range.custom-range-light:focus{outline:none}.custom-range.custom-range-light:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(247,247,249,.25)}.custom-range.custom-range-light:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(247,247,249,.25)}.custom-range.custom-range-light:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(247,247,249,.25)}.custom-range.custom-range-light::-webkit-slider-thumb{background-color:#f7f7f9}.custom-range.custom-range-light::-webkit-slider-thumb:active{background-color:#fff}.custom-range.custom-range-light::-moz-range-thumb{background-color:#f7f7f9}.custom-range.custom-range-light::-moz-range-thumb:active{background-color:#fff}.custom-range.custom-range-light::-ms-thumb{background-color:#f7f7f9}.custom-range.custom-range-light::-ms-thumb:active{background-color:#fff}.custom-range.custom-range-dark:focus{outline:none}.custom-range.custom-range-dark:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(34,41,47,.25)}.custom-range.custom-range-dark:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(34,41,47,.25)}.custom-range.custom-range-dark:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(34,41,47,.25)}.custom-range.custom-range-dark::-webkit-slider-thumb{background-color:#22292f}.custom-range.custom-range-dark::-webkit-slider-thumb:active{background-color:#6e8396}.custom-range.custom-range-dark::-moz-range-thumb{background-color:#22292f}.custom-range.custom-range-dark::-moz-range-thumb:active{background-color:#6e8396}.custom-range.custom-range-dark::-ms-thumb{background-color:#22292f}.custom-range.custom-range-dark::-ms-thumb:active{background-color:#6e8396}.custom-range.custom-range-lightblue:focus{outline:none}.custom-range.custom-range-lightblue:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(60,141,188,.25)}.custom-range.custom-range-lightblue:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(60,141,188,.25)}.custom-range.custom-range-lightblue:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(60,141,188,.25)}.custom-range.custom-range-lightblue::-webkit-slider-thumb{background-color:#3c8dbc}.custom-range.custom-range-lightblue::-webkit-slider-thumb:active{background-color:#c0dbeb}.custom-range.custom-range-lightblue::-moz-range-thumb{background-color:#3c8dbc}.custom-range.custom-range-lightblue::-moz-range-thumb:active{background-color:#c0dbeb}.custom-range.custom-range-lightblue::-ms-thumb{background-color:#3c8dbc}.custom-range.custom-range-lightblue::-ms-thumb:active{background-color:#c0dbeb}.custom-range.custom-range-navy:focus{outline:none}.custom-range.custom-range-navy:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(0,31,63,.25)}.custom-range.custom-range-navy:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(0,31,63,.25)}.custom-range.custom-range-navy:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(0,31,63,.25)}.custom-range.custom-range-navy::-webkit-slider-thumb{background-color:#001f3f}.custom-range.custom-range-navy::-webkit-slider-thumb:active{background-color:#0077f2}.custom-range.custom-range-navy::-moz-range-thumb{background-color:#001f3f}.custom-range.custom-range-navy::-moz-range-thumb:active{background-color:#0077f2}.custom-range.custom-range-navy::-ms-thumb{background-color:#001f3f}.custom-range.custom-range-navy::-ms-thumb:active{background-color:#0077f2}.custom-range.custom-range-olive:focus{outline:none}.custom-range.custom-range-olive:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(61,153,112,.25)}.custom-range.custom-range-olive:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(61,153,112,.25)}.custom-range.custom-range-olive:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(61,153,112,.25)}.custom-range.custom-range-olive::-webkit-slider-thumb{background-color:#3d9970}.custom-range.custom-range-olive::-webkit-slider-thumb:active{background-color:#abdec7}.custom-range.custom-range-olive::-moz-range-thumb{background-color:#3d9970}.custom-range.custom-range-olive::-moz-range-thumb:active{background-color:#abdec7}.custom-range.custom-range-olive::-ms-thumb{background-color:#3d9970}.custom-range.custom-range-olive::-ms-thumb:active{background-color:#abdec7}.custom-range.custom-range-lime:focus{outline:none}.custom-range.custom-range-lime:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(1,255,112,.25)}.custom-range.custom-range-lime:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(1,255,112,.25)}.custom-range.custom-range-lime:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(1,255,112,.25)}.custom-range.custom-range-lime::-webkit-slider-thumb{background-color:#01ff70}.custom-range.custom-range-lime::-webkit-slider-thumb:active{background-color:#b4ffd4}.custom-range.custom-range-lime::-moz-range-thumb{background-color:#01ff70}.custom-range.custom-range-lime::-moz-range-thumb:active{background-color:#b4ffd4}.custom-range.custom-range-lime::-ms-thumb{background-color:#01ff70}.custom-range.custom-range-lime::-ms-thumb:active{background-color:#b4ffd4}.custom-range.custom-range-fuchsia:focus{outline:none}.custom-range.custom-range-fuchsia:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(240,18,190,.25)}.custom-range.custom-range-fuchsia:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(240,18,190,.25)}.custom-range.custom-range-fuchsia:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(240,18,190,.25)}.custom-range.custom-range-fuchsia::-webkit-slider-thumb{background-color:#f012be}.custom-range.custom-range-fuchsia::-webkit-slider-thumb:active{background-color:#fbbaec}.custom-range.custom-range-fuchsia::-moz-range-thumb{background-color:#f012be}.custom-range.custom-range-fuchsia::-moz-range-thumb:active{background-color:#fbbaec}.custom-range.custom-range-fuchsia::-ms-thumb{background-color:#f012be}.custom-range.custom-range-fuchsia::-ms-thumb:active{background-color:#fbbaec}.custom-range.custom-range-maroon:focus{outline:none}.custom-range.custom-range-maroon:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(216,27,96,.25)}.custom-range.custom-range-maroon:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(216,27,96,.25)}.custom-range.custom-range-maroon:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(216,27,96,.25)}.custom-range.custom-range-maroon::-webkit-slider-thumb{background-color:#d81b60}.custom-range.custom-range-maroon::-webkit-slider-thumb:active{background-color:#f5b0c9}.custom-range.custom-range-maroon::-moz-range-thumb{background-color:#d81b60}.custom-range.custom-range-maroon::-moz-range-thumb:active{background-color:#f5b0c9}.custom-range.custom-range-maroon::-ms-thumb{background-color:#d81b60}.custom-range.custom-range-maroon::-ms-thumb:active{background-color:#f5b0c9}.custom-range.custom-range-blue:focus{outline:none}.custom-range.custom-range-blue:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(48,133,214,.25)}.custom-range.custom-range-blue:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(48,133,214,.25)}.custom-range.custom-range-blue:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(48,133,214,.25)}.custom-range.custom-range-blue::-webkit-slider-thumb{background-color:#3085d6}.custom-range.custom-range-blue::-webkit-slider-thumb:active{background-color:#c5ddf4}.custom-range.custom-range-blue::-moz-range-thumb{background-color:#3085d6}.custom-range.custom-range-blue::-moz-range-thumb:active{background-color:#c5ddf4}.custom-range.custom-range-blue::-ms-thumb{background-color:#3085d6}.custom-range.custom-range-blue::-ms-thumb:active{background-color:#c5ddf4}.custom-range.custom-range-indigo:focus{outline:none}.custom-range.custom-range-indigo:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(92,107,198,.25)}.custom-range.custom-range-indigo:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(92,107,198,.25)}.custom-range.custom-range-indigo:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(92,107,198,.25)}.custom-range.custom-range-indigo::-webkit-slider-thumb{background-color:#5c6bc6}.custom-range.custom-range-indigo::-webkit-slider-thumb:active{background-color:#e0e3f4}.custom-range.custom-range-indigo::-moz-range-thumb{background-color:#5c6bc6}.custom-range.custom-range-indigo::-moz-range-thumb:active{background-color:#e0e3f4}.custom-range.custom-range-indigo::-ms-thumb{background-color:#5c6bc6}.custom-range.custom-range-indigo::-ms-thumb:active{background-color:#e0e3f4}.custom-range.custom-range-purple:focus{outline:none}.custom-range.custom-range-purple:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(111,66,193,.25)}.custom-range.custom-range-purple:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(111,66,193,.25)}.custom-range.custom-range-purple:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(111,66,193,.25)}.custom-range.custom-range-purple::-webkit-slider-thumb{background-color:#6f42c1}.custom-range.custom-range-purple::-webkit-slider-thumb:active{background-color:#d5c8ed}.custom-range.custom-range-purple::-moz-range-thumb{background-color:#6f42c1}.custom-range.custom-range-purple::-moz-range-thumb:active{background-color:#d5c8ed}.custom-range.custom-range-purple::-ms-thumb{background-color:#6f42c1}.custom-range.custom-range-purple::-ms-thumb:active{background-color:#d5c8ed}.custom-range.custom-range-pink:focus{outline:none}.custom-range.custom-range-pink:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(255,138,204,.25)}.custom-range.custom-range-pink:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(255,138,204,.25)}.custom-range.custom-range-pink:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(255,138,204,.25)}.custom-range.custom-range-pink::-webkit-slider-thumb{background-color:#ff8acc}.custom-range.custom-range-pink::-webkit-slider-thumb:active{background-color:#fff}.custom-range.custom-range-pink::-moz-range-thumb{background-color:#ff8acc}.custom-range.custom-range-pink::-moz-range-thumb:active{background-color:#fff}.custom-range.custom-range-pink::-ms-thumb{background-color:#ff8acc}.custom-range.custom-range-pink::-ms-thumb:active{background-color:#fff}.custom-range.custom-range-red:focus{outline:none}.custom-range.custom-range-red:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(234,84,85,.25)}.custom-range.custom-range-red:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(234,84,85,.25)}.custom-range.custom-range-red:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(234,84,85,.25)}.custom-range.custom-range-red::-webkit-slider-thumb{background-color:#ea5455}.custom-range.custom-range-red::-webkit-slider-thumb:active{background-color:#fef3f3}.custom-range.custom-range-red::-moz-range-thumb{background-color:#ea5455}.custom-range.custom-range-red::-moz-range-thumb:active{background-color:#fef3f3}.custom-range.custom-range-red::-ms-thumb{background-color:#ea5455}.custom-range.custom-range-red::-ms-thumb:active{background-color:#fef3f3}.custom-range.custom-range-orange:focus{outline:none}.custom-range.custom-range-orange:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(221,164,81,.25)}.custom-range.custom-range-orange:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(221,164,81,.25)}.custom-range.custom-range-orange:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(221,164,81,.25)}.custom-range.custom-range-orange::-webkit-slider-thumb{background-color:#dda451}.custom-range.custom-range-orange::-webkit-slider-thumb:active{background-color:#faf2e6}.custom-range.custom-range-orange::-moz-range-thumb{background-color:#dda451}.custom-range.custom-range-orange::-moz-range-thumb:active{background-color:#faf2e6}.custom-range.custom-range-orange::-ms-thumb{background-color:#dda451}.custom-range.custom-range-orange::-ms-thumb:active{background-color:#faf2e6}.custom-range.custom-range-yellow:focus{outline:none}.custom-range.custom-range-yellow:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(237,195,14,.25)}.custom-range.custom-range-yellow:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(237,195,14,.25)}.custom-range.custom-range-yellow:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(237,195,14,.25)}.custom-range.custom-range-yellow::-webkit-slider-thumb{background-color:#edc30e}.custom-range.custom-range-yellow::-webkit-slider-thumb:active{background-color:#fbedb3}.custom-range.custom-range-yellow::-moz-range-thumb{background-color:#edc30e}.custom-range.custom-range-yellow::-moz-range-thumb:active{background-color:#fbedb3}.custom-range.custom-range-yellow::-ms-thumb{background-color:#edc30e}.custom-range.custom-range-yellow::-ms-thumb:active{background-color:#fbedb3}.custom-range.custom-range-green:focus{outline:none}.custom-range.custom-range-green:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(33,185,120,.25)}.custom-range.custom-range-green:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(33,185,120,.25)}.custom-range.custom-range-green:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(33,185,120,.25)}.custom-range.custom-range-green::-webkit-slider-thumb{background-color:#21b978}.custom-range.custom-range-green::-webkit-slider-thumb:active{background-color:#9feecc}.custom-range.custom-range-green::-moz-range-thumb{background-color:#21b978}.custom-range.custom-range-green::-moz-range-thumb:active{background-color:#9feecc}.custom-range.custom-range-green::-ms-thumb{background-color:#21b978}.custom-range.custom-range-green::-ms-thumb:active{background-color:#9feecc}.custom-range.custom-range-teal:focus{outline:none}.custom-range.custom-range-teal:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(32,201,151,.25)}.custom-range.custom-range-teal:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(32,201,151,.25)}.custom-range.custom-range-teal:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(32,201,151,.25)}.custom-range.custom-range-teal::-webkit-slider-thumb{background-color:#20c997}.custom-range.custom-range-teal::-webkit-slider-thumb:active{background-color:#aaf1dc}.custom-range.custom-range-teal::-moz-range-thumb{background-color:#20c997}.custom-range.custom-range-teal::-moz-range-thumb:active{background-color:#aaf1dc}.custom-range.custom-range-teal::-ms-thumb{background-color:#20c997}.custom-range.custom-range-teal::-ms-thumb:active{background-color:#aaf1dc}.custom-range.custom-range-cyan:focus{outline:none}.custom-range.custom-range-cyan:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(115,103,240,.25)}.custom-range.custom-range-cyan:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(115,103,240,.25)}.custom-range.custom-range-cyan:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(115,103,240,.25)}.custom-range.custom-range-cyan::-webkit-slider-thumb{background-color:#7367f0}.custom-range.custom-range-cyan::-webkit-slider-thumb:active{background-color:#fff}.custom-range.custom-range-cyan::-moz-range-thumb{background-color:#7367f0}.custom-range.custom-range-cyan::-moz-range-thumb:active{background-color:#fff}.custom-range.custom-range-cyan::-ms-thumb{background-color:#7367f0}.custom-range.custom-range-cyan::-ms-thumb:active{background-color:#fff}.custom-range.custom-range-white:focus{outline:none}.custom-range.custom-range-white:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px hsla(0,0%,100%,.25)}.custom-range.custom-range-white:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px hsla(0,0%,100%,.25)}.custom-range.custom-range-white:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px hsla(0,0%,100%,.25)}.custom-range.custom-range-white::-webkit-slider-thumb,.custom-range.custom-range-white::-webkit-slider-thumb:active{background-color:#fff}.custom-range.custom-range-white::-moz-range-thumb,.custom-range.custom-range-white::-moz-range-thumb:active{background-color:#fff}.custom-range.custom-range-white::-ms-thumb,.custom-range.custom-range-white::-ms-thumb:active{background-color:#fff}.custom-range.custom-range-gray:focus{outline:none}.custom-range.custom-range-gray:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(184,194,204,.25)}.custom-range.custom-range-gray:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(184,194,204,.25)}.custom-range.custom-range-gray:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(184,194,204,.25)}.custom-range.custom-range-gray::-webkit-slider-thumb{background-color:#b8c2cc}.custom-range.custom-range-gray::-webkit-slider-thumb:active{background-color:#fff}.custom-range.custom-range-gray::-moz-range-thumb{background-color:#b8c2cc}.custom-range.custom-range-gray::-moz-range-thumb:active{background-color:#fff}.custom-range.custom-range-gray::-ms-thumb{background-color:#b8c2cc}.custom-range.custom-range-gray::-ms-thumb:active{background-color:#fff}.custom-range.custom-range-gray-dark:focus{outline:none}.custom-range.custom-range-gray-dark:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(30,30,30,.25)}.custom-range.custom-range-gray-dark:focus::-moz-range-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(30,30,30,.25)}.custom-range.custom-range-gray-dark:focus::-ms-thumb{box-shadow:0 0 0 1px #eff1f7,0 0 0 2px rgba(30,30,30,.25)}.custom-range.custom-range-gray-dark::-webkit-slider-thumb{background-color:#1e1e1e}.custom-range.custom-range-gray-dark::-webkit-slider-thumb:active{background-color:#777}.custom-range.custom-range-gray-dark::-moz-range-thumb{background-color:#1e1e1e}.custom-range.custom-range-gray-dark::-moz-range-thumb:active{background-color:#777}.custom-range.custom-range-gray-dark::-ms-thumb{background-color:#1e1e1e}.custom-range.custom-range-gray-dark::-ms-thumb:active{background-color:#777}.progress{border-radius:1px}.progress.vertical{display:inline-block;height:200px;margin-right:10px;position:relative;width:30px}.progress.vertical>.progress-bar{bottom:0;position:absolute;width:100%}.progress.vertical.progress-sm,.progress.vertical.sm{width:20px}.progress.vertical.progress-xs,.progress.vertical.xs{width:10px}.progress.vertical.progress-xxs,.progress.vertical.xxs{width:3px}.progress-group{margin-bottom:1.5rem}.progress-sm{height:10px}.progress-xs{height:7px}.progress-xxs{height:3px}.table tr>td .progress{margin:0}.card-primary:not(.card-outline)>.card-header{background-color:#586cb1}.card-primary:not(.card-outline)>.card-header,.card-primary:not(.card-outline)>.card-header a{color:#fff}.card-primary:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-primary.card-outline{border-top:3px solid #586cb1}.card-primary.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-primary.card-outline-tabs>.card-header a.active{border-top:3px solid #586cb1}.bg-gradient-primary .btn-tool,.bg-primary .btn-tool,.card-primary:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-gradient-primary .btn-tool:hover,.bg-primary .btn-tool:hover,.card-primary:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-gradient-primary .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-primary .bootstrap-datetimepicker-widget .table th,.card.bg-primary .bootstrap-datetimepicker-widget .table td,.card.bg-primary .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-primary .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-primary .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-primary .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-primary .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-primary .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-primary .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-primary .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-primary .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-primary .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-primary .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#475a99;color:#fff}.card.bg-gradient-primary .bootstrap-datetimepicker-widget table td.today:before,.card.bg-primary .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-gradient-primary .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-primary .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-primary .bootstrap-datetimepicker-widget table td.active,.card.bg-primary .bootstrap-datetimepicker-widget table td.active:hover{background:#7b8bc1;color:#fff}.card-secondary:not(.card-outline)>.card-header{background-color:#b8c2cc}.card-secondary:not(.card-outline)>.card-header,.card-secondary:not(.card-outline)>.card-header a,.card-secondary:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-secondary.card-outline{border-top:3px solid #b8c2cc}.card-secondary.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-secondary.card-outline-tabs>.card-header a.active{border-top:3px solid #b8c2cc}.bg-gradient-secondary .btn-tool,.bg-secondary .btn-tool,.card-secondary:not(.card-outline) .btn-tool{color:rgba(42,46,48,.8)}.bg-gradient-secondary .btn-tool:hover,.bg-secondary .btn-tool:hover,.card-secondary:not(.card-outline) .btn-tool:hover{color:#2a2e30}.card.bg-gradient-secondary .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-secondary .bootstrap-datetimepicker-widget .table th,.card.bg-secondary .bootstrap-datetimepicker-widget .table td,.card.bg-secondary .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-secondary .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-secondary .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-secondary .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-secondary .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-secondary .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-secondary .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-secondary .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-secondary .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-secondary .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-secondary .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#a0aebb;color:#2a2e30}.card.bg-gradient-secondary .bootstrap-datetimepicker-widget table td.today:before,.card.bg-secondary .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#2a2e30}.card.bg-gradient-secondary .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-secondary .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-secondary .bootstrap-datetimepicker-widget table td.active,.card.bg-secondary .bootstrap-datetimepicker-widget table td.active:hover{background:#d6dce1;color:#2a2e30}.card-success:not(.card-outline)>.card-header{background-color:#21b978}.card-success:not(.card-outline)>.card-header,.card-success:not(.card-outline)>.card-header a{color:#fff}.card-success:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-success.card-outline{border-top:3px solid #21b978}.card-success.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-success.card-outline-tabs>.card-header a.active{border-top:3px solid #21b978}.bg-gradient-success .btn-tool,.bg-success .btn-tool,.card-success:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-gradient-success .btn-tool:hover,.bg-success .btn-tool:hover,.card-success:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-gradient-success .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-success .bootstrap-datetimepicker-widget .table th,.card.bg-success .bootstrap-datetimepicker-widget .table td,.card.bg-success .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-success .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-success .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-success .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-success .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-success .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-success .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-success .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-success .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-success .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-success .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#1b9662;color:#fff}.card.bg-gradient-success .bootstrap-datetimepicker-widget table td.today:before,.card.bg-success .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-gradient-success .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-success .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-success .bootstrap-datetimepicker-widget table td.active,.card.bg-success .bootstrap-datetimepicker-widget table td.active:hover{background:#32db93;color:#fff}.card-info:not(.card-outline)>.card-header{background-color:#4277cf}.card-info:not(.card-outline)>.card-header,.card-info:not(.card-outline)>.card-header a{color:#fff}.card-info:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-info.card-outline{border-top:3px solid #4277cf}.card-info.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-info.card-outline-tabs>.card-header a.active{border-top:3px solid #4277cf}.bg-gradient-info .btn-tool,.bg-info .btn-tool,.card-info:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-gradient-info .btn-tool:hover,.bg-info .btn-tool:hover,.card-info:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-gradient-info .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-info .bootstrap-datetimepicker-widget .table th,.card.bg-info .bootstrap-datetimepicker-widget .table td,.card.bg-info .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-info .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-info .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-info .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-info .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-info .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-info .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-info .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-info .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-info .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-info .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#2f63b9;color:#fff}.card.bg-gradient-info .bootstrap-datetimepicker-widget table td.today:before,.card.bg-info .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-gradient-info .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-info .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-info .bootstrap-datetimepicker-widget table td.active,.card.bg-info .bootstrap-datetimepicker-widget table td.active:hover{background:#6b94d9;color:#fff}.card-warning:not(.card-outline)>.card-header{background-color:#dda451}.card-warning:not(.card-outline)>.card-header,.card-warning:not(.card-outline)>.card-header a,.card-warning:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-warning.card-outline{border-top:3px solid #dda451}.card-warning.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-warning.card-outline-tabs>.card-header a.active{border-top:3px solid #dda451}.bg-gradient-warning .btn-tool,.bg-warning .btn-tool,.card-warning:not(.card-outline) .btn-tool{color:rgba(42,46,48,.8)}.bg-gradient-warning .btn-tool:hover,.bg-warning .btn-tool:hover,.card-warning:not(.card-outline) .btn-tool:hover{color:#2a2e30}.card.bg-gradient-warning .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-warning .bootstrap-datetimepicker-widget .table th,.card.bg-warning .bootstrap-datetimepicker-widget .table td,.card.bg-warning .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-warning .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-warning .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-warning .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-warning .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-warning .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-warning .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-warning .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-warning .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-warning .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-warning .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#d6922f;color:#2a2e30}.card.bg-gradient-warning .bootstrap-datetimepicker-widget table td.today:before,.card.bg-warning .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#2a2e30}.card.bg-gradient-warning .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-warning .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-warning .bootstrap-datetimepicker-widget table td.active,.card.bg-warning .bootstrap-datetimepicker-widget table td.active:hover{background:#e5ba7c;color:#2a2e30}.card-danger:not(.card-outline)>.card-header{background-color:#ea5455}.card-danger:not(.card-outline)>.card-header,.card-danger:not(.card-outline)>.card-header a{color:#fff}.card-danger:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-danger.card-outline{border-top:3px solid #ea5455}.card-danger.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-danger.card-outline-tabs>.card-header a.active{border-top:3px solid #ea5455}.bg-danger .btn-tool,.bg-gradient-danger .btn-tool,.card-danger:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-danger .btn-tool:hover,.bg-gradient-danger .btn-tool:hover,.card-danger:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-danger .bootstrap-datetimepicker-widget .table td,.card.bg-danger .bootstrap-datetimepicker-widget .table th,.card.bg-gradient-danger .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-danger .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-danger .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-danger .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-danger .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-danger .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-danger .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-gradient-danger .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-danger .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-danger .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-danger .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-danger .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#e63031;color:#fff}.card.bg-danger .bootstrap-datetimepicker-widget table td.today:before,.card.bg-gradient-danger .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-danger .bootstrap-datetimepicker-widget table td.active,.card.bg-danger .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-gradient-danger .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-danger .bootstrap-datetimepicker-widget table td.active:hover{background:#f08182;color:#fff}.card-light:not(.card-outline)>.card-header{background-color:#f7f7f9}.card-light:not(.card-outline)>.card-header,.card-light:not(.card-outline)>.card-header a,.card-light:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-light.card-outline{border-top:3px solid #f7f7f9}.card-light.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-light.card-outline-tabs>.card-header a.active{border-top:3px solid #f7f7f9}.bg-gradient-light .btn-tool,.bg-light .btn-tool,.card-light:not(.card-outline) .btn-tool{color:rgba(42,46,48,.8)}.bg-gradient-light .btn-tool:hover,.bg-light .btn-tool:hover,.card-light:not(.card-outline) .btn-tool:hover{color:#2a2e30}.card.bg-gradient-light .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-light .bootstrap-datetimepicker-widget .table th,.card.bg-light .bootstrap-datetimepicker-widget .table td,.card.bg-light .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-light .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-light .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-light .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-light .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-light .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-light .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-light .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-light .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-light .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-light .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#e0e0e8;color:#2a2e30}.card.bg-gradient-light .bootstrap-datetimepicker-widget table td.today:before,.card.bg-light .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#2a2e30}.card.bg-gradient-light .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-light .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-light .bootstrap-datetimepicker-widget table td.active,.card.bg-light .bootstrap-datetimepicker-widget table td.active:hover{background:#fff;color:#2a2e30}.card-dark:not(.card-outline)>.card-header{background-color:#22292f}.card-dark:not(.card-outline)>.card-header,.card-dark:not(.card-outline)>.card-header a{color:#fff}.card-dark:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-dark.card-outline{border-top:3px solid #22292f}.card-dark.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-dark.card-outline-tabs>.card-header a.active{border-top:3px solid #22292f}.bg-dark .btn-tool,.bg-gradient-dark .btn-tool,.card-dark:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-dark .btn-tool:hover,.bg-gradient-dark .btn-tool:hover,.card-dark:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-dark .bootstrap-datetimepicker-widget .table td,.card.bg-dark .bootstrap-datetimepicker-widget .table th,.card.bg-gradient-dark .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-dark .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-dark .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-dark .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-dark .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-dark .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-dark .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-gradient-dark .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-dark .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-dark .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-dark .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-dark .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#111417;color:#fff}.card.bg-dark .bootstrap-datetimepicker-widget table td.today:before,.card.bg-gradient-dark .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-dark .bootstrap-datetimepicker-widget table td.active,.card.bg-dark .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-gradient-dark .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-dark .bootstrap-datetimepicker-widget table td.active:hover{background:#37434d;color:#fff}.card-lightblue:not(.card-outline)>.card-header{background-color:#3c8dbc}.card-lightblue:not(.card-outline)>.card-header,.card-lightblue:not(.card-outline)>.card-header a{color:#fff}.card-lightblue:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-lightblue.card-outline{border-top:3px solid #3c8dbc}.card-lightblue.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-lightblue.card-outline-tabs>.card-header a.active{border-top:3px solid #3c8dbc}.bg-gradient-lightblue .btn-tool,.bg-lightblue .btn-tool,.card-lightblue:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-gradient-lightblue .btn-tool:hover,.bg-lightblue .btn-tool:hover,.card-lightblue:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-gradient-lightblue .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-lightblue .bootstrap-datetimepicker-widget .table th,.card.bg-lightblue .bootstrap-datetimepicker-widget .table td,.card.bg-lightblue .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-lightblue .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-lightblue .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-lightblue .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-lightblue .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-lightblue .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-lightblue .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-lightblue .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-lightblue .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-lightblue .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-lightblue .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#32769d;color:#fff}.card.bg-gradient-lightblue .bootstrap-datetimepicker-widget table td.today:before,.card.bg-lightblue .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-gradient-lightblue .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-lightblue .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-lightblue .bootstrap-datetimepicker-widget table td.active,.card.bg-lightblue .bootstrap-datetimepicker-widget table td.active:hover{background:#5fa4cc;color:#fff}.card-navy:not(.card-outline)>.card-header{background-color:#001f3f}.card-navy:not(.card-outline)>.card-header,.card-navy:not(.card-outline)>.card-header a{color:#fff}.card-navy:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-navy.card-outline{border-top:3px solid #001f3f}.card-navy.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-navy.card-outline-tabs>.card-header a.active{border-top:3px solid #001f3f}.bg-gradient-navy .btn-tool,.bg-navy .btn-tool,.card-navy:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-gradient-navy .btn-tool:hover,.bg-navy .btn-tool:hover,.card-navy:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-gradient-navy .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-navy .bootstrap-datetimepicker-widget .table th,.card.bg-navy .bootstrap-datetimepicker-widget .table td,.card.bg-navy .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-navy .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-navy .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-navy .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-navy .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-navy .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-navy .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-navy .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-navy .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-navy .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-navy .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#000b16;color:#fff}.card.bg-gradient-navy .bootstrap-datetimepicker-widget table td.today:before,.card.bg-navy .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-gradient-navy .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-navy .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-navy .bootstrap-datetimepicker-widget table td.active,.card.bg-navy .bootstrap-datetimepicker-widget table td.active:hover{background:#003872;color:#fff}.card-olive:not(.card-outline)>.card-header{background-color:#3d9970}.card-olive:not(.card-outline)>.card-header,.card-olive:not(.card-outline)>.card-header a{color:#fff}.card-olive:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-olive.card-outline{border-top:3px solid #3d9970}.card-olive.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-olive.card-outline-tabs>.card-header a.active{border-top:3px solid #3d9970}.bg-gradient-olive .btn-tool,.bg-olive .btn-tool,.card-olive:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-gradient-olive .btn-tool:hover,.bg-olive .btn-tool:hover,.card-olive:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-gradient-olive .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-olive .bootstrap-datetimepicker-widget .table th,.card.bg-olive .bootstrap-datetimepicker-widget .table td,.card.bg-olive .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-olive .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-olive .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-olive .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-olive .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-olive .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-olive .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-olive .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-olive .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-olive .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-olive .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#317c5b;color:#fff}.card.bg-gradient-olive .bootstrap-datetimepicker-widget table td.today:before,.card.bg-olive .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-gradient-olive .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-olive .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-olive .bootstrap-datetimepicker-widget table td.active,.card.bg-olive .bootstrap-datetimepicker-widget table td.active:hover{background:#50b98a;color:#fff}.card-lime:not(.card-outline)>.card-header{background-color:#01ff70}.card-lime:not(.card-outline)>.card-header,.card-lime:not(.card-outline)>.card-header a,.card-lime:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-lime.card-outline{border-top:3px solid #01ff70}.card-lime.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-lime.card-outline-tabs>.card-header a.active{border-top:3px solid #01ff70}.bg-gradient-lime .btn-tool,.bg-lime .btn-tool,.card-lime:not(.card-outline) .btn-tool{color:rgba(42,46,48,.8)}.bg-gradient-lime .btn-tool:hover,.bg-lime .btn-tool:hover,.card-lime:not(.card-outline) .btn-tool:hover{color:#2a2e30}.card.bg-gradient-lime .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-lime .bootstrap-datetimepicker-widget .table th,.card.bg-lime .bootstrap-datetimepicker-widget .table td,.card.bg-lime .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-lime .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-lime .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-lime .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-lime .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-lime .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-lime .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-lime .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-lime .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-lime .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-lime .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#00d75e;color:#2a2e30}.card.bg-gradient-lime .bootstrap-datetimepicker-widget table td.today:before,.card.bg-lime .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#2a2e30}.card.bg-gradient-lime .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-lime .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-lime .bootstrap-datetimepicker-widget table td.active,.card.bg-lime .bootstrap-datetimepicker-widget table td.active:hover{background:#34ff8d;color:#2a2e30}.card-fuchsia:not(.card-outline)>.card-header{background-color:#f012be}.card-fuchsia:not(.card-outline)>.card-header,.card-fuchsia:not(.card-outline)>.card-header a{color:#fff}.card-fuchsia:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-fuchsia.card-outline{border-top:3px solid #f012be}.card-fuchsia.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-fuchsia.card-outline-tabs>.card-header a.active{border-top:3px solid #f012be}.bg-fuchsia .btn-tool,.bg-gradient-fuchsia .btn-tool,.card-fuchsia:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-fuchsia .btn-tool:hover,.bg-gradient-fuchsia .btn-tool:hover,.card-fuchsia:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-fuchsia .bootstrap-datetimepicker-widget .table td,.card.bg-fuchsia .bootstrap-datetimepicker-widget .table th,.card.bg-gradient-fuchsia .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-fuchsia .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-fuchsia .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-fuchsia .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-fuchsia .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-fuchsia .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-fuchsia .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-gradient-fuchsia .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-fuchsia .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-fuchsia .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-fuchsia .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-fuchsia .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#cc0da1;color:#fff}.card.bg-fuchsia .bootstrap-datetimepicker-widget table td.today:before,.card.bg-gradient-fuchsia .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-fuchsia .bootstrap-datetimepicker-widget table td.active,.card.bg-fuchsia .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-gradient-fuchsia .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-fuchsia .bootstrap-datetimepicker-widget table td.active:hover{background:#f342cb;color:#fff}.card-maroon:not(.card-outline)>.card-header{background-color:#d81b60}.card-maroon:not(.card-outline)>.card-header,.card-maroon:not(.card-outline)>.card-header a{color:#fff}.card-maroon:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-maroon.card-outline{border-top:3px solid #d81b60}.card-maroon.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-maroon.card-outline-tabs>.card-header a.active{border-top:3px solid #d81b60}.bg-gradient-maroon .btn-tool,.bg-maroon .btn-tool,.card-maroon:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-gradient-maroon .btn-tool:hover,.bg-maroon .btn-tool:hover,.card-maroon:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-gradient-maroon .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-maroon .bootstrap-datetimepicker-widget .table th,.card.bg-maroon .bootstrap-datetimepicker-widget .table td,.card.bg-maroon .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-maroon .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-maroon .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-maroon .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-maroon .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-maroon .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-maroon .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-maroon .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-maroon .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-maroon .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-maroon .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#b41650;color:#fff}.card.bg-gradient-maroon .bootstrap-datetimepicker-widget table td.today:before,.card.bg-maroon .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-gradient-maroon .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-maroon .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-maroon .bootstrap-datetimepicker-widget table td.active,.card.bg-maroon .bootstrap-datetimepicker-widget table td.active:hover{background:#e73f7c;color:#fff}.card-blue:not(.card-outline)>.card-header{background-color:#3085d6}.card-blue:not(.card-outline)>.card-header,.card-blue:not(.card-outline)>.card-header a{color:#fff}.card-blue:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-blue.card-outline{border-top:3px solid #3085d6}.card-blue.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-blue.card-outline-tabs>.card-header a.active{border-top:3px solid #3085d6}.bg-blue .btn-tool,.bg-gradient-blue .btn-tool,.card-blue:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-blue .btn-tool:hover,.bg-gradient-blue .btn-tool:hover,.card-blue:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-blue .bootstrap-datetimepicker-widget .table td,.card.bg-blue .bootstrap-datetimepicker-widget .table th,.card.bg-gradient-blue .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-blue .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-blue .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-blue .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-blue .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-blue .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-blue .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-gradient-blue .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-blue .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-blue .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-blue .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-blue .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#2570b9;color:#fff}.card.bg-blue .bootstrap-datetimepicker-widget table td.today:before,.card.bg-gradient-blue .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-blue .bootstrap-datetimepicker-widget table td.active,.card.bg-blue .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-gradient-blue .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-blue .bootstrap-datetimepicker-widget table td.active:hover{background:#5b9ede;color:#fff}.card-indigo:not(.card-outline)>.card-header{background-color:#5c6bc6}.card-indigo:not(.card-outline)>.card-header,.card-indigo:not(.card-outline)>.card-header a{color:#fff}.card-indigo:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-indigo.card-outline{border-top:3px solid #5c6bc6}.card-indigo.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-indigo.card-outline-tabs>.card-header a.active{border-top:3px solid #5c6bc6}.bg-gradient-indigo .btn-tool,.bg-indigo .btn-tool,.card-indigo:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-gradient-indigo .btn-tool:hover,.bg-indigo .btn-tool:hover,.card-indigo:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-gradient-indigo .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-indigo .bootstrap-datetimepicker-widget .table th,.card.bg-indigo .bootstrap-datetimepicker-widget .table td,.card.bg-indigo .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-indigo .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-indigo .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-indigo .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-indigo .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-indigo .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-indigo .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-indigo .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-indigo .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-indigo .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-indigo .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#4152b9;color:#fff}.card.bg-gradient-indigo .bootstrap-datetimepicker-widget table td.today:before,.card.bg-indigo .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-gradient-indigo .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-indigo .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-indigo .bootstrap-datetimepicker-widget table td.active,.card.bg-indigo .bootstrap-datetimepicker-widget table td.active:hover{background:#828dd3;color:#fff}.card-purple:not(.card-outline)>.card-header{background-color:#6f42c1}.card-purple:not(.card-outline)>.card-header,.card-purple:not(.card-outline)>.card-header a{color:#fff}.card-purple:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-purple.card-outline{border-top:3px solid #6f42c1}.card-purple.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-purple.card-outline-tabs>.card-header a.active{border-top:3px solid #6f42c1}.bg-gradient-purple .btn-tool,.bg-purple .btn-tool,.card-purple:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-gradient-purple .btn-tool:hover,.bg-purple .btn-tool:hover,.card-purple:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-gradient-purple .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-purple .bootstrap-datetimepicker-widget .table th,.card.bg-purple .bootstrap-datetimepicker-widget .table td,.card.bg-purple .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-purple .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-purple .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-purple .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-purple .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-purple .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-purple .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-purple .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-purple .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-purple .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-purple .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#5d36a4;color:#fff}.card.bg-gradient-purple .bootstrap-datetimepicker-widget table td.today:before,.card.bg-purple .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-gradient-purple .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-purple .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-purple .bootstrap-datetimepicker-widget table td.active,.card.bg-purple .bootstrap-datetimepicker-widget table td.active:hover{background:#8c68ce;color:#fff}.card-pink:not(.card-outline)>.card-header{background-color:#ff8acc}.card-pink:not(.card-outline)>.card-header,.card-pink:not(.card-outline)>.card-header a,.card-pink:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-pink.card-outline{border-top:3px solid #ff8acc}.card-pink.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-pink.card-outline-tabs>.card-header a.active{border-top:3px solid #ff8acc}.bg-gradient-pink .btn-tool,.bg-pink .btn-tool,.card-pink:not(.card-outline) .btn-tool{color:rgba(42,46,48,.8)}.bg-gradient-pink .btn-tool:hover,.bg-pink .btn-tool:hover,.card-pink:not(.card-outline) .btn-tool:hover{color:#2a2e30}.card.bg-gradient-pink .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-pink .bootstrap-datetimepicker-widget .table th,.card.bg-pink .bootstrap-datetimepicker-widget .table td,.card.bg-pink .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-pink .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-pink .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-pink .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-pink .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-pink .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-pink .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-pink .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-pink .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-pink .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-pink .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#ff61ba;color:#2a2e30}.card.bg-gradient-pink .bootstrap-datetimepicker-widget table td.today:before,.card.bg-pink .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#2a2e30}.card.bg-gradient-pink .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-pink .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-pink .bootstrap-datetimepicker-widget table td.active,.card.bg-pink .bootstrap-datetimepicker-widget table td.active:hover{background:#ffbde2;color:#2a2e30}.card-red:not(.card-outline)>.card-header{background-color:#ea5455}.card-red:not(.card-outline)>.card-header,.card-red:not(.card-outline)>.card-header a{color:#fff}.card-red:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-red.card-outline{border-top:3px solid #ea5455}.card-red.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-red.card-outline-tabs>.card-header a.active{border-top:3px solid #ea5455}.bg-gradient-red .btn-tool,.bg-red .btn-tool,.card-red:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-gradient-red .btn-tool:hover,.bg-red .btn-tool:hover,.card-red:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-gradient-red .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-red .bootstrap-datetimepicker-widget .table th,.card.bg-red .bootstrap-datetimepicker-widget .table td,.card.bg-red .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-red .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-red .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-red .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-red .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-red .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-red .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-red .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-red .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-red .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-red .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#e63031;color:#fff}.card.bg-gradient-red .bootstrap-datetimepicker-widget table td.today:before,.card.bg-red .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-gradient-red .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-red .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-red .bootstrap-datetimepicker-widget table td.active,.card.bg-red .bootstrap-datetimepicker-widget table td.active:hover{background:#f08182;color:#fff}.card-orange:not(.card-outline)>.card-header{background-color:#dda451}.card-orange:not(.card-outline)>.card-header,.card-orange:not(.card-outline)>.card-header a,.card-orange:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-orange.card-outline{border-top:3px solid #dda451}.card-orange.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-orange.card-outline-tabs>.card-header a.active{border-top:3px solid #dda451}.bg-gradient-orange .btn-tool,.bg-orange .btn-tool,.card-orange:not(.card-outline) .btn-tool{color:rgba(42,46,48,.8)}.bg-gradient-orange .btn-tool:hover,.bg-orange .btn-tool:hover,.card-orange:not(.card-outline) .btn-tool:hover{color:#2a2e30}.card.bg-gradient-orange .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-orange .bootstrap-datetimepicker-widget .table th,.card.bg-orange .bootstrap-datetimepicker-widget .table td,.card.bg-orange .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-orange .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-orange .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-orange .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-orange .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-orange .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-orange .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-orange .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-orange .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-orange .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-orange .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#d6922f;color:#2a2e30}.card.bg-gradient-orange .bootstrap-datetimepicker-widget table td.today:before,.card.bg-orange .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#2a2e30}.card.bg-gradient-orange .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-orange .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-orange .bootstrap-datetimepicker-widget table td.active,.card.bg-orange .bootstrap-datetimepicker-widget table td.active:hover{background:#e5ba7c;color:#2a2e30}.card-yellow:not(.card-outline)>.card-header{background-color:#edc30e}.card-yellow:not(.card-outline)>.card-header,.card-yellow:not(.card-outline)>.card-header a,.card-yellow:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-yellow.card-outline{border-top:3px solid #edc30e}.card-yellow.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-yellow.card-outline-tabs>.card-header a.active{border-top:3px solid #edc30e}.bg-gradient-yellow .btn-tool,.bg-yellow .btn-tool,.card-yellow:not(.card-outline) .btn-tool{color:rgba(42,46,48,.8)}.bg-gradient-yellow .btn-tool:hover,.bg-yellow .btn-tool:hover,.card-yellow:not(.card-outline) .btn-tool:hover{color:#2a2e30}.card.bg-gradient-yellow .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-yellow .bootstrap-datetimepicker-widget .table th,.card.bg-yellow .bootstrap-datetimepicker-widget .table td,.card.bg-yellow .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-yellow .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-yellow .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-yellow .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-yellow .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-yellow .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-yellow .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-yellow .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-yellow .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-yellow .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-yellow .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#c6a30c;color:#2a2e30}.card.bg-gradient-yellow .bootstrap-datetimepicker-widget table td.today:before,.card.bg-yellow .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#2a2e30}.card.bg-gradient-yellow .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-yellow .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-yellow .bootstrap-datetimepicker-widget table td.active,.card.bg-yellow .bootstrap-datetimepicker-widget table td.active:hover{background:#f3d13b;color:#2a2e30}.card-green:not(.card-outline)>.card-header{background-color:#21b978}.card-green:not(.card-outline)>.card-header,.card-green:not(.card-outline)>.card-header a{color:#fff}.card-green:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-green.card-outline{border-top:3px solid #21b978}.card-green.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-green.card-outline-tabs>.card-header a.active{border-top:3px solid #21b978}.bg-gradient-green .btn-tool,.bg-green .btn-tool,.card-green:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-gradient-green .btn-tool:hover,.bg-green .btn-tool:hover,.card-green:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-gradient-green .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-green .bootstrap-datetimepicker-widget .table th,.card.bg-green .bootstrap-datetimepicker-widget .table td,.card.bg-green .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-green .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-green .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-green .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-green .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-green .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-green .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-green .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-green .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-green .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-green .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#1b9662;color:#fff}.card.bg-gradient-green .bootstrap-datetimepicker-widget table td.today:before,.card.bg-green .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-gradient-green .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-green .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-green .bootstrap-datetimepicker-widget table td.active,.card.bg-green .bootstrap-datetimepicker-widget table td.active:hover{background:#32db93;color:#fff}.card-teal:not(.card-outline)>.card-header{background-color:#20c997}.card-teal:not(.card-outline)>.card-header,.card-teal:not(.card-outline)>.card-header a{color:#fff}.card-teal:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-teal.card-outline{border-top:3px solid #20c997}.card-teal.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-teal.card-outline-tabs>.card-header a.active{border-top:3px solid #20c997}.bg-gradient-teal .btn-tool,.bg-teal .btn-tool,.card-teal:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-gradient-teal .btn-tool:hover,.bg-teal .btn-tool:hover,.card-teal:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-gradient-teal .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-teal .bootstrap-datetimepicker-widget .table th,.card.bg-teal .bootstrap-datetimepicker-widget .table td,.card.bg-teal .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-teal .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-teal .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-teal .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-teal .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-teal .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-teal .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-teal .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-teal .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-teal .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-teal .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#1aa67d;color:#fff}.card.bg-gradient-teal .bootstrap-datetimepicker-widget table td.today:before,.card.bg-teal .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-gradient-teal .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-teal .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-teal .bootstrap-datetimepicker-widget table td.active,.card.bg-teal .bootstrap-datetimepicker-widget table td.active:hover{background:#3ce0af;color:#fff}.card-cyan:not(.card-outline)>.card-header{background-color:#7367f0}.card-cyan:not(.card-outline)>.card-header,.card-cyan:not(.card-outline)>.card-header a{color:#fff}.card-cyan:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-cyan.card-outline{border-top:3px solid #7367f0}.card-cyan.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-cyan.card-outline-tabs>.card-header a.active{border-top:3px solid #7367f0}.bg-cyan .btn-tool,.bg-gradient-cyan .btn-tool,.card-cyan:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-cyan .btn-tool:hover,.bg-gradient-cyan .btn-tool:hover,.card-cyan:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-cyan .bootstrap-datetimepicker-widget .table td,.card.bg-cyan .bootstrap-datetimepicker-widget .table th,.card.bg-gradient-cyan .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-cyan .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-cyan .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-cyan .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-cyan .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-cyan .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-cyan .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-gradient-cyan .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-cyan .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-cyan .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-cyan .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-cyan .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#5142ec;color:#fff}.card.bg-cyan .bootstrap-datetimepicker-widget table td.today:before,.card.bg-gradient-cyan .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-cyan .bootstrap-datetimepicker-widget table td.active,.card.bg-cyan .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-gradient-cyan .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-cyan .bootstrap-datetimepicker-widget table td.active:hover{background:#9e95f5;color:#fff}.card-white:not(.card-outline)>.card-header{background-color:#fff}.card-white:not(.card-outline)>.card-header,.card-white:not(.card-outline)>.card-header a,.card-white:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-white.card-outline{border-top:3px solid #fff}.card-white.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-white.card-outline-tabs>.card-header a.active{border-top:3px solid #fff}.bg-gradient-white .btn-tool,.bg-white .btn-tool,.card-white:not(.card-outline) .btn-tool{color:rgba(42,46,48,.8)}.bg-gradient-white .btn-tool:hover,.bg-white .btn-tool:hover,.card-white:not(.card-outline) .btn-tool:hover{color:#2a2e30}.card.bg-gradient-white .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-white .bootstrap-datetimepicker-widget .table th,.card.bg-white .bootstrap-datetimepicker-widget .table td,.card.bg-white .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-white .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-white .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-white .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-white .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-white .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-white .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-white .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-white .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-white .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-white .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#ebebeb;color:#2a2e30}.card.bg-gradient-white .bootstrap-datetimepicker-widget table td.today:before,.card.bg-white .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#2a2e30}.card.bg-gradient-white .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-white .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-white .bootstrap-datetimepicker-widget table td.active,.card.bg-white .bootstrap-datetimepicker-widget table td.active:hover{background:#fff;color:#2a2e30}.card-gray:not(.card-outline)>.card-header{background-color:#b8c2cc}.card-gray:not(.card-outline)>.card-header,.card-gray:not(.card-outline)>.card-header a,.card-gray:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-gray.card-outline{border-top:3px solid #b8c2cc}.card-gray.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-gray.card-outline-tabs>.card-header a.active{border-top:3px solid #b8c2cc}.bg-gradient-gray .btn-tool,.bg-gray .btn-tool,.card-gray:not(.card-outline) .btn-tool{color:rgba(42,46,48,.8)}.bg-gradient-gray .btn-tool:hover,.bg-gray .btn-tool:hover,.card-gray:not(.card-outline) .btn-tool:hover{color:#2a2e30}.card.bg-gradient-gray .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-gray .bootstrap-datetimepicker-widget .table th,.card.bg-gray .bootstrap-datetimepicker-widget .table td,.card.bg-gray .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-gray .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-gray .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-gray .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-gray .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-gray .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-gray .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gray .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gray .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gray .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gray .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#a0aebb;color:#2a2e30}.card.bg-gradient-gray .bootstrap-datetimepicker-widget table td.today:before,.card.bg-gray .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#2a2e30}.card.bg-gradient-gray .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-gray .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-gray .bootstrap-datetimepicker-widget table td.active,.card.bg-gray .bootstrap-datetimepicker-widget table td.active:hover{background:#d6dce1;color:#2a2e30}.card-gray-dark:not(.card-outline)>.card-header{background-color:#1e1e1e}.card-gray-dark:not(.card-outline)>.card-header,.card-gray-dark:not(.card-outline)>.card-header a{color:#fff}.card-gray-dark:not(.card-outline)>.card-header a.active{color:#2a2e30}.card-gray-dark.card-outline{border-top:3px solid #1e1e1e}.card-gray-dark.card-outline-tabs>.card-header a:hover{border-top:3px solid #dae1e7}.card-gray-dark.card-outline-tabs>.card-header a.active{border-top:3px solid #1e1e1e}.bg-gradient-gray-dark .btn-tool,.bg-gray-dark .btn-tool,.card-gray-dark:not(.card-outline) .btn-tool{color:hsla(0,0%,100%,.8)}.bg-gradient-gray-dark .btn-tool:hover,.bg-gray-dark .btn-tool:hover,.card-gray-dark:not(.card-outline) .btn-tool:hover{color:#fff}.card.bg-gradient-gray-dark .bootstrap-datetimepicker-widget .table td,.card.bg-gradient-gray-dark .bootstrap-datetimepicker-widget .table th,.card.bg-gray-dark .bootstrap-datetimepicker-widget .table td,.card.bg-gray-dark .bootstrap-datetimepicker-widget .table th{border:none}.card.bg-gradient-gray-dark .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gradient-gray-dark .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gradient-gray-dark .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gradient-gray-dark .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gradient-gray-dark .bootstrap-datetimepicker-widget table thead tr:first-child th:hover,.card.bg-gray-dark .bootstrap-datetimepicker-widget table td.day:hover,.card.bg-gray-dark .bootstrap-datetimepicker-widget table td.hour:hover,.card.bg-gray-dark .bootstrap-datetimepicker-widget table td.minute:hover,.card.bg-gray-dark .bootstrap-datetimepicker-widget table td.second:hover,.card.bg-gray-dark .bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#0a0a0a;color:#fff}.card.bg-gradient-gray-dark .bootstrap-datetimepicker-widget table td.today:before,.card.bg-gray-dark .bootstrap-datetimepicker-widget table td.today:before{border-bottom-color:#fff}.card.bg-gradient-gray-dark .bootstrap-datetimepicker-widget table td.active,.card.bg-gradient-gray-dark .bootstrap-datetimepicker-widget table td.active:hover,.card.bg-gray-dark .bootstrap-datetimepicker-widget table td.active,.card.bg-gray-dark .bootstrap-datetimepicker-widget table td.active:hover{background:#383838;color:#fff}.card{margin-bottom:3rem;border:0}.card.bg-dark .card-header{border-color:#42484b}.card.bg-dark,.card.bg-dark .card-body{color:#fff}.card.maximized-card{height:100%!important;left:0;max-height:100%!important;max-width:100%!important;position:fixed;top:0;width:100%!important;z-index:9999}.card.maximized-card.was-collapsed .card-body{display:block!important}.card.maximized-card [data-widget=collapse]{display:none}.card.maximized-card .card-footer,.card.maximized-card .card-header{border-radius:0!important}.card.collapsed-card .card-body,.card.collapsed-card .card-footer{display:none}.card .nav.flex-column>li{border-bottom:1px solid rgba(34,41,47,.125);margin:0}.card .nav.flex-column>li:last-of-type{border-bottom:0}.card.height-control .card-body{max-height:300px;overflow:auto}.card .border-right{border-right:1px solid rgba(34,41,47,.125)}.card .border-left{border-left:1px solid rgba(34,41,47,.125)}.card.card-tabs:not(.card-outline)>.card-header{border-bottom:0}.card.card-tabs:not(.card-outline)>.card-header .nav-item:first-child .nav-link{margin-left:-1px}.card.card-tabs.card-outline .nav-item{border-bottom:0}.card.card-tabs.card-outline .nav-item:first-child .nav-link{border-left:0;margin-left:0}.card.card-tabs .card-tools{margin:.3rem .5rem}.card.card-tabs:not(.expanding-card).collapsed-card .card-header,.card.card-tabs:not(.expanding-card).collapsed-card .card-header .nav-tabs{border-bottom:0}.card.card-tabs:not(.expanding-card).collapsed-card .card-header .nav-tabs .nav-item{margin-bottom:0}.card.card-tabs.expanding-card .card-header .nav-tabs .nav-item{margin-bottom:-1px}.card.card-outline-tabs{border-top:0}.card.card-outline-tabs .card-header .nav-item:first-child .nav-link{border-left:0;margin-left:0}.card.card-outline-tabs .card-header a{border-top:3px solid transparent}.card.card-outline-tabs .card-header a:hover{border-top:3px solid #dae1e7}.card.card-outline-tabs .card-header a.active:hover{margin-top:0}.card.card-outline-tabs .card-tools{margin:.5rem .5rem .3rem}.card.card-outline-tabs:not(.expanding-card).collapsed-card .card-header,.card.card-outline-tabs:not(.expanding-card).collapsed-card .card-header .nav-tabs{border-bottom:0}.card.card-outline-tabs:not(.expanding-card).collapsed-card .card-header .nav-tabs .nav-item{margin-bottom:0}.card.card-outline-tabs.expanding-card .card-header .nav-tabs .nav-item{margin-bottom:-1px}html.maximized-card{overflow:hidden}.card-header{background-color:transparent;border-bottom:0;padding:.75rem 1.25rem;position:relative;border-top-left-radius:.5rem;border-top-right-radius:.5rem}.collapsed-card .card-header{border-bottom:0}.card-header>.card-tools{float:right;margin-right:-.625rem}.card-header>.card-tools .input-group,.card-header>.card-tools .nav,.card-header>.card-tools .pagination{margin-bottom:-.3rem;margin-top:-.3rem}.card-header>.card-tools [data-toggle=tooltip]{position:relative}.card-title{float:left;font-size:1.1rem;font-weight:400;margin:0}.card-text{clear:both}.btn-tool{background:transparent;color:#adb5bd;font-size:1rem;margin:-.75rem 0;padding:.25rem .5rem}.btn-group.show .btn-tool,.btn-tool:hover{color:#4e5154}.btn-tool:focus,.show .btn-tool{box-shadow:none!important}.text-sm .card-title{font-size:1rem}.text-sm .nav-link{padding:.4rem .8rem}.card-body>.table{margin-bottom:0}.card-body>.table>thead>tr>td,.card-body>.table>thead>tr>th{border-top-width:0}.card-body .fc{margin-top:5px}.card-body .full-width-chart{margin:-19px}.card-body.p-0 .full-width-chart{margin:-9px}.chart-legend{padding-left:0;list-style:none;margin:10px 0}@media (max-width:576px){.chart-legend>li{float:left;margin-right:10px}}.card-comments{background:#babfc7}.card-comments .card-comment{border-bottom:1px solid #ededed;padding:8px 0}.card-comments .card-comment:after{display:block;clear:both;content:""}.card-comments .card-comment:last-of-type{border-bottom:0}.card-comments .card-comment:first-of-type{padding-top:0}.card-comments .card-comment img{height:1.875rem;width:1.875rem;float:left}.card-comments .comment-text{color:#7f8489;margin-left:40px}.card-comments .username{color:#4e5154;display:block;font-weight:600}.card-comments .text-muted{font-size:12px;font-weight:400}.todo-list{list-style:none;margin:0;overflow:auto;padding:0}.todo-list>li{border-radius:2px;background:#babfc7;border-left:2px solid #ededed;color:#4e5154;margin-bottom:2px;padding:10px}.todo-list>li:last-of-type{margin-bottom:0}.todo-list>li>input[type=checkbox]{margin:0 10px 0 5px}.todo-list>li .text{display:inline-block;font-weight:600;margin-left:5px}.todo-list>li .badge{font-size:.7rem;margin-left:10px}.todo-list>li .tools{color:#ea5455;display:none;float:right}.todo-list>li .tools>.fa,.todo-list>li .tools>.fab,.todo-list>li .tools>.far,.todo-list>li .tools>.fas,.todo-list>li .tools>.glyphicon,.todo-list>li .tools>.ion{cursor:pointer;margin-right:5px}.todo-list>li:hover .tools{display:inline-block}.todo-list>li.done{color:#697582}.todo-list>li.done .text{font-weight:500;text-decoration:line-through}.todo-list>li.done .badge{background:#adb5bd!important}.todo-list .primary{border-left-color:#586cb1}.todo-list .secondary{border-left-color:#b8c2cc}.todo-list .success{border-left-color:#21b978}.todo-list .info{border-left-color:#4277cf}.todo-list .warning{border-left-color:#dda451}.todo-list .danger{border-left-color:#ea5455}.todo-list .light{border-left-color:#f7f7f9}.todo-list .dark{border-left-color:#22292f}.todo-list .lightblue{border-left-color:#3c8dbc}.todo-list .navy{border-left-color:#001f3f}.todo-list .olive{border-left-color:#3d9970}.todo-list .lime{border-left-color:#01ff70}.todo-list .fuchsia{border-left-color:#f012be}.todo-list .maroon{border-left-color:#d81b60}.todo-list .blue{border-left-color:#3085d6}.todo-list .indigo{border-left-color:#5c6bc6}.todo-list .purple{border-left-color:#6f42c1}.todo-list .pink{border-left-color:#ff8acc}.todo-list .red{border-left-color:#ea5455}.todo-list .orange{border-left-color:#dda451}.todo-list .yellow{border-left-color:#edc30e}.todo-list .green{border-left-color:#21b978}.todo-list .teal{border-left-color:#20c997}.todo-list .cyan{border-left-color:#7367f0}.todo-list .white{border-left-color:#fff}.todo-list .gray{border-left-color:#b8c2cc}.todo-list .gray-dark{border-left-color:#1e1e1e}.todo-list .handle{cursor:move;display:inline-block;margin:0 5px}.card-input{max-width:200px}.card-default .nav-item:first-child .nav-link{border-left:0}.modal-dialog .overlay{background-color:#22292f;display:block;height:100%;left:0;opacity:.7;position:absolute;top:0;width:100%;z-index:1052}.modal-content.bg-warning .modal-footer,.modal-content.bg-warning .modal-header{border-color:#1e1e1e}.modal-content.bg-danger .close,.modal-content.bg-danger .mailbox-attachment-close,.modal-content.bg-info .close,.modal-content.bg-info .mailbox-attachment-close,.modal-content.bg-primary .close,.modal-content.bg-primary .mailbox-attachment-close,.modal-content.bg-secondary .close,.modal-content.bg-secondary .mailbox-attachment-close,.modal-content.bg-success .close,.modal-content.bg-success .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toasts-top-right{position:absolute;right:0;top:0;z-index:1040}.toasts-top-right.fixed{position:fixed}.toasts-top-left{left:0;position:absolute;top:0;z-index:1040}.toasts-top-left.fixed{position:fixed}.toasts-bottom-right{bottom:0;position:absolute;right:0;z-index:1040}.toasts-bottom-right.fixed{position:fixed}.toasts-bottom-left{bottom:0;left:0;position:absolute;z-index:1040}.toasts-bottom-left.fixed{position:fixed}.toast.bg-primary{background:rgba(88,108,177,.9)!important}.toast.bg-primary .close,.toast.bg-primary .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-primary .toast-header{background:rgba(88,108,177,.85);color:#fff}.toast.bg-secondary{background:rgba(184,194,204,.9)!important}.toast.bg-secondary .toast-header{background:rgba(184,194,204,.85);color:#2a2e30}.toast.bg-success{background:rgba(33,185,120,.9)!important}.toast.bg-success .close,.toast.bg-success .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-success .toast-header{background:rgba(33,185,120,.85);color:#fff}.toast.bg-info{background:rgba(66,119,207,.9)!important}.toast.bg-info .close,.toast.bg-info .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-info .toast-header{background:rgba(66,119,207,.85);color:#fff}.toast.bg-warning{background:rgba(221,164,81,.9)!important}.toast.bg-warning .toast-header{background:rgba(221,164,81,.85);color:#2a2e30}.toast.bg-danger{background:rgba(234,84,85,.9)!important}.toast.bg-danger .close,.toast.bg-danger .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-danger .toast-header{background:rgba(234,84,85,.85);color:#fff}.toast.bg-light{background:rgba(247,247,249,.9)!important}.toast.bg-light .toast-header{background:rgba(247,247,249,.85);color:#2a2e30}.toast.bg-dark{background:rgba(34,41,47,.9)!important}.toast.bg-dark .close,.toast.bg-dark .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-dark .toast-header{background:rgba(34,41,47,.85);color:#fff}.toast.bg-lightblue{background:rgba(60,141,188,.9)!important}.toast.bg-lightblue .close,.toast.bg-lightblue .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-lightblue .toast-header{background:rgba(60,141,188,.85);color:#fff}.toast.bg-navy{background:rgba(0,31,63,.9)!important}.toast.bg-navy .close,.toast.bg-navy .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-navy .toast-header{background:rgba(0,31,63,.85);color:#fff}.toast.bg-olive{background:rgba(61,153,112,.9)!important}.toast.bg-olive .close,.toast.bg-olive .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-olive .toast-header{background:rgba(61,153,112,.85);color:#fff}.toast.bg-lime{background:rgba(1,255,112,.9)!important}.toast.bg-lime .toast-header{background:rgba(1,255,112,.85);color:#2a2e30}.toast.bg-fuchsia{background:rgba(240,18,190,.9)!important}.toast.bg-fuchsia .close,.toast.bg-fuchsia .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-fuchsia .toast-header{background:rgba(240,18,190,.85);color:#fff}.toast.bg-maroon{background:rgba(216,27,96,.9)!important}.toast.bg-maroon .close,.toast.bg-maroon .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-maroon .toast-header{background:rgba(216,27,96,.85);color:#fff}.toast.bg-blue{background:rgba(48,133,214,.9)!important}.toast.bg-blue .close,.toast.bg-blue .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-blue .toast-header{background:rgba(48,133,214,.85);color:#fff}.toast.bg-indigo{background:rgba(92,107,198,.9)!important}.toast.bg-indigo .close,.toast.bg-indigo .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-indigo .toast-header{background:rgba(92,107,198,.85);color:#fff}.toast.bg-purple{background:rgba(111,66,193,.9)!important}.toast.bg-purple .close,.toast.bg-purple .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-purple .toast-header{background:rgba(111,66,193,.85);color:#fff}.toast.bg-pink{background:rgba(255,138,204,.9)!important}.toast.bg-pink .toast-header{background:rgba(255,138,204,.85);color:#2a2e30}.toast.bg-red{background:rgba(234,84,85,.9)!important}.toast.bg-red .close,.toast.bg-red .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-red .toast-header{background:rgba(234,84,85,.85);color:#fff}.toast.bg-orange{background:rgba(221,164,81,.9)!important}.toast.bg-orange .toast-header{background:rgba(221,164,81,.85);color:#2a2e30}.toast.bg-yellow{background:rgba(237,195,14,.9)!important}.toast.bg-yellow .toast-header{background:rgba(237,195,14,.85);color:#2a2e30}.toast.bg-green{background:rgba(33,185,120,.9)!important}.toast.bg-green .close,.toast.bg-green .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-green .toast-header{background:rgba(33,185,120,.85);color:#fff}.toast.bg-teal{background:rgba(32,201,151,.9)!important}.toast.bg-teal .close,.toast.bg-teal .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-teal .toast-header{background:rgba(32,201,151,.85);color:#fff}.toast.bg-cyan{background:rgba(115,103,240,.9)!important}.toast.bg-cyan .close,.toast.bg-cyan .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-cyan .toast-header{background:rgba(115,103,240,.85);color:#fff}.toast.bg-white{background:hsla(0,0%,100%,.9)!important}.toast.bg-white .toast-header{background:hsla(0,0%,100%,.85);color:#2a2e30}.toast.bg-gray{background:rgba(184,194,204,.9)!important}.toast.bg-gray .toast-header{background:rgba(184,194,204,.85);color:#2a2e30}.toast.bg-gray-dark{background:rgba(30,30,30,.9)!important}.toast.bg-gray-dark .close,.toast.bg-gray-dark .mailbox-attachment-close{color:#fff;text-shadow:0 1px 0 #000}.toast.bg-gray-dark .toast-header{background:rgba(30,30,30,.85);color:#fff}.btn{border-width:1px}.btn.disabled,.btn:disabled{cursor:not-allowed}.btn.btn-flat{border-radius:0;border-width:1px;box-shadow:none}.btn.btn-file{overflow:hidden;position:relative}.btn.btn-file>input[type=file]{background:#fff;cursor:inherit;display:block;font-size:100px;min-height:100%;min-width:100%;opacity:0;outline:none;position:absolute;right:0;text-align:right;top:0}.text-sm .btn{font-size:1rem!important}.btn-default{background-color:#babfc7;border-color:#babfc7;color:#444}.btn-default.hover,.btn-default:active,.btn-default:hover{background-color:#acb2bc;color:#2b2b2b}.btn-app{border-radius:3px;background-color:#babfc7;border:1px solid #ddd;color:#b8c2cc;font-size:12px;height:60px;margin:0 0 10px 10px;min-width:80px;padding:15px 5px;position:relative;text-align:center}.btn-app>.fa,.btn-app>.fab,.btn-app>.far,.btn-app>.fas,.btn-app>.glyphicon,.btn-app>.ion{display:block;font-size:20px}.btn-app:hover{background:#babfc7;border-color:#aaa;color:#444}.btn-app>.badge{font-size:10px;font-weight:400;position:absolute;right:-10px;top:-3px}.btn-xs{padding:.125rem .25rem;font-size:.75rem;border-radius:.15rem}.callout{border-radius:.5rem;background-color:#fff;border:1px solid #dae1e7;border-left:5px solid #ededed;margin-bottom:3rem;padding:1rem}.callout a{color:#4e5154;text-decoration:underline}.callout a:hover{color:#ededed}.callout p:last-child{margin-bottom:0}.callout.callout-danger{border-left-color:#e42728}.callout.callout-warning{border-left-color:#d28d29}.callout.callout-info{border-left-color:#2d5fb1}.callout.callout-success{border-left-color:#198e5c}.alert .icon{margin-right:10px}.alert .close,.alert .mailbox-attachment-close{color:#22292f;opacity:.2}.alert .close:hover,.alert .mailbox-attachment-close:hover{opacity:.5}.alert a{color:#fff;text-decoration:underline}.alert-primary{color:#fff;background:#586cb1;border-color:#4c60a3}.alert-default-primary{color:#3e4c73;background-color:#dee2ef;border-color:#d0d6e9}.alert-default-primary hr{border-top-color:#bfc7e1}.alert-default-primary .alert-link{color:#2c3652}.alert-secondary{color:#2a2e30;background:#b8c2cc;border-color:#a9b5c1}.alert-default-secondary{color:#707981;background-color:#f1f3f5;border-color:#ebeef1}.alert-default-secondary hr{border-top-color:#dce1e7}.alert-default-secondary .alert-link{color:#585f66}.alert-success{color:#fff;background:#21b978;border-color:#1da36a}.alert-default-success{color:#217455;background-color:#d3f1e4;border-color:#c1ebd9}.alert-default-success hr{border-top-color:#aee5cd}.alert-default-success .alert-link{color:#164c38}.alert-info{color:#fff;background:#4277cf;border-color:#3269c5}.alert-default-info{color:#335282;background-color:#d9e4f5;border-color:#cad9f2}.alert-default-info hr{border-top-color:#b6caed}.alert-default-info .alert-link{color:#253b5d}.alert-warning{color:#2a2e30;background:#dda451;border-color:#d9993c}.alert-default-warning{color:#836941;background-color:#f8eddc;border-color:#f5e6ce}.alert-default-warning hr{border-top-color:#f1dbb9}.alert-default-warning .alert-link{color:#614e30}.alert-danger{color:#fff;background:#ea5455;border-color:#e73d3e}.alert-default-danger{color:#8a3f43;background-color:#fbdddd;border-color:#f9cfcf}.alert-default-danger hr{border-top-color:#f6b8b8}.alert-default-danger .alert-link{color:#672f32}.alert-light{color:#2a2e30;background:#f7f7f9;border-color:#e8e8ee}.alert-default-light{color:#919498;background-color:#fdfdfe;border-color:#fdfdfd}.alert-default-light hr{border-top-color:#f0f0f0}.alert-default-light .alert-link{color:#777a7f}.alert-dark{color:#fff;background:#22292f;border-color:#171c20}.alert-default-dark{color:#22292f;background-color:#d3d4d5;border-color:#c1c3c5}.alert-default-dark hr{border-top-color:#b4b6b9}.alert-default-dark .alert-link{color:#0d0f11}.table:not(.table-dark){color:inherit}.table.table-head-fixed thead tr:first-child th{background-color:#fff;border-bottom:0;box-shadow:inset 0 1px 0 #eff1f7,inset 0 -1px 0 #eff1f7;position:-webkit-sticky;position:sticky;top:0;z-index:10}.table.table-head-fixed.table-dark thead tr:first-child th{background-color:#1e1e1e;box-shadow:inset 0 1px 0 #313131,inset 0 -1px 0 #313131}.table.no-border,.table.no-border td,.table.no-border th{border:0}.table.text-center,.table.text-center td,.table.text-center th{text-align:center}.table.table-valign-middle tbody>tr>td,.table.table-valign-middle tbody>tr>th,.table.table-valign-middle thead>tr>td,.table.table-valign-middle thead>tr>th{vertical-align:middle}.card-body.p-0 .table tbody>tr>td:first-of-type,.card-body.p-0 .table tbody>tr>th:first-of-type,.card-body.p-0 .table thead>tr>td:first-of-type,.card-body.p-0 .table thead>tr>th:first-of-type{padding-left:3.5rem}.card-body.p-0 .table tbody>tr>td:last-of-type,.card-body.p-0 .table tbody>tr>th:last-of-type,.card-body.p-0 .table thead>tr>td:last-of-type,.card-body.p-0 .table thead>tr>th:last-of-type{padding-right:3.5rem}.carousel-control.left,.carousel-control.right{background-image:none}.carousel-control>.fa,.carousel-control>.fab,.carousel-control>.far,.carousel-control>.fas,.carousel-control>.glyphicon,.carousel-control>.ion{display:inline-block;font-size:40px;margin-top:-20px;position:absolute;top:50%;z-index:5}.small-box{border-radius:.5rem;display:block;margin-bottom:20px;position:relative}.small-box>.inner{padding:10px}.small-box>.small-box-footer{background:rgba(34,41,47,.1);color:hsla(0,0%,100%,.8);display:block;padding:3px 0;position:relative;text-align:center;text-decoration:none;z-index:10}.small-box>.small-box-footer:hover{background:rgba(34,41,47,.15);color:#fff}.small-box h3{font-size:2.2rem;font-weight:700;margin:0 0 10px;padding:0;white-space:nowrap}@media (min-width:992px){.col-lg-2 .small-box h3,.col-lg-3 .small-box h3,.col-md-2 .small-box h3,.col-md-3 .small-box h3,.col-xl-2 .small-box h3,.col-xl-3 .small-box h3{font-size:1.6rem}}@media (min-width:1200px){.col-lg-2 .small-box h3,.col-lg-3 .small-box h3,.col-md-2 .small-box h3,.col-md-3 .small-box h3,.col-xl-2 .small-box h3,.col-xl-3 .small-box h3{font-size:2.2rem}}.small-box p{font-size:1rem}.small-box p>small{color:#babfc7;display:block;font-size:.9rem;margin-top:5px}.small-box h3,.small-box p{z-index:5}.small-box .icon{color:rgba(34,41,47,.15);z-index:0}.small-box .icon>i{font-size:90px;position:absolute;right:15px;top:15px;transition:all .3s linear}.small-box .icon>i.fa,.small-box .icon>i.fab,.small-box .icon>i.far,.small-box .icon>i.fas,.small-box .icon>i.glyphicon,.small-box .icon>i.ion{font-size:70px;top:20px}.small-box:hover{text-decoration:none}.small-box:hover .icon>i{font-size:95px}.small-box:hover .icon>i.fa,.small-box:hover .icon>i.fab,.small-box:hover .icon>i.far,.small-box:hover .icon>i.fas,.small-box:hover .icon>i.glyphicon,.small-box:hover .icon>i.ion{font-size:75px}@media (max-width:767.98px){.small-box{text-align:center}.small-box .icon{display:none}.small-box p{font-size:12px}}.info-box{border-radius:.5rem;background:#fff;display:flex;margin-bottom:3rem;min-height:80px;padding:.5rem;position:relative}.info-box .progress{background-color:rgba(34,41,47,.125);height:2px;margin:5px 0}.info-box .progress .progress-bar{background-color:#fff}.info-box .info-box-icon{border-radius:.5rem;align-items:center;display:flex;font-size:1.875rem;justify-content:center;text-align:center;width:70px}.info-box .info-box-icon>img{max-width:100%}.info-box .info-box-content{flex:1;padding:5px 10px}.info-box .info-box-number{display:block;font-weight:700}.info-box .info-box-text,.info-box .progress-description{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.info-box .info-box .bg-gradient-primary,.info-box .info-box .bg-primary{color:#fff}.info-box .info-box .bg-gradient-primary .progress-bar,.info-box .info-box .bg-primary .progress-bar{background-color:#fff}.info-box .info-box .bg-gradient-secondary,.info-box .info-box .bg-secondary{color:#2a2e30}.info-box .info-box .bg-gradient-secondary .progress-bar,.info-box .info-box .bg-secondary .progress-bar{background-color:#2a2e30}.info-box .info-box .bg-gradient-success,.info-box .info-box .bg-success{color:#fff}.info-box .info-box .bg-gradient-success .progress-bar,.info-box .info-box .bg-success .progress-bar{background-color:#fff}.info-box .info-box .bg-gradient-info,.info-box .info-box .bg-info{color:#fff}.info-box .info-box .bg-gradient-info .progress-bar,.info-box .info-box .bg-info .progress-bar{background-color:#fff}.info-box .info-box .bg-gradient-warning,.info-box .info-box .bg-warning{color:#2a2e30}.info-box .info-box .bg-gradient-warning .progress-bar,.info-box .info-box .bg-warning .progress-bar{background-color:#2a2e30}.info-box .info-box .bg-danger,.info-box .info-box .bg-gradient-danger{color:#fff}.info-box .info-box .bg-danger .progress-bar,.info-box .info-box .bg-gradient-danger .progress-bar{background-color:#fff}.info-box .info-box .bg-gradient-light,.info-box .info-box .bg-light{color:#2a2e30}.info-box .info-box .bg-gradient-light .progress-bar,.info-box .info-box .bg-light .progress-bar{background-color:#2a2e30}.info-box .info-box .bg-dark,.info-box .info-box .bg-gradient-dark{color:#fff}.info-box .info-box .bg-dark .progress-bar,.info-box .info-box .bg-gradient-dark .progress-bar{background-color:#fff}.info-box .info-box-more{display:block}.info-box .progress-description{margin:0}@media (min-width:768px){.col-lg-2 .info-box .progress-description,.col-lg-3 .info-box .progress-description,.col-md-2 .info-box .progress-description,.col-md-3 .info-box .progress-description,.col-xl-2 .info-box .progress-description,.col-xl-3 .info-box .progress-description{display:none}}@media (min-width:992px){.col-lg-2 .info-box .progress-description,.col-lg-3 .info-box .progress-description,.col-md-2 .info-box .progress-description,.col-md-3 .info-box .progress-description,.col-xl-2 .info-box .progress-description,.col-xl-3 .info-box .progress-description{font-size:.75rem;display:block}}@media (min-width:1200px){.col-lg-2 .info-box .progress-description,.col-lg-3 .info-box .progress-description,.col-md-2 .info-box .progress-description,.col-md-3 .info-box .progress-description,.col-xl-2 .info-box .progress-description,.col-xl-3 .info-box .progress-description{font-size:1rem;display:block}}.timeline{margin:0 0 45px;padding:0;position:relative}.timeline:before{border-radius:.5rem;background:#dae1e7;bottom:0;content:"";left:31px;margin:0;position:absolute;top:0;width:4px}.timeline>div{margin-bottom:15px;margin-right:10px;position:relative}.timeline>div:after,.timeline>div:before{content:"";display:table}.timeline>div>.timeline-item{border-radius:.5rem;background:#fff;color:#4e5154;margin-left:60px;margin-right:15px;margin-top:0;padding:0;position:relative}.timeline>div>.timeline-item>.time{color:#999;float:right;font-size:12px;padding:10px}.timeline>div>.timeline-item>.timeline-header{border-bottom:1px solid rgba(34,41,47,.125);color:#4e5154;font-size:16px;line-height:1.1;margin:0;padding:10px}.timeline>div>.timeline-item>.timeline-header>a{font-weight:600}.timeline>div>.timeline-item>.timeline-body,.timeline>div>.timeline-item>.timeline-footer{padding:10px}.timeline>div>.timeline-item>.timeline-body>img{margin:10px}.timeline>div>.timeline-item>.timeline-body>dl,.timeline>div>.timeline-item>.timeline-body ol,.timeline>div>.timeline-item>.timeline-body ul{margin:0}.timeline>div>.timeline-item>.timeline-footer>a{color:#fff}.timeline>div>.fa,.timeline>div>.fab,.timeline>div>.far,.timeline>div>.fas,.timeline>div>.glyphicon,.timeline>div>.ion{background:#adb5bd;border-radius:50%;font-size:15px;height:30px;left:18px;line-height:30px;position:absolute;text-align:center;top:0;width:30px}.timeline>.time-label>span{border-radius:4px;background-color:#fff;display:inline-block;font-weight:600;padding:5px}.timeline-inverse>div>.timeline-item{background:#babfc7;border:1px solid #dae1e7}.timeline-inverse>div>.timeline-item>.timeline-header{border-bottom-color:#dae1e7}.products-list{list-style:none;margin:0;padding:0}.products-list>.item{border-radius:.5rem;background:#fff;padding:10px 0}.products-list>.item:after{display:block;clear:both;content:""}.products-list .product-img{float:left}.products-list .product-img img{height:50px;width:50px}.products-list .product-info{margin-left:60px}.products-list .product-title{font-weight:600}.products-list .product-description{color:#b8c2cc;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.product-list-in-card>.item{border-radius:0;border-bottom:1px solid rgba(34,41,47,.125)}.product-list-in-card>.item:last-of-type{border-bottom-width:0}.direct-chat .card-body{overflow-x:hidden;padding:0;position:relative}.direct-chat.chat-pane-open .direct-chat-contacts{transform:translate(0)}.direct-chat.timestamp-light .direct-chat-timestamp{color:#42484b}.direct-chat.timestamp-dark .direct-chat-timestamp{color:#ccc}.direct-chat-messages{transform:translate(0);height:250px;overflow:auto;padding:10px}.direct-chat-msg,.direct-chat-text{display:block}.direct-chat-msg{margin-bottom:10px}.direct-chat-msg:after{display:block;clear:both;content:""}.direct-chat-contacts,.direct-chat-messages{transition:transform .5s ease-in-out}.direct-chat-text{border-radius:.6rem;background:#d2d6de;border:1px solid #d2d6de;color:#444;margin:5px 0 0 50px;padding:5px 10px;position:relative}.direct-chat-text:after,.direct-chat-text:before{border:solid transparent;border-right:solid #d2d6de;content:" ";height:0;pointer-events:none;position:absolute;right:100%;top:15px;width:0}.direct-chat-text:after{border-width:5px;margin-top:-5px}.direct-chat-text:before{border-width:6px;margin-top:-6px}.right .direct-chat-text{margin-left:0;margin-right:50px}.right .direct-chat-text:after,.right .direct-chat-text:before{border-left-color:#d2d6de;border-right-color:transparent;left:100%;right:auto}.direct-chat-img{border-radius:50%;float:left;height:40px;width:40px}.right .direct-chat-img{float:right}.direct-chat-infos{display:block;font-size:1rem;margin-bottom:2px}.direct-chat-name{font-weight:600}.direct-chat-timestamp{color:#697582}.direct-chat-contacts-open .direct-chat-contacts{transform:translate(0)}.direct-chat-contacts{transform:translate(101%);background:#22292f;bottom:0;color:#fff;height:250px;overflow:auto;position:absolute;top:0;width:100%}.direct-chat-contacts-light{background:#f7f7f9}.direct-chat-contacts-light .contacts-list-name{color:#4e5154}.direct-chat-contacts-light .contacts-list-date{color:#b8c2cc}.direct-chat-contacts-light .contacts-list-msg{color:#9aa9b7}.contacts-list{padding-left:0;list-style:none}.contacts-list>li{border-bottom:1px solid rgba(34,41,47,.2);margin:0;padding:10px}.contacts-list>li:after{display:block;clear:both;content:""}.contacts-list>li:last-of-type{border-bottom:0}.contacts-list-img{border-radius:50%;float:left;width:40px}.contacts-list-info{color:#fff;margin-left:45px}.contacts-list-name,.contacts-list-status{display:block}.contacts-list-name{font-weight:600}.contacts-list-status{font-size:1rem}.contacts-list-date{color:#636363;font-weight:400}.contacts-list-msg{color:#4a4a4a}.direct-chat-primary .right>.direct-chat-text{background:#586cb1;border-color:#586cb1;color:#fff}.direct-chat-primary .right>.direct-chat-text:after,.direct-chat-primary .right>.direct-chat-text:before{border-left-color:#586cb1}.direct-chat-secondary .right>.direct-chat-text{background:#b8c2cc;border-color:#b8c2cc;color:#2a2e30}.direct-chat-secondary .right>.direct-chat-text:after,.direct-chat-secondary .right>.direct-chat-text:before{border-left-color:#b8c2cc}.direct-chat-success .right>.direct-chat-text{background:#21b978;border-color:#21b978;color:#fff}.direct-chat-success .right>.direct-chat-text:after,.direct-chat-success .right>.direct-chat-text:before{border-left-color:#21b978}.direct-chat-info .right>.direct-chat-text{background:#4277cf;border-color:#4277cf;color:#fff}.direct-chat-info .right>.direct-chat-text:after,.direct-chat-info .right>.direct-chat-text:before{border-left-color:#4277cf}.direct-chat-warning .right>.direct-chat-text{background:#dda451;border-color:#dda451;color:#2a2e30}.direct-chat-warning .right>.direct-chat-text:after,.direct-chat-warning .right>.direct-chat-text:before{border-left-color:#dda451}.direct-chat-danger .right>.direct-chat-text{background:#ea5455;border-color:#ea5455;color:#fff}.direct-chat-danger .right>.direct-chat-text:after,.direct-chat-danger .right>.direct-chat-text:before{border-left-color:#ea5455}.direct-chat-light .right>.direct-chat-text{background:#f7f7f9;border-color:#f7f7f9;color:#2a2e30}.direct-chat-light .right>.direct-chat-text:after,.direct-chat-light .right>.direct-chat-text:before{border-left-color:#f7f7f9}.direct-chat-dark .right>.direct-chat-text{background:#22292f;border-color:#22292f;color:#fff}.direct-chat-dark .right>.direct-chat-text:after,.direct-chat-dark .right>.direct-chat-text:before{border-left-color:#22292f}.direct-chat-lightblue .right>.direct-chat-text{background:#3c8dbc;border-color:#3c8dbc;color:#fff}.direct-chat-lightblue .right>.direct-chat-text:after,.direct-chat-lightblue .right>.direct-chat-text:before{border-left-color:#3c8dbc}.direct-chat-navy .right>.direct-chat-text{background:#001f3f;border-color:#001f3f;color:#fff}.direct-chat-navy .right>.direct-chat-text:after,.direct-chat-navy .right>.direct-chat-text:before{border-left-color:#001f3f}.direct-chat-olive .right>.direct-chat-text{background:#3d9970;border-color:#3d9970;color:#fff}.direct-chat-olive .right>.direct-chat-text:after,.direct-chat-olive .right>.direct-chat-text:before{border-left-color:#3d9970}.direct-chat-lime .right>.direct-chat-text{background:#01ff70;border-color:#01ff70;color:#2a2e30}.direct-chat-lime .right>.direct-chat-text:after,.direct-chat-lime .right>.direct-chat-text:before{border-left-color:#01ff70}.direct-chat-fuchsia .right>.direct-chat-text{background:#f012be;border-color:#f012be;color:#fff}.direct-chat-fuchsia .right>.direct-chat-text:after,.direct-chat-fuchsia .right>.direct-chat-text:before{border-left-color:#f012be}.direct-chat-maroon .right>.direct-chat-text{background:#d81b60;border-color:#d81b60;color:#fff}.direct-chat-maroon .right>.direct-chat-text:after,.direct-chat-maroon .right>.direct-chat-text:before{border-left-color:#d81b60}.direct-chat-blue .right>.direct-chat-text{background:#3085d6;border-color:#3085d6;color:#fff}.direct-chat-blue .right>.direct-chat-text:after,.direct-chat-blue .right>.direct-chat-text:before{border-left-color:#3085d6}.direct-chat-indigo .right>.direct-chat-text{background:#5c6bc6;border-color:#5c6bc6;color:#fff}.direct-chat-indigo .right>.direct-chat-text:after,.direct-chat-indigo .right>.direct-chat-text:before{border-left-color:#5c6bc6}.direct-chat-purple .right>.direct-chat-text{background:#6f42c1;border-color:#6f42c1;color:#fff}.direct-chat-purple .right>.direct-chat-text:after,.direct-chat-purple .right>.direct-chat-text:before{border-left-color:#6f42c1}.direct-chat-pink .right>.direct-chat-text{background:#ff8acc;border-color:#ff8acc;color:#2a2e30}.direct-chat-pink .right>.direct-chat-text:after,.direct-chat-pink .right>.direct-chat-text:before{border-left-color:#ff8acc}.direct-chat-red .right>.direct-chat-text{background:#ea5455;border-color:#ea5455;color:#fff}.direct-chat-red .right>.direct-chat-text:after,.direct-chat-red .right>.direct-chat-text:before{border-left-color:#ea5455}.direct-chat-orange .right>.direct-chat-text{background:#dda451;border-color:#dda451;color:#2a2e30}.direct-chat-orange .right>.direct-chat-text:after,.direct-chat-orange .right>.direct-chat-text:before{border-left-color:#dda451}.direct-chat-yellow .right>.direct-chat-text{background:#edc30e;border-color:#edc30e;color:#2a2e30}.direct-chat-yellow .right>.direct-chat-text:after,.direct-chat-yellow .right>.direct-chat-text:before{border-left-color:#edc30e}.direct-chat-green .right>.direct-chat-text{background:#21b978;border-color:#21b978;color:#fff}.direct-chat-green .right>.direct-chat-text:after,.direct-chat-green .right>.direct-chat-text:before{border-left-color:#21b978}.direct-chat-teal .right>.direct-chat-text{background:#20c997;border-color:#20c997;color:#fff}.direct-chat-teal .right>.direct-chat-text:after,.direct-chat-teal .right>.direct-chat-text:before{border-left-color:#20c997}.direct-chat-cyan .right>.direct-chat-text{background:#7367f0;border-color:#7367f0;color:#fff}.direct-chat-cyan .right>.direct-chat-text:after,.direct-chat-cyan .right>.direct-chat-text:before{border-left-color:#7367f0}.direct-chat-white .right>.direct-chat-text{background:#fff;border-color:#fff;color:#2a2e30}.direct-chat-white .right>.direct-chat-text:after,.direct-chat-white .right>.direct-chat-text:before{border-left-color:#fff}.direct-chat-gray .right>.direct-chat-text{background:#b8c2cc;border-color:#b8c2cc;color:#2a2e30}.direct-chat-gray .right>.direct-chat-text:after,.direct-chat-gray .right>.direct-chat-text:before{border-left-color:#b8c2cc}.direct-chat-gray-dark .right>.direct-chat-text{background:#1e1e1e;border-color:#1e1e1e;color:#fff}.direct-chat-gray-dark .right>.direct-chat-text:after,.direct-chat-gray-dark .right>.direct-chat-text:before{border-left-color:#1e1e1e}.users-list{padding-left:0;list-style:none}.users-list>li{float:left;padding:10px;text-align:center;width:25%}.users-list>li img{border-radius:50%;height:auto;max-width:100%}.users-list>li>a:hover,.users-list>li>a:hover .users-list-name{color:#999}.users-list-date,.users-list-name{display:block}.users-list-name{color:#4e5154;font-size:1rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.users-list-date{color:#748290;font-size:12px}.card-widget{border:0;position:relative}.widget-user .widget-user-header{border-top-left-radius:.5rem;border-top-right-radius:.5rem;height:135px;padding:1rem;text-align:center}.widget-user .widget-user-username{font-size:25px;font-weight:300;margin-bottom:0;margin-top:0;text-shadow:0 1px 1px rgba(34,41,47,.2)}.widget-user .widget-user-desc{margin-top:0}.widget-user .widget-user-image{left:50%;margin-left:-45px;position:absolute;top:80px}.widget-user .widget-user-image>img{border:3px solid #fff;height:auto;width:90px}.widget-user .card-footer{padding-top:50px}.widget-user-2 .widget-user-header{border-top-left-radius:.5rem;border-top-right-radius:.5rem;padding:1rem}.widget-user-2 .widget-user-username{font-size:25px;font-weight:300;margin-bottom:5px;margin-top:5px}.widget-user-2 .widget-user-desc{margin-top:0}.widget-user-2 .widget-user-desc,.widget-user-2 .widget-user-username{margin-left:75px}.widget-user-2 .widget-user-image>img{float:left;height:auto;width:65px}.mailbox-messages>.table{margin:0}.mailbox-controls{padding:5px}.mailbox-controls.with-border,.mailbox-read-info{border-bottom:1px solid rgba(34,41,47,.125)}.mailbox-read-info{padding:10px}.mailbox-read-info h3{font-size:20px;margin:0}.mailbox-read-info h5{margin:0;padding:5px 0 0}.mailbox-read-time{color:#999;font-size:13px}.mailbox-read-message{padding:10px}.mailbox-attachments{padding-left:0;list-style:none}.mailbox-attachments li{border:1px solid #eee;float:left;margin-bottom:10px;margin-right:10px;width:200px}.mailbox-attachment-name{color:#666;font-weight:700}.mailbox-attachment-icon,.mailbox-attachment-info,.mailbox-attachment-size{display:block}.mailbox-attachment-info{background:#babfc7;padding:10px}.mailbox-attachment-size{color:#999;font-size:12px}.mailbox-attachment-size>span{display:inline-block;padding-top:.75rem}.mailbox-attachment-icon{color:#666;font-size:65px;max-height:132.5px;padding:20px 10px;text-align:center}.mailbox-attachment-icon.has-img{padding:0}.mailbox-attachment-icon.has-img>img{height:auto;max-width:100%}.lockscreen{background:#ededed}.lockscreen .lockscreen-name{font-weight:600;text-align:center}.lockscreen-logo{font-size:35px;font-weight:300;margin-bottom:25px;text-align:center}.lockscreen-logo a{color:#4e5154}.lockscreen-wrapper{margin:10% auto 0;max-width:400px}.lockscreen-item{border-radius:4px;background:#fff;margin:10px auto 30px;padding:0;position:relative;width:290px}.lockscreen-image{border-radius:50%;background:#fff;left:-10px;padding:5px;position:absolute;top:-25px;z-index:10}.lockscreen-image>img{border-radius:50%;height:70px;width:70px}.lockscreen-credentials{margin-left:70px}.lockscreen-credentials .form-control{border:0}.lockscreen-credentials .btn{background-color:#fff;border:0;padding:0 10px}.lockscreen-footer{margin-top:10px}.login-logo,.register-logo{font-size:2.1rem;font-weight:300;margin-bottom:.9rem;text-align:center}.login-logo a,.register-logo a{color:#4e5154}.login-page,.register-page{align-items:center;background:#ededed;display:flex;flex-direction:column;height:100vh;justify-content:center}.login-box,.register-box{width:360px}@media (max-width:576px){.login-box,.register-box{margin-top:.5rem;width:90%}}.login-card-body,.register-card-body{background:#fff;border-top:0;color:#666;padding:20px}.login-card-body .input-group .form-control,.register-card-body .input-group .form-control{border-right:0}.login-card-body .input-group .form-control:focus,.register-card-body .input-group .form-control:focus{box-shadow:none}.login-card-body .input-group .form-control:focus~.input-group-append .input-group-text,.register-card-body .input-group .form-control:focus~.input-group-append .input-group-text{border-color:#586cb1}.login-card-body .input-group .form-control.is-valid:focus,.register-card-body .input-group .form-control.is-valid:focus{box-shadow:none}.login-card-body .input-group .form-control.is-valid~.input-group-append .input-group-text,.register-card-body .input-group .form-control.is-valid~.input-group-append .input-group-text{border-color:#21b978}.login-card-body .input-group .form-control.is-invalid:focus,.register-card-body .input-group .form-control.is-invalid:focus{box-shadow:none}.login-card-body .input-group .form-control.is-invalid~.input-group-append .input-group-text,.register-card-body .input-group .form-control.is-invalid~.input-group-append .input-group-text{border-color:#ea5455}.login-card-body .input-group .input-group-text,.register-card-body .input-group .input-group-text{background-color:transparent;border-bottom-right-radius:.5rem;border-left:0;border-top-right-radius:.5rem;color:#777;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.login-box-msg,.register-box-msg{margin:0;padding:0 20px 20px;text-align:center}.social-auth-links{margin:10px 0}.error-page{margin:20px auto 0;width:600px}@media (max-width:767.98px){.error-page{width:100%}}.error-page>.headline{float:left;font-size:100px;font-weight:300}@media (max-width:767.98px){.error-page>.headline{float:none;text-align:center}}.error-page>.error-content{display:block;margin-left:190px}@media (max-width:767.98px){.error-page>.error-content{margin-left:0}}.error-page>.error-content>h3{font-size:25px;font-weight:300}@media (max-width:767.98px){.error-page>.error-content>h3{text-align:center}}.invoice{background:#fff;border:1px solid rgba(34,41,47,.125);position:relative}.invoice-title{margin-top:0}.profile-user-img{border:3px solid #adb5bd;margin:0 auto;padding:3px;width:100px}.profile-username{font-size:21px;margin-top:5px}.post{border-bottom:1px solid #adb5bd;color:#666;margin-bottom:15px;padding-bottom:15px}.post:last-of-type{border-bottom:0;margin-bottom:0;padding-bottom:0}.post .user-block{margin-bottom:15px;width:100%}.post .row{width:100%}.product-image{max-width:100%;height:auto;width:100%}.product-image-thumbs{align-items:stretch;display:flex;margin-top:2rem}.product-image-thumb{border-radius:.5rem;background-color:#eff1f7;border:1px solid #dae1e7;display:flex;margin-right:1rem;max-width:7rem;padding:.5rem}.product-image-thumb img{max-width:100%;height:auto;align-self:center}.product-image-thumb:hover{opacity:.5}.product-share a{margin-right:.5rem}.projects td{vertical-align:middle}.projects .list-inline{margin-bottom:0}.projects .table-avatar img,.projects img.table-avatar{border-radius:50%;display:inline;width:2.5rem}.projects .project-state{text-align:center}.fc-button{background:#babfc7;background-image:none;border-color:#ddd;color:#4e5154}.fc-button.hover,.fc-button:active,.fc-button:hover{background-color:#e9e9e9}.fc-header-title h2{color:#666;font-size:15px;line-height:1.6em;margin-left:10px}.fc-header-right{padding-right:10px}.fc-header-left{padding-left:10px}.fc-widget-header{background:#fafafa}.fc-grid{border:0;width:100%}.fc-widget-content:first-of-type,.fc-widget-header:first-of-type{border-left:0;border-right:0}.fc-widget-content:last-of-type,.fc-widget-header:last-of-type{border-right:0}.fc-toolbar,.fc-toolbar.fc-header-toolbar{margin:0;padding:1rem}@media (max-width:575.98px){.fc-toolbar{flex-direction:column}.fc-toolbar .fc-left{order:1;margin-bottom:.5rem}.fc-toolbar .fc-center{order:0;margin-bottom:.375rem}.fc-toolbar .fc-right{order:2}}.fc-day-number{font-size:20px;font-weight:300;padding-right:10px}.fc-color-picker{list-style:none;margin:0;padding:0}.fc-color-picker>li{float:left;font-size:30px;line-height:30px;margin-right:5px}.fc-color-picker>li .fa,.fc-color-picker>li .fab,.fc-color-picker>li .far,.fc-color-picker>li .fas,.fc-color-picker>li .glyphicon,.fc-color-picker>li .ion{transition:transform .3s linear}.fc-color-picker>li .fa:hover,.fc-color-picker>li .fab:hover,.fc-color-picker>li .far:hover,.fc-color-picker>li .fas:hover,.fc-color-picker>li .glyphicon:hover,.fc-color-picker>li .ion:hover{transform:rotate(30deg)}#add-new-event{transition:all .3s linear}.external-event{border-radius:.5rem;cursor:move;font-weight:700;margin-bottom:4px;padding:5px 10px}.select2-container--default .select2-selection--single{border:1px solid rgba(0,0,0,.2);padding:.875rem .7rem;height:34px}.select2-container--default.select2-container--open .select2-selection--single{border-color:#afb9da}.select2-container--default .select2-dropdown{border:1px solid rgba(0,0,0,.2)}.select2-container--default .select2-results__option{padding:6px 12px;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-user-select:none}.select2-container--default .select2-selection--single .select2-selection__rendered{padding-left:0;height:auto;margin-top:-3px}.select2-container--default[dir=rtl] .select2-selection--single .select2-selection__rendered{padding-right:6px;padding-left:20px}.select2-container--default .select2-selection--single .select2-selection__arrow{height:31px;right:6px}.select2-container--default .select2-selection--single .select2-selection__arrow b{margin-top:0}.select2-container--default .select2-dropdown .select2-search__field,.select2-container--default .select2-search--inline .select2-search__field{border:1px solid rgba(0,0,0,.2)}.select2-container--default .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-search--inline .select2-search__field:focus{outline:none;border:1px solid #586cb1}.select2-container--default .select2-dropdown.select2-dropdown--below{border-top:0}.select2-container--default .select2-dropdown.select2-dropdown--above{border-bottom:0}.select2-container--default .select2-results__option[aria-disabled=true]{color:#b8c2cc}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#dae1e7}.select2-container--default .select2-results__option[aria-selected=true],.select2-container--default .select2-results__option[aria-selected=true]:hover{color:#2a2e30}.select2-container--default .select2-results__option--highlighted{background-color:#586cb1;color:#fff}.select2-container--default .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#4f64aa;color:#fff}.select2-container--default .select2-selection--multiple{border:1px solid rgba(0,0,0,.2);min-height:34px}.select2-container--default .select2-selection--multiple:focus{border-color:#586cb1}.select2-container--default .select2-selection--multiple .select2-selection__rendered{padding:0 .35rem .7rem;margin-bottom:-.35rem}.select2-container--default .select2-selection--multiple .select2-selection__rendered li:first-child.select2-search.select2-search--inline{width:100%;margin-left:.35rem}.select2-container--default .select2-selection--multiple .select2-selection__rendered li:first-child.select2-search.select2-search--inline .select2-search__field{width:100%!important}.select2-container--default .select2-selection--multiple .select2-selection__rendered .select2-search.select2-search--inline .select2-search__field{border:0;margin-top:6px}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#586cb1;border-color:#4c60a3;color:#fff;padding:0 10px;margin-top:.31rem}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7);float:right;margin-left:5px;margin-right:-2px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-selection--multiple.text-sm .select2-search.select2-search--inline .select2-search__field,.text-sm .select2-container--default .select2-selection--multiple .select2-search.select2-search--inline .select2-search__field{margin-top:8px}.select2-container--default .select2-selection--multiple.text-sm .select2-selection__choice,.text-sm .select2-container--default .select2-selection--multiple .select2-selection__choice{margin-top:.4rem}.select2-container--default.select2-container--focus .select2-selection--multiple,.select2-container--default.select2-container--focus .select2-selection--single{border-color:#586cb1}.select2-container--default.select2-container--focus .select2-search__field{border:0}.select2-container--default .select2-selection--single .select2-selection__rendered li{padding-right:10px}.input-group-prepend~.select2-container--default .select2-selection{border-bottom-left-radius:0;border-top-left-radius:0}.input-group>.select2-container--default:not(:last-child) .select2-selection{border-bottom-right-radius:0;border-top-right-radius:0}.select2-container--bootstrap4.select2-container--focus .select2-selection{box-shadow:none}select.form-control-sm~.select2-container--default{font-size:1rem}.text-sm .select2-container--default .select2-selection--single,select.form-control-sm~.select2-container--default .select2-selection--single{height:2rem}.text-sm .select2-container--default .select2-selection--single .select2-selection__rendered,select.form-control-sm~.select2-container--default .select2-selection--single .select2-selection__rendered{margin-top:-.4rem}.text-sm .select2-container--default .select2-selection--single .select2-selection__arrow,select.form-control-sm~.select2-container--default .select2-selection--single .select2-selection__arrow{top:-.12rem}.text-sm .select2-container--default .select2-selection--multiple,select.form-control-sm~.select2-container--default .select2-selection--multiple{min-height:2rem}.text-sm .select2-container--default .select2-selection--multiple .select2-selection__rendered,select.form-control-sm~.select2-container--default .select2-selection--multiple .select2-selection__rendered{padding:0 .75rem .5rem;margin-top:-.3rem}.text-sm .select2-container--default .select2-selection--multiple .select2-selection__rendered li:first-child.select2-search.select2-search--inline,select.form-control-sm~.select2-container--default .select2-selection--multiple .select2-selection__rendered li:first-child.select2-search.select2-search--inline{margin-left:.75rem}.text-sm .select2-container--default .select2-selection--multiple .select2-selection__rendered .select2-search.select2-search--inline .select2-search__field,select.form-control-sm~.select2-container--default .select2-selection--multiple .select2-selection__rendered .select2-search.select2-search--inline .select2-search__field{margin-top:6px}.select2-primary+.select2-container--default.select2-container--focus .select2-selection--single,.select2-primary+.select2-container--default.select2-container--open .select2-selection--single{border-color:#afb9da}.select2-container--default .select2-primary.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-primary .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-primary .select2-search--inline .select2-search__field:focus,.select2-primary .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-primary .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-primary .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #afb9da}.select2-container--default .select2-primary .select2-results__option--highlighted,.select2-primary .select2-container--default .select2-results__option--highlighted{background-color:#586cb1;color:#fff}.select2-container--default .select2-primary .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-primary .select2-results__option--highlighted[aria-selected]:hover,.select2-primary .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-primary .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#4f64aa;color:#fff}.select2-container--default .select2-primary .select2-selection--multiple:focus,.select2-primary .select2-container--default .select2-selection--multiple:focus{border-color:#afb9da}.select2-container--default .select2-primary .select2-selection--multiple .select2-selection__choice,.select2-primary .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#586cb1;border-color:#4c60a3;color:#fff}.select2-container--default .select2-primary .select2-selection--multiple .select2-selection__choice__remove,.select2-primary .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-primary .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-primary .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-primary.select2-container--focus .select2-selection--multiple,.select2-primary .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#afb9da}.select2-secondary+.select2-container--default.select2-container--focus .select2-selection--single,.select2-secondary+.select2-container--default.select2-container--open .select2-selection--single{border-color:#fff}.select2-container--default .select2-secondary.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-secondary .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-secondary .select2-search--inline .select2-search__field:focus,.select2-secondary .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-secondary .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-secondary .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #fff}.select2-container--default .select2-secondary .select2-results__option--highlighted,.select2-secondary .select2-container--default .select2-results__option--highlighted{background-color:#b8c2cc;color:#2a2e30}.select2-container--default .select2-secondary .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-secondary .select2-results__option--highlighted[aria-selected]:hover,.select2-secondary .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-secondary .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#afbac6;color:#2a2e30}.select2-container--default .select2-secondary .select2-selection--multiple:focus,.select2-secondary .select2-container--default .select2-selection--multiple:focus{border-color:#fff}.select2-container--default .select2-secondary .select2-selection--multiple .select2-selection__choice,.select2-secondary .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#b8c2cc;border-color:#a9b5c1;color:#2a2e30}.select2-container--default .select2-secondary .select2-selection--multiple .select2-selection__choice__remove,.select2-secondary .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:rgba(42,46,48,.7)}.select2-container--default .select2-secondary .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-secondary .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#2a2e30}.select2-container--default .select2-secondary.select2-container--focus .select2-selection--multiple,.select2-secondary .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#fff}.select2-success+.select2-container--default.select2-container--focus .select2-selection--single,.select2-success+.select2-container--default.select2-container--open .select2-selection--single{border-color:#73e6b5}.select2-container--default .select2-success.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-success .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-success .select2-search--inline .select2-search__field:focus,.select2-success .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-success .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-success .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #73e6b5}.select2-container--default .select2-success .select2-results__option--highlighted,.select2-success .select2-container--default .select2-results__option--highlighted{background-color:#21b978;color:#fff}.select2-container--default .select2-success .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-success .select2-results__option--highlighted[aria-selected]:hover,.select2-success .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-success .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#1fac70;color:#fff}.select2-container--default .select2-success .select2-selection--multiple:focus,.select2-success .select2-container--default .select2-selection--multiple:focus{border-color:#73e6b5}.select2-container--default .select2-success .select2-selection--multiple .select2-selection__choice,.select2-success .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#21b978;border-color:#1da36a;color:#fff}.select2-container--default .select2-success .select2-selection--multiple .select2-selection__choice__remove,.select2-success .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-success .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-success .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-success.select2-container--focus .select2-selection--multiple,.select2-success .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#73e6b5}.select2-info+.select2-container--default.select2-container--focus .select2-selection--single,.select2-info+.select2-container--default.select2-container--open .select2-selection--single{border-color:#a8c0e9}.select2-container--default .select2-info.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-info .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-info .select2-search--inline .select2-search__field:focus,.select2-info .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-info .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-info .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #a8c0e9}.select2-container--default .select2-info .select2-results__option--highlighted,.select2-info .select2-container--default .select2-results__option--highlighted{background-color:#4277cf;color:#fff}.select2-container--default .select2-info .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-info .select2-results__option--highlighted[aria-selected]:hover,.select2-info .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-info .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#366ecc;color:#fff}.select2-container--default .select2-info .select2-selection--multiple:focus,.select2-info .select2-container--default .select2-selection--multiple:focus{border-color:#a8c0e9}.select2-container--default .select2-info .select2-selection--multiple .select2-selection__choice,.select2-info .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#4277cf;border-color:#3269c5;color:#fff}.select2-container--default .select2-info .select2-selection--multiple .select2-selection__choice__remove,.select2-info .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-info .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-info .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-info.select2-container--focus .select2-selection--multiple,.select2-info .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#a8c0e9}.select2-warning+.select2-container--default.select2-container--focus .select2-selection--single,.select2-warning+.select2-container--default.select2-container--open .select2-selection--single{border-color:#f2dcbc}.select2-container--default .select2-warning.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-warning .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-warning .select2-search--inline .select2-search__field:focus,.select2-warning .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-warning .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-warning .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #f2dcbc}.select2-container--default .select2-warning .select2-results__option--highlighted,.select2-warning .select2-container--default .select2-results__option--highlighted{background-color:#dda451;color:#2a2e30}.select2-container--default .select2-warning .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-warning .select2-results__option--highlighted[aria-selected]:hover,.select2-warning .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-warning .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#da9d44;color:#2a2e30}.select2-container--default .select2-warning .select2-selection--multiple:focus,.select2-warning .select2-container--default .select2-selection--multiple:focus{border-color:#f2dcbc}.select2-container--default .select2-warning .select2-selection--multiple .select2-selection__choice,.select2-warning .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#dda451;border-color:#d9993c;color:#2a2e30}.select2-container--default .select2-warning .select2-selection--multiple .select2-selection__choice__remove,.select2-warning .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:rgba(42,46,48,.7)}.select2-container--default .select2-warning .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-warning .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#2a2e30}.select2-container--default .select2-warning.select2-container--focus .select2-selection--multiple,.select2-warning .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#f2dcbc}.select2-danger+.select2-container--default.select2-container--focus .select2-selection--single,.select2-danger+.select2-container--default.select2-container--open .select2-selection--single{border-color:#f8c6c6}.select2-container--default .select2-danger.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-danger .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-danger .select2-search--inline .select2-search__field:focus,.select2-danger .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-danger .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-danger .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #f8c6c6}.select2-container--default .select2-danger .select2-results__option--highlighted,.select2-danger .select2-container--default .select2-results__option--highlighted{background-color:#ea5455;color:#fff}.select2-container--default .select2-danger .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-danger .select2-results__option--highlighted[aria-selected]:hover,.select2-danger .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-danger .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#e84647;color:#fff}.select2-container--default .select2-danger .select2-selection--multiple:focus,.select2-danger .select2-container--default .select2-selection--multiple:focus{border-color:#f8c6c6}.select2-container--default .select2-danger .select2-selection--multiple .select2-selection__choice,.select2-danger .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#ea5455;border-color:#e73d3e;color:#fff}.select2-container--default .select2-danger .select2-selection--multiple .select2-selection__choice__remove,.select2-danger .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-danger .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-danger .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-danger.select2-container--focus .select2-selection--multiple,.select2-danger .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#f8c6c6}.select2-light+.select2-container--default.select2-container--focus .select2-selection--single,.select2-light+.select2-container--default.select2-container--open .select2-selection--single{border-color:#fff}.select2-container--default .select2-light.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-light .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-light .select2-search--inline .select2-search__field:focus,.select2-light .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-light .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-light .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #fff}.select2-container--default .select2-light .select2-results__option--highlighted,.select2-light .select2-container--default .select2-results__option--highlighted{background-color:#f7f7f9;color:#2a2e30}.select2-container--default .select2-light .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-light .select2-results__option--highlighted[aria-selected]:hover,.select2-light .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-light .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#eeeef2;color:#2a2e30}.select2-container--default .select2-light .select2-selection--multiple:focus,.select2-light .select2-container--default .select2-selection--multiple:focus{border-color:#fff}.select2-container--default .select2-light .select2-selection--multiple .select2-selection__choice,.select2-light .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#f7f7f9;border-color:#e8e8ee;color:#2a2e30}.select2-container--default .select2-light .select2-selection--multiple .select2-selection__choice__remove,.select2-light .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:rgba(42,46,48,.7)}.select2-container--default .select2-light .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-light .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#2a2e30}.select2-container--default .select2-light.select2-container--focus .select2-selection--multiple,.select2-light .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#fff}.select2-dark+.select2-container--default.select2-container--focus .select2-selection--single,.select2-dark+.select2-container--default.select2-container--open .select2-selection--single{border-color:#586a79}.select2-container--default .select2-dark.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-dark .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-dark .select2-search--inline .select2-search__field:focus,.select2-dark .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-dark .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-dark .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #586a79}.select2-container--default .select2-dark .select2-results__option--highlighted,.select2-dark .select2-container--default .select2-results__option--highlighted{background-color:#22292f;color:#fff}.select2-container--default .select2-dark .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-dark .select2-results__option--highlighted[aria-selected]:hover,.select2-dark .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-dark .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#1c2126;color:#fff}.select2-container--default .select2-dark .select2-selection--multiple:focus,.select2-dark .select2-container--default .select2-selection--multiple:focus{border-color:#586a79}.select2-container--default .select2-dark .select2-selection--multiple .select2-selection__choice,.select2-dark .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#22292f;border-color:#171c20;color:#fff}.select2-container--default .select2-dark .select2-selection--multiple .select2-selection__choice__remove,.select2-dark .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-dark .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-dark .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-dark.select2-container--focus .select2-selection--multiple,.select2-dark .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#586a79}.select2-lightblue+.select2-container--default.select2-container--focus .select2-selection--single,.select2-lightblue+.select2-container--default.select2-container--open .select2-selection--single{border-color:#99c5de}.select2-container--default .select2-lightblue.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-lightblue .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-lightblue .select2-search--inline .select2-search__field:focus,.select2-lightblue .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-lightblue .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-lightblue .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #99c5de}.select2-container--default .select2-lightblue .select2-results__option--highlighted,.select2-lightblue .select2-container--default .select2-results__option--highlighted{background-color:#3c8dbc;color:#fff}.select2-container--default .select2-lightblue .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-lightblue .select2-results__option--highlighted[aria-selected]:hover,.select2-lightblue .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-lightblue .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#3884b0;color:#fff}.select2-container--default .select2-lightblue .select2-selection--multiple:focus,.select2-lightblue .select2-container--default .select2-selection--multiple:focus{border-color:#99c5de}.select2-container--default .select2-lightblue .select2-selection--multiple .select2-selection__choice,.select2-lightblue .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#3c8dbc;border-color:#367fa9;color:#fff}.select2-container--default .select2-lightblue .select2-selection--multiple .select2-selection__choice__remove,.select2-lightblue .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-lightblue .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-lightblue .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-lightblue.select2-container--focus .select2-selection--multiple,.select2-lightblue .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#99c5de}.select2-navy+.select2-container--default.select2-container--focus .select2-selection--single,.select2-navy+.select2-container--default.select2-container--open .select2-selection--single{border-color:#005ebf}.select2-container--default .select2-navy.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-navy .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-navy .select2-search--inline .select2-search__field:focus,.select2-navy .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-navy .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-navy .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #005ebf}.select2-container--default .select2-navy .select2-results__option--highlighted,.select2-navy .select2-container--default .select2-results__option--highlighted{background-color:#001f3f;color:#fff}.select2-container--default .select2-navy .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-navy .select2-results__option--highlighted[aria-selected]:hover,.select2-navy .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-navy .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#001730;color:#fff}.select2-container--default .select2-navy .select2-selection--multiple:focus,.select2-navy .select2-container--default .select2-selection--multiple:focus{border-color:#005ebf}.select2-container--default .select2-navy .select2-selection--multiple .select2-selection__choice,.select2-navy .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#001f3f;border-color:#001226;color:#fff}.select2-container--default .select2-navy .select2-selection--multiple .select2-selection__choice__remove,.select2-navy .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-navy .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-navy .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-navy.select2-container--focus .select2-selection--multiple,.select2-navy .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#005ebf}.select2-olive+.select2-container--default.select2-container--focus .select2-selection--single,.select2-olive+.select2-container--default.select2-container--open .select2-selection--single{border-color:#87cfaf}.select2-container--default .select2-olive.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-olive .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-olive .select2-search--inline .select2-search__field:focus,.select2-olive .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-olive .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-olive .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #87cfaf}.select2-container--default .select2-olive .select2-results__option--highlighted,.select2-olive .select2-container--default .select2-results__option--highlighted{background-color:#3d9970;color:#fff}.select2-container--default .select2-olive .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-olive .select2-results__option--highlighted[aria-selected]:hover,.select2-olive .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-olive .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#398e68;color:#fff}.select2-container--default .select2-olive .select2-selection--multiple:focus,.select2-olive .select2-container--default .select2-selection--multiple:focus{border-color:#87cfaf}.select2-container--default .select2-olive .select2-selection--multiple .select2-selection__choice,.select2-olive .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#3d9970;border-color:#368763;color:#fff}.select2-container--default .select2-olive .select2-selection--multiple .select2-selection__choice__remove,.select2-olive .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-olive .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-olive .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-olive.select2-container--focus .select2-selection--multiple,.select2-olive .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#87cfaf}.select2-lime+.select2-container--default.select2-container--focus .select2-selection--single,.select2-lime+.select2-container--default.select2-container--open .select2-selection--single{border-color:#81ffb8}.select2-container--default .select2-lime.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-lime .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-lime .select2-search--inline .select2-search__field:focus,.select2-lime .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-lime .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-lime .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #81ffb8}.select2-container--default .select2-lime .select2-results__option--highlighted,.select2-lime .select2-container--default .select2-results__option--highlighted{background-color:#01ff70;color:#2a2e30}.select2-container--default .select2-lime .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-lime .select2-results__option--highlighted[aria-selected]:hover,.select2-lime .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-lime .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#00f169;color:#2a2e30}.select2-container--default .select2-lime .select2-selection--multiple:focus,.select2-lime .select2-container--default .select2-selection--multiple:focus{border-color:#81ffb8}.select2-container--default .select2-lime .select2-selection--multiple .select2-selection__choice,.select2-lime .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#01ff70;border-color:#00e765;color:#2a2e30}.select2-container--default .select2-lime .select2-selection--multiple .select2-selection__choice__remove,.select2-lime .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:rgba(42,46,48,.7)}.select2-container--default .select2-lime .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-lime .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#2a2e30}.select2-container--default .select2-lime.select2-container--focus .select2-selection--multiple,.select2-lime .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#81ffb8}.select2-fuchsia+.select2-container--default.select2-container--focus .select2-selection--single,.select2-fuchsia+.select2-container--default.select2-container--open .select2-selection--single{border-color:#f88adf}.select2-container--default .select2-fuchsia.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-fuchsia .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-fuchsia .select2-search--inline .select2-search__field:focus,.select2-fuchsia .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-fuchsia .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-fuchsia .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #f88adf}.select2-container--default .select2-fuchsia .select2-results__option--highlighted,.select2-fuchsia .select2-container--default .select2-results__option--highlighted{background-color:#f012be;color:#fff}.select2-container--default .select2-fuchsia .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-fuchsia .select2-results__option--highlighted[aria-selected]:hover,.select2-fuchsia .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-fuchsia .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#e40eb4;color:#fff}.select2-container--default .select2-fuchsia .select2-selection--multiple:focus,.select2-fuchsia .select2-container--default .select2-selection--multiple:focus{border-color:#f88adf}.select2-container--default .select2-fuchsia .select2-selection--multiple .select2-selection__choice,.select2-fuchsia .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#f012be;border-color:#db0ead;color:#fff}.select2-container--default .select2-fuchsia .select2-selection--multiple .select2-selection__choice__remove,.select2-fuchsia .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-fuchsia .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-fuchsia .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-fuchsia.select2-container--focus .select2-selection--multiple,.select2-fuchsia .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#f88adf}.select2-maroon+.select2-container--default.select2-container--focus .select2-selection--single,.select2-maroon+.select2-container--default.select2-container--open .select2-selection--single{border-color:#f083ab}.select2-container--default .select2-maroon.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-maroon .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-maroon .select2-search--inline .select2-search__field:focus,.select2-maroon .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-maroon .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-maroon .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #f083ab}.select2-container--default .select2-maroon .select2-results__option--highlighted,.select2-maroon .select2-container--default .select2-results__option--highlighted{background-color:#d81b60;color:#fff}.select2-container--default .select2-maroon .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-maroon .select2-results__option--highlighted[aria-selected]:hover,.select2-maroon .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-maroon .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#ca195a;color:#fff}.select2-container--default .select2-maroon .select2-selection--multiple:focus,.select2-maroon .select2-container--default .select2-selection--multiple:focus{border-color:#f083ab}.select2-container--default .select2-maroon .select2-selection--multiple .select2-selection__choice,.select2-maroon .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#d81b60;border-color:#c11856;color:#fff}.select2-container--default .select2-maroon .select2-selection--multiple .select2-selection__choice__remove,.select2-maroon .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-maroon .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-maroon .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-maroon.select2-container--focus .select2-selection--multiple,.select2-maroon .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#f083ab}.select2-blue+.select2-container--default.select2-container--focus .select2-selection--single,.select2-blue+.select2-container--default.select2-container--open .select2-selection--single{border-color:#9ac4eb}.select2-blue .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-blue .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-blue .select2-container--default .select2-search--inline .select2-search__field:focus,.select2-container--default .select2-blue.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-blue .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-blue .select2-search--inline .select2-search__field:focus{border:1px solid #9ac4eb}.select2-blue .select2-container--default .select2-results__option--highlighted,.select2-container--default .select2-blue .select2-results__option--highlighted{background-color:#3085d6;color:#fff}.select2-blue .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-blue .select2-container--default .select2-results__option--highlighted[aria-selected]:hover,.select2-container--default .select2-blue .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-blue .select2-results__option--highlighted[aria-selected]:hover{background-color:#297dce;color:#fff}.select2-blue .select2-container--default .select2-selection--multiple:focus,.select2-container--default .select2-blue .select2-selection--multiple:focus{border-color:#9ac4eb}.select2-blue .select2-container--default .select2-selection--multiple .select2-selection__choice,.select2-container--default .select2-blue .select2-selection--multiple .select2-selection__choice{background-color:#3085d6;border-color:#2778c5;color:#fff}.select2-blue .select2-container--default .select2-selection--multiple .select2-selection__choice__remove,.select2-container--default .select2-blue .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-blue .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-container--default .select2-blue .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-blue .select2-container--default.select2-container--focus .select2-selection--multiple,.select2-container--default .select2-blue.select2-container--focus .select2-selection--multiple{border-color:#9ac4eb}.select2-indigo+.select2-container--default.select2-container--focus .select2-selection--single,.select2-indigo+.select2-container--default.select2-container--open .select2-selection--single{border-color:#bac1e7}.select2-container--default .select2-indigo.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-indigo .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-indigo .select2-search--inline .select2-search__field:focus,.select2-indigo .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-indigo .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-indigo .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #bac1e7}.select2-container--default .select2-indigo .select2-results__option--highlighted,.select2-indigo .select2-container--default .select2-results__option--highlighted{background-color:#5c6bc6;color:#fff}.select2-container--default .select2-indigo .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-indigo .select2-results__option--highlighted[aria-selected]:hover,.select2-indigo .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-indigo .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#5161c2;color:#fff}.select2-container--default .select2-indigo .select2-selection--multiple:focus,.select2-indigo .select2-container--default .select2-selection--multiple:focus{border-color:#bac1e7}.select2-container--default .select2-indigo .select2-selection--multiple .select2-selection__choice,.select2-indigo .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#5c6bc6;border-color:#495abf;color:#fff}.select2-container--default .select2-indigo .select2-selection--multiple .select2-selection__choice__remove,.select2-indigo .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-indigo .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-indigo .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-indigo.select2-container--focus .select2-selection--multiple,.select2-indigo .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#bac1e7}.select2-purple+.select2-container--default.select2-container--focus .select2-selection--single,.select2-purple+.select2-container--default.select2-container--open .select2-selection--single{border-color:#b8a2e0}.select2-container--default .select2-purple.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-purple .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-purple .select2-search--inline .select2-search__field:focus,.select2-purple .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-purple .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-purple .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #b8a2e0}.select2-container--default .select2-purple .select2-results__option--highlighted,.select2-purple .select2-container--default .select2-results__option--highlighted{background-color:#6f42c1;color:#fff}.select2-container--default .select2-purple .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-purple .select2-results__option--highlighted[aria-selected]:hover,.select2-purple .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-purple .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#683cb8;color:#fff}.select2-container--default .select2-purple .select2-selection--multiple:focus,.select2-purple .select2-container--default .select2-selection--multiple:focus{border-color:#b8a2e0}.select2-container--default .select2-purple .select2-selection--multiple .select2-selection__choice,.select2-purple .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#6f42c1;border-color:#643ab0;color:#fff}.select2-container--default .select2-purple .select2-selection--multiple .select2-selection__choice__remove,.select2-purple .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-purple .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-purple .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-purple.select2-container--focus .select2-selection--multiple,.select2-purple .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#b8a2e0}.select2-pink+.select2-container--default.select2-container--focus .select2-selection--single,.select2-pink+.select2-container--default.select2-container--open .select2-selection--single{border-color:#fff}.select2-container--default .select2-pink.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-pink .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-pink .select2-search--inline .select2-search__field:focus,.select2-pink .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-pink .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-pink .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #fff}.select2-container--default .select2-pink .select2-results__option--highlighted,.select2-pink .select2-container--default .select2-results__option--highlighted{background-color:#ff8acc;color:#2a2e30}.select2-container--default .select2-pink .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-pink .select2-results__option--highlighted[aria-selected]:hover,.select2-pink .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-pink .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#ff7bc5;color:#2a2e30}.select2-container--default .select2-pink .select2-selection--multiple:focus,.select2-pink .select2-container--default .select2-selection--multiple:focus{border-color:#fff}.select2-container--default .select2-pink .select2-selection--multiple .select2-selection__choice,.select2-pink .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#ff8acc;border-color:#ff71c1;color:#2a2e30}.select2-container--default .select2-pink .select2-selection--multiple .select2-selection__choice__remove,.select2-pink .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:rgba(42,46,48,.7)}.select2-container--default .select2-pink .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-pink .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#2a2e30}.select2-container--default .select2-pink.select2-container--focus .select2-selection--multiple,.select2-pink .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#fff}.select2-red+.select2-container--default.select2-container--focus .select2-selection--single,.select2-red+.select2-container--default.select2-container--open .select2-selection--single{border-color:#f8c6c6}.select2-container--default .select2-red.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-red .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-red .select2-search--inline .select2-search__field:focus,.select2-red .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-red .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-red .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #f8c6c6}.select2-container--default .select2-red .select2-results__option--highlighted,.select2-red .select2-container--default .select2-results__option--highlighted{background-color:#ea5455;color:#fff}.select2-container--default .select2-red .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-red .select2-results__option--highlighted[aria-selected]:hover,.select2-red .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-red .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#e84647;color:#fff}.select2-container--default .select2-red .select2-selection--multiple:focus,.select2-red .select2-container--default .select2-selection--multiple:focus{border-color:#f8c6c6}.select2-container--default .select2-red .select2-selection--multiple .select2-selection__choice,.select2-red .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#ea5455;border-color:#e73d3e;color:#fff}.select2-container--default .select2-red .select2-selection--multiple .select2-selection__choice__remove,.select2-red .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-red .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-red .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-red.select2-container--focus .select2-selection--multiple,.select2-red .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#f8c6c6}.select2-orange+.select2-container--default.select2-container--focus .select2-selection--single,.select2-orange+.select2-container--default.select2-container--open .select2-selection--single{border-color:#f2dcbc}.select2-container--default .select2-orange.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-orange .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-orange .select2-search--inline .select2-search__field:focus,.select2-orange .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-orange .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-orange .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #f2dcbc}.select2-container--default .select2-orange .select2-results__option--highlighted,.select2-orange .select2-container--default .select2-results__option--highlighted{background-color:#dda451;color:#2a2e30}.select2-container--default .select2-orange .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-orange .select2-results__option--highlighted[aria-selected]:hover,.select2-orange .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-orange .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#da9d44;color:#2a2e30}.select2-container--default .select2-orange .select2-selection--multiple:focus,.select2-orange .select2-container--default .select2-selection--multiple:focus{border-color:#f2dcbc}.select2-container--default .select2-orange .select2-selection--multiple .select2-selection__choice,.select2-orange .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#dda451;border-color:#d9993c;color:#2a2e30}.select2-container--default .select2-orange .select2-selection--multiple .select2-selection__choice__remove,.select2-orange .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:rgba(42,46,48,.7)}.select2-container--default .select2-orange .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-orange .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#2a2e30}.select2-container--default .select2-orange.select2-container--focus .select2-selection--multiple,.select2-orange .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#f2dcbc}.select2-yellow+.select2-container--default.select2-container--focus .select2-selection--single,.select2-yellow+.select2-container--default.select2-container--open .select2-selection--single{border-color:#f8e283}.select2-container--default .select2-yellow.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-yellow .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-yellow .select2-search--inline .select2-search__field:focus,.select2-yellow .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-yellow .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-yellow .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #f8e283}.select2-container--default .select2-yellow .select2-results__option--highlighted,.select2-yellow .select2-container--default .select2-results__option--highlighted{background-color:#edc30e;color:#2a2e30}.select2-container--default .select2-yellow .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-yellow .select2-results__option--highlighted[aria-selected]:hover,.select2-yellow .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-yellow .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#dfb70d;color:#2a2e30}.select2-container--default .select2-yellow .select2-selection--multiple:focus,.select2-yellow .select2-container--default .select2-selection--multiple:focus{border-color:#f8e283}.select2-container--default .select2-yellow .select2-selection--multiple .select2-selection__choice,.select2-yellow .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#edc30e;border-color:#d5af0d;color:#2a2e30}.select2-container--default .select2-yellow .select2-selection--multiple .select2-selection__choice__remove,.select2-yellow .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:rgba(42,46,48,.7)}.select2-container--default .select2-yellow .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-yellow .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#2a2e30}.select2-container--default .select2-yellow.select2-container--focus .select2-selection--multiple,.select2-yellow .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#f8e283}.select2-green+.select2-container--default.select2-container--focus .select2-selection--single,.select2-green+.select2-container--default.select2-container--open .select2-selection--single{border-color:#73e6b5}.select2-container--default .select2-green.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-green .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-green .select2-search--inline .select2-search__field:focus,.select2-green .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-green .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-green .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #73e6b5}.select2-container--default .select2-green .select2-results__option--highlighted,.select2-green .select2-container--default .select2-results__option--highlighted{background-color:#21b978;color:#fff}.select2-container--default .select2-green .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-green .select2-results__option--highlighted[aria-selected]:hover,.select2-green .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-green .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#1fac70;color:#fff}.select2-container--default .select2-green .select2-selection--multiple:focus,.select2-green .select2-container--default .select2-selection--multiple:focus{border-color:#73e6b5}.select2-container--default .select2-green .select2-selection--multiple .select2-selection__choice,.select2-green .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#21b978;border-color:#1da36a;color:#fff}.select2-container--default .select2-green .select2-selection--multiple .select2-selection__choice__remove,.select2-green .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-green .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-green .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-green.select2-container--focus .select2-selection--multiple,.select2-green .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#73e6b5}.select2-teal+.select2-container--default.select2-container--focus .select2-selection--single,.select2-teal+.select2-container--default.select2-container--open .select2-selection--single{border-color:#7eeaca}.select2-container--default .select2-teal.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-teal .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-teal .select2-search--inline .select2-search__field:focus,.select2-teal .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-teal .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-teal .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #7eeaca}.select2-container--default .select2-teal .select2-results__option--highlighted,.select2-teal .select2-container--default .select2-results__option--highlighted{background-color:#20c997;color:#fff}.select2-container--default .select2-teal .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-teal .select2-results__option--highlighted[aria-selected]:hover,.select2-teal .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-teal .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#1ebc8d;color:#fff}.select2-container--default .select2-teal .select2-selection--multiple:focus,.select2-teal .select2-container--default .select2-selection--multiple:focus{border-color:#7eeaca}.select2-container--default .select2-teal .select2-selection--multiple .select2-selection__choice,.select2-teal .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#20c997;border-color:#1cb386;color:#fff}.select2-container--default .select2-teal .select2-selection--multiple .select2-selection__choice__remove,.select2-teal .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-teal .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-teal .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-teal.select2-container--focus .select2-selection--multiple,.select2-teal .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#7eeaca}.select2-cyan+.select2-container--default.select2-container--focus .select2-selection--single,.select2-cyan+.select2-container--default.select2-container--open .select2-selection--single{border-color:#dedbfb}.select2-container--default .select2-cyan.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-cyan .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-cyan .select2-search--inline .select2-search__field:focus,.select2-cyan .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-cyan .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-cyan .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #dedbfb}.select2-container--default .select2-cyan .select2-results__option--highlighted,.select2-cyan .select2-container--default .select2-results__option--highlighted{background-color:#7367f0;color:#fff}.select2-container--default .select2-cyan .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-cyan .select2-results__option--highlighted[aria-selected]:hover,.select2-cyan .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-cyan .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#6659ef;color:#fff}.select2-container--default .select2-cyan .select2-selection--multiple:focus,.select2-cyan .select2-container--default .select2-selection--multiple:focus{border-color:#dedbfb}.select2-container--default .select2-cyan .select2-selection--multiple .select2-selection__choice,.select2-cyan .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#7367f0;border-color:#5e50ee;color:#fff}.select2-container--default .select2-cyan .select2-selection--multiple .select2-selection__choice__remove,.select2-cyan .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-cyan .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-cyan .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-cyan.select2-container--focus .select2-selection--multiple,.select2-cyan .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#dedbfb}.select2-white+.select2-container--default.select2-container--focus .select2-selection--single,.select2-white+.select2-container--default.select2-container--open .select2-selection--single{border-color:#fff}.select2-container--default .select2-white.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-white .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-white .select2-search--inline .select2-search__field:focus,.select2-white .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-white .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-white .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #fff}.select2-container--default .select2-white .select2-results__option--highlighted,.select2-white .select2-container--default .select2-results__option--highlighted{background-color:#fff;color:#2a2e30}.select2-container--default .select2-white .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-white .select2-results__option--highlighted[aria-selected]:hover,.select2-white .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-white .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#f7f7f7;color:#2a2e30}.select2-container--default .select2-white .select2-selection--multiple:focus,.select2-white .select2-container--default .select2-selection--multiple:focus{border-color:#fff}.select2-container--default .select2-white .select2-selection--multiple .select2-selection__choice,.select2-white .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#fff;border-color:#f2f2f2;color:#2a2e30}.select2-container--default .select2-white .select2-selection--multiple .select2-selection__choice__remove,.select2-white .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:rgba(42,46,48,.7)}.select2-container--default .select2-white .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-white .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#2a2e30}.select2-container--default .select2-white.select2-container--focus .select2-selection--multiple,.select2-gray+.select2-container--default.select2-container--focus .select2-selection--single,.select2-gray+.select2-container--default.select2-container--open .select2-selection--single,.select2-white .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#fff}.select2-container--default .select2-gray.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-gray .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-gray .select2-search--inline .select2-search__field:focus,.select2-gray .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-gray .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-gray .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #fff}.select2-container--default .select2-gray .select2-results__option--highlighted,.select2-gray .select2-container--default .select2-results__option--highlighted{background-color:#b8c2cc;color:#2a2e30}.select2-container--default .select2-gray .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-gray .select2-results__option--highlighted[aria-selected]:hover,.select2-gray .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-gray .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#afbac6;color:#2a2e30}.select2-container--default .select2-gray .select2-selection--multiple:focus,.select2-gray .select2-container--default .select2-selection--multiple:focus{border-color:#fff}.select2-container--default .select2-gray .select2-selection--multiple .select2-selection__choice,.select2-gray .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#b8c2cc;border-color:#a9b5c1;color:#2a2e30}.select2-container--default .select2-gray .select2-selection--multiple .select2-selection__choice__remove,.select2-gray .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:rgba(42,46,48,.7)}.select2-container--default .select2-gray .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-gray .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#2a2e30}.select2-container--default .select2-gray.select2-container--focus .select2-selection--multiple,.select2-gray .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#fff}.select2-gray-dark+.select2-container--default.select2-container--focus .select2-selection--single,.select2-gray-dark+.select2-container--default.select2-container--open .select2-selection--single{border-color:#5e5e5e}.select2-container--default .select2-gray-dark.select2-dropdown .select2-search__field:focus,.select2-container--default .select2-gray-dark .select2-dropdown .select2-search__field:focus,.select2-container--default .select2-gray-dark .select2-search--inline .select2-search__field:focus,.select2-gray-dark .select2-container--default.select2-dropdown .select2-search__field:focus,.select2-gray-dark .select2-container--default .select2-dropdown .select2-search__field:focus,.select2-gray-dark .select2-container--default .select2-search--inline .select2-search__field:focus{border:1px solid #5e5e5e}.select2-container--default .select2-gray-dark .select2-results__option--highlighted,.select2-gray-dark .select2-container--default .select2-results__option--highlighted{background-color:#1e1e1e;color:#fff}.select2-container--default .select2-gray-dark .select2-results__option--highlighted[aria-selected],.select2-container--default .select2-gray-dark .select2-results__option--highlighted[aria-selected]:hover,.select2-gray-dark .select2-container--default .select2-results__option--highlighted[aria-selected],.select2-gray-dark .select2-container--default .select2-results__option--highlighted[aria-selected]:hover{background-color:#161616;color:#fff}.select2-container--default .select2-gray-dark .select2-selection--multiple:focus,.select2-gray-dark .select2-container--default .select2-selection--multiple:focus{border-color:#5e5e5e}.select2-container--default .select2-gray-dark .select2-selection--multiple .select2-selection__choice,.select2-gray-dark .select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#1e1e1e;border-color:#111;color:#fff}.select2-container--default .select2-gray-dark .select2-selection--multiple .select2-selection__choice__remove,.select2-gray-dark .select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:hsla(0,0%,100%,.7)}.select2-container--default .select2-gray-dark .select2-selection--multiple .select2-selection__choice__remove:hover,.select2-gray-dark .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container--default .select2-gray-dark.select2-container--focus .select2-selection--multiple,.select2-gray-dark .select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#5e5e5e}.slider .tooltip.in{opacity:.9}.slider.slider-vertical{height:100%}.slider.slider-horizontal{width:100%}.slider-primary .slider .slider-selection{background:#586cb1}.slider-secondary .slider .slider-selection{background:#b8c2cc}.slider-success .slider .slider-selection{background:#21b978}.slider-info .slider .slider-selection{background:#4277cf}.slider-warning .slider .slider-selection{background:#dda451}.slider-danger .slider .slider-selection{background:#ea5455}.slider-light .slider .slider-selection{background:#f7f7f9}.slider-dark .slider .slider-selection{background:#22292f}.slider-lightblue .slider .slider-selection{background:#3c8dbc}.slider-navy .slider .slider-selection{background:#001f3f}.slider-olive .slider .slider-selection{background:#3d9970}.slider-lime .slider .slider-selection{background:#01ff70}.slider-fuchsia .slider .slider-selection{background:#f012be}.slider-maroon .slider .slider-selection{background:#d81b60}.slider-blue .slider .slider-selection{background:#3085d6}.slider-indigo .slider .slider-selection{background:#5c6bc6}.slider-purple .slider .slider-selection{background:#6f42c1}.slider-pink .slider .slider-selection{background:#ff8acc}.slider-red .slider .slider-selection{background:#ea5455}.slider-orange .slider .slider-selection{background:#dda451}.slider-yellow .slider .slider-selection{background:#edc30e}.slider-green .slider .slider-selection{background:#21b978}.slider-teal .slider .slider-selection{background:#20c997}.slider-cyan .slider .slider-selection{background:#7367f0}.slider-white .slider .slider-selection{background:#fff}.slider-gray .slider .slider-selection{background:#b8c2cc}.slider-gray-dark .slider .slider-selection{background:#1e1e1e}.mapael .map{position:relative}.mapael .mapTooltip{font-family:Montserrat,Helvetica,Arial,serif;font-style:normal;font-weight:400;line-height:1.45;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;border-radius:.5rem;font-size:1rem;background-color:#22292f;color:#fff;display:block;max-width:200px;padding:.25rem .5rem;position:absolute;text-align:center;word-wrap:break-word;z-index:1070}.mapael .myLegend{background-color:#babfc7;border:1px solid #adb5bd;padding:10px;width:600px}.mapael .zoomButton{background-color:#babfc7;border:1px solid #ddd;border-radius:.42rem;color:#444;cursor:pointer;font-weight:700;height:16px;left:10px;line-height:14px;padding-left:1px;position:absolute;text-align:center;top:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:16px}.mapael .zoomButton.hover,.mapael .zoomButton:active,.mapael .zoomButton:hover{background-color:#acb2bc;color:#2b2b2b}.mapael .zoomReset{line-height:12px;top:10px}.mapael .zoomIn{top:30px}.mapael .zoomOut{top:50px}.jqvmap-zoomin,.jqvmap-zoomout{background-color:#babfc7;border:1px solid #ddd;border-radius:.42rem;color:#444;height:15px;width:15px}.jqvmap-zoomin.hover,.jqvmap-zoomin:active,.jqvmap-zoomin:hover,.jqvmap-zoomout.hover,.jqvmap-zoomout:active,.jqvmap-zoomout:hover{background-color:#acb2bc;color:#2b2b2b}.pace{z-index:1048}.pace .pace-progress{z-index:1049}.pace .pace-activity{z-index:1050}.pace-primary .pace .pace-progress{background:#586cb1}.pace-barber-shop-primary .pace{background:#fff}.pace-barber-shop-primary .pace .pace-progress{background:#586cb1}.pace-barber-shop-primary .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-primary .pace .pace-progress:after{color:rgba(88,108,177,.2)}.pace-bounce-primary .pace .pace-activity{background:#586cb1}.pace-center-atom-primary .pace-progress{height:100px;width:80px}.pace-center-atom-primary .pace-progress:before{background:#586cb1;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-primary .pace-activity,.pace-center-atom-primary .pace-activity:after,.pace-center-atom-primary .pace-activity:before{border-color:#586cb1}.pace-center-circle-primary .pace .pace-progress{background:rgba(88,108,177,.8);color:#fff}.pace-center-radar-primary .pace .pace-activity,.pace-center-radar-primary .pace .pace-activity:before{border-color:#586cb1 transparent transparent}.pace-center-simple-primary .pace{background:#fff;border-color:#586cb1}.pace-center-simple-primary .pace .pace-progress{background:#586cb1}.pace-material-primary .pace{color:#586cb1}.pace-corner-indicator-primary .pace .pace-activity{background:#586cb1}.pace-corner-indicator-primary .pace .pace-activity:after,.pace-corner-indicator-primary .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-primary .pace .pace-activity:before{border-right-color:rgba(88,108,177,.2);border-left-color:rgba(88,108,177,.2)}.pace-corner-indicator-primary .pace .pace-activity:after{border-top-color:rgba(88,108,177,.2);border-bottom-color:rgba(88,108,177,.2)}.pace-fill-left-primary .pace .pace-progress{background-color:rgba(88,108,177,.2)}.pace-flash-primary .pace .pace-progress{background:#586cb1}.pace-flash-primary .pace .pace-progress-inner{box-shadow:0 0 10px #586cb1,0 0 5px #586cb1}.pace-flash-primary .pace .pace-activity{border-top-color:#586cb1;border-left-color:#586cb1}.pace-loading-bar-primary .pace .pace-progress{background:#586cb1;color:#586cb1;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-primary .pace .pace-activity{box-shadow:inset 0 0 0 2px #586cb1,inset 0 0 0 7px #fff}.pace-mac-osx-primary .pace .pace-progress{background-color:#586cb1;box-shadow:inset -1px 0 #586cb1,inset 0 -1px #586cb1,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-primary .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-primary .pace-progress{color:#586cb1}.pace-secondary .pace .pace-progress{background:#b8c2cc}.pace-barber-shop-secondary .pace{background:#2a2e30}.pace-barber-shop-secondary .pace .pace-progress{background:#b8c2cc}.pace-barber-shop-secondary .pace .pace-activity{background-image:linear-gradient(45deg,rgba(42,46,48,.2) 25%,transparent 0,transparent 50%,rgba(42,46,48,.2) 0,rgba(42,46,48,.2) 75%,transparent 0,transparent)}.pace-big-counter-secondary .pace .pace-progress:after{color:rgba(184,194,204,.2)}.pace-bounce-secondary .pace .pace-activity{background:#b8c2cc}.pace-center-atom-secondary .pace-progress{height:100px;width:80px}.pace-center-atom-secondary .pace-progress:before{background:#b8c2cc;color:#2a2e30;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-secondary .pace-activity,.pace-center-atom-secondary .pace-activity:after,.pace-center-atom-secondary .pace-activity:before{border-color:#b8c2cc}.pace-center-circle-secondary .pace .pace-progress{background:rgba(184,194,204,.8);color:#2a2e30}.pace-center-radar-secondary .pace .pace-activity,.pace-center-radar-secondary .pace .pace-activity:before{border-color:#b8c2cc transparent transparent}.pace-center-simple-secondary .pace{background:#2a2e30;border-color:#b8c2cc}.pace-center-simple-secondary .pace .pace-progress{background:#b8c2cc}.pace-material-secondary .pace{color:#b8c2cc}.pace-corner-indicator-secondary .pace .pace-activity{background:#b8c2cc}.pace-corner-indicator-secondary .pace .pace-activity:after,.pace-corner-indicator-secondary .pace .pace-activity:before{border:5px solid #2a2e30}.pace-corner-indicator-secondary .pace .pace-activity:before{border-right-color:rgba(184,194,204,.2);border-left-color:rgba(184,194,204,.2)}.pace-corner-indicator-secondary .pace .pace-activity:after{border-top-color:rgba(184,194,204,.2);border-bottom-color:rgba(184,194,204,.2)}.pace-fill-left-secondary .pace .pace-progress{background-color:rgba(184,194,204,.2)}.pace-flash-secondary .pace .pace-progress{background:#b8c2cc}.pace-flash-secondary .pace .pace-progress-inner{box-shadow:0 0 10px #b8c2cc,0 0 5px #b8c2cc}.pace-flash-secondary .pace .pace-activity{border-top-color:#b8c2cc;border-left-color:#b8c2cc}.pace-loading-bar-secondary .pace .pace-progress{background:#b8c2cc;color:#b8c2cc;box-shadow:120px 0 #2a2e30,240px 0 #2a2e30}.pace-loading-bar-secondary .pace .pace-activity{box-shadow:inset 0 0 0 2px #b8c2cc,inset 0 0 0 7px #2a2e30}.pace-mac-osx-secondary .pace .pace-progress{background-color:#b8c2cc;box-shadow:inset -1px 0 #b8c2cc,inset 0 -1px #b8c2cc,inset 0 2px rgba(42,46,48,.5),inset 0 6px rgba(42,46,48,.3)}.pace-mac-osx-secondary .pace .pace-activity{background-image:radial-gradient(rgba(42,46,48,.65) 0,rgba(42,46,48,.15) 100%);height:12px}.pace-progress-color-secondary .pace-progress{color:#b8c2cc}.pace-success .pace .pace-progress{background:#21b978}.pace-barber-shop-success .pace{background:#fff}.pace-barber-shop-success .pace .pace-progress{background:#21b978}.pace-barber-shop-success .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-success .pace .pace-progress:after{color:rgba(33,185,120,.2)}.pace-bounce-success .pace .pace-activity{background:#21b978}.pace-center-atom-success .pace-progress{height:100px;width:80px}.pace-center-atom-success .pace-progress:before{background:#21b978;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-success .pace-activity,.pace-center-atom-success .pace-activity:after,.pace-center-atom-success .pace-activity:before{border-color:#21b978}.pace-center-circle-success .pace .pace-progress{background:rgba(33,185,120,.8);color:#fff}.pace-center-radar-success .pace .pace-activity,.pace-center-radar-success .pace .pace-activity:before{border-color:#21b978 transparent transparent}.pace-center-simple-success .pace{background:#fff;border-color:#21b978}.pace-center-simple-success .pace .pace-progress{background:#21b978}.pace-material-success .pace{color:#21b978}.pace-corner-indicator-success .pace .pace-activity{background:#21b978}.pace-corner-indicator-success .pace .pace-activity:after,.pace-corner-indicator-success .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-success .pace .pace-activity:before{border-right-color:rgba(33,185,120,.2);border-left-color:rgba(33,185,120,.2)}.pace-corner-indicator-success .pace .pace-activity:after{border-top-color:rgba(33,185,120,.2);border-bottom-color:rgba(33,185,120,.2)}.pace-fill-left-success .pace .pace-progress{background-color:rgba(33,185,120,.2)}.pace-flash-success .pace .pace-progress{background:#21b978}.pace-flash-success .pace .pace-progress-inner{box-shadow:0 0 10px #21b978,0 0 5px #21b978}.pace-flash-success .pace .pace-activity{border-top-color:#21b978;border-left-color:#21b978}.pace-loading-bar-success .pace .pace-progress{background:#21b978;color:#21b978;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-success .pace .pace-activity{box-shadow:inset 0 0 0 2px #21b978,inset 0 0 0 7px #fff}.pace-mac-osx-success .pace .pace-progress{background-color:#21b978;box-shadow:inset -1px 0 #21b978,inset 0 -1px #21b978,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-success .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-success .pace-progress{color:#21b978}.pace-info .pace .pace-progress{background:#4277cf}.pace-barber-shop-info .pace{background:#fff}.pace-barber-shop-info .pace .pace-progress{background:#4277cf}.pace-barber-shop-info .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-info .pace .pace-progress:after{color:rgba(66,119,207,.2)}.pace-bounce-info .pace .pace-activity{background:#4277cf}.pace-center-atom-info .pace-progress{height:100px;width:80px}.pace-center-atom-info .pace-progress:before{background:#4277cf;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-info .pace-activity,.pace-center-atom-info .pace-activity:after,.pace-center-atom-info .pace-activity:before{border-color:#4277cf}.pace-center-circle-info .pace .pace-progress{background:rgba(66,119,207,.8);color:#fff}.pace-center-radar-info .pace .pace-activity,.pace-center-radar-info .pace .pace-activity:before{border-color:#4277cf transparent transparent}.pace-center-simple-info .pace{background:#fff;border-color:#4277cf}.pace-center-simple-info .pace .pace-progress{background:#4277cf}.pace-material-info .pace{color:#4277cf}.pace-corner-indicator-info .pace .pace-activity{background:#4277cf}.pace-corner-indicator-info .pace .pace-activity:after,.pace-corner-indicator-info .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-info .pace .pace-activity:before{border-right-color:rgba(66,119,207,.2);border-left-color:rgba(66,119,207,.2)}.pace-corner-indicator-info .pace .pace-activity:after{border-top-color:rgba(66,119,207,.2);border-bottom-color:rgba(66,119,207,.2)}.pace-fill-left-info .pace .pace-progress{background-color:rgba(66,119,207,.2)}.pace-flash-info .pace .pace-progress{background:#4277cf}.pace-flash-info .pace .pace-progress-inner{box-shadow:0 0 10px #4277cf,0 0 5px #4277cf}.pace-flash-info .pace .pace-activity{border-top-color:#4277cf;border-left-color:#4277cf}.pace-loading-bar-info .pace .pace-progress{background:#4277cf;color:#4277cf;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-info .pace .pace-activity{box-shadow:inset 0 0 0 2px #4277cf,inset 0 0 0 7px #fff}.pace-mac-osx-info .pace .pace-progress{background-color:#4277cf;box-shadow:inset -1px 0 #4277cf,inset 0 -1px #4277cf,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-info .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-info .pace-progress{color:#4277cf}.pace-warning .pace .pace-progress{background:#dda451}.pace-barber-shop-warning .pace{background:#2a2e30}.pace-barber-shop-warning .pace .pace-progress{background:#dda451}.pace-barber-shop-warning .pace .pace-activity{background-image:linear-gradient(45deg,rgba(42,46,48,.2) 25%,transparent 0,transparent 50%,rgba(42,46,48,.2) 0,rgba(42,46,48,.2) 75%,transparent 0,transparent)}.pace-big-counter-warning .pace .pace-progress:after{color:rgba(221,164,81,.2)}.pace-bounce-warning .pace .pace-activity{background:#dda451}.pace-center-atom-warning .pace-progress{height:100px;width:80px}.pace-center-atom-warning .pace-progress:before{background:#dda451;color:#2a2e30;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-warning .pace-activity,.pace-center-atom-warning .pace-activity:after,.pace-center-atom-warning .pace-activity:before{border-color:#dda451}.pace-center-circle-warning .pace .pace-progress{background:rgba(221,164,81,.8);color:#2a2e30}.pace-center-radar-warning .pace .pace-activity,.pace-center-radar-warning .pace .pace-activity:before{border-color:#dda451 transparent transparent}.pace-center-simple-warning .pace{background:#2a2e30;border-color:#dda451}.pace-center-simple-warning .pace .pace-progress{background:#dda451}.pace-material-warning .pace{color:#dda451}.pace-corner-indicator-warning .pace .pace-activity{background:#dda451}.pace-corner-indicator-warning .pace .pace-activity:after,.pace-corner-indicator-warning .pace .pace-activity:before{border:5px solid #2a2e30}.pace-corner-indicator-warning .pace .pace-activity:before{border-right-color:rgba(221,164,81,.2);border-left-color:rgba(221,164,81,.2)}.pace-corner-indicator-warning .pace .pace-activity:after{border-top-color:rgba(221,164,81,.2);border-bottom-color:rgba(221,164,81,.2)}.pace-fill-left-warning .pace .pace-progress{background-color:rgba(221,164,81,.2)}.pace-flash-warning .pace .pace-progress{background:#dda451}.pace-flash-warning .pace .pace-progress-inner{box-shadow:0 0 10px #dda451,0 0 5px #dda451}.pace-flash-warning .pace .pace-activity{border-top-color:#dda451;border-left-color:#dda451}.pace-loading-bar-warning .pace .pace-progress{background:#dda451;color:#dda451;box-shadow:120px 0 #2a2e30,240px 0 #2a2e30}.pace-loading-bar-warning .pace .pace-activity{box-shadow:inset 0 0 0 2px #dda451,inset 0 0 0 7px #2a2e30}.pace-mac-osx-warning .pace .pace-progress{background-color:#dda451;box-shadow:inset -1px 0 #dda451,inset 0 -1px #dda451,inset 0 2px rgba(42,46,48,.5),inset 0 6px rgba(42,46,48,.3)}.pace-mac-osx-warning .pace .pace-activity{background-image:radial-gradient(rgba(42,46,48,.65) 0,rgba(42,46,48,.15) 100%);height:12px}.pace-progress-color-warning .pace-progress{color:#dda451}.pace-danger .pace .pace-progress{background:#ea5455}.pace-barber-shop-danger .pace{background:#fff}.pace-barber-shop-danger .pace .pace-progress{background:#ea5455}.pace-barber-shop-danger .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-danger .pace .pace-progress:after{color:rgba(234,84,85,.2)}.pace-bounce-danger .pace .pace-activity{background:#ea5455}.pace-center-atom-danger .pace-progress{height:100px;width:80px}.pace-center-atom-danger .pace-progress:before{background:#ea5455;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-danger .pace-activity,.pace-center-atom-danger .pace-activity:after,.pace-center-atom-danger .pace-activity:before{border-color:#ea5455}.pace-center-circle-danger .pace .pace-progress{background:rgba(234,84,85,.8);color:#fff}.pace-center-radar-danger .pace .pace-activity,.pace-center-radar-danger .pace .pace-activity:before{border-color:#ea5455 transparent transparent}.pace-center-simple-danger .pace{background:#fff;border-color:#ea5455}.pace-center-simple-danger .pace .pace-progress{background:#ea5455}.pace-material-danger .pace{color:#ea5455}.pace-corner-indicator-danger .pace .pace-activity{background:#ea5455}.pace-corner-indicator-danger .pace .pace-activity:after,.pace-corner-indicator-danger .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-danger .pace .pace-activity:before{border-right-color:rgba(234,84,85,.2);border-left-color:rgba(234,84,85,.2)}.pace-corner-indicator-danger .pace .pace-activity:after{border-top-color:rgba(234,84,85,.2);border-bottom-color:rgba(234,84,85,.2)}.pace-fill-left-danger .pace .pace-progress{background-color:rgba(234,84,85,.2)}.pace-flash-danger .pace .pace-progress{background:#ea5455}.pace-flash-danger .pace .pace-progress-inner{box-shadow:0 0 10px #ea5455,0 0 5px #ea5455}.pace-flash-danger .pace .pace-activity{border-top-color:#ea5455;border-left-color:#ea5455}.pace-loading-bar-danger .pace .pace-progress{background:#ea5455;color:#ea5455;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-danger .pace .pace-activity{box-shadow:inset 0 0 0 2px #ea5455,inset 0 0 0 7px #fff}.pace-mac-osx-danger .pace .pace-progress{background-color:#ea5455;box-shadow:inset -1px 0 #ea5455,inset 0 -1px #ea5455,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-danger .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-danger .pace-progress{color:#ea5455}.pace-light .pace .pace-progress{background:#f7f7f9}.pace-barber-shop-light .pace{background:#2a2e30}.pace-barber-shop-light .pace .pace-progress{background:#f7f7f9}.pace-barber-shop-light .pace .pace-activity{background-image:linear-gradient(45deg,rgba(42,46,48,.2) 25%,transparent 0,transparent 50%,rgba(42,46,48,.2) 0,rgba(42,46,48,.2) 75%,transparent 0,transparent)}.pace-big-counter-light .pace .pace-progress:after{color:rgba(247,247,249,.2)}.pace-bounce-light .pace .pace-activity{background:#f7f7f9}.pace-center-atom-light .pace-progress{height:100px;width:80px}.pace-center-atom-light .pace-progress:before{background:#f7f7f9;color:#2a2e30;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-light .pace-activity,.pace-center-atom-light .pace-activity:after,.pace-center-atom-light .pace-activity:before{border-color:#f7f7f9}.pace-center-circle-light .pace .pace-progress{background:rgba(247,247,249,.8);color:#2a2e30}.pace-center-radar-light .pace .pace-activity,.pace-center-radar-light .pace .pace-activity:before{border-color:#f7f7f9 transparent transparent}.pace-center-simple-light .pace{background:#2a2e30;border-color:#f7f7f9}.pace-center-simple-light .pace .pace-progress{background:#f7f7f9}.pace-material-light .pace{color:#f7f7f9}.pace-corner-indicator-light .pace .pace-activity{background:#f7f7f9}.pace-corner-indicator-light .pace .pace-activity:after,.pace-corner-indicator-light .pace .pace-activity:before{border:5px solid #2a2e30}.pace-corner-indicator-light .pace .pace-activity:before{border-right-color:rgba(247,247,249,.2);border-left-color:rgba(247,247,249,.2)}.pace-corner-indicator-light .pace .pace-activity:after{border-top-color:rgba(247,247,249,.2);border-bottom-color:rgba(247,247,249,.2)}.pace-fill-left-light .pace .pace-progress{background-color:rgba(247,247,249,.2)}.pace-flash-light .pace .pace-progress{background:#f7f7f9}.pace-flash-light .pace .pace-progress-inner{box-shadow:0 0 10px #f7f7f9,0 0 5px #f7f7f9}.pace-flash-light .pace .pace-activity{border-top-color:#f7f7f9;border-left-color:#f7f7f9}.pace-loading-bar-light .pace .pace-progress{background:#f7f7f9;color:#f7f7f9;box-shadow:120px 0 #2a2e30,240px 0 #2a2e30}.pace-loading-bar-light .pace .pace-activity{box-shadow:inset 0 0 0 2px #f7f7f9,inset 0 0 0 7px #2a2e30}.pace-mac-osx-light .pace .pace-progress{background-color:#f7f7f9;box-shadow:inset -1px 0 #f7f7f9,inset 0 -1px #f7f7f9,inset 0 2px rgba(42,46,48,.5),inset 0 6px rgba(42,46,48,.3)}.pace-mac-osx-light .pace .pace-activity{background-image:radial-gradient(rgba(42,46,48,.65) 0,rgba(42,46,48,.15) 100%);height:12px}.pace-progress-color-light .pace-progress{color:#f7f7f9}.pace-dark .pace .pace-progress{background:#22292f}.pace-barber-shop-dark .pace{background:#fff}.pace-barber-shop-dark .pace .pace-progress{background:#22292f}.pace-barber-shop-dark .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-dark .pace .pace-progress:after{color:rgba(34,41,47,.2)}.pace-bounce-dark .pace .pace-activity{background:#22292f}.pace-center-atom-dark .pace-progress{height:100px;width:80px}.pace-center-atom-dark .pace-progress:before{background:#22292f;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-dark .pace-activity,.pace-center-atom-dark .pace-activity:after,.pace-center-atom-dark .pace-activity:before{border-color:#22292f}.pace-center-circle-dark .pace .pace-progress{background:rgba(34,41,47,.8);color:#fff}.pace-center-radar-dark .pace .pace-activity,.pace-center-radar-dark .pace .pace-activity:before{border-color:#22292f transparent transparent}.pace-center-simple-dark .pace{background:#fff;border-color:#22292f}.pace-center-simple-dark .pace .pace-progress{background:#22292f}.pace-material-dark .pace{color:#22292f}.pace-corner-indicator-dark .pace .pace-activity{background:#22292f}.pace-corner-indicator-dark .pace .pace-activity:after,.pace-corner-indicator-dark .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-dark .pace .pace-activity:before{border-right-color:rgba(34,41,47,.2);border-left-color:rgba(34,41,47,.2)}.pace-corner-indicator-dark .pace .pace-activity:after{border-top-color:rgba(34,41,47,.2);border-bottom-color:rgba(34,41,47,.2)}.pace-fill-left-dark .pace .pace-progress{background-color:rgba(34,41,47,.2)}.pace-flash-dark .pace .pace-progress{background:#22292f}.pace-flash-dark .pace .pace-progress-inner{box-shadow:0 0 10px #22292f,0 0 5px #22292f}.pace-flash-dark .pace .pace-activity{border-top-color:#22292f;border-left-color:#22292f}.pace-loading-bar-dark .pace .pace-progress{background:#22292f;color:#22292f;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-dark .pace .pace-activity{box-shadow:inset 0 0 0 2px #22292f,inset 0 0 0 7px #fff}.pace-mac-osx-dark .pace .pace-progress{background-color:#22292f;box-shadow:inset -1px 0 #22292f,inset 0 -1px #22292f,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-dark .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-dark .pace-progress{color:#22292f}.pace-lightblue .pace .pace-progress{background:#3c8dbc}.pace-barber-shop-lightblue .pace{background:#fff}.pace-barber-shop-lightblue .pace .pace-progress{background:#3c8dbc}.pace-barber-shop-lightblue .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-lightblue .pace .pace-progress:after{color:rgba(60,141,188,.2)}.pace-bounce-lightblue .pace .pace-activity{background:#3c8dbc}.pace-center-atom-lightblue .pace-progress{height:100px;width:80px}.pace-center-atom-lightblue .pace-progress:before{background:#3c8dbc;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-lightblue .pace-activity,.pace-center-atom-lightblue .pace-activity:after,.pace-center-atom-lightblue .pace-activity:before{border-color:#3c8dbc}.pace-center-circle-lightblue .pace .pace-progress{background:rgba(60,141,188,.8);color:#fff}.pace-center-radar-lightblue .pace .pace-activity,.pace-center-radar-lightblue .pace .pace-activity:before{border-color:#3c8dbc transparent transparent}.pace-center-simple-lightblue .pace{background:#fff;border-color:#3c8dbc}.pace-center-simple-lightblue .pace .pace-progress{background:#3c8dbc}.pace-material-lightblue .pace{color:#3c8dbc}.pace-corner-indicator-lightblue .pace .pace-activity{background:#3c8dbc}.pace-corner-indicator-lightblue .pace .pace-activity:after,.pace-corner-indicator-lightblue .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-lightblue .pace .pace-activity:before{border-right-color:rgba(60,141,188,.2);border-left-color:rgba(60,141,188,.2)}.pace-corner-indicator-lightblue .pace .pace-activity:after{border-top-color:rgba(60,141,188,.2);border-bottom-color:rgba(60,141,188,.2)}.pace-fill-left-lightblue .pace .pace-progress{background-color:rgba(60,141,188,.2)}.pace-flash-lightblue .pace .pace-progress{background:#3c8dbc}.pace-flash-lightblue .pace .pace-progress-inner{box-shadow:0 0 10px #3c8dbc,0 0 5px #3c8dbc}.pace-flash-lightblue .pace .pace-activity{border-top-color:#3c8dbc;border-left-color:#3c8dbc}.pace-loading-bar-lightblue .pace .pace-progress{background:#3c8dbc;color:#3c8dbc;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-lightblue .pace .pace-activity{box-shadow:inset 0 0 0 2px #3c8dbc,inset 0 0 0 7px #fff}.pace-mac-osx-lightblue .pace .pace-progress{background-color:#3c8dbc;box-shadow:inset -1px 0 #3c8dbc,inset 0 -1px #3c8dbc,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-lightblue .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-lightblue .pace-progress{color:#3c8dbc}.pace-navy .pace .pace-progress{background:#001f3f}.pace-barber-shop-navy .pace{background:#fff}.pace-barber-shop-navy .pace .pace-progress{background:#001f3f}.pace-barber-shop-navy .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-navy .pace .pace-progress:after{color:rgba(0,31,63,.2)}.pace-bounce-navy .pace .pace-activity{background:#001f3f}.pace-center-atom-navy .pace-progress{height:100px;width:80px}.pace-center-atom-navy .pace-progress:before{background:#001f3f;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-navy .pace-activity,.pace-center-atom-navy .pace-activity:after,.pace-center-atom-navy .pace-activity:before{border-color:#001f3f}.pace-center-circle-navy .pace .pace-progress{background:rgba(0,31,63,.8);color:#fff}.pace-center-radar-navy .pace .pace-activity,.pace-center-radar-navy .pace .pace-activity:before{border-color:#001f3f transparent transparent}.pace-center-simple-navy .pace{background:#fff;border-color:#001f3f}.pace-center-simple-navy .pace .pace-progress{background:#001f3f}.pace-material-navy .pace{color:#001f3f}.pace-corner-indicator-navy .pace .pace-activity{background:#001f3f}.pace-corner-indicator-navy .pace .pace-activity:after,.pace-corner-indicator-navy .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-navy .pace .pace-activity:before{border-right-color:rgba(0,31,63,.2);border-left-color:rgba(0,31,63,.2)}.pace-corner-indicator-navy .pace .pace-activity:after{border-top-color:rgba(0,31,63,.2);border-bottom-color:rgba(0,31,63,.2)}.pace-fill-left-navy .pace .pace-progress{background-color:rgba(0,31,63,.2)}.pace-flash-navy .pace .pace-progress{background:#001f3f}.pace-flash-navy .pace .pace-progress-inner{box-shadow:0 0 10px #001f3f,0 0 5px #001f3f}.pace-flash-navy .pace .pace-activity{border-top-color:#001f3f;border-left-color:#001f3f}.pace-loading-bar-navy .pace .pace-progress{background:#001f3f;color:#001f3f;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-navy .pace .pace-activity{box-shadow:inset 0 0 0 2px #001f3f,inset 0 0 0 7px #fff}.pace-mac-osx-navy .pace .pace-progress{background-color:#001f3f;box-shadow:inset -1px 0 #001f3f,inset 0 -1px #001f3f,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-navy .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-navy .pace-progress{color:#001f3f}.pace-olive .pace .pace-progress{background:#3d9970}.pace-barber-shop-olive .pace{background:#fff}.pace-barber-shop-olive .pace .pace-progress{background:#3d9970}.pace-barber-shop-olive .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-olive .pace .pace-progress:after{color:rgba(61,153,112,.2)}.pace-bounce-olive .pace .pace-activity{background:#3d9970}.pace-center-atom-olive .pace-progress{height:100px;width:80px}.pace-center-atom-olive .pace-progress:before{background:#3d9970;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-olive .pace-activity,.pace-center-atom-olive .pace-activity:after,.pace-center-atom-olive .pace-activity:before{border-color:#3d9970}.pace-center-circle-olive .pace .pace-progress{background:rgba(61,153,112,.8);color:#fff}.pace-center-radar-olive .pace .pace-activity,.pace-center-radar-olive .pace .pace-activity:before{border-color:#3d9970 transparent transparent}.pace-center-simple-olive .pace{background:#fff;border-color:#3d9970}.pace-center-simple-olive .pace .pace-progress{background:#3d9970}.pace-material-olive .pace{color:#3d9970}.pace-corner-indicator-olive .pace .pace-activity{background:#3d9970}.pace-corner-indicator-olive .pace .pace-activity:after,.pace-corner-indicator-olive .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-olive .pace .pace-activity:before{border-right-color:rgba(61,153,112,.2);border-left-color:rgba(61,153,112,.2)}.pace-corner-indicator-olive .pace .pace-activity:after{border-top-color:rgba(61,153,112,.2);border-bottom-color:rgba(61,153,112,.2)}.pace-fill-left-olive .pace .pace-progress{background-color:rgba(61,153,112,.2)}.pace-flash-olive .pace .pace-progress{background:#3d9970}.pace-flash-olive .pace .pace-progress-inner{box-shadow:0 0 10px #3d9970,0 0 5px #3d9970}.pace-flash-olive .pace .pace-activity{border-top-color:#3d9970;border-left-color:#3d9970}.pace-loading-bar-olive .pace .pace-progress{background:#3d9970;color:#3d9970;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-olive .pace .pace-activity{box-shadow:inset 0 0 0 2px #3d9970,inset 0 0 0 7px #fff}.pace-mac-osx-olive .pace .pace-progress{background-color:#3d9970;box-shadow:inset -1px 0 #3d9970,inset 0 -1px #3d9970,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-olive .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-olive .pace-progress{color:#3d9970}.pace-lime .pace .pace-progress{background:#01ff70}.pace-barber-shop-lime .pace{background:#2a2e30}.pace-barber-shop-lime .pace .pace-progress{background:#01ff70}.pace-barber-shop-lime .pace .pace-activity{background-image:linear-gradient(45deg,rgba(42,46,48,.2) 25%,transparent 0,transparent 50%,rgba(42,46,48,.2) 0,rgba(42,46,48,.2) 75%,transparent 0,transparent)}.pace-big-counter-lime .pace .pace-progress:after{color:rgba(1,255,112,.2)}.pace-bounce-lime .pace .pace-activity{background:#01ff70}.pace-center-atom-lime .pace-progress{height:100px;width:80px}.pace-center-atom-lime .pace-progress:before{background:#01ff70;color:#2a2e30;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-lime .pace-activity,.pace-center-atom-lime .pace-activity:after,.pace-center-atom-lime .pace-activity:before{border-color:#01ff70}.pace-center-circle-lime .pace .pace-progress{background:rgba(1,255,112,.8);color:#2a2e30}.pace-center-radar-lime .pace .pace-activity,.pace-center-radar-lime .pace .pace-activity:before{border-color:#01ff70 transparent transparent}.pace-center-simple-lime .pace{background:#2a2e30;border-color:#01ff70}.pace-center-simple-lime .pace .pace-progress{background:#01ff70}.pace-material-lime .pace{color:#01ff70}.pace-corner-indicator-lime .pace .pace-activity{background:#01ff70}.pace-corner-indicator-lime .pace .pace-activity:after,.pace-corner-indicator-lime .pace .pace-activity:before{border:5px solid #2a2e30}.pace-corner-indicator-lime .pace .pace-activity:before{border-right-color:rgba(1,255,112,.2);border-left-color:rgba(1,255,112,.2)}.pace-corner-indicator-lime .pace .pace-activity:after{border-top-color:rgba(1,255,112,.2);border-bottom-color:rgba(1,255,112,.2)}.pace-fill-left-lime .pace .pace-progress{background-color:rgba(1,255,112,.2)}.pace-flash-lime .pace .pace-progress{background:#01ff70}.pace-flash-lime .pace .pace-progress-inner{box-shadow:0 0 10px #01ff70,0 0 5px #01ff70}.pace-flash-lime .pace .pace-activity{border-top-color:#01ff70;border-left-color:#01ff70}.pace-loading-bar-lime .pace .pace-progress{background:#01ff70;color:#01ff70;box-shadow:120px 0 #2a2e30,240px 0 #2a2e30}.pace-loading-bar-lime .pace .pace-activity{box-shadow:inset 0 0 0 2px #01ff70,inset 0 0 0 7px #2a2e30}.pace-mac-osx-lime .pace .pace-progress{background-color:#01ff70;box-shadow:inset -1px 0 #01ff70,inset 0 -1px #01ff70,inset 0 2px rgba(42,46,48,.5),inset 0 6px rgba(42,46,48,.3)}.pace-mac-osx-lime .pace .pace-activity{background-image:radial-gradient(rgba(42,46,48,.65) 0,rgba(42,46,48,.15) 100%);height:12px}.pace-progress-color-lime .pace-progress{color:#01ff70}.pace-fuchsia .pace .pace-progress{background:#f012be}.pace-barber-shop-fuchsia .pace{background:#fff}.pace-barber-shop-fuchsia .pace .pace-progress{background:#f012be}.pace-barber-shop-fuchsia .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-fuchsia .pace .pace-progress:after{color:rgba(240,18,190,.2)}.pace-bounce-fuchsia .pace .pace-activity{background:#f012be}.pace-center-atom-fuchsia .pace-progress{height:100px;width:80px}.pace-center-atom-fuchsia .pace-progress:before{background:#f012be;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-fuchsia .pace-activity,.pace-center-atom-fuchsia .pace-activity:after,.pace-center-atom-fuchsia .pace-activity:before{border-color:#f012be}.pace-center-circle-fuchsia .pace .pace-progress{background:rgba(240,18,190,.8);color:#fff}.pace-center-radar-fuchsia .pace .pace-activity,.pace-center-radar-fuchsia .pace .pace-activity:before{border-color:#f012be transparent transparent}.pace-center-simple-fuchsia .pace{background:#fff;border-color:#f012be}.pace-center-simple-fuchsia .pace .pace-progress{background:#f012be}.pace-material-fuchsia .pace{color:#f012be}.pace-corner-indicator-fuchsia .pace .pace-activity{background:#f012be}.pace-corner-indicator-fuchsia .pace .pace-activity:after,.pace-corner-indicator-fuchsia .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-fuchsia .pace .pace-activity:before{border-right-color:rgba(240,18,190,.2);border-left-color:rgba(240,18,190,.2)}.pace-corner-indicator-fuchsia .pace .pace-activity:after{border-top-color:rgba(240,18,190,.2);border-bottom-color:rgba(240,18,190,.2)}.pace-fill-left-fuchsia .pace .pace-progress{background-color:rgba(240,18,190,.2)}.pace-flash-fuchsia .pace .pace-progress{background:#f012be}.pace-flash-fuchsia .pace .pace-progress-inner{box-shadow:0 0 10px #f012be,0 0 5px #f012be}.pace-flash-fuchsia .pace .pace-activity{border-top-color:#f012be;border-left-color:#f012be}.pace-loading-bar-fuchsia .pace .pace-progress{background:#f012be;color:#f012be;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-fuchsia .pace .pace-activity{box-shadow:inset 0 0 0 2px #f012be,inset 0 0 0 7px #fff}.pace-mac-osx-fuchsia .pace .pace-progress{background-color:#f012be;box-shadow:inset -1px 0 #f012be,inset 0 -1px #f012be,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-fuchsia .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-fuchsia .pace-progress{color:#f012be}.pace-maroon .pace .pace-progress{background:#d81b60}.pace-barber-shop-maroon .pace{background:#fff}.pace-barber-shop-maroon .pace .pace-progress{background:#d81b60}.pace-barber-shop-maroon .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-maroon .pace .pace-progress:after{color:rgba(216,27,96,.2)}.pace-bounce-maroon .pace .pace-activity{background:#d81b60}.pace-center-atom-maroon .pace-progress{height:100px;width:80px}.pace-center-atom-maroon .pace-progress:before{background:#d81b60;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-maroon .pace-activity,.pace-center-atom-maroon .pace-activity:after,.pace-center-atom-maroon .pace-activity:before{border-color:#d81b60}.pace-center-circle-maroon .pace .pace-progress{background:rgba(216,27,96,.8);color:#fff}.pace-center-radar-maroon .pace .pace-activity,.pace-center-radar-maroon .pace .pace-activity:before{border-color:#d81b60 transparent transparent}.pace-center-simple-maroon .pace{background:#fff;border-color:#d81b60}.pace-center-simple-maroon .pace .pace-progress{background:#d81b60}.pace-material-maroon .pace{color:#d81b60}.pace-corner-indicator-maroon .pace .pace-activity{background:#d81b60}.pace-corner-indicator-maroon .pace .pace-activity:after,.pace-corner-indicator-maroon .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-maroon .pace .pace-activity:before{border-right-color:rgba(216,27,96,.2);border-left-color:rgba(216,27,96,.2)}.pace-corner-indicator-maroon .pace .pace-activity:after{border-top-color:rgba(216,27,96,.2);border-bottom-color:rgba(216,27,96,.2)}.pace-fill-left-maroon .pace .pace-progress{background-color:rgba(216,27,96,.2)}.pace-flash-maroon .pace .pace-progress{background:#d81b60}.pace-flash-maroon .pace .pace-progress-inner{box-shadow:0 0 10px #d81b60,0 0 5px #d81b60}.pace-flash-maroon .pace .pace-activity{border-top-color:#d81b60;border-left-color:#d81b60}.pace-loading-bar-maroon .pace .pace-progress{background:#d81b60;color:#d81b60;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-maroon .pace .pace-activity{box-shadow:inset 0 0 0 2px #d81b60,inset 0 0 0 7px #fff}.pace-mac-osx-maroon .pace .pace-progress{background-color:#d81b60;box-shadow:inset -1px 0 #d81b60,inset 0 -1px #d81b60,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-maroon .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-maroon .pace-progress{color:#d81b60}.pace-blue .pace .pace-progress{background:#3085d6}.pace-barber-shop-blue .pace{background:#fff}.pace-barber-shop-blue .pace .pace-progress{background:#3085d6}.pace-barber-shop-blue .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-blue .pace .pace-progress:after{color:rgba(48,133,214,.2)}.pace-bounce-blue .pace .pace-activity{background:#3085d6}.pace-center-atom-blue .pace-progress{height:100px;width:80px}.pace-center-atom-blue .pace-progress:before{background:#3085d6;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-blue .pace-activity,.pace-center-atom-blue .pace-activity:after,.pace-center-atom-blue .pace-activity:before{border-color:#3085d6}.pace-center-circle-blue .pace .pace-progress{background:rgba(48,133,214,.8);color:#fff}.pace-center-radar-blue .pace .pace-activity,.pace-center-radar-blue .pace .pace-activity:before{border-color:#3085d6 transparent transparent}.pace-center-simple-blue .pace{background:#fff;border-color:#3085d6}.pace-center-simple-blue .pace .pace-progress{background:#3085d6}.pace-material-blue .pace{color:#3085d6}.pace-corner-indicator-blue .pace .pace-activity{background:#3085d6}.pace-corner-indicator-blue .pace .pace-activity:after,.pace-corner-indicator-blue .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-blue .pace .pace-activity:before{border-right-color:rgba(48,133,214,.2);border-left-color:rgba(48,133,214,.2)}.pace-corner-indicator-blue .pace .pace-activity:after{border-top-color:rgba(48,133,214,.2);border-bottom-color:rgba(48,133,214,.2)}.pace-fill-left-blue .pace .pace-progress{background-color:rgba(48,133,214,.2)}.pace-flash-blue .pace .pace-progress{background:#3085d6}.pace-flash-blue .pace .pace-progress-inner{box-shadow:0 0 10px #3085d6,0 0 5px #3085d6}.pace-flash-blue .pace .pace-activity{border-top-color:#3085d6;border-left-color:#3085d6}.pace-loading-bar-blue .pace .pace-progress{background:#3085d6;color:#3085d6;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-blue .pace .pace-activity{box-shadow:inset 0 0 0 2px #3085d6,inset 0 0 0 7px #fff}.pace-mac-osx-blue .pace .pace-progress{background-color:#3085d6;box-shadow:inset -1px 0 #3085d6,inset 0 -1px #3085d6,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-blue .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-blue .pace-progress{color:#3085d6}.pace-indigo .pace .pace-progress{background:#5c6bc6}.pace-barber-shop-indigo .pace{background:#fff}.pace-barber-shop-indigo .pace .pace-progress{background:#5c6bc6}.pace-barber-shop-indigo .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-indigo .pace .pace-progress:after{color:rgba(92,107,198,.2)}.pace-bounce-indigo .pace .pace-activity{background:#5c6bc6}.pace-center-atom-indigo .pace-progress{height:100px;width:80px}.pace-center-atom-indigo .pace-progress:before{background:#5c6bc6;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-indigo .pace-activity,.pace-center-atom-indigo .pace-activity:after,.pace-center-atom-indigo .pace-activity:before{border-color:#5c6bc6}.pace-center-circle-indigo .pace .pace-progress{background:rgba(92,107,198,.8);color:#fff}.pace-center-radar-indigo .pace .pace-activity,.pace-center-radar-indigo .pace .pace-activity:before{border-color:#5c6bc6 transparent transparent}.pace-center-simple-indigo .pace{background:#fff;border-color:#5c6bc6}.pace-center-simple-indigo .pace .pace-progress{background:#5c6bc6}.pace-material-indigo .pace{color:#5c6bc6}.pace-corner-indicator-indigo .pace .pace-activity{background:#5c6bc6}.pace-corner-indicator-indigo .pace .pace-activity:after,.pace-corner-indicator-indigo .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-indigo .pace .pace-activity:before{border-right-color:rgba(92,107,198,.2);border-left-color:rgba(92,107,198,.2)}.pace-corner-indicator-indigo .pace .pace-activity:after{border-top-color:rgba(92,107,198,.2);border-bottom-color:rgba(92,107,198,.2)}.pace-fill-left-indigo .pace .pace-progress{background-color:rgba(92,107,198,.2)}.pace-flash-indigo .pace .pace-progress{background:#5c6bc6}.pace-flash-indigo .pace .pace-progress-inner{box-shadow:0 0 10px #5c6bc6,0 0 5px #5c6bc6}.pace-flash-indigo .pace .pace-activity{border-top-color:#5c6bc6;border-left-color:#5c6bc6}.pace-loading-bar-indigo .pace .pace-progress{background:#5c6bc6;color:#5c6bc6;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-indigo .pace .pace-activity{box-shadow:inset 0 0 0 2px #5c6bc6,inset 0 0 0 7px #fff}.pace-mac-osx-indigo .pace .pace-progress{background-color:#5c6bc6;box-shadow:inset -1px 0 #5c6bc6,inset 0 -1px #5c6bc6,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-indigo .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-indigo .pace-progress{color:#5c6bc6}.pace-purple .pace .pace-progress{background:#6f42c1}.pace-barber-shop-purple .pace{background:#fff}.pace-barber-shop-purple .pace .pace-progress{background:#6f42c1}.pace-barber-shop-purple .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-purple .pace .pace-progress:after{color:rgba(111,66,193,.2)}.pace-bounce-purple .pace .pace-activity{background:#6f42c1}.pace-center-atom-purple .pace-progress{height:100px;width:80px}.pace-center-atom-purple .pace-progress:before{background:#6f42c1;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-purple .pace-activity,.pace-center-atom-purple .pace-activity:after,.pace-center-atom-purple .pace-activity:before{border-color:#6f42c1}.pace-center-circle-purple .pace .pace-progress{background:rgba(111,66,193,.8);color:#fff}.pace-center-radar-purple .pace .pace-activity,.pace-center-radar-purple .pace .pace-activity:before{border-color:#6f42c1 transparent transparent}.pace-center-simple-purple .pace{background:#fff;border-color:#6f42c1}.pace-center-simple-purple .pace .pace-progress{background:#6f42c1}.pace-material-purple .pace{color:#6f42c1}.pace-corner-indicator-purple .pace .pace-activity{background:#6f42c1}.pace-corner-indicator-purple .pace .pace-activity:after,.pace-corner-indicator-purple .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-purple .pace .pace-activity:before{border-right-color:rgba(111,66,193,.2);border-left-color:rgba(111,66,193,.2)}.pace-corner-indicator-purple .pace .pace-activity:after{border-top-color:rgba(111,66,193,.2);border-bottom-color:rgba(111,66,193,.2)}.pace-fill-left-purple .pace .pace-progress{background-color:rgba(111,66,193,.2)}.pace-flash-purple .pace .pace-progress{background:#6f42c1}.pace-flash-purple .pace .pace-progress-inner{box-shadow:0 0 10px #6f42c1,0 0 5px #6f42c1}.pace-flash-purple .pace .pace-activity{border-top-color:#6f42c1;border-left-color:#6f42c1}.pace-loading-bar-purple .pace .pace-progress{background:#6f42c1;color:#6f42c1;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-purple .pace .pace-activity{box-shadow:inset 0 0 0 2px #6f42c1,inset 0 0 0 7px #fff}.pace-mac-osx-purple .pace .pace-progress{background-color:#6f42c1;box-shadow:inset -1px 0 #6f42c1,inset 0 -1px #6f42c1,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-purple .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-purple .pace-progress{color:#6f42c1}.pace-pink .pace .pace-progress{background:#ff8acc}.pace-barber-shop-pink .pace{background:#2a2e30}.pace-barber-shop-pink .pace .pace-progress{background:#ff8acc}.pace-barber-shop-pink .pace .pace-activity{background-image:linear-gradient(45deg,rgba(42,46,48,.2) 25%,transparent 0,transparent 50%,rgba(42,46,48,.2) 0,rgba(42,46,48,.2) 75%,transparent 0,transparent)}.pace-big-counter-pink .pace .pace-progress:after{color:rgba(255,138,204,.2)}.pace-bounce-pink .pace .pace-activity{background:#ff8acc}.pace-center-atom-pink .pace-progress{height:100px;width:80px}.pace-center-atom-pink .pace-progress:before{background:#ff8acc;color:#2a2e30;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-pink .pace-activity,.pace-center-atom-pink .pace-activity:after,.pace-center-atom-pink .pace-activity:before{border-color:#ff8acc}.pace-center-circle-pink .pace .pace-progress{background:rgba(255,138,204,.8);color:#2a2e30}.pace-center-radar-pink .pace .pace-activity,.pace-center-radar-pink .pace .pace-activity:before{border-color:#ff8acc transparent transparent}.pace-center-simple-pink .pace{background:#2a2e30;border-color:#ff8acc}.pace-center-simple-pink .pace .pace-progress{background:#ff8acc}.pace-material-pink .pace{color:#ff8acc}.pace-corner-indicator-pink .pace .pace-activity{background:#ff8acc}.pace-corner-indicator-pink .pace .pace-activity:after,.pace-corner-indicator-pink .pace .pace-activity:before{border:5px solid #2a2e30}.pace-corner-indicator-pink .pace .pace-activity:before{border-right-color:rgba(255,138,204,.2);border-left-color:rgba(255,138,204,.2)}.pace-corner-indicator-pink .pace .pace-activity:after{border-top-color:rgba(255,138,204,.2);border-bottom-color:rgba(255,138,204,.2)}.pace-fill-left-pink .pace .pace-progress{background-color:rgba(255,138,204,.2)}.pace-flash-pink .pace .pace-progress{background:#ff8acc}.pace-flash-pink .pace .pace-progress-inner{box-shadow:0 0 10px #ff8acc,0 0 5px #ff8acc}.pace-flash-pink .pace .pace-activity{border-top-color:#ff8acc;border-left-color:#ff8acc}.pace-loading-bar-pink .pace .pace-progress{background:#ff8acc;color:#ff8acc;box-shadow:120px 0 #2a2e30,240px 0 #2a2e30}.pace-loading-bar-pink .pace .pace-activity{box-shadow:inset 0 0 0 2px #ff8acc,inset 0 0 0 7px #2a2e30}.pace-mac-osx-pink .pace .pace-progress{background-color:#ff8acc;box-shadow:inset -1px 0 #ff8acc,inset 0 -1px #ff8acc,inset 0 2px rgba(42,46,48,.5),inset 0 6px rgba(42,46,48,.3)}.pace-mac-osx-pink .pace .pace-activity{background-image:radial-gradient(rgba(42,46,48,.65) 0,rgba(42,46,48,.15) 100%);height:12px}.pace-progress-color-pink .pace-progress{color:#ff8acc}.pace-red .pace .pace-progress{background:#ea5455}.pace-barber-shop-red .pace{background:#fff}.pace-barber-shop-red .pace .pace-progress{background:#ea5455}.pace-barber-shop-red .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-red .pace .pace-progress:after{color:rgba(234,84,85,.2)}.pace-bounce-red .pace .pace-activity{background:#ea5455}.pace-center-atom-red .pace-progress{height:100px;width:80px}.pace-center-atom-red .pace-progress:before{background:#ea5455;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-red .pace-activity,.pace-center-atom-red .pace-activity:after,.pace-center-atom-red .pace-activity:before{border-color:#ea5455}.pace-center-circle-red .pace .pace-progress{background:rgba(234,84,85,.8);color:#fff}.pace-center-radar-red .pace .pace-activity,.pace-center-radar-red .pace .pace-activity:before{border-color:#ea5455 transparent transparent}.pace-center-simple-red .pace{background:#fff;border-color:#ea5455}.pace-center-simple-red .pace .pace-progress{background:#ea5455}.pace-material-red .pace{color:#ea5455}.pace-corner-indicator-red .pace .pace-activity{background:#ea5455}.pace-corner-indicator-red .pace .pace-activity:after,.pace-corner-indicator-red .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-red .pace .pace-activity:before{border-right-color:rgba(234,84,85,.2);border-left-color:rgba(234,84,85,.2)}.pace-corner-indicator-red .pace .pace-activity:after{border-top-color:rgba(234,84,85,.2);border-bottom-color:rgba(234,84,85,.2)}.pace-fill-left-red .pace .pace-progress{background-color:rgba(234,84,85,.2)}.pace-flash-red .pace .pace-progress{background:#ea5455}.pace-flash-red .pace .pace-progress-inner{box-shadow:0 0 10px #ea5455,0 0 5px #ea5455}.pace-flash-red .pace .pace-activity{border-top-color:#ea5455;border-left-color:#ea5455}.pace-loading-bar-red .pace .pace-progress{background:#ea5455;color:#ea5455;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-red .pace .pace-activity{box-shadow:inset 0 0 0 2px #ea5455,inset 0 0 0 7px #fff}.pace-mac-osx-red .pace .pace-progress{background-color:#ea5455;box-shadow:inset -1px 0 #ea5455,inset 0 -1px #ea5455,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-red .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-red .pace-progress{color:#ea5455}.pace-orange .pace .pace-progress{background:#dda451}.pace-barber-shop-orange .pace{background:#2a2e30}.pace-barber-shop-orange .pace .pace-progress{background:#dda451}.pace-barber-shop-orange .pace .pace-activity{background-image:linear-gradient(45deg,rgba(42,46,48,.2) 25%,transparent 0,transparent 50%,rgba(42,46,48,.2) 0,rgba(42,46,48,.2) 75%,transparent 0,transparent)}.pace-big-counter-orange .pace .pace-progress:after{color:rgba(221,164,81,.2)}.pace-bounce-orange .pace .pace-activity{background:#dda451}.pace-center-atom-orange .pace-progress{height:100px;width:80px}.pace-center-atom-orange .pace-progress:before{background:#dda451;color:#2a2e30;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-orange .pace-activity,.pace-center-atom-orange .pace-activity:after,.pace-center-atom-orange .pace-activity:before{border-color:#dda451}.pace-center-circle-orange .pace .pace-progress{background:rgba(221,164,81,.8);color:#2a2e30}.pace-center-radar-orange .pace .pace-activity,.pace-center-radar-orange .pace .pace-activity:before{border-color:#dda451 transparent transparent}.pace-center-simple-orange .pace{background:#2a2e30;border-color:#dda451}.pace-center-simple-orange .pace .pace-progress{background:#dda451}.pace-material-orange .pace{color:#dda451}.pace-corner-indicator-orange .pace .pace-activity{background:#dda451}.pace-corner-indicator-orange .pace .pace-activity:after,.pace-corner-indicator-orange .pace .pace-activity:before{border:5px solid #2a2e30}.pace-corner-indicator-orange .pace .pace-activity:before{border-right-color:rgba(221,164,81,.2);border-left-color:rgba(221,164,81,.2)}.pace-corner-indicator-orange .pace .pace-activity:after{border-top-color:rgba(221,164,81,.2);border-bottom-color:rgba(221,164,81,.2)}.pace-fill-left-orange .pace .pace-progress{background-color:rgba(221,164,81,.2)}.pace-flash-orange .pace .pace-progress{background:#dda451}.pace-flash-orange .pace .pace-progress-inner{box-shadow:0 0 10px #dda451,0 0 5px #dda451}.pace-flash-orange .pace .pace-activity{border-top-color:#dda451;border-left-color:#dda451}.pace-loading-bar-orange .pace .pace-progress{background:#dda451;color:#dda451;box-shadow:120px 0 #2a2e30,240px 0 #2a2e30}.pace-loading-bar-orange .pace .pace-activity{box-shadow:inset 0 0 0 2px #dda451,inset 0 0 0 7px #2a2e30}.pace-mac-osx-orange .pace .pace-progress{background-color:#dda451;box-shadow:inset -1px 0 #dda451,inset 0 -1px #dda451,inset 0 2px rgba(42,46,48,.5),inset 0 6px rgba(42,46,48,.3)}.pace-mac-osx-orange .pace .pace-activity{background-image:radial-gradient(rgba(42,46,48,.65) 0,rgba(42,46,48,.15) 100%);height:12px}.pace-progress-color-orange .pace-progress{color:#dda451}.pace-yellow .pace .pace-progress{background:#edc30e}.pace-barber-shop-yellow .pace{background:#2a2e30}.pace-barber-shop-yellow .pace .pace-progress{background:#edc30e}.pace-barber-shop-yellow .pace .pace-activity{background-image:linear-gradient(45deg,rgba(42,46,48,.2) 25%,transparent 0,transparent 50%,rgba(42,46,48,.2) 0,rgba(42,46,48,.2) 75%,transparent 0,transparent)}.pace-big-counter-yellow .pace .pace-progress:after{color:rgba(237,195,14,.2)}.pace-bounce-yellow .pace .pace-activity{background:#edc30e}.pace-center-atom-yellow .pace-progress{height:100px;width:80px}.pace-center-atom-yellow .pace-progress:before{background:#edc30e;color:#2a2e30;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-yellow .pace-activity,.pace-center-atom-yellow .pace-activity:after,.pace-center-atom-yellow .pace-activity:before{border-color:#edc30e}.pace-center-circle-yellow .pace .pace-progress{background:rgba(237,195,14,.8);color:#2a2e30}.pace-center-radar-yellow .pace .pace-activity,.pace-center-radar-yellow .pace .pace-activity:before{border-color:#edc30e transparent transparent}.pace-center-simple-yellow .pace{background:#2a2e30;border-color:#edc30e}.pace-center-simple-yellow .pace .pace-progress{background:#edc30e}.pace-material-yellow .pace{color:#edc30e}.pace-corner-indicator-yellow .pace .pace-activity{background:#edc30e}.pace-corner-indicator-yellow .pace .pace-activity:after,.pace-corner-indicator-yellow .pace .pace-activity:before{border:5px solid #2a2e30}.pace-corner-indicator-yellow .pace .pace-activity:before{border-right-color:rgba(237,195,14,.2);border-left-color:rgba(237,195,14,.2)}.pace-corner-indicator-yellow .pace .pace-activity:after{border-top-color:rgba(237,195,14,.2);border-bottom-color:rgba(237,195,14,.2)}.pace-fill-left-yellow .pace .pace-progress{background-color:rgba(237,195,14,.2)}.pace-flash-yellow .pace .pace-progress{background:#edc30e}.pace-flash-yellow .pace .pace-progress-inner{box-shadow:0 0 10px #edc30e,0 0 5px #edc30e}.pace-flash-yellow .pace .pace-activity{border-top-color:#edc30e;border-left-color:#edc30e}.pace-loading-bar-yellow .pace .pace-progress{background:#edc30e;color:#edc30e;box-shadow:120px 0 #2a2e30,240px 0 #2a2e30}.pace-loading-bar-yellow .pace .pace-activity{box-shadow:inset 0 0 0 2px #edc30e,inset 0 0 0 7px #2a2e30}.pace-mac-osx-yellow .pace .pace-progress{background-color:#edc30e;box-shadow:inset -1px 0 #edc30e,inset 0 -1px #edc30e,inset 0 2px rgba(42,46,48,.5),inset 0 6px rgba(42,46,48,.3)}.pace-mac-osx-yellow .pace .pace-activity{background-image:radial-gradient(rgba(42,46,48,.65) 0,rgba(42,46,48,.15) 100%);height:12px}.pace-progress-color-yellow .pace-progress{color:#edc30e}.pace-green .pace .pace-progress{background:#21b978}.pace-barber-shop-green .pace{background:#fff}.pace-barber-shop-green .pace .pace-progress{background:#21b978}.pace-barber-shop-green .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-green .pace .pace-progress:after{color:rgba(33,185,120,.2)}.pace-bounce-green .pace .pace-activity{background:#21b978}.pace-center-atom-green .pace-progress{height:100px;width:80px}.pace-center-atom-green .pace-progress:before{background:#21b978;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-green .pace-activity,.pace-center-atom-green .pace-activity:after,.pace-center-atom-green .pace-activity:before{border-color:#21b978}.pace-center-circle-green .pace .pace-progress{background:rgba(33,185,120,.8);color:#fff}.pace-center-radar-green .pace .pace-activity,.pace-center-radar-green .pace .pace-activity:before{border-color:#21b978 transparent transparent}.pace-center-simple-green .pace{background:#fff;border-color:#21b978}.pace-center-simple-green .pace .pace-progress{background:#21b978}.pace-material-green .pace{color:#21b978}.pace-corner-indicator-green .pace .pace-activity{background:#21b978}.pace-corner-indicator-green .pace .pace-activity:after,.pace-corner-indicator-green .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-green .pace .pace-activity:before{border-right-color:rgba(33,185,120,.2);border-left-color:rgba(33,185,120,.2)}.pace-corner-indicator-green .pace .pace-activity:after{border-top-color:rgba(33,185,120,.2);border-bottom-color:rgba(33,185,120,.2)}.pace-fill-left-green .pace .pace-progress{background-color:rgba(33,185,120,.2)}.pace-flash-green .pace .pace-progress{background:#21b978}.pace-flash-green .pace .pace-progress-inner{box-shadow:0 0 10px #21b978,0 0 5px #21b978}.pace-flash-green .pace .pace-activity{border-top-color:#21b978;border-left-color:#21b978}.pace-loading-bar-green .pace .pace-progress{background:#21b978;color:#21b978;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-green .pace .pace-activity{box-shadow:inset 0 0 0 2px #21b978,inset 0 0 0 7px #fff}.pace-mac-osx-green .pace .pace-progress{background-color:#21b978;box-shadow:inset -1px 0 #21b978,inset 0 -1px #21b978,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-green .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-green .pace-progress{color:#21b978}.pace-teal .pace .pace-progress{background:#20c997}.pace-barber-shop-teal .pace{background:#fff}.pace-barber-shop-teal .pace .pace-progress{background:#20c997}.pace-barber-shop-teal .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-teal .pace .pace-progress:after{color:rgba(32,201,151,.2)}.pace-bounce-teal .pace .pace-activity{background:#20c997}.pace-center-atom-teal .pace-progress{height:100px;width:80px}.pace-center-atom-teal .pace-progress:before{background:#20c997;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-teal .pace-activity,.pace-center-atom-teal .pace-activity:after,.pace-center-atom-teal .pace-activity:before{border-color:#20c997}.pace-center-circle-teal .pace .pace-progress{background:rgba(32,201,151,.8);color:#fff}.pace-center-radar-teal .pace .pace-activity,.pace-center-radar-teal .pace .pace-activity:before{border-color:#20c997 transparent transparent}.pace-center-simple-teal .pace{background:#fff;border-color:#20c997}.pace-center-simple-teal .pace .pace-progress{background:#20c997}.pace-material-teal .pace{color:#20c997}.pace-corner-indicator-teal .pace .pace-activity{background:#20c997}.pace-corner-indicator-teal .pace .pace-activity:after,.pace-corner-indicator-teal .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-teal .pace .pace-activity:before{border-right-color:rgba(32,201,151,.2);border-left-color:rgba(32,201,151,.2)}.pace-corner-indicator-teal .pace .pace-activity:after{border-top-color:rgba(32,201,151,.2);border-bottom-color:rgba(32,201,151,.2)}.pace-fill-left-teal .pace .pace-progress{background-color:rgba(32,201,151,.2)}.pace-flash-teal .pace .pace-progress{background:#20c997}.pace-flash-teal .pace .pace-progress-inner{box-shadow:0 0 10px #20c997,0 0 5px #20c997}.pace-flash-teal .pace .pace-activity{border-top-color:#20c997;border-left-color:#20c997}.pace-loading-bar-teal .pace .pace-progress{background:#20c997;color:#20c997;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-teal .pace .pace-activity{box-shadow:inset 0 0 0 2px #20c997,inset 0 0 0 7px #fff}.pace-mac-osx-teal .pace .pace-progress{background-color:#20c997;box-shadow:inset -1px 0 #20c997,inset 0 -1px #20c997,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-teal .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-teal .pace-progress{color:#20c997}.pace-cyan .pace .pace-progress{background:#7367f0}.pace-barber-shop-cyan .pace{background:#fff}.pace-barber-shop-cyan .pace .pace-progress{background:#7367f0}.pace-barber-shop-cyan .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-cyan .pace .pace-progress:after{color:rgba(115,103,240,.2)}.pace-bounce-cyan .pace .pace-activity{background:#7367f0}.pace-center-atom-cyan .pace-progress{height:100px;width:80px}.pace-center-atom-cyan .pace-progress:before{background:#7367f0;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-cyan .pace-activity,.pace-center-atom-cyan .pace-activity:after,.pace-center-atom-cyan .pace-activity:before{border-color:#7367f0}.pace-center-circle-cyan .pace .pace-progress{background:rgba(115,103,240,.8);color:#fff}.pace-center-radar-cyan .pace .pace-activity,.pace-center-radar-cyan .pace .pace-activity:before{border-color:#7367f0 transparent transparent}.pace-center-simple-cyan .pace{background:#fff;border-color:#7367f0}.pace-center-simple-cyan .pace .pace-progress{background:#7367f0}.pace-material-cyan .pace{color:#7367f0}.pace-corner-indicator-cyan .pace .pace-activity{background:#7367f0}.pace-corner-indicator-cyan .pace .pace-activity:after,.pace-corner-indicator-cyan .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-cyan .pace .pace-activity:before{border-right-color:rgba(115,103,240,.2);border-left-color:rgba(115,103,240,.2)}.pace-corner-indicator-cyan .pace .pace-activity:after{border-top-color:rgba(115,103,240,.2);border-bottom-color:rgba(115,103,240,.2)}.pace-fill-left-cyan .pace .pace-progress{background-color:rgba(115,103,240,.2)}.pace-flash-cyan .pace .pace-progress{background:#7367f0}.pace-flash-cyan .pace .pace-progress-inner{box-shadow:0 0 10px #7367f0,0 0 5px #7367f0}.pace-flash-cyan .pace .pace-activity{border-top-color:#7367f0;border-left-color:#7367f0}.pace-loading-bar-cyan .pace .pace-progress{background:#7367f0;color:#7367f0;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-cyan .pace .pace-activity{box-shadow:inset 0 0 0 2px #7367f0,inset 0 0 0 7px #fff}.pace-mac-osx-cyan .pace .pace-progress{background-color:#7367f0;box-shadow:inset -1px 0 #7367f0,inset 0 -1px #7367f0,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-cyan .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-cyan .pace-progress{color:#7367f0}.pace-white .pace .pace-progress{background:#fff}.pace-barber-shop-white .pace{background:#2a2e30}.pace-barber-shop-white .pace .pace-progress{background:#fff}.pace-barber-shop-white .pace .pace-activity{background-image:linear-gradient(45deg,rgba(42,46,48,.2) 25%,transparent 0,transparent 50%,rgba(42,46,48,.2) 0,rgba(42,46,48,.2) 75%,transparent 0,transparent)}.pace-big-counter-white .pace .pace-progress:after{color:hsla(0,0%,100%,.2)}.pace-bounce-white .pace .pace-activity{background:#fff}.pace-center-atom-white .pace-progress{height:100px;width:80px}.pace-center-atom-white .pace-progress:before{background:#fff;color:#2a2e30;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-white .pace-activity,.pace-center-atom-white .pace-activity:after,.pace-center-atom-white .pace-activity:before{border-color:#fff}.pace-center-circle-white .pace .pace-progress{background:hsla(0,0%,100%,.8);color:#2a2e30}.pace-center-radar-white .pace .pace-activity,.pace-center-radar-white .pace .pace-activity:before{border-color:#fff transparent transparent}.pace-center-simple-white .pace{background:#2a2e30;border-color:#fff}.pace-center-simple-white .pace .pace-progress{background:#fff}.pace-material-white .pace{color:#fff}.pace-corner-indicator-white .pace .pace-activity{background:#fff}.pace-corner-indicator-white .pace .pace-activity:after,.pace-corner-indicator-white .pace .pace-activity:before{border:5px solid #2a2e30}.pace-corner-indicator-white .pace .pace-activity:before{border-right-color:hsla(0,0%,100%,.2);border-left-color:hsla(0,0%,100%,.2)}.pace-corner-indicator-white .pace .pace-activity:after{border-top-color:hsla(0,0%,100%,.2);border-bottom-color:hsla(0,0%,100%,.2)}.pace-fill-left-white .pace .pace-progress{background-color:hsla(0,0%,100%,.2)}.pace-flash-white .pace .pace-progress{background:#fff}.pace-flash-white .pace .pace-progress-inner{box-shadow:0 0 10px #fff,0 0 5px #fff}.pace-flash-white .pace .pace-activity{border-top-color:#fff;border-left-color:#fff}.pace-loading-bar-white .pace .pace-progress{background:#fff;color:#fff;box-shadow:120px 0 #2a2e30,240px 0 #2a2e30}.pace-loading-bar-white .pace .pace-activity{box-shadow:inset 0 0 0 2px #fff,inset 0 0 0 7px #2a2e30}.pace-mac-osx-white .pace .pace-progress{background-color:#fff;box-shadow:inset -1px 0 #fff,inset 0 -1px #fff,inset 0 2px rgba(42,46,48,.5),inset 0 6px rgba(42,46,48,.3)}.pace-mac-osx-white .pace .pace-activity{background-image:radial-gradient(rgba(42,46,48,.65) 0,rgba(42,46,48,.15) 100%);height:12px}.pace-progress-color-white .pace-progress{color:#fff}.pace-gray .pace .pace-progress{background:#b8c2cc}.pace-barber-shop-gray .pace{background:#2a2e30}.pace-barber-shop-gray .pace .pace-progress{background:#b8c2cc}.pace-barber-shop-gray .pace .pace-activity{background-image:linear-gradient(45deg,rgba(42,46,48,.2) 25%,transparent 0,transparent 50%,rgba(42,46,48,.2) 0,rgba(42,46,48,.2) 75%,transparent 0,transparent)}.pace-big-counter-gray .pace .pace-progress:after{color:rgba(184,194,204,.2)}.pace-bounce-gray .pace .pace-activity{background:#b8c2cc}.pace-center-atom-gray .pace-progress{height:100px;width:80px}.pace-center-atom-gray .pace-progress:before{background:#b8c2cc;color:#2a2e30;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-gray .pace-activity,.pace-center-atom-gray .pace-activity:after,.pace-center-atom-gray .pace-activity:before{border-color:#b8c2cc}.pace-center-circle-gray .pace .pace-progress{background:rgba(184,194,204,.8);color:#2a2e30}.pace-center-radar-gray .pace .pace-activity,.pace-center-radar-gray .pace .pace-activity:before{border-color:#b8c2cc transparent transparent}.pace-center-simple-gray .pace{background:#2a2e30;border-color:#b8c2cc}.pace-center-simple-gray .pace .pace-progress{background:#b8c2cc}.pace-material-gray .pace{color:#b8c2cc}.pace-corner-indicator-gray .pace .pace-activity{background:#b8c2cc}.pace-corner-indicator-gray .pace .pace-activity:after,.pace-corner-indicator-gray .pace .pace-activity:before{border:5px solid #2a2e30}.pace-corner-indicator-gray .pace .pace-activity:before{border-right-color:rgba(184,194,204,.2);border-left-color:rgba(184,194,204,.2)}.pace-corner-indicator-gray .pace .pace-activity:after{border-top-color:rgba(184,194,204,.2);border-bottom-color:rgba(184,194,204,.2)}.pace-fill-left-gray .pace .pace-progress{background-color:rgba(184,194,204,.2)}.pace-flash-gray .pace .pace-progress{background:#b8c2cc}.pace-flash-gray .pace .pace-progress-inner{box-shadow:0 0 10px #b8c2cc,0 0 5px #b8c2cc}.pace-flash-gray .pace .pace-activity{border-top-color:#b8c2cc;border-left-color:#b8c2cc}.pace-loading-bar-gray .pace .pace-progress{background:#b8c2cc;color:#b8c2cc;box-shadow:120px 0 #2a2e30,240px 0 #2a2e30}.pace-loading-bar-gray .pace .pace-activity{box-shadow:inset 0 0 0 2px #b8c2cc,inset 0 0 0 7px #2a2e30}.pace-mac-osx-gray .pace .pace-progress{background-color:#b8c2cc;box-shadow:inset -1px 0 #b8c2cc,inset 0 -1px #b8c2cc,inset 0 2px rgba(42,46,48,.5),inset 0 6px rgba(42,46,48,.3)}.pace-mac-osx-gray .pace .pace-activity{background-image:radial-gradient(rgba(42,46,48,.65) 0,rgba(42,46,48,.15) 100%);height:12px}.pace-progress-color-gray .pace-progress{color:#b8c2cc}.pace-gray-dark .pace .pace-progress{background:#1e1e1e}.pace-barber-shop-gray-dark .pace{background:#fff}.pace-barber-shop-gray-dark .pace .pace-progress{background:#1e1e1e}.pace-barber-shop-gray-dark .pace .pace-activity{background-image:linear-gradient(45deg,hsla(0,0%,100%,.2) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.2) 0,hsla(0,0%,100%,.2) 75%,transparent 0,transparent)}.pace-big-counter-gray-dark .pace .pace-progress:after{color:rgba(30,30,30,.2)}.pace-bounce-gray-dark .pace .pace-activity{background:#1e1e1e}.pace-center-atom-gray-dark .pace-progress{height:100px;width:80px}.pace-center-atom-gray-dark .pace-progress:before{background:#1e1e1e;color:#fff;font-size:.8rem;line-height:.7rem;padding-top:17%}.pace-center-atom-gray-dark .pace-activity,.pace-center-atom-gray-dark .pace-activity:after,.pace-center-atom-gray-dark .pace-activity:before{border-color:#1e1e1e}.pace-center-circle-gray-dark .pace .pace-progress{background:rgba(30,30,30,.8);color:#fff}.pace-center-radar-gray-dark .pace .pace-activity,.pace-center-radar-gray-dark .pace .pace-activity:before{border-color:#1e1e1e transparent transparent}.pace-center-simple-gray-dark .pace{background:#fff;border-color:#1e1e1e}.pace-center-simple-gray-dark .pace .pace-progress{background:#1e1e1e}.pace-material-gray-dark .pace{color:#1e1e1e}.pace-corner-indicator-gray-dark .pace .pace-activity{background:#1e1e1e}.pace-corner-indicator-gray-dark .pace .pace-activity:after,.pace-corner-indicator-gray-dark .pace .pace-activity:before{border:5px solid #fff}.pace-corner-indicator-gray-dark .pace .pace-activity:before{border-right-color:rgba(30,30,30,.2);border-left-color:rgba(30,30,30,.2)}.pace-corner-indicator-gray-dark .pace .pace-activity:after{border-top-color:rgba(30,30,30,.2);border-bottom-color:rgba(30,30,30,.2)}.pace-fill-left-gray-dark .pace .pace-progress{background-color:rgba(30,30,30,.2)}.pace-flash-gray-dark .pace .pace-progress{background:#1e1e1e}.pace-flash-gray-dark .pace .pace-progress-inner{box-shadow:0 0 10px #1e1e1e,0 0 5px #1e1e1e}.pace-flash-gray-dark .pace .pace-activity{border-top-color:#1e1e1e;border-left-color:#1e1e1e}.pace-loading-bar-gray-dark .pace .pace-progress{background:#1e1e1e;color:#1e1e1e;box-shadow:120px 0 #fff,240px 0 #fff}.pace-loading-bar-gray-dark .pace .pace-activity{box-shadow:inset 0 0 0 2px #1e1e1e,inset 0 0 0 7px #fff}.pace-mac-osx-gray-dark .pace .pace-progress{background-color:#1e1e1e;box-shadow:inset -1px 0 #1e1e1e,inset 0 -1px #1e1e1e,inset 0 2px hsla(0,0%,100%,.5),inset 0 6px hsla(0,0%,100%,.3)}.pace-mac-osx-gray-dark .pace .pace-activity{background-image:radial-gradient(hsla(0,0%,100%,.65) 0,hsla(0,0%,100%,.15) 100%);height:12px}.pace-progress-color-gray-dark .pace-progress{color:#1e1e1e}.jqstooltip{height:auto!important;padding:5px!important;width:auto!important}.connectedSortable{min-height:100px}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sort-highlight{background:#babfc7;border:1px dashed #dae1e7;margin-bottom:10px}.chart{overflow:hidden;position:relative}.border-transparent{border-color:transparent!important}.description-block{display:block;margin:10px 0;text-align:center}.description-block.margin-bottom{margin-bottom:25px}.description-block>.description-header{font-size:16px;font-weight:600;margin:0;padding:0}.description-block>.description-text{text-transform:uppercase}.description-block .description-icon{font-size:16px}.list-group-unbordered>.list-group-item{border-left:0;border-radius:0;border-right:0;padding-left:0;padding-right:0}.list-header{color:#b8c2cc;font-size:15px;font-weight:700;padding:10px 4px}.list-seperator{background:rgba(34,41,47,.125);height:1px;margin:15px 0 9px}.list-link>a{color:#b8c2cc;padding:4px}.list-link>a:hover{color:#2a2e30}.user-block{float:left}.user-block img{float:left;height:40px;width:40px}.user-block .comment,.user-block .description,.user-block .username{display:block;margin-left:50px}.user-block .username{font-size:16px;font-weight:600;margin-top:-1px}.user-block .description{color:#b8c2cc;font-size:13px;margin-top:-3px}.user-block.user-block-sm img{width:1.875rem;height:1.875rem}.user-block.user-block-sm .comment,.user-block.user-block-sm .description,.user-block.user-block-sm .username{margin-left:40px}.user-block.user-block-sm .username{font-size:14px}.img-lg,.img-md,.img-sm{float:left}.img-sm{height:1.875rem;width:1.875rem}.img-sm+.img-push{margin-left:2.5rem}.img-md{width:3.75rem;height:3.75rem}.img-md+.img-push{margin-left:4.375rem}.img-lg{width:6.25rem;height:6.25rem}.img-lg+.img-push{margin-left:6.875rem}.img-bordered{border:3px solid #adb5bd;padding:3px}.img-bordered-sm{border:2px solid #adb5bd;padding:2px}.img-rounded{border-radius:.5rem}.img-circle{border-radius:50%}.img-size-32,.img-size-50,.img-size-64{height:auto}.img-size-64{width:64px}.img-size-50{width:50px}.img-size-32{width:32px}.size-32,.size-40,.size-50{display:block;text-align:center}.size-32{height:32px;line-height:32px;width:32px}.size-40{height:40px;line-height:40px;width:40px}.size-50{height:50px;line-height:50px;width:50px}.attachment-block{background:#babfc7;border:1px solid rgba(34,41,47,.125);margin-bottom:10px;padding:5px}.attachment-block .attachment-img{float:left;height:auto;max-height:100px;max-width:100px}.attachment-block .attachment-pushed{margin-left:110px}.attachment-block .attachment-heading{margin:0}.attachment-block .attachment-text{color:#4e5154}.card>.loading-img,.card>.overlay,.info-box>.loading-img,.info-box>.overlay,.overlay-wrapper>.loading-img,.overlay-wrapper>.overlay,.small-box>.loading-img,.small-box>.overlay{height:100%;left:0;position:absolute;top:0;width:100%}.card .overlay,.info-box .overlay,.overlay-wrapper .overlay,.small-box .overlay{border-radius:.5rem;align-items:center;background:hsla(0,0%,100%,.7);display:flex;justify-content:center;z-index:50}.card .overlay>.fa,.card .overlay>.fab,.card .overlay>.far,.card .overlay>.fas,.card .overlay>.glyphicon,.card .overlay>.ion,.info-box .overlay>.fa,.info-box .overlay>.fab,.info-box .overlay>.far,.info-box .overlay>.fas,.info-box .overlay>.glyphicon,.info-box .overlay>.ion,.overlay-wrapper .overlay>.fa,.overlay-wrapper .overlay>.fab,.overlay-wrapper .overlay>.far,.overlay-wrapper .overlay>.fas,.overlay-wrapper .overlay>.glyphicon,.overlay-wrapper .overlay>.ion,.small-box .overlay>.fa,.small-box .overlay>.fab,.small-box .overlay>.far,.small-box .overlay>.fas,.small-box .overlay>.glyphicon,.small-box .overlay>.ion{color:#1e1e1e}.card .overlay.dark,.info-box .overlay.dark,.overlay-wrapper .overlay.dark,.small-box .overlay.dark{background:rgba(34,41,47,.5)}.card .overlay.dark>.fa,.card .overlay.dark>.fab,.card .overlay.dark>.far,.card .overlay.dark>.fas,.card .overlay.dark>.glyphicon,.card .overlay.dark>.ion,.info-box .overlay.dark>.fa,.info-box .overlay.dark>.fab,.info-box .overlay.dark>.far,.info-box .overlay.dark>.fas,.info-box .overlay.dark>.glyphicon,.info-box .overlay.dark>.ion,.overlay-wrapper .overlay.dark>.fa,.overlay-wrapper .overlay.dark>.fab,.overlay-wrapper .overlay.dark>.far,.overlay-wrapper .overlay.dark>.fas,.overlay-wrapper .overlay.dark>.glyphicon,.overlay-wrapper .overlay.dark>.ion,.small-box .overlay.dark>.fa,.small-box .overlay.dark>.fab,.small-box .overlay.dark>.far,.small-box .overlay.dark>.fas,.small-box .overlay.dark>.glyphicon,.small-box .overlay.dark>.ion{color:#636363}.tab-pane>.overlay-wrapper{position:relative}.tab-pane>.overlay-wrapper>.overlay{border-top-left-radius:0;border-top-right-radius:0;flex-direction:column;margin-top:-1.25rem;margin-left:-1.25rem;height:calc(100% + 2.5rem);width:calc(100% + 2.5rem)}.tab-pane>.overlay-wrapper>.overlay.dark{color:#fff}.ribbon-wrapper{height:70px;overflow:hidden;position:absolute;right:-2px;top:-2px;width:70px;z-index:10}.ribbon-wrapper.ribbon-lg{height:120px;width:120px}.ribbon-wrapper.ribbon-lg .ribbon{right:0;top:26px;width:160px}.ribbon-wrapper.ribbon-xl{height:180px;width:180px}.ribbon-wrapper.ribbon-xl .ribbon{right:4px;top:47px;width:240px}.ribbon-wrapper .ribbon{box-shadow:0 0 3px rgba(34,41,47,.3);font-size:.8rem;line-height:100%;padding:.375rem 0;position:relative;right:-2px;text-align:center;text-shadow:0 -1px 0 rgba(34,41,47,.4);text-transform:uppercase;top:10px;transform:rotate(45deg);width:90px}.ribbon-wrapper .ribbon:after,.ribbon-wrapper .ribbon:before{border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #9e9e9e;bottom:-3px;content:"";position:absolute}.ribbon-wrapper .ribbon:before{left:0}.ribbon-wrapper .ribbon:after{right:0}.back-to-top{bottom:1.25rem;position:fixed;right:1.25rem;z-index:1032}.back-to-top:focus{box-shadow:none}pre{padding:.75rem}blockquote{background:#fff;border-left:.7rem solid #586cb1;margin:1.5em .7rem;padding:.5em .7rem}.box blockquote{background:#ededed}blockquote p:last-child{margin-bottom:0}blockquote h1,blockquote h2,blockquote h3,blockquote h4,blockquote h5,blockquote h6{color:#586cb1;font-size:1.25rem;font-weight:600}blockquote.quote-primary{border-color:#586cb1}blockquote.quote-primary h1,blockquote.quote-primary h2,blockquote.quote-primary h3,blockquote.quote-primary h4,blockquote.quote-primary h5,blockquote.quote-primary h6{color:#586cb1}blockquote.quote-secondary{border-color:#b8c2cc}blockquote.quote-secondary h1,blockquote.quote-secondary h2,blockquote.quote-secondary h3,blockquote.quote-secondary h4,blockquote.quote-secondary h5,blockquote.quote-secondary h6{color:#b8c2cc}blockquote.quote-success{border-color:#21b978}blockquote.quote-success h1,blockquote.quote-success h2,blockquote.quote-success h3,blockquote.quote-success h4,blockquote.quote-success h5,blockquote.quote-success h6{color:#21b978}blockquote.quote-info{border-color:#4277cf}blockquote.quote-info h1,blockquote.quote-info h2,blockquote.quote-info h3,blockquote.quote-info h4,blockquote.quote-info h5,blockquote.quote-info h6{color:#4277cf}blockquote.quote-warning{border-color:#dda451}blockquote.quote-warning h1,blockquote.quote-warning h2,blockquote.quote-warning h3,blockquote.quote-warning h4,blockquote.quote-warning h5,blockquote.quote-warning h6{color:#dda451}blockquote.quote-danger{border-color:#ea5455}blockquote.quote-danger h1,blockquote.quote-danger h2,blockquote.quote-danger h3,blockquote.quote-danger h4,blockquote.quote-danger h5,blockquote.quote-danger h6{color:#ea5455}blockquote.quote-light{border-color:#f7f7f9}blockquote.quote-light h1,blockquote.quote-light h2,blockquote.quote-light h3,blockquote.quote-light h4,blockquote.quote-light h5,blockquote.quote-light h6{color:#f7f7f9}blockquote.quote-dark{border-color:#22292f}blockquote.quote-dark h1,blockquote.quote-dark h2,blockquote.quote-dark h3,blockquote.quote-dark h4,blockquote.quote-dark h5,blockquote.quote-dark h6{color:#22292f}blockquote.quote-lightblue{border-color:#3c8dbc}blockquote.quote-lightblue h1,blockquote.quote-lightblue h2,blockquote.quote-lightblue h3,blockquote.quote-lightblue h4,blockquote.quote-lightblue h5,blockquote.quote-lightblue h6{color:#3c8dbc}blockquote.quote-navy{border-color:#001f3f}blockquote.quote-navy h1,blockquote.quote-navy h2,blockquote.quote-navy h3,blockquote.quote-navy h4,blockquote.quote-navy h5,blockquote.quote-navy h6{color:#001f3f}blockquote.quote-olive{border-color:#3d9970}blockquote.quote-olive h1,blockquote.quote-olive h2,blockquote.quote-olive h3,blockquote.quote-olive h4,blockquote.quote-olive h5,blockquote.quote-olive h6{color:#3d9970}blockquote.quote-lime{border-color:#01ff70}blockquote.quote-lime h1,blockquote.quote-lime h2,blockquote.quote-lime h3,blockquote.quote-lime h4,blockquote.quote-lime h5,blockquote.quote-lime h6{color:#01ff70}blockquote.quote-fuchsia{border-color:#f012be}blockquote.quote-fuchsia h1,blockquote.quote-fuchsia h2,blockquote.quote-fuchsia h3,blockquote.quote-fuchsia h4,blockquote.quote-fuchsia h5,blockquote.quote-fuchsia h6{color:#f012be}blockquote.quote-maroon{border-color:#d81b60}blockquote.quote-maroon h1,blockquote.quote-maroon h2,blockquote.quote-maroon h3,blockquote.quote-maroon h4,blockquote.quote-maroon h5,blockquote.quote-maroon h6{color:#d81b60}blockquote.quote-blue{border-color:#3085d6}blockquote.quote-blue h1,blockquote.quote-blue h2,blockquote.quote-blue h3,blockquote.quote-blue h4,blockquote.quote-blue h5,blockquote.quote-blue h6{color:#3085d6}blockquote.quote-indigo{border-color:#5c6bc6}blockquote.quote-indigo h1,blockquote.quote-indigo h2,blockquote.quote-indigo h3,blockquote.quote-indigo h4,blockquote.quote-indigo h5,blockquote.quote-indigo h6{color:#5c6bc6}blockquote.quote-purple{border-color:#6f42c1}blockquote.quote-purple h1,blockquote.quote-purple h2,blockquote.quote-purple h3,blockquote.quote-purple h4,blockquote.quote-purple h5,blockquote.quote-purple h6{color:#6f42c1}blockquote.quote-pink{border-color:#ff8acc}blockquote.quote-pink h1,blockquote.quote-pink h2,blockquote.quote-pink h3,blockquote.quote-pink h4,blockquote.quote-pink h5,blockquote.quote-pink h6{color:#ff8acc}blockquote.quote-red{border-color:#ea5455}blockquote.quote-red h1,blockquote.quote-red h2,blockquote.quote-red h3,blockquote.quote-red h4,blockquote.quote-red h5,blockquote.quote-red h6{color:#ea5455}blockquote.quote-orange{border-color:#dda451}blockquote.quote-orange h1,blockquote.quote-orange h2,blockquote.quote-orange h3,blockquote.quote-orange h4,blockquote.quote-orange h5,blockquote.quote-orange h6{color:#dda451}blockquote.quote-yellow{border-color:#edc30e}blockquote.quote-yellow h1,blockquote.quote-yellow h2,blockquote.quote-yellow h3,blockquote.quote-yellow h4,blockquote.quote-yellow h5,blockquote.quote-yellow h6{color:#edc30e}blockquote.quote-green{border-color:#21b978}blockquote.quote-green h1,blockquote.quote-green h2,blockquote.quote-green h3,blockquote.quote-green h4,blockquote.quote-green h5,blockquote.quote-green h6{color:#21b978}blockquote.quote-teal{border-color:#20c997}blockquote.quote-teal h1,blockquote.quote-teal h2,blockquote.quote-teal h3,blockquote.quote-teal h4,blockquote.quote-teal h5,blockquote.quote-teal h6{color:#20c997}blockquote.quote-cyan{border-color:#7367f0}blockquote.quote-cyan h1,blockquote.quote-cyan h2,blockquote.quote-cyan h3,blockquote.quote-cyan h4,blockquote.quote-cyan h5,blockquote.quote-cyan h6{color:#7367f0}blockquote.quote-white{border-color:#fff}blockquote.quote-white h1,blockquote.quote-white h2,blockquote.quote-white h3,blockquote.quote-white h4,blockquote.quote-white h5,blockquote.quote-white h6{color:#fff}blockquote.quote-gray{border-color:#b8c2cc}blockquote.quote-gray h1,blockquote.quote-gray h2,blockquote.quote-gray h3,blockquote.quote-gray h4,blockquote.quote-gray h5,blockquote.quote-gray h6{color:#b8c2cc}blockquote.quote-gray-dark{border-color:#1e1e1e}blockquote.quote-gray-dark h1,blockquote.quote-gray-dark h2,blockquote.quote-gray-dark h3,blockquote.quote-gray-dark h4,blockquote.quote-gray-dark h5,blockquote.quote-gray-dark h6{color:#1e1e1e}.tab-custom-content{border-top:1px solid #dae1e7;margin-top:.5rem;padding-top:.5rem}.nav+.tab-custom-content{border-top:none;border-bottom:1px solid #dae1e7;margin-top:0;margin-bottom:.5rem;padding-bottom:.5rem}.badge-btn{border-radius:.15rem;font-size:.75rem;font-weight:400;padding:.25rem .5rem}.badge-btn.badge-pill{padding:.375rem .6rem}@media print{.content-header,.main-header,.main-sidebar,.no-print{display:none!important}.content-wrapper,.main-footer{transform:translate(0);margin-left:0!important;min-height:0!important}.layout-fixed .content-wrapper{padding-top:0!important}.invoice{border:0;margin:0;padding:0;width:100%}.invoice-col{float:left;width:33.3333333%}.table-responsive{overflow:auto}.table-responsive>.table tr td,.table-responsive>.table tr th{white-space:normal!important}}.text-bold,.text-bold.table td,.text-bold.table th{font-weight:700}.text-xs{font-size:.75rem!important}.text-md,.text-sm{font-size:1rem!important}.text-lg{font-size:2rem!important}.text-xl{font-size:1.5rem!important}.text-lightblue{color:#3c8dbc}.text-navy{color:#001f3f}.text-olive{color:#3d9970}.text-lime{color:#01ff70}.text-fuchsia{color:#f012be}.text-maroon{color:#d81b60}.text-blue{color:#3085d6}.text-indigo{color:#5c6bc6}.text-purple{color:#6f42c1}.text-pink{color:#ff8acc}.text-red{color:#ea5455}.text-orange{color:#dda451}.text-yellow{color:#edc30e}.text-green{color:#21b978}.text-teal{color:#20c997}.text-cyan{color:#7367f0}.text-white{color:#fff}.text-gray{color:#b8c2cc}.text-gray-dark{color:#1e1e1e}.elevation-0{box-shadow:none!important}.elevation-1{box-shadow:0 1px 3px rgba(34,41,47,.12),0 1px 2px rgba(34,41,47,.24)!important}.elevation-2{box-shadow:0 3px 6px rgba(34,41,47,.16),0 3px 6px rgba(34,41,47,.23)!important}.elevation-3{box-shadow:0 10px 20px rgba(34,41,47,.19),0 6px 6px rgba(34,41,47,.23)!important}.elevation-4{box-shadow:0 14px 28px rgba(34,41,47,.25),0 10px 10px rgba(34,41,47,.22)!important}.elevation-5{box-shadow:0 19px 38px rgba(34,41,47,.3),0 15px 12px rgba(34,41,47,.22)!important}.bg-primary{background-color:#586cb1!important}.bg-primary,.bg-primary>a{color:#fff!important}.bg-primary.btn:hover{border-color:#445692;color:#ececec}.bg-primary.btn.active,.bg-primary.btn:active,.bg-primary.btn:not(:disabled):not(.disabled).active,.bg-primary.btn:not(:disabled):not(.disabled):active{background-color:#445692!important;border-color:#405189;color:#fff}.bg-secondary{background-color:#b8c2cc!important}.bg-secondary,.bg-secondary>a{color:#2a2e30!important}.bg-secondary.btn:hover{border-color:#9aa9b7;color:#181a1c}.bg-secondary.btn.active,.bg-secondary.btn:active,.bg-secondary.btn:not(:disabled):not(.disabled).active,.bg-secondary.btn:not(:disabled):not(.disabled):active{background-color:#9aa9b7!important;border-color:#93a2b1;color:#2a2e30}.bg-success{background-color:#21b978!important}.bg-success,.bg-success>a{color:#fff!important}.bg-success.btn:hover{border-color:#198e5c;color:#ececec}.bg-success.btn.active,.bg-success.btn:active,.bg-success.btn:not(:disabled):not(.disabled).active,.bg-success.btn:not(:disabled):not(.disabled):active{background-color:#198e5c!important;border-color:#178355;color:#fff}.bg-info{background-color:#4277cf!important}.bg-info,.bg-info>a{color:#fff!important}.bg-info.btn:hover{border-color:#2d5fb1;color:#ececec}.bg-info.btn.active,.bg-info.btn:active,.bg-info.btn:not(:disabled):not(.disabled).active,.bg-info.btn:not(:disabled):not(.disabled):active{background-color:#2d5fb1!important;border-color:#2a59a7;color:#fff}.bg-warning{background-color:#dda451!important}.bg-warning,.bg-warning>a{color:#2a2e30!important}.bg-warning.btn:hover{border-color:#d28d29;color:#181a1c}.bg-warning.btn.active,.bg-warning.btn:active,.bg-warning.btn:not(:disabled):not(.disabled).active,.bg-warning.btn:not(:disabled):not(.disabled):active{background-color:#d28d29!important;border-color:#c78627;color:#2a2e30}.bg-danger{background-color:#ea5455!important}.bg-danger,.bg-danger>a{color:#fff!important}.bg-danger.btn:hover{border-color:#e42728;color:#ececec}.bg-danger.btn.active,.bg-danger.btn:active,.bg-danger.btn:not(:disabled):not(.disabled).active,.bg-danger.btn:not(:disabled):not(.disabled):active{background-color:#e42728!important;border-color:#e21c1d;color:#fff}.bg-light{background-color:#f7f7f9!important}.bg-light,.bg-light>a{color:#2a2e30!important}.bg-light.btn:hover{border-color:#dadae3;color:#181a1c}.bg-light.btn.active,.bg-light.btn:active,.bg-light.btn:not(:disabled):not(.disabled).active,.bg-light.btn:not(:disabled):not(.disabled):active{background-color:#dadae3!important;border-color:#d3d3de;color:#2a2e30}.bg-dark{background-color:#22292f!important}.bg-dark,.bg-dark>a{color:#fff!important}.bg-dark.btn:hover{border-color:#0d0f11;color:#ececec}.bg-dark.btn.active,.bg-dark.btn:active,.bg-dark.btn:not(:disabled):not(.disabled).active,.bg-dark.btn:not(:disabled):not(.disabled):active{background-color:#0d0f11!important;border-color:#07090a;color:#fff}.bg-lightblue{background-color:#3c8dbc!important}.bg-lightblue,.bg-lightblue>a{color:#fff!important}.bg-lightblue.btn:hover{border-color:#307095;color:#ececec}.bg-lightblue.btn.active,.bg-lightblue.btn:active,.bg-lightblue.btn:not(:disabled):not(.disabled).active,.bg-lightblue.btn:not(:disabled):not(.disabled):active{background-color:#307095!important;border-color:#2d698c;color:#fff}.bg-navy{background-color:#001f3f!important}.bg-navy,.bg-navy>a{color:#fff!important}.bg-navy.btn:hover{border-color:#00060c;color:#ececec}.bg-navy.btn.active,.bg-navy.btn:active,.bg-navy.btn:not(:disabled):not(.disabled).active,.bg-navy.btn:not(:disabled):not(.disabled):active{background-color:#00060c!important;border-color:#000;color:#fff}.bg-olive{background-color:#3d9970!important}.bg-olive,.bg-olive>a{color:#fff!important}.bg-olive.btn:hover{border-color:#2e7555;color:#ececec}.bg-olive.btn.active,.bg-olive.btn:active,.bg-olive.btn:not(:disabled):not(.disabled).active,.bg-olive.btn:not(:disabled):not(.disabled):active{background-color:#2e7555!important;border-color:#2b6b4f;color:#fff}.bg-lime{background-color:#01ff70!important}.bg-lime,.bg-lime>a{color:#2a2e30!important}.bg-lime.btn:hover{border-color:#00cd5a;color:#181a1c}.bg-lime.btn.active,.bg-lime.btn:active,.bg-lime.btn:not(:disabled):not(.disabled).active,.bg-lime.btn:not(:disabled):not(.disabled):active{background-color:#00cd5a!important;border-color:#00c054;color:#fff}.bg-fuchsia{background-color:#f012be!important}.bg-fuchsia,.bg-fuchsia>a{color:#fff!important}.bg-fuchsia.btn:hover{border-color:#c30c9a;color:#ececec}.bg-fuchsia.btn.active,.bg-fuchsia.btn:active,.bg-fuchsia.btn:not(:disabled):not(.disabled).active,.bg-fuchsia.btn:not(:disabled):not(.disabled):active{background-color:#c30c9a!important;border-color:#b70c90;color:#fff}.bg-maroon{background-color:#d81b60!important}.bg-maroon,.bg-maroon>a{color:#fff!important}.bg-maroon.btn:hover{border-color:#ab154c;color:#ececec}.bg-maroon.btn.active,.bg-maroon.btn:active,.bg-maroon.btn:not(:disabled):not(.disabled).active,.bg-maroon.btn:not(:disabled):not(.disabled):active{background-color:#ab154c!important;border-color:#9f1447;color:#fff}.bg-blue{background-color:#3085d6!important}.bg-blue,.bg-blue>a{color:#fff!important}.bg-blue.btn:hover{border-color:#236bb0;color:#ececec}.bg-blue.btn.active,.bg-blue.btn:active,.bg-blue.btn:not(:disabled):not(.disabled).active,.bg-blue.btn:not(:disabled):not(.disabled):active{background-color:#236bb0!important;border-color:#2165a5;color:#fff}.bg-indigo{background-color:#5c6bc6!important}.bg-indigo,.bg-indigo>a{color:#fff!important}.bg-indigo.btn:hover{border-color:#3e4eb1;color:#ececec}.bg-indigo.btn.active,.bg-indigo.btn:active,.bg-indigo.btn:not(:disabled):not(.disabled).active,.bg-indigo.btn:not(:disabled):not(.disabled):active{background-color:#3e4eb1!important;border-color:#3b4aa8;color:#fff}.bg-purple{background-color:#6f42c1!important}.bg-purple,.bg-purple>a{color:#fff!important}.bg-purple.btn:hover{border-color:#59339d;color:#ececec}.bg-purple.btn.active,.bg-purple.btn:active,.bg-purple.btn:not(:disabled):not(.disabled).active,.bg-purple.btn:not(:disabled):not(.disabled):active{background-color:#59339d!important;border-color:#533093;color:#fff}.bg-pink{background-color:#ff8acc!important}.bg-pink,.bg-pink>a{color:#2a2e30!important}.bg-pink.btn:hover{border-color:#ff57b6;color:#181a1c}.bg-pink.btn.active,.bg-pink.btn:active,.bg-pink.btn:not(:disabled):not(.disabled).active,.bg-pink.btn:not(:disabled):not(.disabled):active{background-color:#ff57b6!important;border-color:#ff4ab0;color:#fff}.bg-red{background-color:#ea5455!important}.bg-red,.bg-red>a{color:#fff!important}.bg-red.btn:hover{border-color:#e42728;color:#ececec}.bg-red.btn.active,.bg-red.btn:active,.bg-red.btn:not(:disabled):not(.disabled).active,.bg-red.btn:not(:disabled):not(.disabled):active{background-color:#e42728!important;border-color:#e21c1d;color:#fff}.bg-orange{background-color:#dda451!important}.bg-orange,.bg-orange>a{color:#2a2e30!important}.bg-orange.btn:hover{border-color:#d28d29;color:#181a1c}.bg-orange.btn.active,.bg-orange.btn:active,.bg-orange.btn:not(:disabled):not(.disabled).active,.bg-orange.btn:not(:disabled):not(.disabled):active{background-color:#d28d29!important;border-color:#c78627;color:#2a2e30}.bg-yellow{background-color:#edc30e!important}.bg-yellow,.bg-yellow>a{color:#2a2e30!important}.bg-yellow.btn:hover{border-color:#bd9b0b;color:#181a1c}.bg-yellow.btn.active,.bg-yellow.btn:active,.bg-yellow.btn:not(:disabled):not(.disabled).active,.bg-yellow.btn:not(:disabled):not(.disabled):active{background-color:#bd9b0b!important;border-color:#b1910a;color:#fff}.bg-green{background-color:#21b978!important}.bg-green,.bg-green>a{color:#fff!important}.bg-green.btn:hover{border-color:#198e5c;color:#ececec}.bg-green.btn.active,.bg-green.btn:active,.bg-green.btn:not(:disabled):not(.disabled).active,.bg-green.btn:not(:disabled):not(.disabled):active{background-color:#198e5c!important;border-color:#178355;color:#fff}.bg-teal{background-color:#20c997!important}.bg-teal,.bg-teal>a{color:#fff!important}.bg-teal.btn:hover{border-color:#199d76;color:#ececec}.bg-teal.btn.active,.bg-teal.btn:active,.bg-teal.btn:not(:disabled):not(.disabled).active,.bg-teal.btn:not(:disabled):not(.disabled):active{background-color:#199d76!important;border-color:#17926e;color:#fff}.bg-cyan{background-color:#7367f0!important}.bg-cyan,.bg-cyan>a{color:#fff!important}.bg-cyan.btn:hover{border-color:#4839eb;color:#ececec}.bg-cyan.btn.active,.bg-cyan.btn:active,.bg-cyan.btn:not(:disabled):not(.disabled).active,.bg-cyan.btn:not(:disabled):not(.disabled):active{background-color:#4839eb!important;border-color:#3e2dea;color:#fff}.bg-white{background-color:#fff!important}.bg-white,.bg-white>a{color:#2a2e30!important}.bg-white.btn:hover{border-color:#e6e6e6;color:#181a1c}.bg-white.btn.active,.bg-white.btn:active,.bg-white.btn:not(:disabled):not(.disabled).active,.bg-white.btn:not(:disabled):not(.disabled):active{background-color:#e6e6e6!important;border-color:#dfdfdf;color:#2a2e30}.bg-gray{background-color:#b8c2cc!important}.bg-gray,.bg-gray>a{color:#2a2e30!important}.bg-gray.btn:hover{border-color:#9aa9b7;color:#181a1c}.bg-gray.btn.active,.bg-gray.btn:active,.bg-gray.btn:not(:disabled):not(.disabled).active,.bg-gray.btn:not(:disabled):not(.disabled):active{background-color:#9aa9b7!important;border-color:#93a2b1;color:#2a2e30}.bg-gray-dark{background-color:#1e1e1e!important}.bg-gray-dark,.bg-gray-dark>a{color:#fff!important}.bg-gray-dark.btn:hover{border-color:#050505;color:#ececec}.bg-gray-dark.btn.active,.bg-gray-dark.btn:active,.bg-gray-dark.btn:not(:disabled):not(.disabled).active,.bg-gray-dark.btn:not(:disabled):not(.disabled):active{background-color:#050505!important;border-color:#000;color:#fff}.bg-gray{background-color:#adb5bd;color:#2a2e30}.bg-gray-light{background-color:#f5f5f5;color:#2a2e30!important}.bg-black{background-color:#22292f;color:#fff!important}.bg-white{background-color:#fff;color:#2a2e30!important}.bg-gradient-primary{color:#fff;background:#586cb1 linear-gradient(180deg,#6f80bc,#586cb1) repeat-x!important}.bg-gradient-primary.btn.disabled,.bg-gradient-primary.btn:disabled,.bg-gradient-primary.btn:not(:disabled):not(.disabled).active,.bg-gradient-primary.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-primary.btn.dropdown-toggle{background-image:none!important}.bg-gradient-primary.btn:hover{border-color:#445692;color:#ececec;background:#485b9b linear-gradient(180deg,#6172a9,#485b9b) repeat-x!important}.bg-gradient-primary.btn.active,.bg-gradient-primary.btn:active,.bg-gradient-primary.btn:not(:disabled):not(.disabled).active,.bg-gradient-primary.btn:not(:disabled):not(.disabled):active{border-color:#405189;color:#fff;background:#445692 linear-gradient(180deg,#5e6da1,#445692) repeat-x!important}.bg-gradient-secondary{color:#2a2e30;background:#b8c2cc linear-gradient(180deg,#c0c9d2,#b8c2cc) repeat-x!important}.bg-gradient-secondary.btn.disabled,.bg-gradient-secondary.btn:disabled,.bg-gradient-secondary.btn:not(:disabled):not(.disabled).active,.bg-gradient-secondary.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-secondary.btn.dropdown-toggle{background-image:none!important}.bg-gradient-secondary.btn:hover{border-color:#9aa9b7;color:#181a1c;background:#a2afbc linear-gradient(180deg,#aeb9c5,#a2afbc) repeat-x!important}.bg-gradient-secondary.btn.active,.bg-gradient-secondary.btn:active,.bg-gradient-secondary.btn:not(:disabled):not(.disabled).active,.bg-gradient-secondary.btn:not(:disabled):not(.disabled):active{border-color:#93a2b1;color:#2a2e30;background:#9aa9b7 linear-gradient(180deg,#a7b4c1,#9aa9b7) repeat-x!important}.bg-gradient-success{color:#fff;background:#21b978 linear-gradient(180deg,#40c18b,#21b978) repeat-x!important}.bg-gradient-success.btn.disabled,.bg-gradient-success.btn:disabled,.bg-gradient-success.btn:not(:disabled):not(.disabled).active,.bg-gradient-success.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-success.btn.dropdown-toggle{background-image:none!important}.bg-gradient-success.btn:hover{border-color:#198e5c;color:#ececec;background:#1b9963 linear-gradient(180deg,#3ba679,#1b9963) repeat-x!important}.bg-gradient-success.btn.active,.bg-gradient-success.btn:active,.bg-gradient-success.btn:not(:disabled):not(.disabled).active,.bg-gradient-success.btn:not(:disabled):not(.disabled):active{border-color:#178355;color:#fff;background:#198e5c linear-gradient(180deg,#399d73,#198e5c) repeat-x!important}.bg-gradient-info{color:#fff;background:#4277cf linear-gradient(180deg,#5c89d5,#4277cf) repeat-x!important}.bg-gradient-info.btn.disabled,.bg-gradient-info.btn:disabled,.bg-gradient-info.btn:not(:disabled):not(.disabled).active,.bg-gradient-info.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-info.btn.dropdown-toggle{background-image:none!important}.bg-gradient-info.btn:hover{border-color:#2d5fb1;color:#ececec;background:#3064bb linear-gradient(180deg,#4d79c4,#3064bb) repeat-x!important}.bg-gradient-info.btn.active,.bg-gradient-info.btn:active,.bg-gradient-info.btn:not(:disabled):not(.disabled).active,.bg-gradient-info.btn:not(:disabled):not(.disabled):active{border-color:#2a59a7;color:#fff;background:#2d5fb1 linear-gradient(180deg,#4a75bc,#2d5fb1) repeat-x!important}.bg-gradient-warning{color:#2a2e30;background:#dda451 linear-gradient(180deg,#e0b06a,#dda451) repeat-x!important}.bg-gradient-warning.btn.disabled,.bg-gradient-warning.btn:disabled,.bg-gradient-warning.btn:not(:disabled):not(.disabled).active,.bg-gradient-warning.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-warning.btn.dropdown-toggle{background-image:none!important}.bg-gradient-warning.btn:hover{border-color:#d28d29;color:#181a1c;background:#d79331 linear-gradient(180deg,#dba14f,#d79331) repeat-x!important}.bg-gradient-warning.btn.active,.bg-gradient-warning.btn:active,.bg-gradient-warning.btn:not(:disabled):not(.disabled).active,.bg-gradient-warning.btn:not(:disabled):not(.disabled):active{border-color:#c78627;color:#2a2e30;background:#d28d29 linear-gradient(180deg,#d69c48,#d28d29) repeat-x!important}.bg-gradient-danger{color:#fff;background:#ea5455 linear-gradient(180deg,#eb6c6d,#ea5455) repeat-x!important}.bg-gradient-danger.btn.disabled,.bg-gradient-danger.btn:disabled,.bg-gradient-danger.btn:not(:disabled):not(.disabled).active,.bg-gradient-danger.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-danger.btn.dropdown-toggle{background-image:none!important}.bg-gradient-danger.btn:hover{border-color:#e42728;color:#ececec;background:#e63233 linear-gradient(180deg,#e74f50,#e63233) repeat-x!important}.bg-gradient-danger.btn.active,.bg-gradient-danger.btn:active,.bg-gradient-danger.btn:not(:disabled):not(.disabled).active,.bg-gradient-danger.btn:not(:disabled):not(.disabled):active{border-color:#e21c1d;color:#fff;background:#e42728 linear-gradient(180deg,#e64547,#e42728) repeat-x!important}.bg-gradient-light{color:#2a2e30;background:#f7f7f9 linear-gradient(180deg,#f6f6f9,#f7f7f9) repeat-x!important}.bg-gradient-light.btn.disabled,.bg-gradient-light.btn:disabled,.bg-gradient-light.btn:not(:disabled):not(.disabled).active,.bg-gradient-light.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-light.btn.dropdown-toggle{background-image:none!important}.bg-gradient-light.btn:hover{border-color:#dadae3;color:#181a1c;background:#e1e1e9 linear-gradient(180deg,#e3e3eb,#e1e1e9) repeat-x!important}.bg-gradient-light.btn.active,.bg-gradient-light.btn:active,.bg-gradient-light.btn:not(:disabled):not(.disabled).active,.bg-gradient-light.btn:not(:disabled):not(.disabled):active{border-color:#d3d3de;color:#2a2e30;background:#dadae3 linear-gradient(180deg,#dddde6,#dadae3) repeat-x!important}.bg-gradient-dark{color:#fff;background:#22292f linear-gradient(180deg,#41474d,#22292f) repeat-x!important}.bg-gradient-dark.btn.disabled,.bg-gradient-dark.btn:disabled,.bg-gradient-dark.btn:not(:disabled):not(.disabled).active,.bg-gradient-dark.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-dark.btn.dropdown-toggle{background-image:none!important}.bg-gradient-dark.btn:hover{border-color:#0d0f11;color:#ececec;background:#121619 linear-gradient(180deg,#33373a,#121619) repeat-x!important}.bg-gradient-dark.btn.active,.bg-gradient-dark.btn:active,.bg-gradient-dark.btn:not(:disabled):not(.disabled).active,.bg-gradient-dark.btn:not(:disabled):not(.disabled):active{border-color:#07090a;color:#fff;background:#0d0f11 linear-gradient(180deg,#2f3134,#0d0f11) repeat-x!important}.bg-gradient-lightblue{color:#fff;background:#3c8dbc linear-gradient(180deg,#579cc5,#3c8dbc) repeat-x!important}.bg-gradient-lightblue.btn.disabled,.bg-gradient-lightblue.btn:disabled,.bg-gradient-lightblue.btn:not(:disabled):not(.disabled).active,.bg-gradient-lightblue.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-lightblue.btn.dropdown-toggle{background-image:none!important}.bg-gradient-lightblue.btn:hover{border-color:#307095;color:#ececec;background:#33779f linear-gradient(180deg,#4f89ac,#33779f) repeat-x!important}.bg-gradient-lightblue.btn.active,.bg-gradient-lightblue.btn:active,.bg-gradient-lightblue.btn:not(:disabled):not(.disabled).active,.bg-gradient-lightblue.btn:not(:disabled):not(.disabled):active{border-color:#2d698c;color:#fff;background:#307095 linear-gradient(180deg,#4d83a4,#307095) repeat-x!important}.bg-gradient-navy{color:#fff;background:#001f3f linear-gradient(180deg,#243f5b,#001f3f) repeat-x!important}.bg-gradient-navy.btn.disabled,.bg-gradient-navy.btn:disabled,.bg-gradient-navy.btn:not(:disabled):not(.disabled).active,.bg-gradient-navy.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-navy.btn.dropdown-toggle{background-image:none!important}.bg-gradient-navy.btn:hover{border-color:#00060c;color:#ececec;background:#000c19 linear-gradient(180deg,#242e3a,#000c19) repeat-x!important}.bg-gradient-navy.btn.active,.bg-gradient-navy.btn:active,.bg-gradient-navy.btn:not(:disabled):not(.disabled).active,.bg-gradient-navy.btn:not(:disabled):not(.disabled):active{border-color:#000;color:#fff;background:#00060c linear-gradient(180deg,#24292f,#00060c) repeat-x!important}.bg-gradient-olive{color:#fff;background:#3d9970 linear-gradient(180deg,#58a684,#3d9970) repeat-x!important}.bg-gradient-olive.btn.disabled,.bg-gradient-olive.btn:disabled,.bg-gradient-olive.btn:not(:disabled):not(.disabled).active,.bg-gradient-olive.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-olive.btn.dropdown-toggle{background-image:none!important}.bg-gradient-olive.btn:hover{border-color:#2e7555;color:#ececec;background:#327e5c linear-gradient(180deg,#4e8f73,#327e5c) repeat-x!important}.bg-gradient-olive.btn.active,.bg-gradient-olive.btn:active,.bg-gradient-olive.btn:not(:disabled):not(.disabled).active,.bg-gradient-olive.btn:not(:disabled):not(.disabled):active{border-color:#2b6b4f;color:#fff;background:#2e7555 linear-gradient(180deg,#4b886d,#2e7555) repeat-x!important}.bg-gradient-lime{color:#2a2e30;background:#01ff70 linear-gradient(180deg,#25fd84,#01ff70) repeat-x!important}.bg-gradient-lime.btn.disabled,.bg-gradient-lime.btn:disabled,.bg-gradient-lime.btn:not(:disabled):not(.disabled).active,.bg-gradient-lime.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-lime.btn.dropdown-toggle{background-image:none!important}.bg-gradient-lime.btn:hover{border-color:#00cd5a;color:#181a1c;background:#00da5f linear-gradient(180deg,#24dd76,#00da5f) repeat-x!important}.bg-gradient-lime.btn.active,.bg-gradient-lime.btn:active,.bg-gradient-lime.btn:not(:disabled):not(.disabled).active,.bg-gradient-lime.btn:not(:disabled):not(.disabled):active{border-color:#00c054;color:#fff;background:#00cd5a linear-gradient(180deg,#24d272,#00cd5a) repeat-x!important}.bg-gradient-fuchsia{color:#fff;background:#f012be linear-gradient(180deg,#f033c7,#f012be) repeat-x!important}.bg-gradient-fuchsia.btn.disabled,.bg-gradient-fuchsia.btn:disabled,.bg-gradient-fuchsia.btn:not(:disabled):not(.disabled).active,.bg-gradient-fuchsia.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-fuchsia.btn.dropdown-toggle{background-image:none!important}.bg-gradient-fuchsia.btn:hover{border-color:#c30c9a;color:#ececec;background:#cf0da3 linear-gradient(180deg,#d42fb0,#cf0da3) repeat-x!important}.bg-gradient-fuchsia.btn.active,.bg-gradient-fuchsia.btn:active,.bg-gradient-fuchsia.btn:not(:disabled):not(.disabled).active,.bg-gradient-fuchsia.btn:not(:disabled):not(.disabled):active{border-color:#b70c90;color:#fff;background:#c30c9a linear-gradient(180deg,#ca2ea8,#c30c9a) repeat-x!important}.bg-gradient-maroon{color:#fff;background:#d81b60 linear-gradient(180deg,#db3b77,#d81b60) repeat-x!important}.bg-gradient-maroon.btn.disabled,.bg-gradient-maroon.btn:disabled,.bg-gradient-maroon.btn:not(:disabled):not(.disabled).active,.bg-gradient-maroon.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-maroon.btn.dropdown-toggle{background-image:none!important}.bg-gradient-maroon.btn:hover{border-color:#ab154c;color:#ececec;background:#b61751 linear-gradient(180deg,#bf386a,#b61751) repeat-x!important}.bg-gradient-maroon.btn.active,.bg-gradient-maroon.btn:active,.bg-gradient-maroon.btn:not(:disabled):not(.disabled).active,.bg-gradient-maroon.btn:not(:disabled):not(.disabled):active{border-color:#9f1447;color:#fff;background:#ab154c linear-gradient(180deg,#b53666,#ab154c) repeat-x!important}.bg-gradient-blue{color:#fff;background:#3085d6 linear-gradient(180deg,#4d95db,#3085d6) repeat-x!important}.bg-gradient-blue.btn.disabled,.bg-gradient-blue.btn:disabled,.bg-gradient-blue.btn:not(:disabled):not(.disabled).active,.bg-gradient-blue.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-blue.btn.dropdown-toggle{background-image:none!important}.bg-gradient-blue.btn:hover{border-color:#236bb0;color:#ececec;background:#2572bb linear-gradient(180deg,#4385c4,#2572bb) repeat-x!important}.bg-gradient-blue.btn.active,.bg-gradient-blue.btn:active,.bg-gradient-blue.btn:not(:disabled):not(.disabled).active,.bg-gradient-blue.btn:not(:disabled):not(.disabled):active{border-color:#2165a5;color:#fff;background:#236bb0 linear-gradient(180deg,#427fbb,#236bb0) repeat-x!important}.bg-gradient-indigo{color:#fff;background:#5c6bc6 linear-gradient(180deg,#727fcd,#5c6bc6) repeat-x!important}.bg-gradient-indigo.btn.disabled,.bg-gradient-indigo.btn:disabled,.bg-gradient-indigo.btn:not(:disabled):not(.disabled).active,.bg-gradient-indigo.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-indigo.btn.dropdown-toggle{background-image:none!important}.bg-gradient-indigo.btn:hover{border-color:#3e4eb1;color:#ececec;background:#4152bb linear-gradient(180deg,#5b6ac4,#4152bb) repeat-x!important}.bg-gradient-indigo.btn.active,.bg-gradient-indigo.btn:active,.bg-gradient-indigo.btn:not(:disabled):not(.disabled).active,.bg-gradient-indigo.btn:not(:disabled):not(.disabled):active{border-color:#3b4aa8;color:#fff;background:#3e4eb1 linear-gradient(180deg,#5966bc,#3e4eb1) repeat-x!important}.bg-gradient-purple{color:#fff;background:#6f42c1 linear-gradient(180deg,#825cc9,#6f42c1) repeat-x!important}.bg-gradient-purple.btn.disabled,.bg-gradient-purple.btn:disabled,.bg-gradient-purple.btn:not(:disabled):not(.disabled).active,.bg-gradient-purple.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-purple.btn.dropdown-toggle{background-image:none!important}.bg-gradient-purple.btn:hover{border-color:#59339d;color:#ececec;background:#5e37a6 linear-gradient(180deg,#7453b2,#5e37a6) repeat-x!important}.bg-gradient-purple.btn.active,.bg-gradient-purple.btn:active,.bg-gradient-purple.btn:not(:disabled):not(.disabled).active,.bg-gradient-purple.btn:not(:disabled):not(.disabled):active{border-color:#533093;color:#fff;background:#59339d linear-gradient(180deg,#7050ab,#59339d) repeat-x!important}.bg-gradient-pink{color:#2a2e30;background:#ff8acc linear-gradient(180deg,#fd99d2,#ff8acc) repeat-x!important}.bg-gradient-pink.btn.disabled,.bg-gradient-pink.btn:disabled,.bg-gradient-pink.btn:not(:disabled):not(.disabled).active,.bg-gradient-pink.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-pink.btn.dropdown-toggle{background-image:none!important}.bg-gradient-pink.btn:hover{border-color:#ff57b6;color:#181a1c;background:#ff64bb linear-gradient(180deg,#fd79c4,#ff64bb) repeat-x!important}.bg-gradient-pink.btn.active,.bg-gradient-pink.btn:active,.bg-gradient-pink.btn:not(:disabled):not(.disabled).active,.bg-gradient-pink.btn:not(:disabled):not(.disabled):active{border-color:#ff4ab0;color:#fff;background:#ff57b6 linear-gradient(180deg,#fd6ec0,#ff57b6) repeat-x!important}.bg-gradient-red{color:#fff;background:#ea5455 linear-gradient(180deg,#eb6c6d,#ea5455) repeat-x!important}.bg-gradient-red.btn.disabled,.bg-gradient-red.btn:disabled,.bg-gradient-red.btn:not(:disabled):not(.disabled).active,.bg-gradient-red.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-red.btn.dropdown-toggle{background-image:none!important}.bg-gradient-red.btn:hover{border-color:#e42728;color:#ececec;background:#e63233 linear-gradient(180deg,#e74f50,#e63233) repeat-x!important}.bg-gradient-red.btn.active,.bg-gradient-red.btn:active,.bg-gradient-red.btn:not(:disabled):not(.disabled).active,.bg-gradient-red.btn:not(:disabled):not(.disabled):active{border-color:#e21c1d;color:#fff;background:#e42728 linear-gradient(180deg,#e64547,#e42728) repeat-x!important}.bg-gradient-orange{color:#2a2e30;background:#dda451 linear-gradient(180deg,#e0b06a,#dda451) repeat-x!important}.bg-gradient-orange.btn.disabled,.bg-gradient-orange.btn:disabled,.bg-gradient-orange.btn:not(:disabled):not(.disabled).active,.bg-gradient-orange.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-orange.btn.dropdown-toggle{background-image:none!important}.bg-gradient-orange.btn:hover{border-color:#d28d29;color:#181a1c;background:#d79331 linear-gradient(180deg,#dba14f,#d79331) repeat-x!important}.bg-gradient-orange.btn.active,.bg-gradient-orange.btn:active,.bg-gradient-orange.btn:not(:disabled):not(.disabled).active,.bg-gradient-orange.btn:not(:disabled):not(.disabled):active{border-color:#c78627;color:#2a2e30;background:#d28d29 linear-gradient(180deg,#d69c48,#d28d29) repeat-x!important}.bg-gradient-yellow{color:#2a2e30;background:#edc30e linear-gradient(180deg,#edca31,#edc30e) repeat-x!important}.bg-gradient-yellow.btn.disabled,.bg-gradient-yellow.btn:disabled,.bg-gradient-yellow.btn:not(:disabled):not(.disabled).active,.bg-gradient-yellow.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-yellow.btn.dropdown-toggle{background-image:none!important}.bg-gradient-yellow.btn:hover{border-color:#bd9b0b;color:#181a1c;background:#c9a50c linear-gradient(180deg,#cfb02f,#c9a50c) repeat-x!important}.bg-gradient-yellow.btn.active,.bg-gradient-yellow.btn:active,.bg-gradient-yellow.btn:not(:disabled):not(.disabled).active,.bg-gradient-yellow.btn:not(:disabled):not(.disabled):active{border-color:#b1910a;color:#fff;background:#bd9b0b linear-gradient(180deg,#c5a82e,#bd9b0b) repeat-x!important}.bg-gradient-green{color:#fff;background:#21b978 linear-gradient(180deg,#40c18b,#21b978) repeat-x!important}.bg-gradient-green.btn.disabled,.bg-gradient-green.btn:disabled,.bg-gradient-green.btn:not(:disabled):not(.disabled).active,.bg-gradient-green.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-green.btn.dropdown-toggle{background-image:none!important}.bg-gradient-green.btn:hover{border-color:#198e5c;color:#ececec;background:#1b9963 linear-gradient(180deg,#3ba679,#1b9963) repeat-x!important}.bg-gradient-green.btn.active,.bg-gradient-green.btn:active,.bg-gradient-green.btn:not(:disabled):not(.disabled).active,.bg-gradient-green.btn:not(:disabled):not(.disabled):active{border-color:#178355;color:#fff;background:#198e5c linear-gradient(180deg,#399d73,#198e5c) repeat-x!important}.bg-gradient-teal{color:#fff;background:#20c997 linear-gradient(180deg,#3fcfa5,#20c997) repeat-x!important}.bg-gradient-teal.btn.disabled,.bg-gradient-teal.btn:disabled,.bg-gradient-teal.btn:not(:disabled):not(.disabled).active,.bg-gradient-teal.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-teal.btn.dropdown-toggle{background-image:none!important}.bg-gradient-teal.btn:hover{border-color:#199d76;color:#ececec;background:#1ba87e linear-gradient(180deg,#3bb390,#1ba87e) repeat-x!important}.bg-gradient-teal.btn.active,.bg-gradient-teal.btn:active,.bg-gradient-teal.btn:not(:disabled):not(.disabled).active,.bg-gradient-teal.btn:not(:disabled):not(.disabled):active{border-color:#17926e;color:#fff;background:#199d76 linear-gradient(180deg,#39aa89,#199d76) repeat-x!important}.bg-gradient-cyan{color:#fff;background:#7367f0 linear-gradient(180deg,#867cf1,#7367f0) repeat-x!important}.bg-gradient-cyan.btn.disabled,.bg-gradient-cyan.btn:disabled,.bg-gradient-cyan.btn:not(:disabled):not(.disabled).active,.bg-gradient-cyan.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-cyan.btn.dropdown-toggle{background-image:none!important}.bg-gradient-cyan.btn:hover{border-color:#4839eb;color:#ececec;background:#5344ed linear-gradient(180deg,#6a5eef,#5344ed) repeat-x!important}.bg-gradient-cyan.btn.active,.bg-gradient-cyan.btn:active,.bg-gradient-cyan.btn:not(:disabled):not(.disabled).active,.bg-gradient-cyan.btn:not(:disabled):not(.disabled):active{border-color:#3e2dea;color:#fff;background:#4839eb linear-gradient(180deg,#6155ed,#4839eb) repeat-x!important}.bg-gradient-white{color:#2a2e30;background:#fff linear-gradient(180deg,#fdfdfe,#fff) repeat-x!important}.bg-gradient-white.btn.disabled,.bg-gradient-white.btn:disabled,.bg-gradient-white.btn:not(:disabled):not(.disabled).active,.bg-gradient-white.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-white.btn.dropdown-toggle{background-image:none!important}.bg-gradient-white.btn:hover{border-color:#e6e6e6;color:#181a1c;background:#ececec linear-gradient(180deg,#ecedee,#ececec) repeat-x!important}.bg-gradient-white.btn.active,.bg-gradient-white.btn:active,.bg-gradient-white.btn:not(:disabled):not(.disabled).active,.bg-gradient-white.btn:not(:disabled):not(.disabled):active{border-color:#dfdfdf;color:#2a2e30;background:#e6e6e6 linear-gradient(180deg,#e7e8e9,#e6e6e6) repeat-x!important}.bg-gradient-gray{color:#2a2e30;background:#b8c2cc linear-gradient(180deg,#c0c9d2,#b8c2cc) repeat-x!important}.bg-gradient-gray.btn.disabled,.bg-gradient-gray.btn:disabled,.bg-gradient-gray.btn:not(:disabled):not(.disabled).active,.bg-gradient-gray.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-gray.btn.dropdown-toggle{background-image:none!important}.bg-gradient-gray.btn:hover{border-color:#9aa9b7;color:#181a1c;background:#a2afbc linear-gradient(180deg,#aeb9c5,#a2afbc) repeat-x!important}.bg-gradient-gray.btn.active,.bg-gradient-gray.btn:active,.bg-gradient-gray.btn:not(:disabled):not(.disabled).active,.bg-gradient-gray.btn:not(:disabled):not(.disabled):active{border-color:#93a2b1;color:#2a2e30;background:#9aa9b7 linear-gradient(180deg,#a7b4c1,#9aa9b7) repeat-x!important}.bg-gradient-gray-dark{color:#fff;background:#1e1e1e linear-gradient(180deg,#3d3e3f,#1e1e1e) repeat-x!important}.bg-gradient-gray-dark.btn.disabled,.bg-gradient-gray-dark.btn:disabled,.bg-gradient-gray-dark.btn:not(:disabled):not(.disabled).active,.bg-gradient-gray-dark.btn:not(:disabled):not(.disabled):active,.show>.bg-gradient-gray-dark.btn.dropdown-toggle{background-image:none!important}.bg-gradient-gray-dark.btn:hover{border-color:#050505;color:#ececec;background:#0b0b0b linear-gradient(180deg,#2d2e2e,#0b0b0b) repeat-x!important}.bg-gradient-gray-dark.btn.active,.bg-gradient-gray-dark.btn:active,.bg-gradient-gray-dark.btn:not(:disabled):not(.disabled).active,.bg-gradient-gray-dark.btn:not(:disabled):not(.disabled):active{border-color:#000;color:#fff;background:#050505 linear-gradient(180deg,#282829,#050505) repeat-x!important}[class^=bg-].disabled{opacity:.65}a.text-muted:hover{color:#586cb1!important}.link-muted{color:#5d6974}.link-muted:focus,.link-muted:hover{color:#464f58}.link-black{color:#b8c2cc}.link-black:focus,.link-black:hover{color:#e6e8ea}.accent-primary .btn-link,.accent-primary a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#586cb1}.accent-primary .btn-link:hover,.accent-primary a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#3c4b80}.accent-primary .dropdown-item.active,.accent-primary .dropdown-item:active{background:#586cb1;color:#fff}.accent-primary .custom-control-input:checked~.custom-control-label:before{background:#586cb1;border-color:#34416f}.accent-primary .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-primary .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-primary .custom-file-input:focus~.custom-file-label,.accent-primary .custom-select:focus,.accent-primary .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#afb9da}.accent-primary .page-item .page-link{color:#586cb1}.accent-primary .page-item.active .page-link,.accent-primary .page-item.active a{background-color:#586cb1;border-color:#586cb1;color:#fff}.accent-primary .page-item.disabled .page-link,.accent-primary .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-primary [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-primary [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-primary [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-primary [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-secondary .btn-link,.accent-secondary a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#b8c2cc}.accent-secondary .btn-link:hover,.accent-secondary a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#8b9cac}.accent-secondary .dropdown-item.active,.accent-secondary .dropdown-item:active{background:#b8c2cc;color:#2a2e30}.accent-secondary .custom-control-input:checked~.custom-control-label:before{background:#b8c2cc;border-color:#7d8fa1}.accent-secondary .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%232a2e30' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-secondary .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-secondary .custom-file-input:focus~.custom-file-label,.accent-secondary .custom-select:focus,.accent-secondary .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#fff}.accent-secondary .page-item .page-link{color:#b8c2cc}.accent-secondary .page-item.active .page-link,.accent-secondary .page-item.active a{background-color:#b8c2cc;border-color:#b8c2cc;color:#fff}.accent-secondary .page-item.disabled .page-link,.accent-secondary .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-secondary [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-secondary [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-secondary [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-secondary [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-success .btn-link,.accent-success a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#21b978}.accent-success .btn-link:hover,.accent-success a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#15784e}.accent-success .dropdown-item.active,.accent-success .dropdown-item:active{background:#21b978;color:#fff}.accent-success .custom-control-input:checked~.custom-control-label:before{background:#21b978;border-color:#126240}.accent-success .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-success .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-success .custom-file-input:focus~.custom-file-label,.accent-success .custom-select:focus,.accent-success .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#73e6b5}.accent-success .page-item .page-link{color:#21b978}.accent-success .page-item.active .page-link,.accent-success .page-item.active a{background-color:#21b978;border-color:#21b978;color:#fff}.accent-success .page-item.disabled .page-link,.accent-success .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-success [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-success [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-success [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-success [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-info .btn-link,.accent-info a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#4277cf}.accent-info .btn-link:hover,.accent-info a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#28549d}.accent-info .dropdown-item.active,.accent-info .dropdown-item:active{background:#4277cf;color:#fff}.accent-info .custom-control-input:checked~.custom-control-label:before{background:#4277cf;border-color:#234988}.accent-info .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-info .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-info .custom-file-input:focus~.custom-file-label,.accent-info .custom-select:focus,.accent-info .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#a8c0e9}.accent-info .page-item .page-link{color:#4277cf}.accent-info .page-item.active .page-link,.accent-info .page-item.active a{background-color:#4277cf;border-color:#4277cf;color:#fff}.accent-info .page-item.disabled .page-link,.accent-info .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-info [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-info [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-info [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-info [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-warning .btn-link,.accent-warning a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#dda451}.accent-warning .btn-link:hover,.accent-warning a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#bd7f25}.accent-warning .dropdown-item.active,.accent-warning .dropdown-item:active{background:#dda451;color:#2a2e30}.accent-warning .custom-control-input:checked~.custom-control-label:before{background:#dda451;border-color:#a77121}.accent-warning .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%232a2e30' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-warning .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-warning .custom-file-input:focus~.custom-file-label,.accent-warning .custom-select:focus,.accent-warning .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#f2dcbc}.accent-warning .page-item .page-link{color:#dda451}.accent-warning .page-item.active .page-link,.accent-warning .page-item.active a{background-color:#dda451;border-color:#dda451;color:#fff}.accent-warning .page-item.disabled .page-link,.accent-warning .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-warning [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-warning [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-warning [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-warning [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-danger .btn-link,.accent-danger a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#ea5455}.accent-danger .btn-link:hover,.accent-danger a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#d71a1c}.accent-danger .dropdown-item.active,.accent-danger .dropdown-item:active{background:#ea5455;color:#fff}.accent-danger .custom-control-input:checked~.custom-control-label:before{background:#ea5455;border-color:#c01819}.accent-danger .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-danger .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-danger .custom-file-input:focus~.custom-file-label,.accent-danger .custom-select:focus,.accent-danger .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#f8c6c6}.accent-danger .page-item .page-link{color:#ea5455}.accent-danger .page-item.active .page-link,.accent-danger .page-item.active a{background-color:#ea5455;border-color:#ea5455;color:#fff}.accent-danger .page-item.disabled .page-link,.accent-danger .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-danger [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-danger [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-danger [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-danger [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-light .btn-link,.accent-light a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#f7f7f9}.accent-light .btn-link:hover,.accent-light a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#cbcbd8}.accent-light .dropdown-item.active,.accent-light .dropdown-item:active{background:#f7f7f9;color:#2a2e30}.accent-light .custom-control-input:checked~.custom-control-label:before{background:#f7f7f9;border-color:#bdbdcd}.accent-light .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%232a2e30' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-light .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-light .custom-file-input:focus~.custom-file-label,.accent-light .custom-select:focus,.accent-light .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#fff}.accent-light .page-item .page-link{color:#f7f7f9}.accent-light .page-item.active .page-link,.accent-light .page-item.active a{background-color:#f7f7f9;border-color:#f7f7f9;color:#fff}.accent-light .page-item.disabled .page-link,.accent-light .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-light [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-light [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-light [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-light [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-dark .btn-link,.accent-dark a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#22292f}.accent-dark .btn-link:hover,.accent-dark a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#020203}.accent-dark .dropdown-item.active,.accent-dark .dropdown-item:active{background:#22292f;color:#fff}.accent-dark .custom-control-input:checked~.custom-control-label:before{background:#22292f;border-color:#000}.accent-dark .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-dark .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-dark .custom-file-input:focus~.custom-file-label,.accent-dark .custom-select:focus,.accent-dark .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#586a79}.accent-dark .page-item .page-link{color:#22292f}.accent-dark .page-item.active .page-link,.accent-dark .page-item.active a{background-color:#22292f;border-color:#22292f;color:#fff}.accent-dark .page-item.disabled .page-link,.accent-dark .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-dark [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-dark [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-dark [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-dark [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-lightblue .btn-link,.accent-lightblue a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#3c8dbc}.accent-lightblue .btn-link:hover,.accent-lightblue a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#296282}.accent-lightblue .dropdown-item.active,.accent-lightblue .dropdown-item:active{background:#3c8dbc;color:#fff}.accent-lightblue .custom-control-input:checked~.custom-control-label:before{background:#3c8dbc;border-color:#23536f}.accent-lightblue .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-lightblue .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-lightblue .custom-file-input:focus~.custom-file-label,.accent-lightblue .custom-select:focus,.accent-lightblue .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#99c5de}.accent-lightblue .page-item .page-link{color:#3c8dbc}.accent-lightblue .page-item.active .page-link,.accent-lightblue .page-item.active a{background-color:#3c8dbc;border-color:#3c8dbc;color:#fff}.accent-lightblue .page-item.disabled .page-link,.accent-lightblue .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-lightblue [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-lightblue [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-lightblue [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-lightblue [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-navy .btn-link,.accent-navy a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#001f3f}.accent-navy .btn-link:hover,.accent-navy a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#000}.accent-navy .dropdown-item.active,.accent-navy .dropdown-item:active{background:#001f3f;color:#fff}.accent-navy .custom-control-input:checked~.custom-control-label:before{background:#001f3f;border-color:#000}.accent-navy .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-navy .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-navy .custom-file-input:focus~.custom-file-label,.accent-navy .custom-select:focus,.accent-navy .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#005ebf}.accent-navy .page-item .page-link{color:#001f3f}.accent-navy .page-item.active .page-link,.accent-navy .page-item.active a{background-color:#001f3f;border-color:#001f3f;color:#fff}.accent-navy .page-item.disabled .page-link,.accent-navy .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-navy [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-navy [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-navy [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-navy [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-olive .btn-link,.accent-olive a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#3d9970}.accent-olive .btn-link:hover,.accent-olive a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#276248}.accent-olive .dropdown-item.active,.accent-olive .dropdown-item:active{background:#3d9970;color:#fff}.accent-olive .custom-control-input:checked~.custom-control-label:before{background:#3d9970;border-color:#20503b}.accent-olive .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-olive .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-olive .custom-file-input:focus~.custom-file-label,.accent-olive .custom-select:focus,.accent-olive .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#87cfaf}.accent-olive .page-item .page-link{color:#3d9970}.accent-olive .page-item.active .page-link,.accent-olive .page-item.active a{background-color:#3d9970;border-color:#3d9970;color:#fff}.accent-olive .page-item.disabled .page-link,.accent-olive .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-olive [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-olive [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-olive [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-olive [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-lime .btn-link,.accent-lime a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#01ff70}.accent-lime .btn-link:hover,.accent-lime a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#00b44e}.accent-lime .dropdown-item.active,.accent-lime .dropdown-item:active{background:#01ff70;color:#2a2e30}.accent-lime .custom-control-input:checked~.custom-control-label:before{background:#01ff70;border-color:#009a43}.accent-lime .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%232a2e30' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-lime .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-lime .custom-file-input:focus~.custom-file-label,.accent-lime .custom-select:focus,.accent-lime .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#81ffb8}.accent-lime .page-item .page-link{color:#01ff70}.accent-lime .page-item.active .page-link,.accent-lime .page-item.active a{background-color:#01ff70;border-color:#01ff70;color:#fff}.accent-lime .page-item.disabled .page-link,.accent-lime .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-lime [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-lime [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-lime [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-lime [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-fuchsia .btn-link,.accent-fuchsia a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#f012be}.accent-fuchsia .btn-link:hover,.accent-fuchsia a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#ab0b87}.accent-fuchsia .dropdown-item.active,.accent-fuchsia .dropdown-item:active{background:#f012be;color:#fff}.accent-fuchsia .custom-control-input:checked~.custom-control-label:before{background:#f012be;border-color:#930974}.accent-fuchsia .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-fuchsia .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-fuchsia .custom-file-input:focus~.custom-file-label,.accent-fuchsia .custom-select:focus,.accent-fuchsia .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#f88adf}.accent-fuchsia .page-item .page-link{color:#f012be}.accent-fuchsia .page-item.active .page-link,.accent-fuchsia .page-item.active a{background-color:#f012be;border-color:#f012be;color:#fff}.accent-fuchsia .page-item.disabled .page-link,.accent-fuchsia .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-fuchsia [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-fuchsia [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-fuchsia [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-fuchsia [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-maroon .btn-link,.accent-maroon a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#d81b60}.accent-maroon .btn-link:hover,.accent-maroon a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#941342}.accent-maroon .dropdown-item.active,.accent-maroon .dropdown-item:active{background:#d81b60;color:#fff}.accent-maroon .custom-control-input:checked~.custom-control-label:before{background:#d81b60;border-color:#7d1038}.accent-maroon .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-maroon .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-maroon .custom-file-input:focus~.custom-file-label,.accent-maroon .custom-select:focus,.accent-maroon .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#f083ab}.accent-maroon .page-item .page-link{color:#d81b60}.accent-maroon .page-item.active .page-link,.accent-maroon .page-item.active a{background-color:#d81b60;border-color:#d81b60;color:#fff}.accent-maroon .page-item.disabled .page-link,.accent-maroon .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-maroon [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-maroon [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-maroon [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-maroon [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-blue .btn-link,.accent-blue a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#3085d6}.accent-blue .btn-link:hover,.accent-blue a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#1f5e9b}.accent-blue .dropdown-item.active,.accent-blue .dropdown-item:active{background:#3085d6;color:#fff}.accent-blue .custom-control-input:checked~.custom-control-label:before{background:#3085d6;border-color:#1a5186}.accent-blue .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-blue .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-blue .custom-file-input:focus~.custom-file-label,.accent-blue .custom-select:focus,.accent-blue .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#9ac4eb}.accent-blue .page-item .page-link{color:#3085d6}.accent-blue .page-item.active .page-link,.accent-blue .page-item.active a{background-color:#3085d6;border-color:#3085d6;color:#fff}.accent-blue .page-item.disabled .page-link,.accent-blue .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-blue [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-blue [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-blue [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-blue [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-indigo .btn-link,.accent-indigo a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#5c6bc6}.accent-indigo .btn-link:hover,.accent-indigo a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#37469e}.accent-indigo .dropdown-item.active,.accent-indigo .dropdown-item:active{background:#5c6bc6;color:#fff}.accent-indigo .custom-control-input:checked~.custom-control-label:before{background:#5c6bc6;border-color:#313e8b}.accent-indigo .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-indigo .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-indigo .custom-file-input:focus~.custom-file-label,.accent-indigo .custom-select:focus,.accent-indigo .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#bac1e7}.accent-indigo .page-item .page-link{color:#5c6bc6}.accent-indigo .page-item.active .page-link,.accent-indigo .page-item.active a{background-color:#5c6bc6;border-color:#5c6bc6;color:#fff}.accent-indigo .page-item.disabled .page-link,.accent-indigo .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-indigo [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-indigo [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-indigo [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-indigo [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-purple .btn-link,.accent-purple a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#6f42c1}.accent-purple .btn-link:hover,.accent-purple a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#4e2d89}.accent-purple .dropdown-item.active,.accent-purple .dropdown-item:active{background:#6f42c1;color:#fff}.accent-purple .custom-control-input:checked~.custom-control-label:before{background:#6f42c1;border-color:#432776}.accent-purple .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-purple .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-purple .custom-file-input:focus~.custom-file-label,.accent-purple .custom-select:focus,.accent-purple .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#b8a2e0}.accent-purple .page-item .page-link{color:#6f42c1}.accent-purple .page-item.active .page-link,.accent-purple .page-item.active a{background-color:#6f42c1;border-color:#6f42c1;color:#fff}.accent-purple .page-item.disabled .page-link,.accent-purple .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-purple [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-purple [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-purple [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-purple [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-pink .btn-link,.accent-pink a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#ff8acc}.accent-pink .btn-link:hover,.accent-pink a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#ff3eab}.accent-pink .dropdown-item.active,.accent-pink .dropdown-item:active{background:#ff8acc;color:#2a2e30}.accent-pink .custom-control-input:checked~.custom-control-label:before{background:#ff8acc;border-color:#ff24a0}.accent-pink .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%232a2e30' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-pink .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-pink .custom-file-input:focus~.custom-file-label,.accent-pink .custom-select:focus,.accent-pink .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#fff}.accent-pink .page-item .page-link{color:#ff8acc}.accent-pink .page-item.active .page-link,.accent-pink .page-item.active a{background-color:#ff8acc;border-color:#ff8acc;color:#fff}.accent-pink .page-item.disabled .page-link,.accent-pink .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-pink [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-pink [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-pink [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-pink [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-red .btn-link,.accent-red a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#ea5455}.accent-red .btn-link:hover,.accent-red a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#d71a1c}.accent-red .dropdown-item.active,.accent-red .dropdown-item:active{background:#ea5455;color:#fff}.accent-red .custom-control-input:checked~.custom-control-label:before{background:#ea5455;border-color:#c01819}.accent-red .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-red .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-red .custom-file-input:focus~.custom-file-label,.accent-red .custom-select:focus,.accent-red .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#f8c6c6}.accent-red .page-item .page-link{color:#ea5455}.accent-red .page-item.active .page-link,.accent-red .page-item.active a{background-color:#ea5455;border-color:#ea5455;color:#fff}.accent-red .page-item.disabled .page-link,.accent-red .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-red [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-red [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-red [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-red [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-orange .btn-link,.accent-orange a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#dda451}.accent-orange .btn-link:hover,.accent-orange a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#bd7f25}.accent-orange .dropdown-item.active,.accent-orange .dropdown-item:active{background:#dda451;color:#2a2e30}.accent-orange .custom-control-input:checked~.custom-control-label:before{background:#dda451;border-color:#a77121}.accent-orange .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%232a2e30' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-orange .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-orange .custom-file-input:focus~.custom-file-label,.accent-orange .custom-select:focus,.accent-orange .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#f2dcbc}.accent-orange .page-item .page-link{color:#dda451}.accent-orange .page-item.active .page-link,.accent-orange .page-item.active a{background-color:#dda451;border-color:#dda451;color:#fff}.accent-orange .page-item.disabled .page-link,.accent-orange .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-orange [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-orange [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-orange [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-orange [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-yellow .btn-link,.accent-yellow a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#edc30e}.accent-yellow .btn-link:hover,.accent-yellow a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#a5880a}.accent-yellow .dropdown-item.active,.accent-yellow .dropdown-item:active{background:#edc30e;color:#2a2e30}.accent-yellow .custom-control-input:checked~.custom-control-label:before{background:#edc30e;border-color:#8d7408}.accent-yellow .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%232a2e30' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-yellow .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-yellow .custom-file-input:focus~.custom-file-label,.accent-yellow .custom-select:focus,.accent-yellow .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#f8e283}.accent-yellow .page-item .page-link{color:#edc30e}.accent-yellow .page-item.active .page-link,.accent-yellow .page-item.active a{background-color:#edc30e;border-color:#edc30e;color:#fff}.accent-yellow .page-item.disabled .page-link,.accent-yellow .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-yellow [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-yellow [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-yellow [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-yellow [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-green .btn-link,.accent-green a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#21b978}.accent-green .btn-link:hover,.accent-green a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#15784e}.accent-green .dropdown-item.active,.accent-green .dropdown-item:active{background:#21b978;color:#fff}.accent-green .custom-control-input:checked~.custom-control-label:before{background:#21b978;border-color:#126240}.accent-green .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-green .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-green .custom-file-input:focus~.custom-file-label,.accent-green .custom-select:focus,.accent-green .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#73e6b5}.accent-green .page-item .page-link{color:#21b978}.accent-green .page-item.active .page-link,.accent-green .page-item.active a{background-color:#21b978;border-color:#21b978;color:#fff}.accent-green .page-item.disabled .page-link,.accent-green .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-green [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-green [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-green [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-green [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-teal .btn-link,.accent-teal a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#20c997}.accent-teal .btn-link:hover,.accent-teal a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#158765}.accent-teal .dropdown-item.active,.accent-teal .dropdown-item:active{background:#20c997;color:#fff}.accent-teal .custom-control-input:checked~.custom-control-label:before{background:#20c997;border-color:#127155}.accent-teal .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-teal .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-teal .custom-file-input:focus~.custom-file-label,.accent-teal .custom-select:focus,.accent-teal .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#7eeaca}.accent-teal .page-item .page-link{color:#20c997}.accent-teal .page-item.active .page-link,.accent-teal .page-item.active a{background-color:#20c997;border-color:#20c997;color:#fff}.accent-teal .page-item.disabled .page-link,.accent-teal .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-teal [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-teal [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-teal [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-teal [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-cyan .btn-link,.accent-cyan a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#7367f0}.accent-cyan .btn-link:hover,.accent-cyan a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#3321e9}.accent-cyan .dropdown-item.active,.accent-cyan .dropdown-item:active{background:#7367f0;color:#fff}.accent-cyan .custom-control-input:checked~.custom-control-label:before{background:#7367f0;border-color:#2716db}.accent-cyan .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-cyan .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-cyan .custom-file-input:focus~.custom-file-label,.accent-cyan .custom-select:focus,.accent-cyan .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#dedbfb}.accent-cyan .page-item .page-link{color:#7367f0}.accent-cyan .page-item.active .page-link,.accent-cyan .page-item.active a{background-color:#7367f0;border-color:#7367f0;color:#fff}.accent-cyan .page-item.disabled .page-link,.accent-cyan .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-cyan [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-cyan [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-cyan [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-cyan [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-white .btn-link,.accent-white a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#fff}.accent-white .btn-link:hover,.accent-white a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#d9d9d9}.accent-white .dropdown-item.active,.accent-white .dropdown-item:active{background:#fff;color:#2a2e30}.accent-white .custom-control-input:checked~.custom-control-label:before{background:#fff;border-color:#ccc}.accent-white .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%232a2e30' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-white .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-white .custom-file-input:focus~.custom-file-label,.accent-white .custom-select:focus,.accent-white .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#fff}.accent-white .page-item .page-link{color:#fff}.accent-white .page-item.active .page-link,.accent-white .page-item.active a{background-color:#fff;border-color:#fff;color:#fff}.accent-white .page-item.disabled .page-link,.accent-white .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-white [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-white [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-white [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-white [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-gray .btn-link,.accent-gray a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#b8c2cc}.accent-gray .btn-link:hover,.accent-gray a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#8b9cac}.accent-gray .dropdown-item.active,.accent-gray .dropdown-item:active{background:#b8c2cc;color:#2a2e30}.accent-gray .custom-control-input:checked~.custom-control-label:before{background:#b8c2cc;border-color:#7d8fa1}.accent-gray .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%232a2e30' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-gray .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-gray .custom-file-input:focus~.custom-file-label,.accent-gray .custom-select:focus,.accent-gray .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#fff}.accent-gray .page-item .page-link{color:#b8c2cc}.accent-gray .page-item.active .page-link,.accent-gray .page-item.active a{background-color:#b8c2cc;border-color:#b8c2cc;color:#fff}.accent-gray .page-item.disabled .page-link,.accent-gray .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-gray [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-gray [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-gray [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-gray [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}.accent-gray-dark .btn-link,.accent-gray-dark a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link){color:#1e1e1e}.accent-gray-dark .btn-link:hover,.accent-gray-dark a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):not(.page-link):hover{color:#000}.accent-gray-dark .dropdown-item.active,.accent-gray-dark .dropdown-item:active{background:#1e1e1e;color:#fff}.accent-gray-dark .custom-control-input:checked~.custom-control-label:before{background:#1e1e1e;border-color:#000}.accent-gray-dark .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.accent-gray-dark .custom-control-input:focus:not(:checked)~.custom-control-label:before,.accent-gray-dark .custom-file-input:focus~.custom-file-label,.accent-gray-dark .custom-select:focus,.accent-gray-dark .form-control:focus:not(.is-invalid):not(.is-warning):not(.is-valid){border-color:#5e5e5e}.accent-gray-dark .page-item .page-link{color:#1e1e1e}.accent-gray-dark .page-item.active .page-link,.accent-gray-dark .page-item.active a{background-color:#1e1e1e;border-color:#1e1e1e;color:#fff}.accent-gray-dark .page-item.disabled .page-link,.accent-gray-dark .page-item.disabled a{background-color:#fff;border-color:#dae1e7;color:#b8c2cc}.accent-gray-dark [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-gray-dark [class*=sidebar-dark-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:hsla(0,0%,100%,.95)}.accent-gray-dark [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link),.accent-gray-dark [class*=sidebar-light-] .sidebar a:not(.dropdown-item):not(.btn-app):not(.nav-link):not(.brand-link):hover{color:#555}[class*=accent-] a.btn-primary{color:#fff}[class*=accent-] a.btn-secondary{color:#2a2e30}[class*=accent-] a.btn-info,[class*=accent-] a.btn-success{color:#fff}[class*=accent-] a.btn-warning{color:#2a2e30}[class*=accent-] a.btn-danger{color:#fff}[class*=accent-] a.btn-light{color:#2a2e30}[class*=accent-] a.btn-dark{color:#fff} ================================================ FILE: public/vendor/dcat-admin/adminlte/adminlte.js ================================================ !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.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(i,o,function(t){return e[t]}.bind(null,o));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/",n(n.s=4)}({1:function(e,t,n){"use strict";function i(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:"";return this.each((function(){var i=e(this).data("lte.layout"),o=e.extend({},m,e(this).data());i||(i=new t(e(this),o),e(this).data("lte.layout",i)),"init"===n||""===n?i._init():"fixLayoutHeight"!==n&&"fixLoginRegisterHeight"!==n||i[n]()}))}}],(o=[{key:"fixLayoutHeight",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,n=0;(e("body").hasClass(v)||e("body").hasClass(y)||"control_sidebar"==t)&&(n=e(l).height());var o={window:e(window).height(),header:0!==e(i).length?e(i).outerHeight():0,footer:0!==e(u).length?e(u).outerHeight():0,sidebar:0!==e(s).length?e(s).height():0,control_sidebar:n},a=this._max(o),c=this._config.panelAutoHeight;!0===c&&(c=0),!1!==c&&(a==o.control_sidebar?e(r).css("min-height",a+c):a==o.window?e(r).css("min-height",a+c-o.header-o.footer):e(r).css("min-height",a+c-o.header)),e("body").hasClass(p)&&(!1!==c&&e(r).css("min-height",a+c-o.header-o.footer),void 0!==e.fn.overlayScrollbars&&e(s).overlayScrollbars({className:this._config.scrollbarTheme,sizeAutoCapable:!0,scrollbars:{autoHide:this._config.scrollbarAutoHide,clickScrolling:!0}}))}},{key:"fixLoginRegisterHeight",value:function(){if(0===e(h+", "+f).length)e("body, html").css("height","auto");else if(0!==e(h+", "+f).length){var t=e(h+", "+f).height();e("body").css("min-height")!==t&&e("body").css("min-height",t)}}},{key:"_init",value:function(){var t=this;this.fixLayoutHeight(),!0===this._config.loginRegisterAutoHeight?this.fixLoginRegisterHeight():Number.isInteger(this._config.loginRegisterAutoHeight)&&setInterval(this.fixLoginRegisterHeight,this._config.loginRegisterAutoHeight),e(s).on("collapsed.lte.treeview expanded.lte.treeview",(function(){t.fixLayoutHeight()})),e(d).on("collapsed.lte.pushmenu shown.lte.pushmenu",(function(){t.fixLayoutHeight()})),e(c).on("collapsed.lte.controlsidebar",(function(){t.fixLayoutHeight()})).on("expanded.lte.controlsidebar",(function(){t.fixLayoutHeight("control_sidebar")})),e(window).resize((function(){t.fixLayoutHeight()})),e("body.hold-transition").removeClass("hold-transition")}},{key:"_max",value:function(e){var t=0;return Object.keys(e).forEach((function(n){e[n]>t&&(t=e[n])})),t}}])&&a(n.prototype,o),g&&a(n,g),t}();return e(window).on("load",(function(){_._jQueryInterface.call(e("body"))})),e(s+" a").on("focusin",(function(){e(o).addClass(g)})),e(s+" a").on("focusout",(function(){e(o).removeClass(g)})),e.fn[t]=_._jQueryInterface,e.fn[t].Constructor=_,e.fn[t].noConflict=function(){return e.fn[t]=n,_._jQueryInterface},_}(jQuery);function r(e,t){for(var n=0;n0&&void 0!==arguments[0]&&arguments[0];this._options.autoCollapseSize&&(e(window).width()<=this._options.autoCollapseSize?e(l).hasClass(h)||this.collapse():1==t&&(e(l).hasClass(h)?e(l).removeClass(h):e(l).hasClass(f)&&this.expand()))}},{key:"remember",value:function(){this._options.enableRemember&&(localStorage.getItem("remember".concat(n))==d?this._options.noTransitionAfterReload?e("body").addClass("hold-transition").addClass(d).delay(50).queue((function(){e(this).removeClass("hold-transition"),e(this).dequeue()})):e("body").addClass(d):this._options.noTransitionAfterReload?e("body").addClass("hold-transition").removeClass(d).delay(50).queue((function(){e(this).removeClass("hold-transition"),e(this).dequeue()})):e("body").removeClass(d))}},{key:"_init",value:function(){var t=this;this.remember(),this.autoCollapse(),e(window).resize((function(){t.autoCollapse(!0)}))}},{key:"_addOverlay",value:function(){var t=this,n=e("
        ",{id:"sidebar-overlay"});n.on("click",(function(){t.collapse()})),e(u).append(n)}}])&&r(i.prototype,s),g&&r(i,g),t}();return e(document).on("click",s,(function(t){t.preventDefault();var n=t.currentTarget;"pushmenu"!==e(n).data("widget")&&(n=e(n).closest(s)),g._jQueryInterface.call(e(n),"toggle")})),e(window).on("load",(function(){g._jQueryInterface.call(e(s))})),e.fn[t]=g._jQueryInterface,e.fn[t].Constructor=g,e.fn[t].noConflict=function(){return e.fn[t]=i,g._jQueryInterface},g}(jQuery);function c(e,t){for(var n=0;n ").concat(r)).slideUp(),t.find(l).removeClass(d)}))}},{key:"toggle",value:function(t){var n=e(t.currentTarget),i=n.parent(),o=i.find("> "+r);if(o.is(r)||(i.is(a)||(o=i.parent().find("> "+r)),o.is(r))){t.preventDefault();var s=n.parents(a).first();s.hasClass(d)?this.collapse(e(o),s):this.expand(e(o),s)}}},{key:"_setupListeners",value:function(){var t=this;e(document).on("click",this._config.trigger,(function(e){t.toggle(e)}))}},{key:"_expandSidebar",value:function(){e("body").hasClass(h)&&e(this._config.sidebarButtonSelector).PushMenu("expand")}}])&&c(n.prototype,i),s&&c(n,s),t}();return e(window).on(o.LOAD_DATA_API,(function(){e(u).each((function(){g._jQueryInterface.call(e(this),"init")}))})),e.fn[t]=g._jQueryInterface,e.fn[t].Constructor=g,e.fn[t].noConflict=function(){return e.fn[t]=i,g._jQueryInterface},g}(jQuery);function d(e,t){for(var n=0;n "+d.CARD_HEADER+" "+this._settings.collapseTrigger+" ."+this._settings.collapseIcon).addClass(this._settings.expandIcon).removeClass(this._settings.collapseIcon);var n=e.Event(o.COLLAPSED);this._element.trigger(n,this._parent)}},{key:"expand",value:function(){var t=this;this._parent.addClass(l).children("".concat(d.CARD_BODY,", ").concat(d.CARD_FOOTER)).slideDown(this._settings.animationSpeed,(function(){t._parent.removeClass(s).removeClass(l)})),this._parent.find("> "+d.CARD_HEADER+" "+this._settings.collapseTrigger+" ."+this._settings.expandIcon).addClass(this._settings.collapseIcon).removeClass(this._settings.expandIcon);var n=e.Event(o.EXPANDED);this._element.trigger(n,this._parent)}},{key:"remove",value:function(){this._parent.slideUp();var t=e.Event(o.REMOVED);this._element.trigger(t,this._parent)}},{key:"toggle",value:function(){this._parent.hasClass(s)?this.expand():this.collapse()}},{key:"maximize",value:function(){this._parent.find(this._settings.maximizeTrigger+" ."+this._settings.maximizeIcon).addClass(this._settings.minimizeIcon).removeClass(this._settings.maximizeIcon),this._parent.css({height:this._parent.height(),width:this._parent.width(),transition:"all .15s"}).delay(150).queue((function(){e(this).addClass(u),e("html").addClass(u),e(this).hasClass(s)&&e(this).addClass(c),e(this).dequeue()}));var t=e.Event(o.MAXIMIZED);this._element.trigger(t,this._parent)}},{key:"minimize",value:function(){this._parent.find(this._settings.maximizeTrigger+" ."+this._settings.minimizeIcon).addClass(this._settings.maximizeIcon).removeClass(this._settings.minimizeIcon),this._parent.css("cssText","height:"+this._parent[0].style.height+" !important;width:"+this._parent[0].style.width+" !important; transition: all .15s;").delay(10).queue((function(){e(this).removeClass(u),e("html").removeClass(u),e(this).css({height:"inherit",width:"inherit"}),e(this).hasClass(c)&&e(this).removeClass(c),e(this).dequeue()}));var t=e.Event(o.MINIMIZED);this._element.trigger(t,this._parent)}},{key:"toggleMaximize",value:function(){this._parent.hasClass(u)?this.minimize():this.maximize()}},{key:"_init",value:function(t){var n=this;this._parent=t,e(this).find(this._settings.collapseTrigger).click((function(){n.toggle()})),e(this).find(this._settings.maximizeTrigger).click((function(){n.toggleMaximize()})),e(this).find(this._settings.removeTrigger).click((function(){n.remove()}))}}])&&v(n.prototype,i),f&&v(n,f),t}();return e(document).on("click",d.DATA_COLLAPSE,(function(t){t&&t.preventDefault(),f._jQueryInterface.call(e(this),"toggle")})),e(document).on("click",d.DATA_REMOVE,(function(t){t&&t.preventDefault(),f._jQueryInterface.call(e(this),"remove")})),e(document).on("click",d.DATA_MAXIMIZE,(function(t){t&&t.preventDefault(),f._jQueryInterface.call(e(this),"toggleMaximize")})),e.fn[t]=f._jQueryInterface,e.fn[t].Constructor=f,e.fn[t].noConflict=function(){return e.fn[t]=i,f._jQueryInterface},f}(jQuery);function m(e,t){for(var n=0;n
        ',onLoadStart:function(){},onLoadDone:function(e){return e}},l=function(){function t(n,i){if(function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),this._element=n,this._parent=n.parents(s.CARD).first(),this._settings=e.extend({},r,i),this._overlay=e(this._settings.overlayTemplate),n.hasClass(a)&&(this._parent=n),""===this._settings.source)throw new Error("Source url was not defined. Please specify a url in your CardRefresh source option.")}var n,i,l;return n=t,l=[{key:"_jQueryInterface",value:function(n){var i=e(this).data("lte.cardrefresh"),o=e.extend({},r,e(this).data());i||(i=new t(e(this),o),e(this).data("lte.cardrefresh","string"==typeof n?i:n)),"string"==typeof n&&n.match(/load/)?i[n]():i._init(e(this))}}],(i=[{key:"load",value:function(){this._addOverlay(),this._settings.onLoadStart.call(e(this)),e.get(this._settings.source,this._settings.params,function(t){this._settings.loadInContent&&(""!=this._settings.sourceSelector&&(t=e(t).find(this._settings.sourceSelector).html()),this._parent.find(this._settings.content).html(t)),this._settings.onLoadDone.call(e(this),t),this._removeOverlay()}.bind(this),""!==this._settings.responseType&&this._settings.responseType);var t=e.Event(o.LOADED);e(this._element).trigger(t)}},{key:"_addOverlay",value:function(){this._parent.append(this._overlay);var t=e.Event(o.OVERLAY_ADDED);e(this._element).trigger(t)}},{key:"_removeOverlay",value:function(){this._parent.find(this._overlay).remove();var t=e.Event(o.OVERLAY_REMOVED);e(this._element).trigger(t)}},{key:"_init",value:function(t){var n=this;e(this).find(this._settings.trigger).on("click",(function(){n.load()})),this._settings.loadOnInit&&this.load()}}])&&m(n.prototype,i),l&&m(n,l),t}();return e(document).on("click",s.DATA_REFRESH,(function(t){t&&t.preventDefault(),l._jQueryInterface.call(e(this),"load")})),e(document).ready((function(){e(s.DATA_REFRESH).each((function(){l._jQueryInterface.call(e(this))}))})),e.fn[t]=l._jQueryInterface,e.fn[t].Constructor=l,e.fn[t].noConflict=function(){return e.fn[t]=i,l._jQueryInterface},l}(jQuery),b=n(1);function C(e,t){for(var n=0;n');t.data("autohide",this._config.autohide),t.data("animation",this._config.fade),this._config.class&&t.addClass(this._config.class),this._config.delay&&500!=this._config.delay&&t.data("delay",this._config.delay);var n=e('
        ');if(null!=this._config.image){var i=e("").addClass("rounded mr-2").attr("src",this._config.image).attr("alt",this._config.imageAlt);null!=this._config.imageHeight&&i.height(this._config.imageHeight).width("auto"),n.append(i)}if(null!=this._config.icon&&n.append(e("").addClass("mr-2").addClass(this._config.icon)),null!=this._config.title&&n.append(e("").addClass("mr-auto").html(this._config.title)),null!=this._config.subtitle&&n.append(e("").html(this._config.subtitle)),1==this._config.close){var a=e('' + ' ' + ' ' + '
        ' + ' ' + ' ' + '
        ' + ' ' + '
        ' + '
        ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + '
        ' + ' ' + ' ' + '
        ' + ' ' + '
        ' + '
        ') .insertBefore(this.element); // Cache the inner elements this.elements = { originalSelect: this.element, box1: $('.box1', this.container), box2: $('.box2', this.container), filterInput1: $('.box1 .filter', this.container), filterInput2: $('.box2 .filter', this.container), filterClear1: $('.box1 .clear1', this.container), filterClear2: $('.box2 .clear2', this.container), label1: $('.box1 > label', this.container), label2: $('.box2 > label', this.container), info1: $('.box1 .info', this.container), info2: $('.box2 .info', this.container), select1: $('.box1 select', this.container), select2: $('.box2 select', this.container), moveButton: $('.box1 .move', this.container), removeButton: $('.box2 .remove', this.container), moveAllButton: $('.box1 .moveall', this.container), removeAllButton: $('.box2 .removeall', this.container), form: $($('.box1 .filter', this.container)[0].form) }; // Set select IDs this.originalSelectName = this.element.attr('name') || ''; var select1Id = 'bootstrap-duallistbox-nonselected-list_' + this.originalSelectName, select2Id = 'bootstrap-duallistbox-selected-list_' + this.originalSelectName; this.elements.select1.attr('id', select1Id); this.elements.select2.attr('id', select2Id); this.elements.label1.attr('for', select1Id); this.elements.label2.attr('for', select2Id); // Apply all settings this.selectedElements = 0; this.sortIndex = 0; this.elementCount = 0; this.setBootstrap2Compatible(this.settings.bootstrap2Compatible); this.setFilterTextClear(this.settings.filterTextClear); this.setFilterPlaceHolder(this.settings.filterPlaceHolder); this.setMoveSelectedLabel(this.settings.moveSelectedLabel); this.setMoveAllLabel(this.settings.moveAllLabel); this.setRemoveSelectedLabel(this.settings.removeSelectedLabel); this.setRemoveAllLabel(this.settings.removeAllLabel); this.setMoveOnSelect(this.settings.moveOnSelect); this.setMoveOnDoubleClick(this.settings.moveOnDoubleClick); this.setPreserveSelectionOnMove(this.settings.preserveSelectionOnMove); this.setSelectedListLabel(this.settings.selectedListLabel); this.setNonSelectedListLabel(this.settings.nonSelectedListLabel); this.setHelperSelectNamePostfix(this.settings.helperSelectNamePostfix); this.setSelectOrMinimalHeight(this.settings.selectorMinimalHeight); updateSelectionStates(this); this.setShowFilterInputs(this.settings.showFilterInputs); this.setNonSelectedFilter(this.settings.nonSelectedFilter); this.setSelectedFilter(this.settings.selectedFilter); this.setInfoText(this.settings.infoText); this.setInfoTextFiltered(this.settings.infoTextFiltered); this.setInfoTextEmpty(this.settings.infoTextEmpty); this.setFilterOnValues(this.settings.filterOnValues); this.setSortByInputOrder(this.settings.sortByInputOrder); this.setEventMoveOverride(this.settings.eventMoveOverride); this.setEventMoveAllOverride(this.settings.eventMoveAllOverride); this.setEventRemoveOverride(this.settings.eventRemoveOverride); this.setEventRemoveAllOverride(this.settings.eventRemoveAllOverride); // Hide the original select this.element.hide(); bindEvents(this); refreshSelects(this); return this.element; }, setBootstrap2Compatible: function(value, refresh) { this.settings.bootstrap2Compatible = value; if (value) { this.container.removeClass('row').addClass('row-fluid bs2compatible'); this.container.find('.box1, .box2').removeClass('col-md-6').addClass('span6'); this.container.find('.clear1, .clear2').removeClass('btn-default btn-xs').addClass('btn-mini'); this.container.find('input, select').removeClass('form-control'); this.container.find('.btn').removeClass('btn-default'); this.container.find('.moveall > i, .move > i').removeClass('glyphicon glyphicon-arrow-right').addClass('icon-arrow-right'); this.container.find('.removeall > i, .remove > i').removeClass('glyphicon glyphicon-arrow-left').addClass('icon-arrow-left'); } else { this.container.removeClass('row-fluid bs2compatible').addClass('row'); this.container.find('.box1, .box2').removeClass('span6').addClass('col-md-6'); this.container.find('.clear1, .clear2').removeClass('btn-mini').addClass('btn-default btn-xs'); this.container.find('input, select').addClass('form-control'); this.container.find('.btn').addClass('btn-default'); this.container.find('.moveall > i, .move > i').removeClass('icon-arrow-right').addClass('glyphicon glyphicon-arrow-right'); this.container.find('.removeall > i, .remove > i').removeClass('icon-arrow-left').addClass('glyphicon glyphicon-arrow-left'); } if (refresh) { refreshSelects(this); } return this.element; }, setFilterTextClear: function(value, refresh) { this.settings.filterTextClear = value; this.elements.filterClear1.html(value); this.elements.filterClear2.html(value); if (refresh) { refreshSelects(this); } return this.element; }, setFilterPlaceHolder: function(value, refresh) { this.settings.filterPlaceHolder = value; this.elements.filterInput1.attr('placeholder', value); this.elements.filterInput2.attr('placeholder', value); if (refresh) { refreshSelects(this); } return this.element; }, setMoveSelectedLabel: function(value, refresh) { this.settings.moveSelectedLabel = value; this.elements.moveButton.attr('title', value); if (refresh) { refreshSelects(this); } return this.element; }, setMoveAllLabel: function(value, refresh) { this.settings.moveAllLabel = value; this.elements.moveAllButton.attr('title', value); if (refresh) { refreshSelects(this); } return this.element; }, setRemoveSelectedLabel: function(value, refresh) { this.settings.removeSelectedLabel = value; this.elements.removeButton.attr('title', value); if (refresh) { refreshSelects(this); } return this.element; }, setRemoveAllLabel: function(value, refresh) { this.settings.removeAllLabel = value; this.elements.removeAllButton.attr('title', value); if (refresh) { refreshSelects(this); } return this.element; }, setMoveOnSelect: function(value, refresh) { if (isBuggyAndroid) { value = true; } this.settings.moveOnSelect = value; if (this.settings.moveOnSelect) { this.container.addClass('moveonselect'); var self = this; this.elements.select1.on('change', function() { move(self); }); this.elements.select2.on('change', function() { remove(self); }); } else { this.container.removeClass('moveonselect'); this.elements.select1.off('change'); this.elements.select2.off('change'); } if (refresh) { refreshSelects(this); } return this.element; }, setMoveOnDoubleClick: function(value, refresh) { if (isBuggyAndroid) { value = false; } this.settings.moveOnDoubleClick = value; if (this.settings.moveOnDoubleClick) { this.container.addClass('moveondoubleclick'); var self = this; this.elements.select1.on('dblclick', function() { move(self); }); this.elements.select2.on('dblclick', function() { remove(self); }); } else { this.container.removeClass('moveondoubleclick'); this.elements.select1.off('dblclick'); this.elements.select2.off('dblclick'); } if (refresh) { refreshSelects(this); } return this.element; }, setPreserveSelectionOnMove: function(value, refresh) { // We are forcing to move on select and disabling preserveSelectionOnMove on Android if (isBuggyAndroid) { value = false; } this.settings.preserveSelectionOnMove = value; if (refresh) { refreshSelects(this); } return this.element; }, setSelectedListLabel: function(value, refresh) { this.settings.selectedListLabel = value; if (value) { this.elements.label2.show().html(value); } else { this.elements.label2.hide().html(value); } if (refresh) { refreshSelects(this); } return this.element; }, setNonSelectedListLabel: function(value, refresh) { this.settings.nonSelectedListLabel = value; if (value) { this.elements.label1.show().html(value); } else { this.elements.label1.hide().html(value); } if (refresh) { refreshSelects(this); } return this.element; }, setHelperSelectNamePostfix: function(value, refresh) { this.settings.helperSelectNamePostfix = value; if (value) { this.elements.select1.attr('name', this.originalSelectName + value + '1'); this.elements.select2.attr('name', this.originalSelectName + value + '2'); } else { this.elements.select1.removeAttr('name'); this.elements.select2.removeAttr('name'); } if (refresh) { refreshSelects(this); } return this.element; }, setSelectOrMinimalHeight: function(value, refresh) { this.settings.selectorMinimalHeight = value; var height = this.element.height(); if (this.element.height() < value) { height = value; } this.elements.select1.height(height); this.elements.select2.height(height); if (refresh) { refreshSelects(this); } return this.element; }, setShowFilterInputs: function(value, refresh) { if (!value) { this.setNonSelectedFilter(''); this.setSelectedFilter(''); refreshSelects(this); this.elements.filterInput1.hide(); this.elements.filterInput2.hide(); } else { this.elements.filterInput1.show(); this.elements.filterInput2.show(); } this.settings.showFilterInputs = value; if (refresh) { refreshSelects(this); } return this.element; }, setNonSelectedFilter: function(value, refresh) { if (this.settings.showFilterInputs) { this.settings.nonSelectedFilter = value; this.elements.filterInput1.val(value); if (refresh) { refreshSelects(this); } return this.element; } }, setSelectedFilter: function(value, refresh) { if (this.settings.showFilterInputs) { this.settings.selectedFilter = value; this.elements.filterInput2.val(value); if (refresh) { refreshSelects(this); } return this.element; } }, setInfoText: function(value, refresh) { this.settings.infoText = value; if (value) { this.elements.info1.show(); this.elements.info2.show(); } else { this.elements.info1.hide(); this.elements.info2.hide(); } if (refresh) { refreshSelects(this); } return this.element; }, setInfoTextFiltered: function(value, refresh) { this.settings.infoTextFiltered = value; if (refresh) { refreshSelects(this); } return this.element; }, setInfoTextEmpty: function(value, refresh) { this.settings.infoTextEmpty = value; if (refresh) { refreshSelects(this); } return this.element; }, setFilterOnValues: function(value, refresh) { this.settings.filterOnValues = value; if (refresh) { refreshSelects(this); } return this.element; }, setSortByInputOrder: function(value, refresh){ this.settings.sortByInputOrder = value; if (refresh) { refreshSelects(this); } return this.element; }, setEventMoveOverride: function(value, refresh) { this.settings.eventMoveOverride = value; if (refresh) { refreshSelects(this); } return this.element; }, setEventMoveAllOverride: function(value, refresh) { this.settings.eventMoveAllOverride = value; if (refresh) { refreshSelects(this); } return this.element; }, setEventRemoveOverride: function(value, refresh) { this.settings.eventRemoveOverride = value; if (refresh) { refreshSelects(this); } return this.element; }, setEventRemoveAllOverride: function(value, refresh) { this.settings.eventRemoveAllOverride = value; if (refresh) { refreshSelects(this); } return this.element; }, getContainer: function() { return this.container; }, refresh: function(mustClearSelections) { updateSelectionStates(this); if (!mustClearSelections) { saveSelections(this, 1); saveSelections(this, 2); } else { clearSelections(this); } refreshSelects(this); }, destroy: function() { this.container.remove(); this.element.show(); $.data(this, 'plugin_' + pluginName, null); return this.element; } }; // A really lightweight plugin wrapper around the constructor, // preventing against multiple instantiations $.fn[ pluginName ] = function (options) { var args = arguments; // Is the first parameter an object (options), or was omitted, instantiate a new instance of the plugin. if (options === undefined || typeof options === 'object') { return this.each(function () { // If this is not a select if (!$(this).is('select')) { $(this).find('select').each(function(index, item) { // For each nested select, instantiate the Dual List Box $(item).bootstrapDualListbox(options); }); } else if (!$.data(this, 'plugin_' + pluginName)) { // Only allow the plugin to be instantiated once so we check that the element has no plugin instantiation yet // if it has no instance, create a new one, pass options to our plugin constructor, // and store the plugin instance in the elements jQuery data object. $.data(this, 'plugin_' + pluginName, new BootstrapDualListbox(this, options)); } }); // If the first parameter is a string and it doesn't start with an underscore or "contains" the `init`-function, // treat this as a call to a public method. } else if (typeof options === 'string' && options[0] !== '_' && options !== 'init') { // Cache the method call to make it possible to return a value var returns; this.each(function () { var instance = $.data(this, 'plugin_' + pluginName); // Tests that there's already a plugin-instance and checks that the requested public method exists if (instance instanceof BootstrapDualListbox && typeof instance[options] === 'function') { // Call the method of our plugin instance, and pass it the supplied arguments. returns = instance[options].apply(instance, Array.prototype.slice.call(args, 1)); } }); // If the earlier cached method gives a value back return the value, // otherwise return this to preserve chainability. return returns !== undefined ? returns : this; } }; })(jQuery, window, document); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/bootstrap-iconpicker/css/bootstrap-iconpicker.css ================================================ /*!======================================================================== * File: bootstrap-iconpicker.css v1.10.0 by @victor-valencia * https://victor-valencia.github.com/bootstrap-iconpicker * ======================================================================== * Copyright 2013-2018 Victor Valencia Rico. * Licensed under MIT license. * https://github.com/victor-valencia/bootstrap-iconpicker/blob/master/LICENSE * ======================================================================== */ .iconpicker .caret { margin-left: 10px !important; } .iconpicker { min-width: 60px; } .iconpicker input.search-control { margin-bottom: 6px; margin-top: 6px; } div.iconpicker.left .table-icons { margin-right: auto; } div.iconpicker.center .table-icons { margin-left: auto; margin-right: auto; } div.iconpicker.right .table-icons { margin-left: auto; } .table-icons .btn { min-height: 30px; min-width: 35px; text-align: center; padding: 0; margin: 2px; } .table-icons td { min-width: 39px; } .popover { max-width: inherit !important; } .iconpicker-popover { z-index: 1050 !important; } .iconpicker-popover .search-control { margin-bottom: 6px; margin-top: 6px; } ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/bootstrap-iconpicker/js/bootstrap-iconpicker-iconset-all.js ================================================ /*!======================================================================== * File: bootstrap-iconpicker-iconset.js v1.10.0 by @victor-valencia * https://victor-valencia.github.com/bootstrap-iconpicker * ======================================================================== * Copyright 2013-2018 Victor Valencia Rico. * Licensed under MIT license. * https://github.com/victor-valencia/bootstrap-iconpicker/blob/master/LICENSE * ======================================================================== */ /*!======================================================================== * Iconset: Elusive Icons * Versions: 2.0.0 * http://elusiveicons.com/ * ======================================================================== */ ;(function($){ var data = { iconClass: '', iconClassFix: 'el-icon-', icons: [], allVersions: [ { version: '2.0.0', icons: [ '', 'address-book', 'address-book-alt', 'adjust', 'adjust-alt', 'adult', 'align-center', 'align-justify', 'align-left', 'align-right', 'arrow-down', 'arrow-left', 'arrow-right', 'arrow-up', 'asl', 'asterisk', 'backward', 'ban-circle', 'barcode', 'behance', 'bell', 'blind', 'blogger', 'bold', 'book', 'bookmark', 'bookmark-empty', 'braille', 'briefcase', 'broom', 'brush', 'bulb', 'bullhorn', 'calendar', 'calendar-sign', 'camera', 'car', 'caret-down', 'caret-left', 'caret-right', 'caret-up', 'cc', 'certificate', 'check', 'check-empty', 'chevron-down', 'chevron-left', 'chevron-right', 'chevron-up', 'child', 'circle-arrow-down', 'circle-arrow-left', 'circle-arrow-right', 'circle-arrow-up', 'cloud', 'cloud-alt', 'cog', 'cog-alt', 'cogs', 'comment', 'comment-alt', 'compass', 'compass-alt', 'credit-card', 'css', 'dashboard', 'delicious', 'deviantart', 'digg', 'download', 'download-alt', 'dribbble', 'edit', 'eject', 'envelope', 'envelope-alt', 'error', 'error-alt', 'eur', 'exclamation-sign', 'eye-close', 'eye-open', 'facebook', 'facetime-video', 'fast-backward', 'fast-forward', 'female', 'file', 'file-alt', 'file-edit', 'file-edit-alt', 'file-new', 'file-new-alt', 'film', 'filter', 'fire', 'flag', 'flag-alt', 'flickr', 'folder', 'folder-close', 'folder-open', 'folder-sign', 'font', 'fontsize', 'fork', 'forward', 'forward-alt', 'foursquare', 'friendfeed', 'friendfeed-rect', 'fullscreen', 'gbp', 'gift', 'github', 'github-text', 'glass', 'glasses', 'globe', 'globe-alt', 'googleplus', 'graph', 'graph-alt', 'group', 'group-alt', 'guidedog', 'hand-down', 'hand-left', 'hand-right', 'hand-up', 'hdd', 'headphones', 'hearing-impaired', 'heart', 'heart-alt', 'heart-empty', 'home', 'home-alt', 'hourglass', 'idea', 'idea-alt', 'inbox', 'inbox-alt', 'inbox-box', 'indent-left', 'indent-right', 'info-sign', 'instagram', 'iphone-home', 'italic', 'key', 'laptop', 'laptop-alt', 'lastfm', 'leaf', 'lines', 'link', 'linkedin', 'list', 'list-alt', 'livejournal', 'lock', 'lock-alt', 'magic', 'magnet', 'male', 'map-marker', 'map-marker-alt', 'mic', 'mic-alt', 'minus', 'minus-sign', 'move', 'music', 'myspace', 'network', 'off', 'ok', 'ok-circle', 'ok-sign', 'opensource', 'paper-clip', 'paper-clip-alt', 'path', 'pause', 'pause-alt', 'pencil', 'pencil-alt', 'person', 'phone', 'phone-alt', 'photo', 'photo-alt', 'picasa', 'picture', 'pinterest', 'plane', 'play', 'play-alt', 'play-circle', 'plus', 'plus-sign', 'podcast', 'print', 'puzzle', 'qrcode', 'question', 'question-sign', 'quotes', 'quotes-alt', 'random', 'record', 'reddit', 'refresh', 'remove', 'remove-circle', 'remove-sign', 'repeat', 'repeat-alt', 'resize-full', 'resize-horizontal', 'resize-small', 'resize-vertical', 'return-key', 'retweet', 'reverse-alt', 'road', 'rss', 'scissors', 'screen', 'screen-alt', 'screenshot', 'search', 'search-alt', 'share', 'share-alt', 'shopping-cart', 'shopping-cart-sign', 'signal', 'skype', 'slideshare', 'smiley', 'smiley-alt', 'soundcloud', 'speaker', 'spotify', 'stackoverflow', 'star', 'star-alt', 'star-empty', 'step-backward', 'step-forward', 'stop', 'stop-alt', 'stumbleupon', 'tag', 'tags', 'tasks', 'text-height', 'text-width', 'th', 'th-large', 'th-list', 'thumbs-down', 'thumbs-up', 'time', 'time-alt', 'tint', 'torso', 'trash', 'trash-alt', 'tumblr', 'twitter', 'universal-access', 'unlock', 'unlock-alt', 'upload', 'usd', 'user', 'viadeo', 'video', 'video-alt', 'video-chat', 'view-mode', 'vimeo', 'vkontakte', 'volume-down', 'volume-off', 'volume-up', 'w3c', 'warning-sign', 'website', 'website-alt', 'wheelchair', 'wordpress', 'wrench', 'wrench-alt', 'youtube', 'zoom-in', 'zoom-out' ] } ] }; var l = data.allVersions.length; data.icons = data.allVersions[l-1].icons; $.iconset_elusiveicon = data; })(jQuery); /*!======================================================================== * Iconset: Flag Icons * Versions: 2.8.0 * http://flag-icon-css.lip.is/ * CDN: https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/[VERSION]/css/flag-icon.min.css * ======================================================================== */ ;(function($){ var data = { iconClass: 'flag-icon', iconClassFix: 'flag-icon-', icons: [], allVersions: [ { version: '2.8.0', icons: [ '', 'ad', 'ae', 'af', 'ag', 'ai', 'al', 'am', 'ao', 'aq', 'ar', 'as', 'at', 'au', 'aw', 'ax', 'az', 'ba', 'bb', 'bd', 'be', 'bf', 'bg', 'bh', 'bi', 'bj', 'bl', 'bm', 'bn', 'bo', 'bq', 'br', 'bs', 'bt', 'bv', 'bw', 'by', 'bz', 'ca', 'cc', 'cd', 'cf', 'cg', 'ch', 'ci', 'ck', 'cl', 'cm', 'cn', 'co', 'cr', 'cu', 'cv', 'cw', 'cx', 'cy', 'cz', 'de', 'dj', 'dk', 'dm', 'do', 'dz', 'ec', 'ee', 'eg', 'eh', 'er', 'es', 'et', 'eu', 'fi', 'fj', 'fk', 'fm', 'fo', 'fr', 'ga', 'gb', 'gd', 'ge', 'gf', 'gg', 'gh', 'gi', 'gl', 'gm', 'gn', 'gp', 'gq', 'gr', 'gs', 'gt', 'gu', 'gw', 'gy', 'hk', 'hm', 'hn', 'hr', 'ht', 'hu', 'id', 'ie', 'il', 'im', 'in', 'io', 'iq', 'ir', 'is', 'it', 'je', 'jm', 'jo', 'jp', 'ke', 'kg', 'kh', 'ki', 'km', 'kn', 'kp', 'kr', 'kw', 'ky', 'kz', 'la', 'lb', 'lc', 'li', 'lk', 'lr', 'ls', 'lt', 'lu', 'lv', 'ly', 'ma', 'mc', 'md', 'me', 'mf', 'mg', 'mh', 'mk', 'ml', 'mm', 'mn', 'mo', 'mp', 'mq', 'mr', 'ms', 'mt', 'mu', 'mv', 'mw', 'mx', 'my', 'mz', 'na', 'nc', 'ne', 'nf', 'ng', 'ni', 'nl', 'no', 'np', 'nr', 'nu', 'nz', 'om', 'pa', 'pe', 'pf', 'pg', 'ph', 'pk', 'pl', 'pm', 'pn', 'pr', 'ps', 'pt', 'pw', 'py', 'qa', 're', 'ro', 'rs', 'ru', 'rw', 'sa', 'sb', 'sc', 'sd', 'se', 'sg', 'sh', 'si', 'sj', 'sk', 'sl', 'sm', 'sn', 'so', 'sr', 'ss', 'st', 'sv', 'sx', 'sy', 'sz', 'tc', 'td', 'tf', 'tg', 'th', 'tj', 'tk', 'tl', 'tm', 'tn', 'to', 'tr', 'tt', 'tv', 'tw', 'tz', 'ua', 'ug', 'um', 'un', 'us', 'uy', 'uz', 'va', 'vc', 've', 'vg', 'vi', 'vn', 'vu', 'wf', 'ws', 'ye', 'yt', 'za', 'zm', 'zw' ] } ] }; var l = data.allVersions.length; data.icons = data.allVersions[l-1].icons; $.iconset_flagicon = data; })(jQuery); /*!======================================================================== * Iconset: Font Awesome * Versions: 4.0.0, 4.1.0, 4.2.0, 4.3.0, 4.4.0, 4.5.0, 4.6.0, 4.7.0 * http://fortawesome.github.io/Font-Awesome/ * CDN: https://maxcdn.bootstrapcdn.com/font-awesome/[VERSION]/css/font-awesome.min.css * ======================================================================== */ ;(function($){ var data = { iconClass: 'fa', iconClassFix: 'fa-', icons: [], allVersions: [ { version: '4.0.0', icons: [ '', 'adjust', 'adn', 'align-center', 'align-justify', 'align-left', 'align-right', 'ambulance', 'anchor', 'android', 'angle-double-down', 'angle-double-left', 'angle-double-right', 'angle-double-up', 'angle-down', 'angle-left', 'angle-right', 'angle-up', 'apple', 'archive', 'arrow-circle-down', 'arrow-circle-left', 'arrow-circle-o-down', 'arrow-circle-o-left', 'arrow-circle-o-right', 'arrow-circle-o-up', 'arrow-circle-right', 'arrow-circle-up', 'arrow-down', 'arrow-left', 'arrow-right', 'arrow-up', 'asterisk', 'backward', 'ban', 'bar-chart-o', 'barcode', 'beer', 'bell', 'bell-o', 'bitbucket', 'bitbucket-square', 'bitcoin', 'bold', 'bolt', 'book', 'bookmark', 'bookmark-o', 'briefcase', 'btc', 'bug', 'building', 'bullhorn', 'bullseye', 'calendar', 'calendar-o', 'camera', 'camera-retro', 'caret-down', 'caret-left', 'caret-right', 'caret-square-o-down', 'caret-square-o-left', 'caret-square-o-right', 'caret-square-o-up', 'caret-up', 'certificate', 'chain', 'chain-broken', 'check', 'check-circle', 'check-circle-o', 'check-square', 'check-square-o', 'chevron-circle-down', 'chevron-circle-left', 'chevron-circle-right', 'chevron-circle-up', 'chevron-down', 'chevron-left', 'chevron-right', 'chevron-up', 'circle', 'circle-o', 'clipboard', 'clock-o', 'cloud', 'cloud-download', 'cloud-upload', 'cny', 'code', 'code-fork', 'coffee', 'cog', 'cogs', 'columns', 'comment', 'comment-o', 'comments', 'comments-o', 'compass', 'copy', 'credit-card', 'crop', 'crosshairs', 'css3', 'cut', 'cutlery', 'dashboard', 'dedent', 'desktop', 'dollar', 'dot-circle-o', 'download', 'dribbble', 'dropbox', 'edit', 'eject', 'envelope', 'envelope-o', 'eraser', 'eur', 'euro', 'exchange', 'exclamation', 'exclamation-circle', 'exclamation-triangle', 'external-link', 'external-link-square', 'eye', 'eye-slash', 'facebook', 'facebook-square', 'fast-backward', 'fast-forward', 'female', 'fighter-jet', 'file', 'file-o', 'file-text', 'file-text-o', 'files-o', 'film', 'filter', 'fire', 'fire-extinguisher', 'flag', 'flag-checkered', 'flag-o', 'flash', 'flask', 'flickr', 'floppy-o', 'folder', 'folder-o', 'folder-open', 'folder-open-o', 'font', 'forward', 'foursquare', 'frown-o', 'gamepad', 'gavel', 'gbp', 'gear', 'gears', 'gift', 'github', 'github-alt', 'github-square', 'gittip', 'glass', 'globe', 'google-plus', 'google-plus-square', 'group', 'h-square', 'hand-o-down', 'hand-o-left', 'hand-o-right', 'hand-o-up', 'headphones', 'heart', 'heart-o', 'home', 'html5', 'inbox', 'indent', 'info', 'info-circle', 'inr', 'instagram', 'italic', 'jpy', 'key', 'keyboard-o', 'krw', 'laptop', 'leaf', 'legal', 'lemon-o', 'level-down', 'level-up', 'lightbulb-o', 'link', 'linkedin', 'linkedin-square', 'linux', 'list', 'list-alt', 'list-ol', 'list-ul', 'location-arrow', 'lock', 'long-arrow-down', 'long-arrow-left', 'long-arrow-right', 'long-arrow-up', 'magic', 'magnet', 'mail-forward', 'mail-reply', 'mail-reply-all', 'male', 'map-marker', 'maxcdn', 'medkit', 'meh-o', 'microphone', 'microphone-slash', 'minus', 'minus-circle', 'minus-square', 'minus-square-o', 'mobile', 'mobile-phone', 'money', 'moon-o', 'music', 'outdent', 'pagelines', 'paperclip', 'paste', 'pause', 'pencil', 'pencil-square', 'pencil-square-o', 'phone', 'phone-square', 'picture-o', 'pinterest', 'pinterest-square', 'plane', 'play', 'play-circle', 'play-circle-o', 'plus', 'plus-circle', 'plus-square', 'power-off', 'print', 'puzzle-piece', 'qrcode', 'question', 'question-circle', 'quote-left', 'quote-right', 'random', 'refresh', 'renren', 'reorder', 'repeat', 'reply', 'reply-all', 'retweet', 'rmb', 'road', 'rocket', 'rotate-left', 'rotate-right', 'rouble', 'rss', 'rss-square', 'rub', 'ruble', 'rupee', 'save', 'scissors', 'search', 'search-minus', 'search-plus', 'share', 'share-square', 'share-square-o', 'shield', 'shopping-cart', 'sign-in', 'sign-out', 'signal', 'sitemap', 'skype', 'smile-o', 'sort', 'sort-alpha-asc', 'sort-alpha-desc', 'sort-amount-asc', 'sort-amount-desc', 'sort-asc', 'sort-desc', 'sort-down', 'sort-numeric-asc', 'sort-numeric-desc', 'sort-up', 'spinner', 'square', 'square-o', 'stack-exchange', 'stack-overflow', 'star', 'star-half', 'star-half-empty', 'star-half-full', 'star-half-o', 'star-o', 'step-backward', 'step-forward', 'stethoscope', 'stop', 'strikethrough', 'subscript', 'suitcase', 'sun-o', 'superscript', 'table', 'tablet', 'tachometer', 'tag', 'tags', 'tasks', 'terminal', 'text-height', 'text-width', 'th', 'th-large', 'th-list', 'thumb-tack', 'thumbs-down', 'thumbs-o-down', 'thumbs-o-up', 'thumbs-up', 'ticket', 'times', 'times-circle', 'times-circle-o', 'tint', 'toggle-down', 'toggle-left', 'toggle-right', 'toggle-up', 'trash-o', 'trello', 'trophy', 'truck', 'try', 'tumblr', 'tumblr-square', 'turkish-lira', 'twitter', 'twitter-square', 'umbrella', 'underline', 'undo', 'unlink', 'unlock', 'unsorted', 'upload', 'usd', 'user', 'user-md', 'video-camera', 'vimeo-square', 'vk', 'volume-down', 'volume-off', 'volume-up', 'warning', 'weibo', 'wheelchair', 'windows', 'won', 'wrench', 'xing', 'xing-square', 'yen', 'youtube', 'youtube-play', 'youtube-square' ] }, { version: '4.1.0', icons: [ '', 'adjust', 'adn', 'align-center', 'align-justify', 'align-left', 'align-right', 'ambulance', 'anchor', 'android', 'angle-double-down', 'angle-double-left', 'angle-double-right', 'angle-double-up', 'angle-down', 'angle-left', 'angle-right', 'angle-up', 'apple', 'archive', 'arrow-circle-down', 'arrow-circle-left', 'arrow-circle-o-down', 'arrow-circle-o-left', 'arrow-circle-o-right', 'arrow-circle-o-up', 'arrow-circle-right', 'arrow-circle-up', 'arrow-down', 'arrow-left', 'arrow-right', 'arrow-up', 'arrows', 'arrows-alt', 'arrows-h', 'arrows-v', 'asterisk', 'automobile', 'backward', 'ban', 'bank', 'bar-chart-o', 'barcode', 'bars', 'beer', 'behance', 'behance-square', 'bell', 'bell-o', 'bitbucket', 'bitbucket-square', 'bitcoin', 'bold', 'bolt', 'bomb', 'book', 'bookmark', 'bookmark-o', 'briefcase', 'btc', 'bug', 'building', 'building-o', 'bullhorn', 'bullseye', 'cab', 'calendar', 'calendar-o', 'camera', 'camera-retro', 'car', 'caret-down', 'caret-left', 'caret-right', 'caret-square-o-down', 'caret-square-o-left', 'caret-square-o-right', 'caret-square-o-up', 'caret-up', 'certificate', 'chain', 'chain-broken', 'check', 'check-circle', 'check-circle-o', 'check-square', 'check-square-o', 'chevron-circle-down', 'chevron-circle-left', 'chevron-circle-right', 'chevron-circle-up', 'chevron-down', 'chevron-left', 'chevron-right', 'chevron-up', 'child', 'circle', 'circle-o', 'circle-thin', 'clipboard', 'clock-o', 'cloud', 'cloud-download', 'cloud-upload', 'cny', 'code', 'code-fork', 'coffee', 'cog', 'cogs', 'columns', 'comment', 'comment-o', 'comments', 'comments-o', 'compass', 'compress', 'copy', 'credit-card', 'crop', 'crosshairs', 'css3', 'cube', 'cubes', 'cut', 'cutlery', 'dashboard', 'database', 'dedent', 'delicious', 'desktop', 'digg', 'dollar', 'dot-circle-o', 'download', 'dribbble', 'dropbox', 'drupal', 'edit', 'eject', 'ellipsis-h', 'ellipsis-v', 'empire', 'envelope', 'envelope-o', 'envelope-square', 'eraser', 'eur', 'euro', 'exchange', 'exclamation', 'exclamation-circle', 'exclamation-triangle', 'expand', 'external-link', 'external-link-square', 'eye', 'eye-slash', 'facebook', 'facebook-square', 'fast-backward', 'fast-forward', 'fax', 'female', 'fighter-jet', 'file', 'file-archive-o', 'file-audio-o', 'file-code-o', 'file-excel-o', 'file-image-o', 'file-movie-o', 'file-o', 'file-pdf-o', 'file-photo-o', 'file-picture-o', 'file-powerpoint-o', 'file-sound-o', 'file-text', 'file-text-o', 'file-video-o', 'file-word-o', 'file-zip-o', 'files-o', 'film', 'filter', 'fire', 'fire-extinguisher', 'flag', 'flag-checkered', 'flag-o', 'flash', 'flask', 'flickr', 'floppy-o', 'folder', 'folder-o', 'folder-open', 'folder-open-o', 'font', 'forward', 'foursquare', 'frown-o', 'gamepad', 'gavel', 'gbp', 'ge', 'gear', 'gears', 'gift', 'git', 'git-square', 'github', 'github-alt', 'github-square', 'gittip', 'glass', 'globe', 'google', 'google-plus', 'google-plus-square', 'graduation-cap', 'group', 'h-square', 'hacker-news', 'hand-o-down', 'hand-o-left', 'hand-o-right', 'hand-o-up', 'hdd-o', 'header', 'headphones', 'heart', 'heart-o', 'history', 'home', 'hospital-o', 'html5', 'image', 'inbox', 'indent', 'info', 'info-circle', 'inr', 'instagram', 'institution', 'italic', 'joomla', 'jpy', 'jsfiddle', 'key', 'keyboard-o', 'krw', 'language', 'laptop', 'leaf', 'legal', 'lemon-o', 'level-down', 'level-up', 'life-bouy', 'life-ring', 'life-saver', 'lightbulb-o', 'link', 'linkedin', 'linkedin-square', 'linux', 'list', 'list-alt', 'list-ol', 'list-ul', 'location-arrow', 'lock', 'long-arrow-down', 'long-arrow-left', 'long-arrow-right', 'long-arrow-up', 'magic', 'magnet', 'mail-forward', 'mail-reply', 'mail-reply-all', 'male', 'map-marker', 'maxcdn', 'medkit', 'meh-o', 'microphone', 'microphone-slash', 'minus', 'minus-circle', 'minus-square', 'minus-square-o', 'mobile', 'mobile-phone', 'money', 'moon-o', 'mortar-board', 'music', 'navicon', 'openid', 'outdent', 'pagelines', 'paper-plane', 'paper-plane-o', 'paperclip', 'paragraph', 'paste', 'pause', 'paw', 'pencil', 'pencil-square', 'pencil-square-o', 'phone', 'phone-square', 'photo', 'picture-o', 'pied-piper', 'pied-piper-alt', 'pied-piper-square', 'pinterest', 'pinterest-square', 'plane', 'play', 'play-circle', 'play-circle-o', 'plus', 'plus-circle', 'plus-square', 'plus-square-o', 'power-off', 'print', 'puzzle-piece', 'qq', 'qrcode', 'question', 'question-circle', 'quote-left', 'quote-right', 'ra', 'random', 'rebel', 'reddit', 'reddit-square', 'refresh', 'renren', 'reorder', 'repeat', 'reply', 'reply-all', 'retweet', 'rmb', 'road', 'rocket', 'rotate-left', 'rotate-right', 'rouble', 'rss', 'rss-square', 'rub', 'ruble', 'rupee', 'save', 'scissors', 'search', 'search-minus', 'search-plus', 'send', 'send-o', 'share', 'share-alt', 'share-alt-square', 'share-square', 'share-square-o', 'shield', 'shopping-cart', 'sign-in', 'sign-out', 'signal', 'sitemap', 'skype', 'slack', 'sliders', 'smile-o', 'sort', 'sort-alpha-asc', 'sort-alpha-desc', 'sort-amount-asc', 'sort-amount-desc', 'sort-asc', 'sort-desc', 'sort-down', 'sort-numeric-asc', 'sort-numeric-desc', 'sort-up', 'soundcloud', 'space-shuttle', 'spinner', 'spoon', 'spotify', 'square', 'square-o', 'stack-exchange', 'stack-overflow', 'star', 'star-half', 'star-half-empty', 'star-half-full', 'star-half-o', 'star-o', 'steam', 'steam-square', 'step-backward', 'step-forward', 'stethoscope', 'stop', 'strikethrough', 'stumbleupon', 'stumbleupon-circle', 'subscript', 'suitcase', 'sun-o', 'superscript', 'support', 'table', 'tablet', 'tachometer', 'tag', 'tags', 'tasks', 'taxi', 'tencent-weibo', 'terminal', 'text-height', 'text-width', 'th', 'th-large', 'th-list', 'thumb-tack', 'thumbs-down', 'thumbs-o-down', 'thumbs-o-up', 'thumbs-up', 'ticket', 'times', 'times-circle', 'times-circle-o', 'tint', 'toggle-down', 'toggle-left', 'toggle-right', 'toggle-up', 'trash-o', 'tree', 'trello', 'trophy', 'truck', 'try', 'tumblr', 'tumblr-square', 'turkish-lira', 'twitter', 'twitter-square', 'umbrella', 'underline', 'undo', 'university', 'unlink', 'unlock', 'unlock-alt', 'unsorted', 'upload', 'usd', 'user', 'user-md', 'users', 'video-camera', 'vimeo-square', 'vine', 'vk', 'volume-down', 'volume-off', 'volume-up', 'warning', 'wechat', 'weibo', 'weixin', 'wheelchair', 'windows', 'won', 'wordpress', 'wrench', 'xing', 'xing-square', 'yahoo', 'yen', 'youtube', 'youtube-play', 'youtube-square' ] }, { version: '4.2.0', icons: [ '', 'adjust', 'adn', 'align-center', 'align-justify', 'align-left', 'align-right', 'ambulance', 'anchor', 'android', 'angellist', 'angle-double-down', 'angle-double-left', 'angle-double-right', 'angle-double-up', 'angle-down', 'angle-left', 'angle-right', 'angle-up', 'apple', 'archive', 'area-chart', 'arrow-circle-down', 'arrow-circle-left', 'arrow-circle-o-down', 'arrow-circle-o-left', 'arrow-circle-o-right', 'arrow-circle-o-up', 'arrow-circle-right', 'arrow-circle-up', 'arrow-down', 'arrow-left', 'arrow-right', 'arrow-up', 'arrows', 'arrows-alt', 'arrows-h', 'arrows-v', 'asterisk', 'at', 'automobile', 'backward', 'ban', 'bank', 'bar-chart-o', 'barcode', 'bars', 'beer', 'behance', 'behance-square', 'bell', 'bell-o', 'bell-slash', 'bell-slash-o', 'bicycle', 'binoculars', 'birthday-cake', 'bitbucket', 'bitbucket-square', 'bitcoin', 'bold', 'bolt', 'bomb', 'book', 'bookmark', 'bookmark-o', 'briefcase', 'btc', 'bug', 'building', 'building-o', 'bullhorn', 'bullseye', 'bus', 'cab', 'calculator', 'calendar', 'calendar-o', 'camera', 'camera-retro', 'car', 'caret-down', 'caret-left', 'caret-right', 'caret-square-o-down', 'caret-square-o-left', 'caret-square-o-right', 'caret-square-o-up', 'caret-up', 'cc', 'cc-amex', 'cc-discover', 'cc-mastercard', 'cc-paypal', 'cc-stripe', 'cc-visa', 'certificate', 'chain', 'chain-broken', 'check', 'check-circle', 'check-circle-o', 'check-square', 'check-square-o', 'chevron-circle-down', 'chevron-circle-left', 'chevron-circle-right', 'chevron-circle-up', 'chevron-down', 'chevron-left', 'chevron-right', 'chevron-up', 'child', 'circle', 'circle-o', 'circle-thin', 'clipboard', 'clock-o', 'cloud', 'cloud-download', 'cloud-upload', 'cny', 'code', 'code-fork', 'coffee', 'cog', 'cogs', 'columns', 'comment', 'comment-o', 'comments', 'comments-o', 'compass', 'compress', 'copy', 'copyright', 'credit-card', 'crop', 'crosshairs', 'css3', 'cube', 'cubes', 'cut', 'cutlery', 'dashboard', 'database', 'dedent', 'delicious', 'desktop', 'digg', 'dollar', 'dot-circle-o', 'download', 'dribbble', 'dropbox', 'drupal', 'edit', 'eject', 'ellipsis-h', 'ellipsis-v', 'empire', 'envelope', 'envelope-o', 'envelope-square', 'eraser', 'eur', 'euro', 'exchange', 'exclamation', 'exclamation-circle', 'exclamation-triangle', 'expand', 'external-link', 'external-link-square', 'eye', 'eye-slash', 'eyedropper', 'facebook', 'facebook-square', 'fast-backward', 'fast-forward', 'fax', 'female', 'fighter-jet', 'file', 'file-archive-o', 'file-audio-o', 'file-code-o', 'file-excel-o', 'file-image-o', 'file-movie-o', 'file-o', 'file-pdf-o', 'file-photo-o', 'file-picture-o', 'file-powerpoint-o', 'file-sound-o', 'file-text', 'file-text-o', 'file-video-o', 'file-word-o', 'file-zip-o', 'files-o', 'film', 'filter', 'fire', 'fire-extinguisher', 'flag', 'flag-checkered', 'flag-o', 'flash', 'flask', 'flickr', 'floppy-o', 'folder', 'folder-o', 'folder-open', 'folder-open-o', 'font', 'forward', 'foursquare', 'frown-o', 'futbol-o', 'gamepad', 'gavel', 'gbp', 'ge', 'gear', 'gears', 'gift', 'git', 'git-square', 'github', 'github-alt', 'github-square', 'gittip', 'glass', 'globe', 'google', 'google-plus', 'google-plus-square', 'google-wallet', 'graduation-cap', 'group', 'h-square', 'hacker-news', 'hand-o-down', 'hand-o-left', 'hand-o-right', 'hand-o-up', 'hdd-o', 'header', 'headphones', 'heart', 'heart-o', 'history', 'home', 'hospital-o', 'html5', 'ils', 'image', 'inbox', 'indent', 'info', 'info-circle', 'inr', 'instagram', 'institution', 'ioxhost', 'italic', 'joomla', 'jpy', 'jsfiddle', 'key', 'keyboard-o', 'krw', 'language', 'laptop', 'lastfm', 'lastfm-square', 'leaf', 'legal', 'lemon-o', 'level-down', 'level-up', 'life-bouy', 'life-ring', 'life-saver', 'lightbulb-o', 'line-chart', 'link', 'linkedin', 'linkedin-square', 'linux', 'list', 'list-alt', 'list-ol', 'list-ul', 'location-arrow', 'lock', 'long-arrow-down', 'long-arrow-left', 'long-arrow-right', 'long-arrow-up', 'magic', 'magnet', 'mail-forward', 'mail-reply', 'mail-reply-all', 'male', 'map-marker', 'maxcdn', 'meanpath', 'medkit', 'meh-o', 'microphone', 'microphone-slash', 'minus', 'minus-circle', 'minus-square', 'minus-square-o', 'mobile', 'mobile-phone', 'money', 'moon-o', 'mortar-board', 'music', 'navicon', 'newspaper-o', 'openid', 'outdent', 'pagelines', 'paint-brush', 'paper-plane', 'paper-plane-o', 'paperclip', 'paragraph', 'paste', 'pause', 'paw', 'paypal', 'pencil', 'pencil-square', 'pencil-square-o', 'phone', 'phone-square', 'photo', 'picture-o', 'pie-chart', 'pied-piper', 'pied-piper-alt', 'pinterest', 'pinterest-square', 'plane', 'play', 'play-circle', 'play-circle-o', 'plug', 'plus', 'plus-circle', 'plus-square', 'plus-square-o', 'power-off', 'print', 'puzzle-piece', 'qq', 'qrcode', 'question', 'question-circle', 'quote-left', 'quote-right', 'ra', 'random', 'rebel', 'reddit', 'reddit-square', 'refresh', 'renren', 'reorder', 'repeat', 'reply', 'reply-all', 'retweet', 'rmb', 'road', 'rocket', 'rotate-left', 'rotate-right', 'rouble', 'rss', 'rss-square', 'rub', 'ruble', 'rupee', 'save', 'scissors', 'search', 'search-minus', 'search-plus', 'send', 'send-o', 'share', 'share-alt', 'share-alt-square', 'share-square', 'share-square-o', 'shekel', 'sheqel', 'shield', 'shopping-cart', 'sign-in', 'sign-out', 'signal', 'sitemap', 'skype', 'slack', 'sliders', 'slideshare', 'smile-o', 'soccer-ball-o', 'sort', 'sort-alpha-asc', 'sort-alpha-desc', 'sort-amount-asc', 'sort-amount-desc', 'sort-asc', 'sort-desc', 'sort-down', 'sort-numeric-asc', 'sort-numeric-desc', 'sort-up', 'soundcloud', 'space-shuttle', 'spinner', 'spoon', 'spotify', 'square', 'square-o', 'stack-exchange', 'stack-overflow', 'star', 'star-half', 'star-half-empty', 'star-half-full', 'star-half-o', 'star-o', 'steam', 'steam-square', 'step-backward', 'step-forward', 'stethoscope', 'stop', 'strikethrough', 'stumbleupon', 'stumbleupon-circle', 'subscript', 'suitcase', 'sun-o', 'superscript', 'support', 'table', 'tablet', 'tachometer', 'tag', 'tags', 'tasks', 'taxi', 'tencent-weibo', 'terminal', 'text-height', 'text-width', 'th', 'th-large', 'th-list', 'thumb-tack', 'thumbs-down', 'thumbs-o-down', 'thumbs-o-up', 'thumbs-up', 'ticket', 'times', 'times-circle', 'times-circle-o', 'tint', 'toggle-down', 'toggle-left', 'toggle-off', 'toggle-on', 'toggle-right', 'toggle-up', 'trash', 'trash-o', 'tree', 'trello', 'trophy', 'truck', 'try', 'tty', 'tumblr', 'tumblr-square', 'turkish-lira', 'twitch', 'twitter', 'twitter-square', 'umbrella', 'underline', 'undo', 'university', 'unlink', 'unlock', 'unlock-alt', 'unsorted', 'upload', 'usd', 'user', 'user-md', 'users', 'video-camera', 'vimeo-square', 'vine', 'vk', 'volume-down', 'volume-off', 'volume-up', 'warning', 'wechat', 'weibo', 'weixin', 'wheelchair', 'wifi', 'windows', 'won', 'wordpress', 'wrench', 'xing', 'xing-square', 'yahoo', 'yelp', 'yen', 'youtube', 'youtube-play', 'youtube-square' ] }, { version: '4.3.0', icons: [ '', 'adjust', 'adn', 'align-center', 'align-justify', 'align-left', 'align-right', 'ambulance', 'anchor', 'android', 'angellist', 'angle-double-down', 'angle-double-left', 'angle-double-right', 'angle-double-up', 'angle-down', 'angle-left', 'angle-right', 'angle-up', 'apple', 'archive', 'area-chart', 'arrow-circle-down', 'arrow-circle-left', 'arrow-circle-o-down', 'arrow-circle-o-left', 'arrow-circle-o-right', 'arrow-circle-o-up', 'arrow-circle-right', 'arrow-circle-up', 'arrow-down', 'arrow-left', 'arrow-right', 'arrow-up', 'arrows', 'arrows-alt', 'arrows-h', 'arrows-v', 'asterisk', 'at', 'automobile', 'backward', 'ban', 'bank', 'bar-chart', 'bar-chart-o', 'barcode', 'bars', 'bed', 'beer', 'behance', 'behance-square', 'bell', 'bell-o', 'bell-slash', 'bell-slash-o', 'bicycle', 'binoculars', 'birthday-cake', 'bitbucket', 'bitbucket-square', 'bitcoin', 'bold', 'bolt', 'bomb', 'book', 'bookmark', 'bookmark-o', 'briefcase', 'btc', 'bug', 'building', 'building-o', 'bullhorn', 'bullseye', 'bus', 'buysellads', 'cab', 'calculator', 'calendar', 'calendar-o', 'camera', 'camera-retro', 'car', 'caret-down', 'caret-left', 'caret-right', 'caret-square-o-down', 'caret-square-o-left', 'caret-square-o-right', 'caret-square-o-up', 'caret-up', 'cart-arrow-down', 'cart-plus', 'cc', 'cc-amex', 'cc-discover', 'cc-mastercard', 'cc-paypal', 'cc-stripe', 'cc-visa', 'certificate', 'chain', 'chain-broken', 'check', 'check-circle', 'check-circle-o', 'check-square', 'check-square-o', 'chevron-circle-down', 'chevron-circle-left', 'chevron-circle-right', 'chevron-circle-up', 'chevron-down', 'chevron-left', 'chevron-right', 'chevron-up', 'child', 'circle', 'circle-o', 'circle-o-notch', 'circle-thin', 'clipboard', 'clock-o', 'close', 'cloud', 'cloud-download', 'cloud-upload', 'cny', 'code', 'code-fork', 'codepen', 'coffee', 'cog', 'cogs', 'columns', 'comment', 'comment-o', 'comments', 'comments-o', 'compass', 'compress', 'connectdevelop', 'copy', 'copyright', 'credit-card', 'crop', 'crosshairs', 'css3', 'cube', 'cubes', 'cut', 'cutlery', 'dashboard', 'dashcube', 'database', 'dedent', 'delicious', 'desktop', 'deviantart', 'diamond', 'digg', 'dollar', 'dot-circle-o', 'download', 'dribbble', 'dropbox', 'drupal', 'edit', 'eject', 'ellipsis-h', 'ellipsis-v', 'empire', 'envelope', 'envelope-o', 'envelope-square', 'eraser', 'eur', 'euro', 'exchange', 'exclamation', 'exclamation-circle', 'exclamation-triangle', 'expand', 'external-link', 'external-link-square', 'eye', 'eye-slash', 'eyedropper', 'facebook', 'facebook-f', 'facebook-official', 'facebook-square', 'fast-backward', 'fast-forward', 'fax', 'female', 'fighter-jet', 'file', 'file-archive-o', 'file-audio-o', 'file-code-o', 'file-excel-o', 'file-image-o', 'file-movie-o', 'file-o', 'file-pdf-o', 'file-photo-o', 'file-picture-o', 'file-powerpoint-o', 'file-sound-o', 'file-text', 'file-text-o', 'file-video-o', 'file-word-o', 'file-zip-o', 'files-o', 'film', 'filter', 'fire', 'fire-extinguisher', 'flag', 'flag-checkered', 'flag-o', 'flash', 'flask', 'flickr', 'floppy-o', 'folder', 'folder-o', 'folder-open', 'folder-open-o', 'font', 'forumbee', 'forward', 'foursquare', 'frown-o', 'futbol-o', 'gamepad', 'gavel', 'gbp', 'ge', 'gear', 'gears', 'genderless', 'gift', 'git', 'git-square', 'github', 'github-alt', 'github-square', 'gittip', 'glass', 'globe', 'google', 'google-plus', 'google-plus-square', 'google-wallet', 'graduation-cap', 'gratipay', 'group', 'h-square', 'hacker-news', 'hand-o-down', 'hand-o-left', 'hand-o-right', 'hand-o-up', 'hdd-o', 'header', 'headphones', 'heart', 'heart-o', 'heartbeat', 'history', 'home', 'hospital-o', 'hotel', 'html5', 'ils', 'image', 'inbox', 'indent', 'info', 'info-circle', 'inr', 'instagram', 'institution', 'ioxhost', 'italic', 'joomla', 'jpy', 'jsfiddle', 'key', 'keyboard-o', 'krw', 'language', 'laptop', 'lastfm', 'lastfm-square', 'leaf', 'leanpub', 'legal', 'lemon-o', 'level-down', 'level-up', 'life-bouy', 'life-buoy', 'life-ring', 'life-saver', 'lightbulb-o', 'line-chart', 'link', 'linkedin', 'linkedin-square', 'linux', 'list', 'list-alt', 'list-ol', 'list-ul', 'location-arrow', 'lock', 'long-arrow-down', 'long-arrow-left', 'long-arrow-right', 'long-arrow-up', 'magic', 'magnet', 'mail-forward', 'mail-reply', 'mail-reply-all', 'male', 'map-marker', 'mars', 'mars-double', 'mars-stroke', 'mars-stroke-h', 'mars-stroke-v', 'maxcdn', 'meanpath', 'medium', 'medkit', 'meh-o', 'mercury', 'microphone', 'microphone-slash', 'minus', 'minus-circle', 'minus-square', 'minus-square-o', 'mobile', 'mobile-phone', 'money', 'moon-o', 'mortar-board', 'motorcycle', 'music', 'navicon', 'neuter', 'newspaper-o', 'openid', 'outdent', 'pagelines', 'paint-brush', 'paper-plane', 'paper-plane-o', 'paperclip', 'paragraph', 'paste', 'pause', 'paw', 'paypal', 'pencil', 'pencil-square', 'pencil-square-o', 'phone', 'phone-square', 'photo', 'picture-o', 'pie-chart', 'pied-piper', 'pied-piper-alt', 'pinterest', 'pinterest-p', 'pinterest-square', 'plane', 'play', 'play-circle', 'play-circle-o', 'plug', 'plus', 'plus-circle', 'plus-square', 'plus-square-o', 'power-off', 'print', 'puzzle-piece', 'qq', 'qrcode', 'question', 'question-circle', 'quote-left', 'quote-right', 'ra', 'random', 'rebel', 'recycle', 'reddit', 'reddit-square', 'refresh', 'remove', 'renren', 'reorder', 'repeat', 'reply', 'reply-all', 'retweet', 'rmb', 'road', 'rocket', 'rotate-left', 'rotate-right', 'rouble', 'rss', 'rss-square', 'rub', 'ruble', 'rupee', 'save', 'scissors', 'search', 'search-minus', 'search-plus', 'sellsy', 'send', 'send-o', 'server', 'share', 'share-alt', 'share-alt-square', 'share-square', 'share-square-o', 'shekel', 'sheqel', 'shield', 'ship', 'shirtsinbulk', 'shopping-cart', 'sign-in', 'sign-out', 'signal', 'simplybuilt', 'sitemap', 'skyatlas', 'skype', 'slack', 'sliders', 'slideshare', 'smile-o', 'soccer-ball-o', 'sort', 'sort-alpha-asc', 'sort-alpha-desc', 'sort-amount-asc', 'sort-amount-desc', 'sort-asc', 'sort-desc', 'sort-down', 'sort-numeric-asc', 'sort-numeric-desc', 'sort-up', 'soundcloud', 'space-shuttle', 'spinner', 'spoon', 'spotify', 'square', 'square-o', 'stack-exchange', 'stack-overflow', 'star', 'star-half', 'star-half-empty', 'star-half-full', 'star-half-o', 'star-o', 'steam', 'steam-square', 'step-backward', 'step-forward', 'stethoscope', 'stop', 'street-view', 'strikethrough', 'stumbleupon', 'stumbleupon-circle', 'subscript', 'subway', 'suitcase', 'sun-o', 'superscript', 'support', 'table', 'tablet', 'tachometer', 'tag', 'tags', 'tasks', 'taxi', 'tencent-weibo', 'terminal', 'text-height', 'text-width', 'th', 'th-large', 'th-list', 'thumb-tack', 'thumbs-down', 'thumbs-o-down', 'thumbs-o-up', 'thumbs-up', 'ticket', 'times', 'times-circle', 'times-circle-o', 'tint', 'toggle-down', 'toggle-left', 'toggle-off', 'toggle-on', 'toggle-right', 'toggle-up', 'train', 'transgender', 'transgender-alt', 'trash', 'trash-o', 'tree', 'trello', 'trophy', 'truck', 'try', 'tty', 'tumblr', 'tumblr-square', 'turkish-lira', 'twitch', 'twitter', 'twitter-square', 'umbrella', 'underline', 'undo', 'university', 'unlink', 'unlock', 'unlock-alt', 'unsorted', 'upload', 'usd', 'user', 'user-md', 'user-plus', 'user-secret', 'user-times', 'users', 'venus', 'venus-double', 'venus-mars', 'viacoin', 'video-camera', 'vimeo-square', 'vine', 'vk', 'volume-down', 'volume-off', 'volume-up', 'warning', 'wechat', 'weibo', 'weixin', 'whatsapp', 'wheelchair', 'wifi', 'windows', 'won', 'wordpress', 'wrench', 'xing', 'xing-square', 'yahoo', 'yelp', 'yen', 'youtube', 'youtube-play', 'youtube-square' ] }, { version: '4.4.0', icons: [ '', '500px', 'adjust', 'adn', 'align-center', 'align-justify', 'align-left', 'align-right', 'amazon', 'ambulance', 'anchor', 'android', 'angellist', 'angle-double-down', 'angle-double-left', 'angle-double-right', 'angle-double-up', 'angle-down', 'angle-left', 'angle-right', 'angle-up', 'apple', 'archive', 'area-chart', 'arrow-circle-down', 'arrow-circle-left', 'arrow-circle-o-down', 'arrow-circle-o-left', 'arrow-circle-o-right', 'arrow-circle-o-up', 'arrow-circle-right', 'arrow-circle-up', 'arrow-down', 'arrow-left', 'arrow-right', 'arrow-up', 'arrows', 'arrows-alt', 'arrows-h', 'arrows-v', 'asterisk', 'at', 'automobile', 'backward', 'balance-scale', 'ban', 'bank', 'bar-chart', 'bar-chart-o', 'barcode', 'bars', 'battery-0', 'battery-1', 'battery-2', 'battery-3', 'battery-4', 'battery-empty', 'battery-full', 'battery-half', 'battery-quarter', 'battery-three-quarters', 'bed', 'beer', 'behance', 'behance-square', 'bell', 'bell-o', 'bell-slash', 'bell-slash-o', 'bicycle', 'binoculars', 'birthday-cake', 'bitbucket', 'bitbucket-square', 'bitcoin', 'black-tie', 'bold', 'bolt', 'bomb', 'book', 'bookmark', 'bookmark-o', 'briefcase', 'btc', 'bug', 'building', 'building-o', 'bullhorn', 'bullseye', 'bus', 'buysellads', 'cab', 'calculator', 'calendar', 'calendar-check-o', 'calendar-minus-o', 'calendar-o', 'calendar-plus-o', 'calendar-times-o', 'camera', 'camera-retro', 'car', 'caret-down', 'caret-left', 'caret-right', 'caret-square-o-down', 'caret-square-o-left', 'caret-square-o-right', 'caret-square-o-up', 'caret-up', 'cart-arrow-down', 'cart-plus', 'cc', 'cc-amex', 'cc-diners-club', 'cc-discover', 'cc-jcb', 'cc-mastercard', 'cc-paypal', 'cc-stripe', 'cc-visa', 'certificate', 'chain', 'chain-broken', 'check', 'check-circle', 'check-circle-o', 'check-square', 'check-square-o', 'chevron-circle-down', 'chevron-circle-left', 'chevron-circle-right', 'chevron-circle-up', 'chevron-down', 'chevron-left', 'chevron-right', 'chevron-up', 'child', 'chrome', 'circle', 'circle-o', 'circle-o-notch', 'circle-thin', 'clipboard', 'clock-o', 'clone', 'close', 'cloud', 'cloud-download', 'cloud-upload', 'cny', 'code', 'code-fork', 'codepen', 'coffee', 'cog', 'cogs', 'columns', 'comment', 'comment-o', 'commenting', 'commenting-o', 'comments', 'comments-o', 'compass', 'compress', 'connectdevelop', 'contao', 'copy', 'copyright', 'creative-commons', 'credit-card', 'crop', 'crosshairs', 'css3', 'cube', 'cubes', 'cut', 'cutlery', 'dashboard', 'dashcube', 'database', 'dedent', 'delicious', 'desktop', 'deviantart', 'diamond', 'digg', 'dollar', 'dot-circle-o', 'download', 'dribbble', 'dropbox', 'drupal', 'edit', 'eject', 'ellipsis-h', 'ellipsis-v', 'empire', 'envelope', 'envelope-o', 'envelope-square', 'eraser', 'eur', 'euro', 'exchange', 'exclamation', 'exclamation-circle', 'exclamation-triangle', 'expand', 'expeditedssl', 'external-link', 'external-link-square', 'eye', 'eye-slash', 'eyedropper', 'facebook', 'facebook-f', 'facebook-official', 'facebook-square', 'fast-backward', 'fast-forward', 'fax', 'feed', 'female', 'fighter-jet', 'file', 'file-archive-o', 'file-audio-o', 'file-code-o', 'file-excel-o', 'file-image-o', 'file-movie-o', 'file-o', 'file-pdf-o', 'file-photo-o', 'file-picture-o', 'file-powerpoint-o', 'file-sound-o', 'file-text', 'file-text-o', 'file-video-o', 'file-word-o', 'file-zip-o', 'files-o', 'film', 'filter', 'fire', 'fire-extinguisher', 'firefox', 'flag', 'flag-checkered', 'flag-o', 'flash', 'flask', 'flickr', 'floppy-o', 'folder', 'folder-o', 'folder-open', 'folder-open-o', 'font', 'fonticons', 'forumbee', 'forward', 'foursquare', 'frown-o', 'futbol-o', 'gamepad', 'gavel', 'gbp', 'ge', 'gear', 'gears', 'genderless', 'get-pocket', 'gg', 'gg-circle', 'gift', 'git', 'git-square', 'github', 'github-alt', 'github-square', 'gittip', 'glass', 'globe', 'google', 'google-plus', 'google-plus-square', 'google-wallet', 'graduation-cap', 'gratipay', 'group', 'h-square', 'hacker-news', 'hand-grab-o', 'hand-lizard-o', 'hand-o-down', 'hand-o-left', 'hand-o-right', 'hand-o-up', 'hand-paper-o', 'hand-peace-o', 'hand-pointer-o', 'hand-rock-o', 'hand-scissors-o', 'hand-spock-o', 'hand-stop-o', 'hdd-o', 'header', 'headphones', 'heart', 'heart-o', 'heartbeat', 'history', 'home', 'hospital-o', 'hotel', 'hourglass', 'hourglass-1', 'hourglass-2', 'hourglass-3', 'hourglass-end', 'hourglass-half', 'hourglass-o', 'hourglass-start', 'houzz', 'html5', 'i-cursor', 'ils', 'image', 'inbox', 'indent', 'industry', 'info', 'info-circle', 'inr', 'instagram', 'institution', 'internet-explorer', 'intersex', 'ioxhost', 'italic', 'joomla', 'jpy', 'jsfiddle', 'key', 'keyboard-o', 'krw', 'language', 'laptop', 'lastfm', 'lastfm-square', 'leaf', 'leanpub', 'legal', 'lemon-o', 'level-down', 'level-up', 'life-bouy', 'life-buoy', 'life-ring', 'life-saver', 'lightbulb-o', 'line-chart', 'link', 'linkedin', 'linkedin-square', 'linux', 'list', 'list-alt', 'list-ol', 'list-ul', 'location-arrow', 'lock', 'long-arrow-down', 'long-arrow-left', 'long-arrow-right', 'long-arrow-up', 'magic', 'magnet', 'mail-forward', 'mail-reply', 'mail-reply-all', 'male', 'map', 'map-marker', 'map-o', 'map-pin', 'map-signs', 'mars', 'mars-double', 'mars-stroke', 'mars-stroke-h', 'mars-stroke-v', 'maxcdn', 'meanpath', 'medium', 'medkit', 'meh-o', 'mercury', 'microphone', 'microphone-slash', 'minus', 'minus-circle', 'minus-square', 'minus-square-o', 'mobile', 'mobile-phone', 'money', 'moon-o', 'mortar-board', 'motorcycle', 'mouse-pointer', 'music', 'navicon', 'neuter', 'newspaper-o', 'object-group', 'object-ungroup', 'odnoklassniki', 'odnoklassniki-square', 'opencart', 'openid', 'opera', 'optin-monster', 'outdent', 'pagelines', 'paint-brush', 'paper-plane', 'paper-plane-o', 'paperclip', 'paragraph', 'paste', 'pause', 'paw', 'paypal', 'pencil', 'pencil-square', 'pencil-square-o', 'phone', 'phone-square', 'photo', 'picture-o', 'pie-chart', 'pied-piper', 'pied-piper-alt', 'pinterest', 'pinterest-p', 'pinterest-square', 'plane', 'play', 'play-circle', 'play-circle-o', 'plug', 'plus', 'plus-circle', 'plus-square', 'plus-square-o', 'power-off', 'print', 'puzzle-piece', 'qq', 'qrcode', 'question', 'question-circle', 'quote-left', 'quote-right', 'ra', 'random', 'rebel', 'recycle', 'reddit', 'reddit-square', 'refresh', 'registered', 'remove', 'renren', 'reorder', 'repeat', 'reply', 'reply-all', 'retweet', 'rmb', 'road', 'rocket', 'rotate-left', 'rotate-right', 'rouble', 'rss', 'rss-square', 'rub', 'ruble', 'rupee', 'safari', 'save', 'scissors', 'search', 'search-minus', 'search-plus', 'sellsy', 'send', 'send-o', 'server', 'share', 'share-alt', 'share-alt-square', 'share-square', 'share-square-o', 'shekel', 'sheqel', 'shield', 'ship', 'shirtsinbulk', 'shopping-cart', 'sign-in', 'sign-out', 'signal', 'simplybuilt', 'sitemap', 'skyatlas', 'skype', 'slack', 'sliders', 'slideshare', 'smile-o', 'soccer-ball-o', 'sort', 'sort-alpha-asc', 'sort-alpha-desc', 'sort-amount-asc', 'sort-amount-desc', 'sort-asc', 'sort-desc', 'sort-down', 'sort-numeric-asc', 'sort-numeric-desc', 'sort-up', 'soundcloud', 'space-shuttle', 'spinner', 'spoon', 'spotify', 'square', 'square-o', 'stack-exchange', 'stack-overflow', 'star', 'star-half', 'star-half-empty', 'star-half-full', 'star-half-o', 'star-o', 'steam', 'steam-square', 'step-backward', 'step-forward', 'stethoscope', 'sticky-note', 'sticky-note-o', 'stop', 'street-view', 'strikethrough', 'stumbleupon', 'stumbleupon-circle', 'subscript', 'subway', 'suitcase', 'sun-o', 'superscript', 'support', 'table', 'tablet', 'tachometer', 'tag', 'tags', 'tasks', 'taxi', 'television', 'tencent-weibo', 'terminal', 'text-height', 'text-width', 'th', 'th-large', 'th-list', 'thumb-tack', 'thumbs-down', 'thumbs-o-down', 'thumbs-o-up', 'thumbs-up', 'ticket', 'times', 'times-circle', 'times-circle-o', 'tint', 'toggle-down', 'toggle-left', 'toggle-off', 'toggle-on', 'toggle-right', 'toggle-up', 'trademark', 'train', 'transgender', 'transgender-alt', 'trash', 'trash-o', 'tree', 'trello', 'tripadvisor', 'trophy', 'truck', 'try', 'tty', 'tumblr', 'tumblr-square', 'turkish-lira', 'tv', 'twitch', 'twitter', 'twitter-square', 'umbrella', 'underline', 'undo', 'university', 'unlink', 'unlock', 'unlock-alt', 'unsorted', 'upload', 'usd', 'user', 'user-md', 'user-plus', 'user-secret', 'user-times', 'users', 'venus', 'venus-double', 'venus-mars', 'viacoin', 'video-camera', 'vimeo', 'vimeo-square', 'vine', 'vk', 'volume-down', 'volume-off', 'volume-up', 'warning', 'wechat', 'weibo', 'weixin', 'whatsapp', 'wheelchair', 'wifi', 'wikipedia-w', 'windows', 'won', 'wordpress', 'wrench', 'xing', 'xing-square', 'y-combinator', 'y-combinator-square', 'yahoo', 'yc', 'yc-square', 'yelp', 'yen', 'youtube', 'youtube-play', 'youtube-square' ] }, { version: '4.5.0', icons: [ '', '500px', 'adjust', 'adn', 'align-center', 'align-justify', 'align-left', 'align-right', 'amazon', 'ambulance', 'anchor', 'android', 'angellist', 'angle-double-down', 'angle-double-left', 'angle-double-right', 'angle-double-up', 'angle-down', 'angle-left', 'angle-right', 'angle-up', 'apple', 'archive', 'area-chart', 'arrow-circle-down', 'arrow-circle-left', 'arrow-circle-o-down', 'arrow-circle-o-left', 'arrow-circle-o-right', 'arrow-circle-o-up', 'arrow-circle-right', 'arrow-circle-up', 'arrow-down', 'arrow-left', 'arrow-right', 'arrow-up', 'arrows', 'arrows-alt', 'arrows-h', 'arrows-v', 'asterisk', 'at', 'automobile', 'backward', 'balance-scale', 'ban', 'bank', 'bar-chart', 'bar-chart-o', 'barcode', 'bars', 'battery-0', 'battery-1', 'battery-2', 'battery-3', 'battery-4', 'battery-empty', 'battery-full', 'battery-half', 'battery-quarter', 'battery-three-quarters', 'bed', 'beer', 'behance', 'behance-square', 'bell', 'bell-o', 'bell-slash', 'bell-slash-o', 'bicycle', 'binoculars', 'birthday-cake', 'bitbucket', 'bitbucket-square', 'bitcoin', 'black-tie', 'bluetooth', 'bluetooth-b', 'bold', 'bolt', 'bomb', 'book', 'bookmark', 'bookmark-o', 'briefcase', 'btc', 'bug', 'building', 'building-o', 'bullhorn', 'bullseye', 'bus', 'buysellads', 'cab', 'calculator', 'calendar', 'calendar-check-o', 'calendar-minus-o', 'calendar-o', 'calendar-plus-o', 'calendar-times-o', 'camera', 'camera-retro', 'car', 'caret-down', 'caret-left', 'caret-right', 'caret-square-o-down', 'caret-square-o-left', 'caret-square-o-right', 'caret-square-o-up', 'caret-up', 'cart-arrow-down', 'cart-plus', 'cc', 'cc-amex', 'cc-diners-club', 'cc-discover', 'cc-jcb', 'cc-mastercard', 'cc-paypal', 'cc-stripe', 'cc-visa', 'certificate', 'chain', 'chain-broken', 'check', 'check-circle', 'check-circle-o', 'check-square', 'check-square-o', 'chevron-circle-down', 'chevron-circle-left', 'chevron-circle-right', 'chevron-circle-up', 'chevron-down', 'chevron-left', 'chevron-right', 'chevron-up', 'child', 'chrome', 'circle', 'circle-o', 'circle-o-notch', 'circle-thin', 'clipboard', 'clock-o', 'clone', 'close', 'cloud', 'cloud-download', 'cloud-upload', 'cny', 'code', 'code-fork', 'codepen', 'codiepie', 'coffee', 'cog', 'cogs', 'columns', 'comment', 'comment-o', 'commenting', 'commenting-o', 'comments', 'comments-o', 'compass', 'compress', 'connectdevelop', 'contao', 'copy', 'copyright', 'creative-commons', 'credit-card', 'credit-card-alt', 'crop', 'crosshairs', 'css3', 'cube', 'cubes', 'cut', 'cutlery', 'dashboard', 'dashcube', 'database', 'dedent', 'delicious', 'desktop', 'deviantart', 'diamond', 'digg', 'dollar', 'dot-circle-o', 'download', 'dribbble', 'dropbox', 'drupal', 'edge', 'edit', 'eject', 'ellipsis-h', 'ellipsis-v', 'empire', 'envelope', 'envelope-o', 'envelope-square', 'eraser', 'eur', 'euro', 'exchange', 'exclamation', 'exclamation-circle', 'exclamation-triangle', 'expand', 'expeditedssl', 'external-link', 'external-link-square', 'eye', 'eye-slash', 'eyedropper', 'facebook', 'facebook-f', 'facebook-official', 'facebook-square', 'fast-backward', 'fast-forward', 'fax', 'feed', 'female', 'fighter-jet', 'file', 'file-archive-o', 'file-audio-o', 'file-code-o', 'file-excel-o', 'file-image-o', 'file-movie-o', 'file-o', 'file-pdf-o', 'file-photo-o', 'file-picture-o', 'file-powerpoint-o', 'file-sound-o', 'file-text', 'file-text-o', 'file-video-o', 'file-word-o', 'file-zip-o', 'files-o', 'film', 'filter', 'fire', 'fire-extinguisher', 'firefox', 'flag', 'flag-checkered', 'flag-o', 'flash', 'flask', 'flickr', 'floppy-o', 'folder', 'folder-o', 'folder-open', 'folder-open-o', 'font', 'fonticons', 'fort-awesome', 'forumbee', 'forward', 'foursquare', 'frown-o', 'futbol-o', 'gamepad', 'gavel', 'gbp', 'ge', 'gear', 'gears', 'genderless', 'get-pocket', 'gg', 'gg-circle', 'gift', 'git', 'git-square', 'github', 'github-alt', 'github-square', 'gittip', 'glass', 'globe', 'google', 'google-plus', 'google-plus-square', 'google-wallet', 'graduation-cap', 'gratipay', 'group', 'h-square', 'hacker-news', 'hand-grab-o', 'hand-lizard-o', 'hand-o-down', 'hand-o-left', 'hand-o-right', 'hand-o-up', 'hand-paper-o', 'hand-peace-o', 'hand-pointer-o', 'hand-rock-o', 'hand-scissors-o', 'hand-spock-o', 'hand-stop-o', 'hashtag', 'hdd-o', 'header', 'headphones', 'heart', 'heart-o', 'heartbeat', 'history', 'home', 'hospital-o', 'hotel', 'hourglass', 'hourglass-1', 'hourglass-2', 'hourglass-3', 'hourglass-end', 'hourglass-half', 'hourglass-o', 'hourglass-start', 'houzz', 'html5', 'i-cursor', 'ils', 'image', 'inbox', 'indent', 'industry', 'info', 'info-circle', 'inr', 'instagram', 'institution', 'internet-explorer', 'intersex', 'ioxhost', 'italic', 'joomla', 'jpy', 'jsfiddle', 'key', 'keyboard-o', 'krw', 'language', 'laptop', 'lastfm', 'lastfm-square', 'leaf', 'leanpub', 'legal', 'lemon-o', 'level-down', 'level-up', 'life-bouy', 'life-buoy', 'life-ring', 'life-saver', 'lightbulb-o', 'line-chart', 'link', 'linkedin', 'linkedin-square', 'linux', 'list', 'list-alt', 'list-ol', 'list-ul', 'location-arrow', 'lock', 'long-arrow-down', 'long-arrow-left', 'long-arrow-right', 'long-arrow-up', 'magic', 'magnet', 'mail-forward', 'mail-reply', 'mail-reply-all', 'male', 'map', 'map-marker', 'map-o', 'map-pin', 'map-signs', 'mars', 'mars-double', 'mars-stroke', 'mars-stroke-h', 'mars-stroke-v', 'maxcdn', 'meanpath', 'medium', 'medkit', 'meh-o', 'mercury', 'microphone', 'microphone-slash', 'minus', 'minus-circle', 'minus-square', 'minus-square-o', 'mixcloud', 'mobile', 'mobile-phone', 'modx', 'money', 'moon-o', 'mortar-board', 'motorcycle', 'mouse-pointer', 'music', 'navicon', 'neuter', 'newspaper-o', 'object-group', 'object-ungroup', 'odnoklassniki', 'odnoklassniki-square', 'opencart', 'openid', 'opera', 'optin-monster', 'outdent', 'pagelines', 'paint-brush', 'paper-plane', 'paper-plane-o', 'paperclip', 'paragraph', 'paste', 'pause', 'pause-circle', 'pause-circle-o', 'paw', 'paypal', 'pencil', 'pencil-square', 'pencil-square-o', 'percent', 'phone', 'phone-square', 'photo', 'picture-o', 'pie-chart', 'pied-piper', 'pied-piper-alt', 'pinterest', 'pinterest-p', 'pinterest-square', 'plane', 'play', 'play-circle', 'play-circle-o', 'plug', 'plus', 'plus-circle', 'plus-square', 'plus-square-o', 'power-off', 'print', 'product-hunt', 'puzzle-piece', 'qq', 'qrcode', 'question', 'question-circle', 'quote-left', 'quote-right', 'ra', 'random', 'rebel', 'recycle', 'reddit', 'reddit-alien', 'reddit-square', 'refresh', 'registered', 'remove', 'renren', 'reorder', 'repeat', 'reply', 'reply-all', 'retweet', 'rmb', 'road', 'rocket', 'rotate-left', 'rotate-right', 'rouble', 'rss', 'rss-square', 'rub', 'ruble', 'rupee', 'safari', 'save', 'scissors', 'scribd', 'search', 'search-minus', 'search-plus', 'sellsy', 'send', 'send-o', 'server', 'share', 'share-alt', 'share-alt-square', 'share-square', 'share-square-o', 'shekel', 'sheqel', 'shield', 'ship', 'shirtsinbulk', 'shopping-bag', 'shopping-basket', 'shopping-cart', 'sign-in', 'sign-out', 'signal', 'simplybuilt', 'sitemap', 'skyatlas', 'skype', 'slack', 'sliders', 'slideshare', 'smile-o', 'soccer-ball-o', 'sort', 'sort-alpha-asc', 'sort-alpha-desc', 'sort-amount-asc', 'sort-amount-desc', 'sort-asc', 'sort-desc', 'sort-down', 'sort-numeric-asc', 'sort-numeric-desc', 'sort-up', 'soundcloud', 'space-shuttle', 'spinner', 'spoon', 'spotify', 'square', 'square-o', 'stack-exchange', 'stack-overflow', 'star', 'star-half', 'star-half-empty', 'star-half-full', 'star-half-o', 'star-o', 'steam', 'steam-square', 'step-backward', 'step-forward', 'stethoscope', 'sticky-note', 'sticky-note-o', 'stop', 'stop-circle', 'stop-circle-o', 'street-view', 'strikethrough', 'stumbleupon', 'stumbleupon-circle', 'subscript', 'subway', 'suitcase', 'sun-o', 'superscript', 'support', 'table', 'tablet', 'tachometer', 'tag', 'tags', 'tasks', 'taxi', 'television', 'tencent-weibo', 'terminal', 'text-height', 'text-width', 'th', 'th-large', 'th-list', 'thumb-tack', 'thumbs-down', 'thumbs-o-down', 'thumbs-o-up', 'thumbs-up', 'ticket', 'times', 'times-circle', 'times-circle-o', 'tint', 'toggle-down', 'toggle-left', 'toggle-off', 'toggle-on', 'toggle-right', 'toggle-up', 'trademark', 'train', 'transgender', 'transgender-alt', 'trash', 'trash-o', 'tree', 'trello', 'tripadvisor', 'trophy', 'truck', 'try', 'tty', 'tumblr', 'tumblr-square', 'turkish-lira', 'tv', 'twitch', 'twitter', 'twitter-square', 'umbrella', 'underline', 'undo', 'university', 'unlink', 'unlock', 'unlock-alt', 'unsorted', 'upload', 'usb', 'usd', 'user', 'user-md', 'user-plus', 'user-secret', 'user-times', 'users', 'venus', 'venus-double', 'venus-mars', 'viacoin', 'video-camera', 'vimeo', 'vimeo-square', 'vine', 'vk', 'volume-down', 'volume-off', 'volume-up', 'warning', 'wechat', 'weibo', 'weixin', 'whatsapp', 'wheelchair', 'wifi', 'wikipedia-w', 'windows', 'won', 'wordpress', 'wrench', 'xing', 'xing-square', 'y-combinator', 'y-combinator-square', 'yahoo', 'yc', 'yc-square', 'yelp', 'yen', 'youtube', 'youtube-play', 'youtube-square' ] }, { version: '4.6.0', icons: [ '', '500px', 'adjust', 'adn', 'align-center', 'align-justify', 'align-left', 'align-right', 'amazon', 'ambulance', 'american-sign-language-interpreting', 'anchor', 'android', 'angellist', 'angle-double-down', 'angle-double-left', 'angle-double-right', 'angle-double-up', 'angle-down', 'angle-left', 'angle-right', 'angle-up', 'apple', 'archive', 'area-chart', 'arrow-circle-down', 'arrow-circle-left', 'arrow-circle-o-down', 'arrow-circle-o-left', 'arrow-circle-o-right', 'arrow-circle-o-up', 'arrow-circle-right', 'arrow-circle-up', 'arrow-down', 'arrow-left', 'arrow-right', 'arrow-up', 'arrows', 'arrows-alt', 'arrows-h', 'arrows-v', 'asl-interpreting', 'assistive-listening-systems', 'asterisk', 'at', 'audio-description', 'automobile', 'backward', 'balance-scale', 'ban', 'bank', 'bar-chart', 'bar-chart-o', 'barcode', 'bars', 'battery-0', 'battery-1', 'battery-2', 'battery-3', 'battery-4', 'battery-empty', 'battery-full', 'battery-half', 'battery-quarter', 'battery-three-quarters', 'bed', 'beer', 'behance', 'behance-square', 'bell', 'bell-o', 'bell-slash', 'bell-slash-o', 'bicycle', 'binoculars', 'birthday-cake', 'bitbucket', 'bitbucket-square', 'bitcoin', 'black-tie', 'blind', 'bluetooth', 'bluetooth-b', 'bold', 'bolt', 'bomb', 'book', 'bookmark', 'bookmark-o', 'braille', 'briefcase', 'btc', 'bug', 'building', 'building-o', 'bullhorn', 'bullseye', 'bus', 'buysellads', 'cab', 'calculator', 'calendar', 'calendar-check-o', 'calendar-minus-o', 'calendar-o', 'calendar-plus-o', 'calendar-times-o', 'camera', 'camera-retro', 'car', 'caret-down', 'caret-left', 'caret-right', 'caret-square-o-down', 'caret-square-o-left', 'caret-square-o-right', 'caret-square-o-up', 'caret-up', 'cart-arrow-down', 'cart-plus', 'cc', 'cc-amex', 'cc-diners-club', 'cc-discover', 'cc-jcb', 'cc-mastercard', 'cc-paypal', 'cc-stripe', 'cc-visa', 'certificate', 'chain', 'chain-broken', 'check', 'check-circle', 'check-circle-o', 'check-square', 'check-square-o', 'chevron-circle-down', 'chevron-circle-left', 'chevron-circle-right', 'chevron-circle-up', 'chevron-down', 'chevron-left', 'chevron-right', 'chevron-up', 'child', 'chrome', 'circle', 'circle-o', 'circle-o-notch', 'circle-thin', 'clipboard', 'clock-o', 'clone', 'close', 'cloud', 'cloud-download', 'cloud-upload', 'cny', 'code', 'code-fork', 'codepen', 'codiepie', 'coffee', 'cog', 'cogs', 'columns', 'comment', 'comment-o', 'commenting', 'commenting-o', 'comments', 'comments-o', 'compass', 'compress', 'connectdevelop', 'contao', 'copy', 'copyright', 'creative-commons', 'credit-card', 'credit-card-alt', 'crop', 'crosshairs', 'css3', 'cube', 'cubes', 'cut', 'cutlery', 'dashboard', 'dashcube', 'database', 'deaf', 'deafness', 'dedent', 'delicious', 'desktop', 'deviantart', 'diamond', 'digg', 'dollar', 'dot-circle-o', 'download', 'dribbble', 'dropbox', 'drupal', 'edge', 'edit', 'eject', 'ellipsis-h', 'ellipsis-v', 'empire', 'envelope', 'envelope-o', 'envelope-square', 'envira', 'eraser', 'eur', 'euro', 'exchange', 'exclamation', 'exclamation-circle', 'exclamation-triangle', 'expand', 'expeditedssl', 'external-link', 'external-link-square', 'eye', 'eye-slash', 'eyedropper', 'facebook', 'facebook-f', 'facebook-official', 'facebook-square', 'fast-backward', 'fast-forward', 'fax', 'feed', 'female', 'fighter-jet', 'file', 'file-archive-o', 'file-audio-o', 'file-code-o', 'file-excel-o', 'file-image-o', 'file-movie-o', 'file-o', 'file-pdf-o', 'file-photo-o', 'file-picture-o', 'file-powerpoint-o', 'file-sound-o', 'file-text', 'file-text-o', 'file-video-o', 'file-word-o', 'file-zip-o', 'files-o', 'film', 'filter', 'fire', 'fire-extinguisher', 'firefox', 'flag', 'flag-checkered', 'flag-o', 'flash', 'flask', 'flickr', 'floppy-o', 'folder', 'folder-o', 'folder-open', 'folder-open-o', 'font', 'fonticons', 'fort-awesome', 'forumbee', 'forward', 'foursquare', 'frown-o', 'futbol-o', 'gamepad', 'gavel', 'gbp', 'ge', 'gear', 'gears', 'genderless', 'get-pocket', 'gg', 'gg-circle', 'gift', 'git', 'git-square', 'github', 'github-alt', 'github-square', 'gitlab', 'gittip', 'glass', 'glide', 'glide-g', 'globe', 'google', 'google-plus', 'google-plus-square', 'google-wallet', 'graduation-cap', 'gratipay', 'group', 'h-square', 'hacker-news', 'hand-grab-o', 'hand-lizard-o', 'hand-o-down', 'hand-o-left', 'hand-o-right', 'hand-o-up', 'hand-paper-o', 'hand-peace-o', 'hand-pointer-o', 'hand-rock-o', 'hand-scissors-o', 'hand-spock-o', 'hand-stop-o', 'hard-of-hearing', 'hashtag', 'hdd-o', 'header', 'headphones', 'heart', 'heart-o', 'heartbeat', 'history', 'home', 'hospital-o', 'hotel', 'hourglass', 'hourglass-1', 'hourglass-2', 'hourglass-3', 'hourglass-end', 'hourglass-half', 'hourglass-o', 'hourglass-start', 'houzz', 'html5', 'i-cursor', 'ils', 'image', 'inbox', 'indent', 'industry', 'info', 'info-circle', 'inr', 'instagram', 'institution', 'internet-explorer', 'intersex', 'ioxhost', 'italic', 'joomla', 'jpy', 'jsfiddle', 'key', 'keyboard-o', 'krw', 'language', 'laptop', 'lastfm', 'lastfm-square', 'leaf', 'leanpub', 'legal', 'lemon-o', 'level-down', 'level-up', 'life-bouy', 'life-buoy', 'life-ring', 'life-saver', 'lightbulb-o', 'line-chart', 'link', 'linkedin', 'linkedin-square', 'linux', 'list', 'list-alt', 'list-ol', 'list-ul', 'location-arrow', 'lock', 'long-arrow-down', 'long-arrow-left', 'long-arrow-right', 'long-arrow-up', 'low-vision', 'magic', 'magnet', 'mail-forward', 'mail-reply', 'mail-reply-all', 'male', 'map', 'map-marker', 'map-o', 'map-pin', 'map-signs', 'mars', 'mars-double', 'mars-stroke', 'mars-stroke-h', 'mars-stroke-v', 'maxcdn', 'meanpath', 'medium', 'medkit', 'meh-o', 'mercury', 'microphone', 'microphone-slash', 'minus', 'minus-circle', 'minus-square', 'minus-square-o', 'mixcloud', 'mobile', 'mobile-phone', 'modx', 'money', 'moon-o', 'mortar-board', 'motorcycle', 'mouse-pointer', 'music', 'navicon', 'neuter', 'newspaper-o', 'object-group', 'object-ungroup', 'odnoklassniki', 'odnoklassniki-square', 'opencart', 'openid', 'opera', 'optin-monster', 'outdent', 'pagelines', 'paint-brush', 'paper-plane', 'paper-plane-o', 'paperclip', 'paragraph', 'paste', 'pause', 'pause-circle', 'pause-circle-o', 'paw', 'paypal', 'pencil', 'pencil-square', 'pencil-square-o', 'percent', 'phone', 'phone-square', 'photo', 'picture-o', 'pie-chart', 'pied-piper', 'pied-piper-alt', 'pinterest', 'pinterest-p', 'pinterest-square', 'plane', 'play', 'play-circle', 'play-circle-o', 'plug', 'plus', 'plus-circle', 'plus-square', 'plus-square-o', 'power-off', 'print', 'product-hunt', 'puzzle-piece', 'qq', 'qrcode', 'question', 'question-circle', 'question-circle-o', 'quote-left', 'quote-right', 'ra', 'random', 'rebel', 'recycle', 'reddit', 'reddit-alien', 'reddit-square', 'refresh', 'registered', 'remove', 'renren', 'reorder', 'repeat', 'reply', 'reply-all', 'retweet', 'rmb', 'road', 'rocket', 'rotate-left', 'rotate-right', 'rouble', 'rss', 'rss-square', 'rub', 'ruble', 'rupee', 'safari', 'save', 'scissors', 'scribd', 'search', 'search-minus', 'search-plus', 'sellsy', 'send', 'send-o', 'server', 'share', 'share-alt', 'share-alt-square', 'share-square', 'share-square-o', 'shekel', 'sheqel', 'shield', 'ship', 'shirtsinbulk', 'shopping-bag', 'shopping-basket', 'shopping-cart', 'sign-in', 'sign-language', 'sign-out', 'signal', 'signing', 'simplybuilt', 'sitemap', 'skyatlas', 'skype', 'slack', 'sliders', 'slideshare', 'smile-o', 'snapchat', 'snapchat-ghost', 'snapchat-square', 'soccer-ball-o', 'sort', 'sort-alpha-asc', 'sort-alpha-desc', 'sort-amount-asc', 'sort-amount-desc', 'sort-asc', 'sort-desc', 'sort-down', 'sort-numeric-asc', 'sort-numeric-desc', 'sort-up', 'soundcloud', 'space-shuttle', 'spinner', 'spoon', 'spotify', 'square', 'square-o', 'stack-exchange', 'stack-overflow', 'star', 'star-half', 'star-half-empty', 'star-half-full', 'star-half-o', 'star-o', 'steam', 'steam-square', 'step-backward', 'step-forward', 'stethoscope', 'sticky-note', 'sticky-note-o', 'stop', 'stop-circle', 'stop-circle-o', 'street-view', 'strikethrough', 'stumbleupon', 'stumbleupon-circle', 'subscript', 'subway', 'suitcase', 'sun-o', 'superscript', 'support', 'table', 'tablet', 'tachometer', 'tag', 'tags', 'tasks', 'taxi', 'television', 'tencent-weibo', 'terminal', 'text-height', 'text-width', 'th', 'th-large', 'th-list', 'thumb-tack', 'thumbs-down', 'thumbs-o-down', 'thumbs-o-up', 'thumbs-up', 'ticket', 'times', 'times-circle', 'times-circle-o', 'tint', 'toggle-down', 'toggle-left', 'toggle-off', 'toggle-on', 'toggle-right', 'toggle-up', 'trademark', 'train', 'transgender', 'transgender-alt', 'trash', 'trash-o', 'tree', 'trello', 'tripadvisor', 'trophy', 'truck', 'try', 'tty', 'tumblr', 'tumblr-square', 'turkish-lira', 'tv', 'twitch', 'twitter', 'twitter-square', 'umbrella', 'underline', 'undo', 'universal-access', 'university', 'unlink', 'unlock', 'unlock-alt', 'unsorted', 'upload', 'usb', 'usd', 'user', 'user-md', 'user-plus', 'user-secret', 'user-times', 'users', 'venus', 'venus-double', 'venus-mars', 'viacoin', 'viadeo', 'viadeo-square', 'video-camera', 'vimeo', 'vimeo-square', 'vine', 'vk', 'volume-control-phone', 'volume-down', 'volume-off', 'volume-up', 'warning', 'wechat', 'weibo', 'weixin', 'whatsapp', 'wheelchair', 'wheelchair-alt', 'wifi', 'wikipedia-w', 'windows', 'won', 'wordpress', 'wpbeginner', 'wpforms', 'wrench', 'xing', 'xing-square', 'y-combinator', 'y-combinator-square', 'yahoo', 'yc', 'yc-square', 'yelp', 'yen', 'youtube', 'youtube-play', 'youtube-square' ] }, { version: '4.7.0', icons: [ '', '500px', 'address-book', 'address-book-o', 'address-card', 'address-card-o', 'adjust', 'adn', 'align-center', 'align-justify', 'align-left', 'align-right', 'amazon', 'ambulance', 'american-sign-language-interpreting', 'anchor', 'android', 'angellist', 'angle-double-down', 'angle-double-left', 'angle-double-right', 'angle-double-up', 'angle-down', 'angle-left', 'angle-right', 'angle-up', 'apple', 'archive', 'area-chart', 'arrow-circle-down', 'arrow-circle-left', 'arrow-circle-o-down', 'arrow-circle-o-left', 'arrow-circle-o-right', 'arrow-circle-o-up', 'arrow-circle-right', 'arrow-circle-up', 'arrow-down', 'arrow-left', 'arrow-right', 'arrow-up', 'arrows', 'arrows-alt', 'arrows-h', 'arrows-v', 'asl-interpreting', 'assistive-listening-systems', 'asterisk', 'at', 'audio-description', 'automobile', 'backward', 'balance-scale', 'ban', 'bandcamp', 'bank', 'bar-chart', 'bar-chart-o', 'barcode', 'bars', 'bath', 'bathtub', 'battery', 'battery-0', 'battery-1', 'battery-2', 'battery-3', 'battery-4', 'battery-empty', 'battery-full', 'battery-half', 'battery-quarter', 'battery-three-quarters', 'bed', 'beer', 'behance', 'behance-square', 'bell', 'bell-o', 'bell-slash', 'bell-slash-o', 'bicycle', 'binoculars', 'birthday-cake', 'bitbucket', 'bitbucket-square', 'bitcoin', 'black-tie', 'blind', 'bluetooth', 'bluetooth-b', 'bold', 'bolt', 'bomb', 'book', 'bookmark', 'bookmark-o', 'braille', 'briefcase', 'btc', 'bug', 'building', 'building-o', 'bullhorn', 'bullseye', 'bus', 'buysellads', 'cab', 'calculator', 'calendar', 'calendar-check-o', 'calendar-minus-o', 'calendar-o', 'calendar-plus-o', 'calendar-times-o', 'camera', 'camera-retro', 'car', 'caret-down', 'caret-left', 'caret-right', 'caret-square-o-down', 'caret-square-o-left', 'caret-square-o-right', 'caret-square-o-up', 'caret-up', 'cart-arrow-down', 'cart-plus', 'cc', 'cc-amex', 'cc-diners-club', 'cc-discover', 'cc-jcb', 'cc-mastercard', 'cc-paypal', 'cc-stripe', 'cc-visa', 'certificate', 'chain', 'chain-broken', 'check', 'check-circle', 'check-circle-o', 'check-square', 'check-square-o', 'chevron-circle-down', 'chevron-circle-left', 'chevron-circle-right', 'chevron-circle-up', 'chevron-down', 'chevron-left', 'chevron-right', 'chevron-up', 'child', 'chrome', 'circle', 'circle-o', 'circle-o-notch', 'circle-thin', 'clipboard', 'clock-o', 'clone', 'close', 'cloud', 'cloud-download', 'cloud-upload', 'cny', 'code', 'code-fork', 'codepen', 'codiepie', 'coffee', 'cog', 'cogs', 'columns', 'comment', 'comment-o', 'commenting', 'commenting-o', 'comments', 'comments-o', 'compass', 'compress', 'connectdevelop', 'contao', 'copy', 'copyright', 'creative-commons', 'credit-card', 'credit-card-alt', 'crop', 'crosshairs', 'css3', 'cube', 'cubes', 'cut', 'cutlery', 'dashboard', 'dashcube', 'database', 'deaf', 'deafness', 'dedent', 'delicious', 'desktop', 'deviantart', 'diamond', 'digg', 'dollar', 'dot-circle-o', 'download', 'dribbble', 'drivers-license', 'drivers-license-o', 'dropbox', 'drupal', 'edge', 'edit', 'eercast', 'eject', 'ellipsis-h', 'ellipsis-v', 'empire', 'envelope', 'envelope-o', 'envelope-open', 'envelope-open-o', 'envelope-square', 'envira', 'eraser', 'etsy', 'eur', 'euro', 'exchange', 'exclamation', 'exclamation-circle', 'exclamation-triangle', 'expand', 'expeditedssl', 'external-link', 'external-link-square', 'eye', 'eye-slash', 'eyedropper', 'fa', 'facebook', 'facebook-f', 'facebook-official', 'facebook-square', 'fast-backward', 'fast-forward', 'fax', 'feed', 'female', 'fighter-jet', 'file', 'file-archive-o', 'file-audio-o', 'file-code-o', 'file-excel-o', 'file-image-o', 'file-movie-o', 'file-o', 'file-pdf-o', 'file-photo-o', 'file-picture-o', 'file-powerpoint-o', 'file-sound-o', 'file-text', 'file-text-o', 'file-video-o', 'file-word-o', 'file-zip-o', 'files-o', 'film', 'filter', 'fire', 'fire-extinguisher', 'firefox', 'first-order', 'flag', 'flag-checkered', 'flag-o', 'flash', 'flask', 'flickr', 'floppy-o', 'folder', 'folder-o', 'folder-open', 'folder-open-o', 'font', 'font-awesome', 'fonticons', 'fort-awesome', 'forumbee', 'forward', 'foursquare', 'free-code-camp', 'frown-o', 'futbol-o', 'gamepad', 'gavel', 'gbp', 'ge', 'gear', 'gears', 'genderless', 'get-pocket', 'gg', 'gg-circle', 'gift', 'git', 'git-square', 'github', 'github-alt', 'github-square', 'gitlab', 'gittip', 'glass', 'glide', 'glide-g', 'globe', 'google', 'google-plus', 'google-plus-circle', 'google-plus-official', 'google-plus-square', 'google-wallet', 'graduation-cap', 'gratipay', 'grav', 'group', 'h-square', 'hacker-news', 'hand-grab-o', 'hand-lizard-o', 'hand-o-down', 'hand-o-left', 'hand-o-right', 'hand-o-up', 'hand-paper-o', 'hand-peace-o', 'hand-pointer-o', 'hand-rock-o', 'hand-scissors-o', 'hand-spock-o', 'hand-stop-o', 'handshake-o', 'hard-of-hearing', 'hashtag', 'hdd-o', 'header', 'headphones', 'heart', 'heart-o', 'heartbeat', 'history', 'home', 'hospital-o', 'hotel', 'hourglass', 'hourglass-1', 'hourglass-2', 'hourglass-3', 'hourglass-end', 'hourglass-half', 'hourglass-o', 'hourglass-start', 'houzz', 'html5', 'i-cursor', 'id-badge', 'id-card', 'id-card-o', 'ils', 'image', 'imdb', 'inbox', 'indent', 'industry', 'info', 'info-circle', 'inr', 'instagram', 'institution', 'internet-explorer', 'intersex', 'ioxhost', 'italic', 'joomla', 'jpy', 'jsfiddle', 'key', 'keyboard-o', 'krw', 'language', 'laptop', 'lastfm', 'lastfm-square', 'leaf', 'leanpub', 'legal', 'lemon-o', 'level-down', 'level-up', 'life-bouy', 'life-buoy', 'life-ring', 'life-saver', 'lightbulb-o', 'line-chart', 'link', 'linkedin', 'linkedin-square', 'linode', 'linux', 'list', 'list-alt', 'list-ol', 'list-ul', 'location-arrow', 'lock', 'long-arrow-down', 'long-arrow-left', 'long-arrow-right', 'long-arrow-up', 'low-vision', 'magic', 'magnet', 'mail-forward', 'mail-reply', 'mail-reply-all', 'male', 'map', 'map-marker', 'map-o', 'map-pin', 'map-signs', 'mars', 'mars-double', 'mars-stroke', 'mars-stroke-h', 'mars-stroke-v', 'maxcdn', 'meanpath', 'medium', 'medkit', 'meetup', 'meh-o', 'mercury', 'microchip', 'microphone', 'microphone-slash', 'minus', 'minus-circle', 'minus-square', 'minus-square-o', 'mixcloud', 'mobile', 'mobile-phone', 'modx', 'money', 'moon-o', 'mortar-board', 'motorcycle', 'mouse-pointer', 'music', 'navicon', 'neuter', 'newspaper-o', 'object-group', 'object-ungroup', 'odnoklassniki', 'odnoklassniki-square', 'opencart', 'openid', 'opera', 'optin-monster', 'outdent', 'pagelines', 'paint-brush', 'paper-plane', 'paper-plane-o', 'paperclip', 'paragraph', 'paste', 'pause', 'pause-circle', 'pause-circle-o', 'paw', 'paypal', 'pencil', 'pencil-square', 'pencil-square-o', 'percent', 'phone', 'phone-square', 'photo', 'picture-o', 'pie-chart', 'pied-piper', 'pied-piper-alt', 'pied-piper-pp', 'pinterest', 'pinterest-p', 'pinterest-square', 'plane', 'play', 'play-circle', 'play-circle-o', 'plug', 'plus', 'plus-circle', 'plus-square', 'plus-square-o', 'podcast', 'power-off', 'print', 'product-hunt', 'puzzle-piece', 'qq', 'qrcode', 'question', 'question-circle', 'question-circle-o', 'quora', 'quote-left', 'quote-right', 'ra', 'random', 'ravelry', 'rebel', 'recycle', 'reddit', 'reddit-alien', 'reddit-square', 'refresh', 'registered', 'remove', 'renren', 'reorder', 'repeat', 'reply', 'reply-all', 'resistance', 'retweet', 'rmb', 'road', 'rocket', 'rotate-left', 'rotate-right', 'rouble', 'rss', 'rss-square', 'rub', 'ruble', 'rupee', 's15', 'safari', 'save', 'scissors', 'scribd', 'search', 'search-minus', 'search-plus', 'sellsy', 'send', 'send-o', 'server', 'share', 'share-alt', 'share-alt-square', 'share-square', 'share-square-o', 'shekel', 'sheqel', 'shield', 'ship', 'shirtsinbulk', 'shopping-bag', 'shopping-basket', 'shopping-cart', 'shower', 'sign-in', 'sign-language', 'sign-out', 'signal', 'signing', 'simplybuilt', 'sitemap', 'skyatlas', 'skype', 'slack', 'sliders', 'slideshare', 'smile-o', 'snapchat', 'snapchat-ghost', 'snapchat-square', 'snowflake-o', 'soccer-ball-o', 'sort', 'sort-alpha-asc', 'sort-alpha-desc', 'sort-amount-asc', 'sort-amount-desc', 'sort-asc', 'sort-desc', 'sort-down', 'sort-numeric-asc', 'sort-numeric-desc', 'sort-up', 'soundcloud', 'space-shuttle', 'spinner', 'spoon', 'spotify', 'square', 'square-o', 'stack-exchange', 'stack-overflow', 'star', 'star-half', 'star-half-empty', 'star-half-full', 'star-half-o', 'star-o', 'steam', 'steam-square', 'step-backward', 'step-forward', 'stethoscope', 'sticky-note', 'sticky-note-o', 'stop', 'stop-circle', 'stop-circle-o', 'street-view', 'strikethrough', 'stumbleupon', 'stumbleupon-circle', 'subscript', 'subway', 'suitcase', 'sun-o', 'superpowers', 'superscript', 'support', 'table', 'tablet', 'tachometer', 'tag', 'tags', 'tasks', 'taxi', 'telegram', 'television', 'tencent-weibo', 'terminal', 'text-height', 'text-width', 'th', 'th-large', 'th-list', 'themeisle', 'thermometer', 'thermometer-0', 'thermometer-1', 'thermometer-2', 'thermometer-3', 'thermometer-4', 'thermometer-empty', 'thermometer-full', 'thermometer-half', 'thermometer-quarter', 'thermometer-three-quarters', 'thumb-tack', 'thumbs-down', 'thumbs-o-down', 'thumbs-o-up', 'thumbs-up', 'ticket', 'times', 'times-circle', 'times-circle-o', 'times-rectangle', 'times-rectangle-o', 'tint', 'toggle-down', 'toggle-left', 'toggle-off', 'toggle-on', 'toggle-right', 'toggle-up', 'trademark', 'train', 'transgender', 'transgender-alt', 'trash', 'trash-o', 'tree', 'trello', 'tripadvisor', 'trophy', 'truck', 'try', 'tty', 'tumblr', 'tumblr-square', 'turkish-lira', 'tv', 'twitch', 'twitter', 'twitter-square', 'umbrella', 'underline', 'undo', 'universal-access', 'university', 'unlink', 'unlock', 'unlock-alt', 'unsorted', 'upload', 'usb', 'usd', 'user', 'user-circle', 'user-circle-o', 'user-md', 'user-o', 'user-plus', 'user-secret', 'user-times', 'users', 'vcard', 'vcard-o', 'venus', 'venus-double', 'venus-mars', 'viacoin', 'viadeo', 'viadeo-square', 'video-camera', 'vimeo', 'vimeo-square', 'vine', 'vk', 'volume-control-phone', 'volume-down', 'volume-off', 'volume-up', 'warning', 'wechat', 'weibo', 'weixin', 'whatsapp', 'wheelchair', 'wheelchair-alt', 'wifi', 'wikipedia-w', 'window-close', 'window-close-o', 'window-maximize', 'window-minimize', 'window-restore', 'windows', 'won', 'wordpress', 'wpbeginner', 'wpexplorer', 'wpforms', 'wrench', 'xing', 'xing-square', 'y-combinator', 'y-combinator-square', 'yahoo', 'yc', 'yc-square', 'yelp', 'yen', 'yoast', 'youtube', 'youtube-play', 'youtube-square' ] }, { version: '5.3.1', icons: [ '', 'fab fa-500px', 'fab fa-accessible-icon', 'fab fa-accusoft', 'fas fa-ad', 'fas fa-address-book', 'far fa-address-book', 'fas fa-address-card', 'far fa-address-card', 'fas fa-adjust', 'fab fa-adn', 'fab fa-adversal', 'fab fa-affiliatetheme', 'fas fa-air-freshener', 'fab fa-algolia', 'fas fa-align-center', 'fas fa-align-justify', 'fas fa-align-left', 'fas fa-align-right', 'fab fa-alipay', 'fas fa-allergies', 'fab fa-amazon', 'fab fa-amazon-pay', 'fas fa-ambulance', 'fas fa-american-sign-language-interpreting', 'fab fa-amilia', 'fas fa-anchor', 'fab fa-android', 'fab fa-angellist', 'fas fa-angle-double-down', 'fas fa-angle-double-left', 'fas fa-angle-double-right', 'fas fa-angle-double-up', 'fas fa-angle-down', 'fas fa-angle-left', 'fas fa-angle-right', 'fas fa-angle-up', 'fas fa-angry', 'far fa-angry', 'fab fa-angrycreative', 'fab fa-angular', 'fas fa-ankh', 'fab fa-app-store', 'fab fa-app-store-ios', 'fab fa-apper', 'fab fa-apple', 'fas fa-apple-alt', 'fab fa-apple-pay', 'fas fa-archive', 'fas fa-archway', 'fas fa-arrow-alt-circle-down', 'far fa-arrow-alt-circle-down', 'fas fa-arrow-alt-circle-left', 'far fa-arrow-alt-circle-left', 'fas fa-arrow-alt-circle-right', 'far fa-arrow-alt-circle-right', 'fas fa-arrow-alt-circle-up', 'far fa-arrow-alt-circle-up', 'fas fa-arrow-circle-down', 'fas fa-arrow-circle-left', 'fas fa-arrow-circle-right', 'fas fa-arrow-circle-up', 'fas fa-arrow-down', 'fas fa-arrow-left', 'fas fa-arrow-right', 'fas fa-arrow-up', 'fas fa-arrows-alt', 'fas fa-arrows-alt-h', 'fas fa-arrows-alt-v', 'fas fa-assistive-listening-systems', 'fas fa-asterisk', 'fab fa-asymmetrik', 'fas fa-at', 'fas fa-atlas', 'fas fa-atom', 'fab fa-audible', 'fas fa-audio-description', 'fab fa-autoprefixer', 'fab fa-avianex', 'fab fa-aviato', 'fas fa-award', 'fab fa-aws', 'fas fa-backspace', 'fas fa-backward', 'fas fa-balance-scale', 'fas fa-ban', 'fas fa-band-aid', 'fab fa-bandcamp', 'fas fa-barcode', 'fas fa-bars', 'fas fa-baseball-ball', 'fas fa-basketball-ball', 'fas fa-bath', 'fas fa-battery-empty', 'fas fa-battery-full', 'fas fa-battery-half', 'fas fa-battery-quarter', 'fas fa-battery-three-quarters', 'fas fa-bed', 'fas fa-beer', 'fab fa-behance', 'fab fa-behance-square', 'fas fa-bell', 'far fa-bell', 'fas fa-bell-slash', 'far fa-bell-slash', 'fas fa-bezier-curve', 'fas fa-bible', 'fas fa-bicycle', 'fab fa-bimobject', 'fas fa-binoculars', 'fas fa-birthday-cake', 'fab fa-bitbucket', 'fab fa-bitcoin', 'fab fa-bity', 'fab fa-black-tie', 'fab fa-blackberry', 'fas fa-blender', 'fas fa-blind', 'fab fa-blogger', 'fab fa-blogger-b', 'fab fa-bluetooth', 'fab fa-bluetooth-b', 'fas fa-bold', 'fas fa-bolt', 'fas fa-bomb', 'fas fa-bone', 'fas fa-bong', 'fas fa-book', 'fas fa-book-open', 'fas fa-book-reader', 'fas fa-bookmark', 'far fa-bookmark', 'fas fa-bowling-ball', 'fas fa-box', 'fas fa-box-open', 'fas fa-boxes', 'fas fa-braille', 'fas fa-brain', 'fas fa-briefcase', 'fas fa-briefcase-medical', 'fas fa-broadcast-tower', 'fas fa-broom', 'fas fa-brush', 'fab fa-btc', 'fas fa-bug', 'fas fa-building', 'far fa-building', 'fas fa-bullhorn', 'fas fa-bullseye', 'fas fa-burn', 'fab fa-buromobelexperte', 'fas fa-bus', 'fas fa-bus-alt', 'fas fa-business-time', 'fab fa-buysellads', 'fas fa-calculator', 'fas fa-calendar', 'far fa-calendar', 'fas fa-calendar-alt', 'far fa-calendar-alt', 'fas fa-calendar-check', 'far fa-calendar-check', 'fas fa-calendar-minus', 'far fa-calendar-minus', 'fas fa-calendar-plus', 'far fa-calendar-plus', 'fas fa-calendar-times', 'far fa-calendar-times', 'fas fa-camera', 'fas fa-camera-retro', 'fas fa-cannabis', 'fas fa-capsules', 'fas fa-car', 'fas fa-car-alt', 'fas fa-car-battery', 'fas fa-car-crash', 'fas fa-car-side', 'fas fa-caret-down', 'fas fa-caret-left', 'fas fa-caret-right', 'fas fa-caret-square-down', 'far fa-caret-square-down', 'fas fa-caret-square-left', 'far fa-caret-square-left', 'fas fa-caret-square-right', 'far fa-caret-square-right', 'fas fa-caret-square-up', 'far fa-caret-square-up', 'fas fa-caret-up', 'fas fa-cart-arrow-down', 'fas fa-cart-plus', 'fab fa-cc-amazon-pay', 'fab fa-cc-amex', 'fab fa-cc-apple-pay', 'fab fa-cc-diners-club', 'fab fa-cc-discover', 'fab fa-cc-jcb', 'fab fa-cc-mastercard', 'fab fa-cc-paypal', 'fab fa-cc-stripe', 'fab fa-cc-visa', 'fab fa-centercode', 'fas fa-certificate', 'fas fa-chalkboard', 'fas fa-chalkboard-teacher', 'fas fa-charging-station', 'fas fa-chart-area', 'fas fa-chart-bar', 'far fa-chart-bar', 'fas fa-chart-line', 'fas fa-chart-pie', 'fas fa-check', 'fas fa-check-circle', 'far fa-check-circle', 'fas fa-check-double', 'fas fa-check-square', 'far fa-check-square', 'fas fa-chess', 'fas fa-chess-bishop', 'fas fa-chess-board', 'fas fa-chess-king', 'fas fa-chess-knight', 'fas fa-chess-pawn', 'fas fa-chess-queen', 'fas fa-chess-rook', 'fas fa-chevron-circle-down', 'fas fa-chevron-circle-left', 'fas fa-chevron-circle-right', 'fas fa-chevron-circle-up', 'fas fa-chevron-down', 'fas fa-chevron-left', 'fas fa-chevron-right', 'fas fa-chevron-up', 'fas fa-child', 'fab fa-chrome', 'fas fa-church', 'fas fa-circle', 'far fa-circle', 'fas fa-circle-notch', 'fas fa-city', 'fas fa-clipboard', 'far fa-clipboard', 'fas fa-clipboard-check', 'fas fa-clipboard-list', 'fas fa-clock', 'far fa-clock', 'fas fa-clone', 'far fa-clone', 'fas fa-closed-captioning', 'far fa-closed-captioning', 'fas fa-cloud', 'fas fa-cloud-download-alt', 'fas fa-cloud-upload-alt', 'fab fa-cloudscale', 'fab fa-cloudsmith', 'fab fa-cloudversify', 'fas fa-cocktail', 'fas fa-code', 'fas fa-code-branch', 'fab fa-codepen', 'fab fa-codiepie', 'fas fa-coffee', 'fas fa-cog', 'fas fa-cogs', 'fas fa-coins', 'fas fa-columns', 'fas fa-comment', 'far fa-comment', 'fas fa-comment-alt', 'far fa-comment-alt', 'fas fa-comment-dollar', 'fas fa-comment-dots', 'far fa-comment-dots', 'fas fa-comment-slash', 'fas fa-comments', 'far fa-comments', 'fas fa-comments-dollar', 'fas fa-compact-disc', 'fas fa-compass', 'far fa-compass', 'fas fa-compress', 'fas fa-concierge-bell', 'fab fa-connectdevelop', 'fab fa-contao', 'fas fa-cookie', 'fas fa-cookie-bite', 'fas fa-copy', 'far fa-copy', 'fas fa-copyright', 'far fa-copyright', 'fas fa-couch', 'fab fa-cpanel', 'fab fa-creative-commons', 'fab fa-creative-commons-by', 'fab fa-creative-commons-nc', 'fab fa-creative-commons-nc-eu', 'fab fa-creative-commons-nc-jp', 'fab fa-creative-commons-nd', 'fab fa-creative-commons-pd', 'fab fa-creative-commons-pd-alt', 'fab fa-creative-commons-remix', 'fab fa-creative-commons-sa', 'fab fa-creative-commons-sampling', 'fab fa-creative-commons-sampling-plus', 'fab fa-creative-commons-share', 'fas fa-credit-card', 'far fa-credit-card', 'fas fa-crop', 'fas fa-crop-alt', 'fas fa-cross', 'fas fa-crosshairs', 'fas fa-crow', 'fas fa-crown', 'fab fa-css3', 'fab fa-css3-alt', 'fas fa-cube', 'fas fa-cubes', 'fas fa-cut', 'fab fa-cuttlefish', 'fab fa-d-and-d', 'fab fa-dashcube', 'fas fa-database', 'fas fa-deaf', 'fab fa-delicious', 'fab fa-deploydog', 'fab fa-deskpro', 'fas fa-desktop', 'fab fa-deviantart', 'fas fa-dharmachakra', 'fas fa-diagnoses', 'fas fa-dice', 'fas fa-dice-five', 'fas fa-dice-four', 'fas fa-dice-one', 'fas fa-dice-six', 'fas fa-dice-three', 'fas fa-dice-two', 'fab fa-digg', 'fab fa-digital-ocean', 'fas fa-digital-tachograph', 'fas fa-directions', 'fab fa-discord', 'fab fa-discourse', 'fas fa-divide', 'fas fa-dizzy', 'far fa-dizzy', 'fas fa-dna', 'fab fa-dochub', 'fab fa-docker', 'fas fa-dollar-sign', 'fas fa-dolly', 'fas fa-dolly-flatbed', 'fas fa-donate', 'fas fa-door-closed', 'fas fa-door-open', 'fas fa-dot-circle', 'far fa-dot-circle', 'fas fa-dove', 'fas fa-download', 'fab fa-draft2digital', 'fas fa-drafting-compass', 'fas fa-draw-polygon', 'fab fa-dribbble', 'fab fa-dribbble-square', 'fab fa-dropbox', 'fas fa-drum', 'fas fa-drum-steelpan', 'fab fa-drupal', 'fas fa-dumbbell', 'fab fa-dyalog', 'fab fa-earlybirds', 'fab fa-ebay', 'fab fa-edge', 'fas fa-edit', 'far fa-edit', 'fas fa-eject', 'fab fa-elementor', 'fas fa-ellipsis-h', 'fas fa-ellipsis-v', 'fab fa-ello', 'fab fa-ember', 'fab fa-empire', 'fas fa-envelope', 'far fa-envelope', 'fas fa-envelope-open', 'far fa-envelope-open', 'fas fa-envelope-open-text', 'fas fa-envelope-square', 'fab fa-envira', 'fas fa-equals', 'fas fa-eraser', 'fab fa-erlang', 'fab fa-ethereum', 'fab fa-etsy', 'fas fa-euro-sign', 'fas fa-exchange-alt', 'fas fa-exclamation', 'fas fa-exclamation-circle', 'fas fa-exclamation-triangle', 'fas fa-expand', 'fas fa-expand-arrows-alt', 'fab fa-expeditedssl', 'fas fa-external-link-alt', 'fas fa-external-link-square-alt', 'fas fa-eye', 'far fa-eye', 'fas fa-eye-dropper', 'fas fa-eye-slash', 'far fa-eye-slash', 'fab fa-facebook', 'fab fa-facebook-f', 'fab fa-facebook-messenger', 'fab fa-facebook-square', 'fas fa-fast-backward', 'fas fa-fast-forward', 'fas fa-fax', 'fas fa-feather', 'fas fa-feather-alt', 'fas fa-female', 'fas fa-fighter-jet', 'fas fa-file', 'far fa-file', 'fas fa-file-alt', 'far fa-file-alt', 'fas fa-file-archive', 'far fa-file-archive', 'fas fa-file-audio', 'far fa-file-audio', 'fas fa-file-code', 'far fa-file-code', 'fas fa-file-contract', 'fas fa-file-download', 'fas fa-file-excel', 'far fa-file-excel', 'fas fa-file-export', 'fas fa-file-image', 'far fa-file-image', 'fas fa-file-import', 'fas fa-file-invoice', 'fas fa-file-invoice-dollar', 'fas fa-file-medical', 'fas fa-file-medical-alt', 'fas fa-file-pdf', 'far fa-file-pdf', 'fas fa-file-powerpoint', 'far fa-file-powerpoint', 'fas fa-file-prescription', 'fas fa-file-signature', 'fas fa-file-upload', 'fas fa-file-video', 'far fa-file-video', 'fas fa-file-word', 'far fa-file-word', 'fas fa-fill', 'fas fa-fill-drip', 'fas fa-film', 'fas fa-filter', 'fas fa-fingerprint', 'fas fa-fire', 'fas fa-fire-extinguisher', 'fab fa-firefox', 'fas fa-first-aid', 'fab fa-first-order', 'fab fa-first-order-alt', 'fab fa-firstdraft', 'fas fa-fish', 'fas fa-flag', 'far fa-flag', 'fas fa-flag-checkered', 'fas fa-flask', 'fab fa-flickr', 'fab fa-flipboard', 'fas fa-flushed', 'far fa-flushed', 'fab fa-fly', 'fas fa-folder', 'far fa-folder', 'fas fa-folder-minus', 'fas fa-folder-open', 'far fa-folder-open', 'fas fa-folder-plus', 'fas fa-font', 'fab fa-font-awesome', 'fab fa-font-awesome-alt', 'fab fa-font-awesome-flag', 'fab fa-fonticons', 'fab fa-fonticons-fi', 'fas fa-football-ball', 'fab fa-fort-awesome', 'fab fa-fort-awesome-alt', 'fab fa-forumbee', 'fas fa-forward', 'fab fa-foursquare', 'fab fa-free-code-camp', 'fab fa-freebsd', 'fas fa-frog', 'fas fa-frown', 'far fa-frown', 'fas fa-frown-open', 'far fa-frown-open', 'fab fa-fulcrum', 'fas fa-funnel-dollar', 'fas fa-futbol', 'far fa-futbol', 'fab fa-galactic-republic', 'fab fa-galactic-senate', 'fas fa-gamepad', 'fas fa-gas-pump', 'fas fa-gavel', 'fas fa-gem', 'far fa-gem', 'fas fa-genderless', 'fab fa-get-pocket', 'fab fa-gg', 'fab fa-gg-circle', 'fas fa-gift', 'fab fa-git', 'fab fa-git-square', 'fab fa-github', 'fab fa-github-alt', 'fab fa-github-square', 'fab fa-gitkraken', 'fab fa-gitlab', 'fab fa-gitter', 'fas fa-glass-martini', 'fas fa-glass-martini-alt', 'fas fa-glasses', 'fab fa-glide', 'fab fa-glide-g', 'fas fa-globe', 'fas fa-globe-africa', 'fas fa-globe-americas', 'fas fa-globe-asia', 'fab fa-gofore', 'fas fa-golf-ball', 'fab fa-goodreads', 'fab fa-goodreads-g', 'fab fa-google', 'fab fa-google-drive', 'fab fa-google-play', 'fab fa-google-plus', 'fab fa-google-plus-g', 'fab fa-google-plus-square', 'fab fa-google-wallet', 'fas fa-gopuram', 'fas fa-graduation-cap', 'fab fa-gratipay', 'fab fa-grav', 'fas fa-greater-than', 'fas fa-greater-than-equal', 'fas fa-grimace', 'far fa-grimace', 'fas fa-grin', 'far fa-grin', 'fas fa-grin-alt', 'far fa-grin-alt', 'fas fa-grin-beam', 'far fa-grin-beam', 'fas fa-grin-beam-sweat', 'far fa-grin-beam-sweat', 'fas fa-grin-hearts', 'far fa-grin-hearts', 'fas fa-grin-squint', 'far fa-grin-squint', 'fas fa-grin-squint-tears', 'far fa-grin-squint-tears', 'fas fa-grin-stars', 'far fa-grin-stars', 'fas fa-grin-tears', 'far fa-grin-tears', 'fas fa-grin-tongue', 'far fa-grin-tongue', 'fas fa-grin-tongue-squint', 'far fa-grin-tongue-squint', 'fas fa-grin-tongue-wink', 'far fa-grin-tongue-wink', 'fas fa-grin-wink', 'far fa-grin-wink', 'fas fa-grip-horizontal', 'fas fa-grip-vertical', 'fab fa-gripfire', 'fab fa-grunt', 'fab fa-gulp', 'fas fa-h-square', 'fab fa-hacker-news', 'fab fa-hacker-news-square', 'fab fa-hackerrank', 'fas fa-hamsa', 'fas fa-hand-holding', 'fas fa-hand-holding-heart', 'fas fa-hand-holding-usd', 'fas fa-hand-lizard', 'far fa-hand-lizard', 'fas fa-hand-paper', 'far fa-hand-paper', 'fas fa-hand-peace', 'far fa-hand-peace', 'fas fa-hand-point-down', 'far fa-hand-point-down', 'fas fa-hand-point-left', 'far fa-hand-point-left', 'fas fa-hand-point-right', 'far fa-hand-point-right', 'fas fa-hand-point-up', 'far fa-hand-point-up', 'fas fa-hand-pointer', 'far fa-hand-pointer', 'fas fa-hand-rock', 'far fa-hand-rock', 'fas fa-hand-scissors', 'far fa-hand-scissors', 'fas fa-hand-spock', 'far fa-hand-spock', 'fas fa-hands', 'fas fa-hands-helping', 'fas fa-handshake', 'far fa-handshake', 'fas fa-hashtag', 'fas fa-haykal', 'fas fa-hdd', 'far fa-hdd', 'fas fa-heading', 'fas fa-headphones', 'fas fa-headphones-alt', 'fas fa-headset', 'fas fa-heart', 'far fa-heart', 'fas fa-heartbeat', 'fas fa-helicopter', 'fas fa-highlighter', 'fab fa-hips', 'fab fa-hire-a-helper', 'fas fa-history', 'fas fa-hockey-puck', 'fas fa-home', 'fab fa-hooli', 'fab fa-hornbill', 'fas fa-hospital', 'far fa-hospital', 'fas fa-hospital-alt', 'fas fa-hospital-symbol', 'fas fa-hot-tub', 'fas fa-hotel', 'fab fa-hotjar', 'fas fa-hourglass', 'far fa-hourglass', 'fas fa-hourglass-end', 'fas fa-hourglass-half', 'fas fa-hourglass-start', 'fab fa-houzz', 'fab fa-html5', 'fab fa-hubspot', 'fas fa-i-cursor', 'fas fa-id-badge', 'far fa-id-badge', 'fas fa-id-card', 'far fa-id-card', 'fas fa-id-card-alt', 'fas fa-image', 'far fa-image', 'fas fa-images', 'far fa-images', 'fab fa-imdb', 'fas fa-inbox', 'fas fa-indent', 'fas fa-industry', 'fas fa-infinity', 'fas fa-info', 'fas fa-info-circle', 'fab fa-instagram', 'fab fa-internet-explorer', 'fab fa-ioxhost', 'fas fa-italic', 'fab fa-itunes', 'fab fa-itunes-note', 'fab fa-java', 'fas fa-jedi', 'fab fa-jedi-order', 'fab fa-jenkins', 'fab fa-joget', 'fas fa-joint', 'fab fa-joomla', 'fas fa-journal-whills', 'fab fa-js', 'fab fa-js-square', 'fab fa-jsfiddle', 'fas fa-kaaba', 'fab fa-kaggle', 'fas fa-key', 'fab fa-keybase', 'fas fa-keyboard', 'far fa-keyboard', 'fab fa-keycdn', 'fas fa-khanda', 'fab fa-kickstarter', 'fab fa-kickstarter-k', 'fas fa-kiss', 'far fa-kiss', 'fas fa-kiss-beam', 'far fa-kiss-beam', 'fas fa-kiss-wink-heart', 'far fa-kiss-wink-heart', 'fas fa-kiwi-bird', 'fab fa-korvue', 'fas fa-landmark', 'fas fa-language', 'fas fa-laptop', 'fas fa-laptop-code', 'fab fa-laravel', 'fab fa-lastfm', 'fab fa-lastfm-square', 'fas fa-laugh', 'far fa-laugh', 'fas fa-laugh-beam', 'far fa-laugh-beam', 'fas fa-laugh-squint', 'far fa-laugh-squint', 'fas fa-laugh-wink', 'far fa-laugh-wink', 'fas fa-layer-group', 'fas fa-leaf', 'fab fa-leanpub', 'fas fa-lemon', 'far fa-lemon', 'fab fa-less', 'fas fa-less-than', 'fas fa-less-than-equal', 'fas fa-level-down-alt', 'fas fa-level-up-alt', 'fas fa-life-ring', 'far fa-life-ring', 'fas fa-lightbulb', 'far fa-lightbulb', 'fab fa-line', 'fas fa-link', 'fab fa-linkedin', 'fab fa-linkedin-in', 'fab fa-linode', 'fab fa-linux', 'fas fa-lira-sign', 'fas fa-list', 'fas fa-list-alt', 'far fa-list-alt', 'fas fa-list-ol', 'fas fa-list-ul', 'fas fa-location-arrow', 'fas fa-lock', 'fas fa-lock-open', 'fas fa-long-arrow-alt-down', 'fas fa-long-arrow-alt-left', 'fas fa-long-arrow-alt-right', 'fas fa-long-arrow-alt-up', 'fas fa-low-vision', 'fas fa-luggage-cart', 'fab fa-lyft', 'fab fa-magento', 'fas fa-magic', 'fas fa-magnet', 'fas fa-mail-bulk', 'fab fa-mailchimp', 'fas fa-male', 'fab fa-mandalorian', 'fas fa-map', 'far fa-map', 'fas fa-map-marked', 'fas fa-map-marked-alt', 'fas fa-map-marker', 'fas fa-map-marker-alt', 'fas fa-map-pin', 'fas fa-map-signs', 'fab fa-markdown', 'fas fa-marker', 'fas fa-mars', 'fas fa-mars-double', 'fas fa-mars-stroke', 'fas fa-mars-stroke-h', 'fas fa-mars-stroke-v', 'fab fa-mastodon', 'fab fa-maxcdn', 'fas fa-medal', 'fab fa-medapps', 'fab fa-medium', 'fab fa-medium-m', 'fas fa-medkit', 'fab fa-medrt', 'fab fa-meetup', 'fab fa-megaport', 'fas fa-meh', 'far fa-meh', 'fas fa-meh-blank', 'far fa-meh-blank', 'fas fa-meh-rolling-eyes', 'far fa-meh-rolling-eyes', 'fas fa-memory', 'fas fa-menorah', 'fas fa-mercury', 'fas fa-microchip', 'fas fa-microphone', 'fas fa-microphone-alt', 'fas fa-microphone-alt-slash', 'fas fa-microphone-slash', 'fas fa-microscope', 'fab fa-microsoft', 'fas fa-minus', 'fas fa-minus-circle', 'fas fa-minus-square', 'far fa-minus-square', 'fab fa-mix', 'fab fa-mixcloud', 'fab fa-mizuni', 'fas fa-mobile', 'fas fa-mobile-alt', 'fab fa-modx', 'fab fa-monero', 'fas fa-money-bill', 'fas fa-money-bill-alt', 'far fa-money-bill-alt', 'fas fa-money-bill-wave', 'fas fa-money-bill-wave-alt', 'fas fa-money-check', 'fas fa-money-check-alt', 'fas fa-monument', 'fas fa-moon', 'far fa-moon', 'fas fa-mortar-pestle', 'fas fa-mosque', 'fas fa-motorcycle', 'fas fa-mouse-pointer', 'fas fa-music', 'fab fa-napster', 'fab fa-neos', 'fas fa-neuter', 'fas fa-newspaper', 'far fa-newspaper', 'fab fa-nimblr', 'fab fa-nintendo-switch', 'fab fa-node', 'fab fa-node-js', 'fas fa-not-equal', 'fas fa-notes-medical', 'fab fa-npm', 'fab fa-ns8', 'fab fa-nutritionix', 'fas fa-object-group', 'far fa-object-group', 'fas fa-object-ungroup', 'far fa-object-ungroup', 'fab fa-odnoklassniki', 'fab fa-odnoklassniki-square', 'fas fa-oil-can', 'fab fa-old-republic', 'fas fa-om', 'fab fa-opencart', 'fab fa-openid', 'fab fa-opera', 'fab fa-optin-monster', 'fab fa-osi', 'fas fa-outdent', 'fab fa-page4', 'fab fa-pagelines', 'fas fa-paint-brush', 'fas fa-paint-roller', 'fas fa-palette', 'fab fa-palfed', 'fas fa-pallet', 'fas fa-paper-plane', 'far fa-paper-plane', 'fas fa-paperclip', 'fas fa-parachute-box', 'fas fa-paragraph', 'fas fa-parking', 'fas fa-passport', 'fas fa-pastafarianism', 'fas fa-paste', 'fab fa-patreon', 'fas fa-pause', 'fas fa-pause-circle', 'far fa-pause-circle', 'fas fa-paw', 'fab fa-paypal', 'fas fa-peace', 'fas fa-pen', 'fas fa-pen-alt', 'fas fa-pen-fancy', 'fas fa-pen-nib', 'fas fa-pen-square', 'fas fa-pencil-alt', 'fas fa-pencil-ruler', 'fas fa-people-carry', 'fas fa-percent', 'fas fa-percentage', 'fab fa-periscope', 'fab fa-phabricator', 'fab fa-phoenix-framework', 'fab fa-phoenix-squadron', 'fas fa-phone', 'fas fa-phone-slash', 'fas fa-phone-square', 'fas fa-phone-volume', 'fab fa-php', 'fab fa-pied-piper', 'fab fa-pied-piper-alt', 'fab fa-pied-piper-hat', 'fab fa-pied-piper-pp', 'fas fa-piggy-bank', 'fas fa-pills', 'fab fa-pinterest', 'fab fa-pinterest-p', 'fab fa-pinterest-square', 'fas fa-place-of-worship', 'fas fa-plane', 'fas fa-plane-arrival', 'fas fa-plane-departure', 'fas fa-play', 'fas fa-play-circle', 'far fa-play-circle', 'fab fa-playstation', 'fas fa-plug', 'fas fa-plus', 'fas fa-plus-circle', 'fas fa-plus-square', 'far fa-plus-square', 'fas fa-podcast', 'fas fa-poll', 'fas fa-poll-h', 'fas fa-poo', 'fas fa-poop', 'fas fa-portrait', 'fas fa-pound-sign', 'fas fa-power-off', 'fas fa-pray', 'fas fa-praying-hands', 'fas fa-prescription', 'fas fa-prescription-bottle', 'fas fa-prescription-bottle-alt', 'fas fa-print', 'fas fa-procedures', 'fab fa-product-hunt', 'fas fa-project-diagram', 'fab fa-pushed', 'fas fa-puzzle-piece', 'fab fa-python', 'fab fa-qq', 'fas fa-qrcode', 'fas fa-question', 'fas fa-question-circle', 'far fa-question-circle', 'fas fa-quidditch', 'fab fa-quinscape', 'fab fa-quora', 'fas fa-quote-left', 'fas fa-quote-right', 'fas fa-quran', 'fab fa-r-project', 'fas fa-random', 'fab fa-ravelry', 'fab fa-react', 'fab fa-readme', 'fab fa-rebel', 'fas fa-receipt', 'fas fa-recycle', 'fab fa-red-river', 'fab fa-reddit', 'fab fa-reddit-alien', 'fab fa-reddit-square', 'fas fa-redo', 'fas fa-redo-alt', 'fas fa-registered', 'far fa-registered', 'fab fa-rendact', 'fab fa-renren', 'fas fa-reply', 'fas fa-reply-all', 'fab fa-replyd', 'fab fa-researchgate', 'fab fa-resolving', 'fas fa-retweet', 'fab fa-rev', 'fas fa-ribbon', 'fas fa-road', 'fas fa-robot', 'fas fa-rocket', 'fab fa-rocketchat', 'fab fa-rockrms', 'fas fa-route', 'fas fa-rss', 'fas fa-rss-square', 'fas fa-ruble-sign', 'fas fa-ruler', 'fas fa-ruler-combined', 'fas fa-ruler-horizontal', 'fas fa-ruler-vertical', 'fas fa-rupee-sign', 'fas fa-sad-cry', 'far fa-sad-cry', 'fas fa-sad-tear', 'far fa-sad-tear', 'fab fa-safari', 'fab fa-sass', 'fas fa-save', 'far fa-save', 'fab fa-schlix', 'fas fa-school', 'fas fa-screwdriver', 'fab fa-scribd', 'fas fa-search', 'fas fa-search-dollar', 'fas fa-search-location', 'fas fa-search-minus', 'fas fa-search-plus', 'fab fa-searchengin', 'fas fa-seedling', 'fab fa-sellcast', 'fab fa-sellsy', 'fas fa-server', 'fab fa-servicestack', 'fas fa-shapes', 'fas fa-share', 'fas fa-share-alt', 'fas fa-share-alt-square', 'fas fa-share-square', 'far fa-share-square', 'fas fa-shekel-sign', 'fas fa-shield-alt', 'fas fa-ship', 'fas fa-shipping-fast', 'fab fa-shirtsinbulk', 'fas fa-shoe-prints', 'fas fa-shopping-bag', 'fas fa-shopping-basket', 'fas fa-shopping-cart', 'fab fa-shopware', 'fas fa-shower', 'fas fa-shuttle-van', 'fas fa-sign', 'fas fa-sign-in-alt', 'fas fa-sign-language', 'fas fa-sign-out-alt', 'fas fa-signal', 'fas fa-signature', 'fab fa-simplybuilt', 'fab fa-sistrix', 'fas fa-sitemap', 'fab fa-sith', 'fas fa-skull', 'fab fa-skyatlas', 'fab fa-skype', 'fab fa-slack', 'fab fa-slack-hash', 'fas fa-sliders-h', 'fab fa-slideshare', 'fas fa-smile', 'far fa-smile', 'fas fa-smile-beam', 'far fa-smile-beam', 'fas fa-smile-wink', 'far fa-smile-wink', 'fas fa-smoking', 'fas fa-smoking-ban', 'fab fa-snapchat', 'fab fa-snapchat-ghost', 'fab fa-snapchat-square', 'fas fa-snowflake', 'far fa-snowflake', 'fas fa-socks', 'fas fa-solar-panel', 'fas fa-sort', 'fas fa-sort-alpha-down', 'fas fa-sort-alpha-up', 'fas fa-sort-amount-down', 'fas fa-sort-amount-up', 'fas fa-sort-down', 'fas fa-sort-numeric-down', 'fas fa-sort-numeric-up', 'fas fa-sort-up', 'fab fa-soundcloud', 'fas fa-spa', 'fas fa-space-shuttle', 'fab fa-speakap', 'fas fa-spinner', 'fas fa-splotch', 'fab fa-spotify', 'fas fa-spray-can', 'fas fa-square', 'far fa-square', 'fas fa-square-full', 'fas fa-square-root-alt', 'fab fa-squarespace', 'fab fa-stack-exchange', 'fab fa-stack-overflow', 'fas fa-stamp', 'fas fa-star', 'far fa-star', 'fas fa-star-and-crescent', 'fas fa-star-half', 'far fa-star-half', 'fas fa-star-half-alt', 'fas fa-star-of-david', 'fas fa-star-of-life', 'fab fa-staylinked', 'fab fa-steam', 'fab fa-steam-square', 'fab fa-steam-symbol', 'fas fa-step-backward', 'fas fa-step-forward', 'fas fa-stethoscope', 'fab fa-sticker-mule', 'fas fa-sticky-note', 'far fa-sticky-note', 'fas fa-stop', 'fas fa-stop-circle', 'far fa-stop-circle', 'fas fa-stopwatch', 'fas fa-store', 'fas fa-store-alt', 'fab fa-strava', 'fas fa-stream', 'fas fa-street-view', 'fas fa-strikethrough', 'fab fa-stripe', 'fab fa-stripe-s', 'fas fa-stroopwafel', 'fab fa-studiovinari', 'fab fa-stumbleupon', 'fab fa-stumbleupon-circle', 'fas fa-subscript', 'fas fa-subway', 'fas fa-suitcase', 'fas fa-suitcase-rolling', 'fas fa-sun', 'far fa-sun', 'fab fa-superpowers', 'fas fa-superscript', 'fab fa-supple', 'fas fa-surprise', 'far fa-surprise', 'fas fa-swatchbook', 'fas fa-swimmer', 'fas fa-swimming-pool', 'fas fa-synagogue', 'fas fa-sync', 'fas fa-sync-alt', 'fas fa-syringe', 'fas fa-table', 'fas fa-table-tennis', 'fas fa-tablet', 'fas fa-tablet-alt', 'fas fa-tablets', 'fas fa-tachometer-alt', 'fas fa-tag', 'fas fa-tags', 'fas fa-tape', 'fas fa-tasks', 'fas fa-taxi', 'fab fa-teamspeak', 'fas fa-teeth', 'fas fa-teeth-open', 'fab fa-telegram', 'fab fa-telegram-plane', 'fab fa-tencent-weibo', 'fas fa-terminal', 'fas fa-text-height', 'fas fa-text-width', 'fas fa-th', 'fas fa-th-large', 'fas fa-th-list', 'fab fa-the-red-yeti', 'fas fa-theater-masks', 'fab fa-themeco', 'fab fa-themeisle', 'fas fa-thermometer', 'fas fa-thermometer-empty', 'fas fa-thermometer-full', 'fas fa-thermometer-half', 'fas fa-thermometer-quarter', 'fas fa-thermometer-three-quarters', 'fas fa-thumbs-down', 'far fa-thumbs-down', 'fas fa-thumbs-up', 'far fa-thumbs-up', 'fas fa-thumbtack', 'fas fa-ticket-alt', 'fas fa-times', 'fas fa-times-circle', 'far fa-times-circle', 'fas fa-tint', 'fas fa-tint-slash', 'fas fa-tired', 'far fa-tired', 'fas fa-toggle-off', 'fas fa-toggle-on', 'fas fa-toolbox', 'fas fa-tooth', 'fas fa-torah', 'fas fa-torii-gate', 'fab fa-trade-federation', 'fas fa-trademark', 'fas fa-traffic-light', 'fas fa-train', 'fas fa-transgender', 'fas fa-transgender-alt', 'fas fa-trash', 'fas fa-trash-alt', 'far fa-trash-alt', 'fas fa-tree', 'fab fa-trello', 'fab fa-tripadvisor', 'fas fa-trophy', 'fas fa-truck', 'fas fa-truck-loading', 'fas fa-truck-monster', 'fas fa-truck-moving', 'fas fa-truck-pickup', 'fas fa-tshirt', 'fas fa-tty', 'fab fa-tumblr', 'fab fa-tumblr-square', 'fas fa-tv', 'fab fa-twitch', 'fab fa-twitter', 'fab fa-twitter-square', 'fab fa-typo3', 'fab fa-uber', 'fab fa-uikit', 'fas fa-umbrella', 'fas fa-umbrella-beach', 'fas fa-underline', 'fas fa-undo', 'fas fa-undo-alt', 'fab fa-uniregistry', 'fas fa-universal-access', 'fas fa-university', 'fas fa-unlink', 'fas fa-unlock', 'fas fa-unlock-alt', 'fab fa-untappd', 'fas fa-upload', 'fab fa-usb', 'fas fa-user', 'far fa-user', 'fas fa-user-alt', 'fas fa-user-alt-slash', 'fas fa-user-astronaut', 'fas fa-user-check', 'fas fa-user-circle', 'far fa-user-circle', 'fas fa-user-clock', 'fas fa-user-cog', 'fas fa-user-edit', 'fas fa-user-friends', 'fas fa-user-graduate', 'fas fa-user-lock', 'fas fa-user-md', 'fas fa-user-minus', 'fas fa-user-ninja', 'fas fa-user-plus', 'fas fa-user-secret', 'fas fa-user-shield', 'fas fa-user-slash', 'fas fa-user-tag', 'fas fa-user-tie', 'fas fa-user-times', 'fas fa-users', 'fas fa-users-cog', 'fab fa-ussunnah', 'fas fa-utensil-spoon', 'fas fa-utensils', 'fab fa-vaadin', 'fas fa-vector-square', 'fas fa-venus', 'fas fa-venus-double', 'fas fa-venus-mars', 'fab fa-viacoin', 'fab fa-viadeo', 'fab fa-viadeo-square', 'fas fa-vial', 'fas fa-vials', 'fab fa-viber', 'fas fa-video', 'fas fa-video-slash', 'fas fa-vihara', 'fab fa-vimeo', 'fab fa-vimeo-square', 'fab fa-vimeo-v', 'fab fa-vine', 'fab fa-vk', 'fab fa-vnv', 'fas fa-volleyball-ball', 'fas fa-volume-down', 'fas fa-volume-off', 'fas fa-volume-up', 'fab fa-vuejs', 'fas fa-walking', 'fas fa-wallet', 'fas fa-warehouse', 'fab fa-weebly', 'fab fa-weibo', 'fas fa-weight', 'fas fa-weight-hanging', 'fab fa-weixin', 'fab fa-whatsapp', 'fab fa-whatsapp-square', 'fas fa-wheelchair', 'fab fa-whmcs', 'fas fa-wifi', 'fab fa-wikipedia-w', 'fas fa-window-close', 'far fa-window-close', 'fas fa-window-maximize', 'far fa-window-maximize', 'fas fa-window-minimize', 'far fa-window-minimize', 'fas fa-window-restore', 'far fa-window-restore', 'fab fa-windows', 'fas fa-wine-glass', 'fas fa-wine-glass-alt', 'fab fa-wix', 'fab fa-wolf-pack-battalion', 'fas fa-won-sign', 'fab fa-wordpress', 'fab fa-wordpress-simple', 'fab fa-wpbeginner', 'fab fa-wpexplorer', 'fab fa-wpforms', 'fas fa-wrench', 'fas fa-x-ray', 'fab fa-xbox', 'fab fa-xing', 'fab fa-xing-square', 'fab fa-y-combinator', 'fab fa-yahoo', 'fab fa-yandex', 'fab fa-yandex-international', 'fab fa-yelp', 'fas fa-yen-sign', 'fas fa-yin-yang', 'fab fa-yoast', 'fab fa-youtube', 'fab fa-youtube-square', 'fab fa-zhihu' ] } ] }; var l = data.allVersions.length; data.icons = data.allVersions[l-1].icons; $.iconset_fontawesome_4 = data; })(jQuery); /*!======================================================================== * Iconset: Font Awesome * Versions: 5.3.1, 5.3.1_pro * http://fortawesome.github.io/Font-Awesome/ * CDN: https://use.fontawesome.com/releases/[VERSION]/css/all.css * ======================================================================== */ ;(function($){ var data = { iconClass: '', iconClassFix: '', icons: [], allVersions: [ { version: '5.3.1', icons: [ 'empty', 'fab fa-500px', 'fab fa-accessible-icon', 'fab fa-accusoft', 'fas fa-ad', 'fas fa-address-book', 'far fa-address-book', 'fas fa-address-card', 'far fa-address-card', 'fas fa-adjust', 'fab fa-adn', 'fab fa-adversal', 'fab fa-affiliatetheme', 'fas fa-air-freshener', 'fab fa-algolia', 'fas fa-align-center', 'fas fa-align-justify', 'fas fa-align-left', 'fas fa-align-right', 'fab fa-alipay', 'fas fa-allergies', 'fab fa-amazon', 'fab fa-amazon-pay', 'fas fa-ambulance', 'fas fa-american-sign-language-interpreting', 'fab fa-amilia', 'fas fa-anchor', 'fab fa-android', 'fab fa-angellist', 'fas fa-angle-double-down', 'fas fa-angle-double-left', 'fas fa-angle-double-right', 'fas fa-angle-double-up', 'fas fa-angle-down', 'fas fa-angle-left', 'fas fa-angle-right', 'fas fa-angle-up', 'fas fa-angry', 'far fa-angry', 'fab fa-angrycreative', 'fab fa-angular', 'fas fa-ankh', 'fab fa-app-store', 'fab fa-app-store-ios', 'fab fa-apper', 'fab fa-apple', 'fas fa-apple-alt', 'fab fa-apple-pay', 'fas fa-archive', 'fas fa-archway', 'fas fa-arrow-alt-circle-down', 'far fa-arrow-alt-circle-down', 'fas fa-arrow-alt-circle-left', 'far fa-arrow-alt-circle-left', 'fas fa-arrow-alt-circle-right', 'far fa-arrow-alt-circle-right', 'fas fa-arrow-alt-circle-up', 'far fa-arrow-alt-circle-up', 'fas fa-arrow-circle-down', 'fas fa-arrow-circle-left', 'fas fa-arrow-circle-right', 'fas fa-arrow-circle-up', 'fas fa-arrow-down', 'fas fa-arrow-left', 'fas fa-arrow-right', 'fas fa-arrow-up', 'fas fa-arrows-alt', 'fas fa-arrows-alt-h', 'fas fa-arrows-alt-v', 'fas fa-assistive-listening-systems', 'fas fa-asterisk', 'fab fa-asymmetrik', 'fas fa-at', 'fas fa-atlas', 'fas fa-atom', 'fab fa-audible', 'fas fa-audio-description', 'fab fa-autoprefixer', 'fab fa-avianex', 'fab fa-aviato', 'fas fa-award', 'fab fa-aws', 'fas fa-backspace', 'fas fa-backward', 'fas fa-balance-scale', 'fas fa-ban', 'fas fa-band-aid', 'fab fa-bandcamp', 'fas fa-barcode', 'fas fa-bars', 'fas fa-baseball-ball', 'fas fa-basketball-ball', 'fas fa-bath', 'fas fa-battery-empty', 'fas fa-battery-full', 'fas fa-battery-half', 'fas fa-battery-quarter', 'fas fa-battery-three-quarters', 'fas fa-bed', 'fas fa-beer', 'fab fa-behance', 'fab fa-behance-square', 'fas fa-bell', 'far fa-bell', 'fas fa-bell-slash', 'far fa-bell-slash', 'fas fa-bezier-curve', 'fas fa-bible', 'fas fa-bicycle', 'fab fa-bimobject', 'fas fa-binoculars', 'fas fa-birthday-cake', 'fab fa-bitbucket', 'fab fa-bitcoin', 'fab fa-bity', 'fab fa-black-tie', 'fab fa-blackberry', 'fas fa-blender', 'fas fa-blind', 'fab fa-blogger', 'fab fa-blogger-b', 'fab fa-bluetooth', 'fab fa-bluetooth-b', 'fas fa-bold', 'fas fa-bolt', 'fas fa-bomb', 'fas fa-bone', 'fas fa-bong', 'fas fa-book', 'fas fa-book-open', 'fas fa-book-reader', 'fas fa-bookmark', 'far fa-bookmark', 'fas fa-bowling-ball', 'fas fa-box', 'fas fa-box-open', 'fas fa-boxes', 'fas fa-braille', 'fas fa-brain', 'fas fa-briefcase', 'fas fa-briefcase-medical', 'fas fa-broadcast-tower', 'fas fa-broom', 'fas fa-brush', 'fab fa-btc', 'fas fa-bug', 'fas fa-building', 'far fa-building', 'fas fa-bullhorn', 'fas fa-bullseye', 'fas fa-burn', 'fab fa-buromobelexperte', 'fas fa-bus', 'fas fa-bus-alt', 'fas fa-business-time', 'fab fa-buysellads', 'fas fa-calculator', 'fas fa-calendar', 'far fa-calendar', 'fas fa-calendar-alt', 'far fa-calendar-alt', 'fas fa-calendar-check', 'far fa-calendar-check', 'fas fa-calendar-minus', 'far fa-calendar-minus', 'fas fa-calendar-plus', 'far fa-calendar-plus', 'fas fa-calendar-times', 'far fa-calendar-times', 'fas fa-camera', 'fas fa-camera-retro', 'fas fa-cannabis', 'fas fa-capsules', 'fas fa-car', 'fas fa-car-alt', 'fas fa-car-battery', 'fas fa-car-crash', 'fas fa-car-side', 'fas fa-caret-down', 'fas fa-caret-left', 'fas fa-caret-right', 'fas fa-caret-square-down', 'far fa-caret-square-down', 'fas fa-caret-square-left', 'far fa-caret-square-left', 'fas fa-caret-square-right', 'far fa-caret-square-right', 'fas fa-caret-square-up', 'far fa-caret-square-up', 'fas fa-caret-up', 'fas fa-cart-arrow-down', 'fas fa-cart-plus', 'fab fa-cc-amazon-pay', 'fab fa-cc-amex', 'fab fa-cc-apple-pay', 'fab fa-cc-diners-club', 'fab fa-cc-discover', 'fab fa-cc-jcb', 'fab fa-cc-mastercard', 'fab fa-cc-paypal', 'fab fa-cc-stripe', 'fab fa-cc-visa', 'fab fa-centercode', 'fas fa-certificate', 'fas fa-chalkboard', 'fas fa-chalkboard-teacher', 'fas fa-charging-station', 'fas fa-chart-area', 'fas fa-chart-bar', 'far fa-chart-bar', 'fas fa-chart-line', 'fas fa-chart-pie', 'fas fa-check', 'fas fa-check-circle', 'far fa-check-circle', 'fas fa-check-double', 'fas fa-check-square', 'far fa-check-square', 'fas fa-chess', 'fas fa-chess-bishop', 'fas fa-chess-board', 'fas fa-chess-king', 'fas fa-chess-knight', 'fas fa-chess-pawn', 'fas fa-chess-queen', 'fas fa-chess-rook', 'fas fa-chevron-circle-down', 'fas fa-chevron-circle-left', 'fas fa-chevron-circle-right', 'fas fa-chevron-circle-up', 'fas fa-chevron-down', 'fas fa-chevron-left', 'fas fa-chevron-right', 'fas fa-chevron-up', 'fas fa-child', 'fab fa-chrome', 'fas fa-church', 'fas fa-circle', 'far fa-circle', 'fas fa-circle-notch', 'fas fa-city', 'fas fa-clipboard', 'far fa-clipboard', 'fas fa-clipboard-check', 'fas fa-clipboard-list', 'fas fa-clock', 'far fa-clock', 'fas fa-clone', 'far fa-clone', 'fas fa-closed-captioning', 'far fa-closed-captioning', 'fas fa-cloud', 'fas fa-cloud-download-alt', 'fas fa-cloud-upload-alt', 'fab fa-cloudscale', 'fab fa-cloudsmith', 'fab fa-cloudversify', 'fas fa-cocktail', 'fas fa-code', 'fas fa-code-branch', 'fab fa-codepen', 'fab fa-codiepie', 'fas fa-coffee', 'fas fa-cog', 'fas fa-cogs', 'fas fa-coins', 'fas fa-columns', 'fas fa-comment', 'far fa-comment', 'fas fa-comment-alt', 'far fa-comment-alt', 'fas fa-comment-dollar', 'fas fa-comment-dots', 'far fa-comment-dots', 'fas fa-comment-slash', 'fas fa-comments', 'far fa-comments', 'fas fa-comments-dollar', 'fas fa-compact-disc', 'fas fa-compass', 'far fa-compass', 'fas fa-compress', 'fas fa-concierge-bell', 'fab fa-connectdevelop', 'fab fa-contao', 'fas fa-cookie', 'fas fa-cookie-bite', 'fas fa-copy', 'far fa-copy', 'fas fa-copyright', 'far fa-copyright', 'fas fa-couch', 'fab fa-cpanel', 'fab fa-creative-commons', 'fab fa-creative-commons-by', 'fab fa-creative-commons-nc', 'fab fa-creative-commons-nc-eu', 'fab fa-creative-commons-nc-jp', 'fab fa-creative-commons-nd', 'fab fa-creative-commons-pd', 'fab fa-creative-commons-pd-alt', 'fab fa-creative-commons-remix', 'fab fa-creative-commons-sa', 'fab fa-creative-commons-sampling', 'fab fa-creative-commons-sampling-plus', 'fab fa-creative-commons-share', 'fas fa-credit-card', 'far fa-credit-card', 'fas fa-crop', 'fas fa-crop-alt', 'fas fa-cross', 'fas fa-crosshairs', 'fas fa-crow', 'fas fa-crown', 'fab fa-css3', 'fab fa-css3-alt', 'fas fa-cube', 'fas fa-cubes', 'fas fa-cut', 'fab fa-cuttlefish', 'fab fa-d-and-d', 'fab fa-dashcube', 'fas fa-database', 'fas fa-deaf', 'fab fa-delicious', 'fab fa-deploydog', 'fab fa-deskpro', 'fas fa-desktop', 'fab fa-deviantart', 'fas fa-dharmachakra', 'fas fa-diagnoses', 'fas fa-dice', 'fas fa-dice-five', 'fas fa-dice-four', 'fas fa-dice-one', 'fas fa-dice-six', 'fas fa-dice-three', 'fas fa-dice-two', 'fab fa-digg', 'fab fa-digital-ocean', 'fas fa-digital-tachograph', 'fas fa-directions', 'fab fa-discord', 'fab fa-discourse', 'fas fa-divide', 'fas fa-dizzy', 'far fa-dizzy', 'fas fa-dna', 'fab fa-dochub', 'fab fa-docker', 'fas fa-dollar-sign', 'fas fa-dolly', 'fas fa-dolly-flatbed', 'fas fa-donate', 'fas fa-door-closed', 'fas fa-door-open', 'fas fa-dot-circle', 'far fa-dot-circle', 'fas fa-dove', 'fas fa-download', 'fab fa-draft2digital', 'fas fa-drafting-compass', 'fas fa-draw-polygon', 'fab fa-dribbble', 'fab fa-dribbble-square', 'fab fa-dropbox', 'fas fa-drum', 'fas fa-drum-steelpan', 'fab fa-drupal', 'fas fa-dumbbell', 'fab fa-dyalog', 'fab fa-earlybirds', 'fab fa-ebay', 'fab fa-edge', 'fas fa-edit', 'far fa-edit', 'fas fa-eject', 'fab fa-elementor', 'fas fa-ellipsis-h', 'fas fa-ellipsis-v', 'fab fa-ello', 'fab fa-ember', 'fab fa-empire', 'fas fa-envelope', 'far fa-envelope', 'fas fa-envelope-open', 'far fa-envelope-open', 'fas fa-envelope-open-text', 'fas fa-envelope-square', 'fab fa-envira', 'fas fa-equals', 'fas fa-eraser', 'fab fa-erlang', 'fab fa-ethereum', 'fab fa-etsy', 'fas fa-euro-sign', 'fas fa-exchange-alt', 'fas fa-exclamation', 'fas fa-exclamation-circle', 'fas fa-exclamation-triangle', 'fas fa-expand', 'fas fa-expand-arrows-alt', 'fab fa-expeditedssl', 'fas fa-external-link-alt', 'fas fa-external-link-square-alt', 'fas fa-eye', 'far fa-eye', 'fas fa-eye-dropper', 'fas fa-eye-slash', 'far fa-eye-slash', 'fab fa-facebook', 'fab fa-facebook-f', 'fab fa-facebook-messenger', 'fab fa-facebook-square', 'fas fa-fast-backward', 'fas fa-fast-forward', 'fas fa-fax', 'fas fa-feather', 'fas fa-feather-alt', 'fas fa-female', 'fas fa-fighter-jet', 'fas fa-file', 'far fa-file', 'fas fa-file-alt', 'far fa-file-alt', 'fas fa-file-archive', 'far fa-file-archive', 'fas fa-file-audio', 'far fa-file-audio', 'fas fa-file-code', 'far fa-file-code', 'fas fa-file-contract', 'fas fa-file-download', 'fas fa-file-excel', 'far fa-file-excel', 'fas fa-file-export', 'fas fa-file-image', 'far fa-file-image', 'fas fa-file-import', 'fas fa-file-invoice', 'fas fa-file-invoice-dollar', 'fas fa-file-medical', 'fas fa-file-medical-alt', 'fas fa-file-pdf', 'far fa-file-pdf', 'fas fa-file-powerpoint', 'far fa-file-powerpoint', 'fas fa-file-prescription', 'fas fa-file-signature', 'fas fa-file-upload', 'fas fa-file-video', 'far fa-file-video', 'fas fa-file-word', 'far fa-file-word', 'fas fa-fill', 'fas fa-fill-drip', 'fas fa-film', 'fas fa-filter', 'fas fa-fingerprint', 'fas fa-fire', 'fas fa-fire-extinguisher', 'fab fa-firefox', 'fas fa-first-aid', 'fab fa-first-order', 'fab fa-first-order-alt', 'fab fa-firstdraft', 'fas fa-fish', 'fas fa-flag', 'far fa-flag', 'fas fa-flag-checkered', 'fas fa-flask', 'fab fa-flickr', 'fab fa-flipboard', 'fas fa-flushed', 'far fa-flushed', 'fab fa-fly', 'fas fa-folder', 'far fa-folder', 'fas fa-folder-minus', 'fas fa-folder-open', 'far fa-folder-open', 'fas fa-folder-plus', 'fas fa-font', 'fab fa-font-awesome', 'fab fa-font-awesome-alt', 'fab fa-font-awesome-flag', 'fab fa-fonticons', 'fab fa-fonticons-fi', 'fas fa-football-ball', 'fab fa-fort-awesome', 'fab fa-fort-awesome-alt', 'fab fa-forumbee', 'fas fa-forward', 'fab fa-foursquare', 'fab fa-free-code-camp', 'fab fa-freebsd', 'fas fa-frog', 'fas fa-frown', 'far fa-frown', 'fas fa-frown-open', 'far fa-frown-open', 'fab fa-fulcrum', 'fas fa-funnel-dollar', 'fas fa-futbol', 'far fa-futbol', 'fab fa-galactic-republic', 'fab fa-galactic-senate', 'fas fa-gamepad', 'fas fa-gas-pump', 'fas fa-gavel', 'fas fa-gem', 'far fa-gem', 'fas fa-genderless', 'fab fa-get-pocket', 'fab fa-gg', 'fab fa-gg-circle', 'fas fa-gift', 'fab fa-git', 'fab fa-git-square', 'fab fa-github', 'fab fa-github-alt', 'fab fa-github-square', 'fab fa-gitkraken', 'fab fa-gitlab', 'fab fa-gitter', 'fas fa-glass-martini', 'fas fa-glass-martini-alt', 'fas fa-glasses', 'fab fa-glide', 'fab fa-glide-g', 'fas fa-globe', 'fas fa-globe-africa', 'fas fa-globe-americas', 'fas fa-globe-asia', 'fab fa-gofore', 'fas fa-golf-ball', 'fab fa-goodreads', 'fab fa-goodreads-g', 'fab fa-google', 'fab fa-google-drive', 'fab fa-google-play', 'fab fa-google-plus', 'fab fa-google-plus-g', 'fab fa-google-plus-square', 'fab fa-google-wallet', 'fas fa-gopuram', 'fas fa-graduation-cap', 'fab fa-gratipay', 'fab fa-grav', 'fas fa-greater-than', 'fas fa-greater-than-equal', 'fas fa-grimace', 'far fa-grimace', 'fas fa-grin', 'far fa-grin', 'fas fa-grin-alt', 'far fa-grin-alt', 'fas fa-grin-beam', 'far fa-grin-beam', 'fas fa-grin-beam-sweat', 'far fa-grin-beam-sweat', 'fas fa-grin-hearts', 'far fa-grin-hearts', 'fas fa-grin-squint', 'far fa-grin-squint', 'fas fa-grin-squint-tears', 'far fa-grin-squint-tears', 'fas fa-grin-stars', 'far fa-grin-stars', 'fas fa-grin-tears', 'far fa-grin-tears', 'fas fa-grin-tongue', 'far fa-grin-tongue', 'fas fa-grin-tongue-squint', 'far fa-grin-tongue-squint', 'fas fa-grin-tongue-wink', 'far fa-grin-tongue-wink', 'fas fa-grin-wink', 'far fa-grin-wink', 'fas fa-grip-horizontal', 'fas fa-grip-vertical', 'fab fa-gripfire', 'fab fa-grunt', 'fab fa-gulp', 'fas fa-h-square', 'fab fa-hacker-news', 'fab fa-hacker-news-square', 'fab fa-hackerrank', 'fas fa-hamsa', 'fas fa-hand-holding', 'fas fa-hand-holding-heart', 'fas fa-hand-holding-usd', 'fas fa-hand-lizard', 'far fa-hand-lizard', 'fas fa-hand-paper', 'far fa-hand-paper', 'fas fa-hand-peace', 'far fa-hand-peace', 'fas fa-hand-point-down', 'far fa-hand-point-down', 'fas fa-hand-point-left', 'far fa-hand-point-left', 'fas fa-hand-point-right', 'far fa-hand-point-right', 'fas fa-hand-point-up', 'far fa-hand-point-up', 'fas fa-hand-pointer', 'far fa-hand-pointer', 'fas fa-hand-rock', 'far fa-hand-rock', 'fas fa-hand-scissors', 'far fa-hand-scissors', 'fas fa-hand-spock', 'far fa-hand-spock', 'fas fa-hands', 'fas fa-hands-helping', 'fas fa-handshake', 'far fa-handshake', 'fas fa-hashtag', 'fas fa-haykal', 'fas fa-hdd', 'far fa-hdd', 'fas fa-heading', 'fas fa-headphones', 'fas fa-headphones-alt', 'fas fa-headset', 'fas fa-heart', 'far fa-heart', 'fas fa-heartbeat', 'fas fa-helicopter', 'fas fa-highlighter', 'fab fa-hips', 'fab fa-hire-a-helper', 'fas fa-history', 'fas fa-hockey-puck', 'fas fa-home', 'fab fa-hooli', 'fab fa-hornbill', 'fas fa-hospital', 'far fa-hospital', 'fas fa-hospital-alt', 'fas fa-hospital-symbol', 'fas fa-hot-tub', 'fas fa-hotel', 'fab fa-hotjar', 'fas fa-hourglass', 'far fa-hourglass', 'fas fa-hourglass-end', 'fas fa-hourglass-half', 'fas fa-hourglass-start', 'fab fa-houzz', 'fab fa-html5', 'fab fa-hubspot', 'fas fa-i-cursor', 'fas fa-id-badge', 'far fa-id-badge', 'fas fa-id-card', 'far fa-id-card', 'fas fa-id-card-alt', 'fas fa-image', 'far fa-image', 'fas fa-images', 'far fa-images', 'fab fa-imdb', 'fas fa-inbox', 'fas fa-indent', 'fas fa-industry', 'fas fa-infinity', 'fas fa-info', 'fas fa-info-circle', 'fab fa-instagram', 'fab fa-internet-explorer', 'fab fa-ioxhost', 'fas fa-italic', 'fab fa-itunes', 'fab fa-itunes-note', 'fab fa-java', 'fas fa-jedi', 'fab fa-jedi-order', 'fab fa-jenkins', 'fab fa-joget', 'fas fa-joint', 'fab fa-joomla', 'fas fa-journal-whills', 'fab fa-js', 'fab fa-js-square', 'fab fa-jsfiddle', 'fas fa-kaaba', 'fab fa-kaggle', 'fas fa-key', 'fab fa-keybase', 'fas fa-keyboard', 'far fa-keyboard', 'fab fa-keycdn', 'fas fa-khanda', 'fab fa-kickstarter', 'fab fa-kickstarter-k', 'fas fa-kiss', 'far fa-kiss', 'fas fa-kiss-beam', 'far fa-kiss-beam', 'fas fa-kiss-wink-heart', 'far fa-kiss-wink-heart', 'fas fa-kiwi-bird', 'fab fa-korvue', 'fas fa-landmark', 'fas fa-language', 'fas fa-laptop', 'fas fa-laptop-code', 'fab fa-laravel', 'fab fa-lastfm', 'fab fa-lastfm-square', 'fas fa-laugh', 'far fa-laugh', 'fas fa-laugh-beam', 'far fa-laugh-beam', 'fas fa-laugh-squint', 'far fa-laugh-squint', 'fas fa-laugh-wink', 'far fa-laugh-wink', 'fas fa-layer-group', 'fas fa-leaf', 'fab fa-leanpub', 'fas fa-lemon', 'far fa-lemon', 'fab fa-less', 'fas fa-less-than', 'fas fa-less-than-equal', 'fas fa-level-down-alt', 'fas fa-level-up-alt', 'fas fa-life-ring', 'far fa-life-ring', 'fas fa-lightbulb', 'far fa-lightbulb', 'fab fa-line', 'fas fa-link', 'fab fa-linkedin', 'fab fa-linkedin-in', 'fab fa-linode', 'fab fa-linux', 'fas fa-lira-sign', 'fas fa-list', 'fas fa-list-alt', 'far fa-list-alt', 'fas fa-list-ol', 'fas fa-list-ul', 'fas fa-location-arrow', 'fas fa-lock', 'fas fa-lock-open', 'fas fa-long-arrow-alt-down', 'fas fa-long-arrow-alt-left', 'fas fa-long-arrow-alt-right', 'fas fa-long-arrow-alt-up', 'fas fa-low-vision', 'fas fa-luggage-cart', 'fab fa-lyft', 'fab fa-magento', 'fas fa-magic', 'fas fa-magnet', 'fas fa-mail-bulk', 'fab fa-mailchimp', 'fas fa-male', 'fab fa-mandalorian', 'fas fa-map', 'far fa-map', 'fas fa-map-marked', 'fas fa-map-marked-alt', 'fas fa-map-marker', 'fas fa-map-marker-alt', 'fas fa-map-pin', 'fas fa-map-signs', 'fab fa-markdown', 'fas fa-marker', 'fas fa-mars', 'fas fa-mars-double', 'fas fa-mars-stroke', 'fas fa-mars-stroke-h', 'fas fa-mars-stroke-v', 'fab fa-mastodon', 'fab fa-maxcdn', 'fas fa-medal', 'fab fa-medapps', 'fab fa-medium', 'fab fa-medium-m', 'fas fa-medkit', 'fab fa-medrt', 'fab fa-meetup', 'fab fa-megaport', 'fas fa-meh', 'far fa-meh', 'fas fa-meh-blank', 'far fa-meh-blank', 'fas fa-meh-rolling-eyes', 'far fa-meh-rolling-eyes', 'fas fa-memory', 'fas fa-menorah', 'fas fa-mercury', 'fas fa-microchip', 'fas fa-microphone', 'fas fa-microphone-alt', 'fas fa-microphone-alt-slash', 'fas fa-microphone-slash', 'fas fa-microscope', 'fab fa-microsoft', 'fas fa-minus', 'fas fa-minus-circle', 'fas fa-minus-square', 'far fa-minus-square', 'fab fa-mix', 'fab fa-mixcloud', 'fab fa-mizuni', 'fas fa-mobile', 'fas fa-mobile-alt', 'fab fa-modx', 'fab fa-monero', 'fas fa-money-bill', 'fas fa-money-bill-alt', 'far fa-money-bill-alt', 'fas fa-money-bill-wave', 'fas fa-money-bill-wave-alt', 'fas fa-money-check', 'fas fa-money-check-alt', 'fas fa-monument', 'fas fa-moon', 'far fa-moon', 'fas fa-mortar-pestle', 'fas fa-mosque', 'fas fa-motorcycle', 'fas fa-mouse-pointer', 'fas fa-music', 'fab fa-napster', 'fab fa-neos', 'fas fa-neuter', 'fas fa-newspaper', 'far fa-newspaper', 'fab fa-nimblr', 'fab fa-nintendo-switch', 'fab fa-node', 'fab fa-node-js', 'fas fa-not-equal', 'fas fa-notes-medical', 'fab fa-npm', 'fab fa-ns8', 'fab fa-nutritionix', 'fas fa-object-group', 'far fa-object-group', 'fas fa-object-ungroup', 'far fa-object-ungroup', 'fab fa-odnoklassniki', 'fab fa-odnoklassniki-square', 'fas fa-oil-can', 'fab fa-old-republic', 'fas fa-om', 'fab fa-opencart', 'fab fa-openid', 'fab fa-opera', 'fab fa-optin-monster', 'fab fa-osi', 'fas fa-outdent', 'fab fa-page4', 'fab fa-pagelines', 'fas fa-paint-brush', 'fas fa-paint-roller', 'fas fa-palette', 'fab fa-palfed', 'fas fa-pallet', 'fas fa-paper-plane', 'far fa-paper-plane', 'fas fa-paperclip', 'fas fa-parachute-box', 'fas fa-paragraph', 'fas fa-parking', 'fas fa-passport', 'fas fa-pastafarianism', 'fas fa-paste', 'fab fa-patreon', 'fas fa-pause', 'fas fa-pause-circle', 'far fa-pause-circle', 'fas fa-paw', 'fab fa-paypal', 'fas fa-peace', 'fas fa-pen', 'fas fa-pen-alt', 'fas fa-pen-fancy', 'fas fa-pen-nib', 'fas fa-pen-square', 'fas fa-pencil-alt', 'fas fa-pencil-ruler', 'fas fa-people-carry', 'fas fa-percent', 'fas fa-percentage', 'fab fa-periscope', 'fab fa-phabricator', 'fab fa-phoenix-framework', 'fab fa-phoenix-squadron', 'fas fa-phone', 'fas fa-phone-slash', 'fas fa-phone-square', 'fas fa-phone-volume', 'fab fa-php', 'fab fa-pied-piper', 'fab fa-pied-piper-alt', 'fab fa-pied-piper-hat', 'fab fa-pied-piper-pp', 'fas fa-piggy-bank', 'fas fa-pills', 'fab fa-pinterest', 'fab fa-pinterest-p', 'fab fa-pinterest-square', 'fas fa-place-of-worship', 'fas fa-plane', 'fas fa-plane-arrival', 'fas fa-plane-departure', 'fas fa-play', 'fas fa-play-circle', 'far fa-play-circle', 'fab fa-playstation', 'fas fa-plug', 'fas fa-plus', 'fas fa-plus-circle', 'fas fa-plus-square', 'far fa-plus-square', 'fas fa-podcast', 'fas fa-poll', 'fas fa-poll-h', 'fas fa-poo', 'fas fa-poop', 'fas fa-portrait', 'fas fa-pound-sign', 'fas fa-power-off', 'fas fa-pray', 'fas fa-praying-hands', 'fas fa-prescription', 'fas fa-prescription-bottle', 'fas fa-prescription-bottle-alt', 'fas fa-print', 'fas fa-procedures', 'fab fa-product-hunt', 'fas fa-project-diagram', 'fab fa-pushed', 'fas fa-puzzle-piece', 'fab fa-python', 'fab fa-qq', 'fas fa-qrcode', 'fas fa-question', 'fas fa-question-circle', 'far fa-question-circle', 'fas fa-quidditch', 'fab fa-quinscape', 'fab fa-quora', 'fas fa-quote-left', 'fas fa-quote-right', 'fas fa-quran', 'fab fa-r-project', 'fas fa-random', 'fab fa-ravelry', 'fab fa-react', 'fab fa-readme', 'fab fa-rebel', 'fas fa-receipt', 'fas fa-recycle', 'fab fa-red-river', 'fab fa-reddit', 'fab fa-reddit-alien', 'fab fa-reddit-square', 'fas fa-redo', 'fas fa-redo-alt', 'fas fa-registered', 'far fa-registered', 'fab fa-rendact', 'fab fa-renren', 'fas fa-reply', 'fas fa-reply-all', 'fab fa-replyd', 'fab fa-researchgate', 'fab fa-resolving', 'fas fa-retweet', 'fab fa-rev', 'fas fa-ribbon', 'fas fa-road', 'fas fa-robot', 'fas fa-rocket', 'fab fa-rocketchat', 'fab fa-rockrms', 'fas fa-route', 'fas fa-rss', 'fas fa-rss-square', 'fas fa-ruble-sign', 'fas fa-ruler', 'fas fa-ruler-combined', 'fas fa-ruler-horizontal', 'fas fa-ruler-vertical', 'fas fa-rupee-sign', 'fas fa-sad-cry', 'far fa-sad-cry', 'fas fa-sad-tear', 'far fa-sad-tear', 'fab fa-safari', 'fab fa-sass', 'fas fa-save', 'far fa-save', 'fab fa-schlix', 'fas fa-school', 'fas fa-screwdriver', 'fab fa-scribd', 'fas fa-search', 'fas fa-search-dollar', 'fas fa-search-location', 'fas fa-search-minus', 'fas fa-search-plus', 'fab fa-searchengin', 'fas fa-seedling', 'fab fa-sellcast', 'fab fa-sellsy', 'fas fa-server', 'fab fa-servicestack', 'fas fa-shapes', 'fas fa-share', 'fas fa-share-alt', 'fas fa-share-alt-square', 'fas fa-share-square', 'far fa-share-square', 'fas fa-shekel-sign', 'fas fa-shield-alt', 'fas fa-ship', 'fas fa-shipping-fast', 'fab fa-shirtsinbulk', 'fas fa-shoe-prints', 'fas fa-shopping-bag', 'fas fa-shopping-basket', 'fas fa-shopping-cart', 'fab fa-shopware', 'fas fa-shower', 'fas fa-shuttle-van', 'fas fa-sign', 'fas fa-sign-in-alt', 'fas fa-sign-language', 'fas fa-sign-out-alt', 'fas fa-signal', 'fas fa-signature', 'fab fa-simplybuilt', 'fab fa-sistrix', 'fas fa-sitemap', 'fab fa-sith', 'fas fa-skull', 'fab fa-skyatlas', 'fab fa-skype', 'fab fa-slack', 'fab fa-slack-hash', 'fas fa-sliders-h', 'fab fa-slideshare', 'fas fa-smile', 'far fa-smile', 'fas fa-smile-beam', 'far fa-smile-beam', 'fas fa-smile-wink', 'far fa-smile-wink', 'fas fa-smoking', 'fas fa-smoking-ban', 'fab fa-snapchat', 'fab fa-snapchat-ghost', 'fab fa-snapchat-square', 'fas fa-snowflake', 'far fa-snowflake', 'fas fa-socks', 'fas fa-solar-panel', 'fas fa-sort', 'fas fa-sort-alpha-down', 'fas fa-sort-alpha-up', 'fas fa-sort-amount-down', 'fas fa-sort-amount-up', 'fas fa-sort-down', 'fas fa-sort-numeric-down', 'fas fa-sort-numeric-up', 'fas fa-sort-up', 'fab fa-soundcloud', 'fas fa-spa', 'fas fa-space-shuttle', 'fab fa-speakap', 'fas fa-spinner', 'fas fa-splotch', 'fab fa-spotify', 'fas fa-spray-can', 'fas fa-square', 'far fa-square', 'fas fa-square-full', 'fas fa-square-root-alt', 'fab fa-squarespace', 'fab fa-stack-exchange', 'fab fa-stack-overflow', 'fas fa-stamp', 'fas fa-star', 'far fa-star', 'fas fa-star-and-crescent', 'fas fa-star-half', 'far fa-star-half', 'fas fa-star-half-alt', 'fas fa-star-of-david', 'fas fa-star-of-life', 'fab fa-staylinked', 'fab fa-steam', 'fab fa-steam-square', 'fab fa-steam-symbol', 'fas fa-step-backward', 'fas fa-step-forward', 'fas fa-stethoscope', 'fab fa-sticker-mule', 'fas fa-sticky-note', 'far fa-sticky-note', 'fas fa-stop', 'fas fa-stop-circle', 'far fa-stop-circle', 'fas fa-stopwatch', 'fas fa-store', 'fas fa-store-alt', 'fab fa-strava', 'fas fa-stream', 'fas fa-street-view', 'fas fa-strikethrough', 'fab fa-stripe', 'fab fa-stripe-s', 'fas fa-stroopwafel', 'fab fa-studiovinari', 'fab fa-stumbleupon', 'fab fa-stumbleupon-circle', 'fas fa-subscript', 'fas fa-subway', 'fas fa-suitcase', 'fas fa-suitcase-rolling', 'fas fa-sun', 'far fa-sun', 'fab fa-superpowers', 'fas fa-superscript', 'fab fa-supple', 'fas fa-surprise', 'far fa-surprise', 'fas fa-swatchbook', 'fas fa-swimmer', 'fas fa-swimming-pool', 'fas fa-synagogue', 'fas fa-sync', 'fas fa-sync-alt', 'fas fa-syringe', 'fas fa-table', 'fas fa-table-tennis', 'fas fa-tablet', 'fas fa-tablet-alt', 'fas fa-tablets', 'fas fa-tachometer-alt', 'fas fa-tag', 'fas fa-tags', 'fas fa-tape', 'fas fa-tasks', 'fas fa-taxi', 'fab fa-teamspeak', 'fas fa-teeth', 'fas fa-teeth-open', 'fab fa-telegram', 'fab fa-telegram-plane', 'fab fa-tencent-weibo', 'fas fa-terminal', 'fas fa-text-height', 'fas fa-text-width', 'fas fa-th', 'fas fa-th-large', 'fas fa-th-list', 'fab fa-the-red-yeti', 'fas fa-theater-masks', 'fab fa-themeco', 'fab fa-themeisle', 'fas fa-thermometer', 'fas fa-thermometer-empty', 'fas fa-thermometer-full', 'fas fa-thermometer-half', 'fas fa-thermometer-quarter', 'fas fa-thermometer-three-quarters', 'fas fa-thumbs-down', 'far fa-thumbs-down', 'fas fa-thumbs-up', 'far fa-thumbs-up', 'fas fa-thumbtack', 'fas fa-ticket-alt', 'fas fa-times', 'fas fa-times-circle', 'far fa-times-circle', 'fas fa-tint', 'fas fa-tint-slash', 'fas fa-tired', 'far fa-tired', 'fas fa-toggle-off', 'fas fa-toggle-on', 'fas fa-toolbox', 'fas fa-tooth', 'fas fa-torah', 'fas fa-torii-gate', 'fab fa-trade-federation', 'fas fa-trademark', 'fas fa-traffic-light', 'fas fa-train', 'fas fa-transgender', 'fas fa-transgender-alt', 'fas fa-trash', 'fas fa-trash-alt', 'far fa-trash-alt', 'fas fa-tree', 'fab fa-trello', 'fab fa-tripadvisor', 'fas fa-trophy', 'fas fa-truck', 'fas fa-truck-loading', 'fas fa-truck-monster', 'fas fa-truck-moving', 'fas fa-truck-pickup', 'fas fa-tshirt', 'fas fa-tty', 'fab fa-tumblr', 'fab fa-tumblr-square', 'fas fa-tv', 'fab fa-twitch', 'fab fa-twitter', 'fab fa-twitter-square', 'fab fa-typo3', 'fab fa-uber', 'fab fa-uikit', 'fas fa-umbrella', 'fas fa-umbrella-beach', 'fas fa-underline', 'fas fa-undo', 'fas fa-undo-alt', 'fab fa-uniregistry', 'fas fa-universal-access', 'fas fa-university', 'fas fa-unlink', 'fas fa-unlock', 'fas fa-unlock-alt', 'fab fa-untappd', 'fas fa-upload', 'fab fa-usb', 'fas fa-user', 'far fa-user', 'fas fa-user-alt', 'fas fa-user-alt-slash', 'fas fa-user-astronaut', 'fas fa-user-check', 'fas fa-user-circle', 'far fa-user-circle', 'fas fa-user-clock', 'fas fa-user-cog', 'fas fa-user-edit', 'fas fa-user-friends', 'fas fa-user-graduate', 'fas fa-user-lock', 'fas fa-user-md', 'fas fa-user-minus', 'fas fa-user-ninja', 'fas fa-user-plus', 'fas fa-user-secret', 'fas fa-user-shield', 'fas fa-user-slash', 'fas fa-user-tag', 'fas fa-user-tie', 'fas fa-user-times', 'fas fa-users', 'fas fa-users-cog', 'fab fa-ussunnah', 'fas fa-utensil-spoon', 'fas fa-utensils', 'fab fa-vaadin', 'fas fa-vector-square', 'fas fa-venus', 'fas fa-venus-double', 'fas fa-venus-mars', 'fab fa-viacoin', 'fab fa-viadeo', 'fab fa-viadeo-square', 'fas fa-vial', 'fas fa-vials', 'fab fa-viber', 'fas fa-video', 'fas fa-video-slash', 'fas fa-vihara', 'fab fa-vimeo', 'fab fa-vimeo-square', 'fab fa-vimeo-v', 'fab fa-vine', 'fab fa-vk', 'fab fa-vnv', 'fas fa-volleyball-ball', 'fas fa-volume-down', 'fas fa-volume-off', 'fas fa-volume-up', 'fab fa-vuejs', 'fas fa-walking', 'fas fa-wallet', 'fas fa-warehouse', 'fab fa-weebly', 'fab fa-weibo', 'fas fa-weight', 'fas fa-weight-hanging', 'fab fa-weixin', 'fab fa-whatsapp', 'fab fa-whatsapp-square', 'fas fa-wheelchair', 'fab fa-whmcs', 'fas fa-wifi', 'fab fa-wikipedia-w', 'fas fa-window-close', 'far fa-window-close', 'fas fa-window-maximize', 'far fa-window-maximize', 'fas fa-window-minimize', 'far fa-window-minimize', 'fas fa-window-restore', 'far fa-window-restore', 'fab fa-windows', 'fas fa-wine-glass', 'fas fa-wine-glass-alt', 'fab fa-wix', 'fab fa-wolf-pack-battalion', 'fas fa-won-sign', 'fab fa-wordpress', 'fab fa-wordpress-simple', 'fab fa-wpbeginner', 'fab fa-wpexplorer', 'fab fa-wpforms', 'fas fa-wrench', 'fas fa-x-ray', 'fab fa-xbox', 'fab fa-xing', 'fab fa-xing-square', 'fab fa-y-combinator', 'fab fa-yahoo', 'fab fa-yandex', 'fab fa-yandex-international', 'fab fa-yelp', 'fas fa-yen-sign', 'fas fa-yin-yang', 'fab fa-yoast', 'fab fa-youtube', 'fab fa-youtube-square', 'fab fa-zhihu' ] }, { version: '5.3.1_pro', icons: [ 'empty', 'fas fa-abacus', 'far fa-abacus', 'fal fa-abacus', 'far fa-ad', 'fal fa-ad', 'fal fa-address-book', 'fal fa-address-card', 'far fa-adjust', 'fal fa-adjust', 'far fa-air-freshener', 'fal fa-air-freshener', 'fas fa-alarm-clock', 'far fa-alarm-clock', 'fal fa-alarm-clock', 'far fa-align-center', 'fal fa-align-center', 'far fa-align-justify', 'fal fa-align-justify', 'far fa-align-left', 'fal fa-align-left', 'far fa-align-right', 'fal fa-align-right', 'far fa-allergies', 'fal fa-allergies', 'far fa-ambulance', 'fal fa-ambulance', 'far fa-american-sign-language-interpreting', 'fal fa-american-sign-language-interpreting', 'fas fa-analytics', 'far fa-analytics', 'fal fa-analytics', 'far fa-anchor', 'fal fa-anchor', 'far fa-angle-double-down', 'fal fa-angle-double-down', 'far fa-angle-double-left', 'fal fa-angle-double-left', 'far fa-angle-double-right', 'fal fa-angle-double-right', 'far fa-angle-double-up', 'fal fa-angle-double-up', 'far fa-angle-down', 'fal fa-angle-down', 'far fa-angle-left', 'fal fa-angle-left', 'far fa-angle-right', 'fal fa-angle-right', 'far fa-angle-up', 'fal fa-angle-up', 'fal fa-angry', 'far fa-ankh', 'fal fa-ankh', 'far fa-apple-alt', 'fal fa-apple-alt', 'far fa-archive', 'fal fa-archive', 'far fa-archway', 'fal fa-archway', 'fal fa-arrow-alt-circle-down', 'fal fa-arrow-alt-circle-left', 'fal fa-arrow-alt-circle-right', 'fal fa-arrow-alt-circle-up', 'fas fa-arrow-alt-down', 'far fa-arrow-alt-down', 'fal fa-arrow-alt-down', 'fas fa-arrow-alt-from-bottom', 'far fa-arrow-alt-from-bottom', 'fal fa-arrow-alt-from-bottom', 'fas fa-arrow-alt-from-left', 'far fa-arrow-alt-from-left', 'fal fa-arrow-alt-from-left', 'fas fa-arrow-alt-from-right', 'far fa-arrow-alt-from-right', 'fal fa-arrow-alt-from-right', 'fas fa-arrow-alt-from-top', 'far fa-arrow-alt-from-top', 'fal fa-arrow-alt-from-top', 'fas fa-arrow-alt-left', 'far fa-arrow-alt-left', 'fal fa-arrow-alt-left', 'fas fa-arrow-alt-right', 'far fa-arrow-alt-right', 'fal fa-arrow-alt-right', 'fas fa-arrow-alt-square-down', 'far fa-arrow-alt-square-down', 'fal fa-arrow-alt-square-down', 'fas fa-arrow-alt-square-left', 'far fa-arrow-alt-square-left', 'fal fa-arrow-alt-square-left', 'fas fa-arrow-alt-square-right', 'far fa-arrow-alt-square-right', 'fal fa-arrow-alt-square-right', 'fas fa-arrow-alt-square-up', 'far fa-arrow-alt-square-up', 'fal fa-arrow-alt-square-up', 'fas fa-arrow-alt-to-bottom', 'far fa-arrow-alt-to-bottom', 'fal fa-arrow-alt-to-bottom', 'fas fa-arrow-alt-to-left', 'far fa-arrow-alt-to-left', 'fal fa-arrow-alt-to-left', 'fas fa-arrow-alt-to-right', 'far fa-arrow-alt-to-right', 'fal fa-arrow-alt-to-right', 'fas fa-arrow-alt-to-top', 'far fa-arrow-alt-to-top', 'fal fa-arrow-alt-to-top', 'fas fa-arrow-alt-up', 'far fa-arrow-alt-up', 'fal fa-arrow-alt-up', 'far fa-arrow-circle-down', 'fal fa-arrow-circle-down', 'far fa-arrow-circle-left', 'fal fa-arrow-circle-left', 'far fa-arrow-circle-right', 'fal fa-arrow-circle-right', 'far fa-arrow-circle-up', 'fal fa-arrow-circle-up', 'far fa-arrow-down', 'fal fa-arrow-down', 'fas fa-arrow-from-bottom', 'far fa-arrow-from-bottom', 'fal fa-arrow-from-bottom', 'fas fa-arrow-from-left', 'far fa-arrow-from-left', 'fal fa-arrow-from-left', 'fas fa-arrow-from-right', 'far fa-arrow-from-right', 'fal fa-arrow-from-right', 'fas fa-arrow-from-top', 'far fa-arrow-from-top', 'fal fa-arrow-from-top', 'far fa-arrow-left', 'fal fa-arrow-left', 'far fa-arrow-right', 'fal fa-arrow-right', 'fas fa-arrow-square-down', 'far fa-arrow-square-down', 'fal fa-arrow-square-down', 'fas fa-arrow-square-left', 'far fa-arrow-square-left', 'fal fa-arrow-square-left', 'fas fa-arrow-square-right', 'far fa-arrow-square-right', 'fal fa-arrow-square-right', 'fas fa-arrow-square-up', 'far fa-arrow-square-up', 'fal fa-arrow-square-up', 'fas fa-arrow-to-bottom', 'far fa-arrow-to-bottom', 'fal fa-arrow-to-bottom', 'fas fa-arrow-to-left', 'far fa-arrow-to-left', 'fal fa-arrow-to-left', 'fas fa-arrow-to-right', 'far fa-arrow-to-right', 'fal fa-arrow-to-right', 'fas fa-arrow-to-top', 'far fa-arrow-to-top', 'fal fa-arrow-to-top', 'far fa-arrow-up', 'fal fa-arrow-up', 'fas fa-arrows', 'far fa-arrows', 'fal fa-arrows', 'far fa-arrows-alt', 'fal fa-arrows-alt', 'far fa-arrows-alt-h', 'fal fa-arrows-alt-h', 'far fa-arrows-alt-v', 'fal fa-arrows-alt-v', 'fas fa-arrows-h', 'far fa-arrows-h', 'fal fa-arrows-h', 'fas fa-arrows-v', 'far fa-arrows-v', 'fal fa-arrows-v', 'far fa-assistive-listening-systems', 'fal fa-assistive-listening-systems', 'far fa-asterisk', 'fal fa-asterisk', 'far fa-at', 'fal fa-at', 'far fa-atlas', 'fal fa-atlas', 'far fa-atom', 'fal fa-atom', 'fas fa-atom-alt', 'far fa-atom-alt', 'fal fa-atom-alt', 'far fa-audio-description', 'fal fa-audio-description', 'far fa-award', 'fal fa-award', 'fas fa-backpack', 'far fa-backpack', 'fal fa-backpack', 'far fa-backspace', 'fal fa-backspace', 'far fa-backward', 'fal fa-backward', 'fas fa-badge', 'far fa-badge', 'fal fa-badge', 'fas fa-badge-check', 'far fa-badge-check', 'fal fa-badge-check', 'fas fa-badge-dollar', 'far fa-badge-dollar', 'fal fa-badge-dollar', 'fas fa-badge-percent', 'far fa-badge-percent', 'fal fa-badge-percent', 'far fa-balance-scale', 'fal fa-balance-scale', 'fas fa-balance-scale-left', 'far fa-balance-scale-left', 'fal fa-balance-scale-left', 'fas fa-balance-scale-right', 'far fa-balance-scale-right', 'fal fa-balance-scale-right', 'far fa-ban', 'fal fa-ban', 'far fa-band-aid', 'fal fa-band-aid', 'far fa-barcode', 'fal fa-barcode', 'fas fa-barcode-alt', 'far fa-barcode-alt', 'fal fa-barcode-alt', 'fas fa-barcode-read', 'far fa-barcode-read', 'fal fa-barcode-read', 'fas fa-barcode-scan', 'far fa-barcode-scan', 'fal fa-barcode-scan', 'far fa-bars', 'fal fa-bars', 'fas fa-baseball', 'far fa-baseball', 'fal fa-baseball', 'far fa-baseball-ball', 'fal fa-baseball-ball', 'far fa-basketball-ball', 'fal fa-basketball-ball', 'fas fa-basketball-hoop', 'far fa-basketball-hoop', 'fal fa-basketball-hoop', 'far fa-bath', 'fal fa-bath', 'fas fa-battery-bolt', 'far fa-battery-bolt', 'fal fa-battery-bolt', 'far fa-battery-empty', 'fal fa-battery-empty', 'far fa-battery-full', 'fal fa-battery-full', 'far fa-battery-half', 'fal fa-battery-half', 'far fa-battery-quarter', 'fal fa-battery-quarter', 'fas fa-battery-slash', 'far fa-battery-slash', 'fal fa-battery-slash', 'far fa-battery-three-quarters', 'fal fa-battery-three-quarters', 'far fa-bed', 'fal fa-bed', 'far fa-beer', 'fal fa-beer', 'fal fa-bell', 'fas fa-bell-school', 'far fa-bell-school', 'fal fa-bell-school', 'fas fa-bell-school-slash', 'far fa-bell-school-slash', 'fal fa-bell-school-slash', 'fal fa-bell-slash', 'far fa-bezier-curve', 'fal fa-bezier-curve', 'far fa-bible', 'fal fa-bible', 'far fa-bicycle', 'fal fa-bicycle', 'far fa-binoculars', 'fal fa-binoculars', 'far fa-birthday-cake', 'fal fa-birthday-cake', 'fas fa-blanket', 'far fa-blanket', 'fal fa-blanket', 'far fa-blender', 'fal fa-blender', 'far fa-blind', 'fal fa-blind', 'far fa-bold', 'fal fa-bold', 'far fa-bolt', 'fal fa-bolt', 'far fa-bomb', 'fal fa-bomb', 'far fa-bone', 'fal fa-bone', 'fas fa-bone-break', 'far fa-bone-break', 'fal fa-bone-break', 'far fa-bong', 'fal fa-bong', 'far fa-book', 'fal fa-book', 'fas fa-book-alt', 'far fa-book-alt', 'fal fa-book-alt', 'fas fa-book-heart', 'far fa-book-heart', 'fal fa-book-heart', 'far fa-book-open', 'fal fa-book-open', 'far fa-book-reader', 'fal fa-book-reader', 'fal fa-bookmark', 'fas fa-books', 'far fa-books', 'fal fa-books', 'far fa-bowling-ball', 'fal fa-bowling-ball', 'fas fa-bowling-pins', 'far fa-bowling-pins', 'fal fa-bowling-pins', 'far fa-box', 'fal fa-box', 'fas fa-box-alt', 'far fa-box-alt', 'fal fa-box-alt', 'fas fa-box-check', 'far fa-box-check', 'fal fa-box-check', 'fas fa-box-fragile', 'far fa-box-fragile', 'fal fa-box-fragile', 'fas fa-box-full', 'far fa-box-full', 'fal fa-box-full', 'fas fa-box-heart', 'far fa-box-heart', 'fal fa-box-heart', 'far fa-box-open', 'fal fa-box-open', 'fas fa-box-up', 'far fa-box-up', 'fal fa-box-up', 'fas fa-box-usd', 'far fa-box-usd', 'fal fa-box-usd', 'far fa-boxes', 'fal fa-boxes', 'fas fa-boxes-alt', 'far fa-boxes-alt', 'fal fa-boxes-alt', 'fas fa-boxing-glove', 'far fa-boxing-glove', 'fal fa-boxing-glove', 'far fa-braille', 'fal fa-braille', 'far fa-brain', 'fal fa-brain', 'far fa-briefcase', 'fal fa-briefcase', 'far fa-briefcase-medical', 'fal fa-briefcase-medical', 'far fa-broadcast-tower', 'fal fa-broadcast-tower', 'far fa-broom', 'fal fa-broom', 'fas fa-browser', 'far fa-browser', 'fal fa-browser', 'far fa-brush', 'fal fa-brush', 'far fa-bug', 'fal fa-bug', 'fal fa-building', 'far fa-bullhorn', 'fal fa-bullhorn', 'far fa-bullseye', 'fal fa-bullseye', 'fas fa-bullseye-arrow', 'far fa-bullseye-arrow', 'fal fa-bullseye-arrow', 'fas fa-bullseye-pointer', 'far fa-bullseye-pointer', 'fal fa-bullseye-pointer', 'far fa-burn', 'fal fa-burn', 'far fa-bus', 'fal fa-bus', 'far fa-bus-alt', 'fal fa-bus-alt', 'fas fa-bus-school', 'far fa-bus-school', 'fal fa-bus-school', 'far fa-business-time', 'fal fa-business-time', 'fas fa-cabinet-filing', 'far fa-cabinet-filing', 'fal fa-cabinet-filing', 'far fa-calculator', 'fal fa-calculator', 'fas fa-calculator-alt', 'far fa-calculator-alt', 'fal fa-calculator-alt', 'fal fa-calendar', 'fal fa-calendar-alt', 'fal fa-calendar-check', 'fas fa-calendar-edit', 'far fa-calendar-edit', 'fal fa-calendar-edit', 'fas fa-calendar-exclamation', 'far fa-calendar-exclamation', 'fal fa-calendar-exclamation', 'fal fa-calendar-minus', 'fal fa-calendar-plus', 'fal fa-calendar-times', 'far fa-camera', 'fal fa-camera', 'fas fa-camera-alt', 'far fa-camera-alt', 'fal fa-camera-alt', 'far fa-camera-retro', 'fal fa-camera-retro', 'far fa-cannabis', 'fal fa-cannabis', 'far fa-capsules', 'fal fa-capsules', 'far fa-car', 'fal fa-car', 'far fa-car-alt', 'fal fa-car-alt', 'far fa-car-battery', 'fal fa-car-battery', 'fas fa-car-bump', 'far fa-car-bump', 'fal fa-car-bump', 'far fa-car-crash', 'fal fa-car-crash', 'fas fa-car-garage', 'far fa-car-garage', 'fal fa-car-garage', 'fas fa-car-mechanic', 'far fa-car-mechanic', 'fal fa-car-mechanic', 'far fa-car-side', 'fal fa-car-side', 'fas fa-car-tilt', 'far fa-car-tilt', 'fal fa-car-tilt', 'fas fa-car-wash', 'far fa-car-wash', 'fal fa-car-wash', 'fas fa-caret-circle-down', 'far fa-caret-circle-down', 'fal fa-caret-circle-down', 'fas fa-caret-circle-left', 'far fa-caret-circle-left', 'fal fa-caret-circle-left', 'fas fa-caret-circle-right', 'far fa-caret-circle-right', 'fal fa-caret-circle-right', 'fas fa-caret-circle-up', 'far fa-caret-circle-up', 'fal fa-caret-circle-up', 'far fa-caret-down', 'fal fa-caret-down', 'far fa-caret-left', 'fal fa-caret-left', 'far fa-caret-right', 'fal fa-caret-right', 'fal fa-caret-square-down', 'fal fa-caret-square-left', 'fal fa-caret-square-right', 'fal fa-caret-square-up', 'far fa-caret-up', 'fal fa-caret-up', 'far fa-cart-arrow-down', 'fal fa-cart-arrow-down', 'far fa-cart-plus', 'fal fa-cart-plus', 'far fa-certificate', 'fal fa-certificate', 'far fa-chalkboard', 'fal fa-chalkboard', 'far fa-chalkboard-teacher', 'fal fa-chalkboard-teacher', 'far fa-charging-station', 'fal fa-charging-station', 'far fa-chart-area', 'fal fa-chart-area', 'fal fa-chart-bar', 'far fa-chart-line', 'fal fa-chart-line', 'fas fa-chart-line-down', 'far fa-chart-line-down', 'fal fa-chart-line-down', 'far fa-chart-pie', 'fal fa-chart-pie', 'fas fa-chart-pie-alt', 'far fa-chart-pie-alt', 'fal fa-chart-pie-alt', 'far fa-check', 'fal fa-check', 'fal fa-check-circle', 'far fa-check-double', 'fal fa-check-double', 'fal fa-check-square', 'far fa-chess', 'fal fa-chess', 'far fa-chess-bishop', 'fal fa-chess-bishop', 'fas fa-chess-bishop-alt', 'far fa-chess-bishop-alt', 'fal fa-chess-bishop-alt', 'far fa-chess-board', 'fal fa-chess-board', 'fas fa-chess-clock', 'far fa-chess-clock', 'fal fa-chess-clock', 'fas fa-chess-clock-alt', 'far fa-chess-clock-alt', 'fal fa-chess-clock-alt', 'far fa-chess-king', 'fal fa-chess-king', 'fas fa-chess-king-alt', 'far fa-chess-king-alt', 'fal fa-chess-king-alt', 'far fa-chess-knight', 'fal fa-chess-knight', 'fas fa-chess-knight-alt', 'far fa-chess-knight-alt', 'fal fa-chess-knight-alt', 'far fa-chess-pawn', 'fal fa-chess-pawn', 'fas fa-chess-pawn-alt', 'far fa-chess-pawn-alt', 'fal fa-chess-pawn-alt', 'far fa-chess-queen', 'fal fa-chess-queen', 'fas fa-chess-queen-alt', 'far fa-chess-queen-alt', 'fal fa-chess-queen-alt', 'far fa-chess-rook', 'fal fa-chess-rook', 'fas fa-chess-rook-alt', 'far fa-chess-rook-alt', 'fal fa-chess-rook-alt', 'far fa-chevron-circle-down', 'fal fa-chevron-circle-down', 'far fa-chevron-circle-left', 'fal fa-chevron-circle-left', 'far fa-chevron-circle-right', 'fal fa-chevron-circle-right', 'far fa-chevron-circle-up', 'fal fa-chevron-circle-up', 'fas fa-chevron-double-down', 'far fa-chevron-double-down', 'fal fa-chevron-double-down', 'fas fa-chevron-double-left', 'far fa-chevron-double-left', 'fal fa-chevron-double-left', 'fas fa-chevron-double-right', 'far fa-chevron-double-right', 'fal fa-chevron-double-right', 'fas fa-chevron-double-up', 'far fa-chevron-double-up', 'fal fa-chevron-double-up', 'far fa-chevron-down', 'fal fa-chevron-down', 'far fa-chevron-left', 'fal fa-chevron-left', 'far fa-chevron-right', 'fal fa-chevron-right', 'fas fa-chevron-square-down', 'far fa-chevron-square-down', 'fal fa-chevron-square-down', 'fas fa-chevron-square-left', 'far fa-chevron-square-left', 'fal fa-chevron-square-left', 'fas fa-chevron-square-right', 'far fa-chevron-square-right', 'fal fa-chevron-square-right', 'fas fa-chevron-square-up', 'far fa-chevron-square-up', 'fal fa-chevron-square-up', 'far fa-chevron-up', 'fal fa-chevron-up', 'far fa-child', 'fal fa-child', 'far fa-church', 'fal fa-church', 'fal fa-circle', 'far fa-circle-notch', 'fal fa-circle-notch', 'far fa-city', 'fal fa-city', 'fal fa-clipboard', 'far fa-clipboard-check', 'fal fa-clipboard-check', 'far fa-clipboard-list', 'fal fa-clipboard-list', 'fas fa-clipboard-prescription', 'far fa-clipboard-prescription', 'fal fa-clipboard-prescription', 'fal fa-clock', 'fal fa-clone', 'fal fa-closed-captioning', 'far fa-cloud', 'fal fa-cloud', 'fas fa-cloud-download', 'far fa-cloud-download', 'fal fa-cloud-download', 'far fa-cloud-download-alt', 'fal fa-cloud-download-alt', 'fas fa-cloud-upload', 'far fa-cloud-upload', 'fal fa-cloud-upload', 'far fa-cloud-upload-alt', 'fal fa-cloud-upload-alt', 'fas fa-club', 'far fa-club', 'fal fa-club', 'far fa-cocktail', 'fal fa-cocktail', 'far fa-code', 'fal fa-code', 'far fa-code-branch', 'fal fa-code-branch', 'fas fa-code-commit', 'far fa-code-commit', 'fal fa-code-commit', 'fas fa-code-merge', 'far fa-code-merge', 'fal fa-code-merge', 'far fa-coffee', 'fal fa-coffee', 'far fa-cog', 'fal fa-cog', 'far fa-cogs', 'fal fa-cogs', 'far fa-coins', 'fal fa-coins', 'far fa-columns', 'fal fa-columns', 'fal fa-comment', 'fal fa-comment-alt', 'fas fa-comment-alt-check', 'far fa-comment-alt-check', 'fal fa-comment-alt-check', 'fas fa-comment-alt-dollar', 'far fa-comment-alt-dollar', 'fal fa-comment-alt-dollar', 'fas fa-comment-alt-dots', 'far fa-comment-alt-dots', 'fal fa-comment-alt-dots', 'fas fa-comment-alt-edit', 'far fa-comment-alt-edit', 'fal fa-comment-alt-edit', 'fas fa-comment-alt-exclamation', 'far fa-comment-alt-exclamation', 'fal fa-comment-alt-exclamation', 'fas fa-comment-alt-lines', 'far fa-comment-alt-lines', 'fal fa-comment-alt-lines', 'fas fa-comment-alt-minus', 'far fa-comment-alt-minus', 'fal fa-comment-alt-minus', 'fas fa-comment-alt-plus', 'far fa-comment-alt-plus', 'fal fa-comment-alt-plus', 'fas fa-comment-alt-slash', 'far fa-comment-alt-slash', 'fal fa-comment-alt-slash', 'fas fa-comment-alt-smile', 'far fa-comment-alt-smile', 'fal fa-comment-alt-smile', 'fas fa-comment-alt-times', 'far fa-comment-alt-times', 'fal fa-comment-alt-times', 'fas fa-comment-check', 'far fa-comment-check', 'fal fa-comment-check', 'far fa-comment-dollar', 'fal fa-comment-dollar', 'fal fa-comment-dots', 'fas fa-comment-edit', 'far fa-comment-edit', 'fal fa-comment-edit', 'fas fa-comment-exclamation', 'far fa-comment-exclamation', 'fal fa-comment-exclamation', 'fas fa-comment-lines', 'far fa-comment-lines', 'fal fa-comment-lines', 'fas fa-comment-minus', 'far fa-comment-minus', 'fal fa-comment-minus', 'fas fa-comment-plus', 'far fa-comment-plus', 'fal fa-comment-plus', 'far fa-comment-slash', 'fal fa-comment-slash', 'fas fa-comment-smile', 'far fa-comment-smile', 'fal fa-comment-smile', 'fas fa-comment-times', 'far fa-comment-times', 'fal fa-comment-times', 'fal fa-comments', 'fas fa-comments-alt', 'far fa-comments-alt', 'fal fa-comments-alt', 'fas fa-comments-alt-dollar', 'far fa-comments-alt-dollar', 'fal fa-comments-alt-dollar', 'far fa-comments-dollar', 'fal fa-comments-dollar', 'far fa-compact-disc', 'fal fa-compact-disc', 'fal fa-compass', 'fas fa-compass-slash', 'far fa-compass-slash', 'fal fa-compass-slash', 'far fa-compress', 'fal fa-compress', 'fas fa-compress-alt', 'far fa-compress-alt', 'fal fa-compress-alt', 'fas fa-compress-wide', 'far fa-compress-wide', 'fal fa-compress-wide', 'far fa-concierge-bell', 'fal fa-concierge-bell', 'fas fa-container-storage', 'far fa-container-storage', 'fal fa-container-storage', 'fas fa-conveyor-belt', 'far fa-conveyor-belt', 'fal fa-conveyor-belt', 'fas fa-conveyor-belt-alt', 'far fa-conveyor-belt-alt', 'fal fa-conveyor-belt-alt', 'far fa-cookie', 'fal fa-cookie', 'far fa-cookie-bite', 'fal fa-cookie-bite', 'fal fa-copy', 'fal fa-copyright', 'far fa-couch', 'fal fa-couch', 'fab fa-creative-commons-zero', 'fal fa-credit-card', 'fas fa-credit-card-blank', 'far fa-credit-card-blank', 'fal fa-credit-card-blank', 'fas fa-credit-card-front', 'far fa-credit-card-front', 'fal fa-credit-card-front', 'fas fa-cricket', 'far fa-cricket', 'fal fa-cricket', 'far fa-crop', 'fal fa-crop', 'far fa-crop-alt', 'fal fa-crop-alt', 'far fa-cross', 'fal fa-cross', 'far fa-crosshairs', 'fal fa-crosshairs', 'far fa-crow', 'fal fa-crow', 'far fa-crown', 'fal fa-crown', 'far fa-cube', 'fal fa-cube', 'far fa-cubes', 'fal fa-cubes', 'fas fa-curling', 'far fa-curling', 'fal fa-curling', 'far fa-cut', 'fal fa-cut', 'far fa-database', 'fal fa-database', 'far fa-deaf', 'fal fa-deaf', 'far fa-desktop', 'fal fa-desktop', 'fas fa-desktop-alt', 'far fa-desktop-alt', 'fal fa-desktop-alt', 'far fa-dharmachakra', 'fal fa-dharmachakra', 'far fa-diagnoses', 'fal fa-diagnoses', 'fas fa-diamond', 'far fa-diamond', 'fal fa-diamond', 'far fa-dice', 'fal fa-dice', 'far fa-dice-five', 'fal fa-dice-five', 'far fa-dice-four', 'fal fa-dice-four', 'far fa-dice-one', 'fal fa-dice-one', 'far fa-dice-six', 'fal fa-dice-six', 'far fa-dice-three', 'fal fa-dice-three', 'far fa-dice-two', 'fal fa-dice-two', 'far fa-digital-tachograph', 'fal fa-digital-tachograph', 'fas fa-diploma', 'far fa-diploma', 'fal fa-diploma', 'far fa-directions', 'fal fa-directions', 'far fa-divide', 'fal fa-divide', 'fal fa-dizzy', 'far fa-dna', 'fal fa-dna', 'fas fa-do-not-enter', 'far fa-do-not-enter', 'fal fa-do-not-enter', 'far fa-dollar-sign', 'fal fa-dollar-sign', 'far fa-dolly', 'fal fa-dolly', 'fas fa-dolly-empty', 'far fa-dolly-empty', 'fal fa-dolly-empty', 'far fa-dolly-flatbed', 'fal fa-dolly-flatbed', 'fas fa-dolly-flatbed-alt', 'far fa-dolly-flatbed-alt', 'fal fa-dolly-flatbed-alt', 'fas fa-dolly-flatbed-empty', 'far fa-dolly-flatbed-empty', 'fal fa-dolly-flatbed-empty', 'far fa-donate', 'fal fa-donate', 'far fa-door-closed', 'fal fa-door-closed', 'far fa-door-open', 'fal fa-door-open', 'fal fa-dot-circle', 'far fa-dove', 'fal fa-dove', 'far fa-download', 'fal fa-download', 'far fa-drafting-compass', 'fal fa-drafting-compass', 'fas fa-draw-circle', 'far fa-draw-circle', 'fal fa-draw-circle', 'far fa-draw-polygon', 'fal fa-draw-polygon', 'fas fa-draw-square', 'far fa-draw-square', 'fal fa-draw-square', 'far fa-drum', 'fal fa-drum', 'far fa-drum-steelpan', 'fal fa-drum-steelpan', 'far fa-dumbbell', 'fal fa-dumbbell', 'fas fa-ear', 'far fa-ear', 'fal fa-ear', 'fal fa-edit', 'far fa-eject', 'fal fa-eject', 'far fa-ellipsis-h', 'fal fa-ellipsis-h', 'fas fa-ellipsis-h-alt', 'far fa-ellipsis-h-alt', 'fal fa-ellipsis-h-alt', 'far fa-ellipsis-v', 'fal fa-ellipsis-v', 'fas fa-ellipsis-v-alt', 'far fa-ellipsis-v-alt', 'fal fa-ellipsis-v-alt', 'fas fa-empty-set', 'far fa-empty-set', 'fal fa-empty-set', 'fas fa-engine-warning', 'far fa-engine-warning', 'fal fa-engine-warning', 'fal fa-envelope', 'fal fa-envelope-open', 'fas fa-envelope-open-dollar', 'far fa-envelope-open-dollar', 'fal fa-envelope-open-dollar', 'far fa-envelope-open-text', 'fal fa-envelope-open-text', 'far fa-envelope-square', 'fal fa-envelope-square', 'far fa-equals', 'fal fa-equals', 'far fa-eraser', 'fal fa-eraser', 'far fa-euro-sign', 'fal fa-euro-sign', 'fas fa-exchange', 'far fa-exchange', 'fal fa-exchange', 'far fa-exchange-alt', 'fal fa-exchange-alt', 'far fa-exclamation', 'fal fa-exclamation', 'far fa-exclamation-circle', 'fal fa-exclamation-circle', 'fas fa-exclamation-square', 'far fa-exclamation-square', 'fal fa-exclamation-square', 'far fa-exclamation-triangle', 'fal fa-exclamation-triangle', 'far fa-expand', 'fal fa-expand', 'fas fa-expand-alt', 'far fa-expand-alt', 'fal fa-expand-alt', 'fas fa-expand-arrows', 'far fa-expand-arrows', 'fal fa-expand-arrows', 'far fa-expand-arrows-alt', 'fal fa-expand-arrows-alt', 'fas fa-expand-wide', 'far fa-expand-wide', 'fal fa-expand-wide', 'fas fa-external-link', 'far fa-external-link', 'fal fa-external-link', 'far fa-external-link-alt', 'fal fa-external-link-alt', 'fas fa-external-link-square', 'far fa-external-link-square', 'fal fa-external-link-square', 'far fa-external-link-square-alt', 'fal fa-external-link-square-alt', 'fal fa-eye', 'far fa-eye-dropper', 'fal fa-eye-dropper', 'fal fa-eye-slash', 'far fa-fast-backward', 'fal fa-fast-backward', 'far fa-fast-forward', 'fal fa-fast-forward', 'far fa-fax', 'fal fa-fax', 'far fa-feather', 'fal fa-feather', 'far fa-feather-alt', 'fal fa-feather-alt', 'far fa-female', 'fal fa-female', 'fas fa-field-hockey', 'far fa-field-hockey', 'fal fa-field-hockey', 'far fa-fighter-jet', 'fal fa-fighter-jet', 'fal fa-file', 'fal fa-file-alt', 'fal fa-file-archive', 'fal fa-file-audio', 'fas fa-file-certificate', 'far fa-file-certificate', 'fal fa-file-certificate', 'fas fa-file-chart-line', 'far fa-file-chart-line', 'fal fa-file-chart-line', 'fas fa-file-chart-pie', 'far fa-file-chart-pie', 'fal fa-file-chart-pie', 'fas fa-file-check', 'far fa-file-check', 'fal fa-file-check', 'fal fa-file-code', 'far fa-file-contract', 'fal fa-file-contract', 'far fa-file-download', 'fal fa-file-download', 'fas fa-file-edit', 'far fa-file-edit', 'fal fa-file-edit', 'fal fa-file-excel', 'fas fa-file-exclamation', 'far fa-file-exclamation', 'fal fa-file-exclamation', 'far fa-file-export', 'fal fa-file-export', 'fal fa-file-image', 'far fa-file-import', 'fal fa-file-import', 'far fa-file-invoice', 'fal fa-file-invoice', 'far fa-file-invoice-dollar', 'fal fa-file-invoice-dollar', 'far fa-file-medical', 'fal fa-file-medical', 'far fa-file-medical-alt', 'fal fa-file-medical-alt', 'fas fa-file-minus', 'far fa-file-minus', 'fal fa-file-minus', 'fal fa-file-pdf', 'fas fa-file-plus', 'far fa-file-plus', 'fal fa-file-plus', 'fal fa-file-powerpoint', 'far fa-file-prescription', 'fal fa-file-prescription', 'far fa-file-signature', 'fal fa-file-signature', 'fas fa-file-spreadsheet', 'far fa-file-spreadsheet', 'fal fa-file-spreadsheet', 'fas fa-file-times', 'far fa-file-times', 'fal fa-file-times', 'far fa-file-upload', 'fal fa-file-upload', 'fas fa-file-user', 'far fa-file-user', 'fal fa-file-user', 'fal fa-file-video', 'fal fa-file-word', 'far fa-fill', 'fal fa-fill', 'far fa-fill-drip', 'fal fa-fill-drip', 'far fa-film', 'fal fa-film', 'fas fa-film-alt', 'far fa-film-alt', 'fal fa-film-alt', 'far fa-filter', 'fal fa-filter', 'far fa-fingerprint', 'fal fa-fingerprint', 'far fa-fire', 'fal fa-fire', 'far fa-fire-extinguisher', 'fal fa-fire-extinguisher', 'far fa-first-aid', 'fal fa-first-aid', 'far fa-fish', 'fal fa-fish', 'fal fa-flag', 'far fa-flag-checkered', 'fal fa-flag-checkered', 'far fa-flask', 'fal fa-flask', 'fal fa-flushed', 'fal fa-folder', 'far fa-folder-minus', 'fal fa-folder-minus', 'fal fa-folder-open', 'far fa-folder-plus', 'fal fa-folder-plus', 'fas fa-folder-times', 'far fa-folder-times', 'fal fa-folder-times', 'fas fa-folders', 'far fa-folders', 'fal fa-folders', 'far fa-font', 'fal fa-font', 'far fa-football-ball', 'fal fa-football-ball', 'fas fa-football-helmet', 'far fa-football-helmet', 'fal fa-football-helmet', 'fas fa-forklift', 'far fa-forklift', 'fal fa-forklift', 'far fa-forward', 'fal fa-forward', 'fas fa-fragile', 'far fa-fragile', 'fal fa-fragile', 'far fa-frog', 'fal fa-frog', 'fal fa-frown', 'fal fa-frown-open', 'fas fa-function', 'far fa-function', 'fal fa-function', 'far fa-funnel-dollar', 'fal fa-funnel-dollar', 'fal fa-futbol', 'far fa-gamepad', 'fal fa-gamepad', 'far fa-gas-pump', 'fal fa-gas-pump', 'fas fa-gas-pump-slash', 'far fa-gas-pump-slash', 'fal fa-gas-pump-slash', 'far fa-gavel', 'fal fa-gavel', 'fal fa-gem', 'far fa-genderless', 'fal fa-genderless', 'far fa-gift', 'fal fa-gift', 'fas fa-gift-card', 'far fa-gift-card', 'fal fa-gift-card', 'far fa-glass-martini', 'fal fa-glass-martini', 'far fa-glass-martini-alt', 'fal fa-glass-martini-alt', 'far fa-glasses', 'fal fa-glasses', 'fas fa-glasses-alt', 'far fa-glasses-alt', 'fal fa-glasses-alt', 'far fa-globe', 'fal fa-globe', 'far fa-globe-africa', 'fal fa-globe-africa', 'far fa-globe-americas', 'fal fa-globe-americas', 'far fa-globe-asia', 'fal fa-globe-asia', 'fas fa-globe-stand', 'far fa-globe-stand', 'fal fa-globe-stand', 'far fa-golf-ball', 'fal fa-golf-ball', 'fas fa-golf-club', 'far fa-golf-club', 'fal fa-golf-club', 'far fa-gopuram', 'fal fa-gopuram', 'far fa-graduation-cap', 'fal fa-graduation-cap', 'far fa-greater-than', 'fal fa-greater-than', 'far fa-greater-than-equal', 'fal fa-greater-than-equal', 'fal fa-grimace', 'fal fa-grin', 'fal fa-grin-alt', 'fal fa-grin-beam', 'fal fa-grin-beam-sweat', 'fal fa-grin-hearts', 'fal fa-grin-squint', 'fal fa-grin-squint-tears', 'fal fa-grin-stars', 'fal fa-grin-tears', 'fal fa-grin-tongue', 'fal fa-grin-tongue-squint', 'fal fa-grin-tongue-wink', 'fal fa-grin-wink', 'far fa-grip-horizontal', 'fal fa-grip-horizontal', 'far fa-grip-vertical', 'fal fa-grip-vertical', 'far fa-h-square', 'fal fa-h-square', 'fas fa-h1', 'far fa-h1', 'fal fa-h1', 'fas fa-h2', 'far fa-h2', 'fal fa-h2', 'fas fa-h3', 'far fa-h3', 'fal fa-h3', 'far fa-hamsa', 'fal fa-hamsa', 'fas fa-hand-heart', 'far fa-hand-heart', 'fal fa-hand-heart', 'far fa-hand-holding', 'fal fa-hand-holding', 'fas fa-hand-holding-box', 'far fa-hand-holding-box', 'fal fa-hand-holding-box', 'far fa-hand-holding-heart', 'fal fa-hand-holding-heart', 'fas fa-hand-holding-seedling', 'far fa-hand-holding-seedling', 'fal fa-hand-holding-seedling', 'far fa-hand-holding-usd', 'fal fa-hand-holding-usd', 'fas fa-hand-holding-water', 'far fa-hand-holding-water', 'fal fa-hand-holding-water', 'fal fa-hand-lizard', 'fal fa-hand-paper', 'fal fa-hand-peace', 'fal fa-hand-point-down', 'fal fa-hand-point-left', 'fal fa-hand-point-right', 'fal fa-hand-point-up', 'fal fa-hand-pointer', 'fas fa-hand-receiving', 'far fa-hand-receiving', 'fal fa-hand-receiving', 'fal fa-hand-rock', 'fal fa-hand-scissors', 'fal fa-hand-spock', 'far fa-hands', 'fal fa-hands', 'fas fa-hands-heart', 'far fa-hands-heart', 'fal fa-hands-heart', 'far fa-hands-helping', 'fal fa-hands-helping', 'fas fa-hands-usd', 'far fa-hands-usd', 'fal fa-hands-usd', 'fal fa-handshake', 'fas fa-handshake-alt', 'far fa-handshake-alt', 'fal fa-handshake-alt', 'far fa-hashtag', 'fal fa-hashtag', 'far fa-haykal', 'fal fa-haykal', 'fal fa-hdd', 'far fa-heading', 'fal fa-heading', 'far fa-headphones', 'fal fa-headphones', 'far fa-headphones-alt', 'fal fa-headphones-alt', 'far fa-headset', 'fal fa-headset', 'fal fa-heart', 'fas fa-heart-circle', 'far fa-heart-circle', 'fal fa-heart-circle', 'fas fa-heart-rate', 'far fa-heart-rate', 'fal fa-heart-rate', 'fas fa-heart-square', 'far fa-heart-square', 'fal fa-heart-square', 'far fa-heartbeat', 'fal fa-heartbeat', 'far fa-helicopter', 'fal fa-helicopter', 'fas fa-hexagon', 'far fa-hexagon', 'fal fa-hexagon', 'far fa-highlighter', 'fal fa-highlighter', 'far fa-history', 'fal fa-history', 'far fa-hockey-puck', 'fal fa-hockey-puck', 'fas fa-hockey-sticks', 'far fa-hockey-sticks', 'fal fa-hockey-sticks', 'far fa-home', 'fal fa-home', 'fas fa-home-heart', 'far fa-home-heart', 'fal fa-home-heart', 'fal fa-hospital', 'far fa-hospital-alt', 'fal fa-hospital-alt', 'far fa-hospital-symbol', 'fal fa-hospital-symbol', 'far fa-hot-tub', 'fal fa-hot-tub', 'far fa-hotel', 'fal fa-hotel', 'fal fa-hourglass', 'far fa-hourglass-end', 'fal fa-hourglass-end', 'far fa-hourglass-half', 'fal fa-hourglass-half', 'far fa-hourglass-start', 'fal fa-hourglass-start', 'far fa-i-cursor', 'fal fa-i-cursor', 'fal fa-id-badge', 'fal fa-id-card', 'far fa-id-card-alt', 'fal fa-id-card-alt', 'fal fa-image', 'fal fa-images', 'far fa-inbox', 'fal fa-inbox', 'fas fa-inbox-in', 'far fa-inbox-in', 'fal fa-inbox-in', 'fas fa-inbox-out', 'far fa-inbox-out', 'fal fa-inbox-out', 'far fa-indent', 'fal fa-indent', 'far fa-industry', 'fal fa-industry', 'fas fa-industry-alt', 'far fa-industry-alt', 'fal fa-industry-alt', 'far fa-infinity', 'fal fa-infinity', 'far fa-info', 'fal fa-info', 'far fa-info-circle', 'fal fa-info-circle', 'fas fa-info-square', 'far fa-info-square', 'fal fa-info-square', 'fas fa-inhaler', 'far fa-inhaler', 'fal fa-inhaler', 'fas fa-integral', 'far fa-integral', 'fal fa-integral', 'fas fa-intersection', 'far fa-intersection', 'fal fa-intersection', 'fas fa-inventory', 'far fa-inventory', 'fal fa-inventory', 'far fa-italic', 'fal fa-italic', 'fas fa-jack-o-lantern', 'far fa-jack-o-lantern', 'fal fa-jack-o-lantern', 'far fa-jedi', 'fal fa-jedi', 'far fa-joint', 'fal fa-joint', 'far fa-journal-whills', 'fal fa-journal-whills', 'far fa-kaaba', 'fal fa-kaaba', 'far fa-key', 'fal fa-key', 'fal fa-keyboard', 'fas fa-keynote', 'far fa-keynote', 'fal fa-keynote', 'far fa-khanda', 'fal fa-khanda', 'fas fa-kidneys', 'far fa-kidneys', 'fal fa-kidneys', 'fal fa-kiss', 'fal fa-kiss-beam', 'fal fa-kiss-wink-heart', 'far fa-kiwi-bird', 'fal fa-kiwi-bird', 'fas fa-lambda', 'far fa-lambda', 'fal fa-lambda', 'fas fa-lamp', 'far fa-lamp', 'fal fa-lamp', 'far fa-landmark', 'fal fa-landmark', 'far fa-language', 'fal fa-language', 'far fa-laptop', 'fal fa-laptop', 'far fa-laptop-code', 'fal fa-laptop-code', 'fal fa-laugh', 'fal fa-laugh-beam', 'fal fa-laugh-squint', 'fal fa-laugh-wink', 'far fa-layer-group', 'fal fa-layer-group', 'fas fa-layer-minus', 'far fa-layer-minus', 'fal fa-layer-minus', 'fas fa-layer-plus', 'far fa-layer-plus', 'fal fa-layer-plus', 'far fa-leaf', 'fal fa-leaf', 'fas fa-leaf-heart', 'far fa-leaf-heart', 'fal fa-leaf-heart', 'fal fa-lemon', 'far fa-less-than', 'fal fa-less-than', 'far fa-less-than-equal', 'fal fa-less-than-equal', 'fas fa-level-down', 'far fa-level-down', 'fal fa-level-down', 'far fa-level-down-alt', 'fal fa-level-down-alt', 'fas fa-level-up', 'far fa-level-up', 'fal fa-level-up', 'far fa-level-up-alt', 'fal fa-level-up-alt', 'fal fa-life-ring', 'fal fa-lightbulb', 'fas fa-lightbulb-dollar', 'far fa-lightbulb-dollar', 'fal fa-lightbulb-dollar', 'fas fa-lightbulb-exclamation', 'far fa-lightbulb-exclamation', 'fal fa-lightbulb-exclamation', 'fas fa-lightbulb-on', 'far fa-lightbulb-on', 'fal fa-lightbulb-on', 'fas fa-lightbulb-slash', 'far fa-lightbulb-slash', 'fal fa-lightbulb-slash', 'far fa-link', 'fal fa-link', 'fas fa-lips', 'far fa-lips', 'fal fa-lips', 'far fa-lira-sign', 'fal fa-lira-sign', 'far fa-list', 'fal fa-list', 'fal fa-list-alt', 'far fa-list-ol', 'fal fa-list-ol', 'far fa-list-ul', 'fal fa-list-ul', 'fas fa-location', 'far fa-location', 'fal fa-location', 'far fa-location-arrow', 'fal fa-location-arrow', 'fas fa-location-circle', 'far fa-location-circle', 'fal fa-location-circle', 'fas fa-location-slash', 'far fa-location-slash', 'fal fa-location-slash', 'far fa-lock', 'fal fa-lock', 'fas fa-lock-alt', 'far fa-lock-alt', 'fal fa-lock-alt', 'far fa-lock-open', 'fal fa-lock-open', 'fas fa-lock-open-alt', 'far fa-lock-open-alt', 'fal fa-lock-open-alt', 'far fa-long-arrow-alt-down', 'fal fa-long-arrow-alt-down', 'far fa-long-arrow-alt-left', 'fal fa-long-arrow-alt-left', 'far fa-long-arrow-alt-right', 'fal fa-long-arrow-alt-right', 'far fa-long-arrow-alt-up', 'fal fa-long-arrow-alt-up', 'fas fa-long-arrow-down', 'far fa-long-arrow-down', 'fal fa-long-arrow-down', 'fas fa-long-arrow-left', 'far fa-long-arrow-left', 'fal fa-long-arrow-left', 'fas fa-long-arrow-right', 'far fa-long-arrow-right', 'fal fa-long-arrow-right', 'fas fa-long-arrow-up', 'far fa-long-arrow-up', 'fal fa-long-arrow-up', 'fas fa-loveseat', 'far fa-loveseat', 'fal fa-loveseat', 'far fa-low-vision', 'fal fa-low-vision', 'fas fa-luchador', 'far fa-luchador', 'fal fa-luchador', 'far fa-luggage-cart', 'fal fa-luggage-cart', 'fas fa-lungs', 'far fa-lungs', 'fal fa-lungs', 'far fa-magic', 'fal fa-magic', 'far fa-magnet', 'fal fa-magnet', 'far fa-mail-bulk', 'fal fa-mail-bulk', 'far fa-male', 'fal fa-male', 'fal fa-map', 'far fa-map-marked', 'fal fa-map-marked', 'far fa-map-marked-alt', 'fal fa-map-marked-alt', 'far fa-map-marker', 'fal fa-map-marker', 'far fa-map-marker-alt', 'fal fa-map-marker-alt', 'fas fa-map-marker-alt-slash', 'far fa-map-marker-alt-slash', 'fal fa-map-marker-alt-slash', 'fas fa-map-marker-check', 'far fa-map-marker-check', 'fal fa-map-marker-check', 'fas fa-map-marker-edit', 'far fa-map-marker-edit', 'fal fa-map-marker-edit', 'fas fa-map-marker-exclamation', 'far fa-map-marker-exclamation', 'fal fa-map-marker-exclamation', 'fas fa-map-marker-minus', 'far fa-map-marker-minus', 'fal fa-map-marker-minus', 'fas fa-map-marker-plus', 'far fa-map-marker-plus', 'fal fa-map-marker-plus', 'fas fa-map-marker-question', 'far fa-map-marker-question', 'fal fa-map-marker-question', 'fas fa-map-marker-slash', 'far fa-map-marker-slash', 'fal fa-map-marker-slash', 'fas fa-map-marker-smile', 'far fa-map-marker-smile', 'fal fa-map-marker-smile', 'fas fa-map-marker-times', 'far fa-map-marker-times', 'fal fa-map-marker-times', 'far fa-map-pin', 'fal fa-map-pin', 'far fa-map-signs', 'fal fa-map-signs', 'far fa-marker', 'fal fa-marker', 'far fa-mars', 'fal fa-mars', 'far fa-mars-double', 'fal fa-mars-double', 'far fa-mars-stroke', 'fal fa-mars-stroke', 'far fa-mars-stroke-h', 'fal fa-mars-stroke-h', 'far fa-mars-stroke-v', 'fal fa-mars-stroke-v', 'far fa-medal', 'fal fa-medal', 'far fa-medkit', 'fal fa-medkit', 'fas fa-megaphone', 'far fa-megaphone', 'fal fa-megaphone', 'fal fa-meh', 'fal fa-meh-blank', 'fal fa-meh-rolling-eyes', 'far fa-memory', 'fal fa-memory', 'far fa-menorah', 'fal fa-menorah', 'far fa-mercury', 'fal fa-mercury', 'far fa-microchip', 'fal fa-microchip', 'far fa-microphone', 'fal fa-microphone', 'far fa-microphone-alt', 'fal fa-microphone-alt', 'far fa-microphone-alt-slash', 'fal fa-microphone-alt-slash', 'far fa-microphone-slash', 'fal fa-microphone-slash', 'far fa-microscope', 'fal fa-microscope', 'fas fa-mind-share', 'far fa-mind-share', 'fal fa-mind-share', 'far fa-minus', 'fal fa-minus', 'far fa-minus-circle', 'fal fa-minus-circle', 'fas fa-minus-hexagon', 'far fa-minus-hexagon', 'fal fa-minus-hexagon', 'fas fa-minus-octagon', 'far fa-minus-octagon', 'fal fa-minus-octagon', 'fal fa-minus-square', 'far fa-mobile', 'fal fa-mobile', 'far fa-mobile-alt', 'fal fa-mobile-alt', 'fas fa-mobile-android', 'far fa-mobile-android', 'fal fa-mobile-android', 'fas fa-mobile-android-alt', 'far fa-mobile-android-alt', 'fal fa-mobile-android-alt', 'far fa-money-bill', 'fal fa-money-bill', 'fal fa-money-bill-alt', 'far fa-money-bill-wave', 'fal fa-money-bill-wave', 'far fa-money-bill-wave-alt', 'fal fa-money-bill-wave-alt', 'far fa-money-check', 'fal fa-money-check', 'far fa-money-check-alt', 'fal fa-money-check-alt', 'fas fa-monitor-heart-rate', 'far fa-monitor-heart-rate', 'fal fa-monitor-heart-rate', 'far fa-monument', 'fal fa-monument', 'fal fa-moon', 'far fa-mortar-pestle', 'fal fa-mortar-pestle', 'far fa-mosque', 'fal fa-mosque', 'far fa-motorcycle', 'fal fa-motorcycle', 'far fa-mouse-pointer', 'fal fa-mouse-pointer', 'far fa-music', 'fal fa-music', 'far fa-neuter', 'fal fa-neuter', 'fal fa-newspaper', 'far fa-not-equal', 'fal fa-not-equal', 'far fa-notes-medical', 'fal fa-notes-medical', 'fal fa-object-group', 'fal fa-object-ungroup', 'fas fa-octagon', 'far fa-octagon', 'fal fa-octagon', 'far fa-oil-can', 'fal fa-oil-can', 'fas fa-oil-temp', 'far fa-oil-temp', 'fal fa-oil-temp', 'far fa-om', 'fal fa-om', 'fas fa-omega', 'far fa-omega', 'fal fa-omega', 'far fa-outdent', 'fal fa-outdent', 'far fa-paint-brush', 'fal fa-paint-brush', 'fas fa-paint-brush-alt', 'far fa-paint-brush-alt', 'fal fa-paint-brush-alt', 'far fa-paint-roller', 'fal fa-paint-roller', 'far fa-palette', 'fal fa-palette', 'far fa-pallet', 'fal fa-pallet', 'fas fa-pallet-alt', 'far fa-pallet-alt', 'fal fa-pallet-alt', 'fal fa-paper-plane', 'far fa-paperclip', 'fal fa-paperclip', 'far fa-parachute-box', 'fal fa-parachute-box', 'far fa-paragraph', 'fal fa-paragraph', 'far fa-parking', 'fal fa-parking', 'fas fa-parking-circle', 'far fa-parking-circle', 'fal fa-parking-circle', 'fas fa-parking-circle-slash', 'far fa-parking-circle-slash', 'fal fa-parking-circle-slash', 'fas fa-parking-slash', 'far fa-parking-slash', 'fal fa-parking-slash', 'far fa-passport', 'fal fa-passport', 'far fa-pastafarianism', 'fal fa-pastafarianism', 'far fa-paste', 'fal fa-paste', 'far fa-pause', 'fal fa-pause', 'fal fa-pause-circle', 'far fa-paw', 'fal fa-paw', 'far fa-peace', 'fal fa-peace', 'far fa-pen', 'fal fa-pen', 'far fa-pen-alt', 'fal fa-pen-alt', 'far fa-pen-fancy', 'fal fa-pen-fancy', 'far fa-pen-nib', 'fal fa-pen-nib', 'far fa-pen-square', 'fal fa-pen-square', 'fas fa-pencil', 'far fa-pencil', 'fal fa-pencil', 'far fa-pencil-alt', 'fal fa-pencil-alt', 'fas fa-pencil-paintbrush', 'far fa-pencil-paintbrush', 'fal fa-pencil-paintbrush', 'far fa-pencil-ruler', 'fal fa-pencil-ruler', 'fas fa-pennant', 'far fa-pennant', 'fal fa-pennant', 'far fa-people-carry', 'fal fa-people-carry', 'far fa-percent', 'fal fa-percent', 'far fa-percentage', 'fal fa-percentage', 'fas fa-person-carry', 'far fa-person-carry', 'fal fa-person-carry', 'fas fa-person-dolly', 'far fa-person-dolly', 'fal fa-person-dolly', 'fas fa-person-dolly-empty', 'far fa-person-dolly-empty', 'fal fa-person-dolly-empty', 'far fa-phone', 'fal fa-phone', 'fas fa-phone-office', 'far fa-phone-office', 'fal fa-phone-office', 'fas fa-phone-plus', 'far fa-phone-plus', 'fal fa-phone-plus', 'far fa-phone-slash', 'fal fa-phone-slash', 'far fa-phone-square', 'fal fa-phone-square', 'far fa-phone-volume', 'fal fa-phone-volume', 'fas fa-pi', 'far fa-pi', 'fal fa-pi', 'far fa-piggy-bank', 'fal fa-piggy-bank', 'far fa-pills', 'fal fa-pills', 'far fa-place-of-worship', 'fal fa-place-of-worship', 'far fa-plane', 'fal fa-plane', 'fas fa-plane-alt', 'far fa-plane-alt', 'fal fa-plane-alt', 'far fa-plane-arrival', 'fal fa-plane-arrival', 'far fa-plane-departure', 'fal fa-plane-departure', 'far fa-play', 'fal fa-play', 'fal fa-play-circle', 'far fa-plug', 'fal fa-plug', 'far fa-plus', 'fal fa-plus', 'far fa-plus-circle', 'fal fa-plus-circle', 'fas fa-plus-hexagon', 'far fa-plus-hexagon', 'fal fa-plus-hexagon', 'fas fa-plus-octagon', 'far fa-plus-octagon', 'fal fa-plus-octagon', 'fal fa-plus-square', 'far fa-podcast', 'fal fa-podcast', 'fas fa-podium', 'far fa-podium', 'fal fa-podium', 'far fa-poll', 'fal fa-poll', 'far fa-poll-h', 'fal fa-poll-h', 'far fa-poo', 'fal fa-poo', 'far fa-poop', 'fal fa-poop', 'far fa-portrait', 'fal fa-portrait', 'far fa-pound-sign', 'fal fa-pound-sign', 'far fa-power-off', 'fal fa-power-off', 'far fa-pray', 'fal fa-pray', 'far fa-praying-hands', 'fal fa-praying-hands', 'far fa-prescription', 'fal fa-prescription', 'far fa-prescription-bottle', 'fal fa-prescription-bottle', 'far fa-prescription-bottle-alt', 'fal fa-prescription-bottle-alt', 'fas fa-presentation', 'far fa-presentation', 'fal fa-presentation', 'far fa-print', 'fal fa-print', 'fas fa-print-slash', 'far fa-print-slash', 'fal fa-print-slash', 'far fa-procedures', 'fal fa-procedures', 'far fa-project-diagram', 'fal fa-project-diagram', 'far fa-puzzle-piece', 'fal fa-puzzle-piece', 'far fa-qrcode', 'fal fa-qrcode', 'far fa-question', 'fal fa-question', 'fal fa-question-circle', 'fas fa-question-square', 'far fa-question-square', 'fal fa-question-square', 'far fa-quidditch', 'fal fa-quidditch', 'far fa-quote-left', 'fal fa-quote-left', 'far fa-quote-right', 'fal fa-quote-right', 'far fa-quran', 'fal fa-quran', 'fas fa-racquet', 'far fa-racquet', 'fal fa-racquet', 'fas fa-ramp-loading', 'far fa-ramp-loading', 'fal fa-ramp-loading', 'far fa-random', 'fal fa-random', 'far fa-receipt', 'fal fa-receipt', 'fas fa-rectangle-landscape', 'far fa-rectangle-landscape', 'fal fa-rectangle-landscape', 'fas fa-rectangle-portrait', 'far fa-rectangle-portrait', 'fal fa-rectangle-portrait', 'fas fa-rectangle-wide', 'far fa-rectangle-wide', 'fal fa-rectangle-wide', 'far fa-recycle', 'fal fa-recycle', 'far fa-redo', 'fal fa-redo', 'far fa-redo-alt', 'fal fa-redo-alt', 'fal fa-registered', 'fas fa-repeat', 'far fa-repeat', 'fal fa-repeat', 'fas fa-repeat-1', 'far fa-repeat-1', 'fal fa-repeat-1', 'fas fa-repeat-1-alt', 'far fa-repeat-1-alt', 'fal fa-repeat-1-alt', 'fas fa-repeat-alt', 'far fa-repeat-alt', 'fal fa-repeat-alt', 'far fa-reply', 'fal fa-reply', 'far fa-reply-all', 'fal fa-reply-all', 'far fa-retweet', 'fal fa-retweet', 'fas fa-retweet-alt', 'far fa-retweet-alt', 'fal fa-retweet-alt', 'far fa-ribbon', 'fal fa-ribbon', 'far fa-road', 'fal fa-road', 'far fa-robot', 'fal fa-robot', 'far fa-rocket', 'fal fa-rocket', 'far fa-route', 'fal fa-route', 'fas fa-route-highway', 'far fa-route-highway', 'fal fa-route-highway', 'fas fa-route-interstate', 'far fa-route-interstate', 'fal fa-route-interstate', 'far fa-rss', 'fal fa-rss', 'far fa-rss-square', 'fal fa-rss-square', 'far fa-ruble-sign', 'fal fa-ruble-sign', 'far fa-ruler', 'fal fa-ruler', 'far fa-ruler-combined', 'fal fa-ruler-combined', 'far fa-ruler-horizontal', 'fal fa-ruler-horizontal', 'fas fa-ruler-triangle', 'far fa-ruler-triangle', 'fal fa-ruler-triangle', 'far fa-ruler-vertical', 'fal fa-ruler-vertical', 'far fa-rupee-sign', 'fal fa-rupee-sign', 'fal fa-sad-cry', 'fal fa-sad-tear', 'fal fa-save', 'fas fa-scalpel', 'far fa-scalpel', 'fal fa-scalpel', 'fas fa-scalpel-path', 'far fa-scalpel-path', 'fal fa-scalpel-path', 'fas fa-scanner', 'far fa-scanner', 'fal fa-scanner', 'fas fa-scanner-keyboard', 'far fa-scanner-keyboard', 'fal fa-scanner-keyboard', 'fas fa-scanner-touchscreen', 'far fa-scanner-touchscreen', 'fal fa-scanner-touchscreen', 'far fa-school', 'fal fa-school', 'far fa-screwdriver', 'fal fa-screwdriver', 'fas fa-scrubber', 'far fa-scrubber', 'fal fa-scrubber', 'far fa-search', 'fal fa-search', 'far fa-search-dollar', 'fal fa-search-dollar', 'far fa-search-location', 'fal fa-search-location', 'far fa-search-minus', 'fal fa-search-minus', 'far fa-search-plus', 'fal fa-search-plus', 'far fa-seedling', 'fal fa-seedling', 'far fa-server', 'fal fa-server', 'far fa-shapes', 'fal fa-shapes', 'far fa-share', 'fal fa-share', 'fas fa-share-all', 'far fa-share-all', 'fal fa-share-all', 'far fa-share-alt', 'fal fa-share-alt', 'far fa-share-alt-square', 'fal fa-share-alt-square', 'fal fa-share-square', 'far fa-shekel-sign', 'fal fa-shekel-sign', 'fas fa-shield', 'far fa-shield', 'fal fa-shield', 'far fa-shield-alt', 'fal fa-shield-alt', 'fas fa-shield-check', 'far fa-shield-check', 'fal fa-shield-check', 'far fa-ship', 'fal fa-ship', 'far fa-shipping-fast', 'fal fa-shipping-fast', 'fas fa-shipping-timed', 'far fa-shipping-timed', 'fal fa-shipping-timed', 'far fa-shoe-prints', 'fal fa-shoe-prints', 'far fa-shopping-bag', 'fal fa-shopping-bag', 'far fa-shopping-basket', 'fal fa-shopping-basket', 'far fa-shopping-cart', 'fal fa-shopping-cart', 'far fa-shower', 'fal fa-shower', 'fas fa-shredder', 'far fa-shredder', 'fal fa-shredder', 'far fa-shuttle-van', 'fal fa-shuttle-van', 'fas fa-shuttlecock', 'far fa-shuttlecock', 'fal fa-shuttlecock', 'fas fa-sigma', 'far fa-sigma', 'fal fa-sigma', 'far fa-sign', 'fal fa-sign', 'fas fa-sign-in', 'far fa-sign-in', 'fal fa-sign-in', 'far fa-sign-in-alt', 'fal fa-sign-in-alt', 'far fa-sign-language', 'fal fa-sign-language', 'fas fa-sign-out', 'far fa-sign-out', 'fal fa-sign-out', 'far fa-sign-out-alt', 'fal fa-sign-out-alt', 'far fa-signal', 'fal fa-signal', 'fas fa-signal-1', 'far fa-signal-1', 'fal fa-signal-1', 'fas fa-signal-2', 'far fa-signal-2', 'fal fa-signal-2', 'fas fa-signal-3', 'far fa-signal-3', 'fal fa-signal-3', 'fas fa-signal-4', 'far fa-signal-4', 'fal fa-signal-4', 'fas fa-signal-alt', 'far fa-signal-alt', 'fal fa-signal-alt', 'fas fa-signal-alt-1', 'far fa-signal-alt-1', 'fal fa-signal-alt-1', 'fas fa-signal-alt-2', 'far fa-signal-alt-2', 'fal fa-signal-alt-2', 'fas fa-signal-alt-3', 'far fa-signal-alt-3', 'fal fa-signal-alt-3', 'fas fa-signal-alt-slash', 'far fa-signal-alt-slash', 'fal fa-signal-alt-slash', 'fas fa-signal-slash', 'far fa-signal-slash', 'fal fa-signal-slash', 'far fa-signature', 'fal fa-signature', 'far fa-sitemap', 'fal fa-sitemap', 'fas fa-skeleton', 'far fa-skeleton', 'fal fa-skeleton', 'far fa-skull', 'fal fa-skull', 'far fa-sliders-h', 'fal fa-sliders-h', 'fas fa-sliders-h-square', 'far fa-sliders-h-square', 'fal fa-sliders-h-square', 'fas fa-sliders-v', 'far fa-sliders-v', 'fal fa-sliders-v', 'fas fa-sliders-v-square', 'far fa-sliders-v-square', 'fal fa-sliders-v-square', 'fal fa-smile', 'fal fa-smile-beam', 'fas fa-smile-plus', 'far fa-smile-plus', 'fal fa-smile-plus', 'fal fa-smile-wink', 'far fa-smoking', 'fal fa-smoking', 'far fa-smoking-ban', 'fal fa-smoking-ban', 'fal fa-snowflake', 'far fa-socks', 'fal fa-socks', 'far fa-solar-panel', 'fal fa-solar-panel', 'far fa-sort', 'fal fa-sort', 'far fa-sort-alpha-down', 'fal fa-sort-alpha-down', 'far fa-sort-alpha-up', 'fal fa-sort-alpha-up', 'far fa-sort-amount-down', 'fal fa-sort-amount-down', 'far fa-sort-amount-up', 'fal fa-sort-amount-up', 'far fa-sort-down', 'fal fa-sort-down', 'far fa-sort-numeric-down', 'fal fa-sort-numeric-down', 'far fa-sort-numeric-up', 'fal fa-sort-numeric-up', 'far fa-sort-up', 'fal fa-sort-up', 'far fa-spa', 'fal fa-spa', 'far fa-space-shuttle', 'fal fa-space-shuttle', 'fas fa-spade', 'far fa-spade', 'fal fa-spade', 'far fa-spinner', 'fal fa-spinner', 'fas fa-spinner-third', 'far fa-spinner-third', 'fal fa-spinner-third', 'far fa-splotch', 'fal fa-splotch', 'far fa-spray-can', 'fal fa-spray-can', 'fal fa-square', 'far fa-square-full', 'fal fa-square-full', 'fas fa-square-root', 'far fa-square-root', 'fal fa-square-root', 'far fa-square-root-alt', 'fal fa-square-root-alt', 'far fa-stamp', 'fal fa-stamp', 'fal fa-star', 'far fa-star-and-crescent', 'fal fa-star-and-crescent', 'fas fa-star-exclamation', 'far fa-star-exclamation', 'fal fa-star-exclamation', 'fal fa-star-half', 'far fa-star-half-alt', 'fal fa-star-half-alt', 'far fa-star-of-david', 'fal fa-star-of-david', 'far fa-star-of-life', 'fal fa-star-of-life', 'fas fa-steering-wheel', 'far fa-steering-wheel', 'fal fa-steering-wheel', 'far fa-step-backward', 'fal fa-step-backward', 'far fa-step-forward', 'fal fa-step-forward', 'far fa-stethoscope', 'fal fa-stethoscope', 'fal fa-sticky-note', 'fas fa-stomach', 'far fa-stomach', 'fal fa-stomach', 'far fa-stop', 'fal fa-stop', 'fal fa-stop-circle', 'far fa-stopwatch', 'fal fa-stopwatch', 'far fa-store', 'fal fa-store', 'far fa-store-alt', 'fal fa-store-alt', 'far fa-stream', 'fal fa-stream', 'far fa-street-view', 'fal fa-street-view', 'far fa-strikethrough', 'fal fa-strikethrough', 'far fa-stroopwafel', 'fal fa-stroopwafel', 'far fa-subscript', 'fal fa-subscript', 'far fa-subway', 'fal fa-subway', 'far fa-suitcase', 'fal fa-suitcase', 'far fa-suitcase-rolling', 'fal fa-suitcase-rolling', 'fal fa-sun', 'far fa-superscript', 'fal fa-superscript', 'fal fa-surprise', 'far fa-swatchbook', 'fal fa-swatchbook', 'far fa-swimmer', 'fal fa-swimmer', 'far fa-swimming-pool', 'fal fa-swimming-pool', 'far fa-synagogue', 'fal fa-synagogue', 'far fa-sync', 'fal fa-sync', 'far fa-sync-alt', 'fal fa-sync-alt', 'far fa-syringe', 'fal fa-syringe', 'far fa-table', 'fal fa-table', 'far fa-table-tennis', 'fal fa-table-tennis', 'far fa-tablet', 'fal fa-tablet', 'far fa-tablet-alt', 'fal fa-tablet-alt', 'fas fa-tablet-android', 'far fa-tablet-android', 'fal fa-tablet-android', 'fas fa-tablet-android-alt', 'far fa-tablet-android-alt', 'fal fa-tablet-android-alt', 'fas fa-tablet-rugged', 'far fa-tablet-rugged', 'fal fa-tablet-rugged', 'far fa-tablets', 'fal fa-tablets', 'fas fa-tachometer', 'far fa-tachometer', 'fal fa-tachometer', 'far fa-tachometer-alt', 'fal fa-tachometer-alt', 'fas fa-tachometer-alt-average', 'far fa-tachometer-alt-average', 'fal fa-tachometer-alt-average', 'fas fa-tachometer-alt-fast', 'far fa-tachometer-alt-fast', 'fal fa-tachometer-alt-fast', 'fas fa-tachometer-alt-fastest', 'far fa-tachometer-alt-fastest', 'fal fa-tachometer-alt-fastest', 'fas fa-tachometer-alt-slow', 'far fa-tachometer-alt-slow', 'fal fa-tachometer-alt-slow', 'fas fa-tachometer-alt-slowest', 'far fa-tachometer-alt-slowest', 'fal fa-tachometer-alt-slowest', 'fas fa-tachometer-average', 'far fa-tachometer-average', 'fal fa-tachometer-average', 'fas fa-tachometer-fast', 'far fa-tachometer-fast', 'fal fa-tachometer-fast', 'fas fa-tachometer-fastest', 'far fa-tachometer-fastest', 'fal fa-tachometer-fastest', 'fas fa-tachometer-slow', 'far fa-tachometer-slow', 'fal fa-tachometer-slow', 'fas fa-tachometer-slowest', 'far fa-tachometer-slowest', 'fal fa-tachometer-slowest', 'far fa-tag', 'fal fa-tag', 'far fa-tags', 'fal fa-tags', 'fas fa-tally', 'far fa-tally', 'fal fa-tally', 'far fa-tape', 'fal fa-tape', 'far fa-tasks', 'fal fa-tasks', 'far fa-taxi', 'fal fa-taxi', 'far fa-teeth', 'fal fa-teeth', 'far fa-teeth-open', 'fal fa-teeth-open', 'fas fa-tennis-ball', 'far fa-tennis-ball', 'fal fa-tennis-ball', 'far fa-terminal', 'fal fa-terminal', 'far fa-text-height', 'fal fa-text-height', 'far fa-text-width', 'fal fa-text-width', 'far fa-th', 'fal fa-th', 'far fa-th-large', 'fal fa-th-large', 'far fa-th-list', 'fal fa-th-list', 'far fa-theater-masks', 'fal fa-theater-masks', 'far fa-thermometer', 'fal fa-thermometer', 'far fa-thermometer-empty', 'fal fa-thermometer-empty', 'far fa-thermometer-full', 'fal fa-thermometer-full', 'far fa-thermometer-half', 'fal fa-thermometer-half', 'far fa-thermometer-quarter', 'fal fa-thermometer-quarter', 'far fa-thermometer-three-quarters', 'fal fa-thermometer-three-quarters', 'fas fa-theta', 'far fa-theta', 'fal fa-theta', 'fal fa-thumbs-down', 'fal fa-thumbs-up', 'far fa-thumbtack', 'fal fa-thumbtack', 'fas fa-ticket', 'far fa-ticket', 'fal fa-ticket', 'far fa-ticket-alt', 'fal fa-ticket-alt', 'fas fa-tilde', 'far fa-tilde', 'fal fa-tilde', 'far fa-times', 'fal fa-times', 'fal fa-times-circle', 'fas fa-times-hexagon', 'far fa-times-hexagon', 'fal fa-times-hexagon', 'fas fa-times-octagon', 'far fa-times-octagon', 'fal fa-times-octagon', 'fas fa-times-square', 'far fa-times-square', 'fal fa-times-square', 'far fa-tint', 'fal fa-tint', 'far fa-tint-slash', 'fal fa-tint-slash', 'fas fa-tire', 'far fa-tire', 'fal fa-tire', 'fas fa-tire-flat', 'far fa-tire-flat', 'fal fa-tire-flat', 'fas fa-tire-pressure-warning', 'far fa-tire-pressure-warning', 'fal fa-tire-pressure-warning', 'fas fa-tire-rugged', 'far fa-tire-rugged', 'fal fa-tire-rugged', 'fal fa-tired', 'far fa-toggle-off', 'fal fa-toggle-off', 'far fa-toggle-on', 'fal fa-toggle-on', 'far fa-toolbox', 'fal fa-toolbox', 'far fa-tooth', 'fal fa-tooth', 'fas fa-toothbrush', 'far fa-toothbrush', 'fal fa-toothbrush', 'far fa-torah', 'fal fa-torah', 'far fa-torii-gate', 'fal fa-torii-gate', 'far fa-trademark', 'fal fa-trademark', 'fas fa-traffic-cone', 'far fa-traffic-cone', 'fal fa-traffic-cone', 'far fa-traffic-light', 'fal fa-traffic-light', 'fas fa-traffic-light-go', 'far fa-traffic-light-go', 'fal fa-traffic-light-go', 'fas fa-traffic-light-slow', 'far fa-traffic-light-slow', 'fal fa-traffic-light-slow', 'fas fa-traffic-light-stop', 'far fa-traffic-light-stop', 'fal fa-traffic-light-stop', 'far fa-train', 'fal fa-train', 'far fa-transgender', 'fal fa-transgender', 'far fa-transgender-alt', 'fal fa-transgender-alt', 'far fa-trash', 'fal fa-trash', 'fal fa-trash-alt', 'far fa-tree', 'fal fa-tree', 'fas fa-tree-alt', 'far fa-tree-alt', 'fal fa-tree-alt', 'fas fa-triangle', 'far fa-triangle', 'fal fa-triangle', 'far fa-trophy', 'fal fa-trophy', 'fas fa-trophy-alt', 'far fa-trophy-alt', 'fal fa-trophy-alt', 'far fa-truck', 'fal fa-truck', 'fas fa-truck-container', 'far fa-truck-container', 'fal fa-truck-container', 'fas fa-truck-couch', 'far fa-truck-couch', 'fal fa-truck-couch', 'far fa-truck-loading', 'fal fa-truck-loading', 'far fa-truck-monster', 'fal fa-truck-monster', 'far fa-truck-moving', 'fal fa-truck-moving', 'far fa-truck-pickup', 'fal fa-truck-pickup', 'fas fa-truck-ramp', 'far fa-truck-ramp', 'fal fa-truck-ramp', 'far fa-tshirt', 'fal fa-tshirt', 'far fa-tty', 'fal fa-tty', 'far fa-tv', 'fal fa-tv', 'fas fa-tv-retro', 'far fa-tv-retro', 'fal fa-tv-retro', 'far fa-umbrella', 'fal fa-umbrella', 'far fa-umbrella-beach', 'fal fa-umbrella-beach', 'far fa-underline', 'fal fa-underline', 'far fa-undo', 'fal fa-undo', 'far fa-undo-alt', 'fal fa-undo-alt', 'fas fa-union', 'far fa-union', 'fal fa-union', 'far fa-universal-access', 'fal fa-universal-access', 'far fa-university', 'fal fa-university', 'far fa-unlink', 'fal fa-unlink', 'far fa-unlock', 'fal fa-unlock', 'far fa-unlock-alt', 'fal fa-unlock-alt', 'far fa-upload', 'fal fa-upload', 'fas fa-usd-circle', 'far fa-usd-circle', 'fal fa-usd-circle', 'fas fa-usd-square', 'far fa-usd-square', 'fal fa-usd-square', 'fal fa-user', 'far fa-user-alt', 'fal fa-user-alt', 'far fa-user-alt-slash', 'fal fa-user-alt-slash', 'far fa-user-astronaut', 'fal fa-user-astronaut', 'fas fa-user-chart', 'far fa-user-chart', 'fal fa-user-chart', 'far fa-user-check', 'fal fa-user-check', 'fal fa-user-circle', 'far fa-user-clock', 'fal fa-user-clock', 'far fa-user-cog', 'fal fa-user-cog', 'fas fa-user-crown', 'far fa-user-crown', 'fal fa-user-crown', 'far fa-user-edit', 'fal fa-user-edit', 'far fa-user-friends', 'fal fa-user-friends', 'far fa-user-graduate', 'fal fa-user-graduate', 'far fa-user-lock', 'fal fa-user-lock', 'far fa-user-md', 'fal fa-user-md', 'far fa-user-minus', 'fal fa-user-minus', 'far fa-user-ninja', 'fal fa-user-ninja', 'far fa-user-plus', 'fal fa-user-plus', 'far fa-user-secret', 'fal fa-user-secret', 'far fa-user-shield', 'fal fa-user-shield', 'far fa-user-slash', 'fal fa-user-slash', 'far fa-user-tag', 'fal fa-user-tag', 'far fa-user-tie', 'fal fa-user-tie', 'far fa-user-times', 'fal fa-user-times', 'far fa-users', 'fal fa-users', 'fas fa-users-class', 'far fa-users-class', 'fal fa-users-class', 'far fa-users-cog', 'fal fa-users-cog', 'fas fa-users-crown', 'far fa-users-crown', 'fal fa-users-crown', 'fas fa-utensil-fork', 'far fa-utensil-fork', 'fal fa-utensil-fork', 'fas fa-utensil-knife', 'far fa-utensil-knife', 'fal fa-utensil-knife', 'far fa-utensil-spoon', 'fal fa-utensil-spoon', 'far fa-utensils', 'fal fa-utensils', 'fas fa-utensils-alt', 'far fa-utensils-alt', 'fal fa-utensils-alt', 'fas fa-value-absolute', 'far fa-value-absolute', 'fal fa-value-absolute', 'far fa-vector-square', 'fal fa-vector-square', 'far fa-venus', 'fal fa-venus', 'far fa-venus-double', 'fal fa-venus-double', 'far fa-venus-mars', 'fal fa-venus-mars', 'far fa-vial', 'fal fa-vial', 'far fa-vials', 'fal fa-vials', 'far fa-video', 'fal fa-video', 'fas fa-video-plus', 'far fa-video-plus', 'fal fa-video-plus', 'far fa-video-slash', 'fal fa-video-slash', 'far fa-vihara', 'fal fa-vihara', 'far fa-volleyball-ball', 'fal fa-volleyball-ball', 'fas fa-volume', 'far fa-volume', 'fal fa-volume', 'far fa-volume-down', 'fal fa-volume-down', 'fas fa-volume-mute', 'far fa-volume-mute', 'fal fa-volume-mute', 'far fa-volume-off', 'fal fa-volume-off', 'fas fa-volume-slash', 'far fa-volume-slash', 'fal fa-volume-slash', 'far fa-volume-up', 'fal fa-volume-up', 'far fa-walking', 'fal fa-walking', 'far fa-wallet', 'fal fa-wallet', 'far fa-warehouse', 'fal fa-warehouse', 'fas fa-warehouse-alt', 'far fa-warehouse-alt', 'fal fa-warehouse-alt', 'fas fa-watch', 'far fa-watch', 'fal fa-watch', 'fas fa-watch-fitness', 'far fa-watch-fitness', 'fal fa-watch-fitness', 'far fa-weight', 'fal fa-weight', 'far fa-weight-hanging', 'fal fa-weight-hanging', 'far fa-wheelchair', 'fal fa-wheelchair', 'fas fa-whistle', 'far fa-whistle', 'fal fa-whistle', 'far fa-wifi', 'fal fa-wifi', 'fas fa-wifi-1', 'far fa-wifi-1', 'fal fa-wifi-1', 'fas fa-wifi-2', 'far fa-wifi-2', 'fal fa-wifi-2', 'fas fa-wifi-slash', 'far fa-wifi-slash', 'fal fa-wifi-slash', 'fas fa-window', 'far fa-window', 'fal fa-window', 'fas fa-window-alt', 'far fa-window-alt', 'fal fa-window-alt', 'fal fa-window-close', 'fal fa-window-maximize', 'fal fa-window-minimize', 'fal fa-window-restore', 'far fa-wine-glass', 'fal fa-wine-glass', 'far fa-wine-glass-alt', 'fal fa-wine-glass-alt', 'far fa-won-sign', 'fal fa-won-sign', 'far fa-wrench', 'fal fa-wrench', 'far fa-x-ray', 'fal fa-x-ray', 'far fa-yen-sign', 'fal fa-yen-sign', 'far fa-yin-yang', 'fal fa-yin-yang' ] } ] }; data.icons = data.allVersions[0].icons; $.iconset_fontawesome_5 = data; })(jQuery); /*!======================================================================== * Iconset: Glyphicons * Versions: 3.3.7 * ======================================================================== */ ;(function($){ var data = { iconClass: 'glyphicon', iconClassFix: 'glyphicon-', icons: [], allVersions: [ { version: '3.3.7', icons: [ '', 'adjust', 'align-center', 'align-justify', 'align-left', 'align-right', 'arrow-down', 'arrow-left', 'arrow-right', 'arrow-up', 'asterisk', 'backward', 'ban-circle', 'barcode', 'bell', 'bold', 'book', 'bookmark', 'briefcase', 'bullhorn', 'calendar', 'camera', 'certificate', 'check', 'chevron-down', 'chevron-left', 'chevron-right', 'chevron-up', 'circle-arrow-down', 'circle-arrow-left', 'circle-arrow-right', 'circle-arrow-up', 'cloud', 'cloud-download', 'cloud-upload', 'cog', 'collapse-down', 'collapse-up', 'comment', 'compressed', 'copyright-mark', 'credit-card', 'cutlery', 'dashboard', 'download', 'download-alt', 'earphone', 'edit', 'eject', 'envelope', 'euro', 'exclamation-sign', 'expand', 'export', 'eye-close', 'eye-open', 'facetime-video', 'fast-backward', 'fast-forward', 'file', 'film', 'filter', 'fire', 'flag', 'flash', 'floppy-disk', 'floppy-open', 'floppy-remove', 'floppy-save', 'floppy-saved', 'folder-close', 'folder-open', 'font', 'forward', 'fullscreen', 'gbp', 'gift', 'glass', 'globe', 'hand-down', 'hand-left', 'hand-right', 'hand-up', 'hd-video', 'hdd', 'header', 'headphones', 'heart', 'heart-empty', 'home', 'import', 'inbox', 'indent-left', 'indent-right', 'info-sign', 'italic', 'leaf', 'link', 'list', 'list-alt', 'lock', 'log-in', 'log-out', 'magnet', 'map-marker', 'minus', 'minus-sign', 'move', 'music', 'new-window', 'off', 'ok', 'ok-circle', 'ok-sign', 'open', 'paperclip', 'pause', 'pencil', 'phone', 'phone-alt', 'picture', 'plane', 'play', 'play-circle', 'plus', 'plus-sign', 'print', 'pushpin', 'qrcode', 'question-sign', 'random', 'record', 'refresh', 'registration-mark', 'remove', 'remove-circle', 'remove-sign', 'repeat', 'resize-full', 'resize-horizontal', 'resize-small', 'resize-vertical', 'retweet', 'road', 'save', 'saved', 'screenshot', 'sd-video', 'search', 'send', 'share', 'share-alt', 'shopping-cart', 'signal', 'sort', 'sort-by-alphabet', 'sort-by-alphabet-alt', 'sort-by-attributes', 'sort-by-attributes-alt', 'sort-by-order', 'sort-by-order-alt', 'sound-5-1', 'sound-6-1', 'sound-7-1', 'sound-dolby', 'sound-stereo', 'star', 'star-empty', 'stats', 'step-backward', 'step-forward', 'stop', 'subtitles', 'tag', 'tags', 'tasks', 'text-height', 'text-width', 'th', 'th-large', 'th-list', 'thumbs-down', 'thumbs-up', 'time', 'tint', 'tower', 'transfer', 'trash', 'tree-conifer', 'tree-deciduous', 'unchecked', 'upload', 'usd', 'user', 'volume-down', 'volume-off', 'volume-up', 'warning-sign', 'wrench', 'zoom-in', 'zoom-out' ] } ] }; var l = data.allVersions.length; data.icons = data.allVersions[l-1].icons; $.iconset_glyphicon = data; })(jQuery); /*!======================================================================== * Iconset: Ionicons * Versions: 1.5.2, 2.0.1 * http://ionicons.com/ * CDN: http://code.ionicframework.com/ionicons/[VERSION]/css/ionicons.min.css * ======================================================================== */ ;(function($){ var data = { iconClass: '', iconClassFix: 'ion-', icons: [], allVersions: [ { version: '1.5.2', icons: [ '', 'alert', 'alert-circled', 'android-add', 'android-add-contact', 'android-alarm', 'android-archive', 'android-arrow-back', 'android-arrow-down-left', 'android-arrow-down-right', 'android-arrow-forward', 'android-arrow-up-left', 'android-arrow-up-right', 'android-battery', 'android-book', 'android-calendar', 'android-call', 'android-camera', 'android-chat', 'android-checkmark', 'android-clock', 'android-close', 'android-contact', 'android-contacts', 'android-data', 'android-developer', 'android-display', 'android-download', 'android-drawer', 'android-dropdown', 'android-earth', 'android-folder', 'android-forums', 'android-friends', 'android-hand', 'android-image', 'android-inbox', 'android-information', 'android-keypad', 'android-lightbulb', 'android-locate', 'android-location', 'android-mail', 'android-microphone', 'android-mixer', 'android-more', 'android-note', 'android-playstore', 'android-printer', 'android-promotion', 'android-reminder', 'android-remove', 'android-search', 'android-send', 'android-settings', 'android-share', 'android-social', 'android-social-user', 'android-sort', 'android-stair-drawer', 'android-star', 'android-stopwatch', 'android-storage', 'android-system-back', 'android-system-home', 'android-system-windows', 'android-timer', 'android-trash', 'android-user-menu', 'android-volume', 'android-wifi', 'aperture', 'archive', 'arrow-down-a', 'arrow-down-b', 'arrow-down-c', 'arrow-expand', 'arrow-graph-down-left', 'arrow-graph-down-right', 'arrow-graph-up-left', 'arrow-graph-up-right', 'arrow-left-a', 'arrow-left-b', 'arrow-left-c', 'arrow-move', 'arrow-resize', 'arrow-return-left', 'arrow-return-right', 'arrow-right-a', 'arrow-right-b', 'arrow-right-c', 'arrow-shrink', 'arrow-swap', 'arrow-up-a', 'arrow-up-b', 'arrow-up-c', 'asterisk', 'at', 'bag', 'battery-charging', 'battery-empty', 'battery-full', 'battery-half', 'battery-low', 'beaker', 'beer', 'bluetooth', 'bonfire', 'bookmark', 'briefcase', 'bug', 'calculator', 'calendar', 'camera', 'card', 'cash', 'chatbox', 'chatbox-working', 'chatboxes', 'chatbubble', 'chatbubble-working', 'chatbubbles', 'checkmark', 'checkmark-circled', 'checkmark-round', 'chevron-down', 'chevron-left', 'chevron-right', 'chevron-up', 'clipboard', 'clock', 'close', 'close-circled', 'close-round', 'closed-captioning', 'cloud', 'code', 'code-download', 'code-working', 'coffee', 'compass', 'compose', 'connection-bars', 'contrast', 'cube', 'disc', 'document', 'document-text', 'drag', 'earth', 'edit', 'egg', 'eject', 'email', 'eye', 'eye-disabled', 'female', 'filing', 'film-marker', 'fireball', 'flag', 'flame', 'flash', 'flash-off', 'flask', 'folder', 'fork', 'fork-repo', 'forward', 'funnel', 'game-controller-a', 'game-controller-b', 'gear-a', 'gear-b', 'grid', 'hammer', 'happy', 'headphone', 'heart', 'heart-broken', 'help', 'help-buoy', 'help-circled', 'home', 'icecream', 'image', 'images', 'information', 'information-circled', 'ionic', 'ios7-alarm', 'ios7-alarm-outline', 'ios7-albums', 'ios7-albums-outline', 'ios7-americanfootball', 'ios7-americanfootball-outline', 'ios7-analytics', 'ios7-analytics-outline', 'ios7-arrow-back', 'ios7-arrow-down', 'ios7-arrow-forward', 'ios7-arrow-left', 'ios7-arrow-right', 'ios7-arrow-thin-down', 'ios7-arrow-thin-left', 'ios7-arrow-thin-right', 'ios7-arrow-thin-up', 'ios7-arrow-up', 'ios7-at', 'ios7-at-outline', 'ios7-barcode', 'ios7-barcode-outline', 'ios7-baseball', 'ios7-baseball-outline', 'ios7-basketball', 'ios7-basketball-outline', 'ios7-bell', 'ios7-bell-outline', 'ios7-bolt', 'ios7-bolt-outline', 'ios7-bookmarks', 'ios7-bookmarks-outline', 'ios7-box', 'ios7-box-outline', 'ios7-briefcase', 'ios7-briefcase-outline', 'ios7-browsers', 'ios7-browsers-outline', 'ios7-calculator', 'ios7-calculator-outline', 'ios7-calendar', 'ios7-calendar-outline', 'ios7-camera', 'ios7-camera-outline', 'ios7-cart', 'ios7-cart-outline', 'ios7-chatboxes', 'ios7-chatboxes-outline', 'ios7-chatbubble', 'ios7-chatbubble-outline', 'ios7-checkmark', 'ios7-checkmark-empty', 'ios7-checkmark-outline', 'ios7-circle-filled', 'ios7-circle-outline', 'ios7-clock', 'ios7-clock-outline', 'ios7-close', 'ios7-close-empty', 'ios7-close-outline', 'ios7-cloud', 'ios7-cloud-download', 'ios7-cloud-download-outline', 'ios7-cloud-outline', 'ios7-cloud-upload', 'ios7-cloud-upload-outline', 'ios7-cloudy', 'ios7-cloudy-night', 'ios7-cloudy-night-outline', 'ios7-cloudy-outline', 'ios7-cog', 'ios7-cog-outline', 'ios7-compose', 'ios7-compose-outline', 'ios7-copy', 'ios7-copy-outline', 'ios7-download', 'ios7-download-outline', 'ios7-drag', 'ios7-email', 'ios7-email-outline', 'ios7-eye', 'ios7-eye-outline', 'ios7-fastforward', 'ios7-fastforward-outline', 'ios7-filing', 'ios7-filing-outline', 'ios7-film', 'ios7-film-outline', 'ios7-flag', 'ios7-flag-outline', 'ios7-folder', 'ios7-folder-outline', 'ios7-football', 'ios7-football-outline', 'ios7-gear', 'ios7-gear-outline', 'ios7-glasses', 'ios7-glasses-outline', 'ios7-heart', 'ios7-heart-outline', 'ios7-help', 'ios7-help-empty', 'ios7-help-outline', 'ios7-home', 'ios7-home-outline', 'ios7-infinite', 'ios7-infinite-outline', 'ios7-information', 'ios7-information-empty', 'ios7-information-outline', 'ios7-ionic-outline', 'ios7-keypad', 'ios7-keypad-outline', 'ios7-lightbulb', 'ios7-lightbulb-outline', 'ios7-location', 'ios7-location-outline', 'ios7-locked', 'ios7-locked-outline', 'ios7-loop', 'ios7-loop-strong', 'ios7-medkit', 'ios7-medkit-outline', 'ios7-mic', 'ios7-mic-off', 'ios7-mic-outline', 'ios7-minus', 'ios7-minus-empty', 'ios7-minus-outline', 'ios7-monitor', 'ios7-monitor-outline', 'ios7-moon', 'ios7-moon-outline', 'ios7-more', 'ios7-more-outline', 'ios7-musical-note', 'ios7-musical-notes', 'ios7-navigate', 'ios7-navigate-outline', 'ios7-paper', 'ios7-paper-outline', 'ios7-paperplane', 'ios7-paperplane-outline', 'ios7-partlysunny', 'ios7-partlysunny-outline', 'ios7-pause', 'ios7-pause-outline', 'ios7-paw', 'ios7-paw-outline', 'ios7-people', 'ios7-people-outline', 'ios7-person', 'ios7-person-outline', 'ios7-personadd', 'ios7-personadd-outline', 'ios7-photos', 'ios7-photos-outline', 'ios7-pie', 'ios7-pie-outline', 'ios7-play', 'ios7-play-outline', 'ios7-plus', 'ios7-plus-empty', 'ios7-plus-outline', 'ios7-pricetag', 'ios7-pricetag-outline', 'ios7-pricetags', 'ios7-pricetags-outline', 'ios7-printer', 'ios7-printer-outline', 'ios7-pulse', 'ios7-pulse-strong', 'ios7-rainy', 'ios7-rainy-outline', 'ios7-recording', 'ios7-recording-outline', 'ios7-redo', 'ios7-redo-outline', 'ios7-refresh', 'ios7-refresh-empty', 'ios7-refresh-outline', 'ios7-reload', 'ios7-reloading', 'ios7-reverse-camera', 'ios7-reverse-camera-outline', 'ios7-rewind', 'ios7-rewind-outline', 'ios7-search', 'ios7-search-strong', 'ios7-settings', 'ios7-settings-strong', 'ios7-skipbackward', 'ios7-skipbackward-outline', 'ios7-skipforward', 'ios7-skipforward-outline', 'ios7-snowy', 'ios7-speedometer', 'ios7-speedometer-outline', 'ios7-star', 'ios7-star-half', 'ios7-star-outline', 'ios7-stopwatch', 'ios7-stopwatch-outline', 'ios7-sunny', 'ios7-sunny-outline', 'ios7-telephone', 'ios7-telephone-outline', 'ios7-tennisball', 'ios7-tennisball-outline', 'ios7-thunderstorm', 'ios7-thunderstorm-outline', 'ios7-time', 'ios7-time-outline', 'ios7-timer', 'ios7-timer-outline', 'ios7-toggle', 'ios7-toggle-outline', 'ios7-trash', 'ios7-trash-outline', 'ios7-undo', 'ios7-undo-outline', 'ios7-unlocked', 'ios7-unlocked-outline', 'ios7-upload', 'ios7-upload-outline', 'ios7-videocam', 'ios7-videocam-outline', 'ios7-volume-high', 'ios7-volume-low', 'ios7-wineglass', 'ios7-wineglass-outline', 'ios7-world', 'ios7-world-outline', 'ipad', 'iphone', 'ipod', 'jet', 'key', 'knife', 'laptop', 'leaf', 'levels', 'lightbulb', 'link', 'load-a', 'load-b', 'load-c', 'load-d', 'loading-a', 'loading-b', 'loading-c', 'loading-d', 'location', 'locked', 'log-in', 'log-out', 'loop', 'looping', 'magnet', 'male', 'man', 'map', 'medkit', 'merge', 'mic-a', 'mic-b', 'mic-c', 'minus', 'minus-circled', 'minus-round', 'model-s', 'monitor', 'more', 'mouse', 'music-note', 'navicon', 'navicon-round', 'navigate', 'network', 'no-smoking', 'nuclear', 'outlet', 'paper-airplane', 'paperclip', 'pause', 'person', 'person-add', 'person-stalker', 'pie-graph', 'pin', 'pinpoint', 'pizza', 'plane', 'planet', 'play', 'playstation', 'plus', 'plus-circled', 'plus-round', 'podium', 'pound', 'power', 'pricetag', 'pricetags', 'printer', 'pull-request', 'qr-scanner', 'quote', 'radio-waves', 'record', 'refresh', 'refreshing', 'reply', 'reply-all', 'ribbon-a', 'ribbon-b', 'sad', 'scissors', 'search', 'settings', 'share', 'shuffle', 'skip-backward', 'skip-forward', 'social-android', 'social-android-outline', 'social-apple', 'social-apple-outline', 'social-bitcoin', 'social-bitcoin-outline', 'social-buffer', 'social-buffer-outline', 'social-designernews', 'social-designernews-outline', 'social-dribbble', 'social-dribbble-outline', 'social-dropbox', 'social-dropbox-outline', 'social-facebook', 'social-facebook-outline', 'social-foursquare', 'social-foursquare-outline', 'social-freebsd-devil', 'social-github', 'social-github-outline', 'social-google', 'social-google-outline', 'social-googleplus', 'social-googleplus-outline', 'social-hackernews', 'social-hackernews-outline', 'social-instagram', 'social-instagram-outline', 'social-linkedin', 'social-linkedin-outline', 'social-pinterest', 'social-pinterest-outline', 'social-reddit', 'social-reddit-outline', 'social-rss', 'social-rss-outline', 'social-skype', 'social-skype-outline', 'social-tumblr', 'social-tumblr-outline', 'social-tux', 'social-twitter', 'social-twitter-outline', 'social-usd', 'social-usd-outline', 'social-vimeo', 'social-vimeo-outline', 'social-windows', 'social-windows-outline', 'social-wordpress', 'social-wordpress-outline', 'social-yahoo', 'social-yahoo-outline', 'social-youtube', 'social-youtube-outline', 'speakerphone', 'speedometer', 'spoon', 'star', 'stats-bars', 'steam', 'stop', 'thermometer', 'thumbsdown', 'thumbsup', 'toggle', 'toggle-filled', 'trash-a', 'trash-b', 'trophy', 'umbrella', 'university', 'unlocked', 'upload', 'usb', 'videocamera', 'volume-high', 'volume-low', 'volume-medium', 'volume-mute', 'wand', 'waterdrop', 'wifi', 'wineglass', 'woman', 'wrench', 'xbox' ] }, { version: '2.0.1', icons: [ '', 'alert', 'alert-circled', 'android-add', 'android-add-circle', 'android-alarm-clock', 'android-alert', 'android-apps', 'android-archive', 'android-arrow-back', 'android-arrow-down', 'android-arrow-dropdown', 'android-arrow-dropdown-circle', 'android-arrow-dropleft', 'android-arrow-dropleft-circle', 'android-arrow-dropright', 'android-arrow-dropright-circle', 'android-arrow-dropup', 'android-arrow-dropup-circle', 'android-arrow-forward', 'android-arrow-up', 'android-attach', 'android-bar', 'android-bicycle', 'android-boat', 'android-bookmark', 'android-bulb', 'android-bus', 'android-calendar', 'android-call', 'android-camera', 'android-cancel', 'android-car', 'android-cart', 'android-chat', 'android-checkbox', 'android-checkbox-blank', 'android-checkbox-outline', 'android-checkbox-outline-blank', 'android-checkmark-circle', 'android-clipboard', 'android-close', 'android-cloud', 'android-cloud-circle', 'android-cloud-done', 'android-cloud-outline', 'android-color-palette', 'android-compass', 'android-contact', 'android-contacts', 'android-contract', 'android-create', 'android-delete', 'android-desktop', 'android-document', 'android-done', 'android-done-all', 'android-download', 'android-drafts', 'android-exit', 'android-expand', 'android-favorite', 'android-favorite-outline', 'android-film', 'android-folder', 'android-folder-open', 'android-funnel', 'android-globe', 'android-hand', 'android-hangout', 'android-happy', 'android-home', 'android-image', 'android-laptop', 'android-list', 'android-locate', 'android-lock', 'android-mail', 'android-map', 'android-menu', 'android-microphone', 'android-microphone-off', 'android-more-horizontal', 'android-more-vertical', 'android-navigate', 'android-notifications', 'android-notifications-none', 'android-notifications-off', 'android-open', 'android-options', 'android-people', 'android-person', 'android-person-add', 'android-phone-landscape', 'android-phone-portrait', 'android-pin', 'android-plane', 'android-playstore', 'android-print', 'android-radio-button-off', 'android-radio-button-on', 'android-refresh', 'android-remove', 'android-remove-circle', 'android-restaurant', 'android-sad', 'android-search', 'android-send', 'android-settings', 'android-share', 'android-share-alt', 'android-star', 'android-star-half', 'android-star-outline', 'android-stopwatch', 'android-subway', 'android-sunny', 'android-sync', 'android-textsms', 'android-time', 'android-train', 'android-unlock', 'android-upload', 'android-volume-down', 'android-volume-mute', 'android-volume-off', 'android-volume-up', 'android-walk', 'android-warning', 'android-watch', 'android-wifi', 'aperture', 'archive', 'arrow-down-a', 'arrow-down-b', 'arrow-down-c', 'arrow-expand', 'arrow-graph-down-left', 'arrow-graph-down-right', 'arrow-graph-up-left', 'arrow-graph-up-right', 'arrow-left-a', 'arrow-left-b', 'arrow-left-c', 'arrow-move', 'arrow-resize', 'arrow-return-left', 'arrow-return-right', 'arrow-right-a', 'arrow-right-b', 'arrow-right-c', 'arrow-shrink', 'arrow-swap', 'arrow-up-a', 'arrow-up-b', 'arrow-up-c', 'asterisk', 'at', 'backspace', 'backspace-outline', 'bag', 'battery-charging', 'battery-empty', 'battery-full', 'battery-half', 'battery-low', 'beaker', 'beer', 'bluetooth', 'bonfire', 'bookmark', 'bowtie', 'briefcase', 'bug', 'calculator', 'calendar', 'camera', 'card', 'cash', 'chatbox', 'chatbox-working', 'chatboxes', 'chatbubble', 'chatbubble-working', 'chatbubbles', 'checkmark', 'checkmark-circled', 'checkmark-round', 'chevron-down', 'chevron-left', 'chevron-right', 'chevron-up', 'clipboard', 'clock', 'close', 'close-circled', 'close-round', 'closed-captioning', 'cloud', 'code', 'code-download', 'code-working', 'coffee', 'compass', 'compose', 'connection-bars', 'contrast', 'crop', 'cube', 'disc', 'document', 'document-text', 'drag', 'earth', 'easel', 'edit', 'egg', 'eject', 'email', 'email-unread', 'erlenmeyer-flask', 'erlenmeyer-flask-bubbles', 'eye', 'eye-disabled', 'female', 'filing', 'film-marker', 'fireball', 'flag', 'flame', 'flash', 'flash-off', 'folder', 'fork', 'fork-repo', 'forward', 'funnel', 'gear-a', 'gear-b', 'grid', 'hammer', 'happy', 'happy-outline', 'headphone', 'heart', 'heart-broken', 'help', 'help-buoy', 'help-circled', 'home', 'icecream', 'image', 'images', 'information', 'information-circled', 'ionic', 'ios-alarm', 'ios-alarm-outline', 'ios-albums', 'ios-albums-outline', 'ios-americanfootball', 'ios-americanfootball-outline', 'ios-analytics', 'ios-analytics-outline', 'ios-arrow-back', 'ios-arrow-down', 'ios-arrow-forward', 'ios-arrow-left', 'ios-arrow-right', 'ios-arrow-thin-down', 'ios-arrow-thin-left', 'ios-arrow-thin-right', 'ios-arrow-thin-up', 'ios-arrow-up', 'ios-at', 'ios-at-outline', 'ios-barcode', 'ios-barcode-outline', 'ios-baseball', 'ios-baseball-outline', 'ios-basketball', 'ios-basketball-outline', 'ios-bell', 'ios-bell-outline', 'ios-body', 'ios-body-outline', 'ios-bolt', 'ios-bolt-outline', 'ios-book', 'ios-book-outline', 'ios-bookmarks', 'ios-bookmarks-outline', 'ios-box', 'ios-box-outline', 'ios-briefcase', 'ios-briefcase-outline', 'ios-browsers', 'ios-browsers-outline', 'ios-calculator', 'ios-calculator-outline', 'ios-calendar', 'ios-calendar-outline', 'ios-camera', 'ios-camera-outline', 'ios-cart', 'ios-cart-outline', 'ios-chatboxes', 'ios-chatboxes-outline', 'ios-chatbubble', 'ios-chatbubble-outline', 'ios-checkmark', 'ios-checkmark-empty', 'ios-checkmark-outline', 'ios-circle-filled', 'ios-circle-outline', 'ios-clock', 'ios-clock-outline', 'ios-close', 'ios-close-empty', 'ios-close-outline', 'ios-cloud', 'ios-cloud-download', 'ios-cloud-download-outline', 'ios-cloud-outline', 'ios-cloud-upload', 'ios-cloud-upload-outline', 'ios-cloudy', 'ios-cloudy-night', 'ios-cloudy-night-outline', 'ios-cloudy-outline', 'ios-cog', 'ios-cog-outline', 'ios-color-filter', 'ios-color-filter-outline', 'ios-color-wand', 'ios-color-wand-outline', 'ios-compose', 'ios-compose-outline', 'ios-contact', 'ios-contact-outline', 'ios-copy', 'ios-copy-outline', 'ios-crop', 'ios-crop-strong', 'ios-download', 'ios-download-outline', 'ios-drag', 'ios-email', 'ios-email-outline', 'ios-eye', 'ios-eye-outline', 'ios-fastforward', 'ios-fastforward-outline', 'ios-filing', 'ios-filing-outline', 'ios-film', 'ios-film-outline', 'ios-flag', 'ios-flag-outline', 'ios-flame', 'ios-flame-outline', 'ios-flask', 'ios-flask-outline', 'ios-flower', 'ios-flower-outline', 'ios-folder', 'ios-folder-outline', 'ios-football', 'ios-football-outline', 'ios-game-controller-a', 'ios-game-controller-a-outline', 'ios-game-controller-b', 'ios-game-controller-b-outline', 'ios-gear', 'ios-gear-outline', 'ios-glasses', 'ios-glasses-outline', 'ios-grid-view', 'ios-grid-view-outline', 'ios-heart', 'ios-heart-outline', 'ios-help', 'ios-help-empty', 'ios-help-outline', 'ios-home', 'ios-home-outline', 'ios-infinite', 'ios-infinite-outline', 'ios-information', 'ios-information-empty', 'ios-information-outline', 'ios-ionic-outline', 'ios-keypad', 'ios-keypad-outline', 'ios-lightbulb', 'ios-lightbulb-outline', 'ios-list', 'ios-list-outline', 'ios-location', 'ios-location-outline', 'ios-locked', 'ios-locked-outline', 'ios-loop', 'ios-loop-strong', 'ios-medical', 'ios-medical-outline', 'ios-medkit', 'ios-medkit-outline', 'ios-mic', 'ios-mic-off', 'ios-mic-outline', 'ios-minus', 'ios-minus-empty', 'ios-minus-outline', 'ios-monitor', 'ios-monitor-outline', 'ios-moon', 'ios-moon-outline', 'ios-more', 'ios-more-outline', 'ios-musical-note', 'ios-musical-notes', 'ios-navigate', 'ios-navigate-outline', 'ios-nutrition', 'ios-nutrition-outline', 'ios-paper', 'ios-paper-outline', 'ios-paperplane', 'ios-paperplane-outline', 'ios-partlysunny', 'ios-partlysunny-outline', 'ios-pause', 'ios-pause-outline', 'ios-paw', 'ios-paw-outline', 'ios-people', 'ios-people-outline', 'ios-person', 'ios-person-outline', 'ios-personadd', 'ios-personadd-outline', 'ios-photos', 'ios-photos-outline', 'ios-pie', 'ios-pie-outline', 'ios-pint', 'ios-pint-outline', 'ios-play', 'ios-play-outline', 'ios-plus', 'ios-plus-empty', 'ios-plus-outline', 'ios-pricetag', 'ios-pricetag-outline', 'ios-pricetags', 'ios-pricetags-outline', 'ios-printer', 'ios-printer-outline', 'ios-pulse', 'ios-pulse-strong', 'ios-rainy', 'ios-rainy-outline', 'ios-recording', 'ios-recording-outline', 'ios-redo', 'ios-redo-outline', 'ios-refresh', 'ios-refresh-empty', 'ios-refresh-outline', 'ios-reload', 'ios-reverse-camera', 'ios-reverse-camera-outline', 'ios-rewind', 'ios-rewind-outline', 'ios-rose', 'ios-rose-outline', 'ios-search', 'ios-search-strong', 'ios-settings', 'ios-settings-strong', 'ios-shuffle', 'ios-shuffle-strong', 'ios-skipbackward', 'ios-skipbackward-outline', 'ios-skipforward', 'ios-skipforward-outline', 'ios-snowy', 'ios-speedometer', 'ios-speedometer-outline', 'ios-star', 'ios-star-half', 'ios-star-outline', 'ios-stopwatch', 'ios-stopwatch-outline', 'ios-sunny', 'ios-sunny-outline', 'ios-telephone', 'ios-telephone-outline', 'ios-tennisball', 'ios-tennisball-outline', 'ios-thunderstorm', 'ios-thunderstorm-outline', 'ios-time', 'ios-time-outline', 'ios-timer', 'ios-timer-outline', 'ios-toggle', 'ios-toggle-outline', 'ios-trash', 'ios-trash-outline', 'ios-undo', 'ios-undo-outline', 'ios-unlocked', 'ios-unlocked-outline', 'ios-upload', 'ios-upload-outline', 'ios-videocam', 'ios-videocam-outline', 'ios-volume-high', 'ios-volume-low', 'ios-wineglass', 'ios-wineglass-outline', 'ios-world', 'ios-world-outline', 'ipad', 'iphone', 'ipod', 'jet', 'key', 'knife', 'laptop', 'leaf', 'levels', 'lightbulb', 'link', 'load-a', 'load-b', 'load-c', 'load-d', 'location', 'lock-combination', 'locked', 'log-in', 'log-out', 'loop', 'magnet', 'male', 'man', 'map', 'medkit', 'merge', 'mic-a', 'mic-b', 'mic-c', 'minus', 'minus-circled', 'minus-round', 'model-s', 'monitor', 'more', 'mouse', 'music-note', 'navicon', 'navicon-round', 'navigate', 'network', 'no-smoking', 'nuclear', 'outlet', 'paintbrush', 'paintbucket', 'paper-airplane', 'paperclip', 'pause', 'person', 'person-add', 'person-stalker', 'pie-graph', 'pin', 'pinpoint', 'pizza', 'plane', 'planet', 'play', 'playstation', 'plus', 'plus-circled', 'plus-round', 'podium', 'pound', 'power', 'pricetag', 'pricetags', 'printer', 'pull-request', 'qr-scanner', 'quote', 'radio-waves', 'record', 'refresh', 'reply', 'reply-all', 'ribbon-a', 'ribbon-b', 'sad', 'sad-outline', 'scissors', 'search', 'settings', 'share', 'shuffle', 'skip-backward', 'skip-forward', 'social-android', 'social-android-outline', 'social-angular', 'social-angular-outline', 'social-apple', 'social-apple-outline', 'social-bitcoin', 'social-bitcoin-outline', 'social-buffer', 'social-buffer-outline', 'social-chrome', 'social-chrome-outline', 'social-codepen', 'social-codepen-outline', 'social-css3', 'social-css3-outline', 'social-designernews', 'social-designernews-outline', 'social-dribbble', 'social-dribbble-outline', 'social-dropbox', 'social-dropbox-outline', 'social-euro', 'social-euro-outline', 'social-facebook', 'social-facebook-outline', 'social-foursquare', 'social-foursquare-outline', 'social-freebsd-devil', 'social-github', 'social-github-outline', 'social-google', 'social-google-outline', 'social-googleplus', 'social-googleplus-outline', 'social-hackernews', 'social-hackernews-outline', 'social-html5', 'social-html5-outline', 'social-instagram', 'social-instagram-outline', 'social-javascript', 'social-javascript-outline', 'social-linkedin', 'social-linkedin-outline', 'social-markdown', 'social-nodejs', 'social-octocat', 'social-pinterest', 'social-pinterest-outline', 'social-python', 'social-reddit', 'social-reddit-outline', 'social-rss', 'social-rss-outline', 'social-sass', 'social-skype', 'social-skype-outline', 'social-snapchat', 'social-snapchat-outline', 'social-tumblr', 'social-tumblr-outline', 'social-tux', 'social-twitch', 'social-twitch-outline', 'social-twitter', 'social-twitter-outline', 'social-usd', 'social-usd-outline', 'social-vimeo', 'social-vimeo-outline', 'social-whatsapp', 'social-whatsapp-outline', 'social-windows', 'social-windows-outline', 'social-wordpress', 'social-wordpress-outline', 'social-yahoo', 'social-yahoo-outline', 'social-yen', 'social-yen-outline', 'social-youtube', 'social-youtube-outline', 'soup-can', 'soup-can-outline', 'speakerphone', 'speedometer', 'spoon', 'star', 'stats-bars', 'steam', 'stop', 'thermometer', 'thumbsdown', 'thumbsup', 'toggle', 'toggle-filled', 'transgender', 'trash-a', 'trash-b', 'trophy', 'tshirt', 'tshirt-outline', 'umbrella', 'university', 'unlocked', 'upload', 'usb', 'videocamera', 'volume-high', 'volume-low', 'volume-medium', 'volume-mute', 'wand', 'waterdrop', 'wifi', 'wineglass', 'woman', 'wrench', 'xbox' ] } ] }; var l = data.allVersions.length; data.icons = data.allVersions[l-1].icons; $.iconset_ionicon = data; })(jQuery); /*!======================================================================== * Iconset: Map Icons * Versions: 2.1.0 * https://github.com/scottdejonge/Map-Icons * ======================================================================== */ ;(function($){ var data = { iconClass: '', iconClassFix: 'map-icon-', icons: [], allVersions: [ { version: '2.1.0', icons: [ '', 'abseiling', 'accounting', 'airport', 'amusement-park', 'aquarium', 'archery', 'art-gallery', 'assistive-listening-system', 'atm', 'audio-description', 'bakery', 'bank', 'bar', 'baseball', 'beauty-salon', 'bicycle-store', 'bicycling', 'boat-ramp', 'boat-tour', 'boating', 'book-store', 'bowling-alley', 'braille', 'bus-station', 'cafe', 'campground', 'canoe', 'car-dealer', 'car-rental', 'car-repair', 'car-wash', 'casino', 'cemetery', 'chairlift', 'church', 'circle', 'city-hall', 'climbing', 'closed-captioning', 'clothing-store', 'compass', 'convenience-store', 'courthouse', 'cross-country-skiing', 'crosshairs', 'dentist', 'department-store', 'diving', 'doctor', 'electrician', 'electronics-store', 'embassy', 'expand', 'female', 'finance', 'fire-station', 'fish-cleaning', 'fishing', 'fishing-pier', 'florist', 'food', 'fullscreen', 'funeral-home', 'furniture-store', 'gas-station', 'general-contractor', 'golf', 'grocery-or-supermarket', 'gym', 'hair-care', 'hang-gliding', 'hardware-store', 'health', 'hindu-temple', 'horse-riding', 'hospital', 'ice-fishing', 'ice-skating', 'inline-skating', 'insurance-agency', 'jet-skiing', 'jewelry-store', 'kayaking', 'laundry', 'lawyer', 'library', 'liquor-store', 'local-government', 'location-arrow', 'locksmith', 'lodging', 'low-vision-access', 'male', 'map-pin', 'marina', 'mosque', 'motobike-trail', 'movie-rental', 'movie-theater', 'moving-company', 'museum', 'natural-feature', 'night-club', 'open-captioning', 'painter', 'park', 'parking', 'pet-store', 'pharmacy', 'physiotherapist', 'place-of-worship', 'playground', 'plumber', 'point-of-interest', 'police', 'political', 'post-box', 'post-office', 'postal-code', 'postal-code-prefix', 'rafting', 'real-estate-agency', 'restaurant', 'roofing-contractor', 'route', 'route-pin', 'rv-park', 'sailing', 'school', 'scuba-diving', 'search', 'sheild', 'shopping-mall', 'sign-language', 'skateboarding', 'ski-jumping', 'skiing', 'sledding', 'snow', 'snow-shoeing', 'snowboarding', 'snowmobile', 'spa', 'square', 'square-pin', 'square-rounded', 'stadium', 'storage', 'store', 'subway-station', 'surfing', 'swimming', 'synagogue', 'taxi-stand', 'tennis', 'toilet', 'trail-walking', 'train-station', 'transit-station', 'travel-agency', 'unisex', 'university', 'veterinary-care', 'viewing', 'volume-control-telephone', 'walking', 'waterskiing', 'whale-watching', 'wheelchair', 'wind-surfing', 'zoo', 'zoom-in', 'zoom-in-alt', 'zoom-out', 'zoom-out-alt' ] } ] }; var l = data.allVersions.length; data.icons = data.allVersions[l-1].icons; $.iconset_mapicon = data; })(jQuery); /*!======================================================================== * Iconset: Material Design * Versions: 2.0.0, 2.0.1, 2.0.2, 2.1.0, 2.1.1, 2.1.2, 2.2.0 * http://zavoloklom.github.io/material-design-iconic-font * CDN: https://cdnjs.cloudflare.com/ajax/libs/material-design-iconic-font/[VERSION]/css/material-design-iconic-font.min.css * ======================================================================== */ ;(function($){ var data = { iconClass: 'zmdi', iconClassFix: 'zmdi-', icons: [], allVersions: [ { version: '2.0.0', icons: [ '', //'zmdi', '3d-rotation', 'account', 'account-add', 'account-box', 'account-box-mail', 'account-box-o', 'account-box-phone', 'account-calendar', 'account-circle', 'account-o', 'accounts', 'accounts-add', 'accounts-alt', 'accounts-list', 'accounts-list-alt', 'accounts-outline', 'airline-seat-flat', 'airline-seat-flat-angled', 'airline-seat-individual-suite', 'airline-seat-legroom-extra', 'airline-seat-legroom-normal', 'airline-seat-legroom-reduced', 'airline-seat-recline-extra', 'airline-seat-recline-normal', 'airplay', 'alarm', 'alarm-check', 'alarm-off', 'alarm-snooze', 'album', 'alert-circle', 'alert-circle-o', 'alert-octagon', 'alert-polygon', 'alert-triangle', 'android', 'apps', 'archive', 'arrow-merge', 'arrow-missed', 'arrow-split', 'arrows', 'aspect-ratio', 'aspect-ratio-alt', 'assignment', 'assignment-account', 'assignment-alert', 'assignment-check', 'assignment-o', 'assignment-return', 'assignment-returned', 'attachment', 'attachment-alt', 'audio', 'badge-check', 'balance', 'balance-wallet', 'battery', 'battery-alert', 'battery-unknown', 'block', 'block-alt', 'bluetooth', 'bluetooth-connected', 'bluetooth-off', 'bluetooth-search', 'bluetooth-setting', 'blur', 'blur-circular', 'blur-linear', 'blur-off', 'book', 'bookmark', 'bookmark-outline', 'border-all', 'border-bottom', 'border-clear', 'border-color', 'border-horizontal', 'border-inner', 'border-left', 'border-outer', 'border-right', 'border-style', 'border-top', 'border-vertical', 'brightness-2', 'brightness-3', 'brightness-4', 'brightness-5', 'brightness-6', 'brightness-7', 'brightness-auto', 'brightness-high', 'brightness-setting', 'broken-image', 'brush', 'bug', 'cake', 'calendar', 'calendar-alt', 'calendar-check', 'calendar-note', 'camera', 'camera-add', 'camera-alt', 'camera-front', 'camera-mic', 'camera-party-mode', 'camera-rear', 'camera-roll', 'camera-switch', 'card', 'card-alert', 'card-giftcard', 'card-membership', 'card-off', 'card-sd', 'card-sim', 'card-travel', 'caret-down', 'caret-down-circle', 'caret-up', 'case', 'case-play', 'cast', 'cast-connected', 'center-focus-strong', 'center-focus-weak', 'chart', 'chart-donut', 'check', 'check-all', 'check-circle', 'check-circle-u', 'check-square', 'chevron-down', 'chevron-left', 'chevron-right', 'chevron-up', 'circle', 'circle-o', 'city', 'city-alt', 'close', 'close-circle', 'close-circle-o', 'closed-caption', 'cloud', 'cloud-circle', 'cloud-done', 'cloud-download', 'cloud-off', 'cloud-outline', 'cloud-outline-alt', 'cloud-upload', 'code', 'code-setting', 'code-smartphone', 'collection-bookmark', 'collection-case-play', 'collection-folder-image', 'collection-image', 'collection-image-o', 'collection-item', 'collection-item-1', 'collection-item-2', 'collection-item-3', 'collection-item-4', 'collection-item-5', 'collection-item-6', 'collection-item-7', 'collection-item-8', 'collection-item-9', 'collection-item-9-plus', 'collection-music', 'collection-pdf', 'collection-speaker', 'collection-text', 'collection-video', 'comment', 'comment-alert', 'comment-alt', 'comment-alt-text', 'comment-image', 'comment-list', 'comment-outline', 'comment-text', 'comment-text-alt', 'comment-video', 'comments', 'compare', 'compass', 'confirmation-number', 'copy', 'crop', 'crop-16-9', 'crop-3-2', 'crop-5-4', 'crop-7-5', 'crop-din', 'crop-free', 'crop-landscape', 'crop-portrait', 'crop-square', 'delete', 'desktop-mac', 'desktop-windows', 'developer-board', 'device-hub', 'devices', 'devices-off', 'dialpad', 'directions', 'directions-bike', 'directions-boat', 'directions-bus', 'directions-car', 'directions-railway', 'directions-run', 'directions-subway', 'directions-walk', 'disc-full', 'dns', 'dock', 'dot-circle', 'dot-circle-alt', 'download', 'edit', 'eject', 'eject-alt', 'email', 'email-open', 'equalizer', 'explicit', 'exposure', 'exposure-alt', 'eye', 'eye-off', 'face', 'fast-forward', 'fast-rewind', 'favorite', 'favorite-outline', 'file', 'file-text', 'filter-b-and-w', 'filter-center-focus', 'filter-frames', 'filter-list', 'filter-tilt-shift', 'fire', 'flag', 'flare', 'flash', 'flash-auto', 'flash-off', 'flight-land', 'flight-takeoff', 'flip', 'flip-to-back', 'flip-to-front', 'flower', 'folder', 'folder-outline', 'font', 'format-align-center', 'format-align-justify', 'format-align-left', 'format-align-right', 'format-bold', 'format-clear', 'format-clear-all', 'format-color-fill', 'format-color-reset', 'format-color-text', 'format-indent-decrease', 'format-indent-increase', 'format-italic', 'format-line-spacing', 'format-list-bulleted', 'format-list-numbered', 'format-size', 'format-strikethrough', 'format-strikethrough-s', 'format-subject', 'format-underlined', 'format-valign-bottom', 'format-valign-center', 'format-valign-top', 'forward', 'forward-10', 'forward-30', 'forward-5', 'fullscreen', 'fullscreen-alt', 'fullscreen-exit', 'functions', 'gamepad', 'gesture', 'gif', 'globe', 'globe-alt', 'globe-lock', 'gps', 'gps-dot', 'gps-off', 'gradient', 'graduation-cap', 'grain', 'graphic-eq', 'grid', 'grid-off', 'group-work', 'hd', 'hdr', 'hdr-off', 'hdr-strong', 'hdr-weak', 'headset', 'headset-mic', 'hearing', 'help', 'help-outline', 'home', 'hotel', 'hourglass', 'hourglass-outline', 'hq', 'http', 'image', 'image-alt', 'inbox', 'info', 'info-outline', 'input-antenna', 'input-composite', 'input-hdmi', 'input-power', 'input-svideo', 'invert-colors', 'invert-colors-off', 'key', 'keyboard', 'keyboard-hide', 'label', 'label-heart', 'labels', 'landscape', 'laptop', 'laptop-chromebook', 'laptop-mac', 'layers', 'leak', 'link', 'local-activity', 'local-airport', 'local-atm', 'local-bar', 'local-cafe', 'local-car-wash', 'local-convenience-store', 'local-dining', 'local-drink', 'local-florist', 'local-gas-station', 'local-grocery-store', 'local-hospital', 'local-hotel', 'local-laundry-service', 'local-library', 'local-mall', 'local-movies', 'local-offer', 'local-parking', 'local-pharmacy', 'local-phone', 'local-pizza', 'local-post-office', 'local-printshop', 'local-see', 'local-shipping', 'local-store', 'local-taxi', 'local-wc', 'lock', 'lock-open', 'lock-outline', 'long-arrow-left', 'long-arrow-return', 'long-arrow-tab', 'looks', 'loupe', 'mail-reply', 'mail-reply-all', 'mail-send', 'male', 'map', 'markunread-mailbox', 'memory', 'menu', 'mic', 'mic-off', 'mic-outline', 'mic-setting', 'minus', 'minus-circle', 'minus-circle-outline', 'minus-square', 'money', 'money-off', 'mood', 'mood-bad', 'more-vert', 'mouse', 'movie', 'movie-alt', 'my-location', 'n-1-square', 'n-2-square', 'n-3-square', 'n-4-square', 'n-5-square', 'n-6-square', 'nature', 'nature-people', 'navigation', 'neg-1', 'neg-2', 'network', 'network-locked', 'network-off', 'network-outline', 'network-setting', 'nfc', 'notifications', 'notifications-active', 'notifications-add', 'notifications-none', 'notifications-off', 'notifications-paused', 'open-in-browser', 'open-in-new', 'palette', 'panorama-horizontal', 'panorama-vertical', 'panorama-wide-angle', 'pause', 'pause-circle', 'pause-circle-outline', 'phone', 'phone-bluetooth', 'phone-end', 'phone-forwarded', 'phone-in-talk', 'phone-locked', 'phone-missed', 'phone-msg', 'phone-paused', 'phone-ring', 'phone-setting', 'phone-sip', 'photo-size-select-large', 'photo-size-select-small', 'picture-in-picture', 'pin', 'pin-account', 'pin-assistant', 'pin-drop', 'pin-help', 'pin-off', 'plaster', 'play', 'play-circle', 'play-circle-outline', 'play-for-work', 'plus', 'plus-1', 'plus-2', 'plus-circle', 'plus-circle-o', 'plus-circle-o-duplicate', 'polymer', 'portable-wifi', 'portable-wifi-changes', 'portable-wifi-off', 'power-input', 'present-to-all', 'print', 'puzzle-piece', 'radio', 'reader', 'receipt', 'redo', 'refresh', 'refresh-alt', 'refresh-sync', 'remote-control', 'remote-control-alt', 'repeat', 'repeat-one', 'replay', 'replay-10', 'replay-30', 'replay-5', 'rotate-left', 'rotate-right', 'router', 'ruler', 'satellite', 'scanner', 'screen-rotation', 'screen-rotation-lock', 'search', 'search-for', 'search-in-file', 'search-in-page', 'search-replace', 'seat', 'sec-10', 'sec-3', 'select-all', 'settings', 'settings-square', 'share', 'shield-check', 'shield-security', 'shopping-basket', 'shopping-cart', 'shuffle', 'sign-in', 'skip-next', 'skip-previous', 'slideshow', 'smartphone', 'smartphone-android', 'smartphone-download', 'smartphone-erase', 'smartphone-info', 'smartphone-iphone', 'smartphone-landscape', 'smartphone-landscape-lock', 'smartphone-lock', 'smartphone-portrait-lock', 'smartphone-ring', 'smartphone-setting', 'smartphone-setup', 'space-bar', 'speaker', 'spellcheck', 'square-down', 'square-o', 'square-right', 'star', 'star-circle', 'star-half', 'stop', 'storage', 'sun', 'surround-sound', 'swap', 'swap-alt', 'swap-vertical-circle', 'tab', 'tab-unselected', 'tablet', 'tablet-android', 'tablet-mac', 'tag-more', 'tap-and-play', 'text-format', 'texture', 'thumb-down', 'thumb-up', 'thumb-up-down', 'time', 'time-countdown', 'time-interval', 'time-restore', 'time-restore-setting', 'timer', 'timer-off', 'toll', 'tonality', 'toys', 'traffic', 'translate', 'trending-down', 'trending-flat', 'trending-up', 'triangle-down', 'triangle-up', 'tune', 'tv', 'tv-list', 'tv-play', 'undo', 'unfold-less', 'unfold-more', 'upload', 'usb', 'vibration', 'videocam', 'videocam-off', 'videocam-switch', 'view-agenda', 'view-array', 'view-carousel', 'view-column', 'view-comfy', 'view-compact', 'view-dashboard', 'view-day', 'view-headline', 'view-list', 'view-list-alt', 'view-module', 'view-quilt', 'view-stream', 'view-subtitles', 'view-toc', 'view-web', 'view-week', 'vignette', 'voicemail', 'volume-down', 'volume-mute', 'volume-off', 'volume-up', 'wallpaper', 'watch', 'wb-auto', 'widgets', 'wrap-text', 'wrench', 'zero', 'zoom-in', 'zoom-out' ] }, { version: '2.0.1', icons: [ '', //'zmdi', '3d-rotation', 'account', 'account-add', 'account-box', 'account-box-mail', 'account-box-o', 'account-box-phone', 'account-calendar', 'account-circle', 'account-o', 'accounts', 'accounts-add', 'accounts-alt', 'accounts-list', 'accounts-list-alt', 'accounts-outline', 'airline-seat-flat', 'airline-seat-flat-angled', 'airline-seat-individual-suite', 'airline-seat-legroom-extra', 'airline-seat-legroom-normal', 'airline-seat-legroom-reduced', 'airline-seat-recline-extra', 'airline-seat-recline-normal', 'airplay', 'alarm', 'alarm-check', 'alarm-off', 'alarm-snooze', 'album', 'alert-circle', 'alert-circle-o', 'alert-octagon', 'alert-polygon', 'alert-triangle', 'android', 'apps', 'archive', 'arrow-merge', 'arrow-missed', 'arrow-split', 'arrows', 'aspect-ratio', 'aspect-ratio-alt', 'assignment', 'assignment-account', 'assignment-alert', 'assignment-check', 'assignment-o', 'assignment-return', 'assignment-returned', 'attachment', 'attachment-alt', 'audio', 'badge-check', 'balance', 'balance-wallet', 'battery', 'battery-alert', 'battery-unknown', 'block', 'block-alt', 'bluetooth', 'bluetooth-connected', 'bluetooth-off', 'bluetooth-search', 'bluetooth-setting', 'blur', 'blur-circular', 'blur-linear', 'blur-off', 'book', 'bookmark', 'bookmark-outline', 'border-all', 'border-bottom', 'border-clear', 'border-color', 'border-horizontal', 'border-inner', 'border-left', 'border-outer', 'border-right', 'border-style', 'border-top', 'border-vertical', 'brightness-2', 'brightness-3', 'brightness-4', 'brightness-5', 'brightness-6', 'brightness-7', 'brightness-auto', 'brightness-high', 'brightness-setting', 'broken-image', 'brush', 'bug', 'cake', 'calendar', 'calendar-alt', 'calendar-check', 'calendar-note', 'camera', 'camera-add', 'camera-alt', 'camera-front', 'camera-mic', 'camera-party-mode', 'camera-rear', 'camera-roll', 'camera-switch', 'card', 'card-alert', 'card-giftcard', 'card-membership', 'card-off', 'card-sd', 'card-sim', 'card-travel', 'caret-down', 'caret-down-circle', 'caret-up', 'case', 'case-play', 'cast', 'cast-connected', 'center-focus-strong', 'center-focus-weak', 'chart', 'chart-donut', 'check', 'check-all', 'check-circle', 'check-circle-u', 'check-square', 'chevron-down', 'chevron-left', 'chevron-right', 'chevron-up', 'circle', 'circle-o', 'city', 'city-alt', 'close', 'close-circle', 'close-circle-o', 'closed-caption', 'cloud', 'cloud-circle', 'cloud-done', 'cloud-download', 'cloud-off', 'cloud-outline', 'cloud-outline-alt', 'cloud-upload', 'code', 'code-setting', 'code-smartphone', 'collection-bookmark', 'collection-case-play', 'collection-folder-image', 'collection-image', 'collection-image-o', 'collection-item', 'collection-item-1', 'collection-item-2', 'collection-item-3', 'collection-item-4', 'collection-item-5', 'collection-item-6', 'collection-item-7', 'collection-item-8', 'collection-item-9', 'collection-item-9-plus', 'collection-music', 'collection-pdf', 'collection-speaker', 'collection-text', 'collection-video', 'comment', 'comment-alert', 'comment-alt', 'comment-alt-text', 'comment-image', 'comment-list', 'comment-outline', 'comment-text', 'comment-text-alt', 'comment-video', 'comments', 'compare', 'compass', 'confirmation-number', 'copy', 'crop', 'crop-16-9', 'crop-3-2', 'crop-5-4', 'crop-7-5', 'crop-din', 'crop-free', 'crop-landscape', 'crop-portrait', 'crop-square', 'delete', 'desktop-mac', 'desktop-windows', 'developer-board', 'device-hub', 'devices', 'devices-off', 'dialpad', 'directions', 'directions-bike', 'directions-boat', 'directions-bus', 'directions-car', 'directions-railway', 'directions-run', 'directions-subway', 'directions-walk', 'disc-full', 'dns', 'dock', 'dot-circle', 'dot-circle-alt', 'download', 'edit', 'eject', 'eject-alt', 'email', 'email-open', 'equalizer', 'explicit', 'exposure', 'exposure-alt', 'eye', 'eye-off', 'face', 'fast-forward', 'fast-rewind', 'favorite', 'favorite-outline', 'file', 'file-text', 'filter-b-and-w', 'filter-center-focus', 'filter-frames', 'filter-list', 'filter-tilt-shift', 'fire', 'flag', 'flare', 'flash', 'flash-auto', 'flash-off', 'flight-land', 'flight-takeoff', 'flip', 'flip-to-back', 'flip-to-front', 'flower', 'folder', 'folder-outline', 'font', 'format-align-center', 'format-align-justify', 'format-align-left', 'format-align-right', 'format-bold', 'format-clear', 'format-clear-all', 'format-color-fill', 'format-color-reset', 'format-color-text', 'format-indent-decrease', 'format-indent-increase', 'format-italic', 'format-line-spacing', 'format-list-bulleted', 'format-list-numbered', 'format-size', 'format-strikethrough', 'format-strikethrough-s', 'format-subject', 'format-underlined', 'format-valign-bottom', 'format-valign-center', 'format-valign-top', 'forward', 'forward-10', 'forward-30', 'forward-5', 'fullscreen', 'fullscreen-alt', 'fullscreen-exit', 'functions', 'gamepad', 'gesture', 'gif', 'globe', 'globe-alt', 'globe-lock', 'gps', 'gps-dot', 'gps-off', 'gradient', 'graduation-cap', 'grain', 'graphic-eq', 'grid', 'grid-off', 'group-work', 'hd', 'hdr', 'hdr-off', 'hdr-strong', 'hdr-weak', 'headset', 'headset-mic', 'hearing', 'help', 'help-outline', 'home', 'hotel', 'hourglass', 'hourglass-outline', 'hq', 'http', 'image', 'image-alt', 'inbox', 'info', 'info-outline', 'input-antenna', 'input-composite', 'input-hdmi', 'input-power', 'input-svideo', 'invert-colors', 'invert-colors-off', 'key', 'keyboard', 'keyboard-hide', 'label', 'label-heart', 'labels', 'landscape', 'laptop', 'laptop-chromebook', 'laptop-mac', 'layers', 'leak', 'link', 'local-activity', 'local-airport', 'local-atm', 'local-bar', 'local-cafe', 'local-car-wash', 'local-convenience-store', 'local-dining', 'local-drink', 'local-florist', 'local-gas-station', 'local-grocery-store', 'local-hospital', 'local-hotel', 'local-laundry-service', 'local-library', 'local-mall', 'local-movies', 'local-offer', 'local-parking', 'local-pharmacy', 'local-phone', 'local-pizza', 'local-post-office', 'local-printshop', 'local-see', 'local-shipping', 'local-store', 'local-taxi', 'local-wc', 'lock', 'lock-open', 'lock-outline', 'long-arrow-left', 'long-arrow-return', 'long-arrow-tab', 'looks', 'loupe', 'mail-reply', 'mail-reply-all', 'mail-send', 'male', 'map', 'markunread-mailbox', 'memory', 'menu', 'mic', 'mic-off', 'mic-outline', 'mic-setting', 'minus', 'minus-circle', 'minus-circle-outline', 'minus-square', 'money', 'money-off', 'mood', 'mood-bad', 'more-vert', 'mouse', 'movie', 'movie-alt', 'my-location', 'n-1-square', 'n-2-square', 'n-3-square', 'n-4-square', 'n-5-square', 'n-6-square', 'nature', 'nature-people', 'navigation', 'neg-1', 'neg-2', 'network', 'network-locked', 'network-off', 'network-outline', 'network-setting', 'nfc', 'notifications', 'notifications-active', 'notifications-add', 'notifications-none', 'notifications-off', 'notifications-paused', 'open-in-browser', 'open-in-new', 'palette', 'panorama-horizontal', 'panorama-vertical', 'panorama-wide-angle', 'pause', 'pause-circle', 'pause-circle-outline', 'phone', 'phone-bluetooth', 'phone-end', 'phone-forwarded', 'phone-in-talk', 'phone-locked', 'phone-missed', 'phone-msg', 'phone-paused', 'phone-ring', 'phone-setting', 'phone-sip', 'photo-size-select-large', 'photo-size-select-small', 'picture-in-picture', 'pin', 'pin-account', 'pin-assistant', 'pin-drop', 'pin-help', 'pin-off', 'plaster', 'play', 'play-circle', 'play-circle-outline', 'play-for-work', 'plus', 'plus-1', 'plus-2', 'plus-circle', 'plus-circle-o', 'plus-circle-o-duplicate', 'polymer', 'portable-wifi', 'portable-wifi-changes', 'portable-wifi-off', 'power-input', 'present-to-all', 'print', 'puzzle-piece', 'radio', 'reader', 'receipt', 'redo', 'refresh', 'refresh-alt', 'refresh-sync', 'remote-control', 'remote-control-alt', 'repeat', 'repeat-one', 'replay', 'replay-10', 'replay-30', 'replay-5', 'rotate-left', 'rotate-right', 'router', 'ruler', 'satellite', 'scanner', 'screen-rotation', 'screen-rotation-lock', 'search', 'search-for', 'search-in-file', 'search-in-page', 'search-replace', 'seat', 'sec-10', 'sec-3', 'select-all', 'settings', 'settings-square', 'share', 'shield-check', 'shield-security', 'shopping-basket', 'shopping-cart', 'shuffle', 'sign-in', 'skip-next', 'skip-previous', 'slideshow', 'smartphone', 'smartphone-android', 'smartphone-download', 'smartphone-erase', 'smartphone-info', 'smartphone-iphone', 'smartphone-landscape', 'smartphone-landscape-lock', 'smartphone-lock', 'smartphone-portrait-lock', 'smartphone-ring', 'smartphone-setting', 'smartphone-setup', 'space-bar', 'speaker', 'spellcheck', 'square-down', 'square-o', 'square-right', 'star', 'star-circle', 'star-half', 'stop', 'storage', 'sun', 'surround-sound', 'swap', 'swap-alt', 'swap-vertical-circle', 'tab', 'tab-unselected', 'tablet', 'tablet-android', 'tablet-mac', 'tag-more', 'tap-and-play', 'text-format', 'texture', 'thumb-down', 'thumb-up', 'thumb-up-down', 'time', 'time-countdown', 'time-interval', 'time-restore', 'time-restore-setting', 'timer', 'timer-off', 'toll', 'tonality', 'toys', 'traffic', 'translate', 'trending-down', 'trending-flat', 'trending-up', 'triangle-down', 'triangle-up', 'tune', 'tv', 'tv-list', 'tv-play', 'undo', 'unfold-less', 'unfold-more', 'upload', 'usb', 'vibration', 'videocam', 'videocam-off', 'videocam-switch', 'view-agenda', 'view-array', 'view-carousel', 'view-column', 'view-comfy', 'view-compact', 'view-dashboard', 'view-day', 'view-headline', 'view-list', 'view-list-alt', 'view-module', 'view-quilt', 'view-stream', 'view-subtitles', 'view-toc', 'view-web', 'view-week', 'vignette', 'voicemail', 'volume-down', 'volume-mute', 'volume-off', 'volume-up', 'wallpaper', 'watch', 'wb-auto', 'widgets', 'wrap-text', 'wrench', 'zero', 'zoom-in', 'zoom-out' ] }, { version: '2.0.2', icons: [ '', //'zmdi', '3d-rotation', 'account', 'account-add', 'account-box', 'account-box-mail', 'account-box-o', 'account-box-phone', 'account-calendar', 'account-circle', 'account-o', 'accounts', 'accounts-add', 'accounts-alt', 'accounts-list', 'accounts-list-alt', 'accounts-outline', 'airline-seat-flat', 'airline-seat-flat-angled', 'airline-seat-individual-suite', 'airline-seat-legroom-extra', 'airline-seat-legroom-normal', 'airline-seat-legroom-reduced', 'airline-seat-recline-extra', 'airline-seat-recline-normal', 'airplay', 'alarm', 'alarm-check', 'alarm-off', 'alarm-snooze', 'album', 'alert-circle', 'alert-circle-o', 'alert-octagon', 'alert-polygon', 'alert-triangle', 'android', 'apps', 'archive', 'arrow-merge', 'arrow-missed', 'arrow-split', 'arrows', 'aspect-ratio', 'aspect-ratio-alt', 'assignment', 'assignment-account', 'assignment-alert', 'assignment-check', 'assignment-o', 'assignment-return', 'assignment-returned', 'attachment', 'attachment-alt', 'audio', 'badge-check', 'balance', 'balance-wallet', 'battery', 'battery-alert', 'battery-unknown', 'block', 'block-alt', 'bluetooth', 'bluetooth-connected', 'bluetooth-off', 'bluetooth-search', 'bluetooth-setting', 'blur', 'blur-circular', 'blur-linear', 'blur-off', 'book', 'bookmark', 'bookmark-outline', 'border-all', 'border-bottom', 'border-clear', 'border-color', 'border-horizontal', 'border-inner', 'border-left', 'border-outer', 'border-right', 'border-style', 'border-top', 'border-vertical', 'brightness-2', 'brightness-3', 'brightness-4', 'brightness-5', 'brightness-6', 'brightness-7', 'brightness-auto', 'brightness-high', 'brightness-setting', 'broken-image', 'brush', 'bug', 'cake', 'calendar', 'calendar-alt', 'calendar-check', 'calendar-note', 'camera', 'camera-add', 'camera-alt', 'camera-front', 'camera-mic', 'camera-party-mode', 'camera-rear', 'camera-roll', 'camera-switch', 'card', 'card-alert', 'card-giftcard', 'card-membership', 'card-off', 'card-sd', 'card-sim', 'card-travel', 'caret-down', 'caret-down-circle', 'caret-up', 'case', 'case-play', 'cast', 'cast-connected', 'center-focus-strong', 'center-focus-weak', 'chart', 'chart-donut', 'check', 'check-all', 'check-circle', 'check-circle-u', 'check-square', 'chevron-down', 'chevron-left', 'chevron-right', 'chevron-up', 'circle', 'circle-o', 'city', 'city-alt', 'close', 'close-circle', 'close-circle-o', 'closed-caption', 'cloud', 'cloud-circle', 'cloud-done', 'cloud-download', 'cloud-off', 'cloud-outline', 'cloud-outline-alt', 'cloud-upload', 'code', 'code-setting', 'code-smartphone', 'collection-bookmark', 'collection-case-play', 'collection-folder-image', 'collection-image', 'collection-image-o', 'collection-item', 'collection-item-1', 'collection-item-2', 'collection-item-3', 'collection-item-4', 'collection-item-5', 'collection-item-6', 'collection-item-7', 'collection-item-8', 'collection-item-9', 'collection-item-9-plus', 'collection-music', 'collection-pdf', 'collection-speaker', 'collection-text', 'collection-video', 'comment', 'comment-alert', 'comment-alt', 'comment-alt-text', 'comment-image', 'comment-list', 'comment-outline', 'comment-text', 'comment-text-alt', 'comment-video', 'comments', 'compare', 'compass', 'confirmation-number', 'copy', 'crop', 'crop-16-9', 'crop-3-2', 'crop-5-4', 'crop-7-5', 'crop-din', 'crop-free', 'crop-landscape', 'crop-portrait', 'crop-square', 'delete', 'desktop-mac', 'desktop-windows', 'developer-board', 'device-hub', 'devices', 'devices-off', 'dialpad', 'directions', 'directions-bike', 'directions-boat', 'directions-bus', 'directions-car', 'directions-railway', 'directions-run', 'directions-subway', 'directions-walk', 'disc-full', 'dns', 'dock', 'dot-circle', 'dot-circle-alt', 'download', 'edit', 'eject', 'eject-alt', 'email', 'email-open', 'equalizer', 'explicit', 'exposure', 'exposure-alt', 'eye', 'eye-off', 'face', 'fast-forward', 'fast-rewind', 'favorite', 'favorite-outline', 'file', 'file-text', 'filter-b-and-w', 'filter-center-focus', 'filter-frames', 'filter-list', 'filter-tilt-shift', 'fire', 'flag', 'flare', 'flash', 'flash-auto', 'flash-off', 'flight-land', 'flight-takeoff', 'flip', 'flip-to-back', 'flip-to-front', 'flower', 'folder', 'folder-outline', 'font', 'format-align-center', 'format-align-justify', 'format-align-left', 'format-align-right', 'format-bold', 'format-clear', 'format-clear-all', 'format-color-fill', 'format-color-reset', 'format-color-text', 'format-indent-decrease', 'format-indent-increase', 'format-italic', 'format-line-spacing', 'format-list-bulleted', 'format-list-numbered', 'format-size', 'format-strikethrough', 'format-strikethrough-s', 'format-subject', 'format-underlined', 'format-valign-bottom', 'format-valign-center', 'format-valign-top', 'forward', 'forward-10', 'forward-30', 'forward-5', 'fullscreen', 'fullscreen-alt', 'fullscreen-exit', 'functions', 'gamepad', 'gesture', 'gif', 'globe', 'globe-alt', 'globe-lock', 'gps', 'gps-dot', 'gps-off', 'gradient', 'graduation-cap', 'grain', 'graphic-eq', 'grid', 'grid-off', 'group-work', 'hd', 'hdr', 'hdr-off', 'hdr-strong', 'hdr-weak', 'headset', 'headset-mic', 'hearing', 'help', 'help-outline', 'home', 'hotel', 'hourglass', 'hourglass-outline', 'hq', 'http', 'image', 'image-alt', 'inbox', 'info', 'info-outline', 'input-antenna', 'input-composite', 'input-hdmi', 'input-power', 'input-svideo', 'invert-colors', 'invert-colors-off', 'key', 'keyboard', 'keyboard-hide', 'label', 'label-heart', 'labels', 'landscape', 'laptop', 'laptop-chromebook', 'laptop-mac', 'layers', 'leak', 'link', 'local-activity', 'local-airport', 'local-atm', 'local-bar', 'local-cafe', 'local-car-wash', 'local-convenience-store', 'local-dining', 'local-drink', 'local-florist', 'local-gas-station', 'local-grocery-store', 'local-hospital', 'local-hotel', 'local-laundry-service', 'local-library', 'local-mall', 'local-movies', 'local-offer', 'local-parking', 'local-pharmacy', 'local-phone', 'local-pizza', 'local-post-office', 'local-printshop', 'local-see', 'local-shipping', 'local-store', 'local-taxi', 'local-wc', 'lock', 'lock-open', 'lock-outline', 'long-arrow-left', 'long-arrow-return', 'long-arrow-tab', 'looks', 'loupe', 'mail-reply', 'mail-reply-all', 'mail-send', 'male', 'map', 'markunread-mailbox', 'memory', 'menu', 'mic', 'mic-off', 'mic-outline', 'mic-setting', 'minus', 'minus-circle', 'minus-circle-outline', 'minus-square', 'money', 'money-off', 'mood', 'mood-bad', 'more-vert', 'mouse', 'movie', 'movie-alt', 'my-location', 'n-1-square', 'n-2-square', 'n-3-square', 'n-4-square', 'n-5-square', 'n-6-square', 'nature', 'nature-people', 'navigation', 'neg-1', 'neg-2', 'network', 'network-locked', 'network-off', 'network-outline', 'network-setting', 'nfc', 'notifications', 'notifications-active', 'notifications-add', 'notifications-none', 'notifications-off', 'notifications-paused', 'open-in-browser', 'open-in-new', 'palette', 'panorama-horizontal', 'panorama-vertical', 'panorama-wide-angle', 'pause', 'pause-circle', 'pause-circle-outline', 'phone', 'phone-bluetooth', 'phone-end', 'phone-forwarded', 'phone-in-talk', 'phone-locked', 'phone-missed', 'phone-msg', 'phone-paused', 'phone-ring', 'phone-setting', 'phone-sip', 'photo-size-select-large', 'photo-size-select-small', 'picture-in-picture', 'pin', 'pin-account', 'pin-assistant', 'pin-drop', 'pin-help', 'pin-off', 'plaster', 'play', 'play-circle', 'play-circle-outline', 'play-for-work', 'plus', 'plus-1', 'plus-2', 'plus-circle', 'plus-circle-o', 'plus-circle-o-duplicate', 'polymer', 'portable-wifi', 'portable-wifi-changes', 'portable-wifi-off', 'power-input', 'present-to-all', 'print', 'puzzle-piece', 'radio', 'reader', 'receipt', 'redo', 'refresh', 'refresh-alt', 'refresh-sync', 'remote-control', 'remote-control-alt', 'repeat', 'repeat-one', 'replay', 'replay-10', 'replay-30', 'replay-5', 'rotate-left', 'rotate-right', 'router', 'ruler', 'satellite', 'scanner', 'screen-rotation', 'screen-rotation-lock', 'search', 'search-for', 'search-in-file', 'search-in-page', 'search-replace', 'seat', 'sec-10', 'sec-3', 'select-all', 'settings', 'settings-square', 'share', 'shield-check', 'shield-security', 'shopping-basket', 'shopping-cart', 'shuffle', 'sign-in', 'skip-next', 'skip-previous', 'slideshow', 'smartphone', 'smartphone-android', 'smartphone-download', 'smartphone-erase', 'smartphone-info', 'smartphone-iphone', 'smartphone-landscape', 'smartphone-landscape-lock', 'smartphone-lock', 'smartphone-portrait-lock', 'smartphone-ring', 'smartphone-setting', 'smartphone-setup', 'space-bar', 'speaker', 'spellcheck', 'square-down', 'square-o', 'square-right', 'star', 'star-circle', 'star-half', 'stop', 'storage', 'sun', 'surround-sound', 'swap', 'swap-alt', 'swap-vertical-circle', 'tab', 'tab-unselected', 'tablet', 'tablet-android', 'tablet-mac', 'tag-more', 'tap-and-play', 'text-format', 'texture', 'thumb-down', 'thumb-up', 'thumb-up-down', 'time', 'time-countdown', 'time-interval', 'time-restore', 'time-restore-setting', 'timer', 'timer-off', 'toll', 'tonality', 'toys', 'traffic', 'translate', 'trending-down', 'trending-flat', 'trending-up', 'triangle-down', 'triangle-up', 'tune', 'tv', 'tv-list', 'tv-play', 'undo', 'unfold-less', 'unfold-more', 'upload', 'usb', 'vibration', 'videocam', 'videocam-off', 'videocam-switch', 'view-agenda', 'view-array', 'view-carousel', 'view-column', 'view-comfy', 'view-compact', 'view-dashboard', 'view-day', 'view-headline', 'view-list', 'view-list-alt', 'view-module', 'view-quilt', 'view-stream', 'view-subtitles', 'view-toc', 'view-web', 'view-week', 'vignette', 'voicemail', 'volume-down', 'volume-mute', 'volume-off', 'volume-up', 'wallpaper', 'watch', 'wb-auto', 'widgets', 'wrap-text', 'wrench', 'zero', 'zoom-in', 'zoom-out' ] }, { version: '2.1.0', icons: [ '', //'zmdi', '3d-rotation', 'account', 'account-add', 'account-box', 'account-box-mail', 'account-box-o', 'account-box-phone', 'account-calendar', 'account-circle', 'account-o', 'accounts', 'accounts-add', 'accounts-alt', 'accounts-list', 'accounts-list-alt', 'accounts-outline', 'airline-seat-flat', 'airline-seat-flat-angled', 'airline-seat-individual-suite', 'airline-seat-legroom-extra', 'airline-seat-legroom-normal', 'airline-seat-legroom-reduced', 'airline-seat-recline-extra', 'airline-seat-recline-normal', 'airplane', 'airplane-off', 'airplay', 'alarm', 'alarm-check', 'alarm-off', 'alarm-plus', 'alarm-snooze', 'album', 'alert-circle', 'alert-circle-o', 'alert-octagon', 'alert-polygon', 'alert-triangle', 'android', 'android-alt', 'apple', 'apps', 'archive', 'arrow-left', 'arrow-left-bottom', 'arrow-merge', 'arrow-missed', 'arrow-right', 'arrow-right-top', 'arrow-split', 'arrows', 'aspect-ratio', 'aspect-ratio-alt', 'assignment', 'assignment-account', 'assignment-alert', 'assignment-check', 'assignment-o', 'assignment-return', 'assignment-returned', 'attachment', 'attachment-alt', 'audio', 'badge-check', 'balance', 'balance-wallet', 'battery', 'battery-alert', 'battery-flash', 'battery-unknown', 'behance', 'bike', 'block', 'block-alt', 'bluetooth', 'bluetooth-connected', 'bluetooth-off', 'bluetooth-search', 'bluetooth-setting', 'blur', 'blur-circular', 'blur-linear', 'blur-off', 'boat', 'book', 'book-image', 'bookmark', 'bookmark-outline', 'border-all', 'border-bottom', 'border-clear', 'border-color', 'border-horizontal', 'border-inner', 'border-left', 'border-outer', 'border-right', 'border-style', 'border-top', 'border-vertical', 'brightness-2', 'brightness-3', 'brightness-4', 'brightness-5', 'brightness-6', 'brightness-7', 'brightness-auto', 'brightness-high', 'brightness-setting', 'broken-image', 'brush', 'bug', 'bus', 'cake', 'calendar', 'calendar-alt', 'calendar-check', 'calendar-close', 'calendar-note', 'camera', 'camera-add', 'camera-alt', 'camera-bw', 'camera-front', 'camera-mic', 'camera-party-mode', 'camera-rear', 'camera-roll', 'camera-switch', 'car', 'car-taxi', 'car-wash', 'card', 'card-alert', 'card-giftcard', 'card-membership', 'card-off', 'card-sd', 'card-sim', 'card-travel', 'caret-down', 'caret-down-circle', 'caret-left', 'caret-left-circle', 'caret-right', 'caret-right-circle', 'caret-up', 'caret-up-circle', 'case', 'case-check', 'case-download', 'case-play', 'cast', 'cast-connected', 'center-focus-strong', 'center-focus-weak', 'chart', 'chart-donut', 'check', 'check-all', 'check-circle', 'check-circle-u', 'check-square', 'chevron-down', 'chevron-left', 'chevron-right', 'chevron-up', 'circle', 'circle-o', 'city', 'city-alt', 'close', 'close-circle', 'close-circle-o', 'closed-caption', 'cloud', 'cloud-box', 'cloud-circle', 'cloud-done', 'cloud-download', 'cloud-off', 'cloud-outline', 'cloud-outline-alt', 'cloud-upload', 'cocktail', 'code', 'code-setting', 'code-smartphone', 'codepen', 'coffee', 'collection-bookmark', 'collection-case-play', 'collection-folder-image', 'collection-image', 'collection-image-o', 'collection-item', 'collection-item-1', 'collection-item-2', 'collection-item-3', 'collection-item-4', 'collection-item-5', 'collection-item-6', 'collection-item-7', 'collection-item-8', 'collection-item-9', 'collection-item-9-plus', 'collection-music', 'collection-pdf', 'collection-plus', 'collection-speaker', 'collection-text', 'collection-video', 'comment', 'comment-alert', 'comment-alt', 'comment-alt-text', 'comment-edit', 'comment-image', 'comment-list', 'comment-more', 'comment-outline', 'comment-text', 'comment-text-alt', 'comment-video', 'comments', 'compare', 'compass', 'confirmation-number', 'copy', 'crop', 'crop-16-9', 'crop-3-2', 'crop-5-4', 'crop-7-5', 'crop-din', 'crop-free', 'crop-landscape', 'crop-portrait', 'crop-square', 'cutlery', 'delete', 'desktop-mac', 'desktop-windows', 'developer-board', 'device-hub', 'devices', 'devices-off', 'dialpad', 'directions', 'directions-bike', 'directions-boat', 'directions-bus', 'directions-car', 'directions-railway', 'directions-run', 'directions-subway', 'directions-walk', 'disc-full', 'dns', 'dock', 'dot-circle', 'dot-circle-alt', 'download', 'dribbble', 'drink', 'dropbox', 'edit', 'eject', 'eject-alt', 'email', 'email-open', 'equalizer', 'evernote', 'explicit', 'exposure', 'exposure-alt', 'eye', 'eye-off', 'eyedropper', 'face', 'facebook', 'facebook-box', 'fast-forward', 'fast-rewind', 'favorite', 'favorite-outline', 'female', 'file', 'file-plus', 'file-text', 'filter-b-and-w', 'filter-center-focus', 'filter-frames', 'filter-list', 'filter-tilt-shift', 'fire', 'flag', 'flare', 'flash', 'flash-auto', 'flash-off', 'flight-land', 'flight-takeoff', 'flip', 'flip-to-back', 'flip-to-front', 'floppy', 'flower', 'flower-alt', 'folder', 'folder-outline', 'folder-person', 'folder-star', 'folder-star-alt', 'font', 'format-align-center', 'format-align-justify', 'format-align-left', 'format-align-right', 'format-bold', 'format-clear', 'format-clear-all', 'format-color-fill', 'format-color-reset', 'format-color-text', 'format-indent-decrease', 'format-indent-increase', 'format-italic', 'format-line-spacing', 'format-list-bulleted', 'format-list-numbered', 'format-ltr', 'format-rtl', 'format-size', 'format-strikethrough', 'format-strikethrough-s', 'format-subject', 'format-underlined', 'format-valign-bottom', 'format-valign-center', 'format-valign-top', 'forward', 'forward-10', 'forward-30', 'forward-5', 'fullscreen', 'fullscreen-alt', 'fullscreen-exit', 'functions', 'gamepad', 'gas-station', 'gesture', 'gif', 'github', 'github-box', 'globe', 'globe-alt', 'globe-lock', 'google', 'google-drive', 'google-earth', 'google-glass', 'google-maps', 'google-pages', 'google-play', 'google-plus', 'google-plus-box', 'gps', 'gps-dot', 'gps-off', 'gradient', 'graduation-cap', 'grain', 'graphic-eq', 'grid', 'grid-off', 'group-work', 'hd', 'hdr', 'hdr-off', 'hdr-strong', 'hdr-weak', 'headset', 'headset-mic', 'hearing', 'help', 'help-outline', 'home', 'hospital', 'hospital-alt', 'hotel', 'hourglass', 'hourglass-alt', 'hourglass-outline', 'hq', 'http', 'image', 'image-alt', 'image-o', 'inbox', 'info', 'info-outline', 'input-antenna', 'input-composite', 'input-hdmi', 'input-power', 'input-svideo', 'instagram', 'invert-colors', 'invert-colors-off', 'iridescent', 'key', 'keyboard', 'keyboard-hide', 'label', 'label-alt', 'label-alt-outline', 'label-heart', 'labels', 'lamp', 'landscape', 'language-css3', 'language-html5', 'language-javascript', 'language-python', 'language-python-alt', 'laptop', 'laptop-chromebook', 'laptop-mac', 'lastfm', 'layers', 'layers-off', 'leak', 'leak-off', 'library', 'link', 'linkedin-box', 'local-activity', 'local-airport', 'local-atm', 'local-bar', 'local-cafe', 'local-car-wash', 'local-convenience-store', 'local-dining', 'local-drink', 'local-florist', 'local-gas-station', 'local-grocery-store', 'local-hospital', 'local-hotel', 'local-laundry-service', 'local-library', 'local-mall', 'local-movies', 'local-offer', 'local-parking', 'local-pharmacy', 'local-phone', 'local-pizza', 'local-post-office', 'local-printshop', 'local-see', 'local-shipping', 'local-store', 'local-taxi', 'local-wc', 'lock', 'lock-open', 'lock-outline', 'long-arrow-down', 'long-arrow-left', 'long-arrow-return', 'long-arrow-right', 'long-arrow-tab', 'long-arrow-up', 'looks', 'loupe', 'mail-reply', 'mail-reply-all', 'mail-send', 'male', 'male-alt', 'male-female', 'mall', 'map', 'markunread-mailbox', 'memory', 'menu', 'mic', 'mic-off', 'mic-outline', 'mic-setting', 'minus', 'minus-circle', 'minus-circle-outline', 'minus-square', 'money', 'money-box', 'money-off', 'mood', 'mood-bad', 'more', 'more-vert', 'mouse', 'movie', 'movie-alt', 'my-location', 'n-1-square', 'n-2-square', 'n-3-square', 'n-4-square', 'n-5-square', 'n-6-square', 'nature', 'nature-people', 'navigation', 'neg-1', 'neg-2', 'network', 'network-alert', 'network-locked', 'network-off', 'network-outline', 'network-setting', 'nfc', 'notifications', 'notifications-active', 'notifications-add', 'notifications-none', 'notifications-off', 'notifications-paused', 'open-in-browser', 'open-in-new', 'palette', 'panorama-horizontal', 'panorama-vertical', 'panorama-wide-angle', 'parking', 'pause', 'pause-circle', 'pause-circle-outline', 'paypal', 'phone', 'phone-bluetooth', 'phone-end', 'phone-forwarded', 'phone-in-talk', 'phone-locked', 'phone-missed', 'phone-msg', 'phone-paused', 'phone-ring', 'phone-setting', 'phone-sip', 'photo-size-select-large', 'photo-size-select-small', 'picture-in-picture', 'pin', 'pin-account', 'pin-assistant', 'pin-drop', 'pin-help', 'pin-off', 'pinterest-box', 'pizza', 'plaster', 'play', 'play-circle', 'play-circle-outline', 'play-for-work', 'playlist-audio', 'playlist-plus', 'plus', 'plus-1', 'plus-2', 'plus-circle', 'plus-circle-o', 'plus-circle-o-duplicate', 'plus-square', 'pocket', 'polymer', 'portable-wifi', 'portable-wifi-changes', 'portable-wifi-off', 'power', 'power-input', 'power-setting', 'present-to-all', 'print', 'puzzle-piece', 'quote', 'radio', 'railway', 'reader', 'receipt', 'redo', 'refresh', 'refresh-alt', 'refresh-sync', 'refresh-sync-alert', 'refresh-sync-off', 'remote-control', 'remote-control-alt', 'repeat', 'repeat-one', 'replay', 'replay-10', 'replay-30', 'replay-5', 'roller', 'rotate-ccw', 'rotate-cw', 'rotate-left', 'rotate-right', 'router', 'ruler', 'run', 'satellite', 'scanner', 'scissors', 'screen-rotation', 'screen-rotation-lock', 'search', 'search-for', 'search-in-file', 'search-in-page', 'search-replace', 'seat', 'sec-10', 'sec-3', 'select-all', 'settings', 'settings-square', 'share', 'shield-check', 'shield-security', 'shopping-basket', 'shopping-cart', 'shopping-cart-plus', 'shuffle', 'sign-in', 'skip-next', 'skip-previous', 'slideshow', 'smartphone', 'smartphone-android', 'smartphone-download', 'smartphone-erase', 'smartphone-info', 'smartphone-iphone', 'smartphone-landscape', 'smartphone-landscape-lock', 'smartphone-lock', 'smartphone-portrait-lock', 'smartphone-ring', 'smartphone-setting', 'smartphone-setup', 'sort-amount-asc', 'sort-amount-desc', 'sort-asc', 'sort-desc', 'space-bar', 'speaker', 'spellcheck', 'square-down', 'square-o', 'square-right', 'star', 'star-circle', 'star-half', 'star-outline', 'steam', 'steam-square', 'stop', 'storage', 'store', 'store-24', 'subway', 'sun', 'surround-sound', 'swap', 'swap-alt', 'swap-vertical', 'swap-vertical-circle', 'tab', 'tab-unselected', 'tablet', 'tablet-android', 'tablet-mac', 'tag', 'tag-close', 'tag-more', 'tap-and-play', 'text-format', 'texture', 'thumb-down', 'thumb-up', 'thumb-up-down', 'ticket-star', 'time', 'time-countdown', 'time-interval', 'time-restore', 'time-restore-setting', 'timer', 'timer-off', 'toll', 'tonality', 'toys', 'traffic', 'transform', 'translate', 'trending-down', 'trending-flat', 'trending-up', 'triangle-down', 'triangle-up', 'truck', 'tune', 'turning-sign', 'tv', 'tv-alt-play', 'tv-list', 'tv-play', 'twitter', 'twitter-box', 'undo', 'unfold-less', 'unfold-more', 'upload', 'usb', 'vibration', 'videocam', 'videocam-off', 'videocam-switch', 'view-agenda', 'view-array', 'view-carousel', 'view-column', 'view-comfy', 'view-compact', 'view-dashboard', 'view-day', 'view-headline', 'view-list', 'view-list-alt', 'view-module', 'view-quilt', 'view-stream', 'view-subtitles', 'view-toc', 'view-web', 'view-week', 'vignette', 'vk', 'voicemail', 'volume-down', 'volume-mute', 'volume-off', 'volume-up', 'walk', 'wallpaper', 'washing-machine', 'watch', 'wb-auto', 'widgets', 'wifi', 'wifi-alt', 'wifi-alt-2', 'wifi-info', 'wifi-lock', 'wifi-off', 'wifi-outline', 'wikipedia', 'window-maximize', 'window-minimize', 'window-restore', 'windows', 'wrap-text', 'wrench', 'zero', 'zoom-in', 'zoom-out' ] }, { version: '2.1.1', icons: [ '', //'zmdi', '3d-rotation', 'account', 'account-add', 'account-box', 'account-box-mail', 'account-box-o', 'account-box-phone', 'account-calendar', 'account-circle', 'account-o', 'accounts', 'accounts-add', 'accounts-alt', 'accounts-list', 'accounts-list-alt', 'accounts-outline', 'airline-seat-flat', 'airline-seat-flat-angled', 'airline-seat-individual-suite', 'airline-seat-legroom-extra', 'airline-seat-legroom-normal', 'airline-seat-legroom-reduced', 'airline-seat-recline-extra', 'airline-seat-recline-normal', 'airplane', 'airplane-off', 'airplay', 'alarm', 'alarm-check', 'alarm-off', 'alarm-plus', 'alarm-snooze', 'album', 'alert-circle', 'alert-circle-o', 'alert-octagon', 'alert-polygon', 'alert-triangle', 'android', 'android-alt', 'apple', 'apps', 'archive', 'arrow-left', 'arrow-left-bottom', 'arrow-merge', 'arrow-missed', 'arrow-right', 'arrow-right-top', 'arrow-split', 'arrows', 'aspect-ratio', 'aspect-ratio-alt', 'assignment', 'assignment-account', 'assignment-alert', 'assignment-check', 'assignment-o', 'assignment-return', 'assignment-returned', 'attachment', 'attachment-alt', 'audio', 'badge-check', 'balance', 'balance-wallet', 'battery', 'battery-alert', 'battery-flash', 'battery-unknown', 'behance', 'bike', 'block', 'block-alt', 'bluetooth', 'bluetooth-connected', 'bluetooth-off', 'bluetooth-search', 'bluetooth-setting', 'blur', 'blur-circular', 'blur-linear', 'blur-off', 'boat', 'book', 'book-image', 'bookmark', 'bookmark-outline', 'border-all', 'border-bottom', 'border-clear', 'border-color', 'border-horizontal', 'border-inner', 'border-left', 'border-outer', 'border-right', 'border-style', 'border-top', 'border-vertical', 'brightness-2', 'brightness-3', 'brightness-4', 'brightness-5', 'brightness-6', 'brightness-7', 'brightness-auto', 'brightness-high', 'brightness-setting', 'broken-image', 'brush', 'bug', 'bus', 'cake', 'calendar', 'calendar-alt', 'calendar-check', 'calendar-close', 'calendar-note', 'camera', 'camera-add', 'camera-alt', 'camera-bw', 'camera-front', 'camera-mic', 'camera-party-mode', 'camera-rear', 'camera-roll', 'camera-switch', 'car', 'car-taxi', 'car-wash', 'card', 'card-alert', 'card-giftcard', 'card-membership', 'card-off', 'card-sd', 'card-sim', 'card-travel', 'caret-down', 'caret-down-circle', 'caret-left', 'caret-left-circle', 'caret-right', 'caret-right-circle', 'caret-up', 'caret-up-circle', 'case', 'case-check', 'case-download', 'case-play', 'cast', 'cast-connected', 'center-focus-strong', 'center-focus-weak', 'chart', 'chart-donut', 'check', 'check-all', 'check-circle', 'check-circle-u', 'check-square', 'chevron-down', 'chevron-left', 'chevron-right', 'chevron-up', 'circle', 'circle-o', 'city', 'city-alt', 'close', 'close-circle', 'close-circle-o', 'closed-caption', 'cloud', 'cloud-box', 'cloud-circle', 'cloud-done', 'cloud-download', 'cloud-off', 'cloud-outline', 'cloud-outline-alt', 'cloud-upload', 'cocktail', 'code', 'code-setting', 'code-smartphone', 'codepen', 'coffee', 'collection-bookmark', 'collection-case-play', 'collection-folder-image', 'collection-image', 'collection-image-o', 'collection-item', 'collection-item-1', 'collection-item-2', 'collection-item-3', 'collection-item-4', 'collection-item-5', 'collection-item-6', 'collection-item-7', 'collection-item-8', 'collection-item-9', 'collection-item-9-plus', 'collection-music', 'collection-pdf', 'collection-plus', 'collection-speaker', 'collection-text', 'collection-video', 'comment', 'comment-alert', 'comment-alt', 'comment-alt-text', 'comment-edit', 'comment-image', 'comment-list', 'comment-more', 'comment-outline', 'comment-text', 'comment-text-alt', 'comment-video', 'comments', 'compare', 'compass', 'confirmation-number', 'copy', 'crop', 'crop-16-9', 'crop-3-2', 'crop-5-4', 'crop-7-5', 'crop-din', 'crop-free', 'crop-landscape', 'crop-portrait', 'crop-square', 'cutlery', 'delete', 'desktop-mac', 'desktop-windows', 'developer-board', 'device-hub', 'devices', 'devices-off', 'dialpad', 'directions', 'directions-bike', 'directions-boat', 'directions-bus', 'directions-car', 'directions-railway', 'directions-run', 'directions-subway', 'directions-walk', 'disc-full', 'dns', 'dock', 'dot-circle', 'dot-circle-alt', 'download', 'dribbble', 'drink', 'dropbox', 'edit', 'eject', 'eject-alt', 'email', 'email-open', 'equalizer', 'evernote', 'explicit', 'exposure', 'exposure-alt', 'eye', 'eye-off', 'eyedropper', 'face', 'facebook', 'facebook-box', 'fast-forward', 'fast-rewind', 'favorite', 'favorite-outline', 'female', 'file', 'file-plus', 'file-text', 'filter-b-and-w', 'filter-center-focus', 'filter-frames', 'filter-list', 'filter-tilt-shift', 'fire', 'flag', 'flare', 'flash', 'flash-auto', 'flash-off', 'flight-land', 'flight-takeoff', 'flip', 'flip-to-back', 'flip-to-front', 'floppy', 'flower', 'flower-alt', 'folder', 'folder-outline', 'folder-person', 'folder-star', 'folder-star-alt', 'font', 'format-align-center', 'format-align-justify', 'format-align-left', 'format-align-right', 'format-bold', 'format-clear', 'format-clear-all', 'format-color-fill', 'format-color-reset', 'format-color-text', 'format-indent-decrease', 'format-indent-increase', 'format-italic', 'format-line-spacing', 'format-list-bulleted', 'format-list-numbered', 'format-ltr', 'format-rtl', 'format-size', 'format-strikethrough', 'format-strikethrough-s', 'format-subject', 'format-underlined', 'format-valign-bottom', 'format-valign-center', 'format-valign-top', 'forward', 'forward-10', 'forward-30', 'forward-5', 'fullscreen', 'fullscreen-alt', 'fullscreen-exit', 'functions', 'gamepad', 'gas-station', 'gesture', 'gif', 'github', 'github-box', 'globe', 'globe-alt', 'globe-lock', 'google', 'google-drive', 'google-earth', 'google-glass', 'google-maps', 'google-pages', 'google-play', 'google-plus', 'google-plus-box', 'gps', 'gps-dot', 'gps-off', 'gradient', 'graduation-cap', 'grain', 'graphic-eq', 'grid', 'grid-off', 'group-work', 'hd', 'hdr', 'hdr-off', 'hdr-strong', 'hdr-weak', 'headset', 'headset-mic', 'hearing', 'help', 'help-outline', 'home', 'hospital', 'hospital-alt', 'hotel', 'hourglass', 'hourglass-alt', 'hourglass-outline', 'hq', 'http', 'image', 'image-alt', 'image-o', 'inbox', 'info', 'info-outline', 'input-antenna', 'input-composite', 'input-hdmi', 'input-power', 'input-svideo', 'instagram', 'invert-colors', 'invert-colors-off', 'iridescent', 'key', 'keyboard', 'keyboard-hide', 'label', 'label-alt', 'label-alt-outline', 'label-heart', 'labels', 'lamp', 'landscape', 'language-css3', 'language-html5', 'language-javascript', 'language-python', 'language-python-alt', 'laptop', 'laptop-chromebook', 'laptop-mac', 'lastfm', 'layers', 'layers-off', 'leak', 'leak-off', 'library', 'link', 'linkedin-box', 'local-activity', 'local-airport', 'local-atm', 'local-bar', 'local-cafe', 'local-car-wash', 'local-convenience-store', 'local-dining', 'local-drink', 'local-florist', 'local-gas-station', 'local-grocery-store', 'local-hospital', 'local-hotel', 'local-laundry-service', 'local-library', 'local-mall', 'local-movies', 'local-offer', 'local-parking', 'local-pharmacy', 'local-phone', 'local-pizza', 'local-post-office', 'local-printshop', 'local-see', 'local-shipping', 'local-store', 'local-taxi', 'local-wc', 'lock', 'lock-open', 'lock-outline', 'long-arrow-down', 'long-arrow-left', 'long-arrow-return', 'long-arrow-right', 'long-arrow-tab', 'long-arrow-up', 'looks', 'loupe', 'mail-reply', 'mail-reply-all', 'mail-send', 'male', 'male-alt', 'male-female', 'mall', 'map', 'markunread-mailbox', 'memory', 'menu', 'mic', 'mic-off', 'mic-outline', 'mic-setting', 'minus', 'minus-circle', 'minus-circle-outline', 'minus-square', 'money', 'money-box', 'money-off', 'mood', 'mood-bad', 'more', 'more-vert', 'mouse', 'movie', 'movie-alt', 'my-location', 'n-1-square', 'n-2-square', 'n-3-square', 'n-4-square', 'n-5-square', 'n-6-square', 'nature', 'nature-people', 'navigation', 'neg-1', 'neg-2', 'network', 'network-alert', 'network-locked', 'network-off', 'network-outline', 'network-setting', 'nfc', 'notifications', 'notifications-active', 'notifications-add', 'notifications-none', 'notifications-off', 'notifications-paused', 'open-in-browser', 'open-in-new', 'palette', 'panorama-horizontal', 'panorama-vertical', 'panorama-wide-angle', 'parking', 'pause', 'pause-circle', 'pause-circle-outline', 'paypal', 'phone', 'phone-bluetooth', 'phone-end', 'phone-forwarded', 'phone-in-talk', 'phone-locked', 'phone-missed', 'phone-msg', 'phone-paused', 'phone-ring', 'phone-setting', 'phone-sip', 'photo-size-select-large', 'photo-size-select-small', 'picture-in-picture', 'pin', 'pin-account', 'pin-assistant', 'pin-drop', 'pin-help', 'pin-off', 'pinterest-box', 'pizza', 'plaster', 'play', 'play-circle', 'play-circle-outline', 'play-for-work', 'playlist-audio', 'playlist-plus', 'plus', 'plus-1', 'plus-2', 'plus-circle', 'plus-circle-o', 'plus-circle-o-duplicate', 'plus-square', 'pocket', 'polymer', 'portable-wifi', 'portable-wifi-changes', 'portable-wifi-off', 'power', 'power-input', 'power-setting', 'present-to-all', 'print', 'puzzle-piece', 'quote', 'radio', 'railway', 'reader', 'receipt', 'redo', 'refresh', 'refresh-alt', 'refresh-sync', 'refresh-sync-alert', 'refresh-sync-off', 'remote-control', 'remote-control-alt', 'repeat', 'repeat-one', 'replay', 'replay-10', 'replay-30', 'replay-5', 'roller', 'rotate-ccw', 'rotate-cw', 'rotate-left', 'rotate-right', 'router', 'ruler', 'run', 'satellite', 'scanner', 'scissors', 'screen-rotation', 'screen-rotation-lock', 'search', 'search-for', 'search-in-file', 'search-in-page', 'search-replace', 'seat', 'sec-10', 'sec-3', 'select-all', 'settings', 'settings-square', 'share', 'shield-check', 'shield-security', 'shopping-basket', 'shopping-cart', 'shopping-cart-plus', 'shuffle', 'sign-in', 'skip-next', 'skip-previous', 'slideshow', 'smartphone', 'smartphone-android', 'smartphone-download', 'smartphone-erase', 'smartphone-info', 'smartphone-iphone', 'smartphone-landscape', 'smartphone-landscape-lock', 'smartphone-lock', 'smartphone-portrait-lock', 'smartphone-ring', 'smartphone-setting', 'smartphone-setup', 'sort-amount-asc', 'sort-amount-desc', 'sort-asc', 'sort-desc', 'space-bar', 'speaker', 'spellcheck', 'square-down', 'square-o', 'square-right', 'star', 'star-circle', 'star-half', 'star-outline', 'steam', 'steam-square', 'stop', 'storage', 'store', 'store-24', 'subway', 'sun', 'surround-sound', 'swap', 'swap-alt', 'swap-vertical', 'swap-vertical-circle', 'tab', 'tab-unselected', 'tablet', 'tablet-android', 'tablet-mac', 'tag', 'tag-close', 'tag-more', 'tap-and-play', 'text-format', 'texture', 'thumb-down', 'thumb-up', 'thumb-up-down', 'ticket-star', 'time', 'time-countdown', 'time-interval', 'time-restore', 'time-restore-setting', 'timer', 'timer-off', 'toll', 'tonality', 'toys', 'traffic', 'transform', 'translate', 'trending-down', 'trending-flat', 'trending-up', 'triangle-down', 'triangle-up', 'truck', 'tune', 'turning-sign', 'tv', 'tv-alt-play', 'tv-list', 'tv-play', 'twitter', 'twitter-box', 'undo', 'unfold-less', 'unfold-more', 'upload', 'usb', 'vibration', 'videocam', 'videocam-off', 'videocam-switch', 'view-agenda', 'view-array', 'view-carousel', 'view-column', 'view-comfy', 'view-compact', 'view-dashboard', 'view-day', 'view-headline', 'view-list', 'view-list-alt', 'view-module', 'view-quilt', 'view-stream', 'view-subtitles', 'view-toc', 'view-web', 'view-week', 'vignette', 'vk', 'voicemail', 'volume-down', 'volume-mute', 'volume-off', 'volume-up', 'walk', 'wallpaper', 'washing-machine', 'watch', 'wb-auto', 'widgets', 'wifi', 'wifi-alt', 'wifi-alt-2', 'wifi-info', 'wifi-lock', 'wifi-off', 'wifi-outline', 'wikipedia', 'window-maximize', 'window-minimize', 'window-restore', 'windows', 'wrap-text', 'wrench', 'zero', 'zoom-in', 'zoom-out' ] }, { version: '2.1.2', icons: [ '', //'zmdi', '3d-rotation', 'account', 'account-add', 'account-box', 'account-box-mail', 'account-box-o', 'account-box-phone', 'account-calendar', 'account-circle', 'account-o', 'accounts', 'accounts-add', 'accounts-alt', 'accounts-list', 'accounts-list-alt', 'accounts-outline', 'airline-seat-flat', 'airline-seat-flat-angled', 'airline-seat-individual-suite', 'airline-seat-legroom-extra', 'airline-seat-legroom-normal', 'airline-seat-legroom-reduced', 'airline-seat-recline-extra', 'airline-seat-recline-normal', 'airplane', 'airplane-off', 'airplay', 'alarm', 'alarm-check', 'alarm-off', 'alarm-plus', 'alarm-snooze', 'album', 'alert-circle', 'alert-circle-o', 'alert-octagon', 'alert-polygon', 'alert-triangle', 'android', 'android-alt', 'apple', 'apps', 'archive', 'arrow-left', 'arrow-left-bottom', 'arrow-merge', 'arrow-missed', 'arrow-right', 'arrow-right-top', 'arrow-split', 'arrows', 'aspect-ratio', 'aspect-ratio-alt', 'assignment', 'assignment-account', 'assignment-alert', 'assignment-check', 'assignment-o', 'assignment-return', 'assignment-returned', 'attachment', 'attachment-alt', 'audio', 'badge-check', 'balance', 'balance-wallet', 'battery', 'battery-alert', 'battery-flash', 'battery-unknown', 'behance', 'bike', 'block', 'block-alt', 'bluetooth', 'bluetooth-connected', 'bluetooth-off', 'bluetooth-search', 'bluetooth-setting', 'blur', 'blur-circular', 'blur-linear', 'blur-off', 'boat', 'book', 'book-image', 'bookmark', 'bookmark-outline', 'border-all', 'border-bottom', 'border-clear', 'border-color', 'border-horizontal', 'border-inner', 'border-left', 'border-outer', 'border-right', 'border-style', 'border-top', 'border-vertical', 'brightness-2', 'brightness-3', 'brightness-4', 'brightness-5', 'brightness-6', 'brightness-7', 'brightness-auto', 'brightness-high', 'brightness-setting', 'broken-image', 'brush', 'bug', 'bus', 'cake', 'calendar', 'calendar-alt', 'calendar-check', 'calendar-close', 'calendar-note', 'camera', 'camera-add', 'camera-alt', 'camera-bw', 'camera-front', 'camera-mic', 'camera-party-mode', 'camera-rear', 'camera-roll', 'camera-switch', 'car', 'car-taxi', 'car-wash', 'card', 'card-alert', 'card-giftcard', 'card-membership', 'card-off', 'card-sd', 'card-sim', 'card-travel', 'caret-down', 'caret-down-circle', 'caret-left', 'caret-left-circle', 'caret-right', 'caret-right-circle', 'caret-up', 'caret-up-circle', 'case', 'case-check', 'case-download', 'case-play', 'cast', 'cast-connected', 'center-focus-strong', 'center-focus-weak', 'chart', 'chart-donut', 'check', 'check-all', 'check-circle', 'check-circle-u', 'check-square', 'chevron-down', 'chevron-left', 'chevron-right', 'chevron-up', 'circle', 'circle-o', 'city', 'city-alt', 'close', 'close-circle', 'close-circle-o', 'closed-caption', 'cloud', 'cloud-box', 'cloud-circle', 'cloud-done', 'cloud-download', 'cloud-off', 'cloud-outline', 'cloud-outline-alt', 'cloud-upload', 'cocktail', 'code', 'code-setting', 'code-smartphone', 'codepen', 'coffee', 'collection-bookmark', 'collection-case-play', 'collection-folder-image', 'collection-image', 'collection-image-o', 'collection-item', 'collection-item-1', 'collection-item-2', 'collection-item-3', 'collection-item-4', 'collection-item-5', 'collection-item-6', 'collection-item-7', 'collection-item-8', 'collection-item-9', 'collection-item-9-plus', 'collection-music', 'collection-pdf', 'collection-plus', 'collection-speaker', 'collection-text', 'collection-video', 'comment', 'comment-alert', 'comment-alt', 'comment-alt-text', 'comment-edit', 'comment-image', 'comment-list', 'comment-more', 'comment-outline', 'comment-text', 'comment-text-alt', 'comment-video', 'comments', 'compare', 'compass', 'confirmation-number', 'copy', 'crop', 'crop-16-9', 'crop-3-2', 'crop-5-4', 'crop-7-5', 'crop-din', 'crop-free', 'crop-landscape', 'crop-portrait', 'crop-square', 'cutlery', 'delete', 'desktop-mac', 'desktop-windows', 'developer-board', 'device-hub', 'devices', 'devices-off', 'dialpad', 'directions', 'directions-bike', 'directions-boat', 'directions-bus', 'directions-car', 'directions-railway', 'directions-run', 'directions-subway', 'directions-walk', 'disc-full', 'dns', 'dock', 'dot-circle', 'dot-circle-alt', 'download', 'dribbble', 'drink', 'dropbox', 'edit', 'eject', 'eject-alt', 'email', 'email-open', 'equalizer', 'evernote', 'explicit', 'exposure', 'exposure-alt', 'eye', 'eye-off', 'eyedropper', 'face', 'facebook', 'facebook-box', 'fast-forward', 'fast-rewind', 'favorite', 'favorite-outline', 'female', 'file', 'file-plus', 'file-text', 'filter-b-and-w', 'filter-center-focus', 'filter-frames', 'filter-list', 'filter-tilt-shift', 'fire', 'flag', 'flare', 'flash', 'flash-auto', 'flash-off', 'flight-land', 'flight-takeoff', 'flip', 'flip-to-back', 'flip-to-front', 'floppy', 'flower', 'flower-alt', 'folder', 'folder-outline', 'folder-person', 'folder-star', 'folder-star-alt', 'font', 'format-align-center', 'format-align-justify', 'format-align-left', 'format-align-right', 'format-bold', 'format-clear', 'format-clear-all', 'format-color-fill', 'format-color-reset', 'format-color-text', 'format-indent-decrease', 'format-indent-increase', 'format-italic', 'format-line-spacing', 'format-list-bulleted', 'format-list-numbered', 'format-ltr', 'format-rtl', 'format-size', 'format-strikethrough', 'format-strikethrough-s', 'format-subject', 'format-underlined', 'format-valign-bottom', 'format-valign-center', 'format-valign-top', 'forward', 'forward-10', 'forward-30', 'forward-5', 'fullscreen', 'fullscreen-alt', 'fullscreen-exit', 'functions', 'gamepad', 'gas-station', 'gesture', 'gif', 'github', 'github-box', 'globe', 'globe-alt', 'globe-lock', 'google', 'google-drive', 'google-earth', 'google-glass', 'google-maps', 'google-pages', 'google-play', 'google-plus', 'google-plus-box', 'gps', 'gps-dot', 'gps-off', 'gradient', 'graduation-cap', 'grain', 'graphic-eq', 'grid', 'grid-off', 'group-work', 'hd', 'hdr', 'hdr-off', 'hdr-strong', 'hdr-weak', 'headset', 'headset-mic', 'hearing', 'help', 'help-outline', 'home', 'hospital', 'hospital-alt', 'hotel', 'hourglass', 'hourglass-alt', 'hourglass-outline', 'hq', 'http', 'image', 'image-alt', 'image-o', 'inbox', 'info', 'info-outline', 'input-antenna', 'input-composite', 'input-hdmi', 'input-power', 'input-svideo', 'instagram', 'invert-colors', 'invert-colors-off', 'iridescent', 'key', 'keyboard', 'keyboard-hide', 'label', 'label-alt', 'label-alt-outline', 'label-heart', 'labels', 'lamp', 'landscape', 'language-css3', 'language-html5', 'language-javascript', 'language-python', 'language-python-alt', 'laptop', 'laptop-chromebook', 'laptop-mac', 'lastfm', 'layers', 'layers-off', 'leak', 'leak-off', 'library', 'link', 'linkedin-box', 'local-activity', 'local-airport', 'local-atm', 'local-bar', 'local-cafe', 'local-car-wash', 'local-convenience-store', 'local-dining', 'local-drink', 'local-florist', 'local-gas-station', 'local-grocery-store', 'local-hospital', 'local-hotel', 'local-laundry-service', 'local-library', 'local-mall', 'local-movies', 'local-offer', 'local-parking', 'local-pharmacy', 'local-phone', 'local-pizza', 'local-post-office', 'local-printshop', 'local-see', 'local-shipping', 'local-store', 'local-taxi', 'local-wc', 'lock', 'lock-open', 'lock-outline', 'long-arrow-down', 'long-arrow-left', 'long-arrow-return', 'long-arrow-right', 'long-arrow-tab', 'long-arrow-up', 'looks', 'loupe', 'mail-reply', 'mail-reply-all', 'mail-send', 'male', 'male-alt', 'male-female', 'mall', 'map', 'markunread-mailbox', 'memory', 'menu', 'mic', 'mic-off', 'mic-outline', 'mic-setting', 'minus', 'minus-circle', 'minus-circle-outline', 'minus-square', 'money', 'money-box', 'money-off', 'mood', 'mood-bad', 'more', 'more-vert', 'mouse', 'movie', 'movie-alt', 'my-location', 'n-1-square', 'n-2-square', 'n-3-square', 'n-4-square', 'n-5-square', 'n-6-square', 'nature', 'nature-people', 'navigation', 'neg-1', 'neg-2', 'network', 'network-alert', 'network-locked', 'network-off', 'network-outline', 'network-setting', 'nfc', 'notifications', 'notifications-active', 'notifications-add', 'notifications-none', 'notifications-off', 'notifications-paused', 'open-in-browser', 'open-in-new', 'palette', 'panorama-horizontal', 'panorama-vertical', 'panorama-wide-angle', 'parking', 'pause', 'pause-circle', 'pause-circle-outline', 'paypal', 'phone', 'phone-bluetooth', 'phone-end', 'phone-forwarded', 'phone-in-talk', 'phone-locked', 'phone-missed', 'phone-msg', 'phone-paused', 'phone-ring', 'phone-setting', 'phone-sip', 'photo-size-select-large', 'photo-size-select-small', 'picture-in-picture', 'pin', 'pin-account', 'pin-assistant', 'pin-drop', 'pin-help', 'pin-off', 'pinterest-box', 'pizza', 'plaster', 'play', 'play-circle', 'play-circle-outline', 'play-for-work', 'playlist-audio', 'playlist-plus', 'plus', 'plus-1', 'plus-2', 'plus-circle', 'plus-circle-o', 'plus-circle-o-duplicate', 'plus-square', 'pocket', 'polymer', 'portable-wifi', 'portable-wifi-changes', 'portable-wifi-off', 'power', 'power-input', 'power-setting', 'present-to-all', 'print', 'puzzle-piece', 'quote', 'radio', 'railway', 'reader', 'receipt', 'redo', 'refresh', 'refresh-alt', 'refresh-sync', 'refresh-sync-alert', 'refresh-sync-off', 'remote-control', 'remote-control-alt', 'repeat', 'repeat-one', 'replay', 'replay-10', 'replay-30', 'replay-5', 'roller', 'rotate-ccw', 'rotate-cw', 'rotate-left', 'rotate-right', 'router', 'ruler', 'run', 'satellite', 'scanner', 'scissors', 'screen-rotation', 'screen-rotation-lock', 'search', 'search-for', 'search-in-file', 'search-in-page', 'search-replace', 'seat', 'sec-10', 'sec-3', 'select-all', 'settings', 'settings-square', 'share', 'shield-check', 'shield-security', 'shopping-basket', 'shopping-cart', 'shopping-cart-plus', 'shuffle', 'sign-in', 'skip-next', 'skip-previous', 'slideshow', 'smartphone', 'smartphone-android', 'smartphone-download', 'smartphone-erase', 'smartphone-info', 'smartphone-iphone', 'smartphone-landscape', 'smartphone-landscape-lock', 'smartphone-lock', 'smartphone-portrait-lock', 'smartphone-ring', 'smartphone-setting', 'smartphone-setup', 'sort-amount-asc', 'sort-amount-desc', 'sort-asc', 'sort-desc', 'space-bar', 'speaker', 'spellcheck', 'square-down', 'square-o', 'square-right', 'star', 'star-circle', 'star-half', 'star-outline', 'steam', 'steam-square', 'stop', 'storage', 'store', 'store-24', 'subway', 'sun', 'surround-sound', 'swap', 'swap-alt', 'swap-vertical', 'swap-vertical-circle', 'tab', 'tab-unselected', 'tablet', 'tablet-android', 'tablet-mac', 'tag', 'tag-close', 'tag-more', 'tap-and-play', 'text-format', 'texture', 'thumb-down', 'thumb-up', 'thumb-up-down', 'ticket-star', 'time', 'time-countdown', 'time-interval', 'time-restore', 'time-restore-setting', 'timer', 'timer-off', 'toll', 'tonality', 'toys', 'traffic', 'transform', 'translate', 'trending-down', 'trending-flat', 'trending-up', 'triangle-down', 'triangle-up', 'truck', 'tune', 'turning-sign', 'tv', 'tv-alt-play', 'tv-list', 'tv-play', 'twitter', 'twitter-box', 'undo', 'unfold-less', 'unfold-more', 'upload', 'usb', 'vibration', 'videocam', 'videocam-off', 'videocam-switch', 'view-agenda', 'view-array', 'view-carousel', 'view-column', 'view-comfy', 'view-compact', 'view-dashboard', 'view-day', 'view-headline', 'view-list', 'view-list-alt', 'view-module', 'view-quilt', 'view-stream', 'view-subtitles', 'view-toc', 'view-web', 'view-week', 'vignette', 'vk', 'voicemail', 'volume-down', 'volume-mute', 'volume-off', 'volume-up', 'walk', 'wallpaper', 'washing-machine', 'watch', 'wb-auto', 'widgets', 'wifi', 'wifi-alt', 'wifi-alt-2', 'wifi-info', 'wifi-lock', 'wifi-off', 'wifi-outline', 'wikipedia', 'window-maximize', 'window-minimize', 'window-restore', 'windows', 'wrap-text', 'wrench', 'zero', 'zoom-in', 'zoom-out' ] }, { version: '2.2.0', icons: [ '', //'zmdi', '3d-rotation', '500px', '8tracks', 'account', 'account-add', 'account-box', 'account-box-mail', 'account-box-o', 'account-box-phone', 'account-calendar', 'account-circle', 'account-o', 'accounts', 'accounts-add', 'accounts-alt', 'accounts-list', 'accounts-list-alt', 'accounts-outline', 'airline-seat-flat', 'airline-seat-flat-angled', 'airline-seat-individual-suite', 'airline-seat-legroom-extra', 'airline-seat-legroom-normal', 'airline-seat-legroom-reduced', 'airline-seat-recline-extra', 'airline-seat-recline-normal', 'airplane', 'airplane-off', 'airplay', 'alarm', 'alarm-check', 'alarm-off', 'alarm-plus', 'alarm-snooze', 'album', 'alert-circle', 'alert-circle-o', 'alert-octagon', 'alert-polygon', 'alert-triangle', 'amazon', 'android', 'android-alt', 'apple', 'apps', 'archive', 'arrow-left', 'arrow-left-bottom', 'arrow-merge', 'arrow-missed', 'arrow-right', 'arrow-right-top', 'arrow-split', 'arrows', 'aspect-ratio', 'aspect-ratio-alt', 'assignment', 'assignment-account', 'assignment-alert', 'assignment-check', 'assignment-o', 'assignment-return', 'assignment-returned', 'attachment', 'attachment-alt', 'audio', 'badge-check', 'balance', 'balance-wallet', 'battery', 'battery-alert', 'battery-flash', 'battery-unknown', 'behance', 'bike', 'block', 'block-alt', 'blogger', 'bluetooth', 'bluetooth-connected', 'bluetooth-off', 'bluetooth-search', 'bluetooth-setting', 'blur', 'blur-circular', 'blur-linear', 'blur-off', 'boat', 'book', 'book-image', 'bookmark', 'bookmark-outline', 'border-all', 'border-bottom', 'border-clear', 'border-color', 'border-horizontal', 'border-inner', 'border-left', 'border-outer', 'border-right', 'border-style', 'border-top', 'border-vertical', 'brightness-2', 'brightness-3', 'brightness-4', 'brightness-5', 'brightness-6', 'brightness-7', 'brightness-auto', 'brightness-high', 'brightness-setting', 'broken-image', 'brush', 'bug', 'bus', 'cake', 'calendar', 'calendar-alt', 'calendar-check', 'calendar-close', 'calendar-note', 'camera', 'camera-add', 'camera-alt', 'camera-bw', 'camera-front', 'camera-mic', 'camera-party-mode', 'camera-rear', 'camera-roll', 'camera-switch', 'car', 'car-taxi', 'car-wash', 'card', 'card-alert', 'card-giftcard', 'card-membership', 'card-off', 'card-sd', 'card-sim', 'card-travel', 'caret-down', 'caret-down-circle', 'caret-left', 'caret-left-circle', 'caret-right', 'caret-right-circle', 'caret-up', 'caret-up-circle', 'case', 'case-check', 'case-download', 'case-play', 'cast', 'cast-connected', 'center-focus-strong', 'center-focus-weak', 'chart', 'chart-donut', 'check', 'check-all', 'check-circle', 'check-circle-u', 'check-square', 'chevron-down', 'chevron-left', 'chevron-right', 'chevron-up', 'circle', 'circle-o', 'city', 'city-alt', 'close', 'close-circle', 'close-circle-o', 'closed-caption', 'cloud', 'cloud-box', 'cloud-circle', 'cloud-done', 'cloud-download', 'cloud-off', 'cloud-outline', 'cloud-outline-alt', 'cloud-upload', 'cocktail', 'code', 'code-setting', 'code-smartphone', 'codepen', 'coffee', 'collection-bookmark', 'collection-case-play', 'collection-folder-image', 'collection-image', 'collection-image-o', 'collection-item', 'collection-item-1', 'collection-item-2', 'collection-item-3', 'collection-item-4', 'collection-item-5', 'collection-item-6', 'collection-item-7', 'collection-item-8', 'collection-item-9', 'collection-item-9-plus', 'collection-music', 'collection-pdf', 'collection-plus', 'collection-speaker', 'collection-text', 'collection-video', 'comment', 'comment-alert', 'comment-alt', 'comment-alt-text', 'comment-edit', 'comment-image', 'comment-list', 'comment-more', 'comment-outline', 'comment-text', 'comment-text-alt', 'comment-video', 'comments', 'compare', 'compass', 'confirmation-number', 'copy', 'crop', 'crop-16-9', 'crop-3-2', 'crop-5-4', 'crop-7-5', 'crop-din', 'crop-free', 'crop-landscape', 'crop-portrait', 'crop-square', 'cutlery', 'delete', 'delicious', 'desktop-mac', 'desktop-windows', 'developer-board', 'device-hub', 'devices', 'devices-off', 'dialpad', 'directions', 'directions-bike', 'directions-boat', 'directions-bus', 'directions-car', 'directions-railway', 'directions-run', 'directions-subway', 'directions-walk', 'disc-full', 'disqus', 'dns', 'dock', 'dot-circle', 'dot-circle-alt', 'download', 'dribbble', 'drink', 'dropbox', 'edit', 'eject', 'eject-alt', 'email', 'email-open', 'equalizer', 'evernote', 'explicit', 'exposure', 'exposure-alt', 'eye', 'eye-off', 'eyedropper', 'face', 'facebook', 'facebook-box', 'fast-forward', 'fast-rewind', 'favorite', 'favorite-outline', 'female', 'file', 'file-plus', 'file-text', 'filter-b-and-w', 'filter-center-focus', 'filter-frames', 'filter-list', 'filter-tilt-shift', 'fire', 'flag', 'flare', 'flash', 'flash-auto', 'flash-off', 'flattr', 'flickr', 'flight-land', 'flight-takeoff', 'flip', 'flip-to-back', 'flip-to-front', 'floppy', 'flower', 'flower-alt', 'folder', 'folder-outline', 'folder-person', 'folder-star', 'folder-star-alt', 'font', 'format-align-center', 'format-align-justify', 'format-align-left', 'format-align-right', 'format-bold', 'format-clear', 'format-clear-all', 'format-color-fill', 'format-color-reset', 'format-color-text', 'format-indent-decrease', 'format-indent-increase', 'format-italic', 'format-line-spacing', 'format-list-bulleted', 'format-list-numbered', 'format-ltr', 'format-rtl', 'format-size', 'format-strikethrough', 'format-strikethrough-s', 'format-subject', 'format-underlined', 'format-valign-bottom', 'format-valign-center', 'format-valign-top', 'forward', 'forward-10', 'forward-30', 'forward-5', 'fullscreen', 'fullscreen-alt', 'fullscreen-exit', 'functions', 'gamepad', 'gas-station', 'gesture', 'gif', 'github', 'github-alt', 'github-box', 'globe', 'globe-alt', 'globe-lock', 'google', 'google-drive', 'google-earth', 'google-glass', 'google-maps', 'google-old', 'google-pages', 'google-play', 'google-plus', 'google-plus-box', 'gps', 'gps-dot', 'gps-off', 'gradient', 'graduation-cap', 'grain', 'graphic-eq', 'grid', 'grid-off', 'group', 'group-work', 'hd', 'hdr', 'hdr-off', 'hdr-strong', 'hdr-weak', 'headset', 'headset-mic', 'hearing', 'help', 'help-outline', 'home', 'hospital', 'hospital-alt', 'hotel', 'hourglass', 'hourglass-alt', 'hourglass-outline', 'hq', 'http', 'image', 'image-alt', 'image-o', 'inbox', 'info', 'info-outline', 'input-antenna', 'input-composite', 'input-hdmi', 'input-power', 'input-svideo', 'instagram', 'invert-colors', 'invert-colors-off', 'iridescent', 'key', 'keyboard', 'keyboard-hide', 'label', 'label-alt', 'label-alt-outline', 'label-heart', 'labels', 'lamp', 'landscape', 'language-css3', 'language-html5', 'language-javascript', 'language-python', 'language-python-alt', 'laptop', 'laptop-chromebook', 'laptop-mac', 'lastfm', 'layers', 'layers-off', 'leak', 'leak-off', 'library', 'link', 'linkedin', 'linkedin-box', 'local-activity', 'local-airport', 'local-atm', 'local-bar', 'local-cafe', 'local-car-wash', 'local-convenience-store', 'local-dining', 'local-drink', 'local-florist', 'local-gas-station', 'local-grocery-store', 'local-hospital', 'local-hotel', 'local-laundry-service', 'local-library', 'local-mall', 'local-movies', 'local-offer', 'local-parking', 'local-pharmacy', 'local-phone', 'local-pizza', 'local-post-office', 'local-printshop', 'local-see', 'local-shipping', 'local-store', 'local-taxi', 'local-wc', 'lock', 'lock-open', 'lock-outline', 'long-arrow-down', 'long-arrow-left', 'long-arrow-return', 'long-arrow-right', 'long-arrow-tab', 'long-arrow-up', 'looks', 'loupe', 'mail-reply', 'mail-reply-all', 'mail-send', 'male', 'male-alt', 'male-female', 'mall', 'map', 'markunread-mailbox', 'memory', 'menu', 'mic', 'mic-off', 'mic-outline', 'mic-setting', 'minus', 'minus-circle', 'minus-circle-outline', 'minus-square', 'money', 'money-box', 'money-off', 'mood', 'mood-bad', 'more', 'more-vert', 'mouse', 'movie', 'movie-alt', 'my-location', 'n-1-square', 'n-2-square', 'n-3-square', 'n-4-square', 'n-5-square', 'n-6-square', 'nature', 'nature-people', 'navigation', 'neg-1', 'neg-2', 'network', 'network-alert', 'network-locked', 'network-off', 'network-outline', 'network-setting', 'nfc', 'notifications', 'notifications-active', 'notifications-add', 'notifications-none', 'notifications-off', 'notifications-paused', 'odnoklassniki', 'open-in-browser', 'open-in-new', 'outlook', 'palette', 'panorama-horizontal', 'panorama-vertical', 'panorama-wide-angle', 'parking', 'pause', 'pause-circle', 'pause-circle-outline', 'paypal', 'paypal-alt', 'phone', 'phone-bluetooth', 'phone-end', 'phone-forwarded', 'phone-in-talk', 'phone-locked', 'phone-missed', 'phone-msg', 'phone-paused', 'phone-ring', 'phone-setting', 'phone-sip', 'photo-size-select-large', 'photo-size-select-small', 'picture-in-picture', 'pin', 'pin-account', 'pin-assistant', 'pin-drop', 'pin-help', 'pin-off', 'pinterest', 'pinterest-box', 'pizza', 'plaster', 'play', 'play-circle', 'play-circle-outline', 'play-for-work', 'playlist-audio', 'playlist-plus', 'playstation', 'plus', 'plus-1', 'plus-2', 'plus-circle', 'plus-circle-o', 'plus-circle-o-duplicate', 'plus-square', 'pocket', 'polymer', 'portable-wifi', 'portable-wifi-changes', 'portable-wifi-off', 'power', 'power-input', 'power-setting', 'present-to-all', 'print', 'puzzle-piece', 'quote', 'radio', 'railway', 'reader', 'receipt', 'reddit', 'redo', 'refresh', 'refresh-alt', 'refresh-sync', 'refresh-sync-alert', 'refresh-sync-off', 'remote-control', 'remote-control-alt', 'repeat', 'repeat-one', 'replay', 'replay-10', 'replay-30', 'replay-5', 'roller', 'rotate-ccw', 'rotate-cw', 'rotate-left', 'rotate-right', 'router', 'rss', 'ruler', 'run', 'satellite', 'scanner', 'scissors', 'screen-rotation', 'screen-rotation-lock', 'search', 'search-for', 'search-in-file', 'search-in-page', 'search-replace', 'seat', 'sec-10', 'sec-3', 'select-all', 'settings', 'settings-square', 'shape', 'share', 'shield-check', 'shield-security', 'shopping-basket', 'shopping-cart', 'shopping-cart-plus', 'shuffle', 'sign-in', 'skip-next', 'skip-previous', 'skype', 'slideshare', 'slideshow', 'smartphone', 'smartphone-android', 'smartphone-download', 'smartphone-erase', 'smartphone-info', 'smartphone-iphone', 'smartphone-landscape', 'smartphone-landscape-lock', 'smartphone-lock', 'smartphone-portrait-lock', 'smartphone-ring', 'smartphone-setting', 'smartphone-setup', 'sort-amount-asc', 'sort-amount-desc', 'sort-asc', 'sort-desc', 'soundcloud', 'space-bar', 'speaker', 'spellcheck', 'spinner', 'square-down', 'square-o', 'square-right', 'stackoverflow', 'star', 'star-circle', 'star-half', 'star-outline', 'steam', 'steam-square', 'stop', 'storage', 'store', 'store-24', 'subway', 'sun', 'surround-sound', 'swap', 'swap-alt', 'swap-vertical', 'swap-vertical-circle', 'tab', 'tab-unselected', 'tablet', 'tablet-android', 'tablet-mac', 'tag', 'tag-close', 'tag-more', 'tap-and-play', 'text-format', 'texture', 'thumb-down', 'thumb-up', 'thumb-up-down', 'ticket-star', 'time', 'time-countdown', 'time-interval', 'time-restore', 'time-restore-setting', 'timer', 'timer-off', 'toll', 'tonality', 'toys', 'traffic', 'transform', 'translate', 'trending-down', 'trending-flat', 'trending-up', 'triangle-down', 'triangle-up', 'truck', 'tumblr', 'tune', 'turning-sign', 'tv', 'tv-alt-play', 'tv-list', 'tv-play', 'twitch', 'twitter', 'twitter-box', 'undo', 'unfold-less', 'unfold-more', 'ungroup', 'upload', 'usb', 'vibration', 'videocam', 'videocam-off', 'videocam-switch', 'view-agenda', 'view-array', 'view-carousel', 'view-column', 'view-comfy', 'view-compact', 'view-dashboard', 'view-day', 'view-headline', 'view-list', 'view-list-alt', 'view-module', 'view-quilt', 'view-stream', 'view-subtitles', 'view-toc', 'view-web', 'view-week', 'vignette', 'vimeo', 'vk', 'voicemail', 'volume-down', 'volume-mute', 'volume-off', 'volume-up', 'walk', 'wallpaper', 'washing-machine', 'watch', 'wb-auto', 'whatsapp', 'widgets', 'wifi', 'wifi-alt', 'wifi-alt-2', 'wifi-info', 'wifi-lock', 'wifi-off', 'wifi-outline', 'wikipedia', 'window-maximize', 'window-minimize', 'window-restore', 'windows', 'wrap-text', 'wrench', 'xbox', 'yahoo', 'youtube', 'youtube-play', 'zero', 'zoom-in', 'zoom-out' ] } ] }; var l = data.allVersions.length; data.icons = data.allVersions[l-1].icons; $.iconset_materialdesign = data; })(jQuery); /*!======================================================================== * Iconset: Octicons * Versions: 2.1.2 * https://octicons.github.com/ * CDN: https://cdnjs.cloudflare.com/ajax/libs/octicons/4.x.x/font/octicons.min.css * CDN: https://cdnjs.cloudflare.com/ajax/libs/octicons/3.x.x/octicons.min.css * ======================================================================== */ ;(function($){ var data = { iconClass: 'octicon', iconClassFix: 'octicon-', icons: [], allVersions: [ { version: '2.0.0', icons: [ '', 'alert', 'alignment-align', 'alignment-aligned-to', 'alignment-unalign', 'arrow-down', 'arrow-left', 'arrow-right', 'arrow-small-down', 'arrow-small-left', 'arrow-small-right', 'arrow-small-up', 'arrow-up', 'beer', 'book', 'bookmark', 'briefcase', 'broadcast', 'browser', 'bug', 'calendar', 'check', 'checklist', 'chevron-down', 'chevron-left', 'chevron-right', 'chevron-up', 'circle-slash', 'circuit-board', 'clippy', 'clock', 'cloud-download', 'cloud-upload', 'code', 'color-mode', 'comment', 'comment-discussion', 'credit-card', 'dash', 'dashboard', 'database', 'device-camera', 'device-camera-video', 'device-desktop', 'device-mobile', 'diff', 'diff-added', 'diff-ignored', 'diff-modified', 'diff-removed', 'diff-renamed', 'ellipsis', 'eye', 'file-binary', 'file-code', 'file-directory', 'file-media', 'file-pdf', 'file-submodule', 'file-symlink-directory', 'file-symlink-file', 'file-text', 'file-zip', 'flame', 'fold', 'gear', 'gift', 'gist', 'gist-secret', 'git-branch', 'git-commit', 'git-compare', 'git-merge', 'git-pull-request', 'globe', 'graph', 'heart', 'history', 'home', 'horizontal-rule', 'hourglass', 'hubot', 'inbox', 'info', 'issue-closed', 'issue-opened', 'issue-reopened', 'jersey', 'jump-down', 'jump-left', 'jump-right', 'jump-up', 'key', 'keyboard', 'law', 'light-bulb', 'link', 'link-external', 'list-ordered', 'list-unordered', 'location', 'lock', 'mail', 'mail-read', 'mail-reply', 'mark-github', 'markdown', 'megaphone', 'mention', 'microscope', 'milestone', 'mirror', 'mortar-board', 'move-down', 'move-left', 'move-right', 'move-up', 'mute', 'no-newline', 'octoface', 'organization', 'package', 'paintcan', 'pencil', 'person', 'pin', 'playback-fast-forward', 'playback-pause', 'playback-play', 'playback-rewind', 'plug', 'plus', 'podium', 'primitive-dot', 'primitive-square', 'pulse', 'puzzle', 'question', 'quote', 'radio-tower', 'repo', 'repo-clone', 'repo-force-push', 'repo-forked', 'repo-pull', 'repo-push', 'rocket', 'rss', 'ruby', 'screen-full', 'screen-normal', 'search', 'server', 'settings', 'sign-in', 'sign-out', 'split', 'squirrel', 'star', 'steps', 'stop', 'sync', 'tag', 'telescope', 'terminal', 'three-bars', 'tools', 'trashcan', 'triangle-down', 'triangle-left', 'triangle-right', 'triangle-up', 'unfold', 'unmute', 'versions', 'x', 'zap' ] }, { version: '2.0.1', icons: [ '', 'alert', 'alignment-align', 'alignment-aligned-to', 'alignment-unalign', 'arrow-down', 'arrow-left', 'arrow-right', 'arrow-small-down', 'arrow-small-left', 'arrow-small-right', 'arrow-small-up', 'arrow-up', 'beer', 'book', 'bookmark', 'briefcase', 'broadcast', 'browser', 'bug', 'calendar', 'check', 'checklist', 'chevron-down', 'chevron-left', 'chevron-right', 'chevron-up', 'circle-slash', 'circuit-board', 'clippy', 'clock', 'cloud-download', 'cloud-upload', 'code', 'color-mode', 'comment-add', 'comment', 'comment-discussion', 'credit-card', 'dash', 'dashboard', 'database', 'device-camera', 'device-camera-video', 'device-desktop', 'device-mobile', 'diff', 'diff-added', 'diff-ignored', 'diff-modified', 'diff-removed', 'diff-renamed', 'ellipsis', 'eye-unwatch', 'eye-watch', 'eye', 'file-binary', 'file-code', 'file-directory', 'file-media', 'file-pdf', 'file-submodule', 'file-symlink-directory', 'file-symlink-file', 'file-text', 'file-zip', 'flame', 'fold', 'gear', 'gift', 'gist', 'gist-secret', 'git-branch-create', 'git-branch-delete', 'git-branch', 'git-commit', 'git-compare', 'git-merge', 'git-pull-request-abandoned', 'git-pull-request', 'globe', 'graph', 'heart', 'history', 'home', 'horizontal-rule', 'hourglass', 'hubot', 'inbox', 'info', 'issue-closed', 'issue-opened', 'issue-reopened', 'jersey', 'jump-down', 'jump-left', 'jump-right', 'jump-up', 'key', 'keyboard', 'law', 'light-bulb', 'link', 'link-external', 'list-ordered', 'list-unordered', 'location', 'gist-private', 'git-fork-private', 'lock', 'mirror-private', 'logo-github', 'mail', 'mail-read', 'mail-reply', 'mark-github', 'markdown', 'megaphone', 'mention', 'microscope', 'milestone', 'mirror-public', 'mirror', 'mortar-board', 'move-down', 'move-left', 'move-right', 'move-up', 'mute', 'no-newline', 'octoface', 'organization', 'package', 'paintcan', 'pencil', 'person-add', 'person-follow', 'person', 'pin', 'playback-fast-forward', 'playback-pause', 'playback-play', 'playback-rewind', 'plug', 'file-add', 'file-directory-create', 'gist-new', 'plus', 'repo-create', 'podium', 'primitive-dot', 'primitive-square', 'pulse', 'puzzle', 'question', 'quote', 'radio-tower', 'repo-delete', 'repo', 'repo-clone', 'repo-force-push', 'gist-fork', 'repo-forked', 'repo-pull', 'repo-push', 'rocket', 'rss', 'ruby', 'screen-full', 'screen-normal', 'search-save', 'search', 'server', 'settings', 'log-in', 'sign-in', 'log-out', 'sign-out', 'split', 'squirrel', 'star-add', 'star-delete', 'star', 'steps', 'stop', 'repo-sync', 'sync', 'tag-add', 'tag-remove', 'tag', 'telescope', 'terminal', 'three-bars', 'tools', 'trashcan', 'triangle-down', 'triangle-left', 'triangle-right', 'triangle-up', 'unfold', 'unmute', 'versions', 'remove-close', 'x', 'zap' ] }, { version: '2.0.2', icons: [ '', 'alert', 'alignment-align', 'alignment-aligned-to', 'alignment-unalign', 'arrow-down', 'arrow-left', 'arrow-right', 'arrow-small-down', 'arrow-small-left', 'arrow-small-right', 'arrow-small-up', 'arrow-up', 'beer', 'book', 'bookmark', 'briefcase', 'broadcast', 'browser', 'bug', 'calendar', 'check', 'checklist', 'chevron-down', 'chevron-left', 'chevron-right', 'chevron-up', 'circle-slash', 'circuit-board', 'clippy', 'clock', 'cloud-download', 'cloud-upload', 'code', 'color-mode', 'comment-add', 'comment', 'comment-discussion', 'credit-card', 'dash', 'dashboard', 'database', 'device-camera', 'device-camera-video', 'device-desktop', 'device-mobile', 'diff', 'diff-added', 'diff-ignored', 'diff-modified', 'diff-removed', 'diff-renamed', 'ellipsis', 'eye-unwatch', 'eye-watch', 'eye', 'file-binary', 'file-code', 'file-directory', 'file-media', 'file-pdf', 'file-submodule', 'file-symlink-directory', 'file-symlink-file', 'file-text', 'file-zip', 'flame', 'fold', 'gear', 'gift', 'gist', 'gist-secret', 'git-branch-create', 'git-branch-delete', 'git-branch', 'git-commit', 'git-compare', 'git-merge', 'git-pull-request-abandoned', 'git-pull-request', 'globe', 'graph', 'heart', 'history', 'home', 'horizontal-rule', 'hourglass', 'hubot', 'inbox', 'info', 'issue-closed', 'issue-opened', 'issue-reopened', 'jersey', 'jump-down', 'jump-left', 'jump-right', 'jump-up', 'key', 'keyboard', 'law', 'light-bulb', 'link', 'link-external', 'list-ordered', 'list-unordered', 'location', 'gist-private', 'git-fork-private', 'lock', 'mirror-private', 'logo-github', 'mail', 'mail-read', 'mail-reply', 'mark-github', 'markdown', 'megaphone', 'mention', 'microscope', 'milestone', 'mirror-public', 'mirror', 'mortar-board', 'move-down', 'move-left', 'move-right', 'move-up', 'mute', 'no-newline', 'octoface', 'organization', 'package', 'paintcan', 'pencil', 'person-add', 'person-follow', 'person', 'pin', 'playback-fast-forward', 'playback-pause', 'playback-play', 'playback-rewind', 'plug', 'file-add', 'file-directory-create', 'gist-new', 'plus', 'repo-create', 'podium', 'primitive-dot', 'primitive-square', 'pulse', 'puzzle', 'question', 'quote', 'radio-tower', 'repo-delete', 'repo', 'repo-clone', 'repo-force-push', 'gist-fork', 'repo-forked', 'repo-pull', 'repo-push', 'rocket', 'rss', 'ruby', 'screen-full', 'screen-normal', 'search-save', 'search', 'server', 'settings', 'log-in', 'sign-in', 'log-out', 'sign-out', 'split', 'squirrel', 'star-add', 'star-delete', 'star', 'steps', 'stop', 'repo-sync', 'sync', 'tag-add', 'tag-remove', 'tag', 'telescope', 'terminal', 'three-bars', 'tools', 'trashcan', 'triangle-down', 'triangle-left', 'triangle-right', 'triangle-up', 'unfold', 'unmute', 'versions', 'remove-close', 'x', 'zap' ] }, { version: '2.1.0', icons: [ '', 'alert', 'alignment-align', 'alignment-aligned-to', 'alignment-unalign', 'arrow-down', 'arrow-left', 'arrow-right', 'arrow-small-down', 'arrow-small-left', 'arrow-small-right', 'arrow-small-up', 'arrow-up', 'beer', 'book', 'bookmark', 'briefcase', 'broadcast', 'browser', 'bug', 'calendar', 'check', 'checklist', 'chevron-down', 'chevron-left', 'chevron-right', 'chevron-up', 'circle-slash', 'circuit-board', 'clippy', 'clock', 'cloud-download', 'cloud-upload', 'code', 'color-mode', 'comment-add', 'comment', 'comment-discussion', 'credit-card', 'dash', 'dashboard', 'database', 'device-camera', 'device-camera-video', 'device-desktop', 'device-mobile', 'diff', 'diff-added', 'diff-ignored', 'diff-modified', 'diff-removed', 'diff-renamed', 'ellipsis', 'eye-unwatch', 'eye-watch', 'eye', 'file-binary', 'file-code', 'file-directory', 'file-media', 'file-pdf', 'file-submodule', 'file-symlink-directory', 'file-symlink-file', 'file-text', 'file-zip', 'flame', 'fold', 'gear', 'gift', 'gist', 'gist-secret', 'git-branch-create', 'git-branch-delete', 'git-branch', 'git-commit', 'git-compare', 'git-merge', 'git-pull-request-abandoned', 'git-pull-request', 'globe', 'graph', 'heart', 'history', 'home', 'horizontal-rule', 'hourglass', 'hubot', 'inbox', 'info', 'issue-closed', 'issue-opened', 'issue-reopened', 'jersey', 'jump-down', 'jump-left', 'jump-right', 'jump-up', 'key', 'keyboard', 'law', 'light-bulb', 'link', 'link-external', 'list-ordered', 'list-unordered', 'location', 'gist-private', 'git-fork-private', 'lock', 'mirror-private', 'logo-github', 'mail', 'mail-read', 'mail-reply', 'mark-github', 'markdown', 'megaphone', 'mention', 'microscope', 'milestone', 'mirror-public', 'mirror', 'mortar-board', 'move-down', 'move-left', 'move-right', 'move-up', 'mute', 'no-newline', 'octoface', 'organization', 'package', 'paintcan', 'pencil', 'person-add', 'person-follow', 'person', 'pin', 'playback-fast-forward', 'playback-pause', 'playback-play', 'playback-rewind', 'plug', 'file-add', 'file-directory-create', 'gist-new', 'plus', 'repo-create', 'podium', 'primitive-dot', 'primitive-square', 'pulse', 'puzzle', 'question', 'quote', 'radio-tower', 'repo-delete', 'repo', 'repo-clone', 'repo-force-push', 'gist-fork', 'repo-forked', 'repo-pull', 'repo-push', 'rocket', 'rss', 'ruby', 'screen-full', 'screen-normal', 'search-save', 'search', 'server', 'settings', 'log-in', 'sign-in', 'log-out', 'sign-out', 'split', 'squirrel', 'star-add', 'star-delete', 'star', 'steps', 'stop', 'repo-sync', 'sync', 'tag-add', 'tag-remove', 'tag', 'telescope', 'terminal', 'three-bars', 'tools', 'trashcan', 'triangle-down', 'triangle-left', 'triangle-right', 'triangle-up', 'unfold', 'unmute', 'versions', 'remove-close', 'x', 'zap' ] }, { version: '2.1.1', icons: [ '', 'alert', 'alignment-align', 'alignment-aligned-to', 'alignment-unalign', 'arrow-down', 'arrow-left', 'arrow-right', 'arrow-small-down', 'arrow-small-left', 'arrow-small-right', 'arrow-small-up', 'arrow-up', 'beer', 'book', 'bookmark', 'briefcase', 'broadcast', 'browser', 'bug', 'calendar', 'check', 'checklist', 'chevron-down', 'chevron-left', 'chevron-right', 'chevron-up', 'circle-slash', 'circuit-board', 'clippy', 'clock', 'cloud-download', 'cloud-upload', 'code', 'color-mode', 'comment-add', 'comment', 'comment-discussion', 'credit-card', 'dash', 'dashboard', 'database', 'device-camera', 'device-camera-video', 'device-desktop', 'device-mobile', 'diff', 'diff-added', 'diff-ignored', 'diff-modified', 'diff-removed', 'diff-renamed', 'ellipsis', 'eye-unwatch', 'eye-watch', 'eye', 'file-binary', 'file-code', 'file-directory', 'file-media', 'file-pdf', 'file-submodule', 'file-symlink-directory', 'file-symlink-file', 'file-text', 'file-zip', 'flame', 'fold', 'gear', 'gift', 'gist', 'gist-secret', 'git-branch-create', 'git-branch-delete', 'git-branch', 'git-commit', 'git-compare', 'git-merge', 'git-pull-request-abandoned', 'git-pull-request', 'globe', 'graph', 'heart', 'history', 'home', 'horizontal-rule', 'hourglass', 'hubot', 'inbox', 'info', 'issue-closed', 'issue-opened', 'issue-reopened', 'jersey', 'jump-down', 'jump-left', 'jump-right', 'jump-up', 'key', 'keyboard', 'law', 'light-bulb', 'link', 'link-external', 'list-ordered', 'list-unordered', 'location', 'gist-private', 'git-fork-private', 'lock', 'mirror-private', 'logo-github', 'mail', 'mail-read', 'mail-reply', 'mark-github', 'markdown', 'megaphone', 'mention', 'microscope', 'milestone', 'mirror-public', 'mirror', 'mortar-board', 'move-down', 'move-left', 'move-right', 'move-up', 'mute', 'no-newline', 'octoface', 'organization', 'package', 'paintcan', 'pencil', 'person-add', 'person-follow', 'person', 'pin', 'playback-fast-forward', 'playback-pause', 'playback-play', 'playback-rewind', 'plug', 'file-add', 'file-directory-create', 'gist-new', 'plus', 'repo-create', 'podium', 'primitive-dot', 'primitive-square', 'pulse', 'puzzle', 'question', 'quote', 'radio-tower', 'repo-delete', 'repo', 'repo-clone', 'repo-force-push', 'gist-fork', 'repo-forked', 'repo-pull', 'repo-push', 'rocket', 'rss', 'ruby', 'screen-full', 'screen-normal', 'search-save', 'search', 'server', 'settings', 'log-in', 'sign-in', 'log-out', 'sign-out', 'split', 'squirrel', 'star-add', 'star-delete', 'star', 'steps', 'stop', 'repo-sync', 'sync', 'tag-add', 'tag-remove', 'tag', 'telescope', 'terminal', 'three-bars', 'tools', 'trashcan', 'triangle-down', 'triangle-left', 'triangle-right', 'triangle-up', 'unfold', 'unmute', 'versions', 'remove-close', 'x', 'zap' ] }, { version: '2.1.2', icons: [ '', 'alert', 'arrow-down', 'arrow-left', 'arrow-right', 'arrow-small-down', 'arrow-small-left', 'arrow-small-right', 'arrow-small-up', 'arrow-up', 'book', 'bookmark', 'briefcase', 'broadcast', 'browser', 'bug', 'calendar', 'check', 'checklist', 'chevron-down', 'chevron-left', 'chevron-right', 'chevron-up', 'circle-slash', 'circuit-board', 'clippy', 'clock', 'cloud-download', 'cloud-upload', 'code', 'comment', 'comment-add', 'comment-discussion', 'credit-card', 'dash', 'dashboard', 'database', 'device-camera', 'device-camera-video', 'device-desktop', 'device-mobile', 'diff', 'diff-added', 'diff-ignored', 'diff-modified', 'diff-removed', 'diff-renamed', 'ellipsis', 'eye', 'eye-unwatch', 'eye-watch', 'file-add', 'file-binary', 'file-code', 'file-directory', 'file-directory-create', 'file-media', 'file-pdf', 'file-submodule', 'file-symlink-directory', 'file-symlink-file', 'file-text', 'file-zip', 'flame', 'fold', 'gear', 'gift', 'gist', 'gist-fork', 'gist-new', 'gist-private', 'gist-secret', 'git-branch', 'git-branch-create', 'git-branch-delete', 'git-commit', 'git-compare', 'git-fork-private', 'git-merge', 'git-pull-request', 'git-pull-request-abandoned', 'globe', 'graph', 'heart', 'history', 'home', 'horizontal-rule', 'hubot', 'inbox', 'info', 'issue-closed', 'issue-opened', 'issue-reopened', 'jersey', 'key', 'keyboard', 'law', 'light-bulb', 'link', 'link-external', 'list-ordered', 'list-unordered', 'location', 'lock', 'log-in', 'logo-github', 'log-out', 'mail', 'mail-read', 'mail-reply', 'markdown', 'mark-github', 'megaphone', 'mention', 'microscope', 'milestone', 'mirror', 'mirror-private', 'mirror-public', 'mortar-board', 'mute', 'no-newline', 'octoface', 'organization', 'package', 'paintcan', 'pencil', 'person', 'person-add', 'person-follow', 'pin', 'plug', 'plus', 'primitive-dot', 'primitive-square', 'pulse', 'question', 'quote', 'radio-tower', 'remove-close', 'repo', 'repo-clone', 'repo-create', 'repo-delete', 'repo-force-push', 'repo-forked', 'repo-pull', 'repo-push', 'repo-sync', 'rocket', 'rss', 'ruby', 'search', 'search-save', 'server', 'settings', 'sign-in', 'sign-out', 'squirrel', 'star', 'star-add', 'star-delete', 'stop', 'sync', 'tag', 'tag-add', 'tag-remove', 'telescope', 'terminal', 'three-bars', 'tools', 'trashcan', 'triangle-down', 'triangle-left', 'triangle-right', 'triangle-up', 'unfold', 'unmute', 'versions', 'x', 'zap' ] }, { version: '2.2.0', icons: [ '', 'alert', 'arrow-down', 'arrow-left', 'arrow-right', 'arrow-small-down', 'arrow-small-left', 'arrow-small-right', 'arrow-small-up', 'arrow-up', 'book', 'bookmark', 'briefcase', 'broadcast', 'browser', 'bug', 'calendar', 'check', 'checklist', 'chevron-down', 'chevron-left', 'chevron-right', 'chevron-up', 'circle-slash', 'circuit-board', 'clippy', 'clock', 'cloud-download', 'cloud-upload', 'code', 'comment', 'comment-add', 'comment-discussion', 'credit-card', 'dash', 'dashboard', 'database', 'device-camera', 'device-camera-video', 'device-desktop', 'device-mobile', 'diff', 'diff-added', 'diff-ignored', 'diff-modified', 'diff-removed', 'diff-renamed', 'ellipsis', 'eye', 'eye-unwatch', 'eye-watch', 'file-add', 'file-binary', 'file-code', 'file-directory', 'file-directory-create', 'file-media', 'file-pdf', 'file-submodule', 'file-symlink-directory', 'file-symlink-file', 'file-text', 'file-zip', 'flame', 'fold', 'gear', 'gift', 'gist', 'gist-fork', 'gist-new', 'gist-private', 'gist-secret', 'git-branch', 'git-branch-create', 'git-branch-delete', 'git-commit', 'git-compare', 'git-fork-private', 'git-merge', 'git-pull-request', 'git-pull-request-abandoned', 'globe', 'graph', 'heart', 'history', 'home', 'horizontal-rule', 'hubot', 'inbox', 'info', 'issue-closed', 'issue-opened', 'issue-reopened', 'jersey', 'key', 'keyboard', 'law', 'light-bulb', 'link', 'link-external', 'list-ordered', 'list-unordered', 'location', 'lock', 'log-in', 'logo-github', 'log-out', 'mail', 'mail-read', 'mail-reply', 'markdown', 'mark-github', 'megaphone', 'mention', 'microscope', 'milestone', 'mirror', 'mirror-private', 'mirror-public', 'mortar-board', 'mute', 'no-newline', 'octoface', 'organization', 'package', 'paintcan', 'pencil', 'person', 'person-add', 'person-follow', 'pin', 'plug', 'plus', 'primitive-dot', 'primitive-square', 'pulse', 'question', 'quote', 'radio-tower', 'remove-close', 'repo', 'repo-clone', 'repo-create', 'repo-delete', 'repo-force-push', 'repo-forked', 'repo-pull', 'repo-push', 'repo-sync', 'rocket', 'rss', 'ruby', 'search', 'search-save', 'server', 'settings', 'sign-in', 'sign-out', 'squirrel', 'star', 'star-add', 'star-delete', 'stop', 'sync', 'tag', 'tag-add', 'tag-remove', 'telescope', 'terminal', 'three-bars', 'thumbsdown', 'thumbsup', 'tools', 'trashcan', 'triangle-down', 'triangle-left', 'triangle-right', 'triangle-up', 'unfold', 'unmute', 'versions', 'x', 'zap' ] }, { version: '2.2.1', icons: [ '', 'alert', 'arrow-down', 'arrow-left', 'arrow-right', 'arrow-small-down', 'arrow-small-left', 'arrow-small-right', 'arrow-small-up', 'arrow-up', 'book', 'bookmark', 'briefcase', 'broadcast', 'browser', 'bug', 'calendar', 'check', 'checklist', 'chevron-down', 'chevron-left', 'chevron-right', 'chevron-up', 'circle-slash', 'circuit-board', 'clippy', 'clock', 'cloud-download', 'cloud-upload', 'code', 'comment', 'comment-add', 'comment-discussion', 'credit-card', 'dash', 'dashboard', 'database', 'device-camera', 'device-camera-video', 'device-desktop', 'device-mobile', 'diff', 'diff-added', 'diff-ignored', 'diff-modified', 'diff-removed', 'diff-renamed', 'ellipsis', 'eye', 'eye-unwatch', 'eye-watch', 'file-add', 'file-binary', 'file-code', 'file-directory', 'file-directory-create', 'file-media', 'file-pdf', 'file-submodule', 'file-symlink-directory', 'file-symlink-file', 'file-text', 'file-zip', 'flame', 'fold', 'gear', 'gift', 'gist', 'gist-fork', 'gist-new', 'gist-private', 'gist-secret', 'git-branch', 'git-branch-create', 'git-branch-delete', 'git-commit', 'git-compare', 'git-fork-private', 'git-merge', 'git-pull-request', 'git-pull-request-abandoned', 'globe', 'graph', 'heart', 'history', 'home', 'horizontal-rule', 'hubot', 'inbox', 'info', 'issue-closed', 'issue-opened', 'issue-reopened', 'jersey', 'key', 'keyboard', 'law', 'light-bulb', 'link', 'link-external', 'list-ordered', 'list-unordered', 'location', 'lock', 'log-in', 'logo-github', 'log-out', 'mail', 'mail-read', 'mail-reply', 'markdown', 'mark-github', 'megaphone', 'mention', 'microscope', 'milestone', 'mirror', 'mirror-private', 'mirror-public', 'mortar-board', 'mute', 'no-newline', 'octoface', 'organization', 'package', 'paintcan', 'pencil', 'person', 'person-add', 'person-follow', 'pin', 'plug', 'plus', 'primitive-dot', 'primitive-square', 'pulse', 'question', 'quote', 'radio-tower', 'remove-close', 'repo', 'repo-clone', 'repo-create', 'repo-delete', 'repo-force-push', 'repo-forked', 'repo-pull', 'repo-push', 'repo-sync', 'rocket', 'rss', 'ruby', 'search', 'search-save', 'server', 'settings', 'sign-in', 'sign-out', 'squirrel', 'star', 'star-add', 'star-delete', 'stop', 'sync', 'tag', 'tag-add', 'tag-remove', 'telescope', 'terminal', 'three-bars', 'thumbsdown', 'thumbsup', 'tools', 'trashcan', 'triangle-down', 'triangle-left', 'triangle-right', 'triangle-up', 'unfold', 'unmute', 'versions', 'x', 'zap' ] }, { version: '2.2.2', icons: [ '', 'alert', 'arrow-down', 'arrow-left', 'arrow-right', 'arrow-small-down', 'arrow-small-left', 'arrow-small-right', 'arrow-small-up', 'arrow-up', 'book', 'bookmark', 'briefcase', 'broadcast', 'browser', 'bug', 'calendar', 'check', 'checklist', 'chevron-down', 'chevron-left', 'chevron-right', 'chevron-up', 'circle-slash', 'circuit-board', 'clippy', 'clock', 'cloud-download', 'cloud-upload', 'code', 'comment', 'comment-add', 'comment-discussion', 'credit-card', 'dash', 'dashboard', 'database', 'device-camera', 'device-camera-video', 'device-desktop', 'device-mobile', 'diff', 'diff-added', 'diff-ignored', 'diff-modified', 'diff-removed', 'diff-renamed', 'ellipsis', 'eye', 'eye-unwatch', 'eye-watch', 'file-add', 'file-binary', 'file-code', 'file-directory', 'file-directory-create', 'file-media', 'file-pdf', 'file-submodule', 'file-symlink-directory', 'file-symlink-file', 'file-text', 'file-zip', 'flame', 'fold', 'gear', 'gift', 'gist', 'gist-fork', 'gist-new', 'gist-private', 'gist-secret', 'git-branch', 'git-branch-create', 'git-branch-delete', 'git-commit', 'git-compare', 'git-fork-private', 'git-merge', 'git-pull-request', 'git-pull-request-abandoned', 'globe', 'graph', 'heart', 'history', 'home', 'horizontal-rule', 'hubot', 'inbox', 'info', 'issue-closed', 'issue-opened', 'issue-reopened', 'jersey', 'key', 'keyboard', 'law', 'light-bulb', 'link', 'link-external', 'list-ordered', 'list-unordered', 'location', 'lock', 'log-in', 'logo-github', 'log-out', 'mail', 'mail-read', 'mail-reply', 'markdown', 'mark-github', 'megaphone', 'mention', 'microscope', 'milestone', 'mirror', 'mirror-private', 'mirror-public', 'mortar-board', 'mute', 'no-newline', 'octoface', 'organization', 'package', 'paintcan', 'pencil', 'person', 'person-add', 'person-follow', 'pin', 'plug', 'plus', 'primitive-dot', 'primitive-square', 'pulse', 'question', 'quote', 'radio-tower', 'remove-close', 'repo', 'repo-clone', 'repo-create', 'repo-delete', 'repo-force-push', 'repo-forked', 'repo-pull', 'repo-push', 'repo-sync', 'rocket', 'rss', 'ruby', 'search', 'search-save', 'server', 'settings', 'sign-in', 'sign-out', 'squirrel', 'star', 'star-add', 'star-delete', 'stop', 'sync', 'tag', 'tag-add', 'tag-remove', 'telescope', 'terminal', 'three-bars', 'thumbsdown', 'thumbsup', 'tools', 'trashcan', 'triangle-down', 'triangle-left', 'triangle-right', 'triangle-up', 'unfold', 'unmute', 'versions', 'x', 'zap' ] }, { version: '2.2.3', icons: [ '', 'alert', 'arrow-down', 'arrow-left', 'arrow-right', 'arrow-small-down', 'arrow-small-left', 'arrow-small-right', 'arrow-small-up', 'arrow-up', 'book', 'bookmark', 'briefcase', 'broadcast', 'browser', 'bug', 'calendar', 'check', 'checklist', 'chevron-down', 'chevron-left', 'chevron-right', 'chevron-up', 'circle-slash', 'circuit-board', 'clippy', 'clock', 'cloud-download', 'cloud-upload', 'code', 'comment', 'comment-add', 'comment-discussion', 'credit-card', 'dash', 'dashboard', 'database', 'device-camera', 'device-camera-video', 'device-desktop', 'device-mobile', 'diff', 'diff-added', 'diff-ignored', 'diff-modified', 'diff-removed', 'diff-renamed', 'ellipsis', 'eye', 'eye-unwatch', 'eye-watch', 'file-add', 'file-binary', 'file-code', 'file-directory', 'file-directory-create', 'file-media', 'file-pdf', 'file-submodule', 'file-symlink-directory', 'file-symlink-file', 'file-text', 'file-zip', 'flame', 'fold', 'gear', 'gift', 'gist', 'gist-fork', 'gist-new', 'gist-private', 'gist-secret', 'git-branch', 'git-branch-create', 'git-branch-delete', 'git-commit', 'git-compare', 'git-fork-private', 'git-merge', 'git-pull-request', 'git-pull-request-abandoned', 'globe', 'graph', 'heart', 'history', 'home', 'horizontal-rule', 'hubot', 'inbox', 'info', 'issue-closed', 'issue-opened', 'issue-reopened', 'jersey', 'key', 'keyboard', 'law', 'light-bulb', 'link', 'link-external', 'list-ordered', 'list-unordered', 'location', 'lock', 'log-in', 'logo-github', 'log-out', 'mail', 'mail-read', 'mail-reply', 'markdown', 'mark-github', 'megaphone', 'mention', 'microscope', 'milestone', 'mirror', 'mirror-private', 'mirror-public', 'mortar-board', 'mute', 'no-newline', 'octoface', 'organization', 'package', 'paintcan', 'pencil', 'person', 'person-add', 'person-follow', 'pin', 'plug', 'plus', 'primitive-dot', 'primitive-square', 'pulse', 'question', 'quote', 'radio-tower', 'remove-close', 'repo', 'repo-clone', 'repo-create', 'repo-delete', 'repo-force-push', 'repo-forked', 'repo-pull', 'repo-push', 'repo-sync', 'rocket', 'rss', 'ruby', 'search', 'search-save', 'server', 'settings', 'sign-in', 'sign-out', 'squirrel', 'star', 'star-add', 'star-delete', 'stop', 'sync', 'tag', 'tag-add', 'tag-remove', 'telescope', 'terminal', 'three-bars', 'thumbsdown', 'thumbsup', 'tools', 'trashcan', 'triangle-down', 'triangle-left', 'triangle-right', 'triangle-up', 'unfold', 'unmute', 'versions', 'x', 'zap' ] }, { version: '2.3.0', icons: [ '', 'alert', 'arrow-down', 'arrow-left', 'arrow-right', 'arrow-small-down', 'arrow-small-left', 'arrow-small-right', 'arrow-small-up', 'arrow-up', 'book', 'bookmark', 'briefcase', 'broadcast', 'browser', 'bug', 'calendar', 'check', 'checklist', 'chevron-down', 'chevron-left', 'chevron-right', 'chevron-up', 'circle-slash', 'circuit-board', 'clippy', 'clock', 'cloud-download', 'cloud-upload', 'code', 'comment', 'comment-add', 'comment-discussion', 'credit-card', 'dash', 'dashboard', 'database', 'device-camera', 'device-camera-video', 'device-desktop', 'device-mobile', 'diff', 'diff-added', 'diff-ignored', 'diff-modified', 'diff-removed', 'diff-renamed', 'ellipsis', 'eye', 'eye-unwatch', 'eye-watch', 'file-add', 'file-binary', 'file-code', 'file-directory', 'file-directory-create', 'file-media', 'file-pdf', 'file-submodule', 'file-symlink-directory', 'file-symlink-file', 'file-text', 'file-zip', 'flame', 'fold', 'gear', 'gift', 'gist', 'gist-fork', 'gist-new', 'gist-private', 'gist-secret', 'git-branch', 'git-branch-create', 'git-branch-delete', 'git-commit', 'git-compare', 'git-fork-private', 'git-merge', 'git-pull-request', 'git-pull-request-abandoned', 'globe', 'graph', 'heart', 'history', 'home', 'horizontal-rule', 'hubot', 'inbox', 'info', 'issue-closed', 'issue-opened', 'issue-reopened', 'jersey', 'key', 'keyboard', 'law', 'light-bulb', 'link', 'link-external', 'list-ordered', 'list-unordered', 'location', 'lock', 'log-in', 'logo-github', 'log-out', 'mail', 'mail-read', 'mail-reply', 'markdown', 'mark-github', 'megaphone', 'mention', 'microscope', 'milestone', 'mirror', 'mirror-private', 'mirror-public', 'mortar-board', 'mute', 'no-newline', 'octoface', 'organization', 'package', 'paintcan', 'pencil', 'person', 'person-add', 'person-follow', 'pin', 'plug', 'plus', 'primitive-dot', 'primitive-square', 'pulse', 'question', 'quote', 'radio-tower', 'remove-close', 'repo', 'repo-clone', 'repo-create', 'repo-delete', 'repo-force-push', 'repo-forked', 'repo-pull', 'repo-push', 'repo-sync', 'rocket', 'rss', 'ruby', 'search', 'search-save', 'server', 'settings', 'sign-in', 'sign-out', 'squirrel', 'star', 'star-add', 'star-delete', 'stop', 'sync', 'tag', 'tag-add', 'tag-remove', 'telescope', 'terminal', 'three-bars', 'thumbsdown', 'thumbsup', 'tools', 'trashcan', 'triangle-down', 'triangle-left', 'triangle-right', 'triangle-up', 'unfold', 'unmute', 'versions', 'x', 'zap' ] }, { version: '2.4.0', icons: [ '', 'alert', 'arrow-down', 'arrow-left', 'arrow-right', 'arrow-small-down', 'arrow-small-left', 'arrow-small-right', 'arrow-small-up', 'arrow-up', 'book', 'bookmark', 'briefcase', 'broadcast', 'browser', 'bug', 'calendar', 'check', 'checklist', 'chevron-down', 'chevron-left', 'chevron-right', 'chevron-up', 'circle-slash', 'circuit-board', 'clippy', 'clock', 'cloud-download', 'cloud-upload', 'code', 'comment', 'comment-add', 'comment-discussion', 'credit-card', 'dash', 'dashboard', 'database', 'device-camera', 'device-camera-video', 'device-desktop', 'device-mobile', 'diff', 'diff-added', 'diff-ignored', 'diff-modified', 'diff-removed', 'diff-renamed', 'ellipsis', 'eye', 'eye-unwatch', 'eye-watch', 'file-add', 'file-binary', 'file-code', 'file-directory', 'file-directory-create', 'file-media', 'file-pdf', 'file-submodule', 'file-symlink-directory', 'file-symlink-file', 'file-text', 'file-zip', 'flame', 'fold', 'gear', 'gift', 'gist', 'gist-fork', 'gist-new', 'gist-private', 'gist-secret', 'git-branch', 'git-branch-create', 'git-branch-delete', 'git-commit', 'git-compare', 'git-fork-private', 'git-merge', 'git-pull-request', 'git-pull-request-abandoned', 'globe', 'graph', 'heart', 'history', 'home', 'horizontal-rule', 'hubot', 'inbox', 'info', 'issue-closed', 'issue-opened', 'issue-reopened', 'jersey', 'key', 'keyboard', 'law', 'light-bulb', 'link', 'link-external', 'list-ordered', 'list-unordered', 'location', 'lock', 'log-in', 'logo-github', 'log-out', 'mail', 'mail-read', 'mail-reply', 'markdown', 'mark-github', 'megaphone', 'mention', 'microscope', 'milestone', 'mirror', 'mirror-private', 'mirror-public', 'mortar-board', 'mute', 'no-newline', 'octoface', 'organization', 'package', 'paintcan', 'pencil', 'person', 'person-add', 'person-follow', 'pin', 'plug', 'plus', 'primitive-dot', 'primitive-square', 'pulse', 'question', 'quote', 'radio-tower', 'remove-close', 'repo', 'repo-clone', 'repo-create', 'repo-delete', 'repo-force-push', 'repo-forked', 'repo-pull', 'repo-push', 'repo-sync', 'rocket', 'rss', 'ruby', 'search', 'search-save', 'server', 'settings', 'sign-in', 'sign-out', 'squirrel', 'star', 'star-add', 'star-delete', 'stop', 'sync', 'tag', 'tag-add', 'tag-remove', 'telescope', 'terminal', 'three-bars', 'thumbsdown', 'thumbsup', 'tools', 'trashcan', 'triangle-down', 'triangle-left', 'triangle-right', 'triangle-up', 'unfold', 'unmute', 'versions', 'x', 'zap' ] }, { version: '2.4.1', icons: [ '', 'alert', 'arrow-down', 'arrow-left', 'arrow-right', 'arrow-small-down', 'arrow-small-left', 'arrow-small-right', 'arrow-small-up', 'arrow-up', 'book', 'bookmark', 'briefcase', 'broadcast', 'browser', 'bug', 'calendar', 'check', 'checklist', 'chevron-down', 'chevron-left', 'chevron-right', 'chevron-up', 'circle-slash', 'circuit-board', 'clippy', 'clock', 'cloud-download', 'cloud-upload', 'code', 'comment', 'comment-add', 'comment-discussion', 'credit-card', 'dash', 'dashboard', 'database', 'device-camera', 'device-camera-video', 'device-desktop', 'device-mobile', 'diff', 'diff-added', 'diff-ignored', 'diff-modified', 'diff-removed', 'diff-renamed', 'ellipsis', 'eye', 'eye-unwatch', 'eye-watch', 'file-add', 'file-binary', 'file-code', 'file-directory', 'file-directory-create', 'file-media', 'file-pdf', 'file-submodule', 'file-symlink-directory', 'file-symlink-file', 'file-text', 'file-zip', 'flame', 'fold', 'gear', 'gift', 'gist', 'gist-fork', 'gist-new', 'gist-private', 'gist-secret', 'git-branch', 'git-branch-create', 'git-branch-delete', 'git-commit', 'git-compare', 'git-fork-private', 'git-merge', 'git-pull-request', 'git-pull-request-abandoned', 'globe', 'graph', 'heart', 'history', 'home', 'horizontal-rule', 'hubot', 'inbox', 'info', 'issue-closed', 'issue-opened', 'issue-reopened', 'jersey', 'key', 'keyboard', 'law', 'light-bulb', 'link', 'link-external', 'list-ordered', 'list-unordered', 'location', 'lock', 'log-in', 'logo-github', 'log-out', 'mail', 'mail-read', 'mail-reply', 'markdown', 'mark-github', 'megaphone', 'mention', 'microscope', 'milestone', 'mirror', 'mirror-private', 'mirror-public', 'mortar-board', 'mute', 'no-newline', 'octoface', 'organization', 'package', 'paintcan', 'pencil', 'person', 'person-add', 'person-follow', 'pin', 'plug', 'plus', 'primitive-dot', 'primitive-square', 'pulse', 'question', 'quote', 'radio-tower', 'remove-close', 'repo', 'repo-clone', 'repo-create', 'repo-delete', 'repo-force-push', 'repo-forked', 'repo-pull', 'repo-push', 'repo-sync', 'rocket', 'rss', 'ruby', 'search', 'search-save', 'server', 'settings', 'sign-in', 'sign-out', 'squirrel', 'star', 'star-add', 'star-delete', 'stop', 'sync', 'tag', 'tag-add', 'tag-remove', 'telescope', 'terminal', 'three-bars', 'thumbsdown', 'thumbsup', 'tools', 'trashcan', 'triangle-down', 'triangle-left', 'triangle-right', 'triangle-up', 'unfold', 'unmute', 'versions', 'x', 'zap' ] }, { version: '3.0.0', icons: [ '', 'alert', 'arrow-down', 'arrow-left', 'arrow-right', 'arrow-small-down', 'arrow-small-left', 'arrow-small-right', 'arrow-small-up', 'arrow-up', 'beaker', 'bell', 'book', 'bookmark', 'briefcase', 'broadcast', 'browser', 'bug', 'calendar', 'check', 'checklist', 'chevron-down', 'chevron-left', 'chevron-right', 'chevron-up', 'circle-slash', 'circuit-board', 'clippy', 'clock', 'clone', 'cloud-download', 'cloud-upload', 'code', 'comment', 'comment-add', 'comment-discussion', 'credit-card', 'dash', 'dashboard', 'database', 'desktop-download', 'device-camera', 'device-camera-video', 'device-desktop', 'device-mobile', 'diff', 'diff-added', 'diff-ignored', 'diff-modified', 'diff-removed', 'diff-renamed', 'ellipsis', 'eye', 'eye-unwatch', 'eye-watch', 'file-add', 'file-binary', 'file-code', 'file-directory', 'file-directory-create', 'file-media', 'file-pdf', 'file-submodule', 'file-symlink-directory', 'file-symlink-file', 'file-text', 'file-zip', 'flame', 'fold', 'gear', 'gift', 'gist', 'gist-fork', 'gist-new', 'gist-private', 'gist-secret', 'git-branch', 'git-branch-create', 'git-branch-delete', 'git-commit', 'git-compare', 'git-fork-private', 'git-merge', 'git-pull-request', 'git-pull-request-abandoned', 'globe', 'graph', 'heart', 'history', 'home', 'horizontal-rule', 'hubot', 'inbox', 'info', 'issue-closed', 'issue-opened', 'issue-reopened', 'jersey', 'key', 'keyboard', 'law', 'light-bulb', 'link', 'link-external', 'list-ordered', 'list-unordered', 'location', 'lock', 'log-in', 'logo-github', 'log-out', 'mail', 'mail-read', 'mail-reply', 'markdown', 'mark-github', 'megaphone', 'mention', 'microscope', 'milestone', 'mirror', 'mirror-private', 'mirror-public', 'mortar-board', 'mute', 'no-newline', 'octoface', 'organization', 'package', 'paintcan', 'pencil', 'person', 'person-add', 'person-follow', 'pin', 'plug', 'plus', 'primitive-dot', 'primitive-square', 'pulse', 'question', 'quote', 'radio-tower', 'remove-close', 'repo', 'repo-clone', 'repo-create', 'repo-delete', 'repo-force-push', 'repo-forked', 'repo-pull', 'repo-push', 'repo-sync', 'rocket', 'rss', 'ruby', 'search', 'search-save', 'server', 'settings', 'sign-in', 'sign-out', 'squirrel', 'star', 'star-add', 'star-delete', 'stop', 'sync', 'tag', 'tag-add', 'tag-remove', 'telescope', 'terminal', 'three-bars', 'thumbsdown', 'thumbsup', 'tools', 'trashcan', 'triangle-down', 'triangle-left', 'triangle-right', 'triangle-up', 'unfold', 'unmute', 'versions', 'watch', 'x', 'zap' ] }, { version: '3.1.0', icons: [ '', 'alert', 'arrow-down', 'arrow-left', 'arrow-right', 'arrow-small-down', 'arrow-small-left', 'arrow-small-right', 'arrow-small-up', 'arrow-up', 'beaker', 'bell', 'book', 'bookmark', 'briefcase', 'broadcast', 'browser', 'bug', 'calendar', 'check', 'checklist', 'chevron-down', 'chevron-left', 'chevron-right', 'chevron-up', 'circle-slash', 'circuit-board', 'clippy', 'clock', 'clone', 'cloud-download', 'cloud-upload', 'code', 'comment', 'comment-add', 'comment-discussion', 'credit-card', 'dash', 'dashboard', 'database', 'desktop-download', 'device-camera', 'device-camera-video', 'device-desktop', 'device-mobile', 'diff', 'diff-added', 'diff-ignored', 'diff-modified', 'diff-removed', 'diff-renamed', 'ellipsis', 'eye', 'eye-unwatch', 'eye-watch', 'file-add', 'file-binary', 'file-code', 'file-directory', 'file-directory-create', 'file-media', 'file-pdf', 'file-submodule', 'file-symlink-directory', 'file-symlink-file', 'file-text', 'file-zip', 'flame', 'fold', 'gear', 'gift', 'gist', 'gist-fork', 'gist-new', 'gist-private', 'gist-secret', 'git-branch', 'git-branch-create', 'git-branch-delete', 'git-commit', 'git-compare', 'git-fork-private', 'git-merge', 'git-pull-request', 'git-pull-request-abandoned', 'globe', 'graph', 'heart', 'history', 'home', 'horizontal-rule', 'hubot', 'inbox', 'info', 'issue-closed', 'issue-opened', 'issue-reopened', 'jersey', 'key', 'keyboard', 'law', 'light-bulb', 'link', 'link-external', 'list-ordered', 'list-unordered', 'location', 'lock', 'log-in', 'logo-github', 'log-out', 'mail', 'mail-read', 'mail-reply', 'markdown', 'mark-github', 'megaphone', 'mention', 'microscope', 'milestone', 'mirror', 'mirror-private', 'mirror-public', 'mortar-board', 'mute', 'no-newline', 'octoface', 'organization', 'package', 'paintcan', 'pencil', 'person', 'person-add', 'person-follow', 'pin', 'plug', 'plus', 'primitive-dot', 'primitive-square', 'pulse', 'question', 'quote', 'radio-tower', 'remove-close', 'repo', 'repo-clone', 'repo-create', 'repo-delete', 'repo-force-push', 'repo-forked', 'repo-pull', 'repo-push', 'repo-sync', 'rocket', 'rss', 'ruby', 'search', 'search-save', 'server', 'settings', 'shield', 'sign-in', 'sign-out', 'squirrel', 'star', 'star-add', 'star-delete', 'stop', 'sync', 'tag', 'tag-add', 'tag-remove', 'telescope', 'terminal', 'three-bars', 'thumbsdown', 'thumbsup', 'tools', 'trashcan', 'triangle-down', 'triangle-left', 'triangle-right', 'triangle-up', 'unfold', 'unmute', 'versions', 'watch', 'x', 'zap' ] }, { version: '3.2.0', icons: [ '', 'alert', 'arrow-down', 'arrow-left', 'arrow-right', 'arrow-small-down', 'arrow-small-left', 'arrow-small-right', 'arrow-small-up', 'arrow-up', 'beaker', 'bell', 'bold', 'book', 'bookmark', 'briefcase', 'broadcast', 'browser', 'bug', 'calendar', 'check', 'checklist', 'chevron-down', 'chevron-left', 'chevron-right', 'chevron-up', 'circle-slash', 'circuit-board', 'clippy', 'clock', 'clone', 'cloud-download', 'cloud-upload', 'code', 'comment', 'comment-add', 'comment-discussion', 'credit-card', 'dash', 'dashboard', 'database', 'desktop-download', 'device-camera', 'device-camera-video', 'device-desktop', 'device-mobile', 'diff', 'diff-added', 'diff-ignored', 'diff-modified', 'diff-removed', 'diff-renamed', 'ellipsis', 'eye', 'eye-unwatch', 'eye-watch', 'file-add', 'file-binary', 'file-code', 'file-directory', 'file-directory-create', 'file-media', 'file-pdf', 'file-submodule', 'file-symlink-directory', 'file-symlink-file', 'file-text', 'file-zip', 'flame', 'fold', 'gear', 'gift', 'gist', 'gist-fork', 'gist-new', 'gist-private', 'gist-secret', 'git-branch', 'git-branch-create', 'git-branch-delete', 'git-commit', 'git-compare', 'git-fork-private', 'git-merge', 'git-pull-request', 'git-pull-request-abandoned', 'globe', 'graph', 'heart', 'history', 'home', 'horizontal-rule', 'hubot', 'inbox', 'info', 'issue-closed', 'issue-opened', 'issue-reopened', 'italic', 'jersey', 'key', 'keyboard', 'law', 'light-bulb', 'link', 'link-external', 'list-ordered', 'list-unordered', 'location', 'lock', 'log-in', 'logo-github', 'log-out', 'mail', 'mail-read', 'mail-reply', 'markdown', 'mark-github', 'megaphone', 'mention', 'microscope', 'milestone', 'mirror', 'mirror-private', 'mirror-public', 'mortar-board', 'mute', 'no-newline', 'octoface', 'organization', 'package', 'paintcan', 'pencil', 'person', 'person-add', 'person-follow', 'pin', 'plug', 'plus', 'primitive-dot', 'primitive-square', 'pulse', 'question', 'quote', 'radio-tower', 'remove-close', 'repo', 'repo-clone', 'repo-create', 'repo-delete', 'repo-force-push', 'repo-forked', 'repo-pull', 'repo-push', 'repo-sync', 'rocket', 'rss', 'ruby', 'search', 'search-save', 'server', 'settings', 'shield', 'sign-in', 'sign-out', 'squirrel', 'star', 'star-add', 'star-delete', 'stop', 'sync', 'tag', 'tag-add', 'tag-remove', 'tasklist', 'telescope', 'terminal', 'text-size', 'three-bars', 'thumbsdown', 'thumbsup', 'tools', 'trashcan', 'triangle-down', 'triangle-left', 'triangle-right', 'triangle-up', 'unfold', 'unmute', 'versions', 'watch', 'x', 'zap' ] }, { version: '3.3.0', icons: [ '', 'alert', 'arrow-down', 'arrow-left', 'arrow-right', 'arrow-small-down', 'arrow-small-left', 'arrow-small-right', 'arrow-small-up', 'arrow-up', 'beaker', 'bell', 'bold', 'book', 'bookmark', 'briefcase', 'broadcast', 'browser', 'bug', 'calendar', 'check', 'checklist', 'chevron-down', 'chevron-left', 'chevron-right', 'chevron-up', 'circle-slash', 'circuit-board', 'clippy', 'clock', 'clone', 'cloud-download', 'cloud-upload', 'code', 'comment', 'comment-add', 'comment-discussion', 'credit-card', 'dash', 'dashboard', 'database', 'desktop-download', 'device-camera', 'device-camera-video', 'device-desktop', 'device-mobile', 'diff', 'diff-added', 'diff-ignored', 'diff-modified', 'diff-removed', 'diff-renamed', 'ellipsis', 'eye', 'eye-unwatch', 'eye-watch', 'file-add', 'file-binary', 'file-code', 'file-directory', 'file-directory-create', 'file-media', 'file-pdf', 'file-submodule', 'file-symlink-directory', 'file-symlink-file', 'file-text', 'file-zip', 'flame', 'fold', 'gear', 'gift', 'gist', 'gist-fork', 'gist-new', 'gist-private', 'gist-secret', 'git-branch', 'git-branch-create', 'git-branch-delete', 'git-commit', 'git-compare', 'git-fork-private', 'git-merge', 'git-pull-request', 'git-pull-request-abandoned', 'globe', 'graph', 'heart', 'history', 'home', 'horizontal-rule', 'hubot', 'inbox', 'info', 'issue-closed', 'issue-opened', 'issue-reopened', 'italic', 'jersey', 'key', 'keyboard', 'law', 'light-bulb', 'link', 'link-external', 'list-ordered', 'list-unordered', 'location', 'lock', 'log-in', 'logo-gist', 'logo-github', 'log-out', 'mail', 'mail-read', 'mail-reply', 'markdown', 'mark-github', 'megaphone', 'mention', 'microscope', 'milestone', 'mirror', 'mirror-private', 'mirror-public', 'mortar-board', 'mute', 'no-newline', 'octoface', 'organization', 'package', 'paintcan', 'pencil', 'person', 'person-add', 'person-follow', 'pin', 'plug', 'plus', 'primitive-dot', 'primitive-square', 'pulse', 'question', 'quote', 'radio-tower', 'remove-close', 'repo', 'repo-clone', 'repo-create', 'repo-delete', 'repo-force-push', 'repo-forked', 'repo-pull', 'repo-push', 'repo-sync', 'rocket', 'rss', 'ruby', 'search', 'search-save', 'server', 'settings', 'shield', 'sign-in', 'sign-out', 'squirrel', 'star', 'star-add', 'star-delete', 'stop', 'sync', 'tag', 'tag-add', 'tag-remove', 'tasklist', 'telescope', 'terminal', 'text-size', 'three-bars', 'thumbsdown', 'thumbsup', 'tools', 'trashcan', 'triangle-down', 'triangle-left', 'triangle-right', 'triangle-up', 'unfold', 'unmute', 'versions', 'watch', 'x', 'zap' ] }, { version: '3.4.0', icons: [ '', 'alert', 'arrow-down', 'arrow-left', 'arrow-right', 'arrow-small-down', 'arrow-small-left', 'arrow-small-right', 'arrow-small-up', 'arrow-up', 'beaker', 'bell', 'bold', 'book', 'bookmark', 'briefcase', 'broadcast', 'browser', 'bug', 'calendar', 'check', 'checklist', 'chevron-down', 'chevron-left', 'chevron-right', 'chevron-up', 'circle-slash', 'circuit-board', 'clippy', 'clock', 'clone', 'cloud-download', 'cloud-upload', 'code', 'comment', 'comment-add', 'comment-discussion', 'credit-card', 'dash', 'dashboard', 'database', 'desktop-download', 'device-camera', 'device-camera-video', 'device-desktop', 'device-mobile', 'diff', 'diff-added', 'diff-ignored', 'diff-modified', 'diff-removed', 'diff-renamed', 'ellipsis', 'eye', 'eye-unwatch', 'eye-watch', 'file-add', 'file-binary', 'file-code', 'file-directory', 'file-directory-create', 'file-media', 'file-pdf', 'file-submodule', 'file-symlink-directory', 'file-symlink-file', 'file-text', 'file-zip', 'flame', 'fold', 'gear', 'gift', 'gist', 'gist-fork', 'gist-new', 'gist-private', 'gist-secret', 'git-branch', 'git-branch-create', 'git-branch-delete', 'git-commit', 'git-compare', 'git-fork-private', 'git-merge', 'git-pull-request', 'git-pull-request-abandoned', 'globe', 'graph', 'heart', 'history', 'home', 'horizontal-rule', 'hubot', 'inbox', 'info', 'issue-closed', 'issue-opened', 'issue-reopened', 'italic', 'jersey', 'key', 'keyboard', 'law', 'light-bulb', 'link', 'link-external', 'list-ordered', 'list-unordered', 'location', 'lock', 'log-in', 'logo-gist', 'logo-github', 'log-out', 'mail', 'mail-read', 'mail-reply', 'markdown', 'mark-github', 'megaphone', 'mention', 'microscope', 'milestone', 'mirror', 'mirror-private', 'mirror-public', 'mortar-board', 'mute', 'no-newline', 'octoface', 'organization', 'package', 'paintcan', 'pencil', 'person', 'person-add', 'person-follow', 'pin', 'plug', 'plus', 'primitive-dot', 'primitive-square', 'pulse', 'question', 'quote', 'radio-tower', 'remove-close', 'repo', 'repo-clone', 'repo-create', 'repo-delete', 'repo-force-push', 'repo-forked', 'repo-pull', 'repo-push', 'repo-sync', 'rocket', 'rss', 'ruby', 'search', 'search-save', 'server', 'settings', 'shield', 'sign-in', 'sign-out', 'smiley', 'squirrel', 'star', 'star-add', 'star-delete', 'stop', 'sync', 'tag', 'tag-add', 'tag-remove', 'tasklist', 'telescope', 'terminal', 'text-size', 'three-bars', 'thumbsdown', 'thumbsup', 'tools', 'trashcan', 'triangle-down', 'triangle-left', 'triangle-right', 'triangle-up', 'unfold', 'unmute', 'verified', 'versions', 'watch', 'x', 'zap' ] }, { version: '3.4.1', icons: [ '', 'alert', 'arrow-down', 'arrow-left', 'arrow-right', 'arrow-small-down', 'arrow-small-left', 'arrow-small-right', 'arrow-small-up', 'arrow-up', 'beaker', 'bell', 'bold', 'book', 'bookmark', 'briefcase', 'broadcast', 'browser', 'bug', 'calendar', 'check', 'checklist', 'chevron-down', 'chevron-left', 'chevron-right', 'chevron-up', 'circle-slash', 'circuit-board', 'clippy', 'clock', 'clone', 'cloud-download', 'cloud-upload', 'code', 'comment', 'comment-add', 'comment-discussion', 'credit-card', 'dash', 'dashboard', 'database', 'desktop-download', 'device-camera', 'device-camera-video', 'device-desktop', 'device-mobile', 'diff', 'diff-added', 'diff-ignored', 'diff-modified', 'diff-removed', 'diff-renamed', 'ellipsis', 'eye', 'eye-unwatch', 'eye-watch', 'file-add', 'file-binary', 'file-code', 'file-directory', 'file-directory-create', 'file-media', 'file-pdf', 'file-submodule', 'file-symlink-directory', 'file-symlink-file', 'file-text', 'file-zip', 'flame', 'fold', 'gear', 'gift', 'gist', 'gist-fork', 'gist-new', 'gist-private', 'gist-secret', 'git-branch', 'git-branch-create', 'git-branch-delete', 'git-commit', 'git-compare', 'git-fork-private', 'git-merge', 'git-pull-request', 'git-pull-request-abandoned', 'globe', 'graph', 'heart', 'history', 'home', 'horizontal-rule', 'hubot', 'inbox', 'info', 'issue-closed', 'issue-opened', 'issue-reopened', 'italic', 'jersey', 'key', 'keyboard', 'law', 'light-bulb', 'link', 'link-external', 'list-ordered', 'list-unordered', 'location', 'lock', 'log-in', 'logo-gist', 'logo-github', 'log-out', 'mail', 'mail-read', 'mail-reply', 'markdown', 'mark-github', 'megaphone', 'mention', 'microscope', 'milestone', 'mirror', 'mirror-private', 'mirror-public', 'mortar-board', 'mute', 'no-newline', 'octoface', 'organization', 'package', 'paintcan', 'pencil', 'person', 'person-add', 'person-follow', 'pin', 'plug', 'plus', 'primitive-dot', 'primitive-square', 'pulse', 'question', 'quote', 'radio-tower', 'remove-close', 'repo', 'repo-clone', 'repo-create', 'repo-delete', 'repo-force-push', 'repo-forked', 'repo-pull', 'repo-push', 'repo-sync', 'rocket', 'rss', 'ruby', 'search', 'search-save', 'server', 'settings', 'shield', 'sign-in', 'sign-out', 'smiley', 'squirrel', 'star', 'star-add', 'star-delete', 'stop', 'sync', 'tag', 'tag-add', 'tag-remove', 'tasklist', 'telescope', 'terminal', 'text-size', 'three-bars', 'thumbsdown', 'thumbsup', 'tools', 'trashcan', 'triangle-down', 'triangle-left', 'triangle-right', 'triangle-up', 'unfold', 'unmute', 'verified', 'versions', 'watch', 'x', 'zap' ] }, { version: '3.5.0', icons: [ '', 'alert', 'arrow-down', 'arrow-left', 'arrow-right', 'arrow-small-down', 'arrow-small-left', 'arrow-small-right', 'arrow-small-up', 'arrow-up', 'beaker', 'bell', 'bold', 'book', 'bookmark', 'briefcase', 'broadcast', 'browser', 'bug', 'calendar', 'check', 'checklist', 'chevron-down', 'chevron-left', 'chevron-right', 'chevron-up', 'circle-slash', 'circuit-board', 'clippy', 'clock', 'clone', 'cloud-download', 'cloud-upload', 'code', 'comment', 'comment-add', 'comment-discussion', 'credit-card', 'dash', 'dashboard', 'database', 'desktop-download', 'device-camera', 'device-camera-video', 'device-desktop', 'device-mobile', 'diff', 'diff-added', 'diff-ignored', 'diff-modified', 'diff-removed', 'diff-renamed', 'ellipsis', 'eye', 'eye-unwatch', 'eye-watch', 'file-add', 'file-binary', 'file-code', 'file-directory', 'file-directory-create', 'file-media', 'file-pdf', 'file-submodule', 'file-symlink-directory', 'file-symlink-file', 'file-text', 'file-zip', 'flame', 'fold', 'gear', 'gift', 'gist', 'gist-fork', 'gist-new', 'gist-private', 'gist-secret', 'git-branch', 'git-branch-create', 'git-branch-delete', 'git-commit', 'git-compare', 'git-fork-private', 'git-merge', 'git-pull-request', 'git-pull-request-abandoned', 'globe', 'graph', 'heart', 'history', 'home', 'horizontal-rule', 'hubot', 'inbox', 'info', 'issue-closed', 'issue-opened', 'issue-reopened', 'italic', 'jersey', 'key', 'keyboard', 'law', 'light-bulb', 'link', 'link-external', 'list-ordered', 'list-unordered', 'location', 'lock', 'log-in', 'logo-gist', 'logo-github', 'log-out', 'mail', 'mail-read', 'mail-reply', 'markdown', 'mark-github', 'megaphone', 'mention', 'microscope', 'milestone', 'mirror', 'mirror-private', 'mirror-public', 'mortar-board', 'mute', 'no-newline', 'octoface', 'organization', 'package', 'paintcan', 'pencil', 'person', 'person-add', 'person-follow', 'pin', 'plug', 'plus', 'primitive-dot', 'primitive-square', 'pulse', 'question', 'quote', 'radio-tower', 'remove-close', 'repo', 'repo-clone', 'repo-create', 'repo-delete', 'repo-force-push', 'repo-forked', 'repo-pull', 'repo-push', 'repo-sync', 'rocket', 'rss', 'ruby', 'search', 'search-save', 'server', 'settings', 'shield', 'sign-in', 'sign-out', 'smiley', 'squirrel', 'star', 'star-add', 'star-delete', 'stop', 'sync', 'tag', 'tag-add', 'tag-remove', 'tasklist', 'telescope', 'terminal', 'text-size', 'three-bars', 'thumbsdown', 'thumbsup', 'tools', 'trashcan', 'triangle-down', 'triangle-left', 'triangle-right', 'triangle-up', 'unfold', 'unmute', 'unverified', 'verified', 'versions', 'watch', 'x', 'zap' ] }, { version: '4.0.0', icons: [ '', 'alert', 'arrow-down', 'arrow-left', 'arrow-right', 'arrow-small-down', 'arrow-small-left', 'arrow-small-right', 'arrow-small-up', 'arrow-up', 'beaker', 'bell', 'bold', 'book', 'bookmark', 'briefcase', 'broadcast', 'browser', 'bug', 'calendar', 'check', 'checklist', 'chevron-down', 'chevron-left', 'chevron-right', 'chevron-up', 'circle-slash', 'circuit-board', 'clippy', 'clock', 'cloud-download', 'cloud-upload', 'code', 'comment', 'comment-discussion', 'credit-card', 'dash', 'dashboard', 'database', 'desktop-download', 'device-camera', 'device-camera-video', 'device-desktop', 'device-mobile', 'diff', 'diff-added', 'diff-ignored', 'diff-modified', 'diff-removed', 'diff-renamed', 'ellipses', 'ellipsis', 'eye', 'file', 'file-binary', 'file-code', 'file-directory', 'file-media', 'file-pdf', 'file-submodule', 'file-symlink-directory', 'file-symlink-file', 'file-text', 'file-zip', 'flame', 'fold', 'gear', 'gift', 'gist', 'gist-secret', 'git-branch', 'git-commit', 'git-compare', 'git-merge', 'git-pull-request', 'globe', 'graph', 'heart', 'history', 'home', 'horizontal-rule', 'hubot', 'inbox', 'info', 'issue-closed', 'issue-opened', 'issue-reopened', 'italic', 'jersey', 'key', 'keyboard', 'law', 'light-bulb', 'link', 'link-external', 'list-ordered', 'list-unordered', 'location', 'lock', 'logo-gist', 'logo-github', 'mail', 'mail-read', 'mail-reply', 'markdown', 'mark-github', 'megaphone', 'mention', 'milestone', 'mirror', 'mortar-board', 'mute', 'no-newline', 'octoface', 'organization', 'package', 'paintcan', 'pencil', 'person', 'pin', 'plug', 'plus', 'primitive-dot', 'primitive-square', 'pulse', 'question', 'quote', 'radio-tower', 'repo', 'repo-clone', 'repo-force-push', 'repo-forked', 'repo-pull', 'repo-push', 'rocket', 'rss', 'ruby', 'search', 'server', 'settings', 'shield', 'sign-in', 'sign-out', 'smiley', 'squirrel', 'star', 'stop', 'sync', 'tag', 'tasklist', 'telescope', 'terminal', 'text-size', 'three-bars', 'thumbsdown', 'thumbsup', 'tools', 'trashcan', 'triangle-down', 'triangle-left', 'triangle-right', 'triangle-up', 'unfold', 'unmute', 'unverified', 'verified', 'versions', 'watch', 'x', 'zap' ] }, { version: '4.1.0', icons: [ '', 'alert', 'arrow-down', 'arrow-left', 'arrow-right', 'arrow-small-down', 'arrow-small-left', 'arrow-small-right', 'arrow-small-up', 'arrow-up', 'beaker', 'bell', 'bold', 'book', 'bookmark', 'briefcase', 'broadcast', 'browser', 'bug', 'calendar', 'check', 'checklist', 'chevron-down', 'chevron-left', 'chevron-right', 'chevron-up', 'circle-slash', 'circuit-board', 'clippy', 'clock', 'cloud-download', 'cloud-upload', 'code', 'comment', 'comment-discussion', 'credit-card', 'dash', 'dashboard', 'database', 'desktop-download', 'device-camera', 'device-camera-video', 'device-desktop', 'device-mobile', 'diff', 'diff-added', 'diff-ignored', 'diff-modified', 'diff-removed', 'diff-renamed', 'ellipses', 'ellipsis', 'eye', 'file', 'file-binary', 'file-code', 'file-directory', 'file-media', 'file-pdf', 'file-submodule', 'file-symlink-directory', 'file-symlink-file', 'file-text', 'file-zip', 'flame', 'fold', 'gear', 'gift', 'gist', 'gist-secret', 'git-branch', 'git-commit', 'git-compare', 'git-merge', 'git-pull-request', 'globe', 'grabber', 'graph', 'heart', 'history', 'home', 'horizontal-rule', 'hubot', 'inbox', 'info', 'issue-closed', 'issue-opened', 'issue-reopened', 'italic', 'jersey', 'key', 'keyboard', 'law', 'light-bulb', 'link', 'link-external', 'list-ordered', 'list-unordered', 'location', 'lock', 'logo-gist', 'logo-github', 'mail', 'mail-read', 'mail-reply', 'markdown', 'mark-github', 'megaphone', 'mention', 'milestone', 'mirror', 'mortar-board', 'mute', 'no-newline', 'octoface', 'organization', 'package', 'paintcan', 'pencil', 'person', 'pin', 'plug', 'plus', 'plus-small', 'primitive-dot', 'primitive-square', 'pulse', 'question', 'quote', 'radio-tower', 'reply', 'repo', 'repo-clone', 'repo-force-push', 'repo-forked', 'repo-pull', 'repo-push', 'rocket', 'rss', 'ruby', 'search', 'server', 'settings', 'shield', 'sign-in', 'sign-out', 'smiley', 'squirrel', 'star', 'stop', 'sync', 'tag', 'tasklist', 'telescope', 'terminal', 'text-size', 'three-bars', 'thumbsdown', 'thumbsup', 'tools', 'trashcan', 'triangle-down', 'triangle-left', 'triangle-right', 'triangle-up', 'unfold', 'unmute', 'unverified', 'verified', 'versions', 'watch', 'x', 'zap' ] }, { version: '4.1.1', icons: [ '', 'alert', 'arrow-down', 'arrow-left', 'arrow-right', 'arrow-small-down', 'arrow-small-left', 'arrow-small-right', 'arrow-small-up', 'arrow-up', 'beaker', 'bell', 'bold', 'book', 'bookmark', 'briefcase', 'broadcast', 'browser', 'bug', 'calendar', 'check', 'checklist', 'chevron-down', 'chevron-left', 'chevron-right', 'chevron-up', 'circle-slash', 'circuit-board', 'clippy', 'clock', 'cloud-download', 'cloud-upload', 'code', 'comment', 'comment-discussion', 'credit-card', 'dash', 'dashboard', 'database', 'desktop-download', 'device-camera', 'device-camera-video', 'device-desktop', 'device-mobile', 'diff', 'diff-added', 'diff-ignored', 'diff-modified', 'diff-removed', 'diff-renamed', 'ellipses', 'ellipsis', 'eye', 'file', 'file-binary', 'file-code', 'file-directory', 'file-media', 'file-pdf', 'file-submodule', 'file-symlink-directory', 'file-symlink-file', 'file-text', 'file-zip', 'flame', 'fold', 'gear', 'gift', 'gist', 'gist-secret', 'git-branch', 'git-commit', 'git-compare', 'git-merge', 'git-pull-request', 'globe', 'grabber', 'graph', 'heart', 'history', 'home', 'horizontal-rule', 'hubot', 'inbox', 'info', 'issue-closed', 'issue-opened', 'issue-reopened', 'italic', 'jersey', 'key', 'keyboard', 'law', 'light-bulb', 'link', 'link-external', 'list-ordered', 'list-unordered', 'location', 'lock', 'logo-gist', 'logo-github', 'mail', 'mail-read', 'mail-reply', 'markdown', 'mark-github', 'megaphone', 'mention', 'milestone', 'mirror', 'mortar-board', 'mute', 'no-newline', 'octoface', 'organization', 'package', 'paintcan', 'pencil', 'person', 'pin', 'plug', 'plus', 'plus-small', 'primitive-dot', 'primitive-square', 'pulse', 'question', 'quote', 'radio-tower', 'reply', 'repo', 'repo-clone', 'repo-force-push', 'repo-forked', 'repo-pull', 'repo-push', 'rocket', 'rss', 'ruby', 'search', 'server', 'settings', 'shield', 'sign-in', 'sign-out', 'smiley', 'squirrel', 'star', 'stop', 'sync', 'tag', 'tasklist', 'telescope', 'terminal', 'text-size', 'three-bars', 'thumbsdown', 'thumbsup', 'tools', 'trashcan', 'triangle-down', 'triangle-left', 'triangle-right', 'triangle-up', 'unfold', 'unmute', 'unverified', 'verified', 'versions', 'watch', 'x', 'zap' ] }, { version: '4.2.0', icons: [ '', 'alert', 'arrow-down', 'arrow-left', 'arrow-right', 'arrow-small-down', 'arrow-small-left', 'arrow-small-right', 'arrow-small-up', 'arrow-up', 'beaker', 'bell', 'bold', 'book', 'bookmark', 'briefcase', 'broadcast', 'browser', 'bug', 'calendar', 'check', 'checklist', 'chevron-down', 'chevron-left', 'chevron-right', 'chevron-up', 'circle-slash', 'circuit-board', 'clippy', 'clock', 'cloud-download', 'cloud-upload', 'code', 'comment', 'comment-discussion', 'credit-card', 'dash', 'dashboard', 'database', 'desktop-download', 'device-camera', 'device-camera-video', 'device-desktop', 'device-mobile', 'diff', 'diff-added', 'diff-ignored', 'diff-modified', 'diff-removed', 'diff-renamed', 'ellipses', 'ellipsis', 'eye', 'file', 'file-binary', 'file-code', 'file-directory', 'file-media', 'file-pdf', 'file-submodule', 'file-symlink-directory', 'file-symlink-file', 'file-text', 'file-zip', 'flame', 'fold', 'gear', 'gift', 'gist', 'gist-secret', 'git-branch', 'git-commit', 'git-compare', 'git-merge', 'git-pull-request', 'globe', 'grabber', 'graph', 'heart', 'history', 'home', 'horizontal-rule', 'hubot', 'inbox', 'info', 'issue-closed', 'issue-opened', 'issue-reopened', 'italic', 'jersey', 'key', 'keyboard', 'law', 'light-bulb', 'link', 'link-external', 'list-ordered', 'list-unordered', 'location', 'lock', 'logo-gist', 'logo-github', 'mail', 'mail-read', 'mail-reply', 'markdown', 'mark-github', 'megaphone', 'mention', 'milestone', 'mirror', 'mortar-board', 'mute', 'no-newline', 'octoface', 'organization', 'package', 'paintcan', 'pencil', 'person', 'pin', 'plug', 'plus', 'plus-small', 'primitive-dot', 'primitive-square', 'pulse', 'question', 'quote', 'radio-tower', 'reply', 'repo', 'repo-clone', 'repo-force-push', 'repo-forked', 'repo-pull', 'repo-push', 'rocket', 'rss', 'ruby', 'search', 'server', 'settings', 'shield', 'sign-in', 'sign-out', 'smiley', 'squirrel', 'star', 'stop', 'sync', 'tag', 'tasklist', 'telescope', 'terminal', 'text-size', 'three-bars', 'thumbsdown', 'thumbsup', 'tools', 'trashcan', 'triangle-down', 'triangle-left', 'triangle-right', 'triangle-up', 'unfold', 'unmute', 'unverified', 'verified', 'versions', 'watch', 'x', 'zap' ] }, { version: '4.2.1', icons: [ '', 'alert', 'arrow-down', 'arrow-left', 'arrow-right', 'arrow-small-down', 'arrow-small-left', 'arrow-small-right', 'arrow-small-up', 'arrow-up', 'beaker', 'bell', 'bold', 'book', 'bookmark', 'briefcase', 'broadcast', 'browser', 'bug', 'calendar', 'check', 'checklist', 'chevron-down', 'chevron-left', 'chevron-right', 'chevron-up', 'circle-slash', 'circuit-board', 'clippy', 'clock', 'cloud-download', 'cloud-upload', 'code', 'comment', 'comment-discussion', 'credit-card', 'dash', 'dashboard', 'database', 'desktop-download', 'device-camera', 'device-camera-video', 'device-desktop', 'device-mobile', 'diff', 'diff-added', 'diff-ignored', 'diff-modified', 'diff-removed', 'diff-renamed', 'ellipses', 'ellipsis', 'eye', 'file', 'file-binary', 'file-code', 'file-directory', 'file-media', 'file-pdf', 'file-submodule', 'file-symlink-directory', 'file-symlink-file', 'file-text', 'file-zip', 'flame', 'fold', 'gear', 'gift', 'gist', 'gist-secret', 'git-branch', 'git-commit', 'git-compare', 'git-merge', 'git-pull-request', 'globe', 'grabber', 'graph', 'heart', 'history', 'home', 'horizontal-rule', 'hubot', 'inbox', 'info', 'issue-closed', 'issue-opened', 'issue-reopened', 'italic', 'jersey', 'key', 'keyboard', 'law', 'light-bulb', 'link', 'link-external', 'list-ordered', 'list-unordered', 'location', 'lock', 'logo-gist', 'logo-github', 'mail', 'mail-read', 'mail-reply', 'markdown', 'mark-github', 'megaphone', 'mention', 'milestone', 'mirror', 'mortar-board', 'mute', 'no-newline', 'octoface', 'organization', 'package', 'paintcan', 'pencil', 'person', 'pin', 'plug', 'plus', 'plus-small', 'primitive-dot', 'primitive-square', 'pulse', 'question', 'quote', 'radio-tower', 'reply', 'repo', 'repo-clone', 'repo-force-push', 'repo-forked', 'repo-pull', 'repo-push', 'rocket', 'rss', 'ruby', 'search', 'server', 'settings', 'shield', 'sign-in', 'sign-out', 'smiley', 'squirrel', 'star', 'stop', 'sync', 'tag', 'tasklist', 'telescope', 'terminal', 'text-size', 'three-bars', 'thumbsdown', 'thumbsup', 'tools', 'trashcan', 'triangle-down', 'triangle-left', 'triangle-right', 'triangle-up', 'unfold', 'unmute', 'unverified', 'verified', 'versions', 'watch', 'x', 'zap' ] }, { version: '4.3.0', icons: [ '', 'alert', 'arrow-down', 'arrow-left', 'arrow-right', 'arrow-small-down', 'arrow-small-left', 'arrow-small-right', 'arrow-small-up', 'arrow-up', 'beaker', 'bell', 'bold', 'book', 'bookmark', 'briefcase', 'broadcast', 'browser', 'bug', 'calendar', 'check', 'checklist', 'chevron-down', 'chevron-left', 'chevron-right', 'chevron-up', 'circle-slash', 'circuit-board', 'clippy', 'clock', 'cloud-download', 'cloud-upload', 'code', 'comment', 'comment-discussion', 'credit-card', 'dash', 'dashboard', 'database', 'desktop-download', 'device-camera', 'device-camera-video', 'device-desktop', 'device-mobile', 'diff', 'diff-added', 'diff-ignored', 'diff-modified', 'diff-removed', 'diff-renamed', 'ellipses', 'ellipsis', 'eye', 'file', 'file-binary', 'file-code', 'file-directory', 'file-media', 'file-pdf', 'file-submodule', 'file-symlink-directory', 'file-symlink-file', 'file-text', 'file-zip', 'flame', 'fold', 'gear', 'gift', 'gist', 'gist-secret', 'git-branch', 'git-commit', 'git-compare', 'git-merge', 'git-pull-request', 'globe', 'grabber', 'graph', 'heart', 'history', 'home', 'horizontal-rule', 'hubot', 'inbox', 'info', 'issue-closed', 'issue-opened', 'issue-reopened', 'italic', 'jersey', 'key', 'keyboard', 'law', 'light-bulb', 'link', 'link-external', 'list-ordered', 'list-unordered', 'location', 'lock', 'logo-gist', 'logo-github', 'mail', 'mail-read', 'mail-reply', 'markdown', 'mark-github', 'megaphone', 'mention', 'milestone', 'mirror', 'mortar-board', 'mute', 'no-newline', 'octoface', 'organization', 'package', 'paintcan', 'pencil', 'person', 'pin', 'plug', 'plus', 'plus-small', 'primitive-dot', 'primitive-square', 'pulse', 'question', 'quote', 'radio-tower', 'reply', 'repo', 'repo-clone', 'repo-force-push', 'repo-forked', 'repo-pull', 'repo-push', 'rocket', 'rss', 'ruby', 'search', 'server', 'settings', 'shield', 'sign-in', 'sign-out', 'smiley', 'squirrel', 'star', 'stop', 'sync', 'tag', 'tasklist', 'telescope', 'terminal', 'text-size', 'three-bars', 'thumbsdown', 'thumbsup', 'tools', 'trashcan', 'triangle-down', 'triangle-left', 'triangle-right', 'triangle-up', 'unfold', 'unmute', 'unverified', 'verified', 'versions', 'watch', 'x', 'zap' ] }, { version: '4.4.0', icons: [ '', 'alert', 'arrow-down', 'arrow-left', 'arrow-right', 'arrow-small-down', 'arrow-small-left', 'arrow-small-right', 'arrow-small-up', 'arrow-up', 'beaker', 'bell', 'bold', 'book', 'bookmark', 'briefcase', 'broadcast', 'browser', 'bug', 'calendar', 'check', 'checklist', 'chevron-down', 'chevron-left', 'chevron-right', 'chevron-up', 'circle-slash', 'circuit-board', 'clippy', 'clock', 'cloud-download', 'cloud-upload', 'code', 'comment', 'comment-discussion', 'credit-card', 'dash', 'dashboard', 'database', 'desktop-download', 'device-camera', 'device-camera-video', 'device-desktop', 'device-mobile', 'diff', 'diff-added', 'diff-ignored', 'diff-modified', 'diff-removed', 'diff-renamed', 'ellipses', 'ellipsis', 'eye', 'file', 'file-binary', 'file-code', 'file-directory', 'file-media', 'file-pdf', 'file-submodule', 'file-symlink-directory', 'file-symlink-file', 'file-text', 'file-zip', 'flame', 'fold', 'gear', 'gift', 'gist', 'gist-secret', 'git-branch', 'git-commit', 'git-compare', 'git-merge', 'git-pull-request', 'globe', 'grabber', 'graph', 'heart', 'history', 'home', 'horizontal-rule', 'hubot', 'inbox', 'info', 'issue-closed', 'issue-opened', 'issue-reopened', 'italic', 'jersey', 'key', 'keyboard', 'law', 'light-bulb', 'link', 'link-external', 'list-ordered', 'list-unordered', 'location', 'lock', 'logo-gist', 'logo-github', 'mail', 'mail-read', 'mail-reply', 'markdown', 'mark-github', 'megaphone', 'mention', 'milestone', 'mirror', 'mortar-board', 'mute', 'no-newline', 'octoface', 'organization', 'package', 'paintcan', 'pencil', 'person', 'pin', 'plug', 'plus', 'plus-small', 'primitive-dot', 'primitive-square', 'pulse', 'question', 'quote', 'radio-tower', 'reply', 'repo', 'repo-clone', 'repo-force-push', 'repo-forked', 'repo-pull', 'repo-push', 'rocket', 'rss', 'ruby', 'search', 'server', 'settings', 'shield', 'sign-in', 'sign-out', 'smiley', 'squirrel', 'star', 'stop', 'sync', 'tag', 'tasklist', 'telescope', 'terminal', 'text-size', 'three-bars', 'thumbsdown', 'thumbsup', 'tools', 'trashcan', 'triangle-down', 'triangle-left', 'triangle-right', 'triangle-up', 'unfold', 'unmute', 'unverified', 'verified', 'versions', 'watch', 'x', 'zap' ] } ] }; var l = data.allVersions.length; data.icons = data.allVersions[l-1].icons; $.iconset_octicon = data; })(jQuery); /*!======================================================================== * Iconset: Typicons * Versions: 2.0.1, 2.0.2, 2.0.3, 2.0.4, 2.0.5, 2.0.6, 2.0.7, 2.0.8, 2.0.9 * https://github.com/stephenhutchings/typicons.font * CDN: https://cdnjs.cloudflare.com/ajax/libs/typicons/[VERSION]/typicons.css * ======================================================================== */ ;(function($){ var data = { iconClass: 'typcn', iconClassFix: 'typcn-', icons: [], allVersions: [ { version: '2.0.1', icons: [ '', 'adjust-brightness', 'adjust-contrast', 'anchor', 'anchor-outline', 'archive', 'arrow-back', 'arrow-back-outline', 'arrow-down', 'arrow-down-outline', 'arrow-down-thick', 'arrow-forward', 'arrow-forward-outline', 'arrow-left', 'arrow-left-outline', 'arrow-left-thick', 'arrow-loop', 'arrow-loop-outline', 'arrow-maximise', 'arrow-maximise-outline', 'arrow-minimise', 'arrow-minimise-outline', 'arrow-move', 'arrow-move-outline', 'arrow-repeat', 'arrow-repeat-outline', 'arrow-right', 'arrow-right-outline', 'arrow-right-thick', 'arrow-shuffle', 'arrow-sync', 'arrow-sync-outline', 'arrow-up', 'arrow-up-outline', 'arrow-up-thick', 'at', 'attachment', 'attachment-outline', 'backspace', 'backspace-outline', 'battery-charge', 'battery-full', 'battery-high', 'battery-low', 'battery-mid', 'beaker', 'beer', 'bell', 'book', 'bookmark', 'briefcase', 'brush', 'business-card', 'calculator', 'calender', 'calender-outline', 'camera', 'camera-outline', 'cancel', 'cancel-outline', 'chart-area', 'chart-area-outline', 'chart-bar', 'chart-bar-outline', 'chart-line', 'chart-line-outline', 'chart-pie', 'chart-pie-outline', 'chevron-left', 'chevron-left-outline', 'chevron-right', 'chevron-right-outline', 'clipboard', 'cloud-storage', 'code', 'code-outline', 'coffee', 'cog', 'cog-outline', 'compass', 'contacts', 'credit-card', 'cross', 'database', 'delete', 'delete-outline', 'device-desktop', 'device-laptop', 'device-phone', 'device-tablet', 'directions', 'divide', 'divide-outline', 'document', 'document-add', 'document-delete', 'document-text', 'download', 'download-outline', 'edit', 'eject', 'eject-outline', 'equals', 'equals-outline', 'export', 'export-outline', 'eye', 'eye-outline', 'feather', 'film', 'flag', 'flag-outline', 'flash', 'flash-outline', 'flow-children', 'flow-merge', 'flow-parallel', 'flow-switch', 'folder', 'folder-add', 'folder-delete', 'gift', 'globe', 'globe-outline', 'group', 'group-outline', 'headphones', 'heart', 'heart-outline', 'home', 'home-outline', 'image', 'image-outline', 'infinity', 'infinity-outline', 'info', 'info-large', 'info-large-outline', 'info-outline', 'input-checked', 'input-checked-outline', 'key', 'key-outline', 'leaf', 'lightbulb', 'link', 'link-outline', 'location', 'location-arrow', 'location-arrow-outline', 'location-outline', 'lock-closed', 'lock-closed-outline', 'lock-open', 'lock-open-outline', 'mail', 'map', 'media-eject', 'media-eject-outline', 'media-fast-forward', 'media-fast-forward-outline', 'media-pause', 'media-pause-outline', 'media-play', 'media-play-outline', 'media-record', 'media-record-outline', 'media-rewind', 'media-rewind-outline', 'media-stop', 'media-stop-outline', 'message', 'messages', 'message-typing', 'microphone', 'microphone-outline', 'minus', 'minus-outline', 'news', 'notes', 'notes-outline', 'pen', 'pencil', 'phone', 'phone-outline', 'pi', 'pin', 'pin-outline', 'pi-outline', 'pipette', 'plane', 'plane-outline', 'plug', 'plus', 'plus-outline', 'point-of-interest', 'point-of-interest-outline', 'power', 'power-outline', 'printer', 'puzzle', 'puzzle-outline', 'radar', 'radar-outline', 'refresh', 'refresh-outline', 'rss', 'rss-outline', 'scissors', 'scissors-outline', 'shopping-bag', 'shopping-cart', 'social-at-circular', 'social-dribbble', 'social-dribbble-circular', 'social-facebook', 'social-facebook-circular', 'social-flickr', 'social-flickr-circular', 'social-github', 'social-github-circular', 'social-last-fm', 'social-last-fm-circular', 'social-linkedin', 'social-linkedin-circular', 'social-pinterest', 'social-pinterest-circular', 'social-skype', 'social-skype-outline', 'social-tumbler', 'social-tumbler-circular', 'social-twitter', 'social-twitter-circular', 'social-vimeo', 'social-vimeo-circular', 'sort-alphabetically', 'sort-alphabetically-outline', 'sort-numerically', 'sort-numerically-outline', 'spanner', 'spanner-outline', 'star', 'starburst', 'starburst-outline', 'star-outline', 'stopwatch', 'support', 'tabs-outline', 'tag', 'tags', 'thermometer', 'th-large', 'th-large-outline', 'th-list', 'th-list-outline', 'th-menu', 'th-menu-outline', 'th-small', 'th-small-outline', 'thumbs-down', 'thumbs-up', 'tick', 'ticket', 'tick-outline', 'time', 'times', 'times-outline', 'trash', 'tree', 'upload', 'upload-outline', 'user', 'user-add', 'user-add-outline', 'user-delete', 'user-delete-outline', 'user-outline', 'video', 'video-outline', 'volume', 'volume-down', 'volume-mute', 'volume-up', 'warning', 'warning-outline', 'watch', 'waves', 'waves-outline', 'weather-cloudy', 'weather-downpour', 'weather-night', 'weather-partly-sunny', 'weather-shower', 'weather-snow', 'weather-stormy', 'weather-sunny', 'weather-windy', 'weather-windy-cloudy', 'wi-fi', 'wi-fi-outline', 'wine', 'world', 'world-outline', 'zoom', 'zoom-in', 'zoom-in-outline', 'zoom-out', 'zoom-outline', 'zoom-out-outline' ] }, { version: '2.0.2', icons: [ '', 'adjust-brightness', 'adjust-contrast', 'anchor', 'anchor-outline', 'archive', 'arrow-back', 'arrow-back-outline', 'arrow-down', 'arrow-down-outline', 'arrow-down-thick', 'arrow-forward', 'arrow-forward-outline', 'arrow-left', 'arrow-left-outline', 'arrow-left-thick', 'arrow-loop', 'arrow-loop-outline', 'arrow-maximise', 'arrow-maximise-outline', 'arrow-minimise', 'arrow-minimise-outline', 'arrow-move', 'arrow-move-outline', 'arrow-repeat', 'arrow-repeat-outline', 'arrow-right', 'arrow-right-outline', 'arrow-right-thick', 'arrow-shuffle', 'arrow-sync', 'arrow-sync-outline', 'arrow-up', 'arrow-up-outline', 'arrow-up-thick', 'at', 'attachment', 'attachment-outline', 'backspace', 'backspace-outline', 'battery-charge', 'battery-full', 'battery-high', 'battery-low', 'battery-mid', 'beaker', 'beer', 'bell', 'book', 'bookmark', 'briefcase', 'brush', 'business-card', 'calculator', 'calender', 'calender-outline', 'camera', 'camera-outline', 'cancel', 'cancel-outline', 'chart-area', 'chart-area-outline', 'chart-bar', 'chart-bar-outline', 'chart-line', 'chart-line-outline', 'chart-pie', 'chart-pie-outline', 'chevron-left', 'chevron-left-outline', 'chevron-right', 'chevron-right-outline', 'clipboard', 'cloud-storage', 'code', 'code-outline', 'coffee', 'cog', 'cog-outline', 'compass', 'contacts', 'credit-card', 'cross', 'database', 'delete', 'delete-outline', 'device-desktop', 'device-laptop', 'device-phone', 'device-tablet', 'directions', 'divide', 'divide-outline', 'document', 'document-add', 'document-delete', 'document-text', 'download', 'download-outline', 'edit', 'eject', 'eject-outline', 'equals', 'equals-outline', 'export', 'export-outline', 'eye', 'eye-outline', 'feather', 'film', 'flag', 'flag-outline', 'flash', 'flash-outline', 'flow-children', 'flow-merge', 'flow-parallel', 'flow-switch', 'folder', 'folder-add', 'folder-delete', 'gift', 'globe', 'globe-outline', 'group', 'group-outline', 'headphones', 'heart', 'heart-outline', 'home', 'home-outline', 'image', 'image-outline', 'infinity', 'infinity-outline', 'info', 'info-large', 'info-large-outline', 'info-outline', 'input-checked', 'input-checked-outline', 'key', 'key-outline', 'leaf', 'lightbulb', 'link', 'link-outline', 'location', 'location-arrow', 'location-arrow-outline', 'location-outline', 'lock-closed', 'lock-closed-outline', 'lock-open', 'lock-open-outline', 'mail', 'map', 'media-eject', 'media-eject-outline', 'media-fast-forward', 'media-fast-forward-outline', 'media-pause', 'media-pause-outline', 'media-play', 'media-play-outline', 'media-record', 'media-record-outline', 'media-rewind', 'media-rewind-outline', 'media-stop', 'media-stop-outline', 'message', 'messages', 'message-typing', 'microphone', 'microphone-outline', 'minus', 'minus-outline', 'news', 'notes', 'notes-outline', 'pen', 'pencil', 'phone', 'phone-outline', 'pi', 'pin', 'pin-outline', 'pi-outline', 'pipette', 'plane', 'plane-outline', 'plug', 'plus', 'plus-outline', 'point-of-interest', 'point-of-interest-outline', 'power', 'power-outline', 'printer', 'puzzle', 'puzzle-outline', 'radar', 'radar-outline', 'refresh', 'refresh-outline', 'rss', 'rss-outline', 'scissors', 'scissors-outline', 'shopping-bag', 'shopping-cart', 'social-at-circular', 'social-dribbble', 'social-dribbble-circular', 'social-facebook', 'social-facebook-circular', 'social-flickr', 'social-flickr-circular', 'social-github', 'social-github-circular', 'social-last-fm', 'social-last-fm-circular', 'social-linkedin', 'social-linkedin-circular', 'social-pinterest', 'social-pinterest-circular', 'social-skype', 'social-skype-outline', 'social-tumbler', 'social-tumbler-circular', 'social-twitter', 'social-twitter-circular', 'social-vimeo', 'social-vimeo-circular', 'sort-alphabetically', 'sort-alphabetically-outline', 'sort-numerically', 'sort-numerically-outline', 'spanner', 'spanner-outline', 'star', 'starburst', 'starburst-outline', 'star-outline', 'stopwatch', 'support', 'tabs-outline', 'tag', 'tags', 'thermometer', 'th-large', 'th-large-outline', 'th-list', 'th-list-outline', 'th-menu', 'th-menu-outline', 'th-small', 'th-small-outline', 'thumbs-down', 'thumbs-up', 'tick', 'ticket', 'tick-outline', 'time', 'times', 'times-outline', 'trash', 'tree', 'upload', 'upload-outline', 'user', 'user-add', 'user-add-outline', 'user-delete', 'user-delete-outline', 'user-outline', 'video', 'video-outline', 'volume', 'volume-down', 'volume-mute', 'volume-up', 'warning', 'warning-outline', 'watch', 'waves', 'waves-outline', 'weather-cloudy', 'weather-downpour', 'weather-night', 'weather-partly-sunny', 'weather-shower', 'weather-snow', 'weather-stormy', 'weather-sunny', 'weather-windy', 'weather-windy-cloudy', 'wi-fi', 'wi-fi-outline', 'wine', 'world', 'world-outline', 'zoom', 'zoom-in', 'zoom-in-outline', 'zoom-out', 'zoom-outline', 'zoom-out-outline' ] }, { version: '2.0.3', icons: [ '', 'adjust-brightness', 'adjust-contrast', 'anchor', 'anchor-outline', 'archive', 'arrow-back', 'arrow-back-outline', 'arrow-down', 'arrow-down-outline', 'arrow-down-thick', 'arrow-forward', 'arrow-forward-outline', 'arrow-left', 'arrow-left-outline', 'arrow-left-thick', 'arrow-loop', 'arrow-loop-outline', 'arrow-maximise', 'arrow-maximise-outline', 'arrow-minimise', 'arrow-minimise-outline', 'arrow-move', 'arrow-move-outline', 'arrow-repeat', 'arrow-repeat-outline', 'arrow-right', 'arrow-right-outline', 'arrow-right-thick', 'arrow-shuffle', 'arrow-sorted-down', 'arrow-sorted-up', 'arrow-sync', 'arrow-sync-outline', 'arrow-unsorted', 'arrow-up', 'arrow-up-outline', 'arrow-up-thick', 'at', 'attachment', 'attachment-outline', 'backspace', 'backspace-outline', 'battery-charge', 'battery-full', 'battery-high', 'battery-low', 'battery-mid', 'beaker', 'beer', 'bell', 'book', 'bookmark', 'briefcase', 'brush', 'business-card', 'calculator', 'camera', 'camera-outline', 'cancel', 'cancel-outline', 'chart-area', 'chart-area-outline', 'chart-bar', 'chart-bar-outline', 'chart-line', 'chart-line-outline', 'chart-pie', 'chart-pie-outline', 'chevron-left', 'chevron-left-outline', 'chevron-right', 'chevron-right-outline', 'clipboard', 'cloud-storage', 'code', 'code-outline', 'coffee', 'cog', 'cog-outline', 'compass', 'contacts', 'credit-card', 'css3', 'database', 'delete', 'delete-outline', 'device-desktop', 'device-laptop', 'device-phone', 'device-tablet', 'directions', 'divide', 'divide-outline', 'document', 'document-add', 'document-delete', 'document-text', 'download', 'download-outline', 'dropbox', 'edit', 'eject', 'eject-outline', 'equals', 'equals-outline', 'export', 'export-outline', 'eye', 'eye-outline', 'feather', 'film', 'filter', 'flag', 'flag-outline', 'flash', 'flash-outline', 'flow-children', 'flow-merge', 'flow-parallel', 'flow-switch', 'folder', 'folder-add', 'folder-delete', 'folder-open', 'gift', 'globe', 'globe-outline', 'group', 'group-outline', 'headphones', 'heart', 'heart-full-outline', 'heart-half-outline', 'heart-outline', 'home', 'home-outline', 'html5', 'image', 'image-outline', 'infinity', 'infinity-outline', 'info', 'info-large', 'info-large-outline', 'info-outline', 'input-checked', 'input-checked-outline', 'key', 'key-outline', 'keyboard', 'leaf', 'lightbulb', 'link', 'link-outline', 'location', 'location-arrow', 'location-arrow-outline', 'location-outline', 'lock-closed', 'lock-closed-outline', 'lock-open', 'lock-open-outline', 'mail', 'map', 'media-eject', 'media-eject-outline', 'media-fast-forward', 'media-fast-forward-outline', 'media-pause', 'media-pause-outline', 'media-play', 'media-play-outline', 'media-play-reverse', 'media-play-reverse-outline', 'media-record', 'media-record-outline', 'media-rewind', 'media-rewind-outline', 'media-stop', 'media-stop-outline', 'message', 'message-typing', 'messages', 'microphone', 'microphone-outline', 'minus', 'minus-outline', 'mortar-board', 'news', 'notes', 'notes-outline', 'pen', 'pencil', 'phone', 'phone-outline', 'pi', 'pi-outline', 'pin', 'pin-outline', 'pipette', 'plane', 'plane-outline', 'plug', 'plus', 'plus-outline', 'point-of-interest', 'point-of-interest-outline', 'power', 'power-outline', 'printer', 'puzzle', 'puzzle-outline', 'radar', 'radar-outline', 'refresh', 'refresh-outline', 'rss', 'rss-outline', 'scissors', 'scissors-outline', 'shopping-bag', 'shopping-cart', 'social-at-circular', 'social-dribbble', 'social-dribbble-circular', 'social-facebook', 'social-facebook-circular', 'social-flickr', 'social-flickr-circular', 'social-github', 'social-github-circular', 'social-google-plus', 'social-google-plus-circular', 'social-instagram', 'social-instagram-circular', 'social-last-fm', 'social-last-fm-circular', 'social-linkedin', 'social-linkedin-circular', 'social-pinterest', 'social-pinterest-circular', 'social-skype', 'social-skype-outline', 'social-tumbler', 'social-tumbler-circular', 'social-twitter', 'social-twitter-circular', 'social-vimeo', 'social-vimeo-circular', 'social-youtube', 'social-youtube-circular', 'sort-alphabetically', 'sort-alphabetically-outline', 'sort-numerically', 'sort-numerically-outline', 'spanner', 'spanner-outline', 'spiral', 'star', 'star-full-outline', 'star-half', 'star-half-outline', 'star-outline', 'starburst', 'starburst-outline', 'stopwatch', 'support', 'tabs-outline', 'tag', 'tags', 'th-large', 'th-large-outline', 'th-list', 'th-list-outline', 'th-menu', 'th-menu-outline', 'th-small', 'th-small-outline', 'thermometer', 'thumbs-down', 'thumbs-ok', 'thumbs-up', 'tick', 'tick-outline', 'ticket', 'time', 'times', 'times-outline', 'trash', 'tree', 'upload', 'upload-outline', 'user', 'user-add', 'user-add-outline', 'user-delete', 'user-delete-outline', 'user-outline', 'vendor-android', 'vendor-apple', 'vendor-microsoft', 'video', 'video-outline', 'volume', 'volume-down', 'volume-mute', 'volume-up', 'warning', 'warning-outline', 'watch', 'waves', 'waves-outline', 'weather-cloudy', 'weather-downpour', 'weather-night', 'weather-partly-sunny', 'weather-shower', 'weather-snow', 'weather-stormy', 'weather-sunny', 'weather-windy', 'weather-windy-cloudy', 'wi-fi', 'wi-fi-outline', 'wine', 'world', 'world-outline', 'zoom', 'zoom-in', 'zoom-in-outline', 'zoom-out', 'zoom-out-outline', 'zoom-outline' ] }, { version: '2.0.4', icons: [ '', 'adjust-brightness', 'adjust-contrast', 'anchor', 'anchor-outline', 'archive', 'arrow-back', 'arrow-back-outline', 'arrow-down', 'arrow-down-outline', 'arrow-down-thick', 'arrow-forward', 'arrow-forward-outline', 'arrow-left', 'arrow-left-outline', 'arrow-left-thick', 'arrow-loop', 'arrow-loop-outline', 'arrow-maximise', 'arrow-maximise-outline', 'arrow-minimise', 'arrow-minimise-outline', 'arrow-move', 'arrow-move-outline', 'arrow-repeat', 'arrow-repeat-outline', 'arrow-right', 'arrow-right-outline', 'arrow-right-thick', 'arrow-shuffle', 'arrow-sorted-down', 'arrow-sorted-up', 'arrow-sync', 'arrow-sync-outline', 'arrow-unsorted', 'arrow-up', 'arrow-up-outline', 'arrow-up-thick', 'at', 'attachment', 'attachment-outline', 'backspace', 'backspace-outline', 'battery-charge', 'battery-full', 'battery-high', 'battery-low', 'battery-mid', 'beaker', 'beer', 'bell', 'book', 'bookmark', 'briefcase', 'brush', 'business-card', 'calculator', 'calendar', 'calendar-outline', 'camera', 'camera-outline', 'cancel', 'cancel-outline', 'chart-area', 'chart-area-outline', 'chart-bar', 'chart-bar-outline', 'chart-line', 'chart-line-outline', 'chart-pie', 'chart-pie-outline', 'chevron-left', 'chevron-left-outline', 'chevron-right', 'chevron-right-outline', 'clipboard', 'cloud-storage', 'cloud-storage-outline', 'code', 'code-outline', 'coffee', 'cog', 'cog-outline', 'compass', 'contacts', 'credit-card', 'css3', 'database', 'delete', 'delete-outline', 'device-desktop', 'device-laptop', 'device-phone', 'device-tablet', 'directions', 'divide', 'divide-outline', 'document', 'document-add', 'document-delete', 'document-text', 'download', 'download-outline', 'dropbox', 'edit', 'eject', 'eject-outline', 'equals', 'equals-outline', 'export', 'export-outline', 'eye', 'eye-outline', 'feather', 'film', 'filter', 'flag', 'flag-outline', 'flash', 'flash-outline', 'flow-children', 'flow-merge', 'flow-parallel', 'flow-switch', 'folder', 'folder-add', 'folder-delete', 'folder-open', 'gift', 'globe', 'globe-outline', 'group', 'group-outline', 'headphones', 'heart', 'heart-full-outline', 'heart-half-outline', 'heart-outline', 'home', 'home-outline', 'html5', 'image', 'image-outline', 'infinity', 'infinity-outline', 'info', 'info-large', 'info-large-outline', 'info-outline', 'input-checked', 'input-checked-outline', 'key', 'key-outline', 'keyboard', 'leaf', 'lightbulb', 'link', 'link-outline', 'location', 'location-arrow', 'location-arrow-outline', 'location-outline', 'lock-closed', 'lock-closed-outline', 'lock-open', 'lock-open-outline', 'mail', 'map', 'media-eject', 'media-eject-outline', 'media-fast-forward', 'media-fast-forward-outline', 'media-pause', 'media-pause-outline', 'media-play', 'media-play-outline', 'media-play-reverse', 'media-play-reverse-outline', 'media-record', 'media-record-outline', 'media-rewind', 'media-rewind-outline', 'media-stop', 'media-stop-outline', 'message', 'message-typing', 'messages', 'microphone', 'microphone-outline', 'minus', 'minus-outline', 'mortar-board', 'news', 'notes', 'notes-outline', 'pen', 'pencil', 'phone', 'phone-outline', 'pi', 'pi-outline', 'pin', 'pin-outline', 'pipette', 'plane', 'plane-outline', 'plug', 'plus', 'plus-outline', 'point-of-interest', 'point-of-interest-outline', 'power', 'power-outline', 'printer', 'puzzle', 'puzzle-outline', 'radar', 'radar-outline', 'refresh', 'refresh-outline', 'rss', 'rss-outline', 'scissors', 'scissors-outline', 'shopping-bag', 'shopping-cart', 'social-at-circular', 'social-dribbble', 'social-dribbble-circular', 'social-facebook', 'social-facebook-circular', 'social-flickr', 'social-flickr-circular', 'social-github', 'social-github-circular', 'social-google-plus', 'social-google-plus-circular', 'social-instagram', 'social-instagram-circular', 'social-last-fm', 'social-last-fm-circular', 'social-linkedin', 'social-linkedin-circular', 'social-pinterest', 'social-pinterest-circular', 'social-skype', 'social-skype-outline', 'social-tumbler', 'social-tumbler-circular', 'social-twitter', 'social-twitter-circular', 'social-vimeo', 'social-vimeo-circular', 'social-youtube', 'social-youtube-circular', 'sort-alphabetically', 'sort-alphabetically-outline', 'sort-numerically', 'sort-numerically-outline', 'spanner', 'spanner-outline', 'spiral', 'star', 'star-full-outline', 'star-half', 'star-half-outline', 'star-outline', 'starburst', 'starburst-outline', 'stopwatch', 'support', 'tabs-outline', 'tag', 'tags', 'th-large', 'th-large-outline', 'th-list', 'th-list-outline', 'th-menu', 'th-menu-outline', 'th-small', 'th-small-outline', 'thermometer', 'thumbs-down', 'thumbs-ok', 'thumbs-up', 'tick', 'tick-outline', 'ticket', 'time', 'times', 'times-outline', 'trash', 'tree', 'upload', 'upload-outline', 'user', 'user-add', 'user-add-outline', 'user-delete', 'user-delete-outline', 'user-outline', 'vendor-android', 'vendor-apple', 'vendor-microsoft', 'video', 'video-outline', 'volume', 'volume-down', 'volume-mute', 'volume-up', 'warning', 'warning-outline', 'watch', 'waves', 'waves-outline', 'weather-cloudy', 'weather-downpour', 'weather-night', 'weather-partly-sunny', 'weather-shower', 'weather-snow', 'weather-stormy', 'weather-sunny', 'weather-windy', 'weather-windy-cloudy', 'wi-fi', 'wi-fi-outline', 'wine', 'world', 'world-outline', 'zoom', 'zoom-in', 'zoom-in-outline', 'zoom-out', 'zoom-out-outline', 'zoom-outline' ] }, { version: '2.0.5', icons: [ '', 'adjust-brightness', 'adjust-contrast', 'anchor', 'anchor-outline', 'archive', 'arrow-back', 'arrow-back-outline', 'arrow-down', 'arrow-down-outline', 'arrow-down-thick', 'arrow-forward', 'arrow-forward-outline', 'arrow-left', 'arrow-left-outline', 'arrow-left-thick', 'arrow-loop', 'arrow-loop-outline', 'arrow-maximise', 'arrow-maximise-outline', 'arrow-minimise', 'arrow-minimise-outline', 'arrow-move', 'arrow-move-outline', 'arrow-repeat', 'arrow-repeat-outline', 'arrow-right', 'arrow-right-outline', 'arrow-right-thick', 'arrow-shuffle', 'arrow-sorted-down', 'arrow-sorted-up', 'arrow-sync', 'arrow-sync-outline', 'arrow-unsorted', 'arrow-up', 'arrow-up-outline', 'arrow-up-thick', 'at', 'attachment', 'attachment-outline', 'backspace', 'backspace-outline', 'battery-charge', 'battery-full', 'battery-high', 'battery-low', 'battery-mid', 'beaker', 'beer', 'bell', 'book', 'bookmark', 'briefcase', 'brush', 'business-card', 'calculator', 'camera', 'camera-outline', 'cancel', 'cancel-outline', 'chart-area', 'chart-area-outline', 'chart-bar', 'chart-bar-outline', 'chart-line', 'chart-line-outline', 'chart-pie', 'chart-pie-outline', 'chevron-left', 'chevron-left-outline', 'chevron-right', 'chevron-right-outline', 'clipboard', 'cloud-storage', 'code', 'code-outline', 'coffee', 'cog', 'cog-outline', 'compass', 'contacts', 'credit-card', 'css3', 'database', 'delete', 'delete-outline', 'device-desktop', 'device-laptop', 'device-phone', 'device-tablet', 'directions', 'divide', 'divide-outline', 'document', 'document-add', 'document-delete', 'document-text', 'download', 'download-outline', 'dropbox', 'edit', 'eject', 'eject-outline', 'equals', 'equals-outline', 'export', 'export-outline', 'eye', 'eye-outline', 'feather', 'film', 'filter', 'flag', 'flag-outline', 'flash', 'flash-outline', 'flow-children', 'flow-merge', 'flow-parallel', 'flow-switch', 'folder', 'folder-add', 'folder-delete', 'folder-open', 'gift', 'globe', 'globe-outline', 'group', 'group-outline', 'headphones', 'heart', 'heart-full-outline', 'heart-half-outline', 'heart-outline', 'home', 'home-outline', 'html5', 'image', 'image-outline', 'infinity', 'infinity-outline', 'info', 'info-large', 'info-large-outline', 'info-outline', 'input-checked', 'input-checked-outline', 'key', 'key-outline', 'keyboard', 'leaf', 'lightbulb', 'link', 'link-outline', 'location', 'location-arrow', 'location-arrow-outline', 'location-outline', 'lock-closed', 'lock-closed-outline', 'lock-open', 'lock-open-outline', 'mail', 'map', 'media-eject', 'media-eject-outline', 'media-fast-forward', 'media-fast-forward-outline', 'media-pause', 'media-pause-outline', 'media-play', 'media-play-outline', 'media-play-reverse', 'media-play-reverse-outline', 'media-record', 'media-record-outline', 'media-rewind', 'media-rewind-outline', 'media-stop', 'media-stop-outline', 'message', 'message-typing', 'messages', 'microphone', 'microphone-outline', 'minus', 'minus-outline', 'mortar-board', 'news', 'notes', 'notes-outline', 'pen', 'pencil', 'phone', 'phone-outline', 'pi', 'pi-outline', 'pin', 'pin-outline', 'pipette', 'plane', 'plane-outline', 'plug', 'plus', 'plus-outline', 'point-of-interest', 'point-of-interest-outline', 'power', 'power-outline', 'printer', 'puzzle', 'puzzle-outline', 'radar', 'radar-outline', 'refresh', 'refresh-outline', 'rss', 'rss-outline', 'scissors', 'scissors-outline', 'shopping-bag', 'shopping-cart', 'social-at-circular', 'social-dribbble', 'social-dribbble-circular', 'social-facebook', 'social-facebook-circular', 'social-flickr', 'social-flickr-circular', 'social-github', 'social-github-circular', 'social-google-plus', 'social-google-plus-circular', 'social-instagram', 'social-instagram-circular', 'social-last-fm', 'social-last-fm-circular', 'social-linkedin', 'social-linkedin-circular', 'social-pinterest', 'social-pinterest-circular', 'social-skype', 'social-skype-outline', 'social-tumbler', 'social-tumbler-circular', 'social-twitter', 'social-twitter-circular', 'social-vimeo', 'social-vimeo-circular', 'social-youtube', 'social-youtube-circular', 'sort-alphabetically', 'sort-alphabetically-outline', 'sort-numerically', 'sort-numerically-outline', 'spanner', 'spanner-outline', 'spiral', 'star', 'star-full-outline', 'star-half', 'star-half-outline', 'star-outline', 'starburst', 'starburst-outline', 'stopwatch', 'support', 'tabs-outline', 'tag', 'tags', 'th-large', 'th-large-outline', 'th-list', 'th-list-outline', 'th-menu', 'th-menu-outline', 'th-small', 'th-small-outline', 'thermometer', 'thumbs-down', 'thumbs-ok', 'thumbs-up', 'tick', 'tick-outline', 'ticket', 'time', 'times', 'times-outline', 'trash', 'tree', 'upload', 'upload-outline', 'user', 'user-add', 'user-add-outline', 'user-delete', 'user-delete-outline', 'user-outline', 'vendor-android', 'vendor-apple', 'vendor-microsoft', 'video', 'video-outline', 'volume', 'volume-down', 'volume-mute', 'volume-up', 'warning', 'warning-outline', 'watch', 'waves', 'waves-outline', 'weather-cloudy', 'weather-downpour', 'weather-night', 'weather-partly-sunny', 'weather-shower', 'weather-snow', 'weather-stormy', 'weather-sunny', 'weather-windy', 'weather-windy-cloudy', 'wi-fi', 'wi-fi-outline', 'wine', 'world', 'world-outline', 'zoom', 'zoom-in', 'zoom-in-outline', 'zoom-out', 'zoom-out-outline', 'zoom-outline' ] }, { version: '2.0.6', icons: [ '', 'adjust-brightness', 'adjust-contrast', 'anchor', 'anchor-outline', 'archive', 'arrow-back', 'arrow-back-outline', 'arrow-down', 'arrow-down-outline', 'arrow-down-thick', 'arrow-forward', 'arrow-forward-outline', 'arrow-left', 'arrow-left-outline', 'arrow-left-thick', 'arrow-loop', 'arrow-loop-outline', 'arrow-maximise', 'arrow-maximise-outline', 'arrow-minimise', 'arrow-minimise-outline', 'arrow-move', 'arrow-move-outline', 'arrow-repeat', 'arrow-repeat-outline', 'arrow-right', 'arrow-right-outline', 'arrow-right-thick', 'arrow-shuffle', 'arrow-sorted-down', 'arrow-sorted-up', 'arrow-sync', 'arrow-sync-outline', 'arrow-unsorted', 'arrow-up', 'arrow-up-outline', 'arrow-up-thick', 'at', 'attachment', 'attachment-outline', 'backspace', 'backspace-outline', 'battery-charge', 'battery-full', 'battery-high', 'battery-low', 'battery-mid', 'beaker', 'beer', 'bell', 'book', 'bookmark', 'briefcase', 'brush', 'business-card', 'calculator', 'calendar', 'calendar-outline', 'camera', 'camera-outline', 'cancel', 'cancel-outline', 'chart-area', 'chart-area-outline', 'chart-bar', 'chart-bar-outline', 'chart-line', 'chart-line-outline', 'chart-pie', 'chart-pie-outline', 'chevron-left', 'chevron-left-outline', 'chevron-right', 'chevron-right-outline', 'clipboard', 'cloud-storage', 'cloud-storage-outline', 'code', 'code-outline', 'coffee', 'cog', 'cog-outline', 'compass', 'contacts', 'credit-card', 'css3', 'database', 'delete', 'delete-outline', 'device-desktop', 'device-laptop', 'device-phone', 'device-tablet', 'directions', 'divide', 'divide-outline', 'document', 'document-add', 'document-delete', 'document-text', 'download', 'download-outline', 'dropbox', 'edit', 'eject', 'eject-outline', 'equals', 'equals-outline', 'export', 'export-outline', 'eye', 'eye-outline', 'feather', 'film', 'filter', 'flag', 'flag-outline', 'flash', 'flash-outline', 'flow-children', 'flow-merge', 'flow-parallel', 'flow-switch', 'folder', 'folder-add', 'folder-delete', 'folder-open', 'gift', 'globe', 'globe-outline', 'group', 'group-outline', 'headphones', 'heart', 'heart-full-outline', 'heart-half-outline', 'heart-outline', 'home', 'home-outline', 'html5', 'image', 'image-outline', 'infinity', 'infinity-outline', 'info', 'info-large', 'info-large-outline', 'info-outline', 'input-checked', 'input-checked-outline', 'key', 'key-outline', 'keyboard', 'leaf', 'lightbulb', 'link', 'link-outline', 'location', 'location-arrow', 'location-arrow-outline', 'location-outline', 'lock-closed', 'lock-closed-outline', 'lock-open', 'lock-open-outline', 'mail', 'map', 'media-eject', 'media-eject-outline', 'media-fast-forward', 'media-fast-forward-outline', 'media-pause', 'media-pause-outline', 'media-play', 'media-play-outline', 'media-play-reverse', 'media-play-reverse-outline', 'media-record', 'media-record-outline', 'media-rewind', 'media-rewind-outline', 'media-stop', 'media-stop-outline', 'message', 'message-typing', 'messages', 'microphone', 'microphone-outline', 'minus', 'minus-outline', 'mortar-board', 'news', 'notes', 'notes-outline', 'pen', 'pencil', 'phone', 'phone-outline', 'pi', 'pi-outline', 'pin', 'pin-outline', 'pipette', 'plane', 'plane-outline', 'plug', 'plus', 'plus-outline', 'point-of-interest', 'point-of-interest-outline', 'power', 'power-outline', 'printer', 'puzzle', 'puzzle-outline', 'radar', 'radar-outline', 'refresh', 'refresh-outline', 'rss', 'rss-outline', 'scissors', 'scissors-outline', 'shopping-bag', 'shopping-cart', 'social-at-circular', 'social-dribbble', 'social-dribbble-circular', 'social-facebook', 'social-facebook-circular', 'social-flickr', 'social-flickr-circular', 'social-github', 'social-github-circular', 'social-google-plus', 'social-google-plus-circular', 'social-instagram', 'social-instagram-circular', 'social-last-fm', 'social-last-fm-circular', 'social-linkedin', 'social-linkedin-circular', 'social-pinterest', 'social-pinterest-circular', 'social-skype', 'social-skype-outline', 'social-tumbler', 'social-tumbler-circular', 'social-twitter', 'social-twitter-circular', 'social-vimeo', 'social-vimeo-circular', 'social-youtube', 'social-youtube-circular', 'sort-alphabetically', 'sort-alphabetically-outline', 'sort-numerically', 'sort-numerically-outline', 'spanner', 'spanner-outline', 'spiral', 'star', 'star-full-outline', 'star-half', 'star-half-outline', 'star-outline', 'starburst', 'starburst-outline', 'stopwatch', 'support', 'tabs-outline', 'tag', 'tags', 'th-large', 'th-large-outline', 'th-list', 'th-list-outline', 'th-menu', 'th-menu-outline', 'th-small', 'th-small-outline', 'thermometer', 'thumbs-down', 'thumbs-ok', 'thumbs-up', 'tick', 'tick-outline', 'ticket', 'time', 'times', 'times-outline', 'trash', 'tree', 'upload', 'upload-outline', 'user', 'user-add', 'user-add-outline', 'user-delete', 'user-delete-outline', 'user-outline', 'vendor-android', 'vendor-apple', 'vendor-microsoft', 'video', 'video-outline', 'volume', 'volume-down', 'volume-mute', 'volume-up', 'warning', 'warning-outline', 'watch', 'waves', 'waves-outline', 'weather-cloudy', 'weather-downpour', 'weather-night', 'weather-partly-sunny', 'weather-shower', 'weather-snow', 'weather-stormy', 'weather-sunny', 'weather-windy', 'weather-windy-cloudy', 'wi-fi', 'wi-fi-outline', 'wine', 'world', 'world-outline', 'zoom', 'zoom-in', 'zoom-in-outline', 'zoom-out', 'zoom-out-outline', 'zoom-outline' ] }, { version: '2.0.7', icons: [ '', 'adjust-brightness', 'adjust-contrast', 'anchor', 'anchor-outline', 'archive', 'arrow-back', 'arrow-back-outline', 'arrow-down', 'arrow-down-outline', 'arrow-down-thick', 'arrow-forward', 'arrow-forward-outline', 'arrow-left', 'arrow-left-outline', 'arrow-left-thick', 'arrow-loop', 'arrow-loop-outline', 'arrow-maximise', 'arrow-maximise-outline', 'arrow-minimise', 'arrow-minimise-outline', 'arrow-move', 'arrow-move-outline', 'arrow-repeat', 'arrow-repeat-outline', 'arrow-right', 'arrow-right-outline', 'arrow-right-thick', 'arrow-shuffle', 'arrow-sorted-down', 'arrow-sorted-up', 'arrow-sync', 'arrow-sync-outline', 'arrow-unsorted', 'arrow-up', 'arrow-up-outline', 'arrow-up-thick', 'at', 'attachment', 'attachment-outline', 'backspace', 'backspace-outline', 'battery-charge', 'battery-full', 'battery-high', 'battery-low', 'battery-mid', 'beaker', 'beer', 'bell', 'book', 'bookmark', 'briefcase', 'brush', 'business-card', 'calculator', 'calendar', 'calendar-outline', 'camera', 'camera-outline', 'cancel', 'cancel-outline', 'chart-area', 'chart-area-outline', 'chart-bar', 'chart-bar-outline', 'chart-line', 'chart-line-outline', 'chart-pie', 'chart-pie-outline', 'chevron-left', 'chevron-left-outline', 'chevron-right', 'chevron-right-outline', 'clipboard', 'cloud-storage', 'cloud-storage-outline', 'code', 'code-outline', 'coffee', 'cog', 'cog-outline', 'compass', 'contacts', 'credit-card', 'css3', 'database', 'delete', 'delete-outline', 'device-desktop', 'device-laptop', 'device-phone', 'device-tablet', 'directions', 'divide', 'divide-outline', 'document', 'document-add', 'document-delete', 'document-text', 'download', 'download-outline', 'dropbox', 'edit', 'eject', 'eject-outline', 'equals', 'equals-outline', 'export', 'export-outline', 'eye', 'eye-outline', 'feather', 'film', 'filter', 'flag', 'flag-outline', 'flash', 'flash-outline', 'flow-children', 'flow-merge', 'flow-parallel', 'flow-switch', 'folder', 'folder-add', 'folder-delete', 'folder-open', 'gift', 'globe', 'globe-outline', 'group', 'group-outline', 'headphones', 'heart', 'heart-full-outline', 'heart-half-outline', 'heart-outline', 'home', 'home-outline', 'html5', 'image', 'image-outline', 'infinity', 'infinity-outline', 'info', 'info-large', 'info-large-outline', 'info-outline', 'input-checked', 'input-checked-outline', 'key', 'keyboard', 'key-outline', 'leaf', 'lightbulb', 'link', 'link-outline', 'location', 'location-arrow', 'location-arrow-outline', 'location-outline', 'lock-closed', 'lock-closed-outline', 'lock-open', 'lock-open-outline', 'mail', 'map', 'media-eject', 'media-eject-outline', 'media-fast-forward', 'media-fast-forward-outline', 'media-pause', 'media-pause-outline', 'media-play', 'media-play-outline', 'media-play-reverse', 'media-play-reverse-outline', 'media-record', 'media-record-outline', 'media-rewind', 'media-rewind-outline', 'media-stop', 'media-stop-outline', 'message', 'messages', 'message-typing', 'microphone', 'microphone-outline', 'minus', 'minus-outline', 'mortar-board', 'news', 'notes', 'notes-outline', 'pen', 'pencil', 'phone', 'phone-outline', 'pi', 'pin', 'pin-outline', 'pi-outline', 'pipette', 'plane', 'plane-outline', 'plug', 'plus', 'plus-outline', 'point-of-interest', 'point-of-interest-outline', 'power', 'power-outline', 'printer', 'puzzle', 'puzzle-outline', 'radar', 'radar-outline', 'refresh', 'refresh-outline', 'rss', 'rss-outline', 'scissors', 'scissors-outline', 'shopping-bag', 'shopping-cart', 'social-at-circular', 'social-dribbble', 'social-dribbble-circular', 'social-facebook', 'social-facebook-circular', 'social-flickr', 'social-flickr-circular', 'social-github', 'social-github-circular', 'social-google-plus', 'social-google-plus-circular', 'social-instagram', 'social-instagram-circular', 'social-last-fm', 'social-last-fm-circular', 'social-linkedin', 'social-linkedin-circular', 'social-pinterest', 'social-pinterest-circular', 'social-skype', 'social-skype-outline', 'social-tumbler', 'social-tumbler-circular', 'social-twitter', 'social-twitter-circular', 'social-vimeo', 'social-vimeo-circular', 'social-youtube', 'social-youtube-circular', 'sort-alphabetically', 'sort-alphabetically-outline', 'sort-numerically', 'sort-numerically-outline', 'spanner', 'spanner-outline', 'spiral', 'star', 'starburst', 'starburst-outline', 'star-full-outline', 'star-half', 'star-half-outline', 'star-outline', 'stopwatch', 'support', 'tabs-outline', 'tag', 'tags', 'thermometer', 'th-large', 'th-large-outline', 'th-list', 'th-list-outline', 'th-menu', 'th-menu-outline', 'th-small', 'th-small-outline', 'thumbs-down', 'thumbs-ok', 'thumbs-up', 'tick', 'ticket', 'tick-outline', 'time', 'times', 'times-outline', 'trash', 'tree', 'upload', 'upload-outline', 'user', 'user-add', 'user-add-outline', 'user-delete', 'user-delete-outline', 'user-outline', 'vendor-android', 'vendor-apple', 'vendor-microsoft', 'video', 'video-outline', 'volume', 'volume-down', 'volume-mute', 'volume-up', 'warning', 'warning-outline', 'watch', 'waves', 'waves-outline', 'weather-cloudy', 'weather-downpour', 'weather-night', 'weather-partly-sunny', 'weather-shower', 'weather-snow', 'weather-stormy', 'weather-sunny', 'weather-windy', 'weather-windy-cloudy', 'wi-fi', 'wi-fi-outline', 'wine', 'world', 'world-outline', 'zoom', 'zoom-in', 'zoom-in-outline', 'zoom-out', 'zoom-outline', 'zoom-out-outline' ] }, { version: '2.0.8', icons: [ '', 'adjust-brightness', 'adjust-contrast', 'anchor', 'anchor-outline', 'archive', 'arrow-back', 'arrow-back-outline', 'arrow-down', 'arrow-down-outline', 'arrow-down-thick', 'arrow-forward', 'arrow-forward-outline', 'arrow-left', 'arrow-left-outline', 'arrow-left-thick', 'arrow-loop', 'arrow-loop-outline', 'arrow-maximise', 'arrow-maximise-outline', 'arrow-minimise', 'arrow-minimise-outline', 'arrow-move', 'arrow-move-outline', 'arrow-repeat', 'arrow-repeat-outline', 'arrow-right', 'arrow-right-outline', 'arrow-right-thick', 'arrow-shuffle', 'arrow-sorted-down', 'arrow-sorted-up', 'arrow-sync', 'arrow-sync-outline', 'arrow-unsorted', 'arrow-up', 'arrow-up-outline', 'arrow-up-thick', 'at', 'attachment', 'attachment-outline', 'backspace', 'backspace-outline', 'battery-charge', 'battery-full', 'battery-high', 'battery-low', 'battery-mid', 'beaker', 'beer', 'bell', 'book', 'bookmark', 'briefcase', 'brush', 'business-card', 'calculator', 'calendar', 'calendar-outline', 'camera', 'camera-outline', 'cancel', 'cancel-outline', 'chart-area', 'chart-area-outline', 'chart-bar', 'chart-bar-outline', 'chart-line', 'chart-line-outline', 'chart-pie', 'chart-pie-outline', 'chevron-left', 'chevron-left-outline', 'chevron-right', 'chevron-right-outline', 'clipboard', 'cloud-storage', 'cloud-storage-outline', 'code', 'code-outline', 'coffee', 'cog', 'cog-outline', 'compass', 'contacts', 'credit-card', 'css3', 'database', 'delete', 'delete-outline', 'device-desktop', 'device-laptop', 'device-phone', 'device-tablet', 'directions', 'divide', 'divide-outline', 'document', 'document-add', 'document-delete', 'document-text', 'download', 'download-outline', 'dropbox', 'edit', 'eject', 'eject-outline', 'equals', 'equals-outline', 'export', 'export-outline', 'eye', 'eye-outline', 'feather', 'film', 'filter', 'flag', 'flag-outline', 'flash', 'flash-outline', 'flow-children', 'flow-merge', 'flow-parallel', 'flow-switch', 'folder', 'folder-add', 'folder-delete', 'folder-open', 'gift', 'globe', 'globe-outline', 'group', 'group-outline', 'headphones', 'heart', 'heart-full-outline', 'heart-half-outline', 'heart-outline', 'home', 'home-outline', 'html5', 'image', 'image-outline', 'infinity', 'infinity-outline', 'info', 'info-large', 'info-large-outline', 'info-outline', 'input-checked', 'input-checked-outline', 'key', 'keyboard', 'key-outline', 'leaf', 'lightbulb', 'link', 'link-outline', 'location', 'location-arrow', 'location-arrow-outline', 'location-outline', 'lock-closed', 'lock-closed-outline', 'lock-open', 'lock-open-outline', 'mail', 'map', 'media-eject', 'media-eject-outline', 'media-fast-forward', 'media-fast-forward-outline', 'media-pause', 'media-pause-outline', 'media-play', 'media-play-outline', 'media-play-reverse', 'media-play-reverse-outline', 'media-record', 'media-record-outline', 'media-rewind', 'media-rewind-outline', 'media-stop', 'media-stop-outline', 'message', 'messages', 'message-typing', 'microphone', 'microphone-outline', 'minus', 'minus-outline', 'mortar-board', 'news', 'notes', 'notes-outline', 'pen', 'pencil', 'phone', 'phone-outline', 'pi', 'pin', 'pin-outline', 'pi-outline', 'pipette', 'plane', 'plane-outline', 'plug', 'plus', 'plus-outline', 'point-of-interest', 'point-of-interest-outline', 'power', 'power-outline', 'printer', 'puzzle', 'puzzle-outline', 'radar', 'radar-outline', 'refresh', 'refresh-outline', 'rss', 'rss-outline', 'scissors', 'scissors-outline', 'shopping-bag', 'shopping-cart', 'social-at-circular', 'social-dribbble', 'social-dribbble-circular', 'social-facebook', 'social-facebook-circular', 'social-flickr', 'social-flickr-circular', 'social-github', 'social-github-circular', 'social-google-plus', 'social-google-plus-circular', 'social-instagram', 'social-instagram-circular', 'social-last-fm', 'social-last-fm-circular', 'social-linkedin', 'social-linkedin-circular', 'social-pinterest', 'social-pinterest-circular', 'social-skype', 'social-skype-outline', 'social-tumbler', 'social-tumbler-circular', 'social-twitter', 'social-twitter-circular', 'social-vimeo', 'social-vimeo-circular', 'social-youtube', 'social-youtube-circular', 'sort-alphabetically', 'sort-alphabetically-outline', 'sort-numerically', 'sort-numerically-outline', 'spanner', 'spanner-outline', 'spiral', 'star', 'starburst', 'starburst-outline', 'star-full-outline', 'star-half', 'star-half-outline', 'star-outline', 'stopwatch', 'support', 'tabs-outline', 'tag', 'tags', 'thermometer', 'th-large', 'th-large-outline', 'th-list', 'th-list-outline', 'th-menu', 'th-menu-outline', 'th-small', 'th-small-outline', 'thumbs-down', 'thumbs-ok', 'thumbs-up', 'tick', 'ticket', 'tick-outline', 'time', 'times', 'times-outline', 'trash', 'tree', 'upload', 'upload-outline', 'user', 'user-add', 'user-add-outline', 'user-delete', 'user-delete-outline', 'user-outline', 'vendor-android', 'vendor-apple', 'vendor-microsoft', 'video', 'video-outline', 'volume', 'volume-down', 'volume-mute', 'volume-up', 'warning', 'warning-outline', 'watch', 'waves', 'waves-outline', 'weather-cloudy', 'weather-downpour', 'weather-night', 'weather-partly-sunny', 'weather-shower', 'weather-snow', 'weather-stormy', 'weather-sunny', 'weather-windy', 'weather-windy-cloudy', 'wi-fi', 'wi-fi-outline', 'wine', 'world', 'world-outline', 'zoom', 'zoom-in', 'zoom-in-outline', 'zoom-out', 'zoom-outline', 'zoom-out-outline' ] }, { version: '2.0.9', icons: [ '', 'adjust-brightness', 'adjust-contrast', 'anchor', 'anchor-outline', 'archive', 'arrow-back', 'arrow-back-outline', 'arrow-down', 'arrow-down-outline', 'arrow-down-thick', 'arrow-forward', 'arrow-forward-outline', 'arrow-left', 'arrow-left-outline', 'arrow-left-thick', 'arrow-loop', 'arrow-loop-outline', 'arrow-maximise', 'arrow-maximise-outline', 'arrow-minimise', 'arrow-minimise-outline', 'arrow-move', 'arrow-move-outline', 'arrow-repeat', 'arrow-repeat-outline', 'arrow-right', 'arrow-right-outline', 'arrow-right-thick', 'arrow-shuffle', 'arrow-sorted-down', 'arrow-sorted-up', 'arrow-sync', 'arrow-sync-outline', 'arrow-unsorted', 'arrow-up', 'arrow-up-outline', 'arrow-up-thick', 'at', 'attachment', 'attachment-outline', 'backspace', 'backspace-outline', 'battery-charge', 'battery-full', 'battery-high', 'battery-low', 'battery-mid', 'beaker', 'beer', 'bell', 'book', 'bookmark', 'briefcase', 'brush', 'business-card', 'calculator', 'calendar', 'calendar-outline', 'camera', 'camera-outline', 'cancel', 'cancel-outline', 'chart-area', 'chart-area-outline', 'chart-bar', 'chart-bar-outline', 'chart-line', 'chart-line-outline', 'chart-pie', 'chart-pie-outline', 'chevron-left', 'chevron-left-outline', 'chevron-right', 'chevron-right-outline', 'clipboard', 'cloud-storage', 'cloud-storage-outline', 'code', 'code-outline', 'coffee', 'cog', 'cog-outline', 'compass', 'contacts', 'credit-card', 'css3', 'database', 'delete', 'delete-outline', 'device-desktop', 'device-laptop', 'device-phone', 'device-tablet', 'directions', 'divide', 'divide-outline', 'document', 'document-add', 'document-delete', 'document-text', 'download', 'download-outline', 'dropbox', 'edit', 'eject', 'eject-outline', 'equals', 'equals-outline', 'export', 'export-outline', 'eye', 'eye-outline', 'feather', 'film', 'filter', 'flag', 'flag-outline', 'flash', 'flash-outline', 'flow-children', 'flow-merge', 'flow-parallel', 'flow-switch', 'folder', 'folder-add', 'folder-delete', 'folder-open', 'gift', 'globe', 'globe-outline', 'group', 'group-outline', 'headphones', 'heart', 'heart-full-outline', 'heart-half-outline', 'heart-outline', 'home', 'home-outline', 'html5', 'image', 'image-outline', 'infinity', 'infinity-outline', 'info', 'info-large', 'info-large-outline', 'info-outline', 'input-checked', 'input-checked-outline', 'key', 'keyboard', 'key-outline', 'leaf', 'lightbulb', 'link', 'link-outline', 'location', 'location-arrow', 'location-arrow-outline', 'location-outline', 'lock-closed', 'lock-closed-outline', 'lock-open', 'lock-open-outline', 'mail', 'map', 'media-eject', 'media-eject-outline', 'media-fast-forward', 'media-fast-forward-outline', 'media-pause', 'media-pause-outline', 'media-play', 'media-play-outline', 'media-play-reverse', 'media-play-reverse-outline', 'media-record', 'media-record-outline', 'media-rewind', 'media-rewind-outline', 'media-stop', 'media-stop-outline', 'message', 'messages', 'message-typing', 'microphone', 'microphone-outline', 'minus', 'minus-outline', 'mortar-board', 'news', 'notes', 'notes-outline', 'pen', 'pencil', 'phone', 'phone-outline', 'pi', 'pin', 'pin-outline', 'pi-outline', 'pipette', 'plane', 'plane-outline', 'plug', 'plus', 'plus-outline', 'point-of-interest', 'point-of-interest-outline', 'power', 'power-outline', 'printer', 'puzzle', 'puzzle-outline', 'radar', 'radar-outline', 'refresh', 'refresh-outline', 'rss', 'rss-outline', 'scissors', 'scissors-outline', 'shopping-bag', 'shopping-cart', 'social-at-circular', 'social-dribbble', 'social-dribbble-circular', 'social-facebook', 'social-facebook-circular', 'social-flickr', 'social-flickr-circular', 'social-github', 'social-github-circular', 'social-google-plus', 'social-google-plus-circular', 'social-instagram', 'social-instagram-circular', 'social-last-fm', 'social-last-fm-circular', 'social-linkedin', 'social-linkedin-circular', 'social-pinterest', 'social-pinterest-circular', 'social-skype', 'social-skype-outline', 'social-tumbler', 'social-tumbler-circular', 'social-twitter', 'social-twitter-circular', 'social-vimeo', 'social-vimeo-circular', 'social-youtube', 'social-youtube-circular', 'sort-alphabetically', 'sort-alphabetically-outline', 'sort-numerically', 'sort-numerically-outline', 'spanner', 'spanner-outline', 'spiral', 'star', 'starburst', 'starburst-outline', 'star-full-outline', 'star-half', 'star-half-outline', 'star-outline', 'stopwatch', 'support', 'tabs-outline', 'tag', 'tags', 'thermometer', 'th-large', 'th-large-outline', 'th-list', 'th-list-outline', 'th-menu', 'th-menu-outline', 'th-small', 'th-small-outline', 'thumbs-down', 'thumbs-ok', 'thumbs-up', 'tick', 'ticket', 'tick-outline', 'time', 'times', 'times-outline', 'trash', 'tree', 'upload', 'upload-outline', 'user', 'user-add', 'user-add-outline', 'user-delete', 'user-delete-outline', 'user-outline', 'vendor-android', 'vendor-apple', 'vendor-microsoft', 'video', 'video-outline', 'volume', 'volume-down', 'volume-mute', 'volume-up', 'warning', 'warning-outline', 'watch', 'waves', 'waves-outline', 'weather-cloudy', 'weather-downpour', 'weather-night', 'weather-partly-sunny', 'weather-shower', 'weather-snow', 'weather-stormy', 'weather-sunny', 'weather-windy', 'weather-windy-cloudy', 'wi-fi', 'wi-fi-outline', 'wine', 'world', 'world-outline', 'zoom', 'zoom-in', 'zoom-in-outline', 'zoom-out', 'zoom-outline', 'zoom-out-outline' ] } ] }; var l = data.allVersions.length; data.icons = data.allVersions[l-1].icons; $.iconset_typicon = data; })(jQuery); /*!======================================================================== * Iconset: Weather Icons * Versions: 1.2.0, 2.0.10 * http://erikflowers.github.io/weather-icons/ * ======================================================================== */ ;(function($){ var data = { iconClass: 'wi', iconClassFix: 'wi-', icons: [], allVersions: [ { version: '1.2.0', icons: [ '', 'alien', 'celsius', 'cloud', 'cloud-down', 'cloud-refresh', 'cloud-up', 'cloudy', 'cloudy-gusts', 'cloudy-windy', 'day-cloudy', 'day-cloudy-gusts', 'day-cloudy-windy', 'day-fog', 'day-hail', 'day-lightning', 'day-rain', 'day-rain-mix', 'day-rain-wind', 'day-showers', 'day-sleet-storm', 'day-snow', 'day-snow-thunderstorm', 'day-snow-wind', 'day-sprinkle', 'day-storm-showers', 'day-sunny', 'day-sunny-overcast', 'day-thunderstorm', 'degrees', 'down', 'down-left', 'dust', 'fahrenheit', 'fog', 'hail', 'horizon', 'horizon-alt', 'hot', 'hurricane', 'left', 'lightning', 'lunar-eclipse', 'meteor', 'moon-full', 'moon-new', 'moon-old', 'moon-waning-crescent', 'moon-waning-gibbous', 'moon-waning-quarter', 'moon-waxing-crescent', 'moon-waxing-gibbous', 'moon-waxing-quarter', 'moon-young', 'night-alt-cloudy-gusts', 'night-alt-cloudy-windy', 'night-alt-hail', 'night-alt-lightning', 'night-alt-rain', 'night-alt-rain-mix', 'night-alt-rain-wind', 'night-alt-showers', 'night-alt-sleet-storm', 'night-alt-snow', 'night-alt-snow-thunderstorm', 'night-alt-snow-wind', 'night-alt-sprinkle', 'night-alt-storm-showers', 'night-alt-thunderstorm', 'night-clear', 'night-cloudy', 'night-cloudy-gusts', 'night-cloudy-windy', 'night-fog', 'night-hail', 'night-lightning', 'night-partly-cloudy', 'night-rain', 'night-rain-mix', 'night-rain-wind', 'night-showers', 'night-sleet-storm', 'night-snow', 'night-snow-thunderstorm', 'night-snow-wind', 'night-sprinkle', 'night-storm-showers', 'night-thunderstorm', 'rain', 'rain-mix', 'rain-wind', 'refresh', 'refresh-alt', 'right', 'showers', 'smog', 'smoke', 'snow', 'snow-wind', 'snowflake-cold', 'solar-eclipse', 'sprinkle', 'sprinkles', 'stars', 'storm-showers', 'strong-wind', 'sunrise', 'sunset', 'thermometer', 'thermometer-exterior', 'thermometer-internal', 'thunderstorm', 'tornado', 'up', 'up-right', 'wind-east', 'wind-north', 'wind-north-east', 'wind-north-west', 'wind-south', 'wind-south-east', 'wind-south-west', 'wind-west', 'windy' ] }, { version: '2.0.10', icons: [ '', 'alien', 'barometer', 'celsius', 'cloud', 'cloud-down', 'cloud-refresh', 'cloud-up', 'cloudy', 'cloudy-gusts', 'cloudy-windy', 'day-cloudy', 'day-cloudy-gusts', 'day-cloudy-high', 'day-cloudy-windy', 'day-fog', 'day-hail', 'day-haze', 'day-light-wind', 'day-lightning', 'day-rain', 'day-rain-mix', 'day-rain-wind', 'day-showers', 'day-sleet', 'day-sleet-storm', 'day-snow', 'day-snow-thunderstorm', 'day-snow-wind', 'day-sprinkle', 'day-storm-showers', 'day-sunny', 'day-sunny-overcast', 'day-thunderstorm', 'day-windy', 'degrees', 'direction-down', 'direction-down-left', 'direction-down-right', 'direction-left', 'direction-right', 'direction-up', 'direction-up-left', 'direction-up-right', 'dust', 'earthquake', 'fahrenheit', 'fire', 'flood', 'fog', 'gale-warning', 'hail', 'horizon', 'horizon-alt', 'hot', 'humidity', 'hurricane', 'hurricane-warning', 'lightning', 'lunar-eclipse', 'meteor', 'moon-alt-first-quarter', 'moon-alt-full', 'moon-alt-new', 'moon-alt-third-quarter', 'moon-alt-waning-crescent-1', 'moon-alt-waning-crescent-2', 'moon-alt-waning-crescent-3', 'moon-alt-waning-crescent-4', 'moon-alt-waning-crescent-5', 'moon-alt-waning-crescent-6', 'moon-alt-waning-gibbous-1', 'moon-alt-waning-gibbous-2', 'moon-alt-waning-gibbous-3', 'moon-alt-waning-gibbous-4', 'moon-alt-waning-gibbous-5', 'moon-alt-waning-gibbous-6', 'moon-alt-waxing-crescent-1', 'moon-alt-waxing-crescent-2', 'moon-alt-waxing-crescent-3', 'moon-alt-waxing-crescent-4', 'moon-alt-waxing-crescent-5', 'moon-alt-waxing-crescent-6', 'moon-alt-waxing-gibbous-1', 'moon-alt-waxing-gibbous-2', 'moon-alt-waxing-gibbous-3', 'moon-alt-waxing-gibbous-4', 'moon-alt-waxing-gibbous-5', 'moon-alt-waxing-gibbous-6', 'moon-first-quarter', 'moon-full', 'moon-new', 'moon-third-quarter', 'moon-waning-crescent-1', 'moon-waning-crescent-2', 'moon-waning-crescent-3', 'moon-waning-crescent-4', 'moon-waning-crescent-5', 'moon-waning-crescent-6', 'moon-waning-gibbous-1', 'moon-waning-gibbous-2', 'moon-waning-gibbous-3', 'moon-waning-gibbous-4', 'moon-waning-gibbous-5', 'moon-waning-gibbous-6', 'moon-waxing-crescent-1', 'moon-waxing-crescent-2', 'moon-waxing-crescent-3', 'moon-waxing-crescent-4', 'moon-waxing-crescent-5', 'moon-waxing-crescent-6', 'moon-waxing-gibbous-1', 'moon-waxing-gibbous-2', 'moon-waxing-gibbous-3', 'moon-waxing-gibbous-4', 'moon-waxing-gibbous-5', 'moon-waxing-gibbous-6', 'moonrise', 'moonset', 'na', 'night-alt-cloudy', 'night-alt-cloudy-gusts', 'night-alt-cloudy-high', 'night-alt-cloudy-windy', 'night-alt-hail', 'night-alt-lightning', 'night-alt-partly-cloudy', 'night-alt-rain', 'night-alt-rain-mix', 'night-alt-rain-wind', 'night-alt-showers', 'night-alt-sleet', 'night-alt-sleet-storm', 'night-alt-snow', 'night-alt-snow-thunderstorm', 'night-alt-snow-wind', 'night-alt-sprinkle', 'night-alt-storm-showers', 'night-alt-thunderstorm', 'night-clear', 'night-cloudy', 'night-cloudy-gusts', 'night-cloudy-high', 'night-cloudy-windy', 'night-fog', 'night-hail', 'night-lightning', 'night-partly-cloudy', 'night-rain', 'night-rain-mix', 'night-rain-wind', 'night-showers', 'night-sleet', 'night-sleet-storm', 'night-snow', 'night-snow-thunderstorm', 'night-snow-wind', 'night-sprinkle', 'night-storm-showers', 'night-thunderstorm', 'rain', 'rain-mix', 'rain-wind', 'raindrop', 'raindrops', 'refresh', 'refresh-alt', 'sandstorm', 'showers', 'sleet', 'small-craft-advisory', 'smog', 'smoke', 'snow', 'snow-wind', 'snowflake-cold', 'solar-eclipse', 'sprinkle', 'stars', 'storm-showers', 'storm-showers', 'storm-warning', 'strong-wind', 'sunrise', 'sunset', 'thermometer', 'thermometer-exterior', 'thermometer-internal', 'thunderstorm', 'thunderstorm', 'time-1', 'time-10', 'time-11', 'time-12', 'time-2', 'time-3', 'time-4', 'time-5', 'time-6', 'time-7', 'time-8', 'time-9', 'tornado', 'train', 'tsunami', 'umbrella', 'volcano', 'wind-beaufort-0', 'wind-beaufort-1', 'wind-beaufort-10', 'wind-beaufort-11', 'wind-beaufort-12', 'wind-beaufort-2', 'wind-beaufort-3', 'wind-beaufort-4', 'wind-beaufort-5', 'wind-beaufort-6', 'wind-beaufort-7', 'wind-beaufort-8', 'wind-beaufort-9', 'wind-direction', 'windy' ] } ] }; var l = data.allVersions.length; data.icons = data.allVersions[l-1].icons; $.iconset_weathericon = data; })(jQuery); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/bootstrap-iconpicker/js/bootstrap-iconpicker.js ================================================ /*!======================================================================== * File: bootstrap-iconpicker.js v1.10.0 by @victor-valencia * https://victor-valencia.github.com/bootstrap-iconpicker * ======================================================================== * Copyright 2013-2018 Victor Valencia Rico. * Licensed under MIT license. * https://github.com/victor-valencia/bootstrap-iconpicker/blob/master/LICENSE * ======================================================================== */ ;(function($){ "use strict"; // ICONPICKER PUBLIC CLASS DEFINITION // ============================== var Iconpicker = function (element, options) { if (typeof $.fn.popover === 'undefined' || typeof $.fn.popover.Constructor.VERSION === 'undefined') { throw new TypeError('Bootstrap iconpicker require Bootstrap popover'); } this.$element = $(element); this.options = $.extend({}, Iconpicker.DEFAULTS, this.$element.data()); this.options = $.extend({}, this.options, options); }; // ICONPICKER VERSION // ============================== Iconpicker.VERSION = '1.10.0'; // ICONPICKER ICONSET_EMPTY // ============================== Iconpicker.ICONSET_EMPTY = { iconClass: '', iconClassFix: '', icons: [] }; // ICONPICKER ICONSET // ============================== Iconpicker.ICONSET = { _custom: null, elusiveicon: $.iconset_elusiveicon || Iconpicker.ICONSET_EMPTY, flagicon: $.iconset_flagicon || Iconpicker.ICONSET_EMPTY, fontawesome4: $.iconset_fontawesome_4 || Iconpicker.ICONSET_EMPTY, fontawesome5: $.iconset_fontawesome_5 || Iconpicker.ICONSET_EMPTY, glyphicon: $.iconset_glyphicon || Iconpicker.ICONSET_EMPTY, ionicon: $.iconset_ionicon || Iconpicker.ICONSET_EMPTY, mapicon: $.iconset_mapicon || Iconpicker.ICONSET_EMPTY, materialdesign: $.iconset_materialdesign || Iconpicker.ICONSET_EMPTY, octicon: $.iconset_octicon || Iconpicker.ICONSET_EMPTY, typicon: $.iconset_typicon || Iconpicker.ICONSET_EMPTY, weathericon: $.iconset_weathericon || Iconpicker.ICONSET_EMPTY }; // ICONPICKER DEFAULTS // ============================== Iconpicker.DEFAULTS = { align: 'center', arrowClass: 'btn-primary', arrowNextIconClass: 'fas fa-arrow-right', arrowPrevIconClass: 'fas fa-arrow-left', cols: 4, icon: '', iconset: 'fontawesome5', iconsetVersion: 'lastest', header: true, labelHeader: '{0} / {1}', footer: true, labelFooter: '{0} - {1} of {2}', placement: 'bottom', rows: 4, search: true, searchText: 'Search icon', selectedClass: 'btn-warning', unselectedClass: 'btn-secondary' }; // ICONPICKER PRIVATE METHODS // ============================== Iconpicker.prototype.bindEvents = function () { var op = this.options; var el = this; op.table.find('.btn-previous, .btn-next').off('click').on('click', function(e) { e.preventDefault(); if(!$(this).hasClass('disabled')){ var inc = parseInt($(this).val(), 10); el.changeList(op.page + inc); } }); op.table.find('.btn-icon').off('click').on('click', function(e) { e.preventDefault(); el.select($(this).val()); if(op.inline === false){ el.$element.popover(($.fn.bsVersion() === '3.x') ? 'destroy' : 'dispose'); } else{ op.table.find("i[class$='" + $(this).val() + "']").parent().addClass(op.selectedClass); } }); op.table.find('.search-control').off('keyup').on('keyup', function() { el.changeList(1); }); }; Iconpicker.prototype.changeList = function (page) { this.filterIcons(); this.updateLabels(page); this.updateIcons(page); this.options.page = page; this.bindEvents(); }; Iconpicker.prototype.filterIcons = function () { var op = this.options; var search = op.table.find('.search-control').val(); var icons = []; if(op.iconsetVersion != 'lastest' && typeof Iconpicker.ICONSET[op.iconset].allVersions != 'undefined'){ $.each(Iconpicker.ICONSET[op.iconset].allVersions, function(i, v){ if(op.iconsetVersion == v.version){ icons = v.icons; } }); } else icons = Iconpicker.ICONSET[op.iconset].icons; if (search === "") { op.icons = icons; } else { var result = []; $.each(icons, function(i, v) { if (v.toLowerCase().indexOf(search) > -1) { result.push(v); } }); op.icons = result; } }; Iconpicker.prototype.removeAddClass = function (target, remove, add) { this.options.table.find(target).removeClass(remove).addClass(add); return add; }; Iconpicker.prototype.reset = function () { this.updatePicker(); this.changeList(1); }; Iconpicker.prototype.select = function (icon) { var op = this.options; var el = this.$element; op.selected = $.inArray(icon.replace(op.iconClassFix, ''), op.icons); if (op.selected === -1) { op.selected = 0; icon = op.iconClassFix + op.icons[op.selected]; } if (icon !== '' && op.selected >= 0) { op.icon = icon; if(op.inline === false){ el.find('input').val(icon); el.find('i').attr('class', '').addClass(op.iconClass).addClass(icon); } if(icon === op.iconClassFix){ el.trigger({ type: "change", icon: 'empty' }); } else { el.trigger({ type: "change", icon: icon }); el.find('input').val(icon); } op.table.find('button.' + op.selectedClass).removeClass(op.selectedClass); } }; Iconpicker.prototype.switchPage = function (icon) { var op = this.options; op.selected = $.inArray(icon.replace(op.iconClassFix, ''), op.icons); if(op.selected >= 0) { var page = Math.ceil((op.selected + 1) / this.totalIconsPerPage()); this.changeList(page); } if(icon === ''){ //if(op.iconClassFix !== '') op.table.find('i.' + op.iconClassFix).parent().addClass(op.selectedClass); //else } else{ op.table.find('i.' + icon).parent().addClass(op.selectedClass); } }; Iconpicker.prototype.totalPages = function () { return Math.ceil(this.totalIcons() / this.totalIconsPerPage()); }; Iconpicker.prototype.totalIcons = function () { return this.options.icons.length; }; Iconpicker.prototype.totalIconsPerPage = function () { if(this.options.rows === 0){ return this.options.icons.length; } else{ return this.options.cols * this.options.rows; } }; Iconpicker.prototype.updateArrows = function (page) { var op = this.options; var total_pages = this.totalPages(); if (page === 1) { op.table.find('.btn-previous').addClass('disabled'); } else { op.table.find('.btn-previous').removeClass('disabled'); } if (page === total_pages || total_pages === 0) { op.table.find('.btn-next').addClass('disabled'); } else { op.table.find('.btn-next').removeClass('disabled'); } }; Iconpicker.prototype.updateIcons = function (page) { var op = this.options; var tbody = op.table.find('tbody').empty(); var offset = (page - 1) * this.totalIconsPerPage(); var length = op.rows; if(op.rows === 0){ length = op.icons.length; } for (var i = 0; i < length; i++) { var tr = $(''); for (var j = 0; j < op.cols; j++) { var pos = offset + (i * op.cols) + j; var btn = $('').hide(); if (pos < op.icons.length) { var v = op.iconClassFix + op.icons[pos]; btn.val(v).attr('title', v).append('').show(); if (op.icon === v) { btn.addClass(op.selectedClass).addClass('btn-icon-selected'); } } tr.append($('').append(btn)); } tbody.append(tr); } }; Iconpicker.prototype.updateIconsCount = function () { var op = this.options; if(op.footer === true){ var icons_count = [ '', ' ', ' ', ' ', '' ]; op.table.find('tfoot').empty().append(icons_count.join('')); } }; Iconpicker.prototype.updateLabels = function (page) { var op = this.options; var total_icons = this.totalIcons(); var total_pages = this.totalPages(); op.table.find('.page-count').html(op.labelHeader.replace('{0}', (total_pages === 0 ) ? 0 : page).replace('{1}', total_pages)); var offset = (page - 1) * this.totalIconsPerPage(); var total = page * this.totalIconsPerPage(); op.table.find('.icons-count').html(op.labelFooter.replace('{0}', total_icons ? offset + 1 : 0).replace('{1}', (total < total_icons) ? total: total_icons).replace('{2}', total_icons)); this.updateArrows(page); }; Iconpicker.prototype.updatePagesCount = function () { var op = this.options; if(op.header === true){ var tr = $(''); for (var i = 0; i < op.cols; i++) { var td = $(''); if (i === 0 || i === op.cols - 1) { var arrow = [ '' ]; td.append(arrow.join('')); tr.append(td); } else if (tr.find('.page-count').length === 0) { td.attr('colspan', op.cols - 2).append(''); tr.append(td); } } op.table.find('thead').empty().append(tr); } }; Iconpicker.prototype.updatePicker = function () { var op = this.options; if (op.cols < 4) { throw 'Iconpicker => The number of columns must be greater than or equal to 4. [option.cols = ' + op.cols + ']'; } else if (op.rows < 0) { throw 'Iconpicker => The number of rows must be greater than or equal to 0. [option.rows = ' + op.rows + ']'; } else { this.updatePagesCount(); this.updateSearch(); this.updateIconsCount(); } }; Iconpicker.prototype.updateSearch = function () { var op = this.options; var search = [ '', ' ', ' ', ' ', '' ]; search = $(search.join('')); if (op.search === true) { search.show(); } else { search.hide(); } op.table.find('thead').append(search); }; // ICONPICKER PUBLIC METHODS // ============================== Iconpicker.prototype.setAlign = function (value) { this.$element.removeClass(this.options.align).addClass(value); this.options.align = value; }; Iconpicker.prototype.setArrowClass = function (value) { this.options.arrowClass = this.removeAddClass('.btn-arrow', this.options.arrowClass, value); }; Iconpicker.prototype.setArrowNextIconClass = function (value) { this.options.arrowNextIconClass = this.removeAddClass('.btn-next > span', this.options.arrowNextIconClass, value); }; Iconpicker.prototype.setArrowPrevIconClass = function (value) { this.options.arrowPrevIconClass = this.removeAddClass('.btn-previous > span', this.options.arrowPrevIconClass, value); }; Iconpicker.prototype.setCols = function (value) { this.options.cols = value; this.reset(); }; Iconpicker.prototype.setFooter = function (value) { var footer = this.options.table.find('tfoot'); if (value === true) { footer.show(); } else { footer.hide(); } this.options.footer = value; }; Iconpicker.prototype.setHeader = function (value) { var header = this.options.table.find('thead'); if (value === true) { header.show(); } else { header.hide(); } this.options.header = value; }; Iconpicker.prototype.setIcon = function (value) { this.select(value); }; Iconpicker.prototype.setIconset = function (value) { var op = this.options; if ($.isPlainObject(value)) { Iconpicker.ICONSET._custom = $.extend(Iconpicker.ICONSET_EMPTY, value); op.iconset = '_custom'; } else if (!Iconpicker.ICONSET.hasOwnProperty(value)) { op.iconset = Iconpicker.DEFAULTS.iconset; } else { op.iconset = value; } op = $.extend(op, Iconpicker.ICONSET[op.iconset]); this.reset(); this.select(op.icon); }; Iconpicker.prototype.setLabelHeader = function (value) { this.options.labelHeader = value; this.updateLabels(this.options.page); }; Iconpicker.prototype.setLabelFooter = function (value) { this.options.labelFooter = value; this.updateLabels(this.options.page); }; Iconpicker.prototype.setPlacement = function (value) { this.options.placement = value; }; Iconpicker.prototype.setRows = function (value) { this.options.rows = value; this.reset(); }; Iconpicker.prototype.setSearch = function (value) { var search = this.options.table.find('.search-control'); if (value === true) { search.show(); } else { search.hide(); } search.val(''); this.changeList(1); this.options.search = value; }; Iconpicker.prototype.setSearchText = function (value) { this.options.table.find('.search-control').attr('placeholder', value); this.options.searchText = value; }; Iconpicker.prototype.setSelectedClass = function (value) { this.options.selectedClass = this.removeAddClass('.btn-icon-selected', this.options.selectedClass, value); }; Iconpicker.prototype.setUnselectedClass = function (value) { this.options.unselectedClass = this.removeAddClass('.btn-icon', this.options.unselectedClass, value); }; // ICONPICKER PLUGIN DEFINITION // ======================== var old = $.fn.iconpicker; $.fn.iconpicker = function (option, params) { return this.each(function () { var $this = $(this); var data = $this.data('bs.iconpicker'); var options = typeof option === 'object' && option; if (!data) { $this.data('bs.iconpicker', (data = new Iconpicker(this, options))); } if (typeof option === 'string') { if (typeof data[option] === 'undefined') { throw 'Iconpicker => The "' + option + '" method does not exists.'; } else { data[option](params); } } else{ var op = data.options; op = $.extend(op, { inline: false, page: 1, selected: -1, table: $('
        ') }); var name = (typeof $this.attr('name') !== 'undefined') ? 'name="' + $this.attr('name') + '"' : ''; if($this.prop('tagName') === 'BUTTON'){ $this.empty() .append('') .append('') .append('') .addClass('iconpicker ' + (($.fn.bsVersion() === '3.x') ? '' : 'dropdown-toggle')); data.setIconset(op.iconset); $this.on('click', function(e) { e.preventDefault(); $this.popover({ animation: false, trigger: 'manual', html: true, content: op.table, container: 'body', placement: op.placement }).on('inserted.bs.popover', function() { var el = $this.data('bs.popover'); var tip = ($.fn.bsVersion() === '3.x') ? el.tip() : $(el.getTipElement()) tip.addClass('iconpicker-popover'); }).on('shown.bs.popover', function () { data.switchPage(op.icon); data.bindEvents(); }); //console.log($.fn.bsVersion()); $this.popover('show'); }); } else{ op.inline = true; data.setIconset(op.iconset); $this.empty() .append('') .append(op.table) .addClass('iconpicker') .addClass(op.align); data.switchPage(op.icon); data.bindEvents(); } } }); }; $.fn.iconpicker.Constructor = Iconpicker; // ICONPICKER NO CONFLICT // ================== $.fn.iconpicker.noConflict = function () { $.fn.iconpicker = old; return this; }; $.fn.bsVersion = function() { return $.fn.popover.Constructor.VERSION.substr(0,2) + 'x'; }; // ICONPICKER DATA-API // =============== $(document).on('click', 'body', function (e) { $('.iconpicker').each(function () { //the 'is' for buttons that trigger popups //the 'has' for icons within a button that triggers a popup if (!$(this).is(e.target) && $(this).has(e.target).length === 0 && $('.popover').has(e.target).length === 0) { $(this).popover(($.fn.bsVersion() === '3.x') ? 'destroy' : 'dispose'); } }); }); $('button[role="iconpicker"],div[role="iconpicker"]').iconpicker(); })(jQuery); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/bootstrap-validator/validator.js ================================================ /*! * Validator v0.11.9 for Bootstrap 3, by @1000hz * Copyright 2017 Cina Saffary * Licensed under http://opensource.org/licenses/MIT * * https://github.com/1000hz/bootstrap-validator */ +function ($) { 'use strict'; // VALIDATOR CLASS DEFINITION // ========================== function getValue($el) { return $el.is('[type="checkbox"]') ? $el.prop('checked') : $el.is('[type="radio"]') ? !!$('[name="' + $el.attr('name') + '"]:checked').length : $el.is('select[multiple]') ? ($el.val() || []).length : $el.val() } var Validator = function (element, options) { this.options = options this.validators = $.extend({}, Validator.VALIDATORS, options.custom) this.$element = $(element) this.$btn = $('button[type="submit"], input[type="submit"]') .filter('[form="' + this.$element.attr('id') + '"]') .add(this.$element.find('input[type="submit"], button[type="submit"]')) this.update() this.$element.on('input.bs.validator change.bs.validator focusout.bs.validator', $.proxy(this.onInput, this)) this.$element.on('submit.bs.validator', $.proxy(this.onSubmit, this)) this.$element.on('reset.bs.validator', $.proxy(this.reset, this)) this.$element.find('[data-match]').each(function () { var $this = $(this) var target = $this.attr('data-match') $(target).on('input.bs.validator', function (e) { getValue($this) && $this.trigger('input.bs.validator') }) }) // run validators for fields with values, but don't clobber server-side errors this.$inputs.filter(function () { return getValue($(this)) && !$(this).closest('.has-error').length }).trigger('focusout') this.$element.attr('novalidate', true) // disable automatic native validation } Validator.VERSION = '0.11.9' Validator.INPUT_SELECTOR = ':input:not([type="hidden"], [type="submit"], [type="reset"], button)' Validator.FOCUS_OFFSET = 20 Validator.DEFAULTS = { delay: 500, html: false, disable: true, focus: true, custom: {}, errors: { match: 'Does not match', minlength: 'Not long enough' }, feedback: { success: 'glyphicon-ok', error: 'glyphicon-remove' } } Validator.VALIDATORS = { 'native': function ($el) { var el = $el[0] if (el.checkValidity) { return !el.checkValidity() && !el.validity.valid && (el.validationMessage || "error!") } }, 'match': function ($el) { var target = $el.attr('data-match') return $el.val() !== $(target).val() && Validator.DEFAULTS.errors.match }, 'minlength': function ($el) { var minlength = $el.attr('data-minlength') return $el.val().length < minlength && Validator.DEFAULTS.errors.minlength } } Validator.prototype.update = function () { var self = this this.$inputs = this.$element.find(Validator.INPUT_SELECTOR) .add(this.$element.find('[data-validate="true"]')) .not(this.$element.find('[data-validate="false"]') .each(function () { self.clearErrors($(this)) }) ) this.toggleSubmit() return this } Validator.prototype.onInput = function (e) { var self = this var $el = $(e.target) var deferErrors = e.type !== 'focusout' if (!this.$inputs.is($el)) return this.validateInput($el, deferErrors).done(function () { self.toggleSubmit() }) } Validator.prototype.validateInput = function ($el, deferErrors) { var value = getValue($el) var prevErrors = $el.data('bs.validator.errors') if ($el.is('[type="radio"]')) $el = this.$element.find('input[name="' + $el.attr('name') + '"]') var e = $.Event('validate.bs.validator', {relatedTarget: $el[0]}) this.$element.trigger(e) if (e.isDefaultPrevented()) return var self = this return this.runValidators($el).done(function (errors) { $el.data('bs.validator.errors', errors) errors.length ? deferErrors ? self.defer($el, self.showErrors) : self.showErrors($el) : self.clearErrors($el) if (!prevErrors || errors.toString() !== prevErrors.toString()) { e = errors.length ? $.Event('invalid.bs.validator', {relatedTarget: $el[0], detail: errors}) : $.Event('valid.bs.validator', {relatedTarget: $el[0], detail: prevErrors}) self.$element.trigger(e) } self.toggleSubmit() self.$element.trigger($.Event('validated.bs.validator', {relatedTarget: $el[0]})) }) } Validator.prototype.runValidators = function ($el) { var errors = [] var deferred = $.Deferred() $el.data('bs.validator.deferred') && $el.data('bs.validator.deferred').reject() $el.data('bs.validator.deferred', deferred) function getValidatorSpecificError(key) { return $el.attr('data-' + key + '-error') } function getValidityStateError() { var validity = $el[0].validity return validity.typeMismatch ? $el.attr('data-type-error') : validity.patternMismatch ? $el.attr('data-pattern-error') : validity.stepMismatch ? $el.attr('data-step-error') : validity.rangeOverflow ? $el.attr('data-max-error') : validity.rangeUnderflow ? $el.attr('data-min-error') : validity.valueMissing ? $el.attr('data-required-error') : null } function getGenericError() { return $el.attr('data-error') } function getErrorMessage(key) { return getValidatorSpecificError(key) || getValidityStateError() || getGenericError() } $.each(this.validators, $.proxy(function (key, validator) { var error = null, rule = $el.attr('data-' + key) || null if ( (getValue($el) || $el.attr('required') || key == 'match') && (rule || key == 'native') && (error = validator.call(this, $el)) ) { error = getErrorMessage(key) || error !~errors.indexOf(error) && errors.push(error) } }, this)) if (!errors.length && getValue($el) && $el.attr('data-remote')) { this.defer($el, function () { var data = {} data[$el.attr('name')] = getValue($el) $.get($el.attr('data-remote'), data) .fail(function (jqXHR, textStatus, error) { errors.push(getErrorMessage('remote') || error) }) .always(function () { deferred.resolve(errors)}) }) } else deferred.resolve(errors) return deferred.promise() } Validator.prototype.validate = function () { var self = this $.when(this.$inputs.map(function (el) { return self.validateInput($(this), false) })).then(function () { self.toggleSubmit() self.focusError() }) return this } Validator.prototype.focusError = function () { if (!this.options.focus) return var $input = this.$element.find(".has-error:first :input") if ($input.length === 0) return $('html, body').animate({scrollTop: $input.offset().top - Validator.FOCUS_OFFSET}, 250) $input.focus() } Validator.prototype.showErrors = function ($el) { var method = this.options.html ? 'html' : 'text' var errors = $el.data('bs.validator.errors') var $group = $el.closest('.form-group') var $block = $group.find('.help-block.with-errors') var $feedback = $group.find('.form-control-feedback') if (!errors.length) return errors = $('
          ') .addClass('list-unstyled') .append($.map(errors, function (error) { return $('
        • ')[method](error) })) $block.data('bs.validator.originalContent') === undefined && $block.data('bs.validator.originalContent', $block.html()) $block.empty().append(errors) $group.addClass('has-error has-danger') $group.hasClass('has-feedback') && $feedback.removeClass(this.options.feedback.success) && $feedback.addClass(this.options.feedback.error) && $group.removeClass('has-success') } Validator.prototype.clearErrors = function ($el) { var $group = $el.closest('.form-group') var $block = $group.find('.help-block.with-errors') var $feedback = $group.find('.form-control-feedback') $block.html($block.data('bs.validator.originalContent')) $group.removeClass('has-error has-danger has-success') $group.hasClass('has-feedback') && $feedback.removeClass(this.options.feedback.error) && $feedback.removeClass(this.options.feedback.success) && getValue($el) && $feedback.addClass(this.options.feedback.success) && $group.addClass('has-success') } Validator.prototype.hasErrors = function () { function fieldErrors() { return !!($(this).data('bs.validator.errors') || []).length } return !!this.$inputs.filter(fieldErrors).length } Validator.prototype.isIncomplete = function () { function fieldIncomplete() { var value = getValue($(this)) return !(typeof value == "string" ? $.trim(value) : value) } return !!this.$inputs.filter('[required]').filter(fieldIncomplete).length } Validator.prototype.onSubmit = function (e) { this.validate() if (this.isIncomplete() || this.hasErrors()) e.preventDefault() } Validator.prototype.toggleSubmit = function () { if (!this.options.disable) return this.$btn.toggleClass('disabled', this.isIncomplete() || this.hasErrors()) } Validator.prototype.defer = function ($el, callback) { callback = $.proxy(callback, this, $el) if (!this.options.delay) return callback() window.clearTimeout($el.data('bs.validator.timeout')) $el.data('bs.validator.timeout', window.setTimeout(callback, this.options.delay)) } Validator.prototype.reset = function () { this.$element.find('.form-control-feedback') .removeClass(this.options.feedback.error) .removeClass(this.options.feedback.success) this.$inputs .removeData(['bs.validator.errors', 'bs.validator.deferred']) .each(function () { var $this = $(this) var timeout = $this.data('bs.validator.timeout') window.clearTimeout(timeout) && $this.removeData('bs.validator.timeout') }) this.$element.find('.help-block.with-errors') .each(function () { var $this = $(this) var originalContent = $this.data('bs.validator.originalContent') $this .removeData('bs.validator.originalContent') .html(originalContent) }) this.$btn.removeClass('disabled') this.$element.find('.has-error, .has-danger, .has-success').removeClass('has-error has-danger has-success') return this } Validator.prototype.destroy = function () { this.reset() this.$element .removeAttr('novalidate') .removeData('bs.validator') .off('.bs.validator') this.$inputs .off('.bs.validator') this.options = null this.validators = null this.$element = null this.$btn = null this.$inputs = null return this } // VALIDATOR PLUGIN DEFINITION // =========================== function Plugin(option) { return this.each(function () { var $this = $(this) var options = $.extend({}, Validator.DEFAULTS, $this.data(), typeof option == 'object' && option) var data = $this.data('bs.validator') if (!data && option == 'destroy') return if (!data) $this.data('bs.validator', (data = new Validator(this, options))) if (typeof option == 'string') data[option]() }) } var old = $.fn.validator $.fn.validator = Plugin $.fn.validator.Constructor = Validator // VALIDATOR NO CONFLICT // ===================== $.fn.validator.noConflict = function () { $.fn.validator = old return this } // VALIDATOR DATA-API // ================== $(window).on('load', function () { $('form[data-toggle="validator"]').each(function () { var $form = $(this) Plugin.call($form, $form.data()) }) }) }(jQuery); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/charts/apexcharts.css ================================================ .apexcharts-canvas { position: relative; user-select: none; /* cannot give overflow: hidden as it will crop tooltips which overflow outside chart area */ } /* scrollbar is not visible by default for legend, hence forcing the visibility */ .apexcharts-canvas ::-webkit-scrollbar { -webkit-appearance: none; width: 6px; } .apexcharts-canvas ::-webkit-scrollbar-thumb { border-radius: 4px; background-color: rgba(0,0,0,.5); box-shadow: 0 0 1px rgba(255,255,255,.5); -webkit-box-shadow: 0 0 1px rgba(255,255,255,.5); } .apexcharts-canvas.dark { background: #343F57; } .apexcharts-inner { position: relative; } .legend-mouseover-inactive { transition: 0.15s ease all; opacity: 0.20; } .apexcharts-series-collapsed { opacity: 0; } .apexcharts-gridline, .apexcharts-text { pointer-events: none; } .apexcharts-tooltip { border-radius: 5px; box-shadow: 2px 2px 6px -4px #999; cursor: default; font-size: 14px; left: 62px; opacity: 0; pointer-events: none; position: absolute; top: 20px; overflow: hidden; white-space: nowrap; z-index: 12; transition: 0.15s ease all; } .apexcharts-tooltip.light { border: 1px solid #e3e3e3; background: rgba(255, 255, 255, 0.96); } .apexcharts-tooltip.dark { color: #fff; background: rgba(30,30,30, 0.8); } .apexcharts-tooltip * { font-family: inherit; } .apexcharts-tooltip .apexcharts-marker, .apexcharts-area-series .apexcharts-area, .apexcharts-line { pointer-events: none; } .apexcharts-tooltip.active { opacity: 1; transition: 0.15s ease all; } .apexcharts-tooltip-title { padding: 6px; font-size: 15px; margin-bottom: 4px; } .apexcharts-tooltip.light .apexcharts-tooltip-title { background: #ECEFF1; border-bottom: 1px solid #ddd; } .apexcharts-tooltip.dark .apexcharts-tooltip-title { background: rgba(0, 0, 0, 0.7); border-bottom: 1px solid #333; } .apexcharts-tooltip-text-value, .apexcharts-tooltip-text-z-value { display: inline-block; font-weight: 600; margin-left: 5px; } .apexcharts-tooltip-text-z-label:empty, .apexcharts-tooltip-text-z-value:empty { display: none; } .apexcharts-tooltip-text-value, .apexcharts-tooltip-text-z-value { font-weight: 600; } .apexcharts-tooltip-marker { width: 12px; height: 12px; position: relative; top: 0px; margin-right: 10px; border-radius: 50%; } .apexcharts-tooltip-series-group { padding: 0 10px; display: none; text-align: left; justify-content: left; align-items: center; } .apexcharts-tooltip-series-group.active .apexcharts-tooltip-marker { opacity: 1; } .apexcharts-tooltip-series-group.active, .apexcharts-tooltip-series-group:last-child { padding-bottom: 4px; } .apexcharts-tooltip-series-group-hidden { opacity: 0; height: 0; line-height: 0; padding: 0 !important; } .apexcharts-tooltip-y-group { padding: 6px 0 5px; } .apexcharts-tooltip-candlestick { padding: 4px 8px; } .apexcharts-tooltip-candlestick > div { margin: 4px 0; } .apexcharts-tooltip-candlestick span.value { font-weight: bold; } .apexcharts-tooltip-rangebar { padding: 5px 8px; } .apexcharts-tooltip-rangebar .category { font-weight: 600; color: #777; } .apexcharts-tooltip-rangebar .series-name { font-weight: bold; display: block; margin-bottom: 5px; } .apexcharts-xaxistooltip { opacity: 0; padding: 9px 10px; pointer-events: none; color: #373d3f; font-size: 13px; text-align: center; border-radius: 2px; position: absolute; z-index: 10; background: #ECEFF1; border: 1px solid #90A4AE; transition: 0.15s ease all; } .apexcharts-xaxistooltip.dark { background: rgba(0, 0, 0, 0.7); border: 1px solid rgba(0, 0, 0, 0.5); color: #fff; } .apexcharts-xaxistooltip:after, .apexcharts-xaxistooltip:before { left: 50%; border: solid transparent; content: " "; height: 0; width: 0; position: absolute; pointer-events: none; } .apexcharts-xaxistooltip:after { border-color: rgba(236, 239, 241, 0); border-width: 6px; margin-left: -6px; } .apexcharts-xaxistooltip:before { border-color: rgba(144, 164, 174, 0); border-width: 7px; margin-left: -7px; } .apexcharts-xaxistooltip-bottom:after, .apexcharts-xaxistooltip-bottom:before { bottom: 100%; } .apexcharts-xaxistooltip-top:after, .apexcharts-xaxistooltip-top:before { top: 100%; } .apexcharts-xaxistooltip-bottom:after { border-bottom-color: #ECEFF1; } .apexcharts-xaxistooltip-bottom:before { border-bottom-color: #90A4AE; } .apexcharts-xaxistooltip-bottom.dark:after { border-bottom-color: rgba(0, 0, 0, 0.5); } .apexcharts-xaxistooltip-bottom.dark:before { border-bottom-color: rgba(0, 0, 0, 0.5); } .apexcharts-xaxistooltip-top:after { border-top-color:#ECEFF1 } .apexcharts-xaxistooltip-top:before { border-top-color: #90A4AE; } .apexcharts-xaxistooltip-top.dark:after { border-top-color:rgba(0, 0, 0, 0.5); } .apexcharts-xaxistooltip-top.dark:before { border-top-color: rgba(0, 0, 0, 0.5); } .apexcharts-xaxistooltip.active { opacity: 1; transition: 0.15s ease all; } .apexcharts-yaxistooltip { opacity: 0; padding: 4px 10px; pointer-events: none; color: #373d3f; font-size: 13px; text-align: center; border-radius: 2px; position: absolute; z-index: 10; background: #ECEFF1; border: 1px solid #90A4AE; } .apexcharts-yaxistooltip.dark { background: rgba(0, 0, 0, 0.7); border: 1px solid rgba(0, 0, 0, 0.5); color: #fff; } .apexcharts-yaxistooltip:after, .apexcharts-yaxistooltip:before { top: 50%; border: solid transparent; content: " "; height: 0; width: 0; position: absolute; pointer-events: none; } .apexcharts-yaxistooltip:after { border-color: rgba(236, 239, 241, 0); border-width: 6px; margin-top: -6px; } .apexcharts-yaxistooltip:before { border-color: rgba(144, 164, 174, 0); border-width: 7px; margin-top: -7px; } .apexcharts-yaxistooltip-left:after, .apexcharts-yaxistooltip-left:before { left: 100%; } .apexcharts-yaxistooltip-right:after, .apexcharts-yaxistooltip-right:before { right: 100%; } .apexcharts-yaxistooltip-left:after { border-left-color: #ECEFF1; } .apexcharts-yaxistooltip-left:before { border-left-color: #90A4AE; } .apexcharts-yaxistooltip-left.dark:after { border-left-color: rgba(0, 0, 0, 0.5); } .apexcharts-yaxistooltip-left.dark:before { border-left-color: rgba(0, 0, 0, 0.5); } .apexcharts-yaxistooltip-right:after { border-right-color: #ECEFF1; } .apexcharts-yaxistooltip-right:before { border-right-color: #90A4AE; } .apexcharts-yaxistooltip-right.dark:after { border-right-color: rgba(0, 0, 0, 0.5); } .apexcharts-yaxistooltip-right.dark:before { border-right-color: rgba(0, 0, 0, 0.5); } .apexcharts-yaxistooltip.active { opacity: 1; } .apexcharts-yaxistooltip-hidden { display: none; } .apexcharts-xcrosshairs, .apexcharts-ycrosshairs { pointer-events: none; opacity: 0; transition: 0.15s ease all; } .apexcharts-xcrosshairs.active, .apexcharts-ycrosshairs.active { opacity: 1; transition: 0.15s ease all; } .apexcharts-ycrosshairs-hidden { opacity: 0; } .apexcharts-zoom-rect { pointer-events: none; } .apexcharts-selection-rect { cursor: move; } .svg_select_points, .svg_select_points_rot { opacity: 0; visibility: hidden; } .svg_select_points_l, .svg_select_points_r { cursor: ew-resize; opacity: 1; visibility: visible; fill: #888; } .apexcharts-canvas.zoomable .hovering-zoom { cursor: crosshair } .apexcharts-canvas.zoomable .hovering-pan { cursor: move } .apexcharts-xaxis, .apexcharts-yaxis { pointer-events: none; } .apexcharts-zoom-icon, .apexcharts-zoom-in-icon, .apexcharts-zoom-out-icon, .apexcharts-reset-zoom-icon, .apexcharts-pan-icon, .apexcharts-selection-icon, .apexcharts-menu-icon, .apexcharts-toolbar-custom-icon { cursor: pointer; width: 20px; height: 20px; line-height: 24px; color: #6E8192; text-align: center; } .apexcharts-zoom-icon svg, .apexcharts-zoom-in-icon svg, .apexcharts-zoom-out-icon svg, .apexcharts-reset-zoom-icon svg, .apexcharts-menu-icon svg { fill: #6E8192; } .apexcharts-selection-icon svg { fill: #444; transform: scale(0.76) } .dark .apexcharts-zoom-icon svg, .dark .apexcharts-zoom-in-icon svg, .dark .apexcharts-zoom-out-icon svg, .dark .apexcharts-reset-zoom-icon svg, .dark .apexcharts-pan-icon svg, .dark .apexcharts-selection-icon svg, .dark .apexcharts-menu-icon svg, .dark .apexcharts-toolbar-custom-icon svg{ fill: #f3f4f5; } .apexcharts-canvas .apexcharts-zoom-icon.selected svg, .apexcharts-canvas .apexcharts-selection-icon.selected svg, .apexcharts-canvas .apexcharts-reset-zoom-icon.selected svg { fill: #008FFB; } .light .apexcharts-selection-icon:not(.selected):hover svg, .light .apexcharts-zoom-icon:not(.selected):hover svg, .light .apexcharts-zoom-in-icon:hover svg, .light .apexcharts-zoom-out-icon:hover svg, .light .apexcharts-reset-zoom-icon:hover svg, .light .apexcharts-menu-icon:hover svg { fill: #333; } .apexcharts-selection-icon, .apexcharts-menu-icon { position: relative; } .apexcharts-reset-zoom-icon { margin-left: 5px; } .apexcharts-zoom-icon, .apexcharts-reset-zoom-icon, .apexcharts-menu-icon { transform: scale(0.85); } .apexcharts-zoom-in-icon, .apexcharts-zoom-out-icon { transform: scale(0.7) } .apexcharts-zoom-out-icon { margin-right: 3px; } .apexcharts-pan-icon { transform: scale(0.62); position: relative; left: 1px; top: 0px; } .apexcharts-pan-icon svg { fill: #fff; stroke: #6E8192; stroke-width: 2; } .apexcharts-pan-icon.selected svg { stroke: #008FFB; } .apexcharts-pan-icon:not(.selected):hover svg { stroke: #333; } .apexcharts-toolbar { position: absolute; z-index: 11; top: 0px; right: 3px; max-width: 176px; text-align: right; border-radius: 3px; padding: 0px 6px 2px 6px; display: flex; justify-content: space-between; align-items: center; } .apexcharts-toolbar svg { pointer-events: none; } .apexcharts-menu { background: #fff; position: absolute; top: 100%; border: 1px solid #ddd; border-radius: 3px; padding: 3px; right: 10px; opacity: 0; min-width: 110px; transition: 0.15s ease all; pointer-events: none; } .apexcharts-menu.open { opacity: 1; pointer-events: all; transition: 0.15s ease all; } .apexcharts-menu-item { padding: 6px 7px; font-size: 12px; cursor: pointer; } .light .apexcharts-menu-item:hover { background: #eee; } .dark .apexcharts-menu { background: rgba(0, 0, 0, 0.7); color: #fff; } @media screen and (min-width: 768px) { .apexcharts-toolbar { /*opacity: 0;*/ } .apexcharts-canvas:hover .apexcharts-toolbar { opacity: 1; } } .apexcharts-datalabel.hidden { opacity: 0; } .apexcharts-pie-label, .apexcharts-datalabel, .apexcharts-datalabel-label, .apexcharts-datalabel-value { cursor: default; pointer-events: none; } .apexcharts-pie-label-delay { opacity: 0; animation-name: opaque; animation-duration: 0.3s; animation-fill-mode: forwards; animation-timing-function: ease; } .apexcharts-canvas .hidden { opacity: 0; } .apexcharts-hide .apexcharts-series-points { opacity: 0; } .apexcharts-area-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events, .apexcharts-line-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events, .apexcharts-radar-series path, .apexcharts-radar-series polygon { pointer-events: none; } /* markers */ .apexcharts-marker { transition: 0.15s ease all; } @keyframes opaque { 0% { opacity: 0; } 100% { opacity: 1; } } ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/charts/apexcharts.js ================================================ /*! * ApexCharts v3.17.1 * (c) 2018-2020 Juned Chhipa * Released under the MIT License. */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = global || self, global.ApexCharts = factory()); }(this, (function () { 'use strict'; function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function (obj) { return typeof obj; }; } else { _typeof = function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } function _objectSpread2(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); } function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; return arr2; } } function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); } /* ** Generic functions which are not dependent on ApexCharts */ var Utils = /*#__PURE__*/function () { function Utils() { _classCallCheck(this, Utils); } _createClass(Utils, [{ key: "shadeRGBColor", value: function shadeRGBColor(percent, color) { var f = color.split(','), t = percent < 0 ? 0 : 255, p = percent < 0 ? percent * -1 : percent, R = parseInt(f[0].slice(4), 10), G = parseInt(f[1], 10), B = parseInt(f[2], 10); return 'rgb(' + (Math.round((t - R) * p) + R) + ',' + (Math.round((t - G) * p) + G) + ',' + (Math.round((t - B) * p) + B) + ')'; } }, { key: "shadeHexColor", value: function shadeHexColor(percent, color) { var f = parseInt(color.slice(1), 16), t = percent < 0 ? 0 : 255, p = percent < 0 ? percent * -1 : percent, R = f >> 16, G = f >> 8 & 0x00ff, B = f & 0x0000ff; return '#' + (0x1000000 + (Math.round((t - R) * p) + R) * 0x10000 + (Math.round((t - G) * p) + G) * 0x100 + (Math.round((t - B) * p) + B)).toString(16).slice(1); } // beautiful color shading blending code // http://stackoverflow.com/questions/5560248/programmatically-lighten-or-darken-a-hex-color-or-rgb-and-blend-colors }, { key: "shadeColor", value: function shadeColor(p, color) { if (Utils.isColorHex(color)) { return this.shadeHexColor(p, color); } else { return this.shadeRGBColor(p, color); } } }], [{ key: "bind", value: function bind(fn, me) { return function () { return fn.apply(me, arguments); }; } }, { key: "isObject", value: function isObject(item) { return item && _typeof(item) === 'object' && !Array.isArray(item) && item != null; } }, { key: "listToArray", value: function listToArray(list) { var i, array = []; for (i = 0; i < list.length; i++) { array[i] = list[i]; } return array; } // to extend defaults with user options // credit: http://stackoverflow.com/questions/27936772/deep-object-merging-in-es6-es7#answer-34749873 }, { key: "extend", value: function extend(target, source) { var _this = this; if (typeof Object.assign !== 'function') { (function () { Object.assign = function (target) { if (target === undefined || target === null) { throw new TypeError('Cannot convert undefined or null to object'); } var output = Object(target); for (var index = 1; index < arguments.length; index++) { var _source = arguments[index]; if (_source !== undefined && _source !== null) { for (var nextKey in _source) { if (_source.hasOwnProperty(nextKey)) { output[nextKey] = _source[nextKey]; } } } } return output; }; })(); } var output = Object.assign({}, target); if (this.isObject(target) && this.isObject(source)) { Object.keys(source).forEach(function (key) { if (_this.isObject(source[key])) { if (!(key in target)) { Object.assign(output, _defineProperty({}, key, source[key])); } else { output[key] = _this.extend(target[key], source[key]); } } else { Object.assign(output, _defineProperty({}, key, source[key])); } }); } return output; } }, { key: "extendArray", value: function extendArray(arrToExtend, resultArr) { var extendedArr = []; arrToExtend.map(function (item) { extendedArr.push(Utils.extend(resultArr, item)); }); arrToExtend = extendedArr; return arrToExtend; } // If month counter exceeds 12, it starts again from 1 }, { key: "monthMod", value: function monthMod(month) { return month % 12; } }, { key: "clone", value: function clone(source) { if (Object.prototype.toString.call(source) === '[object Array]') { var cloneResult = []; for (var i = 0; i < source.length; i++) { cloneResult[i] = this.clone(source[i]); } return cloneResult; } else if (_typeof(source) === 'object') { var _cloneResult = {}; for (var prop in source) { if (source.hasOwnProperty(prop)) { _cloneResult[prop] = this.clone(source[prop]); } } return _cloneResult; } else { return source; } } }, { key: "log10", value: function log10(x) { return Math.log(x) / Math.LN10; } }, { key: "roundToBase10", value: function roundToBase10(x) { return Math.pow(10, Math.floor(Math.log10(x))); } }, { key: "roundToBase", value: function roundToBase(x, base) { return Math.pow(base, Math.floor(Math.log(x) / Math.log(base))); } }, { key: "parseNumber", value: function parseNumber(val) { if (val === null) return val; return parseFloat(val); } }, { key: "randomId", value: function randomId() { return (new Date() % 9e6).toString(16); } }, { key: "noExponents", value: function noExponents(val) { var data = String(val).split(/[eE]/); if (data.length === 1) return data[0]; var z = '', sign = val < 0 ? '-' : '', str = data[0].replace('.', ''), mag = Number(data[1]) + 1; if (mag < 0) { z = sign + '0.'; while (mag++) { z += '0'; } return z + str.replace(/^-/, ''); } mag -= str.length; while (mag--) { z += '0'; } return str + z; } }, { key: "getDimensions", value: function getDimensions(el) { var computedStyle = getComputedStyle(el); var ret = []; var elementHeight = el.clientHeight; var elementWidth = el.clientWidth; elementHeight -= parseFloat(computedStyle.paddingTop) + parseFloat(computedStyle.paddingBottom); elementWidth -= parseFloat(computedStyle.paddingLeft) + parseFloat(computedStyle.paddingRight); ret.push(elementWidth); ret.push(elementHeight); return ret; } }, { key: "getBoundingClientRect", value: function getBoundingClientRect(element) { var rect = element.getBoundingClientRect(); return { top: rect.top, right: rect.right, bottom: rect.bottom, left: rect.left, width: element.clientWidth, height: element.clientHeight, x: rect.left, y: rect.top }; } }, { key: "getLargestStringFromArr", value: function getLargestStringFromArr(arr) { return arr.reduce(function (a, b) { if (Array.isArray(b)) { b = b.reduce(function (aa, bb) { return aa.length > bb.length ? aa : bb; }); } return a.length > b.length ? a : b; }, 0); } // http://stackoverflow.com/questions/5623838/rgb-to-hex-and-hex-to-rgb#answer-12342275 }, { key: "hexToRgba", value: function hexToRgba() { var hex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '#999999'; var opacity = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0.6; if (hex.substring(0, 1) !== '#') { hex = '#999999'; } var h = hex.replace('#', ''); h = h.match(new RegExp('(.{' + h.length / 3 + '})', 'g')); for (var i = 0; i < h.length; i++) { h[i] = parseInt(h[i].length === 1 ? h[i] + h[i] : h[i], 16); } if (typeof opacity !== 'undefined') h.push(opacity); return 'rgba(' + h.join(',') + ')'; } }, { key: "getOpacityFromRGBA", value: function getOpacityFromRGBA(rgba) { return parseFloat(rgba.replace(/^.*,(.+)\)/, '$1')); } }, { key: "rgb2hex", value: function rgb2hex(rgb) { rgb = rgb.match(/^rgba?[\s+]?\([\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?/i); return rgb && rgb.length === 4 ? '#' + ('0' + parseInt(rgb[1], 10).toString(16)).slice(-2) + ('0' + parseInt(rgb[2], 10).toString(16)).slice(-2) + ('0' + parseInt(rgb[3], 10).toString(16)).slice(-2) : ''; } }, { key: "isColorHex", value: function isColorHex(color) { return /(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)|(^#[0-9A-F]{8}$)/i.test(color); } }, { key: "polarToCartesian", value: function polarToCartesian(centerX, centerY, radius, angleInDegrees) { var angleInRadians = (angleInDegrees - 90) * Math.PI / 180.0; return { x: centerX + radius * Math.cos(angleInRadians), y: centerY + radius * Math.sin(angleInRadians) }; } }, { key: "escapeString", value: function escapeString(str) { var escapeWith = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'x'; var newStr = str.toString().slice(); newStr = newStr.replace(/[` ~!@#$%^&*()_|+\-=?;:'",.<>{}[\]\\/]/gi, escapeWith); return newStr; } }, { key: "negToZero", value: function negToZero(val) { return val < 0 ? 0 : val; } }, { key: "moveIndexInArray", value: function moveIndexInArray(arr, old_index, new_index) { if (new_index >= arr.length) { var k = new_index - arr.length + 1; while (k--) { arr.push(undefined); } } arr.splice(new_index, 0, arr.splice(old_index, 1)[0]); return arr; } }, { key: "extractNumber", value: function extractNumber(s) { return parseFloat(s.replace(/[^\d.]*/g, '')); } }, { key: "findAncestor", value: function findAncestor(el, cls) { while ((el = el.parentElement) && !el.classList.contains(cls)) { } return el; } }, { key: "setELstyles", value: function setELstyles(el, styles) { for (var key in styles) { if (styles.hasOwnProperty(key)) { el.style.key = styles[key]; } } } }, { key: "isNumber", value: function isNumber(value) { return !isNaN(value) && parseFloat(Number(value)) === value && !isNaN(parseInt(value, 10)); } }, { key: "isFloat", value: function isFloat(n) { return Number(n) === n && n % 1 !== 0; } }, { key: "isSafari", value: function isSafari() { return /^((?!chrome|android).)*safari/i.test(navigator.userAgent); } }, { key: "isFirefox", value: function isFirefox() { return navigator.userAgent.toLowerCase().indexOf('firefox') > -1; } }, { key: "isIE11", value: function isIE11() { if (window.navigator.userAgent.indexOf('MSIE') !== -1 || window.navigator.appVersion.indexOf('Trident/') > -1) { return true; } } }, { key: "isIE", value: function isIE() { var ua = window.navigator.userAgent; var msie = ua.indexOf('MSIE '); if (msie > 0) { // IE 10 or older => return version number return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10); } var trident = ua.indexOf('Trident/'); if (trident > 0) { // IE 11 => return version number var rv = ua.indexOf('rv:'); return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10); } var edge = ua.indexOf('Edge/'); if (edge > 0) { // Edge (IE 12+) => return version number return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10); } // other browser return false; } }]); return Utils; }(); /** * ApexCharts Filters Class for setting hover/active states on the paths. * * @module Formatters **/ var Filters = /*#__PURE__*/function () { function Filters(ctx) { _classCallCheck(this, Filters); this.ctx = ctx; this.w = ctx.w; } // create a re-usable filter which can be appended other filter effects and applied to multiple elements _createClass(Filters, [{ key: "getDefaultFilter", value: function getDefaultFilter(el, i) { var w = this.w; el.unfilter(true); var filter = new window.SVG.Filter(); filter.size('120%', '180%', '-5%', '-40%'); if (w.config.states.normal.filter !== 'none') { this.applyFilter(el, i, w.config.states.normal.filter.type, w.config.states.normal.filter.value); } else { if (w.config.chart.dropShadow.enabled) { this.dropShadow(el, w.config.chart.dropShadow, i); } } } }, { key: "addNormalFilter", value: function addNormalFilter(el, i) { var w = this.w; // revert shadow if it was there // but, ignore marker as marker don't have dropshadow yet if (w.config.chart.dropShadow.enabled && !el.node.classList.contains('apexcharts-marker')) { this.dropShadow(el, w.config.chart.dropShadow, i); } } // appends dropShadow to the filter object which can be chained with other filter effects }, { key: "addLightenFilter", value: function addLightenFilter(el, i, attrs) { var _this = this; var w = this.w; var intensity = attrs.intensity; if (Utils.isFirefox()) { return; } el.unfilter(true); var filter = new window.SVG.Filter(); el.filter(function (add) { var shadowAttr = w.config.chart.dropShadow; if (shadowAttr.enabled) { filter = _this.addShadow(add, i, shadowAttr); } else { filter = add; } filter.componentTransfer({ rgb: { type: 'linear', slope: 1.5, intercept: intensity } }); }); el.filterer.node.setAttribute('filterUnits', 'userSpaceOnUse'); this._scaleFilterSize(el.filterer.node); } // appends dropShadow to the filter object which can be chained with other filter effects }, { key: "addDarkenFilter", value: function addDarkenFilter(el, i, attrs) { var _this2 = this; var w = this.w; var intensity = attrs.intensity; if (Utils.isFirefox()) { return; } el.unfilter(true); var filter = new window.SVG.Filter(); el.filter(function (add) { var shadowAttr = w.config.chart.dropShadow; if (shadowAttr.enabled) { filter = _this2.addShadow(add, i, shadowAttr); } else { filter = add; } filter.componentTransfer({ rgb: { type: 'linear', slope: intensity } }); }); el.filterer.node.setAttribute('filterUnits', 'userSpaceOnUse'); this._scaleFilterSize(el.filterer.node); } }, { key: "applyFilter", value: function applyFilter(el, i, filter) { var intensity = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0.5; switch (filter) { case 'none': { this.addNormalFilter(el, i); break; } case 'lighten': { this.addLightenFilter(el, i, { intensity: intensity }); break; } case 'darken': { this.addDarkenFilter(el, i, { intensity: intensity }); break; } } } // appends dropShadow to the filter object which can be chained with other filter effects }, { key: "addShadow", value: function addShadow(add, i, attrs) { var blur = attrs.blur, top = attrs.top, left = attrs.left, color = attrs.color, opacity = attrs.opacity; var shadowBlur = add.flood(Array.isArray(color) ? color[i] : color, opacity).composite(add.sourceAlpha, 'in').offset(left, top).gaussianBlur(blur).merge(add.source); return add.blend(add.source, shadowBlur); } // directly adds dropShadow to the element and returns the same element. // the only way it is different from the addShadow() function is that addShadow is chainable to other filters, while this function discards all filters and add dropShadow }, { key: "dropShadow", value: function dropShadow(el, attrs) { var i = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; var top = attrs.top, left = attrs.left, blur = attrs.blur, color = attrs.color, opacity = attrs.opacity, noUserSpaceOnUse = attrs.noUserSpaceOnUse; var w = this.w; el.unfilter(true); if (Utils.isIE() && w.config.chart.type === 'radialBar') { // in radialbar charts, dropshadow is clipping actual drawing in IE return el; } color = Array.isArray(color) ? color[i] : color; el.filter(function (add) { var shadowBlur = null; if (Utils.isSafari() || Utils.isFirefox() || Utils.isIE()) { // safari/firefox has some alternative way to use this filter shadowBlur = add.flood(color, opacity).composite(add.sourceAlpha, 'in').offset(left, top).gaussianBlur(blur); } else { shadowBlur = add.flood(color, opacity).composite(add.sourceAlpha, 'in').offset(left, top).gaussianBlur(blur).merge(add.source); } add.blend(add.source, shadowBlur); }); if (!noUserSpaceOnUse) { el.filterer.node.setAttribute('filterUnits', 'userSpaceOnUse'); } this._scaleFilterSize(el.filterer.node); return el; } }, { key: "setSelectionFilter", value: function setSelectionFilter(el, realIndex, dataPointIndex) { var w = this.w; if (typeof w.globals.selectedDataPoints[realIndex] !== 'undefined') { if (w.globals.selectedDataPoints[realIndex].indexOf(dataPointIndex) > -1) { el.node.setAttribute('selected', true); var activeFilter = w.config.states.active.filter; if (activeFilter !== 'none') { this.applyFilter(el, realIndex, activeFilter.type, activeFilter.value); } } } } }, { key: "_scaleFilterSize", value: function _scaleFilterSize(el) { var setAttributes = function setAttributes(attrs) { for (var key in attrs) { if (attrs.hasOwnProperty(key)) { el.setAttribute(key, attrs[key]); } } }; setAttributes({ width: '200%', height: '200%', x: '-50%', y: '-50%' }); } }]); return Filters; }(); /** * ApexCharts Animation Class. * * @module Animations **/ var Animations = /*#__PURE__*/function () { function Animations(ctx) { _classCallCheck(this, Animations); this.ctx = ctx; this.w = ctx.w; this.setEasingFunctions(); } _createClass(Animations, [{ key: "setEasingFunctions", value: function setEasingFunctions() { var easing; if (this.w.globals.easing) return; var userDefinedEasing = this.w.config.chart.animations.easing; switch (userDefinedEasing) { case 'linear': { easing = '-'; break; } case 'easein': { easing = '<'; break; } case 'easeout': { easing = '>'; break; } case 'easeinout': { easing = '<>'; break; } case 'swing': { easing = function easing(pos) { var s = 1.70158; var ret = (pos -= 1) * pos * ((s + 1) * pos + s) + 1; return ret; }; break; } case 'bounce': { easing = function easing(pos) { var ret = ''; if (pos < 1 / 2.75) { ret = 7.5625 * pos * pos; } else if (pos < 2 / 2.75) { ret = 7.5625 * (pos -= 1.5 / 2.75) * pos + 0.75; } else if (pos < 2.5 / 2.75) { ret = 7.5625 * (pos -= 2.25 / 2.75) * pos + 0.9375; } else { ret = 7.5625 * (pos -= 2.625 / 2.75) * pos + 0.984375; } return ret; }; break; } case 'elastic': { easing = function easing(pos) { if (pos === !!pos) return pos; return Math.pow(2, -10 * pos) * Math.sin((pos - 0.075) * (2 * Math.PI) / 0.3) + 1; }; break; } default: { easing = '<>'; } } this.w.globals.easing = easing; } }, { key: "animateLine", value: function animateLine(el, from, to, speed) { el.attr(from).animate(speed).attr(to); } /* ** Animate radius of a circle element */ }, { key: "animateCircleRadius", value: function animateCircleRadius(el, from, to, speed, easing, cb) { if (!from) from = 0; el.attr({ r: from }).animate(speed, easing).attr({ r: to }).afterAll(function () { cb(); }); } /* ** Animate radius and position of a circle element */ }, { key: "animateCircle", value: function animateCircle(el, from, to, speed, easing) { el.attr({ r: from.r, cx: from.cx, cy: from.cy }).animate(speed, easing).attr({ r: to.r, cx: to.cx, cy: to.cy }); } /* ** Animate rect properties */ }, { key: "animateRect", value: function animateRect(el, from, to, speed, fn) { el.attr(from).animate(speed).attr(to).afterAll(function () { return fn(); }); } }, { key: "animatePathsGradually", value: function animatePathsGradually(params) { var el = params.el, realIndex = params.realIndex, j = params.j, fill = params.fill, pathFrom = params.pathFrom, pathTo = params.pathTo, speed = params.speed, delay = params.delay; var me = this; var w = this.w; var delayFactor = 0; if (w.config.chart.animations.animateGradually.enabled) { delayFactor = w.config.chart.animations.animateGradually.delay; } if (w.config.chart.animations.dynamicAnimation.enabled && w.globals.dataChanged && w.config.chart.type !== 'bar') { // disabled due to this bug - https://github.com/apexcharts/vue-apexcharts/issues/75 delayFactor = 0; } me.morphSVG(el, realIndex, j, w.config.chart.type === 'line' && !w.globals.comboCharts ? 'stroke' : fill, pathFrom, pathTo, speed, delay * delayFactor); } }, { key: "showDelayedElements", value: function showDelayedElements() { this.w.globals.delayedElements.forEach(function (d) { var ele = d.el; ele.classList.remove('apexcharts-element-hidden'); }); } }, { key: "animationCompleted", value: function animationCompleted(el) { var w = this.w; if (w.globals.animationEnded) return; w.globals.animationEnded = true; this.showDelayedElements(); if (typeof w.config.chart.events.animationEnd === 'function') { w.config.chart.events.animationEnd(this.ctx, { el: el, w: w }); } } // SVG.js animation for morphing one path to another }, { key: "morphSVG", value: function morphSVG(el, realIndex, j, fill, pathFrom, pathTo, speed, delay) { var _this = this; var w = this.w; if (!pathFrom) { pathFrom = el.attr('pathFrom'); } if (!pathTo) { pathTo = el.attr('pathTo'); } var disableAnimationForCorrupPath = function disableAnimationForCorrupPath(path) { if (w.config.chart.type === 'radar') { // radar chart drops the path to bottom and hence a corrup path looks ugly // therefore, disable animation for such a case speed = 1; } return "M 0 ".concat(w.globals.gridHeight); }; if (!pathFrom || pathFrom.indexOf('undefined') > -1 || pathFrom.indexOf('NaN') > -1) { pathFrom = disableAnimationForCorrupPath(); } if (pathTo.indexOf('undefined') > -1 || pathTo.indexOf('NaN') > -1) { pathTo = disableAnimationForCorrupPath(); } if (!w.globals.shouldAnimate) { speed = 1; } el.plot(pathFrom).animate(1, w.globals.easing, delay).plot(pathFrom).animate(speed, w.globals.easing, delay).plot(pathTo).afterAll(function () { // a flag to indicate that the original mount function can return true now as animation finished here if (Utils.isNumber(j)) { if (j === w.globals.series[w.globals.maxValsInArrayIndex].length - 2 && w.globals.shouldAnimate) { _this.animationCompleted(el); } } else if (fill !== 'none' && w.globals.shouldAnimate) { if (!w.globals.comboCharts && realIndex === w.globals.series.length - 1 || w.globals.comboCharts) { _this.animationCompleted(el); } } _this.showDelayedElements(); }); } }]); return Animations; }(); /** * ApexCharts Graphics Class for all drawing operations. * * @module Graphics **/ var Graphics = /*#__PURE__*/function () { function Graphics(ctx) { _classCallCheck(this, Graphics); this.ctx = ctx; this.w = ctx.w; } _createClass(Graphics, [{ key: "drawLine", value: function drawLine(x1, y1, x2, y2) { var lineColor = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : '#a8a8a8'; var dashArray = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0; var strokeWidth = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : null; var w = this.w; var line = w.globals.dom.Paper.line().attr({ x1: x1, y1: y1, x2: x2, y2: y2, stroke: lineColor, 'stroke-dasharray': dashArray, 'stroke-width': strokeWidth }); return line; } }, { key: "drawRect", value: function drawRect() { var x1 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; var y1 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; var x2 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; var y2 = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0; var radius = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0; var color = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : '#fefefe'; var opacity = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 1; var strokeWidth = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : null; var strokeColor = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : null; var strokeDashArray = arguments.length > 9 && arguments[9] !== undefined ? arguments[9] : 0; var w = this.w; var rect = w.globals.dom.Paper.rect(); rect.attr({ x: x1, y: y1, width: x2 > 0 ? x2 : 0, height: y2 > 0 ? y2 : 0, rx: radius, ry: radius, opacity: opacity, 'stroke-width': strokeWidth !== null ? strokeWidth : 0, stroke: strokeColor !== null ? strokeColor : 'none', 'stroke-dasharray': strokeDashArray }); // fix apexcharts.js#1410 rect.node.setAttribute('fill', color); return rect; } }, { key: "drawPolygon", value: function drawPolygon(polygonString) { var stroke = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '#e1e1e1'; var fill = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'none'; var w = this.w; var polygon = w.globals.dom.Paper.polygon(polygonString).attr({ fill: fill, stroke: stroke }); return polygon; } }, { key: "drawCircle", value: function drawCircle(radius) { var attrs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; var w = this.w; var c = w.globals.dom.Paper.circle(radius * 2); if (attrs !== null) { c.attr(attrs); } return c; } }, { key: "drawPath", value: function drawPath(_ref) { var _ref$d = _ref.d, d = _ref$d === void 0 ? '' : _ref$d, _ref$stroke = _ref.stroke, stroke = _ref$stroke === void 0 ? '#a8a8a8' : _ref$stroke, _ref$strokeWidth = _ref.strokeWidth, strokeWidth = _ref$strokeWidth === void 0 ? 1 : _ref$strokeWidth, fill = _ref.fill, _ref$fillOpacity = _ref.fillOpacity, fillOpacity = _ref$fillOpacity === void 0 ? 1 : _ref$fillOpacity, _ref$strokeOpacity = _ref.strokeOpacity, strokeOpacity = _ref$strokeOpacity === void 0 ? 1 : _ref$strokeOpacity, classes = _ref.classes, _ref$strokeLinecap = _ref.strokeLinecap, strokeLinecap = _ref$strokeLinecap === void 0 ? null : _ref$strokeLinecap, _ref$strokeDashArray = _ref.strokeDashArray, strokeDashArray = _ref$strokeDashArray === void 0 ? 0 : _ref$strokeDashArray; var w = this.w; if (strokeLinecap === null) { strokeLinecap = w.config.stroke.lineCap; } if (d.indexOf('undefined') > -1 || d.indexOf('NaN') > -1) { d = "M 0 ".concat(w.globals.gridHeight); } var p = w.globals.dom.Paper.path(d).attr({ fill: fill, 'fill-opacity': fillOpacity, stroke: stroke, 'stroke-opacity': strokeOpacity, 'stroke-linecap': strokeLinecap, 'stroke-width': strokeWidth, 'stroke-dasharray': strokeDashArray, class: classes }); return p; } }, { key: "group", value: function group() { var attrs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; var w = this.w; var g = w.globals.dom.Paper.group(); if (attrs !== null) { g.attr(attrs); } return g; } }, { key: "move", value: function move(x, y) { var move = ['M', x, y].join(' '); return move; } }, { key: "line", value: function line(x, y) { var hORv = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; var line = null; if (hORv === null) { line = ['L', x, y].join(' '); } else if (hORv === 'H') { line = ['H', x].join(' '); } else if (hORv === 'V') { line = ['V', y].join(' '); } return line; } }, { key: "curve", value: function curve(x1, y1, x2, y2, x, y) { var curve = ['C', x1, y1, x2, y2, x, y].join(' '); return curve; } }, { key: "quadraticCurve", value: function quadraticCurve(x1, y1, x, y) { var curve = ['Q', x1, y1, x, y].join(' '); return curve; } }, { key: "arc", value: function arc(rx, ry, axisRotation, largeArcFlag, sweepFlag, x, y) { var relative = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : false; var coord = 'A'; if (relative) coord = 'a'; var arc = [coord, rx, ry, axisRotation, largeArcFlag, sweepFlag, x, y].join(' '); return arc; } /** * @memberof Graphics * @param {object} * i = series's index * realIndex = realIndex is series's actual index when it was drawn time. After several redraws, the iterating "i" may change in loops, but realIndex doesn't * pathFrom = existing pathFrom to animateTo * pathTo = new Path to which d attr will be animated from pathFrom to pathTo * stroke = line Color * strokeWidth = width of path Line * fill = it can be gradient, single color, pattern or image * animationDelay = how much to delay when starting animation (in milliseconds) * dataChangeSpeed = for dynamic animations, when data changes * className = class attribute to add * @return {object} svg.js path object **/ }, { key: "renderPaths", value: function renderPaths(_ref2) { var j = _ref2.j, realIndex = _ref2.realIndex, pathFrom = _ref2.pathFrom, pathTo = _ref2.pathTo, stroke = _ref2.stroke, strokeWidth = _ref2.strokeWidth, strokeLinecap = _ref2.strokeLinecap, fill = _ref2.fill, animationDelay = _ref2.animationDelay, initialSpeed = _ref2.initialSpeed, dataChangeSpeed = _ref2.dataChangeSpeed, className = _ref2.className, _ref2$shouldClipToGri = _ref2.shouldClipToGrid, shouldClipToGrid = _ref2$shouldClipToGri === void 0 ? true : _ref2$shouldClipToGri, _ref2$bindEventsOnPat = _ref2.bindEventsOnPaths, bindEventsOnPaths = _ref2$bindEventsOnPat === void 0 ? true : _ref2$bindEventsOnPat, _ref2$drawShadow = _ref2.drawShadow, drawShadow = _ref2$drawShadow === void 0 ? true : _ref2$drawShadow; var w = this.w; var filters = new Filters(this.ctx); var anim = new Animations(this.ctx); var initialAnim = this.w.config.chart.animations.enabled; var dynamicAnim = initialAnim && this.w.config.chart.animations.dynamicAnimation.enabled; var d; var shouldAnimate = !!(initialAnim && !w.globals.resized || dynamicAnim && w.globals.dataChanged && w.globals.shouldAnimate); if (shouldAnimate) { d = pathFrom; } else { d = pathTo; w.globals.animationEnded = true; } var strokeDashArrayOpt = w.config.stroke.dashArray; var strokeDashArray = 0; if (Array.isArray(strokeDashArrayOpt)) { strokeDashArray = strokeDashArrayOpt[realIndex]; } else { strokeDashArray = w.config.stroke.dashArray; } var el = this.drawPath({ d: d, stroke: stroke, strokeWidth: strokeWidth, fill: fill, fillOpacity: 1, classes: className, strokeLinecap: strokeLinecap, strokeDashArray: strokeDashArray }); el.attr('index', realIndex); if (shouldClipToGrid) { el.attr({ 'clip-path': "url(#gridRectMask".concat(w.globals.cuid, ")") }); } // const defaultFilter = el.filterer if (w.config.states.normal.filter.type !== 'none') { filters.getDefaultFilter(el, realIndex); } else { if (w.config.chart.dropShadow.enabled && drawShadow) { if (!w.config.chart.dropShadow.enabledOnSeries || w.config.chart.dropShadow.enabledOnSeries && w.config.chart.dropShadow.enabledOnSeries.indexOf(realIndex) !== -1) { var shadow = w.config.chart.dropShadow; filters.dropShadow(el, shadow, realIndex); } } } if (bindEventsOnPaths) { el.node.addEventListener('mouseenter', this.pathMouseEnter.bind(this, el)); el.node.addEventListener('mouseleave', this.pathMouseLeave.bind(this, el)); el.node.addEventListener('mousedown', this.pathMouseDown.bind(this, el)); } el.attr({ pathTo: pathTo, pathFrom: pathFrom }); var defaultAnimateOpts = { el: el, j: j, realIndex: realIndex, pathFrom: pathFrom, pathTo: pathTo, fill: fill, strokeWidth: strokeWidth, delay: animationDelay }; if (initialAnim && !w.globals.resized && !w.globals.dataChanged) { anim.animatePathsGradually(_objectSpread2({}, defaultAnimateOpts, { speed: initialSpeed })); } else { if (w.globals.resized || !w.globals.dataChanged) { anim.showDelayedElements(); } } if (w.globals.dataChanged && dynamicAnim && shouldAnimate) { anim.animatePathsGradually(_objectSpread2({}, defaultAnimateOpts, { speed: dataChangeSpeed })); } return el; } }, { key: "drawPattern", value: function drawPattern(style, width, height) { var stroke = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '#a8a8a8'; var strokeWidth = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0; var w = this.w; var p = w.globals.dom.Paper.pattern(width, height, function (add) { if (style === 'horizontalLines') { add.line(0, 0, height, 0).stroke({ color: stroke, width: strokeWidth + 1 }); } else if (style === 'verticalLines') { add.line(0, 0, 0, width).stroke({ color: stroke, width: strokeWidth + 1 }); } else if (style === 'slantedLines') { add.line(0, 0, width, height).stroke({ color: stroke, width: strokeWidth }); } else if (style === 'squares') { add.rect(width, height).fill('none').stroke({ color: stroke, width: strokeWidth }); } else if (style === 'circles') { add.circle(width).fill('none').stroke({ color: stroke, width: strokeWidth }); } }); return p; } }, { key: "drawGradient", value: function drawGradient(style, gfrom, gto, opacityFrom, opacityTo) { var size = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : null; var stops = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : null; var colorStops = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : null; var i = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : 0; var w = this.w; var g; if (gfrom.length < 9 && gfrom.indexOf('#') === 0) { // if the hex contains alpha and is of 9 digit, skip the opacity gfrom = Utils.hexToRgba(gfrom, opacityFrom); } if (gto.length < 9 && gto.indexOf('#') === 0) { gto = Utils.hexToRgba(gto, opacityTo); } var stop1 = 0; var stop2 = 1; var stop3 = 1; var stop4 = null; if (stops !== null) { stop1 = typeof stops[0] !== 'undefined' ? stops[0] / 100 : 0; stop2 = typeof stops[1] !== 'undefined' ? stops[1] / 100 : 1; stop3 = typeof stops[2] !== 'undefined' ? stops[2] / 100 : 1; stop4 = typeof stops[3] !== 'undefined' ? stops[3] / 100 : null; } var radial = !!(w.config.chart.type === 'donut' || w.config.chart.type === 'pie' || w.config.chart.type === 'bubble'); if (colorStops === null || colorStops.length === 0) { g = w.globals.dom.Paper.gradient(radial ? 'radial' : 'linear', function (stop) { stop.at(stop1, gfrom, opacityFrom); stop.at(stop2, gto, opacityTo); stop.at(stop3, gto, opacityTo); if (stop4 !== null) { stop.at(stop4, gfrom, opacityFrom); } }); } else { g = w.globals.dom.Paper.gradient(radial ? 'radial' : 'linear', function (stop) { var gradientStops = Array.isArray(colorStops[i]) ? colorStops[i] : colorStops; gradientStops.forEach(function (s) { stop.at(s.offset / 100, s.color, s.opacity); }); }); } if (!radial) { if (style === 'vertical') { g.from(0, 0).to(0, 1); } else if (style === 'diagonal') { g.from(0, 0).to(1, 1); } else if (style === 'horizontal') { g.from(0, 1).to(1, 1); } else if (style === 'diagonal2') { g.from(1, 0).to(0, 1); } } else { var offx = w.globals.gridWidth / 2; var offy = w.globals.gridHeight / 2; if (w.config.chart.type !== 'bubble') { g.attr({ gradientUnits: 'userSpaceOnUse', cx: offx, cy: offy, r: size }); } else { g.attr({ cx: 0.5, cy: 0.5, r: 0.8, fx: 0.2, fy: 0.2 }); } } return g; } }, { key: "drawText", value: function drawText(_ref3) { var x = _ref3.x, y = _ref3.y, text = _ref3.text, textAnchor = _ref3.textAnchor, fontSize = _ref3.fontSize, fontFamily = _ref3.fontFamily, fontWeight = _ref3.fontWeight, foreColor = _ref3.foreColor, opacity = _ref3.opacity, _ref3$cssClass = _ref3.cssClass, cssClass = _ref3$cssClass === void 0 ? '' : _ref3$cssClass, _ref3$isPlainText = _ref3.isPlainText, isPlainText = _ref3$isPlainText === void 0 ? true : _ref3$isPlainText; var w = this.w; if (typeof text === 'undefined') text = ''; if (!textAnchor) { textAnchor = 'start'; } if (!foreColor || !foreColor.length) { foreColor = w.config.chart.foreColor; } fontFamily = fontFamily || w.config.chart.fontFamily; fontWeight = fontWeight || 'regular'; var elText; if (Array.isArray(text)) { elText = w.globals.dom.Paper.text(function (add) { for (var i = 0; i < text.length; i++) { i === 0 ? add.tspan(text[i]) : add.tspan(text[i]).newLine(); } }); } else { elText = isPlainText ? w.globals.dom.Paper.plain(text) : w.globals.dom.Paper.text(function (add) { return add.tspan(text); }); } elText.attr({ x: x, y: y, 'text-anchor': textAnchor, 'dominant-baseline': 'auto', 'font-size': fontSize, 'font-family': fontFamily, 'font-weight': fontWeight, fill: foreColor, class: 'apexcharts-text ' + cssClass }); elText.node.style.fontFamily = fontFamily; elText.node.style.opacity = opacity; return elText; } }, { key: "drawMarker", value: function drawMarker(x, y, opts) { x = x || 0; var size = opts.pSize || 0; var elPoint = null; if (opts.shape === 'square') { var radius = opts.pRadius === undefined ? size / 2 : opts.pRadius; if (y === null || !size) { size = 0; radius = 0; } var nSize = size * 1.2 + radius; var p = this.drawRect(nSize, nSize, nSize, nSize, radius); p.attr({ x: x - nSize / 2, y: y - nSize / 2, cx: x, cy: y, class: opts.class ? opts.class : '', fill: opts.pointFillColor, 'fill-opacity': opts.pointFillOpacity ? opts.pointFillOpacity : 1, stroke: opts.pointStrokeColor, 'stroke-width': opts.pWidth ? opts.pWidth : 0, 'stroke-opacity': opts.pointStrokeOpacity ? opts.pointStrokeOpacity : 1 }); elPoint = p; } else if (opts.shape === 'circle' || !opts.shape) { if (!Utils.isNumber(y)) { size = 0; y = 0; } // let nSize = size - opts.pRadius / 2 < 0 ? 0 : size - opts.pRadius / 2 elPoint = this.drawCircle(size, { cx: x, cy: y, class: opts.class ? opts.class : '', stroke: opts.pointStrokeColor, fill: opts.pointFillColor, 'fill-opacity': opts.pointFillOpacity ? opts.pointFillOpacity : 1, 'stroke-width': opts.pWidth ? opts.pWidth : 0, 'stroke-opacity': opts.pointStrokeOpacity ? opts.pointStrokeOpacity : 1 }); } return elPoint; } }, { key: "pathMouseEnter", value: function pathMouseEnter(path, e) { var w = this.w; var filters = new Filters(this.ctx); var i = parseInt(path.node.getAttribute('index'), 10); var j = parseInt(path.node.getAttribute('j'), 10); if (typeof w.config.chart.events.dataPointMouseEnter === 'function') { w.config.chart.events.dataPointMouseEnter(e, this.ctx, { seriesIndex: i, dataPointIndex: j, w: w }); } this.ctx.events.fireEvent('dataPointMouseEnter', [e, this.ctx, { seriesIndex: i, dataPointIndex: j, w: w }]); if (w.config.states.active.filter.type !== 'none') { if (path.node.getAttribute('selected') === 'true') { return; } } if (w.config.states.hover.filter.type !== 'none') { if (w.config.states.active.filter.type !== 'none' && !w.globals.isTouchDevice) { var hoverFilter = w.config.states.hover.filter; filters.applyFilter(path, i, hoverFilter.type, hoverFilter.value); } } } }, { key: "pathMouseLeave", value: function pathMouseLeave(path, e) { var w = this.w; var filters = new Filters(this.ctx); var i = parseInt(path.node.getAttribute('index'), 10); var j = parseInt(path.node.getAttribute('j'), 10); if (typeof w.config.chart.events.dataPointMouseLeave === 'function') { w.config.chart.events.dataPointMouseLeave(e, this.ctx, { seriesIndex: i, dataPointIndex: j, w: w }); } this.ctx.events.fireEvent('dataPointMouseLeave', [e, this.ctx, { seriesIndex: i, dataPointIndex: j, w: w }]); if (w.config.states.active.filter.type !== 'none') { if (path.node.getAttribute('selected') === 'true') { return; } } if (w.config.states.hover.filter.type !== 'none') { filters.getDefaultFilter(path, i); } } }, { key: "pathMouseDown", value: function pathMouseDown(path, e) { var w = this.w; var filters = new Filters(this.ctx); var i = parseInt(path.node.getAttribute('index'), 10); var j = parseInt(path.node.getAttribute('j'), 10); var selected = 'false'; if (path.node.getAttribute('selected') === 'true') { path.node.setAttribute('selected', 'false'); if (w.globals.selectedDataPoints[i].indexOf(j) > -1) { var index = w.globals.selectedDataPoints[i].indexOf(j); w.globals.selectedDataPoints[i].splice(index, 1); } } else { if (!w.config.states.active.allowMultipleDataPointsSelection && w.globals.selectedDataPoints.length > 0) { w.globals.selectedDataPoints = []; var elPaths = w.globals.dom.Paper.select('.apexcharts-series path').members; var elCircles = w.globals.dom.Paper.select('.apexcharts-series circle, .apexcharts-series rect').members; var deSelect = function deSelect(els) { Array.prototype.forEach.call(els, function (el) { el.node.setAttribute('selected', 'false'); filters.getDefaultFilter(el, i); }); }; deSelect(elPaths); deSelect(elCircles); } path.node.setAttribute('selected', 'true'); selected = 'true'; if (typeof w.globals.selectedDataPoints[i] === 'undefined') { w.globals.selectedDataPoints[i] = []; } w.globals.selectedDataPoints[i].push(j); } if (selected === 'true') { var activeFilter = w.config.states.active.filter; if (activeFilter !== 'none') { filters.applyFilter(path, i, activeFilter.type, activeFilter.value); } } else { if (w.config.states.active.filter.type !== 'none') { filters.getDefaultFilter(path, i); } } if (typeof w.config.chart.events.dataPointSelection === 'function') { w.config.chart.events.dataPointSelection(e, this.ctx, { selectedDataPoints: w.globals.selectedDataPoints, seriesIndex: i, dataPointIndex: j, w: w }); } if (e) { this.ctx.events.fireEvent('dataPointSelection', [e, this.ctx, { selectedDataPoints: w.globals.selectedDataPoints, seriesIndex: i, dataPointIndex: j, w: w }]); } } }, { key: "rotateAroundCenter", value: function rotateAroundCenter(el) { var coord = el.getBBox(); var x = coord.x + coord.width / 2; var y = coord.y + coord.height / 2; return { x: x, y: y }; } }, { key: "getTextRects", value: function getTextRects(text, fontSize, fontFamily, transform) { var useBBox = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true; var w = this.w; var virtualText = this.drawText({ x: -200, y: -200, text: text, textAnchor: 'start', fontSize: fontSize, fontFamily: fontFamily, foreColor: '#fff', opacity: 0 }); if (transform) { virtualText.attr('transform', transform); } w.globals.dom.Paper.add(virtualText); var rect = virtualText.bbox(); if (!useBBox) { rect = virtualText.node.getBoundingClientRect(); } virtualText.remove(); return { width: rect.width, height: rect.height }; } /** * append ... to long text * http://stackoverflow.com/questions/9241315/trimming-text-to-a-given-pixel-width-in-svg * @memberof Graphics **/ }, { key: "placeTextWithEllipsis", value: function placeTextWithEllipsis(textObj, textString, width) { if (typeof textObj.getComputedTextLength !== 'function') return; textObj.textContent = textString; if (textString.length > 0) { // ellipsis is needed if (textObj.getComputedTextLength() >= width / 0.8) { for (var x = textString.length - 3; x > 0; x -= 3) { if (textObj.getSubStringLength(0, x) <= width / 0.8) { textObj.textContent = textString.substring(0, x) + '...'; return; } } textObj.textContent = '.'; // can't place at all } } } }], [{ key: "setAttrs", value: function setAttrs(el, attrs) { for (var key in attrs) { if (attrs.hasOwnProperty(key)) { el.setAttribute(key, attrs[key]); } } } }]); return Graphics; }(); var Helpers = /*#__PURE__*/function () { function Helpers(annoCtx) { _classCallCheck(this, Helpers); this.w = annoCtx.w; this.annoCtx = annoCtx; } _createClass(Helpers, [{ key: "setOrientations", value: function setOrientations(anno) { var annoIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; var w = this.w; if (anno.label.orientation === 'vertical') { var i = annoIndex !== null ? annoIndex : 0; var xAnno = w.globals.dom.baseEl.querySelector(".apexcharts-xaxis-annotations .apexcharts-xaxis-annotation-label[rel='".concat(i, "']")); if (xAnno !== null) { var xAnnoCoord = xAnno.getBoundingClientRect(); xAnno.setAttribute('x', parseFloat(xAnno.getAttribute('x')) - xAnnoCoord.height + 4); if (anno.label.position === 'top') { xAnno.setAttribute('y', parseFloat(xAnno.getAttribute('y')) + xAnnoCoord.width); } else { xAnno.setAttribute('y', parseFloat(xAnno.getAttribute('y')) - xAnnoCoord.width); } var annoRotatingCenter = this.annoCtx.graphics.rotateAroundCenter(xAnno); var x = annoRotatingCenter.x; var y = annoRotatingCenter.y; xAnno.setAttribute('transform', "rotate(-90 ".concat(x, " ").concat(y, ")")); } } } }, { key: "addBackgroundToAnno", value: function addBackgroundToAnno(annoEl, anno) { var w = this.w; if (!anno.label.text || anno.label.text && !anno.label.text.trim()) return null; var elGridRect = w.globals.dom.baseEl.querySelector('.apexcharts-grid').getBoundingClientRect(); var coords = annoEl.getBoundingClientRect(); var pleft = anno.label.style.padding.left; var pright = anno.label.style.padding.right; var ptop = anno.label.style.padding.top; var pbottom = anno.label.style.padding.bottom; if (anno.label.orientation === 'vertical') { ptop = anno.label.style.padding.left; pbottom = anno.label.style.padding.right; pleft = anno.label.style.padding.top; pright = anno.label.style.padding.bottom; } var x1 = coords.left - elGridRect.left - pleft; var y1 = coords.top - elGridRect.top - ptop; var elRect = this.annoCtx.graphics.drawRect(x1, y1, coords.width + pleft + pright, coords.height + ptop + pbottom, 0, anno.label.style.background, 1, anno.label.borderWidth, anno.label.borderColor, 0); if (anno.id) { elRect.node.classList.add(anno.id); } return elRect; } }, { key: "annotationsBackground", value: function annotationsBackground() { var _this = this; var w = this.w; var add = function add(anno, i, type) { var annoLabel = w.globals.dom.baseEl.querySelector(".apexcharts-".concat(type, "-annotations .apexcharts-").concat(type, "-annotation-label[rel='").concat(i, "']")); if (annoLabel) { var parent = annoLabel.parentNode; var elRect = _this.addBackgroundToAnno(annoLabel, anno); if (elRect) { parent.insertBefore(elRect.node, annoLabel); } } }; w.config.annotations.xaxis.map(function (anno, i) { add(anno, i, 'xaxis'); }); w.config.annotations.yaxis.map(function (anno, i) { add(anno, i, 'yaxis'); }); w.config.annotations.points.map(function (anno, i) { add(anno, i, 'point'); }); } }, { key: "makeAnnotationDraggable", value: function makeAnnotationDraggable(el, annoType, index) { var w = this.w; var anno = w.config.annotations[annoType][index]; // in the draggable annotations, we will mutate the original config // object and store the values directly there el.draggable().on('dragend', function (de) { var x = de.target.getAttribute('x'); var y = de.target.getAttribute('y'); var cx = de.target.getAttribute('cx'); var cy = de.target.getAttribute('cy'); anno.x = x; anno.y = y; if (cx && cy) { anno.x = cx; anno.y = cy; } }); el.node.addEventListener('mousedown', function (e) { e.stopPropagation(); el.selectize({ pointSize: 8, rotationPoint: false, pointType: 'rect' }); el.resize().on('resizedone', function (re) { var width = re.target.getAttribute('width'); var height = re.target.getAttribute('height'); var r = re.target.getAttribute('r'); anno.width = width; anno.height = height; if (r) { anno.radius = r; } }); }); } }, { key: "getStringX", value: function getStringX(x) { var w = this.w; var rX = x; if (w.config.xaxis.convertedCatToNumeric && w.globals.categoryLabels.length) { x = w.globals.categoryLabels.indexOf(x) + 1; } var catIndex = w.globals.labels.indexOf(x); var xLabel = w.globals.dom.baseEl.querySelector('.apexcharts-xaxis-texts-g text:nth-child(' + (catIndex + 1) + ')'); if (xLabel) { rX = parseFloat(xLabel.getAttribute('x')); } return rX; } }]); return Helpers; }(); var XAnnotations = /*#__PURE__*/function () { function XAnnotations(annoCtx) { _classCallCheck(this, XAnnotations); this.w = annoCtx.w; this.annoCtx = annoCtx; this.invertAxis = this.annoCtx.invertAxis; } _createClass(XAnnotations, [{ key: "addXaxisAnnotation", value: function addXaxisAnnotation(anno, parent, index) { var w = this.w; var min = this.invertAxis ? w.globals.minY : w.globals.minX; var max = this.invertAxis ? w.globals.maxY : w.globals.maxX; var range = this.invertAxis ? w.globals.yRange[0] : w.globals.xRange; var x1 = (anno.x - min) / (range / w.globals.gridWidth); if (this.annoCtx.inversedReversedAxis) { x1 = (max - anno.x) / (range / w.globals.gridWidth); } var text = anno.label.text; if ((w.config.xaxis.type === 'category' || w.config.xaxis.convertedCatToNumeric) && !this.invertAxis && !w.globals.dataFormatXNumeric) { x1 = this.annoCtx.helpers.getStringX(anno.x); } var strokeDashArray = anno.strokeDashArray; if (!Utils.isNumber(x1)) return; if (anno.x2 === null || typeof anno.x2 === 'undefined') { var line = this.annoCtx.graphics.drawLine(x1 + anno.offsetX, // x1 0 + anno.offsetY, // y1 x1 + anno.offsetX, // x2 w.globals.gridHeight + anno.offsetY, // y2 anno.borderColor, // lineColor strokeDashArray, //dashArray anno.borderWidth); parent.appendChild(line.node); if (anno.id) { line.node.classList.add(anno.id); } } else { var x2 = (anno.x2 - min) / (range / w.globals.gridWidth); if (this.annoCtx.inversedReversedAxis) { x2 = (max - anno.x2) / (range / w.globals.gridWidth); } if ((w.config.xaxis.type === 'category' || w.config.xaxis.convertedCatToNumeric) && !this.invertAxis && !w.globals.dataFormatXNumeric) { x2 = this.annoCtx.helpers.getStringX(anno.x2); } if (x2 < x1) { var temp = x1; x1 = x2; x2 = temp; } var rect = this.annoCtx.graphics.drawRect(x1 + anno.offsetX, // x1 0 + anno.offsetY, // y1 x2 - x1, // x2 w.globals.gridHeight + anno.offsetY, // y2 0, // radius anno.fillColor, // color anno.opacity, // opacity, 1, // strokeWidth anno.borderColor, // strokeColor strokeDashArray // stokeDashArray ); rect.node.classList.add('apexcharts-annotation-rect'); rect.attr('clip-path', "url(#gridRectMask".concat(w.globals.cuid, ")")); parent.appendChild(rect.node); if (anno.id) { rect.node.classList.add(anno.id); } } var textY = anno.label.position === 'top' ? 4 : w.globals.gridHeight; var textRects = this.annoCtx.graphics.getTextRects(text, parseFloat(anno.label.style.fontSize)); var elText = this.annoCtx.graphics.drawText({ x: x1 + anno.label.offsetX, y: textY + anno.label.offsetY - (anno.label.orientation === 'vertical' ? anno.label.position === 'top' ? textRects.width / 2 - 12 : -textRects.width / 2 : 0), text: text, textAnchor: anno.label.textAnchor, fontSize: anno.label.style.fontSize, fontFamily: anno.label.style.fontFamily, fontWeight: anno.label.style.fontWeight, foreColor: anno.label.style.color, cssClass: "apexcharts-xaxis-annotation-label ".concat(anno.label.style.cssClass, " ").concat(anno.id ? anno.id : '') }); elText.attr({ rel: index }); parent.appendChild(elText.node); // after placing the annotations on svg, set any vertically placed annotations this.annoCtx.helpers.setOrientations(anno, index); } }, { key: "drawXAxisAnnotations", value: function drawXAxisAnnotations() { var _this = this; var w = this.w; var elg = this.annoCtx.graphics.group({ class: 'apexcharts-xaxis-annotations' }); w.config.annotations.xaxis.map(function (anno, index) { _this.addXaxisAnnotation(anno, elg.node, index); }); return elg; } }]); return XAnnotations; }(); var YAnnotations = /*#__PURE__*/function () { function YAnnotations(annoCtx) { _classCallCheck(this, YAnnotations); this.w = annoCtx.w; this.annoCtx = annoCtx; } _createClass(YAnnotations, [{ key: "addYaxisAnnotation", value: function addYaxisAnnotation(anno, parent, index) { var w = this.w; var strokeDashArray = anno.strokeDashArray; var y1 = this._getY1Y2('y1', anno); var y2; var text = anno.label.text; if (anno.y2 === null || typeof anno.y2 === 'undefined') { var line = this.annoCtx.graphics.drawLine(0 + anno.offsetX, // x1 y1 + anno.offsetY, // y1 w.globals.gridWidth + anno.offsetX, // x2 y1 + anno.offsetY, // y2 anno.borderColor, // lineColor strokeDashArray, // dashArray anno.borderWidth); parent.appendChild(line.node); if (anno.id) { line.node.classList.add(anno.id); } } else { y2 = this._getY1Y2('y2', anno); if (y2 > y1) { var temp = y1; y1 = y2; y2 = temp; } var rect = this.annoCtx.graphics.drawRect(0 + anno.offsetX, // x1 y2 + anno.offsetY, // y1 w.globals.gridWidth + anno.offsetX, // x2 y1 - y2, // y2 0, // radius anno.fillColor, // color anno.opacity, // opacity, 1, // strokeWidth anno.borderColor, // strokeColor strokeDashArray // stokeDashArray ); rect.node.classList.add('apexcharts-annotation-rect'); rect.attr('clip-path', "url(#gridRectMask".concat(w.globals.cuid, ")")); parent.appendChild(rect.node); if (anno.id) { rect.node.classList.add(anno.id); } } var textX = anno.label.position === 'right' ? w.globals.gridWidth : 0; var elText = this.annoCtx.graphics.drawText({ x: textX + anno.label.offsetX, y: (y2 || y1) + anno.label.offsetY - 3, text: text, textAnchor: anno.label.textAnchor, fontSize: anno.label.style.fontSize, fontFamily: anno.label.style.fontFamily, fontWeight: anno.label.style.fontWeight, foreColor: anno.label.style.color, cssClass: "apexcharts-yaxis-annotation-label ".concat(anno.label.style.cssClass, " ").concat(anno.id ? anno.id : '') }); elText.attr({ rel: index }); parent.appendChild(elText.node); } }, { key: "_getY1Y2", value: function _getY1Y2(type, anno) { var y = type === 'y1' ? anno.y : anno.y2; var yP; var w = this.w; if (this.annoCtx.invertAxis) { var catIndex = w.globals.labels.indexOf(y); if (w.config.xaxis.convertedCatToNumeric) { catIndex = w.globals.categoryLabels.indexOf(y); } var xLabel = w.globals.dom.baseEl.querySelector('.apexcharts-yaxis-texts-g text:nth-child(' + (catIndex + 1) + ')'); if (xLabel) { yP = parseFloat(xLabel.getAttribute('y')); } } else { yP = w.globals.gridHeight - (y - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight); if (w.config.yaxis[anno.yAxisIndex] && w.config.yaxis[anno.yAxisIndex].reversed) { yP = (y - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight); } } return yP; } }, { key: "drawYAxisAnnotations", value: function drawYAxisAnnotations() { var _this = this; var w = this.w; var elg = this.annoCtx.graphics.group({ class: 'apexcharts-yaxis-annotations' }); w.config.annotations.yaxis.map(function (anno, index) { _this.addYaxisAnnotation(anno, elg.node, index); }); return elg; } }]); return YAnnotations; }(); var PointAnnotations = /*#__PURE__*/function () { function PointAnnotations(annoCtx) { _classCallCheck(this, PointAnnotations); this.w = annoCtx.w; this.annoCtx = annoCtx; } _createClass(PointAnnotations, [{ key: "addPointAnnotation", value: function addPointAnnotation(anno, parent, index) { var w = this.w; var x = 0; var y = 0; var pointY = 0; if (this.annoCtx.invertAxis) { console.warn('Point annotation is not supported in horizontal bar charts.'); } if (typeof anno.x === 'string') { var catIndex = w.globals.labels.indexOf(anno.x); if (w.config.xaxis.convertedCatToNumeric) { catIndex = w.globals.categoryLabels.indexOf(anno.x); } x = this.annoCtx.helpers.getStringX(anno.x); var annoY = anno.y; if (anno.y === null) { annoY = w.globals.series[anno.seriesIndex][catIndex]; } y = w.globals.gridHeight - (annoY - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight) - parseFloat(anno.label.style.fontSize) - anno.marker.size; pointY = w.globals.gridHeight - (annoY - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight); if (w.config.yaxis[anno.yAxisIndex] && w.config.yaxis[anno.yAxisIndex].reversed) { y = (annoY - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight) + parseFloat(anno.label.style.fontSize) + anno.marker.size; pointY = (annoY - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight); } } else { x = (anno.x - w.globals.minX) / (w.globals.xRange / w.globals.gridWidth); y = w.globals.gridHeight - (parseFloat(anno.y) - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight) - parseFloat(anno.label.style.fontSize) - anno.marker.size; pointY = w.globals.gridHeight - (anno.y - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight); if (w.config.yaxis[anno.yAxisIndex] && w.config.yaxis[anno.yAxisIndex].reversed) { y = (parseFloat(anno.y) - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight) - parseFloat(anno.label.style.fontSize) - anno.marker.size; pointY = (anno.y - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight); } } if (!Utils.isNumber(x)) return; var optsPoints = { pSize: anno.marker.size, pWidth: anno.marker.strokeWidth, pointFillColor: anno.marker.fillColor, pointStrokeColor: anno.marker.strokeColor, shape: anno.marker.shape, pRadius: anno.marker.radius, class: "apexcharts-point-annotation-marker ".concat(anno.marker.cssClass, " ").concat(anno.id ? anno.id : '') }; var point = this.annoCtx.graphics.drawMarker(x + anno.marker.offsetX, pointY + anno.marker.offsetY, optsPoints); parent.appendChild(point.node); var text = anno.label.text ? anno.label.text : ''; var elText = this.annoCtx.graphics.drawText({ x: x + anno.label.offsetX, y: y + anno.label.offsetY, text: text, textAnchor: anno.label.textAnchor, fontSize: anno.label.style.fontSize, fontFamily: anno.label.style.fontFamily, fontWeight: anno.label.style.fontWeight, foreColor: anno.label.style.color, cssClass: "apexcharts-point-annotation-label ".concat(anno.label.style.cssClass, " ").concat(anno.id ? anno.id : '') }); elText.attr({ rel: index }); parent.appendChild(elText.node); // TODO: deprecate this as we will use custom if (anno.customSVG.SVG) { var g = this.annoCtx.graphics.group({ class: 'apexcharts-point-annotations-custom-svg ' + anno.customSVG.cssClass }); g.attr({ transform: "translate(".concat(x + anno.customSVG.offsetX, ", ").concat(y + anno.customSVG.offsetY, ")") }); g.node.innerHTML = anno.customSVG.SVG; parent.appendChild(g.node); } if (anno.image.path) { var imgWidth = anno.image.width ? anno.image.width : 20; var imgHeight = anno.image.height ? anno.image.height : 20; this.annoCtx.addImage({ x: x + anno.image.offsetX - imgWidth / 2, y: y + anno.image.offsetY - imgHeight / 2, width: imgWidth, height: imgHeight, path: anno.image.path, appendTo: '.apexcharts-point-annotations' }); } } }, { key: "drawPointAnnotations", value: function drawPointAnnotations() { var _this = this; var w = this.w; var elg = this.annoCtx.graphics.group({ class: 'apexcharts-point-annotations' }); w.config.annotations.points.map(function (anno, index) { _this.addPointAnnotation(anno, elg.node, index); }); return elg; } }]); return PointAnnotations; }(); const name = "en"; const options = { months: [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ], shortMonths: [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ], days: [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ], shortDays: [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ], toolbar: { exportToSVG: "Download SVG", exportToPNG: "Download PNG", exportToCSV: "Download CSV", menu: "Menu", selection: "Selection", selectionZoom: "Selection Zoom", zoomIn: "Zoom In", zoomOut: "Zoom Out", pan: "Panning", reset: "Reset Zoom" } }; var en = { name: name, options: options }; var Options = /*#__PURE__*/function () { function Options() { _classCallCheck(this, Options); this.yAxis = { show: true, showAlways: false, showForNullSeries: true, seriesName: undefined, opposite: false, reversed: false, logarithmic: false, tickAmount: undefined, forceNiceScale: false, max: undefined, min: undefined, floating: false, decimalsInFloat: undefined, labels: { show: true, minWidth: 0, maxWidth: 160, offsetX: 0, offsetY: 0, align: undefined, rotate: 0, padding: 20, style: { colors: [], fontSize: '11px', fontWeight: 400, fontFamily: undefined, cssClass: '' }, formatter: undefined }, axisBorder: { show: false, color: '#e0e0e0', width: 1, offsetX: 0, offsetY: 0 }, axisTicks: { show: false, color: '#e0e0e0', width: 6, offsetX: 0, offsetY: 0 }, title: { text: undefined, rotate: 90, offsetY: 0, offsetX: 0, style: { color: undefined, fontSize: '11px', fontWeight: 900, fontFamily: undefined, cssClass: '' } }, tooltip: { enabled: false, offsetX: 0 }, crosshairs: { show: true, position: 'front', stroke: { color: '#b6b6b6', width: 1, dashArray: 0 } } }; this.pointAnnotation = { x: 0, y: null, yAxisIndex: 0, seriesIndex: 0, marker: { size: 4, fillColor: '#fff', strokeWidth: 2, strokeColor: '#333', shape: 'circle', offsetX: 0, offsetY: 0, radius: 2, cssClass: '' }, label: { borderColor: '#c2c2c2', borderWidth: 1, text: undefined, textAnchor: 'middle', offsetX: 0, offsetY: -15, style: { background: '#fff', color: undefined, fontSize: '11px', fontFamily: undefined, fontWeight: 400, cssClass: '', padding: { left: 5, right: 5, top: 2, bottom: 2 } } }, customSVG: { // this will be deprecated in the next major version as it is going to be replaced with a better alternative below SVG: undefined, cssClass: undefined, offsetX: 0, offsetY: 0 }, image: { path: undefined, width: 20, height: 20, offsetX: 0, offsetY: 0 } }; this.yAxisAnnotation = { y: 0, y2: null, strokeDashArray: 1, fillColor: '#c2c2c2', borderColor: '#c2c2c2', borderWidth: 1, opacity: 0.3, offsetX: 0, offsetY: 0, yAxisIndex: 0, label: { borderColor: '#c2c2c2', borderWidth: 1, text: undefined, textAnchor: 'end', position: 'right', offsetX: 0, offsetY: -3, style: { background: '#fff', color: undefined, fontSize: '11px', fontFamily: undefined, fontWeight: 400, cssClass: '', padding: { left: 5, right: 5, top: 2, bottom: 2 } } } }; this.xAxisAnnotation = { x: 0, x2: null, strokeDashArray: 1, fillColor: '#c2c2c2', borderColor: '#c2c2c2', borderWidth: 1, opacity: 0.3, offsetX: 0, offsetY: 0, label: { borderColor: '#c2c2c2', borderWidth: 1, text: undefined, textAnchor: 'middle', orientation: 'vertical', position: 'top', offsetX: 0, offsetY: 0, style: { background: '#fff', color: undefined, fontSize: '11px', fontFamily: undefined, fontWeight: 400, cssClass: '', padding: { left: 5, right: 5, top: 2, bottom: 2 } } } }; this.text = { x: 0, y: 0, text: '', textAnchor: 'start', foreColor: undefined, fontSize: '13px', fontFamily: undefined, fontWeight: 400, appendTo: '.apexcharts-annotations', backgroundColor: 'transparent', borderColor: '#c2c2c2', borderRadius: 0, borderWidth: 0, paddingLeft: 4, paddingRight: 4, paddingTop: 2, paddingBottom: 2 }; this.shape = { x: 0, y: 0, type: 'rect', width: '100%', // accepts percentage as well as fixed numbers height: 50, appendTo: '.apexcharts-annotations', backgroundColor: '#fff', opacity: 1, borderWidth: 0, borderRadius: 4, borderColor: '#c2c2c2' }; } _createClass(Options, [{ key: "init", value: function init() { return { annotations: { position: 'front', yaxis: [this.yAxisAnnotation], xaxis: [this.xAxisAnnotation], points: [this.pointAnnotation], texts: [], images: [], shapes: [] }, chart: { animations: { enabled: true, easing: 'easeinout', // linear, easeout, easein, easeinout, swing, bounce, elastic speed: 800, animateGradually: { delay: 150, enabled: true }, dynamicAnimation: { enabled: true, speed: 350 } }, background: 'transparent', locales: [en], defaultLocale: 'en', dropShadow: { enabled: false, enabledOnSeries: undefined, top: 2, left: 2, blur: 4, color: '#000', opacity: 0.35 }, events: { animationEnd: undefined, beforeMount: undefined, mounted: undefined, updated: undefined, click: undefined, mouseMove: undefined, legendClick: undefined, markerClick: undefined, selection: undefined, dataPointSelection: undefined, dataPointMouseEnter: undefined, dataPointMouseLeave: undefined, beforeZoom: undefined, zoomed: undefined, scrolled: undefined }, foreColor: '#373d3f', fontFamily: 'Helvetica, Arial, sans-serif', height: 'auto', parentHeightOffset: 15, redrawOnParentResize: true, id: undefined, group: undefined, offsetX: 0, offsetY: 0, selection: { enabled: false, type: 'x', // selectedPoints: undefined, // default datapoints that should be selected automatically fill: { color: '#24292e', opacity: 0.1 }, stroke: { width: 1, color: '#24292e', opacity: 0.4, dashArray: 3 }, xaxis: { min: undefined, max: undefined }, yaxis: { min: undefined, max: undefined } }, sparkline: { enabled: false }, brush: { enabled: false, autoScaleYaxis: true, target: undefined }, stacked: false, stackType: 'normal', toolbar: { show: true, offsetX: 0, offsetY: 0, tools: { download: true, selection: true, zoom: true, zoomin: true, zoomout: true, pan: true, reset: true, customIcons: [] }, autoSelected: 'zoom' // accepts -> zoom, pan, selection }, type: 'line', width: '100%', zoom: { enabled: true, type: 'x', autoScaleYaxis: false, zoomedArea: { fill: { color: '#90CAF9', opacity: 0.4 }, stroke: { color: '#0D47A1', opacity: 0.4, width: 1 } } } }, plotOptions: { bar: { horizontal: false, columnWidth: '70%', // should be in percent 0 - 100 barHeight: '70%', // should be in percent 0 - 100 distributed: false, startingShape: 'flat', endingShape: 'flat', colors: { ranges: [], backgroundBarColors: [], backgroundBarOpacity: 1, backgroundBarRadius: 0 }, dataLabels: { position: 'top', // top, center, bottom maxItems: 100, hideOverflowingLabels: true, orientation: 'horizontal' // TODO: provide stackedLabels for stacked charts which gives additions of values } }, bubble: { minBubbleRadius: undefined, maxBubbleRadius: undefined }, candlestick: { colors: { upward: '#00B746', downward: '#EF403C' }, wick: { useFillColor: true } }, heatmap: { radius: 2, enableShades: true, shadeIntensity: 0.5, reverseNegativeShade: false, distributed: false, useFillColorAsStroke: false, colorScale: { inverse: false, ranges: [], min: undefined, max: undefined } }, radialBar: { inverseOrder: false, startAngle: 0, endAngle: 360, offsetX: 0, offsetY: 0, hollow: { margin: 5, size: '50%', background: 'transparent', image: undefined, imageWidth: 150, imageHeight: 150, imageOffsetX: 0, imageOffsetY: 0, imageClipped: true, position: 'front', dropShadow: { enabled: false, top: 0, left: 0, blur: 3, color: '#000', opacity: 0.5 } }, track: { show: true, startAngle: undefined, endAngle: undefined, background: '#f2f2f2', strokeWidth: '97%', opacity: 1, margin: 5, // margin is in pixels dropShadow: { enabled: false, top: 0, left: 0, blur: 3, color: '#000', opacity: 0.5 } }, dataLabels: { show: true, name: { show: true, fontSize: '16px', fontFamily: undefined, fontWeight: 600, color: undefined, offsetY: 0, formatter: function formatter(val) { return val; } }, value: { show: true, fontSize: '14px', fontFamily: undefined, fontWeight: 400, color: undefined, offsetY: 16, formatter: function formatter(val) { return val + '%'; } }, total: { show: false, label: 'Total', fontSize: '16px', fontWeight: 600, fontFamily: undefined, color: undefined, formatter: function formatter(w) { return w.globals.seriesTotals.reduce(function (a, b) { return a + b; }, 0) / w.globals.series.length + '%'; } } } }, pie: { customScale: 1, offsetX: 0, offsetY: 0, expandOnClick: true, dataLabels: { // These are the percentage values which are displayed on slice offset: 0, // offset by which labels will move outside minAngleToShowLabel: 10 }, donut: { size: '65%', background: 'transparent', labels: { // These are the inner labels appearing inside donut show: false, name: { show: true, fontSize: '16px', fontFamily: undefined, fontWeight: 600, color: undefined, offsetY: -10, formatter: function formatter(val) { return val; } }, value: { show: true, fontSize: '20px', fontFamily: undefined, fontWeight: 400, color: undefined, offsetY: 10, formatter: function formatter(val) { return val; } }, total: { show: false, showAlways: false, label: 'Total', fontSize: '16px', fontWeight: 400, fontFamily: undefined, color: undefined, formatter: function formatter(w) { return w.globals.seriesTotals.reduce(function (a, b) { return a + b; }, 0); } } } } }, radar: { size: undefined, offsetX: 0, offsetY: 0, polygons: { // strokeColor: '#e8e8e8', // should be deprecated in the minor version i.e 3.2 strokeColors: '#e8e8e8', connectorColors: '#e8e8e8', fill: { colors: undefined } } } }, colors: undefined, dataLabels: { enabled: true, enabledOnSeries: undefined, formatter: function formatter(val) { return val !== null ? val : ''; }, textAnchor: 'middle', distributed: false, offsetX: 0, offsetY: 0, style: { fontSize: '12px', fontFamily: undefined, fontWeight: 600, colors: undefined }, background: { enabled: true, foreColor: '#fff', borderRadius: 2, padding: 4, opacity: 0.9, borderWidth: 1, borderColor: '#fff', dropShadow: { enabled: false, top: 1, left: 1, blur: 1, color: '#000', opacity: 0.45 } }, dropShadow: { enabled: false, top: 1, left: 1, blur: 1, color: '#000', opacity: 0.45 } }, fill: { type: 'solid', colors: undefined, // array of colors opacity: 0.85, gradient: { shade: 'dark', type: 'horizontal', shadeIntensity: 0.5, gradientToColors: undefined, inverseColors: true, opacityFrom: 1, opacityTo: 1, stops: [0, 50, 100], colorStops: [] }, image: { src: [], width: undefined, // optional height: undefined // optional }, pattern: { style: 'squares', // String | Array of Strings width: 6, height: 6, strokeWidth: 2 } }, grid: { show: true, borderColor: '#e0e0e0', strokeDashArray: 0, position: 'back', xaxis: { lines: { show: false } }, yaxis: { lines: { show: true } }, row: { colors: undefined, // takes as array which will be repeated on rows opacity: 0.5 }, column: { colors: undefined, // takes an array which will be repeated on columns opacity: 0.5 }, padding: { top: 0, right: 10, bottom: 0, left: 12 } }, labels: [], legend: { show: true, showForSingleSeries: false, showForNullSeries: true, showForZeroSeries: true, floating: false, position: 'bottom', // whether to position legends in 1 of 4 // direction - top, bottom, left, right horizontalAlign: 'center', // when position top/bottom, you can specify whether to align legends left, right or center inverseOrder: false, fontSize: '12px', fontFamily: undefined, fontWeight: 400, width: undefined, height: undefined, formatter: undefined, tooltipHoverFormatter: undefined, offsetX: -20, offsetY: 0, labels: { colors: undefined, useSeriesColors: false }, markers: { width: 12, height: 12, strokeWidth: 0, fillColors: undefined, strokeColor: '#fff', radius: 12, customHTML: undefined, offsetX: 0, offsetY: 0, onClick: undefined }, itemMargin: { horizontal: 5, vertical: 0 }, onItemClick: { toggleDataSeries: true }, onItemHover: { highlightDataSeries: true } }, markers: { discrete: [], size: 0, colors: undefined, //strokeColor: '#fff', // TODO: deprecate in major version 4.0 strokeColors: '#fff', strokeWidth: 2, strokeOpacity: 0.9, strokeDashArray: 0, fillOpacity: 1, shape: 'circle', radius: 2, offsetX: 0, offsetY: 0, onClick: undefined, onDblClick: undefined, showNullDataPoints: true, hover: { size: undefined, sizeOffset: 3 } }, noData: { text: undefined, align: 'center', verticalAlign: 'middle', offsetX: 0, offsetY: 0, style: { color: undefined, fontSize: '14px', fontFamily: undefined } }, responsive: [], // breakpoints should follow ascending order 400, then 700, then 1000 series: undefined, states: { normal: { filter: { type: 'none', value: 0 } }, hover: { filter: { type: 'lighten', value: 0.15 } }, active: { allowMultipleDataPointsSelection: false, filter: { type: 'darken', value: 0.65 } } }, title: { text: undefined, align: 'left', margin: 5, offsetX: 0, offsetY: 0, floating: false, style: { fontSize: '14px', fontWeight: 900, fontFamily: undefined, color: undefined } }, subtitle: { text: undefined, align: 'left', margin: 5, offsetX: 0, offsetY: 30, floating: false, style: { fontSize: '12px', fontWeight: 400, fontFamily: undefined, color: undefined } }, stroke: { show: true, curve: 'smooth', // "smooth" / "straight" / "stepline" lineCap: 'butt', // round, butt , square width: 2, colors: undefined, // array of colors dashArray: 0 // single value or array of values }, tooltip: { enabled: true, enabledOnSeries: undefined, shared: true, followCursor: false, // when disabled, the tooltip will show on top of the series instead of mouse position intersect: false, // when enabled, tooltip will only show when user directly hovers over point inverseOrder: false, custom: undefined, fillSeriesColor: false, theme: 'light', style: { fontSize: '12px', fontFamily: undefined }, onDatasetHover: { highlightDataSeries: false }, x: { // x value show: true, format: 'dd MMM', // dd/MM, dd MMM yy, dd MMM yyyy formatter: undefined // a custom user supplied formatter function }, y: { formatter: undefined, title: { formatter: function formatter(seriesName) { return seriesName; } } }, z: { formatter: undefined, title: 'Size: ' }, marker: { show: true, fillColors: undefined }, items: { display: 'flex' }, fixed: { enabled: false, position: 'topRight', // topRight, topLeft, bottomRight, bottomLeft offsetX: 0, offsetY: 0 } }, xaxis: { type: 'category', categories: [], convertedCatToNumeric: false, // internal property which should not be altered outside sorted: true, offsetX: 0, offsetY: 0, labels: { show: true, rotate: -45, rotateAlways: false, hideOverlappingLabels: true, trim: false, minHeight: undefined, maxHeight: 120, showDuplicates: true, style: { colors: [], fontSize: '12px', fontWeight: 400, fontFamily: undefined, cssClass: '' }, offsetX: 0, offsetY: 0, format: undefined, formatter: undefined, // custom formatter function which will override format datetimeUTC: true, datetimeFormatter: { year: 'yyyy', month: "MMM 'yy", day: 'dd MMM', hour: 'HH:mm', minute: 'HH:mm:ss' } }, axisBorder: { show: true, color: '#e0e0e0', width: '100%', height: 1, offsetX: 0, offsetY: 0 }, axisTicks: { show: true, color: '#e0e0e0', height: 6, offsetX: 0, offsetY: 0 }, tickAmount: undefined, tickPlacement: 'on', min: undefined, max: undefined, range: undefined, floating: false, position: 'bottom', title: { text: undefined, offsetX: 0, offsetY: 0, style: { color: undefined, fontSize: '12px', fontWeight: 900, fontFamily: undefined, cssClass: '' } }, crosshairs: { show: true, width: 1, // tickWidth/barWidth or an integer position: 'back', opacity: 0.9, stroke: { color: '#b6b6b6', width: 1, dashArray: 3 }, fill: { type: 'solid', // solid, gradient color: '#B1B9C4', gradient: { colorFrom: '#D8E3F0', colorTo: '#BED1E6', stops: [0, 100], opacityFrom: 0.4, opacityTo: 0.5 } }, dropShadow: { enabled: false, left: 0, top: 0, blur: 1, opacity: 0.4 } }, tooltip: { enabled: true, offsetY: 0, formatter: undefined, style: { fontSize: '12px', fontFamily: undefined } } }, yaxis: this.yAxis, theme: { mode: 'light', palette: 'palette1', // If defined, it will overwrite globals.colors variable monochrome: { // monochrome allows you to select just 1 color and fill out the rest with light/dark shade (intensity can be selected) enabled: false, color: '#008FFB', shadeTo: 'light', shadeIntensity: 0.65 } } }; } }]); return Options; }(); /** * ApexCharts Annotations Class for drawing lines/rects on both xaxis and yaxis. * * @module Annotations **/ var Annotations = /*#__PURE__*/function () { function Annotations(ctx) { _classCallCheck(this, Annotations); this.ctx = ctx; this.w = ctx.w; this.graphics = new Graphics(this.ctx); if (this.w.globals.isBarHorizontal) { this.invertAxis = true; } this.helpers = new Helpers(this); this.xAxisAnnotations = new XAnnotations(this); this.yAxisAnnotations = new YAnnotations(this); this.pointsAnnotations = new PointAnnotations(this); if (this.w.globals.isBarHorizontal && this.w.config.yaxis[0].reversed) { this.inversedReversedAxis = true; } this.xDivision = this.w.globals.gridWidth / this.w.globals.dataPoints; } _createClass(Annotations, [{ key: "drawAxesAnnotations", value: function drawAxesAnnotations() { var w = this.w; if (w.globals.axisCharts) { var yAnnotations = this.yAxisAnnotations.drawYAxisAnnotations(); var xAnnotations = this.xAxisAnnotations.drawXAxisAnnotations(); var pointAnnotations = this.pointsAnnotations.drawPointAnnotations(); var initialAnim = w.config.chart.animations.enabled; var annoArray = [yAnnotations, xAnnotations, pointAnnotations]; var annoElArray = [xAnnotations.node, yAnnotations.node, pointAnnotations.node]; for (var i = 0; i < 3; i++) { w.globals.dom.elGraphical.add(annoArray[i]); if (initialAnim && !w.globals.resized && !w.globals.dataChanged) { // fixes apexcharts/apexcharts.js#685 if (w.config.chart.type !== 'scatter' && w.config.chart.type !== 'bubble' && w.globals.dataPoints > 1) { annoElArray[i].classList.add('apexcharts-element-hidden'); } } w.globals.delayedElements.push({ el: annoElArray[i], index: 0 }); } // background sizes needs to be calculated after text is drawn, so calling them last this.helpers.annotationsBackground(); } } }, { key: "drawShapeAnnos", value: function drawShapeAnnos() { var _this = this; var w = this.w; w.config.annotations.shapes.map(function (s, index) { _this.addShape(s, index); }); } }, { key: "drawImageAnnos", value: function drawImageAnnos() { var _this2 = this; var w = this.w; w.config.annotations.images.map(function (s, index) { _this2.addImage(s, index); }); } }, { key: "drawTextAnnos", value: function drawTextAnnos() { var _this3 = this; var w = this.w; w.config.annotations.texts.map(function (t, index) { _this3.addText(t, index); }); } }, { key: "addXaxisAnnotation", value: function addXaxisAnnotation(anno, parent, index) { this.xAxisAnnotations.addXaxisAnnotation(anno, parent, index); } }, { key: "addYaxisAnnotation", value: function addYaxisAnnotation(anno, parent, index) { this.yAxisAnnotations.addYaxisAnnotation(anno, parent, index); } }, { key: "addPointAnnotation", value: function addPointAnnotation(anno, parent, index) { this.pointsAnnotations.addPointAnnotation(anno, parent, index); } }, { key: "addText", value: function addText(params, index) { var x = params.x, y = params.y, text = params.text, textAnchor = params.textAnchor, foreColor = params.foreColor, fontSize = params.fontSize, fontFamily = params.fontFamily, fontWeight = params.fontWeight, cssClass = params.cssClass, backgroundColor = params.backgroundColor, borderWidth = params.borderWidth, strokeDashArray = params.strokeDashArray, borderRadius = params.borderRadius, borderColor = params.borderColor, _params$appendTo = params.appendTo, appendTo = _params$appendTo === void 0 ? '.apexcharts-annotations' : _params$appendTo, _params$paddingLeft = params.paddingLeft, paddingLeft = _params$paddingLeft === void 0 ? 4 : _params$paddingLeft, _params$paddingRight = params.paddingRight, paddingRight = _params$paddingRight === void 0 ? 4 : _params$paddingRight, _params$paddingBottom = params.paddingBottom, paddingBottom = _params$paddingBottom === void 0 ? 2 : _params$paddingBottom, _params$paddingTop = params.paddingTop, paddingTop = _params$paddingTop === void 0 ? 2 : _params$paddingTop; var w = this.w; var elText = this.graphics.drawText({ x: x, y: y, text: text, textAnchor: textAnchor || 'start', fontSize: fontSize || '12px', fontWeight: fontWeight || 'regular', fontFamily: fontFamily || w.config.chart.fontFamily, foreColor: foreColor || w.config.chart.foreColor, cssClass: 'apexcharts-text ' + cssClass ? cssClass : '' }); var parent = w.globals.dom.baseEl.querySelector(appendTo); if (parent) { parent.appendChild(elText.node); } var textRect = elText.bbox(); if (params.draggable) { this.helpers.makeAnnotationDraggable(elText, 'texts', index); } if (text) { var elRect = this.graphics.drawRect(textRect.x - paddingLeft, textRect.y - paddingTop, textRect.width + paddingLeft + paddingRight, textRect.height + paddingBottom + paddingTop, borderRadius, backgroundColor ? backgroundColor : 'transparent', 1, borderWidth, borderColor, strokeDashArray); parent.insertBefore(elRect.node, elText.node); } } }, { key: "addShape", value: function addShape(params, index) { var opts = { type: params.type, x: params.x || 0, y: params.y || 0, width: params.width || '100%', height: params.height || 50, circleRadius: params.radius || 25, backgroundColor: params.backgroundColor || '#fff', opacity: params.opacity || 1, borderWidth: params.borderWidth || 0, borderRadius: params.borderRadius || 4, borderColor: params.borderColor || '#c2c2c2', appendTo: params.appendTo || '.apexcharts-annotations' }; var w = this.w; if (String(opts.width).indexOf('%') > -1) { opts.width = parseInt(opts.width, 10) * parseInt(w.globals.svgWidth, 10) / 100; } var elShape = null; if (opts.type === 'circle') { elShape = this.graphics.drawCircle(opts.circleRadius, { fill: opts.backgroundColor, stroke: opts.borderColor, 'stroke-width': opts.borderWidth, opacity: opts.opacity, cx: opts.x, cy: opts.y }); } else { elShape = this.graphics.drawRect(opts.x, opts.y, opts.width, opts.height, opts.borderRadius, opts.backgroundColor, opts.opacity, opts.borderWidth, opts.borderColor); } var parent = w.globals.dom.baseEl.querySelector(opts.appendTo); if (parent) { parent.appendChild(elShape.node); } if (params.draggable) { this.helpers.makeAnnotationDraggable(elShape, 'shapes', index); elShape.node.classList.add('apexcharts-resizable-element'); } } }, { key: "addImage", value: function addImage(params, index) { var w = this.w; var path = params.path, _params$x = params.x, x = _params$x === void 0 ? 0 : _params$x, _params$y = params.y, y = _params$y === void 0 ? 0 : _params$y, _params$width = params.width, width = _params$width === void 0 ? 20 : _params$width, _params$height = params.height, height = _params$height === void 0 ? 20 : _params$height, _params$appendTo2 = params.appendTo, appendTo = _params$appendTo2 === void 0 ? '.apexcharts-annotations' : _params$appendTo2; var img = w.globals.dom.Paper.image(path); img.size(width, height).move(x, y); var parent = w.globals.dom.baseEl.querySelector(appendTo); if (parent) { parent.appendChild(img.node); } if (params.draggable) { this.helpers.makeAnnotationDraggable(img, 'images', index); img.node.classList.add('apexcharts-resizable-element'); } } // The addXaxisAnnotation method requires a parent class, and user calling this method externally on the chart instance may not specify parent, hence a different method }, { key: "addXaxisAnnotationExternal", value: function addXaxisAnnotationExternal(params, pushToMemory, context) { this.addAnnotationExternal({ params: params, pushToMemory: pushToMemory, context: context, type: 'xaxis', contextMethod: context.addXaxisAnnotation }); return context; } }, { key: "addYaxisAnnotationExternal", value: function addYaxisAnnotationExternal(params, pushToMemory, context) { this.addAnnotationExternal({ params: params, pushToMemory: pushToMemory, context: context, type: 'yaxis', contextMethod: context.addYaxisAnnotation }); return context; } }, { key: "addPointAnnotationExternal", value: function addPointAnnotationExternal(params, pushToMemory, context) { if (typeof this.invertAxis === 'undefined') { this.invertAxis = context.w.globals.isBarHorizontal; } this.addAnnotationExternal({ params: params, pushToMemory: pushToMemory, context: context, type: 'point', contextMethod: context.addPointAnnotation }); return context; } }, { key: "addAnnotationExternal", value: function addAnnotationExternal(_ref) { var params = _ref.params, pushToMemory = _ref.pushToMemory, context = _ref.context, type = _ref.type, contextMethod = _ref.contextMethod; var me = context; var w = me.w; var parent = w.globals.dom.baseEl.querySelector(".apexcharts-".concat(type, "-annotations")); var index = parent.childNodes.length + 1; var options = new Options(); var axesAnno = Object.assign({}, type === 'xaxis' ? options.xAxisAnnotation : type === 'yaxis' ? options.yAxisAnnotation : options.pointAnnotation); var anno = Utils.extend(axesAnno, params); switch (type) { case 'xaxis': this.addXaxisAnnotation(anno, parent, index); break; case 'yaxis': this.addYaxisAnnotation(anno, parent, index); break; case 'point': this.addPointAnnotation(anno, parent, index); break; } // add background var axesAnnoLabel = w.globals.dom.baseEl.querySelector(".apexcharts-".concat(type, "-annotations .apexcharts-").concat(type, "-annotation-label[rel='").concat(index, "']")); var elRect = this.helpers.addBackgroundToAnno(axesAnnoLabel, anno); if (elRect) { parent.insertBefore(elRect.node, axesAnnoLabel); } if (pushToMemory) { w.globals.memory.methodsToExec.push({ context: me, id: anno.id ? anno.id : Utils.randomId(), method: contextMethod, label: 'addAnnotation', params: params }); } return context; } }, { key: "clearAnnotations", value: function clearAnnotations(ctx) { var w = ctx.w; var annos = w.globals.dom.baseEl.querySelectorAll('.apexcharts-yaxis-annotations, .apexcharts-xaxis-annotations, .apexcharts-point-annotations'); // annotations added externally should be cleared out too w.globals.memory.methodsToExec.map(function (m, i) { if (m.label === 'addText' || m.label === 'addAnnotation') { w.globals.memory.methodsToExec.splice(i, 1); } }); annos = Utils.listToArray(annos); // delete the DOM elements Array.prototype.forEach.call(annos, function (a) { while (a.firstChild) { a.removeChild(a.firstChild); } }); } }, { key: "removeAnnotation", value: function removeAnnotation(ctx, id) { var w = ctx.w; var annos = w.globals.dom.baseEl.querySelectorAll(".".concat(id)); if (annos) { w.globals.memory.methodsToExec.map(function (m, i) { if (m.id === id) { w.globals.memory.methodsToExec.splice(i, 1); } }); Array.prototype.forEach.call(annos, function (a) { a.parentElement.removeChild(a); }); } } }]); return Annotations; }(); /** * DateTime Class to manipulate datetime values. * * @module DateTime **/ var DateTime = /*#__PURE__*/function () { function DateTime(ctx) { _classCallCheck(this, DateTime); this.ctx = ctx; this.w = ctx.w; this.months31 = [1, 3, 5, 7, 8, 10, 12]; this.months30 = [2, 4, 6, 9, 11]; this.daysCntOfYear = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334]; } _createClass(DateTime, [{ key: "isValidDate", value: function isValidDate(date) { return !isNaN(this.parseDate(date)); } }, { key: "getTimeStamp", value: function getTimeStamp(dateStr) { if (!Date.parse(dateStr)) { return dateStr; } var utc = this.w.config.xaxis.labels.datetimeUTC; return !utc ? new Date(dateStr).getTime() : new Date(new Date(dateStr).toISOString().substr(0, 25)).getTime(); } }, { key: "getDate", value: function getDate(timestamp) { var utc = this.w.config.xaxis.labels.datetimeUTC; return utc ? new Date(new Date(timestamp).toUTCString()) : new Date(timestamp); } }, { key: "parseDate", value: function parseDate(dateStr) { var parsed = Date.parse(dateStr); if (!isNaN(parsed)) { return this.getTimeStamp(dateStr); } var output = Date.parse(dateStr.replace(/-/g, '/').replace(/[a-z]+/gi, ' ')); output = this.getTimeStamp(output); return output; } // http://stackoverflow.com/questions/14638018/current-time-formatting-with-javascript#answer-14638191 }, { key: "formatDate", value: function formatDate(date, format) { var locale = this.w.globals.locale; var utc = this.w.config.xaxis.labels.datetimeUTC; var MMMM = ['\x00'].concat(_toConsumableArray(locale.months)); var MMM = ['\x01'].concat(_toConsumableArray(locale.shortMonths)); var dddd = ['\x02'].concat(_toConsumableArray(locale.days)); var ddd = ['\x03'].concat(_toConsumableArray(locale.shortDays)); function ii(i, len) { var s = i + ''; len = len || 2; while (s.length < len) { s = '0' + s; } return s; } var y = utc ? date.getUTCFullYear() : date.getFullYear(); format = format.replace(/(^|[^\\])yyyy+/g, '$1' + y); format = format.replace(/(^|[^\\])yy/g, '$1' + y.toString().substr(2, 2)); format = format.replace(/(^|[^\\])y/g, '$1' + y); var M = (utc ? date.getUTCMonth() : date.getMonth()) + 1; format = format.replace(/(^|[^\\])MMMM+/g, '$1' + MMMM[0]); format = format.replace(/(^|[^\\])MMM/g, '$1' + MMM[0]); format = format.replace(/(^|[^\\])MM/g, '$1' + ii(M)); format = format.replace(/(^|[^\\])M/g, '$1' + M); var d = utc ? date.getUTCDate() : date.getDate(); format = format.replace(/(^|[^\\])dddd+/g, '$1' + dddd[0]); format = format.replace(/(^|[^\\])ddd/g, '$1' + ddd[0]); format = format.replace(/(^|[^\\])dd/g, '$1' + ii(d)); format = format.replace(/(^|[^\\])d/g, '$1' + d); var H = utc ? date.getUTCHours() : date.getHours(); format = format.replace(/(^|[^\\])HH+/g, '$1' + ii(H)); format = format.replace(/(^|[^\\])H/g, '$1' + H); var h = H > 12 ? H - 12 : H === 0 ? 12 : H; format = format.replace(/(^|[^\\])hh+/g, '$1' + ii(h)); format = format.replace(/(^|[^\\])h/g, '$1' + h); var m = utc ? date.getUTCMinutes() : date.getMinutes(); format = format.replace(/(^|[^\\])mm+/g, '$1' + ii(m)); format = format.replace(/(^|[^\\])m/g, '$1' + m); var s = utc ? date.getUTCSeconds() : date.getSeconds(); format = format.replace(/(^|[^\\])ss+/g, '$1' + ii(s)); format = format.replace(/(^|[^\\])s/g, '$1' + s); var f = utc ? date.getUTCMilliseconds() : date.getMilliseconds(); format = format.replace(/(^|[^\\])fff+/g, '$1' + ii(f, 3)); f = Math.round(f / 10); format = format.replace(/(^|[^\\])ff/g, '$1' + ii(f)); f = Math.round(f / 10); format = format.replace(/(^|[^\\])f/g, '$1' + f); var T = H < 12 ? 'AM' : 'PM'; format = format.replace(/(^|[^\\])TT+/g, '$1' + T); format = format.replace(/(^|[^\\])T/g, '$1' + T.charAt(0)); var t = T.toLowerCase(); format = format.replace(/(^|[^\\])tt+/g, '$1' + t); format = format.replace(/(^|[^\\])t/g, '$1' + t.charAt(0)); var tz = -date.getTimezoneOffset(); var K = utc || !tz ? 'Z' : tz > 0 ? '+' : '-'; if (!utc) { tz = Math.abs(tz); var tzHrs = Math.floor(tz / 60); var tzMin = tz % 60; K += ii(tzHrs) + ':' + ii(tzMin); } format = format.replace(/(^|[^\\])K/g, '$1' + K); var day = (utc ? date.getUTCDay() : date.getDay()) + 1; format = format.replace(new RegExp(dddd[0], 'g'), dddd[day]); format = format.replace(new RegExp(ddd[0], 'g'), ddd[day]); format = format.replace(new RegExp(MMMM[0], 'g'), MMMM[M]); format = format.replace(new RegExp(MMM[0], 'g'), MMM[M]); format = format.replace(/\\(.)/g, '$1'); return format; } }, { key: "getTimeUnitsfromTimestamp", value: function getTimeUnitsfromTimestamp(minX, maxX, utc) { var w = this.w; if (w.config.xaxis.min !== undefined) { minX = w.config.xaxis.min; } if (w.config.xaxis.max !== undefined) { maxX = w.config.xaxis.max; } var tsMin = this.getDate(minX); var tsMax = this.getDate(maxX); var minD = this.formatDate(tsMin, 'yyyy MM dd HH mm').split(' '); var maxD = this.formatDate(tsMax, 'yyyy MM dd HH mm').split(' '); return { minMinute: parseInt(minD[4], 10), maxMinute: parseInt(maxD[4], 10), minHour: parseInt(minD[3], 10), maxHour: parseInt(maxD[3], 10), minDate: parseInt(minD[2], 10), maxDate: parseInt(maxD[2], 10), minMonth: parseInt(minD[1], 10) - 1, maxMonth: parseInt(maxD[1], 10) - 1, minYear: parseInt(minD[0], 10), maxYear: parseInt(maxD[0], 10) }; } }, { key: "isLeapYear", value: function isLeapYear(year) { return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0; } }, { key: "calculcateLastDaysOfMonth", value: function calculcateLastDaysOfMonth(month, year, subtract) { var days = this.determineDaysOfMonths(month, year); // whatever days we get, subtract the number of days asked return days - subtract; } }, { key: "determineDaysOfYear", value: function determineDaysOfYear(year) { var days = 365; if (this.isLeapYear(year)) { days = 366; } return days; } }, { key: "determineRemainingDaysOfYear", value: function determineRemainingDaysOfYear(year, month, date) { var dayOfYear = this.daysCntOfYear[month] + date; if (month > 1 && this.isLeapYear()) dayOfYear++; return dayOfYear; } }, { key: "determineDaysOfMonths", value: function determineDaysOfMonths(month, year) { var days = 30; month = Utils.monthMod(month); switch (true) { case this.months30.indexOf(month) > -1: if (month === 2) { if (this.isLeapYear(year)) { days = 29; } else { days = 28; } } break; case this.months31.indexOf(month) > -1: days = 31; break; default: days = 31; break; } return days; } }]); return DateTime; }(); /** * ApexCharts Default Class for setting default options for all chart types. * * @module Defaults **/ var Defaults = /*#__PURE__*/function () { function Defaults(opts) { _classCallCheck(this, Defaults); this.opts = opts; } _createClass(Defaults, [{ key: "line", value: function line() { return { chart: { animations: { easing: 'swing' } }, dataLabels: { enabled: false }, stroke: { width: 5, curve: 'straight' }, markers: { size: 0, hover: { sizeOffset: 6 } }, xaxis: { crosshairs: { width: 1 } } }; } }, { key: "sparkline", value: function sparkline(defaults) { this.opts.yaxis[0].show = false; this.opts.yaxis[0].title.text = ''; this.opts.yaxis[0].axisBorder.show = false; this.opts.yaxis[0].axisTicks.show = false; this.opts.yaxis[0].floating = true; var ret = { grid: { show: false, padding: { left: 0, right: 0, top: 0, bottom: 0 } }, legend: { show: false }, xaxis: { labels: { show: false }, tooltip: { enabled: false }, axisBorder: { show: false }, axisTicks: { show: false } }, chart: { toolbar: { show: false }, zoom: { enabled: false } }, dataLabels: { enabled: false } }; return Utils.extend(defaults, ret); } }, { key: "bar", value: function bar() { return { chart: { stacked: false, animations: { easing: 'swing' } }, plotOptions: { bar: { dataLabels: { position: 'center' } } }, dataLabels: { style: { colors: ['#fff'] }, background: { enabled: false } }, stroke: { width: 0, lineCap: 'square' }, fill: { opacity: 0.85 }, legend: { markers: { shape: 'square', radius: 2, size: 8 } }, tooltip: { shared: false }, xaxis: { tooltip: { enabled: false }, tickPlacement: 'between', crosshairs: { width: 'barWidth', position: 'back', fill: { type: 'gradient' }, dropShadow: { enabled: false }, stroke: { width: 0 } } } }; } }, { key: "candlestick", value: function candlestick() { return { stroke: { width: 1, colors: ['#333'] }, fill: { opacity: 1 }, dataLabels: { enabled: false }, tooltip: { shared: true, custom: function custom(_ref) { var seriesIndex = _ref.seriesIndex, dataPointIndex = _ref.dataPointIndex, w = _ref.w; var o = w.globals.seriesCandleO[seriesIndex][dataPointIndex]; var h = w.globals.seriesCandleH[seriesIndex][dataPointIndex]; var l = w.globals.seriesCandleL[seriesIndex][dataPointIndex]; var c = w.globals.seriesCandleC[seriesIndex][dataPointIndex]; return '
          ' + '
          Open: ' + o + '
          ' + '
          High: ' + h + '
          ' + '
          Low: ' + l + '
          ' + '
          Close: ' + c + '
          ' + '
          '; } }, states: { active: { filter: { type: 'none' } } }, xaxis: { crosshairs: { width: 1 } } }; } }, { key: "rangeBar", value: function rangeBar() { return { stroke: { width: 0, lineCap: 'square' }, plotOptions: { bar: { dataLabels: { position: 'center' } } }, dataLabels: { enabled: false, formatter: function formatter(val, _ref2) { var ctx = _ref2.ctx, seriesIndex = _ref2.seriesIndex, dataPointIndex = _ref2.dataPointIndex, w = _ref2.w; var start = w.globals.seriesRangeStart[seriesIndex][dataPointIndex]; var end = w.globals.seriesRangeEnd[seriesIndex][dataPointIndex]; return end - start; }, background: { enabled: false }, style: { colors: ['#fff'] } }, tooltip: { shared: false, followCursor: true, custom: function custom(_ref3) { var ctx = _ref3.ctx, seriesIndex = _ref3.seriesIndex, dataPointIndex = _ref3.dataPointIndex, y1 = _ref3.y1, y2 = _ref3.y2, w = _ref3.w; var start = w.globals.seriesRangeStart[seriesIndex][dataPointIndex]; var end = w.globals.seriesRangeEnd[seriesIndex][dataPointIndex]; var ylabel = w.globals.labels[dataPointIndex]; var seriesName = w.config.series[seriesIndex].name; var yLbFormatter = w.config.tooltip.y.formatter; var yLbTitleFormatter = w.config.tooltip.y.title.formatter; var opts = { w: w, seriesIndex: seriesIndex, dataPointIndex: dataPointIndex }; if (typeof yLbTitleFormatter === 'function') { seriesName = yLbTitleFormatter(seriesName, opts); } if (y1 && y2) { start = y1; end = y2; if (w.config.series[seriesIndex].data[dataPointIndex].x) { ylabel = w.config.series[seriesIndex].data[dataPointIndex].x + ':'; } if (typeof yLbFormatter === 'function') { ylabel = yLbFormatter(ylabel, opts); } } var startVal = ''; var endVal = ''; var color = w.globals.colors[seriesIndex]; if (w.config.tooltip.x.formatter === undefined) { if (w.config.xaxis.type === 'datetime') { var datetimeObj = new DateTime(ctx); startVal = datetimeObj.formatDate(datetimeObj.getDate(start), w.config.tooltip.x.format); endVal = datetimeObj.formatDate(datetimeObj.getDate(end), w.config.tooltip.x.format); } else { startVal = start; endVal = end; } } else { startVal = w.config.tooltip.x.formatter(start); endVal = w.config.tooltip.x.formatter(end); } return '
          ' + '
          ' + (seriesName ? seriesName : '') + '
          ' + '
          ' + ylabel + ' ' + startVal + ' - ' + endVal + '
          ' + '
          '; } }, xaxis: { tickPlacement: 'between', tooltip: { enabled: false }, crosshairs: { stroke: { width: 0 } } } }; } }, { key: "area", value: function area() { return { stroke: { width: 4 }, fill: { type: 'gradient', gradient: { inverseColors: false, shade: 'light', type: 'vertical', opacityFrom: 0.65, opacityTo: 0.5, stops: [0, 100, 100] } }, markers: { size: 0, hover: { sizeOffset: 6 } }, tooltip: { followCursor: false } }; } }, { key: "brush", value: function brush(defaults) { var ret = { chart: { toolbar: { autoSelected: 'selection', show: false }, zoom: { enabled: false } }, dataLabels: { enabled: false }, stroke: { width: 1 }, tooltip: { enabled: false }, xaxis: { tooltip: { enabled: false } } }; return Utils.extend(defaults, ret); } }, { key: "stacked100", value: function stacked100(opts) { opts.dataLabels = opts.dataLabels || {}; opts.dataLabels.formatter = opts.dataLabels.formatter || undefined; var existingDataLabelFormatter = opts.dataLabels.formatter; opts.yaxis.forEach(function (yaxe, index) { opts.yaxis[index].min = 0; opts.yaxis[index].max = 100; }); var isBar = opts.chart.type === 'bar'; if (isBar) { opts.dataLabels.formatter = existingDataLabelFormatter || function (val) { if (typeof val === 'number') { return val ? val.toFixed(0) + '%' : val; } return val; }; } return opts; } // This function removes the left and right spacing in chart for line/area/scatter if xaxis type = category for those charts by converting xaxis = numeric. Numeric/Datetime xaxis prevents the unnecessary spacing in the left/right of the chart area }, { key: "convertCatToNumeric", value: function convertCatToNumeric(opts) { opts.xaxis.convertedCatToNumeric = true; return opts; } }, { key: "convertCatToNumericXaxis", value: function convertCatToNumericXaxis(opts, ctx, cats) { opts.xaxis.type = 'numeric'; opts.xaxis.labels = opts.xaxis.labels || {}; opts.xaxis.labels.formatter = opts.xaxis.labels.formatter || function (val) { return Utils.isNumber(val) ? Math.floor(val) : val; }; var defaultFormatter = opts.xaxis.labels.formatter; var labels = opts.xaxis.categories && opts.xaxis.categories.length ? opts.xaxis.categories : opts.labels; if (cats && cats.length) { labels = cats.map(function (c) { return c.toString(); }); } if (labels && labels.length) { opts.xaxis.labels.formatter = function (val) { return Utils.isNumber(val) ? defaultFormatter(labels[Math.floor(val) - 1]) : defaultFormatter(val); }; } opts.xaxis.categories = []; opts.labels = []; opts.xaxis.tickAmount = opts.xaxis.tickAmount || 'dataPoints'; return opts; } }, { key: "bubble", value: function bubble() { return { dataLabels: { style: { colors: ['#fff'] } }, tooltip: { shared: false, intersect: true }, xaxis: { crosshairs: { width: 0 } }, fill: { type: 'solid', gradient: { shade: 'light', inverse: true, shadeIntensity: 0.55, opacityFrom: 0.4, opacityTo: 0.8 } } }; } }, { key: "scatter", value: function scatter() { return { dataLabels: { enabled: false }, tooltip: { shared: false, intersect: true }, markers: { size: 6, strokeWidth: 1, hover: { sizeOffset: 2 } } }; } }, { key: "heatmap", value: function heatmap() { return { chart: { stacked: false }, fill: { opacity: 1 }, dataLabels: { style: { colors: ['#fff'] } }, stroke: { colors: ['#fff'] }, tooltip: { followCursor: true, marker: { show: false }, x: { show: false } }, legend: { position: 'top', markers: { shape: 'square', size: 10, offsetY: 2 } }, grid: { padding: { right: 20 } } }; } }, { key: "pie", value: function pie() { return { chart: { toolbar: { show: false } }, plotOptions: { pie: { donut: { labels: { show: false } } } }, dataLabels: { formatter: function formatter(val) { return val.toFixed(1) + '%'; }, style: { colors: ['#fff'] }, dropShadow: { enabled: true } }, stroke: { colors: ['#fff'] }, fill: { opacity: 1, gradient: { shade: 'light', stops: [0, 100] } }, tooltip: { theme: 'dark', fillSeriesColor: true }, legend: { position: 'right' } }; } }, { key: "donut", value: function donut() { return { chart: { toolbar: { show: false } }, dataLabels: { formatter: function formatter(val) { return val.toFixed(1) + '%'; }, style: { colors: ['#fff'] }, dropShadow: { enabled: true } }, stroke: { colors: ['#fff'] }, fill: { opacity: 1, gradient: { shade: 'light', shadeIntensity: 0.35, stops: [80, 100], opacityFrom: 1, opacityTo: 1 } }, tooltip: { theme: 'dark', fillSeriesColor: true }, legend: { position: 'right' } }; } }, { key: "radar", value: function radar() { this.opts.yaxis[0].labels.offsetY = this.opts.yaxis[0].labels.offsetY ? this.opts.yaxis[0].labels.offsetY : 6; return { dataLabels: { enabled: false, style: { fontSize: '11px' } }, stroke: { width: 2 }, markers: { size: 3, strokeWidth: 1, strokeOpacity: 1 }, fill: { opacity: 0.2 }, tooltip: { shared: false, intersect: true, followCursor: true }, grid: { show: false }, xaxis: { labels: { formatter: function formatter(val) { return val; }, style: { colors: ['#a8a8a8'], fontSize: '11px' } }, tooltip: { enabled: false }, crosshairs: { show: false } } }; } }, { key: "radialBar", value: function radialBar() { return { chart: { animations: { dynamicAnimation: { enabled: true, speed: 800 } }, toolbar: { show: false } }, fill: { gradient: { shade: 'dark', shadeIntensity: 0.4, inverseColors: false, type: 'diagonal2', opacityFrom: 1, opacityTo: 1, stops: [70, 98, 100] } }, legend: { show: false, position: 'right' }, tooltip: { enabled: false, fillSeriesColor: true } }; } }]); return Defaults; }(); /** * ApexCharts Config Class for extending user options with pre-defined ApexCharts config. * * @module Config **/ var Config = /*#__PURE__*/function () { function Config(opts) { _classCallCheck(this, Config); this.opts = opts; } _createClass(Config, [{ key: "init", value: function init(_ref) { var responsiveOverride = _ref.responsiveOverride; var opts = this.opts; var options = new Options(); var defaults = new Defaults(opts); this.chartType = opts.chart.type; if (this.chartType === 'histogram') { // technically, a histogram can be drawn by a column chart with no spaces in between opts.chart.type = 'bar'; opts = Utils.extend({ plotOptions: { bar: { columnWidth: '99.99%' } } }, opts); } opts = this.extendYAxis(opts); opts = this.extendAnnotations(opts); var config = options.init(); var newDefaults = {}; if (opts && _typeof(opts) === 'object') { var chartDefaults = {}; var chartTypes = ['line', 'area', 'bar', 'candlestick', 'rangeBar', 'histogram', 'bubble', 'scatter', 'heatmap', 'pie', 'donut', 'radar', 'radialBar']; if (chartTypes.indexOf(opts.chart.type) !== -1) { chartDefaults = defaults[opts.chart.type](); } else { chartDefaults = defaults.line(); } if (opts.chart.brush && opts.chart.brush.enabled) { chartDefaults = defaults.brush(chartDefaults); } if (opts.chart.stacked && opts.chart.stackType === '100%') { opts = defaults.stacked100(opts); } // If user has specified a dark theme, make the tooltip dark too this.checkForDarkTheme(window.Apex); // check global window Apex options this.checkForDarkTheme(opts); // check locally passed options opts.xaxis = opts.xaxis || window.Apex.xaxis || {}; // an important boolean needs to be set here // otherwise all the charts will have this flag set to true window.Apex.xaxis is set globally if (!responsiveOverride) { opts.xaxis.convertedCatToNumeric = false; } opts = this.checkForCatToNumericXAxis(this.chartType, chartDefaults, opts); if (opts.chart.sparkline && opts.chart.sparkline.enabled || window.Apex.chart && window.Apex.chart.sparkline && window.Apex.chart.sparkline.enabled) { chartDefaults = defaults.sparkline(chartDefaults); } newDefaults = Utils.extend(config, chartDefaults); } // config should cascade in this fashion // default-config < global-apex-variable-config < user-defined-config // get GLOBALLY defined options and merge with the default config var mergedWithDefaultConfig = Utils.extend(newDefaults, window.Apex); // get the merged config and extend with user defined config config = Utils.extend(mergedWithDefaultConfig, opts); // some features are not supported. those mismatches should be handled config = this.handleUserInputErrors(config); return config; } }, { key: "checkForCatToNumericXAxis", value: function checkForCatToNumericXAxis(chartType, chartDefaults, opts) { var defaults = new Defaults(opts); var isBarHorizontal = chartType === 'bar' && opts.plotOptions && opts.plotOptions.bar && opts.plotOptions.bar.horizontal; var unsupportedZoom = chartType === 'pie' || chartType === 'donut' || chartType === 'radar' || chartType === 'radialBar' || chartType === 'heatmap'; var notNumericXAxis = opts.xaxis.type !== 'datetime' && opts.xaxis.type !== 'numeric'; var tickPlacement = opts.xaxis.tickPlacement ? opts.xaxis.tickPlacement : chartDefaults.xaxis && chartDefaults.xaxis.tickPlacement; if (!isBarHorizontal && !unsupportedZoom && notNumericXAxis && tickPlacement !== 'between') { opts = defaults.convertCatToNumeric(opts); } return opts; } }, { key: "extendYAxis", value: function extendYAxis(opts) { var options = new Options(); if (typeof opts.yaxis === 'undefined' || !opts.yaxis || Array.isArray(opts.yaxis) && opts.yaxis.length === 0) { opts.yaxis = {}; } // extend global yaxis config (only if object is provided / not an array) if (opts.yaxis.constructor !== Array && window.Apex.yaxis && window.Apex.yaxis.constructor !== Array) { opts.yaxis = Utils.extend(opts.yaxis, window.Apex.yaxis); } // as we can't extend nested object's array with extend, we need to do it first // user can provide either an array or object in yaxis config if (opts.yaxis.constructor !== Array) { // convert the yaxis to array if user supplied object opts.yaxis = [Utils.extend(options.yAxis, opts.yaxis)]; } else { opts.yaxis = Utils.extendArray(opts.yaxis, options.yAxis); } var isLogY = false; opts.yaxis.forEach(function (y) { if (y.logarithmic) { isLogY = true; } }); // A logarithmic chart works correctly when each series has a corresponding y-axis // If this is not the case, we manually create yaxis for multi-series log chart if (isLogY && opts.series.length !== opts.yaxis.length && opts.series.length) { opts.yaxis = opts.series.map(function (s, i) { if (!s.name) { opts.series[i].name = "series-".concat(i + 1); } if (opts.yaxis[i]) { opts.yaxis[i].seriesName = opts.series[i].name; return opts.yaxis[i]; } else { var newYaxis = Utils.extend(options.yAxis, opts.yaxis[0]); newYaxis.show = false; return newYaxis; } }); } if (isLogY && opts.series.length > 1 && opts.series.length !== opts.yaxis.length) { console.warn('A multi-series logarithmic chart should have equal number of series and y-axes. Please make sure to equalize both.'); } return opts; } // annotations also accepts array, so we need to extend them manually }, { key: "extendAnnotations", value: function extendAnnotations(opts) { if (typeof opts.annotations === 'undefined') { opts.annotations = {}; opts.annotations.yaxis = []; opts.annotations.xaxis = []; opts.annotations.points = []; } opts = this.extendYAxisAnnotations(opts); opts = this.extendXAxisAnnotations(opts); opts = this.extendPointAnnotations(opts); return opts; } }, { key: "extendYAxisAnnotations", value: function extendYAxisAnnotations(opts) { var options = new Options(); opts.annotations.yaxis = Utils.extendArray(typeof opts.annotations.yaxis !== 'undefined' ? opts.annotations.yaxis : [], options.yAxisAnnotation); return opts; } }, { key: "extendXAxisAnnotations", value: function extendXAxisAnnotations(opts) { var options = new Options(); opts.annotations.xaxis = Utils.extendArray(typeof opts.annotations.xaxis !== 'undefined' ? opts.annotations.xaxis : [], options.xAxisAnnotation); return opts; } }, { key: "extendPointAnnotations", value: function extendPointAnnotations(opts) { var options = new Options(); opts.annotations.points = Utils.extendArray(typeof opts.annotations.points !== 'undefined' ? opts.annotations.points : [], options.pointAnnotation); return opts; } }, { key: "checkForDarkTheme", value: function checkForDarkTheme(opts) { if (opts.theme && opts.theme.mode === 'dark') { if (!opts.tooltip) { opts.tooltip = {}; } if (opts.tooltip.theme !== 'light') { opts.tooltip.theme = 'dark'; } if (!opts.chart.foreColor) { opts.chart.foreColor = '#f6f7f8'; } if (!opts.theme.palette) { opts.theme.palette = 'palette4'; } } } }, { key: "handleUserInputErrors", value: function handleUserInputErrors(opts) { var config = opts; // conflicting tooltip option. intersect makes sure to focus on 1 point at a time. Shared cannot be used along with it if (config.tooltip.shared && config.tooltip.intersect) { throw new Error('tooltip.shared cannot be enabled when tooltip.intersect is true. Turn off any other option by setting it to false.'); } if ((config.chart.type === 'bar' || config.chart.type === 'rangeBar') && config.plotOptions.bar.horizontal) { // No multiple yaxis for bars if (config.yaxis.length > 1) { throw new Error('Multiple Y Axis for bars are not supported. Switch to column chart by setting plotOptions.bar.horizontal=false'); } // if yaxis is reversed in horizontal bar chart, you should draw the y-axis on right side if (config.yaxis[0].reversed) { config.yaxis[0].opposite = true; } config.xaxis.tooltip.enabled = false; // no xaxis tooltip for horizontal bar config.yaxis[0].tooltip.enabled = false; // no xaxis tooltip for horizontal bar config.chart.zoom.enabled = false; // no zooming for horz bars } if (config.chart.type === 'bar' || config.chart.type === 'rangeBar') { if (config.tooltip.shared) { if (config.xaxis.crosshairs.width === 'barWidth' && config.series.length > 1) { console.warn('crosshairs.width = "barWidth" is only supported in single series, not in a multi-series barChart.'); config.xaxis.crosshairs.width = 'tickWidth'; } if (config.plotOptions.bar.horizontal) { config.states.hover.type = 'none'; config.tooltip.shared = false; } if (!config.tooltip.followCursor) { console.warn('followCursor option in shared columns cannot be turned off. Please set %ctooltip.followCursor: true', 'color: blue;'); config.tooltip.followCursor = true; } } } if (config.chart.type === 'candlestick') { if (config.yaxis[0].reversed) { console.warn('Reversed y-axis in candlestick chart is not supported.'); config.yaxis[0].reversed = false; } } if (config.chart.group && config.yaxis[0].labels.minWidth === 0) { console.warn('It looks like you have multiple charts in synchronization. You must provide yaxis.labels.minWidth which must be EQUAL for all grouped charts to prevent incorrect behaviour.'); } // if user supplied array for stroke width, it will only be applicable to line/area charts, for any other charts, revert back to Number if (Array.isArray(config.stroke.width)) { if (config.chart.type !== 'line' && config.chart.type !== 'area') { console.warn('stroke.width option accepts array only for line and area charts. Reverted back to Number'); config.stroke.width = config.stroke.width[0]; } } return config; } }]); return Config; }(); var Globals = /*#__PURE__*/function () { function Globals() { _classCallCheck(this, Globals); } _createClass(Globals, [{ key: "initGlobalVars", value: function initGlobalVars(gl) { gl.series = []; // the MAIN series array (y values) gl.seriesCandleO = []; gl.seriesCandleH = []; gl.seriesCandleL = []; gl.seriesCandleC = []; gl.seriesRangeStart = []; gl.seriesRangeEnd = []; gl.seriesRangeBarTimeline = []; gl.seriesPercent = []; gl.seriesX = []; gl.seriesZ = []; gl.seriesNames = []; gl.seriesTotals = []; gl.seriesLog = []; gl.stackedSeriesTotals = []; gl.seriesXvalues = []; // we will need this in tooltip (it's x position) // when we will have unequal x values, we will need // some way to get x value depending on mouse pointer gl.seriesYvalues = []; // we will need this when deciding which series // user hovered on gl.labels = []; gl.categoryLabels = []; gl.timescaleLabels = []; gl.noLabelsProvided = false; gl.resizeTimer = null; gl.selectionResizeTimer = null; gl.delayedElements = []; gl.pointsArray = []; gl.dataLabelsRects = []; gl.isXNumeric = false; gl.xaxisLabelsCount = 0; gl.skipLastTimelinelabel = false; gl.skipFirstTimelinelabel = false; gl.x2SpaceAvailable = 0; gl.isDataXYZ = false; gl.isMultiLineX = false; gl.isMultipleYAxis = false; gl.maxY = -Number.MAX_VALUE; gl.minY = Number.MIN_VALUE; gl.minYArr = []; gl.maxYArr = []; gl.maxX = -Number.MAX_VALUE; gl.minX = Number.MAX_VALUE; gl.initialMaxX = -Number.MAX_VALUE; gl.initialMinX = Number.MAX_VALUE; gl.maxDate = 0; gl.minDate = Number.MAX_VALUE; gl.minZ = Number.MAX_VALUE; gl.maxZ = -Number.MAX_VALUE; gl.minXDiff = Number.MAX_VALUE; gl.yAxisScale = []; gl.xAxisScale = null; gl.xAxisTicksPositions = []; gl.yLabelsCoords = []; gl.yTitleCoords = []; gl.barPadForNumericAxis = 0; gl.padHorizontal = 0; gl.xRange = 0; gl.yRange = []; gl.zRange = 0; gl.dataPoints = 0; gl.xTickAmount = 0; } }, { key: "globalVars", value: function globalVars(config) { return { chartID: null, // chart ID - apexcharts-cuid cuid: null, // chart ID - random numbers excluding "apexcharts" part events: { beforeMount: [], mounted: [], updated: [], clicked: [], selection: [], dataPointSelection: [], zoomed: [], scrolled: [] }, colors: [], clientX: null, clientY: null, fill: { colors: [] }, stroke: { colors: [] }, dataLabels: { style: { colors: [] } }, radarPolygons: { fill: { colors: [] } }, markers: { colors: [], size: config.markers.size, largestSize: 0 }, animationEnded: false, isTouchDevice: 'ontouchstart' in window || navigator.msMaxTouchPoints, isDirty: false, // chart has been updated after the initial render. This is different than dataChanged property. isDirty means user manually called some method to update isExecCalled: false, // whether user updated the chart through the exec method initialConfig: null, // we will store the first config user has set to go back when user finishes interactions like zooming and come out of it lastXAxis: [], lastYAxis: [], columnSeries: null, labels: [], // store the text to draw on x axis // Don't mutate the labels, many things including tooltips depends on it! timescaleLabels: [], // store the timescaleLabels Labels in another variable noLabelsProvided: false, // if user didn't provide any categories/labels or x values, fallback to 1,2,3,4... allSeriesCollapsed: false, collapsedSeries: [], // when user collapses a series, it goes into this array collapsedSeriesIndices: [], // this stores the index of the collapsedSeries instead of whole object for quick access ancillaryCollapsedSeries: [], // when user collapses an "alwaysVisible" series, it goes into this array ancillaryCollapsedSeriesIndices: [], // this stores the index of the ancillaryCollapsedSeries whose y-axis is always visible risingSeries: [], // when user re-opens a collapsed series, it goes here dataFormatXNumeric: false, // boolean value to indicate user has passed numeric x values capturedSeriesIndex: -1, capturedDataPointIndex: -1, selectedDataPoints: [], goldenPadding: 35, // this value is used at a lot of places for spacing purpose invalidLogScale: false, // if a user enabled log scale but the data provided is not valid to generate a log scale, turn on this flag ignoreYAxisIndexes: [], // when series are being collapsed in multiple y axes, ignore certain index yAxisSameScaleIndices: [], maxValsInArrayIndex: 0, radialSize: 0, zoomEnabled: config.chart.toolbar.autoSelected === 'zoom' && config.chart.toolbar.tools.zoom && config.chart.zoom.enabled, panEnabled: config.chart.toolbar.autoSelected === 'pan' && config.chart.toolbar.tools.pan, selectionEnabled: config.chart.toolbar.autoSelected === 'selection' && config.chart.toolbar.tools.selection, yaxis: null, mousedown: false, lastClientPosition: {}, // don't reset this variable this the chart is destroyed. It is used to detect right or left mousemove in panning visibleXRange: undefined, yValueDecimal: 0, // are there floating numbers in the series. If yes, this represent the len of the decimals total: 0, SVGNS: 'http://www.w3.org/2000/svg', // svg namespace svgWidth: 0, // the whole svg width svgHeight: 0, // the whole svg height noData: false, // whether there is any data to display or not locale: {}, // the current locale values will be preserved here for global access dom: {}, // for storing all dom nodes in this particular property memory: { methodsToExec: [] }, shouldAnimate: true, skipLastTimelinelabel: false, // when last label is cropped, skip drawing it skipFirstTimelinelabel: false, // when first label is cropped, skip drawing it delayedElements: [], // element which appear after animation has finished axisCharts: true, // chart type = line or area or bar // (refer them also as plot charts in the code) isDataXYZ: false, // bool: data was provided in a {[x,y,z]} pattern resized: false, // bool: user has resized resizeTimer: null, // timeout function to make a small delay before // drawing when user resized comboCharts: false, // bool: whether it's a combination of line/column dataChanged: false, // bool: has data changed dynamically previousPaths: [], // array: when data is changed, it will animate from // previous paths allSeriesHasEqualX: true, pointsArray: [], // store the points positions here to draw later on hover // format is - [[x,y],[x,y]... [x,y]] dataLabelsRects: [], // store the positions of datalabels to prevent collision lastDrawnDataLabelsIndexes: [], x2SpaceAvailable: 0, // space available on the right side after grid area hasNullValues: false, // bool: whether series contains null values easing: null, // function: animation effect to apply zoomed: false, // whether user has zoomed or not gridWidth: 0, // drawable width of actual graphs (series paths) gridHeight: 0, // drawable height of actual graphs (series paths) rotateXLabels: false, defaultLabels: false, xLabelFormatter: undefined, // formatter for x axis labels yLabelFormatters: [], xaxisTooltipFormatter: undefined, // formatter for x axis tooltip ttKeyFormatter: undefined, ttVal: undefined, ttZFormatter: undefined, LINE_HEIGHT_RATIO: 1.618, xAxisLabelsHeight: 0, yAxisLabelsWidth: 0, scaleX: 1, scaleY: 1, translateX: 0, translateY: 0, translateYAxisX: [], yAxisWidths: [], translateXAxisY: 0, translateXAxisX: 0, tooltip: null }; } }, { key: "init", value: function init(config) { var globals = this.globalVars(config); this.initGlobalVars(globals); globals.initialConfig = Utils.extend({}, config); globals.initialSeries = JSON.parse(JSON.stringify(globals.initialConfig.series)); globals.lastXAxis = JSON.parse(JSON.stringify(globals.initialConfig.xaxis)); globals.lastYAxis = JSON.parse(JSON.stringify(globals.initialConfig.yaxis)); return globals; } }]); return Globals; }(); /** * ApexCharts Base Class for extending user options with pre-defined ApexCharts config. * * @module Base **/ var Base = /*#__PURE__*/function () { function Base(opts) { _classCallCheck(this, Base); this.opts = opts; } _createClass(Base, [{ key: "init", value: function init() { var config = new Config(this.opts).init({ responsiveOverride: false }); var globals = new Globals().init(config); var w = { config: config, globals: globals }; return w; } }]); return Base; }(); /* ** Util functions which are dependent on ApexCharts instance */ var CoreUtils = /*#__PURE__*/function () { function CoreUtils(ctx) { _classCallCheck(this, CoreUtils); this.ctx = ctx; this.w = ctx.w; } _createClass(CoreUtils, [{ key: "getStackedSeriesTotals", /** * @memberof CoreUtils * returns the sum of all individual values in a multiple stacked series * Eg. w.globals.series = [[32,33,43,12], [2,3,5,1]] * @return [34,36,48,13] **/ value: function getStackedSeriesTotals() { var w = this.w; var total = []; if (w.globals.series.length === 0) return total; for (var i = 0; i < w.globals.series[w.globals.maxValsInArrayIndex].length; i++) { var t = 0; for (var j = 0; j < w.globals.series.length; j++) { if (typeof w.globals.series[j][i] !== 'undefined') { t += w.globals.series[j][i]; } } total.push(t); } w.globals.stackedSeriesTotals = total; return total; } // get total of the all values inside all series }, { key: "getSeriesTotalByIndex", value: function getSeriesTotalByIndex() { var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; if (index === null) { // non-plot chart types - pie / donut / circle return this.w.config.series.reduce(function (acc, cur) { return acc + cur; }, 0); } else { // axis charts - supporting multiple series return this.w.globals.series[index].reduce(function (acc, cur) { return acc + cur; }, 0); } } }, { key: "isSeriesNull", value: function isSeriesNull() { var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; var r = []; if (index === null) { // non-plot chart types - pie / donut / circle r = this.w.config.series.filter(function (d) { return d !== null; }); } else { // axis charts - supporting multiple series r = this.w.config.series[index].data.filter(function (d) { return d !== null; }); } return r.length === 0; } }, { key: "seriesHaveSameValues", value: function seriesHaveSameValues(index) { return this.w.globals.series[index].every(function (val, i, arr) { return val === arr[0]; }); } }, { key: "getCategoryLabels", value: function getCategoryLabels(labels) { var w = this.w; var catLabels = labels.slice(); if (w.config.xaxis.convertedCatToNumeric) { catLabels = labels.map(function (i) { return w.config.xaxis.labels.formatter(i - w.globals.minX + 1); }); } return catLabels; } // maxValsInArrayIndex is the index of series[] which has the largest number of items }, { key: "getLargestSeries", value: function getLargestSeries() { var w = this.w; w.globals.maxValsInArrayIndex = w.globals.series.map(function (a) { return a.length; }).indexOf(Math.max.apply(Math, w.globals.series.map(function (a) { return a.length; }))); } }, { key: "getLargestMarkerSize", value: function getLargestMarkerSize() { var w = this.w; var size = 0; w.globals.markers.size.forEach(function (m) { size = Math.max(size, m); }); w.globals.markers.largestSize = size; return size; } /** * @memberof Core * returns the sum of all values in a series * Eg. w.globals.series = [[32,33,43,12], [2,3,5,1]] * @return [120, 11] **/ }, { key: "getSeriesTotals", value: function getSeriesTotals() { var w = this.w; w.globals.seriesTotals = w.globals.series.map(function (ser, index) { var total = 0; if (Array.isArray(ser)) { for (var j = 0; j < ser.length; j++) { total += ser[j]; } } else { // for pie/donuts/gauges total += ser; } return total; }); } }, { key: "getSeriesTotalsXRange", value: function getSeriesTotalsXRange(minX, maxX) { var w = this.w; var seriesTotalsXRange = w.globals.series.map(function (ser, index) { var total = 0; for (var j = 0; j < ser.length; j++) { if (w.globals.seriesX[index][j] > minX && w.globals.seriesX[index][j] < maxX) { total += ser[j]; } } return total; }); return seriesTotalsXRange; } /** * @memberof CoreUtils * returns the percentage value of all individual values which can be used in a 100% stacked series * Eg. w.globals.series = [[32, 33, 43, 12], [2, 3, 5, 1]] * @return [[94.11, 91.66, 89.58, 92.30], [5.88, 8.33, 10.41, 7.7]] **/ }, { key: "getPercentSeries", value: function getPercentSeries() { var w = this.w; w.globals.seriesPercent = w.globals.series.map(function (ser, index) { var seriesPercent = []; if (Array.isArray(ser)) { for (var j = 0; j < ser.length; j++) { var total = w.globals.stackedSeriesTotals[j]; var percent = 0; if (total) { percent = 100 * ser[j] / total; } seriesPercent.push(percent); } } else { var _total = w.globals.seriesTotals.reduce(function (acc, val) { return acc + val; }, 0); var _percent = 100 * ser / _total; seriesPercent.push(_percent); } return seriesPercent; }); } }, { key: "getCalculatedRatios", value: function getCalculatedRatios() { var gl = this.w.globals; var yRatio = []; var invertedYRatio = 0; var xRatio = 0; var initialXRatio = 0; var invertedXRatio = 0; var zRatio = 0; var baseLineY = []; var baseLineInvertedY = 0.1; var baseLineX = 0; gl.yRange = []; if (gl.isMultipleYAxis) { for (var i = 0; i < gl.minYArr.length; i++) { gl.yRange.push(Math.abs(gl.minYArr[i] - gl.maxYArr[i])); baseLineY.push(0); } } else { gl.yRange.push(Math.abs(gl.minY - gl.maxY)); } gl.xRange = Math.abs(gl.maxX - gl.minX); gl.zRange = Math.abs(gl.maxZ - gl.minZ); // multiple y axis for (var _i = 0; _i < gl.yRange.length; _i++) { yRatio.push(gl.yRange[_i] / gl.gridHeight); } xRatio = gl.xRange / gl.gridWidth; initialXRatio = Math.abs(gl.initialMaxX - gl.initialMinX) / gl.gridWidth; invertedYRatio = gl.yRange / gl.gridWidth; invertedXRatio = gl.xRange / gl.gridHeight; zRatio = gl.zRange / gl.gridHeight * 16; if (!zRatio) { zRatio = 1; } if (gl.minY !== Number.MIN_VALUE && Math.abs(gl.minY) !== 0) { // Negative numbers present in series gl.hasNegs = true; } if (gl.isMultipleYAxis) { baseLineY = []; // baseline variables is the 0 of the yaxis which will be needed when there are negatives for (var _i2 = 0; _i2 < yRatio.length; _i2++) { baseLineY.push(-gl.minYArr[_i2] / yRatio[_i2]); } } else { baseLineY.push(-gl.minY / yRatio[0]); if (gl.minY !== Number.MIN_VALUE && Math.abs(gl.minY) !== 0) { baseLineInvertedY = -gl.minY / invertedYRatio; // this is for bar chart baseLineX = gl.minX / xRatio; } } return { yRatio: yRatio, invertedYRatio: invertedYRatio, zRatio: zRatio, xRatio: xRatio, initialXRatio: initialXRatio, invertedXRatio: invertedXRatio, baseLineInvertedY: baseLineInvertedY, baseLineY: baseLineY, baseLineX: baseLineX }; } }, { key: "getLogSeries", value: function getLogSeries(series) { var w = this.w; w.globals.seriesLog = series.map(function (s, i) { if (w.config.yaxis[i] && w.config.yaxis[i].logarithmic) { return s.map(function (d) { if (d === null) return null; var logVal = (Math.log(d) - Math.log(w.globals.minYArr[i])) / (Math.log(w.globals.maxYArr[i]) - Math.log(w.globals.minYArr[i])); return logVal; }); } else { return s; } }); return w.globals.invalidLogScale ? series : w.globals.seriesLog; } }, { key: "getLogYRatios", value: function getLogYRatios(yRatio) { var _this = this; var w = this.w; var gl = this.w.globals; gl.yLogRatio = yRatio.slice(); gl.logYRange = gl.yRange.map(function (yRange, i) { if (w.config.yaxis[i] && _this.w.config.yaxis[i].logarithmic) { var maxY = -Number.MAX_VALUE; var minY = Number.MIN_VALUE; var range = 1; gl.seriesLog.forEach(function (s, si) { s.forEach(function (v) { if (w.config.yaxis[si] && w.config.yaxis[si].logarithmic) { maxY = Math.max(v, maxY); minY = Math.min(v, minY); } }); }); range = Math.pow(gl.yRange[i], Math.abs(minY - maxY) / gl.yRange[i]); gl.yLogRatio[i] = range / gl.gridHeight; return range; } }); return gl.invalidLogScale ? yRatio.slice() : gl.yLogRatio; } // Some config objects can be array - and we need to extend them correctly }], [{ key: "checkComboSeries", value: function checkComboSeries(series) { var comboCharts = false; var comboBarCount = 0; // if user specified a type in series too, turn on comboCharts flag if (series.length && typeof series[0].type !== 'undefined') { comboCharts = true; series.forEach(function (s) { if (s.type === 'bar' || s.type === 'column' || s.type === 'candlestick') { comboBarCount++; } }); } return { comboBarCount: comboBarCount, comboCharts: comboCharts }; } }, { key: "extendArrayProps", value: function extendArrayProps(configInstance, options) { if (options.yaxis) { options = configInstance.extendYAxis(options); } if (options.annotations) { if (options.annotations.yaxis) { options = configInstance.extendYAxisAnnotations(options); } if (options.annotations.xaxis) { options = configInstance.extendXAxisAnnotations(options); } if (options.annotations.points) { options = configInstance.extendPointAnnotations(options); } } return options; } }]); return CoreUtils; }(); /** * ApexCharts Fill Class for setting fill options of the paths. * * @module Fill **/ var Fill = /*#__PURE__*/function () { function Fill(ctx) { _classCallCheck(this, Fill); this.ctx = ctx; this.w = ctx.w; this.opts = null; this.seriesIndex = 0; } _createClass(Fill, [{ key: "clippedImgArea", value: function clippedImgArea(params) { var w = this.w; var cnf = w.config; var svgW = parseInt(w.globals.gridWidth, 10); var svgH = parseInt(w.globals.gridHeight, 10); var size = svgW > svgH ? svgW : svgH; var fillImg = params.image; var imgWidth = 0; var imgHeight = 0; if (typeof params.width === 'undefined' && typeof params.height === 'undefined') { if (cnf.fill.image.width !== undefined && cnf.fill.image.height !== undefined) { imgWidth = cnf.fill.image.width + 1; imgHeight = cnf.fill.image.height; } else { imgWidth = size + 1; imgHeight = size; } } else { imgWidth = params.width; imgHeight = params.height; } var elPattern = document.createElementNS(w.globals.SVGNS, 'pattern'); Graphics.setAttrs(elPattern, { id: params.patternID, patternUnits: params.patternUnits ? params.patternUnits : 'userSpaceOnUse', width: imgWidth + 'px', height: imgHeight + 'px' }); var elImage = document.createElementNS(w.globals.SVGNS, 'image'); elPattern.appendChild(elImage); elImage.setAttributeNS(window.SVG.xlink, 'href', fillImg); Graphics.setAttrs(elImage, { x: 0, y: 0, preserveAspectRatio: 'none', width: imgWidth + 'px', height: imgHeight + 'px' }); elImage.style.opacity = params.opacity; w.globals.dom.elDefs.node.appendChild(elPattern); } }, { key: "getSeriesIndex", value: function getSeriesIndex(opts) { var w = this.w; if ((w.config.chart.type === 'bar' || w.config.chart.type === 'rangeBar') && w.config.plotOptions.bar.distributed || w.config.chart.type === 'heatmap') { this.seriesIndex = opts.seriesNumber; } else { this.seriesIndex = opts.seriesNumber % w.globals.series.length; } return this.seriesIndex; } }, { key: "fillPath", value: function fillPath(opts) { var w = this.w; this.opts = opts; var cnf = this.w.config; var pathFill; var patternFill, gradientFill; this.seriesIndex = this.getSeriesIndex(opts); var fillColors = this.getFillColors(); var fillColor = fillColors[this.seriesIndex]; if (typeof fillColor === 'function') { fillColor = fillColor({ seriesIndex: this.seriesIndex, dataPointIndex: opts.dataPointIndex, value: opts.value, w: w }); } var fillType = this.getFillType(this.seriesIndex); var fillOpacity = Array.isArray(cnf.fill.opacity) ? cnf.fill.opacity[this.seriesIndex] : cnf.fill.opacity; var defaultColor = fillColor; if (opts.color) { fillColor = opts.color; } if (fillColor.indexOf('rgb') === -1) { if (fillColor.length < 9) { // if the hex contains alpha and is of 9 digit, skip the opacity defaultColor = Utils.hexToRgba(fillColor, fillOpacity); } } else { if (fillColor.indexOf('rgba') > -1) { fillOpacity = Utils.getOpacityFromRGBA(fillColor); } } if (opts.opacity) fillOpacity = opts.opacity; if (fillType === 'pattern') { patternFill = this.handlePatternFill(patternFill, fillColor, fillOpacity, defaultColor); } if (fillType === 'gradient') { gradientFill = this.handleGradientFill(fillColor, fillOpacity, this.seriesIndex); } if (fillType === 'image') { var imgSrc = cnf.fill.image.src; var patternID = opts.patternID ? opts.patternID : ''; this.clippedImgArea({ opacity: fillOpacity, image: Array.isArray(imgSrc) ? opts.seriesNumber < imgSrc.length ? imgSrc[opts.seriesNumber] : imgSrc[0] : imgSrc, width: opts.width ? opts.width : undefined, height: opts.height ? opts.height : undefined, patternUnits: opts.patternUnits, patternID: "pattern".concat(w.globals.cuid).concat(opts.seriesNumber + 1).concat(patternID) }); pathFill = "url(#pattern".concat(w.globals.cuid).concat(opts.seriesNumber + 1).concat(patternID, ")"); } else if (fillType === 'gradient') { pathFill = gradientFill; } else if (fillType === 'pattern') { pathFill = patternFill; } else { pathFill = defaultColor; } // override pattern/gradient if opts.solid is true if (opts.solid) { pathFill = defaultColor; } return pathFill; } }, { key: "getFillType", value: function getFillType(seriesIndex) { var w = this.w; if (Array.isArray(w.config.fill.type)) { return w.config.fill.type[seriesIndex]; } else { return w.config.fill.type; } } }, { key: "getFillColors", value: function getFillColors() { var w = this.w; var cnf = w.config; var opts = this.opts; var fillColors = []; if (w.globals.comboCharts) { if (w.config.series[this.seriesIndex].type === 'line') { if (w.globals.stroke.colors instanceof Array) { fillColors = w.globals.stroke.colors; } else { fillColors.push(w.globals.stroke.colors); } } else { if (w.globals.fill.colors instanceof Array) { fillColors = w.globals.fill.colors; } else { fillColors.push(w.globals.fill.colors); } } } else { if (cnf.chart.type === 'line') { if (w.globals.stroke.colors instanceof Array) { fillColors = w.globals.stroke.colors; } else { fillColors.push(w.globals.stroke.colors); } } else { if (w.globals.fill.colors instanceof Array) { fillColors = w.globals.fill.colors; } else { fillColors.push(w.globals.fill.colors); } } } // colors passed in arguments if (typeof opts.fillColors !== 'undefined') { fillColors = []; if (opts.fillColors instanceof Array) { fillColors = opts.fillColors.slice(); } else { fillColors.push(opts.fillColors); } } return fillColors; } }, { key: "handlePatternFill", value: function handlePatternFill(patternFill, fillColor, fillOpacity, defaultColor) { var cnf = this.w.config; var opts = this.opts; var graphics = new Graphics(this.ctx); var patternStrokeWidth = cnf.fill.pattern.strokeWidth === undefined ? Array.isArray(cnf.stroke.width) ? cnf.stroke.width[this.seriesIndex] : cnf.stroke.width : Array.isArray(cnf.fill.pattern.strokeWidth) ? cnf.fill.pattern.strokeWidth[this.seriesIndex] : cnf.fill.pattern.strokeWidth; var patternLineColor = fillColor; if (cnf.fill.pattern.style instanceof Array) { if (typeof cnf.fill.pattern.style[opts.seriesNumber] !== 'undefined') { var pf = graphics.drawPattern(cnf.fill.pattern.style[opts.seriesNumber], cnf.fill.pattern.width, cnf.fill.pattern.height, patternLineColor, patternStrokeWidth, fillOpacity); patternFill = pf; } else { patternFill = defaultColor; } } else { patternFill = graphics.drawPattern(cnf.fill.pattern.style, cnf.fill.pattern.width, cnf.fill.pattern.height, patternLineColor, patternStrokeWidth, fillOpacity); } return patternFill; } }, { key: "handleGradientFill", value: function handleGradientFill(fillColor, fillOpacity, i) { var cnf = this.w.config; var opts = this.opts; var graphics = new Graphics(this.ctx); var utils = new Utils(); var type = cnf.fill.gradient.type; var gradientFrom = fillColor; var gradientTo; var opacityFrom = cnf.fill.gradient.opacityFrom === undefined ? fillOpacity : Array.isArray(cnf.fill.gradient.opacityFrom) ? cnf.fill.gradient.opacityFrom[i] : cnf.fill.gradient.opacityFrom; if (gradientFrom.indexOf('rgba') > -1) { opacityFrom = Utils.getOpacityFromRGBA(gradientFrom); } var opacityTo = cnf.fill.gradient.opacityTo === undefined ? fillOpacity : Array.isArray(cnf.fill.gradient.opacityTo) ? cnf.fill.gradient.opacityTo[i] : cnf.fill.gradient.opacityTo; if (cnf.fill.gradient.gradientToColors === undefined || cnf.fill.gradient.gradientToColors.length === 0) { if (cnf.fill.gradient.shade === 'dark') { gradientTo = utils.shadeColor(parseFloat(cnf.fill.gradient.shadeIntensity) * -1, fillColor.indexOf('rgb') > -1 ? Utils.rgb2hex(fillColor) : fillColor); } else { gradientTo = utils.shadeColor(parseFloat(cnf.fill.gradient.shadeIntensity), fillColor.indexOf('rgb') > -1 ? Utils.rgb2hex(fillColor) : fillColor); } } else { var gToColor = cnf.fill.gradient.gradientToColors[opts.seriesNumber]; gradientTo = gToColor; if (gToColor.indexOf('rgba') > -1) { opacityTo = Utils.getOpacityFromRGBA(gToColor); } } if (cnf.fill.gradient.inverseColors) { var t = gradientFrom; gradientFrom = gradientTo; gradientTo = t; } if (gradientFrom.indexOf('rgb') > -1) { gradientFrom = Utils.rgb2hex(gradientFrom); } if (gradientTo.indexOf('rgb') > -1) { gradientTo = Utils.rgb2hex(gradientTo); } return graphics.drawGradient(type, gradientFrom, gradientTo, opacityFrom, opacityTo, opts.size, cnf.fill.gradient.stops, cnf.fill.gradient.colorStops, i); } }]); return Fill; }(); /** * ApexCharts Markers Class for drawing points on y values in axes charts. * * @module Markers **/ var Markers = /*#__PURE__*/function () { function Markers(ctx, opts) { _classCallCheck(this, Markers); this.ctx = ctx; this.w = ctx.w; } _createClass(Markers, [{ key: "setGlobalMarkerSize", value: function setGlobalMarkerSize() { var w = this.w; w.globals.markers.size = Array.isArray(w.config.markers.size) ? w.config.markers.size : [w.config.markers.size]; if (w.globals.markers.size.length > 0) { if (w.globals.markers.size.length < w.globals.series.length + 1) { for (var i = 0; i <= w.globals.series.length; i++) { if (typeof w.globals.markers.size[i] === 'undefined') { w.globals.markers.size.push(w.globals.markers.size[0]); } } } } else { w.globals.markers.size = w.config.series.map(function (s) { return w.config.markers.size; }); } } }, { key: "plotChartMarkers", value: function plotChartMarkers(pointsPos, seriesIndex, j, pSize) { var alwaysDrawMarker = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false; var w = this.w; var i = seriesIndex; var p = pointsPos; var elPointsWrap = null; var graphics = new Graphics(this.ctx); var point; if (w.globals.markers.size[seriesIndex] > 0 || alwaysDrawMarker) { elPointsWrap = graphics.group({ class: alwaysDrawMarker ? '' : 'apexcharts-series-markers' }); elPointsWrap.attr('clip-path', "url(#gridRectMarkerMask".concat(w.globals.cuid, ")")); } if (p.x instanceof Array) { for (var q = 0; q < p.x.length; q++) { var dataPointIndex = j; // a small hack as we have 2 points for the first val to connect it if (j === 1 && q === 0) dataPointIndex = 0; if (j === 1 && q === 1) dataPointIndex = 1; var PointClasses = 'apexcharts-marker'; if ((w.config.chart.type === 'line' || w.config.chart.type === 'area') && !w.globals.comboCharts && !w.config.tooltip.intersect) { PointClasses += ' no-pointer-events'; } var shouldMarkerDraw = Array.isArray(w.config.markers.size) ? w.globals.markers.size[seriesIndex] > 0 : w.config.markers.size > 0; if (shouldMarkerDraw || alwaysDrawMarker) { if (Utils.isNumber(p.y[q])) { PointClasses += " w".concat(Utils.randomId()); } else { PointClasses = 'apexcharts-nullpoint'; } var opts = this.getMarkerConfig(PointClasses, seriesIndex, dataPointIndex); if (w.config.series[i].data[j]) { if (w.config.series[i].data[j].fillColor) { opts.pointFillColor = w.config.series[i].data[j].fillColor; } if (w.config.series[i].data[j].strokeColor) { opts.pointStrokeColor = w.config.series[i].data[j].strokeColor; } } if (pSize) { opts.pSize = pSize; } point = graphics.drawMarker(p.x[q], p.y[q], opts); point.attr('rel', dataPointIndex); point.attr('j', dataPointIndex); point.attr('index', seriesIndex); point.node.setAttribute('default-marker-size', opts.pSize); var filters = new Filters(this.ctx); filters.setSelectionFilter(point, seriesIndex, dataPointIndex); this.addEvents(point); if (elPointsWrap) { elPointsWrap.add(point); } } else { // dynamic array creation - multidimensional if (typeof w.globals.pointsArray[seriesIndex] === 'undefined') w.globals.pointsArray[seriesIndex] = []; w.globals.pointsArray[seriesIndex].push([p.x[q], p.y[q]]); } } } return elPointsWrap; } }, { key: "getMarkerConfig", value: function getMarkerConfig(cssClass, seriesIndex) { var dataPointIndex = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; var w = this.w; var pStyle = this.getMarkerStyle(seriesIndex); var pSize = w.globals.markers.size[seriesIndex]; var m = w.config.markers; // discrete markers is an option where user can specify a particular marker with different size and color if (dataPointIndex !== null && m.discrete.length) { m.discrete.map(function (marker) { if (marker.seriesIndex === seriesIndex && marker.dataPointIndex === dataPointIndex) { pStyle.pointStrokeColor = marker.strokeColor; pStyle.pointFillColor = marker.fillColor; pSize = marker.size; } }); } return { pSize: pSize, pRadius: m.radius, pWidth: m.strokeWidth instanceof Array ? m.strokeWidth[seriesIndex] : m.strokeWidth, pointStrokeColor: pStyle.pointStrokeColor, pointFillColor: pStyle.pointFillColor, shape: m.shape instanceof Array ? m.shape[seriesIndex] : m.shape, class: cssClass, pointStrokeOpacity: m.strokeOpacity instanceof Array ? m.strokeOpacity[seriesIndex] : m.strokeOpacity, pointStrokeDashArray: m.strokeDashArray instanceof Array ? m.strokeDashArray[seriesIndex] : m.strokeDashArray, pointFillOpacity: m.fillOpacity instanceof Array ? m.fillOpacity[seriesIndex] : m.fillOpacity, seriesIndex: seriesIndex }; } }, { key: "addEvents", value: function addEvents(circle) { var w = this.w; var graphics = new Graphics(this.ctx); circle.node.addEventListener('mouseenter', graphics.pathMouseEnter.bind(this.ctx, circle)); circle.node.addEventListener('mouseleave', graphics.pathMouseLeave.bind(this.ctx, circle)); circle.node.addEventListener('mousedown', graphics.pathMouseDown.bind(this.ctx, circle)); circle.node.addEventListener('click', w.config.markers.onClick); circle.node.addEventListener('dblclick', w.config.markers.onDblClick); circle.node.addEventListener('touchstart', graphics.pathMouseDown.bind(this.ctx, circle), { passive: true }); } }, { key: "getMarkerStyle", value: function getMarkerStyle(seriesIndex) { var w = this.w; var colors = w.globals.markers.colors; var strokeColors = w.config.markers.strokeColor || w.config.markers.strokeColors; var pointStrokeColor = strokeColors instanceof Array ? strokeColors[seriesIndex] : strokeColors; var pointFillColor = colors instanceof Array ? colors[seriesIndex] : colors; return { pointStrokeColor: pointStrokeColor, pointFillColor: pointFillColor }; } }]); return Markers; }(); /** * ApexCharts Scatter Class. * This Class also handles bubbles chart as currently there is no major difference in drawing them, * @module Scatter **/ var Scatter = /*#__PURE__*/function () { function Scatter(ctx) { _classCallCheck(this, Scatter); this.ctx = ctx; this.w = ctx.w; this.initialAnim = this.w.config.chart.animations.enabled; this.dynamicAnim = this.initialAnim && this.w.config.chart.animations.dynamicAnimation.enabled; } _createClass(Scatter, [{ key: "draw", value: function draw(elSeries, j, opts) { var w = this.w; var graphics = new Graphics(this.ctx); var realIndex = opts.realIndex; var pointsPos = opts.pointsPos; var zRatio = opts.zRatio; var elPointsMain = opts.elParent; var elPointsWrap = graphics.group({ class: "apexcharts-series-markers apexcharts-series-".concat(w.config.chart.type) }); elPointsWrap.attr('clip-path', "url(#gridRectMarkerMask".concat(w.globals.cuid, ")")); if (pointsPos.x instanceof Array) { for (var q = 0; q < pointsPos.x.length; q++) { var dataPointIndex = j + 1; var shouldDraw = true; // a small hack as we have 2 points for the first val to connect it if (j === 0 && q === 0) dataPointIndex = 0; if (j === 0 && q === 1) dataPointIndex = 1; var radius = 0; var finishRadius = w.globals.markers.size[realIndex]; if (zRatio !== Infinity) { // means we have a bubble finishRadius = w.globals.seriesZ[realIndex][dataPointIndex] / zRatio; var bubble = w.config.plotOptions.bubble; if (bubble.minBubbleRadius && finishRadius < bubble.minBubbleRadius) { finishRadius = bubble.minBubbleRadius; } if (bubble.maxBubbleRadius && finishRadius > bubble.maxBubbleRadius) { finishRadius = bubble.maxBubbleRadius; } } if (!w.config.chart.animations.enabled) { radius = finishRadius; } var x = pointsPos.x[q]; var y = pointsPos.y[q]; radius = radius || 0; if (y === null || typeof w.globals.series[realIndex][dataPointIndex] === 'undefined') { shouldDraw = false; } if (shouldDraw) { var circle = this.drawPoint(x, y, radius, finishRadius, realIndex, dataPointIndex, j); elPointsWrap.add(circle); } elPointsMain.add(elPointsWrap); } } } }, { key: "drawPoint", value: function drawPoint(x, y, radius, finishRadius, realIndex, dataPointIndex, j) { var w = this.w; var i = realIndex; var anim = new Animations(this.ctx); var filters = new Filters(this.ctx); var fill = new Fill(this.ctx); var markers = new Markers(this.ctx); var graphics = new Graphics(this.ctx); var markerConfig = markers.getMarkerConfig('apexcharts-marker', i); var pathFillCircle = fill.fillPath({ seriesNumber: realIndex, dataPointIndex: dataPointIndex, patternUnits: 'objectBoundingBox', value: w.globals.series[realIndex][j] }); var circle = graphics.drawCircle(radius); if (w.config.series[i].data[dataPointIndex]) { if (w.config.series[i].data[dataPointIndex].fillColor) { pathFillCircle = w.config.series[i].data[dataPointIndex].fillColor; } } circle.attr({ cx: x, cy: y, fill: pathFillCircle, stroke: markerConfig.pointStrokeColor, 'stroke-width': markerConfig.pWidth, 'stroke-dasharray': markerConfig.pointStrokeDashArray, 'stroke-opacity': markerConfig.pointStrokeOpacity }); if (w.config.chart.dropShadow.enabled) { var dropShadow = w.config.chart.dropShadow; filters.dropShadow(circle, dropShadow, realIndex); } if (this.initialAnim && !w.globals.dataChanged) { var speed = 1; if (!w.globals.resized) { speed = w.config.chart.animations.speed; } anim.animateCircleRadius(circle, 0, finishRadius, speed, w.globals.easing, function () { window.setTimeout(function () { anim.animationCompleted(circle); }, 100); }); } if (w.globals.dataChanged) { if (this.dynamicAnim) { var _speed = w.config.chart.animations.dynamicAnimation.speed; var prevX, prevY, prevR; var prevPathJ = null; prevPathJ = w.globals.previousPaths[realIndex] && w.globals.previousPaths[realIndex][j]; if (typeof prevPathJ !== 'undefined' && prevPathJ !== null) { // series containing less elements will ignore these values and revert to 0 prevX = prevPathJ.x; prevY = prevPathJ.y; prevR = typeof prevPathJ.r !== 'undefined' ? prevPathJ.r : finishRadius; } for (var cs = 0; cs < w.globals.collapsedSeries.length; cs++) { if (w.globals.collapsedSeries[cs].index === realIndex) { _speed = 1; finishRadius = 0; } } if (x === 0 && y === 0) finishRadius = 0; anim.animateCircle(circle, { cx: prevX, cy: prevY, r: prevR }, { cx: x, cy: y, r: finishRadius }, _speed, w.globals.easing); } else { circle.attr({ r: finishRadius }); } } circle.attr({ rel: dataPointIndex, j: dataPointIndex, index: realIndex, 'default-marker-size': finishRadius }); filters.setSelectionFilter(circle, realIndex, dataPointIndex); markers.addEvents(circle); circle.node.classList.add('apexcharts-marker'); return circle; } }, { key: "centerTextInBubble", value: function centerTextInBubble(y) { var w = this.w; y = y + parseInt(w.config.dataLabels.style.fontSize, 10) / 4; return { y: y }; } }]); return Scatter; }(); /** * ApexCharts DataLabels Class for drawing dataLabels on Axes based Charts. * * @module DataLabels **/ var DataLabels = /*#__PURE__*/function () { function DataLabels(ctx) { _classCallCheck(this, DataLabels); this.ctx = ctx; this.w = ctx.w; } // When there are many datalabels to be printed, and some of them overlaps each other in the same series, this method will take care of that // Also, when datalabels exceeds the drawable area and get clipped off, we need to adjust and move some pixels to make them visible again _createClass(DataLabels, [{ key: "dataLabelsCorrection", value: function dataLabelsCorrection(x, y, val, i, dataPointIndex, alwaysDrawDataLabel, fontSize) { var w = this.w; var graphics = new Graphics(this.ctx); var drawnextLabel = false; // var textRects = graphics.getTextRects(val, fontSize); var width = textRects.width; var height = textRects.height; // first value in series, so push an empty array if (typeof w.globals.dataLabelsRects[i] === 'undefined') w.globals.dataLabelsRects[i] = []; // then start pushing actual rects in that sub-array w.globals.dataLabelsRects[i].push({ x: x, y: y, width: width, height: height }); var len = w.globals.dataLabelsRects[i].length - 2; var lastDrawnIndex = typeof w.globals.lastDrawnDataLabelsIndexes[i] !== 'undefined' ? w.globals.lastDrawnDataLabelsIndexes[i][w.globals.lastDrawnDataLabelsIndexes[i].length - 1] : 0; if (typeof w.globals.dataLabelsRects[i][len] !== 'undefined') { var lastDataLabelRect = w.globals.dataLabelsRects[i][lastDrawnIndex]; if ( // next label forward and x not intersecting x > lastDataLabelRect.x + lastDataLabelRect.width + 2 || y > lastDataLabelRect.y + lastDataLabelRect.height + 2 || x + width < lastDataLabelRect.x // next label is going to be drawn backwards ) { // the 2 indexes don't override, so OK to draw next label drawnextLabel = true; } } if (dataPointIndex === 0 || alwaysDrawDataLabel) { drawnextLabel = true; } return { x: x, y: y, textRects: textRects, drawnextLabel: drawnextLabel }; } }, { key: "drawDataLabel", value: function drawDataLabel(pos, i, j) { var _this = this; var strokeWidth = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 2; // this method handles line, area, bubble, scatter charts as those charts contains markers/points which have pre-defined x/y positions // all other charts like radar / bars / heatmaps will define their own drawDataLabel routine var w = this.w; var graphics = new Graphics(this.ctx); var dataLabelsConfig = w.config.dataLabels; var x = 0; var y = 0; var dataPointIndex = j; var elDataLabelsWrap = null; if (!dataLabelsConfig.enabled || pos.x instanceof Array !== true) { return elDataLabelsWrap; } elDataLabelsWrap = graphics.group({ class: 'apexcharts-data-labels' }); for (var q = 0; q < pos.x.length; q++) { x = pos.x[q] + dataLabelsConfig.offsetX; y = pos.y[q] + dataLabelsConfig.offsetY + strokeWidth; if (!isNaN(x)) { // a small hack as we have 2 points for the first val to connect it if (j === 1 && q === 0) dataPointIndex = 0; if (j === 1 && q === 1) dataPointIndex = 1; var val = w.globals.series[i][dataPointIndex]; var text = ''; var getText = function getText(v) { return w.config.dataLabels.formatter(v, { ctx: _this.ctx, seriesIndex: i, dataPointIndex: dataPointIndex, w: w }); }; if (w.config.chart.type === 'bubble') { val = w.globals.seriesZ[i][dataPointIndex]; text = getText(val); y = pos.y[q]; var scatter = new Scatter(this.ctx); var centerTextInBubbleCoords = scatter.centerTextInBubble(y, i, dataPointIndex); y = centerTextInBubbleCoords.y; } else { if (typeof val !== 'undefined') { text = getText(val); } } this.plotDataLabelsText({ x: x, y: y, text: text, i: i, j: dataPointIndex, parent: elDataLabelsWrap, offsetCorrection: true, dataLabelsConfig: w.config.dataLabels }); } } return elDataLabelsWrap; } }, { key: "plotDataLabelsText", value: function plotDataLabelsText(opts) { var w = this.w; var graphics = new Graphics(this.ctx); var x = opts.x, y = opts.y, i = opts.i, j = opts.j, text = opts.text, textAnchor = opts.textAnchor, parent = opts.parent, dataLabelsConfig = opts.dataLabelsConfig, color = opts.color, alwaysDrawDataLabel = opts.alwaysDrawDataLabel, offsetCorrection = opts.offsetCorrection; if (Array.isArray(w.config.dataLabels.enabledOnSeries)) { if (w.config.dataLabels.enabledOnSeries.indexOf(i) < 0) { return; } } var correctedLabels = { x: x, y: y, drawnextLabel: true }; if (offsetCorrection) { correctedLabels = this.dataLabelsCorrection(x, y, text, i, j, alwaysDrawDataLabel, parseInt(dataLabelsConfig.style.fontSize, 10)); } // when zoomed, we don't need to correct labels offsets, // but if normally, labels get cropped, correct them if (!w.globals.zoomed) { x = correctedLabels.x; y = correctedLabels.y; } if (correctedLabels.textRects) { if (x + correctedLabels.textRects.width < -20 || x > w.globals.gridWidth + 20) { // datalabels fall outside drawing area, so draw a blank label text = ''; } } var dataLabelColor = w.globals.dataLabels.style.colors[i]; if ((w.config.chart.type === 'bar' || w.config.chart.type === 'rangeBar') && w.config.plotOptions.bar.distributed || w.config.dataLabels.distributed) { dataLabelColor = w.globals.dataLabels.style.colors[j]; } if (color) { dataLabelColor = color; } var offX = dataLabelsConfig.offsetX; var offY = dataLabelsConfig.offsetY; if (w.config.chart.type === 'bar' || w.config.chart.type === 'rangeBar') { // for certain chart types, we handle offsets while calculating datalabels pos // why? because bars/column may have negative values and based on that // offsets becomes reversed offX = 0; offY = 0; } if (correctedLabels.drawnextLabel) { var dataLabelText = graphics.drawText({ width: 100, height: parseInt(dataLabelsConfig.style.fontSize, 10), x: x + offX, y: y + offY, foreColor: dataLabelColor, textAnchor: textAnchor || dataLabelsConfig.textAnchor, text: text, fontSize: dataLabelsConfig.style.fontSize, fontFamily: dataLabelsConfig.style.fontFamily, fontWeight: dataLabelsConfig.style.fontWeight || 'normal' }); dataLabelText.attr({ class: 'apexcharts-datalabel', cx: x, cy: y }); if (dataLabelsConfig.dropShadow.enabled) { var textShadow = dataLabelsConfig.dropShadow; var filters = new Filters(this.ctx); filters.dropShadow(dataLabelText, textShadow); } parent.add(dataLabelText); if (typeof w.globals.lastDrawnDataLabelsIndexes[i] === 'undefined') { w.globals.lastDrawnDataLabelsIndexes[i] = []; } w.globals.lastDrawnDataLabelsIndexes[i].push(j); } } }, { key: "addBackgroundToDataLabel", value: function addBackgroundToDataLabel(el, coords) { var w = this.w; var bCnf = w.config.dataLabels.background; var paddingH = bCnf.padding; var paddingV = bCnf.padding / 2; var width = coords.width; var height = coords.height; var graphics = new Graphics(this.ctx); var elRect = graphics.drawRect(coords.x - paddingH, coords.y - paddingV / 2, width + paddingH * 2, height + paddingV, bCnf.borderRadius, w.config.chart.background === 'transparent' ? '#fff' : w.config.chart.background, bCnf.opacity, bCnf.borderWidth, bCnf.borderColor); if (bCnf.dropShadow.enabled) { var filters = new Filters(this.ctx); filters.dropShadow(elRect, bCnf.dropShadow); } return elRect; } }, { key: "dataLabelsBackground", value: function dataLabelsBackground() { var w = this.w; if (w.config.chart.type === 'bubble') return; var elDataLabels = w.globals.dom.baseEl.querySelectorAll('.apexcharts-datalabels text'); for (var i = 0; i < elDataLabels.length; i++) { var el = elDataLabels[i]; var coords = el.getBBox(); var elRect = null; if (coords.width && coords.height) { elRect = this.addBackgroundToDataLabel(el, coords); } if (elRect) { el.parentNode.insertBefore(elRect.node, el); var background = el.getAttribute('fill'); var shouldAnim = w.config.chart.animations.enabled && !w.globals.resized && !w.globals.dataChanged; if (shouldAnim) { elRect.animate().attr({ fill: background }); } else { elRect.attr({ fill: background }); } el.setAttribute('fill', w.config.dataLabels.background.foreColor); } } } }, { key: "bringForward", value: function bringForward() { var w = this.w; var elDataLabelsNodes = w.globals.dom.baseEl.getElementsByClassName('apexcharts-datalabels'); var elSeries = w.globals.dom.baseEl.querySelector('.apexcharts-plot-series:last-child'); for (var i = 0; i < elDataLabelsNodes.length; i++) { if (elSeries) { elSeries.insertBefore(elDataLabelsNodes[i], elSeries.nextSibling); } } } }]); return DataLabels; }(); /** * ApexCharts Series Class for interation with the Series of the chart. * * @module Series **/ var Series = /*#__PURE__*/function () { function Series(ctx) { _classCallCheck(this, Series); this.ctx = ctx; this.w = ctx.w; this.legendInactiveClass = 'legend-mouseover-inactive'; } _createClass(Series, [{ key: "getAllSeriesEls", value: function getAllSeriesEls() { return this.w.globals.dom.baseEl.getElementsByClassName("apexcharts-series"); } }, { key: "getSeriesByName", value: function getSeriesByName(seriesName) { return this.w.globals.dom.baseEl.querySelector("[seriesName='".concat(Utils.escapeString(seriesName), "']")); } }, { key: "isSeriesHidden", value: function isSeriesHidden(seriesName) { var targetElement = this.getSeriesByName(seriesName); var realIndex = parseInt(targetElement.getAttribute('data:realIndex'), 10); var isHidden = targetElement.classList.contains('apexcharts-series-collapsed'); return { isHidden: isHidden, realIndex: realIndex }; } }, { key: "addCollapsedClassToSeries", value: function addCollapsedClassToSeries(elSeries, index) { var w = this.w; function iterateOnAllCollapsedSeries(series) { for (var cs = 0; cs < series.length; cs++) { if (series[cs].index === index) { elSeries.node.classList.add('apexcharts-series-collapsed'); } } } iterateOnAllCollapsedSeries(w.globals.collapsedSeries); iterateOnAllCollapsedSeries(w.globals.ancillaryCollapsedSeries); } }, { key: "toggleSeries", value: function toggleSeries(seriesName) { var isSeriesHidden = this.isSeriesHidden(seriesName); this.ctx.legend.legendHelpers.toggleDataSeries(isSeriesHidden.realIndex, isSeriesHidden.isHidden); return isSeriesHidden.isHidden; } }, { key: "showSeries", value: function showSeries(seriesName) { var isSeriesHidden = this.isSeriesHidden(seriesName); if (isSeriesHidden.isHidden) { this.ctx.legend.legendHelpers.toggleDataSeries(isSeriesHidden.realIndex, true); } } }, { key: "hideSeries", value: function hideSeries(seriesName) { var isSeriesHidden = this.isSeriesHidden(seriesName); if (!isSeriesHidden.isHidden) { this.ctx.legend.legendHelpers.toggleDataSeries(isSeriesHidden.realIndex, false); } } }, { key: "resetSeries", value: function resetSeries() { var shouldUpdateChart = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; var shouldResetZoom = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; var shouldResetCollapsed = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; var w = this.w; var series = w.globals.initialSeries.slice(); w.config.series = series; w.globals.previousPaths = []; if (shouldResetCollapsed) { w.globals.collapsedSeries = []; w.globals.ancillaryCollapsedSeries = []; w.globals.collapsedSeriesIndices = []; w.globals.ancillaryCollapsedSeriesIndices = []; } if (shouldUpdateChart) { if (shouldResetZoom) { w.globals.zoomed = false; this.ctx.updateHelpers.revertDefaultAxisMinMax(); } this.ctx.updateHelpers._updateSeries(series, w.config.chart.animations.dynamicAnimation.enabled); } } }, { key: "toggleSeriesOnHover", value: function toggleSeriesOnHover(e, targetElement) { var w = this.w; var allSeriesEls = w.globals.dom.baseEl.querySelectorAll(".apexcharts-series, .apexcharts-datalabels"); if (e.type === 'mousemove') { var seriesCnt = parseInt(targetElement.getAttribute('rel'), 10) - 1; var seriesEl = null; var dataLabelEl = null; if (w.globals.axisCharts || w.config.chart.type === 'radialBar') { if (w.globals.axisCharts) { seriesEl = w.globals.dom.baseEl.querySelector(".apexcharts-series[data\\:realIndex='".concat(seriesCnt, "']")); dataLabelEl = w.globals.dom.baseEl.querySelector(".apexcharts-datalabels[data\\:realIndex='".concat(seriesCnt, "']")); } else { seriesEl = w.globals.dom.baseEl.querySelector(".apexcharts-series[rel='".concat(seriesCnt + 1, "']")); } } else { seriesEl = w.globals.dom.baseEl.querySelector(".apexcharts-series[rel='".concat(seriesCnt + 1, "'] path")); } for (var se = 0; se < allSeriesEls.length; se++) { allSeriesEls[se].classList.add(this.legendInactiveClass); } if (seriesEl !== null) { if (!w.globals.axisCharts) { seriesEl.parentNode.classList.remove(this.legendInactiveClass); } seriesEl.classList.remove(this.legendInactiveClass); if (dataLabelEl !== null) { dataLabelEl.classList.remove(this.legendInactiveClass); } } } else if (e.type === 'mouseout') { for (var _se = 0; _se < allSeriesEls.length; _se++) { allSeriesEls[_se].classList.remove(this.legendInactiveClass); } } } }, { key: "highlightRangeInSeries", value: function highlightRangeInSeries(e, targetElement) { var _this = this; var w = this.w; var allHeatMapElements = w.globals.dom.baseEl.getElementsByClassName('apexcharts-heatmap-rect'); var activeInactive = function activeInactive(action) { for (var i = 0; i < allHeatMapElements.length; i++) { allHeatMapElements[i].classList[action](_this.legendInactiveClass); } }; var removeInactiveClassFromHoveredRange = function removeInactiveClassFromHoveredRange(range) { for (var i = 0; i < allHeatMapElements.length; i++) { var val = parseInt(allHeatMapElements[i].getAttribute('val'), 10); if (val >= range.from && val <= range.to) { allHeatMapElements[i].classList.remove(_this.legendInactiveClass); } } }; if (e.type === 'mousemove') { var seriesCnt = parseInt(targetElement.getAttribute('rel'), 10) - 1; activeInactive('add'); var range = w.config.plotOptions.heatmap.colorScale.ranges[seriesCnt]; removeInactiveClassFromHoveredRange(range); } else if (e.type === 'mouseout') { activeInactive('remove'); } } }, { key: "getActiveConfigSeriesIndex", value: function getActiveConfigSeriesIndex() { var ignoreBars = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; var w = this.w; var activeIndex = 0; if (w.config.series.length > 1) { // active series flag is required to know if user has not deactivated via legend click var firstActiveSeriesIndex = w.config.series.map(function (series, index) { var hasBars = false; if (ignoreBars) { hasBars = w.config.series[index].type === 'bar' || w.config.series[index].type === 'column'; } return series.data && series.data.length > 0 && !hasBars ? index : -1; }); for (var a = 0; a < firstActiveSeriesIndex.length; a++) { if (firstActiveSeriesIndex[a] !== -1) { activeIndex = firstActiveSeriesIndex[a]; break; } } } return activeIndex; } }, { key: "getPreviousPaths", value: function getPreviousPaths() { var w = this.w; w.globals.previousPaths = []; function pushPaths(seriesEls, i, type) { var paths = seriesEls[i].childNodes; var dArr = { type: type, paths: [], realIndex: seriesEls[i].getAttribute('data:realIndex') }; for (var j = 0; j < paths.length; j++) { if (paths[j].hasAttribute('pathTo')) { var d = paths[j].getAttribute('pathTo'); dArr.paths.push({ d: d }); } } w.globals.previousPaths.push(dArr); } var getPaths = function getPaths(chartType) { return w.globals.dom.baseEl.querySelectorAll(".apexcharts-".concat(chartType, "-series .apexcharts-series")); }; var chartTypes = ['line', 'area', 'bar', 'candlestick', 'radar']; chartTypes.forEach(function (type) { var paths = getPaths(type); for (var p = 0; p < paths.length; p++) { pushPaths(paths, p, type); } }); this.handlePrevBubbleScatterPaths('bubble'); this.handlePrevBubbleScatterPaths('scatter'); var heatmapColors = w.globals.dom.baseEl.querySelectorAll('.apexcharts-heatmap .apexcharts-series'); if (heatmapColors.length > 0) { for (var h = 0; h < heatmapColors.length; h++) { var seriesEls = w.globals.dom.baseEl.querySelectorAll(".apexcharts-heatmap .apexcharts-series[data\\:realIndex='".concat(h, "'] rect")); var dArr = []; for (var i = 0; i < seriesEls.length; i++) { dArr.push({ color: seriesEls[i].getAttribute('color') }); } w.globals.previousPaths.push(dArr); } } if (!w.globals.axisCharts) { // for non-axis charts (i.e., circular charts, pathFrom is not usable. We need whole series) w.globals.previousPaths = w.globals.series; } } }, { key: "handlePrevBubbleScatterPaths", value: function handlePrevBubbleScatterPaths(type) { var w = this.w; var paths = w.globals.dom.baseEl.querySelectorAll(".apexcharts-".concat(type, "-series .apexcharts-series")); if (paths.length > 0) { for (var s = 0; s < paths.length; s++) { var seriesEls = w.globals.dom.baseEl.querySelectorAll(".apexcharts-".concat(type, "-series .apexcharts-series[data\\:realIndex='").concat(s, "'] circle")); var dArr = []; for (var i = 0; i < seriesEls.length; i++) { dArr.push({ x: seriesEls[i].getAttribute('cx'), y: seriesEls[i].getAttribute('cy'), r: seriesEls[i].getAttribute('r') }); } w.globals.previousPaths.push(dArr); } } } }, { key: "clearPreviousPaths", value: function clearPreviousPaths() { var w = this.w; w.globals.previousPaths = []; w.globals.allSeriesCollapsed = false; } }, { key: "handleNoData", value: function handleNoData() { var w = this.w; var me = this; var noDataOpts = w.config.noData; var graphics = new Graphics(me.ctx); var x = w.globals.svgWidth / 2; var y = w.globals.svgHeight / 2; var textAnchor = 'middle'; w.globals.noData = true; w.globals.animationEnded = true; if (noDataOpts.align === 'left') { x = 10; textAnchor = 'start'; } else if (noDataOpts.align === 'right') { x = w.globals.svgWidth - 10; textAnchor = 'end'; } if (noDataOpts.verticalAlign === 'top') { y = 50; } else if (noDataOpts.verticalAlign === 'bottom') { y = w.globals.svgHeight - 50; } x = x + noDataOpts.offsetX; y = y + parseInt(noDataOpts.style.fontSize, 10) + 2 + noDataOpts.offsetY; if (noDataOpts.text !== undefined && noDataOpts.text !== '') { var titleText = graphics.drawText({ x: x, y: y, text: noDataOpts.text, textAnchor: textAnchor, fontSize: noDataOpts.style.fontSize, fontFamily: noDataOpts.style.fontFamily, foreColor: noDataOpts.style.color, opacity: 1, class: 'apexcharts-text-nodata' }); w.globals.dom.Paper.add(titleText); } } // When user clicks on legends, the collapsed series is filled with [0,0,0,...,0] // This is because we don't want to alter the series' length as it is used at many places }, { key: "setNullSeriesToZeroValues", value: function setNullSeriesToZeroValues(series) { var w = this.w; for (var sl = 0; sl < series.length; sl++) { if (series[sl].length === 0) { for (var j = 0; j < series[w.globals.maxValsInArrayIndex].length; j++) { series[sl].push(0); } } } return series; } }, { key: "hasAllSeriesEqualX", value: function hasAllSeriesEqualX() { var equalLen = true; var w = this.w; var filteredSerX = this.filteredSeriesX(); for (var i = 0; i < filteredSerX.length - 1; i++) { if (filteredSerX[i][0] !== filteredSerX[i + 1][0]) { equalLen = false; break; } } w.globals.allSeriesHasEqualX = equalLen; return equalLen; } }, { key: "filteredSeriesX", value: function filteredSeriesX() { var w = this.w; var filteredSeriesX = w.globals.seriesX.map(function (ser) { return ser.length > 0 ? ser : []; }); return filteredSeriesX; } }]); return Series; }(); var Data = /*#__PURE__*/function () { function Data(ctx) { _classCallCheck(this, Data); this.ctx = ctx; this.w = ctx.w; this.twoDSeries = []; this.threeDSeries = []; this.twoDSeriesX = []; this.coreUtils = new CoreUtils(this.ctx); } _createClass(Data, [{ key: "isMultiFormat", value: function isMultiFormat() { return this.isFormatXY() || this.isFormat2DArray(); } // given format is [{x, y}, {x, y}] }, { key: "isFormatXY", value: function isFormatXY() { var series = this.w.config.series.slice(); var sr = new Series(this.ctx); this.activeSeriesIndex = sr.getActiveConfigSeriesIndex(); if (typeof series[this.activeSeriesIndex].data !== 'undefined' && series[this.activeSeriesIndex].data.length > 0 && series[this.activeSeriesIndex].data[0] !== null && typeof series[this.activeSeriesIndex].data[0].x !== 'undefined' && series[this.activeSeriesIndex].data[0] !== null) { return true; } } // given format is [[x, y], [x, y]] }, { key: "isFormat2DArray", value: function isFormat2DArray() { var series = this.w.config.series.slice(); var sr = new Series(this.ctx); this.activeSeriesIndex = sr.getActiveConfigSeriesIndex(); if (typeof series[this.activeSeriesIndex].data !== 'undefined' && series[this.activeSeriesIndex].data.length > 0 && typeof series[this.activeSeriesIndex].data[0] !== 'undefined' && series[this.activeSeriesIndex].data[0] !== null && series[this.activeSeriesIndex].data[0].constructor === Array) { return true; } } }, { key: "handleFormat2DArray", value: function handleFormat2DArray(ser, i) { var cnf = this.w.config; var gl = this.w.globals; if (cnf.xaxis.sorted) { if (cnf.xaxis.type === 'datetime') { ser[i].data.sort(function (a, b) { return new Date(a[0]).getTime() - new Date(b[0]).getTime(); }); } else if (cnf.xaxis.type === 'numeric') { ser[i].data.sort(function (a, b) { return a[0] - b[0]; }); } } for (var j = 0; j < ser[i].data.length; j++) { if (typeof ser[i].data[j][1] !== 'undefined') { if (Array.isArray(ser[i].data[j][1]) && ser[i].data[j][1].length === 4) { // candlestick nested ohlc format this.twoDSeries.push(Utils.parseNumber(ser[i].data[j][1][3])); } else if (ser[i].data[j].length === 5) { // candlestick non-nested ohlc format this.twoDSeries.push(Utils.parseNumber(ser[i].data[j][4])); } else { this.twoDSeries.push(Utils.parseNumber(ser[i].data[j][1])); } gl.dataFormatXNumeric = true; } if (cnf.xaxis.type === 'datetime') { // if timestamps are provided and xaxis type is datettime, var ts = new Date(ser[i].data[j][0]); ts = new Date(ts).getTime(); this.twoDSeriesX.push(ts); } else { this.twoDSeriesX.push(ser[i].data[j][0]); } } for (var _j = 0; _j < ser[i].data.length; _j++) { if (typeof ser[i].data[_j][2] !== 'undefined') { this.threeDSeries.push(ser[i].data[_j][2]); gl.isDataXYZ = true; } } } }, { key: "handleFormatXY", value: function handleFormatXY(ser, i) { var cnf = this.w.config; var gl = this.w.globals; var dt = new DateTime(this.ctx); var activeI = i; if (gl.collapsedSeriesIndices.indexOf(i) > -1) { // fix #368 activeI = this.activeSeriesIndex; } if (cnf.xaxis.sorted) { if (cnf.xaxis.type === 'datetime') { ser[i].data.sort(function (a, b) { return new Date(a.x).getTime() - new Date(b.x).getTime(); }); } else if (cnf.xaxis.type === 'numeric') { ser[i].data.sort(function (a, b) { return a.x - b.x; }); } } // get series for (var j = 0; j < ser[i].data.length; j++) { if (typeof ser[i].data[j].y !== 'undefined') { if (Array.isArray(ser[i].data[j].y)) { this.twoDSeries.push(Utils.parseNumber(ser[i].data[j].y[ser[i].data[j].y.length - 1])); } else { this.twoDSeries.push(Utils.parseNumber(ser[i].data[j].y)); } } } // get seriesX for (var _j2 = 0; _j2 < ser[activeI].data.length; _j2++) { var isXString = typeof ser[activeI].data[_j2].x === 'string'; var isXArr = Array.isArray(ser[activeI].data[_j2].x); var isXDate = !isXArr && !!dt.isValidDate(ser[activeI].data[_j2].x.toString()); if (isXString || isXDate) { // user supplied '01/01/2017' or a date string (a JS date object is not supported) if (isXString || cnf.xaxis.convertedCatToNumeric) { if (cnf.xaxis.type === 'datetime' && !gl.isRangeData) { this.twoDSeriesX.push(dt.parseDate(ser[activeI].data[_j2].x)); } else { // a category and not a numeric x value this.fallbackToCategory = true; this.twoDSeriesX.push(ser[activeI].data[_j2].x); } } else { if (cnf.xaxis.type === 'datetime') { this.twoDSeriesX.push(dt.parseDate(ser[activeI].data[_j2].x.toString())); } else { gl.dataFormatXNumeric = true; gl.isXNumeric = true; this.twoDSeriesX.push(parseFloat(ser[activeI].data[_j2].x)); } } } else if (isXArr) { // a multiline label described in array format this.fallbackToCategory = true; this.twoDSeriesX.push(ser[activeI].data[_j2].x); } else { // a numeric value in x property gl.isXNumeric = true; gl.dataFormatXNumeric = true; this.twoDSeriesX.push(ser[activeI].data[_j2].x); } } if (ser[i].data[0] && typeof ser[i].data[0].z !== 'undefined') { for (var t = 0; t < ser[i].data.length; t++) { this.threeDSeries.push(ser[i].data[t].z); } gl.isDataXYZ = true; } } }, { key: "handleRangeData", value: function handleRangeData(ser, i) { var cnf = this.w.config; var gl = this.w.globals; var range = {}; if (this.isFormat2DArray()) { range = this.handleRangeDataFormat('array', ser, i); } else if (this.isFormatXY()) { range = this.handleRangeDataFormat('xy', ser, i); } gl.seriesRangeStart.push(range.start); gl.seriesRangeEnd.push(range.end); if (cnf.xaxis.type === 'datetime') { gl.seriesRangeBarTimeline.push(range.rangeUniques); } // check for overlaps to avoid clashes in a timeline chart gl.seriesRangeBarTimeline.forEach(function (sr, si) { if (sr) { sr.forEach(function (sarr, sarri) { sarr.y.forEach(function (arr, arri) { for (var sri = 0; sri < sarr.y.length; sri++) { if (arri !== sri) { var range1y1 = arr.y1; var range1y2 = arr.y2; var range2y1 = sarr.y[sri].y1; var range2y2 = sarr.y[sri].y2; if (range1y1 <= range2y2 && range2y1 <= range1y2) { if (sarr.overlaps.indexOf(arr.rangeName) < 0) { sarr.overlaps.push(arr.rangeName); } if (sarr.overlaps.indexOf(sarr.y[sri].rangeName) < 0) { sarr.overlaps.push(sarr.y[sri].rangeName); } } } } }); }); } }); return range; } }, { key: "handleCandleStickData", value: function handleCandleStickData(ser, i) { var gl = this.w.globals; var ohlc = {}; if (this.isFormat2DArray()) { ohlc = this.handleCandleStickDataFormat('array', ser, i); } else if (this.isFormatXY()) { ohlc = this.handleCandleStickDataFormat('xy', ser, i); } gl.seriesCandleO[i] = ohlc.o; gl.seriesCandleH[i] = ohlc.h; gl.seriesCandleL[i] = ohlc.l; gl.seriesCandleC[i] = ohlc.c; return ohlc; } }, { key: "handleRangeDataFormat", value: function handleRangeDataFormat(format, ser, i) { var rangeStart = []; var rangeEnd = []; var uniqueKeys = ser[i].data.filter(function (thing, index, self) { return index === self.findIndex(function (t) { return t.x === thing.x; }); }).map(function (r, index) { return { x: r.x, overlaps: [], y: [] }; }); var err = 'Please provide [Start, End] values in valid format. Read more https://apexcharts.com/docs/series/#rangecharts'; var serObj = new Series(this.ctx); var activeIndex = serObj.getActiveConfigSeriesIndex(); if (format === 'array') { if (ser[activeIndex].data[0][1].length !== 2) { throw new Error(err); } for (var j = 0; j < ser[i].data.length; j++) { rangeStart.push(ser[i].data[j][1][0]); rangeEnd.push(ser[i].data[j][1][1]); } } else if (format === 'xy') { if (ser[activeIndex].data[0].y.length !== 2) { throw new Error(err); } var _loop = function _loop(_j3) { var id = Utils.randomId(); var x = ser[i].data[_j3].x; var y = { y1: ser[i].data[_j3].y[0], y2: ser[i].data[_j3].y[1], rangeName: id }; // mutating config object by adding a new property // TODO: As this is specifically for timeline rangebar charts, update the docs mentioning the series only supports xy format ser[i].data[_j3].rangeName = id; var uI = uniqueKeys.findIndex(function (t) { return t.x === x; }); uniqueKeys[uI].y.push(y); rangeStart.push(y.y1); rangeEnd.push(y.y2); }; for (var _j3 = 0; _j3 < ser[i].data.length; _j3++) { _loop(_j3); } } return { start: rangeStart, end: rangeEnd, rangeUniques: uniqueKeys }; } }, { key: "handleCandleStickDataFormat", value: function handleCandleStickDataFormat(format, ser, i) { var serO = []; var serH = []; var serL = []; var serC = []; var err = 'Please provide [Open, High, Low and Close] values in valid format. Read more https://apexcharts.com/docs/series/#candlestick'; if (format === 'array') { if (!Array.isArray(ser[i].data[0][1]) && ser[i].data[0].length !== 5 || Array.isArray(ser[i].data[0][1]) && ser[i].data[0][1].length !== 4) { throw new Error(err); } if (ser[i].data[0].length === 5) { for (var j = 0; j < ser[i].data.length; j++) { serO.push(ser[i].data[j][1]); serH.push(ser[i].data[j][2]); serL.push(ser[i].data[j][3]); serC.push(ser[i].data[j][4]); } } else { for (var _j4 = 0; _j4 < ser[i].data.length; _j4++) { serO.push(ser[i].data[_j4][1][0]); serH.push(ser[i].data[_j4][1][1]); serL.push(ser[i].data[_j4][1][2]); serC.push(ser[i].data[_j4][1][3]); } } } else if (format === 'xy') { if (ser[i].data[0].y.length !== 4) { throw new Error(err); } for (var _j5 = 0; _j5 < ser[i].data.length; _j5++) { serO.push(ser[i].data[_j5].y[0]); serH.push(ser[i].data[_j5].y[1]); serL.push(ser[i].data[_j5].y[2]); serC.push(ser[i].data[_j5].y[3]); } } return { o: serO, h: serH, l: serL, c: serC }; } }, { key: "parseDataAxisCharts", value: function parseDataAxisCharts(ser) { var _this = this; var ctx = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.ctx; var cnf = this.w.config; var gl = this.w.globals; var dt = new DateTime(ctx); var xlabels = cnf.labels.length > 0 ? cnf.labels.slice() : cnf.xaxis.categories.slice(); var handleDates = function handleDates() { for (var j = 0; j < xlabels.length; j++) { if (typeof xlabels[j] === 'string') { // user provided date strings var isDate = dt.isValidDate(xlabels[j]); if (isDate) { _this.twoDSeriesX.push(dt.parseDate(xlabels[j])); } else { throw new Error('You have provided invalid Date format. Please provide a valid JavaScript Date'); } } else { // user provided timestamps if (String(xlabels[j]).length !== 13) { throw new Error('Please provide a valid JavaScript timestamp'); } else { _this.twoDSeriesX.push(xlabels[j]); } } } }; for (var i = 0; i < ser.length; i++) { this.twoDSeries = []; this.twoDSeriesX = []; this.threeDSeries = []; if (typeof ser[i].data === 'undefined') { console.error("It is a possibility that you may have not included 'data' property in series."); return; } if (cnf.chart.type === 'rangeBar' || cnf.chart.type === 'rangeArea' || ser[i].type === 'rangeBar' || ser[i].type === 'rangeArea') { gl.isRangeData = true; this.handleRangeData(ser, i); } if (this.isMultiFormat()) { if (this.isFormat2DArray()) { this.handleFormat2DArray(ser, i); } else if (this.isFormatXY()) { this.handleFormatXY(ser, i); } if (cnf.chart.type === 'candlestick' || ser[i].type === 'candlestick') { this.handleCandleStickData(ser, i); } gl.series.push(this.twoDSeries); gl.labels.push(this.twoDSeriesX); gl.seriesX.push(this.twoDSeriesX); if (i === this.activeSeriesIndex && !this.fallbackToCategory) { gl.isXNumeric = true; } } else { if (cnf.xaxis.type === 'datetime') { // user didn't supplied [{x,y}] or [[x,y]], but single array in data. // Also labels/categories were supplied differently gl.isXNumeric = true; handleDates(); gl.seriesX.push(this.twoDSeriesX); } else if (cnf.xaxis.type === 'numeric') { gl.isXNumeric = true; if (xlabels.length > 0) { this.twoDSeriesX = xlabels; gl.seriesX.push(this.twoDSeriesX); } } gl.labels.push(this.twoDSeriesX); var singleArray = ser[i].data.map(function (d) { return Utils.parseNumber(d); }); gl.series.push(singleArray); } gl.seriesZ.push(this.threeDSeries); if (ser[i].name !== undefined) { gl.seriesNames.push(ser[i].name); } else { gl.seriesNames.push('series-' + parseInt(i + 1, 10)); } } return this.w; } }, { key: "parseDataNonAxisCharts", value: function parseDataNonAxisCharts(ser) { var gl = this.w.globals; var cnf = this.w.config; gl.series = ser.slice(); gl.seriesNames = cnf.labels.slice(); for (var i = 0; i < gl.series.length; i++) { if (gl.seriesNames[i] === undefined) { gl.seriesNames.push('series-' + (i + 1)); } } return this.w; } /** User possibly set string categories in xaxis.categories or labels prop * Or didn't set xaxis labels at all - in which case we manually do it. * If user passed series data as [[3, 2], [4, 5]] or [{ x: 3, y: 55 }], * this shouldn't be called * @param {array} ser - the series which user passed to the config */ }, { key: "handleExternalLabelsData", value: function handleExternalLabelsData(ser) { var cnf = this.w.config; var gl = this.w.globals; if (cnf.xaxis.categories.length > 0) { // user provided labels in xaxis.category prop gl.labels = cnf.xaxis.categories; } else if (cnf.labels.length > 0) { // user provided labels in labels props gl.labels = cnf.labels.slice(); } else if (this.fallbackToCategory) { // user provided labels in x prop in [{ x: 3, y: 55 }] data, and those labels are already stored in gl.labels[0], so just re-arrange the gl.labels array gl.labels = gl.labels[0]; if (gl.seriesRangeBarTimeline.length) { gl.seriesRangeBarTimeline.map(function (srt) { srt.forEach(function (sr) { if (gl.labels.indexOf(sr.x) < 0 && sr.x) { gl.labels.push(sr.x); } }); }); gl.labels = gl.labels.filter(function (elem, pos, arr) { return arr.indexOf(elem) === pos; }); } if (cnf.xaxis.convertedCatToNumeric) { var defaults = new Defaults(cnf); defaults.convertCatToNumericXaxis(cnf, this.ctx, gl.seriesX[0]); this._generateExternalLabels(ser); } } else { this._generateExternalLabels(ser); } } }, { key: "_generateExternalLabels", value: function _generateExternalLabels(ser) { var gl = this.w.globals; var cnf = this.w.config; // user didn't provided any labels, fallback to 1-2-3-4-5 var labelArr = []; if (gl.axisCharts) { if (gl.series.length > 0) { for (var i = 0; i < gl.series[gl.maxValsInArrayIndex].length; i++) { labelArr.push(i + 1); } } gl.seriesX = []; // create gl.seriesX as it will be used in calculations of x positions for (var _i = 0; _i < ser.length; _i++) { gl.seriesX.push(labelArr); } // turn on the isXNumeric flag to allow minX and maxX to function properly gl.isXNumeric = true; } // no series to pull labels from, put a 0-10 series // possibly, user collapsed all series. Hence we can't work with above calc if (labelArr.length === 0) { labelArr = gl.axisCharts ? [] : gl.series.map(function (gls, glsi) { return glsi + 1; }); for (var _i2 = 0; _i2 < ser.length; _i2++) { gl.seriesX.push(labelArr); } } // Finally, pass the labelArr in gl.labels which will be printed on x-axis gl.labels = labelArr; if (cnf.xaxis.convertedCatToNumeric) { gl.categoryLabels = labelArr.map(function (l) { return cnf.xaxis.labels.formatter(l); }); } // Turn on this global flag to indicate no labels were provided by user gl.noLabelsProvided = true; } // Segregate user provided data into appropriate vars }, { key: "parseData", value: function parseData(ser) { var w = this.w; var cnf = w.config; var gl = w.globals; this.excludeCollapsedSeriesInYAxis(); // If we detected string in X prop of series, we fallback to category x-axis this.fallbackToCategory = false; this.ctx.core.resetGlobals(); this.ctx.core.isMultipleY(); if (gl.axisCharts) { // axisCharts includes line / area / column / scatter this.parseDataAxisCharts(ser); } else { // non-axis charts are pie / donut this.parseDataNonAxisCharts(ser); } this.coreUtils.getLargestSeries(); // set Null values to 0 in all series when user hides/shows some series if (cnf.chart.type === 'bar' && cnf.chart.stacked) { var series = new Series(this.ctx); gl.series = series.setNullSeriesToZeroValues(gl.series); } this.coreUtils.getSeriesTotals(); if (gl.axisCharts) { this.coreUtils.getStackedSeriesTotals(); } this.coreUtils.getPercentSeries(); if (!gl.dataFormatXNumeric && (!gl.isXNumeric || cnf.xaxis.type === 'numeric' && cnf.labels.length === 0 && cnf.xaxis.categories.length === 0)) { // x-axis labels couldn't be detected; hence try searching every option in config this.handleExternalLabelsData(ser); } // check for multiline xaxis var catLabels = this.coreUtils.getCategoryLabels(gl.labels); for (var l = 0; l < catLabels.length; l++) { if (Array.isArray(catLabels[l])) { gl.isMultiLineX = true; break; } } } }, { key: "excludeCollapsedSeriesInYAxis", value: function excludeCollapsedSeriesInYAxis() { var _this2 = this; var w = this.w; w.globals.ignoreYAxisIndexes = w.globals.collapsedSeries.map(function (collapsed, i) { // fix issue #1215 // if stacked, not returning collapsed.index to preserve yaxis if (_this2.w.globals.isMultipleYAxis && !w.config.chart.stacked) { return collapsed.index; } }); } }]); return Data; }(); /** * ApexCharts Formatter Class for setting value formatters for axes as well as tooltips. * * @module Formatters **/ var Formatters = /*#__PURE__*/function () { function Formatters(ctx) { _classCallCheck(this, Formatters); this.ctx = ctx; this.w = ctx.w; this.tooltipKeyFormat = 'dd MMM'; } _createClass(Formatters, [{ key: "xLabelFormat", value: function xLabelFormat(fn, val, timestamp) { var w = this.w; if (w.config.xaxis.type === 'datetime') { if (w.config.xaxis.labels.formatter === undefined) { // if user has not specified a custom formatter, use the default tooltip.x.format if (w.config.tooltip.x.formatter === undefined) { var datetimeObj = new DateTime(this.ctx); return datetimeObj.formatDate(datetimeObj.getDate(val), w.config.tooltip.x.format); } } } return fn(val, timestamp); } }, { key: "defaultGeneralFormatter", value: function defaultGeneralFormatter(val) { if (Array.isArray(val)) { return val.map(function (v) { return v; }); } else { return val; } } }, { key: "defaultYFormatter", value: function defaultYFormatter(v, yaxe, i) { var w = this.w; if (Utils.isNumber(v)) { if (w.globals.yValueDecimal !== 0) { v = v.toFixed(yaxe.decimalsInFloat !== undefined ? yaxe.decimalsInFloat : w.globals.yValueDecimal); } else if (w.globals.maxYArr[i] - w.globals.minYArr[i] < 10) { v = v.toFixed(1); } else { v = v.toFixed(0); } } return v; } }, { key: "setLabelFormatters", value: function setLabelFormatters() { var _this = this; var w = this.w; w.globals.xLabelFormatter = function (val) { return _this.defaultGeneralFormatter(val); }; w.globals.xaxisTooltipFormatter = function (val) { return _this.defaultGeneralFormatter(val); }; w.globals.ttKeyFormatter = function (val) { return _this.defaultGeneralFormatter(val); }; w.globals.ttZFormatter = function (val) { return val; }; w.globals.legendFormatter = function (val) { return _this.defaultGeneralFormatter(val); }; // formatter function will always overwrite format property if (w.config.xaxis.labels.formatter !== undefined) { w.globals.xLabelFormatter = w.config.xaxis.labels.formatter; } else { w.globals.xLabelFormatter = function (val) { if (Utils.isNumber(val)) { // numeric xaxis may have smaller range, so defaulting to 1 decimal if (!w.config.xaxis.convertedCatToNumeric && w.config.xaxis.type === 'numeric' && w.globals.dataPoints < 50) { return val.toFixed(1); } if (w.globals.isBarHorizontal) { var range = w.globals.maxY - w.globals.minYArr; if (range < 4) { return val.toFixed(1); } } return val.toFixed(0); } return val; }; } if (typeof w.config.tooltip.x.formatter === 'function') { w.globals.ttKeyFormatter = w.config.tooltip.x.formatter; } else { w.globals.ttKeyFormatter = w.globals.xLabelFormatter; } if (typeof w.config.xaxis.tooltip.formatter === 'function') { w.globals.xaxisTooltipFormatter = w.config.xaxis.tooltip.formatter; } if (Array.isArray(w.config.tooltip.y)) { w.globals.ttVal = w.config.tooltip.y; } else { if (w.config.tooltip.y.formatter !== undefined) { w.globals.ttVal = w.config.tooltip.y; } } if (w.config.tooltip.z.formatter !== undefined) { w.globals.ttZFormatter = w.config.tooltip.z.formatter; } // legend formatter - if user wants to append any global values of series to legend text if (w.config.legend.formatter !== undefined) { w.globals.legendFormatter = w.config.legend.formatter; } // formatter function will always overwrite format property w.config.yaxis.forEach(function (yaxe, i) { if (yaxe.labels.formatter !== undefined) { w.globals.yLabelFormatters[i] = yaxe.labels.formatter; } else { w.globals.yLabelFormatters[i] = function (val) { if (!w.globals.xyCharts) return val; if (Array.isArray(val)) { return val.map(function (v) { return _this.defaultYFormatter(v, yaxe, i); }); } else { return _this.defaultYFormatter(val, yaxe, i); } }; } }); return w.globals; } }, { key: "heatmapLabelFormatters", value: function heatmapLabelFormatters() { var w = this.w; if (w.config.chart.type === 'heatmap') { w.globals.yAxisScale[0].result = w.globals.seriesNames.slice(); // get the longest string from the labels array and also apply label formatter to it var longest = w.globals.seriesNames.reduce(function (a, b) { return a.length > b.length ? a : b; }, 0); w.globals.yAxisScale[0].niceMax = longest; w.globals.yAxisScale[0].niceMin = longest; } } }]); return Formatters; }(); var AxesUtils = /*#__PURE__*/function () { function AxesUtils(ctx) { _classCallCheck(this, AxesUtils); this.ctx = ctx; this.w = ctx.w; } // Based on the formatter function, get the label text and position _createClass(AxesUtils, [{ key: "getLabel", value: function getLabel(labels, timescaleLabels, x, i) { var drawnLabels = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : []; var fontSize = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : '12px'; var w = this.w; var rawLabel = typeof labels[i] === 'undefined' ? '' : labels[i]; var label = rawLabel; var xlbFormatter = w.globals.xLabelFormatter; var customFormatter = w.config.xaxis.labels.formatter; var isBold = false; var xFormat = new Formatters(this.ctx); var timestamp = rawLabel; label = xFormat.xLabelFormat(xlbFormatter, rawLabel, timestamp); if (customFormatter !== undefined) { label = customFormatter(rawLabel, labels[i], i); } var determineHighestUnit = function determineHighestUnit(unit) { var highestUnit = null; timescaleLabels.forEach(function (t) { if (t.unit === 'month') { highestUnit = 'year'; } else if (t.unit === 'day') { highestUnit = 'month'; } else if (t.unit === 'hour') { highestUnit = 'day'; } else if (t.unit === 'minute') { highestUnit = 'hour'; } }); return highestUnit === unit; }; if (timescaleLabels.length > 0) { isBold = determineHighestUnit(timescaleLabels[i].unit); x = timescaleLabels[i].position; label = timescaleLabels[i].value; } else { if (w.config.xaxis.type === 'datetime' && customFormatter === undefined) { label = ''; } } if (typeof label === 'undefined') label = ''; label = Array.isArray(label) ? label : label.toString(); var graphics = new Graphics(this.ctx); var textRect = {}; if (w.globals.rotateXLabels) { textRect = graphics.getTextRects(label, parseInt(fontSize, 10), null, "rotate(".concat(w.config.xaxis.labels.rotate, " 0 0)"), false); } else { textRect = graphics.getTextRects(label, parseInt(fontSize, 10)); } if (!Array.isArray(label) && (label.indexOf('NaN') === 0 || label.toLowerCase().indexOf('invalid') === 0 || label.toLowerCase().indexOf('infinity') >= 0 || drawnLabels.indexOf(label) >= 0 && !w.config.xaxis.labels.showDuplicates)) { label = ''; } return { x: x, text: label, textRect: textRect, isBold: isBold }; } }, { key: "checkForOverflowingLabels", value: function checkForOverflowingLabels(i, label, labelsLen, drawnLabels, drawnLabelsRects) { var w = this.w; if (i === 0) { // check if first label is being truncated if (w.globals.skipFirstTimelinelabel) { label.text = ''; } } if (i === labelsLen - 1) { // check if last label is being truncated if (w.globals.skipLastTimelinelabel) { label.text = ''; } } if (w.config.xaxis.labels.hideOverlappingLabels && drawnLabels.length > 0) { var prev = drawnLabelsRects[drawnLabelsRects.length - 1]; if (label.x < prev.textRect.width / (w.globals.rotateXLabels ? Math.abs(w.config.xaxis.labels.rotate) / 12 : 1.01) + prev.x) { label.text = ''; } } return label; } }, { key: "checkForReversedLabels", value: function checkForReversedLabels(i, labels) { var w = this.w; if (w.config.yaxis[i] && w.config.yaxis[i].reversed) { labels.reverse(); } return labels; } }, { key: "isYAxisHidden", value: function isYAxisHidden(index) { var w = this.w; var coreUtils = new CoreUtils(this.ctx); return !w.config.yaxis[index].show || !w.config.yaxis[index].showForNullSeries && coreUtils.isSeriesNull(index) && w.globals.collapsedSeriesIndices.indexOf(index) === -1; } }, { key: "drawYAxisTicks", value: function drawYAxisTicks(x, tickAmount, axisBorder, axisTicks, realIndex, labelsDivider, elYaxis) { var w = this.w; var graphics = new Graphics(this.ctx); // initial label position = 0; var t = w.globals.translateY; if (axisTicks.show && tickAmount > 0) { if (w.config.yaxis[realIndex].opposite === true) x = x + axisTicks.width; for (var i = tickAmount; i >= 0; i--) { var tY = t + tickAmount / 10 + w.config.yaxis[realIndex].labels.offsetY - 1; if (w.globals.isBarHorizontal) { tY = labelsDivider * i; } if (w.config.chart.type === 'heatmap') { tY = tY + labelsDivider / 2; } var elTick = graphics.drawLine(x + axisBorder.offsetX - axisTicks.width + axisTicks.offsetX, tY + axisTicks.offsetY, x + axisBorder.offsetX + axisTicks.offsetX, tY + axisTicks.offsetY, axisTicks.color); elYaxis.add(elTick); t = t + labelsDivider; } } } }]); return AxesUtils; }(); var Exports = /*#__PURE__*/function () { function Exports(ctx) { _classCallCheck(this, Exports); this.ctx = ctx; this.w = ctx.w; } _createClass(Exports, [{ key: "fixSvgStringForIe11", value: function fixSvgStringForIe11(svgData) { // IE11 generates broken SVG that we have to fix by using regex if (!Utils.isIE11()) { // not IE11 - noop return svgData; } // replace second occurence of "xmlns" attribute with "xmlns:xlink" with correct url + add xmlns:svgjs var nXmlnsSeen = 0; var result = svgData.replace(/xmlns="http:\/\/www.w3.org\/2000\/svg"/g, function (match) { nXmlnsSeen++; return nXmlnsSeen === 2 ? 'xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svgjs="http://svgjs.com/svgjs"' : match; }); // remove the invalid empty namespace declarations result = result.replace(/xmlns:NS\d+=""/g, ''); // remove these broken namespaces from attributes result = result.replace(/NS\d+:(\w+:\w+=")/g, '$1'); return result; } }, { key: "getSvgString", value: function getSvgString() { var svgString = this.w.globals.dom.Paper.svg(); return this.fixSvgStringForIe11(svgString); } }, { key: "cleanup", value: function cleanup() { var w = this.w; // hide some elements to avoid printing them on exported svg var xcrosshairs = w.globals.dom.baseEl.getElementsByClassName('apexcharts-xcrosshairs'); var ycrosshairs = w.globals.dom.baseEl.getElementsByClassName('apexcharts-ycrosshairs'); var zoomSelectionRects = w.globals.dom.baseEl.querySelectorAll('.apexcharts-zoom-rect, .apexcharts-selection-rect'); Array.prototype.forEach.call(zoomSelectionRects, function (z) { z.setAttribute('width', 0); }); if (xcrosshairs) { xcrosshairs[0].setAttribute('x', -500); xcrosshairs[0].setAttribute('x1', -500); xcrosshairs[0].setAttribute('x2', -500); } if (ycrosshairs) { ycrosshairs[0].setAttribute('y', -100); ycrosshairs[0].setAttribute('y1', -100); ycrosshairs[0].setAttribute('y2', -100); } } }, { key: "svgUrl", value: function svgUrl() { this.cleanup(); var svgData = this.getSvgString(); var svgBlob = new Blob([svgData], { type: 'image/svg+xml;charset=utf-8' }); return URL.createObjectURL(svgBlob); } }, { key: "dataURI", value: function dataURI() { var _this = this; return new Promise(function (resolve) { var w = _this.w; _this.cleanup(); var canvas = document.createElement('canvas'); canvas.width = w.globals.svgWidth; canvas.height = parseInt(w.globals.dom.elWrap.style.height, 10); // because of resizeNonAxisCharts var canvasBg = w.config.chart.background === 'transparent' ? '#fff' : w.config.chart.background; var ctx = canvas.getContext('2d'); ctx.fillStyle = canvasBg; ctx.fillRect(0, 0, canvas.width, canvas.height); var svgData = _this.getSvgString(); if (window.canvg && Utils.isIE11()) { // use canvg as a polyfill to workaround ie11 considering a canvas with loaded svg 'unsafe' // without ignoreClear we lose our background color; without ignoreDimensions some grid lines become invisible var v = window.canvg.Canvg.fromString(ctx, svgData, { ignoreClear: true, ignoreDimensions: true }); // render the svg to canvas v.start(); var blob = canvas.msToBlob(); // dispose - missing this will cause a memory leak v.stop(); resolve({ blob: blob }); } else { var svgUrl = 'data:image/svg+xml,' + encodeURIComponent(svgData); var img = new Image(); img.crossOrigin = 'anonymous'; img.onload = function () { ctx.drawImage(img, 0, 0); if (canvas.msToBlob) { // IE and Edge can't navigate to data urls, so we return the blob instead var _blob = canvas.msToBlob(); resolve({ blob: _blob }); } else { var imgURI = canvas.toDataURL('image/png'); resolve({ imgURI: imgURI }); } }; img.src = svgUrl; } }); } }, { key: "exportToSVG", value: function exportToSVG() { this.triggerDownload(this.svgUrl(), '.svg'); } }, { key: "exportToPng", value: function exportToPng() { var _this2 = this; this.dataURI().then(function (_ref) { var imgURI = _ref.imgURI, blob = _ref.blob; if (blob) { navigator.msSaveOrOpenBlob(blob, _this2.w.globals.chartID + '.png'); } else { _this2.triggerDownload(imgURI, '.png'); } }); } }, { key: "exportToCSV", value: function exportToCSV(_ref2) { var _this3 = this; var series = _ref2.series, _ref2$columnDelimiter = _ref2.columnDelimiter, columnDelimiter = _ref2$columnDelimiter === void 0 ? ',' : _ref2$columnDelimiter, _ref2$lineDelimiter = _ref2.lineDelimiter, lineDelimiter = _ref2$lineDelimiter === void 0 ? '\n' : _ref2$lineDelimiter; var w = this.w; var columns = []; var rows = []; var result = 'data:text/csv;charset=utf-8,'; var dataFormat = new Data(this.ctx); var axesUtils = new AxesUtils(this.ctx); var getCat = function getCat(i) { var cat = ''; // pie / donut/ radial if (!w.globals.axisCharts) { cat = w.config.labels[i]; } else { // xy charts // non datetime if (w.config.xaxis.type === 'category' || w.config.xaxis.convertedCatToNumeric) { if (w.globals.isBarHorizontal) { var lbFormatter = w.globals.yLabelFormatters[0]; var sr = new Series(_this3.ctx); var activeSeries = sr.getActiveConfigSeriesIndex(); cat = lbFormatter(w.globals.labels[i], { seriesIndex: activeSeries, dataPointIndex: i, w: w }); } else { cat = axesUtils.getLabel(w.globals.labels, w.globals.timescaleLabels, 0, i).text; } } // datetime, but labels specified in categories or labels if (w.config.xaxis.type === 'datetime') { if (w.config.xaxis.categories.length) { cat = w.config.xaxis.categories[i]; } else if (w.config.labels.length) { cat = w.config.labels[i]; } } } return cat; }; var handleAxisRowsColumns = function handleAxisRowsColumns(s, sI) { if (columns.length) { rows.push(columns.join(columnDelimiter)); } if (s.data && s.data.length) { for (var i = 0; i < s.data.length; i++) { columns = []; var cat = getCat(i); if (!cat) { if (dataFormat.isFormatXY()) { cat = series[sI].data[i].x; } else if (dataFormat.isFormat2DArray()) { cat = series[sI].data[i] ? series[sI].data[i][0] : ''; } } if (sI === 0) { columns.push(cat); for (var ci = 0; ci < w.globals.series.length; ci++) { columns.push(w.globals.series[ci][i]); } } if (w.config.chart.type === 'candlestick' || s.type && s.type === 'candlestick') { columns.pop(); columns.push(w.globals.seriesCandleO[sI][i]); columns.push(w.globals.seriesCandleH[sI][i]); columns.push(w.globals.seriesCandleL[sI][i]); columns.push(w.globals.seriesCandleC[sI][i]); } if (w.config.chart.type === 'rangeBar') { columns.pop(); columns.push(w.globals.seriesRangeStart[sI][i]); columns.push(w.globals.seriesRangeEnd[sI][i]); } if (columns.length) { rows.push(columns.join(columnDelimiter)); } } } }; columns.push('category'); series.map(function (s, sI) { if (w.globals.axisCharts) { columns.push(s.name ? s.name : "series-".concat(sI)); } }); if (!w.globals.axisCharts) { columns.push('value'); rows.push(columns.join(columnDelimiter)); } series.map(function (s, sI) { if (w.globals.axisCharts) { handleAxisRowsColumns(s, sI); } else { columns = []; columns.push(w.globals.labels[sI]); columns.push(w.globals.series[sI]); rows.push(columns.join(columnDelimiter)); } }); result += rows.join(lineDelimiter); this.triggerDownload(encodeURI(result), '.csv'); } }, { key: "triggerDownload", value: function triggerDownload(href, ext) { var downloadLink = document.createElement('a'); downloadLink.href = href; downloadLink.download = this.w.globals.chartID + ext; document.body.appendChild(downloadLink); downloadLink.click(); document.body.removeChild(downloadLink); } }]); return Exports; }(); /** * ApexCharts XAxis Class for drawing X-Axis. * * @module XAxis **/ var XAxis = /*#__PURE__*/function () { function XAxis(ctx) { _classCallCheck(this, XAxis); this.ctx = ctx; this.w = ctx.w; var w = this.w; this.axesUtils = new AxesUtils(ctx); this.xaxisLabels = w.globals.labels.slice(); if (w.globals.timescaleLabels.length > 0 && !w.globals.isBarHorizontal) { // timeline labels are there and chart is not rangeabr timeline this.xaxisLabels = w.globals.timescaleLabels.slice(); } this.drawnLabels = []; this.drawnLabelsRects = []; if (w.config.xaxis.position === 'top') { this.offY = 0; } else { this.offY = w.globals.gridHeight + 1; } this.offY = this.offY + w.config.xaxis.axisBorder.offsetY; this.isCategoryBarHorizontal = w.config.chart.type === 'bar' && w.config.plotOptions.bar.horizontal; this.xaxisFontSize = w.config.xaxis.labels.style.fontSize; this.xaxisFontFamily = w.config.xaxis.labels.style.fontFamily; this.xaxisForeColors = w.config.xaxis.labels.style.colors; this.xaxisBorderWidth = w.config.xaxis.axisBorder.width; if (this.isCategoryBarHorizontal) { this.xaxisBorderWidth = w.config.yaxis[0].axisBorder.width.toString(); } if (this.xaxisBorderWidth.indexOf('%') > -1) { this.xaxisBorderWidth = w.globals.gridWidth * parseInt(this.xaxisBorderWidth, 10) / 100; } else { this.xaxisBorderWidth = parseInt(this.xaxisBorderWidth, 10); } this.xaxisBorderHeight = w.config.xaxis.axisBorder.height; // For bars, we will only consider single y xais, // as we are not providing multiple yaxis for bar charts this.yaxis = w.config.yaxis[0]; } _createClass(XAxis, [{ key: "drawXaxis", value: function drawXaxis() { var _this = this; var w = this.w; var graphics = new Graphics(this.ctx); var elXaxis = graphics.group({ class: 'apexcharts-xaxis', transform: "translate(".concat(w.config.xaxis.offsetX, ", ").concat(w.config.xaxis.offsetY, ")") }); var elXaxisTexts = graphics.group({ class: 'apexcharts-xaxis-texts-g', transform: "translate(".concat(w.globals.translateXAxisX, ", ").concat(w.globals.translateXAxisY, ")") }); elXaxis.add(elXaxisTexts); var colWidth; // initial x Position (keep adding column width in the loop) var xPos = w.globals.padHorizontal; var labels = []; for (var i = 0; i < this.xaxisLabels.length; i++) { labels.push(this.xaxisLabels[i]); } var labelsLen = labels.length; if (w.globals.isXNumeric) { var len = labelsLen > 1 ? labelsLen - 1 : labelsLen; colWidth = w.globals.gridWidth / len; xPos = xPos + colWidth / 2 + w.config.xaxis.labels.offsetX; } else { colWidth = w.globals.gridWidth / labels.length; xPos = xPos + colWidth + w.config.xaxis.labels.offsetX; } if (w.config.xaxis.labels.show) { var _loop = function _loop(_i) { var x = xPos - colWidth / 2 + w.config.xaxis.labels.offsetX; if (_i === 0 && labelsLen === 1 && colWidth / 2 === xPos && w.globals.dataPoints === 1) { // single datapoint x = w.globals.gridWidth / 2; } var label = _this.axesUtils.getLabel(labels, w.globals.timescaleLabels, x, _i, _this.drawnLabels, _this.xaxisFontSize); var offsetYCorrection = 28; if (w.globals.rotateXLabels) { offsetYCorrection = 22; } label = _this.axesUtils.checkForOverflowingLabels(_i, label, labelsLen, _this.drawnLabels, _this.drawnLabelsRects); var getCatForeColor = function getCatForeColor() { return w.config.xaxis.convertedCatToNumeric ? _this.xaxisForeColors[w.globals.minX + _i - 1] : _this.xaxisForeColors[_i]; }; if (label.text) { w.globals.xaxisLabelsCount++; } var elText = graphics.drawText({ x: label.x, y: _this.offY + w.config.xaxis.labels.offsetY + offsetYCorrection - (w.config.xaxis.position === 'top' ? w.globals.xAxisHeight + w.config.xaxis.axisTicks.height - 2 : 0), text: label.text, textAnchor: 'middle', fontWeight: label.isBold ? 600 : w.config.xaxis.labels.style.fontWeight, fontSize: _this.xaxisFontSize, fontFamily: _this.xaxisFontFamily, foreColor: Array.isArray(_this.xaxisForeColors) ? getCatForeColor() : _this.xaxisForeColors, isPlainText: false, cssClass: 'apexcharts-xaxis-label ' + w.config.xaxis.labels.style.cssClass }); elXaxisTexts.add(elText); var elTooltipTitle = document.createElementNS(w.globals.SVGNS, 'title'); elTooltipTitle.textContent = label.text; elText.node.appendChild(elTooltipTitle); if (label.text !== '') { _this.drawnLabels.push(label.text); _this.drawnLabelsRects.push(label); } xPos = xPos + colWidth; }; for (var _i = 0; _i <= labelsLen - 1; _i++) { _loop(_i); } } if (w.config.xaxis.title.text !== undefined) { var elXaxisTitle = graphics.group({ class: 'apexcharts-xaxis-title' }); var elXAxisTitleText = graphics.drawText({ x: w.globals.gridWidth / 2 + w.config.xaxis.title.offsetX, y: this.offY - parseFloat(this.xaxisFontSize) + w.globals.xAxisLabelsHeight + w.config.xaxis.title.offsetY, text: w.config.xaxis.title.text, textAnchor: 'middle', fontSize: w.config.xaxis.title.style.fontSize, fontFamily: w.config.xaxis.title.style.fontFamily, fontWeight: w.config.xaxis.title.style.fontWeight, foreColor: w.config.xaxis.title.style.color, cssClass: 'apexcharts-xaxis-title-text ' + w.config.xaxis.title.style.cssClass }); elXaxisTitle.add(elXAxisTitleText); elXaxis.add(elXaxisTitle); } if (w.config.xaxis.axisBorder.show) { var lineCorrection = 0; if (w.config.chart.type === 'bar' && w.globals.isXNumeric) { lineCorrection = lineCorrection - 15; } var elHorzLine = graphics.drawLine(w.globals.padHorizontal + lineCorrection + w.config.xaxis.axisBorder.offsetX, this.offY, this.xaxisBorderWidth, this.offY, w.config.xaxis.axisBorder.color, 0, this.xaxisBorderHeight); elXaxis.add(elHorzLine); } return elXaxis; } // this actually becomes the vertical axis (for bar charts) }, { key: "drawXaxisInversed", value: function drawXaxisInversed(realIndex) { var w = this.w; var graphics = new Graphics(this.ctx); var translateYAxisX = w.config.yaxis[0].opposite ? w.globals.translateYAxisX[realIndex] : 0; var elYaxis = graphics.group({ class: 'apexcharts-yaxis apexcharts-xaxis-inversed', rel: realIndex }); var elYaxisTexts = graphics.group({ class: 'apexcharts-yaxis-texts-g apexcharts-xaxis-inversed-texts-g', transform: 'translate(' + translateYAxisX + ', 0)' }); elYaxis.add(elYaxisTexts); var colHeight; // initial x Position (keep adding column width in the loop) var yPos; var labels = []; if (w.config.yaxis[realIndex].show) { for (var i = 0; i < this.xaxisLabels.length; i++) { labels.push(this.xaxisLabels[i]); } } colHeight = w.globals.gridHeight / labels.length; yPos = -(colHeight / 2.2); var lbFormatter = w.globals.yLabelFormatters[0]; var ylabels = w.config.yaxis[0].labels; if (ylabels.show) { for (var _i2 = 0; _i2 <= labels.length - 1; _i2++) { var label = typeof labels[_i2] === 'undefined' ? '' : labels[_i2]; label = lbFormatter(label, { seriesIndex: realIndex, dataPointIndex: _i2, w: w }); var multiY = 0; if (Array.isArray(label)) { multiY = label.length / 2 * parseInt(ylabels.style.fontSize, 10); } var elLabel = graphics.drawText({ x: ylabels.offsetX - 15, y: yPos + colHeight + ylabels.offsetY - multiY, text: label, textAnchor: this.yaxis.opposite ? 'start' : 'end', foreColor: Array.isArray(ylabels.style.colors) ? ylabels.style.colors[_i2] : ylabels.style.colors, fontSize: ylabels.style.fontSize, fontFamily: ylabels.style.fontFamily, fontWeight: ylabels.style.fontWeight, isPlainText: false, cssClass: 'apexcharts-yaxis-label ' + ylabels.style.cssClass }); elYaxisTexts.add(elLabel); var elTooltipTitle = document.createElementNS(w.globals.SVGNS, 'title'); elTooltipTitle.textContent = label.text; elLabel.node.appendChild(elTooltipTitle); if (w.config.yaxis[realIndex].labels.rotate !== 0) { var labelRotatingCenter = graphics.rotateAroundCenter(elLabel.node); elLabel.node.setAttribute('transform', "rotate(".concat(w.config.yaxis[realIndex].labels.rotate, " 0 ").concat(labelRotatingCenter.y, ")")); } yPos = yPos + colHeight; } } if (w.config.yaxis[0].title.text !== undefined) { var elXaxisTitle = graphics.group({ class: 'apexcharts-yaxis-title apexcharts-xaxis-title-inversed', transform: 'translate(' + translateYAxisX + ', 0)' }); var elXAxisTitleText = graphics.drawText({ x: 0, y: w.globals.gridHeight / 2, text: w.config.yaxis[0].title.text, textAnchor: 'middle', foreColor: w.config.yaxis[0].title.style.color, fontSize: w.config.yaxis[0].title.style.fontSize, fontWeight: w.config.yaxis[0].title.style.fontWeight, fontFamily: w.config.yaxis[0].title.style.fontFamily, cssClass: 'apexcharts-yaxis-title-text ' + w.config.yaxis[0].title.style.cssClass }); elXaxisTitle.add(elXAxisTitleText); elYaxis.add(elXaxisTitle); } var offX = 0; if (this.isCategoryBarHorizontal && w.config.yaxis[0].opposite) { offX = w.globals.gridWidth; } var axisBorder = w.config.xaxis.axisBorder; if (axisBorder.show) { var elVerticalLine = graphics.drawLine(w.globals.padHorizontal + axisBorder.offsetX + offX, 1 + axisBorder.offsetY, w.globals.padHorizontal + axisBorder.offsetX + offX, w.globals.gridHeight + axisBorder.offsetY, axisBorder.color, 0); elYaxis.add(elVerticalLine); } if (w.config.yaxis[0].axisTicks.show) { this.axesUtils.drawYAxisTicks(offX, labels.length, w.config.yaxis[0].axisBorder, w.config.yaxis[0].axisTicks, 0, colHeight, elYaxis); } return elYaxis; } }, { key: "drawXaxisTicks", value: function drawXaxisTicks(x1, appendToElement) { var w = this.w; var x2 = x1; if (x1 < 0 || x1 - 2 > w.globals.gridWidth) return; var y1 = this.offY + w.config.xaxis.axisTicks.offsetY; var y2 = y1 + w.config.xaxis.axisTicks.height; if (w.config.xaxis.position === 'top') { y2 = y1 - w.config.xaxis.axisTicks.height; } if (w.config.xaxis.axisTicks.show) { var graphics = new Graphics(this.ctx); var line = graphics.drawLine(x1 + w.config.xaxis.axisTicks.offsetX, y1 + w.config.xaxis.offsetY, x2 + w.config.xaxis.axisTicks.offsetX, y2 + w.config.xaxis.offsetY, w.config.xaxis.axisTicks.color); // we are not returning anything, but appending directly to the element pased in param appendToElement.add(line); line.node.classList.add('apexcharts-xaxis-tick'); } } }, { key: "getXAxisTicksPositions", value: function getXAxisTicksPositions() { var w = this.w; var xAxisTicksPositions = []; var xCount = this.xaxisLabels.length; var x1 = w.globals.padHorizontal; if (w.globals.timescaleLabels.length > 0) { for (var i = 0; i < xCount; i++) { x1 = this.xaxisLabels[i].position; xAxisTicksPositions.push(x1); } } else { var xCountForCategoryCharts = xCount; for (var _i3 = 0; _i3 < xCountForCategoryCharts; _i3++) { var x1Count = xCountForCategoryCharts; if (w.globals.isXNumeric && w.config.chart.type !== 'bar') { x1Count -= 1; } x1 = x1 + w.globals.gridWidth / x1Count; xAxisTicksPositions.push(x1); } } return xAxisTicksPositions; } // to rotate x-axis labels or to put ... for longer text in xaxis }, { key: "xAxisLabelCorrections", value: function xAxisLabelCorrections() { var w = this.w; var graphics = new Graphics(this.ctx); var xAxis = w.globals.dom.baseEl.querySelector('.apexcharts-xaxis-texts-g'); var xAxisTexts = w.globals.dom.baseEl.querySelectorAll('.apexcharts-xaxis-texts-g text'); var yAxisTextsInversed = w.globals.dom.baseEl.querySelectorAll('.apexcharts-yaxis-inversed text'); var xAxisTextsInversed = w.globals.dom.baseEl.querySelectorAll('.apexcharts-xaxis-inversed-texts-g text tspan'); if (w.globals.rotateXLabels || w.config.xaxis.labels.rotateAlways) { for (var xat = 0; xat < xAxisTexts.length; xat++) { var textRotatingCenter = graphics.rotateAroundCenter(xAxisTexts[xat]); textRotatingCenter.y = textRotatingCenter.y - 1; // + tickWidth/4; textRotatingCenter.x = textRotatingCenter.x + 1; xAxisTexts[xat].setAttribute('transform', "rotate(".concat(w.config.xaxis.labels.rotate, " ").concat(textRotatingCenter.x, " ").concat(textRotatingCenter.y, ")")); xAxisTexts[xat].setAttribute('text-anchor', "end"); var offsetHeight = 10; xAxis.setAttribute('transform', "translate(0, ".concat(-offsetHeight, ")")); var tSpan = xAxisTexts[xat].childNodes; if (w.config.xaxis.labels.trim) { Array.prototype.forEach.call(tSpan, function (ts) { graphics.placeTextWithEllipsis(ts, ts.textContent, w.config.xaxis.labels.maxHeight - (w.config.legend.position === 'bottom' ? 20 : 10)); }); } } } else { (function () { var width = w.globals.gridWidth / (w.globals.labels.length + 1); for (var _xat = 0; _xat < xAxisTexts.length; _xat++) { var _tSpan = xAxisTexts[_xat].childNodes; if (w.config.xaxis.labels.trim && w.config.xaxis.type !== 'datetime') { Array.prototype.forEach.call(_tSpan, function (ts) { graphics.placeTextWithEllipsis(ts, ts.textContent, width); }); } } })(); } if (yAxisTextsInversed.length > 0) { // truncate rotated y axis in bar chart (x axis) var firstLabelPosX = yAxisTextsInversed[yAxisTextsInversed.length - 1].getBBox(); var lastLabelPosX = yAxisTextsInversed[0].getBBox(); if (firstLabelPosX.x < -20) { yAxisTextsInversed[yAxisTextsInversed.length - 1].parentNode.removeChild(yAxisTextsInversed[yAxisTextsInversed.length - 1]); } if (lastLabelPosX.x + lastLabelPosX.width > w.globals.gridWidth && !w.globals.isBarHorizontal) { yAxisTextsInversed[0].parentNode.removeChild(yAxisTextsInversed[0]); } // truncate rotated x axis in bar chart (y axis) for (var _xat2 = 0; _xat2 < xAxisTextsInversed.length; _xat2++) { graphics.placeTextWithEllipsis(xAxisTextsInversed[_xat2], xAxisTextsInversed[_xat2].textContent, w.config.yaxis[0].labels.maxWidth - parseFloat(w.config.yaxis[0].title.style.fontSize) * 2 - 20); } } } // renderXAxisBands() { // let w = this.w; // let plotBand = document.createElementNS(w.globals.SVGNS, 'rect') // w.globals.dom.elGraphical.add(plotBand) // } }]); return XAxis; }(); /** * ApexCharts Grid Class for drawing Cartesian Grid. * * @module Grid **/ var Grid = /*#__PURE__*/function () { function Grid(ctx) { _classCallCheck(this, Grid); this.ctx = ctx; this.w = ctx.w; var w = this.w; this.xaxisLabels = w.globals.labels.slice(); this.axesUtils = new AxesUtils(ctx); this.isTimelineBar = w.config.xaxis.type === 'datetime' && w.globals.seriesRangeBarTimeline.length; if (w.globals.timescaleLabels.length > 0) { // timescaleLabels labels are there this.xaxisLabels = w.globals.timescaleLabels.slice(); } } // when using sparklines or when showing no grid, we need to have a grid area which is reused at many places for other calculations as well _createClass(Grid, [{ key: "drawGridArea", value: function drawGridArea() { var elGrid = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; var w = this.w; var graphics = new Graphics(this.ctx); if (elGrid === null) { elGrid = graphics.group({ class: 'apexcharts-grid' }); } var elVerticalLine = graphics.drawLine(w.globals.padHorizontal, 1, w.globals.padHorizontal, w.globals.gridHeight, 'transparent'); var elHorzLine = graphics.drawLine(w.globals.padHorizontal, w.globals.gridHeight, w.globals.gridWidth, w.globals.gridHeight, 'transparent'); elGrid.add(elHorzLine); elGrid.add(elVerticalLine); return elGrid; } }, { key: "drawGrid", value: function drawGrid() { var gl = this.w.globals; var elgrid = null; if (gl.axisCharts) { // grid is drawn after xaxis and yaxis are drawn elgrid = this.renderGrid(); this.drawGridArea(elgrid.el); } return elgrid; } // This mask will clip off overflowing graphics from the drawable area }, { key: "createGridMask", value: function createGridMask() { var w = this.w; var gl = w.globals; var graphics = new Graphics(this.ctx); var strokeSize = Array.isArray(w.config.stroke.width) ? 0 : w.config.stroke.width; if (Array.isArray(w.config.stroke.width)) { var strokeMaxSize = 0; w.config.stroke.width.forEach(function (m) { strokeMaxSize = Math.max(strokeMaxSize, m); }); strokeSize = strokeMaxSize; } gl.dom.elGridRectMask = document.createElementNS(gl.SVGNS, 'clipPath'); gl.dom.elGridRectMask.setAttribute('id', "gridRectMask".concat(gl.cuid)); gl.dom.elGridRectMarkerMask = document.createElementNS(gl.SVGNS, 'clipPath'); gl.dom.elGridRectMarkerMask.setAttribute('id', "gridRectMarkerMask".concat(gl.cuid)); // let barHalfWidth = 0 var type = w.config.chart.type; var hasBar = type === 'bar' || type === 'rangeBar' || w.globals.comboBarCount > 0; var barWidthLeft = 0; var barWidthRight = 0; if (hasBar && w.globals.isXNumeric && !w.globals.isBarHorizontal) { barWidthLeft = w.config.grid.padding.left; barWidthRight = w.config.grid.padding.right; if (gl.barPadForNumericAxis > barWidthLeft) { barWidthLeft = gl.barPadForNumericAxis; barWidthRight = gl.barPadForNumericAxis; } } gl.dom.elGridRect = graphics.drawRect(-strokeSize / 2 - barWidthLeft - 2, -strokeSize / 2, gl.gridWidth + strokeSize + barWidthRight + barWidthLeft + 4, gl.gridHeight + strokeSize, 0, '#fff'); var coreUtils = new CoreUtils(this); coreUtils.getLargestMarkerSize(); var markerSize = w.globals.markers.largestSize + 1; gl.dom.elGridRectMarker = graphics.drawRect(-markerSize * 2, -markerSize * 2, gl.gridWidth + markerSize * 4, gl.gridHeight + markerSize * 4, 0, '#fff'); gl.dom.elGridRectMask.appendChild(gl.dom.elGridRect.node); gl.dom.elGridRectMarkerMask.appendChild(gl.dom.elGridRectMarker.node); var defs = gl.dom.baseEl.querySelector('defs'); defs.appendChild(gl.dom.elGridRectMask); defs.appendChild(gl.dom.elGridRectMarkerMask); } }, { key: "_drawGridLines", value: function _drawGridLines(_ref) { var i = _ref.i, x1 = _ref.x1, y1 = _ref.y1, x2 = _ref.x2, y2 = _ref.y2, xCount = _ref.xCount, parent = _ref.parent; var w = this.w; var shouldDraw = function shouldDraw() { if (i === 0 && w.globals.skipFirstTimelinelabel) { return false; } if (i === xCount - 1 && w.globals.skipLastTimelinelabel) { return false; } if (w.config.chart.type === 'radar') { return false; } return true; }; if (shouldDraw()) { if (w.config.grid.xaxis.lines.show) { this._drawGridLine({ x1: x1, y1: y1, x2: x2, y2: y2, parent: parent }); } var xAxis = new XAxis(this.ctx); xAxis.drawXaxisTicks(x1, this.elg); } } }, { key: "_drawGridLine", value: function _drawGridLine(_ref2) { var x1 = _ref2.x1, y1 = _ref2.y1, x2 = _ref2.x2, y2 = _ref2.y2, parent = _ref2.parent; var w = this.w; var strokeDashArray = w.config.grid.strokeDashArray; var graphics = new Graphics(this); var line = graphics.drawLine(x1, y1, x2, y2, w.config.grid.borderColor, strokeDashArray); line.node.classList.add('apexcharts-gridline'); parent.add(line); } }, { key: "_drawGridBandRect", value: function _drawGridBandRect(_ref3) { var c = _ref3.c, x1 = _ref3.x1, y1 = _ref3.y1, x2 = _ref3.x2, y2 = _ref3.y2, type = _ref3.type; var w = this.w; var graphics = new Graphics(this.ctx); if (type === 'column' && w.config.xaxis.type === 'datetime') return; var color = w.config.grid[type].colors[c]; var rect = graphics.drawRect(x1, y1, x2, y2, 0, color, w.config.grid[type].opacity); this.elg.add(rect); rect.attr('clip-path', "url(#gridRectMask".concat(w.globals.cuid, ")")); rect.node.classList.add("apexcharts-grid-".concat(type)); } }, { key: "_drawXYLines", value: function _drawXYLines(_ref4) { var _this = this; var xCount = _ref4.xCount, tickAmount = _ref4.tickAmount; var w = this.w; var datetimeLines = function datetimeLines(_ref5) { var xC = _ref5.xC, x1 = _ref5.x1, y1 = _ref5.y1, x2 = _ref5.x2, y2 = _ref5.y2; for (var i = 0; i < xC; i++) { x1 = _this.xaxisLabels[i].position; x2 = _this.xaxisLabels[i].position; _this._drawGridLines({ i: i, x1: x1, y1: y1, x2: x2, y2: y2, xCount: xCount, parent: _this.elgridLinesV }); } }; var categoryLines = function categoryLines(_ref6) { var xC = _ref6.xC, x1 = _ref6.x1, y1 = _ref6.y1, x2 = _ref6.x2, y2 = _ref6.y2; for (var i = 0; i < xC + (w.globals.isXNumeric ? 0 : 1); i++) { if (i === 0 && xC === 1 && w.globals.dataPoints === 1) { // single datapoint x1 = w.globals.gridWidth / 2; x2 = x1; } _this._drawGridLines({ i: i, x1: x1, y1: y1, x2: x2, y2: y2, xCount: xCount, parent: _this.elgridLinesV }); x1 = x1 + w.globals.gridWidth / (w.globals.isXNumeric ? xC - 1 : xC); x2 = x1; } }; // draw vertical lines if (w.config.grid.xaxis.lines.show || w.config.xaxis.axisTicks.show) { var x1 = w.globals.padHorizontal; var y1 = 0; var x2; var y2 = w.globals.gridHeight; if (w.globals.timescaleLabels.length) { datetimeLines({ xC: xCount, x1: x1, y1: y1, x2: x2, y2: y2 }); } else { if (w.globals.isXNumeric) { xCount = w.globals.xAxisScale.result.length; } if (w.config.xaxis.convertedCatToNumeric) { // in case of a convertedCatToNumeric, some labels might be skipped due to hideOverLapping labels, hence use this var to get the visible ticks xCount = w.globals.xaxisLabelsCount; } categoryLines({ xC: xCount, x1: x1, y1: y1, x2: x2, y2: y2 }); } } // draw horizontal lines if (w.config.grid.yaxis.lines.show) { var _x = 0; var _y = 0; var _y2 = 0; var _x2 = w.globals.gridWidth; var tA = tickAmount + 1; if (this.isTimelineBar) { tA = w.globals.labels.length; } for (var i = 0; i < tA + (this.isTimelineBar ? 1 : 0); i++) { this._drawGridLine({ x1: _x, y1: _y, x2: _x2, y2: _y2, parent: this.elgridLinesH }); _y = _y + w.globals.gridHeight / (this.isTimelineBar ? tA : tickAmount); _y2 = _y; } } } }, { key: "_drawInvertedXYLines", value: function _drawInvertedXYLines(_ref7) { var xCount = _ref7.xCount; var w = this.w; // draw vertical lines if (w.config.grid.xaxis.lines.show || w.config.xaxis.axisTicks.show) { var x1 = w.globals.padHorizontal; var y1 = 0; var x2; var y2 = w.globals.gridHeight; for (var i = 0; i < xCount + 1; i++) { if (w.config.grid.xaxis.lines.show) { this._drawGridLine({ x1: x1, y1: y1, x2: x2, y2: y2, parent: this.elgridLinesV }); } var xAxis = new XAxis(this.ctx); xAxis.drawXaxisTicks(x1, this.elg); x1 = x1 + w.globals.gridWidth / xCount + 0.3; x2 = x1; } } // draw horizontal lines if (w.config.grid.yaxis.lines.show) { var _x3 = 0; var _y3 = 0; var _y4 = 0; var _x4 = w.globals.gridWidth; for (var _i = 0; _i < w.globals.dataPoints + 1; _i++) { this._drawGridLine({ x1: _x3, y1: _y3, x2: _x4, y2: _y4, parent: this.elgridLinesH }); _y3 = _y3 + w.globals.gridHeight / w.globals.dataPoints; _y4 = _y3; } } } // actual grid rendering }, { key: "renderGrid", value: function renderGrid() { var w = this.w; var graphics = new Graphics(this.ctx); this.elg = graphics.group({ class: 'apexcharts-grid' }); this.elgridLinesH = graphics.group({ class: 'apexcharts-gridlines-horizontal' }); this.elgridLinesV = graphics.group({ class: 'apexcharts-gridlines-vertical' }); this.elg.add(this.elgridLinesH); this.elg.add(this.elgridLinesV); if (!w.config.grid.show) { this.elgridLinesV.hide(); this.elgridLinesH.hide(); } var yTickAmount = w.globals.yAxisScale.length ? w.globals.yAxisScale[0].result.length - 1 : 5; for (var i = 0; i < w.globals.series.length; i++) { if (typeof w.globals.yAxisScale[i] !== 'undefined') { yTickAmount = w.globals.yAxisScale[i].result.length - 1; } if (yTickAmount > 2) break; } var xCount; if (!w.globals.isBarHorizontal || this.isTimelineBar) { xCount = this.xaxisLabels.length; if (this.isTimelineBar) { yTickAmount = w.globals.labels.length; } this._drawXYLines({ xCount: xCount, tickAmount: yTickAmount }); } else { xCount = yTickAmount; // for horizontal bar chart, get the xaxis tickamount yTickAmount = w.globals.xTickAmount; this._drawInvertedXYLines({ xCount: xCount, tickAmount: yTickAmount }); } this.drawGridBands(xCount, yTickAmount); return { el: this.elg, xAxisTickWidth: w.globals.gridWidth / xCount }; } }, { key: "drawGridBands", value: function drawGridBands(xCount, tickAmount) { var w = this.w; // rows background bands if (w.config.grid.row.colors !== undefined && w.config.grid.row.colors.length > 0) { var x1 = 0; var y1 = 0; var y2 = w.globals.gridHeight / tickAmount; var x2 = w.globals.gridWidth; for (var i = 0, c = 0; i < tickAmount; i++, c++) { if (c >= w.config.grid.row.colors.length) { c = 0; } this._drawGridBandRect({ c: c, x1: x1, y1: y1, x2: x2, y2: y2, type: 'row' }); y1 = y1 + w.globals.gridHeight / tickAmount; } } // columns background bands if (w.config.grid.column.colors !== undefined && w.config.grid.column.colors.length > 0) { var xc = !w.globals.isBarHorizontal && (w.config.xaxis.type === 'category' || w.config.xaxis.convertedCatToNumeric) ? xCount - 1 : xCount; var _x5 = w.globals.padHorizontal; var _y5 = 0; var _x6 = w.globals.padHorizontal + w.globals.gridWidth / xc; var _y6 = w.globals.gridHeight; for (var _i2 = 0, _c = 0; _i2 < xCount; _i2++, _c++) { if (_c >= w.config.grid.column.colors.length) { _c = 0; } this._drawGridBandRect({ c: _c, x1: _x5, y1: _y5, x2: _x6, y2: _y6, type: 'column' }); _x5 = _x5 + w.globals.gridWidth / xc; } } } }]); return Grid; }(); var Range = /*#__PURE__*/function () { function Range(ctx) { _classCallCheck(this, Range); this.ctx = ctx; this.w = ctx.w; } // http://stackoverflow.com/questions/326679/choosing-an-attractive-linear-scale-for-a-graphs-y-axiss // This routine creates the Y axis values for a graph. _createClass(Range, [{ key: "niceScale", value: function niceScale(yMin, yMax, diff) { var index = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0; var ticks = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 10; var NO_MIN_MAX_PROVIDED = arguments.length > 5 ? arguments[5] : undefined; var w = this.w; if (ticks === 'dataPoints') { ticks = w.globals.dataPoints - 1; } if (yMin === Number.MIN_VALUE && yMax === 0 || !Utils.isNumber(yMin) && !Utils.isNumber(yMax) || yMin === Number.MIN_VALUE && yMax === -Number.MAX_VALUE) { // when all values are 0 yMin = 0; yMax = ticks; var linearScale = this.linearScale(yMin, yMax, ticks); return linearScale; } if (yMin > yMax) { // if somehow due to some wrong config, user sent max less than min, // adjust the min/max again console.warn('axis.min cannot be greater than axis.max'); yMax = yMin + 0.1; } else if (yMin === yMax) { // If yMin and yMax are identical, then // adjust the yMin and yMax values to actually // make a graph. Also avoids division by zero errors. yMin = yMin === 0 ? 0 : yMin - 0.5; // some small value yMax = yMax === 0 ? 2 : yMax + 0.5; // some small value } // Calculate Min amd Max graphical labels and graph // increments. The number of ticks defaults to // 10 which is the SUGGESTED value. Any tick value // entered is used as a suggested value which is // adjusted to be a 'pretty' value. // // Output will be an array of the Y axis values that // encompass the Y values. var result = []; // Determine Range var range = Math.abs(yMax - yMin); if (range < 1 && NO_MIN_MAX_PROVIDED && (w.config.chart.type === 'candlestick' || w.config.series[index].type === 'candlestick' || w.globals.isRangeData)) { /* fix https://github.com/apexcharts/apexcharts.js/issues/430 */ yMax = yMax * 1.01; } var tiks = ticks + 1; // Adjust ticks if needed if (tiks < 2) { tiks = 2; } else if (tiks > 2) { tiks -= 2; } // Get raw step value var tempStep = range / tiks; // Calculate pretty step value var mag = Math.floor(Utils.log10(tempStep)); var magPow = Math.pow(10, mag); var magMsd = Math.round(tempStep / magPow); if (magMsd < 1) { magMsd = 1; } var stepSize = magMsd * magPow; // build Y label array. // Lower and upper bounds calculations var lb = stepSize * Math.floor(yMin / stepSize); var ub = stepSize * Math.ceil(yMax / stepSize); // Build array var val = lb; if (NO_MIN_MAX_PROVIDED && range > 2) { while (1) { result.push(val); val += stepSize; if (val > ub) { break; } } return { result: result, niceMin: result[0], niceMax: result[result.length - 1] }; } else { result = []; var v = yMin; result.push(v); var valuesDivider = Math.abs(yMax - yMin) / ticks; for (var i = 0; i <= ticks; i++) { v = v + valuesDivider; result.push(v); } if (result[result.length - 2] >= yMax) { result.pop(); } return { result: result, niceMin: result[0], niceMax: result[result.length - 1] }; } } }, { key: "linearScale", value: function linearScale(yMin, yMax) { var ticks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 10; var range = Math.abs(yMax - yMin); var step = range / ticks; if (ticks === Number.MAX_VALUE) { ticks = 10; step = 1; } var result = []; var v = yMin; while (ticks >= 0) { result.push(v); v = v + step; ticks -= 1; } return { result: result, niceMin: result[0], niceMax: result[result.length - 1] }; } }, { key: "logarithmicScale", value: function logarithmicScale(index, yMin, yMax, ticks) { if (yMin < 0 || yMin === Number.MIN_VALUE) yMin = 0.01; var base = 10; var min = Math.log(yMin) / Math.log(base); var max = Math.log(yMax) / Math.log(base); var range = Math.abs(yMax - yMin); var step = range / ticks; var result = []; var v = yMin; while (ticks >= 0) { result.push(v); v = v + step; ticks -= 1; } var logs = result.map(function (niceNumber, i) { if (niceNumber <= 0) { niceNumber = 0.01; } // calculate adjustment factor var scale = (max - min) / (yMax - yMin); var logVal = Math.pow(base, min + scale * (niceNumber - min)); return Math.round(logVal / Utils.roundToBase(logVal, base)) * Utils.roundToBase(logVal, base); }); // Math.floor may have rounded the value to 0, revert back to 1 if (logs[0] === 0) logs[0] = 1; return { result: logs, niceMin: logs[0], niceMax: logs[logs.length - 1] }; } }, { key: "setYScaleForIndex", value: function setYScaleForIndex(index, minY, maxY) { var gl = this.w.globals; var cnf = this.w.config; var y = gl.isBarHorizontal ? cnf.xaxis : cnf.yaxis[index]; if (typeof gl.yAxisScale[index] === 'undefined') { gl.yAxisScale[index] = []; } var diff = Math.abs(maxY - minY); if (y.logarithmic && diff <= 5) { gl.invalidLogScale = true; } if (y.logarithmic && diff > 5) { gl.allSeriesCollapsed = false; gl.yAxisScale[index] = this.logarithmicScale(index, minY, maxY, y.tickAmount ? y.tickAmount : Math.floor(Math.log10(maxY))); } else { if (maxY === -Number.MAX_VALUE || !Utils.isNumber(maxY)) { // no data in the chart. Either all series collapsed or user passed a blank array gl.yAxisScale[index] = this.linearScale(0, 5, 5); } else { // there is some data. Turn off the allSeriesCollapsed flag gl.allSeriesCollapsed = false; if ((y.min !== undefined || y.max !== undefined) && !y.forceNiceScale) { // fix https://github.com/apexcharts/apexcharts.js/issues/492 gl.yAxisScale[index] = this.linearScale(minY, maxY, y.tickAmount); } else { var noMinMaxProvided = cnf.yaxis[index].max === undefined && cnf.yaxis[index].min === undefined || cnf.yaxis[index].forceNiceScale; gl.yAxisScale[index] = this.niceScale(minY, maxY, diff, index, // fix https://github.com/apexcharts/apexcharts.js/issues/397 y.tickAmount ? y.tickAmount : diff < 5 && diff > 1 ? diff + 1 : 5, noMinMaxProvided); } } } } }, { key: "setXScale", value: function setXScale(minX, maxX) { var w = this.w; var gl = w.globals; var x = w.config.xaxis; var diff = Math.abs(maxX - minX); if (maxX === -Number.MAX_VALUE || !Utils.isNumber(maxX)) { // no data in the chart. Either all series collapsed or user passed a blank array gl.xAxisScale = this.linearScale(0, 5, 5); } else { gl.xAxisScale = this.niceScale(minX, maxX, diff, 0, x.tickAmount ? x.tickAmount : diff < 5 && diff > 1 ? diff + 1 : 5); } return gl.xAxisScale; } }, { key: "setMultipleYScales", value: function setMultipleYScales() { var _this = this; var gl = this.w.globals; var cnf = this.w.config; var minYArr = gl.minYArr.concat([]); var maxYArr = gl.maxYArr.concat([]); var scalesIndices = []; // here, we loop through the yaxis array and find the item which has "seriesName" property cnf.yaxis.forEach(function (yaxe, i) { var index = i; cnf.series.forEach(function (s, si) { // if seriesName matches and that series is not collapsed, we use that scale // fix issue #1215 // proceed even if si is in gl.collapsedSeriesIndices if (s.name === yaxe.seriesName) { index = si; if (i !== si) { scalesIndices.push({ index: si, similarIndex: i, alreadyExists: true }); } else { scalesIndices.push({ index: si }); } } }); var minY = minYArr[index]; var maxY = maxYArr[index]; _this.setYScaleForIndex(i, minY, maxY); }); this.sameScaleInMultipleAxes(minYArr, maxYArr, scalesIndices); } }, { key: "sameScaleInMultipleAxes", value: function sameScaleInMultipleAxes(minYArr, maxYArr, scalesIndices) { var _this2 = this; var cnf = this.w.config; var gl = this.w.globals; // we got the scalesIndices array in the above code, but we need to filter out the items which doesn't have same scales var similarIndices = []; scalesIndices.forEach(function (scale) { if (scale.alreadyExists) { if (typeof similarIndices[scale.index] === 'undefined') { similarIndices[scale.index] = []; } similarIndices[scale.index].push(scale.index); similarIndices[scale.index].push(scale.similarIndex); } }); function intersect(a, b) { return a.filter(function (value) { return b.indexOf(value) !== -1; }); } gl.yAxisSameScaleIndices = similarIndices; similarIndices.forEach(function (si, i) { similarIndices.forEach(function (sj, j) { if (i !== j) { if (intersect(si, sj).length > 0) { similarIndices[i] = similarIndices[i].concat(similarIndices[j]); } } }); }); // then, we remove duplicates from the similarScale array var uniqueSimilarIndices = similarIndices.map(function (item) { return item.filter(function (i, pos) { return item.indexOf(i) === pos; }); }); // sort further to remove whole duplicate arrays later var sortedIndices = uniqueSimilarIndices.map(function (s) { return s.sort(); }); // remove undefined items similarIndices = similarIndices.filter(function (s) { return !!s; }); var indices = sortedIndices.slice(); var stringIndices = indices.map(function (ind) { return JSON.stringify(ind); }); indices = indices.filter(function (ind, p) { return stringIndices.indexOf(JSON.stringify(ind)) === p; }); var sameScaleMinYArr = []; var sameScaleMaxYArr = []; minYArr.forEach(function (minYValue, yi) { indices.forEach(function (scale, i) { // we compare only the yIndex which exists in the indices array if (scale.indexOf(yi) > -1) { if (typeof sameScaleMinYArr[i] === 'undefined') { sameScaleMinYArr[i] = []; sameScaleMaxYArr[i] = []; } sameScaleMinYArr[i].push({ key: yi, value: minYValue }); sameScaleMaxYArr[i].push({ key: yi, value: maxYArr[yi] }); } }); }); var sameScaleMin = Array.apply(null, Array(indices.length)).map(Number.prototype.valueOf, Number.MIN_VALUE); var sameScaleMax = Array.apply(null, Array(indices.length)).map(Number.prototype.valueOf, -Number.MAX_VALUE); sameScaleMinYArr.forEach(function (s, i) { s.forEach(function (sc, j) { sameScaleMin[i] = Math.min(sc.value, sameScaleMin[i]); }); }); sameScaleMaxYArr.forEach(function (s, i) { s.forEach(function (sc, j) { sameScaleMax[i] = Math.max(sc.value, sameScaleMax[i]); }); }); minYArr.forEach(function (min, i) { sameScaleMaxYArr.forEach(function (s, si) { var minY = sameScaleMin[si]; var maxY = sameScaleMax[si]; if (cnf.chart.stacked) { // for stacked charts, we need to add the values maxY = 0; s.forEach(function (ind, k) { // fix incorrectly adjust y scale issue #1215 if (ind.value !== -Number.MAX_VALUE) { maxY += ind.value; } if (minY !== Number.MIN_VALUE) { minY += sameScaleMinYArr[si][k].value; } }); } s.forEach(function (ind, k) { if (s[k].key === i) { if (cnf.yaxis[i].min !== undefined) { if (typeof cnf.yaxis[i].min === 'function') { minY = cnf.yaxis[i].min(gl.minY); } else { minY = cnf.yaxis[i].min; } } if (cnf.yaxis[i].max !== undefined) { if (typeof cnf.yaxis[i].max === 'function') { maxY = cnf.yaxis[i].max(gl.maxY); } else { maxY = cnf.yaxis[i].max; } } _this2.setYScaleForIndex(i, minY, maxY); } }); }); }); } // experimental feature which scales the y-axis to a min/max based on x-axis range }, { key: "autoScaleY", value: function autoScaleY(ctx, yaxis, e) { if (!ctx) { ctx = this; } var w = ctx.w; if (w.globals.isMultipleYAxis || w.globals.collapsedSeries.length) { // The autoScale option for multiple y-axis is turned off as it leads to buggy behavior. // Also, when a series is collapsed, it results in incorrect behavior. Hence turned it off for that too - fixes apexcharts.js#795 console.warn('autoScaleYaxis is not supported in a multi-yaxis chart.'); return yaxis; } var seriesX = w.globals.seriesX[0]; var isStacked = w.config.chart.stacked; yaxis.forEach(function (yaxe, yi) { var firstXIndex = 0; for (var xi = 0; xi < seriesX.length; xi++) { if (seriesX[xi] >= e.xaxis.min) { firstXIndex = xi; break; } } var initialMin = w.globals.minYArr[yi]; var initialMax = w.globals.maxYArr[yi]; var min, max; var stackedSer = w.globals.stackedSeriesTotals; w.globals.series.forEach(function (serie, sI) { var firstValue = serie[firstXIndex]; if (isStacked) { firstValue = stackedSer[firstXIndex]; min = max = firstValue; stackedSer.forEach(function (y, yI) { if (seriesX[yI] <= e.xaxis.max && seriesX[yI] >= e.xaxis.min) { if (y > max && y !== null) max = y; if (serie[yI] < min && serie[yI] !== null) min = serie[yI]; } }); } else { min = max = firstValue; serie.forEach(function (y, yI) { if (seriesX[yI] <= e.xaxis.max && seriesX[yI] >= e.xaxis.min) { var valMin = y; var valMax = y; w.globals.series.forEach(function (wS, wSI) { if (y !== null) { valMin = Math.min(wS[yI], valMin); valMax = Math.max(wS[yI], valMax); } }); if (valMax > max && valMax !== null) max = valMax; if (valMin < min && valMin !== null) min = valMin; } }); } if (min === undefined && max === undefined) { min = initialMin; max = initialMax; } min *= min < 0 ? 1.1 : 0.9; max *= max < 0 ? 0.9 : 1.1; if (max < 0 && max < initialMax) { max = initialMax; } if (min < 0 && min > initialMin) { min = initialMin; } if (yaxis.length > 1) { yaxis[sI].min = yaxe.min === undefined ? min : yaxe.min; yaxis[sI].max = yaxe.max === undefined ? max : yaxe.max; } else { yaxis[0].min = yaxe.min === undefined ? min : yaxe.min; yaxis[0].max = yaxe.max === undefined ? max : yaxe.max; } }); }); return yaxis; } }]); return Range; }(); /** * Range is used to generates values between min and max. * * @module Range **/ var Range$1 = /*#__PURE__*/function () { function Range$1(ctx) { _classCallCheck(this, Range$1); this.ctx = ctx; this.w = ctx.w; this.scales = new Range(ctx); } _createClass(Range$1, [{ key: "init", value: function init() { this.setYRange(); this.setXRange(); this.setZRange(); } }, { key: "getMinYMaxY", value: function getMinYMaxY(startingIndex) { var lowestY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Number.MAX_VALUE; var highestY = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : -Number.MAX_VALUE; var len = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; var cnf = this.w.config; var gl = this.w.globals; var maxY = -Number.MAX_VALUE; var minY = Number.MIN_VALUE; if (len === null) { len = startingIndex + 1; } var series = gl.series; var seriesMin = series; var seriesMax = series; if (cnf.chart.type === 'candlestick') { seriesMin = gl.seriesCandleL; seriesMax = gl.seriesCandleH; } else if (gl.isRangeData) { seriesMin = gl.seriesRangeStart; seriesMax = gl.seriesRangeEnd; } for (var i = startingIndex; i < len; i++) { gl.dataPoints = Math.max(gl.dataPoints, series[i].length); for (var j = 0; j < gl.series[i].length; j++) { var val = series[i][j]; if (val !== null && Utils.isNumber(val)) { maxY = Math.max(maxY, seriesMax[i][j]); lowestY = Math.min(lowestY, seriesMin[i][j]); highestY = Math.max(highestY, seriesMin[i][j]); if (this.w.config.chart.type === 'candlestick') { maxY = Math.max(maxY, gl.seriesCandleO[i][j]); maxY = Math.max(maxY, gl.seriesCandleH[i][j]); maxY = Math.max(maxY, gl.seriesCandleL[i][j]); maxY = Math.max(maxY, gl.seriesCandleC[i][j]); highestY = maxY; } if (Utils.isFloat(val)) { val = Utils.noExponents(val); gl.yValueDecimal = Math.max(gl.yValueDecimal, val.toString().split('.')[1].length); } if (minY > seriesMin[i][j] && seriesMin[i][j] < 0) { minY = seriesMin[i][j]; } } else { gl.hasNullValues = true; } } } if (cnf.chart.type === 'rangeBar' && gl.seriesRangeStart.length && cnf.xaxis.type === 'datetime') { minY = lowestY; } if (cnf.chart.type === 'bar') { if (minY < 0 && maxY < 0) { // all negative values in a bar chart, hence make the max to 0 maxY = 0; } if (minY === Number.MIN_VALUE) { minY = 0; } } return { minY: minY, maxY: maxY, lowestY: lowestY, highestY: highestY }; } }, { key: "setYRange", value: function setYRange() { var gl = this.w.globals; var cnf = this.w.config; gl.maxY = -Number.MAX_VALUE; gl.minY = Number.MIN_VALUE; var lowestYInAllSeries = Number.MAX_VALUE; if (gl.isMultipleYAxis) { // we need to get minY and maxY for multiple y axis for (var i = 0; i < gl.series.length; i++) { var minYMaxYArr = this.getMinYMaxY(i, lowestYInAllSeries, null, i + 1); gl.minYArr.push(minYMaxYArr.minY); gl.maxYArr.push(minYMaxYArr.maxY); lowestYInAllSeries = minYMaxYArr.lowestY; } } // and then, get the minY and maxY from all series var minYMaxY = this.getMinYMaxY(0, lowestYInAllSeries, null, gl.series.length); gl.minY = minYMaxY.minY; gl.maxY = minYMaxY.maxY; lowestYInAllSeries = minYMaxY.lowestY; if (cnf.chart.stacked) { this._setStackedMinMax(); } // if the numbers are too big, reduce the range // for eg, if number is between 100000-110000, putting 0 as the lowest value is not so good idea. So change the gl.minY for line/area/candlesticks if (cnf.chart.type === 'line' || cnf.chart.type === 'area' || cnf.chart.type === 'candlestick') { if (gl.minY === Number.MIN_VALUE && lowestYInAllSeries !== -Number.MAX_VALUE && lowestYInAllSeries !== gl.maxY // single value possibility ) { var diff = gl.maxY - lowestYInAllSeries; if (lowestYInAllSeries >= 0 && lowestYInAllSeries <= 10) { // if minY is already 0/low value, we don't want to go negatives here - so this check is essential. diff = 0; } gl.minY = lowestYInAllSeries - diff * 5 / 100; /* fix https://github.com/apexcharts/apexcharts.js/issues/614 */ /* fix https://github.com/apexcharts/apexcharts.js/issues/968 */ if (lowestYInAllSeries > 0 && gl.minY < 0) { gl.minY = 0; } /* fix https://github.com/apexcharts/apexcharts.js/issues/426 */ gl.maxY = gl.maxY + diff * 5 / 100; } } cnf.yaxis.forEach(function (yaxe, index) { // override all min/max values by user defined values (y axis) if (yaxe.max !== undefined) { if (typeof yaxe.max === 'number') { gl.maxYArr[index] = yaxe.max; } else if (typeof yaxe.max === 'function') { gl.maxYArr[index] = yaxe.max(gl.maxY); } // gl.maxY is for single y-axis chart, it will be ignored in multi-yaxis gl.maxY = gl.maxYArr[index]; } if (yaxe.min !== undefined) { if (typeof yaxe.min === 'number') { gl.minYArr[index] = yaxe.min; } else if (typeof yaxe.min === 'function') { gl.minYArr[index] = yaxe.min(gl.minY); } // gl.minY is for single y-axis chart, it will be ignored in multi-yaxis gl.minY = gl.minYArr[index]; } }); // for horizontal bar charts, we need to check xaxis min/max as user may have specified there if (gl.isBarHorizontal) { var minmax = ['min', 'max']; minmax.forEach(function (m) { if (cnf.xaxis[m] !== undefined && typeof cnf.xaxis[m] === 'number') { m === 'min' ? gl.minY = cnf.xaxis[m] : gl.maxY = cnf.xaxis[m]; } }); } // for multi y-axis we need different scales for each if (gl.isMultipleYAxis) { this.scales.setMultipleYScales(); gl.minY = lowestYInAllSeries; gl.yAxisScale.forEach(function (scale, i) { gl.minYArr[i] = scale.niceMin; gl.maxYArr[i] = scale.niceMax; }); } else { this.scales.setYScaleForIndex(0, gl.minY, gl.maxY); gl.minY = gl.yAxisScale[0].niceMin; gl.maxY = gl.yAxisScale[0].niceMax; gl.minYArr[0] = gl.yAxisScale[0].niceMin; gl.maxYArr[0] = gl.yAxisScale[0].niceMax; } return { minY: gl.minY, maxY: gl.maxY, minYArr: gl.minYArr, maxYArr: gl.maxYArr }; } }, { key: "setXRange", value: function setXRange() { var gl = this.w.globals; var cnf = this.w.config; var isXNumeric = cnf.xaxis.type === 'numeric' || cnf.xaxis.type === 'datetime' || cnf.xaxis.type === 'category' && !gl.noLabelsProvided || gl.noLabelsProvided || gl.isXNumeric; var getInitialMinXMaxX = function getInitialMinXMaxX() { for (var i = 0; i < gl.series.length; i++) { if (gl.labels[i]) { for (var j = 0; j < gl.labels[i].length; j++) { if (gl.labels[i][j] !== null && Utils.isNumber(gl.labels[i][j])) { gl.maxX = Math.max(gl.maxX, gl.labels[i][j]); gl.initialMaxX = Math.max(gl.maxX, gl.labels[i][j]); gl.minX = Math.min(gl.minX, gl.labels[i][j]); gl.initialMinX = Math.min(gl.minX, gl.labels[i][j]); } } } } }; // minX maxX starts here if (gl.isXNumeric) { getInitialMinXMaxX(); } if (gl.noLabelsProvided) { if (cnf.xaxis.categories.length === 0) { gl.maxX = gl.labels[gl.labels.length - 1]; gl.initialMaxX = gl.labels[gl.labels.length - 1]; gl.minX = 1; gl.initialMinX = 1; } } if (gl.isXNumeric || gl.noLabelsProvided || gl.dataFormatXNumeric) { var ticks; if (cnf.xaxis.tickAmount === undefined) { ticks = Math.round(gl.svgWidth / 150); // no labels provided and total number of dataPoints is less than 30 if (cnf.xaxis.type === 'numeric' && gl.dataPoints < 30) { ticks = gl.dataPoints - 1; } // this check is for when ticks exceeds total datapoints and that would result in duplicate labels if (ticks > gl.dataPoints && gl.dataPoints !== 0) { ticks = gl.dataPoints - 1; } } else if (cnf.xaxis.tickAmount === 'dataPoints') { if (gl.series.length > 1) { ticks = gl.series[gl.maxValsInArrayIndex].length - 1; } if (gl.isXNumeric) { ticks = gl.maxX - gl.minX - 1; } } else { ticks = cnf.xaxis.tickAmount; } gl.xTickAmount = ticks; // override all min/max values by user defined values (x axis) if (cnf.xaxis.max !== undefined && typeof cnf.xaxis.max === 'number') { gl.maxX = cnf.xaxis.max; } if (cnf.xaxis.min !== undefined && typeof cnf.xaxis.min === 'number') { gl.minX = cnf.xaxis.min; } // if range is provided, adjust the new minX if (cnf.xaxis.range !== undefined) { gl.minX = gl.maxX - cnf.xaxis.range; } if (gl.minX !== Number.MAX_VALUE && gl.maxX !== -Number.MAX_VALUE) { if (cnf.xaxis.convertedCatToNumeric && !gl.dataFormatXNumeric) { var catScale = []; for (var i = gl.minX - 1; i < gl.maxX; i++) { catScale.push(i + 1); } gl.xAxisScale = { result: catScale, niceMin: catScale[0], niceMax: catScale[catScale.length - 1] }; } else { gl.xAxisScale = this.scales.setXScale(gl.minX, gl.maxX); } } else { gl.xAxisScale = this.scales.linearScale(1, ticks, ticks); if (gl.noLabelsProvided && gl.labels.length > 0) { gl.xAxisScale = this.scales.linearScale(1, gl.labels.length, ticks - 1); // this is the only place seriesX is again mutated gl.seriesX = gl.labels.slice(); } } // we will still store these labels as the count for this will be different (to draw grid and labels placement) if (isXNumeric) { gl.labels = gl.xAxisScale.result.slice(); } } if (gl.isBarHorizontal && gl.labels.length) { gl.xTickAmount = gl.labels.length; } // single dataPoint this._handleSingleDataPoint(); // minimum x difference to calculate bar width in numeric bars this._getMinXDiff(); return { minX: gl.minX, maxX: gl.maxX }; } }, { key: "setZRange", value: function setZRange() { // minZ, maxZ starts here var gl = this.w.globals; if (!gl.isDataXYZ) return; for (var i = 0; i < gl.series.length; i++) { if (typeof gl.seriesZ[i] !== 'undefined') { for (var j = 0; j < gl.seriesZ[i].length; j++) { if (gl.seriesZ[i][j] !== null && Utils.isNumber(gl.seriesZ[i][j])) { gl.maxZ = Math.max(gl.maxZ, gl.seriesZ[i][j]); gl.minZ = Math.min(gl.minZ, gl.seriesZ[i][j]); } } } } } }, { key: "_handleSingleDataPoint", value: function _handleSingleDataPoint() { var gl = this.w.globals; var cnf = this.w.config; if (gl.minX === gl.maxX) { var datetimeObj = new DateTime(this.ctx); if (cnf.xaxis.type === 'datetime') { var newMinX = datetimeObj.getDate(gl.minX); newMinX.setUTCDate(newMinX.getDate() - 2); gl.minX = new Date(newMinX).getTime(); var newMaxX = datetimeObj.getDate(gl.maxX); newMaxX.setUTCDate(newMaxX.getDate() + 2); gl.maxX = new Date(newMaxX).getTime(); } else if (cnf.xaxis.type === 'numeric' || cnf.xaxis.type === 'category' && !gl.noLabelsProvided) { gl.minX = gl.minX - 2; gl.initialMinX = gl.minX; gl.maxX = gl.maxX + 2; gl.initialMaxX = gl.maxX; } } } }, { key: "_getMinXDiff", value: function _getMinXDiff() { var gl = this.w.globals; if (gl.isXNumeric) { // get the least x diff if numeric x axis is present gl.seriesX.forEach(function (sX, i) { if (sX.length === 1) { // a small hack to prevent overlapping multiple bars when there is just 1 datapoint in bar series. // fix #811 sX.push(gl.seriesX[gl.maxValsInArrayIndex][gl.seriesX[gl.maxValsInArrayIndex].length - 1]); } // fix #983 (clone the array to avoid side effects) var seriesX = sX.slice(); seriesX.sort(function (a, b) { return a - b; }); seriesX.forEach(function (s, j) { if (j > 0) { var xDiff = s - gl.seriesX[i][j - 1]; if (xDiff > 0) { gl.minXDiff = Math.min(xDiff, gl.minXDiff); } } }); if (gl.dataPoints === 1 && gl.minXDiff === Number.MAX_VALUE) { gl.minXDiff = 0.5; } }); } } }, { key: "_setStackedMinMax", value: function _setStackedMinMax() { var gl = this.w.globals; // for stacked charts, we calculate each series's parallel values. i.e, series[0][j] + series[1][j] .... [series[i.length][j]] and get the max out of it var stackedPoss = []; var stackedNegs = []; if (gl.series.length) { for (var j = 0; j < gl.series[gl.maxValsInArrayIndex].length; j++) { var poss = 0; var negs = 0; for (var i = 0; i < gl.series.length; i++) { if (gl.series[i][j] !== null && Utils.isNumber(gl.series[i][j])) { // 0.0001 fixes #185 when values are very small gl.series[i][j] > 0 ? poss = poss + parseFloat(gl.series[i][j]) + 0.0001 : negs = negs + parseFloat(gl.series[i][j]); } if (i === gl.series.length - 1) { // push all the totals to the array for future use stackedPoss.push(poss); stackedNegs.push(negs); } } } } // get the max/min out of the added parallel values for (var z = 0; z < stackedPoss.length; z++) { gl.maxY = Math.max(gl.maxY, stackedPoss[z]); gl.minY = Math.min(gl.minY, stackedNegs[z]); } } }]); return Range$1; }(); /** * ApexCharts YAxis Class for drawing Y-Axis. * * @module YAxis **/ var YAxis = /*#__PURE__*/function () { function YAxis(ctx) { _classCallCheck(this, YAxis); this.ctx = ctx; this.w = ctx.w; var w = this.w; this.xaxisFontSize = w.config.xaxis.labels.style.fontSize; this.axisFontFamily = w.config.xaxis.labels.style.fontFamily; this.xaxisForeColors = w.config.xaxis.labels.style.colors; this.isCategoryBarHorizontal = w.config.chart.type === 'bar' && w.config.plotOptions.bar.horizontal; this.xAxisoffX = 0; if (w.config.xaxis.position === 'bottom') { this.xAxisoffX = w.globals.gridHeight; } this.drawnLabels = []; this.axesUtils = new AxesUtils(ctx); } _createClass(YAxis, [{ key: "drawYaxis", value: function drawYaxis(realIndex) { var w = this.w; var graphics = new Graphics(this.ctx); var yaxisStyle = w.config.yaxis[realIndex].labels.style; var yaxisFontSize = yaxisStyle.fontSize; var yaxisFontFamily = yaxisStyle.fontFamily; var yaxisFontWeight = yaxisStyle.fontWeight; var elYaxis = graphics.group({ class: 'apexcharts-yaxis', rel: realIndex, transform: 'translate(' + w.globals.translateYAxisX[realIndex] + ', 0)' }); if (this.axesUtils.isYAxisHidden(realIndex)) { return elYaxis; } var elYaxisTexts = graphics.group({ class: 'apexcharts-yaxis-texts-g' }); elYaxis.add(elYaxisTexts); var tickAmount = w.globals.yAxisScale[realIndex].result.length - 1; // labelsDivider is simply svg height/number of ticks var labelsDivider = w.globals.gridHeight / tickAmount; // initial label position = 0; var l = w.globals.translateY; var lbFormatter = w.globals.yLabelFormatters[realIndex]; var labels = w.globals.yAxisScale[realIndex].result.slice(); labels = this.axesUtils.checkForReversedLabels(realIndex, labels); var firstLabel = ''; if (w.config.yaxis[realIndex].labels.show) { var _loop = function _loop(i) { var val = labels[i]; val = lbFormatter(val, i); var xPad = w.config.yaxis[realIndex].labels.padding; if (w.config.yaxis[realIndex].opposite && w.config.yaxis.length !== 0) { xPad = xPad * -1; } var getForeColor = function getForeColor() { return Array.isArray(yaxisStyle.colors) ? yaxisStyle.colors[i] : yaxisStyle.colors; }; var label = graphics.drawText({ x: xPad, y: l + tickAmount / 10 + w.config.yaxis[realIndex].labels.offsetY + 1, text: val, textAnchor: w.config.yaxis[realIndex].opposite ? 'start' : 'end', fontSize: yaxisFontSize, fontFamily: yaxisFontFamily, fontWeight: yaxisFontWeight, foreColor: getForeColor(), isPlainText: false, cssClass: 'apexcharts-yaxis-label ' + yaxisStyle.cssClass }); if (i === tickAmount) { firstLabel = label; } elYaxisTexts.add(label); if (w.config.yaxis[realIndex].labels.rotate !== 0) { var firstabelRotatingCenter = graphics.rotateAroundCenter(firstLabel.node); var labelRotatingCenter = graphics.rotateAroundCenter(label.node); label.node.setAttribute('transform', "rotate(".concat(w.config.yaxis[realIndex].labels.rotate, " ").concat(firstabelRotatingCenter.x, " ").concat(labelRotatingCenter.y, ")")); } l = l + labelsDivider; }; for (var i = tickAmount; i >= 0; i--) { _loop(i); } } if (w.config.yaxis[realIndex].title.text !== undefined) { var elYaxisTitle = graphics.group({ class: 'apexcharts-yaxis-title' }); var _x = 0; if (w.config.yaxis[realIndex].opposite) { _x = w.globals.translateYAxisX[realIndex]; } var elYAxisTitleText = graphics.drawText({ x: _x, y: w.globals.gridHeight / 2 + w.globals.translateY + w.config.yaxis[realIndex].title.offsetY, text: w.config.yaxis[realIndex].title.text, textAnchor: 'end', foreColor: w.config.yaxis[realIndex].title.style.color, fontSize: w.config.yaxis[realIndex].title.style.fontSize, fontWeight: w.config.yaxis[realIndex].title.style.fontWeight, fontFamily: w.config.yaxis[realIndex].title.style.fontFamily, cssClass: 'apexcharts-yaxis-title-text ' + w.config.yaxis[realIndex].title.style.cssClass }); elYaxisTitle.add(elYAxisTitleText); elYaxis.add(elYaxisTitle); } var axisBorder = w.config.yaxis[realIndex].axisBorder; var x = 31 + axisBorder.offsetX; if (w.config.yaxis[realIndex].opposite) { x = -31 - axisBorder.offsetX; } if (axisBorder.show) { var elVerticalLine = graphics.drawLine(x, w.globals.translateY + axisBorder.offsetY - 2, x, w.globals.gridHeight + w.globals.translateY + axisBorder.offsetY + 2, axisBorder.color, 0, axisBorder.width); elYaxis.add(elVerticalLine); } if (w.config.yaxis[realIndex].axisTicks.show) { this.axesUtils.drawYAxisTicks(x, tickAmount, axisBorder, w.config.yaxis[realIndex].axisTicks, realIndex, labelsDivider, elYaxis); } return elYaxis; } // This actually becomes horizonal axis (for bar charts) }, { key: "drawYaxisInversed", value: function drawYaxisInversed(realIndex) { var w = this.w; var graphics = new Graphics(this.ctx); var elXaxis = graphics.group({ class: 'apexcharts-xaxis apexcharts-yaxis-inversed' }); var elXaxisTexts = graphics.group({ class: 'apexcharts-xaxis-texts-g', transform: "translate(".concat(w.globals.translateXAxisX, ", ").concat(w.globals.translateXAxisY, ")") }); elXaxis.add(elXaxisTexts); var tickAmount = w.globals.yAxisScale[realIndex].result.length - 1; // labelsDivider is simply svg width/number of ticks var labelsDivider = w.globals.gridWidth / tickAmount + 0.1; // initial label position; var l = labelsDivider + w.config.xaxis.labels.offsetX; var lbFormatter = w.globals.xLabelFormatter; var labels = w.globals.yAxisScale[realIndex].result.slice(); var timescaleLabels = w.globals.timescaleLabels; if (timescaleLabels.length > 0) { this.xaxisLabels = timescaleLabels.slice(); labels = timescaleLabels.slice(); tickAmount = labels.length; } labels = this.axesUtils.checkForReversedLabels(realIndex, labels); var tl = timescaleLabels.length; if (w.config.xaxis.labels.show) { for (var i = tl ? 0 : tickAmount; tl ? i < tl : i >= 0; tl ? i++ : i--) { var val = labels[i]; val = lbFormatter(val, i); var x = w.globals.gridWidth + w.globals.padHorizontal - (l - labelsDivider + w.config.xaxis.labels.offsetX); if (timescaleLabels.length) { var label = this.axesUtils.getLabel(labels, timescaleLabels, x, i, this.drawnLabels, this.xaxisFontSize); x = label.x; val = label.text; this.drawnLabels.push(label.text); if (i === 0 && w.globals.skipFirstTimelinelabel) { val = ''; } if (i === labels.length - 1 && w.globals.skipLastTimelinelabel) { val = ''; } } var elTick = graphics.drawText({ x: x, y: this.xAxisoffX + w.config.xaxis.labels.offsetY + 30 - (w.config.xaxis.position === 'top' ? w.globals.xAxisHeight + w.config.xaxis.axisTicks.height - 2 : 0), text: val, textAnchor: 'middle', foreColor: Array.isArray(this.xaxisForeColors) ? this.xaxisForeColors[realIndex] : this.xaxisForeColors, fontSize: this.xaxisFontSize, fontFamily: this.xaxisFontFamily, fontWeight: w.config.xaxis.labels.style.fontWeight, isPlainText: false, cssClass: 'apexcharts-xaxis-label ' + w.config.xaxis.labels.style.cssClass }); elXaxisTexts.add(elTick); elTick.tspan(val); var elTooltipTitle = document.createElementNS(w.globals.SVGNS, 'title'); elTooltipTitle.textContent = val; elTick.node.appendChild(elTooltipTitle); l = l + labelsDivider; } } this.inversedYAxisTitleText(elXaxis); this.inversedYAxisBorder(elXaxis); return elXaxis; } }, { key: "inversedYAxisBorder", value: function inversedYAxisBorder(parent) { var w = this.w; var graphics = new Graphics(this.ctx); var axisBorder = w.config.xaxis.axisBorder; if (axisBorder.show) { var lineCorrection = 0; if (w.config.chart.type === 'bar' && w.globals.isXNumeric) { lineCorrection = lineCorrection - 15; } var elHorzLine = graphics.drawLine(w.globals.padHorizontal + lineCorrection + axisBorder.offsetX, this.xAxisoffX, w.globals.gridWidth, this.xAxisoffX, axisBorder.color, 0, axisBorder.height); parent.add(elHorzLine); } } }, { key: "inversedYAxisTitleText", value: function inversedYAxisTitleText(parent) { var w = this.w; var graphics = new Graphics(this.ctx); if (w.config.xaxis.title.text !== undefined) { var elYaxisTitle = graphics.group({ class: 'apexcharts-xaxis-title apexcharts-yaxis-title-inversed' }); var elYAxisTitleText = graphics.drawText({ x: w.globals.gridWidth / 2 + w.config.xaxis.title.offsetX, y: this.xAxisoffX + parseFloat(this.xaxisFontSize) + parseFloat(w.config.xaxis.title.style.fontSize) + w.config.xaxis.title.offsetY + 20, text: w.config.xaxis.title.text, textAnchor: 'middle', fontSize: w.config.xaxis.title.style.fontSize, fontFamily: w.config.xaxis.title.style.fontFamily, fontWeight: w.config.xaxis.title.style.fontWeight, cssClass: 'apexcharts-xaxis-title-text ' + w.config.xaxis.title.style.cssClass }); elYaxisTitle.add(elYAxisTitleText); parent.add(elYaxisTitle); } } }, { key: "yAxisTitleRotate", value: function yAxisTitleRotate(realIndex, yAxisOpposite) { var w = this.w; var graphics = new Graphics(this.ctx); var yAxisLabelsCoord = { width: 0, height: 0 }; var yAxisTitleCoord = { width: 0, height: 0 }; var elYAxisLabelsWrap = w.globals.dom.baseEl.querySelector(" .apexcharts-yaxis[rel='".concat(realIndex, "'] .apexcharts-yaxis-texts-g")); if (elYAxisLabelsWrap !== null) { yAxisLabelsCoord = elYAxisLabelsWrap.getBoundingClientRect(); } var yAxisTitle = w.globals.dom.baseEl.querySelector(".apexcharts-yaxis[rel='".concat(realIndex, "'] .apexcharts-yaxis-title text")); if (yAxisTitle !== null) { yAxisTitleCoord = yAxisTitle.getBoundingClientRect(); } if (yAxisTitle !== null) { var x = this.xPaddingForYAxisTitle(realIndex, yAxisLabelsCoord, yAxisTitleCoord, yAxisOpposite); yAxisTitle.setAttribute('x', x.xPos - (yAxisOpposite ? 10 : 0)); } if (yAxisTitle !== null) { var titleRotatingCenter = graphics.rotateAroundCenter(yAxisTitle); yAxisTitle.setAttribute('transform', "rotate(".concat(yAxisOpposite ? '' : '-').concat(w.config.yaxis[realIndex].title.rotate, " ").concat(titleRotatingCenter.x, " ").concat(titleRotatingCenter.y, ")")); } } }, { key: "xPaddingForYAxisTitle", value: function xPaddingForYAxisTitle(realIndex, yAxisLabelsCoord, yAxisTitleCoord, yAxisOpposite) { var w = this.w; var oppositeAxisCount = 0; var x = 0; var padd = 10; if (w.config.yaxis[realIndex].title.text === undefined || realIndex < 0) { return { xPos: x, padd: 0 }; } if (yAxisOpposite) { x = yAxisLabelsCoord.width + w.config.yaxis[realIndex].title.offsetX + yAxisTitleCoord.width / 2 + padd / 2; oppositeAxisCount += 1; if (oppositeAxisCount === 0) { x = x - padd / 2; } } else { x = yAxisLabelsCoord.width * -1 + w.config.yaxis[realIndex].title.offsetX + padd / 2 + yAxisTitleCoord.width / 2; if (w.globals.isBarHorizontal) { padd = 25; x = yAxisLabelsCoord.width * -1 - w.config.yaxis[realIndex].title.offsetX - padd; } } return { xPos: x, padd: padd }; } // sets the x position of the y-axis by counting the labels width, title width and any offset }, { key: "setYAxisXPosition", value: function setYAxisXPosition(yaxisLabelCoords, yTitleCoords) { var w = this.w; var xLeft = 0; var xRight = 0; var leftOffsetX = 18; var rightOffsetX = 1; if (w.config.yaxis.length > 1) { this.multipleYs = true; } w.config.yaxis.map(function (yaxe, index) { var shouldNotDrawAxis = w.globals.ignoreYAxisIndexes.indexOf(index) > -1 || !yaxe.show || yaxe.floating || yaxisLabelCoords[index].width === 0; var axisWidth = yaxisLabelCoords[index].width + yTitleCoords[index].width; if (!yaxe.opposite) { xLeft = w.globals.translateX - leftOffsetX; if (!shouldNotDrawAxis) { leftOffsetX = leftOffsetX + axisWidth + 20; } w.globals.translateYAxisX[index] = xLeft + yaxe.labels.offsetX; } else { if (w.globals.isBarHorizontal) { xRight = w.globals.gridWidth + w.globals.translateX - 1; w.globals.translateYAxisX[index] = xRight - yaxe.labels.offsetX; } else { xRight = w.globals.gridWidth + w.globals.translateX + rightOffsetX; if (!shouldNotDrawAxis) { rightOffsetX = rightOffsetX + axisWidth + 20; } w.globals.translateYAxisX[index] = xRight - yaxe.labels.offsetX + 20; } } }); } }, { key: "setYAxisTextAlignments", value: function setYAxisTextAlignments() { var w = this.w; var yaxis = w.globals.dom.baseEl.getElementsByClassName("apexcharts-yaxis"); yaxis = Utils.listToArray(yaxis); yaxis.forEach(function (y, index) { var yaxe = w.config.yaxis[index]; // proceed only if user has specified alignment if (yaxe.labels.align !== undefined) { var yAxisInner = w.globals.dom.baseEl.querySelector(".apexcharts-yaxis[rel='".concat(index, "'] .apexcharts-yaxis-texts-g")); var yAxisTexts = w.globals.dom.baseEl.querySelectorAll(".apexcharts-yaxis[rel='".concat(index, "'] .apexcharts-yaxis-label")); yAxisTexts = Utils.listToArray(yAxisTexts); var rect = yAxisInner.getBoundingClientRect(); if (yaxe.labels.align === 'left') { yAxisTexts.forEach(function (label, lI) { label.setAttribute('text-anchor', 'start'); }); if (!yaxe.opposite) { yAxisInner.setAttribute('transform', "translate(-".concat(rect.width, ", 0)")); } } else if (yaxe.labels.align === 'center') { yAxisTexts.forEach(function (label, lI) { label.setAttribute('text-anchor', 'middle'); }); yAxisInner.setAttribute('transform', "translate(".concat(rect.width / 2 * (!yaxe.opposite ? -1 : 1), ", 0)")); } else if (yaxe.labels.align === 'right') { yAxisTexts.forEach(function (label, lI) { label.setAttribute('text-anchor', 'end'); }); if (yaxe.opposite) { yAxisInner.setAttribute('transform', "translate(".concat(rect.width, ", 0)")); } } } }); } }]); return YAxis; }(); var Events = /*#__PURE__*/function () { function Events(ctx) { _classCallCheck(this, Events); this.ctx = ctx; this.w = ctx.w; this.documentEvent = Utils.bind(this.documentEvent, this); } _createClass(Events, [{ key: "addEventListener", value: function addEventListener(name, handler) { var w = this.w; if (w.globals.events.hasOwnProperty(name)) { w.globals.events[name].push(handler); } else { w.globals.events[name] = [handler]; } } }, { key: "removeEventListener", value: function removeEventListener(name, handler) { var w = this.w; if (!w.globals.events.hasOwnProperty(name)) { return; } var index = w.globals.events[name].indexOf(handler); if (index !== -1) { w.globals.events[name].splice(index, 1); } } }, { key: "fireEvent", value: function fireEvent(name, args) { var w = this.w; if (!w.globals.events.hasOwnProperty(name)) { return; } if (!args || !args.length) { args = []; } var evs = w.globals.events[name]; var l = evs.length; for (var i = 0; i < l; i++) { evs[i].apply(null, args); } } }, { key: "setupEventHandlers", value: function setupEventHandlers() { var _this = this; var w = this.w; var me = this.ctx; var clickableArea = w.globals.dom.baseEl.querySelector(w.globals.chartClass); this.ctx.eventList.forEach(function (event) { clickableArea.addEventListener(event, function (e) { var opts = Object.assign({}, w, { seriesIndex: w.globals.capturedSeriesIndex, dataPointIndex: w.globals.capturedDataPointIndex }); if (e.type === 'mousemove' || e.type === 'touchmove') { if (typeof w.config.chart.events.mouseMove === 'function') { w.config.chart.events.mouseMove(e, me, opts); } } else if (e.type === 'mouseup' && e.which === 1 || e.type === 'touchend') { if (typeof w.config.chart.events.click === 'function') { w.config.chart.events.click(e, me, opts); } me.ctx.events.fireEvent('click', [e, me, opts]); } }, { capture: false, passive: true }); }); this.ctx.eventList.forEach(function (event) { document.addEventListener(event, _this.documentEvent); }); this.ctx.core.setupBrushHandler(); } }, { key: "documentEvent", value: function documentEvent(e) { var w = this.w; var target = e.target.className; if (e.type === 'click') { var elMenu = w.globals.dom.baseEl.querySelector('.apexcharts-menu'); if (elMenu && elMenu.classList.contains('apexcharts-menu-open') && target !== 'apexcharts-menu-icon') { elMenu.classList.remove('apexcharts-menu-open'); } } if (e.type === 'mousedown') { var elAnnos = w.globals.dom.Paper.select('.apexcharts-resizable-element').members; Array.prototype.forEach.call(elAnnos, function (el) { // any shape annotations that might have selected by user for resizing, should be deselected if (!e.target.classList.contains('apexcharts-resizable-element') && !e.target.classList.contains('svg_select_points')) { el.selectize(false); } }); } w.globals.clientX = e.type === 'touchmove' ? e.touches[0].clientX : e.clientX; w.globals.clientY = e.type === 'touchmove' ? e.touches[0].clientY : e.clientY; } }]); return Events; }(); var Localization = /*#__PURE__*/function () { function Localization(ctx) { _classCallCheck(this, Localization); this.ctx = ctx; this.w = ctx.w; } _createClass(Localization, [{ key: "setCurrentLocaleValues", value: function setCurrentLocaleValues(localeName) { var locales = this.w.config.chart.locales; // check if user has specified locales in global Apex variable // if yes - then extend those with local chart's locale if (window.Apex.chart && window.Apex.chart.locales && window.Apex.chart.locales.length > 0) { locales = this.w.config.chart.locales.concat(window.Apex.chart.locales); } // find the locale from the array of locales which user has set (either by chart.defaultLocale or by calling setLocale() method.) var selectedLocale = locales.filter(function (c) { return c.name === localeName; })[0]; if (selectedLocale) { // create a complete locale object by extending defaults so you don't get undefined errors. var ret = Utils.extend(en, selectedLocale); // store these locale options in global var for ease access this.w.globals.locale = ret.options; } else { throw new Error('Wrong locale name provided. Please make sure you set the correct locale name in options'); } } }]); return Localization; }(); var Axes = /*#__PURE__*/function () { function Axes(ctx) { _classCallCheck(this, Axes); this.ctx = ctx; this.w = ctx.w; } _createClass(Axes, [{ key: "drawAxis", value: function drawAxis(type, xyRatios) { var gl = this.w.globals; var cnf = this.w.config; var xAxis = new XAxis(this.ctx); var yAxis = new YAxis(this.ctx); if (gl.axisCharts && type !== 'radar') { var elXaxis, elYaxis; if (gl.isBarHorizontal) { elYaxis = yAxis.drawYaxisInversed(0); elXaxis = xAxis.drawXaxisInversed(0); gl.dom.elGraphical.add(elXaxis); gl.dom.elGraphical.add(elYaxis); } else { elXaxis = xAxis.drawXaxis(); gl.dom.elGraphical.add(elXaxis); cnf.yaxis.map(function (yaxe, index) { if (gl.ignoreYAxisIndexes.indexOf(index) === -1) { elYaxis = yAxis.drawYaxis(index); gl.dom.Paper.add(elYaxis); } }); } } cnf.yaxis.map(function (yaxe, index) { if (gl.ignoreYAxisIndexes.indexOf(index) === -1) { yAxis.yAxisTitleRotate(index, yaxe.opposite); } }); } }]); return Axes; }(); var Crosshairs = /*#__PURE__*/function () { function Crosshairs(ctx) { _classCallCheck(this, Crosshairs); this.ctx = ctx; this.w = ctx.w; } _createClass(Crosshairs, [{ key: "drawXCrosshairs", value: function drawXCrosshairs() { var w = this.w; var graphics = new Graphics(this.ctx); var filters = new Filters(this.ctx); var crosshairGradient = w.config.xaxis.crosshairs.fill.gradient; var crosshairShadow = w.config.xaxis.crosshairs.dropShadow; var fillType = w.config.xaxis.crosshairs.fill.type; var gradientFrom = crosshairGradient.colorFrom; var gradientTo = crosshairGradient.colorTo; var opacityFrom = crosshairGradient.opacityFrom; var opacityTo = crosshairGradient.opacityTo; var stops = crosshairGradient.stops; var shadow = 'none'; var dropShadow = crosshairShadow.enabled; var shadowLeft = crosshairShadow.left; var shadowTop = crosshairShadow.top; var shadowBlur = crosshairShadow.blur; var shadowColor = crosshairShadow.color; var shadowOpacity = crosshairShadow.opacity; var xcrosshairsFill = w.config.xaxis.crosshairs.fill.color; if (w.config.xaxis.crosshairs.show) { if (fillType === 'gradient') { xcrosshairsFill = graphics.drawGradient('vertical', gradientFrom, gradientTo, opacityFrom, opacityTo, null, stops, null); } var xcrosshairs = graphics.drawRect(); if (w.config.xaxis.crosshairs.width === 1) { // to prevent drawing 2 lines, convert rect to line xcrosshairs = graphics.drawLine(); } xcrosshairs.attr({ class: 'apexcharts-xcrosshairs', x: 0, y: 0, y2: w.globals.gridHeight, width: Utils.isNumber(w.config.xaxis.crosshairs.width) ? w.config.xaxis.crosshairs.width : 0, height: w.globals.gridHeight, fill: xcrosshairsFill, filter: shadow, 'fill-opacity': w.config.xaxis.crosshairs.opacity, stroke: w.config.xaxis.crosshairs.stroke.color, 'stroke-width': w.config.xaxis.crosshairs.stroke.width, 'stroke-dasharray': w.config.xaxis.crosshairs.stroke.dashArray }); if (dropShadow) { xcrosshairs = filters.dropShadow(xcrosshairs, { left: shadowLeft, top: shadowTop, blur: shadowBlur, color: shadowColor, opacity: shadowOpacity }); } w.globals.dom.elGraphical.add(xcrosshairs); } } }, { key: "drawYCrosshairs", value: function drawYCrosshairs() { var w = this.w; var graphics = new Graphics(this.ctx); var crosshair = w.config.yaxis[0].crosshairs; if (w.config.yaxis[0].crosshairs.show) { var ycrosshairs = graphics.drawLine(0, 0, w.globals.gridWidth, 0, crosshair.stroke.color, crosshair.stroke.dashArray, crosshair.stroke.width); ycrosshairs.attr({ class: 'apexcharts-ycrosshairs' }); w.globals.dom.elGraphical.add(ycrosshairs); } // draw an invisible crosshair to help in positioning the yaxis tooltip var ycrosshairsHidden = graphics.drawLine(0, 0, w.globals.gridWidth, 0, crosshair.stroke.color, 0, 0); ycrosshairsHidden.attr({ class: 'apexcharts-ycrosshairs-hidden' }); w.globals.dom.elGraphical.add(ycrosshairsHidden); } }]); return Crosshairs; }(); /** * ApexCharts Responsive Class to override options for different screen sizes. * * @module Responsive **/ var Responsive = /*#__PURE__*/function () { function Responsive(ctx) { _classCallCheck(this, Responsive); this.ctx = ctx; this.w = ctx.w; } // the opts parameter if not null has to be set overriding everything // as the opts is set by user externally _createClass(Responsive, [{ key: "checkResponsiveConfig", value: function checkResponsiveConfig(opts) { var _this = this; var w = this.w; var cnf = w.config; // check if responsive config exists if (cnf.responsive.length === 0) return; var res = cnf.responsive.slice(); res.sort(function (a, b) { return a.breakpoint > b.breakpoint ? 1 : b.breakpoint > a.breakpoint ? -1 : 0; }).reverse(); var config = new Config({}); var iterateResponsiveOptions = function iterateResponsiveOptions() { var newOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var largestBreakpoint = res[0].breakpoint; var width = window.innerWidth > 0 ? window.innerWidth : screen.width; if (width > largestBreakpoint) { var options = CoreUtils.extendArrayProps(config, w.globals.initialConfig); newOptions = Utils.extend(options, newOptions); newOptions = Utils.extend(w.config, newOptions); _this.overrideResponsiveOptions(newOptions); } else { for (var i = 0; i < res.length; i++) { if (width < res[i].breakpoint) { newOptions = CoreUtils.extendArrayProps(config, res[i].options); newOptions = Utils.extend(w.config, newOptions); _this.overrideResponsiveOptions(newOptions); } } } }; if (opts) { var options = CoreUtils.extendArrayProps(config, opts); options = Utils.extend(w.config, options); options = Utils.extend(options, opts); iterateResponsiveOptions(options); } else { iterateResponsiveOptions({}); } } }, { key: "overrideResponsiveOptions", value: function overrideResponsiveOptions(newOptions) { var newConfig = new Config(newOptions).init({ responsiveOverride: true }); this.w.config = newConfig; } }]); return Responsive; }(); /** * ApexCharts Theme Class for setting the colors and palettes. * * @module Theme **/ var Theme = /*#__PURE__*/function () { function Theme(ctx) { _classCallCheck(this, Theme); this.ctx = ctx; this.colors = []; this.w = ctx.w; var w = this.w; this.isColorFn = false; this.isBarDistributed = w.config.plotOptions.bar.distributed && (w.config.chart.type === 'bar' || w.config.chart.type === 'rangeBar'); } _createClass(Theme, [{ key: "init", value: function init() { this.setDefaultColors(); } }, { key: "setDefaultColors", value: function setDefaultColors() { var _this = this; var w = this.w; var utils = new Utils(); w.globals.dom.elWrap.classList.add("apexcharts-theme-".concat(w.config.theme.mode)); if (w.config.colors === undefined) { w.globals.colors = this.predefined(); } else { w.globals.colors = w.config.colors; // if user provided a function in colors, we need to eval here if (w.globals.axisCharts && w.config.chart.type !== 'bar' && Array.isArray(w.config.colors) && w.config.colors.length > 0 && w.config.colors.length === w.config.series.length // colors & series length needs same ) { w.globals.colors = w.config.colors.map(function (c, i) { if (typeof c === 'function') { _this.isColorFn = true; return c({ value: w.globals.axisCharts ? w.globals.series[i][0] ? w.globals.series[i][0] : 0 : w.globals.series[i], seriesIndex: i, dataPointIndex: i, w: w }); } return c; }); } } if (w.config.theme.monochrome.enabled) { var monoArr = []; var glsCnt = w.globals.series.length; if (this.isBarDistributed) { glsCnt = w.globals.series[0].length * w.globals.series.length; } var mainColor = w.config.theme.monochrome.color; var part = 1 / (glsCnt / w.config.theme.monochrome.shadeIntensity); var shade = w.config.theme.monochrome.shadeTo; var percent = 0; for (var gsl = 0; gsl < glsCnt; gsl++) { var newColor = void 0; if (shade === 'dark') { newColor = utils.shadeColor(percent * -1, mainColor); percent = percent + part; } else { newColor = utils.shadeColor(percent, mainColor); percent = percent + part; } monoArr.push(newColor); } w.globals.colors = monoArr.slice(); } var defaultColors = w.globals.colors.slice(); // if user specfied less colors than no. of series, push the same colors again this.pushExtraColors(w.globals.colors); var colorTypes = ['fill', 'stroke']; colorTypes.forEach(function (c) { if (w.config[c].colors === undefined) { w.globals[c].colors = _this.isColorFn ? w.config.colors : defaultColors; } else { w.globals[c].colors = w.config[c].colors.slice(); } _this.pushExtraColors(w.globals[c].colors); }); if (w.config.dataLabels.style.colors === undefined) { w.globals.dataLabels.style.colors = defaultColors; } else { w.globals.dataLabels.style.colors = w.config.dataLabels.style.colors.slice(); } this.pushExtraColors(w.globals.dataLabels.style.colors, 50); if (w.config.plotOptions.radar.polygons.fill.colors === undefined) { w.globals.radarPolygons.fill.colors = [w.config.theme.mode === 'dark' ? '#202D48' : '#fff']; } else { w.globals.radarPolygons.fill.colors = w.config.plotOptions.radar.polygons.fill.colors.slice(); } this.pushExtraColors(w.globals.radarPolygons.fill.colors, 20); // The point colors if (w.config.markers.colors === undefined) { w.globals.markers.colors = defaultColors; } else { w.globals.markers.colors = w.config.markers.colors.slice(); } this.pushExtraColors(w.globals.markers.colors); } // When the number of colors provided is less than the number of series, this method // will push same colors to the list // params: // distributed is only valid for distributed column/bar charts }, { key: "pushExtraColors", value: function pushExtraColors(colorSeries, length) { var distributed = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; var w = this.w; var len = length || w.globals.series.length; if (distributed === null) { distributed = this.isBarDistributed || w.config.chart.type === 'heatmap' && w.config.plotOptions.heatmap.colorScale.inverse; } if (distributed) { len = w.globals.series[0].length * w.globals.series.length; } if (colorSeries.length < len) { var diff = len - colorSeries.length; for (var i = 0; i < diff; i++) { colorSeries.push(colorSeries[i]); } } } }, { key: "updateThemeOptions", value: function updateThemeOptions(options) { options.chart = options.chart || {}; options.tooltip = options.tooltip || {}; var mode = options.theme.mode || 'light'; var palette = options.theme.palette ? options.theme.palette : mode === 'dark' ? 'palette4' : 'palette1'; var foreColor = options.chart.foreColor ? options.chart.foreColor : mode === 'dark' ? '#f6f7f8' : '#373d3f'; options.tooltip.theme = mode; options.chart.foreColor = foreColor; options.theme.palette = palette; return options; } }, { key: "predefined", value: function predefined() { var palette = this.w.config.theme.palette; // D6E3F8, FCEFEF, DCE0D9, A5978B, EDDDD4, D6E3F8, FEF5EF switch (palette) { case 'palette1': this.colors = ['#008FFB', '#00E396', '#FEB019', '#FF4560', '#775DD0']; break; case 'palette2': this.colors = ['#3f51b5', '#03a9f4', '#4caf50', '#f9ce1d', '#FF9800']; break; case 'palette3': this.colors = ['#33b2df', '#546E7A', '#d4526e', '#13d8aa', '#A5978B']; break; case 'palette4': this.colors = ['#4ecdc4', '#c7f464', '#81D4FA', '#fd6a6a', '#546E7A']; break; case 'palette5': this.colors = ['#2b908f', '#f9a3a4', '#90ee7e', '#fa4443', '#69d2e7']; break; case 'palette6': this.colors = ['#449DD1', '#F86624', '#EA3546', '#662E9B', '#C5D86D']; break; case 'palette7': this.colors = ['#D7263D', '#1B998B', '#2E294E', '#F46036', '#E2C044']; break; case 'palette8': this.colors = ['#662E9B', '#F86624', '#F9C80E', '#EA3546', '#43BCCD']; break; case 'palette9': this.colors = ['#5C4742', '#A5978B', '#8D5B4C', '#5A2A27', '#C4BBAF']; break; case 'palette10': this.colors = ['#A300D6', '#7D02EB', '#5653FE', '#2983FF', '#00B1F2']; break; default: this.colors = ['#008FFB', '#00E396', '#FEB019', '#FF4560', '#775DD0']; break; } return this.colors; } }]); return Theme; }(); var TitleSubtitle = /*#__PURE__*/function () { function TitleSubtitle(ctx) { _classCallCheck(this, TitleSubtitle); this.ctx = ctx; this.w = ctx.w; } _createClass(TitleSubtitle, [{ key: "draw", value: function draw() { this.drawTitleSubtitle('title'); this.drawTitleSubtitle('subtitle'); } }, { key: "drawTitleSubtitle", value: function drawTitleSubtitle(type) { var w = this.w; var tsConfig = type === 'title' ? w.config.title : w.config.subtitle; var x = w.globals.svgWidth / 2; var y = tsConfig.offsetY; var textAnchor = 'middle'; if (tsConfig.align === 'left') { x = 10; textAnchor = 'start'; } else if (tsConfig.align === 'right') { x = w.globals.svgWidth - 10; textAnchor = 'end'; } x = x + tsConfig.offsetX; y = y + parseInt(tsConfig.style.fontSize, 10) + tsConfig.margin / 2; if (tsConfig.text !== undefined) { var graphics = new Graphics(this.ctx); var titleText = graphics.drawText({ x: x, y: y, text: tsConfig.text, textAnchor: textAnchor, fontSize: tsConfig.style.fontSize, fontFamily: tsConfig.style.fontFamily, fontWeight: tsConfig.style.fontWeight, foreColor: tsConfig.style.color, opacity: 1 }); titleText.node.setAttribute('class', "apexcharts-".concat(type, "-text")); w.globals.dom.Paper.add(titleText); } } }]); return TitleSubtitle; }(); var Helpers$1 = /*#__PURE__*/function () { function Helpers(dCtx) { _classCallCheck(this, Helpers); this.w = dCtx.w; this.dCtx = dCtx; } /** * Get Chart Title/Subtitle Dimensions * @memberof Dimensions * @return {{width, height}} **/ _createClass(Helpers, [{ key: "getTitleSubtitleCoords", value: function getTitleSubtitleCoords(type) { var w = this.w; var width = 0; var height = 0; var floating = type === 'title' ? w.config.title.floating : w.config.subtitle.floating; var el = w.globals.dom.baseEl.querySelector(".apexcharts-".concat(type, "-text")); if (el !== null && !floating) { var coord = el.getBoundingClientRect(); width = coord.width; height = w.globals.axisCharts ? coord.height + 5 : coord.height; } return { width: width, height: height }; } }, { key: "getLegendsRect", value: function getLegendsRect() { var w = this.w; var elLegendWrap = w.globals.dom.baseEl.querySelector('.apexcharts-legend'); var lgRect = Object.assign({}, Utils.getBoundingClientRect(elLegendWrap)); if (elLegendWrap !== null && !w.config.legend.floating && w.config.legend.show) { this.dCtx.lgRect = { x: lgRect.x, y: lgRect.y, height: lgRect.height, width: lgRect.height === 0 ? 0 : lgRect.width }; } else { this.dCtx.lgRect = { x: 0, y: 0, height: 0, width: 0 }; } // if legend takes up all of the chart space, we need to restrict it. if (w.config.legend.position === 'left' || w.config.legend.position === 'right') { if (this.dCtx.lgRect.width * 1.5 > w.globals.svgWidth) { this.dCtx.lgRect.width = w.globals.svgWidth / 1.5; } } return this.dCtx.lgRect; } }, { key: "getLargestStringFromMultiArr", value: function getLargestStringFromMultiArr(val, arr) { var w = this.w; var valArr = val; if (w.globals.isMultiLineX) { // if the xaxis labels has multiline texts (array) var maxArrs = arr.map(function (xl, idx) { return Array.isArray(xl) ? xl.length : 1; }); var maxArrLen = Math.max.apply(Math, _toConsumableArray(maxArrs)); var maxArrIndex = maxArrs.indexOf(maxArrLen); valArr = arr[maxArrIndex]; } return valArr; } }]); return Helpers; }(); var DimXAxis = /*#__PURE__*/function () { function DimXAxis(dCtx) { _classCallCheck(this, DimXAxis); this.w = dCtx.w; this.dCtx = dCtx; } /** * Get X Axis Dimensions * @memberof Dimensions * @return {{width, height}} **/ _createClass(DimXAxis, [{ key: "getxAxisLabelsCoords", value: function getxAxisLabelsCoords() { var w = this.w; var xaxisLabels = w.globals.labels.slice(); if (w.config.xaxis.convertedCatToNumeric && xaxisLabels.length === 0) { xaxisLabels = w.globals.categoryLabels; } var rect; if (w.globals.timescaleLabels.length > 0) { var coords = this.getxAxisTimeScaleLabelsCoords(); rect = { width: coords.width, height: coords.height }; w.globals.rotateXLabels = false; } else { this.dCtx.lgWidthForSideLegends = (w.config.legend.position === 'left' || w.config.legend.position === 'right') && !w.config.legend.floating ? this.dCtx.lgRect.width : 0; // get the longest string from the labels array and also apply label formatter var xlbFormatter = w.globals.xLabelFormatter; // prevent changing xaxisLabels to avoid issues in multi-yaxes - fix #522 var val = Utils.getLargestStringFromArr(xaxisLabels); var valArr = this.dCtx.dimHelpers.getLargestStringFromMultiArr(val, xaxisLabels); // the labels gets changed for bar charts if (w.globals.isBarHorizontal) { val = w.globals.yAxisScale[0].result.reduce(function (a, b) { return a.length > b.length ? a : b; }, 0); valArr = val; } var xFormat = new Formatters(this.dCtx.ctx); var timestamp = val; val = xFormat.xLabelFormat(xlbFormatter, val, timestamp); valArr = xFormat.xLabelFormat(xlbFormatter, valArr, timestamp); if (w.config.xaxis.convertedCatToNumeric && typeof val === 'undefined' || String(val).trim() === '') { val = '1'; valArr = val; } var graphics = new Graphics(this.dCtx.ctx); var xLabelrect = graphics.getTextRects(val, w.config.xaxis.labels.style.fontSize); var xArrLabelrect = xLabelrect; if (val !== valArr) { xArrLabelrect = graphics.getTextRects(valArr, w.config.xaxis.labels.style.fontSize); } rect = { width: xLabelrect.width >= xArrLabelrect.width ? xLabelrect.width : xArrLabelrect.width, height: xLabelrect.height >= xArrLabelrect.height ? xLabelrect.height : xArrLabelrect.height }; if (rect.width * xaxisLabels.length > w.globals.svgWidth - this.dCtx.lgWidthForSideLegends - this.dCtx.yAxisWidth - this.dCtx.gridPad.left - this.dCtx.gridPad.right && w.config.xaxis.labels.rotate !== 0 || w.config.xaxis.labels.rotateAlways) { if (!w.globals.isBarHorizontal) { w.globals.rotateXLabels = true; var getRotatedTextRects = function getRotatedTextRects(text) { return graphics.getTextRects(text, w.config.xaxis.labels.style.fontSize, w.config.xaxis.labels.style.fontFamily, "rotate(".concat(w.config.xaxis.labels.rotate, " 0 0)"), false); }; xLabelrect = getRotatedTextRects(val); if (val !== valArr) { xArrLabelrect = getRotatedTextRects(valArr); } rect.height = (xLabelrect.height > xArrLabelrect.height ? xLabelrect.height : xArrLabelrect.height) / 1.5; rect.width = xLabelrect.width > xArrLabelrect.width ? xLabelrect.width : xArrLabelrect.width; } } else { w.globals.rotateXLabels = false; } } if (!w.config.xaxis.labels.show) { rect = { width: 0, height: 0 }; } return { width: rect.width, height: rect.height }; } /** * Get X Axis Title Dimensions * @memberof Dimensions * @return {{width, height}} **/ }, { key: "getxAxisTitleCoords", value: function getxAxisTitleCoords() { var w = this.w; var width = 0; var height = 0; if (w.config.xaxis.title.text !== undefined) { var graphics = new Graphics(this.dCtx.ctx); var rect = graphics.getTextRects(w.config.xaxis.title.text, w.config.xaxis.title.style.fontSize); width = rect.width; height = rect.height; } return { width: width, height: height }; } }, { key: "getxAxisTimeScaleLabelsCoords", value: function getxAxisTimeScaleLabelsCoords() { var w = this.w; var rect; this.dCtx.timescaleLabels = w.globals.timescaleLabels.slice(); var labels = this.dCtx.timescaleLabels.map(function (label) { return label.value; }); // get the longest string from the labels array and also apply label formatter to it var val = labels.reduce(function (a, b) { // if undefined, maybe user didn't pass the datetime(x) values if (typeof a === 'undefined') { console.error('You have possibly supplied invalid Date format. Please supply a valid JavaScript Date'); return 0; } else { return a.length > b.length ? a : b; } }, 0); var graphics = new Graphics(this.dCtx.ctx); rect = graphics.getTextRects(val, w.config.xaxis.labels.style.fontSize); var totalWidthRotated = rect.width * 1.05 * labels.length; if (totalWidthRotated > w.globals.gridWidth && w.config.xaxis.labels.rotate !== 0) { w.globals.overlappingXLabels = true; } return rect; } // In certain cases, the last labels gets cropped in xaxis. // Hence, we add some additional padding based on the label length to avoid the last label being cropped or we don't draw it at all }, { key: "additionalPaddingXLabels", value: function additionalPaddingXLabels(xaxisLabelCoords) { var _this = this; var w = this.w; var gl = w.globals; var cnf = w.config; var xtype = cnf.xaxis.type; // const predictedGridWidth = // gl.svgWidth - // this.dCtx.lgWidthForSideLegends - // this.dCtx.yAxisWidth - // this.dCtx.gridPad.left - // this.dCtx.gridPad.right var lbWidth = xaxisLabelCoords.width; gl.skipLastTimelinelabel = false; gl.skipFirstTimelinelabel = false; var isBarOpposite = w.config.yaxis[0].opposite && w.globals.isBarHorizontal; var isCollapsed = function isCollapsed(i) { return gl.collapsedSeriesIndices.indexOf(i) !== -1; }; var rightPad = function rightPad(yaxe) { if (_this.dCtx.timescaleLabels && _this.dCtx.timescaleLabels.length) { // for timeline labels, we take the last label and check if it exceeds gridWidth var firstimescaleLabel = _this.dCtx.timescaleLabels[0]; var lastTimescaleLabel = _this.dCtx.timescaleLabels[_this.dCtx.timescaleLabels.length - 1]; var lastLabelPosition = lastTimescaleLabel.position + lbWidth / 1.75 - // replace + with - ; // allow the last label to intersect with the right y axis _this.dCtx.yAxisWidthRight; var firstLabelPosition = firstimescaleLabel.position - lbWidth / 1.75 + // remove conditional since the first label is always at the very left // allow the first label to intersect with the left y axes _this.dCtx.yAxisWidthLeft; if (lastLabelPosition > gl.gridWidth) { gl.skipLastTimelinelabel = true; } if (firstLabelPosition < 0) { gl.skipFirstTimelinelabel = true; } } else if (xtype === 'datetime') { // If user has enabled DateTime, but uses own's formatter if (_this.dCtx.gridPad.right < lbWidth && !gl.rotateXLabels) { gl.skipLastTimelinelabel = true; } } else if (xtype !== 'datetime') { if (_this.dCtx.gridPad.right < lbWidth / 2 - _this.dCtx.yAxisWidthRight && !gl.rotateXLabels && (w.config.xaxis.tickPlacement !== 'between' || w.globals.isBarHorizontal)) { _this.dCtx.xPadRight = lbWidth / 2 + 1; } } }; var padYAxe = function padYAxe(yaxe, i) { if (isCollapsed(i)) return; if (xtype !== 'datetime') { if (_this.dCtx.gridPad.left < lbWidth / 2 - _this.dCtx.yAxisWidthLeft && !gl.rotateXLabels && !cnf.xaxis.labels.trim) { _this.dCtx.xPadLeft = lbWidth / 2 + 1; } } rightPad(); }; cnf.yaxis.forEach(function (yaxe, i) { if (isBarOpposite) { if (_this.dCtx.gridPad.left < lbWidth) { _this.dCtx.xPadLeft = lbWidth / 2 + 1; } _this.dCtx.xPadRight = lbWidth / 2 + 1; } else { padYAxe(yaxe, i); } }); } }]); return DimXAxis; }(); var DimYAxis = /*#__PURE__*/function () { function DimYAxis(dCtx) { _classCallCheck(this, DimYAxis); this.w = dCtx.w; this.dCtx = dCtx; } /** * Get Y Axis Dimensions * @memberof Dimensions * @return {{width, height}} **/ _createClass(DimYAxis, [{ key: "getyAxisLabelsCoords", value: function getyAxisLabelsCoords() { var _this = this; var w = this.w; var width = 0; var height = 0; var ret = []; var labelPad = 10; var axesUtils = new AxesUtils(this.dCtx.ctx); w.config.yaxis.map(function (yaxe, index) { if (!axesUtils.isYAxisHidden(index) && yaxe.labels.show && w.globals.yAxisScale[index].result.length) { var lbFormatter = w.globals.yLabelFormatters[index]; // the second parameter -1 is the index of tick which user can use in the formatter var val = lbFormatter(w.globals.yAxisScale[index].niceMax, { seriesIndex: index, dataPointIndex: -1, w: w }); var valArr = val; // if user has specified a custom formatter, and the result is null or empty, we need to discard the formatter and take the value as it is. if (typeof val === 'undefined' || val.length === 0) { val = w.globals.yAxisScale[index].niceMax; } if (w.globals.isBarHorizontal) { labelPad = 0; var barYaxisLabels = w.globals.labels.slice(); // get the longest string from the labels array and also apply label formatter to it val = Utils.getLargestStringFromArr(barYaxisLabels); val = lbFormatter(val, { seriesIndex: index, dataPointIndex: -1, w: w }); valArr = _this.dCtx.dimHelpers.getLargestStringFromMultiArr(val, barYaxisLabels); } var graphics = new Graphics(_this.dCtx.ctx); var rect = graphics.getTextRects(val, yaxe.labels.style.fontSize); var arrLabelrect = rect; if (val !== valArr) { arrLabelrect = graphics.getTextRects(valArr, yaxe.labels.style.fontSize); } ret.push({ width: (arrLabelrect.width > rect.width ? arrLabelrect.width : rect.width) + labelPad, height: arrLabelrect.height > rect.height ? arrLabelrect.height : rect.height }); } else { ret.push({ width: width, height: height }); } }); return ret; } /** * Get Y Axis Dimensions * @memberof Dimensions * @return {{width, height}} **/ }, { key: "getyAxisTitleCoords", value: function getyAxisTitleCoords() { var _this2 = this; var w = this.w; var ret = []; w.config.yaxis.map(function (yaxe, index) { if (yaxe.show && yaxe.title.text !== undefined) { var graphics = new Graphics(_this2.dCtx.ctx); var rect = graphics.getTextRects(yaxe.title.text, yaxe.title.style.fontSize, yaxe.title.style.fontFamily, 'rotate(-90 0 0)', false); ret.push({ width: rect.width, height: rect.height }); } else { ret.push({ width: 0, height: 0 }); } }); return ret; } }, { key: "getTotalYAxisWidth", value: function getTotalYAxisWidth() { var w = this.w; var yAxisWidth = 0; var yAxisWidthLeft = 0; var yAxisWidthRight = 0; var padding = w.globals.yAxisScale.length > 1 ? 10 : 0; var axesUtils = new AxesUtils(this.dCtx.ctx); var isHiddenYAxis = function isHiddenYAxis(index) { return w.globals.ignoreYAxisIndexes.indexOf(index) > -1; }; var padForLabelTitle = function padForLabelTitle(coord, index) { var floating = w.config.yaxis[index].floating; var width = 0; if (coord.width > 0 && !floating) { width = coord.width + padding; if (isHiddenYAxis(index)) { width = width - coord.width - padding; } } else { width = floating || axesUtils.isYAxisHidden(index) ? 0 : 5; } w.config.yaxis[index].opposite ? yAxisWidthRight = yAxisWidthRight + width : yAxisWidthLeft = yAxisWidthLeft + width; yAxisWidth = yAxisWidth + width; }; w.globals.yLabelsCoords.map(function (yLabelCoord, index) { padForLabelTitle(yLabelCoord, index); }); w.globals.yTitleCoords.map(function (yTitleCoord, index) { padForLabelTitle(yTitleCoord, index); }); if (w.globals.isBarHorizontal) { yAxisWidth = w.globals.yLabelsCoords[0].width + w.globals.yTitleCoords[0].width + 15; } this.dCtx.yAxisWidthLeft = yAxisWidthLeft; this.dCtx.yAxisWidthRight = yAxisWidthRight; return yAxisWidth; } }]); return DimYAxis; }(); var DimGrid = /*#__PURE__*/function () { function DimGrid(dCtx) { _classCallCheck(this, DimGrid); this.w = dCtx.w; this.dCtx = dCtx; } _createClass(DimGrid, [{ key: "gridPadForColumnsInNumericAxis", value: function gridPadForColumnsInNumericAxis(gridWidth) { var w = this.w; if (w.globals.noData || w.globals.allSeriesCollapsed) { return 0; } var type = w.config.chart.type; var barWidth = 0; var seriesLen = type === 'bar' || type === 'rangeBar' ? w.config.series.length : 1; if (w.globals.comboBarCount > 0) { seriesLen = w.globals.comboBarCount; } w.globals.collapsedSeries.forEach(function (c) { if (c.type === 'bar' || c.type === 'rangeBar') { seriesLen = seriesLen - 1; } }); if (w.config.chart.stacked) { seriesLen = 1; } var hasBar = type === 'bar' || type === 'rangeBar' || w.globals.comboBarCount > 0; if (hasBar && w.globals.isXNumeric && !w.globals.isBarHorizontal && seriesLen > 0) { var xRatio = 0; var xRange = Math.abs(w.globals.initialMaxX - w.globals.initialMinX); if (xRange <= 3) { xRange = w.globals.dataPoints; } xRatio = xRange / gridWidth; var xDivision; // max barwidth should be equal to minXDiff to avoid overlap if (w.globals.minXDiff && w.globals.minXDiff / xRatio > 0) { xDivision = w.globals.minXDiff / xRatio; } barWidth = xDivision / seriesLen * parseInt(w.config.plotOptions.bar.columnWidth, 10) / 100; if (barWidth < 1) { barWidth = 1; } barWidth = barWidth / (seriesLen > 1 ? 1 : 1.5) + 5; w.globals.barPadForNumericAxis = barWidth; } return barWidth; } }, { key: "gridPadFortitleSubtitle", value: function gridPadFortitleSubtitle() { var _this = this; var w = this.w; var gl = w.globals; var gridShrinkOffset = this.dCtx.isSparkline || !w.globals.axisCharts ? 0 : 10; var titleSubtitle = ['title', 'subtitle']; titleSubtitle.forEach(function (t) { if (w.config[t].text !== undefined) { gridShrinkOffset += w.config[t].margin; } else { gridShrinkOffset += _this.dCtx.isSparkline || !w.globals.axisCharts ? 0 : 5; } }); var nonAxisOrMultiSeriesCharts = w.config.series.length > 1 || !w.globals.axisCharts || w.config.legend.showForSingleSeries; if (w.config.legend.show && w.config.legend.position === 'bottom' && !w.config.legend.floating && nonAxisOrMultiSeriesCharts) { gridShrinkOffset += 10; } var titleCoords = this.dCtx.dimHelpers.getTitleSubtitleCoords('title'); var subtitleCoords = this.dCtx.dimHelpers.getTitleSubtitleCoords('subtitle'); gl.gridHeight = gl.gridHeight - titleCoords.height - subtitleCoords.height - gridShrinkOffset; gl.translateY = gl.translateY + titleCoords.height + subtitleCoords.height + gridShrinkOffset; } }, { key: "setGridXPosForDualYAxis", value: function setGridXPosForDualYAxis(yTitleCoords, yaxisLabelCoords) { var w = this.w; var axesUtils = new AxesUtils(this.dCtx.ctx); w.config.yaxis.map(function (yaxe, index) { if (w.globals.ignoreYAxisIndexes.indexOf(index) === -1 && !yaxe.floating && !axesUtils.isYAxisHidden(index)) { if (yaxe.opposite) { w.globals.translateX = w.globals.translateX - (yaxisLabelCoords[index].width + yTitleCoords[index].width) - parseInt(w.config.yaxis[index].labels.style.fontSize, 10) / 1.2 - 12; } } }); } }]); return DimGrid; }(); /** * ApexCharts Dimensions Class for calculating rects of all elements that are drawn and will be drawn. * * @module Dimensions **/ var Dimensions = /*#__PURE__*/function () { function Dimensions(ctx) { _classCallCheck(this, Dimensions); this.ctx = ctx; this.w = ctx.w; this.lgRect = {}; this.yAxisWidth = 0; this.yAxisWidthLeft = 0; this.yAxisWidthRight = 0; this.xAxisHeight = 0; this.isSparkline = this.w.config.chart.sparkline.enabled; this.dimHelpers = new Helpers$1(this); this.dimYAxis = new DimYAxis(this); this.dimXAxis = new DimXAxis(this); this.dimGrid = new DimGrid(this); this.lgWidthForSideLegends = 0; this.gridPad = this.w.config.grid.padding; this.xPadRight = 0; this.xPadLeft = 0; } /** * @memberof Dimensions * @param {object} w - chart context **/ _createClass(Dimensions, [{ key: "plotCoords", value: function plotCoords() { var w = this.w; var gl = w.globals; this.lgRect = this.dimHelpers.getLegendsRect(); if (gl.axisCharts) { // for line / area / scatter / column this.setDimensionsForAxisCharts(); } else { // for pie / donuts / circle this.setDimensionsForNonAxisCharts(); } this.dimGrid.gridPadFortitleSubtitle(); // after calculating everything, apply padding set by user gl.gridHeight = gl.gridHeight - this.gridPad.top - this.gridPad.bottom; gl.gridWidth = gl.gridWidth - this.gridPad.left - this.gridPad.right - this.xPadRight - this.xPadLeft; var barWidth = this.dimGrid.gridPadForColumnsInNumericAxis(gl.gridWidth); gl.gridWidth = gl.gridWidth - barWidth * 2; gl.translateX = gl.translateX + this.gridPad.left + this.xPadLeft + (barWidth > 0 ? barWidth + 4 : 0); gl.translateY = gl.translateY + this.gridPad.top; } }, { key: "setDimensionsForAxisCharts", value: function setDimensionsForAxisCharts() { var _this = this; var w = this.w; var gl = w.globals; var yaxisLabelCoords = this.dimYAxis.getyAxisLabelsCoords(); var yTitleCoords = this.dimYAxis.getyAxisTitleCoords(); w.globals.yLabelsCoords = []; w.globals.yTitleCoords = []; w.config.yaxis.map(function (yaxe, index) { // store the labels and titles coords in global vars w.globals.yLabelsCoords.push({ width: yaxisLabelCoords[index].width, index: index }); w.globals.yTitleCoords.push({ width: yTitleCoords[index].width, index: index }); }); this.yAxisWidth = this.dimYAxis.getTotalYAxisWidth(); var xaxisLabelCoords = this.dimXAxis.getxAxisLabelsCoords(); var xtitleCoords = this.dimXAxis.getxAxisTitleCoords(); this.conditionalChecksForAxisCoords(xaxisLabelCoords, xtitleCoords); gl.translateXAxisY = w.globals.rotateXLabels ? this.xAxisHeight / 8 : -4; gl.translateXAxisX = w.globals.rotateXLabels && w.globals.isXNumeric && w.config.xaxis.labels.rotate <= -45 ? -this.xAxisWidth / 4 : 0; if (w.globals.isBarHorizontal) { gl.rotateXLabels = false; gl.translateXAxisY = -1 * (parseInt(w.config.xaxis.labels.style.fontSize, 10) / 1.5); } gl.translateXAxisY = gl.translateXAxisY + w.config.xaxis.labels.offsetY; gl.translateXAxisX = gl.translateXAxisX + w.config.xaxis.labels.offsetX; var yAxisWidth = this.yAxisWidth; var xAxisHeight = this.xAxisHeight; gl.xAxisLabelsHeight = this.xAxisHeight; gl.xAxisHeight = this.xAxisHeight; var translateY = 10; if (w.config.chart.type === 'radar' || this.isSparkline) { yAxisWidth = 0; xAxisHeight = gl.goldenPadding; } if (this.isSparkline) { this.lgRect = { height: 0, width: 0 }; xAxisHeight = 0; yAxisWidth = 0; translateY = 0; } this.dimXAxis.additionalPaddingXLabels(xaxisLabelCoords); var legendTopBottom = function legendTopBottom() { gl.translateX = yAxisWidth; gl.gridHeight = gl.svgHeight - _this.lgRect.height - xAxisHeight - (!_this.isSparkline ? w.globals.rotateXLabels ? 10 : 15 : 0); gl.gridWidth = gl.svgWidth - yAxisWidth; }; if (w.config.xaxis.position === 'top') translateY = gl.xAxisHeight - w.config.xaxis.axisTicks.height - 5; switch (w.config.legend.position) { case 'bottom': gl.translateY = translateY; legendTopBottom(); break; case 'top': gl.translateY = this.lgRect.height + translateY; legendTopBottom(); break; case 'left': gl.translateY = translateY; gl.translateX = this.lgRect.width + yAxisWidth; gl.gridHeight = gl.svgHeight - xAxisHeight - 12; gl.gridWidth = gl.svgWidth - this.lgRect.width - yAxisWidth; break; case 'right': gl.translateY = translateY; gl.translateX = yAxisWidth; gl.gridHeight = gl.svgHeight - xAxisHeight - 12; gl.gridWidth = gl.svgWidth - this.lgRect.width - yAxisWidth - 5; break; default: throw new Error('Legend position not supported'); } this.dimGrid.setGridXPosForDualYAxis(yTitleCoords, yaxisLabelCoords); // after drawing everything, set the Y axis positions var objyAxis = new YAxis(this.ctx); objyAxis.setYAxisXPosition(yaxisLabelCoords, yTitleCoords); } }, { key: "setDimensionsForNonAxisCharts", value: function setDimensionsForNonAxisCharts() { var w = this.w; var gl = w.globals; var cnf = w.config; var xPad = 0; if (w.config.legend.show && !w.config.legend.floating) { xPad = 20; } var type = cnf.chart.type === 'pie' || cnf.chart.type === 'donut' ? 'pie' : 'radialBar'; var offY = cnf.plotOptions[type].offsetY; var offX = cnf.plotOptions[type].offsetX; if (!cnf.legend.show || cnf.legend.floating) { gl.gridHeight = gl.svgHeight - cnf.grid.padding.left + cnf.grid.padding.right; gl.gridWidth = gl.gridHeight; gl.translateY = offY; gl.translateX = offX + (gl.svgWidth - gl.gridWidth) / 2; return; } switch (cnf.legend.position) { case 'bottom': gl.gridHeight = gl.svgHeight - this.lgRect.height - gl.goldenPadding; gl.gridWidth = gl.gridHeight; gl.translateY = offY - 10; gl.translateX = offX + (gl.svgWidth - gl.gridWidth) / 2; break; case 'top': gl.gridHeight = gl.svgHeight - this.lgRect.height - gl.goldenPadding; gl.gridWidth = gl.gridHeight; gl.translateY = this.lgRect.height + offY + 10; gl.translateX = offX + (gl.svgWidth - gl.gridWidth) / 2; break; case 'left': gl.gridWidth = gl.svgWidth - this.lgRect.width - xPad; gl.gridHeight = cnf.chart.height !== 'auto' ? gl.svgHeight : gl.gridWidth; gl.translateY = offY; gl.translateX = offX + this.lgRect.width + xPad; break; case 'right': gl.gridWidth = gl.svgWidth - this.lgRect.width - xPad - 5; gl.gridHeight = cnf.chart.height !== 'auto' ? gl.svgHeight : gl.gridWidth; gl.translateY = offY; gl.translateX = offX + 10; break; default: throw new Error('Legend position not supported'); } } }, { key: "conditionalChecksForAxisCoords", value: function conditionalChecksForAxisCoords(xaxisLabelCoords, xtitleCoords) { var w = this.w; this.xAxisHeight = (xaxisLabelCoords.height + xtitleCoords.height) * (w.globals.isMultiLineX ? 1.2 : w.globals.LINE_HEIGHT_RATIO) + (w.globals.rotateXLabels ? 22 : 10); this.xAxisWidth = xaxisLabelCoords.width; if (this.xAxisHeight - xtitleCoords.height > w.config.xaxis.labels.maxHeight) { this.xAxisHeight = w.config.xaxis.labels.maxHeight; } if (w.config.xaxis.labels.minHeight && this.xAxisHeight < w.config.xaxis.labels.minHeight) { this.xAxisHeight = w.config.xaxis.labels.minHeight; } if (w.config.xaxis.floating) { this.xAxisHeight = 0; } var minYAxisWidth = 0; var maxYAxisWidth = 0; w.config.yaxis.forEach(function (y) { minYAxisWidth += y.labels.minWidth; maxYAxisWidth += y.labels.maxWidth; }); if (this.yAxisWidth < minYAxisWidth) { this.yAxisWidth = minYAxisWidth; } if (this.yAxisWidth > maxYAxisWidth) { this.yAxisWidth = maxYAxisWidth; } } }]); return Dimensions; }(); /** * ApexCharts Pie Class for drawing Pie / Donut Charts. * @module Pie **/ var Pie = /*#__PURE__*/function () { function Pie(ctx) { _classCallCheck(this, Pie); this.ctx = ctx; this.w = ctx.w; this.chartType = this.w.config.chart.type; this.initialAnim = this.w.config.chart.animations.enabled; this.dynamicAnim = this.initialAnim && this.w.config.chart.animations.dynamicAnimation.enabled; this.animBeginArr = [0]; this.animDur = 0; this.donutDataLabels = this.w.config.plotOptions.pie.donut.labels; var w = this.w; this.lineColorArr = w.globals.stroke.colors !== undefined ? w.globals.stroke.colors : w.globals.colors; this.defaultSize = w.globals.svgHeight < w.globals.svgWidth ? w.globals.gridHeight : w.globals.gridWidth; this.centerY = this.defaultSize / 2; this.centerX = w.globals.gridWidth / 2; this.fullAngle = 360; w.globals.radialSize = this.defaultSize / 2.05 - w.config.stroke.width - (!w.config.chart.sparkline.enabled ? w.config.chart.dropShadow.blur : 0); this.donutSize = w.globals.radialSize * parseInt(w.config.plotOptions.pie.donut.size, 10) / 100; this.sliceLabels = []; this.prevSectorAngleArr = []; // for dynamic animations } _createClass(Pie, [{ key: "draw", value: function draw(series) { var self = this; var w = this.w; var graphics = new Graphics(this.ctx); var ret = graphics.group({ class: 'apexcharts-pie' }); if (w.globals.noData) return ret; var total = 0; for (var k = 0; k < series.length; k++) { // CALCULATE THE TOTAL total += Utils.negToZero(series[k]); } var sectorAngleArr = []; // el to which series will be drawn var elSeries = graphics.group(); // prevent division by zero error if there is no data if (total === 0) { total = 0.00001; } for (var i = 0; i < series.length; i++) { // CALCULATE THE ANGLES var angle = this.fullAngle * Utils.negToZero(series[i]) / total; sectorAngleArr.push(angle); } if (w.globals.dataChanged) { var prevTotal = 0; for (var _k = 0; _k < w.globals.previousPaths.length; _k++) { // CALCULATE THE PREV TOTAL prevTotal += Utils.negToZero(w.globals.previousPaths[_k]); } var previousAngle; for (var _i = 0; _i < w.globals.previousPaths.length; _i++) { // CALCULATE THE PREVIOUS ANGLES previousAngle = this.fullAngle * Utils.negToZero(w.globals.previousPaths[_i]) / prevTotal; this.prevSectorAngleArr.push(previousAngle); } } // on small chart size after few count of resizes browser window donutSize can be negative if (this.donutSize < 0) { this.donutSize = 0; } var scaleSize = w.config.plotOptions.pie.customScale; var halfW = w.globals.gridWidth / 2; var halfH = w.globals.gridHeight / 2; var translateX = halfW - w.globals.gridWidth / 2 * scaleSize; var translateY = halfH - w.globals.gridHeight / 2 * scaleSize; if (w.config.chart.type === 'donut') { // draw the inner circle and add some text to it var circle = graphics.drawCircle(this.donutSize); circle.attr({ cx: this.centerX, cy: this.centerY, fill: w.config.plotOptions.pie.donut.background ? w.config.plotOptions.pie.donut.background : 'transparent' }); elSeries.add(circle); } var elG = self.drawArcs(sectorAngleArr, series); // add slice dataLabels at the end this.sliceLabels.forEach(function (s) { elG.add(s); }); elSeries.attr({ transform: "translate(".concat(translateX, ", ").concat(translateY, ") scale(").concat(scaleSize, ")") }); elSeries.add(elG); ret.add(elSeries); if (this.donutDataLabels.show) { var dataLabels = this.renderInnerDataLabels(this.donutDataLabels, { hollowSize: this.donutSize, centerX: this.centerX, centerY: this.centerY, opacity: this.donutDataLabels.show, translateX: translateX, translateY: translateY }); ret.add(dataLabels); } return ret; } // core function for drawing pie arcs }, { key: "drawArcs", value: function drawArcs(sectorAngleArr, series) { var w = this.w; var filters = new Filters(this.ctx); var graphics = new Graphics(this.ctx); var fill = new Fill(this.ctx); var g = graphics.group({ class: 'apexcharts-slices' }); var startAngle = 0; var prevStartAngle = 0; var endAngle = 0; var prevEndAngle = 0; this.strokeWidth = w.config.stroke.show ? w.config.stroke.width : 0; for (var i = 0; i < sectorAngleArr.length; i++) { var elPieArc = graphics.group({ class: "apexcharts-series apexcharts-pie-series", seriesName: Utils.escapeString(w.globals.seriesNames[i]), rel: i + 1, 'data:realIndex': i }); g.add(elPieArc); startAngle = endAngle; prevStartAngle = prevEndAngle; endAngle = startAngle + sectorAngleArr[i]; prevEndAngle = prevStartAngle + this.prevSectorAngleArr[i]; var angle = endAngle - startAngle; var pathFill = fill.fillPath({ seriesNumber: i, size: w.globals.radialSize, value: series[i] }); // additionaly, pass size for gradient drawing in the fillPath function var path = this.getChangedPath(prevStartAngle, prevEndAngle); var elPath = graphics.drawPath({ d: path, stroke: this.lineColorArr instanceof Array ? this.lineColorArr[i] : this.lineColorArr, strokeWidth: 0, fill: pathFill, fillOpacity: w.config.fill.opacity, classes: "apexcharts-pie-area apexcharts-".concat(w.config.chart.type, "-slice-").concat(i) }); elPath.attr({ index: 0, j: i }); if (w.config.chart.dropShadow.enabled) { var shadow = w.config.chart.dropShadow; filters.dropShadow(elPath, shadow, i); } this.addListeners(elPath, this.donutDataLabels); Graphics.setAttrs(elPath.node, { 'data:angle': angle, 'data:startAngle': startAngle, 'data:strokeWidth': this.strokeWidth, 'data:value': series[i] }); var labelPosition = { x: 0, y: 0 }; if (w.config.chart.type === 'pie') { labelPosition = Utils.polarToCartesian(this.centerX, this.centerY, w.globals.radialSize / 1.25 + w.config.plotOptions.pie.dataLabels.offset, startAngle + (endAngle - startAngle) / 2); } else if (w.config.chart.type === 'donut') { labelPosition = Utils.polarToCartesian(this.centerX, this.centerY, (w.globals.radialSize + this.donutSize) / 2 + w.config.plotOptions.pie.dataLabels.offset, startAngle + (endAngle - startAngle) / 2); } elPieArc.add(elPath); // Animation code starts var dur = 0; if (this.initialAnim && !w.globals.resized && !w.globals.dataChanged) { dur = (endAngle - startAngle) / this.fullAngle * w.config.chart.animations.speed; if (dur === 0) dur = 1; this.animDur = dur + this.animDur; this.animBeginArr.push(this.animDur); } else { this.animBeginArr.push(0); } if (this.dynamicAnim && w.globals.dataChanged) { this.animatePaths(elPath, { size: w.globals.radialSize, endAngle: endAngle, startAngle: startAngle, prevStartAngle: prevStartAngle, prevEndAngle: prevEndAngle, animateStartingPos: true, i: i, animBeginArr: this.animBeginArr, shouldSetPrevPaths: true, dur: w.config.chart.animations.dynamicAnimation.speed }); } else { this.animatePaths(elPath, { size: w.globals.radialSize, endAngle: endAngle, startAngle: startAngle, i: i, totalItems: sectorAngleArr.length - 1, animBeginArr: this.animBeginArr, dur: dur }); } // animation code ends if (w.config.plotOptions.pie.expandOnClick) { elPath.click(this.pieClicked.bind(this, i)); } if (w.config.dataLabels.enabled) { var xPos = labelPosition.x; var yPos = labelPosition.y; var text = 100 * (endAngle - startAngle) / 360 + '%'; if (angle !== 0 && w.config.plotOptions.pie.dataLabels.minAngleToShowLabel < sectorAngleArr[i]) { var formatter = w.config.dataLabels.formatter; if (formatter !== undefined) { text = formatter(w.globals.seriesPercent[i][0], { seriesIndex: i, w: w }); } var foreColor = w.globals.dataLabels.style.colors[i]; var elPieLabel = graphics.drawText({ x: xPos, y: yPos, text: text, textAnchor: 'middle', fontSize: w.config.dataLabels.style.fontSize, fontFamily: w.config.dataLabels.style.fontFamily, fontWeight: w.config.dataLabels.style.fontWeight, foreColor: foreColor }); if (w.config.dataLabels.dropShadow.enabled) { var textShadow = w.config.dataLabels.dropShadow; filters.dropShadow(elPieLabel, textShadow); } elPieLabel.node.classList.add('apexcharts-pie-label'); if (w.config.chart.animations.animate && w.globals.resized === false) { elPieLabel.node.classList.add('apexcharts-pie-label-delay'); elPieLabel.node.style.animationDelay = w.config.chart.animations.speed / 940 + 's'; } this.sliceLabels.push(elPieLabel); } } } return g; } }, { key: "addListeners", value: function addListeners(elPath, dataLabels) { var graphics = new Graphics(this.ctx); // append filters on mouseenter and mouseleave elPath.node.addEventListener('mouseenter', graphics.pathMouseEnter.bind(this, elPath)); elPath.node.addEventListener('mouseleave', graphics.pathMouseLeave.bind(this, elPath)); elPath.node.addEventListener('mouseleave', this.revertDataLabelsInner.bind(this, elPath.node, dataLabels)); elPath.node.addEventListener('mousedown', graphics.pathMouseDown.bind(this, elPath)); if (!this.donutDataLabels.total.showAlways) { elPath.node.addEventListener('mouseenter', this.printDataLabelsInner.bind(this, elPath.node, dataLabels)); elPath.node.addEventListener('mousedown', this.printDataLabelsInner.bind(this, elPath.node, dataLabels)); } } // This function can be used for other circle charts too }, { key: "animatePaths", value: function animatePaths(el, opts) { var w = this.w; var me = this; var angle = opts.endAngle - opts.startAngle; var prevAngle = angle; var fromStartAngle = opts.startAngle; var toStartAngle = opts.startAngle; if (opts.prevStartAngle !== undefined && opts.prevEndAngle !== undefined) { fromStartAngle = opts.prevEndAngle; prevAngle = opts.prevEndAngle - opts.prevStartAngle; } if (opts.i === w.config.series.length - 1) { // some adjustments for the last overlapping paths if (angle + toStartAngle > this.fullAngle) { opts.endAngle = opts.endAngle - (angle + toStartAngle); } else if (angle + toStartAngle < this.fullAngle) { opts.endAngle = opts.endAngle + (this.fullAngle - (angle + toStartAngle)); } } if (angle === this.fullAngle) angle = this.fullAngle - 0.01; me.animateArc(el, fromStartAngle, toStartAngle, angle, prevAngle, opts); } }, { key: "animateArc", value: function animateArc(el, fromStartAngle, toStartAngle, angle, prevAngle, opts) { var me = this; var w = this.w; var animations = new Animations(this.ctx); var size = opts.size; var path; if (isNaN(fromStartAngle) || isNaN(prevAngle)) { fromStartAngle = toStartAngle; prevAngle = angle; opts.dur = 0; } var currAngle = angle; var startAngle = toStartAngle; var fromAngle = fromStartAngle - toStartAngle; if (w.globals.dataChanged && opts.shouldSetPrevPaths) { // to avoid flicker when updating, set prev path first and then animate from there if (opts.prevEndAngle) { path = me.getPiePath({ me: me, startAngle: opts.prevStartAngle, angle: opts.prevEndAngle - opts.prevStartAngle, size: size }); el.attr({ d: path }); } } if (opts.dur !== 0) { el.animate(opts.dur, w.globals.easing, opts.animBeginArr[opts.i]).afterAll(function () { if (w.config.chart.type === 'pie' || w.config.chart.type === 'donut') { this.animate(w.config.chart.animations.dynamicAnimation.speed).attr({ 'stroke-width': me.strokeWidth }); } if (opts.i === w.config.series.length - 1) { animations.animationCompleted(el); } }).during(function (pos) { currAngle = fromAngle + (angle - fromAngle) * pos; if (opts.animateStartingPos) { currAngle = prevAngle + (angle - prevAngle) * pos; startAngle = fromStartAngle - prevAngle + (toStartAngle - (fromStartAngle - prevAngle)) * pos; } path = me.getPiePath({ me: me, startAngle: startAngle, angle: currAngle, size: size }); el.node.setAttribute('data:pathOrig', path); el.attr({ d: path }); }); } else { path = me.getPiePath({ me: me, startAngle: startAngle, angle: angle, size: size }); if (!opts.isTrack) { w.globals.animationEnded = true; } el.node.setAttribute('data:pathOrig', path); el.attr({ d: path, 'stroke-width': me.strokeWidth }); } } }, { key: "pieClicked", value: function pieClicked(i) { var w = this.w; var me = this; var path; var size = me.w.globals.radialSize + (w.config.plotOptions.pie.expandOnClick ? 4 : 0); var elPath = w.globals.dom.Paper.select(".apexcharts-".concat(w.config.chart.type.toLowerCase(), "-slice-").concat(i)).members[0]; if (elPath.attr('data:pieClicked') === 'true') { elPath.attr({ 'data:pieClicked': 'false' }); this.revertDataLabelsInner(elPath.node, this.donutDataLabels); var origPath = elPath.attr('data:pathOrig'); elPath.attr({ d: origPath }); return; } else { // reset all elems var allEls = w.globals.dom.baseEl.getElementsByClassName('apexcharts-pie-area'); Array.prototype.forEach.call(allEls, function (pieSlice) { pieSlice.setAttribute('data:pieClicked', 'false'); var origPath = pieSlice.getAttribute('data:pathOrig'); pieSlice.setAttribute('d', origPath); }); elPath.attr('data:pieClicked', 'true'); } var startAngle = parseInt(elPath.attr('data:startAngle'), 10); var angle = parseInt(elPath.attr('data:angle'), 10); path = me.getPiePath({ me: me, startAngle: startAngle, angle: angle, size: size }); if (angle === 360) return; elPath.plot(path); } }, { key: "getChangedPath", value: function getChangedPath(prevStartAngle, prevEndAngle) { var path = ''; if (this.dynamicAnim && this.w.globals.dataChanged) { path = this.getPiePath({ me: this, startAngle: prevStartAngle, angle: prevEndAngle - prevStartAngle, size: this.size }); } return path; } }, { key: "getPiePath", value: function getPiePath(_ref) { var me = _ref.me, startAngle = _ref.startAngle, angle = _ref.angle, size = _ref.size; var w = this.w; var path; var startDeg = startAngle; var startRadians = Math.PI * (startDeg - 90) / 180; var endDeg = angle + startAngle; if (Math.ceil(endDeg) >= 360) endDeg = 359.99; var endRadians = Math.PI * (endDeg - 90) / 180; var x1 = me.centerX + size * Math.cos(startRadians); var y1 = me.centerY + size * Math.sin(startRadians); var x2 = me.centerX + size * Math.cos(endRadians); var y2 = me.centerY + size * Math.sin(endRadians); var startInner = Utils.polarToCartesian(me.centerX, me.centerY, me.donutSize, endDeg); var endInner = Utils.polarToCartesian(me.centerX, me.centerY, me.donutSize, startDeg); var largeArc = angle > 180 ? 1 : 0; var pathBeginning = ['M', x1, y1, 'A', size, size, 0, largeArc, 1, x2, y2]; if (w.config.chart.type === 'donut') { path = [].concat(pathBeginning, ['L', startInner.x, startInner.y, 'A', me.donutSize, me.donutSize, 0, largeArc, 0, endInner.x, endInner.y, 'L', x1, y1, 'z']).join(' '); } else if (w.config.chart.type === 'pie') { path = [].concat(pathBeginning, ['L', me.centerX, me.centerY, 'L', x1, y1]).join(' '); } else { path = [].concat(pathBeginning).join(' '); } return path; } }, { key: "renderInnerDataLabels", value: function renderInnerDataLabels(dataLabelsConfig, opts) { var w = this.w; var graphics = new Graphics(this.ctx); var g = graphics.group({ class: 'apexcharts-datalabels-group', transform: "translate(".concat(opts.translateX ? opts.translateX : 0, ", ").concat(opts.translateY ? opts.translateY : 0, ") scale(").concat(w.config.plotOptions.pie.customScale, ")") }); var showTotal = dataLabelsConfig.total.show; g.node.style.opacity = opts.opacity; var x = opts.centerX; var y = opts.centerY; var labelColor, valueColor; if (dataLabelsConfig.name.color === undefined) { labelColor = w.globals.colors[0]; } else { labelColor = dataLabelsConfig.name.color; } var labelFontSize = dataLabelsConfig.name.fontSize; var labelFontFamily = dataLabelsConfig.name.fontFamily; var labelFontWeight = dataLabelsConfig.value.fontWeight; if (dataLabelsConfig.value.color === undefined) { valueColor = w.config.chart.foreColor; } else { valueColor = dataLabelsConfig.value.color; } var lbFormatter = dataLabelsConfig.value.formatter; var val = ''; var name = ''; if (showTotal) { labelColor = dataLabelsConfig.total.color; labelFontSize = dataLabelsConfig.total.fontSize; labelFontFamily = dataLabelsConfig.total.fontFamily; labelFontWeight = dataLabelsConfig.total.fontWeight; name = dataLabelsConfig.total.label; val = dataLabelsConfig.total.formatter(w); } else { if (w.globals.series.length === 1) { val = lbFormatter(w.globals.series[0], w); name = w.globals.seriesNames[0]; } } if (name) { name = dataLabelsConfig.name.formatter(name, dataLabelsConfig.total.show, w); } if (dataLabelsConfig.name.show) { var elLabel = graphics.drawText({ x: x, y: y + parseFloat(dataLabelsConfig.name.offsetY), text: name, textAnchor: 'middle', foreColor: labelColor, fontSize: labelFontSize, fontWeight: labelFontWeight, fontFamily: labelFontFamily }); elLabel.node.classList.add('apexcharts-datalabel-label'); g.add(elLabel); } if (dataLabelsConfig.value.show) { var valOffset = dataLabelsConfig.name.show ? parseFloat(dataLabelsConfig.value.offsetY) + 16 : dataLabelsConfig.value.offsetY; var elValue = graphics.drawText({ x: x, y: y + valOffset, text: val, textAnchor: 'middle', foreColor: valueColor, fontWeight: dataLabelsConfig.value.fontWeight, fontSize: dataLabelsConfig.value.fontSize, fontFamily: dataLabelsConfig.value.fontFamily }); elValue.node.classList.add('apexcharts-datalabel-value'); g.add(elValue); } // for a multi-series circle chart, we need to show total value instead of first series labels return g; } /** * * @param {string} name - The name of the series * @param {string} val - The value of that series * @param {object} el - Optional el (indicates which series was hovered/clicked). If this param is not present, means we need to show total */ }, { key: "printInnerLabels", value: function printInnerLabels(labelsConfig, name, val, el) { var w = this.w; var labelColor; if (el) { if (labelsConfig.name.color === undefined) { labelColor = w.globals.colors[parseInt(el.parentNode.getAttribute('rel'), 10) - 1]; } else { labelColor = labelsConfig.name.color; } } else { if (w.globals.series.length > 1 && labelsConfig.total.show) { labelColor = labelsConfig.total.color; } } var elLabel = w.globals.dom.baseEl.querySelector('.apexcharts-datalabel-label'); var elValue = w.globals.dom.baseEl.querySelector('.apexcharts-datalabel-value'); var lbFormatter = labelsConfig.value.formatter; val = lbFormatter(val, w); // we need to show Total Val - so get the formatter of it if (!el && typeof labelsConfig.total.formatter === 'function') { val = labelsConfig.total.formatter(w); } var isTotal = name === labelsConfig.total.label; name = labelsConfig.name.formatter(name, isTotal, w); if (elLabel !== null) { elLabel.textContent = name; } if (elValue !== null) { elValue.textContent = val; } if (elLabel !== null) { elLabel.style.fill = labelColor; } } }, { key: "printDataLabelsInner", value: function printDataLabelsInner(el, dataLabelsConfig) { var w = this.w; var val = el.getAttribute('data:value'); var name = w.globals.seriesNames[parseInt(el.parentNode.getAttribute('rel'), 10) - 1]; if (w.globals.series.length > 1) { this.printInnerLabels(dataLabelsConfig, name, val, el); } var dataLabelsGroup = w.globals.dom.baseEl.querySelector('.apexcharts-datalabels-group'); if (dataLabelsGroup !== null) { dataLabelsGroup.style.opacity = 1; } } }, { key: "revertDataLabelsInner", value: function revertDataLabelsInner(elem, dataLabelsConfig, event) { var _this = this; var w = this.w; var dataLabelsGroup = w.globals.dom.baseEl.querySelector('.apexcharts-datalabels-group'); var sliceOut = false; var slices = w.globals.dom.baseEl.getElementsByClassName("apexcharts-pie-area"); var selectSlice = function selectSlice(_ref2) { var makeSliceOut = _ref2.makeSliceOut, printLabel = _ref2.printLabel; Array.prototype.forEach.call(slices, function (s) { if (s.getAttribute('data:pieClicked') === 'true') { if (makeSliceOut) { sliceOut = true; } if (printLabel) { _this.printDataLabelsInner(s, dataLabelsConfig); } } }); }; selectSlice({ makeSliceOut: true, printLabel: false }); if (dataLabelsConfig.total.show && w.globals.series.length > 1) { if (sliceOut && !dataLabelsConfig.total.showAlways) { selectSlice({ makeSliceOut: false, printLabel: true }); } else { this.printInnerLabels(dataLabelsConfig, dataLabelsConfig.total.label, dataLabelsConfig.total.formatter(w)); } } else { selectSlice({ makeSliceOut: false, printLabel: true }); if (!sliceOut) { if (w.globals.selectedDataPoints.length && w.globals.series.length > 1) { if (w.globals.selectedDataPoints[0].length > 0) { var index = w.globals.selectedDataPoints[0]; var el = w.globals.dom.baseEl.querySelector(".apexcharts-".concat(w.config.chart.type.toLowerCase(), "-slice-").concat(index)); this.printDataLabelsInner(el, dataLabelsConfig); } else if (dataLabelsGroup && w.globals.selectedDataPoints.length && w.globals.selectedDataPoints[0].length === 0) { dataLabelsGroup.style.opacity = 0; } } else { if (dataLabelsGroup && w.globals.series.length > 1) { dataLabelsGroup.style.opacity = 0; } } } } } }]); return Pie; }(); var Helpers$2 = /*#__PURE__*/function () { function Helpers(lgCtx) { _classCallCheck(this, Helpers); this.w = lgCtx.w; this.lgCtx = lgCtx; } _createClass(Helpers, [{ key: "getLegendStyles", value: function getLegendStyles() { var stylesheet = document.createElement('style'); stylesheet.setAttribute('type', 'text/css'); var text = "\t\n \t\n .apexcharts-legend {\t\n display: flex;\t\n overflow: auto;\t\n padding: 0 10px;\t\n }\t\n .apexcharts-legend.position-bottom, .apexcharts-legend.position-top {\t\n flex-wrap: wrap\t\n }\t\n .apexcharts-legend.position-right, .apexcharts-legend.position-left {\t\n flex-direction: column;\t\n bottom: 0;\t\n }\t\n .apexcharts-legend.position-bottom.apexcharts-align-left, .apexcharts-legend.position-top.apexcharts-align-left, .apexcharts-legend.position-right, .apexcharts-legend.position-left {\t\n justify-content: flex-start;\t\n }\t\n .apexcharts-legend.position-bottom.apexcharts-align-center, .apexcharts-legend.position-top.apexcharts-align-center {\t\n justify-content: center; \t\n }\t\n .apexcharts-legend.position-bottom.apexcharts-align-right, .apexcharts-legend.position-top.apexcharts-align-right {\t\n justify-content: flex-end;\t\n }\t\n .apexcharts-legend-series {\t\n cursor: pointer;\t\n line-height: normal;\t\n }\t\n .apexcharts-legend.position-bottom .apexcharts-legend-series, .apexcharts-legend.position-top .apexcharts-legend-series{\t\n display: flex;\t\n align-items: center;\t\n }\t\n .apexcharts-legend-text {\t\n position: relative;\t\n font-size: 14px;\t\n }\t\n .apexcharts-legend-text *, .apexcharts-legend-marker * {\t\n pointer-events: none;\t\n }\t\n .apexcharts-legend-marker {\t\n position: relative;\t\n display: inline-block;\t\n cursor: pointer;\t\n margin-right: 3px;\t\n border-style: solid;\n }\t\n \t\n .apexcharts-legend.apexcharts-align-right .apexcharts-legend-series, .apexcharts-legend.apexcharts-align-left .apexcharts-legend-series{\t\n display: inline-block;\t\n }\t\n .apexcharts-legend-series.apexcharts-no-click {\t\n cursor: auto;\t\n }\t\n .apexcharts-legend .apexcharts-hidden-zero-series, .apexcharts-legend .apexcharts-hidden-null-series {\t\n display: none !important;\t\n }\t\n .apexcharts-inactive-legend {\t\n opacity: 0.45;\t\n }"; var rules = document.createTextNode(text); stylesheet.appendChild(rules); return stylesheet; } }, { key: "getLegendBBox", value: function getLegendBBox() { var w = this.w; var currLegendsWrap = w.globals.dom.baseEl.querySelector('.apexcharts-legend'); var currLegendsWrapRect = currLegendsWrap.getBoundingClientRect(); var currLegendsWrapWidth = currLegendsWrapRect.width; var currLegendsWrapHeight = currLegendsWrapRect.height; return { clwh: currLegendsWrapHeight, clww: currLegendsWrapWidth }; } }, { key: "appendToForeignObject", value: function appendToForeignObject() { var gl = this.w.globals; gl.dom.elLegendForeign = document.createElementNS(gl.SVGNS, 'foreignObject'); var elForeign = gl.dom.elLegendForeign; elForeign.setAttribute('x', 0); elForeign.setAttribute('y', 0); elForeign.setAttribute('width', gl.svgWidth); elForeign.setAttribute('height', gl.svgHeight); gl.dom.elLegendWrap.setAttribute('xmlns', 'http://www.w3.org/1999/xhtml'); elForeign.appendChild(gl.dom.elLegendWrap); elForeign.appendChild(this.getLegendStyles()); gl.dom.Paper.node.insertBefore(elForeign, gl.dom.elGraphical.node); } }, { key: "toggleDataSeries", value: function toggleDataSeries(seriesCnt, isHidden) { var _this = this; var w = this.w; if (w.globals.axisCharts || w.config.chart.type === 'radialBar') { w.globals.resized = true; // we don't want initial animations again var seriesEl = null; var realIndex = null; // yes, make it null. 1 series will rise at a time w.globals.risingSeries = []; if (w.globals.axisCharts) { seriesEl = w.globals.dom.baseEl.querySelector(".apexcharts-series[data\\:realIndex='".concat(seriesCnt, "']")); realIndex = parseInt(seriesEl.getAttribute('data:realIndex'), 10); } else { seriesEl = w.globals.dom.baseEl.querySelector(".apexcharts-series[rel='".concat(seriesCnt + 1, "']")); realIndex = parseInt(seriesEl.getAttribute('rel'), 10) - 1; } if (isHidden) { var seriesToMakeVisible = [{ cs: w.globals.collapsedSeries, csi: w.globals.collapsedSeriesIndices }, { cs: w.globals.ancillaryCollapsedSeries, csi: w.globals.ancillaryCollapsedSeriesIndices }]; seriesToMakeVisible.forEach(function (r) { _this.riseCollapsedSeries(r.cs, r.csi, realIndex); }); } else { this.hideSeries({ seriesEl: seriesEl, realIndex: realIndex }); } } else { // for non-axis charts i.e pie / donuts var _seriesEl = w.globals.dom.Paper.select(" .apexcharts-series[rel='".concat(seriesCnt + 1, "'] path")); var type = w.config.chart.type; if (type === 'pie' || type === 'donut') { var dataLabels = w.config.plotOptions.pie.donut.labels; var graphics = new Graphics(this.lgCtx.ctx); var pie = new Pie(this.lgCtx.ctx); graphics.pathMouseDown(_seriesEl.members[0], null); pie.printDataLabelsInner(_seriesEl.members[0].node, dataLabels); } _seriesEl.fire('click'); } } }, { key: "hideSeries", value: function hideSeries(_ref) { var seriesEl = _ref.seriesEl, realIndex = _ref.realIndex; var w = this.w; if (w.globals.axisCharts) { var shouldNotHideYAxis = false; if (w.config.yaxis[realIndex] && w.config.yaxis[realIndex].show && w.config.yaxis[realIndex].showAlways) { shouldNotHideYAxis = true; if (w.globals.ancillaryCollapsedSeriesIndices.indexOf(realIndex) < 0) { w.globals.ancillaryCollapsedSeries.push({ index: realIndex, data: w.config.series[realIndex].data.slice(), type: seriesEl.parentNode.className.baseVal.split('-')[1] }); w.globals.ancillaryCollapsedSeriesIndices.push(realIndex); } } if (!shouldNotHideYAxis) { w.globals.collapsedSeries.push({ index: realIndex, data: w.config.series[realIndex].data.slice(), type: seriesEl.parentNode.className.baseVal.split('-')[1] }); w.globals.collapsedSeriesIndices.push(realIndex); var removeIndexOfRising = w.globals.risingSeries.indexOf(realIndex); w.globals.risingSeries.splice(removeIndexOfRising, 1); } // TODO: AVOID mutating the user's config object below w.config.series[realIndex].data = []; } else { w.globals.collapsedSeries.push({ index: realIndex, data: w.config.series[realIndex] }); w.globals.collapsedSeriesIndices.push(realIndex); w.config.series[realIndex] = 0; } var seriesChildren = seriesEl.childNodes; for (var sc = 0; sc < seriesChildren.length; sc++) { if (seriesChildren[sc].classList.contains('apexcharts-series-markers-wrap')) { if (seriesChildren[sc].classList.contains('apexcharts-hide')) { seriesChildren[sc].classList.remove('apexcharts-hide'); } else { seriesChildren[sc].classList.add('apexcharts-hide'); } } } w.globals.allSeriesCollapsed = w.globals.collapsedSeries.length === w.config.series.length; this.lgCtx.ctx.updateHelpers._updateSeries(w.config.series, w.config.chart.animations.dynamicAnimation.enabled); } }, { key: "riseCollapsedSeries", value: function riseCollapsedSeries(series, seriesIndices, realIndex) { var w = this.w; if (series.length > 0) { for (var c = 0; c < series.length; c++) { if (series[c].index === realIndex) { if (w.globals.axisCharts) { w.config.series[realIndex].data = series[c].data.slice(); series.splice(c, 1); seriesIndices.splice(c, 1); w.globals.risingSeries.push(realIndex); } else { w.config.series[realIndex] = series[c].data; series.splice(c, 1); seriesIndices.splice(c, 1); w.globals.risingSeries.push(realIndex); } this.lgCtx.ctx.updateHelpers._updateSeries(w.config.series, w.config.chart.animations.dynamicAnimation.enabled); } } } } }]); return Helpers; }(); /** * ApexCharts Legend Class to draw legend. * * @module Legend **/ var Legend = /*#__PURE__*/function () { function Legend(ctx, opts) { _classCallCheck(this, Legend); this.ctx = ctx; this.w = ctx.w; this.onLegendClick = this.onLegendClick.bind(this); this.onLegendHovered = this.onLegendHovered.bind(this); this.isBarsDistributed = this.w.config.chart.type === 'bar' && this.w.config.plotOptions.bar.distributed && this.w.config.series.length === 1; this.legendHelpers = new Helpers$2(this); } _createClass(Legend, [{ key: "init", value: function init() { var w = this.w; var gl = w.globals; var cnf = w.config; var showLegendAlways = cnf.legend.showForSingleSeries && gl.series.length === 1 || this.isBarsDistributed || gl.series.length > 1; if ((showLegendAlways || !gl.axisCharts) && cnf.legend.show) { while (gl.dom.elLegendWrap.firstChild) { gl.dom.elLegendWrap.removeChild(gl.dom.elLegendWrap.firstChild); } this.drawLegends(); if (!Utils.isIE11()) { this.legendHelpers.appendToForeignObject(); } else { // IE11 doesn't supports foreignObject, hence append it to document.getElementsByTagName('head')[0].appendChild(this.legendHelpers.getLegendStyles()); } if (cnf.legend.position === 'bottom' || cnf.legend.position === 'top') { this.legendAlignHorizontal(); } else if (cnf.legend.position === 'right' || cnf.legend.position === 'left') { this.legendAlignVertical(); } } } }, { key: "drawLegends", value: function drawLegends() { var self = this; var w = this.w; var fontFamily = w.config.legend.fontFamily; var legendNames = w.globals.seriesNames; var fillcolor = w.globals.colors.slice(); if (w.config.chart.type === 'heatmap') { var ranges = w.config.plotOptions.heatmap.colorScale.ranges; legendNames = ranges.map(function (colorScale) { return colorScale.name ? colorScale.name : colorScale.from + ' - ' + colorScale.to; }); fillcolor = ranges.map(function (color) { return color.color; }); } else if (this.isBarsDistributed) { legendNames = w.globals.labels.slice(); } var legendFormatter = w.globals.legendFormatter; var isLegendInversed = w.config.legend.inverseOrder; for (var i = isLegendInversed ? legendNames.length - 1 : 0; isLegendInversed ? i >= 0 : i <= legendNames.length - 1; isLegendInversed ? i-- : i++) { var text = legendFormatter(legendNames[i], { seriesIndex: i, w: w }); var collapsedSeries = false; var ancillaryCollapsedSeries = false; if (w.globals.collapsedSeries.length > 0) { for (var c = 0; c < w.globals.collapsedSeries.length; c++) { if (w.globals.collapsedSeries[c].index === i) { collapsedSeries = true; } } } if (w.globals.ancillaryCollapsedSeriesIndices.length > 0) { for (var _c = 0; _c < w.globals.ancillaryCollapsedSeriesIndices.length; _c++) { if (w.globals.ancillaryCollapsedSeriesIndices[_c] === i) { ancillaryCollapsedSeries = true; } } } var elMarker = document.createElement('span'); elMarker.classList.add('apexcharts-legend-marker'); var mOffsetX = w.config.legend.markers.offsetX; var mOffsetY = w.config.legend.markers.offsetY; var mHeight = w.config.legend.markers.height; var mWidth = w.config.legend.markers.width; var mBorderWidth = w.config.legend.markers.strokeWidth; var mBorderColor = w.config.legend.markers.strokeColor; var mBorderRadius = w.config.legend.markers.radius; var mStyle = elMarker.style; mStyle.background = fillcolor[i]; mStyle.color = fillcolor[i]; // override fill color with custom legend.markers.fillColors if (w.config.legend.markers.fillColors && w.config.legend.markers.fillColors[i]) { mStyle.background = w.config.legend.markers.fillColors[i]; } mStyle.height = Array.isArray(mHeight) ? parseFloat(mHeight[i]) + 'px' : parseFloat(mHeight) + 'px'; mStyle.width = Array.isArray(mWidth) ? parseFloat(mWidth[i]) + 'px' : parseFloat(mWidth) + 'px'; mStyle.left = Array.isArray(mOffsetX) ? mOffsetX[i] : mOffsetX; mStyle.top = Array.isArray(mOffsetY) ? mOffsetY[i] : mOffsetY; mStyle.borderWidth = Array.isArray(mBorderWidth) ? mBorderWidth[i] : mBorderWidth; mStyle.borderColor = Array.isArray(mBorderColor) ? mBorderColor[i] : mBorderColor; mStyle.borderRadius = Array.isArray(mBorderRadius) ? parseFloat(mBorderRadius[i]) + 'px' : parseFloat(mBorderRadius) + 'px'; if (w.config.legend.markers.customHTML) { if (Array.isArray(w.config.legend.markers.customHTML)) { elMarker.innerHTML = w.config.legend.markers.customHTML[i](); } else { elMarker.innerHTML = w.config.legend.markers.customHTML(); } } Graphics.setAttrs(elMarker, { rel: i + 1, 'data:collapsed': collapsedSeries || ancillaryCollapsedSeries }); if (collapsedSeries || ancillaryCollapsedSeries) { elMarker.classList.add('apexcharts-inactive-legend'); } var elLegend = document.createElement('div'); var elLegendText = document.createElement('span'); elLegendText.classList.add('apexcharts-legend-text'); elLegendText.innerHTML = Array.isArray(text) ? text.join(' ') : text; var textColor = w.config.legend.labels.useSeriesColors ? w.globals.colors[i] : w.config.legend.labels.colors; if (!textColor) { textColor = w.config.chart.foreColor; } elLegendText.style.color = textColor; elLegendText.style.fontSize = parseFloat(w.config.legend.fontSize) + 'px'; elLegendText.style.fontWeight = w.config.legend.fontWeight; elLegendText.style.fontFamily = fontFamily || w.config.chart.fontFamily; Graphics.setAttrs(elLegendText, { rel: i + 1, i: i, 'data:default-text': encodeURIComponent(text), 'data:collapsed': collapsedSeries || ancillaryCollapsedSeries }); elLegend.appendChild(elMarker); elLegend.appendChild(elLegendText); var coreUtils = new CoreUtils(this.ctx); if (!w.config.legend.showForZeroSeries) { var total = coreUtils.getSeriesTotalByIndex(i); if (total === 0 && coreUtils.seriesHaveSameValues(i) && !coreUtils.isSeriesNull(i) && w.globals.collapsedSeriesIndices.indexOf(i) === -1 && w.globals.ancillaryCollapsedSeriesIndices.indexOf(i) === -1) { elLegend.classList.add('apexcharts-hidden-zero-series'); } } if (!w.config.legend.showForNullSeries) { if (coreUtils.isSeriesNull(i) && w.globals.collapsedSeriesIndices.indexOf(i) === -1 && w.globals.ancillaryCollapsedSeriesIndices.indexOf(i) === -1) { elLegend.classList.add('apexcharts-hidden-null-series'); } } w.globals.dom.elLegendWrap.appendChild(elLegend); w.globals.dom.elLegendWrap.classList.add("apexcharts-align-".concat(w.config.legend.horizontalAlign)); w.globals.dom.elLegendWrap.classList.add('position-' + w.config.legend.position); elLegend.classList.add('apexcharts-legend-series'); elLegend.style.margin = "".concat(w.config.legend.itemMargin.vertical, "px ").concat(w.config.legend.itemMargin.horizontal, "px"); w.globals.dom.elLegendWrap.style.width = w.config.legend.width ? w.config.legend.width + 'px' : ''; w.globals.dom.elLegendWrap.style.height = w.config.legend.height ? w.config.legend.height + 'px' : ''; Graphics.setAttrs(elLegend, { rel: i + 1, 'data:collapsed': collapsedSeries || ancillaryCollapsedSeries }); if (collapsedSeries || ancillaryCollapsedSeries) { elLegend.classList.add('apexcharts-inactive-legend'); } if (!w.config.legend.onItemClick.toggleDataSeries) { elLegend.classList.add('apexcharts-no-click'); } } // for now - just prevent click on heatmap legend - and allow hover only var clickAllowed = w.config.chart.type !== 'heatmap' && !this.isBarsDistributed; if (clickAllowed && w.config.legend.onItemClick.toggleDataSeries) { w.globals.dom.elWrap.addEventListener('click', self.onLegendClick, true); } if (w.config.legend.onItemHover.highlightDataSeries) { w.globals.dom.elWrap.addEventListener('mousemove', self.onLegendHovered, true); w.globals.dom.elWrap.addEventListener('mouseout', self.onLegendHovered, true); } } }, { key: "setLegendWrapXY", value: function setLegendWrapXY(offsetX, offsetY) { var w = this.w; var elLegendWrap = w.globals.dom.baseEl.querySelector('.apexcharts-legend'); var legendRect = elLegendWrap.getBoundingClientRect(); var x = 0; var y = 0; if (w.config.legend.position === 'bottom') { y = y + (w.globals.svgHeight - legendRect.height / 2); } else if (w.config.legend.position === 'top') { var dim = new Dimensions(this.ctx); var titleH = dim.dimHelpers.getTitleSubtitleCoords('title').height; var subtitleH = dim.dimHelpers.getTitleSubtitleCoords('subtitle').height; y = y + (titleH > 0 ? titleH - 10 : 0) + (subtitleH > 0 ? subtitleH - 10 : 0); } elLegendWrap.style.position = 'absolute'; x = x + offsetX + w.config.legend.offsetX; y = y + offsetY + w.config.legend.offsetY; elLegendWrap.style.left = x + 'px'; elLegendWrap.style.top = y + 'px'; if (w.config.legend.position === 'bottom') { elLegendWrap.style.top = 'auto'; elLegendWrap.style.bottom = 5 - w.config.legend.offsetY + 'px'; } else if (w.config.legend.position === 'right') { elLegendWrap.style.left = 'auto'; elLegendWrap.style.right = 25 + w.config.legend.offsetX + 'px'; } var fixedHeigthWidth = ['width', 'height']; fixedHeigthWidth.forEach(function (hw) { if (elLegendWrap.style[hw]) { elLegendWrap.style[hw] = parseInt(w.config.legend[hw], 10) + 'px'; } }); } }, { key: "legendAlignHorizontal", value: function legendAlignHorizontal() { var w = this.w; var elLegendWrap = w.globals.dom.baseEl.querySelector('.apexcharts-legend'); elLegendWrap.style.right = 0; var lRect = this.legendHelpers.getLegendBBox(); var dimensions = new Dimensions(this.ctx); var titleRect = dimensions.dimHelpers.getTitleSubtitleCoords('title'); var subtitleRect = dimensions.dimHelpers.getTitleSubtitleCoords('subtitle'); var offsetX = 20; var offsetY = 0; // the whole legend box is set to bottom if (w.config.legend.position === 'bottom') { offsetY = -lRect.clwh / 1.8; } else if (w.config.legend.position === 'top') { offsetY = titleRect.height + subtitleRect.height + w.config.title.margin + w.config.subtitle.margin - 10; } this.setLegendWrapXY(offsetX, offsetY); } }, { key: "legendAlignVertical", value: function legendAlignVertical() { var w = this.w; var lRect = this.legendHelpers.getLegendBBox(); var offsetY = 20; var offsetX = 0; if (w.config.legend.position === 'left') { offsetX = 20; } if (w.config.legend.position === 'right') { offsetX = w.globals.svgWidth - lRect.clww - 10; } this.setLegendWrapXY(offsetX, offsetY); } }, { key: "onLegendHovered", value: function onLegendHovered(e) { var w = this.w; var hoverOverLegend = e.target.classList.contains('apexcharts-legend-text') || e.target.classList.contains('apexcharts-legend-marker'); if (w.config.chart.type !== 'heatmap' && !this.isBarsDistributed) { if (!e.target.classList.contains('apexcharts-inactive-legend') && hoverOverLegend) { var series = new Series(this.ctx); series.toggleSeriesOnHover(e, e.target); } } else { // for heatmap handling if (hoverOverLegend) { var seriesCnt = parseInt(e.target.getAttribute('rel'), 10) - 1; this.ctx.events.fireEvent('legendHover', [this.ctx, seriesCnt, this.w]); var _series = new Series(this.ctx); _series.highlightRangeInSeries(e, e.target); } } } }, { key: "onLegendClick", value: function onLegendClick(e) { if (e.target.classList.contains('apexcharts-legend-text') || e.target.classList.contains('apexcharts-legend-marker')) { var seriesCnt = parseInt(e.target.getAttribute('rel'), 10) - 1; var isHidden = e.target.getAttribute('data:collapsed') === 'true'; var legendClick = this.w.config.chart.events.legendClick; if (typeof legendClick === 'function') { legendClick(this.ctx, seriesCnt, this.w); } this.ctx.events.fireEvent('legendClick', [this.ctx, seriesCnt, this.w]); var markerClick = this.w.config.legend.markers.onClick; if (typeof markerClick === 'function' && e.target.classList.contains('apexcharts-legend-marker')) { markerClick(this.ctx, seriesCnt, this.w); this.ctx.events.fireEvent('legendMarkerClick', [this.ctx, seriesCnt, this.w]); } this.legendHelpers.toggleDataSeries(seriesCnt, isHidden); } } }]); return Legend; }(); var icoPan = "\n \n \n \n \n \n \n \n"; var icoZoom = "\n \n \n \n"; var icoReset = "\n \n \n"; var icoZoomIn = "\n \n \n\n"; var icoZoomOut = "\n \n \n\n"; var icoSelect = "\n \n \n"; var icoMenu = ""; /** * ApexCharts Toolbar Class for creating toolbar in axis based charts. * * @module Toolbar **/ var Toolbar = /*#__PURE__*/function () { function Toolbar(ctx) { _classCallCheck(this, Toolbar); this.ctx = ctx; this.w = ctx.w; this.ev = this.w.config.chart.events; this.selectedClass = 'apexcharts-selected'; this.localeValues = this.w.globals.locale.toolbar; } _createClass(Toolbar, [{ key: "createToolbar", value: function createToolbar() { var _this = this; var w = this.w; var createDiv = function createDiv() { return document.createElement('div'); }; var elToolbarWrap = createDiv(); elToolbarWrap.setAttribute('class', 'apexcharts-toolbar'); elToolbarWrap.style.top = w.config.chart.toolbar.offsetY + 'px'; elToolbarWrap.style.right = -w.config.chart.toolbar.offsetX + 3 + 'px'; w.globals.dom.elWrap.appendChild(elToolbarWrap); this.elZoom = createDiv(); this.elZoomIn = createDiv(); this.elZoomOut = createDiv(); this.elPan = createDiv(); this.elSelection = createDiv(); this.elZoomReset = createDiv(); this.elMenuIcon = createDiv(); this.elMenu = createDiv(); this.elCustomIcons = []; this.t = w.config.chart.toolbar.tools; if (Array.isArray(this.t.customIcons)) { for (var i = 0; i < this.t.customIcons.length; i++) { this.elCustomIcons.push(createDiv()); } } var toolbarControls = []; var appendZoomControl = function appendZoomControl(type, el, ico) { var tool = type.toLowerCase(); if (_this.t[tool] && w.config.chart.zoom.enabled) { toolbarControls.push({ el: el, icon: typeof _this.t[tool] === 'string' ? _this.t[tool] : ico, title: _this.localeValues[type], class: "apexcharts-".concat(tool, "-icon") }); } }; appendZoomControl('zoomIn', this.elZoomIn, icoZoomIn); appendZoomControl('zoomOut', this.elZoomOut, icoZoomOut); var zoomSelectionCtrls = function zoomSelectionCtrls(z) { if (_this.t[z] && w.config.chart[z].enabled) { toolbarControls.push({ el: z === 'zoom' ? _this.elZoom : _this.elSelection, icon: typeof _this.t[z] === 'string' ? _this.t[z] : z === 'zoom' ? icoZoom : icoSelect, title: _this.localeValues[z === 'zoom' ? 'selectionZoom' : 'selection'], class: w.globals.isTouchDevice ? 'apexcharts-element-hidden' : "apexcharts-".concat(z, "-icon") }); } }; zoomSelectionCtrls('zoom'); zoomSelectionCtrls('selection'); if (this.t.pan && w.config.chart.zoom.enabled) { toolbarControls.push({ el: this.elPan, icon: typeof this.t.pan === 'string' ? this.t.pan : icoPan, title: this.localeValues.pan, class: w.globals.isTouchDevice ? 'apexcharts-element-hidden' : 'apexcharts-pan-icon' }); } appendZoomControl('reset', this.elZoomReset, icoReset); if (this.t.download) { toolbarControls.push({ el: this.elMenuIcon, icon: typeof this.t.download === 'string' ? this.t.download : icoMenu, title: this.localeValues.menu, class: 'apexcharts-menu-icon' }); } for (var _i = 0; _i < this.elCustomIcons.length; _i++) { toolbarControls.push({ el: this.elCustomIcons[_i], icon: this.t.customIcons[_i].icon, title: this.t.customIcons[_i].title, index: this.t.customIcons[_i].index, class: 'apexcharts-toolbar-custom-icon ' + this.t.customIcons[_i].class }); } toolbarControls.forEach(function (t, index) { if (t.index) { Utils.moveIndexInArray(toolbarControls, index, t.index); } }); for (var _i2 = 0; _i2 < toolbarControls.length; _i2++) { Graphics.setAttrs(toolbarControls[_i2].el, { class: toolbarControls[_i2].class, title: toolbarControls[_i2].title }); toolbarControls[_i2].el.innerHTML = toolbarControls[_i2].icon; elToolbarWrap.appendChild(toolbarControls[_i2].el); } this._createHamburgerMenu(elToolbarWrap); if (w.globals.zoomEnabled) { this.elZoom.classList.add(this.selectedClass); } else if (w.globals.panEnabled) { this.elPan.classList.add(this.selectedClass); } else if (w.globals.selectionEnabled) { this.elSelection.classList.add(this.selectedClass); } this.addToolbarEventListeners(); } }, { key: "_createHamburgerMenu", value: function _createHamburgerMenu(parent) { this.elMenuItems = []; parent.appendChild(this.elMenu); Graphics.setAttrs(this.elMenu, { class: 'apexcharts-menu' }); var menuItems = [{ name: 'exportSVG', title: this.localeValues.exportToSVG }, { name: 'exportPNG', title: this.localeValues.exportToPNG }, { name: 'exportCSV', title: this.localeValues.exportToCSV }]; if (!this.w.globals.allSeriesHasEqualX) { // if it is a multi series, and all series have variable x values, export CSV won't work menuItems.splice(2, 1); } for (var i = 0; i < menuItems.length; i++) { this.elMenuItems.push(document.createElement('div')); this.elMenuItems[i].innerHTML = menuItems[i].title; Graphics.setAttrs(this.elMenuItems[i], { class: "apexcharts-menu-item ".concat(menuItems[i].name), title: menuItems[i].title }); this.elMenu.appendChild(this.elMenuItems[i]); } } }, { key: "addToolbarEventListeners", value: function addToolbarEventListeners() { var _this2 = this; this.elZoomReset.addEventListener('click', this.handleZoomReset.bind(this)); this.elSelection.addEventListener('click', this.toggleZoomSelection.bind(this, 'selection')); this.elZoom.addEventListener('click', this.toggleZoomSelection.bind(this, 'zoom')); this.elZoomIn.addEventListener('click', this.handleZoomIn.bind(this)); this.elZoomOut.addEventListener('click', this.handleZoomOut.bind(this)); this.elPan.addEventListener('click', this.togglePanning.bind(this)); this.elMenuIcon.addEventListener('click', this.toggleMenu.bind(this)); this.elMenuItems.forEach(function (m) { if (m.classList.contains('exportSVG')) { m.addEventListener('click', _this2.handleDownload.bind(_this2, 'svg')); } else if (m.classList.contains('exportPNG')) { m.addEventListener('click', _this2.handleDownload.bind(_this2, 'png')); } else if (m.classList.contains('exportCSV')) { m.addEventListener('click', _this2.handleDownload.bind(_this2, 'csv')); } }); for (var i = 0; i < this.t.customIcons.length; i++) { this.elCustomIcons[i].addEventListener('click', this.t.customIcons[i].click.bind(this, this.ctx, this.ctx.w)); } } }, { key: "toggleZoomSelection", value: function toggleZoomSelection(type) { this.toggleOtherControls(); var el = type === 'selection' ? this.elSelection : this.elZoom; var enabledType = type === 'selection' ? 'selectionEnabled' : 'zoomEnabled'; this.w.globals[enabledType] = !this.w.globals[enabledType]; if (!el.classList.contains(this.selectedClass)) { el.classList.add(this.selectedClass); } else { el.classList.remove(this.selectedClass); } } }, { key: "getToolbarIconsReference", value: function getToolbarIconsReference() { var w = this.w; if (!this.elZoom) { this.elZoom = w.globals.dom.baseEl.querySelector('.apexcharts-zoom-icon'); } if (!this.elPan) { this.elPan = w.globals.dom.baseEl.querySelector('.apexcharts-pan-icon'); } if (!this.elSelection) { this.elSelection = w.globals.dom.baseEl.querySelector('.apexcharts-selection-icon'); } } }, { key: "enableZoomPanFromToolbar", value: function enableZoomPanFromToolbar(type) { this.toggleOtherControls(); type === 'pan' ? this.w.globals.panEnabled = true : this.w.globals.zoomEnabled = true; var el = type === 'pan' ? this.elPan : this.elZoom; var el2 = type === 'pan' ? this.elZoom : this.elPan; if (el) { el.classList.add(this.selectedClass); } if (el2) { el2.classList.remove(this.selectedClass); } } }, { key: "togglePanning", value: function togglePanning() { this.toggleOtherControls(); this.w.globals.panEnabled = !this.w.globals.panEnabled; if (!this.elPan.classList.contains(this.selectedClass)) { this.elPan.classList.add(this.selectedClass); } else { this.elPan.classList.remove(this.selectedClass); } } }, { key: "toggleOtherControls", value: function toggleOtherControls() { var _this3 = this; var w = this.w; w.globals.panEnabled = false; w.globals.zoomEnabled = false; w.globals.selectionEnabled = false; this.getToolbarIconsReference(); var toggleEls = [this.elPan, this.elSelection, this.elZoom]; toggleEls.forEach(function (el) { if (el) { el.classList.remove(_this3.selectedClass); } }); } }, { key: "handleZoomIn", value: function handleZoomIn() { var w = this.w; var centerX = (w.globals.minX + w.globals.maxX) / 2; var newMinX = (w.globals.minX + centerX) / 2; var newMaxX = (w.globals.maxX + centerX) / 2; var newMinXMaxX = this._getNewMinXMaxX(newMinX, newMaxX); if (!w.globals.disableZoomIn) { this.zoomUpdateOptions(newMinXMaxX.minX, newMinXMaxX.maxX); } } }, { key: "handleZoomOut", value: function handleZoomOut() { var w = this.w; // avoid zooming out beyond 1000 which may result in NaN values being printed on x-axis if (w.config.xaxis.type === 'datetime' && new Date(w.globals.minX).getUTCFullYear() < 1000) { return; } var centerX = (w.globals.minX + w.globals.maxX) / 2; var newMinX = w.globals.minX - (centerX - w.globals.minX); var newMaxX = w.globals.maxX - (centerX - w.globals.maxX); var newMinXMaxX = this._getNewMinXMaxX(newMinX, newMaxX); if (!w.globals.disableZoomOut) { this.zoomUpdateOptions(newMinXMaxX.minX, newMinXMaxX.maxX); } } }, { key: "_getNewMinXMaxX", value: function _getNewMinXMaxX(newMinX, newMaxX) { var shouldFloor = this.w.config.xaxis.convertedCatToNumeric; return { minX: shouldFloor ? Math.floor(newMinX) : newMinX, maxX: shouldFloor ? Math.floor(newMaxX) : newMaxX }; } }, { key: "zoomUpdateOptions", value: function zoomUpdateOptions(newMinX, newMaxX) { var w = this.w; if (w.config.xaxis.convertedCatToNumeric) { // in category charts, avoid zooming out beyond min and max if (newMinX < 1) { newMinX = 1; newMaxX = w.globals.dataPoints; } if (newMaxX - newMinX < 2) { return; } } var xaxis = { min: newMinX, max: newMaxX }; var beforeZoomRange = this.getBeforeZoomRange(xaxis); if (beforeZoomRange) { xaxis = beforeZoomRange.xaxis; } var options = { xaxis: xaxis }; var yaxis = Utils.clone(w.globals.initialConfig.yaxis); if (w.config.chart.zoom.autoScaleYaxis) { var scale = new Range(this.ctx); yaxis = scale.autoScaleY(this.ctx, yaxis, { xaxis: xaxis }); } if (!w.config.chart.group) { // if chart in a group, prevent yaxis update here // fix issue #650 options.yaxis = yaxis; } this.w.globals.zoomed = true; this.ctx.updateHelpers._updateOptions(options, false, this.w.config.chart.animations.dynamicAnimation.enabled); this.zoomCallback(xaxis, yaxis); } }, { key: "zoomCallback", value: function zoomCallback(xaxis, yaxis) { if (typeof this.ev.zoomed === 'function') { this.ev.zoomed(this.ctx, { xaxis: xaxis, yaxis: yaxis }); } } }, { key: "getBeforeZoomRange", value: function getBeforeZoomRange(xaxis, yaxis) { var newRange = null; if (typeof this.ev.beforeZoom === 'function') { newRange = this.ev.beforeZoom(this, { xaxis: xaxis, yaxis: yaxis }); } return newRange; } }, { key: "toggleMenu", value: function toggleMenu() { var _this4 = this; window.setTimeout(function () { if (_this4.elMenu.classList.contains('apexcharts-menu-open')) { _this4.elMenu.classList.remove('apexcharts-menu-open'); } else { _this4.elMenu.classList.add('apexcharts-menu-open'); } }, 0); } }, { key: "handleDownload", value: function handleDownload(type) { var w = this.w; var exprt = new Exports(this.ctx); switch (type) { case 'svg': exprt.exportToSVG(this.ctx); break; case 'png': exprt.exportToPng(this.ctx); break; case 'csv': exprt.exportToCSV({ series: w.config.series }); break; } } }, { key: "handleZoomReset", value: function handleZoomReset(e) { var _this5 = this; var charts = this.ctx.getSyncedCharts(); charts.forEach(function (ch) { var w = ch.w; ch.updateHelpers.revertDefaultAxisMinMax(); if (typeof w.config.chart.events.zoomed === 'function') { _this5.zoomCallback({ min: w.config.xaxis.min, max: w.config.xaxis.max }); } w.globals.zoomed = false; ch.updateHelpers._updateSeries(w.globals.initialSeries, w.config.chart.animations.dynamicAnimation.enabled); }); } }, { key: "destroy", value: function destroy() { this.elZoom = null; this.elZoomIn = null; this.elZoomOut = null; this.elPan = null; this.elSelection = null; this.elZoomReset = null; this.elMenuIcon = null; } }]); return Toolbar; }(); /** * ApexCharts Zoom Class for handling zooming and panning on axes based charts. * * @module ZoomPanSelection **/ var ZoomPanSelection = /*#__PURE__*/function (_Toolbar) { _inherits(ZoomPanSelection, _Toolbar); function ZoomPanSelection(ctx) { var _this; _classCallCheck(this, ZoomPanSelection); _this = _possibleConstructorReturn(this, _getPrototypeOf(ZoomPanSelection).call(this, ctx)); _this.ctx = ctx; _this.w = ctx.w; _this.dragged = false; _this.graphics = new Graphics(_this.ctx); _this.eventList = ['mousedown', 'mouseleave', 'mousemove', 'touchstart', 'touchmove', 'mouseup', 'touchend']; _this.clientX = 0; _this.clientY = 0; _this.startX = 0; _this.endX = 0; _this.dragX = 0; _this.startY = 0; _this.endY = 0; _this.dragY = 0; _this.moveDirection = 'none'; return _this; } _createClass(ZoomPanSelection, [{ key: "init", value: function init(_ref) { var _this2 = this; var xyRatios = _ref.xyRatios; var w = this.w; var me = this; this.xyRatios = xyRatios; this.zoomRect = this.graphics.drawRect(0, 0, 0, 0); this.selectionRect = this.graphics.drawRect(0, 0, 0, 0); this.gridRect = w.globals.dom.baseEl.querySelector('.apexcharts-grid'); this.zoomRect.node.classList.add('apexcharts-zoom-rect'); this.selectionRect.node.classList.add('apexcharts-selection-rect'); w.globals.dom.elGraphical.add(this.zoomRect); w.globals.dom.elGraphical.add(this.selectionRect); if (w.config.chart.selection.type === 'x') { this.slDraggableRect = this.selectionRect.draggable({ minX: 0, minY: 0, maxX: w.globals.gridWidth, maxY: w.globals.gridHeight }).on('dragmove', this.selectionDragging.bind(this, 'dragging')); } else if (w.config.chart.selection.type === 'y') { this.slDraggableRect = this.selectionRect.draggable({ minX: 0, maxX: w.globals.gridWidth }).on('dragmove', this.selectionDragging.bind(this, 'dragging')); } else { this.slDraggableRect = this.selectionRect.draggable().on('dragmove', this.selectionDragging.bind(this, 'dragging')); } this.preselectedSelection(); this.hoverArea = w.globals.dom.baseEl.querySelector(w.globals.chartClass); this.hoverArea.classList.add('apexcharts-zoomable'); this.eventList.forEach(function (event) { _this2.hoverArea.addEventListener(event, me.svgMouseEvents.bind(me, xyRatios), { capture: false, passive: true }); }); } // remove the event listeners which were previously added on hover area }, { key: "destroy", value: function destroy() { if (this.slDraggableRect) { this.slDraggableRect.draggable(false); this.slDraggableRect.off(); this.selectionRect.off(); } this.selectionRect = null; this.zoomRect = null; this.gridRect = null; } }, { key: "svgMouseEvents", value: function svgMouseEvents(xyRatios, e) { var w = this.w; var me = this; var toolbar = this.ctx.toolbar; var zoomtype = w.globals.zoomEnabled ? w.config.chart.zoom.type : w.config.chart.selection.type; if (e.shiftKey) { this.shiftWasPressed = true; toolbar.enableZoomPanFromToolbar('pan'); } else { if (this.shiftWasPressed) { toolbar.enableZoomPanFromToolbar('zoom'); this.shiftWasPressed = false; } } var falsePositives = e.target.classList.contains('apexcharts-selection-rect') || e.target.parentNode.classList.contains('apexcharts-toolbar'); if (falsePositives) return; me.clientX = e.type === 'touchmove' || e.type === 'touchstart' ? e.touches[0].clientX : e.type === 'touchend' ? e.changedTouches[0].clientX : e.clientX; me.clientY = e.type === 'touchmove' || e.type === 'touchstart' ? e.touches[0].clientY : e.type === 'touchend' ? e.changedTouches[0].clientY : e.clientY; if (e.type === 'mousedown' && e.which === 1) { var gridRectDim = me.gridRect.getBoundingClientRect(); me.startX = me.clientX - gridRectDim.left; me.startY = me.clientY - gridRectDim.top; me.dragged = false; me.w.globals.mousedown = true; } if (e.type === 'mousemove' && e.which === 1 || e.type === 'touchmove') { me.dragged = true; if (w.globals.panEnabled) { w.globals.selection = null; if (me.w.globals.mousedown) { me.panDragging({ context: me, zoomtype: zoomtype, xyRatios: xyRatios }); } } else { if (me.w.globals.mousedown && w.globals.zoomEnabled || me.w.globals.mousedown && w.globals.selectionEnabled) { me.selection = me.selectionDrawing({ context: me, zoomtype: zoomtype }); } } } if (e.type === 'mouseup' || e.type === 'touchend' || e.type === 'mouseleave') { // we will be calling getBoundingClientRect on each mousedown/mousemove/mouseup var _gridRectDim = me.gridRect.getBoundingClientRect(); if (me.w.globals.mousedown) { // user released the drag, now do all the calculations me.endX = me.clientX - _gridRectDim.left; me.endY = me.clientY - _gridRectDim.top; me.dragX = Math.abs(me.endX - me.startX); me.dragY = Math.abs(me.endY - me.startY); if (w.globals.zoomEnabled || w.globals.selectionEnabled) { me.selectionDrawn({ context: me, zoomtype: zoomtype }); } if (w.globals.panEnabled && w.config.xaxis.convertedCatToNumeric) { me.delayedPanScrolled(); } } if (w.globals.zoomEnabled) { me.hideSelectionRect(this.selectionRect); } me.dragged = false; me.w.globals.mousedown = false; } this.makeSelectionRectDraggable(); } }, { key: "makeSelectionRectDraggable", value: function makeSelectionRectDraggable() { var w = this.w; if (!this.selectionRect) return; var rectDim = this.selectionRect.node.getBoundingClientRect(); if (rectDim.width > 0 && rectDim.height > 0) { this.slDraggableRect.selectize({ points: 'l, r', pointSize: 8, pointType: 'rect' }).resize({ constraint: { minX: 0, minY: 0, maxX: w.globals.gridWidth, maxY: w.globals.gridHeight } }).on('resizing', this.selectionDragging.bind(this, 'resizing')); } } }, { key: "preselectedSelection", value: function preselectedSelection() { var w = this.w; var xyRatios = this.xyRatios; if (!w.globals.zoomEnabled) { if (typeof w.globals.selection !== 'undefined' && w.globals.selection !== null) { this.drawSelectionRect(w.globals.selection); } else { if (w.config.chart.selection.xaxis.min !== undefined && w.config.chart.selection.xaxis.max !== undefined) { var x = (w.config.chart.selection.xaxis.min - w.globals.minX) / xyRatios.xRatio; var width = w.globals.gridWidth - (w.globals.maxX - w.config.chart.selection.xaxis.max) / xyRatios.xRatio - x; var selectionRect = { x: x, y: 0, width: width, height: w.globals.gridHeight, translateX: 0, translateY: 0, selectionEnabled: true }; this.drawSelectionRect(selectionRect); this.makeSelectionRectDraggable(); if (typeof w.config.chart.events.selection === 'function') { w.config.chart.events.selection(this.ctx, { xaxis: { min: w.config.chart.selection.xaxis.min, max: w.config.chart.selection.xaxis.max }, yaxis: {} }); } } } } } }, { key: "drawSelectionRect", value: function drawSelectionRect(_ref2) { var x = _ref2.x, y = _ref2.y, width = _ref2.width, height = _ref2.height, translateX = _ref2.translateX, translateY = _ref2.translateY; var w = this.w; var zoomRect = this.zoomRect; var selectionRect = this.selectionRect; if (this.dragged || w.globals.selection !== null) { var scalingAttrs = { transform: 'translate(' + translateX + ', ' + translateY + ')' }; // change styles based on zoom or selection // zoom is Enabled and user has dragged, so draw blue rect if (w.globals.zoomEnabled && this.dragged) { if (width < 0) width = 1; // fixes apexcharts.js#1168 zoomRect.attr({ x: x, y: y, width: width, height: height, fill: w.config.chart.zoom.zoomedArea.fill.color, 'fill-opacity': w.config.chart.zoom.zoomedArea.fill.opacity, stroke: w.config.chart.zoom.zoomedArea.stroke.color, 'stroke-width': w.config.chart.zoom.zoomedArea.stroke.width, 'stroke-opacity': w.config.chart.zoom.zoomedArea.stroke.opacity }); Graphics.setAttrs(zoomRect.node, scalingAttrs); } // selection is enabled if (w.globals.selectionEnabled) { selectionRect.attr({ x: x, y: y, width: width > 0 ? width : 0, height: height > 0 ? height : 0, fill: w.config.chart.selection.fill.color, 'fill-opacity': w.config.chart.selection.fill.opacity, stroke: w.config.chart.selection.stroke.color, 'stroke-width': w.config.chart.selection.stroke.width, 'stroke-dasharray': w.config.chart.selection.stroke.dashArray, 'stroke-opacity': w.config.chart.selection.stroke.opacity }); Graphics.setAttrs(selectionRect.node, scalingAttrs); } } } }, { key: "hideSelectionRect", value: function hideSelectionRect(rect) { if (rect) { rect.attr({ x: 0, y: 0, width: 0, height: 0 }); } } }, { key: "selectionDrawing", value: function selectionDrawing(_ref3) { var context = _ref3.context, zoomtype = _ref3.zoomtype; var w = this.w; var me = context; var gridRectDim = this.gridRect.getBoundingClientRect(); var startX = me.startX - 1; var startY = me.startY; var selectionWidth = me.clientX - gridRectDim.left - startX; var selectionHeight = me.clientY - gridRectDim.top - startY; var translateX = 0; var translateY = 0; var selectionRect = {}; if (Math.abs(selectionWidth + startX) > w.globals.gridWidth) { // user dragged the mouse outside drawing area to the right selectionWidth = w.globals.gridWidth - startX; } else if (me.clientX - gridRectDim.left < 0) { // user dragged the mouse outside drawing area to the left selectionWidth = startX; } // inverse selection X if (startX > me.clientX - gridRectDim.left) { selectionWidth = Math.abs(selectionWidth); translateX = -selectionWidth; } // inverse selection Y if (startY > me.clientY - gridRectDim.top) { selectionHeight = Math.abs(selectionHeight); translateY = -selectionHeight; } if (zoomtype === 'x') { selectionRect = { x: startX, y: 0, width: selectionWidth, height: w.globals.gridHeight, translateX: translateX, translateY: 0 }; } else if (zoomtype === 'y') { selectionRect = { x: 0, y: startY, width: w.globals.gridWidth, height: selectionHeight, translateX: 0, translateY: translateY }; } else { selectionRect = { x: startX, y: startY, width: selectionWidth, height: selectionHeight, translateX: translateX, translateY: translateY }; } me.drawSelectionRect(selectionRect); me.selectionDragging('resizing'); return selectionRect; } }, { key: "selectionDragging", value: function selectionDragging(type, e) { var _this3 = this; var w = this.w; var xyRatios = this.xyRatios; var selRect = this.selectionRect; var timerInterval = 0; if (type === 'resizing') { timerInterval = 30; } if (typeof w.config.chart.events.selection === 'function' && w.globals.selectionEnabled) { // a small debouncer is required when resizing to avoid freezing the chart clearTimeout(this.w.globals.selectionResizeTimer); this.w.globals.selectionResizeTimer = window.setTimeout(function () { var gridRectDim = _this3.gridRect.getBoundingClientRect(); var selectionRect = selRect.node.getBoundingClientRect(); var minX = w.globals.xAxisScale.niceMin + (selectionRect.left - gridRectDim.left) * xyRatios.xRatio; var maxX = w.globals.xAxisScale.niceMin + (selectionRect.right - gridRectDim.left) * xyRatios.xRatio; var minY = w.globals.yAxisScale[0].niceMin + (gridRectDim.bottom - selectionRect.bottom) * xyRatios.yRatio[0]; var maxY = w.globals.yAxisScale[0].niceMax - (selectionRect.top - gridRectDim.top) * xyRatios.yRatio[0]; w.config.chart.events.selection(_this3.ctx, { xaxis: { min: minX, max: maxX }, yaxis: { min: minY, max: maxY } }); }, timerInterval); } } }, { key: "selectionDrawn", value: function selectionDrawn(_ref4) { var context = _ref4.context, zoomtype = _ref4.zoomtype; var w = this.w; var me = context; var xyRatios = this.xyRatios; var toolbar = this.ctx.toolbar; if (me.startX > me.endX) { var tempX = me.startX; me.startX = me.endX; me.endX = tempX; } if (me.startY > me.endY) { var tempY = me.startY; me.startY = me.endY; me.endY = tempY; } var xLowestValue = w.globals.xAxisScale.niceMin + me.startX * xyRatios.xRatio; var xHighestValue = w.globals.xAxisScale.niceMin + me.endX * xyRatios.xRatio; // TODO: we will consider the 1st y axis values here for getting highest and lowest y var yHighestValue = []; var yLowestValue = []; w.config.yaxis.forEach(function (yaxe, index) { yHighestValue.push(w.globals.yAxisScale[index].niceMax - xyRatios.yRatio[index] * me.startY); yLowestValue.push(w.globals.yAxisScale[index].niceMax - xyRatios.yRatio[index] * me.endY); }); if (me.dragged && (me.dragX > 10 || me.dragY > 10) && xLowestValue !== xHighestValue) { if (w.globals.zoomEnabled) { var yaxis = Utils.clone(w.globals.initialConfig.yaxis); var xaxis = Utils.clone(w.globals.initialConfig.xaxis); w.globals.zoomed = true; // before zooming in/out, store the last yaxis and xaxis range, so that when user hits the RESET button, we get the original range // also - make sure user is not already zoomed in/out - otherwise we will store zoomed values in lastAxis // DEAD code - the below condition will never run now as zoomed is made false above if (!w.globals.zoomed) { w.globals.lastXAxis = Utils.clone(w.config.xaxis); w.globals.lastYAxis = Utils.clone(w.config.yaxis); } if (w.config.xaxis.convertedCatToNumeric) { xLowestValue = Math.floor(xLowestValue); xHighestValue = Math.floor(xHighestValue); if (xLowestValue < 1) { xLowestValue = 1; xHighestValue = w.globals.dataPoints; } if (xHighestValue - xLowestValue < 2) { xHighestValue = xLowestValue + 1; } } if (zoomtype === 'xy' || zoomtype === 'x') { xaxis = { min: xLowestValue, max: xHighestValue }; } if (zoomtype === 'xy' || zoomtype === 'y') { yaxis.forEach(function (yaxe, index) { yaxis[index].min = yLowestValue[index]; yaxis[index].max = yHighestValue[index]; }); } if (w.config.chart.zoom.autoScaleYaxis) { var scale = new Range(me.ctx); yaxis = scale.autoScaleY(me.ctx, yaxis, { xaxis: xaxis }); } if (toolbar) { var beforeZoomRange = toolbar.getBeforeZoomRange(xaxis, yaxis); if (beforeZoomRange) { xaxis = beforeZoomRange.xaxis ? beforeZoomRange.xaxis : xaxis; yaxis = beforeZoomRange.yaxis ? beforeZoomRange.yaxe : yaxis; } } var options = { xaxis: xaxis }; if (!w.config.chart.group) { // if chart in a group, prevent yaxis update here // fix issue #650 options.yaxis = yaxis; } me.ctx.updateHelpers._updateOptions(options, false, me.w.config.chart.animations.dynamicAnimation.enabled); if (typeof w.config.chart.events.zoomed === 'function') { toolbar.zoomCallback(xaxis, yaxis); } } else if (w.globals.selectionEnabled) { var _yaxis = null; var _xaxis = null; _xaxis = { min: xLowestValue, max: xHighestValue }; if (zoomtype === 'xy' || zoomtype === 'y') { _yaxis = Utils.clone(w.config.yaxis); _yaxis.forEach(function (yaxe, index) { _yaxis[index].min = yLowestValue[index]; _yaxis[index].max = yHighestValue[index]; }); } w.globals.selection = me.selection; if (typeof w.config.chart.events.selection === 'function') { w.config.chart.events.selection(me.ctx, { xaxis: _xaxis, yaxis: _yaxis }); } } } } }, { key: "panDragging", value: function panDragging(_ref5) { var context = _ref5.context; var w = this.w; var me = context; // check to make sure there is data to compare against if (typeof w.globals.lastClientPosition.x !== 'undefined') { // get the change from last position to this position var deltaX = w.globals.lastClientPosition.x - me.clientX; var deltaY = w.globals.lastClientPosition.y - me.clientY; // check which direction had the highest amplitude and then figure out direction by checking if the value is greater or less than zero if (Math.abs(deltaX) > Math.abs(deltaY) && deltaX > 0) { this.moveDirection = 'left'; } else if (Math.abs(deltaX) > Math.abs(deltaY) && deltaX < 0) { this.moveDirection = 'right'; } else if (Math.abs(deltaY) > Math.abs(deltaX) && deltaY > 0) { this.moveDirection = 'up'; } else if (Math.abs(deltaY) > Math.abs(deltaX) && deltaY < 0) { this.moveDirection = 'down'; } } // set the new last position to the current for next time (to get the position of drag) w.globals.lastClientPosition = { x: me.clientX, y: me.clientY }; var xLowestValue = w.globals.minX; var xHighestValue = w.globals.maxX; // on a category, we don't pan continuosly as it causes bugs if (!w.config.xaxis.convertedCatToNumeric) { me.panScrolled(xLowestValue, xHighestValue); } } }, { key: "delayedPanScrolled", value: function delayedPanScrolled() { var w = this.w; var newMinX = w.globals.minX; var newMaxX = w.globals.maxX; var centerX = (w.globals.maxX - w.globals.minX) / 2; if (this.moveDirection === 'left') { newMinX = w.globals.minX + centerX; newMaxX = w.globals.maxX + centerX; } else if (this.moveDirection === 'right') { newMinX = w.globals.minX - centerX; newMaxX = w.globals.maxX - centerX; } newMinX = Math.floor(newMinX); newMaxX = Math.floor(newMaxX); this.updateScrolledChart({ xaxis: { min: newMinX, max: newMaxX } }, newMinX, newMaxX); } }, { key: "panScrolled", value: function panScrolled(xLowestValue, xHighestValue) { var w = this.w; var xyRatios = this.xyRatios; var yaxis = Utils.clone(w.globals.initialConfig.yaxis); if (this.moveDirection === 'left') { xLowestValue = w.globals.minX + w.globals.gridWidth / 15 * xyRatios.xRatio; xHighestValue = w.globals.maxX + w.globals.gridWidth / 15 * xyRatios.xRatio; } else if (this.moveDirection === 'right') { xLowestValue = w.globals.minX - w.globals.gridWidth / 15 * xyRatios.xRatio; xHighestValue = w.globals.maxX - w.globals.gridWidth / 15 * xyRatios.xRatio; } if (xLowestValue < w.globals.initialMinX || xHighestValue > w.globals.initialMaxX) { xLowestValue = w.globals.minX; xHighestValue = w.globals.maxX; } var xaxis = { min: xLowestValue, max: xHighestValue }; if (w.config.chart.zoom.autoScaleYaxis) { var scale = new Range(this.ctx); yaxis = scale.autoScaleY(this.ctx, yaxis, { xaxis: xaxis }); } var options = { xaxis: { min: xLowestValue, max: xHighestValue } }; if (!w.config.chart.group) { // if chart in a group, prevent yaxis update here // fix issue #650 options.yaxis = yaxis; } this.updateScrolledChart(options, xLowestValue, xHighestValue); } }, { key: "updateScrolledChart", value: function updateScrolledChart(options, xLowestValue, xHighestValue) { var w = this.w; this.ctx.updateHelpers._updateOptions(options, false, false); if (typeof w.config.chart.events.scrolled === 'function') { w.config.chart.events.scrolled(this.ctx, { xaxis: { min: xLowestValue, max: xHighestValue } }); } } }]); return ZoomPanSelection; }(Toolbar); var Utils$1 = /*#__PURE__*/function () { function Utils$1(tooltipContext) { _classCallCheck(this, Utils$1); this.w = tooltipContext.w; this.ttCtx = tooltipContext; this.ctx = tooltipContext.ctx; } /** ** When hovering over series, you need to capture which series is being hovered on. ** This function will return both capturedseries index as well as inner index of that series * @memberof Utils * @param {object} * - hoverArea = the rect on which user hovers * - elGrid = dimensions of the hover rect (it can be different than hoverarea) */ _createClass(Utils$1, [{ key: "getNearestValues", value: function getNearestValues(_ref) { var hoverArea = _ref.hoverArea, elGrid = _ref.elGrid, clientX = _ref.clientX, clientY = _ref.clientY; var w = this.w; var hoverWidth = w.globals.gridWidth; var xDivisor = hoverWidth / (w.globals.dataPoints - 1); var seriesBound = elGrid.getBoundingClientRect(); var hasBars = this.hasBars(); if (w.globals.comboCharts || hasBars) { xDivisor = hoverWidth / w.globals.dataPoints; } var hoverX = clientX - seriesBound.left; var hoverY = clientY - seriesBound.top; var notInRect = hoverX < 0 || hoverY < 0 || hoverX > w.globals.gridWidth || hoverY > w.globals.gridHeight; if (notInRect) { hoverArea.classList.remove('hovering-zoom'); hoverArea.classList.remove('hovering-pan'); } else { if (w.globals.zoomEnabled) { hoverArea.classList.remove('hovering-pan'); hoverArea.classList.add('hovering-zoom'); } else if (w.globals.panEnabled) { hoverArea.classList.remove('hovering-zoom'); hoverArea.classList.add('hovering-pan'); } } var j = Math.round(hoverX / xDivisor); if (hasBars) { j = Math.ceil(hoverX / xDivisor); j = j - 1; } var capturedSeries = null; var closest = null; var seriesXValArr = []; var seriesYValArr = []; for (var s = 0; s < w.globals.seriesXvalues.length; s++) { seriesXValArr.push([w.globals.seriesXvalues[s][0] - 0.000001].concat(w.globals.seriesXvalues[s])); } seriesXValArr = seriesXValArr.map(function (seriesXVal) { return seriesXVal.filter(function (s) { return s; }); }); seriesYValArr = w.globals.seriesYvalues.map(function (seriesYVal) { return seriesYVal.filter(function (s) { return Utils.isNumber(s); }); }); // if X axis type is not category and tooltip is not shared, then we need to find the cursor position and get the nearest value if (w.globals.isXNumeric) { closest = this.closestInMultiArray(hoverX, hoverY, seriesXValArr, seriesYValArr); capturedSeries = closest.index; j = closest.j; if (capturedSeries !== null) { // initial push, it should be a little smaller than the 1st val seriesXValArr = w.globals.seriesXvalues[capturedSeries]; closest = this.closestInArray(hoverX, seriesXValArr); j = closest.index; } } w.globals.capturedSeriesIndex = capturedSeries === null ? -1 : capturedSeries; if (!j || j < 1) j = 0; w.globals.capturedDataPointIndex = j; return { capturedSeries: capturedSeries, j: j, hoverX: hoverX, hoverY: hoverY }; } }, { key: "closestInMultiArray", value: function closestInMultiArray(hoverX, hoverY, Xarrays, Yarrays) { var w = this.w; var activeIndex = 0; var currIndex = null; var j = -1; if (w.globals.series.length > 1) { activeIndex = this.getFirstActiveXArray(Xarrays); } else { currIndex = 0; } var currY = Yarrays[activeIndex][0]; var currX = Xarrays[activeIndex][0]; var diffX = Math.abs(hoverX - currX); var diffY = Math.abs(hoverY - currY); var diff = diffY + diffX; Yarrays.map(function (arrY, arrIndex) { arrY.map(function (y, innerKey) { var newdiffY = Math.abs(hoverY - Yarrays[arrIndex][innerKey]); var newdiffX = Math.abs(hoverX - Xarrays[arrIndex][innerKey]); var newdiff = newdiffX + newdiffY; if (newdiff < diff) { diff = newdiff; diffX = newdiffX; diffY = newdiffY; currIndex = arrIndex; j = innerKey; } }); }); return { index: currIndex, j: j }; } }, { key: "getFirstActiveXArray", value: function getFirstActiveXArray(Xarrays) { var activeIndex = 0; var coreUtils = new CoreUtils(this.ctx); var firstActiveSeriesIndex = Xarrays.map(function (xarr, index) { return xarr.length > 0 ? index : -1; }); for (var a = 0; a < firstActiveSeriesIndex.length; a++) { var total = coreUtils.getSeriesTotalByIndex(a); if (firstActiveSeriesIndex[a] !== -1 && total !== 0 && !coreUtils.seriesHaveSameValues(a)) { activeIndex = firstActiveSeriesIndex[a]; break; } } return activeIndex; } }, { key: "closestInArray", value: function closestInArray(val, arr) { var curr = arr[0]; var currIndex = null; var diff = Math.abs(val - curr); for (var i = 0; i < arr.length; i++) { var newdiff = Math.abs(val - arr[i]); if (newdiff < diff) { diff = newdiff; currIndex = i; } } return { index: currIndex }; } /** * When there are multiple series, it is possible to have different x values for each series. * But it may be possible in those multiple series, that there is same x value for 2 or more * series. * @memberof Utils * @param {int} * - j = is the inner index of series -> (series[i][j]) * @return {bool} */ }, { key: "isXoverlap", value: function isXoverlap(j) { var w = this.w; var xSameForAllSeriesJArr = []; var seriesX = w.globals.seriesX.filter(function (s) { return typeof s[0] !== 'undefined'; }); if (seriesX.length > 0) { for (var i = 0; i < seriesX.length - 1; i++) { if (typeof seriesX[i][j] !== 'undefined' && typeof seriesX[i + 1][j] !== 'undefined') { if (seriesX[i][j] !== seriesX[i + 1][j]) { xSameForAllSeriesJArr.push('unEqual'); } } } } if (xSameForAllSeriesJArr.length === 0) { return true; } return false; } }, { key: "isInitialSeriesSameLen", value: function isInitialSeriesSameLen() { var sameLen = true; var initialSeries = this.w.globals.initialSeries; for (var i = 0; i < initialSeries.length - 1; i++) { if (initialSeries[i].data.length !== initialSeries[i + 1].data.length) { sameLen = false; break; } } return sameLen; } }, { key: "getBarsHeight", value: function getBarsHeight(allbars) { var bars = _toConsumableArray(allbars); var totalHeight = bars.reduce(function (acc, bar) { return acc + bar.getBBox().height; }, 0); return totalHeight; } }, { key: "getElMarkers", value: function getElMarkers() { return this.w.globals.dom.baseEl.querySelectorAll(' .apexcharts-series-markers'); } }, { key: "getAllMarkers", value: function getAllMarkers() { // first get all marker parents. This parent class contains series-index // which helps to sort the markers as they are dynamic var markersWraps = this.w.globals.dom.baseEl.querySelectorAll('.apexcharts-series-markers-wrap'); markersWraps = _toConsumableArray(markersWraps); markersWraps.sort(function (a, b) { return Number(b.getAttribute('data:realIndex')) < Number(a.getAttribute('data:realIndex')) ? 0 : -1; }); var markers = []; markersWraps.forEach(function (m) { markers.push(m.querySelector('.apexcharts-marker')); }); return markers; } }, { key: "hasMarkers", value: function hasMarkers() { var markers = this.getElMarkers(); return markers.length > 0; } }, { key: "getElBars", value: function getElBars() { return this.w.globals.dom.baseEl.querySelectorAll('.apexcharts-bar-series, .apexcharts-candlestick-series, .apexcharts-rangebar-series'); } }, { key: "hasBars", value: function hasBars() { var bars = this.getElBars(); return bars.length > 0; } }, { key: "getHoverMarkerSize", value: function getHoverMarkerSize(index) { var w = this.w; var hoverSize = w.config.markers.hover.size; if (hoverSize === undefined) { hoverSize = w.globals.markers.size[index] + w.config.markers.hover.sizeOffset; } return hoverSize; } }, { key: "toggleAllTooltipSeriesGroups", value: function toggleAllTooltipSeriesGroups(state) { var w = this.w; var ttCtx = this.ttCtx; if (ttCtx.allTooltipSeriesGroups.length === 0) { ttCtx.allTooltipSeriesGroups = w.globals.dom.baseEl.querySelectorAll('.apexcharts-tooltip-series-group'); } var allTooltipSeriesGroups = ttCtx.allTooltipSeriesGroups; for (var i = 0; i < allTooltipSeriesGroups.length; i++) { if (state === 'enable') { allTooltipSeriesGroups[i].classList.add('apexcharts-active'); allTooltipSeriesGroups[i].style.display = w.config.tooltip.items.display; } else { allTooltipSeriesGroups[i].classList.remove('apexcharts-active'); allTooltipSeriesGroups[i].style.display = 'none'; } } } }]); return Utils$1; }(); /** * ApexCharts Tooltip.Labels Class to draw texts on the tooltip. * * @module Tooltip.Labels **/ var Labels = /*#__PURE__*/function () { function Labels(tooltipContext) { _classCallCheck(this, Labels); this.w = tooltipContext.w; this.ctx = tooltipContext.ctx; this.ttCtx = tooltipContext; this.tooltipUtil = new Utils$1(tooltipContext); } _createClass(Labels, [{ key: "drawSeriesTexts", value: function drawSeriesTexts(_ref) { var _ref$shared = _ref.shared, shared = _ref$shared === void 0 ? true : _ref$shared, ttItems = _ref.ttItems, _ref$i = _ref.i, i = _ref$i === void 0 ? 0 : _ref$i, _ref$j = _ref.j, j = _ref$j === void 0 ? null : _ref$j, y1 = _ref.y1, y2 = _ref.y2; var w = this.w; if (w.config.tooltip.custom !== undefined) { this.handleCustomTooltip({ i: i, j: j, y1: y1, y2: y2, w: w }); } else { this.toggleActiveInactiveSeries(shared); } var values = this.getValuesToPrint({ i: i, j: j }); this.printLabels({ i: i, j: j, values: values, ttItems: ttItems, shared: shared }); // Re-calculate tooltip dimensions now that we have drawn the text var tooltipEl = this.ttCtx.getElTooltip(); this.ttCtx.tooltipRect.ttWidth = tooltipEl.getBoundingClientRect().width; this.ttCtx.tooltipRect.ttHeight = tooltipEl.getBoundingClientRect().height; } }, { key: "printLabels", value: function printLabels(_ref2) { var _this = this; var i = _ref2.i, j = _ref2.j, values = _ref2.values, ttItems = _ref2.ttItems, shared = _ref2.shared; var w = this.w; var val; var xVal = values.xVal, zVal = values.zVal, xAxisTTVal = values.xAxisTTVal; var seriesName = ''; var pColor = w.globals.colors[i]; if (j !== null && w.config.plotOptions.bar.distributed) { pColor = w.globals.colors[j]; } var _loop = function _loop(t, inverset) { var f = _this.getFormatters(i); seriesName = _this.getSeriesName({ fn: f.yLbTitleFormatter, index: i, seriesIndex: i, j: j }); var tIndex = w.config.tooltip.inverseOrder ? inverset : t; if (w.globals.axisCharts) { var generalFormatter = function generalFormatter(index) { return f.yLbFormatter(w.globals.series[index][j], { series: w.globals.series, seriesIndex: index, dataPointIndex: j, w: w }); }; if (shared) { f = _this.getFormatters(tIndex); seriesName = _this.getSeriesName({ fn: f.yLbTitleFormatter, index: tIndex, seriesIndex: i, j: j }); pColor = w.globals.colors[tIndex]; val = generalFormatter(tIndex); } else { val = generalFormatter(i); } } // for pie / donuts if (j === null) { val = f.yLbFormatter(w.globals.series[i], w); } _this.DOMHandling({ i: i, t: tIndex, j: j, ttItems: ttItems, values: { val: val, xVal: xVal, xAxisTTVal: xAxisTTVal, zVal: zVal }, seriesName: seriesName, shared: shared, pColor: pColor }); }; for (var t = 0, inverset = w.globals.series.length - 1; t < w.globals.series.length; t++, inverset--) { _loop(t, inverset); } } }, { key: "getFormatters", value: function getFormatters(i) { var w = this.w; var yLbFormatter = w.globals.yLabelFormatters[i]; var yLbTitleFormatter; if (w.globals.ttVal !== undefined) { if (Array.isArray(w.globals.ttVal)) { yLbFormatter = w.globals.ttVal[i] && w.globals.ttVal[i].formatter; yLbTitleFormatter = w.globals.ttVal[i] && w.globals.ttVal[i].title && w.globals.ttVal[i].title.formatter; } else { yLbFormatter = w.globals.ttVal.formatter; if (typeof w.globals.ttVal.title.formatter === 'function') { yLbTitleFormatter = w.globals.ttVal.title.formatter; } } } else { yLbTitleFormatter = w.config.tooltip.y.title.formatter; } if (typeof yLbFormatter !== 'function') { if (w.globals.yLabelFormatters[0]) { yLbFormatter = w.globals.yLabelFormatters[0]; } else { yLbFormatter = function yLbFormatter(label) { return label; }; } } if (typeof yLbTitleFormatter !== 'function') { yLbTitleFormatter = function yLbTitleFormatter(label) { return label; }; } return { yLbFormatter: yLbFormatter, yLbTitleFormatter: yLbTitleFormatter }; } }, { key: "getSeriesName", value: function getSeriesName(_ref3) { var fn = _ref3.fn, index = _ref3.index, seriesIndex = _ref3.seriesIndex, j = _ref3.j; var w = this.w; return fn(String(w.globals.seriesNames[index]), { series: w.globals.series, seriesIndex: seriesIndex, dataPointIndex: j, w: w }); } }, { key: "DOMHandling", value: function DOMHandling(_ref4) { var i = _ref4.i, t = _ref4.t, j = _ref4.j, ttItems = _ref4.ttItems, values = _ref4.values, seriesName = _ref4.seriesName, shared = _ref4.shared, pColor = _ref4.pColor; var w = this.w; var ttCtx = this.ttCtx; var val = values.val, xVal = values.xVal, xAxisTTVal = values.xAxisTTVal, zVal = values.zVal; var ttItemsChildren = null; ttItemsChildren = ttItems[t].children; if (w.config.tooltip.fillSeriesColor) { // elTooltip.style.backgroundColor = pColor ttItems[t].style.backgroundColor = pColor; ttItemsChildren[0].style.display = 'none'; } if (ttCtx.showTooltipTitle) { if (ttCtx.tooltipTitle === null) { // get it once if null, and store it in class property ttCtx.tooltipTitle = w.globals.dom.baseEl.querySelector('.apexcharts-tooltip-title'); } ttCtx.tooltipTitle.innerHTML = xVal; } // if xaxis tooltip is constructed, we need to replace the innerHTML if (ttCtx.blxaxisTooltip) { ttCtx.xaxisTooltipText.innerHTML = xAxisTTVal !== '' ? xAxisTTVal : xVal; } var ttYLabel = ttItems[t].querySelector('.apexcharts-tooltip-text-label'); if (ttYLabel) { ttYLabel.innerHTML = seriesName ? seriesName + ': ' : ''; } var ttYVal = ttItems[t].querySelector('.apexcharts-tooltip-text-value'); if (ttYVal) { ttYVal.innerHTML = typeof val !== 'undefined' ? val : ''; } if (ttItemsChildren[0] && ttItemsChildren[0].classList.contains('apexcharts-tooltip-marker')) { if (w.config.tooltip.marker.fillColors && Array.isArray(w.config.tooltip.marker.fillColors)) { pColor = w.config.tooltip.marker.fillColors[i]; } ttItemsChildren[0].style.backgroundColor = pColor; } if (!w.config.tooltip.marker.show) { ttItemsChildren[0].style.display = 'none'; } if (zVal !== null) { var ttZLabel = ttItems[t].querySelector('.apexcharts-tooltip-text-z-label'); ttZLabel.innerHTML = w.config.tooltip.z.title; var ttZVal = ttItems[t].querySelector('.apexcharts-tooltip-text-z-value'); ttZVal.innerHTML = typeof zVal !== 'undefined' ? zVal : ''; } if (shared && ttItemsChildren[0]) { // hide when no Val or series collapsed if (typeof val === 'undefined' || val === null || w.globals.collapsedSeriesIndices.indexOf(t) > -1) { ttItemsChildren[0].parentNode.style.display = 'none'; } else { ttItemsChildren[0].parentNode.style.display = w.config.tooltip.items.display; } // TODO: issue #1240 needs to be looked at again. commenting it because this also hides single series values with 0 in it (shared tooltip) // if (w.globals.stackedSeriesTotals[j] === 0) { // // shared tooltip and all values are null, so we need to hide the x value too // let allYZeroForJ = false // for (let si = 1; si < w.globals.seriesYvalues.length; si++) { // if ( // w.globals.seriesYvalues[si][j] === // w.globals.seriesYvalues[si - 1][j] // ) { // allYZeroForJ = true // } // } // if (allYZeroForJ) { // ttCtx.tooltipTitle.style.display = 'none' // } else { // ttCtx.tooltipTitle.style.display = w.config.tooltip.items.display // } // } else { // ttCtx.tooltipTitle.style.display = w.config.tooltip.items.display // } } } }, { key: "toggleActiveInactiveSeries", value: function toggleActiveInactiveSeries(shared) { var w = this.w; if (shared) { // make all tooltips active this.tooltipUtil.toggleAllTooltipSeriesGroups('enable'); } else { // disable all tooltip text groups this.tooltipUtil.toggleAllTooltipSeriesGroups('disable'); // enable the first tooltip text group var firstTooltipSeriesGroup = w.globals.dom.baseEl.querySelector('.apexcharts-tooltip-series-group'); if (firstTooltipSeriesGroup) { firstTooltipSeriesGroup.classList.add('apexcharts-active'); firstTooltipSeriesGroup.style.display = w.config.tooltip.items.display; } } } }, { key: "getValuesToPrint", value: function getValuesToPrint(_ref5) { var i = _ref5.i, j = _ref5.j; var w = this.w; var filteredSeriesX = this.ctx.series.filteredSeriesX(); var xVal = ''; var xAxisTTVal = ''; var zVal = null; var val = null; var customFormatterOpts = { series: w.globals.series, seriesIndex: i, dataPointIndex: j, w: w }; var zFormatter = w.globals.ttZFormatter; if (j === null) { val = w.globals.series[i]; } else { if (w.globals.isXNumeric) { xVal = filteredSeriesX[i][j]; if (filteredSeriesX[i].length === 0) { // a series (possibly the first one) might be collapsed, so get the next active index var firstActiveSeriesIndex = this.tooltipUtil.getFirstActiveXArray(filteredSeriesX); xVal = filteredSeriesX[firstActiveSeriesIndex][j]; } } else { xVal = typeof w.globals.labels[j] !== 'undefined' ? w.globals.labels[j] : ''; } } var bufferXVal = xVal; if (w.globals.isXNumeric && w.config.xaxis.type === 'datetime') { var xFormat = new Formatters(this.ctx); xVal = xFormat.xLabelFormat(w.globals.ttKeyFormatter, bufferXVal, bufferXVal); } else { if (!w.globals.isBarHorizontal) { xVal = w.globals.xLabelFormatter(bufferXVal, customFormatterOpts); } } // override default x-axis formatter with tooltip formatter if (w.config.tooltip.x.formatter !== undefined) { xVal = w.globals.ttKeyFormatter(bufferXVal, customFormatterOpts); } if (w.globals.seriesZ.length > 0 && w.globals.seriesZ[0].length > 0) { zVal = zFormatter(w.globals.seriesZ[i][j], w); } if (typeof w.config.xaxis.tooltip.formatter === 'function') { xAxisTTVal = w.globals.xaxisTooltipFormatter(bufferXVal, customFormatterOpts); } else { xAxisTTVal = xVal; } return { val: Array.isArray(val) ? val.join(' ') : val, xVal: Array.isArray(xVal) ? xVal.join(' ') : xVal, xAxisTTVal: Array.isArray(xAxisTTVal) ? xAxisTTVal.join(' ') : xAxisTTVal, zVal: zVal }; } }, { key: "handleCustomTooltip", value: function handleCustomTooltip(_ref6) { var i = _ref6.i, j = _ref6.j, y1 = _ref6.y1, y2 = _ref6.y2, w = _ref6.w; var tooltipEl = this.ttCtx.getElTooltip(); var fn = w.config.tooltip.custom; if (Array.isArray(fn) && fn[i]) { fn = fn[i]; } // override everything with a custom html tooltip and replace it tooltipEl.innerHTML = fn({ ctx: this.ctx, series: w.globals.series, seriesIndex: i, dataPointIndex: j, y1: y1, y2: y2, w: w }); } }]); return Labels; }(); /** * ApexCharts Tooltip.Position Class to move the tooltip based on x and y position. * * @module Tooltip.Position **/ var Position = /*#__PURE__*/function () { function Position(tooltipContext) { _classCallCheck(this, Position); this.ttCtx = tooltipContext; this.ctx = tooltipContext.ctx; this.w = tooltipContext.w; } /** * This will move the crosshair (the vertical/horz line that moves along with mouse) * Along with this, this function also calls the xaxisMove function * @memberof Position * @param {int} - cx = point's x position, wherever point's x is, you need to move crosshair */ _createClass(Position, [{ key: "moveXCrosshairs", value: function moveXCrosshairs(cx) { var j = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; var ttCtx = this.ttCtx; var w = this.w; var xcrosshairs = ttCtx.getElXCrosshairs(); var x = cx - ttCtx.xcrosshairsWidth / 2; var tickAmount = w.globals.labels.slice().length; if (j !== null) { x = w.globals.gridWidth / tickAmount * j; } if (xcrosshairs !== null) { xcrosshairs.setAttribute('x', x); xcrosshairs.setAttribute('x1', x); xcrosshairs.setAttribute('x2', x); xcrosshairs.setAttribute('y2', w.globals.gridHeight); xcrosshairs.classList.add('apexcharts-active'); } if (x < 0) { x = 0; } if (x > w.globals.gridWidth) { x = w.globals.gridWidth; } if (ttCtx.blxaxisTooltip) { var tx = x; if (w.config.xaxis.crosshairs.width === 'tickWidth' || w.config.xaxis.crosshairs.width === 'barWidth') { tx = x + ttCtx.xcrosshairsWidth / 2; } this.moveXAxisTooltip(tx); } } /** * This will move the crosshair (the vertical/horz line that moves along with mouse) * Along with this, this function also calls the xaxisMove function * @memberof Position * @param {int} - cx = point's x position, wherever point's x is, you need to move crosshair */ }, { key: "moveYCrosshairs", value: function moveYCrosshairs(cy) { var ttCtx = this.ttCtx; if (ttCtx.ycrosshairs !== null) { Graphics.setAttrs(ttCtx.ycrosshairs, { y1: cy, y2: cy }); Graphics.setAttrs(ttCtx.ycrosshairsHidden, { y1: cy, y2: cy }); } } /** ** AxisTooltip is the small rectangle which appears on x axis with x value, when user moves * @memberof Position * @param {int} - cx = point's x position, wherever point's x is, you need to move */ }, { key: "moveXAxisTooltip", value: function moveXAxisTooltip(cx) { var w = this.w; var ttCtx = this.ttCtx; if (ttCtx.xaxisTooltip !== null) { ttCtx.xaxisTooltip.classList.add('apexcharts-active'); var cy = ttCtx.xaxisOffY + w.config.xaxis.tooltip.offsetY + w.globals.translateY + 1 + w.config.xaxis.offsetY; var xaxisTTText = ttCtx.xaxisTooltip.getBoundingClientRect(); var xaxisTTTextWidth = xaxisTTText.width; cx = cx - xaxisTTTextWidth / 2; if (!isNaN(cx)) { cx = cx + w.globals.translateX; var textRect = 0; var graphics = new Graphics(this.ctx); textRect = graphics.getTextRects(ttCtx.xaxisTooltipText.innerHTML); ttCtx.xaxisTooltipText.style.minWidth = textRect.width + 'px'; ttCtx.xaxisTooltip.style.left = cx + 'px'; ttCtx.xaxisTooltip.style.top = cy + 'px'; } } } }, { key: "moveYAxisTooltip", value: function moveYAxisTooltip(index) { var w = this.w; var ttCtx = this.ttCtx; if (ttCtx.yaxisTTEls === null) { ttCtx.yaxisTTEls = w.globals.dom.baseEl.querySelectorAll('.apexcharts-yaxistooltip'); } var ycrosshairsHiddenRectY1 = parseInt(ttCtx.ycrosshairsHidden.getAttribute('y1'), 10); var cy = w.globals.translateY + ycrosshairsHiddenRectY1; var yAxisTTRect = ttCtx.yaxisTTEls[index].getBoundingClientRect(); var yAxisTTHeight = yAxisTTRect.height; var cx = w.globals.translateYAxisX[index] - 2; if (w.config.yaxis[index].opposite) { cx = cx - 26; } cy = cy - yAxisTTHeight / 2; if (w.globals.ignoreYAxisIndexes.indexOf(index) === -1) { ttCtx.yaxisTTEls[index].classList.add('apexcharts-active'); ttCtx.yaxisTTEls[index].style.top = cy + 'px'; ttCtx.yaxisTTEls[index].style.left = cx + w.config.yaxis[index].tooltip.offsetX + 'px'; } else { ttCtx.yaxisTTEls[index].classList.remove('apexcharts-active'); } } /** ** moves the whole tooltip by changing x, y attrs * @memberof Position * @param {int} - cx = point's x position, wherever point's x is, you need to move tooltip * @param {int} - cy = point's y position, wherever point's y is, you need to move tooltip * @param {int} - r = point's radius */ }, { key: "moveTooltip", value: function moveTooltip(cx, cy) { var r = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; var w = this.w; var ttCtx = this.ttCtx; var tooltipEl = ttCtx.getElTooltip(); var tooltipRect = ttCtx.tooltipRect; var pointR = r !== null ? parseFloat(r) : 1; var x = parseFloat(cx) + pointR + 5; var y = parseFloat(cy) + pointR / 2; // - tooltipRect.ttHeight / 2 if (x > w.globals.gridWidth / 2) { x = x - tooltipRect.ttWidth - pointR - 15; } if (x > w.globals.gridWidth - tooltipRect.ttWidth - 10) { x = w.globals.gridWidth - tooltipRect.ttWidth; } if (x < -20) { x = -20; } if (w.config.tooltip.followCursor) { var elGrid = ttCtx.getElGrid(); var seriesBound = elGrid.getBoundingClientRect(); y = ttCtx.e.clientY + w.globals.translateY - seriesBound.top - tooltipRect.ttHeight / 2; } if (!w.config.tooltip.followCursor) { var newPositions = this.positionChecks(tooltipRect, x, y); x = newPositions.x; y = newPositions.y; } if (!isNaN(x)) { x = x + w.globals.translateX; tooltipEl.style.left = x + 'px'; tooltipEl.style.top = y + 'px'; } } }, { key: "positionChecks", value: function positionChecks(tooltipRect, x, y) { var w = this.w; if (tooltipRect.ttHeight / 2 + y > w.globals.gridHeight) { y = w.globals.gridHeight - tooltipRect.ttHeight + w.globals.translateY; } if (y < 0) { y = 0; } return { x: x, y: y }; } }, { key: "moveMarkers", value: function moveMarkers(i, j) { var w = this.w; var ttCtx = this.ttCtx; if (w.globals.markers.size[i] > 0) { var allPoints = w.globals.dom.baseEl.querySelectorAll(" .apexcharts-series[data\\:realIndex='".concat(i, "'] .apexcharts-marker")); for (var p = 0; p < allPoints.length; p++) { if (parseInt(allPoints[p].getAttribute('rel'), 10) === j) { ttCtx.marker.resetPointsSize(); ttCtx.marker.enlargeCurrentPoint(j, allPoints[p]); } } } else { ttCtx.marker.resetPointsSize(); this.moveDynamicPointOnHover(j, i); } } // This function is used when you need to show markers/points only on hover - // DIFFERENT X VALUES in multiple series }, { key: "moveDynamicPointOnHover", value: function moveDynamicPointOnHover(j, capturedSeries) { var w = this.w; var ttCtx = this.ttCtx; var cx = 0; var cy = 0; var pointsArr = w.globals.pointsArray; var hoverSize = ttCtx.tooltipUtil.getHoverMarkerSize(capturedSeries); var serType = w.config.series[capturedSeries].type; if (serType && (serType === 'column' || serType === 'candlestick')) { // fix error mentioned in #811 return; } cx = pointsArr[capturedSeries][j][0]; cy = pointsArr[capturedSeries][j][1] ? pointsArr[capturedSeries][j][1] : 0; var point = w.globals.dom.baseEl.querySelector(".apexcharts-series[data\\:realIndex='".concat(capturedSeries, "'] .apexcharts-series-markers circle")); if (point) { point.setAttribute('r', hoverSize); point.setAttribute('cx', cx); point.setAttribute('cy', cy); } // point.style.opacity = w.config.markers.hover.opacity this.moveXCrosshairs(cx); if (!ttCtx.fixedTooltip) { this.moveTooltip(cx, cy, hoverSize); } } // This function is used when you need to show markers/points only on hover - // SAME X VALUES in multiple series }, { key: "moveDynamicPointsOnHover", value: function moveDynamicPointsOnHover(j) { var ttCtx = this.ttCtx; var w = ttCtx.w; var cx = 0; var cy = 0; var activeSeries = 0; var pointsArr = w.globals.pointsArray; var series = new Series(this.ctx); activeSeries = series.getActiveConfigSeriesIndex(true); var hoverSize = ttCtx.tooltipUtil.getHoverMarkerSize(activeSeries); if (pointsArr[activeSeries]) { cx = pointsArr[activeSeries][j][0]; cy = pointsArr[activeSeries][j][1]; } var points = ttCtx.tooltipUtil.getAllMarkers(); if (points !== null) { for (var p = 0; p < w.globals.series.length; p++) { var pointArr = pointsArr[p]; if (w.globals.comboCharts) { // in a combo chart, if column charts are present, markers will not match with the number of series, hence this patch to push a null value in points array if (typeof pointArr === 'undefined') { // nodelist to array points.splice(p, 0, null); } } if (pointArr && pointArr.length) { var pcy = pointsArr[p][j][1]; points[p].setAttribute('cx', cx); if (pcy !== null && !isNaN(pcy)) { points[p] && points[p].setAttribute('r', hoverSize); points[p] && points[p].setAttribute('cy', pcy); } else { points[p] && points[p].setAttribute('r', 0); } } } } this.moveXCrosshairs(cx); if (!ttCtx.fixedTooltip) { var tcy = cy || w.globals.gridHeight; this.moveTooltip(cx, tcy, hoverSize); } } }, { key: "moveStickyTooltipOverBars", value: function moveStickyTooltipOverBars(j) { var w = this.w; var ttCtx = this.ttCtx; var barLen = w.globals.columnSeries ? w.globals.columnSeries.length : w.globals.series.length; var i = barLen >= 2 && barLen % 2 === 0 ? Math.floor(barLen / 2) : Math.floor(barLen / 2) + 1; var jBar = w.globals.dom.baseEl.querySelector(".apexcharts-bar-series .apexcharts-series[rel='".concat(i, "'] path[j='").concat(j, "'], .apexcharts-candlestick-series .apexcharts-series[rel='").concat(i, "'] path[j='").concat(j, "'], .apexcharts-rangebar-series .apexcharts-series[rel='").concat(i, "'] path[j='").concat(j, "']")); var bcx = jBar ? parseFloat(jBar.getAttribute('cx')) : 0; var bcy = 0; var bw = jBar ? parseFloat(jBar.getAttribute('barWidth')) : 0; if (w.globals.isXNumeric) { bcx = bcx - (barLen % 2 !== 0 ? bw / 2 : 0); } else { bcx = ttCtx.xAxisTicksPositions[j - 1] + ttCtx.dataPointsDividedWidth / 2; if (isNaN(bcx)) { bcx = ttCtx.xAxisTicksPositions[j] - ttCtx.dataPointsDividedWidth / 2; } } // tooltip will move vertically along with mouse as it is a shared tooltip var elGrid = ttCtx.getElGrid(); var seriesBound = elGrid.getBoundingClientRect(); bcy = ttCtx.e.clientY - seriesBound.top - ttCtx.tooltipRect.ttHeight / 2; this.moveXCrosshairs(bcx); if (!ttCtx.fixedTooltip) { var tcy = bcy || w.globals.gridHeight; this.moveTooltip(bcx, tcy); } } }]); return Position; }(); /** * ApexCharts Tooltip.Marker Class to draw texts on the tooltip. * * @module Tooltip.Marker **/ var Marker = /*#__PURE__*/function () { function Marker(tooltipContext) { _classCallCheck(this, Marker); this.w = tooltipContext.w; this.ttCtx = tooltipContext; this.ctx = tooltipContext.ctx; this.tooltipPosition = new Position(tooltipContext); } _createClass(Marker, [{ key: "drawDynamicPoints", value: function drawDynamicPoints() { var w = this.w; var graphics = new Graphics(this.ctx); var marker = new Markers(this.ctx); var elsSeries = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series'); elsSeries = _toConsumableArray(elsSeries); elsSeries.sort(function (a, b) { return Number(b.getAttribute('data:realIndex')) < Number(a.getAttribute('data:realIndex')) ? 0 : -1; }); for (var i = 0; i < elsSeries.length; i++) { var pointsMain = elsSeries[i].querySelector(".apexcharts-series-markers-wrap"); if (pointsMain !== null) { // it can be null as we have tooltips in donut/bar charts var point = void 0; var PointClasses = "apexcharts-marker w".concat((Math.random() + 1).toString(36).substring(4)); if ((w.config.chart.type === 'line' || w.config.chart.type === 'area') && !w.globals.comboCharts && !w.config.tooltip.intersect) { PointClasses += ' no-pointer-events'; } var elPointOptions = marker.getMarkerConfig(PointClasses, i); point = graphics.drawMarker(0, 0, elPointOptions); point.node.setAttribute('default-marker-size', 0); var elPointsG = document.createElementNS(w.globals.SVGNS, 'g'); elPointsG.classList.add('apexcharts-series-markers'); elPointsG.appendChild(point.node); pointsMain.appendChild(elPointsG); } } } }, { key: "enlargeCurrentPoint", value: function enlargeCurrentPoint(rel, point) { var x = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; var y = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; var w = this.w; if (w.config.chart.type !== 'bubble') { this.newPointSize(rel, point); } var cx = point.getAttribute('cx'); var cy = point.getAttribute('cy'); if (x !== null && y !== null) { cx = x; cy = y; } this.tooltipPosition.moveXCrosshairs(cx); if (!this.fixedTooltip) { if (w.config.chart.type === 'radar') { var elGrid = this.ttCtx.getElGrid(); var seriesBound = elGrid.getBoundingClientRect(); cx = this.ttCtx.e.clientX - seriesBound.left; } this.tooltipPosition.moveTooltip(cx, cy, w.config.markers.hover.size); } } }, { key: "enlargePoints", value: function enlargePoints(j) { var w = this.w; var me = this; var ttCtx = this.ttCtx; var col = j; var points = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series:not(.apexcharts-series-collapsed) .apexcharts-marker'); var newSize = w.config.markers.hover.size; for (var p = 0; p < points.length; p++) { var rel = points[p].getAttribute('rel'); var index = points[p].getAttribute('index'); if (newSize === undefined) { newSize = w.globals.markers.size[index] + w.config.markers.hover.sizeOffset; } if (col === parseInt(rel, 10)) { me.newPointSize(col, points[p]); var cx = points[p].getAttribute('cx'); var cy = points[p].getAttribute('cy'); me.tooltipPosition.moveXCrosshairs(cx); if (!ttCtx.fixedTooltip) { me.tooltipPosition.moveTooltip(cx, cy, newSize); } } else { me.oldPointSize(points[p]); } } } }, { key: "newPointSize", value: function newPointSize(rel, point) { var w = this.w; var newSize = w.config.markers.hover.size; var elPoint = rel === 0 ? point.parentNode.firstChild : point.parentNode.lastChild; if (elPoint.getAttribute('default-marker-size') !== '0') { var index = parseInt(elPoint.getAttribute('index'), 10); if (newSize === undefined) { newSize = w.globals.markers.size[index] + w.config.markers.hover.sizeOffset; } elPoint.setAttribute('r', newSize); } } }, { key: "oldPointSize", value: function oldPointSize(point) { var size = parseFloat(point.getAttribute('default-marker-size')); point.setAttribute('r', size); } }, { key: "resetPointsSize", value: function resetPointsSize() { var w = this.w; var points = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series:not(.apexcharts-series-collapsed) .apexcharts-marker'); for (var p = 0; p < points.length; p++) { var size = parseFloat(points[p].getAttribute('default-marker-size')); if (Utils.isNumber(size)) { points[p].setAttribute('r', size); } else { points[p].setAttribute('r', 0); } } } }]); return Marker; }(); /** * ApexCharts Tooltip.Intersect Class. * * @module Tooltip.Intersect **/ var Intersect = /*#__PURE__*/function () { function Intersect(tooltipContext) { _classCallCheck(this, Intersect); this.w = tooltipContext.w; this.ttCtx = tooltipContext; } _createClass(Intersect, [{ key: "getAttr", value: function getAttr(e, attr) { return parseFloat(e.target.getAttribute(attr)); } }, { key: "handleHeatTooltip", value: function handleHeatTooltip(_ref) { var e = _ref.e, opt = _ref.opt, x = _ref.x, y = _ref.y; var ttCtx = this.ttCtx; var w = this.w; if (e.target.classList.contains('apexcharts-heatmap-rect')) { var i = this.getAttr(e, 'i'); var j = this.getAttr(e, 'j'); var cx = this.getAttr(e, 'cx'); var cy = this.getAttr(e, 'cy'); var width = this.getAttr(e, 'width'); var height = this.getAttr(e, 'height'); ttCtx.tooltipLabels.drawSeriesTexts({ ttItems: opt.ttItems, i: i, j: j, shared: false }); w.globals.capturedSeriesIndex = i; w.globals.capturedDataPointIndex = j; x = cx + ttCtx.tooltipRect.ttWidth / 2 + width; y = cy + ttCtx.tooltipRect.ttHeight / 2 - height / 2; ttCtx.tooltipPosition.moveXCrosshairs(cx + width / 2); if (x > w.globals.gridWidth / 2) { x = cx - ttCtx.tooltipRect.ttWidth / 2 + width; } if (ttCtx.w.config.tooltip.followCursor) { var elGrid = ttCtx.getElGrid(); var seriesBound = elGrid.getBoundingClientRect(); // x = ttCtx.e.clientX - seriesBound.left y = ttCtx.e.clientY - seriesBound.top + w.globals.translateY / 2 - 10; } } return { x: x, y: y }; } }, { key: "handleMarkerTooltip", value: function handleMarkerTooltip(_ref2) { var e = _ref2.e, opt = _ref2.opt, x = _ref2.x, y = _ref2.y; var w = this.w; var ttCtx = this.ttCtx; var i; var j; if (e.target.classList.contains('apexcharts-marker')) { var cx = parseInt(opt.paths.getAttribute('cx'), 10); var cy = parseInt(opt.paths.getAttribute('cy'), 10); var val = parseFloat(opt.paths.getAttribute('val')); j = parseInt(opt.paths.getAttribute('rel'), 10); i = parseInt(opt.paths.parentNode.parentNode.parentNode.getAttribute('rel'), 10) - 1; if (ttCtx.intersect) { var el = Utils.findAncestor(opt.paths, 'apexcharts-series'); if (el) { i = parseInt(el.getAttribute('data:realIndex'), 10); } } ttCtx.tooltipLabels.drawSeriesTexts({ ttItems: opt.ttItems, i: i, j: j, shared: ttCtx.showOnIntersect ? false : w.config.tooltip.shared }); if (e.type === 'mouseup') { ttCtx.markerClick(e, i, j); } w.globals.capturedSeriesIndex = i; w.globals.capturedDataPointIndex = j; x = cx; y = cy + w.globals.translateY - ttCtx.tooltipRect.ttHeight * 1.4; if (ttCtx.w.config.tooltip.followCursor) { var elGrid = ttCtx.getElGrid(); var seriesBound = elGrid.getBoundingClientRect(); y = ttCtx.e.clientY + w.globals.translateY - seriesBound.top; } if (val < 0) { y = cy; } ttCtx.marker.enlargeCurrentPoint(j, opt.paths, x, y); } return { x: x, y: y }; } }, { key: "handleBarTooltip", value: function handleBarTooltip(_ref3) { var e = _ref3.e, opt = _ref3.opt; var w = this.w; var ttCtx = this.ttCtx; var tooltipEl = ttCtx.getElTooltip(); var bx = 0; var x = 0; var y = 0; var i = 0; var strokeWidth; var barXY = this.getBarTooltipXY({ e: e, opt: opt }); i = barXY.i; var barHeight = barXY.barHeight; var j = barXY.j; w.globals.capturedSeriesIndex = i; w.globals.capturedDataPointIndex = j; if (w.globals.isBarHorizontal && ttCtx.tooltipUtil.hasBars() || !w.config.tooltip.shared) { x = barXY.x; y = barXY.y; strokeWidth = Array.isArray(w.config.stroke.width) ? w.config.stroke.width[i] : w.config.stroke.width; bx = x; } else { if (!w.globals.comboCharts && !w.config.tooltip.shared) { bx = bx / 2; } } // y is NaN, make it touch the bottom of grid area if (isNaN(y)) { y = w.globals.svgHeight - ttCtx.tooltipRect.ttHeight; } else if (y < 0) { y = 0; } if (x + ttCtx.tooltipRect.ttWidth > w.globals.gridWidth) { x = x - ttCtx.tooltipRect.ttWidth; } else if (x < 0) { x = 0; } if (ttCtx.w.config.tooltip.followCursor) { var elGrid = ttCtx.getElGrid(); var seriesBound = elGrid.getBoundingClientRect(); y = ttCtx.e.clientY - seriesBound.top; } // if tooltip is still null, querySelector if (ttCtx.tooltip === null) { ttCtx.tooltip = w.globals.dom.baseEl.querySelector('.apexcharts-tooltip'); } if (!w.config.tooltip.shared) { if (w.globals.comboBarCount > 0) { ttCtx.tooltipPosition.moveXCrosshairs(bx + strokeWidth / 2); } else { ttCtx.tooltipPosition.moveXCrosshairs(bx); } } // move tooltip here if (!ttCtx.fixedTooltip && (!w.config.tooltip.shared || w.globals.isBarHorizontal && ttCtx.tooltipUtil.hasBars())) { var isReversed = w.globals.isMultipleYAxis ? w.config.yaxis[seriesIndex] && w.config.yaxis[seriesIndex].reversed : w.config.yaxis[0].reversed; if (isReversed) { x = x - ttCtx.tooltipRect.ttWidth; if (x < 0) { x = 0; } } tooltipEl.style.left = x + w.globals.translateX + 'px'; var seriesIndex = parseInt(opt.paths.parentNode.getAttribute('data:realIndex'), 10); if (isReversed && !(w.globals.isBarHorizontal && ttCtx.tooltipUtil.hasBars())) { y = y + barHeight - (w.globals.series[i][j] < 0 ? barHeight : 0) * 2; } if (ttCtx.tooltipRect.ttHeight + y > w.globals.gridHeight) { y = w.globals.gridHeight - ttCtx.tooltipRect.ttHeight + w.globals.translateY; tooltipEl.style.top = y + 'px'; } else { tooltipEl.style.top = y + w.globals.translateY - ttCtx.tooltipRect.ttHeight / 2 + 'px'; } } } }, { key: "getBarTooltipXY", value: function getBarTooltipXY(_ref4) { var e = _ref4.e, opt = _ref4.opt; var w = this.w; var j = null; var ttCtx = this.ttCtx; var i = 0; var x = 0; var y = 0; var barWidth = 0; var barHeight = 0; var cl = e.target.classList; if (cl.contains('apexcharts-bar-area') || cl.contains('apexcharts-candlestick-area') || cl.contains('apexcharts-rangebar-area')) { var bar = e.target; var barRect = bar.getBoundingClientRect(); var seriesBound = opt.elGrid.getBoundingClientRect(); var bh = barRect.height; barHeight = barRect.height; var bw = barRect.width; var cx = parseInt(bar.getAttribute('cx'), 10); var cy = parseInt(bar.getAttribute('cy'), 10); barWidth = parseFloat(bar.getAttribute('barWidth')); var clientX = e.type === 'touchmove' ? e.touches[0].clientX : e.clientX; j = parseInt(bar.getAttribute('j'), 10); i = parseInt(bar.parentNode.getAttribute('rel'), 10) - 1; var y1 = bar.getAttribute('data-range-y1'); var y2 = bar.getAttribute('data-range-y2'); if (w.globals.comboCharts) { i = parseInt(bar.parentNode.getAttribute('data:realIndex'), 10); } // if (w.config.tooltip.shared) { // this check not needed at the moment // const yDivisor = w.globals.gridHeight / (w.globals.series.length) // const hoverY = ttCtx.clientY - ttCtx.seriesBound.top // j = Math.ceil(hoverY / yDivisor) // } ttCtx.tooltipLabels.drawSeriesTexts({ ttItems: opt.ttItems, i: i, j: j, y1: y1 ? parseInt(y1, 10) : null, y2: y2 ? parseInt(y2, 10) : null, shared: ttCtx.showOnIntersect ? false : w.config.tooltip.shared }); if (w.config.tooltip.followCursor) { if (w.globals.isBarHorizontal) { x = clientX - seriesBound.left + 15; y = cy - ttCtx.dataPointsDividedHeight + bh / 2 - ttCtx.tooltipRect.ttHeight / 2; } else { if (w.globals.isXNumeric) { x = cx - bw / 2; } else { x = cx - ttCtx.dataPointsDividedWidth + bw / 2; } y = e.clientY - seriesBound.top - ttCtx.tooltipRect.ttHeight / 2 - 15; } } else { if (w.globals.isBarHorizontal) { x = cx; if (x < ttCtx.xyRatios.baseLineInvertedY) { x = cx - ttCtx.tooltipRect.ttWidth; } y = cy - ttCtx.dataPointsDividedHeight + bh / 2 - ttCtx.tooltipRect.ttHeight / 2; } else { // if columns if (w.globals.isXNumeric) { x = cx - bw / 2; } else { x = cx - ttCtx.dataPointsDividedWidth + bw / 2; } y = cy; // - ttCtx.tooltipRect.ttHeight / 2 + 10 } } } return { x: x, y: y, barHeight: barHeight, barWidth: barWidth, i: i, j: j }; } }]); return Intersect; }(); /** * ApexCharts Tooltip.AxesTooltip Class. * * @module Tooltip.AxesTooltip **/ var AxesTooltip = /*#__PURE__*/function () { function AxesTooltip(tooltipContext) { _classCallCheck(this, AxesTooltip); this.w = tooltipContext.w; this.ttCtx = tooltipContext; } /** * This method adds the secondary tooltip which appears below x axis * @memberof Tooltip **/ _createClass(AxesTooltip, [{ key: "drawXaxisTooltip", value: function drawXaxisTooltip() { var w = this.w; var ttCtx = this.ttCtx; var isBottom = w.config.xaxis.position === 'bottom'; ttCtx.xaxisOffY = isBottom ? w.globals.gridHeight + 1 : -w.globals.xAxisHeight - w.config.xaxis.axisTicks.height + 3; var tooltipCssClass = isBottom ? 'apexcharts-xaxistooltip apexcharts-xaxistooltip-bottom' : 'apexcharts-xaxistooltip apexcharts-xaxistooltip-top'; var renderTo = w.globals.dom.elWrap; if (ttCtx.blxaxisTooltip) { var xaxisTooltip = w.globals.dom.baseEl.querySelector('.apexcharts-xaxistooltip'); if (xaxisTooltip === null) { ttCtx.xaxisTooltip = document.createElement('div'); ttCtx.xaxisTooltip.setAttribute('class', tooltipCssClass + ' apexcharts-theme-' + w.config.tooltip.theme); renderTo.appendChild(ttCtx.xaxisTooltip); ttCtx.xaxisTooltipText = document.createElement('div'); ttCtx.xaxisTooltipText.classList.add('apexcharts-xaxistooltip-text'); ttCtx.xaxisTooltipText.style.fontFamily = w.config.xaxis.tooltip.style.fontFamily || w.config.chart.fontFamily; ttCtx.xaxisTooltipText.style.fontSize = w.config.xaxis.tooltip.style.fontSize; ttCtx.xaxisTooltip.appendChild(ttCtx.xaxisTooltipText); } } } /** * This method adds the secondary tooltip which appears below x axis * @memberof Tooltip **/ }, { key: "drawYaxisTooltip", value: function drawYaxisTooltip() { var w = this.w; var ttCtx = this.ttCtx; var _loop = function _loop(i) { var isRight = w.config.yaxis[i].opposite || w.config.yaxis[i].crosshairs.opposite; ttCtx.yaxisOffX = isRight ? w.globals.gridWidth + 1 : 1; var tooltipCssClass = isRight ? "apexcharts-yaxistooltip apexcharts-yaxistooltip-".concat(i, " apexcharts-yaxistooltip-right") : "apexcharts-yaxistooltip apexcharts-yaxistooltip-".concat(i, " apexcharts-yaxistooltip-left"); w.globals.yAxisSameScaleIndices.map(function (samescales, ssi) { samescales.map(function (s, si) { if (si === i) { tooltipCssClass += w.config.yaxis[si].show ? " " : " apexcharts-yaxistooltip-hidden"; } }); }); var renderTo = w.globals.dom.elWrap; if (ttCtx.blyaxisTooltip) { var yaxisTooltip = w.globals.dom.baseEl.querySelector(".apexcharts-yaxistooltip apexcharts-yaxistooltip-".concat(i)); if (yaxisTooltip === null) { ttCtx.yaxisTooltip = document.createElement('div'); ttCtx.yaxisTooltip.setAttribute('class', tooltipCssClass + ' apexcharts-theme-' + w.config.tooltip.theme); renderTo.appendChild(ttCtx.yaxisTooltip); if (i === 0) ttCtx.yaxisTooltipText = []; ttCtx.yaxisTooltipText.push(document.createElement('div')); ttCtx.yaxisTooltipText[i].classList.add('apexcharts-yaxistooltip-text'); ttCtx.yaxisTooltip.appendChild(ttCtx.yaxisTooltipText[i]); } } }; for (var i = 0; i < w.config.yaxis.length; i++) { _loop(i); } } /** * @memberof Tooltip **/ }, { key: "setXCrosshairWidth", value: function setXCrosshairWidth() { var w = this.w; var ttCtx = this.ttCtx; // set xcrosshairs width var xcrosshairs = ttCtx.getElXCrosshairs(); ttCtx.xcrosshairsWidth = parseInt(w.config.xaxis.crosshairs.width, 10); if (!w.globals.comboCharts) { if (w.config.xaxis.crosshairs.width === 'tickWidth') { var count = w.globals.labels.length; ttCtx.xcrosshairsWidth = w.globals.gridWidth / count; } else if (w.config.xaxis.crosshairs.width === 'barWidth') { var bar = w.globals.dom.baseEl.querySelector('.apexcharts-bar-area'); if (bar !== null) { var barWidth = parseFloat(bar.getAttribute('barWidth')); ttCtx.xcrosshairsWidth = barWidth; } else { ttCtx.xcrosshairsWidth = 1; } } } else { var _bar = w.globals.dom.baseEl.querySelector('.apexcharts-bar-area'); if (_bar !== null && w.config.xaxis.crosshairs.width === 'barWidth') { var _barWidth = parseFloat(_bar.getAttribute('barWidth')); ttCtx.xcrosshairsWidth = _barWidth; } else { if (w.config.xaxis.crosshairs.width === 'tickWidth') { var _count = w.globals.labels.length; ttCtx.xcrosshairsWidth = w.globals.gridWidth / _count; } } } if (w.globals.isBarHorizontal) { ttCtx.xcrosshairsWidth = 0; } if (xcrosshairs !== null && ttCtx.xcrosshairsWidth > 0) { xcrosshairs.setAttribute('width', ttCtx.xcrosshairsWidth); } } }, { key: "handleYCrosshair", value: function handleYCrosshair() { var w = this.w; var ttCtx = this.ttCtx; // set ycrosshairs height ttCtx.ycrosshairs = w.globals.dom.baseEl.querySelector('.apexcharts-ycrosshairs'); ttCtx.ycrosshairsHidden = w.globals.dom.baseEl.querySelector('.apexcharts-ycrosshairs-hidden'); } }, { key: "drawYaxisTooltipText", value: function drawYaxisTooltipText(index, clientY, xyRatios) { var ttCtx = this.ttCtx; var w = this.w; var lbFormatter = w.globals.yLabelFormatters[index]; if (ttCtx.blyaxisTooltip) { var elGrid = ttCtx.getElGrid(); var seriesBound = elGrid.getBoundingClientRect(); var hoverY = (clientY - seriesBound.top) * xyRatios.yRatio[index]; var height = w.globals.maxYArr[index] - w.globals.minYArr[index]; var val = w.globals.minYArr[index] + (height - hoverY); ttCtx.tooltipPosition.moveYCrosshairs(clientY - seriesBound.top); ttCtx.yaxisTooltipText[index].innerHTML = lbFormatter(val); ttCtx.tooltipPosition.moveYAxisTooltip(index); } } }]); return AxesTooltip; }(); /** * ApexCharts Core Tooltip Class to handle the tooltip generation. * * @module Tooltip **/ var Tooltip = /*#__PURE__*/function () { function Tooltip(ctx) { _classCallCheck(this, Tooltip); this.ctx = ctx; this.w = ctx.w; var w = this.w; this.tConfig = w.config.tooltip; this.tooltipUtil = new Utils$1(this); this.tooltipLabels = new Labels(this); this.tooltipPosition = new Position(this); this.marker = new Marker(this); this.intersect = new Intersect(this); this.axesTooltip = new AxesTooltip(this); this.showOnIntersect = this.tConfig.intersect; this.showTooltipTitle = this.tConfig.x.show; this.fixedTooltip = this.tConfig.fixed.enabled; this.xaxisTooltip = null; this.yaxisTTEls = null; this.isBarShared = !w.globals.isBarHorizontal && this.tConfig.shared; } _createClass(Tooltip, [{ key: "getElTooltip", value: function getElTooltip(ctx) { if (!ctx) ctx = this; return ctx.w.globals.dom.baseEl.querySelector('.apexcharts-tooltip'); } }, { key: "getElXCrosshairs", value: function getElXCrosshairs() { return this.w.globals.dom.baseEl.querySelector('.apexcharts-xcrosshairs'); } }, { key: "getElGrid", value: function getElGrid() { return this.w.globals.dom.baseEl.querySelector('.apexcharts-grid'); } }, { key: "drawTooltip", value: function drawTooltip(xyRatios) { var w = this.w; this.xyRatios = xyRatios; this.blxaxisTooltip = w.config.xaxis.tooltip.enabled && w.globals.axisCharts; this.blyaxisTooltip = w.config.yaxis[0].tooltip.enabled && w.globals.axisCharts; this.allTooltipSeriesGroups = []; if (!w.globals.axisCharts) { this.showTooltipTitle = false; } var tooltipEl = document.createElement('div'); tooltipEl.classList.add('apexcharts-tooltip'); tooltipEl.classList.add("apexcharts-theme-".concat(this.tConfig.theme)); w.globals.dom.elWrap.appendChild(tooltipEl); if (w.globals.axisCharts) { this.axesTooltip.drawXaxisTooltip(); this.axesTooltip.drawYaxisTooltip(); this.axesTooltip.setXCrosshairWidth(); this.axesTooltip.handleYCrosshair(); var xAxis = new XAxis(this.ctx); this.xAxisTicksPositions = xAxis.getXAxisTicksPositions(); } // we forcefully set intersect true for these conditions if ((w.globals.comboCharts || this.tConfig.intersect || w.config.chart.type === 'bar' || w.config.chart.type === 'rangeBar') && !this.tConfig.shared) { this.showOnIntersect = true; } if (w.config.markers.size === 0 || w.globals.markers.largestSize === 0) { // when user don't want to show points all the time, but only on when hovering on series this.marker.drawDynamicPoints(this); } // no visible series, exit if (w.globals.collapsedSeries.length === w.globals.series.length) return; this.dataPointsDividedHeight = w.globals.gridHeight / w.globals.dataPoints; this.dataPointsDividedWidth = w.globals.gridWidth / w.globals.dataPoints; if (this.showTooltipTitle) { this.tooltipTitle = document.createElement('div'); this.tooltipTitle.classList.add('apexcharts-tooltip-title'); this.tooltipTitle.style.fontFamily = this.tConfig.style.fontFamily || w.config.chart.fontFamily; this.tooltipTitle.style.fontSize = this.tConfig.style.fontSize; tooltipEl.appendChild(this.tooltipTitle); } var ttItemsCnt = w.globals.series.length; // whether shared or not, default is shared if ((w.globals.xyCharts || w.globals.comboCharts) && this.tConfig.shared) { if (!this.showOnIntersect) { ttItemsCnt = w.globals.series.length; } else { ttItemsCnt = 1; } } this.legendLabels = w.globals.dom.baseEl.querySelectorAll('.apexcharts-legend-text'); this.ttItems = this.createTTElements(ttItemsCnt); this.addSVGEvents(); } }, { key: "createTTElements", value: function createTTElements(ttItemsCnt) { var w = this.w; var ttItems = []; var tooltipEl = this.getElTooltip(); for (var i = 0; i < ttItemsCnt; i++) { var gTxt = document.createElement('div'); gTxt.classList.add('apexcharts-tooltip-series-group'); if (this.tConfig.shared && this.tConfig.enabledOnSeries && Array.isArray(this.tConfig.enabledOnSeries)) { if (this.tConfig.enabledOnSeries.indexOf(i) < 0) { gTxt.classList.add('apexcharts-tooltip-series-group-hidden'); } } var point = document.createElement('span'); point.classList.add('apexcharts-tooltip-marker'); point.style.backgroundColor = w.globals.colors[i]; gTxt.appendChild(point); var gYZ = document.createElement('div'); gYZ.classList.add('apexcharts-tooltip-text'); gYZ.style.fontFamily = this.tConfig.style.fontFamily || w.config.chart.fontFamily; gYZ.style.fontSize = this.tConfig.style.fontSize; // y values group var gYValText = document.createElement('div'); gYValText.classList.add('apexcharts-tooltip-y-group'); var txtLabel = document.createElement('span'); txtLabel.classList.add('apexcharts-tooltip-text-label'); gYValText.appendChild(txtLabel); var txtValue = document.createElement('span'); txtValue.classList.add('apexcharts-tooltip-text-value'); gYValText.appendChild(txtValue); // z values group var gZValText = document.createElement('div'); gZValText.classList.add('apexcharts-tooltip-z-group'); var txtZLabel = document.createElement('span'); txtZLabel.classList.add('apexcharts-tooltip-text-z-label'); gZValText.appendChild(txtZLabel); var txtZValue = document.createElement('span'); txtZValue.classList.add('apexcharts-tooltip-text-z-value'); gZValText.appendChild(txtZValue); gYZ.appendChild(gYValText); gYZ.appendChild(gZValText); gTxt.appendChild(gYZ); tooltipEl.appendChild(gTxt); ttItems.push(gTxt); } return ttItems; } }, { key: "addSVGEvents", value: function addSVGEvents() { var w = this.w; var type = w.config.chart.type; var tooltipEl = this.getElTooltip(); var commonBar = !!(type === 'bar' || type === 'candlestick' || type === 'rangeBar'); var chartWithmarkers = type === 'area' || type === 'line' || type === 'scatter' || type === 'bubble' || type === 'radar'; var hoverArea = w.globals.dom.Paper.node; var elGrid = this.getElGrid(); if (elGrid) { this.seriesBound = elGrid.getBoundingClientRect(); } var tooltipY = []; var tooltipX = []; var seriesHoverParams = { hoverArea: hoverArea, elGrid: elGrid, tooltipEl: tooltipEl, tooltipY: tooltipY, tooltipX: tooltipX, ttItems: this.ttItems }; var points; if (w.globals.axisCharts) { if (chartWithmarkers) { points = w.globals.dom.baseEl.querySelectorAll(".apexcharts-series[data\\:longestSeries='true'] .apexcharts-marker"); } else if (commonBar) { points = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series .apexcharts-bar-area, .apexcharts-series .apexcharts-candlestick-area, .apexcharts-series .apexcharts-rangebar-area'); } else if (type === 'heatmap') { points = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series .apexcharts-heatmap'); } if (points && points.length) { for (var p = 0; p < points.length; p++) { tooltipY.push(points[p].getAttribute('cy')); tooltipX.push(points[p].getAttribute('cx')); } } } var validSharedChartTypes = w.globals.xyCharts && !this.showOnIntersect || w.globals.comboCharts && !this.showOnIntersect || commonBar && this.tooltipUtil.hasBars() && this.tConfig.shared; if (validSharedChartTypes) { this.addPathsEventListeners([hoverArea], seriesHoverParams); } else if (commonBar && !w.globals.comboCharts || chartWithmarkers && this.showOnIntersect) { this.addDatapointEventsListeners(seriesHoverParams); } else if (!w.globals.axisCharts || type === 'heatmap') { var seriesAll = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series'); this.addPathsEventListeners(seriesAll, seriesHoverParams); } if (this.showOnIntersect) { var lineAreaPoints = w.globals.dom.baseEl.querySelectorAll('.apexcharts-line-series .apexcharts-marker, .apexcharts-area-series .apexcharts-marker'); if (lineAreaPoints.length > 0) { // if we find any lineSeries, addEventListeners for them this.addPathsEventListeners(lineAreaPoints, seriesHoverParams); } // combo charts may have bars, so add event listeners here too if (this.tooltipUtil.hasBars() && !this.tConfig.shared) { this.addDatapointEventsListeners(seriesHoverParams); } } } }, { key: "drawFixedTooltipRect", value: function drawFixedTooltipRect() { var w = this.w; var tooltipEl = this.getElTooltip(); var tooltipRect = tooltipEl.getBoundingClientRect(); var ttWidth = tooltipRect.width + 10; var ttHeight = tooltipRect.height + 10; var x = this.tConfig.fixed.offsetX; var y = this.tConfig.fixed.offsetY; var fixed = this.tConfig.fixed.position.toLowerCase(); if (fixed.indexOf('right') > -1) { x = x + w.globals.svgWidth - ttWidth + 10; } if (fixed.indexOf('bottom') > -1) { y = y + w.globals.svgHeight - ttHeight - 10; } tooltipEl.style.left = x + 'px'; tooltipEl.style.top = y + 'px'; return { x: x, y: y, ttWidth: ttWidth, ttHeight: ttHeight }; } }, { key: "addDatapointEventsListeners", value: function addDatapointEventsListeners(seriesHoverParams) { var w = this.w; var points = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series-markers .apexcharts-marker, .apexcharts-bar-area, .apexcharts-candlestick-area, .apexcharts-rangebar-area'); this.addPathsEventListeners(points, seriesHoverParams); } }, { key: "addPathsEventListeners", value: function addPathsEventListeners(paths, opts) { var self = this; var _loop = function _loop(p) { var extendedOpts = { paths: paths[p], tooltipEl: opts.tooltipEl, tooltipY: opts.tooltipY, tooltipX: opts.tooltipX, elGrid: opts.elGrid, hoverArea: opts.hoverArea, ttItems: opts.ttItems }; var events = ['mousemove', 'mouseup', 'touchmove', 'mouseout', 'touchend']; events.map(function (ev) { return paths[p].addEventListener(ev, self.seriesHover.bind(self, extendedOpts), { capture: false, passive: true }); }); }; for (var p = 0; p < paths.length; p++) { _loop(p); } } /* ** The actual series hover function */ }, { key: "seriesHover", value: function seriesHover(opt, e) { var _this = this; var chartGroups = []; var w = this.w; // if user has more than one charts in group, we need to sync if (w.config.chart.group) { chartGroups = this.ctx.getGroupedCharts(); } if (w.globals.axisCharts && (w.globals.minX === -Infinity && w.globals.maxX === Infinity || w.globals.dataPoints === 0)) { return; } if (chartGroups.length) { chartGroups.forEach(function (ch) { var tooltipEl = _this.getElTooltip(ch); var newOpts = { paths: opt.paths, tooltipEl: tooltipEl, tooltipY: opt.tooltipY, tooltipX: opt.tooltipX, elGrid: opt.elGrid, hoverArea: opt.hoverArea, ttItems: ch.w.globals.tooltip.ttItems }; // all the charts should have the same minX and maxX (same xaxis) for multiple tooltips to work correctly if (ch.w.globals.minX === _this.w.globals.minX && ch.w.globals.maxX === _this.w.globals.maxX) { ch.w.globals.tooltip.seriesHoverByContext({ chartCtx: ch, ttCtx: ch.w.globals.tooltip, opt: newOpts, e: e }); } }); } else { this.seriesHoverByContext({ chartCtx: this.ctx, ttCtx: this.w.globals.tooltip, opt: opt, e: e }); } } }, { key: "seriesHoverByContext", value: function seriesHoverByContext(_ref) { var chartCtx = _ref.chartCtx, ttCtx = _ref.ttCtx, opt = _ref.opt, e = _ref.e; var w = chartCtx.w; var tooltipEl = this.getElTooltip(); // tooltipRect is calculated on every mousemove, because the text is dynamic ttCtx.tooltipRect = { x: 0, y: 0, ttWidth: tooltipEl.getBoundingClientRect().width, ttHeight: tooltipEl.getBoundingClientRect().height }; ttCtx.e = e; // highlight the current hovered bars if (ttCtx.tooltipUtil.hasBars() && !w.globals.comboCharts && !ttCtx.isBarShared) { if (this.tConfig.onDatasetHover.highlightDataSeries) { var series = new Series(chartCtx); series.toggleSeriesOnHover(e, e.target.parentNode); } } if (ttCtx.fixedTooltip) { ttCtx.drawFixedTooltipRect(); } if (w.globals.axisCharts) { ttCtx.axisChartsTooltips({ e: e, opt: opt, tooltipRect: ttCtx.tooltipRect }); } else { // non-plot charts i.e pie/donut/circle ttCtx.nonAxisChartsTooltips({ e: e, opt: opt, tooltipRect: ttCtx.tooltipRect }); } } // tooltip handling for line/area/bar/columns/scatter }, { key: "axisChartsTooltips", value: function axisChartsTooltips(_ref2) { var e = _ref2.e, opt = _ref2.opt; var w = this.w; var x, y; var seriesBound = opt.elGrid.getBoundingClientRect(); var clientX = e.type === 'touchmove' ? e.touches[0].clientX : e.clientX; var clientY = e.type === 'touchmove' ? e.touches[0].clientY : e.clientY; this.clientY = clientY; this.clientX = clientX; w.globals.capturedSeriesIndex = -1; w.globals.capturedDataPointIndex = -1; if (clientY < seriesBound.top || clientY > seriesBound.top + seriesBound.height) { this.handleMouseOut(opt); return; } if (Array.isArray(this.tConfig.enabledOnSeries) && !w.config.tooltip.shared) { var index = parseInt(opt.paths.getAttribute('index'), 10); if (this.tConfig.enabledOnSeries.indexOf(index) < 0) { this.handleMouseOut(opt); return; } } var tooltipEl = this.getElTooltip(); var xcrosshairs = this.getElXCrosshairs(); var isStickyTooltip = w.globals.xyCharts || w.config.chart.type === 'bar' && !w.globals.isBarHorizontal && this.tooltipUtil.hasBars() && this.tConfig.shared || w.globals.comboCharts && this.tooltipUtil.hasBars(); if (w.globals.isBarHorizontal && this.tooltipUtil.hasBars()) { isStickyTooltip = false; } if (e.type === 'mousemove' || e.type === 'touchmove' || e.type === 'mouseup') { if (xcrosshairs !== null) { xcrosshairs.classList.add('apexcharts-active'); } if (this.ycrosshairs !== null && this.blyaxisTooltip) { this.ycrosshairs.classList.add('apexcharts-active'); } if (isStickyTooltip && !this.showOnIntersect) { this.handleStickyTooltip(e, clientX, clientY, opt); } else { if (w.config.chart.type === 'heatmap') { var markerXY = this.intersect.handleHeatTooltip({ e: e, opt: opt, x: x, y: y }); x = markerXY.x; y = markerXY.y; tooltipEl.style.left = x + 'px'; tooltipEl.style.top = y + 'px'; } else { if (this.tooltipUtil.hasBars()) { this.intersect.handleBarTooltip({ e: e, opt: opt }); } if (this.tooltipUtil.hasMarkers()) { // intersect - line/area/scatter/bubble this.intersect.handleMarkerTooltip({ e: e, opt: opt, x: x, y: y }); } } } if (this.blyaxisTooltip) { for (var yt = 0; yt < w.config.yaxis.length; yt++) { this.axesTooltip.drawYaxisTooltipText(yt, clientY, this.xyRatios); } } opt.tooltipEl.classList.add('apexcharts-active'); } else if (e.type === 'mouseout' || e.type === 'touchend') { this.handleMouseOut(opt); } } // tooltip handling for pie/donuts }, { key: "nonAxisChartsTooltips", value: function nonAxisChartsTooltips(_ref3) { var e = _ref3.e, opt = _ref3.opt, tooltipRect = _ref3.tooltipRect; var w = this.w; var rel = opt.paths.getAttribute('rel'); var tooltipEl = this.getElTooltip(); var seriesBound = w.globals.dom.elWrap.getBoundingClientRect(); if (e.type === 'mousemove' || e.type === 'touchmove') { tooltipEl.classList.add('apexcharts-active'); this.tooltipLabels.drawSeriesTexts({ ttItems: opt.ttItems, i: parseInt(rel, 10) - 1, shared: false }); var x = w.globals.clientX - seriesBound.left - tooltipRect.ttWidth / 2; var y = w.globals.clientY - seriesBound.top - tooltipRect.ttHeight - 10; tooltipEl.style.left = x + 'px'; tooltipEl.style.top = y + 'px'; } else if (e.type === 'mouseout' || e.type === 'touchend') { tooltipEl.classList.remove('apexcharts-active'); } } }, { key: "handleStickyTooltip", value: function handleStickyTooltip(e, clientX, clientY, opt) { var w = this.w; var capj = this.tooltipUtil.getNearestValues({ context: this, hoverArea: opt.hoverArea, elGrid: opt.elGrid, clientX: clientX, clientY: clientY }); var j = capj.j; var capturedSeries = capj.capturedSeries; if (capj.hoverX < 0 || capj.hoverX > w.globals.gridWidth) { this.handleMouseOut(opt); return; } if (capturedSeries !== null) { this.handleStickyCapturedSeries(e, capturedSeries, opt, j); } else { // couldn't capture any series. check if shared X is same, // if yes, draw a grouped tooltip if (this.tooltipUtil.isXoverlap(j)) { this.create(e, this, 0, j, opt.ttItems); } } } }, { key: "handleStickyCapturedSeries", value: function handleStickyCapturedSeries(e, capturedSeries, opt, j) { var w = this.w; var ignoreNull = w.globals.series[capturedSeries][j] === null; if (ignoreNull) { this.handleMouseOut(opt); return; } if (typeof w.globals.series[capturedSeries][j] !== 'undefined') { if (this.tConfig.shared && this.tooltipUtil.isXoverlap(j) && this.tooltipUtil.isInitialSeriesSameLen()) { this.create(e, this, capturedSeries, j, opt.ttItems); } else { this.create(e, this, capturedSeries, j, opt.ttItems, false); } } else { if (this.tooltipUtil.isXoverlap(j)) { this.create(e, this, 0, j, opt.ttItems); } } } }, { key: "deactivateHoverFilter", value: function deactivateHoverFilter() { var w = this.w; var graphics = new Graphics(this.ctx); var allPaths = w.globals.dom.Paper.select(".apexcharts-bar-area"); for (var b = 0; b < allPaths.length; b++) { graphics.pathMouseLeave(allPaths[b]); } } }, { key: "handleMouseOut", value: function handleMouseOut(opt) { var w = this.w; var xcrosshairs = this.getElXCrosshairs(); opt.tooltipEl.classList.remove('apexcharts-active'); this.deactivateHoverFilter(); if (w.config.chart.type !== 'bubble') { this.marker.resetPointsSize(); } if (xcrosshairs !== null) { xcrosshairs.classList.remove('apexcharts-active'); } if (this.ycrosshairs !== null) { this.ycrosshairs.classList.remove('apexcharts-active'); } if (this.blxaxisTooltip) { this.xaxisTooltip.classList.remove('apexcharts-active'); } if (this.blyaxisTooltip) { if (this.yaxisTTEls === null) { this.yaxisTTEls = w.globals.dom.baseEl.querySelectorAll('.apexcharts-yaxistooltip'); } for (var i = 0; i < this.yaxisTTEls.length; i++) { this.yaxisTTEls[i].classList.remove('apexcharts-active'); } } if (w.config.legend.tooltipHoverFormatter) { this.legendLabels.forEach(function (l) { var defaultText = l.getAttribute('data:default-text'); l.innerHTML = decodeURIComponent(defaultText); }); } } }, { key: "markerClick", value: function markerClick(e, seriesIndex, dataPointIndex) { var w = this.w; if (typeof w.config.chart.events.markerClick === 'function') { w.config.chart.events.markerClick(e, this.ctx, { seriesIndex: seriesIndex, dataPointIndex: dataPointIndex, w: w }); } this.ctx.events.fireEvent('markerClick', [e, this.ctx, { seriesIndex: seriesIndex, dataPointIndex: dataPointIndex, w: w }]); } }, { key: "create", value: function create(e, context, capturedSeries, j, ttItems) { var shared = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : null; var w = this.w; var ttCtx = context; if (e.type === 'mouseup') { this.markerClick(e, capturedSeries, j); } if (shared === null) shared = this.tConfig.shared; var hasMarkers = this.tooltipUtil.hasMarkers(); var bars = this.tooltipUtil.getElBars(); if (w.config.legend.tooltipHoverFormatter) { var legendFormatter = w.config.legend.tooltipHoverFormatter; var els = Array.from(this.legendLabels); // reset all legend values first els.forEach(function (l) { var legendName = l.getAttribute('data:default-text'); l.innerHTML = decodeURIComponent(legendName); }); // for irregular time series for (var i = 0; i < els.length; i++) { var l = els[i]; var lsIndex = parseInt(l.getAttribute('i'), 10); var legendName = decodeURIComponent(l.getAttribute('data:default-text')); var text = legendFormatter(legendName, { seriesIndex: shared ? lsIndex : capturedSeries, dataPointIndex: j, w: w }); if (!shared) { l.innerHTML = lsIndex === capturedSeries ? text : legendName; if (capturedSeries === lsIndex) { break; } } else { l.innerHTML = w.globals.collapsedSeriesIndices.indexOf(lsIndex) < 0 ? text : legendName; } } } if (shared) { ttCtx.tooltipLabels.drawSeriesTexts({ ttItems: ttItems, i: capturedSeries, j: j, shared: this.showOnIntersect ? false : this.tConfig.shared }); if (hasMarkers) { if (w.globals.markers.largestSize > 0) { ttCtx.marker.enlargePoints(j); } else { ttCtx.tooltipPosition.moveDynamicPointsOnHover(j); } } if (this.tooltipUtil.hasBars()) { this.barSeriesHeight = this.tooltipUtil.getBarsHeight(bars); if (this.barSeriesHeight > 0) { // hover state, activate snap filter var graphics = new Graphics(this.ctx); var paths = w.globals.dom.Paper.select(".apexcharts-bar-area[j='".concat(j, "']")); // de-activate first this.deactivateHoverFilter(); this.tooltipPosition.moveStickyTooltipOverBars(j); for (var b = 0; b < paths.length; b++) { graphics.pathMouseEnter(paths[b]); } } } } else { ttCtx.tooltipLabels.drawSeriesTexts({ shared: false, ttItems: ttItems, i: capturedSeries, j: j }); if (this.tooltipUtil.hasBars()) { ttCtx.tooltipPosition.moveStickyTooltipOverBars(j); } if (hasMarkers) { ttCtx.tooltipPosition.moveMarkers(capturedSeries, j); } } } }]); return Tooltip; }(); var BarDataLabels = /*#__PURE__*/function () { function BarDataLabels(barCtx) { _classCallCheck(this, BarDataLabels); this.w = barCtx.w; this.barCtx = barCtx; } /** handleBarDataLabels is used to calculate the positions for the data-labels * It also sets the element's data attr for bars and calls drawCalculatedBarDataLabels() * After calculating, it also calls the function to draw data labels * @memberof Bar * @param {object} {barProps} most of the bar properties used throughout the bar * drawing function * @return {object} dataLabels node-element which you can append later **/ _createClass(BarDataLabels, [{ key: "handleBarDataLabels", value: function handleBarDataLabels(opts) { var x = opts.x, y = opts.y, y1 = opts.y1, y2 = opts.y2, i = opts.i, j = opts.j, realIndex = opts.realIndex, series = opts.series, barHeight = opts.barHeight, barWidth = opts.barWidth, barYPosition = opts.barYPosition, visibleSeries = opts.visibleSeries, renderedPath = opts.renderedPath; var w = this.w; var graphics = new Graphics(this.barCtx.ctx); var strokeWidth = Array.isArray(this.barCtx.strokeWidth) ? this.barCtx.strokeWidth[realIndex] : this.barCtx.strokeWidth; var bcx = x + parseFloat(barWidth * visibleSeries); var bcy = y + parseFloat(barHeight * visibleSeries); if (w.globals.isXNumeric && !w.globals.isBarHorizontal) { bcx = x + parseFloat(barWidth * (visibleSeries + 1)); bcy = y + parseFloat(barHeight * (visibleSeries + 1)) - strokeWidth; } var dataLabels = null; var dataLabelsX = x; var dataLabelsY = y; var dataLabelsPos = {}; var dataLabelsConfig = w.config.dataLabels; var barDataLabelsConfig = this.barCtx.barOptions.dataLabels; if (typeof barYPosition !== 'undefined' && this.barCtx.isTimelineBar) { bcy = barYPosition; dataLabelsY = barYPosition; } var offX = dataLabelsConfig.offsetX; var offY = dataLabelsConfig.offsetY; var textRects = { width: 0, height: 0 }; if (w.config.dataLabels.enabled) { textRects = graphics.getTextRects(w.globals.yLabelFormatters[0](w.globals.maxY), parseFloat(dataLabelsConfig.style.fontSize)); } var params = { x: x, y: y, i: i, j: j, renderedPath: renderedPath, bcx: bcx, bcy: bcy, barHeight: barHeight, barWidth: barWidth, textRects: textRects, strokeWidth: strokeWidth, dataLabelsX: dataLabelsX, dataLabelsY: dataLabelsY, barDataLabelsConfig: barDataLabelsConfig, offX: offX, offY: offY }; if (this.barCtx.isHorizontal) { dataLabelsPos = this.calculateBarsDataLabelsPosition(params); } else { dataLabelsPos = this.calculateColumnsDataLabelsPosition(params); } renderedPath.attr({ cy: dataLabelsPos.bcy, cx: dataLabelsPos.bcx, j: j, val: series[i][j], barHeight: barHeight, barWidth: barWidth }); dataLabels = this.drawCalculatedDataLabels({ x: dataLabelsPos.dataLabelsX, y: dataLabelsPos.dataLabelsY, val: this.barCtx.isTimelineBar ? [y1, y2] : series[i][j], i: realIndex, j: j, barWidth: barWidth, barHeight: barHeight, textRects: textRects, dataLabelsConfig: dataLabelsConfig }); return dataLabels; } }, { key: "calculateColumnsDataLabelsPosition", value: function calculateColumnsDataLabelsPosition(opts) { var w = this.w; var i = opts.i, j = opts.j, y = opts.y, bcx = opts.bcx, barWidth = opts.barWidth, barHeight = opts.barHeight, textRects = opts.textRects, dataLabelsY = opts.dataLabelsY, barDataLabelsConfig = opts.barDataLabelsConfig, strokeWidth = opts.strokeWidth, offX = opts.offX, offY = opts.offY; var dataLabelsX; barHeight = Math.abs(barHeight); var vertical = w.config.plotOptions.bar.dataLabels.orientation === 'vertical'; bcx = bcx - strokeWidth / 2; var dataPointsDividedWidth = w.globals.gridWidth / w.globals.dataPoints; if (w.globals.isXNumeric) { dataLabelsX = bcx - barWidth / 2 + offX; } else { dataLabelsX = bcx - dataPointsDividedWidth + barWidth / 2 + offX; } if (vertical) { var offsetDLX = 2; dataLabelsX = dataLabelsX + textRects.height / 2 - strokeWidth / 2 - offsetDLX; } var valIsNegative = this.barCtx.series[i][j] < 0; if (this.barCtx.isReversed) { y = y - barHeight; } switch (barDataLabelsConfig.position) { case 'center': if (vertical) { if (valIsNegative) { dataLabelsY = y + barHeight / 2 + offY; } else { dataLabelsY = y + barHeight / 2 - offY; } } else { if (valIsNegative) { dataLabelsY = y + barHeight / 2 + textRects.height / 2 + offY; } else { dataLabelsY = y + barHeight / 2 + textRects.height / 2 - offY; } } break; case 'bottom': if (vertical) { if (valIsNegative) { dataLabelsY = y + barHeight + offY; } else { dataLabelsY = y + barHeight - offY; } } else { if (valIsNegative) { dataLabelsY = y + barHeight + textRects.height + strokeWidth + offY; } else { dataLabelsY = y + barHeight - textRects.height / 2 + strokeWidth - offY; } } break; case 'top': if (vertical) { if (valIsNegative) { dataLabelsY = y + offY; } else { dataLabelsY = y - offY; } } else { if (valIsNegative) { dataLabelsY = y - textRects.height / 2 - offY; } else { dataLabelsY = y + textRects.height + offY; } } break; } if (!w.config.chart.stacked) { if (dataLabelsY < 0) { dataLabelsY = 0 + strokeWidth; } else if (dataLabelsY + textRects.height / 3 > w.globals.gridHeight) { dataLabelsY = w.globals.gridHeight - strokeWidth; } } return { bcx: bcx, bcy: y, dataLabelsX: dataLabelsX, dataLabelsY: dataLabelsY }; } }, { key: "calculateBarsDataLabelsPosition", value: function calculateBarsDataLabelsPosition(opts) { var w = this.w; var x = opts.x, i = opts.i, j = opts.j, bcy = opts.bcy, barHeight = opts.barHeight, barWidth = opts.barWidth, textRects = opts.textRects, dataLabelsX = opts.dataLabelsX, strokeWidth = opts.strokeWidth, barDataLabelsConfig = opts.barDataLabelsConfig, offX = opts.offX, offY = opts.offY; var dataPointsDividedHeight = w.globals.gridHeight / w.globals.dataPoints; barWidth = Math.abs(barWidth); var dataLabelsY = bcy - (this.barCtx.isTimelineBar ? 0 : dataPointsDividedHeight) + barHeight / 2 + textRects.height / 2 + offY - 3; var valIsNegative = this.barCtx.series[i][j] < 0; var newX = x; if (this.barCtx.isReversed) { newX = x + barWidth; x = w.globals.gridWidth - barWidth; } switch (barDataLabelsConfig.position) { case 'center': if (valIsNegative) { dataLabelsX = newX - barWidth / 2 - offX; } else { dataLabelsX = newX - barWidth / 2 + offX; } break; case 'bottom': if (valIsNegative) { dataLabelsX = newX + barWidth - strokeWidth - Math.round(textRects.width / 2) - offX; } else { dataLabelsX = newX - barWidth + strokeWidth + Math.round(textRects.width / 2) + offX; } break; case 'top': if (valIsNegative) { dataLabelsX = newX - strokeWidth + Math.round(textRects.width / 2) - offX; } else { dataLabelsX = newX - strokeWidth - Math.round(textRects.width / 2) + offX; } break; } if (!w.config.chart.stacked) { if (dataLabelsX < 0) { dataLabelsX = dataLabelsX + textRects.width + strokeWidth; } else if (dataLabelsX + textRects.width / 2 > w.globals.gridWidth) { dataLabelsX = w.globals.gridWidth - textRects.width - strokeWidth; } } return { bcx: x, bcy: bcy, dataLabelsX: dataLabelsX, dataLabelsY: dataLabelsY }; } }, { key: "drawCalculatedDataLabels", value: function drawCalculatedDataLabels(_ref) { var x = _ref.x, y = _ref.y, val = _ref.val, i = _ref.i, j = _ref.j, textRects = _ref.textRects, barHeight = _ref.barHeight, barWidth = _ref.barWidth, dataLabelsConfig = _ref.dataLabelsConfig; var w = this.w; var rotate = 'rotate(0)'; if (w.config.plotOptions.bar.dataLabels.orientation === 'vertical') rotate = "rotate(-90, ".concat(x, ", ").concat(y, ")"); var dataLabels = new DataLabels(this.barCtx.ctx); var graphics = new Graphics(this.barCtx.ctx); var formatter = dataLabelsConfig.formatter; var elDataLabelsWrap = null; var isSeriesNotCollapsed = w.globals.collapsedSeriesIndices.indexOf(i) > -1; if (dataLabelsConfig.enabled && !isSeriesNotCollapsed) { elDataLabelsWrap = graphics.group({ class: 'apexcharts-data-labels', transform: rotate }); var text = ''; if (typeof val !== 'undefined') { text = formatter(val, { seriesIndex: i, dataPointIndex: j, w: w }); } if (val === 0 && w.config.chart.stacked) { // in a stacked bar/column chart, 0 value should be neglected as it will overlap on the next element text = ''; } var valIsNegative = w.globals.series[i][j] <= 0; var position = w.config.plotOptions.bar.dataLabels.position; if (w.config.plotOptions.bar.dataLabels.orientation === 'vertical') { if (position === 'top') { if (valIsNegative) dataLabelsConfig.textAnchor = 'end';else dataLabelsConfig.textAnchor = 'start'; } if (position === 'center') { dataLabelsConfig.textAnchor = 'middle'; } if (position === 'bottom') { if (valIsNegative) dataLabelsConfig.textAnchor = 'end';else dataLabelsConfig.textAnchor = 'start'; } } if (this.barCtx.isTimelineBar && this.barCtx.barOptions.dataLabels.hideOverflowingLabels) { // hide the datalabel if it cannot fit into the rect var txRect = graphics.getTextRects(text, parseFloat(dataLabelsConfig.style.fontSize)); if (barWidth < txRect.width) { text = ''; } } if (w.config.chart.stacked && this.barCtx.barOptions.dataLabels.hideOverflowingLabels) { // if there is not enough space to draw the label in the bar/column rect, check hideOverflowingLabels property to prevent overflowing on wrong rect // Note: This issue is only seen in stacked charts if (this.barCtx.isHorizontal) { barWidth = Math.abs(w.globals.series[i][j]) / this.barCtx.invertedYRatio[this.barCtx.yaxisIndex]; // FIXED: Don't always hide the stacked negative side label // A negative value will result in a negative bar width // Only hide the text when the width is smaller (a higher negative number) than the negative bar width. if (barWidth > 0 && textRects.width / 1.6 > barWidth || barWidth < 0 && textRects.width / 1.6 < barWidth) { text = ''; } } else { barHeight = Math.abs(w.globals.series[i][j]) / this.barCtx.yRatio[this.barCtx.yaxisIndex]; if (textRects.height / 1.6 > barHeight) { text = ''; } } } var modifiedDataLabelsConfig = _objectSpread2({}, dataLabelsConfig); if (this.barCtx.isHorizontal) { if (val < 0) { if (dataLabelsConfig.textAnchor === 'start') { modifiedDataLabelsConfig.textAnchor = 'end'; } else if (dataLabelsConfig.textAnchor === 'end') { modifiedDataLabelsConfig.textAnchor = 'start'; } } } dataLabels.plotDataLabelsText({ x: x, y: y, text: text, i: i, j: j, parent: elDataLabelsWrap, dataLabelsConfig: modifiedDataLabelsConfig, alwaysDrawDataLabel: true, offsetCorrection: true }); } return elDataLabelsWrap; } }]); return BarDataLabels; }(); var Helpers$3 = /*#__PURE__*/function () { function Helpers(barCtx) { _classCallCheck(this, Helpers); this.w = barCtx.w; this.barCtx = barCtx; } _createClass(Helpers, [{ key: "initVariables", value: function initVariables(series) { var w = this.w; this.barCtx.series = series; this.barCtx.totalItems = 0; this.barCtx.seriesLen = 0; this.barCtx.visibleI = -1; // visible Series this.barCtx.visibleItems = 1; // number of visible bars after user zoomed in/out for (var sl = 0; sl < series.length; sl++) { if (series[sl].length > 0) { this.barCtx.seriesLen = this.barCtx.seriesLen + 1; this.barCtx.totalItems += series[sl].length; } if (w.globals.isXNumeric) { // get max visible items for (var j = 0; j < series[sl].length; j++) { if (w.globals.seriesX[sl][j] > w.globals.minX && w.globals.seriesX[sl][j] < w.globals.maxX) { this.barCtx.visibleItems++; } } } else { this.barCtx.visibleItems = w.globals.dataPoints; } } if (this.barCtx.seriesLen === 0) { // A small adjustment when combo charts are used this.barCtx.seriesLen = 1; } } }, { key: "initialPositions", value: function initialPositions() { var w = this.w; var x, y, yDivision, xDivision, barHeight, barWidth, zeroH, zeroW; var dataPoints = w.globals.dataPoints; if (this.barCtx.isTimelineBar) { // timeline rangebar chart dataPoints = w.globals.labels.length; } if (this.barCtx.isHorizontal) { // height divided into equal parts yDivision = w.globals.gridHeight / dataPoints; barHeight = yDivision / this.barCtx.seriesLen; if (w.globals.isXNumeric) { yDivision = w.globals.gridHeight / this.barCtx.totalItems; barHeight = yDivision / this.barCtx.seriesLen; } barHeight = barHeight * parseInt(this.barCtx.barOptions.barHeight, 10) / 100; zeroW = this.barCtx.baseLineInvertedY + w.globals.padHorizontal + (this.barCtx.isReversed ? w.globals.gridWidth : 0) - (this.barCtx.isReversed ? this.barCtx.baseLineInvertedY * 2 : 0); y = (yDivision - barHeight * this.barCtx.seriesLen) / 2; } else { // width divided into equal parts xDivision = w.globals.gridWidth / this.barCtx.visibleItems; if (w.config.xaxis.convertedCatToNumeric) { xDivision = w.globals.gridWidth / w.globals.dataPoints; } barWidth = xDivision / this.barCtx.seriesLen * parseInt(this.barCtx.barOptions.columnWidth, 10) / 100; if (w.globals.isXNumeric) { // max barwidth should be equal to minXDiff to avoid overlap var xRatio = this.barCtx.xRatio; if (w.config.xaxis.convertedCatToNumeric) { xRatio = this.barCtx.initialXRatio; } if (w.globals.minXDiff && w.globals.minXDiff / xRatio > 0) { xDivision = w.globals.minXDiff / xRatio; } barWidth = xDivision / this.barCtx.seriesLen * parseInt(this.barCtx.barOptions.columnWidth, 10) / 100; if (barWidth < 1) { barWidth = 1; } } zeroH = w.globals.gridHeight - this.barCtx.baseLineY[this.barCtx.yaxisIndex] - (this.barCtx.isReversed ? w.globals.gridHeight : 0) + (this.barCtx.isReversed ? this.barCtx.baseLineY[this.barCtx.yaxisIndex] * 2 : 0); x = w.globals.padHorizontal + (xDivision - barWidth * this.barCtx.seriesLen) / 2; } return { x: x, y: y, yDivision: yDivision, xDivision: xDivision, barHeight: barHeight, barWidth: barWidth, zeroH: zeroH, zeroW: zeroW }; } }, { key: "getPathFillColor", value: function getPathFillColor(series, i, j, realIndex) { var w = this.w; var fill = new Fill(this.barCtx.ctx); var fillColor = null; var seriesNumber = this.barCtx.barOptions.distributed ? j : i; if (this.barCtx.barOptions.colors.ranges.length > 0) { var colorRange = this.barCtx.barOptions.colors.ranges; colorRange.map(function (range) { if (series[i][j] >= range.from && series[i][j] <= range.to) { fillColor = range.color; } }); } if (w.config.series[i].data[j] && w.config.series[i].data[j].fillColor) { fillColor = w.config.series[i].data[j].fillColor; } var pathFill = fill.fillPath({ seriesNumber: this.barCtx.barOptions.distributed ? seriesNumber : realIndex, dataPointIndex: j, color: fillColor, value: series[i][j] }); return pathFill; } }, { key: "getStrokeWidth", value: function getStrokeWidth(i, j, realIndex) { var strokeWidth = 0; var w = this.w; if (typeof this.barCtx.series[i][j] === 'undefined' || this.barCtx.series[i][j] === null) { this.barCtx.isNullValue = true; } else { this.barCtx.isNullValue = false; } if (w.config.stroke.show) { if (!this.barCtx.isNullValue) { strokeWidth = Array.isArray(this.barCtx.strokeWidth) ? this.barCtx.strokeWidth[realIndex] : this.barCtx.strokeWidth; } } return strokeWidth; } }, { key: "barBackground", value: function barBackground(_ref) { var bc = _ref.bc, i = _ref.i, x1 = _ref.x1, x2 = _ref.x2, y1 = _ref.y1, y2 = _ref.y2, elSeries = _ref.elSeries; var w = this.w; var graphics = new Graphics(this.barCtx.ctx); var sr = new Series(this.barCtx.ctx); var activeSeriesIndex = sr.getActiveConfigSeriesIndex(); if (this.barCtx.barOptions.colors.backgroundBarColors.length > 0 && activeSeriesIndex === i) { if (bc >= this.barCtx.barOptions.colors.backgroundBarColors.length) { bc = 0; } var bcolor = this.barCtx.barOptions.colors.backgroundBarColors[bc]; var rect = graphics.drawRect(typeof x1 !== 'undefined' ? x1 : 0, typeof y1 !== 'undefined' ? y1 : 0, typeof x2 !== 'undefined' ? x2 : w.globals.gridWidth, typeof y2 !== 'undefined' ? y2 : w.globals.gridHeight, this.barCtx.barOptions.colors.backgroundBarRadius, bcolor, this.barCtx.barOptions.colors.backgroundBarOpacity); elSeries.add(rect); rect.node.classList.add('apexcharts-backgroundBar'); } } }, { key: "getColumnPaths", value: function getColumnPaths(_ref2) { var barWidth = _ref2.barWidth, barXPosition = _ref2.barXPosition, yRatio = _ref2.yRatio, y1 = _ref2.y1, y2 = _ref2.y2, strokeWidth = _ref2.strokeWidth, series = _ref2.series, realIndex = _ref2.realIndex, i = _ref2.i, j = _ref2.j, w = _ref2.w; var graphics = new Graphics(this.barCtx.ctx); strokeWidth = Array.isArray(strokeWidth) ? strokeWidth[realIndex] : strokeWidth; if (!strokeWidth) strokeWidth = 0; var shapeOpts = { barWidth: barWidth, strokeWidth: strokeWidth, yRatio: yRatio, barXPosition: barXPosition, y1: y1, y2: y2 }; var newPath = this.getRoundedBars(w, shapeOpts, series, i, j); var x1 = barXPosition; var x2 = barXPosition + barWidth; var pathTo = graphics.move(x1, newPath.y1); var pathFrom = graphics.move(x1, newPath.y1); if (w.globals.previousPaths.length > 0) { pathFrom = this.barCtx.getPreviousPath(realIndex, j, false); } pathTo = pathTo + graphics.line(x1, newPath.y2) + newPath.endingPath + graphics.line(x2 - strokeWidth, newPath.y2) + graphics.line(x2 - strokeWidth, newPath.y1) + newPath.startingPath + 'z'; pathFrom = pathFrom + graphics.line(x1, y1) + graphics.line(x2 - strokeWidth, y1) + graphics.line(x2 - strokeWidth, y1) + graphics.line(x2 - strokeWidth, y1) + graphics.line(x1, y1); return { pathTo: pathTo, pathFrom: pathFrom }; } }, { key: "getBarpaths", value: function getBarpaths(_ref3) { var barYPosition = _ref3.barYPosition, barHeight = _ref3.barHeight, x1 = _ref3.x1, x2 = _ref3.x2, strokeWidth = _ref3.strokeWidth, series = _ref3.series, realIndex = _ref3.realIndex, i = _ref3.i, j = _ref3.j, w = _ref3.w; var graphics = new Graphics(this.barCtx.ctx); strokeWidth = Array.isArray(strokeWidth) ? strokeWidth[realIndex] : strokeWidth; if (!strokeWidth) strokeWidth = 0; var shapeOpts = { barHeight: barHeight, strokeWidth: strokeWidth, barYPosition: barYPosition, x2: x2, x1: x1 }; var newPath = this.getRoundedBars(w, shapeOpts, series, i, j); var pathTo = graphics.move(newPath.x1, barYPosition); var pathFrom = graphics.move(newPath.x1, barYPosition); if (w.globals.previousPaths.length > 0) { pathFrom = this.barCtx.getPreviousPath(realIndex, j, false); } var y1 = barYPosition; var y2 = barYPosition + barHeight; pathTo = pathTo + graphics.line(newPath.x2, y1) + newPath.endingPath + graphics.line(newPath.x2, y2 - strokeWidth) + graphics.line(newPath.x1, y2 - strokeWidth) + newPath.startingPath + 'z'; pathFrom = pathFrom + graphics.line(x1, y1) + graphics.line(x1, y2 - strokeWidth) + graphics.line(x1, y2 - strokeWidth) + graphics.line(x1, y2 - strokeWidth) + graphics.line(x1, y1); return { pathTo: pathTo, pathFrom: pathFrom }; } /** getRoundedBars draws border radius for bars/columns * @memberof Bar * @param {object} w - chart context * @param {object} opts - consists several properties like barHeight/barWidth * @param {array} series - global primary series * @param {int} i - current iterating series's index * @param {int} j - series's j of i * @return {object} endingPath - ending shape path string * startingPath - starting shape path string * newY/newX - which is calculated from existing x/y based on rounded border **/ }, { key: "getRoundedBars", value: function getRoundedBars(w, opts, series, i, j) { var graphics = new Graphics(this.barCtx.ctx); var strokeWidth = Array.isArray(opts.strokeWidth) ? opts.strokeWidth[i] : opts.strokeWidth; if (!strokeWidth) strokeWidth = 0; if (this.barCtx.isHorizontal) { var endingShape = null; var startingShape = ''; var x2 = opts.x2; var x1 = opts.x1; if (typeof series[i][j] !== 'undefined' || series[i][j] !== null) { var inverse = series[i][j] < 0; var eX = opts.barHeight / 2 - strokeWidth; if (inverse) eX = -opts.barHeight / 2 - strokeWidth; if (eX > Math.abs(x2 - x1)) { eX = Math.abs(x2 - x1); } if (this.barCtx.barOptions.endingShape === 'rounded') { x2 = opts.x2 - eX / 2; } if (this.barCtx.barOptions.startingShape === 'rounded') { x1 = opts.x1 + eX / 2; } switch (this.barCtx.barOptions.endingShape) { case 'flat': endingShape = graphics.line(x2, opts.barYPosition + opts.barHeight - strokeWidth); break; case 'rounded': endingShape = graphics.quadraticCurve(x2 + eX, opts.barYPosition + (opts.barHeight - strokeWidth) / 2, x2, opts.barYPosition + opts.barHeight - strokeWidth); break; } switch (this.barCtx.barOptions.startingShape) { case 'flat': startingShape = graphics.line(x1, opts.barYPosition + opts.barHeight - strokeWidth); break; case 'rounded': startingShape = graphics.quadraticCurve(x1 - eX, opts.barYPosition + opts.barHeight / 2, x1, opts.barYPosition); break; } } return { endingPath: endingShape, startingPath: startingShape, x2: x2, x1: x1 }; } else { var _endingShape = null; var _startingShape = ''; var y2 = opts.y2; var y1 = opts.y1; if (typeof series[i][j] !== 'undefined' || series[i][j] !== null) { var _inverse = series[i][j] < 0; var eY = opts.barWidth / 2 - strokeWidth; if (_inverse) eY = -opts.barWidth / 2 - strokeWidth; if (eY > Math.abs(y2 - y1)) { eY = Math.abs(y2 - y1); } if (this.barCtx.barOptions.endingShape === 'rounded') { // the shape exceeds the chart height, hence reduce y y2 = y2 + eY / 2; } if (this.barCtx.barOptions.startingShape === 'rounded') { y1 = y1 - eY / 2; } switch (this.barCtx.barOptions.endingShape) { case 'flat': _endingShape = graphics.line(opts.barXPosition + opts.barWidth - strokeWidth, y2); break; case 'rounded': _endingShape = graphics.quadraticCurve(opts.barXPosition + (opts.barWidth - strokeWidth) / 2, y2 - eY, opts.barXPosition + opts.barWidth - strokeWidth, y2); break; } switch (this.barCtx.barOptions.startingShape) { case 'flat': _startingShape = graphics.line(opts.barXPosition + opts.barWidth - strokeWidth, y1); break; case 'rounded': _startingShape = graphics.quadraticCurve(opts.barXPosition + (opts.barWidth - strokeWidth) / 2, y1 + eY, opts.barXPosition, y1); break; } } return { endingPath: _endingShape, startingPath: _startingShape, y2: y2, y1: y1 }; } } }]); return Helpers; }(); /** * ApexCharts Bar Class responsible for drawing both Columns and Bars. * * @module Bar **/ var Bar = /*#__PURE__*/function () { function Bar(ctx, xyRatios) { _classCallCheck(this, Bar); this.ctx = ctx; this.w = ctx.w; var w = this.w; this.barOptions = w.config.plotOptions.bar; this.isHorizontal = this.barOptions.horizontal; this.strokeWidth = w.config.stroke.width; this.isNullValue = false; this.isTimelineBar = w.config.xaxis.type === 'datetime' && w.globals.seriesRangeBarTimeline.length; this.xyRatios = xyRatios; if (this.xyRatios !== null) { this.xRatio = xyRatios.xRatio; this.initialXRatio = xyRatios.initialXRatio; this.yRatio = xyRatios.yRatio; this.invertedXRatio = xyRatios.invertedXRatio; this.invertedYRatio = xyRatios.invertedYRatio; this.baseLineY = xyRatios.baseLineY; this.baseLineInvertedY = xyRatios.baseLineInvertedY; } this.yaxisIndex = 0; this.seriesLen = 0; this.barHelpers = new Helpers$3(this); } /** primary draw method which is called on bar object * @memberof Bar * @param {array} series - user supplied series values * @param {int} seriesIndex - the index by which series will be drawn on the svg * @return {node} element which is supplied to parent chart draw method for appending **/ _createClass(Bar, [{ key: "draw", value: function draw(series, seriesIndex) { var w = this.w; var graphics = new Graphics(this.ctx); var coreUtils = new CoreUtils(this.ctx, w); series = coreUtils.getLogSeries(series); this.series = series; this.yRatio = coreUtils.getLogYRatios(this.yRatio); this.barHelpers.initVariables(series); var ret = graphics.group({ class: 'apexcharts-bar-series apexcharts-plot-series' }); if (w.config.dataLabels.enabled) { if (this.totalItems > this.barOptions.dataLabels.maxItems) { console.warn('WARNING: DataLabels are enabled but there are too many to display. This may cause performance issue when rendering.'); } } for (var i = 0, bc = 0; i < series.length; i++, bc++) { var x = void 0, y = void 0, xDivision = void 0, // xDivision is the GRIDWIDTH divided by number of datapoints (columns) yDivision = void 0, // yDivision is the GRIDHEIGHT divided by number of datapoints (bars) zeroH = void 0, // zeroH is the baseline where 0 meets y axis zeroW = void 0; // zeroW is the baseline where 0 meets x axis var yArrj = []; // hold y values of current iterating series var xArrj = []; // hold x values of current iterating series var realIndex = w.globals.comboCharts ? seriesIndex[i] : i; // el to which series will be drawn var elSeries = graphics.group({ class: "apexcharts-series", rel: i + 1, seriesName: Utils.escapeString(w.globals.seriesNames[realIndex]), 'data:realIndex': realIndex }); this.ctx.series.addCollapsedClassToSeries(elSeries, realIndex); if (series[i].length > 0) { this.visibleI = this.visibleI + 1; } var barHeight = 0; var barWidth = 0; if (this.yRatio.length > 1) { this.yaxisIndex = realIndex; } this.isReversed = w.config.yaxis[this.yaxisIndex] && w.config.yaxis[this.yaxisIndex].reversed; var initPositions = this.barHelpers.initialPositions(); y = initPositions.y; barHeight = initPositions.barHeight; yDivision = initPositions.yDivision; zeroW = initPositions.zeroW; x = initPositions.x; barWidth = initPositions.barWidth; xDivision = initPositions.xDivision; zeroH = initPositions.zeroH; if (!this.horizontal) { xArrj.push(x + barWidth / 2); } // eldatalabels var elDataLabelsWrap = graphics.group({ class: 'apexcharts-datalabels', 'data:realIndex': realIndex }); for (var j = 0; j < w.globals.dataPoints; j++) { var strokeWidth = this.barHelpers.getStrokeWidth(i, j, realIndex); var paths = null; var pathsParams = { indexes: { i: i, j: j, realIndex: realIndex, bc: bc }, x: x, y: y, strokeWidth: strokeWidth, elSeries: elSeries }; if (this.isHorizontal) { paths = this.drawBarPaths(_objectSpread2({}, pathsParams, { barHeight: barHeight, zeroW: zeroW, yDivision: yDivision })); barWidth = this.series[i][j] / this.invertedYRatio; } else { paths = this.drawColumnPaths(_objectSpread2({}, pathsParams, { xDivision: xDivision, barWidth: barWidth, zeroH: zeroH })); barHeight = this.series[i][j] / this.yRatio[this.yaxisIndex]; } y = paths.y; x = paths.x; // push current X if (j > 0) { xArrj.push(x + barWidth / 2); } yArrj.push(y); var pathFill = this.barHelpers.getPathFillColor(series, i, j, realIndex); this.renderSeries({ realIndex: realIndex, pathFill: pathFill, j: j, i: i, pathFrom: paths.pathFrom, pathTo: paths.pathTo, strokeWidth: strokeWidth, elSeries: elSeries, x: x, y: y, series: series, barHeight: barHeight, barWidth: barWidth, elDataLabelsWrap: elDataLabelsWrap, visibleSeries: this.visibleI, type: 'bar' }); } // push all x val arrays into main xArr w.globals.seriesXvalues[realIndex] = xArrj; w.globals.seriesYvalues[realIndex] = yArrj; ret.add(elSeries); } return ret; } }, { key: "renderSeries", value: function renderSeries(_ref) { var realIndex = _ref.realIndex, pathFill = _ref.pathFill, lineFill = _ref.lineFill, j = _ref.j, i = _ref.i, pathFrom = _ref.pathFrom, pathTo = _ref.pathTo, strokeWidth = _ref.strokeWidth, elSeries = _ref.elSeries, x = _ref.x, y = _ref.y, y1 = _ref.y1, y2 = _ref.y2, series = _ref.series, barHeight = _ref.barHeight, barWidth = _ref.barWidth, barYPosition = _ref.barYPosition, elDataLabelsWrap = _ref.elDataLabelsWrap, visibleSeries = _ref.visibleSeries, type = _ref.type; var w = this.w; var graphics = new Graphics(this.ctx); if (!lineFill) { /* fix apexcharts#341 */ lineFill = this.barOptions.distributed ? w.globals.stroke.colors[j] : w.globals.stroke.colors[realIndex]; } if (w.config.series[i].data[j] && w.config.series[i].data[j].strokeColor) { lineFill = w.config.series[i].data[j].strokeColor; } if (this.isNullValue) { pathFill = 'none'; } var delay = j / w.config.chart.animations.animateGradually.delay * (w.config.chart.animations.speed / w.globals.dataPoints) / 2.4; var renderedPath = graphics.renderPaths({ i: i, j: j, realIndex: realIndex, pathFrom: pathFrom, pathTo: pathTo, stroke: lineFill, strokeWidth: strokeWidth, strokeLineCap: w.config.stroke.lineCap, fill: pathFill, animationDelay: delay, initialSpeed: w.config.chart.animations.speed, dataChangeSpeed: w.config.chart.animations.dynamicAnimation.speed, className: "apexcharts-".concat(type, "-area") }); renderedPath.attr('clip-path', "url(#gridRectMask".concat(w.globals.cuid, ")")); if (typeof y1 !== 'undefined' && typeof y2 !== 'undefined') { renderedPath.attr('data-range-y1', y1); renderedPath.attr('data-range-y2', y2); } var filters = new Filters(this.ctx); filters.setSelectionFilter(renderedPath, realIndex, j); elSeries.add(renderedPath); var barDataLabels = new BarDataLabels(this); var dataLabels = barDataLabels.handleBarDataLabels({ x: x, y: y, y1: y1, y2: y2, i: i, j: j, series: series, realIndex: realIndex, barHeight: barHeight, barWidth: barWidth, barYPosition: barYPosition, renderedPath: renderedPath, visibleSeries: visibleSeries }); if (dataLabels !== null) { elDataLabelsWrap.add(dataLabels); } elSeries.add(elDataLabelsWrap); return elSeries; } }, { key: "drawBarPaths", value: function drawBarPaths(_ref2) { var indexes = _ref2.indexes, barHeight = _ref2.barHeight, strokeWidth = _ref2.strokeWidth, zeroW = _ref2.zeroW, x = _ref2.x, y = _ref2.y, yDivision = _ref2.yDivision, elSeries = _ref2.elSeries; var w = this.w; var i = indexes.i; var j = indexes.j; var bc = indexes.bc; if (w.globals.isXNumeric) { y = (w.globals.seriesX[i][j] - w.globals.minX) / this.invertedXRatio - barHeight; } var barYPosition = y + barHeight * this.visibleI; if (typeof this.series[i][j] === 'undefined' || this.series[i][j] === null) { x = zeroW; } else { x = zeroW + this.series[i][j] / this.invertedYRatio - (this.isReversed ? this.series[i][j] / this.invertedYRatio : 0) * 2; } var paths = this.barHelpers.getBarpaths({ barYPosition: barYPosition, barHeight: barHeight, x1: zeroW, x2: x, strokeWidth: strokeWidth, series: this.series, realIndex: indexes.realIndex, i: i, j: j, w: w }); if (!w.globals.isXNumeric) { y = y + yDivision; } this.barHelpers.barBackground({ bc: bc, i: i, y1: barYPosition - barHeight * this.visibleI, y2: barHeight * this.seriesLen, elSeries: elSeries }); return { pathTo: paths.pathTo, pathFrom: paths.pathFrom, x: x, y: y, barYPosition: barYPosition }; } }, { key: "drawColumnPaths", value: function drawColumnPaths(_ref3) { var indexes = _ref3.indexes, x = _ref3.x, y = _ref3.y, xDivision = _ref3.xDivision, barWidth = _ref3.barWidth, zeroH = _ref3.zeroH, strokeWidth = _ref3.strokeWidth, elSeries = _ref3.elSeries; var w = this.w; var i = indexes.i; var j = indexes.j; var bc = indexes.bc; if (w.globals.isXNumeric) { var sxI = i; if (!w.globals.seriesX[i].length) { sxI = w.globals.maxValsInArrayIndex; } x = (w.globals.seriesX[sxI][j] - w.globals.minX) / this.xRatio - barWidth * this.seriesLen / 2; } var barXPosition = x + barWidth * this.visibleI; if (typeof this.series[i][j] === 'undefined' || this.series[i][j] === null) { y = zeroH; } else { y = zeroH - this.series[i][j] / this.yRatio[this.yaxisIndex] + (this.isReversed ? this.series[i][j] / this.yRatio[this.yaxisIndex] : 0) * 2; } var paths = this.barHelpers.getColumnPaths({ barXPosition: barXPosition, barWidth: barWidth, y1: zeroH, y2: y, strokeWidth: strokeWidth, series: this.series, realIndex: indexes.realIndex, i: i, j: j, w: w }); if (!w.globals.isXNumeric) { x = x + xDivision; } this.barHelpers.barBackground({ bc: bc, i: i, x1: barXPosition - strokeWidth / 2 - barWidth * this.visibleI, x2: barWidth * this.seriesLen + strokeWidth / 2, elSeries: elSeries }); return { pathTo: paths.pathTo, pathFrom: paths.pathFrom, x: x, y: y, barXPosition: barXPosition }; } /** getPreviousPath is a common function for bars/columns which is used to get previous paths when data changes. * @memberof Bar * @param {int} realIndex - current iterating i * @param {int} j - current iterating series's j index * @return {string} pathFrom is the string which will be appended in animations **/ }, { key: "getPreviousPath", value: function getPreviousPath(realIndex, j) { var w = this.w; var pathFrom; for (var pp = 0; pp < w.globals.previousPaths.length; pp++) { var gpp = w.globals.previousPaths[pp]; if (gpp.paths && gpp.paths.length > 0 && parseInt(gpp.realIndex, 10) === parseInt(realIndex, 10)) { if (typeof w.globals.previousPaths[pp].paths[j] !== 'undefined') { pathFrom = w.globals.previousPaths[pp].paths[j].d; } } } return pathFrom; } }]); return Bar; }(); /** * ApexCharts BarStacked Class responsible for drawing both Stacked Columns and Bars. * * @module BarStacked * The whole calculation for stacked bar/column is different from normal bar/column, * hence it makes sense to derive a new class for it extending most of the props of Parent Bar **/ var BarStacked = /*#__PURE__*/function (_Bar) { _inherits(BarStacked, _Bar); function BarStacked() { _classCallCheck(this, BarStacked); return _possibleConstructorReturn(this, _getPrototypeOf(BarStacked).apply(this, arguments)); } _createClass(BarStacked, [{ key: "draw", value: function draw(series, seriesIndex) { var _this = this; var w = this.w; this.graphics = new Graphics(this.ctx); this.bar = new Bar(this.ctx, this.xyRatios); var coreUtils = new CoreUtils(this.ctx, w); series = coreUtils.getLogSeries(series); this.yRatio = coreUtils.getLogYRatios(this.yRatio); this.barHelpers.initVariables(series); if (w.config.chart.stackType === '100%') { series = w.globals.seriesPercent.slice(); } this.series = series; this.totalItems = 0; this.prevY = []; // y position on chart this.prevX = []; // x position on chart this.prevYF = []; // y position including shapes on chart this.prevXF = []; // x position including shapes on chart this.prevYVal = []; // y values (series[i][j]) in columns this.prevXVal = []; // x values (series[i][j]) in bars this.xArrj = []; // xj indicates x position on graph in bars this.xArrjF = []; // xjF indicates bar's x position + roundedShape's positions in bars this.xArrjVal = []; // x val means the actual series's y values in horizontal/bars this.yArrj = []; // yj indicates y position on graph in columns this.yArrjF = []; // yjF indicates bar's y position + roundedShape's positions in columns this.yArrjVal = []; // y val means the actual series's y values in columns for (var sl = 0; sl < series.length; sl++) { if (series[sl].length > 0) { this.totalItems += series[sl].length; } } var ret = this.graphics.group({ class: 'apexcharts-bar-series apexcharts-plot-series' }); var x = 0; var y = 0; var _loop = function _loop(i, bc) { var xDivision = void 0; // xDivision is the GRIDWIDTH divided by number of datapoints (columns) var yDivision = void 0; // yDivision is the GRIDHEIGHT divided by number of datapoints (bars) var zeroH = void 0; // zeroH is the baseline where 0 meets y axis var zeroW = void 0; // zeroW is the baseline where 0 meets x axis var xArrValues = []; var yArrValues = []; var realIndex = w.globals.comboCharts ? seriesIndex[i] : i; if (_this.yRatio.length > 1) { _this.yaxisIndex = realIndex; } _this.isReversed = w.config.yaxis[_this.yaxisIndex] && w.config.yaxis[_this.yaxisIndex].reversed; // el to which series will be drawn var elSeries = _this.graphics.group({ class: "apexcharts-series", seriesName: Utils.escapeString(w.globals.seriesNames[realIndex]), rel: i + 1, 'data:realIndex': realIndex }); // eldatalabels var elDataLabelsWrap = _this.graphics.group({ class: 'apexcharts-datalabels', 'data:realIndex': realIndex }); var barHeight = 0; var barWidth = 0; var initPositions = _this.initialPositions(x, y, xDivision, yDivision, zeroH, zeroW); y = initPositions.y; barHeight = initPositions.barHeight; yDivision = initPositions.yDivision; zeroW = initPositions.zeroW; x = initPositions.x; barWidth = initPositions.barWidth; xDivision = initPositions.xDivision; zeroH = initPositions.zeroH; _this.yArrj = []; _this.yArrjF = []; _this.yArrjVal = []; _this.xArrj = []; _this.xArrjF = []; _this.xArrjVal = []; // if (!this.horizontal) { // this.xArrj.push(x + barWidth / 2) // } // fix issue #1215; // where all stack bar disappear after collapsing the first series // sol: if only 1 arr in this.prevY(this.prevY.length === 1) and all are NaN if (_this.prevY.length === 1 && _this.prevY[0].every(function (val) { return isNaN(val); })) { // make this.prevY[0] all zeroH _this.prevY[0] = _this.prevY[0].map(function (val) { return zeroH; }); // make this.prevYF[0] all 0 _this.prevYF[0] = _this.prevYF[0].map(function (val) { return 0; }); } for (var j = 0; j < w.globals.dataPoints; j++) { var strokeWidth = _this.barHelpers.getStrokeWidth(i, j, realIndex); var commonPathOpts = { indexes: { i: i, j: j, realIndex: realIndex, bc: bc }, strokeWidth: strokeWidth, x: x, y: y, elSeries: elSeries }; var paths = null; if (_this.isHorizontal) { paths = _this.drawStackedBarPaths(_objectSpread2({}, commonPathOpts, { zeroW: zeroW, barHeight: barHeight, yDivision: yDivision })); barWidth = _this.series[i][j] / _this.invertedYRatio; } else { paths = _this.drawStackedColumnPaths(_objectSpread2({}, commonPathOpts, { xDivision: xDivision, barWidth: barWidth, zeroH: zeroH })); barHeight = _this.series[i][j] / _this.yRatio[_this.yaxisIndex]; } y = paths.y; x = paths.x; xArrValues.push(x); yArrValues.push(y); var pathFill = _this.barHelpers.getPathFillColor(series, i, j, realIndex); elSeries = _this.renderSeries({ realIndex: realIndex, pathFill: pathFill, j: j, i: i, pathFrom: paths.pathFrom, pathTo: paths.pathTo, strokeWidth: strokeWidth, elSeries: elSeries, x: x, y: y, series: series, barHeight: barHeight, barWidth: barWidth, elDataLabelsWrap: elDataLabelsWrap, type: 'bar', visibleSeries: 0 }); } // push all x val arrays into main xArr w.globals.seriesXvalues[realIndex] = xArrValues; w.globals.seriesYvalues[realIndex] = yArrValues; // push all current y values array to main PrevY Array _this.prevY.push(_this.yArrj); _this.prevYF.push(_this.yArrjF); _this.prevYVal.push(_this.yArrjVal); _this.prevX.push(_this.xArrj); _this.prevXF.push(_this.xArrjF); _this.prevXVal.push(_this.xArrjVal); ret.add(elSeries); }; for (var i = 0, bc = 0; i < series.length; i++, bc++) { _loop(i, bc); } return ret; } }, { key: "initialPositions", value: function initialPositions(x, y, xDivision, yDivision, zeroH, zeroW) { var w = this.w; var barHeight, barWidth; if (this.isHorizontal) { // height divided into equal parts yDivision = w.globals.gridHeight / w.globals.dataPoints; barHeight = yDivision; barHeight = barHeight * parseInt(w.config.plotOptions.bar.barHeight, 10) / 100; zeroW = this.baseLineInvertedY + w.globals.padHorizontal + (this.isReversed ? w.globals.gridWidth : 0) - (this.isReversed ? this.baseLineInvertedY * 2 : 0); // initial y position is half of barHeight * half of number of Bars y = (yDivision - barHeight) / 2; } else { // width divided into equal parts xDivision = w.globals.gridWidth / w.globals.dataPoints; barWidth = xDivision; if (w.globals.isXNumeric) { xDivision = w.globals.minXDiff / this.xRatio; barWidth = xDivision * parseInt(this.barOptions.columnWidth, 10) / 100; } else { barWidth = barWidth * parseInt(w.config.plotOptions.bar.columnWidth, 10) / 100; } zeroH = this.baseLineY[this.yaxisIndex] + (this.isReversed ? w.globals.gridHeight : 0) - (this.isReversed ? this.baseLineY[this.yaxisIndex] * 2 : 0); // initial x position is one third of barWidth x = w.globals.padHorizontal + (xDivision - barWidth) / 2; } return { x: x, y: y, yDivision: yDivision, xDivision: xDivision, barHeight: barHeight, barWidth: barWidth, zeroH: zeroH, zeroW: zeroW }; } }, { key: "drawStackedBarPaths", value: function drawStackedBarPaths(_ref) { var indexes = _ref.indexes, barHeight = _ref.barHeight, strokeWidth = _ref.strokeWidth, zeroW = _ref.zeroW, x = _ref.x, y = _ref.y, yDivision = _ref.yDivision, elSeries = _ref.elSeries; var w = this.w; var barYPosition = y; var barXPosition; var i = indexes.i; var j = indexes.j; var bc = indexes.bc; var prevBarW = 0; for (var k = 0; k < this.prevXF.length; k++) { prevBarW = prevBarW + this.prevXF[k][j]; } if (i > 0) { var bXP = zeroW; if (this.prevXVal[i - 1][j] < 0) { bXP = this.series[i][j] >= 0 ? this.prevX[i - 1][j] + prevBarW - (this.isReversed ? prevBarW : 0) * 2 : this.prevX[i - 1][j]; } else if (this.prevXVal[i - 1][j] >= 0) { bXP = this.series[i][j] >= 0 ? this.prevX[i - 1][j] : this.prevX[i - 1][j] - prevBarW + (this.isReversed ? prevBarW : 0) * 2; } barXPosition = bXP; } else { // the first series will not have prevX values barXPosition = zeroW; } if (this.series[i][j] === null) { x = barXPosition; } else { x = barXPosition + this.series[i][j] / this.invertedYRatio - (this.isReversed ? this.series[i][j] / this.invertedYRatio : 0) * 2; } this.xArrj.push(x); this.xArrjF.push(Math.abs(barXPosition - x)); this.xArrjVal.push(this.series[i][j]); var paths = this.barHelpers.getBarpaths({ barYPosition: barYPosition, barHeight: barHeight, x1: barXPosition, x2: x, strokeWidth: strokeWidth, series: this.series, realIndex: indexes.realIndex, i: i, j: j, w: w }); this.barHelpers.barBackground({ bc: bc, i: i, y1: barYPosition, y2: barHeight, elSeries: elSeries }); y = y + yDivision; return { pathTo: paths.pathTo, pathFrom: paths.pathFrom, x: x, y: y }; } }, { key: "drawStackedColumnPaths", value: function drawStackedColumnPaths(_ref2) { var indexes = _ref2.indexes, x = _ref2.x, y = _ref2.y, xDivision = _ref2.xDivision, barWidth = _ref2.barWidth, zeroH = _ref2.zeroH, strokeWidth = _ref2.strokeWidth, elSeries = _ref2.elSeries; var w = this.w; var i = indexes.i; var j = indexes.j; var bc = indexes.bc; if (w.globals.isXNumeric) { var seriesVal = w.globals.seriesX[i][j]; if (!seriesVal) seriesVal = 0; x = (seriesVal - w.globals.minX) / this.xRatio - barWidth / 2; } var barXPosition = x; var barYPosition; var prevBarH = 0; for (var k = 0; k < this.prevYF.length; k++) { // fix issue #1215 // in case where this.prevYF[k][j] is NaN, use 0 instead prevBarH = prevBarH + (!isNaN(this.prevYF[k][j]) ? this.prevYF[k][j] : 0); } if (i > 0 && !w.globals.isXNumeric || i > 0 && w.globals.isXNumeric && w.globals.seriesX[i - 1][j] === w.globals.seriesX[i][j]) { var bYP; var prevYValue; var p = Math.min(this.yRatio.length + 1, i + 1); if (this.prevY[i - 1] !== undefined) { for (var ii = 1; ii < p; ii++) { if (!isNaN(this.prevY[i - ii][j])) { // find the previous available value to give prevYValue prevYValue = this.prevY[i - ii][j]; // if found it, break the loop break; } } } for (var _ii = 1; _ii < p; _ii++) { // find the previous available value(non-NaN) to give bYP if (this.prevYVal[i - _ii][j] < 0) { bYP = this.series[i][j] >= 0 ? prevYValue - prevBarH + (this.isReversed ? prevBarH : 0) * 2 : prevYValue; // found it? break the loop break; } else if (this.prevYVal[i - _ii][j] >= 0) { bYP = this.series[i][j] >= 0 ? prevYValue : prevYValue + prevBarH - (this.isReversed ? prevBarH : 0) * 2; // found it? break the loop break; } } if (typeof bYP === 'undefined') bYP = w.globals.gridHeight; // if this.prevYF[0] is all 0 resulted from line #486 // AND every arr starting from the second only contains NaN if (this.prevYF[0].every(function (val) { return val === 0; }) && this.prevYF.slice(1, i).every(function (arr) { return arr.every(function (val) { return isNaN(val); }); })) { // Use the same calc way as line #485 barYPosition = w.globals.gridHeight - zeroH; } else { // Nothing special barYPosition = bYP; } } else { // the first series will not have prevY values, also if the prev index's series X doesn't matches the current index's series X, then start from zero barYPosition = w.globals.gridHeight - zeroH; } y = barYPosition - this.series[i][j] / this.yRatio[this.yaxisIndex] + (this.isReversed ? this.series[i][j] / this.yRatio[this.yaxisIndex] : 0) * 2; this.yArrj.push(y); this.yArrjF.push(Math.abs(barYPosition - y)); this.yArrjVal.push(this.series[i][j]); var paths = this.barHelpers.getColumnPaths({ barXPosition: barXPosition, barWidth: barWidth, y1: barYPosition, y2: y, yRatio: this.yRatio[this.yaxisIndex], strokeWidth: this.strokeWidth, series: this.series, realIndex: indexes.realIndex, i: i, j: j, w: w }); this.barHelpers.barBackground({ bc: bc, i: i, x1: barXPosition, x2: barWidth, elSeries: elSeries }); x = x + xDivision; return { pathTo: paths.pathTo, pathFrom: paths.pathFrom, x: w.globals.isXNumeric ? x - xDivision : x, y: y }; } }]); return BarStacked; }(Bar); /** * ApexCharts CandleStick Class responsible for drawing both Stacked Columns and Bars. * * @module CandleStick **/ var CandleStick = /*#__PURE__*/function (_Bar) { _inherits(CandleStick, _Bar); function CandleStick() { _classCallCheck(this, CandleStick); return _possibleConstructorReturn(this, _getPrototypeOf(CandleStick).apply(this, arguments)); } _createClass(CandleStick, [{ key: "draw", value: function draw(series, seriesIndex) { var w = this.w; var graphics = new Graphics(this.ctx); var fill = new Fill(this.ctx); this.candlestickOptions = this.w.config.plotOptions.candlestick; var coreUtils = new CoreUtils(this.ctx, w); series = coreUtils.getLogSeries(series); this.series = series; this.yRatio = coreUtils.getLogYRatios(this.yRatio); this.barHelpers.initVariables(series); var ret = graphics.group({ class: 'apexcharts-candlestick-series apexcharts-plot-series' }); for (var i = 0; i < series.length; i++) { var x = void 0, y = void 0, xDivision = void 0, // xDivision is the GRIDWIDTH divided by number of datapoints (columns) zeroH = void 0; // zeroH is the baseline where 0 meets y axis var yArrj = []; // hold y values of current iterating series var xArrj = []; // hold x values of current iterating series var realIndex = w.globals.comboCharts ? seriesIndex[i] : i; // el to which series will be drawn var elSeries = graphics.group({ class: "apexcharts-series", seriesName: Utils.escapeString(w.globals.seriesNames[realIndex]), rel: i + 1, 'data:realIndex': realIndex }); if (series[i].length > 0) { this.visibleI = this.visibleI + 1; } var barHeight = 0; var barWidth = 0; if (this.yRatio.length > 1) { this.yaxisIndex = realIndex; } var initPositions = this.barHelpers.initialPositions(); y = initPositions.y; barHeight = initPositions.barHeight; x = initPositions.x; barWidth = initPositions.barWidth; xDivision = initPositions.xDivision; zeroH = initPositions.zeroH; xArrj.push(x + barWidth / 2); // eldatalabels var elDataLabelsWrap = graphics.group({ class: 'apexcharts-datalabels', 'data:realIndex': realIndex }); for (var j = 0; j < w.globals.dataPoints; j++) { var strokeWidth = this.barHelpers.getStrokeWidth(i, j, realIndex); var color = void 0; var paths = this.drawCandleStickPaths({ indexes: { i: i, j: j, realIndex: realIndex }, x: x, y: y, xDivision: xDivision, barWidth: barWidth, zeroH: zeroH, strokeWidth: strokeWidth, elSeries: elSeries }); y = paths.y; x = paths.x; color = paths.color; // push current X if (j > 0) { xArrj.push(x + barWidth / 2); } yArrj.push(y); var pathFill = fill.fillPath({ seriesNumber: realIndex, dataPointIndex: j, color: color, value: series[i][j] }); var lineFill = this.candlestickOptions.wick.useFillColor ? color : undefined; this.renderSeries({ realIndex: realIndex, pathFill: pathFill, lineFill: lineFill, j: j, i: i, pathFrom: paths.pathFrom, pathTo: paths.pathTo, strokeWidth: strokeWidth, elSeries: elSeries, x: x, y: y, series: series, barHeight: barHeight, barWidth: barWidth, elDataLabelsWrap: elDataLabelsWrap, visibleSeries: this.visibleI, type: 'candlestick' }); } // push all x val arrays into main xArr w.globals.seriesXvalues[realIndex] = xArrj; w.globals.seriesYvalues[realIndex] = yArrj; ret.add(elSeries); } return ret; } }, { key: "drawCandleStickPaths", value: function drawCandleStickPaths(_ref) { var indexes = _ref.indexes, x = _ref.x, y = _ref.y, xDivision = _ref.xDivision, barWidth = _ref.barWidth, zeroH = _ref.zeroH, strokeWidth = _ref.strokeWidth; var w = this.w; var graphics = new Graphics(this.ctx); var i = indexes.i; var j = indexes.j; var isPositive = true; var colorPos = w.config.plotOptions.candlestick.colors.upward; var colorNeg = w.config.plotOptions.candlestick.colors.downward; var yRatio = this.yRatio[this.yaxisIndex]; var realIndex = indexes.realIndex; var ohlc = this.getOHLCValue(realIndex, j); var l1 = zeroH; var l2 = zeroH; if (ohlc.o > ohlc.c) { isPositive = false; } var y1 = Math.min(ohlc.o, ohlc.c); var y2 = Math.max(ohlc.o, ohlc.c); if (w.globals.isXNumeric) { x = (w.globals.seriesX[realIndex][j] - w.globals.minX) / this.xRatio - barWidth / 2; } var barXPosition = x + barWidth * this.visibleI; if (typeof this.series[i][j] === 'undefined' || this.series[i][j] === null) { y1 = zeroH; } else { y1 = zeroH - y1 / yRatio; y2 = zeroH - y2 / yRatio; l1 = zeroH - ohlc.h / yRatio; l2 = zeroH - ohlc.l / yRatio; } var pathTo = graphics.move(barXPosition, zeroH); var pathFrom = graphics.move(barXPosition, y1); if (w.globals.previousPaths.length > 0) { pathFrom = this.getPreviousPath(realIndex, j, true); } pathTo = graphics.move(barXPosition, y2) + graphics.line(barXPosition + barWidth / 2, y2) + graphics.line(barXPosition + barWidth / 2, l1) + graphics.line(barXPosition + barWidth / 2, y2) + graphics.line(barXPosition + barWidth, y2) + graphics.line(barXPosition + barWidth, y1) + graphics.line(barXPosition + barWidth / 2, y1) + graphics.line(barXPosition + barWidth / 2, l2) + graphics.line(barXPosition + barWidth / 2, y1) + graphics.line(barXPosition, y1) + graphics.line(barXPosition, y2 - strokeWidth / 2); pathFrom = pathFrom + graphics.move(barXPosition, y1); if (!w.globals.isXNumeric) { x = x + xDivision; } return { pathTo: pathTo, pathFrom: pathFrom, x: x, y: y2, barXPosition: barXPosition, color: isPositive ? colorPos : colorNeg }; } }, { key: "getOHLCValue", value: function getOHLCValue(i, j) { var w = this.w; return { o: w.globals.seriesCandleO[i][j], h: w.globals.seriesCandleH[i][j], l: w.globals.seriesCandleL[i][j], c: w.globals.seriesCandleC[i][j] }; } }]); return CandleStick; }(Bar); /** * ApexCharts HeatMap Class. * @module HeatMap **/ var HeatMap = /*#__PURE__*/function () { function HeatMap(ctx, xyRatios) { _classCallCheck(this, HeatMap); this.ctx = ctx; this.w = ctx.w; this.xRatio = xyRatios.xRatio; this.yRatio = xyRatios.yRatio; this.negRange = false; this.dynamicAnim = this.w.config.chart.animations.dynamicAnimation; this.rectRadius = this.w.config.plotOptions.heatmap.radius; this.strokeWidth = this.w.config.stroke.show ? this.w.config.stroke.width : 0; } _createClass(HeatMap, [{ key: "draw", value: function draw(series) { var w = this.w; var graphics = new Graphics(this.ctx); var ret = graphics.group({ class: 'apexcharts-heatmap' }); ret.attr('clip-path', "url(#gridRectMask".concat(w.globals.cuid, ")")); // width divided into equal parts var xDivision = w.globals.gridWidth / w.globals.dataPoints; var yDivision = w.globals.gridHeight / w.globals.series.length; var y1 = 0; var rev = false; this.checkColorRange(); var heatSeries = series.slice(); if (w.config.yaxis[0].reversed) { rev = true; heatSeries.reverse(); } for (var i = rev ? 0 : heatSeries.length - 1; rev ? i < heatSeries.length : i >= 0; rev ? i++ : i--) { // el to which series will be drawn var elSeries = graphics.group({ class: "apexcharts-series apexcharts-heatmap-series", seriesName: Utils.escapeString(w.globals.seriesNames[i]), rel: i + 1, 'data:realIndex': i }); if (w.config.chart.dropShadow.enabled) { var shadow = w.config.chart.dropShadow; var filters = new Filters(this.ctx); filters.dropShadow(elSeries, shadow, i); } var x1 = 0; for (var j = 0; j < heatSeries[i].length; j++) { var colorShadePercent = 1; var shadeIntensity = w.config.plotOptions.heatmap.shadeIntensity; var heatColorProps = this.determineHeatColor(i, j); if (w.globals.hasNegs || this.negRange) { if (w.config.plotOptions.heatmap.reverseNegativeShade) { if (heatColorProps.percent < 0) { colorShadePercent = heatColorProps.percent / 100 * (shadeIntensity * 1.25); } else { colorShadePercent = (1 - heatColorProps.percent / 100) * (shadeIntensity * 1.25); } } else { if (heatColorProps.percent <= 0) { colorShadePercent = 1 - (1 + heatColorProps.percent / 100) * shadeIntensity; } else { colorShadePercent = (1 - heatColorProps.percent / 100) * shadeIntensity; } } } else { colorShadePercent = 1 - heatColorProps.percent / 100; } var color = heatColorProps.color; var utils = new Utils(); if (w.config.plotOptions.heatmap.enableShades) { if (colorShadePercent < 0) colorShadePercent = 0; color = Utils.hexToRgba(utils.shadeColor(colorShadePercent, heatColorProps.color), w.config.fill.opacity); } if (w.config.fill.type === 'image') { var fill = new Fill(this.ctx); color = fill.fillPath({ seriesNumber: i, dataPointIndex: j, opacity: w.globals.hasNegs ? heatColorProps.percent < 0 ? 1 - (1 + heatColorProps.percent / 100) : shadeIntensity + heatColorProps.percent / 100 : heatColorProps.percent / 100, patternID: Utils.randomId(), width: w.config.fill.image.width ? w.config.fill.image.width : xDivision, height: w.config.fill.image.height ? w.config.fill.image.height : yDivision }); } var radius = this.rectRadius; var rect = graphics.drawRect(x1, y1, xDivision, yDivision, radius); rect.attr({ cx: x1, cy: y1 }); rect.node.classList.add('apexcharts-heatmap-rect'); elSeries.add(rect); rect.attr({ fill: color, i: i, index: i, j: j, val: heatSeries[i][j], 'stroke-width': this.strokeWidth, stroke: w.config.plotOptions.heatmap.useFillColorAsStroke ? color : w.globals.stroke.colors[0], color: color }); rect.node.addEventListener('mouseenter', graphics.pathMouseEnter.bind(this, rect)); rect.node.addEventListener('mouseleave', graphics.pathMouseLeave.bind(this, rect)); rect.node.addEventListener('mousedown', graphics.pathMouseDown.bind(this, rect)); if (w.config.chart.animations.enabled && !w.globals.dataChanged) { var speed = 1; if (!w.globals.resized) { speed = w.config.chart.animations.speed; } this.animateHeatMap(rect, x1, y1, xDivision, yDivision, speed); } if (w.globals.dataChanged) { var _speed = 1; if (this.dynamicAnim.enabled && w.globals.shouldAnimate) { _speed = this.dynamicAnim.speed; var colorFrom = w.globals.previousPaths[i] && w.globals.previousPaths[i][j] && w.globals.previousPaths[i][j].color; if (!colorFrom) colorFrom = 'rgba(255, 255, 255, 0)'; this.animateHeatColor(rect, Utils.isColorHex(colorFrom) ? colorFrom : Utils.rgb2hex(colorFrom), Utils.isColorHex(color) ? color : Utils.rgb2hex(color), _speed); } } var dataLabels = this.calculateHeatmapDataLabels({ x: x1, y: y1, i: i, j: j, heatColorProps: heatColorProps, series: heatSeries, rectHeight: yDivision, rectWidth: xDivision }); if (dataLabels !== null) { elSeries.add(dataLabels); } x1 = x1 + xDivision; } y1 = y1 + yDivision; ret.add(elSeries); } // adjust yaxis labels for heatmap var yAxisScale = w.globals.yAxisScale[0].result.slice(); if (w.config.yaxis[0].reversed) { yAxisScale.unshift(''); } else { yAxisScale.push(''); } w.globals.yAxisScale[0].result = yAxisScale; var divisor = w.globals.gridHeight / w.globals.series.length; w.config.yaxis[0].labels.offsetY = -(divisor / 2); return ret; } }, { key: "checkColorRange", value: function checkColorRange() { var _this = this; var w = this.w; var heatmap = w.config.plotOptions.heatmap; if (heatmap.colorScale.ranges.length > 0) { heatmap.colorScale.ranges.map(function (range, index) { if (range.from <= 0) { _this.negRange = true; } }); } } }, { key: "determineHeatColor", value: function determineHeatColor(i, j) { var w = this.w; var val = w.globals.series[i][j]; var heatmap = w.config.plotOptions.heatmap; var seriesNumber = heatmap.colorScale.inverse ? j : i; var color = w.globals.colors[seriesNumber]; var foreColor = null; var min = Math.min.apply(Math, _toConsumableArray(w.globals.series[i])); var max = Math.max.apply(Math, _toConsumableArray(w.globals.series[i])); if (!heatmap.distributed) { min = w.globals.minY; max = w.globals.maxY; } if (typeof heatmap.colorScale.min !== 'undefined') { min = heatmap.colorScale.min < w.globals.minY ? heatmap.colorScale.min : w.globals.minY; max = heatmap.colorScale.max > w.globals.maxY ? heatmap.colorScale.max : w.globals.maxY; } var total = Math.abs(max) + Math.abs(min); var percent = 100 * val / (total === 0 ? total - 0.000001 : total); if (heatmap.colorScale.ranges.length > 0) { var colorRange = heatmap.colorScale.ranges; colorRange.map(function (range, index) { if (val >= range.from && val <= range.to) { color = range.color; foreColor = range.foreColor ? range.foreColor : null; min = range.from; max = range.to; var rTotal = Math.abs(max) + Math.abs(min); percent = 100 * val / (rTotal === 0 ? rTotal - 0.000001 : rTotal); } }); } return { color: color, foreColor: foreColor, percent: percent }; } }, { key: "calculateHeatmapDataLabels", value: function calculateHeatmapDataLabels(_ref) { var x = _ref.x, y = _ref.y, i = _ref.i, j = _ref.j, heatColorProps = _ref.heatColorProps, series = _ref.series, rectHeight = _ref.rectHeight, rectWidth = _ref.rectWidth; var w = this.w; // let graphics = new Graphics(this.ctx) var dataLabelsConfig = w.config.dataLabels; var graphics = new Graphics(this.ctx); var dataLabels = new DataLabels(this.ctx); var formatter = dataLabelsConfig.formatter; var elDataLabelsWrap = null; if (dataLabelsConfig.enabled) { elDataLabelsWrap = graphics.group({ class: 'apexcharts-data-labels' }); var offX = dataLabelsConfig.offsetX; var offY = dataLabelsConfig.offsetY; var dataLabelsX = x + rectWidth / 2 + offX; var dataLabelsY = y + rectHeight / 2 + parseFloat(dataLabelsConfig.style.fontSize) / 3 + offY; var text = formatter(w.globals.series[i][j], { seriesIndex: i, dataPointIndex: j, w: w }); dataLabels.plotDataLabelsText({ x: dataLabelsX, y: dataLabelsY, text: text, i: i, j: j, color: heatColorProps.foreColor, parent: elDataLabelsWrap, dataLabelsConfig: dataLabelsConfig }); } return elDataLabelsWrap; } }, { key: "animateHeatMap", value: function animateHeatMap(el, x, y, width, height, speed) { var animations = new Animations(this.ctx); animations.animateRect(el, { x: x + width / 2, y: y + height / 2, width: 0, height: 0 }, { x: x, y: y, width: width, height: height }, speed, function () { animations.animationCompleted(el); }); } }, { key: "animateHeatColor", value: function animateHeatColor(el, colorFrom, colorTo, speed) { el.attr({ fill: colorFrom }).animate(speed).attr({ fill: colorTo }); } }]); return HeatMap; }(); /** * ApexCharts Radar Class for Spider/Radar Charts. * @module Radar **/ var Radar = /*#__PURE__*/function () { function Radar(ctx) { _classCallCheck(this, Radar); this.ctx = ctx; this.w = ctx.w; this.chartType = this.w.config.chart.type; this.initialAnim = this.w.config.chart.animations.enabled; this.dynamicAnim = this.initialAnim && this.w.config.chart.animations.dynamicAnimation.enabled; this.animDur = 0; var w = this.w; this.graphics = new Graphics(this.ctx); this.lineColorArr = w.globals.stroke.colors !== undefined ? w.globals.stroke.colors : w.globals.colors; this.defaultSize = w.globals.svgHeight < w.globals.svgWidth ? w.globals.gridHeight + w.globals.goldenPadding * 1.5 : w.globals.gridWidth; this.maxValue = this.w.globals.maxY; this.minValue = this.w.globals.minY; this.polygons = w.config.plotOptions.radar.polygons; var longestXaxisLabel = w.globals.labels.slice().sort(function (a, b) { return b.length - a.length; })[0]; var labelWidth = this.graphics.getTextRects(longestXaxisLabel, w.config.xaxis.labels.style.fontSize); this.strokeWidth = w.config.stroke.show ? w.config.stroke.width : 0; this.size = this.defaultSize / 2.1 - this.strokeWidth - w.config.chart.dropShadow.blur; if (w.config.xaxis.labels.show) { this.size = this.size - labelWidth.width / 1.75; } if (w.config.plotOptions.radar.size !== undefined) { this.size = w.config.plotOptions.radar.size; } this.dataRadiusOfPercent = []; this.dataRadius = []; this.angleArr = []; this.yaxisLabelsTextsPos = []; } _createClass(Radar, [{ key: "draw", value: function draw(series) { var _this = this; var w = this.w; var fill = new Fill(this.ctx); var allSeries = []; var dataLabels = new DataLabels(this.ctx); if (series.length) { this.dataPointsLen = series[w.globals.maxValsInArrayIndex].length; } this.disAngle = Math.PI * 2 / this.dataPointsLen; var halfW = w.globals.gridWidth / 2; var halfH = w.globals.gridHeight / 2; var translateX = halfW + w.config.plotOptions.radar.offsetX; var translateY = halfH + w.config.plotOptions.radar.offsetY; var ret = this.graphics.group({ class: 'apexcharts-radar-series apexcharts-plot-series', transform: "translate(".concat(translateX || 0, ", ").concat(translateY || 0, ")") }); var dataPointsPos = []; var elPointsMain = null; var elDataPointsMain = null; this.yaxisLabels = this.graphics.group({ class: 'apexcharts-yaxis' }); series.forEach(function (s, i) { var longestSeries = s.length === w.globals.dataPoints; // el to which series will be drawn var elSeries = _this.graphics.group().attr({ class: "apexcharts-series", 'data:longestSeries': longestSeries, seriesName: Utils.escapeString(w.globals.seriesNames[i]), rel: i + 1, 'data:realIndex': i }); _this.dataRadiusOfPercent[i] = []; _this.dataRadius[i] = []; _this.angleArr[i] = []; s.forEach(function (dv, j) { var range = Math.abs(_this.maxValue - _this.minValue); dv = dv + Math.abs(_this.minValue); _this.dataRadiusOfPercent[i][j] = dv / range; _this.dataRadius[i][j] = _this.dataRadiusOfPercent[i][j] * _this.size; _this.angleArr[i][j] = j * _this.disAngle; }); dataPointsPos = _this.getDataPointsPos(_this.dataRadius[i], _this.angleArr[i]); var paths = _this.createPaths(dataPointsPos, { x: 0, y: 0 }); // points elPointsMain = _this.graphics.group({ class: 'apexcharts-series-markers-wrap apexcharts-element-hidden' }); // datapoints elDataPointsMain = _this.graphics.group({ class: "apexcharts-datalabels", 'data:realIndex': i }); w.globals.delayedElements.push({ el: elPointsMain.node, index: i }); var defaultRenderedPathOptions = { i: i, realIndex: i, animationDelay: i, initialSpeed: w.config.chart.animations.speed, dataChangeSpeed: w.config.chart.animations.dynamicAnimation.speed, className: "apexcharts-radar", shouldClipToGrid: false, bindEventsOnPaths: false, stroke: w.globals.stroke.colors[i], strokeLineCap: w.config.stroke.lineCap }; var pathFrom = null; if (w.globals.previousPaths.length > 0) { pathFrom = _this.getPreviousPath(i); } for (var p = 0; p < paths.linePathsTo.length; p++) { var renderedLinePath = _this.graphics.renderPaths(_objectSpread2({}, defaultRenderedPathOptions, { pathFrom: pathFrom === null ? paths.linePathsFrom[p] : pathFrom, pathTo: paths.linePathsTo[p], strokeWidth: Array.isArray(_this.strokeWidth) ? _this.strokeWidth[i] : _this.strokeWidth, fill: 'none', drawShadow: false })); elSeries.add(renderedLinePath); var pathFill = fill.fillPath({ seriesNumber: i }); var renderedAreaPath = _this.graphics.renderPaths(_objectSpread2({}, defaultRenderedPathOptions, { pathFrom: pathFrom === null ? paths.areaPathsFrom[p] : pathFrom, pathTo: paths.areaPathsTo[p], strokeWidth: 0, fill: pathFill, drawShadow: false })); if (w.config.chart.dropShadow.enabled) { var filters = new Filters(_this.ctx); var shadow = w.config.chart.dropShadow; filters.dropShadow(renderedAreaPath, Object.assign({}, shadow, { noUserSpaceOnUse: true }), i); } elSeries.add(renderedAreaPath); } s.forEach(function (sj, j) { var markers = new Markers(_this.ctx); var opts = markers.getMarkerConfig('apexcharts-marker', i, j); var point = _this.graphics.drawMarker(dataPointsPos[j].x, dataPointsPos[j].y, opts); point.attr('rel', j); point.attr('j', j); point.attr('index', i); point.node.setAttribute('default-marker-size', opts.pSize); var elPointsWrap = _this.graphics.group({ class: 'apexcharts-series-markers' }); if (elPointsWrap) { elPointsWrap.add(point); } elPointsMain.add(elPointsWrap); elSeries.add(elPointsMain); var dataLabelsConfig = w.config.dataLabels; if (dataLabelsConfig.enabled) { var text = dataLabelsConfig.formatter(w.globals.series[i][j], { seriesIndex: i, dataPointIndex: j, w: w }); dataLabels.plotDataLabelsText({ x: dataPointsPos[j].x, y: dataPointsPos[j].y, text: text, textAnchor: 'middle', i: i, j: i, parent: elDataPointsMain, offsetCorrection: false, dataLabelsConfig: _objectSpread2({}, dataLabelsConfig) }); } elSeries.add(elDataPointsMain); }); allSeries.push(elSeries); }); this.drawPolygons({ parent: ret }); if (w.config.xaxis.labels.show) { var xaxisTexts = this.drawXAxisTexts(); ret.add(xaxisTexts); } ret.add(this.yaxisLabels); allSeries.forEach(function (elS) { ret.add(elS); }); return ret; } }, { key: "drawPolygons", value: function drawPolygons(opts) { var _this2 = this; var w = this.w; var parent = opts.parent; var yaxisTexts = w.globals.yAxisScale[0].result.reverse(); var layers = yaxisTexts.length; var radiusSizes = []; var layerDis = this.size / (layers - 1); for (var i = 0; i < layers; i++) { radiusSizes[i] = layerDis * i; } radiusSizes.reverse(); var polygonStrings = []; var lines = []; radiusSizes.forEach(function (radiusSize, r) { var polygon = _this2.getPolygonPos(radiusSize); var string = ''; polygon.forEach(function (p, i) { if (r === 0) { var line = _this2.graphics.drawLine(p.x, p.y, 0, 0, Array.isArray(_this2.polygons.connectorColors) ? _this2.polygons.connectorColors[i] : _this2.polygons.connectorColors); lines.push(line); } if (i === 0) { _this2.yaxisLabelsTextsPos.push({ x: p.x, y: p.y }); } string += p.x + ',' + p.y + ' '; }); polygonStrings.push(string); }); polygonStrings.forEach(function (p, i) { var strokeColors = _this2.polygons.strokeColors; var polygon = _this2.graphics.drawPolygon(p, Array.isArray(strokeColors) ? strokeColors[i] : strokeColors, w.globals.radarPolygons.fill.colors[i]); parent.add(polygon); }); lines.forEach(function (l) { parent.add(l); }); if (w.config.yaxis[0].show) { this.yaxisLabelsTextsPos.forEach(function (p, i) { var yText = _this2.drawYAxisTexts(p.x, p.y, i, yaxisTexts[i]); _this2.yaxisLabels.add(yText); }); } } }, { key: "drawYAxisTexts", value: function drawYAxisTexts(x, y, i, text) { var w = this.w; var yaxisConfig = w.config.yaxis[0]; var formatter = w.globals.yLabelFormatters[0]; var yaxisLabel = this.graphics.drawText({ x: x + yaxisConfig.labels.offsetX, y: y + yaxisConfig.labels.offsetY, text: formatter(text, i), textAnchor: 'middle', fontSize: yaxisConfig.labels.style.fontSize, fontFamily: yaxisConfig.labels.style.fontFamily, foreColor: yaxisConfig.labels.style.color }); return yaxisLabel; } }, { key: "drawXAxisTexts", value: function drawXAxisTexts() { var _this3 = this; var w = this.w; var xaxisLabelsConfig = w.config.xaxis.labels; var elXAxisWrap = this.graphics.group({ class: 'apexcharts-xaxis' }); var polygonPos = this.getPolygonPos(this.size); w.globals.labels.forEach(function (label, i) { var formatter = w.config.xaxis.labels.formatter; var dataLabels = new DataLabels(_this3.ctx); if (polygonPos[i]) { var textPos = _this3.getTextPos(polygonPos[i], _this3.size); var text = formatter(label, { seriesIndex: -1, dataPointIndex: i, w: w }); dataLabels.plotDataLabelsText({ x: textPos.newX, y: textPos.newY, text: text, textAnchor: textPos.textAnchor, i: i, j: i, parent: elXAxisWrap, color: xaxisLabelsConfig.style.colors[i] ? xaxisLabelsConfig.style.colors[i] : '#a8a8a8', dataLabelsConfig: _objectSpread2({ textAnchor: textPos.textAnchor, dropShadow: { enabled: false } }, xaxisLabelsConfig), offsetCorrection: false }); } }); return elXAxisWrap; } }, { key: "createPaths", value: function createPaths(pos, origin) { var _this4 = this; var linePathsTo = []; var linePathsFrom = []; var areaPathsTo = []; var areaPathsFrom = []; if (pos.length) { linePathsFrom = [this.graphics.move(origin.x, origin.y)]; areaPathsFrom = [this.graphics.move(origin.x, origin.y)]; var linePathTo = this.graphics.move(pos[0].x, pos[0].y); var areaPathTo = this.graphics.move(pos[0].x, pos[0].y); pos.forEach(function (p, i) { linePathTo += _this4.graphics.line(p.x, p.y); areaPathTo += _this4.graphics.line(p.x, p.y); if (i === pos.length - 1) { linePathTo += 'Z'; areaPathTo += 'Z'; } }); linePathsTo.push(linePathTo); areaPathsTo.push(areaPathTo); } return { linePathsFrom: linePathsFrom, linePathsTo: linePathsTo, areaPathsFrom: areaPathsFrom, areaPathsTo: areaPathsTo }; } }, { key: "getTextPos", value: function getTextPos(pos, polygonSize) { var limit = 10; var textAnchor = 'middle'; var newX = pos.x; var newY = pos.y; if (Math.abs(pos.x) >= limit) { if (pos.x > 0) { textAnchor = 'start'; newX += 10; } else if (pos.x < 0) { textAnchor = 'end'; newX -= 10; } } else { textAnchor = 'middle'; } if (Math.abs(pos.y) >= polygonSize - limit) { if (pos.y < 0) { newY -= 10; } else if (pos.y > 0) { newY += 10; } } return { textAnchor: textAnchor, newX: newX, newY: newY }; } }, { key: "getPreviousPath", value: function getPreviousPath(realIndex) { var w = this.w; var pathFrom = null; for (var pp = 0; pp < w.globals.previousPaths.length; pp++) { var gpp = w.globals.previousPaths[pp]; if (gpp.paths.length > 0 && parseInt(gpp.realIndex, 10) === parseInt(realIndex, 10)) { if (typeof w.globals.previousPaths[pp].paths[0] !== 'undefined') { pathFrom = w.globals.previousPaths[pp].paths[0].d; } } } return pathFrom; } }, { key: "getDataPointsPos", value: function getDataPointsPos(dataRadiusArr, angleArr) { var dataPointsLen = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.dataPointsLen; dataRadiusArr = dataRadiusArr || []; angleArr = angleArr || []; var dataPointsPosArray = []; for (var j = 0; j < dataPointsLen; j++) { var curPointPos = {}; curPointPos.x = dataRadiusArr[j] * Math.sin(angleArr[j]); curPointPos.y = -dataRadiusArr[j] * Math.cos(angleArr[j]); dataPointsPosArray.push(curPointPos); } return dataPointsPosArray; } }, { key: "getPolygonPos", value: function getPolygonPos(size) { var dotsArray = []; var angle = Math.PI * 2 / this.dataPointsLen; for (var i = 0; i < this.dataPointsLen; i++) { var curPos = {}; curPos.x = size * Math.sin(i * angle); curPos.y = -size * Math.cos(i * angle); dotsArray.push(curPos); } return dotsArray; } }]); return Radar; }(); /** * ApexCharts Radial Class for drawing Circle / Semi Circle Charts. * @module Radial **/ var Radial = /*#__PURE__*/function (_Pie) { _inherits(Radial, _Pie); function Radial(ctx) { var _this; _classCallCheck(this, Radial); _this = _possibleConstructorReturn(this, _getPrototypeOf(Radial).call(this, ctx)); _this.ctx = ctx; _this.w = ctx.w; _this.animBeginArr = [0]; _this.animDur = 0; var w = _this.w; _this.startAngle = w.config.plotOptions.radialBar.startAngle; _this.endAngle = w.config.plotOptions.radialBar.endAngle; _this.totalAngle = Math.abs(w.config.plotOptions.radialBar.endAngle - w.config.plotOptions.radialBar.startAngle); _this.trackStartAngle = w.config.plotOptions.radialBar.track.startAngle; _this.trackEndAngle = w.config.plotOptions.radialBar.track.endAngle; _this.radialDataLabels = w.config.plotOptions.radialBar.dataLabels; if (!_this.trackStartAngle) _this.trackStartAngle = _this.startAngle; if (!_this.trackEndAngle) _this.trackEndAngle = _this.endAngle; if (_this.endAngle === 360) _this.endAngle = 359.99; _this.fullAngle = 360 - w.config.plotOptions.radialBar.endAngle - w.config.plotOptions.radialBar.startAngle; _this.margin = parseInt(w.config.plotOptions.radialBar.track.margin, 10); return _this; } _createClass(Radial, [{ key: "draw", value: function draw(series) { var w = this.w; var graphics = new Graphics(this.ctx); var ret = graphics.group({ class: 'apexcharts-radialbar' }); if (w.globals.noData) return ret; var elSeries = graphics.group(); var centerY = this.defaultSize / 2; var centerX = w.globals.gridWidth / 2; var size = this.defaultSize / 2.05; if (!w.config.chart.sparkline.enabled) { size = size - w.config.stroke.width - w.config.chart.dropShadow.blur; } var colorArr = w.globals.fill.colors; if (w.config.plotOptions.radialBar.track.show) { var elTracks = this.drawTracks({ size: size, centerX: centerX, centerY: centerY, colorArr: colorArr, series: series }); elSeries.add(elTracks); } var elG = this.drawArcs({ size: size, centerX: centerX, centerY: centerY, colorArr: colorArr, series: series }); var totalAngle = 360; if (w.config.plotOptions.radialBar.startAngle < 0) { totalAngle = this.totalAngle; } var angleRatio = (360 - totalAngle) / 360; w.globals.radialSize = size - size * angleRatio; if (this.radialDataLabels.value.show) { var offset = Math.max(this.radialDataLabels.value.offsetY, this.radialDataLabels.name.offsetY); w.globals.radialSize += offset * angleRatio; } elSeries.add(elG.g); if (w.config.plotOptions.radialBar.hollow.position === 'front') { elG.g.add(elG.elHollow); if (elG.dataLabels) { elG.g.add(elG.dataLabels); } } ret.add(elSeries); return ret; } }, { key: "drawTracks", value: function drawTracks(opts) { var w = this.w; var graphics = new Graphics(this.ctx); var g = graphics.group({ class: 'apexcharts-tracks' }); var filters = new Filters(this.ctx); var fill = new Fill(this.ctx); var strokeWidth = this.getStrokeWidth(opts); opts.size = opts.size - strokeWidth / 2; for (var i = 0; i < opts.series.length; i++) { var elRadialBarTrack = graphics.group({ class: 'apexcharts-radialbar-track apexcharts-track' }); g.add(elRadialBarTrack); elRadialBarTrack.attr({ rel: i + 1 }); opts.size = opts.size - strokeWidth - this.margin; var trackConfig = w.config.plotOptions.radialBar.track; var pathFill = fill.fillPath({ seriesNumber: 0, size: opts.size, fillColors: Array.isArray(trackConfig.background) ? trackConfig.background[i] : trackConfig.background, solid: true }); var startAngle = this.trackStartAngle; var endAngle = this.trackEndAngle; if (Math.abs(endAngle) + Math.abs(startAngle) >= 360) endAngle = 360 - Math.abs(this.startAngle) - 0.1; var elPath = graphics.drawPath({ d: '', stroke: pathFill, strokeWidth: strokeWidth * parseInt(trackConfig.strokeWidth, 10) / 100, fill: 'none', strokeOpacity: trackConfig.opacity, classes: 'apexcharts-radialbar-area' }); if (trackConfig.dropShadow.enabled) { var shadow = trackConfig.dropShadow; filters.dropShadow(elPath, shadow); } elRadialBarTrack.add(elPath); elPath.attr('id', 'apexcharts-radialbarTrack-' + i); this.animatePaths(elPath, { centerX: opts.centerX, centerY: opts.centerY, endAngle: endAngle, startAngle: startAngle, size: opts.size, i: i, totalItems: 2, animBeginArr: 0, dur: 0, isTrack: true, easing: w.globals.easing }); } return g; } }, { key: "drawArcs", value: function drawArcs(opts) { var w = this.w; // size, donutSize, centerX, centerY, colorArr, lineColorArr, sectorAngleArr, series var graphics = new Graphics(this.ctx); var fill = new Fill(this.ctx); var filters = new Filters(this.ctx); var g = graphics.group(); var strokeWidth = this.getStrokeWidth(opts); opts.size = opts.size - strokeWidth / 2; var hollowFillID = w.config.plotOptions.radialBar.hollow.background; var hollowSize = opts.size - strokeWidth * opts.series.length - this.margin * opts.series.length - strokeWidth * parseInt(w.config.plotOptions.radialBar.track.strokeWidth, 10) / 100 / 2; var hollowRadius = hollowSize - w.config.plotOptions.radialBar.hollow.margin; if (w.config.plotOptions.radialBar.hollow.image !== undefined) { hollowFillID = this.drawHollowImage(opts, g, hollowSize, hollowFillID); } var elHollow = this.drawHollow({ size: hollowRadius, centerX: opts.centerX, centerY: opts.centerY, fill: hollowFillID ? hollowFillID : 'transparent' }); if (w.config.plotOptions.radialBar.hollow.dropShadow.enabled) { var shadow = w.config.plotOptions.radialBar.hollow.dropShadow; filters.dropShadow(elHollow, shadow); } var shown = 1; if (!this.radialDataLabels.total.show && w.globals.series.length > 1) { shown = 0; } var dataLabels = null; if (this.radialDataLabels.show) { dataLabels = this.renderInnerDataLabels(this.radialDataLabels, { hollowSize: hollowSize, centerX: opts.centerX, centerY: opts.centerY, opacity: shown }); } if (w.config.plotOptions.radialBar.hollow.position === 'back') { g.add(elHollow); if (dataLabels) { g.add(dataLabels); } } var reverseLoop = false; if (w.config.plotOptions.radialBar.inverseOrder) { reverseLoop = true; } for (var i = reverseLoop ? opts.series.length - 1 : 0; reverseLoop ? i >= 0 : i < opts.series.length; reverseLoop ? i-- : i++) { var elRadialBarArc = graphics.group({ class: "apexcharts-series apexcharts-radial-series", seriesName: Utils.escapeString(w.globals.seriesNames[i]) }); g.add(elRadialBarArc); elRadialBarArc.attr({ rel: i + 1, 'data:realIndex': i }); this.ctx.series.addCollapsedClassToSeries(elRadialBarArc, i); opts.size = opts.size - strokeWidth - this.margin; var pathFill = fill.fillPath({ seriesNumber: i, size: opts.size, value: opts.series[i] }); var startAngle = this.startAngle; var prevStartAngle = void 0; // if data exceeds 100, make it 100 var dataValue = Utils.negToZero(opts.series[i] > 100 ? 100 : opts.series[i]) / 100; var endAngle = Math.round(this.totalAngle * dataValue) + this.startAngle; var prevEndAngle = void 0; if (w.globals.dataChanged) { prevStartAngle = this.startAngle; prevEndAngle = Math.round(this.totalAngle * Utils.negToZero(w.globals.previousPaths[i]) / 100) + prevStartAngle; } var currFullAngle = Math.abs(endAngle) + Math.abs(startAngle); if (currFullAngle >= 360) { endAngle = endAngle - 0.01; } var prevFullAngle = Math.abs(prevEndAngle) + Math.abs(prevStartAngle); if (prevFullAngle >= 360) { prevEndAngle = prevEndAngle - 0.01; } var angle = endAngle - startAngle; var dashArray = Array.isArray(w.config.stroke.dashArray) ? w.config.stroke.dashArray[i] : w.config.stroke.dashArray; var elPath = graphics.drawPath({ d: '', stroke: pathFill, strokeWidth: strokeWidth, fill: 'none', fillOpacity: w.config.fill.opacity, classes: 'apexcharts-radialbar-area apexcharts-radialbar-slice-' + i, strokeDashArray: dashArray }); Graphics.setAttrs(elPath.node, { 'data:angle': angle, 'data:value': opts.series[i] }); if (w.config.chart.dropShadow.enabled) { var _shadow = w.config.chart.dropShadow; filters.dropShadow(elPath, _shadow, i); } this.addListeners(elPath, this.radialDataLabels); elRadialBarArc.add(elPath); elPath.attr({ index: 0, j: i }); var dur = 0; if (this.initialAnim && !w.globals.resized && !w.globals.dataChanged) { dur = (endAngle - startAngle) / 360 * w.config.chart.animations.speed; this.animDur = dur / (opts.series.length * 1.2) + this.animDur; this.animBeginArr.push(this.animDur); } if (w.globals.dataChanged) { dur = (endAngle - startAngle) / 360 * w.config.chart.animations.dynamicAnimation.speed; this.animDur = dur / (opts.series.length * 1.2) + this.animDur; this.animBeginArr.push(this.animDur); } this.animatePaths(elPath, { centerX: opts.centerX, centerY: opts.centerY, endAngle: endAngle, startAngle: startAngle, prevEndAngle: prevEndAngle, prevStartAngle: prevStartAngle, size: opts.size, i: i, totalItems: 2, animBeginArr: this.animBeginArr, dur: dur, shouldSetPrevPaths: true, easing: w.globals.easing }); } return { g: g, elHollow: elHollow, dataLabels: dataLabels }; } }, { key: "drawHollow", value: function drawHollow(opts) { var graphics = new Graphics(this.ctx); var circle = graphics.drawCircle(opts.size * 2); circle.attr({ class: 'apexcharts-radialbar-hollow', cx: opts.centerX, cy: opts.centerY, r: opts.size, fill: opts.fill }); return circle; } }, { key: "drawHollowImage", value: function drawHollowImage(opts, g, hollowSize, hollowFillID) { var w = this.w; var fill = new Fill(this.ctx); var randID = Utils.randomId(); var hollowFillImg = w.config.plotOptions.radialBar.hollow.image; if (w.config.plotOptions.radialBar.hollow.imageClipped) { fill.clippedImgArea({ width: hollowSize, height: hollowSize, image: hollowFillImg, patternID: "pattern".concat(w.globals.cuid).concat(randID) }); hollowFillID = "url(#pattern".concat(w.globals.cuid).concat(randID, ")"); } else { var imgWidth = w.config.plotOptions.radialBar.hollow.imageWidth; var imgHeight = w.config.plotOptions.radialBar.hollow.imageHeight; if (imgWidth === undefined && imgHeight === undefined) { var image = w.globals.dom.Paper.image(hollowFillImg).loaded(function (loader) { this.move(opts.centerX - loader.width / 2 + w.config.plotOptions.radialBar.hollow.imageOffsetX, opts.centerY - loader.height / 2 + w.config.plotOptions.radialBar.hollow.imageOffsetY); }); g.add(image); } else { var _image = w.globals.dom.Paper.image(hollowFillImg).loaded(function (loader) { this.move(opts.centerX - imgWidth / 2 + w.config.plotOptions.radialBar.hollow.imageOffsetX, opts.centerY - imgHeight / 2 + w.config.plotOptions.radialBar.hollow.imageOffsetY); this.size(imgWidth, imgHeight); }); g.add(_image); } } return hollowFillID; } }, { key: "getStrokeWidth", value: function getStrokeWidth(opts) { var w = this.w; return opts.size * (100 - parseInt(w.config.plotOptions.radialBar.hollow.size, 10)) / 100 / (opts.series.length + 1) - this.margin; } }]); return Radial; }(Pie); /** * ApexCharts RangeBar Class responsible for drawing Range/Timeline Bars. * * @module RangeBar **/ var RangeBar = /*#__PURE__*/function (_Bar) { _inherits(RangeBar, _Bar); function RangeBar() { _classCallCheck(this, RangeBar); return _possibleConstructorReturn(this, _getPrototypeOf(RangeBar).apply(this, arguments)); } _createClass(RangeBar, [{ key: "draw", value: function draw(series, seriesIndex) { var w = this.w; var graphics = new Graphics(this.ctx); this.rangeBarOptions = this.w.config.plotOptions.rangeBar; this.series = series; this.seriesRangeStart = w.globals.seriesRangeStart; this.seriesRangeEnd = w.globals.seriesRangeEnd; this.barHelpers.initVariables(series); var ret = graphics.group({ class: 'apexcharts-rangebar-series apexcharts-plot-series' }); for (var i = 0; i < series.length; i++) { var x = void 0, y = void 0, xDivision = void 0, // xDivision is the GRIDWIDTH divided by number of datapoints (columns) yDivision = void 0, // yDivision is the GRIDHEIGHT divided by number of datapoints (bars) zeroH = void 0, // zeroH is the baseline where 0 meets y axis zeroW = void 0; // zeroW is the baseline where 0 meets x axis var realIndex = w.globals.comboCharts ? seriesIndex[i] : i; // el to which series will be drawn var elSeries = graphics.group({ class: "apexcharts-series", seriesName: Utils.escapeString(w.globals.seriesNames[realIndex]), rel: i + 1, 'data:realIndex': realIndex }); if (series[i].length > 0) { this.visibleI = this.visibleI + 1; } var barHeight = 0; var barWidth = 0; if (this.yRatio.length > 1) { this.yaxisIndex = realIndex; } var initPositions = this.barHelpers.initialPositions(); y = initPositions.y; zeroW = initPositions.zeroW; x = initPositions.x; barWidth = initPositions.barWidth; xDivision = initPositions.xDivision; zeroH = initPositions.zeroH; // eldatalabels var elDataLabelsWrap = graphics.group({ class: 'apexcharts-datalabels', 'data:realIndex': realIndex }); for (var j = 0; j < w.globals.dataPoints; j++) { var strokeWidth = this.barHelpers.getStrokeWidth(i, j, realIndex); var y1 = this.seriesRangeStart[i][j]; var y2 = this.seriesRangeEnd[i][j]; var paths = null; var barYPosition = null; var params = { x: x, y: y, strokeWidth: strokeWidth, elSeries: elSeries }; yDivision = initPositions.yDivision; barHeight = initPositions.barHeight; if (this.isHorizontal) { barYPosition = y + barHeight * this.visibleI; var srty = (yDivision - barHeight * this.seriesLen) / 2; if (typeof w.config.series[i].data[j] === 'undefined') { // no data exists for further indexes, hence we need to get out the innr loop. // As we are iterating over total datapoints, there is a possiblity the series might not have data for j index break; } if (this.isTimelineBar && w.config.series[i].data[j].x) { var positions = this.detectOverlappingBars({ i: i, j: j, barYPosition: barYPosition, srty: srty, barHeight: barHeight, yDivision: yDivision, initPositions: initPositions }); barHeight = positions.barHeight; barYPosition = positions.barYPosition; } paths = this.drawRangeBarPaths(_objectSpread2({ indexes: { i: i, j: j, realIndex: realIndex }, barHeight: barHeight, barYPosition: barYPosition, zeroW: zeroW, yDivision: yDivision, y1: y1, y2: y2 }, params)); barWidth = paths.barWidth; } else { paths = this.drawRangeColumnPaths(_objectSpread2({ indexes: { i: i, j: j, realIndex: realIndex }, zeroH: zeroH, barWidth: barWidth, xDivision: xDivision }, params)); barHeight = paths.barHeight; } y = paths.y; x = paths.x; var pathFill = this.barHelpers.getPathFillColor(series, i, j, realIndex); var lineFill = w.globals.stroke.colors[realIndex]; this.renderSeries({ realIndex: realIndex, pathFill: pathFill, lineFill: lineFill, j: j, i: i, x: x, y: y, y1: y1, y2: y2, pathFrom: paths.pathFrom, pathTo: paths.pathTo, strokeWidth: strokeWidth, elSeries: elSeries, series: series, barHeight: barHeight, barYPosition: barYPosition, barWidth: barWidth, elDataLabelsWrap: elDataLabelsWrap, visibleSeries: this.visibleI, type: 'rangebar' }); } ret.add(elSeries); } return ret; } }, { key: "detectOverlappingBars", value: function detectOverlappingBars(_ref) { var i = _ref.i, j = _ref.j, barYPosition = _ref.barYPosition, srty = _ref.srty, barHeight = _ref.barHeight, yDivision = _ref.yDivision, initPositions = _ref.initPositions; var w = this.w; var overlaps = []; var rangeName = w.config.series[i].data[j].rangeName; var labelX = w.config.series[i].data[j].x; var rowIndex = w.globals.labels.indexOf(labelX); var overlappedIndex = w.globals.seriesRangeBarTimeline[i].findIndex(function (tx) { return tx.x === labelX && tx.overlaps.length > 0; }); barYPosition = srty + barHeight * this.visibleI + yDivision * rowIndex; if (overlappedIndex > -1) { overlaps = w.globals.seriesRangeBarTimeline[i][overlappedIndex].overlaps; if (overlaps.indexOf(rangeName) > -1) { barHeight = initPositions.barHeight / overlaps.length; barYPosition = barHeight * this.visibleI + yDivision * (100 - parseInt(this.barOptions.barHeight, 10)) / 100 / 2 + barHeight * (this.visibleI + overlaps.indexOf(rangeName)) + yDivision * rowIndex; } } return { barYPosition: barYPosition, barHeight: barHeight }; } }, { key: "drawRangeColumnPaths", value: function drawRangeColumnPaths(_ref2) { var indexes = _ref2.indexes, x = _ref2.x, strokeWidth = _ref2.strokeWidth, xDivision = _ref2.xDivision, barWidth = _ref2.barWidth, zeroH = _ref2.zeroH; var w = this.w; var i = indexes.i; var j = indexes.j; var yRatio = this.yRatio[this.yaxisIndex]; var realIndex = indexes.realIndex; var range = this.getRangeValue(realIndex, j); var y1 = Math.min(range.start, range.end); var y2 = Math.max(range.start, range.end); if (w.globals.isXNumeric) { x = (w.globals.seriesX[i][j] - w.globals.minX) / this.xRatio - barWidth / 2; } var barXPosition = x + barWidth * this.visibleI; if (typeof this.series[i][j] === 'undefined' || this.series[i][j] === null) { y1 = zeroH; } else { y1 = zeroH - y1 / yRatio; y2 = zeroH - y2 / yRatio; } var barHeight = Math.abs(y2 - y1); var paths = this.barHelpers.getColumnPaths({ barXPosition: barXPosition, barWidth: barWidth, y1: y1, y2: y2, strokeWidth: this.strokeWidth, series: this.seriesRangeEnd, i: realIndex, j: j, w: w }); if (!w.globals.isXNumeric) { x = x + xDivision; } return { pathTo: paths.pathTo, pathFrom: paths.pathFrom, barHeight: barHeight, x: x, y: y2, barXPosition: barXPosition }; } }, { key: "drawRangeBarPaths", value: function drawRangeBarPaths(_ref3) { var indexes = _ref3.indexes, y = _ref3.y, y1 = _ref3.y1, y2 = _ref3.y2, yDivision = _ref3.yDivision, barHeight = _ref3.barHeight, barYPosition = _ref3.barYPosition, zeroW = _ref3.zeroW; var w = this.w; var x1 = zeroW + y1 / this.invertedYRatio; var x2 = zeroW + y2 / this.invertedYRatio; var barWidth = Math.abs(x2 - x1); var paths = this.barHelpers.getBarpaths({ barYPosition: barYPosition, barHeight: barHeight, x1: x1, x2: x2, strokeWidth: this.strokeWidth, series: this.seriesRangeEnd, i: indexes.realIndex, j: indexes.j, w: w }); if (!w.globals.isXNumeric) { y = y + yDivision; } return { pathTo: paths.pathTo, pathFrom: paths.pathFrom, barWidth: barWidth, x: x2, y: y }; } }, { key: "getRangeValue", value: function getRangeValue(i, j) { var w = this.w; return { start: w.globals.seriesRangeStart[i][j], end: w.globals.seriesRangeEnd[i][j] }; } }]); return RangeBar; }(Bar); var Helpers$4 = /*#__PURE__*/function () { function Helpers(lineCtx) { _classCallCheck(this, Helpers); this.w = lineCtx.w; this.lineCtx = lineCtx; } _createClass(Helpers, [{ key: "sameValueSeriesFix", value: function sameValueSeriesFix(i, series) { var w = this.w; if (w.config.chart.type === 'line' && (w.config.fill.type === 'gradient' || w.config.fill.type[i] === 'gradient')) { var coreUtils = new CoreUtils(this.lineCtx.ctx, w); // a small adjustment to allow gradient line to draw correctly for all same values /* #fix https://github.com/apexcharts/apexcharts.js/issues/358 */ if (coreUtils.seriesHaveSameValues(i)) { var gSeries = series[i].slice(); gSeries[gSeries.length - 1] = gSeries[gSeries.length - 1] + 0.000001; series[i] = gSeries; } } return series; } }, { key: "calculatePoints", value: function calculatePoints(_ref) { var series = _ref.series, realIndex = _ref.realIndex, x = _ref.x, y = _ref.y, i = _ref.i, j = _ref.j, prevY = _ref.prevY; var w = this.w; var ptX = []; var ptY = []; if (j === 0) { var xPT1st = this.lineCtx.categoryAxisCorrection + w.config.markers.offsetX; // the first point for line series // we need to check whether it's not a time series, because a time series may // start from the middle of the x axis if (w.globals.isXNumeric) { xPT1st = (w.globals.seriesX[realIndex][0] - w.globals.minX) / this.lineCtx.xRatio + w.config.markers.offsetX; } // push 2 points for the first data values ptX.push(xPT1st); ptY.push(Utils.isNumber(series[i][0]) ? prevY + w.config.markers.offsetY : null); ptX.push(x + w.config.markers.offsetX); ptY.push(Utils.isNumber(series[i][j + 1]) ? y + w.config.markers.offsetY : null); } else { ptX.push(x + w.config.markers.offsetX); ptY.push(Utils.isNumber(series[i][j + 1]) ? y + w.config.markers.offsetY : null); } var pointsPos = { x: ptX, y: ptY }; return pointsPos; } }, { key: "checkPreviousPaths", value: function checkPreviousPaths(_ref2) { var pathFromLine = _ref2.pathFromLine, pathFromArea = _ref2.pathFromArea, realIndex = _ref2.realIndex; var w = this.w; for (var pp = 0; pp < w.globals.previousPaths.length; pp++) { var gpp = w.globals.previousPaths[pp]; if ((gpp.type === 'line' || gpp.type === 'area') && gpp.paths.length > 0 && parseInt(gpp.realIndex, 10) === parseInt(realIndex, 10)) { if (gpp.type === 'line') { this.lineCtx.appendPathFrom = false; pathFromLine = w.globals.previousPaths[pp].paths[0].d; } else if (gpp.type === 'area') { this.lineCtx.appendPathFrom = false; pathFromArea = w.globals.previousPaths[pp].paths[0].d; if (w.config.stroke.show && w.globals.previousPaths[pp].paths[1]) { pathFromLine = w.globals.previousPaths[pp].paths[1].d; } } } } return { pathFromLine: pathFromLine, pathFromArea: pathFromArea }; } }, { key: "determineFirstPrevY", value: function determineFirstPrevY(_ref3) { var i = _ref3.i, series = _ref3.series, prevY = _ref3.prevY, lineYPosition = _ref3.lineYPosition; var w = this.w; if (typeof series[i][0] !== 'undefined') { if (w.config.chart.stacked) { if (i > 0) { // 1st y value of previous series lineYPosition = this.lineCtx.prevSeriesY[i - 1][0]; } else { // the first series will not have prevY values lineYPosition = this.lineCtx.zeroY; } } else { lineYPosition = this.lineCtx.zeroY; } prevY = lineYPosition - series[i][0] / this.lineCtx.yRatio[this.lineCtx.yaxisIndex] + (this.lineCtx.isReversed ? series[i][0] / this.lineCtx.yRatio[this.lineCtx.yaxisIndex] : 0) * 2; } else { // the first value in the current series is null if (w.config.chart.stacked && i > 0 && typeof series[i][0] === 'undefined') { // check for undefined value (undefined value will occur when we clear the series while user clicks on legend to hide serieses) for (var s = i - 1; s >= 0; s--) { // for loop to get to 1st previous value until we get it if (series[s][0] !== null && typeof series[s][0] !== 'undefined') { lineYPosition = this.lineCtx.prevSeriesY[s][0]; prevY = lineYPosition; break; } } } } return { prevY: prevY, lineYPosition: lineYPosition }; } }]); return Helpers; }(); /** * ApexCharts Line Class responsible for drawing Line / Area Charts. * This class is also responsible for generating values for Bubble/Scatter charts, so need to rename it to Axis Charts to avoid confusions * @module Line **/ var Line = /*#__PURE__*/function () { function Line(ctx, xyRatios, isPointsChart) { _classCallCheck(this, Line); this.ctx = ctx; this.w = ctx.w; this.xyRatios = xyRatios; this.pointsChart = !(this.w.config.chart.type !== 'bubble' && this.w.config.chart.type !== 'scatter') || isPointsChart; this.scatter = new Scatter(this.ctx); this.noNegatives = this.w.globals.minX === Number.MAX_VALUE; this.lineHelpers = new Helpers$4(this); this.markers = new Markers(this.ctx); this.prevSeriesY = []; this.categoryAxisCorrection = 0; this.yaxisIndex = 0; } _createClass(Line, [{ key: "draw", value: function draw(series, ptype, seriesIndex) { var w = this.w; var graphics = new Graphics(this.ctx); var type = w.globals.comboCharts ? ptype : w.config.chart.type; var ret = graphics.group({ class: "apexcharts-".concat(type, "-series apexcharts-plot-series") }); var coreUtils = new CoreUtils(this.ctx, w); this.yRatio = this.xyRatios.yRatio; this.zRatio = this.xyRatios.zRatio; this.xRatio = this.xyRatios.xRatio; this.baseLineY = this.xyRatios.baseLineY; series = coreUtils.getLogSeries(series); this.yRatio = coreUtils.getLogYRatios(this.yRatio); // push all series in an array, so we can draw in reverse order (for stacked charts) var allSeries = []; for (var i = 0; i < series.length; i++) { series = this.lineHelpers.sameValueSeriesFix(i, series); var realIndex = w.globals.comboCharts ? seriesIndex[i] : i; this._initSerieVariables(series, i, realIndex); var yArrj = []; // hold y values of current iterating series var xArrj = []; // hold x values of current iterating series var x = w.globals.padHorizontal + this.categoryAxisCorrection; var y = 1; var linePaths = []; var areaPaths = []; this.ctx.series.addCollapsedClassToSeries(this.elSeries, realIndex); if (w.globals.isXNumeric && w.globals.seriesX.length > 0) { x = (w.globals.seriesX[realIndex][0] - w.globals.minX) / this.xRatio; } xArrj.push(x); var pX = x; var pY = void 0; var prevX = pX; var prevY = this.zeroY; var lineYPosition = 0; // the first value in the current series is not null or undefined var firstPrevY = this.lineHelpers.determineFirstPrevY({ i: i, series: series, prevY: prevY, lineYPosition: lineYPosition }); prevY = firstPrevY.prevY; yArrj.push(prevY); pY = prevY; var pathsFrom = this._calculatePathsFrom({ series: series, i: i, realIndex: realIndex, prevX: prevX, prevY: prevY }); var paths = this._iterateOverDataPoints({ series: series, realIndex: realIndex, i: i, x: x, y: y, pX: pX, pY: pY, pathsFrom: pathsFrom, linePaths: linePaths, areaPaths: areaPaths, seriesIndex: seriesIndex, lineYPosition: lineYPosition, xArrj: xArrj, yArrj: yArrj }); this._handlePaths({ type: type, realIndex: realIndex, i: i, paths: paths }); this.elSeries.add(this.elPointsMain); this.elSeries.add(this.elDataLabelsWrap); allSeries.push(this.elSeries); } for (var s = allSeries.length; s > 0; s--) { ret.add(allSeries[s - 1]); } return ret; } }, { key: "_initSerieVariables", value: function _initSerieVariables(series, i, realIndex) { var w = this.w; var graphics = new Graphics(this.ctx); // width divided into equal parts this.xDivision = w.globals.gridWidth / (w.globals.dataPoints - (w.config.xaxis.tickPlacement === 'on' ? 1 : 0)); this.strokeWidth = Array.isArray(w.config.stroke.width) ? w.config.stroke.width[realIndex] : w.config.stroke.width; if (this.yRatio.length > 1) { this.yaxisIndex = realIndex; } this.isReversed = w.config.yaxis[this.yaxisIndex] && w.config.yaxis[this.yaxisIndex].reversed; // zeroY is the 0 value in y series which can be used in negative charts this.zeroY = w.globals.gridHeight - this.baseLineY[this.yaxisIndex] - (this.isReversed ? w.globals.gridHeight : 0) + (this.isReversed ? this.baseLineY[this.yaxisIndex] * 2 : 0); this.areaBottomY = this.zeroY; if (this.zeroY > w.globals.gridHeight) { this.areaBottomY = w.globals.gridHeight; } this.categoryAxisCorrection = this.xDivision / 2; // el to which series will be drawn this.elSeries = graphics.group({ class: "apexcharts-series", seriesName: Utils.escapeString(w.globals.seriesNames[realIndex]) }); // points this.elPointsMain = graphics.group({ class: 'apexcharts-series-markers-wrap', 'data:realIndex': realIndex }); // eldatalabels this.elDataLabelsWrap = graphics.group({ class: 'apexcharts-datalabels', 'data:realIndex': realIndex }); var longestSeries = series[i].length === w.globals.dataPoints; this.elSeries.attr({ 'data:longestSeries': longestSeries, rel: i + 1, 'data:realIndex': realIndex }); this.appendPathFrom = true; } }, { key: "_calculatePathsFrom", value: function _calculatePathsFrom(_ref) { var series = _ref.series, i = _ref.i, realIndex = _ref.realIndex, prevX = _ref.prevX, prevY = _ref.prevY; var w = this.w; var graphics = new Graphics(this.ctx); var linePath, areaPath, pathFromLine, pathFromArea; if (series[i][0] === null) { // when the first value itself is null, we need to move the pointer to a location where a null value is not found for (var s = 0; s < series[i].length; s++) { if (series[i][s] !== null) { prevX = this.xDivision * s; prevY = this.zeroY - series[i][s] / this.yRatio[this.yaxisIndex]; linePath = graphics.move(prevX, prevY); areaPath = graphics.move(prevX, this.areaBottomY); break; } } } else { linePath = graphics.move(prevX, prevY); areaPath = graphics.move(prevX, this.areaBottomY) + graphics.line(prevX, prevY); } pathFromLine = graphics.move(-1, this.zeroY) + graphics.line(-1, this.zeroY); pathFromArea = graphics.move(-1, this.zeroY) + graphics.line(-1, this.zeroY); if (w.globals.previousPaths.length > 0) { var pathFrom = this.lineHelpers.checkPreviousPaths({ pathFromLine: pathFromLine, pathFromArea: pathFromArea, realIndex: realIndex }); pathFromLine = pathFrom.pathFromLine; pathFromArea = pathFrom.pathFromArea; } return { prevX: prevX, prevY: prevY, linePath: linePath, areaPath: areaPath, pathFromLine: pathFromLine, pathFromArea: pathFromArea }; } }, { key: "_handlePaths", value: function _handlePaths(_ref2) { var type = _ref2.type, realIndex = _ref2.realIndex, i = _ref2.i, paths = _ref2.paths; var w = this.w; var graphics = new Graphics(this.ctx); var fill = new Fill(this.ctx); // push all current y values array to main PrevY Array this.prevSeriesY.push(paths.yArrj); // push all x val arrays into main xArr w.globals.seriesXvalues[realIndex] = paths.xArrj; w.globals.seriesYvalues[realIndex] = paths.yArrj; // these elements will be shown after area path animation completes if (!this.pointsChart) { w.globals.delayedElements.push({ el: this.elPointsMain.node, index: realIndex }); } var defaultRenderedPathOptions = { i: i, realIndex: realIndex, animationDelay: i, initialSpeed: w.config.chart.animations.speed, dataChangeSpeed: w.config.chart.animations.dynamicAnimation.speed, className: "apexcharts-".concat(type) }; if (type === 'area') { var pathFill = fill.fillPath({ seriesNumber: realIndex }); for (var p = 0; p < paths.areaPaths.length; p++) { var renderedPath = graphics.renderPaths(_objectSpread2({}, defaultRenderedPathOptions, { pathFrom: paths.pathFromArea, pathTo: paths.areaPaths[p], stroke: 'none', strokeWidth: 0, strokeLineCap: null, fill: pathFill })); this.elSeries.add(renderedPath); } } if (w.config.stroke.show && !this.pointsChart) { var lineFill = null; if (type === 'line') { // fillable lines only for lineChart lineFill = fill.fillPath({ seriesNumber: realIndex, i: i }); } else { lineFill = w.globals.stroke.colors[realIndex]; } for (var _p = 0; _p < paths.linePaths.length; _p++) { var _renderedPath = graphics.renderPaths(_objectSpread2({}, defaultRenderedPathOptions, { pathFrom: paths.pathFromLine, pathTo: paths.linePaths[_p], stroke: lineFill, strokeWidth: this.strokeWidth, strokeLineCap: w.config.stroke.lineCap, fill: 'none' })); this.elSeries.add(_renderedPath); } } } }, { key: "_iterateOverDataPoints", value: function _iterateOverDataPoints(_ref3) { var series = _ref3.series, realIndex = _ref3.realIndex, i = _ref3.i, x = _ref3.x, y = _ref3.y, pX = _ref3.pX, pY = _ref3.pY, pathsFrom = _ref3.pathsFrom, linePaths = _ref3.linePaths, areaPaths = _ref3.areaPaths, seriesIndex = _ref3.seriesIndex, lineYPosition = _ref3.lineYPosition, xArrj = _ref3.xArrj, yArrj = _ref3.yArrj; var w = this.w; var graphics = new Graphics(this.ctx); var yRatio = this.yRatio; var prevY = pathsFrom.prevY, linePath = pathsFrom.linePath, areaPath = pathsFrom.areaPath, pathFromLine = pathsFrom.pathFromLine, pathFromArea = pathsFrom.pathFromArea; var minY = Utils.isNumber(w.globals.minYArr[realIndex]) ? w.globals.minYArr[realIndex] : w.globals.minY; var iterations = w.globals.dataPoints > 1 ? w.globals.dataPoints - 1 : w.globals.dataPoints; for (var j = 0; j < iterations; j++) { var isNull = typeof series[i][j + 1] === 'undefined' || series[i][j + 1] === null; if (w.globals.isXNumeric) { var sX = w.globals.seriesX[realIndex][j + 1]; if (typeof w.globals.seriesX[realIndex][j + 1] === 'undefined') { /* fix #374 */ sX = w.globals.seriesX[realIndex][iterations - 1]; } x = (sX - w.globals.minX) / this.xRatio; } else { x = x + this.xDivision; } if (w.config.chart.stacked) { if (i > 0 && w.globals.collapsedSeries.length < w.config.series.length - 1) { // a collapsed series in a stacked bar chart may provide wrong result for the next series, hence find the prevIndex of prev series which is not collapsed - fixes apexcharts.js#1372 var prevIndex = function prevIndex(pi) { var pii = pi; for (var cpi = 0; cpi < w.globals.series.length; cpi++) { if (w.globals.collapsedSeriesIndices.indexOf(pi) > -1) { pii--; break; } } return pii >= 0 ? pii : 0; }; lineYPosition = this.prevSeriesY[prevIndex(i - 1)][j + 1]; } else { // the first series will not have prevY values lineYPosition = this.zeroY; } } else { lineYPosition = this.zeroY; } if (isNull) { y = lineYPosition - minY / yRatio[this.yaxisIndex] + (this.isReversed ? minY / yRatio[this.yaxisIndex] : 0) * 2; } else { y = lineYPosition - series[i][j + 1] / yRatio[this.yaxisIndex] + (this.isReversed ? series[i][j + 1] / yRatio[this.yaxisIndex] : 0) * 2; } // push current X xArrj.push(x); // push current Y that will be used as next series's bottom position yArrj.push(y); var pointsPos = this.lineHelpers.calculatePoints({ series: series, x: x, y: y, realIndex: realIndex, i: i, j: j, prevY: prevY }); var calculatedPaths = this._createPaths({ series: series, i: i, realIndex: realIndex, j: j, x: x, y: y, pX: pX, pY: pY, linePath: linePath, areaPath: areaPath, linePaths: linePaths, areaPaths: areaPaths, seriesIndex: seriesIndex }); areaPaths = calculatedPaths.areaPaths; linePaths = calculatedPaths.linePaths; pX = calculatedPaths.pX; pY = calculatedPaths.pY; areaPath = calculatedPaths.areaPath; linePath = calculatedPaths.linePath; if (this.appendPathFrom) { pathFromLine = pathFromLine + graphics.line(x, this.zeroY); pathFromArea = pathFromArea + graphics.line(x, this.zeroY); } this.handleNullDataPoints(series, pointsPos, i, j, realIndex); this._handleMarkersAndLabels({ pointsPos: pointsPos, series: series, x: x, y: y, prevY: prevY, i: i, j: j, realIndex: realIndex }); } return { yArrj: yArrj, xArrj: xArrj, pathFromArea: pathFromArea, areaPaths: areaPaths, pathFromLine: pathFromLine, linePaths: linePaths }; } }, { key: "_handleMarkersAndLabels", value: function _handleMarkersAndLabels(_ref4) { var pointsPos = _ref4.pointsPos, series = _ref4.series, x = _ref4.x, y = _ref4.y, prevY = _ref4.prevY, i = _ref4.i, j = _ref4.j, realIndex = _ref4.realIndex; var w = this.w; var dataLabels = new DataLabels(this.ctx); if (!this.pointsChart) { if (w.globals.series[i].length > 1) { this.elPointsMain.node.classList.add('apexcharts-element-hidden'); } var elPointsWrap = this.markers.plotChartMarkers(pointsPos, realIndex, j + 1); if (elPointsWrap !== null) { this.elPointsMain.add(elPointsWrap); } } else { // scatter / bubble chart points creation this.scatter.draw(this.elSeries, j, { realIndex: realIndex, pointsPos: pointsPos, zRatio: this.zRatio, elParent: this.elPointsMain }); } var drawnLabels = dataLabels.drawDataLabel(pointsPos, realIndex, j + 1, null); if (drawnLabels !== null) { this.elDataLabelsWrap.add(drawnLabels); } } }, { key: "_createPaths", value: function _createPaths(_ref5) { var series = _ref5.series, i = _ref5.i, realIndex = _ref5.realIndex, j = _ref5.j, x = _ref5.x, y = _ref5.y, pX = _ref5.pX, pY = _ref5.pY, linePath = _ref5.linePath, areaPath = _ref5.areaPath, linePaths = _ref5.linePaths, areaPaths = _ref5.areaPaths, seriesIndex = _ref5.seriesIndex; var w = this.w; var graphics = new Graphics(this.ctx); var curve = w.config.stroke.curve; var areaBottomY = this.areaBottomY; if (Array.isArray(w.config.stroke.curve)) { if (Array.isArray(seriesIndex)) { curve = w.config.stroke.curve[seriesIndex[i]]; } else { curve = w.config.stroke.curve[i]; } } // logic of smooth curve derived from chartist // CREDITS: https://gionkunz.github.io/chartist-js/ if (curve === 'smooth') { var length = (x - pX) * 0.35; if (w.globals.hasNullValues) { if (series[i][j] !== null) { if (series[i][j + 1] !== null) { linePath = graphics.move(pX, pY) + graphics.curve(pX + length, pY, x - length, y, x + 1, y); areaPath = graphics.move(pX + 1, pY) + graphics.curve(pX + length, pY, x - length, y, x + 1, y) + graphics.line(x, areaBottomY) + graphics.line(pX, areaBottomY) + 'z'; } else { linePath = graphics.move(pX, pY); areaPath = graphics.move(pX, pY) + 'z'; } } linePaths.push(linePath); areaPaths.push(areaPath); } else { linePath = linePath + graphics.curve(pX + length, pY, x - length, y, x, y); areaPath = areaPath + graphics.curve(pX + length, pY, x - length, y, x, y); } pX = x; pY = y; if (j === series[i].length - 2) { // last loop, close path areaPath = areaPath + graphics.curve(pX, pY, x, y, x, areaBottomY) + graphics.move(x, y) + 'z'; if (!w.globals.hasNullValues) { linePaths.push(linePath); areaPaths.push(areaPath); } } } else { if (series[i][j + 1] === null) { linePath = linePath + graphics.move(x, y); var numericOrCatX = w.globals.isXNumeric ? (w.globals.seriesX[realIndex][j] - w.globals.minX) / this.xRatio : x - this.xDivision; areaPath = areaPath + graphics.line(numericOrCatX, areaBottomY) + graphics.move(x, y) + 'z'; } if (series[i][j] === null) { linePath = linePath + graphics.move(x, y); areaPath = areaPath + graphics.move(x, areaBottomY); } if (curve === 'stepline') { linePath = linePath + graphics.line(x, null, 'H') + graphics.line(null, y, 'V'); areaPath = areaPath + graphics.line(x, null, 'H') + graphics.line(null, y, 'V'); } else if (curve === 'straight') { linePath = linePath + graphics.line(x, y); areaPath = areaPath + graphics.line(x, y); } if (j === series[i].length - 2) { // last loop, close path areaPath = areaPath + graphics.line(x, areaBottomY) + graphics.move(x, y) + 'z'; linePaths.push(linePath); areaPaths.push(areaPath); } } return { linePaths: linePaths, areaPaths: areaPaths, pX: pX, pY: pY, linePath: linePath, areaPath: areaPath }; } }, { key: "handleNullDataPoints", value: function handleNullDataPoints(series, pointsPos, i, j, realIndex) { var w = this.w; if (series[i][j] === null && w.config.markers.showNullDataPoints || series[i].length === 1) { // fixes apexcharts.js#1282, #1252 var elPointsWrap = this.markers.plotChartMarkers(pointsPos, realIndex, j + 1, this.strokeWidth - w.config.markers.strokeWidth / 2, true); if (elPointsWrap !== null) { this.elPointsMain.add(elPointsWrap); } } } }]); return Line; }(); /** * ApexCharts TimeScale Class for generating time ticks for x-axis. * * @module TimeScale **/ var TimeScale = /*#__PURE__*/function () { function TimeScale(ctx) { _classCallCheck(this, TimeScale); this.ctx = ctx; this.w = ctx.w; this.timeScaleArray = []; this.utc = this.w.config.xaxis.labels.datetimeUTC; } _createClass(TimeScale, [{ key: "calculateTimeScaleTicks", value: function calculateTimeScaleTicks(minX, maxX) { var _this = this; var w = this.w; // null check when no series to show if (w.globals.allSeriesCollapsed) { w.globals.labels = []; w.globals.timescaleLabels = []; return []; } var dt = new DateTime(this.ctx); var daysDiff = (maxX - minX) / (1000 * 60 * 60 * 24); this.determineInterval(daysDiff); w.globals.disableZoomIn = false; w.globals.disableZoomOut = false; if (daysDiff < 0.005) { w.globals.disableZoomIn = true; } else if (daysDiff > 50000) { w.globals.disableZoomOut = true; } var timeIntervals = dt.getTimeUnitsfromTimestamp(minX, maxX, this.utc); var daysWidthOnXAxis = w.globals.gridWidth / daysDiff; var hoursWidthOnXAxis = daysWidthOnXAxis / 24; var minutesWidthOnXAxis = hoursWidthOnXAxis / 60; var numberOfHours = Math.floor(daysDiff * 24); var numberOfMinutes = Math.floor(daysDiff * 24 * 60); var numberOfDays = Math.floor(daysDiff); var numberOfMonths = Math.floor(daysDiff / 30); var numberOfYears = Math.floor(daysDiff / 365); var firstVal = { minMinute: timeIntervals.minMinute, minHour: timeIntervals.minHour, minDate: timeIntervals.minDate, minMonth: timeIntervals.minMonth, minYear: timeIntervals.minYear }; var currentMinute = firstVal.minMinute; var currentHour = firstVal.minHour; var currentMonthDate = firstVal.minDate; var currentDate = firstVal.minDate; var currentMonth = firstVal.minMonth; var currentYear = firstVal.minYear; var params = { firstVal: firstVal, currentMinute: currentMinute, currentHour: currentHour, currentMonthDate: currentMonthDate, currentDate: currentDate, currentMonth: currentMonth, currentYear: currentYear, daysWidthOnXAxis: daysWidthOnXAxis, hoursWidthOnXAxis: hoursWidthOnXAxis, minutesWidthOnXAxis: minutesWidthOnXAxis, numberOfMinutes: numberOfMinutes, numberOfHours: numberOfHours, numberOfDays: numberOfDays, numberOfMonths: numberOfMonths, numberOfYears: numberOfYears }; switch (this.tickInterval) { case 'years': { this.generateYearScale(params); break; } case 'months': case 'half_year': { this.generateMonthScale(params); break; } case 'months_days': case 'months_fortnight': case 'days': case 'week_days': { this.generateDayScale(params); break; } case 'hours': { this.generateHourScale(params); break; } case 'minutes': this.generateMinuteScale(params); break; } // first, we will adjust the month values index // as in the upper function, it is starting from 0 // we will start them from 1 var adjustedMonthInTimeScaleArray = this.timeScaleArray.map(function (ts) { var defaultReturn = { position: ts.position, unit: ts.unit, year: ts.year, day: ts.day ? ts.day : 1, hour: ts.hour ? ts.hour : 0, month: ts.month + 1 }; if (ts.unit === 'month') { return _objectSpread2({}, defaultReturn, { day: 1, value: ts.value + 1 }); } else if (ts.unit === 'day' || ts.unit === 'hour') { return _objectSpread2({}, defaultReturn, { value: ts.value }); } else if (ts.unit === 'minute') { return _objectSpread2({}, defaultReturn, { value: ts.value, minute: ts.value }); } return ts; }); var filteredTimeScale = adjustedMonthInTimeScaleArray.filter(function (ts) { var modulo = 1; var ticks = Math.ceil(w.globals.gridWidth / 120); var value = ts.value; if (w.config.xaxis.tickAmount !== undefined) { ticks = w.config.xaxis.tickAmount; } if (adjustedMonthInTimeScaleArray.length > ticks) { modulo = Math.floor(adjustedMonthInTimeScaleArray.length / ticks); } var shouldNotSkipUnit = false; // there is a big change in unit i.e days to months var shouldNotPrint = false; // should skip these values switch (_this.tickInterval) { case 'years': // make years label denser if (ts.unit === 'year') { shouldNotSkipUnit = true; } break; case 'half_year': modulo = 7; if (ts.unit === 'year') { shouldNotSkipUnit = true; } break; case 'months': modulo = 1; if (ts.unit === 'year') { shouldNotSkipUnit = true; } break; case 'months_fortnight': modulo = 15; if (ts.unit === 'year' || ts.unit === 'month') { shouldNotSkipUnit = true; } if (value === 30) { shouldNotPrint = true; } break; case 'months_days': modulo = 10; if (ts.unit === 'month') { shouldNotSkipUnit = true; } if (value === 30) { shouldNotPrint = true; } break; case 'week_days': modulo = 8; if (ts.unit === 'month') { shouldNotSkipUnit = true; } break; case 'days': modulo = 1; if (ts.unit === 'month') { shouldNotSkipUnit = true; } break; case 'hours': if (ts.unit === 'day') { shouldNotSkipUnit = true; } break; case 'minutes': if (value % 5 !== 0) { shouldNotPrint = true; } break; } if (_this.tickInterval === 'minutes' || _this.tickInterval === 'hours') { if (!shouldNotPrint) { return true; } } else { if ((value % modulo === 0 || shouldNotSkipUnit) && !shouldNotPrint) { return true; } } }); return filteredTimeScale; } }, { key: "recalcDimensionsBasedOnFormat", value: function recalcDimensionsBasedOnFormat(filteredTimeScale, inverted) { var w = this.w; var reformattedTimescaleArray = this.formatDates(filteredTimeScale); var removedOverlappingTS = this.removeOverlappingTS(reformattedTimescaleArray); w.globals.timescaleLabels = removedOverlappingTS.slice(); // at this stage, we need to re-calculate coords of the grid as timeline labels may have altered the xaxis labels coords // The reason we can't do this prior to this stage is because timeline labels depends on gridWidth, and as the ticks are calculated based on available gridWidth, there can be unknown number of ticks generated for different minX and maxX // Dependency on Dimensions(), need to refactor correctly // TODO - find an alternate way to avoid calling this Heavy method twice var dimensions = new Dimensions(this.ctx); dimensions.plotCoords(); } }, { key: "determineInterval", value: function determineInterval(daysDiff) { switch (true) { case daysDiff > 1825: // difference is more than 5 years this.tickInterval = 'years'; break; case daysDiff > 800 && daysDiff <= 1825: this.tickInterval = 'half_year'; break; case daysDiff > 180 && daysDiff <= 800: this.tickInterval = 'months'; break; case daysDiff > 90 && daysDiff <= 180: this.tickInterval = 'months_fortnight'; break; case daysDiff > 60 && daysDiff <= 90: this.tickInterval = 'months_days'; break; case daysDiff > 30 && daysDiff <= 60: this.tickInterval = 'week_days'; break; case daysDiff > 2 && daysDiff <= 30: this.tickInterval = 'days'; break; case daysDiff > 0.1 && daysDiff <= 2: // less than 2 days this.tickInterval = 'hours'; break; case daysDiff < 0.1: this.tickInterval = 'minutes'; break; default: this.tickInterval = 'days'; break; } } }, { key: "generateYearScale", value: function generateYearScale(_ref) { var firstVal = _ref.firstVal, currentMonth = _ref.currentMonth, currentYear = _ref.currentYear, daysWidthOnXAxis = _ref.daysWidthOnXAxis, numberOfYears = _ref.numberOfYears; var firstTickValue = firstVal.minYear; var firstTickPosition = 0; var dt = new DateTime(this.ctx); var unit = 'year'; if (firstVal.minDate > 1 && firstVal.minMonth > 0) { var remainingDays = dt.determineRemainingDaysOfYear(firstVal.minYear, firstVal.minMonth, firstVal.minDate); // remainingDaysofFirstMonth is used to reacht the 2nd tick position var remainingDaysOfFirstYear = dt.determineDaysOfYear(firstVal.minYear) - remainingDays + 1; // calculate the first tick position firstTickPosition = remainingDaysOfFirstYear * daysWidthOnXAxis; firstTickValue = firstVal.minYear + 1; // push the first tick in the array this.timeScaleArray.push({ position: firstTickPosition, value: firstTickValue, unit: unit, year: firstTickValue, month: Utils.monthMod(currentMonth + 1) }); } else if (firstVal.minDate === 1 && firstVal.minMonth === 0) { // push the first tick in the array this.timeScaleArray.push({ position: firstTickPosition, value: firstTickValue, unit: unit, year: currentYear, month: Utils.monthMod(currentMonth + 1) }); } var year = firstTickValue; var pos = firstTickPosition; // keep drawing rest of the ticks for (var i = 0; i < numberOfYears; i++) { year++; pos = dt.determineDaysOfYear(year - 1) * daysWidthOnXAxis + pos; this.timeScaleArray.push({ position: pos, value: year, unit: unit, year: year, month: 1 }); } } }, { key: "generateMonthScale", value: function generateMonthScale(_ref2) { var firstVal = _ref2.firstVal, currentMonthDate = _ref2.currentMonthDate, currentMonth = _ref2.currentMonth, currentYear = _ref2.currentYear, daysWidthOnXAxis = _ref2.daysWidthOnXAxis, numberOfMonths = _ref2.numberOfMonths; var firstTickValue = currentMonth; var firstTickPosition = 0; var dt = new DateTime(this.ctx); var unit = 'month'; var yrCounter = 0; if (firstVal.minDate > 1) { // remainingDaysofFirstMonth is used to reacht the 2nd tick position var remainingDaysOfFirstMonth = dt.determineDaysOfMonths(currentMonth + 1, firstVal.minYear) - currentMonthDate + 1; // calculate the first tick position firstTickPosition = remainingDaysOfFirstMonth * daysWidthOnXAxis; firstTickValue = Utils.monthMod(currentMonth + 1); var year = currentYear + yrCounter; var _month = Utils.monthMod(firstTickValue); var value = firstTickValue; // it's Jan, so update the year if (firstTickValue === 0) { unit = 'year'; value = year; _month = 1; yrCounter += 1; year = year + yrCounter; } // push the first tick in the array this.timeScaleArray.push({ position: firstTickPosition, value: value, unit: unit, year: year, month: _month }); } else { // push the first tick in the array this.timeScaleArray.push({ position: firstTickPosition, value: firstTickValue, unit: unit, year: currentYear, month: Utils.monthMod(currentMonth) }); } var month = firstTickValue + 1; var pos = firstTickPosition; // keep drawing rest of the ticks for (var i = 0, j = 1; i < numberOfMonths; i++, j++) { month = Utils.monthMod(month); if (month === 0) { unit = 'year'; yrCounter += 1; } else { unit = 'month'; } var _year = this._getYear(currentYear, month, yrCounter); pos = dt.determineDaysOfMonths(month, _year) * daysWidthOnXAxis + pos; var monthVal = month === 0 ? _year : month; this.timeScaleArray.push({ position: pos, value: monthVal, unit: unit, year: _year, month: month === 0 ? 1 : month }); month++; } } }, { key: "generateDayScale", value: function generateDayScale(_ref3) { var firstVal = _ref3.firstVal, currentMonth = _ref3.currentMonth, currentYear = _ref3.currentYear, hoursWidthOnXAxis = _ref3.hoursWidthOnXAxis, numberOfDays = _ref3.numberOfDays; var dt = new DateTime(this.ctx); var unit = 'day'; var firstTickValue = firstVal.minDate + 1; var date = firstTickValue; var changeMonth = function changeMonth(dateVal, month, year) { var monthdays = dt.determineDaysOfMonths(month + 1, year); if (dateVal > monthdays) { month = month + 1; date = 1; unit = 'month'; val = month; return month; } return month; }; var remainingHours = 24 - firstVal.minHour; var yrCounter = 0; // calculate the first tick position var firstTickPosition = remainingHours * hoursWidthOnXAxis; var val = firstTickValue; var month = changeMonth(date, currentMonth, currentYear); if (firstVal.minHour === 0 && firstVal.minDate === 1) { // the first value is the first day of month firstTickPosition = 0; val = Utils.monthMod(firstVal.minMonth); unit = 'month'; date = firstVal.minDate; numberOfDays++; } // push the first tick in the array this.timeScaleArray.push({ position: firstTickPosition, value: val, unit: unit, year: this._getYear(currentYear, month, yrCounter), month: Utils.monthMod(month), day: date }); var pos = firstTickPosition; // keep drawing rest of the ticks for (var i = 0; i < numberOfDays; i++) { date += 1; unit = 'day'; month = changeMonth(date, month, this._getYear(currentYear, month, yrCounter)); var year = this._getYear(currentYear, month, yrCounter); pos = 24 * hoursWidthOnXAxis + pos; var value = date === 1 ? Utils.monthMod(month) : date; this.timeScaleArray.push({ position: pos, value: value, unit: unit, year: year, month: Utils.monthMod(month), day: value }); } } }, { key: "generateHourScale", value: function generateHourScale(_ref4) { var firstVal = _ref4.firstVal, currentDate = _ref4.currentDate, currentMonth = _ref4.currentMonth, currentYear = _ref4.currentYear, minutesWidthOnXAxis = _ref4.minutesWidthOnXAxis, numberOfHours = _ref4.numberOfHours; var dt = new DateTime(this.ctx); var yrCounter = 0; var unit = 'hour'; var changeDate = function changeDate(dateVal, month) { var monthdays = dt.determineDaysOfMonths(month + 1, currentYear); if (dateVal > monthdays) { date = 1; month = month + 1; } return { month: month, date: date }; }; var changeMonth = function changeMonth(dateVal, month) { var monthdays = dt.determineDaysOfMonths(month + 1, currentYear); if (dateVal > monthdays) { month = month + 1; return month; } return month; }; var remainingMins = 60 - firstVal.minMinute; var firstTickPosition = remainingMins * minutesWidthOnXAxis; var firstTickValue = firstVal.minHour + 1; var hour = firstTickValue + 1; if (remainingMins === 60) { firstTickPosition = 0; firstTickValue = firstVal.minHour; hour = firstTickValue + 1; } var date = currentDate; var month = changeMonth(date, currentMonth); // push the first tick in the array this.timeScaleArray.push({ position: firstTickPosition, value: firstTickValue, unit: unit, day: date, hour: hour, year: currentYear, month: Utils.monthMod(month) }); var pos = firstTickPosition; // keep drawing rest of the ticks for (var i = 0; i < numberOfHours; i++) { unit = 'hour'; if (hour >= 24) { hour = 0; date += 1; unit = 'day'; var checkNextMonth = changeDate(date, month); month = checkNextMonth.month; month = changeMonth(date, month); } var year = this._getYear(currentYear, month, yrCounter); pos = hour === 0 && i === 0 ? remainingMins * minutesWidthOnXAxis : 60 * minutesWidthOnXAxis + pos; var val = hour === 0 ? date : hour; this.timeScaleArray.push({ position: pos, value: val, unit: unit, hour: hour, day: date, year: year, month: Utils.monthMod(month) }); hour++; } } }, { key: "generateMinuteScale", value: function generateMinuteScale(_ref5) { var firstVal = _ref5.firstVal, currentMinute = _ref5.currentMinute, currentHour = _ref5.currentHour, currentDate = _ref5.currentDate, currentMonth = _ref5.currentMonth, currentYear = _ref5.currentYear, minutesWidthOnXAxis = _ref5.minutesWidthOnXAxis, numberOfMinutes = _ref5.numberOfMinutes; var yrCounter = 0; var unit = 'minute'; var remainingMins = currentMinute - firstVal.minMinute; var firstTickPosition = minutesWidthOnXAxis - remainingMins; var firstTickValue = firstVal.minMinute + 1; var minute = firstTickValue + 1; var date = currentDate; var month = currentMonth; var year = currentYear; var hour = currentHour; // push the first tick in the array this.timeScaleArray.push({ position: firstTickPosition, value: firstTickValue, unit: unit, day: date, hour: hour, minute: minute, year: year, month: Utils.monthMod(month) }); var pos = firstTickPosition; // keep drawing rest of the ticks for (var i = 0; i < numberOfMinutes; i++) { if (minute >= 60) { minute = 0; hour += 1; if (hour === 24) { hour = 0; } } pos = minutesWidthOnXAxis + pos; this.timeScaleArray.push({ position: pos, value: minute, unit: unit, hour: hour, minute: minute, day: date, year: this._getYear(currentYear, month, yrCounter), month: Utils.monthMod(month) }); minute++; } } }, { key: "createRawDateString", value: function createRawDateString(ts, value) { var raw = ts.year; raw += '-' + ('0' + ts.month.toString()).slice(-2); // unit is day if (ts.unit === 'day') { raw += ts.unit === 'day' ? '-' + ('0' + value).slice(-2) : '-01'; } else { raw += '-' + ('0' + (ts.day ? ts.day : '1')).slice(-2); } // unit is hour if (ts.unit === 'hour') { raw += ts.unit === 'hour' ? 'T' + ('0' + value).slice(-2) : 'T00'; } else { raw += 'T' + ('0' + (ts.hour ? ts.hour : '0')).slice(-2); } // unit is minute raw += ts.unit === 'minute' ? ':' + ('0' + value).slice(-2) + ':00' : ':00:00'; if (this.utc) { raw += '.000Z'; } return raw; } }, { key: "formatDates", value: function formatDates(filteredTimeScale) { var _this2 = this; var w = this.w; var reformattedTimescaleArray = filteredTimeScale.map(function (ts) { var value = ts.value.toString(); var dt = new DateTime(_this2.ctx); var raw = _this2.createRawDateString(ts, value); var dateToFormat = dt.getDate(raw); if (w.config.xaxis.labels.format === undefined) { var customFormat = 'dd MMM'; var dtFormatter = w.config.xaxis.labels.datetimeFormatter; if (ts.unit === 'year') customFormat = dtFormatter.year; if (ts.unit === 'month') customFormat = dtFormatter.month; if (ts.unit === 'day') customFormat = dtFormatter.day; if (ts.unit === 'hour') customFormat = dtFormatter.hour; if (ts.unit === 'minute') customFormat = dtFormatter.minute; value = dt.formatDate(dateToFormat, customFormat); } else { value = dt.formatDate(dateToFormat, w.config.xaxis.labels.format); } return { dateString: raw, position: ts.position, value: value, unit: ts.unit, year: ts.year, month: ts.month }; }); return reformattedTimescaleArray; } }, { key: "removeOverlappingTS", value: function removeOverlappingTS(arr) { var _this3 = this; var graphics = new Graphics(this.ctx); var equalLabelLengthFlag = false; // These labels got same length? var constantLabelWidth; // If true, what is the constant length to use if (arr.length > 0 && // check arr length arr[0].value && // check arr[0] contains value arr.every(function (lb) { return lb.value.length === arr[0].value.length; }) // check every arr label value is the same as the first one ) { equalLabelLengthFlag = true; // These labels got same length constantLabelWidth = graphics.getTextRects(arr[0].value).width; // The constant label width to use } var lastDrawnIndex = 0; var filteredArray = arr.map(function (item, index) { if (index > 0 && _this3.w.config.xaxis.labels.hideOverlappingLabels) { var prevLabelWidth = !equalLabelLengthFlag // if vary in label length ? graphics.getTextRects(arr[lastDrawnIndex].value).width // get individual length : constantLabelWidth; // else: use constant length var prevPos = arr[lastDrawnIndex].position; var pos = item.position; if (pos > prevPos + prevLabelWidth + 10) { lastDrawnIndex = index; return item; } else { return null; } } else { return item; } }); filteredArray = filteredArray.filter(function (f) { return f !== null; }); return filteredArray; } }, { key: "_getYear", value: function _getYear(currentYear, month, yrCounter) { return currentYear + Math.floor(month / 12) + yrCounter; } }]); return TimeScale; }(); /** * ApexCharts Core Class responsible for major calculations and creating elements. * * @module Core **/ var Core = /*#__PURE__*/function () { function Core(el, ctx) { _classCallCheck(this, Core); this.ctx = ctx; this.w = ctx.w; this.el = el; } // get data and store into appropriate vars _createClass(Core, [{ key: "setupElements", value: function setupElements() { var gl = this.w.globals; var cnf = this.w.config; // const graphics = new Graphics(this.ctx) var ct = cnf.chart.type; var axisChartsArrTypes = ['line', 'area', 'bar', 'rangeBar', 'candlestick', 'scatter', 'bubble', 'radar', 'heatmap']; var xyChartsArrTypes = ['line', 'area', 'bar', 'rangeBar', 'candlestick', 'scatter', 'bubble']; gl.axisCharts = axisChartsArrTypes.indexOf(ct) > -1; gl.xyCharts = xyChartsArrTypes.indexOf(ct) > -1; gl.isBarHorizontal = (cnf.chart.type === 'bar' || cnf.chart.type === 'rangeBar') && cnf.plotOptions.bar.horizontal; gl.chartClass = '.apexcharts' + gl.cuid; gl.dom.baseEl = this.el; gl.dom.elWrap = document.createElement('div'); Graphics.setAttrs(gl.dom.elWrap, { id: gl.chartClass.substring(1), class: 'apexcharts-canvas ' + gl.chartClass.substring(1) }); this.el.appendChild(gl.dom.elWrap); gl.dom.Paper = new window.SVG.Doc(gl.dom.elWrap); gl.dom.Paper.attr({ class: 'apexcharts-svg', 'xmlns:data': 'ApexChartsNS', transform: "translate(".concat(cnf.chart.offsetX, ", ").concat(cnf.chart.offsetY, ")") }); gl.dom.Paper.node.style.background = cnf.chart.background; this.setSVGDimensions(); gl.dom.elGraphical = gl.dom.Paper.group().attr({ class: 'apexcharts-inner apexcharts-graphical' }); gl.dom.elAnnotations = gl.dom.Paper.group().attr({ class: 'apexcharts-annotations' }); gl.dom.elDefs = gl.dom.Paper.defs(); gl.dom.elLegendWrap = document.createElement('div'); gl.dom.elLegendWrap.classList.add('apexcharts-legend'); gl.dom.elWrap.appendChild(gl.dom.elLegendWrap); gl.dom.Paper.add(gl.dom.elGraphical); gl.dom.elGraphical.add(gl.dom.elDefs); } }, { key: "plotChartType", value: function plotChartType(ser, xyRatios) { var w = this.w; var cnf = w.config; var gl = w.globals; var lineSeries = { series: [], i: [] }; var areaSeries = { series: [], i: [] }; var scatterSeries = { series: [], i: [] }; var bubbleSeries = { series: [], i: [] }; var columnSeries = { series: [], i: [] }; var candlestickSeries = { series: [], i: [] }; gl.series.map(function (series, st) { // if user has specified a particular type for particular series if (typeof ser[st].type !== 'undefined') { if (ser[st].type === 'column' || ser[st].type === 'bar') { if (gl.series.length > 1 && cnf.plotOptions.bar.horizontal) { // horizontal bars not supported in mixed charts, hence show a warning console.warn('Horizontal bars are not supported in a mixed/combo chart. Please turn off `plotOptions.bar.horizontal`'); } columnSeries.series.push(series); columnSeries.i.push(st); w.globals.columnSeries = columnSeries.series; } else if (ser[st].type === 'area') { areaSeries.series.push(series); areaSeries.i.push(st); } else if (ser[st].type === 'line') { lineSeries.series.push(series); lineSeries.i.push(st); } else if (ser[st].type === 'scatter') { scatterSeries.series.push(series); scatterSeries.i.push(st); } else if (ser[st].type === 'bubble') { bubbleSeries.series.push(series); bubbleSeries.i.push(st); } else if (ser[st].type === 'candlestick') { candlestickSeries.series.push(series); candlestickSeries.i.push(st); } else { // user has specified type, but it is not valid (other than line/area/column) console.warn('You have specified an unrecognized chart type. Available types for this propery are line/area/column/bar/scatter/bubble'); } gl.comboCharts = true; } else { lineSeries.series.push(series); lineSeries.i.push(st); } }); var line = new Line(this.ctx, xyRatios); var candlestick = new CandleStick(this.ctx, xyRatios); var pie = new Pie(this.ctx); var radialBar = new Radial(this.ctx); var rangeBar = new RangeBar(this.ctx, xyRatios); var radar = new Radar(this.ctx); var elGraph = []; if (gl.comboCharts) { if (areaSeries.series.length > 0) { elGraph.push(line.draw(areaSeries.series, 'area', areaSeries.i)); } if (columnSeries.series.length > 0) { if (w.config.chart.stacked) { var barStacked = new BarStacked(this.ctx, xyRatios); elGraph.push(barStacked.draw(columnSeries.series, columnSeries.i)); } else { var bar = new Bar(this.ctx, xyRatios); elGraph.push(bar.draw(columnSeries.series, columnSeries.i)); } } if (lineSeries.series.length > 0) { elGraph.push(line.draw(lineSeries.series, 'line', lineSeries.i)); } if (candlestickSeries.series.length > 0) { elGraph.push(candlestick.draw(candlestickSeries.series, candlestickSeries.i)); } if (scatterSeries.series.length > 0) { var scatterLine = new Line(this.ctx, xyRatios, true); elGraph.push(scatterLine.draw(scatterSeries.series, 'scatter', scatterSeries.i)); } if (bubbleSeries.series.length > 0) { var bubbleLine = new Line(this.ctx, xyRatios, true); elGraph.push(bubbleLine.draw(bubbleSeries.series, 'bubble', bubbleSeries.i)); } } else { switch (cnf.chart.type) { case 'line': elGraph = line.draw(gl.series, 'line'); break; case 'area': elGraph = line.draw(gl.series, 'area'); break; case 'bar': if (cnf.chart.stacked) { var _barStacked = new BarStacked(this.ctx, xyRatios); elGraph = _barStacked.draw(gl.series); } else { var _bar = new Bar(this.ctx, xyRatios); elGraph = _bar.draw(gl.series); } break; case 'candlestick': var candleStick = new CandleStick(this.ctx, xyRatios); elGraph = candleStick.draw(gl.series); break; case 'rangeBar': elGraph = rangeBar.draw(gl.series); break; case 'heatmap': var heatmap = new HeatMap(this.ctx, xyRatios); elGraph = heatmap.draw(gl.series); break; case 'pie': case 'donut': elGraph = pie.draw(gl.series); break; case 'radialBar': elGraph = radialBar.draw(gl.series); break; case 'radar': elGraph = radar.draw(gl.series); break; default: elGraph = line.draw(gl.series); } } return elGraph; } }, { key: "setSVGDimensions", value: function setSVGDimensions() { var gl = this.w.globals; var cnf = this.w.config; gl.svgWidth = cnf.chart.width; gl.svgHeight = cnf.chart.height; var elDim = Utils.getDimensions(this.el); var widthUnit = cnf.chart.width.toString().split(/[0-9]+/g).pop(); if (widthUnit === '%') { if (Utils.isNumber(elDim[0])) { if (elDim[0].width === 0) { elDim = Utils.getDimensions(this.el.parentNode); } gl.svgWidth = elDim[0] * parseInt(cnf.chart.width, 10) / 100; } } else if (widthUnit === 'px' || widthUnit === '') { gl.svgWidth = parseInt(cnf.chart.width, 10); } if (gl.svgHeight !== 'auto' && gl.svgHeight !== '') { var heightUnit = cnf.chart.height.toString().split(/[0-9]+/g).pop(); if (heightUnit === '%') { var elParentDim = Utils.getDimensions(this.el.parentNode); gl.svgHeight = elParentDim[1] * parseInt(cnf.chart.height, 10) / 100; } else { gl.svgHeight = parseInt(cnf.chart.height, 10); } } else { if (gl.axisCharts) { gl.svgHeight = gl.svgWidth / 1.61; } else { gl.svgHeight = gl.svgWidth / 1.2; } } if (gl.svgWidth < 0) gl.svgWidth = 0; if (gl.svgHeight < 0) gl.svgHeight = 0; Graphics.setAttrs(gl.dom.Paper.node, { width: gl.svgWidth, height: gl.svgHeight }); // gl.dom.Paper.node.parentNode.parentNode.style.minWidth = gl.svgWidth + "px"; var offsetY = cnf.chart.sparkline.enabled ? 0 : gl.axisCharts ? cnf.chart.parentHeightOffset : 0; gl.dom.Paper.node.parentNode.parentNode.style.minHeight = gl.svgHeight + offsetY + 'px'; gl.dom.elWrap.style.width = gl.svgWidth + 'px'; gl.dom.elWrap.style.height = gl.svgHeight + 'px'; } }, { key: "shiftGraphPosition", value: function shiftGraphPosition() { var gl = this.w.globals; var tY = gl.translateY; var tX = gl.translateX; var scalingAttrs = { transform: 'translate(' + tX + ', ' + tY + ')' }; Graphics.setAttrs(gl.dom.elGraphical.node, scalingAttrs); gl.x2SpaceAvailable = gl.svgWidth - gl.dom.elGraphical.x() - gl.gridWidth; } // To prevent extra spacings in the bottom of the chart, we need to recalculate the height for pie/donut/radialbar charts }, { key: "resizeNonAxisCharts", value: function resizeNonAxisCharts() { var w = this.w; var gl = w.globals; var legendHeight = 0; var offY = w.config.chart.sparkline.enabled ? 1 : 15; offY = offY + w.config.grid.padding.bottom; if ((w.config.legend.position === 'top' || w.config.legend.position === 'bottom') && w.config.legend.show && !w.config.legend.floating) { legendHeight = new Legend(this.ctx).legendHelpers.getLegendBBox().clwh + 10; } var radialEl = w.globals.dom.baseEl.querySelector('.apexcharts-radialbar'); var chartInnerDimensions = w.globals.radialSize * 2.05; if (radialEl && !w.config.chart.sparkline.enabled) { var elRadialRect = Utils.getBoundingClientRect(radialEl); chartInnerDimensions = elRadialRect.bottom; var maxHeight = elRadialRect.bottom - elRadialRect.top; chartInnerDimensions = Math.max(w.globals.radialSize * 2.05, maxHeight); } var newHeight = chartInnerDimensions + gl.translateY + legendHeight + offY; if (gl.dom.elLegendForeign) { gl.dom.elLegendForeign.setAttribute('height', newHeight); } gl.dom.elWrap.style.height = newHeight + 'px'; Graphics.setAttrs(gl.dom.Paper.node, { height: newHeight }); gl.dom.Paper.node.parentNode.parentNode.style.minHeight = newHeight + 'px'; } /* ** All the calculations for setting range in charts will be done here */ }, { key: "coreCalculations", value: function coreCalculations() { var range = new Range$1(this.ctx); range.init(); } }, { key: "resetGlobals", value: function resetGlobals() { var _this = this; var resetxyValues = function resetxyValues() { return _this.w.config.series.map(function (s) { return []; }); }; var globalObj = new Globals(); var gl = this.w.globals; globalObj.initGlobalVars(gl); gl.seriesXvalues = resetxyValues(); gl.seriesYvalues = resetxyValues(); } }, { key: "isMultipleY", value: function isMultipleY() { // user has supplied an array in yaxis property. So, turn on multipleYAxis flag if (this.w.config.yaxis.constructor === Array && this.w.config.yaxis.length > 1) { this.w.globals.isMultipleYAxis = true; return true; } } }, { key: "xySettings", value: function xySettings() { var xyRatios = null; var w = this.w; if (w.globals.axisCharts) { if (w.config.xaxis.crosshairs.position === 'back') { var crosshairs = new Crosshairs(this.ctx); crosshairs.drawXCrosshairs(); } if (w.config.yaxis[0].crosshairs.position === 'back') { var _crosshairs = new Crosshairs(this.ctx); _crosshairs.drawYCrosshairs(); } if (w.config.xaxis.type === 'datetime' && w.config.xaxis.labels.formatter === undefined) { var ts = new TimeScale(this.ctx); var formattedTimeScale = []; if (isFinite(w.globals.minX) && isFinite(w.globals.maxX) && !w.globals.isBarHorizontal) { formattedTimeScale = ts.calculateTimeScaleTicks(w.globals.minX, w.globals.maxX); } else if (w.globals.isBarHorizontal) { formattedTimeScale = ts.calculateTimeScaleTicks(w.globals.minY, w.globals.maxY); } ts.recalcDimensionsBasedOnFormat(formattedTimeScale); } var coreUtils = new CoreUtils(this.ctx); xyRatios = coreUtils.getCalculatedRatios(); } return xyRatios; } }, { key: "setupBrushHandler", value: function setupBrushHandler() { var _this2 = this; var w = this.w; // only for brush charts if (!w.config.chart.brush.enabled) { return; } // if user has not defined a custom function for selection - we handle the brush chart // otherwise we leave it to the user to define the functionality for selection if (typeof w.config.chart.events.selection !== 'function') { var targets = w.config.chart.brush.targets || [w.config.chart.brush.target]; // retro compatibility with single target option targets.forEach(function (target) { var targetChart = ApexCharts.getChartByID(target); targetChart.w.globals.brushSource = _this2.ctx; var updateSourceChart = function updateSourceChart() { _this2.ctx.updateHelpers._updateOptions({ chart: { selection: { xaxis: { min: targetChart.w.globals.minX, max: targetChart.w.globals.maxX } } } }, false, false); }; if (typeof targetChart.w.config.chart.events.zoomed !== 'function') { targetChart.w.config.chart.events.zoomed = function () { updateSourceChart(); }; } if (typeof targetChart.w.config.chart.events.scrolled !== 'function') { targetChart.w.config.chart.events.scrolled = function () { updateSourceChart(); }; } }); w.config.chart.events.selection = function (chart, e) { targets.forEach(function (target) { var targetChart = ApexCharts.getChartByID(target); var yaxis = Utils.clone(w.config.yaxis); if (w.config.chart.brush.autoScaleYaxis && targetChart.w.globals.series.length === 1) { var scale = new Range(targetChart); yaxis = scale.autoScaleY(targetChart, yaxis, e); } targetChart.ctx.updateHelpers._updateOptions({ xaxis: { min: e.xaxis.min, max: e.xaxis.max }, yaxis: _objectSpread2({}, targetChart.w.config.yaxis[0], { min: yaxis[0].min, max: yaxis[0].max }) }, false, false, false, false); }); }; } } }]); return Core; }(); var UpdateHelpers = /*#__PURE__*/function () { function UpdateHelpers(ctx) { _classCallCheck(this, UpdateHelpers); this.ctx = ctx; this.w = ctx.w; } /** * private method to update Options. * * @param {object} options - A new config object can be passed which will be merged with the existing config object * @param {boolean} redraw - should redraw from beginning or should use existing paths and redraw from there * @param {boolean} animate - should animate or not on updating Options * @param {boolean} overwriteInitialConfig - should update the initial config or not */ _createClass(UpdateHelpers, [{ key: "_updateOptions", value: function _updateOptions(options) { var _this = this; var redraw = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; var animate = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; var updateSyncedCharts = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true; var overwriteInitialConfig = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false; var charts = [this.ctx]; if (updateSyncedCharts) { charts = this.ctx.getSyncedCharts(); } if (this.ctx.w.globals.isExecCalled) { // If the user called exec method, we don't want to get grouped charts as user specifically provided a chartID to update charts = [this.ctx]; this.ctx.w.globals.isExecCalled = false; } charts.forEach(function (ch) { var w = ch.w; w.globals.shouldAnimate = animate; if (!redraw) { w.globals.resized = true; w.globals.dataChanged = true; if (animate) { ch.series.getPreviousPaths(); } } if (options && _typeof(options) === 'object') { ch.config = new Config(options); options = CoreUtils.extendArrayProps(ch.config, options); // fixes #914, #623 if (ch.w.globals.chartID !== _this.ctx.w.globals.chartID) { // don't overwrite series of synchronized charts delete options.series; } w.config = Utils.extend(w.config, options); if (overwriteInitialConfig) { // we need to forget the lastXAxis and lastYAxis is user forcefully overwriteInitialConfig. If we do not do this, and next time when user zooms the chart after setting yaxis.min/max or xaxis.min/max - the stored lastXAxis will never allow the chart to use the updated min/max by user. w.globals.lastXAxis = []; w.globals.lastYAxis = []; // After forgetting lastAxes, we need to restore the new config in initialConfig/initialSeries w.globals.initialConfig = Utils.extend({}, w.config); w.globals.initialSeries = JSON.parse(JSON.stringify(w.config.series)); } } return ch.update(options); }); } /** * Private method to update Series. * * @param {array} series - New series which will override the existing */ }, { key: "_updateSeries", value: function _updateSeries(newSeries, animate) { var _this2 = this; var overwriteInitialSeries = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; var w = this.w; w.globals.shouldAnimate = animate; w.globals.dataChanged = true; if (animate) { this.ctx.series.getPreviousPaths(); } var existingSeries; // axis charts if (w.globals.axisCharts) { existingSeries = newSeries.map(function (s, i) { return _this2._extendSeries(s, i); }); if (existingSeries.length === 0) { existingSeries = [{ data: [] }]; } w.config.series = existingSeries; } else { // non-axis chart (pie/radialbar) w.config.series = newSeries.slice(); } if (overwriteInitialSeries) { w.globals.initialConfig.series = JSON.parse(JSON.stringify(w.config.series)); w.globals.initialSeries = JSON.parse(JSON.stringify(w.config.series)); } return this.ctx.update(); } }, { key: "_extendSeries", value: function _extendSeries(s, i) { var w = this.w; return _objectSpread2({}, w.config.series[i], { name: s.name ? s.name : w.config.series[i] && w.config.series[i].name, type: s.type ? s.type : w.config.series[i] && w.config.series[i].type, data: s.data ? s.data : w.config.series[i] && w.config.series[i].data }); } }, { key: "toggleDataPointSelection", value: function toggleDataPointSelection(seriesIndex, dataPointIndex) { var w = this.w; var elPath = null; var parent = ".apexcharts-series[data\\:realIndex='".concat(seriesIndex, "']"); if (w.globals.axisCharts) { elPath = w.globals.dom.Paper.select("".concat(parent, " path[j='").concat(dataPointIndex, "'], ").concat(parent, " circle[j='").concat(dataPointIndex, "'], ").concat(parent, " rect[j='").concat(dataPointIndex, "']")).members[0]; } else { // dataPointIndex will be undefined here, hence using seriesIndex if (typeof dataPointIndex === 'undefined') { elPath = w.globals.dom.Paper.select("".concat(parent, " path[j='").concat(seriesIndex, "']")).members[0]; if (w.config.chart.type === 'pie' || w.config.chart.type === 'donut') { var pie = new Pie(this.ctx); pie.pieClicked(seriesIndex); } } } if (elPath) { var graphics = new Graphics(this.ctx); graphics.pathMouseDown(elPath, null); } else { console.warn('toggleDataPointSelection: Element not found'); return null; } return elPath.node ? elPath.node : null; } }, { key: "forceXAxisUpdate", value: function forceXAxisUpdate(options) { var w = this.w; var minmax = ['min', 'max']; minmax.forEach(function (a) { if (typeof options.xaxis[a] !== 'undefined') { w.config.xaxis[a] = options.xaxis[a]; w.globals.lastXAxis[a] = options.xaxis[a]; } }); if (options.xaxis.categories && options.xaxis.categories.length) { w.config.xaxis.categories = options.xaxis.categories; } if (w.config.xaxis.convertedCatToNumeric) { var defaults = new Defaults(options); options = defaults.convertCatToNumericXaxis(options, this.ctx); } return options; } }, { key: "forceYAxisUpdate", value: function forceYAxisUpdate(options) { var w = this.w; if (w.config.chart.stacked && w.config.chart.stackType === '100%') { if (Array.isArray(options.yaxis)) { options.yaxis.forEach(function (yaxe, index) { options.yaxis[index].min = 0; options.yaxis[index].max = 100; }); } else { options.yaxis.min = 0; options.yaxis.max = 100; } } return options; } /** * This function reverts the yaxis and xaxis min/max values to what it was when the chart was defined. * This function fixes an important bug where a user might load a new series after zooming in/out of previous series which resulted in wrong min/max * Also, this should never be called internally on zoom/pan - the reset should only happen when user calls the updateSeries() function externally */ }, { key: "revertDefaultAxisMinMax", value: function revertDefaultAxisMinMax() { var _this3 = this; var w = this.w; w.config.xaxis.min = w.globals.lastXAxis.min; w.config.xaxis.max = w.globals.lastXAxis.max; w.config.yaxis.map(function (yaxe, index) { if (w.globals.zoomed) { // user has zoomed, check the last yaxis if (typeof w.globals.lastYAxis[index] !== 'undefined') { yaxe.min = w.globals.lastYAxis[index].min; yaxe.max = w.globals.lastYAxis[index].max; } } else { // user hasn't zoomed, check the original yaxis if (typeof _this3.ctx.opts.yaxis[index] !== 'undefined') { yaxe.min = _this3.ctx.opts.yaxis[index].min; yaxe.max = _this3.ctx.opts.yaxis[index].max; } } }); } }]); return UpdateHelpers; }(); (function (root, factory) { /* istanbul ignore next */ if (typeof define === 'function' && define.amd) { define(function () { return factory(root, root.document); }); /* below check fixes #412 */ } else if ((typeof exports === "undefined" ? "undefined" : _typeof(exports)) === 'object' && typeof module !== 'undefined') { module.exports = root.document ? factory(root, root.document) : function (w) { return factory(w, w.document); }; } else { root.SVG = factory(root, root.document); } })(typeof window !== 'undefined' ? window : undefined, function (window, document) { // Find global reference - uses 'this' by default when available, // falls back to 'window' otherwise (for bundlers like Webpack) var globalRef = typeof this !== 'undefined' ? this : window; // The main wrapping element var SVG = globalRef.SVG = function (element) { if (SVG.supported) { element = new SVG.Doc(element); if (!SVG.parser.draw) { SVG.prepare(); } return element; } }; // Default namespaces SVG.ns = 'http://www.w3.org/2000/svg'; SVG.xmlns = 'http://www.w3.org/2000/xmlns/'; SVG.xlink = 'http://www.w3.org/1999/xlink'; SVG.svgjs = 'http://svgjs.com/svgjs'; // Svg support test SVG.supported = function () { return true; // !!document.createElementNS && // !! document.createElementNS(SVG.ns,'svg').createSVGRect }(); // Don't bother to continue if SVG is not supported if (!SVG.supported) return false; // Element id sequence SVG.did = 1000; // Get next named element id SVG.eid = function (name) { return 'Svgjs' + capitalize(name) + SVG.did++; }; // Method for element creation SVG.create = function (name) { // create element var element = document.createElementNS(this.ns, name); // apply unique id element.setAttribute('id', this.eid(name)); return element; }; // Method for extending objects SVG.extend = function () { var modules, methods; // Get list of modules modules = [].slice.call(arguments); // Get object with extensions methods = modules.pop(); for (var i = modules.length - 1; i >= 0; i--) { if (modules[i]) { for (var key in methods) { modules[i].prototype[key] = methods[key]; } } } // Make sure SVG.Set inherits any newly added methods if (SVG.Set && SVG.Set.inherit) { SVG.Set.inherit(); } }; // Invent new element SVG.invent = function (config) { // Create element initializer var initializer = typeof config.create === 'function' ? config.create : function () { this.constructor.call(this, SVG.create(config.create)); }; // Inherit prototype if (config.inherit) { initializer.prototype = new config.inherit(); } // Extend with methods if (config.extend) { SVG.extend(initializer, config.extend); } // Attach construct method to parent if (config.construct) { SVG.extend(config.parent || SVG.Container, config.construct); } return initializer; }; // Adopt existing svg elements SVG.adopt = function (node) { // check for presence of node if (!node) return null; // make sure a node isn't already adopted if (node.instance) return node.instance; // initialize variables var element; // adopt with element-specific settings if (node.nodeName == 'svg') { element = node.parentNode instanceof window.SVGElement ? new SVG.Nested() : new SVG.Doc(); } else if (node.nodeName == 'linearGradient') { element = new SVG.Gradient('linear'); } else if (node.nodeName == 'radialGradient') { element = new SVG.Gradient('radial'); } else if (SVG[capitalize(node.nodeName)]) { element = new SVG[capitalize(node.nodeName)](); } else { element = new SVG.Element(node); } // ensure references element.type = node.nodeName; element.node = node; node.instance = element; // SVG.Class specific preparations if (element instanceof SVG.Doc) { element.namespace().defs(); } // pull svgjs data from the dom (getAttributeNS doesn't work in html5) element.setData(JSON.parse(node.getAttribute('svgjs:data')) || {}); return element; }; // Initialize parsing element SVG.prepare = function () { // Select document body and create invisible svg element var body = document.getElementsByTagName('body')[0], draw = (body ? new SVG.Doc(body) : SVG.adopt(document.documentElement).nested()).size(2, 0); // Create parser object SVG.parser = { body: body || document.documentElement, draw: draw.style('opacity:0;position:absolute;left:-100%;top:-100%;overflow:hidden').node, poly: draw.polyline().node, path: draw.path().node, native: SVG.create('svg') }; }; SVG.parser = { native: SVG.create('svg') }; document.addEventListener('DOMContentLoaded', function () { if (!SVG.parser.draw) { SVG.prepare(); } }, false); // Storage for regular expressions SVG.regex = { // Parse unit value numberAndUnit: /^([+-]?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?)([a-z%]*)$/i, // Parse hex value hex: /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i, // Parse rgb value rgb: /rgb\((\d+),(\d+),(\d+)\)/, // Parse reference id reference: /#([a-z0-9\-_]+)/i, // splits a transformation chain transforms: /\)\s*,?\s*/, // Whitespace whitespace: /\s/g, // Test hex value isHex: /^#[a-f0-9]{3,6}$/i, // Test rgb value isRgb: /^rgb\(/, // Test css declaration isCss: /[^:]+:[^;]+;?/, // Test for blank string isBlank: /^(\s+)?$/, // Test for numeric string isNumber: /^[+-]?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i, // Test for percent value isPercent: /^-?[\d\.]+%$/, // Test for image url isImage: /\.(jpg|jpeg|png|gif|svg)(\?[^=]+.*)?/i, // split at whitespace and comma delimiter: /[\s,]+/, // The following regex are used to parse the d attribute of a path // Matches all hyphens which are not after an exponent hyphen: /([^e])\-/gi, // Replaces and tests for all path letters pathLetters: /[MLHVCSQTAZ]/gi, // yes we need this one, too isPathLetter: /[MLHVCSQTAZ]/i, // matches 0.154.23.45 numbersWithDots: /((\d?\.\d+(?:e[+-]?\d+)?)((?:\.\d+(?:e[+-]?\d+)?)+))+/gi, // matches . dots: /\./g }; SVG.utils = { // Map function map: function map(array, block) { var il = array.length, result = []; for (var i = 0; i < il; i++) { result.push(block(array[i])); } return result; }, // Filter function filter: function filter(array, block) { var il = array.length, result = []; for (var i = 0; i < il; i++) { if (block(array[i])) { result.push(array[i]); } } return result; }, filterSVGElements: function filterSVGElements(nodes) { return this.filter(nodes, function (el) { return el instanceof window.SVGElement; }); } }; SVG.defaults = { // Default attribute values attrs: { // fill and stroke 'fill-opacity': 1, 'stroke-opacity': 1, 'stroke-width': 0, 'stroke-linejoin': 'miter', 'stroke-linecap': 'butt', fill: '#000000', stroke: '#000000', opacity: 1, // position x: 0, y: 0, cx: 0, cy: 0, // size width: 0, height: 0, // radius r: 0, rx: 0, ry: 0, // gradient offset: 0, 'stop-opacity': 1, 'stop-color': '#000000', // text 'font-size': 16, 'font-family': 'Helvetica, Arial, sans-serif', 'text-anchor': 'start' } }; // Module for color convertions SVG.Color = function (color) { var match; // initialize defaults this.r = 0; this.g = 0; this.b = 0; if (!color) return; // parse color if (typeof color === 'string') { if (SVG.regex.isRgb.test(color)) { // get rgb values match = SVG.regex.rgb.exec(color.replace(SVG.regex.whitespace, '')); // parse numeric values this.r = parseInt(match[1]); this.g = parseInt(match[2]); this.b = parseInt(match[3]); } else if (SVG.regex.isHex.test(color)) { // get hex values match = SVG.regex.hex.exec(fullHex(color)); // parse numeric values this.r = parseInt(match[1], 16); this.g = parseInt(match[2], 16); this.b = parseInt(match[3], 16); } } else if (_typeof(color) === 'object') { this.r = color.r; this.g = color.g; this.b = color.b; } }; SVG.extend(SVG.Color, { // Default to hex conversion toString: function toString() { return this.toHex(); }, // Build hex value toHex: function toHex() { return '#' + compToHex(this.r) + compToHex(this.g) + compToHex(this.b); }, // Build rgb value toRgb: function toRgb() { return 'rgb(' + [this.r, this.g, this.b].join() + ')'; }, // Calculate true brightness brightness: function brightness() { return this.r / 255 * 0.30 + this.g / 255 * 0.59 + this.b / 255 * 0.11; }, // Make color morphable morph: function morph(color) { this.destination = new SVG.Color(color); return this; }, // Get morphed color at given position at: function at(pos) { // make sure a destination is defined if (!this.destination) return this; // normalise pos pos = pos < 0 ? 0 : pos > 1 ? 1 : pos; // generate morphed color return new SVG.Color({ r: ~~(this.r + (this.destination.r - this.r) * pos), g: ~~(this.g + (this.destination.g - this.g) * pos), b: ~~(this.b + (this.destination.b - this.b) * pos) }); } }); // Testers // Test if given value is a color string SVG.Color.test = function (color) { color += ''; return SVG.regex.isHex.test(color) || SVG.regex.isRgb.test(color); }; // Test if given value is a rgb object SVG.Color.isRgb = function (color) { return color && typeof color.r === 'number' && typeof color.g === 'number' && typeof color.b === 'number'; }; // Test if given value is a color SVG.Color.isColor = function (color) { return SVG.Color.isRgb(color) || SVG.Color.test(color); }; // Module for array conversion SVG.Array = function (array, fallback) { array = (array || []).valueOf(); // if array is empty and fallback is provided, use fallback if (array.length == 0 && fallback) { array = fallback.valueOf(); } // parse array this.value = this.parse(array); }; SVG.extend(SVG.Array, { // Convert array to string toString: function toString() { return this.value.join(' '); }, // Real value valueOf: function valueOf() { return this.value; }, // Parse whitespace separated string parse: function parse(array) { array = array.valueOf(); // if already is an array, no need to parse it if (Array.isArray(array)) return array; return this.split(array); } }); // Poly points array SVG.PointArray = function (array, fallback) { SVG.Array.call(this, array, fallback || [[0, 0]]); }; // Inherit from SVG.Array SVG.PointArray.prototype = new SVG.Array(); SVG.PointArray.prototype.constructor = SVG.PointArray; var pathHandlers = { M: function M(c, p, p0) { p.x = p0.x = c[0]; p.y = p0.y = c[1]; return ['M', p.x, p.y]; }, L: function L(c, p) { p.x = c[0]; p.y = c[1]; return ['L', c[0], c[1]]; }, H: function H(c, p) { p.x = c[0]; return ['H', c[0]]; }, V: function V(c, p) { p.y = c[0]; return ['V', c[0]]; }, C: function C(c, p) { p.x = c[4]; p.y = c[5]; return ['C', c[0], c[1], c[2], c[3], c[4], c[5]]; }, Q: function Q(c, p) { p.x = c[2]; p.y = c[3]; return ['Q', c[0], c[1], c[2], c[3]]; }, Z: function Z(c, p, p0) { p.x = p0.x; p.y = p0.y; return ['Z']; } }; var mlhvqtcsa = 'mlhvqtcsaz'.split(''); for (var i = 0, il = mlhvqtcsa.length; i < il; ++i) { pathHandlers[mlhvqtcsa[i]] = function (i) { return function (c, p, p0) { if (i == 'H') c[0] = c[0] + p.x;else if (i == 'V') c[0] = c[0] + p.y;else if (i == 'A') { c[5] = c[5] + p.x, c[6] = c[6] + p.y; } else { for (var j = 0, jl = c.length; j < jl; ++j) { c[j] = c[j] + (j % 2 ? p.y : p.x); } } return pathHandlers[i](c, p, p0); }; }(mlhvqtcsa[i].toUpperCase()); } // Path points array SVG.PathArray = function (array, fallback) { SVG.Array.call(this, array, fallback || [['M', 0, 0]]); }; // Inherit from SVG.Array SVG.PathArray.prototype = new SVG.Array(); SVG.PathArray.prototype.constructor = SVG.PathArray; SVG.extend(SVG.PathArray, { // Convert array to string toString: function toString() { return arrayToString(this.value); }, // Move path string move: function move(x, y) { // get bounding box of current situation var box = this.bbox(); // get relative offset x -= box.x; y -= box.y; return this; }, // Get morphed path array at given position at: function at(pos) { // make sure a destination is defined if (!this.destination) return this; var sourceArray = this.value, destinationArray = this.destination.value, array = [], pathArray = new SVG.PathArray(), il, jl; // Animate has specified in the SVG spec // See: https://www.w3.org/TR/SVG11/paths.html#PathElement for (var i = 0, il = sourceArray.length; i < il; i++) { array[i] = [sourceArray[i][0]]; for (var j = 1, jl = sourceArray[i].length; j < jl; j++) { array[i][j] = sourceArray[i][j] + (destinationArray[i][j] - sourceArray[i][j]) * pos; } // For the two flags of the elliptical arc command, the SVG spec say: // Flags and booleans are interpolated as fractions between zero and one, with any non-zero value considered to be a value of one/true // Elliptical arc command as an array followed by corresponding indexes: // ['A', rx, ry, x-axis-rotation, large-arc-flag, sweep-flag, x, y] // 0 1 2 3 4 5 6 7 if (array[i][0] === 'A') { array[i][4] = +(array[i][4] != 0); array[i][5] = +(array[i][5] != 0); } } // Directly modify the value of a path array, this is done this way for performance pathArray.value = array; return pathArray; }, // Absolutize and parse path to array parse: function parse(array) { // if it's already a patharray, no need to parse it if (array instanceof SVG.PathArray) return array.valueOf(); // prepare for parsing var s, arr, paramCnt = { 'M': 2, 'L': 2, 'H': 1, 'V': 1, 'C': 6, 'S': 4, 'Q': 4, 'T': 2, 'A': 7, 'Z': 0 }; if (typeof array === 'string') { array = array.replace(SVG.regex.numbersWithDots, pathRegReplace) // convert 45.123.123 to 45.123 .123 .replace(SVG.regex.pathLetters, ' $& ') // put some room between letters and numbers .replace(SVG.regex.hyphen, '$1 -') // add space before hyphen .trim() // trim .split(SVG.regex.delimiter); // split into array } else { array = array.reduce(function (prev, curr) { return [].concat.call(prev, curr); }, []); } // array now is an array containing all parts of a path e.g. ['M', '0', '0', 'L', '30', '30' ...] var arr = [], p = new SVG.Point(), p0 = new SVG.Point(), index = 0, len = array.length; do { // Test if we have a path letter if (SVG.regex.isPathLetter.test(array[index])) { s = array[index]; ++index; // If last letter was a move command and we got no new, it defaults to [L]ine } else if (s == 'M') { s = 'L'; } else if (s == 'm') { s = 'l'; } arr.push(pathHandlers[s].call(null, array.slice(index, index = index + paramCnt[s.toUpperCase()]).map(parseFloat), p, p0)); } while (len > index); return arr; }, // Get bounding box of path bbox: function bbox() { if (!SVG.parser.draw) { SVG.prepare(); } SVG.parser.path.setAttribute('d', this.toString()); return SVG.parser.path.getBBox(); } }); // Module for unit convertions SVG.Number = SVG.invent({ // Initialize create: function create(value, unit) { // initialize defaults this.value = 0; this.unit = unit || ''; // parse value if (typeof value === 'number') { // ensure a valid numeric value this.value = isNaN(value) ? 0 : !isFinite(value) ? value < 0 ? -3.4e+38 : +3.4e+38 : value; } else if (typeof value === 'string') { unit = value.match(SVG.regex.numberAndUnit); if (unit) { // make value numeric this.value = parseFloat(unit[1]); // normalize if (unit[5] == '%') { this.value /= 100; } else if (unit[5] == 's') { this.value *= 1000; } // store unit this.unit = unit[5]; } } else { if (value instanceof SVG.Number) { this.value = value.valueOf(); this.unit = value.unit; } } }, // Add methods extend: { // Stringalize toString: function toString() { return (this.unit == '%' ? ~~(this.value * 1e8) / 1e6 : this.unit == 's' ? this.value / 1e3 : this.value) + this.unit; }, toJSON: function toJSON() { return this.toString(); }, // Convert to primitive valueOf: function valueOf() { return this.value; }, // Add number plus: function plus(number) { number = new SVG.Number(number); return new SVG.Number(this + number, this.unit || number.unit); }, // Subtract number minus: function minus(number) { number = new SVG.Number(number); return new SVG.Number(this - number, this.unit || number.unit); }, // Multiply number times: function times(number) { number = new SVG.Number(number); return new SVG.Number(this * number, this.unit || number.unit); }, // Divide number divide: function divide(number) { number = new SVG.Number(number); return new SVG.Number(this / number, this.unit || number.unit); }, // Convert to different unit to: function to(unit) { var number = new SVG.Number(this); if (typeof unit === 'string') { number.unit = unit; } return number; }, // Make number morphable morph: function morph(number) { this.destination = new SVG.Number(number); if (number.relative) { this.destination.value += this.value; } return this; }, // Get morphed number at given position at: function at(pos) { // Make sure a destination is defined if (!this.destination) return this; // Generate new morphed number return new SVG.Number(this.destination).minus(this).times(pos).plus(this); } } }); SVG.Element = SVG.invent({ // Initialize node create: function create(node) { // make stroke value accessible dynamically this._stroke = SVG.defaults.attrs.stroke; this._event = null; // initialize data object this.dom = {}; // create circular reference if (this.node = node) { this.type = node.nodeName; this.node.instance = this; // store current attribute value this._stroke = node.getAttribute('stroke') || this._stroke; } }, // Add class methods extend: { // Move over x-axis x: function x(_x) { return this.attr('x', _x); }, // Move over y-axis y: function y(_y) { return this.attr('y', _y); }, // Move by center over x-axis cx: function cx(x) { return x == null ? this.x() + this.width() / 2 : this.x(x - this.width() / 2); }, // Move by center over y-axis cy: function cy(y) { return y == null ? this.y() + this.height() / 2 : this.y(y - this.height() / 2); }, // Move element to given x and y values move: function move(x, y) { return this.x(x).y(y); }, // Move element by its center center: function center(x, y) { return this.cx(x).cy(y); }, // Set width of element width: function width(_width) { return this.attr('width', _width); }, // Set height of element height: function height(_height) { return this.attr('height', _height); }, // Set element size to given width and height size: function size(width, height) { var p = proportionalSize(this, width, height); return this.width(new SVG.Number(p.width)).height(new SVG.Number(p.height)); }, // Clone element clone: function clone(parent) { // write dom data to the dom so the clone can pickup the data this.writeDataToDom(); // clone element and assign new id var clone = assignNewId(this.node.cloneNode(true)); // insert the clone in the given parent or after myself if (parent) parent.add(clone);else this.after(clone); return clone; }, // Remove element remove: function remove() { if (this.parent()) { this.parent().removeElement(this); } return this; }, // Replace element replace: function replace(element) { this.after(element).remove(); return element; }, // Add element to given container and return self addTo: function addTo(parent) { return parent.put(this); }, // Add element to given container and return container putIn: function putIn(parent) { return parent.add(this); }, // Get / set id id: function id(_id) { return this.attr('id', _id); }, // Show element show: function show() { return this.style('display', ''); }, // Hide element hide: function hide() { return this.style('display', 'none'); }, // Is element visible? visible: function visible() { return this.style('display') != 'none'; }, // Return id on string conversion toString: function toString() { return this.attr('id'); }, // Return array of classes on the node classes: function classes() { var attr = this.attr('class'); return attr == null ? [] : attr.trim().split(SVG.regex.delimiter); }, // Return true if class exists on the node, false otherwise hasClass: function hasClass(name) { return this.classes().indexOf(name) != -1; }, // Add class to the node addClass: function addClass(name) { if (!this.hasClass(name)) { var array = this.classes(); array.push(name); this.attr('class', array.join(' ')); } return this; }, // Remove class from the node removeClass: function removeClass(name) { if (this.hasClass(name)) { this.attr('class', this.classes().filter(function (c) { return c != name; }).join(' ')); } return this; }, // Toggle the presence of a class on the node toggleClass: function toggleClass(name) { return this.hasClass(name) ? this.removeClass(name) : this.addClass(name); }, // Get referenced element form attribute value reference: function reference(attr) { return SVG.get(this.attr(attr)); }, // Returns the parent element instance parent: function parent(type) { var parent = this; // check for parent if (!parent.node.parentNode) return null; // get parent element parent = SVG.adopt(parent.node.parentNode); if (!type) return parent; // loop trough ancestors if type is given while (parent && parent.node instanceof window.SVGElement) { if (typeof type === 'string' ? parent.matches(type) : parent instanceof type) return parent; if (!parent.node.parentNode || parent.node.parentNode.nodeName == '#document') return null; // #759, #720 parent = SVG.adopt(parent.node.parentNode); } }, // Get parent document doc: function doc() { return this instanceof SVG.Doc ? this : this.parent(SVG.Doc); }, // return array of all ancestors of given type up to the root svg parents: function parents(type) { var parents = [], parent = this; do { parent = parent.parent(type); if (!parent || !parent.node) break; parents.push(parent); } while (parent.parent); return parents; }, // matches the element vs a css selector matches: function matches(selector) { return _matches(this.node, selector); }, // Returns the svg node to call native svg methods on it native: function native() { return this.node; }, // Import raw svg svg: function svg(_svg) { // create temporary holder var well = document.createElement('svg'); // act as a setter if svg is given if (_svg && this instanceof SVG.Parent) { // dump raw svg well.innerHTML = '' + _svg.replace(/\n/, '').replace(/<([\w:-]+)([^<]+?)\/>/g, '<$1$2>') + ''; // transplant nodes for (var i = 0, il = well.firstChild.childNodes.length; i < il; i++) { this.node.appendChild(well.firstChild.firstChild); } // otherwise act as a getter } else { // create a wrapping svg element in case of partial content well.appendChild(_svg = document.createElement('svg')); // write svgjs data to the dom this.writeDataToDom(); // insert a copy of this node _svg.appendChild(this.node.cloneNode(true)); // return target element return well.innerHTML.replace(/^/, '').replace(/<\/svg>$/, ''); } return this; }, // write svgjs data to the dom writeDataToDom: function writeDataToDom() { // dump variables recursively if (this.each || this.lines) { var fn = this.each ? this : this.lines(); fn.each(function () { this.writeDataToDom(); }); } // remove previously set data this.node.removeAttribute('svgjs:data'); if (Object.keys(this.dom).length) { this.node.setAttribute('svgjs:data', JSON.stringify(this.dom)); } // see #428 return this; }, // set given data to the elements data property setData: function setData(o) { this.dom = o; return this; }, is: function is(obj) { return _is(this, obj); } } }); SVG.easing = { '-': function _(pos) { return pos; }, '<>': function _(pos) { return -Math.cos(pos * Math.PI) / 2 + 0.5; }, '>': function _(pos) { return Math.sin(pos * Math.PI / 2); }, '<': function _(pos) { return -Math.cos(pos * Math.PI / 2) + 1; } }; SVG.morph = function (pos) { return function (from, to) { return new SVG.MorphObj(from, to).at(pos); }; }; SVG.Situation = SVG.invent({ create: function create(o) { this.init = false; this.reversed = false; this.reversing = false; this.duration = new SVG.Number(o.duration).valueOf(); this.delay = new SVG.Number(o.delay).valueOf(); this.start = +new Date() + this.delay; this.finish = this.start + this.duration; this.ease = o.ease; // this.loop is incremented from 0 to this.loops // it is also incremented when in an infinite loop (when this.loops is true) this.loop = 0; this.loops = false; this.animations = {// functionToCall: [list of morphable objects] // e.g. move: [SVG.Number, SVG.Number] }; this.attrs = {// holds all attributes which are not represented from a function svg.js provides // e.g. someAttr: SVG.Number }; this.styles = {// holds all styles which should be animated // e.g. fill-color: SVG.Color }; this.transforms = [// holds all transformations as transformation objects // e.g. [SVG.Rotate, SVG.Translate, SVG.Matrix] ]; this.once = {// functions to fire at a specific position // e.g. "0.5": function foo(){} }; } }); SVG.FX = SVG.invent({ create: function create(element) { this._target = element; this.situations = []; this.active = false; this.situation = null; this.paused = false; this.lastPos = 0; this.pos = 0; // The absolute position of an animation is its position in the context of its complete duration (including delay and loops) // When performing a delay, absPos is below 0 and when performing a loop, its value is above 1 this.absPos = 0; this._speed = 1; }, extend: { /** * sets or returns the target of this animation * @param o object || number In case of Object it holds all parameters. In case of number its the duration of the animation * @param ease function || string Function which should be used for easing or easing keyword * @param delay Number indicating the delay before the animation starts * @return target || this */ animate: function animate(o, ease, delay) { if (_typeof(o) === 'object') { ease = o.ease; delay = o.delay; o = o.duration; } var situation = new SVG.Situation({ duration: o || 1000, delay: delay || 0, ease: SVG.easing[ease || '-'] || ease }); this.queue(situation); return this; }, /** * sets a delay before the next element of the queue is called * @param delay Duration of delay in milliseconds * @return this.target() */ /** * sets or returns the target of this animation * @param null || target SVG.Element which should be set as new target * @return target || this */ target: function target(_target) { if (_target && _target instanceof SVG.Element) { this._target = _target; return this; } return this._target; }, // returns the absolute position at a given time timeToAbsPos: function timeToAbsPos(timestamp) { return (timestamp - this.situation.start) / (this.situation.duration / this._speed); }, // returns the timestamp from a given absolute positon absPosToTime: function absPosToTime(absPos) { return this.situation.duration / this._speed * absPos + this.situation.start; }, // starts the animationloop startAnimFrame: function startAnimFrame() { this.stopAnimFrame(); this.animationFrame = window.requestAnimationFrame(function () { this.step(); }.bind(this)); }, // cancels the animationframe stopAnimFrame: function stopAnimFrame() { window.cancelAnimationFrame(this.animationFrame); }, // kicks off the animation - only does something when the queue is currently not active and at least one situation is set start: function start() { // dont start if already started if (!this.active && this.situation) { this.active = true; this.startCurrent(); } return this; }, // start the current situation startCurrent: function startCurrent() { this.situation.start = +new Date() + this.situation.delay / this._speed; this.situation.finish = this.situation.start + this.situation.duration / this._speed; return this.initAnimations().step(); }, /** * adds a function / Situation to the animation queue * @param fn function / situation to add * @return this */ queue: function queue(fn) { if (typeof fn === 'function' || fn instanceof SVG.Situation) { this.situations.push(fn); } if (!this.situation) this.situation = this.situations.shift(); return this; }, /** * pulls next element from the queue and execute it * @return this */ dequeue: function dequeue() { // stop current animation this.stop(); // get next animation from queue this.situation = this.situations.shift(); if (this.situation) { if (this.situation instanceof SVG.Situation) { this.start(); } else { // If it is not a SVG.Situation, then it is a function, we execute it this.situation.call(this); } } return this; }, // updates all animations to the current state of the element // this is important when one property could be changed from another property initAnimations: function initAnimations() { var source; var s = this.situation; if (s.init) return this; for (var i in s.animations) { source = this.target()[i](); if (!Array.isArray(source)) { source = [source]; } if (!Array.isArray(s.animations[i])) { s.animations[i] = [s.animations[i]]; } // if(s.animations[i].length > source.length) { // source.concat = source.concat(s.animations[i].slice(source.length, s.animations[i].length)) // } for (var j = source.length; j--;) { // The condition is because some methods return a normal number instead // of a SVG.Number if (s.animations[i][j] instanceof SVG.Number) { source[j] = new SVG.Number(source[j]); } s.animations[i][j] = source[j].morph(s.animations[i][j]); } } for (var i in s.attrs) { s.attrs[i] = new SVG.MorphObj(this.target().attr(i), s.attrs[i]); } for (var i in s.styles) { s.styles[i] = new SVG.MorphObj(this.target().style(i), s.styles[i]); } s.initialTransformation = this.target().matrixify(); s.init = true; return this; }, clearQueue: function clearQueue() { this.situations = []; return this; }, clearCurrent: function clearCurrent() { this.situation = null; return this; }, /** stops the animation immediately * @param jumpToEnd A Boolean indicating whether to complete the current animation immediately. * @param clearQueue A Boolean indicating whether to remove queued animation as well. * @return this */ stop: function stop(jumpToEnd, clearQueue) { var active = this.active; this.active = false; if (clearQueue) { this.clearQueue(); } if (jumpToEnd && this.situation) { // initialize the situation if it was not !active && this.startCurrent(); this.atEnd(); } this.stopAnimFrame(); return this.clearCurrent(); }, after: function after(fn) { var c = this.last(), wrapper = function wrapper(e) { if (e.detail.situation == c) { fn.call(this, c); this.off('finished.fx', wrapper); // prevent memory leak } }; this.target().on('finished.fx', wrapper); return this._callStart(); }, // adds a callback which is called whenever one animation step is performed during: function during(fn) { var c = this.last(), wrapper = function wrapper(e) { if (e.detail.situation == c) { fn.call(this, e.detail.pos, SVG.morph(e.detail.pos), e.detail.eased, c); } }; // see above this.target().off('during.fx', wrapper).on('during.fx', wrapper); this.after(function () { this.off('during.fx', wrapper); }); return this._callStart(); }, // calls after ALL animations in the queue are finished afterAll: function afterAll(fn) { var wrapper = function wrapper(e) { fn.call(this); this.off('allfinished.fx', wrapper); }; // see above this.target().off('allfinished.fx', wrapper).on('allfinished.fx', wrapper); return this._callStart(); }, last: function last() { return this.situations.length ? this.situations[this.situations.length - 1] : this.situation; }, // adds one property to the animations add: function add(method, args, type) { this.last()[type || 'animations'][method] = args; return this._callStart(); }, /** perform one step of the animation * @param ignoreTime Boolean indicating whether to ignore time and use position directly or recalculate position based on time * @return this */ step: function step(ignoreTime) { // convert current time to an absolute position if (!ignoreTime) this.absPos = this.timeToAbsPos(+new Date()); // This part convert an absolute position to a position if (this.situation.loops !== false) { var absPos, absPosInt, lastLoop; // If the absolute position is below 0, we just treat it as if it was 0 absPos = Math.max(this.absPos, 0); absPosInt = Math.floor(absPos); if (this.situation.loops === true || absPosInt < this.situation.loops) { this.pos = absPos - absPosInt; lastLoop = this.situation.loop; this.situation.loop = absPosInt; } else { this.absPos = this.situation.loops; this.pos = 1; // The -1 here is because we don't want to toggle reversed when all the loops have been completed lastLoop = this.situation.loop - 1; this.situation.loop = this.situation.loops; } if (this.situation.reversing) { // Toggle reversed if an odd number of loops as occured since the last call of step this.situation.reversed = this.situation.reversed != Boolean((this.situation.loop - lastLoop) % 2); } } else { // If there are no loop, the absolute position must not be above 1 this.absPos = Math.min(this.absPos, 1); this.pos = this.absPos; } // while the absolute position can be below 0, the position must not be below 0 if (this.pos < 0) this.pos = 0; if (this.situation.reversed) this.pos = 1 - this.pos; // apply easing var eased = this.situation.ease(this.pos); // call once-callbacks for (var i in this.situation.once) { if (i > this.lastPos && i <= eased) { this.situation.once[i].call(this.target(), this.pos, eased); delete this.situation.once[i]; } } // fire during callback with position, eased position and current situation as parameter if (this.active) this.target().fire('during', { pos: this.pos, eased: eased, fx: this, situation: this.situation }); // the user may call stop or finish in the during callback // so make sure that we still have a valid situation if (!this.situation) { return this; } // apply the actual animation to every property this.eachAt(); // do final code when situation is finished if (this.pos == 1 && !this.situation.reversed || this.situation.reversed && this.pos == 0) { // stop animation callback this.stopAnimFrame(); // fire finished callback with current situation as parameter this.target().fire('finished', { fx: this, situation: this.situation }); if (!this.situations.length) { this.target().fire('allfinished'); // Recheck the length since the user may call animate in the afterAll callback if (!this.situations.length) { this.target().off('.fx'); // there shouldnt be any binding left, but to make sure... this.active = false; } } // start next animation if (this.active) this.dequeue();else this.clearCurrent(); } else if (!this.paused && this.active) { // we continue animating when we are not at the end this.startAnimFrame(); } // save last eased position for once callback triggering this.lastPos = eased; return this; }, // calculates the step for every property and calls block with it eachAt: function eachAt() { var len, at, self = this, target = this.target(), s = this.situation; // apply animations which can be called trough a method for (var i in s.animations) { at = [].concat(s.animations[i]).map(function (el) { return typeof el !== 'string' && el.at ? el.at(s.ease(self.pos), self.pos) : el; }); target[i].apply(target, at); } // apply animation which has to be applied with attr() for (var i in s.attrs) { at = [i].concat(s.attrs[i]).map(function (el) { return typeof el !== 'string' && el.at ? el.at(s.ease(self.pos), self.pos) : el; }); target.attr.apply(target, at); } // apply animation which has to be applied with style() for (var i in s.styles) { at = [i].concat(s.styles[i]).map(function (el) { return typeof el !== 'string' && el.at ? el.at(s.ease(self.pos), self.pos) : el; }); target.style.apply(target, at); } // animate initialTransformation which has to be chained if (s.transforms.length) { // get initial initialTransformation at = s.initialTransformation; for (var i = 0, len = s.transforms.length; i < len; i++) { // get next transformation in chain var a = s.transforms[i]; // multiply matrix directly if (a instanceof SVG.Matrix) { if (a.relative) { at = at.multiply(new SVG.Matrix().morph(a).at(s.ease(this.pos))); } else { at = at.morph(a).at(s.ease(this.pos)); } continue; } // when transformation is absolute we have to reset the needed transformation first if (!a.relative) { a.undo(at.extract()); } // and reapply it after at = at.multiply(a.at(s.ease(this.pos))); } // set new matrix on element target.matrix(at); } return this; }, // adds an once-callback which is called at a specific position and never again once: function once(pos, fn, isEased) { var c = this.last(); if (!isEased) pos = c.ease(pos); c.once[pos] = fn; return this; }, _callStart: function _callStart() { setTimeout(function () { this.start(); }.bind(this), 0); return this; } }, parent: SVG.Element, // Add method to parent elements construct: { // Get fx module or create a new one, then animate with given duration and ease animate: function animate(o, ease, delay) { return (this.fx || (this.fx = new SVG.FX(this))).animate(o, ease, delay); }, delay: function delay(_delay) { return (this.fx || (this.fx = new SVG.FX(this))).delay(_delay); }, stop: function stop(jumpToEnd, clearQueue) { if (this.fx) { this.fx.stop(jumpToEnd, clearQueue); } return this; }, finish: function finish() { if (this.fx) { this.fx.finish(); } return this; } } }); // MorphObj is used whenever no morphable object is given SVG.MorphObj = SVG.invent({ create: function create(from, to) { // prepare color for morphing if (SVG.Color.isColor(to)) return new SVG.Color(from).morph(to); // check if we have a list of values if (SVG.regex.delimiter.test(from)) { // prepare path for morphing if (SVG.regex.pathLetters.test(from)) return new SVG.PathArray(from).morph(to); // prepare value list for morphing else return new SVG.Array(from).morph(to); } // prepare number for morphing if (SVG.regex.numberAndUnit.test(to)) return new SVG.Number(from).morph(to); // prepare for plain morphing this.value = from; this.destination = to; }, extend: { at: function at(pos, real) { return real < 1 ? this.value : this.destination; }, valueOf: function valueOf() { return this.value; } } }); SVG.extend(SVG.FX, { // Add animatable attributes attr: function attr(a, v, relative) { // apply attributes individually if (_typeof(a) === 'object') { for (var key in a) { this.attr(key, a[key]); } } else { this.add(a, v, 'attrs'); } return this; }, // Add animatable plot plot: function plot(a, b, c, d) { // Lines can be plotted with 4 arguments if (arguments.length == 4) { return this.plot([a, b, c, d]); } return this.add('plot', new (this.target().morphArray)(a)); } }); SVG.Box = SVG.invent({ create: function create(x, y, width, height) { if (_typeof(x) === 'object' && !(x instanceof SVG.Element)) { // chromes getBoundingClientRect has no x and y property return SVG.Box.call(this, x.left != null ? x.left : x.x, x.top != null ? x.top : x.y, x.width, x.height); } else if (arguments.length == 4) { this.x = x; this.y = y; this.width = width; this.height = height; } // add center, right, bottom... fullBox(this); } }); SVG.BBox = SVG.invent({ // Initialize create: function create(element) { SVG.Box.apply(this, [].slice.call(arguments)); // get values if element is given if (element instanceof SVG.Element) { var box; // yes this is ugly, but Firefox can be a pain when it comes to elements that are not yet rendered try { if (!document.documentElement.contains) { // This is IE - it does not support contains() for top-level SVGs var topParent = element.node; while (topParent.parentNode) { topParent = topParent.parentNode; } if (topParent != document) throw new Error('Element not in the dom'); } else {} // the element is NOT in the dom, throw error // disabling the check below which fixes issue #76 // if (!document.documentElement.contains(element.node)) throw new Exception('Element not in the dom') // find native bbox box = element.node.getBBox(); } catch (e) { if (element instanceof SVG.Shape) { if (!SVG.parser.draw) { // fixes apexcharts/vue-apexcharts #14 SVG.prepare(); } var clone = element.clone(SVG.parser.draw.instance).show(); box = clone.node.getBBox(); clone.remove(); } else { box = { x: element.node.clientLeft, y: element.node.clientTop, width: element.node.clientWidth, height: element.node.clientHeight }; } } SVG.Box.call(this, box); } }, // Define ancestor inherit: SVG.Box, // Define Parent parent: SVG.Element, // Constructor construct: { // Get bounding box bbox: function bbox() { return new SVG.BBox(this); } } }); SVG.BBox.prototype.constructor = SVG.BBox; SVG.Matrix = SVG.invent({ // Initialize create: function create(source) { var base = arrayToMatrix([1, 0, 0, 1, 0, 0]); // ensure source as object source = source instanceof SVG.Element ? source.matrixify() : typeof source === 'string' ? arrayToMatrix(source.split(SVG.regex.delimiter).map(parseFloat)) : arguments.length == 6 ? arrayToMatrix([].slice.call(arguments)) : Array.isArray(source) ? arrayToMatrix(source) : _typeof(source) === 'object' ? source : base; // merge source for (var i = abcdef.length - 1; i >= 0; --i) { this[abcdef[i]] = source[abcdef[i]] != null ? source[abcdef[i]] : base[abcdef[i]]; } }, // Add methods extend: { // Extract individual transformations extract: function extract() { // find delta transform points var px = deltaTransformPoint(this, 0, 1), py = deltaTransformPoint(this, 1, 0), skewX = 180 / Math.PI * Math.atan2(px.y, px.x) - 90; return { // translation x: this.e, y: this.f, transformedX: (this.e * Math.cos(skewX * Math.PI / 180) + this.f * Math.sin(skewX * Math.PI / 180)) / Math.sqrt(this.a * this.a + this.b * this.b), transformedY: (this.f * Math.cos(skewX * Math.PI / 180) + this.e * Math.sin(-skewX * Math.PI / 180)) / Math.sqrt(this.c * this.c + this.d * this.d), // rotation rotation: skewX, a: this.a, b: this.b, c: this.c, d: this.d, e: this.e, f: this.f, matrix: new SVG.Matrix(this) }; }, // Clone matrix clone: function clone() { return new SVG.Matrix(this); }, // Morph one matrix into another morph: function morph(matrix) { // store new destination this.destination = new SVG.Matrix(matrix); return this; }, // Multiplies by given matrix multiply: function multiply(matrix) { return new SVG.Matrix(this.native().multiply(parseMatrix(matrix).native())); }, // Inverses matrix inverse: function inverse() { return new SVG.Matrix(this.native().inverse()); }, // Translate matrix translate: function translate(x, y) { return new SVG.Matrix(this.native().translate(x || 0, y || 0)); }, // Convert to native SVGMatrix native: function native() { // create new matrix var matrix = SVG.parser.native.createSVGMatrix(); // update with current values for (var i = abcdef.length - 1; i >= 0; i--) { matrix[abcdef[i]] = this[abcdef[i]]; } return matrix; }, // Convert matrix to string toString: function toString() { // Construct the matrix directly, avoid values that are too small return 'matrix(' + float32String(this.a) + ',' + float32String(this.b) + ',' + float32String(this.c) + ',' + float32String(this.d) + ',' + float32String(this.e) + ',' + float32String(this.f) + ')'; } }, // Define parent parent: SVG.Element, // Add parent method construct: { // Get current matrix ctm: function ctm() { return new SVG.Matrix(this.node.getCTM()); }, // Get current screen matrix screenCTM: function screenCTM() { /* https://bugzilla.mozilla.org/show_bug.cgi?id=1344537 This is needed because FF does not return the transformation matrix for the inner coordinate system when getScreenCTM() is called on nested svgs. However all other Browsers do that */ if (this instanceof SVG.Nested) { var rect = this.rect(1, 1); var m = rect.node.getScreenCTM(); rect.remove(); return new SVG.Matrix(m); } return new SVG.Matrix(this.node.getScreenCTM()); } } }); SVG.Point = SVG.invent({ // Initialize create: function create(x, y) { var source, base = { x: 0, y: 0 }; // ensure source as object source = Array.isArray(x) ? { x: x[0], y: x[1] } : _typeof(x) === 'object' ? { x: x.x, y: x.y } : x != null ? { x: x, y: y != null ? y : x } : base; // If y has no value, then x is used has its value // merge source this.x = source.x; this.y = source.y; }, // Add methods extend: { // Clone point clone: function clone() { return new SVG.Point(this); }, // Morph one point into another morph: function morph(x, y) { // store new destination this.destination = new SVG.Point(x, y); return this; } } }); SVG.extend(SVG.Element, { // Get point point: function point(x, y) { return new SVG.Point(x, y).transform(this.screenCTM().inverse()); } }); SVG.extend(SVG.Element, { // Set svg element attribute attr: function attr(a, v, n) { // act as full getter if (a == null) { // get an object of attributes a = {}; v = this.node.attributes; for (var n = v.length - 1; n >= 0; n--) { a[v[n].nodeName] = SVG.regex.isNumber.test(v[n].nodeValue) ? parseFloat(v[n].nodeValue) : v[n].nodeValue; } return a; } else if (_typeof(a) === 'object') { // apply every attribute individually if an object is passed for (var v_ in a) { this.attr(v_, a[v_]); } } else if (v === null) { // remove value this.node.removeAttribute(a); } else if (v == null) { // act as a getter if the first and only argument is not an object v = this.node.getAttribute(a); return v == null ? SVG.defaults.attrs[a] : SVG.regex.isNumber.test(v) ? parseFloat(v) : v; } else { // BUG FIX: some browsers will render a stroke if a color is given even though stroke width is 0 if (a == 'stroke-width') { this.attr('stroke', parseFloat(v) > 0 ? this._stroke : null); } else if (a == 'stroke') { this._stroke = v; } // convert image fill and stroke to patterns if (a == 'fill' || a == 'stroke') { if (SVG.regex.isImage.test(v)) { v = this.doc().defs().image(v, 0, 0); } if (v instanceof SVG.Image) { v = this.doc().defs().pattern(0, 0, function () { this.add(v); }); } } // ensure correct numeric values (also accepts NaN and Infinity) if (typeof v === 'number') { v = new SVG.Number(v); } // ensure full hex color else if (SVG.Color.isColor(v)) { v = new SVG.Color(v); } // parse array values else if (Array.isArray(v)) { v = new SVG.Array(v); } // if the passed attribute is leading... if (a == 'leading') { // ... call the leading method instead if (this.leading) { this.leading(v); } } else { // set given attribute on node typeof n === 'string' ? this.node.setAttributeNS(n, a, v.toString()) : this.node.setAttribute(a, v.toString()); } // rebuild if required if (this.rebuild && (a == 'font-size' || a == 'x')) { this.rebuild(a, v); } } return this; } }); SVG.extend(SVG.Element, { // Add transformations transform: function transform(o, relative) { // get target in case of the fx module, otherwise reference this var target = this, matrix; // act as a getter if (_typeof(o) !== 'object') { // get current matrix matrix = new SVG.Matrix(target).extract(); return typeof o === 'string' ? matrix[o] : matrix; } // get current matrix matrix = new SVG.Matrix(target); // ensure relative flag relative = !!relative || !!o.relative; // act on matrix if (o.a != null) { matrix = relative // relative ? matrix.multiply(new SVG.Matrix(o)) // absolute : new SVG.Matrix(o); } return this.attr('transform', matrix); } }); SVG.extend(SVG.Element, { // Reset all transformations untransform: function untransform() { return this.attr('transform', null); }, // merge the whole transformation chain into one matrix and returns it matrixify: function matrixify() { var matrix = (this.attr('transform') || ''). // split transformations split(SVG.regex.transforms).slice(0, -1).map(function (str) { // generate key => value pairs var kv = str.trim().split('('); return [kv[0], kv[1].split(SVG.regex.delimiter).map(function (str) { return parseFloat(str); })]; }) // merge every transformation into one matrix .reduce(function (matrix, transform) { if (transform[0] == 'matrix') return matrix.multiply(arrayToMatrix(transform[1])); return matrix[transform[0]].apply(matrix, transform[1]); }, new SVG.Matrix()); return matrix; }, // add an element to another parent without changing the visual representation on the screen toParent: function toParent(parent) { if (this == parent) return this; var ctm = this.screenCTM(); var pCtm = parent.screenCTM().inverse(); this.addTo(parent).untransform().transform(pCtm.multiply(ctm)); return this; }, // same as above with parent equals root-svg toDoc: function toDoc() { return this.toParent(this.doc()); } }); SVG.Transformation = SVG.invent({ create: function create(source, inversed) { if (arguments.length > 1 && typeof inversed !== 'boolean') { return this.constructor.call(this, [].slice.call(arguments)); } if (Array.isArray(source)) { for (var i = 0, len = this.arguments.length; i < len; ++i) { this[this.arguments[i]] = source[i]; } } else if (_typeof(source) === 'object') { for (var i = 0, len = this.arguments.length; i < len; ++i) { this[this.arguments[i]] = source[this.arguments[i]]; } } this.inversed = false; if (inversed === true) { this.inversed = true; } } }); SVG.Translate = SVG.invent({ parent: SVG.Matrix, inherit: SVG.Transformation, create: function create(source, inversed) { this.constructor.apply(this, [].slice.call(arguments)); }, extend: { arguments: ['transformedX', 'transformedY'], method: 'translate' } }); SVG.extend(SVG.Element, { // Dynamic style generator style: function style(s, v) { if (arguments.length == 0) { // get full style return this.node.style.cssText || ''; } else if (arguments.length < 2) { // apply every style individually if an object is passed if (_typeof(s) === 'object') { for (var v_ in s) { this.style(v_, s[v_]); } } else if (SVG.regex.isCss.test(s)) { // parse css string s = s.split(/\s*;\s*/) // filter out suffix ; and stuff like ;; .filter(function (e) { return !!e; }).map(function (e) { return e.split(/\s*:\s*/); }); // apply every definition individually while (v = s.pop()) { this.style(v[0], v[1]); } } else { // act as a getter if the first and only argument is not an object return this.node.style[camelCase(s)]; } } else { this.node.style[camelCase(s)] = v === null || SVG.regex.isBlank.test(v) ? '' : v; } return this; } }); SVG.Parent = SVG.invent({ // Initialize node create: function create(element) { this.constructor.call(this, element); }, // Inherit from inherit: SVG.Element, // Add class methods extend: { // Returns all child elements children: function children() { return SVG.utils.map(SVG.utils.filterSVGElements(this.node.childNodes), function (node) { return SVG.adopt(node); }); }, // Add given element at a position add: function add(element, i) { if (i == null) { this.node.appendChild(element.node); } else if (element.node != this.node.childNodes[i]) { this.node.insertBefore(element.node, this.node.childNodes[i]); } return this; }, // Basically does the same as `add()` but returns the added element instead put: function put(element, i) { this.add(element, i); return element; }, // Checks if the given element is a child has: function has(element) { return this.index(element) >= 0; }, // Gets index of given element index: function index(element) { return [].slice.call(this.node.childNodes).indexOf(element.node); }, // Get a element at the given index get: function get(i) { return SVG.adopt(this.node.childNodes[i]); }, // Get first child first: function first() { return this.get(0); }, // Get the last child last: function last() { return this.get(this.node.childNodes.length - 1); }, // Iterates over all children and invokes a given block each: function each(block, deep) { var il, children = this.children(); for (var i = 0, il = children.length; i < il; i++) { if (children[i] instanceof SVG.Element) { block.apply(children[i], [i, children]); } if (deep && children[i] instanceof SVG.Container) { children[i].each(block, deep); } } return this; }, // Remove a given child removeElement: function removeElement(element) { this.node.removeChild(element.node); return this; }, // Remove all elements in this container clear: function clear() { // remove children while (this.node.hasChildNodes()) { this.node.removeChild(this.node.lastChild); } // remove defs reference delete this._defs; return this; }, // Get defs defs: function defs() { return this.doc().defs(); } } }); SVG.extend(SVG.Parent, { ungroup: function ungroup(parent, depth) { if (depth === 0 || this instanceof SVG.Defs || this.node == SVG.parser.draw) return this; parent = parent || (this instanceof SVG.Doc ? this : this.parent(SVG.Parent)); depth = depth || Infinity; this.each(function () { if (this instanceof SVG.Defs) return this; if (this instanceof SVG.Parent) return this.ungroup(parent, depth - 1); return this.toParent(parent); }); this.node.firstChild || this.remove(); return this; }, flatten: function flatten(parent, depth) { return this.ungroup(parent, depth); } }); SVG.Container = SVG.invent({ // Initialize node create: function create(element) { this.constructor.call(this, element); }, // Inherit from inherit: SVG.Parent }); SVG.ViewBox = SVG.invent({ // Define parent parent: SVG.Container, // Add parent method construct: {} }) // Add events to elements ; ['click', 'dblclick', 'mousedown', 'mouseup', 'mouseover', 'mouseout', 'mousemove', // , 'mouseenter' -> not supported by IE // , 'mouseleave' -> not supported by IE 'touchstart', 'touchmove', 'touchleave', 'touchend', 'touchcancel'].forEach(function (event) { // add event to SVG.Element SVG.Element.prototype[event] = function (f) { // bind event to element rather than element node SVG.on(this.node, event, f); return this; }; }); // Initialize listeners stack SVG.listeners = []; SVG.handlerMap = []; SVG.listenerId = 0; // Add event binder in the SVG namespace SVG.on = function (node, event, listener, binding, options) { // create listener, get object-index var l = listener.bind(binding || node.instance || node), index = (SVG.handlerMap.indexOf(node) + 1 || SVG.handlerMap.push(node)) - 1, ev = event.split('.')[0], ns = event.split('.')[1] || '*'; // ensure valid object SVG.listeners[index] = SVG.listeners[index] || {}; SVG.listeners[index][ev] = SVG.listeners[index][ev] || {}; SVG.listeners[index][ev][ns] = SVG.listeners[index][ev][ns] || {}; if (!listener._svgjsListenerId) { listener._svgjsListenerId = ++SVG.listenerId; } // reference listener SVG.listeners[index][ev][ns][listener._svgjsListenerId] = l; // add listener node.addEventListener(ev, l, options || false); }; // Add event unbinder in the SVG namespace SVG.off = function (node, event, listener) { var index = SVG.handlerMap.indexOf(node), ev = event && event.split('.')[0], ns = event && event.split('.')[1], namespace = ''; if (index == -1) return; if (listener) { if (typeof listener === 'function') listener = listener._svgjsListenerId; if (!listener) return; // remove listener reference if (SVG.listeners[index][ev] && SVG.listeners[index][ev][ns || '*']) { // remove listener node.removeEventListener(ev, SVG.listeners[index][ev][ns || '*'][listener], false); delete SVG.listeners[index][ev][ns || '*'][listener]; } } else if (ns && ev) { // remove all listeners for a namespaced event if (SVG.listeners[index][ev] && SVG.listeners[index][ev][ns]) { for (var listener_ in SVG.listeners[index][ev][ns]) { SVG.off(node, [ev, ns].join('.'), listener_); } delete SVG.listeners[index][ev][ns]; } } else if (ns) { // remove all listeners for a specific namespace for (var event_ in SVG.listeners[index]) { for (var namespace in SVG.listeners[index][event_]) { if (ns === namespace) { SVG.off(node, [event_, ns].join('.')); } } } } else if (ev) { // remove all listeners for the event if (SVG.listeners[index][ev]) { for (var namespace in SVG.listeners[index][ev]) { SVG.off(node, [ev, namespace].join('.')); } delete SVG.listeners[index][ev]; } } else { // remove all listeners on a given node for (var event_ in SVG.listeners[index]) { SVG.off(node, event_); } delete SVG.listeners[index]; delete SVG.handlerMap[index]; } }; // SVG.extend(SVG.Element, { // Bind given event to listener on: function on(event, listener, binding, options) { SVG.on(this.node, event, listener, binding, options); return this; }, // Unbind event from listener off: function off(event, listener) { SVG.off(this.node, event, listener); return this; }, // Fire given event fire: function fire(event, data) { // Dispatch event if (event instanceof window.Event) { this.node.dispatchEvent(event); } else { this.node.dispatchEvent(event = new SVG.CustomEvent(event, { detail: data, cancelable: true })); } this._event = event; return this; }, event: function event() { return this._event; } }); SVG.Defs = SVG.invent({ // Initialize node create: 'defs', // Inherit from inherit: SVG.Container }); SVG.G = SVG.invent({ // Initialize node create: 'g', // Inherit from inherit: SVG.Container, // Add class methods extend: { // Move over x-axis x: function x(_x2) { return _x2 == null ? this.transform('x') : this.transform({ x: _x2 - this.x() }, true); } }, // Add parent method construct: { // Create a group element group: function group() { return this.put(new SVG.G()); } } }); SVG.Doc = SVG.invent({ // Initialize node create: function create(element) { if (element) { // ensure the presence of a dom element element = typeof element === 'string' ? document.getElementById(element) : element; // If the target is an svg element, use that element as the main wrapper. // This allows svg.js to work with svg documents as well. if (element.nodeName == 'svg') { this.constructor.call(this, element); } else { this.constructor.call(this, SVG.create('svg')); element.appendChild(this.node); this.size('100%', '100%'); } // set svg element attributes and ensure defs node this.namespace().defs(); } }, // Inherit from inherit: SVG.Container, // Add class methods extend: { // Add namespaces namespace: function namespace() { return this.attr({ xmlns: SVG.ns, version: '1.1' }).attr('xmlns:xlink', SVG.xlink, SVG.xmlns).attr('xmlns:svgjs', SVG.svgjs, SVG.xmlns); }, // Creates and returns defs element defs: function defs() { if (!this._defs) { var defs; // Find or create a defs element in this instance if (defs = this.node.getElementsByTagName('defs')[0]) { this._defs = SVG.adopt(defs); } else { this._defs = new SVG.Defs(); } // Make sure the defs node is at the end of the stack this.node.appendChild(this._defs.node); } return this._defs; }, // custom parent method parent: function parent() { if (!this.node.parentNode || this.node.parentNode.nodeName == '#document') return null; return this.node.parentNode; }, // Removes the doc from the DOM remove: function remove() { if (this.parent()) { this.parent().removeChild(this.node); } return this; }, clear: function clear() { // remove children while (this.node.hasChildNodes()) { this.node.removeChild(this.node.lastChild); } // remove defs reference delete this._defs; // add back parser if (SVG.parser.draw && !SVG.parser.draw.parentNode) { this.node.appendChild(SVG.parser.draw); } return this; }, clone: function clone(parent) { // write dom data to the dom so the clone can pickup the data this.writeDataToDom(); // get reference to node var node = this.node; // clone element and assign new id var clone = assignNewId(node.cloneNode(true)); // insert the clone in the given parent or after myself if (parent) { (parent.node || parent).appendChild(clone.node); } else { node.parentNode.insertBefore(clone.node, node.nextSibling); } return clone; } } }); // ### This module adds backward / forward functionality to elements. // SVG.extend(SVG.Element, {// Get all siblings, including myself }); SVG.Gradient = SVG.invent({ // Initialize node create: function create(type) { this.constructor.call(this, SVG.create(type + 'Gradient')); // store type this.type = type; }, // Inherit from inherit: SVG.Container, // Add class methods extend: { // Add a color stop at: function at(offset, color, opacity) { return this.put(new SVG.Stop()).update(offset, color, opacity); }, // Update gradient update: function update(block) { // remove all stops this.clear(); // invoke passed block if (typeof block === 'function') { block.call(this, this); } return this; }, // Return the fill id fill: function fill() { return 'url(#' + this.id() + ')'; }, // Alias string convertion to fill toString: function toString() { return this.fill(); }, // custom attr to handle transform attr: function attr(a, b, c) { if (a == 'transform') a = 'gradientTransform'; return SVG.Container.prototype.attr.call(this, a, b, c); } }, // Add parent method construct: { // Create gradient element in defs gradient: function gradient(type, block) { return this.defs().gradient(type, block); } } }); // Add animatable methods to both gradient and fx module SVG.extend(SVG.Gradient, SVG.FX, { // From position from: function from(x, y) { return (this._target || this).type == 'radial' ? this.attr({ fx: new SVG.Number(x), fy: new SVG.Number(y) }) : this.attr({ x1: new SVG.Number(x), y1: new SVG.Number(y) }); }, // To position to: function to(x, y) { return (this._target || this).type == 'radial' ? this.attr({ cx: new SVG.Number(x), cy: new SVG.Number(y) }) : this.attr({ x2: new SVG.Number(x), y2: new SVG.Number(y) }); } }); // Base gradient generation SVG.extend(SVG.Defs, { // define gradient gradient: function gradient(type, block) { return this.put(new SVG.Gradient(type)).update(block); } }); SVG.Stop = SVG.invent({ // Initialize node create: 'stop', // Inherit from inherit: SVG.Element, // Add class methods extend: { // add color stops update: function update(o) { if (typeof o === 'number' || o instanceof SVG.Number) { o = { offset: arguments[0], color: arguments[1], opacity: arguments[2] }; } // set attributes if (o.opacity != null) this.attr('stop-opacity', o.opacity); if (o.color != null) this.attr('stop-color', o.color); if (o.offset != null) this.attr('offset', new SVG.Number(o.offset)); return this; } } }); SVG.Pattern = SVG.invent({ // Initialize node create: 'pattern', // Inherit from inherit: SVG.Container, // Add class methods extend: { // Return the fill id fill: function fill() { return 'url(#' + this.id() + ')'; }, // Update pattern by rebuilding update: function update(block) { // remove content this.clear(); // invoke passed block if (typeof block === 'function') { block.call(this, this); } return this; }, // Alias string convertion to fill toString: function toString() { return this.fill(); }, // custom attr to handle transform attr: function attr(a, b, c) { if (a == 'transform') a = 'patternTransform'; return SVG.Container.prototype.attr.call(this, a, b, c); } }, // Add parent method construct: { // Create pattern element in defs pattern: function pattern(width, height, block) { return this.defs().pattern(width, height, block); } } }); SVG.extend(SVG.Defs, { // Define gradient pattern: function pattern(width, height, block) { return this.put(new SVG.Pattern()).update(block).attr({ x: 0, y: 0, width: width, height: height, patternUnits: 'userSpaceOnUse' }); } }); SVG.Shape = SVG.invent({ // Initialize node create: function create(element) { this.constructor.call(this, element); }, // Inherit from inherit: SVG.Element }); SVG.Symbol = SVG.invent({ // Initialize node create: 'symbol', // Inherit from inherit: SVG.Container, construct: { // create symbol symbol: function symbol() { return this.put(new SVG.Symbol()); } } }); SVG.Use = SVG.invent({ // Initialize node create: 'use', // Inherit from inherit: SVG.Shape, // Add class methods extend: { // Use element as a reference element: function element(_element, file) { // Set lined element return this.attr('href', (file || '') + '#' + _element, SVG.xlink); } }, // Add parent method construct: { // Create a use element use: function use(element, file) { return this.put(new SVG.Use()).element(element, file); } } }); SVG.Rect = SVG.invent({ // Initialize node create: 'rect', // Inherit from inherit: SVG.Shape, // Add parent method construct: { // Create a rect element rect: function rect(width, height) { return this.put(new SVG.Rect()).size(width, height); } } }); SVG.Circle = SVG.invent({ // Initialize node create: 'circle', // Inherit from inherit: SVG.Shape, // Add parent method construct: { // Create circle element, based on ellipse circle: function circle(size) { return this.put(new SVG.Circle()).rx(new SVG.Number(size).divide(2)).move(0, 0); } } }); SVG.extend(SVG.Circle, SVG.FX, { // Radius x value rx: function rx(_rx) { return this.attr('r', _rx); }, // Alias radius x value ry: function ry(_ry) { return this.rx(_ry); } }); SVG.Ellipse = SVG.invent({ // Initialize node create: 'ellipse', // Inherit from inherit: SVG.Shape, // Add parent method construct: { // Create an ellipse ellipse: function ellipse(width, height) { return this.put(new SVG.Ellipse()).size(width, height).move(0, 0); } } }); SVG.extend(SVG.Ellipse, SVG.Rect, SVG.FX, { // Radius x value rx: function rx(_rx2) { return this.attr('rx', _rx2); }, // Radius y value ry: function ry(_ry2) { return this.attr('ry', _ry2); } }); // Add common method SVG.extend(SVG.Circle, SVG.Ellipse, { // Move over x-axis x: function x(_x3) { return _x3 == null ? this.cx() - this.rx() : this.cx(_x3 + this.rx()); }, // Move over y-axis y: function y(_y2) { return _y2 == null ? this.cy() - this.ry() : this.cy(_y2 + this.ry()); }, // Move by center over x-axis cx: function cx(x) { return x == null ? this.attr('cx') : this.attr('cx', x); }, // Move by center over y-axis cy: function cy(y) { return y == null ? this.attr('cy') : this.attr('cy', y); }, // Set width of element width: function width(_width2) { return _width2 == null ? this.rx() * 2 : this.rx(new SVG.Number(_width2).divide(2)); }, // Set height of element height: function height(_height2) { return _height2 == null ? this.ry() * 2 : this.ry(new SVG.Number(_height2).divide(2)); }, // Custom size function size: function size(width, height) { var p = proportionalSize(this, width, height); return this.rx(new SVG.Number(p.width).divide(2)).ry(new SVG.Number(p.height).divide(2)); } }); SVG.Line = SVG.invent({ // Initialize node create: 'line', // Inherit from inherit: SVG.Shape, // Add class methods extend: { // Get array array: function array() { return new SVG.PointArray([[this.attr('x1'), this.attr('y1')], [this.attr('x2'), this.attr('y2')]]); }, // Overwrite native plot() method plot: function plot(x1, y1, x2, y2) { if (x1 == null) { return this.array(); } else if (typeof y1 !== 'undefined') { x1 = { x1: x1, y1: y1, x2: x2, y2: y2 }; } else { x1 = new SVG.PointArray(x1).toLine(); } return this.attr(x1); }, // Move by left top corner move: function move(x, y) { return this.attr(this.array().move(x, y).toLine()); }, // Set element size to given width and height size: function size(width, height) { var p = proportionalSize(this, width, height); return this.attr(this.array().size(p.width, p.height).toLine()); } }, // Add parent method construct: { // Create a line element line: function line(x1, y1, x2, y2) { // make sure plot is called as a setter // x1 is not necessarily a number, it can also be an array, a string and a SVG.PointArray return SVG.Line.prototype.plot.apply(this.put(new SVG.Line()), x1 != null ? [x1, y1, x2, y2] : [0, 0, 0, 0]); } } }); SVG.Polyline = SVG.invent({ // Initialize node create: 'polyline', // Inherit from inherit: SVG.Shape, // Add parent method construct: { // Create a wrapped polyline element polyline: function polyline(p) { // make sure plot is called as a setter return this.put(new SVG.Polyline()).plot(p || new SVG.PointArray()); } } }); SVG.Polygon = SVG.invent({ // Initialize node create: 'polygon', // Inherit from inherit: SVG.Shape, // Add parent method construct: { // Create a wrapped polygon element polygon: function polygon(p) { // make sure plot is called as a setter return this.put(new SVG.Polygon()).plot(p || new SVG.PointArray()); } } }); // Add polygon-specific functions SVG.extend(SVG.Polyline, SVG.Polygon, { // Get array array: function array() { return this._array || (this._array = new SVG.PointArray(this.attr('points'))); }, // Plot new path plot: function plot(p) { return p == null ? this.array() : this.clear().attr('points', typeof p === 'string' ? p : this._array = new SVG.PointArray(p)); }, // Clear array cache clear: function clear() { delete this._array; return this; }, // Move by left top corner move: function move(x, y) { return this.attr('points', this.array().move(x, y)); }, // Set element size to given width and height size: function size(width, height) { var p = proportionalSize(this, width, height); return this.attr('points', this.array().size(p.width, p.height)); } }); // unify all point to point elements SVG.extend(SVG.Line, SVG.Polyline, SVG.Polygon, { // Define morphable array morphArray: SVG.PointArray, // Move by left top corner over x-axis x: function x(_x4) { return _x4 == null ? this.bbox().x : this.move(_x4, this.bbox().y); }, // Move by left top corner over y-axis y: function y(_y3) { return _y3 == null ? this.bbox().y : this.move(this.bbox().x, _y3); }, // Set width of element width: function width(_width3) { var b = this.bbox(); return _width3 == null ? b.width : this.size(_width3, b.height); }, // Set height of element height: function height(_height3) { var b = this.bbox(); return _height3 == null ? b.height : this.size(b.width, _height3); } }); SVG.Path = SVG.invent({ // Initialize node create: 'path', // Inherit from inherit: SVG.Shape, // Add class methods extend: { // Define morphable array morphArray: SVG.PathArray, // Get array array: function array() { return this._array || (this._array = new SVG.PathArray(this.attr('d'))); }, // Plot new path plot: function plot(d) { return d == null ? this.array() : this.clear().attr('d', typeof d === 'string' ? d : this._array = new SVG.PathArray(d)); }, // Clear array cache clear: function clear() { delete this._array; return this; } }, // Add parent method construct: { // Create a wrapped path element path: function path(d) { // make sure plot is called as a setter return this.put(new SVG.Path()).plot(d || new SVG.PathArray()); } } }); SVG.Image = SVG.invent({ // Initialize node create: 'image', // Inherit from inherit: SVG.Shape, // Add class methods extend: { // (re)load image load: function load(url) { if (!url) return this; var self = this, img = new window.Image(); // preload image SVG.on(img, 'load', function () { SVG.off(img); var p = self.parent(SVG.Pattern); if (p === null) return; // ensure image size if (self.width() == 0 && self.height() == 0) { self.size(img.width, img.height); } // ensure pattern size if not set if (p && p.width() == 0 && p.height() == 0) { p.size(self.width(), self.height()); } // callback if (typeof self._loaded === 'function') { self._loaded.call(self, { width: img.width, height: img.height, ratio: img.width / img.height, url: url }); } }); SVG.on(img, 'error', function (e) { SVG.off(img); if (typeof self._error === 'function') { self._error.call(self, e); } }); return this.attr('href', img.src = this.src = url, SVG.xlink); }, // Add loaded callback loaded: function loaded(_loaded) { this._loaded = _loaded; return this; }, error: function error(_error) { this._error = _error; return this; } }, // Add parent method construct: { // create image element, load image and set its size image: function image(source, width, height) { return this.put(new SVG.Image()).load(source).size(width || 0, height || width || 0); } } }); SVG.Text = SVG.invent({ // Initialize node create: function create() { this.constructor.call(this, SVG.create('text')); this.dom.leading = new SVG.Number(1.3); // store leading value for rebuilding this._rebuild = true; // enable automatic updating of dy values this._build = false; // disable build mode for adding multiple lines // set default font this.attr('font-family', SVG.defaults.attrs['font-family']); }, // Inherit from inherit: SVG.Shape, // Add class methods extend: { // Move over x-axis x: function x(_x5) { // act as getter if (_x5 == null) { return this.attr('x'); } return this.attr('x', _x5); }, // Set the text content text: function text(_text) { // act as getter if (typeof _text === 'undefined') { var _text = ''; var children = this.node.childNodes; for (var i = 0, len = children.length; i < len; ++i) { // add newline if its not the first child and newLined is set to true if (i != 0 && children[i].nodeType != 3 && SVG.adopt(children[i]).dom.newLined == true) { _text += '\n'; } // add content of this node _text += children[i].textContent; } return _text; } // remove existing content this.clear().build(true); if (typeof _text === 'function') { // call block _text.call(this, this); } else { // store text and make sure text is not blank _text = _text.split('\n'); // build new lines for (var i = 0, il = _text.length; i < il; i++) { this.tspan(_text[i]).newLine(); } } // disable build mode and rebuild lines return this.build(false).rebuild(); }, // Set font size size: function size(_size) { return this.attr('font-size', _size).rebuild(); }, // Set / get leading leading: function leading(value) { // act as getter if (value == null) { return this.dom.leading; } // act as setter this.dom.leading = new SVG.Number(value); return this.rebuild(); }, // Get all the first level lines lines: function lines() { var node = (this.textPath && this.textPath() || this).node; // filter tspans and map them to SVG.js instances var lines = SVG.utils.map(SVG.utils.filterSVGElements(node.childNodes), function (el) { return SVG.adopt(el); }); // return an instance of SVG.set return new SVG.Set(lines); }, // Rebuild appearance type rebuild: function rebuild(_rebuild) { // store new rebuild flag if given if (typeof _rebuild === 'boolean') { this._rebuild = _rebuild; } // define position of all lines if (this._rebuild) { var self = this, blankLineOffset = 0, dy = this.dom.leading * new SVG.Number(this.attr('font-size')); this.lines().each(function () { if (this.dom.newLined) { if (!self.textPath()) { this.attr('x', self.attr('x')); } if (this.text() == '\n') { blankLineOffset += dy; } else { this.attr('dy', dy + blankLineOffset); blankLineOffset = 0; } } }); this.fire('rebuild'); } return this; }, // Enable / disable build mode build: function build(_build) { this._build = !!_build; return this; }, // overwrite method from parent to set data properly setData: function setData(o) { this.dom = o; this.dom.leading = new SVG.Number(o.leading || 1.3); return this; } }, // Add parent method construct: { // Create text element text: function text(_text2) { return this.put(new SVG.Text()).text(_text2); }, // Create plain text element plain: function plain(text) { return this.put(new SVG.Text()).plain(text); } } }); SVG.Tspan = SVG.invent({ // Initialize node create: 'tspan', // Inherit from inherit: SVG.Shape, // Add class methods extend: { // Set text content text: function text(_text3) { if (_text3 == null) return this.node.textContent + (this.dom.newLined ? '\n' : ''); typeof _text3 === 'function' ? _text3.call(this, this) : this.plain(_text3); return this; }, // Shortcut dx dx: function dx(_dx) { return this.attr('dx', _dx); }, // Shortcut dy dy: function dy(_dy) { return this.attr('dy', _dy); }, // Create new line newLine: function newLine() { // fetch text parent var t = this.parent(SVG.Text); // mark new line this.dom.newLined = true; // apply new hy¡n return this.dy(t.dom.leading * t.attr('font-size')).attr('x', t.x()); } } }); SVG.extend(SVG.Text, SVG.Tspan, { // Create plain text node plain: function plain(text) { // clear if build mode is disabled if (this._build === false) { this.clear(); } // create text node this.node.appendChild(document.createTextNode(text)); return this; }, // Create a tspan tspan: function tspan(text) { var node = (this.textPath && this.textPath() || this).node, tspan = new SVG.Tspan(); // clear if build mode is disabled if (this._build === false) { this.clear(); } // add new tspan node.appendChild(tspan.node); return tspan.text(text); }, // Clear all lines clear: function clear() { var node = (this.textPath && this.textPath() || this).node; // remove existing child nodes while (node.hasChildNodes()) { node.removeChild(node.lastChild); } return this; }, // Get length of text element length: function length() { return this.node.getComputedTextLength(); } }); SVG.TextPath = SVG.invent({ // Initialize node create: 'textPath', // Inherit from inherit: SVG.Parent, // Define parent class parent: SVG.Text, // Add parent method construct: { morphArray: SVG.PathArray, // return the array of the path track element array: function array() { var track = this.track(); return track ? track.array() : null; }, // Plot path if any plot: function plot(d) { var track = this.track(), pathArray = null; if (track) { pathArray = track.plot(d); } return d == null ? pathArray : this; }, // Get the path track element track: function track() { var path = this.textPath(); if (path) { return path.reference('href'); } }, // Get the textPath child textPath: function textPath() { if (this.node.firstChild && this.node.firstChild.nodeName == 'textPath') { return SVG.adopt(this.node.firstChild); } } } }); SVG.Nested = SVG.invent({ // Initialize node create: function create() { this.constructor.call(this, SVG.create('svg')); this.style('overflow', 'visible'); }, // Inherit from inherit: SVG.Container, // Add parent method construct: { // Create nested svg document nested: function nested() { return this.put(new SVG.Nested()); } } }); // Define list of available attributes for stroke and fill var sugar = { stroke: ['color', 'width', 'opacity', 'linecap', 'linejoin', 'miterlimit', 'dasharray', 'dashoffset'], fill: ['color', 'opacity', 'rule'], prefix: function prefix(t, a) { return a == 'color' ? t : t + '-' + a; } } // Add sugar for fill and stroke ; ['fill', 'stroke'].forEach(function (m) { var extension = {}; extension[m] = function (o) { if (typeof o === 'undefined') { return this; } if (typeof o === 'string' || SVG.Color.isRgb(o) || o && typeof o.fill === 'function') { this.attr(m, o); } else // set all attributes from sugar.fill and sugar.stroke list { for (var i = sugar[m].length - 1; i >= 0; i--) { if (o[sugar[m][i]] != null) { this.attr(sugar.prefix(m, sugar[m][i]), o[sugar[m][i]]); } } } return this; }; SVG.extend(SVG.Element, SVG.FX, extension); }); SVG.extend(SVG.Element, SVG.FX, { // Map translate to transform translate: function translate(x, y) { return this.transform({ x: x, y: y }); }, // Map matrix to transform matrix: function matrix(m) { return this.attr('transform', new SVG.Matrix(arguments.length == 6 ? [].slice.call(arguments) : m)); }, // Opacity opacity: function opacity(value) { return this.attr('opacity', value); }, // Relative move over x axis dx: function dx(x) { return this.x(new SVG.Number(x).plus(this instanceof SVG.FX ? 0 : this.x()), true); }, // Relative move over y axis dy: function dy(y) { return this.y(new SVG.Number(y).plus(this instanceof SVG.FX ? 0 : this.y()), true); } }); SVG.extend(SVG.Path, { // Get path length length: function length() { return this.node.getTotalLength(); }, // Get point at length pointAt: function pointAt(length) { return this.node.getPointAtLength(length); } }); SVG.Set = SVG.invent({ // Initialize create: function create(members) { // Set initial state Array.isArray(members) ? this.members = members : this.clear(); }, // Add class methods extend: { // Add element to set add: function add() { var il, elements = [].slice.call(arguments); for (var i = 0, il = elements.length; i < il; i++) { this.members.push(elements[i]); } return this; }, // Remove element from set remove: function remove(element) { var i = this.index(element); // remove given child if (i > -1) { this.members.splice(i, 1); } return this; }, // Iterate over all members each: function each(block) { for (var i = 0, il = this.members.length; i < il; i++) { block.apply(this.members[i], [i, this.members]); } return this; }, // Restore to defaults clear: function clear() { // initialize store this.members = []; return this; }, // Get the length of a set length: function length() { return this.members.length; }, // Checks if a given element is present in set has: function has(element) { return this.index(element) >= 0; }, // retuns index of given element in set index: function index(element) { return this.members.indexOf(element); }, // Get member at given index get: function get(i) { return this.members[i]; }, // Get first member first: function first() { return this.get(0); }, // Get last member last: function last() { return this.get(this.members.length - 1); }, // Default value valueOf: function valueOf() { return this.members; } }, // Add parent method construct: { // Create a new set set: function set(members) { return new SVG.Set(members); } } }); SVG.FX.Set = SVG.invent({ // Initialize node create: function create(set) { // store reference to set this.set = set; } }); // Alias methods SVG.Set.inherit = function () { var methods = []; // gather shape methods for (var m in SVG.Shape.prototype) { if (typeof SVG.Shape.prototype[m] === 'function' && typeof SVG.Set.prototype[m] !== 'function') { methods.push(m); } } // apply shape aliasses methods.forEach(function (method) { SVG.Set.prototype[method] = function () { for (var i = 0, il = this.members.length; i < il; i++) { if (this.members[i] && typeof this.members[i][method] === 'function') { this.members[i][method].apply(this.members[i], arguments); } } return method == 'animate' ? this.fx || (this.fx = new SVG.FX.Set(this)) : this; }; }); // clear methods for the next round methods = []; // gather fx methods for (var m in SVG.FX.prototype) { if (typeof SVG.FX.prototype[m] === 'function' && typeof SVG.FX.Set.prototype[m] !== 'function') { methods.push(m); } } // apply fx aliasses methods.forEach(function (method) { SVG.FX.Set.prototype[method] = function () { for (var i = 0, il = this.set.members.length; i < il; i++) { this.set.members[i].fx[method].apply(this.set.members[i].fx, arguments); } return this; }; }); }; SVG.extend(SVG.Element, {}); SVG.extend(SVG.Element, { // Remember arbitrary data remember: function remember(k, v) { // remember every item in an object individually if (_typeof(arguments[0]) === 'object') { for (var v_ in k) { this.remember(v_, k[v_]); } } // retrieve memory else if (arguments.length == 1) { return this.memory()[k]; } // store memory else { this.memory()[k] = v; } return this; }, // Erase a given memory forget: function forget() { if (arguments.length == 0) { this._memory = {}; } else { for (var i = arguments.length - 1; i >= 0; i--) { delete this.memory()[arguments[i]]; } } return this; }, // Initialize or return local memory object memory: function memory() { return this._memory || (this._memory = {}); } }); // Method for getting an element by id SVG.get = function (id) { var node = document.getElementById(idFromReference(id) || id); return SVG.adopt(node); }; // Select elements by query string SVG.select = function (query, parent) { return new SVG.Set(SVG.utils.map((parent || document).querySelectorAll(query), function (node) { return SVG.adopt(node); })); }; SVG.extend(SVG.Parent, { // Scoped select method select: function select(query) { return SVG.select(query, this.node); } }); function pathRegReplace(a, b, c, d) { return c + d.replace(SVG.regex.dots, ' .'); } // creates deep clone of array function _is(el, obj) { return el instanceof obj; } // tests if a given selector matches an element function _matches(el, selector) { return (el.matches || el.matchesSelector || el.msMatchesSelector || el.mozMatchesSelector || el.webkitMatchesSelector || el.oMatchesSelector).call(el, selector); } // Convert dash-separated-string to camelCase function camelCase(s) { return s.toLowerCase().replace(/-(.)/g, function (m, g) { return g.toUpperCase(); }); } // Capitalize first letter of a string function capitalize(s) { return s.charAt(0).toUpperCase() + s.slice(1); } // Ensure to six-based hex function fullHex(hex) { return hex.length == 4 ? ['#', hex.substring(1, 2), hex.substring(1, 2), hex.substring(2, 3), hex.substring(2, 3), hex.substring(3, 4), hex.substring(3, 4)].join('') : hex; } // Component to hex value function compToHex(comp) { var hex = comp.toString(16); return hex.length == 1 ? '0' + hex : hex; } // Calculate proportional width and height values when necessary function proportionalSize(element, width, height) { if (width == null || height == null) { var box = element.bbox(); if (width == null) { width = box.width / box.height * height; } else if (height == null) { height = box.height / box.width * width; } } return { width: width, height: height }; } // Delta transform point function deltaTransformPoint(matrix, x, y) { return { x: x * matrix.a + y * matrix.c + 0, y: x * matrix.b + y * matrix.d + 0 }; } // Map matrix array to object function arrayToMatrix(a) { return { a: a[0], b: a[1], c: a[2], d: a[3], e: a[4], f: a[5] }; } // Parse matrix if required function parseMatrix(matrix) { if (!(matrix instanceof SVG.Matrix)) { matrix = new SVG.Matrix(matrix); } return matrix; } // Add centre point to transform object function arrayToString(a) { for (var i = 0, il = a.length, s = ''; i < il; i++) { s += a[i][0]; if (a[i][1] != null) { s += a[i][1]; if (a[i][2] != null) { s += ' '; s += a[i][2]; if (a[i][3] != null) { s += ' '; s += a[i][3]; s += ' '; s += a[i][4]; if (a[i][5] != null) { s += ' '; s += a[i][5]; s += ' '; s += a[i][6]; if (a[i][7] != null) { s += ' '; s += a[i][7]; } } } } } } return s + ' '; } // Deep new id assignment function assignNewId(node) { // do the same for SVG child nodes as well for (var i = node.childNodes.length - 1; i >= 0; i--) { if (node.childNodes[i] instanceof window.SVGElement) { assignNewId(node.childNodes[i]); } } return SVG.adopt(node).id(SVG.eid(node.nodeName)); } // Add more bounding box properties function fullBox(b) { if (b.x == null) { b.x = 0; b.y = 0; b.width = 0; b.height = 0; } b.w = b.width; b.h = b.height; b.x2 = b.x + b.width; b.y2 = b.y + b.height; b.cx = b.x + b.width / 2; b.cy = b.y + b.height / 2; return b; } // Get id from reference string function idFromReference(url) { var m = (url || '').toString().match(SVG.regex.reference); if (m) return m[1]; } // If values like 1e-88 are passed, this is not a valid 32 bit float, // but in those cases, we are so close to 0 that 0 works well! function float32String(v) { return Math.abs(v) > 1e-37 ? v : 0; } // Create matrix array for looping var abcdef = 'abcdef'.split(''); // Add CustomEvent to IE9 and IE10 if (typeof window.CustomEvent !== 'function') { // Code from: https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent var CustomEventPoly = function CustomEventPoly(event, options) { options = options || { bubbles: false, cancelable: false, detail: undefined }; var e = document.createEvent('CustomEvent'); e.initCustomEvent(event, options.bubbles, options.cancelable, options.detail); return e; }; CustomEventPoly.prototype = window.Event.prototype; SVG.CustomEvent = CustomEventPoly; } else { SVG.CustomEvent = window.CustomEvent; } return SVG; }); /*! svg.filter.js - v2.0.2 - 2016-02-24 * https://github.com/wout/svg.filter.js * Copyright (c) 2016 Wout Fierens; Licensed MIT */ (function() { // Main filter class SVG.Filter = SVG.invent({ create: 'filter', inherit: SVG.Parent, extend: { // Static strings source: 'SourceGraphic', sourceAlpha: 'SourceAlpha', background: 'BackgroundImage', backgroundAlpha: 'BackgroundAlpha', fill: 'FillPaint', stroke: 'StrokePaint', autoSetIn: true, // Custom put method for leaner code put: function(element, i) { this.add(element, i); if(!element.attr('in') && this.autoSetIn){ element.attr('in',this.source); } if(!element.attr('result')){ element.attr('result',element); } return element }, // Blend effect blend: function(in1, in2, mode) { return this.put(new SVG.BlendEffect(in1, in2, mode)) }, // ColorMatrix effect colorMatrix: function(type, values) { return this.put(new SVG.ColorMatrixEffect(type, values)) }, // ConvolveMatrix effect convolveMatrix: function(matrix) { return this.put(new SVG.ConvolveMatrixEffect(matrix)) }, // ComponentTransfer effect componentTransfer: function(components) { return this.put(new SVG.ComponentTransferEffect(components)) }, // Composite effect composite: function(in1, in2, operator) { return this.put(new SVG.CompositeEffect(in1, in2, operator)) }, // Flood effect flood: function(color, opacity) { return this.put(new SVG.FloodEffect(color, opacity)) }, // Offset effect offset: function(x, y) { return this.put(new SVG.OffsetEffect(x,y)) }, // Image effect image: function(src) { return this.put(new SVG.ImageEffect(src)) }, // Merge effect merge: function() { //pass the array of arguments to the constructor because we dont know if the user gave us an array as the first arguemnt or wether they listed the effects in the arguments var args = [undefined]; for(var i in arguments) args.push(arguments[i]); return this.put(new (SVG.MergeEffect.bind.apply(SVG.MergeEffect,args))) }, // Gaussian Blur effect gaussianBlur: function(x,y) { return this.put(new SVG.GaussianBlurEffect(x,y)) }, // Morphology effect morphology: function(operator,radius){ return this.put(new SVG.MorphologyEffect(operator,radius)) }, // DiffuseLighting effect diffuseLighting: function(surfaceScale,diffuseConstant,kernelUnitLength){ return this.put(new SVG.DiffuseLightingEffect(surfaceScale,diffuseConstant,kernelUnitLength)) }, // DisplacementMap effect displacementMap: function(in1,in2,scale,xChannelSelector,yChannelSelector){ return this.put(new SVG.DisplacementMapEffect(in1,in2,scale,xChannelSelector,yChannelSelector)) }, // SpecularLighting effect specularLighting: function(surfaceScale,diffuseConstant,specularExponent,kernelUnitLength){ return this.put(new SVG.SpecularLightingEffect(surfaceScale,diffuseConstant,specularExponent,kernelUnitLength)) }, // Tile effect tile: function(){ return this.put(new SVG.TileEffect()); }, // Turbulence effect turbulence: function(baseFrequency,numOctaves,seed,stitchTiles,type){ return this.put(new SVG.TurbulenceEffect(baseFrequency,numOctaves,seed,stitchTiles,type)) }, // Default string value toString: function() { return 'url(#' + this.attr('id') + ')' } } }); //add .filter function SVG.extend(SVG.Defs, { // Define filter filter: function(block) { var filter = this.put(new SVG.Filter); /* invoke passed block */ if (typeof block === 'function') block.call(filter, filter); return filter } }); SVG.extend(SVG.Container, { // Define filter on defs filter: function(block) { return this.defs().filter(block) } }); SVG.extend(SVG.Element, SVG.G, SVG.Nested, { // Create filter element in defs and store reference filter: function(block) { this.filterer = block instanceof SVG.Element ? block : this.doc().filter(block); if(this.doc() && this.filterer.doc() !== this.doc()){ this.doc().defs().add(this.filterer); } this.attr('filter', this.filterer); return this.filterer }, // Remove filter unfilter: function(remove) { /* also remove the filter node */ if (this.filterer && remove === true) this.filterer.remove(); /* delete reference to filterer */ delete this.filterer; /* remove filter attribute */ return this.attr('filter', null) } }); // Create SVG.Effect class SVG.Effect = SVG.invent({ create: function(){ this.constructor.call(this); }, inherit: SVG.Element, extend: { // Set in attribute in: function(effect) { return effect == null? this.parent() && this.parent().select('[result="'+this.attr('in')+'"]').get(0) || this.attr('in') : this.attr('in', effect) }, // Named result result: function(result) { return result == null? this.attr('result') : this.attr('result',result) }, // Stringification toString: function() { return this.result() } } }); // create class for parent effects like merge // Inherit from SVG.Parent SVG.ParentEffect = SVG.invent({ create: function(){ this.constructor.call(this); }, inherit: SVG.Parent, extend: { // Set in attribute in: function(effect) { return effect == null? this.parent() && this.parent().select('[result="'+this.attr('in')+'"]').get(0) || this.attr('in') : this.attr('in', effect) }, // Named result result: function(result) { return result == null? this.attr('result') : this.attr('result',result) }, // Stringification toString: function() { return this.result() } } }); //chaining var chainingEffects = { // Blend effect blend: function(in2, mode) { return this.parent() && this.parent().blend(this, in2, mode) //pass this as the first input }, // ColorMatrix effect colorMatrix: function(type, values) { return this.parent() && this.parent().colorMatrix(type, values).in(this) }, // ConvolveMatrix effect convolveMatrix: function(matrix) { return this.parent() && this.parent().convolveMatrix(matrix).in(this) }, // ComponentTransfer effect componentTransfer: function(components) { return this.parent() && this.parent().componentTransfer(components).in(this) }, // Composite effect composite: function(in2, operator) { return this.parent() && this.parent().composite(this, in2, operator) //pass this as the first input }, // Flood effect flood: function(color, opacity) { return this.parent() && this.parent().flood(color, opacity) //this effect dont have inputs }, // Offset effect offset: function(x, y) { return this.parent() && this.parent().offset(x,y).in(this) }, // Image effect image: function(src) { return this.parent() && this.parent().image(src) //this effect dont have inputs }, // Merge effect merge: function() { return this.parent() && this.parent().merge.apply(this.parent(),[this].concat(arguments)) //pass this as the first argument }, // Gaussian Blur effect gaussianBlur: function(x,y) { return this.parent() && this.parent().gaussianBlur(x,y).in(this) }, // Morphology effect morphology: function(operator,radius){ return this.parent() && this.parent().morphology(operator,radius).in(this) }, // DiffuseLighting effect diffuseLighting: function(surfaceScale,diffuseConstant,kernelUnitLength){ return this.parent() && this.parent().diffuseLighting(surfaceScale,diffuseConstant,kernelUnitLength).in(this) }, // DisplacementMap effect displacementMap: function(in2,scale,xChannelSelector,yChannelSelector){ return this.parent() && this.parent().displacementMap(this,in2,scale,xChannelSelector,yChannelSelector) //pass this as the first input }, // SpecularLighting effect specularLighting: function(surfaceScale,diffuseConstant,specularExponent,kernelUnitLength){ return this.parent() && this.parent().specularLighting(surfaceScale,diffuseConstant,specularExponent,kernelUnitLength).in(this) }, // Tile effect tile: function(){ return this.parent() && this.parent().tile().in(this) }, // Turbulence effect turbulence: function(baseFrequency,numOctaves,seed,stitchTiles,type){ return this.parent() && this.parent().turbulence(baseFrequency,numOctaves,seed,stitchTiles,type).in(this) } }; SVG.extend(SVG.Effect,chainingEffects); SVG.extend(SVG.ParentEffect,chainingEffects); //crea class for child effects, like MergeNode, FuncR and lights SVG.ChildEffect = SVG.invent({ create: function(){ this.constructor.call(this); }, inherit: SVG.Element, extend: { in: function(effect){ this.attr('in',effect); } //dont include any "result" functions because these types of nodes dont have them } }); // Create all different effects var effects = { blend: function(in1,in2,mode){ this.attr({ in: in1, in2: in2, mode: mode || 'normal' }); }, colorMatrix: function(type,values){ if (type == 'matrix') values = normaliseMatrix(values); this.attr({ type: type , values: typeof values == 'undefined' ? null : values }); }, convolveMatrix: function(matrix){ matrix = normaliseMatrix(matrix); this.attr({ order: Math.sqrt(matrix.split(' ').length) , kernelMatrix: matrix }); }, composite: function(in1, in2, operator){ this.attr({ in: in1, in2: in2, operator: operator }); }, flood: function(color,opacity){ this.attr('flood-color',color); if(opacity != null) this.attr('flood-opacity',opacity); }, offset: function(x,y){ this.attr({ dx: x, dy: y }); }, image: function(src){ this.attr('href', src, SVG.xlink); }, displacementMap: function(in1,in2,scale,xChannelSelector,yChannelSelector){ this.attr({ in: in1, in2: in2, scale: scale, xChannelSelector: xChannelSelector, yChannelSelector: yChannelSelector }); }, gaussianBlur: function(x,y){ if(x != null || y != null) this.attr('stdDeviation', listString(Array.prototype.slice.call(arguments))); else this.attr('stdDeviation', '0 0'); }, morphology: function(operator,radius){ this.attr({ operator: operator, radius: radius }); }, tile: function(){ }, turbulence: function(baseFrequency,numOctaves,seed,stitchTiles,type){ this.attr({ numOctaves: numOctaves, seed: seed, stitchTiles: stitchTiles, baseFrequency: baseFrequency, type: type }); } }; // Create all parent effects var parentEffects = { merge: function(){ var children; //test to see if we have a set if(arguments[0] instanceof SVG.Set){ var that = this; arguments[0].each(function(i){ if(this instanceof SVG.MergeNode) that.put(this); else if(this instanceof SVG.Effect || this instanceof SVG.ParentEffect) that.put(new SVG.MergeNode(this)); }); } else{ //if the first argument is an array use it if(Array.isArray(arguments[0])) children = arguments[0]; else children = arguments; for(var i = 0; i < children.length; i++){ if(children[i] instanceof SVG.MergeNode){ this.put(children[i]); } else this.put(new SVG.MergeNode(children[i])); } } }, componentTransfer: function(compontents){ /* create rgb set */ this.rgb = new SVG.Set /* create components */ ;(['r', 'g', 'b', 'a']).forEach(function(c) { /* create component */ this[c] = new SVG['Func' + c.toUpperCase()]('identity'); /* store component in set */ this.rgb.add(this[c]); /* add component node */ this.node.appendChild(this[c].node); }.bind(this)); //lost context in foreach /* set components */ if (compontents) { if (compontents.rgb) { (['r', 'g', 'b']).forEach(function(c) { this[c].attr(compontents.rgb); }.bind(this)); delete compontents.rgb; } /* set individual components */ for (var c in compontents) this[c].attr(compontents[c]); } }, diffuseLighting: function(surfaceScale,diffuseConstant,kernelUnitLength){ this.attr({ surfaceScale: surfaceScale, diffuseConstant: diffuseConstant, kernelUnitLength: kernelUnitLength }); }, specularLighting: function(surfaceScale,diffuseConstant,specularExponent,kernelUnitLength){ this.attr({ surfaceScale: surfaceScale, diffuseConstant: diffuseConstant, specularExponent: specularExponent, kernelUnitLength: kernelUnitLength }); }, }; // Create child effects like PointLight and MergeNode var childEffects = { distantLight: function(azimuth, elevation){ this.attr({ azimuth: azimuth, elevation: elevation }); }, pointLight: function(x,y,z){ this.attr({ x: x, y: y, z: z }); }, spotLight: function(x,y,z,pointsAtX,pointsAtY,pointsAtZ){ this.attr({ x: x, y: y, z: z, pointsAtX: pointsAtX, pointsAtY: pointsAtY, pointsAtZ: pointsAtZ }); }, mergeNode: function(in1){ this.attr('in',in1); } } // Create compontent functions ;(['r', 'g', 'b', 'a']).forEach(function(c) { /* create class */ childEffects['Func' + c.toUpperCase()] = function(type) { this.attr('type',type); // take diffent arguments based on the type switch(type){ case 'table': this.attr('tableValues',arguments[1]); break case 'linear': this.attr('slope',arguments[1]); this.attr('intercept',arguments[2]); break case 'gamma': this.attr('amplitude',arguments[1]); this.attr('exponent',arguments[2]); this.attr('offset',arguments[2]); break } }; }); //create effects foreach(effects,function(effect,i){ /* capitalize name */ var name = i.charAt(0).toUpperCase() + i.slice(1); var proto = {}; /* create class */ SVG[name + 'Effect'] = SVG.invent({ create: function() { //call super this.constructor.call(this, SVG.create('fe' + name)); //call constructor for this effect effect.apply(this,arguments); //set the result this.result(this.attr('id') + 'Out'); }, inherit: SVG.Effect, extend: proto }); }); //create parent effects foreach(parentEffects,function(effect,i){ /* capitalize name */ var name = i.charAt(0).toUpperCase() + i.slice(1); var proto = {}; /* create class */ SVG[name + 'Effect'] = SVG.invent({ create: function() { //call super this.constructor.call(this, SVG.create('fe' + name)); //call constructor for this effect effect.apply(this,arguments); //set the result this.result(this.attr('id') + 'Out'); }, inherit: SVG.ParentEffect, extend: proto }); }); //create child effects foreach(childEffects,function(effect,i){ /* capitalize name */ var name = i.charAt(0).toUpperCase() + i.slice(1); var proto = {}; /* create class */ SVG[name] = SVG.invent({ create: function() { //call super this.constructor.call(this, SVG.create('fe' + name)); //call constructor for this effect effect.apply(this,arguments); }, inherit: SVG.ChildEffect, extend: proto }); }); // Effect-specific extensions SVG.extend(SVG.MergeEffect,{ in: function(effect){ if(effect instanceof SVG.MergeNode) this.add(effect,0); else this.add(new SVG.MergeNode(effect),0); return this } }); SVG.extend(SVG.CompositeEffect,SVG.BlendEffect,SVG.DisplacementMapEffect,{ in2: function(effect){ return effect == null? this.parent() && this.parent().select('[result="'+this.attr('in2')+'"]').get(0) || this.attr('in2') : this.attr('in2', effect) } }); // Presets SVG.filter = { sepiatone: [ .343, .669, .119, 0, 0 , .249, .626, .130, 0, 0 , .172, .334, .111, 0, 0 , .000, .000, .000, 1, 0 ] }; // Helpers function normaliseMatrix(matrix) { /* convert possible array value to string */ if (Array.isArray(matrix)) matrix = new SVG.Array(matrix); /* ensure there are no leading, tailing or double spaces */ return matrix.toString().replace(/^\s+/, '').replace(/\s+$/, '').replace(/\s+/g, ' ') } function listString(list) { if (!Array.isArray(list)) return list for (var i = 0, l = list.length, s = []; i < l; i++) s.push(list[i]); return s.join(' ') } function foreach(){ //loops through mutiple objects var fn = function(){}; if(typeof arguments[arguments.length-1] == 'function'){ fn = arguments[arguments.length-1]; Array.prototype.splice.call(arguments,arguments.length-1,1); } for(var k in arguments){ for(var i in arguments[k]){ fn(arguments[k][i],i,arguments[k]); } } } }).call(undefined); (function() { SVG.extend(SVG.PathArray, { morph: function(array) { var startArr = this.value , destArr = this.parse(array); var startOffsetM = 0 , destOffsetM = 0; var startOffsetNextM = false , destOffsetNextM = false; while(true){ // stop if there is no M anymore if(startOffsetM === false && destOffsetM === false) break // find the next M in path array startOffsetNextM = findNextM(startArr, startOffsetM === false ? false : startOffsetM+1); destOffsetNextM = findNextM( destArr, destOffsetM === false ? false : destOffsetM+1); // We have to add one M to the startArray if(startOffsetM === false){ var bbox = new SVG.PathArray(result.start).bbox(); // when the last block had no bounding box we simply take the first M we got if(bbox.height == 0 || bbox.width == 0){ startOffsetM = startArr.push(startArr[0]) - 1; }else{ // we take the middle of the bbox instead when we got one startOffsetM = startArr.push( ['M', bbox.x + bbox.width/2, bbox.y + bbox.height/2 ] ) - 1; } } // We have to add one M to the destArray if( destOffsetM === false){ var bbox = new SVG.PathArray(result.dest).bbox(); if(bbox.height == 0 || bbox.width == 0){ destOffsetM = destArr.push(destArr[0]) - 1; }else{ destOffsetM = destArr.push( ['M', bbox.x + bbox.width/2, bbox.y + bbox.height/2 ] ) - 1; } } // handle block from M to next M var result = handleBlock(startArr, startOffsetM, startOffsetNextM, destArr, destOffsetM, destOffsetNextM); // update the arrays to their new values startArr = startArr.slice(0, startOffsetM).concat(result.start, startOffsetNextM === false ? [] : startArr.slice(startOffsetNextM)); destArr = destArr.slice(0, destOffsetM).concat(result.dest , destOffsetNextM === false ? [] : destArr.slice( destOffsetNextM)); // update offsets startOffsetM = startOffsetNextM === false ? false : startOffsetM + result.start.length; destOffsetM = destOffsetNextM === false ? false : destOffsetM + result.dest.length; } // copy back arrays this.value = startArr; this.destination = new SVG.PathArray(); this.destination.value = destArr; return this } }); // sorry for the long declaration // slices out one block (from M to M) and syncronize it so the types and length match function handleBlock(startArr, startOffsetM, startOffsetNextM, destArr, destOffsetM, destOffsetNextM, undefined$1){ // slice out the block we need var startArrTemp = startArr.slice(startOffsetM, startOffsetNextM || undefined$1) , destArrTemp = destArr.slice( destOffsetM, destOffsetNextM || undefined$1); var i = 0 , posStart = {pos:[0,0], start:[0,0]} , posDest = {pos:[0,0], start:[0,0]}; do{ // convert shorthand types to long form startArrTemp[i] = simplyfy.call(posStart, startArrTemp[i]); destArrTemp[i] = simplyfy.call(posDest , destArrTemp[i]); // check if both shape types match // 2 elliptical arc curve commands ('A'), are considered different if the // flags (large-arc-flag, sweep-flag) don't match if(startArrTemp[i][0] != destArrTemp[i][0] || startArrTemp[i][0] == 'M' || (startArrTemp[i][0] == 'A' && (startArrTemp[i][4] != destArrTemp[i][4] || startArrTemp[i][5] != destArrTemp[i][5]) ) ) { // if not, convert shapes to beziere Array.prototype.splice.apply(startArrTemp, [i, 1].concat(toBeziere.call(posStart, startArrTemp[i]))); Array.prototype.splice.apply(destArrTemp, [i, 1].concat(toBeziere.call(posDest, destArrTemp[i]))); } else { // only update positions otherwise startArrTemp[i] = setPosAndReflection.call(posStart, startArrTemp[i]); destArrTemp[i] = setPosAndReflection.call(posDest , destArrTemp[i]); } // we are at the end at both arrays. stop here if(++i == startArrTemp.length && i == destArrTemp.length) break // destArray is longer. Add one element if(i == startArrTemp.length){ startArrTemp.push([ 'C', posStart.pos[0], posStart.pos[1], posStart.pos[0], posStart.pos[1], posStart.pos[0], posStart.pos[1], ]); } // startArr is longer. Add one element if(i == destArrTemp.length){ destArrTemp.push([ 'C', posDest.pos[0], posDest.pos[1], posDest.pos[0], posDest.pos[1], posDest.pos[0], posDest.pos[1] ]); } }while(true) // return the updated block return {start:startArrTemp, dest:destArrTemp} } // converts shorthand types to long form function simplyfy(val){ switch(val[0]){ case 'z': // shorthand line to start case 'Z': val[0] = 'L'; val[1] = this.start[0]; val[2] = this.start[1]; break case 'H': // shorthand horizontal line val[0] = 'L'; val[2] = this.pos[1]; break case 'V': // shorthand vertical line val[0] = 'L'; val[2] = val[1]; val[1] = this.pos[0]; break case 'T': // shorthand quadratic beziere val[0] = 'Q'; val[3] = val[1]; val[4] = val[2]; val[1] = this.reflection[1]; val[2] = this.reflection[0]; break case 'S': // shorthand cubic beziere val[0] = 'C'; val[6] = val[4]; val[5] = val[3]; val[4] = val[2]; val[3] = val[1]; val[2] = this.reflection[1]; val[1] = this.reflection[0]; break } return val } // updates reflection point and current position function setPosAndReflection(val){ var len = val.length; this.pos = [ val[len-2], val[len-1] ]; if('SCQT'.indexOf(val[0]) != -1) this.reflection = [ 2 * this.pos[0] - val[len-4], 2 * this.pos[1] - val[len-3] ]; return val } // converts all types to cubic beziere function toBeziere(val){ var retVal = [val]; switch(val[0]){ case 'M': // special handling for M this.pos = this.start = [val[1], val[2]]; return retVal case 'L': val[5] = val[3] = val[1]; val[6] = val[4] = val[2]; val[1] = this.pos[0]; val[2] = this.pos[1]; break case 'Q': val[6] = val[4]; val[5] = val[3]; val[4] = val[4] * 1/3 + val[2] * 2/3; val[3] = val[3] * 1/3 + val[1] * 2/3; val[2] = this.pos[1] * 1/3 + val[2] * 2/3; val[1] = this.pos[0] * 1/3 + val[1] * 2/3; break case 'A': retVal = arcToBeziere(this.pos, val); val = retVal[0]; break } val[0] = 'C'; this.pos = [val[5], val[6]]; this.reflection = [2 * val[5] - val[3], 2 * val[6] - val[4]]; return retVal } // finds the next position of type M function findNextM(arr, offset){ if(offset === false) return false for(var i = offset, len = arr.length;i < len;++i){ if(arr[i][0] == 'M') return i } return false } // Convert an arc segment into equivalent cubic Bezier curves // Depending on the arc, up to 4 curves might be used to represent it since a // curve gives a good approximation for only a quarter of an ellipse // The curves are returned as an array of SVG curve commands: // [ ['C', x1, y1, x2, y2, x, y] ... ] function arcToBeziere(pos, val) { // Parameters extraction, handle out-of-range parameters as specified in the SVG spec // See: https://www.w3.org/TR/SVG11/implnote.html#ArcOutOfRangeParameters var rx = Math.abs(val[1]), ry = Math.abs(val[2]), xAxisRotation = val[3] % 360 , largeArcFlag = val[4], sweepFlag = val[5], x = val[6], y = val[7] , A = new SVG.Point(pos), B = new SVG.Point(x, y) , primedCoord, lambda, mat, k, c, cSquare, t, O, OA, OB, tetaStart, tetaEnd , deltaTeta, nbSectors, f, arcSegPoints, angle, sinAngle, cosAngle, pt, i, il , retVal = [], x1, y1, x2, y2; // Ensure radii are non-zero if(rx === 0 || ry === 0 || (A.x === B.x && A.y === B.y)) { // treat this arc as a straight line segment return [['C', A.x, A.y, B.x, B.y, B.x, B.y]] } // Ensure radii are large enough using the algorithm provided in the SVG spec // See: https://www.w3.org/TR/SVG11/implnote.html#ArcCorrectionOutOfRangeRadii primedCoord = new SVG.Point((A.x-B.x)/2, (A.y-B.y)/2).transform(new SVG.Matrix().rotate(xAxisRotation)); lambda = (primedCoord.x * primedCoord.x) / (rx * rx) + (primedCoord.y * primedCoord.y) / (ry * ry); if(lambda > 1) { lambda = Math.sqrt(lambda); rx = lambda*rx; ry = lambda*ry; } // To simplify calculations, we make the arc part of a unit circle (rayon is 1) instead of an ellipse mat = new SVG.Matrix().rotate(xAxisRotation).scale(1/rx, 1/ry).rotate(-xAxisRotation); A = A.transform(mat); B = B.transform(mat); // Calculate the horizontal and vertical distance between the initial and final point of the arc k = [B.x-A.x, B.y-A.y]; // Find the length of the chord formed by A and B cSquare = k[0]*k[0] + k[1]*k[1]; c = Math.sqrt(cSquare); // Calculate the ratios of the horizontal and vertical distance on the length of the chord k[0] /= c; k[1] /= c; // Calculate the distance between the circle center and the chord midpoint // using this formula: t = sqrt(r^2 - c^2 / 4) // where t is the distance between the cirle center and the chord midpoint, // r is the rayon of the circle and c is the chord length // From: http://www.ajdesigner.com/phpcircle/circle_segment_chord_t.php // Because of the imprecision of floating point numbers, cSquare might end // up being slightly above 4 which would result in a negative radicand // To prevent that, a test is made before computing the square root t = (cSquare < 4) ? Math.sqrt(1 - cSquare/4) : 0; // For most situations, there are actually two different ellipses that // satisfy the constraints imposed by the points A and B, the radii rx and ry, // and the xAxisRotation // When the flags largeArcFlag and sweepFlag are equal, it means that the // second ellipse is used as a solution // See: https://www.w3.org/TR/SVG/paths.html#PathDataEllipticalArcCommands if(largeArcFlag === sweepFlag) { t *= -1; } // Calculate the coordinates of the center of the circle from the midpoint of the chord // This is done by multiplying the ratios calculated previously by the distance between // the circle center and the chord midpoint and using these values to go from the midpoint // to the center of the circle // The negative of the vertical distance ratio is used to modify the x coordinate while // the horizontal distance ratio is used to modify the y coordinate // That is because the center of the circle is perpendicular to the chord and perpendicular // lines are negative reciprocals O = new SVG.Point((B.x+A.x)/2 + t*-k[1], (B.y+A.y)/2 + t*k[0]); // Move the center of the circle at the origin OA = new SVG.Point(A.x-O.x, A.y-O.y); OB = new SVG.Point(B.x-O.x, B.y-O.y); // Calculate the start and end angle tetaStart = Math.acos(OA.x/Math.sqrt(OA.x*OA.x + OA.y*OA.y)); if (OA.y < 0) { tetaStart *= -1; } tetaEnd = Math.acos(OB.x/Math.sqrt(OB.x*OB.x + OB.y*OB.y)); if (OB.y < 0) { tetaEnd *= -1; } // If sweep-flag is '1', then the arc will be drawn in a "positive-angle" direction, // make sure that the end angle is above the start angle if (sweepFlag && tetaStart > tetaEnd) { tetaEnd += 2*Math.PI; } // If sweep-flag is '0', then the arc will be drawn in a "negative-angle" direction, // make sure that the end angle is below the start angle if (!sweepFlag && tetaStart < tetaEnd) { tetaEnd -= 2*Math.PI; } // Find the number of Bezier curves that are required to represent the arc // A cubic Bezier curve gives a good enough approximation when representing at most a quarter of a circle nbSectors = Math.ceil(Math.abs(tetaStart-tetaEnd) * 2/Math.PI); // Calculate the coordinates of the points of all the Bezier curves required to represent the arc // For an in-depth explanation of this part see: http://pomax.github.io/bezierinfo/#circles_cubic arcSegPoints = []; angle = tetaStart; deltaTeta = (tetaEnd-tetaStart)/nbSectors; f = 4*Math.tan(deltaTeta/4)/3; for (i = 0; i <= nbSectors; i++) { // The <= is because a Bezier curve have a start and a endpoint cosAngle = Math.cos(angle); sinAngle = Math.sin(angle); pt = new SVG.Point(O.x+cosAngle, O.y+sinAngle); arcSegPoints[i] = [new SVG.Point(pt.x+f*sinAngle, pt.y-f*cosAngle), pt, new SVG.Point(pt.x-f*sinAngle, pt.y+f*cosAngle)]; angle += deltaTeta; } // Remove the first control point of the first segment point and remove the second control point of the last segment point // These two control points are not used in the approximation of the arc, that is why they are removed arcSegPoints[0][0] = arcSegPoints[0][1].clone(); arcSegPoints[arcSegPoints.length-1][2] = arcSegPoints[arcSegPoints.length-1][1].clone(); // Revert the transformation that was applied to make the arc part of a unit circle instead of an ellipse mat = new SVG.Matrix().rotate(xAxisRotation).scale(rx, ry).rotate(-xAxisRotation); for (i = 0, il = arcSegPoints.length; i < il; i++) { arcSegPoints[i][0] = arcSegPoints[i][0].transform(mat); arcSegPoints[i][1] = arcSegPoints[i][1].transform(mat); arcSegPoints[i][2] = arcSegPoints[i][2].transform(mat); } // Convert the segments points to SVG curve commands for (i = 1, il = arcSegPoints.length; i < il; i++) { pt = arcSegPoints[i-1][2]; x1 = pt.x; y1 = pt.y; pt = arcSegPoints[i][0]; x2 = pt.x; y2 = pt.y; pt = arcSegPoints[i][1]; x = pt.x; y = pt.y; retVal.push(['C', x1, y1, x2, y2, x, y]); } return retVal } }()); /*! svg.draggable.js - v2.2.2 - 2019-01-08 * https://github.com/svgdotjs/svg.draggable.js * Copyright (c) 2019 Wout Fierens; Licensed MIT */ (function() { // creates handler, saves it function DragHandler(el){ el.remember('_draggable', this); this.el = el; } // Sets new parameter, starts dragging DragHandler.prototype.init = function(constraint, val){ var _this = this; this.constraint = constraint; this.value = val; this.el.on('mousedown.drag', function(e){ _this.start(e); }); this.el.on('touchstart.drag', function(e){ _this.start(e); }); }; // transforms one point from screen to user coords DragHandler.prototype.transformPoint = function(event, offset){ event = event || window.event; var touches = event.changedTouches && event.changedTouches[0] || event; this.p.x = touches.clientX - (offset || 0); this.p.y = touches.clientY; return this.p.matrixTransform(this.m) }; // gets elements bounding box with special handling of groups, nested and use DragHandler.prototype.getBBox = function(){ var box = this.el.bbox(); if(this.el instanceof SVG.Nested) box = this.el.rbox(); if (this.el instanceof SVG.G || this.el instanceof SVG.Use || this.el instanceof SVG.Nested) { box.x = this.el.x(); box.y = this.el.y(); } return box }; // start dragging DragHandler.prototype.start = function(e){ // check for left button if(e.type == 'click'|| e.type == 'mousedown' || e.type == 'mousemove'){ if((e.which || e.buttons) != 1){ return } } var _this = this; // fire beforedrag event this.el.fire('beforedrag', { event: e, handler: this }); if(this.el.event().defaultPrevented) return; // prevent browser drag behavior as soon as possible e.preventDefault(); // prevent propagation to a parent that might also have dragging enabled e.stopPropagation(); // search for parent on the fly to make sure we can call // draggable() even when element is not in the dom currently this.parent = this.parent || this.el.parent(SVG.Nested) || this.el.parent(SVG.Doc); this.p = this.parent.node.createSVGPoint(); // save current transformation matrix this.m = this.el.node.getScreenCTM().inverse(); var box = this.getBBox(); var anchorOffset; // fix text-anchor in text-element (#37) if(this.el instanceof SVG.Text){ anchorOffset = this.el.node.getComputedTextLength(); switch(this.el.attr('text-anchor')){ case 'middle': anchorOffset /= 2; break case 'start': anchorOffset = 0; break; } } this.startPoints = { // We take absolute coordinates since we are just using a delta here point: this.transformPoint(e, anchorOffset), box: box, transform: this.el.transform() }; // add drag and end events to window SVG.on(window, 'mousemove.drag', function(e){ _this.drag(e); }); SVG.on(window, 'touchmove.drag', function(e){ _this.drag(e); }); SVG.on(window, 'mouseup.drag', function(e){ _this.end(e); }); SVG.on(window, 'touchend.drag', function(e){ _this.end(e); }); // fire dragstart event this.el.fire('dragstart', {event: e, p: this.startPoints.point, m: this.m, handler: this}); }; // while dragging DragHandler.prototype.drag = function(e){ var box = this.getBBox() , p = this.transformPoint(e) , x = this.startPoints.box.x + p.x - this.startPoints.point.x , y = this.startPoints.box.y + p.y - this.startPoints.point.y , c = this.constraint , gx = p.x - this.startPoints.point.x , gy = p.y - this.startPoints.point.y; this.el.fire('dragmove', { event: e , p: p , m: this.m , handler: this }); if(this.el.event().defaultPrevented) return p // move the element to its new position, if possible by constraint if (typeof c == 'function') { var coord = c.call(this.el, x, y, this.m); // bool, just show us if movement is allowed or not if (typeof coord == 'boolean') { coord = { x: coord, y: coord }; } // if true, we just move. If !false its a number and we move it there if (coord.x === true) { this.el.x(x); } else if (coord.x !== false) { this.el.x(coord.x); } if (coord.y === true) { this.el.y(y); } else if (coord.y !== false) { this.el.y(coord.y); } } else if (typeof c == 'object') { // keep element within constrained box if (c.minX != null && x < c.minX) { x = c.minX; gx = x - this.startPoints.box.x; } else if (c.maxX != null && x > c.maxX - box.width) { x = c.maxX - box.width; gx = x - this.startPoints.box.x; } if (c.minY != null && y < c.minY) { y = c.minY; gy = y - this.startPoints.box.y; } else if (c.maxY != null && y > c.maxY - box.height) { y = c.maxY - box.height; gy = y - this.startPoints.box.y; } if (c.snapToGrid != null) { x = x - (x % c.snapToGrid); y = y - (y % c.snapToGrid); gx = gx - (gx % c.snapToGrid); gy = gy - (gy % c.snapToGrid); } if(this.el instanceof SVG.G) this.el.matrix(this.startPoints.transform).transform({x:gx, y: gy}, true); else this.el.move(x, y); } // so we can use it in the end-method, too return p }; DragHandler.prototype.end = function(e){ // final drag var p = this.drag(e); // fire dragend event this.el.fire('dragend', { event: e, p: p, m: this.m, handler: this }); // unbind events SVG.off(window, 'mousemove.drag'); SVG.off(window, 'touchmove.drag'); SVG.off(window, 'mouseup.drag'); SVG.off(window, 'touchend.drag'); }; SVG.extend(SVG.Element, { // Make element draggable // Constraint might be an object (as described in readme.md) or a function in the form "function (x, y)" that gets called before every move. // The function can return a boolean or an object of the form {x, y}, to which the element will be moved. "False" skips moving, true moves to raw x, y. draggable: function(value, constraint) { // Check the parameters and reassign if needed if (typeof value == 'function' || typeof value == 'object') { constraint = value; value = true; } var dragHandler = this.remember('_draggable') || new DragHandler(this); // When no parameter is given, value is true value = typeof value === 'undefined' ? true : value; if(value) dragHandler.init(constraint || {}, value); else { this.off('mousedown.drag'); this.off('touchstart.drag'); } return this } }); }).call(undefined); (function() { function SelectHandler(el) { this.el = el; el.remember('_selectHandler', this); this.pointSelection = {isSelected: false}; this.rectSelection = {isSelected: false}; // helper list with position settings of each type of point this.pointsList = { lt: [ 0, 0 ], rt: [ 'width', 0 ], rb: [ 'width', 'height' ], lb: [ 0, 'height' ], t: [ 'width', 0 ], r: [ 'width', 'height' ], b: [ 'width', 'height' ], l: [ 0, 'height' ] }; // helper function to get point coordinates based on settings above and an object (bbox in our case) this.pointCoord = function (setting, object, isPointCentered) { var coord = typeof setting !== 'string' ? setting : object[setting]; // Top, bottom, right and left points are placed in the center of element width/height return isPointCentered ? coord / 2 : coord }; this.pointCoords = function (point, object) { var settings = this.pointsList[point]; return { x: this.pointCoord(settings[0], object, (point === 't' || point === 'b')), y: this.pointCoord(settings[1], object, (point === 'r' || point === 'l')) } }; } SelectHandler.prototype.init = function (value, options) { var bbox = this.el.bbox(); this.options = {}; // store defaults list of points in order to verify users config var points = this.el.selectize.defaults.points; // Merging the defaults and the options-object together for (var i in this.el.selectize.defaults) { this.options[i] = this.el.selectize.defaults[i]; if (options[i] !== undefined) { this.options[i] = options[i]; } } // prepare & validate list of points to be added (or excluded) var pointsLists = ['points', 'pointsExclude']; for (var i in pointsLists) { var option = this.options[pointsLists[i]]; if (typeof option === 'string') { if (option.length > 0) { // if set as comma separated string list => convert it into an array option = option.split(/\s*,\s*/i); } else { option = []; } } else if (typeof option === 'boolean' && pointsLists[i] === 'points') { // this is not needed, but let's have it for legacy support option = option ? points : []; } this.options[pointsLists[i]] = option; } // intersect correct all points options with users config (exclude unwanted points) // ES5 -> NO arrow functions nor Array.includes() this.options.points = [ points, this.options.points ].reduce( function (a, b) { return a.filter( function (c) { return b.indexOf(c) > -1; } ) } ); // exclude pointsExclude, if wanted this.options.points = [ this.options.points, this.options.pointsExclude ].reduce( function (a, b) { return a.filter( function (c) { return b.indexOf(c) < 0; } ) } ); this.parent = this.el.parent(); this.nested = (this.nested || this.parent.group()); this.nested.matrix(new SVG.Matrix(this.el).translate(bbox.x, bbox.y)); // When deepSelect is enabled and the element is a line/polyline/polygon, draw only points for moving if (this.options.deepSelect && ['line', 'polyline', 'polygon'].indexOf(this.el.type) !== -1) { this.selectPoints(value); } else { this.selectRect(value); } this.observe(); this.cleanup(); }; SelectHandler.prototype.selectPoints = function (value) { this.pointSelection.isSelected = value; // When set is already there we dont have to create one if (this.pointSelection.set) { return this; } // Create our set of elements this.pointSelection.set = this.parent.set(); // draw the points and mark the element as selected this.drawPoints(); return this; }; // create the point-array which contains the 2 points of a line or simply the points-array of polyline/polygon SelectHandler.prototype.getPointArray = function () { var bbox = this.el.bbox(); return this.el.array().valueOf().map(function (el) { return [el[0] - bbox.x, el[1] - bbox.y]; }); }; // Draws a points SelectHandler.prototype.drawPoints = function () { var _this = this, array = this.getPointArray(); // go through the array of points for (var i = 0, len = array.length; i < len; ++i) { var curriedEvent = (function (k) { return function (ev) { ev = ev || window.event; ev.preventDefault ? ev.preventDefault() : ev.returnValue = false; ev.stopPropagation(); var x = ev.pageX || ev.touches[0].pageX; var y = ev.pageY || ev.touches[0].pageY; _this.el.fire('point', {x: x, y: y, i: k, event: ev}); }; })(i); // add every point to the set // add css-classes and a touchstart-event which fires our event for moving points var point = this.drawPoint(array[i][0], array[i][1]) .addClass(this.options.classPoints) .addClass(this.options.classPoints + '_point') .on('touchstart', curriedEvent) .on('mousedown', curriedEvent); this.pointSelection.set.add(point); } }; // The function to draw single point SelectHandler.prototype.drawPoint = function (cx, cy) { var pointType = this.options.pointType; switch (pointType) { case 'circle': return this.drawCircle(cx, cy); case 'rect': return this.drawRect(cx, cy); default: if (typeof pointType === 'function') { return pointType.call(this, cx, cy); } throw new Error('Unknown ' + pointType + ' point type!'); } }; // The function to draw the circle point SelectHandler.prototype.drawCircle = function (cx, cy) { return this.nested.circle(this.options.pointSize) .center(cx, cy); }; // The function to draw the rect point SelectHandler.prototype.drawRect = function (cx, cy) { return this.nested.rect(this.options.pointSize, this.options.pointSize) .center(cx, cy); }; // every time a point is moved, we have to update the positions of our point SelectHandler.prototype.updatePointSelection = function () { var array = this.getPointArray(); this.pointSelection.set.each(function (i) { if (this.cx() === array[i][0] && this.cy() === array[i][1]) { return; } this.center(array[i][0], array[i][1]); }); }; SelectHandler.prototype.updateRectSelection = function () { var _this = this, bbox = this.el.bbox(); this.rectSelection.set.get(0).attr({ width: bbox.width, height: bbox.height }); // set.get(1) is always in the upper left corner. no need to move it if (this.options.points.length) { this.options.points.map(function (point, index) { var coords = _this.pointCoords(point, bbox); _this.rectSelection.set.get(index + 1).center(coords.x, coords.y); }); } if (this.options.rotationPoint) { var length = this.rectSelection.set.length(); this.rectSelection.set.get(length - 1).center(bbox.width / 2, 20); } }; SelectHandler.prototype.selectRect = function (value) { var _this = this, bbox = this.el.bbox(); this.rectSelection.isSelected = value; // when set is already p this.rectSelection.set = this.rectSelection.set || this.parent.set(); // helperFunction to create a mouse-down function which triggers the event specified in `eventName` function getMoseDownFunc(eventName) { return function (ev) { ev = ev || window.event; ev.preventDefault ? ev.preventDefault() : ev.returnValue = false; ev.stopPropagation(); var x = ev.pageX || ev.touches[0].pageX; var y = ev.pageY || ev.touches[0].pageY; _this.el.fire(eventName, {x: x, y: y, event: ev}); }; } // create the selection-rectangle and add the css-class if (!this.rectSelection.set.get(0)) { this.rectSelection.set.add(this.nested.rect(bbox.width, bbox.height).addClass(this.options.classRect)); } // Draw Points at the edges, if enabled if (this.options.points.length && this.rectSelection.set.length() < 2) { var ename ="touchstart", mname = "mousedown"; this.options.points.map(function (point, index) { var coords = _this.pointCoords(point, bbox); var pointElement = _this.drawPoint(coords.x, coords.y) .attr('class', _this.options.classPoints + '_' + point) .on(mname, getMoseDownFunc(point)) .on(ename, getMoseDownFunc(point)); _this.rectSelection.set.add(pointElement); }); this.rectSelection.set.each(function () { this.addClass(_this.options.classPoints); }); } // draw rotationPint, if enabled if (this.options.rotationPoint && ((this.options.points && !this.rectSelection.set.get(9)) || (!this.options.points && !this.rectSelection.set.get(1)))) { var curriedEvent = function (ev) { ev = ev || window.event; ev.preventDefault ? ev.preventDefault() : ev.returnValue = false; ev.stopPropagation(); var x = ev.pageX || ev.touches[0].pageX; var y = ev.pageY || ev.touches[0].pageY; _this.el.fire('rot', {x: x, y: y, event: ev}); }; var pointElement = this.drawPoint(bbox.width / 2, 20) .attr('class', this.options.classPoints + '_rot') .on("touchstart", curriedEvent) .on("mousedown", curriedEvent); this.rectSelection.set.add(pointElement); } }; SelectHandler.prototype.handler = function () { var bbox = this.el.bbox(); this.nested.matrix(new SVG.Matrix(this.el).translate(bbox.x, bbox.y)); if (this.rectSelection.isSelected) { this.updateRectSelection(); } if (this.pointSelection.isSelected) { this.updatePointSelection(); } }; SelectHandler.prototype.observe = function () { var _this = this; if (MutationObserver) { if (this.rectSelection.isSelected || this.pointSelection.isSelected) { this.observerInst = this.observerInst || new MutationObserver(function () { _this.handler(); }); this.observerInst.observe(this.el.node, {attributes: true}); } else { try { this.observerInst.disconnect(); delete this.observerInst; } catch (e) { } } } else { this.el.off('DOMAttrModified.select'); if (this.rectSelection.isSelected || this.pointSelection.isSelected) { this.el.on('DOMAttrModified.select', function () { _this.handler(); }); } } }; SelectHandler.prototype.cleanup = function () { //var _this = this; if (!this.rectSelection.isSelected && this.rectSelection.set) { // stop watching the element, remove the selection this.rectSelection.set.each(function () { this.remove(); }); this.rectSelection.set.clear(); delete this.rectSelection.set; } if (!this.pointSelection.isSelected && this.pointSelection.set) { // Remove all points, clear the set, stop watching the element this.pointSelection.set.each(function () { this.remove(); }); this.pointSelection.set.clear(); delete this.pointSelection.set; } if (!this.pointSelection.isSelected && !this.rectSelection.isSelected) { this.nested.remove(); delete this.nested; } }; SVG.extend(SVG.Element, { // Select element with mouse selectize: function (value, options) { // Check the parameters and reassign if needed if (typeof value === 'object') { options = value; value = true; } var selectHandler = this.remember('_selectHandler') || new SelectHandler(this); selectHandler.init(value === undefined ? true : value, options || {}); return this; } }); SVG.Element.prototype.selectize.defaults = { points: ['lt', 'rt', 'rb', 'lb', 't', 'r', 'b', 'l'], // which points to draw, default all pointsExclude: [], // easier option if to exclude few than rewrite all classRect: 'svg_select_boundingRect', // Css-class added to the rect classPoints: 'svg_select_points', // Css-class added to the points pointSize: 7, // size of point rotationPoint: true, // If true, rotation point is drawn. Needed for rotation! deepSelect: false, // If true, moving of single points is possible (only line, polyline, polyon) pointType: 'circle' // Point type: circle or rect, default circle }; }()); (function() { (function () { function ResizeHandler(el) { el.remember('_resizeHandler', this); this.el = el; this.parameters = {}; this.lastUpdateCall = null; this.p = el.doc().node.createSVGPoint(); } ResizeHandler.prototype.transformPoint = function(x, y, m){ this.p.x = x - (this.offset.x - window.pageXOffset); this.p.y = y - (this.offset.y - window.pageYOffset); return this.p.matrixTransform(m || this.m); }; ResizeHandler.prototype._extractPosition = function(event) { // Extract a position from a mouse/touch event. // Returns { x: .., y: .. } return { x: event.clientX != null ? event.clientX : event.touches[0].clientX, y: event.clientY != null ? event.clientY : event.touches[0].clientY } }; ResizeHandler.prototype.init = function (options) { var _this = this; this.stop(); if (options === 'stop') { return; } this.options = {}; // Merge options and defaults for (var i in this.el.resize.defaults) { this.options[i] = this.el.resize.defaults[i]; if (typeof options[i] !== 'undefined') { this.options[i] = options[i]; } } // We listen to all these events which are specifying different edges this.el.on('lt.resize', function(e){ _this.resize(e || window.event); }); // Left-Top this.el.on('rt.resize', function(e){ _this.resize(e || window.event); }); // Right-Top this.el.on('rb.resize', function(e){ _this.resize(e || window.event); }); // Right-Bottom this.el.on('lb.resize', function(e){ _this.resize(e || window.event); }); // Left-Bottom this.el.on('t.resize', function(e){ _this.resize(e || window.event); }); // Top this.el.on('r.resize', function(e){ _this.resize(e || window.event); }); // Right this.el.on('b.resize', function(e){ _this.resize(e || window.event); }); // Bottom this.el.on('l.resize', function(e){ _this.resize(e || window.event); }); // Left this.el.on('rot.resize', function(e){ _this.resize(e || window.event); }); // Rotation this.el.on('point.resize', function(e){ _this.resize(e || window.event); }); // Point-Moving // This call ensures, that the plugin reacts to a change of snapToGrid immediately this.update(); }; ResizeHandler.prototype.stop = function(){ this.el.off('lt.resize'); this.el.off('rt.resize'); this.el.off('rb.resize'); this.el.off('lb.resize'); this.el.off('t.resize'); this.el.off('r.resize'); this.el.off('b.resize'); this.el.off('l.resize'); this.el.off('rot.resize'); this.el.off('point.resize'); return this; }; ResizeHandler.prototype.resize = function (event) { var _this = this; this.m = this.el.node.getScreenCTM().inverse(); this.offset = { x: window.pageXOffset, y: window.pageYOffset }; var txPt = this._extractPosition(event.detail.event); this.parameters = { type: this.el.type, // the type of element p: this.transformPoint(txPt.x, txPt.y), x: event.detail.x, // x-position of the mouse when resizing started y: event.detail.y, // y-position of the mouse when resizing started box: this.el.bbox(), // The bounding-box of the element rotation: this.el.transform().rotation // The current rotation of the element }; // Add font-size parameter if the element type is text if (this.el.type === "text") { this.parameters.fontSize = this.el.attr()["font-size"]; } // the i-param in the event holds the index of the point which is moved, when using `deepSelect` if (event.detail.i !== undefined) { // get the point array var array = this.el.array().valueOf(); // Save the index and the point which is moved this.parameters.i = event.detail.i; this.parameters.pointCoords = [array[event.detail.i][0], array[event.detail.i][1]]; } // Lets check which edge of the bounding-box was clicked and resize the this.el according to this switch (event.type) { // Left-Top-Edge case 'lt': // We build a calculating function for every case which gives us the new position of the this.el this.calc = function (diffX, diffY) { // The procedure is always the same // First we snap the edge to the given grid (snapping to 1px grid is normal resizing) var snap = this.snapToGrid(diffX, diffY); // Now we check if the new height and width still valid (> 0) if (this.parameters.box.width - snap[0] > 0 && this.parameters.box.height - snap[1] > 0) { // ...if valid, we resize the this.el (which can include moving because the coord-system starts at the left-top and this edge is moving sometimes when resized) /* * but first check if the element is text box, so we can change the font size instead of * the width and height */ if (this.parameters.type === "text") { this.el.move(this.parameters.box.x + snap[0], this.parameters.box.y); this.el.attr("font-size", this.parameters.fontSize - snap[0]); return; } snap = this.checkAspectRatio(snap); this.el.move(this.parameters.box.x + snap[0], this.parameters.box.y + snap[1]).size(this.parameters.box.width - snap[0], this.parameters.box.height - snap[1]); } }; break; // Right-Top case 'rt': // s.a. this.calc = function (diffX, diffY) { var snap = this.snapToGrid(diffX, diffY, 1 << 1); if (this.parameters.box.width + snap[0] > 0 && this.parameters.box.height - snap[1] > 0) { if (this.parameters.type === "text") { this.el.move(this.parameters.box.x - snap[0], this.parameters.box.y); this.el.attr("font-size", this.parameters.fontSize + snap[0]); return; } snap = this.checkAspectRatio(snap, true); this.el.move(this.parameters.box.x, this.parameters.box.y + snap[1]).size(this.parameters.box.width + snap[0], this.parameters.box.height - snap[1]); } }; break; // Right-Bottom case 'rb': // s.a. this.calc = function (diffX, diffY) { var snap = this.snapToGrid(diffX, diffY, 0); if (this.parameters.box.width + snap[0] > 0 && this.parameters.box.height + snap[1] > 0) { if (this.parameters.type === "text") { this.el.move(this.parameters.box.x - snap[0], this.parameters.box.y); this.el.attr("font-size", this.parameters.fontSize + snap[0]); return; } snap = this.checkAspectRatio(snap); this.el.move(this.parameters.box.x, this.parameters.box.y).size(this.parameters.box.width + snap[0], this.parameters.box.height + snap[1]); } }; break; // Left-Bottom case 'lb': // s.a. this.calc = function (diffX, diffY) { var snap = this.snapToGrid(diffX, diffY, 1); if (this.parameters.box.width - snap[0] > 0 && this.parameters.box.height + snap[1] > 0) { if (this.parameters.type === "text") { this.el.move(this.parameters.box.x + snap[0], this.parameters.box.y); this.el.attr("font-size", this.parameters.fontSize - snap[0]); return; } snap = this.checkAspectRatio(snap, true); this.el.move(this.parameters.box.x + snap[0], this.parameters.box.y).size(this.parameters.box.width - snap[0], this.parameters.box.height + snap[1]); } }; break; // Top case 't': // s.a. this.calc = function (diffX, diffY) { var snap = this.snapToGrid(diffX, diffY, 1 << 1); if (this.parameters.box.height - snap[1] > 0) { // Disable the font-resizing if it is not from the corner of bounding-box if (this.parameters.type === "text") { return; } this.el.move(this.parameters.box.x, this.parameters.box.y + snap[1]).height(this.parameters.box.height - snap[1]); } }; break; // Right case 'r': // s.a. this.calc = function (diffX, diffY) { var snap = this.snapToGrid(diffX, diffY, 0); if (this.parameters.box.width + snap[0] > 0) { if (this.parameters.type === "text") { return; } this.el.move(this.parameters.box.x, this.parameters.box.y).width(this.parameters.box.width + snap[0]); } }; break; // Bottom case 'b': // s.a. this.calc = function (diffX, diffY) { var snap = this.snapToGrid(diffX, diffY, 0); if (this.parameters.box.height + snap[1] > 0) { if (this.parameters.type === "text") { return; } this.el.move(this.parameters.box.x, this.parameters.box.y).height(this.parameters.box.height + snap[1]); } }; break; // Left case 'l': // s.a. this.calc = function (diffX, diffY) { var snap = this.snapToGrid(diffX, diffY, 1); if (this.parameters.box.width - snap[0] > 0) { if (this.parameters.type === "text") { return; } this.el.move(this.parameters.box.x + snap[0], this.parameters.box.y).width(this.parameters.box.width - snap[0]); } }; break; // Rotation case 'rot': // s.a. this.calc = function (diffX, diffY) { // yes this is kinda stupid but we need the mouse coords back... var current = {x: diffX + this.parameters.p.x, y: diffY + this.parameters.p.y}; // start minus middle var sAngle = Math.atan2((this.parameters.p.y - this.parameters.box.y - this.parameters.box.height / 2), (this.parameters.p.x - this.parameters.box.x - this.parameters.box.width / 2)); // end minus middle var pAngle = Math.atan2((current.y - this.parameters.box.y - this.parameters.box.height / 2), (current.x - this.parameters.box.x - this.parameters.box.width / 2)); var angle = this.parameters.rotation + (pAngle - sAngle) * 180 / Math.PI + this.options.snapToAngle / 2; // We have to move the element to the center of the box first and change the rotation afterwards // because rotation always works around a rotation-center, which is changed when moving the element // We also set the new rotation center to the center of the box. this.el.center(this.parameters.box.cx, this.parameters.box.cy).rotate(angle - (angle % this.options.snapToAngle), this.parameters.box.cx, this.parameters.box.cy); }; break; // Moving one single Point (needed when an element is deepSelected which means you can move every single point of the object) case 'point': this.calc = function (diffX, diffY) { // Snapping the point to the grid var snap = this.snapToGrid(diffX, diffY, this.parameters.pointCoords[0], this.parameters.pointCoords[1]); // Get the point array var array = this.el.array().valueOf(); // Changing the moved point in the array array[this.parameters.i][0] = this.parameters.pointCoords[0] + snap[0]; array[this.parameters.i][1] = this.parameters.pointCoords[1] + snap[1]; // And plot the new this.el this.el.plot(array); }; } this.el.fire('resizestart', {dx: this.parameters.x, dy: this.parameters.y, event: event}); // When resizing started, we have to register events for... // Touches. SVG.on(window, 'touchmove.resize', function(e) { _this.update(e || window.event); }); SVG.on(window, 'touchend.resize', function() { _this.done(); }); // Mouse. SVG.on(window, 'mousemove.resize', function (e) { _this.update(e || window.event); }); SVG.on(window, 'mouseup.resize', function () { _this.done(); }); }; // The update-function redraws the element every time the mouse is moving ResizeHandler.prototype.update = function (event) { if (!event) { if (this.lastUpdateCall) { this.calc(this.lastUpdateCall[0], this.lastUpdateCall[1]); } return; } // Calculate the difference between the mouseposition at start and now var txPt = this._extractPosition(event); var p = this.transformPoint(txPt.x, txPt.y); var diffX = p.x - this.parameters.p.x, diffY = p.y - this.parameters.p.y; this.lastUpdateCall = [diffX, diffY]; // Calculate the new position and height / width of the element this.calc(diffX, diffY); // Emit an event to say we have changed. this.el.fire('resizing', {dx: diffX, dy: diffY, event: event}); }; // Is called on mouseup. // Removes the update-function from the mousemove event ResizeHandler.prototype.done = function () { this.lastUpdateCall = null; SVG.off(window, 'mousemove.resize'); SVG.off(window, 'mouseup.resize'); SVG.off(window, 'touchmove.resize'); SVG.off(window, 'touchend.resize'); this.el.fire('resizedone'); }; // The flag is used to determine whether the resizing is used with a left-Point (first bit) and top-point (second bit) // In this cases the temp-values are calculated differently ResizeHandler.prototype.snapToGrid = function (diffX, diffY, flag, pointCoordsY) { var temp; // If `pointCoordsY` is given, a single Point has to be snapped (deepSelect). That's why we need a different temp-value if (typeof pointCoordsY !== 'undefined') { // Note that flag = pointCoordsX in this case temp = [(flag + diffX) % this.options.snapToGrid, (pointCoordsY + diffY) % this.options.snapToGrid]; } else { // We check if the flag is set and if not we set a default-value (both bits set - which means upper-left-edge) flag = flag == null ? 1 | 1 << 1 : flag; temp = [(this.parameters.box.x + diffX + (flag & 1 ? 0 : this.parameters.box.width)) % this.options.snapToGrid, (this.parameters.box.y + diffY + (flag & (1 << 1) ? 0 : this.parameters.box.height)) % this.options.snapToGrid]; } if(diffX < 0) { temp[0] -= this.options.snapToGrid; } if(diffY < 0) { temp[1] -= this.options.snapToGrid; } diffX -= (Math.abs(temp[0]) < this.options.snapToGrid / 2 ? temp[0] : temp[0] - (diffX < 0 ? -this.options.snapToGrid : this.options.snapToGrid)); diffY -= (Math.abs(temp[1]) < this.options.snapToGrid / 2 ? temp[1] : temp[1] - (diffY < 0 ? -this.options.snapToGrid : this.options.snapToGrid)); return this.constraintToBox(diffX, diffY, flag, pointCoordsY); }; // keep element within constrained box ResizeHandler.prototype.constraintToBox = function (diffX, diffY, flag, pointCoordsY) { //return [diffX, diffY] var c = this.options.constraint || {}; var orgX, orgY; if (typeof pointCoordsY !== 'undefined') { orgX = flag; orgY = pointCoordsY; } else { orgX = this.parameters.box.x + (flag & 1 ? 0 : this.parameters.box.width); orgY = this.parameters.box.y + (flag & (1<<1) ? 0 : this.parameters.box.height); } if (typeof c.minX !== 'undefined' && orgX + diffX < c.minX) { diffX = c.minX - orgX; } if (typeof c.maxX !== 'undefined' && orgX + diffX > c.maxX) { diffX = c.maxX - orgX; } if (typeof c.minY !== 'undefined' && orgY + diffY < c.minY) { diffY = c.minY - orgY; } if (typeof c.maxY !== 'undefined' && orgY + diffY > c.maxY) { diffY = c.maxY - orgY; } return [diffX, diffY]; }; ResizeHandler.prototype.checkAspectRatio = function (snap, isReverse) { if (!this.options.saveAspectRatio) { return snap; } var updatedSnap = snap.slice(); var aspectRatio = this.parameters.box.width / this.parameters.box.height; var newW = this.parameters.box.width + snap[0]; var newH = this.parameters.box.height - snap[1]; var newAspectRatio = newW / newH; if (newAspectRatio < aspectRatio) { // Height is too big. Adapt it updatedSnap[1] = newW / aspectRatio - this.parameters.box.height; isReverse && (updatedSnap[1] = -updatedSnap[1]); } else if (newAspectRatio > aspectRatio) { // Width is too big. Adapt it updatedSnap[0] = this.parameters.box.width - newH * aspectRatio; isReverse && (updatedSnap[0] = -updatedSnap[0]); } return updatedSnap; }; SVG.extend(SVG.Element, { // Resize element with mouse resize: function (options) { (this.remember('_resizeHandler') || new ResizeHandler(this)).init(options || {}); return this; } }); SVG.Element.prototype.resize.defaults = { snapToAngle: 0.1, // Specifies the speed the rotation is happening when moving the mouse snapToGrid: 1, // Snaps to a grid of `snapToGrid` Pixels constraint: {}, // keep element within constrained box saveAspectRatio: false // Save aspect ratio when resizing using lt, rt, rb or lb points }; }).call(this); }()); function styleInject(css, ref) { if ( ref === void 0 ) ref = {}; var insertAt = ref.insertAt; if (!css || typeof document === 'undefined') { return; } var head = document.head || document.getElementsByTagName('head')[0]; var style = document.createElement('style'); style.type = 'text/css'; if (insertAt === 'top') { if (head.firstChild) { head.insertBefore(style, head.firstChild); } else { head.appendChild(style); } } else { head.appendChild(style); } if (style.styleSheet) { style.styleSheet.cssText = css; } else { style.appendChild(document.createTextNode(css)); } } var css = ".apexcharts-canvas {\n position: relative;\n user-select: none;\n /* cannot give overflow: hidden as it will crop tooltips which overflow outside chart area */\n}\n\n\n/* scrollbar is not visible by default for legend, hence forcing the visibility */\n.apexcharts-canvas ::-webkit-scrollbar {\n -webkit-appearance: none;\n width: 6px;\n}\n\n.apexcharts-canvas ::-webkit-scrollbar-thumb {\n border-radius: 4px;\n background-color: rgba(0, 0, 0, .5);\n box-shadow: 0 0 1px rgba(255, 255, 255, .5);\n -webkit-box-shadow: 0 0 1px rgba(255, 255, 255, .5);\n}\n\n.apexcharts-canvas.apexcharts-theme-dark {\n background: #343F57;\n}\n\n.apexcharts-inner {\n position: relative;\n}\n\n.apexcharts-text tspan {\n font-family: inherit;\n}\n\n.legend-mouseover-inactive {\n transition: 0.15s ease all;\n opacity: 0.20;\n}\n\n.apexcharts-series-collapsed {\n opacity: 0;\n}\n\n.apexcharts-tooltip {\n border-radius: 5px;\n box-shadow: 2px 2px 6px -4px #999;\n cursor: default;\n font-size: 14px;\n left: 62px;\n opacity: 0;\n pointer-events: none;\n position: absolute;\n top: 20px;\n overflow: hidden;\n white-space: nowrap;\n z-index: 12;\n transition: 0.15s ease all;\n}\n\n.apexcharts-tooltip.apexcharts-active {\n opacity: 1;\n transition: 0.15s ease all;\n}\n\n.apexcharts-tooltip.apexcharts-theme-light {\n border: 1px solid #e3e3e3;\n background: rgba(255, 255, 255, 0.96);\n}\n\n.apexcharts-tooltip.apexcharts-theme-dark {\n color: #fff;\n background: rgba(30, 30, 30, 0.8);\n}\n\n.apexcharts-tooltip * {\n font-family: inherit;\n}\n\n\n.apexcharts-tooltip-title {\n padding: 6px;\n font-size: 15px;\n margin-bottom: 4px;\n}\n\n.apexcharts-tooltip.apexcharts-theme-light .apexcharts-tooltip-title {\n background: #ECEFF1;\n border-bottom: 1px solid #ddd;\n}\n\n.apexcharts-tooltip.apexcharts-theme-dark .apexcharts-tooltip-title {\n background: rgba(0, 0, 0, 0.7);\n border-bottom: 1px solid #333;\n}\n\n.apexcharts-tooltip-text-value,\n.apexcharts-tooltip-text-z-value {\n display: inline-block;\n font-weight: 600;\n margin-left: 5px;\n}\n\n.apexcharts-tooltip-text-z-label:empty,\n.apexcharts-tooltip-text-z-value:empty {\n display: none;\n}\n\n.apexcharts-tooltip-text-value,\n.apexcharts-tooltip-text-z-value {\n font-weight: 600;\n}\n\n.apexcharts-tooltip-marker {\n width: 12px;\n height: 12px;\n position: relative;\n top: 0px;\n margin-right: 10px;\n border-radius: 50%;\n}\n\n.apexcharts-tooltip-series-group {\n padding: 0 10px;\n display: none;\n text-align: left;\n justify-content: left;\n align-items: center;\n}\n\n.apexcharts-tooltip-series-group.apexcharts-active .apexcharts-tooltip-marker {\n opacity: 1;\n}\n\n.apexcharts-tooltip-series-group.apexcharts-active,\n.apexcharts-tooltip-series-group:last-child {\n padding-bottom: 4px;\n}\n\n.apexcharts-tooltip-series-group-hidden {\n opacity: 0;\n height: 0;\n line-height: 0;\n padding: 0 !important;\n}\n\n.apexcharts-tooltip-y-group {\n padding: 6px 0 5px;\n}\n\n.apexcharts-tooltip-candlestick {\n padding: 4px 8px;\n}\n\n.apexcharts-tooltip-candlestick>div {\n margin: 4px 0;\n}\n\n.apexcharts-tooltip-candlestick span.value {\n font-weight: bold;\n}\n\n.apexcharts-tooltip-rangebar {\n padding: 5px 8px;\n}\n\n.apexcharts-tooltip-rangebar .category {\n font-weight: 600;\n color: #777;\n}\n\n.apexcharts-tooltip-rangebar .series-name {\n font-weight: bold;\n display: block;\n margin-bottom: 5px;\n}\n\n.apexcharts-xaxistooltip {\n opacity: 0;\n padding: 9px 10px;\n pointer-events: none;\n color: #373d3f;\n font-size: 13px;\n text-align: center;\n border-radius: 2px;\n position: absolute;\n z-index: 10;\n background: #ECEFF1;\n border: 1px solid #90A4AE;\n transition: 0.15s ease all;\n}\n\n.apexcharts-xaxistooltip.apexcharts-theme-dark {\n background: rgba(0, 0, 0, 0.7);\n border: 1px solid rgba(0, 0, 0, 0.5);\n color: #fff;\n}\n\n.apexcharts-xaxistooltip:after,\n.apexcharts-xaxistooltip:before {\n left: 50%;\n border: solid transparent;\n content: \" \";\n height: 0;\n width: 0;\n position: absolute;\n pointer-events: none;\n}\n\n.apexcharts-xaxistooltip:after {\n border-color: rgba(236, 239, 241, 0);\n border-width: 6px;\n margin-left: -6px;\n}\n\n.apexcharts-xaxistooltip:before {\n border-color: rgba(144, 164, 174, 0);\n border-width: 7px;\n margin-left: -7px;\n}\n\n.apexcharts-xaxistooltip-bottom:after,\n.apexcharts-xaxistooltip-bottom:before {\n bottom: 100%;\n}\n\n.apexcharts-xaxistooltip-top:after,\n.apexcharts-xaxistooltip-top:before {\n top: 100%;\n}\n\n.apexcharts-xaxistooltip-bottom:after {\n border-bottom-color: #ECEFF1;\n}\n\n.apexcharts-xaxistooltip-bottom:before {\n border-bottom-color: #90A4AE;\n}\n\n.apexcharts-xaxistooltip-bottom.apexcharts-theme-dark:after {\n border-bottom-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-xaxistooltip-bottom.apexcharts-theme-dark:before {\n border-bottom-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-xaxistooltip-top:after {\n border-top-color: #ECEFF1\n}\n\n.apexcharts-xaxistooltip-top:before {\n border-top-color: #90A4AE;\n}\n\n.apexcharts-xaxistooltip-top.apexcharts-theme-dark:after {\n border-top-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-xaxistooltip-top.apexcharts-theme-dark:before {\n border-top-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-xaxistooltip.apexcharts-active {\n opacity: 1;\n transition: 0.15s ease all;\n}\n\n.apexcharts-yaxistooltip {\n opacity: 0;\n padding: 4px 10px;\n pointer-events: none;\n color: #373d3f;\n font-size: 13px;\n text-align: center;\n border-radius: 2px;\n position: absolute;\n z-index: 10;\n background: #ECEFF1;\n border: 1px solid #90A4AE;\n}\n\n.apexcharts-yaxistooltip.apexcharts-theme-dark {\n background: rgba(0, 0, 0, 0.7);\n border: 1px solid rgba(0, 0, 0, 0.5);\n color: #fff;\n}\n\n.apexcharts-yaxistooltip:after,\n.apexcharts-yaxistooltip:before {\n top: 50%;\n border: solid transparent;\n content: \" \";\n height: 0;\n width: 0;\n position: absolute;\n pointer-events: none;\n}\n\n.apexcharts-yaxistooltip:after {\n border-color: rgba(236, 239, 241, 0);\n border-width: 6px;\n margin-top: -6px;\n}\n\n.apexcharts-yaxistooltip:before {\n border-color: rgba(144, 164, 174, 0);\n border-width: 7px;\n margin-top: -7px;\n}\n\n.apexcharts-yaxistooltip-left:after,\n.apexcharts-yaxistooltip-left:before {\n left: 100%;\n}\n\n.apexcharts-yaxistooltip-right:after,\n.apexcharts-yaxistooltip-right:before {\n right: 100%;\n}\n\n.apexcharts-yaxistooltip-left:after {\n border-left-color: #ECEFF1;\n}\n\n.apexcharts-yaxistooltip-left:before {\n border-left-color: #90A4AE;\n}\n\n.apexcharts-yaxistooltip-left.apexcharts-theme-dark:after {\n border-left-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-yaxistooltip-left.apexcharts-theme-dark:before {\n border-left-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-yaxistooltip-right:after {\n border-right-color: #ECEFF1;\n}\n\n.apexcharts-yaxistooltip-right:before {\n border-right-color: #90A4AE;\n}\n\n.apexcharts-yaxistooltip-right.apexcharts-theme-dark:after {\n border-right-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-yaxistooltip-right.apexcharts-theme-dark:before {\n border-right-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-yaxistooltip.apexcharts-active {\n opacity: 1;\n}\n\n.apexcharts-yaxistooltip-hidden {\n display: none;\n}\n\n.apexcharts-xcrosshairs,\n.apexcharts-ycrosshairs {\n pointer-events: none;\n opacity: 0;\n transition: 0.15s ease all;\n}\n\n.apexcharts-xcrosshairs.apexcharts-active,\n.apexcharts-ycrosshairs.apexcharts-active {\n opacity: 1;\n transition: 0.15s ease all;\n}\n\n.apexcharts-ycrosshairs-hidden {\n opacity: 0;\n}\n\n.apexcharts-selection-rect {\n cursor: move;\n}\n\n.svg_select_boundingRect, .svg_select_points_rot {\n pointer-events: none;\n opacity: 0;\n visibility: hidden;\n}\n.apexcharts-selection-rect + g .svg_select_boundingRect,\n.apexcharts-selection-rect + g .svg_select_points_rot {\n opacity: 0;\n visibility: hidden;\n}\n\n.apexcharts-selection-rect + g .svg_select_points_l,\n.apexcharts-selection-rect + g .svg_select_points_r {\n cursor: ew-resize;\n opacity: 1;\n visibility: visible;\n}\n\n.svg_select_points {\n fill: #efefef;\n stroke: #333;\n rx: 2;\n}\n\n.apexcharts-canvas.apexcharts-zoomable .hovering-zoom {\n cursor: crosshair\n}\n\n.apexcharts-canvas.apexcharts-zoomable .hovering-pan {\n cursor: move\n}\n\n.apexcharts-zoom-icon,\n.apexcharts-zoomin-icon,\n.apexcharts-zoomout-icon,\n.apexcharts-reset-icon,\n.apexcharts-pan-icon,\n.apexcharts-selection-icon,\n.apexcharts-menu-icon,\n.apexcharts-toolbar-custom-icon {\n cursor: pointer;\n width: 20px;\n height: 20px;\n line-height: 24px;\n color: #6E8192;\n text-align: center;\n}\n\n.apexcharts-zoom-icon svg,\n.apexcharts-zoomin-icon svg,\n.apexcharts-zoomout-icon svg,\n.apexcharts-reset-icon svg,\n.apexcharts-menu-icon svg {\n fill: #6E8192;\n}\n\n.apexcharts-selection-icon svg {\n fill: #444;\n transform: scale(0.76)\n}\n\n.apexcharts-theme-dark .apexcharts-zoom-icon svg,\n.apexcharts-theme-dark .apexcharts-zoomin-icon svg,\n.apexcharts-theme-dark .apexcharts-zoomout-icon svg,\n.apexcharts-theme-dark .apexcharts-reset-icon svg,\n.apexcharts-theme-dark .apexcharts-pan-icon svg,\n.apexcharts-theme-dark .apexcharts-selection-icon svg,\n.apexcharts-theme-dark .apexcharts-menu-icon svg,\n.apexcharts-theme-dark .apexcharts-toolbar-custom-icon svg {\n fill: #f3f4f5;\n}\n\n.apexcharts-canvas .apexcharts-zoom-icon.apexcharts-selected svg,\n.apexcharts-canvas .apexcharts-selection-icon.apexcharts-selected svg,\n.apexcharts-canvas .apexcharts-reset-zoom-icon.apexcharts-selected svg {\n fill: #008FFB;\n}\n\n.apexcharts-theme-light .apexcharts-selection-icon:not(.apexcharts-selected):hover svg,\n.apexcharts-theme-light .apexcharts-zoom-icon:not(.apexcharts-selected):hover svg,\n.apexcharts-theme-light .apexcharts-zoomin-icon:hover svg,\n.apexcharts-theme-light .apexcharts-zoomout-icon:hover svg,\n.apexcharts-theme-light .apexcharts-reset-icon:hover svg,\n.apexcharts-theme-light .apexcharts-menu-icon:hover svg {\n fill: #333;\n}\n\n.apexcharts-selection-icon,\n.apexcharts-menu-icon {\n position: relative;\n}\n\n.apexcharts-reset-icon {\n margin-left: 5px;\n}\n\n.apexcharts-zoom-icon,\n.apexcharts-reset-icon,\n.apexcharts-menu-icon {\n transform: scale(0.85);\n}\n\n.apexcharts-zoomin-icon,\n.apexcharts-zoomout-icon {\n transform: scale(0.7)\n}\n\n.apexcharts-zoomout-icon {\n margin-right: 3px;\n}\n\n.apexcharts-pan-icon {\n transform: scale(0.62);\n position: relative;\n left: 1px;\n top: 0px;\n}\n\n.apexcharts-pan-icon svg {\n fill: #fff;\n stroke: #6E8192;\n stroke-width: 2;\n}\n\n.apexcharts-pan-icon.apexcharts-selected svg {\n stroke: #008FFB;\n}\n\n.apexcharts-pan-icon:not(.apexcharts-selected):hover svg {\n stroke: #333;\n}\n\n.apexcharts-toolbar {\n position: absolute;\n z-index: 11;\n max-width: 176px;\n text-align: right;\n border-radius: 3px;\n padding: 0px 6px 2px 6px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.apexcharts-menu {\n background: #fff;\n position: absolute;\n top: 100%;\n border: 1px solid #ddd;\n border-radius: 3px;\n padding: 3px;\n right: 10px;\n opacity: 0;\n min-width: 110px;\n transition: 0.15s ease all;\n pointer-events: none;\n}\n\n.apexcharts-menu.apexcharts-menu-open {\n opacity: 1;\n pointer-events: all;\n transition: 0.15s ease all;\n}\n\n.apexcharts-menu-item {\n padding: 6px 7px;\n font-size: 12px;\n cursor: pointer;\n}\n\n.apexcharts-theme-light .apexcharts-menu-item:hover {\n background: #eee;\n}\n\n.apexcharts-theme-dark .apexcharts-menu {\n background: rgba(0, 0, 0, 0.7);\n color: #fff;\n}\n\n@media screen and (min-width: 768px) {\n .apexcharts-canvas:hover .apexcharts-toolbar {\n opacity: 1;\n }\n}\n\n.apexcharts-datalabel.apexcharts-element-hidden {\n opacity: 0;\n}\n\n.apexcharts-pie-label,\n.apexcharts-datalabels,\n.apexcharts-datalabel,\n.apexcharts-datalabel-label,\n.apexcharts-datalabel-value {\n cursor: default;\n pointer-events: none;\n}\n\n.apexcharts-pie-label-delay {\n opacity: 0;\n animation-name: opaque;\n animation-duration: 0.3s;\n animation-fill-mode: forwards;\n animation-timing-function: ease;\n}\n\n.apexcharts-canvas .apexcharts-element-hidden {\n opacity: 0;\n}\n\n.apexcharts-hide .apexcharts-series-points {\n opacity: 0;\n}\n\n.apexcharts-gridline,\n.apexcharts-annotation-rect,\n.apexcharts-tooltip .apexcharts-marker,\n.apexcharts-area-series .apexcharts-area,\n.apexcharts-line,\n.apexcharts-zoom-rect,\n.apexcharts-toolbar svg,\n.apexcharts-area-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events,\n.apexcharts-line-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events,\n.apexcharts-radar-series path,\n.apexcharts-radar-series polygon {\n pointer-events: none;\n}\n\n\n/* markers */\n\n.apexcharts-marker {\n transition: 0.15s ease all;\n}\n\n@keyframes opaque {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n}\n\n\n/* Resize generated styles */\n\n@keyframes resizeanim {\n from {\n opacity: 0;\n }\n to {\n opacity: 0;\n }\n}\n\n.resize-triggers {\n animation: 1ms resizeanim;\n visibility: hidden;\n opacity: 0;\n}\n\n.resize-triggers,\n.resize-triggers>div,\n.contract-trigger:before {\n content: \" \";\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n overflow: hidden;\n}\n\n.resize-triggers>div {\n background: #eee;\n overflow: auto;\n}\n\n.contract-trigger:before {\n width: 200%;\n height: 200%;\n}"; styleInject(css); /** * Detect Element Resize * * https://github.com/sdecima/javascript-detect-element-resize * Sebastian Decima * * version: 0.5.3 **/ (function () { function resetTriggers(element) { var triggers = element.__resizeTriggers__, expand = triggers.firstElementChild, contract = triggers.lastElementChild, expandChild = expand ? expand.firstElementChild : null; if (contract) { contract.scrollLeft = contract.scrollWidth; contract.scrollTop = contract.scrollHeight; } if (expandChild) { expandChild.style.width = expand.offsetWidth + 1 + 'px'; expandChild.style.height = expand.offsetHeight + 1 + 'px'; } if (expand) { expand.scrollLeft = expand.scrollWidth; expand.scrollTop = expand.scrollHeight; } } function checkTriggers(element) { return element.offsetWidth != element.__resizeLast__.width || element.offsetHeight != element.__resizeLast__.height; } function scrollListener(e) { var element = this; resetTriggers(this); if (this.__resizeRAF__) cancelFrame(this.__resizeRAF__); this.__resizeRAF__ = requestFrame(function () { if (checkTriggers(element)) { element.__resizeLast__.width = element.offsetWidth; element.__resizeLast__.height = element.offsetHeight; element.__resizeListeners__.forEach(function (fn) { fn.call(e); }); } }); } var requestFrame = function () { var raf = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || function (fn) { return window.setTimeout(fn, 20); }; return function (fn) { return raf(fn); }; }(); var cancelFrame = function () { var cancel = window.cancelAnimationFrame || window.mozCancelAnimationFrame || window.webkitCancelAnimationFrame || window.clearTimeout; return function (id) { return cancel(id); }; }(); /* Detect CSS Animations support to detect element display/re-attach */ var animation = false, animationstartevent = 'animationstart', domPrefixes = 'Webkit Moz O ms'.split(' '), startEvents = 'webkitAnimationStart animationstart oAnimationStart MSAnimationStart'.split(' '); { var elm = document.createElement('fakeelement'); if (elm.style.animationName !== undefined) { animation = true; } if (animation === false) { for (var i = 0; i < domPrefixes.length; i++) { if (elm.style[domPrefixes[i] + 'AnimationName'] !== undefined) { animationstartevent = startEvents[i]; break; } } } } var animationName = 'resizeanim'; window.addResizeListener = function (element, fn) { if (!element.__resizeTriggers__) { if (getComputedStyle(element).position == 'static') element.style.position = 'relative'; element.__resizeLast__ = {}; element.__resizeListeners__ = []; (element.__resizeTriggers__ = document.createElement('div')).className = 'resize-triggers'; element.__resizeTriggers__.innerHTML = '
          ' + '
          '; element.appendChild(element.__resizeTriggers__); resetTriggers(element); element.addEventListener('scroll', scrollListener, true); /* Listen for a css animation to detect element display/re-attach */ animationstartevent && element.__resizeTriggers__.addEventListener(animationstartevent, function (e) { if (e.animationName == animationName) { resetTriggers(element); } }); } element.__resizeListeners__.push(fn); }; window.removeResizeListener = function (element, fn) { if (element) { element.__resizeListeners__.splice(element.__resizeListeners__.indexOf(fn), 1); if (!element.__resizeListeners__.length) { element.removeEventListener('scroll', scrollListener); if (element.__resizeTriggers__.parentNode) { element.__resizeTriggers__ = !element.removeChild(element.__resizeTriggers__); } } } }; })(); window.Apex = {}; var InitCtxVariables = /*#__PURE__*/function () { function InitCtxVariables(ctx) { _classCallCheck(this, InitCtxVariables); this.ctx = ctx; this.w = ctx.w; } _createClass(InitCtxVariables, [{ key: "initModules", value: function initModules() { this.ctx.publicMethods = ['updateOptions', 'updateSeries', 'appendData', 'appendSeries', 'toggleSeries', 'showSeries', 'hideSeries', 'setLocale', 'resetSeries', 'toggleDataPointSelection', 'dataURI', 'addXaxisAnnotation', 'addYaxisAnnotation', 'addPointAnnotation', 'clearAnnotations', 'removeAnnotation', 'paper', 'destroy']; this.ctx.eventList = ['click', 'mousedown', 'mousemove', 'touchstart', 'touchmove', 'mouseup', 'touchend']; this.ctx.animations = new Animations(this.ctx); this.ctx.axes = new Axes(this.ctx); this.ctx.core = new Core(this.ctx.el, this.ctx); this.ctx.config = new Config({}); this.ctx.data = new Data(this.ctx); this.ctx.grid = new Grid(this.ctx); this.ctx.graphics = new Graphics(this.ctx); this.ctx.coreUtils = new CoreUtils(this.ctx); this.ctx.crosshairs = new Crosshairs(this.ctx); this.ctx.events = new Events(this.ctx); this.ctx.exports = new Exports(this.ctx); this.ctx.localization = new Localization(this.ctx); this.ctx.options = new Options(); this.ctx.responsive = new Responsive(this.ctx); this.ctx.series = new Series(this.ctx); this.ctx.theme = new Theme(this.ctx); this.ctx.formatters = new Formatters(this.ctx); this.ctx.titleSubtitle = new TitleSubtitle(this.ctx); this.ctx.legend = new Legend(this.ctx); this.ctx.toolbar = new Toolbar(this.ctx); this.ctx.dimensions = new Dimensions(this.ctx); this.ctx.updateHelpers = new UpdateHelpers(this.ctx); this.ctx.zoomPanSelection = new ZoomPanSelection(this.ctx); this.ctx.w.globals.tooltip = new Tooltip(this.ctx); } }]); return InitCtxVariables; }(); var Destroy = /*#__PURE__*/function () { function Destroy(ctx) { _classCallCheck(this, Destroy); this.ctx = ctx; this.w = ctx.w; } _createClass(Destroy, [{ key: "clear", value: function clear() { if (this.ctx.zoomPanSelection) { this.ctx.zoomPanSelection.destroy(); } if (this.ctx.toolbar) { this.ctx.toolbar.destroy(); } this.ctx.animations = null; this.ctx.axes = null; this.ctx.annotations = null; this.ctx.core = null; this.ctx.data = null; this.ctx.grid = null; this.ctx.series = null; this.ctx.responsive = null; this.ctx.theme = null; this.ctx.formatters = null; this.ctx.titleSubtitle = null; this.ctx.legend = null; this.ctx.dimensions = null; this.ctx.options = null; this.ctx.crosshairs = null; this.ctx.zoomPanSelection = null; this.ctx.updateHelpers = null; this.ctx.toolbar = null; this.ctx.localization = null; this.ctx.w.globals.tooltip = null; this.clearDomElements(); } }, { key: "killSVG", value: function killSVG(draw) { draw.each(function (i, children) { this.removeClass('*'); this.off(); this.stop(); }, true); draw.ungroup(); draw.clear(); } }, { key: "clearDomElements", value: function clearDomElements() { var _this = this; // detach document event this.ctx.eventList.forEach(function (event) { document.removeEventListener(event, _this.ctx.events.documentEvent); }); var domEls = this.w.globals.dom; if (this.ctx.el !== null) { // remove all child elements - resetting the whole chart while (this.ctx.el.firstChild) { this.ctx.el.removeChild(this.ctx.el.firstChild); } } this.killSVG(domEls.Paper); domEls.Paper.remove(); domEls.elWrap = null; domEls.elGraphical = null; domEls.elAnnotations = null; domEls.elLegendWrap = null; domEls.baseEl = null; domEls.elGridRect = null; domEls.elGridRectMask = null; domEls.elGridRectMarkerMask = null; domEls.elDefs = null; } }]); return Destroy; }(); /** * * @module ApexCharts **/ var ApexCharts$1 = /*#__PURE__*/function () { function ApexCharts(el, opts) { _classCallCheck(this, ApexCharts); this.opts = opts; this.ctx = this; // Pass the user supplied options to the Base Class where these options will be extended with defaults. The returned object from Base Class will become the config object in the entire codebase. this.w = new Base(opts).init(); this.el = el; this.w.globals.cuid = Utils.randomId(); this.w.globals.chartID = this.w.config.chart.id ? this.w.config.chart.id : this.w.globals.cuid; var initCtx = new InitCtxVariables(this); initCtx.initModules(); this.create = Utils.bind(this.create, this); this.windowResizeHandler = this._windowResize.bind(this); } /** * The primary method user will call to render the chart. */ _createClass(ApexCharts, [{ key: "render", value: function render() { var _this = this; // main method return new Promise(function (resolve, reject) { // only draw chart, if element found if (_this.el !== null) { if (typeof Apex._chartInstances === 'undefined') { Apex._chartInstances = []; } if (_this.w.config.chart.id) { Apex._chartInstances.push({ id: _this.w.globals.chartID, group: _this.w.config.chart.group, chart: _this }); } // set the locale here _this.setLocale(_this.w.config.chart.defaultLocale); var beforeMount = _this.w.config.chart.events.beforeMount; if (typeof beforeMount === 'function') { beforeMount(_this, _this.w); } _this.events.fireEvent('beforeMount', [_this, _this.w]); window.addEventListener('resize', _this.windowResizeHandler); window.addResizeListener(_this.el.parentNode, _this._parentResizeCallback.bind(_this)); var graphData = _this.create(_this.w.config.series, {}); if (!graphData) return resolve(_this); _this.mount(graphData).then(function () { if (typeof _this.w.config.chart.events.mounted === 'function') { _this.w.config.chart.events.mounted(_this, _this.w); } _this.events.fireEvent('mounted', [_this, _this.w]); resolve(graphData); }).catch(function (e) { reject(e); // handle error in case no data or element not found }); } else { reject(new Error('Element not found')); } }); } }, { key: "create", value: function create(ser, opts) { var w = this.w; var initCtx = new InitCtxVariables(this); initCtx.initModules(); var gl = this.w.globals; gl.noData = false; gl.animationEnded = false; this.responsive.checkResponsiveConfig(opts); if (w.config.xaxis.convertedCatToNumeric) { var defaults = new Defaults(w.config); defaults.convertCatToNumericXaxis(w.config, this.ctx); } if (this.el === null) { gl.animationEnded = true; return null; } this.core.setupElements(); if (gl.svgWidth === 0) { // if the element is hidden, skip drawing gl.animationEnded = true; return null; } var combo = CoreUtils.checkComboSeries(ser); gl.comboCharts = combo.comboCharts; gl.comboBarCount = combo.comboBarCount; if (ser.length === 0 || ser.length === 1 && ser[0].data && ser[0].data.length === 0) { this.series.handleNoData(); } this.events.setupEventHandlers(); // Handle the data inputted by user and set some of the global variables (for eg, if data is datetime / numeric / category). Don't calculate the range / min / max at this time this.data.parseData(ser); // this is a good time to set theme colors first this.theme.init(); // as markers accepts array, we need to setup global markers for easier access var markers = new Markers(this); markers.setGlobalMarkerSize(); // labelFormatters should be called before dimensions as in dimensions we need text labels width this.formatters.setLabelFormatters(); this.titleSubtitle.draw(); // legend is calculated here before coreCalculations because it affects the plottable area // if there is some data to show or user collapsed all series, then proceed drawing legend if (!gl.noData || gl.collapsedSeries.length === gl.series.length) { this.legend.init(); } // check whether in multiple series, all series share the same X this.series.hasAllSeriesEqualX(); // coreCalculations will give the min/max range and yaxis/axis values. It should be called here to set series variable from config to globals if (gl.axisCharts) { this.core.coreCalculations(); if (w.config.xaxis.type !== 'category') { // as we have minX and maxX values, determine the default DateTimeFormat for time series this.formatters.setLabelFormatters(); } } // we need to generate yaxis for heatmap separately as we are not showing numerics there, but seriesNames. There are some tweaks which are required for heatmap to align labels correctly which are done in below function // Also we need to do this before calcuting Dimentions plotCoords() method of Dimensions this.formatters.heatmapLabelFormatters(); // We got plottable area here, next task would be to calculate axis areas this.dimensions.plotCoords(); var xyRatios = this.core.xySettings(); this.grid.createGridMask(); var elGraph = this.core.plotChartType(ser, xyRatios); var dataLabels = new DataLabels(this); dataLabels.bringForward(); if (w.config.dataLabels.background.enabled) { dataLabels.dataLabelsBackground(); } // after all the drawing calculations, shift the graphical area (actual charts/bars) excluding legends this.core.shiftGraphPosition(); var dim = { plot: { left: w.globals.translateX, top: w.globals.translateY, width: w.globals.gridWidth, height: w.globals.gridHeight } }; return { elGraph: elGraph, xyRatios: xyRatios, elInner: w.globals.dom.elGraphical, dimensions: dim }; } }, { key: "mount", value: function mount() { var _this2 = this; var graphData = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; var me = this; var w = me.w; return new Promise(function (resolve, reject) { // no data to display if (me.el === null) { return reject(new Error('Not enough data to display or target element not found')); } else if (graphData === null || w.globals.allSeriesCollapsed) { me.series.handleNoData(); } me.axes.drawAxis(w.config.chart.type, graphData.xyRatios); me.grid = new Grid(me); var elgrid = me.grid.drawGrid(); me.annotations = new Annotations(me); me.annotations.drawShapeAnnos(); me.annotations.drawImageAnnos(); me.annotations.drawTextAnnos(); if (w.config.grid.position === 'back' && elgrid) { w.globals.dom.elGraphical.add(elgrid.el); } var xAxis = new XAxis(_this2.ctx); var yaxis = new YAxis(_this2.ctx); if (elgrid !== null) { xAxis.xAxisLabelCorrections(elgrid.xAxisTickWidth); yaxis.setYAxisTextAlignments(); } if (w.config.annotations.position === 'back') { w.globals.dom.Paper.add(w.globals.dom.elAnnotations); me.annotations.drawAxesAnnotations(); } if (graphData.elGraph instanceof Array) { for (var g = 0; g < graphData.elGraph.length; g++) { w.globals.dom.elGraphical.add(graphData.elGraph[g]); } } else { w.globals.dom.elGraphical.add(graphData.elGraph); } if (w.config.grid.position === 'front' && elgrid) { w.globals.dom.elGraphical.add(elgrid.el); } if (w.config.xaxis.crosshairs.position === 'front') { me.crosshairs.drawXCrosshairs(); } if (w.config.yaxis[0].crosshairs.position === 'front') { me.crosshairs.drawYCrosshairs(); } if (w.config.annotations.position === 'front') { w.globals.dom.Paper.add(w.globals.dom.elAnnotations); me.annotations.drawAxesAnnotations(); } if (!w.globals.noData) { // draw tooltips at the end if (w.config.tooltip.enabled && !w.globals.noData) { me.w.globals.tooltip.drawTooltip(graphData.xyRatios); } if (w.globals.axisCharts && (w.globals.isXNumeric || w.config.xaxis.convertedCatToNumeric)) { if (w.config.chart.zoom.enabled || w.config.chart.selection && w.config.chart.selection.enabled || w.config.chart.pan && w.config.chart.pan.enabled) { me.zoomPanSelection.init({ xyRatios: graphData.xyRatios }); } } else { var tools = w.config.chart.toolbar.tools; var toolsArr = ['zoom', 'zoomin', 'zoomout', 'selection', 'pan', 'reset']; toolsArr.forEach(function (t) { tools[t] = false; }); } if (w.config.chart.toolbar.show && !w.globals.allSeriesCollapsed) { me.toolbar.createToolbar(); } } if (w.globals.memory.methodsToExec.length > 0) { w.globals.memory.methodsToExec.forEach(function (fn) { fn.method(fn.params, false, fn.context); }); } if (!w.globals.axisCharts && !w.globals.noData) { me.core.resizeNonAxisCharts(); } resolve(me); }); } /** * Destroy the chart instance by removing all elements which also clean up event listeners on those elements. */ }, { key: "destroy", value: function destroy() { window.removeEventListener('resize', this.windowResizeHandler); window.removeResizeListener(this.el.parentNode, this._parentResizeCallback.bind(this)); // remove the chart's instance from the global Apex._chartInstances var chartID = this.w.config.chart.id; if (chartID) { Apex._chartInstances.forEach(function (c, i) { if (c.id === chartID) { Apex._chartInstances.splice(i, 1); } }); } new Destroy(this.ctx).clear(); } /** * Allows users to update Options after the chart has rendered. * * @param {object} options - A new config object can be passed which will be merged with the existing config object * @param {boolean} redraw - should redraw from beginning or should use existing paths and redraw from there * @param {boolean} animate - should animate or not on updating Options */ }, { key: "updateOptions", value: function updateOptions(options) { var _this3 = this; var redraw = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; var animate = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; var updateSyncedCharts = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true; var overwriteInitialConfig = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true; var w = this.w; if (options.series) { this.series.resetSeries(false, true, false); if (options.series.length && options.series[0].data) { options.series = options.series.map(function (s, i) { return _this3.updateHelpers._extendSeries(s, i); }); } // user updated the series via updateOptions() function. // Hence, we need to reset axis min/max to avoid zooming issues this.updateHelpers.revertDefaultAxisMinMax(); } // user has set x-axis min/max externally - hence we need to forcefully set the xaxis min/max if (options.xaxis) { options = this.updateHelpers.forceXAxisUpdate(options); } if (options.yaxis) { options = this.updateHelpers.forceYAxisUpdate(options); } if (w.globals.collapsedSeriesIndices.length > 0) { this.series.clearPreviousPaths(); } /* update theme mode#459 */ if (options.theme) { options = this.theme.updateThemeOptions(options); } return this.updateHelpers._updateOptions(options, redraw, animate, updateSyncedCharts, overwriteInitialConfig); } /** * Allows users to update Series after the chart has rendered. * * @param {array} series - New series which will override the existing */ }, { key: "updateSeries", value: function updateSeries() { var newSeries = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; var animate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; var overwriteInitialSeries = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; this.series.resetSeries(false); this.updateHelpers.revertDefaultAxisMinMax(); return this.updateHelpers._updateSeries(newSeries, animate, overwriteInitialSeries); } /** * Allows users to append a new series after the chart has rendered. * * @param {array} newSerie - New serie which will be appended to the existing series */ }, { key: "appendSeries", value: function appendSeries(newSerie) { var animate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; var overwriteInitialSeries = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; var newSeries = this.w.config.series.slice(); newSeries.push(newSerie); this.series.resetSeries(false); this.updateHelpers.revertDefaultAxisMinMax(); return this.updateHelpers._updateSeries(newSeries, animate, overwriteInitialSeries); } /** * Allows users to append Data to series. * * @param {array} newData - New data in the same format as series */ }, { key: "appendData", value: function appendData(newData) { var overwriteInitialSeries = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; var me = this; me.w.globals.dataChanged = true; me.series.getPreviousPaths(); var newSeries = me.w.config.series.slice(); for (var i = 0; i < newSeries.length; i++) { if (typeof newData[i] !== 'undefined') { for (var j = 0; j < newData[i].data.length; j++) { newSeries[i].data.push(newData[i].data[j]); } } } me.w.config.series = newSeries; if (overwriteInitialSeries) { me.w.globals.initialSeries = JSON.parse(JSON.stringify(me.w.config.series)); } return this.update(); } }, { key: "update", value: function update(options) { var _this4 = this; return new Promise(function (resolve, reject) { new Destroy(_this4.ctx).clear(); var graphData = _this4.create(_this4.w.config.series, options); if (!graphData) return resolve(_this4); _this4.mount(graphData).then(function () { if (typeof _this4.w.config.chart.events.updated === 'function') { _this4.w.config.chart.events.updated(_this4, _this4.w); } _this4.events.fireEvent('updated', [_this4, _this4.w]); _this4.w.globals.isDirty = true; resolve(_this4); }).catch(function (e) { reject(e); }); }); } /** * Get all charts in the same "group" (including the instance which is called upon) to sync them when user zooms in/out or pan. */ }, { key: "getSyncedCharts", value: function getSyncedCharts() { var chartGroups = this.getGroupedCharts(); var allCharts = [this]; if (chartGroups.length) { allCharts = []; chartGroups.forEach(function (ch) { allCharts.push(ch); }); } return allCharts; } /** * Get charts in the same "group" (excluding the instance which is called upon) to perform operations on the other charts of the same group (eg., tooltip hovering) */ }, { key: "getGroupedCharts", value: function getGroupedCharts() { var _this5 = this; return Apex._chartInstances.filter(function (ch) { if (ch.group) { return true; } }).map(function (ch) { return _this5.w.config.chart.group === ch.group ? ch.chart : _this5; }); } }, { key: "toggleSeries", value: function toggleSeries(seriesName) { return this.series.toggleSeries(seriesName); } }, { key: "showSeries", value: function showSeries(seriesName) { this.series.showSeries(seriesName); } }, { key: "hideSeries", value: function hideSeries(seriesName) { this.series.hideSeries(seriesName); } }, { key: "resetSeries", value: function resetSeries() { var shouldUpdateChart = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; this.series.resetSeries(shouldUpdateChart); } // Public method to add event listener on chart context }, { key: "addEventListener", value: function addEventListener(name, handler) { this.events.addEventListener(name, handler); } // Public method to remove event listener on chart context }, { key: "removeEventListener", value: function removeEventListener(name, handler) { this.events.removeEventListener(name, handler); } }, { key: "addXaxisAnnotation", value: function addXaxisAnnotation(opts) { var pushToMemory = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined; var me = this; if (context) { me = context; } me.annotations.addXaxisAnnotationExternal(opts, pushToMemory, me); } }, { key: "addYaxisAnnotation", value: function addYaxisAnnotation(opts) { var pushToMemory = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined; var me = this; if (context) { me = context; } me.annotations.addYaxisAnnotationExternal(opts, pushToMemory, me); } }, { key: "addPointAnnotation", value: function addPointAnnotation(opts) { var pushToMemory = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined; var me = this; if (context) { me = context; } me.annotations.addPointAnnotationExternal(opts, pushToMemory, me); } }, { key: "clearAnnotations", value: function clearAnnotations() { var context = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined; var me = this; if (context) { me = context; } me.annotations.clearAnnotations(me); } }, { key: "removeAnnotation", value: function removeAnnotation(id) { var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; var me = this; if (context) { me = context; } me.annotations.removeAnnotation(me, id); } }, { key: "getChartArea", value: function getChartArea() { var el = this.w.globals.dom.baseEl.querySelector('.apexcharts-inner'); return el; } }, { key: "getSeriesTotalXRange", value: function getSeriesTotalXRange(minX, maxX) { return this.coreUtils.getSeriesTotalsXRange(minX, maxX); } }, { key: "getHighestValueInSeries", value: function getHighestValueInSeries() { var seriesIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; var range = new Range$1(this.ctx); return range.getMinYMaxY(seriesIndex).highestY; } }, { key: "getLowestValueInSeries", value: function getLowestValueInSeries() { var seriesIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; var range = new Range$1(this.ctx); return range.getMinYMaxY(seriesIndex).lowestY; } }, { key: "getSeriesTotal", value: function getSeriesTotal() { return this.w.globals.seriesTotals; } }, { key: "toggleDataPointSelection", value: function toggleDataPointSelection(seriesIndex, dataPointIndex) { return this.updateHelpers.toggleDataPointSelection(seriesIndex, dataPointIndex); } }, { key: "setLocale", value: function setLocale(localeName) { this.localization.setCurrentLocaleValues(localeName); } }, { key: "dataURI", value: function dataURI() { var exp = new Exports(this.ctx); return exp.dataURI(); } }, { key: "paper", value: function paper() { return this.w.globals.dom.Paper; } }, { key: "_parentResizeCallback", value: function _parentResizeCallback() { if (!this.w.globals.noData && this.w.globals.animationEnded && this.w.config.chart.redrawOnParentResize) { this._windowResize(); } } /** * Handle window resize and re-draw the whole chart. */ }, { key: "_windowResize", value: function _windowResize() { var _this6 = this; clearTimeout(this.w.globals.resizeTimer); this.w.globals.resizeTimer = window.setTimeout(function () { _this6.w.globals.resized = true; _this6.w.globals.dataChanged = false; // we need to redraw the whole chart on window resize (with a small delay). _this6.ctx.update(); }, 150); } }], [{ key: "getChartByID", value: function getChartByID(chartID) { var c = Apex._chartInstances.filter(function (ch) { return ch.id === chartID; })[0]; return c && c.chart; } /** * Allows the user to provide data attrs in the element and the chart will render automatically when this method is called by searching for the elements containing 'data-apexcharts' attribute */ }, { key: "initOnLoad", value: function initOnLoad() { var els = document.querySelectorAll('[data-apexcharts]'); for (var i = 0; i < els.length; i++) { var el = els[i]; var options = JSON.parse(els[i].getAttribute('data-options')); var apexChart = new ApexCharts(el, options); apexChart.render(); } } /** * This static method allows users to call chart methods without necessarily from the * instance of the chart in case user has assigned chartID to the targetted chart. * The chartID is used for mapping the instance stored in Apex._chartInstances global variable * * This is helpful in cases when you don't have reference of the chart instance * easily and need to call the method from anywhere. * For eg, in React/Vue applications when you have many parent/child components, * and need easy reference to other charts for performing dynamic operations * * @param {string} chartID - The unique identifier which will be used to call methods * on that chart instance * @param {function} fn - The method name to call * @param {object} opts - The parameters which are accepted in the original method will be passed here in the same order. */ }, { key: "exec", value: function exec(chartID, fn) { var chart = this.getChartByID(chartID); if (!chart) return; // turn on the global exec flag to indicate this method was called chart.w.globals.isExecCalled = true; var ret = null; if (chart.publicMethods.indexOf(fn) !== -1) { for (var _len = arguments.length, opts = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) { opts[_key - 2] = arguments[_key]; } ret = chart[fn].apply(chart, opts); } return ret; } }, { key: "merge", value: function merge(target, source) { return Utils.extend(target, source); } }]); return ApexCharts; }(); return ApexCharts$1; }))); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/Gulpfile.js ================================================ "use strict"; var os = require("os"); var gulp = require("gulp"); var gutil = require("gulp-util"); var sass = require("gulp-ruby-sass"); var jshint = require("gulp-jshint"); var uglify = require("gulp-uglifyjs"); var rename = require("gulp-rename"); var concat = require("gulp-concat"); var notify = require("gulp-notify"); var header = require("gulp-header"); var minifycss = require("gulp-minify-css"); //var jsdoc = require("gulp-jsdoc"); //var jsdoc2md = require("gulp-jsdoc-to-markdown"); var pkg = require("./package.json"); var dateFormat = require("dateformatter").format; var replace = require("gulp-replace"); pkg.name = "Editor.md"; pkg.today = dateFormat; var headerComment = ["/*", " * <%= pkg.name %>", " *", " * @file <%= fileName(file) %> ", " * @version v<%= pkg.version %> ", " * @description <%= pkg.description %>", " * @license MIT License", " * @author <%= pkg.author %>", " * {@link <%= pkg.homepage %>}", " * @updateTime <%= pkg.today('Y-m-d') %>", " */", "\r\n"].join("\r\n"); var headerMiniComment = "/*! <%= pkg.name %> v<%= pkg.version %> | <%= fileName(file) %> | <%= pkg.description %> | MIT License | By: <%= pkg.author %> | <%= pkg.homepage %> | <%=pkg.today('Y-m-d') %> */\r\n"; var scssTask = function(fileName, path) { path = path || "scss/"; var distPath = "css"; return sass(path + fileName + ".scss", { style: "expanded", sourcemap: false, noCache : true }) .pipe(gulp.dest(distPath)) .pipe(header(headerComment, {pkg : pkg, fileName : function(file) { var name = file.path.split(file.base); return name[1].replace("\\", ""); }})) .pipe(gulp.dest(distPath)) .pipe(rename({ suffix: ".min" })) .pipe(gulp.dest(distPath)) .pipe(minifycss()) .pipe(gulp.dest(distPath)) .pipe(header(headerMiniComment, {pkg : pkg, fileName : function(file) { var name = file.path.split(file.base); return name[1].replace("\\", ""); }})) .pipe(gulp.dest(distPath)) .pipe(notify({ message: fileName + ".scss task completed!" })); }; gulp.task("scss", function() { return scssTask("editormd"); }); gulp.task("scss2", function() { return scssTask("editormd.preview"); }); gulp.task("scss3", function() { return scssTask("editormd.logo"); }); gulp.task("js", function() { return gulp.src("./src/editormd.js") .pipe(jshint("./.jshintrc")) .pipe(jshint.reporter("default")) .pipe(header(headerComment, {pkg : pkg, fileName : function(file) { var name = file.path.split(file.base); return name[1].replace(/[\\\/]?/, ""); }})) .pipe(gulp.dest("./")) .pipe(rename({ suffix: ".min" })) .pipe(uglify()) // {outSourceMap: true, sourceRoot: './'} .pipe(gulp.dest("./")) .pipe(header(headerMiniComment, {pkg : pkg, fileName : function(file) { var name = file.path.split(file.base + ( (os.platform() === "win32") ? "\\" : "/") ); return name[1].replace(/[\\\/]?/, ""); }})) .pipe(gulp.dest("./")) .pipe(notify({ message: "editormd.js task complete" })); }); gulp.task("amd", function() { var replaceText1 = [ 'var cmModePath = "codemirror/mode/";', ' var cmAddonPath = "codemirror/addon/";', '', ' var codeMirrorModules = [', ' "jquery", "marked", "prettify",', ' "katex", "raphael", "underscore", "flowchart", "jqueryflowchart", "sequenceDiagram",', '', ' "codemirror/lib/codemirror",', ' cmModePath + "css/css",', ' cmModePath + "sass/sass",', ' cmModePath + "shell/shell",', ' cmModePath + "sql/sql",', ' cmModePath + "clike/clike",', ' cmModePath + "php/php",', ' cmModePath + "xml/xml",', ' cmModePath + "markdown/markdown",', ' cmModePath + "javascript/javascript",', ' cmModePath + "htmlmixed/htmlmixed",', ' cmModePath + "gfm/gfm",', ' cmModePath + "http/http",', ' cmModePath + "go/go",', ' cmModePath + "dart/dart",', ' cmModePath + "coffeescript/coffeescript",', ' cmModePath + "nginx/nginx",', ' cmModePath + "python/python",', ' cmModePath + "perl/perl",', ' cmModePath + "lua/lua",', ' cmModePath + "r/r", ', ' cmModePath + "ruby/ruby", ', ' cmModePath + "rst/rst",', ' cmModePath + "smartymixed/smartymixed",', ' cmModePath + "vb/vb",', ' cmModePath + "vbscript/vbscript",', ' cmModePath + "velocity/velocity",', ' cmModePath + "xquery/xquery",', ' cmModePath + "yaml/yaml",', ' cmModePath + "erlang/erlang",', ' cmModePath + "jade/jade",', '', ' cmAddonPath + "edit/trailingspace", ', ' cmAddonPath + "dialog/dialog", ', ' cmAddonPath + "search/searchcursor", ', ' cmAddonPath + "search/search", ', ' cmAddonPath + "scroll/annotatescrollbar", ', ' cmAddonPath + "search/matchesonscrollbar", ', ' cmAddonPath + "display/placeholder", ', ' cmAddonPath + "edit/closetag", ', ' cmAddonPath + "fold/foldcode",', ' cmAddonPath + "fold/foldgutter",', ' cmAddonPath + "fold/indent-fold",', ' cmAddonPath + "fold/brace-fold",', ' cmAddonPath + "fold/xml-fold", ', ' cmAddonPath + "fold/markdown-fold",', ' cmAddonPath + "fold/comment-fold", ', ' cmAddonPath + "mode/overlay", ', ' cmAddonPath + "selection/active-line", ', ' cmAddonPath + "edit/closebrackets", ', ' cmAddonPath + "display/fullscreen",', ' cmAddonPath + "search/match-highlighter"', ' ];', '', ' define(codeMirrorModules, factory);' ].join("\r\n"); var replaceText2 = [ "if (typeof define == \"function\" && define.amd) {", " $ = arguments[0];", " marked = arguments[1];", " prettify = arguments[2];", " katex = arguments[3];", " Raphael = arguments[4];", " _ = arguments[5];", " flowchart = arguments[6];", " CodeMirror = arguments[9];", " }" ].join("\r\n"); gulp.src("src/editormd.js") .pipe(rename({ suffix: ".amd" })) .pipe(gulp.dest('./')) .pipe(header(headerComment, {pkg : pkg, fileName : function(file) { var name = file.path.split(file.base); return name[1].replace(/[\\\/]?/, ""); }})) .pipe(gulp.dest("./")) .pipe(replace("/* Require.js define replace */", replaceText1)) .pipe(gulp.dest('./')) .pipe(replace("/* Require.js assignment replace */", replaceText2)) .pipe(gulp.dest('./')) .pipe(rename({ suffix: ".min" })) .pipe(uglify()) //{outSourceMap: true, sourceRoot: './'} .pipe(gulp.dest("./")) .pipe(header(headerMiniComment, {pkg : pkg, fileName : function(file) { var name = file.path.split(file.base + ( (os.platform() === "win32") ? "\\" : "/") ); return name[1].replace(/[\\\/]?/, ""); }})) .pipe(gulp.dest("./")) .pipe(notify({ message: "amd version task complete"})); }); var codeMirror = { path : { src : { mode : "lib/codemirror/mode", addon : "lib/codemirror/addon" }, dist : "lib/codemirror" }, modes : [ "css", "sass", "shell", "sql", "clike", "php", "xml", "markdown", "javascript", "htmlmixed", "gfm", "http", "go", "dart", "coffeescript", "nginx", "python", "perl", "lua", "r", "ruby", "rst", "smartymixed", "vb", "vbscript", "velocity", "xquery", "yaml", "erlang", "jade", ], addons : [ "edit/trailingspace", "dialog/dialog", "search/searchcursor", "search/search", "scroll/annotatescrollbar", "search/matchesonscrollbar", "display/placeholder", "edit/closetag", "fold/foldcode", "fold/foldgutter", "fold/indent-fold", "fold/brace-fold", "fold/xml-fold", "fold/markdown-fold", "fold/comment-fold", "mode/overlay", "selection/active-line", "edit/closebrackets", "display/fullscreen", "search/match-highlighter" ] }; gulp.task("cm-mode", function() { var modes = [ codeMirror.path.src.mode + "/meta.js" ]; for(var i in codeMirror.modes) { var mode = codeMirror.modes[i]; modes.push(codeMirror.path.src.mode + "/" + mode + "/" + mode + ".js"); } return gulp.src(modes) .pipe(concat("modes.min.js")) .pipe(gulp.dest(codeMirror.path.dist)) .pipe(uglify()) // {outSourceMap: true, sourceRoot: codeMirror.path.dist} .pipe(gulp.dest(codeMirror.path.dist)) .pipe(header(headerMiniComment, {pkg : pkg, fileName : function(file) { var name = file.path.split(file.base + "\\"); return (name[1]?name[1]:name[0]).replace(/\\/g, ""); }})) .pipe(gulp.dest(codeMirror.path.dist)) .pipe(notify({ message: "codemirror-mode task complete!" })); }); gulp.task("cm-addon", function() { var addons = []; for(var i in codeMirror.addons) { var addon = codeMirror.addons[i]; addons.push(codeMirror.path.src.addon + "/" + addon + ".js"); } return gulp.src(addons) .pipe(concat("addons.min.js")) .pipe(gulp.dest(codeMirror.path.dist)) .pipe(uglify()) //{outSourceMap: true, sourceRoot: codeMirror.path.dist} .pipe(gulp.dest(codeMirror.path.dist)) .pipe(header(headerMiniComment, {pkg : pkg, fileName : function(file) { var name = file.path.split(file.base + "\\"); return (name[1]?name[1]:name[0]).replace(/\\/g, ""); }})) .pipe(gulp.dest(codeMirror.path.dist)) .pipe(notify({ message: "codemirror-addon.js task complete" })); }); /* gulp.task("jsdoc", function(){ return gulp.src(["./src/editormd.js", "README.md"]) .pipe(jsdoc.parser()) .pipe(jsdoc.generator("./docs/html")); }); gulp.task("jsdoc2md", function() { return gulp.src("src/js/editormd.js") .pipe(jsdoc2md()) .on("error", function(err){ gutil.log(gutil.colors.red("jsdoc2md failed"), err.message); }) .pipe(rename(function(path) { path.extname = ".md"; })) .pipe(gulp.dest("docs/markdown")); }); */ gulp.task("watch", function() { gulp.watch("scss/editormd.scss", ["scss"]); gulp.watch("scss/editormd.preview.scss", ["scss", "scss2"]); gulp.watch("scss/editormd.logo.scss", ["scss", "scss3"]); gulp.watch("src/editormd.js", ["js", "amd"]); }); gulp.task("default", function() { gulp.run("scss"); gulp.run("scss2"); gulp.run("scss3"); gulp.run("js"); gulp.run("amd"); gulp.run("cm-addon"); gulp.run("cm-mode"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/LICENSE ================================================ The MIT License (MIT) Copyright (c) 2015 pandao 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: public/vendor/dcat-admin/dcat/plugins/editor-md/README.md ================================================ # Editor.md ![](https://pandao.github.io/editor.md/images/logos/editormd-logo-180x180.png) ![](https://img.shields.io/github/stars/pandao/editor.md.svg) ![](https://img.shields.io/github/forks/pandao/editor.md.svg) ![](https://img.shields.io/github/tag/pandao/editor.md.svg) ![](https://img.shields.io/github/release/pandao/editor.md.svg) ![](https://img.shields.io/github/issues/pandao/editor.md.svg) ![](https://img.shields.io/bower/v/editor.md.svg) **Editor.md** : The open source embeddable online markdown editor (component), based on CodeMirror & jQuery & Marked. ### Features - Support Standard Markdown / CommonMark and GFM (GitHub Flavored Markdown); - Full-featured: Real-time Preview, Image (cross-domain) upload, Preformatted text/Code blocks/Tables insert, Code fold, Search replace, Read only, Themes, Multi-languages, L18n, HTML entities, Code syntax highlighting...; - Markdown Extras : Support [ToC (Table of Contents)](https://pandao.github.io/editor.md/examples/toc.html), [Emoji](https://pandao.github.io/editor.md/examples/emoji.html), [Task lists](https://pandao.github.io/editor.md/examples/task-lists.html), [@Links](https://pandao.github.io/editor.md/examples/@links.html)...; - Compatible with all major browsers (IE8+), compatible Zepto.js and iPad; - Support [decode & fliter of the HTML tags & attributes](https://pandao.github.io/editor.md/examples/html-tags-decode.html); - Support [TeX (LaTeX expressions, Based on KaTeX)](https://pandao.github.io/editor.md/examples/katex.html), [Flowchart](https://pandao.github.io/editor.md/examples/flowchart.html) and [Sequence Diagram](https://pandao.github.io/editor.md/examples/sequence-diagram.html) of Markdown extended syntax; - Support AMD/CMD (Require.js & Sea.js) Module Loader, and Custom/define editor plugins; [README & Examples (English)](https://pandao.github.io/editor.md/en.html) -------- **Editor.md** 是一款开源的、可嵌入的 Markdown 在线编辑器(组件),基于 CodeMirror、jQuery 和 Marked 构建。 ![editormd-screenshot](https://pandao.github.io/editor.md/examples/images/editormd-screenshot.png "editormd-screenshot") #### 主要特性 - 支持通用 Markdown / CommonMark 和 GFM (GitHub Flavored Markdown) 风格的语法,也可[变身为代码编辑器](https://pandao.github.io/editor.md/examples/change-mode.html); - 支持实时预览、图片(跨域)上传、预格式文本/代码/表格插入、代码折叠、跳转到行、搜索替换、只读模式、自定义样式主题和多语言语法高亮等功能; - 支持 [ToC(Table of Contents)](https://pandao.github.io/editor.md/examples/toc.html)、[Emoji表情](https://pandao.github.io/editor.md/examples/emoji.html)、[Task lists](https://pandao.github.io/editor.md/examples/task-lists.html)、[@链接](https://pandao.github.io/editor.md/examples/@links.html)等 Markdown 扩展语法; - 支持 TeX 科学公式(基于 [KaTeX](https://pandao.github.io/editor.md/examples/katex.html))、流程图 [Flowchart](https://pandao.github.io/editor.md/examples/flowchart.html) 和 [时序图 Sequence Diagram](https://pandao.github.io/editor.md/examples/sequence-diagram.html); - 支持[识别和解析 HTML 标签,并且支持自定义过滤标签及属性解析](https://pandao.github.io/editor.md/examples/html-tags-decode.html),具有可靠的安全性和几乎无限的扩展性; - 支持 AMD / CMD 模块化加载(支持 [Require.js](https://pandao.github.io/editor.md/examples/use-requirejs.html) & [Sea.js](https://pandao.github.io/editor.md/examples/use-seajs.html)),并且支持[自定义扩展插件](https://pandao.github.io/editor.md/examples/define-plugin.html); - 兼容主流的浏览器(IE8+)和 [Zepto.js](https://pandao.github.io/editor.md/examples/use-zepto.html),且支持 iPad 等平板设备; #### Examples [https://pandao.github.io/editor.md/examples/index.html](https://pandao.github.io/editor.md/examples/index.html) #### Download & install [Github download](https://github.com/pandao/editor.md/archive/master.zip) Bower install : ```shell bower install editor.md ``` #### Usages HTML: ```html
          ``` > Tip: Editor.md can auto append `"); markdownTextarea = this.markdownTextarea = editor.children("textarea"); } markdownTextarea.addClass(classNames.textarea.markdown).attr("placeholder", settings.placeholder); if (typeof markdownTextarea.attr("name") === "undefined" || markdownTextarea.attr("name") === "") { markdownTextarea.attr("name", (settings.name !== "") ? settings.name : id + "-markdown-doc"); } var appendElements = [ (!settings.readOnly) ? "" : "", ( (settings.saveHTMLToTextarea) ? "" : "" ), "
          ", "
          ", "
          " ].join("\n"); editor.append(appendElements).addClass(classPrefix + "vertical"); if (settings.theme !== "") { editor.addClass(classPrefix + "theme-" + settings.theme); } this.mask = editor.children("." + classPrefix + "mask"); this.containerMask = editor.children("." + classPrefix + "container-mask"); if (settings.markdown !== "") { markdownTextarea.val(settings.markdown); } if (settings.appendMarkdown !== "") { markdownTextarea.val(markdownTextarea.val() + settings.appendMarkdown); } this.htmlTextarea = editor.children("." + classNames.textarea.html); this.preview = editor.children("." + classPrefix + "preview"); this.previewContainer = this.preview.children("." + classPrefix + "preview-container"); if (settings.previewTheme !== "") { this.preview.addClass(classPrefix + "preview-theme-" + settings.previewTheme); } if (typeof define === "function" && define.amd) { if (typeof katex !== "undefined") { editormd.$katex = katex; } if (settings.searchReplace && !settings.readOnly) { editormd.loadCSS(settings.path + "codemirror/addon/dialog/dialog"); editormd.loadCSS(settings.path + "codemirror/addon/search/matchesonscrollbar"); } } if ((typeof define === "function" && define.amd) || !settings.autoLoadModules) { if (typeof CodeMirror !== "undefined") { editormd.$CodeMirror = CodeMirror; } if (typeof marked !== "undefined") { editormd.$marked = marked; } this.setCodeMirror().setToolbar().loadedDisplay(); } else { this.loadQueues(); } return this; }, /** * 所需组件加载队列 * Required components loading queue * * @returns {editormd} 返回editormd的实例对象 */ loadQueues : function() { var _this = this; var settings = this.settings; var loadPath = settings.path; var loadFlowChartOrSequenceDiagram = function() { if (editormd.isIE8) { _this.loadedDisplay(); return ; } if (settings.flowChart || settings.sequenceDiagram) { editormd.loadScript(loadPath + "raphael.min", function() { editormd.loadScript(loadPath + "underscore.min", function() { if (!settings.flowChart && settings.sequenceDiagram) { editormd.loadScript(loadPath + "sequence-diagram.min", function() { _this.loadedDisplay(); }); } else if (settings.flowChart && !settings.sequenceDiagram) { editormd.loadScript(loadPath + "flowchart.min", function() { editormd.loadScript(loadPath + "jquery.flowchart.min", function() { _this.loadedDisplay(); }); }); } else if (settings.flowChart && settings.sequenceDiagram) { editormd.loadScript(loadPath + "flowchart.min", function() { editormd.loadScript(loadPath + "jquery.flowchart.min", function() { editormd.loadScript(loadPath + "sequence-diagram.min", function() { _this.loadedDisplay(); }); }); }); } }); }); } else { _this.loadedDisplay(); } }; editormd.loadCSS(loadPath + "codemirror/codemirror.min"); if (settings.searchReplace && !settings.readOnly) { editormd.loadCSS(loadPath + "codemirror/addon/dialog/dialog"); editormd.loadCSS(loadPath + "codemirror/addon/search/matchesonscrollbar"); } if (settings.codeFold) { editormd.loadCSS(loadPath + "codemirror/addon/fold/foldgutter"); } editormd.loadScript(loadPath + "codemirror/codemirror.min", function() { editormd.$CodeMirror = CodeMirror; editormd.loadScript(loadPath + "codemirror/modes.min", function() { editormd.loadScript(loadPath + "codemirror/addons.min", function() { _this.setCodeMirror(); if (settings.mode !== "gfm" && settings.mode !== "markdown") { _this.loadedDisplay(); return false; } _this.setToolbar(); editormd.loadScript(loadPath + "marked.min", function() { editormd.$marked = marked; if (settings.previewCodeHighlight) { editormd.loadScript(loadPath + "prettify.min", function() { loadFlowChartOrSequenceDiagram(); }); } else { loadFlowChartOrSequenceDiagram(); } }); }); }); }); return this; }, /** * 设置 Editor.md 的整体主题,主要是工具栏 * Setting Editor.md theme * * @returns {editormd} 返回editormd的实例对象 */ setTheme : function(theme) { var editor = this.editor; var oldTheme = this.settings.theme; var themePrefix = this.classPrefix + "theme-"; editor.removeClass(themePrefix + oldTheme).addClass(themePrefix + theme); this.settings.theme = theme; return this; }, /** * 设置 CodeMirror(编辑区)的主题 * Setting CodeMirror (Editor area) theme * * @returns {editormd} 返回editormd的实例对象 */ setEditorTheme : function(theme) { var settings = this.settings; settings.editorTheme = theme; if (theme !== "default") { editormd.loadCSS(settings.path + "codemirror/theme/" + settings.editorTheme); } this.cm.setOption("theme", theme); return this; }, /** * setEditorTheme() 的别名 * setEditorTheme() alias * * @returns {editormd} 返回editormd的实例对象 */ setCodeMirrorTheme : function (theme) { this.setEditorTheme(theme); return this; }, /** * 设置 Editor.md 的主题 * Setting Editor.md theme * * @returns {editormd} 返回editormd的实例对象 */ setPreviewTheme : function(theme) { var preview = this.preview; var oldTheme = this.settings.previewTheme; var themePrefix = this.classPrefix + "preview-theme-"; preview.removeClass(themePrefix + oldTheme).addClass(themePrefix + theme); this.settings.previewTheme = theme; return this; }, /** * 配置和初始化CodeMirror组件 * CodeMirror initialization * * @returns {editormd} 返回editormd的实例对象 */ setCodeMirror : function() { var settings = this.settings; var editor = this.editor; if (settings.editorTheme !== "default") { editormd.loadCSS(settings.path + "codemirror/theme/" + settings.editorTheme); } var codeMirrorConfig = { mode : settings.mode, theme : settings.editorTheme, tabSize : settings.tabSize, dragDrop : false, autofocus : settings.autoFocus, autoCloseTags : settings.autoCloseTags, readOnly : (settings.readOnly) ? "nocursor" : false, indentUnit : settings.indentUnit, lineNumbers : settings.lineNumbers, lineWrapping : settings.lineWrapping, extraKeys : { "Ctrl-Q": function(cm) { cm.foldCode(cm.getCursor()); } }, foldGutter : settings.codeFold, gutters : ["CodeMirror-linenumbers", "CodeMirror-foldgutter"], matchBrackets : settings.matchBrackets, indentWithTabs : settings.indentWithTabs, styleActiveLine : settings.styleActiveLine, styleSelectedText : settings.styleSelectedText, autoCloseBrackets : settings.autoCloseBrackets, showTrailingSpace : settings.showTrailingSpace, highlightSelectionMatches : ( (!settings.matchWordHighlight) ? false : { showToken: (settings.matchWordHighlight === "onselected") ? false : /\w/ } ) }; this.codeEditor = this.cm = editormd.$CodeMirror.fromTextArea(this.markdownTextarea[0], codeMirrorConfig); this.codeMirror = this.cmElement = editor.children(".CodeMirror"); if (settings.value !== "") { this.cm.setValue(settings.value); } this.codeMirror.css({ fontSize : settings.fontSize, width : (!settings.watch) ? "100%" : "50%" }); if (settings.autoHeight) { this.codeMirror.css("height", "auto"); this.cm.setOption("viewportMargin", Infinity); } if (!settings.lineNumbers) { this.codeMirror.find(".CodeMirror-gutters").css("border-right", "none"); } return this; }, /** * 获取CodeMirror的配置选项 * Get CodeMirror setting options * * @returns {Mixed} return CodeMirror setting option value */ getCodeMirrorOption : function(key) { return this.cm.getOption(key); }, /** * 配置和重配置CodeMirror的选项 * CodeMirror setting options / resettings * * @returns {editormd} 返回editormd的实例对象 */ setCodeMirrorOption : function(key, value) { this.cm.setOption(key, value); return this; }, /** * 添加 CodeMirror 键盘快捷键 * Add CodeMirror keyboard shortcuts key map * * @returns {editormd} 返回editormd的实例对象 */ addKeyMap : function(map, bottom) { this.cm.addKeyMap(map, bottom); return this; }, /** * 移除 CodeMirror 键盘快捷键 * Remove CodeMirror keyboard shortcuts key map * * @returns {editormd} 返回editormd的实例对象 */ removeKeyMap : function(map) { this.cm.removeKeyMap(map); return this; }, /** * 跳转到指定的行 * Goto CodeMirror line * * @param {String|Intiger} line line number or "first"|"last" * @returns {editormd} 返回editormd的实例对象 */ gotoLine : function (line) { var settings = this.settings; if (!settings.gotoLine) { return this; } var cm = this.cm; var editor = this.editor; var count = cm.lineCount(); var preview = this.preview; if (typeof line === "string") { if(line === "last") { line = count; } if (line === "first") { line = 1; } } if (typeof line !== "number") { alert("Error: The line number must be an integer."); return this; } line = parseInt(line) - 1; if (line > count) { alert("Error: The line number range 1-" + count); return this; } cm.setCursor( {line : line, ch : 0} ); var scrollInfo = cm.getScrollInfo(); var clientHeight = scrollInfo.clientHeight; var coords = cm.charCoords({line : line, ch : 0}, "local"); cm.scrollTo(null, (coords.top + coords.bottom - clientHeight) / 2); if (settings.watch) { var cmScroll = this.codeMirror.find(".CodeMirror-scroll")[0]; var height = $(cmScroll).height(); var scrollTop = cmScroll.scrollTop; var percent = (scrollTop / cmScroll.scrollHeight); if (scrollTop === 0) { preview.scrollTop(0); } else if (scrollTop + height >= cmScroll.scrollHeight - 16) { preview.scrollTop(preview[0].scrollHeight); } else { preview.scrollTop(preview[0].scrollHeight * percent); } } cm.focus(); return this; }, /** * 扩展当前实例对象,可同时设置多个或者只设置一个 * Extend editormd instance object, can mutil setting. * * @returns {editormd} this(editormd instance object.) */ extend : function() { if (typeof arguments[1] !== "undefined") { if (typeof arguments[1] === "function") { arguments[1] = $.proxy(arguments[1], this); } this[arguments[0]] = arguments[1]; } if (typeof arguments[0] === "object" && typeof arguments[0].length === "undefined") { $.extend(true, this, arguments[0]); } return this; }, /** * 设置或扩展当前实例对象,单个设置 * Extend editormd instance object, one by one * * @param {String|Object} key option key * @param {String|Object} value option value * @returns {editormd} this(editormd instance object.) */ set : function (key, value) { if (typeof value !== "undefined" && typeof value === "function") { value = $.proxy(value, this); } this[key] = value; return this; }, /** * 重新配置 * Resetting editor options * * @param {String|Object} key option key * @param {String|Object} value option value * @returns {editormd} this(editormd instance object.) */ config : function(key, value) { var settings = this.settings; if (typeof key === "object") { settings = $.extend(true, settings, key); } if (typeof key === "string") { settings[key] = value; } this.settings = settings; this.recreate(); return this; }, /** * 注册事件处理方法 * Bind editor event handle * * @param {String} eventType event type * @param {Function} callback 回调函数 * @returns {editormd} this(editormd instance object.) */ on : function(eventType, callback) { var settings = this.settings; if (typeof settings["on" + eventType] !== "undefined") { settings["on" + eventType] = $.proxy(callback, this); } return this; }, /** * 解除事件处理方法 * Unbind editor event handle * * @param {String} eventType event type * @returns {editormd} this(editormd instance object.) */ off : function(eventType) { var settings = this.settings; if (typeof settings["on" + eventType] !== "undefined") { settings["on" + eventType] = function(){}; } return this; }, /** * 显示工具栏 * Display toolbar * * @param {Function} [callback=function(){}] 回调函数 * @returns {editormd} 返回editormd的实例对象 */ showToolbar : function(callback) { var settings = this.settings; if(settings.readOnly) { return this; } if (settings.toolbar && (this.toolbar.length < 1 || this.toolbar.find("." + this.classPrefix + "menu").html() === "") ) { this.setToolbar(); } settings.toolbar = true; this.toolbar.show(); this.resize(); $.proxy(callback || function(){}, this)(); return this; }, /** * 隐藏工具栏 * Hide toolbar * * @param {Function} [callback=function(){}] 回调函数 * @returns {editormd} this(editormd instance object.) */ hideToolbar : function(callback) { var settings = this.settings; settings.toolbar = false; this.toolbar.hide(); this.resize(); $.proxy(callback || function(){}, this)(); return this; }, /** * 页面滚动时工具栏的固定定位 * Set toolbar in window scroll auto fixed position * * @returns {editormd} 返回editormd的实例对象 */ setToolbarAutoFixed : function(fixed) { var state = this.state; var editor = this.editor; var toolbar = this.toolbar; var settings = this.settings; if (typeof fixed !== "undefined") { settings.toolbarAutoFixed = fixed; } var autoFixedHandle = function(){ var $window = $(window); var top = $window.scrollTop(); if (!settings.toolbarAutoFixed) { return false; } if (top - editor.offset().top > 10 && top < editor.height()) { toolbar.css({ position : "fixed", width : editor.width() + "px", left : ($window.width() - editor.width()) / 2 + "px" }); } else { toolbar.css({ position : "absolute", width : "100%", left : 0 }); } }; if (!state.fullscreen && !state.preview && settings.toolbar && settings.toolbarAutoFixed) { $(window).bind("scroll", autoFixedHandle); } return this; }, /** * 配置和初始化工具栏 * Set toolbar and Initialization * * @returns {editormd} 返回editormd的实例对象 */ setToolbar : function() { var settings = this.settings; if(settings.readOnly) { return this; } var editor = this.editor; var preview = this.preview; var classPrefix = this.classPrefix; var toolbar = this.toolbar = editor.children("." + classPrefix + "toolbar"); if (settings.toolbar && toolbar.length < 1) { var toolbarHTML = "
            "; editor.append(toolbarHTML); toolbar = this.toolbar = editor.children("." + classPrefix + "toolbar"); } if (!settings.toolbar) { toolbar.hide(); return this; } toolbar.show(); var icons = (typeof settings.toolbarIcons === "function") ? settings.toolbarIcons() : ((typeof settings.toolbarIcons === "string") ? editormd.toolbarModes[settings.toolbarIcons] : settings.toolbarIcons); var toolbarMenu = toolbar.find("." + this.classPrefix + "menu"), menu = ""; var pullRight = false; for (var i = 0, len = icons.length; i < len; i++) { var name = icons[i]; if (name === "||") { pullRight = true; } else if (name === "|") { menu += "
          • |
          • "; } else { var isHeader = (/h(\d)/.test(name)); var index = name; if (name === "watch" && !settings.watch) { index = "unwatch"; } var title = settings.lang.toolbar[index]; var iconTexts = settings.toolbarIconTexts[index]; var iconClass = settings.toolbarIconsClass[index]; title = (typeof title === "undefined") ? "" : title; iconTexts = (typeof iconTexts === "undefined") ? "" : iconTexts; iconClass = (typeof iconClass === "undefined") ? "" : iconClass; var menuItem = pullRight ? "
          • " : "
          • "; if (typeof settings.toolbarCustomIcons[name] !== "undefined" && typeof settings.toolbarCustomIcons[name] !== "function") { menuItem += settings.toolbarCustomIcons[name]; } else { menuItem += ""; menuItem += ""+((isHeader) ? name.toUpperCase() : ( (iconClass === "") ? iconTexts : "") ) + ""; menuItem += ""; } menuItem += "
          • "; menu = pullRight ? menuItem + menu : menu + menuItem; } } toolbarMenu.html(menu); toolbarMenu.find("[title=\"Lowercase\"]").attr("title", settings.lang.toolbar.lowercase); toolbarMenu.find("[title=\"ucwords\"]").attr("title", settings.lang.toolbar.ucwords); this.setToolbarHandler(); this.setToolbarAutoFixed(); return this; }, /** * 工具栏图标事件处理对象序列 * Get toolbar icons event handlers * * @param {Object} cm CodeMirror的实例对象 * @param {String} name 要获取的事件处理器名称 * @returns {Object} 返回处理对象序列 */ dialogLockScreen : function() { $.proxy(editormd.dialogLockScreen, this)(); return this; }, dialogShowMask : function(dialog) { $.proxy(editormd.dialogShowMask, this)(dialog); return this; }, getToolbarHandles : function(name) { var toolbarHandlers = this.toolbarHandlers = editormd.toolbarHandlers; return (name && typeof toolbarIconHandlers[name] !== "undefined") ? toolbarHandlers[name] : toolbarHandlers; }, /** * 工具栏图标事件处理器 * Bind toolbar icons event handle * * @returns {editormd} 返回editormd的实例对象 */ setToolbarHandler : function() { var _this = this; var settings = this.settings; if (!settings.toolbar || settings.readOnly) { return this; } var toolbar = this.toolbar; var cm = this.cm; var classPrefix = this.classPrefix; var toolbarIcons = this.toolbarIcons = toolbar.find("." + classPrefix + "menu > li > a"); var toolbarIconHandlers = this.getToolbarHandles(); toolbarIcons.bind(editormd.mouseOrTouch("click", "touchend"), function(event) { var icon = $(this).children(".fa"); var name = icon.attr("name"); var cursor = cm.getCursor(); var selection = cm.getSelection(); if (name === "") { return ; } _this.activeIcon = icon; if (typeof toolbarIconHandlers[name] !== "undefined") { $.proxy(toolbarIconHandlers[name], _this)(cm); } else { if (typeof settings.toolbarHandlers[name] !== "undefined") { $.proxy(settings.toolbarHandlers[name], _this)(cm, icon, cursor, selection); } } if (name !== "link" && name !== "reference-link" && name !== "image" && name !== "code-block" && name !== "preformatted-text" && name !== "watch" && name !== "preview" && name !== "search" && name !== "fullscreen" && name !== "info") { cm.focus(); } return false; }); return this; }, /** * 动态创建对话框 * Creating custom dialogs * * @param {Object} options 配置项键值对 Key/Value * @returns {dialog} 返回创建的dialog的jQuery实例对象 */ createDialog : function(options) { return $.proxy(editormd.createDialog, this)(options); }, /** * 创建关于Editor.md的对话框 * Create about Editor.md dialog * * @returns {editormd} 返回editormd的实例对象 */ createInfoDialog : function() { var _this = this; var editor = this.editor; var classPrefix = this.classPrefix; var infoDialogHTML = [ "
            ", "
            ", "

            " + editormd.title + "v" + editormd.version + "

            ", "

            " + this.lang.description + "

            ", "

            " + editormd.homePage + "

            ", "

            Copyright © 2015 Pandao, The MIT License.

            ", "
            ", "", "
            " ].join("\n"); editor.append(infoDialogHTML); var infoDialog = this.infoDialog = editor.children("." + classPrefix + "dialog-info"); infoDialog.find("." + classPrefix + "dialog-close").bind(editormd.mouseOrTouch("click", "touchend"), function() { _this.hideInfoDialog(); }); infoDialog.css("border", (editormd.isIE8) ? "1px solid #ddd" : "").css("z-index", editormd.dialogZindex).show(); this.infoDialogPosition(); return this; }, /** * 关于Editor.md对话居中定位 * Editor.md dialog position handle * * @returns {editormd} 返回editormd的实例对象 */ infoDialogPosition : function() { var infoDialog = this.infoDialog; var _infoDialogPosition = function() { infoDialog.css({ top : ($(window).height() - infoDialog.height()) / 2 + "px", left : ($(window).width() - infoDialog.width()) / 2 + "px" }); }; _infoDialogPosition(); $(window).resize(_infoDialogPosition); return this; }, /** * 显示关于Editor.md * Display about Editor.md dialog * * @returns {editormd} 返回editormd的实例对象 */ showInfoDialog : function() { $("html,body").css("overflow-x", "hidden"); var _this = this; var editor = this.editor; var settings = this.settings; var infoDialog = this.infoDialog = editor.children("." + this.classPrefix + "dialog-info"); if (infoDialog.length < 1) { this.createInfoDialog(); } this.lockScreen(true); this.mask.css({ opacity : settings.dialogMaskOpacity, backgroundColor : settings.dialogMaskBgColor }).show(); infoDialog.css("z-index", editormd.dialogZindex).show(); this.infoDialogPosition(); return this; }, /** * 隐藏关于Editor.md * Hide about Editor.md dialog * * @returns {editormd} 返回editormd的实例对象 */ hideInfoDialog : function() { $("html,body").css("overflow-x", ""); this.infoDialog.hide(); this.mask.hide(); this.lockScreen(false); return this; }, /** * 锁屏 * lock screen * * @param {Boolean} lock Boolean 布尔值,是否锁屏 * @returns {editormd} 返回editormd的实例对象 */ lockScreen : function(lock) { editormd.lockScreen(lock); this.resize(); return this; }, /** * 编辑器界面重建,用于动态语言包或模块加载等 * Recreate editor * * @returns {editormd} 返回editormd的实例对象 */ recreate : function() { var _this = this; var editor = this.editor; var settings = this.settings; this.codeMirror.remove(); this.setCodeMirror(); if (!settings.readOnly) { if (editor.find(".editormd-dialog").length > 0) { editor.find(".editormd-dialog").remove(); } if (settings.toolbar) { this.getToolbarHandles(); this.setToolbar(); } } this.loadedDisplay(true); return this; }, /** * 高亮预览HTML的pre代码部分 * highlight of preview codes * * @returns {editormd} 返回editormd的实例对象 */ previewCodeHighlight : function() { var settings = this.settings; var previewContainer = this.previewContainer; if (settings.previewCodeHighlight) { previewContainer.find("pre").addClass("prettyprint linenums"); if (typeof prettyPrint !== "undefined") { prettyPrint(); } } return this; }, /** * 解析TeX(KaTeX)科学公式 * TeX(KaTeX) Renderer * * @returns {editormd} 返回editormd的实例对象 */ katexRender : function() { if (timer === null) { return this; } this.previewContainer.find("." + editormd.classNames.tex).each(function(){ var tex = $(this); editormd.$katex.render(tex.text(), tex[0]); tex.find(".katex").css("font-size", "1.6em"); }); return this; }, /** * 解析和渲染流程图及时序图 * FlowChart and SequenceDiagram Renderer * * @returns {editormd} 返回editormd的实例对象 */ flowChartAndSequenceDiagramRender : function() { var $this = this; var settings = this.settings; var previewContainer = this.previewContainer; if (editormd.isIE8) { return this; } if (settings.flowChart) { if (flowchartTimer === null) { return this; } previewContainer.find(".flowchart").flowChart(); } if (settings.sequenceDiagram) { previewContainer.find(".sequence-diagram").sequenceDiagram({theme: "simple"}); } var preview = $this.preview; var codeMirror = $this.codeMirror; var codeView = codeMirror.find(".CodeMirror-scroll"); var height = codeView.height(); var scrollTop = codeView.scrollTop(); var percent = (scrollTop / codeView[0].scrollHeight); var tocHeight = 0; preview.find(".markdown-toc-list").each(function(){ tocHeight += $(this).height(); }); var tocMenuHeight = preview.find(".editormd-toc-menu").height(); tocMenuHeight = (!tocMenuHeight) ? 0 : tocMenuHeight; if (scrollTop === 0) { preview.scrollTop(0); } else if (scrollTop + height >= codeView[0].scrollHeight - 16) { preview.scrollTop(preview[0].scrollHeight); } else { preview.scrollTop((preview[0].scrollHeight + tocHeight + tocMenuHeight) * percent); } return this; }, /** * 注册键盘快捷键处理 * Register CodeMirror keyMaps (keyboard shortcuts). * * @param {Object} keyMap KeyMap key/value {"(Ctrl/Shift/Alt)-Key" : function(){}} * @returns {editormd} return this */ registerKeyMaps : function(keyMap) { var _this = this; var cm = this.cm; var settings = this.settings; var toolbarHandlers = editormd.toolbarHandlers; var disabledKeyMaps = settings.disabledKeyMaps; keyMap = keyMap || null; if (keyMap) { for (var i in keyMap) { if ($.inArray(i, disabledKeyMaps) < 0) { var map = {}; map[i] = keyMap[i]; cm.addKeyMap(keyMap); } } } else { for (var k in editormd.keyMaps) { var _keyMap = editormd.keyMaps[k]; var handle = (typeof _keyMap === "string") ? $.proxy(toolbarHandlers[_keyMap], _this) : $.proxy(_keyMap, _this); if ($.inArray(k, ["F9", "F10", "F11"]) < 0 && $.inArray(k, disabledKeyMaps) < 0) { var _map = {}; _map[k] = handle; cm.addKeyMap(_map); } } $(window).keydown(function(event) { var keymaps = { "120" : "F9", "121" : "F10", "122" : "F11" }; if ( $.inArray(keymaps[event.keyCode], disabledKeyMaps) < 0 ) { switch (event.keyCode) { case 120: $.proxy(toolbarHandlers["watch"], _this)(); return false; break; case 121: $.proxy(toolbarHandlers["preview"], _this)(); return false; break; case 122: $.proxy(toolbarHandlers["fullscreen"], _this)(); return false; break; default: break; } } }); } return this; }, /** * 绑定同步滚动 * * @returns {editormd} return this */ bindScrollEvent : function() { var _this = this; var preview = this.preview; var settings = this.settings; var codeMirror = this.codeMirror; var mouseOrTouch = editormd.mouseOrTouch; if (!settings.syncScrolling) { return this; } var cmBindScroll = function() { codeMirror.find(".CodeMirror-scroll").bind(mouseOrTouch("scroll", "touchmove"), function(event) { var height = $(this).height(); var scrollTop = $(this).scrollTop(); var percent = (scrollTop / $(this)[0].scrollHeight); var tocHeight = 0; preview.find(".markdown-toc-list").each(function(){ tocHeight += $(this).height(); }); var tocMenuHeight = preview.find(".editormd-toc-menu").height(); tocMenuHeight = (!tocMenuHeight) ? 0 : tocMenuHeight; if (scrollTop === 0) { preview.scrollTop(0); } else if (scrollTop + height >= $(this)[0].scrollHeight - 16) { preview.scrollTop(preview[0].scrollHeight); } else { preview.scrollTop((preview[0].scrollHeight + tocHeight + tocMenuHeight) * percent); } $.proxy(settings.onscroll, _this)(event); }); }; var cmUnbindScroll = function() { codeMirror.find(".CodeMirror-scroll").unbind(mouseOrTouch("scroll", "touchmove")); }; var previewBindScroll = function() { preview.bind(mouseOrTouch("scroll", "touchmove"), function(event) { var height = $(this).height(); var scrollTop = $(this).scrollTop(); var percent = (scrollTop / $(this)[0].scrollHeight); var codeView = codeMirror.find(".CodeMirror-scroll"); if(scrollTop === 0) { codeView.scrollTop(0); } else if (scrollTop + height >= $(this)[0].scrollHeight) { codeView.scrollTop(codeView[0].scrollHeight); } else { codeView.scrollTop(codeView[0].scrollHeight * percent); } $.proxy(settings.onpreviewscroll, _this)(event); }); }; var previewUnbindScroll = function() { preview.unbind(mouseOrTouch("scroll", "touchmove")); }; codeMirror.bind({ mouseover : cmBindScroll, mouseout : cmUnbindScroll, touchstart : cmBindScroll, touchend : cmUnbindScroll }); if (settings.syncScrolling === "single") { return this; } preview.bind({ mouseover : previewBindScroll, mouseout : previewUnbindScroll, touchstart : previewBindScroll, touchend : previewUnbindScroll }); return this; }, bindChangeEvent : function() { var _this = this; var cm = this.cm; var settings = this.settings; if (!settings.syncScrolling) { return this; } cm.on("change", function(_cm, changeObj) { if (settings.watch) { _this.previewContainer.css("padding", settings.autoHeight ? "20px 20px 50px 40px" : "20px"); } timer = setTimeout(function() { clearTimeout(timer); _this.save(); timer = null; }, settings.delay); }); return this; }, /** * 加载队列完成之后的显示处理 * Display handle of the module queues loaded after. * * @param {Boolean} recreate 是否为重建编辑器 * @returns {editormd} 返回editormd的实例对象 */ loadedDisplay : function(recreate) { recreate = recreate || false; var _this = this; var editor = this.editor; var preview = this.preview; var settings = this.settings; this.containerMask.hide(); this.save(); if (settings.watch) { preview.show(); } editor.data("oldWidth", editor.width()).data("oldHeight", editor.height()); // 为了兼容Zepto this.resize(); this.registerKeyMaps(); $(window).resize(function(){ _this.resize(); }); this.bindScrollEvent().bindChangeEvent(); if (!recreate) { $.proxy(settings.onload, this)(); } this.state.loaded = true; return this; }, /** * 设置编辑器的宽度 * Set editor width * * @param {Number|String} width 编辑器宽度值 * @returns {editormd} 返回editormd的实例对象 */ width : function(width) { this.editor.css("width", (typeof width === "number") ? width + "px" : width); this.resize(); return this; }, /** * 设置编辑器的高度 * Set editor height * * @param {Number|String} height 编辑器高度值 * @returns {editormd} 返回editormd的实例对象 */ height : function(height) { this.editor.css("height", (typeof height === "number") ? height + "px" : height); this.resize(); return this; }, /** * 调整编辑器的尺寸和布局 * Resize editor layout * * @param {Number|String} [width=null] 编辑器宽度值 * @param {Number|String} [height=null] 编辑器高度值 * @returns {editormd} 返回editormd的实例对象 */ resize : function(width, height) { width = width || null; height = height || null; var state = this.state; var editor = this.editor; var preview = this.preview; var toolbar = this.toolbar; var settings = this.settings; var codeMirror = this.codeMirror; if (width) { editor.css("width", (typeof width === "number") ? width + "px" : width); } if (settings.autoHeight && !state.fullscreen && !state.preview) { editor.css("height", "auto"); codeMirror.css("height", "auto"); } else { if (height) { editor.css("height", (typeof height === "number") ? height + "px" : height); } if (state.fullscreen) { editor.height($(window).height()); } if (settings.toolbar && !settings.readOnly) { codeMirror.css("margin-top", toolbar.height() + 1).height(editor.height() - toolbar.height()); } else { codeMirror.css("margin-top", 0).height(editor.height()); } } if(settings.watch) { codeMirror.width(editor.width() / 2); preview.width((!state.preview) ? editor.width() / 2 : editor.width()); this.previewContainer.css("padding", settings.autoHeight ? "20px 20px 50px 40px" : "20px"); if (settings.toolbar && !settings.readOnly) { preview.css("top", toolbar.height() + 1); } else { preview.css("top", 0); } if (settings.autoHeight && !state.fullscreen && !state.preview) { preview.height(""); } else { var previewHeight = (settings.toolbar && !settings.readOnly) ? editor.height() - toolbar.height() : editor.height(); preview.height(previewHeight); } } else { codeMirror.width(editor.width()); preview.hide(); } if (state.loaded) { $.proxy(settings.onresize, this)(); } return this; }, /** * 解析和保存Markdown代码 * Parse & Saving Markdown source code * * @returns {editormd} 返回editormd的实例对象 */ save : function() { if (timer === null) { return this; } var _this = this; var state = this.state; var settings = this.settings; var cm = this.cm; var cmValue = cm.getValue(); var previewContainer = this.previewContainer; if (settings.mode !== "gfm" && settings.mode !== "markdown") { this.markdownTextarea.val(cmValue); return this; } var marked = editormd.$marked; var markdownToC = this.markdownToC = []; var rendererOptions = this.markedRendererOptions = { toc : settings.toc, tocm : settings.tocm, tocStartLevel : settings.tocStartLevel, pageBreak : settings.pageBreak, taskList : settings.taskList, emoji : settings.emoji, tex : settings.tex, atLink : settings.atLink, // for @link emailLink : settings.emailLink, // for mail address auto link flowChart : settings.flowChart, sequenceDiagram : settings.sequenceDiagram, previewCodeHighlight : settings.previewCodeHighlight, }; var markedOptions = this.markedOptions = { renderer : editormd.markedRenderer(markdownToC, rendererOptions), gfm : true, tables : true, breaks : true, pedantic : false, sanitize : (settings.htmlDecode) ? false : true, // 关闭忽略HTML标签,即开启识别HTML标签,默认为false smartLists : true, smartypants : true }; marked.setOptions(markedOptions); var newMarkdownDoc = editormd.$marked(cmValue, markedOptions); //console.info("cmValue", cmValue, newMarkdownDoc); newMarkdownDoc = editormd.filterHTMLTags(newMarkdownDoc, settings.htmlDecode); //console.error("cmValue", cmValue, newMarkdownDoc); this.markdownTextarea.text(cmValue); cm.save(); if (settings.saveHTMLToTextarea) { this.htmlTextarea.text(newMarkdownDoc); } if(settings.watch || (!settings.watch && state.preview)) { previewContainer.html(newMarkdownDoc); this.previewCodeHighlight(); if (settings.toc) { var tocContainer = (settings.tocContainer === "") ? previewContainer : $(settings.tocContainer); var tocMenu = tocContainer.find("." + this.classPrefix + "toc-menu"); tocContainer.attr("previewContainer", (settings.tocContainer === "") ? "true" : "false"); if (settings.tocContainer !== "" && tocMenu.length > 0) { tocMenu.remove(); } editormd.markdownToCRenderer(markdownToC, tocContainer, settings.tocDropdown, settings.tocStartLevel); if (settings.tocDropdown || tocContainer.find("." + this.classPrefix + "toc-menu").length > 0) { editormd.tocDropdownMenu(tocContainer, (settings.tocTitle !== "") ? settings.tocTitle : this.lang.tocTitle); } if (settings.tocContainer !== "") { previewContainer.find(".markdown-toc").css("border", "none"); } } if (settings.tex) { if (!editormd.kaTeXLoaded && settings.autoLoadModules) { editormd.loadKaTeX(function() { editormd.$katex = katex; editormd.kaTeXLoaded = true; _this.katexRender(); }); } else { editormd.$katex = katex; this.katexRender(); } } if (settings.flowChart || settings.sequenceDiagram) { flowchartTimer = setTimeout(function(){ clearTimeout(flowchartTimer); _this.flowChartAndSequenceDiagramRender(); flowchartTimer = null; }, 10); } if (state.loaded) { $.proxy(settings.onchange, this)(); } } return this; }, /** * 聚焦光标位置 * Focusing the cursor position * * @returns {editormd} 返回editormd的实例对象 */ focus : function() { this.cm.focus(); return this; }, /** * 设置光标的位置 * Set cursor position * * @param {Object} cursor 要设置的光标位置键值对象,例:{line:1, ch:0} * @returns {editormd} 返回editormd的实例对象 */ setCursor : function(cursor) { this.cm.setCursor(cursor); return this; }, /** * 获取当前光标的位置 * Get the current position of the cursor * * @returns {Cursor} 返回一个光标Cursor对象 */ getCursor : function() { return this.cm.getCursor(); }, /** * 设置光标选中的范围 * Set cursor selected ranges * * @param {Object} from 开始位置的光标键值对象,例:{line:1, ch:0} * @param {Object} to 结束位置的光标键值对象,例:{line:1, ch:0} * @returns {editormd} 返回editormd的实例对象 */ setSelection : function(from, to) { this.cm.setSelection(from, to); return this; }, /** * 获取光标选中的文本 * Get the texts from cursor selected * * @returns {String} 返回选中文本的字符串形式 */ getSelection : function() { return this.cm.getSelection(); }, /** * 设置光标选中的文本范围 * Set the cursor selection ranges * * @param {Array} ranges cursor selection ranges array * @returns {Array} return this */ setSelections : function(ranges) { this.cm.setSelections(ranges); return this; }, /** * 获取光标选中的文本范围 * Get the cursor selection ranges * * @returns {Array} return selection ranges array */ getSelections : function() { return this.cm.getSelections(); }, /** * 替换当前光标选中的文本或在当前光标处插入新字符 * Replace the text at the current cursor selected or insert a new character at the current cursor position * * @param {String} value 要插入的字符值 * @returns {editormd} 返回editormd的实例对象 */ replaceSelection : function(value) { this.cm.replaceSelection(value); return this; }, /** * 在当前光标处插入新字符 * Insert a new character at the current cursor position * * 同replaceSelection()方法 * With the replaceSelection() method * * @param {String} value 要插入的字符值 * @returns {editormd} 返回editormd的实例对象 */ insertValue : function(value) { this.replaceSelection(value); return this; }, /** * 追加markdown * append Markdown to editor * * @param {String} md 要追加的markdown源文档 * @returns {editormd} 返回editormd的实例对象 */ appendMarkdown : function(md) { var settings = this.settings; var cm = this.cm; cm.setValue(cm.getValue() + md); return this; }, /** * 设置和传入编辑器的markdown源文档 * Set Markdown source document * * @param {String} md 要传入的markdown源文档 * @returns {editormd} 返回editormd的实例对象 */ setMarkdown : function(md) { this.cm.setValue(md || this.settings.markdown); return this; }, /** * 获取编辑器的markdown源文档 * Set Editor.md markdown/CodeMirror value * * @returns {editormd} 返回editormd的实例对象 */ getMarkdown : function() { return this.cm.getValue(); }, /** * 获取编辑器的源文档 * Get CodeMirror value * * @returns {editormd} 返回editormd的实例对象 */ getValue : function() { return this.cm.getValue(); }, /** * 设置编辑器的源文档 * Set CodeMirror value * * @param {String} value set code/value/string/text * @returns {editormd} 返回editormd的实例对象 */ setValue : function(value) { this.cm.setValue(value); return this; }, /** * 清空编辑器 * Empty CodeMirror editor container * * @returns {editormd} 返回editormd的实例对象 */ clear : function() { this.cm.setValue(""); return this; }, /** * 获取解析后存放在Textarea的HTML源码 * Get parsed html code from Textarea * * @returns {String} 返回HTML源码 */ getHTML : function() { if (!this.settings.saveHTMLToTextarea) { alert("Error: settings.saveHTMLToTextarea == false"); return false; } return this.htmlTextarea.val(); }, /** * getHTML()的别名 * getHTML (alias) * * @returns {String} Return html code 返回HTML源码 */ getTextareaSavedHTML : function() { return this.getHTML(); }, /** * 获取预览窗口的HTML源码 * Get html from preview container * * @returns {editormd} 返回editormd的实例对象 */ getPreviewedHTML : function() { if (!this.settings.watch) { alert("Error: settings.watch == false"); return false; } return this.previewContainer.html(); }, /** * 开启实时预览 * Enable real-time watching * * @returns {editormd} 返回editormd的实例对象 */ watch : function(callback) { var settings = this.settings; if ($.inArray(settings.mode, ["gfm", "markdown"]) < 0) { return this; } this.state.watching = settings.watch = true; this.preview.show(); if (this.toolbar) { var watchIcon = settings.toolbarIconsClass.watch; var unWatchIcon = settings.toolbarIconsClass.unwatch; var icon = this.toolbar.find(".fa[name=watch]"); icon.parent().attr("title", settings.lang.toolbar.watch); icon.removeClass(unWatchIcon).addClass(watchIcon); } this.codeMirror.css("border-right", "1px solid #ddd").width(this.editor.width() / 2); timer = 0; this.save().resize(); if (!settings.onwatch) { settings.onwatch = callback || function() {}; } $.proxy(settings.onwatch, this)(); return this; }, /** * 关闭实时预览 * Disable real-time watching * * @returns {editormd} 返回editormd的实例对象 */ unwatch : function(callback) { var settings = this.settings; this.state.watching = settings.watch = false; this.preview.hide(); if (this.toolbar) { var watchIcon = settings.toolbarIconsClass.watch; var unWatchIcon = settings.toolbarIconsClass.unwatch; var icon = this.toolbar.find(".fa[name=watch]"); icon.parent().attr("title", settings.lang.toolbar.unwatch); icon.removeClass(watchIcon).addClass(unWatchIcon); } this.codeMirror.css("border-right", "none").width(this.editor.width()); this.resize(); if (!settings.onunwatch) { settings.onunwatch = callback || function() {}; } $.proxy(settings.onunwatch, this)(); return this; }, /** * 显示编辑器 * Show editor * * @param {Function} [callback=function()] 回调函数 * @returns {editormd} 返回editormd的实例对象 */ show : function(callback) { callback = callback || function() {}; var _this = this; this.editor.show(0, function() { $.proxy(callback, _this)(); }); return this; }, /** * 隐藏编辑器 * Hide editor * * @param {Function} [callback=function()] 回调函数 * @returns {editormd} 返回editormd的实例对象 */ hide : function(callback) { callback = callback || function() {}; var _this = this; this.editor.hide(0, function() { $.proxy(callback, _this)(); }); return this; }, /** * 隐藏编辑器部分,只预览HTML * Enter preview html state * * @returns {editormd} 返回editormd的实例对象 */ previewing : function() { var _this = this; var editor = this.editor; var preview = this.preview; var toolbar = this.toolbar; var settings = this.settings; var codeMirror = this.codeMirror; var previewContainer = this.previewContainer; if ($.inArray(settings.mode, ["gfm", "markdown"]) < 0) { return this; } if (settings.toolbar && toolbar) { toolbar.toggle(); toolbar.find(".fa[name=preview]").toggleClass("active"); } codeMirror.toggle(); var escHandle = function(event) { if (event.shiftKey && event.keyCode === 27) { _this.previewed(); } }; if (codeMirror.css("display") === "none") // 为了兼容Zepto,而不使用codeMirror.is(":hidden") { this.state.preview = true; if (this.state.fullscreen) { preview.css("background", "#fff"); } editor.find("." + this.classPrefix + "preview-close-btn").show().bind(editormd.mouseOrTouch("click", "touchend"), function(){ _this.previewed(); }); if (!settings.watch) { this.save(); } else { previewContainer.css("padding", ""); } previewContainer.addClass(this.classPrefix + "preview-active"); preview.show().css({ position : "", top : 0, width : editor.width(), height : (settings.autoHeight && !this.state.fullscreen) ? "auto" : editor.height() }); if (this.state.loaded) { $.proxy(settings.onpreviewing, this)(); } $(window).bind("keyup", escHandle); } else { $(window).unbind("keyup", escHandle); this.previewed(); } }, /** * 显示编辑器部分,退出只预览HTML * Exit preview html state * * @returns {editormd} 返回editormd的实例对象 */ previewed : function() { var editor = this.editor; var preview = this.preview; var toolbar = this.toolbar; var settings = this.settings; var previewContainer = this.previewContainer; var previewCloseBtn = editor.find("." + this.classPrefix + "preview-close-btn"); this.state.preview = false; this.codeMirror.show(); if (settings.toolbar) { toolbar.show(); } preview[(settings.watch) ? "show" : "hide"](); previewCloseBtn.hide().unbind(editormd.mouseOrTouch("click", "touchend")); previewContainer.removeClass(this.classPrefix + "preview-active"); if (settings.watch) { previewContainer.css("padding", "20px"); } preview.css({ background : null, position : "absolute", width : editor.width() / 2, height : (settings.autoHeight && !this.state.fullscreen) ? "auto" : editor.height() - toolbar.height(), top : (settings.toolbar) ? toolbar.height() : 0 }); if (this.state.loaded) { $.proxy(settings.onpreviewed, this)(); } return this; }, /** * 编辑器全屏显示 * Fullscreen show * * @returns {editormd} 返回editormd的实例对象 */ fullscreen : function() { var _this = this; var state = this.state; var editor = this.editor; var preview = this.preview; var toolbar = this.toolbar; var settings = this.settings; var fullscreenClass = this.classPrefix + "fullscreen"; if (toolbar) { toolbar.find(".fa[name=fullscreen]").parent().toggleClass("active"); } var escHandle = function(event) { if (!event.shiftKey && event.keyCode === 27) { if (state.fullscreen) { _this.fullscreenExit(); } } }; if (!editor.hasClass(fullscreenClass)) { state.fullscreen = true; $("html,body").css("overflow", "hidden"); editor.css({ width : $(window).width(), height : $(window).height() }).addClass(fullscreenClass); this.resize(); $.proxy(settings.onfullscreen, this)(); $(window).bind("keyup", escHandle); } else { $(window).unbind("keyup", escHandle); this.fullscreenExit(); } return this; }, /** * 编辑器退出全屏显示 * Exit fullscreen state * * @returns {editormd} 返回editormd的实例对象 */ fullscreenExit : function() { var editor = this.editor; var settings = this.settings; var toolbar = this.toolbar; var fullscreenClass = this.classPrefix + "fullscreen"; this.state.fullscreen = false; if (toolbar) { toolbar.find(".fa[name=fullscreen]").parent().removeClass("active"); } $("html,body").css("overflow", ""); editor.css({ width : editor.data("oldWidth"), height : editor.data("oldHeight") }).removeClass(fullscreenClass); this.resize(); $.proxy(settings.onfullscreenExit, this)(); return this; }, /** * 加载并执行插件 * Load and execute the plugin * * @param {String} name plugin name / function name * @param {String} path plugin load path * @returns {editormd} 返回editormd的实例对象 */ executePlugin : function(name, path) { var _this = this; var cm = this.cm; var settings = this.settings; path = settings.pluginPath + path; if (typeof define === "function") { if (typeof this[name] === "undefined") { alert("Error: " + name + " plugin is not found, you are not load this plugin."); return this; } this[name](cm); return this; } if ($.inArray(path, editormd.loadFiles.plugin) < 0) { editormd.loadPlugin(path, function() { editormd.loadPlugins[name] = _this[name]; _this[name](cm); }); } else { $.proxy(editormd.loadPlugins[name], this)(cm); } return this; }, /** * 搜索替换 * Search & replace * * @param {String} command CodeMirror serach commands, "find, fintNext, fintPrev, clearSearch, replace, replaceAll" * @returns {editormd} return this */ search : function(command) { var settings = this.settings; if (!settings.searchReplace) { alert("Error: settings.searchReplace == false"); return this; } if (!settings.readOnly) { this.cm.execCommand(command || "find"); } return this; }, searchReplace : function() { this.search("replace"); return this; }, searchReplaceAll : function() { this.search("replaceAll"); return this; } }; editormd.fn.init.prototype = editormd.fn; /** * 锁屏 * lock screen when dialog opening * * @returns {void} */ editormd.dialogLockScreen = function() { var settings = this.settings || {dialogLockScreen : true}; if (settings.dialogLockScreen) { $("html,body").css("overflow", "hidden"); this.resize(); } }; /** * 显示透明背景层 * Display mask layer when dialog opening * * @param {Object} dialog dialog jQuery object * @returns {void} */ editormd.dialogShowMask = function(dialog) { var editor = this.editor; var settings = this.settings || {dialogShowMask : true}; dialog.css({ top : ($(window).height() - dialog.height()) / 2 + "px", left : ($(window).width() - dialog.width()) / 2 + "px" }); if (settings.dialogShowMask) { editor.children("." + this.classPrefix + "mask").css("z-index", parseInt(dialog.css("z-index")) - 1).show(); } }; editormd.toolbarHandlers = { undo : function() { this.cm.undo(); }, redo : function() { this.cm.redo(); }, bold : function() { var cm = this.cm; var cursor = cm.getCursor(); var selection = cm.getSelection(); cm.replaceSelection("**" + selection + "**"); if(selection === "") { cm.setCursor(cursor.line, cursor.ch + 2); } }, del : function() { var cm = this.cm; var cursor = cm.getCursor(); var selection = cm.getSelection(); cm.replaceSelection("~~" + selection + "~~"); if(selection === "") { cm.setCursor(cursor.line, cursor.ch + 2); } }, italic : function() { var cm = this.cm; var cursor = cm.getCursor(); var selection = cm.getSelection(); cm.replaceSelection("*" + selection + "*"); if(selection === "") { cm.setCursor(cursor.line, cursor.ch + 1); } }, quote : function() { var cm = this.cm; var cursor = cm.getCursor(); var selection = cm.getSelection(); if (cursor.ch !== 0) { cm.setCursor(cursor.line, 0); cm.replaceSelection("> " + selection); cm.setCursor(cursor.line, cursor.ch + 2); } else { cm.replaceSelection("> " + selection); } //cm.replaceSelection("> " + selection); //cm.setCursor(cursor.line, (selection === "") ? cursor.ch + 2 : cursor.ch + selection.length + 2); }, ucfirst : function() { var cm = this.cm; var selection = cm.getSelection(); var selections = cm.listSelections(); cm.replaceSelection(editormd.firstUpperCase(selection)); cm.setSelections(selections); }, ucwords : function() { var cm = this.cm; var selection = cm.getSelection(); var selections = cm.listSelections(); cm.replaceSelection(editormd.wordsFirstUpperCase(selection)); cm.setSelections(selections); }, uppercase : function() { var cm = this.cm; var selection = cm.getSelection(); var selections = cm.listSelections(); cm.replaceSelection(selection.toUpperCase()); cm.setSelections(selections); }, lowercase : function() { var cm = this.cm; var cursor = cm.getCursor(); var selection = cm.getSelection(); var selections = cm.listSelections(); cm.replaceSelection(selection.toLowerCase()); cm.setSelections(selections); }, h1 : function() { var cm = this.cm; var cursor = cm.getCursor(); var selection = cm.getSelection(); if (cursor.ch !== 0) { cm.setCursor(cursor.line, 0); cm.replaceSelection("# " + selection); cm.setCursor(cursor.line, cursor.ch + 2); } else { cm.replaceSelection("# " + selection); } }, h2 : function() { var cm = this.cm; var cursor = cm.getCursor(); var selection = cm.getSelection(); if (cursor.ch !== 0) { cm.setCursor(cursor.line, 0); cm.replaceSelection("## " + selection); cm.setCursor(cursor.line, cursor.ch + 3); } else { cm.replaceSelection("## " + selection); } }, h3 : function() { var cm = this.cm; var cursor = cm.getCursor(); var selection = cm.getSelection(); if (cursor.ch !== 0) { cm.setCursor(cursor.line, 0); cm.replaceSelection("### " + selection); cm.setCursor(cursor.line, cursor.ch + 4); } else { cm.replaceSelection("### " + selection); } }, h4 : function() { var cm = this.cm; var cursor = cm.getCursor(); var selection = cm.getSelection(); if (cursor.ch !== 0) { cm.setCursor(cursor.line, 0); cm.replaceSelection("#### " + selection); cm.setCursor(cursor.line, cursor.ch + 5); } else { cm.replaceSelection("#### " + selection); } }, h5 : function() { var cm = this.cm; var cursor = cm.getCursor(); var selection = cm.getSelection(); if (cursor.ch !== 0) { cm.setCursor(cursor.line, 0); cm.replaceSelection("##### " + selection); cm.setCursor(cursor.line, cursor.ch + 6); } else { cm.replaceSelection("##### " + selection); } }, h6 : function() { var cm = this.cm; var cursor = cm.getCursor(); var selection = cm.getSelection(); if (cursor.ch !== 0) { cm.setCursor(cursor.line, 0); cm.replaceSelection("###### " + selection); cm.setCursor(cursor.line, cursor.ch + 7); } else { cm.replaceSelection("###### " + selection); } }, "list-ul" : function() { var cm = this.cm; var cursor = cm.getCursor(); var selection = cm.getSelection(); if (selection === "") { cm.replaceSelection("- " + selection); } else { var selectionText = selection.split("\n"); for (var i = 0, len = selectionText.length; i < len; i++) { selectionText[i] = (selectionText[i] === "") ? "" : "- " + selectionText[i]; } cm.replaceSelection(selectionText.join("\n")); } }, "list-ol" : function() { var cm = this.cm; var cursor = cm.getCursor(); var selection = cm.getSelection(); if(selection === "") { cm.replaceSelection("1. " + selection); } else { var selectionText = selection.split("\n"); for (var i = 0, len = selectionText.length; i < len; i++) { selectionText[i] = (selectionText[i] === "") ? "" : (i+1) + ". " + selectionText[i]; } cm.replaceSelection(selectionText.join("\n")); } }, hr : function() { var cm = this.cm; var cursor = cm.getCursor(); var selection = cm.getSelection(); cm.replaceSelection(((cursor.ch !== 0) ? "\n\n" : "\n") + "------------\n\n"); }, tex : function() { if (!this.settings.tex) { alert("settings.tex === false"); return this; } var cm = this.cm; var cursor = cm.getCursor(); var selection = cm.getSelection(); cm.replaceSelection("$$" + selection + "$$"); if(selection === "") { cm.setCursor(cursor.line, cursor.ch + 2); } }, link : function() { this.executePlugin("linkDialog", "link-dialog/link-dialog"); }, "reference-link" : function() { this.executePlugin("referenceLinkDialog", "reference-link-dialog/reference-link-dialog"); }, pagebreak : function() { if (!this.settings.pageBreak) { alert("settings.pageBreak === false"); return this; } var cm = this.cm; var selection = cm.getSelection(); cm.replaceSelection("\r\n[========]\r\n"); }, image : function() { this.executePlugin("imageDialog", "image-dialog/image-dialog"); }, code : function() { var cm = this.cm; var cursor = cm.getCursor(); var selection = cm.getSelection(); cm.replaceSelection("`" + selection + "`"); if (selection === "") { cm.setCursor(cursor.line, cursor.ch + 1); } }, "code-block" : function() { this.executePlugin("codeBlockDialog", "code-block-dialog/code-block-dialog"); }, "preformatted-text" : function() { this.executePlugin("preformattedTextDialog", "preformatted-text-dialog/preformatted-text-dialog"); }, table : function() { this.executePlugin("tableDialog", "table-dialog/table-dialog"); }, datetime : function() { var cm = this.cm; var selection = cm.getSelection(); var date = new Date(); var langName = this.settings.lang.name; var datefmt = editormd.dateFormat() + " " + editormd.dateFormat((langName === "zh-cn" || langName === "zh-tw") ? "cn-week-day" : "week-day"); cm.replaceSelection(datefmt); }, emoji : function() { this.executePlugin("emojiDialog", "emoji-dialog/emoji-dialog"); }, "html-entities" : function() { this.executePlugin("htmlEntitiesDialog", "html-entities-dialog/html-entities-dialog"); }, "goto-line" : function() { this.executePlugin("gotoLineDialog", "goto-line-dialog/goto-line-dialog"); }, watch : function() { this[this.settings.watch ? "unwatch" : "watch"](); }, preview : function() { this.previewing(); }, fullscreen : function() { this.fullscreen(); }, clear : function() { this.clear(); }, search : function() { this.search(); }, help : function() { this.executePlugin("helpDialog", "help-dialog/help-dialog"); }, info : function() { this.showInfoDialog(); } }; editormd.keyMaps = { "Ctrl-1" : "h1", "Ctrl-2" : "h2", "Ctrl-3" : "h3", "Ctrl-4" : "h4", "Ctrl-5" : "h5", "Ctrl-6" : "h6", "Ctrl-B" : "bold", // if this is string == editormd.toolbarHandlers.xxxx "Ctrl-D" : "datetime", "Ctrl-E" : function() { // emoji var cm = this.cm; var cursor = cm.getCursor(); var selection = cm.getSelection(); if (!this.settings.emoji) { alert("Error: settings.emoji == false"); return ; } cm.replaceSelection(":" + selection + ":"); if (selection === "") { cm.setCursor(cursor.line, cursor.ch + 1); } }, "Ctrl-Alt-G" : "goto-line", "Ctrl-H" : "hr", "Ctrl-I" : "italic", "Ctrl-K" : "code", "Ctrl-L" : function() { var cm = this.cm; var cursor = cm.getCursor(); var selection = cm.getSelection(); var title = (selection === "") ? "" : " \""+selection+"\""; cm.replaceSelection("[" + selection + "]("+title+")"); if (selection === "") { cm.setCursor(cursor.line, cursor.ch + 1); } }, "Ctrl-U" : "list-ul", "Shift-Ctrl-A" : function() { var cm = this.cm; var cursor = cm.getCursor(); var selection = cm.getSelection(); if (!this.settings.atLink) { alert("Error: settings.atLink == false"); return ; } cm.replaceSelection("@" + selection); if (selection === "") { cm.setCursor(cursor.line, cursor.ch + 1); } }, "Shift-Ctrl-C" : "code", "Shift-Ctrl-Q" : "quote", "Shift-Ctrl-S" : "del", "Shift-Ctrl-K" : "tex", // KaTeX "Shift-Alt-C" : function() { var cm = this.cm; var cursor = cm.getCursor(); var selection = cm.getSelection(); cm.replaceSelection(["```", selection, "```"].join("\n")); if (selection === "") { cm.setCursor(cursor.line, cursor.ch + 3); } }, "Shift-Ctrl-Alt-C" : "code-block", "Shift-Ctrl-H" : "html-entities", "Shift-Alt-H" : "help", "Shift-Ctrl-E" : "emoji", "Shift-Ctrl-U" : "uppercase", "Shift-Alt-U" : "ucwords", "Shift-Ctrl-Alt-U" : "ucfirst", "Shift-Alt-L" : "lowercase", "Shift-Ctrl-I" : function() { var cm = this.cm; var cursor = cm.getCursor(); var selection = cm.getSelection(); var title = (selection === "") ? "" : " \""+selection+"\""; cm.replaceSelection("![" + selection + "]("+title+")"); if (selection === "") { cm.setCursor(cursor.line, cursor.ch + 4); } }, "Shift-Ctrl-Alt-I" : "image", "Shift-Ctrl-L" : "link", "Shift-Ctrl-O" : "list-ol", "Shift-Ctrl-P" : "preformatted-text", "Shift-Ctrl-T" : "table", "Shift-Alt-P" : "pagebreak", "F9" : "watch", "F10" : "preview", "F11" : "fullscreen", }; /** * 清除字符串两边的空格 * Clear the space of strings both sides. * * @param {String} str string * @returns {String} trimed string */ var trim = function(str) { return (!String.prototype.trim) ? str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, "") : str.trim(); }; editormd.trim = trim; /** * 所有单词首字母大写 * Words first to uppercase * * @param {String} str string * @returns {String} string */ var ucwords = function (str) { return str.toLowerCase().replace(/\b(\w)|\s(\w)/g, function($1) { return $1.toUpperCase(); }); }; editormd.ucwords = editormd.wordsFirstUpperCase = ucwords; /** * 字符串首字母大写 * Only string first char to uppercase * * @param {String} str string * @returns {String} string */ var firstUpperCase = function(str) { return str.toLowerCase().replace(/\b(\w)/, function($1){ return $1.toUpperCase(); }); }; var ucfirst = firstUpperCase; editormd.firstUpperCase = editormd.ucfirst = firstUpperCase; editormd.urls = { atLinkBase : "https://github.com/" }; editormd.regexs = { atLink : /@(\w+)/g, email : /(\w+)@(\w+)\.(\w+)\.?(\w+)?/g, emailLink : /(mailto:)?([\w\.\_]+)@(\w+)\.(\w+)\.?(\w+)?/g, emoji : /:([\w\+-]+):/g, emojiDatetime : /(\d{2}:\d{2}:\d{2})/g, twemoji : /:(tw-([\w]+)-?(\w+)?):/g, fontAwesome : /:(fa-([\w]+)(-(\w+)){0,}):/g, editormdLogo : /:(editormd-logo-?(\w+)?):/g, pageBreak : /^\[[=]{8,}\]$/ }; // Emoji graphics files url path editormd.emoji = { path : "http://www.emoji-cheat-sheet.com/graphics/emojis/", ext : ".png" }; // Twitter Emoji (Twemoji) graphics files url path editormd.twemoji = { path : "http://twemoji.maxcdn.com/36x36/", ext : ".png" }; /** * 自定义marked的解析器 * Custom Marked renderer rules * * @param {Array} markdownToC 传入用于接收TOC的数组 * @returns {Renderer} markedRenderer 返回marked的Renderer自定义对象 */ editormd.markedRenderer = function(markdownToC, options) { var defaults = { toc : true, // Table of contents tocm : false, tocStartLevel : 1, // Said from H1 to create ToC pageBreak : true, atLink : true, // for @link emailLink : true, // for mail address auto link taskList : false, // Enable Github Flavored Markdown task lists emoji : false, // :emoji: , Support Twemoji, fontAwesome, Editor.md logo emojis. tex : false, // TeX(LaTeX), based on KaTeX flowChart : false, // flowChart.js only support IE9+ sequenceDiagram : false, // sequenceDiagram.js only support IE9+ }; var settings = $.extend(defaults, options || {}); var marked = editormd.$marked; var markedRenderer = new marked.Renderer(); markdownToC = markdownToC || []; var regexs = editormd.regexs; var atLinkReg = regexs.atLink; var emojiReg = regexs.emoji; var emailReg = regexs.email; var emailLinkReg = regexs.emailLink; var twemojiReg = regexs.twemoji; var faIconReg = regexs.fontAwesome; var editormdLogoReg = regexs.editormdLogo; var pageBreakReg = regexs.pageBreak; markedRenderer.emoji = function(text) { text = text.replace(editormd.regexs.emojiDatetime, function($1) { return $1.replace(/:/g, ":"); }); var matchs = text.match(emojiReg); if (!matchs || !settings.emoji) { return text; } for (var i = 0, len = matchs.length; i < len; i++) { if (matchs[i] === ":+1:") { matchs[i] = ":\\+1:"; } text = text.replace(new RegExp(matchs[i]), function($1, $2){ var faMatchs = $1.match(faIconReg); var name = $1.replace(/:/g, ""); if (faMatchs) { for (var fa = 0, len1 = faMatchs.length; fa < len1; fa++) { var faName = faMatchs[fa].replace(/:/g, ""); return ""; } } else { var emdlogoMathcs = $1.match(editormdLogoReg); var twemojiMatchs = $1.match(twemojiReg); if (emdlogoMathcs) { for (var x = 0, len2 = emdlogoMathcs.length; x < len2; x++) { var logoName = emdlogoMathcs[x].replace(/:/g, ""); return ""; } } else if (twemojiMatchs) { for (var t = 0, len3 = twemojiMatchs.length; t < len3; t++) { var twe = twemojiMatchs[t].replace(/:/g, "").replace("tw-", ""); return "\"twemoji-""; } } else { var src = (name === "+1") ? "plus1" : name; src = (src === "black_large_square") ? "black_square" : src; src = (src === "moon") ? "waxing_gibbous_moon" : src; return "\":""; } } }); } return text; }; markedRenderer.atLink = function(text) { if (atLinkReg.test(text)) { if (settings.atLink) { text = text.replace(emailReg, function($1, $2, $3, $4) { return $1.replace(/@/g, "_#_@_#_"); }); text = text.replace(atLinkReg, function($1, $2) { return "" + $1 + ""; }).replace(/_#_@_#_/g, "@"); } if (settings.emailLink) { text = text.replace(emailLinkReg, function($1, $2, $3, $4, $5) { return (!$2 && $.inArray($5, "jpg|jpeg|png|gif|webp|ico|icon|pdf".split("|")) < 0) ? ""+$1+"" : $1; }); } return text; } return text; }; markedRenderer.link = function (href, title, text) { if (this.options.sanitize) { try { var prot = decodeURIComponent(unescape(href)).replace(/[^\w:]/g,"").toLowerCase(); } catch(e) { return ""; } if (prot.indexOf("javascript:") === 0) { return ""; } } var out = "" + text.replace(/@/g, "@") + ""; } if (title) { out += " title=\"" + title + "\""; } out += ">" + text + ""; return out; }; markedRenderer.heading = function(text, level, raw) { var linkText = text; var hasLinkReg = /\s*\]*)\>(.*)\<\/a\>\s*/; var getLinkTextReg = /\s*\]+)\>([^\>]*)\<\/a\>\s*/g; if (hasLinkReg.test(text)) { var tempText = []; text = text.split(/\]+)\>([^\>]*)\<\/a\>/); for (var i = 0, len = text.length; i < len; i++) { tempText.push(text[i].replace(/\s*href\=\"(.*)\"\s*/g, "")); } text = tempText.join(" "); } text = trim(text); var escapedText = text.toLowerCase().replace(/[^\w]+/g, "-"); var toc = { text : text, level : level, slug : escapedText }; var isChinese = /^[\u4e00-\u9fa5]+$/.test(text); var id = (isChinese) ? escape(text).replace(/\%/g, "") : text.toLowerCase().replace(/[^\w]+/g, "-"); markdownToC.push(toc); var headingHTML = ""; headingHTML += ""; headingHTML += ""; headingHTML += (hasLinkReg) ? this.atLink(this.emoji(linkText)) : this.atLink(this.emoji(text)); headingHTML += ""; return headingHTML; }; markedRenderer.pageBreak = function(text) { if (pageBreakReg.test(text) && settings.pageBreak) { text = "
            "; } return text; }; markedRenderer.paragraph = function(text) { var isTeXInline = /\$\$(.*)\$\$/g.test(text); var isTeXLine = /^\$\$(.*)\$\$$/.test(text); var isTeXAddClass = (isTeXLine) ? " class=\"" + editormd.classNames.tex + "\"" : ""; var isToC = (settings.tocm) ? /^(\[TOC\]|\[TOCM\])$/.test(text) : /^\[TOC\]$/.test(text); var isToCMenu = /^\[TOCM\]$/.test(text); if (!isTeXLine && isTeXInline) { text = text.replace(/(\$\$([^\$]*)\$\$)+/g, function($1, $2) { return "" + $2.replace(/\$/g, "") + ""; }); } else { text = (isTeXLine) ? text.replace(/\$/g, "") : text; } var tocHTML = "
            " + text + "
            "; return (isToC) ? ( (isToCMenu) ? "
            " + tocHTML + "

            " : tocHTML ) : ( (pageBreakReg.test(text)) ? this.pageBreak(text) : "" + this.atLink(this.emoji(text)) + "

            \n" ); }; markedRenderer.code = function (code, lang, escaped) { if (lang === "seq" || lang === "sequence") { return "
            " + code + "
            "; } else if ( lang === "flow") { return "
            " + code + "
            "; } else if ( lang === "math" || lang === "latex" || lang === "katex") { return "

            " + code + "

            "; } else { return marked.Renderer.prototype.code.apply(this, arguments); } }; markedRenderer.tablecell = function(content, flags) { var type = (flags.header) ? "th" : "td"; var tag = (flags.align) ? "<" + type +" style=\"text-align:" + flags.align + "\">" : "<" + type + ">"; return tag + this.atLink(this.emoji(content)) + "\n"; }; markedRenderer.listitem = function(text) { if (settings.taskList && /^\s*\[[x\s]\]\s*/.test(text)) { text = text.replace(/^\s*\[\s\]\s*/, " ") .replace(/^\s*\[x\]\s*/, " "); return "
          • " + this.atLink(this.emoji(text)) + "
          • "; } else { return "
          • " + this.atLink(this.emoji(text)) + "
          • "; } }; return markedRenderer; }; /** * * 生成TOC(Table of Contents) * Creating ToC (Table of Contents) * * @param {Array} toc 从marked获取的TOC数组列表 * @param {Element} container 插入TOC的容器元素 * @param {Integer} startLevel Hx 起始层级 * @returns {Object} tocContainer 返回ToC列表容器层的jQuery对象元素 */ editormd.markdownToCRenderer = function(toc, container, tocDropdown, startLevel) { var html = ""; var lastLevel = 0; var classPrefix = this.classPrefix; startLevel = startLevel || 1; for (var i = 0, len = toc.length; i < len; i++) { var text = toc[i].text; var level = toc[i].level; if (level < startLevel) { continue; } if (level > lastLevel) { html += ""; } else if (level < lastLevel) { html += (new Array(lastLevel - level + 2)).join("
          "); } else { html += ""; } html += "
        • " + text + "
            "; lastLevel = level; } var tocContainer = container.find(".markdown-toc"); if ((tocContainer.length < 1 && container.attr("previewContainer") === "false")) { var tocHTML = "
            "; tocHTML = (tocDropdown) ? "
            " + tocHTML + "
            " : tocHTML; container.html(tocHTML); tocContainer = container.find(".markdown-toc"); } if (tocDropdown) { tocContainer.wrap("

            "); } tocContainer.html("
              ").children(".markdown-toc-list").html(html.replace(/\r?\n?\\<\/ul\>/g, "")); return tocContainer; }; /** * * 生成TOC下拉菜单 * Creating ToC dropdown menu * * @param {Object} container 插入TOC的容器jQuery对象元素 * @param {String} tocTitle ToC title * @returns {Object} return toc-menu object */ editormd.tocDropdownMenu = function(container, tocTitle) { tocTitle = tocTitle || "Table of Contents"; var zindex = 400; var tocMenus = container.find("." + this.classPrefix + "toc-menu"); tocMenus.each(function() { var $this = $(this); var toc = $this.children(".markdown-toc"); var icon = ""; var btn = "" + icon + tocTitle + ""; var menu = toc.children("ul"); var list = menu.find("li"); toc.append(btn); list.first().before("
            • " + tocTitle + " " + icon + "

            • "); $this.mouseover(function(){ menu.show(); list.each(function(){ var li = $(this); var ul = li.children("ul"); if (ul.html() === "") { ul.remove(); } if (ul.length > 0 && ul.html() !== "") { var firstA = li.children("a").first(); if (firstA.children(".fa").length < 1) { firstA.append( $(icon).css({ float:"right", paddingTop:"4px" }) ); } } li.mouseover(function(){ ul.css("z-index", zindex).show(); zindex += 1; }).mouseleave(function(){ ul.hide(); }); }); }).mouseleave(function(){ menu.hide(); }); }); return tocMenus; }; /** * 简单地过滤指定的HTML标签 * Filter custom html tags * * @param {String} html 要过滤HTML * @param {String} filters 要过滤的标签 * @returns {String} html 返回过滤的HTML */ editormd.filterHTMLTags = function(html, filters) { if (typeof html !== "string") { html = new String(html); } if (typeof filters !== "string") { return html; } var expression = filters.split("|"); var filterTags = expression[0].split(","); var attrs = expression[1]; for (var i = 0, len = filterTags.length; i < len; i++) { var tag = filterTags[i]; html = html.replace(new RegExp("\<\s*" + tag + "\s*([^\>]*)\>([^\>]*)\<\s*\/" + tag + "\s*\>", "igm"), ""); } //return html; if (typeof attrs !== "undefined") { var htmlTagRegex = /\<(\w+)\s*([^\>]*)\>([^\>]*)\<\/(\w+)\>/ig; if (attrs === "*") { html = html.replace(htmlTagRegex, function($1, $2, $3, $4, $5) { return "<" + $2 + ">" + $4 + ""; }); } else if (attrs === "on*") { html = html.replace(htmlTagRegex, function($1, $2, $3, $4, $5) { var el = $("<" + $2 + ">" + $4 + ""); var _attrs = $($1)[0].attributes; var $attrs = {}; $.each(_attrs, function(i, e) { if (e.nodeName !== '"') $attrs[e.nodeName] = e.nodeValue; }); $.each($attrs, function(i) { if (i.indexOf("on") === 0) { delete $attrs[i]; } }); el.attr($attrs); var text = (typeof el[1] !== "undefined") ? $(el[1]).text() : ""; return el[0].outerHTML + text; }); } else { html = html.replace(htmlTagRegex, function($1, $2, $3, $4) { var filterAttrs = attrs.split(","); var el = $($1); el.html($4); $.each(filterAttrs, function(i) { el.attr(filterAttrs[i], null); }); return el[0].outerHTML; }); } } return html; }; /** * 将Markdown文档解析为HTML用于前台显示 * Parse Markdown to HTML for Font-end preview. * * @param {String} id 用于显示HTML的对象ID * @param {Object} [options={}] 配置选项,可选 * @returns {Object} div 返回jQuery对象元素 */ editormd.markdownToHTML = function(id, options) { var defaults = { gfm : true, toc : true, tocm : false, tocStartLevel : 1, tocTitle : "目录", tocDropdown : false, tocContainer : "", markdown : "", markdownSourceCode : false, htmlDecode : false, autoLoadKaTeX : true, pageBreak : true, atLink : true, // for @link emailLink : true, // for mail address auto link tex : false, taskList : false, // Github Flavored Markdown task lists emoji : false, flowChart : false, sequenceDiagram : false, previewCodeHighlight : true }; editormd.$marked = marked; var div = $("#" + id); var settings = div.settings = $.extend(true, defaults, options || {}); var saveTo = div.find("textarea"); if (saveTo.length < 1) { div.append(""); saveTo = div.find("textarea"); } var markdownDoc = (settings.markdown === "") ? saveTo.val() : settings.markdown; var markdownToC = []; var rendererOptions = { toc : settings.toc, tocm : settings.tocm, tocStartLevel : settings.tocStartLevel, taskList : settings.taskList, emoji : settings.emoji, tex : settings.tex, pageBreak : settings.pageBreak, atLink : settings.atLink, // for @link emailLink : settings.emailLink, // for mail address auto link flowChart : settings.flowChart, sequenceDiagram : settings.sequenceDiagram, previewCodeHighlight : settings.previewCodeHighlight, }; var markedOptions = { renderer : editormd.markedRenderer(markdownToC, rendererOptions), gfm : settings.gfm, tables : true, breaks : true, pedantic : false, sanitize : (settings.htmlDecode) ? false : true, // 是否忽略HTML标签,即是否开启HTML标签解析,为了安全性,默认不开启 smartLists : true, smartypants : true }; markdownDoc = new String(markdownDoc); var markdownParsed = marked(markdownDoc, markedOptions); markdownParsed = editormd.filterHTMLTags(markdownParsed, settings.htmlDecode); if (settings.markdownSourceCode) { saveTo.text(markdownDoc); } else { saveTo.remove(); } div.addClass("markdown-body " + this.classPrefix + "html-preview").append(markdownParsed); var tocContainer = (settings.tocContainer !== "") ? $(settings.tocContainer) : div; if (settings.tocContainer !== "") { tocContainer.attr("previewContainer", false); } if (settings.toc) { div.tocContainer = this.markdownToCRenderer(markdownToC, tocContainer, settings.tocDropdown, settings.tocStartLevel); if (settings.tocDropdown || div.find("." + this.classPrefix + "toc-menu").length > 0) { this.tocDropdownMenu(div, settings.tocTitle); } if (settings.tocContainer !== "") { div.find(".editormd-toc-menu, .editormd-markdown-toc").remove(); } } if (settings.previewCodeHighlight) { div.find("pre").addClass("prettyprint linenums"); prettyPrint(); } if (!editormd.isIE8) { if (settings.flowChart) { div.find(".flowchart").flowChart(); } if (settings.sequenceDiagram) { div.find(".sequence-diagram").sequenceDiagram({theme: "simple"}); } } if (settings.tex) { var katexHandle = function() { div.find("." + editormd.classNames.tex).each(function(){ var tex = $(this); katex.render(tex.html().replace(/</g, "<").replace(/>/g, ">"), tex[0]); tex.find(".katex").css("font-size", "1.6em"); }); }; if (settings.autoLoadKaTeX && !editormd.$katex && !editormd.kaTeXLoaded) { this.loadKaTeX(function() { editormd.$katex = katex; editormd.kaTeXLoaded = true; katexHandle(); }); } else { katexHandle(); } } div.getMarkdown = function() { return saveTo.val(); }; return div; }; // Editor.md themes, change toolbar themes etc. // added @1.5.0 editormd.themes = ["default", "dark"]; // Preview area themes // added @1.5.0 editormd.previewThemes = ["default", "dark"]; // CodeMirror / editor area themes // @1.5.0 rename -> editorThemes, old version -> themes editormd.editorThemes = [ "default", "3024-day", "3024-night", "ambiance", "ambiance-mobile", "base16-dark", "base16-light", "blackboard", "cobalt", "eclipse", "elegant", "erlang-dark", "lesser-dark", "mbo", "mdn-like", "midnight", "monokai", "neat", "neo", "night", "paraiso-dark", "paraiso-light", "pastel-on-dark", "rubyblue", "solarized", "the-matrix", "tomorrow-night-eighties", "twilight", "vibrant-ink", "xq-dark", "xq-light" ]; editormd.loadPlugins = {}; editormd.loadFiles = { js : [], css : [], plugin : [] }; /** * 动态加载Editor.md插件,但不立即执行 * Load editor.md plugins * * @param {String} fileName 插件文件路径 * @param {Function} [callback=function()] 加载成功后执行的回调函数 * @param {String} [into="head"] 嵌入页面的位置 */ editormd.loadPlugin = function(fileName, callback, into) { callback = callback || function() {}; this.loadScript(fileName, function() { editormd.loadFiles.plugin.push(fileName); callback(); }, into); }; /** * 动态加载CSS文件的方法 * Load css file method * * @param {String} fileName CSS文件名 * @param {Function} [callback=function()] 加载成功后执行的回调函数 * @param {String} [into="head"] 嵌入页面的位置 */ editormd.loadCSS = function(fileName, callback, into) { into = into || "head"; callback = callback || function() {}; var css = document.createElement("link"); css.type = "text/css"; css.rel = "stylesheet"; css.onload = css.onreadystatechange = function() { editormd.loadFiles.css.push(fileName); callback(); }; css.href = fileName + ".css"; if(into === "head") { document.getElementsByTagName("head")[0].appendChild(css); } else { document.body.appendChild(css); } }; editormd.isIE = (navigator.appName == "Microsoft Internet Explorer"); editormd.isIE8 = (editormd.isIE && navigator.appVersion.match(/8./i) == "8."); /** * 动态加载JS文件的方法 * Load javascript file method * * @param {String} fileName JS文件名 * @param {Function} [callback=function()] 加载成功后执行的回调函数 * @param {String} [into="head"] 嵌入页面的位置 */ editormd.loadScript = function(fileName, callback, into) { into = into || "head"; callback = callback || function() {}; var script = null; script = document.createElement("script"); script.id = fileName.replace(/[\./]+/g, "-"); script.type = "text/javascript"; script.src = fileName + ".js"; if (editormd.isIE8) { script.onreadystatechange = function() { if(script.readyState) { if (script.readyState === "loaded" || script.readyState === "complete") { script.onreadystatechange = null; editormd.loadFiles.js.push(fileName); callback(); } } }; } else { script.onload = function() { editormd.loadFiles.js.push(fileName); callback(); }; } if (into === "head") { document.getElementsByTagName("head")[0].appendChild(script); } else { document.body.appendChild(script); } }; // 使用国外的CDN,加载速度有时会很慢,或者自定义URL // You can custom KaTeX load url. editormd.katexURL = { css : "//cdnjs.cloudflare.com/ajax/libs/KaTeX/0.3.0/katex.min", js : "//cdnjs.cloudflare.com/ajax/libs/KaTeX/0.3.0/katex.min" }; editormd.kaTeXLoaded = false; /** * 加载KaTeX文件 * load KaTeX files * * @param {Function} [callback=function()] 加载成功后执行的回调函数 */ editormd.loadKaTeX = function (callback) { editormd.loadCSS(editormd.katexURL.css, function(){ editormd.loadScript(editormd.katexURL.js, callback || function(){}); }); }; /** * 锁屏 * lock screen * * @param {Boolean} lock Boolean 布尔值,是否锁屏 * @returns {void} */ editormd.lockScreen = function(lock) { $("html,body").css("overflow", (lock) ? "hidden" : ""); }; /** * 动态创建对话框 * Creating custom dialogs * * @param {Object} options 配置项键值对 Key/Value * @returns {dialog} 返回创建的dialog的jQuery实例对象 */ editormd.createDialog = function(options) { var defaults = { name : "", width : 420, height: 240, title : "", drag : true, closed : true, content : "", mask : true, maskStyle : { backgroundColor : "#fff", opacity : 0.1 }, lockScreen : true, footer : true, buttons : false }; options = $.extend(true, defaults, options); var $this = this; var editor = this.editor; var classPrefix = editormd.classPrefix; var guid = (new Date()).getTime(); var dialogName = ( (options.name === "") ? classPrefix + "dialog-" + guid : options.name); var mouseOrTouch = editormd.mouseOrTouch; var html = "
              "; if (options.title !== "") { html += "
              "; html += "" + options.title + ""; html += "
              "; } if (options.closed) { html += ""; } html += "
              " + options.content; if (options.footer || typeof options.footer === "string") { html += "
              " + ( (typeof options.footer === "boolean") ? "" : options.footer) + "
              "; } html += "
              "; html += "
              "; html += "
              "; html += "
              "; editor.append(html); var dialog = editor.find("." + dialogName); dialog.lockScreen = function(lock) { if (options.lockScreen) { $("html,body").css("overflow", (lock) ? "hidden" : ""); $this.resize(); } return dialog; }; dialog.showMask = function() { if (options.mask) { editor.find("." + classPrefix + "mask").css(options.maskStyle).css("z-index", editormd.dialogZindex - 1).show(); } return dialog; }; dialog.hideMask = function() { if (options.mask) { editor.find("." + classPrefix + "mask").hide(); } return dialog; }; dialog.loading = function(show) { var loading = dialog.find("." + classPrefix + "dialog-mask"); loading[(show) ? "show" : "hide"](); return dialog; }; dialog.lockScreen(true).showMask(); dialog.show().css({ zIndex : editormd.dialogZindex, border : (editormd.isIE8) ? "1px solid #ddd" : "", width : (typeof options.width === "number") ? options.width + "px" : options.width, height : (typeof options.height === "number") ? options.height + "px" : options.height }); var dialogPosition = function(){ dialog.css({ top : ($(window).height() - dialog.height()) / 2 + "px", left : ($(window).width() - dialog.width()) / 2 + "px" }); }; dialogPosition(); $(window).resize(dialogPosition); dialog.children("." + classPrefix + "dialog-close").bind(mouseOrTouch("click", "touchend"), function() { dialog.hide().lockScreen(false).hideMask(); }); if (typeof options.buttons === "object") { var footer = dialog.footer = dialog.find("." + classPrefix + "dialog-footer"); for (var key in options.buttons) { var btn = options.buttons[key]; var btnClassName = classPrefix + key + "-btn"; footer.append(""); btn[1] = $.proxy(btn[1], dialog); footer.children("." + btnClassName).bind(mouseOrTouch("click", "touchend"), btn[1]); } } if (options.title !== "" && options.drag) { var posX, posY; var dialogHeader = dialog.children("." + classPrefix + "dialog-header"); if (!options.mask) { dialogHeader.bind(mouseOrTouch("click", "touchend"), function(){ editormd.dialogZindex += 2; dialog.css("z-index", editormd.dialogZindex); }); } dialogHeader.mousedown(function(e) { e = e || window.event; //IE posX = e.clientX - parseInt(dialog[0].style.left); posY = e.clientY - parseInt(dialog[0].style.top); document.onmousemove = moveAction; }); var userCanSelect = function (obj) { obj.removeClass(classPrefix + "user-unselect").off("selectstart"); }; var userUnselect = function (obj) { obj.addClass(classPrefix + "user-unselect").on("selectstart", function(event) { // selectstart for IE return false; }); }; var moveAction = function (e) { e = e || window.event; //IE var left, top, nowLeft = parseInt(dialog[0].style.left), nowTop = parseInt(dialog[0].style.top); if( nowLeft >= 0 ) { if( nowLeft + dialog.width() <= $(window).width()) { left = e.clientX - posX; } else { left = $(window).width() - dialog.width(); document.onmousemove = null; } } else { left = 0; document.onmousemove = null; } if( nowTop >= 0 ) { top = e.clientY - posY; } else { top = 0; document.onmousemove = null; } document.onselectstart = function() { return false; }; userUnselect($("body")); userUnselect(dialog); dialog[0].style.left = left + "px"; dialog[0].style.top = top + "px"; }; document.onmouseup = function() { userCanSelect($("body")); userCanSelect(dialog); document.onselectstart = null; document.onmousemove = null; }; dialogHeader.touchDraggable = function() { var offset = null; var start = function(e) { var orig = e.originalEvent; var pos = $(this).parent().position(); offset = { x : orig.changedTouches[0].pageX - pos.left, y : orig.changedTouches[0].pageY - pos.top }; }; var move = function(e) { e.preventDefault(); var orig = e.originalEvent; $(this).parent().css({ top : orig.changedTouches[0].pageY - offset.y, left : orig.changedTouches[0].pageX - offset.x }); }; this.bind("touchstart", start).bind("touchmove", move); }; dialogHeader.touchDraggable(); } editormd.dialogZindex += 2; return dialog; }; /** * 鼠标和触摸事件的判断/选择方法 * MouseEvent or TouchEvent type switch * * @param {String} [mouseEventType="click"] 供选择的鼠标事件 * @param {String} [touchEventType="touchend"] 供选择的触摸事件 * @returns {String} EventType 返回事件类型名称 */ editormd.mouseOrTouch = function(mouseEventType, touchEventType) { mouseEventType = mouseEventType || "click"; touchEventType = touchEventType || "touchend"; var eventType = mouseEventType; try { document.createEvent("TouchEvent"); eventType = touchEventType; } catch(e) {} return eventType; }; /** * 日期时间的格式化方法 * Datetime format method * * @param {String} [format=""] 日期时间的格式,类似PHP的格式 * @returns {String} datefmt 返回格式化后的日期时间字符串 */ editormd.dateFormat = function(format) { format = format || ""; var addZero = function(d) { return (d < 10) ? "0" + d : d; }; var date = new Date(); var year = date.getFullYear(); var year2 = year.toString().slice(2, 4); var month = addZero(date.getMonth() + 1); var day = addZero(date.getDate()); var weekDay = date.getDay(); var hour = addZero(date.getHours()); var min = addZero(date.getMinutes()); var second = addZero(date.getSeconds()); var ms = addZero(date.getMilliseconds()); var datefmt = ""; var ymd = year2 + "-" + month + "-" + day; var fymd = year + "-" + month + "-" + day; var hms = hour + ":" + min + ":" + second; switch (format) { case "UNIX Time" : datefmt = date.getTime(); break; case "UTC" : datefmt = date.toUTCString(); break; case "yy" : datefmt = year2; break; case "year" : case "yyyy" : datefmt = year; break; case "month" : case "mm" : datefmt = month; break; case "cn-week-day" : case "cn-wd" : var cnWeekDays = ["日", "一", "二", "三", "四", "五", "六"]; datefmt = "星期" + cnWeekDays[weekDay]; break; case "week-day" : case "wd" : var weekDays = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]; datefmt = weekDays[weekDay]; break; case "day" : case "dd" : datefmt = day; break; case "hour" : case "hh" : datefmt = hour; break; case "min" : case "ii" : datefmt = min; break; case "second" : case "ss" : datefmt = second; break; case "ms" : datefmt = ms; break; case "yy-mm-dd" : datefmt = ymd; break; case "yyyy-mm-dd" : datefmt = fymd; break; case "yyyy-mm-dd h:i:s ms" : case "full + ms" : datefmt = fymd + " " + hms + " " + ms; break; case "full" : case "yyyy-mm-dd h:i:s" : default: datefmt = fymd + " " + hms; break; } return datefmt; }; return editormd; })); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/editormd.js ================================================ /* * Editor.md * * @file editormd.js * @version v1.5.0 * @description Open source online markdown editor. * @license MIT License * @author Pandao * {@link https://github.com/pandao/editor.md} * @updateTime 2015-06-09 */ ;(function(factory) { "use strict"; // CommonJS/Node.js if (typeof require === "function" && typeof exports === "object" && typeof module === "object") { module.exports = factory; } else if (typeof define === "function") // AMD/CMD/Sea.js { if (define.amd) // for Require.js { /* Require.js define replace */ } else { define(["jquery"], factory); // for Sea.js } } else { window.editormd = factory(); } }(function() { /* Require.js assignment replace */ "use strict"; var $ = (typeof (jQuery) !== "undefined") ? jQuery : Zepto; if (typeof ($) === "undefined") { return ; } /** * editormd * * @param {String} id 编辑器的ID * @param {Object} options 配置选项 Key/Value * @returns {Object} editormd 返回editormd对象 */ var editormd = function (id, options) { return new editormd.fn.init(id, options); }; editormd.title = editormd.$name = "Editor.md"; editormd.version = "1.5.0"; editormd.homePage = "https://pandao.github.io/editor.md/"; editormd.classPrefix = "editormd-"; editormd.toolbarModes = { full : [ "undo", "redo", "|", "bold", "del", "italic", "quote", "ucwords", "uppercase", "lowercase", "|", "h1", "h2", "h3", "h4", "h5", "h6", "|", "list-ul", "list-ol", "hr", "|", "link", "reference-link", "image", "code", "preformatted-text", "code-block", "table", "datetime", "emoji", "html-entities", "pagebreak", "|", "goto-line", "watch", "preview", "fullscreen", "clear", "search", "|", "help", "info" ], simple : [ "undo", "redo", "|", "bold", "del", "italic", "quote", "uppercase", "lowercase", "|", "h1", "h2", "h3", "h4", "h5", "h6", "|", "list-ul", "list-ol", "hr", "|", "watch", "preview", "fullscreen", "|", "help", "info" ], mini : [ "undo", "redo", "|", "watch", "preview", "|", "help", "info" ] }; editormd.defaults = { mode : "gfm", //gfm or markdown name : "", // Form element name value : "", // value for CodeMirror, if mode not gfm/markdown theme : "", // Editor.md self themes, before v1.5.0 is CodeMirror theme, default empty editorTheme : "default", // Editor area, this is CodeMirror theme at v1.5.0 previewTheme : "", // Preview area theme, default empty markdown : "", // Markdown source code appendMarkdown : "", // if in init textarea value not empty, append markdown to textarea width : "100%", height : "100%", path : "./lib/", // Dependents module file directory pluginPath : "", // If this empty, default use settings.path + "../plugins/" delay : 300, // Delay parse markdown to html, Uint : ms autoLoadModules : true, // Automatic load dependent module files watch : true, placeholder : "Enjoy Markdown! coding now...", gotoLine : true, codeFold : false, autoHeight : false, autoFocus : true, autoCloseTags : true, searchReplace : true, syncScrolling : true, // true | false | "single", default true readOnly : false, tabSize : 4, indentUnit : 4, lineNumbers : true, lineWrapping : true, autoCloseBrackets : true, showTrailingSpace : true, matchBrackets : true, indentWithTabs : true, styleSelectedText : true, matchWordHighlight : true, // options: true, false, "onselected" styleActiveLine : true, // Highlight the current line dialogLockScreen : true, dialogShowMask : true, dialogDraggable : true, dialogMaskBgColor : "#fff", dialogMaskOpacity : 0.1, fontSize : "13px", saveHTMLToTextarea : false, disabledKeyMaps : [], onload : function() {}, onresize : function() {}, onchange : function() {}, onwatch : null, onunwatch : null, onpreviewing : function() {}, onpreviewed : function() {}, onfullscreen : function() {}, onfullscreenExit : function() {}, onscroll : function() {}, onpreviewscroll : function() {}, imageUpload : false, imageFormats : ["jpg", "jpeg", "gif", "png", "bmp", "webp"], imageUploadURL : "", crossDomainUpload : false, uploadCallbackURL : "", toc : true, // Table of contents tocm : false, // Using [TOCM], auto create ToC dropdown menu tocTitle : "", // for ToC dropdown menu btn tocDropdown : false, tocContainer : "", tocStartLevel : 1, // Said from H1 to create ToC htmlDecode : false, // Open the HTML tag identification pageBreak : true, // Enable parse page break [========] atLink : true, // for @link emailLink : true, // for email address auto link taskList : false, // Enable Github Flavored Markdown task lists emoji : false, // :emoji: , Support Github emoji, Twitter Emoji (Twemoji); // Support FontAwesome icon emoji :fa-xxx: > Using fontAwesome icon web fonts; // Support Editor.md logo icon emoji :editormd-logo: :editormd-logo-1x: > 1~8x; tex : false, // TeX(LaTeX), based on KaTeX flowChart : false, // flowChart.js only support IE9+ sequenceDiagram : false, // sequenceDiagram.js only support IE9+ previewCodeHighlight : true, toolbar : true, // show/hide toolbar toolbarAutoFixed : true, // on window scroll auto fixed position toolbarIcons : "full", toolbarTitles : {}, toolbarHandlers : { ucwords : function() { return editormd.toolbarHandlers.ucwords; }, lowercase : function() { return editormd.toolbarHandlers.lowercase; } }, toolbarCustomIcons : { // using html tag create toolbar icon, unused default tag. lowercase : "a", "ucwords" : "Aa" }, toolbarIconsClass : { undo : "fa-undo", redo : "fa-repeat", bold : "fa-bold", del : "fa-strikethrough", italic : "fa-italic", quote : "fa-quote-left", uppercase : "fa-font", h1 : editormd.classPrefix + "bold", h2 : editormd.classPrefix + "bold", h3 : editormd.classPrefix + "bold", h4 : editormd.classPrefix + "bold", h5 : editormd.classPrefix + "bold", h6 : editormd.classPrefix + "bold", "list-ul" : "fa-list-ul", "list-ol" : "fa-list-ol", hr : "fa-minus", link : "fa-link", "reference-link" : "fa-anchor", image : "fa-picture-o", code : "fa-code", "preformatted-text" : "fa-file-code-o", "code-block" : "fa-file-code-o", table : "fa-table", datetime : "fa-clock-o", emoji : "fa-smile-o", "html-entities" : "fa-copyright", pagebreak : "fa-newspaper-o", "goto-line" : "fa-terminal", // fa-crosshairs watch : "fa-eye-slash", unwatch : "fa-eye", preview : "fa-desktop", search : "fa-search", fullscreen : "fa-arrows-alt", clear : "fa-eraser", help : "fa-question-circle", info : "fa-info-circle" }, toolbarIconTexts : {}, lang : { name : "zh-cn", description : "开源在线Markdown编辑器
              Open source online Markdown editor.", tocTitle : "目录", toolbar : { undo : "撤销(Ctrl+Z)", redo : "重做(Ctrl+Y)", bold : "粗体", del : "删除线", italic : "斜体", quote : "引用", ucwords : "将每个单词首字母转成大写", uppercase : "将所选转换成大写", lowercase : "将所选转换成小写", h1 : "标题1", h2 : "标题2", h3 : "标题3", h4 : "标题4", h5 : "标题5", h6 : "标题6", "list-ul" : "无序列表", "list-ol" : "有序列表", hr : "横线", link : "链接", "reference-link" : "引用链接", image : "添加图片", code : "行内代码", "preformatted-text" : "预格式文本 / 代码块(缩进风格)", "code-block" : "代码块(多语言风格)", table : "添加表格", datetime : "日期时间", emoji : "Emoji表情", "html-entities" : "HTML实体字符", pagebreak : "插入分页符", "goto-line" : "跳转到行", watch : "关闭实时预览", unwatch : "开启实时预览", preview : "全窗口预览HTML(按 Shift + ESC还原)", fullscreen : "全屏(按ESC还原)", clear : "清空", search : "搜索", help : "使用帮助", info : "关于" + editormd.title }, buttons : { enter : "确定", cancel : "取消", close : "关闭" }, dialog : { link : { title : "添加链接", url : "链接地址", urlTitle : "链接标题", urlEmpty : "错误:请填写链接地址。" }, referenceLink : { title : "添加引用链接", name : "引用名称", url : "链接地址", urlId : "链接ID", urlTitle : "链接标题", nameEmpty: "错误:引用链接的名称不能为空。", idEmpty : "错误:请填写引用链接的ID。", urlEmpty : "错误:请填写引用链接的URL地址。" }, image : { title : "添加图片", url : "图片地址", link : "图片链接", alt : "图片描述", uploadButton : "本地上传", imageURLEmpty : "错误:图片地址不能为空。", uploadFileEmpty : "错误:上传的图片不能为空。", formatNotAllowed : "错误:只允许上传图片文件,允许上传的图片文件格式有:" }, preformattedText : { title : "添加预格式文本或代码块", emptyAlert : "错误:请填写预格式文本或代码的内容。" }, codeBlock : { title : "添加代码块", selectLabel : "代码语言:", selectDefaultText : "请选择代码语言", otherLanguage : "其他语言", unselectedLanguageAlert : "错误:请选择代码所属的语言类型。", codeEmptyAlert : "错误:请填写代码内容。" }, htmlEntities : { title : "HTML 实体字符" }, help : { title : "使用帮助" } } } }; editormd.classNames = { tex : editormd.classPrefix + "tex" }; editormd.dialogZindex = 99999; editormd.$katex = null; editormd.$marked = null; editormd.$CodeMirror = null; editormd.$prettyPrint = null; var timer, flowchartTimer; editormd.prototype = editormd.fn = { state : { watching : false, loaded : false, preview : false, fullscreen : false }, /** * 构造函数/实例初始化 * Constructor / instance initialization * * @param {String} id 编辑器的ID * @param {Object} [options={}] 配置选项 Key/Value * @returns {editormd} 返回editormd的实例对象 */ init : function (id, options) { options = options || {}; if (typeof id === "object") { options = id; } var _this = this; var classPrefix = this.classPrefix = editormd.classPrefix; var settings = this.settings = $.extend(true, editormd.defaults, options); id = (typeof id === "object") ? settings.id : id; var editor = this.editor = $("#" + id); this.id = id; this.lang = settings.lang; var classNames = this.classNames = { textarea : { html : classPrefix + "html-textarea", markdown : classPrefix + "markdown-textarea" } }; settings.pluginPath = (settings.pluginPath === "") ? settings.path + "../plugins/" : settings.pluginPath; this.state.watching = (settings.watch) ? true : false; if ( !editor.hasClass("editormd") ) { editor.addClass("editormd"); } editor.css({ width : (typeof settings.width === "number") ? settings.width + "px" : settings.width, height : (typeof settings.height === "number") ? settings.height + "px" : settings.height }); if (settings.autoHeight) { editor.css("height", "auto"); } var markdownTextarea = this.markdownTextarea = editor.children("textarea"); if (markdownTextarea.length < 1) { editor.append(""); markdownTextarea = this.markdownTextarea = editor.children("textarea"); } markdownTextarea.addClass(classNames.textarea.markdown).attr("placeholder", settings.placeholder); if (typeof markdownTextarea.attr("name") === "undefined" || markdownTextarea.attr("name") === "") { markdownTextarea.attr("name", (settings.name !== "") ? settings.name : id + "-markdown-doc"); } var appendElements = [ (!settings.readOnly) ? "" : "", ( (settings.saveHTMLToTextarea) ? "" : "" ), "
              ", "
              ", "
              " ].join("\n"); editor.append(appendElements).addClass(classPrefix + "vertical"); if (settings.theme !== "") { editor.addClass(classPrefix + "theme-" + settings.theme); } this.mask = editor.children("." + classPrefix + "mask"); this.containerMask = editor.children("." + classPrefix + "container-mask"); if (settings.markdown !== "") { markdownTextarea.val(settings.markdown); } if (settings.appendMarkdown !== "") { markdownTextarea.val(markdownTextarea.val() + settings.appendMarkdown); } this.htmlTextarea = editor.children("." + classNames.textarea.html); this.preview = editor.children("." + classPrefix + "preview"); this.previewContainer = this.preview.children("." + classPrefix + "preview-container"); if (settings.previewTheme !== "") { this.preview.addClass(classPrefix + "preview-theme-" + settings.previewTheme); } if (typeof define === "function" && define.amd) { if (typeof katex !== "undefined") { editormd.$katex = katex; } if (settings.searchReplace && !settings.readOnly) { editormd.loadCSS(settings.path + "codemirror/addon/dialog/dialog"); editormd.loadCSS(settings.path + "codemirror/addon/search/matchesonscrollbar"); } } if ((typeof define === "function" && define.amd) || !settings.autoLoadModules) { if (typeof CodeMirror !== "undefined") { editormd.$CodeMirror = CodeMirror; } if (typeof marked !== "undefined") { editormd.$marked = marked; } this.setCodeMirror().setToolbar().loadedDisplay(); } else { this.loadQueues(); } return this; }, /** * 所需组件加载队列 * Required components loading queue * * @returns {editormd} 返回editormd的实例对象 */ loadQueues : function() { var _this = this; var settings = this.settings; var loadPath = settings.path; var loadFlowChartOrSequenceDiagram = function() { if (editormd.isIE8) { _this.loadedDisplay(); return ; } if (settings.flowChart || settings.sequenceDiagram) { editormd.loadScript(loadPath + "raphael.min", function() { editormd.loadScript(loadPath + "underscore.min", function() { if (!settings.flowChart && settings.sequenceDiagram) { editormd.loadScript(loadPath + "sequence-diagram.min", function() { _this.loadedDisplay(); }); } else if (settings.flowChart && !settings.sequenceDiagram) { editormd.loadScript(loadPath + "flowchart.min", function() { editormd.loadScript(loadPath + "jquery.flowchart.min", function() { _this.loadedDisplay(); }); }); } else if (settings.flowChart && settings.sequenceDiagram) { editormd.loadScript(loadPath + "flowchart.min", function() { editormd.loadScript(loadPath + "jquery.flowchart.min", function() { editormd.loadScript(loadPath + "sequence-diagram.min", function() { _this.loadedDisplay(); }); }); }); } }); }); } else { _this.loadedDisplay(); } }; editormd.loadCSS(loadPath + "codemirror/codemirror.min"); if (settings.searchReplace && !settings.readOnly) { editormd.loadCSS(loadPath + "codemirror/addon/dialog/dialog"); editormd.loadCSS(loadPath + "codemirror/addon/search/matchesonscrollbar"); } if (settings.codeFold) { editormd.loadCSS(loadPath + "codemirror/addon/fold/foldgutter"); } editormd.loadScript(loadPath + "codemirror/codemirror.min", function() { editormd.$CodeMirror = CodeMirror; editormd.loadScript(loadPath + "codemirror/modes.min", function() { editormd.loadScript(loadPath + "codemirror/addons.min", function() { _this.setCodeMirror(); if (settings.mode !== "gfm" && settings.mode !== "markdown") { _this.loadedDisplay(); return false; } _this.setToolbar(); editormd.loadScript(loadPath + "marked.min", function() { editormd.$marked = marked; if (settings.previewCodeHighlight) { editormd.loadScript(loadPath + "prettify.min", function() { loadFlowChartOrSequenceDiagram(); }); } else { loadFlowChartOrSequenceDiagram(); } }); }); }); }); return this; }, /** * 设置 Editor.md 的整体主题,主要是工具栏 * Setting Editor.md theme * * @returns {editormd} 返回editormd的实例对象 */ setTheme : function(theme) { var editor = this.editor; var oldTheme = this.settings.theme; var themePrefix = this.classPrefix + "theme-"; editor.removeClass(themePrefix + oldTheme).addClass(themePrefix + theme); this.settings.theme = theme; return this; }, /** * 设置 CodeMirror(编辑区)的主题 * Setting CodeMirror (Editor area) theme * * @returns {editormd} 返回editormd的实例对象 */ setEditorTheme : function(theme) { var settings = this.settings; settings.editorTheme = theme; if (theme !== "default") { editormd.loadCSS(settings.path + "codemirror/theme/" + settings.editorTheme); } this.cm.setOption("theme", theme); return this; }, /** * setEditorTheme() 的别名 * setEditorTheme() alias * * @returns {editormd} 返回editormd的实例对象 */ setCodeMirrorTheme : function (theme) { this.setEditorTheme(theme); return this; }, /** * 设置 Editor.md 的主题 * Setting Editor.md theme * * @returns {editormd} 返回editormd的实例对象 */ setPreviewTheme : function(theme) { var preview = this.preview; var oldTheme = this.settings.previewTheme; var themePrefix = this.classPrefix + "preview-theme-"; preview.removeClass(themePrefix + oldTheme).addClass(themePrefix + theme); this.settings.previewTheme = theme; return this; }, /** * 配置和初始化CodeMirror组件 * CodeMirror initialization * * @returns {editormd} 返回editormd的实例对象 */ setCodeMirror : function() { var settings = this.settings; var editor = this.editor; if (settings.editorTheme !== "default") { editormd.loadCSS(settings.path + "codemirror/theme/" + settings.editorTheme); } var codeMirrorConfig = { mode : settings.mode, theme : settings.editorTheme, tabSize : settings.tabSize, dragDrop : false, autofocus : settings.autoFocus, autoCloseTags : settings.autoCloseTags, readOnly : (settings.readOnly) ? "nocursor" : false, indentUnit : settings.indentUnit, lineNumbers : settings.lineNumbers, lineWrapping : settings.lineWrapping, extraKeys : { "Ctrl-Q": function(cm) { cm.foldCode(cm.getCursor()); } }, foldGutter : settings.codeFold, gutters : ["CodeMirror-linenumbers", "CodeMirror-foldgutter"], matchBrackets : settings.matchBrackets, indentWithTabs : settings.indentWithTabs, styleActiveLine : settings.styleActiveLine, styleSelectedText : settings.styleSelectedText, autoCloseBrackets : settings.autoCloseBrackets, showTrailingSpace : settings.showTrailingSpace, highlightSelectionMatches : ( (!settings.matchWordHighlight) ? false : { showToken: (settings.matchWordHighlight === "onselected") ? false : /\w/ } ) }; this.codeEditor = this.cm = editormd.$CodeMirror.fromTextArea(this.markdownTextarea[0], codeMirrorConfig); this.codeMirror = this.cmElement = editor.children(".CodeMirror"); if (settings.value !== "") { this.cm.setValue(settings.value); } this.codeMirror.css({ fontSize : settings.fontSize, width : (!settings.watch) ? "100%" : "50%" }); if (settings.autoHeight) { this.codeMirror.css("height", "auto"); this.cm.setOption("viewportMargin", Infinity); } if (!settings.lineNumbers) { this.codeMirror.find(".CodeMirror-gutters").css("border-right", "none"); } return this; }, /** * 获取CodeMirror的配置选项 * Get CodeMirror setting options * * @returns {Mixed} return CodeMirror setting option value */ getCodeMirrorOption : function(key) { return this.cm.getOption(key); }, /** * 配置和重配置CodeMirror的选项 * CodeMirror setting options / resettings * * @returns {editormd} 返回editormd的实例对象 */ setCodeMirrorOption : function(key, value) { this.cm.setOption(key, value); return this; }, /** * 添加 CodeMirror 键盘快捷键 * Add CodeMirror keyboard shortcuts key map * * @returns {editormd} 返回editormd的实例对象 */ addKeyMap : function(map, bottom) { this.cm.addKeyMap(map, bottom); return this; }, /** * 移除 CodeMirror 键盘快捷键 * Remove CodeMirror keyboard shortcuts key map * * @returns {editormd} 返回editormd的实例对象 */ removeKeyMap : function(map) { this.cm.removeKeyMap(map); return this; }, /** * 跳转到指定的行 * Goto CodeMirror line * * @param {String|Intiger} line line number or "first"|"last" * @returns {editormd} 返回editormd的实例对象 */ gotoLine : function (line) { var settings = this.settings; if (!settings.gotoLine) { return this; } var cm = this.cm; var editor = this.editor; var count = cm.lineCount(); var preview = this.preview; if (typeof line === "string") { if(line === "last") { line = count; } if (line === "first") { line = 1; } } if (typeof line !== "number") { alert("Error: The line number must be an integer."); return this; } line = parseInt(line) - 1; if (line > count) { alert("Error: The line number range 1-" + count); return this; } cm.setCursor( {line : line, ch : 0} ); var scrollInfo = cm.getScrollInfo(); var clientHeight = scrollInfo.clientHeight; var coords = cm.charCoords({line : line, ch : 0}, "local"); cm.scrollTo(null, (coords.top + coords.bottom - clientHeight) / 2); if (settings.watch) { var cmScroll = this.codeMirror.find(".CodeMirror-scroll")[0]; var height = $(cmScroll).height(); var scrollTop = cmScroll.scrollTop; var percent = (scrollTop / cmScroll.scrollHeight); if (scrollTop === 0) { preview.scrollTop(0); } else if (scrollTop + height >= cmScroll.scrollHeight - 16) { preview.scrollTop(preview[0].scrollHeight); } else { preview.scrollTop(preview[0].scrollHeight * percent); } } cm.focus(); return this; }, /** * 扩展当前实例对象,可同时设置多个或者只设置一个 * Extend editormd instance object, can mutil setting. * * @returns {editormd} this(editormd instance object.) */ extend : function() { if (typeof arguments[1] !== "undefined") { if (typeof arguments[1] === "function") { arguments[1] = $.proxy(arguments[1], this); } this[arguments[0]] = arguments[1]; } if (typeof arguments[0] === "object" && typeof arguments[0].length === "undefined") { $.extend(true, this, arguments[0]); } return this; }, /** * 设置或扩展当前实例对象,单个设置 * Extend editormd instance object, one by one * * @param {String|Object} key option key * @param {String|Object} value option value * @returns {editormd} this(editormd instance object.) */ set : function (key, value) { if (typeof value !== "undefined" && typeof value === "function") { value = $.proxy(value, this); } this[key] = value; return this; }, /** * 重新配置 * Resetting editor options * * @param {String|Object} key option key * @param {String|Object} value option value * @returns {editormd} this(editormd instance object.) */ config : function(key, value) { var settings = this.settings; if (typeof key === "object") { settings = $.extend(true, settings, key); } if (typeof key === "string") { settings[key] = value; } this.settings = settings; this.recreate(); return this; }, /** * 注册事件处理方法 * Bind editor event handle * * @param {String} eventType event type * @param {Function} callback 回调函数 * @returns {editormd} this(editormd instance object.) */ on : function(eventType, callback) { var settings = this.settings; if (typeof settings["on" + eventType] !== "undefined") { settings["on" + eventType] = $.proxy(callback, this); } return this; }, /** * 解除事件处理方法 * Unbind editor event handle * * @param {String} eventType event type * @returns {editormd} this(editormd instance object.) */ off : function(eventType) { var settings = this.settings; if (typeof settings["on" + eventType] !== "undefined") { settings["on" + eventType] = function(){}; } return this; }, /** * 显示工具栏 * Display toolbar * * @param {Function} [callback=function(){}] 回调函数 * @returns {editormd} 返回editormd的实例对象 */ showToolbar : function(callback) { var settings = this.settings; if(settings.readOnly) { return this; } if (settings.toolbar && (this.toolbar.length < 1 || this.toolbar.find("." + this.classPrefix + "menu").html() === "") ) { this.setToolbar(); } settings.toolbar = true; this.toolbar.show(); this.resize(); $.proxy(callback || function(){}, this)(); return this; }, /** * 隐藏工具栏 * Hide toolbar * * @param {Function} [callback=function(){}] 回调函数 * @returns {editormd} this(editormd instance object.) */ hideToolbar : function(callback) { var settings = this.settings; settings.toolbar = false; this.toolbar.hide(); this.resize(); $.proxy(callback || function(){}, this)(); return this; }, /** * 页面滚动时工具栏的固定定位 * Set toolbar in window scroll auto fixed position * * @returns {editormd} 返回editormd的实例对象 */ setToolbarAutoFixed : function(fixed) { var state = this.state; var editor = this.editor; var toolbar = this.toolbar; var settings = this.settings; if (typeof fixed !== "undefined") { settings.toolbarAutoFixed = fixed; } var autoFixedHandle = function(){ var $window = $(window); var top = $window.scrollTop(); if (!settings.toolbarAutoFixed) { return false; } if (top - editor.offset().top > 10 && top < editor.height()) { toolbar.css({ position : "fixed", width : editor.width() + "px", left : ($window.width() - editor.width()) / 2 + "px" }); } else { toolbar.css({ position : "absolute", width : "100%", left : 0 }); } }; if (!state.fullscreen && !state.preview && settings.toolbar && settings.toolbarAutoFixed) { $(window).bind("scroll", autoFixedHandle); } return this; }, /** * 配置和初始化工具栏 * Set toolbar and Initialization * * @returns {editormd} 返回editormd的实例对象 */ setToolbar : function() { var settings = this.settings; if(settings.readOnly) { return this; } var editor = this.editor; var preview = this.preview; var classPrefix = this.classPrefix; var toolbar = this.toolbar = editor.children("." + classPrefix + "toolbar"); if (settings.toolbar && toolbar.length < 1) { var toolbarHTML = "
                "; editor.append(toolbarHTML); toolbar = this.toolbar = editor.children("." + classPrefix + "toolbar"); } if (!settings.toolbar) { toolbar.hide(); return this; } toolbar.show(); var icons = (typeof settings.toolbarIcons === "function") ? settings.toolbarIcons() : ((typeof settings.toolbarIcons === "string") ? editormd.toolbarModes[settings.toolbarIcons] : settings.toolbarIcons); var toolbarMenu = toolbar.find("." + this.classPrefix + "menu"), menu = ""; var pullRight = false; for (var i = 0, len = icons.length; i < len; i++) { var name = icons[i]; if (name === "||") { pullRight = true; } else if (name === "|") { menu += "
              • |
              • "; } else { var isHeader = (/h(\d)/.test(name)); var index = name; if (name === "watch" && !settings.watch) { index = "unwatch"; } var title = settings.lang.toolbar[index]; var iconTexts = settings.toolbarIconTexts[index]; var iconClass = settings.toolbarIconsClass[index]; title = (typeof title === "undefined") ? "" : title; iconTexts = (typeof iconTexts === "undefined") ? "" : iconTexts; iconClass = (typeof iconClass === "undefined") ? "" : iconClass; var menuItem = pullRight ? "
              • " : "
              • "; if (typeof settings.toolbarCustomIcons[name] !== "undefined" && typeof settings.toolbarCustomIcons[name] !== "function") { menuItem += settings.toolbarCustomIcons[name]; } else { menuItem += ""; menuItem += ""+((isHeader) ? name.toUpperCase() : ( (iconClass === "") ? iconTexts : "") ) + ""; menuItem += ""; } menuItem += "
              • "; menu = pullRight ? menuItem + menu : menu + menuItem; } } toolbarMenu.html(menu); toolbarMenu.find("[title=\"Lowercase\"]").attr("title", settings.lang.toolbar.lowercase); toolbarMenu.find("[title=\"ucwords\"]").attr("title", settings.lang.toolbar.ucwords); this.setToolbarHandler(); this.setToolbarAutoFixed(); return this; }, /** * 工具栏图标事件处理对象序列 * Get toolbar icons event handlers * * @param {Object} cm CodeMirror的实例对象 * @param {String} name 要获取的事件处理器名称 * @returns {Object} 返回处理对象序列 */ dialogLockScreen : function() { $.proxy(editormd.dialogLockScreen, this)(); return this; }, dialogShowMask : function(dialog) { $.proxy(editormd.dialogShowMask, this)(dialog); return this; }, getToolbarHandles : function(name) { var toolbarHandlers = this.toolbarHandlers = editormd.toolbarHandlers; return (name && typeof toolbarIconHandlers[name] !== "undefined") ? toolbarHandlers[name] : toolbarHandlers; }, /** * 工具栏图标事件处理器 * Bind toolbar icons event handle * * @returns {editormd} 返回editormd的实例对象 */ setToolbarHandler : function() { var _this = this; var settings = this.settings; if (!settings.toolbar || settings.readOnly) { return this; } var toolbar = this.toolbar; var cm = this.cm; var classPrefix = this.classPrefix; var toolbarIcons = this.toolbarIcons = toolbar.find("." + classPrefix + "menu > li > a"); var toolbarIconHandlers = this.getToolbarHandles(); toolbarIcons.bind(editormd.mouseOrTouch("click", "touchend"), function(event) { var icon = $(this).children(".fa"); var name = icon.attr("name"); var cursor = cm.getCursor(); var selection = cm.getSelection(); if (name === "") { return ; } _this.activeIcon = icon; if (typeof toolbarIconHandlers[name] !== "undefined") { $.proxy(toolbarIconHandlers[name], _this)(cm); } else { if (typeof settings.toolbarHandlers[name] !== "undefined") { $.proxy(settings.toolbarHandlers[name], _this)(cm, icon, cursor, selection); } } if (name !== "link" && name !== "reference-link" && name !== "image" && name !== "code-block" && name !== "preformatted-text" && name !== "watch" && name !== "preview" && name !== "search" && name !== "fullscreen" && name !== "info") { cm.focus(); } return false; }); return this; }, /** * 动态创建对话框 * Creating custom dialogs * * @param {Object} options 配置项键值对 Key/Value * @returns {dialog} 返回创建的dialog的jQuery实例对象 */ createDialog : function(options) { return $.proxy(editormd.createDialog, this)(options); }, /** * 创建关于Editor.md的对话框 * Create about Editor.md dialog * * @returns {editormd} 返回editormd的实例对象 */ createInfoDialog : function() { var _this = this; var editor = this.editor; var classPrefix = this.classPrefix; var infoDialogHTML = [ "
                ", "
                ", "

                " + editormd.title + "v" + editormd.version + "

                ", "

                " + this.lang.description + "

                ", "

                " + editormd.homePage + "

                ", "

                Copyright © 2015 Pandao, The MIT License.

                ", "
                ", "", "
                " ].join("\n"); editor.append(infoDialogHTML); var infoDialog = this.infoDialog = editor.children("." + classPrefix + "dialog-info"); infoDialog.find("." + classPrefix + "dialog-close").bind(editormd.mouseOrTouch("click", "touchend"), function() { _this.hideInfoDialog(); }); infoDialog.css("border", (editormd.isIE8) ? "1px solid #ddd" : "").css("z-index", editormd.dialogZindex).show(); this.infoDialogPosition(); return this; }, /** * 关于Editor.md对话居中定位 * Editor.md dialog position handle * * @returns {editormd} 返回editormd的实例对象 */ infoDialogPosition : function() { var infoDialog = this.infoDialog; var _infoDialogPosition = function() { infoDialog.css({ top : ($(window).height() - infoDialog.height()) / 2 + "px", left : ($(window).width() - infoDialog.width()) / 2 + "px" }); }; _infoDialogPosition(); $(window).resize(_infoDialogPosition); return this; }, /** * 显示关于Editor.md * Display about Editor.md dialog * * @returns {editormd} 返回editormd的实例对象 */ showInfoDialog : function() { $("html,body").css("overflow-x", "hidden"); var _this = this; var editor = this.editor; var settings = this.settings; var infoDialog = this.infoDialog = editor.children("." + this.classPrefix + "dialog-info"); if (infoDialog.length < 1) { this.createInfoDialog(); } this.lockScreen(true); this.mask.css({ opacity : settings.dialogMaskOpacity, backgroundColor : settings.dialogMaskBgColor }).show(); infoDialog.css("z-index", editormd.dialogZindex).show(); this.infoDialogPosition(); return this; }, /** * 隐藏关于Editor.md * Hide about Editor.md dialog * * @returns {editormd} 返回editormd的实例对象 */ hideInfoDialog : function() { $("html,body").css("overflow-x", ""); this.infoDialog.hide(); this.mask.hide(); this.lockScreen(false); return this; }, /** * 锁屏 * lock screen * * @param {Boolean} lock Boolean 布尔值,是否锁屏 * @returns {editormd} 返回editormd的实例对象 */ lockScreen : function(lock) { editormd.lockScreen(lock); this.resize(); return this; }, /** * 编辑器界面重建,用于动态语言包或模块加载等 * Recreate editor * * @returns {editormd} 返回editormd的实例对象 */ recreate : function() { var _this = this; var editor = this.editor; var settings = this.settings; this.codeMirror.remove(); this.setCodeMirror(); if (!settings.readOnly) { if (editor.find(".editormd-dialog").length > 0) { editor.find(".editormd-dialog").remove(); } if (settings.toolbar) { this.getToolbarHandles(); this.setToolbar(); } } this.loadedDisplay(true); return this; }, /** * 高亮预览HTML的pre代码部分 * highlight of preview codes * * @returns {editormd} 返回editormd的实例对象 */ previewCodeHighlight : function() { var settings = this.settings; var previewContainer = this.previewContainer; if (settings.previewCodeHighlight) { previewContainer.find("pre").addClass("prettyprint linenums"); if (typeof prettyPrint !== "undefined") { prettyPrint(); } } return this; }, /** * 解析TeX(KaTeX)科学公式 * TeX(KaTeX) Renderer * * @returns {editormd} 返回editormd的实例对象 */ katexRender : function() { if (timer === null) { return this; } this.previewContainer.find("." + editormd.classNames.tex).each(function(){ var tex = $(this); editormd.$katex.render(tex.text(), tex[0]); tex.find(".katex").css("font-size", "1.6em"); }); return this; }, /** * 解析和渲染流程图及时序图 * FlowChart and SequenceDiagram Renderer * * @returns {editormd} 返回editormd的实例对象 */ flowChartAndSequenceDiagramRender : function() { var $this = this; var settings = this.settings; var previewContainer = this.previewContainer; if (editormd.isIE8) { return this; } if (settings.flowChart) { if (flowchartTimer === null) { return this; } previewContainer.find(".flowchart").flowChart(); } if (settings.sequenceDiagram) { previewContainer.find(".sequence-diagram").sequenceDiagram({theme: "simple"}); } var preview = $this.preview; var codeMirror = $this.codeMirror; var codeView = codeMirror.find(".CodeMirror-scroll"); var height = codeView.height(); var scrollTop = codeView.scrollTop(); var percent = (scrollTop / codeView[0].scrollHeight); var tocHeight = 0; preview.find(".markdown-toc-list").each(function(){ tocHeight += $(this).height(); }); var tocMenuHeight = preview.find(".editormd-toc-menu").height(); tocMenuHeight = (!tocMenuHeight) ? 0 : tocMenuHeight; if (scrollTop === 0) { preview.scrollTop(0); } else if (scrollTop + height >= codeView[0].scrollHeight - 16) { preview.scrollTop(preview[0].scrollHeight); } else { preview.scrollTop((preview[0].scrollHeight + tocHeight + tocMenuHeight) * percent); } return this; }, /** * 注册键盘快捷键处理 * Register CodeMirror keyMaps (keyboard shortcuts). * * @param {Object} keyMap KeyMap key/value {"(Ctrl/Shift/Alt)-Key" : function(){}} * @returns {editormd} return this */ registerKeyMaps : function(keyMap) { var _this = this; var cm = this.cm; var settings = this.settings; var toolbarHandlers = editormd.toolbarHandlers; var disabledKeyMaps = settings.disabledKeyMaps; keyMap = keyMap || null; if (keyMap) { for (var i in keyMap) { if ($.inArray(i, disabledKeyMaps) < 0) { var map = {}; map[i] = keyMap[i]; cm.addKeyMap(keyMap); } } } else { for (var k in editormd.keyMaps) { var _keyMap = editormd.keyMaps[k]; var handle = (typeof _keyMap === "string") ? $.proxy(toolbarHandlers[_keyMap], _this) : $.proxy(_keyMap, _this); if ($.inArray(k, ["F9", "F10", "F11"]) < 0 && $.inArray(k, disabledKeyMaps) < 0) { var _map = {}; _map[k] = handle; cm.addKeyMap(_map); } } $(window).keydown(function(event) { var keymaps = { "120" : "F9", "121" : "F10", "122" : "F11" }; if ( $.inArray(keymaps[event.keyCode], disabledKeyMaps) < 0 ) { switch (event.keyCode) { case 120: $.proxy(toolbarHandlers["watch"], _this)(); return false; break; case 121: $.proxy(toolbarHandlers["preview"], _this)(); return false; break; case 122: $.proxy(toolbarHandlers["fullscreen"], _this)(); return false; break; default: break; } } }); } return this; }, /** * 绑定同步滚动 * * @returns {editormd} return this */ bindScrollEvent : function() { var _this = this; var preview = this.preview; var settings = this.settings; var codeMirror = this.codeMirror; var mouseOrTouch = editormd.mouseOrTouch; if (!settings.syncScrolling) { return this; } var cmBindScroll = function() { codeMirror.find(".CodeMirror-scroll").bind(mouseOrTouch("scroll", "touchmove"), function(event) { var height = $(this).height(); var scrollTop = $(this).scrollTop(); var percent = (scrollTop / $(this)[0].scrollHeight); var tocHeight = 0; preview.find(".markdown-toc-list").each(function(){ tocHeight += $(this).height(); }); var tocMenuHeight = preview.find(".editormd-toc-menu").height(); tocMenuHeight = (!tocMenuHeight) ? 0 : tocMenuHeight; if (scrollTop === 0) { preview.scrollTop(0); } else if (scrollTop + height >= $(this)[0].scrollHeight - 16) { preview.scrollTop(preview[0].scrollHeight); } else { preview.scrollTop((preview[0].scrollHeight + tocHeight + tocMenuHeight) * percent); } $.proxy(settings.onscroll, _this)(event); }); }; var cmUnbindScroll = function() { codeMirror.find(".CodeMirror-scroll").unbind(mouseOrTouch("scroll", "touchmove")); }; var previewBindScroll = function() { preview.bind(mouseOrTouch("scroll", "touchmove"), function(event) { var height = $(this).height(); var scrollTop = $(this).scrollTop(); var percent = (scrollTop / $(this)[0].scrollHeight); var codeView = codeMirror.find(".CodeMirror-scroll"); if(scrollTop === 0) { codeView.scrollTop(0); } else if (scrollTop + height >= $(this)[0].scrollHeight) { codeView.scrollTop(codeView[0].scrollHeight); } else { codeView.scrollTop(codeView[0].scrollHeight * percent); } $.proxy(settings.onpreviewscroll, _this)(event); }); }; var previewUnbindScroll = function() { preview.unbind(mouseOrTouch("scroll", "touchmove")); }; codeMirror.bind({ mouseover : cmBindScroll, mouseout : cmUnbindScroll, touchstart : cmBindScroll, touchend : cmUnbindScroll }); if (settings.syncScrolling === "single") { return this; } preview.bind({ mouseover : previewBindScroll, mouseout : previewUnbindScroll, touchstart : previewBindScroll, touchend : previewUnbindScroll }); return this; }, bindChangeEvent : function() { var _this = this; var cm = this.cm; var settings = this.settings; if (!settings.syncScrolling) { return this; } cm.on("change", function(_cm, changeObj) { if (settings.watch) { _this.previewContainer.css("padding", settings.autoHeight ? "20px 20px 50px 40px" : "20px"); } timer = setTimeout(function() { clearTimeout(timer); _this.save(); timer = null; }, settings.delay); }); return this; }, /** * 加载队列完成之后的显示处理 * Display handle of the module queues loaded after. * * @param {Boolean} recreate 是否为重建编辑器 * @returns {editormd} 返回editormd的实例对象 */ loadedDisplay : function(recreate) { recreate = recreate || false; var _this = this; var editor = this.editor; var preview = this.preview; var settings = this.settings; this.containerMask.hide(); this.save(); if (settings.watch) { preview.show(); } editor.data("oldWidth", editor.width()).data("oldHeight", editor.height()); // 为了兼容Zepto this.resize(); this.registerKeyMaps(); $(window).resize(function(){ _this.resize(); }); this.bindScrollEvent().bindChangeEvent(); if (!recreate) { $.proxy(settings.onload, this)(); } this.state.loaded = true; return this; }, /** * 设置编辑器的宽度 * Set editor width * * @param {Number|String} width 编辑器宽度值 * @returns {editormd} 返回editormd的实例对象 */ width : function(width) { this.editor.css("width", (typeof width === "number") ? width + "px" : width); this.resize(); return this; }, /** * 设置编辑器的高度 * Set editor height * * @param {Number|String} height 编辑器高度值 * @returns {editormd} 返回editormd的实例对象 */ height : function(height) { this.editor.css("height", (typeof height === "number") ? height + "px" : height); this.resize(); return this; }, /** * 调整编辑器的尺寸和布局 * Resize editor layout * * @param {Number|String} [width=null] 编辑器宽度值 * @param {Number|String} [height=null] 编辑器高度值 * @returns {editormd} 返回editormd的实例对象 */ resize : function(width, height) { width = width || null; height = height || null; var state = this.state; var editor = this.editor; var preview = this.preview; var toolbar = this.toolbar; var settings = this.settings; var codeMirror = this.codeMirror; if (width) { editor.css("width", (typeof width === "number") ? width + "px" : width); } if (settings.autoHeight && !state.fullscreen && !state.preview) { editor.css("height", "auto"); codeMirror.css("height", "auto"); } else { if (height) { editor.css("height", (typeof height === "number") ? height + "px" : height); } if (state.fullscreen) { editor.height($(window).height()); } if (settings.toolbar && !settings.readOnly) { codeMirror.css("margin-top", toolbar.height() + 1).height(editor.height() - toolbar.height()); } else { codeMirror.css("margin-top", 0).height(editor.height()); } } if(settings.watch) { codeMirror.width(editor.width() / 2); preview.width((!state.preview) ? editor.width() / 2 : editor.width()); this.previewContainer.css("padding", settings.autoHeight ? "20px 20px 50px 40px" : "20px"); if (settings.toolbar && !settings.readOnly) { preview.css("top", toolbar.height() + 1); } else { preview.css("top", 0); } if (settings.autoHeight && !state.fullscreen && !state.preview) { preview.height(""); } else { var previewHeight = (settings.toolbar && !settings.readOnly) ? editor.height() - toolbar.height() : editor.height(); preview.height(previewHeight); } } else { codeMirror.width(editor.width()); preview.hide(); } if (state.loaded) { $.proxy(settings.onresize, this)(); } return this; }, /** * 解析和保存Markdown代码 * Parse & Saving Markdown source code * * @returns {editormd} 返回editormd的实例对象 */ save : function() { if (timer === null) { return this; } var _this = this; var state = this.state; var settings = this.settings; var cm = this.cm; var cmValue = cm.getValue(); var previewContainer = this.previewContainer; if (settings.mode !== "gfm" && settings.mode !== "markdown") { this.markdownTextarea.val(cmValue); return this; } var marked = editormd.$marked; var markdownToC = this.markdownToC = []; var rendererOptions = this.markedRendererOptions = { toc : settings.toc, tocm : settings.tocm, tocStartLevel : settings.tocStartLevel, pageBreak : settings.pageBreak, taskList : settings.taskList, emoji : settings.emoji, tex : settings.tex, atLink : settings.atLink, // for @link emailLink : settings.emailLink, // for mail address auto link flowChart : settings.flowChart, sequenceDiagram : settings.sequenceDiagram, previewCodeHighlight : settings.previewCodeHighlight, }; var markedOptions = this.markedOptions = { renderer : editormd.markedRenderer(markdownToC, rendererOptions), gfm : true, tables : true, breaks : true, pedantic : false, sanitize : (settings.htmlDecode) ? false : true, // 关闭忽略HTML标签,即开启识别HTML标签,默认为false smartLists : true, smartypants : true }; marked.setOptions(markedOptions); var newMarkdownDoc = editormd.$marked(cmValue, markedOptions); //console.info("cmValue", cmValue, newMarkdownDoc); newMarkdownDoc = editormd.filterHTMLTags(newMarkdownDoc, settings.htmlDecode); //console.error("cmValue", cmValue, newMarkdownDoc); this.markdownTextarea.text(cmValue); cm.save(); if (settings.saveHTMLToTextarea) { this.htmlTextarea.text(newMarkdownDoc); } if(settings.watch || (!settings.watch && state.preview)) { previewContainer.html(newMarkdownDoc); this.previewCodeHighlight(); if (settings.toc) { var tocContainer = (settings.tocContainer === "") ? previewContainer : $(settings.tocContainer); var tocMenu = tocContainer.find("." + this.classPrefix + "toc-menu"); tocContainer.attr("previewContainer", (settings.tocContainer === "") ? "true" : "false"); if (settings.tocContainer !== "" && tocMenu.length > 0) { tocMenu.remove(); } editormd.markdownToCRenderer(markdownToC, tocContainer, settings.tocDropdown, settings.tocStartLevel); if (settings.tocDropdown || tocContainer.find("." + this.classPrefix + "toc-menu").length > 0) { editormd.tocDropdownMenu(tocContainer, (settings.tocTitle !== "") ? settings.tocTitle : this.lang.tocTitle); } if (settings.tocContainer !== "") { previewContainer.find(".markdown-toc").css("border", "none"); } } if (settings.tex) { if (!editormd.kaTeXLoaded && settings.autoLoadModules) { editormd.loadKaTeX(function() { editormd.$katex = katex; editormd.kaTeXLoaded = true; _this.katexRender(); }); } else { editormd.$katex = katex; this.katexRender(); } } if (settings.flowChart || settings.sequenceDiagram) { flowchartTimer = setTimeout(function(){ clearTimeout(flowchartTimer); _this.flowChartAndSequenceDiagramRender(); flowchartTimer = null; }, 10); } if (state.loaded) { $.proxy(settings.onchange, this)(); } } return this; }, /** * 聚焦光标位置 * Focusing the cursor position * * @returns {editormd} 返回editormd的实例对象 */ focus : function() { this.cm.focus(); return this; }, /** * 设置光标的位置 * Set cursor position * * @param {Object} cursor 要设置的光标位置键值对象,例:{line:1, ch:0} * @returns {editormd} 返回editormd的实例对象 */ setCursor : function(cursor) { this.cm.setCursor(cursor); return this; }, /** * 获取当前光标的位置 * Get the current position of the cursor * * @returns {Cursor} 返回一个光标Cursor对象 */ getCursor : function() { return this.cm.getCursor(); }, /** * 设置光标选中的范围 * Set cursor selected ranges * * @param {Object} from 开始位置的光标键值对象,例:{line:1, ch:0} * @param {Object} to 结束位置的光标键值对象,例:{line:1, ch:0} * @returns {editormd} 返回editormd的实例对象 */ setSelection : function(from, to) { this.cm.setSelection(from, to); return this; }, /** * 获取光标选中的文本 * Get the texts from cursor selected * * @returns {String} 返回选中文本的字符串形式 */ getSelection : function() { return this.cm.getSelection(); }, /** * 设置光标选中的文本范围 * Set the cursor selection ranges * * @param {Array} ranges cursor selection ranges array * @returns {Array} return this */ setSelections : function(ranges) { this.cm.setSelections(ranges); return this; }, /** * 获取光标选中的文本范围 * Get the cursor selection ranges * * @returns {Array} return selection ranges array */ getSelections : function() { return this.cm.getSelections(); }, /** * 替换当前光标选中的文本或在当前光标处插入新字符 * Replace the text at the current cursor selected or insert a new character at the current cursor position * * @param {String} value 要插入的字符值 * @returns {editormd} 返回editormd的实例对象 */ replaceSelection : function(value) { this.cm.replaceSelection(value); return this; }, /** * 在当前光标处插入新字符 * Insert a new character at the current cursor position * * 同replaceSelection()方法 * With the replaceSelection() method * * @param {String} value 要插入的字符值 * @returns {editormd} 返回editormd的实例对象 */ insertValue : function(value) { this.replaceSelection(value); return this; }, /** * 追加markdown * append Markdown to editor * * @param {String} md 要追加的markdown源文档 * @returns {editormd} 返回editormd的实例对象 */ appendMarkdown : function(md) { var settings = this.settings; var cm = this.cm; cm.setValue(cm.getValue() + md); return this; }, /** * 设置和传入编辑器的markdown源文档 * Set Markdown source document * * @param {String} md 要传入的markdown源文档 * @returns {editormd} 返回editormd的实例对象 */ setMarkdown : function(md) { this.cm.setValue(md || this.settings.markdown); return this; }, /** * 获取编辑器的markdown源文档 * Set Editor.md markdown/CodeMirror value * * @returns {editormd} 返回editormd的实例对象 */ getMarkdown : function() { return this.cm.getValue(); }, /** * 获取编辑器的源文档 * Get CodeMirror value * * @returns {editormd} 返回editormd的实例对象 */ getValue : function() { return this.cm.getValue(); }, /** * 设置编辑器的源文档 * Set CodeMirror value * * @param {String} value set code/value/string/text * @returns {editormd} 返回editormd的实例对象 */ setValue : function(value) { this.cm.setValue(value); return this; }, /** * 清空编辑器 * Empty CodeMirror editor container * * @returns {editormd} 返回editormd的实例对象 */ clear : function() { this.cm.setValue(""); return this; }, /** * 获取解析后存放在Textarea的HTML源码 * Get parsed html code from Textarea * * @returns {String} 返回HTML源码 */ getHTML : function() { if (!this.settings.saveHTMLToTextarea) { alert("Error: settings.saveHTMLToTextarea == false"); return false; } return this.htmlTextarea.val(); }, /** * getHTML()的别名 * getHTML (alias) * * @returns {String} Return html code 返回HTML源码 */ getTextareaSavedHTML : function() { return this.getHTML(); }, /** * 获取预览窗口的HTML源码 * Get html from preview container * * @returns {editormd} 返回editormd的实例对象 */ getPreviewedHTML : function() { if (!this.settings.watch) { alert("Error: settings.watch == false"); return false; } return this.previewContainer.html(); }, /** * 开启实时预览 * Enable real-time watching * * @returns {editormd} 返回editormd的实例对象 */ watch : function(callback) { var settings = this.settings; if ($.inArray(settings.mode, ["gfm", "markdown"]) < 0) { return this; } this.state.watching = settings.watch = true; this.preview.show(); if (this.toolbar) { var watchIcon = settings.toolbarIconsClass.watch; var unWatchIcon = settings.toolbarIconsClass.unwatch; var icon = this.toolbar.find(".fa[name=watch]"); icon.parent().attr("title", settings.lang.toolbar.watch); icon.removeClass(unWatchIcon).addClass(watchIcon); } this.codeMirror.css("border-right", "1px solid #ddd").width(this.editor.width() / 2); timer = 0; this.save().resize(); if (!settings.onwatch) { settings.onwatch = callback || function() {}; } $.proxy(settings.onwatch, this)(); return this; }, /** * 关闭实时预览 * Disable real-time watching * * @returns {editormd} 返回editormd的实例对象 */ unwatch : function(callback) { var settings = this.settings; this.state.watching = settings.watch = false; this.preview.hide(); if (this.toolbar) { var watchIcon = settings.toolbarIconsClass.watch; var unWatchIcon = settings.toolbarIconsClass.unwatch; var icon = this.toolbar.find(".fa[name=watch]"); icon.parent().attr("title", settings.lang.toolbar.unwatch); icon.removeClass(watchIcon).addClass(unWatchIcon); } this.codeMirror.css("border-right", "none").width(this.editor.width()); this.resize(); if (!settings.onunwatch) { settings.onunwatch = callback || function() {}; } $.proxy(settings.onunwatch, this)(); return this; }, /** * 显示编辑器 * Show editor * * @param {Function} [callback=function()] 回调函数 * @returns {editormd} 返回editormd的实例对象 */ show : function(callback) { callback = callback || function() {}; var _this = this; this.editor.show(0, function() { $.proxy(callback, _this)(); }); return this; }, /** * 隐藏编辑器 * Hide editor * * @param {Function} [callback=function()] 回调函数 * @returns {editormd} 返回editormd的实例对象 */ hide : function(callback) { callback = callback || function() {}; var _this = this; this.editor.hide(0, function() { $.proxy(callback, _this)(); }); return this; }, /** * 隐藏编辑器部分,只预览HTML * Enter preview html state * * @returns {editormd} 返回editormd的实例对象 */ previewing : function() { var _this = this; var editor = this.editor; var preview = this.preview; var toolbar = this.toolbar; var settings = this.settings; var codeMirror = this.codeMirror; var previewContainer = this.previewContainer; if ($.inArray(settings.mode, ["gfm", "markdown"]) < 0) { return this; } if (settings.toolbar && toolbar) { toolbar.toggle(); toolbar.find(".fa[name=preview]").toggleClass("active"); } codeMirror.toggle(); var escHandle = function(event) { if (event.shiftKey && event.keyCode === 27) { _this.previewed(); } }; if (codeMirror.css("display") === "none") // 为了兼容Zepto,而不使用codeMirror.is(":hidden") { this.state.preview = true; if (this.state.fullscreen) { preview.css("background", "#fff"); } editor.find("." + this.classPrefix + "preview-close-btn").show().bind(editormd.mouseOrTouch("click", "touchend"), function(){ _this.previewed(); }); if (!settings.watch) { this.save(); } else { previewContainer.css("padding", ""); } previewContainer.addClass(this.classPrefix + "preview-active"); preview.show().css({ position : "", top : 0, width : editor.width(), height : (settings.autoHeight && !this.state.fullscreen) ? "auto" : editor.height() }); if (this.state.loaded) { $.proxy(settings.onpreviewing, this)(); } $(window).bind("keyup", escHandle); } else { $(window).unbind("keyup", escHandle); this.previewed(); } }, /** * 显示编辑器部分,退出只预览HTML * Exit preview html state * * @returns {editormd} 返回editormd的实例对象 */ previewed : function() { var editor = this.editor; var preview = this.preview; var toolbar = this.toolbar; var settings = this.settings; var previewContainer = this.previewContainer; var previewCloseBtn = editor.find("." + this.classPrefix + "preview-close-btn"); this.state.preview = false; this.codeMirror.show(); if (settings.toolbar) { toolbar.show(); } preview[(settings.watch) ? "show" : "hide"](); previewCloseBtn.hide().unbind(editormd.mouseOrTouch("click", "touchend")); previewContainer.removeClass(this.classPrefix + "preview-active"); if (settings.watch) { previewContainer.css("padding", "20px"); } preview.css({ background : null, position : "absolute", width : editor.width() / 2, height : (settings.autoHeight && !this.state.fullscreen) ? "auto" : editor.height() - toolbar.height(), top : (settings.toolbar) ? toolbar.height() : 0 }); if (this.state.loaded) { $.proxy(settings.onpreviewed, this)(); } return this; }, /** * 编辑器全屏显示 * Fullscreen show * * @returns {editormd} 返回editormd的实例对象 */ fullscreen : function() { var _this = this; var state = this.state; var editor = this.editor; var preview = this.preview; var toolbar = this.toolbar; var settings = this.settings; var fullscreenClass = this.classPrefix + "fullscreen"; if (toolbar) { toolbar.find(".fa[name=fullscreen]").parent().toggleClass("active"); } var escHandle = function(event) { if (!event.shiftKey && event.keyCode === 27) { if (state.fullscreen) { _this.fullscreenExit(); } } }; if (!editor.hasClass(fullscreenClass)) { state.fullscreen = true; $("html,body").css("overflow", "hidden"); editor.css({ width : $(window).width(), height : $(window).height() }).addClass(fullscreenClass); this.resize(); $.proxy(settings.onfullscreen, this)(); $(window).bind("keyup", escHandle); } else { $(window).unbind("keyup", escHandle); this.fullscreenExit(); } return this; }, /** * 编辑器退出全屏显示 * Exit fullscreen state * * @returns {editormd} 返回editormd的实例对象 */ fullscreenExit : function() { var editor = this.editor; var settings = this.settings; var toolbar = this.toolbar; var fullscreenClass = this.classPrefix + "fullscreen"; this.state.fullscreen = false; if (toolbar) { toolbar.find(".fa[name=fullscreen]").parent().removeClass("active"); } $("html,body").css("overflow", ""); editor.css({ width : editor.data("oldWidth"), height : editor.data("oldHeight") }).removeClass(fullscreenClass); this.resize(); $.proxy(settings.onfullscreenExit, this)(); return this; }, /** * 加载并执行插件 * Load and execute the plugin * * @param {String} name plugin name / function name * @param {String} path plugin load path * @returns {editormd} 返回editormd的实例对象 */ executePlugin : function(name, path) { var _this = this; var cm = this.cm; var settings = this.settings; path = settings.pluginPath + path; if (typeof define === "function") { if (typeof this[name] === "undefined") { alert("Error: " + name + " plugin is not found, you are not load this plugin."); return this; } this[name](cm); return this; } if ($.inArray(path, editormd.loadFiles.plugin) < 0) { editormd.loadPlugin(path, function() { editormd.loadPlugins[name] = _this[name]; _this[name](cm); }); } else { $.proxy(editormd.loadPlugins[name], this)(cm); } return this; }, /** * 搜索替换 * Search & replace * * @param {String} command CodeMirror serach commands, "find, fintNext, fintPrev, clearSearch, replace, replaceAll" * @returns {editormd} return this */ search : function(command) { var settings = this.settings; if (!settings.searchReplace) { alert("Error: settings.searchReplace == false"); return this; } if (!settings.readOnly) { this.cm.execCommand(command || "find"); } return this; }, searchReplace : function() { this.search("replace"); return this; }, searchReplaceAll : function() { this.search("replaceAll"); return this; } }; editormd.fn.init.prototype = editormd.fn; /** * 锁屏 * lock screen when dialog opening * * @returns {void} */ editormd.dialogLockScreen = function() { var settings = this.settings || {dialogLockScreen : true}; if (settings.dialogLockScreen) { $("html,body").css("overflow", "hidden"); this.resize(); } }; /** * 显示透明背景层 * Display mask layer when dialog opening * * @param {Object} dialog dialog jQuery object * @returns {void} */ editormd.dialogShowMask = function(dialog) { var editor = this.editor; var settings = this.settings || {dialogShowMask : true}; dialog.css({ top : ($(window).height() - dialog.height()) / 2 + "px", left : ($(window).width() - dialog.width()) / 2 + "px" }); if (settings.dialogShowMask) { editor.children("." + this.classPrefix + "mask").css("z-index", parseInt(dialog.css("z-index")) - 1).show(); } }; editormd.toolbarHandlers = { undo : function() { this.cm.undo(); }, redo : function() { this.cm.redo(); }, bold : function() { var cm = this.cm; var cursor = cm.getCursor(); var selection = cm.getSelection(); cm.replaceSelection("**" + selection + "**"); if(selection === "") { cm.setCursor(cursor.line, cursor.ch + 2); } }, del : function() { var cm = this.cm; var cursor = cm.getCursor(); var selection = cm.getSelection(); cm.replaceSelection("~~" + selection + "~~"); if(selection === "") { cm.setCursor(cursor.line, cursor.ch + 2); } }, italic : function() { var cm = this.cm; var cursor = cm.getCursor(); var selection = cm.getSelection(); cm.replaceSelection("*" + selection + "*"); if(selection === "") { cm.setCursor(cursor.line, cursor.ch + 1); } }, quote : function() { var cm = this.cm; var cursor = cm.getCursor(); var selection = cm.getSelection(); if (cursor.ch !== 0) { cm.setCursor(cursor.line, 0); cm.replaceSelection("> " + selection); cm.setCursor(cursor.line, cursor.ch + 2); } else { cm.replaceSelection("> " + selection); } //cm.replaceSelection("> " + selection); //cm.setCursor(cursor.line, (selection === "") ? cursor.ch + 2 : cursor.ch + selection.length + 2); }, ucfirst : function() { var cm = this.cm; var selection = cm.getSelection(); var selections = cm.listSelections(); cm.replaceSelection(editormd.firstUpperCase(selection)); cm.setSelections(selections); }, ucwords : function() { var cm = this.cm; var selection = cm.getSelection(); var selections = cm.listSelections(); cm.replaceSelection(editormd.wordsFirstUpperCase(selection)); cm.setSelections(selections); }, uppercase : function() { var cm = this.cm; var selection = cm.getSelection(); var selections = cm.listSelections(); cm.replaceSelection(selection.toUpperCase()); cm.setSelections(selections); }, lowercase : function() { var cm = this.cm; var cursor = cm.getCursor(); var selection = cm.getSelection(); var selections = cm.listSelections(); cm.replaceSelection(selection.toLowerCase()); cm.setSelections(selections); }, h1 : function() { var cm = this.cm; var cursor = cm.getCursor(); var selection = cm.getSelection(); if (cursor.ch !== 0) { cm.setCursor(cursor.line, 0); cm.replaceSelection("# " + selection); cm.setCursor(cursor.line, cursor.ch + 2); } else { cm.replaceSelection("# " + selection); } }, h2 : function() { var cm = this.cm; var cursor = cm.getCursor(); var selection = cm.getSelection(); if (cursor.ch !== 0) { cm.setCursor(cursor.line, 0); cm.replaceSelection("## " + selection); cm.setCursor(cursor.line, cursor.ch + 3); } else { cm.replaceSelection("## " + selection); } }, h3 : function() { var cm = this.cm; var cursor = cm.getCursor(); var selection = cm.getSelection(); if (cursor.ch !== 0) { cm.setCursor(cursor.line, 0); cm.replaceSelection("### " + selection); cm.setCursor(cursor.line, cursor.ch + 4); } else { cm.replaceSelection("### " + selection); } }, h4 : function() { var cm = this.cm; var cursor = cm.getCursor(); var selection = cm.getSelection(); if (cursor.ch !== 0) { cm.setCursor(cursor.line, 0); cm.replaceSelection("#### " + selection); cm.setCursor(cursor.line, cursor.ch + 5); } else { cm.replaceSelection("#### " + selection); } }, h5 : function() { var cm = this.cm; var cursor = cm.getCursor(); var selection = cm.getSelection(); if (cursor.ch !== 0) { cm.setCursor(cursor.line, 0); cm.replaceSelection("##### " + selection); cm.setCursor(cursor.line, cursor.ch + 6); } else { cm.replaceSelection("##### " + selection); } }, h6 : function() { var cm = this.cm; var cursor = cm.getCursor(); var selection = cm.getSelection(); if (cursor.ch !== 0) { cm.setCursor(cursor.line, 0); cm.replaceSelection("###### " + selection); cm.setCursor(cursor.line, cursor.ch + 7); } else { cm.replaceSelection("###### " + selection); } }, "list-ul" : function() { var cm = this.cm; var cursor = cm.getCursor(); var selection = cm.getSelection(); if (selection === "") { cm.replaceSelection("- " + selection); } else { var selectionText = selection.split("\n"); for (var i = 0, len = selectionText.length; i < len; i++) { selectionText[i] = (selectionText[i] === "") ? "" : "- " + selectionText[i]; } cm.replaceSelection(selectionText.join("\n")); } }, "list-ol" : function() { var cm = this.cm; var cursor = cm.getCursor(); var selection = cm.getSelection(); if(selection === "") { cm.replaceSelection("1. " + selection); } else { var selectionText = selection.split("\n"); for (var i = 0, len = selectionText.length; i < len; i++) { selectionText[i] = (selectionText[i] === "") ? "" : (i+1) + ". " + selectionText[i]; } cm.replaceSelection(selectionText.join("\n")); } }, hr : function() { var cm = this.cm; var cursor = cm.getCursor(); var selection = cm.getSelection(); cm.replaceSelection(((cursor.ch !== 0) ? "\n\n" : "\n") + "------------\n\n"); }, tex : function() { if (!this.settings.tex) { alert("settings.tex === false"); return this; } var cm = this.cm; var cursor = cm.getCursor(); var selection = cm.getSelection(); cm.replaceSelection("$$" + selection + "$$"); if(selection === "") { cm.setCursor(cursor.line, cursor.ch + 2); } }, link : function() { this.executePlugin("linkDialog", "link-dialog/link-dialog"); }, "reference-link" : function() { this.executePlugin("referenceLinkDialog", "reference-link-dialog/reference-link-dialog"); }, pagebreak : function() { if (!this.settings.pageBreak) { alert("settings.pageBreak === false"); return this; } var cm = this.cm; var selection = cm.getSelection(); cm.replaceSelection("\r\n[========]\r\n"); }, image : function() { this.executePlugin("imageDialog", "image-dialog/image-dialog"); }, code : function() { var cm = this.cm; var cursor = cm.getCursor(); var selection = cm.getSelection(); cm.replaceSelection("`" + selection + "`"); if (selection === "") { cm.setCursor(cursor.line, cursor.ch + 1); } }, "code-block" : function() { this.executePlugin("codeBlockDialog", "code-block-dialog/code-block-dialog"); }, "preformatted-text" : function() { this.executePlugin("preformattedTextDialog", "preformatted-text-dialog/preformatted-text-dialog"); }, table : function() { this.executePlugin("tableDialog", "table-dialog/table-dialog"); }, datetime : function() { var cm = this.cm; var selection = cm.getSelection(); var date = new Date(); var langName = this.settings.lang.name; var datefmt = editormd.dateFormat() + " " + editormd.dateFormat((langName === "zh-cn" || langName === "zh-tw") ? "cn-week-day" : "week-day"); cm.replaceSelection(datefmt); }, emoji : function() { this.executePlugin("emojiDialog", "emoji-dialog/emoji-dialog"); }, "html-entities" : function() { this.executePlugin("htmlEntitiesDialog", "html-entities-dialog/html-entities-dialog"); }, "goto-line" : function() { this.executePlugin("gotoLineDialog", "goto-line-dialog/goto-line-dialog"); }, watch : function() { this[this.settings.watch ? "unwatch" : "watch"](); }, preview : function() { this.previewing(); }, fullscreen : function() { this.fullscreen(); }, clear : function() { this.clear(); }, search : function() { this.search(); }, help : function() { this.executePlugin("helpDialog", "help-dialog/help-dialog"); }, info : function() { this.showInfoDialog(); } }; editormd.keyMaps = { "Ctrl-1" : "h1", "Ctrl-2" : "h2", "Ctrl-3" : "h3", "Ctrl-4" : "h4", "Ctrl-5" : "h5", "Ctrl-6" : "h6", "Ctrl-B" : "bold", // if this is string == editormd.toolbarHandlers.xxxx "Ctrl-D" : "datetime", "Ctrl-E" : function() { // emoji var cm = this.cm; var cursor = cm.getCursor(); var selection = cm.getSelection(); if (!this.settings.emoji) { alert("Error: settings.emoji == false"); return ; } cm.replaceSelection(":" + selection + ":"); if (selection === "") { cm.setCursor(cursor.line, cursor.ch + 1); } }, "Ctrl-Alt-G" : "goto-line", "Ctrl-H" : "hr", "Ctrl-I" : "italic", "Ctrl-K" : "code", "Ctrl-L" : function() { var cm = this.cm; var cursor = cm.getCursor(); var selection = cm.getSelection(); var title = (selection === "") ? "" : " \""+selection+"\""; cm.replaceSelection("[" + selection + "]("+title+")"); if (selection === "") { cm.setCursor(cursor.line, cursor.ch + 1); } }, "Ctrl-U" : "list-ul", "Shift-Ctrl-A" : function() { var cm = this.cm; var cursor = cm.getCursor(); var selection = cm.getSelection(); if (!this.settings.atLink) { alert("Error: settings.atLink == false"); return ; } cm.replaceSelection("@" + selection); if (selection === "") { cm.setCursor(cursor.line, cursor.ch + 1); } }, "Shift-Ctrl-C" : "code", "Shift-Ctrl-Q" : "quote", "Shift-Ctrl-S" : "del", "Shift-Ctrl-K" : "tex", // KaTeX "Shift-Alt-C" : function() { var cm = this.cm; var cursor = cm.getCursor(); var selection = cm.getSelection(); cm.replaceSelection(["```", selection, "```"].join("\n")); if (selection === "") { cm.setCursor(cursor.line, cursor.ch + 3); } }, "Shift-Ctrl-Alt-C" : "code-block", "Shift-Ctrl-H" : "html-entities", "Shift-Alt-H" : "help", "Shift-Ctrl-E" : "emoji", "Shift-Ctrl-U" : "uppercase", "Shift-Alt-U" : "ucwords", "Shift-Ctrl-Alt-U" : "ucfirst", "Shift-Alt-L" : "lowercase", "Shift-Ctrl-I" : function() { var cm = this.cm; var cursor = cm.getCursor(); var selection = cm.getSelection(); var title = (selection === "") ? "" : " \""+selection+"\""; cm.replaceSelection("![" + selection + "]("+title+")"); if (selection === "") { cm.setCursor(cursor.line, cursor.ch + 4); } }, "Shift-Ctrl-Alt-I" : "image", "Shift-Ctrl-L" : "link", "Shift-Ctrl-O" : "list-ol", "Shift-Ctrl-P" : "preformatted-text", "Shift-Ctrl-T" : "table", "Shift-Alt-P" : "pagebreak", "F9" : "watch", "F10" : "preview", "F11" : "fullscreen", }; /** * 清除字符串两边的空格 * Clear the space of strings both sides. * * @param {String} str string * @returns {String} trimed string */ var trim = function(str) { return (!String.prototype.trim) ? str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, "") : str.trim(); }; editormd.trim = trim; /** * 所有单词首字母大写 * Words first to uppercase * * @param {String} str string * @returns {String} string */ var ucwords = function (str) { return str.toLowerCase().replace(/\b(\w)|\s(\w)/g, function($1) { return $1.toUpperCase(); }); }; editormd.ucwords = editormd.wordsFirstUpperCase = ucwords; /** * 字符串首字母大写 * Only string first char to uppercase * * @param {String} str string * @returns {String} string */ var firstUpperCase = function(str) { return str.toLowerCase().replace(/\b(\w)/, function($1){ return $1.toUpperCase(); }); }; var ucfirst = firstUpperCase; editormd.firstUpperCase = editormd.ucfirst = firstUpperCase; editormd.urls = { atLinkBase : "https://github.com/" }; editormd.regexs = { atLink : /@(\w+)/g, email : /(\w+)@(\w+)\.(\w+)\.?(\w+)?/g, emailLink : /(mailto:)?([\w\.\_]+)@(\w+)\.(\w+)\.?(\w+)?/g, emoji : /:([\w\+-]+):/g, emojiDatetime : /(\d{2}:\d{2}:\d{2})/g, twemoji : /:(tw-([\w]+)-?(\w+)?):/g, fontAwesome : /:(fa-([\w]+)(-(\w+)){0,}):/g, editormdLogo : /:(editormd-logo-?(\w+)?):/g, pageBreak : /^\[[=]{8,}\]$/ }; // Emoji graphics files url path editormd.emoji = { path : "http://www.emoji-cheat-sheet.com/graphics/emojis/", ext : ".png" }; // Twitter Emoji (Twemoji) graphics files url path editormd.twemoji = { path : "http://twemoji.maxcdn.com/36x36/", ext : ".png" }; /** * 自定义marked的解析器 * Custom Marked renderer rules * * @param {Array} markdownToC 传入用于接收TOC的数组 * @returns {Renderer} markedRenderer 返回marked的Renderer自定义对象 */ editormd.markedRenderer = function(markdownToC, options) { var defaults = { toc : true, // Table of contents tocm : false, tocStartLevel : 1, // Said from H1 to create ToC pageBreak : true, atLink : true, // for @link emailLink : true, // for mail address auto link taskList : false, // Enable Github Flavored Markdown task lists emoji : false, // :emoji: , Support Twemoji, fontAwesome, Editor.md logo emojis. tex : false, // TeX(LaTeX), based on KaTeX flowChart : false, // flowChart.js only support IE9+ sequenceDiagram : false, // sequenceDiagram.js only support IE9+ }; var settings = $.extend(defaults, options || {}); var marked = editormd.$marked; var markedRenderer = new marked.Renderer(); markdownToC = markdownToC || []; var regexs = editormd.regexs; var atLinkReg = regexs.atLink; var emojiReg = regexs.emoji; var emailReg = regexs.email; var emailLinkReg = regexs.emailLink; var twemojiReg = regexs.twemoji; var faIconReg = regexs.fontAwesome; var editormdLogoReg = regexs.editormdLogo; var pageBreakReg = regexs.pageBreak; markedRenderer.emoji = function(text) { text = text.replace(editormd.regexs.emojiDatetime, function($1) { return $1.replace(/:/g, ":"); }); var matchs = text.match(emojiReg); if (!matchs || !settings.emoji) { return text; } for (var i = 0, len = matchs.length; i < len; i++) { if (matchs[i] === ":+1:") { matchs[i] = ":\\+1:"; } text = text.replace(new RegExp(matchs[i]), function($1, $2){ var faMatchs = $1.match(faIconReg); var name = $1.replace(/:/g, ""); if (faMatchs) { for (var fa = 0, len1 = faMatchs.length; fa < len1; fa++) { var faName = faMatchs[fa].replace(/:/g, ""); return ""; } } else { var emdlogoMathcs = $1.match(editormdLogoReg); var twemojiMatchs = $1.match(twemojiReg); if (emdlogoMathcs) { for (var x = 0, len2 = emdlogoMathcs.length; x < len2; x++) { var logoName = emdlogoMathcs[x].replace(/:/g, ""); return ""; } } else if (twemojiMatchs) { for (var t = 0, len3 = twemojiMatchs.length; t < len3; t++) { var twe = twemojiMatchs[t].replace(/:/g, "").replace("tw-", ""); return "\"twemoji-""; } } else { var src = (name === "+1") ? "plus1" : name; src = (src === "black_large_square") ? "black_square" : src; src = (src === "moon") ? "waxing_gibbous_moon" : src; return "\":""; } } }); } return text; }; markedRenderer.atLink = function(text) { if (atLinkReg.test(text)) { if (settings.atLink) { text = text.replace(emailReg, function($1, $2, $3, $4) { return $1.replace(/@/g, "_#_@_#_"); }); text = text.replace(atLinkReg, function($1, $2) { return "" + $1 + ""; }).replace(/_#_@_#_/g, "@"); } if (settings.emailLink) { text = text.replace(emailLinkReg, function($1, $2, $3, $4, $5) { return (!$2 && $.inArray($5, "jpg|jpeg|png|gif|webp|ico|icon|pdf".split("|")) < 0) ? ""+$1+"" : $1; }); } return text; } return text; }; markedRenderer.link = function (href, title, text) { if (this.options.sanitize) { try { var prot = decodeURIComponent(unescape(href)).replace(/[^\w:]/g,"").toLowerCase(); } catch(e) { return ""; } if (prot.indexOf("javascript:") === 0) { return ""; } } var out = "" + text.replace(/@/g, "@") + ""; } if (title) { out += " title=\"" + title + "\""; } out += ">" + text + ""; return out; }; markedRenderer.heading = function(text, level, raw) { var linkText = text; var hasLinkReg = /\s*\]*)\>(.*)\<\/a\>\s*/; var getLinkTextReg = /\s*\]+)\>([^\>]*)\<\/a\>\s*/g; if (hasLinkReg.test(text)) { var tempText = []; text = text.split(/\]+)\>([^\>]*)\<\/a\>/); for (var i = 0, len = text.length; i < len; i++) { tempText.push(text[i].replace(/\s*href\=\"(.*)\"\s*/g, "")); } text = tempText.join(" "); } text = trim(text); var escapedText = text.toLowerCase().replace(/[^\w]+/g, "-"); var toc = { text : text, level : level, slug : escapedText }; var isChinese = /^[\u4e00-\u9fa5]+$/.test(text); var id = (isChinese) ? escape(text).replace(/\%/g, "") : text.toLowerCase().replace(/[^\w]+/g, "-"); markdownToC.push(toc); var headingHTML = ""; headingHTML += ""; headingHTML += ""; headingHTML += (hasLinkReg) ? this.atLink(this.emoji(linkText)) : this.atLink(this.emoji(text)); headingHTML += ""; return headingHTML; }; markedRenderer.pageBreak = function(text) { if (pageBreakReg.test(text) && settings.pageBreak) { text = "
                "; } return text; }; markedRenderer.paragraph = function(text) { var isTeXInline = /\$\$(.*)\$\$/g.test(text); var isTeXLine = /^\$\$(.*)\$\$$/.test(text); var isTeXAddClass = (isTeXLine) ? " class=\"" + editormd.classNames.tex + "\"" : ""; var isToC = (settings.tocm) ? /^(\[TOC\]|\[TOCM\])$/.test(text) : /^\[TOC\]$/.test(text); var isToCMenu = /^\[TOCM\]$/.test(text); if (!isTeXLine && isTeXInline) { text = text.replace(/(\$\$([^\$]*)\$\$)+/g, function($1, $2) { return "" + $2.replace(/\$/g, "") + ""; }); } else { text = (isTeXLine) ? text.replace(/\$/g, "") : text; } var tocHTML = "
                " + text + "
                "; return (isToC) ? ( (isToCMenu) ? "
                " + tocHTML + "

                " : tocHTML ) : ( (pageBreakReg.test(text)) ? this.pageBreak(text) : "" + this.atLink(this.emoji(text)) + "

                \n" ); }; markedRenderer.code = function (code, lang, escaped) { if (lang === "seq" || lang === "sequence") { return "
                " + code + "
                "; } else if ( lang === "flow") { return "
                " + code + "
                "; } else if ( lang === "math" || lang === "latex" || lang === "katex") { return "

                " + code + "

                "; } else { return marked.Renderer.prototype.code.apply(this, arguments); } }; markedRenderer.tablecell = function(content, flags) { var type = (flags.header) ? "th" : "td"; var tag = (flags.align) ? "<" + type +" style=\"text-align:" + flags.align + "\">" : "<" + type + ">"; return tag + this.atLink(this.emoji(content)) + "\n"; }; markedRenderer.listitem = function(text) { if (settings.taskList && /^\s*\[[x\s]\]\s*/.test(text)) { text = text.replace(/^\s*\[\s\]\s*/, " ") .replace(/^\s*\[x\]\s*/, " "); return "
              • " + this.atLink(this.emoji(text)) + "
              • "; } else { return "
              • " + this.atLink(this.emoji(text)) + "
              • "; } }; return markedRenderer; }; /** * * 生成TOC(Table of Contents) * Creating ToC (Table of Contents) * * @param {Array} toc 从marked获取的TOC数组列表 * @param {Element} container 插入TOC的容器元素 * @param {Integer} startLevel Hx 起始层级 * @returns {Object} tocContainer 返回ToC列表容器层的jQuery对象元素 */ editormd.markdownToCRenderer = function(toc, container, tocDropdown, startLevel) { var html = ""; var lastLevel = 0; var classPrefix = this.classPrefix; startLevel = startLevel || 1; for (var i = 0, len = toc.length; i < len; i++) { var text = toc[i].text; var level = toc[i].level; if (level < startLevel) { continue; } if (level > lastLevel) { html += ""; } else if (level < lastLevel) { html += (new Array(lastLevel - level + 2)).join("
            • "); } else { html += ""; } html += "
            • " + text + "
                "; lastLevel = level; } var tocContainer = container.find(".markdown-toc"); if ((tocContainer.length < 1 && container.attr("previewContainer") === "false")) { var tocHTML = "
                "; tocHTML = (tocDropdown) ? "
                " + tocHTML + "
                " : tocHTML; container.html(tocHTML); tocContainer = container.find(".markdown-toc"); } if (tocDropdown) { tocContainer.wrap("

                "); } tocContainer.html("
                  ").children(".markdown-toc-list").html(html.replace(/\r?\n?\\<\/ul\>/g, "")); return tocContainer; }; /** * * 生成TOC下拉菜单 * Creating ToC dropdown menu * * @param {Object} container 插入TOC的容器jQuery对象元素 * @param {String} tocTitle ToC title * @returns {Object} return toc-menu object */ editormd.tocDropdownMenu = function(container, tocTitle) { tocTitle = tocTitle || "Table of Contents"; var zindex = 400; var tocMenus = container.find("." + this.classPrefix + "toc-menu"); tocMenus.each(function() { var $this = $(this); var toc = $this.children(".markdown-toc"); var icon = ""; var btn = "" + icon + tocTitle + ""; var menu = toc.children("ul"); var list = menu.find("li"); toc.append(btn); list.first().before("
                • " + tocTitle + " " + icon + "

                • "); $this.mouseover(function(){ menu.show(); list.each(function(){ var li = $(this); var ul = li.children("ul"); if (ul.html() === "") { ul.remove(); } if (ul.length > 0 && ul.html() !== "") { var firstA = li.children("a").first(); if (firstA.children(".fa").length < 1) { firstA.append( $(icon).css({ float:"right", paddingTop:"4px" }) ); } } li.mouseover(function(){ ul.css("z-index", zindex).show(); zindex += 1; }).mouseleave(function(){ ul.hide(); }); }); }).mouseleave(function(){ menu.hide(); }); }); return tocMenus; }; /** * 简单地过滤指定的HTML标签 * Filter custom html tags * * @param {String} html 要过滤HTML * @param {String} filters 要过滤的标签 * @returns {String} html 返回过滤的HTML */ editormd.filterHTMLTags = function(html, filters) { if (typeof html !== "string") { html = new String(html); } if (typeof filters !== "string") { return html; } var expression = filters.split("|"); var filterTags = expression[0].split(","); var attrs = expression[1]; for (var i = 0, len = filterTags.length; i < len; i++) { var tag = filterTags[i]; html = html.replace(new RegExp("\<\s*" + tag + "\s*([^\>]*)\>([^\>]*)\<\s*\/" + tag + "\s*\>", "igm"), ""); } //return html; if (typeof attrs !== "undefined") { var htmlTagRegex = /\<(\w+)\s*([^\>]*)\>([^\>]*)\<\/(\w+)\>/ig; if (attrs === "*") { html = html.replace(htmlTagRegex, function($1, $2, $3, $4, $5) { return "<" + $2 + ">" + $4 + ""; }); } else if (attrs === "on*") { html = html.replace(htmlTagRegex, function($1, $2, $3, $4, $5) { var el = $("<" + $2 + ">" + $4 + ""); var _attrs = $($1)[0].attributes; var $attrs = {}; $.each(_attrs, function(i, e) { if (e.nodeName !== '"') $attrs[e.nodeName] = e.nodeValue; }); $.each($attrs, function(i) { if (i.indexOf("on") === 0) { delete $attrs[i]; } }); el.attr($attrs); var text = (typeof el[1] !== "undefined") ? $(el[1]).text() : ""; return el[0].outerHTML + text; }); } else { html = html.replace(htmlTagRegex, function($1, $2, $3, $4) { var filterAttrs = attrs.split(","); var el = $($1); el.html($4); $.each(filterAttrs, function(i) { el.attr(filterAttrs[i], null); }); return el[0].outerHTML; }); } } return html; }; /** * 将Markdown文档解析为HTML用于前台显示 * Parse Markdown to HTML for Font-end preview. * * @param {String} id 用于显示HTML的对象ID * @param {Object} [options={}] 配置选项,可选 * @returns {Object} div 返回jQuery对象元素 */ editormd.markdownToHTML = function(id, options) { var defaults = { gfm : true, toc : true, tocm : false, tocStartLevel : 1, tocTitle : "目录", tocDropdown : false, tocContainer : "", markdown : "", markdownSourceCode : false, htmlDecode : false, autoLoadKaTeX : true, pageBreak : true, atLink : true, // for @link emailLink : true, // for mail address auto link tex : false, taskList : false, // Github Flavored Markdown task lists emoji : false, flowChart : false, sequenceDiagram : false, previewCodeHighlight : true }; editormd.$marked = marked; var div = $("#" + id); var settings = div.settings = $.extend(true, defaults, options || {}); var saveTo = div.find("textarea"); if (saveTo.length < 1) { div.append(""); saveTo = div.find("textarea"); } var markdownDoc = (settings.markdown === "") ? saveTo.val() : settings.markdown; var markdownToC = []; var rendererOptions = { toc : settings.toc, tocm : settings.tocm, tocStartLevel : settings.tocStartLevel, taskList : settings.taskList, emoji : settings.emoji, tex : settings.tex, pageBreak : settings.pageBreak, atLink : settings.atLink, // for @link emailLink : settings.emailLink, // for mail address auto link flowChart : settings.flowChart, sequenceDiagram : settings.sequenceDiagram, previewCodeHighlight : settings.previewCodeHighlight, }; var markedOptions = { renderer : editormd.markedRenderer(markdownToC, rendererOptions), gfm : settings.gfm, tables : true, breaks : true, pedantic : false, sanitize : (settings.htmlDecode) ? false : true, // 是否忽略HTML标签,即是否开启HTML标签解析,为了安全性,默认不开启 smartLists : true, smartypants : true }; markdownDoc = new String(markdownDoc); var markdownParsed = marked(markdownDoc, markedOptions); markdownParsed = editormd.filterHTMLTags(markdownParsed, settings.htmlDecode); if (settings.markdownSourceCode) { saveTo.text(markdownDoc); } else { saveTo.remove(); } div.addClass("markdown-body " + this.classPrefix + "html-preview").append(markdownParsed); var tocContainer = (settings.tocContainer !== "") ? $(settings.tocContainer) : div; if (settings.tocContainer !== "") { tocContainer.attr("previewContainer", false); } if (settings.toc) { div.tocContainer = this.markdownToCRenderer(markdownToC, tocContainer, settings.tocDropdown, settings.tocStartLevel); if (settings.tocDropdown || div.find("." + this.classPrefix + "toc-menu").length > 0) { this.tocDropdownMenu(div, settings.tocTitle); } if (settings.tocContainer !== "") { div.find(".editormd-toc-menu, .editormd-markdown-toc").remove(); } } if (settings.previewCodeHighlight) { div.find("pre").addClass("prettyprint linenums"); prettyPrint(); } if (!editormd.isIE8) { if (settings.flowChart) { div.find(".flowchart").flowChart(); } if (settings.sequenceDiagram) { div.find(".sequence-diagram").sequenceDiagram({theme: "simple"}); } } if (settings.tex) { var katexHandle = function() { div.find("." + editormd.classNames.tex).each(function(){ var tex = $(this); katex.render(tex.html().replace(/</g, "<").replace(/>/g, ">"), tex[0]); tex.find(".katex").css("font-size", "1.6em"); }); }; if (settings.autoLoadKaTeX && !editormd.$katex && !editormd.kaTeXLoaded) { this.loadKaTeX(function() { editormd.$katex = katex; editormd.kaTeXLoaded = true; katexHandle(); }); } else { katexHandle(); } } div.getMarkdown = function() { return saveTo.val(); }; return div; }; // Editor.md themes, change toolbar themes etc. // added @1.5.0 editormd.themes = ["default", "dark"]; // Preview area themes // added @1.5.0 editormd.previewThemes = ["default", "dark"]; // CodeMirror / editor area themes // @1.5.0 rename -> editorThemes, old version -> themes editormd.editorThemes = [ "default", "3024-day", "3024-night", "ambiance", "ambiance-mobile", "base16-dark", "base16-light", "blackboard", "cobalt", "eclipse", "elegant", "erlang-dark", "lesser-dark", "mbo", "mdn-like", "midnight", "monokai", "neat", "neo", "night", "paraiso-dark", "paraiso-light", "pastel-on-dark", "rubyblue", "solarized", "the-matrix", "tomorrow-night-eighties", "twilight", "vibrant-ink", "xq-dark", "xq-light" ]; editormd.loadPlugins = {}; editormd.loadFiles = { js : [], css : [], plugin : [] }; /** * 动态加载Editor.md插件,但不立即执行 * Load editor.md plugins * * @param {String} fileName 插件文件路径 * @param {Function} [callback=function()] 加载成功后执行的回调函数 * @param {String} [into="head"] 嵌入页面的位置 */ editormd.loadPlugin = function(fileName, callback, into) { callback = callback || function() {}; this.loadScript(fileName, function() { editormd.loadFiles.plugin.push(fileName); callback(); }, into); }; /** * 动态加载CSS文件的方法 * Load css file method * * @param {String} fileName CSS文件名 * @param {Function} [callback=function()] 加载成功后执行的回调函数 * @param {String} [into="head"] 嵌入页面的位置 */ editormd.loadCSS = function(fileName, callback, into) { into = into || "head"; callback = callback || function() {}; var css = document.createElement("link"); css.type = "text/css"; css.rel = "stylesheet"; css.onload = css.onreadystatechange = function() { editormd.loadFiles.css.push(fileName); callback(); }; css.href = fileName + ".css"; if(into === "head") { document.getElementsByTagName("head")[0].appendChild(css); } else { document.body.appendChild(css); } }; editormd.isIE = (navigator.appName == "Microsoft Internet Explorer"); editormd.isIE8 = (editormd.isIE && navigator.appVersion.match(/8./i) == "8."); /** * 动态加载JS文件的方法 * Load javascript file method * * @param {String} fileName JS文件名 * @param {Function} [callback=function()] 加载成功后执行的回调函数 * @param {String} [into="head"] 嵌入页面的位置 */ editormd.loadScript = function(fileName, callback, into) { into = into || "head"; callback = callback || function() {}; var script = null; script = document.createElement("script"); script.id = fileName.replace(/[\./]+/g, "-"); script.type = "text/javascript"; script.src = fileName + ".js"; if (editormd.isIE8) { script.onreadystatechange = function() { if(script.readyState) { if (script.readyState === "loaded" || script.readyState === "complete") { script.onreadystatechange = null; editormd.loadFiles.js.push(fileName); callback(); } } }; } else { script.onload = function() { editormd.loadFiles.js.push(fileName); callback(); }; } if (into === "head") { document.getElementsByTagName("head")[0].appendChild(script); } else { document.body.appendChild(script); } }; // 使用国外的CDN,加载速度有时会很慢,或者自定义URL // You can custom KaTeX load url. editormd.katexURL = { css : "//cdnjs.cloudflare.com/ajax/libs/KaTeX/0.3.0/katex.min", js : "//cdnjs.cloudflare.com/ajax/libs/KaTeX/0.3.0/katex.min" }; editormd.kaTeXLoaded = false; /** * 加载KaTeX文件 * load KaTeX files * * @param {Function} [callback=function()] 加载成功后执行的回调函数 */ editormd.loadKaTeX = function (callback) { editormd.loadCSS(editormd.katexURL.css, function(){ editormd.loadScript(editormd.katexURL.js, callback || function(){}); }); }; /** * 锁屏 * lock screen * * @param {Boolean} lock Boolean 布尔值,是否锁屏 * @returns {void} */ editormd.lockScreen = function(lock) { $("html,body").css("overflow", (lock) ? "hidden" : ""); }; /** * 动态创建对话框 * Creating custom dialogs * * @param {Object} options 配置项键值对 Key/Value * @returns {dialog} 返回创建的dialog的jQuery实例对象 */ editormd.createDialog = function(options) { var defaults = { name : "", width : 420, height: 240, title : "", drag : true, closed : true, content : "", mask : true, maskStyle : { backgroundColor : "#fff", opacity : 0.1 }, lockScreen : true, footer : true, buttons : false }; options = $.extend(true, defaults, options); var $this = this; var editor = this.editor; var classPrefix = editormd.classPrefix; var guid = (new Date()).getTime(); var dialogName = ( (options.name === "") ? classPrefix + "dialog-" + guid : options.name); var mouseOrTouch = editormd.mouseOrTouch; var html = "
                  "; if (options.title !== "") { html += "
                  "; html += "" + options.title + ""; html += "
                  "; } if (options.closed) { html += ""; } html += "
                  " + options.content; if (options.footer || typeof options.footer === "string") { html += "
                  " + ( (typeof options.footer === "boolean") ? "" : options.footer) + "
                  "; } html += "
                  "; html += "
                  "; html += "
                  "; html += "
                  "; editor.append(html); var dialog = editor.find("." + dialogName); dialog.lockScreen = function(lock) { if (options.lockScreen) { $("html,body").css("overflow", (lock) ? "hidden" : ""); $this.resize(); } return dialog; }; dialog.showMask = function() { if (options.mask) { editor.find("." + classPrefix + "mask").css(options.maskStyle).css("z-index", editormd.dialogZindex - 1).show(); } return dialog; }; dialog.hideMask = function() { if (options.mask) { editor.find("." + classPrefix + "mask").hide(); } return dialog; }; dialog.loading = function(show) { var loading = dialog.find("." + classPrefix + "dialog-mask"); loading[(show) ? "show" : "hide"](); return dialog; }; dialog.lockScreen(true).showMask(); dialog.show().css({ zIndex : editormd.dialogZindex, border : (editormd.isIE8) ? "1px solid #ddd" : "", width : (typeof options.width === "number") ? options.width + "px" : options.width, height : (typeof options.height === "number") ? options.height + "px" : options.height }); var dialogPosition = function(){ dialog.css({ top : ($(window).height() - dialog.height()) / 2 + "px", left : ($(window).width() - dialog.width()) / 2 + "px" }); }; dialogPosition(); $(window).resize(dialogPosition); dialog.children("." + classPrefix + "dialog-close").bind(mouseOrTouch("click", "touchend"), function() { dialog.hide().lockScreen(false).hideMask(); }); if (typeof options.buttons === "object") { var footer = dialog.footer = dialog.find("." + classPrefix + "dialog-footer"); for (var key in options.buttons) { var btn = options.buttons[key]; var btnClassName = classPrefix + key + "-btn"; footer.append(""); btn[1] = $.proxy(btn[1], dialog); footer.children("." + btnClassName).bind(mouseOrTouch("click", "touchend"), btn[1]); } } if (options.title !== "" && options.drag) { var posX, posY; var dialogHeader = dialog.children("." + classPrefix + "dialog-header"); if (!options.mask) { dialogHeader.bind(mouseOrTouch("click", "touchend"), function(){ editormd.dialogZindex += 2; dialog.css("z-index", editormd.dialogZindex); }); } dialogHeader.mousedown(function(e) { e = e || window.event; //IE posX = e.clientX - parseInt(dialog[0].style.left); posY = e.clientY - parseInt(dialog[0].style.top); document.onmousemove = moveAction; }); var userCanSelect = function (obj) { obj.removeClass(classPrefix + "user-unselect").off("selectstart"); }; var userUnselect = function (obj) { obj.addClass(classPrefix + "user-unselect").on("selectstart", function(event) { // selectstart for IE return false; }); }; var moveAction = function (e) { e = e || window.event; //IE var left, top, nowLeft = parseInt(dialog[0].style.left), nowTop = parseInt(dialog[0].style.top); if( nowLeft >= 0 ) { if( nowLeft + dialog.width() <= $(window).width()) { left = e.clientX - posX; } else { left = $(window).width() - dialog.width(); document.onmousemove = null; } } else { left = 0; document.onmousemove = null; } if( nowTop >= 0 ) { top = e.clientY - posY; } else { top = 0; document.onmousemove = null; } document.onselectstart = function() { return false; }; userUnselect($("body")); userUnselect(dialog); dialog[0].style.left = left + "px"; dialog[0].style.top = top + "px"; }; document.onmouseup = function() { userCanSelect($("body")); userCanSelect(dialog); document.onselectstart = null; document.onmousemove = null; }; dialogHeader.touchDraggable = function() { var offset = null; var start = function(e) { var orig = e.originalEvent; var pos = $(this).parent().position(); offset = { x : orig.changedTouches[0].pageX - pos.left, y : orig.changedTouches[0].pageY - pos.top }; }; var move = function(e) { e.preventDefault(); var orig = e.originalEvent; $(this).parent().css({ top : orig.changedTouches[0].pageY - offset.y, left : orig.changedTouches[0].pageX - offset.x }); }; this.bind("touchstart", start).bind("touchmove", move); }; dialogHeader.touchDraggable(); } editormd.dialogZindex += 2; return dialog; }; /** * 鼠标和触摸事件的判断/选择方法 * MouseEvent or TouchEvent type switch * * @param {String} [mouseEventType="click"] 供选择的鼠标事件 * @param {String} [touchEventType="touchend"] 供选择的触摸事件 * @returns {String} EventType 返回事件类型名称 */ editormd.mouseOrTouch = function(mouseEventType, touchEventType) { mouseEventType = mouseEventType || "click"; touchEventType = touchEventType || "touchend"; var eventType = mouseEventType; try { document.createEvent("TouchEvent"); eventType = touchEventType; } catch(e) {} return eventType; }; /** * 日期时间的格式化方法 * Datetime format method * * @param {String} [format=""] 日期时间的格式,类似PHP的格式 * @returns {String} datefmt 返回格式化后的日期时间字符串 */ editormd.dateFormat = function(format) { format = format || ""; var addZero = function(d) { return (d < 10) ? "0" + d : d; }; var date = new Date(); var year = date.getFullYear(); var year2 = year.toString().slice(2, 4); var month = addZero(date.getMonth() + 1); var day = addZero(date.getDate()); var weekDay = date.getDay(); var hour = addZero(date.getHours()); var min = addZero(date.getMinutes()); var second = addZero(date.getSeconds()); var ms = addZero(date.getMilliseconds()); var datefmt = ""; var ymd = year2 + "-" + month + "-" + day; var fymd = year + "-" + month + "-" + day; var hms = hour + ":" + min + ":" + second; switch (format) { case "UNIX Time" : datefmt = date.getTime(); break; case "UTC" : datefmt = date.toUTCString(); break; case "yy" : datefmt = year2; break; case "year" : case "yyyy" : datefmt = year; break; case "month" : case "mm" : datefmt = month; break; case "cn-week-day" : case "cn-wd" : var cnWeekDays = ["日", "一", "二", "三", "四", "五", "六"]; datefmt = "星期" + cnWeekDays[weekDay]; break; case "week-day" : case "wd" : var weekDays = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]; datefmt = weekDays[weekDay]; break; case "day" : case "dd" : datefmt = day; break; case "hour" : case "hh" : datefmt = hour; break; case "min" : case "ii" : datefmt = min; break; case "second" : case "ss" : datefmt = second; break; case "ms" : datefmt = ms; break; case "yy-mm-dd" : datefmt = ymd; break; case "yyyy-mm-dd" : datefmt = fymd; break; case "yyyy-mm-dd h:i:s ms" : case "full + ms" : datefmt = fymd + " " + hms + " " + ms; break; case "full" : case "yyyy-mm-dd h:i:s" : default: datefmt = fymd + " " + hms; break; } return datefmt; }; return editormd; })); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/languages/en.js ================================================ (function(){ var factory = function (exports) { var lang = { name : "en", description : "Open source online Markdown editor.", tocTitle : "Table of Contents", toolbar : { undo : "Undo(Ctrl+Z)", redo : "Redo(Ctrl+Y)", bold : "Bold", del : "Strikethrough", italic : "Italic", quote : "Block quote", ucwords : "Words first letter convert to uppercase", uppercase : "Selection text convert to uppercase", lowercase : "Selection text convert to lowercase", h1 : "Heading 1", h2 : "Heading 2", h3 : "Heading 3", h4 : "Heading 4", h5 : "Heading 5", h6 : "Heading 6", "list-ul" : "Unordered list", "list-ol" : "Ordered list", hr : "Horizontal rule", link : "Link", "reference-link" : "Reference link", image : "Image", code : "Code inline", "preformatted-text" : "Preformatted text / Code block (Tab indent)", "code-block" : "Code block (Multi-languages)", table : "Tables", datetime : "Datetime", emoji : "Emoji", "html-entities" : "HTML Entities", pagebreak : "Page break", watch : "Unwatch", unwatch : "Watch", preview : "HTML Preview (Press Shift + ESC exit)", fullscreen : "Fullscreen (Press ESC exit)", clear : "Clear", search : "Search", help : "Help", info : "About " + exports.title }, buttons : { enter : "Enter", cancel : "Cancel", close : "Close" }, dialog : { link : { title : "Link", url : "Address", urlTitle : "Title", urlEmpty : "Error: Please fill in the link address." }, referenceLink : { title : "Reference link", name : "Name", url : "Address", urlId : "ID", urlTitle : "Title", nameEmpty: "Error: Reference name can't be empty.", idEmpty : "Error: Please fill in reference link id.", urlEmpty : "Error: Please fill in reference link url address." }, image : { title : "Image", url : "Address", link : "Link", alt : "Title", uploadButton : "Upload", imageURLEmpty : "Error: picture url address can't be empty.", uploadFileEmpty : "Error: upload pictures cannot be empty!", formatNotAllowed : "Error: only allows to upload pictures file, upload allowed image file format:" }, preformattedText : { title : "Preformatted text / Codes", emptyAlert : "Error: Please fill in the Preformatted text or content of the codes." }, codeBlock : { title : "Code block", selectLabel : "Languages: ", selectDefaultText : "select a code language...", otherLanguage : "Other languages", unselectedLanguageAlert : "Error: Please select the code language.", codeEmptyAlert : "Error: Please fill in the code content." }, htmlEntities : { title : "HTML Entities" }, help : { title : "Help" } } }; exports.defaults.lang = lang; }; // CommonJS/Node.js if (typeof require === "function" && typeof exports === "object" && typeof module === "object") { module.exports = factory; } else if (typeof define === "function") // AMD/CMD/Sea.js { if (define.amd) { // for Require.js define(["editormd"], function(editormd) { factory(editormd); }); } else { // for Sea.js define(function(require) { var editormd = require("../editormd"); factory(editormd); }); } } else { factory(window.editormd); } })(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/languages/zh-tw.js ================================================ (function(){ var factory = function (exports) { var lang = { name : "zh-tw", description : "開源在線Markdown編輯器
                  Open source online Markdown editor.", tocTitle : "目錄", toolbar : { undo : "撤銷(Ctrl+Z)", redo : "重做(Ctrl+Y)", bold : "粗體", del : "刪除線", italic : "斜體", quote : "引用", ucwords : "將所選的每個單詞首字母轉成大寫", uppercase : "將所選文本轉成大寫", lowercase : "將所選文本轉成小寫", h1 : "標題1", h2 : "標題2", h3 : "標題3", h4 : "標題4", h5 : "標題5", h6 : "標題6", "list-ul" : "無序列表", "list-ol" : "有序列表", hr : "横线", link : "链接", "reference-link" : "引用鏈接", image : "圖片", code : "行內代碼", "preformatted-text" : "預格式文本 / 代碼塊(縮進風格)", "code-block" : "代碼塊(多語言風格)", table : "添加表格", datetime : "日期時間", emoji : "Emoji 表情", "html-entities" : "HTML 實體字符", pagebreak : "插入分頁符", watch : "關閉實時預覽", unwatch : "開啟實時預覽", preview : "全窗口預覽HTML(按 Shift + ESC 退出)", fullscreen : "全屏(按 ESC 退出)", clear : "清空", search : "搜尋", help : "使用幫助", info : "關於" + exports.title }, buttons : { enter : "確定", cancel : "取消", close : "關閉" }, dialog : { link : { title : "添加鏈接", url : "鏈接地址", urlTitle : "鏈接標題", urlEmpty : "錯誤:請填寫鏈接地址。" }, referenceLink : { title : "添加引用鏈接", name : "引用名稱", url : "鏈接地址", urlId : "鏈接ID", urlTitle : "鏈接標題", nameEmpty: "錯誤:引用鏈接的名稱不能為空。", idEmpty : "錯誤:請填寫引用鏈接的ID。", urlEmpty : "錯誤:請填寫引用鏈接的URL地址。" }, image : { title : "添加圖片", url : "圖片地址", link : "圖片鏈接", alt : "圖片描述", uploadButton : "本地上傳", imageURLEmpty : "錯誤:圖片地址不能為空。", uploadFileEmpty : "錯誤:上傳的圖片不能為空!", formatNotAllowed : "錯誤:只允許上傳圖片文件,允許上傳的圖片文件格式有:" }, preformattedText : { title : "添加預格式文本或代碼塊", emptyAlert : "錯誤:請填寫預格式文本或代碼的內容。" }, codeBlock : { title : "添加代碼塊", selectLabel : "代碼語言:", selectDefaultText : "請語言代碼語言", otherLanguage : "其他語言", unselectedLanguageAlert : "錯誤:請選擇代碼所屬的語言類型。", codeEmptyAlert : "錯誤:請填寫代碼內容。" }, htmlEntities : { title : "HTML實體字符" }, help : { title : "使用幫助" } } }; exports.defaults.lang = lang; }; // CommonJS/Node.js if (typeof require === "function" && typeof exports === "object" && typeof module === "object") { module.exports = factory; } else if (typeof define === "function") // AMD/CMD/Sea.js { if (define.amd) { // for Require.js define(["editormd"], function(editormd) { factory(editormd); }); } else { // for Sea.js define(function(require) { var editormd = require("../editormd"); factory(editormd); }); } } else { factory(window.editormd); } })(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/AUTHORS ================================================ List of CodeMirror contributors. Updated before every release. 4r2r Aaron Brooks Abdelouahab Abe Fettig Adam Ahmed Adam King adanlobato Adán Lobato Adrian Aichner aeroson Ahmad Amireh Ahmad M. Zawawi ahoward Akeksandr Motsjonov Alberto González Palomo Alberto Pose Albert Xing Alexander Pavlov Alexander Schepanovski Alexander Shvets Alexander Solovyov Alexandre Bique alexey-k Alex Piggott Aliaksei Chapyzhenka Amsul amuntean Amy Ananya Sen anaran AndersMad Anders Nawroth Anderson Mesquita Andrea G Andreas Reischuck Andre von Houck Andrey Fedorov Andrey Klyuchnikov Andrey Lushnikov Andy Joslin Andy Kimball Andy Li angelozerr angelo.zerr@gmail.com Ankit Ankit Ahuja Ansel Santosa Anthony Grimes Anton Kovalyov areos as3boyan AtomicPages LLC Atul Bhouraskar Aurelian Oancea Bastian Müller Bem Jones-Bey benbro Beni Cherniavsky-Paskin Benjamin DeCoste Ben Keen Bernhard Sirlinger Bert Chang Billy Moon binny B Krishna Chaitanya Blaine G blukat29 boomyjee borawjm Brandon Frohs Brandon Wamboldt Brett Zamir Brian Grinstead Brian Sletten Bruce Mitchener Chandra Sekhar Pydi Charles Skelton Cheah Chu Yeow Chris Coyier Chris Granger Chris Houseknecht Chris Morgan Christian Oyarzun Christian Petrov Christopher Brown ciaranj CodeAnimal ComFreek Curtis Gagliardi dagsta daines Dale Jung Dan Bentley Dan Heberden Daniel, Dao Quang Minh Daniele Di Sarli Daniel Faust Daniel Huigens Daniel KJ Daniel Neel Daniel Parnell Danny Yoo darealshinji Darius Roberts Dave Myers David Mignot David Pathakjee David Vázquez deebugger Deep Thought Devon Carew dignifiedquire Dimage Sapelkin Dmitry Kiselyov domagoj412 Dominator008 Domizio Demichelis Doug Wikle Drew Bratcher Drew Hintz Drew Khoury Dror BG duralog eborden edsharp ekhaled Enam Mijbah Noor Eric Allam eustas Fabien O'Carroll Fabio Zendhi Nagao Faiza Alsaied Fauntleroy fbuchinger feizhang365 Felipe Lalanne Felix Raab Filip Noetzel flack ForbesLindesay Forbes Lindesay Ford_Lawnmower Forrest Oliphant Frank Wiegand Gabriel Gheorghian Gabriel Horner Gabriel Nahmias galambalazs Gautam Mehta gekkoe Gerard Braad Gergely Hegykozi Giovanni Calò Glenn Jorde Glenn Ruehle Golevka Gordon Smith Grant Skinner greengiant Gregory Koberger Guillaume Massé Guillaume Massé Gustavo Rodrigues Hakan Tunc Hans Engel Hardest Hasan Karahan Herculano Campos Hiroyuki Makino hitsthings Hocdoc Ian Beck Ian Dickinson Ian Wehrman Ian Wetherbee Ice White ICHIKAWA, Yuji ilvalle Ingo Richter Irakli Gozalishvili Ivan Kurnosov Jacob Lee Jakob Miland Jakub Vrana Jakub Vrána James Campos James Thorne Jamie Hill Jan Jongboom jankeromnes Jan Keromnes Jan Odvarko Jan T. Sott Jared Forsyth Jason Jason Barnabe Jason Grout Jason Johnston Jason San Jose Jason Siefken Jaydeep Solanki Jean Boussier jeffkenton Jeff Pickhardt jem (graphite) Jeremy Parmenter Jochen Berger Johan Ask John Connor John Lees-Miller John Snelson John Van Der Loo Jonathan Malmaud jongalloway Jon Malmaud Jon Sangster Joost-Wim Boekesteijn Joseph Pecoraro Joshua Newman Josh Watzman jots jsoojeon Juan Benavides Romero Jucovschi Constantin Juho Vuori Justin Hileman jwallers@gmail.com kaniga Ken Newman Ken Rockot Kevin Sawicki Kevin Ushey Klaus Silveira Koh Zi Han, Cliff komakino Konstantin Lopuhin koops ks-ifware kubelsmieci KwanEsq Lanfei Lanny Laszlo Vidacs leaf corcoran Leonid Khachaturov Leon Sorokin Leonya Khachaturov Liam Newman LM lochel Lorenzo Stoakes Luciano Longo Luke Stagner lynschinzer Maksim Lin Maksym Taran Malay Majithia Manuel Rego Casasnovas Marat Dreizin Marcel Gerber Marco Aurélio Marco Munizaga Marcus Bointon Marek Rudnicki Marijn Haverbeke Mário Gonçalves Mario Pietsch Mark Lentczner Marko Bonaci Martin Balek Martín Gaitán Martin Hasoň Mason Malone Mateusz Paprocki Mathias Bynens mats cronqvist Matthew Beale Matthias Bussonnier Matthias BUSSONNIER Matt McDonald Matt Pass Matt Sacks mauricio Maximilian Hils Maxim Kraev Max Kirsch Max Xiantu mbarkhau Metatheos Micah Dubinko Michael Lehenbauer Michael Zhou Mighty Guava Miguel Castillo mihailik Mike Mike Brevoort Mike Diaz Mike Ivanov Mike Kadin MinRK Miraculix87 misfo mloginov Moritz Schwörer mps mtaran-google Narciso Jaramillo Nathan Williams ndr nerbert nextrevision ngn nguillaumin Ng Zhi An Nicholas Bollweg Nicholas Bollweg (Nick) Nick Small Niels van Groningen nightwing Nikita Beloglazov Nikita Vasilyev Nikolay Kostov nilp0inter Nisarg Jhaveri nlwillia Norman Rzepka pablo Page Panupong Pasupat paris Patil Arpith Patrick Stoica Patrick Strawderman Paul Garvin Paul Ivanov Pavel Feldman Pavel Strashkin Paweł Bartkiewicz peteguhl Peter Flynn peterkroon Peter Kroon prasanthj Prasanth J Radek Piórkowski Rahul Randall Mason Randy Burden Randy Edmunds Rasmus Erik Voel Jensen Ray Ratchup Richard van der Meer Richard Z.H. Wang Robert Crossfield Roberto Abdelkader Martínez Pérez robertop23 Robert Plummer Ruslan Osmanov Ryan Prior sabaca Samuel Ainsworth sandeepshetty Sander AKA Redsandro santec Sascha Peilicke satchmorun sathyamoorthi SCLINIC\jdecker Scott Aikin Scott Goodhew Sebastian Zaha shaund shaun gilchrist Shawn A sheopory Shiv Deepak Shmuel Englard Shubham Jain silverwind snasa soliton4 sonson spastorelli srajanpaliwal Stanislav Oaserele Stas Kobzar Stefan Borsje Steffen Beyer Steve O'Hara stoskov Taha Jahangir Takuji Shimokawa Tarmil tel tfjgeorge Thaddee Tyl TheHowl think Thomas Dvornik Thomas Schmid Tim Alby Tim Baumann Timothy Farrell Timothy Hatcher TobiasBg Tomas-A Tomas Varaneckas Tom Erik Støwer Tom MacWright Tony Jian Travis Heppe Triangle717 twifkak Vestimir Markov vf Vincent Woo Volker Mische wenli Wesley Wiser Will Binns-Smith William Jamieson William Stein Willy Wojtek Ptak Xavier Mendez Yassin N. Hassan YNH Webdev Yunchi Luo Yuvi Panda Zachary Dremann Zhang Hao zziuni 魏鹏刚 ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/LICENSE ================================================ Copyright (C) 2014 by Marijn Haverbeke and others 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: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/README.md ================================================ # CodeMirror [![Build Status](https://travis-ci.org/codemirror/CodeMirror.svg)](https://travis-ci.org/codemirror/CodeMirror) [![NPM version](https://img.shields.io/npm/v/codemirror.svg)](https://www.npmjs.org/package/codemirror) [Funding status: ![maintainer happiness](https://marijnhaverbeke.nl/fund/status_s.png)](https://marijnhaverbeke.nl/fund/) CodeMirror is a JavaScript component that provides a code editor in the browser. When a mode is available for the language you are coding in, it will color your code, and optionally help with indentation. The project page is http://codemirror.net The manual is at http://codemirror.net/doc/manual.html The contributing guidelines are in [CONTRIBUTING.md](https://github.com/codemirror/CodeMirror/blob/master/CONTRIBUTING.md) ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/comment/comment.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; var noOptions = {}; var nonWS = /[^\s\u00a0]/; var Pos = CodeMirror.Pos; function firstNonWS(str) { var found = str.search(nonWS); return found == -1 ? 0 : found; } CodeMirror.commands.toggleComment = function(cm) { var minLine = Infinity, ranges = cm.listSelections(), mode = null; for (var i = ranges.length - 1; i >= 0; i--) { var from = ranges[i].from(), to = ranges[i].to(); if (from.line >= minLine) continue; if (to.line >= minLine) to = Pos(minLine, 0); minLine = from.line; if (mode == null) { if (cm.uncomment(from, to)) mode = "un"; else { cm.lineComment(from, to); mode = "line"; } } else if (mode == "un") { cm.uncomment(from, to); } else { cm.lineComment(from, to); } } }; CodeMirror.defineExtension("lineComment", function(from, to, options) { if (!options) options = noOptions; var self = this, mode = self.getModeAt(from); var commentString = options.lineComment || mode.lineComment; if (!commentString) { if (options.blockCommentStart || mode.blockCommentStart) { options.fullLines = true; self.blockComment(from, to, options); } return; } var firstLine = self.getLine(from.line); if (firstLine == null) return; var end = Math.min(to.ch != 0 || to.line == from.line ? to.line + 1 : to.line, self.lastLine() + 1); var pad = options.padding == null ? " " : options.padding; var blankLines = options.commentBlankLines || from.line == to.line; self.operation(function() { if (options.indent) { var baseString = firstLine.slice(0, firstNonWS(firstLine)); for (var i = from.line; i < end; ++i) { var line = self.getLine(i), cut = baseString.length; if (!blankLines && !nonWS.test(line)) continue; if (line.slice(0, cut) != baseString) cut = firstNonWS(line); self.replaceRange(baseString + commentString + pad, Pos(i, 0), Pos(i, cut)); } } else { for (var i = from.line; i < end; ++i) { if (blankLines || nonWS.test(self.getLine(i))) self.replaceRange(commentString + pad, Pos(i, 0)); } } }); }); CodeMirror.defineExtension("blockComment", function(from, to, options) { if (!options) options = noOptions; var self = this, mode = self.getModeAt(from); var startString = options.blockCommentStart || mode.blockCommentStart; var endString = options.blockCommentEnd || mode.blockCommentEnd; if (!startString || !endString) { if ((options.lineComment || mode.lineComment) && options.fullLines != false) self.lineComment(from, to, options); return; } var end = Math.min(to.line, self.lastLine()); if (end != from.line && to.ch == 0 && nonWS.test(self.getLine(end))) --end; var pad = options.padding == null ? " " : options.padding; if (from.line > end) return; self.operation(function() { if (options.fullLines != false) { var lastLineHasText = nonWS.test(self.getLine(end)); self.replaceRange(pad + endString, Pos(end)); self.replaceRange(startString + pad, Pos(from.line, 0)); var lead = options.blockCommentLead || mode.blockCommentLead; if (lead != null) for (var i = from.line + 1; i <= end; ++i) if (i != end || lastLineHasText) self.replaceRange(lead + pad, Pos(i, 0)); } else { self.replaceRange(endString, to); self.replaceRange(startString, from); } }); }); CodeMirror.defineExtension("uncomment", function(from, to, options) { if (!options) options = noOptions; var self = this, mode = self.getModeAt(from); var end = Math.min(to.ch != 0 || to.line == from.line ? to.line : to.line - 1, self.lastLine()), start = Math.min(from.line, end); // Try finding line comments var lineString = options.lineComment || mode.lineComment, lines = []; var pad = options.padding == null ? " " : options.padding, didSomething; lineComment: { if (!lineString) break lineComment; for (var i = start; i <= end; ++i) { var line = self.getLine(i); var found = line.indexOf(lineString); if (found > -1 && !/comment/.test(self.getTokenTypeAt(Pos(i, found + 1)))) found = -1; if (found == -1 && (i != end || i == start) && nonWS.test(line)) break lineComment; if (found > -1 && nonWS.test(line.slice(0, found))) break lineComment; lines.push(line); } self.operation(function() { for (var i = start; i <= end; ++i) { var line = lines[i - start]; var pos = line.indexOf(lineString), endPos = pos + lineString.length; if (pos < 0) continue; if (line.slice(endPos, endPos + pad.length) == pad) endPos += pad.length; didSomething = true; self.replaceRange("", Pos(i, pos), Pos(i, endPos)); } }); if (didSomething) return true; } // Try block comments var startString = options.blockCommentStart || mode.blockCommentStart; var endString = options.blockCommentEnd || mode.blockCommentEnd; if (!startString || !endString) return false; var lead = options.blockCommentLead || mode.blockCommentLead; var startLine = self.getLine(start), endLine = end == start ? startLine : self.getLine(end); var open = startLine.indexOf(startString), close = endLine.lastIndexOf(endString); if (close == -1 && start != end) { endLine = self.getLine(--end); close = endLine.lastIndexOf(endString); } if (open == -1 || close == -1 || !/comment/.test(self.getTokenTypeAt(Pos(start, open + 1))) || !/comment/.test(self.getTokenTypeAt(Pos(end, close + 1)))) return false; // Avoid killing block comments completely outside the selection. // Positions of the last startString before the start of the selection, and the first endString after it. var lastStart = startLine.lastIndexOf(startString, from.ch); var firstEnd = lastStart == -1 ? -1 : startLine.slice(0, from.ch).indexOf(endString, lastStart + startString.length); if (lastStart != -1 && firstEnd != -1 && firstEnd + endString.length != from.ch) return false; // Positions of the first endString after the end of the selection, and the last startString before it. firstEnd = endLine.indexOf(endString, to.ch); var almostLastStart = endLine.slice(to.ch).lastIndexOf(startString, firstEnd - to.ch); lastStart = (firstEnd == -1 || almostLastStart == -1) ? -1 : to.ch + almostLastStart; if (firstEnd != -1 && lastStart != -1 && lastStart != to.ch) return false; self.operation(function() { self.replaceRange("", Pos(end, close - (pad && endLine.slice(close - pad.length, close) == pad ? pad.length : 0)), Pos(end, close + endString.length)); var openEnd = open + startString.length; if (pad && startLine.slice(openEnd, openEnd + pad.length) == pad) openEnd += pad.length; self.replaceRange("", Pos(start, open), Pos(start, openEnd)); if (lead) for (var i = start + 1; i <= end; ++i) { var line = self.getLine(i), found = line.indexOf(lead); if (found == -1 || nonWS.test(line.slice(0, found))) continue; var foundEnd = found + lead.length; if (pad && line.slice(foundEnd, foundEnd + pad.length) == pad) foundEnd += pad.length; self.replaceRange("", Pos(i, found), Pos(i, foundEnd)); } }); return true; }); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/comment/continuecomment.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { var modes = ["clike", "css", "javascript"]; for (var i = 0; i < modes.length; ++i) CodeMirror.extendMode(modes[i], {blockCommentContinue: " * "}); function continueComment(cm) { if (cm.getOption("disableInput")) return CodeMirror.Pass; var ranges = cm.listSelections(), mode, inserts = []; for (var i = 0; i < ranges.length; i++) { var pos = ranges[i].head, token = cm.getTokenAt(pos); if (token.type != "comment") return CodeMirror.Pass; var modeHere = CodeMirror.innerMode(cm.getMode(), token.state).mode; if (!mode) mode = modeHere; else if (mode != modeHere) return CodeMirror.Pass; var insert = null; if (mode.blockCommentStart && mode.blockCommentContinue) { var end = token.string.indexOf(mode.blockCommentEnd); var full = cm.getRange(CodeMirror.Pos(pos.line, 0), CodeMirror.Pos(pos.line, token.end)), found; if (end != -1 && end == token.string.length - mode.blockCommentEnd.length && pos.ch >= end) { // Comment ended, don't continue it } else if (token.string.indexOf(mode.blockCommentStart) == 0) { insert = full.slice(0, token.start); if (!/^\s*$/.test(insert)) { insert = ""; for (var j = 0; j < token.start; ++j) insert += " "; } } else if ((found = full.indexOf(mode.blockCommentContinue)) != -1 && found + mode.blockCommentContinue.length > token.start && /^\s*$/.test(full.slice(0, found))) { insert = full.slice(0, found); } if (insert != null) insert += mode.blockCommentContinue; } if (insert == null && mode.lineComment && continueLineCommentEnabled(cm)) { var line = cm.getLine(pos.line), found = line.indexOf(mode.lineComment); if (found > -1) { insert = line.slice(0, found); if (/\S/.test(insert)) insert = null; else insert += mode.lineComment + line.slice(found + mode.lineComment.length).match(/^\s*/)[0]; } } if (insert == null) return CodeMirror.Pass; inserts[i] = "\n" + insert; } cm.operation(function() { for (var i = ranges.length - 1; i >= 0; i--) cm.replaceRange(inserts[i], ranges[i].from(), ranges[i].to(), "+insert"); }); } function continueLineCommentEnabled(cm) { var opt = cm.getOption("continueComments"); if (opt && typeof opt == "object") return opt.continueLineComment !== false; return true; } CodeMirror.defineOption("continueComments", null, function(cm, val, prev) { if (prev && prev != CodeMirror.Init) cm.removeKeyMap("continueComment"); if (val) { var key = "Enter"; if (typeof val == "string") key = val; else if (typeof val == "object" && val.key) key = val.key; var map = {name: "continueComment"}; map[key] = continueComment; cm.addKeyMap(map); } }); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/dialog/dialog.css ================================================ .CodeMirror-dialog { position: absolute; left: 0; right: 0; background: white; z-index: 15; padding: .1em .8em; overflow: hidden; color: #333; } .CodeMirror-dialog-top { border-bottom: 1px solid #eee; top: 0; } .CodeMirror-dialog-bottom { border-top: 1px solid #eee; bottom: 0; } .CodeMirror-dialog input { border: none; outline: none; background: transparent; width: 20em; color: inherit; font-family: monospace; } .CodeMirror-dialog button { font-size: 70%; } ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/dialog/dialog.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE // Open simple dialogs on top of an editor. Relies on dialog.css. (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { function dialogDiv(cm, template, bottom) { var wrap = cm.getWrapperElement(); var dialog; dialog = wrap.appendChild(document.createElement("div")); if (bottom) dialog.className = "CodeMirror-dialog CodeMirror-dialog-bottom"; else dialog.className = "CodeMirror-dialog CodeMirror-dialog-top"; if (typeof template == "string") { dialog.innerHTML = template; } else { // Assuming it's a detached DOM element. dialog.appendChild(template); } return dialog; } function closeNotification(cm, newVal) { if (cm.state.currentNotificationClose) cm.state.currentNotificationClose(); cm.state.currentNotificationClose = newVal; } CodeMirror.defineExtension("openDialog", function(template, callback, options) { if (!options) options = {}; closeNotification(this, null); var dialog = dialogDiv(this, template, options.bottom); var closed = false, me = this; function close(newVal) { if (typeof newVal == 'string') { inp.value = newVal; } else { if (closed) return; closed = true; dialog.parentNode.removeChild(dialog); me.focus(); if (options.onClose) options.onClose(dialog); } } var inp = dialog.getElementsByTagName("input")[0], button; if (inp) { if (options.value) { inp.value = options.value; inp.select(); } if (options.onInput) CodeMirror.on(inp, "input", function(e) { options.onInput(e, inp.value, close);}); if (options.onKeyUp) CodeMirror.on(inp, "keyup", function(e) {options.onKeyUp(e, inp.value, close);}); CodeMirror.on(inp, "keydown", function(e) { if (options && options.onKeyDown && options.onKeyDown(e, inp.value, close)) { return; } if (e.keyCode == 27 || (options.closeOnEnter !== false && e.keyCode == 13)) { inp.blur(); CodeMirror.e_stop(e); close(); } if (e.keyCode == 13) callback(inp.value, e); }); if (options.closeOnBlur !== false) CodeMirror.on(inp, "blur", close); inp.focus(); } else if (button = dialog.getElementsByTagName("button")[0]) { CodeMirror.on(button, "click", function() { close(); me.focus(); }); if (options.closeOnBlur !== false) CodeMirror.on(button, "blur", close); button.focus(); } return close; }); CodeMirror.defineExtension("openConfirm", function(template, callbacks, options) { closeNotification(this, null); var dialog = dialogDiv(this, template, options && options.bottom); var buttons = dialog.getElementsByTagName("button"); var closed = false, me = this, blurring = 1; function close() { if (closed) return; closed = true; dialog.parentNode.removeChild(dialog); me.focus(); } buttons[0].focus(); for (var i = 0; i < buttons.length; ++i) { var b = buttons[i]; (function(callback) { CodeMirror.on(b, "click", function(e) { CodeMirror.e_preventDefault(e); close(); if (callback) callback(me); }); })(callbacks[i]); CodeMirror.on(b, "blur", function() { --blurring; setTimeout(function() { if (blurring <= 0) close(); }, 200); }); CodeMirror.on(b, "focus", function() { ++blurring; }); } }); /* * openNotification * Opens a notification, that can be closed with an optional timer * (default 5000ms timer) and always closes on click. * * If a notification is opened while another is opened, it will close the * currently opened one and open the new one immediately. */ CodeMirror.defineExtension("openNotification", function(template, options) { closeNotification(this, close); var dialog = dialogDiv(this, template, options && options.bottom); var closed = false, doneTimer; var duration = options && typeof options.duration !== "undefined" ? options.duration : 5000; function close() { if (closed) return; closed = true; clearTimeout(doneTimer); dialog.parentNode.removeChild(dialog); } CodeMirror.on(dialog, 'click', function(e) { CodeMirror.e_preventDefault(e); close(); }); if (duration) doneTimer = setTimeout(close, duration); return close; }); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/display/fullscreen.css ================================================ .CodeMirror-fullscreen { position: fixed; top: 0; left: 0; right: 0; bottom: 0; height: auto; z-index: 9; } ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/display/fullscreen.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineOption("fullScreen", false, function(cm, val, old) { if (old == CodeMirror.Init) old = false; if (!old == !val) return; if (val) setFullscreen(cm); else setNormal(cm); }); function setFullscreen(cm) { var wrap = cm.getWrapperElement(); cm.state.fullScreenRestore = {scrollTop: window.pageYOffset, scrollLeft: window.pageXOffset, width: wrap.style.width, height: wrap.style.height}; wrap.style.width = ""; wrap.style.height = "auto"; wrap.className += " CodeMirror-fullscreen"; document.documentElement.style.overflow = "hidden"; cm.refresh(); } function setNormal(cm) { var wrap = cm.getWrapperElement(); wrap.className = wrap.className.replace(/\s*CodeMirror-fullscreen\b/, ""); document.documentElement.style.overflow = ""; var info = cm.state.fullScreenRestore; wrap.style.width = info.width; wrap.style.height = info.height; window.scrollTo(info.scrollLeft, info.scrollTop); cm.refresh(); } }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/display/panel.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { CodeMirror.defineExtension("addPanel", function(node, options) { if (!this.state.panels) initPanels(this); var info = this.state.panels; if (options && options.position == "bottom") info.wrapper.appendChild(node); else info.wrapper.insertBefore(node, info.wrapper.firstChild); var height = (options && options.height) || node.offsetHeight; this._setSize(null, info.heightLeft -= height); info.panels++; return new Panel(this, node, options, height); }); function Panel(cm, node, options, height) { this.cm = cm; this.node = node; this.options = options; this.height = height; this.cleared = false; } Panel.prototype.clear = function() { if (this.cleared) return; this.cleared = true; var info = this.cm.state.panels; this.cm._setSize(null, info.heightLeft += this.height); info.wrapper.removeChild(this.node); if (--info.panels == 0) removePanels(this.cm); }; Panel.prototype.changed = function(height) { var newHeight = height == null ? this.node.offsetHeight : height; var info = this.cm.state.panels; this.cm._setSize(null, info.height += (newHeight - this.height)); this.height = newHeight; }; function initPanels(cm) { var wrap = cm.getWrapperElement(); var style = window.getComputedStyle ? window.getComputedStyle(wrap) : wrap.currentStyle; var height = parseInt(style.height); var info = cm.state.panels = { setHeight: wrap.style.height, heightLeft: height, panels: 0, wrapper: document.createElement("div") }; wrap.parentNode.insertBefore(info.wrapper, wrap); var hasFocus = cm.hasFocus(); info.wrapper.appendChild(wrap); if (hasFocus) cm.focus(); cm._setSize = cm.setSize; if (height != null) cm.setSize = function(width, newHeight) { if (newHeight == null) return this._setSize(width, newHeight); info.setHeight = newHeight; if (typeof newHeight != "number") { var px = /^(\d+\.?\d*)px$/.exec(newHeight); if (px) { newHeight = Number(px[1]); } else { info.wrapper.style.height = newHeight; newHeight = info.wrapper.offsetHeight; info.wrapper.style.height = ""; } } cm._setSize(width, info.heightLeft += (newHeight - height)); height = newHeight; }; } function removePanels(cm) { var info = cm.state.panels; cm.state.panels = null; var wrap = cm.getWrapperElement(); info.wrapper.parentNode.replaceChild(wrap, info.wrapper); wrap.style.height = info.setHeight; cm.setSize = cm._setSize; cm.setSize(); } }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/display/placeholder.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { CodeMirror.defineOption("placeholder", "", function(cm, val, old) { var prev = old && old != CodeMirror.Init; if (val && !prev) { cm.on("blur", onBlur); cm.on("change", onChange); onChange(cm); } else if (!val && prev) { cm.off("blur", onBlur); cm.off("change", onChange); clearPlaceholder(cm); var wrapper = cm.getWrapperElement(); wrapper.className = wrapper.className.replace(" CodeMirror-empty", ""); } if (val && !cm.hasFocus()) onBlur(cm); }); function clearPlaceholder(cm) { if (cm.state.placeholder) { cm.state.placeholder.parentNode.removeChild(cm.state.placeholder); cm.state.placeholder = null; } } function setPlaceholder(cm) { clearPlaceholder(cm); var elt = cm.state.placeholder = document.createElement("pre"); elt.style.cssText = "height: 0; overflow: visible"; elt.className = "CodeMirror-placeholder"; elt.appendChild(document.createTextNode(cm.getOption("placeholder"))); cm.display.lineSpace.insertBefore(elt, cm.display.lineSpace.firstChild); } function onBlur(cm) { if (isEmpty(cm)) setPlaceholder(cm); } function onChange(cm) { var wrapper = cm.getWrapperElement(), empty = isEmpty(cm); wrapper.className = wrapper.className.replace(" CodeMirror-empty", "") + (empty ? " CodeMirror-empty" : ""); if (empty) setPlaceholder(cm); else clearPlaceholder(cm); } function isEmpty(cm) { return (cm.lineCount() === 1) && (cm.getLine(0) === ""); } }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/display/rulers.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineOption("rulers", false, function(cm, val, old) { if (old && old != CodeMirror.Init) { clearRulers(cm); cm.off("refresh", refreshRulers); } if (val && val.length) { setRulers(cm); cm.on("refresh", refreshRulers); } }); function clearRulers(cm) { for (var i = cm.display.lineSpace.childNodes.length - 1; i >= 0; i--) { var node = cm.display.lineSpace.childNodes[i]; if (/(^|\s)CodeMirror-ruler($|\s)/.test(node.className)) node.parentNode.removeChild(node); } } function setRulers(cm) { var val = cm.getOption("rulers"); var cw = cm.defaultCharWidth(); var left = cm.charCoords(CodeMirror.Pos(cm.firstLine(), 0), "div").left; var minH = cm.display.scroller.offsetHeight + 30; for (var i = 0; i < val.length; i++) { var elt = document.createElement("div"); elt.className = "CodeMirror-ruler"; var col, cls = null, conf = val[i]; if (typeof conf == "number") { col = conf; } else { col = conf.column; if (conf.className) elt.className += " " + conf.className; if (conf.color) elt.style.borderColor = conf.color; if (conf.lineStyle) elt.style.borderLeftStyle = conf.lineStyle; if (conf.width) elt.style.borderLeftWidth = conf.width; cls = val[i].className; } elt.style.left = (left + col * cw) + "px"; elt.style.top = "-50px"; elt.style.bottom = "-20px"; elt.style.minHeight = minH + "px"; cm.display.lineSpace.insertBefore(elt, cm.display.cursorDiv); } } function refreshRulers(cm) { clearRulers(cm); setRulers(cm); } }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/edit/closebrackets.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { var DEFAULT_BRACKETS = "()[]{}''\"\""; var DEFAULT_TRIPLES = "'\""; var DEFAULT_EXPLODE_ON_ENTER = "[]{}"; var SPACE_CHAR_REGEX = /\s/; var Pos = CodeMirror.Pos; CodeMirror.defineOption("autoCloseBrackets", false, function(cm, val, old) { if (old != CodeMirror.Init && old) cm.removeKeyMap("autoCloseBrackets"); if (!val) return; var pairs = DEFAULT_BRACKETS, triples = DEFAULT_TRIPLES, explode = DEFAULT_EXPLODE_ON_ENTER; if (typeof val == "string") pairs = val; else if (typeof val == "object") { if (val.pairs != null) pairs = val.pairs; if (val.triples != null) triples = val.triples; if (val.explode != null) explode = val.explode; } var map = buildKeymap(pairs, triples); if (explode) map.Enter = buildExplodeHandler(explode); cm.addKeyMap(map); }); function charsAround(cm, pos) { var str = cm.getRange(Pos(pos.line, pos.ch - 1), Pos(pos.line, pos.ch + 1)); return str.length == 2 ? str : null; } // Project the token type that will exists after the given char is // typed, and use it to determine whether it would cause the start // of a string token. function enteringString(cm, pos, ch) { var line = cm.getLine(pos.line); var token = cm.getTokenAt(pos); if (/\bstring2?\b/.test(token.type)) return false; var stream = new CodeMirror.StringStream(line.slice(0, pos.ch) + ch + line.slice(pos.ch), 4); stream.pos = stream.start = token.start; for (;;) { var type1 = cm.getMode().token(stream, token.state); if (stream.pos >= pos.ch + 1) return /\bstring2?\b/.test(type1); stream.start = stream.pos; } } function buildKeymap(pairs, triples) { var map = { name : "autoCloseBrackets", Backspace: function(cm) { if (cm.getOption("disableInput")) return CodeMirror.Pass; var ranges = cm.listSelections(); for (var i = 0; i < ranges.length; i++) { if (!ranges[i].empty()) return CodeMirror.Pass; var around = charsAround(cm, ranges[i].head); if (!around || pairs.indexOf(around) % 2 != 0) return CodeMirror.Pass; } for (var i = ranges.length - 1; i >= 0; i--) { var cur = ranges[i].head; cm.replaceRange("", Pos(cur.line, cur.ch - 1), Pos(cur.line, cur.ch + 1)); } } }; var closingBrackets = ""; for (var i = 0; i < pairs.length; i += 2) (function(left, right) { closingBrackets += right; map["'" + left + "'"] = function(cm) { if (cm.getOption("disableInput")) return CodeMirror.Pass; var ranges = cm.listSelections(), type, next; for (var i = 0; i < ranges.length; i++) { var range = ranges[i], cur = range.head, curType; var next = cm.getRange(cur, Pos(cur.line, cur.ch + 1)); if (!range.empty()) { curType = "surround"; } else if (left == right && next == right) { if (cm.getRange(cur, Pos(cur.line, cur.ch + 3)) == left + left + left) curType = "skipThree"; else curType = "skip"; } else if (left == right && cur.ch > 1 && triples.indexOf(left) >= 0 && cm.getRange(Pos(cur.line, cur.ch - 2), cur) == left + left && (cur.ch <= 2 || cm.getRange(Pos(cur.line, cur.ch - 3), Pos(cur.line, cur.ch - 2)) != left)) { curType = "addFour"; } else if (left == '"' || left == "'") { if (!CodeMirror.isWordChar(next) && enteringString(cm, cur, left)) curType = "both"; else return CodeMirror.Pass; } else if (cm.getLine(cur.line).length == cur.ch || closingBrackets.indexOf(next) >= 0 || SPACE_CHAR_REGEX.test(next)) { curType = "both"; } else { return CodeMirror.Pass; } if (!type) type = curType; else if (type != curType) return CodeMirror.Pass; } cm.operation(function() { if (type == "skip") { cm.execCommand("goCharRight"); } else if (type == "skipThree") { for (var i = 0; i < 3; i++) cm.execCommand("goCharRight"); } else if (type == "surround") { var sels = cm.getSelections(); for (var i = 0; i < sels.length; i++) sels[i] = left + sels[i] + right; cm.replaceSelections(sels, "around"); } else if (type == "both") { cm.replaceSelection(left + right, null); cm.execCommand("goCharLeft"); } else if (type == "addFour") { cm.replaceSelection(left + left + left + left, "before"); cm.execCommand("goCharRight"); } }); }; if (left != right) map["'" + right + "'"] = function(cm) { var ranges = cm.listSelections(); for (var i = 0; i < ranges.length; i++) { var range = ranges[i]; if (!range.empty() || cm.getRange(range.head, Pos(range.head.line, range.head.ch + 1)) != right) return CodeMirror.Pass; } cm.execCommand("goCharRight"); }; })(pairs.charAt(i), pairs.charAt(i + 1)); return map; } function buildExplodeHandler(pairs) { return function(cm) { if (cm.getOption("disableInput")) return CodeMirror.Pass; var ranges = cm.listSelections(); for (var i = 0; i < ranges.length; i++) { if (!ranges[i].empty()) return CodeMirror.Pass; var around = charsAround(cm, ranges[i].head); if (!around || pairs.indexOf(around) % 2 != 0) return CodeMirror.Pass; } cm.operation(function() { cm.replaceSelection("\n\n", null); cm.execCommand("goCharLeft"); ranges = cm.listSelections(); for (var i = 0; i < ranges.length; i++) { var line = ranges[i].head.line; cm.indentLine(line, null, true); cm.indentLine(line + 1, null, true); } }); }; } }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/edit/closetag.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE /** * Tag-closer extension for CodeMirror. * * This extension adds an "autoCloseTags" option that can be set to * either true to get the default behavior, or an object to further * configure its behavior. * * These are supported options: * * `whenClosing` (default true) * Whether to autoclose when the '/' of a closing tag is typed. * `whenOpening` (default true) * Whether to autoclose the tag when the final '>' of an opening * tag is typed. * `dontCloseTags` (default is empty tags for HTML, none for XML) * An array of tag names that should not be autoclosed. * `indentTags` (default is block tags for HTML, none for XML) * An array of tag names that should, when opened, cause a * blank line to be added inside the tag, and the blank line and * closing line to be indented. * * See demos/closetag.html for a usage example. */ (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../fold/xml-fold")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../fold/xml-fold"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { CodeMirror.defineOption("autoCloseTags", false, function(cm, val, old) { if (old != CodeMirror.Init && old) cm.removeKeyMap("autoCloseTags"); if (!val) return; var map = {name: "autoCloseTags"}; if (typeof val != "object" || val.whenClosing) map["'/'"] = function(cm) { return autoCloseSlash(cm); }; if (typeof val != "object" || val.whenOpening) map["'>'"] = function(cm) { return autoCloseGT(cm); }; cm.addKeyMap(map); }); var htmlDontClose = ["area", "base", "br", "col", "command", "embed", "hr", "img", "input", "keygen", "link", "meta", "param", "source", "track", "wbr"]; var htmlIndent = ["applet", "blockquote", "body", "button", "div", "dl", "fieldset", "form", "frameset", "h1", "h2", "h3", "h4", "h5", "h6", "head", "html", "iframe", "layer", "legend", "object", "ol", "p", "select", "table", "ul"]; function autoCloseGT(cm) { if (cm.getOption("disableInput")) return CodeMirror.Pass; var ranges = cm.listSelections(), replacements = []; for (var i = 0; i < ranges.length; i++) { if (!ranges[i].empty()) return CodeMirror.Pass; var pos = ranges[i].head, tok = cm.getTokenAt(pos); var inner = CodeMirror.innerMode(cm.getMode(), tok.state), state = inner.state; if (inner.mode.name != "xml" || !state.tagName) return CodeMirror.Pass; var opt = cm.getOption("autoCloseTags"), html = inner.mode.configuration == "html"; var dontCloseTags = (typeof opt == "object" && opt.dontCloseTags) || (html && htmlDontClose); var indentTags = (typeof opt == "object" && opt.indentTags) || (html && htmlIndent); var tagName = state.tagName; if (tok.end > pos.ch) tagName = tagName.slice(0, tagName.length - tok.end + pos.ch); var lowerTagName = tagName.toLowerCase(); // Don't process the '>' at the end of an end-tag or self-closing tag if (!tagName || tok.type == "string" && (tok.end != pos.ch || !/[\"\']/.test(tok.string.charAt(tok.string.length - 1)) || tok.string.length == 1) || tok.type == "tag" && state.type == "closeTag" || tok.string.indexOf("/") == (tok.string.length - 1) || // match something like dontCloseTags && indexOf(dontCloseTags, lowerTagName) > -1 || closingTagExists(cm, tagName, pos, state, true)) return CodeMirror.Pass; var indent = indentTags && indexOf(indentTags, lowerTagName) > -1; replacements[i] = {indent: indent, text: ">" + (indent ? "\n\n" : "") + "", newPos: indent ? CodeMirror.Pos(pos.line + 1, 0) : CodeMirror.Pos(pos.line, pos.ch + 1)}; } for (var i = ranges.length - 1; i >= 0; i--) { var info = replacements[i]; cm.replaceRange(info.text, ranges[i].head, ranges[i].anchor, "+insert"); var sel = cm.listSelections().slice(0); sel[i] = {head: info.newPos, anchor: info.newPos}; cm.setSelections(sel); if (info.indent) { cm.indentLine(info.newPos.line, null, true); cm.indentLine(info.newPos.line + 1, null, true); } } } function autoCloseCurrent(cm, typingSlash) { var ranges = cm.listSelections(), replacements = []; var head = typingSlash ? "/" : ""; else if (cm.getMode().name == "htmlmixed" && inner.mode.name == "css") replacements[i] = head + "style>"; else return CodeMirror.Pass; } else { if (!state.context || !state.context.tagName || closingTagExists(cm, state.context.tagName, pos, state)) return CodeMirror.Pass; replacements[i] = head + state.context.tagName + ">"; } } cm.replaceSelections(replacements); ranges = cm.listSelections(); for (var i = 0; i < ranges.length; i++) if (i == ranges.length - 1 || ranges[i].head.line < ranges[i + 1].head.line) cm.indentLine(ranges[i].head.line); } function autoCloseSlash(cm) { if (cm.getOption("disableInput")) return CodeMirror.Pass; return autoCloseCurrent(cm, true); } CodeMirror.commands.closeTag = function(cm) { return autoCloseCurrent(cm); }; function indexOf(collection, elt) { if (collection.indexOf) return collection.indexOf(elt); for (var i = 0, e = collection.length; i < e; ++i) if (collection[i] == elt) return i; return -1; } // If xml-fold is loaded, we use its functionality to try and verify // whether a given tag is actually unclosed. function closingTagExists(cm, tagName, pos, state, newTag) { if (!CodeMirror.scanForClosingTag) return false; var end = Math.min(cm.lastLine() + 1, pos.line + 500); var nextClose = CodeMirror.scanForClosingTag(cm, pos, null, end); if (!nextClose || nextClose.tag != tagName) return false; var cx = state.context; // If the immediate wrapping context contains onCx instances of // the same tag, a closing tag only exists if there are at least // that many closing tags of that type following. for (var onCx = newTag ? 1 : 0; cx && cx.tagName == tagName; cx = cx.prev) ++onCx; pos = nextClose.to; for (var i = 1; i < onCx; i++) { var next = CodeMirror.scanForClosingTag(cm, pos, null, end); if (!next || next.tag != tagName) return false; pos = next.to; } return true; } }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/edit/continuelist.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; var listRE = /^(\s*)(>[> ]*|[*+-]\s|(\d+)\.)(\s*)/, emptyListRE = /^(\s*)(>[> ]*|[*+-]|(\d+)\.)(\s*)$/, unorderedListRE = /[*+-]\s/; CodeMirror.commands.newlineAndIndentContinueMarkdownList = function(cm) { if (cm.getOption("disableInput")) return CodeMirror.Pass; var ranges = cm.listSelections(), replacements = []; for (var i = 0; i < ranges.length; i++) { var pos = ranges[i].head, match; var eolState = cm.getStateAfter(pos.line); var inList = eolState.list !== false; var inQuote = eolState.quote !== false; if (!ranges[i].empty() || (!inList && !inQuote) || !(match = cm.getLine(pos.line).match(listRE))) { cm.execCommand("newlineAndIndent"); return; } if (cm.getLine(pos.line).match(emptyListRE)) { cm.replaceRange("", { line: pos.line, ch: 0 }, { line: pos.line, ch: pos.ch + 1 }); replacements[i] = "\n"; } else { var indent = match[1], after = match[4]; var bullet = unorderedListRE.test(match[2]) || match[2].indexOf(">") >= 0 ? match[2] : (parseInt(match[3], 10) + 1) + "."; replacements[i] = "\n" + indent + bullet + after; } } cm.replaceSelections(replacements); }; }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/edit/matchbrackets.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { var ie_lt8 = /MSIE \d/.test(navigator.userAgent) && (document.documentMode == null || document.documentMode < 8); var Pos = CodeMirror.Pos; var matching = {"(": ")>", ")": "(<", "[": "]>", "]": "[<", "{": "}>", "}": "{<"}; function findMatchingBracket(cm, where, strict, config) { var line = cm.getLineHandle(where.line), pos = where.ch - 1; var match = (pos >= 0 && matching[line.text.charAt(pos)]) || matching[line.text.charAt(++pos)]; if (!match) return null; var dir = match.charAt(1) == ">" ? 1 : -1; if (strict && (dir > 0) != (pos == where.ch)) return null; var style = cm.getTokenTypeAt(Pos(where.line, pos + 1)); var found = scanForBracket(cm, Pos(where.line, pos + (dir > 0 ? 1 : 0)), dir, style || null, config); if (found == null) return null; return {from: Pos(where.line, pos), to: found && found.pos, match: found && found.ch == match.charAt(0), forward: dir > 0}; } // bracketRegex is used to specify which type of bracket to scan // should be a regexp, e.g. /[[\]]/ // // Note: If "where" is on an open bracket, then this bracket is ignored. // // Returns false when no bracket was found, null when it reached // maxScanLines and gave up function scanForBracket(cm, where, dir, style, config) { var maxScanLen = (config && config.maxScanLineLength) || 10000; var maxScanLines = (config && config.maxScanLines) || 1000; var stack = []; var re = config && config.bracketRegex ? config.bracketRegex : /[(){}[\]]/; var lineEnd = dir > 0 ? Math.min(where.line + maxScanLines, cm.lastLine() + 1) : Math.max(cm.firstLine() - 1, where.line - maxScanLines); for (var lineNo = where.line; lineNo != lineEnd; lineNo += dir) { var line = cm.getLine(lineNo); if (!line) continue; var pos = dir > 0 ? 0 : line.length - 1, end = dir > 0 ? line.length : -1; if (line.length > maxScanLen) continue; if (lineNo == where.line) pos = where.ch - (dir < 0 ? 1 : 0); for (; pos != end; pos += dir) { var ch = line.charAt(pos); if (re.test(ch) && (style === undefined || cm.getTokenTypeAt(Pos(lineNo, pos + 1)) == style)) { var match = matching[ch]; if ((match.charAt(1) == ">") == (dir > 0)) stack.push(ch); else if (!stack.length) return {pos: Pos(lineNo, pos), ch: ch}; else stack.pop(); } } } return lineNo - dir == (dir > 0 ? cm.lastLine() : cm.firstLine()) ? false : null; } function matchBrackets(cm, autoclear, config) { // Disable brace matching in long lines, since it'll cause hugely slow updates var maxHighlightLen = cm.state.matchBrackets.maxHighlightLineLength || 1000; var marks = [], ranges = cm.listSelections(); for (var i = 0; i < ranges.length; i++) { var match = ranges[i].empty() && findMatchingBracket(cm, ranges[i].head, false, config); if (match && cm.getLine(match.from.line).length <= maxHighlightLen) { var style = match.match ? "CodeMirror-matchingbracket" : "CodeMirror-nonmatchingbracket"; marks.push(cm.markText(match.from, Pos(match.from.line, match.from.ch + 1), {className: style})); if (match.to && cm.getLine(match.to.line).length <= maxHighlightLen) marks.push(cm.markText(match.to, Pos(match.to.line, match.to.ch + 1), {className: style})); } } if (marks.length) { // Kludge to work around the IE bug from issue #1193, where text // input stops going to the textare whever this fires. if (ie_lt8 && cm.state.focused) cm.focus(); var clear = function() { cm.operation(function() { for (var i = 0; i < marks.length; i++) marks[i].clear(); }); }; if (autoclear) setTimeout(clear, 800); else return clear; } } var currentlyHighlighted = null; function doMatchBrackets(cm) { cm.operation(function() { if (currentlyHighlighted) {currentlyHighlighted(); currentlyHighlighted = null;} currentlyHighlighted = matchBrackets(cm, false, cm.state.matchBrackets); }); } CodeMirror.defineOption("matchBrackets", false, function(cm, val, old) { if (old && old != CodeMirror.Init) cm.off("cursorActivity", doMatchBrackets); if (val) { cm.state.matchBrackets = typeof val == "object" ? val : {}; cm.on("cursorActivity", doMatchBrackets); } }); CodeMirror.defineExtension("matchBrackets", function() {matchBrackets(this, true);}); CodeMirror.defineExtension("findMatchingBracket", function(pos, strict, config){ return findMatchingBracket(this, pos, strict, config); }); CodeMirror.defineExtension("scanForBracket", function(pos, dir, style, config){ return scanForBracket(this, pos, dir, style, config); }); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/edit/matchtags.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../fold/xml-fold")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../fold/xml-fold"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineOption("matchTags", false, function(cm, val, old) { if (old && old != CodeMirror.Init) { cm.off("cursorActivity", doMatchTags); cm.off("viewportChange", maybeUpdateMatch); clear(cm); } if (val) { cm.state.matchBothTags = typeof val == "object" && val.bothTags; cm.on("cursorActivity", doMatchTags); cm.on("viewportChange", maybeUpdateMatch); doMatchTags(cm); } }); function clear(cm) { if (cm.state.tagHit) cm.state.tagHit.clear(); if (cm.state.tagOther) cm.state.tagOther.clear(); cm.state.tagHit = cm.state.tagOther = null; } function doMatchTags(cm) { cm.state.failedTagMatch = false; cm.operation(function() { clear(cm); if (cm.somethingSelected()) return; var cur = cm.getCursor(), range = cm.getViewport(); range.from = Math.min(range.from, cur.line); range.to = Math.max(cur.line + 1, range.to); var match = CodeMirror.findMatchingTag(cm, cur, range); if (!match) return; if (cm.state.matchBothTags) { var hit = match.at == "open" ? match.open : match.close; if (hit) cm.state.tagHit = cm.markText(hit.from, hit.to, {className: "CodeMirror-matchingtag"}); } var other = match.at == "close" ? match.open : match.close; if (other) cm.state.tagOther = cm.markText(other.from, other.to, {className: "CodeMirror-matchingtag"}); else cm.state.failedTagMatch = true; }); } function maybeUpdateMatch(cm) { if (cm.state.failedTagMatch) doMatchTags(cm); } CodeMirror.commands.toMatchingTag = function(cm) { var found = CodeMirror.findMatchingTag(cm, cm.getCursor()); if (found) { var other = found.at == "close" ? found.open : found.close; if (other) cm.extendSelection(other.to, other.from); } }; }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/edit/trailingspace.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { CodeMirror.defineOption("showTrailingSpace", false, function(cm, val, prev) { if (prev == CodeMirror.Init) prev = false; if (prev && !val) cm.removeOverlay("trailingspace"); else if (!prev && val) cm.addOverlay({ token: function(stream) { for (var l = stream.string.length, i = l; i && /\s/.test(stream.string.charAt(i - 1)); --i) {} if (i > stream.pos) { stream.pos = i; return null; } stream.pos = l; return "trailingspace"; }, name: "trailingspace" }); }); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/fold/brace-fold.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.registerHelper("fold", "brace", function(cm, start) { var line = start.line, lineText = cm.getLine(line); var startCh, tokenType; function findOpening(openCh) { for (var at = start.ch, pass = 0;;) { var found = at <= 0 ? -1 : lineText.lastIndexOf(openCh, at - 1); if (found == -1) { if (pass == 1) break; pass = 1; at = lineText.length; continue; } if (pass == 1 && found < start.ch) break; tokenType = cm.getTokenTypeAt(CodeMirror.Pos(line, found + 1)); if (!/^(comment|string)/.test(tokenType)) return found + 1; at = found - 1; } } var startToken = "{", endToken = "}", startCh = findOpening("{"); if (startCh == null) { startToken = "[", endToken = "]"; startCh = findOpening("["); } if (startCh == null) return; var count = 1, lastLine = cm.lastLine(), end, endCh; outer: for (var i = line; i <= lastLine; ++i) { var text = cm.getLine(i), pos = i == line ? startCh : 0; for (;;) { var nextOpen = text.indexOf(startToken, pos), nextClose = text.indexOf(endToken, pos); if (nextOpen < 0) nextOpen = text.length; if (nextClose < 0) nextClose = text.length; pos = Math.min(nextOpen, nextClose); if (pos == text.length) break; if (cm.getTokenTypeAt(CodeMirror.Pos(i, pos + 1)) == tokenType) { if (pos == nextOpen) ++count; else if (!--count) { end = i; endCh = pos; break outer; } } ++pos; } } if (end == null || line == end && endCh == startCh) return; return {from: CodeMirror.Pos(line, startCh), to: CodeMirror.Pos(end, endCh)}; }); CodeMirror.registerHelper("fold", "import", function(cm, start) { function hasImport(line) { if (line < cm.firstLine() || line > cm.lastLine()) return null; var start = cm.getTokenAt(CodeMirror.Pos(line, 1)); if (!/\S/.test(start.string)) start = cm.getTokenAt(CodeMirror.Pos(line, start.end + 1)); if (start.type != "keyword" || start.string != "import") return null; // Now find closing semicolon, return its position for (var i = line, e = Math.min(cm.lastLine(), line + 10); i <= e; ++i) { var text = cm.getLine(i), semi = text.indexOf(";"); if (semi != -1) return {startCh: start.end, end: CodeMirror.Pos(i, semi)}; } } var start = start.line, has = hasImport(start), prev; if (!has || hasImport(start - 1) || ((prev = hasImport(start - 2)) && prev.end.line == start - 1)) return null; for (var end = has.end;;) { var next = hasImport(end.line + 1); if (next == null) break; end = next.end; } return {from: cm.clipPos(CodeMirror.Pos(start, has.startCh + 1)), to: end}; }); CodeMirror.registerHelper("fold", "include", function(cm, start) { function hasInclude(line) { if (line < cm.firstLine() || line > cm.lastLine()) return null; var start = cm.getTokenAt(CodeMirror.Pos(line, 1)); if (!/\S/.test(start.string)) start = cm.getTokenAt(CodeMirror.Pos(line, start.end + 1)); if (start.type == "meta" && start.string.slice(0, 8) == "#include") return start.start + 8; } var start = start.line, has = hasInclude(start); if (has == null || hasInclude(start - 1) != null) return null; for (var end = start;;) { var next = hasInclude(end + 1); if (next == null) break; ++end; } return {from: CodeMirror.Pos(start, has + 1), to: cm.clipPos(CodeMirror.Pos(end))}; }); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/fold/comment-fold.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.registerGlobalHelper("fold", "comment", function(mode) { return mode.blockCommentStart && mode.blockCommentEnd; }, function(cm, start) { var mode = cm.getModeAt(start), startToken = mode.blockCommentStart, endToken = mode.blockCommentEnd; if (!startToken || !endToken) return; var line = start.line, lineText = cm.getLine(line); var startCh; for (var at = start.ch, pass = 0;;) { var found = at <= 0 ? -1 : lineText.lastIndexOf(startToken, at - 1); if (found == -1) { if (pass == 1) return; pass = 1; at = lineText.length; continue; } if (pass == 1 && found < start.ch) return; if (/comment/.test(cm.getTokenTypeAt(CodeMirror.Pos(line, found + 1)))) { startCh = found + startToken.length; break; } at = found - 1; } var depth = 1, lastLine = cm.lastLine(), end, endCh; outer: for (var i = line; i <= lastLine; ++i) { var text = cm.getLine(i), pos = i == line ? startCh : 0; for (;;) { var nextOpen = text.indexOf(startToken, pos), nextClose = text.indexOf(endToken, pos); if (nextOpen < 0) nextOpen = text.length; if (nextClose < 0) nextClose = text.length; pos = Math.min(nextOpen, nextClose); if (pos == text.length) break; if (pos == nextOpen) ++depth; else if (!--depth) { end = i; endCh = pos; break outer; } ++pos; } } if (end == null || line == end && endCh == startCh) return; return {from: CodeMirror.Pos(line, startCh), to: CodeMirror.Pos(end, endCh)}; }); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/fold/foldcode.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; function doFold(cm, pos, options, force) { if (options && options.call) { var finder = options; options = null; } else { var finder = getOption(cm, options, "rangeFinder"); } if (typeof pos == "number") pos = CodeMirror.Pos(pos, 0); var minSize = getOption(cm, options, "minFoldSize"); function getRange(allowFolded) { var range = finder(cm, pos); if (!range || range.to.line - range.from.line < minSize) return null; var marks = cm.findMarksAt(range.from); for (var i = 0; i < marks.length; ++i) { if (marks[i].__isFold && force !== "fold") { if (!allowFolded) return null; range.cleared = true; marks[i].clear(); } } return range; } var range = getRange(true); if (getOption(cm, options, "scanUp")) while (!range && pos.line > cm.firstLine()) { pos = CodeMirror.Pos(pos.line - 1, 0); range = getRange(false); } if (!range || range.cleared || force === "unfold") return; var myWidget = makeWidget(cm, options); CodeMirror.on(myWidget, "mousedown", function(e) { myRange.clear(); CodeMirror.e_preventDefault(e); }); var myRange = cm.markText(range.from, range.to, { replacedWith: myWidget, clearOnEnter: true, __isFold: true }); myRange.on("clear", function(from, to) { CodeMirror.signal(cm, "unfold", cm, from, to); }); CodeMirror.signal(cm, "fold", cm, range.from, range.to); } function makeWidget(cm, options) { var widget = getOption(cm, options, "widget"); if (typeof widget == "string") { var text = document.createTextNode(widget); widget = document.createElement("span"); widget.appendChild(text); widget.className = "CodeMirror-foldmarker"; } return widget; } // Clumsy backwards-compatible interface CodeMirror.newFoldFunction = function(rangeFinder, widget) { return function(cm, pos) { doFold(cm, pos, {rangeFinder: rangeFinder, widget: widget}); }; }; // New-style interface CodeMirror.defineExtension("foldCode", function(pos, options, force) { doFold(this, pos, options, force); }); CodeMirror.defineExtension("isFolded", function(pos) { var marks = this.findMarksAt(pos); for (var i = 0; i < marks.length; ++i) if (marks[i].__isFold) return true; }); CodeMirror.commands.toggleFold = function(cm) { cm.foldCode(cm.getCursor()); }; CodeMirror.commands.fold = function(cm) { cm.foldCode(cm.getCursor(), null, "fold"); }; CodeMirror.commands.unfold = function(cm) { cm.foldCode(cm.getCursor(), null, "unfold"); }; CodeMirror.commands.foldAll = function(cm) { cm.operation(function() { for (var i = cm.firstLine(), e = cm.lastLine(); i <= e; i++) cm.foldCode(CodeMirror.Pos(i, 0), null, "fold"); }); }; CodeMirror.commands.unfoldAll = function(cm) { cm.operation(function() { for (var i = cm.firstLine(), e = cm.lastLine(); i <= e; i++) cm.foldCode(CodeMirror.Pos(i, 0), null, "unfold"); }); }; CodeMirror.registerHelper("fold", "combine", function() { var funcs = Array.prototype.slice.call(arguments, 0); return function(cm, start) { for (var i = 0; i < funcs.length; ++i) { var found = funcs[i](cm, start); if (found) return found; } }; }); CodeMirror.registerHelper("fold", "auto", function(cm, start) { var helpers = cm.getHelpers(start, "fold"); for (var i = 0; i < helpers.length; i++) { var cur = helpers[i](cm, start); if (cur) return cur; } }); var defaultOptions = { rangeFinder: CodeMirror.fold.auto, widget: "\u2194", minFoldSize: 0, scanUp: false }; CodeMirror.defineOption("foldOptions", null); function getOption(cm, options, name) { if (options && options[name] !== undefined) return options[name]; var editorOptions = cm.options.foldOptions; if (editorOptions && editorOptions[name] !== undefined) return editorOptions[name]; return defaultOptions[name]; } CodeMirror.defineExtension("foldOption", function(options, name) { return getOption(this, options, name); }); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/fold/foldgutter.css ================================================ .CodeMirror-foldmarker { color: blue; text-shadow: #b9f 1px 1px 2px, #b9f -1px -1px 2px, #b9f 1px -1px 2px, #b9f -1px 1px 2px; font-family: arial; line-height: .3; cursor: pointer; } .CodeMirror-foldgutter { width: .7em; } .CodeMirror-foldgutter-open, .CodeMirror-foldgutter-folded { cursor: pointer; } .CodeMirror-foldgutter-open:after { content: "\25BE"; } .CodeMirror-foldgutter-folded:after { content: "\25B8"; } ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/fold/foldgutter.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("./foldcode")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "./foldcode"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineOption("foldGutter", false, function(cm, val, old) { if (old && old != CodeMirror.Init) { cm.clearGutter(cm.state.foldGutter.options.gutter); cm.state.foldGutter = null; cm.off("gutterClick", onGutterClick); cm.off("change", onChange); cm.off("viewportChange", onViewportChange); cm.off("fold", onFold); cm.off("unfold", onFold); cm.off("swapDoc", updateInViewport); } if (val) { cm.state.foldGutter = new State(parseOptions(val)); updateInViewport(cm); cm.on("gutterClick", onGutterClick); cm.on("change", onChange); cm.on("viewportChange", onViewportChange); cm.on("fold", onFold); cm.on("unfold", onFold); cm.on("swapDoc", updateInViewport); } }); var Pos = CodeMirror.Pos; function State(options) { this.options = options; this.from = this.to = 0; } function parseOptions(opts) { if (opts === true) opts = {}; if (opts.gutter == null) opts.gutter = "CodeMirror-foldgutter"; if (opts.indicatorOpen == null) opts.indicatorOpen = "CodeMirror-foldgutter-open"; if (opts.indicatorFolded == null) opts.indicatorFolded = "CodeMirror-foldgutter-folded"; return opts; } function isFolded(cm, line) { var marks = cm.findMarksAt(Pos(line)); for (var i = 0; i < marks.length; ++i) if (marks[i].__isFold && marks[i].find().from.line == line) return true; } function marker(spec) { if (typeof spec == "string") { var elt = document.createElement("div"); elt.className = spec + " CodeMirror-guttermarker-subtle"; return elt; } else { return spec.cloneNode(true); } } function updateFoldInfo(cm, from, to) { var opts = cm.state.foldGutter.options, cur = from; var minSize = cm.foldOption(opts, "minFoldSize"); var func = cm.foldOption(opts, "rangeFinder"); cm.eachLine(from, to, function(line) { var mark = null; if (isFolded(cm, cur)) { mark = marker(opts.indicatorFolded); } else { var pos = Pos(cur, 0); var range = func && func(cm, pos); if (range && range.to.line - range.from.line >= minSize) mark = marker(opts.indicatorOpen); } cm.setGutterMarker(line, opts.gutter, mark); ++cur; }); } function updateInViewport(cm) { var vp = cm.getViewport(), state = cm.state.foldGutter; if (!state) return; cm.operation(function() { updateFoldInfo(cm, vp.from, vp.to); }); state.from = vp.from; state.to = vp.to; } function onGutterClick(cm, line, gutter) { var state = cm.state.foldGutter; if (!state) return; var opts = state.options; if (gutter != opts.gutter) return; cm.foldCode(Pos(line, 0), opts.rangeFinder); } function onChange(cm) { var state = cm.state.foldGutter; if (!state) return; var opts = state.options; state.from = state.to = 0; clearTimeout(state.changeUpdate); state.changeUpdate = setTimeout(function() { updateInViewport(cm); }, opts.foldOnChangeTimeSpan || 600); } function onViewportChange(cm) { var state = cm.state.foldGutter; if (!state) return; var opts = state.options; clearTimeout(state.changeUpdate); state.changeUpdate = setTimeout(function() { var vp = cm.getViewport(); if (state.from == state.to || vp.from - state.to > 20 || state.from - vp.to > 20) { updateInViewport(cm); } else { cm.operation(function() { if (vp.from < state.from) { updateFoldInfo(cm, vp.from, state.from); state.from = vp.from; } if (vp.to > state.to) { updateFoldInfo(cm, state.to, vp.to); state.to = vp.to; } }); } }, opts.updateViewportTimeSpan || 400); } function onFold(cm, from) { var state = cm.state.foldGutter; if (!state) return; var line = from.line; if (line >= state.from && line < state.to) updateFoldInfo(cm, line, line + 1); } }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/fold/indent-fold.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.registerHelper("fold", "indent", function(cm, start) { var tabSize = cm.getOption("tabSize"), firstLine = cm.getLine(start.line); if (!/\S/.test(firstLine)) return; var getIndent = function(line) { return CodeMirror.countColumn(line, null, tabSize); }; var myIndent = getIndent(firstLine); var lastLineInFold = null; // Go through lines until we find a line that definitely doesn't belong in // the block we're folding, or to the end. for (var i = start.line + 1, end = cm.lastLine(); i <= end; ++i) { var curLine = cm.getLine(i); var curIndent = getIndent(curLine); if (curIndent > myIndent) { // Lines with a greater indent are considered part of the block. lastLineInFold = i; } else if (!/\S/.test(curLine)) { // Empty lines might be breaks within the block we're trying to fold. } else { // A non-empty line at an indent equal to or less than ours marks the // start of another block. break; } } if (lastLineInFold) return { from: CodeMirror.Pos(start.line, firstLine.length), to: CodeMirror.Pos(lastLineInFold, cm.getLine(lastLineInFold).length) }; }); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/fold/markdown-fold.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.registerHelper("fold", "markdown", function(cm, start) { var maxDepth = 100; function isHeader(lineNo) { var tokentype = cm.getTokenTypeAt(CodeMirror.Pos(lineNo, 0)); return tokentype && /\bheader\b/.test(tokentype); } function headerLevel(lineNo, line, nextLine) { var match = line && line.match(/^#+/); if (match && isHeader(lineNo)) return match[0].length; match = nextLine && nextLine.match(/^[=\-]+\s*$/); if (match && isHeader(lineNo + 1)) return nextLine[0] == "=" ? 1 : 2; return maxDepth; } var firstLine = cm.getLine(start.line), nextLine = cm.getLine(start.line + 1); var level = headerLevel(start.line, firstLine, nextLine); if (level === maxDepth) return undefined; var lastLineNo = cm.lastLine(); var end = start.line, nextNextLine = cm.getLine(end + 2); while (end < lastLineNo) { if (headerLevel(end + 1, nextLine, nextNextLine) <= level) break; ++end; nextLine = nextNextLine; nextNextLine = cm.getLine(end + 2); } return { from: CodeMirror.Pos(start.line, firstLine.length), to: CodeMirror.Pos(end, cm.getLine(end).length) }; }); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/fold/xml-fold.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; var Pos = CodeMirror.Pos; function cmp(a, b) { return a.line - b.line || a.ch - b.ch; } var nameStartChar = "A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD"; var nameChar = nameStartChar + "\-\:\.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040"; var xmlTagStart = new RegExp("<(/?)([" + nameStartChar + "][" + nameChar + "]*)", "g"); function Iter(cm, line, ch, range) { this.line = line; this.ch = ch; this.cm = cm; this.text = cm.getLine(line); this.min = range ? range.from : cm.firstLine(); this.max = range ? range.to - 1 : cm.lastLine(); } function tagAt(iter, ch) { var type = iter.cm.getTokenTypeAt(Pos(iter.line, ch)); return type && /\btag\b/.test(type); } function nextLine(iter) { if (iter.line >= iter.max) return; iter.ch = 0; iter.text = iter.cm.getLine(++iter.line); return true; } function prevLine(iter) { if (iter.line <= iter.min) return; iter.text = iter.cm.getLine(--iter.line); iter.ch = iter.text.length; return true; } function toTagEnd(iter) { for (;;) { var gt = iter.text.indexOf(">", iter.ch); if (gt == -1) { if (nextLine(iter)) continue; else return; } if (!tagAt(iter, gt + 1)) { iter.ch = gt + 1; continue; } var lastSlash = iter.text.lastIndexOf("/", gt); var selfClose = lastSlash > -1 && !/\S/.test(iter.text.slice(lastSlash + 1, gt)); iter.ch = gt + 1; return selfClose ? "selfClose" : "regular"; } } function toTagStart(iter) { for (;;) { var lt = iter.ch ? iter.text.lastIndexOf("<", iter.ch - 1) : -1; if (lt == -1) { if (prevLine(iter)) continue; else return; } if (!tagAt(iter, lt + 1)) { iter.ch = lt; continue; } xmlTagStart.lastIndex = lt; iter.ch = lt; var match = xmlTagStart.exec(iter.text); if (match && match.index == lt) return match; } } function toNextTag(iter) { for (;;) { xmlTagStart.lastIndex = iter.ch; var found = xmlTagStart.exec(iter.text); if (!found) { if (nextLine(iter)) continue; else return; } if (!tagAt(iter, found.index + 1)) { iter.ch = found.index + 1; continue; } iter.ch = found.index + found[0].length; return found; } } function toPrevTag(iter) { for (;;) { var gt = iter.ch ? iter.text.lastIndexOf(">", iter.ch - 1) : -1; if (gt == -1) { if (prevLine(iter)) continue; else return; } if (!tagAt(iter, gt + 1)) { iter.ch = gt; continue; } var lastSlash = iter.text.lastIndexOf("/", gt); var selfClose = lastSlash > -1 && !/\S/.test(iter.text.slice(lastSlash + 1, gt)); iter.ch = gt + 1; return selfClose ? "selfClose" : "regular"; } } function findMatchingClose(iter, tag) { var stack = []; for (;;) { var next = toNextTag(iter), end, startLine = iter.line, startCh = iter.ch - (next ? next[0].length : 0); if (!next || !(end = toTagEnd(iter))) return; if (end == "selfClose") continue; if (next[1]) { // closing tag for (var i = stack.length - 1; i >= 0; --i) if (stack[i] == next[2]) { stack.length = i; break; } if (i < 0 && (!tag || tag == next[2])) return { tag: next[2], from: Pos(startLine, startCh), to: Pos(iter.line, iter.ch) }; } else { // opening tag stack.push(next[2]); } } } function findMatchingOpen(iter, tag) { var stack = []; for (;;) { var prev = toPrevTag(iter); if (!prev) return; if (prev == "selfClose") { toTagStart(iter); continue; } var endLine = iter.line, endCh = iter.ch; var start = toTagStart(iter); if (!start) return; if (start[1]) { // closing tag stack.push(start[2]); } else { // opening tag for (var i = stack.length - 1; i >= 0; --i) if (stack[i] == start[2]) { stack.length = i; break; } if (i < 0 && (!tag || tag == start[2])) return { tag: start[2], from: Pos(iter.line, iter.ch), to: Pos(endLine, endCh) }; } } } CodeMirror.registerHelper("fold", "xml", function(cm, start) { var iter = new Iter(cm, start.line, 0); for (;;) { var openTag = toNextTag(iter), end; if (!openTag || iter.line != start.line || !(end = toTagEnd(iter))) return; if (!openTag[1] && end != "selfClose") { var start = Pos(iter.line, iter.ch); var close = findMatchingClose(iter, openTag[2]); return close && {from: start, to: close.from}; } } }); CodeMirror.findMatchingTag = function(cm, pos, range) { var iter = new Iter(cm, pos.line, pos.ch, range); if (iter.text.indexOf(">") == -1 && iter.text.indexOf("<") == -1) return; var end = toTagEnd(iter), to = end && Pos(iter.line, iter.ch); var start = end && toTagStart(iter); if (!end || !start || cmp(iter, pos) > 0) return; var here = {from: Pos(iter.line, iter.ch), to: to, tag: start[2]}; if (end == "selfClose") return {open: here, close: null, at: "open"}; if (start[1]) { // closing tag return {open: findMatchingOpen(iter, start[2]), close: here, at: "close"}; } else { // opening tag iter = new Iter(cm, to.line, to.ch, range); return {open: here, close: findMatchingClose(iter, start[2]), at: "open"}; } }; CodeMirror.findEnclosingTag = function(cm, pos, range) { var iter = new Iter(cm, pos.line, pos.ch, range); for (;;) { var open = findMatchingOpen(iter); if (!open) break; var forward = new Iter(cm, pos.line, pos.ch, range); var close = findMatchingClose(forward, open.tag); if (close) return {open: open, close: close}; } }; // Used by addon/edit/closetag.js CodeMirror.scanForClosingTag = function(cm, pos, name, end) { var iter = new Iter(cm, pos.line, pos.ch, end ? {from: 0, to: end} : null); return findMatchingClose(iter, name); }; }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/hint/anyword-hint.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; var WORD = /[\w$]+/, RANGE = 500; CodeMirror.registerHelper("hint", "anyword", function(editor, options) { var word = options && options.word || WORD; var range = options && options.range || RANGE; var cur = editor.getCursor(), curLine = editor.getLine(cur.line); var end = cur.ch, start = end; while (start && word.test(curLine.charAt(start - 1))) --start; var curWord = start != end && curLine.slice(start, end); var list = [], seen = {}; var re = new RegExp(word.source, "g"); for (var dir = -1; dir <= 1; dir += 2) { var line = cur.line, endLine = Math.min(Math.max(line + dir * range, editor.firstLine()), editor.lastLine()) + dir; for (; line != endLine; line += dir) { var text = editor.getLine(line), m; while (m = re.exec(text)) { if (line == cur.line && m[0] === curWord) continue; if ((!curWord || m[0].lastIndexOf(curWord, 0) == 0) && !Object.prototype.hasOwnProperty.call(seen, m[0])) { seen[m[0]] = true; list.push(m[0]); } } } } return {list: list, from: CodeMirror.Pos(cur.line, start), to: CodeMirror.Pos(cur.line, end)}; }); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/hint/css-hint.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../../mode/css/css")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../../mode/css/css"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; var pseudoClasses = {link: 1, visited: 1, active: 1, hover: 1, focus: 1, "first-letter": 1, "first-line": 1, "first-child": 1, before: 1, after: 1, lang: 1}; CodeMirror.registerHelper("hint", "css", function(cm) { var cur = cm.getCursor(), token = cm.getTokenAt(cur); var inner = CodeMirror.innerMode(cm.getMode(), token.state); if (inner.mode.name != "css") return; var start = token.start, end = cur.ch, word = token.string.slice(0, end - start); if (/[^\w$_-]/.test(word)) { word = ""; start = end = cur.ch; } var spec = CodeMirror.resolveMode("text/css"); var result = []; function add(keywords) { for (var name in keywords) if (!word || name.lastIndexOf(word, 0) == 0) result.push(name); } var st = inner.state.state; if (st == "pseudo" || token.type == "variable-3") { add(pseudoClasses); } else if (st == "block" || st == "maybeprop") { add(spec.propertyKeywords); } else if (st == "prop" || st == "parens" || st == "at" || st == "params") { add(spec.valueKeywords); add(spec.colorKeywords); } else if (st == "media" || st == "media_parens") { add(spec.mediaTypes); add(spec.mediaFeatures); } if (result.length) return { list: result, from: CodeMirror.Pos(cur.line, start), to: CodeMirror.Pos(cur.line, end) }; }); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/hint/html-hint.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("./xml-hint")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "./xml-hint"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; var langs = "ab aa af ak sq am ar an hy as av ae ay az bm ba eu be bn bh bi bs br bg my ca ch ce ny zh cv kw co cr hr cs da dv nl dz en eo et ee fo fj fi fr ff gl ka de el gn gu ht ha he hz hi ho hu ia id ie ga ig ik io is it iu ja jv kl kn kr ks kk km ki rw ky kv kg ko ku kj la lb lg li ln lo lt lu lv gv mk mg ms ml mt mi mr mh mn na nv nb nd ne ng nn no ii nr oc oj cu om or os pa pi fa pl ps pt qu rm rn ro ru sa sc sd se sm sg sr gd sn si sk sl so st es su sw ss sv ta te tg th ti bo tk tl tn to tr ts tt tw ty ug uk ur uz ve vi vo wa cy wo fy xh yi yo za zu".split(" "); var targets = ["_blank", "_self", "_top", "_parent"]; var charsets = ["ascii", "utf-8", "utf-16", "latin1", "latin1"]; var methods = ["get", "post", "put", "delete"]; var encs = ["application/x-www-form-urlencoded", "multipart/form-data", "text/plain"]; var media = ["all", "screen", "print", "embossed", "braille", "handheld", "print", "projection", "screen", "tty", "tv", "speech", "3d-glasses", "resolution [>][<][=] [X]", "device-aspect-ratio: X/Y", "orientation:portrait", "orientation:landscape", "device-height: [X]", "device-width: [X]"]; var s = { attrs: {} }; // Simple tag, reused for a whole lot of tags var data = { a: { attrs: { href: null, ping: null, type: null, media: media, target: targets, hreflang: langs } }, abbr: s, acronym: s, address: s, applet: s, area: { attrs: { alt: null, coords: null, href: null, target: null, ping: null, media: media, hreflang: langs, type: null, shape: ["default", "rect", "circle", "poly"] } }, article: s, aside: s, audio: { attrs: { src: null, mediagroup: null, crossorigin: ["anonymous", "use-credentials"], preload: ["none", "metadata", "auto"], autoplay: ["", "autoplay"], loop: ["", "loop"], controls: ["", "controls"] } }, b: s, base: { attrs: { href: null, target: targets } }, basefont: s, bdi: s, bdo: s, big: s, blockquote: { attrs: { cite: null } }, body: s, br: s, button: { attrs: { form: null, formaction: null, name: null, value: null, autofocus: ["", "autofocus"], disabled: ["", "autofocus"], formenctype: encs, formmethod: methods, formnovalidate: ["", "novalidate"], formtarget: targets, type: ["submit", "reset", "button"] } }, canvas: { attrs: { width: null, height: null } }, caption: s, center: s, cite: s, code: s, col: { attrs: { span: null } }, colgroup: { attrs: { span: null } }, command: { attrs: { type: ["command", "checkbox", "radio"], label: null, icon: null, radiogroup: null, command: null, title: null, disabled: ["", "disabled"], checked: ["", "checked"] } }, data: { attrs: { value: null } }, datagrid: { attrs: { disabled: ["", "disabled"], multiple: ["", "multiple"] } }, datalist: { attrs: { data: null } }, dd: s, del: { attrs: { cite: null, datetime: null } }, details: { attrs: { open: ["", "open"] } }, dfn: s, dir: s, div: s, dl: s, dt: s, em: s, embed: { attrs: { src: null, type: null, width: null, height: null } }, eventsource: { attrs: { src: null } }, fieldset: { attrs: { disabled: ["", "disabled"], form: null, name: null } }, figcaption: s, figure: s, font: s, footer: s, form: { attrs: { action: null, name: null, "accept-charset": charsets, autocomplete: ["on", "off"], enctype: encs, method: methods, novalidate: ["", "novalidate"], target: targets } }, frame: s, frameset: s, h1: s, h2: s, h3: s, h4: s, h5: s, h6: s, head: { attrs: {}, children: ["title", "base", "link", "style", "meta", "script", "noscript", "command"] }, header: s, hgroup: s, hr: s, html: { attrs: { manifest: null }, children: ["head", "body"] }, i: s, iframe: { attrs: { src: null, srcdoc: null, name: null, width: null, height: null, sandbox: ["allow-top-navigation", "allow-same-origin", "allow-forms", "allow-scripts"], seamless: ["", "seamless"] } }, img: { attrs: { alt: null, src: null, ismap: null, usemap: null, width: null, height: null, crossorigin: ["anonymous", "use-credentials"] } }, input: { attrs: { alt: null, dirname: null, form: null, formaction: null, height: null, list: null, max: null, maxlength: null, min: null, name: null, pattern: null, placeholder: null, size: null, src: null, step: null, value: null, width: null, accept: ["audio/*", "video/*", "image/*"], autocomplete: ["on", "off"], autofocus: ["", "autofocus"], checked: ["", "checked"], disabled: ["", "disabled"], formenctype: encs, formmethod: methods, formnovalidate: ["", "novalidate"], formtarget: targets, multiple: ["", "multiple"], readonly: ["", "readonly"], required: ["", "required"], type: ["hidden", "text", "search", "tel", "url", "email", "password", "datetime", "date", "month", "week", "time", "datetime-local", "number", "range", "color", "checkbox", "radio", "file", "submit", "image", "reset", "button"] } }, ins: { attrs: { cite: null, datetime: null } }, kbd: s, keygen: { attrs: { challenge: null, form: null, name: null, autofocus: ["", "autofocus"], disabled: ["", "disabled"], keytype: ["RSA"] } }, label: { attrs: { "for": null, form: null } }, legend: s, li: { attrs: { value: null } }, link: { attrs: { href: null, type: null, hreflang: langs, media: media, sizes: ["all", "16x16", "16x16 32x32", "16x16 32x32 64x64"] } }, map: { attrs: { name: null } }, mark: s, menu: { attrs: { label: null, type: ["list", "context", "toolbar"] } }, meta: { attrs: { content: null, charset: charsets, name: ["viewport", "application-name", "author", "description", "generator", "keywords"], "http-equiv": ["content-language", "content-type", "default-style", "refresh"] } }, meter: { attrs: { value: null, min: null, low: null, high: null, max: null, optimum: null } }, nav: s, noframes: s, noscript: s, object: { attrs: { data: null, type: null, name: null, usemap: null, form: null, width: null, height: null, typemustmatch: ["", "typemustmatch"] } }, ol: { attrs: { reversed: ["", "reversed"], start: null, type: ["1", "a", "A", "i", "I"] } }, optgroup: { attrs: { disabled: ["", "disabled"], label: null } }, option: { attrs: { disabled: ["", "disabled"], label: null, selected: ["", "selected"], value: null } }, output: { attrs: { "for": null, form: null, name: null } }, p: s, param: { attrs: { name: null, value: null } }, pre: s, progress: { attrs: { value: null, max: null } }, q: { attrs: { cite: null } }, rp: s, rt: s, ruby: s, s: s, samp: s, script: { attrs: { type: ["text/javascript"], src: null, async: ["", "async"], defer: ["", "defer"], charset: charsets } }, section: s, select: { attrs: { form: null, name: null, size: null, autofocus: ["", "autofocus"], disabled: ["", "disabled"], multiple: ["", "multiple"] } }, small: s, source: { attrs: { src: null, type: null, media: null } }, span: s, strike: s, strong: s, style: { attrs: { type: ["text/css"], media: media, scoped: null } }, sub: s, summary: s, sup: s, table: s, tbody: s, td: { attrs: { colspan: null, rowspan: null, headers: null } }, textarea: { attrs: { dirname: null, form: null, maxlength: null, name: null, placeholder: null, rows: null, cols: null, autofocus: ["", "autofocus"], disabled: ["", "disabled"], readonly: ["", "readonly"], required: ["", "required"], wrap: ["soft", "hard"] } }, tfoot: s, th: { attrs: { colspan: null, rowspan: null, headers: null, scope: ["row", "col", "rowgroup", "colgroup"] } }, thead: s, time: { attrs: { datetime: null } }, title: s, tr: s, track: { attrs: { src: null, label: null, "default": null, kind: ["subtitles", "captions", "descriptions", "chapters", "metadata"], srclang: langs } }, tt: s, u: s, ul: s, "var": s, video: { attrs: { src: null, poster: null, width: null, height: null, crossorigin: ["anonymous", "use-credentials"], preload: ["auto", "metadata", "none"], autoplay: ["", "autoplay"], mediagroup: ["movie"], muted: ["", "muted"], controls: ["", "controls"] } }, wbr: s }; var globalAttrs = { accesskey: ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], "class": null, contenteditable: ["true", "false"], contextmenu: null, dir: ["ltr", "rtl", "auto"], draggable: ["true", "false", "auto"], dropzone: ["copy", "move", "link", "string:", "file:"], hidden: ["hidden"], id: null, inert: ["inert"], itemid: null, itemprop: null, itemref: null, itemscope: ["itemscope"], itemtype: null, lang: ["en", "es"], spellcheck: ["true", "false"], style: null, tabindex: ["1", "2", "3", "4", "5", "6", "7", "8", "9"], title: null, translate: ["yes", "no"], onclick: null, rel: ["stylesheet", "alternate", "author", "bookmark", "help", "license", "next", "nofollow", "noreferrer", "prefetch", "prev", "search", "tag"] }; function populate(obj) { for (var attr in globalAttrs) if (globalAttrs.hasOwnProperty(attr)) obj.attrs[attr] = globalAttrs[attr]; } populate(s); for (var tag in data) if (data.hasOwnProperty(tag) && data[tag] != s) populate(data[tag]); CodeMirror.htmlSchema = data; function htmlHint(cm, options) { var local = {schemaInfo: data}; if (options) for (var opt in options) local[opt] = options[opt]; return CodeMirror.hint.xml(cm, local); } CodeMirror.registerHelper("hint", "html", htmlHint); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/hint/javascript-hint.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { var Pos = CodeMirror.Pos; function forEach(arr, f) { for (var i = 0, e = arr.length; i < e; ++i) f(arr[i]); } function arrayContains(arr, item) { if (!Array.prototype.indexOf) { var i = arr.length; while (i--) { if (arr[i] === item) { return true; } } return false; } return arr.indexOf(item) != -1; } function scriptHint(editor, keywords, getToken, options) { // Find the token at the cursor var cur = editor.getCursor(), token = getToken(editor, cur); if (/\b(?:string|comment)\b/.test(token.type)) return; token.state = CodeMirror.innerMode(editor.getMode(), token.state).state; // If it's not a 'word-style' token, ignore the token. if (!/^[\w$_]*$/.test(token.string)) { token = {start: cur.ch, end: cur.ch, string: "", state: token.state, type: token.string == "." ? "property" : null}; } else if (token.end > cur.ch) { token.end = cur.ch; token.string = token.string.slice(0, cur.ch - token.start); } var tprop = token; // If it is a property, find out what it is a property of. while (tprop.type == "property") { tprop = getToken(editor, Pos(cur.line, tprop.start)); if (tprop.string != ".") return; tprop = getToken(editor, Pos(cur.line, tprop.start)); if (!context) var context = []; context.push(tprop); } return {list: getCompletions(token, context, keywords, options), from: Pos(cur.line, token.start), to: Pos(cur.line, token.end)}; } function javascriptHint(editor, options) { return scriptHint(editor, javascriptKeywords, function (e, cur) {return e.getTokenAt(cur);}, options); }; CodeMirror.registerHelper("hint", "javascript", javascriptHint); function getCoffeeScriptToken(editor, cur) { // This getToken, it is for coffeescript, imitates the behavior of // getTokenAt method in javascript.js, that is, returning "property" // type and treat "." as indepenent token. var token = editor.getTokenAt(cur); if (cur.ch == token.start + 1 && token.string.charAt(0) == '.') { token.end = token.start; token.string = '.'; token.type = "property"; } else if (/^\.[\w$_]*$/.test(token.string)) { token.type = "property"; token.start++; token.string = token.string.replace(/\./, ''); } return token; } function coffeescriptHint(editor, options) { return scriptHint(editor, coffeescriptKeywords, getCoffeeScriptToken, options); } CodeMirror.registerHelper("hint", "coffeescript", coffeescriptHint); var stringProps = ("charAt charCodeAt indexOf lastIndexOf substring substr slice trim trimLeft trimRight " + "toUpperCase toLowerCase split concat match replace search").split(" "); var arrayProps = ("length concat join splice push pop shift unshift slice reverse sort indexOf " + "lastIndexOf every some filter forEach map reduce reduceRight ").split(" "); var funcProps = "prototype apply call bind".split(" "); var javascriptKeywords = ("break case catch continue debugger default delete do else false finally for function " + "if in instanceof new null return switch throw true try typeof var void while with").split(" "); var coffeescriptKeywords = ("and break catch class continue delete do else extends false finally for " + "if in instanceof isnt new no not null of off on or return switch then throw true try typeof until void while with yes").split(" "); function getCompletions(token, context, keywords, options) { var found = [], start = token.string, global = options && options.globalScope || window; function maybeAdd(str) { if (str.lastIndexOf(start, 0) == 0 && !arrayContains(found, str)) found.push(str); } function gatherCompletions(obj) { if (typeof obj == "string") forEach(stringProps, maybeAdd); else if (obj instanceof Array) forEach(arrayProps, maybeAdd); else if (obj instanceof Function) forEach(funcProps, maybeAdd); for (var name in obj) maybeAdd(name); } if (context && context.length) { // If this is a property, see if it belongs to some object we can // find in the current environment. var obj = context.pop(), base; if (obj.type && obj.type.indexOf("variable") === 0) { if (options && options.additionalContext) base = options.additionalContext[obj.string]; if (!options || options.useGlobalScope !== false) base = base || global[obj.string]; } else if (obj.type == "string") { base = ""; } else if (obj.type == "atom") { base = 1; } else if (obj.type == "function") { if (global.jQuery != null && (obj.string == '$' || obj.string == 'jQuery') && (typeof global.jQuery == 'function')) base = global.jQuery(); else if (global._ != null && (obj.string == '_') && (typeof global._ == 'function')) base = global._(); } while (base != null && context.length) base = base[context.pop().string]; if (base != null) gatherCompletions(base); } else { // If not, just look in the global object and any local scope // (reading into JS mode internals to get at the local and global variables) for (var v = token.state.localVars; v; v = v.next) maybeAdd(v.name); for (var v = token.state.globalVars; v; v = v.next) maybeAdd(v.name); if (!options || options.useGlobalScope !== false) gatherCompletions(global); forEach(keywords, maybeAdd); } return found; } }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/hint/show-hint.css ================================================ .CodeMirror-hints { position: absolute; z-index: 10; overflow: hidden; list-style: none; margin: 0; padding: 2px; -webkit-box-shadow: 2px 3px 5px rgba(0,0,0,.2); -moz-box-shadow: 2px 3px 5px rgba(0,0,0,.2); box-shadow: 2px 3px 5px rgba(0,0,0,.2); border-radius: 3px; border: 1px solid silver; background: white; font-size: 90%; font-family: monospace; max-height: 20em; overflow-y: auto; } .CodeMirror-hint { margin: 0; padding: 0 4px; border-radius: 2px; max-width: 19em; overflow: hidden; white-space: pre; color: black; cursor: pointer; } li.CodeMirror-hint-active { background: #08f; color: white; } ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/hint/show-hint.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; var HINT_ELEMENT_CLASS = "CodeMirror-hint"; var ACTIVE_HINT_ELEMENT_CLASS = "CodeMirror-hint-active"; // This is the old interface, kept around for now to stay // backwards-compatible. CodeMirror.showHint = function(cm, getHints, options) { if (!getHints) return cm.showHint(options); if (options && options.async) getHints.async = true; var newOpts = {hint: getHints}; if (options) for (var prop in options) newOpts[prop] = options[prop]; return cm.showHint(newOpts); }; var asyncRunID = 0; function retrieveHints(getter, cm, options, then) { if (getter.async) { var id = ++asyncRunID; getter(cm, function(hints) { if (asyncRunID == id) then(hints); }, options); } else { then(getter(cm, options)); } } CodeMirror.defineExtension("showHint", function(options) { // We want a single cursor position. if (this.listSelections().length > 1 || this.somethingSelected()) return; if (this.state.completionActive) this.state.completionActive.close(); var completion = this.state.completionActive = new Completion(this, options); var getHints = completion.options.hint; if (!getHints) return; CodeMirror.signal(this, "startCompletion", this); return retrieveHints(getHints, this, completion.options, function(hints) { completion.showHints(hints); }); }); function Completion(cm, options) { this.cm = cm; this.options = this.buildOptions(options); this.widget = this.onClose = null; } Completion.prototype = { close: function() { if (!this.active()) return; this.cm.state.completionActive = null; if (this.widget) this.widget.close(); if (this.onClose) this.onClose(); CodeMirror.signal(this.cm, "endCompletion", this.cm); }, active: function() { return this.cm.state.completionActive == this; }, pick: function(data, i) { var completion = data.list[i]; if (completion.hint) completion.hint(this.cm, data, completion); else this.cm.replaceRange(getText(completion), completion.from || data.from, completion.to || data.to, "complete"); CodeMirror.signal(data, "pick", completion); this.close(); }, showHints: function(data) { if (!data || !data.list.length || !this.active()) return this.close(); if (this.options.completeSingle && data.list.length == 1) this.pick(data, 0); else this.showWidget(data); }, showWidget: function(data) { this.widget = new Widget(this, data); CodeMirror.signal(data, "shown"); var debounce = 0, completion = this, finished; var closeOn = this.options.closeCharacters; var startPos = this.cm.getCursor(), startLen = this.cm.getLine(startPos.line).length; var requestAnimationFrame = window.requestAnimationFrame || function(fn) { return setTimeout(fn, 1000/60); }; var cancelAnimationFrame = window.cancelAnimationFrame || clearTimeout; function done() { if (finished) return; finished = true; completion.close(); completion.cm.off("cursorActivity", activity); if (data) CodeMirror.signal(data, "close"); } function update() { if (finished) return; CodeMirror.signal(data, "update"); retrieveHints(completion.options.hint, completion.cm, completion.options, finishUpdate); } function finishUpdate(data_) { data = data_; if (finished) return; if (!data || !data.list.length) return done(); if (completion.widget) completion.widget.close(); completion.widget = new Widget(completion, data); } function clearDebounce() { if (debounce) { cancelAnimationFrame(debounce); debounce = 0; } } function activity() { clearDebounce(); var pos = completion.cm.getCursor(), line = completion.cm.getLine(pos.line); if (pos.line != startPos.line || line.length - pos.ch != startLen - startPos.ch || pos.ch < startPos.ch || completion.cm.somethingSelected() || (pos.ch && closeOn.test(line.charAt(pos.ch - 1)))) { completion.close(); } else { debounce = requestAnimationFrame(update); if (completion.widget) completion.widget.close(); } } this.cm.on("cursorActivity", activity); this.onClose = done; }, buildOptions: function(options) { var editor = this.cm.options.hintOptions; var out = {}; for (var prop in defaultOptions) out[prop] = defaultOptions[prop]; if (editor) for (var prop in editor) if (editor[prop] !== undefined) out[prop] = editor[prop]; if (options) for (var prop in options) if (options[prop] !== undefined) out[prop] = options[prop]; return out; } }; function getText(completion) { if (typeof completion == "string") return completion; else return completion.text; } function buildKeyMap(completion, handle) { var baseMap = { Up: function() {handle.moveFocus(-1);}, Down: function() {handle.moveFocus(1);}, PageUp: function() {handle.moveFocus(-handle.menuSize() + 1, true);}, PageDown: function() {handle.moveFocus(handle.menuSize() - 1, true);}, Home: function() {handle.setFocus(0);}, End: function() {handle.setFocus(handle.length - 1);}, Enter: handle.pick, Tab: handle.pick, Esc: handle.close }; var custom = completion.options.customKeys; var ourMap = custom ? {} : baseMap; function addBinding(key, val) { var bound; if (typeof val != "string") bound = function(cm) { return val(cm, handle); }; // This mechanism is deprecated else if (baseMap.hasOwnProperty(val)) bound = baseMap[val]; else bound = val; ourMap[key] = bound; } if (custom) for (var key in custom) if (custom.hasOwnProperty(key)) addBinding(key, custom[key]); var extra = completion.options.extraKeys; if (extra) for (var key in extra) if (extra.hasOwnProperty(key)) addBinding(key, extra[key]); return ourMap; } function getHintElement(hintsElement, el) { while (el && el != hintsElement) { if (el.nodeName.toUpperCase() === "LI" && el.parentNode == hintsElement) return el; el = el.parentNode; } } function Widget(completion, data) { this.completion = completion; this.data = data; var widget = this, cm = completion.cm; var hints = this.hints = document.createElement("ul"); hints.className = "CodeMirror-hints"; this.selectedHint = data.selectedHint || 0; var completions = data.list; for (var i = 0; i < completions.length; ++i) { var elt = hints.appendChild(document.createElement("li")), cur = completions[i]; var className = HINT_ELEMENT_CLASS + (i != this.selectedHint ? "" : " " + ACTIVE_HINT_ELEMENT_CLASS); if (cur.className != null) className = cur.className + " " + className; elt.className = className; if (cur.render) cur.render(elt, data, cur); else elt.appendChild(document.createTextNode(cur.displayText || getText(cur))); elt.hintId = i; } var pos = cm.cursorCoords(completion.options.alignWithWord ? data.from : null); var left = pos.left, top = pos.bottom, below = true; hints.style.left = left + "px"; hints.style.top = top + "px"; // If we're at the edge of the screen, then we want the menu to appear on the left of the cursor. var winW = window.innerWidth || Math.max(document.body.offsetWidth, document.documentElement.offsetWidth); var winH = window.innerHeight || Math.max(document.body.offsetHeight, document.documentElement.offsetHeight); (completion.options.container || document.body).appendChild(hints); var box = hints.getBoundingClientRect(), overlapY = box.bottom - winH; if (overlapY > 0) { var height = box.bottom - box.top, curTop = pos.top - (pos.bottom - box.top); if (curTop - height > 0) { // Fits above cursor hints.style.top = (top = pos.top - height) + "px"; below = false; } else if (height > winH) { hints.style.height = (winH - 5) + "px"; hints.style.top = (top = pos.bottom - box.top) + "px"; var cursor = cm.getCursor(); if (data.from.ch != cursor.ch) { pos = cm.cursorCoords(cursor); hints.style.left = (left = pos.left) + "px"; box = hints.getBoundingClientRect(); } } } var overlapX = box.right - winW; if (overlapX > 0) { if (box.right - box.left > winW) { hints.style.width = (winW - 5) + "px"; overlapX -= (box.right - box.left) - winW; } hints.style.left = (left = pos.left - overlapX) + "px"; } cm.addKeyMap(this.keyMap = buildKeyMap(completion, { moveFocus: function(n, avoidWrap) { widget.changeActive(widget.selectedHint + n, avoidWrap); }, setFocus: function(n) { widget.changeActive(n); }, menuSize: function() { return widget.screenAmount(); }, length: completions.length, close: function() { completion.close(); }, pick: function() { widget.pick(); }, data: data })); if (completion.options.closeOnUnfocus) { var closingOnBlur; cm.on("blur", this.onBlur = function() { closingOnBlur = setTimeout(function() { completion.close(); }, 100); }); cm.on("focus", this.onFocus = function() { clearTimeout(closingOnBlur); }); } var startScroll = cm.getScrollInfo(); cm.on("scroll", this.onScroll = function() { var curScroll = cm.getScrollInfo(), editor = cm.getWrapperElement().getBoundingClientRect(); var newTop = top + startScroll.top - curScroll.top; var point = newTop - (window.pageYOffset || (document.documentElement || document.body).scrollTop); if (!below) point += hints.offsetHeight; if (point <= editor.top || point >= editor.bottom) return completion.close(); hints.style.top = newTop + "px"; hints.style.left = (left + startScroll.left - curScroll.left) + "px"; }); CodeMirror.on(hints, "dblclick", function(e) { var t = getHintElement(hints, e.target || e.srcElement); if (t && t.hintId != null) {widget.changeActive(t.hintId); widget.pick();} }); CodeMirror.on(hints, "click", function(e) { var t = getHintElement(hints, e.target || e.srcElement); if (t && t.hintId != null) { widget.changeActive(t.hintId); if (completion.options.completeOnSingleClick) widget.pick(); } }); CodeMirror.on(hints, "mousedown", function() { setTimeout(function(){cm.focus();}, 20); }); CodeMirror.signal(data, "select", completions[0], hints.firstChild); return true; } Widget.prototype = { close: function() { if (this.completion.widget != this) return; this.completion.widget = null; this.hints.parentNode.removeChild(this.hints); this.completion.cm.removeKeyMap(this.keyMap); var cm = this.completion.cm; if (this.completion.options.closeOnUnfocus) { cm.off("blur", this.onBlur); cm.off("focus", this.onFocus); } cm.off("scroll", this.onScroll); }, pick: function() { this.completion.pick(this.data, this.selectedHint); }, changeActive: function(i, avoidWrap) { if (i >= this.data.list.length) i = avoidWrap ? this.data.list.length - 1 : 0; else if (i < 0) i = avoidWrap ? 0 : this.data.list.length - 1; if (this.selectedHint == i) return; var node = this.hints.childNodes[this.selectedHint]; node.className = node.className.replace(" " + ACTIVE_HINT_ELEMENT_CLASS, ""); node = this.hints.childNodes[this.selectedHint = i]; node.className += " " + ACTIVE_HINT_ELEMENT_CLASS; if (node.offsetTop < this.hints.scrollTop) this.hints.scrollTop = node.offsetTop - 3; else if (node.offsetTop + node.offsetHeight > this.hints.scrollTop + this.hints.clientHeight) this.hints.scrollTop = node.offsetTop + node.offsetHeight - this.hints.clientHeight + 3; CodeMirror.signal(this.data, "select", this.data.list[this.selectedHint], node); }, screenAmount: function() { return Math.floor(this.hints.clientHeight / this.hints.firstChild.offsetHeight) || 1; } }; CodeMirror.registerHelper("hint", "auto", function(cm, options) { var helpers = cm.getHelpers(cm.getCursor(), "hint"), words; if (helpers.length) { for (var i = 0; i < helpers.length; i++) { var cur = helpers[i](cm, options); if (cur && cur.list.length) return cur; } } else if (words = cm.getHelper(cm.getCursor(), "hintWords")) { if (words) return CodeMirror.hint.fromList(cm, {words: words}); } else if (CodeMirror.hint.anyword) { return CodeMirror.hint.anyword(cm, options); } }); CodeMirror.registerHelper("hint", "fromList", function(cm, options) { var cur = cm.getCursor(), token = cm.getTokenAt(cur); var found = []; for (var i = 0; i < options.words.length; i++) { var word = options.words[i]; if (word.slice(0, token.string.length) == token.string) found.push(word); } if (found.length) return { list: found, from: CodeMirror.Pos(cur.line, token.start), to: CodeMirror.Pos(cur.line, token.end) }; }); CodeMirror.commands.autocomplete = CodeMirror.showHint; var defaultOptions = { hint: CodeMirror.hint.auto, completeSingle: true, alignWithWord: true, closeCharacters: /[\s()\[\]{};:>,]/, closeOnUnfocus: true, completeOnSingleClick: false, container: null, customKeys: null, extraKeys: null }; CodeMirror.defineOption("hintOptions", null); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/hint/sql-hint.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../../mode/sql/sql")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../../mode/sql/sql"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; var tables; var defaultTable; var keywords; var CONS = { QUERY_DIV: ";", ALIAS_KEYWORD: "AS" }; var Pos = CodeMirror.Pos; function getKeywords(editor) { var mode = editor.doc.modeOption; if (mode === "sql") mode = "text/x-sql"; return CodeMirror.resolveMode(mode).keywords; } function getText(item) { return typeof item == "string" ? item : item.text; } function getItem(list, item) { if (!list.slice) return list[item]; for (var i = list.length - 1; i >= 0; i--) if (getText(list[i]) == item) return list[i]; } function shallowClone(object) { var result = {}; for (var key in object) if (object.hasOwnProperty(key)) result[key] = object[key]; return result; } function match(string, word) { var len = string.length; var sub = getText(word).substr(0, len); return string.toUpperCase() === sub.toUpperCase(); } function addMatches(result, search, wordlist, formatter) { for (var word in wordlist) { if (!wordlist.hasOwnProperty(word)) continue; if (Array.isArray(wordlist)) { word = wordlist[word]; } if (match(search, word)) { result.push(formatter(word)); } } } function cleanName(name) { // Get rid name from backticks(`) and preceding dot(.) if (name.charAt(0) == ".") { name = name.substr(1); } return name.replace(/`/g, ""); } function insertBackticks(name) { var nameParts = getText(name).split("."); for (var i = 0; i < nameParts.length; i++) nameParts[i] = "`" + nameParts[i] + "`"; var escaped = nameParts.join("."); if (typeof name == "string") return escaped; name = shallowClone(name); name.text = escaped; return name; } function nameCompletion(cur, token, result, editor) { // Try to complete table, colunm names and return start position of completion var useBacktick = false; var nameParts = []; var start = token.start; var cont = true; while (cont) { cont = (token.string.charAt(0) == "."); useBacktick = useBacktick || (token.string.charAt(0) == "`"); start = token.start; nameParts.unshift(cleanName(token.string)); token = editor.getTokenAt(Pos(cur.line, token.start)); if (token.string == ".") { cont = true; token = editor.getTokenAt(Pos(cur.line, token.start)); } } // Try to complete table names var string = nameParts.join("."); addMatches(result, string, tables, function(w) { return useBacktick ? insertBackticks(w) : w; }); // Try to complete columns from defaultTable addMatches(result, string, defaultTable, function(w) { return useBacktick ? insertBackticks(w) : w; }); // Try to complete columns string = nameParts.pop(); var table = nameParts.join("."); // Check if table is available. If not, find table by Alias if (!getItem(tables, table)) table = findTableByAlias(table, editor); var columns = getItem(tables, table); if (columns && Array.isArray(tables) && columns.columns) columns = columns.columns; if (columns) { addMatches(result, string, columns, function(w) { if (typeof w == "string") { w = table + "." + w; } else { w = shallowClone(w); w.text = table + "." + w.text; } return useBacktick ? insertBackticks(w) : w; }); } return start; } function eachWord(lineText, f) { if (!lineText) return; var excepted = /[,;]/g; var words = lineText.split(" "); for (var i = 0; i < words.length; i++) { f(words[i]?words[i].replace(excepted, '') : ''); } } function convertCurToNumber(cur) { // max characters of a line is 999,999. return cur.line + cur.ch / Math.pow(10, 6); } function convertNumberToCur(num) { return Pos(Math.floor(num), +num.toString().split('.').pop()); } function findTableByAlias(alias, editor) { var doc = editor.doc; var fullQuery = doc.getValue(); var aliasUpperCase = alias.toUpperCase(); var previousWord = ""; var table = ""; var separator = []; var validRange = { start: Pos(0, 0), end: Pos(editor.lastLine(), editor.getLineHandle(editor.lastLine()).length) }; //add separator var indexOfSeparator = fullQuery.indexOf(CONS.QUERY_DIV); while(indexOfSeparator != -1) { separator.push(doc.posFromIndex(indexOfSeparator)); indexOfSeparator = fullQuery.indexOf(CONS.QUERY_DIV, indexOfSeparator+1); } separator.unshift(Pos(0, 0)); separator.push(Pos(editor.lastLine(), editor.getLineHandle(editor.lastLine()).text.length)); //find valid range var prevItem = 0; var current = convertCurToNumber(editor.getCursor()); for (var i=0; i< separator.length; i++) { var _v = convertCurToNumber(separator[i]); if (current > prevItem && current <= _v) { validRange = { start: convertNumberToCur(prevItem), end: convertNumberToCur(_v) }; break; } prevItem = _v; } var query = doc.getRange(validRange.start, validRange.end, false); for (var i = 0; i < query.length; i++) { var lineText = query[i]; eachWord(lineText, function(word) { var wordUpperCase = word.toUpperCase(); if (wordUpperCase === aliasUpperCase && getItem(tables, previousWord)) table = previousWord; if (wordUpperCase !== CONS.ALIAS_KEYWORD) previousWord = word; }); if (table) break; } return table; } CodeMirror.registerHelper("hint", "sql", function(editor, options) { tables = (options && options.tables) || {}; var defaultTableName = options && options.defaultTable; defaultTable = (defaultTableName && getItem(tables, defaultTableName)) || []; keywords = keywords || getKeywords(editor); var cur = editor.getCursor(); var result = []; var token = editor.getTokenAt(cur), start, end, search; if (token.end > cur.ch) { token.end = cur.ch; token.string = token.string.slice(0, cur.ch - token.start); } if (token.string.match(/^[.`\w@]\w*$/)) { search = token.string; start = token.start; end = token.end; } else { start = end = cur.ch; search = ""; } if (search.charAt(0) == "." || search.charAt(0) == "`") { start = nameCompletion(cur, token, result, editor); } else { addMatches(result, search, tables, function(w) {return w;}); addMatches(result, search, defaultTable, function(w) {return w;}); addMatches(result, search, keywords, function(w) {return w.toUpperCase();}); } return {list: result, from: Pos(cur.line, start), to: Pos(cur.line, end)}; }); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/hint/xml-hint.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; var Pos = CodeMirror.Pos; function getHints(cm, options) { var tags = options && options.schemaInfo; var quote = (options && options.quoteChar) || '"'; if (!tags) return; var cur = cm.getCursor(), token = cm.getTokenAt(cur); if (token.end > cur.ch) { token.end = cur.ch; token.string = token.string.slice(0, cur.ch - token.start); } var inner = CodeMirror.innerMode(cm.getMode(), token.state); if (inner.mode.name != "xml") return; var result = [], replaceToken = false, prefix; var tag = /\btag\b/.test(token.type) && !/>$/.test(token.string); var tagName = tag && /^\w/.test(token.string), tagStart; if (tagName) { var before = cm.getLine(cur.line).slice(Math.max(0, token.start - 2), token.start); var tagType = /<\/$/.test(before) ? "close" : /<$/.test(before) ? "open" : null; if (tagType) tagStart = token.start - (tagType == "close" ? 2 : 1); } else if (tag && token.string == "<") { tagType = "open"; } else if (tag && token.string == ""); } else { // Attribute completion var curTag = tags[inner.state.tagName], attrs = curTag && curTag.attrs; var globalAttrs = tags["!attrs"]; if (!attrs && !globalAttrs) return; if (!attrs) { attrs = globalAttrs; } else if (globalAttrs) { // Combine tag-local and global attributes var set = {}; for (var nm in globalAttrs) if (globalAttrs.hasOwnProperty(nm)) set[nm] = globalAttrs[nm]; for (var nm in attrs) if (attrs.hasOwnProperty(nm)) set[nm] = attrs[nm]; attrs = set; } if (token.type == "string" || token.string == "=") { // A value var before = cm.getRange(Pos(cur.line, Math.max(0, cur.ch - 60)), Pos(cur.line, token.type == "string" ? token.start : token.end)); var atName = before.match(/([^\s\u00a0=<>\"\']+)=$/), atValues; if (!atName || !attrs.hasOwnProperty(atName[1]) || !(atValues = attrs[atName[1]])) return; if (typeof atValues == 'function') atValues = atValues.call(this, cm); // Functions can be used to supply values for autocomplete widget if (token.type == "string") { prefix = token.string; var n = 0; if (/['"]/.test(token.string.charAt(0))) { quote = token.string.charAt(0); prefix = token.string.slice(1); n++; } var len = token.string.length; if (/['"]/.test(token.string.charAt(len - 1))) { quote = token.string.charAt(len - 1); prefix = token.string.substr(n, len - 2); } replaceToken = true; } for (var i = 0; i < atValues.length; ++i) if (!prefix || atValues[i].lastIndexOf(prefix, 0) == 0) result.push(quote + atValues[i] + quote); } else { // An attribute name if (token.type == "attribute") { prefix = token.string; replaceToken = true; } for (var attr in attrs) if (attrs.hasOwnProperty(attr) && (!prefix || attr.lastIndexOf(prefix, 0) == 0)) result.push(attr); } } return { list: result, from: replaceToken ? Pos(cur.line, tagStart == null ? token.start : tagStart) : cur, to: replaceToken ? Pos(cur.line, token.end) : cur }; } CodeMirror.registerHelper("hint", "xml", getHints); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/lint/coffeescript-lint.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE // Depends on coffeelint.js from http://www.coffeelint.org/js/coffeelint.js // declare global: coffeelint (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.registerHelper("lint", "coffeescript", function(text) { var found = []; var parseError = function(err) { var loc = err.lineNumber; found.push({from: CodeMirror.Pos(loc-1, 0), to: CodeMirror.Pos(loc, 0), severity: err.level, message: err.message}); }; try { var res = coffeelint.lint(text); for(var i = 0; i < res.length; i++) { parseError(res[i]); } } catch(e) { found.push({from: CodeMirror.Pos(e.location.first_line, 0), to: CodeMirror.Pos(e.location.last_line, e.location.last_column), severity: 'error', message: e.message}); } return found; }); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/lint/css-lint.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE // Depends on csslint.js from https://github.com/stubbornella/csslint // declare global: CSSLint (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.registerHelper("lint", "css", function(text) { var found = []; if (!window.CSSLint) return found; var results = CSSLint.verify(text), messages = results.messages, message = null; for ( var i = 0; i < messages.length; i++) { message = messages[i]; var startLine = message.line -1, endLine = message.line -1, startCol = message.col -1, endCol = message.col; found.push({ from: CodeMirror.Pos(startLine, startCol), to: CodeMirror.Pos(endLine, endCol), message: message.message, severity : message.type }); } return found; }); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/lint/javascript-lint.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; // declare global: JSHINT var bogus = [ "Dangerous comment" ]; var warnings = [ [ "Expected '{'", "Statement body should be inside '{ }' braces." ] ]; var errors = [ "Missing semicolon", "Extra comma", "Missing property name", "Unmatched ", " and instead saw", " is not defined", "Unclosed string", "Stopping, unable to continue" ]; function validator(text, options) { if (!window.JSHINT) return []; JSHINT(text, options); var errors = JSHINT.data().errors, result = []; if (errors) parseErrors(errors, result); return result; } CodeMirror.registerHelper("lint", "javascript", validator); function cleanup(error) { // All problems are warnings by default fixWith(error, warnings, "warning", true); fixWith(error, errors, "error"); return isBogus(error) ? null : error; } function fixWith(error, fixes, severity, force) { var description, fix, find, replace, found; description = error.description; for ( var i = 0; i < fixes.length; i++) { fix = fixes[i]; find = (typeof fix === "string" ? fix : fix[0]); replace = (typeof fix === "string" ? null : fix[1]); found = description.indexOf(find) !== -1; if (force || found) { error.severity = severity; } if (found && replace) { error.description = replace; } } } function isBogus(error) { var description = error.description; for ( var i = 0; i < bogus.length; i++) { if (description.indexOf(bogus[i]) !== -1) { return true; } } return false; } function parseErrors(errors, output) { for ( var i = 0; i < errors.length; i++) { var error = errors[i]; if (error) { var linetabpositions, index; linetabpositions = []; // This next block is to fix a problem in jshint. Jshint // replaces // all tabs with spaces then performs some checks. The error // positions (character/space) are then reported incorrectly, // not taking the replacement step into account. Here we look // at the evidence line and try to adjust the character position // to the correct value. if (error.evidence) { // Tab positions are computed once per line and cached var tabpositions = linetabpositions[error.line]; if (!tabpositions) { var evidence = error.evidence; tabpositions = []; // ugggh phantomjs does not like this // forEachChar(evidence, function(item, index) { Array.prototype.forEach.call(evidence, function(item, index) { if (item === '\t') { // First col is 1 (not 0) to match error // positions tabpositions.push(index + 1); } }); linetabpositions[error.line] = tabpositions; } if (tabpositions.length > 0) { var pos = error.character; tabpositions.forEach(function(tabposition) { if (pos > tabposition) pos -= 1; }); error.character = pos; } } var start = error.character - 1, end = start + 1; if (error.evidence) { index = error.evidence.substring(start).search(/.\b/); if (index > -1) { end += index; } } // Convert to format expected by validation service error.description = error.reason;// + "(jshint)"; error.start = error.character; error.end = end; error = cleanup(error); if (error) output.push({message: error.description, severity: error.severity, from: CodeMirror.Pos(error.line - 1, start), to: CodeMirror.Pos(error.line - 1, end)}); } } } }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/lint/json-lint.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE // Depends on jsonlint.js from https://github.com/zaach/jsonlint // declare global: jsonlint (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.registerHelper("lint", "json", function(text) { var found = []; jsonlint.parseError = function(str, hash) { var loc = hash.loc; found.push({from: CodeMirror.Pos(loc.first_line - 1, loc.first_column), to: CodeMirror.Pos(loc.last_line - 1, loc.last_column), message: str}); }; try { jsonlint.parse(text); } catch(e) {} return found; }); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/lint/lint.css ================================================ /* The lint marker gutter */ .CodeMirror-lint-markers { width: 16px; } .CodeMirror-lint-tooltip { background-color: infobackground; border: 1px solid black; border-radius: 4px 4px 4px 4px; color: infotext; font-family: monospace; font-size: 10pt; overflow: hidden; padding: 2px 5px; position: fixed; white-space: pre; white-space: pre-wrap; z-index: 100; max-width: 600px; opacity: 0; transition: opacity .4s; -moz-transition: opacity .4s; -webkit-transition: opacity .4s; -o-transition: opacity .4s; -ms-transition: opacity .4s; } .CodeMirror-lint-mark-error, .CodeMirror-lint-mark-warning { background-position: left bottom; background-repeat: repeat-x; } .CodeMirror-lint-mark-error { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAYAAAC09K7GAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sJDw4cOCW1/KIAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAHElEQVQI12NggIL/DAz/GdA5/xkY/qPKMDAwAADLZwf5rvm+LQAAAABJRU5ErkJggg==") ; } .CodeMirror-lint-mark-warning { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAYAAAC09K7GAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sJFhQXEbhTg7YAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAMklEQVQI12NkgIIvJ3QXMjAwdDN+OaEbysDA4MPAwNDNwMCwiOHLCd1zX07o6kBVGQEAKBANtobskNMAAAAASUVORK5CYII="); } .CodeMirror-lint-marker-error, .CodeMirror-lint-marker-warning { background-position: center center; background-repeat: no-repeat; cursor: pointer; display: inline-block; height: 16px; width: 16px; vertical-align: middle; position: relative; } .CodeMirror-lint-message-error, .CodeMirror-lint-message-warning { padding-left: 18px; background-position: top left; background-repeat: no-repeat; } .CodeMirror-lint-marker-error, .CodeMirror-lint-message-error { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAHlBMVEW7AAC7AACxAAC7AAC7AAAAAAC4AAC5AAD///+7AAAUdclpAAAABnRSTlMXnORSiwCK0ZKSAAAATUlEQVR42mWPOQ7AQAgDuQLx/z8csYRmPRIFIwRGnosRrpamvkKi0FTIiMASR3hhKW+hAN6/tIWhu9PDWiTGNEkTtIOucA5Oyr9ckPgAWm0GPBog6v4AAAAASUVORK5CYII="); } .CodeMirror-lint-marker-warning, .CodeMirror-lint-message-warning { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAANlBMVEX/uwDvrwD/uwD/uwD/uwD/uwD/uwD/uwD/uwD6twD/uwAAAADurwD2tQD7uAD+ugAAAAD/uwDhmeTRAAAADHRSTlMJ8mN1EYcbmiixgACm7WbuAAAAVklEQVR42n3PUQqAIBBFUU1LLc3u/jdbOJoW1P08DA9Gba8+YWJ6gNJoNYIBzAA2chBth5kLmG9YUoG0NHAUwFXwO9LuBQL1giCQb8gC9Oro2vp5rncCIY8L8uEx5ZkAAAAASUVORK5CYII="); } .CodeMirror-lint-marker-multiple { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAHCAMAAADzjKfhAAAACVBMVEUAAAAAAAC/v7914kyHAAAAAXRSTlMAQObYZgAAACNJREFUeNo1ioEJAAAIwmz/H90iFFSGJgFMe3gaLZ0od+9/AQZ0ADosbYraAAAAAElFTkSuQmCC"); background-repeat: no-repeat; background-position: right bottom; width: 100%; height: 100%; } ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/lint/lint.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; var GUTTER_ID = "CodeMirror-lint-markers"; function showTooltip(e, content) { var tt = document.createElement("div"); tt.className = "CodeMirror-lint-tooltip"; tt.appendChild(content.cloneNode(true)); document.body.appendChild(tt); function position(e) { if (!tt.parentNode) return CodeMirror.off(document, "mousemove", position); tt.style.top = Math.max(0, e.clientY - tt.offsetHeight - 5) + "px"; tt.style.left = (e.clientX + 5) + "px"; } CodeMirror.on(document, "mousemove", position); position(e); if (tt.style.opacity != null) tt.style.opacity = 1; return tt; } function rm(elt) { if (elt.parentNode) elt.parentNode.removeChild(elt); } function hideTooltip(tt) { if (!tt.parentNode) return; if (tt.style.opacity == null) rm(tt); tt.style.opacity = 0; setTimeout(function() { rm(tt); }, 600); } function showTooltipFor(e, content, node) { var tooltip = showTooltip(e, content); function hide() { CodeMirror.off(node, "mouseout", hide); if (tooltip) { hideTooltip(tooltip); tooltip = null; } } var poll = setInterval(function() { if (tooltip) for (var n = node;; n = n.parentNode) { if (n && n.nodeType == 11) n = n.host; if (n == document.body) return; if (!n) { hide(); break; } } if (!tooltip) return clearInterval(poll); }, 400); CodeMirror.on(node, "mouseout", hide); } function LintState(cm, options, hasGutter) { this.marked = []; this.options = options; this.timeout = null; this.hasGutter = hasGutter; this.onMouseOver = function(e) { onMouseOver(cm, e); }; } function parseOptions(cm, options) { if (options instanceof Function) return {getAnnotations: options}; if (!options || options === true) options = {}; if (!options.getAnnotations) options.getAnnotations = cm.getHelper(CodeMirror.Pos(0, 0), "lint"); if (!options.getAnnotations) throw new Error("Required option 'getAnnotations' missing (lint addon)"); return options; } function clearMarks(cm) { var state = cm.state.lint; if (state.hasGutter) cm.clearGutter(GUTTER_ID); for (var i = 0; i < state.marked.length; ++i) state.marked[i].clear(); state.marked.length = 0; } function makeMarker(labels, severity, multiple, tooltips) { var marker = document.createElement("div"), inner = marker; marker.className = "CodeMirror-lint-marker-" + severity; if (multiple) { inner = marker.appendChild(document.createElement("div")); inner.className = "CodeMirror-lint-marker-multiple"; } if (tooltips != false) CodeMirror.on(inner, "mouseover", function(e) { showTooltipFor(e, labels, inner); }); return marker; } function getMaxSeverity(a, b) { if (a == "error") return a; else return b; } function groupByLine(annotations) { var lines = []; for (var i = 0; i < annotations.length; ++i) { var ann = annotations[i], line = ann.from.line; (lines[line] || (lines[line] = [])).push(ann); } return lines; } function annotationTooltip(ann) { var severity = ann.severity; if (!severity) severity = "error"; var tip = document.createElement("div"); tip.className = "CodeMirror-lint-message-" + severity; tip.appendChild(document.createTextNode(ann.message)); return tip; } function startLinting(cm) { var state = cm.state.lint, options = state.options; var passOptions = options.options || options; // Support deprecated passing of `options` property in options if (options.async || options.getAnnotations.async) options.getAnnotations(cm.getValue(), updateLinting, passOptions, cm); else updateLinting(cm, options.getAnnotations(cm.getValue(), passOptions, cm)); } function updateLinting(cm, annotationsNotSorted) { clearMarks(cm); var state = cm.state.lint, options = state.options; var annotations = groupByLine(annotationsNotSorted); for (var line = 0; line < annotations.length; ++line) { var anns = annotations[line]; if (!anns) continue; var maxSeverity = null; var tipLabel = state.hasGutter && document.createDocumentFragment(); for (var i = 0; i < anns.length; ++i) { var ann = anns[i]; var severity = ann.severity; if (!severity) severity = "error"; maxSeverity = getMaxSeverity(maxSeverity, severity); if (options.formatAnnotation) ann = options.formatAnnotation(ann); if (state.hasGutter) tipLabel.appendChild(annotationTooltip(ann)); if (ann.to) state.marked.push(cm.markText(ann.from, ann.to, { className: "CodeMirror-lint-mark-" + severity, __annotation: ann })); } if (state.hasGutter) cm.setGutterMarker(line, GUTTER_ID, makeMarker(tipLabel, maxSeverity, anns.length > 1, state.options.tooltips)); } if (options.onUpdateLinting) options.onUpdateLinting(annotationsNotSorted, annotations, cm); } function onChange(cm) { var state = cm.state.lint; clearTimeout(state.timeout); state.timeout = setTimeout(function(){startLinting(cm);}, state.options.delay || 500); } function popupSpanTooltip(ann, e) { var target = e.target || e.srcElement; showTooltipFor(e, annotationTooltip(ann), target); } function onMouseOver(cm, e) { var target = e.target || e.srcElement; if (!/\bCodeMirror-lint-mark-/.test(target.className)) return; var box = target.getBoundingClientRect(), x = (box.left + box.right) / 2, y = (box.top + box.bottom) / 2; var spans = cm.findMarksAt(cm.coordsChar({left: x, top: y}, "client")); for (var i = 0; i < spans.length; ++i) { var ann = spans[i].__annotation; if (ann) return popupSpanTooltip(ann, e); } } CodeMirror.defineOption("lint", false, function(cm, val, old) { if (old && old != CodeMirror.Init) { clearMarks(cm); cm.off("change", onChange); CodeMirror.off(cm.getWrapperElement(), "mouseover", cm.state.lint.onMouseOver); delete cm.state.lint; } if (val) { var gutters = cm.getOption("gutters"), hasLintGutter = false; for (var i = 0; i < gutters.length; ++i) if (gutters[i] == GUTTER_ID) hasLintGutter = true; var state = cm.state.lint = new LintState(cm, parseOptions(cm, val), hasLintGutter); cm.on("change", onChange); if (state.options.tooltips != false) CodeMirror.on(cm.getWrapperElement(), "mouseover", state.onMouseOver); startLinting(cm); } }); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/lint/yaml-lint.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; // Depends on js-yaml.js from https://github.com/nodeca/js-yaml // declare global: jsyaml CodeMirror.registerHelper("lint", "yaml", function(text) { var found = []; try { jsyaml.load(text); } catch(e) { var loc = e.mark; found.push({ from: CodeMirror.Pos(loc.line, loc.column), to: CodeMirror.Pos(loc.line, loc.column), message: e.message }); } return found; }); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/merge/merge.css ================================================ .CodeMirror-merge { position: relative; border: 1px solid #ddd; white-space: pre; } .CodeMirror-merge, .CodeMirror-merge .CodeMirror { height: 350px; } .CodeMirror-merge-2pane .CodeMirror-merge-pane { width: 47%; } .CodeMirror-merge-2pane .CodeMirror-merge-gap { width: 6%; } .CodeMirror-merge-3pane .CodeMirror-merge-pane { width: 31%; } .CodeMirror-merge-3pane .CodeMirror-merge-gap { width: 3.5%; } .CodeMirror-merge-pane { display: inline-block; white-space: normal; vertical-align: top; } .CodeMirror-merge-pane-rightmost { position: absolute; right: 0px; z-index: 1; } .CodeMirror-merge-gap { z-index: 2; display: inline-block; height: 100%; -moz-box-sizing: border-box; box-sizing: border-box; overflow: hidden; border-left: 1px solid #ddd; border-right: 1px solid #ddd; position: relative; background: #f8f8f8; } .CodeMirror-merge-scrolllock-wrap { position: absolute; bottom: 0; left: 50%; } .CodeMirror-merge-scrolllock { position: relative; left: -50%; cursor: pointer; color: #555; line-height: 1; } .CodeMirror-merge-copybuttons-left, .CodeMirror-merge-copybuttons-right { position: absolute; left: 0; top: 0; right: 0; bottom: 0; line-height: 1; } .CodeMirror-merge-copy { position: absolute; cursor: pointer; color: #44c; } .CodeMirror-merge-copy-reverse { position: absolute; cursor: pointer; color: #44c; } .CodeMirror-merge-copybuttons-left .CodeMirror-merge-copy { left: 2px; } .CodeMirror-merge-copybuttons-right .CodeMirror-merge-copy { right: 2px; } .CodeMirror-merge-r-inserted, .CodeMirror-merge-l-inserted { background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAACCAYAAACddGYaAAAAGUlEQVQI12MwuCXy3+CWyH8GBgYGJgYkAABZbAQ9ELXurwAAAABJRU5ErkJggg==); background-position: bottom left; background-repeat: repeat-x; } .CodeMirror-merge-r-deleted, .CodeMirror-merge-l-deleted { background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAACCAYAAACddGYaAAAAGUlEQVQI12M4Kyb2/6yY2H8GBgYGJgYkAABURgPz6Ks7wQAAAABJRU5ErkJggg==); background-position: bottom left; background-repeat: repeat-x; } .CodeMirror-merge-r-chunk { background: #ffffe0; } .CodeMirror-merge-r-chunk-start { border-top: 1px solid #ee8; } .CodeMirror-merge-r-chunk-end { border-bottom: 1px solid #ee8; } .CodeMirror-merge-r-connect { fill: #ffffe0; stroke: #ee8; stroke-width: 1px; } .CodeMirror-merge-l-chunk { background: #eef; } .CodeMirror-merge-l-chunk-start { border-top: 1px solid #88e; } .CodeMirror-merge-l-chunk-end { border-bottom: 1px solid #88e; } .CodeMirror-merge-l-connect { fill: #eef; stroke: #88e; stroke-width: 1px; } .CodeMirror-merge-l-chunk.CodeMirror-merge-r-chunk { background: #dfd; } .CodeMirror-merge-l-chunk-start.CodeMirror-merge-r-chunk-start { border-top: 1px solid #4e4; } .CodeMirror-merge-l-chunk-end.CodeMirror-merge-r-chunk-end { border-bottom: 1px solid #4e4; } .CodeMirror-merge-collapsed-widget:before { content: "(...)"; } .CodeMirror-merge-collapsed-widget { cursor: pointer; color: #88b; background: #eef; border: 1px solid #ddf; font-size: 90%; padding: 0 3px; border-radius: 4px; } .CodeMirror-merge-collapsed-line .CodeMirror-gutter-elt { display: none; } ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/merge/merge.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE // declare global: diff_match_patch, DIFF_INSERT, DIFF_DELETE, DIFF_EQUAL (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("diff_match_patch")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "diff_match_patch"], mod); else // Plain browser env mod(CodeMirror, diff_match_patch); })(function(CodeMirror, diff_match_patch) { "use strict"; var Pos = CodeMirror.Pos; var svgNS = "http://www.w3.org/2000/svg"; function DiffView(mv, type) { this.mv = mv; this.type = type; this.classes = type == "left" ? {chunk: "CodeMirror-merge-l-chunk", start: "CodeMirror-merge-l-chunk-start", end: "CodeMirror-merge-l-chunk-end", insert: "CodeMirror-merge-l-inserted", del: "CodeMirror-merge-l-deleted", connect: "CodeMirror-merge-l-connect"} : {chunk: "CodeMirror-merge-r-chunk", start: "CodeMirror-merge-r-chunk-start", end: "CodeMirror-merge-r-chunk-end", insert: "CodeMirror-merge-r-inserted", del: "CodeMirror-merge-r-deleted", connect: "CodeMirror-merge-r-connect"}; } DiffView.prototype = { constructor: DiffView, init: function(pane, orig, options) { this.edit = this.mv.edit; this.orig = CodeMirror(pane, copyObj({value: orig, readOnly: !this.mv.options.allowEditingOriginals}, copyObj(options))); this.diff = getDiff(asString(orig), asString(options.value)); this.chunks = getChunks(this.diff); this.diffOutOfDate = this.dealigned = false; this.showDifferences = options.showDifferences !== false; this.forceUpdate = registerUpdate(this); setScrollLock(this, true, false); registerScroll(this); }, setShowDifferences: function(val) { val = val !== false; if (val != this.showDifferences) { this.showDifferences = val; this.forceUpdate("full"); } } }; function ensureDiff(dv) { if (dv.diffOutOfDate) { dv.diff = getDiff(dv.orig.getValue(), dv.edit.getValue()); dv.chunks = getChunks(dv.diff); dv.diffOutOfDate = false; CodeMirror.signal(dv.edit, "updateDiff", dv.diff); } } var updating = false; function registerUpdate(dv) { var edit = {from: 0, to: 0, marked: []}; var orig = {from: 0, to: 0, marked: []}; var debounceChange, updatingFast = false; function update(mode) { updating = true; updatingFast = false; if (mode == "full") { if (dv.svg) clear(dv.svg); if (dv.copyButtons) clear(dv.copyButtons); clearMarks(dv.edit, edit.marked, dv.classes); clearMarks(dv.orig, orig.marked, dv.classes); edit.from = edit.to = orig.from = orig.to = 0; } ensureDiff(dv); if (dv.showDifferences) { updateMarks(dv.edit, dv.diff, edit, DIFF_INSERT, dv.classes); updateMarks(dv.orig, dv.diff, orig, DIFF_DELETE, dv.classes); } makeConnections(dv); if (dv.mv.options.connect == "align") alignChunks(dv); updating = false; } function setDealign(fast) { if (updating) return; dv.dealigned = true; set(fast); } function set(fast) { if (updating || updatingFast) return; clearTimeout(debounceChange); if (fast === true) updatingFast = true; debounceChange = setTimeout(update, fast === true ? 20 : 250); } function change(_cm, change) { if (!dv.diffOutOfDate) { dv.diffOutOfDate = true; edit.from = edit.to = orig.from = orig.to = 0; } // Update faster when a line was added/removed setDealign(change.text.length - 1 != change.to.line - change.from.line); } dv.edit.on("change", change); dv.orig.on("change", change); dv.edit.on("markerAdded", setDealign); dv.edit.on("markerCleared", setDealign); dv.orig.on("markerAdded", setDealign); dv.orig.on("markerCleared", setDealign); dv.edit.on("viewportChange", function() { set(false); }); dv.orig.on("viewportChange", function() { set(false); }); update(); return update; } function registerScroll(dv) { dv.edit.on("scroll", function() { syncScroll(dv, DIFF_INSERT) && makeConnections(dv); }); dv.orig.on("scroll", function() { syncScroll(dv, DIFF_DELETE) && makeConnections(dv); }); } function syncScroll(dv, type) { // Change handler will do a refresh after a timeout when diff is out of date if (dv.diffOutOfDate) return false; if (!dv.lockScroll) return true; var editor, other, now = +new Date; if (type == DIFF_INSERT) { editor = dv.edit; other = dv.orig; } else { editor = dv.orig; other = dv.edit; } // Don't take action if the position of this editor was recently set // (to prevent feedback loops) if (editor.state.scrollSetBy == dv && (editor.state.scrollSetAt || 0) + 50 > now) return false; var sInfo = editor.getScrollInfo(); if (dv.mv.options.connect == "align") { targetPos = sInfo.top; } else { var halfScreen = .5 * sInfo.clientHeight, midY = sInfo.top + halfScreen; var mid = editor.lineAtHeight(midY, "local"); var around = chunkBoundariesAround(dv.chunks, mid, type == DIFF_INSERT); var off = getOffsets(editor, type == DIFF_INSERT ? around.edit : around.orig); var offOther = getOffsets(other, type == DIFF_INSERT ? around.orig : around.edit); var ratio = (midY - off.top) / (off.bot - off.top); var targetPos = (offOther.top - halfScreen) + ratio * (offOther.bot - offOther.top); var botDist, mix; // Some careful tweaking to make sure no space is left out of view // when scrolling to top or bottom. if (targetPos > sInfo.top && (mix = sInfo.top / halfScreen) < 1) { targetPos = targetPos * mix + sInfo.top * (1 - mix); } else if ((botDist = sInfo.height - sInfo.clientHeight - sInfo.top) < halfScreen) { var otherInfo = other.getScrollInfo(); var botDistOther = otherInfo.height - otherInfo.clientHeight - targetPos; if (botDistOther > botDist && (mix = botDist / halfScreen) < 1) targetPos = targetPos * mix + (otherInfo.height - otherInfo.clientHeight - botDist) * (1 - mix); } } other.scrollTo(sInfo.left, targetPos); other.state.scrollSetAt = now; other.state.scrollSetBy = dv; return true; } function getOffsets(editor, around) { var bot = around.after; if (bot == null) bot = editor.lastLine() + 1; return {top: editor.heightAtLine(around.before || 0, "local"), bot: editor.heightAtLine(bot, "local")}; } function setScrollLock(dv, val, action) { dv.lockScroll = val; if (val && action != false) syncScroll(dv, DIFF_INSERT) && makeConnections(dv); dv.lockButton.innerHTML = val ? "\u21db\u21da" : "\u21db  \u21da"; } // Updating the marks for editor content function clearMarks(editor, arr, classes) { for (var i = 0; i < arr.length; ++i) { var mark = arr[i]; if (mark instanceof CodeMirror.TextMarker) { mark.clear(); } else if (mark.parent) { editor.removeLineClass(mark, "background", classes.chunk); editor.removeLineClass(mark, "background", classes.start); editor.removeLineClass(mark, "background", classes.end); } } arr.length = 0; } // FIXME maybe add a margin around viewport to prevent too many updates function updateMarks(editor, diff, state, type, classes) { var vp = editor.getViewport(); editor.operation(function() { if (state.from == state.to || vp.from - state.to > 20 || state.from - vp.to > 20) { clearMarks(editor, state.marked, classes); markChanges(editor, diff, type, state.marked, vp.from, vp.to, classes); state.from = vp.from; state.to = vp.to; } else { if (vp.from < state.from) { markChanges(editor, diff, type, state.marked, vp.from, state.from, classes); state.from = vp.from; } if (vp.to > state.to) { markChanges(editor, diff, type, state.marked, state.to, vp.to, classes); state.to = vp.to; } } }); } function markChanges(editor, diff, type, marks, from, to, classes) { var pos = Pos(0, 0); var top = Pos(from, 0), bot = editor.clipPos(Pos(to - 1)); var cls = type == DIFF_DELETE ? classes.del : classes.insert; function markChunk(start, end) { var bfrom = Math.max(from, start), bto = Math.min(to, end); for (var i = bfrom; i < bto; ++i) { var line = editor.addLineClass(i, "background", classes.chunk); if (i == start) editor.addLineClass(line, "background", classes.start); if (i == end - 1) editor.addLineClass(line, "background", classes.end); marks.push(line); } // When the chunk is empty, make sure a horizontal line shows up if (start == end && bfrom == end && bto == end) { if (bfrom) marks.push(editor.addLineClass(bfrom - 1, "background", classes.end)); else marks.push(editor.addLineClass(bfrom, "background", classes.start)); } } var chunkStart = 0; for (var i = 0; i < diff.length; ++i) { var part = diff[i], tp = part[0], str = part[1]; if (tp == DIFF_EQUAL) { var cleanFrom = pos.line + (startOfLineClean(diff, i) ? 0 : 1); moveOver(pos, str); var cleanTo = pos.line + (endOfLineClean(diff, i) ? 1 : 0); if (cleanTo > cleanFrom) { if (i) markChunk(chunkStart, cleanFrom); chunkStart = cleanTo; } } else { if (tp == type) { var end = moveOver(pos, str, true); var a = posMax(top, pos), b = posMin(bot, end); if (!posEq(a, b)) marks.push(editor.markText(a, b, {className: cls})); pos = end; } } } if (chunkStart <= pos.line) markChunk(chunkStart, pos.line + 1); } // Updating the gap between editor and original function makeConnections(dv) { if (!dv.showDifferences) return; if (dv.svg) { clear(dv.svg); var w = dv.gap.offsetWidth; attrs(dv.svg, "width", w, "height", dv.gap.offsetHeight); } if (dv.copyButtons) clear(dv.copyButtons); var vpEdit = dv.edit.getViewport(), vpOrig = dv.orig.getViewport(); var sTopEdit = dv.edit.getScrollInfo().top, sTopOrig = dv.orig.getScrollInfo().top; for (var i = 0; i < dv.chunks.length; i++) { var ch = dv.chunks[i]; if (ch.editFrom <= vpEdit.to && ch.editTo >= vpEdit.from && ch.origFrom <= vpOrig.to && ch.origTo >= vpOrig.from) drawConnectorsForChunk(dv, ch, sTopOrig, sTopEdit, w); } } function getMatchingOrigLine(editLine, chunks) { var editStart = 0, origStart = 0; for (var i = 0; i < chunks.length; i++) { var chunk = chunks[i]; if (chunk.editTo > editLine && chunk.editFrom <= editLine) return null; if (chunk.editFrom > editLine) break; editStart = chunk.editTo; origStart = chunk.origTo; } return origStart + (editLine - editStart); } function findAlignedLines(dv, other) { var linesToAlign = []; for (var i = 0; i < dv.chunks.length; i++) { var chunk = dv.chunks[i]; linesToAlign.push([chunk.origTo, chunk.editTo, other ? getMatchingOrigLine(chunk.editTo, other.chunks) : null]); } if (other) { for (var i = 0; i < other.chunks.length; i++) { var chunk = other.chunks[i]; for (var j = 0; j < linesToAlign.length; j++) { var align = linesToAlign[j]; if (align[1] == chunk.editTo) { j = -1; break; } else if (align[1] > chunk.editTo) { break; } } if (j > -1) linesToAlign.splice(j - 1, 0, [getMatchingOrigLine(chunk.editTo, dv.chunks), chunk.editTo, chunk.origTo]); } } return linesToAlign; } function alignChunks(dv, force) { if (!dv.dealigned && !force) return; if (!dv.orig.curOp) return dv.orig.operation(function() { alignChunks(dv, force); }); dv.dealigned = false; var other = dv.mv.left == dv ? dv.mv.right : dv.mv.left; if (other) { ensureDiff(other); other.dealigned = false; } var linesToAlign = findAlignedLines(dv, other); // Clear old aligners var aligners = dv.mv.aligners; for (var i = 0; i < aligners.length; i++) aligners[i].clear(); aligners.length = 0; var cm = [dv.orig, dv.edit], scroll = []; if (other) cm.push(other.orig); for (var i = 0; i < cm.length; i++) scroll.push(cm[i].getScrollInfo().top); for (var ln = 0; ln < linesToAlign.length; ln++) alignLines(cm, linesToAlign[ln], aligners); for (var i = 0; i < cm.length; i++) cm[i].scrollTo(null, scroll[i]); } function alignLines(cm, lines, aligners) { var maxOffset = 0, offset = []; for (var i = 0; i < cm.length; i++) if (lines[i] != null) { var off = cm[i].heightAtLine(lines[i], "local"); offset[i] = off; maxOffset = Math.max(maxOffset, off); } for (var i = 0; i < cm.length; i++) if (lines[i] != null) { var diff = maxOffset - offset[i]; if (diff > 1) aligners.push(padAbove(cm[i], lines[i], diff)); } } function padAbove(cm, line, size) { var above = true; if (line > cm.lastLine()) { line--; above = false; } var elt = document.createElement("div"); elt.className = "CodeMirror-merge-spacer"; elt.style.height = size + "px"; elt.style.minWidth = "1px"; return cm.addLineWidget(line, elt, {height: size, above: above}); } function drawConnectorsForChunk(dv, chunk, sTopOrig, sTopEdit, w) { var flip = dv.type == "left"; var top = dv.orig.heightAtLine(chunk.origFrom, "local") - sTopOrig; if (dv.svg) { var topLpx = top; var topRpx = dv.edit.heightAtLine(chunk.editFrom, "local") - sTopEdit; if (flip) { var tmp = topLpx; topLpx = topRpx; topRpx = tmp; } var botLpx = dv.orig.heightAtLine(chunk.origTo, "local") - sTopOrig; var botRpx = dv.edit.heightAtLine(chunk.editTo, "local") - sTopEdit; if (flip) { var tmp = botLpx; botLpx = botRpx; botRpx = tmp; } var curveTop = " C " + w/2 + " " + topRpx + " " + w/2 + " " + topLpx + " " + (w + 2) + " " + topLpx; var curveBot = " C " + w/2 + " " + botLpx + " " + w/2 + " " + botRpx + " -1 " + botRpx; attrs(dv.svg.appendChild(document.createElementNS(svgNS, "path")), "d", "M -1 " + topRpx + curveTop + " L " + (w + 2) + " " + botLpx + curveBot + " z", "class", dv.classes.connect); } if (dv.copyButtons) { var copy = dv.copyButtons.appendChild(elt("div", dv.type == "left" ? "\u21dd" : "\u21dc", "CodeMirror-merge-copy")); var editOriginals = dv.mv.options.allowEditingOriginals; copy.title = editOriginals ? "Push to left" : "Revert chunk"; copy.chunk = chunk; copy.style.top = top + "px"; if (editOriginals) { var topReverse = dv.orig.heightAtLine(chunk.editFrom, "local") - sTopEdit; var copyReverse = dv.copyButtons.appendChild(elt("div", dv.type == "right" ? "\u21dd" : "\u21dc", "CodeMirror-merge-copy-reverse")); copyReverse.title = "Push to right"; copyReverse.chunk = {editFrom: chunk.origFrom, editTo: chunk.origTo, origFrom: chunk.editFrom, origTo: chunk.editTo}; copyReverse.style.top = topReverse + "px"; dv.type == "right" ? copyReverse.style.left = "2px" : copyReverse.style.right = "2px"; } } } function copyChunk(dv, to, from, chunk) { if (dv.diffOutOfDate) return; to.replaceRange(from.getRange(Pos(chunk.origFrom, 0), Pos(chunk.origTo, 0)), Pos(chunk.editFrom, 0), Pos(chunk.editTo, 0)); } // Merge view, containing 0, 1, or 2 diff views. var MergeView = CodeMirror.MergeView = function(node, options) { if (!(this instanceof MergeView)) return new MergeView(node, options); this.options = options; var origLeft = options.origLeft, origRight = options.origRight == null ? options.orig : options.origRight; var hasLeft = origLeft != null, hasRight = origRight != null; var panes = 1 + (hasLeft ? 1 : 0) + (hasRight ? 1 : 0); var wrap = [], left = this.left = null, right = this.right = null; var self = this; if (hasLeft) { left = this.left = new DiffView(this, "left"); var leftPane = elt("div", null, "CodeMirror-merge-pane"); wrap.push(leftPane); wrap.push(buildGap(left)); } var editPane = elt("div", null, "CodeMirror-merge-pane"); wrap.push(editPane); if (hasRight) { right = this.right = new DiffView(this, "right"); wrap.push(buildGap(right)); var rightPane = elt("div", null, "CodeMirror-merge-pane"); wrap.push(rightPane); } (hasRight ? rightPane : editPane).className += " CodeMirror-merge-pane-rightmost"; wrap.push(elt("div", null, null, "height: 0; clear: both;")); var wrapElt = this.wrap = node.appendChild(elt("div", wrap, "CodeMirror-merge CodeMirror-merge-" + panes + "pane")); this.edit = CodeMirror(editPane, copyObj(options)); if (left) left.init(leftPane, origLeft, options); if (right) right.init(rightPane, origRight, options); if (options.collapseIdentical) { updating = true; this.editor().operation(function() { collapseIdenticalStretches(self, options.collapseIdentical); }); updating = false; } if (options.connect == "align") { this.aligners = []; alignChunks(this.left || this.right, true); } var onResize = function() { if (left) makeConnections(left); if (right) makeConnections(right); }; CodeMirror.on(window, "resize", onResize); var resizeInterval = setInterval(function() { for (var p = wrapElt.parentNode; p && p != document.body; p = p.parentNode) {} if (!p) { clearInterval(resizeInterval); CodeMirror.off(window, "resize", onResize); } }, 5000); }; function buildGap(dv) { var lock = dv.lockButton = elt("div", null, "CodeMirror-merge-scrolllock"); lock.title = "Toggle locked scrolling"; var lockWrap = elt("div", [lock], "CodeMirror-merge-scrolllock-wrap"); CodeMirror.on(lock, "click", function() { setScrollLock(dv, !dv.lockScroll); }); var gapElts = [lockWrap]; if (dv.mv.options.revertButtons !== false) { dv.copyButtons = elt("div", null, "CodeMirror-merge-copybuttons-" + dv.type); CodeMirror.on(dv.copyButtons, "click", function(e) { var node = e.target || e.srcElement; if (!node.chunk) return; if (node.className == "CodeMirror-merge-copy-reverse") { copyChunk(dv, dv.orig, dv.edit, node.chunk); return; } copyChunk(dv, dv.edit, dv.orig, node.chunk); }); gapElts.unshift(dv.copyButtons); } if (dv.mv.options.connect != "align") { var svg = document.createElementNS && document.createElementNS(svgNS, "svg"); if (svg && !svg.createSVGRect) svg = null; dv.svg = svg; if (svg) gapElts.push(svg); } return dv.gap = elt("div", gapElts, "CodeMirror-merge-gap"); } MergeView.prototype = { constuctor: MergeView, editor: function() { return this.edit; }, rightOriginal: function() { return this.right && this.right.orig; }, leftOriginal: function() { return this.left && this.left.orig; }, setShowDifferences: function(val) { if (this.right) this.right.setShowDifferences(val); if (this.left) this.left.setShowDifferences(val); }, rightChunks: function() { if (this.right) { ensureDiff(this.right); return this.right.chunks; } }, leftChunks: function() { if (this.left) { ensureDiff(this.left); return this.left.chunks; } } }; function asString(obj) { if (typeof obj == "string") return obj; else return obj.getValue(); } // Operations on diffs var dmp = new diff_match_patch(); function getDiff(a, b) { var diff = dmp.diff_main(a, b); dmp.diff_cleanupSemantic(diff); // The library sometimes leaves in empty parts, which confuse the algorithm for (var i = 0; i < diff.length; ++i) { var part = diff[i]; if (!part[1]) { diff.splice(i--, 1); } else if (i && diff[i - 1][0] == part[0]) { diff.splice(i--, 1); diff[i][1] += part[1]; } } return diff; } function getChunks(diff) { var chunks = []; var startEdit = 0, startOrig = 0; var edit = Pos(0, 0), orig = Pos(0, 0); for (var i = 0; i < diff.length; ++i) { var part = diff[i], tp = part[0]; if (tp == DIFF_EQUAL) { var startOff = startOfLineClean(diff, i) ? 0 : 1; var cleanFromEdit = edit.line + startOff, cleanFromOrig = orig.line + startOff; moveOver(edit, part[1], null, orig); var endOff = endOfLineClean(diff, i) ? 1 : 0; var cleanToEdit = edit.line + endOff, cleanToOrig = orig.line + endOff; if (cleanToEdit > cleanFromEdit) { if (i) chunks.push({origFrom: startOrig, origTo: cleanFromOrig, editFrom: startEdit, editTo: cleanFromEdit}); startEdit = cleanToEdit; startOrig = cleanToOrig; } } else { moveOver(tp == DIFF_INSERT ? edit : orig, part[1]); } } if (startEdit <= edit.line || startOrig <= orig.line) chunks.push({origFrom: startOrig, origTo: orig.line + 1, editFrom: startEdit, editTo: edit.line + 1}); return chunks; } function endOfLineClean(diff, i) { if (i == diff.length - 1) return true; var next = diff[i + 1][1]; if (next.length == 1 || next.charCodeAt(0) != 10) return false; if (i == diff.length - 2) return true; next = diff[i + 2][1]; return next.length > 1 && next.charCodeAt(0) == 10; } function startOfLineClean(diff, i) { if (i == 0) return true; var last = diff[i - 1][1]; if (last.charCodeAt(last.length - 1) != 10) return false; if (i == 1) return true; last = diff[i - 2][1]; return last.charCodeAt(last.length - 1) == 10; } function chunkBoundariesAround(chunks, n, nInEdit) { var beforeE, afterE, beforeO, afterO; for (var i = 0; i < chunks.length; i++) { var chunk = chunks[i]; var fromLocal = nInEdit ? chunk.editFrom : chunk.origFrom; var toLocal = nInEdit ? chunk.editTo : chunk.origTo; if (afterE == null) { if (fromLocal > n) { afterE = chunk.editFrom; afterO = chunk.origFrom; } else if (toLocal > n) { afterE = chunk.editTo; afterO = chunk.origTo; } } if (toLocal <= n) { beforeE = chunk.editTo; beforeO = chunk.origTo; } else if (fromLocal <= n) { beforeE = chunk.editFrom; beforeO = chunk.origFrom; } } return {edit: {before: beforeE, after: afterE}, orig: {before: beforeO, after: afterO}}; } function collapseSingle(cm, from, to) { cm.addLineClass(from, "wrap", "CodeMirror-merge-collapsed-line"); var widget = document.createElement("span"); widget.className = "CodeMirror-merge-collapsed-widget"; widget.title = "Identical text collapsed. Click to expand."; var mark = cm.markText(Pos(from, 0), Pos(to - 1), { inclusiveLeft: true, inclusiveRight: true, replacedWith: widget, clearOnEnter: true }); function clear() { mark.clear(); cm.removeLineClass(from, "wrap", "CodeMirror-merge-collapsed-line"); } widget.addEventListener("click", clear); return {mark: mark, clear: clear}; } function collapseStretch(size, editors) { var marks = []; function clear() { for (var i = 0; i < marks.length; i++) marks[i].clear(); } for (var i = 0; i < editors.length; i++) { var editor = editors[i]; var mark = collapseSingle(editor.cm, editor.line, editor.line + size); marks.push(mark); mark.mark.on("clear", clear); } return marks[0].mark; } function unclearNearChunks(dv, margin, off, clear) { for (var i = 0; i < dv.chunks.length; i++) { var chunk = dv.chunks[i]; for (var l = chunk.editFrom - margin; l < chunk.editTo + margin; l++) { var pos = l + off; if (pos >= 0 && pos < clear.length) clear[pos] = false; } } } function collapseIdenticalStretches(mv, margin) { if (typeof margin != "number") margin = 2; var clear = [], edit = mv.editor(), off = edit.firstLine(); for (var l = off, e = edit.lastLine(); l <= e; l++) clear.push(true); if (mv.left) unclearNearChunks(mv.left, margin, off, clear); if (mv.right) unclearNearChunks(mv.right, margin, off, clear); for (var i = 0; i < clear.length; i++) { if (clear[i]) { var line = i + off; for (var size = 1; i < clear.length - 1 && clear[i + 1]; i++, size++) {} if (size > margin) { var editors = [{line: line, cm: edit}]; if (mv.left) editors.push({line: getMatchingOrigLine(line, mv.left.chunks), cm: mv.left.orig}); if (mv.right) editors.push({line: getMatchingOrigLine(line, mv.right.chunks), cm: mv.right.orig}); var mark = collapseStretch(size, editors); if (mv.options.onCollapse) mv.options.onCollapse(mv, line, size, mark); } } } } // General utilities function elt(tag, content, className, style) { var e = document.createElement(tag); if (className) e.className = className; if (style) e.style.cssText = style; if (typeof content == "string") e.appendChild(document.createTextNode(content)); else if (content) for (var i = 0; i < content.length; ++i) e.appendChild(content[i]); return e; } function clear(node) { for (var count = node.childNodes.length; count > 0; --count) node.removeChild(node.firstChild); } function attrs(elt) { for (var i = 1; i < arguments.length; i += 2) elt.setAttribute(arguments[i], arguments[i+1]); } function copyObj(obj, target) { if (!target) target = {}; for (var prop in obj) if (obj.hasOwnProperty(prop)) target[prop] = obj[prop]; return target; } function moveOver(pos, str, copy, other) { var out = copy ? Pos(pos.line, pos.ch) : pos, at = 0; for (;;) { var nl = str.indexOf("\n", at); if (nl == -1) break; ++out.line; if (other) ++other.line; at = nl + 1; } out.ch = (at ? 0 : out.ch) + (str.length - at); if (other) other.ch = (at ? 0 : other.ch) + (str.length - at); return out; } function posMin(a, b) { return (a.line - b.line || a.ch - b.ch) < 0 ? a : b; } function posMax(a, b) { return (a.line - b.line || a.ch - b.ch) > 0 ? a : b; } 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 ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), "cjs"); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], function(CM) { mod(CM, "amd"); }); else // Plain browser env mod(CodeMirror, "plain"); })(function(CodeMirror, env) { if (!CodeMirror.modeURL) CodeMirror.modeURL = "../mode/%N/%N.js"; var loading = {}; function splitCallback(cont, n) { var countDown = n; return function() { if (--countDown == 0) cont(); }; } function ensureDeps(mode, cont) { var deps = CodeMirror.modes[mode].dependencies; if (!deps) return cont(); var missing = []; for (var i = 0; i < deps.length; ++i) { if (!CodeMirror.modes.hasOwnProperty(deps[i])) missing.push(deps[i]); } if (!missing.length) return cont(); var split = splitCallback(cont, missing.length); for (var i = 0; i < missing.length; ++i) CodeMirror.requireMode(missing[i], split); } CodeMirror.requireMode = function(mode, cont) { if (typeof mode != "string") mode = mode.name; if (CodeMirror.modes.hasOwnProperty(mode)) return ensureDeps(mode, cont); if (loading.hasOwnProperty(mode)) return loading[mode].push(cont); var file = CodeMirror.modeURL.replace(/%N/g, mode); if (env == "plain") { var script = document.createElement("script"); script.src = file; var others = document.getElementsByTagName("script")[0]; var list = loading[mode] = [cont]; CodeMirror.on(script, "load", function() { ensureDeps(mode, function() { for (var i = 0; i < list.length; ++i) list[i](); }); }); others.parentNode.insertBefore(script, others); } else if (env == "cjs") { require(file); cont(); } else if (env == "amd") { requirejs([file], cont); } }; CodeMirror.autoLoadMode = function(instance, mode) { if (!CodeMirror.modes.hasOwnProperty(mode)) CodeMirror.requireMode(mode, function() { instance.setOption("mode", instance.getOption("mode")); }); }; }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/mode/multiplex.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.multiplexingMode = function(outer /*, others */) { // Others should be {open, close, mode [, delimStyle] [, innerStyle]} objects var others = Array.prototype.slice.call(arguments, 1); var n_others = others.length; function indexOf(string, pattern, from) { if (typeof pattern == "string") return string.indexOf(pattern, from); var m = pattern.exec(from ? string.slice(from) : string); return m ? m.index + from : -1; } return { startState: function() { return { outer: CodeMirror.startState(outer), innerActive: null, inner: null }; }, copyState: function(state) { return { outer: CodeMirror.copyState(outer, state.outer), innerActive: state.innerActive, inner: state.innerActive && CodeMirror.copyState(state.innerActive.mode, state.inner) }; }, token: function(stream, state) { if (!state.innerActive) { var cutOff = Infinity, oldContent = stream.string; for (var i = 0; i < n_others; ++i) { var other = others[i]; var found = indexOf(oldContent, other.open, stream.pos); if (found == stream.pos) { stream.match(other.open); state.innerActive = other; state.inner = CodeMirror.startState(other.mode, outer.indent ? outer.indent(state.outer, "") : 0); return other.delimStyle; } else if (found != -1 && found < cutOff) { cutOff = found; } } if (cutOff != Infinity) stream.string = oldContent.slice(0, cutOff); var outerToken = outer.token(stream, state.outer); if (cutOff != Infinity) stream.string = oldContent; return outerToken; } else { var curInner = state.innerActive, oldContent = stream.string; if (!curInner.close && stream.sol()) { state.innerActive = state.inner = null; return this.token(stream, state); } var found = curInner.close ? indexOf(oldContent, curInner.close, stream.pos) : -1; if (found == stream.pos) { stream.match(curInner.close); state.innerActive = state.inner = null; return curInner.delimStyle; } if (found > -1) stream.string = oldContent.slice(0, found); var innerToken = curInner.mode.token(stream, state.inner); if (found > -1) stream.string = oldContent; if (curInner.innerStyle) { if (innerToken) innerToken = innerToken + ' ' + curInner.innerStyle; else innerToken = curInner.innerStyle; } return innerToken; } }, indent: function(state, textAfter) { var mode = state.innerActive ? state.innerActive.mode : outer; if (!mode.indent) return CodeMirror.Pass; return mode.indent(state.innerActive ? state.inner : state.outer, textAfter); }, blankLine: function(state) { var mode = state.innerActive ? state.innerActive.mode : outer; if (mode.blankLine) { mode.blankLine(state.innerActive ? state.inner : state.outer); } if (!state.innerActive) { for (var i = 0; i < n_others; ++i) { var other = others[i]; if (other.open === "\n") { state.innerActive = other; state.inner = CodeMirror.startState(other.mode, mode.indent ? mode.indent(state.outer, "") : 0); } } } else if (state.innerActive.close === "\n") { state.innerActive = state.inner = null; } }, electricChars: outer.electricChars, innerMode: function(state) { return state.inner ? {state: state.inner, mode: state.innerActive.mode} : {state: state.outer, mode: outer}; } }; }; }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/mode/multiplex_test.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function() { CodeMirror.defineMode("markdown_with_stex", function(){ var inner = CodeMirror.getMode({}, "stex"); var outer = CodeMirror.getMode({}, "markdown"); var innerOptions = { open: '$', close: '$', mode: inner, delimStyle: 'delim', innerStyle: 'inner' }; return CodeMirror.multiplexingMode(outer, innerOptions); }); var mode = CodeMirror.getMode({}, "markdown_with_stex"); function MT(name) { test.mode( name, mode, Array.prototype.slice.call(arguments, 1), 'multiplexing'); } MT( "stexInsideMarkdown", "[strong **Equation:**] [delim $][inner&tag \\pi][delim $]"); })(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/mode/overlay.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE // Utility function that allows modes to be combined. The mode given // as the base argument takes care of most of the normal mode // functionality, but a second (typically simple) mode is used, which // can override the style of text. Both modes get to parse all of the // text, but when both assign a non-null style to a piece of code, the // overlay wins, unless the combine argument was true and not overridden, // or state.overlay.combineTokens was true, in which case the styles are // combined. (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.overlayMode = function(base, overlay, combine) { return { startState: function() { return { base: CodeMirror.startState(base), overlay: CodeMirror.startState(overlay), basePos: 0, baseCur: null, overlayPos: 0, overlayCur: null, streamSeen: null }; }, copyState: function(state) { return { base: CodeMirror.copyState(base, state.base), overlay: CodeMirror.copyState(overlay, state.overlay), basePos: state.basePos, baseCur: null, overlayPos: state.overlayPos, overlayCur: null }; }, token: function(stream, state) { if (stream != state.streamSeen || Math.min(state.basePos, state.overlayPos) < stream.start) { state.streamSeen = stream; state.basePos = state.overlayPos = stream.start; } if (stream.start == state.basePos) { state.baseCur = base.token(stream, state.base); state.basePos = stream.pos; } if (stream.start == state.overlayPos) { stream.pos = stream.start; state.overlayCur = overlay.token(stream, state.overlay); state.overlayPos = stream.pos; } stream.pos = Math.min(state.basePos, state.overlayPos); // state.overlay.combineTokens always takes precedence over combine, // unless set to null if (state.overlayCur == null) return state.baseCur; else if (state.baseCur != null && state.overlay.combineTokens || combine && state.overlay.combineTokens == null) return state.baseCur + " " + state.overlayCur; else return state.overlayCur; }, indent: base.indent && function(state, textAfter) { return base.indent(state.base, textAfter); }, electricChars: base.electricChars, innerMode: function(state) { return {state: state.base, mode: base}; }, blankLine: function(state) { if (base.blankLine) base.blankLine(state.base); if (overlay.blankLine) overlay.blankLine(state.overlay); } }; }; }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/mode/simple.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineSimpleMode = function(name, states) { CodeMirror.defineMode(name, function(config) { return CodeMirror.simpleMode(config, states); }); }; CodeMirror.simpleMode = function(config, states) { ensureState(states, "start"); var states_ = {}, meta = states.meta || {}, hasIndentation = false; for (var state in states) if (state != meta && states.hasOwnProperty(state)) { var list = states_[state] = [], orig = states[state]; for (var i = 0; i < orig.length; i++) { var data = orig[i]; list.push(new Rule(data, states)); if (data.indent || data.dedent) hasIndentation = true; } } var mode = { startState: function() { return {state: "start", pending: null, local: null, localState: null, indent: hasIndentation ? [] : null}; }, copyState: function(state) { var s = {state: state.state, pending: state.pending, local: state.local, localState: null, indent: state.indent && state.indent.slice(0)}; if (state.localState) s.localState = CodeMirror.copyState(state.local.mode, state.localState); if (state.stack) s.stack = state.stack.slice(0); for (var pers = state.persistentStates; pers; pers = pers.next) s.persistentStates = {mode: pers.mode, spec: pers.spec, state: pers.state == state.localState ? s.localState : CodeMirror.copyState(pers.mode, pers.state), next: s.persistentStates}; return s; }, token: tokenFunction(states_, config), innerMode: function(state) { return state.local && {mode: state.local.mode, state: state.localState}; }, indent: indentFunction(states_, meta) }; if (meta) for (var prop in meta) if (meta.hasOwnProperty(prop)) mode[prop] = meta[prop]; return mode; }; function ensureState(states, name) { if (!states.hasOwnProperty(name)) throw new Error("Undefined state " + name + "in simple mode"); } function toRegex(val, caret) { if (!val) return /(?:)/; var flags = ""; if (val instanceof RegExp) { if (val.ignoreCase) flags = "i"; val = val.source; } else { val = String(val); } return new RegExp((caret === false ? "" : "^") + "(?:" + val + ")", flags); } function asToken(val) { if (!val) return null; if (typeof val == "string") return val.replace(/\./g, " "); var result = []; for (var i = 0; i < val.length; i++) result.push(val[i] && val[i].replace(/\./g, " ")); return result; } function Rule(data, states) { if (data.next || data.push) ensureState(states, data.next || data.push); this.regex = toRegex(data.regex); this.token = asToken(data.token); this.data = data; } function tokenFunction(states, config) { return function(stream, state) { if (state.pending) { var pend = state.pending.shift(); if (state.pending.length == 0) state.pending = null; stream.pos += pend.text.length; return pend.token; } if (state.local) { if (state.local.end && stream.match(state.local.end)) { var tok = state.local.endToken || null; state.local = state.localState = null; return tok; } else { var tok = state.local.mode.token(stream, state.localState), m; if (state.local.endScan && (m = state.local.endScan.exec(stream.current()))) stream.pos = stream.start + m.index; return tok; } } var curState = states[state.state]; for (var i = 0; i < curState.length; i++) { var rule = curState[i]; var matches = (!rule.data.sol || stream.sol()) && stream.match(rule.regex); if (matches) { if (rule.data.next) { state.state = rule.data.next; } else if (rule.data.push) { (state.stack || (state.stack = [])).push(state.state); state.state = rule.data.push; } else if (rule.data.pop && state.stack && state.stack.length) { state.state = state.stack.pop(); } if (rule.data.mode) enterLocalMode(config, state, rule.data.mode, rule.token); if (rule.data.indent) state.indent.push(stream.indentation() + config.indentUnit); if (rule.data.dedent) state.indent.pop(); if (matches.length > 2) { state.pending = []; for (var j = 2; j < matches.length; j++) if (matches[j]) state.pending.push({text: matches[j], token: rule.token[j - 1]}); stream.backUp(matches[0].length - (matches[1] ? matches[1].length : 0)); return rule.token[0]; } else if (rule.token && rule.token.join) { return rule.token[0]; } else { return rule.token; } } } stream.next(); return null; }; } function cmp(a, b) { if (a === b) return true; if (!a || typeof a != "object" || !b || typeof b != "object") return false; var props = 0; for (var prop in a) if (a.hasOwnProperty(prop)) { if (!b.hasOwnProperty(prop) || !cmp(a[prop], b[prop])) return false; props++; } for (var prop in b) if (b.hasOwnProperty(prop)) props--; return props == 0; } function enterLocalMode(config, state, spec, token) { var pers; if (spec.persistent) for (var p = state.persistentStates; p && !pers; p = p.next) if (spec.spec ? cmp(spec.spec, p.spec) : spec.mode == p.mode) pers = p; var mode = pers ? pers.mode : spec.mode || CodeMirror.getMode(config, spec.spec); var lState = pers ? pers.state : CodeMirror.startState(mode); if (spec.persistent && !pers) state.persistentStates = {mode: mode, spec: spec.spec, state: lState, next: state.persistentStates}; state.localState = lState; state.local = {mode: mode, end: spec.end && toRegex(spec.end), endScan: spec.end && spec.forceEnd !== false && toRegex(spec.end, false), endToken: token && token.join ? token[token.length - 1] : token}; } function indexOf(val, arr) { for (var i = 0; i < arr.length; i++) if (arr[i] === val) return true; } function indentFunction(states, meta) { return function(state, textAfter, line) { if (state.local && state.local.mode.indent) return state.local.mode.indent(state.localState, textAfter, line); if (state.indent == null || state.local || meta.dontIndentStates && indexOf(state.state, meta.dontIndentStates) > -1) return CodeMirror.Pass; var pos = state.indent.length - 1, rules = states[state.state]; scan: for (;;) { for (var i = 0; i < rules.length; i++) { var rule = rules[i]; if (rule.data.dedent && rule.data.dedentIfLineStart !== false) { var m = rule.regex.exec(textAfter); if (m && m[0]) { pos--; if (rule.next || rule.push) rules = states[rule.next || rule.push]; textAfter = textAfter.slice(m[0].length); continue scan; } } } break; } return pos < 0 ? 0 : state.indent[pos]; }; } }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/runmode/colorize.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("./runmode")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "./runmode"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; var isBlock = /^(p|li|div|h\\d|pre|blockquote|td)$/; function textContent(node, out) { if (node.nodeType == 3) return out.push(node.nodeValue); for (var ch = node.firstChild; ch; ch = ch.nextSibling) { textContent(ch, out); if (isBlock.test(node.nodeType)) out.push("\n"); } } CodeMirror.colorize = function(collection, defaultMode) { if (!collection) collection = document.body.getElementsByTagName("pre"); for (var i = 0; i < collection.length; ++i) { var node = collection[i]; var mode = node.getAttribute("data-lang") || defaultMode; if (!mode) continue; var text = []; textContent(node, text); node.innerHTML = ""; CodeMirror.runMode(text.join(""), mode, node); node.className += " cm-s-default"; } }; }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/runmode/runmode-standalone.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE window.CodeMirror = {}; (function() { "use strict"; function splitLines(string){ return string.split(/\r?\n|\r/); }; function StringStream(string) { this.pos = this.start = 0; this.string = string; this.lineStart = 0; } StringStream.prototype = { eol: function() {return this.pos >= this.string.length;}, sol: function() {return this.pos == 0;}, peek: function() {return this.string.charAt(this.pos) || null;}, next: function() { if (this.pos < this.string.length) return this.string.charAt(this.pos++); }, eat: function(match) { var ch = this.string.charAt(this.pos); if (typeof match == "string") var ok = ch == match; else var ok = ch && (match.test ? match.test(ch) : match(ch)); if (ok) {++this.pos; return ch;} }, eatWhile: function(match) { var start = this.pos; while (this.eat(match)){} return this.pos > start; }, eatSpace: function() { var start = this.pos; while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) ++this.pos; return this.pos > start; }, skipToEnd: function() {this.pos = this.string.length;}, skipTo: function(ch) { var found = this.string.indexOf(ch, this.pos); if (found > -1) {this.pos = found; return true;} }, backUp: function(n) {this.pos -= n;}, column: function() {return this.start - this.lineStart;}, indentation: function() {return 0;}, match: function(pattern, consume, caseInsensitive) { if (typeof pattern == "string") { var cased = function(str) {return caseInsensitive ? str.toLowerCase() : str;}; var substr = this.string.substr(this.pos, pattern.length); if (cased(substr) == cased(pattern)) { if (consume !== false) this.pos += pattern.length; return true; } } else { var match = this.string.slice(this.pos).match(pattern); if (match && match.index > 0) return null; if (match && consume !== false) this.pos += match[0].length; return match; } }, current: function(){return this.string.slice(this.start, this.pos);}, hideFirstChars: function(n, inner) { this.lineStart += n; try { return inner(); } finally { this.lineStart -= n; } } }; CodeMirror.StringStream = StringStream; CodeMirror.startState = function (mode, a1, a2) { return mode.startState ? mode.startState(a1, a2) : true; }; var modes = CodeMirror.modes = {}, mimeModes = CodeMirror.mimeModes = {}; CodeMirror.defineMode = function (name, mode) { if (arguments.length > 2) mode.dependencies = Array.prototype.slice.call(arguments, 2); modes[name] = mode; }; CodeMirror.defineMIME = function (mime, spec) { mimeModes[mime] = spec; }; CodeMirror.resolveMode = function(spec) { if (typeof spec == "string" && mimeModes.hasOwnProperty(spec)) { spec = mimeModes[spec]; } else if (spec && typeof spec.name == "string" && mimeModes.hasOwnProperty(spec.name)) { spec = mimeModes[spec.name]; } if (typeof spec == "string") return {name: spec}; else return spec || {name: "null"}; }; CodeMirror.getMode = function (options, spec) { spec = CodeMirror.resolveMode(spec); var mfactory = modes[spec.name]; if (!mfactory) throw new Error("Unknown mode: " + spec); return mfactory(options, spec); }; CodeMirror.registerHelper = CodeMirror.registerGlobalHelper = Math.min; CodeMirror.defineMode("null", function() { return {token: function(stream) {stream.skipToEnd();}}; }); CodeMirror.defineMIME("text/plain", "null"); CodeMirror.runMode = function (string, modespec, callback, options) { var mode = CodeMirror.getMode({ indentUnit: 2 }, modespec); if (callback.nodeType == 1) { var tabSize = (options && options.tabSize) || 4; var node = callback, col = 0; node.innerHTML = ""; callback = function (text, style) { if (text == "\n") { node.appendChild(document.createElement("br")); col = 0; return; } var content = ""; // replace tabs for (var pos = 0; ;) { var idx = text.indexOf("\t", pos); if (idx == -1) { content += text.slice(pos); col += text.length - pos; break; } else { col += idx - pos; content += text.slice(pos, idx); var size = tabSize - col % tabSize; col += size; for (var i = 0; i < size; ++i) content += " "; pos = idx + 1; } } if (style) { var sp = node.appendChild(document.createElement("span")); sp.className = "cm-" + style.replace(/ +/g, " cm-"); sp.appendChild(document.createTextNode(content)); } else { node.appendChild(document.createTextNode(content)); } }; } var lines = splitLines(string), state = (options && options.state) || CodeMirror.startState(mode); for (var i = 0, e = lines.length; i < e; ++i) { if (i) callback("\n"); var stream = new CodeMirror.StringStream(lines[i]); if (!stream.string && mode.blankLine) mode.blankLine(state); while (!stream.eol()) { var style = mode.token(stream, state); callback(stream.current(), style, i, stream.start, state); stream.start = stream.pos; } } }; })(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/runmode/runmode.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.runMode = function(string, modespec, callback, options) { var mode = CodeMirror.getMode(CodeMirror.defaults, modespec); var ie = /MSIE \d/.test(navigator.userAgent); var ie_lt9 = ie && (document.documentMode == null || document.documentMode < 9); if (callback.nodeType == 1) { var tabSize = (options && options.tabSize) || CodeMirror.defaults.tabSize; var node = callback, col = 0; node.innerHTML = ""; callback = function(text, style) { if (text == "\n") { // Emitting LF or CRLF on IE8 or earlier results in an incorrect display. // Emitting a carriage return makes everything ok. node.appendChild(document.createTextNode(ie_lt9 ? '\r' : text)); col = 0; return; } var content = ""; // replace tabs for (var pos = 0;;) { var idx = text.indexOf("\t", pos); if (idx == -1) { content += text.slice(pos); col += text.length - pos; break; } else { col += idx - pos; content += text.slice(pos, idx); var size = tabSize - col % tabSize; col += size; for (var i = 0; i < size; ++i) content += " "; pos = idx + 1; } } if (style) { var sp = node.appendChild(document.createElement("span")); sp.className = "cm-" + style.replace(/ +/g, " cm-"); sp.appendChild(document.createTextNode(content)); } else { node.appendChild(document.createTextNode(content)); } }; } var lines = CodeMirror.splitLines(string), state = (options && options.state) || CodeMirror.startState(mode); for (var i = 0, e = lines.length; i < e; ++i) { if (i) callback("\n"); var stream = new CodeMirror.StringStream(lines[i]); if (!stream.string && mode.blankLine) mode.blankLine(state); while (!stream.eol()) { var style = mode.token(stream, state); callback(stream.current(), style, i, stream.start, state); stream.start = stream.pos; } } }; }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/runmode/runmode.node.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE /* Just enough of CodeMirror to run runMode under node.js */ // declare global: StringStream function splitLines(string){ return string.split(/\r?\n|\r/); }; function StringStream(string) { this.pos = this.start = 0; this.string = string; this.lineStart = 0; } StringStream.prototype = { eol: function() {return this.pos >= this.string.length;}, sol: function() {return this.pos == 0;}, peek: function() {return this.string.charAt(this.pos) || null;}, next: function() { if (this.pos < this.string.length) return this.string.charAt(this.pos++); }, eat: function(match) { var ch = this.string.charAt(this.pos); if (typeof match == "string") var ok = ch == match; else var ok = ch && (match.test ? match.test(ch) : match(ch)); if (ok) {++this.pos; return ch;} }, eatWhile: function(match) { var start = this.pos; while (this.eat(match)){} return this.pos > start; }, eatSpace: function() { var start = this.pos; while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) ++this.pos; return this.pos > start; }, skipToEnd: function() {this.pos = this.string.length;}, skipTo: function(ch) { var found = this.string.indexOf(ch, this.pos); if (found > -1) {this.pos = found; return true;} }, backUp: function(n) {this.pos -= n;}, column: function() {return this.start - this.lineStart;}, indentation: function() {return 0;}, match: function(pattern, consume, caseInsensitive) { if (typeof pattern == "string") { var cased = function(str) {return caseInsensitive ? str.toLowerCase() : str;}; var substr = this.string.substr(this.pos, pattern.length); if (cased(substr) == cased(pattern)) { if (consume !== false) this.pos += pattern.length; return true; } } else { var match = this.string.slice(this.pos).match(pattern); if (match && match.index > 0) return null; if (match && consume !== false) this.pos += match[0].length; return match; } }, current: function(){return this.string.slice(this.start, this.pos);}, hideFirstChars: function(n, inner) { this.lineStart += n; try { return inner(); } finally { this.lineStart -= n; } } }; exports.StringStream = StringStream; exports.startState = function(mode, a1, a2) { return mode.startState ? mode.startState(a1, a2) : true; }; var modes = exports.modes = {}, mimeModes = exports.mimeModes = {}; exports.defineMode = function(name, mode) { if (arguments.length > 2) mode.dependencies = Array.prototype.slice.call(arguments, 2); modes[name] = mode; }; exports.defineMIME = function(mime, spec) { mimeModes[mime] = spec; }; exports.defineMode("null", function() { return {token: function(stream) {stream.skipToEnd();}}; }); exports.defineMIME("text/plain", "null"); exports.resolveMode = function(spec) { if (typeof spec == "string" && mimeModes.hasOwnProperty(spec)) { spec = mimeModes[spec]; } else if (spec && typeof spec.name == "string" && mimeModes.hasOwnProperty(spec.name)) { spec = mimeModes[spec.name]; } if (typeof spec == "string") return {name: spec}; else return spec || {name: "null"}; }; exports.getMode = function(options, spec) { spec = exports.resolveMode(spec); var mfactory = modes[spec.name]; if (!mfactory) throw new Error("Unknown mode: " + spec); return mfactory(options, spec); }; exports.registerHelper = exports.registerGlobalHelper = Math.min; exports.runMode = function(string, modespec, callback, options) { var mode = exports.getMode({indentUnit: 2}, modespec); var lines = splitLines(string), state = (options && options.state) || exports.startState(mode); for (var i = 0, e = lines.length; i < e; ++i) { if (i) callback("\n"); var stream = new exports.StringStream(lines[i]); if (!stream.string && mode.blankLine) mode.blankLine(state); while (!stream.eol()) { var style = mode.token(stream, state); callback(stream.current(), style, i, stream.start, state); stream.start = stream.pos; } } }; require.cache[require.resolve("../../lib/codemirror")] = require.cache[require.resolve("./runmode.node")]; ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/scroll/annotatescrollbar.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineExtension("annotateScrollbar", function(options) { if (typeof options == "string") options = {className: options}; return new Annotation(this, options); }); CodeMirror.defineOption("scrollButtonHeight", 0); function Annotation(cm, options) { this.cm = cm; this.options = options; this.buttonHeight = options.scrollButtonHeight || cm.getOption("scrollButtonHeight"); this.annotations = []; this.doRedraw = this.doUpdate = null; this.div = cm.getWrapperElement().appendChild(document.createElement("div")); this.div.style.cssText = "position: absolute; right: 0; top: 0; z-index: 7; pointer-events: none"; this.computeScale(); function scheduleRedraw(delay) { clearTimeout(self.doRedraw); self.doRedraw = setTimeout(function() { self.redraw(); }, delay); } var self = this; cm.on("refresh", this.resizeHandler = function() { clearTimeout(self.doUpdate); self.doUpdate = setTimeout(function() { if (self.computeScale()) scheduleRedraw(20); }, 100); }); cm.on("markerAdded", this.resizeHandler); cm.on("markerCleared", this.resizeHandler); if (options.listenForChanges !== false) cm.on("change", this.changeHandler = function() { scheduleRedraw(250); }); } Annotation.prototype.computeScale = function() { var cm = this.cm; var hScale = (cm.getWrapperElement().clientHeight - cm.display.barHeight - this.buttonHeight * 2) / cm.heightAtLine(cm.lastLine() + 1, "local"); if (hScale != this.hScale) { this.hScale = hScale; return true; } }; Annotation.prototype.update = function(annotations) { this.annotations = annotations; this.redraw(); }; Annotation.prototype.redraw = function(compute) { if (compute !== false) this.computeScale(); var cm = this.cm, hScale = this.hScale; var frag = document.createDocumentFragment(), anns = this.annotations; if (cm.display.barWidth) for (var i = 0, nextTop; i < anns.length; i++) { var ann = anns[i]; var top = nextTop || cm.charCoords(ann.from, "local").top * hScale; var bottom = cm.charCoords(ann.to, "local").bottom * hScale; while (i < anns.length - 1) { nextTop = cm.charCoords(anns[i + 1].from, "local").top * hScale; if (nextTop > bottom + .9) break; ann = anns[++i]; bottom = cm.charCoords(ann.to, "local").bottom * hScale; } if (bottom == top) continue; var height = Math.max(bottom - top, 3); var elt = frag.appendChild(document.createElement("div")); elt.style.cssText = "position: absolute; right: 0px; width: " + Math.max(cm.display.barWidth - 1, 2) + "px; top: " + (top + this.buttonHeight) + "px; height: " + height + "px"; elt.className = this.options.className; } this.div.textContent = ""; this.div.appendChild(frag); }; Annotation.prototype.clear = function() { this.cm.off("refresh", this.resizeHandler); this.cm.off("markerAdded", this.resizeHandler); this.cm.off("markerCleared", this.resizeHandler); if (this.changeHandler) this.cm.off("change", this.changeHandler); this.div.parentNode.removeChild(this.div); }; }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/scroll/scrollpastend.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineOption("scrollPastEnd", false, function(cm, val, old) { if (old && old != CodeMirror.Init) { cm.off("change", onChange); cm.off("refresh", updateBottomMargin); cm.display.lineSpace.parentNode.style.paddingBottom = ""; cm.state.scrollPastEndPadding = null; } if (val) { cm.on("change", onChange); cm.on("refresh", updateBottomMargin); updateBottomMargin(cm); } }); function onChange(cm, change) { if (CodeMirror.changeEnd(change).line == cm.lastLine()) updateBottomMargin(cm); } function updateBottomMargin(cm) { var padding = ""; if (cm.lineCount() > 1) { var totalH = cm.display.scroller.clientHeight - 30, lastLineH = cm.getLineHandle(cm.lastLine()).height; padding = (totalH - lastLineH) + "px"; } if (cm.state.scrollPastEndPadding != padding) { cm.state.scrollPastEndPadding = padding; cm.display.lineSpace.parentNode.style.paddingBottom = padding; cm.setSize(); } } }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/scroll/simplescrollbars.css ================================================ .CodeMirror-simplescroll-horizontal div, .CodeMirror-simplescroll-vertical div { position: absolute; background: #ccc; -moz-box-sizing: border-box; box-sizing: border-box; border: 1px solid #bbb; border-radius: 2px; } .CodeMirror-simplescroll-horizontal, .CodeMirror-simplescroll-vertical { position: absolute; z-index: 6; background: #eee; } .CodeMirror-simplescroll-horizontal { bottom: 0; left: 0; height: 8px; } .CodeMirror-simplescroll-horizontal div { bottom: 0; height: 100%; } .CodeMirror-simplescroll-vertical { right: 0; top: 0; width: 8px; } .CodeMirror-simplescroll-vertical div { right: 0; width: 100%; } .CodeMirror-overlayscroll .CodeMirror-scrollbar-filler, .CodeMirror-overlayscroll .CodeMirror-gutter-filler { display: none; } .CodeMirror-overlayscroll-horizontal div, .CodeMirror-overlayscroll-vertical div { position: absolute; background: #bcd; border-radius: 3px; } .CodeMirror-overlayscroll-horizontal, .CodeMirror-overlayscroll-vertical { position: absolute; z-index: 6; } .CodeMirror-overlayscroll-horizontal { bottom: 0; left: 0; height: 6px; } .CodeMirror-overlayscroll-horizontal div { bottom: 0; height: 100%; } .CodeMirror-overlayscroll-vertical { right: 0; top: 0; width: 6px; } .CodeMirror-overlayscroll-vertical div { right: 0; width: 100%; } ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/scroll/simplescrollbars.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; function Bar(cls, orientation, scroll) { this.orientation = orientation; this.scroll = scroll; this.screen = this.total = this.size = 1; this.pos = 0; this.node = document.createElement("div"); this.node.className = cls + "-" + orientation; this.inner = this.node.appendChild(document.createElement("div")); var self = this; CodeMirror.on(this.inner, "mousedown", function(e) { if (e.which != 1) return; CodeMirror.e_preventDefault(e); var axis = self.orientation == "horizontal" ? "pageX" : "pageY"; var start = e[axis], startpos = self.pos; function done() { CodeMirror.off(document, "mousemove", move); CodeMirror.off(document, "mouseup", done); } function move(e) { if (e.which != 1) return done(); self.moveTo(startpos + (e[axis] - start) * (self.total / self.size)); } CodeMirror.on(document, "mousemove", move); CodeMirror.on(document, "mouseup", done); }); CodeMirror.on(this.node, "click", function(e) { CodeMirror.e_preventDefault(e); var innerBox = self.inner.getBoundingClientRect(), where; if (self.orientation == "horizontal") where = e.clientX < innerBox.left ? -1 : e.clientX > innerBox.right ? 1 : 0; else where = e.clientY < innerBox.top ? -1 : e.clientY > innerBox.bottom ? 1 : 0; self.moveTo(self.pos + where * self.screen); }); function onWheel(e) { var moved = CodeMirror.wheelEventPixels(e)[self.orientation == "horizontal" ? "x" : "y"]; var oldPos = self.pos; self.moveTo(self.pos + moved); if (self.pos != oldPos) CodeMirror.e_preventDefault(e); } CodeMirror.on(this.node, "mousewheel", onWheel); CodeMirror.on(this.node, "DOMMouseScroll", onWheel); } Bar.prototype.moveTo = function(pos, update) { if (pos < 0) pos = 0; if (pos > this.total - this.screen) pos = this.total - this.screen; if (pos == this.pos) return; this.pos = pos; this.inner.style[this.orientation == "horizontal" ? "left" : "top"] = (pos * (this.size / this.total)) + "px"; if (update !== false) this.scroll(pos, this.orientation); }; Bar.prototype.update = function(scrollSize, clientSize, barSize) { this.screen = clientSize; this.total = scrollSize; this.size = barSize; // FIXME clip to min size? this.inner.style[this.orientation == "horizontal" ? "width" : "height"] = this.screen * (this.size / this.total) + "px"; this.inner.style[this.orientation == "horizontal" ? "left" : "top"] = this.pos * (this.size / this.total) + "px"; }; function SimpleScrollbars(cls, place, scroll) { this.addClass = cls; this.horiz = new Bar(cls, "horizontal", scroll); place(this.horiz.node); this.vert = new Bar(cls, "vertical", scroll); place(this.vert.node); this.width = null; } SimpleScrollbars.prototype.update = function(measure) { if (this.width == null) { var style = window.getComputedStyle ? window.getComputedStyle(this.horiz.node) : this.horiz.node.currentStyle; if (style) this.width = parseInt(style.height); } var width = this.width || 0; var needsH = measure.scrollWidth > measure.clientWidth + 1; var needsV = measure.scrollHeight > measure.clientHeight + 1; this.vert.node.style.display = needsV ? "block" : "none"; this.horiz.node.style.display = needsH ? "block" : "none"; if (needsV) { this.vert.update(measure.scrollHeight, measure.clientHeight, measure.viewHeight - (needsH ? width : 0)); this.vert.node.style.display = "block"; this.vert.node.style.bottom = needsH ? width + "px" : "0"; } if (needsH) { this.horiz.update(measure.scrollWidth, measure.clientWidth, measure.viewWidth - (needsV ? width : 0) - measure.barLeft); this.horiz.node.style.right = needsV ? width + "px" : "0"; this.horiz.node.style.left = measure.barLeft + "px"; } return {right: needsV ? width : 0, bottom: needsH ? width : 0}; }; SimpleScrollbars.prototype.setScrollTop = function(pos) { this.vert.moveTo(pos, false); }; SimpleScrollbars.prototype.setScrollLeft = function(pos) { this.horiz.moveTo(pos, false); }; SimpleScrollbars.prototype.clear = function() { var parent = this.horiz.node.parentNode; parent.removeChild(this.horiz.node); parent.removeChild(this.vert.node); }; CodeMirror.scrollbarModel.simple = function(place, scroll) { return new SimpleScrollbars("CodeMirror-simplescroll", place, scroll); }; CodeMirror.scrollbarModel.overlay = function(place, scroll) { return new SimpleScrollbars("CodeMirror-overlayscroll", place, scroll); }; }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/search/match-highlighter.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE // Highlighting text that matches the selection // // Defines an option highlightSelectionMatches, which, when enabled, // will style strings that match the selection throughout the // document. // // The option can be set to true to simply enable it, or to a // {minChars, style, wordsOnly, showToken, delay} object to explicitly // configure it. minChars is the minimum amount of characters that should be // selected for the behavior to occur, and style is the token style to // apply to the matches. This will be prefixed by "cm-" to create an // actual CSS class name. If wordsOnly is enabled, the matches will be // highlighted only if the selected text is a word. showToken, when enabled, // will cause the current token to be highlighted when nothing is selected. // delay is used to specify how much time to wait, in milliseconds, before // highlighting the matches. (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; var DEFAULT_MIN_CHARS = 2; var DEFAULT_TOKEN_STYLE = "matchhighlight"; var DEFAULT_DELAY = 100; var DEFAULT_WORDS_ONLY = false; function State(options) { if (typeof options == "object") { this.minChars = options.minChars; this.style = options.style; this.showToken = options.showToken; this.delay = options.delay; this.wordsOnly = options.wordsOnly; } if (this.style == null) this.style = DEFAULT_TOKEN_STYLE; if (this.minChars == null) this.minChars = DEFAULT_MIN_CHARS; if (this.delay == null) this.delay = DEFAULT_DELAY; if (this.wordsOnly == null) this.wordsOnly = DEFAULT_WORDS_ONLY; this.overlay = this.timeout = null; } CodeMirror.defineOption("highlightSelectionMatches", false, function(cm, val, old) { if (old && old != CodeMirror.Init) { var over = cm.state.matchHighlighter.overlay; if (over) cm.removeOverlay(over); clearTimeout(cm.state.matchHighlighter.timeout); cm.state.matchHighlighter = null; cm.off("cursorActivity", cursorActivity); } if (val) { cm.state.matchHighlighter = new State(val); highlightMatches(cm); cm.on("cursorActivity", cursorActivity); } }); function cursorActivity(cm) { var state = cm.state.matchHighlighter; clearTimeout(state.timeout); state.timeout = setTimeout(function() {highlightMatches(cm);}, state.delay); } function highlightMatches(cm) { cm.operation(function() { var state = cm.state.matchHighlighter; if (state.overlay) { cm.removeOverlay(state.overlay); state.overlay = null; } if (!cm.somethingSelected() && state.showToken) { var re = state.showToken === true ? /[\w$]/ : state.showToken; var cur = cm.getCursor(), line = cm.getLine(cur.line), start = cur.ch, end = start; while (start && re.test(line.charAt(start - 1))) --start; while (end < line.length && re.test(line.charAt(end))) ++end; if (start < end) cm.addOverlay(state.overlay = makeOverlay(line.slice(start, end), re, state.style)); return; } var from = cm.getCursor("from"), to = cm.getCursor("to"); if (from.line != to.line) return; if (state.wordsOnly && !isWord(cm, from, to)) return; var selection = cm.getRange(from, to).replace(/^\s+|\s+$/g, ""); if (selection.length >= state.minChars) cm.addOverlay(state.overlay = makeOverlay(selection, false, state.style)); }); } function isWord(cm, from, to) { var str = cm.getRange(from, to); if (str.match(/^\w+$/) !== null) { if (from.ch > 0) { var pos = {line: from.line, ch: from.ch - 1}; var chr = cm.getRange(pos, from); if (chr.match(/\W/) === null) return false; } if (to.ch < cm.getLine(from.line).length) { var pos = {line: to.line, ch: to.ch + 1}; var chr = cm.getRange(to, pos); if (chr.match(/\W/) === null) return false; } return true; } else return false; } function boundariesAround(stream, re) { return (!stream.start || !re.test(stream.string.charAt(stream.start - 1))) && (stream.pos == stream.string.length || !re.test(stream.string.charAt(stream.pos))); } function makeOverlay(query, hasBoundary, style) { return {token: function(stream) { if (stream.match(query) && (!hasBoundary || boundariesAround(stream, hasBoundary))) return style; stream.next(); stream.skipTo(query.charAt(0)) || stream.skipToEnd(); }}; } }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/search/matchesonscrollbar.css ================================================ .CodeMirror-search-match { background: gold; border-top: 1px solid orange; border-bottom: 1px solid orange; -moz-box-sizing: border-box; box-sizing: border-box; opacity: .5; } ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/search/matchesonscrollbar.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("./searchcursor"), require("../scroll/annotatescrollbar")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "./searchcursor", "../scroll/annotatescrollbar"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineExtension("showMatchesOnScrollbar", function(query, caseFold, options) { if (typeof options == "string") options = {className: options}; if (!options) options = {}; return new SearchAnnotation(this, query, caseFold, options); }); function SearchAnnotation(cm, query, caseFold, options) { this.cm = cm; var annotateOptions = {listenForChanges: false}; for (var prop in options) annotateOptions[prop] = options[prop]; if (!annotateOptions.className) annotateOptions.className = "CodeMirror-search-match"; this.annotation = cm.annotateScrollbar(annotateOptions); this.query = query; this.caseFold = caseFold; this.gap = {from: cm.firstLine(), to: cm.lastLine() + 1}; this.matches = []; this.update = null; this.findMatches(); this.annotation.update(this.matches); var self = this; cm.on("change", this.changeHandler = function(_cm, change) { self.onChange(change); }); } var MAX_MATCHES = 1000; SearchAnnotation.prototype.findMatches = function() { if (!this.gap) return; for (var i = 0; i < this.matches.length; i++) { var match = this.matches[i]; if (match.from.line >= this.gap.to) break; if (match.to.line >= this.gap.from) this.matches.splice(i--, 1); } var cursor = this.cm.getSearchCursor(this.query, CodeMirror.Pos(this.gap.from, 0), this.caseFold); while (cursor.findNext()) { var match = {from: cursor.from(), to: cursor.to()}; if (match.from.line >= this.gap.to) break; this.matches.splice(i++, 0, match); if (this.matches.length > MAX_MATCHES) break; } this.gap = null; }; function offsetLine(line, changeStart, sizeChange) { if (line <= changeStart) return line; return Math.max(changeStart, line + sizeChange); } SearchAnnotation.prototype.onChange = function(change) { var startLine = change.from.line; var endLine = CodeMirror.changeEnd(change).line; var sizeChange = endLine - change.to.line; if (this.gap) { this.gap.from = Math.min(offsetLine(this.gap.from, startLine, sizeChange), change.from.line); this.gap.to = Math.max(offsetLine(this.gap.to, startLine, sizeChange), change.from.line); } else { this.gap = {from: change.from.line, to: endLine + 1}; } if (sizeChange) for (var i = 0; i < this.matches.length; i++) { var match = this.matches[i]; var newFrom = offsetLine(match.from.line, startLine, sizeChange); if (newFrom != match.from.line) match.from = CodeMirror.Pos(newFrom, match.from.ch); var newTo = offsetLine(match.to.line, startLine, sizeChange); if (newTo != match.to.line) match.to = CodeMirror.Pos(newTo, match.to.ch); } clearTimeout(this.update); var self = this; this.update = setTimeout(function() { self.updateAfterChange(); }, 250); }; SearchAnnotation.prototype.updateAfterChange = function() { this.findMatches(); this.annotation.update(this.matches); }; SearchAnnotation.prototype.clear = function() { this.cm.off("change", this.changeHandler); this.annotation.clear(); }; }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/search/search.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE // Define search commands. Depends on dialog.js or another // implementation of the openDialog method. // Replace works a little oddly -- it will do the replace on the next // Ctrl-G (or whatever is bound to findNext) press. You prevent a // replace by making sure the match is no longer selected when hitting // Ctrl-G. (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("./searchcursor"), require("../dialog/dialog")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "./searchcursor", "../dialog/dialog"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; function searchOverlay(query, caseInsensitive) { if (typeof query == "string") query = new RegExp(query.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"), caseInsensitive ? "gi" : "g"); else if (!query.global) query = new RegExp(query.source, query.ignoreCase ? "gi" : "g"); return {token: function(stream) { query.lastIndex = stream.pos; var match = query.exec(stream.string); if (match && match.index == stream.pos) { stream.pos += match[0].length; return "searching"; } else if (match) { stream.pos = match.index; } else { stream.skipToEnd(); } }}; } function SearchState() { this.posFrom = this.posTo = this.query = null; this.overlay = null; } function getSearchState(cm) { return cm.state.search || (cm.state.search = new SearchState()); } function queryCaseInsensitive(query) { return typeof query == "string" && query == query.toLowerCase(); } function getSearchCursor(cm, query, pos) { // Heuristic: if the query string is all lowercase, do a case insensitive search. return cm.getSearchCursor(query, pos, queryCaseInsensitive(query)); } function dialog(cm, text, shortText, deflt, f) { if (cm.openDialog) cm.openDialog(text, f, {value: deflt}); else f(prompt(shortText, deflt)); } function confirmDialog(cm, text, shortText, fs) { if (cm.openConfirm) cm.openConfirm(text, fs); else if (confirm(shortText)) fs[0](); } function parseQuery(query) { var isRE = query.match(/^\/(.*)\/([a-z]*)$/); if (isRE) { try { query = new RegExp(isRE[1], isRE[2].indexOf("i") == -1 ? "" : "i"); } catch(e) {} // Not a regular expression after all, do a string search } if (typeof query == "string" ? query == "" : query.test("")) query = /x^/; return query; } var queryDialog = 'Search: (Use /re/ syntax for regexp search)'; function doSearch(cm, rev) { var state = getSearchState(cm); if (state.query) return findNext(cm, rev); dialog(cm, queryDialog, "Search for:", cm.getSelection(), function(query) { cm.operation(function() { if (!query || state.query) return; state.query = parseQuery(query); cm.removeOverlay(state.overlay, queryCaseInsensitive(state.query)); state.overlay = searchOverlay(state.query, queryCaseInsensitive(state.query)); cm.addOverlay(state.overlay); if (cm.showMatchesOnScrollbar) { if (state.annotate) { state.annotate.clear(); state.annotate = null; } state.annotate = cm.showMatchesOnScrollbar(state.query, queryCaseInsensitive(state.query)); } state.posFrom = state.posTo = cm.getCursor(); findNext(cm, rev); }); }); } function findNext(cm, rev) {cm.operation(function() { var state = getSearchState(cm); var cursor = getSearchCursor(cm, state.query, rev ? state.posFrom : state.posTo); if (!cursor.find(rev)) { cursor = getSearchCursor(cm, state.query, rev ? CodeMirror.Pos(cm.lastLine()) : CodeMirror.Pos(cm.firstLine(), 0)); if (!cursor.find(rev)) return; } cm.setSelection(cursor.from(), cursor.to()); cm.scrollIntoView({from: cursor.from(), to: cursor.to()}); state.posFrom = cursor.from(); state.posTo = cursor.to(); });} function clearSearch(cm) {cm.operation(function() { var state = getSearchState(cm); if (!state.query) return; state.query = null; cm.removeOverlay(state.overlay); if (state.annotate) { state.annotate.clear(); state.annotate = null; } });} var replaceQueryDialog = 'Replace: (Use /re/ syntax for regexp search)'; var replacementQueryDialog = 'With: '; var doReplaceConfirm = "Replace? "; function replace(cm, all) { if (cm.getOption("readOnly")) return; dialog(cm, replaceQueryDialog, "Replace:", cm.getSelection(), function(query) { if (!query) return; query = parseQuery(query); dialog(cm, replacementQueryDialog, "Replace with:", "", function(text) { if (all) { cm.operation(function() { for (var cursor = getSearchCursor(cm, query); cursor.findNext();) { if (typeof query != "string") { var match = cm.getRange(cursor.from(), cursor.to()).match(query); cursor.replace(text.replace(/\$(\d)/g, function(_, i) {return match[i];})); } else cursor.replace(text); } }); } else { clearSearch(cm); var cursor = getSearchCursor(cm, query, cm.getCursor()); var advance = function() { var start = cursor.from(), match; if (!(match = cursor.findNext())) { cursor = getSearchCursor(cm, query); if (!(match = cursor.findNext()) || (start && cursor.from().line == start.line && cursor.from().ch == start.ch)) return; } cm.setSelection(cursor.from(), cursor.to()); cm.scrollIntoView({from: cursor.from(), to: cursor.to()}); confirmDialog(cm, doReplaceConfirm, "Replace?", [function() {doReplace(match);}, advance]); }; var doReplace = function(match) { cursor.replace(typeof query == "string" ? text : text.replace(/\$(\d)/g, function(_, i) {return match[i];})); advance(); }; advance(); } }); }); } CodeMirror.commands.find = function(cm) {clearSearch(cm); doSearch(cm);}; CodeMirror.commands.findNext = doSearch; CodeMirror.commands.findPrev = function(cm) {doSearch(cm, true);}; CodeMirror.commands.clearSearch = clearSearch; CodeMirror.commands.replace = replace; CodeMirror.commands.replaceAll = function(cm) {replace(cm, true);}; }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/search/searchcursor.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; var Pos = CodeMirror.Pos; function SearchCursor(doc, query, pos, caseFold) { this.atOccurrence = false; this.doc = doc; if (caseFold == null && typeof query == "string") caseFold = false; pos = pos ? doc.clipPos(pos) : Pos(0, 0); this.pos = {from: pos, to: pos}; // The matches method is filled in based on the type of query. // It takes a position and a direction, and returns an object // describing the next occurrence of the query, or null if no // more matches were found. if (typeof query != "string") { // Regexp match if (!query.global) query = new RegExp(query.source, query.ignoreCase ? "ig" : "g"); this.matches = function(reverse, pos) { if (reverse) { query.lastIndex = 0; var line = doc.getLine(pos.line).slice(0, pos.ch), cutOff = 0, match, start; for (;;) { query.lastIndex = cutOff; var newMatch = query.exec(line); if (!newMatch) break; match = newMatch; start = match.index; cutOff = match.index + (match[0].length || 1); if (cutOff == line.length) break; } var matchLen = (match && match[0].length) || 0; if (!matchLen) { if (start == 0 && line.length == 0) {match = undefined;} else if (start != doc.getLine(pos.line).length) { matchLen++; } } } else { query.lastIndex = pos.ch; var line = doc.getLine(pos.line), match = query.exec(line); var matchLen = (match && match[0].length) || 0; var start = match && match.index; if (start + matchLen != line.length && !matchLen) matchLen = 1; } if (match && matchLen) return {from: Pos(pos.line, start), to: Pos(pos.line, start + matchLen), match: match}; }; } else { // String query var origQuery = query; if (caseFold) query = query.toLowerCase(); var fold = caseFold ? function(str){return str.toLowerCase();} : function(str){return str;}; var target = query.split("\n"); // Different methods for single-line and multi-line queries if (target.length == 1) { if (!query.length) { // Empty string would match anything and never progress, so // we define it to match nothing instead. this.matches = function() {}; } else { this.matches = function(reverse, pos) { if (reverse) { var orig = doc.getLine(pos.line).slice(0, pos.ch), line = fold(orig); var match = line.lastIndexOf(query); if (match > -1) { match = adjustPos(orig, line, match); return {from: Pos(pos.line, match), to: Pos(pos.line, match + origQuery.length)}; } } else { var orig = doc.getLine(pos.line).slice(pos.ch), line = fold(orig); var match = line.indexOf(query); if (match > -1) { match = adjustPos(orig, line, match) + pos.ch; return {from: Pos(pos.line, match), to: Pos(pos.line, match + origQuery.length)}; } } }; } } else { var origTarget = origQuery.split("\n"); this.matches = function(reverse, pos) { var last = target.length - 1; if (reverse) { if (pos.line - (target.length - 1) < doc.firstLine()) return; if (fold(doc.getLine(pos.line).slice(0, origTarget[last].length)) != target[target.length - 1]) return; var to = Pos(pos.line, origTarget[last].length); for (var ln = pos.line - 1, i = last - 1; i >= 1; --i, --ln) if (target[i] != fold(doc.getLine(ln))) return; var line = doc.getLine(ln), cut = line.length - origTarget[0].length; if (fold(line.slice(cut)) != target[0]) return; return {from: Pos(ln, cut), to: to}; } else { if (pos.line + (target.length - 1) > doc.lastLine()) return; var line = doc.getLine(pos.line), cut = line.length - origTarget[0].length; if (fold(line.slice(cut)) != target[0]) return; var from = Pos(pos.line, cut); for (var ln = pos.line + 1, i = 1; i < last; ++i, ++ln) if (target[i] != fold(doc.getLine(ln))) return; if (fold(doc.getLine(ln).slice(0, origTarget[last].length)) != target[last]) return; return {from: from, to: Pos(ln, origTarget[last].length)}; } }; } } } SearchCursor.prototype = { findNext: function() {return this.find(false);}, findPrevious: function() {return this.find(true);}, find: function(reverse) { var self = this, pos = this.doc.clipPos(reverse ? this.pos.from : this.pos.to); function savePosAndFail(line) { var pos = Pos(line, 0); self.pos = {from: pos, to: pos}; self.atOccurrence = false; return false; } for (;;) { if (this.pos = this.matches(reverse, pos)) { this.atOccurrence = true; return this.pos.match || true; } if (reverse) { if (!pos.line) return savePosAndFail(0); pos = Pos(pos.line-1, this.doc.getLine(pos.line-1).length); } else { var maxLine = this.doc.lineCount(); if (pos.line == maxLine - 1) return savePosAndFail(maxLine); pos = Pos(pos.line + 1, 0); } } }, from: function() {if (this.atOccurrence) return this.pos.from;}, to: function() {if (this.atOccurrence) return this.pos.to;}, replace: function(newText) { if (!this.atOccurrence) return; var lines = CodeMirror.splitLines(newText); this.doc.replaceRange(lines, this.pos.from, this.pos.to); this.pos.to = Pos(this.pos.from.line + lines.length - 1, lines[lines.length - 1].length + (lines.length == 1 ? this.pos.from.ch : 0)); } }; // Maps a position in a case-folded line back to a position in the original line // (compensating for codepoints increasing in number during folding) function adjustPos(orig, folded, pos) { if (orig.length == folded.length) return pos; for (var pos1 = Math.min(pos, orig.length);;) { var len1 = orig.slice(0, pos1).toLowerCase().length; if (len1 < pos) ++pos1; else if (len1 > pos) --pos1; else return pos1; } } CodeMirror.defineExtension("getSearchCursor", function(query, pos, caseFold) { return new SearchCursor(this.doc, query, pos, caseFold); }); CodeMirror.defineDocExtension("getSearchCursor", function(query, pos, caseFold) { return new SearchCursor(this, query, pos, caseFold); }); CodeMirror.defineExtension("selectMatches", function(query, caseFold) { var ranges = [], next; var cur = this.getSearchCursor(query, this.getCursor("from"), caseFold); while (next = cur.findNext()) { if (CodeMirror.cmpPos(cur.to(), this.getCursor("to")) > 0) break; ranges.push({anchor: cur.from(), head: cur.to()}); } if (ranges.length) this.setSelections(ranges, 0); }); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/selection/active-line.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE // Because sometimes you need to style the cursor's line. // // Adds an option 'styleActiveLine' which, when enabled, gives the // active line's wrapping
                  the CSS class "CodeMirror-activeline", // and gives its background
                  the class "CodeMirror-activeline-background". (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; var WRAP_CLASS = "CodeMirror-activeline"; var BACK_CLASS = "CodeMirror-activeline-background"; CodeMirror.defineOption("styleActiveLine", false, function(cm, val, old) { var prev = old && old != CodeMirror.Init; if (val && !prev) { cm.state.activeLines = []; updateActiveLines(cm, cm.listSelections()); cm.on("beforeSelectionChange", selectionChange); } else if (!val && prev) { cm.off("beforeSelectionChange", selectionChange); clearActiveLines(cm); delete cm.state.activeLines; } }); function clearActiveLines(cm) { for (var i = 0; i < cm.state.activeLines.length; i++) { cm.removeLineClass(cm.state.activeLines[i], "wrap", WRAP_CLASS); cm.removeLineClass(cm.state.activeLines[i], "background", BACK_CLASS); } } function sameArray(a, b) { if (a.length != b.length) return false; for (var i = 0; i < a.length; i++) if (a[i] != b[i]) return false; return true; } function updateActiveLines(cm, ranges) { var active = []; for (var i = 0; i < ranges.length; i++) { var range = ranges[i]; if (!range.empty()) continue; var line = cm.getLineHandleVisualStart(range.head.line); if (active[active.length - 1] != line) active.push(line); } if (sameArray(cm.state.activeLines, active)) return; cm.operation(function() { clearActiveLines(cm); for (var i = 0; i < active.length; i++) { cm.addLineClass(active[i], "wrap", WRAP_CLASS); cm.addLineClass(active[i], "background", BACK_CLASS); } cm.state.activeLines = active; }); } function selectionChange(cm, sel) { updateActiveLines(cm, sel.ranges); } }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/selection/mark-selection.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE // Because sometimes you need to mark the selected *text*. // // Adds an option 'styleSelectedText' which, when enabled, gives // selected text the CSS class given as option value, or // "CodeMirror-selectedtext" when the value is not a string. (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineOption("styleSelectedText", false, function(cm, val, old) { var prev = old && old != CodeMirror.Init; if (val && !prev) { cm.state.markedSelection = []; cm.state.markedSelectionStyle = typeof val == "string" ? val : "CodeMirror-selectedtext"; reset(cm); cm.on("cursorActivity", onCursorActivity); cm.on("change", onChange); } else if (!val && prev) { cm.off("cursorActivity", onCursorActivity); cm.off("change", onChange); clear(cm); cm.state.markedSelection = cm.state.markedSelectionStyle = null; } }); function onCursorActivity(cm) { cm.operation(function() { update(cm); }); } function onChange(cm) { if (cm.state.markedSelection.length) cm.operation(function() { clear(cm); }); } var CHUNK_SIZE = 8; var Pos = CodeMirror.Pos; var cmp = CodeMirror.cmpPos; function coverRange(cm, from, to, addAt) { if (cmp(from, to) == 0) return; var array = cm.state.markedSelection; var cls = cm.state.markedSelectionStyle; for (var line = from.line;;) { var start = line == from.line ? from : Pos(line, 0); var endLine = line + CHUNK_SIZE, atEnd = endLine >= to.line; var end = atEnd ? to : Pos(endLine, 0); var mark = cm.markText(start, end, {className: cls}); if (addAt == null) array.push(mark); else array.splice(addAt++, 0, mark); if (atEnd) break; line = endLine; } } function clear(cm) { var array = cm.state.markedSelection; for (var i = 0; i < array.length; ++i) array[i].clear(); array.length = 0; } function reset(cm) { clear(cm); var ranges = cm.listSelections(); for (var i = 0; i < ranges.length; i++) coverRange(cm, ranges[i].from(), ranges[i].to()); } function update(cm) { if (!cm.somethingSelected()) return clear(cm); if (cm.listSelections().length > 1) return reset(cm); var from = cm.getCursor("start"), to = cm.getCursor("end"); var array = cm.state.markedSelection; if (!array.length) return coverRange(cm, from, to); var coverStart = array[0].find(), coverEnd = array[array.length - 1].find(); if (!coverStart || !coverEnd || to.line - from.line < CHUNK_SIZE || cmp(from, coverEnd.to) >= 0 || cmp(to, coverStart.from) <= 0) return reset(cm); while (cmp(from, coverStart.from) > 0) { array.shift().clear(); coverStart = array[0].find(); } if (cmp(from, coverStart.from) < 0) { if (coverStart.to.line - from.line < CHUNK_SIZE) { array.shift().clear(); coverRange(cm, from, coverStart.to, 0); } else { coverRange(cm, from, coverStart.from, 0); } } while (cmp(to, coverEnd.to) < 0) { array.pop().clear(); coverEnd = array[array.length - 1].find(); } if (cmp(to, coverEnd.to) > 0) { if (to.line - coverEnd.from.line < CHUNK_SIZE) { array.pop().clear(); coverRange(cm, coverEnd.from, to); } else { coverRange(cm, coverEnd.to, to); } } } }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/selection/selection-pointer.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineOption("selectionPointer", false, function(cm, val) { var data = cm.state.selectionPointer; if (data) { CodeMirror.off(cm.getWrapperElement(), "mousemove", data.mousemove); CodeMirror.off(cm.getWrapperElement(), "mouseout", data.mouseout); CodeMirror.off(window, "scroll", data.windowScroll); cm.off("cursorActivity", reset); cm.off("scroll", reset); cm.state.selectionPointer = null; cm.display.lineDiv.style.cursor = ""; } if (val) { data = cm.state.selectionPointer = { value: typeof val == "string" ? val : "default", mousemove: function(event) { mousemove(cm, event); }, mouseout: function(event) { mouseout(cm, event); }, windowScroll: function() { reset(cm); }, rects: null, mouseX: null, mouseY: null, willUpdate: false }; CodeMirror.on(cm.getWrapperElement(), "mousemove", data.mousemove); CodeMirror.on(cm.getWrapperElement(), "mouseout", data.mouseout); CodeMirror.on(window, "scroll", data.windowScroll); cm.on("cursorActivity", reset); cm.on("scroll", reset); } }); function mousemove(cm, event) { var data = cm.state.selectionPointer; if (event.buttons == null ? event.which : event.buttons) { data.mouseX = data.mouseY = null; } else { data.mouseX = event.clientX; data.mouseY = event.clientY; } scheduleUpdate(cm); } function mouseout(cm, event) { if (!cm.getWrapperElement().contains(event.relatedTarget)) { var data = cm.state.selectionPointer; data.mouseX = data.mouseY = null; scheduleUpdate(cm); } } function reset(cm) { cm.state.selectionPointer.rects = null; scheduleUpdate(cm); } function scheduleUpdate(cm) { if (!cm.state.selectionPointer.willUpdate) { cm.state.selectionPointer.willUpdate = true; setTimeout(function() { update(cm); cm.state.selectionPointer.willUpdate = false; }, 50); } } function update(cm) { var data = cm.state.selectionPointer; if (!data) return; if (data.rects == null && data.mouseX != null) { data.rects = []; if (cm.somethingSelected()) { for (var sel = cm.display.selectionDiv.firstChild; sel; sel = sel.nextSibling) data.rects.push(sel.getBoundingClientRect()); } } var inside = false; if (data.mouseX != null) for (var i = 0; i < data.rects.length; i++) { var rect = data.rects[i]; if (rect.left <= data.mouseX && rect.right >= data.mouseX && rect.top <= data.mouseY && rect.bottom >= data.mouseY) inside = true; } var cursor = inside ? data.value : ""; if (cm.display.lineDiv.style.cursor != cursor) cm.display.lineDiv.style.cursor = cursor; } }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/tern/tern.css ================================================ .CodeMirror-Tern-completion { padding-left: 22px; position: relative; } .CodeMirror-Tern-completion:before { position: absolute; left: 2px; bottom: 2px; border-radius: 50%; font-size: 12px; font-weight: bold; height: 15px; width: 15px; line-height: 16px; text-align: center; color: white; -moz-box-sizing: border-box; box-sizing: border-box; } .CodeMirror-Tern-completion-unknown:before { content: "?"; background: #4bb; } .CodeMirror-Tern-completion-object:before { content: "O"; background: #77c; } .CodeMirror-Tern-completion-fn:before { content: "F"; background: #7c7; } .CodeMirror-Tern-completion-array:before { content: "A"; background: #c66; } .CodeMirror-Tern-completion-number:before { content: "1"; background: #999; } .CodeMirror-Tern-completion-string:before { content: "S"; background: #999; } .CodeMirror-Tern-completion-bool:before { content: "B"; background: #999; } .CodeMirror-Tern-completion-guess { color: #999; } .CodeMirror-Tern-tooltip { border: 1px solid silver; border-radius: 3px; color: #444; padding: 2px 5px; font-size: 90%; font-family: monospace; background-color: white; white-space: pre-wrap; max-width: 40em; position: absolute; z-index: 10; -webkit-box-shadow: 2px 3px 5px rgba(0,0,0,.2); -moz-box-shadow: 2px 3px 5px rgba(0,0,0,.2); box-shadow: 2px 3px 5px rgba(0,0,0,.2); transition: opacity 1s; -moz-transition: opacity 1s; -webkit-transition: opacity 1s; -o-transition: opacity 1s; -ms-transition: opacity 1s; } .CodeMirror-Tern-hint-doc { max-width: 25em; margin-top: -3px; } .CodeMirror-Tern-fname { color: black; } .CodeMirror-Tern-farg { color: #70a; } .CodeMirror-Tern-farg-current { text-decoration: underline; } .CodeMirror-Tern-type { color: #07c; } .CodeMirror-Tern-fhint-guess { opacity: .7; } ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/tern/tern.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE // Glue code between CodeMirror and Tern. // // Create a CodeMirror.TernServer to wrap an actual Tern server, // register open documents (CodeMirror.Doc instances) with it, and // call its methods to activate the assisting functions that Tern // provides. // // Options supported (all optional): // * defs: An array of JSON definition data structures. // * plugins: An object mapping plugin names to configuration // options. // * getFile: A function(name, c) that can be used to access files in // the project that haven't been loaded yet. Simply do c(null) to // indicate that a file is not available. // * fileFilter: A function(value, docName, doc) that will be applied // to documents before passing them on to Tern. // * switchToDoc: A function(name, doc) that should, when providing a // multi-file view, switch the view or focus to the named file. // * showError: A function(editor, message) that can be used to // override the way errors are displayed. // * completionTip: Customize the content in tooltips for completions. // Is passed a single argument—the completion's data as returned by // Tern—and may return a string, DOM node, or null to indicate that // no tip should be shown. By default the docstring is shown. // * typeTip: Like completionTip, but for the tooltips shown for type // queries. // * responseFilter: A function(doc, query, request, error, data) that // will be applied to the Tern responses before treating them // // // It is possible to run the Tern server in a web worker by specifying // these additional options: // * useWorker: Set to true to enable web worker mode. You'll probably // want to feature detect the actual value you use here, for example // !!window.Worker. // * workerScript: The main script of the worker. Point this to // wherever you are hosting worker.js from this directory. // * workerDeps: An array of paths pointing (relative to workerScript) // to the Acorn and Tern libraries and any Tern plugins you want to // load. Or, if you minified those into a single script and included // them in the workerScript, simply leave this undefined. (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; // declare global: tern CodeMirror.TernServer = function(options) { var self = this; this.options = options || {}; var plugins = this.options.plugins || (this.options.plugins = {}); if (!plugins.doc_comment) plugins.doc_comment = true; if (this.options.useWorker) { this.server = new WorkerServer(this); } else { this.server = new tern.Server({ getFile: function(name, c) { return getFile(self, name, c); }, async: true, defs: this.options.defs || [], plugins: plugins }); } this.docs = Object.create(null); this.trackChange = function(doc, change) { trackChange(self, doc, change); }; this.cachedArgHints = null; this.activeArgHints = null; this.jumpStack = []; this.getHint = function(cm, c) { return hint(self, cm, c); }; this.getHint.async = true; }; CodeMirror.TernServer.prototype = { addDoc: function(name, doc) { var data = {doc: doc, name: name, changed: null}; this.server.addFile(name, docValue(this, data)); CodeMirror.on(doc, "change", this.trackChange); return this.docs[name] = data; }, delDoc: function(id) { var found = resolveDoc(this, id); if (!found) return; CodeMirror.off(found.doc, "change", this.trackChange); delete this.docs[found.name]; this.server.delFile(found.name); }, hideDoc: function(id) { closeArgHints(this); var found = resolveDoc(this, id); if (found && found.changed) sendDoc(this, found); }, complete: function(cm) { cm.showHint({hint: this.getHint}); }, showType: function(cm, pos, c) { showContextInfo(this, cm, pos, "type", c); }, showDocs: function(cm, pos, c) { showContextInfo(this, cm, pos, "documentation", c); }, updateArgHints: function(cm) { updateArgHints(this, cm); }, jumpToDef: function(cm) { jumpToDef(this, cm); }, jumpBack: function(cm) { jumpBack(this, cm); }, rename: function(cm) { rename(this, cm); }, selectName: function(cm) { selectName(this, cm); }, request: function (cm, query, c, pos) { var self = this; var doc = findDoc(this, cm.getDoc()); var request = buildRequest(this, doc, query, pos); this.server.request(request, function (error, data) { if (!error && self.options.responseFilter) data = self.options.responseFilter(doc, query, request, error, data); c(error, data); }); }, destroy: function () { if (this.worker) { this.worker.terminate(); this.worker = null; } } }; var Pos = CodeMirror.Pos; var cls = "CodeMirror-Tern-"; var bigDoc = 250; function getFile(ts, name, c) { var buf = ts.docs[name]; if (buf) c(docValue(ts, buf)); else if (ts.options.getFile) ts.options.getFile(name, c); else c(null); } function findDoc(ts, doc, name) { for (var n in ts.docs) { var cur = ts.docs[n]; if (cur.doc == doc) return cur; } if (!name) for (var i = 0;; ++i) { n = "[doc" + (i || "") + "]"; if (!ts.docs[n]) { name = n; break; } } return ts.addDoc(name, doc); } function resolveDoc(ts, id) { if (typeof id == "string") return ts.docs[id]; if (id instanceof CodeMirror) id = id.getDoc(); if (id instanceof CodeMirror.Doc) return findDoc(ts, id); } function trackChange(ts, doc, change) { var data = findDoc(ts, doc); var argHints = ts.cachedArgHints; if (argHints && argHints.doc == doc && cmpPos(argHints.start, change.to) <= 0) ts.cachedArgHints = null; var changed = data.changed; if (changed == null) data.changed = changed = {from: change.from.line, to: change.from.line}; var end = change.from.line + (change.text.length - 1); if (change.from.line < changed.to) changed.to = changed.to - (change.to.line - end); if (end >= changed.to) changed.to = end + 1; if (changed.from > change.from.line) changed.from = change.from.line; if (doc.lineCount() > bigDoc && change.to - changed.from > 100) setTimeout(function() { if (data.changed && data.changed.to - data.changed.from > 100) sendDoc(ts, data); }, 200); } function sendDoc(ts, doc) { ts.server.request({files: [{type: "full", name: doc.name, text: docValue(ts, doc)}]}, function(error) { if (error) window.console.error(error); else doc.changed = null; }); } // Completion function hint(ts, cm, c) { ts.request(cm, {type: "completions", types: true, docs: true, urls: true}, function(error, data) { if (error) return showError(ts, cm, error); var completions = [], after = ""; var from = data.start, to = data.end; if (cm.getRange(Pos(from.line, from.ch - 2), from) == "[\"" && cm.getRange(to, Pos(to.line, to.ch + 2)) != "\"]") after = "\"]"; for (var i = 0; i < data.completions.length; ++i) { var completion = data.completions[i], className = typeToIcon(completion.type); if (data.guess) className += " " + cls + "guess"; completions.push({text: completion.name + after, displayText: completion.name, className: className, data: completion}); } var obj = {from: from, to: to, list: completions}; var tooltip = null; CodeMirror.on(obj, "close", function() { remove(tooltip); }); CodeMirror.on(obj, "update", function() { remove(tooltip); }); CodeMirror.on(obj, "select", function(cur, node) { remove(tooltip); var content = ts.options.completionTip ? ts.options.completionTip(cur.data) : cur.data.doc; if (content) { tooltip = makeTooltip(node.parentNode.getBoundingClientRect().right + window.pageXOffset, node.getBoundingClientRect().top + window.pageYOffset, content); tooltip.className += " " + cls + "hint-doc"; } }); c(obj); }); } function typeToIcon(type) { var suffix; if (type == "?") suffix = "unknown"; else if (type == "number" || type == "string" || type == "bool") suffix = type; else if (/^fn\(/.test(type)) suffix = "fn"; else if (/^\[/.test(type)) suffix = "array"; else suffix = "object"; return cls + "completion " + cls + "completion-" + suffix; } // Type queries function showContextInfo(ts, cm, pos, queryName, c) { ts.request(cm, queryName, function(error, data) { if (error) return showError(ts, cm, error); if (ts.options.typeTip) { var tip = ts.options.typeTip(data); } else { var tip = elt("span", null, elt("strong", null, data.type || "not found")); if (data.doc) tip.appendChild(document.createTextNode(" — " + data.doc)); if (data.url) { tip.appendChild(document.createTextNode(" ")); var child = tip.appendChild(elt("a", null, "[docs]")); child.href = data.url; child.target = "_blank"; } } tempTooltip(cm, tip); if (c) c(); }, pos); } // Maintaining argument hints function updateArgHints(ts, cm) { closeArgHints(ts); if (cm.somethingSelected()) return; var state = cm.getTokenAt(cm.getCursor()).state; var inner = CodeMirror.innerMode(cm.getMode(), state); if (inner.mode.name != "javascript") return; var lex = inner.state.lexical; if (lex.info != "call") return; var ch, argPos = lex.pos || 0, tabSize = cm.getOption("tabSize"); for (var line = cm.getCursor().line, e = Math.max(0, line - 9), found = false; line >= e; --line) { var str = cm.getLine(line), extra = 0; for (var pos = 0;;) { var tab = str.indexOf("\t", pos); if (tab == -1) break; extra += tabSize - (tab + extra) % tabSize - 1; pos = tab + 1; } ch = lex.column - extra; if (str.charAt(ch) == "(") {found = true; break;} } if (!found) return; var start = Pos(line, ch); var cache = ts.cachedArgHints; if (cache && cache.doc == cm.getDoc() && cmpPos(start, cache.start) == 0) return showArgHints(ts, cm, argPos); ts.request(cm, {type: "type", preferFunction: true, end: start}, function(error, data) { if (error || !data.type || !(/^fn\(/).test(data.type)) return; ts.cachedArgHints = { start: pos, type: parseFnType(data.type), name: data.exprName || data.name || "fn", guess: data.guess, doc: cm.getDoc() }; showArgHints(ts, cm, argPos); }); } function showArgHints(ts, cm, pos) { closeArgHints(ts); var cache = ts.cachedArgHints, tp = cache.type; var tip = elt("span", cache.guess ? cls + "fhint-guess" : null, elt("span", cls + "fname", cache.name), "("); for (var i = 0; i < tp.args.length; ++i) { if (i) tip.appendChild(document.createTextNode(", ")); var arg = tp.args[i]; tip.appendChild(elt("span", cls + "farg" + (i == pos ? " " + cls + "farg-current" : ""), arg.name || "?")); if (arg.type != "?") { tip.appendChild(document.createTextNode(":\u00a0")); tip.appendChild(elt("span", cls + "type", arg.type)); } } tip.appendChild(document.createTextNode(tp.rettype ? ") ->\u00a0" : ")")); if (tp.rettype) tip.appendChild(elt("span", cls + "type", tp.rettype)); var place = cm.cursorCoords(null, "page"); ts.activeArgHints = makeTooltip(place.right + 1, place.bottom, tip); } function parseFnType(text) { var args = [], pos = 3; function skipMatching(upto) { var depth = 0, start = pos; for (;;) { var next = text.charAt(pos); if (upto.test(next) && !depth) return text.slice(start, pos); if (/[{\[\(]/.test(next)) ++depth; else if (/[}\]\)]/.test(next)) --depth; ++pos; } } // Parse arguments if (text.charAt(pos) != ")") for (;;) { var name = text.slice(pos).match(/^([^, \(\[\{]+): /); if (name) { pos += name[0].length; name = name[1]; } args.push({name: name, type: skipMatching(/[\),]/)}); if (text.charAt(pos) == ")") break; pos += 2; } var rettype = text.slice(pos).match(/^\) -> (.*)$/); return {args: args, rettype: rettype && rettype[1]}; } // Moving to the definition of something function jumpToDef(ts, cm) { function inner(varName) { var req = {type: "definition", variable: varName || null}; var doc = findDoc(ts, cm.getDoc()); ts.server.request(buildRequest(ts, doc, req), function(error, data) { if (error) return showError(ts, cm, error); if (!data.file && data.url) { window.open(data.url); return; } if (data.file) { var localDoc = ts.docs[data.file], found; if (localDoc && (found = findContext(localDoc.doc, data))) { ts.jumpStack.push({file: doc.name, start: cm.getCursor("from"), end: cm.getCursor("to")}); moveTo(ts, doc, localDoc, found.start, found.end); return; } } showError(ts, cm, "Could not find a definition."); }); } if (!atInterestingExpression(cm)) dialog(cm, "Jump to variable", function(name) { if (name) inner(name); }); else inner(); } function jumpBack(ts, cm) { var pos = ts.jumpStack.pop(), doc = pos && ts.docs[pos.file]; if (!doc) return; moveTo(ts, findDoc(ts, cm.getDoc()), doc, pos.start, pos.end); } function moveTo(ts, curDoc, doc, start, end) { doc.doc.setSelection(start, end); if (curDoc != doc && ts.options.switchToDoc) { closeArgHints(ts); ts.options.switchToDoc(doc.name, doc.doc); } } // The {line,ch} representation of positions makes this rather awkward. function findContext(doc, data) { var before = data.context.slice(0, data.contextOffset).split("\n"); var startLine = data.start.line - (before.length - 1); var start = Pos(startLine, (before.length == 1 ? data.start.ch : doc.getLine(startLine).length) - before[0].length); var text = doc.getLine(startLine).slice(start.ch); for (var cur = startLine + 1; cur < doc.lineCount() && text.length < data.context.length; ++cur) text += "\n" + doc.getLine(cur); if (text.slice(0, data.context.length) == data.context) return data; var cursor = doc.getSearchCursor(data.context, 0, false); var nearest, nearestDist = Infinity; while (cursor.findNext()) { var from = cursor.from(), dist = Math.abs(from.line - start.line) * 10000; if (!dist) dist = Math.abs(from.ch - start.ch); if (dist < nearestDist) { nearest = from; nearestDist = dist; } } if (!nearest) return null; if (before.length == 1) nearest.ch += before[0].length; else nearest = Pos(nearest.line + (before.length - 1), before[before.length - 1].length); if (data.start.line == data.end.line) var end = Pos(nearest.line, nearest.ch + (data.end.ch - data.start.ch)); else var end = Pos(nearest.line + (data.end.line - data.start.line), data.end.ch); return {start: nearest, end: end}; } function atInterestingExpression(cm) { var pos = cm.getCursor("end"), tok = cm.getTokenAt(pos); if (tok.start < pos.ch && (tok.type == "comment" || tok.type == "string")) return false; return /\w/.test(cm.getLine(pos.line).slice(Math.max(pos.ch - 1, 0), pos.ch + 1)); } // Variable renaming function rename(ts, cm) { var token = cm.getTokenAt(cm.getCursor()); if (!/\w/.test(token.string)) return showError(ts, cm, "Not at a variable"); dialog(cm, "New name for " + token.string, function(newName) { ts.request(cm, {type: "rename", newName: newName, fullDocs: true}, function(error, data) { if (error) return showError(ts, cm, error); applyChanges(ts, data.changes); }); }); } function selectName(ts, cm) { var name = findDoc(ts, cm.doc).name; ts.request(cm, {type: "refs"}, function(error, data) { if (error) return showError(ts, cm, error); var ranges = [], cur = 0; for (var i = 0; i < data.refs.length; i++) { var ref = data.refs[i]; if (ref.file == name) { ranges.push({anchor: ref.start, head: ref.end}); if (cmpPos(cur, ref.start) >= 0 && cmpPos(cur, ref.end) <= 0) cur = ranges.length - 1; } } cm.setSelections(ranges, cur); }); } var nextChangeOrig = 0; function applyChanges(ts, changes) { var perFile = Object.create(null); for (var i = 0; i < changes.length; ++i) { var ch = changes[i]; (perFile[ch.file] || (perFile[ch.file] = [])).push(ch); } for (var file in perFile) { var known = ts.docs[file], chs = perFile[file];; if (!known) continue; chs.sort(function(a, b) { return cmpPos(b.start, a.start); }); var origin = "*rename" + (++nextChangeOrig); for (var i = 0; i < chs.length; ++i) { var ch = chs[i]; known.doc.replaceRange(ch.text, ch.start, ch.end, origin); } } } // Generic request-building helper function buildRequest(ts, doc, query, pos) { var files = [], offsetLines = 0, allowFragments = !query.fullDocs; if (!allowFragments) delete query.fullDocs; if (typeof query == "string") query = {type: query}; query.lineCharPositions = true; if (query.end == null) { query.end = pos || doc.doc.getCursor("end"); if (doc.doc.somethingSelected()) query.start = doc.doc.getCursor("start"); } var startPos = query.start || query.end; if (doc.changed) { if (doc.doc.lineCount() > bigDoc && allowFragments !== false && doc.changed.to - doc.changed.from < 100 && doc.changed.from <= startPos.line && doc.changed.to > query.end.line) { files.push(getFragmentAround(doc, startPos, query.end)); query.file = "#0"; var offsetLines = files[0].offsetLines; if (query.start != null) query.start = Pos(query.start.line - -offsetLines, query.start.ch); query.end = Pos(query.end.line - offsetLines, query.end.ch); } else { files.push({type: "full", name: doc.name, text: docValue(ts, doc)}); query.file = doc.name; doc.changed = null; } } else { query.file = doc.name; } for (var name in ts.docs) { var cur = ts.docs[name]; if (cur.changed && cur != doc) { files.push({type: "full", name: cur.name, text: docValue(ts, cur)}); cur.changed = null; } } return {query: query, files: files}; } function getFragmentAround(data, start, end) { var doc = data.doc; var minIndent = null, minLine = null, endLine, tabSize = 4; for (var p = start.line - 1, min = Math.max(0, p - 50); p >= min; --p) { var line = doc.getLine(p), fn = line.search(/\bfunction\b/); if (fn < 0) continue; var indent = CodeMirror.countColumn(line, null, tabSize); if (minIndent != null && minIndent <= indent) continue; minIndent = indent; minLine = p; } if (minLine == null) minLine = min; var max = Math.min(doc.lastLine(), end.line + 20); if (minIndent == null || minIndent == CodeMirror.countColumn(doc.getLine(start.line), null, tabSize)) endLine = max; else for (endLine = end.line + 1; endLine < max; ++endLine) { var indent = CodeMirror.countColumn(doc.getLine(endLine), null, tabSize); if (indent <= minIndent) break; } var from = Pos(minLine, 0); return {type: "part", name: data.name, offsetLines: from.line, text: doc.getRange(from, Pos(endLine, 0))}; } // Generic utilities var cmpPos = CodeMirror.cmpPos; function elt(tagname, cls /*, ... elts*/) { var e = document.createElement(tagname); if (cls) e.className = cls; for (var i = 2; i < arguments.length; ++i) { var elt = arguments[i]; if (typeof elt == "string") elt = document.createTextNode(elt); e.appendChild(elt); } return e; } function dialog(cm, text, f) { if (cm.openDialog) cm.openDialog(text + ": ", f); else f(prompt(text, "")); } // Tooltips function tempTooltip(cm, content) { if (cm.state.ternTooltip) remove(cm.state.ternTooltip); var where = cm.cursorCoords(); var tip = cm.state.ternTooltip = makeTooltip(where.right + 1, where.bottom, content); function maybeClear() { old = true; if (!mouseOnTip) clear(); } function clear() { cm.state.ternTooltip = null; if (!tip.parentNode) return; cm.off("cursorActivity", clear); cm.off('blur', clear); cm.off('scroll', clear); fadeOut(tip); } var mouseOnTip = false, old = false; CodeMirror.on(tip, "mousemove", function() { mouseOnTip = true; }); CodeMirror.on(tip, "mouseout", function(e) { if (!CodeMirror.contains(tip, e.relatedTarget || e.toElement)) { if (old) clear(); else mouseOnTip = false; } }); setTimeout(maybeClear, 1700); cm.on("cursorActivity", clear); cm.on('blur', clear); cm.on('scroll', clear); } function makeTooltip(x, y, content) { var node = elt("div", cls + "tooltip", content); node.style.left = x + "px"; node.style.top = y + "px"; document.body.appendChild(node); return node; } function remove(node) { var p = node && node.parentNode; if (p) p.removeChild(node); } function fadeOut(tooltip) { tooltip.style.opacity = "0"; setTimeout(function() { remove(tooltip); }, 1100); } function showError(ts, cm, msg) { if (ts.options.showError) ts.options.showError(cm, msg); else tempTooltip(cm, String(msg)); } function closeArgHints(ts) { if (ts.activeArgHints) { remove(ts.activeArgHints); ts.activeArgHints = null; } } function docValue(ts, doc) { var val = doc.doc.getValue(); if (ts.options.fileFilter) val = ts.options.fileFilter(val, doc.name, doc.doc); return val; } // Worker wrapper function WorkerServer(ts) { var worker = ts.worker = new Worker(ts.options.workerScript); worker.postMessage({type: "init", defs: ts.options.defs, plugins: ts.options.plugins, scripts: ts.options.workerDeps}); var msgId = 0, pending = {}; function send(data, c) { if (c) { data.id = ++msgId; pending[msgId] = c; } worker.postMessage(data); } worker.onmessage = function(e) { var data = e.data; if (data.type == "getFile") { getFile(ts, data.name, function(err, text) { send({type: "getFile", err: String(err), text: text, id: data.id}); }); } else if (data.type == "debug") { window.console.log(data.message); } else if (data.id && pending[data.id]) { pending[data.id](data.err, data.body); delete pending[data.id]; } }; worker.onerror = function(e) { for (var id in pending) pending[id](e); pending = {}; }; this.addFile = function(name, text) { send({type: "add", name: name, text: text}); }; this.delFile = function(name) { send({type: "del", name: name}); }; this.request = function(body, c) { send({type: "req", body: body}, c); }; } }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/tern/worker.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE // declare global: tern, server var server; this.onmessage = function(e) { var data = e.data; switch (data.type) { case "init": return startServer(data.defs, data.plugins, data.scripts); case "add": return server.addFile(data.name, data.text); case "del": return server.delFile(data.name); case "req": return server.request(data.body, function(err, reqData) { postMessage({id: data.id, body: reqData, err: err && String(err)}); }); case "getFile": var c = pending[data.id]; delete pending[data.id]; return c(data.err, data.text); default: throw new Error("Unknown message type: " + data.type); } }; var nextId = 0, pending = {}; function getFile(file, c) { postMessage({type: "getFile", name: file, id: ++nextId}); pending[nextId] = c; } function startServer(defs, plugins, scripts) { if (scripts) importScripts.apply(null, scripts); server = new tern.Server({ getFile: getFile, async: true, defs: defs, plugins: plugins }); } var console = { log: function(v) { postMessage({type: "debug", message: v}); } }; ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/addon/wrap/hardwrap.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; var Pos = CodeMirror.Pos; function findParagraph(cm, pos, options) { var startRE = options.paragraphStart || cm.getHelper(pos, "paragraphStart"); for (var start = pos.line, first = cm.firstLine(); start > first; --start) { var line = cm.getLine(start); if (startRE && startRE.test(line)) break; if (!/\S/.test(line)) { ++start; break; } } var endRE = options.paragraphEnd || cm.getHelper(pos, "paragraphEnd"); for (var end = pos.line + 1, last = cm.lastLine(); end <= last; ++end) { var line = cm.getLine(end); if (endRE && endRE.test(line)) { ++end; break; } if (!/\S/.test(line)) break; } return {from: start, to: end}; } function findBreakPoint(text, column, wrapOn, killTrailingSpace) { for (var at = column; at > 0; --at) if (wrapOn.test(text.slice(at - 1, at + 1))) break; if (at == 0) at = column; var endOfText = at; if (killTrailingSpace) while (text.charAt(endOfText - 1) == " ") --endOfText; return {from: endOfText, to: at}; } function wrapRange(cm, from, to, options) { from = cm.clipPos(from); to = cm.clipPos(to); var column = options.column || 80; var wrapOn = options.wrapOn || /\s\S|-[^\.\d]/; var killTrailing = options.killTrailingSpace !== false; var changes = [], curLine = "", curNo = from.line; var lines = cm.getRange(from, to, false); if (!lines.length) return null; var leadingSpace = lines[0].match(/^[ \t]*/)[0]; for (var i = 0; i < lines.length; ++i) { var text = lines[i], oldLen = curLine.length, spaceInserted = 0; if (curLine && text && !wrapOn.test(curLine.charAt(curLine.length - 1) + text.charAt(0))) { curLine += " "; spaceInserted = 1; } var spaceTrimmed = ""; if (i) { spaceTrimmed = text.match(/^\s*/)[0]; text = text.slice(spaceTrimmed.length); } curLine += text; if (i) { var firstBreak = curLine.length > column && leadingSpace == spaceTrimmed && findBreakPoint(curLine, column, wrapOn, killTrailing); // If this isn't broken, or is broken at a different point, remove old break if (!firstBreak || firstBreak.from != oldLen || firstBreak.to != oldLen + spaceInserted) { changes.push({text: [spaceInserted ? " " : ""], from: Pos(curNo, oldLen), to: Pos(curNo + 1, spaceTrimmed.length)}); } else { curLine = leadingSpace + text; ++curNo; } } while (curLine.length > column) { var bp = findBreakPoint(curLine, column, wrapOn, killTrailing); changes.push({text: ["", leadingSpace], from: Pos(curNo, bp.from), to: Pos(curNo, bp.to)}); curLine = leadingSpace + curLine.slice(bp.to); ++curNo; } } if (changes.length) cm.operation(function() { for (var i = 0; i < changes.length; ++i) { var change = changes[i]; cm.replaceRange(change.text, change.from, change.to); } }); return changes.length ? {from: changes[0].from, to: CodeMirror.changeEnd(changes[changes.length - 1])} : null; } CodeMirror.defineExtension("wrapParagraph", function(pos, options) { options = options || {}; if (!pos) pos = this.getCursor(); var para = findParagraph(this, pos, options); return wrapRange(this, Pos(para.from, 0), Pos(para.to - 1), options); }); CodeMirror.commands.wrapLines = function(cm) { cm.operation(function() { var ranges = cm.listSelections(), at = cm.lastLine() + 1; for (var i = ranges.length - 1; i >= 0; i--) { var range = ranges[i], span; if (range.empty()) { var para = findParagraph(cm, range.head, {}); span = {from: Pos(para.from, 0), to: Pos(para.to - 1)}; } else { span = {from: range.from(), to: range.to()}; } if (span.to.line >= at) continue; at = span.from.line; wrapRange(cm, span.from, span.to, {}); } }); }; CodeMirror.defineExtension("wrapRange", function(from, to, options) { return wrapRange(this, from, to, options || {}); }); CodeMirror.defineExtension("wrapParagraphsInRange", function(from, to, options) { options = options || {}; var cm = this, paras = []; for (var line = from.line; line <= to.line;) { var para = findParagraph(cm, Pos(line, 0), options); paras.push(para); line = para.to; } var madeChange = false; if (paras.length) cm.operation(function() { for (var i = paras.length - 1; i >= 0; --i) madeChange = madeChange || wrapRange(cm, Pos(paras[i].from, 0), Pos(paras[i].to - 1), options); }); return madeChange; }); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/bower.json ================================================ { "name": "codemirror", "version":"5.0.0", "main": ["lib/codemirror.js", "lib/codemirror.css"], "ignore": [ "**/.*", "node_modules", "components", "bin", "demo", "doc", "test", "index.html", "package.json" ] } ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/lib/codemirror.css ================================================ /*! // CodeMirror v5.0, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE // This is CodeMirror (http://codemirror.net), a code editor // implemented in JavaScript on top of the browser's DOM. // // You can find some technical background for some of the code below // at http://marijnhaverbeke.nl/blog/#cm-internals . */ /* BASICS */ .CodeMirror { /* Set height, width, borders, and global font properties here */ font-family: monospace; height: 300px; color: black; } /* PADDING */ .CodeMirror-lines { padding: 4px 0; /* Vertical padding around content */ } .CodeMirror pre { padding: 0 4px; /* Horizontal padding of content */ } .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { background-color: white; /* The little square between H and V scrollbars */ } /* GUTTER */ .CodeMirror-gutters { border-right: 1px solid #ddd; background-color: #f7f7f7; white-space: nowrap; } .CodeMirror-linenumbers {} .CodeMirror-linenumber { padding: 0 3px 0 5px; min-width: 20px; text-align: right; color: #999; -moz-box-sizing: content-box; box-sizing: content-box; } .CodeMirror-guttermarker { color: black; } .CodeMirror-guttermarker-subtle { color: #999; } /* CURSOR */ .CodeMirror div.CodeMirror-cursor { border-left: 1px solid black; } /* Shown when moving in bi-directional text */ .CodeMirror div.CodeMirror-secondarycursor { border-left: 1px solid silver; } .CodeMirror.cm-fat-cursor div.CodeMirror-cursor { width: auto; border: 0; background: #7e7; } .CodeMirror.cm-fat-cursor div.CodeMirror-cursors { z-index: 1; } .cm-animate-fat-cursor { width: auto; border: 0; -webkit-animation: blink 1.06s steps(1) infinite; -moz-animation: blink 1.06s steps(1) infinite; animation: blink 1.06s steps(1) infinite; } @-moz-keyframes blink { 0% { background: #7e7; } 50% { background: none; } 100% { background: #7e7; } } @-webkit-keyframes blink { 0% { background: #7e7; } 50% { background: none; } 100% { background: #7e7; } } @keyframes blink { 0% { background: #7e7; } 50% { background: none; } 100% { background: #7e7; } } /* Can style cursor different in overwrite (non-insert) mode */ div.CodeMirror-overwrite div.CodeMirror-cursor {} .cm-tab { display: inline-block; text-decoration: inherit; } .CodeMirror-ruler { border-left: 1px solid #ccc; position: absolute; } /* DEFAULT THEME */ .cm-s-default .cm-keyword {color: #708;} .cm-s-default .cm-atom {color: #219;} .cm-s-default .cm-number {color: #164;} .cm-s-default .cm-def {color: #00f;} .cm-s-default .cm-variable, .cm-s-default .cm-punctuation, .cm-s-default .cm-property, .cm-s-default .cm-operator {} .cm-s-default .cm-variable-2 {color: #05a;} .cm-s-default .cm-variable-3 {color: #085;} .cm-s-default .cm-comment {color: #a50;} .cm-s-default .cm-string {color: #a11;} .cm-s-default .cm-string-2 {color: #f50;} .cm-s-default .cm-meta {color: #555;} .cm-s-default .cm-qualifier {color: #555;} .cm-s-default .cm-builtin {color: #30a;} .cm-s-default .cm-bracket {color: #997;} .cm-s-default .cm-tag {color: #170;} .cm-s-default .cm-attribute {color: #00c;} .cm-s-default .cm-header {color: blue;} .cm-s-default .cm-quote {color: #090;} .cm-s-default .cm-hr {color: #999;} .cm-s-default .cm-link {color: #00c;} .cm-negative {color: #d44;} .cm-positive {color: #292;} .cm-header, .cm-strong {font-weight: bold;} .cm-em {font-style: italic;} .cm-link {text-decoration: underline;} .cm-strikethrough {text-decoration: line-through;} .cm-s-default .cm-error {color: #f00;} .cm-invalidchar {color: #f00;} /* Default styles for common addons */ div.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;} div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;} .CodeMirror-matchingtag { background: rgba(255, 150, 0, .3); } .CodeMirror-activeline-background {background: #e8f2ff;} /* STOP */ /* The rest of this file contains styles related to the mechanics of the editor. You probably shouldn't touch them. */ .CodeMirror { position: relative; overflow: hidden; background: white; } .CodeMirror-scroll { overflow: scroll !important; /* Things will break if this is overridden */ /* 30px is the magic margin used to hide the element's real scrollbars */ /* See overflow: hidden in .CodeMirror */ margin-bottom: -30px; margin-right: -30px; padding-bottom: 30px; height: 100%; outline: none; /* Prevent dragging from highlighting the element */ position: relative; -moz-box-sizing: content-box; box-sizing: content-box; } .CodeMirror-sizer { position: relative; border-right: 30px solid transparent; -moz-box-sizing: content-box; box-sizing: content-box; } /* The fake, visible scrollbars. Used to force redraw during scrolling before actuall scrolling happens, thus preventing shaking and flickering artifacts. */ .CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { position: absolute; z-index: 6; display: none; } .CodeMirror-vscrollbar { right: 0; top: 0; overflow-x: hidden; overflow-y: scroll; } .CodeMirror-hscrollbar { bottom: 0; left: 0; overflow-y: hidden; overflow-x: scroll; } .CodeMirror-scrollbar-filler { right: 0; bottom: 0; } .CodeMirror-gutter-filler { left: 0; bottom: 0; } .CodeMirror-gutters { position: absolute; left: 0; top: 0; z-index: 3; } .CodeMirror-gutter { white-space: normal; height: 100%; -moz-box-sizing: content-box; box-sizing: content-box; display: inline-block; margin-bottom: -30px; /* Hack to make IE7 behave */ *zoom:1; *display:inline; } .CodeMirror-gutter-wrapper { position: absolute; z-index: 4; height: 100%; } .CodeMirror-gutter-elt { position: absolute; cursor: default; z-index: 4; } .CodeMirror-gutter-wrapper { -webkit-user-select: none; -moz-user-select: none; user-select: none; } .CodeMirror-lines { cursor: text; min-height: 1px; /* prevents collapsing before first draw */ } .CodeMirror pre { /* Reset some styles that the rest of the page might have set */ -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; border-width: 0; background: transparent; font-family: inherit; font-size: inherit; margin: 0; white-space: pre; word-wrap: normal; line-height: inherit; color: inherit; z-index: 2; position: relative; overflow: visible; -webkit-tap-highlight-color: transparent; } .CodeMirror-wrap pre { word-wrap: break-word; white-space: pre-wrap; word-break: normal; } .CodeMirror-linebackground { position: absolute; left: 0; right: 0; top: 0; bottom: 0; z-index: 0; } .CodeMirror-linewidget { position: relative; z-index: 2; overflow: auto; } .CodeMirror-widget {} .CodeMirror-code { outline: none; } .CodeMirror-measure { position: absolute; width: 100%; height: 0; overflow: hidden; visibility: hidden; } .CodeMirror-measure pre { position: static; } .CodeMirror div.CodeMirror-cursor { position: absolute; border-right: none; width: 0; } div.CodeMirror-cursors { visibility: hidden; position: relative; z-index: 3; } .CodeMirror-focused div.CodeMirror-cursors { visibility: visible; } .CodeMirror-selected { background: #d9d9d9; } .CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; } .CodeMirror-crosshair { cursor: crosshair; } .CodeMirror ::selection { background: #d7d4f0; } .CodeMirror ::-moz-selection { background: #d7d4f0; } .cm-searching { background: #ffa; background: rgba(255, 255, 0, .4); } /* IE7 hack to prevent it from returning funny offsetTops on the spans */ .CodeMirror span { *vertical-align: text-bottom; } /* Used to force a border model for a node */ .cm-force-border { padding-right: .1px; } @media print { /* Hide the cursor when printing */ .CodeMirror div.CodeMirror-cursors { visibility: hidden; } } /* See issue #2901 */ .cm-tab-wrap-hack:after { content: ''; } /* Help users use markselection to safely style text background */ span.CodeMirror-selectedtext { background: none; } ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/lib/codemirror.js ================================================ // CodeMirror v5.0, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE // This is CodeMirror (http://codemirror.net), a code editor // implemented in JavaScript on top of the browser's DOM. // // You can find some technical background for some of the code below // at http://marijnhaverbeke.nl/blog/#cm-internals . (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS module.exports = mod(); else if (typeof define == "function" && define.amd) // AMD return define([], mod); else // Plain browser env this.CodeMirror = mod(); })(function() { "use strict"; // BROWSER SNIFFING // Kludges for bugs and behavior differences that can't be feature // detected are enabled based on userAgent etc sniffing. var gecko = /gecko\/\d/i.test(navigator.userAgent); var ie_upto10 = /MSIE \d/.test(navigator.userAgent); var ie_11up = /Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent); var ie = ie_upto10 || ie_11up; var ie_version = ie && (ie_upto10 ? document.documentMode || 6 : ie_11up[1]); var webkit = /WebKit\//.test(navigator.userAgent); var qtwebkit = webkit && /Qt\/\d+\.\d+/.test(navigator.userAgent); var chrome = /Chrome\//.test(navigator.userAgent); var presto = /Opera\//.test(navigator.userAgent); var safari = /Apple Computer/.test(navigator.vendor); var mac_geMountainLion = /Mac OS X 1\d\D([8-9]|\d\d)\D/.test(navigator.userAgent); var phantom = /PhantomJS/.test(navigator.userAgent); var ios = /AppleWebKit/.test(navigator.userAgent) && /Mobile\/\w+/.test(navigator.userAgent); // This is woefully incomplete. Suggestions for alternative methods welcome. var mobile = ios || /Android|webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(navigator.userAgent); var mac = ios || /Mac/.test(navigator.platform); var windows = /win/i.test(navigator.platform); var presto_version = presto && navigator.userAgent.match(/Version\/(\d*\.\d*)/); if (presto_version) presto_version = Number(presto_version[1]); if (presto_version && presto_version >= 15) { presto = false; webkit = true; } // Some browsers use the wrong event properties to signal cmd/ctrl on OS X var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11)); var captureRightClick = gecko || (ie && ie_version >= 9); // Optimize some code when these features are not used. var sawReadOnlySpans = false, sawCollapsedSpans = false; // EDITOR CONSTRUCTOR // A CodeMirror instance represents an editor. This is the object // that user code is usually dealing with. function CodeMirror(place, options) { if (!(this instanceof CodeMirror)) return new CodeMirror(place, options); this.options = options = options ? copyObj(options) : {}; // Determine effective options based on given values and defaults. copyObj(defaults, options, false); setGuttersForLineNumbers(options); var doc = options.value; if (typeof doc == "string") doc = new Doc(doc, options.mode); this.doc = doc; var input = new CodeMirror.inputStyles[options.inputStyle](this); var display = this.display = new Display(place, doc, input); display.wrapper.CodeMirror = this; updateGutters(this); themeChanged(this); if (options.lineWrapping) this.display.wrapper.className += " CodeMirror-wrap"; if (options.autofocus && !mobile) display.input.focus(); initScrollbars(this); this.state = { keyMaps: [], // stores maps added by addKeyMap overlays: [], // highlighting overlays, as added by addOverlay modeGen: 0, // bumped when mode/overlay changes, used to invalidate highlighting info overwrite: false, focused: false, suppressEdits: false, // used to disable editing during key handlers when in readOnly mode pasteIncoming: false, cutIncoming: false, // help recognize paste/cut edits in input.poll draggingText: false, highlight: new Delayed(), // stores highlight worker timeout keySeq: null // Unfinished key sequence }; var cm = this; // Override magic textarea content restore that IE sometimes does // on our hidden textarea on reload if (ie && ie_version < 11) setTimeout(function() { cm.display.input.reset(true); }, 20); registerEventHandlers(this); ensureGlobalHandlers(); startOperation(this); this.curOp.forceUpdate = true; attachDoc(this, doc); if ((options.autofocus && !mobile) || cm.hasFocus()) setTimeout(bind(onFocus, this), 20); else onBlur(this); for (var opt in optionHandlers) if (optionHandlers.hasOwnProperty(opt)) optionHandlers[opt](this, options[opt], Init); maybeUpdateLineNumberWidth(this); if (options.finishInit) options.finishInit(this); for (var i = 0; i < initHooks.length; ++i) initHooks[i](this); endOperation(this); // Suppress optimizelegibility in Webkit, since it breaks text // measuring on line wrapping boundaries. if (webkit && options.lineWrapping && getComputedStyle(display.lineDiv).textRendering == "optimizelegibility") display.lineDiv.style.textRendering = "auto"; } // DISPLAY CONSTRUCTOR // The display handles the DOM integration, both for input reading // and content drawing. It holds references to DOM nodes and // display-related state. function Display(place, doc, input) { var d = this; this.input = input; // Covers bottom-right square when both scrollbars are present. d.scrollbarFiller = elt("div", null, "CodeMirror-scrollbar-filler"); d.scrollbarFiller.setAttribute("cm-not-content", "true"); // Covers bottom of gutter when coverGutterNextToScrollbar is on // and h scrollbar is present. d.gutterFiller = elt("div", null, "CodeMirror-gutter-filler"); d.gutterFiller.setAttribute("cm-not-content", "true"); // Will contain the actual code, positioned to cover the viewport. d.lineDiv = elt("div", null, "CodeMirror-code"); // Elements are added to these to represent selection and cursors. d.selectionDiv = elt("div", null, null, "position: relative; z-index: 1"); d.cursorDiv = elt("div", null, "CodeMirror-cursors"); // A visibility: hidden element used to find the size of things. d.measure = elt("div", null, "CodeMirror-measure"); // When lines outside of the viewport are measured, they are drawn in this. d.lineMeasure = elt("div", null, "CodeMirror-measure"); // Wraps everything that needs to exist inside the vertically-padded coordinate system d.lineSpace = elt("div", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv], null, "position: relative; outline: none"); // Moved around its parent to cover visible view. d.mover = elt("div", [elt("div", [d.lineSpace], "CodeMirror-lines")], null, "position: relative"); // Set to the height of the document, allowing scrolling. d.sizer = elt("div", [d.mover], "CodeMirror-sizer"); d.sizerWidth = null; // Behavior of elts with overflow: auto and padding is // inconsistent across browsers. This is used to ensure the // scrollable area is big enough. d.heightForcer = elt("div", null, null, "position: absolute; height: " + scrollerGap + "px; width: 1px;"); // Will contain the gutters, if any. d.gutters = elt("div", null, "CodeMirror-gutters"); d.lineGutter = null; // Actual scrollable element. d.scroller = elt("div", [d.sizer, d.heightForcer, d.gutters], "CodeMirror-scroll"); d.scroller.setAttribute("tabIndex", "-1"); // The element in which the editor lives. d.wrapper = elt("div", [d.scrollbarFiller, d.gutterFiller, d.scroller], "CodeMirror"); // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported) if (ie && ie_version < 8) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0; } if (!webkit && !(gecko && mobile)) d.scroller.draggable = true; if (place) { if (place.appendChild) place.appendChild(d.wrapper); else place(d.wrapper); } // Current rendered range (may be bigger than the view window). d.viewFrom = d.viewTo = doc.first; d.reportedViewFrom = d.reportedViewTo = doc.first; // Information about the rendered lines. d.view = []; d.renderedView = null; // Holds info about a single rendered line when it was rendered // for measurement, while not in view. d.externalMeasured = null; // Empty space (in pixels) above the view d.viewOffset = 0; d.lastWrapHeight = d.lastWrapWidth = 0; d.updateLineNumbers = null; d.nativeBarWidth = d.barHeight = d.barWidth = 0; d.scrollbarsClipped = false; // Used to only resize the line number gutter when necessary (when // the amount of lines crosses a boundary that makes its width change) d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null; // Set to true when a non-horizontal-scrolling line widget is // added. As an optimization, line widget aligning is skipped when // this is false. d.alignWidgets = false; d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null; // Tracks the maximum line length so that the horizontal scrollbar // can be kept static when scrolling. d.maxLine = null; d.maxLineLength = 0; d.maxLineChanged = false; // Used for measuring wheel scrolling granularity d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null; // True when shift is held down. d.shift = false; // Used to track whether anything happened since the context menu // was opened. d.selForContextMenu = null; d.activeTouch = null; input.init(d); } // STATE UPDATES // Used to get the editor into a consistent state again when options change. function loadMode(cm) { cm.doc.mode = CodeMirror.getMode(cm.options, cm.doc.modeOption); resetModeState(cm); } function resetModeState(cm) { cm.doc.iter(function(line) { if (line.stateAfter) line.stateAfter = null; if (line.styles) line.styles = null; }); cm.doc.frontier = cm.doc.first; startWorker(cm, 100); cm.state.modeGen++; if (cm.curOp) regChange(cm); } function wrappingChanged(cm) { if (cm.options.lineWrapping) { addClass(cm.display.wrapper, "CodeMirror-wrap"); cm.display.sizer.style.minWidth = ""; cm.display.sizerWidth = null; } else { rmClass(cm.display.wrapper, "CodeMirror-wrap"); findMaxLine(cm); } estimateLineHeights(cm); regChange(cm); clearCaches(cm); setTimeout(function(){updateScrollbars(cm);}, 100); } // Returns a function that estimates the height of a line, to use as // first approximation until the line becomes visible (and is thus // properly measurable). function estimateHeight(cm) { var th = textHeight(cm.display), wrapping = cm.options.lineWrapping; var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3); return function(line) { if (lineIsHidden(cm.doc, line)) return 0; var widgetsHeight = 0; if (line.widgets) for (var i = 0; i < line.widgets.length; i++) { if (line.widgets[i].height) widgetsHeight += line.widgets[i].height; } if (wrapping) return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th; else return widgetsHeight + th; }; } function estimateLineHeights(cm) { var doc = cm.doc, est = estimateHeight(cm); doc.iter(function(line) { var estHeight = est(line); if (estHeight != line.height) updateLineHeight(line, estHeight); }); } function themeChanged(cm) { cm.display.wrapper.className = cm.display.wrapper.className.replace(/\s*cm-s-\S+/g, "") + cm.options.theme.replace(/(^|\s)\s*/g, " cm-s-"); clearCaches(cm); } function guttersChanged(cm) { updateGutters(cm); regChange(cm); setTimeout(function(){alignHorizontally(cm);}, 20); } // Rebuild the gutter elements, ensure the margin to the left of the // code matches their width. function updateGutters(cm) { var gutters = cm.display.gutters, specs = cm.options.gutters; removeChildren(gutters); for (var i = 0; i < specs.length; ++i) { var gutterClass = specs[i]; var gElt = gutters.appendChild(elt("div", null, "CodeMirror-gutter " + gutterClass)); if (gutterClass == "CodeMirror-linenumbers") { cm.display.lineGutter = gElt; gElt.style.width = (cm.display.lineNumWidth || 1) + "px"; } } gutters.style.display = i ? "" : "none"; updateGutterSpace(cm); } function updateGutterSpace(cm) { var width = cm.display.gutters.offsetWidth; cm.display.sizer.style.marginLeft = width + "px"; } // Compute the character length of a line, taking into account // collapsed ranges (see markText) that might hide parts, and join // other lines onto it. function lineLength(line) { if (line.height == 0) return 0; var len = line.text.length, merged, cur = line; while (merged = collapsedSpanAtStart(cur)) { var found = merged.find(0, true); cur = found.from.line; len += found.from.ch - found.to.ch; } cur = line; while (merged = collapsedSpanAtEnd(cur)) { var found = merged.find(0, true); len -= cur.text.length - found.from.ch; cur = found.to.line; len += cur.text.length - found.to.ch; } return len; } // Find the longest line in the document. function findMaxLine(cm) { var d = cm.display, doc = cm.doc; d.maxLine = getLine(doc, doc.first); d.maxLineLength = lineLength(d.maxLine); d.maxLineChanged = true; doc.iter(function(line) { var len = lineLength(line); if (len > d.maxLineLength) { d.maxLineLength = len; d.maxLine = line; } }); } // Make sure the gutters options contains the element // "CodeMirror-linenumbers" when the lineNumbers option is true. function setGuttersForLineNumbers(options) { var found = indexOf(options.gutters, "CodeMirror-linenumbers"); if (found == -1 && options.lineNumbers) { options.gutters = options.gutters.concat(["CodeMirror-linenumbers"]); } else if (found > -1 && !options.lineNumbers) { options.gutters = options.gutters.slice(0); options.gutters.splice(found, 1); } } // SCROLLBARS // Prepare DOM reads needed to update the scrollbars. Done in one // shot to minimize update/measure roundtrips. function measureForScrollbars(cm) { var d = cm.display, gutterW = d.gutters.offsetWidth; var docH = Math.round(cm.doc.height + paddingVert(cm.display)); return { clientHeight: d.scroller.clientHeight, viewHeight: d.wrapper.clientHeight, scrollWidth: d.scroller.scrollWidth, clientWidth: d.scroller.clientWidth, viewWidth: d.wrapper.clientWidth, barLeft: cm.options.fixedGutter ? gutterW : 0, docHeight: docH, scrollHeight: docH + scrollGap(cm) + d.barHeight, nativeBarWidth: d.nativeBarWidth, gutterWidth: gutterW }; } function NativeScrollbars(place, scroll, cm) { this.cm = cm; var vert = this.vert = elt("div", [elt("div", null, null, "min-width: 1px")], "CodeMirror-vscrollbar"); var horiz = this.horiz = elt("div", [elt("div", null, null, "height: 100%; min-height: 1px")], "CodeMirror-hscrollbar"); place(vert); place(horiz); on(vert, "scroll", function() { if (vert.clientHeight) scroll(vert.scrollTop, "vertical"); }); on(horiz, "scroll", function() { if (horiz.clientWidth) scroll(horiz.scrollLeft, "horizontal"); }); this.checkedOverlay = false; // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8). if (ie && ie_version < 8) this.horiz.style.minHeight = this.vert.style.minWidth = "18px"; } NativeScrollbars.prototype = copyObj({ update: function(measure) { var needsH = measure.scrollWidth > measure.clientWidth + 1; var needsV = measure.scrollHeight > measure.clientHeight + 1; var sWidth = measure.nativeBarWidth; if (needsV) { this.vert.style.display = "block"; this.vert.style.bottom = needsH ? sWidth + "px" : "0"; var totalHeight = measure.viewHeight - (needsH ? sWidth : 0); // A bug in IE8 can cause this value to be negative, so guard it. this.vert.firstChild.style.height = Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + "px"; } else { this.vert.style.display = ""; this.vert.firstChild.style.height = "0"; } if (needsH) { this.horiz.style.display = "block"; this.horiz.style.right = needsV ? sWidth + "px" : "0"; this.horiz.style.left = measure.barLeft + "px"; var totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0); this.horiz.firstChild.style.width = (measure.scrollWidth - measure.clientWidth + totalWidth) + "px"; } else { this.horiz.style.display = ""; this.horiz.firstChild.style.width = "0"; } if (!this.checkedOverlay && measure.clientHeight > 0) { if (sWidth == 0) this.overlayHack(); this.checkedOverlay = true; } return {right: needsV ? sWidth : 0, bottom: needsH ? sWidth : 0}; }, setScrollLeft: function(pos) { if (this.horiz.scrollLeft != pos) this.horiz.scrollLeft = pos; }, setScrollTop: function(pos) { if (this.vert.scrollTop != pos) this.vert.scrollTop = pos; }, overlayHack: function() { var w = mac && !mac_geMountainLion ? "12px" : "18px"; this.horiz.style.minHeight = this.vert.style.minWidth = w; var self = this; var barMouseDown = function(e) { if (e_target(e) != self.vert && e_target(e) != self.horiz) operation(self.cm, onMouseDown)(e); }; on(this.vert, "mousedown", barMouseDown); on(this.horiz, "mousedown", barMouseDown); }, clear: function() { var parent = this.horiz.parentNode; parent.removeChild(this.horiz); parent.removeChild(this.vert); } }, NativeScrollbars.prototype); function NullScrollbars() {} NullScrollbars.prototype = copyObj({ update: function() { return {bottom: 0, right: 0}; }, setScrollLeft: function() {}, setScrollTop: function() {}, clear: function() {} }, NullScrollbars.prototype); CodeMirror.scrollbarModel = {"native": NativeScrollbars, "null": NullScrollbars}; function initScrollbars(cm) { if (cm.display.scrollbars) { cm.display.scrollbars.clear(); if (cm.display.scrollbars.addClass) rmClass(cm.display.wrapper, cm.display.scrollbars.addClass); } cm.display.scrollbars = new CodeMirror.scrollbarModel[cm.options.scrollbarStyle](function(node) { cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller); // Prevent clicks in the scrollbars from killing focus on(node, "mousedown", function() { if (cm.state.focused) setTimeout(function() { cm.display.input.focus(); }, 0); }); node.setAttribute("cm-not-content", "true"); }, function(pos, axis) { if (axis == "horizontal") setScrollLeft(cm, pos); else setScrollTop(cm, pos); }, cm); if (cm.display.scrollbars.addClass) addClass(cm.display.wrapper, cm.display.scrollbars.addClass); } function updateScrollbars(cm, measure) { if (!measure) measure = measureForScrollbars(cm); var startWidth = cm.display.barWidth, startHeight = cm.display.barHeight; updateScrollbarsInner(cm, measure); for (var i = 0; i < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i++) { if (startWidth != cm.display.barWidth && cm.options.lineWrapping) updateHeightsInViewport(cm); updateScrollbarsInner(cm, measureForScrollbars(cm)); startWidth = cm.display.barWidth; startHeight = cm.display.barHeight; } } // Re-synchronize the fake scrollbars with the actual size of the // content. function updateScrollbarsInner(cm, measure) { var d = cm.display; var sizes = d.scrollbars.update(measure); d.sizer.style.paddingRight = (d.barWidth = sizes.right) + "px"; d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + "px"; if (sizes.right && sizes.bottom) { d.scrollbarFiller.style.display = "block"; d.scrollbarFiller.style.height = sizes.bottom + "px"; d.scrollbarFiller.style.width = sizes.right + "px"; } else d.scrollbarFiller.style.display = ""; if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) { d.gutterFiller.style.display = "block"; d.gutterFiller.style.height = sizes.bottom + "px"; d.gutterFiller.style.width = measure.gutterWidth + "px"; } else d.gutterFiller.style.display = ""; } // Compute the lines that are visible in a given viewport (defaults // the the current scroll position). viewport may contain top, // height, and ensure (see op.scrollToPos) properties. function visibleLines(display, doc, viewport) { var top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop; top = Math.floor(top - paddingTop(display)); var bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight; var from = lineAtHeight(doc, top), to = lineAtHeight(doc, bottom); // Ensure is a {from: {line, ch}, to: {line, ch}} object, and // forces those lines into the viewport (if possible). if (viewport && viewport.ensure) { var ensureFrom = viewport.ensure.from.line, ensureTo = viewport.ensure.to.line; if (ensureFrom < from) { from = ensureFrom; to = lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight); } else if (Math.min(ensureTo, doc.lastLine()) >= to) { from = lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight); to = ensureTo; } } return {from: from, to: Math.max(to, from + 1)}; } // LINE NUMBERS // Re-align line numbers and gutter marks to compensate for // horizontal scrolling. function alignHorizontally(cm) { var display = cm.display, view = display.view; if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) return; var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft; var gutterW = display.gutters.offsetWidth, left = comp + "px"; for (var i = 0; i < view.length; i++) if (!view[i].hidden) { if (cm.options.fixedGutter && view[i].gutter) view[i].gutter.style.left = left; var align = view[i].alignable; if (align) for (var j = 0; j < align.length; j++) align[j].style.left = left; } if (cm.options.fixedGutter) display.gutters.style.left = (comp + gutterW) + "px"; } // Used to ensure that the line number gutter is still the right // size for the current document size. Returns true when an update // is needed. function maybeUpdateLineNumberWidth(cm) { if (!cm.options.lineNumbers) return false; var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display; if (last.length != display.lineNumChars) { var test = display.measure.appendChild(elt("div", [elt("div", last)], "CodeMirror-linenumber CodeMirror-gutter-elt")); var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW; display.lineGutter.style.width = ""; display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding); display.lineNumWidth = display.lineNumInnerWidth + padding; display.lineNumChars = display.lineNumInnerWidth ? last.length : -1; display.lineGutter.style.width = display.lineNumWidth + "px"; updateGutterSpace(cm); return true; } return false; } function lineNumberFor(options, i) { return String(options.lineNumberFormatter(i + options.firstLineNumber)); } // Computes display.scroller.scrollLeft + display.gutters.offsetWidth, // but using getBoundingClientRect to get a sub-pixel-accurate // result. function compensateForHScroll(display) { return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left; } // DISPLAY DRAWING function DisplayUpdate(cm, viewport, force) { var display = cm.display; this.viewport = viewport; // Store some values that we'll need later (but don't want to force a relayout for) this.visible = visibleLines(display, cm.doc, viewport); this.editorIsHidden = !display.wrapper.offsetWidth; this.wrapperHeight = display.wrapper.clientHeight; this.wrapperWidth = display.wrapper.clientWidth; this.oldDisplayWidth = displayWidth(cm); this.force = force; this.dims = getDimensions(cm); this.events = []; } DisplayUpdate.prototype.signal = function(emitter, type) { if (hasHandler(emitter, type)) this.events.push(arguments); }; DisplayUpdate.prototype.finish = function() { for (var i = 0; i < this.events.length; i++) signal.apply(null, this.events[i]); }; function maybeClipScrollbars(cm) { var display = cm.display; if (!display.scrollbarsClipped && display.scroller.offsetWidth) { display.nativeBarWidth = display.scroller.offsetWidth - display.scroller.clientWidth; display.heightForcer.style.height = scrollGap(cm) + "px"; display.sizer.style.marginBottom = -display.nativeBarWidth + "px"; display.sizer.style.borderRightWidth = scrollGap(cm) + "px"; display.scrollbarsClipped = true; } } // Does the actual updating of the line display. Bails out // (returning false) when there is nothing to be done and forced is // false. function updateDisplayIfNeeded(cm, update) { var display = cm.display, doc = cm.doc; if (update.editorIsHidden) { resetView(cm); return false; } // Bail out if the visible area is already rendered and nothing changed. if (!update.force && update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo && (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) && display.renderedView == display.view && countDirtyView(cm) == 0) return false; if (maybeUpdateLineNumberWidth(cm)) { resetView(cm); update.dims = getDimensions(cm); } // Compute a suitable new viewport (from & to) var end = doc.first + doc.size; var from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first); var to = Math.min(end, update.visible.to + cm.options.viewportMargin); if (display.viewFrom < from && from - display.viewFrom < 20) from = Math.max(doc.first, display.viewFrom); if (display.viewTo > to && display.viewTo - to < 20) to = Math.min(end, display.viewTo); if (sawCollapsedSpans) { from = visualLineNo(cm.doc, from); to = visualLineEndNo(cm.doc, to); } var different = from != display.viewFrom || to != display.viewTo || display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth; adjustView(cm, from, to); display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom)); // Position the mover div to align with the current scroll position cm.display.mover.style.top = display.viewOffset + "px"; var toUpdate = countDirtyView(cm); if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view && (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo)) return false; // For big changes, we hide the enclosing element during the // update, since that speeds up the operations on most browsers. var focused = activeElt(); if (toUpdate > 4) display.lineDiv.style.display = "none"; patchDisplay(cm, display.updateLineNumbers, update.dims); if (toUpdate > 4) display.lineDiv.style.display = ""; display.renderedView = display.view; // There might have been a widget with a focused element that got // hidden or updated, if so re-focus it. if (focused && activeElt() != focused && focused.offsetHeight) focused.focus(); // Prevent selection and cursors from interfering with the scroll // width and height. removeChildren(display.cursorDiv); removeChildren(display.selectionDiv); display.gutters.style.height = 0; if (different) { display.lastWrapHeight = update.wrapperHeight; display.lastWrapWidth = update.wrapperWidth; startWorker(cm, 400); } display.updateLineNumbers = null; return true; } function postUpdateDisplay(cm, update) { var force = update.force, viewport = update.viewport; for (var first = true;; first = false) { if (first && cm.options.lineWrapping && update.oldDisplayWidth != displayWidth(cm)) { force = true; } else { force = false; // Clip forced viewport to actual scrollable area. if (viewport && viewport.top != null) viewport = {top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top)}; // Updated line heights might result in the drawn area not // actually covering the viewport. Keep looping until it does. update.visible = visibleLines(cm.display, cm.doc, viewport); if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo) break; } if (!updateDisplayIfNeeded(cm, update)) break; updateHeightsInViewport(cm); var barMeasure = measureForScrollbars(cm); updateSelection(cm); setDocumentHeight(cm, barMeasure); updateScrollbars(cm, barMeasure); } update.signal(cm, "update", cm); if (cm.display.viewFrom != cm.display.reportedViewFrom || cm.display.viewTo != cm.display.reportedViewTo) { update.signal(cm, "viewportChange", cm, cm.display.viewFrom, cm.display.viewTo); cm.display.reportedViewFrom = cm.display.viewFrom; cm.display.reportedViewTo = cm.display.viewTo; } } function updateDisplaySimple(cm, viewport) { var update = new DisplayUpdate(cm, viewport); if (updateDisplayIfNeeded(cm, update)) { updateHeightsInViewport(cm); postUpdateDisplay(cm, update); var barMeasure = measureForScrollbars(cm); updateSelection(cm); setDocumentHeight(cm, barMeasure); updateScrollbars(cm, barMeasure); update.finish(); } } function setDocumentHeight(cm, measure) { cm.display.sizer.style.minHeight = measure.docHeight + "px"; var total = measure.docHeight + cm.display.barHeight; cm.display.heightForcer.style.top = total + "px"; cm.display.gutters.style.height = Math.max(total + scrollGap(cm), measure.clientHeight) + "px"; } // Read the actual heights of the rendered lines, and update their // stored heights to match. function updateHeightsInViewport(cm) { var display = cm.display; var prevBottom = display.lineDiv.offsetTop; for (var i = 0; i < display.view.length; i++) { var cur = display.view[i], height; if (cur.hidden) continue; if (ie && ie_version < 8) { var bot = cur.node.offsetTop + cur.node.offsetHeight; height = bot - prevBottom; prevBottom = bot; } else { var box = cur.node.getBoundingClientRect(); height = box.bottom - box.top; } var diff = cur.line.height - height; if (height < 2) height = textHeight(display); if (diff > .001 || diff < -.001) { updateLineHeight(cur.line, height); updateWidgetHeight(cur.line); if (cur.rest) for (var j = 0; j < cur.rest.length; j++) updateWidgetHeight(cur.rest[j]); } } } // Read and store the height of line widgets associated with the // given line. function updateWidgetHeight(line) { if (line.widgets) for (var i = 0; i < line.widgets.length; ++i) line.widgets[i].height = line.widgets[i].node.offsetHeight; } // Do a bulk-read of the DOM positions and sizes needed to draw the // view, so that we don't interleave reading and writing to the DOM. function getDimensions(cm) { var d = cm.display, left = {}, width = {}; var gutterLeft = d.gutters.clientLeft; for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) { left[cm.options.gutters[i]] = n.offsetLeft + n.clientLeft + gutterLeft; width[cm.options.gutters[i]] = n.clientWidth; } return {fixedPos: compensateForHScroll(d), gutterTotalWidth: d.gutters.offsetWidth, gutterLeft: left, gutterWidth: width, wrapperWidth: d.wrapper.clientWidth}; } // Sync the actual display DOM structure with display.view, removing // nodes for lines that are no longer in view, and creating the ones // that are not there yet, and updating the ones that are out of // date. function patchDisplay(cm, updateNumbersFrom, dims) { var display = cm.display, lineNumbers = cm.options.lineNumbers; var container = display.lineDiv, cur = container.firstChild; function rm(node) { var next = node.nextSibling; // Works around a throw-scroll bug in OS X Webkit if (webkit && mac && cm.display.currentWheelTarget == node) node.style.display = "none"; else node.parentNode.removeChild(node); return next; } var view = display.view, lineN = display.viewFrom; // Loop over the elements in the view, syncing cur (the DOM nodes // in display.lineDiv) with the view as we go. for (var i = 0; i < view.length; i++) { var lineView = view[i]; if (lineView.hidden) { } else if (!lineView.node || lineView.node.parentNode != container) { // Not drawn yet var node = buildLineElement(cm, lineView, lineN, dims); container.insertBefore(node, cur); } else { // Already drawn while (cur != lineView.node) cur = rm(cur); var updateNumber = lineNumbers && updateNumbersFrom != null && updateNumbersFrom <= lineN && lineView.lineNumber; if (lineView.changes) { if (indexOf(lineView.changes, "gutter") > -1) updateNumber = false; updateLineForChanges(cm, lineView, lineN, dims); } if (updateNumber) { removeChildren(lineView.lineNumber); lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN))); } cur = lineView.node.nextSibling; } lineN += lineView.size; } while (cur) cur = rm(cur); } // When an aspect of a line changes, a string is added to // lineView.changes. This updates the relevant part of the line's // DOM structure. function updateLineForChanges(cm, lineView, lineN, dims) { for (var j = 0; j < lineView.changes.length; j++) { var type = lineView.changes[j]; if (type == "text") updateLineText(cm, lineView); else if (type == "gutter") updateLineGutter(cm, lineView, lineN, dims); else if (type == "class") updateLineClasses(lineView); else if (type == "widget") updateLineWidgets(cm, lineView, dims); } lineView.changes = null; } // Lines with gutter elements, widgets or a background class need to // be wrapped, and have the extra elements added to the wrapper div function ensureLineWrapped(lineView) { if (lineView.node == lineView.text) { lineView.node = elt("div", null, null, "position: relative"); if (lineView.text.parentNode) lineView.text.parentNode.replaceChild(lineView.node, lineView.text); lineView.node.appendChild(lineView.text); if (ie && ie_version < 8) lineView.node.style.zIndex = 2; } return lineView.node; } function updateLineBackground(lineView) { var cls = lineView.bgClass ? lineView.bgClass + " " + (lineView.line.bgClass || "") : lineView.line.bgClass; if (cls) cls += " CodeMirror-linebackground"; if (lineView.background) { if (cls) lineView.background.className = cls; else { lineView.background.parentNode.removeChild(lineView.background); lineView.background = null; } } else if (cls) { var wrap = ensureLineWrapped(lineView); lineView.background = wrap.insertBefore(elt("div", null, cls), wrap.firstChild); } } // Wrapper around buildLineContent which will reuse the structure // in display.externalMeasured when possible. function getLineContent(cm, lineView) { var ext = cm.display.externalMeasured; if (ext && ext.line == lineView.line) { cm.display.externalMeasured = null; lineView.measure = ext.measure; return ext.built; } return buildLineContent(cm, lineView); } // Redraw the line's text. Interacts with the background and text // classes because the mode may output tokens that influence these // classes. function updateLineText(cm, lineView) { var cls = lineView.text.className; var built = getLineContent(cm, lineView); if (lineView.text == lineView.node) lineView.node = built.pre; lineView.text.parentNode.replaceChild(built.pre, lineView.text); lineView.text = built.pre; if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) { lineView.bgClass = built.bgClass; lineView.textClass = built.textClass; updateLineClasses(lineView); } else if (cls) { lineView.text.className = cls; } } function updateLineClasses(lineView) { updateLineBackground(lineView); if (lineView.line.wrapClass) ensureLineWrapped(lineView).className = lineView.line.wrapClass; else if (lineView.node != lineView.text) lineView.node.className = ""; var textClass = lineView.textClass ? lineView.textClass + " " + (lineView.line.textClass || "") : lineView.line.textClass; lineView.text.className = textClass || ""; } function updateLineGutter(cm, lineView, lineN, dims) { if (lineView.gutter) { lineView.node.removeChild(lineView.gutter); lineView.gutter = null; } var markers = lineView.line.gutterMarkers; if (cm.options.lineNumbers || markers) { var wrap = ensureLineWrapped(lineView); var gutterWrap = lineView.gutter = elt("div", null, "CodeMirror-gutter-wrapper", "left: " + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px; width: " + dims.gutterTotalWidth + "px"); cm.display.input.setUneditable(gutterWrap); wrap.insertBefore(gutterWrap, lineView.text); if (lineView.line.gutterClass) gutterWrap.className += " " + lineView.line.gutterClass; if (cm.options.lineNumbers && (!markers || !markers["CodeMirror-linenumbers"])) lineView.lineNumber = gutterWrap.appendChild( elt("div", lineNumberFor(cm.options, lineN), "CodeMirror-linenumber CodeMirror-gutter-elt", "left: " + dims.gutterLeft["CodeMirror-linenumbers"] + "px; width: " + cm.display.lineNumInnerWidth + "px")); if (markers) for (var k = 0; k < cm.options.gutters.length; ++k) { var id = cm.options.gutters[k], found = markers.hasOwnProperty(id) && markers[id]; if (found) gutterWrap.appendChild(elt("div", [found], "CodeMirror-gutter-elt", "left: " + dims.gutterLeft[id] + "px; width: " + dims.gutterWidth[id] + "px")); } } } function updateLineWidgets(cm, lineView, dims) { if (lineView.alignable) lineView.alignable = null; for (var node = lineView.node.firstChild, next; node; node = next) { var next = node.nextSibling; if (node.className == "CodeMirror-linewidget") lineView.node.removeChild(node); } insertLineWidgets(cm, lineView, dims); } // Build a line's DOM representation from scratch function buildLineElement(cm, lineView, lineN, dims) { var built = getLineContent(cm, lineView); lineView.text = lineView.node = built.pre; if (built.bgClass) lineView.bgClass = built.bgClass; if (built.textClass) lineView.textClass = built.textClass; updateLineClasses(lineView); updateLineGutter(cm, lineView, lineN, dims); insertLineWidgets(cm, lineView, dims); return lineView.node; } // A lineView may contain multiple logical lines (when merged by // collapsed spans). The widgets for all of them need to be drawn. function insertLineWidgets(cm, lineView, dims) { insertLineWidgetsFor(cm, lineView.line, lineView, dims, true); if (lineView.rest) for (var i = 0; i < lineView.rest.length; i++) insertLineWidgetsFor(cm, lineView.rest[i], lineView, dims, false); } function insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) { if (!line.widgets) return; var wrap = ensureLineWrapped(lineView); for (var i = 0, ws = line.widgets; i < ws.length; ++i) { var widget = ws[i], node = elt("div", [widget.node], "CodeMirror-linewidget"); if (!widget.handleMouseEvents) node.setAttribute("cm-ignore-events", "true"); positionLineWidget(widget, node, lineView, dims); cm.display.input.setUneditable(node); if (allowAbove && widget.above) wrap.insertBefore(node, lineView.gutter || lineView.text); else wrap.appendChild(node); signalLater(widget, "redraw"); } } function positionLineWidget(widget, node, lineView, dims) { if (widget.noHScroll) { (lineView.alignable || (lineView.alignable = [])).push(node); var width = dims.wrapperWidth; node.style.left = dims.fixedPos + "px"; if (!widget.coverGutter) { width -= dims.gutterTotalWidth; node.style.paddingLeft = dims.gutterTotalWidth + "px"; } node.style.width = width + "px"; } if (widget.coverGutter) { node.style.zIndex = 5; node.style.position = "relative"; if (!widget.noHScroll) node.style.marginLeft = -dims.gutterTotalWidth + "px"; } } // POSITION OBJECT // A Pos instance represents a position within the text. var Pos = CodeMirror.Pos = function(line, ch) { if (!(this instanceof Pos)) return new Pos(line, ch); this.line = line; this.ch = ch; }; // Compare two positions, return 0 if they are the same, a negative // number when a is less, and a positive number otherwise. var cmp = CodeMirror.cmpPos = function(a, b) { return a.line - b.line || a.ch - b.ch; }; function copyPos(x) {return Pos(x.line, x.ch);} function maxPos(a, b) { return cmp(a, b) < 0 ? b : a; } function minPos(a, b) { return cmp(a, b) < 0 ? a : b; } // INPUT HANDLING function ensureFocus(cm) { if (!cm.state.focused) { cm.display.input.focus(); onFocus(cm); } } function isReadOnly(cm) { return cm.options.readOnly || cm.doc.cantEdit; } // This will be set to an array of strings when copying, so that, // when pasting, we know what kind of selections the copied text // was made out of. var lastCopied = null; function applyTextInput(cm, inserted, deleted, sel) { var doc = cm.doc; cm.display.shift = false; if (!sel) sel = doc.sel; var textLines = splitLines(inserted), multiPaste = null; // When pasing N lines into N selections, insert one line per selection if (cm.state.pasteIncoming && sel.ranges.length > 1) { if (lastCopied && lastCopied.join("\n") == inserted) multiPaste = sel.ranges.length % lastCopied.length == 0 && map(lastCopied, splitLines); else if (textLines.length == sel.ranges.length) multiPaste = map(textLines, function(l) { return [l]; }); } // Normal behavior is to insert the new text into every selection for (var i = sel.ranges.length - 1; i >= 0; i--) { var range = sel.ranges[i]; var from = range.from(), to = range.to(); if (range.empty()) { if (deleted && deleted > 0) // Handle deletion from = Pos(from.line, from.ch - deleted); else if (cm.state.overwrite && !cm.state.pasteIncoming) // Handle overwrite to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length)); } var updateInput = cm.curOp.updateInput; var changeEvent = {from: from, to: to, text: multiPaste ? multiPaste[i % multiPaste.length] : textLines, origin: cm.state.pasteIncoming ? "paste" : cm.state.cutIncoming ? "cut" : "+input"}; makeChange(cm.doc, changeEvent); signalLater(cm, "inputRead", cm, changeEvent); // When an 'electric' character is inserted, immediately trigger a reindent if (inserted && !cm.state.pasteIncoming && cm.options.electricChars && cm.options.smartIndent && range.head.ch < 100 && (!i || sel.ranges[i - 1].head.line != range.head.line)) { var mode = cm.getModeAt(range.head); var end = changeEnd(changeEvent); if (mode.electricChars) { for (var j = 0; j < mode.electricChars.length; j++) if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) { indentLine(cm, end.line, "smart"); break; } } else if (mode.electricInput) { if (mode.electricInput.test(getLine(doc, end.line).text.slice(0, end.ch))) indentLine(cm, end.line, "smart"); } } } ensureCursorVisible(cm); cm.curOp.updateInput = updateInput; cm.curOp.typing = true; cm.state.pasteIncoming = cm.state.cutIncoming = false; } function copyableRanges(cm) { var text = [], ranges = []; for (var i = 0; i < cm.doc.sel.ranges.length; i++) { var line = cm.doc.sel.ranges[i].head.line; var lineRange = {anchor: Pos(line, 0), head: Pos(line + 1, 0)}; ranges.push(lineRange); text.push(cm.getRange(lineRange.anchor, lineRange.head)); } return {text: text, ranges: ranges}; } function disableBrowserMagic(field) { field.setAttribute("autocorrect", "off"); field.setAttribute("autocapitalize", "off"); field.setAttribute("spellcheck", "false"); } // TEXTAREA INPUT STYLE function TextareaInput(cm) { this.cm = cm; // See input.poll and input.reset this.prevInput = ""; // Flag that indicates whether we expect input to appear real soon // now (after some event like 'keypress' or 'input') and are // polling intensively. this.pollingFast = false; // Self-resetting timeout for the poller this.polling = new Delayed(); // Tracks when input.reset has punted to just putting a short // string into the textarea instead of the full selection. this.inaccurateSelection = false; // Used to work around IE issue with selection being forgotten when focus moves away from textarea this.hasSelection = false; }; function hiddenTextarea() { var te = elt("textarea", null, null, "position: absolute; padding: 0; width: 1px; height: 1em; outline: none"); var div = elt("div", [te], null, "overflow: hidden; position: relative; width: 3px; height: 0px;"); // The textarea is kept positioned near the cursor to prevent the // fact that it'll be scrolled into view on input from scrolling // our fake cursor out of view. On webkit, when wrap=off, paste is // very slow. So make the area wide instead. if (webkit) te.style.width = "1000px"; else te.setAttribute("wrap", "off"); // If border: 0; -- iOS fails to open keyboard (issue #1287) if (ios) te.style.border = "1px solid black"; disableBrowserMagic(te); return div; } TextareaInput.prototype = copyObj({ init: function(display) { var input = this, cm = this.cm; // Wraps and hides input textarea var div = this.wrapper = hiddenTextarea(); // The semihidden textarea that is focused when the editor is // focused, and receives input. var te = this.textarea = div.firstChild; display.wrapper.insertBefore(div, display.wrapper.firstChild); // Needed to hide big blue blinking cursor on Mobile Safari (doesn't seem to work in iOS 8 anymore) if (ios) te.style.width = "0px"; on(te, "input", function() { if (ie && ie_version >= 9 && input.hasSelection) input.hasSelection = null; input.poll(); }); on(te, "paste", function() { // Workaround for webkit bug https://bugs.webkit.org/show_bug.cgi?id=90206 // Add a char to the end of textarea before paste occur so that // selection doesn't span to the end of textarea. if (webkit && !cm.state.fakedLastChar && !(new Date - cm.state.lastMiddleDown < 200)) { var start = te.selectionStart, end = te.selectionEnd; te.value += "$"; // The selection end needs to be set before the start, otherwise there // can be an intermediate non-empty selection between the two, which // can override the middle-click paste buffer on linux and cause the // wrong thing to get pasted. te.selectionEnd = end; te.selectionStart = start; cm.state.fakedLastChar = true; } cm.state.pasteIncoming = true; input.fastPoll(); }); function prepareCopyCut(e) { if (cm.somethingSelected()) { lastCopied = cm.getSelections(); if (input.inaccurateSelection) { input.prevInput = ""; input.inaccurateSelection = false; te.value = lastCopied.join("\n"); selectInput(te); } } else { var ranges = copyableRanges(cm); lastCopied = ranges.text; if (e.type == "cut") { cm.setSelections(ranges.ranges, null, sel_dontScroll); } else { input.prevInput = ""; te.value = ranges.text.join("\n"); selectInput(te); } } if (e.type == "cut") cm.state.cutIncoming = true; } on(te, "cut", prepareCopyCut); on(te, "copy", prepareCopyCut); on(display.scroller, "paste", function(e) { if (eventInWidget(display, e)) return; cm.state.pasteIncoming = true; input.focus(); }); // Prevent normal selection in the editor (we handle our own) on(display.lineSpace, "selectstart", function(e) { if (!eventInWidget(display, e)) e_preventDefault(e); }); }, prepareSelection: function() { // Redraw the selection and/or cursor var cm = this.cm, display = cm.display, doc = cm.doc; var result = prepareSelection(cm); // Move the hidden textarea near the cursor to prevent scrolling artifacts if (cm.options.moveInputWithCursor) { var headPos = cursorCoords(cm, doc.sel.primary().head, "div"); var wrapOff = display.wrapper.getBoundingClientRect(), lineOff = display.lineDiv.getBoundingClientRect(); result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10, headPos.top + lineOff.top - wrapOff.top)); result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10, headPos.left + lineOff.left - wrapOff.left)); } return result; }, showSelection: function(drawn) { var cm = this.cm, display = cm.display; removeChildrenAndAdd(display.cursorDiv, drawn.cursors); removeChildrenAndAdd(display.selectionDiv, drawn.selection); if (drawn.teTop != null) { this.wrapper.style.top = drawn.teTop + "px"; this.wrapper.style.left = drawn.teLeft + "px"; } }, // Reset the input to correspond to the selection (or to be empty, // when not typing and nothing is selected) reset: function(typing) { if (this.contextMenuPending) return; var minimal, selected, cm = this.cm, doc = cm.doc; if (cm.somethingSelected()) { this.prevInput = ""; var range = doc.sel.primary(); minimal = hasCopyEvent && (range.to().line - range.from().line > 100 || (selected = cm.getSelection()).length > 1000); var content = minimal ? "-" : selected || cm.getSelection(); this.textarea.value = content; if (cm.state.focused) selectInput(this.textarea); if (ie && ie_version >= 9) this.hasSelection = content; } else if (!typing) { this.prevInput = this.textarea.value = ""; if (ie && ie_version >= 9) this.hasSelection = null; } this.inaccurateSelection = minimal; }, getField: function() { return this.textarea; }, supportsTouch: function() { return false; }, focus: function() { if (this.cm.options.readOnly != "nocursor" && (!mobile || activeElt() != this.textarea)) { try { this.textarea.focus(); } catch (e) {} // IE8 will throw if the textarea is display: none or not in DOM } }, blur: function() { this.textarea.blur(); }, resetPosition: function() { this.wrapper.style.top = this.wrapper.style.left = 0; }, receivedFocus: function() { this.slowPoll(); }, // Poll for input changes, using the normal rate of polling. This // runs as long as the editor is focused. slowPoll: function() { var input = this; if (input.pollingFast) return; input.polling.set(this.cm.options.pollInterval, function() { input.poll(); if (input.cm.state.focused) input.slowPoll(); }); }, // When an event has just come in that is likely to add or change // something in the input textarea, we poll faster, to ensure that // the change appears on the screen quickly. fastPoll: function() { var missed = false, input = this; input.pollingFast = true; function p() { var changed = input.poll(); if (!changed && !missed) {missed = true; input.polling.set(60, p);} else {input.pollingFast = false; input.slowPoll();} } input.polling.set(20, p); }, // Read input from the textarea, and update the document to match. // When something is selected, it is present in the textarea, and // selected (unless it is huge, in which case a placeholder is // used). When nothing is selected, the cursor sits after previously // seen text (can be empty), which is stored in prevInput (we must // not reset the textarea when typing, because that breaks IME). poll: function() { var cm = this.cm, input = this.textarea, prevInput = this.prevInput; // Since this is called a *lot*, try to bail out as cheaply as // possible when it is clear that nothing happened. hasSelection // will be the case when there is a lot of text in the textarea, // in which case reading its value would be expensive. if (!cm.state.focused || (hasSelection(input) && !prevInput) || isReadOnly(cm) || cm.options.disableInput || cm.state.keySeq) return false; // See paste handler for more on the fakedLastChar kludge if (cm.state.pasteIncoming && cm.state.fakedLastChar) { input.value = input.value.substring(0, input.value.length - 1); cm.state.fakedLastChar = false; } var text = input.value; // If nothing changed, bail. if (text == prevInput && !cm.somethingSelected()) return false; // Work around nonsensical selection resetting in IE9/10, and // inexplicable appearance of private area unicode characters on // some key combos in Mac (#2689). if (ie && ie_version >= 9 && this.hasSelection === text || mac && /[\uf700-\uf7ff]/.test(text)) { cm.display.input.reset(); return false; } if (text.charCodeAt(0) == 0x200b && cm.doc.sel == cm.display.selForContextMenu && !prevInput) prevInput = "\u200b"; // Find the part of the input that is actually new var same = 0, l = Math.min(prevInput.length, text.length); while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) ++same; var self = this; runInOp(cm, function() { applyTextInput(cm, text.slice(same), prevInput.length - same); // Don't leave long text in the textarea, since it makes further polling slow if (text.length > 1000 || text.indexOf("\n") > -1) input.value = self.prevInput = ""; else self.prevInput = text; }); return true; }, ensurePolled: function() { if (this.pollingFast && this.poll()) this.pollingFast = false; }, onKeyPress: function() { if (ie && ie_version >= 9) this.hasSelection = null; this.fastPoll(); }, onContextMenu: function(e) { var input = this, cm = input.cm, display = cm.display, te = input.textarea; var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop; if (!pos || presto) return; // Opera is difficult. // Reset the current text selection only if the click is done outside of the selection // and 'resetSelectionOnContextMenu' option is true. var reset = cm.options.resetSelectionOnContextMenu; if (reset && cm.doc.sel.contains(pos) == -1) operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll); var oldCSS = te.style.cssText; input.wrapper.style.position = "absolute"; te.style.cssText = "position: fixed; width: 30px; height: 30px; top: " + (e.clientY - 5) + "px; left: " + (e.clientX - 5) + "px; z-index: 1000; background: " + (ie ? "rgba(255, 255, 255, .05)" : "transparent") + "; outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);"; if (webkit) var oldScrollY = window.scrollY; // Work around Chrome issue (#2712) display.input.focus(); if (webkit) window.scrollTo(null, oldScrollY); display.input.reset(); // Adds "Select all" to context menu in FF if (!cm.somethingSelected()) te.value = input.prevInput = " "; input.contextMenuPending = true; display.selForContextMenu = cm.doc.sel; clearTimeout(display.detectingSelectAll); // Select-all will be greyed out if there's nothing to select, so // this adds a zero-width space so that we can later check whether // it got selected. function prepareSelectAllHack() { if (te.selectionStart != null) { var selected = cm.somethingSelected(); var extval = te.value = "\u200b" + (selected ? te.value : ""); input.prevInput = selected ? "" : "\u200b"; te.selectionStart = 1; te.selectionEnd = extval.length; // Re-set this, in case some other handler touched the // selection in the meantime. display.selForContextMenu = cm.doc.sel; } } function rehide() { input.contextMenuPending = false; input.wrapper.style.position = "relative"; te.style.cssText = oldCSS; if (ie && ie_version < 9) display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos); // Try to detect the user choosing select-all if (te.selectionStart != null) { if (!ie || (ie && ie_version < 9)) prepareSelectAllHack(); var i = 0, poll = function() { if (display.selForContextMenu == cm.doc.sel && te.selectionStart == 0) operation(cm, commands.selectAll)(cm); else if (i++ < 10) display.detectingSelectAll = setTimeout(poll, 500); else display.input.reset(); }; display.detectingSelectAll = setTimeout(poll, 200); } } if (ie && ie_version >= 9) prepareSelectAllHack(); if (captureRightClick) { e_stop(e); var mouseup = function() { off(window, "mouseup", mouseup); setTimeout(rehide, 20); }; on(window, "mouseup", mouseup); } else { setTimeout(rehide, 50); } }, setUneditable: nothing, needsContentAttribute: false }, TextareaInput.prototype); // CONTENTEDITABLE INPUT STYLE function ContentEditableInput(cm) { this.cm = cm; this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null; this.polling = new Delayed(); } ContentEditableInput.prototype = copyObj({ init: function(display) { var input = this, cm = input.cm; var div = input.div = display.lineDiv; div.contentEditable = "true"; disableBrowserMagic(div); on(div, "paste", function(e) { var pasted = e.clipboardData && e.clipboardData.getData("text/plain"); if (pasted) { e.preventDefault(); cm.replaceSelection(pasted, null, "paste"); } }); on(div, "compositionstart", function(e) { var data = e.data; input.composing = {sel: cm.doc.sel, data: data, startData: data}; if (!data) return; var prim = cm.doc.sel.primary(); var line = cm.getLine(prim.head.line); var found = line.indexOf(data, Math.max(0, prim.head.ch - data.length)); if (found > -1 && found <= prim.head.ch) input.composing.sel = simpleSelection(Pos(prim.head.line, found), Pos(prim.head.line, found + data.length)); }); on(div, "compositionupdate", function(e) { input.composing.data = e.data; }); on(div, "compositionend", function(e) { var ours = input.composing; if (!ours) return; if (e.data != ours.startData && !/\u200b/.test(e.data)) ours.data = e.data; // Need a small delay to prevent other code (input event, // selection polling) from doing damage when fired right after // compositionend. setTimeout(function() { if (!ours.handled) input.applyComposition(ours); if (input.composing == ours) input.composing = null; }, 50); }); on(div, "touchstart", function() { input.forceCompositionEnd(); }); on(div, "input", function() { if (input.composing) return; if (!input.pollContent()) runInOp(input.cm, function() {regChange(cm);}); }); function onCopyCut(e) { if (cm.somethingSelected()) { lastCopied = cm.getSelections(); if (e.type == "cut") cm.replaceSelection("", null, "cut"); } else { var ranges = copyableRanges(cm); lastCopied = ranges.text; if (e.type == "cut") { cm.operation(function() { cm.setSelections(ranges.ranges, 0, sel_dontScroll); cm.replaceSelection("", null, "cut"); }); } } // iOS exposes the clipboard API, but seems to discard content inserted into it if (e.clipboardData && !ios) { e.preventDefault(); e.clipboardData.clearData(); e.clipboardData.setData("text/plain", lastCopied.join("\n")); } else { // Old-fashioned briefly-focus-a-textarea hack var kludge = hiddenTextarea(), te = kludge.firstChild; cm.display.lineSpace.insertBefore(kludge, cm.display.lineSpace.firstChild); te.value = lastCopied.join("\n"); var hadFocus = document.activeElement; selectInput(te); setTimeout(function() { cm.display.lineSpace.removeChild(kludge); hadFocus.focus(); }, 50); } } on(div, "copy", onCopyCut); on(div, "cut", onCopyCut); }, prepareSelection: function() { var result = prepareSelection(this.cm, false); result.focus = this.cm.state.focused; return result; }, showSelection: function(info) { if (!info || !this.cm.display.view.length) return; if (info.focus) this.showPrimarySelection(); this.showMultipleSelections(info); }, showPrimarySelection: function() { var sel = window.getSelection(), prim = this.cm.doc.sel.primary(); var curAnchor = domToPos(this.cm, sel.anchorNode, sel.anchorOffset); var curFocus = domToPos(this.cm, sel.focusNode, sel.focusOffset); if (curAnchor && !curAnchor.bad && curFocus && !curFocus.bad && cmp(minPos(curAnchor, curFocus), prim.from()) == 0 && cmp(maxPos(curAnchor, curFocus), prim.to()) == 0) return; var start = posToDOM(this.cm, prim.from()); var end = posToDOM(this.cm, prim.to()); if (!start && !end) return; var view = this.cm.display.view; var old = sel.rangeCount && sel.getRangeAt(0); if (!start) { start = {node: view[0].measure.map[2], offset: 0}; } else if (!end) { // FIXME dangerously hacky var measure = view[view.length - 1].measure; var map = measure.maps ? measure.maps[measure.maps.length - 1] : measure.map; end = {node: map[map.length - 1], offset: map[map.length - 2] - map[map.length - 3]}; } try { var rng = range(start.node, start.offset, end.offset, end.node); } catch(e) {} // Our model of the DOM might be outdated, in which case the range we try to set can be impossible if (rng) { sel.removeAllRanges(); sel.addRange(rng); if (old && sel.anchorNode == null) sel.addRange(old); } this.rememberSelection(); }, showMultipleSelections: function(info) { removeChildrenAndAdd(this.cm.display.cursorDiv, info.cursors); removeChildrenAndAdd(this.cm.display.selectionDiv, info.selection); }, rememberSelection: function() { var sel = window.getSelection(); this.lastAnchorNode = sel.anchorNode; this.lastAnchorOffset = sel.anchorOffset; this.lastFocusNode = sel.focusNode; this.lastFocusOffset = sel.focusOffset; }, selectionInEditor: function() { var sel = window.getSelection(); if (!sel.rangeCount) return false; var node = sel.getRangeAt(0).commonAncestorContainer; return contains(this.div, node); }, focus: function() { if (this.cm.options.readOnly != "nocursor") this.div.focus(); }, blur: function() { this.div.blur(); }, getField: function() { return this.div; }, supportsTouch: function() { return true; }, receivedFocus: function() { var input = this; if (this.selectionInEditor()) this.pollSelection(); else runInOp(this.cm, function() { input.cm.curOp.selectionChanged = true; }); function poll() { if (input.cm.state.focused) { input.pollSelection(); input.polling.set(input.cm.options.pollInterval, poll); } } this.polling.set(this.cm.options.pollInterval, poll); }, pollSelection: function() { if (this.composing) return; var sel = window.getSelection(), cm = this.cm; if (sel.anchorNode != this.lastAnchorNode || sel.anchorOffset != this.lastAnchorOffset || sel.focusNode != this.lastFocusNode || sel.focusOffset != this.lastFocusOffset) { this.rememberSelection(); var anchor = domToPos(cm, sel.anchorNode, sel.anchorOffset); var head = domToPos(cm, sel.focusNode, sel.focusOffset); if (anchor && head) runInOp(cm, function() { setSelection(cm.doc, simpleSelection(anchor, head), sel_dontScroll); if (anchor.bad || head.bad) cm.curOp.selectionChanged = true; }); } }, pollContent: function() { var cm = this.cm, display = cm.display, sel = cm.doc.sel.primary(); var from = sel.from(), to = sel.to(); if (from.line < display.viewFrom || to.line > display.viewTo - 1) return false; var fromIndex; if (from.line == display.viewFrom || (fromIndex = findViewIndex(cm, from.line)) == 0) { var fromLine = lineNo(display.view[0].line); var fromNode = display.view[0].node; } else { var fromLine = lineNo(display.view[fromIndex].line); var fromNode = display.view[fromIndex - 1].node.nextSibling; } var toIndex = findViewIndex(cm, to.line); if (toIndex == display.view.length - 1) { var toLine = display.viewTo - 1; var toNode = display.view[toIndex].node; } else { var toLine = lineNo(display.view[toIndex + 1].line) - 1; var toNode = display.view[toIndex + 1].node.previousSibling; } var newText = splitLines(domTextBetween(cm, fromNode, toNode, fromLine, toLine)); var oldText = getBetween(cm.doc, Pos(fromLine, 0), Pos(toLine, getLine(cm.doc, toLine).text.length)); while (newText.length > 1 && oldText.length > 1) { if (lst(newText) == lst(oldText)) { newText.pop(); oldText.pop(); toLine--; } else if (newText[0] == oldText[0]) { newText.shift(); oldText.shift(); fromLine++; } else break; } var cutFront = 0, cutEnd = 0; var newTop = newText[0], oldTop = oldText[0], maxCutFront = Math.min(newTop.length, oldTop.length); while (cutFront < maxCutFront && newTop.charCodeAt(cutFront) == oldTop.charCodeAt(cutFront)) ++cutFront; var newBot = lst(newText), oldBot = lst(oldText); var maxCutEnd = Math.min(newBot.length - (newText.length == 1 ? cutFront : 0), oldBot.length - (oldText.length == 1 ? cutFront : 0)); while (cutEnd < maxCutEnd && newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) ++cutEnd; newText[newText.length - 1] = newBot.slice(0, newBot.length - cutEnd); newText[0] = newText[0].slice(cutFront); var chFrom = Pos(fromLine, cutFront); var chTo = Pos(toLine, oldText.length ? lst(oldText).length - cutEnd : 0); if (newText.length > 1 || newText[0] || cmp(chFrom, chTo)) { replaceRange(cm.doc, newText, chFrom, chTo, "+input"); return true; } }, ensurePolled: function() { this.forceCompositionEnd(); }, reset: function() { this.forceCompositionEnd(); }, forceCompositionEnd: function() { if (!this.composing || this.composing.handled) return; this.applyComposition(this.composing); this.composing.handled = true; this.div.blur(); this.div.focus(); }, applyComposition: function(composing) { if (composing.data && composing.data != composing.startData) operation(this.cm, applyTextInput)(this.cm, composing.data, 0, composing.sel); }, setUneditable: function(node) { node.setAttribute("contenteditable", "false"); }, onKeyPress: function(e) { e.preventDefault(); operation(this.cm, applyTextInput)(this.cm, String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode), 0); }, onContextMenu: nothing, resetPosition: nothing, needsContentAttribute: true }, ContentEditableInput.prototype); function posToDOM(cm, pos) { var view = findViewForLine(cm, pos.line); if (!view || view.hidden) return null; var line = getLine(cm.doc, pos.line); var info = mapFromLineView(view, line, pos.line); var order = getOrder(line), side = "left"; if (order) { var partPos = getBidiPartAt(order, pos.ch); side = partPos % 2 ? "right" : "left"; } var result = nodeAndOffsetInLineMap(info.map, pos.ch, "left"); result.offset = result.collapse == "right" ? result.end : result.start; return result; } function badPos(pos, bad) { if (bad) pos.bad = true; return pos; } function domToPos(cm, node, offset) { var lineNode; if (node == cm.display.lineDiv) { lineNode = cm.display.lineDiv.childNodes[offset]; if (!lineNode) return badPos(cm.clipPos(Pos(cm.display.viewTo - 1)), true); node = null; offset = 0; } else { for (lineNode = node;; lineNode = lineNode.parentNode) { if (!lineNode || lineNode == cm.display.lineDiv) return null; if (lineNode.parentNode && lineNode.parentNode == cm.display.lineDiv) break; } } for (var i = 0; i < cm.display.view.length; i++) { var lineView = cm.display.view[i]; if (lineView.node == lineNode) return locateNodeInLineView(lineView, node, offset); } } function locateNodeInLineView(lineView, node, offset) { var wrapper = lineView.text.firstChild, bad = false; if (!node || !contains(wrapper, node)) return badPos(Pos(lineNo(lineView.line), 0), true); if (node == wrapper) { bad = true; node = wrapper.childNodes[offset]; offset = 0; if (!node) { var line = lineView.rest ? lst(lineView.rest) : lineView.line; return badPos(Pos(lineNo(line), line.text.length), bad); } } var textNode = node.nodeType == 3 ? node : null, topNode = node; if (!textNode && node.childNodes.length == 1 && node.firstChild.nodeType == 3) { textNode = node.firstChild; if (offset) offset = textNode.nodeValue.length; } while (topNode.parentNode != wrapper) topNode = topNode.parentNode; var measure = lineView.measure, maps = measure.maps; function find(textNode, topNode, offset) { for (var i = -1; i < (maps ? maps.length : 0); i++) { var map = i < 0 ? measure.map : maps[i]; for (var j = 0; j < map.length; j += 3) { var curNode = map[j + 2]; if (curNode == textNode || curNode == topNode) { var line = lineNo(i < 0 ? lineView.line : lineView.rest[i]); var ch = map[j] + offset; if (offset < 0 || curNode != textNode) ch = map[j + (offset ? 1 : 0)]; return Pos(line, ch); } } } } var found = find(textNode, topNode, offset); if (found) return badPos(found, bad); // FIXME this is all really shaky. might handle the few cases it needs to handle, but likely to cause problems for (var after = topNode.nextSibling, dist = textNode ? textNode.nodeValue.length - offset : 0; after; after = after.nextSibling) { found = find(after, after.firstChild, 0); if (found) return badPos(Pos(found.line, found.ch - dist), bad); else dist += after.textContent.length; } for (var before = topNode.previousSibling, dist = offset; before; before = before.previousSibling) { found = find(before, before.firstChild, -1); if (found) return badPos(Pos(found.line, found.ch + dist), bad); else dist += after.textContent.length; } } function domTextBetween(cm, from, to, fromLine, toLine) { var text = "", closing = false; function recognizeMarker(id) { return function(marker) { return marker.id == id; }; } function walk(node) { if (node.nodeType == 1) { var cmText = node.getAttribute("cm-text"); if (cmText != null) { if (cmText == "") cmText = node.textContent.replace(/\u200b/g, ""); text += cmText; return; } var markerID = node.getAttribute("cm-marker"), range; if (markerID) { var found = cm.findMarks(Pos(fromLine, 0), Pos(toLine + 1, 0), recognizeMarker(+markerID)); if (found.length && (range = found[0].find())) text += getBetween(cm.doc, range.from, range.to).join("\n"); return; } if (node.getAttribute("contenteditable") == "false") return; for (var i = 0; i < node.childNodes.length; i++) walk(node.childNodes[i]); if (/^(pre|div|p)$/i.test(node.nodeName)) closing = true; } else if (node.nodeType == 3) { var val = node.nodeValue; if (!val) return; if (closing) { text += "\n"; closing = false; } text += val; } } for (;;) { walk(from); if (from == to) break; from = from.nextSibling; } return text; } CodeMirror.inputStyles = {"textarea": TextareaInput, "contenteditable": ContentEditableInput}; // SELECTION / CURSOR // Selection objects are immutable. A new one is created every time // the selection changes. A selection is one or more non-overlapping // (and non-touching) ranges, sorted, and an integer that indicates // which one is the primary selection (the one that's scrolled into // view, that getCursor returns, etc). function Selection(ranges, primIndex) { this.ranges = ranges; this.primIndex = primIndex; } Selection.prototype = { primary: function() { return this.ranges[this.primIndex]; }, equals: function(other) { if (other == this) return true; if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) return false; for (var i = 0; i < this.ranges.length; i++) { var here = this.ranges[i], there = other.ranges[i]; if (cmp(here.anchor, there.anchor) != 0 || cmp(here.head, there.head) != 0) return false; } return true; }, deepCopy: function() { for (var out = [], i = 0; i < this.ranges.length; i++) out[i] = new Range(copyPos(this.ranges[i].anchor), copyPos(this.ranges[i].head)); return new Selection(out, this.primIndex); }, somethingSelected: function() { for (var i = 0; i < this.ranges.length; i++) if (!this.ranges[i].empty()) return true; return false; }, contains: function(pos, end) { if (!end) end = pos; for (var i = 0; i < this.ranges.length; i++) { var range = this.ranges[i]; if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0) return i; } return -1; } }; function Range(anchor, head) { this.anchor = anchor; this.head = head; } Range.prototype = { from: function() { return minPos(this.anchor, this.head); }, to: function() { return maxPos(this.anchor, this.head); }, empty: function() { return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch; } }; // Take an unsorted, potentially overlapping set of ranges, and // build a selection out of it. 'Consumes' ranges array (modifying // it). function normalizeSelection(ranges, primIndex) { var prim = ranges[primIndex]; ranges.sort(function(a, b) { return cmp(a.from(), b.from()); }); primIndex = indexOf(ranges, prim); for (var i = 1; i < ranges.length; i++) { var cur = ranges[i], prev = ranges[i - 1]; if (cmp(prev.to(), cur.from()) >= 0) { var from = minPos(prev.from(), cur.from()), to = maxPos(prev.to(), cur.to()); var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head; if (i <= primIndex) --primIndex; ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to)); } } return new Selection(ranges, primIndex); } function simpleSelection(anchor, head) { return new Selection([new Range(anchor, head || anchor)], 0); } // Most of the external API clips given positions to make sure they // actually exist within the document. function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1));} function clipPos(doc, pos) { if (pos.line < doc.first) return Pos(doc.first, 0); var last = doc.first + doc.size - 1; if (pos.line > last) return Pos(last, getLine(doc, last).text.length); return clipToLen(pos, getLine(doc, pos.line).text.length); } function clipToLen(pos, linelen) { var ch = pos.ch; if (ch == null || ch > linelen) return Pos(pos.line, linelen); else if (ch < 0) return Pos(pos.line, 0); else return pos; } function isLine(doc, l) {return l >= doc.first && l < doc.first + doc.size;} function clipPosArray(doc, array) { for (var out = [], i = 0; i < array.length; i++) out[i] = clipPos(doc, array[i]); return out; } // SELECTION UPDATES // The 'scroll' parameter given to many of these indicated whether // the new cursor position should be scrolled into view after // modifying the selection. // If shift is held or the extend flag is set, extends a range to // include a given position (and optionally a second position). // Otherwise, simply returns the range between the given positions. // Used for cursor motion and such. function extendRange(doc, range, head, other) { if (doc.cm && doc.cm.display.shift || doc.extend) { var anchor = range.anchor; if (other) { var posBefore = cmp(head, anchor) < 0; if (posBefore != (cmp(other, anchor) < 0)) { anchor = head; head = other; } else if (posBefore != (cmp(head, other) < 0)) { head = other; } } return new Range(anchor, head); } else { return new Range(other || head, head); } } // Extend the primary selection range, discard the rest. function extendSelection(doc, head, other, options) { setSelection(doc, new Selection([extendRange(doc, doc.sel.primary(), head, other)], 0), options); } // Extend all selections (pos is an array of selections with length // equal the number of selections) function extendSelections(doc, heads, options) { for (var out = [], i = 0; i < doc.sel.ranges.length; i++) out[i] = extendRange(doc, doc.sel.ranges[i], heads[i], null); var newSel = normalizeSelection(out, doc.sel.primIndex); setSelection(doc, newSel, options); } // Updates a single range in the selection. function replaceOneSelection(doc, i, range, options) { var ranges = doc.sel.ranges.slice(0); ranges[i] = range; setSelection(doc, normalizeSelection(ranges, doc.sel.primIndex), options); } // Reset the selection to a single range. function setSimpleSelection(doc, anchor, head, options) { setSelection(doc, simpleSelection(anchor, head), options); } // Give beforeSelectionChange handlers a change to influence a // selection update. function filterSelectionChange(doc, sel) { var obj = { ranges: sel.ranges, update: function(ranges) { this.ranges = []; for (var i = 0; i < ranges.length; i++) this.ranges[i] = new Range(clipPos(doc, ranges[i].anchor), clipPos(doc, ranges[i].head)); } }; signal(doc, "beforeSelectionChange", doc, obj); if (doc.cm) signal(doc.cm, "beforeSelectionChange", doc.cm, obj); if (obj.ranges != sel.ranges) return normalizeSelection(obj.ranges, obj.ranges.length - 1); else return sel; } function setSelectionReplaceHistory(doc, sel, options) { var done = doc.history.done, last = lst(done); if (last && last.ranges) { done[done.length - 1] = sel; setSelectionNoUndo(doc, sel, options); } else { setSelection(doc, sel, options); } } // Set a new selection. function setSelection(doc, sel, options) { setSelectionNoUndo(doc, sel, options); addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options); } function setSelectionNoUndo(doc, sel, options) { if (hasHandler(doc, "beforeSelectionChange") || doc.cm && hasHandler(doc.cm, "beforeSelectionChange")) sel = filterSelectionChange(doc, sel); var bias = options && options.bias || (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1); setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true)); if (!(options && options.scroll === false) && doc.cm) ensureCursorVisible(doc.cm); } function setSelectionInner(doc, sel) { if (sel.equals(doc.sel)) return; doc.sel = sel; if (doc.cm) { doc.cm.curOp.updateInput = doc.cm.curOp.selectionChanged = true; signalCursorActivity(doc.cm); } signalLater(doc, "cursorActivity", doc); } // Verify that the selection does not partially select any atomic // marked ranges. function reCheckSelection(doc) { setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false), sel_dontScroll); } // Return a selection that does not partially select any atomic // ranges. function skipAtomicInSelection(doc, sel, bias, mayClear) { var out; for (var i = 0; i < sel.ranges.length; i++) { var range = sel.ranges[i]; var newAnchor = skipAtomic(doc, range.anchor, bias, mayClear); var newHead = skipAtomic(doc, range.head, bias, mayClear); if (out || newAnchor != range.anchor || newHead != range.head) { if (!out) out = sel.ranges.slice(0, i); out[i] = new Range(newAnchor, newHead); } } return out ? normalizeSelection(out, sel.primIndex) : sel; } // Ensure a given position is not inside an atomic range. function skipAtomic(doc, pos, bias, mayClear) { var flipped = false, curPos = pos; var dir = bias || 1; doc.cantEdit = false; search: for (;;) { var line = getLine(doc, curPos.line); if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) { var sp = line.markedSpans[i], m = sp.marker; if ((sp.from == null || (m.inclusiveLeft ? sp.from <= curPos.ch : sp.from < curPos.ch)) && (sp.to == null || (m.inclusiveRight ? sp.to >= curPos.ch : sp.to > curPos.ch))) { if (mayClear) { signal(m, "beforeCursorEnter"); if (m.explicitlyCleared) { if (!line.markedSpans) break; else {--i; continue;} } } if (!m.atomic) continue; var newPos = m.find(dir < 0 ? -1 : 1); if (cmp(newPos, curPos) == 0) { newPos.ch += dir; if (newPos.ch < 0) { if (newPos.line > doc.first) newPos = clipPos(doc, Pos(newPos.line - 1)); else newPos = null; } else if (newPos.ch > line.text.length) { if (newPos.line < doc.first + doc.size - 1) newPos = Pos(newPos.line + 1, 0); else newPos = null; } if (!newPos) { if (flipped) { // Driven in a corner -- no valid cursor position found at all // -- try again *with* clearing, if we didn't already if (!mayClear) return skipAtomic(doc, pos, bias, true); // Otherwise, turn off editing until further notice, and return the start of the doc doc.cantEdit = true; return Pos(doc.first, 0); } flipped = true; newPos = pos; dir = -dir; } } curPos = newPos; continue search; } } } return curPos; } } // SELECTION DRAWING function updateSelection(cm) { cm.display.input.showSelection(cm.display.input.prepareSelection()); } function prepareSelection(cm, primary) { var doc = cm.doc, result = {}; var curFragment = result.cursors = document.createDocumentFragment(); var selFragment = result.selection = document.createDocumentFragment(); for (var i = 0; i < doc.sel.ranges.length; i++) { if (primary === false && i == doc.sel.primIndex) continue; var range = doc.sel.ranges[i]; var collapsed = range.empty(); if (collapsed || cm.options.showCursorWhenSelecting) drawSelectionCursor(cm, range, curFragment); if (!collapsed) drawSelectionRange(cm, range, selFragment); } return result; } // Draws a cursor for the given range function drawSelectionCursor(cm, range, output) { var pos = cursorCoords(cm, range.head, "div", null, null, !cm.options.singleCursorHeightPerLine); var cursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor")); cursor.style.left = pos.left + "px"; cursor.style.top = pos.top + "px"; cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + "px"; if (pos.other) { // Secondary cursor, shown when on a 'jump' in bi-directional text var otherCursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor CodeMirror-secondarycursor")); otherCursor.style.display = ""; otherCursor.style.left = pos.other.left + "px"; otherCursor.style.top = pos.other.top + "px"; otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + "px"; } } // Draws the given range as a highlighted selection function drawSelectionRange(cm, range, output) { var display = cm.display, doc = cm.doc; var fragment = document.createDocumentFragment(); var padding = paddingH(cm.display), leftSide = padding.left; var rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right; function add(left, top, width, bottom) { if (top < 0) top = 0; top = Math.round(top); bottom = Math.round(bottom); fragment.appendChild(elt("div", null, "CodeMirror-selected", "position: absolute; left: " + left + "px; top: " + top + "px; width: " + (width == null ? rightSide - left : width) + "px; height: " + (bottom - top) + "px")); } function drawForLine(line, fromArg, toArg) { var lineObj = getLine(doc, line); var lineLen = lineObj.text.length; var start, end; function coords(ch, bias) { return charCoords(cm, Pos(line, ch), "div", lineObj, bias); } iterateBidiSections(getOrder(lineObj), fromArg || 0, toArg == null ? lineLen : toArg, function(from, to, dir) { var leftPos = coords(from, "left"), rightPos, left, right; if (from == to) { rightPos = leftPos; left = right = leftPos.left; } else { rightPos = coords(to - 1, "right"); if (dir == "rtl") { var tmp = leftPos; leftPos = rightPos; rightPos = tmp; } left = leftPos.left; right = rightPos.right; } if (fromArg == null && from == 0) left = leftSide; if (rightPos.top - leftPos.top > 3) { // Different lines, draw top part add(left, leftPos.top, null, leftPos.bottom); left = leftSide; if (leftPos.bottom < rightPos.top) add(left, leftPos.bottom, null, rightPos.top); } if (toArg == null && to == lineLen) right = rightSide; if (!start || leftPos.top < start.top || leftPos.top == start.top && leftPos.left < start.left) start = leftPos; if (!end || rightPos.bottom > end.bottom || rightPos.bottom == end.bottom && rightPos.right > end.right) end = rightPos; if (left < leftSide + 1) left = leftSide; add(left, rightPos.top, right - left, rightPos.bottom); }); return {start: start, end: end}; } var sFrom = range.from(), sTo = range.to(); if (sFrom.line == sTo.line) { drawForLine(sFrom.line, sFrom.ch, sTo.ch); } else { var fromLine = getLine(doc, sFrom.line), toLine = getLine(doc, sTo.line); var singleVLine = visualLine(fromLine) == visualLine(toLine); var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end; var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start; if (singleVLine) { if (leftEnd.top < rightStart.top - 2) { add(leftEnd.right, leftEnd.top, null, leftEnd.bottom); add(leftSide, rightStart.top, rightStart.left, rightStart.bottom); } else { add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom); } } if (leftEnd.bottom < rightStart.top) add(leftSide, leftEnd.bottom, null, rightStart.top); } output.appendChild(fragment); } // Cursor-blinking function restartBlink(cm) { if (!cm.state.focused) return; var display = cm.display; clearInterval(display.blinker); var on = true; display.cursorDiv.style.visibility = ""; if (cm.options.cursorBlinkRate > 0) display.blinker = setInterval(function() { display.cursorDiv.style.visibility = (on = !on) ? "" : "hidden"; }, cm.options.cursorBlinkRate); else if (cm.options.cursorBlinkRate < 0) display.cursorDiv.style.visibility = "hidden"; } // HIGHLIGHT WORKER function startWorker(cm, time) { if (cm.doc.mode.startState && cm.doc.frontier < cm.display.viewTo) cm.state.highlight.set(time, bind(highlightWorker, cm)); } function highlightWorker(cm) { var doc = cm.doc; if (doc.frontier < doc.first) doc.frontier = doc.first; if (doc.frontier >= cm.display.viewTo) return; var end = +new Date + cm.options.workTime; var state = copyState(doc.mode, getStateBefore(cm, doc.frontier)); var changedLines = []; doc.iter(doc.frontier, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function(line) { if (doc.frontier >= cm.display.viewFrom) { // Visible var oldStyles = line.styles; var highlighted = highlightLine(cm, line, state, true); line.styles = highlighted.styles; var oldCls = line.styleClasses, newCls = highlighted.classes; if (newCls) line.styleClasses = newCls; else if (oldCls) line.styleClasses = null; var ischange = !oldStyles || oldStyles.length != line.styles.length || oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass); for (var i = 0; !ischange && i < oldStyles.length; ++i) ischange = oldStyles[i] != line.styles[i]; if (ischange) changedLines.push(doc.frontier); line.stateAfter = copyState(doc.mode, state); } else { processLine(cm, line.text, state); line.stateAfter = doc.frontier % 5 == 0 ? copyState(doc.mode, state) : null; } ++doc.frontier; if (+new Date > end) { startWorker(cm, cm.options.workDelay); return true; } }); if (changedLines.length) runInOp(cm, function() { for (var i = 0; i < changedLines.length; i++) regLineChange(cm, changedLines[i], "text"); }); } // Finds the line to start with when starting a parse. Tries to // find a line with a stateAfter, so that it can start with a // valid state. If that fails, it returns the line with the // smallest indentation, which tends to need the least context to // parse correctly. function findStartLine(cm, n, precise) { var minindent, minline, doc = cm.doc; var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100); for (var search = n; search > lim; --search) { if (search <= doc.first) return doc.first; var line = getLine(doc, search - 1); if (line.stateAfter && (!precise || search <= doc.frontier)) return search; var indented = countColumn(line.text, null, cm.options.tabSize); if (minline == null || minindent > indented) { minline = search - 1; minindent = indented; } } return minline; } function getStateBefore(cm, n, precise) { var doc = cm.doc, display = cm.display; if (!doc.mode.startState) return true; var pos = findStartLine(cm, n, precise), state = pos > doc.first && getLine(doc, pos-1).stateAfter; if (!state) state = startState(doc.mode); else state = copyState(doc.mode, state); doc.iter(pos, n, function(line) { processLine(cm, line.text, state); var save = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo; line.stateAfter = save ? copyState(doc.mode, state) : null; ++pos; }); if (precise) doc.frontier = pos; return state; } // POSITION MEASUREMENT function paddingTop(display) {return display.lineSpace.offsetTop;} function paddingVert(display) {return display.mover.offsetHeight - display.lineSpace.offsetHeight;} function paddingH(display) { if (display.cachedPaddingH) return display.cachedPaddingH; var e = removeChildrenAndAdd(display.measure, elt("pre", "x")); var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle; var data = {left: parseInt(style.paddingLeft), right: parseInt(style.paddingRight)}; if (!isNaN(data.left) && !isNaN(data.right)) display.cachedPaddingH = data; return data; } function scrollGap(cm) { return scrollerGap - cm.display.nativeBarWidth; } function displayWidth(cm) { return cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth; } function displayHeight(cm) { return cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight; } // Ensure the lineView.wrapping.heights array is populated. This is // an array of bottom offsets for the lines that make up a drawn // line. When lineWrapping is on, there might be more than one // height. function ensureLineHeights(cm, lineView, rect) { var wrapping = cm.options.lineWrapping; var curWidth = wrapping && displayWidth(cm); if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) { var heights = lineView.measure.heights = []; if (wrapping) { lineView.measure.width = curWidth; var rects = lineView.text.firstChild.getClientRects(); for (var i = 0; i < rects.length - 1; i++) { var cur = rects[i], next = rects[i + 1]; if (Math.abs(cur.bottom - next.bottom) > 2) heights.push((cur.bottom + next.top) / 2 - rect.top); } } heights.push(rect.bottom - rect.top); } } // Find a line map (mapping character offsets to text nodes) and a // measurement cache for the given line number. (A line view might // contain multiple lines when collapsed ranges are present.) function mapFromLineView(lineView, line, lineN) { if (lineView.line == line) return {map: lineView.measure.map, cache: lineView.measure.cache}; for (var i = 0; i < lineView.rest.length; i++) if (lineView.rest[i] == line) return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i]}; for (var i = 0; i < lineView.rest.length; i++) if (lineNo(lineView.rest[i]) > lineN) return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i], before: true}; } // Render a line into the hidden node display.externalMeasured. Used // when measurement is needed for a line that's not in the viewport. function updateExternalMeasurement(cm, line) { line = visualLine(line); var lineN = lineNo(line); var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN); view.lineN = lineN; var built = view.built = buildLineContent(cm, view); view.text = built.pre; removeChildrenAndAdd(cm.display.lineMeasure, built.pre); return view; } // Get a {top, bottom, left, right} box (in line-local coordinates) // for a given character. function measureChar(cm, line, ch, bias) { return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias); } // Find a line view that corresponds to the given line number. function findViewForLine(cm, lineN) { if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo) return cm.display.view[findViewIndex(cm, lineN)]; var ext = cm.display.externalMeasured; if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size) return ext; } // Measurement can be split in two steps, the set-up work that // applies to the whole line, and the measurement of the actual // character. Functions like coordsChar, that need to do a lot of // measurements in a row, can thus ensure that the set-up work is // only done once. function prepareMeasureForLine(cm, line) { var lineN = lineNo(line); var view = findViewForLine(cm, lineN); if (view && !view.text) view = null; else if (view && view.changes) updateLineForChanges(cm, view, lineN, getDimensions(cm)); if (!view) view = updateExternalMeasurement(cm, line); var info = mapFromLineView(view, line, lineN); return { line: line, view: view, rect: null, map: info.map, cache: info.cache, before: info.before, hasHeights: false }; } // Given a prepared measurement object, measures the position of an // actual character (or fetches it from the cache). function measureCharPrepared(cm, prepared, ch, bias, varHeight) { if (prepared.before) ch = -1; var key = ch + (bias || ""), found; if (prepared.cache.hasOwnProperty(key)) { found = prepared.cache[key]; } else { if (!prepared.rect) prepared.rect = prepared.view.text.getBoundingClientRect(); if (!prepared.hasHeights) { ensureLineHeights(cm, prepared.view, prepared.rect); prepared.hasHeights = true; } found = measureCharInner(cm, prepared, ch, bias); if (!found.bogus) prepared.cache[key] = found; } return {left: found.left, right: found.right, top: varHeight ? found.rtop : found.top, bottom: varHeight ? found.rbottom : found.bottom}; } var nullRect = {left: 0, right: 0, top: 0, bottom: 0}; function nodeAndOffsetInLineMap(map, ch, bias) { var node, start, end, collapse; // First, search the line map for the text node corresponding to, // or closest to, the target character. for (var i = 0; i < map.length; i += 3) { var mStart = map[i], mEnd = map[i + 1]; if (ch < mStart) { start = 0; end = 1; collapse = "left"; } else if (ch < mEnd) { start = ch - mStart; end = start + 1; } else if (i == map.length - 3 || ch == mEnd && map[i + 3] > ch) { end = mEnd - mStart; start = end - 1; if (ch >= mEnd) collapse = "right"; } if (start != null) { node = map[i + 2]; if (mStart == mEnd && bias == (node.insertLeft ? "left" : "right")) collapse = bias; if (bias == "left" && start == 0) while (i && map[i - 2] == map[i - 3] && map[i - 1].insertLeft) { node = map[(i -= 3) + 2]; collapse = "left"; } if (bias == "right" && start == mEnd - mStart) while (i < map.length - 3 && map[i + 3] == map[i + 4] && !map[i + 5].insertLeft) { node = map[(i += 3) + 2]; collapse = "right"; } break; } } return {node: node, start: start, end: end, collapse: collapse, coverStart: mStart, coverEnd: mEnd}; } function measureCharInner(cm, prepared, ch, bias) { var place = nodeAndOffsetInLineMap(prepared.map, ch, bias); var node = place.node, start = place.start, end = place.end, collapse = place.collapse; var rect; if (node.nodeType == 3) { // If it is a text node, use a range to retrieve the coordinates. for (var i = 0; i < 4; i++) { // Retry a maximum of 4 times when nonsense rectangles are returned while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) --start; while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) ++end; if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart) { rect = node.parentNode.getBoundingClientRect(); } else if (ie && cm.options.lineWrapping) { var rects = range(node, start, end).getClientRects(); if (rects.length) rect = rects[bias == "right" ? rects.length - 1 : 0]; else rect = nullRect; } else { rect = range(node, start, end).getBoundingClientRect() || nullRect; } if (rect.left || rect.right || start == 0) break; end = start; start = start - 1; collapse = "right"; } if (ie && ie_version < 11) rect = maybeUpdateRectForZooming(cm.display.measure, rect); } else { // If it is a widget, simply get the box for the whole widget. if (start > 0) collapse = bias = "right"; var rects; if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1) rect = rects[bias == "right" ? rects.length - 1 : 0]; else rect = node.getBoundingClientRect(); } if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) { var rSpan = node.parentNode.getClientRects()[0]; if (rSpan) rect = {left: rSpan.left, right: rSpan.left + charWidth(cm.display), top: rSpan.top, bottom: rSpan.bottom}; else rect = nullRect; } var rtop = rect.top - prepared.rect.top, rbot = rect.bottom - prepared.rect.top; var mid = (rtop + rbot) / 2; var heights = prepared.view.measure.heights; for (var i = 0; i < heights.length - 1; i++) if (mid < heights[i]) break; var top = i ? heights[i - 1] : 0, bot = heights[i]; var result = {left: (collapse == "right" ? rect.right : rect.left) - prepared.rect.left, right: (collapse == "left" ? rect.left : rect.right) - prepared.rect.left, top: top, bottom: bot}; if (!rect.left && !rect.right) result.bogus = true; if (!cm.options.singleCursorHeightPerLine) { result.rtop = rtop; result.rbottom = rbot; } return result; } // Work around problem with bounding client rects on ranges being // returned incorrectly when zoomed on IE10 and below. function maybeUpdateRectForZooming(measure, rect) { if (!window.screen || screen.logicalXDPI == null || screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure)) return rect; var scaleX = screen.logicalXDPI / screen.deviceXDPI; var scaleY = screen.logicalYDPI / screen.deviceYDPI; return {left: rect.left * scaleX, right: rect.right * scaleX, top: rect.top * scaleY, bottom: rect.bottom * scaleY}; } function clearLineMeasurementCacheFor(lineView) { if (lineView.measure) { lineView.measure.cache = {}; lineView.measure.heights = null; if (lineView.rest) for (var i = 0; i < lineView.rest.length; i++) lineView.measure.caches[i] = {}; } } function clearLineMeasurementCache(cm) { cm.display.externalMeasure = null; removeChildren(cm.display.lineMeasure); for (var i = 0; i < cm.display.view.length; i++) clearLineMeasurementCacheFor(cm.display.view[i]); } function clearCaches(cm) { clearLineMeasurementCache(cm); cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null; if (!cm.options.lineWrapping) cm.display.maxLineChanged = true; cm.display.lineNumChars = null; } function pageScrollX() { return window.pageXOffset || (document.documentElement || document.body).scrollLeft; } function pageScrollY() { return window.pageYOffset || (document.documentElement || document.body).scrollTop; } // Converts a {top, bottom, left, right} box from line-local // coordinates into another coordinate system. Context may be one of // "line", "div" (display.lineDiv), "local"/null (editor), "window", // or "page". function intoCoordSystem(cm, lineObj, rect, context) { if (lineObj.widgets) for (var i = 0; i < lineObj.widgets.length; ++i) if (lineObj.widgets[i].above) { var size = widgetHeight(lineObj.widgets[i]); rect.top += size; rect.bottom += size; } if (context == "line") return rect; if (!context) context = "local"; var yOff = heightAtLine(lineObj); if (context == "local") yOff += paddingTop(cm.display); else yOff -= cm.display.viewOffset; if (context == "page" || context == "window") { var lOff = cm.display.lineSpace.getBoundingClientRect(); yOff += lOff.top + (context == "window" ? 0 : pageScrollY()); var xOff = lOff.left + (context == "window" ? 0 : pageScrollX()); rect.left += xOff; rect.right += xOff; } rect.top += yOff; rect.bottom += yOff; return rect; } // Coverts a box from "div" coords to another coordinate system. // Context may be "window", "page", "div", or "local"/null. function fromCoordSystem(cm, coords, context) { if (context == "div") return coords; var left = coords.left, top = coords.top; // First move into "page" coordinate system if (context == "page") { left -= pageScrollX(); top -= pageScrollY(); } else if (context == "local" || !context) { var localBox = cm.display.sizer.getBoundingClientRect(); left += localBox.left; top += localBox.top; } var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect(); return {left: left - lineSpaceBox.left, top: top - lineSpaceBox.top}; } function charCoords(cm, pos, context, lineObj, bias) { if (!lineObj) lineObj = getLine(cm.doc, pos.line); return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context); } // Returns a box for a given cursor position, which may have an // 'other' property containing the position of the secondary cursor // on a bidi boundary. function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) { lineObj = lineObj || getLine(cm.doc, pos.line); if (!preparedMeasure) preparedMeasure = prepareMeasureForLine(cm, lineObj); function get(ch, right) { var m = measureCharPrepared(cm, preparedMeasure, ch, right ? "right" : "left", varHeight); if (right) m.left = m.right; else m.right = m.left; return intoCoordSystem(cm, lineObj, m, context); } function getBidi(ch, partPos) { var part = order[partPos], right = part.level % 2; if (ch == bidiLeft(part) && partPos && part.level < order[partPos - 1].level) { part = order[--partPos]; ch = bidiRight(part) - (part.level % 2 ? 0 : 1); right = true; } else if (ch == bidiRight(part) && partPos < order.length - 1 && part.level < order[partPos + 1].level) { part = order[++partPos]; ch = bidiLeft(part) - part.level % 2; right = false; } if (right && ch == part.to && ch > part.from) return get(ch - 1); return get(ch, right); } var order = getOrder(lineObj), ch = pos.ch; if (!order) return get(ch); var partPos = getBidiPartAt(order, ch); var val = getBidi(ch, partPos); if (bidiOther != null) val.other = getBidi(ch, bidiOther); return val; } // Used to cheaply estimate the coordinates for a position. Used for // intermediate scroll updates. function estimateCoords(cm, pos) { var left = 0, pos = clipPos(cm.doc, pos); if (!cm.options.lineWrapping) left = charWidth(cm.display) * pos.ch; var lineObj = getLine(cm.doc, pos.line); var top = heightAtLine(lineObj) + paddingTop(cm.display); return {left: left, right: left, top: top, bottom: top + lineObj.height}; } // Positions returned by coordsChar contain some extra information. // xRel is the relative x position of the input coordinates compared // to the found position (so xRel > 0 means the coordinates are to // the right of the character position, for example). When outside // is true, that means the coordinates lie outside the line's // vertical range. function PosWithInfo(line, ch, outside, xRel) { var pos = Pos(line, ch); pos.xRel = xRel; if (outside) pos.outside = true; return pos; } // Compute the character position closest to the given coordinates. // Input must be lineSpace-local ("div" coordinate system). function coordsChar(cm, x, y) { var doc = cm.doc; y += cm.display.viewOffset; if (y < 0) return PosWithInfo(doc.first, 0, true, -1); var lineN = lineAtHeight(doc, y), last = doc.first + doc.size - 1; if (lineN > last) return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, true, 1); if (x < 0) x = 0; var lineObj = getLine(doc, lineN); for (;;) { var found = coordsCharInner(cm, lineObj, lineN, x, y); var merged = collapsedSpanAtEnd(lineObj); var mergedPos = merged && merged.find(0, true); if (merged && (found.ch > mergedPos.from.ch || found.ch == mergedPos.from.ch && found.xRel > 0)) lineN = lineNo(lineObj = mergedPos.to.line); else return found; } } function coordsCharInner(cm, lineObj, lineNo, x, y) { var innerOff = y - heightAtLine(lineObj); var wrongLine = false, adjust = 2 * cm.display.wrapper.clientWidth; var preparedMeasure = prepareMeasureForLine(cm, lineObj); function getX(ch) { var sp = cursorCoords(cm, Pos(lineNo, ch), "line", lineObj, preparedMeasure); wrongLine = true; if (innerOff > sp.bottom) return sp.left - adjust; else if (innerOff < sp.top) return sp.left + adjust; else wrongLine = false; return sp.left; } var bidi = getOrder(lineObj), dist = lineObj.text.length; var from = lineLeft(lineObj), to = lineRight(lineObj); var fromX = getX(from), fromOutside = wrongLine, toX = getX(to), toOutside = wrongLine; if (x > toX) return PosWithInfo(lineNo, to, toOutside, 1); // Do a binary search between these bounds. for (;;) { if (bidi ? to == from || to == moveVisually(lineObj, from, 1) : to - from <= 1) { var ch = x < fromX || x - fromX <= toX - x ? from : to; var xDiff = x - (ch == from ? fromX : toX); while (isExtendingChar(lineObj.text.charAt(ch))) ++ch; var pos = PosWithInfo(lineNo, ch, ch == from ? fromOutside : toOutside, xDiff < -1 ? -1 : xDiff > 1 ? 1 : 0); return pos; } var step = Math.ceil(dist / 2), middle = from + step; if (bidi) { middle = from; for (var i = 0; i < step; ++i) middle = moveVisually(lineObj, middle, 1); } var middleX = getX(middle); if (middleX > x) {to = middle; toX = middleX; if (toOutside = wrongLine) toX += 1000; dist = step;} else {from = middle; fromX = middleX; fromOutside = wrongLine; dist -= step;} } } var measureText; // Compute the default text height. function textHeight(display) { if (display.cachedTextHeight != null) return display.cachedTextHeight; if (measureText == null) { measureText = elt("pre"); // Measure a bunch of lines, for browsers that compute // fractional heights. for (var i = 0; i < 49; ++i) { measureText.appendChild(document.createTextNode("x")); measureText.appendChild(elt("br")); } measureText.appendChild(document.createTextNode("x")); } removeChildrenAndAdd(display.measure, measureText); var height = measureText.offsetHeight / 50; if (height > 3) display.cachedTextHeight = height; removeChildren(display.measure); return height || 1; } // Compute the default character width. function charWidth(display) { if (display.cachedCharWidth != null) return display.cachedCharWidth; var anchor = elt("span", "xxxxxxxxxx"); var pre = elt("pre", [anchor]); removeChildrenAndAdd(display.measure, pre); var rect = anchor.getBoundingClientRect(), width = (rect.right - rect.left) / 10; if (width > 2) display.cachedCharWidth = width; return width || 10; } // OPERATIONS // Operations are used to wrap a series of changes to the editor // state in such a way that each change won't have to update the // cursor and display (which would be awkward, slow, and // error-prone). Instead, display updates are batched and then all // combined and executed at once. var operationGroup = null; var nextOpId = 0; // Start a new operation. function startOperation(cm) { cm.curOp = { cm: cm, viewChanged: false, // Flag that indicates that lines might need to be redrawn startHeight: cm.doc.height, // Used to detect need to update scrollbar forceUpdate: false, // Used to force a redraw updateInput: null, // Whether to reset the input textarea typing: false, // Whether this reset should be careful to leave existing text (for compositing) changeObjs: null, // Accumulated changes, for firing change events cursorActivityHandlers: null, // Set of handlers to fire cursorActivity on cursorActivityCalled: 0, // Tracks which cursorActivity handlers have been called already selectionChanged: false, // Whether the selection needs to be redrawn updateMaxLine: false, // Set when the widest line needs to be determined anew scrollLeft: null, scrollTop: null, // Intermediate scroll position, not pushed to DOM yet scrollToPos: null, // Used to scroll to a specific position id: ++nextOpId // Unique ID }; if (operationGroup) { operationGroup.ops.push(cm.curOp); } else { cm.curOp.ownsGroup = operationGroup = { ops: [cm.curOp], delayedCallbacks: [] }; } } function fireCallbacksForOps(group) { // Calls delayed callbacks and cursorActivity handlers until no // new ones appear var callbacks = group.delayedCallbacks, i = 0; do { for (; i < callbacks.length; i++) callbacks[i](); for (var j = 0; j < group.ops.length; j++) { var op = group.ops[j]; if (op.cursorActivityHandlers) while (op.cursorActivityCalled < op.cursorActivityHandlers.length) op.cursorActivityHandlers[op.cursorActivityCalled++](op.cm); } } while (i < callbacks.length); } // Finish an operation, updating the display and signalling delayed events function endOperation(cm) { var op = cm.curOp, group = op.ownsGroup; if (!group) return; try { fireCallbacksForOps(group); } finally { operationGroup = null; for (var i = 0; i < group.ops.length; i++) group.ops[i].cm.curOp = null; endOperations(group); } } // The DOM updates done when an operation finishes are batched so // that the minimum number of relayouts are required. function endOperations(group) { var ops = group.ops; for (var i = 0; i < ops.length; i++) // Read DOM endOperation_R1(ops[i]); for (var i = 0; i < ops.length; i++) // Write DOM (maybe) endOperation_W1(ops[i]); for (var i = 0; i < ops.length; i++) // Read DOM endOperation_R2(ops[i]); for (var i = 0; i < ops.length; i++) // Write DOM (maybe) endOperation_W2(ops[i]); for (var i = 0; i < ops.length; i++) // Read DOM endOperation_finish(ops[i]); } function endOperation_R1(op) { var cm = op.cm, display = cm.display; maybeClipScrollbars(cm); if (op.updateMaxLine) findMaxLine(cm); op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null || op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom || op.scrollToPos.to.line >= display.viewTo) || display.maxLineChanged && cm.options.lineWrapping; op.update = op.mustUpdate && new DisplayUpdate(cm, op.mustUpdate && {top: op.scrollTop, ensure: op.scrollToPos}, op.forceUpdate); } function endOperation_W1(op) { op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update); } function endOperation_R2(op) { var cm = op.cm, display = cm.display; if (op.updatedDisplay) updateHeightsInViewport(cm); op.barMeasure = measureForScrollbars(cm); // If the max line changed since it was last measured, measure it, // and ensure the document's width matches it. // updateDisplay_W2 will use these properties to do the actual resizing if (display.maxLineChanged && !cm.options.lineWrapping) { op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3; cm.display.sizerWidth = op.adjustWidthTo; op.barMeasure.scrollWidth = Math.max(display.scroller.clientWidth, display.sizer.offsetLeft + op.adjustWidthTo + scrollGap(cm) + cm.display.barWidth); op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm)); } if (op.updatedDisplay || op.selectionChanged) op.preparedSelection = display.input.prepareSelection(); } function endOperation_W2(op) { var cm = op.cm; if (op.adjustWidthTo != null) { cm.display.sizer.style.minWidth = op.adjustWidthTo + "px"; if (op.maxScrollLeft < cm.doc.scrollLeft) setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true); cm.display.maxLineChanged = false; } if (op.preparedSelection) cm.display.input.showSelection(op.preparedSelection); if (op.updatedDisplay) setDocumentHeight(cm, op.barMeasure); if (op.updatedDisplay || op.startHeight != cm.doc.height) updateScrollbars(cm, op.barMeasure); if (op.selectionChanged) restartBlink(cm); if (cm.state.focused && op.updateInput) cm.display.input.reset(op.typing); } function endOperation_finish(op) { var cm = op.cm, display = cm.display, doc = cm.doc; if (op.updatedDisplay) postUpdateDisplay(cm, op.update); // Abort mouse wheel delta measurement, when scrolling explicitly if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos)) display.wheelStartX = display.wheelStartY = null; // Propagate the scroll position to the actual DOM scroller if (op.scrollTop != null && (display.scroller.scrollTop != op.scrollTop || op.forceScroll)) { doc.scrollTop = Math.max(0, Math.min(display.scroller.scrollHeight - display.scroller.clientHeight, op.scrollTop)); display.scrollbars.setScrollTop(doc.scrollTop); display.scroller.scrollTop = doc.scrollTop; } if (op.scrollLeft != null && (display.scroller.scrollLeft != op.scrollLeft || op.forceScroll)) { doc.scrollLeft = Math.max(0, Math.min(display.scroller.scrollWidth - displayWidth(cm), op.scrollLeft)); display.scrollbars.setScrollLeft(doc.scrollLeft); display.scroller.scrollLeft = doc.scrollLeft; alignHorizontally(cm); } // If we need to scroll a specific position into view, do so. if (op.scrollToPos) { var coords = scrollPosIntoView(cm, clipPos(doc, op.scrollToPos.from), clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin); if (op.scrollToPos.isCursor && cm.state.focused) maybeScrollWindow(cm, coords); } // Fire events for markers that are hidden/unidden by editing or // undoing var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers; if (hidden) for (var i = 0; i < hidden.length; ++i) if (!hidden[i].lines.length) signal(hidden[i], "hide"); if (unhidden) for (var i = 0; i < unhidden.length; ++i) if (unhidden[i].lines.length) signal(unhidden[i], "unhide"); if (display.wrapper.offsetHeight) doc.scrollTop = cm.display.scroller.scrollTop; // Fire change events, and delayed event handlers if (op.changeObjs) signal(cm, "changes", cm, op.changeObjs); if (op.update) op.update.finish(); } // Run the given function in an operation function runInOp(cm, f) { if (cm.curOp) return f(); startOperation(cm); try { return f(); } finally { endOperation(cm); } } // Wraps a function in an operation. Returns the wrapped function. function operation(cm, f) { return function() { if (cm.curOp) return f.apply(cm, arguments); startOperation(cm); try { return f.apply(cm, arguments); } finally { endOperation(cm); } }; } // Used to add methods to editor and doc instances, wrapping them in // operations. function methodOp(f) { return function() { if (this.curOp) return f.apply(this, arguments); startOperation(this); try { return f.apply(this, arguments); } finally { endOperation(this); } }; } function docMethodOp(f) { return function() { var cm = this.cm; if (!cm || cm.curOp) return f.apply(this, arguments); startOperation(cm); try { return f.apply(this, arguments); } finally { endOperation(cm); } }; } // VIEW TRACKING // These objects are used to represent the visible (currently drawn) // part of the document. A LineView may correspond to multiple // logical lines, if those are connected by collapsed ranges. function LineView(doc, line, lineN) { // The starting line this.line = line; // Continuing lines, if any this.rest = visualLineContinued(line); // Number of logical lines in this visual line this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1; this.node = this.text = null; this.hidden = lineIsHidden(doc, line); } // Create a range of LineView objects for the given lines. function buildViewArray(cm, from, to) { var array = [], nextPos; for (var pos = from; pos < to; pos = nextPos) { var view = new LineView(cm.doc, getLine(cm.doc, pos), pos); nextPos = pos + view.size; array.push(view); } return array; } // Updates the display.view data structure for a given change to the // document. From and to are in pre-change coordinates. Lendiff is // the amount of lines added or subtracted by the change. This is // used for changes that span multiple lines, or change the way // lines are divided into visual lines. regLineChange (below) // registers single-line changes. function regChange(cm, from, to, lendiff) { if (from == null) from = cm.doc.first; if (to == null) to = cm.doc.first + cm.doc.size; if (!lendiff) lendiff = 0; var display = cm.display; if (lendiff && to < display.viewTo && (display.updateLineNumbers == null || display.updateLineNumbers > from)) display.updateLineNumbers = from; cm.curOp.viewChanged = true; if (from >= display.viewTo) { // Change after if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo) resetView(cm); } else if (to <= display.viewFrom) { // Change before if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) { resetView(cm); } else { display.viewFrom += lendiff; display.viewTo += lendiff; } } else if (from <= display.viewFrom && to >= display.viewTo) { // Full overlap resetView(cm); } else if (from <= display.viewFrom) { // Top overlap var cut = viewCuttingPoint(cm, to, to + lendiff, 1); if (cut) { display.view = display.view.slice(cut.index); display.viewFrom = cut.lineN; display.viewTo += lendiff; } else { resetView(cm); } } else if (to >= display.viewTo) { // Bottom overlap var cut = viewCuttingPoint(cm, from, from, -1); if (cut) { display.view = display.view.slice(0, cut.index); display.viewTo = cut.lineN; } else { resetView(cm); } } else { // Gap in the middle var cutTop = viewCuttingPoint(cm, from, from, -1); var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1); if (cutTop && cutBot) { display.view = display.view.slice(0, cutTop.index) .concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN)) .concat(display.view.slice(cutBot.index)); display.viewTo += lendiff; } else { resetView(cm); } } var ext = display.externalMeasured; if (ext) { if (to < ext.lineN) ext.lineN += lendiff; else if (from < ext.lineN + ext.size) display.externalMeasured = null; } } // Register a change to a single line. Type must be one of "text", // "gutter", "class", "widget" function regLineChange(cm, line, type) { cm.curOp.viewChanged = true; var display = cm.display, ext = cm.display.externalMeasured; if (ext && line >= ext.lineN && line < ext.lineN + ext.size) display.externalMeasured = null; if (line < display.viewFrom || line >= display.viewTo) return; var lineView = display.view[findViewIndex(cm, line)]; if (lineView.node == null) return; var arr = lineView.changes || (lineView.changes = []); if (indexOf(arr, type) == -1) arr.push(type); } // Clear the view. function resetView(cm) { cm.display.viewFrom = cm.display.viewTo = cm.doc.first; cm.display.view = []; cm.display.viewOffset = 0; } // Find the view element corresponding to a given line. Return null // when the line isn't visible. function findViewIndex(cm, n) { if (n >= cm.display.viewTo) return null; n -= cm.display.viewFrom; if (n < 0) return null; var view = cm.display.view; for (var i = 0; i < view.length; i++) { n -= view[i].size; if (n < 0) return i; } } function viewCuttingPoint(cm, oldN, newN, dir) { var index = findViewIndex(cm, oldN), diff, view = cm.display.view; if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size) return {index: index, lineN: newN}; for (var i = 0, n = cm.display.viewFrom; i < index; i++) n += view[i].size; if (n != oldN) { if (dir > 0) { if (index == view.length - 1) return null; diff = (n + view[index].size) - oldN; index++; } else { diff = n - oldN; } oldN += diff; newN += diff; } while (visualLineNo(cm.doc, newN) != newN) { if (index == (dir < 0 ? 0 : view.length - 1)) return null; newN += dir * view[index - (dir < 0 ? 1 : 0)].size; index += dir; } return {index: index, lineN: newN}; } // Force the view to cover a given range, adding empty view element // or clipping off existing ones as needed. function adjustView(cm, from, to) { var display = cm.display, view = display.view; if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) { display.view = buildViewArray(cm, from, to); display.viewFrom = from; } else { if (display.viewFrom > from) display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view); else if (display.viewFrom < from) display.view = display.view.slice(findViewIndex(cm, from)); display.viewFrom = from; if (display.viewTo < to) display.view = display.view.concat(buildViewArray(cm, display.viewTo, to)); else if (display.viewTo > to) display.view = display.view.slice(0, findViewIndex(cm, to)); } display.viewTo = to; } // Count the number of lines in the view whose DOM representation is // out of date (or nonexistent). function countDirtyView(cm) { var view = cm.display.view, dirty = 0; for (var i = 0; i < view.length; i++) { var lineView = view[i]; if (!lineView.hidden && (!lineView.node || lineView.changes)) ++dirty; } return dirty; } // EVENT HANDLERS // Attach the necessary event handlers when initializing the editor function registerEventHandlers(cm) { var d = cm.display; on(d.scroller, "mousedown", operation(cm, onMouseDown)); // Older IE's will not fire a second mousedown for a double click if (ie && ie_version < 11) on(d.scroller, "dblclick", operation(cm, function(e) { if (signalDOMEvent(cm, e)) return; var pos = posFromMouse(cm, e); if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) return; e_preventDefault(e); var word = cm.findWordAt(pos); extendSelection(cm.doc, word.anchor, word.head); })); else on(d.scroller, "dblclick", function(e) { signalDOMEvent(cm, e) || e_preventDefault(e); }); // Some browsers fire contextmenu *after* opening the menu, at // which point we can't mess with it anymore. Context menu is // handled in onMouseDown for these browsers. if (!captureRightClick) on(d.scroller, "contextmenu", function(e) {onContextMenu(cm, e);}); // Used to suppress mouse event handling when a touch happens var touchFinished, prevTouch = {end: 0}; function finishTouch() { if (d.activeTouch) { touchFinished = setTimeout(function() {d.activeTouch = null;}, 1000); prevTouch = d.activeTouch; prevTouch.end = +new Date; } }; function isMouseLikeTouchEvent(e) { if (e.touches.length != 1) return false; var touch = e.touches[0]; return touch.radiusX <= 1 && touch.radiusY <= 1; } function farAway(touch, other) { if (other.left == null) return true; var dx = other.left - touch.left, dy = other.top - touch.top; return dx * dx + dy * dy > 20 * 20; } on(d.scroller, "touchstart", function(e) { if (!isMouseLikeTouchEvent(e)) { clearTimeout(touchFinished); var now = +new Date; d.activeTouch = {start: now, moved: false, prev: now - prevTouch.end <= 300 ? prevTouch : null}; if (e.touches.length == 1) { d.activeTouch.left = e.touches[0].pageX; d.activeTouch.top = e.touches[0].pageY; } } }); on(d.scroller, "touchmove", function() { if (d.activeTouch) d.activeTouch.moved = true; }); on(d.scroller, "touchend", function(e) { var touch = d.activeTouch; if (touch && !eventInWidget(d, e) && touch.left != null && !touch.moved && new Date - touch.start < 300) { var pos = cm.coordsChar(d.activeTouch, "page"), range; if (!touch.prev || farAway(touch, touch.prev)) // Single tap range = new Range(pos, pos); else if (!touch.prev.prev || farAway(touch, touch.prev.prev)) // Double tap range = cm.findWordAt(pos); else // Triple tap range = new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))); cm.setSelection(range.anchor, range.head); cm.focus(); e_preventDefault(e); } finishTouch(); }); on(d.scroller, "touchcancel", finishTouch); // Sync scrolling between fake scrollbars and real scrollable // area, ensure viewport is updated when scrolling. on(d.scroller, "scroll", function() { if (d.scroller.clientHeight) { setScrollTop(cm, d.scroller.scrollTop); setScrollLeft(cm, d.scroller.scrollLeft, true); signal(cm, "scroll", cm); } }); // Listen to wheel events in order to try and update the viewport on time. on(d.scroller, "mousewheel", function(e){onScrollWheel(cm, e);}); on(d.scroller, "DOMMouseScroll", function(e){onScrollWheel(cm, e);}); // Prevent wrapper from ever scrolling on(d.wrapper, "scroll", function() { d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; }); function drag_(e) { if (!signalDOMEvent(cm, e)) e_stop(e); } if (cm.options.dragDrop) { on(d.scroller, "dragstart", function(e){onDragStart(cm, e);}); on(d.scroller, "dragenter", drag_); on(d.scroller, "dragover", drag_); on(d.scroller, "drop", operation(cm, onDrop)); } var inp = d.input.getField(); on(inp, "keyup", function(e) { onKeyUp.call(cm, e); }); on(inp, "keydown", operation(cm, onKeyDown)); on(inp, "keypress", operation(cm, onKeyPress)); on(inp, "focus", bind(onFocus, cm)); on(inp, "blur", bind(onBlur, cm)); } // Called when the window resizes function onResize(cm) { var d = cm.display; if (d.lastWrapHeight == d.wrapper.clientHeight && d.lastWrapWidth == d.wrapper.clientWidth) return; // Might be a text scaling operation, clear size caches. d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null; d.scrollbarsClipped = false; cm.setSize(); } // MOUSE EVENTS // Return true when the given mouse event happened in a widget function eventInWidget(display, e) { for (var n = e_target(e); n != display.wrapper; n = n.parentNode) { if (!n || (n.nodeType == 1 && n.getAttribute("cm-ignore-events") == "true") || (n.parentNode == display.sizer && n != display.mover)) return true; } } // Given a mouse event, find the corresponding position. If liberal // is false, it checks whether a gutter or scrollbar was clicked, // and returns null if it was. forRect is used by rectangular // selections, and tries to estimate a character position even for // coordinates beyond the right of the text. function posFromMouse(cm, e, liberal, forRect) { var display = cm.display; if (!liberal && e_target(e).getAttribute("cm-not-content") == "true") return null; var x, y, space = display.lineSpace.getBoundingClientRect(); // Fails unpredictably on IE[67] when mouse is dragged around quickly. try { x = e.clientX - space.left; y = e.clientY - space.top; } catch (e) { return null; } var coords = coordsChar(cm, x, y), line; if (forRect && coords.xRel == 1 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) { var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length; coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff)); } return coords; } // A mouse down can be a single click, double click, triple click, // start of selection drag, start of text drag, new cursor // (ctrl-click), rectangle drag (alt-drag), or xwin // middle-click-paste. Or it might be a click on something we should // not interfere with, such as a scrollbar or widget. function onMouseDown(e) { var cm = this, display = cm.display; if (display.activeTouch && display.input.supportsTouch() || signalDOMEvent(cm, e)) return; display.shift = e.shiftKey; if (eventInWidget(display, e)) { if (!webkit) { // Briefly turn off draggability, to allow widgets to do // normal dragging things. display.scroller.draggable = false; setTimeout(function(){display.scroller.draggable = true;}, 100); } return; } if (clickInGutter(cm, e)) return; var start = posFromMouse(cm, e); window.focus(); switch (e_button(e)) { case 1: if (start) leftButtonDown(cm, e, start); else if (e_target(e) == display.scroller) e_preventDefault(e); break; case 2: if (webkit) cm.state.lastMiddleDown = +new Date; if (start) extendSelection(cm.doc, start); setTimeout(function() {display.input.focus();}, 20); e_preventDefault(e); break; case 3: if (captureRightClick) onContextMenu(cm, e); break; } } var lastClick, lastDoubleClick; function leftButtonDown(cm, e, start) { if (ie) setTimeout(bind(ensureFocus, cm), 0); else ensureFocus(cm); var now = +new Date, type; if (lastDoubleClick && lastDoubleClick.time > now - 400 && cmp(lastDoubleClick.pos, start) == 0) { type = "triple"; } else if (lastClick && lastClick.time > now - 400 && cmp(lastClick.pos, start) == 0) { type = "double"; lastDoubleClick = {time: now, pos: start}; } else { type = "single"; lastClick = {time: now, pos: start}; } var sel = cm.doc.sel, modifier = mac ? e.metaKey : e.ctrlKey, contained; if (cm.options.dragDrop && dragAndDrop && !isReadOnly(cm) && type == "single" && (contained = sel.contains(start)) > -1 && !sel.ranges[contained].empty()) leftButtonStartDrag(cm, e, start, modifier); else leftButtonSelect(cm, e, start, type, modifier); } // Start a text drag. When it ends, see if any dragging actually // happen, and treat as a click if it didn't. function leftButtonStartDrag(cm, e, start, modifier) { var display = cm.display; var dragEnd = operation(cm, function(e2) { if (webkit) display.scroller.draggable = false; cm.state.draggingText = false; off(document, "mouseup", dragEnd); off(display.scroller, "drop", dragEnd); if (Math.abs(e.clientX - e2.clientX) + Math.abs(e.clientY - e2.clientY) < 10) { e_preventDefault(e2); if (!modifier) extendSelection(cm.doc, start); display.input.focus(); // Work around unexplainable focus problem in IE9 (#2127) if (ie && ie_version == 9) setTimeout(function() {document.body.focus(); display.input.focus();}, 20); } }); // Let the drag handler handle this. if (webkit) display.scroller.draggable = true; cm.state.draggingText = dragEnd; // IE's approach to draggable if (display.scroller.dragDrop) display.scroller.dragDrop(); on(document, "mouseup", dragEnd); on(display.scroller, "drop", dragEnd); } // Normal selection, as opposed to text dragging. function leftButtonSelect(cm, e, start, type, addNew) { var display = cm.display, doc = cm.doc; e_preventDefault(e); var ourRange, ourIndex, startSel = doc.sel, ranges = startSel.ranges; if (addNew && !e.shiftKey) { ourIndex = doc.sel.contains(start); if (ourIndex > -1) ourRange = ranges[ourIndex]; else ourRange = new Range(start, start); } else { ourRange = doc.sel.primary(); } if (e.altKey) { type = "rect"; if (!addNew) ourRange = new Range(start, start); start = posFromMouse(cm, e, true, true); ourIndex = -1; } else if (type == "double") { var word = cm.findWordAt(start); if (cm.display.shift || doc.extend) ourRange = extendRange(doc, ourRange, word.anchor, word.head); else ourRange = word; } else if (type == "triple") { var line = new Range(Pos(start.line, 0), clipPos(doc, Pos(start.line + 1, 0))); if (cm.display.shift || doc.extend) ourRange = extendRange(doc, ourRange, line.anchor, line.head); else ourRange = line; } else { ourRange = extendRange(doc, ourRange, start); } if (!addNew) { ourIndex = 0; setSelection(doc, new Selection([ourRange], 0), sel_mouse); startSel = doc.sel; } else if (ourIndex == -1) { ourIndex = ranges.length; setSelection(doc, normalizeSelection(ranges.concat([ourRange]), ourIndex), {scroll: false, origin: "*mouse"}); } else if (ranges.length > 1 && ranges[ourIndex].empty() && type == "single") { setSelection(doc, normalizeSelection(ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0)); startSel = doc.sel; } else { replaceOneSelection(doc, ourIndex, ourRange, sel_mouse); } var lastPos = start; function extendTo(pos) { if (cmp(lastPos, pos) == 0) return; lastPos = pos; if (type == "rect") { var ranges = [], tabSize = cm.options.tabSize; var startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize); var posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize); var left = Math.min(startCol, posCol), right = Math.max(startCol, posCol); for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line)); line <= end; line++) { var text = getLine(doc, line).text, leftPos = findColumn(text, left, tabSize); if (left == right) ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos))); else if (text.length > leftPos) ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize)))); } if (!ranges.length) ranges.push(new Range(start, start)); setSelection(doc, normalizeSelection(startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex), {origin: "*mouse", scroll: false}); cm.scrollIntoView(pos); } else { var oldRange = ourRange; var anchor = oldRange.anchor, head = pos; if (type != "single") { if (type == "double") var range = cm.findWordAt(pos); else var range = new Range(Pos(pos.line, 0), clipPos(doc, Pos(pos.line + 1, 0))); if (cmp(range.anchor, anchor) > 0) { head = range.head; anchor = minPos(oldRange.from(), range.anchor); } else { head = range.anchor; anchor = maxPos(oldRange.to(), range.head); } } var ranges = startSel.ranges.slice(0); ranges[ourIndex] = new Range(clipPos(doc, anchor), head); setSelection(doc, normalizeSelection(ranges, ourIndex), sel_mouse); } } var editorSize = display.wrapper.getBoundingClientRect(); // Used to ensure timeout re-tries don't fire when another extend // happened in the meantime (clearTimeout isn't reliable -- at // least on Chrome, the timeouts still happen even when cleared, // if the clear happens after their scheduled firing time). var counter = 0; function extend(e) { var curCount = ++counter; var cur = posFromMouse(cm, e, true, type == "rect"); if (!cur) return; if (cmp(cur, lastPos) != 0) { ensureFocus(cm); extendTo(cur); var visible = visibleLines(display, doc); if (cur.line >= visible.to || cur.line < visible.from) setTimeout(operation(cm, function(){if (counter == curCount) extend(e);}), 150); } else { var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0; if (outside) setTimeout(operation(cm, function() { if (counter != curCount) return; display.scroller.scrollTop += outside; extend(e); }), 50); } } function done(e) { counter = Infinity; e_preventDefault(e); display.input.focus(); off(document, "mousemove", move); off(document, "mouseup", up); doc.history.lastSelOrigin = null; } var move = operation(cm, function(e) { if (!e_button(e)) done(e); else extend(e); }); var up = operation(cm, done); on(document, "mousemove", move); on(document, "mouseup", up); } // Determines whether an event happened in the gutter, and fires the // handlers for the corresponding event. function gutterEvent(cm, e, type, prevent, signalfn) { try { var mX = e.clientX, mY = e.clientY; } catch(e) { return false; } if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) return false; if (prevent) e_preventDefault(e); var display = cm.display; var lineBox = display.lineDiv.getBoundingClientRect(); if (mY > lineBox.bottom || !hasHandler(cm, type)) return e_defaultPrevented(e); mY -= lineBox.top - display.viewOffset; for (var i = 0; i < cm.options.gutters.length; ++i) { var g = display.gutters.childNodes[i]; if (g && g.getBoundingClientRect().right >= mX) { var line = lineAtHeight(cm.doc, mY); var gutter = cm.options.gutters[i]; signalfn(cm, type, cm, line, gutter, e); return e_defaultPrevented(e); } } } function clickInGutter(cm, e) { return gutterEvent(cm, e, "gutterClick", true, signalLater); } // Kludge to work around strange IE behavior where it'll sometimes // re-fire a series of drag-related events right after the drop (#1551) var lastDrop = 0; function onDrop(e) { var cm = this; if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) return; e_preventDefault(e); if (ie) lastDrop = +new Date; var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files; if (!pos || isReadOnly(cm)) return; // Might be a file drop, in which case we simply extract the text // and insert it. if (files && files.length && window.FileReader && window.File) { var n = files.length, text = Array(n), read = 0; var loadFile = function(file, i) { var reader = new FileReader; reader.onload = operation(cm, function() { text[i] = reader.result; if (++read == n) { pos = clipPos(cm.doc, pos); var change = {from: pos, to: pos, text: splitLines(text.join("\n")), origin: "paste"}; makeChange(cm.doc, change); setSelectionReplaceHistory(cm.doc, simpleSelection(pos, changeEnd(change))); } }); reader.readAsText(file); }; for (var i = 0; i < n; ++i) loadFile(files[i], i); } else { // Normal drop // Don't do a replace if the drop happened inside of the selected text. if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) { cm.state.draggingText(e); // Ensure the editor is re-focused setTimeout(function() {cm.display.input.focus();}, 20); return; } try { var text = e.dataTransfer.getData("Text"); if (text) { if (cm.state.draggingText && !(mac ? e.metaKey : e.ctrlKey)) var selected = cm.listSelections(); setSelectionNoUndo(cm.doc, simpleSelection(pos, pos)); if (selected) for (var i = 0; i < selected.length; ++i) replaceRange(cm.doc, "", selected[i].anchor, selected[i].head, "drag"); cm.replaceSelection(text, "around", "paste"); cm.display.input.focus(); } } catch(e){} } } function onDragStart(cm, e) { if (ie && (!cm.state.draggingText || +new Date - lastDrop < 100)) { e_stop(e); return; } if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) return; e.dataTransfer.setData("Text", cm.getSelection()); // Use dummy image instead of default browsers image. // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there. if (e.dataTransfer.setDragImage && !safari) { var img = elt("img", null, null, "position: fixed; left: 0; top: 0;"); img.src = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="; if (presto) { img.width = img.height = 1; cm.display.wrapper.appendChild(img); // Force a relayout, or Opera won't use our image for some obscure reason img._top = img.offsetTop; } e.dataTransfer.setDragImage(img, 0, 0); if (presto) img.parentNode.removeChild(img); } } // SCROLL EVENTS // Sync the scrollable area and scrollbars, ensure the viewport // covers the visible area. function setScrollTop(cm, val) { if (Math.abs(cm.doc.scrollTop - val) < 2) return; cm.doc.scrollTop = val; if (!gecko) updateDisplaySimple(cm, {top: val}); if (cm.display.scroller.scrollTop != val) cm.display.scroller.scrollTop = val; cm.display.scrollbars.setScrollTop(val); if (gecko) updateDisplaySimple(cm); startWorker(cm, 100); } // Sync scroller and scrollbar, ensure the gutter elements are // aligned. function setScrollLeft(cm, val, isScroller) { if (isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) return; val = Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth); cm.doc.scrollLeft = val; alignHorizontally(cm); if (cm.display.scroller.scrollLeft != val) cm.display.scroller.scrollLeft = val; cm.display.scrollbars.setScrollLeft(val); } // Since the delta values reported on mouse wheel events are // unstandardized between browsers and even browser versions, and // generally horribly unpredictable, this code starts by measuring // the scroll effect that the first few mouse wheel events have, // and, from that, detects the way it can convert deltas to pixel // offsets afterwards. // // The reason we want to know the amount a wheel event will scroll // is that it gives us a chance to update the display before the // actual scrolling happens, reducing flickering. var wheelSamples = 0, wheelPixelsPerUnit = null; // Fill in a browser-detected starting value on browsers where we // know one. These don't have to be accurate -- the result of them // being wrong would just be a slight flicker on the first wheel // scroll (if it is large enough). if (ie) wheelPixelsPerUnit = -.53; else if (gecko) wheelPixelsPerUnit = 15; else if (chrome) wheelPixelsPerUnit = -.7; else if (safari) wheelPixelsPerUnit = -1/3; var wheelEventDelta = function(e) { var dx = e.wheelDeltaX, dy = e.wheelDeltaY; if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) dx = e.detail; if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) dy = e.detail; else if (dy == null) dy = e.wheelDelta; return {x: dx, y: dy}; }; CodeMirror.wheelEventPixels = function(e) { var delta = wheelEventDelta(e); delta.x *= wheelPixelsPerUnit; delta.y *= wheelPixelsPerUnit; return delta; }; function onScrollWheel(cm, e) { var delta = wheelEventDelta(e), dx = delta.x, dy = delta.y; var display = cm.display, scroll = display.scroller; // Quit if there's nothing to scroll here if (!(dx && scroll.scrollWidth > scroll.clientWidth || dy && scroll.scrollHeight > scroll.clientHeight)) return; // Webkit browsers on OS X abort momentum scrolls when the target // of the scroll event is removed from the scrollable element. // This hack (see related code in patchDisplay) makes sure the // element is kept around. if (dy && mac && webkit) { outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) { for (var i = 0; i < view.length; i++) { if (view[i].node == cur) { cm.display.currentWheelTarget = cur; break outer; } } } } // On some browsers, horizontal scrolling will cause redraws to // happen before the gutter has been realigned, causing it to // wriggle around in a most unseemly way. When we have an // estimated pixels/delta value, we just handle horizontal // scrolling entirely here. It'll be slightly off from native, but // better than glitching out. if (dx && !gecko && !presto && wheelPixelsPerUnit != null) { if (dy) setScrollTop(cm, Math.max(0, Math.min(scroll.scrollTop + dy * wheelPixelsPerUnit, scroll.scrollHeight - scroll.clientHeight))); setScrollLeft(cm, Math.max(0, Math.min(scroll.scrollLeft + dx * wheelPixelsPerUnit, scroll.scrollWidth - scroll.clientWidth))); e_preventDefault(e); display.wheelStartX = null; // Abort measurement, if in progress return; } // 'Project' the visible viewport to cover the area that is being // scrolled into view (if we know enough to estimate it). if (dy && wheelPixelsPerUnit != null) { var pixels = dy * wheelPixelsPerUnit; var top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight; if (pixels < 0) top = Math.max(0, top + pixels - 50); else bot = Math.min(cm.doc.height, bot + pixels + 50); updateDisplaySimple(cm, {top: top, bottom: bot}); } if (wheelSamples < 20) { if (display.wheelStartX == null) { display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop; display.wheelDX = dx; display.wheelDY = dy; setTimeout(function() { if (display.wheelStartX == null) return; var movedX = scroll.scrollLeft - display.wheelStartX; var movedY = scroll.scrollTop - display.wheelStartY; var sample = (movedY && display.wheelDY && movedY / display.wheelDY) || (movedX && display.wheelDX && movedX / display.wheelDX); display.wheelStartX = display.wheelStartY = null; if (!sample) return; wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1); ++wheelSamples; }, 200); } else { display.wheelDX += dx; display.wheelDY += dy; } } } // KEY EVENTS // Run a handler that was bound to a key. function doHandleBinding(cm, bound, dropShift) { if (typeof bound == "string") { bound = commands[bound]; if (!bound) return false; } // Ensure previous input has been read, so that the handler sees a // consistent view of the document cm.display.input.ensurePolled(); var prevShift = cm.display.shift, done = false; try { if (isReadOnly(cm)) cm.state.suppressEdits = true; if (dropShift) cm.display.shift = false; done = bound(cm) != Pass; } finally { cm.display.shift = prevShift; cm.state.suppressEdits = false; } return done; } function lookupKeyForEditor(cm, name, handle) { for (var i = 0; i < cm.state.keyMaps.length; i++) { var result = lookupKey(name, cm.state.keyMaps[i], handle, cm); if (result) return result; } return (cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm)) || lookupKey(name, cm.options.keyMap, handle, cm); } var stopSeq = new Delayed; function dispatchKey(cm, name, e, handle) { var seq = cm.state.keySeq; if (seq) { if (isModifierKey(name)) return "handled"; stopSeq.set(50, function() { if (cm.state.keySeq == seq) { cm.state.keySeq = null; cm.display.input.reset(); } }); name = seq + " " + name; } var result = lookupKeyForEditor(cm, name, handle); if (result == "multi") cm.state.keySeq = name; if (result == "handled") signalLater(cm, "keyHandled", cm, name, e); if (result == "handled" || result == "multi") { e_preventDefault(e); restartBlink(cm); } if (seq && !result && /\'$/.test(name)) { e_preventDefault(e); return true; } return !!result; } // Handle a key from the keydown event. function handleKeyBinding(cm, e) { var name = keyName(e, true); if (!name) return false; if (e.shiftKey && !cm.state.keySeq) { // First try to resolve full name (including 'Shift-'). Failing // that, see if there is a cursor-motion command (starting with // 'go') bound to the keyname without 'Shift-'. return dispatchKey(cm, "Shift-" + name, e, function(b) {return doHandleBinding(cm, b, true);}) || dispatchKey(cm, name, e, function(b) { if (typeof b == "string" ? /^go[A-Z]/.test(b) : b.motion) return doHandleBinding(cm, b); }); } else { return dispatchKey(cm, name, e, function(b) { return doHandleBinding(cm, b); }); } } // Handle a key from the keypress event function handleCharBinding(cm, e, ch) { return dispatchKey(cm, "'" + ch + "'", e, function(b) { return doHandleBinding(cm, b, true); }); } var lastStoppedKey = null; function onKeyDown(e) { var cm = this; ensureFocus(cm); if (signalDOMEvent(cm, e)) return; // IE does strange things with escape. if (ie && ie_version < 11 && e.keyCode == 27) e.returnValue = false; var code = e.keyCode; cm.display.shift = code == 16 || e.shiftKey; var handled = handleKeyBinding(cm, e); if (presto) { lastStoppedKey = handled ? code : null; // Opera has no cut event... we try to at least catch the key combo if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey)) cm.replaceSelection("", null, "cut"); } // Turn mouse into crosshair when Alt is held on Mac. if (code == 18 && !/\bCodeMirror-crosshair\b/.test(cm.display.lineDiv.className)) showCrossHair(cm); } function showCrossHair(cm) { var lineDiv = cm.display.lineDiv; addClass(lineDiv, "CodeMirror-crosshair"); function up(e) { if (e.keyCode == 18 || !e.altKey) { rmClass(lineDiv, "CodeMirror-crosshair"); off(document, "keyup", up); off(document, "mouseover", up); } } on(document, "keyup", up); on(document, "mouseover", up); } function onKeyUp(e) { if (e.keyCode == 16) this.doc.sel.shift = false; signalDOMEvent(this, e); } function onKeyPress(e) { var cm = this; if (eventInWidget(cm.display, e) || signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) return; var keyCode = e.keyCode, charCode = e.charCode; if (presto && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return;} if ((presto && (!e.which || e.which < 10)) && handleKeyBinding(cm, e)) return; var ch = String.fromCharCode(charCode == null ? keyCode : charCode); if (handleCharBinding(cm, e, ch)) return; cm.display.input.onKeyPress(e); } // FOCUS/BLUR EVENTS function onFocus(cm) { if (cm.options.readOnly == "nocursor") return; if (!cm.state.focused) { signal(cm, "focus", cm); cm.state.focused = true; addClass(cm.display.wrapper, "CodeMirror-focused"); // This test prevents this from firing when a context // menu is closed (since the input reset would kill the // select-all detection hack) if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) { cm.display.input.reset(); if (webkit) setTimeout(function() { cm.display.input.reset(true); }, 20); // Issue #1730 } cm.display.input.receivedFocus(); } restartBlink(cm); } function onBlur(cm) { if (cm.state.focused) { signal(cm, "blur", cm); cm.state.focused = false; rmClass(cm.display.wrapper, "CodeMirror-focused"); } clearInterval(cm.display.blinker); setTimeout(function() {if (!cm.state.focused) cm.display.shift = false;}, 150); } // CONTEXT MENU HANDLING // To make the context menu work, we need to briefly unhide the // textarea (making it as unobtrusive as possible) to let the // right-click take effect on it. function onContextMenu(cm, e) { if (eventInWidget(cm.display, e) || contextMenuInGutter(cm, e)) return; cm.display.input.onContextMenu(e); } function contextMenuInGutter(cm, e) { if (!hasHandler(cm, "gutterContextMenu")) return false; return gutterEvent(cm, e, "gutterContextMenu", false, signal); } // UPDATING // Compute the position of the end of a change (its 'to' property // refers to the pre-change end). var changeEnd = CodeMirror.changeEnd = function(change) { if (!change.text) return change.to; return Pos(change.from.line + change.text.length - 1, lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0)); }; // Adjust a position to refer to the post-change position of the // same text, or the end of the change if the change covers it. function adjustForChange(pos, change) { if (cmp(pos, change.from) < 0) return pos; if (cmp(pos, change.to) <= 0) return changeEnd(change); var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, ch = pos.ch; if (pos.line == change.to.line) ch += changeEnd(change).ch - change.to.ch; return Pos(line, ch); } function computeSelAfterChange(doc, change) { var out = []; for (var i = 0; i < doc.sel.ranges.length; i++) { var range = doc.sel.ranges[i]; out.push(new Range(adjustForChange(range.anchor, change), adjustForChange(range.head, change))); } return normalizeSelection(out, doc.sel.primIndex); } function offsetPos(pos, old, nw) { if (pos.line == old.line) return Pos(nw.line, pos.ch - old.ch + nw.ch); else return Pos(nw.line + (pos.line - old.line), pos.ch); } // Used by replaceSelections to allow moving the selection to the // start or around the replaced test. Hint may be "start" or "around". function computeReplacedSel(doc, changes, hint) { var out = []; var oldPrev = Pos(doc.first, 0), newPrev = oldPrev; for (var i = 0; i < changes.length; i++) { var change = changes[i]; var from = offsetPos(change.from, oldPrev, newPrev); var to = offsetPos(changeEnd(change), oldPrev, newPrev); oldPrev = change.to; newPrev = to; if (hint == "around") { var range = doc.sel.ranges[i], inv = cmp(range.head, range.anchor) < 0; out[i] = new Range(inv ? to : from, inv ? from : to); } else { out[i] = new Range(from, from); } } return new Selection(out, doc.sel.primIndex); } // Allow "beforeChange" event handlers to influence a change function filterChange(doc, change, update) { var obj = { canceled: false, from: change.from, to: change.to, text: change.text, origin: change.origin, cancel: function() { this.canceled = true; } }; if (update) obj.update = function(from, to, text, origin) { if (from) this.from = clipPos(doc, from); if (to) this.to = clipPos(doc, to); if (text) this.text = text; if (origin !== undefined) this.origin = origin; }; signal(doc, "beforeChange", doc, obj); if (doc.cm) signal(doc.cm, "beforeChange", doc.cm, obj); if (obj.canceled) return null; return {from: obj.from, to: obj.to, text: obj.text, origin: obj.origin}; } // Apply a change to a document, and add it to the document's // history, and propagating it to all linked documents. function makeChange(doc, change, ignoreReadOnly) { if (doc.cm) { if (!doc.cm.curOp) return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly); if (doc.cm.state.suppressEdits) return; } if (hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange")) { change = filterChange(doc, change, true); if (!change) return; } // Possibly split or suppress the update based on the presence // of read-only spans in its range. var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to); if (split) { for (var i = split.length - 1; i >= 0; --i) makeChangeInner(doc, {from: split[i].from, to: split[i].to, text: i ? [""] : change.text}); } else { makeChangeInner(doc, change); } } function makeChangeInner(doc, change) { if (change.text.length == 1 && change.text[0] == "" && cmp(change.from, change.to) == 0) return; var selAfter = computeSelAfterChange(doc, change); addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN); makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change)); var rebased = []; linkedDocs(doc, function(doc, sharedHist) { if (!sharedHist && indexOf(rebased, doc.history) == -1) { rebaseHist(doc.history, change); rebased.push(doc.history); } makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change)); }); } // Revert a change stored in a document's history. function makeChangeFromHistory(doc, type, allowSelectionOnly) { if (doc.cm && doc.cm.state.suppressEdits) return; var hist = doc.history, event, selAfter = doc.sel; var source = type == "undo" ? hist.done : hist.undone, dest = type == "undo" ? hist.undone : hist.done; // Verify that there is a useable event (so that ctrl-z won't // needlessly clear selection events) for (var i = 0; i < source.length; i++) { event = source[i]; if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges) break; } if (i == source.length) return; hist.lastOrigin = hist.lastSelOrigin = null; for (;;) { event = source.pop(); if (event.ranges) { pushSelectionToHistory(event, dest); if (allowSelectionOnly && !event.equals(doc.sel)) { setSelection(doc, event, {clearRedo: false}); return; } selAfter = event; } else break; } // Build up a reverse change object to add to the opposite history // stack (redo when undoing, and vice versa). var antiChanges = []; pushSelectionToHistory(selAfter, dest); dest.push({changes: antiChanges, generation: hist.generation}); hist.generation = event.generation || ++hist.maxGeneration; var filter = hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange"); for (var i = event.changes.length - 1; i >= 0; --i) { var change = event.changes[i]; change.origin = type; if (filter && !filterChange(doc, change, false)) { source.length = 0; return; } antiChanges.push(historyChangeFromChange(doc, change)); var after = i ? computeSelAfterChange(doc, change) : lst(source); makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change)); if (!i && doc.cm) doc.cm.scrollIntoView({from: change.from, to: changeEnd(change)}); var rebased = []; // Propagate to the linked documents linkedDocs(doc, function(doc, sharedHist) { if (!sharedHist && indexOf(rebased, doc.history) == -1) { rebaseHist(doc.history, change); rebased.push(doc.history); } makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change)); }); } } // Sub-views need their line numbers shifted when text is added // above or below them in the parent document. function shiftDoc(doc, distance) { if (distance == 0) return; doc.first += distance; doc.sel = new Selection(map(doc.sel.ranges, function(range) { return new Range(Pos(range.anchor.line + distance, range.anchor.ch), Pos(range.head.line + distance, range.head.ch)); }), doc.sel.primIndex); if (doc.cm) { regChange(doc.cm, doc.first, doc.first - distance, distance); for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++) regLineChange(doc.cm, l, "gutter"); } } // More lower-level change function, handling only a single document // (not linked ones). function makeChangeSingleDoc(doc, change, selAfter, spans) { if (doc.cm && !doc.cm.curOp) return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans); if (change.to.line < doc.first) { shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line)); return; } if (change.from.line > doc.lastLine()) return; // Clip the change to the size of this doc if (change.from.line < doc.first) { var shift = change.text.length - 1 - (doc.first - change.from.line); shiftDoc(doc, shift); change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch), text: [lst(change.text)], origin: change.origin}; } var last = doc.lastLine(); if (change.to.line > last) { change = {from: change.from, to: Pos(last, getLine(doc, last).text.length), text: [change.text[0]], origin: change.origin}; } change.removed = getBetween(doc, change.from, change.to); if (!selAfter) selAfter = computeSelAfterChange(doc, change); if (doc.cm) makeChangeSingleDocInEditor(doc.cm, change, spans); else updateDoc(doc, change, spans); setSelectionNoUndo(doc, selAfter, sel_dontScroll); } // Handle the interaction of a change to a document with the editor // that this document is part of. function makeChangeSingleDocInEditor(cm, change, spans) { var doc = cm.doc, display = cm.display, from = change.from, to = change.to; var recomputeMaxLength = false, checkWidthStart = from.line; if (!cm.options.lineWrapping) { checkWidthStart = lineNo(visualLine(getLine(doc, from.line))); doc.iter(checkWidthStart, to.line + 1, function(line) { if (line == display.maxLine) { recomputeMaxLength = true; return true; } }); } if (doc.sel.contains(change.from, change.to) > -1) signalCursorActivity(cm); updateDoc(doc, change, spans, estimateHeight(cm)); if (!cm.options.lineWrapping) { doc.iter(checkWidthStart, from.line + change.text.length, function(line) { var len = lineLength(line); if (len > display.maxLineLength) { display.maxLine = line; display.maxLineLength = len; display.maxLineChanged = true; recomputeMaxLength = false; } }); if (recomputeMaxLength) cm.curOp.updateMaxLine = true; } // Adjust frontier, schedule worker doc.frontier = Math.min(doc.frontier, from.line); startWorker(cm, 400); var lendiff = change.text.length - (to.line - from.line) - 1; // Remember that these lines changed, for updating the display if (change.full) regChange(cm); else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change)) regLineChange(cm, from.line, "text"); else regChange(cm, from.line, to.line + 1, lendiff); var changesHandler = hasHandler(cm, "changes"), changeHandler = hasHandler(cm, "change"); if (changeHandler || changesHandler) { var obj = { from: from, to: to, text: change.text, removed: change.removed, origin: change.origin }; if (changeHandler) signalLater(cm, "change", cm, obj); if (changesHandler) (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj); } cm.display.selForContextMenu = null; } function replaceRange(doc, code, from, to, origin) { if (!to) to = from; if (cmp(to, from) < 0) { var tmp = to; to = from; from = tmp; } if (typeof code == "string") code = splitLines(code); makeChange(doc, {from: from, to: to, text: code, origin: origin}); } // SCROLLING THINGS INTO VIEW // If an editor sits on the top or bottom of the window, partially // scrolled out of view, this ensures that the cursor is visible. function maybeScrollWindow(cm, coords) { if (signalDOMEvent(cm, "scrollCursorIntoView")) return; var display = cm.display, box = display.sizer.getBoundingClientRect(), doScroll = null; if (coords.top + box.top < 0) doScroll = true; else if (coords.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) doScroll = false; if (doScroll != null && !phantom) { var scrollNode = elt("div", "\u200b", null, "position: absolute; top: " + (coords.top - display.viewOffset - paddingTop(cm.display)) + "px; height: " + (coords.bottom - coords.top + scrollGap(cm) + display.barHeight) + "px; left: " + coords.left + "px; width: 2px;"); cm.display.lineSpace.appendChild(scrollNode); scrollNode.scrollIntoView(doScroll); cm.display.lineSpace.removeChild(scrollNode); } } // Scroll a given position into view (immediately), verifying that // it actually became visible (as line heights are accurately // measured, the position of something may 'drift' during drawing). function scrollPosIntoView(cm, pos, end, margin) { if (margin == null) margin = 0; for (var limit = 0; limit < 5; limit++) { var changed = false, coords = cursorCoords(cm, pos); var endCoords = !end || end == pos ? coords : cursorCoords(cm, end); var scrollPos = calculateScrollPos(cm, Math.min(coords.left, endCoords.left), Math.min(coords.top, endCoords.top) - margin, Math.max(coords.left, endCoords.left), Math.max(coords.bottom, endCoords.bottom) + margin); var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft; if (scrollPos.scrollTop != null) { setScrollTop(cm, scrollPos.scrollTop); if (Math.abs(cm.doc.scrollTop - startTop) > 1) changed = true; } if (scrollPos.scrollLeft != null) { setScrollLeft(cm, scrollPos.scrollLeft); if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) changed = true; } if (!changed) break; } return coords; } // Scroll a given set of coordinates into view (immediately). function scrollIntoView(cm, x1, y1, x2, y2) { var scrollPos = calculateScrollPos(cm, x1, y1, x2, y2); if (scrollPos.scrollTop != null) setScrollTop(cm, scrollPos.scrollTop); if (scrollPos.scrollLeft != null) setScrollLeft(cm, scrollPos.scrollLeft); } // Calculate a new scroll position needed to scroll the given // rectangle into view. Returns an object with scrollTop and // scrollLeft properties. When these are undefined, the // vertical/horizontal position does not need to be adjusted. function calculateScrollPos(cm, x1, y1, x2, y2) { var display = cm.display, snapMargin = textHeight(cm.display); if (y1 < 0) y1 = 0; var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop; var screen = displayHeight(cm), result = {}; if (y2 - y1 > screen) y2 = y1 + screen; var docBottom = cm.doc.height + paddingVert(display); var atTop = y1 < snapMargin, atBottom = y2 > docBottom - snapMargin; if (y1 < screentop) { result.scrollTop = atTop ? 0 : y1; } else if (y2 > screentop + screen) { var newTop = Math.min(y1, (atBottom ? docBottom : y2) - screen); if (newTop != screentop) result.scrollTop = newTop; } var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft; var screenw = displayWidth(cm) - (cm.options.fixedGutter ? display.gutters.offsetWidth : 0); var tooWide = x2 - x1 > screenw; if (tooWide) x2 = x1 + screenw; if (x1 < 10) result.scrollLeft = 0; else if (x1 < screenleft) result.scrollLeft = Math.max(0, x1 - (tooWide ? 0 : 10)); else if (x2 > screenw + screenleft - 3) result.scrollLeft = x2 + (tooWide ? 0 : 10) - screenw; return result; } // Store a relative adjustment to the scroll position in the current // operation (to be applied when the operation finishes). function addToScrollPos(cm, left, top) { if (left != null || top != null) resolveScrollToPos(cm); if (left != null) cm.curOp.scrollLeft = (cm.curOp.scrollLeft == null ? cm.doc.scrollLeft : cm.curOp.scrollLeft) + left; if (top != null) cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top; } // Make sure that at the end of the operation the current cursor is // shown. function ensureCursorVisible(cm) { resolveScrollToPos(cm); var cur = cm.getCursor(), from = cur, to = cur; if (!cm.options.lineWrapping) { from = cur.ch ? Pos(cur.line, cur.ch - 1) : cur; to = Pos(cur.line, cur.ch + 1); } cm.curOp.scrollToPos = {from: from, to: to, margin: cm.options.cursorScrollMargin, isCursor: true}; } // When an operation has its scrollToPos property set, and another // scroll action is applied before the end of the operation, this // 'simulates' scrolling that position into view in a cheap way, so // that the effect of intermediate scroll commands is not ignored. function resolveScrollToPos(cm) { var range = cm.curOp.scrollToPos; if (range) { cm.curOp.scrollToPos = null; var from = estimateCoords(cm, range.from), to = estimateCoords(cm, range.to); var sPos = calculateScrollPos(cm, Math.min(from.left, to.left), Math.min(from.top, to.top) - range.margin, Math.max(from.right, to.right), Math.max(from.bottom, to.bottom) + range.margin); cm.scrollTo(sPos.scrollLeft, sPos.scrollTop); } } // API UTILITIES // Indent the given line. The how parameter can be "smart", // "add"/null, "subtract", or "prev". When aggressive is false // (typically set to true for forced single-line indents), empty // lines are not indented, and places where the mode returns Pass // are left alone. function indentLine(cm, n, how, aggressive) { var doc = cm.doc, state; if (how == null) how = "add"; if (how == "smart") { // Fall back to "prev" when the mode doesn't have an indentation // method. if (!doc.mode.indent) how = "prev"; else state = getStateBefore(cm, n); } var tabSize = cm.options.tabSize; var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize); if (line.stateAfter) line.stateAfter = null; var curSpaceString = line.text.match(/^\s*/)[0], indentation; if (!aggressive && !/\S/.test(line.text)) { indentation = 0; how = "not"; } else if (how == "smart") { indentation = doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text); if (indentation == Pass || indentation > 150) { if (!aggressive) return; how = "prev"; } } if (how == "prev") { if (n > doc.first) indentation = countColumn(getLine(doc, n-1).text, null, tabSize); else indentation = 0; } else if (how == "add") { indentation = curSpace + cm.options.indentUnit; } else if (how == "subtract") { indentation = curSpace - cm.options.indentUnit; } else if (typeof how == "number") { indentation = curSpace + how; } indentation = Math.max(0, indentation); var indentString = "", pos = 0; if (cm.options.indentWithTabs) for (var i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += "\t";} if (pos < indentation) indentString += spaceStr(indentation - pos); if (indentString != curSpaceString) { replaceRange(doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), "+input"); } else { // Ensure that, if the cursor was in the whitespace at the start // of the line, it is moved to the end of that space. for (var i = 0; i < doc.sel.ranges.length; i++) { var range = doc.sel.ranges[i]; if (range.head.line == n && range.head.ch < curSpaceString.length) { var pos = Pos(n, curSpaceString.length); replaceOneSelection(doc, i, new Range(pos, pos)); break; } } } line.stateAfter = null; } // Utility for applying a change to a line by handle or number, // returning the number and optionally registering the line as // changed. function changeLine(doc, handle, changeType, op) { var no = handle, line = handle; if (typeof handle == "number") line = getLine(doc, clipLine(doc, handle)); else no = lineNo(handle); if (no == null) return null; if (op(line, no) && doc.cm) regLineChange(doc.cm, no, changeType); return line; } // Helper for deleting text near the selection(s), used to implement // backspace, delete, and similar functionality. function deleteNearSelection(cm, compute) { var ranges = cm.doc.sel.ranges, kill = []; // Build up a set of ranges to kill first, merging overlapping // ranges. for (var i = 0; i < ranges.length; i++) { var toKill = compute(ranges[i]); while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) { var replaced = kill.pop(); if (cmp(replaced.from, toKill.from) < 0) { toKill.from = replaced.from; break; } } kill.push(toKill); } // Next, remove those actual ranges. runInOp(cm, function() { for (var i = kill.length - 1; i >= 0; i--) replaceRange(cm.doc, "", kill[i].from, kill[i].to, "+delete"); ensureCursorVisible(cm); }); } // Used for horizontal relative motion. Dir is -1 or 1 (left or // right), unit can be "char", "column" (like char, but doesn't // cross line boundaries), "word" (across next word), or "group" (to // the start of next group of word or non-word-non-whitespace // chars). The visually param controls whether, in right-to-left // text, direction 1 means to move towards the next index in the // string, or towards the character to the right of the current // position. The resulting position will have a hitSide=true // property if it reached the end of the document. function findPosH(doc, pos, dir, unit, visually) { var line = pos.line, ch = pos.ch, origDir = dir; var lineObj = getLine(doc, line); var possible = true; function findNextLine() { var l = line + dir; if (l < doc.first || l >= doc.first + doc.size) return (possible = false); line = l; return lineObj = getLine(doc, l); } function moveOnce(boundToLine) { var next = (visually ? moveVisually : moveLogically)(lineObj, ch, dir, true); if (next == null) { if (!boundToLine && findNextLine()) { if (visually) ch = (dir < 0 ? lineRight : lineLeft)(lineObj); else ch = dir < 0 ? lineObj.text.length : 0; } else return (possible = false); } else ch = next; return true; } if (unit == "char") moveOnce(); else if (unit == "column") moveOnce(true); else if (unit == "word" || unit == "group") { var sawType = null, group = unit == "group"; var helper = doc.cm && doc.cm.getHelper(pos, "wordChars"); for (var first = true;; first = false) { if (dir < 0 && !moveOnce(!first)) break; var cur = lineObj.text.charAt(ch) || "\n"; var type = isWordChar(cur, helper) ? "w" : group && cur == "\n" ? "n" : !group || /\s/.test(cur) ? null : "p"; if (group && !first && !type) type = "s"; if (sawType && sawType != type) { if (dir < 0) {dir = 1; moveOnce();} break; } if (type) sawType = type; if (dir > 0 && !moveOnce(!first)) break; } } var result = skipAtomic(doc, Pos(line, ch), origDir, true); if (!possible) result.hitSide = true; return result; } // For relative vertical movement. Dir may be -1 or 1. Unit can be // "page" or "line". The resulting position will have a hitSide=true // property if it reached the end of the document. function findPosV(cm, pos, dir, unit) { var doc = cm.doc, x = pos.left, y; if (unit == "page") { var pageSize = Math.min(cm.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight); y = pos.top + dir * (pageSize - (dir < 0 ? 1.5 : .5) * textHeight(cm.display)); } else if (unit == "line") { y = dir > 0 ? pos.bottom + 3 : pos.top - 3; } for (;;) { var target = coordsChar(cm, x, y); if (!target.outside) break; if (dir < 0 ? y <= 0 : y >= doc.height) { target.hitSide = true; break; } y += dir * 5; } return target; } // EDITOR METHODS // The publicly visible API. Note that methodOp(f) means // 'wrap f in an operation, performed on its `this` parameter'. // This is not the complete set of editor methods. Most of the // methods defined on the Doc type are also injected into // CodeMirror.prototype, for backwards compatibility and // convenience. CodeMirror.prototype = { constructor: CodeMirror, focus: function(){window.focus(); this.display.input.focus();}, setOption: function(option, value) { var options = this.options, old = options[option]; if (options[option] == value && option != "mode") return; options[option] = value; if (optionHandlers.hasOwnProperty(option)) operation(this, optionHandlers[option])(this, value, old); }, getOption: function(option) {return this.options[option];}, getDoc: function() {return this.doc;}, addKeyMap: function(map, bottom) { this.state.keyMaps[bottom ? "push" : "unshift"](getKeyMap(map)); }, removeKeyMap: function(map) { var maps = this.state.keyMaps; for (var i = 0; i < maps.length; ++i) if (maps[i] == map || maps[i].name == map) { maps.splice(i, 1); return true; } }, addOverlay: methodOp(function(spec, options) { var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec); if (mode.startState) throw new Error("Overlays may not be stateful."); this.state.overlays.push({mode: mode, modeSpec: spec, opaque: options && options.opaque}); this.state.modeGen++; regChange(this); }), removeOverlay: methodOp(function(spec) { var overlays = this.state.overlays; for (var i = 0; i < overlays.length; ++i) { var cur = overlays[i].modeSpec; if (cur == spec || typeof spec == "string" && cur.name == spec) { overlays.splice(i, 1); this.state.modeGen++; regChange(this); return; } } }), indentLine: methodOp(function(n, dir, aggressive) { if (typeof dir != "string" && typeof dir != "number") { if (dir == null) dir = this.options.smartIndent ? "smart" : "prev"; else dir = dir ? "add" : "subtract"; } if (isLine(this.doc, n)) indentLine(this, n, dir, aggressive); }), indentSelection: methodOp(function(how) { var ranges = this.doc.sel.ranges, end = -1; for (var i = 0; i < ranges.length; i++) { var range = ranges[i]; if (!range.empty()) { var from = range.from(), to = range.to(); var start = Math.max(end, from.line); end = Math.min(this.lastLine(), to.line - (to.ch ? 0 : 1)) + 1; for (var j = start; j < end; ++j) indentLine(this, j, how); var newRanges = this.doc.sel.ranges; if (from.ch == 0 && ranges.length == newRanges.length && newRanges[i].from().ch > 0) replaceOneSelection(this.doc, i, new Range(from, newRanges[i].to()), sel_dontScroll); } else if (range.head.line > end) { indentLine(this, range.head.line, how, true); end = range.head.line; if (i == this.doc.sel.primIndex) ensureCursorVisible(this); } } }), // Fetch the parser token for a given character. Useful for hacks // that want to inspect the mode state (say, for completion). getTokenAt: function(pos, precise) { return takeToken(this, pos, precise); }, getLineTokens: function(line, precise) { return takeToken(this, Pos(line), precise, true); }, getTokenTypeAt: function(pos) { pos = clipPos(this.doc, pos); var styles = getLineStyles(this, getLine(this.doc, pos.line)); var before = 0, after = (styles.length - 1) / 2, ch = pos.ch; var type; if (ch == 0) type = styles[2]; else for (;;) { var mid = (before + after) >> 1; if ((mid ? styles[mid * 2 - 1] : 0) >= ch) after = mid; else if (styles[mid * 2 + 1] < ch) before = mid + 1; else { type = styles[mid * 2 + 2]; break; } } var cut = type ? type.indexOf("cm-overlay ") : -1; return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1); }, getModeAt: function(pos) { var mode = this.doc.mode; if (!mode.innerMode) return mode; return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode; }, getHelper: function(pos, type) { return this.getHelpers(pos, type)[0]; }, getHelpers: function(pos, type) { var found = []; if (!helpers.hasOwnProperty(type)) return helpers; var help = helpers[type], mode = this.getModeAt(pos); if (typeof mode[type] == "string") { if (help[mode[type]]) found.push(help[mode[type]]); } else if (mode[type]) { for (var i = 0; i < mode[type].length; i++) { var val = help[mode[type][i]]; if (val) found.push(val); } } else if (mode.helperType && help[mode.helperType]) { found.push(help[mode.helperType]); } else if (help[mode.name]) { found.push(help[mode.name]); } for (var i = 0; i < help._global.length; i++) { var cur = help._global[i]; if (cur.pred(mode, this) && indexOf(found, cur.val) == -1) found.push(cur.val); } return found; }, getStateAfter: function(line, precise) { var doc = this.doc; line = clipLine(doc, line == null ? doc.first + doc.size - 1: line); return getStateBefore(this, line + 1, precise); }, cursorCoords: function(start, mode) { var pos, range = this.doc.sel.primary(); if (start == null) pos = range.head; else if (typeof start == "object") pos = clipPos(this.doc, start); else pos = start ? range.from() : range.to(); return cursorCoords(this, pos, mode || "page"); }, charCoords: function(pos, mode) { return charCoords(this, clipPos(this.doc, pos), mode || "page"); }, coordsChar: function(coords, mode) { coords = fromCoordSystem(this, coords, mode || "page"); return coordsChar(this, coords.left, coords.top); }, lineAtHeight: function(height, mode) { height = fromCoordSystem(this, {top: height, left: 0}, mode || "page").top; return lineAtHeight(this.doc, height + this.display.viewOffset); }, heightAtLine: function(line, mode) { var end = false, last = this.doc.first + this.doc.size - 1; if (line < this.doc.first) line = this.doc.first; else if (line > last) { line = last; end = true; } var lineObj = getLine(this.doc, line); return intoCoordSystem(this, lineObj, {top: 0, left: 0}, mode || "page").top + (end ? this.doc.height - heightAtLine(lineObj) : 0); }, defaultTextHeight: function() { return textHeight(this.display); }, defaultCharWidth: function() { return charWidth(this.display); }, setGutterMarker: methodOp(function(line, gutterID, value) { return changeLine(this.doc, line, "gutter", function(line) { var markers = line.gutterMarkers || (line.gutterMarkers = {}); markers[gutterID] = value; if (!value && isEmpty(markers)) line.gutterMarkers = null; return true; }); }), clearGutter: methodOp(function(gutterID) { var cm = this, doc = cm.doc, i = doc.first; doc.iter(function(line) { if (line.gutterMarkers && line.gutterMarkers[gutterID]) { line.gutterMarkers[gutterID] = null; regLineChange(cm, i, "gutter"); if (isEmpty(line.gutterMarkers)) line.gutterMarkers = null; } ++i; }); }), addLineWidget: methodOp(function(handle, node, options) { return addLineWidget(this, handle, node, options); }), removeLineWidget: function(widget) { widget.clear(); }, lineInfo: function(line) { if (typeof line == "number") { if (!isLine(this.doc, line)) return null; var n = line; line = getLine(this.doc, line); if (!line) return null; } else { var n = lineNo(line); if (n == null) return null; } return {line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers, textClass: line.textClass, bgClass: line.bgClass, wrapClass: line.wrapClass, widgets: line.widgets}; }, getViewport: function() { return {from: this.display.viewFrom, to: this.display.viewTo};}, addWidget: function(pos, node, scroll, vert, horiz) { var display = this.display; pos = cursorCoords(this, clipPos(this.doc, pos)); var top = pos.bottom, left = pos.left; node.style.position = "absolute"; node.setAttribute("cm-ignore-events", "true"); this.display.input.setUneditable(node); display.sizer.appendChild(node); if (vert == "over") { top = pos.top; } else if (vert == "above" || vert == "near") { var vspace = Math.max(display.wrapper.clientHeight, this.doc.height), hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth); // Default to positioning above (if specified and possible); otherwise default to positioning below if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight) top = pos.top - node.offsetHeight; else if (pos.bottom + node.offsetHeight <= vspace) top = pos.bottom; if (left + node.offsetWidth > hspace) left = hspace - node.offsetWidth; } node.style.top = top + "px"; node.style.left = node.style.right = ""; if (horiz == "right") { left = display.sizer.clientWidth - node.offsetWidth; node.style.right = "0px"; } else { if (horiz == "left") left = 0; else if (horiz == "middle") left = (display.sizer.clientWidth - node.offsetWidth) / 2; node.style.left = left + "px"; } if (scroll) scrollIntoView(this, left, top, left + node.offsetWidth, top + node.offsetHeight); }, triggerOnKeyDown: methodOp(onKeyDown), triggerOnKeyPress: methodOp(onKeyPress), triggerOnKeyUp: onKeyUp, execCommand: function(cmd) { if (commands.hasOwnProperty(cmd)) return commands[cmd](this); }, findPosH: function(from, amount, unit, visually) { var dir = 1; if (amount < 0) { dir = -1; amount = -amount; } for (var i = 0, cur = clipPos(this.doc, from); i < amount; ++i) { cur = findPosH(this.doc, cur, dir, unit, visually); if (cur.hitSide) break; } return cur; }, moveH: methodOp(function(dir, unit) { var cm = this; cm.extendSelectionsBy(function(range) { if (cm.display.shift || cm.doc.extend || range.empty()) return findPosH(cm.doc, range.head, dir, unit, cm.options.rtlMoveVisually); else return dir < 0 ? range.from() : range.to(); }, sel_move); }), deleteH: methodOp(function(dir, unit) { var sel = this.doc.sel, doc = this.doc; if (sel.somethingSelected()) doc.replaceSelection("", null, "+delete"); else deleteNearSelection(this, function(range) { var other = findPosH(doc, range.head, dir, unit, false); return dir < 0 ? {from: other, to: range.head} : {from: range.head, to: other}; }); }), findPosV: function(from, amount, unit, goalColumn) { var dir = 1, x = goalColumn; if (amount < 0) { dir = -1; amount = -amount; } for (var i = 0, cur = clipPos(this.doc, from); i < amount; ++i) { var coords = cursorCoords(this, cur, "div"); if (x == null) x = coords.left; else coords.left = x; cur = findPosV(this, coords, dir, unit); if (cur.hitSide) break; } return cur; }, moveV: methodOp(function(dir, unit) { var cm = this, doc = this.doc, goals = []; var collapse = !cm.display.shift && !doc.extend && doc.sel.somethingSelected(); doc.extendSelectionsBy(function(range) { if (collapse) return dir < 0 ? range.from() : range.to(); var headPos = cursorCoords(cm, range.head, "div"); if (range.goalColumn != null) headPos.left = range.goalColumn; goals.push(headPos.left); var pos = findPosV(cm, headPos, dir, unit); if (unit == "page" && range == doc.sel.primary()) addToScrollPos(cm, null, charCoords(cm, pos, "div").top - headPos.top); return pos; }, sel_move); if (goals.length) for (var i = 0; i < doc.sel.ranges.length; i++) doc.sel.ranges[i].goalColumn = goals[i]; }), // Find the word at the given position (as returned by coordsChar). findWordAt: function(pos) { var doc = this.doc, line = getLine(doc, pos.line).text; var start = pos.ch, end = pos.ch; if (line) { var helper = this.getHelper(pos, "wordChars"); if ((pos.xRel < 0 || end == line.length) && start) --start; else ++end; var startChar = line.charAt(start); var check = isWordChar(startChar, helper) ? function(ch) { return isWordChar(ch, helper); } : /\s/.test(startChar) ? function(ch) {return /\s/.test(ch);} : function(ch) {return !/\s/.test(ch) && !isWordChar(ch);}; while (start > 0 && check(line.charAt(start - 1))) --start; while (end < line.length && check(line.charAt(end))) ++end; } return new Range(Pos(pos.line, start), Pos(pos.line, end)); }, toggleOverwrite: function(value) { if (value != null && value == this.state.overwrite) return; if (this.state.overwrite = !this.state.overwrite) addClass(this.display.cursorDiv, "CodeMirror-overwrite"); else rmClass(this.display.cursorDiv, "CodeMirror-overwrite"); signal(this, "overwriteToggle", this, this.state.overwrite); }, hasFocus: function() { return this.display.input.getField() == activeElt(); }, scrollTo: methodOp(function(x, y) { if (x != null || y != null) resolveScrollToPos(this); if (x != null) this.curOp.scrollLeft = x; if (y != null) this.curOp.scrollTop = y; }), getScrollInfo: function() { var scroller = this.display.scroller; return {left: scroller.scrollLeft, top: scroller.scrollTop, height: scroller.scrollHeight - scrollGap(this) - this.display.barHeight, width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth, clientHeight: displayHeight(this), clientWidth: displayWidth(this)}; }, scrollIntoView: methodOp(function(range, margin) { if (range == null) { range = {from: this.doc.sel.primary().head, to: null}; if (margin == null) margin = this.options.cursorScrollMargin; } else if (typeof range == "number") { range = {from: Pos(range, 0), to: null}; } else if (range.from == null) { range = {from: range, to: null}; } if (!range.to) range.to = range.from; range.margin = margin || 0; if (range.from.line != null) { resolveScrollToPos(this); this.curOp.scrollToPos = range; } else { var sPos = calculateScrollPos(this, Math.min(range.from.left, range.to.left), Math.min(range.from.top, range.to.top) - range.margin, Math.max(range.from.right, range.to.right), Math.max(range.from.bottom, range.to.bottom) + range.margin); this.scrollTo(sPos.scrollLeft, sPos.scrollTop); } }), setSize: methodOp(function(width, height) { var cm = this; function interpret(val) { return typeof val == "number" || /^\d+$/.test(String(val)) ? val + "px" : val; } if (width != null) cm.display.wrapper.style.width = interpret(width); if (height != null) cm.display.wrapper.style.height = interpret(height); if (cm.options.lineWrapping) clearLineMeasurementCache(this); var lineNo = cm.display.viewFrom; cm.doc.iter(lineNo, cm.display.viewTo, function(line) { if (line.widgets) for (var i = 0; i < line.widgets.length; i++) if (line.widgets[i].noHScroll) { regLineChange(cm, lineNo, "widget"); break; } ++lineNo; }); cm.curOp.forceUpdate = true; signal(cm, "refresh", this); }), operation: function(f){return runInOp(this, f);}, refresh: methodOp(function() { var oldHeight = this.display.cachedTextHeight; regChange(this); this.curOp.forceUpdate = true; clearCaches(this); this.scrollTo(this.doc.scrollLeft, this.doc.scrollTop); updateGutterSpace(this); if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5) estimateLineHeights(this); signal(this, "refresh", this); }), swapDoc: methodOp(function(doc) { var old = this.doc; old.cm = null; attachDoc(this, doc); clearCaches(this); this.display.input.reset(); this.scrollTo(doc.scrollLeft, doc.scrollTop); this.curOp.forceScroll = true; signalLater(this, "swapDoc", this, old); return old; }), getInputField: function(){return this.display.input.getField();}, getWrapperElement: function(){return this.display.wrapper;}, getScrollerElement: function(){return this.display.scroller;}, getGutterElement: function(){return this.display.gutters;} }; eventMixin(CodeMirror); // OPTION DEFAULTS // The default configuration options. var defaults = CodeMirror.defaults = {}; // Functions to run when options are changed. var optionHandlers = CodeMirror.optionHandlers = {}; function option(name, deflt, handle, notOnInit) { CodeMirror.defaults[name] = deflt; if (handle) optionHandlers[name] = notOnInit ? function(cm, val, old) {if (old != Init) handle(cm, val, old);} : handle; } // Passed to option handlers when there is no old value. var Init = CodeMirror.Init = {toString: function(){return "CodeMirror.Init";}}; // These two are, on init, called from the constructor because they // have to be initialized before the editor can start at all. option("value", "", function(cm, val) { cm.setValue(val); }, true); option("mode", null, function(cm, val) { cm.doc.modeOption = val; loadMode(cm); }, true); option("indentUnit", 2, loadMode, true); option("indentWithTabs", false); option("smartIndent", true); option("tabSize", 4, function(cm) { resetModeState(cm); clearCaches(cm); regChange(cm); }, true); option("specialChars", /[\t\u0000-\u0019\u00ad\u200b-\u200f\u2028\u2029\ufeff]/g, function(cm, val) { cm.options.specialChars = new RegExp(val.source + (val.test("\t") ? "" : "|\t"), "g"); cm.refresh(); }, true); option("specialCharPlaceholder", defaultSpecialCharPlaceholder, function(cm) {cm.refresh();}, true); option("electricChars", true); option("inputStyle", mobile ? "contenteditable" : "textarea", function() { throw new Error("inputStyle can not (yet) be changed in a running editor"); // FIXME }, true); option("rtlMoveVisually", !windows); option("wholeLineUpdateBefore", true); option("theme", "default", function(cm) { themeChanged(cm); guttersChanged(cm); }, true); option("keyMap", "default", function(cm, val, old) { var next = getKeyMap(val); var prev = old != CodeMirror.Init && getKeyMap(old); if (prev && prev.detach) prev.detach(cm, next); if (next.attach) next.attach(cm, prev || null); }); option("extraKeys", null); option("lineWrapping", false, wrappingChanged, true); option("gutters", [], function(cm) { setGuttersForLineNumbers(cm.options); guttersChanged(cm); }, true); option("fixedGutter", true, function(cm, val) { cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + "px" : "0"; cm.refresh(); }, true); option("coverGutterNextToScrollbar", false, function(cm) {updateScrollbars(cm);}, true); option("scrollbarStyle", "native", function(cm) { initScrollbars(cm); updateScrollbars(cm); cm.display.scrollbars.setScrollTop(cm.doc.scrollTop); cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft); }, true); option("lineNumbers", false, function(cm) { setGuttersForLineNumbers(cm.options); guttersChanged(cm); }, true); option("firstLineNumber", 1, guttersChanged, true); option("lineNumberFormatter", function(integer) {return integer;}, guttersChanged, true); option("showCursorWhenSelecting", false, updateSelection, true); option("resetSelectionOnContextMenu", true); option("readOnly", false, function(cm, val) { if (val == "nocursor") { onBlur(cm); cm.display.input.blur(); cm.display.disabled = true; } else { cm.display.disabled = false; if (!val) cm.display.input.reset(); } }); option("disableInput", false, function(cm, val) {if (!val) cm.display.input.reset();}, true); option("dragDrop", true); option("cursorBlinkRate", 530); option("cursorScrollMargin", 0); option("cursorHeight", 1, updateSelection, true); option("singleCursorHeightPerLine", true, updateSelection, true); option("workTime", 100); option("workDelay", 100); option("flattenSpans", true, resetModeState, true); option("addModeClass", false, resetModeState, true); option("pollInterval", 100); option("undoDepth", 200, function(cm, val){cm.doc.history.undoDepth = val;}); option("historyEventDelay", 1250); option("viewportMargin", 10, function(cm){cm.refresh();}, true); option("maxHighlightLength", 10000, resetModeState, true); option("moveInputWithCursor", true, function(cm, val) { if (!val) cm.display.input.resetPosition(); }); option("tabindex", null, function(cm, val) { cm.display.input.getField().tabIndex = val || ""; }); option("autofocus", null); // MODE DEFINITION AND QUERYING // Known modes, by name and by MIME var modes = CodeMirror.modes = {}, mimeModes = CodeMirror.mimeModes = {}; // Extra arguments are stored as the mode's dependencies, which is // used by (legacy) mechanisms like loadmode.js to automatically // load a mode. (Preferred mechanism is the require/define calls.) CodeMirror.defineMode = function(name, mode) { if (!CodeMirror.defaults.mode && name != "null") CodeMirror.defaults.mode = name; if (arguments.length > 2) mode.dependencies = Array.prototype.slice.call(arguments, 2); modes[name] = mode; }; CodeMirror.defineMIME = function(mime, spec) { mimeModes[mime] = spec; }; // Given a MIME type, a {name, ...options} config object, or a name // string, return a mode config object. CodeMirror.resolveMode = function(spec) { if (typeof spec == "string" && mimeModes.hasOwnProperty(spec)) { spec = mimeModes[spec]; } else if (spec && typeof spec.name == "string" && mimeModes.hasOwnProperty(spec.name)) { var found = mimeModes[spec.name]; if (typeof found == "string") found = {name: found}; spec = createObj(found, spec); spec.name = found.name; } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+xml$/.test(spec)) { return CodeMirror.resolveMode("application/xml"); } if (typeof spec == "string") return {name: spec}; else return spec || {name: "null"}; }; // Given a mode spec (anything that resolveMode accepts), find and // initialize an actual mode object. CodeMirror.getMode = function(options, spec) { var spec = CodeMirror.resolveMode(spec); var mfactory = modes[spec.name]; if (!mfactory) return CodeMirror.getMode(options, "text/plain"); var modeObj = mfactory(options, spec); if (modeExtensions.hasOwnProperty(spec.name)) { var exts = modeExtensions[spec.name]; for (var prop in exts) { if (!exts.hasOwnProperty(prop)) continue; if (modeObj.hasOwnProperty(prop)) modeObj["_" + prop] = modeObj[prop]; modeObj[prop] = exts[prop]; } } modeObj.name = spec.name; if (spec.helperType) modeObj.helperType = spec.helperType; if (spec.modeProps) for (var prop in spec.modeProps) modeObj[prop] = spec.modeProps[prop]; return modeObj; }; // Minimal default mode. CodeMirror.defineMode("null", function() { return {token: function(stream) {stream.skipToEnd();}}; }); CodeMirror.defineMIME("text/plain", "null"); // This can be used to attach properties to mode objects from // outside the actual mode definition. var modeExtensions = CodeMirror.modeExtensions = {}; CodeMirror.extendMode = function(mode, properties) { var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {}); copyObj(properties, exts); }; // EXTENSIONS CodeMirror.defineExtension = function(name, func) { CodeMirror.prototype[name] = func; }; CodeMirror.defineDocExtension = function(name, func) { Doc.prototype[name] = func; }; CodeMirror.defineOption = option; var initHooks = []; CodeMirror.defineInitHook = function(f) {initHooks.push(f);}; var helpers = CodeMirror.helpers = {}; CodeMirror.registerHelper = function(type, name, value) { if (!helpers.hasOwnProperty(type)) helpers[type] = CodeMirror[type] = {_global: []}; helpers[type][name] = value; }; CodeMirror.registerGlobalHelper = function(type, name, predicate, value) { CodeMirror.registerHelper(type, name, value); helpers[type]._global.push({pred: predicate, val: value}); }; // MODE STATE HANDLING // Utility functions for working with state. Exported because nested // modes need to do this for their inner modes. var copyState = CodeMirror.copyState = function(mode, state) { if (state === true) return state; if (mode.copyState) return mode.copyState(state); var nstate = {}; for (var n in state) { var val = state[n]; if (val instanceof Array) val = val.concat([]); nstate[n] = val; } return nstate; }; var startState = CodeMirror.startState = function(mode, a1, a2) { return mode.startState ? mode.startState(a1, a2) : true; }; // Given a mode and a state (for that mode), find the inner mode and // state at the position that the state refers to. CodeMirror.innerMode = function(mode, state) { while (mode.innerMode) { var info = mode.innerMode(state); if (!info || info.mode == mode) break; state = info.state; mode = info.mode; } return info || {mode: mode, state: state}; }; // STANDARD COMMANDS // Commands are parameter-less actions that can be performed on an // editor, mostly used for keybindings. var commands = CodeMirror.commands = { selectAll: function(cm) {cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll);}, singleSelection: function(cm) { cm.setSelection(cm.getCursor("anchor"), cm.getCursor("head"), sel_dontScroll); }, killLine: function(cm) { deleteNearSelection(cm, function(range) { if (range.empty()) { var len = getLine(cm.doc, range.head.line).text.length; if (range.head.ch == len && range.head.line < cm.lastLine()) return {from: range.head, to: Pos(range.head.line + 1, 0)}; else return {from: range.head, to: Pos(range.head.line, len)}; } else { return {from: range.from(), to: range.to()}; } }); }, deleteLine: function(cm) { deleteNearSelection(cm, function(range) { return {from: Pos(range.from().line, 0), to: clipPos(cm.doc, Pos(range.to().line + 1, 0))}; }); }, delLineLeft: function(cm) { deleteNearSelection(cm, function(range) { return {from: Pos(range.from().line, 0), to: range.from()}; }); }, delWrappedLineLeft: function(cm) { deleteNearSelection(cm, function(range) { var top = cm.charCoords(range.head, "div").top + 5; var leftPos = cm.coordsChar({left: 0, top: top}, "div"); return {from: leftPos, to: range.from()}; }); }, delWrappedLineRight: function(cm) { deleteNearSelection(cm, function(range) { var top = cm.charCoords(range.head, "div").top + 5; var rightPos = cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div"); return {from: range.from(), to: rightPos }; }); }, undo: function(cm) {cm.undo();}, redo: function(cm) {cm.redo();}, undoSelection: function(cm) {cm.undoSelection();}, redoSelection: function(cm) {cm.redoSelection();}, goDocStart: function(cm) {cm.extendSelection(Pos(cm.firstLine(), 0));}, goDocEnd: function(cm) {cm.extendSelection(Pos(cm.lastLine()));}, goLineStart: function(cm) { cm.extendSelectionsBy(function(range) { return lineStart(cm, range.head.line); }, {origin: "+move", bias: 1}); }, goLineStartSmart: function(cm) { cm.extendSelectionsBy(function(range) { return lineStartSmart(cm, range.head); }, {origin: "+move", bias: 1}); }, goLineEnd: function(cm) { cm.extendSelectionsBy(function(range) { return lineEnd(cm, range.head.line); }, {origin: "+move", bias: -1}); }, goLineRight: function(cm) { cm.extendSelectionsBy(function(range) { var top = cm.charCoords(range.head, "div").top + 5; return cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div"); }, sel_move); }, goLineLeft: function(cm) { cm.extendSelectionsBy(function(range) { var top = cm.charCoords(range.head, "div").top + 5; return cm.coordsChar({left: 0, top: top}, "div"); }, sel_move); }, goLineLeftSmart: function(cm) { cm.extendSelectionsBy(function(range) { var top = cm.charCoords(range.head, "div").top + 5; var pos = cm.coordsChar({left: 0, top: top}, "div"); if (pos.ch < cm.getLine(pos.line).search(/\S/)) return lineStartSmart(cm, range.head); return pos; }, sel_move); }, goLineUp: function(cm) {cm.moveV(-1, "line");}, goLineDown: function(cm) {cm.moveV(1, "line");}, goPageUp: function(cm) {cm.moveV(-1, "page");}, goPageDown: function(cm) {cm.moveV(1, "page");}, goCharLeft: function(cm) {cm.moveH(-1, "char");}, goCharRight: function(cm) {cm.moveH(1, "char");}, goColumnLeft: function(cm) {cm.moveH(-1, "column");}, goColumnRight: function(cm) {cm.moveH(1, "column");}, goWordLeft: function(cm) {cm.moveH(-1, "word");}, goGroupRight: function(cm) {cm.moveH(1, "group");}, goGroupLeft: function(cm) {cm.moveH(-1, "group");}, goWordRight: function(cm) {cm.moveH(1, "word");}, delCharBefore: function(cm) {cm.deleteH(-1, "char");}, delCharAfter: function(cm) {cm.deleteH(1, "char");}, delWordBefore: function(cm) {cm.deleteH(-1, "word");}, delWordAfter: function(cm) {cm.deleteH(1, "word");}, delGroupBefore: function(cm) {cm.deleteH(-1, "group");}, delGroupAfter: function(cm) {cm.deleteH(1, "group");}, indentAuto: function(cm) {cm.indentSelection("smart");}, indentMore: function(cm) {cm.indentSelection("add");}, indentLess: function(cm) {cm.indentSelection("subtract");}, insertTab: function(cm) {cm.replaceSelection("\t");}, insertSoftTab: function(cm) { var spaces = [], ranges = cm.listSelections(), tabSize = cm.options.tabSize; for (var i = 0; i < ranges.length; i++) { var pos = ranges[i].from(); var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize); spaces.push(new Array(tabSize - col % tabSize + 1).join(" ")); } cm.replaceSelections(spaces); }, defaultTab: function(cm) { if (cm.somethingSelected()) cm.indentSelection("add"); else cm.execCommand("insertTab"); }, transposeChars: function(cm) { runInOp(cm, function() { var ranges = cm.listSelections(), newSel = []; for (var i = 0; i < ranges.length; i++) { var cur = ranges[i].head, line = getLine(cm.doc, cur.line).text; if (line) { if (cur.ch == line.length) cur = new Pos(cur.line, cur.ch - 1); if (cur.ch > 0) { cur = new Pos(cur.line, cur.ch + 1); cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2), Pos(cur.line, cur.ch - 2), cur, "+transpose"); } else if (cur.line > cm.doc.first) { var prev = getLine(cm.doc, cur.line - 1).text; if (prev) cm.replaceRange(line.charAt(0) + "\n" + prev.charAt(prev.length - 1), Pos(cur.line - 1, prev.length - 1), Pos(cur.line, 1), "+transpose"); } } newSel.push(new Range(cur, cur)); } cm.setSelections(newSel); }); }, newlineAndIndent: function(cm) { runInOp(cm, function() { var len = cm.listSelections().length; for (var i = 0; i < len; i++) { var range = cm.listSelections()[i]; cm.replaceRange("\n", range.anchor, range.head, "+input"); cm.indentLine(range.from().line + 1, null, true); ensureCursorVisible(cm); } }); }, toggleOverwrite: function(cm) {cm.toggleOverwrite();} }; // STANDARD KEYMAPS var keyMap = CodeMirror.keyMap = {}; keyMap.basic = { "Left": "goCharLeft", "Right": "goCharRight", "Up": "goLineUp", "Down": "goLineDown", "End": "goLineEnd", "Home": "goLineStartSmart", "PageUp": "goPageUp", "PageDown": "goPageDown", "Delete": "delCharAfter", "Backspace": "delCharBefore", "Shift-Backspace": "delCharBefore", "Tab": "defaultTab", "Shift-Tab": "indentAuto", "Enter": "newlineAndIndent", "Insert": "toggleOverwrite", "Esc": "singleSelection" }; // Note that the save and find-related commands aren't defined by // default. User code or addons can define them. Unknown commands // are simply ignored. keyMap.pcDefault = { "Ctrl-A": "selectAll", "Ctrl-D": "deleteLine", "Ctrl-Z": "undo", "Shift-Ctrl-Z": "redo", "Ctrl-Y": "redo", "Ctrl-Home": "goDocStart", "Ctrl-End": "goDocEnd", "Ctrl-Up": "goLineUp", "Ctrl-Down": "goLineDown", "Ctrl-Left": "goGroupLeft", "Ctrl-Right": "goGroupRight", "Alt-Left": "goLineStart", "Alt-Right": "goLineEnd", "Ctrl-Backspace": "delGroupBefore", "Ctrl-Delete": "delGroupAfter", "Ctrl-S": "save", "Ctrl-F": "find", "Ctrl-G": "findNext", "Shift-Ctrl-G": "findPrev", "Shift-Ctrl-F": "replace", "Shift-Ctrl-R": "replaceAll", "Ctrl-[": "indentLess", "Ctrl-]": "indentMore", "Ctrl-U": "undoSelection", "Shift-Ctrl-U": "redoSelection", "Alt-U": "redoSelection", fallthrough: "basic" }; // Very basic readline/emacs-style bindings, which are standard on Mac. keyMap.emacsy = { "Ctrl-F": "goCharRight", "Ctrl-B": "goCharLeft", "Ctrl-P": "goLineUp", "Ctrl-N": "goLineDown", "Alt-F": "goWordRight", "Alt-B": "goWordLeft", "Ctrl-A": "goLineStart", "Ctrl-E": "goLineEnd", "Ctrl-V": "goPageDown", "Shift-Ctrl-V": "goPageUp", "Ctrl-D": "delCharAfter", "Ctrl-H": "delCharBefore", "Alt-D": "delWordAfter", "Alt-Backspace": "delWordBefore", "Ctrl-K": "killLine", "Ctrl-T": "transposeChars" }; keyMap.macDefault = { "Cmd-A": "selectAll", "Cmd-D": "deleteLine", "Cmd-Z": "undo", "Shift-Cmd-Z": "redo", "Cmd-Y": "redo", "Cmd-Home": "goDocStart", "Cmd-Up": "goDocStart", "Cmd-End": "goDocEnd", "Cmd-Down": "goDocEnd", "Alt-Left": "goGroupLeft", "Alt-Right": "goGroupRight", "Cmd-Left": "goLineLeft", "Cmd-Right": "goLineRight", "Alt-Backspace": "delGroupBefore", "Ctrl-Alt-Backspace": "delGroupAfter", "Alt-Delete": "delGroupAfter", "Cmd-S": "save", "Cmd-F": "find", "Cmd-G": "findNext", "Shift-Cmd-G": "findPrev", "Cmd-Alt-F": "replace", "Shift-Cmd-Alt-F": "replaceAll", "Cmd-[": "indentLess", "Cmd-]": "indentMore", "Cmd-Backspace": "delWrappedLineLeft", "Cmd-Delete": "delWrappedLineRight", "Cmd-U": "undoSelection", "Shift-Cmd-U": "redoSelection", "Ctrl-Up": "goDocStart", "Ctrl-Down": "goDocEnd", fallthrough: ["basic", "emacsy"] }; keyMap["default"] = mac ? keyMap.macDefault : keyMap.pcDefault; // KEYMAP DISPATCH function normalizeKeyName(name) { var parts = name.split(/-(?!$)/), name = parts[parts.length - 1]; var alt, ctrl, shift, cmd; for (var i = 0; i < parts.length - 1; i++) { var mod = parts[i]; if (/^(cmd|meta|m)$/i.test(mod)) cmd = true; else if (/^a(lt)?$/i.test(mod)) alt = true; else if (/^(c|ctrl|control)$/i.test(mod)) ctrl = true; else if (/^s(hift)$/i.test(mod)) shift = true; else throw new Error("Unrecognized modifier name: " + mod); } if (alt) name = "Alt-" + name; if (ctrl) name = "Ctrl-" + name; if (cmd) name = "Cmd-" + name; if (shift) name = "Shift-" + name; return name; } // This is a kludge to keep keymaps mostly working as raw objects // (backwards compatibility) while at the same time support features // like normalization and multi-stroke key bindings. It compiles a // new normalized keymap, and then updates the old object to reflect // this. CodeMirror.normalizeKeyMap = function(keymap) { var copy = {}; for (var keyname in keymap) if (keymap.hasOwnProperty(keyname)) { var value = keymap[keyname]; if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) continue; if (value == "...") { delete keymap[keyname]; continue; } var keys = map(keyname.split(" "), normalizeKeyName); for (var i = 0; i < keys.length; i++) { var val, name; if (i == keys.length - 1) { name = keyname; val = value; } else { name = keys.slice(0, i + 1).join(" "); val = "..."; } var prev = copy[name]; if (!prev) copy[name] = val; else if (prev != val) throw new Error("Inconsistent bindings for " + name); } delete keymap[keyname]; } for (var prop in copy) keymap[prop] = copy[prop]; return keymap; }; var lookupKey = CodeMirror.lookupKey = function(key, map, handle, context) { map = getKeyMap(map); var found = map.call ? map.call(key, context) : map[key]; if (found === false) return "nothing"; if (found === "...") return "multi"; if (found != null && handle(found)) return "handled"; if (map.fallthrough) { if (Object.prototype.toString.call(map.fallthrough) != "[object Array]") return lookupKey(key, map.fallthrough, handle, context); for (var i = 0; i < map.fallthrough.length; i++) { var result = lookupKey(key, map.fallthrough[i], handle, context); if (result) return result; } } }; // Modifier key presses don't count as 'real' key presses for the // purpose of keymap fallthrough. var isModifierKey = CodeMirror.isModifierKey = function(value) { var name = typeof value == "string" ? value : keyNames[value.keyCode]; return name == "Ctrl" || name == "Alt" || name == "Shift" || name == "Mod"; }; // Look up the name of a key as indicated by an event object. var keyName = CodeMirror.keyName = function(event, noShift) { if (presto && event.keyCode == 34 && event["char"]) return false; var base = keyNames[event.keyCode], name = base; if (name == null || event.altGraphKey) return false; if (event.altKey && base != "Alt") name = "Alt-" + name; if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != "Ctrl") name = "Ctrl-" + name; if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != "Cmd") name = "Cmd-" + name; if (!noShift && event.shiftKey && base != "Shift") name = "Shift-" + name; return name; }; function getKeyMap(val) { return typeof val == "string" ? keyMap[val] : val; } // FROMTEXTAREA CodeMirror.fromTextArea = function(textarea, options) { options = options ? copyObj(options) : {}; options.value = textarea.value; if (!options.tabindex && textarea.tabIndex) options.tabindex = textarea.tabIndex; if (!options.placeholder && textarea.placeholder) options.placeholder = textarea.placeholder; // Set autofocus to true if this textarea is focused, or if it has // autofocus and no other element is focused. if (options.autofocus == null) { var hasFocus = activeElt(); options.autofocus = hasFocus == textarea || textarea.getAttribute("autofocus") != null && hasFocus == document.body; } function save() {textarea.value = cm.getValue();} if (textarea.form) { on(textarea.form, "submit", save); // Deplorable hack to make the submit method do the right thing. if (!options.leaveSubmitMethodAlone) { var form = textarea.form, realSubmit = form.submit; try { var wrappedSubmit = form.submit = function() { save(); form.submit = realSubmit; form.submit(); form.submit = wrappedSubmit; }; } catch(e) {} } } options.finishInit = function(cm) { cm.save = save; cm.getTextArea = function() { return textarea; }; cm.toTextArea = function() { cm.toTextArea = isNaN; // Prevent this from being ran twice save(); textarea.parentNode.removeChild(cm.getWrapperElement()); textarea.style.display = ""; if (textarea.form) { off(textarea.form, "submit", save); if (typeof textarea.form.submit == "function") textarea.form.submit = realSubmit; } }; }; textarea.style.display = "none"; var cm = CodeMirror(function(node) { textarea.parentNode.insertBefore(node, textarea.nextSibling); }, options); return cm; }; // STRING STREAM // Fed to the mode parsers, provides helper functions to make // parsers more succinct. var StringStream = CodeMirror.StringStream = function(string, tabSize) { this.pos = this.start = 0; this.string = string; this.tabSize = tabSize || 8; this.lastColumnPos = this.lastColumnValue = 0; this.lineStart = 0; }; StringStream.prototype = { eol: function() {return this.pos >= this.string.length;}, sol: function() {return this.pos == this.lineStart;}, peek: function() {return this.string.charAt(this.pos) || undefined;}, next: function() { if (this.pos < this.string.length) return this.string.charAt(this.pos++); }, eat: function(match) { var ch = this.string.charAt(this.pos); if (typeof match == "string") var ok = ch == match; else var ok = ch && (match.test ? match.test(ch) : match(ch)); if (ok) {++this.pos; return ch;} }, eatWhile: function(match) { var start = this.pos; while (this.eat(match)){} return this.pos > start; }, eatSpace: function() { var start = this.pos; while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) ++this.pos; return this.pos > start; }, skipToEnd: function() {this.pos = this.string.length;}, skipTo: function(ch) { var found = this.string.indexOf(ch, this.pos); if (found > -1) {this.pos = found; return true;} }, backUp: function(n) {this.pos -= n;}, column: function() { if (this.lastColumnPos < this.start) { this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue); this.lastColumnPos = this.start; } return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0); }, indentation: function() { return countColumn(this.string, null, this.tabSize) - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0); }, match: function(pattern, consume, caseInsensitive) { if (typeof pattern == "string") { var cased = function(str) {return caseInsensitive ? str.toLowerCase() : str;}; var substr = this.string.substr(this.pos, pattern.length); if (cased(substr) == cased(pattern)) { if (consume !== false) this.pos += pattern.length; return true; } } else { var match = this.string.slice(this.pos).match(pattern); if (match && match.index > 0) return null; if (match && consume !== false) this.pos += match[0].length; return match; } }, current: function(){return this.string.slice(this.start, this.pos);}, hideFirstChars: function(n, inner) { this.lineStart += n; try { return inner(); } finally { this.lineStart -= n; } } }; // TEXTMARKERS // Created with markText and setBookmark methods. A TextMarker is a // handle that can be used to clear or find a marked position in the // document. Line objects hold arrays (markedSpans) containing // {from, to, marker} object pointing to such marker objects, and // indicating that such a marker is present on that line. Multiple // lines may point to the same marker when it spans across lines. // The spans will have null for their from/to properties when the // marker continues beyond the start/end of the line. Markers have // links back to the lines they currently touch. var nextMarkerId = 0; var TextMarker = CodeMirror.TextMarker = function(doc, type) { this.lines = []; this.type = type; this.doc = doc; this.id = ++nextMarkerId; }; eventMixin(TextMarker); // Clear the marker. TextMarker.prototype.clear = function() { if (this.explicitlyCleared) return; var cm = this.doc.cm, withOp = cm && !cm.curOp; if (withOp) startOperation(cm); if (hasHandler(this, "clear")) { var found = this.find(); if (found) signalLater(this, "clear", found.from, found.to); } var min = null, max = null; for (var i = 0; i < this.lines.length; ++i) { var line = this.lines[i]; var span = getMarkedSpanFor(line.markedSpans, this); if (cm && !this.collapsed) regLineChange(cm, lineNo(line), "text"); else if (cm) { if (span.to != null) max = lineNo(line); if (span.from != null) min = lineNo(line); } line.markedSpans = removeMarkedSpan(line.markedSpans, span); if (span.from == null && this.collapsed && !lineIsHidden(this.doc, line) && cm) updateLineHeight(line, textHeight(cm.display)); } if (cm && this.collapsed && !cm.options.lineWrapping) for (var i = 0; i < this.lines.length; ++i) { var visual = visualLine(this.lines[i]), len = lineLength(visual); if (len > cm.display.maxLineLength) { cm.display.maxLine = visual; cm.display.maxLineLength = len; cm.display.maxLineChanged = true; } } if (min != null && cm && this.collapsed) regChange(cm, min, max + 1); this.lines.length = 0; this.explicitlyCleared = true; if (this.atomic && this.doc.cantEdit) { this.doc.cantEdit = false; if (cm) reCheckSelection(cm.doc); } if (cm) signalLater(cm, "markerCleared", cm, this); if (withOp) endOperation(cm); if (this.parent) this.parent.clear(); }; // Find the position of the marker in the document. Returns a {from, // to} object by default. Side can be passed to get a specific side // -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the // Pos objects returned contain a line object, rather than a line // number (used to prevent looking up the same line twice). TextMarker.prototype.find = function(side, lineObj) { if (side == null && this.type == "bookmark") side = 1; var from, to; for (var i = 0; i < this.lines.length; ++i) { var line = this.lines[i]; var span = getMarkedSpanFor(line.markedSpans, this); if (span.from != null) { from = Pos(lineObj ? line : lineNo(line), span.from); if (side == -1) return from; } if (span.to != null) { to = Pos(lineObj ? line : lineNo(line), span.to); if (side == 1) return to; } } return from && {from: from, to: to}; }; // Signals that the marker's widget changed, and surrounding layout // should be recomputed. TextMarker.prototype.changed = function() { var pos = this.find(-1, true), widget = this, cm = this.doc.cm; if (!pos || !cm) return; runInOp(cm, function() { var line = pos.line, lineN = lineNo(pos.line); var view = findViewForLine(cm, lineN); if (view) { clearLineMeasurementCacheFor(view); cm.curOp.selectionChanged = cm.curOp.forceUpdate = true; } cm.curOp.updateMaxLine = true; if (!lineIsHidden(widget.doc, line) && widget.height != null) { var oldHeight = widget.height; widget.height = null; var dHeight = widgetHeight(widget) - oldHeight; if (dHeight) updateLineHeight(line, line.height + dHeight); } }); }; TextMarker.prototype.attachLine = function(line) { if (!this.lines.length && this.doc.cm) { var op = this.doc.cm.curOp; if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1) (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this); } this.lines.push(line); }; TextMarker.prototype.detachLine = function(line) { this.lines.splice(indexOf(this.lines, line), 1); if (!this.lines.length && this.doc.cm) { var op = this.doc.cm.curOp; (op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this); } }; // Collapsed markers have unique ids, in order to be able to order // them, which is needed for uniquely determining an outer marker // when they overlap (they may nest, but not partially overlap). var nextMarkerId = 0; // Create a marker, wire it up to the right lines, and function markText(doc, from, to, options, type) { // Shared markers (across linked documents) are handled separately // (markTextShared will call out to this again, once per // document). if (options && options.shared) return markTextShared(doc, from, to, options, type); // Ensure we are in an operation. if (doc.cm && !doc.cm.curOp) return operation(doc.cm, markText)(doc, from, to, options, type); var marker = new TextMarker(doc, type), diff = cmp(from, to); if (options) copyObj(options, marker, false); // Don't connect empty markers unless clearWhenEmpty is false if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false) return marker; if (marker.replacedWith) { // Showing up as a widget implies collapsed (widget replaces text) marker.collapsed = true; marker.widgetNode = elt("span", [marker.replacedWith], "CodeMirror-widget"); if (!options.handleMouseEvents) marker.widgetNode.setAttribute("cm-ignore-events", "true"); if (options.insertLeft) marker.widgetNode.insertLeft = true; } if (marker.collapsed) { if (conflictingCollapsedRange(doc, from.line, from, to, marker) || from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker)) throw new Error("Inserting collapsed marker partially overlapping an existing one"); sawCollapsedSpans = true; } if (marker.addToHistory) addChangeToHistory(doc, {from: from, to: to, origin: "markText"}, doc.sel, NaN); var curLine = from.line, cm = doc.cm, updateMaxLine; doc.iter(curLine, to.line + 1, function(line) { if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine) updateMaxLine = true; if (marker.collapsed && curLine != from.line) updateLineHeight(line, 0); addMarkedSpan(line, new MarkedSpan(marker, curLine == from.line ? from.ch : null, curLine == to.line ? to.ch : null)); ++curLine; }); // lineIsHidden depends on the presence of the spans, so needs a second pass if (marker.collapsed) doc.iter(from.line, to.line + 1, function(line) { if (lineIsHidden(doc, line)) updateLineHeight(line, 0); }); if (marker.clearOnEnter) on(marker, "beforeCursorEnter", function() { marker.clear(); }); if (marker.readOnly) { sawReadOnlySpans = true; if (doc.history.done.length || doc.history.undone.length) doc.clearHistory(); } if (marker.collapsed) { marker.id = ++nextMarkerId; marker.atomic = true; } if (cm) { // Sync editor state if (updateMaxLine) cm.curOp.updateMaxLine = true; if (marker.collapsed) regChange(cm, from.line, to.line + 1); else if (marker.className || marker.title || marker.startStyle || marker.endStyle || marker.css) for (var i = from.line; i <= to.line; i++) regLineChange(cm, i, "text"); if (marker.atomic) reCheckSelection(cm.doc); signalLater(cm, "markerAdded", cm, marker); } return marker; } // SHARED TEXTMARKERS // A shared marker spans multiple linked documents. It is // implemented as a meta-marker-object controlling multiple normal // markers. var SharedTextMarker = CodeMirror.SharedTextMarker = function(markers, primary) { this.markers = markers; this.primary = primary; for (var i = 0; i < markers.length; ++i) markers[i].parent = this; }; eventMixin(SharedTextMarker); SharedTextMarker.prototype.clear = function() { if (this.explicitlyCleared) return; this.explicitlyCleared = true; for (var i = 0; i < this.markers.length; ++i) this.markers[i].clear(); signalLater(this, "clear"); }; SharedTextMarker.prototype.find = function(side, lineObj) { return this.primary.find(side, lineObj); }; function markTextShared(doc, from, to, options, type) { options = copyObj(options); options.shared = false; var markers = [markText(doc, from, to, options, type)], primary = markers[0]; var widget = options.widgetNode; linkedDocs(doc, function(doc) { if (widget) options.widgetNode = widget.cloneNode(true); markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type)); for (var i = 0; i < doc.linked.length; ++i) if (doc.linked[i].isParent) return; primary = lst(markers); }); return new SharedTextMarker(markers, primary); } function findSharedMarkers(doc) { return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())), function(m) { return m.parent; }); } function copySharedMarkers(doc, markers) { for (var i = 0; i < markers.length; i++) { var marker = markers[i], pos = marker.find(); var mFrom = doc.clipPos(pos.from), mTo = doc.clipPos(pos.to); if (cmp(mFrom, mTo)) { var subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type); marker.markers.push(subMark); subMark.parent = marker; } } } function detachSharedMarkers(markers) { for (var i = 0; i < markers.length; i++) { var marker = markers[i], linked = [marker.primary.doc];; linkedDocs(marker.primary.doc, function(d) { linked.push(d); }); for (var j = 0; j < marker.markers.length; j++) { var subMarker = marker.markers[j]; if (indexOf(linked, subMarker.doc) == -1) { subMarker.parent = null; marker.markers.splice(j--, 1); } } } } // TEXTMARKER SPANS function MarkedSpan(marker, from, to) { this.marker = marker; this.from = from; this.to = to; } // Search an array of spans for a span matching the given marker. function getMarkedSpanFor(spans, marker) { if (spans) for (var i = 0; i < spans.length; ++i) { var span = spans[i]; if (span.marker == marker) return span; } } // Remove a span from an array, returning undefined if no spans are // left (we don't store arrays for lines without spans). function removeMarkedSpan(spans, span) { for (var r, i = 0; i < spans.length; ++i) if (spans[i] != span) (r || (r = [])).push(spans[i]); return r; } // Add a span to a line. function addMarkedSpan(line, span) { line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span]; span.marker.attachLine(line); } // Used for the algorithm that adjusts markers for a change in the // document. These functions cut an array of spans at a given // character position, returning an array of remaining chunks (or // undefined if nothing remains). function markedSpansBefore(old, startCh, isInsert) { if (old) for (var i = 0, nw; i < old.length; ++i) { var span = old[i], marker = span.marker; var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh); if (startsBefore || span.from == startCh && marker.type == "bookmark" && (!isInsert || !span.marker.insertLeft)) { var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh); (nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to)); } } return nw; } function markedSpansAfter(old, endCh, isInsert) { if (old) for (var i = 0, nw; i < old.length; ++i) { var span = old[i], marker = span.marker; var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh); if (endsAfter || span.from == endCh && marker.type == "bookmark" && (!isInsert || span.marker.insertLeft)) { var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh); (nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh, span.to == null ? null : span.to - endCh)); } } return nw; } // Given a change object, compute the new set of marker spans that // cover the line in which the change took place. Removes spans // entirely within the change, reconnects spans belonging to the // same marker that appear on both sides of the change, and cuts off // spans partially within the change. Returns an array of span // arrays with one element for each line in (after) the change. function stretchSpansOverChange(doc, change) { if (change.full) return null; var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans; var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans; if (!oldFirst && !oldLast) return null; var startCh = change.from.ch, endCh = change.to.ch, isInsert = cmp(change.from, change.to) == 0; // Get the spans that 'stick out' on both sides var first = markedSpansBefore(oldFirst, startCh, isInsert); var last = markedSpansAfter(oldLast, endCh, isInsert); // Next, merge those two ends var sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0); if (first) { // Fix up .to properties of first for (var i = 0; i < first.length; ++i) { var span = first[i]; if (span.to == null) { var found = getMarkedSpanFor(last, span.marker); if (!found) span.to = startCh; else if (sameLine) span.to = found.to == null ? null : found.to + offset; } } } if (last) { // Fix up .from in last (or move them into first in case of sameLine) for (var i = 0; i < last.length; ++i) { var span = last[i]; if (span.to != null) span.to += offset; if (span.from == null) { var found = getMarkedSpanFor(first, span.marker); if (!found) { span.from = offset; if (sameLine) (first || (first = [])).push(span); } } else { span.from += offset; if (sameLine) (first || (first = [])).push(span); } } } // Make sure we didn't create any zero-length spans if (first) first = clearEmptySpans(first); if (last && last != first) last = clearEmptySpans(last); var newMarkers = [first]; if (!sameLine) { // Fill gap with whole-line-spans var gap = change.text.length - 2, gapMarkers; if (gap > 0 && first) for (var i = 0; i < first.length; ++i) if (first[i].to == null) (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i].marker, null, null)); for (var i = 0; i < gap; ++i) newMarkers.push(gapMarkers); newMarkers.push(last); } return newMarkers; } // Remove spans that are empty and don't have a clearWhenEmpty // option of false. function clearEmptySpans(spans) { for (var i = 0; i < spans.length; ++i) { var span = spans[i]; if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false) spans.splice(i--, 1); } if (!spans.length) return null; return spans; } // Used for un/re-doing changes from the history. Combines the // result of computing the existing spans with the set of spans that // existed in the history (so that deleting around a span and then // undoing brings back the span). function mergeOldSpans(doc, change) { var old = getOldSpans(doc, change); var stretched = stretchSpansOverChange(doc, change); if (!old) return stretched; if (!stretched) return old; for (var i = 0; i < old.length; ++i) { var oldCur = old[i], stretchCur = stretched[i]; if (oldCur && stretchCur) { spans: for (var j = 0; j < stretchCur.length; ++j) { var span = stretchCur[j]; for (var k = 0; k < oldCur.length; ++k) if (oldCur[k].marker == span.marker) continue spans; oldCur.push(span); } } else if (stretchCur) { old[i] = stretchCur; } } return old; } // Used to 'clip' out readOnly ranges when making a change. function removeReadOnlyRanges(doc, from, to) { var markers = null; doc.iter(from.line, to.line + 1, function(line) { if (line.markedSpans) for (var i = 0; i < line.markedSpans.length; ++i) { var mark = line.markedSpans[i].marker; if (mark.readOnly && (!markers || indexOf(markers, mark) == -1)) (markers || (markers = [])).push(mark); } }); if (!markers) return null; var parts = [{from: from, to: to}]; for (var i = 0; i < markers.length; ++i) { var mk = markers[i], m = mk.find(0); for (var j = 0; j < parts.length; ++j) { var p = parts[j]; if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) continue; var newParts = [j, 1], dfrom = cmp(p.from, m.from), dto = cmp(p.to, m.to); if (dfrom < 0 || !mk.inclusiveLeft && !dfrom) newParts.push({from: p.from, to: m.from}); if (dto > 0 || !mk.inclusiveRight && !dto) newParts.push({from: m.to, to: p.to}); parts.splice.apply(parts, newParts); j += newParts.length - 1; } } return parts; } // Connect or disconnect spans from a line. function detachMarkedSpans(line) { var spans = line.markedSpans; if (!spans) return; for (var i = 0; i < spans.length; ++i) spans[i].marker.detachLine(line); line.markedSpans = null; } function attachMarkedSpans(line, spans) { if (!spans) return; for (var i = 0; i < spans.length; ++i) spans[i].marker.attachLine(line); line.markedSpans = spans; } // Helpers used when computing which overlapping collapsed span // counts as the larger one. function extraLeft(marker) { return marker.inclusiveLeft ? -1 : 0; } function extraRight(marker) { return marker.inclusiveRight ? 1 : 0; } // Returns a number indicating which of two overlapping collapsed // spans is larger (and thus includes the other). Falls back to // comparing ids when the spans cover exactly the same range. function compareCollapsedMarkers(a, b) { var lenDiff = a.lines.length - b.lines.length; if (lenDiff != 0) return lenDiff; var aPos = a.find(), bPos = b.find(); var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b); if (fromCmp) return -fromCmp; var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b); if (toCmp) return toCmp; return b.id - a.id; } // Find out whether a line ends or starts in a collapsed span. If // so, return the marker for that span. function collapsedSpanAtSide(line, start) { var sps = sawCollapsedSpans && line.markedSpans, found; if (sps) for (var sp, i = 0; i < sps.length; ++i) { sp = sps[i]; if (sp.marker.collapsed && (start ? sp.from : sp.to) == null && (!found || compareCollapsedMarkers(found, sp.marker) < 0)) found = sp.marker; } return found; } function collapsedSpanAtStart(line) { return collapsedSpanAtSide(line, true); } function collapsedSpanAtEnd(line) { return collapsedSpanAtSide(line, false); } // Test whether there exists a collapsed span that partially // overlaps (covers the start or end, but not both) of a new span. // Such overlap is not allowed. function conflictingCollapsedRange(doc, lineNo, from, to, marker) { var line = getLine(doc, lineNo); var sps = sawCollapsedSpans && line.markedSpans; if (sps) for (var i = 0; i < sps.length; ++i) { var sp = sps[i]; if (!sp.marker.collapsed) continue; var found = sp.marker.find(0); var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker); var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker); if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) continue; if (fromCmp <= 0 && (cmp(found.to, from) > 0 || (sp.marker.inclusiveRight && marker.inclusiveLeft)) || fromCmp >= 0 && (cmp(found.from, to) < 0 || (sp.marker.inclusiveLeft && marker.inclusiveRight))) return true; } } // A visual line is a line as drawn on the screen. Folding, for // example, can cause multiple logical lines to appear on the same // visual line. This finds the start of the visual line that the // given line is part of (usually that is the line itself). function visualLine(line) { var merged; while (merged = collapsedSpanAtStart(line)) line = merged.find(-1, true).line; return line; } // Returns an array of logical lines that continue the visual line // started by the argument, or undefined if there are no such lines. function visualLineContinued(line) { var merged, lines; while (merged = collapsedSpanAtEnd(line)) { line = merged.find(1, true).line; (lines || (lines = [])).push(line); } return lines; } // Get the line number of the start of the visual line that the // given line number is part of. function visualLineNo(doc, lineN) { var line = getLine(doc, lineN), vis = visualLine(line); if (line == vis) return lineN; return lineNo(vis); } // Get the line number of the start of the next visual line after // the given line. function visualLineEndNo(doc, lineN) { if (lineN > doc.lastLine()) return lineN; var line = getLine(doc, lineN), merged; if (!lineIsHidden(doc, line)) return lineN; while (merged = collapsedSpanAtEnd(line)) line = merged.find(1, true).line; return lineNo(line) + 1; } // Compute whether a line is hidden. Lines count as hidden when they // are part of a visual line that starts with another line, or when // they are entirely covered by collapsed, non-widget span. function lineIsHidden(doc, line) { var sps = sawCollapsedSpans && line.markedSpans; if (sps) for (var sp, i = 0; i < sps.length; ++i) { sp = sps[i]; if (!sp.marker.collapsed) continue; if (sp.from == null) return true; if (sp.marker.widgetNode) continue; if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp)) return true; } } function lineIsHiddenInner(doc, line, span) { if (span.to == null) { var end = span.marker.find(1, true); return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker)); } if (span.marker.inclusiveRight && span.to == line.text.length) return true; for (var sp, i = 0; i < line.markedSpans.length; ++i) { sp = line.markedSpans[i]; if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to && (sp.to == null || sp.to != span.from) && (sp.marker.inclusiveLeft || span.marker.inclusiveRight) && lineIsHiddenInner(doc, line, sp)) return true; } } // LINE WIDGETS // Line widgets are block elements displayed above or below a line. var LineWidget = CodeMirror.LineWidget = function(cm, node, options) { if (options) for (var opt in options) if (options.hasOwnProperty(opt)) this[opt] = options[opt]; this.cm = cm; this.node = node; }; eventMixin(LineWidget); function adjustScrollWhenAboveVisible(cm, line, diff) { if (heightAtLine(line) < ((cm.curOp && cm.curOp.scrollTop) || cm.doc.scrollTop)) addToScrollPos(cm, null, diff); } LineWidget.prototype.clear = function() { var cm = this.cm, ws = this.line.widgets, line = this.line, no = lineNo(line); if (no == null || !ws) return; for (var i = 0; i < ws.length; ++i) if (ws[i] == this) ws.splice(i--, 1); if (!ws.length) line.widgets = null; var height = widgetHeight(this); runInOp(cm, function() { adjustScrollWhenAboveVisible(cm, line, -height); regLineChange(cm, no, "widget"); updateLineHeight(line, Math.max(0, line.height - height)); }); }; LineWidget.prototype.changed = function() { var oldH = this.height, cm = this.cm, line = this.line; this.height = null; var diff = widgetHeight(this) - oldH; if (!diff) return; runInOp(cm, function() { cm.curOp.forceUpdate = true; adjustScrollWhenAboveVisible(cm, line, diff); updateLineHeight(line, line.height + diff); }); }; function widgetHeight(widget) { if (widget.height != null) return widget.height; if (!contains(document.body, widget.node)) { var parentStyle = "position: relative;"; if (widget.coverGutter) parentStyle += "margin-left: -" + widget.cm.display.gutters.offsetWidth + "px;"; if (widget.noHScroll) parentStyle += "width: " + widget.cm.display.wrapper.clientWidth + "px;"; removeChildrenAndAdd(widget.cm.display.measure, elt("div", [widget.node], null, parentStyle)); } return widget.height = widget.node.offsetHeight; } function addLineWidget(cm, handle, node, options) { var widget = new LineWidget(cm, node, options); if (widget.noHScroll) cm.display.alignWidgets = true; changeLine(cm.doc, handle, "widget", function(line) { var widgets = line.widgets || (line.widgets = []); if (widget.insertAt == null) widgets.push(widget); else widgets.splice(Math.min(widgets.length - 1, Math.max(0, widget.insertAt)), 0, widget); widget.line = line; if (!lineIsHidden(cm.doc, line)) { var aboveVisible = heightAtLine(line) < cm.doc.scrollTop; updateLineHeight(line, line.height + widgetHeight(widget)); if (aboveVisible) addToScrollPos(cm, null, widget.height); cm.curOp.forceUpdate = true; } return true; }); return widget; } // LINE DATA STRUCTURE // Line objects. These hold state related to a line, including // highlighting info (the styles array). var Line = CodeMirror.Line = function(text, markedSpans, estimateHeight) { this.text = text; attachMarkedSpans(this, markedSpans); this.height = estimateHeight ? estimateHeight(this) : 1; }; eventMixin(Line); Line.prototype.lineNo = function() { return lineNo(this); }; // Change the content (text, markers) of a line. Automatically // invalidates cached information and tries to re-estimate the // line's height. function updateLine(line, text, markedSpans, estimateHeight) { line.text = text; if (line.stateAfter) line.stateAfter = null; if (line.styles) line.styles = null; if (line.order != null) line.order = null; detachMarkedSpans(line); attachMarkedSpans(line, markedSpans); var estHeight = estimateHeight ? estimateHeight(line) : 1; if (estHeight != line.height) updateLineHeight(line, estHeight); } // Detach a line from the document tree and its markers. function cleanUpLine(line) { line.parent = null; detachMarkedSpans(line); } function extractLineClasses(type, output) { if (type) for (;;) { var lineClass = type.match(/(?:^|\s+)line-(background-)?(\S+)/); if (!lineClass) break; type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length); var prop = lineClass[1] ? "bgClass" : "textClass"; if (output[prop] == null) output[prop] = lineClass[2]; else if (!(new RegExp("(?:^|\s)" + lineClass[2] + "(?:$|\s)")).test(output[prop])) output[prop] += " " + lineClass[2]; } return type; } function callBlankLine(mode, state) { if (mode.blankLine) return mode.blankLine(state); if (!mode.innerMode) return; var inner = CodeMirror.innerMode(mode, state); if (inner.mode.blankLine) return inner.mode.blankLine(inner.state); } function readToken(mode, stream, state, inner) { for (var i = 0; i < 10; i++) { if (inner) inner[0] = CodeMirror.innerMode(mode, state).mode; var style = mode.token(stream, state); if (stream.pos > stream.start) return style; } throw new Error("Mode " + mode.name + " failed to advance stream."); } // Utility for getTokenAt and getLineTokens function takeToken(cm, pos, precise, asArray) { function getObj(copy) { return {start: stream.start, end: stream.pos, string: stream.current(), type: style || null, state: copy ? copyState(doc.mode, state) : state}; } var doc = cm.doc, mode = doc.mode, style; pos = clipPos(doc, pos); var line = getLine(doc, pos.line), state = getStateBefore(cm, pos.line, precise); var stream = new StringStream(line.text, cm.options.tabSize), tokens; if (asArray) tokens = []; while ((asArray || stream.pos < pos.ch) && !stream.eol()) { stream.start = stream.pos; style = readToken(mode, stream, state); if (asArray) tokens.push(getObj(true)); } return asArray ? tokens : getObj(); } // Run the given mode's parser over a line, calling f for each token. function runMode(cm, text, mode, state, f, lineClasses, forceToEnd) { var flattenSpans = mode.flattenSpans; if (flattenSpans == null) flattenSpans = cm.options.flattenSpans; var curStart = 0, curStyle = null; var stream = new StringStream(text, cm.options.tabSize), style; var inner = cm.options.addModeClass && [null]; if (text == "") extractLineClasses(callBlankLine(mode, state), lineClasses); while (!stream.eol()) { if (stream.pos > cm.options.maxHighlightLength) { flattenSpans = false; if (forceToEnd) processLine(cm, text, state, stream.pos); stream.pos = text.length; style = null; } else { style = extractLineClasses(readToken(mode, stream, state, inner), lineClasses); } if (inner) { var mName = inner[0].name; if (mName) style = "m-" + (style ? mName + " " + style : mName); } if (!flattenSpans || curStyle != style) { while (curStart < stream.start) { curStart = Math.min(stream.start, curStart + 50000); f(curStart, curStyle); } curStyle = style; } stream.start = stream.pos; } while (curStart < stream.pos) { // Webkit seems to refuse to render text nodes longer than 57444 characters var pos = Math.min(stream.pos, curStart + 50000); f(pos, curStyle); curStart = pos; } } // Compute a style array (an array starting with a mode generation // -- for invalidation -- followed by pairs of end positions and // style strings), which is used to highlight the tokens on the // line. function highlightLine(cm, line, state, forceToEnd) { // A styles array always starts with a number identifying the // mode/overlays that it is based on (for easy invalidation). var st = [cm.state.modeGen], lineClasses = {}; // Compute the base array of styles runMode(cm, line.text, cm.doc.mode, state, function(end, style) { st.push(end, style); }, lineClasses, forceToEnd); // Run overlays, adjust style array. for (var o = 0; o < cm.state.overlays.length; ++o) { var overlay = cm.state.overlays[o], i = 1, at = 0; runMode(cm, line.text, overlay.mode, true, function(end, style) { var start = i; // Ensure there's a token end at the current position, and that i points at it while (at < end) { var i_end = st[i]; if (i_end > end) st.splice(i, 1, end, st[i+1], i_end); i += 2; at = Math.min(end, i_end); } if (!style) return; if (overlay.opaque) { st.splice(start, i - start, end, "cm-overlay " + style); i = start + 2; } else { for (; start < i; start += 2) { var cur = st[start+1]; st[start+1] = (cur ? cur + " " : "") + "cm-overlay " + style; } } }, lineClasses); } return {styles: st, classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null}; } function getLineStyles(cm, line, updateFrontier) { if (!line.styles || line.styles[0] != cm.state.modeGen) { var result = highlightLine(cm, line, line.stateAfter = getStateBefore(cm, lineNo(line))); line.styles = result.styles; if (result.classes) line.styleClasses = result.classes; else if (line.styleClasses) line.styleClasses = null; if (updateFrontier === cm.doc.frontier) cm.doc.frontier++; } return line.styles; } // Lightweight form of highlight -- proceed over this line and // update state, but don't save a style array. Used for lines that // aren't currently visible. function processLine(cm, text, state, startAt) { var mode = cm.doc.mode; var stream = new StringStream(text, cm.options.tabSize); stream.start = stream.pos = startAt || 0; if (text == "") callBlankLine(mode, state); while (!stream.eol() && stream.pos <= cm.options.maxHighlightLength) { readToken(mode, stream, state); stream.start = stream.pos; } } // Convert a style as returned by a mode (either null, or a string // containing one or more styles) to a CSS style. This is cached, // and also looks for line-wide styles. var styleToClassCache = {}, styleToClassCacheWithMode = {}; function interpretTokenStyle(style, options) { if (!style || /^\s*$/.test(style)) return null; var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache; return cache[style] || (cache[style] = style.replace(/\S+/g, "cm-$&")); } // Render the DOM representation of the text of a line. Also builds // up a 'line map', which points at the DOM nodes that represent // specific stretches of text, and is used by the measuring code. // The returned object contains the DOM node, this map, and // information about line-wide styles that were set by the mode. function buildLineContent(cm, lineView) { // The padding-right forces the element to have a 'border', which // is needed on Webkit to be able to get line-level bounding // rectangles for it (in measureChar). var content = elt("span", null, null, webkit ? "padding-right: .1px" : null); var builder = {pre: elt("pre", [content]), content: content, col: 0, pos: 0, cm: cm}; lineView.measure = {}; // Iterate over the logical lines that make up this visual line. for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) { var line = i ? lineView.rest[i - 1] : lineView.line, order; builder.pos = 0; builder.addToken = buildToken; // Optionally wire in some hacks into the token-rendering // algorithm, to deal with browser quirks. if ((ie || webkit) && cm.getOption("lineWrapping")) builder.addToken = buildTokenSplitSpaces(builder.addToken); if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line))) builder.addToken = buildTokenBadBidi(builder.addToken, order); builder.map = []; var allowFrontierUpdate = lineView != cm.display.externalMeasured && lineNo(line); insertLineContent(line, builder, getLineStyles(cm, line, allowFrontierUpdate)); if (line.styleClasses) { if (line.styleClasses.bgClass) builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || ""); if (line.styleClasses.textClass) builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || ""); } // Ensure at least a single node is present, for measuring. if (builder.map.length == 0) builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure))); // Store the map and a cache object for the current logical line if (i == 0) { lineView.measure.map = builder.map; lineView.measure.cache = {}; } else { (lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map); (lineView.measure.caches || (lineView.measure.caches = [])).push({}); } } // See issue #2901 if (webkit && /\bcm-tab\b/.test(builder.content.lastChild.className)) builder.content.className = "cm-tab-wrap-hack"; signal(cm, "renderLine", cm, lineView.line, builder.pre); if (builder.pre.className) builder.textClass = joinClasses(builder.pre.className, builder.textClass || ""); return builder; } function defaultSpecialCharPlaceholder(ch) { var token = elt("span", "\u2022", "cm-invalidchar"); token.title = "\\u" + ch.charCodeAt(0).toString(16); token.setAttribute("aria-label", token.title); return token; } // Build up the DOM representation for a single token, and add it to // the line map. Takes care to render special characters separately. function buildToken(builder, text, style, startStyle, endStyle, title, css) { if (!text) return; var special = builder.cm.options.specialChars, mustWrap = false; if (!special.test(text)) { builder.col += text.length; var content = document.createTextNode(text); builder.map.push(builder.pos, builder.pos + text.length, content); if (ie && ie_version < 9) mustWrap = true; builder.pos += text.length; } else { var content = document.createDocumentFragment(), pos = 0; while (true) { special.lastIndex = pos; var m = special.exec(text); var skipped = m ? m.index - pos : text.length - pos; if (skipped) { var txt = document.createTextNode(text.slice(pos, pos + skipped)); if (ie && ie_version < 9) content.appendChild(elt("span", [txt])); else content.appendChild(txt); builder.map.push(builder.pos, builder.pos + skipped, txt); builder.col += skipped; builder.pos += skipped; } if (!m) break; pos += skipped + 1; if (m[0] == "\t") { var tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize; var txt = content.appendChild(elt("span", spaceStr(tabWidth), "cm-tab")); txt.setAttribute("role", "presentation"); txt.setAttribute("cm-text", "\t"); builder.col += tabWidth; } else { var txt = builder.cm.options.specialCharPlaceholder(m[0]); txt.setAttribute("cm-text", m[0]); if (ie && ie_version < 9) content.appendChild(elt("span", [txt])); else content.appendChild(txt); builder.col += 1; } builder.map.push(builder.pos, builder.pos + 1, txt); builder.pos++; } } if (style || startStyle || endStyle || mustWrap || css) { var fullStyle = style || ""; if (startStyle) fullStyle += startStyle; if (endStyle) fullStyle += endStyle; var token = elt("span", [content], fullStyle, css); if (title) token.title = title; return builder.content.appendChild(token); } builder.content.appendChild(content); } function buildTokenSplitSpaces(inner) { function split(old) { var out = " "; for (var i = 0; i < old.length - 2; ++i) out += i % 2 ? " " : "\u00a0"; out += " "; return out; } return function(builder, text, style, startStyle, endStyle, title) { inner(builder, text.replace(/ {3,}/g, split), style, startStyle, endStyle, title); }; } // Work around nonsense dimensions being reported for stretches of // right-to-left text. function buildTokenBadBidi(inner, order) { return function(builder, text, style, startStyle, endStyle, title) { style = style ? style + " cm-force-border" : "cm-force-border"; var start = builder.pos, end = start + text.length; for (;;) { // Find the part that overlaps with the start of this text for (var i = 0; i < order.length; i++) { var part = order[i]; if (part.to > start && part.from <= start) break; } if (part.to >= end) return inner(builder, text, style, startStyle, endStyle, title); inner(builder, text.slice(0, part.to - start), style, startStyle, null, title); startStyle = null; text = text.slice(part.to - start); start = part.to; } }; } function buildCollapsedSpan(builder, size, marker, ignoreWidget) { var widget = !ignoreWidget && marker.widgetNode; if (widget) builder.map.push(builder.pos, builder.pos + size, widget); if (!ignoreWidget && builder.cm.display.input.needsContentAttribute) { if (!widget) widget = builder.content.appendChild(document.createElement("span")); widget.setAttribute("cm-marker", marker.id); } if (widget) { builder.cm.display.input.setUneditable(widget); builder.content.appendChild(widget); } builder.pos += size; } // Outputs a number of spans to make up a line, taking highlighting // and marked text into account. function insertLineContent(line, builder, styles) { var spans = line.markedSpans, allText = line.text, at = 0; if (!spans) { for (var i = 1; i < styles.length; i+=2) builder.addToken(builder, allText.slice(at, at = styles[i]), interpretTokenStyle(styles[i+1], builder.cm.options)); return; } var len = allText.length, pos = 0, i = 1, text = "", style, css; var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, title, collapsed; for (;;) { if (nextChange == pos) { // Update current marker set spanStyle = spanEndStyle = spanStartStyle = title = css = ""; collapsed = null; nextChange = Infinity; var foundBookmarks = []; for (var j = 0; j < spans.length; ++j) { var sp = spans[j], m = sp.marker; if (sp.from <= pos && (sp.to == null || sp.to > pos)) { if (sp.to != null && nextChange > sp.to) { nextChange = sp.to; spanEndStyle = ""; } if (m.className) spanStyle += " " + m.className; if (m.css) css = m.css; if (m.startStyle && sp.from == pos) spanStartStyle += " " + m.startStyle; if (m.endStyle && sp.to == nextChange) spanEndStyle += " " + m.endStyle; if (m.title && !title) title = m.title; if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0)) collapsed = sp; } else if (sp.from > pos && nextChange > sp.from) { nextChange = sp.from; } if (m.type == "bookmark" && sp.from == pos && m.widgetNode) foundBookmarks.push(m); } if (collapsed && (collapsed.from || 0) == pos) { buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos, collapsed.marker, collapsed.from == null); if (collapsed.to == null) return; } if (!collapsed && foundBookmarks.length) for (var j = 0; j < foundBookmarks.length; ++j) buildCollapsedSpan(builder, 0, foundBookmarks[j]); } if (pos >= len) break; var upto = Math.min(len, nextChange); while (true) { if (text) { var end = pos + text.length; if (!collapsed) { var tokenText = end > upto ? text.slice(0, upto - pos) : text; builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle, spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : "", title, css); } if (end >= upto) {text = text.slice(upto - pos); pos = upto; break;} pos = end; spanStartStyle = ""; } text = allText.slice(at, at = styles[i++]); style = interpretTokenStyle(styles[i++], builder.cm.options); } } } // DOCUMENT DATA STRUCTURE // By default, updates that start and end at the beginning of a line // are treated specially, in order to make the association of line // widgets and marker elements with the text behave more intuitive. function isWholeLineUpdate(doc, change) { return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == "" && (!doc.cm || doc.cm.options.wholeLineUpdateBefore); } // Perform a change on the document data structure. function updateDoc(doc, change, markedSpans, estimateHeight) { function spansFor(n) {return markedSpans ? markedSpans[n] : null;} function update(line, text, spans) { updateLine(line, text, spans, estimateHeight); signalLater(line, "change", line, change); } function linesFor(start, end) { for (var i = start, result = []; i < end; ++i) result.push(new Line(text[i], spansFor(i), estimateHeight)); return result; } var from = change.from, to = change.to, text = change.text; var firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line); var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line; // Adjust the line structure if (change.full) { doc.insert(0, linesFor(0, text.length)); doc.remove(text.length, doc.size - text.length); } else if (isWholeLineUpdate(doc, change)) { // This is a whole-line replace. Treated specially to make // sure line objects move the way they are supposed to. var added = linesFor(0, text.length - 1); update(lastLine, lastLine.text, lastSpans); if (nlines) doc.remove(from.line, nlines); if (added.length) doc.insert(from.line, added); } else if (firstLine == lastLine) { if (text.length == 1) { update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans); } else { var added = linesFor(1, text.length - 1); added.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight)); update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0)); doc.insert(from.line + 1, added); } } else if (text.length == 1) { update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0)); doc.remove(from.line + 1, nlines); } else { update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0)); update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans); var added = linesFor(1, text.length - 1); if (nlines > 1) doc.remove(from.line + 1, nlines - 1); doc.insert(from.line + 1, added); } signalLater(doc, "change", doc, change); } // The document is represented as a BTree consisting of leaves, with // chunk of lines in them, and branches, with up to ten leaves or // other branch nodes below them. The top node is always a branch // node, and is the document object itself (meaning it has // additional methods and properties). // // All nodes have parent links. The tree is used both to go from // line numbers to line objects, and to go from objects to numbers. // It also indexes by height, and is used to convert between height // and line object, and to find the total height of the document. // // See also http://marijnhaverbeke.nl/blog/codemirror-line-tree.html function LeafChunk(lines) { this.lines = lines; this.parent = null; for (var i = 0, height = 0; i < lines.length; ++i) { lines[i].parent = this; height += lines[i].height; } this.height = height; } LeafChunk.prototype = { chunkSize: function() { return this.lines.length; }, // Remove the n lines at offset 'at'. removeInner: function(at, n) { for (var i = at, e = at + n; i < e; ++i) { var line = this.lines[i]; this.height -= line.height; cleanUpLine(line); signalLater(line, "delete"); } this.lines.splice(at, n); }, // Helper used to collapse a small branch into a single leaf. collapse: function(lines) { lines.push.apply(lines, this.lines); }, // Insert the given array of lines at offset 'at', count them as // having the given height. insertInner: function(at, lines, height) { this.height += height; this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at)); for (var i = 0; i < lines.length; ++i) lines[i].parent = this; }, // Used to iterate over a part of the tree. iterN: function(at, n, op) { for (var e = at + n; at < e; ++at) if (op(this.lines[at])) return true; } }; function BranchChunk(children) { this.children = children; var size = 0, height = 0; for (var i = 0; i < children.length; ++i) { var ch = children[i]; size += ch.chunkSize(); height += ch.height; ch.parent = this; } this.size = size; this.height = height; this.parent = null; } BranchChunk.prototype = { chunkSize: function() { return this.size; }, removeInner: function(at, n) { this.size -= n; for (var i = 0; i < this.children.length; ++i) { var child = this.children[i], sz = child.chunkSize(); if (at < sz) { var rm = Math.min(n, sz - at), oldHeight = child.height; child.removeInner(at, rm); this.height -= oldHeight - child.height; if (sz == rm) { this.children.splice(i--, 1); child.parent = null; } if ((n -= rm) == 0) break; at = 0; } else at -= sz; } // If the result is smaller than 25 lines, ensure that it is a // single leaf node. if (this.size - n < 25 && (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) { var lines = []; this.collapse(lines); this.children = [new LeafChunk(lines)]; this.children[0].parent = this; } }, collapse: function(lines) { for (var i = 0; i < this.children.length; ++i) this.children[i].collapse(lines); }, insertInner: function(at, lines, height) { this.size += lines.length; this.height += height; for (var i = 0; i < this.children.length; ++i) { var child = this.children[i], sz = child.chunkSize(); if (at <= sz) { child.insertInner(at, lines, height); if (child.lines && child.lines.length > 50) { while (child.lines.length > 50) { var spilled = child.lines.splice(child.lines.length - 25, 25); var newleaf = new LeafChunk(spilled); child.height -= newleaf.height; this.children.splice(i + 1, 0, newleaf); newleaf.parent = this; } this.maybeSpill(); } break; } at -= sz; } }, // When a node has grown, check whether it should be split. maybeSpill: function() { if (this.children.length <= 10) return; var me = this; do { var spilled = me.children.splice(me.children.length - 5, 5); var sibling = new BranchChunk(spilled); if (!me.parent) { // Become the parent node var copy = new BranchChunk(me.children); copy.parent = me; me.children = [copy, sibling]; me = copy; } else { me.size -= sibling.size; me.height -= sibling.height; var myIndex = indexOf(me.parent.children, me); me.parent.children.splice(myIndex + 1, 0, sibling); } sibling.parent = me.parent; } while (me.children.length > 10); me.parent.maybeSpill(); }, iterN: function(at, n, op) { for (var i = 0; i < this.children.length; ++i) { var child = this.children[i], sz = child.chunkSize(); if (at < sz) { var used = Math.min(n, sz - at); if (child.iterN(at, used, op)) return true; if ((n -= used) == 0) break; at = 0; } else at -= sz; } } }; var nextDocId = 0; var Doc = CodeMirror.Doc = function(text, mode, firstLine) { if (!(this instanceof Doc)) return new Doc(text, mode, firstLine); if (firstLine == null) firstLine = 0; BranchChunk.call(this, [new LeafChunk([new Line("", null)])]); this.first = firstLine; this.scrollTop = this.scrollLeft = 0; this.cantEdit = false; this.cleanGeneration = 1; this.frontier = firstLine; var start = Pos(firstLine, 0); this.sel = simpleSelection(start); this.history = new History(null); this.id = ++nextDocId; this.modeOption = mode; if (typeof text == "string") text = splitLines(text); updateDoc(this, {from: start, to: start, text: text}); setSelection(this, simpleSelection(start), sel_dontScroll); }; Doc.prototype = createObj(BranchChunk.prototype, { constructor: Doc, // Iterate over the document. Supports two forms -- with only one // argument, it calls that for each line in the document. With // three, it iterates over the range given by the first two (with // the second being non-inclusive). iter: function(from, to, op) { if (op) this.iterN(from - this.first, to - from, op); else this.iterN(this.first, this.first + this.size, from); }, // Non-public interface for adding and removing lines. insert: function(at, lines) { var height = 0; for (var i = 0; i < lines.length; ++i) height += lines[i].height; this.insertInner(at - this.first, lines, height); }, remove: function(at, n) { this.removeInner(at - this.first, n); }, // From here, the methods are part of the public interface. Most // are also available from CodeMirror (editor) instances. getValue: function(lineSep) { var lines = getLines(this, this.first, this.first + this.size); if (lineSep === false) return lines; return lines.join(lineSep || "\n"); }, setValue: docMethodOp(function(code) { var top = Pos(this.first, 0), last = this.first + this.size - 1; makeChange(this, {from: top, to: Pos(last, getLine(this, last).text.length), text: splitLines(code), origin: "setValue", full: true}, true); setSelection(this, simpleSelection(top)); }), replaceRange: function(code, from, to, origin) { from = clipPos(this, from); to = to ? clipPos(this, to) : from; replaceRange(this, code, from, to, origin); }, getRange: function(from, to, lineSep) { var lines = getBetween(this, clipPos(this, from), clipPos(this, to)); if (lineSep === false) return lines; return lines.join(lineSep || "\n"); }, getLine: function(line) {var l = this.getLineHandle(line); return l && l.text;}, getLineHandle: function(line) {if (isLine(this, line)) return getLine(this, line);}, getLineNumber: function(line) {return lineNo(line);}, getLineHandleVisualStart: function(line) { if (typeof line == "number") line = getLine(this, line); return visualLine(line); }, lineCount: function() {return this.size;}, firstLine: function() {return this.first;}, lastLine: function() {return this.first + this.size - 1;}, clipPos: function(pos) {return clipPos(this, pos);}, getCursor: function(start) { var range = this.sel.primary(), pos; if (start == null || start == "head") pos = range.head; else if (start == "anchor") pos = range.anchor; else if (start == "end" || start == "to" || start === false) pos = range.to(); else pos = range.from(); return pos; }, listSelections: function() { return this.sel.ranges; }, somethingSelected: function() {return this.sel.somethingSelected();}, setCursor: docMethodOp(function(line, ch, options) { setSimpleSelection(this, clipPos(this, typeof line == "number" ? Pos(line, ch || 0) : line), null, options); }), setSelection: docMethodOp(function(anchor, head, options) { setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options); }), extendSelection: docMethodOp(function(head, other, options) { extendSelection(this, clipPos(this, head), other && clipPos(this, other), options); }), extendSelections: docMethodOp(function(heads, options) { extendSelections(this, clipPosArray(this, heads, options)); }), extendSelectionsBy: docMethodOp(function(f, options) { extendSelections(this, map(this.sel.ranges, f), options); }), setSelections: docMethodOp(function(ranges, primary, options) { if (!ranges.length) return; for (var i = 0, out = []; i < ranges.length; i++) out[i] = new Range(clipPos(this, ranges[i].anchor), clipPos(this, ranges[i].head)); if (primary == null) primary = Math.min(ranges.length - 1, this.sel.primIndex); setSelection(this, normalizeSelection(out, primary), options); }), addSelection: docMethodOp(function(anchor, head, options) { var ranges = this.sel.ranges.slice(0); ranges.push(new Range(clipPos(this, anchor), clipPos(this, head || anchor))); setSelection(this, normalizeSelection(ranges, ranges.length - 1), options); }), getSelection: function(lineSep) { var ranges = this.sel.ranges, lines; for (var i = 0; i < ranges.length; i++) { var sel = getBetween(this, ranges[i].from(), ranges[i].to()); lines = lines ? lines.concat(sel) : sel; } if (lineSep === false) return lines; else return lines.join(lineSep || "\n"); }, getSelections: function(lineSep) { var parts = [], ranges = this.sel.ranges; for (var i = 0; i < ranges.length; i++) { var sel = getBetween(this, ranges[i].from(), ranges[i].to()); if (lineSep !== false) sel = sel.join(lineSep || "\n"); parts[i] = sel; } return parts; }, replaceSelection: function(code, collapse, origin) { var dup = []; for (var i = 0; i < this.sel.ranges.length; i++) dup[i] = code; this.replaceSelections(dup, collapse, origin || "+input"); }, replaceSelections: docMethodOp(function(code, collapse, origin) { var changes = [], sel = this.sel; for (var i = 0; i < sel.ranges.length; i++) { var range = sel.ranges[i]; changes[i] = {from: range.from(), to: range.to(), text: splitLines(code[i]), origin: origin}; } var newSel = collapse && collapse != "end" && computeReplacedSel(this, changes, collapse); for (var i = changes.length - 1; i >= 0; i--) makeChange(this, changes[i]); if (newSel) setSelectionReplaceHistory(this, newSel); else if (this.cm) ensureCursorVisible(this.cm); }), undo: docMethodOp(function() {makeChangeFromHistory(this, "undo");}), redo: docMethodOp(function() {makeChangeFromHistory(this, "redo");}), undoSelection: docMethodOp(function() {makeChangeFromHistory(this, "undo", true);}), redoSelection: docMethodOp(function() {makeChangeFromHistory(this, "redo", true);}), setExtending: function(val) {this.extend = val;}, getExtending: function() {return this.extend;}, historySize: function() { var hist = this.history, done = 0, undone = 0; for (var i = 0; i < hist.done.length; i++) if (!hist.done[i].ranges) ++done; for (var i = 0; i < hist.undone.length; i++) if (!hist.undone[i].ranges) ++undone; return {undo: done, redo: undone}; }, clearHistory: function() {this.history = new History(this.history.maxGeneration);}, markClean: function() { this.cleanGeneration = this.changeGeneration(true); }, changeGeneration: function(forceSplit) { if (forceSplit) this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null; return this.history.generation; }, isClean: function (gen) { return this.history.generation == (gen || this.cleanGeneration); }, getHistory: function() { return {done: copyHistoryArray(this.history.done), undone: copyHistoryArray(this.history.undone)}; }, setHistory: function(histData) { var hist = this.history = new History(this.history.maxGeneration); hist.done = copyHistoryArray(histData.done.slice(0), null, true); hist.undone = copyHistoryArray(histData.undone.slice(0), null, true); }, addLineClass: docMethodOp(function(handle, where, cls) { return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function(line) { var prop = where == "text" ? "textClass" : where == "background" ? "bgClass" : where == "gutter" ? "gutterClass" : "wrapClass"; if (!line[prop]) line[prop] = cls; else if (classTest(cls).test(line[prop])) return false; else line[prop] += " " + cls; return true; }); }), removeLineClass: docMethodOp(function(handle, where, cls) { return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function(line) { var prop = where == "text" ? "textClass" : where == "background" ? "bgClass" : where == "gutter" ? "gutterClass" : "wrapClass"; var cur = line[prop]; if (!cur) return false; else if (cls == null) line[prop] = null; else { var found = cur.match(classTest(cls)); if (!found) return false; var end = found.index + found[0].length; line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? "" : " ") + cur.slice(end) || null; } return true; }); }), markText: function(from, to, options) { return markText(this, clipPos(this, from), clipPos(this, to), options, "range"); }, setBookmark: function(pos, options) { var realOpts = {replacedWith: options && (options.nodeType == null ? options.widget : options), insertLeft: options && options.insertLeft, clearWhenEmpty: false, shared: options && options.shared}; pos = clipPos(this, pos); return markText(this, pos, pos, realOpts, "bookmark"); }, findMarksAt: function(pos) { pos = clipPos(this, pos); var markers = [], spans = getLine(this, pos.line).markedSpans; if (spans) for (var i = 0; i < spans.length; ++i) { var span = spans[i]; if ((span.from == null || span.from <= pos.ch) && (span.to == null || span.to >= pos.ch)) markers.push(span.marker.parent || span.marker); } return markers; }, findMarks: function(from, to, filter) { from = clipPos(this, from); to = clipPos(this, to); var found = [], lineNo = from.line; this.iter(from.line, to.line + 1, function(line) { var spans = line.markedSpans; if (spans) for (var i = 0; i < spans.length; i++) { var span = spans[i]; if (!(lineNo == from.line && from.ch > span.to || span.from == null && lineNo != from.line|| lineNo == to.line && span.from > to.ch) && (!filter || filter(span.marker))) found.push(span.marker.parent || span.marker); } ++lineNo; }); return found; }, getAllMarks: function() { var markers = []; this.iter(function(line) { var sps = line.markedSpans; if (sps) for (var i = 0; i < sps.length; ++i) if (sps[i].from != null) markers.push(sps[i].marker); }); return markers; }, posFromIndex: function(off) { var ch, lineNo = this.first; this.iter(function(line) { var sz = line.text.length + 1; if (sz > off) { ch = off; return true; } off -= sz; ++lineNo; }); return clipPos(this, Pos(lineNo, ch)); }, indexFromPos: function (coords) { coords = clipPos(this, coords); var index = coords.ch; if (coords.line < this.first || coords.ch < 0) return 0; this.iter(this.first, coords.line, function (line) { index += line.text.length + 1; }); return index; }, copy: function(copyHistory) { var doc = new Doc(getLines(this, this.first, this.first + this.size), this.modeOption, this.first); doc.scrollTop = this.scrollTop; doc.scrollLeft = this.scrollLeft; doc.sel = this.sel; doc.extend = false; if (copyHistory) { doc.history.undoDepth = this.history.undoDepth; doc.setHistory(this.getHistory()); } return doc; }, linkedDoc: function(options) { if (!options) options = {}; var from = this.first, to = this.first + this.size; if (options.from != null && options.from > from) from = options.from; if (options.to != null && options.to < to) to = options.to; var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from); if (options.sharedHist) copy.history = this.history; (this.linked || (this.linked = [])).push({doc: copy, sharedHist: options.sharedHist}); copy.linked = [{doc: this, isParent: true, sharedHist: options.sharedHist}]; copySharedMarkers(copy, findSharedMarkers(this)); return copy; }, unlinkDoc: function(other) { if (other instanceof CodeMirror) other = other.doc; if (this.linked) for (var i = 0; i < this.linked.length; ++i) { var link = this.linked[i]; if (link.doc != other) continue; this.linked.splice(i, 1); other.unlinkDoc(this); detachSharedMarkers(findSharedMarkers(this)); break; } // If the histories were shared, split them again if (other.history == this.history) { var splitIds = [other.id]; linkedDocs(other, function(doc) {splitIds.push(doc.id);}, true); other.history = new History(null); other.history.done = copyHistoryArray(this.history.done, splitIds); other.history.undone = copyHistoryArray(this.history.undone, splitIds); } }, iterLinkedDocs: function(f) {linkedDocs(this, f);}, getMode: function() {return this.mode;}, getEditor: function() {return this.cm;} }); // Public alias. Doc.prototype.eachLine = Doc.prototype.iter; // Set up methods on CodeMirror's prototype to redirect to the editor's document. var dontDelegate = "iter insert remove copy getEditor".split(" "); for (var prop in Doc.prototype) if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0) CodeMirror.prototype[prop] = (function(method) { return function() {return method.apply(this.doc, arguments);}; })(Doc.prototype[prop]); eventMixin(Doc); // Call f for all linked documents. function linkedDocs(doc, f, sharedHistOnly) { function propagate(doc, skip, sharedHist) { if (doc.linked) for (var i = 0; i < doc.linked.length; ++i) { var rel = doc.linked[i]; if (rel.doc == skip) continue; var shared = sharedHist && rel.sharedHist; if (sharedHistOnly && !shared) continue; f(rel.doc, shared); propagate(rel.doc, doc, shared); } } propagate(doc, null, true); } // Attach a document to an editor. function attachDoc(cm, doc) { if (doc.cm) throw new Error("This document is already in use."); cm.doc = doc; doc.cm = cm; estimateLineHeights(cm); loadMode(cm); if (!cm.options.lineWrapping) findMaxLine(cm); cm.options.mode = doc.modeOption; regChange(cm); } // LINE UTILITIES // Find the line object corresponding to the given line number. function getLine(doc, n) { n -= doc.first; if (n < 0 || n >= doc.size) throw new Error("There is no line " + (n + doc.first) + " in the document."); for (var chunk = doc; !chunk.lines;) { for (var i = 0;; ++i) { var child = chunk.children[i], sz = child.chunkSize(); if (n < sz) { chunk = child; break; } n -= sz; } } return chunk.lines[n]; } // Get the part of a document between two positions, as an array of // strings. function getBetween(doc, start, end) { var out = [], n = start.line; doc.iter(start.line, end.line + 1, function(line) { var text = line.text; if (n == end.line) text = text.slice(0, end.ch); if (n == start.line) text = text.slice(start.ch); out.push(text); ++n; }); return out; } // Get the lines between from and to, as array of strings. function getLines(doc, from, to) { var out = []; doc.iter(from, to, function(line) { out.push(line.text); }); return out; } // Update the height of a line, propagating the height change // upwards to parent nodes. function updateLineHeight(line, height) { var diff = height - line.height; if (diff) for (var n = line; n; n = n.parent) n.height += diff; } // Given a line object, find its line number by walking up through // its parent links. function lineNo(line) { if (line.parent == null) return null; var cur = line.parent, no = indexOf(cur.lines, line); for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) { for (var i = 0;; ++i) { if (chunk.children[i] == cur) break; no += chunk.children[i].chunkSize(); } } return no + cur.first; } // Find the line at the given vertical position, using the height // information in the document tree. function lineAtHeight(chunk, h) { var n = chunk.first; outer: do { for (var i = 0; i < chunk.children.length; ++i) { var child = chunk.children[i], ch = child.height; if (h < ch) { chunk = child; continue outer; } h -= ch; n += child.chunkSize(); } return n; } while (!chunk.lines); for (var i = 0; i < chunk.lines.length; ++i) { var line = chunk.lines[i], lh = line.height; if (h < lh) break; h -= lh; } return n + i; } // Find the height above the given line. function heightAtLine(lineObj) { lineObj = visualLine(lineObj); var h = 0, chunk = lineObj.parent; for (var i = 0; i < chunk.lines.length; ++i) { var line = chunk.lines[i]; if (line == lineObj) break; else h += line.height; } for (var p = chunk.parent; p; chunk = p, p = chunk.parent) { for (var i = 0; i < p.children.length; ++i) { var cur = p.children[i]; if (cur == chunk) break; else h += cur.height; } } return h; } // Get the bidi ordering for the given line (and cache it). Returns // false for lines that are fully left-to-right, and an array of // BidiSpan objects otherwise. function getOrder(line) { var order = line.order; if (order == null) order = line.order = bidiOrdering(line.text); return order; } // HISTORY function History(startGen) { // Arrays of change events and selections. Doing something adds an // event to done and clears undo. Undoing moves events from done // to undone, redoing moves them in the other direction. this.done = []; this.undone = []; this.undoDepth = Infinity; // Used to track when changes can be merged into a single undo // event this.lastModTime = this.lastSelTime = 0; this.lastOp = this.lastSelOp = null; this.lastOrigin = this.lastSelOrigin = null; // Used by the isClean() method this.generation = this.maxGeneration = startGen || 1; } // Create a history change event from an updateDoc-style change // object. function historyChangeFromChange(doc, change) { var histChange = {from: copyPos(change.from), to: changeEnd(change), text: getBetween(doc, change.from, change.to)}; attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); linkedDocs(doc, function(doc) {attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);}, true); return histChange; } // Pop all selection events off the end of a history array. Stop at // a change event. function clearSelectionEvents(array) { while (array.length) { var last = lst(array); if (last.ranges) array.pop(); else break; } } // Find the top change event in the history. Pop off selection // events that are in the way. function lastChangeEvent(hist, force) { if (force) { clearSelectionEvents(hist.done); return lst(hist.done); } else if (hist.done.length && !lst(hist.done).ranges) { return lst(hist.done); } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) { hist.done.pop(); return lst(hist.done); } } // Register a change in the history. Merges changes that are within // a single operation, ore are close together with an origin that // allows merging (starting with "+") into a single event. function addChangeToHistory(doc, change, selAfter, opId) { var hist = doc.history; hist.undone.length = 0; var time = +new Date, cur; if ((hist.lastOp == opId || hist.lastOrigin == change.origin && change.origin && ((change.origin.charAt(0) == "+" && doc.cm && hist.lastModTime > time - doc.cm.options.historyEventDelay) || change.origin.charAt(0) == "*")) && (cur = lastChangeEvent(hist, hist.lastOp == opId))) { // Merge this change into the last event var last = lst(cur.changes); if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) { // Optimized case for simple insertion -- don't want to add // new changesets for every character typed last.to = changeEnd(change); } else { // Add new sub-event cur.changes.push(historyChangeFromChange(doc, change)); } } else { // Can not be merged, start a new event. var before = lst(hist.done); if (!before || !before.ranges) pushSelectionToHistory(doc.sel, hist.done); cur = {changes: [historyChangeFromChange(doc, change)], generation: hist.generation}; hist.done.push(cur); while (hist.done.length > hist.undoDepth) { hist.done.shift(); if (!hist.done[0].ranges) hist.done.shift(); } } hist.done.push(selAfter); hist.generation = ++hist.maxGeneration; hist.lastModTime = hist.lastSelTime = time; hist.lastOp = hist.lastSelOp = opId; hist.lastOrigin = hist.lastSelOrigin = change.origin; if (!last) signal(doc, "historyAdded"); } function selectionEventCanBeMerged(doc, origin, prev, sel) { var ch = origin.charAt(0); return ch == "*" || ch == "+" && prev.ranges.length == sel.ranges.length && prev.somethingSelected() == sel.somethingSelected() && new Date - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500); } // Called whenever the selection changes, sets the new selection as // the pending selection in the history, and pushes the old pending // selection into the 'done' array when it was significantly // different (in number of selected ranges, emptiness, or time). function addSelectionToHistory(doc, sel, opId, options) { var hist = doc.history, origin = options && options.origin; // A new event is started when the previous origin does not match // the current, or the origins don't allow matching. Origins // starting with * are always merged, those starting with + are // merged when similar and close together in time. if (opId == hist.lastSelOp || (origin && hist.lastSelOrigin == origin && (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin || selectionEventCanBeMerged(doc, origin, lst(hist.done), sel)))) hist.done[hist.done.length - 1] = sel; else pushSelectionToHistory(sel, hist.done); hist.lastSelTime = +new Date; hist.lastSelOrigin = origin; hist.lastSelOp = opId; if (options && options.clearRedo !== false) clearSelectionEvents(hist.undone); } function pushSelectionToHistory(sel, dest) { var top = lst(dest); if (!(top && top.ranges && top.equals(sel))) dest.push(sel); } // Used to store marked span information in the history. function attachLocalSpans(doc, change, from, to) { var existing = change["spans_" + doc.id], n = 0; doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function(line) { if (line.markedSpans) (existing || (existing = change["spans_" + doc.id] = {}))[n] = line.markedSpans; ++n; }); } // When un/re-doing restores text containing marked spans, those // that have been explicitly cleared should not be restored. function removeClearedSpans(spans) { if (!spans) return null; for (var i = 0, out; i < spans.length; ++i) { if (spans[i].marker.explicitlyCleared) { if (!out) out = spans.slice(0, i); } else if (out) out.push(spans[i]); } return !out ? spans : out.length ? out : null; } // Retrieve and filter the old marked spans stored in a change event. function getOldSpans(doc, change) { var found = change["spans_" + doc.id]; if (!found) return null; for (var i = 0, nw = []; i < change.text.length; ++i) nw.push(removeClearedSpans(found[i])); return nw; } // Used both to provide a JSON-safe object in .getHistory, and, when // detaching a document, to split the history in two function copyHistoryArray(events, newGroup, instantiateSel) { for (var i = 0, copy = []; i < events.length; ++i) { var event = events[i]; if (event.ranges) { copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event); continue; } var changes = event.changes, newChanges = []; copy.push({changes: newChanges}); for (var j = 0; j < changes.length; ++j) { var change = changes[j], m; newChanges.push({from: change.from, to: change.to, text: change.text}); if (newGroup) for (var prop in change) if (m = prop.match(/^spans_(\d+)$/)) { if (indexOf(newGroup, Number(m[1])) > -1) { lst(newChanges)[prop] = change[prop]; delete change[prop]; } } } } return copy; } // Rebasing/resetting history to deal with externally-sourced changes function rebaseHistSelSingle(pos, from, to, diff) { if (to < pos.line) { pos.line += diff; } else if (from < pos.line) { pos.line = from; pos.ch = 0; } } // Tries to rebase an array of history events given a change in the // document. If the change touches the same lines as the event, the // event, and everything 'behind' it, is discarded. If the change is // before the event, the event's positions are updated. Uses a // copy-on-write scheme for the positions, to avoid having to // reallocate them all on every rebase, but also avoid problems with // shared position objects being unsafely updated. function rebaseHistArray(array, from, to, diff) { for (var i = 0; i < array.length; ++i) { var sub = array[i], ok = true; if (sub.ranges) { if (!sub.copied) { sub = array[i] = sub.deepCopy(); sub.copied = true; } for (var j = 0; j < sub.ranges.length; j++) { rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff); rebaseHistSelSingle(sub.ranges[j].head, from, to, diff); } continue; } for (var j = 0; j < sub.changes.length; ++j) { var cur = sub.changes[j]; if (to < cur.from.line) { cur.from = Pos(cur.from.line + diff, cur.from.ch); cur.to = Pos(cur.to.line + diff, cur.to.ch); } else if (from <= cur.to.line) { ok = false; break; } } if (!ok) { array.splice(0, i + 1); i = 0; } } } function rebaseHist(hist, change) { var from = change.from.line, to = change.to.line, diff = change.text.length - (to - from) - 1; rebaseHistArray(hist.done, from, to, diff); rebaseHistArray(hist.undone, from, to, diff); } // EVENT UTILITIES // Due to the fact that we still support jurassic IE versions, some // compatibility wrappers are needed. var e_preventDefault = CodeMirror.e_preventDefault = function(e) { if (e.preventDefault) e.preventDefault(); else e.returnValue = false; }; var e_stopPropagation = CodeMirror.e_stopPropagation = function(e) { if (e.stopPropagation) e.stopPropagation(); else e.cancelBubble = true; }; function e_defaultPrevented(e) { return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false; } var e_stop = CodeMirror.e_stop = function(e) {e_preventDefault(e); e_stopPropagation(e);}; function e_target(e) {return e.target || e.srcElement;} function e_button(e) { var b = e.which; if (b == null) { if (e.button & 1) b = 1; else if (e.button & 2) b = 3; else if (e.button & 4) b = 2; } if (mac && e.ctrlKey && b == 1) b = 3; return b; } // EVENT HANDLING // Lightweight event framework. on/off also work on DOM nodes, // registering native DOM handlers. var on = CodeMirror.on = function(emitter, type, f) { if (emitter.addEventListener) emitter.addEventListener(type, f, false); else if (emitter.attachEvent) emitter.attachEvent("on" + type, f); else { var map = emitter._handlers || (emitter._handlers = {}); var arr = map[type] || (map[type] = []); arr.push(f); } }; var off = CodeMirror.off = function(emitter, type, f) { if (emitter.removeEventListener) emitter.removeEventListener(type, f, false); else if (emitter.detachEvent) emitter.detachEvent("on" + type, f); else { var arr = emitter._handlers && emitter._handlers[type]; if (!arr) return; for (var i = 0; i < arr.length; ++i) if (arr[i] == f) { arr.splice(i, 1); break; } } }; var signal = CodeMirror.signal = function(emitter, type /*, values...*/) { var arr = emitter._handlers && emitter._handlers[type]; if (!arr) return; var args = Array.prototype.slice.call(arguments, 2); for (var i = 0; i < arr.length; ++i) arr[i].apply(null, args); }; var orphanDelayedCallbacks = null; // Often, we want to signal events at a point where we are in the // middle of some work, but don't want the handler to start calling // other methods on the editor, which might be in an inconsistent // state or simply not expect any other events to happen. // signalLater looks whether there are any handlers, and schedules // them to be executed when the last operation ends, or, if no // operation is active, when a timeout fires. function signalLater(emitter, type /*, values...*/) { var arr = emitter._handlers && emitter._handlers[type]; if (!arr) return; var args = Array.prototype.slice.call(arguments, 2), list; if (operationGroup) { list = operationGroup.delayedCallbacks; } else if (orphanDelayedCallbacks) { list = orphanDelayedCallbacks; } else { list = orphanDelayedCallbacks = []; setTimeout(fireOrphanDelayed, 0); } function bnd(f) {return function(){f.apply(null, args);};}; for (var i = 0; i < arr.length; ++i) list.push(bnd(arr[i])); } function fireOrphanDelayed() { var delayed = orphanDelayedCallbacks; orphanDelayedCallbacks = null; for (var i = 0; i < delayed.length; ++i) delayed[i](); } // The DOM events that CodeMirror handles can be overridden by // registering a (non-DOM) handler on the editor for the event name, // and preventDefault-ing the event in that handler. function signalDOMEvent(cm, e, override) { if (typeof e == "string") e = {type: e, preventDefault: function() { this.defaultPrevented = true; }}; signal(cm, override || e.type, cm, e); return e_defaultPrevented(e) || e.codemirrorIgnore; } function signalCursorActivity(cm) { var arr = cm._handlers && cm._handlers.cursorActivity; if (!arr) return; var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []); for (var i = 0; i < arr.length; ++i) if (indexOf(set, arr[i]) == -1) set.push(arr[i]); } function hasHandler(emitter, type) { var arr = emitter._handlers && emitter._handlers[type]; return arr && arr.length > 0; } // Add on and off methods to a constructor's prototype, to make // registering events on such objects more convenient. function eventMixin(ctor) { ctor.prototype.on = function(type, f) {on(this, type, f);}; ctor.prototype.off = function(type, f) {off(this, type, f);}; } // MISC UTILITIES // Number of pixels added to scroller and sizer to hide scrollbar var scrollerGap = 30; // Returned or thrown by various protocols to signal 'I'm not // handling this'. var Pass = CodeMirror.Pass = {toString: function(){return "CodeMirror.Pass";}}; // Reused option objects for setSelection & friends var sel_dontScroll = {scroll: false}, sel_mouse = {origin: "*mouse"}, sel_move = {origin: "+move"}; function Delayed() {this.id = null;} Delayed.prototype.set = function(ms, f) { clearTimeout(this.id); this.id = setTimeout(f, ms); }; // Counts the column offset in a string, taking tabs into account. // Used mostly to find indentation. var countColumn = CodeMirror.countColumn = function(string, end, tabSize, startIndex, startValue) { if (end == null) { end = string.search(/[^\s\u00a0]/); if (end == -1) end = string.length; } for (var i = startIndex || 0, n = startValue || 0;;) { var nextTab = string.indexOf("\t", i); if (nextTab < 0 || nextTab >= end) return n + (end - i); n += nextTab - i; n += tabSize - (n % tabSize); i = nextTab + 1; } }; // The inverse of countColumn -- find the offset that corresponds to // a particular column. function findColumn(string, goal, tabSize) { for (var pos = 0, col = 0;;) { var nextTab = string.indexOf("\t", pos); if (nextTab == -1) nextTab = string.length; var skipped = nextTab - pos; if (nextTab == string.length || col + skipped >= goal) return pos + Math.min(skipped, goal - col); col += nextTab - pos; col += tabSize - (col % tabSize); pos = nextTab + 1; if (col >= goal) return pos; } } var spaceStrs = [""]; function spaceStr(n) { while (spaceStrs.length <= n) spaceStrs.push(lst(spaceStrs) + " "); return spaceStrs[n]; } function lst(arr) { return arr[arr.length-1]; } var selectInput = function(node) { node.select(); }; if (ios) // Mobile Safari apparently has a bug where select() is broken. selectInput = function(node) { node.selectionStart = 0; node.selectionEnd = node.value.length; }; else if (ie) // Suppress mysterious IE10 errors selectInput = function(node) { try { node.select(); } catch(_e) {} }; function indexOf(array, elt) { for (var i = 0; i < array.length; ++i) if (array[i] == elt) return i; return -1; } function map(array, f) { var out = []; for (var i = 0; i < array.length; i++) out[i] = f(array[i], i); return out; } function nothing() {} function createObj(base, props) { var inst; if (Object.create) { inst = Object.create(base); } else { nothing.prototype = base; inst = new nothing(); } if (props) copyObj(props, inst); return inst; }; function copyObj(obj, target, overwrite) { if (!target) target = {}; for (var prop in obj) if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop))) target[prop] = obj[prop]; return target; } function bind(f) { var args = Array.prototype.slice.call(arguments, 1); return function(){return f.apply(null, args);}; } var nonASCIISingleCaseWordChar = /[\u00df\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/; var isWordCharBasic = CodeMirror.isWordChar = function(ch) { return /\w/.test(ch) || ch > "\x80" && (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch)); }; function isWordChar(ch, helper) { if (!helper) return isWordCharBasic(ch); if (helper.source.indexOf("\\w") > -1 && isWordCharBasic(ch)) return true; return helper.test(ch); } function isEmpty(obj) { for (var n in obj) if (obj.hasOwnProperty(n) && obj[n]) return false; return true; } // Extending unicode characters. A series of a non-extending char + // any number of extending chars is treated as a single unit as far // as editing and measuring is concerned. This is not fully correct, // since some scripts/fonts/browsers also treat other configurations // of code points as a group. var extendingChars = /[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/; function isExtendingChar(ch) { return ch.charCodeAt(0) >= 768 && extendingChars.test(ch); } // DOM UTILITIES function elt(tag, content, className, style) { var e = document.createElement(tag); if (className) e.className = className; if (style) e.style.cssText = style; if (typeof content == "string") e.appendChild(document.createTextNode(content)); else if (content) for (var i = 0; i < content.length; ++i) e.appendChild(content[i]); return e; } var range; if (document.createRange) range = function(node, start, end, endNode) { var r = document.createRange(); r.setEnd(endNode || node, end); r.setStart(node, start); return r; }; else range = function(node, start, end) { var r = document.body.createTextRange(); try { r.moveToElementText(node.parentNode); } catch(e) { return r; } r.collapse(true); r.moveEnd("character", end); r.moveStart("character", start); return r; }; function removeChildren(e) { for (var count = e.childNodes.length; count > 0; --count) e.removeChild(e.firstChild); return e; } function removeChildrenAndAdd(parent, e) { return removeChildren(parent).appendChild(e); } var contains = CodeMirror.contains = function(parent, child) { if (child.nodeType == 3) // Android browser always returns false when child is a textnode child = child.parentNode; if (parent.contains) return parent.contains(child); do { if (child.nodeType == 11) child = child.host; if (child == parent) return true; } while (child = child.parentNode); }; function activeElt() { return document.activeElement; } // Older versions of IE throws unspecified error when touching // document.activeElement in some cases (during loading, in iframe) if (ie && ie_version < 11) activeElt = function() { try { return document.activeElement; } catch(e) { return document.body; } }; function classTest(cls) { return new RegExp("(^|\\s)" + cls + "(?:$|\\s)\\s*"); } var rmClass = CodeMirror.rmClass = function(node, cls) { var current = node.className; var match = classTest(cls).exec(current); if (match) { var after = current.slice(match.index + match[0].length); node.className = current.slice(0, match.index) + (after ? match[1] + after : ""); } }; var addClass = CodeMirror.addClass = function(node, cls) { var current = node.className; if (!classTest(cls).test(current)) node.className += (current ? " " : "") + cls; }; function joinClasses(a, b) { var as = a.split(" "); for (var i = 0; i < as.length; i++) if (as[i] && !classTest(as[i]).test(b)) b += " " + as[i]; return b; } // WINDOW-WIDE EVENTS // These must be handled carefully, because naively registering a // handler for each editor will cause the editors to never be // garbage collected. function forEachCodeMirror(f) { if (!document.body.getElementsByClassName) return; var byClass = document.body.getElementsByClassName("CodeMirror"); for (var i = 0; i < byClass.length; i++) { var cm = byClass[i].CodeMirror; if (cm) f(cm); } } var globalsRegistered = false; function ensureGlobalHandlers() { if (globalsRegistered) return; registerGlobalHandlers(); globalsRegistered = true; } function registerGlobalHandlers() { // When the window resizes, we need to refresh active editors. var resizeTimer; on(window, "resize", function() { if (resizeTimer == null) resizeTimer = setTimeout(function() { resizeTimer = null; forEachCodeMirror(onResize); }, 100); }); // When the window loses focus, we want to show the editor as blurred on(window, "blur", function() { forEachCodeMirror(onBlur); }); } // FEATURE DETECTION // Detect drag-and-drop var dragAndDrop = function() { // There is *some* kind of drag-and-drop support in IE6-8, but I // couldn't get it to work yet. if (ie && ie_version < 9) return false; var div = elt('div'); return "draggable" in div || "dragDrop" in div; }(); var zwspSupported; function zeroWidthElement(measure) { if (zwspSupported == null) { var test = elt("span", "\u200b"); removeChildrenAndAdd(measure, elt("span", [test, document.createTextNode("x")])); if (measure.firstChild.offsetHeight != 0) zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8); } var node = zwspSupported ? elt("span", "\u200b") : elt("span", "\u00a0", null, "display: inline-block; width: 1px; margin-right: -1px"); node.setAttribute("cm-text", ""); return node; } // Feature-detect IE's crummy client rect reporting for bidi text var badBidiRects; function hasBadBidiRects(measure) { if (badBidiRects != null) return badBidiRects; var txt = removeChildrenAndAdd(measure, document.createTextNode("A\u062eA")); var r0 = range(txt, 0, 1).getBoundingClientRect(); if (!r0 || r0.left == r0.right) return false; // Safari returns null in some cases (#2780) var r1 = range(txt, 1, 2).getBoundingClientRect(); return badBidiRects = (r1.right - r0.right < 3); } // See if "".split is the broken IE version, if so, provide an // alternative way to split lines. var splitLines = CodeMirror.splitLines = "\n\nb".split(/\n/).length != 3 ? function(string) { var pos = 0, result = [], l = string.length; while (pos <= l) { var nl = string.indexOf("\n", pos); if (nl == -1) nl = string.length; var line = string.slice(pos, string.charAt(nl - 1) == "\r" ? nl - 1 : nl); var rt = line.indexOf("\r"); if (rt != -1) { result.push(line.slice(0, rt)); pos += rt + 1; } else { result.push(line); pos = nl + 1; } } return result; } : function(string){return string.split(/\r\n?|\n/);}; var hasSelection = window.getSelection ? function(te) { try { return te.selectionStart != te.selectionEnd; } catch(e) { return false; } } : function(te) { try {var range = te.ownerDocument.selection.createRange();} catch(e) {} if (!range || range.parentElement() != te) return false; return range.compareEndPoints("StartToEnd", range) != 0; }; var hasCopyEvent = (function() { var e = elt("div"); if ("oncopy" in e) return true; e.setAttribute("oncopy", "return;"); return typeof e.oncopy == "function"; })(); var badZoomedRects = null; function hasBadZoomedRects(measure) { if (badZoomedRects != null) return badZoomedRects; var node = removeChildrenAndAdd(measure, elt("span", "x")); var normal = node.getBoundingClientRect(); var fromRange = range(node, 0, 1).getBoundingClientRect(); return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1; } // KEY NAMES var keyNames = {3: "Enter", 8: "Backspace", 9: "Tab", 13: "Enter", 16: "Shift", 17: "Ctrl", 18: "Alt", 19: "Pause", 20: "CapsLock", 27: "Esc", 32: "Space", 33: "PageUp", 34: "PageDown", 35: "End", 36: "Home", 37: "Left", 38: "Up", 39: "Right", 40: "Down", 44: "PrintScrn", 45: "Insert", 46: "Delete", 59: ";", 61: "=", 91: "Mod", 92: "Mod", 93: "Mod", 107: "=", 109: "-", 127: "Delete", 173: "-", 186: ";", 187: "=", 188: ",", 189: "-", 190: ".", 191: "/", 192: "`", 219: "[", 220: "\\", 221: "]", 222: "'", 63232: "Up", 63233: "Down", 63234: "Left", 63235: "Right", 63272: "Delete", 63273: "Home", 63275: "End", 63276: "PageUp", 63277: "PageDown", 63302: "Insert"}; CodeMirror.keyNames = keyNames; (function() { // Number keys for (var i = 0; i < 10; i++) keyNames[i + 48] = keyNames[i + 96] = String(i); // Alphabetic keys for (var i = 65; i <= 90; i++) keyNames[i] = String.fromCharCode(i); // Function keys for (var i = 1; i <= 12; i++) keyNames[i + 111] = keyNames[i + 63235] = "F" + i; })(); // BIDI HELPERS function iterateBidiSections(order, from, to, f) { if (!order) return f(from, to, "ltr"); var found = false; for (var i = 0; i < order.length; ++i) { var part = order[i]; if (part.from < to && part.to > from || from == to && part.to == from) { f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? "rtl" : "ltr"); found = true; } } if (!found) f(from, to, "ltr"); } function bidiLeft(part) { return part.level % 2 ? part.to : part.from; } function bidiRight(part) { return part.level % 2 ? part.from : part.to; } function lineLeft(line) { var order = getOrder(line); return order ? bidiLeft(order[0]) : 0; } function lineRight(line) { var order = getOrder(line); if (!order) return line.text.length; return bidiRight(lst(order)); } function lineStart(cm, lineN) { var line = getLine(cm.doc, lineN); var visual = visualLine(line); if (visual != line) lineN = lineNo(visual); var order = getOrder(visual); var ch = !order ? 0 : order[0].level % 2 ? lineRight(visual) : lineLeft(visual); return Pos(lineN, ch); } function lineEnd(cm, lineN) { var merged, line = getLine(cm.doc, lineN); while (merged = collapsedSpanAtEnd(line)) { line = merged.find(1, true).line; lineN = null; } var order = getOrder(line); var ch = !order ? line.text.length : order[0].level % 2 ? lineLeft(line) : lineRight(line); return Pos(lineN == null ? lineNo(line) : lineN, ch); } function lineStartSmart(cm, pos) { var start = lineStart(cm, pos.line); var line = getLine(cm.doc, start.line); var order = getOrder(line); if (!order || order[0].level == 0) { var firstNonWS = Math.max(0, line.text.search(/\S/)); var inWS = pos.line == start.line && pos.ch <= firstNonWS && pos.ch; return Pos(start.line, inWS ? 0 : firstNonWS); } return start; } function compareBidiLevel(order, a, b) { var linedir = order[0].level; if (a == linedir) return true; if (b == linedir) return false; return a < b; } var bidiOther; function getBidiPartAt(order, pos) { bidiOther = null; for (var i = 0, found; i < order.length; ++i) { var cur = order[i]; if (cur.from < pos && cur.to > pos) return i; if ((cur.from == pos || cur.to == pos)) { if (found == null) { found = i; } else if (compareBidiLevel(order, cur.level, order[found].level)) { if (cur.from != cur.to) bidiOther = found; return i; } else { if (cur.from != cur.to) bidiOther = i; return found; } } } return found; } function moveInLine(line, pos, dir, byUnit) { if (!byUnit) return pos + dir; do pos += dir; while (pos > 0 && isExtendingChar(line.text.charAt(pos))); return pos; } // This is needed in order to move 'visually' through bi-directional // text -- i.e., pressing left should make the cursor go left, even // when in RTL text. The tricky part is the 'jumps', where RTL and // LTR text touch each other. This often requires the cursor offset // to move more than one unit, in order to visually move one unit. function moveVisually(line, start, dir, byUnit) { var bidi = getOrder(line); if (!bidi) return moveLogically(line, start, dir, byUnit); var pos = getBidiPartAt(bidi, start), part = bidi[pos]; var target = moveInLine(line, start, part.level % 2 ? -dir : dir, byUnit); for (;;) { if (target > part.from && target < part.to) return target; if (target == part.from || target == part.to) { if (getBidiPartAt(bidi, target) == pos) return target; part = bidi[pos += dir]; return (dir > 0) == part.level % 2 ? part.to : part.from; } else { part = bidi[pos += dir]; if (!part) return null; if ((dir > 0) == part.level % 2) target = moveInLine(line, part.to, -1, byUnit); else target = moveInLine(line, part.from, 1, byUnit); } } } function moveLogically(line, start, dir, byUnit) { var target = start + dir; if (byUnit) while (target > 0 && isExtendingChar(line.text.charAt(target))) target += dir; return target < 0 || target > line.text.length ? null : target; } // Bidirectional ordering algorithm // See http://unicode.org/reports/tr9/tr9-13.html for the algorithm // that this (partially) implements. // One-char codes used for character types: // L (L): Left-to-Right // R (R): Right-to-Left // r (AL): Right-to-Left Arabic // 1 (EN): European Number // + (ES): European Number Separator // % (ET): European Number Terminator // n (AN): Arabic Number // , (CS): Common Number Separator // m (NSM): Non-Spacing Mark // b (BN): Boundary Neutral // s (B): Paragraph Separator // t (S): Segment Separator // w (WS): Whitespace // N (ON): Other Neutrals // Returns null if characters are ordered as they appear // (left-to-right), or an array of sections ({from, to, level} // objects) in the order in which they occur visually. var bidiOrdering = (function() { // Character types for codepoints 0 to 0xff var lowTypes = "bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN"; // Character types for codepoints 0x600 to 0x6ff var arabicTypes = "rrrrrrrrrrrr,rNNmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmrrrrrrrnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmNmmmm"; function charType(code) { if (code <= 0xf7) return lowTypes.charAt(code); else if (0x590 <= code && code <= 0x5f4) return "R"; else if (0x600 <= code && code <= 0x6ed) return arabicTypes.charAt(code - 0x600); else if (0x6ee <= code && code <= 0x8ac) return "r"; else if (0x2000 <= code && code <= 0x200b) return "w"; else if (code == 0x200c) return "b"; else return "L"; } var bidiRE = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/; var isNeutral = /[stwN]/, isStrong = /[LRr]/, countsAsLeft = /[Lb1n]/, countsAsNum = /[1n]/; // Browsers seem to always treat the boundaries of block elements as being L. var outerType = "L"; function BidiSpan(level, from, to) { this.level = level; this.from = from; this.to = to; } return function(str) { if (!bidiRE.test(str)) return false; var len = str.length, types = []; for (var i = 0, type; i < len; ++i) types.push(type = charType(str.charCodeAt(i))); // W1. Examine each non-spacing mark (NSM) in the level run, and // change the type of the NSM to the type of the previous // character. If the NSM is at the start of the level run, it will // get the type of sor. for (var i = 0, prev = outerType; i < len; ++i) { var type = types[i]; if (type == "m") types[i] = prev; else prev = type; } // W2. Search backwards from each instance of a European number // until the first strong type (R, L, AL, or sor) is found. If an // AL is found, change the type of the European number to Arabic // number. // W3. Change all ALs to R. for (var i = 0, cur = outerType; i < len; ++i) { var type = types[i]; if (type == "1" && cur == "r") types[i] = "n"; else if (isStrong.test(type)) { cur = type; if (type == "r") types[i] = "R"; } } // W4. A single European separator between two European numbers // changes to a European number. A single common separator between // two numbers of the same type changes to that type. for (var i = 1, prev = types[0]; i < len - 1; ++i) { var type = types[i]; if (type == "+" && prev == "1" && types[i+1] == "1") types[i] = "1"; else if (type == "," && prev == types[i+1] && (prev == "1" || prev == "n")) types[i] = prev; prev = type; } // W5. A sequence of European terminators adjacent to European // numbers changes to all European numbers. // W6. Otherwise, separators and terminators change to Other // Neutral. for (var i = 0; i < len; ++i) { var type = types[i]; if (type == ",") types[i] = "N"; else if (type == "%") { for (var end = i + 1; end < len && types[end] == "%"; ++end) {} var replace = (i && types[i-1] == "!") || (end < len && types[end] == "1") ? "1" : "N"; for (var j = i; j < end; ++j) types[j] = replace; i = end - 1; } } // W7. Search backwards from each instance of a European number // until the first strong type (R, L, or sor) is found. If an L is // found, then change the type of the European number to L. for (var i = 0, cur = outerType; i < len; ++i) { var type = types[i]; if (cur == "L" && type == "1") types[i] = "L"; else if (isStrong.test(type)) cur = type; } // N1. A sequence of neutrals takes the direction of the // surrounding strong text if the text on both sides has the same // direction. European and Arabic numbers act as if they were R in // terms of their influence on neutrals. Start-of-level-run (sor) // and end-of-level-run (eor) are used at level run boundaries. // N2. Any remaining neutrals take the embedding direction. for (var i = 0; i < len; ++i) { if (isNeutral.test(types[i])) { for (var end = i + 1; end < len && isNeutral.test(types[end]); ++end) {} var before = (i ? types[i-1] : outerType) == "L"; var after = (end < len ? types[end] : outerType) == "L"; var replace = before || after ? "L" : "R"; for (var j = i; j < end; ++j) types[j] = replace; i = end - 1; } } // Here we depart from the documented algorithm, in order to avoid // building up an actual levels array. Since there are only three // levels (0, 1, 2) in an implementation that doesn't take // explicit embedding into account, we can build up the order on // the fly, without following the level-based algorithm. var order = [], m; for (var i = 0; i < len;) { if (countsAsLeft.test(types[i])) { var start = i; for (++i; i < len && countsAsLeft.test(types[i]); ++i) {} order.push(new BidiSpan(0, start, i)); } else { var pos = i, at = order.length; for (++i; i < len && types[i] != "L"; ++i) {} for (var j = pos; j < i;) { if (countsAsNum.test(types[j])) { if (pos < j) order.splice(at, 0, new BidiSpan(1, pos, j)); var nstart = j; for (++j; j < i && countsAsNum.test(types[j]); ++j) {} order.splice(at, 0, new BidiSpan(2, nstart, j)); pos = j; } else ++j; } if (pos < i) order.splice(at, 0, new BidiSpan(1, pos, i)); } } if (order[0].level == 1 && (m = str.match(/^\s+/))) { order[0].from = m[0].length; order.unshift(new BidiSpan(0, 0, m[0].length)); } if (lst(order).level == 1 && (m = str.match(/\s+$/))) { lst(order).to -= m[0].length; order.push(new BidiSpan(0, len - m[0].length, len)); } if (order[0].level != lst(order).level) order.push(new BidiSpan(order[0].level, len, len)); return order; }; })(); // THE END CodeMirror.version = "5.0.0"; return CodeMirror; }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/apl/apl.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("apl", function() { var builtInOps = { ".": "innerProduct", "\\": "scan", "/": "reduce", "⌿": "reduce1Axis", "⍀": "scan1Axis", "¨": "each", "⍣": "power" }; var builtInFuncs = { "+": ["conjugate", "add"], "−": ["negate", "subtract"], "×": ["signOf", "multiply"], "÷": ["reciprocal", "divide"], "⌈": ["ceiling", "greaterOf"], "⌊": ["floor", "lesserOf"], "∣": ["absolute", "residue"], "⍳": ["indexGenerate", "indexOf"], "?": ["roll", "deal"], "⋆": ["exponentiate", "toThePowerOf"], "⍟": ["naturalLog", "logToTheBase"], "○": ["piTimes", "circularFuncs"], "!": ["factorial", "binomial"], "⌹": ["matrixInverse", "matrixDivide"], "<": [null, "lessThan"], "≤": [null, "lessThanOrEqual"], "=": [null, "equals"], ">": [null, "greaterThan"], "≥": [null, "greaterThanOrEqual"], "≠": [null, "notEqual"], "≡": ["depth", "match"], "≢": [null, "notMatch"], "∈": ["enlist", "membership"], "⍷": [null, "find"], "∪": ["unique", "union"], "∩": [null, "intersection"], "∼": ["not", "without"], "∨": [null, "or"], "∧": [null, "and"], "⍱": [null, "nor"], "⍲": [null, "nand"], "⍴": ["shapeOf", "reshape"], ",": ["ravel", "catenate"], "⍪": [null, "firstAxisCatenate"], "⌽": ["reverse", "rotate"], "⊖": ["axis1Reverse", "axis1Rotate"], "⍉": ["transpose", null], "↑": ["first", "take"], "↓": [null, "drop"], "⊂": ["enclose", "partitionWithAxis"], "⊃": ["diclose", "pick"], "⌷": [null, "index"], "⍋": ["gradeUp", null], "⍒": ["gradeDown", null], "⊤": ["encode", null], "⊥": ["decode", null], "⍕": ["format", "formatByExample"], "⍎": ["execute", null], "⊣": ["stop", "left"], "⊢": ["pass", "right"] }; var isOperator = /[\.\/⌿⍀¨⍣]/; var isNiladic = /⍬/; var isFunction = /[\+−×÷⌈⌊∣⍳\?⋆⍟○!⌹<≤=>≥≠≡≢∈⍷∪∩∼∨∧⍱⍲⍴,⍪⌽⊖⍉↑↓⊂⊃⌷⍋⍒⊤⊥⍕⍎⊣⊢]/; var isArrow = /←/; var isComment = /[⍝#].*$/; var stringEater = function(type) { var prev; prev = false; return function(c) { prev = c; if (c === type) { return prev === "\\"; } return true; }; }; return { startState: function() { return { prev: false, func: false, op: false, string: false, escape: false }; }, token: function(stream, state) { var ch, funcName, word; if (stream.eatSpace()) { return null; } ch = stream.next(); if (ch === '"' || ch === "'") { stream.eatWhile(stringEater(ch)); stream.next(); state.prev = true; return "string"; } if (/[\[{\(]/.test(ch)) { state.prev = false; return null; } if (/[\]}\)]/.test(ch)) { state.prev = true; return null; } if (isNiladic.test(ch)) { state.prev = false; return "niladic"; } if (/[¯\d]/.test(ch)) { if (state.func) { state.func = false; state.prev = false; } else { state.prev = true; } stream.eatWhile(/[\w\.]/); return "number"; } if (isOperator.test(ch)) { return "operator apl-" + builtInOps[ch]; } if (isArrow.test(ch)) { return "apl-arrow"; } if (isFunction.test(ch)) { funcName = "apl-"; if (builtInFuncs[ch] != null) { if (state.prev) { funcName += builtInFuncs[ch][1]; } else { funcName += builtInFuncs[ch][0]; } } state.func = true; state.prev = false; return "function " + funcName; } if (isComment.test(ch)) { stream.skipToEnd(); return "comment"; } if (ch === "∘" && stream.peek() === ".") { stream.next(); return "function jot-dot"; } stream.eatWhile(/[\w\$_]/); word = stream.current(); state.prev = true; return "keyword"; } }; }); CodeMirror.defineMIME("text/apl", "apl"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/apl/index.html ================================================ CodeMirror: APL mode

                  APL mode

                  Simple mode that tries to handle APL as well as it can.

                  It attempts to label functions/operators based upon monadic/dyadic usage (but this is far from fully fleshed out). This means there are meaningful classnames so hover states can have popups etc.

                  MIME types defined: text/apl (APL code)

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/asterisk/asterisk.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE /* * ===================================================================================== * * Filename: mode/asterisk/asterisk.js * * Description: CodeMirror mode for Asterisk dialplan * * Created: 05/17/2012 09:20:25 PM * Revision: none * * Author: Stas Kobzar (stas@modulis.ca), * Company: Modulis.ca Inc. * * ===================================================================================== */ (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("asterisk", function() { var atoms = ["exten", "same", "include","ignorepat","switch"], dpcmd = ["#include","#exec"], apps = [ "addqueuemember","adsiprog","aelsub","agentlogin","agentmonitoroutgoing","agi", "alarmreceiver","amd","answer","authenticate","background","backgrounddetect", "bridge","busy","callcompletioncancel","callcompletionrequest","celgenuserevent", "changemonitor","chanisavail","channelredirect","chanspy","clearhash","confbridge", "congestion","continuewhile","controlplayback","dahdiacceptr2call","dahdibarge", "dahdiras","dahdiscan","dahdisendcallreroutingfacility","dahdisendkeypadfacility", "datetime","dbdel","dbdeltree","deadagi","dial","dictate","directory","disa", "dumpchan","eagi","echo","endwhile","exec","execif","execiftime","exitwhile","extenspy", "externalivr","festival","flash","followme","forkcdr","getcpeid","gosub","gosubif", "goto","gotoif","gotoiftime","hangup","iax2provision","ices","importvar","incomplete", "ivrdemo","jabberjoin","jabberleave","jabbersend","jabbersendgroup","jabberstatus", "jack","log","macro","macroexclusive","macroexit","macroif","mailboxexists","meetme", "meetmeadmin","meetmechanneladmin","meetmecount","milliwatt","minivmaccmess","minivmdelete", "minivmgreet","minivmmwi","minivmnotify","minivmrecord","mixmonitor","monitor","morsecode", "mp3player","mset","musiconhold","nbscat","nocdr","noop","odbc","odbc","odbcfinish", "originate","ospauth","ospfinish","osplookup","ospnext","page","park","parkandannounce", "parkedcall","pausemonitor","pausequeuemember","pickup","pickupchan","playback","playtones", "privacymanager","proceeding","progress","queue","queuelog","raiseexception","read","readexten", "readfile","receivefax","receivefax","receivefax","record","removequeuemember", "resetcdr","retrydial","return","ringing","sayalpha","saycountedadj","saycountednoun", "saycountpl","saydigits","saynumber","sayphonetic","sayunixtime","senddtmf","sendfax", "sendfax","sendfax","sendimage","sendtext","sendurl","set","setamaflags", "setcallerpres","setmusiconhold","sipaddheader","sipdtmfmode","sipremoveheader","skel", "slastation","slatrunk","sms","softhangup","speechactivategrammar","speechbackground", "speechcreate","speechdeactivategrammar","speechdestroy","speechloadgrammar","speechprocessingsound", "speechstart","speechunloadgrammar","stackpop","startmusiconhold","stopmixmonitor","stopmonitor", "stopmusiconhold","stopplaytones","system","testclient","testserver","transfer","tryexec", "trysystem","unpausemonitor","unpausequeuemember","userevent","verbose","vmauthenticate", "vmsayname","voicemail","voicemailmain","wait","waitexten","waitfornoise","waitforring", "waitforsilence","waitmusiconhold","waituntil","while","zapateller" ]; function basicToken(stream,state){ var cur = ''; var ch = ''; ch = stream.next(); // comment if(ch == ";") { stream.skipToEnd(); return "comment"; } // context if(ch == '[') { stream.skipTo(']'); stream.eat(']'); return "header"; } // string if(ch == '"') { stream.skipTo('"'); return "string"; } if(ch == "'") { stream.skipTo("'"); return "string-2"; } // dialplan commands if(ch == '#') { stream.eatWhile(/\w/); cur = stream.current(); if(dpcmd.indexOf(cur) !== -1) { stream.skipToEnd(); return "strong"; } } // application args if(ch == '$'){ var ch1 = stream.peek(); if(ch1 == '{'){ stream.skipTo('}'); stream.eat('}'); return "variable-3"; } } // extension stream.eatWhile(/\w/); cur = stream.current(); if(atoms.indexOf(cur) !== -1) { state.extenStart = true; switch(cur) { case 'same': state.extenSame = true; break; case 'include': case 'switch': case 'ignorepat': state.extenInclude = true;break; default:break; } return "atom"; } } return { startState: function() { return { extenStart: false, extenSame: false, extenInclude: false, extenExten: false, extenPriority: false, extenApplication: false }; }, token: function(stream, state) { var cur = ''; var ch = ''; if(stream.eatSpace()) return null; // extension started if(state.extenStart){ stream.eatWhile(/[^\s]/); cur = stream.current(); if(/^=>?$/.test(cur)){ state.extenExten = true; state.extenStart = false; return "strong"; } else { state.extenStart = false; stream.skipToEnd(); return "error"; } } else if(state.extenExten) { // set exten and priority state.extenExten = false; state.extenPriority = true; stream.eatWhile(/[^,]/); if(state.extenInclude) { stream.skipToEnd(); state.extenPriority = false; state.extenInclude = false; } if(state.extenSame) { state.extenPriority = false; state.extenSame = false; state.extenApplication = true; } return "tag"; } else if(state.extenPriority) { state.extenPriority = false; state.extenApplication = true; ch = stream.next(); // get comma if(state.extenSame) return null; stream.eatWhile(/[^,]/); return "number"; } else if(state.extenApplication) { stream.eatWhile(/,/); cur = stream.current(); if(cur === ',') return null; stream.eatWhile(/\w/); cur = stream.current().toLowerCase(); state.extenApplication = false; if(apps.indexOf(cur) !== -1){ return "def strong"; } } else{ return basicToken(stream,state); } return null; } }; }); CodeMirror.defineMIME("text/x-asterisk", "asterisk"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/asterisk/index.html ================================================ CodeMirror: Asterisk dialplan mode

                  Asterisk dialplan mode

                  MIME types defined: text/x-asterisk.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/clike/clike.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("clike", function(config, parserConfig) { var indentUnit = config.indentUnit, statementIndentUnit = parserConfig.statementIndentUnit || indentUnit, dontAlignCalls = parserConfig.dontAlignCalls, keywords = parserConfig.keywords || {}, builtin = parserConfig.builtin || {}, blockKeywords = parserConfig.blockKeywords || {}, atoms = parserConfig.atoms || {}, hooks = parserConfig.hooks || {}, multiLineStrings = parserConfig.multiLineStrings, indentStatements = parserConfig.indentStatements !== false; var isOperatorChar = /[+\-*&%=<>!?|\/]/; var curPunc; function tokenBase(stream, state) { var ch = stream.next(); if (hooks[ch]) { var result = hooks[ch](stream, state); if (result !== false) return result; } if (ch == '"' || ch == "'") { state.tokenize = tokenString(ch); return state.tokenize(stream, state); } if (/[\[\]{}\(\),;\:\.]/.test(ch)) { curPunc = ch; return null; } if (/\d/.test(ch)) { stream.eatWhile(/[\w\.]/); return "number"; } if (ch == "/") { if (stream.eat("*")) { state.tokenize = tokenComment; return tokenComment(stream, state); } if (stream.eat("/")) { stream.skipToEnd(); return "comment"; } } if (isOperatorChar.test(ch)) { stream.eatWhile(isOperatorChar); return "operator"; } stream.eatWhile(/[\w\$_\xa1-\uffff]/); var cur = stream.current(); if (keywords.propertyIsEnumerable(cur)) { if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; return "keyword"; } if (builtin.propertyIsEnumerable(cur)) { if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; return "builtin"; } if (atoms.propertyIsEnumerable(cur)) return "atom"; return "variable"; } function tokenString(quote) { return function(stream, state) { var escaped = false, next, end = false; while ((next = stream.next()) != null) { if (next == quote && !escaped) {end = true; break;} escaped = !escaped && next == "\\"; } if (end || !(escaped || multiLineStrings)) state.tokenize = null; return "string"; }; } function tokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "/" && maybeEnd) { state.tokenize = null; break; } maybeEnd = (ch == "*"); } return "comment"; } function Context(indented, column, type, align, prev) { this.indented = indented; this.column = column; this.type = type; this.align = align; this.prev = prev; } function pushContext(state, col, type) { var indent = state.indented; if (state.context && state.context.type == "statement") indent = state.context.indented; return state.context = new Context(indent, col, type, null, state.context); } function popContext(state) { var t = state.context.type; if (t == ")" || t == "]" || t == "}") state.indented = state.context.indented; return state.context = state.context.prev; } // Interface return { startState: function(basecolumn) { return { tokenize: null, context: new Context((basecolumn || 0) - indentUnit, 0, "top", false), indented: 0, startOfLine: true }; }, token: function(stream, state) { var ctx = state.context; if (stream.sol()) { if (ctx.align == null) ctx.align = false; state.indented = stream.indentation(); state.startOfLine = true; } if (stream.eatSpace()) return null; curPunc = null; var style = (state.tokenize || tokenBase)(stream, state); if (style == "comment" || style == "meta") return style; if (ctx.align == null) ctx.align = true; if ((curPunc == ";" || curPunc == ":" || curPunc == ",") && ctx.type == "statement") popContext(state); else if (curPunc == "{") pushContext(state, stream.column(), "}"); else if (curPunc == "[") pushContext(state, stream.column(), "]"); else if (curPunc == "(") pushContext(state, stream.column(), ")"); else if (curPunc == "}") { while (ctx.type == "statement") ctx = popContext(state); if (ctx.type == "}") ctx = popContext(state); while (ctx.type == "statement") ctx = popContext(state); } else if (curPunc == ctx.type) popContext(state); else if (indentStatements && (((ctx.type == "}" || ctx.type == "top") && curPunc != ';') || (ctx.type == "statement" && curPunc == "newstatement"))) pushContext(state, stream.column(), "statement"); state.startOfLine = false; return style; }, indent: function(state, textAfter) { if (state.tokenize != tokenBase && state.tokenize != null) return CodeMirror.Pass; var ctx = state.context, firstChar = textAfter && textAfter.charAt(0); if (ctx.type == "statement" && firstChar == "}") ctx = ctx.prev; var closing = firstChar == ctx.type; if (ctx.type == "statement") return ctx.indented + (firstChar == "{" ? 0 : statementIndentUnit); else if (ctx.align && (!dontAlignCalls || ctx.type != ")")) return ctx.column + (closing ? 0 : 1); else if (ctx.type == ")" && !closing) return ctx.indented + statementIndentUnit; else return ctx.indented + (closing ? 0 : indentUnit); }, electricChars: "{}", blockCommentStart: "/*", blockCommentEnd: "*/", lineComment: "//", fold: "brace" }; }); function words(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } var cKeywords = "auto if break int case long char register continue return default short do sizeof " + "double static else struct entry switch extern typedef float union for unsigned " + "goto while enum void const signed volatile"; function cppHook(stream, state) { if (!state.startOfLine) return false; for (;;) { if (stream.skipTo("\\")) { stream.next(); if (stream.eol()) { state.tokenize = cppHook; break; } } else { stream.skipToEnd(); state.tokenize = null; break; } } return "meta"; } function cpp11StringHook(stream, state) { stream.backUp(1); // Raw strings. if (stream.match(/(R|u8R|uR|UR|LR)/)) { var match = stream.match(/"([^\s\\()]{0,16})\(/); if (!match) { return false; } state.cpp11RawStringDelim = match[1]; state.tokenize = tokenRawString; return tokenRawString(stream, state); } // Unicode strings/chars. if (stream.match(/(u8|u|U|L)/)) { if (stream.match(/["']/, /* eat */ false)) { return "string"; } return false; } // Ignore this hook. stream.next(); return false; } // C#-style strings where "" escapes a quote. function tokenAtString(stream, state) { var next; while ((next = stream.next()) != null) { if (next == '"' && !stream.eat('"')) { state.tokenize = null; break; } } return "string"; } // C++11 raw string literal is "( anything )", where // can be a string up to 16 characters long. function tokenRawString(stream, state) { // Escape characters that have special regex meanings. var delim = state.cpp11RawStringDelim.replace(/[^\w\s]/g, '\\$&'); var match = stream.match(new RegExp(".*?\\)" + delim + '"')); if (match) state.tokenize = null; else stream.skipToEnd(); return "string"; } function def(mimes, mode) { if (typeof mimes == "string") mimes = [mimes]; var words = []; function add(obj) { if (obj) for (var prop in obj) if (obj.hasOwnProperty(prop)) words.push(prop); } add(mode.keywords); add(mode.builtin); add(mode.atoms); if (words.length) { mode.helperType = mimes[0]; CodeMirror.registerHelper("hintWords", mimes[0], words); } for (var i = 0; i < mimes.length; ++i) CodeMirror.defineMIME(mimes[i], mode); } def(["text/x-csrc", "text/x-c", "text/x-chdr"], { name: "clike", keywords: words(cKeywords), blockKeywords: words("case do else for if switch while struct"), atoms: words("null"), hooks: {"#": cppHook}, modeProps: {fold: ["brace", "include"]} }); def(["text/x-c++src", "text/x-c++hdr"], { name: "clike", keywords: words(cKeywords + " asm dynamic_cast namespace reinterpret_cast try bool explicit new " + "static_cast typeid catch operator template typename class friend private " + "this using const_cast inline public throw virtual delete mutable protected " + "wchar_t alignas alignof constexpr decltype nullptr noexcept thread_local final " + "static_assert override"), blockKeywords: words("catch class do else finally for if struct switch try while"), atoms: words("true false null"), hooks: { "#": cppHook, "u": cpp11StringHook, "U": cpp11StringHook, "L": cpp11StringHook, "R": cpp11StringHook }, modeProps: {fold: ["brace", "include"]} }); def("text/x-java", { name: "clike", keywords: words("abstract assert boolean break byte case catch char class const continue default " + "do double else enum extends final finally float for goto if implements import " + "instanceof int interface long native new package private protected public " + "return short static strictfp super switch synchronized this throw throws transient " + "try void volatile while"), blockKeywords: words("catch class do else finally for if switch try while"), atoms: words("true false null"), hooks: { "@": function(stream) { stream.eatWhile(/[\w\$_]/); return "meta"; } }, modeProps: {fold: ["brace", "import"]} }); def("text/x-csharp", { name: "clike", keywords: words("abstract as base break case catch checked class const continue" + " default delegate do else enum event explicit extern finally fixed for" + " foreach goto if implicit in interface internal is lock namespace new" + " operator out override params private protected public readonly ref return sealed" + " sizeof stackalloc static struct switch this throw try typeof unchecked" + " unsafe using virtual void volatile while add alias ascending descending dynamic from get" + " global group into join let orderby partial remove select set value var yield"), blockKeywords: words("catch class do else finally for foreach if struct switch try while"), builtin: words("Boolean Byte Char DateTime DateTimeOffset Decimal Double" + " Guid Int16 Int32 Int64 Object SByte Single String TimeSpan UInt16 UInt32" + " UInt64 bool byte char decimal double short int long object" + " sbyte float string ushort uint ulong"), atoms: words("true false null"), hooks: { "@": function(stream, state) { if (stream.eat('"')) { state.tokenize = tokenAtString; return tokenAtString(stream, state); } stream.eatWhile(/[\w\$_]/); return "meta"; } } }); function tokenTripleString(stream, state) { var escaped = false; while (!stream.eol()) { if (!escaped && stream.match('"""')) { state.tokenize = null; break; } escaped = stream.next() == "\\" && !escaped; } return "string"; } def("text/x-scala", { name: "clike", keywords: words( /* scala */ "abstract case catch class def do else extends false final finally for forSome if " + "implicit import lazy match new null object override package private protected return " + "sealed super this throw trait try trye type val var while with yield _ : = => <- <: " + "<% >: # @ " + /* package scala */ "assert assume require print println printf readLine readBoolean readByte readShort " + "readChar readInt readLong readFloat readDouble " + "AnyVal App Application Array BufferedIterator BigDecimal BigInt Char Console Either " + "Enumeration Equiv Error Exception Fractional Function IndexedSeq Integral Iterable " + "Iterator List Map Numeric Nil NotNull Option Ordered Ordering PartialFunction PartialOrdering " + "Product Proxy Range Responder Seq Serializable Set Specializable Stream StringBuilder " + "StringContext Symbol Throwable Traversable TraversableOnce Tuple Unit Vector :: #:: " + /* package java.lang */ "Boolean Byte Character CharSequence Class ClassLoader Cloneable Comparable " + "Compiler Double Exception Float Integer Long Math Number Object Package Pair Process " + "Runtime Runnable SecurityManager Short StackTraceElement StrictMath String " + "StringBuffer System Thread ThreadGroup ThreadLocal Throwable Triple Void" ), multiLineStrings: true, blockKeywords: words("catch class do else finally for forSome if match switch try while"), atoms: words("true false null"), indentStatements: false, hooks: { "@": function(stream) { stream.eatWhile(/[\w\$_]/); return "meta"; }, '"': function(stream, state) { if (!stream.match('""')) return false; state.tokenize = tokenTripleString; return state.tokenize(stream, state); }, "'": function(stream) { stream.eatWhile(/[\w\$_\xa1-\uffff]/); return "atom"; } } }); def(["x-shader/x-vertex", "x-shader/x-fragment"], { name: "clike", keywords: words("float int bool void " + "vec2 vec3 vec4 ivec2 ivec3 ivec4 bvec2 bvec3 bvec4 " + "mat2 mat3 mat4 " + "sampler1D sampler2D sampler3D samplerCube " + "sampler1DShadow sampler2DShadow " + "const attribute uniform varying " + "break continue discard return " + "for while do if else struct " + "in out inout"), blockKeywords: words("for while do if else struct"), builtin: words("radians degrees sin cos tan asin acos atan " + "pow exp log exp2 sqrt inversesqrt " + "abs sign floor ceil fract mod min max clamp mix step smoothstep " + "length distance dot cross normalize ftransform faceforward " + "reflect refract matrixCompMult " + "lessThan lessThanEqual greaterThan greaterThanEqual " + "equal notEqual any all not " + "texture1D texture1DProj texture1DLod texture1DProjLod " + "texture2D texture2DProj texture2DLod texture2DProjLod " + "texture3D texture3DProj texture3DLod texture3DProjLod " + "textureCube textureCubeLod " + "shadow1D shadow2D shadow1DProj shadow2DProj " + "shadow1DLod shadow2DLod shadow1DProjLod shadow2DProjLod " + "dFdx dFdy fwidth " + "noise1 noise2 noise3 noise4"), atoms: words("true false " + "gl_FragColor gl_SecondaryColor gl_Normal gl_Vertex " + "gl_MultiTexCoord0 gl_MultiTexCoord1 gl_MultiTexCoord2 gl_MultiTexCoord3 " + "gl_MultiTexCoord4 gl_MultiTexCoord5 gl_MultiTexCoord6 gl_MultiTexCoord7 " + "gl_FogCoord gl_PointCoord " + "gl_Position gl_PointSize gl_ClipVertex " + "gl_FrontColor gl_BackColor gl_FrontSecondaryColor gl_BackSecondaryColor " + "gl_TexCoord gl_FogFragCoord " + "gl_FragCoord gl_FrontFacing " + "gl_FragData gl_FragDepth " + "gl_ModelViewMatrix gl_ProjectionMatrix gl_ModelViewProjectionMatrix " + "gl_TextureMatrix gl_NormalMatrix gl_ModelViewMatrixInverse " + "gl_ProjectionMatrixInverse gl_ModelViewProjectionMatrixInverse " + "gl_TexureMatrixTranspose gl_ModelViewMatrixInverseTranspose " + "gl_ProjectionMatrixInverseTranspose " + "gl_ModelViewProjectionMatrixInverseTranspose " + "gl_TextureMatrixInverseTranspose " + "gl_NormalScale gl_DepthRange gl_ClipPlane " + "gl_Point gl_FrontMaterial gl_BackMaterial gl_LightSource gl_LightModel " + "gl_FrontLightModelProduct gl_BackLightModelProduct " + "gl_TextureColor gl_EyePlaneS gl_EyePlaneT gl_EyePlaneR gl_EyePlaneQ " + "gl_FogParameters " + "gl_MaxLights gl_MaxClipPlanes gl_MaxTextureUnits gl_MaxTextureCoords " + "gl_MaxVertexAttribs gl_MaxVertexUniformComponents gl_MaxVaryingFloats " + "gl_MaxVertexTextureImageUnits gl_MaxTextureImageUnits " + "gl_MaxFragmentUniformComponents gl_MaxCombineTextureImageUnits " + "gl_MaxDrawBuffers"), hooks: {"#": cppHook}, modeProps: {fold: ["brace", "include"]} }); def("text/x-nesc", { name: "clike", keywords: words(cKeywords + "as atomic async call command component components configuration event generic " + "implementation includes interface module new norace nx_struct nx_union post provides " + "signal task uses abstract extends"), blockKeywords: words("case do else for if switch while struct"), atoms: words("null"), hooks: {"#": cppHook}, modeProps: {fold: ["brace", "include"]} }); def("text/x-objectivec", { name: "clike", keywords: words(cKeywords + "inline restrict _Bool _Complex _Imaginery BOOL Class bycopy byref id IMP in " + "inout nil oneway out Protocol SEL self super atomic nonatomic retain copy readwrite readonly"), atoms: words("YES NO NULL NILL ON OFF"), hooks: { "@": function(stream) { stream.eatWhile(/[\w\$]/); return "keyword"; }, "#": cppHook }, modeProps: {fold: "brace"} }); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/clike/index.html ================================================ CodeMirror: C-like mode

                  C-like mode

                  C++ example

                  Objective-C example

                  Java example

                  Scala example

                  Simple mode that tries to handle C-like languages as well as it can. Takes two configuration parameters: keywords, an object whose property names are the keywords in the language, and useCPP, which determines whether C preprocessor directives are recognized.

                  MIME types defined: text/x-csrc (C), text/x-c++src (C++), text/x-java (Java), text/x-csharp (C#), text/x-objectivec (Objective-C), text/x-scala (Scala), text/x-vertex and x-shader/x-fragment (shader programs).

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/clike/scala.html ================================================ CodeMirror: Scala mode

                  Scala mode

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/clojure/clojure.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE /** * Author: Hans Engel * Branched from CodeMirror's Scheme mode (by Koh Zi Han, based on implementation by Koh Zi Chun) */ (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("clojure", function (options) { var BUILTIN = "builtin", COMMENT = "comment", STRING = "string", CHARACTER = "string-2", ATOM = "atom", NUMBER = "number", BRACKET = "bracket", KEYWORD = "keyword", VAR = "variable"; var INDENT_WORD_SKIP = options.indentUnit || 2; var NORMAL_INDENT_UNIT = options.indentUnit || 2; function makeKeywords(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } var atoms = makeKeywords("true false nil"); var keywords = makeKeywords( "defn defn- def def- defonce defmulti defmethod defmacro defstruct deftype defprotocol defrecord defproject deftest slice defalias defhinted defmacro- defn-memo defnk defnk defonce- defunbound defunbound- defvar defvar- let letfn do case cond condp for loop recur when when-not when-let when-first if if-let if-not . .. -> ->> doto and or dosync doseq dotimes dorun doall load import unimport ns in-ns refer try catch finally throw with-open with-local-vars binding gen-class gen-and-load-class gen-and-save-class handler-case handle"); var builtins = makeKeywords( "* *' *1 *2 *3 *agent* *allow-unresolved-vars* *assert* *clojure-version* *command-line-args* *compile-files* *compile-path* *compiler-options* *data-readers* *e *err* *file* *flush-on-newline* *fn-loader* *in* *math-context* *ns* *out* *print-dup* *print-length* *print-level* *print-meta* *print-readably* *read-eval* *source-path* *unchecked-math* *use-context-classloader* *verbose-defrecords* *warn-on-reflection* + +' - -' -> ->> ->ArrayChunk ->Vec ->VecNode ->VecSeq -cache-protocol-fn -reset-methods .. / < <= = == > >= EMPTY-NODE accessor aclone add-classpath add-watch agent agent-error agent-errors aget alength alias all-ns alter alter-meta! alter-var-root amap ancestors and apply areduce array-map aset aset-boolean aset-byte aset-char aset-double aset-float aset-int aset-long aset-short assert assoc assoc! assoc-in associative? atom await await-for await1 bases bean bigdec bigint biginteger binding bit-and bit-and-not bit-clear bit-flip bit-not bit-or bit-set bit-shift-left bit-shift-right bit-test bit-xor boolean boolean-array booleans bound-fn bound-fn* bound? butlast byte byte-array bytes case cast char char-array char-escape-string char-name-string char? chars chunk chunk-append chunk-buffer chunk-cons chunk-first chunk-next chunk-rest chunked-seq? class class? clear-agent-errors clojure-version coll? comment commute comp comparator compare compare-and-set! compile complement concat cond condp conj conj! cons constantly construct-proxy contains? count counted? create-ns create-struct cycle dec dec' decimal? declare default-data-readers definline definterface defmacro defmethod defmulti defn defn- defonce defprotocol defrecord defstruct deftype delay delay? deliver denominator deref derive descendants destructure disj disj! dissoc dissoc! distinct distinct? doall dorun doseq dosync dotimes doto double double-array doubles drop drop-last drop-while empty empty? ensure enumeration-seq error-handler error-mode eval even? every-pred every? ex-data ex-info extend extend-protocol extend-type extenders extends? false? ffirst file-seq filter filterv find find-keyword find-ns find-protocol-impl find-protocol-method find-var first flatten float float-array float? floats flush fn fn? fnext fnil for force format frequencies future future-call future-cancel future-cancelled? future-done? future? gen-class gen-interface gensym get get-in get-method get-proxy-class get-thread-bindings get-validator group-by hash hash-combine hash-map hash-set identical? identity if-let if-not ifn? import in-ns inc inc' init-proxy instance? int int-array integer? interleave intern interpose into into-array ints io! isa? iterate iterator-seq juxt keep keep-indexed key keys keyword keyword? last lazy-cat lazy-seq let letfn line-seq list list* list? load load-file load-reader load-string loaded-libs locking long long-array longs loop macroexpand macroexpand-1 make-array make-hierarchy map map-indexed map? mapcat mapv max max-key memfn memoize merge merge-with meta method-sig methods min min-key mod munge name namespace namespace-munge neg? newline next nfirst nil? nnext not not-any? not-empty not-every? not= ns ns-aliases ns-imports ns-interns ns-map ns-name ns-publics ns-refers ns-resolve ns-unalias ns-unmap nth nthnext nthrest num number? numerator object-array odd? or parents partial partition partition-all partition-by pcalls peek persistent! pmap pop pop! pop-thread-bindings pos? pr pr-str prefer-method prefers primitives-classnames print print-ctor print-dup print-method print-simple print-str printf println println-str prn prn-str promise proxy proxy-call-with-super proxy-mappings proxy-name proxy-super push-thread-bindings pvalues quot rand rand-int rand-nth range ratio? rational? rationalize re-find re-groups re-matcher re-matches re-pattern re-seq read read-line read-string realized? reduce reduce-kv reductions ref ref-history-count ref-max-history ref-min-history ref-set refer refer-clojure reify release-pending-sends rem remove remove-all-methods remove-method remove-ns remove-watch repeat repeatedly replace replicate require reset! reset-meta! resolve rest restart-agent resultset-seq reverse reversible? rseq rsubseq satisfies? second select-keys send send-off seq seq? seque sequence sequential? set set-error-handler! set-error-mode! set-validator! set? short short-array shorts shuffle shutdown-agents slurp some some-fn sort sort-by sorted-map sorted-map-by sorted-set sorted-set-by sorted? special-symbol? spit split-at split-with str string? struct struct-map subs subseq subvec supers swap! symbol symbol? sync take take-last take-nth take-while test the-ns thread-bound? time to-array to-array-2d trampoline transient tree-seq true? type unchecked-add unchecked-add-int unchecked-byte unchecked-char unchecked-dec unchecked-dec-int unchecked-divide-int unchecked-double unchecked-float unchecked-inc unchecked-inc-int unchecked-int unchecked-long unchecked-multiply unchecked-multiply-int unchecked-negate unchecked-negate-int unchecked-remainder-int unchecked-short unchecked-subtract unchecked-subtract-int underive unquote unquote-splicing update-in update-proxy use val vals var-get var-set var? vary-meta vec vector vector-of vector? when when-first when-let when-not while with-bindings with-bindings* with-in-str with-loading-context with-local-vars with-meta with-open with-out-str with-precision with-redefs with-redefs-fn xml-seq zero? zipmap *default-data-reader-fn* as-> cond-> cond->> reduced reduced? send-via set-agent-send-executor! set-agent-send-off-executor! some-> some->>"); var indentKeys = makeKeywords( // Built-ins "ns fn def defn defmethod bound-fn if if-not case condp when while when-not when-first do future comment doto locking proxy with-open with-precision reify deftype defrecord defprotocol extend extend-protocol extend-type try catch " + // Binding forms "let letfn binding loop for doseq dotimes when-let if-let " + // Data structures "defstruct struct-map assoc " + // clojure.test "testing deftest " + // contrib "handler-case handle dotrace deftrace"); var tests = { digit: /\d/, digit_or_colon: /[\d:]/, hex: /[0-9a-f]/i, sign: /[+-]/, exponent: /e/i, keyword_char: /[^\s\(\[\;\)\]]/, symbol: /[\w*+!\-\._?:<>\/\xa1-\uffff]/ }; function stateStack(indent, type, prev) { // represents a state stack object this.indent = indent; this.type = type; this.prev = prev; } function pushStack(state, indent, type) { state.indentStack = new stateStack(indent, type, state.indentStack); } function popStack(state) { state.indentStack = state.indentStack.prev; } function isNumber(ch, stream){ // hex if ( ch === '0' && stream.eat(/x/i) ) { stream.eatWhile(tests.hex); return true; } // leading sign if ( ( ch == '+' || ch == '-' ) && ( tests.digit.test(stream.peek()) ) ) { stream.eat(tests.sign); ch = stream.next(); } if ( tests.digit.test(ch) ) { stream.eat(ch); stream.eatWhile(tests.digit); if ( '.' == stream.peek() ) { stream.eat('.'); stream.eatWhile(tests.digit); } if ( stream.eat(tests.exponent) ) { stream.eat(tests.sign); stream.eatWhile(tests.digit); } return true; } return false; } // Eat character that starts after backslash \ function eatCharacter(stream) { var first = stream.next(); // Read special literals: backspace, newline, space, return. // Just read all lowercase letters. if (first && first.match(/[a-z]/) && stream.match(/[a-z]+/, true)) { return; } // Read unicode character: \u1000 \uA0a1 if (first === "u") { stream.match(/[0-9a-z]{4}/i, true); } } return { startState: function () { return { indentStack: null, indentation: 0, mode: false }; }, token: function (stream, state) { if (state.indentStack == null && stream.sol()) { // update indentation, but only if indentStack is empty state.indentation = stream.indentation(); } // skip spaces if (stream.eatSpace()) { return null; } var returnType = null; switch(state.mode){ case "string": // multi-line string parsing mode var next, escaped = false; while ((next = stream.next()) != null) { if (next == "\"" && !escaped) { state.mode = false; break; } escaped = !escaped && next == "\\"; } returnType = STRING; // continue on in string mode break; default: // default parsing mode var ch = stream.next(); if (ch == "\"") { state.mode = "string"; returnType = STRING; } else if (ch == "\\") { eatCharacter(stream); returnType = CHARACTER; } else if (ch == "'" && !( tests.digit_or_colon.test(stream.peek()) )) { returnType = ATOM; } else if (ch == ";") { // comment stream.skipToEnd(); // rest of the line is a comment returnType = COMMENT; } else if (isNumber(ch,stream)){ returnType = NUMBER; } else if (ch == "(" || ch == "[" || ch == "{" ) { var keyWord = '', indentTemp = stream.column(), letter; /** Either (indent-word .. (non-indent-word .. (;something else, bracket, etc. */ if (ch == "(") while ((letter = stream.eat(tests.keyword_char)) != null) { keyWord += letter; } if (keyWord.length > 0 && (indentKeys.propertyIsEnumerable(keyWord) || /^(?:def|with)/.test(keyWord))) { // indent-word pushStack(state, indentTemp + INDENT_WORD_SKIP, ch); } else { // non-indent word // we continue eating the spaces stream.eatSpace(); if (stream.eol() || stream.peek() == ";") { // nothing significant after // we restart indentation the user defined spaces after pushStack(state, indentTemp + NORMAL_INDENT_UNIT, ch); } else { pushStack(state, indentTemp + stream.current().length, ch); // else we match } } stream.backUp(stream.current().length - 1); // undo all the eating returnType = BRACKET; } else if (ch == ")" || ch == "]" || ch == "}") { returnType = BRACKET; if (state.indentStack != null && state.indentStack.type == (ch == ")" ? "(" : (ch == "]" ? "[" :"{"))) { popStack(state); } } else if ( ch == ":" ) { stream.eatWhile(tests.symbol); return ATOM; } else { stream.eatWhile(tests.symbol); if (keywords && keywords.propertyIsEnumerable(stream.current())) { returnType = KEYWORD; } else if (builtins && builtins.propertyIsEnumerable(stream.current())) { returnType = BUILTIN; } else if (atoms && atoms.propertyIsEnumerable(stream.current())) { returnType = ATOM; } else { returnType = VAR; } } } return returnType; }, indent: function (state) { if (state.indentStack == null) return state.indentation; return state.indentStack.indent; }, lineComment: ";;" }; }); CodeMirror.defineMIME("text/x-clojure", "clojure"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/clojure/index.html ================================================ CodeMirror: Clojure mode

                  Clojure mode

                  MIME types defined: text/x-clojure.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/cobol/cobol.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE /** * Author: Gautam Mehta * Branched from CodeMirror's Scheme mode */ (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("cobol", function () { var BUILTIN = "builtin", COMMENT = "comment", STRING = "string", ATOM = "atom", NUMBER = "number", KEYWORD = "keyword", MODTAG = "header", COBOLLINENUM = "def", PERIOD = "link"; function makeKeywords(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } var atoms = makeKeywords("TRUE FALSE ZEROES ZEROS ZERO SPACES SPACE LOW-VALUE LOW-VALUES "); var keywords = makeKeywords( "ACCEPT ACCESS ACQUIRE ADD ADDRESS " + "ADVANCING AFTER ALIAS ALL ALPHABET " + "ALPHABETIC ALPHABETIC-LOWER ALPHABETIC-UPPER ALPHANUMERIC ALPHANUMERIC-EDITED " + "ALSO ALTER ALTERNATE AND ANY " + "ARE AREA AREAS ARITHMETIC ASCENDING " + "ASSIGN AT ATTRIBUTE AUTHOR AUTO " + "AUTO-SKIP AUTOMATIC B-AND B-EXOR B-LESS " + "B-NOT B-OR BACKGROUND-COLOR BACKGROUND-COLOUR BEEP " + "BEFORE BELL BINARY BIT BITS " + "BLANK BLINK BLOCK BOOLEAN BOTTOM " + "BY CALL CANCEL CD CF " + "CH CHARACTER CHARACTERS CLASS CLOCK-UNITS " + "CLOSE COBOL CODE CODE-SET COL " + "COLLATING COLUMN COMMA COMMIT COMMITMENT " + "COMMON COMMUNICATION COMP COMP-0 COMP-1 " + "COMP-2 COMP-3 COMP-4 COMP-5 COMP-6 " + "COMP-7 COMP-8 COMP-9 COMPUTATIONAL COMPUTATIONAL-0 " + "COMPUTATIONAL-1 COMPUTATIONAL-2 COMPUTATIONAL-3 COMPUTATIONAL-4 COMPUTATIONAL-5 " + "COMPUTATIONAL-6 COMPUTATIONAL-7 COMPUTATIONAL-8 COMPUTATIONAL-9 COMPUTE " + "CONFIGURATION CONNECT CONSOLE CONTAINED CONTAINS " + "CONTENT CONTINUE CONTROL CONTROL-AREA CONTROLS " + "CONVERTING COPY CORR CORRESPONDING COUNT " + "CRT CRT-UNDER CURRENCY CURRENT CURSOR " + "DATA DATE DATE-COMPILED DATE-WRITTEN DAY " + "DAY-OF-WEEK DB DB-ACCESS-CONTROL-KEY DB-DATA-NAME DB-EXCEPTION " + "DB-FORMAT-NAME DB-RECORD-NAME DB-SET-NAME DB-STATUS DBCS " + "DBCS-EDITED DE DEBUG-CONTENTS DEBUG-ITEM DEBUG-LINE " + "DEBUG-NAME DEBUG-SUB-1 DEBUG-SUB-2 DEBUG-SUB-3 DEBUGGING " + "DECIMAL-POINT DECLARATIVES DEFAULT DELETE DELIMITED " + "DELIMITER DEPENDING DESCENDING DESCRIBED DESTINATION " + "DETAIL DISABLE DISCONNECT DISPLAY DISPLAY-1 " + "DISPLAY-2 DISPLAY-3 DISPLAY-4 DISPLAY-5 DISPLAY-6 " + "DISPLAY-7 DISPLAY-8 DISPLAY-9 DIVIDE DIVISION " + "DOWN DROP DUPLICATE DUPLICATES DYNAMIC " + "EBCDIC EGI EJECT ELSE EMI " + "EMPTY EMPTY-CHECK ENABLE END END. END-ACCEPT END-ACCEPT. " + "END-ADD END-CALL END-COMPUTE END-DELETE END-DISPLAY " + "END-DIVIDE END-EVALUATE END-IF END-INVOKE END-MULTIPLY " + "END-OF-PAGE END-PERFORM END-READ END-RECEIVE END-RETURN " + "END-REWRITE END-SEARCH END-START END-STRING END-SUBTRACT " + "END-UNSTRING END-WRITE END-XML ENTER ENTRY " + "ENVIRONMENT EOP EQUAL EQUALS ERASE " + "ERROR ESI EVALUATE EVERY EXCEEDS " + "EXCEPTION EXCLUSIVE EXIT EXTEND EXTERNAL " + "EXTERNALLY-DESCRIBED-KEY FD FETCH FILE FILE-CONTROL " + "FILE-STREAM FILES FILLER FINAL FIND " + "FINISH FIRST FOOTING FOR FOREGROUND-COLOR " + "FOREGROUND-COLOUR FORMAT FREE FROM FULL " + "FUNCTION GENERATE GET GIVING GLOBAL " + "GO GOBACK GREATER GROUP HEADING " + "HIGH-VALUE HIGH-VALUES HIGHLIGHT I-O I-O-CONTROL " + "ID IDENTIFICATION IF IN INDEX " + "INDEX-1 INDEX-2 INDEX-3 INDEX-4 INDEX-5 " + "INDEX-6 INDEX-7 INDEX-8 INDEX-9 INDEXED " + "INDIC INDICATE INDICATOR INDICATORS INITIAL " + "INITIALIZE INITIATE INPUT INPUT-OUTPUT INSPECT " + "INSTALLATION INTO INVALID INVOKE IS " + "JUST JUSTIFIED KANJI KEEP KEY " + "LABEL LAST LD LEADING LEFT " + "LEFT-JUSTIFY LENGTH LENGTH-CHECK LESS LIBRARY " + "LIKE LIMIT LIMITS LINAGE LINAGE-COUNTER " + "LINE LINE-COUNTER LINES LINKAGE LOCAL-STORAGE " + "LOCALE LOCALLY LOCK " + "MEMBER MEMORY MERGE MESSAGE METACLASS " + "MODE MODIFIED MODIFY MODULES MOVE " + "MULTIPLE MULTIPLY NATIONAL NATIVE NEGATIVE " + "NEXT NO NO-ECHO NONE NOT " + "NULL NULL-KEY-MAP NULL-MAP NULLS NUMBER " + "NUMERIC NUMERIC-EDITED OBJECT OBJECT-COMPUTER OCCURS " + "OF OFF OMITTED ON ONLY " + "OPEN OPTIONAL OR ORDER ORGANIZATION " + "OTHER OUTPUT OVERFLOW OWNER PACKED-DECIMAL " + "PADDING PAGE PAGE-COUNTER PARSE PERFORM " + "PF PH PIC PICTURE PLUS " + "POINTER POSITION POSITIVE PREFIX PRESENT " + "PRINTING PRIOR PROCEDURE PROCEDURE-POINTER PROCEDURES " + "PROCEED PROCESS PROCESSING PROGRAM PROGRAM-ID " + "PROMPT PROTECTED PURGE QUEUE QUOTE " + "QUOTES RANDOM RD READ READY " + "REALM RECEIVE RECONNECT RECORD RECORD-NAME " + "RECORDS RECURSIVE REDEFINES REEL REFERENCE " + "REFERENCE-MONITOR REFERENCES RELATION RELATIVE RELEASE " + "REMAINDER REMOVAL RENAMES REPEATED REPLACE " + "REPLACING REPORT REPORTING REPORTS REPOSITORY " + "REQUIRED RERUN RESERVE RESET RETAINING " + "RETRIEVAL RETURN RETURN-CODE RETURNING REVERSE-VIDEO " + "REVERSED REWIND REWRITE RF RH " + "RIGHT RIGHT-JUSTIFY ROLLBACK ROLLING ROUNDED " + "RUN SAME SCREEN SD SEARCH " + "SECTION SECURE SECURITY SEGMENT SEGMENT-LIMIT " + "SELECT SEND SENTENCE SEPARATE SEQUENCE " + "SEQUENTIAL SET SHARED SIGN SIZE " + "SKIP1 SKIP2 SKIP3 SORT SORT-MERGE " + "SORT-RETURN SOURCE SOURCE-COMPUTER SPACE-FILL " + "SPECIAL-NAMES STANDARD STANDARD-1 STANDARD-2 " + "START STARTING STATUS STOP STORE " + "STRING SUB-QUEUE-1 SUB-QUEUE-2 SUB-QUEUE-3 SUB-SCHEMA " + "SUBFILE SUBSTITUTE SUBTRACT SUM SUPPRESS " + "SYMBOLIC SYNC SYNCHRONIZED SYSIN SYSOUT " + "TABLE TALLYING TAPE TENANT TERMINAL " + "TERMINATE TEST TEXT THAN THEN " + "THROUGH THRU TIME TIMES TITLE " + "TO TOP TRAILING TRAILING-SIGN TRANSACTION " + "TYPE TYPEDEF UNDERLINE UNEQUAL UNIT " + "UNSTRING UNTIL UP UPDATE UPON " + "USAGE USAGE-MODE USE USING VALID " + "VALIDATE VALUE VALUES VARYING VLR " + "WAIT WHEN WHEN-COMPILED WITH WITHIN " + "WORDS WORKING-STORAGE WRITE XML XML-CODE " + "XML-EVENT XML-NTEXT XML-TEXT ZERO ZERO-FILL " ); var builtins = makeKeywords("- * ** / + < <= = > >= "); var tests = { digit: /\d/, digit_or_colon: /[\d:]/, hex: /[0-9a-f]/i, sign: /[+-]/, exponent: /e/i, keyword_char: /[^\s\(\[\;\)\]]/, symbol: /[\w*+\-]/ }; function isNumber(ch, stream){ // hex if ( ch === '0' && stream.eat(/x/i) ) { stream.eatWhile(tests.hex); return true; } // leading sign if ( ( ch == '+' || ch == '-' ) && ( tests.digit.test(stream.peek()) ) ) { stream.eat(tests.sign); ch = stream.next(); } if ( tests.digit.test(ch) ) { stream.eat(ch); stream.eatWhile(tests.digit); if ( '.' == stream.peek()) { stream.eat('.'); stream.eatWhile(tests.digit); } if ( stream.eat(tests.exponent) ) { stream.eat(tests.sign); stream.eatWhile(tests.digit); } return true; } return false; } return { startState: function () { return { indentStack: null, indentation: 0, mode: false }; }, token: function (stream, state) { if (state.indentStack == null && stream.sol()) { // update indentation, but only if indentStack is empty state.indentation = 6 ; //stream.indentation(); } // skip spaces if (stream.eatSpace()) { return null; } var returnType = null; switch(state.mode){ case "string": // multi-line string parsing mode var next = false; while ((next = stream.next()) != null) { if (next == "\"" || next == "\'") { state.mode = false; break; } } returnType = STRING; // continue on in string mode break; default: // default parsing mode var ch = stream.next(); var col = stream.column(); if (col >= 0 && col <= 5) { returnType = COBOLLINENUM; } else if (col >= 72 && col <= 79) { stream.skipToEnd(); returnType = MODTAG; } else if (ch == "*" && col == 6) { // comment stream.skipToEnd(); // rest of the line is a comment returnType = COMMENT; } else if (ch == "\"" || ch == "\'") { state.mode = "string"; returnType = STRING; } else if (ch == "'" && !( tests.digit_or_colon.test(stream.peek()) )) { returnType = ATOM; } else if (ch == ".") { returnType = PERIOD; } else if (isNumber(ch,stream)){ returnType = NUMBER; } else { if (stream.current().match(tests.symbol)) { while (col < 71) { if (stream.eat(tests.symbol) === undefined) { break; } else { col++; } } } if (keywords && keywords.propertyIsEnumerable(stream.current().toUpperCase())) { returnType = KEYWORD; } else if (builtins && builtins.propertyIsEnumerable(stream.current().toUpperCase())) { returnType = BUILTIN; } else if (atoms && atoms.propertyIsEnumerable(stream.current().toUpperCase())) { returnType = ATOM; } else returnType = null; } } return returnType; }, indent: function (state) { if (state.indentStack == null) return state.indentation; return state.indentStack.indent; } }; }); CodeMirror.defineMIME("text/x-cobol", "cobol"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/cobol/index.html ================================================ CodeMirror: COBOL mode

                  COBOL mode

                  Select Theme Select Font Size

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/coffeescript/coffeescript.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE /** * Link to the project's GitHub page: * https://github.com/pickhardt/coffeescript-codemirror-mode */ (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("coffeescript", function(conf, parserConf) { var ERRORCLASS = "error"; function wordRegexp(words) { return new RegExp("^((" + words.join(")|(") + "))\\b"); } var operators = /^(?:->|=>|\+[+=]?|-[\-=]?|\*[\*=]?|\/[\/=]?|[=!]=|<[><]?=?|>>?=?|%=?|&=?|\|=?|\^=?|\~|!|\?|(or|and|\|\||&&|\?)=)/; var delimiters = /^(?:[()\[\]{},:`=;]|\.\.?\.?)/; var identifiers = /^[_A-Za-z$][_A-Za-z$0-9]*/; var properties = /^(@|this\.)[_A-Za-z$][_A-Za-z$0-9]*/; var wordOperators = wordRegexp(["and", "or", "not", "is", "isnt", "in", "instanceof", "typeof"]); var indentKeywords = ["for", "while", "loop", "if", "unless", "else", "switch", "try", "catch", "finally", "class"]; var commonKeywords = ["break", "by", "continue", "debugger", "delete", "do", "in", "of", "new", "return", "then", "this", "@", "throw", "when", "until", "extends"]; var keywords = wordRegexp(indentKeywords.concat(commonKeywords)); indentKeywords = wordRegexp(indentKeywords); var stringPrefixes = /^('{3}|\"{3}|['\"])/; var regexPrefixes = /^(\/{3}|\/)/; var commonConstants = ["Infinity", "NaN", "undefined", "null", "true", "false", "on", "off", "yes", "no"]; var constants = wordRegexp(commonConstants); // Tokenizers function tokenBase(stream, state) { // Handle scope changes if (stream.sol()) { if (state.scope.align === null) state.scope.align = false; var scopeOffset = state.scope.offset; if (stream.eatSpace()) { var lineOffset = stream.indentation(); if (lineOffset > scopeOffset && state.scope.type == "coffee") { return "indent"; } else if (lineOffset < scopeOffset) { return "dedent"; } return null; } else { if (scopeOffset > 0) { dedent(stream, state); } } } if (stream.eatSpace()) { return null; } var ch = stream.peek(); // Handle docco title comment (single line) if (stream.match("####")) { stream.skipToEnd(); return "comment"; } // Handle multi line comments if (stream.match("###")) { state.tokenize = longComment; return state.tokenize(stream, state); } // Single line comment if (ch === "#") { stream.skipToEnd(); return "comment"; } // Handle number literals if (stream.match(/^-?[0-9\.]/, false)) { var floatLiteral = false; // Floats if (stream.match(/^-?\d*\.\d+(e[\+\-]?\d+)?/i)) { floatLiteral = true; } if (stream.match(/^-?\d+\.\d*/)) { floatLiteral = true; } if (stream.match(/^-?\.\d+/)) { floatLiteral = true; } if (floatLiteral) { // prevent from getting extra . on 1.. if (stream.peek() == "."){ stream.backUp(1); } return "number"; } // Integers var intLiteral = false; // Hex if (stream.match(/^-?0x[0-9a-f]+/i)) { intLiteral = true; } // Decimal if (stream.match(/^-?[1-9]\d*(e[\+\-]?\d+)?/)) { intLiteral = true; } // Zero by itself with no other piece of number. if (stream.match(/^-?0(?![\dx])/i)) { intLiteral = true; } if (intLiteral) { return "number"; } } // Handle strings if (stream.match(stringPrefixes)) { state.tokenize = tokenFactory(stream.current(), false, "string"); return state.tokenize(stream, state); } // Handle regex literals if (stream.match(regexPrefixes)) { if (stream.current() != "/" || stream.match(/^.*\//, false)) { // prevent highlight of division state.tokenize = tokenFactory(stream.current(), true, "string-2"); return state.tokenize(stream, state); } else { stream.backUp(1); } } // Handle operators and delimiters if (stream.match(operators) || stream.match(wordOperators)) { return "operator"; } if (stream.match(delimiters)) { return "punctuation"; } if (stream.match(constants)) { return "atom"; } if (stream.match(keywords)) { return "keyword"; } if (stream.match(identifiers)) { return "variable"; } if (stream.match(properties)) { return "property"; } // Handle non-detected items stream.next(); return ERRORCLASS; } function tokenFactory(delimiter, singleline, outclass) { return function(stream, state) { while (!stream.eol()) { stream.eatWhile(/[^'"\/\\]/); if (stream.eat("\\")) { stream.next(); if (singleline && stream.eol()) { return outclass; } } else if (stream.match(delimiter)) { state.tokenize = tokenBase; return outclass; } else { stream.eat(/['"\/]/); } } if (singleline) { if (parserConf.singleLineStringErrors) { outclass = ERRORCLASS; } else { state.tokenize = tokenBase; } } return outclass; }; } function longComment(stream, state) { while (!stream.eol()) { stream.eatWhile(/[^#]/); if (stream.match("###")) { state.tokenize = tokenBase; break; } stream.eatWhile("#"); } return "comment"; } function indent(stream, state, type) { type = type || "coffee"; var offset = 0, align = false, alignOffset = null; for (var scope = state.scope; scope; scope = scope.prev) { if (scope.type === "coffee" || scope.type == "}") { offset = scope.offset + conf.indentUnit; break; } } if (type !== "coffee") { align = null; alignOffset = stream.column() + stream.current().length; } else if (state.scope.align) { state.scope.align = false; } state.scope = { offset: offset, type: type, prev: state.scope, align: align, alignOffset: alignOffset }; } function dedent(stream, state) { if (!state.scope.prev) return; if (state.scope.type === "coffee") { var _indent = stream.indentation(); var matched = false; for (var scope = state.scope; scope; scope = scope.prev) { if (_indent === scope.offset) { matched = true; break; } } if (!matched) { return true; } while (state.scope.prev && state.scope.offset !== _indent) { state.scope = state.scope.prev; } return false; } else { state.scope = state.scope.prev; return false; } } function tokenLexer(stream, state) { var style = state.tokenize(stream, state); var current = stream.current(); // Handle "." connected identifiers if (current === ".") { style = state.tokenize(stream, state); current = stream.current(); if (/^\.[\w$]+$/.test(current)) { return "variable"; } else { return ERRORCLASS; } } // Handle scope changes. if (current === "return") { state.dedent = true; } if (((current === "->" || current === "=>") && !state.lambda && !stream.peek()) || style === "indent") { indent(stream, state); } var delimiter_index = "[({".indexOf(current); if (delimiter_index !== -1) { indent(stream, state, "])}".slice(delimiter_index, delimiter_index+1)); } if (indentKeywords.exec(current)){ indent(stream, state); } if (current == "then"){ dedent(stream, state); } if (style === "dedent") { if (dedent(stream, state)) { return ERRORCLASS; } } delimiter_index = "])}".indexOf(current); if (delimiter_index !== -1) { while (state.scope.type == "coffee" && state.scope.prev) state.scope = state.scope.prev; if (state.scope.type == current) state.scope = state.scope.prev; } if (state.dedent && stream.eol()) { if (state.scope.type == "coffee" && state.scope.prev) state.scope = state.scope.prev; state.dedent = false; } return style; } var external = { startState: function(basecolumn) { return { tokenize: tokenBase, scope: {offset:basecolumn || 0, type:"coffee", prev: null, align: false}, lastToken: null, lambda: false, dedent: 0 }; }, token: function(stream, state) { var fillAlign = state.scope.align === null && state.scope; if (fillAlign && stream.sol()) fillAlign.align = false; var style = tokenLexer(stream, state); if (fillAlign && style && style != "comment") fillAlign.align = true; state.lastToken = {style:style, content: stream.current()}; if (stream.eol() && stream.lambda) { state.lambda = false; } return style; }, indent: function(state, text) { if (state.tokenize != tokenBase) return 0; var scope = state.scope; var closer = text && "])}".indexOf(text.charAt(0)) > -1; if (closer) while (scope.type == "coffee" && scope.prev) scope = scope.prev; var closes = closer && scope.type === text.charAt(0); if (scope.align) return scope.alignOffset - (closes ? 1 : 0); else return (closes ? scope.prev : scope).offset; }, lineComment: "#", fold: "indent" }; return external; }); CodeMirror.defineMIME("text/x-coffeescript", "coffeescript"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/coffeescript/index.html ================================================ CodeMirror: CoffeeScript mode

                  CoffeeScript mode

                  MIME types defined: text/x-coffeescript.

                  The CoffeeScript mode was written by Jeff Pickhardt.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/commonlisp/commonlisp.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("commonlisp", function (config) { var specialForm = /^(block|let*|return-from|catch|load-time-value|setq|eval-when|locally|symbol-macrolet|flet|macrolet|tagbody|function|multiple-value-call|the|go|multiple-value-prog1|throw|if|progn|unwind-protect|labels|progv|let|quote)$/; var assumeBody = /^with|^def|^do|^prog|case$|^cond$|bind$|when$|unless$/; var numLiteral = /^(?:[+\-]?(?:\d+|\d*\.\d+)(?:[efd][+\-]?\d+)?|[+\-]?\d+(?:\/[+\-]?\d+)?|#b[+\-]?[01]+|#o[+\-]?[0-7]+|#x[+\-]?[\da-f]+)/; var symbol = /[^\s'`,@()\[\]";]/; var type; function readSym(stream) { var ch; while (ch = stream.next()) { if (ch == "\\") stream.next(); else if (!symbol.test(ch)) { stream.backUp(1); break; } } return stream.current(); } function base(stream, state) { if (stream.eatSpace()) {type = "ws"; return null;} if (stream.match(numLiteral)) return "number"; var ch = stream.next(); if (ch == "\\") ch = stream.next(); if (ch == '"') return (state.tokenize = inString)(stream, state); else if (ch == "(") { type = "open"; return "bracket"; } else if (ch == ")" || ch == "]") { type = "close"; return "bracket"; } else if (ch == ";") { stream.skipToEnd(); type = "ws"; return "comment"; } else if (/['`,@]/.test(ch)) return null; else if (ch == "|") { if (stream.skipTo("|")) { stream.next(); return "symbol"; } else { stream.skipToEnd(); return "error"; } } else if (ch == "#") { var ch = stream.next(); if (ch == "[") { type = "open"; return "bracket"; } else if (/[+\-=\.']/.test(ch)) return null; else if (/\d/.test(ch) && stream.match(/^\d*#/)) return null; else if (ch == "|") return (state.tokenize = inComment)(stream, state); else if (ch == ":") { readSym(stream); return "meta"; } else return "error"; } else { var name = readSym(stream); if (name == ".") return null; type = "symbol"; if (name == "nil" || name == "t" || name.charAt(0) == ":") return "atom"; if (state.lastType == "open" && (specialForm.test(name) || assumeBody.test(name))) return "keyword"; if (name.charAt(0) == "&") return "variable-2"; return "variable"; } } function inString(stream, state) { var escaped = false, next; while (next = stream.next()) { if (next == '"' && !escaped) { state.tokenize = base; break; } escaped = !escaped && next == "\\"; } return "string"; } function inComment(stream, state) { var next, last; while (next = stream.next()) { if (next == "#" && last == "|") { state.tokenize = base; break; } last = next; } type = "ws"; return "comment"; } return { startState: function () { return {ctx: {prev: null, start: 0, indentTo: 0}, lastType: null, tokenize: base}; }, token: function (stream, state) { if (stream.sol() && typeof state.ctx.indentTo != "number") state.ctx.indentTo = state.ctx.start + 1; type = null; var style = state.tokenize(stream, state); if (type != "ws") { if (state.ctx.indentTo == null) { if (type == "symbol" && assumeBody.test(stream.current())) state.ctx.indentTo = state.ctx.start + config.indentUnit; else state.ctx.indentTo = "next"; } else if (state.ctx.indentTo == "next") { state.ctx.indentTo = stream.column(); } state.lastType = type; } if (type == "open") state.ctx = {prev: state.ctx, start: stream.column(), indentTo: null}; else if (type == "close") state.ctx = state.ctx.prev || state.ctx; return style; }, indent: function (state, _textAfter) { var i = state.ctx.indentTo; return typeof i == "number" ? i : state.ctx.start + 1; }, lineComment: ";;", blockCommentStart: "#|", blockCommentEnd: "|#" }; }); CodeMirror.defineMIME("text/x-common-lisp", "commonlisp"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/commonlisp/index.html ================================================ CodeMirror: Common Lisp mode

                  Common Lisp mode

                  MIME types defined: text/x-common-lisp.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/css/css.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("css", function(config, parserConfig) { if (!parserConfig.propertyKeywords) parserConfig = CodeMirror.resolveMode("text/css"); var indentUnit = config.indentUnit, tokenHooks = parserConfig.tokenHooks, documentTypes = parserConfig.documentTypes || {}, mediaTypes = parserConfig.mediaTypes || {}, mediaFeatures = parserConfig.mediaFeatures || {}, propertyKeywords = parserConfig.propertyKeywords || {}, nonStandardPropertyKeywords = parserConfig.nonStandardPropertyKeywords || {}, fontProperties = parserConfig.fontProperties || {}, counterDescriptors = parserConfig.counterDescriptors || {}, colorKeywords = parserConfig.colorKeywords || {}, valueKeywords = parserConfig.valueKeywords || {}, allowNested = parserConfig.allowNested; var type, override; function ret(style, tp) { type = tp; return style; } // Tokenizers function tokenBase(stream, state) { var ch = stream.next(); if (tokenHooks[ch]) { var result = tokenHooks[ch](stream, state); if (result !== false) return result; } if (ch == "@") { stream.eatWhile(/[\w\\\-]/); return ret("def", stream.current()); } else if (ch == "=" || (ch == "~" || ch == "|") && stream.eat("=")) { return ret(null, "compare"); } else if (ch == "\"" || ch == "'") { state.tokenize = tokenString(ch); return state.tokenize(stream, state); } else if (ch == "#") { stream.eatWhile(/[\w\\\-]/); return ret("atom", "hash"); } else if (ch == "!") { stream.match(/^\s*\w*/); return ret("keyword", "important"); } else if (/\d/.test(ch) || ch == "." && stream.eat(/\d/)) { stream.eatWhile(/[\w.%]/); return ret("number", "unit"); } else if (ch === "-") { if (/[\d.]/.test(stream.peek())) { stream.eatWhile(/[\w.%]/); return ret("number", "unit"); } else if (stream.match(/^-[\w\\\-]+/)) { stream.eatWhile(/[\w\\\-]/); if (stream.match(/^\s*:/, false)) return ret("variable-2", "variable-definition"); return ret("variable-2", "variable"); } else if (stream.match(/^\w+-/)) { return ret("meta", "meta"); } } else if (/[,+>*\/]/.test(ch)) { return ret(null, "select-op"); } else if (ch == "." && stream.match(/^-?[_a-z][_a-z0-9-]*/i)) { return ret("qualifier", "qualifier"); } else if (/[:;{}\[\]\(\)]/.test(ch)) { return ret(null, ch); } else if ((ch == "u" && stream.match(/rl(-prefix)?\(/)) || (ch == "d" && stream.match("omain(")) || (ch == "r" && stream.match("egexp("))) { stream.backUp(1); state.tokenize = tokenParenthesized; return ret("property", "word"); } else if (/[\w\\\-]/.test(ch)) { stream.eatWhile(/[\w\\\-]/); return ret("property", "word"); } else { return ret(null, null); } } function tokenString(quote) { return function(stream, state) { var escaped = false, ch; while ((ch = stream.next()) != null) { if (ch == quote && !escaped) { if (quote == ")") stream.backUp(1); break; } escaped = !escaped && ch == "\\"; } if (ch == quote || !escaped && quote != ")") state.tokenize = null; return ret("string", "string"); }; } function tokenParenthesized(stream, state) { stream.next(); // Must be '(' if (!stream.match(/\s*[\"\')]/, false)) state.tokenize = tokenString(")"); else state.tokenize = null; return ret(null, "("); } // Context management function Context(type, indent, prev) { this.type = type; this.indent = indent; this.prev = prev; } function pushContext(state, stream, type) { state.context = new Context(type, stream.indentation() + indentUnit, state.context); return type; } function popContext(state) { state.context = state.context.prev; return state.context.type; } function pass(type, stream, state) { return states[state.context.type](type, stream, state); } function popAndPass(type, stream, state, n) { for (var i = n || 1; i > 0; i--) state.context = state.context.prev; return pass(type, stream, state); } // Parser function wordAsValue(stream) { var word = stream.current().toLowerCase(); if (valueKeywords.hasOwnProperty(word)) override = "atom"; else if (colorKeywords.hasOwnProperty(word)) override = "keyword"; else override = "variable"; } var states = {}; states.top = function(type, stream, state) { if (type == "{") { return pushContext(state, stream, "block"); } else if (type == "}" && state.context.prev) { return popContext(state); } else if (/@(media|supports|(-moz-)?document)/.test(type)) { return pushContext(state, stream, "atBlock"); } else if (/@(font-face|counter-style)/.test(type)) { state.stateArg = type; return "restricted_atBlock_before"; } else if (/^@(-(moz|ms|o|webkit)-)?keyframes$/.test(type)) { return "keyframes"; } else if (type && type.charAt(0) == "@") { return pushContext(state, stream, "at"); } else if (type == "hash") { override = "builtin"; } else if (type == "word") { override = "tag"; } else if (type == "variable-definition") { return "maybeprop"; } else if (type == "interpolation") { return pushContext(state, stream, "interpolation"); } else if (type == ":") { return "pseudo"; } else if (allowNested && type == "(") { return pushContext(state, stream, "parens"); } return state.context.type; }; states.block = function(type, stream, state) { if (type == "word") { var word = stream.current().toLowerCase(); if (propertyKeywords.hasOwnProperty(word)) { override = "property"; return "maybeprop"; } else if (nonStandardPropertyKeywords.hasOwnProperty(word)) { override = "string-2"; return "maybeprop"; } else if (allowNested) { override = stream.match(/^\s*:(?:\s|$)/, false) ? "property" : "tag"; return "block"; } else { override += " error"; return "maybeprop"; } } else if (type == "meta") { return "block"; } else if (!allowNested && (type == "hash" || type == "qualifier")) { override = "error"; return "block"; } else { return states.top(type, stream, state); } }; states.maybeprop = function(type, stream, state) { if (type == ":") return pushContext(state, stream, "prop"); return pass(type, stream, state); }; states.prop = function(type, stream, state) { if (type == ";") return popContext(state); if (type == "{" && allowNested) return pushContext(state, stream, "propBlock"); if (type == "}" || type == "{") return popAndPass(type, stream, state); if (type == "(") return pushContext(state, stream, "parens"); if (type == "hash" && !/^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/.test(stream.current())) { override += " error"; } else if (type == "word") { wordAsValue(stream); } else if (type == "interpolation") { return pushContext(state, stream, "interpolation"); } return "prop"; }; states.propBlock = function(type, _stream, state) { if (type == "}") return popContext(state); if (type == "word") { override = "property"; return "maybeprop"; } return state.context.type; }; states.parens = function(type, stream, state) { if (type == "{" || type == "}") return popAndPass(type, stream, state); if (type == ")") return popContext(state); if (type == "(") return pushContext(state, stream, "parens"); if (type == "word") wordAsValue(stream); return "parens"; }; states.pseudo = function(type, stream, state) { if (type == "word") { override = "variable-3"; return state.context.type; } return pass(type, stream, state); }; states.atBlock = function(type, stream, state) { if (type == "(") return pushContext(state, stream, "atBlock_parens"); if (type == "}") return popAndPass(type, stream, state); if (type == "{") return popContext(state) && pushContext(state, stream, allowNested ? "block" : "top"); if (type == "word") { var word = stream.current().toLowerCase(); if (word == "only" || word == "not" || word == "and" || word == "or") override = "keyword"; else if (documentTypes.hasOwnProperty(word)) override = "tag"; else if (mediaTypes.hasOwnProperty(word)) override = "attribute"; else if (mediaFeatures.hasOwnProperty(word)) override = "property"; else if (propertyKeywords.hasOwnProperty(word)) override = "property"; else if (nonStandardPropertyKeywords.hasOwnProperty(word)) override = "string-2"; else if (valueKeywords.hasOwnProperty(word)) override = "atom"; else override = "error"; } return state.context.type; }; states.atBlock_parens = function(type, stream, state) { if (type == ")") return popContext(state); if (type == "{" || type == "}") return popAndPass(type, stream, state, 2); return states.atBlock(type, stream, state); }; states.restricted_atBlock_before = function(type, stream, state) { if (type == "{") return pushContext(state, stream, "restricted_atBlock"); if (type == "word" && state.stateArg == "@counter-style") { override = "variable"; return "restricted_atBlock_before"; } return pass(type, stream, state); }; states.restricted_atBlock = function(type, stream, state) { if (type == "}") { state.stateArg = null; return popContext(state); } if (type == "word") { if ((state.stateArg == "@font-face" && !fontProperties.hasOwnProperty(stream.current().toLowerCase())) || (state.stateArg == "@counter-style" && !counterDescriptors.hasOwnProperty(stream.current().toLowerCase()))) override = "error"; else override = "property"; return "maybeprop"; } return "restricted_atBlock"; }; states.keyframes = function(type, stream, state) { if (type == "word") { override = "variable"; return "keyframes"; } if (type == "{") return pushContext(state, stream, "top"); return pass(type, stream, state); }; states.at = function(type, stream, state) { if (type == ";") return popContext(state); if (type == "{" || type == "}") return popAndPass(type, stream, state); if (type == "word") override = "tag"; else if (type == "hash") override = "builtin"; return "at"; }; states.interpolation = function(type, stream, state) { if (type == "}") return popContext(state); if (type == "{" || type == ";") return popAndPass(type, stream, state); if (type != "variable") override = "error"; return "interpolation"; }; return { startState: function(base) { return {tokenize: null, state: "top", stateArg: null, context: new Context("top", base || 0, null)}; }, token: function(stream, state) { if (!state.tokenize && stream.eatSpace()) return null; var style = (state.tokenize || tokenBase)(stream, state); if (style && typeof style == "object") { type = style[1]; style = style[0]; } override = style; state.state = states[state.state](type, stream, state); return override; }, indent: function(state, textAfter) { var cx = state.context, ch = textAfter && textAfter.charAt(0); var indent = cx.indent; if (cx.type == "prop" && (ch == "}" || ch == ")")) cx = cx.prev; if (cx.prev && (ch == "}" && (cx.type == "block" || cx.type == "top" || cx.type == "interpolation" || cx.type == "restricted_atBlock") || ch == ")" && (cx.type == "parens" || cx.type == "atBlock_parens") || ch == "{" && (cx.type == "at" || cx.type == "atBlock"))) { indent = cx.indent - indentUnit; cx = cx.prev; } return indent; }, electricChars: "}", blockCommentStart: "/*", blockCommentEnd: "*/", fold: "brace" }; }); function keySet(array) { var keys = {}; for (var i = 0; i < array.length; ++i) { keys[array[i]] = true; } return keys; } var documentTypes_ = [ "domain", "regexp", "url", "url-prefix" ], documentTypes = keySet(documentTypes_); var mediaTypes_ = [ "all", "aural", "braille", "handheld", "print", "projection", "screen", "tty", "tv", "embossed" ], mediaTypes = keySet(mediaTypes_); var mediaFeatures_ = [ "width", "min-width", "max-width", "height", "min-height", "max-height", "device-width", "min-device-width", "max-device-width", "device-height", "min-device-height", "max-device-height", "aspect-ratio", "min-aspect-ratio", "max-aspect-ratio", "device-aspect-ratio", "min-device-aspect-ratio", "max-device-aspect-ratio", "color", "min-color", "max-color", "color-index", "min-color-index", "max-color-index", "monochrome", "min-monochrome", "max-monochrome", "resolution", "min-resolution", "max-resolution", "scan", "grid" ], mediaFeatures = keySet(mediaFeatures_); var propertyKeywords_ = [ "align-content", "align-items", "align-self", "alignment-adjust", "alignment-baseline", "anchor-point", "animation", "animation-delay", "animation-direction", "animation-duration", "animation-fill-mode", "animation-iteration-count", "animation-name", "animation-play-state", "animation-timing-function", "appearance", "azimuth", "backface-visibility", "background", "background-attachment", "background-clip", "background-color", "background-image", "background-origin", "background-position", "background-repeat", "background-size", "baseline-shift", "binding", "bleed", "bookmark-label", "bookmark-level", "bookmark-state", "bookmark-target", "border", "border-bottom", "border-bottom-color", "border-bottom-left-radius", "border-bottom-right-radius", "border-bottom-style", "border-bottom-width", "border-collapse", "border-color", "border-image", "border-image-outset", "border-image-repeat", "border-image-slice", "border-image-source", "border-image-width", "border-left", "border-left-color", "border-left-style", "border-left-width", "border-radius", "border-right", "border-right-color", "border-right-style", "border-right-width", "border-spacing", "border-style", "border-top", "border-top-color", "border-top-left-radius", "border-top-right-radius", "border-top-style", "border-top-width", "border-width", "bottom", "box-decoration-break", "box-shadow", "box-sizing", "break-after", "break-before", "break-inside", "caption-side", "clear", "clip", "color", "color-profile", "column-count", "column-fill", "column-gap", "column-rule", "column-rule-color", "column-rule-style", "column-rule-width", "column-span", "column-width", "columns", "content", "counter-increment", "counter-reset", "crop", "cue", "cue-after", "cue-before", "cursor", "direction", "display", "dominant-baseline", "drop-initial-after-adjust", "drop-initial-after-align", "drop-initial-before-adjust", "drop-initial-before-align", "drop-initial-size", "drop-initial-value", "elevation", "empty-cells", "fit", "fit-position", "flex", "flex-basis", "flex-direction", "flex-flow", "flex-grow", "flex-shrink", "flex-wrap", "float", "float-offset", "flow-from", "flow-into", "font", "font-feature-settings", "font-family", "font-kerning", "font-language-override", "font-size", "font-size-adjust", "font-stretch", "font-style", "font-synthesis", "font-variant", "font-variant-alternates", "font-variant-caps", "font-variant-east-asian", "font-variant-ligatures", "font-variant-numeric", "font-variant-position", "font-weight", "grid", "grid-area", "grid-auto-columns", "grid-auto-flow", "grid-auto-position", "grid-auto-rows", "grid-column", "grid-column-end", "grid-column-start", "grid-row", "grid-row-end", "grid-row-start", "grid-template", "grid-template-areas", "grid-template-columns", "grid-template-rows", "hanging-punctuation", "height", "hyphens", "icon", "image-orientation", "image-rendering", "image-resolution", "inline-box-align", "justify-content", "left", "letter-spacing", "line-break", "line-height", "line-stacking", "line-stacking-ruby", "line-stacking-shift", "line-stacking-strategy", "list-style", "list-style-image", "list-style-position", "list-style-type", "margin", "margin-bottom", "margin-left", "margin-right", "margin-top", "marker-offset", "marks", "marquee-direction", "marquee-loop", "marquee-play-count", "marquee-speed", "marquee-style", "max-height", "max-width", "min-height", "min-width", "move-to", "nav-down", "nav-index", "nav-left", "nav-right", "nav-up", "object-fit", "object-position", "opacity", "order", "orphans", "outline", "outline-color", "outline-offset", "outline-style", "outline-width", "overflow", "overflow-style", "overflow-wrap", "overflow-x", "overflow-y", "padding", "padding-bottom", "padding-left", "padding-right", "padding-top", "page", "page-break-after", "page-break-before", "page-break-inside", "page-policy", "pause", "pause-after", "pause-before", "perspective", "perspective-origin", "pitch", "pitch-range", "play-during", "position", "presentation-level", "punctuation-trim", "quotes", "region-break-after", "region-break-before", "region-break-inside", "region-fragment", "rendering-intent", "resize", "rest", "rest-after", "rest-before", "richness", "right", "rotation", "rotation-point", "ruby-align", "ruby-overhang", "ruby-position", "ruby-span", "shape-image-threshold", "shape-inside", "shape-margin", "shape-outside", "size", "speak", "speak-as", "speak-header", "speak-numeral", "speak-punctuation", "speech-rate", "stress", "string-set", "tab-size", "table-layout", "target", "target-name", "target-new", "target-position", "text-align", "text-align-last", "text-decoration", "text-decoration-color", "text-decoration-line", "text-decoration-skip", "text-decoration-style", "text-emphasis", "text-emphasis-color", "text-emphasis-position", "text-emphasis-style", "text-height", "text-indent", "text-justify", "text-outline", "text-overflow", "text-shadow", "text-size-adjust", "text-space-collapse", "text-transform", "text-underline-position", "text-wrap", "top", "transform", "transform-origin", "transform-style", "transition", "transition-delay", "transition-duration", "transition-property", "transition-timing-function", "unicode-bidi", "vertical-align", "visibility", "voice-balance", "voice-duration", "voice-family", "voice-pitch", "voice-range", "voice-rate", "voice-stress", "voice-volume", "volume", "white-space", "widows", "width", "word-break", "word-spacing", "word-wrap", "z-index", // SVG-specific "clip-path", "clip-rule", "mask", "enable-background", "filter", "flood-color", "flood-opacity", "lighting-color", "stop-color", "stop-opacity", "pointer-events", "color-interpolation", "color-interpolation-filters", "color-rendering", "fill", "fill-opacity", "fill-rule", "image-rendering", "marker", "marker-end", "marker-mid", "marker-start", "shape-rendering", "stroke", "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", "stroke-miterlimit", "stroke-opacity", "stroke-width", "text-rendering", "baseline-shift", "dominant-baseline", "glyph-orientation-horizontal", "glyph-orientation-vertical", "text-anchor", "writing-mode" ], propertyKeywords = keySet(propertyKeywords_); var nonStandardPropertyKeywords_ = [ "scrollbar-arrow-color", "scrollbar-base-color", "scrollbar-dark-shadow-color", "scrollbar-face-color", "scrollbar-highlight-color", "scrollbar-shadow-color", "scrollbar-3d-light-color", "scrollbar-track-color", "shape-inside", "searchfield-cancel-button", "searchfield-decoration", "searchfield-results-button", "searchfield-results-decoration", "zoom" ], nonStandardPropertyKeywords = keySet(nonStandardPropertyKeywords_); var fontProperties_ = [ "font-family", "src", "unicode-range", "font-variant", "font-feature-settings", "font-stretch", "font-weight", "font-style" ], fontProperties = keySet(fontProperties_); var counterDescriptors_ = [ "additive-symbols", "fallback", "negative", "pad", "prefix", "range", "speak-as", "suffix", "symbols", "system" ], counterDescriptors = keySet(counterDescriptors_); var colorKeywords_ = [ "aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige", "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown", "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", "cornsilk", "crimson", "cyan", "darkblue", "darkcyan", "darkgoldenrod", "darkgray", "darkgreen", "darkkhaki", "darkmagenta", "darkolivegreen", "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", "darkslateblue", "darkslategray", "darkturquoise", "darkviolet", "deeppink", "deepskyblue", "dimgray", "dodgerblue", "firebrick", "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite", "gold", "goldenrod", "gray", "grey", "green", "greenyellow", "honeydew", "hotpink", "indianred", "indigo", "ivory", "khaki", "lavender", "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightpink", "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta", "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise", "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin", "navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered", "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred", "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", "purple", "rebeccapurple", "red", "rosybrown", "royalblue", "saddlebrown", "salmon", "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue", "slateblue", "slategray", "snow", "springgreen", "steelblue", "tan", "teal", "thistle", "tomato", "turquoise", "violet", "wheat", "white", "whitesmoke", "yellow", "yellowgreen" ], colorKeywords = keySet(colorKeywords_); var valueKeywords_ = [ "above", "absolute", "activeborder", "additive", "activecaption", "afar", "after-white-space", "ahead", "alias", "all", "all-scroll", "alphabetic", "alternate", "always", "amharic", "amharic-abegede", "antialiased", "appworkspace", "arabic-indic", "armenian", "asterisks", "attr", "auto", "avoid", "avoid-column", "avoid-page", "avoid-region", "background", "backwards", "baseline", "below", "bidi-override", "binary", "bengali", "blink", "block", "block-axis", "bold", "bolder", "border", "border-box", "both", "bottom", "break", "break-all", "break-word", "bullets", "button", "button-bevel", "buttonface", "buttonhighlight", "buttonshadow", "buttontext", "calc", "cambodian", "capitalize", "caps-lock-indicator", "caption", "captiontext", "caret", "cell", "center", "checkbox", "circle", "cjk-decimal", "cjk-earthly-branch", "cjk-heavenly-stem", "cjk-ideographic", "clear", "clip", "close-quote", "col-resize", "collapse", "column", "compact", "condensed", "contain", "content", "content-box", "context-menu", "continuous", "copy", "counter", "counters", "cover", "crop", "cross", "crosshair", "currentcolor", "cursive", "cyclic", "dashed", "decimal", "decimal-leading-zero", "default", "default-button", "destination-atop", "destination-in", "destination-out", "destination-over", "devanagari", "disc", "discard", "disclosure-closed", "disclosure-open", "document", "dot-dash", "dot-dot-dash", "dotted", "double", "down", "e-resize", "ease", "ease-in", "ease-in-out", "ease-out", "element", "ellipse", "ellipsis", "embed", "end", "ethiopic", "ethiopic-abegede", "ethiopic-abegede-am-et", "ethiopic-abegede-gez", "ethiopic-abegede-ti-er", "ethiopic-abegede-ti-et", "ethiopic-halehame-aa-er", "ethiopic-halehame-aa-et", "ethiopic-halehame-am-et", "ethiopic-halehame-gez", "ethiopic-halehame-om-et", "ethiopic-halehame-sid-et", "ethiopic-halehame-so-et", "ethiopic-halehame-ti-er", "ethiopic-halehame-ti-et", "ethiopic-halehame-tig", "ethiopic-numeric", "ew-resize", "expanded", "extends", "extra-condensed", "extra-expanded", "fantasy", "fast", "fill", "fixed", "flat", "flex", "footnotes", "forwards", "from", "geometricPrecision", "georgian", "graytext", "groove", "gujarati", "gurmukhi", "hand", "hangul", "hangul-consonant", "hebrew", "help", "hidden", "hide", "higher", "highlight", "highlighttext", "hiragana", "hiragana-iroha", "horizontal", "hsl", "hsla", "icon", "ignore", "inactiveborder", "inactivecaption", "inactivecaptiontext", "infinite", "infobackground", "infotext", "inherit", "initial", "inline", "inline-axis", "inline-block", "inline-flex", "inline-table", "inset", "inside", "intrinsic", "invert", "italic", "japanese-formal", "japanese-informal", "justify", "kannada", "katakana", "katakana-iroha", "keep-all", "khmer", "korean-hangul-formal", "korean-hanja-formal", "korean-hanja-informal", "landscape", "lao", "large", "larger", "left", "level", "lighter", "line-through", "linear", "linear-gradient", "lines", "list-item", "listbox", "listitem", "local", "logical", "loud", "lower", "lower-alpha", "lower-armenian", "lower-greek", "lower-hexadecimal", "lower-latin", "lower-norwegian", "lower-roman", "lowercase", "ltr", "malayalam", "match", "matrix", "matrix3d", "media-controls-background", "media-current-time-display", "media-fullscreen-button", "media-mute-button", "media-play-button", "media-return-to-realtime-button", "media-rewind-button", "media-seek-back-button", "media-seek-forward-button", "media-slider", "media-sliderthumb", "media-time-remaining-display", "media-volume-slider", "media-volume-slider-container", "media-volume-sliderthumb", "medium", "menu", "menulist", "menulist-button", "menulist-text", "menulist-textfield", "menutext", "message-box", "middle", "min-intrinsic", "mix", "mongolian", "monospace", "move", "multiple", "myanmar", "n-resize", "narrower", "ne-resize", "nesw-resize", "no-close-quote", "no-drop", "no-open-quote", "no-repeat", "none", "normal", "not-allowed", "nowrap", "ns-resize", "numbers", "numeric", "nw-resize", "nwse-resize", "oblique", "octal", "open-quote", "optimizeLegibility", "optimizeSpeed", "oriya", "oromo", "outset", "outside", "outside-shape", "overlay", "overline", "padding", "padding-box", "painted", "page", "paused", "persian", "perspective", "plus-darker", "plus-lighter", "pointer", "polygon", "portrait", "pre", "pre-line", "pre-wrap", "preserve-3d", "progress", "push-button", "radial-gradient", "radio", "read-only", "read-write", "read-write-plaintext-only", "rectangle", "region", "relative", "repeat", "repeating-linear-gradient", "repeating-radial-gradient", "repeat-x", "repeat-y", "reset", "reverse", "rgb", "rgba", "ridge", "right", "rotate", "rotate3d", "rotateX", "rotateY", "rotateZ", "round", "row-resize", "rtl", "run-in", "running", "s-resize", "sans-serif", "scale", "scale3d", "scaleX", "scaleY", "scaleZ", "scroll", "scrollbar", "se-resize", "searchfield", "searchfield-cancel-button", "searchfield-decoration", "searchfield-results-button", "searchfield-results-decoration", "semi-condensed", "semi-expanded", "separate", "serif", "show", "sidama", "simp-chinese-formal", "simp-chinese-informal", "single", "skew", "skewX", "skewY", "skip-white-space", "slide", "slider-horizontal", "slider-vertical", "sliderthumb-horizontal", "sliderthumb-vertical", "slow", "small", "small-caps", "small-caption", "smaller", "solid", "somali", "source-atop", "source-in", "source-out", "source-over", "space", "spell-out", "square", "square-button", "start", "static", "status-bar", "stretch", "stroke", "sub", "subpixel-antialiased", "super", "sw-resize", "symbolic", "symbols", "table", "table-caption", "table-cell", "table-column", "table-column-group", "table-footer-group", "table-header-group", "table-row", "table-row-group", "tamil", "telugu", "text", "text-bottom", "text-top", "textarea", "textfield", "thai", "thick", "thin", "threeddarkshadow", "threedface", "threedhighlight", "threedlightshadow", "threedshadow", "tibetan", "tigre", "tigrinya-er", "tigrinya-er-abegede", "tigrinya-et", "tigrinya-et-abegede", "to", "top", "trad-chinese-formal", "trad-chinese-informal", "translate", "translate3d", "translateX", "translateY", "translateZ", "transparent", "ultra-condensed", "ultra-expanded", "underline", "up", "upper-alpha", "upper-armenian", "upper-greek", "upper-hexadecimal", "upper-latin", "upper-norwegian", "upper-roman", "uppercase", "urdu", "url", "var", "vertical", "vertical-text", "visible", "visibleFill", "visiblePainted", "visibleStroke", "visual", "w-resize", "wait", "wave", "wider", "window", "windowframe", "windowtext", "words", "x-large", "x-small", "xor", "xx-large", "xx-small" ], valueKeywords = keySet(valueKeywords_); var allWords = documentTypes_.concat(mediaTypes_).concat(mediaFeatures_).concat(propertyKeywords_) .concat(nonStandardPropertyKeywords_).concat(colorKeywords_).concat(valueKeywords_); CodeMirror.registerHelper("hintWords", "css", allWords); function tokenCComment(stream, state) { var maybeEnd = false, ch; while ((ch = stream.next()) != null) { if (maybeEnd && ch == "/") { state.tokenize = null; break; } maybeEnd = (ch == "*"); } return ["comment", "comment"]; } function tokenSGMLComment(stream, state) { if (stream.skipTo("-->")) { stream.match("-->"); state.tokenize = null; } else { stream.skipToEnd(); } return ["comment", "comment"]; } CodeMirror.defineMIME("text/css", { documentTypes: documentTypes, mediaTypes: mediaTypes, mediaFeatures: mediaFeatures, propertyKeywords: propertyKeywords, nonStandardPropertyKeywords: nonStandardPropertyKeywords, fontProperties: fontProperties, counterDescriptors: counterDescriptors, colorKeywords: colorKeywords, valueKeywords: valueKeywords, tokenHooks: { "<": function(stream, state) { if (!stream.match("!--")) return false; state.tokenize = tokenSGMLComment; return tokenSGMLComment(stream, state); }, "/": function(stream, state) { if (!stream.eat("*")) return false; state.tokenize = tokenCComment; return tokenCComment(stream, state); } }, name: "css" }); CodeMirror.defineMIME("text/x-scss", { mediaTypes: mediaTypes, mediaFeatures: mediaFeatures, propertyKeywords: propertyKeywords, nonStandardPropertyKeywords: nonStandardPropertyKeywords, colorKeywords: colorKeywords, valueKeywords: valueKeywords, fontProperties: fontProperties, allowNested: true, tokenHooks: { "/": function(stream, state) { if (stream.eat("/")) { stream.skipToEnd(); return ["comment", "comment"]; } else if (stream.eat("*")) { state.tokenize = tokenCComment; return tokenCComment(stream, state); } else { return ["operator", "operator"]; } }, ":": function(stream) { if (stream.match(/\s*\{/)) return [null, "{"]; return false; }, "$": function(stream) { stream.match(/^[\w-]+/); if (stream.match(/^\s*:/, false)) return ["variable-2", "variable-definition"]; return ["variable-2", "variable"]; }, "#": function(stream) { if (!stream.eat("{")) return false; return [null, "interpolation"]; } }, name: "css", helperType: "scss" }); CodeMirror.defineMIME("text/x-less", { mediaTypes: mediaTypes, mediaFeatures: mediaFeatures, propertyKeywords: propertyKeywords, nonStandardPropertyKeywords: nonStandardPropertyKeywords, colorKeywords: colorKeywords, valueKeywords: valueKeywords, fontProperties: fontProperties, allowNested: true, tokenHooks: { "/": function(stream, state) { if (stream.eat("/")) { stream.skipToEnd(); return ["comment", "comment"]; } else if (stream.eat("*")) { state.tokenize = tokenCComment; return tokenCComment(stream, state); } else { return ["operator", "operator"]; } }, "@": function(stream) { if (stream.match(/^(charset|document|font-face|import|(-(moz|ms|o|webkit)-)?keyframes|media|namespace|page|supports)\b/, false)) return false; stream.eatWhile(/[\w\\\-]/); if (stream.match(/^\s*:/, false)) return ["variable-2", "variable-definition"]; return ["variable-2", "variable"]; }, "&": function() { return ["atom", "atom"]; } }, name: "css", helperType: "less" }); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/css/index.html ================================================ CodeMirror: CSS mode

                  CSS mode

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

                  Parsing/Highlighting Tests: normal, verbose.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/css/less.html ================================================ CodeMirror: LESS mode

                  LESS mode

                  The LESS mode is a sub-mode of the CSS mode (defined in css.js.

                  Parsing/Highlighting Tests: normal, verbose.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/css/less_test.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function() { "use strict"; var mode = CodeMirror.getMode({indentUnit: 2}, "text/x-less"); function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1), "less"); } MT("variable", "[variable-2 @base]: [atom #f04615];", "[qualifier .class] {", " [property width]: [variable percentage]([number 0.5]); [comment // returns `50%`]", " [property color]: [variable saturate]([variable-2 @base], [number 5%]);", "}"); MT("amp", "[qualifier .child], [qualifier .sibling] {", " [qualifier .parent] [atom &] {", " [property color]: [keyword black];", " }", " [atom &] + [atom &] {", " [property color]: [keyword red];", " }", "}"); MT("mixin", "[qualifier .mixin] ([variable dark]; [variable-2 @color]) {", " [property color]: [variable darken]([variable-2 @color], [number 10%]);", "}", "[qualifier .mixin] ([variable light]; [variable-2 @color]) {", " [property color]: [variable lighten]([variable-2 @color], [number 10%]);", "}", "[qualifier .mixin] ([variable-2 @_]; [variable-2 @color]) {", " [property display]: [atom block];", "}", "[variable-2 @switch]: [variable light];", "[qualifier .class] {", " [qualifier .mixin]([variable-2 @switch]; [atom #888]);", "}"); MT("nest", "[qualifier .one] {", " [def @media] ([property width]: [number 400px]) {", " [property font-size]: [number 1.2em];", " [def @media] [attribute print] [keyword and] [property color] {", " [property color]: [keyword blue];", " }", " }", "}"); })(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/css/scss.html ================================================ CodeMirror: SCSS mode

                  SCSS mode

                  The SCSS mode is a sub-mode of the CSS mode (defined in css.js.

                  Parsing/Highlighting Tests: normal, verbose.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/css/scss_test.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function() { var mode = CodeMirror.getMode({indentUnit: 2}, "text/x-scss"); function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1), "scss"); } MT('url_with_quotation', "[tag foo] { [property background]:[atom url]([string test.jpg]) }"); MT('url_with_double_quotes', "[tag foo] { [property background]:[atom url]([string \"test.jpg\"]) }"); MT('url_with_single_quotes', "[tag foo] { [property background]:[atom url]([string \'test.jpg\']) }"); MT('string', "[def @import] [string \"compass/css3\"]"); MT('important_keyword', "[tag foo] { [property background]:[atom url]([string \'test.jpg\']) [keyword !important] }"); MT('variable', "[variable-2 $blue]:[atom #333]"); MT('variable_as_attribute', "[tag foo] { [property color]:[variable-2 $blue] }"); MT('numbers', "[tag foo] { [property padding]:[number 10px] [number 10] [number 10em] [number 8in] }"); MT('number_percentage', "[tag foo] { [property width]:[number 80%] }"); MT('selector', "[builtin #hello][qualifier .world]{}"); MT('singleline_comment', "[comment // this is a comment]"); MT('multiline_comment', "[comment /*foobar*/]"); MT('attribute_with_hyphen', "[tag foo] { [property font-size]:[number 10px] }"); MT('string_after_attribute', "[tag foo] { [property content]:[string \"::\"] }"); MT('directives', "[def @include] [qualifier .mixin]"); MT('basic_structure', "[tag p] { [property background]:[keyword red]; }"); MT('nested_structure', "[tag p] { [tag a] { [property color]:[keyword red]; } }"); MT('mixin', "[def @mixin] [tag table-base] {}"); MT('number_without_semicolon', "[tag p] {[property width]:[number 12]}", "[tag a] {[property color]:[keyword red];}"); MT('atom_in_nested_block', "[tag p] { [tag a] { [property color]:[atom #000]; } }"); MT('interpolation_in_property', "[tag foo] { #{[variable-2 $hello]}:[number 2]; }"); MT('interpolation_in_selector', "[tag foo]#{[variable-2 $hello]} { [property color]:[atom #000]; }"); MT('interpolation_error', "[tag foo]#{[error foo]} { [property color]:[atom #000]; }"); MT("divide_operator", "[tag foo] { [property width]:[number 4] [operator /] [number 2] }"); MT('nested_structure_with_id_selector', "[tag p] { [builtin #hello] { [property color]:[keyword red]; } }"); MT('indent_mixin', "[def @mixin] [tag container] (", " [variable-2 $a]: [number 10],", " [variable-2 $b]: [number 10])", "{}"); MT('indent_nested', "[tag foo] {", " [tag bar] {", " }", "}"); MT('indent_parentheses', "[tag foo] {", " [property color]: [variable darken]([variable-2 $blue],", " [number 9%]);", "}"); MT('indent_vardef', "[variable-2 $name]:", " [string 'val'];", "[tag tag] {", " [tag inner] {", " [property margin]: [number 3px];", " }", "}"); })(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/css/test.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function() { var mode = CodeMirror.getMode({indentUnit: 2}, "css"); function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } // Error, because "foobarhello" is neither a known type or property, but // property was expected (after "and"), and it should be in parenthese. MT("atMediaUnknownType", "[def @media] [attribute screen] [keyword and] [error foobarhello] { }"); // Soft error, because "foobarhello" is not a known property or type. MT("atMediaUnknownProperty", "[def @media] [attribute screen] [keyword and] ([error foobarhello]) { }"); // Make sure nesting works with media queries MT("atMediaMaxWidthNested", "[def @media] [attribute screen] [keyword and] ([property max-width]: [number 25px]) { [tag foo] { } }"); MT("tagSelector", "[tag foo] { }"); MT("classSelector", "[qualifier .foo-bar_hello] { }"); MT("idSelector", "[builtin #foo] { [error #foo] }"); MT("tagSelectorUnclosed", "[tag foo] { [property margin]: [number 0] } [tag bar] { }"); MT("tagStringNoQuotes", "[tag foo] { [property font-family]: [variable hello] [variable world]; }"); MT("tagStringDouble", "[tag foo] { [property font-family]: [string \"hello world\"]; }"); MT("tagStringSingle", "[tag foo] { [property font-family]: [string 'hello world']; }"); MT("tagColorKeyword", "[tag foo] {", " [property color]: [keyword black];", " [property color]: [keyword navy];", " [property color]: [keyword yellow];", "}"); MT("tagColorHex3", "[tag foo] { [property background]: [atom #fff]; }"); MT("tagColorHex6", "[tag foo] { [property background]: [atom #ffffff]; }"); MT("tagColorHex4", "[tag foo] { [property background]: [atom&error #ffff]; }"); MT("tagColorHexInvalid", "[tag foo] { [property background]: [atom&error #ffg]; }"); MT("tagNegativeNumber", "[tag foo] { [property margin]: [number -5px]; }"); MT("tagPositiveNumber", "[tag foo] { [property padding]: [number 5px]; }"); MT("tagVendor", "[tag foo] { [meta -foo-][property box-sizing]: [meta -foo-][atom border-box]; }"); MT("tagBogusProperty", "[tag foo] { [property&error barhelloworld]: [number 0]; }"); MT("tagTwoProperties", "[tag foo] { [property margin]: [number 0]; [property padding]: [number 0]; }"); MT("tagTwoPropertiesURL", "[tag foo] { [property background]: [atom url]([string //example.com/foo.png]); [property padding]: [number 0]; }"); MT("commentSGML", "[comment ]"); MT("commentSGML2", "[comment ] [tag div] {}"); MT("indent_tagSelector", "[tag strong], [tag em] {", " [property background]: [atom rgba](", " [number 255], [number 255], [number 0], [number .2]", " );", "}"); MT("indent_atMedia", "[def @media] {", " [tag foo] {", " [property color]:", " [keyword yellow];", " }", "}"); MT("indent_comma", "[tag foo] {", " [property font-family]: [variable verdana],", " [atom sans-serif];", "}"); MT("indent_parentheses", "[tag foo]:[variable-3 before] {", " [property background]: [atom url](", "[string blahblah]", "[string etc]", "[string ]) [keyword !important];", "}"); MT("font_face", "[def @font-face] {", " [property font-family]: [string 'myfont'];", " [error nonsense]: [string 'abc'];", " [property src]: [atom url]([string http://blah]),", " [atom url]([string http://foo]);", "}"); MT("empty_url", "[def @import] [tag url]() [tag screen];"); MT("parens", "[qualifier .foo] {", " [property background-image]: [variable fade]([atom #000], [number 20%]);", " [property border-image]: [atom linear-gradient](", " [atom to] [atom bottom],", " [variable fade]([atom #000], [number 20%]) [number 0%],", " [variable fade]([atom #000], [number 20%]) [number 100%]", " );", "}"); MT("css_variable", ":[variable-3 root] {", " [variable-2 --main-color]: [atom #06c];", "}", "[tag h1][builtin #foo] {", " [property color]: [atom var]([variable-2 --main-color]);", "}"); MT("supports", "[def @supports] ([keyword not] (([property text-align-last]: [atom justify]) [keyword or] ([meta -moz-][property text-align-last]: [atom justify])) {", " [property text-align-last]: [atom justify];", "}"); MT("document", "[def @document] [tag url]([string http://blah]),", " [tag url-prefix]([string https://]),", " [tag domain]([string blah.com]),", " [tag regexp]([string \".*blah.+\"]) {", " [builtin #id] {", " [property background-color]: [keyword white];", " }", " [tag foo] {", " [property font-family]: [variable Verdana], [atom sans-serif];", " }", " }"); MT("document_url", "[def @document] [tag url]([string http://blah]) { [qualifier .class] { } }"); MT("document_urlPrefix", "[def @document] [tag url-prefix]([string https://]) { [builtin #id] { } }"); MT("document_domain", "[def @document] [tag domain]([string blah.com]) { [tag foo] { } }"); MT("document_regexp", "[def @document] [tag regexp]([string \".*blah.+\"]) { [builtin #id] { } }"); MT("counter-style", "[def @counter-style] [variable binary] {", " [property system]: [atom numeric];", " [property symbols]: [number 0] [number 1];", " [property suffix]: [string \".\"];", " [property range]: [atom infinite];", " [property speak-as]: [atom numeric];", "}"); MT("counter-style-additive-symbols", "[def @counter-style] [variable simple-roman] {", " [property system]: [atom additive];", " [property additive-symbols]: [number 10] [variable X], [number 5] [variable V], [number 1] [variable I];", " [property range]: [number 1] [number 49];", "}"); MT("counter-style-use", "[tag ol][qualifier .roman] { [property list-style]: [variable simple-roman]; }"); MT("counter-style-symbols", "[tag ol] { [property list-style]: [atom symbols]([atom cyclic] [string \"*\"] [string \"\\2020\"] [string \"\\2021\"] [string \"\\A7\"]); }"); })(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/cypher/cypher.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE // By the Neo4j Team and contributors. // https://github.com/neo4j-contrib/CodeMirror (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; var wordRegexp = function(words) { return new RegExp("^(?:" + words.join("|") + ")$", "i"); }; CodeMirror.defineMode("cypher", function(config) { var tokenBase = function(stream/*, state*/) { var ch = stream.next(), curPunc = null; if (ch === "\"" || ch === "'") { stream.match(/.+?["']/); return "string"; } if (/[{}\(\),\.;\[\]]/.test(ch)) { curPunc = ch; return "node"; } else if (ch === "/" && stream.eat("/")) { stream.skipToEnd(); return "comment"; } else if (operatorChars.test(ch)) { stream.eatWhile(operatorChars); return null; } else { stream.eatWhile(/[_\w\d]/); if (stream.eat(":")) { stream.eatWhile(/[\w\d_\-]/); return "atom"; } var word = stream.current(); if (funcs.test(word)) return "builtin"; if (preds.test(word)) return "def"; if (keywords.test(word)) return "keyword"; return "variable"; } }; var pushContext = function(state, type, col) { return state.context = { prev: state.context, indent: state.indent, col: col, type: type }; }; var popContext = function(state) { state.indent = state.context.indent; return state.context = state.context.prev; }; var indentUnit = config.indentUnit; var curPunc; var funcs = wordRegexp(["abs", "acos", "allShortestPaths", "asin", "atan", "atan2", "avg", "ceil", "coalesce", "collect", "cos", "cot", "count", "degrees", "e", "endnode", "exp", "extract", "filter", "floor", "haversin", "head", "id", "keys", "labels", "last", "left", "length", "log", "log10", "lower", "ltrim", "max", "min", "node", "nodes", "percentileCont", "percentileDisc", "pi", "radians", "rand", "range", "reduce", "rel", "relationship", "relationships", "replace", "right", "round", "rtrim", "shortestPath", "sign", "sin", "split", "sqrt", "startnode", "stdev", "stdevp", "str", "substring", "sum", "tail", "tan", "timestamp", "toFloat", "toInt", "trim", "type", "upper"]); var preds = wordRegexp(["all", "and", "any", "has", "in", "none", "not", "or", "single", "xor"]); var keywords = wordRegexp(["as", "asc", "ascending", "assert", "by", "case", "commit", "constraint", "create", "csv", "cypher", "delete", "desc", "descending", "distinct", "drop", "else", "end", "explain", "false", "fieldterminator", "foreach", "from", "headers", "in", "index", "is", "limit", "load", "match", "merge", "null", "on", "optional", "order", "periodic", "profile", "remove", "return", "scan", "set", "skip", "start", "then", "true", "union", "unique", "unwind", "using", "when", "where", "with"]); var operatorChars = /[*+\-<>=&|~%^]/; return { startState: function(/*base*/) { return { tokenize: tokenBase, context: null, indent: 0, col: 0 }; }, token: function(stream, state) { if (stream.sol()) { if (state.context && (state.context.align == null)) { state.context.align = false; } state.indent = stream.indentation(); } if (stream.eatSpace()) { return null; } var style = state.tokenize(stream, state); if (style !== "comment" && state.context && (state.context.align == null) && state.context.type !== "pattern") { state.context.align = true; } if (curPunc === "(") { pushContext(state, ")", stream.column()); } else if (curPunc === "[") { pushContext(state, "]", stream.column()); } else if (curPunc === "{") { pushContext(state, "}", stream.column()); } else if (/[\]\}\)]/.test(curPunc)) { while (state.context && state.context.type === "pattern") { popContext(state); } if (state.context && curPunc === state.context.type) { popContext(state); } } else if (curPunc === "." && state.context && state.context.type === "pattern") { popContext(state); } else if (/atom|string|variable/.test(style) && state.context) { if (/[\}\]]/.test(state.context.type)) { pushContext(state, "pattern", stream.column()); } else if (state.context.type === "pattern" && !state.context.align) { state.context.align = true; state.context.col = stream.column(); } } return style; }, indent: function(state, textAfter) { var firstChar = textAfter && textAfter.charAt(0); var context = state.context; if (/[\]\}]/.test(firstChar)) { while (context && context.type === "pattern") { context = context.prev; } } var closing = context && firstChar === context.type; if (!context) return 0; if (context.type === "keywords") return CodeMirror.commands.newlineAndIndent; if (context.align) return context.col + (closing ? 0 : 1); return context.indent + (closing ? 0 : indentUnit); } }; }); CodeMirror.modeExtensions["cypher"] = { autoFormatLineBreaks: function(text) { var i, lines, reProcessedPortion; var lines = text.split("\n"); var reProcessedPortion = /\s+\b(return|where|order by|match|with|skip|limit|create|delete|set)\b\s/g; for (var i = 0; i < lines.length; i++) lines[i] = lines[i].replace(reProcessedPortion, " \n$1 ").trim(); return lines.join("\n"); } }; CodeMirror.defineMIME("application/x-cypher-query", "cypher"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/cypher/index.html ================================================ CodeMirror: Cypher Mode for CodeMirror

                  Cypher Mode for CodeMirror

                  MIME types defined: application/x-cypher-query

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/d/d.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("d", function(config, parserConfig) { var indentUnit = config.indentUnit, statementIndentUnit = parserConfig.statementIndentUnit || indentUnit, keywords = parserConfig.keywords || {}, builtin = parserConfig.builtin || {}, blockKeywords = parserConfig.blockKeywords || {}, atoms = parserConfig.atoms || {}, hooks = parserConfig.hooks || {}, multiLineStrings = parserConfig.multiLineStrings; var isOperatorChar = /[+\-*&%=<>!?|\/]/; var curPunc; function tokenBase(stream, state) { var ch = stream.next(); if (hooks[ch]) { var result = hooks[ch](stream, state); if (result !== false) return result; } if (ch == '"' || ch == "'" || ch == "`") { state.tokenize = tokenString(ch); return state.tokenize(stream, state); } if (/[\[\]{}\(\),;\:\.]/.test(ch)) { curPunc = ch; return null; } if (/\d/.test(ch)) { stream.eatWhile(/[\w\.]/); return "number"; } if (ch == "/") { if (stream.eat("+")) { state.tokenize = tokenComment; return tokenNestedComment(stream, state); } if (stream.eat("*")) { state.tokenize = tokenComment; return tokenComment(stream, state); } if (stream.eat("/")) { stream.skipToEnd(); return "comment"; } } if (isOperatorChar.test(ch)) { stream.eatWhile(isOperatorChar); return "operator"; } stream.eatWhile(/[\w\$_\xa1-\uffff]/); var cur = stream.current(); if (keywords.propertyIsEnumerable(cur)) { if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; return "keyword"; } if (builtin.propertyIsEnumerable(cur)) { if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; return "builtin"; } if (atoms.propertyIsEnumerable(cur)) return "atom"; return "variable"; } function tokenString(quote) { return function(stream, state) { var escaped = false, next, end = false; while ((next = stream.next()) != null) { if (next == quote && !escaped) {end = true; break;} escaped = !escaped && next == "\\"; } if (end || !(escaped || multiLineStrings)) state.tokenize = null; return "string"; }; } function tokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "/" && maybeEnd) { state.tokenize = null; break; } maybeEnd = (ch == "*"); } return "comment"; } function tokenNestedComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "/" && maybeEnd) { state.tokenize = null; break; } maybeEnd = (ch == "+"); } return "comment"; } function Context(indented, column, type, align, prev) { this.indented = indented; this.column = column; this.type = type; this.align = align; this.prev = prev; } function pushContext(state, col, type) { var indent = state.indented; if (state.context && state.context.type == "statement") indent = state.context.indented; return state.context = new Context(indent, col, type, null, state.context); } function popContext(state) { var t = state.context.type; if (t == ")" || t == "]" || t == "}") state.indented = state.context.indented; return state.context = state.context.prev; } // Interface return { startState: function(basecolumn) { return { tokenize: null, context: new Context((basecolumn || 0) - indentUnit, 0, "top", false), indented: 0, startOfLine: true }; }, token: function(stream, state) { var ctx = state.context; if (stream.sol()) { if (ctx.align == null) ctx.align = false; state.indented = stream.indentation(); state.startOfLine = true; } if (stream.eatSpace()) return null; curPunc = null; var style = (state.tokenize || tokenBase)(stream, state); if (style == "comment" || style == "meta") return style; if (ctx.align == null) ctx.align = true; if ((curPunc == ";" || curPunc == ":" || curPunc == ",") && ctx.type == "statement") popContext(state); else if (curPunc == "{") pushContext(state, stream.column(), "}"); else if (curPunc == "[") pushContext(state, stream.column(), "]"); else if (curPunc == "(") pushContext(state, stream.column(), ")"); else if (curPunc == "}") { while (ctx.type == "statement") ctx = popContext(state); if (ctx.type == "}") ctx = popContext(state); while (ctx.type == "statement") ctx = popContext(state); } else if (curPunc == ctx.type) popContext(state); else if (((ctx.type == "}" || ctx.type == "top") && curPunc != ';') || (ctx.type == "statement" && curPunc == "newstatement")) pushContext(state, stream.column(), "statement"); state.startOfLine = false; return style; }, indent: function(state, textAfter) { if (state.tokenize != tokenBase && state.tokenize != null) return CodeMirror.Pass; var ctx = state.context, firstChar = textAfter && textAfter.charAt(0); if (ctx.type == "statement" && firstChar == "}") ctx = ctx.prev; var closing = firstChar == ctx.type; if (ctx.type == "statement") return ctx.indented + (firstChar == "{" ? 0 : statementIndentUnit); else if (ctx.align) return ctx.column + (closing ? 0 : 1); else return ctx.indented + (closing ? 0 : indentUnit); }, electricChars: "{}" }; }); function words(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } var blockKeywords = "body catch class do else enum for foreach foreach_reverse if in interface mixin " + "out scope struct switch try union unittest version while with"; CodeMirror.defineMIME("text/x-d", { name: "d", keywords: words("abstract alias align asm assert auto break case cast cdouble cent cfloat const continue " + "debug default delegate delete deprecated export extern final finally function goto immutable " + "import inout invariant is lazy macro module new nothrow override package pragma private " + "protected public pure ref return shared short static super synchronized template this " + "throw typedef typeid typeof volatile __FILE__ __LINE__ __gshared __traits __vector __parameters " + blockKeywords), blockKeywords: words(blockKeywords), builtin: words("bool byte char creal dchar double float idouble ifloat int ireal long real short ubyte " + "ucent uint ulong ushort wchar wstring void size_t sizediff_t"), atoms: words("exit failure success true false null"), hooks: { "@": function(stream, _state) { stream.eatWhile(/[\w\$_]/); return "meta"; } } }); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/d/index.html ================================================ CodeMirror: D mode

                  D mode

                  Simple mode that handle D-Syntax (DLang Homepage).

                  MIME types defined: text/x-d .

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/dart/dart.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../clike/clike")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../clike/clike"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; var keywords = ("this super static final const abstract class extends external factory " + "implements get native operator set typedef with enum throw rethrow " + "assert break case continue default in return new deferred async await " + "try catch finally do else for if switch while import library export " + "part of show hide is").split(" "); var blockKeywords = "try catch finally do else for if switch while".split(" "); var atoms = "true false null".split(" "); var builtins = "void bool num int double dynamic var String".split(" "); function set(words) { var obj = {}; for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } CodeMirror.defineMIME("application/dart", { name: "clike", keywords: set(keywords), multiLineStrings: true, blockKeywords: set(blockKeywords), builtin: set(builtins), atoms: set(atoms), hooks: { "@": function(stream) { stream.eatWhile(/[\w\$_]/); return "meta"; } } }); CodeMirror.registerHelper("hintWords", "application/dart", keywords.concat(atoms).concat(builtins)); // This is needed to make loading through meta.js work. CodeMirror.defineMode("dart", function(conf) { return CodeMirror.getMode(conf, "application/dart"); }, "clike"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/dart/index.html ================================================ CodeMirror: Dart mode

                  Dart mode

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/diff/diff.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("diff", function() { var TOKEN_NAMES = { '+': 'positive', '-': 'negative', '@': 'meta' }; return { token: function(stream) { var tw_pos = stream.string.search(/[\t ]+?$/); if (!stream.sol() || tw_pos === 0) { stream.skipToEnd(); return ("error " + ( TOKEN_NAMES[stream.string.charAt(0)] || '')).replace(/ $/, ''); } var token_name = TOKEN_NAMES[stream.peek()] || stream.skipToEnd(); if (tw_pos === -1) { stream.skipToEnd(); } else { stream.pos = tw_pos; } return token_name; } }; }); CodeMirror.defineMIME("text/x-diff", "diff"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/diff/index.html ================================================ CodeMirror: Diff mode

                  Diff mode

                  MIME types defined: text/x-diff.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/django/django.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../htmlmixed/htmlmixed"), require("../../addon/mode/overlay")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../htmlmixed/htmlmixed", "../../addon/mode/overlay"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("django:inner", function() { var keywords = ["block", "endblock", "for", "endfor", "in", "true", "false", "loop", "none", "self", "super", "if", "endif", "as", "not", "and", "else", "import", "with", "endwith", "without", "context", "ifequal", "endifequal", "ifnotequal", "endifnotequal", "extends", "include", "load", "length", "comment", "endcomment", "empty"]; keywords = new RegExp("^((" + keywords.join(")|(") + "))\\b"); function tokenBase (stream, state) { stream.eatWhile(/[^\{]/); var ch = stream.next(); if (ch == "{") { if (ch = stream.eat(/\{|%|#/)) { state.tokenize = inTag(ch); return "tag"; } } } function inTag (close) { if (close == "{") { close = "}"; } return function (stream, state) { var ch = stream.next(); if ((ch == close) && stream.eat("}")) { state.tokenize = tokenBase; return "tag"; } if (stream.match(keywords)) { return "keyword"; } return close == "#" ? "comment" : "string"; }; } return { startState: function () { return {tokenize: tokenBase}; }, token: function (stream, state) { return state.tokenize(stream, state); } }; }); CodeMirror.defineMode("django", function(config) { var htmlBase = CodeMirror.getMode(config, "text/html"); var djangoInner = CodeMirror.getMode(config, "django:inner"); return CodeMirror.overlayMode(htmlBase, djangoInner); }); CodeMirror.defineMIME("text/x-django", "django"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/django/index.html ================================================ CodeMirror: Django template mode

                  Django template mode

                  Mode for HTML with embedded Django template markup.

                  MIME types defined: text/x-django

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/dockerfile/dockerfile.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../../addon/mode/simple")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../../addon/mode/simple"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; // Collect all Dockerfile directives var instructions = ["from", "maintainer", "run", "cmd", "expose", "env", "add", "copy", "entrypoint", "volume", "user", "workdir", "onbuild"], instructionRegex = "(" + instructions.join('|') + ")", instructionOnlyLine = new RegExp(instructionRegex + "\\s*$", "i"), instructionWithArguments = new RegExp(instructionRegex + "(\\s+)", "i"); CodeMirror.defineSimpleMode("dockerfile", { start: [ // Block comment: This is a line starting with a comment { regex: /#.*$/, token: "comment" }, // Highlight an instruction without any arguments (for convenience) { regex: instructionOnlyLine, token: "variable-2" }, // Highlight an instruction followed by arguments { regex: instructionWithArguments, token: ["variable-2", null], next: "arguments" }, { regex: /./, token: null } ], arguments: [ { // Line comment without instruction arguments is an error regex: /#.*$/, token: "error", next: "start" }, { regex: /[^#]+\\$/, token: null }, { // Match everything except for the inline comment regex: /[^#]+/, token: null, next: "start" }, { regex: /$/, token: null, next: "start" }, // Fail safe return to start { token: null, next: "start" } ] }); CodeMirror.defineMIME("text/x-dockerfile", "dockerfile"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/dockerfile/index.html ================================================ CodeMirror: Dockerfile mode

                  Dockerfile mode

                  Dockerfile syntax highlighting for CodeMirror. Depends on the simplemode addon.

                  MIME types defined: text/x-dockerfile

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/dtd/dtd.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE /* DTD mode Ported to CodeMirror by Peter Kroon Report bugs/issues here: https://github.com/codemirror/CodeMirror/issues GitHub: @peterkroon */ (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("dtd", function(config) { var indentUnit = config.indentUnit, type; function ret(style, tp) {type = tp; return style;} function tokenBase(stream, state) { var ch = stream.next(); if (ch == "<" && stream.eat("!") ) { if (stream.eatWhile(/[\-]/)) { state.tokenize = tokenSGMLComment; return tokenSGMLComment(stream, state); } else if (stream.eatWhile(/[\w]/)) return ret("keyword", "doindent"); } else if (ch == "<" && stream.eat("?")) { //xml declaration state.tokenize = inBlock("meta", "?>"); return ret("meta", ch); } else if (ch == "#" && stream.eatWhile(/[\w]/)) return ret("atom", "tag"); else if (ch == "|") return ret("keyword", "seperator"); else if (ch.match(/[\(\)\[\]\-\.,\+\?>]/)) return ret(null, ch);//if(ch === ">") return ret(null, "endtag"); else else if (ch.match(/[\[\]]/)) return ret("rule", ch); else if (ch == "\"" || ch == "'") { state.tokenize = tokenString(ch); return state.tokenize(stream, state); } else if (stream.eatWhile(/[a-zA-Z\?\+\d]/)) { var sc = stream.current(); if( sc.substr(sc.length-1,sc.length).match(/\?|\+/) !== null )stream.backUp(1); return ret("tag", "tag"); } else if (ch == "%" || ch == "*" ) return ret("number", "number"); else { stream.eatWhile(/[\w\\\-_%.{,]/); return ret(null, null); } } function tokenSGMLComment(stream, state) { var dashes = 0, ch; while ((ch = stream.next()) != null) { if (dashes >= 2 && ch == ">") { state.tokenize = tokenBase; break; } dashes = (ch == "-") ? dashes + 1 : 0; } return ret("comment", "comment"); } function tokenString(quote) { return function(stream, state) { var escaped = false, ch; while ((ch = stream.next()) != null) { if (ch == quote && !escaped) { state.tokenize = tokenBase; break; } escaped = !escaped && ch == "\\"; } return ret("string", "tag"); }; } function inBlock(style, terminator) { return function(stream, state) { while (!stream.eol()) { if (stream.match(terminator)) { state.tokenize = tokenBase; break; } stream.next(); } return style; }; } return { startState: function(base) { return {tokenize: tokenBase, baseIndent: base || 0, stack: []}; }, token: function(stream, state) { if (stream.eatSpace()) return null; var style = state.tokenize(stream, state); var context = state.stack[state.stack.length-1]; if (stream.current() == "[" || type === "doindent" || type == "[") state.stack.push("rule"); else if (type === "endtag") state.stack[state.stack.length-1] = "endtag"; else if (stream.current() == "]" || type == "]" || (type == ">" && context == "rule")) state.stack.pop(); else if (type == "[") state.stack.push("["); return style; }, indent: function(state, textAfter) { var n = state.stack.length; if( textAfter.match(/\]\s+|\]/) )n=n-1; else if(textAfter.substr(textAfter.length-1, textAfter.length) === ">"){ if(textAfter.substr(0,1) === "<")n; else if( type == "doindent" && textAfter.length > 1 )n; else if( type == "doindent")n--; else if( type == ">" && textAfter.length > 1)n; else if( type == "tag" && textAfter !== ">")n; else if( type == "tag" && state.stack[state.stack.length-1] == "rule")n--; else if( type == "tag")n++; else if( textAfter === ">" && state.stack[state.stack.length-1] == "rule" && type === ">")n--; else if( textAfter === ">" && state.stack[state.stack.length-1] == "rule")n; else if( textAfter.substr(0,1) !== "<" && textAfter.substr(0,1) === ">" )n=n-1; else if( textAfter === ">")n; else n=n-1; //over rule them all if(type == null || type == "]")n--; } return state.baseIndent + n * indentUnit; }, electricChars: "]>" }; }); CodeMirror.defineMIME("application/xml-dtd", "dtd"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/dtd/index.html ================================================ CodeMirror: DTD mode

                  DTD mode

                  MIME types defined: application/xml-dtd.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/dylan/dylan.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("dylan", function(_config) { // Words var words = { // Words that introduce unnamed definitions like "define interface" unnamedDefinition: ["interface"], // Words that introduce simple named definitions like "define library" namedDefinition: ["module", "library", "macro", "C-struct", "C-union", "C-function", "C-callable-wrapper" ], // Words that introduce type definitions like "define class". // These are also parameterized like "define method" and are // appended to otherParameterizedDefinitionWords typeParameterizedDefinition: ["class", "C-subtype", "C-mapped-subtype"], // Words that introduce trickier definitions like "define method". // These require special definitions to be added to startExpressions otherParameterizedDefinition: ["method", "function", "C-variable", "C-address" ], // Words that introduce module constant definitions. // These must also be simple definitions and are // appended to otherSimpleDefinitionWords constantSimpleDefinition: ["constant"], // Words that introduce module variable definitions. // These must also be simple definitions and are // appended to otherSimpleDefinitionWords variableSimpleDefinition: ["variable"], // Other words that introduce simple definitions // (without implicit bodies). otherSimpleDefinition: ["generic", "domain", "C-pointer-type", "table" ], // Words that begin statements with implicit bodies. statement: ["if", "block", "begin", "method", "case", "for", "select", "when", "unless", "until", "while", "iterate", "profiling", "dynamic-bind" ], // Patterns that act as separators in compound statements. // This may include any general pattern that must be indented // specially. separator: ["finally", "exception", "cleanup", "else", "elseif", "afterwards" ], // Keywords that do not require special indentation handling, // but which should be highlighted other: ["above", "below", "by", "from", "handler", "in", "instance", "let", "local", "otherwise", "slot", "subclass", "then", "to", "keyed-by", "virtual" ], // Condition signaling function calls signalingCalls: ["signal", "error", "cerror", "break", "check-type", "abort" ] }; words["otherDefinition"] = words["unnamedDefinition"] .concat(words["namedDefinition"]) .concat(words["otherParameterizedDefinition"]); words["definition"] = words["typeParameterizedDefinition"] .concat(words["otherDefinition"]); words["parameterizedDefinition"] = words["typeParameterizedDefinition"] .concat(words["otherParameterizedDefinition"]); words["simpleDefinition"] = words["constantSimpleDefinition"] .concat(words["variableSimpleDefinition"]) .concat(words["otherSimpleDefinition"]); words["keyword"] = words["statement"] .concat(words["separator"]) .concat(words["other"]); // Patterns var symbolPattern = "[-_a-zA-Z?!*@<>$%]+"; var symbol = new RegExp("^" + symbolPattern); var patterns = { // Symbols with special syntax symbolKeyword: symbolPattern + ":", symbolClass: "<" + symbolPattern + ">", symbolGlobal: "\\*" + symbolPattern + "\\*", symbolConstant: "\\$" + symbolPattern }; var patternStyles = { symbolKeyword: "atom", symbolClass: "tag", symbolGlobal: "variable-2", symbolConstant: "variable-3" }; // Compile all patterns to regular expressions for (var patternName in patterns) if (patterns.hasOwnProperty(patternName)) patterns[patternName] = new RegExp("^" + patterns[patternName]); // Names beginning "with-" and "without-" are commonly // used as statement macro patterns["keyword"] = [/^with(?:out)?-[-_a-zA-Z?!*@<>$%]+/]; var styles = {}; styles["keyword"] = "keyword"; styles["definition"] = "def"; styles["simpleDefinition"] = "def"; styles["signalingCalls"] = "builtin"; // protected words lookup table var wordLookup = {}; var styleLookup = {}; [ "keyword", "definition", "simpleDefinition", "signalingCalls" ].forEach(function(type) { words[type].forEach(function(word) { wordLookup[word] = type; styleLookup[word] = styles[type]; }); }); function chain(stream, state, f) { state.tokenize = f; return f(stream, state); } var type, content; function ret(_type, style, _content) { type = _type; content = _content; return style; } function tokenBase(stream, state) { // String var ch = stream.peek(); if (ch == "'" || ch == '"') { stream.next(); return chain(stream, state, tokenString(ch, "string", "string")); } // Comment else if (ch == "/") { stream.next(); if (stream.eat("*")) { return chain(stream, state, tokenComment); } else if (stream.eat("/")) { stream.skipToEnd(); return ret("comment", "comment"); } else { stream.skipTo(" "); return ret("operator", "operator"); } } // Decimal else if (/\d/.test(ch)) { stream.match(/^\d*(?:\.\d*)?(?:e[+\-]?\d+)?/); return ret("number", "number"); } // Hash else if (ch == "#") { stream.next(); // Symbol with string syntax ch = stream.peek(); if (ch == '"') { stream.next(); return chain(stream, state, tokenString('"', "symbol", "string-2")); } // Binary number else if (ch == "b") { stream.next(); stream.eatWhile(/[01]/); return ret("number", "number"); } // Hex number else if (ch == "x") { stream.next(); stream.eatWhile(/[\da-f]/i); return ret("number", "number"); } // Octal number else if (ch == "o") { stream.next(); stream.eatWhile(/[0-7]/); return ret("number", "number"); } // Hash symbol else { stream.eatWhile(/[-a-zA-Z]/); return ret("hash", "keyword"); } } else if (stream.match("end")) { return ret("end", "keyword"); } for (var name in patterns) { if (patterns.hasOwnProperty(name)) { var pattern = patterns[name]; if ((pattern instanceof Array && pattern.some(function(p) { return stream.match(p); })) || stream.match(pattern)) return ret(name, patternStyles[name], stream.current()); } } if (stream.match("define")) { return ret("definition", "def"); } else { stream.eatWhile(/[\w\-]/); // Keyword if (wordLookup[stream.current()]) { return ret(wordLookup[stream.current()], styleLookup[stream.current()], stream.current()); } else if (stream.current().match(symbol)) { return ret("variable", "variable"); } else { stream.next(); return ret("other", "variable-2"); } } } function tokenComment(stream, state) { var maybeEnd = false, ch; while ((ch = stream.next())) { if (ch == "/" && maybeEnd) { state.tokenize = tokenBase; break; } maybeEnd = (ch == "*"); } return ret("comment", "comment"); } function tokenString(quote, type, style) { return function(stream, state) { var next, end = false; while ((next = stream.next()) != null) { if (next == quote) { end = true; break; } } if (end) state.tokenize = tokenBase; return ret(type, style); }; } // Interface return { startState: function() { return { tokenize: tokenBase, currentIndent: 0 }; }, token: function(stream, state) { if (stream.eatSpace()) return null; var style = state.tokenize(stream, state); return style; }, blockCommentStart: "/*", blockCommentEnd: "*/" }; }); CodeMirror.defineMIME("text/x-dylan", "dylan"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/dylan/index.html ================================================ CodeMirror: Dylan mode

                  Dylan mode

                  MIME types defined: text/x-dylan.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/ebnf/ebnf.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("ebnf", function (config) { var commentType = {slash: 0, parenthesis: 1}; var stateType = {comment: 0, _string: 1, characterClass: 2}; var bracesMode = null; if (config.bracesMode) bracesMode = CodeMirror.getMode(config, config.bracesMode); return { startState: function () { return { stringType: null, commentType: null, braced: 0, lhs: true, localState: null, stack: [], inDefinition: false }; }, token: function (stream, state) { if (!stream) return; //check for state changes if (state.stack.length === 0) { //strings if ((stream.peek() == '"') || (stream.peek() == "'")) { state.stringType = stream.peek(); stream.next(); // Skip quote state.stack.unshift(stateType._string); } else if (stream.match(/^\/\*/)) { //comments starting with /* state.stack.unshift(stateType.comment); state.commentType = commentType.slash; } else if (stream.match(/^\(\*/)) { //comments starting with (* state.stack.unshift(stateType.comment); state.commentType = commentType.parenthesis; } } //return state //stack has switch (state.stack[0]) { case stateType._string: while (state.stack[0] === stateType._string && !stream.eol()) { if (stream.peek() === state.stringType) { stream.next(); // Skip quote state.stack.shift(); // Clear flag } else if (stream.peek() === "\\") { stream.next(); stream.next(); } else { stream.match(/^.[^\\\"\']*/); } } return state.lhs ? "property string" : "string"; // Token style case stateType.comment: while (state.stack[0] === stateType.comment && !stream.eol()) { if (state.commentType === commentType.slash && stream.match(/\*\//)) { state.stack.shift(); // Clear flag state.commentType = null; } else if (state.commentType === commentType.parenthesis && stream.match(/\*\)/)) { state.stack.shift(); // Clear flag state.commentType = null; } else { stream.match(/^.[^\*]*/); } } return "comment"; case stateType.characterClass: while (state.stack[0] === stateType.characterClass && !stream.eol()) { if (!(stream.match(/^[^\]\\]+/) || stream.match(/^\\./))) { state.stack.shift(); } } return "operator"; } var peek = stream.peek(); if (bracesMode !== null && (state.braced || peek === "{")) { if (state.localState === null) state.localState = bracesMode.startState(); var token = bracesMode.token(stream, state.localState), text = stream.current(); if (!token) { for (var i = 0; i < text.length; i++) { if (text[i] === "{") { if (state.braced === 0) { token = "matchingbracket"; } state.braced++; } else if (text[i] === "}") { state.braced--; if (state.braced === 0) { token = "matchingbracket"; } } } } return token; } //no stack switch (peek) { case "[": stream.next(); state.stack.unshift(stateType.characterClass); return "bracket"; case ":": case "|": case ";": stream.next(); return "operator"; case "%": if (stream.match("%%")) { return "header"; } else if (stream.match(/[%][A-Za-z]+/)) { return "keyword"; } else if (stream.match(/[%][}]/)) { return "matchingbracket"; } break; case "/": if (stream.match(/[\/][A-Za-z]+/)) { return "keyword"; } case "\\": if (stream.match(/[\][a-z]+/)) { return "string-2"; } case ".": if (stream.match(".")) { return "atom"; } case "*": case "-": case "+": case "^": if (stream.match(peek)) { return "atom"; } case "$": if (stream.match("$$")) { return "builtin"; } else if (stream.match(/[$][0-9]+/)) { return "variable-3"; } case "<": if (stream.match(/<<[a-zA-Z_]+>>/)) { return "builtin"; } } if (stream.match(/^\/\//)) { stream.skipToEnd(); return "comment"; } else if (stream.match(/return/)) { return "operator"; } else if (stream.match(/^[a-zA-Z_][a-zA-Z0-9_]*/)) { if (stream.match(/(?=[\(.])/)) { return "variable"; } else if (stream.match(/(?=[\s\n]*[:=])/)) { return "def"; } return "variable-2"; } else if (["[", "]", "(", ")"].indexOf(stream.peek()) != -1) { stream.next(); return "bracket"; } else if (!stream.eatSpace()) { stream.next(); } return null; } }; }); CodeMirror.defineMIME("text/x-ebnf", "ebnf"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/ebnf/index.html ================================================ CodeMirror: EBNF Mode

                  EBNF Mode (bracesMode setting = "javascript")

                  The EBNF Mode

                  Created by Robert Plummer

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/ecl/ecl.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("ecl", function(config) { function words(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } function metaHook(stream, state) { if (!state.startOfLine) return false; stream.skipToEnd(); return "meta"; } var indentUnit = config.indentUnit; var keyword = words("abs acos allnodes ascii asin asstring atan atan2 ave case choose choosen choosesets clustersize combine correlation cos cosh count covariance cron dataset dedup define denormalize distribute distributed distribution ebcdic enth error evaluate event eventextra eventname exists exp failcode failmessage fetch fromunicode getisvalid global graph group hash hash32 hash64 hashcrc hashmd5 having if index intformat isvalid iterate join keyunicode length library limit ln local log loop map matched matchlength matchposition matchtext matchunicode max merge mergejoin min nolocal nonempty normalize parse pipe power preload process project pull random range rank ranked realformat recordof regexfind regexreplace regroup rejected rollup round roundup row rowdiff sample set sin sinh sizeof soapcall sort sorted sqrt stepped stored sum table tan tanh thisnode topn tounicode transfer trim truncate typeof ungroup unicodeorder variance which workunit xmldecode xmlencode xmltext xmlunicode"); var variable = words("apply assert build buildindex evaluate fail keydiff keypatch loadxml nothor notify output parallel sequential soapcall wait"); var variable_2 = words("__compressed__ all and any as atmost before beginc++ best between case const counter csv descend encrypt end endc++ endmacro except exclusive expire export extend false few first flat from full function group header heading hole ifblock import in interface joined keep keyed last left limit load local locale lookup macro many maxcount maxlength min skew module named nocase noroot noscan nosort not of only opt or outer overwrite packed partition penalty physicallength pipe quote record relationship repeat return right scan self separator service shared skew skip sql store terminator thor threshold token transform trim true type unicodeorder unsorted validate virtual whole wild within xml xpath"); var variable_3 = words("ascii big_endian boolean data decimal ebcdic integer pattern qstring real record rule set of string token udecimal unicode unsigned varstring varunicode"); var builtin = words("checkpoint deprecated failcode failmessage failure global independent onwarning persist priority recovery stored success wait when"); var blockKeywords = words("catch class do else finally for if switch try while"); var atoms = words("true false null"); var hooks = {"#": metaHook}; var multiLineStrings; var isOperatorChar = /[+\-*&%=<>!?|\/]/; var curPunc; function tokenBase(stream, state) { var ch = stream.next(); if (hooks[ch]) { var result = hooks[ch](stream, state); if (result !== false) return result; } if (ch == '"' || ch == "'") { state.tokenize = tokenString(ch); return state.tokenize(stream, state); } if (/[\[\]{}\(\),;\:\.]/.test(ch)) { curPunc = ch; return null; } if (/\d/.test(ch)) { stream.eatWhile(/[\w\.]/); return "number"; } if (ch == "/") { if (stream.eat("*")) { state.tokenize = tokenComment; return tokenComment(stream, state); } if (stream.eat("/")) { stream.skipToEnd(); return "comment"; } } if (isOperatorChar.test(ch)) { stream.eatWhile(isOperatorChar); return "operator"; } stream.eatWhile(/[\w\$_]/); var cur = stream.current().toLowerCase(); if (keyword.propertyIsEnumerable(cur)) { if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; return "keyword"; } else if (variable.propertyIsEnumerable(cur)) { if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; return "variable"; } else if (variable_2.propertyIsEnumerable(cur)) { if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; return "variable-2"; } else if (variable_3.propertyIsEnumerable(cur)) { if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; return "variable-3"; } else if (builtin.propertyIsEnumerable(cur)) { if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; return "builtin"; } else { //Data types are of from KEYWORD## var i = cur.length - 1; while(i >= 0 && (!isNaN(cur[i]) || cur[i] == '_')) --i; if (i > 0) { var cur2 = cur.substr(0, i + 1); if (variable_3.propertyIsEnumerable(cur2)) { if (blockKeywords.propertyIsEnumerable(cur2)) curPunc = "newstatement"; return "variable-3"; } } } if (atoms.propertyIsEnumerable(cur)) return "atom"; return null; } function tokenString(quote) { return function(stream, state) { var escaped = false, next, end = false; while ((next = stream.next()) != null) { if (next == quote && !escaped) {end = true; break;} escaped = !escaped && next == "\\"; } if (end || !(escaped || multiLineStrings)) state.tokenize = tokenBase; return "string"; }; } function tokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "/" && maybeEnd) { state.tokenize = tokenBase; break; } maybeEnd = (ch == "*"); } return "comment"; } function Context(indented, column, type, align, prev) { this.indented = indented; this.column = column; this.type = type; this.align = align; this.prev = prev; } function pushContext(state, col, type) { return state.context = new Context(state.indented, col, type, null, state.context); } function popContext(state) { var t = state.context.type; if (t == ")" || t == "]" || t == "}") state.indented = state.context.indented; return state.context = state.context.prev; } // Interface return { startState: function(basecolumn) { return { tokenize: null, context: new Context((basecolumn || 0) - indentUnit, 0, "top", false), indented: 0, startOfLine: true }; }, token: function(stream, state) { var ctx = state.context; if (stream.sol()) { if (ctx.align == null) ctx.align = false; state.indented = stream.indentation(); state.startOfLine = true; } if (stream.eatSpace()) return null; curPunc = null; var style = (state.tokenize || tokenBase)(stream, state); if (style == "comment" || style == "meta") return style; if (ctx.align == null) ctx.align = true; if ((curPunc == ";" || curPunc == ":") && ctx.type == "statement") popContext(state); else if (curPunc == "{") pushContext(state, stream.column(), "}"); else if (curPunc == "[") pushContext(state, stream.column(), "]"); else if (curPunc == "(") pushContext(state, stream.column(), ")"); else if (curPunc == "}") { while (ctx.type == "statement") ctx = popContext(state); if (ctx.type == "}") ctx = popContext(state); while (ctx.type == "statement") ctx = popContext(state); } else if (curPunc == ctx.type) popContext(state); else if (ctx.type == "}" || ctx.type == "top" || (ctx.type == "statement" && curPunc == "newstatement")) pushContext(state, stream.column(), "statement"); state.startOfLine = false; return style; }, indent: function(state, textAfter) { if (state.tokenize != tokenBase && state.tokenize != null) return 0; var ctx = state.context, firstChar = textAfter && textAfter.charAt(0); if (ctx.type == "statement" && firstChar == "}") ctx = ctx.prev; var closing = firstChar == ctx.type; if (ctx.type == "statement") return ctx.indented + (firstChar == "{" ? 0 : indentUnit); else if (ctx.align) return ctx.column + (closing ? 0 : 1); else return ctx.indented + (closing ? 0 : indentUnit); }, electricChars: "{}" }; }); CodeMirror.defineMIME("text/x-ecl", "ecl"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/ecl/index.html ================================================ CodeMirror: ECL mode

                  ECL mode

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

                  MIME types defined: text/x-ecl.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/eiffel/eiffel.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("eiffel", function() { function wordObj(words) { var o = {}; for (var i = 0, e = words.length; i < e; ++i) o[words[i]] = true; return o; } var keywords = wordObj([ 'note', 'across', 'when', 'variant', 'until', 'unique', 'undefine', 'then', 'strip', 'select', 'retry', 'rescue', 'require', 'rename', 'reference', 'redefine', 'prefix', 'once', 'old', 'obsolete', 'loop', 'local', 'like', 'is', 'inspect', 'infix', 'include', 'if', 'frozen', 'from', 'external', 'export', 'ensure', 'end', 'elseif', 'else', 'do', 'creation', 'create', 'check', 'alias', 'agent', 'separate', 'invariant', 'inherit', 'indexing', 'feature', 'expanded', 'deferred', 'class', 'Void', 'True', 'Result', 'Precursor', 'False', 'Current', 'create', 'attached', 'detachable', 'as', 'and', 'implies', 'not', 'or' ]); var operators = wordObj([":=", "and then","and", "or","<<",">>"]); var curPunc; function chain(newtok, stream, state) { state.tokenize.push(newtok); return newtok(stream, state); } function tokenBase(stream, state) { curPunc = null; if (stream.eatSpace()) return null; var ch = stream.next(); if (ch == '"'||ch == "'") { return chain(readQuoted(ch, "string"), stream, state); } else if (ch == "-"&&stream.eat("-")) { stream.skipToEnd(); return "comment"; } else if (ch == ":"&&stream.eat("=")) { return "operator"; } else if (/[0-9]/.test(ch)) { stream.eatWhile(/[xXbBCc0-9\.]/); stream.eat(/[\?\!]/); return "ident"; } else if (/[a-zA-Z_0-9]/.test(ch)) { stream.eatWhile(/[a-zA-Z_0-9]/); stream.eat(/[\?\!]/); return "ident"; } else if (/[=+\-\/*^%<>~]/.test(ch)) { stream.eatWhile(/[=+\-\/*^%<>~]/); return "operator"; } else { return null; } } function readQuoted(quote, style, unescaped) { return function(stream, state) { var escaped = false, ch; while ((ch = stream.next()) != null) { if (ch == quote && (unescaped || !escaped)) { state.tokenize.pop(); break; } escaped = !escaped && ch == "%"; } return style; }; } return { startState: function() { return {tokenize: [tokenBase]}; }, token: function(stream, state) { var style = state.tokenize[state.tokenize.length-1](stream, state); if (style == "ident") { var word = stream.current(); style = keywords.propertyIsEnumerable(stream.current()) ? "keyword" : operators.propertyIsEnumerable(stream.current()) ? "operator" : /^[A-Z][A-Z_0-9]*$/g.test(word) ? "tag" : /^0[bB][0-1]+$/g.test(word) ? "number" : /^0[cC][0-7]+$/g.test(word) ? "number" : /^0[xX][a-fA-F0-9]+$/g.test(word) ? "number" : /^([0-9]+\.[0-9]*)|([0-9]*\.[0-9]+)$/g.test(word) ? "number" : /^[0-9]+$/g.test(word) ? "number" : "variable"; } return style; }, lineComment: "--" }; }); CodeMirror.defineMIME("text/x-eiffel", "eiffel"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/eiffel/index.html ================================================ CodeMirror: Eiffel mode

                  Eiffel mode

                  MIME types defined: text/x-eiffel.

                  Created by YNH.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/erlang/erlang.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE /*jshint unused:true, eqnull:true, curly:true, bitwise:true */ /*jshint undef:true, latedef:true, trailing:true */ /*global CodeMirror:true */ // erlang mode. // tokenizer -> token types -> CodeMirror styles // tokenizer maintains a parse stack // indenter uses the parse stack // TODO indenter: // bit syntax // old guard/bif/conversion clashes (e.g. "float/1") // type/spec/opaque (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMIME("text/x-erlang", "erlang"); CodeMirror.defineMode("erlang", function(cmCfg) { "use strict"; ///////////////////////////////////////////////////////////////////////////// // constants var typeWords = [ "-type", "-spec", "-export_type", "-opaque"]; var keywordWords = [ "after","begin","catch","case","cond","end","fun","if", "let","of","query","receive","try","when"]; var separatorRE = /[\->,;]/; var separatorWords = [ "->",";",","]; var operatorAtomWords = [ "and","andalso","band","bnot","bor","bsl","bsr","bxor", "div","not","or","orelse","rem","xor"]; var operatorSymbolRE = /[\+\-\*\/<>=\|:!]/; var operatorSymbolWords = [ "=","+","-","*","/",">",">=","<","=<","=:=","==","=/=","/=","||","<-","!"]; var openParenRE = /[<\(\[\{]/; var openParenWords = [ "<<","(","[","{"]; var closeParenRE = /[>\)\]\}]/; var closeParenWords = [ "}","]",")",">>"]; var guardWords = [ "is_atom","is_binary","is_bitstring","is_boolean","is_float", "is_function","is_integer","is_list","is_number","is_pid", "is_port","is_record","is_reference","is_tuple", "atom","binary","bitstring","boolean","function","integer","list", "number","pid","port","record","reference","tuple"]; var bifWords = [ "abs","adler32","adler32_combine","alive","apply","atom_to_binary", "atom_to_list","binary_to_atom","binary_to_existing_atom", "binary_to_list","binary_to_term","bit_size","bitstring_to_list", "byte_size","check_process_code","contact_binary","crc32", "crc32_combine","date","decode_packet","delete_module", "disconnect_node","element","erase","exit","float","float_to_list", "garbage_collect","get","get_keys","group_leader","halt","hd", "integer_to_list","internal_bif","iolist_size","iolist_to_binary", "is_alive","is_atom","is_binary","is_bitstring","is_boolean", "is_float","is_function","is_integer","is_list","is_number","is_pid", "is_port","is_process_alive","is_record","is_reference","is_tuple", "length","link","list_to_atom","list_to_binary","list_to_bitstring", "list_to_existing_atom","list_to_float","list_to_integer", "list_to_pid","list_to_tuple","load_module","make_ref","module_loaded", "monitor_node","node","node_link","node_unlink","nodes","notalive", "now","open_port","pid_to_list","port_close","port_command", "port_connect","port_control","pre_loaded","process_flag", "process_info","processes","purge_module","put","register", "registered","round","self","setelement","size","spawn","spawn_link", "spawn_monitor","spawn_opt","split_binary","statistics", "term_to_binary","time","throw","tl","trunc","tuple_size", "tuple_to_list","unlink","unregister","whereis"]; // upper case: [A-Z] [Ø-Þ] [À-Ö] // lower case: [a-z] [ß-ö] [ø-ÿ] var anumRE = /[\w@Ø-ÞÀ-Öß-öø-ÿ]/; var escapesRE = /[0-7]{1,3}|[bdefnrstv\\"']|\^[a-zA-Z]|x[0-9a-zA-Z]{2}|x{[0-9a-zA-Z]+}/; ///////////////////////////////////////////////////////////////////////////// // tokenizer function tokenizer(stream,state) { // in multi-line string if (state.in_string) { state.in_string = (!doubleQuote(stream)); return rval(state,stream,"string"); } // in multi-line atom if (state.in_atom) { state.in_atom = (!singleQuote(stream)); return rval(state,stream,"atom"); } // whitespace if (stream.eatSpace()) { return rval(state,stream,"whitespace"); } // attributes and type specs if (!peekToken(state) && stream.match(/-\s*[a-zß-öø-ÿ][\wØ-ÞÀ-Öß-öø-ÿ]*/)) { if (is_member(stream.current(),typeWords)) { return rval(state,stream,"type"); }else{ return rval(state,stream,"attribute"); } } var ch = stream.next(); // comment if (ch == '%') { stream.skipToEnd(); return rval(state,stream,"comment"); } // colon if (ch == ":") { return rval(state,stream,"colon"); } // macro if (ch == '?') { stream.eatSpace(); stream.eatWhile(anumRE); return rval(state,stream,"macro"); } // record if (ch == "#") { stream.eatSpace(); stream.eatWhile(anumRE); return rval(state,stream,"record"); } // dollar escape if (ch == "$") { if (stream.next() == "\\" && !stream.match(escapesRE)) { return rval(state,stream,"error"); } return rval(state,stream,"number"); } // dot if (ch == ".") { return rval(state,stream,"dot"); } // quoted atom if (ch == '\'') { if (!(state.in_atom = (!singleQuote(stream)))) { if (stream.match(/\s*\/\s*[0-9]/,false)) { stream.match(/\s*\/\s*[0-9]/,true); return rval(state,stream,"fun"); // 'f'/0 style fun } if (stream.match(/\s*\(/,false) || stream.match(/\s*:/,false)) { return rval(state,stream,"function"); } } return rval(state,stream,"atom"); } // string if (ch == '"') { state.in_string = (!doubleQuote(stream)); return rval(state,stream,"string"); } // variable if (/[A-Z_Ø-ÞÀ-Ö]/.test(ch)) { stream.eatWhile(anumRE); return rval(state,stream,"variable"); } // atom/keyword/BIF/function if (/[a-z_ß-öø-ÿ]/.test(ch)) { stream.eatWhile(anumRE); if (stream.match(/\s*\/\s*[0-9]/,false)) { stream.match(/\s*\/\s*[0-9]/,true); return rval(state,stream,"fun"); // f/0 style fun } var w = stream.current(); if (is_member(w,keywordWords)) { return rval(state,stream,"keyword"); }else if (is_member(w,operatorAtomWords)) { return rval(state,stream,"operator"); }else if (stream.match(/\s*\(/,false)) { // 'put' and 'erlang:put' are bifs, 'foo:put' is not if (is_member(w,bifWords) && ((peekToken(state).token != ":") || (peekToken(state,2).token == "erlang"))) { return rval(state,stream,"builtin"); }else if (is_member(w,guardWords)) { return rval(state,stream,"guard"); }else{ return rval(state,stream,"function"); } }else if (is_member(w,operatorAtomWords)) { return rval(state,stream,"operator"); }else if (lookahead(stream) == ":") { if (w == "erlang") { return rval(state,stream,"builtin"); } else { return rval(state,stream,"function"); } }else if (is_member(w,["true","false"])) { return rval(state,stream,"boolean"); }else if (is_member(w,["true","false"])) { return rval(state,stream,"boolean"); }else{ return rval(state,stream,"atom"); } } // number var digitRE = /[0-9]/; var radixRE = /[0-9a-zA-Z]/; // 36#zZ style int if (digitRE.test(ch)) { stream.eatWhile(digitRE); if (stream.eat('#')) { // 36#aZ style integer if (!stream.eatWhile(radixRE)) { stream.backUp(1); //"36#" - syntax error } } else if (stream.eat('.')) { // float if (!stream.eatWhile(digitRE)) { stream.backUp(1); // "3." - probably end of function } else { if (stream.eat(/[eE]/)) { // float with exponent if (stream.eat(/[-+]/)) { if (!stream.eatWhile(digitRE)) { stream.backUp(2); // "2e-" - syntax error } } else { if (!stream.eatWhile(digitRE)) { stream.backUp(1); // "2e" - syntax error } } } } } return rval(state,stream,"number"); // normal integer } // open parens if (nongreedy(stream,openParenRE,openParenWords)) { return rval(state,stream,"open_paren"); } // close parens if (nongreedy(stream,closeParenRE,closeParenWords)) { return rval(state,stream,"close_paren"); } // separators if (greedy(stream,separatorRE,separatorWords)) { return rval(state,stream,"separator"); } // operators if (greedy(stream,operatorSymbolRE,operatorSymbolWords)) { return rval(state,stream,"operator"); } return rval(state,stream,null); } ///////////////////////////////////////////////////////////////////////////// // utilities function nongreedy(stream,re,words) { if (stream.current().length == 1 && re.test(stream.current())) { stream.backUp(1); while (re.test(stream.peek())) { stream.next(); if (is_member(stream.current(),words)) { return true; } } stream.backUp(stream.current().length-1); } return false; } function greedy(stream,re,words) { if (stream.current().length == 1 && re.test(stream.current())) { while (re.test(stream.peek())) { stream.next(); } while (0 < stream.current().length) { if (is_member(stream.current(),words)) { return true; }else{ stream.backUp(1); } } stream.next(); } return false; } function doubleQuote(stream) { return quote(stream, '"', '\\'); } function singleQuote(stream) { return quote(stream,'\'','\\'); } function quote(stream,quoteChar,escapeChar) { while (!stream.eol()) { var ch = stream.next(); if (ch == quoteChar) { return true; }else if (ch == escapeChar) { stream.next(); } } return false; } function lookahead(stream) { var m = stream.match(/([\n\s]+|%[^\n]*\n)*(.)/,false); return m ? m.pop() : ""; } function is_member(element,list) { return (-1 < list.indexOf(element)); } function rval(state,stream,type) { // parse stack pushToken(state,realToken(type,stream)); // map erlang token type to CodeMirror style class // erlang -> CodeMirror tag switch (type) { case "atom": return "atom"; case "attribute": return "attribute"; case "boolean": return "atom"; case "builtin": return "builtin"; case "close_paren": return null; case "colon": return null; case "comment": return "comment"; case "dot": return null; case "error": return "error"; case "fun": return "meta"; case "function": return "tag"; case "guard": return "property"; case "keyword": return "keyword"; case "macro": return "variable-2"; case "number": return "number"; case "open_paren": return null; case "operator": return "operator"; case "record": return "bracket"; case "separator": return null; case "string": return "string"; case "type": return "def"; case "variable": return "variable"; default: return null; } } function aToken(tok,col,ind,typ) { return {token: tok, column: col, indent: ind, type: typ}; } function realToken(type,stream) { return aToken(stream.current(), stream.column(), stream.indentation(), type); } function fakeToken(type) { return aToken(type,0,0,type); } function peekToken(state,depth) { var len = state.tokenStack.length; var dep = (depth ? depth : 1); if (len < dep) { return false; }else{ return state.tokenStack[len-dep]; } } function pushToken(state,token) { if (!(token.type == "comment" || token.type == "whitespace")) { state.tokenStack = maybe_drop_pre(state.tokenStack,token); state.tokenStack = maybe_drop_post(state.tokenStack); } } function maybe_drop_pre(s,token) { var last = s.length-1; if (0 < last && s[last].type === "record" && token.type === "dot") { s.pop(); }else if (0 < last && s[last].type === "group") { s.pop(); s.push(token); }else{ s.push(token); } return s; } function maybe_drop_post(s) { var last = s.length-1; if (s[last].type === "dot") { return []; } if (s[last].type === "fun" && s[last-1].token === "fun") { return s.slice(0,last-1); } switch (s[s.length-1].token) { case "}": return d(s,{g:["{"]}); case "]": return d(s,{i:["["]}); case ")": return d(s,{i:["("]}); case ">>": return d(s,{i:["<<"]}); case "end": return d(s,{i:["begin","case","fun","if","receive","try"]}); case ",": return d(s,{e:["begin","try","when","->", ",","(","[","{","<<"]}); case "->": return d(s,{r:["when"], m:["try","if","case","receive"]}); case ";": return d(s,{E:["case","fun","if","receive","try","when"]}); case "catch":return d(s,{e:["try"]}); case "of": return d(s,{e:["case"]}); case "after":return d(s,{e:["receive","try"]}); default: return s; } } function d(stack,tt) { // stack is a stack of Token objects. // tt is an object; {type:tokens} // type is a char, tokens is a list of token strings. // The function returns (possibly truncated) stack. // It will descend the stack, looking for a Token such that Token.token // is a member of tokens. If it does not find that, it will normally (but // see "E" below) return stack. If it does find a match, it will remove // all the Tokens between the top and the matched Token. // If type is "m", that is all it does. // If type is "i", it will also remove the matched Token and the top Token. // If type is "g", like "i", but add a fake "group" token at the top. // If type is "r", it will remove the matched Token, but not the top Token. // If type is "e", it will keep the matched Token but not the top Token. // If type is "E", it behaves as for type "e", except if there is no match, // in which case it will return an empty stack. for (var type in tt) { var len = stack.length-1; var tokens = tt[type]; for (var i = len-1; -1 < i ; i--) { if (is_member(stack[i].token,tokens)) { var ss = stack.slice(0,i); switch (type) { case "m": return ss.concat(stack[i]).concat(stack[len]); case "r": return ss.concat(stack[len]); case "i": return ss; case "g": return ss.concat(fakeToken("group")); case "E": return ss.concat(stack[i]); case "e": return ss.concat(stack[i]); } } } } return (type == "E" ? [] : stack); } ///////////////////////////////////////////////////////////////////////////// // indenter function indenter(state,textAfter) { var t; var unit = cmCfg.indentUnit; var wordAfter = wordafter(textAfter); var currT = peekToken(state,1); var prevT = peekToken(state,2); if (state.in_string || state.in_atom) { return CodeMirror.Pass; }else if (!prevT) { return 0; }else if (currT.token == "when") { return currT.column+unit; }else if (wordAfter === "when" && prevT.type === "function") { return prevT.indent+unit; }else if (wordAfter === "(" && currT.token === "fun") { return currT.column+3; }else if (wordAfter === "catch" && (t = getToken(state,["try"]))) { return t.column; }else if (is_member(wordAfter,["end","after","of"])) { t = getToken(state,["begin","case","fun","if","receive","try"]); return t ? t.column : CodeMirror.Pass; }else if (is_member(wordAfter,closeParenWords)) { t = getToken(state,openParenWords); return t ? t.column : CodeMirror.Pass; }else if (is_member(currT.token,[",","|","||"]) || is_member(wordAfter,[",","|","||"])) { t = postcommaToken(state); return t ? t.column+t.token.length : unit; }else if (currT.token == "->") { if (is_member(prevT.token, ["receive","case","if","try"])) { return prevT.column+unit+unit; }else{ return prevT.column+unit; } }else if (is_member(currT.token,openParenWords)) { return currT.column+currT.token.length; }else{ t = defaultToken(state); return truthy(t) ? t.column+unit : 0; } } function wordafter(str) { var m = str.match(/,|[a-z]+|\}|\]|\)|>>|\|+|\(/); return truthy(m) && (m.index === 0) ? m[0] : ""; } function postcommaToken(state) { var objs = state.tokenStack.slice(0,-1); var i = getTokenIndex(objs,"type",["open_paren"]); return truthy(objs[i]) ? objs[i] : false; } function defaultToken(state) { var objs = state.tokenStack; var stop = getTokenIndex(objs,"type",["open_paren","separator","keyword"]); var oper = getTokenIndex(objs,"type",["operator"]); if (truthy(stop) && truthy(oper) && stop < oper) { return objs[stop+1]; } else if (truthy(stop)) { return objs[stop]; } else { return false; } } function getToken(state,tokens) { var objs = state.tokenStack; var i = getTokenIndex(objs,"token",tokens); return truthy(objs[i]) ? objs[i] : false; } function getTokenIndex(objs,propname,propvals) { for (var i = objs.length-1; -1 < i ; i--) { if (is_member(objs[i][propname],propvals)) { return i; } } return false; } function truthy(x) { return (x !== false) && (x != null); } ///////////////////////////////////////////////////////////////////////////// // this object defines the mode return { startState: function() { return {tokenStack: [], in_string: false, in_atom: false}; }, token: function(stream, state) { return tokenizer(stream, state); }, indent: function(state, textAfter) { return indenter(state,textAfter); }, lineComment: "%" }; }); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/erlang/index.html ================================================ CodeMirror: Erlang mode

                  Erlang mode

                  MIME types defined: text/x-erlang.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/forth/forth.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE // Author: Aliaksei Chapyzhenka (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; function toWordList(words) { var ret = []; words.split(' ').forEach(function(e){ ret.push({name: e}); }); return ret; } var coreWordList = toWordList( 'INVERT AND OR XOR\ 2* 2/ LSHIFT RSHIFT\ 0= = 0< < > U< MIN MAX\ 2DROP 2DUP 2OVER 2SWAP ?DUP DEPTH DROP DUP OVER ROT SWAP\ >R R> R@\ + - 1+ 1- ABS NEGATE\ S>D * M* UM*\ FM/MOD SM/REM UM/MOD */ */MOD / /MOD MOD\ HERE , @ ! CELL+ CELLS C, C@ C! CHARS 2@ 2!\ ALIGN ALIGNED +! ALLOT\ CHAR [CHAR] [ ] BL\ FIND EXECUTE IMMEDIATE COUNT LITERAL STATE\ ; DOES> >BODY\ EVALUATE\ SOURCE >IN\ <# # #S #> HOLD SIGN BASE >NUMBER HEX DECIMAL\ FILL MOVE\ . CR EMIT SPACE SPACES TYPE U. .R U.R\ ACCEPT\ TRUE FALSE\ <> U> 0<> 0>\ NIP TUCK ROLL PICK\ 2>R 2R@ 2R>\ WITHIN UNUSED MARKER\ I J\ TO\ COMPILE, [COMPILE]\ SAVE-INPUT RESTORE-INPUT\ PAD ERASE\ 2LITERAL DNEGATE\ D- D+ D0< D0= D2* D2/ D< D= DMAX DMIN D>S DABS\ M+ M*/ D. D.R 2ROT DU<\ CATCH THROW\ FREE RESIZE ALLOCATE\ CS-PICK CS-ROLL\ GET-CURRENT SET-CURRENT FORTH-WORDLIST GET-ORDER SET-ORDER\ PREVIOUS SEARCH-WORDLIST WORDLIST FIND ALSO ONLY FORTH DEFINITIONS ORDER\ -TRAILING /STRING SEARCH COMPARE CMOVE CMOVE> BLANK SLITERAL'); var immediateWordList = toWordList('IF ELSE THEN BEGIN WHILE REPEAT UNTIL RECURSE [IF] [ELSE] [THEN] ?DO DO LOOP +LOOP UNLOOP LEAVE EXIT AGAIN CASE OF ENDOF ENDCASE'); CodeMirror.defineMode('forth', function() { function searchWordList (wordList, word) { var i; for (i = wordList.length - 1; i >= 0; i--) { if (wordList[i].name === word.toUpperCase()) { return wordList[i]; } } return undefined; } return { startState: function() { return { state: '', base: 10, coreWordList: coreWordList, immediateWordList: immediateWordList, wordList: [] }; }, token: function (stream, stt) { var mat; if (stream.eatSpace()) { return null; } if (stt.state === '') { // interpretation if (stream.match(/^(\]|:NONAME)(\s|$)/i)) { stt.state = ' compilation'; return 'builtin compilation'; } mat = stream.match(/^(\:)\s+(\S+)(\s|$)+/); if (mat) { stt.wordList.push({name: mat[2].toUpperCase()}); stt.state = ' compilation'; return 'def' + stt.state; } mat = stream.match(/^(VARIABLE|2VARIABLE|CONSTANT|2CONSTANT|CREATE|POSTPONE|VALUE|WORD)\s+(\S+)(\s|$)+/i); if (mat) { stt.wordList.push({name: mat[2].toUpperCase()}); return 'def' + stt.state; } mat = stream.match(/^(\'|\[\'\])\s+(\S+)(\s|$)+/); if (mat) { return 'builtin' + stt.state; } } else { // compilation // ; [ if (stream.match(/^(\;|\[)(\s)/)) { stt.state = ''; stream.backUp(1); return 'builtin compilation'; } if (stream.match(/^(\;|\[)($)/)) { stt.state = ''; return 'builtin compilation'; } if (stream.match(/^(POSTPONE)\s+\S+(\s|$)+/)) { return 'builtin'; } } // dynamic wordlist mat = stream.match(/^(\S+)(\s+|$)/); if (mat) { if (searchWordList(stt.wordList, mat[1]) !== undefined) { return 'variable' + stt.state; } // comments if (mat[1] === '\\') { stream.skipToEnd(); return 'comment' + stt.state; } // core words if (searchWordList(stt.coreWordList, mat[1]) !== undefined) { return 'builtin' + stt.state; } if (searchWordList(stt.immediateWordList, mat[1]) !== undefined) { return 'keyword' + stt.state; } if (mat[1] === '(') { stream.eatWhile(function (s) { return s !== ')'; }); stream.eat(')'); return 'comment' + stt.state; } // // strings if (mat[1] === '.(') { stream.eatWhile(function (s) { return s !== ')'; }); stream.eat(')'); return 'string' + stt.state; } if (mat[1] === 'S"' || mat[1] === '."' || mat[1] === 'C"') { stream.eatWhile(function (s) { return s !== '"'; }); stream.eat('"'); return 'string' + stt.state; } // numbers if (mat[1] - 0xfffffffff) { return 'number' + stt.state; } // if (mat[1].match(/^[-+]?[0-9]+\.[0-9]*/)) { // return 'number' + stt.state; // } return 'atom' + stt.state; } } }; }); CodeMirror.defineMIME("text/x-forth", "forth"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/forth/index.html ================================================ CodeMirror: Forth mode

                  Forth mode

                  Simple mode that handle Forth-Syntax (Forth on WikiPedia).

                  MIME types defined: text/x-forth.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/fortran/fortran.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("fortran", function() { function words(array) { var keys = {}; for (var i = 0; i < array.length; ++i) { keys[array[i]] = true; } return keys; } var keywords = words([ "abstract", "accept", "allocatable", "allocate", "array", "assign", "asynchronous", "backspace", "bind", "block", "byte", "call", "case", "class", "close", "common", "contains", "continue", "cycle", "data", "deallocate", "decode", "deferred", "dimension", "do", "elemental", "else", "encode", "end", "endif", "entry", "enumerator", "equivalence", "exit", "external", "extrinsic", "final", "forall", "format", "function", "generic", "go", "goto", "if", "implicit", "import", "include", "inquire", "intent", "interface", "intrinsic", "module", "namelist", "non_intrinsic", "non_overridable", "none", "nopass", "nullify", "open", "optional", "options", "parameter", "pass", "pause", "pointer", "print", "private", "program", "protected", "public", "pure", "read", "recursive", "result", "return", "rewind", "save", "select", "sequence", "stop", "subroutine", "target", "then", "to", "type", "use", "value", "volatile", "where", "while", "write"]); var builtins = words(["abort", "abs", "access", "achar", "acos", "adjustl", "adjustr", "aimag", "aint", "alarm", "all", "allocated", "alog", "amax", "amin", "amod", "and", "anint", "any", "asin", "associated", "atan", "besj", "besjn", "besy", "besyn", "bit_size", "btest", "cabs", "ccos", "ceiling", "cexp", "char", "chdir", "chmod", "clog", "cmplx", "command_argument_count", "complex", "conjg", "cos", "cosh", "count", "cpu_time", "cshift", "csin", "csqrt", "ctime", "c_funloc", "c_loc", "c_associated", "c_null_ptr", "c_null_funptr", "c_f_pointer", "c_null_char", "c_alert", "c_backspace", "c_form_feed", "c_new_line", "c_carriage_return", "c_horizontal_tab", "c_vertical_tab", "dabs", "dacos", "dasin", "datan", "date_and_time", "dbesj", "dbesj", "dbesjn", "dbesy", "dbesy", "dbesyn", "dble", "dcos", "dcosh", "ddim", "derf", "derfc", "dexp", "digits", "dim", "dint", "dlog", "dlog", "dmax", "dmin", "dmod", "dnint", "dot_product", "dprod", "dsign", "dsinh", "dsin", "dsqrt", "dtanh", "dtan", "dtime", "eoshift", "epsilon", "erf", "erfc", "etime", "exit", "exp", "exponent", "extends_type_of", "fdate", "fget", "fgetc", "float", "floor", "flush", "fnum", "fputc", "fput", "fraction", "fseek", "fstat", "ftell", "gerror", "getarg", "get_command", "get_command_argument", "get_environment_variable", "getcwd", "getenv", "getgid", "getlog", "getpid", "getuid", "gmtime", "hostnm", "huge", "iabs", "iachar", "iand", "iargc", "ibclr", "ibits", "ibset", "ichar", "idate", "idim", "idint", "idnint", "ieor", "ierrno", "ifix", "imag", "imagpart", "index", "int", "ior", "irand", "isatty", "ishft", "ishftc", "isign", "iso_c_binding", "is_iostat_end", "is_iostat_eor", "itime", "kill", "kind", "lbound", "len", "len_trim", "lge", "lgt", "link", "lle", "llt", "lnblnk", "loc", "log", "logical", "long", "lshift", "lstat", "ltime", "matmul", "max", "maxexponent", "maxloc", "maxval", "mclock", "merge", "move_alloc", "min", "minexponent", "minloc", "minval", "mod", "modulo", "mvbits", "nearest", "new_line", "nint", "not", "or", "pack", "perror", "precision", "present", "product", "radix", "rand", "random_number", "random_seed", "range", "real", "realpart", "rename", "repeat", "reshape", "rrspacing", "rshift", "same_type_as", "scale", "scan", "second", "selected_int_kind", "selected_real_kind", "set_exponent", "shape", "short", "sign", "signal", "sinh", "sin", "sleep", "sngl", "spacing", "spread", "sqrt", "srand", "stat", "sum", "symlnk", "system", "system_clock", "tan", "tanh", "time", "tiny", "transfer", "transpose", "trim", "ttynam", "ubound", "umask", "unlink", "unpack", "verify", "xor", "zabs", "zcos", "zexp", "zlog", "zsin", "zsqrt"]); var dataTypes = words(["c_bool", "c_char", "c_double", "c_double_complex", "c_float", "c_float_complex", "c_funptr", "c_int", "c_int16_t", "c_int32_t", "c_int64_t", "c_int8_t", "c_int_fast16_t", "c_int_fast32_t", "c_int_fast64_t", "c_int_fast8_t", "c_int_least16_t", "c_int_least32_t", "c_int_least64_t", "c_int_least8_t", "c_intmax_t", "c_intptr_t", "c_long", "c_long_double", "c_long_double_complex", "c_long_long", "c_ptr", "c_short", "c_signed_char", "c_size_t", "character", "complex", "double", "integer", "logical", "real"]); var isOperatorChar = /[+\-*&=<>\/\:]/; var litOperator = new RegExp("(\.and\.|\.or\.|\.eq\.|\.lt\.|\.le\.|\.gt\.|\.ge\.|\.ne\.|\.not\.|\.eqv\.|\.neqv\.)", "i"); function tokenBase(stream, state) { if (stream.match(litOperator)){ return 'operator'; } var ch = stream.next(); if (ch == "!") { stream.skipToEnd(); return "comment"; } if (ch == '"' || ch == "'") { state.tokenize = tokenString(ch); return state.tokenize(stream, state); } if (/[\[\]\(\),]/.test(ch)) { return null; } if (/\d/.test(ch)) { stream.eatWhile(/[\w\.]/); return "number"; } if (isOperatorChar.test(ch)) { stream.eatWhile(isOperatorChar); return "operator"; } stream.eatWhile(/[\w\$_]/); var word = stream.current().toLowerCase(); if (keywords.hasOwnProperty(word)){ return 'keyword'; } if (builtins.hasOwnProperty(word) || dataTypes.hasOwnProperty(word)) { return 'builtin'; } return "variable"; } function tokenString(quote) { return function(stream, state) { var escaped = false, next, end = false; while ((next = stream.next()) != null) { if (next == quote && !escaped) { end = true; break; } escaped = !escaped && next == "\\"; } if (end || !escaped) state.tokenize = null; return "string"; }; } // Interface return { startState: function() { return {tokenize: null}; }, token: function(stream, state) { if (stream.eatSpace()) return null; var style = (state.tokenize || tokenBase)(stream, state); if (style == "comment" || style == "meta") return style; return style; } }; }); CodeMirror.defineMIME("text/x-fortran", "fortran"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/fortran/index.html ================================================ CodeMirror: Fortran mode

                  Fortran mode

                  MIME types defined: text/x-Fortran.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/gas/gas.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("gas", function(_config, parserConfig) { 'use strict'; // If an architecture is specified, its initialization function may // populate this array with custom parsing functions which will be // tried in the event that the standard functions do not find a match. var custom = []; // The symbol used to start a line comment changes based on the target // architecture. // If no architecture is pased in "parserConfig" then only multiline // comments will have syntax support. var lineCommentStartSymbol = ""; // These directives are architecture independent. // Machine specific directives should go in their respective // architecture initialization function. // Reference: // http://sourceware.org/binutils/docs/as/Pseudo-Ops.html#Pseudo-Ops var directives = { ".abort" : "builtin", ".align" : "builtin", ".altmacro" : "builtin", ".ascii" : "builtin", ".asciz" : "builtin", ".balign" : "builtin", ".balignw" : "builtin", ".balignl" : "builtin", ".bundle_align_mode" : "builtin", ".bundle_lock" : "builtin", ".bundle_unlock" : "builtin", ".byte" : "builtin", ".cfi_startproc" : "builtin", ".comm" : "builtin", ".data" : "builtin", ".def" : "builtin", ".desc" : "builtin", ".dim" : "builtin", ".double" : "builtin", ".eject" : "builtin", ".else" : "builtin", ".elseif" : "builtin", ".end" : "builtin", ".endef" : "builtin", ".endfunc" : "builtin", ".endif" : "builtin", ".equ" : "builtin", ".equiv" : "builtin", ".eqv" : "builtin", ".err" : "builtin", ".error" : "builtin", ".exitm" : "builtin", ".extern" : "builtin", ".fail" : "builtin", ".file" : "builtin", ".fill" : "builtin", ".float" : "builtin", ".func" : "builtin", ".global" : "builtin", ".gnu_attribute" : "builtin", ".hidden" : "builtin", ".hword" : "builtin", ".ident" : "builtin", ".if" : "builtin", ".incbin" : "builtin", ".include" : "builtin", ".int" : "builtin", ".internal" : "builtin", ".irp" : "builtin", ".irpc" : "builtin", ".lcomm" : "builtin", ".lflags" : "builtin", ".line" : "builtin", ".linkonce" : "builtin", ".list" : "builtin", ".ln" : "builtin", ".loc" : "builtin", ".loc_mark_labels" : "builtin", ".local" : "builtin", ".long" : "builtin", ".macro" : "builtin", ".mri" : "builtin", ".noaltmacro" : "builtin", ".nolist" : "builtin", ".octa" : "builtin", ".offset" : "builtin", ".org" : "builtin", ".p2align" : "builtin", ".popsection" : "builtin", ".previous" : "builtin", ".print" : "builtin", ".protected" : "builtin", ".psize" : "builtin", ".purgem" : "builtin", ".pushsection" : "builtin", ".quad" : "builtin", ".reloc" : "builtin", ".rept" : "builtin", ".sbttl" : "builtin", ".scl" : "builtin", ".section" : "builtin", ".set" : "builtin", ".short" : "builtin", ".single" : "builtin", ".size" : "builtin", ".skip" : "builtin", ".sleb128" : "builtin", ".space" : "builtin", ".stab" : "builtin", ".string" : "builtin", ".struct" : "builtin", ".subsection" : "builtin", ".symver" : "builtin", ".tag" : "builtin", ".text" : "builtin", ".title" : "builtin", ".type" : "builtin", ".uleb128" : "builtin", ".val" : "builtin", ".version" : "builtin", ".vtable_entry" : "builtin", ".vtable_inherit" : "builtin", ".warning" : "builtin", ".weak" : "builtin", ".weakref" : "builtin", ".word" : "builtin" }; var registers = {}; function x86(_parserConfig) { lineCommentStartSymbol = "#"; registers.ax = "variable"; registers.eax = "variable-2"; registers.rax = "variable-3"; registers.bx = "variable"; registers.ebx = "variable-2"; registers.rbx = "variable-3"; registers.cx = "variable"; registers.ecx = "variable-2"; registers.rcx = "variable-3"; registers.dx = "variable"; registers.edx = "variable-2"; registers.rdx = "variable-3"; registers.si = "variable"; registers.esi = "variable-2"; registers.rsi = "variable-3"; registers.di = "variable"; registers.edi = "variable-2"; registers.rdi = "variable-3"; registers.sp = "variable"; registers.esp = "variable-2"; registers.rsp = "variable-3"; registers.bp = "variable"; registers.ebp = "variable-2"; registers.rbp = "variable-3"; registers.ip = "variable"; registers.eip = "variable-2"; registers.rip = "variable-3"; registers.cs = "keyword"; registers.ds = "keyword"; registers.ss = "keyword"; registers.es = "keyword"; registers.fs = "keyword"; registers.gs = "keyword"; } function armv6(_parserConfig) { // Reference: // http://infocenter.arm.com/help/topic/com.arm.doc.qrc0001l/QRC0001_UAL.pdf // http://infocenter.arm.com/help/topic/com.arm.doc.ddi0301h/DDI0301H_arm1176jzfs_r0p7_trm.pdf lineCommentStartSymbol = "@"; directives.syntax = "builtin"; registers.r0 = "variable"; registers.r1 = "variable"; registers.r2 = "variable"; registers.r3 = "variable"; registers.r4 = "variable"; registers.r5 = "variable"; registers.r6 = "variable"; registers.r7 = "variable"; registers.r8 = "variable"; registers.r9 = "variable"; registers.r10 = "variable"; registers.r11 = "variable"; registers.r12 = "variable"; registers.sp = "variable-2"; registers.lr = "variable-2"; registers.pc = "variable-2"; registers.r13 = registers.sp; registers.r14 = registers.lr; registers.r15 = registers.pc; custom.push(function(ch, stream) { if (ch === '#') { stream.eatWhile(/\w/); return "number"; } }); } var arch = (parserConfig.architecture || "x86").toLowerCase(); if (arch === "x86") { x86(parserConfig); } else if (arch === "arm" || arch === "armv6") { armv6(parserConfig); } function nextUntilUnescaped(stream, end) { var escaped = false, next; while ((next = stream.next()) != null) { if (next === end && !escaped) { return false; } escaped = !escaped && next === "\\"; } return escaped; } function clikeComment(stream, state) { var maybeEnd = false, ch; while ((ch = stream.next()) != null) { if (ch === "/" && maybeEnd) { state.tokenize = null; break; } maybeEnd = (ch === "*"); } return "comment"; } return { startState: function() { return { tokenize: null }; }, token: function(stream, state) { if (state.tokenize) { return state.tokenize(stream, state); } if (stream.eatSpace()) { return null; } var style, cur, ch = stream.next(); if (ch === "/") { if (stream.eat("*")) { state.tokenize = clikeComment; return clikeComment(stream, state); } } if (ch === lineCommentStartSymbol) { stream.skipToEnd(); return "comment"; } if (ch === '"') { nextUntilUnescaped(stream, '"'); return "string"; } if (ch === '.') { stream.eatWhile(/\w/); cur = stream.current().toLowerCase(); style = directives[cur]; return style || null; } if (ch === '=') { stream.eatWhile(/\w/); return "tag"; } if (ch === '{') { return "braket"; } if (ch === '}') { return "braket"; } if (/\d/.test(ch)) { if (ch === "0" && stream.eat("x")) { stream.eatWhile(/[0-9a-fA-F]/); return "number"; } stream.eatWhile(/\d/); return "number"; } if (/\w/.test(ch)) { stream.eatWhile(/\w/); if (stream.eat(":")) { return 'tag'; } cur = stream.current().toLowerCase(); style = registers[cur]; return style || null; } for (var i = 0; i < custom.length; i++) { style = custom[i](ch, stream, state); if (style) { return style; } } }, lineComment: lineCommentStartSymbol, blockCommentStart: "/*", blockCommentEnd: "*/" }; }); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/gas/index.html ================================================ CodeMirror: Gas mode

                  Gas mode

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

                  MIME types defined: text/x-gas

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/gfm/gfm.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../markdown/markdown"), require("../../addon/mode/overlay")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../markdown/markdown", "../../addon/mode/overlay"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("gfm", function(config, modeConfig) { var codeDepth = 0; function blankLine(state) { state.code = false; return null; } var gfmOverlay = { startState: function() { return { code: false, codeBlock: false, ateSpace: false }; }, copyState: function(s) { return { code: s.code, codeBlock: s.codeBlock, ateSpace: s.ateSpace }; }, token: function(stream, state) { state.combineTokens = null; // Hack to prevent formatting override inside code blocks (block and inline) if (state.codeBlock) { if (stream.match(/^```/)) { state.codeBlock = false; return null; } stream.skipToEnd(); return null; } if (stream.sol()) { state.code = false; } if (stream.sol() && stream.match(/^```/)) { stream.skipToEnd(); state.codeBlock = true; return null; } // If this block is changed, it may need to be updated in Markdown mode if (stream.peek() === '`') { stream.next(); var before = stream.pos; stream.eatWhile('`'); var difference = 1 + stream.pos - before; if (!state.code) { codeDepth = difference; state.code = true; } else { if (difference === codeDepth) { // Must be exact state.code = false; } } return null; } else if (state.code) { stream.next(); return null; } // Check if space. If so, links can be formatted later on if (stream.eatSpace()) { state.ateSpace = true; return null; } if (stream.sol() || state.ateSpace) { state.ateSpace = false; if(stream.match(/^(?:[a-zA-Z0-9\-_]+\/)?(?:[a-zA-Z0-9\-_]+@)?(?:[a-f0-9]{7,40}\b)/)) { // User/Project@SHA // User@SHA // SHA state.combineTokens = true; return "link"; } else if (stream.match(/^(?:[a-zA-Z0-9\-_]+\/)?(?:[a-zA-Z0-9\-_]+)?#[0-9]+\b/)) { // User/Project#Num // User#Num // #Num state.combineTokens = true; return "link"; } } if (stream.match(/^((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]|\([^\s()<>]*\))+(?:\([^\s()<>]*\)|[^\s`*!()\[\]{};:'".,<>?«»“”‘’]))/i) && stream.string.slice(stream.start - 2, stream.start) != "](") { // URLs // Taken from http://daringfireball.net/2010/07/improved_regex_for_matching_urls // And then (issue #1160) simplified to make it not crash the Chrome Regexp engine state.combineTokens = true; return "link"; } stream.next(); return null; }, blankLine: blankLine }; var markdownConfig = { underscoresBreakWords: false, taskLists: true, fencedCodeBlocks: true, strikethrough: true }; for (var attr in modeConfig) { markdownConfig[attr] = modeConfig[attr]; } markdownConfig.name = "markdown"; CodeMirror.defineMIME("gfmBase", markdownConfig); return CodeMirror.overlayMode(CodeMirror.getMode(config, "gfmBase"), gfmOverlay); }, "markdown"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/gfm/index.html ================================================ CodeMirror: GFM mode

                  GFM mode

                  Optionally depends on other modes for properly highlighted code blocks.

                  Parsing/Highlighting Tests: normal, verbose.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/gfm/test.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function() { var mode = CodeMirror.getMode({tabSize: 4}, "gfm"); function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } var modeHighlightFormatting = CodeMirror.getMode({tabSize: 4}, {name: "gfm", highlightFormatting: true}); function FT(name) { test.mode(name, modeHighlightFormatting, Array.prototype.slice.call(arguments, 1)); } FT("codeBackticks", "[comment&formatting&formatting-code `][comment foo][comment&formatting&formatting-code `]"); FT("doubleBackticks", "[comment&formatting&formatting-code ``][comment foo ` bar][comment&formatting&formatting-code ``]"); FT("codeBlock", "[comment&formatting&formatting-code-block ```css]", "[tag foo]", "[comment&formatting&formatting-code-block ```]"); FT("taskList", "[variable-2&formatting&formatting-list&formatting-list-ul - ][meta&formatting&formatting-task [ ]]][variable-2 foo]", "[variable-2&formatting&formatting-list&formatting-list-ul - ][property&formatting&formatting-task [x]]][variable-2 foo]"); FT("formatting_strikethrough", "[strikethrough&formatting&formatting-strikethrough ~~][strikethrough foo][strikethrough&formatting&formatting-strikethrough ~~]"); FT("formatting_strikethrough", "foo [strikethrough&formatting&formatting-strikethrough ~~][strikethrough bar][strikethrough&formatting&formatting-strikethrough ~~]"); MT("emInWordAsterisk", "foo[em *bar*]hello"); MT("emInWordUnderscore", "foo_bar_hello"); MT("emStrongUnderscore", "[strong __][em&strong _foo__][em _] bar"); MT("fencedCodeBlocks", "[comment ```]", "[comment foo]", "", "[comment ```]", "bar"); MT("fencedCodeBlockModeSwitching", "[comment ```javascript]", "[variable foo]", "", "[comment ```]", "bar"); MT("taskListAsterisk", "[variable-2 * []] foo]", // Invalid; must have space or x between [] "[variable-2 * [ ]]bar]", // Invalid; must have space after ] "[variable-2 * [x]]hello]", // Invalid; must have space after ] "[variable-2 * ][meta [ ]]][variable-2 [world]]]", // Valid; tests reference style links " [variable-3 * ][property [x]]][variable-3 foo]"); // Valid; can be nested MT("taskListPlus", "[variable-2 + []] foo]", // Invalid; must have space or x between [] "[variable-2 + [ ]]bar]", // Invalid; must have space after ] "[variable-2 + [x]]hello]", // Invalid; must have space after ] "[variable-2 + ][meta [ ]]][variable-2 [world]]]", // Valid; tests reference style links " [variable-3 + ][property [x]]][variable-3 foo]"); // Valid; can be nested MT("taskListDash", "[variable-2 - []] foo]", // Invalid; must have space or x between [] "[variable-2 - [ ]]bar]", // Invalid; must have space after ] "[variable-2 - [x]]hello]", // Invalid; must have space after ] "[variable-2 - ][meta [ ]]][variable-2 [world]]]", // Valid; tests reference style links " [variable-3 - ][property [x]]][variable-3 foo]"); // Valid; can be nested MT("taskListNumber", "[variable-2 1. []] foo]", // Invalid; must have space or x between [] "[variable-2 2. [ ]]bar]", // Invalid; must have space after ] "[variable-2 3. [x]]hello]", // Invalid; must have space after ] "[variable-2 4. ][meta [ ]]][variable-2 [world]]]", // Valid; tests reference style links " [variable-3 1. ][property [x]]][variable-3 foo]"); // Valid; can be nested MT("SHA", "foo [link be6a8cc1c1ecfe9489fb51e4869af15a13fc2cd2] bar"); MT("SHAEmphasis", "[em *foo ][em&link be6a8cc1c1ecfe9489fb51e4869af15a13fc2cd2][em *]"); MT("shortSHA", "foo [link be6a8cc] bar"); MT("tooShortSHA", "foo be6a8c bar"); MT("longSHA", "foo be6a8cc1c1ecfe9489fb51e4869af15a13fc2cd22 bar"); MT("badSHA", "foo be6a8cc1c1ecfe9489fb51e4869af15a13fc2cg2 bar"); MT("userSHA", "foo [link bar@be6a8cc1c1ecfe9489fb51e4869af15a13fc2cd2] hello"); MT("userSHAEmphasis", "[em *foo ][em&link bar@be6a8cc1c1ecfe9489fb51e4869af15a13fc2cd2][em *]"); MT("userProjectSHA", "foo [link bar/hello@be6a8cc1c1ecfe9489fb51e4869af15a13fc2cd2] world"); MT("userProjectSHAEmphasis", "[em *foo ][em&link bar/hello@be6a8cc1c1ecfe9489fb51e4869af15a13fc2cd2][em *]"); MT("num", "foo [link #1] bar"); MT("numEmphasis", "[em *foo ][em&link #1][em *]"); MT("badNum", "foo #1bar hello"); MT("userNum", "foo [link bar#1] hello"); MT("userNumEmphasis", "[em *foo ][em&link bar#1][em *]"); MT("userProjectNum", "foo [link bar/hello#1] world"); MT("userProjectNumEmphasis", "[em *foo ][em&link bar/hello#1][em *]"); MT("vanillaLink", "foo [link http://www.example.com/] bar"); MT("vanillaLinkPunctuation", "foo [link http://www.example.com/]. bar"); MT("vanillaLinkExtension", "foo [link http://www.example.com/index.html] bar"); MT("vanillaLinkEmphasis", "foo [em *][em&link http://www.example.com/index.html][em *] bar"); MT("notALink", "[comment ```css]", "[tag foo] {[property color]:[keyword black];}", "[comment ```][link http://www.example.com/]"); MT("notALink", "[comment ``foo `bar` http://www.example.com/``] hello"); MT("notALink", "[comment `foo]", "[link http://www.example.com/]", "[comment `foo]", "", "[link http://www.example.com/]"); MT("headerCodeBlockGithub", "[header&header-1 # heading]", "", "[comment ```]", "[comment code]", "[comment ```]", "", "Commit: [link be6a8cc1c1ecfe9489fb51e4869af15a13fc2cd2]", "Issue: [link #1]", "Link: [link http://www.example.com/]"); MT("strikethrough", "[strikethrough ~~foo~~]"); MT("strikethroughWithStartingSpace", "~~ foo~~"); MT("strikethroughUnclosedStrayTildes", "[strikethrough ~~foo~~~]"); MT("strikethroughUnclosedStrayTildes", "[strikethrough ~~foo ~~]"); MT("strikethroughUnclosedStrayTildes", "[strikethrough ~~foo ~~ bar]"); MT("strikethroughUnclosedStrayTildes", "[strikethrough ~~foo ~~ bar~~]hello"); MT("strikethroughOneLetter", "[strikethrough ~~a~~]"); MT("strikethroughWrapped", "[strikethrough ~~foo]", "[strikethrough foo~~]"); MT("strikethroughParagraph", "[strikethrough ~~foo]", "", "foo[strikethrough ~~bar]"); MT("strikethroughEm", "[strikethrough ~~foo][em&strikethrough *bar*][strikethrough ~~]"); MT("strikethroughEm", "[em *][em&strikethrough ~~foo~~][em *]"); MT("strikethroughStrong", "[strikethrough ~~][strong&strikethrough **foo**][strikethrough ~~]"); MT("strikethroughStrong", "[strong **][strong&strikethrough ~~foo~~][strong **]"); })(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/gherkin/gherkin.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE /* Gherkin mode - http://www.cukes.info/ Report bugs/issues here: https://github.com/codemirror/CodeMirror/issues */ // Following Objs from Brackets implementation: https://github.com/tregusti/brackets-gherkin/blob/master/main.js //var Quotes = { // SINGLE: 1, // DOUBLE: 2 //}; //var regex = { // keywords: /(Feature| {2}(Scenario|In order to|As|I)| {4}(Given|When|Then|And))/ //}; (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("gherkin", function () { return { startState: function () { return { lineNumber: 0, tableHeaderLine: false, allowFeature: true, allowBackground: false, allowScenario: false, allowSteps: false, allowPlaceholders: false, allowMultilineArgument: false, inMultilineString: false, inMultilineTable: false, inKeywordLine: false }; }, token: function (stream, state) { if (stream.sol()) { state.lineNumber++; state.inKeywordLine = false; if (state.inMultilineTable) { state.tableHeaderLine = false; if (!stream.match(/\s*\|/, false)) { state.allowMultilineArgument = false; state.inMultilineTable = false; } } } stream.eatSpace(); if (state.allowMultilineArgument) { // STRING if (state.inMultilineString) { if (stream.match('"""')) { state.inMultilineString = false; state.allowMultilineArgument = false; } else { stream.match(/.*/); } return "string"; } // TABLE if (state.inMultilineTable) { if (stream.match(/\|\s*/)) { return "bracket"; } else { stream.match(/[^\|]*/); return state.tableHeaderLine ? "header" : "string"; } } // DETECT START if (stream.match('"""')) { // String state.inMultilineString = true; return "string"; } else if (stream.match("|")) { // Table state.inMultilineTable = true; state.tableHeaderLine = true; return "bracket"; } } // LINE COMMENT if (stream.match(/#.*/)) { return "comment"; // TAG } else if (!state.inKeywordLine && stream.match(/@\S+/)) { return "tag"; // FEATURE } else if (!state.inKeywordLine && state.allowFeature && stream.match(/(機能|功能|フィーチャ|기능|โครงหลัก|ความสามารถ|ความต้องการทางธุรกิจ|ಹೆಚ್ಚಳ|గుణము|ਮੁਹਾਂਦਰਾ|ਨਕਸ਼ ਨੁਹਾਰ|ਖਾਸੀਅਤ|रूप लेख|وِیژگی|خاصية|תכונה|Функціонал|Функция|Функционалност|Функционал|Үзенчәлеклелек|Свойство|Особина|Мөмкинлек|Могућност|Λειτουργία|Δυνατότητα|Właściwość|Vlastnosť|Trajto|Tính năng|Savybė|Pretty much|Požiadavka|Požadavek|Potrzeba biznesowa|Özellik|Osobina|Ominaisuus|Omadus|OH HAI|Mogućnost|Mogucnost|Jellemző|Hwæt|Hwaet|Funzionalità|Funktionalitéit|Funktionalität|Funkcja|Funkcionalnost|Funkcionalitāte|Funkcia|Fungsi|Functionaliteit|Funcționalitate|Funcţionalitate|Functionalitate|Funcionalitat|Funcionalidade|Fonctionnalité|Fitur|Fīča|Feature|Eiginleiki|Egenskap|Egenskab|Característica|Caracteristica|Business Need|Aspekt|Arwedd|Ahoy matey!|Ability):/)) { state.allowScenario = true; state.allowBackground = true; state.allowPlaceholders = false; state.allowSteps = false; state.allowMultilineArgument = false; state.inKeywordLine = true; return "keyword"; // BACKGROUND } else if (!state.inKeywordLine && state.allowBackground && stream.match(/(背景|배경|แนวคิด|ಹಿನ್ನೆಲೆ|నేపథ్యం|ਪਿਛੋਕੜ|पृष्ठभूमि|زمینه|الخلفية|רקע|Тарих|Предыстория|Предистория|Позадина|Передумова|Основа|Контекст|Кереш|Υπόβαθρο|Założenia|Yo\-ho\-ho|Tausta|Taust|Situācija|Rerefons|Pozadina|Pozadie|Pozadí|Osnova|Latar Belakang|Kontext|Konteksts|Kontekstas|Kontekst|Háttér|Hannergrond|Grundlage|Geçmiş|Fundo|Fono|First off|Dis is what went down|Dasar|Contexto|Contexte|Context|Contesto|Cenário de Fundo|Cenario de Fundo|Cefndir|Bối cảnh|Bakgrunnur|Bakgrunn|Bakgrund|Baggrund|Background|B4|Antecedents|Antecedentes|Ær|Aer|Achtergrond):/)) { state.allowPlaceholders = false; state.allowSteps = true; state.allowBackground = false; state.allowMultilineArgument = false; state.inKeywordLine = true; return "keyword"; // SCENARIO OUTLINE } else if (!state.inKeywordLine && state.allowScenario && stream.match(/(場景大綱|场景大纲|劇本大綱|剧本大纲|テンプレ|シナリオテンプレート|シナリオテンプレ|シナリオアウトライン|시나리오 개요|สรุปเหตุการณ์|โครงสร้างของเหตุการณ์|ವಿವರಣೆ|కథనం|ਪਟਕਥਾ ਰੂਪ ਰੇਖਾ|ਪਟਕਥਾ ਢਾਂਚਾ|परिदृश्य रूपरेखा|سيناريو مخطط|الگوی سناریو|תבנית תרחיש|Сценарийның төзелеше|Сценарий структураси|Структура сценарію|Структура сценария|Структура сценарија|Скица|Рамка на сценарий|Концепт|Περιγραφή Σεναρίου|Wharrimean is|Template Situai|Template Senario|Template Keadaan|Tapausaihio|Szenariogrundriss|Szablon scenariusza|Swa hwær swa|Swa hwaer swa|Struktura scenarija|Structură scenariu|Structura scenariu|Skica|Skenario konsep|Shiver me timbers|Senaryo taslağı|Schema dello scenario|Scenariomall|Scenariomal|Scenario Template|Scenario Outline|Scenario Amlinellol|Scenārijs pēc parauga|Scenarijaus šablonas|Reckon it's like|Raamstsenaarium|Plang vum Szenario|Plan du Scénario|Plan du scénario|Osnova scénáře|Osnova Scenára|Náčrt Scenáru|Náčrt Scénáře|Náčrt Scenára|MISHUN SRSLY|Menggariskan Senario|Lýsing Dæma|Lýsing Atburðarásar|Konturo de la scenaro|Koncept|Khung tình huống|Khung kịch bản|Forgatókönyv vázlat|Esquema do Cenário|Esquema do Cenario|Esquema del escenario|Esquema de l'escenari|Esbozo do escenario|Delineação do Cenário|Delineacao do Cenario|All y'all|Abstrakt Scenario|Abstract Scenario):/)) { state.allowPlaceholders = true; state.allowSteps = true; state.allowMultilineArgument = false; state.inKeywordLine = true; return "keyword"; // EXAMPLES } else if (state.allowScenario && stream.match(/(例子|例|サンプル|예|ชุดของเหตุการณ์|ชุดของตัวอย่าง|ಉದಾಹರಣೆಗಳು|ఉదాహరణలు|ਉਦਾਹਰਨਾਂ|उदाहरण|نمونه ها|امثلة|דוגמאות|Үрнәкләр|Сценарији|Примеры|Примери|Приклади|Мисоллар|Мисаллар|Σενάρια|Παραδείγματα|You'll wanna|Voorbeelden|Variantai|Tapaukset|Se þe|Se the|Se ðe|Scenarios|Scenariji|Scenarijai|Przykłady|Primjeri|Primeri|Příklady|Príklady|Piemēri|Példák|Pavyzdžiai|Paraugs|Örnekler|Juhtumid|Exemplos|Exemples|Exemple|Exempel|EXAMPLZ|Examples|Esempi|Enghreifftiau|Ekzemploj|Eksempler|Ejemplos|Dữ liệu|Dead men tell no tales|Dæmi|Contoh|Cenários|Cenarios|Beispiller|Beispiele|Atburðarásir):/)) { state.allowPlaceholders = false; state.allowSteps = true; state.allowBackground = false; state.allowMultilineArgument = true; return "keyword"; // SCENARIO } else if (!state.inKeywordLine && state.allowScenario && stream.match(/(場景|场景|劇本|剧本|シナリオ|시나리오|เหตุการณ์|ಕಥಾಸಾರಾಂಶ|సన్నివేశం|ਪਟਕਥਾ|परिदृश्य|سيناريو|سناریو|תרחיש|Сценарій|Сценарио|Сценарий|Пример|Σενάριο|Tình huống|The thing of it is|Tapaus|Szenario|Swa|Stsenaarium|Skenario|Situai|Senaryo|Senario|Scenaro|Scenariusz|Scenariu|Scénario|Scenario|Scenarijus|Scenārijs|Scenarij|Scenarie|Scénář|Scenár|Primer|MISHUN|Kịch bản|Keadaan|Heave to|Forgatókönyv|Escenario|Escenari|Cenário|Cenario|Awww, look mate|Atburðarás):/)) { state.allowPlaceholders = false; state.allowSteps = true; state.allowBackground = false; state.allowMultilineArgument = false; state.inKeywordLine = true; return "keyword"; // STEPS } else if (!state.inKeywordLine && state.allowSteps && stream.match(/(那麼|那么|而且|當|当|并且|同時|同时|前提|假设|假設|假定|假如|但是|但し|並且|もし|ならば|ただし|しかし|かつ|하지만|조건|먼저|만일|만약|단|그리고|그러면|และ |เมื่อ |แต่ |ดังนั้น |กำหนดให้ |ಸ್ಥಿತಿಯನ್ನು |ಮತ್ತು |ನೀಡಿದ |ನಂತರ |ಆದರೆ |మరియు |చెప్పబడినది |కాని |ఈ పరిస్థితిలో |అప్పుడు |ਪਰ |ਤਦ |ਜੇਕਰ |ਜਿਵੇਂ ਕਿ |ਜਦੋਂ |ਅਤੇ |यदि |परन्तु |पर |तब |तदा |तथा |जब |चूंकि |किन्तु |कदा |और |अगर |و |هنگامی |متى |لكن |عندما |ثم |بفرض |با فرض |اما |اذاً |آنگاه |כאשר |וגם |בהינתן |אזי |אז |אבל |Якщо |Һәм |Унда |Тоді |Тогда |То |Также |Та |Пусть |Припустимо, що |Припустимо |Онда |Но |Нехай |Нәтиҗәдә |Лекин |Ләкин |Коли |Когда |Когато |Када |Кад |К тому же |І |И |Задато |Задати |Задате |Если |Допустим |Дано |Дадено |Вә |Ва |Бирок |Әмма |Әйтик |Әгәр |Аммо |Али |Але |Агар |А також |А |Τότε |Όταν |Και |Δεδομένου |Αλλά |Þurh |Þegar |Þa þe |Þá |Þa |Zatati |Zakładając |Zadato |Zadate |Zadano |Zadani |Zadan |Za předpokladu |Za predpokladu |Youse know when youse got |Youse know like when |Yna |Yeah nah |Y'know |Y |Wun |Wtedy |When y'all |When |Wenn |WEN |wann |Ve |Và |Und |Un |ugeholl |Too right |Thurh |Thì |Then y'all |Then |Tha the |Tha |Tetapi |Tapi |Tak |Tada |Tad |Stel |Soit |Siis |Și |Şi |Si |Sed |Se |Så |Quando |Quand |Quan |Pryd |Potom |Pokud |Pokiaľ |Però |Pero |Pak |Oraz |Onda |Ond |Oletetaan |Og |Och |O zaman |Niin |Nhưng |När |Når |Mutta |Men |Mas |Maka |Majd |Mając |Mais |Maar |mä |Ma |Lorsque |Lorsqu'|Logo |Let go and haul |Kun |Kuid |Kui |Kiedy |Khi |Ketika |Kemudian |Keď |Když |Kaj |Kai |Kada |Kad |Jeżeli |Jeśli |Ja |It's just unbelievable |Ir |I CAN HAZ |I |Ha |Givun |Givet |Given y'all |Given |Gitt |Gegeven |Gegeben seien |Gegeben sei |Gdy |Gangway! |Fakat |Étant donnés |Etant donnés |Étant données |Etant données |Étant donnée |Etant donnée |Étant donné |Etant donné |Et |És |Entonces |Entón |Então |Entao |En |Eğer ki |Ef |Eeldades |E |Ðurh |Duota |Dun |Donitaĵo |Donat |Donada |Do |Diyelim ki |Diberi |Dengan |Den youse gotta |DEN |De |Dato |Dați fiind |Daţi fiind |Dati fiind |Dati |Date fiind |Date |Data |Dat fiind |Dar |Dann |dann |Dan |Dados |Dado |Dadas |Dada |Ða ðe |Ða |Cuando |Cho |Cando |Când |Cand |Cal |But y'all |But at the end of the day I reckon |BUT |But |Buh |Blimey! |Biết |Bet |Bagi |Aye |awer |Avast! |Atunci |Atesa |Atès |Apabila |Anrhegedig a |Angenommen |And y'all |And |AN |An |an |Amikor |Amennyiben |Ama |Als |Alors |Allora |Ali |Aleshores |Ale |Akkor |Ak |Adott |Ac |Aber |A zároveň |A tiež |A taktiež |A také |A |a |7 |\* )/)) { state.inStep = true; state.allowPlaceholders = true; state.allowMultilineArgument = true; state.inKeywordLine = true; return "keyword"; // INLINE STRING } else if (stream.match(/"[^"]*"?/)) { return "string"; // PLACEHOLDER } else if (state.allowPlaceholders && stream.match(/<[^>]*>?/)) { return "variable"; // Fall through } else { stream.next(); stream.eatWhile(/[^@"<#]/); return null; } } }; }); CodeMirror.defineMIME("text/x-feature", "gherkin"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/gherkin/index.html ================================================ CodeMirror: Gherkin mode

                  Gherkin mode

                  MIME types defined: text/x-feature.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/go/go.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("go", function(config) { var indentUnit = config.indentUnit; var keywords = { "break":true, "case":true, "chan":true, "const":true, "continue":true, "default":true, "defer":true, "else":true, "fallthrough":true, "for":true, "func":true, "go":true, "goto":true, "if":true, "import":true, "interface":true, "map":true, "package":true, "range":true, "return":true, "select":true, "struct":true, "switch":true, "type":true, "var":true, "bool":true, "byte":true, "complex64":true, "complex128":true, "float32":true, "float64":true, "int8":true, "int16":true, "int32":true, "int64":true, "string":true, "uint8":true, "uint16":true, "uint32":true, "uint64":true, "int":true, "uint":true, "uintptr":true }; var atoms = { "true":true, "false":true, "iota":true, "nil":true, "append":true, "cap":true, "close":true, "complex":true, "copy":true, "imag":true, "len":true, "make":true, "new":true, "panic":true, "print":true, "println":true, "real":true, "recover":true }; var isOperatorChar = /[+\-*&^%:=<>!|\/]/; var curPunc; function tokenBase(stream, state) { var ch = stream.next(); if (ch == '"' || ch == "'" || ch == "`") { state.tokenize = tokenString(ch); return state.tokenize(stream, state); } if (/[\d\.]/.test(ch)) { if (ch == ".") { stream.match(/^[0-9]+([eE][\-+]?[0-9]+)?/); } else if (ch == "0") { stream.match(/^[xX][0-9a-fA-F]+/) || stream.match(/^0[0-7]+/); } else { stream.match(/^[0-9]*\.?[0-9]*([eE][\-+]?[0-9]+)?/); } return "number"; } if (/[\[\]{}\(\),;\:\.]/.test(ch)) { curPunc = ch; return null; } if (ch == "/") { if (stream.eat("*")) { state.tokenize = tokenComment; return tokenComment(stream, state); } if (stream.eat("/")) { stream.skipToEnd(); return "comment"; } } if (isOperatorChar.test(ch)) { stream.eatWhile(isOperatorChar); return "operator"; } stream.eatWhile(/[\w\$_\xa1-\uffff]/); var cur = stream.current(); if (keywords.propertyIsEnumerable(cur)) { if (cur == "case" || cur == "default") curPunc = "case"; return "keyword"; } if (atoms.propertyIsEnumerable(cur)) return "atom"; return "variable"; } function tokenString(quote) { return function(stream, state) { var escaped = false, next, end = false; while ((next = stream.next()) != null) { if (next == quote && !escaped) {end = true; break;} escaped = !escaped && next == "\\"; } if (end || !(escaped || quote == "`")) state.tokenize = tokenBase; return "string"; }; } function tokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "/" && maybeEnd) { state.tokenize = tokenBase; break; } maybeEnd = (ch == "*"); } return "comment"; } function Context(indented, column, type, align, prev) { this.indented = indented; this.column = column; this.type = type; this.align = align; this.prev = prev; } function pushContext(state, col, type) { return state.context = new Context(state.indented, col, type, null, state.context); } function popContext(state) { if (!state.context.prev) return; var t = state.context.type; if (t == ")" || t == "]" || t == "}") state.indented = state.context.indented; return state.context = state.context.prev; } // Interface return { startState: function(basecolumn) { return { tokenize: null, context: new Context((basecolumn || 0) - indentUnit, 0, "top", false), indented: 0, startOfLine: true }; }, token: function(stream, state) { var ctx = state.context; if (stream.sol()) { if (ctx.align == null) ctx.align = false; state.indented = stream.indentation(); state.startOfLine = true; if (ctx.type == "case") ctx.type = "}"; } if (stream.eatSpace()) return null; curPunc = null; var style = (state.tokenize || tokenBase)(stream, state); if (style == "comment") return style; if (ctx.align == null) ctx.align = true; if (curPunc == "{") pushContext(state, stream.column(), "}"); else if (curPunc == "[") pushContext(state, stream.column(), "]"); else if (curPunc == "(") pushContext(state, stream.column(), ")"); else if (curPunc == "case") ctx.type = "case"; else if (curPunc == "}" && ctx.type == "}") ctx = popContext(state); else if (curPunc == ctx.type) popContext(state); state.startOfLine = false; return style; }, indent: function(state, textAfter) { if (state.tokenize != tokenBase && state.tokenize != null) return 0; var ctx = state.context, firstChar = textAfter && textAfter.charAt(0); if (ctx.type == "case" && /^(?:case|default)\b/.test(textAfter)) { state.context.type = "}"; return ctx.indented; } var closing = firstChar == ctx.type; if (ctx.align) return ctx.column + (closing ? 0 : 1); else return ctx.indented + (closing ? 0 : indentUnit); }, electricChars: "{}):", fold: "brace", blockCommentStart: "/*", blockCommentEnd: "*/", lineComment: "//" }; }); CodeMirror.defineMIME("text/x-go", "go"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/go/index.html ================================================ CodeMirror: Go mode

                  Go mode

                  MIME type: text/x-go

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/groovy/groovy.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("groovy", function(config) { function words(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } var keywords = words( "abstract as assert boolean break byte case catch char class const continue def default " + "do double else enum extends final finally float for goto if implements import in " + "instanceof int interface long native new package private protected public return " + "short static strictfp super switch synchronized threadsafe throw throws transient " + "try void volatile while"); var blockKeywords = words("catch class do else finally for if switch try while enum interface def"); var atoms = words("null true false this"); var curPunc; function tokenBase(stream, state) { var ch = stream.next(); if (ch == '"' || ch == "'") { return startString(ch, stream, state); } if (/[\[\]{}\(\),;\:\.]/.test(ch)) { curPunc = ch; return null; } if (/\d/.test(ch)) { stream.eatWhile(/[\w\.]/); if (stream.eat(/eE/)) { stream.eat(/\+\-/); stream.eatWhile(/\d/); } return "number"; } if (ch == "/") { if (stream.eat("*")) { state.tokenize.push(tokenComment); return tokenComment(stream, state); } if (stream.eat("/")) { stream.skipToEnd(); return "comment"; } if (expectExpression(state.lastToken)) { return startString(ch, stream, state); } } if (ch == "-" && stream.eat(">")) { curPunc = "->"; return null; } if (/[+\-*&%=<>!?|\/~]/.test(ch)) { stream.eatWhile(/[+\-*&%=<>|~]/); return "operator"; } stream.eatWhile(/[\w\$_]/); if (ch == "@") { stream.eatWhile(/[\w\$_\.]/); return "meta"; } if (state.lastToken == ".") return "property"; if (stream.eat(":")) { curPunc = "proplabel"; return "property"; } var cur = stream.current(); if (atoms.propertyIsEnumerable(cur)) { return "atom"; } if (keywords.propertyIsEnumerable(cur)) { if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; return "keyword"; } return "variable"; } tokenBase.isBase = true; function startString(quote, stream, state) { var tripleQuoted = false; if (quote != "/" && stream.eat(quote)) { if (stream.eat(quote)) tripleQuoted = true; else return "string"; } function t(stream, state) { var escaped = false, next, end = !tripleQuoted; while ((next = stream.next()) != null) { if (next == quote && !escaped) { if (!tripleQuoted) { break; } if (stream.match(quote + quote)) { end = true; break; } } if (quote == '"' && next == "$" && !escaped && stream.eat("{")) { state.tokenize.push(tokenBaseUntilBrace()); return "string"; } escaped = !escaped && next == "\\"; } if (end) state.tokenize.pop(); return "string"; } state.tokenize.push(t); return t(stream, state); } function tokenBaseUntilBrace() { var depth = 1; function t(stream, state) { if (stream.peek() == "}") { depth--; if (depth == 0) { state.tokenize.pop(); return state.tokenize[state.tokenize.length-1](stream, state); } } else if (stream.peek() == "{") { depth++; } return tokenBase(stream, state); } t.isBase = true; return t; } function tokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "/" && maybeEnd) { state.tokenize.pop(); break; } maybeEnd = (ch == "*"); } return "comment"; } function expectExpression(last) { return !last || last == "operator" || last == "->" || /[\.\[\{\(,;:]/.test(last) || last == "newstatement" || last == "keyword" || last == "proplabel"; } function Context(indented, column, type, align, prev) { this.indented = indented; this.column = column; this.type = type; this.align = align; this.prev = prev; } function pushContext(state, col, type) { return state.context = new Context(state.indented, col, type, null, state.context); } function popContext(state) { var t = state.context.type; if (t == ")" || t == "]" || t == "}") state.indented = state.context.indented; return state.context = state.context.prev; } // Interface return { startState: function(basecolumn) { return { tokenize: [tokenBase], context: new Context((basecolumn || 0) - config.indentUnit, 0, "top", false), indented: 0, startOfLine: true, lastToken: null }; }, token: function(stream, state) { var ctx = state.context; if (stream.sol()) { if (ctx.align == null) ctx.align = false; state.indented = stream.indentation(); state.startOfLine = true; // Automatic semicolon insertion if (ctx.type == "statement" && !expectExpression(state.lastToken)) { popContext(state); ctx = state.context; } } if (stream.eatSpace()) return null; curPunc = null; var style = state.tokenize[state.tokenize.length-1](stream, state); if (style == "comment") return style; if (ctx.align == null) ctx.align = true; if ((curPunc == ";" || curPunc == ":") && ctx.type == "statement") popContext(state); // Handle indentation for {x -> \n ... } else if (curPunc == "->" && ctx.type == "statement" && ctx.prev.type == "}") { popContext(state); state.context.align = false; } else if (curPunc == "{") pushContext(state, stream.column(), "}"); else if (curPunc == "[") pushContext(state, stream.column(), "]"); else if (curPunc == "(") pushContext(state, stream.column(), ")"); else if (curPunc == "}") { while (ctx.type == "statement") ctx = popContext(state); if (ctx.type == "}") ctx = popContext(state); while (ctx.type == "statement") ctx = popContext(state); } else if (curPunc == ctx.type) popContext(state); else if (ctx.type == "}" || ctx.type == "top" || (ctx.type == "statement" && curPunc == "newstatement")) pushContext(state, stream.column(), "statement"); state.startOfLine = false; state.lastToken = curPunc || style; return style; }, indent: function(state, textAfter) { if (!state.tokenize[state.tokenize.length-1].isBase) return 0; var firstChar = textAfter && textAfter.charAt(0), ctx = state.context; if (ctx.type == "statement" && !expectExpression(state.lastToken)) ctx = ctx.prev; var closing = firstChar == ctx.type; if (ctx.type == "statement") return ctx.indented + (firstChar == "{" ? 0 : config.indentUnit); else if (ctx.align) return ctx.column + (closing ? 0 : 1); else return ctx.indented + (closing ? 0 : config.indentUnit); }, electricChars: "{}", fold: "brace" }; }); CodeMirror.defineMIME("text/x-groovy", "groovy"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/groovy/index.html ================================================ CodeMirror: Groovy mode

                  Groovy mode

                  MIME types defined: text/x-groovy

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/haml/haml.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../htmlmixed/htmlmixed"), require("../ruby/ruby")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../htmlmixed/htmlmixed", "../ruby/ruby"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; // full haml mode. This handled embeded ruby and html fragments too CodeMirror.defineMode("haml", function(config) { var htmlMode = CodeMirror.getMode(config, {name: "htmlmixed"}); var rubyMode = CodeMirror.getMode(config, "ruby"); function rubyInQuote(endQuote) { return function(stream, state) { var ch = stream.peek(); if (ch == endQuote && state.rubyState.tokenize.length == 1) { // step out of ruby context as it seems to complete processing all the braces stream.next(); state.tokenize = html; return "closeAttributeTag"; } else { return ruby(stream, state); } }; } function ruby(stream, state) { if (stream.match("-#")) { stream.skipToEnd(); return "comment"; } return rubyMode.token(stream, state.rubyState); } function html(stream, state) { var ch = stream.peek(); // handle haml declarations. All declarations that cant be handled here // will be passed to html mode if (state.previousToken.style == "comment" ) { if (state.indented > state.previousToken.indented) { stream.skipToEnd(); return "commentLine"; } } if (state.startOfLine) { if (ch == "!" && stream.match("!!")) { stream.skipToEnd(); return "tag"; } else if (stream.match(/^%[\w:#\.]+=/)) { state.tokenize = ruby; return "hamlTag"; } else if (stream.match(/^%[\w:]+/)) { return "hamlTag"; } else if (ch == "/" ) { stream.skipToEnd(); return "comment"; } } if (state.startOfLine || state.previousToken.style == "hamlTag") { if ( ch == "#" || ch == ".") { stream.match(/[\w-#\.]*/); return "hamlAttribute"; } } // donot handle --> as valid ruby, make it HTML close comment instead if (state.startOfLine && !stream.match("-->", false) && (ch == "=" || ch == "-" )) { state.tokenize = ruby; return state.tokenize(stream, state); } if (state.previousToken.style == "hamlTag" || state.previousToken.style == "closeAttributeTag" || state.previousToken.style == "hamlAttribute") { if (ch == "(") { state.tokenize = rubyInQuote(")"); return state.tokenize(stream, state); } else if (ch == "{") { state.tokenize = rubyInQuote("}"); return state.tokenize(stream, state); } } return htmlMode.token(stream, state.htmlState); } return { // default to html mode startState: function() { var htmlState = htmlMode.startState(); var rubyState = rubyMode.startState(); return { htmlState: htmlState, rubyState: rubyState, indented: 0, previousToken: { style: null, indented: 0}, tokenize: html }; }, copyState: function(state) { return { htmlState : CodeMirror.copyState(htmlMode, state.htmlState), rubyState: CodeMirror.copyState(rubyMode, state.rubyState), indented: state.indented, previousToken: state.previousToken, tokenize: state.tokenize }; }, token: function(stream, state) { if (stream.sol()) { state.indented = stream.indentation(); state.startOfLine = true; } if (stream.eatSpace()) return null; var style = state.tokenize(stream, state); state.startOfLine = false; // dont record comment line as we only want to measure comment line with // the opening comment block if (style && style != "commentLine") { state.previousToken = { style: style, indented: state.indented }; } // if current state is ruby and the previous token is not `,` reset the // tokenize to html if (stream.eol() && state.tokenize == ruby) { stream.backUp(1); var ch = stream.peek(); stream.next(); if (ch && ch != ",") { state.tokenize = html; } } // reprocess some of the specific style tag when finish setting previousToken if (style == "hamlTag") { style = "tag"; } else if (style == "commentLine") { style = "comment"; } else if (style == "hamlAttribute") { style = "attribute"; } else if (style == "closeAttributeTag") { style = null; } return style; } }; }, "htmlmixed", "ruby"); CodeMirror.defineMIME("text/x-haml", "haml"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/haml/index.html ================================================ CodeMirror: HAML mode

                  HAML mode

                  MIME types defined: text/x-haml.

                  Parsing/Highlighting Tests: normal, verbose.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/haml/test.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function() { var mode = CodeMirror.getMode({tabSize: 4, indentUnit: 2}, "haml"); function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } // Requires at least one media query MT("elementName", "[tag %h1] Hey There"); MT("oneElementPerLine", "[tag %h1] Hey There %h2"); MT("idSelector", "[tag %h1][attribute #test] Hey There"); MT("classSelector", "[tag %h1][attribute .hello] Hey There"); MT("docType", "[tag !!! XML]"); MT("comment", "[comment / Hello WORLD]"); MT("notComment", "[tag %h1] This is not a / comment "); MT("attributes", "[tag %a]([variable title][operator =][string \"test\"]){[atom :title] [operator =>] [string \"test\"]}"); MT("htmlCode", "[tag&bracket <][tag h1][tag&bracket >]Title[tag&bracket ]"); MT("rubyBlock", "[operator =][variable-2 @item]"); MT("selectorRubyBlock", "[tag %a.selector=] [variable-2 @item]"); MT("nestedRubyBlock", "[tag %a]", " [operator =][variable puts] [string \"test\"]"); MT("multilinePlaintext", "[tag %p]", " Hello,", " World"); MT("multilineRuby", "[tag %p]", " [comment -# this is a comment]", " [comment and this is a comment too]", " Date/Time", " [operator -] [variable now] [operator =] [tag DateTime][operator .][property now]", " [tag %strong=] [variable now]", " [operator -] [keyword if] [variable now] [operator >] [tag DateTime][operator .][property parse]([string \"December 31, 2006\"])", " [operator =][string \"Happy\"]", " [operator =][string \"Belated\"]", " [operator =][string \"Birthday\"]"); MT("multilineComment", "[comment /]", " [comment Multiline]", " [comment Comment]"); MT("hamlComment", "[comment -# this is a comment]"); MT("multilineHamlComment", "[comment -# this is a comment]", " [comment and this is a comment too]"); MT("multilineHTMLComment", "[comment ]"); MT("hamlAfterRubyTag", "[attribute .block]", " [tag %strong=] [variable now]", " [attribute .test]", " [operator =][variable now]", " [attribute .right]"); MT("stretchedRuby", "[operator =] [variable puts] [string \"Hello\"],", " [string \"World\"]"); MT("interpolationInHashAttribute", //"[tag %div]{[atom :id] [operator =>] [string \"#{][variable test][string }_#{][variable ting][string }\"]} test"); "[tag %div]{[atom :id] [operator =>] [string \"#{][variable test][string }_#{][variable ting][string }\"]} test"); MT("interpolationInHTMLAttribute", "[tag %div]([variable title][operator =][string \"#{][variable test][string }_#{][variable ting]()[string }\"]) Test"); })(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/haskell/haskell.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("haskell", function(_config, modeConfig) { function switchState(source, setState, f) { setState(f); return f(source, setState); } // These should all be Unicode extended, as per the Haskell 2010 report var smallRE = /[a-z_]/; var largeRE = /[A-Z]/; var digitRE = /\d/; var hexitRE = /[0-9A-Fa-f]/; var octitRE = /[0-7]/; var idRE = /[a-z_A-Z0-9'\xa1-\uffff]/; var symbolRE = /[-!#$%&*+.\/<=>?@\\^|~:]/; var specialRE = /[(),;[\]`{}]/; var whiteCharRE = /[ \t\v\f]/; // newlines are handled in tokenizer function normal(source, setState) { if (source.eatWhile(whiteCharRE)) { return null; } var ch = source.next(); if (specialRE.test(ch)) { if (ch == '{' && source.eat('-')) { var t = "comment"; if (source.eat('#')) { t = "meta"; } return switchState(source, setState, ncomment(t, 1)); } return null; } if (ch == '\'') { if (source.eat('\\')) { source.next(); // should handle other escapes here } else { source.next(); } if (source.eat('\'')) { return "string"; } return "error"; } if (ch == '"') { return switchState(source, setState, stringLiteral); } if (largeRE.test(ch)) { source.eatWhile(idRE); if (source.eat('.')) { return "qualifier"; } return "variable-2"; } if (smallRE.test(ch)) { source.eatWhile(idRE); return "variable"; } if (digitRE.test(ch)) { if (ch == '0') { if (source.eat(/[xX]/)) { source.eatWhile(hexitRE); // should require at least 1 return "integer"; } if (source.eat(/[oO]/)) { source.eatWhile(octitRE); // should require at least 1 return "number"; } } source.eatWhile(digitRE); var t = "number"; if (source.match(/^\.\d+/)) { t = "number"; } if (source.eat(/[eE]/)) { t = "number"; source.eat(/[-+]/); source.eatWhile(digitRE); // should require at least 1 } return t; } if (ch == "." && source.eat(".")) return "keyword"; if (symbolRE.test(ch)) { if (ch == '-' && source.eat(/-/)) { source.eatWhile(/-/); if (!source.eat(symbolRE)) { source.skipToEnd(); return "comment"; } } var t = "variable"; if (ch == ':') { t = "variable-2"; } source.eatWhile(symbolRE); return t; } return "error"; } function ncomment(type, nest) { if (nest == 0) { return normal; } return function(source, setState) { var currNest = nest; while (!source.eol()) { var ch = source.next(); if (ch == '{' && source.eat('-')) { ++currNest; } else if (ch == '-' && source.eat('}')) { --currNest; if (currNest == 0) { setState(normal); return type; } } } setState(ncomment(type, currNest)); return type; }; } function stringLiteral(source, setState) { while (!source.eol()) { var ch = source.next(); if (ch == '"') { setState(normal); return "string"; } if (ch == '\\') { if (source.eol() || source.eat(whiteCharRE)) { setState(stringGap); return "string"; } if (source.eat('&')) { } else { source.next(); // should handle other escapes here } } } setState(normal); return "error"; } function stringGap(source, setState) { if (source.eat('\\')) { return switchState(source, setState, stringLiteral); } source.next(); setState(normal); return "error"; } var wellKnownWords = (function() { var wkw = {}; function setType(t) { return function () { for (var i = 0; i < arguments.length; i++) wkw[arguments[i]] = t; }; } setType("keyword")( "case", "class", "data", "default", "deriving", "do", "else", "foreign", "if", "import", "in", "infix", "infixl", "infixr", "instance", "let", "module", "newtype", "of", "then", "type", "where", "_"); setType("keyword")( "\.\.", ":", "::", "=", "\\", "\"", "<-", "->", "@", "~", "=>"); setType("builtin")( "!!", "$!", "$", "&&", "+", "++", "-", ".", "/", "/=", "<", "<=", "=<<", "==", ">", ">=", ">>", ">>=", "^", "^^", "||", "*", "**"); setType("builtin")( "Bool", "Bounded", "Char", "Double", "EQ", "Either", "Enum", "Eq", "False", "FilePath", "Float", "Floating", "Fractional", "Functor", "GT", "IO", "IOError", "Int", "Integer", "Integral", "Just", "LT", "Left", "Maybe", "Monad", "Nothing", "Num", "Ord", "Ordering", "Rational", "Read", "ReadS", "Real", "RealFloat", "RealFrac", "Right", "Show", "ShowS", "String", "True"); setType("builtin")( "abs", "acos", "acosh", "all", "and", "any", "appendFile", "asTypeOf", "asin", "asinh", "atan", "atan2", "atanh", "break", "catch", "ceiling", "compare", "concat", "concatMap", "const", "cos", "cosh", "curry", "cycle", "decodeFloat", "div", "divMod", "drop", "dropWhile", "either", "elem", "encodeFloat", "enumFrom", "enumFromThen", "enumFromThenTo", "enumFromTo", "error", "even", "exp", "exponent", "fail", "filter", "flip", "floatDigits", "floatRadix", "floatRange", "floor", "fmap", "foldl", "foldl1", "foldr", "foldr1", "fromEnum", "fromInteger", "fromIntegral", "fromRational", "fst", "gcd", "getChar", "getContents", "getLine", "head", "id", "init", "interact", "ioError", "isDenormalized", "isIEEE", "isInfinite", "isNaN", "isNegativeZero", "iterate", "last", "lcm", "length", "lex", "lines", "log", "logBase", "lookup", "map", "mapM", "mapM_", "max", "maxBound", "maximum", "maybe", "min", "minBound", "minimum", "mod", "negate", "not", "notElem", "null", "odd", "or", "otherwise", "pi", "pred", "print", "product", "properFraction", "putChar", "putStr", "putStrLn", "quot", "quotRem", "read", "readFile", "readIO", "readList", "readLn", "readParen", "reads", "readsPrec", "realToFrac", "recip", "rem", "repeat", "replicate", "return", "reverse", "round", "scaleFloat", "scanl", "scanl1", "scanr", "scanr1", "seq", "sequence", "sequence_", "show", "showChar", "showList", "showParen", "showString", "shows", "showsPrec", "significand", "signum", "sin", "sinh", "snd", "span", "splitAt", "sqrt", "subtract", "succ", "sum", "tail", "take", "takeWhile", "tan", "tanh", "toEnum", "toInteger", "toRational", "truncate", "uncurry", "undefined", "unlines", "until", "unwords", "unzip", "unzip3", "userError", "words", "writeFile", "zip", "zip3", "zipWith", "zipWith3"); var override = modeConfig.overrideKeywords; if (override) for (var word in override) if (override.hasOwnProperty(word)) wkw[word] = override[word]; return wkw; })(); return { startState: function () { return { f: normal }; }, copyState: function (s) { return { f: s.f }; }, token: function(stream, state) { var t = state.f(stream, function(s) { state.f = s; }); var w = stream.current(); return wellKnownWords.hasOwnProperty(w) ? wellKnownWords[w] : t; }, blockCommentStart: "{-", blockCommentEnd: "-}", lineComment: "--" }; }); CodeMirror.defineMIME("text/x-haskell", "haskell"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/haskell/index.html ================================================ CodeMirror: Haskell mode

                  Haskell mode

                  MIME types defined: text/x-haskell.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/haxe/haxe.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("haxe", function(config, parserConfig) { var indentUnit = config.indentUnit; // Tokenizer var keywords = function(){ function kw(type) {return {type: type, style: "keyword"};} var A = kw("keyword a"), B = kw("keyword b"), C = kw("keyword c"); var operator = kw("operator"), atom = {type: "atom", style: "atom"}, attribute = {type:"attribute", style: "attribute"}; var type = kw("typedef"); return { "if": A, "while": A, "else": B, "do": B, "try": B, "return": C, "break": C, "continue": C, "new": C, "throw": C, "var": kw("var"), "inline":attribute, "static": attribute, "using":kw("import"), "public": attribute, "private": attribute, "cast": kw("cast"), "import": kw("import"), "macro": kw("macro"), "function": kw("function"), "catch": kw("catch"), "untyped": kw("untyped"), "callback": kw("cb"), "for": kw("for"), "switch": kw("switch"), "case": kw("case"), "default": kw("default"), "in": operator, "never": kw("property_access"), "trace":kw("trace"), "class": type, "abstract":type, "enum":type, "interface":type, "typedef":type, "extends":type, "implements":type, "dynamic":type, "true": atom, "false": atom, "null": atom }; }(); var isOperatorChar = /[+\-*&%=<>!?|]/; function chain(stream, state, f) { state.tokenize = f; return f(stream, state); } function nextUntilUnescaped(stream, end) { var escaped = false, next; while ((next = stream.next()) != null) { if (next == end && !escaped) return false; escaped = !escaped && next == "\\"; } return escaped; } // Used as scratch variables to communicate multiple values without // consing up tons of objects. var type, content; function ret(tp, style, cont) { type = tp; content = cont; return style; } function haxeTokenBase(stream, state) { var ch = stream.next(); if (ch == '"' || ch == "'") return chain(stream, state, haxeTokenString(ch)); else if (/[\[\]{}\(\),;\:\.]/.test(ch)) return ret(ch); else if (ch == "0" && stream.eat(/x/i)) { stream.eatWhile(/[\da-f]/i); return ret("number", "number"); } else if (/\d/.test(ch) || ch == "-" && stream.eat(/\d/)) { stream.match(/^\d*(?:\.\d*)?(?:[eE][+\-]?\d+)?/); return ret("number", "number"); } else if (state.reAllowed && (ch == "~" && stream.eat(/\//))) { nextUntilUnescaped(stream, "/"); stream.eatWhile(/[gimsu]/); return ret("regexp", "string-2"); } else if (ch == "/") { if (stream.eat("*")) { return chain(stream, state, haxeTokenComment); } else if (stream.eat("/")) { stream.skipToEnd(); return ret("comment", "comment"); } else { stream.eatWhile(isOperatorChar); return ret("operator", null, stream.current()); } } else if (ch == "#") { stream.skipToEnd(); return ret("conditional", "meta"); } else if (ch == "@") { stream.eat(/:/); stream.eatWhile(/[\w_]/); return ret ("metadata", "meta"); } else if (isOperatorChar.test(ch)) { stream.eatWhile(isOperatorChar); return ret("operator", null, stream.current()); } else { var word; if(/[A-Z]/.test(ch)) { stream.eatWhile(/[\w_<>]/); word = stream.current(); return ret("type", "variable-3", word); } else { stream.eatWhile(/[\w_]/); var word = stream.current(), known = keywords.propertyIsEnumerable(word) && keywords[word]; return (known && state.kwAllowed) ? ret(known.type, known.style, word) : ret("variable", "variable", word); } } } function haxeTokenString(quote) { return function(stream, state) { if (!nextUntilUnescaped(stream, quote)) state.tokenize = haxeTokenBase; return ret("string", "string"); }; } function haxeTokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "/" && maybeEnd) { state.tokenize = haxeTokenBase; break; } maybeEnd = (ch == "*"); } return ret("comment", "comment"); } // Parser var atomicTypes = {"atom": true, "number": true, "variable": true, "string": true, "regexp": true}; function HaxeLexical(indented, column, type, align, prev, info) { this.indented = indented; this.column = column; this.type = type; this.prev = prev; this.info = info; if (align != null) this.align = align; } function inScope(state, varname) { for (var v = state.localVars; v; v = v.next) if (v.name == varname) return true; } function parseHaxe(state, style, type, content, stream) { var cc = state.cc; // Communicate our context to the combinators. // (Less wasteful than consing up a hundred closures on every call.) cx.state = state; cx.stream = stream; cx.marked = null, cx.cc = cc; if (!state.lexical.hasOwnProperty("align")) state.lexical.align = true; while(true) { var combinator = cc.length ? cc.pop() : statement; if (combinator(type, content)) { while(cc.length && cc[cc.length - 1].lex) cc.pop()(); if (cx.marked) return cx.marked; if (type == "variable" && inScope(state, content)) return "variable-2"; if (type == "variable" && imported(state, content)) return "variable-3"; return style; } } } function imported(state, typename) { if (/[a-z]/.test(typename.charAt(0))) return false; var len = state.importedtypes.length; for (var i = 0; i= 0; i--) cx.cc.push(arguments[i]); } function cont() { pass.apply(null, arguments); return true; } function register(varname) { var state = cx.state; if (state.context) { cx.marked = "def"; for (var v = state.localVars; v; v = v.next) if (v.name == varname) return; state.localVars = {name: varname, next: state.localVars}; } } // Combinators var defaultVars = {name: "this", next: null}; function pushcontext() { if (!cx.state.context) cx.state.localVars = defaultVars; cx.state.context = {prev: cx.state.context, vars: cx.state.localVars}; } function popcontext() { cx.state.localVars = cx.state.context.vars; cx.state.context = cx.state.context.prev; } function pushlex(type, info) { var result = function() { var state = cx.state; state.lexical = new HaxeLexical(state.indented, cx.stream.column(), type, null, state.lexical, info); }; result.lex = true; return result; } function poplex() { var state = cx.state; if (state.lexical.prev) { if (state.lexical.type == ")") state.indented = state.lexical.indented; state.lexical = state.lexical.prev; } } poplex.lex = true; function expect(wanted) { function f(type) { if (type == wanted) return cont(); else if (wanted == ";") return pass(); else return cont(f); }; return f; } function statement(type) { if (type == "@") return cont(metadef); if (type == "var") return cont(pushlex("vardef"), vardef1, expect(";"), poplex); if (type == "keyword a") return cont(pushlex("form"), expression, statement, poplex); if (type == "keyword b") return cont(pushlex("form"), statement, poplex); if (type == "{") return cont(pushlex("}"), pushcontext, block, poplex, popcontext); if (type == ";") return cont(); if (type == "attribute") return cont(maybeattribute); if (type == "function") return cont(functiondef); if (type == "for") return cont(pushlex("form"), expect("("), pushlex(")"), forspec1, expect(")"), poplex, statement, poplex); if (type == "variable") return cont(pushlex("stat"), maybelabel); if (type == "switch") return cont(pushlex("form"), expression, pushlex("}", "switch"), expect("{"), block, poplex, poplex); if (type == "case") return cont(expression, expect(":")); if (type == "default") return cont(expect(":")); if (type == "catch") return cont(pushlex("form"), pushcontext, expect("("), funarg, expect(")"), statement, poplex, popcontext); if (type == "import") return cont(importdef, expect(";")); if (type == "typedef") return cont(typedef); return pass(pushlex("stat"), expression, expect(";"), poplex); } function expression(type) { if (atomicTypes.hasOwnProperty(type)) return cont(maybeoperator); if (type == "function") return cont(functiondef); if (type == "keyword c") return cont(maybeexpression); if (type == "(") return cont(pushlex(")"), maybeexpression, expect(")"), poplex, maybeoperator); if (type == "operator") return cont(expression); if (type == "[") return cont(pushlex("]"), commasep(expression, "]"), poplex, maybeoperator); if (type == "{") return cont(pushlex("}"), commasep(objprop, "}"), poplex, maybeoperator); return cont(); } function maybeexpression(type) { if (type.match(/[;\}\)\],]/)) return pass(); return pass(expression); } function maybeoperator(type, value) { if (type == "operator" && /\+\+|--/.test(value)) return cont(maybeoperator); if (type == "operator" || type == ":") return cont(expression); if (type == ";") return; if (type == "(") return cont(pushlex(")"), commasep(expression, ")"), poplex, maybeoperator); if (type == ".") return cont(property, maybeoperator); if (type == "[") return cont(pushlex("]"), expression, expect("]"), poplex, maybeoperator); } function maybeattribute(type) { if (type == "attribute") return cont(maybeattribute); if (type == "function") return cont(functiondef); if (type == "var") return cont(vardef1); } function metadef(type) { if(type == ":") return cont(metadef); if(type == "variable") return cont(metadef); if(type == "(") return cont(pushlex(")"), commasep(metaargs, ")"), poplex, statement); } function metaargs(type) { if(type == "variable") return cont(); } function importdef (type, value) { if(type == "variable" && /[A-Z]/.test(value.charAt(0))) { registerimport(value); return cont(); } else if(type == "variable" || type == "property" || type == "." || value == "*") return cont(importdef); } function typedef (type, value) { if(type == "variable" && /[A-Z]/.test(value.charAt(0))) { registerimport(value); return cont(); } else if (type == "type" && /[A-Z]/.test(value.charAt(0))) { return cont(); } } function maybelabel(type) { if (type == ":") return cont(poplex, statement); return pass(maybeoperator, expect(";"), poplex); } function property(type) { if (type == "variable") {cx.marked = "property"; return cont();} } function objprop(type) { if (type == "variable") cx.marked = "property"; if (atomicTypes.hasOwnProperty(type)) return cont(expect(":"), expression); } function commasep(what, end) { function proceed(type) { if (type == ",") return cont(what, proceed); if (type == end) return cont(); return cont(expect(end)); } return function(type) { if (type == end) return cont(); else return pass(what, proceed); }; } function block(type) { if (type == "}") return cont(); return pass(statement, block); } function vardef1(type, value) { if (type == "variable"){register(value); return cont(typeuse, vardef2);} return cont(); } function vardef2(type, value) { if (value == "=") return cont(expression, vardef2); if (type == ",") return cont(vardef1); } function forspec1(type, value) { if (type == "variable") { register(value); } return cont(pushlex(")"), pushcontext, forin, expression, poplex, statement, popcontext); } function forin(_type, value) { if (value == "in") return cont(); } function functiondef(type, value) { if (type == "variable") {register(value); return cont(functiondef);} if (value == "new") return cont(functiondef); if (type == "(") return cont(pushlex(")"), pushcontext, commasep(funarg, ")"), poplex, typeuse, statement, popcontext); } function typeuse(type) { if(type == ":") return cont(typestring); } function typestring(type) { if(type == "type") return cont(); if(type == "variable") return cont(); if(type == "{") return cont(pushlex("}"), commasep(typeprop, "}"), poplex); } function typeprop(type) { if(type == "variable") return cont(typeuse); } function funarg(type, value) { if (type == "variable") {register(value); return cont(typeuse);} } // Interface return { startState: function(basecolumn) { var defaulttypes = ["Int", "Float", "String", "Void", "Std", "Bool", "Dynamic", "Array"]; return { tokenize: haxeTokenBase, reAllowed: true, kwAllowed: true, cc: [], lexical: new HaxeLexical((basecolumn || 0) - indentUnit, 0, "block", false), localVars: parserConfig.localVars, importedtypes: defaulttypes, context: parserConfig.localVars && {vars: parserConfig.localVars}, indented: 0 }; }, token: function(stream, state) { if (stream.sol()) { if (!state.lexical.hasOwnProperty("align")) state.lexical.align = false; state.indented = stream.indentation(); } if (stream.eatSpace()) return null; var style = state.tokenize(stream, state); if (type == "comment") return style; state.reAllowed = !!(type == "operator" || type == "keyword c" || type.match(/^[\[{}\(,;:]$/)); state.kwAllowed = type != '.'; return parseHaxe(state, style, type, content, stream); }, indent: function(state, textAfter) { if (state.tokenize != haxeTokenBase) return 0; var firstChar = textAfter && textAfter.charAt(0), lexical = state.lexical; if (lexical.type == "stat" && firstChar == "}") lexical = lexical.prev; var type = lexical.type, closing = firstChar == type; if (type == "vardef") return lexical.indented + 4; else if (type == "form" && firstChar == "{") return lexical.indented; else if (type == "stat" || type == "form") return lexical.indented + indentUnit; else if (lexical.info == "switch" && !closing) return lexical.indented + (/^(?:case|default)\b/.test(textAfter) ? indentUnit : 2 * indentUnit); else if (lexical.align) return lexical.column + (closing ? 0 : 1); else return lexical.indented + (closing ? 0 : indentUnit); }, electricChars: "{}", blockCommentStart: "/*", blockCommentEnd: "*/", lineComment: "//" }; }); CodeMirror.defineMIME("text/x-haxe", "haxe"); CodeMirror.defineMode("hxml", function () { return { startState: function () { return { define: false, inString: false }; }, token: function (stream, state) { var ch = stream.peek(); var sol = stream.sol(); ///* comments */ if (ch == "#") { stream.skipToEnd(); return "comment"; } if (sol && ch == "-") { var style = "variable-2"; stream.eat(/-/); if (stream.peek() == "-") { stream.eat(/-/); style = "keyword a"; } if (stream.peek() == "D") { stream.eat(/[D]/); style = "keyword c"; state.define = true; } stream.eatWhile(/[A-Z]/i); return style; } var ch = stream.peek(); if (state.inString == false && ch == "'") { state.inString = true; ch = stream.next(); } if (state.inString == true) { if (stream.skipTo("'")) { } else { stream.skipToEnd(); } if (stream.peek() == "'") { stream.next(); state.inString = false; } return "string"; } stream.next(); return null; }, lineComment: "#" }; }); CodeMirror.defineMIME("text/x-hxml", "hxml"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/haxe/index.html ================================================ CodeMirror: Haxe mode

                  Haxe mode

                  Hxml mode:

                  MIME types defined: text/x-haxe, text/x-hxml.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/htmlembedded/htmlembedded.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../htmlmixed/htmlmixed")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../htmlmixed/htmlmixed"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("htmlembedded", function(config, parserConfig) { //config settings var scriptStartRegex = parserConfig.scriptStartRegex || /^<%/i, scriptEndRegex = parserConfig.scriptEndRegex || /^%>/i; //inner modes var scriptingMode, htmlMixedMode; //tokenizer when in html mode function htmlDispatch(stream, state) { if (stream.match(scriptStartRegex, false)) { state.token=scriptingDispatch; return scriptingMode.token(stream, state.scriptState); } else return htmlMixedMode.token(stream, state.htmlState); } //tokenizer when in scripting mode function scriptingDispatch(stream, state) { if (stream.match(scriptEndRegex, false)) { state.token=htmlDispatch; return htmlMixedMode.token(stream, state.htmlState); } else return scriptingMode.token(stream, state.scriptState); } return { startState: function() { scriptingMode = scriptingMode || CodeMirror.getMode(config, parserConfig.scriptingModeSpec); htmlMixedMode = htmlMixedMode || CodeMirror.getMode(config, "htmlmixed"); return { token : parserConfig.startOpen ? scriptingDispatch : htmlDispatch, htmlState : CodeMirror.startState(htmlMixedMode), scriptState : CodeMirror.startState(scriptingMode) }; }, token: function(stream, state) { return state.token(stream, state); }, indent: function(state, textAfter) { if (state.token == htmlDispatch) return htmlMixedMode.indent(state.htmlState, textAfter); else if (scriptingMode.indent) return scriptingMode.indent(state.scriptState, textAfter); }, copyState: function(state) { return { token : state.token, htmlState : CodeMirror.copyState(htmlMixedMode, state.htmlState), scriptState : CodeMirror.copyState(scriptingMode, state.scriptState) }; }, innerMode: function(state) { if (state.token == scriptingDispatch) return {state: state.scriptState, mode: scriptingMode}; else return {state: state.htmlState, mode: htmlMixedMode}; } }; }, "htmlmixed"); CodeMirror.defineMIME("application/x-ejs", { name: "htmlembedded", scriptingModeSpec:"javascript"}); CodeMirror.defineMIME("application/x-aspx", { name: "htmlembedded", scriptingModeSpec:"text/x-csharp"}); CodeMirror.defineMIME("application/x-jsp", { name: "htmlembedded", scriptingModeSpec:"text/x-java"}); CodeMirror.defineMIME("application/x-erb", { name: "htmlembedded", scriptingModeSpec:"ruby"}); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/htmlembedded/index.html ================================================ CodeMirror: Html Embedded Scripts mode

                  Html Embedded Scripts mode

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

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

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/htmlmixed/htmlmixed.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../xml/xml"), require("../javascript/javascript"), require("../css/css")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../xml/xml", "../javascript/javascript", "../css/css"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("htmlmixed", function(config, parserConfig) { var htmlMode = CodeMirror.getMode(config, {name: "xml", htmlMode: true, multilineTagIndentFactor: parserConfig.multilineTagIndentFactor, multilineTagIndentPastTag: parserConfig.multilineTagIndentPastTag}); var cssMode = CodeMirror.getMode(config, "css"); var scriptTypes = [], scriptTypesConf = parserConfig && parserConfig.scriptTypes; scriptTypes.push({matches: /^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^$/i, mode: CodeMirror.getMode(config, "javascript")}); if (scriptTypesConf) for (var i = 0; i < scriptTypesConf.length; ++i) { var conf = scriptTypesConf[i]; scriptTypes.push({matches: conf.matches, mode: conf.mode && CodeMirror.getMode(config, conf.mode)}); } scriptTypes.push({matches: /./, mode: CodeMirror.getMode(config, "text/plain")}); function html(stream, state) { var tagName = state.htmlState.tagName; if (tagName) tagName = tagName.toLowerCase(); var style = htmlMode.token(stream, state.htmlState); if (tagName == "script" && /\btag\b/.test(style) && stream.current() == ">") { // Script block: mode to change to depends on type attribute var scriptType = stream.string.slice(Math.max(0, stream.pos - 100), stream.pos).match(/\btype\s*=\s*("[^"]+"|'[^']+'|\S+)[^<]*$/i); scriptType = scriptType ? scriptType[1] : ""; if (scriptType && /[\"\']/.test(scriptType.charAt(0))) scriptType = scriptType.slice(1, scriptType.length - 1); for (var i = 0; i < scriptTypes.length; ++i) { var tp = scriptTypes[i]; if (typeof tp.matches == "string" ? scriptType == tp.matches : tp.matches.test(scriptType)) { if (tp.mode) { state.token = script; state.localMode = tp.mode; state.localState = tp.mode.startState && tp.mode.startState(htmlMode.indent(state.htmlState, "")); } break; } } } else if (tagName == "style" && /\btag\b/.test(style) && stream.current() == ">") { state.token = css; state.localMode = cssMode; state.localState = cssMode.startState(htmlMode.indent(state.htmlState, "")); } return style; } function maybeBackup(stream, pat, style) { var cur = stream.current(); var close = cur.search(pat), m; if (close > -1) stream.backUp(cur.length - close); else if (m = cur.match(/<\/?$/)) { stream.backUp(cur.length); if (!stream.match(pat, false)) stream.match(cur); } return style; } function script(stream, state) { if (stream.match(/^<\/\s*script\s*>/i, false)) { state.token = html; state.localState = state.localMode = null; return null; } return maybeBackup(stream, /<\/\s*script\s*>/, state.localMode.token(stream, state.localState)); } function css(stream, state) { if (stream.match(/^<\/\s*style\s*>/i, false)) { state.token = html; state.localState = state.localMode = null; return null; } return maybeBackup(stream, /<\/\s*style\s*>/, cssMode.token(stream, state.localState)); } return { startState: function() { var state = htmlMode.startState(); return {token: html, localMode: null, localState: null, htmlState: state}; }, copyState: function(state) { if (state.localState) var local = CodeMirror.copyState(state.localMode, state.localState); return {token: state.token, localMode: state.localMode, localState: local, htmlState: CodeMirror.copyState(htmlMode, state.htmlState)}; }, token: function(stream, state) { return state.token(stream, state); }, indent: function(state, textAfter) { if (!state.localMode || /^\s*<\//.test(textAfter)) return htmlMode.indent(state.htmlState, textAfter); else if (state.localMode.indent) return state.localMode.indent(state.localState, textAfter); else return CodeMirror.Pass; }, innerMode: function(state) { return {state: state.localState || state.htmlState, mode: state.localMode || htmlMode}; } }; }, "xml", "javascript", "css"); CodeMirror.defineMIME("text/html", "htmlmixed"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/htmlmixed/index.html ================================================ CodeMirror: HTML mixed mode

                  HTML mixed mode

                  The HTML mixed mode depends on the XML, JavaScript, and CSS modes.

                  It takes an optional mode configuration option, scriptTypes, which can be used to add custom behavior for specific <script type="..."> tags. If given, it should hold an array of {matches, mode} objects, where matches is a string or regexp that matches the script type, and mode is either null, for script types that should stay in HTML mode, or a mode spec corresponding to the mode that should be used for the script.

                  MIME types defined: text/html (redefined, only takes effect if you load this parser after the XML parser).

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/http/http.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("http", function() { function failFirstLine(stream, state) { stream.skipToEnd(); state.cur = header; return "error"; } function start(stream, state) { if (stream.match(/^HTTP\/\d\.\d/)) { state.cur = responseStatusCode; return "keyword"; } else if (stream.match(/^[A-Z]+/) && /[ \t]/.test(stream.peek())) { state.cur = requestPath; return "keyword"; } else { return failFirstLine(stream, state); } } function responseStatusCode(stream, state) { var code = stream.match(/^\d+/); if (!code) return failFirstLine(stream, state); state.cur = responseStatusText; var status = Number(code[0]); if (status >= 100 && status < 200) { return "positive informational"; } else if (status >= 200 && status < 300) { return "positive success"; } else if (status >= 300 && status < 400) { return "positive redirect"; } else if (status >= 400 && status < 500) { return "negative client-error"; } else if (status >= 500 && status < 600) { return "negative server-error"; } else { return "error"; } } function responseStatusText(stream, state) { stream.skipToEnd(); state.cur = header; return null; } function requestPath(stream, state) { stream.eatWhile(/\S/); state.cur = requestProtocol; return "string-2"; } function requestProtocol(stream, state) { if (stream.match(/^HTTP\/\d\.\d$/)) { state.cur = header; return "keyword"; } else { return failFirstLine(stream, state); } } function header(stream) { if (stream.sol() && !stream.eat(/[ \t]/)) { if (stream.match(/^.*?:/)) { return "atom"; } else { stream.skipToEnd(); return "error"; } } else { stream.skipToEnd(); return "string"; } } function body(stream) { stream.skipToEnd(); return null; } return { token: function(stream, state) { var cur = state.cur; if (cur != header && cur != body && stream.eatSpace()) return null; return cur(stream, state); }, blankLine: function(state) { state.cur = body; }, startState: function() { return {cur: start}; } }; }); CodeMirror.defineMIME("message/http", "http"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/http/index.html ================================================ CodeMirror: HTTP mode

                  HTTP mode

                  MIME types defined: message/http.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/idl/idl.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; function wordRegexp(words) { return new RegExp('^((' + words.join(')|(') + '))\\b', 'i'); }; var builtinArray = [ 'a_correlate', 'abs', 'acos', 'adapt_hist_equal', 'alog', 'alog2', 'alog10', 'amoeba', 'annotate', 'app_user_dir', 'app_user_dir_query', 'arg_present', 'array_equal', 'array_indices', 'arrow', 'ascii_template', 'asin', 'assoc', 'atan', 'axis', 'axis', 'bandpass_filter', 'bandreject_filter', 'barplot', 'bar_plot', 'beseli', 'beselj', 'beselk', 'besely', 'beta', 'biginteger', 'bilinear', 'bin_date', 'binary_template', 'bindgen', 'binomial', 'bit_ffs', 'bit_population', 'blas_axpy', 'blk_con', 'boolarr', 'boolean', 'boxplot', 'box_cursor', 'breakpoint', 'broyden', 'bubbleplot', 'butterworth', 'bytarr', 'byte', 'byteorder', 'bytscl', 'c_correlate', 'calendar', 'caldat', 'call_external', 'call_function', 'call_method', 'call_procedure', 'canny', 'catch', 'cd', 'cdf', 'ceil', 'chebyshev', 'check_math', 'chisqr_cvf', 'chisqr_pdf', 'choldc', 'cholsol', 'cindgen', 'cir_3pnt', 'clipboard', 'close', 'clust_wts', 'cluster', 'cluster_tree', 'cmyk_convert', 'code_coverage', 'color_convert', 'color_exchange', 'color_quan', 'color_range_map', 'colorbar', 'colorize_sample', 'colormap_applicable', 'colormap_gradient', 'colormap_rotation', 'colortable', 'comfit', 'command_line_args', 'common', 'compile_opt', 'complex', 'complexarr', 'complexround', 'compute_mesh_normals', 'cond', 'congrid', 'conj', 'constrained_min', 'contour', 'contour', 'convert_coord', 'convol', 'convol_fft', 'coord2to3', 'copy_lun', 'correlate', 'cos', 'cosh', 'cpu', 'cramer', 'createboxplotdata', 'create_cursor', 'create_struct', 'create_view', 'crossp', 'crvlength', 'ct_luminance', 'cti_test', 'cursor', 'curvefit', 'cv_coord', 'cvttobm', 'cw_animate', 'cw_animate_getp', 'cw_animate_load', 'cw_animate_run', 'cw_arcball', 'cw_bgroup', 'cw_clr_index', 'cw_colorsel', 'cw_defroi', 'cw_field', 'cw_filesel', 'cw_form', 'cw_fslider', 'cw_light_editor', 'cw_light_editor_get', 'cw_light_editor_set', 'cw_orient', 'cw_palette_editor', 'cw_palette_editor_get', 'cw_palette_editor_set', 'cw_pdmenu', 'cw_rgbslider', 'cw_tmpl', 'cw_zoom', 'db_exists', 'dblarr', 'dcindgen', 'dcomplex', 'dcomplexarr', 'define_key', 'define_msgblk', 'define_msgblk_from_file', 'defroi', 'defsysv', 'delvar', 'dendro_plot', 'dendrogram', 'deriv', 'derivsig', 'determ', 'device', 'dfpmin', 'diag_matrix', 'dialog_dbconnect', 'dialog_message', 'dialog_pickfile', 'dialog_printersetup', 'dialog_printjob', 'dialog_read_image', 'dialog_write_image', 'dictionary', 'digital_filter', 'dilate', 'dindgen', 'dissolve', 'dist', 'distance_measure', 'dlm_load', 'dlm_register', 'doc_library', 'double', 'draw_roi', 'edge_dog', 'efont', 'eigenql', 'eigenvec', 'ellipse', 'elmhes', 'emboss', 'empty', 'enable_sysrtn', 'eof', 'eos', 'erase', 'erf', 'erfc', 'erfcx', 'erode', 'errorplot', 'errplot', 'estimator_filter', 'execute', 'exit', 'exp', 'expand', 'expand_path', 'expint', 'extrac', 'extract_slice', 'f_cvf', 'f_pdf', 'factorial', 'fft', 'file_basename', 'file_chmod', 'file_copy', 'file_delete', 'file_dirname', 'file_expand_path', 'file_gunzip', 'file_gzip', 'file_info', 'file_lines', 'file_link', 'file_mkdir', 'file_move', 'file_poll_input', 'file_readlink', 'file_same', 'file_search', 'file_tar', 'file_test', 'file_untar', 'file_unzip', 'file_which', 'file_zip', 'filepath', 'findgen', 'finite', 'fix', 'flick', 'float', 'floor', 'flow3', 'fltarr', 'flush', 'format_axis_values', 'forward_function', 'free_lun', 'fstat', 'fulstr', 'funct', 'function', 'fv_test', 'fx_root', 'fz_roots', 'gamma', 'gamma_ct', 'gauss_cvf', 'gauss_pdf', 'gauss_smooth', 'gauss2dfit', 'gaussfit', 'gaussian_function', 'gaussint', 'get_drive_list', 'get_dxf_objects', 'get_kbrd', 'get_login_info', 'get_lun', 'get_screen_size', 'getenv', 'getwindows', 'greg2jul', 'grib', 'grid_input', 'grid_tps', 'grid3', 'griddata', 'gs_iter', 'h_eq_ct', 'h_eq_int', 'hanning', 'hash', 'hdf', 'hdf5', 'heap_free', 'heap_gc', 'heap_nosave', 'heap_refcount', 'heap_save', 'help', 'hilbert', 'hist_2d', 'hist_equal', 'histogram', 'hls', 'hough', 'hqr', 'hsv', 'i18n_multibytetoutf8', 'i18n_multibytetowidechar', 'i18n_utf8tomultibyte', 'i18n_widechartomultibyte', 'ibeta', 'icontour', 'iconvertcoord', 'idelete', 'identity', 'idl_base64', 'idl_container', 'idl_validname', 'idlexbr_assistant', 'idlitsys_createtool', 'idlunit', 'iellipse', 'igamma', 'igetcurrent', 'igetdata', 'igetid', 'igetproperty', 'iimage', 'image', 'image_cont', 'image_statistics', 'image_threshold', 'imaginary', 'imap', 'indgen', 'int_2d', 'int_3d', 'int_tabulated', 'intarr', 'interpol', 'interpolate', 'interval_volume', 'invert', 'ioctl', 'iopen', 'ir_filter', 'iplot', 'ipolygon', 'ipolyline', 'iputdata', 'iregister', 'ireset', 'iresolve', 'irotate', 'isa', 'isave', 'iscale', 'isetcurrent', 'isetproperty', 'ishft', 'isocontour', 'isosurface', 'isurface', 'itext', 'itranslate', 'ivector', 'ivolume', 'izoom', 'journal', 'json_parse', 'json_serialize', 'jul2greg', 'julday', 'keyword_set', 'krig2d', 'kurtosis', 'kw_test', 'l64indgen', 'la_choldc', 'la_cholmprove', 'la_cholsol', 'la_determ', 'la_eigenproblem', 'la_eigenql', 'la_eigenvec', 'la_elmhes', 'la_gm_linear_model', 'la_hqr', 'la_invert', 'la_least_square_equality', 'la_least_squares', 'la_linear_equation', 'la_ludc', 'la_lumprove', 'la_lusol', 'la_svd', 'la_tridc', 'la_trimprove', 'la_triql', 'la_trired', 'la_trisol', 'label_date', 'label_region', 'ladfit', 'laguerre', 'lambda', 'lambdap', 'lambertw', 'laplacian', 'least_squares_filter', 'leefilt', 'legend', 'legendre', 'linbcg', 'lindgen', 'linfit', 'linkimage', 'list', 'll_arc_distance', 'lmfit', 'lmgr', 'lngamma', 'lnp_test', 'loadct', 'locale_get', 'logical_and', 'logical_or', 'logical_true', 'lon64arr', 'lonarr', 'long', 'long64', 'lsode', 'lu_complex', 'ludc', 'lumprove', 'lusol', 'm_correlate', 'machar', 'make_array', 'make_dll', 'make_rt', 'map', 'mapcontinents', 'mapgrid', 'map_2points', 'map_continents', 'map_grid', 'map_image', 'map_patch', 'map_proj_forward', 'map_proj_image', 'map_proj_info', 'map_proj_init', 'map_proj_inverse', 'map_set', 'matrix_multiply', 'matrix_power', 'max', 'md_test', 'mean', 'meanabsdev', 'mean_filter', 'median', 'memory', 'mesh_clip', 'mesh_decimate', 'mesh_issolid', 'mesh_merge', 'mesh_numtriangles', 'mesh_obj', 'mesh_smooth', 'mesh_surfacearea', 'mesh_validate', 'mesh_volume', 'message', 'min', 'min_curve_surf', 'mk_html_help', 'modifyct', 'moment', 'morph_close', 'morph_distance', 'morph_gradient', 'morph_hitormiss', 'morph_open', 'morph_thin', 'morph_tophat', 'multi', 'n_elements', 'n_params', 'n_tags', 'ncdf', 'newton', 'noise_hurl', 'noise_pick', 'noise_scatter', 'noise_slur', 'norm', 'obj_class', 'obj_destroy', 'obj_hasmethod', 'obj_isa', 'obj_new', 'obj_valid', 'objarr', 'on_error', 'on_ioerror', 'online_help', 'openr', 'openu', 'openw', 'oplot', 'oploterr', 'orderedhash', 'p_correlate', 'parse_url', 'particle_trace', 'path_cache', 'path_sep', 'pcomp', 'plot', 'plot3d', 'plot', 'plot_3dbox', 'plot_field', 'ploterr', 'plots', 'polar_contour', 'polar_surface', 'polyfill', 'polyshade', 'pnt_line', 'point_lun', 'polarplot', 'poly', 'poly_2d', 'poly_area', 'poly_fit', 'polyfillv', 'polygon', 'polyline', 'polywarp', 'popd', 'powell', 'pref_commit', 'pref_get', 'pref_set', 'prewitt', 'primes', 'print', 'printf', 'printd', 'pro', 'product', 'profile', 'profiler', 'profiles', 'project_vol', 'ps_show_fonts', 'psafm', 'pseudo', 'ptr_free', 'ptr_new', 'ptr_valid', 'ptrarr', 'pushd', 'qgrid3', 'qhull', 'qromb', 'qromo', 'qsimp', 'query_*', 'query_ascii', 'query_bmp', 'query_csv', 'query_dicom', 'query_gif', 'query_image', 'query_jpeg', 'query_jpeg2000', 'query_mrsid', 'query_pict', 'query_png', 'query_ppm', 'query_srf', 'query_tiff', 'query_video', 'query_wav', 'r_correlate', 'r_test', 'radon', 'randomn', 'randomu', 'ranks', 'rdpix', 'read', 'readf', 'read_ascii', 'read_binary', 'read_bmp', 'read_csv', 'read_dicom', 'read_gif', 'read_image', 'read_interfile', 'read_jpeg', 'read_jpeg2000', 'read_mrsid', 'read_pict', 'read_png', 'read_ppm', 'read_spr', 'read_srf', 'read_sylk', 'read_tiff', 'read_video', 'read_wav', 'read_wave', 'read_x11_bitmap', 'read_xwd', 'reads', 'readu', 'real_part', 'rebin', 'recall_commands', 'recon3', 'reduce_colors', 'reform', 'region_grow', 'register_cursor', 'regress', 'replicate', 'replicate_inplace', 'resolve_all', 'resolve_routine', 'restore', 'retall', 'return', 'reverse', 'rk4', 'roberts', 'rot', 'rotate', 'round', 'routine_filepath', 'routine_info', 'rs_test', 's_test', 'save', 'savgol', 'scale3', 'scale3d', 'scatterplot', 'scatterplot3d', 'scope_level', 'scope_traceback', 'scope_varfetch', 'scope_varname', 'search2d', 'search3d', 'sem_create', 'sem_delete', 'sem_lock', 'sem_release', 'set_plot', 'set_shading', 'setenv', 'sfit', 'shade_surf', 'shade_surf_irr', 'shade_volume', 'shift', 'shift_diff', 'shmdebug', 'shmmap', 'shmunmap', 'shmvar', 'show3', 'showfont', 'signum', 'simplex', 'sin', 'sindgen', 'sinh', 'size', 'skewness', 'skip_lun', 'slicer3', 'slide_image', 'smooth', 'sobel', 'socket', 'sort', 'spawn', 'sph_4pnt', 'sph_scat', 'spher_harm', 'spl_init', 'spl_interp', 'spline', 'spline_p', 'sprsab', 'sprsax', 'sprsin', 'sprstp', 'sqrt', 'standardize', 'stddev', 'stop', 'strarr', 'strcmp', 'strcompress', 'streamline', 'streamline', 'stregex', 'stretch', 'string', 'strjoin', 'strlen', 'strlowcase', 'strmatch', 'strmessage', 'strmid', 'strpos', 'strput', 'strsplit', 'strtrim', 'struct_assign', 'struct_hide', 'strupcase', 'surface', 'surface', 'surfr', 'svdc', 'svdfit', 'svsol', 'swap_endian', 'swap_endian_inplace', 'symbol', 'systime', 't_cvf', 't_pdf', 't3d', 'tag_names', 'tan', 'tanh', 'tek_color', 'temporary', 'terminal_size', 'tetra_clip', 'tetra_surface', 'tetra_volume', 'text', 'thin', 'thread', 'threed', 'tic', 'time_test2', 'timegen', 'timer', 'timestamp', 'timestamptovalues', 'tm_test', 'toc', 'total', 'trace', 'transpose', 'tri_surf', 'triangulate', 'trigrid', 'triql', 'trired', 'trisol', 'truncate_lun', 'ts_coef', 'ts_diff', 'ts_fcast', 'ts_smooth', 'tv', 'tvcrs', 'tvlct', 'tvrd', 'tvscl', 'typename', 'uindgen', 'uint', 'uintarr', 'ul64indgen', 'ulindgen', 'ulon64arr', 'ulonarr', 'ulong', 'ulong64', 'uniq', 'unsharp_mask', 'usersym', 'value_locate', 'variance', 'vector', 'vector_field', 'vel', 'velovect', 'vert_t3d', 'voigt', 'volume', 'voronoi', 'voxel_proj', 'wait', 'warp_tri', 'watershed', 'wdelete', 'wf_draw', 'where', 'widget_base', 'widget_button', 'widget_combobox', 'widget_control', 'widget_displaycontextmenu', 'widget_draw', 'widget_droplist', 'widget_event', 'widget_info', 'widget_label', 'widget_list', 'widget_propertysheet', 'widget_slider', 'widget_tab', 'widget_table', 'widget_text', 'widget_tree', 'widget_tree_move', 'widget_window', 'wiener_filter', 'window', 'window', 'write_bmp', 'write_csv', 'write_gif', 'write_image', 'write_jpeg', 'write_jpeg2000', 'write_nrif', 'write_pict', 'write_png', 'write_ppm', 'write_spr', 'write_srf', 'write_sylk', 'write_tiff', 'write_video', 'write_wav', 'write_wave', 'writeu', 'wset', 'wshow', 'wtn', 'wv_applet', 'wv_cwt', 'wv_cw_wavelet', 'wv_denoise', 'wv_dwt', 'wv_fn_coiflet', 'wv_fn_daubechies', 'wv_fn_gaussian', 'wv_fn_haar', 'wv_fn_morlet', 'wv_fn_paul', 'wv_fn_symlet', 'wv_import_data', 'wv_import_wavelet', 'wv_plot3d_wps', 'wv_plot_multires', 'wv_pwt', 'wv_tool_denoise', 'xbm_edit', 'xdisplayfile', 'xdxf', 'xfont', 'xinteranimate', 'xloadct', 'xmanager', 'xmng_tmpl', 'xmtool', 'xobjview', 'xobjview_rotate', 'xobjview_write_image', 'xpalette', 'xpcolor', 'xplot3d', 'xregistered', 'xroi', 'xsq_test', 'xsurface', 'xvaredit', 'xvolume', 'xvolume_rotate', 'xvolume_write_image', 'xyouts', 'zlib_compress', 'zlib_uncompress', 'zoom', 'zoom_24' ]; var builtins = wordRegexp(builtinArray); var keywordArray = [ 'begin', 'end', 'endcase', 'endfor', 'endwhile', 'endif', 'endrep', 'endforeach', 'break', 'case', 'continue', 'for', 'foreach', 'goto', 'if', 'then', 'else', 'repeat', 'until', 'switch', 'while', 'do', 'pro', 'function' ]; var keywords = wordRegexp(keywordArray); CodeMirror.registerHelper("hintWords", "idl", builtinArray.concat(keywordArray)); var identifiers = new RegExp('^[_a-z\xa1-\uffff][_a-z0-9\xa1-\uffff]*', 'i'); var singleOperators = /[+\-*&=<>\/@#~$]/; var boolOperators = new RegExp('(and|or|eq|lt|le|gt|ge|ne|not)', 'i'); function tokenBase(stream) { // whitespaces if (stream.eatSpace()) return null; // Handle one line Comments if (stream.match(';')) { stream.skipToEnd(); return 'comment'; } // Handle Number Literals if (stream.match(/^[0-9\.+-]/, false)) { if (stream.match(/^[+-]?0x[0-9a-fA-F]+/)) return 'number'; if (stream.match(/^[+-]?\d*\.\d+([EeDd][+-]?\d+)?/)) return 'number'; if (stream.match(/^[+-]?\d+([EeDd][+-]?\d+)?/)) return 'number'; } // Handle Strings if (stream.match(/^"([^"]|(""))*"/)) { return 'string'; } if (stream.match(/^'([^']|(''))*'/)) { return 'string'; } // Handle words if (stream.match(keywords)) { return 'keyword'; } if (stream.match(builtins)) { return 'builtin'; } if (stream.match(identifiers)) { return 'variable'; } if (stream.match(singleOperators) || stream.match(boolOperators)) { return 'operator'; } // Handle non-detected items stream.next(); return null; }; CodeMirror.defineMode('idl', function() { return { token: function(stream) { return tokenBase(stream); } }; }); CodeMirror.defineMIME('text/x-idl', 'idl'); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/idl/index.html ================================================ CodeMirror: IDL mode

                  IDL mode

                  MIME types defined: text/x-idl.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/index.html ================================================ CodeMirror: Language Modes

                  Language modes

                  This is a list of every mode in the distribution. Each mode lives in a subdirectory of the mode/ directory, and typically defines a single JavaScript file that implements the mode. Loading such file will make the language available to CodeMirror, through the mode option.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/jade/index.html ================================================ CodeMirror: Jade Templating Mode

                  Jade Templating Mode

                  The Jade Templating Mode

                  Created by Forbes Lindesay. Managed as part of a Brackets extension at https://github.com/ForbesLindesay/jade-brackets.

                  MIME type defined: text/x-jade.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/jade/jade.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../javascript/javascript"), require("../css/css"), require("../htmlmixed/htmlmixed")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../javascript/javascript", "../css/css", "../htmlmixed/htmlmixed"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode('jade', function (config) { // token types var KEYWORD = 'keyword'; var DOCTYPE = 'meta'; var ID = 'builtin'; var CLASS = 'qualifier'; var ATTRS_NEST = { '{': '}', '(': ')', '[': ']' }; var jsMode = CodeMirror.getMode(config, 'javascript'); function State() { this.javaScriptLine = false; this.javaScriptLineExcludesColon = false; this.javaScriptArguments = false; this.javaScriptArgumentsDepth = 0; this.isInterpolating = false; this.interpolationNesting = 0; this.jsState = jsMode.startState(); this.restOfLine = ''; this.isIncludeFiltered = false; this.isEach = false; this.lastTag = ''; this.scriptType = ''; // Attributes Mode this.isAttrs = false; this.attrsNest = []; this.inAttributeName = true; this.attributeIsType = false; this.attrValue = ''; // Indented Mode this.indentOf = Infinity; this.indentToken = ''; this.innerMode = null; this.innerState = null; this.innerModeForLine = false; } /** * Safely copy a state * * @return {State} */ State.prototype.copy = function () { var res = new State(); res.javaScriptLine = this.javaScriptLine; res.javaScriptLineExcludesColon = this.javaScriptLineExcludesColon; res.javaScriptArguments = this.javaScriptArguments; res.javaScriptArgumentsDepth = this.javaScriptArgumentsDepth; res.isInterpolating = this.isInterpolating; res.interpolationNesting = this.intpolationNesting; res.jsState = CodeMirror.copyState(jsMode, this.jsState); res.innerMode = this.innerMode; if (this.innerMode && this.innerState) { res.innerState = CodeMirror.copyState(this.innerMode, this.innerState); } res.restOfLine = this.restOfLine; res.isIncludeFiltered = this.isIncludeFiltered; res.isEach = this.isEach; res.lastTag = this.lastTag; res.scriptType = this.scriptType; res.isAttrs = this.isAttrs; res.attrsNest = this.attrsNest.slice(); res.inAttributeName = this.inAttributeName; res.attributeIsType = this.attributeIsType; res.attrValue = this.attrValue; res.indentOf = this.indentOf; res.indentToken = this.indentToken; res.innerModeForLine = this.innerModeForLine; return res; }; function javaScript(stream, state) { if (stream.sol()) { // if javaScriptLine was set at end of line, ignore it state.javaScriptLine = false; state.javaScriptLineExcludesColon = false; } if (state.javaScriptLine) { if (state.javaScriptLineExcludesColon && stream.peek() === ':') { state.javaScriptLine = false; state.javaScriptLineExcludesColon = false; return; } var tok = jsMode.token(stream, state.jsState); if (stream.eol()) state.javaScriptLine = false; return tok || true; } } function javaScriptArguments(stream, state) { if (state.javaScriptArguments) { if (state.javaScriptArgumentsDepth === 0 && stream.peek() !== '(') { state.javaScriptArguments = false; return; } if (stream.peek() === '(') { state.javaScriptArgumentsDepth++; } else if (stream.peek() === ')') { state.javaScriptArgumentsDepth--; } if (state.javaScriptArgumentsDepth === 0) { state.javaScriptArguments = false; return; } var tok = jsMode.token(stream, state.jsState); return tok || true; } } function yieldStatement(stream) { if (stream.match(/^yield\b/)) { return 'keyword'; } } function doctype(stream) { if (stream.match(/^(?:doctype) *([^\n]+)?/)) { return DOCTYPE; } } function interpolation(stream, state) { if (stream.match('#{')) { state.isInterpolating = true; state.interpolationNesting = 0; return 'punctuation'; } } function interpolationContinued(stream, state) { if (state.isInterpolating) { if (stream.peek() === '}') { state.interpolationNesting--; if (state.interpolationNesting < 0) { stream.next(); state.isInterpolating = false; return 'puncutation'; } } else if (stream.peek() === '{') { state.interpolationNesting++; } return jsMode.token(stream, state.jsState) || true; } } function caseStatement(stream, state) { if (stream.match(/^case\b/)) { state.javaScriptLine = true; return KEYWORD; } } function when(stream, state) { if (stream.match(/^when\b/)) { state.javaScriptLine = true; state.javaScriptLineExcludesColon = true; return KEYWORD; } } function defaultStatement(stream) { if (stream.match(/^default\b/)) { return KEYWORD; } } function extendsStatement(stream, state) { if (stream.match(/^extends?\b/)) { state.restOfLine = 'string'; return KEYWORD; } } function append(stream, state) { if (stream.match(/^append\b/)) { state.restOfLine = 'variable'; return KEYWORD; } } function prepend(stream, state) { if (stream.match(/^prepend\b/)) { state.restOfLine = 'variable'; return KEYWORD; } } function block(stream, state) { if (stream.match(/^block\b *(?:(prepend|append)\b)?/)) { state.restOfLine = 'variable'; return KEYWORD; } } function include(stream, state) { if (stream.match(/^include\b/)) { state.restOfLine = 'string'; return KEYWORD; } } function includeFiltered(stream, state) { if (stream.match(/^include:([a-zA-Z0-9\-]+)/, false) && stream.match('include')) { state.isIncludeFiltered = true; return KEYWORD; } } function includeFilteredContinued(stream, state) { if (state.isIncludeFiltered) { var tok = filter(stream, state); state.isIncludeFiltered = false; state.restOfLine = 'string'; return tok; } } function mixin(stream, state) { if (stream.match(/^mixin\b/)) { state.javaScriptLine = true; return KEYWORD; } } function call(stream, state) { if (stream.match(/^\+([-\w]+)/)) { if (!stream.match(/^\( *[-\w]+ *=/, false)) { state.javaScriptArguments = true; state.javaScriptArgumentsDepth = 0; } return 'variable'; } if (stream.match(/^\+#{/, false)) { stream.next(); state.mixinCallAfter = true; return interpolation(stream, state); } } function callArguments(stream, state) { if (state.mixinCallAfter) { state.mixinCallAfter = false; if (!stream.match(/^\( *[-\w]+ *=/, false)) { state.javaScriptArguments = true; state.javaScriptArgumentsDepth = 0; } return true; } } function conditional(stream, state) { if (stream.match(/^(if|unless|else if|else)\b/)) { state.javaScriptLine = true; return KEYWORD; } } function each(stream, state) { if (stream.match(/^(- *)?(each|for)\b/)) { state.isEach = true; return KEYWORD; } } function eachContinued(stream, state) { if (state.isEach) { if (stream.match(/^ in\b/)) { state.javaScriptLine = true; state.isEach = false; return KEYWORD; } else if (stream.sol() || stream.eol()) { state.isEach = false; } else if (stream.next()) { while (!stream.match(/^ in\b/, false) && stream.next()); return 'variable'; } } } function whileStatement(stream, state) { if (stream.match(/^while\b/)) { state.javaScriptLine = true; return KEYWORD; } } function tag(stream, state) { var captures; if (captures = stream.match(/^(\w(?:[-:\w]*\w)?)\/?/)) { state.lastTag = captures[1].toLowerCase(); if (state.lastTag === 'script') { state.scriptType = 'application/javascript'; } return 'tag'; } } function filter(stream, state) { if (stream.match(/^:([\w\-]+)/)) { var innerMode; if (config && config.innerModes) { innerMode = config.innerModes(stream.current().substring(1)); } if (!innerMode) { innerMode = stream.current().substring(1); } if (typeof innerMode === 'string') { innerMode = CodeMirror.getMode(config, innerMode); } setInnerMode(stream, state, innerMode); return 'atom'; } } function code(stream, state) { if (stream.match(/^(!?=|-)/)) { state.javaScriptLine = true; return 'punctuation'; } } function id(stream) { if (stream.match(/^#([\w-]+)/)) { return ID; } } function className(stream) { if (stream.match(/^\.([\w-]+)/)) { return CLASS; } } function attrs(stream, state) { if (stream.peek() == '(') { stream.next(); state.isAttrs = true; state.attrsNest = []; state.inAttributeName = true; state.attrValue = ''; state.attributeIsType = false; return 'punctuation'; } } function attrsContinued(stream, state) { if (state.isAttrs) { if (ATTRS_NEST[stream.peek()]) { state.attrsNest.push(ATTRS_NEST[stream.peek()]); } if (state.attrsNest[state.attrsNest.length - 1] === stream.peek()) { state.attrsNest.pop(); } else if (stream.eat(')')) { state.isAttrs = false; return 'punctuation'; } if (state.inAttributeName && stream.match(/^[^=,\)!]+/)) { if (stream.peek() === '=' || stream.peek() === '!') { state.inAttributeName = false; state.jsState = jsMode.startState(); if (state.lastTag === 'script' && stream.current().trim().toLowerCase() === 'type') { state.attributeIsType = true; } else { state.attributeIsType = false; } } return 'attribute'; } var tok = jsMode.token(stream, state.jsState); if (state.attributeIsType && tok === 'string') { state.scriptType = stream.current().toString(); } if (state.attrsNest.length === 0 && (tok === 'string' || tok === 'variable' || tok === 'keyword')) { try { Function('', 'var x ' + state.attrValue.replace(/,\s*$/, '').replace(/^!/, '')); state.inAttributeName = true; state.attrValue = ''; stream.backUp(stream.current().length); return attrsContinued(stream, state); } catch (ex) { //not the end of an attribute } } state.attrValue += stream.current(); return tok || true; } } function attributesBlock(stream, state) { if (stream.match(/^&attributes\b/)) { state.javaScriptArguments = true; state.javaScriptArgumentsDepth = 0; return 'keyword'; } } function indent(stream) { if (stream.sol() && stream.eatSpace()) { return 'indent'; } } function comment(stream, state) { if (stream.match(/^ *\/\/(-)?([^\n]*)/)) { state.indentOf = stream.indentation(); state.indentToken = 'comment'; return 'comment'; } } function colon(stream) { if (stream.match(/^: */)) { return 'colon'; } } function text(stream, state) { if (stream.match(/^(?:\| ?| )([^\n]+)/)) { return 'string'; } if (stream.match(/^(<[^\n]*)/, false)) { // html string setInnerMode(stream, state, 'htmlmixed'); state.innerModeForLine = true; return innerMode(stream, state, true); } } function dot(stream, state) { if (stream.eat('.')) { var innerMode = null; if (state.lastTag === 'script' && state.scriptType.toLowerCase().indexOf('javascript') != -1) { innerMode = state.scriptType.toLowerCase().replace(/"|'/g, ''); } else if (state.lastTag === 'style') { innerMode = 'css'; } setInnerMode(stream, state, innerMode); return 'dot'; } } function fail(stream) { stream.next(); return null; } function setInnerMode(stream, state, mode) { mode = CodeMirror.mimeModes[mode] || mode; mode = config.innerModes ? config.innerModes(mode) || mode : mode; mode = CodeMirror.mimeModes[mode] || mode; mode = CodeMirror.getMode(config, mode); state.indentOf = stream.indentation(); if (mode && mode.name !== 'null') { state.innerMode = mode; } else { state.indentToken = 'string'; } } function innerMode(stream, state, force) { if (stream.indentation() > state.indentOf || (state.innerModeForLine && !stream.sol()) || force) { if (state.innerMode) { if (!state.innerState) { state.innerState = state.innerMode.startState ? state.innerMode.startState(stream.indentation()) : {}; } return stream.hideFirstChars(state.indentOf + 2, function () { return state.innerMode.token(stream, state.innerState) || true; }); } else { stream.skipToEnd(); return state.indentToken; } } else if (stream.sol()) { state.indentOf = Infinity; state.indentToken = null; state.innerMode = null; state.innerState = null; } } function restOfLine(stream, state) { if (stream.sol()) { // if restOfLine was set at end of line, ignore it state.restOfLine = ''; } if (state.restOfLine) { stream.skipToEnd(); var tok = state.restOfLine; state.restOfLine = ''; return tok; } } function startState() { return new State(); } function copyState(state) { return state.copy(); } /** * Get the next token in the stream * * @param {Stream} stream * @param {State} state */ function nextToken(stream, state) { var tok = innerMode(stream, state) || restOfLine(stream, state) || interpolationContinued(stream, state) || includeFilteredContinued(stream, state) || eachContinued(stream, state) || attrsContinued(stream, state) || javaScript(stream, state) || javaScriptArguments(stream, state) || callArguments(stream, state) || yieldStatement(stream, state) || doctype(stream, state) || interpolation(stream, state) || caseStatement(stream, state) || when(stream, state) || defaultStatement(stream, state) || extendsStatement(stream, state) || append(stream, state) || prepend(stream, state) || block(stream, state) || include(stream, state) || includeFiltered(stream, state) || mixin(stream, state) || call(stream, state) || conditional(stream, state) || each(stream, state) || whileStatement(stream, state) || tag(stream, state) || filter(stream, state) || code(stream, state) || id(stream, state) || className(stream, state) || attrs(stream, state) || attributesBlock(stream, state) || indent(stream, state) || text(stream, state) || comment(stream, state) || colon(stream, state) || dot(stream, state) || fail(stream, state); return tok === true ? null : tok; } return { startState: startState, copyState: copyState, token: nextToken }; }); CodeMirror.defineMIME('text/x-jade', 'jade'); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/javascript/index.html ================================================ CodeMirror: JavaScript mode

                  JavaScript mode

                  JavaScript mode supports several configuration options:

                  • json which will set the mode to expect JSON data rather than a JavaScript program.
                  • jsonld which will set the mode to expect JSON-LD linked data rather than a JavaScript program (demo).
                  • typescript which will activate additional syntax highlighting and some other things for TypeScript code (demo).
                  • statementIndent which (given a number) will determine the amount of indentation to use for statements continued on a new line.
                  • wordCharacters, a regexp that indicates which characters should be considered part of an identifier. Defaults to /[\w$]/, which does not handle non-ASCII identifiers. Can be set to something more elaborate to improve Unicode support.

                  MIME types defined: text/javascript, application/json, application/ld+json, text/typescript, application/typescript.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/javascript/javascript.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE // TODO actually recognize syntax of TypeScript constructs (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("javascript", function(config, parserConfig) { var indentUnit = config.indentUnit; var statementIndent = parserConfig.statementIndent; var jsonldMode = parserConfig.jsonld; var jsonMode = parserConfig.json || jsonldMode; var isTS = parserConfig.typescript; var wordRE = parserConfig.wordCharacters || /[\w$\xa1-\uffff]/; // Tokenizer var keywords = function(){ function kw(type) {return {type: type, style: "keyword"};} var A = kw("keyword a"), B = kw("keyword b"), C = kw("keyword c"); var operator = kw("operator"), atom = {type: "atom", style: "atom"}; var jsKeywords = { "if": kw("if"), "while": A, "with": A, "else": B, "do": B, "try": B, "finally": B, "return": C, "break": C, "continue": C, "new": C, "delete": C, "throw": C, "debugger": C, "var": kw("var"), "const": kw("var"), "let": kw("var"), "function": kw("function"), "catch": kw("catch"), "for": kw("for"), "switch": kw("switch"), "case": kw("case"), "default": kw("default"), "in": operator, "typeof": operator, "instanceof": operator, "true": atom, "false": atom, "null": atom, "undefined": atom, "NaN": atom, "Infinity": atom, "this": kw("this"), "module": kw("module"), "class": kw("class"), "super": kw("atom"), "yield": C, "export": kw("export"), "import": kw("import"), "extends": C }; // Extend the 'normal' keywords with the TypeScript language extensions if (isTS) { var type = {type: "variable", style: "variable-3"}; var tsKeywords = { // object-like things "interface": kw("interface"), "extends": kw("extends"), "constructor": kw("constructor"), // scope modifiers "public": kw("public"), "private": kw("private"), "protected": kw("protected"), "static": kw("static"), // types "string": type, "number": type, "bool": type, "any": type }; for (var attr in tsKeywords) { jsKeywords[attr] = tsKeywords[attr]; } } return jsKeywords; }(); var isOperatorChar = /[+\-*&%=<>!?|~^]/; var isJsonldKeyword = /^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/; function readRegexp(stream) { var escaped = false, next, inSet = false; while ((next = stream.next()) != null) { if (!escaped) { if (next == "/" && !inSet) return; if (next == "[") inSet = true; else if (inSet && next == "]") inSet = false; } escaped = !escaped && next == "\\"; } } // Used as scratch variables to communicate multiple values without // consing up tons of objects. var type, content; function ret(tp, style, cont) { type = tp; content = cont; return style; } function tokenBase(stream, state) { var ch = stream.next(); if (ch == '"' || ch == "'") { state.tokenize = tokenString(ch); return state.tokenize(stream, state); } else if (ch == "." && stream.match(/^\d+(?:[eE][+\-]?\d+)?/)) { return ret("number", "number"); } else if (ch == "." && stream.match("..")) { return ret("spread", "meta"); } else if (/[\[\]{}\(\),;\:\.]/.test(ch)) { return ret(ch); } else if (ch == "=" && stream.eat(">")) { return ret("=>", "operator"); } else if (ch == "0" && stream.eat(/x/i)) { stream.eatWhile(/[\da-f]/i); return ret("number", "number"); } else if (/\d/.test(ch)) { stream.match(/^\d*(?:\.\d*)?(?:[eE][+\-]?\d+)?/); return ret("number", "number"); } else if (ch == "/") { if (stream.eat("*")) { state.tokenize = tokenComment; return tokenComment(stream, state); } else if (stream.eat("/")) { stream.skipToEnd(); return ret("comment", "comment"); } else if (state.lastType == "operator" || state.lastType == "keyword c" || state.lastType == "sof" || /^[\[{}\(,;:]$/.test(state.lastType)) { readRegexp(stream); stream.match(/^\b(([gimyu])(?![gimyu]*\2))+\b/); return ret("regexp", "string-2"); } else { stream.eatWhile(isOperatorChar); return ret("operator", "operator", stream.current()); } } else if (ch == "`") { state.tokenize = tokenQuasi; return tokenQuasi(stream, state); } else if (ch == "#") { stream.skipToEnd(); return ret("error", "error"); } else if (isOperatorChar.test(ch)) { stream.eatWhile(isOperatorChar); return ret("operator", "operator", stream.current()); } else if (wordRE.test(ch)) { stream.eatWhile(wordRE); var word = stream.current(), known = keywords.propertyIsEnumerable(word) && keywords[word]; return (known && state.lastType != ".") ? ret(known.type, known.style, word) : ret("variable", "variable", word); } } function tokenString(quote) { return function(stream, state) { var escaped = false, next; if (jsonldMode && stream.peek() == "@" && stream.match(isJsonldKeyword)){ state.tokenize = tokenBase; return ret("jsonld-keyword", "meta"); } while ((next = stream.next()) != null) { if (next == quote && !escaped) break; escaped = !escaped && next == "\\"; } if (!escaped) state.tokenize = tokenBase; return ret("string", "string"); }; } function tokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "/" && maybeEnd) { state.tokenize = tokenBase; break; } maybeEnd = (ch == "*"); } return ret("comment", "comment"); } function tokenQuasi(stream, state) { var escaped = false, next; while ((next = stream.next()) != null) { if (!escaped && (next == "`" || next == "$" && stream.eat("{"))) { state.tokenize = tokenBase; break; } escaped = !escaped && next == "\\"; } return ret("quasi", "string-2", stream.current()); } var brackets = "([{}])"; // This is a crude lookahead trick to try and notice that we're // parsing the argument patterns for a fat-arrow function before we // actually hit the arrow token. It only works if the arrow is on // the same line as the arguments and there's no strange noise // (comments) in between. Fallback is to only notice when we hit the // arrow, and not declare the arguments as locals for the arrow // body. function findFatArrow(stream, state) { if (state.fatArrowAt) state.fatArrowAt = null; var arrow = stream.string.indexOf("=>", stream.start); if (arrow < 0) return; var depth = 0, sawSomething = false; for (var pos = arrow - 1; pos >= 0; --pos) { var ch = stream.string.charAt(pos); var bracket = brackets.indexOf(ch); if (bracket >= 0 && bracket < 3) { if (!depth) { ++pos; break; } if (--depth == 0) break; } else if (bracket >= 3 && bracket < 6) { ++depth; } else if (wordRE.test(ch)) { sawSomething = true; } else if (/["'\/]/.test(ch)) { return; } else if (sawSomething && !depth) { ++pos; break; } } if (sawSomething && !depth) state.fatArrowAt = pos; } // Parser var atomicTypes = {"atom": true, "number": true, "variable": true, "string": true, "regexp": true, "this": true, "jsonld-keyword": true}; function JSLexical(indented, column, type, align, prev, info) { this.indented = indented; this.column = column; this.type = type; this.prev = prev; this.info = info; if (align != null) this.align = align; } function inScope(state, varname) { for (var v = state.localVars; v; v = v.next) if (v.name == varname) return true; for (var cx = state.context; cx; cx = cx.prev) { for (var v = cx.vars; v; v = v.next) if (v.name == varname) return true; } } function parseJS(state, style, type, content, stream) { var cc = state.cc; // Communicate our context to the combinators. // (Less wasteful than consing up a hundred closures on every call.) cx.state = state; cx.stream = stream; cx.marked = null, cx.cc = cc; cx.style = style; if (!state.lexical.hasOwnProperty("align")) state.lexical.align = true; while(true) { var combinator = cc.length ? cc.pop() : jsonMode ? expression : statement; if (combinator(type, content)) { while(cc.length && cc[cc.length - 1].lex) cc.pop()(); if (cx.marked) return cx.marked; if (type == "variable" && inScope(state, content)) return "variable-2"; return style; } } } // Combinator utils var cx = {state: null, column: null, marked: null, cc: null}; function pass() { for (var i = arguments.length - 1; i >= 0; i--) cx.cc.push(arguments[i]); } function cont() { pass.apply(null, arguments); return true; } function register(varname) { function inList(list) { for (var v = list; v; v = v.next) if (v.name == varname) return true; return false; } var state = cx.state; if (state.context) { cx.marked = "def"; if (inList(state.localVars)) return; state.localVars = {name: varname, next: state.localVars}; } else { if (inList(state.globalVars)) return; if (parserConfig.globalVars) state.globalVars = {name: varname, next: state.globalVars}; } } // Combinators var defaultVars = {name: "this", next: {name: "arguments"}}; function pushcontext() { cx.state.context = {prev: cx.state.context, vars: cx.state.localVars}; cx.state.localVars = defaultVars; } function popcontext() { cx.state.localVars = cx.state.context.vars; cx.state.context = cx.state.context.prev; } function pushlex(type, info) { var result = function() { var state = cx.state, indent = state.indented; if (state.lexical.type == "stat") indent = state.lexical.indented; else for (var outer = state.lexical; outer && outer.type == ")" && outer.align; outer = outer.prev) indent = outer.indented; state.lexical = new JSLexical(indent, cx.stream.column(), type, null, state.lexical, info); }; result.lex = true; return result; } function poplex() { var state = cx.state; if (state.lexical.prev) { if (state.lexical.type == ")") state.indented = state.lexical.indented; state.lexical = state.lexical.prev; } } poplex.lex = true; function expect(wanted) { function exp(type) { if (type == wanted) return cont(); else if (wanted == ";") return pass(); else return cont(exp); }; return exp; } function statement(type, value) { if (type == "var") return cont(pushlex("vardef", value.length), vardef, expect(";"), poplex); if (type == "keyword a") return cont(pushlex("form"), expression, statement, poplex); if (type == "keyword b") return cont(pushlex("form"), statement, poplex); if (type == "{") return cont(pushlex("}"), block, poplex); if (type == ";") return cont(); if (type == "if") { if (cx.state.lexical.info == "else" && cx.state.cc[cx.state.cc.length - 1] == poplex) cx.state.cc.pop()(); return cont(pushlex("form"), expression, statement, poplex, maybeelse); } if (type == "function") return cont(functiondef); if (type == "for") return cont(pushlex("form"), forspec, statement, poplex); if (type == "variable") return cont(pushlex("stat"), maybelabel); if (type == "switch") return cont(pushlex("form"), expression, pushlex("}", "switch"), expect("{"), block, poplex, poplex); if (type == "case") return cont(expression, expect(":")); if (type == "default") return cont(expect(":")); if (type == "catch") return cont(pushlex("form"), pushcontext, expect("("), funarg, expect(")"), statement, poplex, popcontext); if (type == "module") return cont(pushlex("form"), pushcontext, afterModule, popcontext, poplex); if (type == "class") return cont(pushlex("form"), className, poplex); if (type == "export") return cont(pushlex("form"), afterExport, poplex); if (type == "import") return cont(pushlex("form"), afterImport, poplex); return pass(pushlex("stat"), expression, expect(";"), poplex); } function expression(type) { return expressionInner(type, false); } function expressionNoComma(type) { return expressionInner(type, true); } function expressionInner(type, noComma) { if (cx.state.fatArrowAt == cx.stream.start) { var body = noComma ? arrowBodyNoComma : arrowBody; if (type == "(") return cont(pushcontext, pushlex(")"), commasep(pattern, ")"), poplex, expect("=>"), body, popcontext); else if (type == "variable") return pass(pushcontext, pattern, expect("=>"), body, popcontext); } var maybeop = noComma ? maybeoperatorNoComma : maybeoperatorComma; if (atomicTypes.hasOwnProperty(type)) return cont(maybeop); if (type == "function") return cont(functiondef, maybeop); if (type == "keyword c") return cont(noComma ? maybeexpressionNoComma : maybeexpression); if (type == "(") return cont(pushlex(")"), maybeexpression, comprehension, expect(")"), poplex, maybeop); if (type == "operator" || type == "spread") return cont(noComma ? expressionNoComma : expression); if (type == "[") return cont(pushlex("]"), arrayLiteral, poplex, maybeop); if (type == "{") return contCommasep(objprop, "}", null, maybeop); if (type == "quasi") { return pass(quasi, maybeop); } return cont(); } function maybeexpression(type) { if (type.match(/[;\}\)\],]/)) return pass(); return pass(expression); } function maybeexpressionNoComma(type) { if (type.match(/[;\}\)\],]/)) return pass(); return pass(expressionNoComma); } function maybeoperatorComma(type, value) { if (type == ",") return cont(expression); return maybeoperatorNoComma(type, value, false); } function maybeoperatorNoComma(type, value, noComma) { var me = noComma == false ? maybeoperatorComma : maybeoperatorNoComma; var expr = noComma == false ? expression : expressionNoComma; if (type == "=>") return cont(pushcontext, noComma ? arrowBodyNoComma : arrowBody, popcontext); if (type == "operator") { if (/\+\+|--/.test(value)) return cont(me); if (value == "?") return cont(expression, expect(":"), expr); return cont(expr); } if (type == "quasi") { return pass(quasi, me); } if (type == ";") return; if (type == "(") return contCommasep(expressionNoComma, ")", "call", me); if (type == ".") return cont(property, me); if (type == "[") return cont(pushlex("]"), maybeexpression, expect("]"), poplex, me); } function quasi(type, value) { if (type != "quasi") return pass(); if (value.slice(value.length - 2) != "${") return cont(quasi); return cont(expression, continueQuasi); } function continueQuasi(type) { if (type == "}") { cx.marked = "string-2"; cx.state.tokenize = tokenQuasi; return cont(quasi); } } function arrowBody(type) { findFatArrow(cx.stream, cx.state); return pass(type == "{" ? statement : expression); } function arrowBodyNoComma(type) { findFatArrow(cx.stream, cx.state); return pass(type == "{" ? statement : expressionNoComma); } function maybelabel(type) { if (type == ":") return cont(poplex, statement); return pass(maybeoperatorComma, expect(";"), poplex); } function property(type) { if (type == "variable") {cx.marked = "property"; return cont();} } function objprop(type, value) { if (type == "variable" || cx.style == "keyword") { cx.marked = "property"; if (value == "get" || value == "set") return cont(getterSetter); return cont(afterprop); } else if (type == "number" || type == "string") { cx.marked = jsonldMode ? "property" : (cx.style + " property"); return cont(afterprop); } else if (type == "jsonld-keyword") { return cont(afterprop); } else if (type == "[") { return cont(expression, expect("]"), afterprop); } } function getterSetter(type) { if (type != "variable") return pass(afterprop); cx.marked = "property"; return cont(functiondef); } function afterprop(type) { if (type == ":") return cont(expressionNoComma); if (type == "(") return pass(functiondef); } function commasep(what, end) { function proceed(type) { if (type == ",") { var lex = cx.state.lexical; if (lex.info == "call") lex.pos = (lex.pos || 0) + 1; return cont(what, proceed); } if (type == end) return cont(); return cont(expect(end)); } return function(type) { if (type == end) return cont(); return pass(what, proceed); }; } function contCommasep(what, end, info) { for (var i = 3; i < arguments.length; i++) cx.cc.push(arguments[i]); return cont(pushlex(end, info), commasep(what, end), poplex); } function block(type) { if (type == "}") return cont(); return pass(statement, block); } function maybetype(type) { if (isTS && type == ":") return cont(typedef); } function typedef(type) { if (type == "variable"){cx.marked = "variable-3"; return cont();} } function vardef() { return pass(pattern, maybetype, maybeAssign, vardefCont); } function pattern(type, value) { if (type == "variable") { register(value); return cont(); } if (type == "[") return contCommasep(pattern, "]"); if (type == "{") return contCommasep(proppattern, "}"); } function proppattern(type, value) { if (type == "variable" && !cx.stream.match(/^\s*:/, false)) { register(value); return cont(maybeAssign); } if (type == "variable") cx.marked = "property"; return cont(expect(":"), pattern, maybeAssign); } function maybeAssign(_type, value) { if (value == "=") return cont(expressionNoComma); } function vardefCont(type) { if (type == ",") return cont(vardef); } function maybeelse(type, value) { if (type == "keyword b" && value == "else") return cont(pushlex("form", "else"), statement, poplex); } function forspec(type) { if (type == "(") return cont(pushlex(")"), forspec1, expect(")"), poplex); } function forspec1(type) { if (type == "var") return cont(vardef, expect(";"), forspec2); if (type == ";") return cont(forspec2); if (type == "variable") return cont(formaybeinof); return pass(expression, expect(";"), forspec2); } function formaybeinof(_type, value) { if (value == "in" || value == "of") { cx.marked = "keyword"; return cont(expression); } return cont(maybeoperatorComma, forspec2); } function forspec2(type, value) { if (type == ";") return cont(forspec3); if (value == "in" || value == "of") { cx.marked = "keyword"; return cont(expression); } return pass(expression, expect(";"), forspec3); } function forspec3(type) { if (type != ")") cont(expression); } function functiondef(type, value) { if (value == "*") {cx.marked = "keyword"; return cont(functiondef);} if (type == "variable") {register(value); return cont(functiondef);} if (type == "(") return cont(pushcontext, pushlex(")"), commasep(funarg, ")"), poplex, statement, popcontext); } function funarg(type) { if (type == "spread") return cont(funarg); return pass(pattern, maybetype); } function className(type, value) { if (type == "variable") {register(value); return cont(classNameAfter);} } function classNameAfter(type, value) { if (value == "extends") return cont(expression, classNameAfter); if (type == "{") return cont(pushlex("}"), classBody, poplex); } function classBody(type, value) { if (type == "variable" || cx.style == "keyword") { cx.marked = "property"; if (value == "get" || value == "set") return cont(classGetterSetter, functiondef, classBody); return cont(functiondef, classBody); } if (value == "*") { cx.marked = "keyword"; return cont(classBody); } if (type == ";") return cont(classBody); if (type == "}") return cont(); } function classGetterSetter(type) { if (type != "variable") return pass(); cx.marked = "property"; return cont(); } function afterModule(type, value) { if (type == "string") return cont(statement); if (type == "variable") { register(value); return cont(maybeFrom); } } function afterExport(_type, value) { if (value == "*") { cx.marked = "keyword"; return cont(maybeFrom, expect(";")); } if (value == "default") { cx.marked = "keyword"; return cont(expression, expect(";")); } return pass(statement); } function afterImport(type) { if (type == "string") return cont(); return pass(importSpec, maybeFrom); } function importSpec(type, value) { if (type == "{") return contCommasep(importSpec, "}"); if (type == "variable") register(value); return cont(); } function maybeFrom(_type, value) { if (value == "from") { cx.marked = "keyword"; return cont(expression); } } function arrayLiteral(type) { if (type == "]") return cont(); return pass(expressionNoComma, maybeArrayComprehension); } function maybeArrayComprehension(type) { if (type == "for") return pass(comprehension, expect("]")); if (type == ",") return cont(commasep(maybeexpressionNoComma, "]")); return pass(commasep(expressionNoComma, "]")); } function comprehension(type) { if (type == "for") return cont(forspec, comprehension); if (type == "if") return cont(expression, comprehension); } function isContinuedStatement(state, textAfter) { return state.lastType == "operator" || state.lastType == "," || isOperatorChar.test(textAfter.charAt(0)) || /[,.]/.test(textAfter.charAt(0)); } // Interface return { startState: function(basecolumn) { var state = { tokenize: tokenBase, lastType: "sof", cc: [], lexical: new JSLexical((basecolumn || 0) - indentUnit, 0, "block", false), localVars: parserConfig.localVars, context: parserConfig.localVars && {vars: parserConfig.localVars}, indented: 0 }; if (parserConfig.globalVars && typeof parserConfig.globalVars == "object") state.globalVars = parserConfig.globalVars; return state; }, token: function(stream, state) { if (stream.sol()) { if (!state.lexical.hasOwnProperty("align")) state.lexical.align = false; state.indented = stream.indentation(); findFatArrow(stream, state); } if (state.tokenize != tokenComment && stream.eatSpace()) return null; var style = state.tokenize(stream, state); if (type == "comment") return style; state.lastType = type == "operator" && (content == "++" || content == "--") ? "incdec" : type; return parseJS(state, style, type, content, stream); }, indent: function(state, textAfter) { if (state.tokenize == tokenComment) return CodeMirror.Pass; if (state.tokenize != tokenBase) return 0; var firstChar = textAfter && textAfter.charAt(0), lexical = state.lexical; // Kludge to prevent 'maybelse' from blocking lexical scope pops if (!/^\s*else\b/.test(textAfter)) for (var i = state.cc.length - 1; i >= 0; --i) { var c = state.cc[i]; if (c == poplex) lexical = lexical.prev; else if (c != maybeelse) break; } if (lexical.type == "stat" && firstChar == "}") lexical = lexical.prev; if (statementIndent && lexical.type == ")" && lexical.prev.type == "stat") lexical = lexical.prev; var type = lexical.type, closing = firstChar == type; if (type == "vardef") return lexical.indented + (state.lastType == "operator" || state.lastType == "," ? lexical.info + 1 : 0); else if (type == "form" && firstChar == "{") return lexical.indented; else if (type == "form") return lexical.indented + indentUnit; else if (type == "stat") return lexical.indented + (isContinuedStatement(state, textAfter) ? statementIndent || indentUnit : 0); else if (lexical.info == "switch" && !closing && parserConfig.doubleIndentSwitch != false) return lexical.indented + (/^(?:case|default)\b/.test(textAfter) ? indentUnit : 2 * indentUnit); else if (lexical.align) return lexical.column + (closing ? 0 : 1); else return lexical.indented + (closing ? 0 : indentUnit); }, electricInput: /^\s*(?:case .*?:|default:|\{|\})$/, blockCommentStart: jsonMode ? null : "/*", blockCommentEnd: jsonMode ? null : "*/", lineComment: jsonMode ? null : "//", fold: "brace", helperType: jsonMode ? "json" : "javascript", jsonldMode: jsonldMode, jsonMode: jsonMode }; }); CodeMirror.registerHelper("wordChars", "javascript", /[\w$]/); CodeMirror.defineMIME("text/javascript", "javascript"); CodeMirror.defineMIME("text/ecmascript", "javascript"); CodeMirror.defineMIME("application/javascript", "javascript"); CodeMirror.defineMIME("application/x-javascript", "javascript"); CodeMirror.defineMIME("application/ecmascript", "javascript"); CodeMirror.defineMIME("application/json", {name: "javascript", json: true}); CodeMirror.defineMIME("application/x-json", {name: "javascript", json: true}); CodeMirror.defineMIME("application/ld+json", {name: "javascript", jsonld: true}); CodeMirror.defineMIME("text/typescript", { name: "javascript", typescript: true }); CodeMirror.defineMIME("application/typescript", { name: "javascript", typescript: true }); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/javascript/json-ld.html ================================================ CodeMirror: JSON-LD mode

                  JSON-LD mode

                  This is a specialization of the JavaScript mode.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/javascript/test.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function() { var mode = CodeMirror.getMode({indentUnit: 2}, "javascript"); function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } MT("locals", "[keyword function] [variable foo]([def a], [def b]) { [keyword var] [def c] [operator =] [number 10]; [keyword return] [variable-2 a] [operator +] [variable-2 c] [operator +] [variable d]; }"); MT("comma-and-binop", "[keyword function](){ [keyword var] [def x] [operator =] [number 1] [operator +] [number 2], [def y]; }"); MT("destructuring", "([keyword function]([def a], [[[def b], [def c] ]]) {", " [keyword let] {[def d], [property foo]: [def c][operator =][number 10], [def x]} [operator =] [variable foo]([variable-2 a]);", " [[[variable-2 c], [variable y] ]] [operator =] [variable-2 c];", "})();"); MT("class_body", "[keyword class] [variable Foo] {", " [property constructor]() {}", " [property sayName]() {", " [keyword return] [string-2 `foo${][variable foo][string-2 }oo`];", " }", "}"); MT("class", "[keyword class] [variable Point] [keyword extends] [variable SuperThing] {", " [property get] [property prop]() { [keyword return] [number 24]; }", " [property constructor]([def x], [def y]) {", " [keyword super]([string 'something']);", " [keyword this].[property x] [operator =] [variable-2 x];", " }", "}"); MT("module", "[keyword module] [string 'foo'] {", " [keyword export] [keyword let] [def x] [operator =] [number 42];", " [keyword export] [keyword *] [keyword from] [string 'somewhere'];", "}"); MT("import", "[keyword function] [variable foo]() {", " [keyword import] [def $] [keyword from] [string 'jquery'];", " [keyword module] [def crypto] [keyword from] [string 'crypto'];", " [keyword import] { [def encrypt], [def decrypt] } [keyword from] [string 'crypto'];", "}"); MT("const", "[keyword function] [variable f]() {", " [keyword const] [[ [def a], [def b] ]] [operator =] [[ [number 1], [number 2] ]];", "}"); MT("for/of", "[keyword for]([keyword let] [variable of] [keyword of] [variable something]) {}"); MT("generator", "[keyword function*] [variable repeat]([def n]) {", " [keyword for]([keyword var] [def i] [operator =] [number 0]; [variable-2 i] [operator <] [variable-2 n]; [operator ++][variable-2 i])", " [keyword yield] [variable-2 i];", "}"); MT("quotedStringAddition", "[keyword let] [variable f] [operator =] [variable a] [operator +] [string 'fatarrow'] [operator +] [variable c];"); MT("quotedFatArrow", "[keyword let] [variable f] [operator =] [variable a] [operator +] [string '=>'] [operator +] [variable c];"); MT("fatArrow", "[variable array].[property filter]([def a] [operator =>] [variable-2 a] [operator +] [number 1]);", "[variable a];", // No longer in scope "[keyword let] [variable f] [operator =] ([[ [def a], [def b] ]], [def c]) [operator =>] [variable-2 a] [operator +] [variable-2 c];", "[variable c];"); MT("spread", "[keyword function] [variable f]([def a], [meta ...][def b]) {", " [variable something]([variable-2 a], [meta ...][variable-2 b]);", "}"); MT("comprehension", "[keyword function] [variable f]() {", " [[([variable x] [operator +] [number 1]) [keyword for] ([keyword var] [def x] [keyword in] [variable y]) [keyword if] [variable pred]([variable-2 x]) ]];", " ([variable u] [keyword for] ([keyword var] [def u] [keyword of] [variable generateValues]()) [keyword if] ([variable-2 u].[property color] [operator ===] [string 'blue']));", "}"); MT("quasi", "[variable re][string-2 `fofdlakj${][variable x] [operator +] ([variable re][string-2 `foo`]) [operator +] [number 1][string-2 }fdsa`] [operator +] [number 2]"); MT("quasi_no_function", "[variable x] [operator =] [string-2 `fofdlakj${][variable x] [operator +] [string-2 `foo`] [operator +] [number 1][string-2 }fdsa`] [operator +] [number 2]"); MT("indent_statement", "[keyword var] [variable x] [operator =] [number 10]", "[variable x] [operator +=] [variable y] [operator +]", " [atom Infinity]", "[keyword debugger];"); MT("indent_if", "[keyword if] ([number 1])", " [keyword break];", "[keyword else] [keyword if] ([number 2])", " [keyword continue];", "[keyword else]", " [number 10];", "[keyword if] ([number 1]) {", " [keyword break];", "} [keyword else] [keyword if] ([number 2]) {", " [keyword continue];", "} [keyword else] {", " [number 10];", "}"); MT("indent_for", "[keyword for] ([keyword var] [variable i] [operator =] [number 0];", " [variable i] [operator <] [number 100];", " [variable i][operator ++])", " [variable doSomething]([variable i]);", "[keyword debugger];"); MT("indent_c_style", "[keyword function] [variable foo]()", "{", " [keyword debugger];", "}"); MT("indent_else", "[keyword for] (;;)", " [keyword if] ([variable foo])", " [keyword if] ([variable bar])", " [number 1];", " [keyword else]", " [number 2];", " [keyword else]", " [number 3];"); MT("indent_funarg", "[variable foo]([number 10000],", " [keyword function]([def a]) {", " [keyword debugger];", "};"); MT("indent_below_if", "[keyword for] (;;)", " [keyword if] ([variable foo])", " [number 1];", "[number 2];"); MT("multilinestring", "[keyword var] [variable x] [operator =] [string 'foo\\]", "[string bar'];"); MT("scary_regexp", "[string-2 /foo[[/]]bar/];"); MT("indent_strange_array", "[keyword var] [variable x] [operator =] [[", " [number 1],,", " [number 2],", "]];", "[number 10];"); var jsonld_mode = CodeMirror.getMode( {indentUnit: 2}, {name: "javascript", jsonld: true} ); function LD(name) { test.mode(name, jsonld_mode, Array.prototype.slice.call(arguments, 1)); } LD("json_ld_keywords", '{', ' [meta "@context"]: {', ' [meta "@base"]: [string "http://example.com"],', ' [meta "@vocab"]: [string "http://xmlns.com/foaf/0.1/"],', ' [property "likesFlavor"]: {', ' [meta "@container"]: [meta "@list"]', ' [meta "@reverse"]: [string "@beFavoriteOf"]', ' },', ' [property "nick"]: { [meta "@container"]: [meta "@set"] },', ' [property "nick"]: { [meta "@container"]: [meta "@index"] }', ' },', ' [meta "@graph"]: [[ {', ' [meta "@id"]: [string "http://dbpedia.org/resource/John_Lennon"],', ' [property "name"]: [string "John Lennon"],', ' [property "modified"]: {', ' [meta "@value"]: [string "2010-05-29T14:17:39+02:00"],', ' [meta "@type"]: [string "http://www.w3.org/2001/XMLSchema#dateTime"]', ' }', ' } ]]', '}'); LD("json_ld_fake", '{', ' [property "@fake"]: [string "@fake"],', ' [property "@contextual"]: [string "@identifier"],', ' [property "user@domain.com"]: [string "@graphical"],', ' [property "@ID"]: [string "@@ID"]', '}'); })(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/javascript/typescript.html ================================================ CodeMirror: TypeScript mode

                  TypeScript mode

                  This is a specialization of the JavaScript mode.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/jinja2/index.html ================================================ CodeMirror: Jinja2 mode

                  Jinja2 mode

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/jinja2/jinja2.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("jinja2", function() { var keywords = ["and", "as", "block", "endblock", "by", "cycle", "debug", "else", "elif", "extends", "filter", "endfilter", "firstof", "for", "endfor", "if", "endif", "ifchanged", "endifchanged", "ifequal", "endifequal", "ifnotequal", "endifnotequal", "in", "include", "load", "not", "now", "or", "parsed", "regroup", "reversed", "spaceless", "endspaceless", "ssi", "templatetag", "openblock", "closeblock", "openvariable", "closevariable", "openbrace", "closebrace", "opencomment", "closecomment", "widthratio", "url", "with", "endwith", "get_current_language", "trans", "endtrans", "noop", "blocktrans", "endblocktrans", "get_available_languages", "get_current_language_bidi", "plural"], operator = /^[+\-*&%=<>!?|~^]/, sign = /^[:\[\(\{]/, atom = ["true", "false"], number = /^(\d[+\-\*\/])?\d+(\.\d+)?/; keywords = new RegExp("((" + keywords.join(")|(") + "))\\b"); atom = new RegExp("((" + atom.join(")|(") + "))\\b"); function tokenBase (stream, state) { var ch = stream.peek(); //Comment if (state.incomment) { if(!stream.skipTo("#}")) { stream.skipToEnd(); } else { stream.eatWhile(/\#|}/); state.incomment = false; } return "comment"; //Tag } else if (state.intag) { //After operator if(state.operator) { state.operator = false; if(stream.match(atom)) { return "atom"; } if(stream.match(number)) { return "number"; } } //After sign if(state.sign) { state.sign = false; if(stream.match(atom)) { return "atom"; } if(stream.match(number)) { return "number"; } } if(state.instring) { if(ch == state.instring) { state.instring = false; } stream.next(); return "string"; } else if(ch == "'" || ch == '"') { state.instring = ch; stream.next(); return "string"; } else if(stream.match(state.intag + "}") || stream.eat("-") && stream.match(state.intag + "}")) { state.intag = false; return "tag"; } else if(stream.match(operator)) { state.operator = true; return "operator"; } else if(stream.match(sign)) { state.sign = true; } else { if(stream.eat(" ") || stream.sol()) { if(stream.match(keywords)) { return "keyword"; } if(stream.match(atom)) { return "atom"; } if(stream.match(number)) { return "number"; } if(stream.sol()) { stream.next(); } } else { stream.next(); } } return "variable"; } else if (stream.eat("{")) { if (ch = stream.eat("#")) { state.incomment = true; if(!stream.skipTo("#}")) { stream.skipToEnd(); } else { stream.eatWhile(/\#|}/); state.incomment = false; } return "comment"; //Open tag } else if (ch = stream.eat(/\{|%/)) { //Cache close tag state.intag = ch; if(ch == "{") { state.intag = "}"; } stream.eat("-"); return "tag"; } } stream.next(); }; return { startState: function () { return {tokenize: tokenBase}; }, token: function (stream, state) { return state.tokenize(stream, state); } }; }); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/julia/index.html ================================================ CodeMirror: Julia mode

                  Julia mode

                  MIME types defined: text/x-julia.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/julia/julia.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("julia", function(_conf, parserConf) { var ERRORCLASS = 'error'; function wordRegexp(words) { return new RegExp("^((" + words.join(")|(") + "))\\b"); } var operators = parserConf.operators || /^\.?[|&^\\%*+\-<>!=\/]=?|\?|~|:|\$|\.[<>]|<<=?|>>>?=?|\.[<>=]=|->?|\/\/|\bin\b/; var delimiters = parserConf.delimiters || /^[;,()[\]{}]/; var identifiers = parserConf.identifiers|| /^[_A-Za-z\u00A1-\uFFFF][_A-Za-z0-9\u00A1-\uFFFF]*!*/; var blockOpeners = ["begin", "function", "type", "immutable", "let", "macro", "for", "while", "quote", "if", "else", "elseif", "try", "finally", "catch", "do"]; var blockClosers = ["end", "else", "elseif", "catch", "finally"]; var keywordList = ['if', 'else', 'elseif', 'while', 'for', 'begin', 'let', 'end', 'do', 'try', 'catch', 'finally', 'return', 'break', 'continue', 'global', 'local', 'const', 'export', 'import', 'importall', 'using', 'function', 'macro', 'module', 'baremodule', 'type', 'immutable', 'quote', 'typealias', 'abstract', 'bitstype', 'ccall']; var builtinList = ['true', 'false', 'enumerate', 'open', 'close', 'nothing', 'NaN', 'Inf', 'print', 'println', 'Int', 'Int8', 'Uint8', 'Int16', 'Uint16', 'Int32', 'Uint32', 'Int64', 'Uint64', 'Int128', 'Uint128', 'Bool', 'Char', 'Float16', 'Float32', 'Float64', 'Array', 'Vector', 'Matrix', 'String', 'UTF8String', 'ASCIIString', 'error', 'warn', 'info', '@printf']; //var stringPrefixes = new RegExp("^[br]?('|\")") var stringPrefixes = /^(`|'|"{3}|([br]?"))/; var keywords = wordRegexp(keywordList); var builtins = wordRegexp(builtinList); var openers = wordRegexp(blockOpeners); var closers = wordRegexp(blockClosers); var macro = /^@[_A-Za-z][_A-Za-z0-9]*/; var symbol = /^:[_A-Za-z][_A-Za-z0-9]*/; var indentInfo = null; function in_array(state) { var ch = cur_scope(state); if(ch=="[" || ch=="{") { return true; } else { return false; } } function cur_scope(state) { if(state.scopes.length==0) { return null; } return state.scopes[state.scopes.length - 1]; } // tokenizers function tokenBase(stream, state) { // Handle scope changes var leaving_expr = state.leaving_expr; if(stream.sol()) { leaving_expr = false; } state.leaving_expr = false; if(leaving_expr) { if(stream.match(/^'+/)) { return 'operator'; } } if(stream.match(/^\.{2,3}/)) { return 'operator'; } if (stream.eatSpace()) { return null; } var ch = stream.peek(); // Handle Comments if (ch === '#') { stream.skipToEnd(); return 'comment'; } if(ch==='[') { state.scopes.push("["); } if(ch==='{') { state.scopes.push("{"); } var scope=cur_scope(state); if(scope==='[' && ch===']') { state.scopes.pop(); state.leaving_expr=true; } if(scope==='{' && ch==='}') { state.scopes.pop(); state.leaving_expr=true; } if(ch===')') { state.leaving_expr = true; } var match; if(!in_array(state) && (match=stream.match(openers, false))) { state.scopes.push(match); } if(!in_array(state) && stream.match(closers, false)) { state.scopes.pop(); } if(in_array(state)) { if(stream.match(/^end/)) { return 'number'; } } if(stream.match(/^=>/)) { return 'operator'; } // Handle Number Literals if (stream.match(/^[0-9\.]/, false)) { var imMatcher = RegExp(/^im\b/); var floatLiteral = false; // Floats if (stream.match(/^\d*\.(?!\.)\d+([ef][\+\-]?\d+)?/i)) { floatLiteral = true; } if (stream.match(/^\d+\.(?!\.)\d*/)) { floatLiteral = true; } if (stream.match(/^\.\d+/)) { floatLiteral = true; } if (floatLiteral) { // Float literals may be "imaginary" stream.match(imMatcher); state.leaving_expr = true; return 'number'; } // Integers var intLiteral = false; // Hex if (stream.match(/^0x[0-9a-f]+/i)) { intLiteral = true; } // Binary if (stream.match(/^0b[01]+/i)) { intLiteral = true; } // Octal if (stream.match(/^0o[0-7]+/i)) { intLiteral = true; } // Decimal if (stream.match(/^[1-9]\d*(e[\+\-]?\d+)?/)) { intLiteral = true; } // Zero by itself with no other piece of number. if (stream.match(/^0(?![\dx])/i)) { intLiteral = true; } if (intLiteral) { // Integer literals may be "long" stream.match(imMatcher); state.leaving_expr = true; return 'number'; } } if(stream.match(/^(::)|(<:)/)) { return 'operator'; } // Handle symbols if(!leaving_expr && stream.match(symbol)) { return 'string'; } // Handle operators and Delimiters if (stream.match(operators)) { return 'operator'; } // Handle Strings if (stream.match(stringPrefixes)) { state.tokenize = tokenStringFactory(stream.current()); return state.tokenize(stream, state); } if (stream.match(macro)) { return 'meta'; } if (stream.match(delimiters)) { return null; } if (stream.match(keywords)) { return 'keyword'; } if (stream.match(builtins)) { return 'builtin'; } if (stream.match(identifiers)) { state.leaving_expr=true; return 'variable'; } // Handle non-detected items stream.next(); return ERRORCLASS; } function tokenStringFactory(delimiter) { while ('rub'.indexOf(delimiter.charAt(0).toLowerCase()) >= 0) { delimiter = delimiter.substr(1); } var singleline = delimiter.length == 1; var OUTCLASS = 'string'; function tokenString(stream, state) { while (!stream.eol()) { stream.eatWhile(/[^'"\\]/); if (stream.eat('\\')) { stream.next(); if (singleline && stream.eol()) { return OUTCLASS; } } else if (stream.match(delimiter)) { state.tokenize = tokenBase; return OUTCLASS; } else { stream.eat(/['"]/); } } if (singleline) { if (parserConf.singleLineStringErrors) { return ERRORCLASS; } else { state.tokenize = tokenBase; } } return OUTCLASS; } tokenString.isString = true; return tokenString; } function tokenLexer(stream, state) { indentInfo = null; var style = state.tokenize(stream, state); var current = stream.current(); // Handle '.' connected identifiers if (current === '.') { style = stream.match(identifiers, false) ? null : ERRORCLASS; if (style === null && state.lastStyle === 'meta') { // Apply 'meta' style to '.' connected identifiers when // appropriate. style = 'meta'; } return style; } return style; } var external = { startState: function() { return { tokenize: tokenBase, scopes: [], leaving_expr: false }; }, token: function(stream, state) { var style = tokenLexer(stream, state); state.lastStyle = style; return style; }, indent: function(state, textAfter) { var delta = 0; if(textAfter=="end" || textAfter=="]" || textAfter=="}" || textAfter=="else" || textAfter=="elseif" || textAfter=="catch" || textAfter=="finally") { delta = -1; } return (state.scopes.length + delta) * 4; }, lineComment: "#", fold: "indent", electricChars: "edlsifyh]}" }; return external; }); CodeMirror.defineMIME("text/x-julia", "julia"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/kotlin/index.html ================================================ CodeMirror: Kotlin mode

                  Kotlin mode

                  Mode for Kotlin (http://kotlin.jetbrains.org/)

                  Developed by Hadi Hariri (https://github.com/hhariri).

                  MIME type defined: text/x-kotlin.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/kotlin/kotlin.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("kotlin", function (config, parserConfig) { function words(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } var multiLineStrings = parserConfig.multiLineStrings; var keywords = words( "package continue return object while break class data trait throw super" + " when type this else This try val var fun for is in if do as true false null get set"); var softKeywords = words("import" + " where by get set abstract enum open annotation override private public internal" + " protected catch out vararg inline finally final ref"); var blockKeywords = words("catch class do else finally for if where try while enum"); var atoms = words("null true false this"); var curPunc; function tokenBase(stream, state) { var ch = stream.next(); if (ch == '"' || ch == "'") { return startString(ch, stream, state); } // Wildcard import w/o trailing semicolon (import smth.*) if (ch == "." && stream.eat("*")) { return "word"; } if (/[\[\]{}\(\),;\:\.]/.test(ch)) { curPunc = ch; return null; } if (/\d/.test(ch)) { if (stream.eat(/eE/)) { stream.eat(/\+\-/); stream.eatWhile(/\d/); } return "number"; } if (ch == "/") { if (stream.eat("*")) { state.tokenize.push(tokenComment); return tokenComment(stream, state); } if (stream.eat("/")) { stream.skipToEnd(); return "comment"; } if (expectExpression(state.lastToken)) { return startString(ch, stream, state); } } // Commented if (ch == "-" && stream.eat(">")) { curPunc = "->"; return null; } if (/[\-+*&%=<>!?|\/~]/.test(ch)) { stream.eatWhile(/[\-+*&%=<>|~]/); return "operator"; } stream.eatWhile(/[\w\$_]/); var cur = stream.current(); if (atoms.propertyIsEnumerable(cur)) { return "atom"; } if (softKeywords.propertyIsEnumerable(cur)) { if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; return "softKeyword"; } if (keywords.propertyIsEnumerable(cur)) { if (blockKeywords.propertyIsEnumerable(cur)) curPunc = "newstatement"; return "keyword"; } return "word"; } tokenBase.isBase = true; function startString(quote, stream, state) { var tripleQuoted = false; if (quote != "/" && stream.eat(quote)) { if (stream.eat(quote)) tripleQuoted = true; else return "string"; } function t(stream, state) { var escaped = false, next, end = !tripleQuoted; while ((next = stream.next()) != null) { if (next == quote && !escaped) { if (!tripleQuoted) { break; } if (stream.match(quote + quote)) { end = true; break; } } if (quote == '"' && next == "$" && !escaped && stream.eat("{")) { state.tokenize.push(tokenBaseUntilBrace()); return "string"; } if (next == "$" && !escaped && !stream.eat(" ")) { state.tokenize.push(tokenBaseUntilSpace()); return "string"; } escaped = !escaped && next == "\\"; } if (multiLineStrings) state.tokenize.push(t); if (end) state.tokenize.pop(); return "string"; } state.tokenize.push(t); return t(stream, state); } function tokenBaseUntilBrace() { var depth = 1; function t(stream, state) { if (stream.peek() == "}") { depth--; if (depth == 0) { state.tokenize.pop(); return state.tokenize[state.tokenize.length - 1](stream, state); } } else if (stream.peek() == "{") { depth++; } return tokenBase(stream, state); } t.isBase = true; return t; } function tokenBaseUntilSpace() { function t(stream, state) { if (stream.eat(/[\w]/)) { var isWord = stream.eatWhile(/[\w]/); if (isWord) { state.tokenize.pop(); return "word"; } } state.tokenize.pop(); return "string"; } t.isBase = true; return t; } function tokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "/" && maybeEnd) { state.tokenize.pop(); break; } maybeEnd = (ch == "*"); } return "comment"; } function expectExpression(last) { return !last || last == "operator" || last == "->" || /[\.\[\{\(,;:]/.test(last) || last == "newstatement" || last == "keyword" || last == "proplabel"; } function Context(indented, column, type, align, prev) { this.indented = indented; this.column = column; this.type = type; this.align = align; this.prev = prev; } function pushContext(state, col, type) { return state.context = new Context(state.indented, col, type, null, state.context); } function popContext(state) { var t = state.context.type; if (t == ")" || t == "]" || t == "}") state.indented = state.context.indented; return state.context = state.context.prev; } // Interface return { startState: function (basecolumn) { return { tokenize: [tokenBase], context: new Context((basecolumn || 0) - config.indentUnit, 0, "top", false), indented: 0, startOfLine: true, lastToken: null }; }, token: function (stream, state) { var ctx = state.context; if (stream.sol()) { if (ctx.align == null) ctx.align = false; state.indented = stream.indentation(); state.startOfLine = true; // Automatic semicolon insertion if (ctx.type == "statement" && !expectExpression(state.lastToken)) { popContext(state); ctx = state.context; } } if (stream.eatSpace()) return null; curPunc = null; var style = state.tokenize[state.tokenize.length - 1](stream, state); if (style == "comment") return style; if (ctx.align == null) ctx.align = true; if ((curPunc == ";" || curPunc == ":") && ctx.type == "statement") popContext(state); // Handle indentation for {x -> \n ... } else if (curPunc == "->" && ctx.type == "statement" && ctx.prev.type == "}") { popContext(state); state.context.align = false; } else if (curPunc == "{") pushContext(state, stream.column(), "}"); else if (curPunc == "[") pushContext(state, stream.column(), "]"); else if (curPunc == "(") pushContext(state, stream.column(), ")"); else if (curPunc == "}") { while (ctx.type == "statement") ctx = popContext(state); if (ctx.type == "}") ctx = popContext(state); while (ctx.type == "statement") ctx = popContext(state); } else if (curPunc == ctx.type) popContext(state); else if (ctx.type == "}" || ctx.type == "top" || (ctx.type == "statement" && curPunc == "newstatement")) pushContext(state, stream.column(), "statement"); state.startOfLine = false; state.lastToken = curPunc || style; return style; }, indent: function (state, textAfter) { if (!state.tokenize[state.tokenize.length - 1].isBase) return 0; var firstChar = textAfter && textAfter.charAt(0), ctx = state.context; if (ctx.type == "statement" && !expectExpression(state.lastToken)) ctx = ctx.prev; var closing = firstChar == ctx.type; if (ctx.type == "statement") { return ctx.indented + (firstChar == "{" ? 0 : config.indentUnit); } else if (ctx.align) return ctx.column + (closing ? 0 : 1); else return ctx.indented + (closing ? 0 : config.indentUnit); }, electricChars: "{}" }; }); CodeMirror.defineMIME("text/x-kotlin", "kotlin"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/livescript/index.html ================================================ CodeMirror: LiveScript mode

                  LiveScript mode

                  MIME types defined: text/x-livescript.

                  The LiveScript mode was written by Kenneth Bentley.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/livescript/livescript.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE /** * Link to the project's GitHub page: * https://github.com/duralog/CodeMirror */ (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode('livescript', function(){ var tokenBase = function(stream, state) { var next_rule = state.next || "start"; if (next_rule) { state.next = state.next; var nr = Rules[next_rule]; if (nr.splice) { for (var i$ = 0; i$ < nr.length; ++i$) { var r = nr[i$], m; if (r.regex && (m = stream.match(r.regex))) { state.next = r.next || state.next; return r.token; } } stream.next(); return 'error'; } if (stream.match(r = Rules[next_rule])) { if (r.regex && stream.match(r.regex)) { state.next = r.next; return r.token; } else { stream.next(); return 'error'; } } } stream.next(); return 'error'; }; var external = { startState: function(){ return { next: 'start', lastToken: null }; }, token: function(stream, state){ while (stream.pos == stream.start) var style = tokenBase(stream, state); state.lastToken = { style: style, indent: stream.indentation(), content: stream.current() }; return style.replace(/\./g, ' '); }, indent: function(state){ var indentation = state.lastToken.indent; if (state.lastToken.content.match(indenter)) { indentation += 2; } return indentation; } }; return external; }); var identifier = '(?![\\d\\s])[$\\w\\xAA-\\uFFDC](?:(?!\\s)[$\\w\\xAA-\\uFFDC]|-[A-Za-z])*'; var indenter = RegExp('(?:[({[=:]|[-~]>|\\b(?:e(?:lse|xport)|d(?:o|efault)|t(?:ry|hen)|finally|import(?:\\s*all)?|const|var|let|new|catch(?:\\s*' + identifier + ')?))\\s*$'); var keywordend = '(?![$\\w]|-[A-Za-z]|\\s*:(?![:=]))'; var stringfill = { token: 'string', regex: '.+' }; var Rules = { start: [ { token: 'comment.doc', regex: '/\\*', next: 'comment' }, { token: 'comment', regex: '#.*' }, { token: 'keyword', regex: '(?:t(?:h(?:is|row|en)|ry|ypeof!?)|c(?:on(?:tinue|st)|a(?:se|tch)|lass)|i(?:n(?:stanceof)?|mp(?:ort(?:\\s+all)?|lements)|[fs])|d(?:e(?:fault|lete|bugger)|o)|f(?:or(?:\\s+own)?|inally|unction)|s(?:uper|witch)|e(?:lse|x(?:tends|port)|val)|a(?:nd|rguments)|n(?:ew|ot)|un(?:less|til)|w(?:hile|ith)|o[fr]|return|break|let|var|loop)' + keywordend }, { token: 'constant.language', regex: '(?:true|false|yes|no|on|off|null|void|undefined)' + keywordend }, { token: 'invalid.illegal', regex: '(?:p(?:ackage|r(?:ivate|otected)|ublic)|i(?:mplements|nterface)|enum|static|yield)' + keywordend }, { token: 'language.support.class', regex: '(?:R(?:e(?:gExp|ferenceError)|angeError)|S(?:tring|yntaxError)|E(?:rror|valError)|Array|Boolean|Date|Function|Number|Object|TypeError|URIError)' + keywordend }, { token: 'language.support.function', regex: '(?:is(?:NaN|Finite)|parse(?:Int|Float)|Math|JSON|(?:en|de)codeURI(?:Component)?)' + keywordend }, { token: 'variable.language', regex: '(?:t(?:hat|il|o)|f(?:rom|allthrough)|it|by|e)' + keywordend }, { token: 'identifier', regex: identifier + '\\s*:(?![:=])' }, { token: 'variable', regex: identifier }, { token: 'keyword.operator', regex: '(?:\\.{3}|\\s+\\?)' }, { token: 'keyword.variable', regex: '(?:@+|::|\\.\\.)', next: 'key' }, { token: 'keyword.operator', regex: '\\.\\s*', next: 'key' }, { token: 'string', regex: '\\\\\\S[^\\s,;)}\\]]*' }, { token: 'string.doc', regex: '\'\'\'', next: 'qdoc' }, { token: 'string.doc', regex: '"""', next: 'qqdoc' }, { token: 'string', regex: '\'', next: 'qstring' }, { token: 'string', regex: '"', next: 'qqstring' }, { token: 'string', regex: '`', next: 'js' }, { token: 'string', regex: '<\\[', next: 'words' }, { token: 'string.regex', regex: '//', next: 'heregex' }, { token: 'string.regex', regex: '\\/(?:[^[\\/\\n\\\\]*(?:(?:\\\\.|\\[[^\\]\\n\\\\]*(?:\\\\.[^\\]\\n\\\\]*)*\\])[^[\\/\\n\\\\]*)*)\\/[gimy$]{0,4}', next: 'key' }, { token: 'constant.numeric', regex: '(?:0x[\\da-fA-F][\\da-fA-F_]*|(?:[2-9]|[12]\\d|3[0-6])r[\\da-zA-Z][\\da-zA-Z_]*|(?:\\d[\\d_]*(?:\\.\\d[\\d_]*)?|\\.\\d[\\d_]*)(?:e[+-]?\\d[\\d_]*)?[\\w$]*)' }, { token: 'lparen', regex: '[({[]' }, { token: 'rparen', regex: '[)}\\]]', next: 'key' }, { token: 'keyword.operator', regex: '\\S+' }, { token: 'text', regex: '\\s+' } ], heregex: [ { token: 'string.regex', regex: '.*?//[gimy$?]{0,4}', next: 'start' }, { token: 'string.regex', regex: '\\s*#{' }, { token: 'comment.regex', regex: '\\s+(?:#.*)?' }, { token: 'string.regex', regex: '\\S+' } ], key: [ { token: 'keyword.operator', regex: '[.?@!]+' }, { token: 'identifier', regex: identifier, next: 'start' }, { token: 'text', regex: '', next: 'start' } ], comment: [ { token: 'comment.doc', regex: '.*?\\*/', next: 'start' }, { token: 'comment.doc', regex: '.+' } ], qdoc: [ { token: 'string', regex: ".*?'''", next: 'key' }, stringfill ], qqdoc: [ { token: 'string', regex: '.*?"""', next: 'key' }, stringfill ], qstring: [ { token: 'string', regex: '[^\\\\\']*(?:\\\\.[^\\\\\']*)*\'', next: 'key' }, stringfill ], qqstring: [ { token: 'string', regex: '[^\\\\"]*(?:\\\\.[^\\\\"]*)*"', next: 'key' }, stringfill ], js: [ { token: 'string', regex: '[^\\\\`]*(?:\\\\.[^\\\\`]*)*`', next: 'key' }, stringfill ], words: [ { token: 'string', regex: '.*?\\]>', next: 'key' }, stringfill ] }; for (var idx in Rules) { var r = Rules[idx]; if (r.splice) { for (var i = 0, len = r.length; i < len; ++i) { var rr = r[i]; if (typeof rr.regex === 'string') { Rules[idx][i].regex = new RegExp('^' + rr.regex); } } } else if (typeof rr.regex === 'string') { Rules[idx].regex = new RegExp('^' + r.regex); } } CodeMirror.defineMIME('text/x-livescript', 'livescript'); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/lua/index.html ================================================ CodeMirror: Lua mode

                  Lua mode

                  Loosely based on Franciszek Wawrzak's CodeMirror 1 mode. One configuration parameter is supported, specials, to which you can provide an array of strings to have those identifiers highlighted with the lua-special style.

                  MIME types defined: text/x-lua.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/lua/lua.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE // LUA mode. Ported to CodeMirror 2 from Franciszek Wawrzak's // CodeMirror 1 mode. // highlights keywords, strings, comments (no leveling supported! ("[==[")), tokens, basic indenting (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("lua", function(config, parserConfig) { var indentUnit = config.indentUnit; function prefixRE(words) { return new RegExp("^(?:" + words.join("|") + ")", "i"); } function wordRE(words) { return new RegExp("^(?:" + words.join("|") + ")$", "i"); } var specials = wordRE(parserConfig.specials || []); // long list of standard functions from lua manual var builtins = wordRE([ "_G","_VERSION","assert","collectgarbage","dofile","error","getfenv","getmetatable","ipairs","load", "loadfile","loadstring","module","next","pairs","pcall","print","rawequal","rawget","rawset","require", "select","setfenv","setmetatable","tonumber","tostring","type","unpack","xpcall", "coroutine.create","coroutine.resume","coroutine.running","coroutine.status","coroutine.wrap","coroutine.yield", "debug.debug","debug.getfenv","debug.gethook","debug.getinfo","debug.getlocal","debug.getmetatable", "debug.getregistry","debug.getupvalue","debug.setfenv","debug.sethook","debug.setlocal","debug.setmetatable", "debug.setupvalue","debug.traceback", "close","flush","lines","read","seek","setvbuf","write", "io.close","io.flush","io.input","io.lines","io.open","io.output","io.popen","io.read","io.stderr","io.stdin", "io.stdout","io.tmpfile","io.type","io.write", "math.abs","math.acos","math.asin","math.atan","math.atan2","math.ceil","math.cos","math.cosh","math.deg", "math.exp","math.floor","math.fmod","math.frexp","math.huge","math.ldexp","math.log","math.log10","math.max", "math.min","math.modf","math.pi","math.pow","math.rad","math.random","math.randomseed","math.sin","math.sinh", "math.sqrt","math.tan","math.tanh", "os.clock","os.date","os.difftime","os.execute","os.exit","os.getenv","os.remove","os.rename","os.setlocale", "os.time","os.tmpname", "package.cpath","package.loaded","package.loaders","package.loadlib","package.path","package.preload", "package.seeall", "string.byte","string.char","string.dump","string.find","string.format","string.gmatch","string.gsub", "string.len","string.lower","string.match","string.rep","string.reverse","string.sub","string.upper", "table.concat","table.insert","table.maxn","table.remove","table.sort" ]); var keywords = wordRE(["and","break","elseif","false","nil","not","or","return", "true","function", "end", "if", "then", "else", "do", "while", "repeat", "until", "for", "in", "local" ]); var indentTokens = wordRE(["function", "if","repeat","do", "\\(", "{"]); var dedentTokens = wordRE(["end", "until", "\\)", "}"]); var dedentPartial = prefixRE(["end", "until", "\\)", "}", "else", "elseif"]); function readBracket(stream) { var level = 0; while (stream.eat("=")) ++level; stream.eat("["); return level; } function normal(stream, state) { var ch = stream.next(); if (ch == "-" && stream.eat("-")) { if (stream.eat("[") && stream.eat("[")) return (state.cur = bracketed(readBracket(stream), "comment"))(stream, state); stream.skipToEnd(); return "comment"; } if (ch == "\"" || ch == "'") return (state.cur = string(ch))(stream, state); if (ch == "[" && /[\[=]/.test(stream.peek())) return (state.cur = bracketed(readBracket(stream), "string"))(stream, state); if (/\d/.test(ch)) { stream.eatWhile(/[\w.%]/); return "number"; } if (/[\w_]/.test(ch)) { stream.eatWhile(/[\w\\\-_.]/); return "variable"; } return null; } function bracketed(level, style) { return function(stream, state) { var curlev = null, ch; while ((ch = stream.next()) != null) { if (curlev == null) {if (ch == "]") curlev = 0;} else if (ch == "=") ++curlev; else if (ch == "]" && curlev == level) { state.cur = normal; break; } else curlev = null; } return style; }; } function string(quote) { return function(stream, state) { var escaped = false, ch; while ((ch = stream.next()) != null) { if (ch == quote && !escaped) break; escaped = !escaped && ch == "\\"; } if (!escaped) state.cur = normal; return "string"; }; } return { startState: function(basecol) { return {basecol: basecol || 0, indentDepth: 0, cur: normal}; }, token: function(stream, state) { if (stream.eatSpace()) return null; var style = state.cur(stream, state); var word = stream.current(); if (style == "variable") { if (keywords.test(word)) style = "keyword"; else if (builtins.test(word)) style = "builtin"; else if (specials.test(word)) style = "variable-2"; } if ((style != "comment") && (style != "string")){ if (indentTokens.test(word)) ++state.indentDepth; else if (dedentTokens.test(word)) --state.indentDepth; } return style; }, indent: function(state, textAfter) { var closing = dedentPartial.test(textAfter); return state.basecol + indentUnit * (state.indentDepth - (closing ? 1 : 0)); }, lineComment: "--", blockCommentStart: "--[[", blockCommentEnd: "]]" }; }); CodeMirror.defineMIME("text/x-lua", "lua"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/markdown/index.html ================================================ CodeMirror: Markdown mode

                  Markdown mode

                  Optionally depends on the XML mode for properly highlighted inline XML blocks.

                  MIME types defined: text/x-markdown.

                  Parsing/Highlighting Tests: normal, verbose.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/markdown/markdown.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../xml/xml"), require("../meta")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../xml/xml", "../meta"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("markdown", function(cmCfg, modeCfg) { var htmlFound = CodeMirror.modes.hasOwnProperty("xml"); var htmlMode = CodeMirror.getMode(cmCfg, htmlFound ? {name: "xml", htmlMode: true} : "text/plain"); function getMode(name) { if (CodeMirror.findModeByName) { var found = CodeMirror.findModeByName(name); if (found) name = found.mime || found.mimes[0]; } var mode = CodeMirror.getMode(cmCfg, name); return mode.name == "null" ? null : mode; } // Should characters that affect highlighting be highlighted separate? // Does not include characters that will be output (such as `1.` and `-` for lists) if (modeCfg.highlightFormatting === undefined) modeCfg.highlightFormatting = false; // Maximum number of nested blockquotes. Set to 0 for infinite nesting. // Excess `>` will emit `error` token. if (modeCfg.maxBlockquoteDepth === undefined) modeCfg.maxBlockquoteDepth = 0; // Should underscores in words open/close em/strong? if (modeCfg.underscoresBreakWords === undefined) modeCfg.underscoresBreakWords = true; // Turn on fenced code blocks? ("```" to start/end) if (modeCfg.fencedCodeBlocks === undefined) modeCfg.fencedCodeBlocks = false; // Turn on task lists? ("- [ ] " and "- [x] ") if (modeCfg.taskLists === undefined) modeCfg.taskLists = false; // Turn on strikethrough syntax if (modeCfg.strikethrough === undefined) modeCfg.strikethrough = false; var codeDepth = 0; var header = 'header' , code = 'comment' , quote = 'quote' , list1 = 'variable-2' , list2 = 'variable-3' , list3 = 'keyword' , hr = 'hr' , image = 'tag' , formatting = 'formatting' , linkinline = 'link' , linkemail = 'link' , linktext = 'link' , linkhref = 'string' , em = 'em' , strong = 'strong' , strikethrough = 'strikethrough'; var hrRE = /^([*\-=_])(?:\s*\1){2,}\s*$/ , ulRE = /^[*\-+]\s+/ , olRE = /^[0-9]+\.\s+/ , taskListRE = /^\[(x| )\](?=\s)/ // Must follow ulRE or olRE , atxHeaderRE = /^#+/ , setextHeaderRE = /^(?:\={1,}|-{1,})$/ , textRE = /^[^#!\[\]*_\\<>` "'(~]+/; function switchInline(stream, state, f) { state.f = state.inline = f; return f(stream, state); } function switchBlock(stream, state, f) { state.f = state.block = f; return f(stream, state); } // Blocks function blankLine(state) { // Reset linkTitle state state.linkTitle = false; // Reset EM state state.em = false; // Reset STRONG state state.strong = false; // Reset strikethrough state state.strikethrough = false; // Reset state.quote state.quote = 0; if (!htmlFound && state.f == htmlBlock) { state.f = inlineNormal; state.block = blockNormal; } // Reset state.trailingSpace state.trailingSpace = 0; state.trailingSpaceNewLine = false; // Mark this line as blank state.thisLineHasContent = false; return null; } function blockNormal(stream, state) { var sol = stream.sol(); var prevLineIsList = (state.list !== false); if (state.list !== false && state.indentationDiff >= 0) { // Continued list if (state.indentationDiff < 4) { // Only adjust indentation if *not* a code block state.indentation -= state.indentationDiff; } state.list = null; } else if (state.list !== false && state.indentation > 0) { state.list = null; state.listDepth = Math.floor(state.indentation / 4); } else if (state.list !== false) { // No longer a list state.list = false; state.listDepth = 0; } var match = null; if (state.indentationDiff >= 4) { state.indentation -= 4; stream.skipToEnd(); return code; } else if (stream.eatSpace()) { return null; } else if (match = stream.match(atxHeaderRE)) { state.header = match[0].length <= 6 ? match[0].length : 6; if (modeCfg.highlightFormatting) state.formatting = "header"; state.f = state.inline; return getType(state); } else if (state.prevLineHasContent && (match = stream.match(setextHeaderRE))) { state.header = match[0].charAt(0) == '=' ? 1 : 2; if (modeCfg.highlightFormatting) state.formatting = "header"; state.f = state.inline; return getType(state); } else if (stream.eat('>')) { state.indentation++; state.quote = sol ? 1 : state.quote + 1; if (modeCfg.highlightFormatting) state.formatting = "quote"; stream.eatSpace(); return getType(state); } else if (stream.peek() === '[') { return switchInline(stream, state, footnoteLink); } else if (stream.match(hrRE, true)) { return hr; } else if ((!state.prevLineHasContent || prevLineIsList) && (stream.match(ulRE, false) || stream.match(olRE, false))) { var listType = null; if (stream.match(ulRE, true)) { listType = 'ul'; } else { stream.match(olRE, true); listType = 'ol'; } state.indentation += 4; state.list = true; state.listDepth++; if (modeCfg.taskLists && stream.match(taskListRE, false)) { state.taskList = true; } state.f = state.inline; if (modeCfg.highlightFormatting) state.formatting = ["list", "list-" + listType]; return getType(state); } else if (modeCfg.fencedCodeBlocks && stream.match(/^```[ \t]*([\w+#]*)/, true)) { // try switching mode state.localMode = getMode(RegExp.$1); if (state.localMode) state.localState = state.localMode.startState(); state.f = state.block = local; if (modeCfg.highlightFormatting) state.formatting = "code-block"; state.code = true; return getType(state); } return switchInline(stream, state, state.inline); } function htmlBlock(stream, state) { var style = htmlMode.token(stream, state.htmlState); if ((htmlFound && state.htmlState.tagStart === null && !state.htmlState.context) || (state.md_inside && stream.current().indexOf(">") > -1)) { state.f = inlineNormal; state.block = blockNormal; state.htmlState = null; } return style; } function local(stream, state) { if (stream.sol() && stream.match("```", false)) { state.localMode = state.localState = null; state.f = state.block = leavingLocal; return null; } else if (state.localMode) { return state.localMode.token(stream, state.localState); } else { stream.skipToEnd(); return code; } } function leavingLocal(stream, state) { stream.match("```"); state.block = blockNormal; state.f = inlineNormal; if (modeCfg.highlightFormatting) state.formatting = "code-block"; state.code = true; var returnType = getType(state); state.code = false; return returnType; } // Inline function getType(state) { var styles = []; if (state.formatting) { styles.push(formatting); if (typeof state.formatting === "string") state.formatting = [state.formatting]; for (var i = 0; i < state.formatting.length; i++) { styles.push(formatting + "-" + state.formatting[i]); if (state.formatting[i] === "header") { styles.push(formatting + "-" + state.formatting[i] + "-" + state.header); } // Add `formatting-quote` and `formatting-quote-#` for blockquotes // Add `error` instead if the maximum blockquote nesting depth is passed if (state.formatting[i] === "quote") { if (!modeCfg.maxBlockquoteDepth || modeCfg.maxBlockquoteDepth >= state.quote) { styles.push(formatting + "-" + state.formatting[i] + "-" + state.quote); } else { styles.push("error"); } } } } if (state.taskOpen) { styles.push("meta"); return styles.length ? styles.join(' ') : null; } if (state.taskClosed) { styles.push("property"); return styles.length ? styles.join(' ') : null; } if (state.linkHref) { styles.push(linkhref); return styles.length ? styles.join(' ') : null; } if (state.strong) { styles.push(strong); } if (state.em) { styles.push(em); } if (state.strikethrough) { styles.push(strikethrough); } if (state.linkText) { styles.push(linktext); } if (state.code) { styles.push(code); } if (state.header) { styles.push(header); styles.push(header + "-" + state.header); } if (state.quote) { styles.push(quote); // Add `quote-#` where the maximum for `#` is modeCfg.maxBlockquoteDepth if (!modeCfg.maxBlockquoteDepth || modeCfg.maxBlockquoteDepth >= state.quote) { styles.push(quote + "-" + state.quote); } else { styles.push(quote + "-" + modeCfg.maxBlockquoteDepth); } } if (state.list !== false) { var listMod = (state.listDepth - 1) % 3; if (!listMod) { styles.push(list1); } else if (listMod === 1) { styles.push(list2); } else { styles.push(list3); } } if (state.trailingSpaceNewLine) { styles.push("trailing-space-new-line"); } else if (state.trailingSpace) { styles.push("trailing-space-" + (state.trailingSpace % 2 ? "a" : "b")); } return styles.length ? styles.join(' ') : null; } function handleText(stream, state) { if (stream.match(textRE, true)) { return getType(state); } return undefined; } function inlineNormal(stream, state) { var style = state.text(stream, state); if (typeof style !== 'undefined') return style; if (state.list) { // List marker (*, +, -, 1., etc) state.list = null; return getType(state); } if (state.taskList) { var taskOpen = stream.match(taskListRE, true)[1] !== "x"; if (taskOpen) state.taskOpen = true; else state.taskClosed = true; if (modeCfg.highlightFormatting) state.formatting = "task"; state.taskList = false; return getType(state); } state.taskOpen = false; state.taskClosed = false; if (state.header && stream.match(/^#+$/, true)) { if (modeCfg.highlightFormatting) state.formatting = "header"; return getType(state); } // Get sol() value now, before character is consumed var sol = stream.sol(); var ch = stream.next(); if (ch === '\\') { stream.next(); if (modeCfg.highlightFormatting) { var type = getType(state); return type ? type + " formatting-escape" : "formatting-escape"; } } // Matches link titles present on next line if (state.linkTitle) { state.linkTitle = false; var matchCh = ch; if (ch === '(') { matchCh = ')'; } matchCh = (matchCh+'').replace(/([.?*+^$[\]\\(){}|-])/g, "\\$1"); var regex = '^\\s*(?:[^' + matchCh + '\\\\]+|\\\\\\\\|\\\\.)' + matchCh; if (stream.match(new RegExp(regex), true)) { return linkhref; } } // If this block is changed, it may need to be updated in GFM mode if (ch === '`') { var previousFormatting = state.formatting; if (modeCfg.highlightFormatting) state.formatting = "code"; var t = getType(state); var before = stream.pos; stream.eatWhile('`'); var difference = 1 + stream.pos - before; if (!state.code) { codeDepth = difference; state.code = true; return getType(state); } else { if (difference === codeDepth) { // Must be exact state.code = false; return t; } state.formatting = previousFormatting; return getType(state); } } else if (state.code) { return getType(state); } if (ch === '!' && stream.match(/\[[^\]]*\] ?(?:\(|\[)/, false)) { stream.match(/\[[^\]]*\]/); state.inline = state.f = linkHref; return image; } if (ch === '[' && stream.match(/.*\](\(.*\)| ?\[.*\])/, false)) { state.linkText = true; if (modeCfg.highlightFormatting) state.formatting = "link"; return getType(state); } if (ch === ']' && state.linkText && stream.match(/\(.*\)| ?\[.*\]/, false)) { if (modeCfg.highlightFormatting) state.formatting = "link"; var type = getType(state); state.linkText = false; state.inline = state.f = linkHref; return type; } if (ch === '<' && stream.match(/^(https?|ftps?):\/\/(?:[^\\>]|\\.)+>/, false)) { state.f = state.inline = linkInline; if (modeCfg.highlightFormatting) state.formatting = "link"; var type = getType(state); if (type){ type += " "; } else { type = ""; } return type + linkinline; } if (ch === '<' && stream.match(/^[^> \\]+@(?:[^\\>]|\\.)+>/, false)) { state.f = state.inline = linkInline; if (modeCfg.highlightFormatting) state.formatting = "link"; var type = getType(state); if (type){ type += " "; } else { type = ""; } return type + linkemail; } if (ch === '<' && stream.match(/^\w/, false)) { if (stream.string.indexOf(">") != -1) { var atts = stream.string.substring(1,stream.string.indexOf(">")); if (/markdown\s*=\s*('|"){0,1}1('|"){0,1}/.test(atts)) { state.md_inside = true; } } stream.backUp(1); state.htmlState = CodeMirror.startState(htmlMode); return switchBlock(stream, state, htmlBlock); } if (ch === '<' && stream.match(/^\/\w*?>/)) { state.md_inside = false; return "tag"; } var ignoreUnderscore = false; if (!modeCfg.underscoresBreakWords) { if (ch === '_' && stream.peek() !== '_' && stream.match(/(\w)/, false)) { var prevPos = stream.pos - 2; if (prevPos >= 0) { var prevCh = stream.string.charAt(prevPos); if (prevCh !== '_' && prevCh.match(/(\w)/, false)) { ignoreUnderscore = true; } } } } if (ch === '*' || (ch === '_' && !ignoreUnderscore)) { if (sol && stream.peek() === ' ') { // Do nothing, surrounded by newline and space } else if (state.strong === ch && stream.eat(ch)) { // Remove STRONG if (modeCfg.highlightFormatting) state.formatting = "strong"; var t = getType(state); state.strong = false; return t; } else if (!state.strong && stream.eat(ch)) { // Add STRONG state.strong = ch; if (modeCfg.highlightFormatting) state.formatting = "strong"; return getType(state); } else if (state.em === ch) { // Remove EM if (modeCfg.highlightFormatting) state.formatting = "em"; var t = getType(state); state.em = false; return t; } else if (!state.em) { // Add EM state.em = ch; if (modeCfg.highlightFormatting) state.formatting = "em"; return getType(state); } } else if (ch === ' ') { if (stream.eat('*') || stream.eat('_')) { // Probably surrounded by spaces if (stream.peek() === ' ') { // Surrounded by spaces, ignore return getType(state); } else { // Not surrounded by spaces, back up pointer stream.backUp(1); } } } if (modeCfg.strikethrough) { if (ch === '~' && stream.eatWhile(ch)) { if (state.strikethrough) {// Remove strikethrough if (modeCfg.highlightFormatting) state.formatting = "strikethrough"; var t = getType(state); state.strikethrough = false; return t; } else if (stream.match(/^[^\s]/, false)) {// Add strikethrough state.strikethrough = true; if (modeCfg.highlightFormatting) state.formatting = "strikethrough"; return getType(state); } } else if (ch === ' ') { if (stream.match(/^~~/, true)) { // Probably surrounded by space if (stream.peek() === ' ') { // Surrounded by spaces, ignore return getType(state); } else { // Not surrounded by spaces, back up pointer stream.backUp(2); } } } } if (ch === ' ') { if (stream.match(/ +$/, false)) { state.trailingSpace++; } else if (state.trailingSpace) { state.trailingSpaceNewLine = true; } } return getType(state); } function linkInline(stream, state) { var ch = stream.next(); if (ch === ">") { state.f = state.inline = inlineNormal; if (modeCfg.highlightFormatting) state.formatting = "link"; var type = getType(state); if (type){ type += " "; } else { type = ""; } return type + linkinline; } stream.match(/^[^>]+/, true); return linkinline; } function linkHref(stream, state) { // Check if space, and return NULL if so (to avoid marking the space) if(stream.eatSpace()){ return null; } var ch = stream.next(); if (ch === '(' || ch === '[') { state.f = state.inline = getLinkHrefInside(ch === "(" ? ")" : "]"); if (modeCfg.highlightFormatting) state.formatting = "link-string"; state.linkHref = true; return getType(state); } return 'error'; } function getLinkHrefInside(endChar) { return function(stream, state) { var ch = stream.next(); if (ch === endChar) { state.f = state.inline = inlineNormal; if (modeCfg.highlightFormatting) state.formatting = "link-string"; var returnState = getType(state); state.linkHref = false; return returnState; } if (stream.match(inlineRE(endChar), true)) { stream.backUp(1); } state.linkHref = true; return getType(state); }; } function footnoteLink(stream, state) { if (stream.match(/^[^\]]*\]:/, false)) { state.f = footnoteLinkInside; stream.next(); // Consume [ if (modeCfg.highlightFormatting) state.formatting = "link"; state.linkText = true; return getType(state); } return switchInline(stream, state, inlineNormal); } function footnoteLinkInside(stream, state) { if (stream.match(/^\]:/, true)) { state.f = state.inline = footnoteUrl; if (modeCfg.highlightFormatting) state.formatting = "link"; var returnType = getType(state); state.linkText = false; return returnType; } stream.match(/^[^\]]+/, true); return linktext; } function footnoteUrl(stream, state) { // Check if space, and return NULL if so (to avoid marking the space) if(stream.eatSpace()){ return null; } // Match URL stream.match(/^[^\s]+/, true); // Check for link title if (stream.peek() === undefined) { // End of line, set flag to check next line state.linkTitle = true; } else { // More content on line, check if link title stream.match(/^(?:\s+(?:"(?:[^"\\]|\\\\|\\.)+"|'(?:[^'\\]|\\\\|\\.)+'|\((?:[^)\\]|\\\\|\\.)+\)))?/, true); } state.f = state.inline = inlineNormal; return linkhref; } var savedInlineRE = []; function inlineRE(endChar) { if (!savedInlineRE[endChar]) { // Escape endChar for RegExp (taken from http://stackoverflow.com/a/494122/526741) endChar = (endChar+'').replace(/([.?*+^$[\]\\(){}|-])/g, "\\$1"); // Match any non-endChar, escaped character, as well as the closing // endChar. savedInlineRE[endChar] = new RegExp('^(?:[^\\\\]|\\\\.)*?(' + endChar + ')'); } return savedInlineRE[endChar]; } var mode = { startState: function() { return { f: blockNormal, prevLineHasContent: false, thisLineHasContent: false, block: blockNormal, htmlState: null, indentation: 0, inline: inlineNormal, text: handleText, formatting: false, linkText: false, linkHref: false, linkTitle: false, em: false, strong: false, header: 0, taskList: false, list: false, listDepth: 0, quote: 0, trailingSpace: 0, trailingSpaceNewLine: false, strikethrough: false }; }, copyState: function(s) { return { f: s.f, prevLineHasContent: s.prevLineHasContent, thisLineHasContent: s.thisLineHasContent, block: s.block, htmlState: s.htmlState && CodeMirror.copyState(htmlMode, s.htmlState), indentation: s.indentation, localMode: s.localMode, localState: s.localMode ? CodeMirror.copyState(s.localMode, s.localState) : null, inline: s.inline, text: s.text, formatting: false, linkTitle: s.linkTitle, em: s.em, strong: s.strong, strikethrough: s.strikethrough, header: s.header, taskList: s.taskList, list: s.list, listDepth: s.listDepth, quote: s.quote, trailingSpace: s.trailingSpace, trailingSpaceNewLine: s.trailingSpaceNewLine, md_inside: s.md_inside }; }, token: function(stream, state) { // Reset state.formatting state.formatting = false; if (stream.sol()) { var forceBlankLine = !!state.header; // Reset state.header state.header = 0; if (stream.match(/^\s*$/, true) || forceBlankLine) { state.prevLineHasContent = false; blankLine(state); return forceBlankLine ? this.token(stream, state) : null; } else { state.prevLineHasContent = state.thisLineHasContent; state.thisLineHasContent = true; } // Reset state.taskList state.taskList = false; // Reset state.code state.code = false; // Reset state.trailingSpace state.trailingSpace = 0; state.trailingSpaceNewLine = false; state.f = state.block; var indentation = stream.match(/^\s*/, true)[0].replace(/\t/g, ' ').length; var difference = Math.floor((indentation - state.indentation) / 4) * 4; if (difference > 4) difference = 4; var adjustedIndentation = state.indentation + difference; state.indentationDiff = adjustedIndentation - state.indentation; state.indentation = adjustedIndentation; if (indentation > 0) return null; } return state.f(stream, state); }, innerMode: function(state) { if (state.block == htmlBlock) return {state: state.htmlState, mode: htmlMode}; if (state.localState) return {state: state.localState, mode: state.localMode}; return {state: state, mode: mode}; }, blankLine: blankLine, getType: getType, fold: "markdown" }; return mode; }, "xml"); CodeMirror.defineMIME("text/x-markdown", "markdown"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/markdown/test.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function() { var mode = CodeMirror.getMode({tabSize: 4}, "markdown"); function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } var modeHighlightFormatting = CodeMirror.getMode({tabSize: 4}, {name: "markdown", highlightFormatting: true}); function FT(name) { test.mode(name, modeHighlightFormatting, Array.prototype.slice.call(arguments, 1)); } FT("formatting_emAsterisk", "[em&formatting&formatting-em *][em foo][em&formatting&formatting-em *]"); FT("formatting_emUnderscore", "[em&formatting&formatting-em _][em foo][em&formatting&formatting-em _]"); FT("formatting_strongAsterisk", "[strong&formatting&formatting-strong **][strong foo][strong&formatting&formatting-strong **]"); FT("formatting_strongUnderscore", "[strong&formatting&formatting-strong __][strong foo][strong&formatting&formatting-strong __]"); FT("formatting_codeBackticks", "[comment&formatting&formatting-code `][comment foo][comment&formatting&formatting-code `]"); FT("formatting_doubleBackticks", "[comment&formatting&formatting-code ``][comment foo ` bar][comment&formatting&formatting-code ``]"); FT("formatting_atxHeader", "[header&header-1&formatting&formatting-header&formatting-header-1 #][header&header-1 foo # bar ][header&header-1&formatting&formatting-header&formatting-header-1 #]"); FT("formatting_setextHeader", "foo", "[header&header-1&formatting&formatting-header&formatting-header-1 =]"); FT("formatting_blockquote", "[quote"e-1&formatting&formatting-quote&formatting-quote-1 > ][quote"e-1 foo]"); FT("formatting_list", "[variable-2&formatting&formatting-list&formatting-list-ul - ][variable-2 foo]"); FT("formatting_list", "[variable-2&formatting&formatting-list&formatting-list-ol 1. ][variable-2 foo]"); FT("formatting_link", "[link&formatting&formatting-link [][link foo][link&formatting&formatting-link ]]][string&formatting&formatting-link-string (][string http://example.com/][string&formatting&formatting-link-string )]"); FT("formatting_linkReference", "[link&formatting&formatting-link [][link foo][link&formatting&formatting-link ]]][string&formatting&formatting-link-string [][string bar][string&formatting&formatting-link-string ]]]", "[link&formatting&formatting-link [][link bar][link&formatting&formatting-link ]]:] [string http://example.com/]"); FT("formatting_linkWeb", "[link&formatting&formatting-link <][link http://example.com/][link&formatting&formatting-link >]"); FT("formatting_linkEmail", "[link&formatting&formatting-link <][link user@example.com][link&formatting&formatting-link >]"); FT("formatting_escape", "[formatting-escape \\*]"); MT("plainText", "foo"); // Don't style single trailing space MT("trailingSpace1", "foo "); // Two or more trailing spaces should be styled with line break character MT("trailingSpace2", "foo[trailing-space-a ][trailing-space-new-line ]"); MT("trailingSpace3", "foo[trailing-space-a ][trailing-space-b ][trailing-space-new-line ]"); MT("trailingSpace4", "foo[trailing-space-a ][trailing-space-b ][trailing-space-a ][trailing-space-new-line ]"); // Code blocks using 4 spaces (regardless of CodeMirror.tabSize value) MT("codeBlocksUsing4Spaces", " [comment foo]"); // Code blocks using 4 spaces with internal indentation MT("codeBlocksUsing4SpacesIndentation", " [comment bar]", " [comment hello]", " [comment world]", " [comment foo]", "bar"); // Code blocks using 4 spaces with internal indentation MT("codeBlocksUsing4SpacesIndentation", " foo", " [comment bar]", " [comment hello]", " [comment world]"); // Code blocks should end even after extra indented lines MT("codeBlocksWithTrailingIndentedLine", " [comment foo]", " [comment bar]", " [comment baz]", " ", "hello"); // Code blocks using 1 tab (regardless of CodeMirror.indentWithTabs value) MT("codeBlocksUsing1Tab", "\t[comment foo]"); // Inline code using backticks MT("inlineCodeUsingBackticks", "foo [comment `bar`]"); // Block code using single backtick (shouldn't work) MT("blockCodeSingleBacktick", "[comment `]", "foo", "[comment `]"); // Unclosed backticks // Instead of simply marking as CODE, it would be nice to have an // incomplete flag for CODE, that is styled slightly different. MT("unclosedBackticks", "foo [comment `bar]"); // Per documentation: "To include a literal backtick character within a // code span, you can use multiple backticks as the opening and closing // delimiters" MT("doubleBackticks", "[comment ``foo ` bar``]"); // Tests based on Dingus // http://daringfireball.net/projects/markdown/dingus // // Multiple backticks within an inline code block MT("consecutiveBackticks", "[comment `foo```bar`]"); // Multiple backticks within an inline code block with a second code block MT("consecutiveBackticks", "[comment `foo```bar`] hello [comment `world`]"); // Unclosed with several different groups of backticks MT("unclosedBackticks", "[comment ``foo ``` bar` hello]"); // Closed with several different groups of backticks MT("closedBackticks", "[comment ``foo ``` bar` hello``] world"); // atx headers // http://daringfireball.net/projects/markdown/syntax#header MT("atxH1", "[header&header-1 # foo]"); MT("atxH2", "[header&header-2 ## foo]"); MT("atxH3", "[header&header-3 ### foo]"); MT("atxH4", "[header&header-4 #### foo]"); MT("atxH5", "[header&header-5 ##### foo]"); MT("atxH6", "[header&header-6 ###### foo]"); // H6 - 7x '#' should still be H6, per Dingus // http://daringfireball.net/projects/markdown/dingus MT("atxH6NotH7", "[header&header-6 ####### foo]"); // Inline styles should be parsed inside headers MT("atxH1inline", "[header&header-1 # foo ][header&header-1&em *bar*]"); // Setext headers - H1, H2 // Per documentation, "Any number of underlining =’s or -’s will work." // http://daringfireball.net/projects/markdown/syntax#header // Ideally, the text would be marked as `header` as well, but this is // not really feasible at the moment. So, instead, we're testing against // what works today, to avoid any regressions. // // Check if single underlining = works MT("setextH1", "foo", "[header&header-1 =]"); // Check if 3+ ='s work MT("setextH1", "foo", "[header&header-1 ===]"); // Check if single underlining - works MT("setextH2", "foo", "[header&header-2 -]"); // Check if 3+ -'s work MT("setextH2", "foo", "[header&header-2 ---]"); // Single-line blockquote with trailing space MT("blockquoteSpace", "[quote"e-1 > foo]"); // Single-line blockquote MT("blockquoteNoSpace", "[quote"e-1 >foo]"); // No blank line before blockquote MT("blockquoteNoBlankLine", "foo", "[quote"e-1 > bar]"); // Nested blockquote MT("blockquoteSpace", "[quote"e-1 > foo]", "[quote"e-1 >][quote"e-2 > foo]", "[quote"e-1 >][quote"e-2 >][quote"e-3 > foo]"); // Single-line blockquote followed by normal paragraph MT("blockquoteThenParagraph", "[quote"e-1 >foo]", "", "bar"); // Multi-line blockquote (lazy mode) MT("multiBlockquoteLazy", "[quote"e-1 >foo]", "[quote"e-1 bar]"); // Multi-line blockquote followed by normal paragraph (lazy mode) MT("multiBlockquoteLazyThenParagraph", "[quote"e-1 >foo]", "[quote"e-1 bar]", "", "hello"); // Multi-line blockquote (non-lazy mode) MT("multiBlockquote", "[quote"e-1 >foo]", "[quote"e-1 >bar]"); // Multi-line blockquote followed by normal paragraph (non-lazy mode) MT("multiBlockquoteThenParagraph", "[quote"e-1 >foo]", "[quote"e-1 >bar]", "", "hello"); // Check list types MT("listAsterisk", "foo", "bar", "", "[variable-2 * foo]", "[variable-2 * bar]"); MT("listPlus", "foo", "bar", "", "[variable-2 + foo]", "[variable-2 + bar]"); MT("listDash", "foo", "bar", "", "[variable-2 - foo]", "[variable-2 - bar]"); MT("listNumber", "foo", "bar", "", "[variable-2 1. foo]", "[variable-2 2. bar]"); // Lists require a preceding blank line (per Dingus) MT("listBogus", "foo", "1. bar", "2. hello"); // List after header MT("listAfterHeader", "[header&header-1 # foo]", "[variable-2 - bar]"); // Formatting in lists (*) MT("listAsteriskFormatting", "[variable-2 * ][variable-2&em *foo*][variable-2 bar]", "[variable-2 * ][variable-2&strong **foo**][variable-2 bar]", "[variable-2 * ][variable-2&strong **][variable-2&em&strong *foo**][variable-2&em *][variable-2 bar]", "[variable-2 * ][variable-2&comment `foo`][variable-2 bar]"); // Formatting in lists (+) MT("listPlusFormatting", "[variable-2 + ][variable-2&em *foo*][variable-2 bar]", "[variable-2 + ][variable-2&strong **foo**][variable-2 bar]", "[variable-2 + ][variable-2&strong **][variable-2&em&strong *foo**][variable-2&em *][variable-2 bar]", "[variable-2 + ][variable-2&comment `foo`][variable-2 bar]"); // Formatting in lists (-) MT("listDashFormatting", "[variable-2 - ][variable-2&em *foo*][variable-2 bar]", "[variable-2 - ][variable-2&strong **foo**][variable-2 bar]", "[variable-2 - ][variable-2&strong **][variable-2&em&strong *foo**][variable-2&em *][variable-2 bar]", "[variable-2 - ][variable-2&comment `foo`][variable-2 bar]"); // Formatting in lists (1.) MT("listNumberFormatting", "[variable-2 1. ][variable-2&em *foo*][variable-2 bar]", "[variable-2 2. ][variable-2&strong **foo**][variable-2 bar]", "[variable-2 3. ][variable-2&strong **][variable-2&em&strong *foo**][variable-2&em *][variable-2 bar]", "[variable-2 4. ][variable-2&comment `foo`][variable-2 bar]"); // Paragraph lists MT("listParagraph", "[variable-2 * foo]", "", "[variable-2 * bar]"); // Multi-paragraph lists // // 4 spaces MT("listMultiParagraph", "[variable-2 * foo]", "", "[variable-2 * bar]", "", " [variable-2 hello]"); // 4 spaces, extra blank lines (should still be list, per Dingus) MT("listMultiParagraphExtra", "[variable-2 * foo]", "", "[variable-2 * bar]", "", "", " [variable-2 hello]"); // 4 spaces, plus 1 space (should still be list, per Dingus) MT("listMultiParagraphExtraSpace", "[variable-2 * foo]", "", "[variable-2 * bar]", "", " [variable-2 hello]", "", " [variable-2 world]"); // 1 tab MT("listTab", "[variable-2 * foo]", "", "[variable-2 * bar]", "", "\t[variable-2 hello]"); // No indent MT("listNoIndent", "[variable-2 * foo]", "", "[variable-2 * bar]", "", "hello"); // Blockquote MT("blockquote", "[variable-2 * foo]", "", "[variable-2 * bar]", "", " [variable-2"e"e-1 > hello]"); // Code block MT("blockquoteCode", "[variable-2 * foo]", "", "[variable-2 * bar]", "", " [comment > hello]", "", " [variable-2 world]"); // Code block followed by text MT("blockquoteCodeText", "[variable-2 * foo]", "", " [variable-2 bar]", "", " [comment hello]", "", " [variable-2 world]"); // Nested list MT("listAsteriskNested", "[variable-2 * foo]", "", " [variable-3 * bar]"); MT("listPlusNested", "[variable-2 + foo]", "", " [variable-3 + bar]"); MT("listDashNested", "[variable-2 - foo]", "", " [variable-3 - bar]"); MT("listNumberNested", "[variable-2 1. foo]", "", " [variable-3 2. bar]"); MT("listMixed", "[variable-2 * foo]", "", " [variable-3 + bar]", "", " [keyword - hello]", "", " [variable-2 1. world]"); MT("listBlockquote", "[variable-2 * foo]", "", " [variable-3 + bar]", "", " [quote"e-1&variable-3 > hello]"); MT("listCode", "[variable-2 * foo]", "", " [variable-3 + bar]", "", " [comment hello]"); // Code with internal indentation MT("listCodeIndentation", "[variable-2 * foo]", "", " [comment bar]", " [comment hello]", " [comment world]", " [comment foo]", " [variable-2 bar]"); // List nesting edge cases MT("listNested", "[variable-2 * foo]", "", " [variable-3 * bar]", "", " [variable-2 hello]" ); MT("listNested", "[variable-2 * foo]", "", " [variable-3 * bar]", "", " [variable-3 * foo]" ); // Code followed by text MT("listCodeText", "[variable-2 * foo]", "", " [comment bar]", "", "hello"); // Following tests directly from official Markdown documentation // http://daringfireball.net/projects/markdown/syntax#hr MT("hrSpace", "[hr * * *]"); MT("hr", "[hr ***]"); MT("hrLong", "[hr *****]"); MT("hrSpaceDash", "[hr - - -]"); MT("hrDashLong", "[hr ---------------------------------------]"); // Inline link with title MT("linkTitle", "[link [[foo]]][string (http://example.com/ \"bar\")] hello"); // Inline link without title MT("linkNoTitle", "[link [[foo]]][string (http://example.com/)] bar"); // Inline link with image MT("linkImage", "[link [[][tag ![[foo]]][string (http://example.com/)][link ]]][string (http://example.com/)] bar"); // Inline link with Em MT("linkEm", "[link [[][link&em *foo*][link ]]][string (http://example.com/)] bar"); // Inline link with Strong MT("linkStrong", "[link [[][link&strong **foo**][link ]]][string (http://example.com/)] bar"); // Inline link with EmStrong MT("linkEmStrong", "[link [[][link&strong **][link&em&strong *foo**][link&em *][link ]]][string (http://example.com/)] bar"); // Image with title MT("imageTitle", "[tag ![[foo]]][string (http://example.com/ \"bar\")] hello"); // Image without title MT("imageNoTitle", "[tag ![[foo]]][string (http://example.com/)] bar"); // Image with asterisks MT("imageAsterisks", "[tag ![[*foo*]]][string (http://example.com/)] bar"); // Not a link. Should be normal text due to square brackets being used // regularly in text, especially in quoted material, and no space is allowed // between square brackets and parentheses (per Dingus). MT("notALink", "[[foo]] (bar)"); // Reference-style links MT("linkReference", "[link [[foo]]][string [[bar]]] hello"); // Reference-style links with Em MT("linkReferenceEm", "[link [[][link&em *foo*][link ]]][string [[bar]]] hello"); // Reference-style links with Strong MT("linkReferenceStrong", "[link [[][link&strong **foo**][link ]]][string [[bar]]] hello"); // Reference-style links with EmStrong MT("linkReferenceEmStrong", "[link [[][link&strong **][link&em&strong *foo**][link&em *][link ]]][string [[bar]]] hello"); // Reference-style links with optional space separator (per docuentation) // "You can optionally use a space to separate the sets of brackets" MT("linkReferenceSpace", "[link [[foo]]] [string [[bar]]] hello"); // Should only allow a single space ("...use *a* space...") MT("linkReferenceDoubleSpace", "[[foo]] [[bar]] hello"); // Reference-style links with implicit link name MT("linkImplicit", "[link [[foo]]][string [[]]] hello"); // @todo It would be nice if, at some point, the document was actually // checked to see if the referenced link exists // Link label, for reference-style links (taken from documentation) MT("labelNoTitle", "[link [[foo]]:] [string http://example.com/]"); MT("labelIndented", " [link [[foo]]:] [string http://example.com/]"); MT("labelSpaceTitle", "[link [[foo bar]]:] [string http://example.com/ \"hello\"]"); MT("labelDoubleTitle", "[link [[foo bar]]:] [string http://example.com/ \"hello\"] \"world\""); MT("labelTitleDoubleQuotes", "[link [[foo]]:] [string http://example.com/ \"bar\"]"); MT("labelTitleSingleQuotes", "[link [[foo]]:] [string http://example.com/ 'bar']"); MT("labelTitleParenthese", "[link [[foo]]:] [string http://example.com/ (bar)]"); MT("labelTitleInvalid", "[link [[foo]]:] [string http://example.com/] bar"); MT("labelLinkAngleBrackets", "[link [[foo]]:] [string \"bar\"]"); MT("labelTitleNextDoubleQuotes", "[link [[foo]]:] [string http://example.com/]", "[string \"bar\"] hello"); MT("labelTitleNextSingleQuotes", "[link [[foo]]:] [string http://example.com/]", "[string 'bar'] hello"); MT("labelTitleNextParenthese", "[link [[foo]]:] [string http://example.com/]", "[string (bar)] hello"); MT("labelTitleNextMixed", "[link [[foo]]:] [string http://example.com/]", "(bar\" hello"); MT("linkWeb", "[link ] foo"); MT("linkWebDouble", "[link ] foo [link ]"); MT("linkEmail", "[link ] foo"); MT("linkEmailDouble", "[link ] foo [link ]"); MT("emAsterisk", "[em *foo*] bar"); MT("emUnderscore", "[em _foo_] bar"); MT("emInWordAsterisk", "foo[em *bar*]hello"); MT("emInWordUnderscore", "foo[em _bar_]hello"); // Per documentation: "...surround an * or _ with spaces, it’ll be // treated as a literal asterisk or underscore." MT("emEscapedBySpaceIn", "foo [em _bar _ hello_] world"); MT("emEscapedBySpaceOut", "foo _ bar[em _hello_]world"); MT("emEscapedByNewline", "foo", "_ bar[em _hello_]world"); // Unclosed emphasis characters // Instead of simply marking as EM / STRONG, it would be nice to have an // incomplete flag for EM and STRONG, that is styled slightly different. MT("emIncompleteAsterisk", "foo [em *bar]"); MT("emIncompleteUnderscore", "foo [em _bar]"); MT("strongAsterisk", "[strong **foo**] bar"); MT("strongUnderscore", "[strong __foo__] bar"); MT("emStrongAsterisk", "[em *foo][em&strong **bar*][strong hello**] world"); MT("emStrongUnderscore", "[em _foo][em&strong __bar_][strong hello__] world"); // "...same character must be used to open and close an emphasis span."" MT("emStrongMixed", "[em _foo][em&strong **bar*hello__ world]"); MT("emStrongMixed", "[em *foo][em&strong __bar_hello** world]"); // These characters should be escaped: // \ backslash // ` backtick // * asterisk // _ underscore // {} curly braces // [] square brackets // () parentheses // # hash mark // + plus sign // - minus sign (hyphen) // . dot // ! exclamation mark MT("escapeBacktick", "foo \\`bar\\`"); MT("doubleEscapeBacktick", "foo \\\\[comment `bar\\\\`]"); MT("escapeAsterisk", "foo \\*bar\\*"); MT("doubleEscapeAsterisk", "foo \\\\[em *bar\\\\*]"); MT("escapeUnderscore", "foo \\_bar\\_"); MT("doubleEscapeUnderscore", "foo \\\\[em _bar\\\\_]"); MT("escapeHash", "\\# foo"); MT("doubleEscapeHash", "\\\\# foo"); MT("escapeNewline", "\\", "[em *foo*]"); // Tests to make sure GFM-specific things aren't getting through MT("taskList", "[variable-2 * [ ]] bar]"); MT("fencedCodeBlocks", "[comment ```]", "foo", "[comment ```]"); // Tests that require XML mode MT("xmlMode", "[tag&bracket <][tag div][tag&bracket >]", "*foo*", "[tag&bracket <][tag http://github.com][tag&bracket />]", "[tag&bracket ]", "[link ]"); MT("xmlModeWithMarkdownInside", "[tag&bracket <][tag div] [attribute markdown]=[string 1][tag&bracket >]", "[em *foo*]", "[link ]", "[tag
                  ]", "[link ]", "[tag&bracket <][tag div][tag&bracket >]", "[tag&bracket ]"); })(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/meta.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.modeInfo = [ {name: "APL", mime: "text/apl", mode: "apl", ext: ["dyalog", "apl"]}, {name: "Asterisk", mime: "text/x-asterisk", mode: "asterisk", file: /^extensions\.conf$/i}, {name: "C", mime: "text/x-csrc", mode: "clike", ext: ["c", "h"]}, {name: "C++", mime: "text/x-c++src", mode: "clike", ext: ["cpp", "c++", "cc", "cxx", "hpp", "h++", "hh", "hxx"], alias: ["cpp"]}, {name: "Cobol", mime: "text/x-cobol", mode: "cobol", ext: ["cob", "cpy"]}, {name: "C#", mime: "text/x-csharp", mode: "clike", ext: ["cs"], alias: ["csharp"]}, {name: "Clojure", mime: "text/x-clojure", mode: "clojure", ext: ["clj"]}, {name: "CoffeeScript", mime: "text/x-coffeescript", mode: "coffeescript", ext: ["coffee"], alias: ["coffee", "coffee-script"]}, {name: "Common Lisp", mime: "text/x-common-lisp", mode: "commonlisp", ext: ["cl", "lisp", "el"], alias: ["lisp"]}, {name: "Cypher", mime: "application/x-cypher-query", mode: "cypher", ext: ["cyp", "cypher"]}, {name: "Cython", mime: "text/x-cython", mode: "python", ext: ["pyx", "pxd", "pxi"]}, {name: "CSS", mime: "text/css", mode: "css", ext: ["css"]}, {name: "CQL", mime: "text/x-cassandra", mode: "sql", ext: ["cql"]}, {name: "D", mime: "text/x-d", mode: "d", ext: ["d"]}, {name: "Dart", mimes: ["application/dart", "text/x-dart"], mode: "dart", ext: ["dart"]}, {name: "diff", mime: "text/x-diff", mode: "diff", ext: ["diff", "patch"]}, {name: "Django", mime: "text/x-django", mode: "django"}, {name: "Dockerfile", mime: "text/x-dockerfile", mode: "dockerfile", file: /^Dockerfile$/}, {name: "DTD", mime: "application/xml-dtd", mode: "dtd", ext: ["dtd"]}, {name: "Dylan", mime: "text/x-dylan", mode: "dylan", ext: ["dylan", "dyl", "intr"]}, {name: "EBNF", mime: "text/x-ebnf", mode: "ebnf"}, {name: "ECL", mime: "text/x-ecl", mode: "ecl", ext: ["ecl"]}, {name: "Eiffel", mime: "text/x-eiffel", mode: "eiffel", ext: ["e"]}, {name: "Embedded Javascript", mime: "application/x-ejs", mode: "htmlembedded", ext: ["ejs"]}, {name: "Embedded Ruby", mime: "application/x-erb", mode: "htmlembedded", ext: ["erb"]}, {name: "Erlang", mime: "text/x-erlang", mode: "erlang", ext: ["erl"]}, {name: "Forth", mime: "text/x-forth", mode: "forth", ext: ["forth", "fth", "4th"]}, {name: "Fortran", mime: "text/x-fortran", mode: "fortran", ext: ["f", "for", "f77", "f90"]}, {name: "F#", mime: "text/x-fsharp", mode: "mllike", ext: ["fs"], alias: ["fsharp"]}, {name: "Gas", mime: "text/x-gas", mode: "gas", ext: ["s"]}, {name: "Gherkin", mime: "text/x-feature", mode: "gherkin", ext: ["feature"]}, {name: "GitHub Flavored Markdown", mime: "text/x-gfm", mode: "gfm", file: /^(readme|contributing|history).md$/i}, {name: "Go", mime: "text/x-go", mode: "go", ext: ["go"]}, {name: "Groovy", mime: "text/x-groovy", mode: "groovy", ext: ["groovy"]}, {name: "HAML", mime: "text/x-haml", mode: "haml", ext: ["haml"]}, {name: "Haskell", mime: "text/x-haskell", mode: "haskell", ext: ["hs"]}, {name: "Haxe", mime: "text/x-haxe", mode: "haxe", ext: ["hx"]}, {name: "HXML", mime: "text/x-hxml", mode: "haxe", ext: ["hxml"]}, {name: "ASP.NET", mime: "application/x-aspx", mode: "htmlembedded", ext: ["aspx"], alias: ["asp", "aspx"]}, {name: "HTML", mime: "text/html", mode: "htmlmixed", ext: ["html", "htm"], alias: ["xhtml"]}, {name: "HTTP", mime: "message/http", mode: "http"}, {name: "IDL", mime: "text/x-idl", mode: "idl", ext: ["pro"]}, {name: "Jade", mime: "text/x-jade", mode: "jade", ext: ["jade"]}, {name: "Java", mime: "text/x-java", mode: "clike", ext: ["java"]}, {name: "Java Server Pages", mime: "application/x-jsp", mode: "htmlembedded", ext: ["jsp"], alias: ["jsp"]}, {name: "JavaScript", mimes: ["text/javascript", "text/ecmascript", "application/javascript", "application/x-javascript", "application/ecmascript"], mode: "javascript", ext: ["js"], alias: ["ecmascript", "js", "node"]}, {name: "JSON", mimes: ["application/json", "application/x-json"], mode: "javascript", ext: ["json", "map"], alias: ["json5"]}, {name: "JSON-LD", mime: "application/ld+json", mode: "javascript", ext: ["jsonld"], alias: ["jsonld"]}, {name: "Jinja2", mime: "null", mode: "jinja2"}, {name: "Julia", mime: "text/x-julia", mode: "julia", ext: ["jl"]}, {name: "Kotlin", mime: "text/x-kotlin", mode: "kotlin", ext: ["kt"]}, {name: "LESS", mime: "text/x-less", mode: "css", ext: ["less"]}, {name: "LiveScript", mime: "text/x-livescript", mode: "livescript", ext: ["ls"], alias: ["ls"]}, {name: "Lua", mime: "text/x-lua", mode: "lua", ext: ["lua"]}, {name: "Markdown", mime: "text/x-markdown", mode: "markdown", ext: ["markdown", "md", "mkd"]}, {name: "mIRC", mime: "text/mirc", mode: "mirc"}, {name: "MariaDB SQL", mime: "text/x-mariadb", mode: "sql"}, {name: "Modelica", mime: "text/x-modelica", mode: "modelica", ext: ["mo"]}, {name: "MS SQL", mime: "text/x-mssql", mode: "sql"}, {name: "MySQL", mime: "text/x-mysql", mode: "sql"}, {name: "Nginx", mime: "text/x-nginx-conf", mode: "nginx", file: /nginx.*\.conf$/i}, {name: "NTriples", mime: "text/n-triples", mode: "ntriples", ext: ["nt"]}, {name: "Objective C", mime: "text/x-objectivec", mode: "clike", ext: ["m", "mm"]}, {name: "OCaml", mime: "text/x-ocaml", mode: "mllike", ext: ["ml", "mli", "mll", "mly"]}, {name: "Octave", mime: "text/x-octave", mode: "octave", ext: ["m"]}, {name: "Pascal", mime: "text/x-pascal", mode: "pascal", ext: ["p", "pas"]}, {name: "PEG.js", mime: "null", mode: "pegjs", ext: ["jsonld"]}, {name: "Perl", mime: "text/x-perl", mode: "perl", ext: ["pl", "pm"]}, {name: "PHP", mime: "application/x-httpd-php", mode: "php", ext: ["php", "php3", "php4", "php5", "phtml"]}, {name: "Pig", mime: "text/x-pig", mode: "pig", ext: ["pig"]}, {name: "Plain Text", mime: "text/plain", mode: "null", ext: ["txt", "text", "conf", "def", "list", "log"]}, {name: "PLSQL", mime: "text/x-plsql", mode: "sql", ext: ["pls"]}, {name: "Properties files", mime: "text/x-properties", mode: "properties", ext: ["properties", "ini", "in"], alias: ["ini", "properties"]}, {name: "Python", mime: "text/x-python", mode: "python", ext: ["py", "pyw"]}, {name: "Puppet", mime: "text/x-puppet", mode: "puppet", ext: ["pp"]}, {name: "Q", mime: "text/x-q", mode: "q", ext: ["q"]}, {name: "R", mime: "text/x-rsrc", mode: "r", ext: ["r"], alias: ["rscript"]}, {name: "reStructuredText", mime: "text/x-rst", mode: "rst", ext: ["rst"], alias: ["rst"]}, {name: "RPM Changes", mime: "text/x-rpm-changes", mode: "rpm"}, {name: "RPM Spec", mime: "text/x-rpm-spec", mode: "rpm", ext: ["spec"]}, {name: "Ruby", mime: "text/x-ruby", mode: "ruby", ext: ["rb"], alias: ["jruby", "macruby", "rake", "rb", "rbx"]}, {name: "Rust", mime: "text/x-rustsrc", mode: "rust", ext: ["rs"]}, {name: "Sass", mime: "text/x-sass", mode: "sass", ext: ["sass"]}, {name: "Scala", mime: "text/x-scala", mode: "clike", ext: ["scala"]}, {name: "Scheme", mime: "text/x-scheme", mode: "scheme", ext: ["scm", "ss"]}, {name: "SCSS", mime: "text/x-scss", mode: "css", ext: ["scss"]}, {name: "Shell", mime: "text/x-sh", mode: "shell", ext: ["sh", "ksh", "bash"], alias: ["bash", "sh", "zsh"]}, {name: "Sieve", mime: "application/sieve", mode: "sieve", ext: ["siv", "sieve"]}, {name: "Slim", mimes: ["text/x-slim", "application/x-slim"], mode: "slim", ext: ["slim"]}, {name: "Smalltalk", mime: "text/x-stsrc", mode: "smalltalk", ext: ["st"]}, {name: "Smarty", mime: "text/x-smarty", mode: "smarty", ext: ["tpl"]}, {name: "SmartyMixed", mime: "text/x-smarty", mode: "smartymixed"}, {name: "Solr", mime: "text/x-solr", mode: "solr"}, {name: "Soy", mime: "text/x-soy", mode: "soy", ext: ["soy"], alias: ["closure template"]}, {name: "SPARQL", mime: "application/sparql-query", mode: "sparql", ext: ["rq", "sparql"], alias: ["sparul"]}, {name: "Spreadsheet", mime: "text/x-spreadsheet", mode: "spreadsheet", alias: ["excel", "formula"]}, {name: "SQL", mime: "text/x-sql", mode: "sql", ext: ["sql"]}, {name: "MariaDB", mime: "text/x-mariadb", mode: "sql"}, {name: "sTeX", mime: "text/x-stex", mode: "stex"}, {name: "LaTeX", mime: "text/x-latex", mode: "stex", ext: ["text", "ltx"], alias: ["tex"]}, {name: "SystemVerilog", mime: "text/x-systemverilog", mode: "verilog", ext: ["v"]}, {name: "Tcl", mime: "text/x-tcl", mode: "tcl", ext: ["tcl"]}, {name: "Textile", mime: "text/x-textile", mode: "textile", ext: ["textile"]}, {name: "TiddlyWiki ", mime: "text/x-tiddlywiki", mode: "tiddlywiki"}, {name: "Tiki wiki", mime: "text/tiki", mode: "tiki"}, {name: "TOML", mime: "text/x-toml", mode: "toml", ext: ["toml"]}, {name: "Tornado", mime: "text/x-tornado", mode: "tornado"}, {name: "Turtle", mime: "text/turtle", mode: "turtle", ext: ["ttl"]}, {name: "TypeScript", mime: "application/typescript", mode: "javascript", ext: ["ts"], alias: ["ts"]}, {name: "VB.NET", mime: "text/x-vb", mode: "vb", ext: ["vb"]}, {name: "VBScript", mime: "text/vbscript", mode: "vbscript", ext: ["vbs"]}, {name: "Velocity", mime: "text/velocity", mode: "velocity", ext: ["vtl"]}, {name: "Verilog", mime: "text/x-verilog", mode: "verilog", ext: ["v"]}, {name: "XML", mimes: ["application/xml", "text/xml"], mode: "xml", ext: ["xml", "xsl", "xsd"], alias: ["rss", "wsdl", "xsd"]}, {name: "XQuery", mime: "application/xquery", mode: "xquery", ext: ["xy", "xquery"]}, {name: "YAML", mime: "text/x-yaml", mode: "yaml", ext: ["yaml"], alias: ["yml"]}, {name: "Z80", mime: "text/x-z80", mode: "z80", ext: ["z80"]} ]; // Ensure all modes have a mime property for backwards compatibility for (var i = 0; i < CodeMirror.modeInfo.length; i++) { var info = CodeMirror.modeInfo[i]; if (info.mimes) info.mime = info.mimes[0]; } CodeMirror.findModeByMIME = function(mime) { mime = mime.toLowerCase(); for (var i = 0; i < CodeMirror.modeInfo.length; i++) { var info = CodeMirror.modeInfo[i]; if (info.mime == mime) return info; if (info.mimes) for (var j = 0; j < info.mimes.length; j++) if (info.mimes[j] == mime) return info; } }; CodeMirror.findModeByExtension = function(ext) { for (var i = 0; i < CodeMirror.modeInfo.length; i++) { var info = CodeMirror.modeInfo[i]; if (info.ext) for (var j = 0; j < info.ext.length; j++) if (info.ext[j] == ext) return info; } }; CodeMirror.findModeByFileName = function(filename) { for (var i = 0; i < CodeMirror.modeInfo.length; i++) { var info = CodeMirror.modeInfo[i]; if (info.file && info.file.test(filename)) return info; } var dot = filename.lastIndexOf("."); var ext = dot > -1 && filename.substring(dot + 1, filename.length); if (ext) return CodeMirror.findModeByExtension(ext); }; CodeMirror.findModeByName = function(name) { name = name.toLowerCase(); for (var i = 0; i < CodeMirror.modeInfo.length; i++) { var info = CodeMirror.modeInfo[i]; if (info.name.toLowerCase() == name) return info; if (info.alias) for (var j = 0; j < info.alias.length; j++) if (info.alias[j].toLowerCase() == name) return info; } }; }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/mirc/index.html ================================================ CodeMirror: mIRC mode

                  mIRC mode

                  MIME types defined: text/mirc.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/mirc/mirc.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE //mIRC mode by Ford_Lawnmower :: Based on Velocity mode by Steve O'Hara (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMIME("text/mirc", "mirc"); CodeMirror.defineMode("mirc", function() { function parseWords(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } var specials = parseWords("$! $$ $& $? $+ $abook $abs $active $activecid " + "$activewid $address $addtok $agent $agentname $agentstat $agentver " + "$alias $and $anick $ansi2mirc $aop $appactive $appstate $asc $asctime " + "$asin $atan $avoice $away $awaymsg $awaytime $banmask $base $bfind " + "$binoff $biton $bnick $bvar $bytes $calc $cb $cd $ceil $chan $chanmodes " + "$chantypes $chat $chr $cid $clevel $click $cmdbox $cmdline $cnick $color " + "$com $comcall $comchan $comerr $compact $compress $comval $cos $count " + "$cr $crc $creq $crlf $ctime $ctimer $ctrlenter $date $day $daylight " + "$dbuh $dbuw $dccignore $dccport $dde $ddename $debug $decode $decompress " + "$deltok $devent $dialog $did $didreg $didtok $didwm $disk $dlevel $dll " + "$dllcall $dname $dns $duration $ebeeps $editbox $emailaddr $encode $error " + "$eval $event $exist $feof $ferr $fgetc $file $filename $filtered $finddir " + "$finddirn $findfile $findfilen $findtok $fline $floor $fopen $fread $fserve " + "$fulladdress $fulldate $fullname $fullscreen $get $getdir $getdot $gettok $gmt " + "$group $halted $hash $height $hfind $hget $highlight $hnick $hotline " + "$hotlinepos $ial $ialchan $ibl $idle $iel $ifmatch $ignore $iif $iil " + "$inelipse $ini $inmidi $inpaste $inpoly $input $inrect $inroundrect " + "$insong $instok $int $inwave $ip $isalias $isbit $isdde $isdir $isfile " + "$isid $islower $istok $isupper $keychar $keyrpt $keyval $knick $lactive " + "$lactivecid $lactivewid $left $len $level $lf $line $lines $link $lock " + "$lock $locked $log $logstamp $logstampfmt $longfn $longip $lower $ltimer " + "$maddress $mask $matchkey $matchtok $md5 $me $menu $menubar $menucontext " + "$menutype $mid $middir $mircdir $mircexe $mircini $mklogfn $mnick $mode " + "$modefirst $modelast $modespl $mouse $msfile $network $newnick $nick $nofile " + "$nopath $noqt $not $notags $notify $null $numeric $numok $oline $onpoly " + "$opnick $or $ord $os $passivedcc $pic $play $pnick $port $portable $portfree " + "$pos $prefix $prop $protect $puttok $qt $query $rand $r $rawmsg $read $readomo " + "$readn $regex $regml $regsub $regsubex $remove $remtok $replace $replacex " + "$reptok $result $rgb $right $round $scid $scon $script $scriptdir $scriptline " + "$sdir $send $server $serverip $sfile $sha1 $shortfn $show $signal $sin " + "$site $sline $snick $snicks $snotify $sock $sockbr $sockerr $sockname " + "$sorttok $sound $sqrt $ssl $sreq $sslready $status $strip $str $stripped " + "$syle $submenu $switchbar $tan $target $ticks $time $timer $timestamp " + "$timestampfmt $timezone $tip $titlebar $toolbar $treebar $trust $ulevel " + "$ulist $upper $uptime $url $usermode $v1 $v2 $var $vcmd $vcmdstat $vcmdver " + "$version $vnick $vol $wid $width $wildsite $wildtok $window $wrap $xor"); var keywords = parseWords("abook ajinvite alias aline ame amsg anick aop auser autojoin avoice " + "away background ban bcopy beep bread break breplace bset btrunc bunset bwrite " + "channel clear clearall cline clipboard close cnick color comclose comopen " + "comreg continue copy creq ctcpreply ctcps dcc dccserver dde ddeserver " + "debug dec describe dialog did didtok disable disconnect dlevel dline dll " + "dns dqwindow drawcopy drawdot drawfill drawline drawpic drawrect drawreplace " + "drawrot drawsave drawscroll drawtext ebeeps echo editbox emailaddr enable " + "events exit fclose filter findtext finger firewall flash flist flood flush " + "flushini font fopen fseek fsend fserve fullname fwrite ghide gload gmove " + "gopts goto gplay gpoint gqreq groups gshow gsize gstop gtalk gunload hadd " + "halt haltdef hdec hdel help hfree hinc hload hmake hop hsave ial ialclear " + "ialmark identd if ignore iline inc invite iuser join kick linesep links list " + "load loadbuf localinfo log mdi me menubar mkdir mnick mode msg nick noop notice " + "notify omsg onotice part partall pdcc perform play playctrl pop protect pvoice " + "qme qmsg query queryn quit raw reload remini remote remove rename renwin " + "reseterror resetidle return rlevel rline rmdir run ruser save savebuf saveini " + "say scid scon server set showmirc signam sline sockaccept sockclose socklist " + "socklisten sockmark sockopen sockpause sockread sockrename sockudp sockwrite " + "sound speak splay sreq strip switchbar timer timestamp titlebar tnick tokenize " + "toolbar topic tray treebar ulist unload unset unsetall updatenl url uwho " + "var vcadd vcmd vcrem vol while whois window winhelp write writeint if isalnum " + "isalpha isaop isavoice isban ischan ishop isignore isin isincs isletter islower " + "isnotify isnum ison isop isprotect isreg isupper isvoice iswm iswmcs " + "elseif else goto menu nicklist status title icon size option text edit " + "button check radio box scroll list combo link tab item"); var functions = parseWords("if elseif else and not or eq ne in ni for foreach while switch"); var isOperatorChar = /[+\-*&%=<>!?^\/\|]/; function chain(stream, state, f) { state.tokenize = f; return f(stream, state); } function tokenBase(stream, state) { var beforeParams = state.beforeParams; state.beforeParams = false; var ch = stream.next(); if (/[\[\]{}\(\),\.]/.test(ch)) { if (ch == "(" && beforeParams) state.inParams = true; else if (ch == ")") state.inParams = false; return null; } else if (/\d/.test(ch)) { stream.eatWhile(/[\w\.]/); return "number"; } else if (ch == "\\") { stream.eat("\\"); stream.eat(/./); return "number"; } else if (ch == "/" && stream.eat("*")) { return chain(stream, state, tokenComment); } else if (ch == ";" && stream.match(/ *\( *\(/)) { return chain(stream, state, tokenUnparsed); } else if (ch == ";" && !state.inParams) { stream.skipToEnd(); return "comment"; } else if (ch == '"') { stream.eat(/"/); return "keyword"; } else if (ch == "$") { stream.eatWhile(/[$_a-z0-9A-Z\.:]/); if (specials && specials.propertyIsEnumerable(stream.current().toLowerCase())) { return "keyword"; } else { state.beforeParams = true; return "builtin"; } } else if (ch == "%") { stream.eatWhile(/[^,^\s^\(^\)]/); state.beforeParams = true; return "string"; } else if (isOperatorChar.test(ch)) { stream.eatWhile(isOperatorChar); return "operator"; } else { stream.eatWhile(/[\w\$_{}]/); var word = stream.current().toLowerCase(); if (keywords && keywords.propertyIsEnumerable(word)) return "keyword"; if (functions && functions.propertyIsEnumerable(word)) { state.beforeParams = true; return "keyword"; } return null; } } function tokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "/" && maybeEnd) { state.tokenize = tokenBase; break; } maybeEnd = (ch == "*"); } return "comment"; } function tokenUnparsed(stream, state) { var maybeEnd = 0, ch; while (ch = stream.next()) { if (ch == ";" && maybeEnd == 2) { state.tokenize = tokenBase; break; } if (ch == ")") maybeEnd++; else if (ch != " ") maybeEnd = 0; } return "meta"; } return { startState: function() { return { tokenize: tokenBase, beforeParams: false, inParams: false }; }, token: function(stream, state) { if (stream.eatSpace()) return null; return state.tokenize(stream, state); } }; }); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/mllike/index.html ================================================ CodeMirror: ML-like mode

                  OCaml mode

                  F# mode

                  MIME types defined: text/x-ocaml (OCaml) and text/x-fsharp (F#).

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/mllike/mllike.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode('mllike', function(_config, parserConfig) { var words = { 'let': 'keyword', 'rec': 'keyword', 'in': 'keyword', 'of': 'keyword', 'and': 'keyword', 'if': 'keyword', 'then': 'keyword', 'else': 'keyword', 'for': 'keyword', 'to': 'keyword', 'while': 'keyword', 'do': 'keyword', 'done': 'keyword', 'fun': 'keyword', 'function': 'keyword', 'val': 'keyword', 'type': 'keyword', 'mutable': 'keyword', 'match': 'keyword', 'with': 'keyword', 'try': 'keyword', 'open': 'builtin', 'ignore': 'builtin', 'begin': 'keyword', 'end': 'keyword' }; var extraWords = parserConfig.extraWords || {}; for (var prop in extraWords) { if (extraWords.hasOwnProperty(prop)) { words[prop] = parserConfig.extraWords[prop]; } } function tokenBase(stream, state) { var ch = stream.next(); if (ch === '"') { state.tokenize = tokenString; return state.tokenize(stream, state); } if (ch === '(') { if (stream.eat('*')) { state.commentLevel++; state.tokenize = tokenComment; return state.tokenize(stream, state); } } if (ch === '~') { stream.eatWhile(/\w/); return 'variable-2'; } if (ch === '`') { stream.eatWhile(/\w/); return 'quote'; } if (ch === '/' && parserConfig.slashComments && stream.eat('/')) { stream.skipToEnd(); return 'comment'; } if (/\d/.test(ch)) { stream.eatWhile(/[\d]/); if (stream.eat('.')) { stream.eatWhile(/[\d]/); } return 'number'; } if ( /[+\-*&%=<>!?|]/.test(ch)) { return 'operator'; } stream.eatWhile(/\w/); var cur = stream.current(); return words[cur] || 'variable'; } function tokenString(stream, state) { var next, end = false, escaped = false; while ((next = stream.next()) != null) { if (next === '"' && !escaped) { end = true; break; } escaped = !escaped && next === '\\'; } if (end && !escaped) { state.tokenize = tokenBase; } return 'string'; }; function tokenComment(stream, state) { var prev, next; while(state.commentLevel > 0 && (next = stream.next()) != null) { if (prev === '(' && next === '*') state.commentLevel++; if (prev === '*' && next === ')') state.commentLevel--; prev = next; } if (state.commentLevel <= 0) { state.tokenize = tokenBase; } return 'comment'; } return { startState: function() {return {tokenize: tokenBase, commentLevel: 0};}, token: function(stream, state) { if (stream.eatSpace()) return null; return state.tokenize(stream, state); }, blockCommentStart: "(*", blockCommentEnd: "*)", lineComment: parserConfig.slashComments ? "//" : null }; }); CodeMirror.defineMIME('text/x-ocaml', { name: 'mllike', extraWords: { 'succ': 'keyword', 'trace': 'builtin', 'exit': 'builtin', 'print_string': 'builtin', 'print_endline': 'builtin', 'true': 'atom', 'false': 'atom', 'raise': 'keyword' } }); CodeMirror.defineMIME('text/x-fsharp', { name: 'mllike', extraWords: { 'abstract': 'keyword', 'as': 'keyword', 'assert': 'keyword', 'base': 'keyword', 'class': 'keyword', 'default': 'keyword', 'delegate': 'keyword', 'downcast': 'keyword', 'downto': 'keyword', 'elif': 'keyword', 'exception': 'keyword', 'extern': 'keyword', 'finally': 'keyword', 'global': 'keyword', 'inherit': 'keyword', 'inline': 'keyword', 'interface': 'keyword', 'internal': 'keyword', 'lazy': 'keyword', 'let!': 'keyword', 'member' : 'keyword', 'module': 'keyword', 'namespace': 'keyword', 'new': 'keyword', 'null': 'keyword', 'override': 'keyword', 'private': 'keyword', 'public': 'keyword', 'return': 'keyword', 'return!': 'keyword', 'select': 'keyword', 'static': 'keyword', 'struct': 'keyword', 'upcast': 'keyword', 'use': 'keyword', 'use!': 'keyword', 'val': 'keyword', 'when': 'keyword', 'yield': 'keyword', 'yield!': 'keyword', 'List': 'builtin', 'Seq': 'builtin', 'Map': 'builtin', 'Set': 'builtin', 'int': 'builtin', 'string': 'builtin', 'raise': 'builtin', 'failwith': 'builtin', 'not': 'builtin', 'true': 'builtin', 'false': 'builtin' }, slashComments: true }); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/modelica/index.html ================================================ CodeMirror: Modelica mode

                  Modelica mode

                  Simple mode that tries to handle Modelica as well as it can.

                  MIME types defined: text/x-modelica (Modlica code).

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/modelica/modelica.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE // Modelica support for CodeMirror, copyright (c) by Lennart Ochel (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); }) (function(CodeMirror) { "use strict"; CodeMirror.defineMode("modelica", function(config, parserConfig) { var indentUnit = config.indentUnit; var keywords = parserConfig.keywords || {}; var builtin = parserConfig.builtin || {}; var atoms = parserConfig.atoms || {}; var isSingleOperatorChar = /[;=\(:\),{}.*<>+\-\/^\[\]]/; var isDoubleOperatorChar = /(:=|<=|>=|==|<>|\.\+|\.\-|\.\*|\.\/|\.\^)/; var isDigit = /[0-9]/; var isNonDigit = /[_a-zA-Z]/; function tokenLineComment(stream, state) { stream.skipToEnd(); state.tokenize = null; return "comment"; } function tokenBlockComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (maybeEnd && ch == "/") { state.tokenize = null; break; } maybeEnd = (ch == "*"); } return "comment"; } function tokenString(stream, state) { var escaped = false, ch; while ((ch = stream.next()) != null) { if (ch == '"' && !escaped) { state.tokenize = null; state.sol = false; break; } escaped = !escaped && ch == "\\"; } return "string"; } function tokenIdent(stream, state) { stream.eatWhile(isDigit); while (stream.eat(isDigit) || stream.eat(isNonDigit)) { } var cur = stream.current(); if(state.sol && (cur == "package" || cur == "model" || cur == "when" || cur == "connector")) state.level++; else if(state.sol && cur == "end" && state.level > 0) state.level--; state.tokenize = null; state.sol = false; if (keywords.propertyIsEnumerable(cur)) return "keyword"; else if (builtin.propertyIsEnumerable(cur)) return "builtin"; else if (atoms.propertyIsEnumerable(cur)) return "atom"; else return "variable"; } function tokenQIdent(stream, state) { while (stream.eat(/[^']/)) { } state.tokenize = null; state.sol = false; if(stream.eat("'")) return "variable"; else return "error"; } function tokenUnsignedNuber(stream, state) { stream.eatWhile(isDigit); if (stream.eat('.')) { stream.eatWhile(isDigit); } if (stream.eat('e') || stream.eat('E')) { if (!stream.eat('-')) stream.eat('+'); stream.eatWhile(isDigit); } state.tokenize = null; state.sol = false; return "number"; } // Interface return { startState: function() { return { tokenize: null, level: 0, sol: true }; }, token: function(stream, state) { if(state.tokenize != null) { return state.tokenize(stream, state); } if(stream.sol()) { state.sol = true; } // WHITESPACE if(stream.eatSpace()) { state.tokenize = null; return null; } var ch = stream.next(); // LINECOMMENT if(ch == '/' && stream.eat('/')) { state.tokenize = tokenLineComment; } // BLOCKCOMMENT else if(ch == '/' && stream.eat('*')) { state.tokenize = tokenBlockComment; } // TWO SYMBOL TOKENS else if(isDoubleOperatorChar.test(ch+stream.peek())) { stream.next(); state.tokenize = null; return "operator"; } // SINGLE SYMBOL TOKENS else if(isSingleOperatorChar.test(ch)) { state.tokenize = null; return "operator"; } // IDENT else if(isNonDigit.test(ch)) { state.tokenize = tokenIdent; } // Q-IDENT else if(ch == "'" && stream.peek() && stream.peek() != "'") { state.tokenize = tokenQIdent; } // STRING else if(ch == '"') { state.tokenize = tokenString; } // UNSIGNED_NUBER else if(isDigit.test(ch)) { state.tokenize = tokenUnsignedNuber; } // ERROR else { state.tokenize = null; return "error"; } return state.tokenize(stream, state); }, indent: function(state, textAfter) { if (state.tokenize != null) return CodeMirror.Pass; var level = state.level; if(/(algorithm)/.test(textAfter)) level--; if(/(equation)/.test(textAfter)) level--; if(/(initial algorithm)/.test(textAfter)) level--; if(/(initial equation)/.test(textAfter)) level--; if(/(end)/.test(textAfter)) level--; if(level > 0) return indentUnit*level; else return 0; }, blockCommentStart: "/*", blockCommentEnd: "*/", lineComment: "//" }; }); function words(str) { var obj = {}, words = str.split(" "); for (var i=0; i CodeMirror: NGINX mode

                  NGINX mode

                  MIME types defined: text/nginx.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/nginx/nginx.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("nginx", function(config) { function words(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } var keywords = words( /* ngxDirectiveControl */ "break return rewrite set" + /* ngxDirective */ " accept_mutex accept_mutex_delay access_log add_after_body add_before_body add_header addition_types aio alias allow ancient_browser ancient_browser_value auth_basic auth_basic_user_file auth_http auth_http_header auth_http_timeout autoindex autoindex_exact_size autoindex_localtime charset charset_types client_body_buffer_size client_body_in_file_only client_body_in_single_buffer client_body_temp_path client_body_timeout client_header_buffer_size client_header_timeout client_max_body_size connection_pool_size create_full_put_path daemon dav_access dav_methods debug_connection debug_points default_type degradation degrade deny devpoll_changes devpoll_events directio directio_alignment empty_gif env epoll_events error_log eventport_events expires fastcgi_bind fastcgi_buffer_size fastcgi_buffers fastcgi_busy_buffers_size fastcgi_cache fastcgi_cache_key fastcgi_cache_methods fastcgi_cache_min_uses fastcgi_cache_path fastcgi_cache_use_stale fastcgi_cache_valid fastcgi_catch_stderr fastcgi_connect_timeout fastcgi_hide_header fastcgi_ignore_client_abort fastcgi_ignore_headers fastcgi_index fastcgi_intercept_errors fastcgi_max_temp_file_size fastcgi_next_upstream fastcgi_param fastcgi_pass_header fastcgi_pass_request_body fastcgi_pass_request_headers fastcgi_read_timeout fastcgi_send_lowat fastcgi_send_timeout fastcgi_split_path_info fastcgi_store fastcgi_store_access fastcgi_temp_file_write_size fastcgi_temp_path fastcgi_upstream_fail_timeout fastcgi_upstream_max_fails flv geoip_city geoip_country google_perftools_profiles gzip gzip_buffers gzip_comp_level gzip_disable gzip_hash gzip_http_version gzip_min_length gzip_no_buffer gzip_proxied gzip_static gzip_types gzip_vary gzip_window if_modified_since ignore_invalid_headers image_filter image_filter_buffer image_filter_jpeg_quality image_filter_transparency imap_auth imap_capabilities imap_client_buffer index ip_hash keepalive_requests keepalive_timeout kqueue_changes kqueue_events large_client_header_buffers limit_conn limit_conn_log_level limit_rate limit_rate_after limit_req limit_req_log_level limit_req_zone limit_zone lingering_time lingering_timeout lock_file log_format log_not_found log_subrequest map_hash_bucket_size map_hash_max_size master_process memcached_bind memcached_buffer_size memcached_connect_timeout memcached_next_upstream memcached_read_timeout memcached_send_timeout memcached_upstream_fail_timeout memcached_upstream_max_fails merge_slashes min_delete_depth modern_browser modern_browser_value msie_padding msie_refresh multi_accept open_file_cache open_file_cache_errors open_file_cache_events open_file_cache_min_uses open_file_cache_valid open_log_file_cache output_buffers override_charset perl perl_modules perl_require perl_set pid pop3_auth pop3_capabilities port_in_redirect postpone_gzipping postpone_output protocol proxy proxy_bind proxy_buffer proxy_buffer_size proxy_buffering proxy_buffers proxy_busy_buffers_size proxy_cache proxy_cache_key proxy_cache_methods proxy_cache_min_uses proxy_cache_path proxy_cache_use_stale proxy_cache_valid proxy_connect_timeout proxy_headers_hash_bucket_size proxy_headers_hash_max_size proxy_hide_header proxy_ignore_client_abort proxy_ignore_headers proxy_intercept_errors proxy_max_temp_file_size proxy_method proxy_next_upstream proxy_pass_error_message proxy_pass_header proxy_pass_request_body proxy_pass_request_headers proxy_read_timeout proxy_redirect proxy_send_lowat proxy_send_timeout proxy_set_body proxy_set_header proxy_ssl_session_reuse proxy_store proxy_store_access proxy_temp_file_write_size proxy_temp_path proxy_timeout proxy_upstream_fail_timeout proxy_upstream_max_fails random_index read_ahead real_ip_header recursive_error_pages request_pool_size reset_timedout_connection resolver resolver_timeout rewrite_log rtsig_overflow_events rtsig_overflow_test rtsig_overflow_threshold rtsig_signo satisfy secure_link_secret send_lowat send_timeout sendfile sendfile_max_chunk server_name_in_redirect server_names_hash_bucket_size server_names_hash_max_size server_tokens set_real_ip_from smtp_auth smtp_capabilities smtp_client_buffer smtp_greeting_delay so_keepalive source_charset ssi ssi_ignore_recycled_buffers ssi_min_file_chunk ssi_silent_errors ssi_types ssi_value_length ssl ssl_certificate ssl_certificate_key ssl_ciphers ssl_client_certificate ssl_crl ssl_dhparam ssl_engine ssl_prefer_server_ciphers ssl_protocols ssl_session_cache ssl_session_timeout ssl_verify_client ssl_verify_depth starttls stub_status sub_filter sub_filter_once sub_filter_types tcp_nodelay tcp_nopush thread_stack_size timeout timer_resolution types_hash_bucket_size types_hash_max_size underscores_in_headers uninitialized_variable_warn use user userid userid_domain userid_expires userid_mark userid_name userid_p3p userid_path userid_service valid_referers variables_hash_bucket_size variables_hash_max_size worker_connections worker_cpu_affinity worker_priority worker_processes worker_rlimit_core worker_rlimit_nofile worker_rlimit_sigpending worker_threads working_directory xclient xml_entities xslt_stylesheet xslt_typesdrew@li229-23" ); var keywords_block = words( /* ngxDirectiveBlock */ "http mail events server types location upstream charset_map limit_except if geo map" ); var keywords_important = words( /* ngxDirectiveImportant */ "include root server server_name listen internal proxy_pass memcached_pass fastcgi_pass try_files" ); var indentUnit = config.indentUnit, type; function ret(style, tp) {type = tp; return style;} function tokenBase(stream, state) { stream.eatWhile(/[\w\$_]/); var cur = stream.current(); if (keywords.propertyIsEnumerable(cur)) { return "keyword"; } else if (keywords_block.propertyIsEnumerable(cur)) { return "variable-2"; } else if (keywords_important.propertyIsEnumerable(cur)) { return "string-2"; } /**/ var ch = stream.next(); if (ch == "@") {stream.eatWhile(/[\w\\\-]/); return ret("meta", stream.current());} else if (ch == "/" && stream.eat("*")) { state.tokenize = tokenCComment; return tokenCComment(stream, state); } else if (ch == "<" && stream.eat("!")) { state.tokenize = tokenSGMLComment; return tokenSGMLComment(stream, state); } else if (ch == "=") ret(null, "compare"); else if ((ch == "~" || ch == "|") && stream.eat("=")) return ret(null, "compare"); else if (ch == "\"" || ch == "'") { state.tokenize = tokenString(ch); return state.tokenize(stream, state); } else if (ch == "#") { stream.skipToEnd(); return ret("comment", "comment"); } else if (ch == "!") { stream.match(/^\s*\w*/); return ret("keyword", "important"); } else if (/\d/.test(ch)) { stream.eatWhile(/[\w.%]/); return ret("number", "unit"); } else if (/[,.+>*\/]/.test(ch)) { return ret(null, "select-op"); } else if (/[;{}:\[\]]/.test(ch)) { return ret(null, ch); } else { stream.eatWhile(/[\w\\\-]/); return ret("variable", "variable"); } } function tokenCComment(stream, state) { var maybeEnd = false, ch; while ((ch = stream.next()) != null) { if (maybeEnd && ch == "/") { state.tokenize = tokenBase; break; } maybeEnd = (ch == "*"); } return ret("comment", "comment"); } function tokenSGMLComment(stream, state) { var dashes = 0, ch; while ((ch = stream.next()) != null) { if (dashes >= 2 && ch == ">") { state.tokenize = tokenBase; break; } dashes = (ch == "-") ? dashes + 1 : 0; } return ret("comment", "comment"); } function tokenString(quote) { return function(stream, state) { var escaped = false, ch; while ((ch = stream.next()) != null) { if (ch == quote && !escaped) break; escaped = !escaped && ch == "\\"; } if (!escaped) state.tokenize = tokenBase; return ret("string", "string"); }; } return { startState: function(base) { return {tokenize: tokenBase, baseIndent: base || 0, stack: []}; }, token: function(stream, state) { if (stream.eatSpace()) return null; type = null; var style = state.tokenize(stream, state); var context = state.stack[state.stack.length-1]; if (type == "hash" && context == "rule") style = "atom"; else if (style == "variable") { if (context == "rule") style = "number"; else if (!context || context == "@media{") style = "tag"; } if (context == "rule" && /^[\{\};]$/.test(type)) state.stack.pop(); if (type == "{") { if (context == "@media") state.stack[state.stack.length-1] = "@media{"; else state.stack.push("{"); } else if (type == "}") state.stack.pop(); else if (type == "@media") state.stack.push("@media"); else if (context == "{" && type != "comment") state.stack.push("rule"); return style; }, indent: function(state, textAfter) { var n = state.stack.length; if (/^\}/.test(textAfter)) n -= state.stack[state.stack.length-1] == "rule" ? 2 : 1; return state.baseIndent + n * indentUnit; }, electricChars: "}" }; }); CodeMirror.defineMIME("text/nginx", "text/x-nginx-conf"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/ntriples/index.html ================================================ CodeMirror: NTriples mode

                  NTriples mode

                  MIME types defined: text/n-triples.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/ntriples/ntriples.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE /********************************************************** * This script provides syntax highlighting support for * the Ntriples format. * Ntriples format specification: * http://www.w3.org/TR/rdf-testcases/#ntriples ***********************************************************/ /* The following expression defines the defined ASF grammar transitions. pre_subject -> { ( writing_subject_uri | writing_bnode_uri ) -> pre_predicate -> writing_predicate_uri -> pre_object -> writing_object_uri | writing_object_bnode | ( writing_object_literal -> writing_literal_lang | writing_literal_type ) -> post_object -> BEGIN } otherwise { -> ERROR } */ (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("ntriples", function() { var Location = { PRE_SUBJECT : 0, WRITING_SUB_URI : 1, WRITING_BNODE_URI : 2, PRE_PRED : 3, WRITING_PRED_URI : 4, PRE_OBJ : 5, WRITING_OBJ_URI : 6, WRITING_OBJ_BNODE : 7, WRITING_OBJ_LITERAL : 8, WRITING_LIT_LANG : 9, WRITING_LIT_TYPE : 10, POST_OBJ : 11, ERROR : 12 }; function transitState(currState, c) { var currLocation = currState.location; var ret; // Opening. if (currLocation == Location.PRE_SUBJECT && c == '<') ret = Location.WRITING_SUB_URI; else if(currLocation == Location.PRE_SUBJECT && c == '_') ret = Location.WRITING_BNODE_URI; else if(currLocation == Location.PRE_PRED && c == '<') ret = Location.WRITING_PRED_URI; else if(currLocation == Location.PRE_OBJ && c == '<') ret = Location.WRITING_OBJ_URI; else if(currLocation == Location.PRE_OBJ && c == '_') ret = Location.WRITING_OBJ_BNODE; else if(currLocation == Location.PRE_OBJ && c == '"') ret = Location.WRITING_OBJ_LITERAL; // Closing. else if(currLocation == Location.WRITING_SUB_URI && c == '>') ret = Location.PRE_PRED; else if(currLocation == Location.WRITING_BNODE_URI && c == ' ') ret = Location.PRE_PRED; else if(currLocation == Location.WRITING_PRED_URI && c == '>') ret = Location.PRE_OBJ; else if(currLocation == Location.WRITING_OBJ_URI && c == '>') ret = Location.POST_OBJ; else if(currLocation == Location.WRITING_OBJ_BNODE && c == ' ') ret = Location.POST_OBJ; else if(currLocation == Location.WRITING_OBJ_LITERAL && c == '"') ret = Location.POST_OBJ; else if(currLocation == Location.WRITING_LIT_LANG && c == ' ') ret = Location.POST_OBJ; else if(currLocation == Location.WRITING_LIT_TYPE && c == '>') ret = Location.POST_OBJ; // Closing typed and language literal. else if(currLocation == Location.WRITING_OBJ_LITERAL && c == '@') ret = Location.WRITING_LIT_LANG; else if(currLocation == Location.WRITING_OBJ_LITERAL && c == '^') ret = Location.WRITING_LIT_TYPE; // Spaces. else if( c == ' ' && ( currLocation == Location.PRE_SUBJECT || currLocation == Location.PRE_PRED || currLocation == Location.PRE_OBJ || currLocation == Location.POST_OBJ ) ) ret = currLocation; // Reset. else if(currLocation == Location.POST_OBJ && c == '.') ret = Location.PRE_SUBJECT; // Error else ret = Location.ERROR; currState.location=ret; } return { startState: function() { return { location : Location.PRE_SUBJECT, uris : [], anchors : [], bnodes : [], langs : [], types : [] }; }, token: function(stream, state) { var ch = stream.next(); if(ch == '<') { transitState(state, ch); var parsedURI = ''; stream.eatWhile( function(c) { if( c != '#' && c != '>' ) { parsedURI += c; return true; } return false;} ); state.uris.push(parsedURI); if( stream.match('#', false) ) return 'variable'; stream.next(); transitState(state, '>'); return 'variable'; } if(ch == '#') { var parsedAnchor = ''; stream.eatWhile(function(c) { if(c != '>' && c != ' ') { parsedAnchor+= c; return true; } return false;}); state.anchors.push(parsedAnchor); return 'variable-2'; } if(ch == '>') { transitState(state, '>'); return 'variable'; } if(ch == '_') { transitState(state, ch); var parsedBNode = ''; stream.eatWhile(function(c) { if( c != ' ' ) { parsedBNode += c; return true; } return false;}); state.bnodes.push(parsedBNode); stream.next(); transitState(state, ' '); return 'builtin'; } if(ch == '"') { transitState(state, ch); stream.eatWhile( function(c) { return c != '"'; } ); stream.next(); if( stream.peek() != '@' && stream.peek() != '^' ) { transitState(state, '"'); } return 'string'; } if( ch == '@' ) { transitState(state, '@'); var parsedLang = ''; stream.eatWhile(function(c) { if( c != ' ' ) { parsedLang += c; return true; } return false;}); state.langs.push(parsedLang); stream.next(); transitState(state, ' '); return 'string-2'; } if( ch == '^' ) { stream.next(); transitState(state, '^'); var parsedType = ''; stream.eatWhile(function(c) { if( c != '>' ) { parsedType += c; return true; } return false;} ); state.types.push(parsedType); stream.next(); transitState(state, '>'); return 'variable'; } if( ch == ' ' ) { transitState(state, ch); } if( ch == '.' ) { transitState(state, ch); } } }; }); CodeMirror.defineMIME("text/n-triples", "ntriples"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/octave/index.html ================================================ CodeMirror: Octave mode

                  Octave mode

                  MIME types defined: text/x-octave.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/octave/octave.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("octave", function() { function wordRegexp(words) { return new RegExp("^((" + words.join(")|(") + "))\\b"); } var singleOperators = new RegExp("^[\\+\\-\\*/&|\\^~<>!@'\\\\]"); var singleDelimiters = new RegExp('^[\\(\\[\\{\\},:=;]'); var doubleOperators = new RegExp("^((==)|(~=)|(<=)|(>=)|(<<)|(>>)|(\\.[\\+\\-\\*/\\^\\\\]))"); var doubleDelimiters = new RegExp("^((!=)|(\\+=)|(\\-=)|(\\*=)|(/=)|(&=)|(\\|=)|(\\^=))"); var tripleDelimiters = new RegExp("^((>>=)|(<<=))"); var expressionEnd = new RegExp("^[\\]\\)]"); var identifiers = new RegExp("^[_A-Za-z\xa1-\uffff][_A-Za-z0-9\xa1-\uffff]*"); var builtins = wordRegexp([ 'error', 'eval', 'function', 'abs', 'acos', 'atan', 'asin', 'cos', 'cosh', 'exp', 'log', 'prod', 'sum', 'log10', 'max', 'min', 'sign', 'sin', 'sinh', 'sqrt', 'tan', 'reshape', 'break', 'zeros', 'default', 'margin', 'round', 'ones', 'rand', 'syn', 'ceil', 'floor', 'size', 'clear', 'zeros', 'eye', 'mean', 'std', 'cov', 'det', 'eig', 'inv', 'norm', 'rank', 'trace', 'expm', 'logm', 'sqrtm', 'linspace', 'plot', 'title', 'xlabel', 'ylabel', 'legend', 'text', 'grid', 'meshgrid', 'mesh', 'num2str', 'fft', 'ifft', 'arrayfun', 'cellfun', 'input', 'fliplr', 'flipud', 'ismember' ]); var keywords = wordRegexp([ 'return', 'case', 'switch', 'else', 'elseif', 'end', 'endif', 'endfunction', 'if', 'otherwise', 'do', 'for', 'while', 'try', 'catch', 'classdef', 'properties', 'events', 'methods', 'global', 'persistent', 'endfor', 'endwhile', 'printf', 'sprintf', 'disp', 'until', 'continue', 'pkg' ]); // tokenizers function tokenTranspose(stream, state) { if (!stream.sol() && stream.peek() === '\'') { stream.next(); state.tokenize = tokenBase; return 'operator'; } state.tokenize = tokenBase; return tokenBase(stream, state); } function tokenComment(stream, state) { if (stream.match(/^.*%}/)) { state.tokenize = tokenBase; return 'comment'; }; stream.skipToEnd(); return 'comment'; } function tokenBase(stream, state) { // whitespaces if (stream.eatSpace()) return null; // Handle one line Comments if (stream.match('%{')){ state.tokenize = tokenComment; stream.skipToEnd(); return 'comment'; } if (stream.match(/^[%#]/)){ stream.skipToEnd(); return 'comment'; } // Handle Number Literals if (stream.match(/^[0-9\.+-]/, false)) { if (stream.match(/^[+-]?0x[0-9a-fA-F]+[ij]?/)) { stream.tokenize = tokenBase; return 'number'; }; if (stream.match(/^[+-]?\d*\.\d+([EeDd][+-]?\d+)?[ij]?/)) { return 'number'; }; if (stream.match(/^[+-]?\d+([EeDd][+-]?\d+)?[ij]?/)) { return 'number'; }; } if (stream.match(wordRegexp(['nan','NaN','inf','Inf']))) { return 'number'; }; // Handle Strings if (stream.match(/^"([^"]|(""))*"/)) { return 'string'; } ; if (stream.match(/^'([^']|(''))*'/)) { return 'string'; } ; // Handle words if (stream.match(keywords)) { return 'keyword'; } ; if (stream.match(builtins)) { return 'builtin'; } ; if (stream.match(identifiers)) { return 'variable'; } ; if (stream.match(singleOperators) || stream.match(doubleOperators)) { return 'operator'; }; if (stream.match(singleDelimiters) || stream.match(doubleDelimiters) || stream.match(tripleDelimiters)) { return null; }; if (stream.match(expressionEnd)) { state.tokenize = tokenTranspose; return null; }; // Handle non-detected items stream.next(); return 'error'; }; return { startState: function() { return { tokenize: tokenBase }; }, token: function(stream, state) { var style = state.tokenize(stream, state); if (style === 'number' || style === 'variable'){ state.tokenize = tokenTranspose; } return style; } }; }); CodeMirror.defineMIME("text/x-octave", "octave"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/pascal/index.html ================================================ CodeMirror: Pascal mode

                  Pascal mode

                  MIME types defined: text/x-pascal.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/pascal/pascal.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("pascal", function() { function words(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } var keywords = words("and array begin case const div do downto else end file for forward integer " + "boolean char function goto if in label mod nil not of or packed procedure " + "program record repeat set string then to type until var while with"); var atoms = {"null": true}; var isOperatorChar = /[+\-*&%=<>!?|\/]/; function tokenBase(stream, state) { var ch = stream.next(); if (ch == "#" && state.startOfLine) { stream.skipToEnd(); return "meta"; } if (ch == '"' || ch == "'") { state.tokenize = tokenString(ch); return state.tokenize(stream, state); } if (ch == "(" && stream.eat("*")) { state.tokenize = tokenComment; return tokenComment(stream, state); } if (/[\[\]{}\(\),;\:\.]/.test(ch)) { return null; } if (/\d/.test(ch)) { stream.eatWhile(/[\w\.]/); return "number"; } if (ch == "/") { if (stream.eat("/")) { stream.skipToEnd(); return "comment"; } } if (isOperatorChar.test(ch)) { stream.eatWhile(isOperatorChar); return "operator"; } stream.eatWhile(/[\w\$_]/); var cur = stream.current(); if (keywords.propertyIsEnumerable(cur)) return "keyword"; if (atoms.propertyIsEnumerable(cur)) return "atom"; return "variable"; } function tokenString(quote) { return function(stream, state) { var escaped = false, next, end = false; while ((next = stream.next()) != null) { if (next == quote && !escaped) {end = true; break;} escaped = !escaped && next == "\\"; } if (end || !escaped) state.tokenize = null; return "string"; }; } function tokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == ")" && maybeEnd) { state.tokenize = null; break; } maybeEnd = (ch == "*"); } return "comment"; } // Interface return { startState: function() { return {tokenize: null}; }, token: function(stream, state) { if (stream.eatSpace()) return null; var style = (state.tokenize || tokenBase)(stream, state); if (style == "comment" || style == "meta") return style; return style; }, electricChars: "{}" }; }); CodeMirror.defineMIME("text/x-pascal", "pascal"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/pegjs/index.html ================================================ CodeMirror: PEG.js Mode

                  PEG.js Mode

                  The PEG.js Mode

                  Created by Forbes Lindesay.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/pegjs/pegjs.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../javascript/javascript")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../javascript/javascript"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("pegjs", function (config) { var jsMode = CodeMirror.getMode(config, "javascript"); function identifier(stream) { return stream.match(/^[a-zA-Z_][a-zA-Z0-9_]*/); } return { startState: function () { return { inString: false, stringType: null, inComment: false, inChracterClass: false, braced: 0, lhs: true, localState: null }; }, token: function (stream, state) { if (stream) //check for state changes if (!state.inString && !state.inComment && ((stream.peek() == '"') || (stream.peek() == "'"))) { state.stringType = stream.peek(); stream.next(); // Skip quote state.inString = true; // Update state } if (!state.inString && !state.inComment && stream.match(/^\/\*/)) { state.inComment = true; } //return state if (state.inString) { while (state.inString && !stream.eol()) { if (stream.peek() === state.stringType) { stream.next(); // Skip quote state.inString = false; // Clear flag } else if (stream.peek() === '\\') { stream.next(); stream.next(); } else { stream.match(/^.[^\\\"\']*/); } } return state.lhs ? "property string" : "string"; // Token style } else if (state.inComment) { while (state.inComment && !stream.eol()) { if (stream.match(/\*\//)) { state.inComment = false; // Clear flag } else { stream.match(/^.[^\*]*/); } } return "comment"; } else if (state.inChracterClass) { while (state.inChracterClass && !stream.eol()) { if (!(stream.match(/^[^\]\\]+/) || stream.match(/^\\./))) { state.inChracterClass = false; } } } else if (stream.peek() === '[') { stream.next(); state.inChracterClass = true; return 'bracket'; } else if (stream.match(/^\/\//)) { stream.skipToEnd(); return "comment"; } else if (state.braced || stream.peek() === '{') { if (state.localState === null) { state.localState = jsMode.startState(); } var token = jsMode.token(stream, state.localState); var text = stream.current(); if (!token) { for (var i = 0; i < text.length; i++) { if (text[i] === '{') { state.braced++; } else if (text[i] === '}') { state.braced--; } }; } return token; } else if (identifier(stream)) { if (stream.peek() === ':') { return 'variable'; } return 'variable-2'; } else if (['[', ']', '(', ')'].indexOf(stream.peek()) != -1) { stream.next(); return 'bracket'; } else if (!stream.eatSpace()) { stream.next(); } return null; } }; }, "javascript"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/perl/index.html ================================================ CodeMirror: Perl mode

                  Perl mode

                  MIME types defined: text/x-perl.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/perl/perl.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE // CodeMirror2 mode/perl/perl.js (text/x-perl) beta 0.10 (2011-11-08) // This is a part of CodeMirror from https://github.com/sabaca/CodeMirror_mode_perl (mail@sabaca.com) (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("perl",function(){ // http://perldoc.perl.org var PERL={ // null - magic touch // 1 - keyword // 2 - def // 3 - atom // 4 - operator // 5 - variable-2 (predefined) // [x,y] - x=1,2,3; y=must be defined if x{...} // PERL operators '->' : 4, '++' : 4, '--' : 4, '**' : 4, // ! ~ \ and unary + and - '=~' : 4, '!~' : 4, '*' : 4, '/' : 4, '%' : 4, 'x' : 4, '+' : 4, '-' : 4, '.' : 4, '<<' : 4, '>>' : 4, // named unary operators '<' : 4, '>' : 4, '<=' : 4, '>=' : 4, 'lt' : 4, 'gt' : 4, 'le' : 4, 'ge' : 4, '==' : 4, '!=' : 4, '<=>' : 4, 'eq' : 4, 'ne' : 4, 'cmp' : 4, '~~' : 4, '&' : 4, '|' : 4, '^' : 4, '&&' : 4, '||' : 4, '//' : 4, '..' : 4, '...' : 4, '?' : 4, ':' : 4, '=' : 4, '+=' : 4, '-=' : 4, '*=' : 4, // etc. ??? ',' : 4, '=>' : 4, '::' : 4, // list operators (rightward) 'not' : 4, 'and' : 4, 'or' : 4, 'xor' : 4, // PERL predefined variables (I know, what this is a paranoid idea, but may be needed for people, who learn PERL, and for me as well, ...and may be for you?;) 'BEGIN' : [5,1], 'END' : [5,1], 'PRINT' : [5,1], 'PRINTF' : [5,1], 'GETC' : [5,1], 'READ' : [5,1], 'READLINE' : [5,1], 'DESTROY' : [5,1], 'TIE' : [5,1], 'TIEHANDLE' : [5,1], 'UNTIE' : [5,1], 'STDIN' : 5, 'STDIN_TOP' : 5, 'STDOUT' : 5, 'STDOUT_TOP' : 5, 'STDERR' : 5, 'STDERR_TOP' : 5, '$ARG' : 5, '$_' : 5, '@ARG' : 5, '@_' : 5, '$LIST_SEPARATOR' : 5, '$"' : 5, '$PROCESS_ID' : 5, '$PID' : 5, '$$' : 5, '$REAL_GROUP_ID' : 5, '$GID' : 5, '$(' : 5, '$EFFECTIVE_GROUP_ID' : 5, '$EGID' : 5, '$)' : 5, '$PROGRAM_NAME' : 5, '$0' : 5, '$SUBSCRIPT_SEPARATOR' : 5, '$SUBSEP' : 5, '$;' : 5, '$REAL_USER_ID' : 5, '$UID' : 5, '$<' : 5, '$EFFECTIVE_USER_ID' : 5, '$EUID' : 5, '$>' : 5, '$a' : 5, '$b' : 5, '$COMPILING' : 5, '$^C' : 5, '$DEBUGGING' : 5, '$^D' : 5, '${^ENCODING}' : 5, '$ENV' : 5, '%ENV' : 5, '$SYSTEM_FD_MAX' : 5, '$^F' : 5, '@F' : 5, '${^GLOBAL_PHASE}' : 5, '$^H' : 5, '%^H' : 5, '@INC' : 5, '%INC' : 5, '$INPLACE_EDIT' : 5, '$^I' : 5, '$^M' : 5, '$OSNAME' : 5, '$^O' : 5, '${^OPEN}' : 5, '$PERLDB' : 5, '$^P' : 5, '$SIG' : 5, '%SIG' : 5, '$BASETIME' : 5, '$^T' : 5, '${^TAINT}' : 5, '${^UNICODE}' : 5, '${^UTF8CACHE}' : 5, '${^UTF8LOCALE}' : 5, '$PERL_VERSION' : 5, '$^V' : 5, '${^WIN32_SLOPPY_STAT}' : 5, '$EXECUTABLE_NAME' : 5, '$^X' : 5, '$1' : 5, // - regexp $1, $2... '$MATCH' : 5, '$&' : 5, '${^MATCH}' : 5, '$PREMATCH' : 5, '$`' : 5, '${^PREMATCH}' : 5, '$POSTMATCH' : 5, "$'" : 5, '${^POSTMATCH}' : 5, '$LAST_PAREN_MATCH' : 5, '$+' : 5, '$LAST_SUBMATCH_RESULT' : 5, '$^N' : 5, '@LAST_MATCH_END' : 5, '@+' : 5, '%LAST_PAREN_MATCH' : 5, '%+' : 5, '@LAST_MATCH_START' : 5, '@-' : 5, '%LAST_MATCH_START' : 5, '%-' : 5, '$LAST_REGEXP_CODE_RESULT' : 5, '$^R' : 5, '${^RE_DEBUG_FLAGS}' : 5, '${^RE_TRIE_MAXBUF}' : 5, '$ARGV' : 5, '@ARGV' : 5, 'ARGV' : 5, 'ARGVOUT' : 5, '$OUTPUT_FIELD_SEPARATOR' : 5, '$OFS' : 5, '$,' : 5, '$INPUT_LINE_NUMBER' : 5, '$NR' : 5, '$.' : 5, '$INPUT_RECORD_SEPARATOR' : 5, '$RS' : 5, '$/' : 5, '$OUTPUT_RECORD_SEPARATOR' : 5, '$ORS' : 5, '$\\' : 5, '$OUTPUT_AUTOFLUSH' : 5, '$|' : 5, '$ACCUMULATOR' : 5, '$^A' : 5, '$FORMAT_FORMFEED' : 5, '$^L' : 5, '$FORMAT_PAGE_NUMBER' : 5, '$%' : 5, '$FORMAT_LINES_LEFT' : 5, '$-' : 5, '$FORMAT_LINE_BREAK_CHARACTERS' : 5, '$:' : 5, '$FORMAT_LINES_PER_PAGE' : 5, '$=' : 5, '$FORMAT_TOP_NAME' : 5, '$^' : 5, '$FORMAT_NAME' : 5, '$~' : 5, '${^CHILD_ERROR_NATIVE}' : 5, '$EXTENDED_OS_ERROR' : 5, '$^E' : 5, '$EXCEPTIONS_BEING_CAUGHT' : 5, '$^S' : 5, '$WARNING' : 5, '$^W' : 5, '${^WARNING_BITS}' : 5, '$OS_ERROR' : 5, '$ERRNO' : 5, '$!' : 5, '%OS_ERROR' : 5, '%ERRNO' : 5, '%!' : 5, '$CHILD_ERROR' : 5, '$?' : 5, '$EVAL_ERROR' : 5, '$@' : 5, '$OFMT' : 5, '$#' : 5, '$*' : 5, '$ARRAY_BASE' : 5, '$[' : 5, '$OLD_PERL_VERSION' : 5, '$]' : 5, // PERL blocks 'if' :[1,1], elsif :[1,1], 'else' :[1,1], 'while' :[1,1], unless :[1,1], 'for' :[1,1], foreach :[1,1], // PERL functions 'abs' :1, // - absolute value function accept :1, // - accept an incoming socket connect alarm :1, // - schedule a SIGALRM 'atan2' :1, // - arctangent of Y/X in the range -PI to PI bind :1, // - binds an address to a socket binmode :1, // - prepare binary files for I/O bless :1, // - create an object bootstrap :1, // 'break' :1, // - break out of a "given" block caller :1, // - get context of the current subroutine call chdir :1, // - change your current working directory chmod :1, // - changes the permissions on a list of files chomp :1, // - remove a trailing record separator from a string chop :1, // - remove the last character from a string chown :1, // - change the owership on a list of files chr :1, // - get character this number represents chroot :1, // - make directory new root for path lookups close :1, // - close file (or pipe or socket) handle closedir :1, // - close directory handle connect :1, // - connect to a remote socket 'continue' :[1,1], // - optional trailing block in a while or foreach 'cos' :1, // - cosine function crypt :1, // - one-way passwd-style encryption dbmclose :1, // - breaks binding on a tied dbm file dbmopen :1, // - create binding on a tied dbm file 'default' :1, // defined :1, // - test whether a value, variable, or function is defined 'delete' :1, // - deletes a value from a hash die :1, // - raise an exception or bail out 'do' :1, // - turn a BLOCK into a TERM dump :1, // - create an immediate core dump each :1, // - retrieve the next key/value pair from a hash endgrent :1, // - be done using group file endhostent :1, // - be done using hosts file endnetent :1, // - be done using networks file endprotoent :1, // - be done using protocols file endpwent :1, // - be done using passwd file endservent :1, // - be done using services file eof :1, // - test a filehandle for its end 'eval' :1, // - catch exceptions or compile and run code 'exec' :1, // - abandon this program to run another exists :1, // - test whether a hash key is present exit :1, // - terminate this program 'exp' :1, // - raise I to a power fcntl :1, // - file control system call fileno :1, // - return file descriptor from filehandle flock :1, // - lock an entire file with an advisory lock fork :1, // - create a new process just like this one format :1, // - declare a picture format with use by the write() function formline :1, // - internal function used for formats getc :1, // - get the next character from the filehandle getgrent :1, // - get next group record getgrgid :1, // - get group record given group user ID getgrnam :1, // - get group record given group name gethostbyaddr :1, // - get host record given its address gethostbyname :1, // - get host record given name gethostent :1, // - get next hosts record getlogin :1, // - return who logged in at this tty getnetbyaddr :1, // - get network record given its address getnetbyname :1, // - get networks record given name getnetent :1, // - get next networks record getpeername :1, // - find the other end of a socket connection getpgrp :1, // - get process group getppid :1, // - get parent process ID getpriority :1, // - get current nice value getprotobyname :1, // - get protocol record given name getprotobynumber :1, // - get protocol record numeric protocol getprotoent :1, // - get next protocols record getpwent :1, // - get next passwd record getpwnam :1, // - get passwd record given user login name getpwuid :1, // - get passwd record given user ID getservbyname :1, // - get services record given its name getservbyport :1, // - get services record given numeric port getservent :1, // - get next services record getsockname :1, // - retrieve the sockaddr for a given socket getsockopt :1, // - get socket options on a given socket given :1, // glob :1, // - expand filenames using wildcards gmtime :1, // - convert UNIX time into record or string using Greenwich time 'goto' :1, // - create spaghetti code grep :1, // - locate elements in a list test true against a given criterion hex :1, // - convert a string to a hexadecimal number 'import' :1, // - patch a module's namespace into your own index :1, // - find a substring within a string 'int' :1, // - get the integer portion of a number ioctl :1, // - system-dependent device control system call 'join' :1, // - join a list into a string using a separator keys :1, // - retrieve list of indices from a hash kill :1, // - send a signal to a process or process group last :1, // - exit a block prematurely lc :1, // - return lower-case version of a string lcfirst :1, // - return a string with just the next letter in lower case length :1, // - return the number of bytes in a string 'link' :1, // - create a hard link in the filesytem listen :1, // - register your socket as a server local : 2, // - create a temporary value for a global variable (dynamic scoping) localtime :1, // - convert UNIX time into record or string using local time lock :1, // - get a thread lock on a variable, subroutine, or method 'log' :1, // - retrieve the natural logarithm for a number lstat :1, // - stat a symbolic link m :null, // - match a string with a regular expression pattern map :1, // - apply a change to a list to get back a new list with the changes mkdir :1, // - create a directory msgctl :1, // - SysV IPC message control operations msgget :1, // - get SysV IPC message queue msgrcv :1, // - receive a SysV IPC message from a message queue msgsnd :1, // - send a SysV IPC message to a message queue my : 2, // - declare and assign a local variable (lexical scoping) 'new' :1, // next :1, // - iterate a block prematurely no :1, // - unimport some module symbols or semantics at compile time oct :1, // - convert a string to an octal number open :1, // - open a file, pipe, or descriptor opendir :1, // - open a directory ord :1, // - find a character's numeric representation our : 2, // - declare and assign a package variable (lexical scoping) pack :1, // - convert a list into a binary representation 'package' :1, // - declare a separate global namespace pipe :1, // - open a pair of connected filehandles pop :1, // - remove the last element from an array and return it pos :1, // - find or set the offset for the last/next m//g search print :1, // - output a list to a filehandle printf :1, // - output a formatted list to a filehandle prototype :1, // - get the prototype (if any) of a subroutine push :1, // - append one or more elements to an array q :null, // - singly quote a string qq :null, // - doubly quote a string qr :null, // - Compile pattern quotemeta :null, // - quote regular expression magic characters qw :null, // - quote a list of words qx :null, // - backquote quote a string rand :1, // - retrieve the next pseudorandom number read :1, // - fixed-length buffered input from a filehandle readdir :1, // - get a directory from a directory handle readline :1, // - fetch a record from a file readlink :1, // - determine where a symbolic link is pointing readpipe :1, // - execute a system command and collect standard output recv :1, // - receive a message over a Socket redo :1, // - start this loop iteration over again ref :1, // - find out the type of thing being referenced rename :1, // - change a filename require :1, // - load in external functions from a library at runtime reset :1, // - clear all variables of a given name 'return' :1, // - get out of a function early reverse :1, // - flip a string or a list rewinddir :1, // - reset directory handle rindex :1, // - right-to-left substring search rmdir :1, // - remove a directory s :null, // - replace a pattern with a string say :1, // - print with newline scalar :1, // - force a scalar context seek :1, // - reposition file pointer for random-access I/O seekdir :1, // - reposition directory pointer select :1, // - reset default output or do I/O multiplexing semctl :1, // - SysV semaphore control operations semget :1, // - get set of SysV semaphores semop :1, // - SysV semaphore operations send :1, // - send a message over a socket setgrent :1, // - prepare group file for use sethostent :1, // - prepare hosts file for use setnetent :1, // - prepare networks file for use setpgrp :1, // - set the process group of a process setpriority :1, // - set a process's nice value setprotoent :1, // - prepare protocols file for use setpwent :1, // - prepare passwd file for use setservent :1, // - prepare services file for use setsockopt :1, // - set some socket options shift :1, // - remove the first element of an array, and return it shmctl :1, // - SysV shared memory operations shmget :1, // - get SysV shared memory segment identifier shmread :1, // - read SysV shared memory shmwrite :1, // - write SysV shared memory shutdown :1, // - close down just half of a socket connection 'sin' :1, // - return the sine of a number sleep :1, // - block for some number of seconds socket :1, // - create a socket socketpair :1, // - create a pair of sockets 'sort' :1, // - sort a list of values splice :1, // - add or remove elements anywhere in an array 'split' :1, // - split up a string using a regexp delimiter sprintf :1, // - formatted print into a string 'sqrt' :1, // - square root function srand :1, // - seed the random number generator stat :1, // - get a file's status information state :1, // - declare and assign a state variable (persistent lexical scoping) study :1, // - optimize input data for repeated searches 'sub' :1, // - declare a subroutine, possibly anonymously 'substr' :1, // - get or alter a portion of a stirng symlink :1, // - create a symbolic link to a file syscall :1, // - execute an arbitrary system call sysopen :1, // - open a file, pipe, or descriptor sysread :1, // - fixed-length unbuffered input from a filehandle sysseek :1, // - position I/O pointer on handle used with sysread and syswrite system :1, // - run a separate program syswrite :1, // - fixed-length unbuffered output to a filehandle tell :1, // - get current seekpointer on a filehandle telldir :1, // - get current seekpointer on a directory handle tie :1, // - bind a variable to an object class tied :1, // - get a reference to the object underlying a tied variable time :1, // - return number of seconds since 1970 times :1, // - return elapsed time for self and child processes tr :null, // - transliterate a string truncate :1, // - shorten a file uc :1, // - return upper-case version of a string ucfirst :1, // - return a string with just the next letter in upper case umask :1, // - set file creation mode mask undef :1, // - remove a variable or function definition unlink :1, // - remove one link to a file unpack :1, // - convert binary structure into normal perl variables unshift :1, // - prepend more elements to the beginning of a list untie :1, // - break a tie binding to a variable use :1, // - load in a module at compile time utime :1, // - set a file's last access and modify times values :1, // - return a list of the values in a hash vec :1, // - test or set particular bits in a string wait :1, // - wait for any child process to die waitpid :1, // - wait for a particular child process to die wantarray :1, // - get void vs scalar vs list context of current subroutine call warn :1, // - print debugging info when :1, // write :1, // - print a picture record y :null}; // - transliterate a string var RXstyle="string-2"; var RXmodifiers=/[goseximacplud]/; // NOTE: "m", "s", "y" and "tr" need to correct real modifiers for each regexp type function tokenChain(stream,state,chain,style,tail){ // NOTE: chain.length > 2 is not working now (it's for s[...][...]geos;) state.chain=null; // 12 3tail state.style=null; state.tail=null; state.tokenize=function(stream,state){ var e=false,c,i=0; while(c=stream.next()){ if(c===chain[i]&&!e){ if(chain[++i]!==undefined){ state.chain=chain[i]; state.style=style; state.tail=tail;} else if(tail) stream.eatWhile(tail); state.tokenize=tokenPerl; return style;} e=!e&&c=="\\";} return style;}; return state.tokenize(stream,state);} function tokenSOMETHING(stream,state,string){ state.tokenize=function(stream,state){ if(stream.string==string) state.tokenize=tokenPerl; stream.skipToEnd(); return "string";}; return state.tokenize(stream,state);} function tokenPerl(stream,state){ if(stream.eatSpace()) return null; if(state.chain) return tokenChain(stream,state,state.chain,state.style,state.tail); if(stream.match(/^\-?[\d\.]/,false)) if(stream.match(/^(\-?(\d*\.\d+(e[+-]?\d+)?|\d+\.\d*)|0x[\da-fA-F]+|0b[01]+|\d+(e[+-]?\d+)?)/)) return 'number'; if(stream.match(/^<<(?=\w)/)){ // NOTE: <"],RXstyle,RXmodifiers);} if(/[\^'"!~\/]/.test(c)){ eatSuffix(stream, 1); return tokenChain(stream,state,[stream.eat(c)],RXstyle,RXmodifiers);}} else if(c=="q"){ c=look(stream, 1); if(c=="("){ eatSuffix(stream, 2); return tokenChain(stream,state,[")"],"string");} if(c=="["){ eatSuffix(stream, 2); return tokenChain(stream,state,["]"],"string");} if(c=="{"){ eatSuffix(stream, 2); return tokenChain(stream,state,["}"],"string");} if(c=="<"){ eatSuffix(stream, 2); return tokenChain(stream,state,[">"],"string");} if(/[\^'"!~\/]/.test(c)){ eatSuffix(stream, 1); return tokenChain(stream,state,[stream.eat(c)],"string");}} else if(c=="w"){ c=look(stream, 1); if(c=="("){ eatSuffix(stream, 2); return tokenChain(stream,state,[")"],"bracket");} if(c=="["){ eatSuffix(stream, 2); return tokenChain(stream,state,["]"],"bracket");} if(c=="{"){ eatSuffix(stream, 2); return tokenChain(stream,state,["}"],"bracket");} if(c=="<"){ eatSuffix(stream, 2); return tokenChain(stream,state,[">"],"bracket");} if(/[\^'"!~\/]/.test(c)){ eatSuffix(stream, 1); return tokenChain(stream,state,[stream.eat(c)],"bracket");}} else if(c=="r"){ c=look(stream, 1); if(c=="("){ eatSuffix(stream, 2); return tokenChain(stream,state,[")"],RXstyle,RXmodifiers);} if(c=="["){ eatSuffix(stream, 2); return tokenChain(stream,state,["]"],RXstyle,RXmodifiers);} if(c=="{"){ eatSuffix(stream, 2); return tokenChain(stream,state,["}"],RXstyle,RXmodifiers);} if(c=="<"){ eatSuffix(stream, 2); return tokenChain(stream,state,[">"],RXstyle,RXmodifiers);} if(/[\^'"!~\/]/.test(c)){ eatSuffix(stream, 1); return tokenChain(stream,state,[stream.eat(c)],RXstyle,RXmodifiers);}} else if(/[\^'"!~\/(\[{<]/.test(c)){ if(c=="("){ eatSuffix(stream, 1); return tokenChain(stream,state,[")"],"string");} if(c=="["){ eatSuffix(stream, 1); return tokenChain(stream,state,["]"],"string");} if(c=="{"){ eatSuffix(stream, 1); return tokenChain(stream,state,["}"],"string");} if(c=="<"){ eatSuffix(stream, 1); return tokenChain(stream,state,[">"],"string");} if(/[\^'"!~\/]/.test(c)){ return tokenChain(stream,state,[stream.eat(c)],"string");}}}} if(ch=="m"){ var c=look(stream, -2); if(!(c&&/\w/.test(c))){ c=stream.eat(/[(\[{<\^'"!~\/]/); if(c){ if(/[\^'"!~\/]/.test(c)){ return tokenChain(stream,state,[c],RXstyle,RXmodifiers);} if(c=="("){ return tokenChain(stream,state,[")"],RXstyle,RXmodifiers);} if(c=="["){ return tokenChain(stream,state,["]"],RXstyle,RXmodifiers);} if(c=="{"){ return tokenChain(stream,state,["}"],RXstyle,RXmodifiers);} if(c=="<"){ return tokenChain(stream,state,[">"],RXstyle,RXmodifiers);}}}} if(ch=="s"){ var c=/[\/>\]})\w]/.test(look(stream, -2)); if(!c){ c=stream.eat(/[(\[{<\^'"!~\/]/); if(c){ if(c=="[") return tokenChain(stream,state,["]","]"],RXstyle,RXmodifiers); if(c=="{") return tokenChain(stream,state,["}","}"],RXstyle,RXmodifiers); if(c=="<") return tokenChain(stream,state,[">",">"],RXstyle,RXmodifiers); if(c=="(") return tokenChain(stream,state,[")",")"],RXstyle,RXmodifiers); return tokenChain(stream,state,[c,c],RXstyle,RXmodifiers);}}} if(ch=="y"){ var c=/[\/>\]})\w]/.test(look(stream, -2)); if(!c){ c=stream.eat(/[(\[{<\^'"!~\/]/); if(c){ if(c=="[") return tokenChain(stream,state,["]","]"],RXstyle,RXmodifiers); if(c=="{") return tokenChain(stream,state,["}","}"],RXstyle,RXmodifiers); if(c=="<") return tokenChain(stream,state,[">",">"],RXstyle,RXmodifiers); if(c=="(") return tokenChain(stream,state,[")",")"],RXstyle,RXmodifiers); return tokenChain(stream,state,[c,c],RXstyle,RXmodifiers);}}} if(ch=="t"){ var c=/[\/>\]})\w]/.test(look(stream, -2)); if(!c){ c=stream.eat("r");if(c){ c=stream.eat(/[(\[{<\^'"!~\/]/); if(c){ if(c=="[") return tokenChain(stream,state,["]","]"],RXstyle,RXmodifiers); if(c=="{") return tokenChain(stream,state,["}","}"],RXstyle,RXmodifiers); if(c=="<") return tokenChain(stream,state,[">",">"],RXstyle,RXmodifiers); if(c=="(") return tokenChain(stream,state,[")",")"],RXstyle,RXmodifiers); return tokenChain(stream,state,[c,c],RXstyle,RXmodifiers);}}}} if(ch=="`"){ return tokenChain(stream,state,[ch],"variable-2");} if(ch=="/"){ if(!/~\s*$/.test(prefix(stream))) return "operator"; else return tokenChain(stream,state,[ch],RXstyle,RXmodifiers);} if(ch=="$"){ var p=stream.pos; if(stream.eatWhile(/\d/)||stream.eat("{")&&stream.eatWhile(/\d/)&&stream.eat("}")) return "variable-2"; else stream.pos=p;} if(/[$@%]/.test(ch)){ var p=stream.pos; if(stream.eat("^")&&stream.eat(/[A-Z]/)||!/[@$%&]/.test(look(stream, -2))&&stream.eat(/[=|\\\-#?@;:&`~\^!\[\]*'"$+.,\/<>()]/)){ var c=stream.current(); if(PERL[c]) return "variable-2";} stream.pos=p;} if(/[$@%&]/.test(ch)){ if(stream.eatWhile(/[\w$\[\]]/)||stream.eat("{")&&stream.eatWhile(/[\w$\[\]]/)&&stream.eat("}")){ var c=stream.current(); if(PERL[c]) return "variable-2"; else return "variable";}} if(ch=="#"){ if(look(stream, -2)!="$"){ stream.skipToEnd(); return "comment";}} if(/[:+\-\^*$&%@=<>!?|\/~\.]/.test(ch)){ var p=stream.pos; stream.eatWhile(/[:+\-\^*$&%@=<>!?|\/~\.]/); if(PERL[stream.current()]) return "operator"; else stream.pos=p;} if(ch=="_"){ if(stream.pos==1){ if(suffix(stream, 6)=="_END__"){ return tokenChain(stream,state,['\0'],"comment");} else if(suffix(stream, 7)=="_DATA__"){ return tokenChain(stream,state,['\0'],"variable-2");} else if(suffix(stream, 7)=="_C__"){ return tokenChain(stream,state,['\0'],"string");}}} if(/\w/.test(ch)){ var p=stream.pos; if(look(stream, -2)=="{"&&(look(stream, 0)=="}"||stream.eatWhile(/\w/)&&look(stream, 0)=="}")) return "string"; else stream.pos=p;} if(/[A-Z]/.test(ch)){ var l=look(stream, -2); var p=stream.pos; stream.eatWhile(/[A-Z_]/); if(/[\da-z]/.test(look(stream, 0))){ stream.pos=p;} else{ var c=PERL[stream.current()]; if(!c) return "meta"; if(c[1]) c=c[0]; if(l!=":"){ if(c==1) return "keyword"; else if(c==2) return "def"; else if(c==3) return "atom"; else if(c==4) return "operator"; else if(c==5) return "variable-2"; else return "meta";} else return "meta";}} if(/[a-zA-Z_]/.test(ch)){ var l=look(stream, -2); stream.eatWhile(/\w/); var c=PERL[stream.current()]; if(!c) return "meta"; if(c[1]) c=c[0]; if(l!=":"){ if(c==1) return "keyword"; else if(c==2) return "def"; else if(c==3) return "atom"; else if(c==4) return "operator"; else if(c==5) return "variable-2"; else return "meta";} else return "meta";} return null;} return { startState: function() { return { tokenize: tokenPerl, chain: null, style: null, tail: null }; }, token: function(stream, state) { return (state.tokenize || tokenPerl)(stream, state); }, lineComment: '#' }; }); CodeMirror.registerHelper("wordChars", "perl", /[\w$]/); CodeMirror.defineMIME("text/x-perl", "perl"); // it's like "peek", but need for look-ahead or look-behind if index < 0 function look(stream, c){ return stream.string.charAt(stream.pos+(c||0)); } // return a part of prefix of current stream from current position function prefix(stream, c){ if(c){ var x=stream.pos-c; return stream.string.substr((x>=0?x:0),c);} else{ return stream.string.substr(0,stream.pos-1); } } // return a part of suffix of current stream from current position function suffix(stream, c){ var y=stream.string.length; var x=y-stream.pos+1; return stream.string.substr(stream.pos,(c&&c=(y=stream.string.length-1)) stream.pos=y; else stream.pos=x; } }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/php/index.html ================================================ CodeMirror: PHP mode

                  PHP mode

                  Simple HTML/PHP mode based on the C-like mode. Depends on XML, JavaScript, CSS, HTMLMixed, and C-like modes.

                  MIME types defined: application/x-httpd-php (HTML with PHP code), text/x-php (plain, non-wrapped PHP code).

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/php/php.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../htmlmixed/htmlmixed"), require("../clike/clike")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../htmlmixed/htmlmixed", "../clike/clike"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; function keywords(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } // Helper for stringWithEscapes function matchSequence(list, end) { if (list.length == 0) return stringWithEscapes(end); return function (stream, state) { var patterns = list[0]; for (var i = 0; i < patterns.length; i++) if (stream.match(patterns[i][0])) { state.tokenize = matchSequence(list.slice(1), end); return patterns[i][1]; } state.tokenize = stringWithEscapes(end); return "string"; }; } function stringWithEscapes(closing) { return function(stream, state) { return stringWithEscapes_(stream, state, closing); }; } function stringWithEscapes_(stream, state, closing) { // "Complex" syntax if (stream.match("${", false) || stream.match("{$", false)) { state.tokenize = null; return "string"; } // Simple syntax if (stream.match(/^\$[a-zA-Z_][a-zA-Z0-9_]*/)) { // After the variable name there may appear array or object operator. if (stream.match("[", false)) { // Match array operator state.tokenize = matchSequence([ [["[", null]], [[/\d[\w\.]*/, "number"], [/\$[a-zA-Z_][a-zA-Z0-9_]*/, "variable-2"], [/[\w\$]+/, "variable"]], [["]", null]] ], closing); } if (stream.match(/\-\>\w/, false)) { // Match object operator state.tokenize = matchSequence([ [["->", null]], [[/[\w]+/, "variable"]] ], closing); } return "variable-2"; } var escaped = false; // Normal string while (!stream.eol() && (escaped || (!stream.match("{$", false) && !stream.match(/^(\$[a-zA-Z_][a-zA-Z0-9_]*|\$\{)/, false)))) { if (!escaped && stream.match(closing)) { state.tokenize = null; state.tokStack.pop(); state.tokStack.pop(); break; } escaped = stream.next() == "\\" && !escaped; } return "string"; } var phpKeywords = "abstract and array as break case catch class clone const continue declare default " + "do else elseif enddeclare endfor endforeach endif endswitch endwhile extends final " + "for foreach function global goto if implements interface instanceof namespace " + "new or private protected public static switch throw trait try use var while xor " + "die echo empty exit eval include include_once isset list require require_once return " + "print unset __halt_compiler self static parent yield insteadof finally"; var phpAtoms = "true false null TRUE FALSE NULL __CLASS__ __DIR__ __FILE__ __LINE__ __METHOD__ __FUNCTION__ __NAMESPACE__ __TRAIT__"; var phpBuiltin = "func_num_args func_get_arg func_get_args strlen strcmp strncmp strcasecmp strncasecmp each error_reporting define defined trigger_error user_error set_error_handler restore_error_handler get_declared_classes get_loaded_extensions extension_loaded get_extension_funcs debug_backtrace constant bin2hex hex2bin sleep usleep time mktime gmmktime strftime gmstrftime strtotime date gmdate getdate localtime checkdate flush wordwrap htmlspecialchars htmlentities html_entity_decode md5 md5_file crc32 getimagesize image_type_to_mime_type phpinfo phpversion phpcredits strnatcmp strnatcasecmp substr_count strspn strcspn strtok strtoupper strtolower strpos strrpos strrev hebrev hebrevc nl2br basename dirname pathinfo stripslashes stripcslashes strstr stristr strrchr str_shuffle str_word_count strcoll substr substr_replace quotemeta ucfirst ucwords strtr addslashes addcslashes rtrim str_replace str_repeat count_chars chunk_split trim ltrim strip_tags similar_text explode implode setlocale localeconv parse_str str_pad chop strchr sprintf printf vprintf vsprintf sscanf fscanf parse_url urlencode urldecode rawurlencode rawurldecode readlink linkinfo link unlink exec system escapeshellcmd escapeshellarg passthru shell_exec proc_open proc_close rand srand getrandmax mt_rand mt_srand mt_getrandmax base64_decode base64_encode abs ceil floor round is_finite is_nan is_infinite bindec hexdec octdec decbin decoct dechex base_convert number_format fmod ip2long long2ip getenv putenv getopt microtime gettimeofday getrusage uniqid quoted_printable_decode set_time_limit get_cfg_var magic_quotes_runtime set_magic_quotes_runtime get_magic_quotes_gpc get_magic_quotes_runtime import_request_variables error_log serialize unserialize memory_get_usage var_dump var_export debug_zval_dump print_r highlight_file show_source highlight_string ini_get ini_get_all ini_set ini_alter ini_restore get_include_path set_include_path restore_include_path setcookie header headers_sent connection_aborted connection_status ignore_user_abort parse_ini_file is_uploaded_file move_uploaded_file intval floatval doubleval strval gettype settype is_null is_resource is_bool is_long is_float is_int is_integer is_double is_real is_numeric is_string is_array is_object is_scalar ereg ereg_replace eregi eregi_replace split spliti join sql_regcase dl pclose popen readfile rewind rmdir umask fclose feof fgetc fgets fgetss fread fopen fpassthru ftruncate fstat fseek ftell fflush fwrite fputs mkdir rename copy tempnam tmpfile file file_get_contents stream_select stream_context_create stream_context_set_params stream_context_set_option stream_context_get_options stream_filter_prepend stream_filter_append fgetcsv flock get_meta_tags stream_set_write_buffer set_file_buffer set_socket_blocking stream_set_blocking socket_set_blocking stream_get_meta_data stream_register_wrapper stream_wrapper_register stream_set_timeout socket_set_timeout socket_get_status realpath fnmatch fsockopen pfsockopen pack unpack get_browser crypt opendir closedir chdir getcwd rewinddir readdir dir glob fileatime filectime filegroup fileinode filemtime fileowner fileperms filesize filetype file_exists is_writable is_writeable is_readable is_executable is_file is_dir is_link stat lstat chown touch clearstatcache mail ob_start ob_flush ob_clean ob_end_flush ob_end_clean ob_get_flush ob_get_clean ob_get_length ob_get_level ob_get_status ob_get_contents ob_implicit_flush ob_list_handlers ksort krsort natsort natcasesort asort arsort sort rsort usort uasort uksort shuffle array_walk count end prev next reset current key min max in_array array_search extract compact array_fill range array_multisort array_push array_pop array_shift array_unshift array_splice array_slice array_merge array_merge_recursive array_keys array_values array_count_values array_reverse array_reduce array_pad array_flip array_change_key_case array_rand array_unique array_intersect array_intersect_assoc array_diff array_diff_assoc array_sum array_filter array_map array_chunk array_key_exists pos sizeof key_exists assert assert_options version_compare ftok str_rot13 aggregate session_name session_module_name session_save_path session_id session_regenerate_id session_decode session_register session_unregister session_is_registered session_encode session_start session_destroy session_unset session_set_save_handler session_cache_limiter session_cache_expire session_set_cookie_params session_get_cookie_params session_write_close preg_match preg_match_all preg_replace preg_replace_callback preg_split preg_quote preg_grep overload ctype_alnum ctype_alpha ctype_cntrl ctype_digit ctype_lower ctype_graph ctype_print ctype_punct ctype_space ctype_upper ctype_xdigit virtual apache_request_headers apache_note apache_lookup_uri apache_child_terminate apache_setenv apache_response_headers apache_get_version getallheaders mysql_connect mysql_pconnect mysql_close mysql_select_db mysql_create_db mysql_drop_db mysql_query mysql_unbuffered_query mysql_db_query mysql_list_dbs mysql_list_tables mysql_list_fields mysql_list_processes mysql_error mysql_errno mysql_affected_rows mysql_insert_id mysql_result mysql_num_rows mysql_num_fields mysql_fetch_row mysql_fetch_array mysql_fetch_assoc mysql_fetch_object mysql_data_seek mysql_fetch_lengths mysql_fetch_field mysql_field_seek mysql_free_result mysql_field_name mysql_field_table mysql_field_len mysql_field_type mysql_field_flags mysql_escape_string mysql_real_escape_string mysql_stat mysql_thread_id mysql_client_encoding mysql_get_client_info mysql_get_host_info mysql_get_proto_info mysql_get_server_info mysql_info mysql mysql_fieldname mysql_fieldtable mysql_fieldlen mysql_fieldtype mysql_fieldflags mysql_selectdb mysql_createdb mysql_dropdb mysql_freeresult mysql_numfields mysql_numrows mysql_listdbs mysql_listtables mysql_listfields mysql_db_name mysql_dbname mysql_tablename mysql_table_name pg_connect pg_pconnect pg_close pg_connection_status pg_connection_busy pg_connection_reset pg_host pg_dbname pg_port pg_tty pg_options pg_ping pg_query pg_send_query pg_cancel_query pg_fetch_result pg_fetch_row pg_fetch_assoc pg_fetch_array pg_fetch_object pg_fetch_all pg_affected_rows pg_get_result pg_result_seek pg_result_status pg_free_result pg_last_oid pg_num_rows pg_num_fields pg_field_name pg_field_num pg_field_size pg_field_type pg_field_prtlen pg_field_is_null pg_get_notify pg_get_pid pg_result_error pg_last_error pg_last_notice pg_put_line pg_end_copy pg_copy_to pg_copy_from pg_trace pg_untrace pg_lo_create pg_lo_unlink pg_lo_open pg_lo_close pg_lo_read pg_lo_write pg_lo_read_all pg_lo_import pg_lo_export pg_lo_seek pg_lo_tell pg_escape_string pg_escape_bytea pg_unescape_bytea pg_client_encoding pg_set_client_encoding pg_meta_data pg_convert pg_insert pg_update pg_delete pg_select pg_exec pg_getlastoid pg_cmdtuples pg_errormessage pg_numrows pg_numfields pg_fieldname pg_fieldsize pg_fieldtype pg_fieldnum pg_fieldprtlen pg_fieldisnull pg_freeresult pg_result pg_loreadall pg_locreate pg_lounlink pg_loopen pg_loclose pg_loread pg_lowrite pg_loimport pg_loexport http_response_code get_declared_traits getimagesizefromstring socket_import_stream stream_set_chunk_size trait_exists header_register_callback class_uses session_status session_register_shutdown echo print global static exit array empty eval isset unset die include require include_once require_once json_decode json_encode json_last_error json_last_error_msg curl_close curl_copy_handle curl_errno curl_error curl_escape curl_exec curl_file_create curl_getinfo curl_init curl_multi_add_handle curl_multi_close curl_multi_exec curl_multi_getcontent curl_multi_info_read curl_multi_init curl_multi_remove_handle curl_multi_select curl_multi_setopt curl_multi_strerror curl_pause curl_reset curl_setopt_array curl_setopt curl_share_close curl_share_init curl_share_setopt curl_strerror curl_unescape curl_version mysqli_affected_rows mysqli_autocommit mysqli_change_user mysqli_character_set_name mysqli_close mysqli_commit mysqli_connect_errno mysqli_connect_error mysqli_connect mysqli_data_seek mysqli_debug mysqli_dump_debug_info mysqli_errno mysqli_error_list mysqli_error mysqli_fetch_all mysqli_fetch_array mysqli_fetch_assoc mysqli_fetch_field_direct mysqli_fetch_field mysqli_fetch_fields mysqli_fetch_lengths mysqli_fetch_object mysqli_fetch_row mysqli_field_count mysqli_field_seek mysqli_field_tell mysqli_free_result mysqli_get_charset mysqli_get_client_info mysqli_get_client_stats mysqli_get_client_version mysqli_get_connection_stats mysqli_get_host_info mysqli_get_proto_info mysqli_get_server_info mysqli_get_server_version mysqli_info mysqli_init mysqli_insert_id mysqli_kill mysqli_more_results mysqli_multi_query mysqli_next_result mysqli_num_fields mysqli_num_rows mysqli_options mysqli_ping mysqli_prepare mysqli_query mysqli_real_connect mysqli_real_escape_string mysqli_real_query mysqli_reap_async_query mysqli_refresh mysqli_rollback mysqli_select_db mysqli_set_charset mysqli_set_local_infile_default mysqli_set_local_infile_handler mysqli_sqlstate mysqli_ssl_set mysqli_stat mysqli_stmt_init mysqli_store_result mysqli_thread_id mysqli_thread_safe mysqli_use_result mysqli_warning_count"; CodeMirror.registerHelper("hintWords", "php", [phpKeywords, phpAtoms, phpBuiltin].join(" ").split(" ")); CodeMirror.registerHelper("wordChars", "php", /[\w$]/); var phpConfig = { name: "clike", helperType: "php", keywords: keywords(phpKeywords), blockKeywords: keywords("catch do else elseif for foreach if switch try while finally"), atoms: keywords(phpAtoms), builtin: keywords(phpBuiltin), multiLineStrings: true, hooks: { "$": function(stream) { stream.eatWhile(/[\w\$_]/); return "variable-2"; }, "<": function(stream, state) { if (stream.match(/<", false)) stream.next(); return "comment"; }, "/": function(stream) { if (stream.eat("/")) { while (!stream.eol() && !stream.match("?>", false)) stream.next(); return "comment"; } return false; }, '"': function(_stream, state) { (state.tokStack || (state.tokStack = [])).push('"', 0); state.tokenize = stringWithEscapes('"'); return "string"; }, "{": function(_stream, state) { if (state.tokStack && state.tokStack.length) state.tokStack[state.tokStack.length - 1]++; return false; }, "}": function(_stream, state) { if (state.tokStack && state.tokStack.length > 0 && !--state.tokStack[state.tokStack.length - 1]) { state.tokenize = stringWithEscapes(state.tokStack[state.tokStack.length - 2]); } return false; } } }; CodeMirror.defineMode("php", function(config, parserConfig) { var htmlMode = CodeMirror.getMode(config, "text/html"); var phpMode = CodeMirror.getMode(config, phpConfig); function dispatch(stream, state) { var isPHP = state.curMode == phpMode; if (stream.sol() && state.pending && state.pending != '"' && state.pending != "'") state.pending = null; if (!isPHP) { if (stream.match(/^<\?\w*/)) { state.curMode = phpMode; state.curState = state.php; return "meta"; } if (state.pending == '"' || state.pending == "'") { while (!stream.eol() && stream.next() != state.pending) {} var style = "string"; } else if (state.pending && stream.pos < state.pending.end) { stream.pos = state.pending.end; var style = state.pending.style; } else { var style = htmlMode.token(stream, state.curState); } if (state.pending) state.pending = null; var cur = stream.current(), openPHP = cur.search(/<\?/), m; if (openPHP != -1) { if (style == "string" && (m = cur.match(/[\'\"]$/)) && !/\?>/.test(cur)) state.pending = m[0]; else state.pending = {end: stream.pos, style: style}; stream.backUp(cur.length - openPHP); } return style; } else if (isPHP && state.php.tokenize == null && stream.match("?>")) { state.curMode = htmlMode; state.curState = state.html; return "meta"; } else { return phpMode.token(stream, state.curState); } } return { startState: function() { var html = CodeMirror.startState(htmlMode), php = CodeMirror.startState(phpMode); return {html: html, php: php, curMode: parserConfig.startOpen ? phpMode : htmlMode, curState: parserConfig.startOpen ? php : html, pending: null}; }, copyState: function(state) { var html = state.html, htmlNew = CodeMirror.copyState(htmlMode, html), php = state.php, phpNew = CodeMirror.copyState(phpMode, php), cur; if (state.curMode == htmlMode) cur = htmlNew; else cur = phpNew; return {html: htmlNew, php: phpNew, curMode: state.curMode, curState: cur, pending: state.pending}; }, token: dispatch, indent: function(state, textAfter) { if ((state.curMode != phpMode && /^\s*<\//.test(textAfter)) || (state.curMode == phpMode && /^\?>/.test(textAfter))) return htmlMode.indent(state.html, textAfter); return state.curMode.indent(state.curState, textAfter); }, blockCommentStart: "/*", blockCommentEnd: "*/", lineComment: "//", innerMode: function(state) { return {state: state.curState, mode: state.curMode}; } }; }, "htmlmixed", "clike"); CodeMirror.defineMIME("application/x-httpd-php", "php"); CodeMirror.defineMIME("application/x-httpd-php-open", {name: "php", startOpen: true}); CodeMirror.defineMIME("text/x-php", phpConfig); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/php/test.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function() { var mode = CodeMirror.getMode({indentUnit: 2}, "php"); function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } MT('simple_test', '[meta ]'); MT('variable_interpolation_non_alphanumeric', '[meta $/$\\$}$\\\"$:$;$?$|$[[$]]$+$=aaa"]', '[meta ?>]'); MT('variable_interpolation_digits', '[meta ]'); MT('variable_interpolation_simple_syntax_1', '[meta ]'); MT('variable_interpolation_simple_syntax_2', '[meta ]'); MT('variable_interpolation_simple_syntax_3', '[meta [variable aaaaa][string .aaaaaa"];', '[keyword echo] [string "aaa][variable-2 $aaaa][string ->][variable-2 $aaaaa][string .aaaaaa"];', '[keyword echo] [string "aaa][variable-2 $aaaa]->[variable aaaaa][string [[2]].aaaaaa"];', '[keyword echo] [string "aaa][variable-2 $aaaa]->[variable aaaaa][string ->aaaa2.aaaaaa"];', '[meta ?>]'); MT('variable_interpolation_escaping', '[meta aaa.aaa"];', '[keyword echo] [string "aaa\\$aaaa[[2]]aaa.aaa"];', '[keyword echo] [string "aaa\\$aaaa[[asd]]aaa.aaa"];', '[keyword echo] [string "aaa{\\$aaaa->aaa.aaa"];', '[keyword echo] [string "aaa{\\$aaaa[[2]]aaa.aaa"];', '[keyword echo] [string "aaa{\\aaaaa[[asd]]aaa.aaa"];', '[keyword echo] [string "aaa\\${aaaa->aaa.aaa"];', '[keyword echo] [string "aaa\\${aaaa[[2]]aaa.aaa"];', '[keyword echo] [string "aaa\\${aaaa[[asd]]aaa.aaa"];', '[meta ?>]'); MT('variable_interpolation_complex_syntax_1', '[meta aaa.aaa"];', '[keyword echo] [string "aaa][variable-2 $]{[variable-2 $aaaa]}[string ->aaa.aaa"];', '[keyword echo] [string "aaa][variable-2 $]{[variable-2 $aaaa][[',' [number 42]',']]}[string ->aaa.aaa"];', '[keyword echo] [string "aaa][variable-2 $]{[variable aaaa][meta ?>]aaaaaa'); MT('variable_interpolation_complex_syntax_2', '[meta } $aaaaaa.aaa"];', '[keyword echo] [string "][variable-2 $]{[variable aaa][comment /*}?>*/][[',' [string "aaa][variable-2 $aaa][string {}][variable-2 $]{[variable aaa]}[string "]',']]}[string ->aaa.aaa"];', '[keyword echo] [string "][variable-2 $]{[variable aaa][comment /*} } $aaa } */]}[string ->aaa.aaa"];'); function build_recursive_monsters(nt, t, n){ var monsters = [t]; for (var i = 1; i <= n; ++i) monsters[i] = nt.join(monsters[i - 1]); return monsters; } var m1 = build_recursive_monsters( ['[string "][variable-2 $]{[variable aaa] [operator +] ', '}[string "]'], '[comment /* }?>} */] [string "aaa][variable-2 $aaa][string .aaa"]', 10 ); MT('variable_interpolation_complex_syntax_3_1', '[meta ]'); var m2 = build_recursive_monsters( ['[string "a][variable-2 $]{[variable aaa] [operator +] ', ' [operator +] ', '}[string .a"]'], '[comment /* }?>{{ */] [string "a?>}{{aa][variable-2 $aaa][string .a}a?>a"]', 5 ); MT('variable_interpolation_complex_syntax_3_2', '[meta ]'); function build_recursive_monsters_2(mf1, mf2, nt, t, n){ var monsters = [t]; for (var i = 1; i <= n; ++i) monsters[i] = nt[0] + mf1[i - 1] + nt[1] + mf2[i - 1] + nt[2] + monsters[i - 1] + nt[3]; return monsters; } var m3 = build_recursive_monsters_2( m1, m2, ['[string "a][variable-2 $]{[variable aaa] [operator +] ', ' [operator +] ', ' [operator +] ', '}[string .a"]'], '[comment /* }?>{{ */] [string "a?>}{{aa][variable-2 $aaa][string .a}a?>a"]', 4 ); MT('variable_interpolation_complex_syntax_3_3', '[meta ]'); MT("variable_interpolation_heredoc", "[meta CodeMirror: Pig Latin mode

                  Pig Latin mode

                  Simple mode that handles Pig Latin language.

                  MIME type defined: text/x-pig (PIG code)

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/pig/pig.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE /* * Pig Latin Mode for CodeMirror 2 * @author Prasanth Jayachandran * @link https://github.com/prasanthj/pig-codemirror-2 * This implementation is adapted from PL/SQL mode in CodeMirror 2. */ (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("pig", function(_config, parserConfig) { var keywords = parserConfig.keywords, builtins = parserConfig.builtins, types = parserConfig.types, multiLineStrings = parserConfig.multiLineStrings; var isOperatorChar = /[*+\-%<>=&?:\/!|]/; function chain(stream, state, f) { state.tokenize = f; return f(stream, state); } var type; function ret(tp, style) { type = tp; return style; } function tokenComment(stream, state) { var isEnd = false; var ch; while(ch = stream.next()) { if(ch == "/" && isEnd) { state.tokenize = tokenBase; break; } isEnd = (ch == "*"); } return ret("comment", "comment"); } function tokenString(quote) { return function(stream, state) { var escaped = false, next, end = false; while((next = stream.next()) != null) { if (next == quote && !escaped) { end = true; break; } escaped = !escaped && next == "\\"; } if (end || !(escaped || multiLineStrings)) state.tokenize = tokenBase; return ret("string", "error"); }; } function tokenBase(stream, state) { var ch = stream.next(); // is a start of string? if (ch == '"' || ch == "'") return chain(stream, state, tokenString(ch)); // is it one of the special chars else if(/[\[\]{}\(\),;\.]/.test(ch)) return ret(ch); // is it a number? else if(/\d/.test(ch)) { stream.eatWhile(/[\w\.]/); return ret("number", "number"); } // multi line comment or operator else if (ch == "/") { if (stream.eat("*")) { return chain(stream, state, tokenComment); } else { stream.eatWhile(isOperatorChar); return ret("operator", "operator"); } } // single line comment or operator else if (ch=="-") { if(stream.eat("-")){ stream.skipToEnd(); return ret("comment", "comment"); } else { stream.eatWhile(isOperatorChar); return ret("operator", "operator"); } } // is it an operator else if (isOperatorChar.test(ch)) { stream.eatWhile(isOperatorChar); return ret("operator", "operator"); } else { // get the while word stream.eatWhile(/[\w\$_]/); // is it one of the listed keywords? if (keywords && keywords.propertyIsEnumerable(stream.current().toUpperCase())) { if (stream.eat(")") || stream.eat(".")) { //keywords can be used as variables like flatten(group), group.$0 etc.. } else { return ("keyword", "keyword"); } } // is it one of the builtin functions? if (builtins && builtins.propertyIsEnumerable(stream.current().toUpperCase())) { return ("keyword", "variable-2"); } // is it one of the listed types? if (types && types.propertyIsEnumerable(stream.current().toUpperCase())) return ("keyword", "variable-3"); // default is a 'variable' return ret("variable", "pig-word"); } } // Interface return { startState: function() { return { tokenize: tokenBase, startOfLine: true }; }, token: function(stream, state) { if(stream.eatSpace()) return null; var style = state.tokenize(stream, state); return style; } }; }); (function() { function keywords(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } // builtin funcs taken from trunk revision 1303237 var pBuiltins = "ABS ACOS ARITY ASIN ATAN AVG BAGSIZE BINSTORAGE BLOOM BUILDBLOOM CBRT CEIL " + "CONCAT COR COS COSH COUNT COUNT_STAR COV CONSTANTSIZE CUBEDIMENSIONS DIFF DISTINCT DOUBLEABS " + "DOUBLEAVG DOUBLEBASE DOUBLEMAX DOUBLEMIN DOUBLEROUND DOUBLESUM EXP FLOOR FLOATABS FLOATAVG " + "FLOATMAX FLOATMIN FLOATROUND FLOATSUM GENERICINVOKER INDEXOF INTABS INTAVG INTMAX INTMIN " + "INTSUM INVOKEFORDOUBLE INVOKEFORFLOAT INVOKEFORINT INVOKEFORLONG INVOKEFORSTRING INVOKER " + "ISEMPTY JSONLOADER JSONMETADATA JSONSTORAGE LAST_INDEX_OF LCFIRST LOG LOG10 LOWER LONGABS " + "LONGAVG LONGMAX LONGMIN LONGSUM MAX MIN MAPSIZE MONITOREDUDF NONDETERMINISTIC OUTPUTSCHEMA " + "PIGSTORAGE PIGSTREAMING RANDOM REGEX_EXTRACT REGEX_EXTRACT_ALL REPLACE ROUND SIN SINH SIZE " + "SQRT STRSPLIT SUBSTRING SUM STRINGCONCAT STRINGMAX STRINGMIN STRINGSIZE TAN TANH TOBAG " + "TOKENIZE TOMAP TOP TOTUPLE TRIM TEXTLOADER TUPLESIZE UCFIRST UPPER UTF8STORAGECONVERTER "; // taken from QueryLexer.g var pKeywords = "VOID IMPORT RETURNS DEFINE LOAD FILTER FOREACH ORDER CUBE DISTINCT COGROUP " + "JOIN CROSS UNION SPLIT INTO IF OTHERWISE ALL AS BY USING INNER OUTER ONSCHEMA PARALLEL " + "PARTITION GROUP AND OR NOT GENERATE FLATTEN ASC DESC IS STREAM THROUGH STORE MAPREDUCE " + "SHIP CACHE INPUT OUTPUT STDERROR STDIN STDOUT LIMIT SAMPLE LEFT RIGHT FULL EQ GT LT GTE LTE " + "NEQ MATCHES TRUE FALSE DUMP"; // data types var pTypes = "BOOLEAN INT LONG FLOAT DOUBLE CHARARRAY BYTEARRAY BAG TUPLE MAP "; CodeMirror.defineMIME("text/x-pig", { name: "pig", builtins: keywords(pBuiltins), keywords: keywords(pKeywords), types: keywords(pTypes) }); CodeMirror.registerHelper("hintWords", "pig", (pBuiltins + pTypes + pKeywords).split(" ")); }()); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/properties/index.html ================================================ CodeMirror: Properties files mode

                  Properties files mode

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

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/properties/properties.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("properties", function() { return { token: function(stream, state) { var sol = stream.sol() || state.afterSection; var eol = stream.eol(); state.afterSection = false; if (sol) { if (state.nextMultiline) { state.inMultiline = true; state.nextMultiline = false; } else { state.position = "def"; } } if (eol && ! state.nextMultiline) { state.inMultiline = false; state.position = "def"; } if (sol) { while(stream.eatSpace()); } var ch = stream.next(); if (sol && (ch === "#" || ch === "!" || ch === ";")) { state.position = "comment"; stream.skipToEnd(); return "comment"; } else if (sol && ch === "[") { state.afterSection = true; stream.skipTo("]"); stream.eat("]"); return "header"; } else if (ch === "=" || ch === ":") { state.position = "quote"; return null; } else if (ch === "\\" && state.position === "quote") { if (stream.next() !== "u") { // u = Unicode sequence \u1234 // Multiline value state.nextMultiline = true; } } return state.position; }, startState: function() { return { position : "def", // Current position, "def", "quote" or "comment" nextMultiline : false, // Is the next line multiline value inMultiline : false, // Is the current line a multiline value afterSection : false // Did we just open a section }; } }; }); CodeMirror.defineMIME("text/x-properties", "properties"); CodeMirror.defineMIME("text/x-ini", "properties"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/puppet/index.html ================================================ CodeMirror: Puppet mode

                  Puppet mode

                  MIME types defined: text/x-puppet.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/puppet/puppet.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("puppet", function () { // Stores the words from the define method var words = {}; // Taken, mostly, from the Puppet official variable standards regex var variable_regex = /({)?([a-z][a-z0-9_]*)?((::[a-z][a-z0-9_]*)*::)?[a-zA-Z0-9_]+(})?/; // Takes a string of words separated by spaces and adds them as // keys with the value of the first argument 'style' function define(style, string) { var split = string.split(' '); for (var i = 0; i < split.length; i++) { words[split[i]] = style; } } // Takes commonly known puppet types/words and classifies them to a style define('keyword', 'class define site node include import inherits'); define('keyword', 'case if else in and elsif default or'); define('atom', 'false true running present absent file directory undef'); define('builtin', 'action augeas burst chain computer cron destination dport exec ' + 'file filebucket group host icmp iniface interface jump k5login limit log_level ' + 'log_prefix macauthorization mailalias maillist mcx mount nagios_command ' + 'nagios_contact nagios_contactgroup nagios_host nagios_hostdependency ' + 'nagios_hostescalation nagios_hostextinfo nagios_hostgroup nagios_service ' + 'nagios_servicedependency nagios_serviceescalation nagios_serviceextinfo ' + 'nagios_servicegroup nagios_timeperiod name notify outiface package proto reject ' + 'resources router schedule scheduled_task selboolean selmodule service source ' + 'sport ssh_authorized_key sshkey stage state table tidy todest toports tosource ' + 'user vlan yumrepo zfs zone zpool'); // After finding a start of a string ('|") this function attempts to find the end; // If a variable is encountered along the way, we display it differently when it // is encapsulated in a double-quoted string. function tokenString(stream, state) { var current, prev, found_var = false; while (!stream.eol() && (current = stream.next()) != state.pending) { if (current === '$' && prev != '\\' && state.pending == '"') { found_var = true; break; } prev = current; } if (found_var) { stream.backUp(1); } if (current == state.pending) { state.continueString = false; } else { state.continueString = true; } return "string"; } // Main function function tokenize(stream, state) { // Matches one whole word var word = stream.match(/[\w]+/, false); // Matches attributes (i.e. ensure => present ; 'ensure' would be matched) var attribute = stream.match(/(\s+)?\w+\s+=>.*/, false); // Matches non-builtin resource declarations // (i.e. "apache::vhost {" or "mycustomclasss {" would be matched) var resource = stream.match(/(\s+)?[\w:_]+(\s+)?{/, false); // Matches virtual and exported resources (i.e. @@user { ; and the like) var special_resource = stream.match(/(\s+)?[@]{1,2}[\w:_]+(\s+)?{/, false); // Finally advance the stream var ch = stream.next(); // Have we found a variable? if (ch === '$') { if (stream.match(variable_regex)) { // If so, and its in a string, assign it a different color return state.continueString ? 'variable-2' : 'variable'; } // Otherwise return an invalid variable return "error"; } // Should we still be looking for the end of a string? if (state.continueString) { // If so, go through the loop again stream.backUp(1); return tokenString(stream, state); } // Are we in a definition (class, node, define)? if (state.inDefinition) { // If so, return def (i.e. for 'class myclass {' ; 'myclass' would be matched) if (stream.match(/(\s+)?[\w:_]+(\s+)?/)) { return 'def'; } // Match the rest it the next time around stream.match(/\s+{/); state.inDefinition = false; } // Are we in an 'include' statement? if (state.inInclude) { // Match and return the included class stream.match(/(\s+)?\S+(\s+)?/); state.inInclude = false; return 'def'; } // Do we just have a function on our hands? // In 'ensure_resource("myclass")', 'ensure_resource' is matched if (stream.match(/(\s+)?\w+\(/)) { stream.backUp(1); return 'def'; } // Have we matched the prior attribute regex? if (attribute) { stream.match(/(\s+)?\w+/); return 'tag'; } // Do we have Puppet specific words? if (word && words.hasOwnProperty(word)) { // Negates the initial next() stream.backUp(1); // Acutally move the stream stream.match(/[\w]+/); // We want to process these words differently // do to the importance they have in Puppet if (stream.match(/\s+\S+\s+{/, false)) { state.inDefinition = true; } if (word == 'include') { state.inInclude = true; } // Returns their value as state in the prior define methods return words[word]; } // Is there a match on a reference? if (/(^|\s+)[A-Z][\w:_]+/.test(word)) { // Negate the next() stream.backUp(1); // Match the full reference stream.match(/(^|\s+)[A-Z][\w:_]+/); return 'def'; } // Have we matched the prior resource regex? if (resource) { stream.match(/(\s+)?[\w:_]+/); return 'def'; } // Have we matched the prior special_resource regex? if (special_resource) { stream.match(/(\s+)?[@]{1,2}/); return 'special'; } // Match all the comments. All of them. if (ch == "#") { stream.skipToEnd(); return "comment"; } // Have we found a string? if (ch == "'" || ch == '"') { // Store the type (single or double) state.pending = ch; // Perform the looping function to find the end return tokenString(stream, state); } // Match all the brackets if (ch == '{' || ch == '}') { return 'bracket'; } // Match characters that we are going to assume // are trying to be regex if (ch == '/') { stream.match(/.*?\//); return 'variable-3'; } // Match all the numbers if (ch.match(/[0-9]/)) { stream.eatWhile(/[0-9]+/); return 'number'; } // Match the '=' and '=>' operators if (ch == '=') { if (stream.peek() == '>') { stream.next(); } return "operator"; } // Keep advancing through all the rest stream.eatWhile(/[\w-]/); // Return a blank line for everything else return null; } // Start it all return { startState: function () { var state = {}; state.inDefinition = false; state.inInclude = false; state.continueString = false; state.pending = false; return state; }, token: function (stream, state) { // Strip the spaces, but regex will account for them eitherway if (stream.eatSpace()) return null; // Go through the main process return tokenize(stream, state); } }; }); CodeMirror.defineMIME("text/x-puppet", "puppet"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/python/index.html ================================================ CodeMirror: Python mode

                  Python mode

                  Cython mode

                  Configuration Options for Python mode:

                  • version - 2/3 - The version of Python to recognize. Default is 2.
                  • singleLineStringErrors - true/false - If you have a single-line string that is not terminated at the end of the line, this will show subsequent lines as errors if true, otherwise it will consider the newline as the end of the string. Default is false.
                  • hangingIndent - int - If you want to write long arguments to a function starting on a new line, how much that line should be indented. Defaults to one normal indentation unit.

                  Advanced Configuration Options:

                  Usefull for superset of python syntax like Enthought enaml, IPython magics and questionmark help

                  • singleOperators - RegEx - Regular Expression for single operator matching, default :
                    ^[\\+\\-\\*/%&|\\^~<>!]
                    including
                    @
                    on Python 3
                  • singleDelimiters - RegEx - Regular Expression for single delimiter matching, default :
                    ^[\\(\\)\\[\\]\\{\\}@,:`=;\\.]
                  • doubleOperators - RegEx - Regular Expression for double operators matching, default :
                    ^((==)|(!=)|(<=)|(>=)|(<>)|(<<)|(>>)|(//)|(\\*\\*))
                  • doubleDelimiters - RegEx - Regular Expressoin for double delimiters matching, default :
                    ^((\\+=)|(\\-=)|(\\*=)|(%=)|(/=)|(&=)|(\\|=)|(\\^=))
                  • tripleDelimiters - RegEx - Regular Expression for triple delimiters matching, default :
                    ^((//=)|(>>=)|(<<=)|(\\*\\*=))
                  • identifiers - RegEx - Regular Expression for identifier, default :
                    ^[_A-Za-z][_A-Za-z0-9]*
                    on Python 2 and
                    ^[_A-Za-z\u00A1-\uFFFF][_A-Za-z0-9\u00A1-\uFFFF]*
                    on Python 3.
                  • extra_keywords - list of string - List of extra words ton consider as keywords
                  • extra_builtins - list of string - List of extra words ton consider as builtins

                  MIME types defined: text/x-python and text/x-cython.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/python/python.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; function wordRegexp(words) { return new RegExp("^((" + words.join(")|(") + "))\\b"); } var wordOperators = wordRegexp(["and", "or", "not", "is"]); var commonKeywords = ["as", "assert", "break", "class", "continue", "def", "del", "elif", "else", "except", "finally", "for", "from", "global", "if", "import", "lambda", "pass", "raise", "return", "try", "while", "with", "yield", "in"]; var commonBuiltins = ["abs", "all", "any", "bin", "bool", "bytearray", "callable", "chr", "classmethod", "compile", "complex", "delattr", "dict", "dir", "divmod", "enumerate", "eval", "filter", "float", "format", "frozenset", "getattr", "globals", "hasattr", "hash", "help", "hex", "id", "input", "int", "isinstance", "issubclass", "iter", "len", "list", "locals", "map", "max", "memoryview", "min", "next", "object", "oct", "open", "ord", "pow", "property", "range", "repr", "reversed", "round", "set", "setattr", "slice", "sorted", "staticmethod", "str", "sum", "super", "tuple", "type", "vars", "zip", "__import__", "NotImplemented", "Ellipsis", "__debug__"]; var py2 = {builtins: ["apply", "basestring", "buffer", "cmp", "coerce", "execfile", "file", "intern", "long", "raw_input", "reduce", "reload", "unichr", "unicode", "xrange", "False", "True", "None"], keywords: ["exec", "print"]}; var py3 = {builtins: ["ascii", "bytes", "exec", "print"], keywords: ["nonlocal", "False", "True", "None"]}; CodeMirror.registerHelper("hintWords", "python", commonKeywords.concat(commonBuiltins)); function top(state) { return state.scopes[state.scopes.length - 1]; } CodeMirror.defineMode("python", function(conf, parserConf) { var ERRORCLASS = "error"; var singleDelimiters = parserConf.singleDelimiters || new RegExp("^[\\(\\)\\[\\]\\{\\}@,:`=;\\.]"); var doubleOperators = parserConf.doubleOperators || new RegExp("^((==)|(!=)|(<=)|(>=)|(<>)|(<<)|(>>)|(//)|(\\*\\*))"); var doubleDelimiters = parserConf.doubleDelimiters || new RegExp("^((\\+=)|(\\-=)|(\\*=)|(%=)|(/=)|(&=)|(\\|=)|(\\^=))"); var tripleDelimiters = parserConf.tripleDelimiters || new RegExp("^((//=)|(>>=)|(<<=)|(\\*\\*=))"); if (parserConf.version && parseInt(parserConf.version, 10) == 3){ // since http://legacy.python.org/dev/peps/pep-0465/ @ is also an operator var singleOperators = parserConf.singleOperators || new RegExp("^[\\+\\-\\*/%&|\\^~<>!@]"); var identifiers = parserConf.identifiers|| new RegExp("^[_A-Za-z\u00A1-\uFFFF][_A-Za-z0-9\u00A1-\uFFFF]*"); } else { var singleOperators = parserConf.singleOperators || new RegExp("^[\\+\\-\\*/%&|\\^~<>!]"); var identifiers = parserConf.identifiers|| new RegExp("^[_A-Za-z][_A-Za-z0-9]*"); } var hangingIndent = parserConf.hangingIndent || conf.indentUnit; var myKeywords = commonKeywords, myBuiltins = commonBuiltins; if(parserConf.extra_keywords != undefined){ myKeywords = myKeywords.concat(parserConf.extra_keywords); } if(parserConf.extra_builtins != undefined){ myBuiltins = myBuiltins.concat(parserConf.extra_builtins); } if (parserConf.version && parseInt(parserConf.version, 10) == 3) { myKeywords = myKeywords.concat(py3.keywords); myBuiltins = myBuiltins.concat(py3.builtins); var stringPrefixes = new RegExp("^(([rb]|(br))?('{3}|\"{3}|['\"]))", "i"); } else { myKeywords = myKeywords.concat(py2.keywords); myBuiltins = myBuiltins.concat(py2.builtins); var stringPrefixes = new RegExp("^(([rub]|(ur)|(br))?('{3}|\"{3}|['\"]))", "i"); } var keywords = wordRegexp(myKeywords); var builtins = wordRegexp(myBuiltins); // tokenizers function tokenBase(stream, state) { // Handle scope changes if (stream.sol() && top(state).type == "py") { var scopeOffset = top(state).offset; if (stream.eatSpace()) { var lineOffset = stream.indentation(); if (lineOffset > scopeOffset) pushScope(stream, state, "py"); else if (lineOffset < scopeOffset && dedent(stream, state)) state.errorToken = true; return null; } else { var style = tokenBaseInner(stream, state); if (scopeOffset > 0 && dedent(stream, state)) style += " " + ERRORCLASS; return style; } } return tokenBaseInner(stream, state); } function tokenBaseInner(stream, state) { if (stream.eatSpace()) return null; var ch = stream.peek(); // Handle Comments if (ch == "#") { stream.skipToEnd(); return "comment"; } // Handle Number Literals if (stream.match(/^[0-9\.]/, false)) { var floatLiteral = false; // Floats if (stream.match(/^\d*\.\d+(e[\+\-]?\d+)?/i)) { floatLiteral = true; } if (stream.match(/^\d+\.\d*/)) { floatLiteral = true; } if (stream.match(/^\.\d+/)) { floatLiteral = true; } if (floatLiteral) { // Float literals may be "imaginary" stream.eat(/J/i); return "number"; } // Integers var intLiteral = false; // Hex if (stream.match(/^0x[0-9a-f]+/i)) intLiteral = true; // Binary if (stream.match(/^0b[01]+/i)) intLiteral = true; // Octal if (stream.match(/^0o[0-7]+/i)) intLiteral = true; // Decimal if (stream.match(/^[1-9]\d*(e[\+\-]?\d+)?/)) { // Decimal literals may be "imaginary" stream.eat(/J/i); // TODO - Can you have imaginary longs? intLiteral = true; } // Zero by itself with no other piece of number. if (stream.match(/^0(?![\dx])/i)) intLiteral = true; if (intLiteral) { // Integer literals may be "long" stream.eat(/L/i); return "number"; } } // Handle Strings if (stream.match(stringPrefixes)) { state.tokenize = tokenStringFactory(stream.current()); return state.tokenize(stream, state); } // Handle operators and Delimiters if (stream.match(tripleDelimiters) || stream.match(doubleDelimiters)) return null; if (stream.match(doubleOperators) || stream.match(singleOperators) || stream.match(wordOperators)) return "operator"; if (stream.match(singleDelimiters)) return null; if (stream.match(keywords)) return "keyword"; if (stream.match(builtins)) return "builtin"; if (stream.match(/^(self|cls)\b/)) return "variable-2"; if (stream.match(identifiers)) { if (state.lastToken == "def" || state.lastToken == "class") return "def"; return "variable"; } // Handle non-detected items stream.next(); return ERRORCLASS; } function tokenStringFactory(delimiter) { while ("rub".indexOf(delimiter.charAt(0).toLowerCase()) >= 0) delimiter = delimiter.substr(1); var singleline = delimiter.length == 1; var OUTCLASS = "string"; function tokenString(stream, state) { while (!stream.eol()) { stream.eatWhile(/[^'"\\]/); if (stream.eat("\\")) { stream.next(); if (singleline && stream.eol()) return OUTCLASS; } else if (stream.match(delimiter)) { state.tokenize = tokenBase; return OUTCLASS; } else { stream.eat(/['"]/); } } if (singleline) { if (parserConf.singleLineStringErrors) return ERRORCLASS; else state.tokenize = tokenBase; } return OUTCLASS; } tokenString.isString = true; return tokenString; } function pushScope(stream, state, type) { var offset = 0, align = null; if (type == "py") { while (top(state).type != "py") state.scopes.pop(); } offset = top(state).offset + (type == "py" ? conf.indentUnit : hangingIndent); if (type != "py" && !stream.match(/^(\s|#.*)*$/, false)) align = stream.column() + 1; state.scopes.push({offset: offset, type: type, align: align}); } function dedent(stream, state) { var indented = stream.indentation(); while (top(state).offset > indented) { if (top(state).type != "py") return true; state.scopes.pop(); } return top(state).offset != indented; } function tokenLexer(stream, state) { var style = state.tokenize(stream, state); var current = stream.current(); // Handle '.' connected identifiers if (current == ".") { style = stream.match(identifiers, false) ? null : ERRORCLASS; if (style == null && state.lastStyle == "meta") { // Apply 'meta' style to '.' connected identifiers when // appropriate. style = "meta"; } return style; } // Handle decorators if (current == "@"){ if(parserConf.version && parseInt(parserConf.version, 10) == 3){ return stream.match(identifiers, false) ? "meta" : "operator"; } else { return stream.match(identifiers, false) ? "meta" : ERRORCLASS; } } if ((style == "variable" || style == "builtin") && state.lastStyle == "meta") style = "meta"; // Handle scope changes. if (current == "pass" || current == "return") state.dedent += 1; if (current == "lambda") state.lambda = true; if (current == ":" && !state.lambda && top(state).type == "py") pushScope(stream, state, "py"); var delimiter_index = current.length == 1 ? "[({".indexOf(current) : -1; if (delimiter_index != -1) pushScope(stream, state, "])}".slice(delimiter_index, delimiter_index+1)); delimiter_index = "])}".indexOf(current); if (delimiter_index != -1) { if (top(state).type == current) state.scopes.pop(); else return ERRORCLASS; } if (state.dedent > 0 && stream.eol() && top(state).type == "py") { if (state.scopes.length > 1) state.scopes.pop(); state.dedent -= 1; } return style; } var external = { startState: function(basecolumn) { return { tokenize: tokenBase, scopes: [{offset: basecolumn || 0, type: "py", align: null}], lastStyle: null, lastToken: null, lambda: false, dedent: 0 }; }, token: function(stream, state) { var addErr = state.errorToken; if (addErr) state.errorToken = false; var style = tokenLexer(stream, state); state.lastStyle = style; var current = stream.current(); if (current && style) state.lastToken = current; if (stream.eol() && state.lambda) state.lambda = false; return addErr ? style + " " + ERRORCLASS : style; }, indent: function(state, textAfter) { if (state.tokenize != tokenBase) return state.tokenize.isString ? CodeMirror.Pass : 0; var scope = top(state); var closing = textAfter && textAfter.charAt(0) == scope.type; if (scope.align != null) return scope.align - (closing ? 1 : 0); else if (closing && state.scopes.length > 1) return state.scopes[state.scopes.length - 2].offset; else return scope.offset; }, lineComment: "#", fold: "indent" }; return external; }); CodeMirror.defineMIME("text/x-python", "python"); var words = function(str) { return str.split(" "); }; CodeMirror.defineMIME("text/x-cython", { name: "python", extra_keywords: words("by cdef cimport cpdef ctypedef enum except"+ "extern gil include nogil property public"+ "readonly struct union DEF IF ELIF ELSE") }); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/q/index.html ================================================ CodeMirror: Q mode

                  Q mode

                  MIME type defined: text/x-q.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/q/q.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("q",function(config){ var indentUnit=config.indentUnit, curPunc, keywords=buildRE(["abs","acos","aj","aj0","all","and","any","asc","asin","asof","atan","attr","avg","avgs","bin","by","ceiling","cols","cor","cos","count","cov","cross","csv","cut","delete","deltas","desc","dev","differ","distinct","div","do","each","ej","enlist","eval","except","exec","exit","exp","fby","fills","first","fkeys","flip","floor","from","get","getenv","group","gtime","hclose","hcount","hdel","hopen","hsym","iasc","idesc","if","ij","in","insert","inter","inv","key","keys","last","like","list","lj","load","log","lower","lsq","ltime","ltrim","mavg","max","maxs","mcount","md5","mdev","med","meta","min","mins","mmax","mmin","mmu","mod","msum","neg","next","not","null","or","over","parse","peach","pj","plist","prd","prds","prev","prior","rand","rank","ratios","raze","read0","read1","reciprocal","reverse","rload","rotate","rsave","rtrim","save","scan","select","set","setenv","show","signum","sin","sqrt","ss","ssr","string","sublist","sum","sums","sv","system","tables","tan","til","trim","txf","type","uj","ungroup","union","update","upper","upsert","value","var","view","views","vs","wavg","where","where","while","within","wj","wj1","wsum","xasc","xbar","xcol","xcols","xdesc","xexp","xgroup","xkey","xlog","xprev","xrank"]), E=/[|/&^!+:\\\-*%$=~#;@><,?_\'\"\[\(\]\)\s{}]/; function buildRE(w){return new RegExp("^("+w.join("|")+")$");} function tokenBase(stream,state){ var sol=stream.sol(),c=stream.next(); curPunc=null; if(sol) if(c=="/") return(state.tokenize=tokenLineComment)(stream,state); else if(c=="\\"){ if(stream.eol()||/\s/.test(stream.peek())) return stream.skipToEnd(),/^\\\s*$/.test(stream.current())?(state.tokenize=tokenCommentToEOF)(stream, state):state.tokenize=tokenBase,"comment"; else return state.tokenize=tokenBase,"builtin"; } if(/\s/.test(c)) return stream.peek()=="/"?(stream.skipToEnd(),"comment"):"whitespace"; if(c=='"') return(state.tokenize=tokenString)(stream,state); if(c=='`') return stream.eatWhile(/[A-Z|a-z|\d|_|:|\/|\.]/),"symbol"; if(("."==c&&/\d/.test(stream.peek()))||/\d/.test(c)){ var t=null; stream.backUp(1); if(stream.match(/^\d{4}\.\d{2}(m|\.\d{2}([D|T](\d{2}(:\d{2}(:\d{2}(\.\d{1,9})?)?)?)?)?)/) || stream.match(/^\d+D(\d{2}(:\d{2}(:\d{2}(\.\d{1,9})?)?)?)/) || stream.match(/^\d{2}:\d{2}(:\d{2}(\.\d{1,9})?)?/) || stream.match(/^\d+[ptuv]{1}/)) t="temporal"; else if(stream.match(/^0[NwW]{1}/) || stream.match(/^0x[\d|a-f|A-F]*/) || stream.match(/^[0|1]+[b]{1}/) || stream.match(/^\d+[chijn]{1}/) || stream.match(/-?\d*(\.\d*)?(e[+\-]?\d+)?(e|f)?/)) t="number"; return(t&&(!(c=stream.peek())||E.test(c)))?t:(stream.next(),"error"); } if(/[A-Z|a-z]|\./.test(c)) return stream.eatWhile(/[A-Z|a-z|\.|_|\d]/),keywords.test(stream.current())?"keyword":"variable"; if(/[|/&^!+:\\\-*%$=~#;@><\.,?_\']/.test(c)) return null; if(/[{}\(\[\]\)]/.test(c)) return null; return"error"; } function tokenLineComment(stream,state){ return stream.skipToEnd(),/\/\s*$/.test(stream.current())?(state.tokenize=tokenBlockComment)(stream,state):(state.tokenize=tokenBase),"comment"; } function tokenBlockComment(stream,state){ var f=stream.sol()&&stream.peek()=="\\"; stream.skipToEnd(); if(f&&/^\\\s*$/.test(stream.current())) state.tokenize=tokenBase; return"comment"; } function tokenCommentToEOF(stream){return stream.skipToEnd(),"comment";} function tokenString(stream,state){ var escaped=false,next,end=false; while((next=stream.next())){ if(next=="\""&&!escaped){end=true;break;} escaped=!escaped&&next=="\\"; } if(end)state.tokenize=tokenBase; return"string"; } function pushContext(state,type,col){state.context={prev:state.context,indent:state.indent,col:col,type:type};} function popContext(state){state.indent=state.context.indent;state.context=state.context.prev;} return{ startState:function(){ return{tokenize:tokenBase, context:null, indent:0, col:0}; }, token:function(stream,state){ if(stream.sol()){ if(state.context&&state.context.align==null) state.context.align=false; state.indent=stream.indentation(); } //if (stream.eatSpace()) return null; var style=state.tokenize(stream,state); if(style!="comment"&&state.context&&state.context.align==null&&state.context.type!="pattern"){ state.context.align=true; } if(curPunc=="(")pushContext(state,")",stream.column()); else if(curPunc=="[")pushContext(state,"]",stream.column()); else if(curPunc=="{")pushContext(state,"}",stream.column()); else if(/[\]\}\)]/.test(curPunc)){ while(state.context&&state.context.type=="pattern")popContext(state); if(state.context&&curPunc==state.context.type)popContext(state); } else if(curPunc=="."&&state.context&&state.context.type=="pattern")popContext(state); else if(/atom|string|variable/.test(style)&&state.context){ if(/[\}\]]/.test(state.context.type)) pushContext(state,"pattern",stream.column()); else if(state.context.type=="pattern"&&!state.context.align){ state.context.align=true; state.context.col=stream.column(); } } return style; }, indent:function(state,textAfter){ var firstChar=textAfter&&textAfter.charAt(0); var context=state.context; if(/[\]\}]/.test(firstChar)) while (context&&context.type=="pattern")context=context.prev; var closing=context&&firstChar==context.type; if(!context) return 0; else if(context.type=="pattern") return context.col; else if(context.align) return context.col+(closing?0:1); else return context.indent+(closing?0:indentUnit); } }; }); CodeMirror.defineMIME("text/x-q","q"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/r/index.html ================================================ CodeMirror: R mode

                  R mode

                  MIME types defined: text/x-rsrc.

                  Development of the CodeMirror R mode was kindly sponsored by Ubalo.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/r/r.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("r", function(config) { function wordObj(str) { var words = str.split(" "), res = {}; for (var i = 0; i < words.length; ++i) res[words[i]] = true; return res; } var atoms = wordObj("NULL NA Inf NaN NA_integer_ NA_real_ NA_complex_ NA_character_"); var builtins = wordObj("list quote bquote eval return call parse deparse"); var keywords = wordObj("if else repeat while function for in next break"); var blockkeywords = wordObj("if else repeat while function for"); var opChars = /[+\-*\/^<>=!&|~$:]/; var curPunc; function tokenBase(stream, state) { curPunc = null; var ch = stream.next(); if (ch == "#") { stream.skipToEnd(); return "comment"; } else if (ch == "0" && stream.eat("x")) { stream.eatWhile(/[\da-f]/i); return "number"; } else if (ch == "." && stream.eat(/\d/)) { stream.match(/\d*(?:e[+\-]?\d+)?/); return "number"; } else if (/\d/.test(ch)) { stream.match(/\d*(?:\.\d+)?(?:e[+\-]\d+)?L?/); return "number"; } else if (ch == "'" || ch == '"') { state.tokenize = tokenString(ch); return "string"; } else if (ch == "." && stream.match(/.[.\d]+/)) { return "keyword"; } else if (/[\w\.]/.test(ch) && ch != "_") { stream.eatWhile(/[\w\.]/); var word = stream.current(); if (atoms.propertyIsEnumerable(word)) return "atom"; if (keywords.propertyIsEnumerable(word)) { // Block keywords start new blocks, except 'else if', which only starts // one new block for the 'if', no block for the 'else'. if (blockkeywords.propertyIsEnumerable(word) && !stream.match(/\s*if(\s+|$)/, false)) curPunc = "block"; return "keyword"; } if (builtins.propertyIsEnumerable(word)) return "builtin"; return "variable"; } else if (ch == "%") { if (stream.skipTo("%")) stream.next(); return "variable-2"; } else if (ch == "<" && stream.eat("-")) { return "arrow"; } else if (ch == "=" && state.ctx.argList) { return "arg-is"; } else if (opChars.test(ch)) { if (ch == "$") return "dollar"; stream.eatWhile(opChars); return "operator"; } else if (/[\(\){}\[\];]/.test(ch)) { curPunc = ch; if (ch == ";") return "semi"; return null; } else { return null; } } function tokenString(quote) { return function(stream, state) { if (stream.eat("\\")) { var ch = stream.next(); if (ch == "x") stream.match(/^[a-f0-9]{2}/i); else if ((ch == "u" || ch == "U") && stream.eat("{") && stream.skipTo("}")) stream.next(); else if (ch == "u") stream.match(/^[a-f0-9]{4}/i); else if (ch == "U") stream.match(/^[a-f0-9]{8}/i); else if (/[0-7]/.test(ch)) stream.match(/^[0-7]{1,2}/); return "string-2"; } else { var next; while ((next = stream.next()) != null) { if (next == quote) { state.tokenize = tokenBase; break; } if (next == "\\") { stream.backUp(1); break; } } return "string"; } }; } function push(state, type, stream) { state.ctx = {type: type, indent: state.indent, align: null, column: stream.column(), prev: state.ctx}; } function pop(state) { state.indent = state.ctx.indent; state.ctx = state.ctx.prev; } return { startState: function() { return {tokenize: tokenBase, ctx: {type: "top", indent: -config.indentUnit, align: false}, indent: 0, afterIdent: false}; }, token: function(stream, state) { if (stream.sol()) { if (state.ctx.align == null) state.ctx.align = false; state.indent = stream.indentation(); } if (stream.eatSpace()) return null; var style = state.tokenize(stream, state); if (style != "comment" && state.ctx.align == null) state.ctx.align = true; var ctype = state.ctx.type; if ((curPunc == ";" || curPunc == "{" || curPunc == "}") && ctype == "block") pop(state); if (curPunc == "{") push(state, "}", stream); else if (curPunc == "(") { push(state, ")", stream); if (state.afterIdent) state.ctx.argList = true; } else if (curPunc == "[") push(state, "]", stream); else if (curPunc == "block") push(state, "block", stream); else if (curPunc == ctype) pop(state); state.afterIdent = style == "variable" || style == "keyword"; return style; }, indent: function(state, textAfter) { if (state.tokenize != tokenBase) return 0; var firstChar = textAfter && textAfter.charAt(0), ctx = state.ctx, closing = firstChar == ctx.type; if (ctx.type == "block") return ctx.indent + (firstChar == "{" ? 0 : config.indentUnit); else if (ctx.align) return ctx.column + (closing ? 0 : 1); else return ctx.indent + (closing ? 0 : config.indentUnit); }, lineComment: "#" }; }); CodeMirror.defineMIME("text/x-rsrc", "r"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/rpm/changes/index.html ================================================ CodeMirror: RPM changes mode

                  RPM changes mode

                  MIME types defined: text/x-rpm-changes.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/rpm/index.html ================================================ CodeMirror: RPM changes mode

                  RPM changes mode

                  RPM spec mode

                  MIME types defined: text/x-rpm-spec, text/x-rpm-changes.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/rpm/rpm.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("rpm-changes", function() { var headerSeperator = /^-+$/; var headerLine = /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ?\d{1,2} \d{2}:\d{2}(:\d{2})? [A-Z]{3,4} \d{4} - /; var simpleEmail = /^[\w+.-]+@[\w.-]+/; return { token: function(stream) { if (stream.sol()) { if (stream.match(headerSeperator)) { return 'tag'; } if (stream.match(headerLine)) { return 'tag'; } } if (stream.match(simpleEmail)) { return 'string'; } stream.next(); return null; } }; }); CodeMirror.defineMIME("text/x-rpm-changes", "rpm-changes"); // Quick and dirty spec file highlighting CodeMirror.defineMode("rpm-spec", function() { var arch = /^(i386|i586|i686|x86_64|ppc64|ppc|ia64|s390x|s390|sparc64|sparcv9|sparc|noarch|alphaev6|alpha|hppa|mipsel)/; var preamble = /^(Name|Version|Release|License|Summary|Url|Group|Source|BuildArch|BuildRequires|BuildRoot|AutoReqProv|Provides|Requires(\(\w+\))?|Obsoletes|Conflicts|Recommends|Source\d*|Patch\d*|ExclusiveArch|NoSource|Supplements):/; var section = /^%(debug_package|package|description|prep|build|install|files|clean|changelog|preinstall|preun|postinstall|postun|pre|post|triggerin|triggerun|pretrans|posttrans|verifyscript|check|triggerpostun|triggerprein|trigger)/; var control_flow_complex = /^%(ifnarch|ifarch|if)/; // rpm control flow macros var control_flow_simple = /^%(else|endif)/; // rpm control flow macros var operators = /^(\!|\?|\<\=|\<|\>\=|\>|\=\=|\&\&|\|\|)/; // operators in control flow macros return { startState: function () { return { controlFlow: false, macroParameters: false, section: false }; }, token: function (stream, state) { var ch = stream.peek(); if (ch == "#") { stream.skipToEnd(); return "comment"; } if (stream.sol()) { if (stream.match(preamble)) { return "preamble"; } if (stream.match(section)) { return "section"; } } if (stream.match(/^\$\w+/)) { return "def"; } // Variables like '$RPM_BUILD_ROOT' if (stream.match(/^\$\{\w+\}/)) { return "def"; } // Variables like '${RPM_BUILD_ROOT}' if (stream.match(control_flow_simple)) { return "keyword"; } if (stream.match(control_flow_complex)) { state.controlFlow = true; return "keyword"; } if (state.controlFlow) { if (stream.match(operators)) { return "operator"; } if (stream.match(/^(\d+)/)) { return "number"; } if (stream.eol()) { state.controlFlow = false; } } if (stream.match(arch)) { return "number"; } // Macros like '%make_install' or '%attr(0775,root,root)' if (stream.match(/^%[\w]+/)) { if (stream.match(/^\(/)) { state.macroParameters = true; } return "macro"; } if (state.macroParameters) { if (stream.match(/^\d+/)) { return "number";} if (stream.match(/^\)/)) { state.macroParameters = false; return "macro"; } } if (stream.match(/^%\{\??[\w \-]+\}/)) { return "macro"; } // Macros like '%{defined fedora}' //TODO: Include bash script sub-parser (CodeMirror supports that) stream.next(); return null; } }; }); CodeMirror.defineMIME("text/x-rpm-spec", "rpm-spec"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/rst/index.html ================================================ CodeMirror: reStructuredText mode

                  reStructuredText mode

                  The python mode will be used for highlighting blocks containing Python/IPython terminal sessions: blocks starting with >>> (for Python) or In [num]: (for IPython). Further, the stex mode will be used for highlighting blocks containing LaTex code.

                  MIME types defined: text/x-rst.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/rst/rst.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../python/python"), require("../stex/stex"), require("../../addon/mode/overlay")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../python/python", "../stex/stex", "../../addon/mode/overlay"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode('rst', function (config, options) { var rx_strong = /^\*\*[^\*\s](?:[^\*]*[^\*\s])?\*\*/; var rx_emphasis = /^\*[^\*\s](?:[^\*]*[^\*\s])?\*/; var rx_literal = /^``[^`\s](?:[^`]*[^`\s])``/; var rx_number = /^(?:[\d]+(?:[\.,]\d+)*)/; var rx_positive = /^(?:\s\+[\d]+(?:[\.,]\d+)*)/; var rx_negative = /^(?:\s\-[\d]+(?:[\.,]\d+)*)/; var rx_uri_protocol = "[Hh][Tt][Tt][Pp][Ss]?://"; var rx_uri_domain = "(?:[\\d\\w.-]+)\\.(?:\\w{2,6})"; var rx_uri_path = "(?:/[\\d\\w\\#\\%\\&\\-\\.\\,\\/\\:\\=\\?\\~]+)*"; var rx_uri = new RegExp("^" + rx_uri_protocol + rx_uri_domain + rx_uri_path); var overlay = { token: function (stream) { if (stream.match(rx_strong) && stream.match (/\W+|$/, false)) return 'strong'; if (stream.match(rx_emphasis) && stream.match (/\W+|$/, false)) return 'em'; if (stream.match(rx_literal) && stream.match (/\W+|$/, false)) return 'string-2'; if (stream.match(rx_number)) return 'number'; if (stream.match(rx_positive)) return 'positive'; if (stream.match(rx_negative)) return 'negative'; if (stream.match(rx_uri)) return 'link'; while (stream.next() != null) { if (stream.match(rx_strong, false)) break; if (stream.match(rx_emphasis, false)) break; if (stream.match(rx_literal, false)) break; if (stream.match(rx_number, false)) break; if (stream.match(rx_positive, false)) break; if (stream.match(rx_negative, false)) break; if (stream.match(rx_uri, false)) break; } return null; } }; var mode = CodeMirror.getMode( config, options.backdrop || 'rst-base' ); return CodeMirror.overlayMode(mode, overlay, true); // combine }, 'python', 'stex'); /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// CodeMirror.defineMode('rst-base', function (config) { /////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// function format(string) { var args = Array.prototype.slice.call(arguments, 1); return string.replace(/{(\d+)}/g, function (match, n) { return typeof args[n] != 'undefined' ? args[n] : match; }); } /////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// var mode_python = CodeMirror.getMode(config, 'python'); var mode_stex = CodeMirror.getMode(config, 'stex'); /////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// var SEPA = "\\s+"; var TAIL = "(?:\\s*|\\W|$)", rx_TAIL = new RegExp(format('^{0}', TAIL)); var NAME = "(?:[^\\W\\d_](?:[\\w!\"#$%&'()\\*\\+,\\-\\.\/:;<=>\\?]*[^\\W_])?)", rx_NAME = new RegExp(format('^{0}', NAME)); var NAME_WWS = "(?:[^\\W\\d_](?:[\\w\\s!\"#$%&'()\\*\\+,\\-\\.\/:;<=>\\?]*[^\\W_])?)"; var REF_NAME = format('(?:{0}|`{1}`)', NAME, NAME_WWS); var TEXT1 = "(?:[^\\s\\|](?:[^\\|]*[^\\s\\|])?)"; var TEXT2 = "(?:[^\\`]+)", rx_TEXT2 = new RegExp(format('^{0}', TEXT2)); var rx_section = new RegExp( "^([!'#$%&\"()*+,-./:;<=>?@\\[\\\\\\]^_`{|}~])\\1{3,}\\s*$"); var rx_explicit = new RegExp( format('^\\.\\.{0}', SEPA)); var rx_link = new RegExp( format('^_{0}:{1}|^__:{1}', REF_NAME, TAIL)); var rx_directive = new RegExp( format('^{0}::{1}', REF_NAME, TAIL)); var rx_substitution = new RegExp( format('^\\|{0}\\|{1}{2}::{3}', TEXT1, SEPA, REF_NAME, TAIL)); var rx_footnote = new RegExp( format('^\\[(?:\\d+|#{0}?|\\*)]{1}', REF_NAME, TAIL)); var rx_citation = new RegExp( format('^\\[{0}\\]{1}', REF_NAME, TAIL)); var rx_substitution_ref = new RegExp( format('^\\|{0}\\|', TEXT1)); var rx_footnote_ref = new RegExp( format('^\\[(?:\\d+|#{0}?|\\*)]_', REF_NAME)); var rx_citation_ref = new RegExp( format('^\\[{0}\\]_', REF_NAME)); var rx_link_ref1 = new RegExp( format('^{0}__?', REF_NAME)); var rx_link_ref2 = new RegExp( format('^`{0}`_', TEXT2)); var rx_role_pre = new RegExp( format('^:{0}:`{1}`{2}', NAME, TEXT2, TAIL)); var rx_role_suf = new RegExp( format('^`{1}`:{0}:{2}', NAME, TEXT2, TAIL)); var rx_role = new RegExp( format('^:{0}:{1}', NAME, TAIL)); var rx_directive_name = new RegExp(format('^{0}', REF_NAME)); var rx_directive_tail = new RegExp(format('^::{0}', TAIL)); var rx_substitution_text = new RegExp(format('^\\|{0}\\|', TEXT1)); var rx_substitution_sepa = new RegExp(format('^{0}', SEPA)); var rx_substitution_name = new RegExp(format('^{0}', REF_NAME)); var rx_substitution_tail = new RegExp(format('^::{0}', TAIL)); var rx_link_head = new RegExp("^_"); var rx_link_name = new RegExp(format('^{0}|_', REF_NAME)); var rx_link_tail = new RegExp(format('^:{0}', TAIL)); var rx_verbatim = new RegExp('^::\\s*$'); var rx_examples = new RegExp('^\\s+(?:>>>|In \\[\\d+\\]:)\\s'); /////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// function to_normal(stream, state) { var token = null; if (stream.sol() && stream.match(rx_examples, false)) { change(state, to_mode, { mode: mode_python, local: CodeMirror.startState(mode_python) }); } else if (stream.sol() && stream.match(rx_explicit)) { change(state, to_explicit); token = 'meta'; } else if (stream.sol() && stream.match(rx_section)) { change(state, to_normal); token = 'header'; } else if (phase(state) == rx_role_pre || stream.match(rx_role_pre, false)) { switch (stage(state)) { case 0: change(state, to_normal, context(rx_role_pre, 1)); stream.match(/^:/); token = 'meta'; break; case 1: change(state, to_normal, context(rx_role_pre, 2)); stream.match(rx_NAME); token = 'keyword'; if (stream.current().match(/^(?:math|latex)/)) { state.tmp_stex = true; } break; case 2: change(state, to_normal, context(rx_role_pre, 3)); stream.match(/^:`/); token = 'meta'; break; case 3: if (state.tmp_stex) { state.tmp_stex = undefined; state.tmp = { mode: mode_stex, local: CodeMirror.startState(mode_stex) }; } if (state.tmp) { if (stream.peek() == '`') { change(state, to_normal, context(rx_role_pre, 4)); state.tmp = undefined; break; } token = state.tmp.mode.token(stream, state.tmp.local); break; } change(state, to_normal, context(rx_role_pre, 4)); stream.match(rx_TEXT2); token = 'string'; break; case 4: change(state, to_normal, context(rx_role_pre, 5)); stream.match(/^`/); token = 'meta'; break; case 5: change(state, to_normal, context(rx_role_pre, 6)); stream.match(rx_TAIL); break; default: change(state, to_normal); } } else if (phase(state) == rx_role_suf || stream.match(rx_role_suf, false)) { switch (stage(state)) { case 0: change(state, to_normal, context(rx_role_suf, 1)); stream.match(/^`/); token = 'meta'; break; case 1: change(state, to_normal, context(rx_role_suf, 2)); stream.match(rx_TEXT2); token = 'string'; break; case 2: change(state, to_normal, context(rx_role_suf, 3)); stream.match(/^`:/); token = 'meta'; break; case 3: change(state, to_normal, context(rx_role_suf, 4)); stream.match(rx_NAME); token = 'keyword'; break; case 4: change(state, to_normal, context(rx_role_suf, 5)); stream.match(/^:/); token = 'meta'; break; case 5: change(state, to_normal, context(rx_role_suf, 6)); stream.match(rx_TAIL); break; default: change(state, to_normal); } } else if (phase(state) == rx_role || stream.match(rx_role, false)) { switch (stage(state)) { case 0: change(state, to_normal, context(rx_role, 1)); stream.match(/^:/); token = 'meta'; break; case 1: change(state, to_normal, context(rx_role, 2)); stream.match(rx_NAME); token = 'keyword'; break; case 2: change(state, to_normal, context(rx_role, 3)); stream.match(/^:/); token = 'meta'; break; case 3: change(state, to_normal, context(rx_role, 4)); stream.match(rx_TAIL); break; default: change(state, to_normal); } } else if (phase(state) == rx_substitution_ref || stream.match(rx_substitution_ref, false)) { switch (stage(state)) { case 0: change(state, to_normal, context(rx_substitution_ref, 1)); stream.match(rx_substitution_text); token = 'variable-2'; break; case 1: change(state, to_normal, context(rx_substitution_ref, 2)); if (stream.match(/^_?_?/)) token = 'link'; break; default: change(state, to_normal); } } else if (stream.match(rx_footnote_ref)) { change(state, to_normal); token = 'quote'; } else if (stream.match(rx_citation_ref)) { change(state, to_normal); token = 'quote'; } else if (stream.match(rx_link_ref1)) { change(state, to_normal); if (!stream.peek() || stream.peek().match(/^\W$/)) { token = 'link'; } } else if (phase(state) == rx_link_ref2 || stream.match(rx_link_ref2, false)) { switch (stage(state)) { case 0: if (!stream.peek() || stream.peek().match(/^\W$/)) { change(state, to_normal, context(rx_link_ref2, 1)); } else { stream.match(rx_link_ref2); } break; case 1: change(state, to_normal, context(rx_link_ref2, 2)); stream.match(/^`/); token = 'link'; break; case 2: change(state, to_normal, context(rx_link_ref2, 3)); stream.match(rx_TEXT2); break; case 3: change(state, to_normal, context(rx_link_ref2, 4)); stream.match(/^`_/); token = 'link'; break; default: change(state, to_normal); } } else if (stream.match(rx_verbatim)) { change(state, to_verbatim); } else { if (stream.next()) change(state, to_normal); } return token; } /////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// function to_explicit(stream, state) { var token = null; if (phase(state) == rx_substitution || stream.match(rx_substitution, false)) { switch (stage(state)) { case 0: change(state, to_explicit, context(rx_substitution, 1)); stream.match(rx_substitution_text); token = 'variable-2'; break; case 1: change(state, to_explicit, context(rx_substitution, 2)); stream.match(rx_substitution_sepa); break; case 2: change(state, to_explicit, context(rx_substitution, 3)); stream.match(rx_substitution_name); token = 'keyword'; break; case 3: change(state, to_explicit, context(rx_substitution, 4)); stream.match(rx_substitution_tail); token = 'meta'; break; default: change(state, to_normal); } } else if (phase(state) == rx_directive || stream.match(rx_directive, false)) { switch (stage(state)) { case 0: change(state, to_explicit, context(rx_directive, 1)); stream.match(rx_directive_name); token = 'keyword'; if (stream.current().match(/^(?:math|latex)/)) state.tmp_stex = true; else if (stream.current().match(/^python/)) state.tmp_py = true; break; case 1: change(state, to_explicit, context(rx_directive, 2)); stream.match(rx_directive_tail); token = 'meta'; if (stream.match(/^latex\s*$/) || state.tmp_stex) { state.tmp_stex = undefined; change(state, to_mode, { mode: mode_stex, local: CodeMirror.startState(mode_stex) }); } break; case 2: change(state, to_explicit, context(rx_directive, 3)); if (stream.match(/^python\s*$/) || state.tmp_py) { state.tmp_py = undefined; change(state, to_mode, { mode: mode_python, local: CodeMirror.startState(mode_python) }); } break; default: change(state, to_normal); } } else if (phase(state) == rx_link || stream.match(rx_link, false)) { switch (stage(state)) { case 0: change(state, to_explicit, context(rx_link, 1)); stream.match(rx_link_head); stream.match(rx_link_name); token = 'link'; break; case 1: change(state, to_explicit, context(rx_link, 2)); stream.match(rx_link_tail); token = 'meta'; break; default: change(state, to_normal); } } else if (stream.match(rx_footnote)) { change(state, to_normal); token = 'quote'; } else if (stream.match(rx_citation)) { change(state, to_normal); token = 'quote'; } else { stream.eatSpace(); if (stream.eol()) { change(state, to_normal); } else { stream.skipToEnd(); change(state, to_comment); token = 'comment'; } } return token; } /////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// function to_comment(stream, state) { return as_block(stream, state, 'comment'); } function to_verbatim(stream, state) { return as_block(stream, state, 'meta'); } function as_block(stream, state, token) { if (stream.eol() || stream.eatSpace()) { stream.skipToEnd(); return token; } else { change(state, to_normal); return null; } } /////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// function to_mode(stream, state) { if (state.ctx.mode && state.ctx.local) { if (stream.sol()) { if (!stream.eatSpace()) change(state, to_normal); return null; } return state.ctx.mode.token(stream, state.ctx.local); } change(state, to_normal); return null; } /////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// function context(phase, stage, mode, local) { return {phase: phase, stage: stage, mode: mode, local: local}; } function change(state, tok, ctx) { state.tok = tok; state.ctx = ctx || {}; } function stage(state) { return state.ctx.stage || 0; } function phase(state) { return state.ctx.phase; } /////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// return { startState: function () { return {tok: to_normal, ctx: context(undefined, 0)}; }, copyState: function (state) { var ctx = state.ctx, tmp = state.tmp; if (ctx.local) ctx = {mode: ctx.mode, local: CodeMirror.copyState(ctx.mode, ctx.local)}; if (tmp) tmp = {mode: tmp.mode, local: CodeMirror.copyState(tmp.mode, tmp.local)}; return {tok: state.tok, ctx: ctx, tmp: tmp}; }, innerMode: function (state) { return state.tmp ? {state: state.tmp.local, mode: state.tmp.mode} : state.ctx.mode ? {state: state.ctx.local, mode: state.ctx.mode} : null; }, token: function (stream, state) { return state.tok(stream, state); } }; }, 'python', 'stex'); /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// CodeMirror.defineMIME('text/x-rst', 'rst'); /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/ruby/index.html ================================================ CodeMirror: Ruby mode

                  Ruby mode

                  MIME types defined: text/x-ruby.

                  Development of the CodeMirror Ruby mode was kindly sponsored by Ubalo.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/ruby/ruby.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("ruby", function(config) { function wordObj(words) { var o = {}; for (var i = 0, e = words.length; i < e; ++i) o[words[i]] = true; return o; } var keywords = wordObj([ "alias", "and", "BEGIN", "begin", "break", "case", "class", "def", "defined?", "do", "else", "elsif", "END", "end", "ensure", "false", "for", "if", "in", "module", "next", "not", "or", "redo", "rescue", "retry", "return", "self", "super", "then", "true", "undef", "unless", "until", "when", "while", "yield", "nil", "raise", "throw", "catch", "fail", "loop", "callcc", "caller", "lambda", "proc", "public", "protected", "private", "require", "load", "require_relative", "extend", "autoload", "__END__", "__FILE__", "__LINE__", "__dir__" ]); var indentWords = wordObj(["def", "class", "case", "for", "while", "module", "then", "catch", "loop", "proc", "begin"]); var dedentWords = wordObj(["end", "until"]); var matching = {"[": "]", "{": "}", "(": ")"}; var curPunc; function chain(newtok, stream, state) { state.tokenize.push(newtok); return newtok(stream, state); } function tokenBase(stream, state) { curPunc = null; if (stream.sol() && stream.match("=begin") && stream.eol()) { state.tokenize.push(readBlockComment); return "comment"; } if (stream.eatSpace()) return null; var ch = stream.next(), m; if (ch == "`" || ch == "'" || ch == '"') { return chain(readQuoted(ch, "string", ch == '"' || ch == "`"), stream, state); } else if (ch == "/") { var currentIndex = stream.current().length; if (stream.skipTo("/")) { var search_till = stream.current().length; stream.backUp(stream.current().length - currentIndex); var balance = 0; // balance brackets while (stream.current().length < search_till) { var chchr = stream.next(); if (chchr == "(") balance += 1; else if (chchr == ")") balance -= 1; if (balance < 0) break; } stream.backUp(stream.current().length - currentIndex); if (balance == 0) return chain(readQuoted(ch, "string-2", true), stream, state); } return "operator"; } else if (ch == "%") { var style = "string", embed = true; if (stream.eat("s")) style = "atom"; else if (stream.eat(/[WQ]/)) style = "string"; else if (stream.eat(/[r]/)) style = "string-2"; else if (stream.eat(/[wxq]/)) { style = "string"; embed = false; } var delim = stream.eat(/[^\w\s=]/); if (!delim) return "operator"; if (matching.propertyIsEnumerable(delim)) delim = matching[delim]; return chain(readQuoted(delim, style, embed, true), stream, state); } else if (ch == "#") { stream.skipToEnd(); return "comment"; } else if (ch == "<" && (m = stream.match(/^<-?[\`\"\']?([a-zA-Z_?]\w*)[\`\"\']?(?:;|$)/))) { return chain(readHereDoc(m[1]), stream, state); } else if (ch == "0") { if (stream.eat("x")) stream.eatWhile(/[\da-fA-F]/); else if (stream.eat("b")) stream.eatWhile(/[01]/); else stream.eatWhile(/[0-7]/); return "number"; } else if (/\d/.test(ch)) { stream.match(/^[\d_]*(?:\.[\d_]+)?(?:[eE][+\-]?[\d_]+)?/); return "number"; } else if (ch == "?") { while (stream.match(/^\\[CM]-/)) {} if (stream.eat("\\")) stream.eatWhile(/\w/); else stream.next(); return "string"; } else if (ch == ":") { if (stream.eat("'")) return chain(readQuoted("'", "atom", false), stream, state); if (stream.eat('"')) return chain(readQuoted('"', "atom", true), stream, state); // :> :>> :< :<< are valid symbols if (stream.eat(/[\<\>]/)) { stream.eat(/[\<\>]/); return "atom"; } // :+ :- :/ :* :| :& :! are valid symbols if (stream.eat(/[\+\-\*\/\&\|\:\!]/)) { return "atom"; } // Symbols can't start by a digit if (stream.eat(/[a-zA-Z$@_\xa1-\uffff]/)) { stream.eatWhile(/[\w$\xa1-\uffff]/); // Only one ? ! = is allowed and only as the last character stream.eat(/[\?\!\=]/); return "atom"; } return "operator"; } else if (ch == "@" && stream.match(/^@?[a-zA-Z_\xa1-\uffff]/)) { stream.eat("@"); stream.eatWhile(/[\w\xa1-\uffff]/); return "variable-2"; } else if (ch == "$") { if (stream.eat(/[a-zA-Z_]/)) { stream.eatWhile(/[\w]/); } else if (stream.eat(/\d/)) { stream.eat(/\d/); } else { stream.next(); // Must be a special global like $: or $! } return "variable-3"; } else if (/[a-zA-Z_\xa1-\uffff]/.test(ch)) { stream.eatWhile(/[\w\xa1-\uffff]/); stream.eat(/[\?\!]/); if (stream.eat(":")) return "atom"; return "ident"; } else if (ch == "|" && (state.varList || state.lastTok == "{" || state.lastTok == "do")) { curPunc = "|"; return null; } else if (/[\(\)\[\]{}\\;]/.test(ch)) { curPunc = ch; return null; } else if (ch == "-" && stream.eat(">")) { return "arrow"; } else if (/[=+\-\/*:\.^%<>~|]/.test(ch)) { var more = stream.eatWhile(/[=+\-\/*:\.^%<>~|]/); if (ch == "." && !more) curPunc = "."; return "operator"; } else { return null; } } function tokenBaseUntilBrace(depth) { if (!depth) depth = 1; return function(stream, state) { if (stream.peek() == "}") { if (depth == 1) { state.tokenize.pop(); return state.tokenize[state.tokenize.length-1](stream, state); } else { state.tokenize[state.tokenize.length - 1] = tokenBaseUntilBrace(depth - 1); } } else if (stream.peek() == "{") { state.tokenize[state.tokenize.length - 1] = tokenBaseUntilBrace(depth + 1); } return tokenBase(stream, state); }; } function tokenBaseOnce() { var alreadyCalled = false; return function(stream, state) { if (alreadyCalled) { state.tokenize.pop(); return state.tokenize[state.tokenize.length-1](stream, state); } alreadyCalled = true; return tokenBase(stream, state); }; } function readQuoted(quote, style, embed, unescaped) { return function(stream, state) { var escaped = false, ch; if (state.context.type === 'read-quoted-paused') { state.context = state.context.prev; stream.eat("}"); } while ((ch = stream.next()) != null) { if (ch == quote && (unescaped || !escaped)) { state.tokenize.pop(); break; } if (embed && ch == "#" && !escaped) { if (stream.eat("{")) { if (quote == "}") { state.context = {prev: state.context, type: 'read-quoted-paused'}; } state.tokenize.push(tokenBaseUntilBrace()); break; } else if (/[@\$]/.test(stream.peek())) { state.tokenize.push(tokenBaseOnce()); break; } } escaped = !escaped && ch == "\\"; } return style; }; } function readHereDoc(phrase) { return function(stream, state) { if (stream.match(phrase)) state.tokenize.pop(); else stream.skipToEnd(); return "string"; }; } function readBlockComment(stream, state) { if (stream.sol() && stream.match("=end") && stream.eol()) state.tokenize.pop(); stream.skipToEnd(); return "comment"; } return { startState: function() { return {tokenize: [tokenBase], indented: 0, context: {type: "top", indented: -config.indentUnit}, continuedLine: false, lastTok: null, varList: false}; }, token: function(stream, state) { if (stream.sol()) state.indented = stream.indentation(); var style = state.tokenize[state.tokenize.length-1](stream, state), kwtype; var thisTok = curPunc; if (style == "ident") { var word = stream.current(); style = state.lastTok == "." ? "property" : keywords.propertyIsEnumerable(stream.current()) ? "keyword" : /^[A-Z]/.test(word) ? "tag" : (state.lastTok == "def" || state.lastTok == "class" || state.varList) ? "def" : "variable"; if (style == "keyword") { thisTok = word; if (indentWords.propertyIsEnumerable(word)) kwtype = "indent"; else if (dedentWords.propertyIsEnumerable(word)) kwtype = "dedent"; else if ((word == "if" || word == "unless") && stream.column() == stream.indentation()) kwtype = "indent"; else if (word == "do" && state.context.indented < state.indented) kwtype = "indent"; } } if (curPunc || (style && style != "comment")) state.lastTok = thisTok; if (curPunc == "|") state.varList = !state.varList; if (kwtype == "indent" || /[\(\[\{]/.test(curPunc)) state.context = {prev: state.context, type: curPunc || style, indented: state.indented}; else if ((kwtype == "dedent" || /[\)\]\}]/.test(curPunc)) && state.context.prev) state.context = state.context.prev; if (stream.eol()) state.continuedLine = (curPunc == "\\" || style == "operator"); return style; }, indent: function(state, textAfter) { if (state.tokenize[state.tokenize.length-1] != tokenBase) return 0; var firstChar = textAfter && textAfter.charAt(0); var ct = state.context; var closing = ct.type == matching[firstChar] || ct.type == "keyword" && /^(?:end|until|else|elsif|when|rescue)\b/.test(textAfter); return ct.indented + (closing ? 0 : config.indentUnit) + (state.continuedLine ? config.indentUnit : 0); }, electricChars: "}de", // enD and rescuE lineComment: "#" }; }); CodeMirror.defineMIME("text/x-ruby", "ruby"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/ruby/test.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function() { var mode = CodeMirror.getMode({indentUnit: 2}, "ruby"); function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } MT("divide_equal_operator", "[variable bar] [operator /=] [variable foo]"); MT("divide_equal_operator_no_spacing", "[variable foo][operator /=][number 42]"); })(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/rust/index.html ================================================ CodeMirror: Rust mode

                  Rust mode

                  MIME types defined: text/x-rustsrc.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/rust/rust.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("rust", function() { var indentUnit = 4, altIndentUnit = 2; var valKeywords = { "if": "if-style", "while": "if-style", "loop": "else-style", "else": "else-style", "do": "else-style", "ret": "else-style", "fail": "else-style", "break": "atom", "cont": "atom", "const": "let", "resource": "fn", "let": "let", "fn": "fn", "for": "for", "alt": "alt", "iface": "iface", "impl": "impl", "type": "type", "enum": "enum", "mod": "mod", "as": "op", "true": "atom", "false": "atom", "assert": "op", "check": "op", "claim": "op", "native": "ignore", "unsafe": "ignore", "import": "else-style", "export": "else-style", "copy": "op", "log": "op", "log_err": "op", "use": "op", "bind": "op", "self": "atom", "struct": "enum" }; var typeKeywords = function() { var keywords = {"fn": "fn", "block": "fn", "obj": "obj"}; var atoms = "bool uint int i8 i16 i32 i64 u8 u16 u32 u64 float f32 f64 str char".split(" "); for (var i = 0, e = atoms.length; i < e; ++i) keywords[atoms[i]] = "atom"; return keywords; }(); var operatorChar = /[+\-*&%=<>!?|\.@]/; // Tokenizer // Used as scratch variable to communicate multiple values without // consing up tons of objects. var tcat, content; function r(tc, style) { tcat = tc; return style; } function tokenBase(stream, state) { var ch = stream.next(); if (ch == '"') { state.tokenize = tokenString; return state.tokenize(stream, state); } if (ch == "'") { tcat = "atom"; if (stream.eat("\\")) { if (stream.skipTo("'")) { stream.next(); return "string"; } else { return "error"; } } else { stream.next(); return stream.eat("'") ? "string" : "error"; } } if (ch == "/") { if (stream.eat("/")) { stream.skipToEnd(); return "comment"; } if (stream.eat("*")) { state.tokenize = tokenComment(1); return state.tokenize(stream, state); } } if (ch == "#") { if (stream.eat("[")) { tcat = "open-attr"; return null; } stream.eatWhile(/\w/); return r("macro", "meta"); } if (ch == ":" && stream.match(":<")) { return r("op", null); } if (ch.match(/\d/) || (ch == "." && stream.eat(/\d/))) { var flp = false; if (!stream.match(/^x[\da-f]+/i) && !stream.match(/^b[01]+/)) { stream.eatWhile(/\d/); if (stream.eat(".")) { flp = true; stream.eatWhile(/\d/); } if (stream.match(/^e[+\-]?\d+/i)) { flp = true; } } if (flp) stream.match(/^f(?:32|64)/); else stream.match(/^[ui](?:8|16|32|64)/); return r("atom", "number"); } if (ch.match(/[()\[\]{}:;,]/)) return r(ch, null); if (ch == "-" && stream.eat(">")) return r("->", null); if (ch.match(operatorChar)) { stream.eatWhile(operatorChar); return r("op", null); } stream.eatWhile(/\w/); content = stream.current(); if (stream.match(/^::\w/)) { stream.backUp(1); return r("prefix", "variable-2"); } if (state.keywords.propertyIsEnumerable(content)) return r(state.keywords[content], content.match(/true|false/) ? "atom" : "keyword"); return r("name", "variable"); } function tokenString(stream, state) { var ch, escaped = false; while (ch = stream.next()) { if (ch == '"' && !escaped) { state.tokenize = tokenBase; return r("atom", "string"); } escaped = !escaped && ch == "\\"; } // Hack to not confuse the parser when a string is split in // pieces. return r("op", "string"); } function tokenComment(depth) { return function(stream, state) { var lastCh = null, ch; while (ch = stream.next()) { if (ch == "/" && lastCh == "*") { if (depth == 1) { state.tokenize = tokenBase; break; } else { state.tokenize = tokenComment(depth - 1); return state.tokenize(stream, state); } } if (ch == "*" && lastCh == "/") { state.tokenize = tokenComment(depth + 1); return state.tokenize(stream, state); } lastCh = ch; } return "comment"; }; } // Parser var cx = {state: null, stream: null, marked: null, cc: null}; function pass() { for (var i = arguments.length - 1; i >= 0; i--) cx.cc.push(arguments[i]); } function cont() { pass.apply(null, arguments); return true; } function pushlex(type, info) { var result = function() { var state = cx.state; state.lexical = {indented: state.indented, column: cx.stream.column(), type: type, prev: state.lexical, info: info}; }; result.lex = true; return result; } function poplex() { var state = cx.state; if (state.lexical.prev) { if (state.lexical.type == ")") state.indented = state.lexical.indented; state.lexical = state.lexical.prev; } } function typecx() { cx.state.keywords = typeKeywords; } function valcx() { cx.state.keywords = valKeywords; } poplex.lex = typecx.lex = valcx.lex = true; function commasep(comb, end) { function more(type) { if (type == ",") return cont(comb, more); if (type == end) return cont(); return cont(more); } return function(type) { if (type == end) return cont(); return pass(comb, more); }; } function stat_of(comb, tag) { return cont(pushlex("stat", tag), comb, poplex, block); } function block(type) { if (type == "}") return cont(); if (type == "let") return stat_of(letdef1, "let"); if (type == "fn") return stat_of(fndef); if (type == "type") return cont(pushlex("stat"), tydef, endstatement, poplex, block); if (type == "enum") return stat_of(enumdef); if (type == "mod") return stat_of(mod); if (type == "iface") return stat_of(iface); if (type == "impl") return stat_of(impl); if (type == "open-attr") return cont(pushlex("]"), commasep(expression, "]"), poplex); if (type == "ignore" || type.match(/[\]\);,]/)) return cont(block); return pass(pushlex("stat"), expression, poplex, endstatement, block); } function endstatement(type) { if (type == ";") return cont(); return pass(); } function expression(type) { if (type == "atom" || type == "name") return cont(maybeop); if (type == "{") return cont(pushlex("}"), exprbrace, poplex); if (type.match(/[\[\(]/)) return matchBrackets(type, expression); if (type.match(/[\]\)\};,]/)) return pass(); if (type == "if-style") return cont(expression, expression); if (type == "else-style" || type == "op") return cont(expression); if (type == "for") return cont(pattern, maybetype, inop, expression, expression); if (type == "alt") return cont(expression, altbody); if (type == "fn") return cont(fndef); if (type == "macro") return cont(macro); return cont(); } function maybeop(type) { if (content == ".") return cont(maybeprop); if (content == "::<"){return cont(typarams, maybeop);} if (type == "op" || content == ":") return cont(expression); if (type == "(" || type == "[") return matchBrackets(type, expression); return pass(); } function maybeprop() { if (content.match(/^\w+$/)) {cx.marked = "variable"; return cont(maybeop);} return pass(expression); } function exprbrace(type) { if (type == "op") { if (content == "|") return cont(blockvars, poplex, pushlex("}", "block"), block); if (content == "||") return cont(poplex, pushlex("}", "block"), block); } if (content == "mutable" || (content.match(/^\w+$/) && cx.stream.peek() == ":" && !cx.stream.match("::", false))) return pass(record_of(expression)); return pass(block); } function record_of(comb) { function ro(type) { if (content == "mutable" || content == "with") {cx.marked = "keyword"; return cont(ro);} if (content.match(/^\w*$/)) {cx.marked = "variable"; return cont(ro);} if (type == ":") return cont(comb, ro); if (type == "}") return cont(); return cont(ro); } return ro; } function blockvars(type) { if (type == "name") {cx.marked = "def"; return cont(blockvars);} if (type == "op" && content == "|") return cont(); return cont(blockvars); } function letdef1(type) { if (type.match(/[\]\)\};]/)) return cont(); if (content == "=") return cont(expression, letdef2); if (type == ",") return cont(letdef1); return pass(pattern, maybetype, letdef1); } function letdef2(type) { if (type.match(/[\]\)\};,]/)) return pass(letdef1); else return pass(expression, letdef2); } function maybetype(type) { if (type == ":") return cont(typecx, rtype, valcx); return pass(); } function inop(type) { if (type == "name" && content == "in") {cx.marked = "keyword"; return cont();} return pass(); } function fndef(type) { if (content == "@" || content == "~") {cx.marked = "keyword"; return cont(fndef);} if (type == "name") {cx.marked = "def"; return cont(fndef);} if (content == "<") return cont(typarams, fndef); if (type == "{") return pass(expression); if (type == "(") return cont(pushlex(")"), commasep(argdef, ")"), poplex, fndef); if (type == "->") return cont(typecx, rtype, valcx, fndef); if (type == ";") return cont(); return cont(fndef); } function tydef(type) { if (type == "name") {cx.marked = "def"; return cont(tydef);} if (content == "<") return cont(typarams, tydef); if (content == "=") return cont(typecx, rtype, valcx); return cont(tydef); } function enumdef(type) { if (type == "name") {cx.marked = "def"; return cont(enumdef);} if (content == "<") return cont(typarams, enumdef); if (content == "=") return cont(typecx, rtype, valcx, endstatement); if (type == "{") return cont(pushlex("}"), typecx, enumblock, valcx, poplex); return cont(enumdef); } function enumblock(type) { if (type == "}") return cont(); if (type == "(") return cont(pushlex(")"), commasep(rtype, ")"), poplex, enumblock); if (content.match(/^\w+$/)) cx.marked = "def"; return cont(enumblock); } function mod(type) { if (type == "name") {cx.marked = "def"; return cont(mod);} if (type == "{") return cont(pushlex("}"), block, poplex); return pass(); } function iface(type) { if (type == "name") {cx.marked = "def"; return cont(iface);} if (content == "<") return cont(typarams, iface); if (type == "{") return cont(pushlex("}"), block, poplex); return pass(); } function impl(type) { if (content == "<") return cont(typarams, impl); if (content == "of" || content == "for") {cx.marked = "keyword"; return cont(rtype, impl);} if (type == "name") {cx.marked = "def"; return cont(impl);} if (type == "{") return cont(pushlex("}"), block, poplex); return pass(); } function typarams() { if (content == ">") return cont(); if (content == ",") return cont(typarams); if (content == ":") return cont(rtype, typarams); return pass(rtype, typarams); } function argdef(type) { if (type == "name") {cx.marked = "def"; return cont(argdef);} if (type == ":") return cont(typecx, rtype, valcx); return pass(); } function rtype(type) { if (type == "name") {cx.marked = "variable-3"; return cont(rtypemaybeparam); } if (content == "mutable") {cx.marked = "keyword"; return cont(rtype);} if (type == "atom") return cont(rtypemaybeparam); if (type == "op" || type == "obj") return cont(rtype); if (type == "fn") return cont(fntype); if (type == "{") return cont(pushlex("{"), record_of(rtype), poplex); return matchBrackets(type, rtype); } function rtypemaybeparam() { if (content == "<") return cont(typarams); return pass(); } function fntype(type) { if (type == "(") return cont(pushlex("("), commasep(rtype, ")"), poplex, fntype); if (type == "->") return cont(rtype); return pass(); } function pattern(type) { if (type == "name") {cx.marked = "def"; return cont(patternmaybeop);} if (type == "atom") return cont(patternmaybeop); if (type == "op") return cont(pattern); if (type.match(/[\]\)\};,]/)) return pass(); return matchBrackets(type, pattern); } function patternmaybeop(type) { if (type == "op" && content == ".") return cont(); if (content == "to") {cx.marked = "keyword"; return cont(pattern);} else return pass(); } function altbody(type) { if (type == "{") return cont(pushlex("}", "alt"), altblock1, poplex); return pass(); } function altblock1(type) { if (type == "}") return cont(); if (type == "|") return cont(altblock1); if (content == "when") {cx.marked = "keyword"; return cont(expression, altblock2);} if (type.match(/[\]\);,]/)) return cont(altblock1); return pass(pattern, altblock2); } function altblock2(type) { if (type == "{") return cont(pushlex("}", "alt"), block, poplex, altblock1); else return pass(altblock1); } function macro(type) { if (type.match(/[\[\(\{]/)) return matchBrackets(type, expression); return pass(); } function matchBrackets(type, comb) { if (type == "[") return cont(pushlex("]"), commasep(comb, "]"), poplex); if (type == "(") return cont(pushlex(")"), commasep(comb, ")"), poplex); if (type == "{") return cont(pushlex("}"), commasep(comb, "}"), poplex); return cont(); } function parse(state, stream, style) { var cc = state.cc; // Communicate our context to the combinators. // (Less wasteful than consing up a hundred closures on every call.) cx.state = state; cx.stream = stream; cx.marked = null, cx.cc = cc; while (true) { var combinator = cc.length ? cc.pop() : block; if (combinator(tcat)) { while(cc.length && cc[cc.length - 1].lex) cc.pop()(); return cx.marked || style; } } } return { startState: function() { return { tokenize: tokenBase, cc: [], lexical: {indented: -indentUnit, column: 0, type: "top", align: false}, keywords: valKeywords, indented: 0 }; }, token: function(stream, state) { if (stream.sol()) { if (!state.lexical.hasOwnProperty("align")) state.lexical.align = false; state.indented = stream.indentation(); } if (stream.eatSpace()) return null; tcat = content = null; var style = state.tokenize(stream, state); if (style == "comment") return style; if (!state.lexical.hasOwnProperty("align")) state.lexical.align = true; if (tcat == "prefix") return style; if (!content) content = stream.current(); return parse(state, stream, style); }, indent: function(state, textAfter) { if (state.tokenize != tokenBase) return 0; var firstChar = textAfter && textAfter.charAt(0), lexical = state.lexical, type = lexical.type, closing = firstChar == type; if (type == "stat") return lexical.indented + indentUnit; if (lexical.align) return lexical.column + (closing ? 0 : 1); return lexical.indented + (closing ? 0 : (lexical.info == "alt" ? altIndentUnit : indentUnit)); }, electricChars: "{}", blockCommentStart: "/*", blockCommentEnd: "*/", lineComment: "//", fold: "brace" }; }); CodeMirror.defineMIME("text/x-rustsrc", "rust"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/sass/index.html ================================================ CodeMirror: Sass mode

                  Sass mode

                  MIME types defined: text/x-sass.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/sass/sass.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("sass", function(config) { function tokenRegexp(words) { return new RegExp("^" + words.join("|")); } var keywords = ["true", "false", "null", "auto"]; var keywordsRegexp = new RegExp("^" + keywords.join("|")); var operators = ["\\(", "\\)", "=", ">", "<", "==", ">=", "<=", "\\+", "-", "\\!=", "/", "\\*", "%", "and", "or", "not", ";","\\{","\\}",":"]; var opRegexp = tokenRegexp(operators); var pseudoElementsRegexp = /^::?[a-zA-Z_][\w\-]*/; function urlTokens(stream, state) { var ch = stream.peek(); if (ch === ")") { stream.next(); state.tokenizer = tokenBase; return "operator"; } else if (ch === "(") { stream.next(); stream.eatSpace(); return "operator"; } else if (ch === "'" || ch === '"') { state.tokenizer = buildStringTokenizer(stream.next()); return "string"; } else { state.tokenizer = buildStringTokenizer(")", false); return "string"; } } function comment(indentation, multiLine) { return function(stream, state) { if (stream.sol() && stream.indentation() <= indentation) { state.tokenizer = tokenBase; return tokenBase(stream, state); } if (multiLine && stream.skipTo("*/")) { stream.next(); stream.next(); state.tokenizer = tokenBase; } else { stream.skipToEnd(); } return "comment"; }; } function buildStringTokenizer(quote, greedy) { if (greedy == null) { greedy = true; } function stringTokenizer(stream, state) { var nextChar = stream.next(); var peekChar = stream.peek(); var previousChar = stream.string.charAt(stream.pos-2); var endingString = ((nextChar !== "\\" && peekChar === quote) || (nextChar === quote && previousChar !== "\\")); if (endingString) { if (nextChar !== quote && greedy) { stream.next(); } state.tokenizer = tokenBase; return "string"; } else if (nextChar === "#" && peekChar === "{") { state.tokenizer = buildInterpolationTokenizer(stringTokenizer); stream.next(); return "operator"; } else { return "string"; } } return stringTokenizer; } function buildInterpolationTokenizer(currentTokenizer) { return function(stream, state) { if (stream.peek() === "}") { stream.next(); state.tokenizer = currentTokenizer; return "operator"; } else { return tokenBase(stream, state); } }; } function indent(state) { if (state.indentCount == 0) { state.indentCount++; var lastScopeOffset = state.scopes[0].offset; var currentOffset = lastScopeOffset + config.indentUnit; state.scopes.unshift({ offset:currentOffset }); } } function dedent(state) { if (state.scopes.length == 1) return; state.scopes.shift(); } function tokenBase(stream, state) { var ch = stream.peek(); // Comment if (stream.match("/*")) { state.tokenizer = comment(stream.indentation(), true); return state.tokenizer(stream, state); } if (stream.match("//")) { state.tokenizer = comment(stream.indentation(), false); return state.tokenizer(stream, state); } // Interpolation if (stream.match("#{")) { state.tokenizer = buildInterpolationTokenizer(tokenBase); return "operator"; } // Strings if (ch === '"' || ch === "'") { stream.next(); state.tokenizer = buildStringTokenizer(ch); return "string"; } if(!state.cursorHalf){// state.cursorHalf === 0 // first half i.e. before : for key-value pairs // including selectors if (ch === ".") { stream.next(); if (stream.match(/^[\w-]+/)) { indent(state); return "atom"; } else if (stream.peek() === "#") { indent(state); return "atom"; } } if (ch === "#") { stream.next(); // ID selectors if (stream.match(/^[\w-]+/)) { indent(state); return "atom"; } if (stream.peek() === "#") { indent(state); return "atom"; } } // Variables if (ch === "$") { stream.next(); stream.eatWhile(/[\w-]/); return "variable-2"; } // Numbers if (stream.match(/^-?[0-9\.]+/)) return "number"; // Units if (stream.match(/^(px|em|in)\b/)) return "unit"; if (stream.match(keywordsRegexp)) return "keyword"; if (stream.match(/^url/) && stream.peek() === "(") { state.tokenizer = urlTokens; return "atom"; } if (ch === "=") { // Match shortcut mixin definition if (stream.match(/^=[\w-]+/)) { indent(state); return "meta"; } } if (ch === "+") { // Match shortcut mixin definition if (stream.match(/^\+[\w-]+/)){ return "variable-3"; } } if(ch === "@"){ if(stream.match(/@extend/)){ if(!stream.match(/\s*[\w]/)) dedent(state); } } // Indent Directives if (stream.match(/^@(else if|if|media|else|for|each|while|mixin|function)/)) { indent(state); return "meta"; } // Other Directives if (ch === "@") { stream.next(); stream.eatWhile(/[\w-]/); return "meta"; } if (stream.eatWhile(/[\w-]/)){ if(stream.match(/ *: *[\w-\+\$#!\("']/,false)){ return "propery"; } else if(stream.match(/ *:/,false)){ indent(state); state.cursorHalf = 1; return "atom"; } else if(stream.match(/ *,/,false)){ return "atom"; } else{ indent(state); return "atom"; } } if(ch === ":"){ if (stream.match(pseudoElementsRegexp)){ // could be a pseudo-element return "keyword"; } stream.next(); state.cursorHalf=1; return "operator"; } } // cursorHalf===0 ends here else{ if (ch === "#") { stream.next(); // Hex numbers if (stream.match(/[0-9a-fA-F]{6}|[0-9a-fA-F]{3}/)){ if(!stream.peek()){ state.cursorHalf = 0; } return "number"; } } // Numbers if (stream.match(/^-?[0-9\.]+/)){ if(!stream.peek()){ state.cursorHalf = 0; } return "number"; } // Units if (stream.match(/^(px|em|in)\b/)){ if(!stream.peek()){ state.cursorHalf = 0; } return "unit"; } if (stream.match(keywordsRegexp)){ if(!stream.peek()){ state.cursorHalf = 0; } return "keyword"; } if (stream.match(/^url/) && stream.peek() === "(") { state.tokenizer = urlTokens; if(!stream.peek()){ state.cursorHalf = 0; } return "atom"; } // Variables if (ch === "$") { stream.next(); stream.eatWhile(/[\w-]/); if(!stream.peek()){ state.cursorHalf = 0; } return "variable-3"; } // bang character for !important, !default, etc. if (ch === "!") { stream.next(); if(!stream.peek()){ state.cursorHalf = 0; } return stream.match(/^[\w]+/) ? "keyword": "operator"; } if (stream.match(opRegexp)){ if(!stream.peek()){ state.cursorHalf = 0; } return "operator"; } // attributes if (stream.eatWhile(/[\w-]/)) { if(!stream.peek()){ state.cursorHalf = 0; } return "attribute"; } //stream.eatSpace(); if(!stream.peek()){ state.cursorHalf = 0; return null; } } // else ends here if (stream.match(opRegexp)) return "operator"; // If we haven't returned by now, we move 1 character // and return an error stream.next(); return null; } function tokenLexer(stream, state) { if (stream.sol()) state.indentCount = 0; var style = state.tokenizer(stream, state); var current = stream.current(); if (current === "@return" || current === "}"){ dedent(state); } if (style !== null) { var startOfToken = stream.pos - current.length; var withCurrentIndent = startOfToken + (config.indentUnit * state.indentCount); var newScopes = []; for (var i = 0; i < state.scopes.length; i++) { var scope = state.scopes[i]; if (scope.offset <= withCurrentIndent) newScopes.push(scope); } state.scopes = newScopes; } return style; } return { startState: function() { return { tokenizer: tokenBase, scopes: [{offset: 0, type: "sass"}], indentCount: 0, cursorHalf: 0, // cursor half tells us if cursor lies after (1) // or before (0) colon (well... more or less) definedVars: [], definedMixins: [] }; }, token: function(stream, state) { var style = tokenLexer(stream, state); state.lastToken = { style: style, content: stream.current() }; return style; }, indent: function(state) { return state.scopes[0].offset; } }; }); CodeMirror.defineMIME("text/x-sass", "sass"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/scheme/index.html ================================================ CodeMirror: Scheme mode

                  Scheme mode

                  MIME types defined: text/x-scheme.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/scheme/scheme.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE /** * Author: Koh Zi Han, based on implementation by Koh Zi Chun */ (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("scheme", function () { var BUILTIN = "builtin", COMMENT = "comment", STRING = "string", ATOM = "atom", NUMBER = "number", BRACKET = "bracket"; var INDENT_WORD_SKIP = 2; function makeKeywords(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } var keywords = makeKeywords("λ case-lambda call/cc class define-class exit-handler field import inherit init-field interface let*-values let-values let/ec mixin opt-lambda override protect provide public rename require require-for-syntax syntax syntax-case syntax-error unit/sig unless when with-syntax and begin call-with-current-continuation call-with-input-file call-with-output-file case cond define define-syntax delay do dynamic-wind else for-each if lambda let let* let-syntax letrec letrec-syntax map or syntax-rules abs acos angle append apply asin assoc assq assv atan boolean? caar cadr call-with-input-file call-with-output-file call-with-values car cdddar cddddr cdr ceiling char->integer char-alphabetic? char-ci<=? char-ci=? char-ci>? char-downcase char-lower-case? char-numeric? char-ready? char-upcase char-upper-case? char-whitespace? char<=? char=? char>? char? close-input-port close-output-port complex? cons cos current-input-port current-output-port denominator display eof-object? eq? equal? eqv? eval even? exact->inexact exact? exp expt #f floor force gcd imag-part inexact->exact inexact? input-port? integer->char integer? interaction-environment lcm length list list->string list->vector list-ref list-tail list? load log magnitude make-polar make-rectangular make-string make-vector max member memq memv min modulo negative? newline not null-environment null? number->string number? numerator odd? open-input-file open-output-file output-port? pair? peek-char port? positive? procedure? quasiquote quote quotient rational? rationalize read read-char real-part real? remainder reverse round scheme-report-environment set! set-car! set-cdr! sin sqrt string string->list string->number string->symbol string-append string-ci<=? string-ci=? string-ci>? string-copy string-fill! string-length string-ref string-set! string<=? string=? string>? string? substring symbol->string symbol? #t tan transcript-off transcript-on truncate values vector vector->list vector-fill! vector-length vector-ref vector-set! with-input-from-file with-output-to-file write write-char zero?"); var indentKeys = makeKeywords("define let letrec let* lambda"); function stateStack(indent, type, prev) { // represents a state stack object this.indent = indent; this.type = type; this.prev = prev; } function pushStack(state, indent, type) { state.indentStack = new stateStack(indent, type, state.indentStack); } function popStack(state) { state.indentStack = state.indentStack.prev; } var binaryMatcher = new RegExp(/^(?:[-+]i|[-+][01]+#*(?:\/[01]+#*)?i|[-+]?[01]+#*(?:\/[01]+#*)?@[-+]?[01]+#*(?:\/[01]+#*)?|[-+]?[01]+#*(?:\/[01]+#*)?[-+](?:[01]+#*(?:\/[01]+#*)?)?i|[-+]?[01]+#*(?:\/[01]+#*)?)(?=[()\s;"]|$)/i); var octalMatcher = new RegExp(/^(?:[-+]i|[-+][0-7]+#*(?:\/[0-7]+#*)?i|[-+]?[0-7]+#*(?:\/[0-7]+#*)?@[-+]?[0-7]+#*(?:\/[0-7]+#*)?|[-+]?[0-7]+#*(?:\/[0-7]+#*)?[-+](?:[0-7]+#*(?:\/[0-7]+#*)?)?i|[-+]?[0-7]+#*(?:\/[0-7]+#*)?)(?=[()\s;"]|$)/i); var hexMatcher = new RegExp(/^(?:[-+]i|[-+][\da-f]+#*(?:\/[\da-f]+#*)?i|[-+]?[\da-f]+#*(?:\/[\da-f]+#*)?@[-+]?[\da-f]+#*(?:\/[\da-f]+#*)?|[-+]?[\da-f]+#*(?:\/[\da-f]+#*)?[-+](?:[\da-f]+#*(?:\/[\da-f]+#*)?)?i|[-+]?[\da-f]+#*(?:\/[\da-f]+#*)?)(?=[()\s;"]|$)/i); var decimalMatcher = new RegExp(/^(?:[-+]i|[-+](?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*)i|[-+]?(?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*)@[-+]?(?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*)|[-+]?(?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*)[-+](?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*)?i|(?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*))(?=[()\s;"]|$)/i); function isBinaryNumber (stream) { return stream.match(binaryMatcher); } function isOctalNumber (stream) { return stream.match(octalMatcher); } function isDecimalNumber (stream, backup) { if (backup === true) { stream.backUp(1); } return stream.match(decimalMatcher); } function isHexNumber (stream) { return stream.match(hexMatcher); } return { startState: function () { return { indentStack: null, indentation: 0, mode: false, sExprComment: false }; }, token: function (stream, state) { if (state.indentStack == null && stream.sol()) { // update indentation, but only if indentStack is empty state.indentation = stream.indentation(); } // skip spaces if (stream.eatSpace()) { return null; } var returnType = null; switch(state.mode){ case "string": // multi-line string parsing mode var next, escaped = false; while ((next = stream.next()) != null) { if (next == "\"" && !escaped) { state.mode = false; break; } escaped = !escaped && next == "\\"; } returnType = STRING; // continue on in scheme-string mode break; case "comment": // comment parsing mode var next, maybeEnd = false; while ((next = stream.next()) != null) { if (next == "#" && maybeEnd) { state.mode = false; break; } maybeEnd = (next == "|"); } returnType = COMMENT; break; case "s-expr-comment": // s-expr commenting mode state.mode = false; if(stream.peek() == "(" || stream.peek() == "["){ // actually start scheme s-expr commenting mode state.sExprComment = 0; }else{ // if not we just comment the entire of the next token stream.eatWhile(/[^/s]/); // eat non spaces returnType = COMMENT; break; } default: // default parsing mode var ch = stream.next(); if (ch == "\"") { state.mode = "string"; returnType = STRING; } else if (ch == "'") { returnType = ATOM; } else if (ch == '#') { if (stream.eat("|")) { // Multi-line comment state.mode = "comment"; // toggle to comment mode returnType = COMMENT; } else if (stream.eat(/[tf]/i)) { // #t/#f (atom) returnType = ATOM; } else if (stream.eat(';')) { // S-Expr comment state.mode = "s-expr-comment"; returnType = COMMENT; } else { var numTest = null, hasExactness = false, hasRadix = true; if (stream.eat(/[ei]/i)) { hasExactness = true; } else { stream.backUp(1); // must be radix specifier } if (stream.match(/^#b/i)) { numTest = isBinaryNumber; } else if (stream.match(/^#o/i)) { numTest = isOctalNumber; } else if (stream.match(/^#x/i)) { numTest = isHexNumber; } else if (stream.match(/^#d/i)) { numTest = isDecimalNumber; } else if (stream.match(/^[-+0-9.]/, false)) { hasRadix = false; numTest = isDecimalNumber; // re-consume the intial # if all matches failed } else if (!hasExactness) { stream.eat('#'); } if (numTest != null) { if (hasRadix && !hasExactness) { // consume optional exactness after radix stream.match(/^#[ei]/i); } if (numTest(stream)) returnType = NUMBER; } } } else if (/^[-+0-9.]/.test(ch) && isDecimalNumber(stream, true)) { // match non-prefixed number, must be decimal returnType = NUMBER; } else if (ch == ";") { // comment stream.skipToEnd(); // rest of the line is a comment returnType = COMMENT; } else if (ch == "(" || ch == "[") { var keyWord = ''; var indentTemp = stream.column(), letter; /** Either (indent-word .. (non-indent-word .. (;something else, bracket, etc. */ while ((letter = stream.eat(/[^\s\(\[\;\)\]]/)) != null) { keyWord += letter; } if (keyWord.length > 0 && indentKeys.propertyIsEnumerable(keyWord)) { // indent-word pushStack(state, indentTemp + INDENT_WORD_SKIP, ch); } else { // non-indent word // we continue eating the spaces stream.eatSpace(); if (stream.eol() || stream.peek() == ";") { // nothing significant after // we restart indentation 1 space after pushStack(state, indentTemp + 1, ch); } else { pushStack(state, indentTemp + stream.current().length, ch); // else we match } } stream.backUp(stream.current().length - 1); // undo all the eating if(typeof state.sExprComment == "number") state.sExprComment++; returnType = BRACKET; } else if (ch == ")" || ch == "]") { returnType = BRACKET; if (state.indentStack != null && state.indentStack.type == (ch == ")" ? "(" : "[")) { popStack(state); if(typeof state.sExprComment == "number"){ if(--state.sExprComment == 0){ returnType = COMMENT; // final closing bracket state.sExprComment = false; // turn off s-expr commenting mode } } } } else { stream.eatWhile(/[\w\$_\-!$%&*+\.\/:<=>?@\^~]/); if (keywords && keywords.propertyIsEnumerable(stream.current())) { returnType = BUILTIN; } else returnType = "variable"; } } return (typeof state.sExprComment == "number") ? COMMENT : returnType; }, indent: function (state) { if (state.indentStack == null) return state.indentation; return state.indentStack.indent; }, lineComment: ";;" }; }); CodeMirror.defineMIME("text/x-scheme", "scheme"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/shell/index.html ================================================ CodeMirror: Shell mode

                  Shell mode

                  MIME types defined: text/x-sh.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/shell/shell.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode('shell', function() { var words = {}; function define(style, string) { var split = string.split(' '); for(var i = 0; i < split.length; i++) { words[split[i]] = style; } }; // Atoms define('atom', 'true false'); // Keywords define('keyword', 'if then do else elif while until for in esac fi fin ' + 'fil done exit set unset export function'); // Commands define('builtin', 'ab awk bash beep cat cc cd chown chmod chroot clear cp ' + 'curl cut diff echo find gawk gcc get git grep kill killall ln ls make ' + 'mkdir openssl mv nc node npm ping ps restart rm rmdir sed service sh ' + 'shopt shred source sort sleep ssh start stop su sudo tee telnet top ' + 'touch vi vim wall wc wget who write yes zsh'); function tokenBase(stream, state) { if (stream.eatSpace()) return null; var sol = stream.sol(); var ch = stream.next(); if (ch === '\\') { stream.next(); return null; } if (ch === '\'' || ch === '"' || ch === '`') { state.tokens.unshift(tokenString(ch)); return tokenize(stream, state); } if (ch === '#') { if (sol && stream.eat('!')) { stream.skipToEnd(); return 'meta'; // 'comment'? } stream.skipToEnd(); return 'comment'; } if (ch === '$') { state.tokens.unshift(tokenDollar); return tokenize(stream, state); } if (ch === '+' || ch === '=') { return 'operator'; } if (ch === '-') { stream.eat('-'); stream.eatWhile(/\w/); return 'attribute'; } if (/\d/.test(ch)) { stream.eatWhile(/\d/); if(stream.eol() || !/\w/.test(stream.peek())) { return 'number'; } } stream.eatWhile(/[\w-]/); var cur = stream.current(); if (stream.peek() === '=' && /\w+/.test(cur)) return 'def'; return words.hasOwnProperty(cur) ? words[cur] : null; } function tokenString(quote) { return function(stream, state) { var next, end = false, escaped = false; while ((next = stream.next()) != null) { if (next === quote && !escaped) { end = true; break; } if (next === '$' && !escaped && quote !== '\'') { escaped = true; stream.backUp(1); state.tokens.unshift(tokenDollar); break; } escaped = !escaped && next === '\\'; } if (end || !escaped) { state.tokens.shift(); } return (quote === '`' || quote === ')' ? 'quote' : 'string'); }; }; var tokenDollar = function(stream, state) { if (state.tokens.length > 1) stream.eat('$'); var ch = stream.next(), hungry = /\w/; if (ch === '{') hungry = /[^}]/; if (ch === '(') { state.tokens[0] = tokenString(')'); return tokenize(stream, state); } if (!/\d/.test(ch)) { stream.eatWhile(hungry); stream.eat('}'); } state.tokens.shift(); return 'def'; }; function tokenize(stream, state) { return (state.tokens[0] || tokenBase) (stream, state); }; return { startState: function() {return {tokens:[]};}, token: function(stream, state) { return tokenize(stream, state); }, lineComment: '#', fold: "brace" }; }); CodeMirror.defineMIME('text/x-sh', 'shell'); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/shell/test.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function() { var mode = CodeMirror.getMode({}, "shell"); function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } MT("var", "text [def $var] text"); MT("varBraces", "text[def ${var}]text"); MT("varVar", "text [def $a$b] text"); MT("varBracesVarBraces", "text[def ${a}${b}]text"); MT("singleQuotedVar", "[string 'text $var text']"); MT("singleQuotedVarBraces", "[string 'text ${var} text']"); MT("doubleQuotedVar", '[string "text ][def $var][string text"]'); MT("doubleQuotedVarBraces", '[string "text][def ${var}][string text"]'); MT("doubleQuotedVarPunct", '[string "text ][def $@][string text"]'); MT("doubleQuotedVarVar", '[string "][def $a$b][string "]'); MT("doubleQuotedVarBracesVarBraces", '[string "][def ${a}${b}][string "]'); MT("notAString", "text\\'text"); MT("escapes", "outside\\'\\\"\\`\\\\[string \"inside\\`\\'\\\"\\\\`\\$notAVar\"]outside\\$\\(notASubShell\\)"); MT("subshell", "[builtin echo] [quote $(whoami)] s log, stardate [quote `date`]."); MT("doubleQuotedSubshell", "[builtin echo] [string \"][quote $(whoami)][string 's log, stardate `date`.\"]"); MT("hashbang", "[meta #!/bin/bash]"); MT("comment", "text [comment # Blurb]"); MT("numbers", "[number 0] [number 1] [number 2]"); MT("keywords", "[keyword while] [atom true]; [keyword do]", " [builtin sleep] [number 3]", "[keyword done]"); MT("options", "[builtin ls] [attribute -l] [attribute --human-readable]"); MT("operator", "[def var][operator =]value"); })(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/sieve/index.html ================================================ CodeMirror: Sieve (RFC5228) mode

                  Sieve (RFC5228) mode

                  MIME types defined: application/sieve.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/sieve/sieve.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("sieve", function(config) { function words(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } var keywords = words("if elsif else stop require"); var atoms = words("true false not"); var indentUnit = config.indentUnit; function tokenBase(stream, state) { var ch = stream.next(); if (ch == "/" && stream.eat("*")) { state.tokenize = tokenCComment; return tokenCComment(stream, state); } if (ch === '#') { stream.skipToEnd(); return "comment"; } if (ch == "\"") { state.tokenize = tokenString(ch); return state.tokenize(stream, state); } if (ch == "(") { state._indent.push("("); // add virtual angel wings so that editor behaves... // ...more sane incase of broken brackets state._indent.push("{"); return null; } if (ch === "{") { state._indent.push("{"); return null; } if (ch == ")") { state._indent.pop(); state._indent.pop(); } if (ch === "}") { state._indent.pop(); return null; } if (ch == ",") return null; if (ch == ";") return null; if (/[{}\(\),;]/.test(ch)) return null; // 1*DIGIT "K" / "M" / "G" if (/\d/.test(ch)) { stream.eatWhile(/[\d]/); stream.eat(/[KkMmGg]/); return "number"; } // ":" (ALPHA / "_") *(ALPHA / DIGIT / "_") if (ch == ":") { stream.eatWhile(/[a-zA-Z_]/); stream.eatWhile(/[a-zA-Z0-9_]/); return "operator"; } stream.eatWhile(/\w/); var cur = stream.current(); // "text:" *(SP / HTAB) (hash-comment / CRLF) // *(multiline-literal / multiline-dotstart) // "." CRLF if ((cur == "text") && stream.eat(":")) { state.tokenize = tokenMultiLineString; return "string"; } if (keywords.propertyIsEnumerable(cur)) return "keyword"; if (atoms.propertyIsEnumerable(cur)) return "atom"; return null; } function tokenMultiLineString(stream, state) { state._multiLineString = true; // the first line is special it may contain a comment if (!stream.sol()) { stream.eatSpace(); if (stream.peek() == "#") { stream.skipToEnd(); return "comment"; } stream.skipToEnd(); return "string"; } if ((stream.next() == ".") && (stream.eol())) { state._multiLineString = false; state.tokenize = tokenBase; } return "string"; } function tokenCComment(stream, state) { var maybeEnd = false, ch; while ((ch = stream.next()) != null) { if (maybeEnd && ch == "/") { state.tokenize = tokenBase; break; } maybeEnd = (ch == "*"); } return "comment"; } function tokenString(quote) { return function(stream, state) { var escaped = false, ch; while ((ch = stream.next()) != null) { if (ch == quote && !escaped) break; escaped = !escaped && ch == "\\"; } if (!escaped) state.tokenize = tokenBase; return "string"; }; } return { startState: function(base) { return {tokenize: tokenBase, baseIndent: base || 0, _indent: []}; }, token: function(stream, state) { if (stream.eatSpace()) return null; return (state.tokenize || tokenBase)(stream, state);; }, indent: function(state, _textAfter) { var length = state._indent.length; if (_textAfter && (_textAfter[0] == "}")) length--; if (length <0) length = 0; return length * indentUnit; }, electricChars: "}" }; }); CodeMirror.defineMIME("application/sieve", "sieve"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/slim/index.html ================================================ CodeMirror: SLIM mode

                  SLIM mode

                  MIME types defined: application/x-slim.

                  Parsing/Highlighting Tests: normal, verbose.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/slim/slim.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE // Slim Highlighting for CodeMirror copyright (c) HicknHack Software Gmbh (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../htmlmixed/htmlmixed"), require("../ruby/ruby")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../htmlmixed/htmlmixed", "../ruby/ruby"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("slim", function(config) { var htmlMode = CodeMirror.getMode(config, {name: "htmlmixed"}); var rubyMode = CodeMirror.getMode(config, "ruby"); var modes = { html: htmlMode, ruby: rubyMode }; var embedded = { ruby: "ruby", javascript: "javascript", css: "text/css", sass: "text/x-sass", scss: "text/x-scss", less: "text/x-less", styl: "text/x-styl", // no highlighting so far coffee: "coffeescript", asciidoc: "text/x-asciidoc", markdown: "text/x-markdown", textile: "text/x-textile", // no highlighting so far creole: "text/x-creole", // no highlighting so far wiki: "text/x-wiki", // no highlighting so far mediawiki: "text/x-mediawiki", // no highlighting so far rdoc: "text/x-rdoc", // no highlighting so far builder: "text/x-builder", // no highlighting so far nokogiri: "text/x-nokogiri", // no highlighting so far erb: "application/x-erb" }; var embeddedRegexp = function(map){ var arr = []; for(var key in map) arr.push(key); return new RegExp("^("+arr.join('|')+"):"); }(embedded); var styleMap = { "commentLine": "comment", "slimSwitch": "operator special", "slimTag": "tag", "slimId": "attribute def", "slimClass": "attribute qualifier", "slimAttribute": "attribute", "slimSubmode": "keyword special", "closeAttributeTag": null, "slimDoctype": null, "lineContinuation": null }; var closing = { "{": "}", "[": "]", "(": ")" }; var nameStartChar = "_a-zA-Z\xC0-\xD6\xD8-\xF6\xF8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD"; var nameChar = nameStartChar + "\\-0-9\xB7\u0300-\u036F\u203F-\u2040"; var nameRegexp = new RegExp("^[:"+nameStartChar+"](?::["+nameChar+"]|["+nameChar+"]*)"); var attributeNameRegexp = new RegExp("^[:"+nameStartChar+"][:\\."+nameChar+"]*(?=\\s*=)"); var wrappedAttributeNameRegexp = new RegExp("^[:"+nameStartChar+"][:\\."+nameChar+"]*"); var classNameRegexp = /^\.-?[_a-zA-Z]+[\w\-]*/; var classIdRegexp = /^#[_a-zA-Z]+[\w\-]*/; function backup(pos, tokenize, style) { var restore = function(stream, state) { state.tokenize = tokenize; if (stream.pos < pos) { stream.pos = pos; return style; } return state.tokenize(stream, state); }; return function(stream, state) { state.tokenize = restore; return tokenize(stream, state); }; } function maybeBackup(stream, state, pat, offset, style) { var cur = stream.current(); var idx = cur.search(pat); if (idx > -1) { state.tokenize = backup(stream.pos, state.tokenize, style); stream.backUp(cur.length - idx - offset); } return style; } function continueLine(state, column) { state.stack = { parent: state.stack, style: "continuation", indented: column, tokenize: state.line }; state.line = state.tokenize; } function finishContinue(state) { if (state.line == state.tokenize) { state.line = state.stack.tokenize; state.stack = state.stack.parent; } } function lineContinuable(column, tokenize) { return function(stream, state) { finishContinue(state); if (stream.match(/^\\$/)) { continueLine(state, column); return "lineContinuation"; } var style = tokenize(stream, state); if (stream.eol() && stream.current().match(/(?:^|[^\\])(?:\\\\)*\\$/)) { stream.backUp(1); } return style; }; } function commaContinuable(column, tokenize) { return function(stream, state) { finishContinue(state); var style = tokenize(stream, state); if (stream.eol() && stream.current().match(/,$/)) { continueLine(state, column); } return style; }; } function rubyInQuote(endQuote, tokenize) { // TODO: add multi line support return function(stream, state) { var ch = stream.peek(); if (ch == endQuote && state.rubyState.tokenize.length == 1) { // step out of ruby context as it seems to complete processing all the braces stream.next(); state.tokenize = tokenize; return "closeAttributeTag"; } else { return ruby(stream, state); } }; } function startRubySplat(tokenize) { var rubyState; var runSplat = function(stream, state) { if (state.rubyState.tokenize.length == 1 && !state.rubyState.context.prev) { stream.backUp(1); if (stream.eatSpace()) { state.rubyState = rubyState; state.tokenize = tokenize; return tokenize(stream, state); } stream.next(); } return ruby(stream, state); }; return function(stream, state) { rubyState = state.rubyState; state.rubyState = rubyMode.startState(); state.tokenize = runSplat; return ruby(stream, state); }; } function ruby(stream, state) { return rubyMode.token(stream, state.rubyState); } function htmlLine(stream, state) { if (stream.match(/^\\$/)) { return "lineContinuation"; } return html(stream, state); } function html(stream, state) { if (stream.match(/^#\{/)) { state.tokenize = rubyInQuote("}", state.tokenize); return null; } return maybeBackup(stream, state, /[^\\]#\{/, 1, htmlMode.token(stream, state.htmlState)); } function startHtmlLine(lastTokenize) { return function(stream, state) { var style = htmlLine(stream, state); if (stream.eol()) state.tokenize = lastTokenize; return style; }; } function startHtmlMode(stream, state, offset) { state.stack = { parent: state.stack, style: "html", indented: stream.column() + offset, // pipe + space tokenize: state.line }; state.line = state.tokenize = html; return null; } function comment(stream, state) { stream.skipToEnd(); return state.stack.style; } function commentMode(stream, state) { state.stack = { parent: state.stack, style: "comment", indented: state.indented + 1, tokenize: state.line }; state.line = comment; return comment(stream, state); } function attributeWrapper(stream, state) { if (stream.eat(state.stack.endQuote)) { state.line = state.stack.line; state.tokenize = state.stack.tokenize; state.stack = state.stack.parent; return null; } if (stream.match(wrappedAttributeNameRegexp)) { state.tokenize = attributeWrapperAssign; return "slimAttribute"; } stream.next(); return null; } function attributeWrapperAssign(stream, state) { if (stream.match(/^==?/)) { state.tokenize = attributeWrapperValue; return null; } return attributeWrapper(stream, state); } function attributeWrapperValue(stream, state) { var ch = stream.peek(); if (ch == '"' || ch == "\'") { state.tokenize = readQuoted(ch, "string", true, false, attributeWrapper); stream.next(); return state.tokenize(stream, state); } if (ch == '[') { return startRubySplat(attributeWrapper)(stream, state); } if (stream.match(/^(true|false|nil)\b/)) { state.tokenize = attributeWrapper; return "keyword"; } return startRubySplat(attributeWrapper)(stream, state); } function startAttributeWrapperMode(state, endQuote, tokenize) { state.stack = { parent: state.stack, style: "wrapper", indented: state.indented + 1, tokenize: tokenize, line: state.line, endQuote: endQuote }; state.line = state.tokenize = attributeWrapper; return null; } function sub(stream, state) { if (stream.match(/^#\{/)) { state.tokenize = rubyInQuote("}", state.tokenize); return null; } var subStream = new CodeMirror.StringStream(stream.string.slice(state.stack.indented), stream.tabSize); subStream.pos = stream.pos - state.stack.indented; subStream.start = stream.start - state.stack.indented; subStream.lastColumnPos = stream.lastColumnPos - state.stack.indented; subStream.lastColumnValue = stream.lastColumnValue - state.stack.indented; var style = state.subMode.token(subStream, state.subState); stream.pos = subStream.pos + state.stack.indented; return style; } function firstSub(stream, state) { state.stack.indented = stream.column(); state.line = state.tokenize = sub; return state.tokenize(stream, state); } function createMode(mode) { var query = embedded[mode]; var spec = CodeMirror.mimeModes[query]; if (spec) { return CodeMirror.getMode(config, spec); } var factory = CodeMirror.modes[query]; if (factory) { return factory(config, {name: query}); } return CodeMirror.getMode(config, "null"); } function getMode(mode) { if (!modes.hasOwnProperty(mode)) { return modes[mode] = createMode(mode); } return modes[mode]; } function startSubMode(mode, state) { var subMode = getMode(mode); var subState = subMode.startState && subMode.startState(); state.subMode = subMode; state.subState = subState; state.stack = { parent: state.stack, style: "sub", indented: state.indented + 1, tokenize: state.line }; state.line = state.tokenize = firstSub; return "slimSubmode"; } function doctypeLine(stream, _state) { stream.skipToEnd(); return "slimDoctype"; } function startLine(stream, state) { var ch = stream.peek(); if (ch == '<') { return (state.tokenize = startHtmlLine(state.tokenize))(stream, state); } if (stream.match(/^[|']/)) { return startHtmlMode(stream, state, 1); } if (stream.match(/^\/(!|\[\w+])?/)) { return commentMode(stream, state); } if (stream.match(/^(-|==?[<>]?)/)) { state.tokenize = lineContinuable(stream.column(), commaContinuable(stream.column(), ruby)); return "slimSwitch"; } if (stream.match(/^doctype\b/)) { state.tokenize = doctypeLine; return "keyword"; } var m = stream.match(embeddedRegexp); if (m) { return startSubMode(m[1], state); } return slimTag(stream, state); } function slim(stream, state) { if (state.startOfLine) { return startLine(stream, state); } return slimTag(stream, state); } function slimTag(stream, state) { if (stream.eat('*')) { state.tokenize = startRubySplat(slimTagExtras); return null; } if (stream.match(nameRegexp)) { state.tokenize = slimTagExtras; return "slimTag"; } return slimClass(stream, state); } function slimTagExtras(stream, state) { if (stream.match(/^(<>?|> state.indented && state.last != "slimSubmode") { state.line = state.tokenize = state.stack.tokenize; state.stack = state.stack.parent; state.subMode = null; state.subState = null; } } if (stream.eatSpace()) return null; var style = state.tokenize(stream, state); state.startOfLine = false; if (style) state.last = style; return styleMap.hasOwnProperty(style) ? styleMap[style] : style; }, blankLine: function(state) { if (state.subMode && state.subMode.blankLine) { return state.subMode.blankLine(state.subState); } }, innerMode: function(state) { if (state.subMode) return {state: state.subState, mode: state.subMode}; return {state: state, mode: mode}; } //indent: function(state) { // return state.indented; //} }; return mode; }, "htmlmixed", "ruby"); CodeMirror.defineMIME("text/x-slim", "slim"); CodeMirror.defineMIME("application/x-slim", "slim"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/slim/test.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE // Slim Highlighting for CodeMirror copyright (c) HicknHack Software Gmbh (function() { var mode = CodeMirror.getMode({tabSize: 4, indentUnit: 2}, "slim"); function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } // Requires at least one media query MT("elementName", "[tag h1] Hey There"); MT("oneElementPerLine", "[tag h1] Hey There .h2"); MT("idShortcut", "[attribute&def #test] Hey There"); MT("tagWithIdShortcuts", "[tag h1][attribute&def #test] Hey There"); MT("classShortcut", "[attribute&qualifier .hello] Hey There"); MT("tagWithIdAndClassShortcuts", "[tag h1][attribute&def #test][attribute&qualifier .hello] Hey There"); MT("docType", "[keyword doctype] xml"); MT("comment", "[comment / Hello WORLD]"); MT("notComment", "[tag h1] This is not a / comment "); MT("attributes", "[tag a]([attribute title]=[string \"test\"]) [attribute href]=[string \"link\"]}"); MT("multiLineAttributes", "[tag a]([attribute title]=[string \"test\"]", " ) [attribute href]=[string \"link\"]}"); MT("htmlCode", "[tag&bracket <][tag h1][tag&bracket >]Title[tag&bracket ]"); MT("rubyBlock", "[operator&special =][variable-2 @item]"); MT("selectorRubyBlock", "[tag a][attribute&qualifier .test][operator&special =] [variable-2 @item]"); MT("nestedRubyBlock", "[tag a]", " [operator&special =][variable puts] [string \"test\"]"); MT("multilinePlaintext", "[tag p]", " | Hello,", " World"); MT("multilineRuby", "[tag p]", " [comment /# this is a comment]", " [comment and this is a comment too]", " | Date/Time", " [operator&special -] [variable now] [operator =] [tag DateTime][operator .][property now]", " [tag strong][operator&special =] [variable now]", " [operator&special -] [keyword if] [variable now] [operator >] [tag DateTime][operator .][property parse]([string \"December 31, 2006\"])", " [operator&special =][string \"Happy\"]", " [operator&special =][string \"Belated\"]", " [operator&special =][string \"Birthday\"]"); MT("multilineComment", "[comment /]", " [comment Multiline]", " [comment Comment]"); MT("hamlAfterRubyTag", "[attribute&qualifier .block]", " [tag strong][operator&special =] [variable now]", " [attribute&qualifier .test]", " [operator&special =][variable now]", " [attribute&qualifier .right]"); MT("stretchedRuby", "[operator&special =] [variable puts] [string \"Hello\"],", " [string \"World\"]"); MT("interpolationInHashAttribute", "[tag div]{[attribute id] = [string \"]#{[variable test]}[string _]#{[variable ting]}[string \"]} test"); MT("interpolationInHTMLAttribute", "[tag div]([attribute title]=[string \"]#{[variable test]}[string _]#{[variable ting]()}[string \"]) Test"); })(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/smalltalk/index.html ================================================ CodeMirror: Smalltalk mode

                  Smalltalk mode

                  Simple Smalltalk mode.

                  MIME types defined: text/x-stsrc.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/smalltalk/smalltalk.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode('smalltalk', function(config) { var specialChars = /[+\-\/\\*~<>=@%|&?!.,:;^]/; var keywords = /true|false|nil|self|super|thisContext/; var Context = function(tokenizer, parent) { this.next = tokenizer; this.parent = parent; }; var Token = function(name, context, eos) { this.name = name; this.context = context; this.eos = eos; }; var State = function() { this.context = new Context(next, null); this.expectVariable = true; this.indentation = 0; this.userIndentationDelta = 0; }; State.prototype.userIndent = function(indentation) { this.userIndentationDelta = indentation > 0 ? (indentation / config.indentUnit - this.indentation) : 0; }; var next = function(stream, context, state) { var token = new Token(null, context, false); var aChar = stream.next(); if (aChar === '"') { token = nextComment(stream, new Context(nextComment, context)); } else if (aChar === '\'') { token = nextString(stream, new Context(nextString, context)); } else if (aChar === '#') { if (stream.peek() === '\'') { stream.next(); token = nextSymbol(stream, new Context(nextSymbol, context)); } else { if (stream.eatWhile(/[^\s.{}\[\]()]/)) token.name = 'string-2'; else token.name = 'meta'; } } else if (aChar === '$') { if (stream.next() === '<') { stream.eatWhile(/[^\s>]/); stream.next(); } token.name = 'string-2'; } else if (aChar === '|' && state.expectVariable) { token.context = new Context(nextTemporaries, context); } else if (/[\[\]{}()]/.test(aChar)) { token.name = 'bracket'; token.eos = /[\[{(]/.test(aChar); if (aChar === '[') { state.indentation++; } else if (aChar === ']') { state.indentation = Math.max(0, state.indentation - 1); } } else if (specialChars.test(aChar)) { stream.eatWhile(specialChars); token.name = 'operator'; token.eos = aChar !== ';'; // ; cascaded message expression } else if (/\d/.test(aChar)) { stream.eatWhile(/[\w\d]/); token.name = 'number'; } else if (/[\w_]/.test(aChar)) { stream.eatWhile(/[\w\d_]/); token.name = state.expectVariable ? (keywords.test(stream.current()) ? 'keyword' : 'variable') : null; } else { token.eos = state.expectVariable; } return token; }; var nextComment = function(stream, context) { stream.eatWhile(/[^"]/); return new Token('comment', stream.eat('"') ? context.parent : context, true); }; var nextString = function(stream, context) { stream.eatWhile(/[^']/); return new Token('string', stream.eat('\'') ? context.parent : context, false); }; var nextSymbol = function(stream, context) { stream.eatWhile(/[^']/); return new Token('string-2', stream.eat('\'') ? context.parent : context, false); }; var nextTemporaries = function(stream, context) { var token = new Token(null, context, false); var aChar = stream.next(); if (aChar === '|') { token.context = context.parent; token.eos = true; } else { stream.eatWhile(/[^|]/); token.name = 'variable'; } return token; }; return { startState: function() { return new State; }, token: function(stream, state) { state.userIndent(stream.indentation()); if (stream.eatSpace()) { return null; } var token = state.context.next(stream, state.context, state); state.context = token.context; state.expectVariable = token.eos; return token.name; }, blankLine: function(state) { state.userIndent(0); }, indent: function(state, textAfter) { var i = state.context.next === next && textAfter && textAfter.charAt(0) === ']' ? -1 : state.userIndentationDelta; return (state.indentation + i) * config.indentUnit; }, electricChars: ']' }; }); CodeMirror.defineMIME('text/x-stsrc', {name: 'smalltalk'}); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/smarty/index.html ================================================ CodeMirror: Smarty mode

                  Smarty mode


                  Smarty 2, custom delimiters


                  Smarty 3

                  A plain text/Smarty version 2 or 3 mode, which allows for custom delimiter tags.

                  MIME types defined: text/x-smarty

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/smarty/smarty.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE /** * Smarty 2 and 3 mode. */ (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("smarty", function(config) { "use strict"; // our default settings; check to see if they're overridden var settings = { rightDelimiter: '}', leftDelimiter: '{', smartyVersion: 2 // for backward compatibility }; if (config.hasOwnProperty("leftDelimiter")) { settings.leftDelimiter = config.leftDelimiter; } if (config.hasOwnProperty("rightDelimiter")) { settings.rightDelimiter = config.rightDelimiter; } if (config.hasOwnProperty("smartyVersion") && config.smartyVersion === 3) { settings.smartyVersion = 3; } var keyFunctions = ["debug", "extends", "function", "include", "literal"]; var last; var regs = { operatorChars: /[+\-*&%=<>!?]/, validIdentifier: /[a-zA-Z0-9_]/, stringChar: /['"]/ }; var helpers = { cont: function(style, lastType) { last = lastType; return style; }, chain: function(stream, state, parser) { state.tokenize = parser; return parser(stream, state); } }; // our various parsers var parsers = { // the main tokenizer tokenizer: function(stream, state) { if (stream.match(settings.leftDelimiter, true)) { if (stream.eat("*")) { return helpers.chain(stream, state, parsers.inBlock("comment", "*" + settings.rightDelimiter)); } else { // Smarty 3 allows { and } surrounded by whitespace to NOT slip into Smarty mode state.depth++; var isEol = stream.eol(); var isFollowedByWhitespace = /\s/.test(stream.peek()); if (settings.smartyVersion === 3 && settings.leftDelimiter === "{" && (isEol || isFollowedByWhitespace)) { state.depth--; return null; } else { state.tokenize = parsers.smarty; last = "startTag"; return "tag"; } } } else { stream.next(); return null; } }, // parsing Smarty content smarty: function(stream, state) { if (stream.match(settings.rightDelimiter, true)) { if (settings.smartyVersion === 3) { state.depth--; if (state.depth <= 0) { state.tokenize = parsers.tokenizer; } } else { state.tokenize = parsers.tokenizer; } return helpers.cont("tag", null); } if (stream.match(settings.leftDelimiter, true)) { state.depth++; return helpers.cont("tag", "startTag"); } var ch = stream.next(); if (ch == "$") { stream.eatWhile(regs.validIdentifier); return helpers.cont("variable-2", "variable"); } else if (ch == "|") { return helpers.cont("operator", "pipe"); } else if (ch == ".") { return helpers.cont("operator", "property"); } else if (regs.stringChar.test(ch)) { state.tokenize = parsers.inAttribute(ch); return helpers.cont("string", "string"); } else if (regs.operatorChars.test(ch)) { stream.eatWhile(regs.operatorChars); return helpers.cont("operator", "operator"); } else if (ch == "[" || ch == "]") { return helpers.cont("bracket", "bracket"); } else if (ch == "(" || ch == ")") { return helpers.cont("bracket", "operator"); } else if (/\d/.test(ch)) { stream.eatWhile(/\d/); return helpers.cont("number", "number"); } else { if (state.last == "variable") { if (ch == "@") { stream.eatWhile(regs.validIdentifier); return helpers.cont("property", "property"); } else if (ch == "|") { stream.eatWhile(regs.validIdentifier); return helpers.cont("qualifier", "modifier"); } } else if (state.last == "pipe") { stream.eatWhile(regs.validIdentifier); return helpers.cont("qualifier", "modifier"); } else if (state.last == "whitespace") { stream.eatWhile(regs.validIdentifier); return helpers.cont("attribute", "modifier"); } if (state.last == "property") { stream.eatWhile(regs.validIdentifier); return helpers.cont("property", null); } else if (/\s/.test(ch)) { last = "whitespace"; return null; } var str = ""; if (ch != "/") { str += ch; } var c = null; while (c = stream.eat(regs.validIdentifier)) { str += c; } for (var i=0, j=keyFunctions.length; i CodeMirror: Smarty mixed mode

                  Smarty mixed mode

                  The Smarty mixed mode depends on the Smarty and HTML mixed modes. HTML mixed mode itself depends on XML, JavaScript, and CSS modes.

                  It takes the same options, as Smarty and HTML mixed modes.

                  MIME types defined: text/x-smarty.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/smartymixed/smartymixed.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE /** * @file smartymixed.js * @brief Smarty Mixed Codemirror mode (Smarty + Mixed HTML) * @author Ruslan Osmanov * @version 3.0 * @date 05.07.2013 */ // Warning: Don't base other modes on this one. This here is a // terrible way to write a mixed mode. (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../htmlmixed/htmlmixed"), require("../smarty/smarty")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../htmlmixed/htmlmixed", "../smarty/smarty"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("smartymixed", function(config) { var htmlMixedMode = CodeMirror.getMode(config, "htmlmixed"); var smartyMode = CodeMirror.getMode(config, "smarty"); var settings = { rightDelimiter: '}', leftDelimiter: '{' }; if (config.hasOwnProperty("leftDelimiter")) { settings.leftDelimiter = config.leftDelimiter; } if (config.hasOwnProperty("rightDelimiter")) { settings.rightDelimiter = config.rightDelimiter; } function reEsc(str) { return str.replace(/[^\s\w]/g, "\\$&"); } var reLeft = reEsc(settings.leftDelimiter), reRight = reEsc(settings.rightDelimiter); var regs = { smartyComment: new RegExp("^" + reRight + "\\*"), literalOpen: new RegExp(reLeft + "literal" + reRight), literalClose: new RegExp(reLeft + "\/literal" + reRight), hasLeftDelimeter: new RegExp(".*" + reLeft), htmlHasLeftDelimeter: new RegExp("[^<>]*" + reLeft) }; var helpers = { chain: function(stream, state, parser) { state.tokenize = parser; return parser(stream, state); }, cleanChain: function(stream, state, parser) { state.tokenize = null; state.localState = null; state.localMode = null; return (typeof parser == "string") ? (parser ? parser : null) : parser(stream, state); }, maybeBackup: function(stream, pat, style) { var cur = stream.current(); var close = cur.search(pat), m; if (close > - 1) stream.backUp(cur.length - close); else if (m = cur.match(/<\/?$/)) { stream.backUp(cur.length); if (!stream.match(pat, false)) stream.match(cur[0]); } return style; } }; var parsers = { html: function(stream, state) { var htmlTagName = state.htmlMixedState.htmlState.context && state.htmlMixedState.htmlState.context.tagName ? state.htmlMixedState.htmlState.context.tagName : null; if (!state.inLiteral && stream.match(regs.htmlHasLeftDelimeter, false) && htmlTagName === null) { state.tokenize = parsers.smarty; state.localMode = smartyMode; state.localState = smartyMode.startState(htmlMixedMode.indent(state.htmlMixedState, "")); return helpers.maybeBackup(stream, settings.leftDelimiter, smartyMode.token(stream, state.localState)); } else if (!state.inLiteral && stream.match(settings.leftDelimiter, false)) { state.tokenize = parsers.smarty; state.localMode = smartyMode; state.localState = smartyMode.startState(htmlMixedMode.indent(state.htmlMixedState, "")); return helpers.maybeBackup(stream, settings.leftDelimiter, smartyMode.token(stream, state.localState)); } return htmlMixedMode.token(stream, state.htmlMixedState); }, smarty: function(stream, state) { if (stream.match(settings.leftDelimiter, false)) { if (stream.match(regs.smartyComment, false)) { return helpers.chain(stream, state, parsers.inBlock("comment", "*" + settings.rightDelimiter)); } } else if (stream.match(settings.rightDelimiter, false)) { stream.eat(settings.rightDelimiter); state.tokenize = parsers.html; state.localMode = htmlMixedMode; state.localState = state.htmlMixedState; return "tag"; } return helpers.maybeBackup(stream, settings.rightDelimiter, smartyMode.token(stream, state.localState)); }, inBlock: function(style, terminator) { return function(stream, state) { while (!stream.eol()) { if (stream.match(terminator)) { helpers.cleanChain(stream, state, ""); break; } stream.next(); } return style; }; } }; return { startState: function() { var state = htmlMixedMode.startState(); return { token: parsers.html, localMode: null, localState: null, htmlMixedState: state, tokenize: null, inLiteral: false }; }, copyState: function(state) { var local = null, tok = (state.tokenize || state.token); if (state.localState) { local = CodeMirror.copyState((tok != parsers.html ? smartyMode : htmlMixedMode), state.localState); } return { token: state.token, tokenize: state.tokenize, localMode: state.localMode, localState: local, htmlMixedState: CodeMirror.copyState(htmlMixedMode, state.htmlMixedState), inLiteral: state.inLiteral }; }, token: function(stream, state) { if (stream.match(settings.leftDelimiter, false)) { if (!state.inLiteral && stream.match(regs.literalOpen, true)) { state.inLiteral = true; return "keyword"; } else if (state.inLiteral && stream.match(regs.literalClose, true)) { state.inLiteral = false; return "keyword"; } } if (state.inLiteral && state.localState != state.htmlMixedState) { state.tokenize = parsers.html; state.localMode = htmlMixedMode; state.localState = state.htmlMixedState; } var style = (state.tokenize || state.token)(stream, state); return style; }, indent: function(state, textAfter) { if (state.localMode == smartyMode || (state.inLiteral && !state.localMode) || regs.hasLeftDelimeter.test(textAfter)) { return CodeMirror.Pass; } return htmlMixedMode.indent(state.htmlMixedState, textAfter); }, innerMode: function(state) { return { state: state.localState || state.htmlMixedState, mode: state.localMode || htmlMixedMode }; } }; }, "htmlmixed", "smarty"); CodeMirror.defineMIME("text/x-smarty", "smartymixed"); // vim: et ts=2 sts=2 sw=2 }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/solr/index.html ================================================ CodeMirror: Solr mode

                  Solr mode

                  MIME types defined: text/x-solr.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/solr/solr.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("solr", function() { "use strict"; var isStringChar = /[^\s\|\!\+\-\*\?\~\^\&\:\(\)\[\]\{\}\^\"\\]/; var isOperatorChar = /[\|\!\+\-\*\?\~\^\&]/; var isOperatorString = /^(OR|AND|NOT|TO)$/i; function isNumber(word) { return parseFloat(word, 10).toString() === word; } function tokenString(quote) { return function(stream, state) { var escaped = false, next; while ((next = stream.next()) != null) { if (next == quote && !escaped) break; escaped = !escaped && next == "\\"; } if (!escaped) state.tokenize = tokenBase; return "string"; }; } function tokenOperator(operator) { return function(stream, state) { var style = "operator"; if (operator == "+") style += " positive"; else if (operator == "-") style += " negative"; else if (operator == "|") stream.eat(/\|/); else if (operator == "&") stream.eat(/\&/); else if (operator == "^") style += " boost"; state.tokenize = tokenBase; return style; }; } function tokenWord(ch) { return function(stream, state) { var word = ch; while ((ch = stream.peek()) && ch.match(isStringChar) != null) { word += stream.next(); } state.tokenize = tokenBase; if (isOperatorString.test(word)) return "operator"; else if (isNumber(word)) return "number"; else if (stream.peek() == ":") return "field"; else return "string"; }; } function tokenBase(stream, state) { var ch = stream.next(); if (ch == '"') state.tokenize = tokenString(ch); else if (isOperatorChar.test(ch)) state.tokenize = tokenOperator(ch); else if (isStringChar.test(ch)) state.tokenize = tokenWord(ch); return (state.tokenize != tokenBase) ? state.tokenize(stream, state) : null; } return { startState: function() { return { tokenize: tokenBase }; }, token: function(stream, state) { if (stream.eatSpace()) return null; return state.tokenize(stream, state); } }; }); CodeMirror.defineMIME("text/x-solr", "solr"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/soy/index.html ================================================ CodeMirror: Soy (Closure Template) mode

                  Soy (Closure Template) mode

                  A mode for Closure Templates (Soy).

                  MIME type defined: text/x-soy.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/soy/soy.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../htmlmixed/htmlmixed")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../htmlmixed/htmlmixed"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; var indentingTags = ["template", "literal", "msg", "fallbackmsg", "let", "if", "elseif", "else", "switch", "case", "default", "foreach", "ifempty", "for", "call", "param", "deltemplate", "delcall", "log"]; CodeMirror.defineMode("soy", function(config) { var textMode = CodeMirror.getMode(config, "text/plain"); var modes = { html: CodeMirror.getMode(config, {name: "text/html", multilineTagIndentFactor: 2, multilineTagIndentPastTag: false}), attributes: textMode, text: textMode, uri: textMode, css: CodeMirror.getMode(config, "text/css"), js: CodeMirror.getMode(config, {name: "text/javascript", statementIndent: 2 * config.indentUnit}) }; function last(array) { return array[array.length - 1]; } function tokenUntil(stream, state, untilRegExp) { var oldString = stream.string; var match = untilRegExp.exec(oldString.substr(stream.pos)); if (match) { // We don't use backUp because it backs up just the position, not the state. // This uses an undocumented API. stream.string = oldString.substr(0, stream.pos + match.index); } var result = stream.hideFirstChars(state.indent, function() { return state.localMode.token(stream, state.localState); }); stream.string = oldString; return result; } return { startState: function() { return { kind: [], kindTag: [], soyState: [], indent: 0, localMode: modes.html, localState: CodeMirror.startState(modes.html) }; }, copyState: function(state) { return { tag: state.tag, // Last seen Soy tag. kind: state.kind.concat([]), // Values of kind="" attributes. kindTag: state.kindTag.concat([]), // Opened tags with kind="" attributes. soyState: state.soyState.concat([]), indent: state.indent, // Indentation of the following line. localMode: state.localMode, localState: CodeMirror.copyState(state.localMode, state.localState) }; }, token: function(stream, state) { var match; switch (last(state.soyState)) { case "comment": if (stream.match(/^.*?\*\//)) { state.soyState.pop(); } else { stream.skipToEnd(); } return "comment"; case "variable": if (stream.match(/^}/)) { state.indent -= 2 * config.indentUnit; state.soyState.pop(); return "variable-2"; } stream.next(); return null; case "tag": if (stream.match(/^\/?}/)) { if (state.tag == "/template" || state.tag == "/deltemplate") state.indent = 0; else state.indent -= (stream.current() == "/}" || indentingTags.indexOf(state.tag) == -1 ? 2 : 1) * config.indentUnit; state.soyState.pop(); return "keyword"; } else if (stream.match(/^(\w+)(?==)/)) { if (stream.current() == "kind" && (match = stream.match(/^="([^"]+)/, false))) { var kind = match[1]; state.kind.push(kind); state.kindTag.push(state.tag); state.localMode = modes[kind] || modes.html; state.localState = CodeMirror.startState(state.localMode); } return "attribute"; } else if (stream.match(/^"/)) { state.soyState.push("string"); return "string"; } stream.next(); return null; case "literal": if (stream.match(/^(?=\{\/literal})/)) { state.indent -= config.indentUnit; state.soyState.pop(); return this.token(stream, state); } return tokenUntil(stream, state, /\{\/literal}/); case "string": if (stream.match(/^.*?"/)) { state.soyState.pop(); } else { stream.skipToEnd(); } return "string"; } if (stream.match(/^\/\*/)) { state.soyState.push("comment"); return "comment"; } else if (stream.match(stream.sol() ? /^\s*\/\/.*/ : /^\s+\/\/.*/)) { return "comment"; } else if (stream.match(/^\{\$\w*/)) { state.indent += 2 * config.indentUnit; state.soyState.push("variable"); return "variable-2"; } else if (stream.match(/^\{literal}/)) { state.indent += config.indentUnit; state.soyState.push("literal"); return "keyword"; } else if (match = stream.match(/^\{([\/@\\]?\w*)/)) { if (match[1] != "/switch") state.indent += (/^(\/|(else|elseif|case|default)$)/.test(match[1]) && state.tag != "switch" ? 1 : 2) * config.indentUnit; state.tag = match[1]; if (state.tag == "/" + last(state.kindTag)) { // We found the tag that opened the current kind="". state.kind.pop(); state.kindTag.pop(); state.localMode = modes[last(state.kind)] || modes.html; state.localState = CodeMirror.startState(state.localMode); } state.soyState.push("tag"); return "keyword"; } return tokenUntil(stream, state, /\{|\s+\/\/|\/\*/); }, indent: function(state, textAfter) { var indent = state.indent, top = last(state.soyState); if (top == "comment") return CodeMirror.Pass; if (top == "literal") { if (/^\{\/literal}/.test(textAfter)) indent -= config.indentUnit; } else { if (/^\s*\{\/(template|deltemplate)\b/.test(textAfter)) return 0; if (/^\{(\/|(fallbackmsg|elseif|else|ifempty)\b)/.test(textAfter)) indent -= config.indentUnit; if (state.tag != "switch" && /^\{(case|default)\b/.test(textAfter)) indent -= config.indentUnit; if (/^\{\/switch\b/.test(textAfter)) indent -= config.indentUnit; } if (indent && state.localMode.indent) indent += state.localMode.indent(state.localState, textAfter); return indent; }, innerMode: function(state) { if (state.soyState.length && last(state.soyState) != "literal") return null; else return {state: state.localState, mode: state.localMode}; }, electricInput: /^\s*\{(\/|\/template|\/deltemplate|\/switch|fallbackmsg|elseif|else|case|default|ifempty|\/literal\})$/, lineComment: "//", blockCommentStart: "/*", blockCommentEnd: "*/", blockCommentContinue: " * ", fold: "indent" }; }, "htmlmixed"); CodeMirror.registerHelper("hintWords", "soy", indentingTags.concat( ["delpackage", "namespace", "alias", "print", "css", "debugger"])); CodeMirror.defineMIME("text/x-soy", "soy"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/sparql/index.html ================================================ CodeMirror: SPARQL mode

                  SPARQL mode

                  MIME types defined: application/sparql-query.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/sparql/sparql.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("sparql", function(config) { var indentUnit = config.indentUnit; var curPunc; function wordRegexp(words) { return new RegExp("^(?:" + words.join("|") + ")$", "i"); } var ops = wordRegexp(["str", "lang", "langmatches", "datatype", "bound", "sameterm", "isiri", "isuri", "iri", "uri", "bnode", "count", "sum", "min", "max", "avg", "sample", "group_concat", "rand", "abs", "ceil", "floor", "round", "concat", "substr", "strlen", "replace", "ucase", "lcase", "encode_for_uri", "contains", "strstarts", "strends", "strbefore", "strafter", "year", "month", "day", "hours", "minutes", "seconds", "timezone", "tz", "now", "uuid", "struuid", "md5", "sha1", "sha256", "sha384", "sha512", "coalesce", "if", "strlang", "strdt", "isnumeric", "regex", "exists", "isblank", "isliteral", "a"]); var keywords = wordRegexp(["base", "prefix", "select", "distinct", "reduced", "construct", "describe", "ask", "from", "named", "where", "order", "limit", "offset", "filter", "optional", "graph", "by", "asc", "desc", "as", "having", "undef", "values", "group", "minus", "in", "not", "service", "silent", "using", "insert", "delete", "union", "true", "false", "with", "data", "copy", "to", "move", "add", "create", "drop", "clear", "load"]); var operatorChars = /[*+\-<>=&|\^\/!\?]/; function tokenBase(stream, state) { var ch = stream.next(); curPunc = null; if (ch == "$" || ch == "?") { if(ch == "?" && stream.match(/\s/, false)){ return "operator"; } stream.match(/^[\w\d]*/); return "variable-2"; } else if (ch == "<" && !stream.match(/^[\s\u00a0=]/, false)) { stream.match(/^[^\s\u00a0>]*>?/); return "atom"; } else if (ch == "\"" || ch == "'") { state.tokenize = tokenLiteral(ch); return state.tokenize(stream, state); } else if (/[{}\(\),\.;\[\]]/.test(ch)) { curPunc = ch; return "bracket"; } else if (ch == "#") { stream.skipToEnd(); return "comment"; } else if (operatorChars.test(ch)) { stream.eatWhile(operatorChars); return "operator"; } else if (ch == ":") { stream.eatWhile(/[\w\d\._\-]/); return "atom"; } else if (ch == "@") { stream.eatWhile(/[a-z\d\-]/i); return "meta"; } else { stream.eatWhile(/[_\w\d]/); if (stream.eat(":")) { stream.eatWhile(/[\w\d_\-]/); return "atom"; } var word = stream.current(); if (ops.test(word)) return "builtin"; else if (keywords.test(word)) return "keyword"; else return "variable"; } } function tokenLiteral(quote) { return function(stream, state) { var escaped = false, ch; while ((ch = stream.next()) != null) { if (ch == quote && !escaped) { state.tokenize = tokenBase; break; } escaped = !escaped && ch == "\\"; } return "string"; }; } function pushContext(state, type, col) { state.context = {prev: state.context, indent: state.indent, col: col, type: type}; } function popContext(state) { state.indent = state.context.indent; state.context = state.context.prev; } return { startState: function() { return {tokenize: tokenBase, context: null, indent: 0, col: 0}; }, token: function(stream, state) { if (stream.sol()) { if (state.context && state.context.align == null) state.context.align = false; state.indent = stream.indentation(); } if (stream.eatSpace()) return null; var style = state.tokenize(stream, state); if (style != "comment" && state.context && state.context.align == null && state.context.type != "pattern") { state.context.align = true; } if (curPunc == "(") pushContext(state, ")", stream.column()); else if (curPunc == "[") pushContext(state, "]", stream.column()); else if (curPunc == "{") pushContext(state, "}", stream.column()); else if (/[\]\}\)]/.test(curPunc)) { while (state.context && state.context.type == "pattern") popContext(state); if (state.context && curPunc == state.context.type) popContext(state); } else if (curPunc == "." && state.context && state.context.type == "pattern") popContext(state); else if (/atom|string|variable/.test(style) && state.context) { if (/[\}\]]/.test(state.context.type)) pushContext(state, "pattern", stream.column()); else if (state.context.type == "pattern" && !state.context.align) { state.context.align = true; state.context.col = stream.column(); } } return style; }, indent: function(state, textAfter) { var firstChar = textAfter && textAfter.charAt(0); var context = state.context; if (/[\]\}]/.test(firstChar)) while (context && context.type == "pattern") context = context.prev; var closing = context && firstChar == context.type; if (!context) return 0; else if (context.type == "pattern") return context.col; else if (context.align) return context.col + (closing ? 0 : 1); else return context.indent + (closing ? 0 : indentUnit); } }; }); CodeMirror.defineMIME("application/sparql-query", "sparql"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/spreadsheet/index.html ================================================ CodeMirror: Spreadsheet mode

                  Spreadsheet mode

                  MIME types defined: text/x-spreadsheet.

                  The Spreadsheet Mode

                  Created by Robert Plummer

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/spreadsheet/spreadsheet.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("spreadsheet", function () { return { startState: function () { return { stringType: null, stack: [] }; }, token: function (stream, state) { if (!stream) return; //check for state changes if (state.stack.length === 0) { //strings if ((stream.peek() == '"') || (stream.peek() == "'")) { state.stringType = stream.peek(); stream.next(); // Skip quote state.stack.unshift("string"); } } //return state //stack has switch (state.stack[0]) { case "string": while (state.stack[0] === "string" && !stream.eol()) { if (stream.peek() === state.stringType) { stream.next(); // Skip quote state.stack.shift(); // Clear flag } else if (stream.peek() === "\\") { stream.next(); stream.next(); } else { stream.match(/^.[^\\\"\']*/); } } return "string"; case "characterClass": while (state.stack[0] === "characterClass" && !stream.eol()) { if (!(stream.match(/^[^\]\\]+/) || stream.match(/^\\./))) state.stack.shift(); } return "operator"; } var peek = stream.peek(); //no stack switch (peek) { case "[": stream.next(); state.stack.unshift("characterClass"); return "bracket"; case ":": stream.next(); return "operator"; case "\\": if (stream.match(/\\[a-z]+/)) return "string-2"; else return null; case ".": case ",": case ";": case "*": case "-": case "+": case "^": case "<": case "/": case "=": stream.next(); return "atom"; case "$": stream.next(); return "builtin"; } if (stream.match(/\d+/)) { if (stream.match(/^\w+/)) return "error"; return "number"; } else if (stream.match(/^[a-zA-Z_]\w*/)) { if (stream.match(/(?=[\(.])/, false)) return "keyword"; return "variable-2"; } else if (["[", "]", "(", ")", "{", "}"].indexOf(peek) != -1) { stream.next(); return "bracket"; } else if (!stream.eatSpace()) { stream.next(); } return null; } }; }); CodeMirror.defineMIME("text/x-spreadsheet", "spreadsheet"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/sql/index.html ================================================ CodeMirror: SQL Mode for CodeMirror

                  SQL Mode for CodeMirror

                  MIME types defined: text/x-sql, text/x-mysql, text/x-mariadb, text/x-cassandra, text/x-plsql, text/x-mssql, text/x-hive.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/sql/sql.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("sql", function(config, parserConfig) { "use strict"; var client = parserConfig.client || {}, atoms = parserConfig.atoms || {"false": true, "true": true, "null": true}, builtin = parserConfig.builtin || {}, keywords = parserConfig.keywords || {}, operatorChars = parserConfig.operatorChars || /^[*+\-%<>!=&|~^]/, support = parserConfig.support || {}, hooks = parserConfig.hooks || {}, dateSQL = parserConfig.dateSQL || {"date" : true, "time" : true, "timestamp" : true}; function tokenBase(stream, state) { var ch = stream.next(); // call hooks from the mime type if (hooks[ch]) { var result = hooks[ch](stream, state); if (result !== false) return result; } if (support.hexNumber == true && ((ch == "0" && stream.match(/^[xX][0-9a-fA-F]+/)) || (ch == "x" || ch == "X") && stream.match(/^'[0-9a-fA-F]+'/))) { // hex // ref: http://dev.mysql.com/doc/refman/5.5/en/hexadecimal-literals.html return "number"; } else if (support.binaryNumber == true && (((ch == "b" || ch == "B") && stream.match(/^'[01]+'/)) || (ch == "0" && stream.match(/^b[01]+/)))) { // bitstring // ref: http://dev.mysql.com/doc/refman/5.5/en/bit-field-literals.html return "number"; } else if (ch.charCodeAt(0) > 47 && ch.charCodeAt(0) < 58) { // numbers // ref: http://dev.mysql.com/doc/refman/5.5/en/number-literals.html stream.match(/^[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?/); support.decimallessFloat == true && stream.eat('.'); return "number"; } else if (ch == "?" && (stream.eatSpace() || stream.eol() || stream.eat(";"))) { // placeholders return "variable-3"; } else if (ch == "'" || (ch == '"' && support.doubleQuote)) { // strings // ref: http://dev.mysql.com/doc/refman/5.5/en/string-literals.html state.tokenize = tokenLiteral(ch); return state.tokenize(stream, state); } else if ((((support.nCharCast == true && (ch == "n" || ch == "N")) || (support.charsetCast == true && ch == "_" && stream.match(/[a-z][a-z0-9]*/i))) && (stream.peek() == "'" || stream.peek() == '"'))) { // charset casting: _utf8'str', N'str', n'str' // ref: http://dev.mysql.com/doc/refman/5.5/en/string-literals.html return "keyword"; } else if (/^[\(\),\;\[\]]/.test(ch)) { // no highlightning return null; } else if (support.commentSlashSlash && ch == "/" && stream.eat("/")) { // 1-line comment stream.skipToEnd(); return "comment"; } else if ((support.commentHash && ch == "#") || (ch == "-" && stream.eat("-") && (!support.commentSpaceRequired || stream.eat(" ")))) { // 1-line comments // ref: https://kb.askmonty.org/en/comment-syntax/ stream.skipToEnd(); return "comment"; } else if (ch == "/" && stream.eat("*")) { // multi-line comments // ref: https://kb.askmonty.org/en/comment-syntax/ state.tokenize = tokenComment; return state.tokenize(stream, state); } else if (ch == ".") { // .1 for 0.1 if (support.zerolessFloat == true && stream.match(/^(?:\d+(?:e[+-]?\d+)?)/i)) { return "number"; } // .table_name (ODBC) // // ref: http://dev.mysql.com/doc/refman/5.6/en/identifier-qualifiers.html if (support.ODBCdotTable == true && stream.match(/^[a-zA-Z_]+/)) { return "variable-2"; } } else if (operatorChars.test(ch)) { // operators stream.eatWhile(operatorChars); return null; } else if (ch == '{' && (stream.match(/^( )*(d|D|t|T|ts|TS)( )*'[^']*'( )*}/) || stream.match(/^( )*(d|D|t|T|ts|TS)( )*"[^"]*"( )*}/))) { // dates (weird ODBC syntax) // ref: http://dev.mysql.com/doc/refman/5.5/en/date-and-time-literals.html return "number"; } else { stream.eatWhile(/^[_\w\d]/); var word = stream.current().toLowerCase(); // dates (standard SQL syntax) // ref: http://dev.mysql.com/doc/refman/5.5/en/date-and-time-literals.html if (dateSQL.hasOwnProperty(word) && (stream.match(/^( )+'[^']*'/) || stream.match(/^( )+"[^"]*"/))) return "number"; if (atoms.hasOwnProperty(word)) return "atom"; if (builtin.hasOwnProperty(word)) return "builtin"; if (keywords.hasOwnProperty(word)) return "keyword"; if (client.hasOwnProperty(word)) return "string-2"; return null; } } // 'string', with char specified in quote escaped by '\' function tokenLiteral(quote) { return function(stream, state) { var escaped = false, ch; while ((ch = stream.next()) != null) { if (ch == quote && !escaped) { state.tokenize = tokenBase; break; } escaped = !escaped && ch == "\\"; } return "string"; }; } function tokenComment(stream, state) { while (true) { if (stream.skipTo("*")) { stream.next(); if (stream.eat("/")) { state.tokenize = tokenBase; break; } } else { stream.skipToEnd(); break; } } return "comment"; } function pushContext(stream, state, type) { state.context = { prev: state.context, indent: stream.indentation(), col: stream.column(), type: type }; } function popContext(state) { state.indent = state.context.indent; state.context = state.context.prev; } return { startState: function() { return {tokenize: tokenBase, context: null}; }, token: function(stream, state) { if (stream.sol()) { if (state.context && state.context.align == null) state.context.align = false; } if (stream.eatSpace()) return null; var style = state.tokenize(stream, state); if (style == "comment") return style; if (state.context && state.context.align == null) state.context.align = true; var tok = stream.current(); if (tok == "(") pushContext(stream, state, ")"); else if (tok == "[") pushContext(stream, state, "]"); else if (state.context && state.context.type == tok) popContext(state); return style; }, indent: function(state, textAfter) { var cx = state.context; if (!cx) return CodeMirror.Pass; var closing = textAfter.charAt(0) == cx.type; if (cx.align) return cx.col + (closing ? 0 : 1); else return cx.indent + (closing ? 0 : config.indentUnit); }, blockCommentStart: "/*", blockCommentEnd: "*/", lineComment: support.commentSlashSlash ? "//" : support.commentHash ? "#" : null }; }); (function() { "use strict"; // `identifier` function hookIdentifier(stream) { // MySQL/MariaDB identifiers // ref: http://dev.mysql.com/doc/refman/5.6/en/identifier-qualifiers.html var ch; while ((ch = stream.next()) != null) { if (ch == "`" && !stream.eat("`")) return "variable-2"; } stream.backUp(stream.current().length - 1); return stream.eatWhile(/\w/) ? "variable-2" : null; } // variable token function hookVar(stream) { // variables // @@prefix.varName @varName // varName can be quoted with ` or ' or " // ref: http://dev.mysql.com/doc/refman/5.5/en/user-variables.html if (stream.eat("@")) { stream.match(/^session\./); stream.match(/^local\./); stream.match(/^global\./); } if (stream.eat("'")) { stream.match(/^.*'/); return "variable-2"; } else if (stream.eat('"')) { stream.match(/^.*"/); return "variable-2"; } else if (stream.eat("`")) { stream.match(/^.*`/); return "variable-2"; } else if (stream.match(/^[0-9a-zA-Z$\.\_]+/)) { return "variable-2"; } return null; }; // short client keyword token function hookClient(stream) { // \N means NULL // ref: http://dev.mysql.com/doc/refman/5.5/en/null-values.html if (stream.eat("N")) { return "atom"; } // \g, etc // ref: http://dev.mysql.com/doc/refman/5.5/en/mysql-commands.html return stream.match(/^[a-zA-Z.#!?]/) ? "variable-2" : null; } // these keywords are used by all SQL dialects (however, a mode can still overwrite it) var sqlKeywords = "alter and as asc between by count create delete desc distinct drop from having in insert into is join like not on or order select set table union update values where "; // turn a space-separated list into an array function set(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } // A generic SQL Mode. It's not a standard, it just try to support what is generally supported CodeMirror.defineMIME("text/x-sql", { name: "sql", keywords: set(sqlKeywords + "begin"), builtin: set("bool boolean bit blob enum long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text bigint int int1 int2 int3 int4 int8 integer float float4 float8 double char varbinary varchar varcharacter precision real date datetime year unsigned signed decimal numeric"), atoms: set("false true null unknown"), operatorChars: /^[*+\-%<>!=]/, dateSQL: set("date time timestamp"), support: set("ODBCdotTable doubleQuote binaryNumber hexNumber") }); CodeMirror.defineMIME("text/x-mssql", { name: "sql", client: set("charset clear connect edit ego exit go help nopager notee nowarning pager print prompt quit rehash source status system tee"), keywords: set(sqlKeywords + "begin trigger proc view index for add constraint key primary foreign collate clustered nonclustered"), builtin: set("bigint numeric bit smallint decimal smallmoney int tinyint money float real char varchar text nchar nvarchar ntext binary varbinary image cursor timestamp hierarchyid uniqueidentifier sql_variant xml table "), atoms: set("false true null unknown"), operatorChars: /^[*+\-%<>!=]/, dateSQL: set("date datetimeoffset datetime2 smalldatetime datetime time"), hooks: { "@": hookVar } }); CodeMirror.defineMIME("text/x-mysql", { name: "sql", client: set("charset clear connect edit ego exit go help nopager notee nowarning pager print prompt quit rehash source status system tee"), keywords: set(sqlKeywords + "accessible action add after algorithm all analyze asensitive at authors auto_increment autocommit avg avg_row_length before binary binlog both btree cache call cascade cascaded case catalog_name chain change changed character check checkpoint checksum class_origin client_statistics close coalesce code collate collation collations column columns comment commit committed completion concurrent condition connection consistent constraint contains continue contributors convert cross current current_date current_time current_timestamp current_user cursor data database databases day_hour day_microsecond day_minute day_second deallocate dec declare default delay_key_write delayed delimiter des_key_file describe deterministic dev_pop dev_samp deviance diagnostics directory disable discard distinctrow div dual dumpfile each elseif enable enclosed end ends engine engines enum errors escape escaped even event events every execute exists exit explain extended fast fetch field fields first flush for force foreign found_rows full fulltext function general get global grant grants group groupby_concat handler hash help high_priority hosts hour_microsecond hour_minute hour_second if ignore ignore_server_ids import index index_statistics infile inner innodb inout insensitive insert_method install interval invoker isolation iterate key keys kill language last leading leave left level limit linear lines list load local localtime localtimestamp lock logs low_priority master master_heartbeat_period master_ssl_verify_server_cert masters match max max_rows maxvalue message_text middleint migrate min min_rows minute_microsecond minute_second mod mode modifies modify mutex mysql_errno natural next no no_write_to_binlog offline offset one online open optimize option optionally out outer outfile pack_keys parser partition partitions password phase plugin plugins prepare preserve prev primary privileges procedure processlist profile profiles purge query quick range read read_write reads real rebuild recover references regexp relaylog release remove rename reorganize repair repeatable replace require resignal restrict resume return returns revoke right rlike rollback rollup row row_format rtree savepoint schedule schema schema_name schemas second_microsecond security sensitive separator serializable server session share show signal slave slow smallint snapshot soname spatial specific sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_no_cache sql_small_result sqlexception sqlstate sqlwarning ssl start starting starts status std stddev stddev_pop stddev_samp storage straight_join subclass_origin sum suspend table_name table_statistics tables tablespace temporary terminated to trailing transaction trigger triggers truncate uncommitted undo uninstall unique unlock upgrade usage use use_frm user user_resources user_statistics using utc_date utc_time utc_timestamp value variables varying view views warnings when while with work write xa xor year_month zerofill begin do then else loop repeat"), builtin: set("bool boolean bit blob decimal double float long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text bigint int int1 int2 int3 int4 int8 integer float float4 float8 double char varbinary varchar varcharacter precision date datetime year unsigned signed numeric"), atoms: set("false true null unknown"), operatorChars: /^[*+\-%<>!=&|^]/, dateSQL: set("date time timestamp"), support: set("ODBCdotTable decimallessFloat zerolessFloat binaryNumber hexNumber doubleQuote nCharCast charsetCast commentHash commentSpaceRequired"), hooks: { "@": hookVar, "`": hookIdentifier, "\\": hookClient } }); CodeMirror.defineMIME("text/x-mariadb", { name: "sql", client: set("charset clear connect edit ego exit go help nopager notee nowarning pager print prompt quit rehash source status system tee"), keywords: set(sqlKeywords + "accessible action add after algorithm all always analyze asensitive at authors auto_increment autocommit avg avg_row_length before binary binlog both btree cache call cascade cascaded case catalog_name chain change changed character check checkpoint checksum class_origin client_statistics close coalesce code collate collation collations column columns comment commit committed completion concurrent condition connection consistent constraint contains continue contributors convert cross current current_date current_time current_timestamp current_user cursor data database databases day_hour day_microsecond day_minute day_second deallocate dec declare default delay_key_write delayed delimiter des_key_file describe deterministic dev_pop dev_samp deviance diagnostics directory disable discard distinctrow div dual dumpfile each elseif enable enclosed end ends engine engines enum errors escape escaped even event events every execute exists exit explain extended fast fetch field fields first flush for force foreign found_rows full fulltext function general generated get global grant grants group groupby_concat handler hard hash help high_priority hosts hour_microsecond hour_minute hour_second if ignore ignore_server_ids import index index_statistics infile inner innodb inout insensitive insert_method install interval invoker isolation iterate key keys kill language last leading leave left level limit linear lines list load local localtime localtimestamp lock logs low_priority master master_heartbeat_period master_ssl_verify_server_cert masters match max max_rows maxvalue message_text middleint migrate min min_rows minute_microsecond minute_second mod mode modifies modify mutex mysql_errno natural next no no_write_to_binlog offline offset one online open optimize option optionally out outer outfile pack_keys parser partition partitions password persistent phase plugin plugins prepare preserve prev primary privileges procedure processlist profile profiles purge query quick range read read_write reads real rebuild recover references regexp relaylog release remove rename reorganize repair repeatable replace require resignal restrict resume return returns revoke right rlike rollback rollup row row_format rtree savepoint schedule schema schema_name schemas second_microsecond security sensitive separator serializable server session share show shutdown signal slave slow smallint snapshot soft soname spatial specific sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_no_cache sql_small_result sqlexception sqlstate sqlwarning ssl start starting starts status std stddev stddev_pop stddev_samp storage straight_join subclass_origin sum suspend table_name table_statistics tables tablespace temporary terminated to trailing transaction trigger triggers truncate uncommitted undo uninstall unique unlock upgrade usage use use_frm user user_resources user_statistics using utc_date utc_time utc_timestamp value variables varying view views virtual warnings when while with work write xa xor year_month zerofill begin do then else loop repeat"), builtin: set("bool boolean bit blob decimal double float long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text bigint int int1 int2 int3 int4 int8 integer float float4 float8 double char varbinary varchar varcharacter precision date datetime year unsigned signed numeric"), atoms: set("false true null unknown"), operatorChars: /^[*+\-%<>!=&|^]/, dateSQL: set("date time timestamp"), support: set("ODBCdotTable decimallessFloat zerolessFloat binaryNumber hexNumber doubleQuote nCharCast charsetCast commentHash commentSpaceRequired"), hooks: { "@": hookVar, "`": hookIdentifier, "\\": hookClient } }); // the query language used by Apache Cassandra is called CQL, but this mime type // is called Cassandra to avoid confusion with Contextual Query Language CodeMirror.defineMIME("text/x-cassandra", { name: "sql", client: { }, keywords: set("use select from using consistency where limit first reversed first and in insert into values using consistency ttl update set delete truncate begin batch apply create keyspace with columnfamily primary key index on drop alter type add any one quorum all local_quorum each_quorum"), builtin: set("ascii bigint blob boolean counter decimal double float int text timestamp uuid varchar varint"), atoms: set("false true"), operatorChars: /^[<>=]/, dateSQL: { }, support: set("commentSlashSlash decimallessFloat"), hooks: { } }); // this is based on Peter Raganitsch's 'plsql' mode CodeMirror.defineMIME("text/x-plsql", { name: "sql", client: set("appinfo arraysize autocommit autoprint autorecovery autotrace blockterminator break btitle cmdsep colsep compatibility compute concat copycommit copytypecheck define describe echo editfile embedded escape exec execute feedback flagger flush heading headsep instance linesize lno loboffset logsource long longchunksize markup native newpage numformat numwidth pagesize pause pno recsep recsepchar release repfooter repheader serveroutput shiftinout show showmode size spool sqlblanklines sqlcase sqlcode sqlcontinue sqlnumber sqlpluscompatibility sqlprefix sqlprompt sqlterminator suffix tab term termout time timing trimout trimspool ttitle underline verify version wrap"), keywords: set("abort accept access add all alter and any array arraylen as asc assert assign at attributes audit authorization avg base_table begin between binary_integer body boolean by case cast char char_base check close cluster clusters colauth column comment commit compress connect connected constant constraint crash create current currval cursor data_base database date dba deallocate debugoff debugon decimal declare default definition delay delete desc digits dispose distinct do drop else elseif elsif enable end entry escape exception exception_init exchange exclusive exists exit external fast fetch file for force form from function generic goto grant group having identified if immediate in increment index indexes indicator initial initrans insert interface intersect into is key level library like limited local lock log logging long loop master maxextents maxtrans member minextents minus mislabel mode modify multiset new next no noaudit nocompress nologging noparallel not nowait number_base object of off offline on online only open option or order out package parallel partition pctfree pctincrease pctused pls_integer positive positiven pragma primary prior private privileges procedure public raise range raw read rebuild record ref references refresh release rename replace resource restrict return returning returns reverse revoke rollback row rowid rowlabel rownum rows run savepoint schema segment select separate session set share snapshot some space split sql start statement storage subtype successful synonym tabauth table tables tablespace task terminate then to trigger truncate type union unique unlimited unrecoverable unusable update use using validate value values variable view views when whenever where while with work"), builtin: set("abs acos add_months ascii asin atan atan2 average bfile bfilename bigserial bit blob ceil character chartorowid chr clob concat convert cos cosh count dec decode deref dual dump dup_val_on_index empty error exp false float floor found glb greatest hextoraw initcap instr instrb int integer isopen last_day least lenght lenghtb ln lower lpad ltrim lub make_ref max min mlslabel mod months_between natural naturaln nchar nclob new_time next_day nextval nls_charset_decl_len nls_charset_id nls_charset_name nls_initcap nls_lower nls_sort nls_upper nlssort no_data_found notfound null number numeric nvarchar2 nvl others power rawtohex real reftohex round rowcount rowidtochar rowtype rpad rtrim serial sign signtype sin sinh smallint soundex sqlcode sqlerrm sqrt stddev string substr substrb sum sysdate tan tanh to_char text to_date to_label to_multi_byte to_number to_single_byte translate true trunc uid unlogged upper user userenv varchar varchar2 variance varying vsize xml"), operatorChars: /^[*+\-%<>!=~]/, dateSQL: set("date time timestamp"), support: set("doubleQuote nCharCast zerolessFloat binaryNumber hexNumber") }); // Created to support specific hive keywords CodeMirror.defineMIME("text/x-hive", { name: "sql", keywords: set("select alter $elem$ $key$ $value$ add after all analyze and archive as asc before between binary both bucket buckets by cascade case cast change cluster clustered clusterstatus collection column columns comment compute concatenate continue create cross cursor data database databases dbproperties deferred delete delimited desc describe directory disable distinct distribute drop else enable end escaped exclusive exists explain export extended external false fetch fields fileformat first format formatted from full function functions grant group having hold_ddltime idxproperties if import in index indexes inpath inputdriver inputformat insert intersect into is items join keys lateral left like limit lines load local location lock locks mapjoin materialized minus msck no_drop nocompress not of offline on option or order out outer outputdriver outputformat overwrite partition partitioned partitions percent plus preserve procedure purge range rcfile read readonly reads rebuild recordreader recordwriter recover reduce regexp rename repair replace restrict revoke right rlike row schema schemas semi sequencefile serde serdeproperties set shared show show_database sort sorted ssl statistics stored streamtable table tables tablesample tblproperties temporary terminated textfile then tmp to touch transform trigger true unarchive undo union uniquejoin unlock update use using utc utc_tmestamp view when where while with"), builtin: set("bool boolean long timestamp tinyint smallint bigint int float double date datetime unsigned string array struct map uniontype"), atoms: set("false true null unknown"), operatorChars: /^[*+\-%<>!=]/, dateSQL: set("date timestamp"), support: set("ODBCdotTable doubleQuote binaryNumber hexNumber") }); }()); }); /* How Properties of Mime Types are used by SQL Mode ================================================= keywords: A list of keywords you want to be highlighted. builtin: A list of builtin types you want to be highlighted (if you want types to be of class "builtin" instead of "keyword"). operatorChars: All characters that must be handled as operators. client: Commands parsed and executed by the client (not the server). support: A list of supported syntaxes which are not common, but are supported by more than 1 DBMS. * ODBCdotTable: .tableName * zerolessFloat: .1 * doubleQuote * nCharCast: N'string' * charsetCast: _utf8'string' * commentHash: use # char for comments * commentSlashSlash: use // for comments * commentSpaceRequired: require a space after -- for comments atoms: Keywords that must be highlighted as atoms,. Some DBMS's support more atoms than others: UNKNOWN, INFINITY, UNDERFLOW, NaN... dateSQL: Used for date/time SQL standard syntax, because not all DBMS's support same temporal types. */ ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/stex/index.html ================================================ CodeMirror: sTeX mode

                  sTeX mode

                  MIME types defined: text/x-stex.

                  Parsing/Highlighting Tests: normal, verbose.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/stex/stex.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE /* * Author: Constantin Jucovschi (c.jucovschi@jacobs-university.de) * Licence: MIT */ (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("stex", function() { "use strict"; function pushCommand(state, command) { state.cmdState.push(command); } function peekCommand(state) { if (state.cmdState.length > 0) { return state.cmdState[state.cmdState.length - 1]; } else { return null; } } function popCommand(state) { var plug = state.cmdState.pop(); if (plug) { plug.closeBracket(); } } // returns the non-default plugin closest to the end of the list function getMostPowerful(state) { var context = state.cmdState; for (var i = context.length - 1; i >= 0; i--) { var plug = context[i]; if (plug.name == "DEFAULT") { continue; } return plug; } return { styleIdentifier: function() { return null; } }; } function addPluginPattern(pluginName, cmdStyle, styles) { return function () { this.name = pluginName; this.bracketNo = 0; this.style = cmdStyle; this.styles = styles; this.argument = null; // \begin and \end have arguments that follow. These are stored in the plugin this.styleIdentifier = function() { return this.styles[this.bracketNo - 1] || null; }; this.openBracket = function() { this.bracketNo++; return "bracket"; }; this.closeBracket = function() {}; }; } var plugins = {}; plugins["importmodule"] = addPluginPattern("importmodule", "tag", ["string", "builtin"]); plugins["documentclass"] = addPluginPattern("documentclass", "tag", ["", "atom"]); plugins["usepackage"] = addPluginPattern("usepackage", "tag", ["atom"]); plugins["begin"] = addPluginPattern("begin", "tag", ["atom"]); plugins["end"] = addPluginPattern("end", "tag", ["atom"]); plugins["DEFAULT"] = function () { this.name = "DEFAULT"; this.style = "tag"; this.styleIdentifier = this.openBracket = this.closeBracket = function() {}; }; function setState(state, f) { state.f = f; } // called when in a normal (no environment) context function normal(source, state) { var plug; // Do we look like '\command' ? If so, attempt to apply the plugin 'command' if (source.match(/^\\[a-zA-Z@]+/)) { var cmdName = source.current().slice(1); plug = plugins[cmdName] || plugins["DEFAULT"]; plug = new plug(); pushCommand(state, plug); setState(state, beginParams); return plug.style; } // escape characters if (source.match(/^\\[$&%#{}_]/)) { return "tag"; } // white space control characters if (source.match(/^\\[,;!\/\\]/)) { return "tag"; } // find if we're starting various math modes if (source.match("\\[")) { setState(state, function(source, state){ return inMathMode(source, state, "\\]"); }); return "keyword"; } if (source.match("$$")) { setState(state, function(source, state){ return inMathMode(source, state, "$$"); }); return "keyword"; } if (source.match("$")) { setState(state, function(source, state){ return inMathMode(source, state, "$"); }); return "keyword"; } var ch = source.next(); if (ch == "%") { source.skipToEnd(); return "comment"; } else if (ch == '}' || ch == ']') { plug = peekCommand(state); if (plug) { plug.closeBracket(ch); setState(state, beginParams); } else { return "error"; } return "bracket"; } else if (ch == '{' || ch == '[') { plug = plugins["DEFAULT"]; plug = new plug(); pushCommand(state, plug); return "bracket"; } else if (/\d/.test(ch)) { source.eatWhile(/[\w.%]/); return "atom"; } else { source.eatWhile(/[\w\-_]/); plug = getMostPowerful(state); if (plug.name == 'begin') { plug.argument = source.current(); } return plug.styleIdentifier(); } } function inMathMode(source, state, endModeSeq) { if (source.eatSpace()) { return null; } if (source.match(endModeSeq)) { setState(state, normal); return "keyword"; } if (source.match(/^\\[a-zA-Z@]+/)) { return "tag"; } if (source.match(/^[a-zA-Z]+/)) { return "variable-2"; } // escape characters if (source.match(/^\\[$&%#{}_]/)) { return "tag"; } // white space control characters if (source.match(/^\\[,;!\/]/)) { return "tag"; } // special math-mode characters if (source.match(/^[\^_&]/)) { return "tag"; } // non-special characters if (source.match(/^[+\-<>|=,\/@!*:;'"`~#?]/)) { return null; } if (source.match(/^(\d+\.\d*|\d*\.\d+|\d+)/)) { return "number"; } var ch = source.next(); if (ch == "{" || ch == "}" || ch == "[" || ch == "]" || ch == "(" || ch == ")") { return "bracket"; } if (ch == "%") { source.skipToEnd(); return "comment"; } return "error"; } function beginParams(source, state) { var ch = source.peek(), lastPlug; if (ch == '{' || ch == '[') { lastPlug = peekCommand(state); lastPlug.openBracket(ch); source.eat(ch); setState(state, normal); return "bracket"; } if (/[ \t\r]/.test(ch)) { source.eat(ch); return null; } setState(state, normal); popCommand(state); return normal(source, state); } return { startState: function() { return { cmdState: [], f: normal }; }, copyState: function(s) { return { cmdState: s.cmdState.slice(), f: s.f }; }, token: function(stream, state) { return state.f(stream, state); }, blankLine: function(state) { state.f = normal; state.cmdState.length = 0; }, lineComment: "%" }; }); CodeMirror.defineMIME("text/x-stex", "stex"); CodeMirror.defineMIME("text/x-latex", "stex"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/stex/test.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function() { var mode = CodeMirror.getMode({tabSize: 4}, "stex"); function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } MT("word", "foo"); MT("twoWords", "foo bar"); MT("beginEndDocument", "[tag \\begin][bracket {][atom document][bracket }]", "[tag \\end][bracket {][atom document][bracket }]"); MT("beginEndEquation", "[tag \\begin][bracket {][atom equation][bracket }]", " E=mc^2", "[tag \\end][bracket {][atom equation][bracket }]"); MT("beginModule", "[tag \\begin][bracket {][atom module][bracket }[[]]]"); MT("beginModuleId", "[tag \\begin][bracket {][atom module][bracket }[[]id=bbt-size[bracket ]]]"); MT("importModule", "[tag \\importmodule][bracket [[][string b-b-t][bracket ]]{][builtin b-b-t][bracket }]"); MT("importModulePath", "[tag \\importmodule][bracket [[][tag \\KWARCslides][bracket {][string dmath/en/cardinality][bracket }]]{][builtin card][bracket }]"); MT("psForPDF", "[tag \\PSforPDF][bracket [[][atom 1][bracket ]]{]#1[bracket }]"); MT("comment", "[comment % foo]"); MT("tagComment", "[tag \\item][comment % bar]"); MT("commentTag", " [comment % \\item]"); MT("commentLineBreak", "[comment %]", "foo"); MT("tagErrorCurly", "[tag \\begin][error }][bracket {]"); MT("tagErrorSquare", "[tag \\item][error ]]][bracket {]"); MT("commentCurly", "[comment % }]"); MT("tagHash", "the [tag \\#] key"); MT("tagNumber", "a [tag \\$][atom 5] stetson"); MT("tagPercent", "[atom 100][tag \\%] beef"); MT("tagAmpersand", "L [tag \\&] N"); MT("tagUnderscore", "foo[tag \\_]bar"); MT("tagBracketOpen", "[tag \\emph][bracket {][tag \\{][bracket }]"); MT("tagBracketClose", "[tag \\emph][bracket {][tag \\}][bracket }]"); MT("tagLetterNumber", "section [tag \\S][atom 1]"); MT("textTagNumber", "para [tag \\P][atom 2]"); MT("thinspace", "x[tag \\,]y"); MT("thickspace", "x[tag \\;]y"); MT("negativeThinspace", "x[tag \\!]y"); MT("periodNotSentence", "J.\\ L.\\ is"); MT("periodSentence", "X[tag \\@]. The"); MT("italicCorrection", "[bracket {][tag \\em] If[tag \\/][bracket }] I"); MT("tagBracket", "[tag \\newcommand][bracket {][tag \\pop][bracket }]"); MT("inlineMathTagFollowedByNumber", "[keyword $][tag \\pi][number 2][keyword $]"); MT("inlineMath", "[keyword $][number 3][variable-2 x][tag ^][number 2.45]-[tag \\sqrt][bracket {][tag \\$\\alpha][bracket }] = [number 2][keyword $] other text"); MT("displayMath", "More [keyword $$]\t[variable-2 S][tag ^][variable-2 n][tag \\sum] [variable-2 i][keyword $$] other text"); MT("mathWithComment", "[keyword $][variable-2 x] [comment % $]", "[variable-2 y][keyword $] other text"); MT("lineBreakArgument", "[tag \\\\][bracket [[][atom 1cm][bracket ]]]"); })(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/stylus/index.html ================================================ CodeMirror: Stylus mode

                  Stylus mode

                  MIME types defined: text/x-styl.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/stylus/stylus.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("stylus", function(config) { var operatorsRegexp = /^(\?:?|\+[+=]?|-[\-=]?|\*[\*=]?|\/=?|[=!:\?]?=|<=?|>=?|%=?|&&|\|=?|\~|!|\^|\\)/, delimitersRegexp = /^(?:[()\[\]{},:`=;]|\.\.?\.?)/, wordOperatorsRegexp = wordRegexp(wordOperators), commonKeywordsRegexp = wordRegexp(commonKeywords), commonAtomsRegexp = wordRegexp(commonAtoms), commonDefRegexp = wordRegexp(commonDef), vendorPrefixesRegexp = new RegExp(/^\-(moz|ms|o|webkit)-/), cssValuesWithBracketsRegexp = new RegExp("^(" + cssValuesWithBrackets_.join("|") + ")\\([\\w\-\\#\\,\\.\\%\\s\\(\\)]*\\)"); var tokenBase = function(stream, state) { if (stream.eatSpace()) return null; var ch = stream.peek(); // Single line Comment if (stream.match('//')) { stream.skipToEnd(); return "comment"; } // Multiline Comment if (stream.match('/*')) { state.tokenizer = multilineComment; return state.tokenizer(stream, state); } // Strings if (ch === '"' || ch === "'") { stream.next(); state.tokenizer = buildStringTokenizer(ch); return "string"; } // Def if (ch === "@") { stream.next(); if (stream.match(/extend/)) { dedent(state); // remove indentation after selectors } else if (stream.match(/media[\w-\s]*[\w-]/)) { indent(state); } else if(stream.eatWhile(/[\w-]/)) { if(stream.current().match(commonDefRegexp)) { indent(state); } } return "def"; } // Number if (stream.match(/^-?[0-9\.]/, false)) { // Floats if (stream.match(/^-?\d*\.\d+(e[\+\-]?\d+)?/i) || stream.match(/^-?\d+\.\d*/)) { // Prevent from getting extra . on 1.. if (stream.peek() == ".") { stream.backUp(1); } // Units stream.eatWhile(/[a-z%]/i); return "number"; } // Integers if (stream.match(/^-?[1-9]\d*(e[\+\-]?\d+)?/) || stream.match(/^-?0(?![\dx])/i)) { // Units stream.eatWhile(/[a-z%]/i); return "number"; } } // Hex color and id selector if (ch === "#") { stream.next(); // Hex color if (stream.match(/^[0-9a-f]{6}|[0-9a-f]{3}/i)) { return "atom"; } // ID selector if (stream.match(/^[\w-]+/i)) { indent(state); return "builtin"; } } // Vendor prefixes if (stream.match(vendorPrefixesRegexp)) { return "meta"; } // Gradients and animation as CSS value if (stream.match(cssValuesWithBracketsRegexp)) { return "atom"; } // Mixins / Functions with indentation if (stream.sol() && stream.match(/^\.?[a-z][\w-]*\(/i)) { stream.backUp(1); indent(state); return "keyword"; } // Mixins / Functions if (stream.match(/^\.?[a-z][\w-]*\(/i)) { stream.backUp(1); return "keyword"; } // +Block mixins if (stream.match(/^(\+|\-)[a-z][\w-]+\(/i)) { stream.backUp(1); indent(state); return "keyword"; } // url tokens if (stream.match(/^url/) && stream.peek() === "(") { state.tokenizer = urlTokens; if(!stream.peek()) { state.cursorHalf = 0; } return "atom"; } // Class if (stream.match(/^\.[a-z][\w-]*/i)) { indent(state); return "qualifier"; } // & Parent Reference with BEM naming if (stream.match(/^(_|__|-|--)[a-z0-9-]+/)) { return "qualifier"; } // Pseudo elements/classes if (ch == ':' && stream.match(/^::?[\w-]+/)) { indent(state); return "variable-3"; } // Conditionals if (stream.match(wordRegexp(["for", "if", "else", "unless"]))) { indent(state); return "keyword"; } // Keywords if (stream.match(commonKeywordsRegexp)) { return "keyword"; } // Atoms if (stream.match(commonAtomsRegexp)) { return "atom"; } // Variables if (stream.match(/^\$?[a-z][\w-]+\s?=(\s|[\w-'"\$])/i)) { stream.backUp(2); var cssPropertie = stream.current().toLowerCase().match(/[\w-]+/)[0]; return cssProperties[cssPropertie] === undefined ? "variable-2" : "property"; } else if (stream.match(/\$[\w-\.]+/i)) { return "variable-2"; } else if (stream.match(/\$?[\w-]+\.[\w-]+/i)) { var cssTypeSelector = stream.current().toLowerCase().match(/[\w]+/)[0]; if(cssTypeSelectors[cssTypeSelector] === undefined) { return "variable-2"; } else stream.backUp(stream.current().length); } // !important if (ch === "!") { stream.next(); return stream.match(/^[\w]+/) ? "keyword": "operator"; } // / Root Reference if (stream.match(/^\/(:|\.|#|[a-z])/)) { stream.backUp(1); return "variable-3"; } // Operators and delimiters if (stream.match(operatorsRegexp) || stream.match(wordOperatorsRegexp)) { return "operator"; } if (stream.match(delimitersRegexp)) { return null; } // & Parent Reference if (ch === "&") { stream.next(); return "variable-3"; } // Font family if (stream.match(/^[A-Z][a-z0-9-]+/)) { return "string"; } // CSS rule // NOTE: Some css selectors and property values have the same name // (embed, menu, pre, progress, sub, table), // so they will have the same color (.cm-atom). if (stream.match(/[\w-]*/i)) { var word = stream.current().toLowerCase(); if(cssProperties[word] !== undefined) { // CSS property if(!stream.eol()) return "property"; else return "variable-2"; } else if(cssValues[word] !== undefined) { // CSS value return "atom"; } else if(cssTypeSelectors[word] !== undefined) { // CSS type selectors indent(state); return "tag"; } else if(word) { // By default variable-2 return "variable-2"; } } // Handle non-detected items stream.next(); return null; }; var tokenLexer = function(stream, state) { if (stream.sol()) { state.indentCount = 0; } var style = state.tokenizer(stream, state); var current = stream.current(); if (stream.eol() && (current === "}" || current === ",")) { dedent(state); } if (style !== null) { var startOfToken = stream.pos - current.length; var withCurrentIndent = startOfToken + (config.indentUnit * state.indentCount); var newScopes = []; for (var i = 0; i < state.scopes.length; i++) { var scope = state.scopes[i]; if (scope.offset <= withCurrentIndent) { newScopes.push(scope); } } state.scopes = newScopes; } return style; }; return { startState: function() { return { tokenizer: tokenBase, scopes: [{offset: 0, type: 'styl'}] }; }, token: function(stream, state) { var style = tokenLexer(stream, state); state.lastToken = { style: style, content: stream.current() }; return style; }, indent: function(state) { return state.scopes[0].offset; }, lineComment: "//", fold: "indent" }; function urlTokens(stream, state) { var ch = stream.peek(); if (ch === ")") { stream.next(); state.tokenizer = tokenBase; return "operator"; } else if (ch === "(") { stream.next(); stream.eatSpace(); return "operator"; } else if (ch === "'" || ch === '"') { state.tokenizer = buildStringTokenizer(stream.next()); return "string"; } else { state.tokenizer = buildStringTokenizer(")", false); return "string"; } } function multilineComment(stream, state) { if (stream.skipTo("*/")) { stream.next(); stream.next(); state.tokenizer = tokenBase; } else { stream.next(); } return "comment"; } function buildStringTokenizer(quote, greedy) { if(greedy == null) { greedy = true; } function stringTokenizer(stream, state) { var nextChar = stream.next(); var peekChar = stream.peek(); var previousChar = stream.string.charAt(stream.pos-2); var endingString = ((nextChar !== "\\" && peekChar === quote) || (nextChar === quote && previousChar !== "\\")); if (endingString) { if (nextChar !== quote && greedy) { stream.next(); } state.tokenizer = tokenBase; return "string"; } else if (nextChar === "#" && peekChar === "{") { state.tokenizer = buildInterpolationTokenizer(stringTokenizer); stream.next(); return "operator"; } else { return "string"; } } return stringTokenizer; } function buildInterpolationTokenizer(currentTokenizer) { return function(stream, state) { if (stream.peek() === "}") { stream.next(); state.tokenizer = currentTokenizer; return "operator"; } else { return tokenBase(stream, state); } }; } function indent(state) { if (state.indentCount == 0) { state.indentCount++; var lastScopeOffset = state.scopes[0].offset; var currentOffset = lastScopeOffset + config.indentUnit; state.scopes.unshift({ offset:currentOffset }); } } function dedent(state) { if (state.scopes.length == 1) { return true; } state.scopes.shift(); } }); // https://developer.mozilla.org/en-US/docs/Web/HTML/Element var cssTypeSelectors_ = ["a","abbr","address","area","article","aside","audio", "b", "base","bdi","bdo","bgsound","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","keygen","label","legend","li","link","main","map","mark","marquee","menu","menuitem","meta","meter","nav","nobr","noframes","noscript","object","ol","optgroup","option","output","p","param","pre","progress","q","rp","rt","ruby","s","samp","script","section","select","small","source","span","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","title","tr","track","u","ul","var","video","wbr"]; // https://github.com/csscomb/csscomb.js/blob/master/config/zen.json var cssProperties_ = ["position","top","right","bottom","left","z-index","display","visibility","flex-direction","flex-order","flex-pack","float","clear","flex-align","overflow","overflow-x","overflow-y","overflow-scrolling","clip","box-sizing","margin","margin-top","margin-right","margin-bottom","margin-left","padding","padding-top","padding-right","padding-bottom","padding-left","min-width","min-height","max-width","max-height","width","height","outline","outline-width","outline-style","outline-color","outline-offset","border","border-spacing","border-collapse","border-width","border-style","border-color","border-top","border-top-width","border-top-style","border-top-color","border-right","border-right-width","border-right-style","border-right-color","border-bottom","border-bottom-width","border-bottom-style","border-bottom-color","border-left","border-left-width","border-left-style","border-left-color","border-radius","border-top-left-radius","border-top-right-radius","border-bottom-right-radius","border-bottom-left-radius","border-image","border-image-source","border-image-slice","border-image-width","border-image-outset","border-image-repeat","border-top-image","border-right-image","border-bottom-image","border-left-image","border-corner-image","border-top-left-image","border-top-right-image","border-bottom-right-image","border-bottom-left-image","background","filter:progid:DXImageTransform\\.Microsoft\\.AlphaImageLoader","background-color","background-image","background-attachment","background-position","background-position-x","background-position-y","background-clip","background-origin","background-size","background-repeat","box-decoration-break","box-shadow","color","table-layout","caption-side","empty-cells","list-style","list-style-position","list-style-type","list-style-image","quotes","content","counter-increment","counter-reset","writing-mode","vertical-align","text-align","text-align-last","text-decoration","text-emphasis","text-emphasis-position","text-emphasis-style","text-emphasis-color","text-indent","-ms-text-justify","text-justify","text-outline","text-transform","text-wrap","text-overflow","text-overflow-ellipsis","text-overflow-mode","text-size-adjust","text-shadow","white-space","word-spacing","word-wrap","word-break","tab-size","hyphens","letter-spacing","font","font-weight","font-style","font-variant","font-size-adjust","font-stretch","font-size","font-family","src","line-height","opacity","filter:\\\\\\\\'progid:DXImageTransform.Microsoft.Alpha","filter:progid:DXImageTransform.Microsoft.Alpha\\(Opacity","interpolation-mode","filter","resize","cursor","nav-index","nav-up","nav-right","nav-down","nav-left","transition","transition-delay","transition-timing-function","transition-duration","transition-property","transform","transform-origin","animation","animation-name","animation-duration","animation-play-state","animation-timing-function","animation-delay","animation-iteration-count","animation-direction","pointer-events","unicode-bidi","direction","columns","column-span","column-width","column-count","column-fill","column-gap","column-rule","column-rule-width","column-rule-style","column-rule-color","break-before","break-inside","break-after","page-break-before","page-break-inside","page-break-after","orphans","widows","zoom","max-zoom","min-zoom","user-zoom","orientation","text-rendering","speak","animation-fill-mode","backface-visibility","user-drag","user-select","appearance"]; // https://github.com/codemirror/CodeMirror/blob/master/mode/css/css.js#L501 var cssValues_ = ["above","absolute","activeborder","activecaption","afar","after-white-space","ahead","alias","all","all-scroll","alternate","always","amharic","amharic-abegede","antialiased","appworkspace","arabic-indic","armenian","asterisks","auto","avoid","avoid-column","avoid-page","avoid-region","background","backwards","baseline","below","bidi-override","binary","bengali","block","block-axis","bold","bolder","border","border-box","both","bottom","break","break-all","break-word","button-bevel","buttonface","buttonhighlight","buttonshadow","buttontext","cambodian","capitalize","caps-lock-indicator","captiontext","caret","cell","center","checkbox","circle","cjk-earthly-branch","cjk-heavenly-stem","cjk-ideographic","clear","clip","close-quote","col-resize","collapse","column","compact","condensed","contain","content","content-box","context-menu","continuous","copy","cover","crop","cross","crosshair","currentcolor","cursive","dashed","decimal","decimal-leading-zero","default","default-button","destination-atop","destination-in","destination-out","destination-over","devanagari","disc","discard","document","dot-dash","dot-dot-dash","dotted","double","down","e-resize","ease","ease-in","ease-in-out","ease-out","element","ellipse","ellipsis","embed","end","ethiopic","ethiopic-abegede","ethiopic-abegede-am-et","ethiopic-abegede-gez","ethiopic-abegede-ti-er","ethiopic-abegede-ti-et","ethiopic-halehame-aa-er","ethiopic-halehame-aa-et","ethiopic-halehame-am-et","ethiopic-halehame-gez","ethiopic-halehame-om-et","ethiopic-halehame-sid-et","ethiopic-halehame-so-et","ethiopic-halehame-ti-er","ethiopic-halehame-ti-et","ethiopic-halehame-tig","ew-resize","expanded","extra-condensed","extra-expanded","fantasy","fast","fill","fixed","flat","footnotes","forwards","from","geometricPrecision","georgian","graytext","groove","gujarati","gurmukhi","hand","hangul","hangul-consonant","hebrew","help","hidden","hide","higher","highlight","highlighttext","hiragana","hiragana-iroha","horizontal","hsl","hsla","icon","ignore","inactiveborder","inactivecaption","inactivecaptiontext","infinite","infobackground","infotext","inherit","initial","inline","inline-axis","inline-block","inline-table","inset","inside","intrinsic","invert","italic","justify","kannada","katakana","katakana-iroha","keep-all","khmer","landscape","lao","large","larger","left","level","lighter","line-through","linear","lines","list-item","listbox","listitem","local","logical","loud","lower","lower-alpha","lower-armenian","lower-greek","lower-hexadecimal","lower-latin","lower-norwegian","lower-roman","lowercase","ltr","malayalam","match","media-controls-background","media-current-time-display","media-fullscreen-button","media-mute-button","media-play-button","media-return-to-realtime-button","media-rewind-button","media-seek-back-button","media-seek-forward-button","media-slider","media-sliderthumb","media-time-remaining-display","media-volume-slider","media-volume-slider-container","media-volume-sliderthumb","medium","menu","menulist","menulist-button","menulist-text","menulist-textfield","menutext","message-box","middle","min-intrinsic","mix","mongolian","monospace","move","multiple","myanmar","n-resize","narrower","ne-resize","nesw-resize","no-close-quote","no-drop","no-open-quote","no-repeat","none","normal","not-allowed","nowrap","ns-resize","nw-resize","nwse-resize","oblique","octal","open-quote","optimizeLegibility","optimizeSpeed","oriya","oromo","outset","outside","outside-shape","overlay","overline","padding","padding-box","painted","page","paused","persian","plus-darker","plus-lighter","pointer","polygon","portrait","pre","pre-line","pre-wrap","preserve-3d","progress","push-button","radio","read-only","read-write","read-write-plaintext-only","rectangle","region","relative","repeat","repeat-x","repeat-y","reset","reverse","rgb","rgba","ridge","right","round","row-resize","rtl","run-in","running","s-resize","sans-serif","scroll","scrollbar","se-resize","searchfield","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","semi-condensed","semi-expanded","separate","serif","show","sidama","single","skip-white-space","slide","slider-horizontal","slider-vertical","sliderthumb-horizontal","sliderthumb-vertical","slow","small-caps","small-caption","smaller","solid","somali","source-atop","source-in","source-out","source-over","space","square","square-button","start","static","status-bar","stretch","stroke","sub","subpixel-antialiased","super","sw-resize","table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row","table-row-group","telugu","text","text-bottom","text-top","textfield","thai","thick","thin","threeddarkshadow","threedface","threedhighlight","threedlightshadow","threedshadow","tibetan","tigre","tigrinya-er","tigrinya-er-abegede","tigrinya-et","tigrinya-et-abegede","to","top","transparent","ultra-condensed","ultra-expanded","underline","up","upper-alpha","upper-armenian","upper-greek","upper-hexadecimal","upper-latin","upper-norwegian","upper-roman","uppercase","urdu","url","vertical","vertical-text","visible","visibleFill","visiblePainted","visibleStroke","visual","w-resize","wait","wave","wider","window","windowframe","windowtext","x-large","x-small","xor","xx-large","xx-small","bicubic","optimizespeed","grayscale"]; var cssColorValues_ = ["aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen"]; var cssValuesWithBrackets_ = ["gradient","linear-gradient","radial-gradient","repeating-linear-gradient","repeating-radial-gradient","cubic-bezier","translateX","translateY","translate3d","rotate3d","scale","scale3d","perspective","skewX"]; var wordOperators = ["in", "and", "or", "not", "is a", "is", "isnt", "defined", "if unless"], commonKeywords = ["for", "if", "else", "unless", "return"], commonAtoms = ["null", "true", "false", "href", "title", "type", "not-allowed", "readonly", "disabled"], commonDef = ["@font-face", "@keyframes", "@media", "@viewport", "@page", "@host", "@supports", "@block", "@css"], cssTypeSelectors = keySet(cssTypeSelectors_), cssProperties = keySet(cssProperties_), cssValues = keySet(cssValues_.concat(cssColorValues_)), hintWords = wordOperators.concat(commonKeywords, commonAtoms, commonDef, cssTypeSelectors_, cssProperties_, cssValues_, cssValuesWithBrackets_, cssColorValues_); function wordRegexp(words) { return new RegExp("^((" + words.join(")|(") + "))\\b"); }; function keySet(array) { var keys = {}; for (var i = 0; i < array.length; ++i) { keys[array[i]] = true; } return keys; }; CodeMirror.registerHelper("hintWords", "stylus", hintWords); CodeMirror.defineMIME("text/x-styl", "stylus"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/tcl/index.html ================================================ CodeMirror: Tcl mode

                  Tcl mode

                  MIME types defined: text/x-tcl.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/tcl/tcl.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE //tcl mode by Ford_Lawnmower :: Based on Velocity mode by Steve O'Hara (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("tcl", function() { function parseWords(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } var keywords = parseWords("Tcl safe after append array auto_execok auto_import auto_load " + "auto_mkindex auto_mkindex_old auto_qualify auto_reset bgerror " + "binary break catch cd close concat continue dde eof encoding error " + "eval exec exit expr fblocked fconfigure fcopy file fileevent filename " + "filename flush for foreach format gets glob global history http if " + "incr info interp join lappend lindex linsert list llength load lrange " + "lreplace lsearch lset lsort memory msgcat namespace open package parray " + "pid pkg::create pkg_mkIndex proc puts pwd re_syntax read regex regexp " + "registry regsub rename resource return scan seek set socket source split " + "string subst switch tcl_endOfWord tcl_findLibrary tcl_startOfNextWord " + "tcl_wordBreakAfter tcl_startOfPreviousWord tcl_wordBreakBefore tcltest " + "tclvars tell time trace unknown unset update uplevel upvar variable " + "vwait"); var functions = parseWords("if elseif else and not or eq ne in ni for foreach while switch"); var isOperatorChar = /[+\-*&%=<>!?^\/\|]/; function chain(stream, state, f) { state.tokenize = f; return f(stream, state); } function tokenBase(stream, state) { var beforeParams = state.beforeParams; state.beforeParams = false; var ch = stream.next(); if ((ch == '"' || ch == "'") && state.inParams) return chain(stream, state, tokenString(ch)); else if (/[\[\]{}\(\),;\.]/.test(ch)) { if (ch == "(" && beforeParams) state.inParams = true; else if (ch == ")") state.inParams = false; return null; } else if (/\d/.test(ch)) { stream.eatWhile(/[\w\.]/); return "number"; } else if (ch == "#" && stream.eat("*")) { return chain(stream, state, tokenComment); } else if (ch == "#" && stream.match(/ *\[ *\[/)) { return chain(stream, state, tokenUnparsed); } else if (ch == "#" && stream.eat("#")) { stream.skipToEnd(); return "comment"; } else if (ch == '"') { stream.skipTo(/"/); return "comment"; } else if (ch == "$") { stream.eatWhile(/[$_a-z0-9A-Z\.{:]/); stream.eatWhile(/}/); state.beforeParams = true; return "builtin"; } else if (isOperatorChar.test(ch)) { stream.eatWhile(isOperatorChar); return "comment"; } else { stream.eatWhile(/[\w\$_{}\xa1-\uffff]/); var word = stream.current().toLowerCase(); if (keywords && keywords.propertyIsEnumerable(word)) return "keyword"; if (functions && functions.propertyIsEnumerable(word)) { state.beforeParams = true; return "keyword"; } return null; } } function tokenString(quote) { return function(stream, state) { var escaped = false, next, end = false; while ((next = stream.next()) != null) { if (next == quote && !escaped) { end = true; break; } escaped = !escaped && next == "\\"; } if (end) state.tokenize = tokenBase; return "string"; }; } function tokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "#" && maybeEnd) { state.tokenize = tokenBase; break; } maybeEnd = (ch == "*"); } return "comment"; } function tokenUnparsed(stream, state) { var maybeEnd = 0, ch; while (ch = stream.next()) { if (ch == "#" && maybeEnd == 2) { state.tokenize = tokenBase; break; } if (ch == "]") maybeEnd++; else if (ch != " ") maybeEnd = 0; } return "meta"; } return { startState: function() { return { tokenize: tokenBase, beforeParams: false, inParams: false }; }, token: function(stream, state) { if (stream.eatSpace()) return null; return state.tokenize(stream, state); } }; }); CodeMirror.defineMIME("text/x-tcl", "tcl"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/textile/index.html ================================================ CodeMirror: Textile mode

                  Textile mode

                  MIME types defined: text/x-textile.

                  Parsing/Highlighting Tests: normal, verbose.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/textile/test.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function() { var mode = CodeMirror.getMode({tabSize: 4}, 'textile'); function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } MT('simpleParagraphs', 'Some text.', '', 'Some more text.'); /* * Phrase Modifiers */ MT('em', 'foo [em _bar_]'); MT('emBoogus', 'code_mirror'); MT('strong', 'foo [strong *bar*]'); MT('strongBogus', '3 * 3 = 9'); MT('italic', 'foo [em __bar__]'); MT('italicBogus', 'code__mirror'); MT('bold', 'foo [strong **bar**]'); MT('boldBogus', '3 ** 3 = 27'); MT('simpleLink', '[link "CodeMirror":http://codemirror.net]'); MT('referenceLink', '[link "CodeMirror":code_mirror]', 'Normal Text.', '[link [[code_mirror]]http://codemirror.net]'); MT('footCite', 'foo bar[qualifier [[1]]]'); MT('footCiteBogus', 'foo bar[[1a2]]'); MT('special-characters', 'Registered [tag (r)], ' + 'Trademark [tag (tm)], and ' + 'Copyright [tag (c)] 2008'); MT('cite', "A book is [keyword ??The Count of Monte Cristo??] by Dumas."); MT('additionAndDeletion', 'The news networks declared [negative -Al Gore-] ' + '[positive +George W. Bush+] the winner in Florida.'); MT('subAndSup', 'f(x, n) = log [builtin ~4~] x [builtin ^n^]'); MT('spanAndCode', 'A [quote %span element%] and [atom @code element@]'); MT('spanBogus', 'Percentage 25% is not a span.'); MT('citeBogus', 'Question? is not a citation.'); MT('codeBogus', 'user@example.com'); MT('subBogus', '~username'); MT('supBogus', 'foo ^ bar'); MT('deletionBogus', '3 - 3 = 0'); MT('additionBogus', '3 + 3 = 6'); MT('image', 'An image: [string !http://www.example.com/image.png!]'); MT('imageWithAltText', 'An image: [string !http://www.example.com/image.png (Alt Text)!]'); MT('imageWithUrl', 'An image: [string !http://www.example.com/image.png!:http://www.example.com/]'); /* * Headers */ MT('h1', '[header&header-1 h1. foo]'); MT('h2', '[header&header-2 h2. foo]'); MT('h3', '[header&header-3 h3. foo]'); MT('h4', '[header&header-4 h4. foo]'); MT('h5', '[header&header-5 h5. foo]'); MT('h6', '[header&header-6 h6. foo]'); MT('h7Bogus', 'h7. foo'); MT('multipleHeaders', '[header&header-1 h1. Heading 1]', '', 'Some text.', '', '[header&header-2 h2. Heading 2]', '', 'More text.'); MT('h1inline', '[header&header-1 h1. foo ][header&header-1&em _bar_][header&header-1 baz]'); /* * Lists */ MT('ul', 'foo', 'bar', '', '[variable-2 * foo]', '[variable-2 * bar]'); MT('ulNoBlank', 'foo', 'bar', '[variable-2 * foo]', '[variable-2 * bar]'); MT('ol', 'foo', 'bar', '', '[variable-2 # foo]', '[variable-2 # bar]'); MT('olNoBlank', 'foo', 'bar', '[variable-2 # foo]', '[variable-2 # bar]'); MT('ulFormatting', '[variable-2 * ][variable-2&em _foo_][variable-2 bar]', '[variable-2 * ][variable-2&strong *][variable-2&em&strong _foo_]' + '[variable-2&strong *][variable-2 bar]', '[variable-2 * ][variable-2&strong *foo*][variable-2 bar]'); MT('olFormatting', '[variable-2 # ][variable-2&em _foo_][variable-2 bar]', '[variable-2 # ][variable-2&strong *][variable-2&em&strong _foo_]' + '[variable-2&strong *][variable-2 bar]', '[variable-2 # ][variable-2&strong *foo*][variable-2 bar]'); MT('ulNested', '[variable-2 * foo]', '[variable-3 ** bar]', '[keyword *** bar]', '[variable-2 **** bar]', '[variable-3 ** bar]'); MT('olNested', '[variable-2 # foo]', '[variable-3 ## bar]', '[keyword ### bar]', '[variable-2 #### bar]', '[variable-3 ## bar]'); MT('ulNestedWithOl', '[variable-2 * foo]', '[variable-3 ## bar]', '[keyword *** bar]', '[variable-2 #### bar]', '[variable-3 ** bar]'); MT('olNestedWithUl', '[variable-2 # foo]', '[variable-3 ** bar]', '[keyword ### bar]', '[variable-2 **** bar]', '[variable-3 ## bar]'); MT('definitionList', '[number - coffee := Hot ][number&em _and_][number black]', '', 'Normal text.'); MT('definitionListSpan', '[number - coffee :=]', '', '[number Hot ][number&em _and_][number black =:]', '', 'Normal text.'); MT('boo', '[number - dog := woof woof]', '[number - cat := meow meow]', '[number - whale :=]', '[number Whale noises.]', '', '[number Also, ][number&em _splashing_][number . =:]'); /* * Attributes */ MT('divWithAttribute', '[punctuation div][punctuation&attribute (#my-id)][punctuation . foo bar]'); MT('divWithAttributeAnd2emRightPadding', '[punctuation div][punctuation&attribute (#my-id)((][punctuation . foo bar]'); MT('divWithClassAndId', '[punctuation div][punctuation&attribute (my-class#my-id)][punctuation . foo bar]'); MT('paragraphWithCss', 'p[attribute {color:red;}]. foo bar'); MT('paragraphNestedStyles', 'p. [strong *foo ][strong&em _bar_][strong *]'); MT('paragraphWithLanguage', 'p[attribute [[fr]]]. Parlez-vous français?'); MT('paragraphLeftAlign', 'p[attribute <]. Left'); MT('paragraphRightAlign', 'p[attribute >]. Right'); MT('paragraphRightAlign', 'p[attribute =]. Center'); MT('paragraphJustified', 'p[attribute <>]. Justified'); MT('paragraphWithLeftIndent1em', 'p[attribute (]. Left'); MT('paragraphWithRightIndent1em', 'p[attribute )]. Right'); MT('paragraphWithLeftIndent2em', 'p[attribute ((]. Left'); MT('paragraphWithRightIndent2em', 'p[attribute ))]. Right'); MT('paragraphWithLeftIndent3emRightIndent2em', 'p[attribute ((())]. Right'); MT('divFormatting', '[punctuation div. ][punctuation&strong *foo ]' + '[punctuation&strong&em _bar_][punctuation&strong *]'); MT('phraseModifierAttributes', 'p[attribute (my-class)]. This is a paragraph that has a class and' + ' this [em _][em&attribute (#special-phrase)][em emphasized phrase_]' + ' has an id.'); MT('linkWithClass', '[link "(my-class). This is a link with class":http://redcloth.org]'); /* * Layouts */ MT('paragraphLayouts', 'p. This is one paragraph.', '', 'p. This is another.'); MT('div', '[punctuation div. foo bar]'); MT('pre', '[operator pre. Text]'); MT('bq.', '[bracket bq. foo bar]', '', 'Normal text.'); MT('footnote', '[variable fn123. foo ][variable&strong *bar*]'); /* * Spanning Layouts */ MT('bq..ThenParagraph', '[bracket bq.. foo bar]', '', '[bracket More quote.]', 'p. Normal Text'); MT('bq..ThenH1', '[bracket bq.. foo bar]', '', '[bracket More quote.]', '[header&header-1 h1. Header Text]'); MT('bc..ThenParagraph', '[atom bc.. # Some ruby code]', '[atom obj = {foo: :bar}]', '[atom puts obj]', '', '[atom obj[[:love]] = "*love*"]', '[atom puts obj.love.upcase]', '', 'p. Normal text.'); MT('fn1..ThenParagraph', '[variable fn1.. foo bar]', '', '[variable More.]', 'p. Normal Text'); MT('pre..ThenParagraph', '[operator pre.. foo bar]', '', '[operator More.]', 'p. Normal Text'); /* * Tables */ MT('table', '[variable-3&operator |_. name |_. age|]', '[variable-3 |][variable-3&strong *Walter*][variable-3 | 5 |]', '[variable-3 |Florence| 6 |]', '', 'p. Normal text.'); MT('tableWithAttributes', '[variable-3&operator |_. name |_. age|]', '[variable-3 |][variable-3&attribute /2.][variable-3 Jim |]', '[variable-3 |][variable-3&attribute \\2{color: red}.][variable-3 Sam |]'); /* * HTML */ MT('html', '[comment
                  ]', '[comment
                  ]', '', '[header&header-1 h1. Welcome]', '', '[variable-2 * Item one]', '[variable-2 * Item two]', '', '[comment Example]', '', '[comment
                  ]', '[comment
                  ]'); MT('inlineHtml', 'I can use HTML directly in my [comment Textile].'); /* * No-Textile */ MT('notextile', '[string-2 notextile. *No* formatting]'); MT('notextileInline', 'Use [string-2 ==*asterisks*==] for [strong *strong*] text.'); MT('notextileWithPre', '[operator pre. *No* formatting]'); MT('notextileWithSpanningPre', '[operator pre.. *No* formatting]', '', '[operator *No* formatting]'); /* Only toggling phrases between non-word chars. */ MT('phrase-in-word', 'foo_bar_baz'); MT('phrase-non-word', '[negative -x-] aaa-bbb ccc-ddd [negative -eee-] fff [negative -ggg-]'); MT('phrase-lone-dash', 'foo - bar - baz'); })(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/textile/textile.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") { // CommonJS mod(require("../../lib/codemirror")); } else if (typeof define == "function" && define.amd) { // AMD define(["../../lib/codemirror"], mod); } else { // Plain browser env mod(CodeMirror); } })(function(CodeMirror) { "use strict"; var TOKEN_STYLES = { addition: "positive", attributes: "attribute", bold: "strong", cite: "keyword", code: "atom", definitionList: "number", deletion: "negative", div: "punctuation", em: "em", footnote: "variable", footCite: "qualifier", header: "header", html: "comment", image: "string", italic: "em", link: "link", linkDefinition: "link", list1: "variable-2", list2: "variable-3", list3: "keyword", notextile: "string-2", pre: "operator", p: "property", quote: "bracket", span: "quote", specialChar: "tag", strong: "strong", sub: "builtin", sup: "builtin", table: "variable-3", tableHeading: "operator" }; function startNewLine(stream, state) { state.mode = Modes.newLayout; state.tableHeading = false; if (state.layoutType === "definitionList" && state.spanningLayout && stream.match(RE("definitionListEnd"), false)) state.spanningLayout = false; } function handlePhraseModifier(stream, state, ch) { if (ch === "_") { if (stream.eat("_")) return togglePhraseModifier(stream, state, "italic", /__/, 2); else return togglePhraseModifier(stream, state, "em", /_/, 1); } if (ch === "*") { if (stream.eat("*")) { return togglePhraseModifier(stream, state, "bold", /\*\*/, 2); } return togglePhraseModifier(stream, state, "strong", /\*/, 1); } if (ch === "[") { if (stream.match(/\d+\]/)) state.footCite = true; return tokenStyles(state); } if (ch === "(") { var spec = stream.match(/^(r|tm|c)\)/); if (spec) return tokenStylesWith(state, TOKEN_STYLES.specialChar); } if (ch === "<" && stream.match(/(\w+)[^>]+>[^<]+<\/\1>/)) return tokenStylesWith(state, TOKEN_STYLES.html); if (ch === "?" && stream.eat("?")) return togglePhraseModifier(stream, state, "cite", /\?\?/, 2); if (ch === "=" && stream.eat("=")) return togglePhraseModifier(stream, state, "notextile", /==/, 2); if (ch === "-" && !stream.eat("-")) return togglePhraseModifier(stream, state, "deletion", /-/, 1); if (ch === "+") return togglePhraseModifier(stream, state, "addition", /\+/, 1); if (ch === "~") return togglePhraseModifier(stream, state, "sub", /~/, 1); if (ch === "^") return togglePhraseModifier(stream, state, "sup", /\^/, 1); if (ch === "%") return togglePhraseModifier(stream, state, "span", /%/, 1); if (ch === "@") return togglePhraseModifier(stream, state, "code", /@/, 1); if (ch === "!") { var type = togglePhraseModifier(stream, state, "image", /(?:\([^\)]+\))?!/, 1); stream.match(/^:\S+/); // optional Url portion return type; } return tokenStyles(state); } function togglePhraseModifier(stream, state, phraseModifier, closeRE, openSize) { var charBefore = stream.pos > openSize ? stream.string.charAt(stream.pos - openSize - 1) : null; var charAfter = stream.peek(); if (state[phraseModifier]) { if ((!charAfter || /\W/.test(charAfter)) && charBefore && /\S/.test(charBefore)) { var type = tokenStyles(state); state[phraseModifier] = false; return type; } } else if ((!charBefore || /\W/.test(charBefore)) && charAfter && /\S/.test(charAfter) && stream.match(new RegExp("^.*\\S" + closeRE.source + "(?:\\W|$)"), false)) { state[phraseModifier] = true; state.mode = Modes.attributes; } return tokenStyles(state); }; function tokenStyles(state) { var disabled = textileDisabled(state); if (disabled) return disabled; var styles = []; if (state.layoutType) styles.push(TOKEN_STYLES[state.layoutType]); styles = styles.concat(activeStyles( state, "addition", "bold", "cite", "code", "deletion", "em", "footCite", "image", "italic", "link", "span", "strong", "sub", "sup", "table", "tableHeading")); if (state.layoutType === "header") styles.push(TOKEN_STYLES.header + "-" + state.header); return styles.length ? styles.join(" ") : null; } function textileDisabled(state) { var type = state.layoutType; switch(type) { case "notextile": case "code": case "pre": return TOKEN_STYLES[type]; default: if (state.notextile) return TOKEN_STYLES.notextile + (type ? (" " + TOKEN_STYLES[type]) : ""); return null; } } function tokenStylesWith(state, extraStyles) { var disabled = textileDisabled(state); if (disabled) return disabled; var type = tokenStyles(state); if (extraStyles) return type ? (type + " " + extraStyles) : extraStyles; else return type; } function activeStyles(state) { var styles = []; for (var i = 1; i < arguments.length; ++i) { if (state[arguments[i]]) styles.push(TOKEN_STYLES[arguments[i]]); } return styles; } function blankLine(state) { var spanningLayout = state.spanningLayout, type = state.layoutType; for (var key in state) if (state.hasOwnProperty(key)) delete state[key]; state.mode = Modes.newLayout; if (spanningLayout) { state.layoutType = type; state.spanningLayout = true; } } var REs = { cache: {}, single: { bc: "bc", bq: "bq", definitionList: /- [^(?::=)]+:=+/, definitionListEnd: /.*=:\s*$/, div: "div", drawTable: /\|.*\|/, foot: /fn\d+/, header: /h[1-6]/, html: /\s*<(?:\/)?(\w+)(?:[^>]+)?>(?:[^<]+<\/\1>)?/, link: /[^"]+":\S/, linkDefinition: /\[[^\s\]]+\]\S+/, list: /(?:#+|\*+)/, notextile: "notextile", para: "p", pre: "pre", table: "table", tableCellAttributes: /[\/\\]\d+/, tableHeading: /\|_\./, tableText: /[^"_\*\[\(\?\+~\^%@|-]+/, text: /[^!"_=\*\[\(<\?\+~\^%@-]+/ }, attributes: { align: /(?:<>|<|>|=)/, selector: /\([^\(][^\)]+\)/, lang: /\[[^\[\]]+\]/, pad: /(?:\(+|\)+){1,2}/, css: /\{[^\}]+\}/ }, createRe: function(name) { switch (name) { case "drawTable": return REs.makeRe("^", REs.single.drawTable, "$"); case "html": return REs.makeRe("^", REs.single.html, "(?:", REs.single.html, ")*", "$"); case "linkDefinition": return REs.makeRe("^", REs.single.linkDefinition, "$"); case "listLayout": return REs.makeRe("^", REs.single.list, RE("allAttributes"), "*\\s+"); case "tableCellAttributes": return REs.makeRe("^", REs.choiceRe(REs.single.tableCellAttributes, RE("allAttributes")), "+\\."); case "type": return REs.makeRe("^", RE("allTypes")); case "typeLayout": return REs.makeRe("^", RE("allTypes"), RE("allAttributes"), "*\\.\\.?", "(\\s+|$)"); case "attributes": return REs.makeRe("^", RE("allAttributes"), "+"); case "allTypes": return REs.choiceRe(REs.single.div, REs.single.foot, REs.single.header, REs.single.bc, REs.single.bq, REs.single.notextile, REs.single.pre, REs.single.table, REs.single.para); case "allAttributes": return REs.choiceRe(REs.attributes.selector, REs.attributes.css, REs.attributes.lang, REs.attributes.align, REs.attributes.pad); default: return REs.makeRe("^", REs.single[name]); } }, makeRe: function() { var pattern = ""; for (var i = 0; i < arguments.length; ++i) { var arg = arguments[i]; pattern += (typeof arg === "string") ? arg : arg.source; } return new RegExp(pattern); }, choiceRe: function() { var parts = [arguments[0]]; for (var i = 1; i < arguments.length; ++i) { parts[i * 2 - 1] = "|"; parts[i * 2] = arguments[i]; } parts.unshift("(?:"); parts.push(")"); return REs.makeRe.apply(null, parts); } }; function RE(name) { return (REs.cache[name] || (REs.cache[name] = REs.createRe(name))); } var Modes = { newLayout: function(stream, state) { if (stream.match(RE("typeLayout"), false)) { state.spanningLayout = false; return (state.mode = Modes.blockType)(stream, state); } var newMode; if (!textileDisabled(state)) { if (stream.match(RE("listLayout"), false)) newMode = Modes.list; else if (stream.match(RE("drawTable"), false)) newMode = Modes.table; else if (stream.match(RE("linkDefinition"), false)) newMode = Modes.linkDefinition; else if (stream.match(RE("definitionList"))) newMode = Modes.definitionList; else if (stream.match(RE("html"), false)) newMode = Modes.html; } return (state.mode = (newMode || Modes.text))(stream, state); }, blockType: function(stream, state) { var match, type; state.layoutType = null; if (match = stream.match(RE("type"))) type = match[0]; else return (state.mode = Modes.text)(stream, state); if (match = type.match(RE("header"))) { state.layoutType = "header"; state.header = parseInt(match[0][1]); } else if (type.match(RE("bq"))) { state.layoutType = "quote"; } else if (type.match(RE("bc"))) { state.layoutType = "code"; } else if (type.match(RE("foot"))) { state.layoutType = "footnote"; } else if (type.match(RE("notextile"))) { state.layoutType = "notextile"; } else if (type.match(RE("pre"))) { state.layoutType = "pre"; } else if (type.match(RE("div"))) { state.layoutType = "div"; } else if (type.match(RE("table"))) { state.layoutType = "table"; } state.mode = Modes.attributes; return tokenStyles(state); }, text: function(stream, state) { if (stream.match(RE("text"))) return tokenStyles(state); var ch = stream.next(); if (ch === '"') return (state.mode = Modes.link)(stream, state); return handlePhraseModifier(stream, state, ch); }, attributes: function(stream, state) { state.mode = Modes.layoutLength; if (stream.match(RE("attributes"))) return tokenStylesWith(state, TOKEN_STYLES.attributes); else return tokenStyles(state); }, layoutLength: function(stream, state) { if (stream.eat(".") && stream.eat(".")) state.spanningLayout = true; state.mode = Modes.text; return tokenStyles(state); }, list: function(stream, state) { var match = stream.match(RE("list")); state.listDepth = match[0].length; var listMod = (state.listDepth - 1) % 3; if (!listMod) state.layoutType = "list1"; else if (listMod === 1) state.layoutType = "list2"; else state.layoutType = "list3"; state.mode = Modes.attributes; return tokenStyles(state); }, link: function(stream, state) { state.mode = Modes.text; if (stream.match(RE("link"))) { stream.match(/\S+/); return tokenStylesWith(state, TOKEN_STYLES.link); } return tokenStyles(state); }, linkDefinition: function(stream, state) { stream.skipToEnd(); return tokenStylesWith(state, TOKEN_STYLES.linkDefinition); }, definitionList: function(stream, state) { stream.match(RE("definitionList")); state.layoutType = "definitionList"; if (stream.match(/\s*$/)) state.spanningLayout = true; else state.mode = Modes.attributes; return tokenStyles(state); }, html: function(stream, state) { stream.skipToEnd(); return tokenStylesWith(state, TOKEN_STYLES.html); }, table: function(stream, state) { state.layoutType = "table"; return (state.mode = Modes.tableCell)(stream, state); }, tableCell: function(stream, state) { if (stream.match(RE("tableHeading"))) state.tableHeading = true; else stream.eat("|"); state.mode = Modes.tableCellAttributes; return tokenStyles(state); }, tableCellAttributes: function(stream, state) { state.mode = Modes.tableText; if (stream.match(RE("tableCellAttributes"))) return tokenStylesWith(state, TOKEN_STYLES.attributes); else return tokenStyles(state); }, tableText: function(stream, state) { if (stream.match(RE("tableText"))) return tokenStyles(state); if (stream.peek() === "|") { // end of cell state.mode = Modes.tableCell; return tokenStyles(state); } return handlePhraseModifier(stream, state, stream.next()); } }; CodeMirror.defineMode("textile", function() { return { startState: function() { return { mode: Modes.newLayout }; }, token: function(stream, state) { if (stream.sol()) startNewLine(stream, state); return state.mode(stream, state); }, blankLine: blankLine }; }); CodeMirror.defineMIME("text/x-textile", "textile"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/tiddlywiki/index.html ================================================ CodeMirror: TiddlyWiki mode

                  TiddlyWiki mode

                  TiddlyWiki mode supports a single configuration.

                  MIME types defined: text/x-tiddlywiki.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/tiddlywiki/tiddlywiki.css ================================================ span.cm-underlined { text-decoration: underline; } span.cm-strikethrough { text-decoration: line-through; } span.cm-brace { color: #170; font-weight: bold; } span.cm-table { color: blue; font-weight: bold; } ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/tiddlywiki/tiddlywiki.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE /*** |''Name''|tiddlywiki.js| |''Description''|Enables TiddlyWikiy syntax highlighting using CodeMirror| |''Author''|PMario| |''Version''|0.1.7| |''Status''|''stable''| |''Source''|[[GitHub|https://github.com/pmario/CodeMirror2/blob/tw-syntax/mode/tiddlywiki]]| |''Documentation''|http://codemirror.tiddlyspace.com/| |''License''|[[MIT License|http://www.opensource.org/licenses/mit-license.php]]| |''CoreVersion''|2.5.0| |''Requires''|codemirror.js| |''Keywords''|syntax highlighting color code mirror codemirror| ! Info CoreVersion parameter is needed for TiddlyWiki only! ***/ //{{{ (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("tiddlywiki", function () { // Tokenizer var textwords = {}; var keywords = function () { function kw(type) { return { type: type, style: "macro"}; } return { "allTags": kw('allTags'), "closeAll": kw('closeAll'), "list": kw('list'), "newJournal": kw('newJournal'), "newTiddler": kw('newTiddler'), "permaview": kw('permaview'), "saveChanges": kw('saveChanges'), "search": kw('search'), "slider": kw('slider'), "tabs": kw('tabs'), "tag": kw('tag'), "tagging": kw('tagging'), "tags": kw('tags'), "tiddler": kw('tiddler'), "timeline": kw('timeline'), "today": kw('today'), "version": kw('version'), "option": kw('option'), "with": kw('with'), "filter": kw('filter') }; }(); var isSpaceName = /[\w_\-]/i, reHR = /^\-\-\-\-+$/, //
                  reWikiCommentStart = /^\/\*\*\*$/, // /*** reWikiCommentStop = /^\*\*\*\/$/, // ***/ reBlockQuote = /^<<<$/, reJsCodeStart = /^\/\/\{\{\{$/, // //{{{ js block start reJsCodeStop = /^\/\/\}\}\}$/, // //}}} js stop reXmlCodeStart = /^$/, // xml block start reXmlCodeStop = /^$/, // xml stop reCodeBlockStart = /^\{\{\{$/, // {{{ TW text div block start reCodeBlockStop = /^\}\}\}$/, // }}} TW text stop reUntilCodeStop = /.*?\}\}\}/; function chain(stream, state, f) { state.tokenize = f; return f(stream, state); } // Used as scratch variables to communicate multiple values without // consing up tons of objects. var type, content; function ret(tp, style, cont) { type = tp; content = cont; return style; } function jsTokenBase(stream, state) { var sol = stream.sol(), ch; state.block = false; // indicates the start of a code block. ch = stream.peek(); // don't eat, to make matching simpler // check start of blocks if (sol && /[<\/\*{}\-]/.test(ch)) { if (stream.match(reCodeBlockStart)) { state.block = true; return chain(stream, state, twTokenCode); } if (stream.match(reBlockQuote)) { return ret('quote', 'quote'); } if (stream.match(reWikiCommentStart) || stream.match(reWikiCommentStop)) { return ret('code', 'comment'); } if (stream.match(reJsCodeStart) || stream.match(reJsCodeStop) || stream.match(reXmlCodeStart) || stream.match(reXmlCodeStop)) { return ret('code', 'comment'); } if (stream.match(reHR)) { return ret('hr', 'hr'); } } // sol ch = stream.next(); if (sol && /[\/\*!#;:>|]/.test(ch)) { if (ch == "!") { // tw header stream.skipToEnd(); return ret("header", "header"); } if (ch == "*") { // tw list stream.eatWhile('*'); return ret("list", "comment"); } if (ch == "#") { // tw numbered list stream.eatWhile('#'); return ret("list", "comment"); } if (ch == ";") { // definition list, term stream.eatWhile(';'); return ret("list", "comment"); } if (ch == ":") { // definition list, description stream.eatWhile(':'); return ret("list", "comment"); } if (ch == ">") { // single line quote stream.eatWhile(">"); return ret("quote", "quote"); } if (ch == '|') { return ret('table', 'header'); } } if (ch == '{' && stream.match(/\{\{/)) { return chain(stream, state, twTokenCode); } // rudimentary html:// file:// link matching. TW knows much more ... if (/[hf]/i.test(ch)) { if (/[ti]/i.test(stream.peek()) && stream.match(/\b(ttps?|tp|ile):\/\/[\-A-Z0-9+&@#\/%?=~_|$!:,.;]*[A-Z0-9+&@#\/%=~_|$]/i)) { return ret("link", "link"); } } // just a little string indicator, don't want to have the whole string covered if (ch == '"') { return ret('string', 'string'); } if (ch == '~') { // _no_ CamelCase indicator should be bold return ret('text', 'brace'); } if (/[\[\]]/.test(ch)) { // check for [[..]] if (stream.peek() == ch) { stream.next(); return ret('brace', 'brace'); } } if (ch == "@") { // check for space link. TODO fix @@...@@ highlighting stream.eatWhile(isSpaceName); return ret("link", "link"); } if (/\d/.test(ch)) { // numbers stream.eatWhile(/\d/); return ret("number", "number"); } if (ch == "/") { // tw invisible comment if (stream.eat("%")) { return chain(stream, state, twTokenComment); } else if (stream.eat("/")) { // return chain(stream, state, twTokenEm); } } if (ch == "_") { // tw underline if (stream.eat("_")) { return chain(stream, state, twTokenUnderline); } } // strikethrough and mdash handling if (ch == "-") { if (stream.eat("-")) { // if strikethrough looks ugly, change CSS. if (stream.peek() != ' ') return chain(stream, state, twTokenStrike); // mdash if (stream.peek() == ' ') return ret('text', 'brace'); } } if (ch == "'") { // tw bold if (stream.eat("'")) { return chain(stream, state, twTokenStrong); } } if (ch == "<") { // tw macro if (stream.eat("<")) { return chain(stream, state, twTokenMacro); } } else { return ret(ch); } // core macro handling stream.eatWhile(/[\w\$_]/); var word = stream.current(), known = textwords.propertyIsEnumerable(word) && textwords[word]; return known ? ret(known.type, known.style, word) : ret("text", null, word); } // jsTokenBase() // tw invisible comment function twTokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "/" && maybeEnd) { state.tokenize = jsTokenBase; break; } maybeEnd = (ch == "%"); } return ret("comment", "comment"); } // tw strong / bold function twTokenStrong(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "'" && maybeEnd) { state.tokenize = jsTokenBase; break; } maybeEnd = (ch == "'"); } return ret("text", "strong"); } // tw code function twTokenCode(stream, state) { var ch, sb = state.block; if (sb && stream.current()) { return ret("code", "comment"); } if (!sb && stream.match(reUntilCodeStop)) { state.tokenize = jsTokenBase; return ret("code", "comment"); } if (sb && stream.sol() && stream.match(reCodeBlockStop)) { state.tokenize = jsTokenBase; return ret("code", "comment"); } ch = stream.next(); return (sb) ? ret("code", "comment") : ret("code", "comment"); } // tw em / italic function twTokenEm(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "/" && maybeEnd) { state.tokenize = jsTokenBase; break; } maybeEnd = (ch == "/"); } return ret("text", "em"); } // tw underlined text function twTokenUnderline(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "_" && maybeEnd) { state.tokenize = jsTokenBase; break; } maybeEnd = (ch == "_"); } return ret("text", "underlined"); } // tw strike through text looks ugly // change CSS if needed function twTokenStrike(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "-" && maybeEnd) { state.tokenize = jsTokenBase; break; } maybeEnd = (ch == "-"); } return ret("text", "strikethrough"); } // macro function twTokenMacro(stream, state) { var ch, word, known; if (stream.current() == '<<') { return ret('brace', 'macro'); } ch = stream.next(); if (!ch) { state.tokenize = jsTokenBase; return ret(ch); } if (ch == ">") { if (stream.peek() == '>') { stream.next(); state.tokenize = jsTokenBase; return ret("brace", "macro"); } } stream.eatWhile(/[\w\$_]/); word = stream.current(); known = keywords.propertyIsEnumerable(word) && keywords[word]; if (known) { return ret(known.type, known.style, word); } else { return ret("macro", null, word); } } // Interface return { startState: function () { return { tokenize: jsTokenBase, indented: 0, level: 0 }; }, token: function (stream, state) { if (stream.eatSpace()) return null; var style = state.tokenize(stream, state); return style; }, electricChars: "" }; }); CodeMirror.defineMIME("text/x-tiddlywiki", "tiddlywiki"); }); //}}} ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/tiki/index.html ================================================ CodeMirror: Tiki wiki mode

                  Tiki wiki mode

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/tiki/tiki.css ================================================ .cm-tw-syntaxerror { color: #FFF; background-color: #900; } .cm-tw-deleted { text-decoration: line-through; } .cm-tw-header5 { font-weight: bold; } .cm-tw-listitem:first-child { /*Added first child to fix duplicate padding when highlighting*/ padding-left: 10px; } .cm-tw-box { border-top-width: 0px ! important; border-style: solid; border-width: 1px; border-color: inherit; } .cm-tw-underline { text-decoration: underline; } ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/tiki/tiki.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode('tiki', function(config) { function inBlock(style, terminator, returnTokenizer) { return function(stream, state) { while (!stream.eol()) { if (stream.match(terminator)) { state.tokenize = inText; break; } stream.next(); } if (returnTokenizer) state.tokenize = returnTokenizer; return style; }; } function inLine(style) { return function(stream, state) { while(!stream.eol()) { stream.next(); } state.tokenize = inText; return style; }; } function inText(stream, state) { function chain(parser) { state.tokenize = parser; return parser(stream, state); } var sol = stream.sol(); var ch = stream.next(); //non start of line switch (ch) { //switch is generally much faster than if, so it is used here case "{": //plugin stream.eat("/"); stream.eatSpace(); var tagName = ""; var c; while ((c = stream.eat(/[^\s\u00a0=\"\'\/?(}]/))) tagName += c; state.tokenize = inPlugin; return "tag"; break; case "_": //bold if (stream.eat("_")) { return chain(inBlock("strong", "__", inText)); } break; case "'": //italics if (stream.eat("'")) { // Italic text return chain(inBlock("em", "''", inText)); } break; case "(":// Wiki Link if (stream.eat("(")) { return chain(inBlock("variable-2", "))", inText)); } break; case "[":// Weblink return chain(inBlock("variable-3", "]", inText)); break; case "|": //table if (stream.eat("|")) { return chain(inBlock("comment", "||")); } break; case "-": if (stream.eat("=")) {//titleBar return chain(inBlock("header string", "=-", inText)); } else if (stream.eat("-")) {//deleted return chain(inBlock("error tw-deleted", "--", inText)); } break; case "=": //underline if (stream.match("==")) { return chain(inBlock("tw-underline", "===", inText)); } break; case ":": if (stream.eat(":")) { return chain(inBlock("comment", "::")); } break; case "^": //box return chain(inBlock("tw-box", "^")); break; case "~": //np if (stream.match("np~")) { return chain(inBlock("meta", "~/np~")); } break; } //start of line types if (sol) { switch (ch) { case "!": //header at start of line if (stream.match('!!!!!')) { return chain(inLine("header string")); } else if (stream.match('!!!!')) { return chain(inLine("header string")); } else if (stream.match('!!!')) { return chain(inLine("header string")); } else if (stream.match('!!')) { return chain(inLine("header string")); } else { return chain(inLine("header string")); } break; case "*": //unordered list line item, or
                • at start of line case "#": //ordered list line item, or
                • at start of line case "+": //ordered list line item, or
                • at start of line return chain(inLine("tw-listitem bracket")); break; } } //stream.eatWhile(/[&{]/); was eating up plugins, turned off to act less like html and more like tiki return null; } var indentUnit = config.indentUnit; // Return variables for tokenizers var pluginName, type; function inPlugin(stream, state) { var ch = stream.next(); var peek = stream.peek(); if (ch == "}") { state.tokenize = inText; //type = ch == ")" ? "endPlugin" : "selfclosePlugin"; inPlugin return "tag"; } else if (ch == "(" || ch == ")") { return "bracket"; } else if (ch == "=") { type = "equals"; if (peek == ">") { ch = stream.next(); peek = stream.peek(); } //here we detect values directly after equal character with no quotes if (!/[\'\"]/.test(peek)) { state.tokenize = inAttributeNoQuote(); } //end detect values return "operator"; } else if (/[\'\"]/.test(ch)) { state.tokenize = inAttribute(ch); return state.tokenize(stream, state); } else { stream.eatWhile(/[^\s\u00a0=\"\'\/?]/); return "keyword"; } } function inAttribute(quote) { return function(stream, state) { while (!stream.eol()) { if (stream.next() == quote) { state.tokenize = inPlugin; break; } } return "string"; }; } function inAttributeNoQuote() { return function(stream, state) { while (!stream.eol()) { var ch = stream.next(); var peek = stream.peek(); if (ch == " " || ch == "," || /[ )}]/.test(peek)) { state.tokenize = inPlugin; break; } } return "string"; }; } var curState, setStyle; function pass() { for (var i = arguments.length - 1; i >= 0; i--) curState.cc.push(arguments[i]); } function cont() { pass.apply(null, arguments); return true; } function pushContext(pluginName, startOfLine) { var noIndent = curState.context && curState.context.noIndent; curState.context = { prev: curState.context, pluginName: pluginName, indent: curState.indented, startOfLine: startOfLine, noIndent: noIndent }; } function popContext() { if (curState.context) curState.context = curState.context.prev; } function element(type) { if (type == "openPlugin") {curState.pluginName = pluginName; return cont(attributes, endplugin(curState.startOfLine));} else if (type == "closePlugin") { var err = false; if (curState.context) { err = curState.context.pluginName != pluginName; popContext(); } else { err = true; } if (err) setStyle = "error"; return cont(endcloseplugin(err)); } else if (type == "string") { if (!curState.context || curState.context.name != "!cdata") pushContext("!cdata"); if (curState.tokenize == inText) popContext(); return cont(); } else return cont(); } function endplugin(startOfLine) { return function(type) { if ( type == "selfclosePlugin" || type == "endPlugin" ) return cont(); if (type == "endPlugin") {pushContext(curState.pluginName, startOfLine); return cont();} return cont(); }; } function endcloseplugin(err) { return function(type) { if (err) setStyle = "error"; if (type == "endPlugin") return cont(); return pass(); }; } function attributes(type) { if (type == "keyword") {setStyle = "attribute"; return cont(attributes);} if (type == "equals") return cont(attvalue, attributes); return pass(); } function attvalue(type) { if (type == "keyword") {setStyle = "string"; return cont();} if (type == "string") return cont(attvaluemaybe); return pass(); } function attvaluemaybe(type) { if (type == "string") return cont(attvaluemaybe); else return pass(); } return { startState: function() { return {tokenize: inText, cc: [], indented: 0, startOfLine: true, pluginName: null, context: null}; }, token: function(stream, state) { if (stream.sol()) { state.startOfLine = true; state.indented = stream.indentation(); } if (stream.eatSpace()) return null; setStyle = type = pluginName = null; var style = state.tokenize(stream, state); if ((style || type) && style != "comment") { curState = state; while (true) { var comb = state.cc.pop() || element; if (comb(type || style)) break; } } state.startOfLine = false; return setStyle || style; }, indent: function(state, textAfter) { var context = state.context; if (context && context.noIndent) return 0; if (context && /^{\//.test(textAfter)) context = context.prev; while (context && !context.startOfLine) context = context.prev; if (context) return context.indent + indentUnit; else return 0; }, electricChars: "/" }; }); CodeMirror.defineMIME("text/tiki", "tiki"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/toml/index.html ================================================ CodeMirror: TOML Mode

                  TOML Mode

                  The TOML Mode

                  Created by Forbes Lindesay.

                  MIME type defined: text/x-toml.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/toml/toml.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("toml", function () { return { startState: function () { return { inString: false, stringType: "", lhs: true, inArray: 0 }; }, token: function (stream, state) { //check for state changes if (!state.inString && ((stream.peek() == '"') || (stream.peek() == "'"))) { state.stringType = stream.peek(); stream.next(); // Skip quote state.inString = true; // Update state } if (stream.sol() && state.inArray === 0) { state.lhs = true; } //return state if (state.inString) { while (state.inString && !stream.eol()) { if (stream.peek() === state.stringType) { stream.next(); // Skip quote state.inString = false; // Clear flag } else if (stream.peek() === '\\') { stream.next(); stream.next(); } else { stream.match(/^.[^\\\"\']*/); } } return state.lhs ? "property string" : "string"; // Token style } else if (state.inArray && stream.peek() === ']') { stream.next(); state.inArray--; return 'bracket'; } else if (state.lhs && stream.peek() === '[' && stream.skipTo(']')) { stream.next();//skip closing ] // array of objects has an extra open & close [] if (stream.peek() === ']') stream.next(); return "atom"; } else if (stream.peek() === "#") { stream.skipToEnd(); return "comment"; } else if (stream.eatSpace()) { return null; } else if (state.lhs && stream.eatWhile(function (c) { return c != '=' && c != ' '; })) { return "property"; } else if (state.lhs && stream.peek() === "=") { stream.next(); state.lhs = false; return null; } else if (!state.lhs && stream.match(/^\d\d\d\d[\d\-\:\.T]*Z/)) { return 'atom'; //date } else if (!state.lhs && (stream.match('true') || stream.match('false'))) { return 'atom'; } else if (!state.lhs && stream.peek() === '[') { state.inArray++; stream.next(); return 'bracket'; } else if (!state.lhs && stream.match(/^\-?\d+(?:\.\d+)?/)) { return 'number'; } else if (!stream.eatSpace()) { stream.next(); } return null; } }; }); CodeMirror.defineMIME('text/x-toml', 'toml'); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/tornado/index.html ================================================ CodeMirror: Tornado template mode

                  Tornado template mode

                  Mode for HTML with embedded Tornado template markup.

                  MIME types defined: text/x-tornado

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/tornado/tornado.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror"), require("../htmlmixed/htmlmixed"), require("../../addon/mode/overlay")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror", "../htmlmixed/htmlmixed", "../../addon/mode/overlay"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("tornado:inner", function() { var keywords = ["and","as","assert","autoescape","block","break","class","comment","context", "continue","datetime","def","del","elif","else","end","escape","except", "exec","extends","false","finally","for","from","global","if","import","in", "include","is","json_encode","lambda","length","linkify","load","module", "none","not","or","pass","print","put","raise","raw","return","self","set", "squeeze","super","true","try","url_escape","while","with","without","xhtml_escape","yield"]; keywords = new RegExp("^((" + keywords.join(")|(") + "))\\b"); function tokenBase (stream, state) { stream.eatWhile(/[^\{]/); var ch = stream.next(); if (ch == "{") { if (ch = stream.eat(/\{|%|#/)) { state.tokenize = inTag(ch); return "tag"; } } } function inTag (close) { if (close == "{") { close = "}"; } return function (stream, state) { var ch = stream.next(); if ((ch == close) && stream.eat("}")) { state.tokenize = tokenBase; return "tag"; } if (stream.match(keywords)) { return "keyword"; } return close == "#" ? "comment" : "string"; }; } return { startState: function () { return {tokenize: tokenBase}; }, token: function (stream, state) { return state.tokenize(stream, state); } }; }); CodeMirror.defineMode("tornado", function(config) { var htmlBase = CodeMirror.getMode(config, "text/html"); var tornadoInner = CodeMirror.getMode(config, "tornado:inner"); return CodeMirror.overlayMode(htmlBase, tornadoInner); }); CodeMirror.defineMIME("text/x-tornado", "tornado"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/turtle/index.html ================================================ CodeMirror: Turtle mode

                  Turtle mode

                  MIME types defined: text/turtle.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/turtle/turtle.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("turtle", function(config) { var indentUnit = config.indentUnit; var curPunc; function wordRegexp(words) { return new RegExp("^(?:" + words.join("|") + ")$", "i"); } var ops = wordRegexp([]); var keywords = wordRegexp(["@prefix", "@base", "a"]); var operatorChars = /[*+\-<>=&|]/; function tokenBase(stream, state) { var ch = stream.next(); curPunc = null; if (ch == "<" && !stream.match(/^[\s\u00a0=]/, false)) { stream.match(/^[^\s\u00a0>]*>?/); return "atom"; } else if (ch == "\"" || ch == "'") { state.tokenize = tokenLiteral(ch); return state.tokenize(stream, state); } else if (/[{}\(\),\.;\[\]]/.test(ch)) { curPunc = ch; return null; } else if (ch == "#") { stream.skipToEnd(); return "comment"; } else if (operatorChars.test(ch)) { stream.eatWhile(operatorChars); return null; } else if (ch == ":") { return "operator"; } else { stream.eatWhile(/[_\w\d]/); if(stream.peek() == ":") { return "variable-3"; } else { var word = stream.current(); if(keywords.test(word)) { return "meta"; } if(ch >= "A" && ch <= "Z") { return "comment"; } else { return "keyword"; } } var word = stream.current(); if (ops.test(word)) return null; else if (keywords.test(word)) return "meta"; else return "variable"; } } function tokenLiteral(quote) { return function(stream, state) { var escaped = false, ch; while ((ch = stream.next()) != null) { if (ch == quote && !escaped) { state.tokenize = tokenBase; break; } escaped = !escaped && ch == "\\"; } return "string"; }; } function pushContext(state, type, col) { state.context = {prev: state.context, indent: state.indent, col: col, type: type}; } function popContext(state) { state.indent = state.context.indent; state.context = state.context.prev; } return { startState: function() { return {tokenize: tokenBase, context: null, indent: 0, col: 0}; }, token: function(stream, state) { if (stream.sol()) { if (state.context && state.context.align == null) state.context.align = false; state.indent = stream.indentation(); } if (stream.eatSpace()) return null; var style = state.tokenize(stream, state); if (style != "comment" && state.context && state.context.align == null && state.context.type != "pattern") { state.context.align = true; } if (curPunc == "(") pushContext(state, ")", stream.column()); else if (curPunc == "[") pushContext(state, "]", stream.column()); else if (curPunc == "{") pushContext(state, "}", stream.column()); else if (/[\]\}\)]/.test(curPunc)) { while (state.context && state.context.type == "pattern") popContext(state); if (state.context && curPunc == state.context.type) popContext(state); } else if (curPunc == "." && state.context && state.context.type == "pattern") popContext(state); else if (/atom|string|variable/.test(style) && state.context) { if (/[\}\]]/.test(state.context.type)) pushContext(state, "pattern", stream.column()); else if (state.context.type == "pattern" && !state.context.align) { state.context.align = true; state.context.col = stream.column(); } } return style; }, indent: function(state, textAfter) { var firstChar = textAfter && textAfter.charAt(0); var context = state.context; if (/[\]\}]/.test(firstChar)) while (context && context.type == "pattern") context = context.prev; var closing = context && firstChar == context.type; if (!context) return 0; else if (context.type == "pattern") return context.col; else if (context.align) return context.col + (closing ? 0 : 1); else return context.indent + (closing ? 0 : indentUnit); }, lineComment: "#" }; }); CodeMirror.defineMIME("text/turtle", "turtle"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/vb/index.html ================================================ CodeMirror: VB.NET mode

                  VB.NET mode

                  
                    

                  MIME type defined: text/x-vb.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/vb/vb.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("vb", function(conf, parserConf) { var ERRORCLASS = 'error'; function wordRegexp(words) { return new RegExp("^((" + words.join(")|(") + "))\\b", "i"); } var singleOperators = new RegExp("^[\\+\\-\\*/%&\\\\|\\^~<>!]"); var singleDelimiters = new RegExp('^[\\(\\)\\[\\]\\{\\}@,:`=;\\.]'); var doubleOperators = new RegExp("^((==)|(<>)|(<=)|(>=)|(<>)|(<<)|(>>)|(//)|(\\*\\*))"); var doubleDelimiters = new RegExp("^((\\+=)|(\\-=)|(\\*=)|(%=)|(/=)|(&=)|(\\|=)|(\\^=))"); var tripleDelimiters = new RegExp("^((//=)|(>>=)|(<<=)|(\\*\\*=))"); var identifiers = new RegExp("^[_A-Za-z][_A-Za-z0-9]*"); var openingKeywords = ['class','module', 'sub','enum','select','while','if','function', 'get','set','property', 'try']; var middleKeywords = ['else','elseif','case', 'catch']; var endKeywords = ['next','loop']; var wordOperators = wordRegexp(['and', 'or', 'not', 'xor', 'in']); var commonkeywords = ['as', 'dim', 'break', 'continue','optional', 'then', 'until', 'goto', 'byval','byref','new','handles','property', 'return', 'const','private', 'protected', 'friend', 'public', 'shared', 'static', 'true','false']; var commontypes = ['integer','string','double','decimal','boolean','short','char', 'float','single']; var keywords = wordRegexp(commonkeywords); var types = wordRegexp(commontypes); var stringPrefixes = '"'; var opening = wordRegexp(openingKeywords); var middle = wordRegexp(middleKeywords); var closing = wordRegexp(endKeywords); var doubleClosing = wordRegexp(['end']); var doOpening = wordRegexp(['do']); var indentInfo = null; function indent(_stream, state) { state.currentIndent++; } function dedent(_stream, state) { state.currentIndent--; } // tokenizers function tokenBase(stream, state) { if (stream.eatSpace()) { return null; } var ch = stream.peek(); // Handle Comments if (ch === "'") { stream.skipToEnd(); return 'comment'; } // Handle Number Literals if (stream.match(/^((&H)|(&O))?[0-9\.a-f]/i, false)) { var floatLiteral = false; // Floats if (stream.match(/^\d*\.\d+F?/i)) { floatLiteral = true; } else if (stream.match(/^\d+\.\d*F?/)) { floatLiteral = true; } else if (stream.match(/^\.\d+F?/)) { floatLiteral = true; } if (floatLiteral) { // Float literals may be "imaginary" stream.eat(/J/i); return 'number'; } // Integers var intLiteral = false; // Hex if (stream.match(/^&H[0-9a-f]+/i)) { intLiteral = true; } // Octal else if (stream.match(/^&O[0-7]+/i)) { intLiteral = true; } // Decimal else if (stream.match(/^[1-9]\d*F?/)) { // Decimal literals may be "imaginary" stream.eat(/J/i); // TODO - Can you have imaginary longs? intLiteral = true; } // Zero by itself with no other piece of number. else if (stream.match(/^0(?![\dx])/i)) { intLiteral = true; } if (intLiteral) { // Integer literals may be "long" stream.eat(/L/i); return 'number'; } } // Handle Strings if (stream.match(stringPrefixes)) { state.tokenize = tokenStringFactory(stream.current()); return state.tokenize(stream, state); } // Handle operators and Delimiters if (stream.match(tripleDelimiters) || stream.match(doubleDelimiters)) { return null; } if (stream.match(doubleOperators) || stream.match(singleOperators) || stream.match(wordOperators)) { return 'operator'; } if (stream.match(singleDelimiters)) { return null; } if (stream.match(doOpening)) { indent(stream,state); state.doInCurrentLine = true; return 'keyword'; } if (stream.match(opening)) { if (! state.doInCurrentLine) indent(stream,state); else state.doInCurrentLine = false; return 'keyword'; } if (stream.match(middle)) { return 'keyword'; } if (stream.match(doubleClosing)) { dedent(stream,state); dedent(stream,state); return 'keyword'; } if (stream.match(closing)) { dedent(stream,state); return 'keyword'; } if (stream.match(types)) { return 'keyword'; } if (stream.match(keywords)) { return 'keyword'; } if (stream.match(identifiers)) { return 'variable'; } // Handle non-detected items stream.next(); return ERRORCLASS; } function tokenStringFactory(delimiter) { var singleline = delimiter.length == 1; var OUTCLASS = 'string'; return function(stream, state) { while (!stream.eol()) { stream.eatWhile(/[^'"]/); if (stream.match(delimiter)) { state.tokenize = tokenBase; return OUTCLASS; } else { stream.eat(/['"]/); } } if (singleline) { if (parserConf.singleLineStringErrors) { return ERRORCLASS; } else { state.tokenize = tokenBase; } } return OUTCLASS; }; } function tokenLexer(stream, state) { var style = state.tokenize(stream, state); var current = stream.current(); // Handle '.' connected identifiers if (current === '.') { style = state.tokenize(stream, state); current = stream.current(); if (style === 'variable') { return 'variable'; } else { return ERRORCLASS; } } var delimiter_index = '[({'.indexOf(current); if (delimiter_index !== -1) { indent(stream, state ); } if (indentInfo === 'dedent') { if (dedent(stream, state)) { return ERRORCLASS; } } delimiter_index = '])}'.indexOf(current); if (delimiter_index !== -1) { if (dedent(stream, state)) { return ERRORCLASS; } } return style; } var external = { electricChars:"dDpPtTfFeE ", startState: function() { return { tokenize: tokenBase, lastToken: null, currentIndent: 0, nextLineIndent: 0, doInCurrentLine: false }; }, token: function(stream, state) { if (stream.sol()) { state.currentIndent += state.nextLineIndent; state.nextLineIndent = 0; state.doInCurrentLine = 0; } var style = tokenLexer(stream, state); state.lastToken = {style:style, content: stream.current()}; return style; }, indent: function(state, textAfter) { var trueText = textAfter.replace(/^\s+|\s+$/g, '') ; if (trueText.match(closing) || trueText.match(doubleClosing) || trueText.match(middle)) return conf.indentUnit*(state.currentIndent-1); if(state.currentIndent < 0) return 0; return state.currentIndent * conf.indentUnit; } }; return external; }); CodeMirror.defineMIME("text/x-vb", "vb"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/vbscript/index.html ================================================ CodeMirror: VBScript mode

                  VBScript mode

                  MIME types defined: text/vbscript.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/vbscript/vbscript.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE /* For extra ASP classic objects, initialize CodeMirror instance with this option: isASP: true E.G.: var editor = CodeMirror.fromTextArea(document.getElementById("code"), { lineNumbers: true, isASP: true }); */ (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("vbscript", function(conf, parserConf) { var ERRORCLASS = 'error'; function wordRegexp(words) { return new RegExp("^((" + words.join(")|(") + "))\\b", "i"); } var singleOperators = new RegExp("^[\\+\\-\\*/&\\\\\\^<>=]"); var doubleOperators = new RegExp("^((<>)|(<=)|(>=))"); var singleDelimiters = new RegExp('^[\\.,]'); var brakets = new RegExp('^[\\(\\)]'); var identifiers = new RegExp("^[A-Za-z][_A-Za-z0-9]*"); var openingKeywords = ['class','sub','select','while','if','function', 'property', 'with', 'for']; var middleKeywords = ['else','elseif','case']; var endKeywords = ['next','loop','wend']; var wordOperators = wordRegexp(['and', 'or', 'not', 'xor', 'is', 'mod', 'eqv', 'imp']); var commonkeywords = ['dim', 'redim', 'then', 'until', 'randomize', 'byval','byref','new','property', 'exit', 'in', 'const','private', 'public', 'get','set','let', 'stop', 'on error resume next', 'on error goto 0', 'option explicit', 'call', 'me']; //This list was from: http://msdn.microsoft.com/en-us/library/f8tbc79x(v=vs.84).aspx var atomWords = ['true', 'false', 'nothing', 'empty', 'null']; //This list was from: http://msdn.microsoft.com/en-us/library/3ca8tfek(v=vs.84).aspx var builtinFuncsWords = ['abs', 'array', 'asc', 'atn', 'cbool', 'cbyte', 'ccur', 'cdate', 'cdbl', 'chr', 'cint', 'clng', 'cos', 'csng', 'cstr', 'date', 'dateadd', 'datediff', 'datepart', 'dateserial', 'datevalue', 'day', 'escape', 'eval', 'execute', 'exp', 'filter', 'formatcurrency', 'formatdatetime', 'formatnumber', 'formatpercent', 'getlocale', 'getobject', 'getref', 'hex', 'hour', 'inputbox', 'instr', 'instrrev', 'int', 'fix', 'isarray', 'isdate', 'isempty', 'isnull', 'isnumeric', 'isobject', 'join', 'lbound', 'lcase', 'left', 'len', 'loadpicture', 'log', 'ltrim', 'rtrim', 'trim', 'maths', 'mid', 'minute', 'month', 'monthname', 'msgbox', 'now', 'oct', 'replace', 'rgb', 'right', 'rnd', 'round', 'scriptengine', 'scriptenginebuildversion', 'scriptenginemajorversion', 'scriptengineminorversion', 'second', 'setlocale', 'sgn', 'sin', 'space', 'split', 'sqr', 'strcomp', 'string', 'strreverse', 'tan', 'time', 'timer', 'timeserial', 'timevalue', 'typename', 'ubound', 'ucase', 'unescape', 'vartype', 'weekday', 'weekdayname', 'year']; //This list was from: http://msdn.microsoft.com/en-us/library/ydz4cfk3(v=vs.84).aspx var builtinConsts = ['vbBlack', 'vbRed', 'vbGreen', 'vbYellow', 'vbBlue', 'vbMagenta', 'vbCyan', 'vbWhite', 'vbBinaryCompare', 'vbTextCompare', 'vbSunday', 'vbMonday', 'vbTuesday', 'vbWednesday', 'vbThursday', 'vbFriday', 'vbSaturday', 'vbUseSystemDayOfWeek', 'vbFirstJan1', 'vbFirstFourDays', 'vbFirstFullWeek', 'vbGeneralDate', 'vbLongDate', 'vbShortDate', 'vbLongTime', 'vbShortTime', 'vbObjectError', 'vbOKOnly', 'vbOKCancel', 'vbAbortRetryIgnore', 'vbYesNoCancel', 'vbYesNo', 'vbRetryCancel', 'vbCritical', 'vbQuestion', 'vbExclamation', 'vbInformation', 'vbDefaultButton1', 'vbDefaultButton2', 'vbDefaultButton3', 'vbDefaultButton4', 'vbApplicationModal', 'vbSystemModal', 'vbOK', 'vbCancel', 'vbAbort', 'vbRetry', 'vbIgnore', 'vbYes', 'vbNo', 'vbCr', 'VbCrLf', 'vbFormFeed', 'vbLf', 'vbNewLine', 'vbNullChar', 'vbNullString', 'vbTab', 'vbVerticalTab', 'vbUseDefault', 'vbTrue', 'vbFalse', 'vbEmpty', 'vbNull', 'vbInteger', 'vbLong', 'vbSingle', 'vbDouble', 'vbCurrency', 'vbDate', 'vbString', 'vbObject', 'vbError', 'vbBoolean', 'vbVariant', 'vbDataObject', 'vbDecimal', 'vbByte', 'vbArray']; //This list was from: http://msdn.microsoft.com/en-us/library/hkc375ea(v=vs.84).aspx var builtinObjsWords = ['WScript', 'err', 'debug', 'RegExp']; var knownProperties = ['description', 'firstindex', 'global', 'helpcontext', 'helpfile', 'ignorecase', 'length', 'number', 'pattern', 'source', 'value', 'count']; var knownMethods = ['clear', 'execute', 'raise', 'replace', 'test', 'write', 'writeline', 'close', 'open', 'state', 'eof', 'update', 'addnew', 'end', 'createobject', 'quit']; var aspBuiltinObjsWords = ['server', 'response', 'request', 'session', 'application']; var aspKnownProperties = ['buffer', 'cachecontrol', 'charset', 'contenttype', 'expires', 'expiresabsolute', 'isclientconnected', 'pics', 'status', //response 'clientcertificate', 'cookies', 'form', 'querystring', 'servervariables', 'totalbytes', //request 'contents', 'staticobjects', //application 'codepage', 'lcid', 'sessionid', 'timeout', //session 'scripttimeout']; //server var aspKnownMethods = ['addheader', 'appendtolog', 'binarywrite', 'end', 'flush', 'redirect', //response 'binaryread', //request 'remove', 'removeall', 'lock', 'unlock', //application 'abandon', //session 'getlasterror', 'htmlencode', 'mappath', 'transfer', 'urlencode']; //server var knownWords = knownMethods.concat(knownProperties); builtinObjsWords = builtinObjsWords.concat(builtinConsts); if (conf.isASP){ builtinObjsWords = builtinObjsWords.concat(aspBuiltinObjsWords); knownWords = knownWords.concat(aspKnownMethods, aspKnownProperties); }; var keywords = wordRegexp(commonkeywords); var atoms = wordRegexp(atomWords); var builtinFuncs = wordRegexp(builtinFuncsWords); var builtinObjs = wordRegexp(builtinObjsWords); var known = wordRegexp(knownWords); var stringPrefixes = '"'; var opening = wordRegexp(openingKeywords); var middle = wordRegexp(middleKeywords); var closing = wordRegexp(endKeywords); var doubleClosing = wordRegexp(['end']); var doOpening = wordRegexp(['do']); var noIndentWords = wordRegexp(['on error resume next', 'exit']); var comment = wordRegexp(['rem']); function indent(_stream, state) { state.currentIndent++; } function dedent(_stream, state) { state.currentIndent--; } // tokenizers function tokenBase(stream, state) { if (stream.eatSpace()) { return 'space'; //return null; } var ch = stream.peek(); // Handle Comments if (ch === "'") { stream.skipToEnd(); return 'comment'; } if (stream.match(comment)){ stream.skipToEnd(); return 'comment'; } // Handle Number Literals if (stream.match(/^((&H)|(&O))?[0-9\.]/i, false) && !stream.match(/^((&H)|(&O))?[0-9\.]+[a-z_]/i, false)) { var floatLiteral = false; // Floats if (stream.match(/^\d*\.\d+/i)) { floatLiteral = true; } else if (stream.match(/^\d+\.\d*/)) { floatLiteral = true; } else if (stream.match(/^\.\d+/)) { floatLiteral = true; } if (floatLiteral) { // Float literals may be "imaginary" stream.eat(/J/i); return 'number'; } // Integers var intLiteral = false; // Hex if (stream.match(/^&H[0-9a-f]+/i)) { intLiteral = true; } // Octal else if (stream.match(/^&O[0-7]+/i)) { intLiteral = true; } // Decimal else if (stream.match(/^[1-9]\d*F?/)) { // Decimal literals may be "imaginary" stream.eat(/J/i); // TODO - Can you have imaginary longs? intLiteral = true; } // Zero by itself with no other piece of number. else if (stream.match(/^0(?![\dx])/i)) { intLiteral = true; } if (intLiteral) { // Integer literals may be "long" stream.eat(/L/i); return 'number'; } } // Handle Strings if (stream.match(stringPrefixes)) { state.tokenize = tokenStringFactory(stream.current()); return state.tokenize(stream, state); } // Handle operators and Delimiters if (stream.match(doubleOperators) || stream.match(singleOperators) || stream.match(wordOperators)) { return 'operator'; } if (stream.match(singleDelimiters)) { return null; } if (stream.match(brakets)) { return "bracket"; } if (stream.match(noIndentWords)) { state.doInCurrentLine = true; return 'keyword'; } if (stream.match(doOpening)) { indent(stream,state); state.doInCurrentLine = true; return 'keyword'; } if (stream.match(opening)) { if (! state.doInCurrentLine) indent(stream,state); else state.doInCurrentLine = false; return 'keyword'; } if (stream.match(middle)) { return 'keyword'; } if (stream.match(doubleClosing)) { dedent(stream,state); dedent(stream,state); return 'keyword'; } if (stream.match(closing)) { if (! state.doInCurrentLine) dedent(stream,state); else state.doInCurrentLine = false; return 'keyword'; } if (stream.match(keywords)) { return 'keyword'; } if (stream.match(atoms)) { return 'atom'; } if (stream.match(known)) { return 'variable-2'; } if (stream.match(builtinFuncs)) { return 'builtin'; } if (stream.match(builtinObjs)){ return 'variable-2'; } if (stream.match(identifiers)) { return 'variable'; } // Handle non-detected items stream.next(); return ERRORCLASS; } function tokenStringFactory(delimiter) { var singleline = delimiter.length == 1; var OUTCLASS = 'string'; return function(stream, state) { while (!stream.eol()) { stream.eatWhile(/[^'"]/); if (stream.match(delimiter)) { state.tokenize = tokenBase; return OUTCLASS; } else { stream.eat(/['"]/); } } if (singleline) { if (parserConf.singleLineStringErrors) { return ERRORCLASS; } else { state.tokenize = tokenBase; } } return OUTCLASS; }; } function tokenLexer(stream, state) { var style = state.tokenize(stream, state); var current = stream.current(); // Handle '.' connected identifiers if (current === '.') { style = state.tokenize(stream, state); current = stream.current(); if (style && (style.substr(0, 8) === 'variable' || style==='builtin' || style==='keyword')){//|| knownWords.indexOf(current.substring(1)) > -1) { if (style === 'builtin' || style === 'keyword') style='variable'; if (knownWords.indexOf(current.substr(1)) > -1) style='variable-2'; return style; } else { return ERRORCLASS; } } return style; } var external = { electricChars:"dDpPtTfFeE ", startState: function() { return { tokenize: tokenBase, lastToken: null, currentIndent: 0, nextLineIndent: 0, doInCurrentLine: false, ignoreKeyword: false }; }, token: function(stream, state) { if (stream.sol()) { state.currentIndent += state.nextLineIndent; state.nextLineIndent = 0; state.doInCurrentLine = 0; } var style = tokenLexer(stream, state); state.lastToken = {style:style, content: stream.current()}; if (style==='space') style=null; return style; }, indent: function(state, textAfter) { var trueText = textAfter.replace(/^\s+|\s+$/g, '') ; if (trueText.match(closing) || trueText.match(doubleClosing) || trueText.match(middle)) return conf.indentUnit*(state.currentIndent-1); if(state.currentIndent < 0) return 0; return state.currentIndent * conf.indentUnit; } }; return external; }); CodeMirror.defineMIME("text/vbscript", "vbscript"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/velocity/index.html ================================================ CodeMirror: Velocity mode

                  Velocity mode

                  MIME types defined: text/velocity.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/velocity/velocity.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("velocity", function() { function parseWords(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } var keywords = parseWords("#end #else #break #stop #[[ #]] " + "#{end} #{else} #{break} #{stop}"); var functions = parseWords("#if #elseif #foreach #set #include #parse #macro #define #evaluate " + "#{if} #{elseif} #{foreach} #{set} #{include} #{parse} #{macro} #{define} #{evaluate}"); var specials = parseWords("$foreach.count $foreach.hasNext $foreach.first $foreach.last $foreach.topmost $foreach.parent.count $foreach.parent.hasNext $foreach.parent.first $foreach.parent.last $foreach.parent $velocityCount $!bodyContent $bodyContent"); var isOperatorChar = /[+\-*&%=<>!?:\/|]/; function chain(stream, state, f) { state.tokenize = f; return f(stream, state); } function tokenBase(stream, state) { var beforeParams = state.beforeParams; state.beforeParams = false; var ch = stream.next(); // start of unparsed string? if ((ch == "'") && state.inParams) { state.lastTokenWasBuiltin = false; return chain(stream, state, tokenString(ch)); } // start of parsed string? else if ((ch == '"')) { state.lastTokenWasBuiltin = false; if (state.inString) { state.inString = false; return "string"; } else if (state.inParams) return chain(stream, state, tokenString(ch)); } // is it one of the special signs []{}().,;? Seperator? else if (/[\[\]{}\(\),;\.]/.test(ch)) { if (ch == "(" && beforeParams) state.inParams = true; else if (ch == ")") { state.inParams = false; state.lastTokenWasBuiltin = true; } return null; } // start of a number value? else if (/\d/.test(ch)) { state.lastTokenWasBuiltin = false; stream.eatWhile(/[\w\.]/); return "number"; } // multi line comment? else if (ch == "#" && stream.eat("*")) { state.lastTokenWasBuiltin = false; return chain(stream, state, tokenComment); } // unparsed content? else if (ch == "#" && stream.match(/ *\[ *\[/)) { state.lastTokenWasBuiltin = false; return chain(stream, state, tokenUnparsed); } // single line comment? else if (ch == "#" && stream.eat("#")) { state.lastTokenWasBuiltin = false; stream.skipToEnd(); return "comment"; } // variable? else if (ch == "$") { stream.eatWhile(/[\w\d\$_\.{}]/); // is it one of the specials? if (specials && specials.propertyIsEnumerable(stream.current())) { return "keyword"; } else { state.lastTokenWasBuiltin = true; state.beforeParams = true; return "builtin"; } } // is it a operator? else if (isOperatorChar.test(ch)) { state.lastTokenWasBuiltin = false; stream.eatWhile(isOperatorChar); return "operator"; } else { // get the whole word stream.eatWhile(/[\w\$_{}@]/); var word = stream.current(); // is it one of the listed keywords? if (keywords && keywords.propertyIsEnumerable(word)) return "keyword"; // is it one of the listed functions? if (functions && functions.propertyIsEnumerable(word) || (stream.current().match(/^#@?[a-z0-9_]+ *$/i) && stream.peek()=="(") && !(functions && functions.propertyIsEnumerable(word.toLowerCase()))) { state.beforeParams = true; state.lastTokenWasBuiltin = false; return "keyword"; } if (state.inString) { state.lastTokenWasBuiltin = false; return "string"; } if (stream.pos > word.length && stream.string.charAt(stream.pos-word.length-1)=="." && state.lastTokenWasBuiltin) return "builtin"; // default: just a "word" state.lastTokenWasBuiltin = false; return null; } } function tokenString(quote) { return function(stream, state) { var escaped = false, next, end = false; while ((next = stream.next()) != null) { if ((next == quote) && !escaped) { end = true; break; } if (quote=='"' && stream.peek() == '$' && !escaped) { state.inString = true; end = true; break; } escaped = !escaped && next == "\\"; } if (end) state.tokenize = tokenBase; return "string"; }; } function tokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "#" && maybeEnd) { state.tokenize = tokenBase; break; } maybeEnd = (ch == "*"); } return "comment"; } function tokenUnparsed(stream, state) { var maybeEnd = 0, ch; while (ch = stream.next()) { if (ch == "#" && maybeEnd == 2) { state.tokenize = tokenBase; break; } if (ch == "]") maybeEnd++; else if (ch != " ") maybeEnd = 0; } return "meta"; } // Interface return { startState: function() { return { tokenize: tokenBase, beforeParams: false, inParams: false, inString: false, lastTokenWasBuiltin: false }; }, token: function(stream, state) { if (stream.eatSpace()) return null; return state.tokenize(stream, state); }, blockCommentStart: "#*", blockCommentEnd: "*#", lineComment: "##", fold: "velocity" }; }); CodeMirror.defineMIME("text/velocity", "velocity"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/verilog/index.html ================================================ CodeMirror: Verilog/SystemVerilog mode

                  SystemVerilog mode

                  Syntax highlighting and indentation for the Verilog and SystemVerilog languages (IEEE 1800).

                  Configuration options:

                  • noIndentKeywords - List of keywords which should not cause identation to increase. E.g. ["package", "module"]. Default: None

                  MIME types defined: text/x-verilog and text/x-systemverilog.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/verilog/test.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function() { var mode = CodeMirror.getMode({indentUnit: 4}, "verilog"); function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } MT("binary_literals", "[number 1'b0]", "[number 1'b1]", "[number 1'bx]", "[number 1'bz]", "[number 1'bX]", "[number 1'bZ]", "[number 1'B0]", "[number 1'B1]", "[number 1'Bx]", "[number 1'Bz]", "[number 1'BX]", "[number 1'BZ]", "[number 1'b0]", "[number 1'b1]", "[number 2'b01]", "[number 2'bxz]", "[number 2'b11]", "[number 2'b10]", "[number 2'b1Z]", "[number 12'b0101_0101_0101]", "[number 1'b 0]", "[number 'b0101]" ); MT("octal_literals", "[number 3'o7]", "[number 3'O7]", "[number 3'so7]", "[number 3'SO7]" ); MT("decimal_literals", "[number 0]", "[number 1]", "[number 7]", "[number 123_456]", "[number 'd33]", "[number 8'd255]", "[number 8'D255]", "[number 8'sd255]", "[number 8'SD255]", "[number 32'd123]", "[number 32 'd123]", "[number 32 'd 123]" ); MT("hex_literals", "[number 4'h0]", "[number 4'ha]", "[number 4'hF]", "[number 4'hx]", "[number 4'hz]", "[number 4'hX]", "[number 4'hZ]", "[number 32'hdc78]", "[number 32'hDC78]", "[number 32 'hDC78]", "[number 32'h DC78]", "[number 32 'h DC78]", "[number 32'h44x7]", "[number 32'hFFF?]" ); MT("real_number_literals", "[number 1.2]", "[number 0.1]", "[number 2394.26331]", "[number 1.2E12]", "[number 1.2e12]", "[number 1.30e-2]", "[number 0.1e-0]", "[number 23E10]", "[number 29E-2]", "[number 236.123_763_e-12]" ); MT("operators", "[meta ^]" ); MT("keywords", "[keyword logic]", "[keyword logic] [variable foo]", "[keyword reg] [variable abc]" ); MT("variables", "[variable _leading_underscore]", "[variable _if]", "[number 12] [variable foo]", "[variable foo] [number 14]" ); MT("tick_defines", "[def `FOO]", "[def `foo]", "[def `FOO_bar]" ); MT("system_calls", "[meta $display]", "[meta $vpi_printf]" ); MT("line_comment", "[comment // Hello world]"); // Alignment tests MT("align_port_map_style1", /** * mod mod(.a(a), * .b(b) * ); */ "[variable mod] [variable mod][bracket (].[variable a][bracket (][variable a][bracket )],", " .[variable b][bracket (][variable b][bracket )]", " [bracket )];", "" ); MT("align_port_map_style2", /** * mod mod( * .a(a), * .b(b) * ); */ "[variable mod] [variable mod][bracket (]", " .[variable a][bracket (][variable a][bracket )],", " .[variable b][bracket (][variable b][bracket )]", "[bracket )];", "" ); // Indentation tests MT("indent_single_statement_if", "[keyword if] [bracket (][variable foo][bracket )]", " [keyword break];", "" ); MT("no_indent_after_single_line_if", "[keyword if] [bracket (][variable foo][bracket )] [keyword break];", "" ); MT("indent_after_if_begin_same_line", "[keyword if] [bracket (][variable foo][bracket )] [keyword begin]", " [keyword break];", " [keyword break];", "[keyword end]", "" ); MT("indent_after_if_begin_next_line", "[keyword if] [bracket (][variable foo][bracket )]", " [keyword begin]", " [keyword break];", " [keyword break];", " [keyword end]", "" ); MT("indent_single_statement_if_else", "[keyword if] [bracket (][variable foo][bracket )]", " [keyword break];", "[keyword else]", " [keyword break];", "" ); MT("indent_if_else_begin_same_line", "[keyword if] [bracket (][variable foo][bracket )] [keyword begin]", " [keyword break];", " [keyword break];", "[keyword end] [keyword else] [keyword begin]", " [keyword break];", " [keyword break];", "[keyword end]", "" ); MT("indent_if_else_begin_next_line", "[keyword if] [bracket (][variable foo][bracket )]", " [keyword begin]", " [keyword break];", " [keyword break];", " [keyword end]", "[keyword else]", " [keyword begin]", " [keyword break];", " [keyword break];", " [keyword end]", "" ); MT("indent_if_nested_without_begin", "[keyword if] [bracket (][variable foo][bracket )]", " [keyword if] [bracket (][variable foo][bracket )]", " [keyword if] [bracket (][variable foo][bracket )]", " [keyword break];", "" ); MT("indent_case", "[keyword case] [bracket (][variable state][bracket )]", " [variable FOO]:", " [keyword break];", " [variable BAR]:", " [keyword break];", "[keyword endcase]", "" ); MT("unindent_after_end_with_preceding_text", "[keyword begin]", " [keyword break]; [keyword end]", "" ); MT("export_function_one_line_does_not_indent", "[keyword export] [string \"DPI-C\"] [keyword function] [variable helloFromSV];", "" ); MT("export_task_one_line_does_not_indent", "[keyword export] [string \"DPI-C\"] [keyword task] [variable helloFromSV];", "" ); MT("export_function_two_lines_indents_properly", "[keyword export]", " [string \"DPI-C\"] [keyword function] [variable helloFromSV];", "" ); MT("export_task_two_lines_indents_properly", "[keyword export]", " [string \"DPI-C\"] [keyword task] [variable helloFromSV];", "" ); MT("import_function_one_line_does_not_indent", "[keyword import] [string \"DPI-C\"] [keyword function] [variable helloFromC];", "" ); MT("import_task_one_line_does_not_indent", "[keyword import] [string \"DPI-C\"] [keyword task] [variable helloFromC];", "" ); MT("import_package_single_line_does_not_indent", "[keyword import] [variable p]::[variable x];", "[keyword import] [variable p]::[variable y];", "" ); MT("covergoup_with_function_indents_properly", "[keyword covergroup] [variable cg] [keyword with] [keyword function] [variable sample][bracket (][keyword bit] [variable b][bracket )];", " [variable c] : [keyword coverpoint] [variable c];", "[keyword endgroup]: [variable cg]", "" ); })(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/verilog/verilog.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("verilog", function(config, parserConfig) { var indentUnit = config.indentUnit, statementIndentUnit = parserConfig.statementIndentUnit || indentUnit, dontAlignCalls = parserConfig.dontAlignCalls, noIndentKeywords = parserConfig.noIndentKeywords || [], multiLineStrings = parserConfig.multiLineStrings, hooks = parserConfig.hooks || {}; function words(str) { var obj = {}, words = str.split(" "); for (var i = 0; i < words.length; ++i) obj[words[i]] = true; return obj; } /** * Keywords from IEEE 1800-2012 */ var keywords = words( "accept_on alias always always_comb always_ff always_latch and assert assign assume automatic before begin bind " + "bins binsof bit break buf bufif0 bufif1 byte case casex casez cell chandle checker class clocking cmos config " + "const constraint context continue cover covergroup coverpoint cross deassign default defparam design disable " + "dist do edge else end endcase endchecker endclass endclocking endconfig endfunction endgenerate endgroup " + "endinterface endmodule endpackage endprimitive endprogram endproperty endspecify endsequence endtable endtask " + "enum event eventually expect export extends extern final first_match for force foreach forever fork forkjoin " + "function generate genvar global highz0 highz1 if iff ifnone ignore_bins illegal_bins implements implies import " + "incdir include initial inout input inside instance int integer interconnect interface intersect join join_any " + "join_none large let liblist library local localparam logic longint macromodule matches medium modport module " + "nand negedge nettype new nexttime nmos nor noshowcancelled not notif0 notif1 null or output package packed " + "parameter pmos posedge primitive priority program property protected pull0 pull1 pulldown pullup " + "pulsestyle_ondetect pulsestyle_onevent pure rand randc randcase randsequence rcmos real realtime ref reg " + "reject_on release repeat restrict return rnmos rpmos rtran rtranif0 rtranif1 s_always s_eventually s_nexttime " + "s_until s_until_with scalared sequence shortint shortreal showcancelled signed small soft solve specify " + "specparam static string strong strong0 strong1 struct super supply0 supply1 sync_accept_on sync_reject_on " + "table tagged task this throughout time timeprecision timeunit tran tranif0 tranif1 tri tri0 tri1 triand trior " + "trireg type typedef union unique unique0 unsigned until until_with untyped use uwire var vectored virtual void " + "wait wait_order wand weak weak0 weak1 while wildcard wire with within wor xnor xor"); /** Operators from IEEE 1800-2012 unary_operator ::= + | - | ! | ~ | & | ~& | | | ~| | ^ | ~^ | ^~ binary_operator ::= + | - | * | / | % | == | != | === | !== | ==? | !=? | && | || | ** | < | <= | > | >= | & | | | ^ | ^~ | ~^ | >> | << | >>> | <<< | -> | <-> inc_or_dec_operator ::= ++ | -- unary_module_path_operator ::= ! | ~ | & | ~& | | | ~| | ^ | ~^ | ^~ binary_module_path_operator ::= == | != | && | || | & | | | ^ | ^~ | ~^ */ var isOperatorChar = /[\+\-\*\/!~&|^%=?:]/; var isBracketChar = /[\[\]{}()]/; var unsignedNumber = /\d[0-9_]*/; var decimalLiteral = /\d*\s*'s?d\s*\d[0-9_]*/i; var binaryLiteral = /\d*\s*'s?b\s*[xz01][xz01_]*/i; var octLiteral = /\d*\s*'s?o\s*[xz0-7][xz0-7_]*/i; var hexLiteral = /\d*\s*'s?h\s*[0-9a-fxz?][0-9a-fxz?_]*/i; var realLiteral = /(\d[\d_]*(\.\d[\d_]*)?E-?[\d_]+)|(\d[\d_]*\.\d[\d_]*)/i; var closingBracketOrWord = /^((\w+)|[)}\]])/; var closingBracket = /[)}\]]/; var curPunc; var curKeyword; // Block openings which are closed by a matching keyword in the form of ("end" + keyword) // E.g. "task" => "endtask" var blockKeywords = words( "case checker class clocking config function generate interface module package" + "primitive program property specify sequence table task" ); // Opening/closing pairs var openClose = {}; for (var keyword in blockKeywords) { openClose[keyword] = "end" + keyword; } openClose["begin"] = "end"; openClose["casex"] = "endcase"; openClose["casez"] = "endcase"; openClose["do" ] = "while"; openClose["fork" ] = "join;join_any;join_none"; openClose["covergroup"] = "endgroup"; for (var i in noIndentKeywords) { var keyword = noIndentKeywords[i]; if (openClose[keyword]) { openClose[keyword] = undefined; } } // Keywords which open statements that are ended with a semi-colon var statementKeywords = words("always always_comb always_ff always_latch assert assign assume else export for foreach forever if import initial repeat while"); function tokenBase(stream, state) { var ch = stream.peek(), style; if (hooks[ch] && (style = hooks[ch](stream, state)) != false) return style; if (hooks.tokenBase && (style = hooks.tokenBase(stream, state)) != false) return style; if (/[,;:\.]/.test(ch)) { curPunc = stream.next(); return null; } if (isBracketChar.test(ch)) { curPunc = stream.next(); return "bracket"; } // Macros (tick-defines) if (ch == '`') { stream.next(); if (stream.eatWhile(/[\w\$_]/)) { return "def"; } else { return null; } } // System calls if (ch == '$') { stream.next(); if (stream.eatWhile(/[\w\$_]/)) { return "meta"; } else { return null; } } // Time literals if (ch == '#') { stream.next(); stream.eatWhile(/[\d_.]/); return "def"; } // Strings if (ch == '"') { stream.next(); state.tokenize = tokenString(ch); return state.tokenize(stream, state); } // Comments if (ch == "/") { stream.next(); if (stream.eat("*")) { state.tokenize = tokenComment; return tokenComment(stream, state); } if (stream.eat("/")) { stream.skipToEnd(); return "comment"; } stream.backUp(1); } // Numeric literals if (stream.match(realLiteral) || stream.match(decimalLiteral) || stream.match(binaryLiteral) || stream.match(octLiteral) || stream.match(hexLiteral) || stream.match(unsignedNumber) || stream.match(realLiteral)) { return "number"; } // Operators if (stream.eatWhile(isOperatorChar)) { return "meta"; } // Keywords / plain variables if (stream.eatWhile(/[\w\$_]/)) { var cur = stream.current(); if (keywords[cur]) { if (openClose[cur]) { curPunc = "newblock"; } if (statementKeywords[cur]) { curPunc = "newstatement"; } curKeyword = cur; return "keyword"; } return "variable"; } stream.next(); return null; } function tokenString(quote) { return function(stream, state) { var escaped = false, next, end = false; while ((next = stream.next()) != null) { if (next == quote && !escaped) {end = true; break;} escaped = !escaped && next == "\\"; } if (end || !(escaped || multiLineStrings)) state.tokenize = tokenBase; return "string"; }; } function tokenComment(stream, state) { var maybeEnd = false, ch; while (ch = stream.next()) { if (ch == "/" && maybeEnd) { state.tokenize = tokenBase; break; } maybeEnd = (ch == "*"); } return "comment"; } function Context(indented, column, type, align, prev) { this.indented = indented; this.column = column; this.type = type; this.align = align; this.prev = prev; } function pushContext(state, col, type) { var indent = state.indented; var c = new Context(indent, col, type, null, state.context); return state.context = c; } function popContext(state) { var t = state.context.type; if (t == ")" || t == "]" || t == "}") { state.indented = state.context.indented; } return state.context = state.context.prev; } function isClosing(text, contextClosing) { if (text == contextClosing) { return true; } else { // contextClosing may be mulitple keywords separated by ; var closingKeywords = contextClosing.split(";"); for (var i in closingKeywords) { if (text == closingKeywords[i]) { return true; } } return false; } } function buildElectricInputRegEx() { // Reindentation should occur on any bracket char: {}()[] // or on a match of any of the block closing keywords, at // the end of a line var allClosings = []; for (var i in openClose) { if (openClose[i]) { var closings = openClose[i].split(";"); for (var j in closings) { allClosings.push(closings[j]); } } } var re = new RegExp("[{}()\\[\\]]|(" + allClosings.join("|") + ")$"); return re; } // Interface return { // Regex to force current line to reindent electricInput: buildElectricInputRegEx(), startState: function(basecolumn) { var state = { tokenize: null, context: new Context((basecolumn || 0) - indentUnit, 0, "top", false), indented: 0, startOfLine: true }; if (hooks.startState) hooks.startState(state); return state; }, token: function(stream, state) { var ctx = state.context; if (stream.sol()) { if (ctx.align == null) ctx.align = false; state.indented = stream.indentation(); state.startOfLine = true; } if (hooks.token) hooks.token(stream, state); if (stream.eatSpace()) return null; curPunc = null; curKeyword = null; var style = (state.tokenize || tokenBase)(stream, state); if (style == "comment" || style == "meta" || style == "variable") return style; if (ctx.align == null) ctx.align = true; if (curPunc == ctx.type) { popContext(state); } else if ((curPunc == ";" && ctx.type == "statement") || (ctx.type && isClosing(curKeyword, ctx.type))) { ctx = popContext(state); while (ctx && ctx.type == "statement") ctx = popContext(state); } else if (curPunc == "{") { pushContext(state, stream.column(), "}"); } else if (curPunc == "[") { pushContext(state, stream.column(), "]"); } else if (curPunc == "(") { pushContext(state, stream.column(), ")"); } else if (ctx && ctx.type == "endcase" && curPunc == ":") { pushContext(state, stream.column(), "statement"); } else if (curPunc == "newstatement") { pushContext(state, stream.column(), "statement"); } else if (curPunc == "newblock") { if (curKeyword == "function" && ctx && (ctx.type == "statement" || ctx.type == "endgroup")) { // The 'function' keyword can appear in some other contexts where it actually does not // indicate a function (import/export DPI and covergroup definitions). // Do nothing in this case } else if (curKeyword == "task" && ctx && ctx.type == "statement") { // Same thing for task } else { var close = openClose[curKeyword]; pushContext(state, stream.column(), close); } } state.startOfLine = false; return style; }, indent: function(state, textAfter) { if (state.tokenize != tokenBase && state.tokenize != null) return CodeMirror.Pass; if (hooks.indent) { var fromHook = hooks.indent(state); if (fromHook >= 0) return fromHook; } var ctx = state.context, firstChar = textAfter && textAfter.charAt(0); if (ctx.type == "statement" && firstChar == "}") ctx = ctx.prev; var closing = false; var possibleClosing = textAfter.match(closingBracketOrWord); if (possibleClosing) closing = isClosing(possibleClosing[0], ctx.type); if (ctx.type == "statement") return ctx.indented + (firstChar == "{" ? 0 : statementIndentUnit); else if (closingBracket.test(ctx.type) && ctx.align && !dontAlignCalls) return ctx.column + (closing ? 0 : 1); else if (ctx.type == ")" && !closing) return ctx.indented + statementIndentUnit; else return ctx.indented + (closing ? 0 : indentUnit); }, blockCommentStart: "/*", blockCommentEnd: "*/", lineComment: "//" }; }); CodeMirror.defineMIME("text/x-verilog", { name: "verilog" }); CodeMirror.defineMIME("text/x-systemverilog", { name: "verilog" }); // SVXVerilog mode var svxchScopePrefixes = { ">": "property", "->": "property", "-": "hr", "|": "link", "?$": "qualifier", "?*": "qualifier", "@-": "variable-3", "@": "variable-3", "?": "qualifier" }; function svxGenIndent(stream, state) { var svxindentUnit = 2; var rtnIndent = -1, indentUnitRq = 0, curIndent = stream.indentation(); switch (state.svxCurCtlFlowChar) { case "\\": curIndent = 0; break; case "|": if (state.svxPrevPrevCtlFlowChar == "@") { indentUnitRq = -2; //-2 new pipe rq after cur pipe break; } if (svxchScopePrefixes[state.svxPrevCtlFlowChar]) indentUnitRq = 1; // +1 new scope break; case "M": // m4 if (state.svxPrevPrevCtlFlowChar == "@") { indentUnitRq = -2; //-2 new inst rq after pipe break; } if (svxchScopePrefixes[state.svxPrevCtlFlowChar]) indentUnitRq = 1; // +1 new scope break; case "@": if (state.svxPrevCtlFlowChar == "S") indentUnitRq = -1; // new pipe stage after stmts if (state.svxPrevCtlFlowChar == "|") indentUnitRq = 1; // 1st pipe stage break; case "S": if (state.svxPrevCtlFlowChar == "@") indentUnitRq = 1; // flow in pipe stage if (svxchScopePrefixes[state.svxPrevCtlFlowChar]) indentUnitRq = 1; // +1 new scope break; } var statementIndentUnit = svxindentUnit; rtnIndent = curIndent + (indentUnitRq*statementIndentUnit); return rtnIndent >= 0 ? rtnIndent : curIndent; } CodeMirror.defineMIME("text/x-svx", { name: "verilog", hooks: { "\\": function(stream, state) { var vxIndent = 0, style = false; var curPunc = stream.string; if ((stream.sol()) && (/\\SV/.test(stream.string))) { curPunc = (/\\SVX_version/.test(stream.string)) ? "\\SVX_version" : stream.string; stream.skipToEnd(); if (curPunc == "\\SV" && state.vxCodeActive) {state.vxCodeActive = false;}; if ((/\\SVX/.test(curPunc) && !state.vxCodeActive) || (curPunc=="\\SVX_version" && state.vxCodeActive)) {state.vxCodeActive = true;}; style = "keyword"; state.svxCurCtlFlowChar = state.svxPrevPrevCtlFlowChar = state.svxPrevCtlFlowChar = ""; if (state.vxCodeActive == true) { state.svxCurCtlFlowChar = "\\"; vxIndent = svxGenIndent(stream, state); } state.vxIndentRq = vxIndent; } return style; }, tokenBase: function(stream, state) { var vxIndent = 0, style = false; var svxisOperatorChar = /[\[\]=:]/; var svxkpScopePrefixs = { "**":"variable-2", "*":"variable-2", "$$":"variable", "$":"variable", "^^":"attribute", "^":"attribute"}; var ch = stream.peek(); var vxCurCtlFlowCharValueAtStart = state.svxCurCtlFlowChar; if (state.vxCodeActive == true) { if (/[\[\]{}\(\);\:]/.test(ch)) { // bypass nesting and 1 char punc style = "meta"; stream.next(); } else if (ch == "/") { stream.next(); if (stream.eat("/")) { stream.skipToEnd(); style = "comment"; state.svxCurCtlFlowChar = "S"; } else { stream.backUp(1); } } else if (ch == "@") { // pipeline stage style = svxchScopePrefixes[ch]; state.svxCurCtlFlowChar = "@"; stream.next(); stream.eatWhile(/[\w\$_]/); } else if (stream.match(/\b[mM]4+/, true)) { // match: function(pattern, consume, caseInsensitive) // m4 pre proc stream.skipTo("("); style = "def"; state.svxCurCtlFlowChar = "M"; } else if (ch == "!" && stream.sol()) { // v stmt in svx region // state.svxCurCtlFlowChar = "S"; style = "comment"; stream.next(); } else if (svxisOperatorChar.test(ch)) { // operators stream.eatWhile(svxisOperatorChar); style = "operator"; } else if (ch == "#") { // phy hier state.svxCurCtlFlowChar = (state.svxCurCtlFlowChar == "") ? ch : state.svxCurCtlFlowChar; stream.next(); stream.eatWhile(/[+-]\d/); style = "tag"; } else if (svxkpScopePrefixs.propertyIsEnumerable(ch)) { // special SVX operators style = svxkpScopePrefixs[ch]; state.svxCurCtlFlowChar = state.svxCurCtlFlowChar == "" ? "S" : state.svxCurCtlFlowChar; // stmt stream.next(); stream.match(/[a-zA-Z_0-9]+/); } else if (style = svxchScopePrefixes[ch] || false) { // special SVX operators state.svxCurCtlFlowChar = state.svxCurCtlFlowChar == "" ? ch : state.svxCurCtlFlowChar; stream.next(); stream.match(/[a-zA-Z_0-9]+/); } if (state.svxCurCtlFlowChar != vxCurCtlFlowCharValueAtStart) { // flow change vxIndent = svxGenIndent(stream, state); state.vxIndentRq = vxIndent; } } return style; }, token: function(stream, state) { if (state.vxCodeActive == true && stream.sol() && state.svxCurCtlFlowChar != "") { state.svxPrevPrevCtlFlowChar = state.svxPrevCtlFlowChar; state.svxPrevCtlFlowChar = state.svxCurCtlFlowChar; state.svxCurCtlFlowChar = ""; } }, indent: function(state) { return (state.vxCodeActive == true) ? state.vxIndentRq : -1; }, startState: function(state) { state.svxCurCtlFlowChar = ""; state.svxPrevCtlFlowChar = ""; state.svxPrevPrevCtlFlowChar = ""; state.vxCodeActive = true; state.vxIndentRq = 0; } } }); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/xml/index.html ================================================ CodeMirror: XML mode

                  XML mode

                  The XML mode supports two configuration parameters:

                  htmlMode (boolean)
                  This switches the mode to parse HTML instead of XML. This means attributes do not have to be quoted, and some elements (such as br) do not require a closing tag.
                  alignCDATA (boolean)
                  Setting this to true will force the opening tag of CDATA blocks to not be indented.

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

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/xml/test.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function() { var mode = CodeMirror.getMode({indentUnit: 2}, "xml"), mname = "xml"; function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1), mname); } MT("matching", "[tag&bracket <][tag top][tag&bracket >]", " text", " [tag&bracket <][tag inner][tag&bracket />]", "[tag&bracket ]"); MT("nonmatching", "[tag&bracket <][tag top][tag&bracket >]", " [tag&bracket <][tag inner][tag&bracket />]", " [tag&bracket ]"); MT("doctype", "[meta ]", "[tag&bracket <][tag top][tag&bracket />]"); MT("cdata", "[tag&bracket <][tag top][tag&bracket >]", " [atom ]", "[tag&bracket ]"); // HTML tests mode = CodeMirror.getMode({indentUnit: 2}, "text/html"); MT("selfclose", "[tag&bracket <][tag html][tag&bracket >]", " [tag&bracket <][tag link] [attribute rel]=[string stylesheet] [attribute href]=[string \"/foobar\"][tag&bracket >]", "[tag&bracket ]"); MT("list", "[tag&bracket <][tag ol][tag&bracket >]", " [tag&bracket <][tag li][tag&bracket >]one", " [tag&bracket <][tag li][tag&bracket >]two", "[tag&bracket ]"); MT("valueless", "[tag&bracket <][tag input] [attribute type]=[string checkbox] [attribute checked][tag&bracket />]"); MT("pThenArticle", "[tag&bracket <][tag p][tag&bracket >]", " foo", "[tag&bracket <][tag article][tag&bracket >]bar"); })(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/xml/xml.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("xml", function(config, parserConfig) { var indentUnit = config.indentUnit; var multilineTagIndentFactor = parserConfig.multilineTagIndentFactor || 1; var multilineTagIndentPastTag = parserConfig.multilineTagIndentPastTag; if (multilineTagIndentPastTag == null) multilineTagIndentPastTag = true; var Kludges = parserConfig.htmlMode ? { autoSelfClosers: {'area': true, 'base': true, 'br': true, 'col': true, 'command': true, 'embed': true, 'frame': true, 'hr': true, 'img': true, 'input': true, 'keygen': true, 'link': true, 'meta': true, 'param': true, 'source': true, 'track': true, 'wbr': true, 'menuitem': true}, implicitlyClosed: {'dd': true, 'li': true, 'optgroup': true, 'option': true, 'p': true, 'rp': true, 'rt': true, 'tbody': true, 'td': true, 'tfoot': true, 'th': true, 'tr': true}, contextGrabbers: { 'dd': {'dd': true, 'dt': true}, 'dt': {'dd': true, 'dt': true}, 'li': {'li': true}, 'option': {'option': true, 'optgroup': true}, 'optgroup': {'optgroup': true}, 'p': {'address': true, 'article': true, 'aside': true, 'blockquote': true, 'dir': true, 'div': true, 'dl': true, 'fieldset': true, 'footer': true, 'form': true, 'h1': true, 'h2': true, 'h3': true, 'h4': true, 'h5': true, 'h6': true, 'header': true, 'hgroup': true, 'hr': true, 'menu': true, 'nav': true, 'ol': true, 'p': true, 'pre': true, 'section': true, 'table': true, 'ul': true}, 'rp': {'rp': true, 'rt': true}, 'rt': {'rp': true, 'rt': true}, 'tbody': {'tbody': true, 'tfoot': true}, 'td': {'td': true, 'th': true}, 'tfoot': {'tbody': true}, 'th': {'td': true, 'th': true}, 'thead': {'tbody': true, 'tfoot': true}, 'tr': {'tr': true} }, doNotIndent: {"pre": true}, allowUnquoted: true, allowMissing: true, caseFold: true } : { autoSelfClosers: {}, implicitlyClosed: {}, contextGrabbers: {}, doNotIndent: {}, allowUnquoted: false, allowMissing: false, caseFold: false }; var alignCDATA = parserConfig.alignCDATA; // Return variables for tokenizers var type, setStyle; function inText(stream, state) { function chain(parser) { state.tokenize = parser; return parser(stream, state); } var ch = stream.next(); if (ch == "<") { if (stream.eat("!")) { if (stream.eat("[")) { if (stream.match("CDATA[")) return chain(inBlock("atom", "]]>")); else return null; } else if (stream.match("--")) { return chain(inBlock("comment", "-->")); } else if (stream.match("DOCTYPE", true, true)) { stream.eatWhile(/[\w\._\-]/); return chain(doctype(1)); } else { return null; } } else if (stream.eat("?")) { stream.eatWhile(/[\w\._\-]/); state.tokenize = inBlock("meta", "?>"); return "meta"; } else { type = stream.eat("/") ? "closeTag" : "openTag"; state.tokenize = inTag; return "tag bracket"; } } else if (ch == "&") { var ok; if (stream.eat("#")) { if (stream.eat("x")) { ok = stream.eatWhile(/[a-fA-F\d]/) && stream.eat(";"); } else { ok = stream.eatWhile(/[\d]/) && stream.eat(";"); } } else { ok = stream.eatWhile(/[\w\.\-:]/) && stream.eat(";"); } return ok ? "atom" : "error"; } else { stream.eatWhile(/[^&<]/); return null; } } function inTag(stream, state) { var ch = stream.next(); if (ch == ">" || (ch == "/" && stream.eat(">"))) { state.tokenize = inText; type = ch == ">" ? "endTag" : "selfcloseTag"; return "tag bracket"; } else if (ch == "=") { type = "equals"; return null; } else if (ch == "<") { state.tokenize = inText; state.state = baseState; state.tagName = state.tagStart = null; var next = state.tokenize(stream, state); return next ? next + " tag error" : "tag error"; } else if (/[\'\"]/.test(ch)) { state.tokenize = inAttribute(ch); state.stringStartCol = stream.column(); return state.tokenize(stream, state); } else { stream.match(/^[^\s\u00a0=<>\"\']*[^\s\u00a0=<>\"\'\/]/); return "word"; } } function inAttribute(quote) { var closure = function(stream, state) { while (!stream.eol()) { if (stream.next() == quote) { state.tokenize = inTag; break; } } return "string"; }; closure.isInAttribute = true; return closure; } function inBlock(style, terminator) { return function(stream, state) { while (!stream.eol()) { if (stream.match(terminator)) { state.tokenize = inText; break; } stream.next(); } return style; }; } function doctype(depth) { return function(stream, state) { var ch; while ((ch = stream.next()) != null) { if (ch == "<") { state.tokenize = doctype(depth + 1); return state.tokenize(stream, state); } else if (ch == ">") { if (depth == 1) { state.tokenize = inText; break; } else { state.tokenize = doctype(depth - 1); return state.tokenize(stream, state); } } } return "meta"; }; } function Context(state, tagName, startOfLine) { this.prev = state.context; this.tagName = tagName; this.indent = state.indented; this.startOfLine = startOfLine; if (Kludges.doNotIndent.hasOwnProperty(tagName) || (state.context && state.context.noIndent)) this.noIndent = true; } function popContext(state) { if (state.context) state.context = state.context.prev; } function maybePopContext(state, nextTagName) { var parentTagName; while (true) { if (!state.context) { return; } parentTagName = state.context.tagName; if (!Kludges.contextGrabbers.hasOwnProperty(parentTagName) || !Kludges.contextGrabbers[parentTagName].hasOwnProperty(nextTagName)) { return; } popContext(state); } } function baseState(type, stream, state) { if (type == "openTag") { state.tagStart = stream.column(); return tagNameState; } else if (type == "closeTag") { return closeTagNameState; } else { return baseState; } } function tagNameState(type, stream, state) { if (type == "word") { state.tagName = stream.current(); setStyle = "tag"; return attrState; } else { setStyle = "error"; return tagNameState; } } function closeTagNameState(type, stream, state) { if (type == "word") { var tagName = stream.current(); if (state.context && state.context.tagName != tagName && Kludges.implicitlyClosed.hasOwnProperty(state.context.tagName)) popContext(state); if (state.context && state.context.tagName == tagName) { setStyle = "tag"; return closeState; } else { setStyle = "tag error"; return closeStateErr; } } else { setStyle = "error"; return closeStateErr; } } function closeState(type, _stream, state) { if (type != "endTag") { setStyle = "error"; return closeState; } popContext(state); return baseState; } function closeStateErr(type, stream, state) { setStyle = "error"; return closeState(type, stream, state); } function attrState(type, _stream, state) { if (type == "word") { setStyle = "attribute"; return attrEqState; } else if (type == "endTag" || type == "selfcloseTag") { var tagName = state.tagName, tagStart = state.tagStart; state.tagName = state.tagStart = null; if (type == "selfcloseTag" || Kludges.autoSelfClosers.hasOwnProperty(tagName)) { maybePopContext(state, tagName); } else { maybePopContext(state, tagName); state.context = new Context(state, tagName, tagStart == state.indented); } return baseState; } setStyle = "error"; return attrState; } function attrEqState(type, stream, state) { if (type == "equals") return attrValueState; if (!Kludges.allowMissing) setStyle = "error"; return attrState(type, stream, state); } function attrValueState(type, stream, state) { if (type == "string") return attrContinuedState; if (type == "word" && Kludges.allowUnquoted) {setStyle = "string"; return attrState;} setStyle = "error"; return attrState(type, stream, state); } function attrContinuedState(type, stream, state) { if (type == "string") return attrContinuedState; return attrState(type, stream, state); } return { startState: function() { return {tokenize: inText, state: baseState, indented: 0, tagName: null, tagStart: null, context: null}; }, token: function(stream, state) { if (!state.tagName && stream.sol()) state.indented = stream.indentation(); if (stream.eatSpace()) return null; type = null; var style = state.tokenize(stream, state); if ((style || type) && style != "comment") { setStyle = null; state.state = state.state(type || style, stream, state); if (setStyle) style = setStyle == "error" ? style + " error" : setStyle; } return style; }, indent: function(state, textAfter, fullLine) { var context = state.context; // Indent multi-line strings (e.g. css). if (state.tokenize.isInAttribute) { if (state.tagStart == state.indented) return state.stringStartCol + 1; else return state.indented + indentUnit; } if (context && context.noIndent) return CodeMirror.Pass; if (state.tokenize != inTag && state.tokenize != inText) return fullLine ? fullLine.match(/^(\s*)/)[0].length : 0; // Indent the starts of attribute names. if (state.tagName) { if (multilineTagIndentPastTag) return state.tagStart + state.tagName.length + 2; else return state.tagStart + indentUnit * multilineTagIndentFactor; } if (alignCDATA && /$/, blockCommentStart: "", configuration: parserConfig.htmlMode ? "html" : "xml", helperType: parserConfig.htmlMode ? "html" : "xml" }; }); CodeMirror.defineMIME("text/xml", "xml"); CodeMirror.defineMIME("application/xml", "xml"); if (!CodeMirror.mimeModes.hasOwnProperty("text/html")) CodeMirror.defineMIME("text/html", {name: "xml", htmlMode: true}); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/xquery/index.html ================================================ CodeMirror: XQuery mode

                  XQuery mode

                  MIME types defined: application/xquery.

                  Development of the CodeMirror XQuery mode was sponsored by MarkLogic and developed by Mike Brevoort.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/xquery/test.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE // Don't take these too seriously -- the expected results appear to be // based on the results of actual runs without any serious manual // verification. If a change you made causes them to fail, the test is // as likely to wrong as the code. (function() { var mode = CodeMirror.getMode({tabSize: 4}, "xquery"); function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } MT("eviltest", "[keyword xquery] [keyword version] [variable "1][keyword .][atom 0][keyword -][variable ml"][def&variable ;] [comment (: this is : a \"comment\" :)]", " [keyword let] [variable $let] [keyword :=] [variable <x] [variable attr][keyword =][variable "value">"test"<func>][def&variable ;function]() [variable $var] {[keyword function]()} {[variable $var]}[variable <][keyword /][variable func><][keyword /][variable x>]", " [keyword let] [variable $joe][keyword :=][atom 1]", " [keyword return] [keyword element] [variable element] {", " [keyword attribute] [variable attribute] { [atom 1] },", " [keyword element] [variable test] { [variable 'a'] }, [keyword attribute] [variable foo] { [variable "bar"] },", " [def&variable fn:doc]()[[ [variable foo][keyword /][variable @bar] [keyword eq] [variable $let] ]],", " [keyword //][variable x] } [comment (: a more 'evil' test :)]", " [comment (: Modified Blakeley example (: with nested comment :) ... :)]", " [keyword declare] [keyword private] [keyword function] [def&variable local:declare]() {()}[variable ;]", " [keyword declare] [keyword private] [keyword function] [def&variable local:private]() {()}[variable ;]", " [keyword declare] [keyword private] [keyword function] [def&variable local:function]() {()}[variable ;]", " [keyword declare] [keyword private] [keyword function] [def&variable local:local]() {()}[variable ;]", " [keyword let] [variable $let] [keyword :=] [variable <let>let] [variable $let] [keyword :=] [variable "let"<][keyword /let][variable >]", " [keyword return] [keyword element] [variable element] {", " [keyword attribute] [variable attribute] { [keyword try] { [def&variable xdmp:version]() } [keyword catch]([variable $e]) { [def&variable xdmp:log]([variable $e]) } },", " [keyword attribute] [variable fn:doc] { [variable "bar"] [variable castable] [keyword as] [atom xs:string] },", " [keyword element] [variable text] { [keyword text] { [variable "text"] } },", " [def&variable fn:doc]()[[ [qualifier child::][variable eq][keyword /]([variable @bar] [keyword |] [qualifier attribute::][variable attribute]) [keyword eq] [variable $let] ]],", " [keyword //][variable fn:doc]", " }"); MT("testEmptySequenceKeyword", "[string \"foo\"] [keyword instance] [keyword of] [keyword empty-sequence]()"); MT("testMultiAttr", "[tag

                  ][variable hello] [variable world][tag

                  ]"); MT("test namespaced variable", "[keyword declare] [keyword namespace] [variable e] [keyword =] [string \"http://example.com/ANamespace\"][variable ;declare] [keyword variable] [variable $e:exampleComThisVarIsNotRecognized] [keyword as] [keyword element]([keyword *]) [variable external;]"); MT("test EQName variable", "[keyword declare] [keyword variable] [variable $\"http://www.example.com/ns/my\":var] [keyword :=] [atom 12][variable ;]", "[tag ]{[variable $\"http://www.example.com/ns/my\":var]}[tag ]"); MT("test EQName function", "[keyword declare] [keyword function] [def&variable \"http://www.example.com/ns/my\":fn] ([variable $a] [keyword as] [atom xs:integer]) [keyword as] [atom xs:integer] {", " [variable $a] [keyword +] [atom 2]", "}[variable ;]", "[tag ]{[def&variable \"http://www.example.com/ns/my\":fn]([atom 12])}[tag ]"); MT("test EQName function with single quotes", "[keyword declare] [keyword function] [def&variable 'http://www.example.com/ns/my':fn] ([variable $a] [keyword as] [atom xs:integer]) [keyword as] [atom xs:integer] {", " [variable $a] [keyword +] [atom 2]", "}[variable ;]", "[tag ]{[def&variable 'http://www.example.com/ns/my':fn]([atom 12])}[tag ]"); MT("testProcessingInstructions", "[def&variable data]([comment&meta ]) [keyword instance] [keyword of] [atom xs:string]"); MT("testQuoteEscapeDouble", "[keyword let] [variable $rootfolder] [keyword :=] [string \"c:\\builds\\winnt\\HEAD\\qa\\scripts\\\"]", "[keyword let] [variable $keysfolder] [keyword :=] [def&variable concat]([variable $rootfolder], [string \"keys\\\"])"); })(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/xquery/xquery.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("xquery", function() { // The keywords object is set to the result of this self executing // function. Each keyword is a property of the keywords object whose // value is {type: atype, style: astyle} var keywords = function(){ // conveinence functions used to build keywords object function kw(type) {return {type: type, style: "keyword"};} var A = kw("keyword a") , B = kw("keyword b") , C = kw("keyword c") , operator = kw("operator") , atom = {type: "atom", style: "atom"} , punctuation = {type: "punctuation", style: null} , qualifier = {type: "axis_specifier", style: "qualifier"}; // kwObj is what is return from this function at the end var kwObj = { 'if': A, 'switch': A, 'while': A, 'for': A, 'else': B, 'then': B, 'try': B, 'finally': B, 'catch': B, 'element': C, 'attribute': C, 'let': C, 'implements': C, 'import': C, 'module': C, 'namespace': C, 'return': C, 'super': C, 'this': C, 'throws': C, 'where': C, 'private': C, ',': punctuation, 'null': atom, 'fn:false()': atom, 'fn:true()': atom }; // a list of 'basic' keywords. For each add a property to kwObj with the value of // {type: basic[i], style: "keyword"} e.g. 'after' --> {type: "after", style: "keyword"} var basic = ['after','ancestor','ancestor-or-self','and','as','ascending','assert','attribute','before', 'by','case','cast','child','comment','declare','default','define','descendant','descendant-or-self', 'descending','document','document-node','element','else','eq','every','except','external','following', 'following-sibling','follows','for','function','if','import','in','instance','intersect','item', 'let','module','namespace','node','node','of','only','or','order','parent','precedes','preceding', 'preceding-sibling','processing-instruction','ref','return','returns','satisfies','schema','schema-element', 'self','some','sortby','stable','text','then','to','treat','typeswitch','union','variable','version','where', 'xquery', 'empty-sequence']; for(var i=0, l=basic.length; i < l; i++) { kwObj[basic[i]] = kw(basic[i]);}; // a list of types. For each add a property to kwObj with the value of // {type: "atom", style: "atom"} var types = ['xs:string', 'xs:float', 'xs:decimal', 'xs:double', 'xs:integer', 'xs:boolean', 'xs:date', 'xs:dateTime', 'xs:time', 'xs:duration', 'xs:dayTimeDuration', 'xs:time', 'xs:yearMonthDuration', 'numeric', 'xs:hexBinary', 'xs:base64Binary', 'xs:anyURI', 'xs:QName', 'xs:byte','xs:boolean','xs:anyURI','xf:yearMonthDuration']; for(var i=0, l=types.length; i < l; i++) { kwObj[types[i]] = atom;}; // each operator will add a property to kwObj with value of {type: "operator", style: "keyword"} var operators = ['eq', 'ne', 'lt', 'le', 'gt', 'ge', ':=', '=', '>', '>=', '<', '<=', '.', '|', '?', 'and', 'or', 'div', 'idiv', 'mod', '*', '/', '+', '-']; for(var i=0, l=operators.length; i < l; i++) { kwObj[operators[i]] = operator;}; // each axis_specifiers will add a property to kwObj with value of {type: "axis_specifier", style: "qualifier"} var axis_specifiers = ["self::", "attribute::", "child::", "descendant::", "descendant-or-self::", "parent::", "ancestor::", "ancestor-or-self::", "following::", "preceding::", "following-sibling::", "preceding-sibling::"]; for(var i=0, l=axis_specifiers.length; i < l; i++) { kwObj[axis_specifiers[i]] = qualifier; }; return kwObj; }(); // Used as scratch variables to communicate multiple values without // consing up tons of objects. var type, content; function ret(tp, style, cont) { type = tp; content = cont; return style; } function chain(stream, state, f) { state.tokenize = f; return f(stream, state); } // the primary mode tokenizer function tokenBase(stream, state) { var ch = stream.next(), mightBeFunction = false, isEQName = isEQNameAhead(stream); // an XML tag (if not in some sub, chained tokenizer) if (ch == "<") { if(stream.match("!--", true)) return chain(stream, state, tokenXMLComment); if(stream.match("![CDATA", false)) { state.tokenize = tokenCDATA; return ret("tag", "tag"); } if(stream.match("?", false)) { return chain(stream, state, tokenPreProcessing); } var isclose = stream.eat("/"); stream.eatSpace(); var tagName = "", c; while ((c = stream.eat(/[^\s\u00a0=<>\"\'\/?]/))) tagName += c; return chain(stream, state, tokenTag(tagName, isclose)); } // start code block else if(ch == "{") { pushStateStack(state,{ type: "codeblock"}); return ret("", null); } // end code block else if(ch == "}") { popStateStack(state); return ret("", null); } // if we're in an XML block else if(isInXmlBlock(state)) { if(ch == ">") return ret("tag", "tag"); else if(ch == "/" && stream.eat(">")) { popStateStack(state); return ret("tag", "tag"); } else return ret("word", "variable"); } // if a number else if (/\d/.test(ch)) { stream.match(/^\d*(?:\.\d*)?(?:E[+\-]?\d+)?/); return ret("number", "atom"); } // comment start else if (ch === "(" && stream.eat(":")) { pushStateStack(state, { type: "comment"}); return chain(stream, state, tokenComment); } // quoted string else if ( !isEQName && (ch === '"' || ch === "'")) return chain(stream, state, tokenString(ch)); // variable else if(ch === "$") { return chain(stream, state, tokenVariable); } // assignment else if(ch ===":" && stream.eat("=")) { return ret("operator", "keyword"); } // open paren else if(ch === "(") { pushStateStack(state, { type: "paren"}); return ret("", null); } // close paren else if(ch === ")") { popStateStack(state); return ret("", null); } // open paren else if(ch === "[") { pushStateStack(state, { type: "bracket"}); return ret("", null); } // close paren else if(ch === "]") { popStateStack(state); return ret("", null); } else { var known = keywords.propertyIsEnumerable(ch) && keywords[ch]; // if there's a EQName ahead, consume the rest of the string portion, it's likely a function if(isEQName && ch === '\"') while(stream.next() !== '"'){} if(isEQName && ch === '\'') while(stream.next() !== '\''){} // gobble up a word if the character is not known if(!known) stream.eatWhile(/[\w\$_-]/); // gobble a colon in the case that is a lib func type call fn:doc var foundColon = stream.eat(":"); // if there's not a second colon, gobble another word. Otherwise, it's probably an axis specifier // which should get matched as a keyword if(!stream.eat(":") && foundColon) { stream.eatWhile(/[\w\$_-]/); } // if the next non whitespace character is an open paren, this is probably a function (if not a keyword of other sort) if(stream.match(/^[ \t]*\(/, false)) { mightBeFunction = true; } // is the word a keyword? var word = stream.current(); known = keywords.propertyIsEnumerable(word) && keywords[word]; // if we think it's a function call but not yet known, // set style to variable for now for lack of something better if(mightBeFunction && !known) known = {type: "function_call", style: "variable def"}; // if the previous word was element, attribute, axis specifier, this word should be the name of that if(isInXmlConstructor(state)) { popStateStack(state); return ret("word", "variable", word); } // as previously checked, if the word is element,attribute, axis specifier, call it an "xmlconstructor" and // push the stack so we know to look for it on the next word if(word == "element" || word == "attribute" || known.type == "axis_specifier") pushStateStack(state, {type: "xmlconstructor"}); // if the word is known, return the details of that else just call this a generic 'word' return known ? ret(known.type, known.style, word) : ret("word", "variable", word); } } // handle comments, including nested function tokenComment(stream, state) { var maybeEnd = false, maybeNested = false, nestedCount = 0, ch; while (ch = stream.next()) { if (ch == ")" && maybeEnd) { if(nestedCount > 0) nestedCount--; else { popStateStack(state); break; } } else if(ch == ":" && maybeNested) { nestedCount++; } maybeEnd = (ch == ":"); maybeNested = (ch == "("); } return ret("comment", "comment"); } // tokenizer for string literals // optionally pass a tokenizer function to set state.tokenize back to when finished function tokenString(quote, f) { return function(stream, state) { var ch; if(isInString(state) && stream.current() == quote) { popStateStack(state); if(f) state.tokenize = f; return ret("string", "string"); } pushStateStack(state, { type: "string", name: quote, tokenize: tokenString(quote, f) }); // if we're in a string and in an XML block, allow an embedded code block if(stream.match("{", false) && isInXmlAttributeBlock(state)) { state.tokenize = tokenBase; return ret("string", "string"); } while (ch = stream.next()) { if (ch == quote) { popStateStack(state); if(f) state.tokenize = f; break; } else { // if we're in a string and in an XML block, allow an embedded code block in an attribute if(stream.match("{", false) && isInXmlAttributeBlock(state)) { state.tokenize = tokenBase; return ret("string", "string"); } } } return ret("string", "string"); }; } // tokenizer for variables function tokenVariable(stream, state) { var isVariableChar = /[\w\$_-]/; // a variable may start with a quoted EQName so if the next character is quote, consume to the next quote if(stream.eat("\"")) { while(stream.next() !== '\"'){}; stream.eat(":"); } else { stream.eatWhile(isVariableChar); if(!stream.match(":=", false)) stream.eat(":"); } stream.eatWhile(isVariableChar); state.tokenize = tokenBase; return ret("variable", "variable"); } // tokenizer for XML tags function tokenTag(name, isclose) { return function(stream, state) { stream.eatSpace(); if(isclose && stream.eat(">")) { popStateStack(state); state.tokenize = tokenBase; return ret("tag", "tag"); } // self closing tag without attributes? if(!stream.eat("/")) pushStateStack(state, { type: "tag", name: name, tokenize: tokenBase}); if(!stream.eat(">")) { state.tokenize = tokenAttribute; return ret("tag", "tag"); } else { state.tokenize = tokenBase; } return ret("tag", "tag"); }; } // tokenizer for XML attributes function tokenAttribute(stream, state) { var ch = stream.next(); if(ch == "/" && stream.eat(">")) { if(isInXmlAttributeBlock(state)) popStateStack(state); if(isInXmlBlock(state)) popStateStack(state); return ret("tag", "tag"); } if(ch == ">") { if(isInXmlAttributeBlock(state)) popStateStack(state); return ret("tag", "tag"); } if(ch == "=") return ret("", null); // quoted string if (ch == '"' || ch == "'") return chain(stream, state, tokenString(ch, tokenAttribute)); if(!isInXmlAttributeBlock(state)) pushStateStack(state, { type: "attribute", tokenize: tokenAttribute}); stream.eat(/[a-zA-Z_:]/); stream.eatWhile(/[-a-zA-Z0-9_:.]/); stream.eatSpace(); // the case where the attribute has not value and the tag was closed if(stream.match(">", false) || stream.match("/", false)) { popStateStack(state); state.tokenize = tokenBase; } return ret("attribute", "attribute"); } // handle comments, including nested function tokenXMLComment(stream, state) { var ch; while (ch = stream.next()) { if (ch == "-" && stream.match("->", true)) { state.tokenize = tokenBase; return ret("comment", "comment"); } } } // handle CDATA function tokenCDATA(stream, state) { var ch; while (ch = stream.next()) { if (ch == "]" && stream.match("]", true)) { state.tokenize = tokenBase; return ret("comment", "comment"); } } } // handle preprocessing instructions function tokenPreProcessing(stream, state) { var ch; while (ch = stream.next()) { if (ch == "?" && stream.match(">", true)) { state.tokenize = tokenBase; return ret("comment", "comment meta"); } } } // functions to test the current context of the state function isInXmlBlock(state) { return isIn(state, "tag"); } function isInXmlAttributeBlock(state) { return isIn(state, "attribute"); } function isInXmlConstructor(state) { return isIn(state, "xmlconstructor"); } function isInString(state) { return isIn(state, "string"); } function isEQNameAhead(stream) { // assume we've already eaten a quote (") if(stream.current() === '"') return stream.match(/^[^\"]+\"\:/, false); else if(stream.current() === '\'') return stream.match(/^[^\"]+\'\:/, false); else return false; } function isIn(state, type) { return (state.stack.length && state.stack[state.stack.length - 1].type == type); } function pushStateStack(state, newState) { state.stack.push(newState); } function popStateStack(state) { state.stack.pop(); var reinstateTokenize = state.stack.length && state.stack[state.stack.length-1].tokenize; state.tokenize = reinstateTokenize || tokenBase; } // the interface for the mode API return { startState: function() { return { tokenize: tokenBase, cc: [], stack: [] }; }, token: function(stream, state) { if (stream.eatSpace()) return null; var style = state.tokenize(stream, state); return style; }, blockCommentStart: "(:", blockCommentEnd: ":)" }; }); CodeMirror.defineMIME("application/xquery", "xquery"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/yaml/index.html ================================================ CodeMirror: YAML mode

                  YAML mode

                  MIME types defined: text/x-yaml.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/yaml/yaml.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode("yaml", function() { var cons = ['true', 'false', 'on', 'off', 'yes', 'no']; var keywordRegex = new RegExp("\\b(("+cons.join(")|(")+"))$", 'i'); return { token: function(stream, state) { var ch = stream.peek(); var esc = state.escaped; state.escaped = false; /* comments */ if (ch == "#" && (stream.pos == 0 || /\s/.test(stream.string.charAt(stream.pos - 1)))) { stream.skipToEnd(); return "comment"; } if (stream.match(/^('([^']|\\.)*'?|"([^"]|\\.)*"?)/)) return "string"; if (state.literal && stream.indentation() > state.keyCol) { stream.skipToEnd(); return "string"; } else if (state.literal) { state.literal = false; } if (stream.sol()) { state.keyCol = 0; state.pair = false; state.pairStart = false; /* document start */ if(stream.match(/---/)) { return "def"; } /* document end */ if (stream.match(/\.\.\./)) { return "def"; } /* array list item */ if (stream.match(/\s*-\s+/)) { return 'meta'; } } /* inline pairs/lists */ if (stream.match(/^(\{|\}|\[|\])/)) { if (ch == '{') state.inlinePairs++; else if (ch == '}') state.inlinePairs--; else if (ch == '[') state.inlineList++; else state.inlineList--; return 'meta'; } /* list seperator */ if (state.inlineList > 0 && !esc && ch == ',') { stream.next(); return 'meta'; } /* pairs seperator */ if (state.inlinePairs > 0 && !esc && ch == ',') { state.keyCol = 0; state.pair = false; state.pairStart = false; stream.next(); return 'meta'; } /* start of value of a pair */ if (state.pairStart) { /* block literals */ if (stream.match(/^\s*(\||\>)\s*/)) { state.literal = true; return 'meta'; }; /* references */ if (stream.match(/^\s*(\&|\*)[a-z0-9\._-]+\b/i)) { return 'variable-2'; } /* numbers */ if (state.inlinePairs == 0 && stream.match(/^\s*-?[0-9\.\,]+\s?$/)) { return 'number'; } if (state.inlinePairs > 0 && stream.match(/^\s*-?[0-9\.\,]+\s?(?=(,|}))/)) { return 'number'; } /* keywords */ if (stream.match(keywordRegex)) { return 'keyword'; } } /* pairs (associative arrays) -> key */ if (!state.pair && stream.match(/^\s*(?:[,\[\]{}&*!|>'"%@`][^\s'":]|[^,\[\]{}#&*!|>'"%@`])[^#]*?(?=\s*:($|\s))/)) { state.pair = true; state.keyCol = stream.indentation(); return "atom"; } if (state.pair && stream.match(/^:\s*/)) { state.pairStart = true; return 'meta'; } /* nothing found, continue */ state.pairStart = false; state.escaped = (ch == '\\'); stream.next(); return null; }, startState: function() { return { pair: false, pairStart: false, keyCol: 0, inlinePairs: 0, inlineList: 0, literal: false, escaped: false }; } }; }); CodeMirror.defineMIME("text/x-yaml", "yaml"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/z80/index.html ================================================ CodeMirror: Z80 assembly mode

                  Z80 assembly mode

                  MIME type defined: text/x-z80.

                  ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/mode/z80/z80.js ================================================ // CodeMirror, copyright (c) by Marijn Haverbeke and others // Distributed under an MIT license: http://codemirror.net/LICENSE (function(mod) { if (typeof exports == "object" && typeof module == "object") // CommonJS mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) // AMD define(["../../lib/codemirror"], mod); else // Plain browser env mod(CodeMirror); })(function(CodeMirror) { "use strict"; CodeMirror.defineMode('z80', function() { var keywords1 = /^(exx?|(ld|cp|in)([di]r?)?|pop|push|ad[cd]|cpl|daa|dec|inc|neg|sbc|sub|and|bit|[cs]cf|x?or|res|set|r[lr]c?a?|r[lr]d|s[lr]a|srl|djnz|nop|rst|[de]i|halt|im|ot[di]r|out[di]?)\b/i; var keywords2 = /^(call|j[pr]|ret[in]?)\b/i; var keywords3 = /^b_?(call|jump)\b/i; var variables1 = /^(af?|bc?|c|de?|e|hl?|l|i[xy]?|r|sp)\b/i; var variables2 = /^(n?[zc]|p[oe]?|m)\b/i; var errors = /^([hl][xy]|i[xy][hl]|slia|sll)\b/i; var numbers = /^([\da-f]+h|[0-7]+o|[01]+b|\d+)\b/i; return { startState: function() { return {context: 0}; }, token: function(stream, state) { if (!stream.column()) state.context = 0; if (stream.eatSpace()) return null; var w; if (stream.eatWhile(/\w/)) { w = stream.current(); if (stream.indentation()) { if (state.context == 1 && variables1.test(w)) return 'variable-2'; if (state.context == 2 && variables2.test(w)) return 'variable-3'; if (keywords1.test(w)) { state.context = 1; return 'keyword'; } else if (keywords2.test(w)) { state.context = 2; return 'keyword'; } else if (keywords3.test(w)) { state.context = 3; return 'keyword'; } if (errors.test(w)) return 'error'; } else if (numbers.test(w)) { return 'number'; } else { return null; } } else if (stream.eat(';')) { stream.skipToEnd(); return 'comment'; } else if (stream.eat('"')) { while (w = stream.next()) { if (w == '"') break; if (w == '\\') stream.next(); } return 'string'; } else if (stream.eat('\'')) { if (stream.match(/\\?.'/)) return 'number'; } else if (stream.eat('.') || stream.sol() && stream.eat('#')) { state.context = 4; if (stream.eatWhile(/\w/)) return 'def'; } else if (stream.eat('$')) { if (stream.eatWhile(/[\da-f]/i)) return 'number'; } else if (stream.eat('%')) { if (stream.eatWhile(/[01]/)) return 'number'; } else { stream.next(); } return null; } }; }); CodeMirror.defineMIME("text/x-z80", "z80"); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/package.json ================================================ { "name": "codemirror", "version":"5.0.0", "main": "lib/codemirror.js", "description": "In-browser code editing made bearable", "licenses": [{"type": "MIT", "url": "http://codemirror.net/LICENSE"}], "directories": {"lib": "./lib"}, "scripts": {"test": "node ./test/run.js"}, "devDependencies": {"node-static": "0.6.0", "phantomjs": "1.9.2-5", "blint": ">=0.1.1"}, "bugs": "http://github.com/codemirror/CodeMirror/issues", "keywords": ["JavaScript", "CodeMirror", "Editor"], "homepage": "http://codemirror.net", "maintainers":[{"name": "Marijn Haverbeke", "email": "marijnh@gmail.com", "web": "http://marijnhaverbeke.nl"}], "repository": {"type": "git", "url": "https://github.com/codemirror/CodeMirror.git"} } ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/theme/3024-day.css ================================================ /* Name: 3024 day Author: Jan T. Sott (http://github.com/idleberg) CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ .cm-s-3024-day.CodeMirror {background: #f7f7f7; color: #3a3432;} .cm-s-3024-day div.CodeMirror-selected {background: #d6d5d4 !important;} .cm-s-3024-day.CodeMirror ::selection { background: #d6d5d4; } .cm-s-3024-day.CodeMirror ::-moz-selection { background: #d9d9d9; } .cm-s-3024-day .CodeMirror-gutters {background: #f7f7f7; border-right: 0px;} .cm-s-3024-day .CodeMirror-guttermarker { color: #db2d20; } .cm-s-3024-day .CodeMirror-guttermarker-subtle { color: #807d7c; } .cm-s-3024-day .CodeMirror-linenumber {color: #807d7c;} .cm-s-3024-day .CodeMirror-cursor {border-left: 1px solid #5c5855 !important;} .cm-s-3024-day span.cm-comment {color: #cdab53;} .cm-s-3024-day span.cm-atom {color: #a16a94;} .cm-s-3024-day span.cm-number {color: #a16a94;} .cm-s-3024-day span.cm-property, .cm-s-3024-day span.cm-attribute {color: #01a252;} .cm-s-3024-day span.cm-keyword {color: #db2d20;} .cm-s-3024-day span.cm-string {color: #fded02;} .cm-s-3024-day span.cm-variable {color: #01a252;} .cm-s-3024-day span.cm-variable-2 {color: #01a0e4;} .cm-s-3024-day span.cm-def {color: #e8bbd0;} .cm-s-3024-day span.cm-bracket {color: #3a3432;} .cm-s-3024-day span.cm-tag {color: #db2d20;} .cm-s-3024-day span.cm-link {color: #a16a94;} .cm-s-3024-day span.cm-error {background: #db2d20; color: #5c5855;} .cm-s-3024-day .CodeMirror-activeline-background {background: #e8f2ff !important;} .cm-s-3024-day .CodeMirror-matchingbracket { text-decoration: underline; color: #a16a94 !important;} ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/theme/3024-night.css ================================================ /* Name: 3024 night Author: Jan T. Sott (http://github.com/idleberg) CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ .cm-s-3024-night.CodeMirror {background: #090300; color: #d6d5d4;} .cm-s-3024-night div.CodeMirror-selected {background: #3a3432 !important;} .cm-s-3024-night.CodeMirror ::selection { background: rgba(58, 52, 50, .99); } .cm-s-3024-night.CodeMirror ::-moz-selection { background: rgba(58, 52, 50, .99); } .cm-s-3024-night .CodeMirror-gutters {background: #090300; border-right: 0px;} .cm-s-3024-night .CodeMirror-guttermarker { color: #db2d20; } .cm-s-3024-night .CodeMirror-guttermarker-subtle { color: #5c5855; } .cm-s-3024-night .CodeMirror-linenumber {color: #5c5855;} .cm-s-3024-night .CodeMirror-cursor {border-left: 1px solid #807d7c !important;} .cm-s-3024-night span.cm-comment {color: #cdab53;} .cm-s-3024-night span.cm-atom {color: #a16a94;} .cm-s-3024-night span.cm-number {color: #a16a94;} .cm-s-3024-night span.cm-property, .cm-s-3024-night span.cm-attribute {color: #01a252;} .cm-s-3024-night span.cm-keyword {color: #db2d20;} .cm-s-3024-night span.cm-string {color: #fded02;} .cm-s-3024-night span.cm-variable {color: #01a252;} .cm-s-3024-night span.cm-variable-2 {color: #01a0e4;} .cm-s-3024-night span.cm-def {color: #e8bbd0;} .cm-s-3024-night span.cm-bracket {color: #d6d5d4;} .cm-s-3024-night span.cm-tag {color: #db2d20;} .cm-s-3024-night span.cm-link {color: #a16a94;} .cm-s-3024-night span.cm-error {background: #db2d20; color: #807d7c;} .cm-s-3024-night .CodeMirror-activeline-background {background: #2F2F2F !important;} .cm-s-3024-night .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/theme/ambiance-mobile.css ================================================ .cm-s-ambiance.CodeMirror { -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/theme/ambiance.css ================================================ /* ambiance theme for codemirror */ /* Color scheme */ .cm-s-ambiance .cm-keyword { color: #cda869; } .cm-s-ambiance .cm-atom { color: #CF7EA9; } .cm-s-ambiance .cm-number { color: #78CF8A; } .cm-s-ambiance .cm-def { color: #aac6e3; } .cm-s-ambiance .cm-variable { color: #ffb795; } .cm-s-ambiance .cm-variable-2 { color: #eed1b3; } .cm-s-ambiance .cm-variable-3 { color: #faded3; } .cm-s-ambiance .cm-property { color: #eed1b3; } .cm-s-ambiance .cm-operator {color: #fa8d6a;} .cm-s-ambiance .cm-comment { color: #555; font-style:italic; } .cm-s-ambiance .cm-string { color: #8f9d6a; } .cm-s-ambiance .cm-string-2 { color: #9d937c; } .cm-s-ambiance .cm-meta { color: #D2A8A1; } .cm-s-ambiance .cm-qualifier { color: yellow; } .cm-s-ambiance .cm-builtin { color: #9999cc; } .cm-s-ambiance .cm-bracket { color: #24C2C7; } .cm-s-ambiance .cm-tag { color: #fee4ff } .cm-s-ambiance .cm-attribute { color: #9B859D; } .cm-s-ambiance .cm-header {color: blue;} .cm-s-ambiance .cm-quote { color: #24C2C7; } .cm-s-ambiance .cm-hr { color: pink; } .cm-s-ambiance .cm-link { color: #F4C20B; } .cm-s-ambiance .cm-special { color: #FF9D00; } .cm-s-ambiance .cm-error { color: #AF2018; } .cm-s-ambiance .CodeMirror-matchingbracket { color: #0f0; } .cm-s-ambiance .CodeMirror-nonmatchingbracket { color: #f22; } .cm-s-ambiance .CodeMirror-selected { background: rgba(255, 255, 255, 0.15); } .cm-s-ambiance.CodeMirror-focused .CodeMirror-selected { background: rgba(255, 255, 255, 0.10); } .cm-s-ambiance.CodeMirror ::selection { background: rgba(255, 255, 255, 0.10); } .cm-s-ambiance.CodeMirror ::-moz-selection { background: rgba(255, 255, 255, 0.10); } /* Editor styling */ .cm-s-ambiance.CodeMirror { line-height: 1.40em; color: #E6E1DC; background-color: #202020; -webkit-box-shadow: inset 0 0 10px black; -moz-box-shadow: inset 0 0 10px black; box-shadow: inset 0 0 10px black; } .cm-s-ambiance .CodeMirror-gutters { background: #3D3D3D; border-right: 1px solid #4D4D4D; box-shadow: 0 10px 20px black; } .cm-s-ambiance .CodeMirror-linenumber { text-shadow: 0px 1px 1px #4d4d4d; color: #111; padding: 0 5px; } .cm-s-ambiance .CodeMirror-guttermarker { color: #aaa; } .cm-s-ambiance .CodeMirror-guttermarker-subtle { color: #111; } .cm-s-ambiance .CodeMirror-lines .CodeMirror-cursor { border-left: 1px solid #7991E8; } .cm-s-ambiance .CodeMirror-activeline-background { background: none repeat scroll 0% 0% rgba(255, 255, 255, 0.031); } .cm-s-ambiance.CodeMirror, .cm-s-ambiance .CodeMirror-gutters { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAQAAAAHUWYVAABFFUlEQVQYGbzBCeDVU/74/6fj9HIcx/FRHx9JCFmzMyGRURhLZIkUsoeRfUjS2FNDtr6WkMhO9sm+S8maJfu+Jcsg+/o/c+Z4z/t97/vezy3z+z8ekGlnYICG/o7gdk+wmSHZ1z4pJItqapjoKXWahm8NmV6eOTbWUOp6/6a/XIg6GQqmenJ2lDHyvCFZ2cBDbmtHA043VFhHwXxClWmeYAdLhV00Bd85go8VmaFCkbVkzlQENzfBDZ5gtN7HwF0KDrTwJ0dypSOzpaKCMwQHKTIreYIxlmhXTzTWkVm+LTynZhiSBT3RZQ7aGfjGEd3qyXQ1FDymqbKxpspERQN2MiRjNZlFFQXfCNFm9nM1zpAsoYjmtRTc5ajwuaXc5xrWskT97RaKzAGe5ARHhVUsDbjKklziiX5WROcJwSNCNI+9w1Jwv4Zb2r7lCMZ4oq5C0EdTx+2GzNuKpJ+iFf38JEWkHJn9DNF7mmBDITrWEg0VWL3pHU20tSZnuqWu+R3BtYa8XxV1HO7GyD32UkOpL/yDloINFTmvtId+nmAjxRw40VMwVKiwrKLE4bK5UOVntYwhOcSSXKrJHKPJedocpGjVz/ZMIbnYUPB10/eKCrs5apqpgVmWzBYWpmtKHecJPjaUuEgRDDaU0oZghCJ6zNMQ5ZhDYx05r5v2muQdM0EILtXUsaKiQX9WMEUotagQzFbUNN6NUPC2nm5pxEWGCjMc3GdJHjSU2kORLK/JGSrkfGEIjncU/CYUnOipoYemwj8tST9NsJmB7TUVXtbUtXATJVZXBMvYeTXJfobgJUPmGMP/yFaWonaa6BcFO3nqcIqCozSZoZoSr1g4zJOzuyGnxTEX3lUEJ7WcZgme8ddaWvWJo2AJR9DZU3CUIbhCSG6ybSwN6qtJVnCU2svDTP2ZInOw2cBTrqtQahtNZn9NcJ4l2NaSmSkkP1noZWnVwkLmdUPOwLZEwy2Z3S3R+4rIG9hcbpPXHFVWcQdZkn2FOta3cKWQnNRC5g1LsJah4GCzSVsKnCOY5OAFRTBekyyryeyilhFKva75r4Mc0aWanGEaThcy31s439KKxTzJYY5WTHPU1FtIHjQU3Oip4xlNzj/lBw23dYZVliQa7WAXf4shetcQfatI+jWRDBPmyNeW6A1P5kdDgyYJlba0BIM8BZu1JfrFwItyjcAMR3K0BWOIrtMEXyhyrlVEx3ui5dUBjmB/Q3CXW85R4mBD0s7B+4q5tKUjOlb9qqmhi5AZ6GFIC5HXtOobdYGlVdMVbNJ8toNTFcHxnoL+muBagcctjWnbNMuR00uI7nQESwg5q2qqrKWIfrNUmeQocY6HuyxJV02wj36w00yhpmUFenv4p6fUkZYqLyuinx2RGOjhCXYyJF84oiU00YMOOhhquNdfbOB7gU88pY4xJO8LVdp6/q2voeB4R04vIdhSE40xZObx1HGGJ/ja0LBthFInKaLPPFzuCaYaoj8JjPME8yoyxo6zlBqkiUZYgq00OYMswbWO5NGmq+xhipxHLRW29ARjNKXO0wRnear8XSg4XFPLKEPUS1GqvyLwiuBUoa7zpZ0l5xxFwWmWZC1H5h5FwU8eQ7K+g8UcVY6TMQreVQT/8uQ8Z+ALIXnSEa2pYZQneE9RZbSBNYXfWYJzW/h/4j4Dp1tYVcFIC5019Vyi4ThPqSFCzjGWaHQTBU8q6vrVwgxP9Lkm840imWKpcLCjYTtrKuwvsKSnrvHCXGkSMk9p6lhckfRpIeis+N2PiszT+mFLspyGleUhDwcLrZqmyeylxwjBcKHEapqkmyangyLZRVOijwOtCY5SsG5zL0OwlCJ4y5KznF3EUNDDrinwiyLZRzOXtlBbK5ITHFGLp8Q0R6ab6mS7enI2cFrxOyHvOCFaT1HThS1krjCwqWeurCkk+willhCC+RSZnRXBiZaC5RXRIZYKp2lyfrHwiKPKR0JDzrdU2EFgpidawlFDR6FgXUMNa+g1FY3bUQh2cLCwosRdnuQTS/S+JVrGLeWIvtQUvONJxlqSQYYKpwoN2kaocLjdVsis4Mk80ESF2YpSkzwldjHkjFCUutI/r+EHDU8oCs6yzL3PhWiEooZdFMkymlas4AcI3KmoMMNSQ3tHzjGWCrcJJdYyZC7QFGwjRL9p+MrRkAGWzIaWCn9W0F3TsK01c2ZvQw0byvxuQU0r1lM0qJO7wW0kRIMdDTtXEdzi4VIh+EoIHm0mWtAtpCixlabgn83fKTI7anJe9ST7WIK1DMGpQmYeA58ImV6ezOGOzK2Kgq01pd60cKWiUi9Lievb/0vIDPHQ05Kzt4ddPckQBQtoaurjyHnek/nKzpQLrVgKPjIkh2v4uyezpv+Xoo7fPFXaGFp1vaLKxQ4uUpQQS5VuQs7BCq4xRJv7fwpVvvFEB3j+620haOuocqMhWd6TTPAEx+mdFNGHdranFe95WrWmIvlY4F1Dle2ECgc6cto7SryuqGGGha0tFQ5V53migUKmg6XKAo4qS3mik+0OZpAhOLeZKicacgaYcyx5hypYQE02ZA4xi/pNhOQxR4klNKyqacj+mpxnLTnnGSo85++3ZCZq6lrZkXlGEX3o+C9FieccJbZWVFjC0Yo1FZnJhoYMFoI1hEZ9r6hwg75HwzBNhbZCdJEfJwTPGzJvaKImw1yYX1HDAmpXR+ZJQ/SmgqMNVQb5vgamGwLtt7VwvP7Qk1xpiM5x5Cyv93E06MZmgs0Nya2azIKOYKCGBQQW97RmhKNKF02JZqHEJ4o58qp7X5EcZmc56trXEqzjCBZ1MFGR87Ql2tSTs6CGxS05PTzRQorkbw7aKoKXFDXsYW42VJih/q+FP2BdTzDTwVqOYB13liM50vG7wy28qagyuIXMeQI/Oqq8bcn5wJI50xH00CRntyfpL1T4hydYpoXgNiFzoIUTDZnLNRzh4TBHwbYGDvZkxmlyJloyr6tRihpeUG94GnKtIznREF0tzJG/OOr73JBcrSh1k6WuTprgLU+mnSGnv6Zge0NNz+kTDdH8nuAuTdJDCNb21LCiIuqlYbqGzT3RAoZofQfjFazkqeNWdYaGvYTM001EW2oKPvVk1ldUGSgUtHFwjKM1h9jnFcmy5lChoLNaQMGGDsYbKixlaMBmmsx1QjCfflwTfO/gckW0ruZ3jugKR3R5W9hGUWqCgxuFgsuaCHorotGKzGaeZB9DMsaTnKCpMtwTvOzhYk0rdrArKCqcaWmVk1+F372ur1YkKxgatI8Qfe1gIX9wE9FgS8ESmuABIXnRUbCapcKe+nO7slClSZFzpV/LkLncEb1qiO42fS3R855Su2mCLh62t1SYZZYVmKwIHjREF2uihTzB20JOkz7dkxzYQnK0UOU494wh+VWRc6Un2kpTaVgLDFEkJ/uhzRcI0YKGgpGWOlocBU/a4fKoJ/pEaNV6jip3+Es9VXY078rGnmAdf7t9ylPXS34RBSuYPs1UecZTU78WanhBCHpZ5sAoTz0LGZKjPf9TRypqWEiTvOFglL1fCEY3wY/++rbk7C8bWebA6p6om6PgOL2kp44TFJlVNBXae2rqqdZztOJpT87GQsE9jqCPIe9VReZuQ/CIgacsyZdCpIScSYqcZk8r+nsyCzhyfhOqHGOIvrLknC8wTpFcaYiGC/RU1NRbUeUpocQOnkRpGOrIOcNRx+1uA0UrzhSSt+VyS3SJpnFWkzNDqOFGIWcfR86DnmARTQ1HKIL33ExPiemeOhYSSjzlSUZZuE4TveoJLnBUOFof6KiysCbnAEcZgcUNTDOwkqWu3RWtmGpZwlHhJENdZ3miGz0lJlsKnjbwqSHQjpxnFDlTLLwqJPMZMjd7KrzkSG7VsxXBZE+F8YZkb01Oe00yyRK9psh5SYh29ySPKBo2ylNht7ZkZnsKenjKNJu9PNEyZpaCHv4Kt6RQsLvAVp7M9kIimmCUwGeWqLMmGuIotYMmWNpSahkhZw9FqZsVnKJhsjAHvtHMsTM9fCI06Dx/u3vfUXCqfsKRc4oFY2jMsoo/7DJDwZ1CsIKnJu+J9ldkpmiCxQx1rWjI+T9FwcWWzOuaYH0Hj7klNRVWEQpmaqosakiGNTFHdjS/qnUdmf0NJW5xsL0HhimCCZZSRzmSPTXJQ4aaztAwtZnoabebJ+htCaZ7Cm535ByoqXKbX1WRc4Eh2MkRXWzImVc96Cj4VdOKVxR84VdQsIUM8Psoou2byVHyZFuq7O8otbSQ2UAoeEWTudATLGSpZzVLlXVkPU2Jc+27lsw2jmg5T5VhbeE3BT083K9WsTTkFU/Osi0rC5lRlpwRHUiesNS0sOvmqGML1aRbPAxTJD9ZKtxuob+hhl8cwYGWpJ8nub7t5p6coYbMovZ1BTdaKn1jYD6h4GFDNFyT/Kqe1XCXphXHOKLZmuRSRdBPEfVUXQzJm5YGPGGJdvAEr7hHNdGZnuBvrpciGmopOLf5N0uVMy0FfYToJk90uUCbJupaVpO53UJXR2bVpoU00V2KOo4zMFrBd0Jtz2pa0clT5Q5L8IpQ177mWQejPMEJhuQjS10ref6HHjdEhy1P1EYR7GtO0uSsKJQYLiTnG1rVScj5lyazpqWGl5uBbRWl7m6ixGOOnEsMJR7z8J0n6KMnCdxhiNYQCoZ6CmYLnO8omC3MkW3bktlPmEt/VQQHejL3+dOE5FlPdK/Mq8hZxxJtLyRrepLThYKbLZxkSb5W52vYxNOaOxUF0yxMUPwBTYqCzy01XayYK0sJyWBLqX0MwU5CzoymRzV0EjjeUeLgDpTo6ij42ZAzvD01dHUUTPLU96MdLbBME8nFBn7zJCMtJcZokn8YoqU0FS5WFKyniHobguMcmW8N0XkWZjkyN3hqOMtS08r+/xTBwpZSZ3qiVRX8SzMHHjfUNFjgHEPmY9PL3ykEzxkSre/1ZD6z/NuznuB0RcE1TWTm9zRgfUWVJiG6yrzgmWPXC8EAR4Wxhlad0ZbgQyEz3pG5RVEwwDJH2mgKpjcTiCOzn1lfUWANFbZ2BA8balnEweJC9J0iuaeZoI+ippFCztEKVvckR2iice1JvhVytrQwUAZpgsubCPaU7xUe9vWnaOpaSBEspalykhC9bUlOMpT42ZHca6hyrqKmw/wMR8H5ZmdFoBVJb03O4UL0tSNnvIeRmkrLWqrs78gcrEn2tpcboh0UPOW3UUR9PMk4T4nnNKWmCjlrefhCwxRNztfmIQVdDElvS4m1/WuOujoZCs5XVOjtKPGokJzsYCtFYoWonSPT21DheU/wWhM19FcElwqNGOsp9Q8N/cwXaiND1MmeL1Q5XROtYYgGeFq1aTMsoMmcrKjQrOFQTQ1fmBYhmW6o8Jkjc7iDJRTBIo5kgJD5yMEYA3srCg7VFKwiVJkmRCc5ohGOKhsYMn/XBLdo5taZjlb9YAlGWRimqbCsoY7HFAXLa5I1HPRxMMsQDHFkWtRNniqT9UEeNjcE7RUlrCJ4R2CSJuqlKHWvJXjAUNcITYkenuBRB84TbeepcqTj3zZyFJzgYQdHnqfgI0ddUwS6GqWpsKWhjq9cV0vBAEMN2znq+EBfIWT+pClYw5xsTlJU6GeIBsjGmmANTzJZiIYpgrM0Oa8ZMjd7NP87jxhqGOhJlnQtjuQpB+8aEE00wZFznSJPyHxgH3HkPOsJFvYk8zqCHzTs1BYOa4J3PFU+UVRZxlHDM4YavlNUuMoRveiZA2d7grMNc2g+RbSCEKzmgYsUmWmazFJyoiOZ4KnyhKOGRzWJa0+moyV4TVHDzn51Awtqaphfk/lRQ08FX1iiqxTB/kLwd0VynKfEvI6cd4XMV5bMhZ7gZUWVzYQ6Nm2BYzxJbw3bGthEUUMfgbGeorae6DxHtJoZ6alhZ0+ytiVoK1R4z5PTrOECT/SugseEOlb1MMNR4VRNcJy+V1Hg9ONClSZFZjdHlc6W6FBLdJja2MC5hhpu0DBYEY1TFGwiFAxRRCsYkiM9JRb0JNMVkW6CZYT/2EiTGWmo8k+h4FhDNE7BvppoTSFnmCV5xZKzvcCdDo7VVPnIU+I+Rc68juApC90MwcFCsJ5hDqxgScYKreruyQwTqrzoqDCmhWi4IbhB0Yrt3RGa6GfDv52rKXWhh28dyZaWUvcZeMTBaZoSGyiCtRU5J8iviioHaErs7Jkj61syVzTTgOcUOQ8buFBTYWdL5g3T4qlpe0+wvD63heAXRfCCIed9RbCsp2CiI7raUOYOTU13N8PNHvpaGvayo4a3LLT1lDrVEPT2zLUlheB1R+ZTRfKWJ+dcocLJfi11vyJ51lLqJ0WD7tRwryezjiV5W28uJO9qykzX8JDe2lHl/9oyBwa2UMfOngpXCixvKdXTk3wrsKmiVYdZIqsoWEERjbcUNDuiaQomGoIbFdEHmsyWnuR+IeriKDVLnlawlyNHKwKlSU631PKep8J4Q+ayjkSLKYLhalNHlYvttb6fHm0p6OApsZ4l2VfdqZkjuysy6ysKLlckf1KUutCTs39bmCgEyyoasIWlVaMF7mgmWtBT8Kol5xpH9IGllo8cJdopcvZ2sImlDmMIbtDk3KIpeNiS08lQw11NFPTwVFlPP6pJ2gvRfI7gQUfmNAtf6Gs0wQxDsKGlVBdF8rCa3jzdwMaGHOsItrZk7hAyOzpK9VS06j5F49b0VNGOOfKs3lDToMsMBe9ZWtHFEgxTJLs7qrygKZjUnmCYoeAqeU6jqWuLJup4WghOdvCYJnrSkSzoyRkm5M2StQwVltPkfCAk58tET/CSg+8MUecmotMEnhBKfWBIZsg2ihruMJQaoIm+tkTLKEqspMh00w95gvFCQRtDwTT1gVDDSEVdlwqZfxoQRbK0g+tbiBZxzKlpnpypejdDwTaeOvorMk/IJE10h9CqRe28hhLbe0pMsdSwv4ZbhKivo2BjDWfL8UKJgeavwlwb5KlwhyE4u4XkGE2ytZCznKLCDZZq42VzT8HLCrpruFbIfOIINmh/qCdZ1ZBc65kLHR1Bkyf5zn6pN3SvGKIlFNGplhrO9QSXanLOMQTLCa0YJCRrCZm/CZmrLTm7WzCK4GJDiWUdFeYx1LCFg3NMd0XmCuF3Y5rITLDUsYS9zoHVzwnJoYpSTQoObyEzr4cFBNqYTopoaU/wkyLZ2lPhX/5Y95ulxGTV7KjhWrOZgl8MyUUafjYraNjNU1N3IWcjT5WzWqjwtoarHSUObGYO3GCJZpsBlnJGPd6ZYLyl1GdCA2625IwwJDP8GUKymbzuyPlZlvTUsaUh5zFDhRWFzPKKZLAlWdcQbObgF9tOqOsmB1dqcqYJmWstFbZRRI9poolmqiLnU0POvxScpah2iSL5UJNzgScY5+AuIbpO0YD3NCW+dLMszFSdFCWGqG6eVq2uYVNDdICGD6W7EPRWZEY5gpsE9rUkS3mijzzJnm6UpUFXG1hCUeVoS5WfNcFpblELL2qqrCvMvRfd45oalvKU2tiQ6ePJOVMRXase9iTtLJztPxJKLWpo2CRDcJwn2sWSLKIO1WQWNTCvpVUvOZhgSC40JD0dOctaSqzkCRbXsKlb11Oip6PCJ0IwSJM31j3akRxlP7Rwn6aGaUL0qiLnJkvB3xWZ2+Q1TfCwpQH3G0o92UzmX4o/oJNQMMSQc547wVHhdk+VCw01DFYEnTxzZKAm74QmeNNR1w6WzEhNK15VJzuCdxQ53dRUDws5KvwgBMOEgpcVNe0hZI6RXT1Jd0cyj5nsaEAHgVmGaJIlWdsc5Ui2ElrRR6jrRAttNMEAIWrTDFubkZaok7/AkzfIwfuWVq0jHzuCK4QabtLUMVPB3kJ0oyHTSVFlqMALilJf2Rf8k5aaHtMfayocLBS8L89oKoxpJvnAkDPa0qp5DAUTHKWmCcnthlou8iCKaFFLHWcINd1nyIwXqrSxMNmSs6KmoL2QrKuWtlQ5V0120xQ5vRyZS1rgFkWwhiOwiuQbR0OOVhQM9iS3tiXp4RawRPMp5tDletOOBL95MpM01dZTBM9pkn5qF010rIeHFcFZhmSGpYpTsI6nwhqe5C9ynhlpp5ophuRb6WcJFldkVnVEwwxVfrVkvnWUuNLCg5bgboFHPDlDPDmnK7hUrWiIbjadDclujlZcaokOFup4Ri1kacV6jmrrK1hN9bGwpKEBQ4Q6DvIUXOmo6U5LqQM6EPyiKNjVkPnJkDPNEaxhiFay5ExW1NXVUGqcpYYdPcGiCq7z/TSlbhL4pplWXKd7NZO5QQFrefhRQW/NHOsqcIglc4UhWklR8K0QzbAw08CBDnpbgqXdeD/QUsM4RZXDFBW6WJKe/mFPdH0LtBgiq57wFLzlyQzz82qYx5D5WJP5yVJDW01BfyHnS6HKO/reZqId1WGa4Hkh2kWodJ8i6KoIPlAj2hPt76CzXsVR6koPRzWTfKqIentatYpQw2me4AA3y1Kind3SwoOKZDcFXTwl9tWU6mfgRk9d71sKtlNwrjnYw5tC5n5LdKiGry3JKNlHEd3oaMCFHrazBPMp/uNJ+V7IudcSbeOIdjUEdwl0VHCOZo5t6YluEuaC9mQeMgSfOyKnYGFHcIeQ84yQWbuJYJpZw5CzglDH7gKnWqqM9ZTaXcN0TeYhR84eQtJT76JJ1lREe7WnnvsMmRc9FQ7SBBM9mV3lCUdmHk/S2RAMt0QjFNFqQpWjDPQ01DXWUdDBkXziKPjGEP3VP+zIWU2t7im41FOloyWzn/L6dkUy3VLDaZ6appgDLHPjJEsyvJngWEPUyVBiAaHCTEXwrLvSEbV1e1gKJniicWorC1MUrVjB3uDhJE/wgSOzk1DXpk0k73qCM8xw2UvD5kJmDUfOomqMpWCkJRlvKXGmoeBm18USjVIk04SClxTB6YrgLAPLWYK9HLUt5cmc0vYES8GnTeRc6skZbQkWdxRsIcyBRzx1DbTk9FbU0caTPOgJHhJKnOGIVhQqvKmo0llRw9sabrZkDtdg3PqaKi9oatjY8B+G371paMg6+mZFNNtQ04mWBq3rYLOmtWWQp8KJnpy9DdFensyjdqZ+yY40VJlH8wcdLzC8PZnvHMFUTZUrDTkLyQaGus5X5LzpYAf3i+e/ZlhqGqWhh6Ou6xTR9Z6oi5AZZtp7Mj2EEm8oSpxiYZCHU/1fbGdNNNRRoZMhmilEb2gqHOEJDtXkHK/JnG6IrvbPCwV3NhONVdS1thBMs1T4QOBcTWa2IzhMk2nW5Kyn9tXUtpv9RsG2msxk+ZsQzRQacJncpgke0+T8y5Fzj8BiGo7XlJjaTIlpQs7KFjpqGnKuoyEPeIKnFMkZHvopgh81ySxNFWvJWcKRs70j2FOT012IllEEO1n4pD1513Yg2ssQPOThOkvyrqHUdEXOSEsihmBbTbKX1kLBPWqWkLOqJbjB3GBIZmoa8qWl4CG/iZ7oiA72ZL7TJNeZUY7kFQftDcHHluBzRbCegzMtrRjVQpX2lgoPKKLJAkcbMl01XK2p7yhL8pCBbQ3BN2avJgKvttcrWDK3CiUOVxQ8ZP+pqXKyIxnmBymCg5vJjNfkPK4+c8cIfK8ocVt7kmfd/I5SR1hKvCzUtb+lhgc00ZaO6CyhIQP1Uv4yIZjload72PXX0OIJvnFU+0Zf6MhsJwTfW0r0UwQfW4LNLZl5HK261JCZ4qnBaAreVAS3WrjV0LBnNDUNNDToCEeFfwgcb4gOEqLRhirWkexrCEYKVV711DLYEE1XBEsp5tpTGjorkomKYF9FDXv7fR3BGwbettSxnyL53MBPjsxDZjMh+VUW9NRxq1DhVk+FSxQcaGjV9Pawv6eGByw5qzoy7xk4RsOShqjJwWKe/1pEEfzkobeD/dQJmpqedcyBTy2sr4nGNRH0c0SPWTLrqAc0OQcb/gemKgqucQT7ySWKCn2EUotoCvpZct7RO2sy/QW0IWcXd7pQRQyZVwT2USRO87uhjioTLKV2brpMUcMQRbKH/N2T+UlTpaMls6cmc6CCNy3JdYYSUzzJQ4oSD3oKLncULOiJvjBEC2oqnCJkJluCYy2ZQ5so9YYlZ1VLlQU1mXEW1jZERwj/MUSRc24TdexlqLKfQBtDTScJUV8FszXBEY5ktpD5Ur9hYB4Nb1iikw3JoYpkKX+RodRKFt53MMuRnKSpY31PwYaGaILh3wxJGz9TkTPEETxoCWZrgvOlmyMzxFEwVJE5xZKzvyJ4WxEc16Gd4Xe3Weq4XH2jKRikqOkGQ87hQnC7wBmGYLAnesX3M+S87eFATauuN+Qcrh7xIxXJbUIdMw3JGE3ylCWzrieaqCn4zhGM19TQ3z1oH1AX+pWEqIc7wNGAkULBo/ZxRaV9NNyh4Br3rCHZzbzmSfawBL0dNRwpW1kK9mxPXR9povcdrGSZK9c2k0xwFGzjuniCtRSZCZ6ccZ7gaktmgAOtKbG/JnOkJrjcQTdFMsxRQ2cLY3WTIrlCw1eWKn8R6pvt4GFDso3QoL4a3nLk3G6JrtME3dSenpx7PNFTmga0EaJTLQ061sEeQoWXhSo9LTXsaSjoJQRXeZLtDclbCrYzfzHHeaKjHCVOUkQHO3JeEepr56mhiyaYYKjjNU+Fed1wS5VlhWSqI/hYUdDOkaxiKehoyOnrCV5yBHtbWFqTHCCwtpDcYolesVR5yUzTZBb3RNMd0d6WP+SvhuBmRcGxnuQzT95IC285cr41cLGQ6aJJhmi4TMGempxeimBRQw1tFKV+8jd6KuzoSTqqDxzRtpZkurvKEHxlqXKRIjjfUNNXQsNOsRScoWFLT+YeRZVD3GRN0MdQcKqQjHDMrdGGVu3iYJpQx3WGUvfbmxwFfR20WBq0oYY7LMFhhgYtr8jpaEnaOzjawWWaTP8mMr0t/EPDPoqcnxTBI5o58L7uoWnMrpoqPwgVrlAUWE+V+TQl9rawoyP6QGAlQw2TPRX+YSkxyBC8Z6jhHkXBgQL7WII3DVFnRfCrBfxewv9D6xsyjys4VkhWb9pUU627JllV0YDNHMku/ldNMMXDEo4aFnAkk4U6frNEU4XgZUPmEKHUl44KrzmYamjAbh0JFvGnaTLPu1s9jPCwjFpYiN7z1DTOk/nc07CfDFzmCf7i+bfNHXhDtLeBXzTBT5rkMvWOIxpl4EMh2LGJBu2syDnAEx2naEhHDWMMzPZEhygyS1mS5RTJr5ZkoKbEUoYqr2kqdDUE8ztK7OaIntJkFrIECwv8LJTaVx5XJE86go8dFeZ3FN3rjabCAYpoYEeC9zzJVULBbmZhDyd7ko09ydpNZ3nm2Kee4FPPXHnYEF1nqOFEC08LUVcDvYXkJHW8gTaKCk9YGOeIJhqiE4ToPEepdp7IWFjdwnWaufGMwJJCMtUTTBBK9BGCOy2tGGrJTHIwyEOzp6aPzNMOtlZkDvcEWpP5SVNhfkvDxhmSazTJXYrM9U1E0xwFVwqZQwzJxw6+kGGGUj2FglGGmnb1/G51udRSMNlTw6GGnCcUwVcOpmsqTHa06o72sw1RL02p9z0VbnMLOaIX3QKaYKSCFQzBKEUNHTSc48k53RH9wxGMtpQa5KjjW0W0n6XCCCG4yxNNdhQ4R4l1Ff+2sSd6UFHiIEOyqqFgT01mEUMD+joy75jPhOA+oVVLm309FR4yVOlp4RhLiScNmSmaYF5Pw0STrOIoWMSR2UkRXOMp+M4SHW8o8Zoi6OZgjKOaFar8zZDzkWzvKOjkKBjmCXby8JahhjXULY4KlzgKLvAwxVGhvyd4zxB1d9T0piazmKLCVZY5sKiD0y2ZSYrkUEPUbIk+dlQ4SJHTR50k1DPaUWIdTZW9NJwnJMOECgd7ou/MnppMJ02O1VT4Wsh85MnZzcFTngpXGKo84qmwgKbCL/orR/SzJ2crA+t6Mp94KvxJUeIbT3CQu1uIdlQEOzlKfS3UMcrTiFmOuroocrZrT2AcmamOKg8YomeEKm/rlT2sociMaybaUlFhuqHCM2qIJ+rg4EcDFymiDSxzaHdPcpE62pD5kyM5SBMoA1PaUtfIthS85ig1VPiPPYXgYEMNk4Qq7TXBgo7oT57gPUdwgCHzhIVFPFU6OYJzHAX9m5oNrVjeE61miDrqQ4VSa1oiURTsKHC0IfjNwU2WzK6eqK8jWln4g15TVBnqmDteCJ501PGAocJhhqjZdtBEB6lnhLreFJKxmlKbeGrqLiSThVIbCdGzloasa6lpMQXHCME2boLpJgT7yWaemu6wBONbqGNVRS0PKIL7LckbjmQtR7K8I5qtqel+T/ChJTNIKLjdUMNIRyvOEko9YYl2cwQveBikCNawJKcLBbc7+JM92mysNvd/Fqp8a0k6CNEe7cnZrxlW0wQXaXjaktnRwNOGZKYiONwS7a1JVheq3WgJHlQUGKHKmp4KAxXR/ULURcNgoa4zhKSLpZR3kxRRb0NmD0OFn+UCS7CzI1nbP6+o4x47QZE5xRCt3ZagnYcvmpYQktXdk5YKXTzBC57kKEe0VVuiSYqapssMS3C9p2CKkHOg8B8Pa8p5atrIw3qezIWanMGa5HRDNF6RM9wcacl0N+Q8Z8hsIkSnaIIdHRUOEebAPy1zbCkhM062FCJtif7PU+UtoVXzWKqM1PxXO8cfdruhFQ/a6x3JKYagvVDhQEtNiyiiSQ7OsuRsZUku0CRNDs4Sog6KKjsZgk2bYJqijgsEenoKeniinRXBn/U3lgpPdyDZynQx8IiioMnCep5Ky8mjGs6Wty0l1hUQTcNWswS3WRp2kCNZwJG8omG8JphPUaFbC8lEfabwP7VtM9yoaNCAjpR41VNhrD9LkbN722v0CoZMByFzhaW+MyzRYEWFDQwN2M4/JiT76PuljT3VU/A36eaIThb+R9oZGOAJ9tewkgGvqOMNRWYjT/Cwu99Q8LqDE4TgbLWxJ1jaDDAERsFOFrobgjUsBScaguXU8kKm2RL19tRypSHnHNlHiIZqgufs4opgQdVdwxBNNFBR6kVFqb8ogimOzB6a6HTzrlDHEpYaxjiiA4TMQobkDg2vejjfwJGWmnbVFAw3H3hq2NyQfG7hz4aC+w3BbwbesG0swYayvpAs6++Ri1Vfzx93mFChvyN5xVHTS+0p9aqCAxyZ6ZacZyw5+7uuQkFPR9DDk9NOiE7X1PCYJVjVUqq7JlrHwWALF5nfHNGjApdpqgzx5OwilDhCiDYTgnc9waGW4BdLNNUQvOtpzDOWHDH8D7TR/A/85KljEQu3NREc4Pl/6B1Hhc8Umb5CsKMmGC9EPcxoT2amwHNCmeOEnOPbklnMkbOgIvO5UMOpQrS9UGVdt6iH/fURjhI/WOpaW9OKLYRod6HCUEdOX000wpDZQ6hwg6LgZfOqo1RfT/CrJzjekXOGhpc1VW71ZLbXyyp+93ILbC1kPtIEYx0FIx1VDrLoVzXRKRYWk809yYlC9ImcrinxtabKnzRJk3lAU1OLEN1j2zrYzr2myHRXJFf4h4QKT1qSTzTB5+ZNTzTRkAxX8FcLV2uS8eoQQ2aAkFzvCM72sJIcJET3WPjRk5wi32uSS9rfZajpWEvj9hW42F4o5NytSXYy8IKHay10VYdrcl4SkqscrXpMwyGOgtkajheSxdQqmpxP1L3t4R5PqasFnrQEjytq6qgp9Y09Qx9o4S1FzhUCn1kyHSzBWLemoSGvOqLNhZyBjmCaAUYpMgt4Ck7wBBMMwWKWgjsUwTaGVsxWC1mYoKiyqqeGKYqonSIRQ3KIkHO0pmAxTdBHkbOvfllfr+AA+7gnc50huVKYK393FOyg7rbPO/izI7hE4CnHHHnJ0ogNPRUGeUpsrZZTBJcrovUcJe51BPsr6GkJdhCCsZ6aTtMEb2pqWkqeVtDXE/QVggsU/Nl86d9RMF3DxvZTA58agu810RWawCiSzzXBeU3MMW9oyJUedvNEvQyNu1f10BSMddR1vaLCYpYa/mGocLSiYDcLbQz8aMn5iyF4xBNMs1P0QEOV7o5gaWGuzSeLue4tt3ro7y4Tgm4G/mopdZgl6q0o6KzJWE3mMksNr3r+a6CbT8g5wZNzT9O7fi/zpaOmnz3BRoqos+tv9zMbdpxsqDBOEewtJLt7cg5wtKKbvldpSzRRCD43VFheCI7yZLppggMVBS/KMAdHODJvOwq2NQSbKKKPLdFWQs7Fqo+mpl01JXYRgq8dnGLhTiFzqmWsUMdpllZdbKlyvSdYxhI9YghOtxR8LgSLWHK62mGGVoxzBE8LNWzqH9CUesQzFy5RQzTc56mhi6fgXEWwpKfE5Z7M05ZgZUPmo6auiv8YKzDYwWBLMErIbKHJvOwIrvEdhOBcQ9JdU1NHQ7CXn2XIDFBKU2WAgcX9UAUzDXWd5alwuyJ41Z9rjKLCL4aCp4WarhPm2rH+SaHUYE001JDZ2ZAzXPjdMpZWvC9wmqIB2lLhQ01D5jO06hghWMndbM7yRJMsoCj1vYbnFQVrW9jak3OlEJ3s/96+p33dEPRV5GxiqaGjIthUU6FFEZyqCa5qJrpBdzSw95IUnOPIrCUUjRZQFrbw5PR0R1qiYx3cb6nrWUMrBmmiBQxVHtTew5ICP/ip6g4hed/Akob/32wvBHsIOX83cI8hGeNeNPCIkPmXe8fPKx84OMSRM1MTdXSwjCZ4S30jVGhvqTRak/OVhgGazHuOCud5onEO1lJr6ecVyaOK6H7zqlBlIaHE0oroCgfvGJIdPcmfLNGLjpz7hZwZQpUbFME0A1cIJa7VNORkgfsMBatbKgwwJM9bSvQXeNOvbIjelg6WWvo5kvbKaJJNHexkKNHL9xRyFlH8Ti2riB5wVPhUk7nGkJnoCe428LR/wRGdYIlmWebCyxou1rCk4g/ShugBDX0V0ZQWkh0dOVsagkM0yV6OoLd5ye+pRlsCr0n+KiQrGuq5yJDzrTAXHtLUMduTDBVKrSm3eHL+6ijxhFDX9Z5gVU/wliHYTMiMFpKLNMEywu80wd3meoFmt6VbRMPenhrOc6DVe4pgXU8DnnHakLOIIrlF4FZPIw6R+zxBP0dyq6OOZ4Q5sLKCcz084ok+VsMMyQhNZmmBgX5xIXOEJTmi7VsGTvMTNdHHhpzdbE8Du2oKxgvBqQKdDDnTFOylCFaxR1syz2iqrOI/FEpNc3C6f11/7+ASS6l2inq2ciTrCCzgyemrCL5SVPjQkdPZUmGy2c9Sw9FtR1sS30RmsKPCS4rkIC/2U0MduwucYolGaPjKEyhzmiPYXagyWbYz8LWBDdzRimAXzxx4z8K9hpzlhLq+NiQ97HuKorMUfK/OVvC2JfiHUPCQI/q7J2gjK+tTDNxkCc4TMssqCs4TGtLVwQihyoAWgj9bosU80XGW6Ac9TJGziaUh5+hnFcHOnlaM1iRn29NaqGENTTTSUHCH2tWTeV0osUhH6psuVLjRUmGWhm6OZEshGeNowABHcJ2Bpy2ZszRcKkRXd2QuKVEeXnbfaEq825FguqfgfE2whlChSRMdron+LATTPQ2Z369t4B9C5gs/ylzv+CMmepIDPclFQl13W0rspPd1JOcbghGOEutqCv5qacURQl3dDKyvyJlqKXGPgcM9FfawJAMVmdcspcYKOZc4GjDYkFlK05olNMHyHn4zFNykyOxt99RkHlfwmiHo60l2EKI+mhreEKp080Tbug08BVPcgoqC5zWt+NLDTZ7oNSF51N1qie7Va3uCCwyZbkINf/NED6jzOsBdZjFN8oqG3wxVunqCSYYKf3EdhJyf9YWGf7tRU2oH3VHgPr1fe5J9hOgHd7xQ0y7qBwXr23aGErP0cm64JVjZwsOGqL+mhNgZmhJLW2oY4UhedsyBgzrCKrq7BmcpNVhR6jBPq64Vgi+kn6XE68pp8J5/+0wRHGOpsKenQn9DZntPzjRLZpDAdD2fnSgkG9tmIXnUwQ6WVighs7Yi2MxQ0N3CqYaCXkJ0oyOztMDJjmSSpcpvlrk0RMMOjmArQ04PRV1DO1FwhCVaUVPpKUM03JK5SxPsIWRu8/CGHi8UHChiqGFDTbSRJWeYUDDcH6vJWUxR4k1FXbMUwV6e4AJFXS8oMqsZKqzvYQ9DDQdZckY4aGsIhtlubbd2r3j4QBMoTamdPZk7O/Bf62lacZwneNjQoGcdVU7zJOd7ghsUHOkosagic6cnWc8+4gg285R6zZP5s1/LUbCKIznTwK36PkdwlOrl4U1LwfdCCa+IrvFkmgw1PCAUXKWo0sURXWcI2muKJlgyFzhynCY4RBOsqCjoI1R5zREco0n2Vt09BQtYSizgKNHfUmUrQ5UOCh51BFcLmY7umhYqXKQomOop8bUnWNNQcIiBcYaC6xzMNOS8JQQfeqKBmmglB+97ok/lfk3ygaHSyZaCRTzRxQo6GzLfa2jWBPepw+UmT7SQEJyiyRkhBLMVOfcoMjcK0eZChfUNzFAUzCsEN5vP/X1uP/n/aoMX+K+nw/Hjr/9xOo7j7Pju61tLcgvJpTWXNbfN5jLpi6VfCOviTktKlFusQixdEKWmEBUKNaIpjZRSSOXSgzaaKLdabrm1/9nZ+/f+vd/vz/v9+Xy+zZ7PRorYoZqyLrCwQdEAixxVOEXNNnjX2nUSRlkqGmWowk8lxR50JPy9Bo6qJXaXwNvREBvnThPEPrewryLhcAnj5WE15Fqi8W7R1sAuEu86S4ENikItFN4xkv9Af4nXSnUVcLiA9xzesFpivRRVeFKtsMRaKBhuSbjOELnAUtlSQUpXgdfB4Z1oSbnFEetbQ0IrAe+Y+pqnDcEJFj6S8LDZzZHwY4e3XONNlARraomNEt2bkvGsosA3ioyHm+6jCMbI59wqt4eeara28IzEmyPgoRaUOEDhTVdEJhmCoTWfC0p8aNkCp0oYqih2iqGi4yXeMkOsn4LdLLnmKfh/YogjNsPebeFGR4m9BJHLzB61XQ3BtpISfS2FugsK9FAtLWX1dCRcrCnUp44CNzuCowUZmxSRgYaE6Za0W2u/E7CVXCiI/UOR8aAm1+OSyE3mOUcwyc1zBBeoX1kiKy0Zfxck1Gsyulti11i83QTBF5Kg3pDQThFMVHiPSlK+0cSedng/VaS8bOZbtsBcTcZAR8JP5KeqQ1OYKAi20njdNNRpgnsU//K+JnaXJaGTomr7aYIphoRn9aeShJWKEq9LcozSF7QleEfDI5LYm5bgVkFkRwVDBCVu0DDIkGupo8TZBq+/pMQURYErJQmPKGKjNDkWOLx7Jd5QizdUweIaKrlP7SwJDhZvONjLkOsBBX9UpGxnydhXkfBLQ8IxgojQbLFnJf81JytSljclYYyEFyx0kVBvKWOFJmONpshGAcsduQY5giVNCV51eOdJYo/pLhbvM0uDHSevNKRcrKZIqnCtJeEsO95RoqcgGK4ocZcho1tTYtcZvH41pNQ7vA0WrhIfOSraIIntIAi+NXWCErdbkvrWwjRLrt0NKUdL6KSOscTOdMSOUtBHwL6OLA0vNSdynaWQEnCpIvKaIrJJEbvHkmuNhn6OjM8VkSGSqn1uYJCGHnq9I3aLhNME3t6GjIkO7xrNFumpyTNX/NrwX7CrIRiqqWijI9JO4d1iieykyfiposQIQ8YjjsjlBh6oHWbwRjgYJQn2NgSnNycmJAk3NiXhx44Sxykihxm8ybUwT1OVKySc7vi3OXVkdBJ4AyXBeksDXG0IhgtYY0lY5ahCD0ehborIk5aUWRJviMA7Xt5kyRjonrXENkm8yYqgs8VzgrJmClK20uMM3jRJ0FiQICQF9hdETlLQWRIb5ki6WDfWRPobvO6a4GP5mcOrNzDFELtTkONLh9dXE8xypEg7z8A9jkhrQ6Fhjlg/QVktJXxt4WXzT/03Q8IaQWSqIuEvloQ2mqC9Jfi7wRul4RX3pSPlzpoVlmCtI2jvKHCFhjcM3sN6lqF6HxnKelLjXWbwrpR4xzuCrTUZx2qq9oAh8p6ixCUGr78g8oyjRAtB5CZFwi80VerVpI0h+IeBxa6Zg6kWvpDHaioYYuEsRbDC3eOmC2JvGYLeioxGknL2UATNJN6hmtj1DlpLvDVmocYbrGCVJKOrg4X6DgddLA203BKMFngdJJFtFd7vJLm6KEpc5yjQrkk7M80SGe34X24nSex1Ra5Omgb71JKyg8SrU3i/kARKwWpH0kOGhKkObyfd0ZGjvyXlAkVZ4xRbYJ2irFMkFY1SwyWxr2oo4zlNiV+7zmaweFpT4kR3kaDAFW6xpSqzJay05FtYR4HmZhc9UxKbbfF2V8RG1MBmSaE+kmC6JnaRXK9gsiXhJHl/U0qM0WTcbyhwkYIvFGwjSbjfwhiJt8ZSQU+Bd5+marPMOkVkD0muxYLIfEuhh60x/J92itguihJSEMySVPQnTewnEm+620rTQEMsOfo4/kP/0ARvWjitlpSX7GxBgcMEsd3EEeYWvdytd+Saawi6aCIj1CkGb6Aj9rwhx16Cf3vAwFy5pyLhVonXzy51FDpdEblbkdJbUcEPDEFzQ8qNmhzzLTmmKWKbFCXeEuRabp6rxbvAtLF442QjQ+wEA9eL1xSR7Q0JXzlSHjJ4exq89yR0laScJ/FW6z4a73pFMEfDiRZvuvijIt86RaSFOl01riV2mD1UEvxGk/Geg5aWwGki1zgKPG9J2U8PEg8qYvMsZeytiTRXBMslCU8JSlxi8EabjwUldlDNLfzTUmCgxWsjqWCOHavYAqsknKFIO0yQ61VL5AVFxk6WhEaCAkdJgt9aSkzXlKNX2jEa79waYuc7gq0N3GDJGCBhoiTXUEPsdknCUE1CK0fwsiaylSF2uiDyO4XX3pFhNd7R4itFGc0k/ElBZwWvq+GC6szVeEoS/MZ+qylwpKNKv9Z469UOjqCjwlusicyTxG6VpNxcQ8IncoR4RhLbR+NdpGGmJWOcIzJGUuKPGpQg8rrG21dOMqQssJQ4RxH5jaUqnZuQ0F4Q+cjxLwPtpZbIAk3QTJHQWBE5S1BokoVtDd6lhqr9UpHSUxMcIYl9pojsb8h4SBOsMQcqvOWC2E8EVehqiJ1hrrAEbQxeK0NGZ0Gkq+guSRgniM23bIHVkqwx4hiHd7smaOyglyIyQuM978j4VS08J/A2G1KeMBRo4fBaSNhKUEZfQewVQ/C1I+MgfbEleEzCUw7mKXI0M3hd1EESVji8x5uQ41nxs1q4RMJCCXs7Iq9acpxn22oSDnQ/sJTxsCbHIYZiLyhY05TY0ZLIOQrGaSJDDN4t8pVaIrsqqFdEegtizc1iTew5Q4ayBDMUsQMkXocaYkc0hZua412siZ1rSXlR460zRJ5SlHGe5j801RLMlJTxtaOM3Q1pvxJ45zUlWFD7rsAbpfEm1JHxG0eh8w2R7QQVzBUw28FhFp5QZzq8t2rx2joqulYTWSuJdTYfWwqMFMcovFmSyJPNyLhE4E10pHzYjOC3huArRa571ZsGajQpQx38SBP5pyZB6lMU3khDnp0MBV51BE9o2E+TY5Ml2E8S7C0o6w1xvCZjf0HkVEHCzFoyNmqC+9wdcqN+Tp7jSDheE9ws8Y5V0NJCn2bk2tqSY4okdrEhx1iDN8cSudwepWmAGXKcJXK65H9to8jYQRH7SBF01ESUJdd0TayVInaWhLkOjlXE5irKGOnI6GSWGCJa482zBI9rCr0jyTVcEuzriC1vcr6mwFGSiqy5zMwxBH/TJHwjSPhL8+01kaaSUuMFKTcLEvaUePcrSmwn8DZrgikWb7CGPxkSjhQwrRk57tctmxLsb9sZvL9LSlyuSLlWkqOjwduo8b6Uv1DkmudIeFF2dHCgxVtk8dpIvHpBxhEOdhKk7OLIUSdJ+cSRY57B+0DgGUUlNfpthTfGkauzxrvTsUUaCVhlKeteTXCoJDCa2NOKhOmC4G1H8JBd4OBZReSRGkqcb/CO1PyLJTLB4j1q8JYaIutEjSLX8YKM+a6phdMsdLFUoV5RTm9JSkuDN8WcIon0NZMNZWh1q8C7SJEwV5HxrmnnTrf3KoJBlmCYI2ilSLlfEvlE4011NNgjgthzEua0oKK7JLE7HZHlEl60BLMVFewg4EWNt0ThrVNEVkkiTwpKXSWJzdRENgvKGq4IhjsiezgSFtsfCUq8qki5S1LRQeYQQ4nemmCkImWMw3tFUoUBZk4NOeZYEp4XRKTGa6wJjrWNHBVJR4m3FCnbuD6aak2WsMTh3SZImGCIPKNgsDpVwnsa70K31lCFJZYcwwSMFcQulGTsZuEaSdBXkPGZhu0FsdUO73RHjq8MPGGIfaGIbVTk6iuI3GFgucHrIQkmWSJdBd7BBu+uOryWAhY7+Lki9rK5wtEQzWwvtbqGhIMFwWRJsElsY4m9IIg9L6lCX0VklaPAYkfkZEGDnOWowlBJjtMUkcGK4Lg6EtoZInMUBVYLgn0UsdmCyCz7gIGHFfk+k1QwTh5We7A9x+IdJ6CvIkEagms0hR50eH9UnTQJ+2oiKyVlLFUE+8gBGu8MQ3CppUHesnjTHN4QB/UGPhCTHLFPHMFrCqa73gqObUJGa03wgbhHkrCfpEpzNLE7JDS25FMKhlhKKWKfCgqstLCPu1zBXy0J2ztwjtixBu8UTRn9LVtkmCN2iyFhtME70JHRQ1KVZXqKI/KNIKYMCYs1GUMEKbM1bKOI9LDXC7zbHS+bt+1MTWS9odA9DtrYtpbImQJ2VHh/lisEwaHqUk1kjKTAKknkBEXkbkdMGwq0dnhzLJF3NJH3JVwrqOB4Sca2hti75nmJN0WzxS6UxDYoEpxpa4htVlRjkYE7DZGzJVU72uC9IyhQL4i8YfGWSYLLNcHXloyz7QhNifmKSE9JgfGmuyLhc403Xm9vqcp6gXe3xuuv8F6VJNxkyTHEkHG2g0aKXL0MsXc1bGfgas2//dCONXiNLCX+5mB7eZIl1kHh7ajwpikyzlUUWOVOsjSQlsS+M0R+pPje/dzBXRZGO0rMtgQrLLG9VSu9n6CMXS3BhwYmSoIBhsjNBmZbgusE9BCPCP5triU4VhNbJfE+swSP27aayE8tuTpYYjtrYjMVGZdp2NpS1s6aBnKSHDsbKuplKbHM4a0wMFd/5/DmGyKrJSUaW4IBrqUhx0vyfzTBBLPIUcnZdrAkNsKR0sWRspumSns6Ch0v/qqIbBYUWKvPU/CFoyrDJGwSNFhbA/MlzKqjrO80hRbpKx0Jewsi/STftwGSlKc1JZyAzx05dhLEdnfQvhZOqiHWWEAHC7+30FuRcZUgaO5gpaIK+xsiHRUsqaPElTV40xQZQ107Q9BZE1nryDVGU9ZSQ47bmhBpLcYpUt7S+xuK/FiT8qKjwXYw5ypS2iuCv7q1gtgjhuBuB8LCFY5cUuCNtsQOFcT+4Ih9JX+k8Ea6v0iCIRZOtCT0Et00JW5UeC85Cg0ScK0k411HcG1zKtre3SeITBRk7WfwDhEvaYLTHP9le0m8By0JDwn4TlLW/aJOvGHxdjYUes+ScZigCkYQdNdEOhkiezgShqkx8ueKjI8lDfK2oNiOFvrZH1hS+tk7NV7nOmLHicGWEgubkXKdwdtZknCLJXaCpkrjZBtLZFsDP9CdxWsSr05Sxl6CMmoFbCOgryX40uDtamB7SVmXW4Ihlgpmq+00tBKUUa83WbjLUNkzDmY7cow1JDygyPGlhgGKYKz4vcV7QBNbJIgM11TUqZaMdwTeSguH6rOaw1JRKzaaGyxVm2EJ/uCIrVWUcZUkcp2grMsEjK+DMwS59jQk3Kd6SEq1d0S6uVmO4Bc1lDXTUcHjluCXEq+1OlBDj1pi9zgiXxnKuE0SqTXwhqbETW6RggMEnGl/q49UT2iCzgJvRwVXS2K/d6+ZkyUl7jawSVLit46EwxVljDZwoSQ20sDBihztHfk2yA8NVZghiXwrYHQdfKAOtzsayjhY9bY0yE2CWEeJ9xfzO423xhL5syS2TFJofO2pboHob0nY4GiAgRrvGQEDa/FWSsoaaYl0syRsEt3kWoH3B01shCXhTUWe9w3Bt44SC9QCh3eShQctwbaK2ApLroGCMlZrYqvlY3qYhM0aXpFkPOuoqJ3Dm6fxXrGwVF9gCWZagjPqznfkuMKQ8DPTQRO8ZqG1hPGKEm9IgpGW4DZDgTNriTxvFiq+Lz+0cKfp4wj6OCK9JSnzNSn9LFU7UhKZZMnYwcJ8s8yRsECScK4j5UOB95HFO0CzhY4xJxuCix0lDlEUeMdS6EZBkTsUkZ4K74dugyTXS7aNgL8aqjDfkCE0ZbwkCXpaWCKhl8P7VD5jxykivSyxyZrYERbe168LYu9ZYh86IkscgVLE7tWPKmJv11CgoyJltMEbrohtVAQfO4ImltiHEroYEs7RxAarVpY8AwXMcMReFOTYWe5iiLRQxJ5Q8DtJ8LQhWOhIeFESPGsILhbNDRljNbHzNRlTFbk2S3L0NOS6V1KFJYKUbSTcIIhM0wQ/s2TM0SRMNcQmSap3jCH4yhJZKSkwyRHpYYgsFeQ4U7xoCB7VVOExhXepo9ABBsYbvGWKXPME3lyH95YioZ0gssQRWWbI+FaSMkXijZXwgiTlYdPdkNLaETxlyDVIwqeaEus0aTcYcg0RVOkpR3CSJqIddK+90JCxzsDVloyrFd5ZAr4TBKfaWa6boEA7C7s6EpYaeFPjveooY72mjIccLHJ9HUwVlDhKkmutJDJBwnp1rvulJZggKDRfbXAkvC/4l3ozQOG9a8lxjx0i7nV4jSXc7vhe3OwIxjgSHjdEhhsif9YkPGlus3iLFDnWOFhtCZbJg0UbQcIaR67JjthoCyMEZRwhiXWyxO5QxI6w5NhT4U1WsJvDO60J34fW9hwzwlKij6ZAW9ne4L0s8C6XeBMEkd/LQy1VucBRot6QMlbivaBhoBgjqGiCJNhsqVp/S2SsG6DIONCR0dXhvWbJ+MRRZJkkuEjgDXJjFQW6SSL7GXK8Z2CZg7cVsbWGoKmEpzQ5elpiy8Ryg7dMkLLUEauzeO86CuwlSOlgYLojZWeJ9xM3S1PWfEfKl5ISLQ0MEKR8YOB2QfCxJBjrKPCN4f9MkaSsqoVXJBmP7EpFZ9UQfOoOFwSzBN4MQ8LsGrymlipcJQhmy0GaQjPqCHaXRwuCZwRbqK2Fg9wlClZqYicrIgMdZfxTQ0c7TBIbrChxmuzoKG8XRaSrIhhiyNFJkrC7oIAWMEOQa5aBekPCRknCo4IKPrYkvCDI8aYmY7WFtprgekcJZ3oLIqssCSMtFbQTJKwXYy3BY5oCh2iKPCpJOE+zRdpYgi6O2KmOAgvVCYaU4ySRek1sgyFhJ403QFHiVEmJHwtybO1gs8Hr5+BETQX3War0qZngYGgtVZtoqd6vFSk/UwdZElYqyjrF4HXUeFspIi9IGKf4j92pKGAdCYMVsbcV3kRF0N+R8LUd5PCsIGWoxDtBkCI0nKofdJQxT+LtZflvuc8Q3CjwWkq8KwUpHzkK/NmSsclCL0nseQdj5FRH5CNHSgtLiW80Of5HU9Hhlsga9bnBq3fEVltKfO5IaSTmGjjc4J0otcP7QsJUSQM8pEj5/wCuUuC2DWz8AAAAAElFTkSuQmCC"); } ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/theme/base16-dark.css ================================================ /* Name: Base16 Default Dark Author: Chris Kempson (http://chriskempson.com) CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-chrome-devtools) Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ .cm-s-base16-dark.CodeMirror {background: #151515; color: #e0e0e0;} .cm-s-base16-dark div.CodeMirror-selected {background: #303030 !important;} .cm-s-base16-dark.CodeMirror ::selection { background: rgba(48, 48, 48, .99); } .cm-s-base16-dark.CodeMirror ::-moz-selection { background: rgba(48, 48, 48, .99); } .cm-s-base16-dark .CodeMirror-gutters {background: #151515; border-right: 0px;} .cm-s-base16-dark .CodeMirror-guttermarker { color: #ac4142; } .cm-s-base16-dark .CodeMirror-guttermarker-subtle { color: #505050; } .cm-s-base16-dark .CodeMirror-linenumber {color: #505050;} .cm-s-base16-dark .CodeMirror-cursor {border-left: 1px solid #b0b0b0 !important;} .cm-s-base16-dark span.cm-comment {color: #8f5536;} .cm-s-base16-dark span.cm-atom {color: #aa759f;} .cm-s-base16-dark span.cm-number {color: #aa759f;} .cm-s-base16-dark span.cm-property, .cm-s-base16-dark span.cm-attribute {color: #90a959;} .cm-s-base16-dark span.cm-keyword {color: #ac4142;} .cm-s-base16-dark span.cm-string {color: #f4bf75;} .cm-s-base16-dark span.cm-variable {color: #90a959;} .cm-s-base16-dark span.cm-variable-2 {color: #6a9fb5;} .cm-s-base16-dark span.cm-def {color: #d28445;} .cm-s-base16-dark span.cm-bracket {color: #e0e0e0;} .cm-s-base16-dark span.cm-tag {color: #ac4142;} .cm-s-base16-dark span.cm-link {color: #aa759f;} .cm-s-base16-dark span.cm-error {background: #ac4142; color: #b0b0b0;} .cm-s-base16-dark .CodeMirror-activeline-background {background: #202020 !important;} .cm-s-base16-dark .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/theme/base16-light.css ================================================ /* Name: Base16 Default Light Author: Chris Kempson (http://chriskempson.com) CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-chrome-devtools) Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ .cm-s-base16-light.CodeMirror {background: #f5f5f5; color: #202020;} .cm-s-base16-light div.CodeMirror-selected {background: #e0e0e0 !important;} .cm-s-base16-light.CodeMirror ::selection { background: #e0e0e0; } .cm-s-base16-light.CodeMirror ::-moz-selection { background: #e0e0e0; } .cm-s-base16-light .CodeMirror-gutters {background: #f5f5f5; border-right: 0px;} .cm-s-base16-light .CodeMirror-guttermarker { color: #ac4142; } .cm-s-base16-light .CodeMirror-guttermarker-subtle { color: #b0b0b0; } .cm-s-base16-light .CodeMirror-linenumber {color: #b0b0b0;} .cm-s-base16-light .CodeMirror-cursor {border-left: 1px solid #505050 !important;} .cm-s-base16-light span.cm-comment {color: #8f5536;} .cm-s-base16-light span.cm-atom {color: #aa759f;} .cm-s-base16-light span.cm-number {color: #aa759f;} .cm-s-base16-light span.cm-property, .cm-s-base16-light span.cm-attribute {color: #90a959;} .cm-s-base16-light span.cm-keyword {color: #ac4142;} .cm-s-base16-light span.cm-string {color: #f4bf75;} .cm-s-base16-light span.cm-variable {color: #90a959;} .cm-s-base16-light span.cm-variable-2 {color: #6a9fb5;} .cm-s-base16-light span.cm-def {color: #d28445;} .cm-s-base16-light span.cm-bracket {color: #202020;} .cm-s-base16-light span.cm-tag {color: #ac4142;} .cm-s-base16-light span.cm-link {color: #aa759f;} .cm-s-base16-light span.cm-error {background: #ac4142; color: #505050;} .cm-s-base16-light .CodeMirror-activeline-background {background: #DDDCDC !important;} .cm-s-base16-light .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/theme/blackboard.css ================================================ /* Port of TextMate's Blackboard theme */ .cm-s-blackboard.CodeMirror { background: #0C1021; color: #F8F8F8; } .cm-s-blackboard .CodeMirror-selected { background: #253B76 !important; } .cm-s-blackboard.CodeMirror ::selection { background: rgba(37, 59, 118, .99); } .cm-s-blackboard.CodeMirror ::-moz-selection { background: rgba(37, 59, 118, .99); } .cm-s-blackboard .CodeMirror-gutters { background: #0C1021; border-right: 0; } .cm-s-blackboard .CodeMirror-guttermarker { color: #FBDE2D; } .cm-s-blackboard .CodeMirror-guttermarker-subtle { color: #888; } .cm-s-blackboard .CodeMirror-linenumber { color: #888; } .cm-s-blackboard .CodeMirror-cursor { border-left: 1px solid #A7A7A7 !important; } .cm-s-blackboard .cm-keyword { color: #FBDE2D; } .cm-s-blackboard .cm-atom { color: #D8FA3C; } .cm-s-blackboard .cm-number { color: #D8FA3C; } .cm-s-blackboard .cm-def { color: #8DA6CE; } .cm-s-blackboard .cm-variable { color: #FF6400; } .cm-s-blackboard .cm-operator { color: #FBDE2D;} .cm-s-blackboard .cm-comment { color: #AEAEAE; } .cm-s-blackboard .cm-string { color: #61CE3C; } .cm-s-blackboard .cm-string-2 { color: #61CE3C; } .cm-s-blackboard .cm-meta { color: #D8FA3C; } .cm-s-blackboard .cm-builtin { color: #8DA6CE; } .cm-s-blackboard .cm-tag { color: #8DA6CE; } .cm-s-blackboard .cm-attribute { color: #8DA6CE; } .cm-s-blackboard .cm-header { color: #FF6400; } .cm-s-blackboard .cm-hr { color: #AEAEAE; } .cm-s-blackboard .cm-link { color: #8DA6CE; } .cm-s-blackboard .cm-error { background: #9D1E15; color: #F8F8F8; } .cm-s-blackboard .CodeMirror-activeline-background {background: #3C3636 !important;} .cm-s-blackboard .CodeMirror-matchingbracket {outline:1px solid grey;color:white !important} ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/theme/cobalt.css ================================================ .cm-s-cobalt.CodeMirror { background: #002240; color: white; } .cm-s-cobalt div.CodeMirror-selected { background: #b36539 !important; } .cm-s-cobalt.CodeMirror ::selection { background: rgba(179, 101, 57, .99); } .cm-s-cobalt.CodeMirror ::-moz-selection { background: rgba(179, 101, 57, .99); } .cm-s-cobalt .CodeMirror-gutters { background: #002240; border-right: 1px solid #aaa; } .cm-s-cobalt .CodeMirror-guttermarker { color: #ffee80; } .cm-s-cobalt .CodeMirror-guttermarker-subtle { color: #d0d0d0; } .cm-s-cobalt .CodeMirror-linenumber { color: #d0d0d0; } .cm-s-cobalt .CodeMirror-cursor { border-left: 1px solid white !important; } .cm-s-cobalt span.cm-comment { color: #08f; } .cm-s-cobalt span.cm-atom { color: #845dc4; } .cm-s-cobalt span.cm-number, .cm-s-cobalt span.cm-attribute { color: #ff80e1; } .cm-s-cobalt span.cm-keyword { color: #ffee80; } .cm-s-cobalt span.cm-string { color: #3ad900; } .cm-s-cobalt span.cm-meta { color: #ff9d00; } .cm-s-cobalt span.cm-variable-2, .cm-s-cobalt span.cm-tag { color: #9effff; } .cm-s-cobalt span.cm-variable-3, .cm-s-cobalt span.cm-def { color: white; } .cm-s-cobalt span.cm-bracket { color: #d8d8d8; } .cm-s-cobalt span.cm-builtin, .cm-s-cobalt span.cm-special { color: #ff9e59; } .cm-s-cobalt span.cm-link { color: #845dc4; } .cm-s-cobalt span.cm-error { color: #9d1e15; } .cm-s-cobalt .CodeMirror-activeline-background {background: #002D57 !important;} .cm-s-cobalt .CodeMirror-matchingbracket {outline:1px solid grey;color:white !important} ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/theme/colorforth.css ================================================ .cm-s-colorforth.CodeMirror { background: #000000; color: #f8f8f8; } .cm-s-colorforth .CodeMirror-gutters { background: #0a001f; border-right: 1px solid #aaa; } .cm-s-colorforth .CodeMirror-guttermarker { color: #FFBD40; } .cm-s-colorforth .CodeMirror-guttermarker-subtle { color: #78846f; } .cm-s-colorforth .CodeMirror-linenumber { color: #bababa; } .cm-s-colorforth .CodeMirror-cursor { border-left: 1px solid white !important; } .cm-s-colorforth span.cm-comment { color: #ededed; } .cm-s-colorforth span.cm-def { color: #ff1c1c; font-weight:bold; } .cm-s-colorforth span.cm-keyword { color: #ffd900; } .cm-s-colorforth span.cm-builtin { color: #00d95a; } .cm-s-colorforth span.cm-variable { color: #73ff00; } .cm-s-colorforth span.cm-string { color: #007bff; } .cm-s-colorforth span.cm-number { color: #00c4ff; } .cm-s-colorforth span.cm-atom { color: #606060; } .cm-s-colorforth span.cm-variable-2 { color: #EEE; } .cm-s-colorforth span.cm-variable-3 { color: #DDD; } .cm-s-colorforth span.cm-property {} .cm-s-colorforth span.cm-operator {} .cm-s-colorforth span.cm-meta { color: yellow; } .cm-s-colorforth span.cm-qualifier { color: #FFF700; } .cm-s-colorforth span.cm-bracket { color: #cc7; } .cm-s-colorforth span.cm-tag { color: #FFBD40; } .cm-s-colorforth span.cm-attribute { color: #FFF700; } .cm-s-colorforth span.cm-error { color: #f00; } .cm-s-colorforth .CodeMirror-selected { background: #333d53 !important; } .cm-s-colorforth span.cm-compilation { background: rgba(255, 255, 255, 0.12); } .cm-s-colorforth .CodeMirror-activeline-background {background: #253540 !important;} ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/theme/eclipse.css ================================================ .cm-s-eclipse span.cm-meta {color: #FF1717;} .cm-s-eclipse span.cm-keyword { line-height: 1em; font-weight: bold; color: #7F0055; } .cm-s-eclipse span.cm-atom {color: #219;} .cm-s-eclipse span.cm-number {color: #164;} .cm-s-eclipse span.cm-def {color: #00f;} .cm-s-eclipse span.cm-variable {color: black;} .cm-s-eclipse span.cm-variable-2 {color: #0000C0;} .cm-s-eclipse span.cm-variable-3 {color: #0000C0;} .cm-s-eclipse span.cm-property {color: black;} .cm-s-eclipse span.cm-operator {color: black;} .cm-s-eclipse span.cm-comment {color: #3F7F5F;} .cm-s-eclipse span.cm-string {color: #2A00FF;} .cm-s-eclipse span.cm-string-2 {color: #f50;} .cm-s-eclipse span.cm-qualifier {color: #555;} .cm-s-eclipse span.cm-builtin {color: #30a;} .cm-s-eclipse span.cm-bracket {color: #cc7;} .cm-s-eclipse span.cm-tag {color: #170;} .cm-s-eclipse span.cm-attribute {color: #00c;} .cm-s-eclipse span.cm-link {color: #219;} .cm-s-eclipse span.cm-error {color: #f00;} .cm-s-eclipse .CodeMirror-activeline-background {background: #e8f2ff !important;} .cm-s-eclipse .CodeMirror-matchingbracket {outline:1px solid grey; color:black !important;} ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/theme/elegant.css ================================================ .cm-s-elegant span.cm-number, .cm-s-elegant span.cm-string, .cm-s-elegant span.cm-atom {color: #762;} .cm-s-elegant span.cm-comment {color: #262; font-style: italic; line-height: 1em;} .cm-s-elegant span.cm-meta {color: #555; font-style: italic; line-height: 1em;} .cm-s-elegant span.cm-variable {color: black;} .cm-s-elegant span.cm-variable-2 {color: #b11;} .cm-s-elegant span.cm-qualifier {color: #555;} .cm-s-elegant span.cm-keyword {color: #730;} .cm-s-elegant span.cm-builtin {color: #30a;} .cm-s-elegant span.cm-link {color: #762;} .cm-s-elegant span.cm-error {background-color: #fdd;} .cm-s-elegant .CodeMirror-activeline-background {background: #e8f2ff !important;} .cm-s-elegant .CodeMirror-matchingbracket {outline:1px solid grey; color:black !important;} ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/theme/erlang-dark.css ================================================ .cm-s-erlang-dark.CodeMirror { background: #002240; color: white; } .cm-s-erlang-dark div.CodeMirror-selected { background: #b36539 !important; } .cm-s-erlang-dark.CodeMirror ::selection { background: rgba(179, 101, 57, .99); } .cm-s-erlang-dark.CodeMirror ::-moz-selection { background: rgba(179, 101, 57, .99); } .cm-s-erlang-dark .CodeMirror-gutters { background: #002240; border-right: 1px solid #aaa; } .cm-s-erlang-dark .CodeMirror-guttermarker { color: white; } .cm-s-erlang-dark .CodeMirror-guttermarker-subtle { color: #d0d0d0; } .cm-s-erlang-dark .CodeMirror-linenumber { color: #d0d0d0; } .cm-s-erlang-dark .CodeMirror-cursor { border-left: 1px solid white !important; } .cm-s-erlang-dark span.cm-atom { color: #f133f1; } .cm-s-erlang-dark span.cm-attribute { color: #ff80e1; } .cm-s-erlang-dark span.cm-bracket { color: #ff9d00; } .cm-s-erlang-dark span.cm-builtin { color: #eaa; } .cm-s-erlang-dark span.cm-comment { color: #77f; } .cm-s-erlang-dark span.cm-def { color: #e7a; } .cm-s-erlang-dark span.cm-keyword { color: #ffee80; } .cm-s-erlang-dark span.cm-meta { color: #50fefe; } .cm-s-erlang-dark span.cm-number { color: #ffd0d0; } .cm-s-erlang-dark span.cm-operator { color: #d55; } .cm-s-erlang-dark span.cm-property { color: #ccc; } .cm-s-erlang-dark span.cm-qualifier { color: #ccc; } .cm-s-erlang-dark span.cm-quote { color: #ccc; } .cm-s-erlang-dark span.cm-special { color: #ffbbbb; } .cm-s-erlang-dark span.cm-string { color: #3ad900; } .cm-s-erlang-dark span.cm-string-2 { color: #ccc; } .cm-s-erlang-dark span.cm-tag { color: #9effff; } .cm-s-erlang-dark span.cm-variable { color: #50fe50; } .cm-s-erlang-dark span.cm-variable-2 { color: #e0e; } .cm-s-erlang-dark span.cm-variable-3 { color: #ccc; } .cm-s-erlang-dark span.cm-error { color: #9d1e15; } .cm-s-erlang-dark .CodeMirror-activeline-background {background: #013461 !important;} .cm-s-erlang-dark .CodeMirror-matchingbracket {outline:1px solid grey; color:white !important;} ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/theme/lesser-dark.css ================================================ /* http://lesscss.org/ dark theme Ported to CodeMirror by Peter Kroon */ .cm-s-lesser-dark { line-height: 1.3em; } .cm-s-lesser-dark.CodeMirror { background: #262626; color: #EBEFE7; text-shadow: 0 -1px 1px #262626; } .cm-s-lesser-dark div.CodeMirror-selected {background: #45443B !important;} /* 33322B*/ .cm-s-lesser-dark.CodeMirror ::selection { background: rgba(69, 68, 59, .99); } .cm-s-lesser-dark.CodeMirror ::-moz-selection { background: rgba(69, 68, 59, .99); } .cm-s-lesser-dark .CodeMirror-cursor { border-left: 1px solid white !important; } .cm-s-lesser-dark pre { padding: 0 8px; }/*editable code holder*/ .cm-s-lesser-dark.CodeMirror span.CodeMirror-matchingbracket { color: #7EFC7E; }/*65FC65*/ .cm-s-lesser-dark .CodeMirror-gutters { background: #262626; border-right:1px solid #aaa; } .cm-s-lesser-dark .CodeMirror-guttermarker { color: #599eff; } .cm-s-lesser-dark .CodeMirror-guttermarker-subtle { color: #777; } .cm-s-lesser-dark .CodeMirror-linenumber { color: #777; } .cm-s-lesser-dark span.cm-keyword { color: #599eff; } .cm-s-lesser-dark span.cm-atom { color: #C2B470; } .cm-s-lesser-dark span.cm-number { color: #B35E4D; } .cm-s-lesser-dark span.cm-def {color: white;} .cm-s-lesser-dark span.cm-variable { color:#D9BF8C; } .cm-s-lesser-dark span.cm-variable-2 { color: #669199; } .cm-s-lesser-dark span.cm-variable-3 { color: white; } .cm-s-lesser-dark span.cm-property {color: #92A75C;} .cm-s-lesser-dark span.cm-operator {color: #92A75C;} .cm-s-lesser-dark span.cm-comment { color: #666; } .cm-s-lesser-dark span.cm-string { color: #BCD279; } .cm-s-lesser-dark span.cm-string-2 {color: #f50;} .cm-s-lesser-dark span.cm-meta { color: #738C73; } .cm-s-lesser-dark span.cm-qualifier {color: #555;} .cm-s-lesser-dark span.cm-builtin { color: #ff9e59; } .cm-s-lesser-dark span.cm-bracket { color: #EBEFE7; } .cm-s-lesser-dark span.cm-tag { color: #669199; } .cm-s-lesser-dark span.cm-attribute {color: #00c;} .cm-s-lesser-dark span.cm-header {color: #a0a;} .cm-s-lesser-dark span.cm-quote {color: #090;} .cm-s-lesser-dark span.cm-hr {color: #999;} .cm-s-lesser-dark span.cm-link {color: #00c;} .cm-s-lesser-dark span.cm-error { color: #9d1e15; } .cm-s-lesser-dark .CodeMirror-activeline-background {background: #3C3A3A !important;} .cm-s-lesser-dark .CodeMirror-matchingbracket {outline:1px solid grey; color:white !important;} ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/theme/mbo.css ================================================ /****************************************************************/ /* Based on mbonaci's Brackets mbo theme */ /* https://github.com/mbonaci/global/blob/master/Mbo.tmTheme */ /* Create your own: http://tmtheme-editor.herokuapp.com */ /****************************************************************/ .cm-s-mbo.CodeMirror {background: #2c2c2c; color: #ffffec;} .cm-s-mbo div.CodeMirror-selected {background: #716C62 !important;} .cm-s-mbo.CodeMirror ::selection { background: rgba(113, 108, 98, .99); } .cm-s-mbo.CodeMirror ::-moz-selection { background: rgba(113, 108, 98, .99); } .cm-s-mbo .CodeMirror-gutters {background: #4e4e4e; border-right: 0px;} .cm-s-mbo .CodeMirror-guttermarker { color: white; } .cm-s-mbo .CodeMirror-guttermarker-subtle { color: grey; } .cm-s-mbo .CodeMirror-linenumber {color: #dadada;} .cm-s-mbo .CodeMirror-cursor {border-left: 1px solid #ffffec !important;} .cm-s-mbo span.cm-comment {color: #95958a;} .cm-s-mbo span.cm-atom {color: #00a8c6;} .cm-s-mbo span.cm-number {color: #00a8c6;} .cm-s-mbo span.cm-property, .cm-s-mbo span.cm-attribute {color: #9ddfe9;} .cm-s-mbo span.cm-keyword {color: #ffb928;} .cm-s-mbo span.cm-string {color: #ffcf6c;} .cm-s-mbo span.cm-string.cm-property {color: #ffffec;} .cm-s-mbo span.cm-variable {color: #ffffec;} .cm-s-mbo span.cm-variable-2 {color: #00a8c6;} .cm-s-mbo span.cm-def {color: #ffffec;} .cm-s-mbo span.cm-bracket {color: #fffffc; font-weight: bold;} .cm-s-mbo span.cm-tag {color: #9ddfe9;} .cm-s-mbo span.cm-link {color: #f54b07;} .cm-s-mbo span.cm-error {border-bottom: #636363; color: #ffffec;} .cm-s-mbo span.cm-qualifier {color: #ffffec;} .cm-s-mbo .CodeMirror-activeline-background {background: #494b41 !important;} .cm-s-mbo .CodeMirror-matchingbracket {color: #222 !important;} .cm-s-mbo .CodeMirror-matchingtag {background: rgba(255, 255, 255, .37);} ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/theme/mdn-like.css ================================================ /* MDN-LIKE Theme - Mozilla Ported to CodeMirror by Peter Kroon Report bugs/issues here: https://github.com/codemirror/CodeMirror/issues GitHub: @peterkroon The mdn-like theme is inspired on the displayed code examples at: https://developer.mozilla.org/en-US/docs/Web/CSS/animation */ .cm-s-mdn-like.CodeMirror { color: #999; background-color: #fff; } .cm-s-mdn-like .CodeMirror-selected { background: #cfc !important; } .cm-s-mdn-like.CodeMirror ::selection { background: #cfc; } .cm-s-mdn-like.CodeMirror ::-moz-selection { background: #cfc; } .cm-s-mdn-like .CodeMirror-gutters { background: #f8f8f8; border-left: 6px solid rgba(0,83,159,0.65); color: #333; } .cm-s-mdn-like .CodeMirror-linenumber { color: #aaa; margin-left: 3px; } div.cm-s-mdn-like .CodeMirror-cursor { border-left: 2px solid #222; } .cm-s-mdn-like .cm-keyword { color: #6262FF; } .cm-s-mdn-like .cm-atom { color: #F90; } .cm-s-mdn-like .cm-number { color: #ca7841; } .cm-s-mdn-like .cm-def { color: #8DA6CE; } .cm-s-mdn-like span.cm-variable-2, .cm-s-mdn-like span.cm-tag { color: #690; } .cm-s-mdn-like span.cm-variable-3, .cm-s-mdn-like span.cm-def { color: #07a; } .cm-s-mdn-like .cm-variable { color: #07a; } .cm-s-mdn-like .cm-property { color: #905; } .cm-s-mdn-like .cm-qualifier { color: #690; } .cm-s-mdn-like .cm-operator { color: #cda869; } .cm-s-mdn-like .cm-comment { color:#777; font-weight:normal; } .cm-s-mdn-like .cm-string { color:#07a; font-style:italic; } .cm-s-mdn-like .cm-string-2 { color:#bd6b18; } /*?*/ .cm-s-mdn-like .cm-meta { color: #000; } /*?*/ .cm-s-mdn-like .cm-builtin { color: #9B7536; } /*?*/ .cm-s-mdn-like .cm-tag { color: #997643; } .cm-s-mdn-like .cm-attribute { color: #d6bb6d; } /*?*/ .cm-s-mdn-like .cm-header { color: #FF6400; } .cm-s-mdn-like .cm-hr { color: #AEAEAE; } .cm-s-mdn-like .cm-link { color:#ad9361; font-style:italic; text-decoration:none; } .cm-s-mdn-like .cm-error { border-bottom: 1px solid red; } div.cm-s-mdn-like .CodeMirror-activeline-background {background: #efefff;} div.cm-s-mdn-like span.CodeMirror-matchingbracket {outline:1px solid grey; color: inherit;} .cm-s-mdn-like.CodeMirror { background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAAAyCAYAAAAp8UeFAAAHvklEQVR42s2b63bcNgyEQZCSHCdt2vd/0tWF7I+Q6XgMXiTtuvU5Pl57ZQKkKHzEAOtF5KeIJBGJ8uvL599FRFREZhFx8DeXv8trn68RuGaC8TRfo3SNp9dlDDHedyLyTUTeRWStXKPZrjtpZxaRw5hPqozRs1N8/enzIiQRWcCgy4MUA0f+XWliDhyL8Lfyvx7ei/Ae3iQFHyw7U/59pQVIMEEPEz0G7XiwdRjzSfC3UTtz9vchIntxvry5iMgfIhJoEflOz2CQr3F5h/HfeFe+GTdLaKcu9L8LTeQb/R/7GgbsfKedyNdoHsN31uRPWrfZ5wsj/NzzRQHuToIdU3ahwnsKPxXCjJITuOsi7XLc7SG/v5GdALs7wf8JjTFiB5+QvTEfRyGOfX3Lrx8wxyQi3sNq46O7QahQiCsRFgqddjBouVEHOKDgXAQHD9gJCr5sMKkEdjwsarG/ww3BMHBU7OBjXnzdyY7SfCxf5/z6ATccrwlKuwC/jhznnPF4CgVzhhVf4xp2EixcBActO75iZ8/fM9zAs2OMzKdslgXWJ9XG8PQoOAMA5fGcsvORgv0doBXyHrCwfLJAOwo71QLNkb8n2Pl6EWiR7OCibtkPaz4Kc/0NNAze2gju3zOwekALDaCFPI5vjPFmgGY5AZqyGEvH1x7QfIb8YtxMnA/b+QQ0aQDAwc6JMFg8CbQZ4qoYEEHbRwNojuK3EHwd7VALSgq+MNDKzfT58T8qdpADrgW0GmgcAS1lhzztJmkAzcPNOQbsWEALBDSlMKUG0Eq4CLAQWvEVQ9WU57gZJwZtgPO3r9oBTQ9WO8TjqXINx8R0EYpiZEUWOF3FxkbJkgU9B2f41YBrIj5ZfsQa0M5kTgiAAqM3ShXLgu8XMqcrQBvJ0CL5pnTsfMB13oB8athpAq2XOQmcGmoACCLydx7nToa23ATaSIY2ichfOdPTGxlasXMLaL0MLZAOwAKIM+y8CmicobGdCcbbK9DzN+yYGVoNNI5iUKTMyYOjPse4A8SM1MmcXgU0toOq1yO/v8FOxlASyc7TgeYaAMBJHcY1CcCwGI/TK4AmDbDyKYBBtFUkRwto8gygiQEaByFgJ00BH2M8JWwQS1nafDXQCidWyOI8AcjDCSjCLk8ngObuAm3JAHAdubAmOaK06V8MNEsKPJOhobSprwQa6gD7DclRQdqcwL4zxqgBrQcabUiBLclRDKAlWp+etPkBaNMA0AKlrHwTdEByZAA4GM+SNluSY6wAzcMNewxmgig5Ks0nkrSpBvSaQHMdKTBAnLojOdYyGpQ254602ZILPdTD1hdlggdIm74jbTp8vDwF5ZYUeLWGJpWsh6XNyXgcYwVoJQTEhhTYkxzZjiU5npU2TaB979TQehlaAVq4kaGpiPwwwLkYUuBbQwocyQTv1tA0+1UFWoJF3iv1oq+qoSk8EQdJmwHkziIF7oOZk14EGitibAdjLYYK78H5vZOhtWpoI0ATGHs0Q8OMb4Ey+2bU2UYztCtA0wFAs7TplGLRVQCcqaFdGSPCeTI1QNIC52iWNzof6Uib7xjEp07mNNoUYmVosVItHrHzRlLgBn9LFyRHaQCtVUMbtTNhoXWiTOO9k/V8BdAc1Oq0ArSQs6/5SU0hckNy9NnXqQY0PGYo5dWJ7nINaN6o958FWin27aBaWRka1r5myvLOAm0j30eBJqCxHLReVclxhxOEN2JfDWjxBtAC7MIH1fVaGdoOp4qJYDgKtKPSFNID2gSnGldrCqkFZ+5UeQXQBIRrSwocbdZYQT/2LwRahBPBXoHrB8nxaGROST62DKUbQOMMzZIC9abkuELfQzQALWTnDNAm8KHWFOJgJ5+SHIvTPcmx1xQyZRhNL5Qci689aXMEaN/uNIWkEwDAvFpOZmgsBaaGnbs1NPa1Jm32gBZAIh1pCtG7TSH4aE0y1uVY4uqoFPisGlpP2rSA5qTecWn5agK6BzSpgAyD+wFaqhnYoSZ1Vwr8CmlTQbrcO3ZaX0NAEyMbYaAlyquFoLKK3SPby9CeVUPThrSJmkCAE0CrKUQadi4DrdSlWhmah0YL9z9vClH59YGbHx1J8VZTyAjQepJjmXwAKTDQI3omc3p1U4gDUf6RfcdYfrUp5ClAi2J3Ba6UOXGo+K+bQrjjssitG2SJzshaLwMtXgRagUNpYYoVkMSBLM+9GGiJZMvduG6DRZ4qc04DMPtQQxOjEtACmhO7K1AbNbQDEggZyJwscFpAGwENhoBeUwh3bWolhe8BTYVKxQEWrSUn/uhcM5KhvUu/+eQu0Lzhi+VrK0PrZZNDQKs9cpYUuFYgMVpD4/NxenJTiMCNqdUEUf1qZWjppLT5qSkkUZbCwkbZMSuVnu80hfSkzRbQeqCZSAh6huR4VtoM2gHAlLf72smuWgE+VV7XpE25Ab2WFDgyhnSuKbs4GuGzCjR+tIoUuMFg3kgcWKLTwRqanJQ2W00hAsenfaApRC42hbCvK1SlE0HtE9BGgneJO+ELamitD1YjjOYnNYVcraGhtKkW0EqVVeDx733I2NH581k1NNxNLG0i0IJ8/NjVaOZ0tYZ2Vtr0Xv7tPV3hkWp9EFkgS/J0vosngTaSoaG06WHi+xObQkaAdlbanP8B2+2l0f90LmUAAAAASUVORK5CYII=); } ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/theme/midnight.css ================================================ /* Based on the theme at http://bonsaiden.github.com/JavaScript-Garden */ /**/ .cm-s-midnight span.CodeMirror-matchhighlight { background: #494949; } .cm-s-midnight.CodeMirror-focused span.CodeMirror-matchhighlight { background: #314D67 !important; } /**/ .cm-s-midnight .CodeMirror-activeline-background {background: #253540 !important;} .cm-s-midnight.CodeMirror { background: #0F192A; color: #D1EDFF; } .cm-s-midnight.CodeMirror {border-top: 1px solid black; border-bottom: 1px solid black;} .cm-s-midnight div.CodeMirror-selected {background: #314D67 !important;} .cm-s-midnight.CodeMirror ::selection { background: rgba(49, 77, 103, .99); } .cm-s-midnight.CodeMirror ::-moz-selection { background: rgba(49, 77, 103, .99); } .cm-s-midnight .CodeMirror-gutters {background: #0F192A; border-right: 1px solid;} .cm-s-midnight .CodeMirror-guttermarker { color: white; } .cm-s-midnight .CodeMirror-guttermarker-subtle { color: #d0d0d0; } .cm-s-midnight .CodeMirror-linenumber {color: #D0D0D0;} .cm-s-midnight .CodeMirror-cursor { border-left: 1px solid #F8F8F0 !important; } .cm-s-midnight span.cm-comment {color: #428BDD;} .cm-s-midnight span.cm-atom {color: #AE81FF;} .cm-s-midnight span.cm-number {color: #D1EDFF;} .cm-s-midnight span.cm-property, .cm-s-midnight span.cm-attribute {color: #A6E22E;} .cm-s-midnight span.cm-keyword {color: #E83737;} .cm-s-midnight span.cm-string {color: #1DC116;} .cm-s-midnight span.cm-variable {color: #FFAA3E;} .cm-s-midnight span.cm-variable-2 {color: #FFAA3E;} .cm-s-midnight span.cm-def {color: #4DD;} .cm-s-midnight span.cm-bracket {color: #D1EDFF;} .cm-s-midnight span.cm-tag {color: #449;} .cm-s-midnight span.cm-link {color: #AE81FF;} .cm-s-midnight span.cm-error {background: #F92672; color: #F8F8F0;} .cm-s-midnight .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; } ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/theme/monokai.css ================================================ /* Based on Sublime Text's Monokai theme */ .cm-s-monokai.CodeMirror {background: #272822; color: #f8f8f2;} .cm-s-monokai div.CodeMirror-selected {background: #49483E !important;} .cm-s-monokai.CodeMirror ::selection { background: rgba(73, 72, 62, .99); } .cm-s-monokai.CodeMirror ::-moz-selection { background: rgba(73, 72, 62, .99); } .cm-s-monokai .CodeMirror-gutters {background: #272822; border-right: 0px;} .cm-s-monokai .CodeMirror-guttermarker { color: white; } .cm-s-monokai .CodeMirror-guttermarker-subtle { color: #d0d0d0; } .cm-s-monokai .CodeMirror-linenumber {color: #d0d0d0;} .cm-s-monokai .CodeMirror-cursor {border-left: 1px solid #f8f8f0 !important;} .cm-s-monokai span.cm-comment {color: #75715e;} .cm-s-monokai span.cm-atom {color: #ae81ff;} .cm-s-monokai span.cm-number {color: #ae81ff;} .cm-s-monokai span.cm-property, .cm-s-monokai span.cm-attribute {color: #a6e22e;} .cm-s-monokai span.cm-keyword {color: #f92672;} .cm-s-monokai span.cm-string {color: #e6db74;} .cm-s-monokai span.cm-variable {color: #a6e22e;} .cm-s-monokai span.cm-variable-2 {color: #9effff;} .cm-s-monokai span.cm-def {color: #fd971f;} .cm-s-monokai span.cm-bracket {color: #f8f8f2;} .cm-s-monokai span.cm-tag {color: #f92672;} .cm-s-monokai span.cm-link {color: #ae81ff;} .cm-s-monokai span.cm-error {background: #f92672; color: #f8f8f0;} .cm-s-monokai .CodeMirror-activeline-background {background: #373831 !important;} .cm-s-monokai .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; } ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/theme/neat.css ================================================ .cm-s-neat span.cm-comment { color: #a86; } .cm-s-neat span.cm-keyword { line-height: 1em; font-weight: bold; color: blue; } .cm-s-neat span.cm-string { color: #a22; } .cm-s-neat span.cm-builtin { line-height: 1em; font-weight: bold; color: #077; } .cm-s-neat span.cm-special { line-height: 1em; font-weight: bold; color: #0aa; } .cm-s-neat span.cm-variable { color: black; } .cm-s-neat span.cm-number, .cm-s-neat span.cm-atom { color: #3a3; } .cm-s-neat span.cm-meta {color: #555;} .cm-s-neat span.cm-link { color: #3a3; } .cm-s-neat .CodeMirror-activeline-background {background: #e8f2ff !important;} .cm-s-neat .CodeMirror-matchingbracket {outline:1px solid grey; color:black !important;} ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/theme/neo.css ================================================ /* neo theme for codemirror */ /* Color scheme */ .cm-s-neo.CodeMirror { background-color:#ffffff; color:#2e383c; line-height:1.4375; } .cm-s-neo .cm-comment {color:#75787b} .cm-s-neo .cm-keyword, .cm-s-neo .cm-property {color:#1d75b3} .cm-s-neo .cm-atom,.cm-s-neo .cm-number {color:#75438a} .cm-s-neo .cm-node,.cm-s-neo .cm-tag {color:#9c3328} .cm-s-neo .cm-string {color:#b35e14} .cm-s-neo .cm-variable,.cm-s-neo .cm-qualifier {color:#047d65} /* Editor styling */ .cm-s-neo pre { padding:0; } .cm-s-neo .CodeMirror-gutters { border:none; border-right:10px solid transparent; background-color:transparent; } .cm-s-neo .CodeMirror-linenumber { padding:0; color:#e0e2e5; } .cm-s-neo .CodeMirror-guttermarker { color: #1d75b3; } .cm-s-neo .CodeMirror-guttermarker-subtle { color: #e0e2e5; } .cm-s-neo div.CodeMirror-cursor { width: auto; border: 0; background: rgba(155,157,162,0.37); z-index: 1; } ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/theme/night.css ================================================ /* Loosely based on the Midnight Textmate theme */ .cm-s-night.CodeMirror { background: #0a001f; color: #f8f8f8; } .cm-s-night div.CodeMirror-selected { background: #447 !important; } .cm-s-night.CodeMirror ::selection { background: rgba(68, 68, 119, .99); } .cm-s-night.CodeMirror ::-moz-selection { background: rgba(68, 68, 119, .99); } .cm-s-night .CodeMirror-gutters { background: #0a001f; border-right: 1px solid #aaa; } .cm-s-night .CodeMirror-guttermarker { color: white; } .cm-s-night .CodeMirror-guttermarker-subtle { color: #bbb; } .cm-s-night .CodeMirror-linenumber { color: #f8f8f8; } .cm-s-night .CodeMirror-cursor { border-left: 1px solid white !important; } .cm-s-night span.cm-comment { color: #6900a1; } .cm-s-night span.cm-atom { color: #845dc4; } .cm-s-night span.cm-number, .cm-s-night span.cm-attribute { color: #ffd500; } .cm-s-night span.cm-keyword { color: #599eff; } .cm-s-night span.cm-string { color: #37f14a; } .cm-s-night span.cm-meta { color: #7678e2; } .cm-s-night span.cm-variable-2, .cm-s-night span.cm-tag { color: #99b2ff; } .cm-s-night span.cm-variable-3, .cm-s-night span.cm-def { color: white; } .cm-s-night span.cm-bracket { color: #8da6ce; } .cm-s-night span.cm-comment { color: #6900a1; } .cm-s-night span.cm-builtin, .cm-s-night span.cm-special { color: #ff9e59; } .cm-s-night span.cm-link { color: #845dc4; } .cm-s-night span.cm-error { color: #9d1e15; } .cm-s-night .CodeMirror-activeline-background {background: #1C005A !important;} .cm-s-night .CodeMirror-matchingbracket {outline:1px solid grey; color:white !important;} ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/theme/paraiso-dark.css ================================================ /* Name: Paraíso (Dark) Author: Jan T. Sott Color scheme by Jan T. Sott (https://github.com/idleberg/Paraiso-CodeMirror) Inspired by the art of Rubens LP (http://www.rubenslp.com.br) */ .cm-s-paraiso-dark.CodeMirror {background: #2f1e2e; color: #b9b6b0;} .cm-s-paraiso-dark div.CodeMirror-selected {background: #41323f !important;} .cm-s-paraiso-dark.CodeMirror ::selection { background: rgba(65, 50, 63, .99); } .cm-s-paraiso-dark.CodeMirror ::-moz-selection { background: rgba(65, 50, 63, .99); } .cm-s-paraiso-dark .CodeMirror-gutters {background: #2f1e2e; border-right: 0px;} .cm-s-paraiso-dark .CodeMirror-guttermarker { color: #ef6155; } .cm-s-paraiso-dark .CodeMirror-guttermarker-subtle { color: #776e71; } .cm-s-paraiso-dark .CodeMirror-linenumber {color: #776e71;} .cm-s-paraiso-dark .CodeMirror-cursor {border-left: 1px solid #8d8687 !important;} .cm-s-paraiso-dark span.cm-comment {color: #e96ba8;} .cm-s-paraiso-dark span.cm-atom {color: #815ba4;} .cm-s-paraiso-dark span.cm-number {color: #815ba4;} .cm-s-paraiso-dark span.cm-property, .cm-s-paraiso-dark span.cm-attribute {color: #48b685;} .cm-s-paraiso-dark span.cm-keyword {color: #ef6155;} .cm-s-paraiso-dark span.cm-string {color: #fec418;} .cm-s-paraiso-dark span.cm-variable {color: #48b685;} .cm-s-paraiso-dark span.cm-variable-2 {color: #06b6ef;} .cm-s-paraiso-dark span.cm-def {color: #f99b15;} .cm-s-paraiso-dark span.cm-bracket {color: #b9b6b0;} .cm-s-paraiso-dark span.cm-tag {color: #ef6155;} .cm-s-paraiso-dark span.cm-link {color: #815ba4;} .cm-s-paraiso-dark span.cm-error {background: #ef6155; color: #8d8687;} .cm-s-paraiso-dark .CodeMirror-activeline-background {background: #4D344A !important;} .cm-s-paraiso-dark .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/theme/paraiso-light.css ================================================ /* Name: Paraíso (Light) Author: Jan T. Sott Color scheme by Jan T. Sott (https://github.com/idleberg/Paraiso-CodeMirror) Inspired by the art of Rubens LP (http://www.rubenslp.com.br) */ .cm-s-paraiso-light.CodeMirror {background: #e7e9db; color: #41323f;} .cm-s-paraiso-light div.CodeMirror-selected {background: #b9b6b0 !important;} .cm-s-paraiso-light.CodeMirror ::selection { background: #b9b6b0; } .cm-s-paraiso-light.CodeMirror ::-moz-selection { background: #b9b6b0; } .cm-s-paraiso-light .CodeMirror-gutters {background: #e7e9db; border-right: 0px;} .cm-s-paraiso-light .CodeMirror-guttermarker { color: black; } .cm-s-paraiso-light .CodeMirror-guttermarker-subtle { color: #8d8687; } .cm-s-paraiso-light .CodeMirror-linenumber {color: #8d8687;} .cm-s-paraiso-light .CodeMirror-cursor {border-left: 1px solid #776e71 !important;} .cm-s-paraiso-light span.cm-comment {color: #e96ba8;} .cm-s-paraiso-light span.cm-atom {color: #815ba4;} .cm-s-paraiso-light span.cm-number {color: #815ba4;} .cm-s-paraiso-light span.cm-property, .cm-s-paraiso-light span.cm-attribute {color: #48b685;} .cm-s-paraiso-light span.cm-keyword {color: #ef6155;} .cm-s-paraiso-light span.cm-string {color: #fec418;} .cm-s-paraiso-light span.cm-variable {color: #48b685;} .cm-s-paraiso-light span.cm-variable-2 {color: #06b6ef;} .cm-s-paraiso-light span.cm-def {color: #f99b15;} .cm-s-paraiso-light span.cm-bracket {color: #41323f;} .cm-s-paraiso-light span.cm-tag {color: #ef6155;} .cm-s-paraiso-light span.cm-link {color: #815ba4;} .cm-s-paraiso-light span.cm-error {background: #ef6155; color: #776e71;} .cm-s-paraiso-light .CodeMirror-activeline-background {background: #CFD1C4 !important;} .cm-s-paraiso-light .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/theme/pastel-on-dark.css ================================================ /** * Pastel On Dark theme ported from ACE editor * @license MIT * @copyright AtomicPages LLC 2014 * @author Dennis Thompson, AtomicPages LLC * @version 1.1 * @source https://github.com/atomicpages/codemirror-pastel-on-dark-theme */ .cm-s-pastel-on-dark.CodeMirror { background: #2c2827; color: #8F938F; line-height: 1.5; font-size: 14px; } .cm-s-pastel-on-dark div.CodeMirror-selected { background: rgba(221,240,255,0.2) !important; } .cm-s-pastel-on-dark.CodeMirror ::selection { background: rgba(221,240,255,0.2); } .cm-s-pastel-on-dark.CodeMirror ::-moz-selection { background: rgba(221,240,255,0.2); } .cm-s-pastel-on-dark .CodeMirror-gutters { background: #34302f; border-right: 0px; padding: 0 3px; } .cm-s-pastel-on-dark .CodeMirror-guttermarker { color: white; } .cm-s-pastel-on-dark .CodeMirror-guttermarker-subtle { color: #8F938F; } .cm-s-pastel-on-dark .CodeMirror-linenumber { color: #8F938F; } .cm-s-pastel-on-dark .CodeMirror-cursor { border-left: 1px solid #A7A7A7 !important; } .cm-s-pastel-on-dark span.cm-comment { color: #A6C6FF; } .cm-s-pastel-on-dark span.cm-atom { color: #DE8E30; } .cm-s-pastel-on-dark span.cm-number { color: #CCCCCC; } .cm-s-pastel-on-dark span.cm-property { color: #8F938F; } .cm-s-pastel-on-dark span.cm-attribute { color: #a6e22e; } .cm-s-pastel-on-dark span.cm-keyword { color: #AEB2F8; } .cm-s-pastel-on-dark span.cm-string { color: #66A968; } .cm-s-pastel-on-dark span.cm-variable { color: #AEB2F8; } .cm-s-pastel-on-dark span.cm-variable-2 { color: #BEBF55; } .cm-s-pastel-on-dark span.cm-variable-3 { color: #DE8E30; } .cm-s-pastel-on-dark span.cm-def { color: #757aD8; } .cm-s-pastel-on-dark span.cm-bracket { color: #f8f8f2; } .cm-s-pastel-on-dark span.cm-tag { color: #C1C144; } .cm-s-pastel-on-dark span.cm-link { color: #ae81ff; } .cm-s-pastel-on-dark span.cm-qualifier,.cm-s-pastel-on-dark span.cm-builtin { color: #C1C144; } .cm-s-pastel-on-dark span.cm-error { background: #757aD8; color: #f8f8f0; } .cm-s-pastel-on-dark .CodeMirror-activeline-background { background: rgba(255, 255, 255, 0.031) !important; } .cm-s-pastel-on-dark .CodeMirror-matchingbracket { border: 1px solid rgba(255,255,255,0.25); color: #8F938F !important; margin: -1px -1px 0 -1px; } ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/theme/rubyblue.css ================================================ .cm-s-rubyblue.CodeMirror { background: #112435; color: white; } .cm-s-rubyblue div.CodeMirror-selected { background: #38566F !important; } .cm-s-rubyblue.CodeMirror ::selection { background: rgba(56, 86, 111, 0.99); } .cm-s-rubyblue.CodeMirror ::-moz-selection { background: rgba(56, 86, 111, 0.99); } .cm-s-rubyblue .CodeMirror-gutters { background: #1F4661; border-right: 7px solid #3E7087; } .cm-s-rubyblue .CodeMirror-guttermarker { color: white; } .cm-s-rubyblue .CodeMirror-guttermarker-subtle { color: #3E7087; } .cm-s-rubyblue .CodeMirror-linenumber { color: white; } .cm-s-rubyblue .CodeMirror-cursor { border-left: 1px solid white !important; } .cm-s-rubyblue span.cm-comment { color: #999; font-style:italic; line-height: 1em; } .cm-s-rubyblue span.cm-atom { color: #F4C20B; } .cm-s-rubyblue span.cm-number, .cm-s-rubyblue span.cm-attribute { color: #82C6E0; } .cm-s-rubyblue span.cm-keyword { color: #F0F; } .cm-s-rubyblue span.cm-string { color: #F08047; } .cm-s-rubyblue span.cm-meta { color: #F0F; } .cm-s-rubyblue span.cm-variable-2, .cm-s-rubyblue span.cm-tag { color: #7BD827; } .cm-s-rubyblue span.cm-variable-3, .cm-s-rubyblue span.cm-def { color: white; } .cm-s-rubyblue span.cm-bracket { color: #F0F; } .cm-s-rubyblue span.cm-link { color: #F4C20B; } .cm-s-rubyblue span.CodeMirror-matchingbracket { color:#F0F !important; } .cm-s-rubyblue span.cm-builtin, .cm-s-rubyblue span.cm-special { color: #FF9D00; } .cm-s-rubyblue span.cm-error { color: #AF2018; } .cm-s-rubyblue .CodeMirror-activeline-background {background: #173047 !important;} ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/theme/solarized.css ================================================ /* Solarized theme for code-mirror http://ethanschoonover.com/solarized */ /* Solarized color pallet http://ethanschoonover.com/solarized/img/solarized-palette.png */ .solarized.base03 { color: #002b36; } .solarized.base02 { color: #073642; } .solarized.base01 { color: #586e75; } .solarized.base00 { color: #657b83; } .solarized.base0 { color: #839496; } .solarized.base1 { color: #93a1a1; } .solarized.base2 { color: #eee8d5; } .solarized.base3 { color: #fdf6e3; } .solarized.solar-yellow { color: #b58900; } .solarized.solar-orange { color: #cb4b16; } .solarized.solar-red { color: #dc322f; } .solarized.solar-magenta { color: #d33682; } .solarized.solar-violet { color: #6c71c4; } .solarized.solar-blue { color: #268bd2; } .solarized.solar-cyan { color: #2aa198; } .solarized.solar-green { color: #859900; } /* Color scheme for code-mirror */ .cm-s-solarized { line-height: 1.45em; color-profile: sRGB; rendering-intent: auto; } .cm-s-solarized.cm-s-dark { color: #839496; background-color: #002b36; text-shadow: #002b36 0 1px; } .cm-s-solarized.cm-s-light { background-color: #fdf6e3; color: #657b83; text-shadow: #eee8d5 0 1px; } .cm-s-solarized .CodeMirror-widget { text-shadow: none; } .cm-s-solarized .cm-keyword { color: #cb4b16 } .cm-s-solarized .cm-atom { color: #d33682; } .cm-s-solarized .cm-number { color: #d33682; } .cm-s-solarized .cm-def { color: #2aa198; } .cm-s-solarized .cm-variable { color: #268bd2; } .cm-s-solarized .cm-variable-2 { color: #b58900; } .cm-s-solarized .cm-variable-3 { color: #6c71c4; } .cm-s-solarized .cm-property { color: #2aa198; } .cm-s-solarized .cm-operator {color: #6c71c4;} .cm-s-solarized .cm-comment { color: #586e75; font-style:italic; } .cm-s-solarized .cm-string { color: #859900; } .cm-s-solarized .cm-string-2 { color: #b58900; } .cm-s-solarized .cm-meta { color: #859900; } .cm-s-solarized .cm-qualifier { color: #b58900; } .cm-s-solarized .cm-builtin { color: #d33682; } .cm-s-solarized .cm-bracket { color: #cb4b16; } .cm-s-solarized .CodeMirror-matchingbracket { color: #859900; } .cm-s-solarized .CodeMirror-nonmatchingbracket { color: #dc322f; } .cm-s-solarized .cm-tag { color: #93a1a1 } .cm-s-solarized .cm-attribute { color: #2aa198; } .cm-s-solarized .cm-header { color: #586e75; } .cm-s-solarized .cm-quote { color: #93a1a1; } .cm-s-solarized .cm-hr { color: transparent; border-top: 1px solid #586e75; display: block; } .cm-s-solarized .cm-link { color: #93a1a1; cursor: pointer; } .cm-s-solarized .cm-special { color: #6c71c4; } .cm-s-solarized .cm-em { color: #999; text-decoration: underline; text-decoration-style: dotted; } .cm-s-solarized .cm-strong { color: #eee; } .cm-s-solarized .cm-error, .cm-s-solarized .cm-invalidchar { color: #586e75; border-bottom: 1px dotted #dc322f; } .cm-s-solarized.cm-s-dark .CodeMirror-selected { background: #073642; } .cm-s-solarized.cm-s-dark.CodeMirror ::selection { background: rgba(7, 54, 66, 0.99); } .cm-s-solarized.cm-s-dark.CodeMirror ::-moz-selection { background: rgba(7, 54, 66, 0.99); } .cm-s-solarized.cm-s-light .CodeMirror-selected { background: #eee8d5; } .cm-s-solarized.cm-s-light.CodeMirror ::selection { background: #eee8d5; } .cm-s-solarized.cm-s-lightCodeMirror ::-moz-selection { background: #eee8d5; } /* Editor styling */ /* Little shadow on the view-port of the buffer view */ .cm-s-solarized.CodeMirror { -moz-box-shadow: inset 7px 0 12px -6px #000; -webkit-box-shadow: inset 7px 0 12px -6px #000; box-shadow: inset 7px 0 12px -6px #000; } /* Gutter border and some shadow from it */ .cm-s-solarized .CodeMirror-gutters { border-right: 1px solid; } /* Gutter colors and line number styling based of color scheme (dark / light) */ /* Dark */ .cm-s-solarized.cm-s-dark .CodeMirror-gutters { background-color: #002b36; border-color: #00232c; } .cm-s-solarized.cm-s-dark .CodeMirror-linenumber { text-shadow: #021014 0 -1px; } /* Light */ .cm-s-solarized.cm-s-light .CodeMirror-gutters { background-color: #fdf6e3; border-color: #eee8d5; } /* Common */ .cm-s-solarized .CodeMirror-linenumber { color: #586e75; padding: 0 5px; } .cm-s-solarized .CodeMirror-guttermarker-subtle { color: #586e75; } .cm-s-solarized.cm-s-dark .CodeMirror-guttermarker { color: #ddd; } .cm-s-solarized.cm-s-light .CodeMirror-guttermarker { color: #cb4b16; } .cm-s-solarized .CodeMirror-gutter .CodeMirror-gutter-text { color: #586e75; } .cm-s-solarized .CodeMirror-lines .CodeMirror-cursor { border-left: 1px solid #819090; } /* Active line. Negative margin compensates left padding of the text in the view-port */ .cm-s-solarized.cm-s-dark .CodeMirror-activeline-background { background: rgba(255, 255, 255, 0.10); } .cm-s-solarized.cm-s-light .CodeMirror-activeline-background { background: rgba(0, 0, 0, 0.10); } ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/theme/the-matrix.css ================================================ .cm-s-the-matrix.CodeMirror { background: #000000; color: #00FF00; } .cm-s-the-matrix div.CodeMirror-selected { background: #2D2D2D !important; } .cm-s-the-matrix.CodeMirror ::selection { background: rgba(45, 45, 45, 0.99); } .cm-s-the-matrix.CodeMirror ::-moz-selection { background: rgba(45, 45, 45, 0.99); } .cm-s-the-matrix .CodeMirror-gutters { background: #060; border-right: 2px solid #00FF00; } .cm-s-the-matrix .CodeMirror-guttermarker { color: #0f0; } .cm-s-the-matrix .CodeMirror-guttermarker-subtle { color: white; } .cm-s-the-matrix .CodeMirror-linenumber { color: #FFFFFF; } .cm-s-the-matrix .CodeMirror-cursor { border-left: 1px solid #00FF00 !important; } .cm-s-the-matrix span.cm-keyword {color: #008803; font-weight: bold;} .cm-s-the-matrix span.cm-atom {color: #3FF;} .cm-s-the-matrix span.cm-number {color: #FFB94F;} .cm-s-the-matrix span.cm-def {color: #99C;} .cm-s-the-matrix span.cm-variable {color: #F6C;} .cm-s-the-matrix span.cm-variable-2 {color: #C6F;} .cm-s-the-matrix span.cm-variable-3 {color: #96F;} .cm-s-the-matrix span.cm-property {color: #62FFA0;} .cm-s-the-matrix span.cm-operator {color: #999} .cm-s-the-matrix span.cm-comment {color: #CCCCCC;} .cm-s-the-matrix span.cm-string {color: #39C;} .cm-s-the-matrix span.cm-meta {color: #C9F;} .cm-s-the-matrix span.cm-qualifier {color: #FFF700;} .cm-s-the-matrix span.cm-builtin {color: #30a;} .cm-s-the-matrix span.cm-bracket {color: #cc7;} .cm-s-the-matrix span.cm-tag {color: #FFBD40;} .cm-s-the-matrix span.cm-attribute {color: #FFF700;} .cm-s-the-matrix span.cm-error {color: #FF0000;} .cm-s-the-matrix .CodeMirror-activeline-background {background: #040;} ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/theme/tomorrow-night-bright.css ================================================ /* Name: Tomorrow Night - Bright Author: Chris Kempson Port done by Gerard Braad */ .cm-s-tomorrow-night-bright.CodeMirror {background: #000000; color: #eaeaea;} .cm-s-tomorrow-night-bright div.CodeMirror-selected {background: #424242 !important;} .cm-s-tomorrow-night-bright .CodeMirror-gutters {background: #000000; border-right: 0px;} .cm-s-tomorrow-night-bright .CodeMirror-guttermarker { color: #e78c45; } .cm-s-tomorrow-night-bright .CodeMirror-guttermarker-subtle { color: #777; } .cm-s-tomorrow-night-bright .CodeMirror-linenumber {color: #424242;} .cm-s-tomorrow-night-bright .CodeMirror-cursor {border-left: 1px solid #6A6A6A !important;} .cm-s-tomorrow-night-bright span.cm-comment {color: #d27b53;} .cm-s-tomorrow-night-bright span.cm-atom {color: #a16a94;} .cm-s-tomorrow-night-bright span.cm-number {color: #a16a94;} .cm-s-tomorrow-night-bright span.cm-property, .cm-s-tomorrow-night-bright span.cm-attribute {color: #99cc99;} .cm-s-tomorrow-night-bright span.cm-keyword {color: #d54e53;} .cm-s-tomorrow-night-bright span.cm-string {color: #e7c547;} .cm-s-tomorrow-night-bright span.cm-variable {color: #b9ca4a;} .cm-s-tomorrow-night-bright span.cm-variable-2 {color: #7aa6da;} .cm-s-tomorrow-night-bright span.cm-def {color: #e78c45;} .cm-s-tomorrow-night-bright span.cm-bracket {color: #eaeaea;} .cm-s-tomorrow-night-bright span.cm-tag {color: #d54e53;} .cm-s-tomorrow-night-bright span.cm-link {color: #a16a94;} .cm-s-tomorrow-night-bright span.cm-error {background: #d54e53; color: #6A6A6A;} .cm-s-tomorrow-night-bright .CodeMirror-activeline-background {background: #2a2a2a !important;} .cm-s-tomorrow-night-bright .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/theme/tomorrow-night-eighties.css ================================================ /* Name: Tomorrow Night - Eighties Author: Chris Kempson CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */ .cm-s-tomorrow-night-eighties.CodeMirror {background: #000000; color: #CCCCCC;} .cm-s-tomorrow-night-eighties div.CodeMirror-selected {background: #2D2D2D !important;} .cm-s-tomorrow-night-eighties.CodeMirror ::selection { background: rgba(45, 45, 45, 0.99); } .cm-s-tomorrow-night-eighties.CodeMirror ::-moz-selection { background: rgba(45, 45, 45, 0.99); } .cm-s-tomorrow-night-eighties .CodeMirror-gutters {background: #000000; border-right: 0px;} .cm-s-tomorrow-night-eighties .CodeMirror-guttermarker { color: #f2777a; } .cm-s-tomorrow-night-eighties .CodeMirror-guttermarker-subtle { color: #777; } .cm-s-tomorrow-night-eighties .CodeMirror-linenumber {color: #515151;} .cm-s-tomorrow-night-eighties .CodeMirror-cursor {border-left: 1px solid #6A6A6A !important;} .cm-s-tomorrow-night-eighties span.cm-comment {color: #d27b53;} .cm-s-tomorrow-night-eighties span.cm-atom {color: #a16a94;} .cm-s-tomorrow-night-eighties span.cm-number {color: #a16a94;} .cm-s-tomorrow-night-eighties span.cm-property, .cm-s-tomorrow-night-eighties span.cm-attribute {color: #99cc99;} .cm-s-tomorrow-night-eighties span.cm-keyword {color: #f2777a;} .cm-s-tomorrow-night-eighties span.cm-string {color: #ffcc66;} .cm-s-tomorrow-night-eighties span.cm-variable {color: #99cc99;} .cm-s-tomorrow-night-eighties span.cm-variable-2 {color: #6699cc;} .cm-s-tomorrow-night-eighties span.cm-def {color: #f99157;} .cm-s-tomorrow-night-eighties span.cm-bracket {color: #CCCCCC;} .cm-s-tomorrow-night-eighties span.cm-tag {color: #f2777a;} .cm-s-tomorrow-night-eighties span.cm-link {color: #a16a94;} .cm-s-tomorrow-night-eighties span.cm-error {background: #f2777a; color: #6A6A6A;} .cm-s-tomorrow-night-eighties .CodeMirror-activeline-background {background: #343600 !important;} .cm-s-tomorrow-night-eighties .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/theme/twilight.css ================================================ .cm-s-twilight.CodeMirror { background: #141414; color: #f7f7f7; } /**/ .cm-s-twilight .CodeMirror-selected { background: #323232 !important; } /**/ .cm-s-twilight.CodeMirror ::selection { background: rgba(50, 50, 50, 0.99); } .cm-s-twilight.CodeMirror ::-moz-selection { background: rgba(50, 50, 50, 0.99); } .cm-s-twilight .CodeMirror-gutters { background: #222; border-right: 1px solid #aaa; } .cm-s-twilight .CodeMirror-guttermarker { color: white; } .cm-s-twilight .CodeMirror-guttermarker-subtle { color: #aaa; } .cm-s-twilight .CodeMirror-linenumber { color: #aaa; } .cm-s-twilight .CodeMirror-cursor { border-left: 1px solid white !important; } .cm-s-twilight .cm-keyword { color: #f9ee98; } /**/ .cm-s-twilight .cm-atom { color: #FC0; } .cm-s-twilight .cm-number { color: #ca7841; } /**/ .cm-s-twilight .cm-def { color: #8DA6CE; } .cm-s-twilight span.cm-variable-2, .cm-s-twilight span.cm-tag { color: #607392; } /**/ .cm-s-twilight span.cm-variable-3, .cm-s-twilight span.cm-def { color: #607392; } /**/ .cm-s-twilight .cm-operator { color: #cda869; } /**/ .cm-s-twilight .cm-comment { color:#777; font-style:italic; font-weight:normal; } /**/ .cm-s-twilight .cm-string { color:#8f9d6a; font-style:italic; } /**/ .cm-s-twilight .cm-string-2 { color:#bd6b18 } /*?*/ .cm-s-twilight .cm-meta { background-color:#141414; color:#f7f7f7; } /*?*/ .cm-s-twilight .cm-builtin { color: #cda869; } /*?*/ .cm-s-twilight .cm-tag { color: #997643; } /**/ .cm-s-twilight .cm-attribute { color: #d6bb6d; } /*?*/ .cm-s-twilight .cm-header { color: #FF6400; } .cm-s-twilight .cm-hr { color: #AEAEAE; } .cm-s-twilight .cm-link { color:#ad9361; font-style:italic; text-decoration:none; } /**/ .cm-s-twilight .cm-error { border-bottom: 1px solid red; } .cm-s-twilight .CodeMirror-activeline-background {background: #27282E !important;} .cm-s-twilight .CodeMirror-matchingbracket {outline:1px solid grey; color:white !important;} ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/theme/vibrant-ink.css ================================================ /* Taken from the popular Visual Studio Vibrant Ink Schema */ .cm-s-vibrant-ink.CodeMirror { background: black; color: white; } .cm-s-vibrant-ink .CodeMirror-selected { background: #35493c !important; } .cm-s-vibrant-ink.CodeMirror ::selection { background: rgba(53, 73, 60, 0.99); } .cm-s-vibrant-ink.CodeMirror ::-moz-selection { background: rgba(53, 73, 60, 0.99); } .cm-s-vibrant-ink .CodeMirror-gutters { background: #002240; border-right: 1px solid #aaa; } .cm-s-vibrant-ink .CodeMirror-guttermarker { color: white; } .cm-s-vibrant-ink .CodeMirror-guttermarker-subtle { color: #d0d0d0; } .cm-s-vibrant-ink .CodeMirror-linenumber { color: #d0d0d0; } .cm-s-vibrant-ink .CodeMirror-cursor { border-left: 1px solid white !important; } .cm-s-vibrant-ink .cm-keyword { color: #CC7832; } .cm-s-vibrant-ink .cm-atom { color: #FC0; } .cm-s-vibrant-ink .cm-number { color: #FFEE98; } .cm-s-vibrant-ink .cm-def { color: #8DA6CE; } .cm-s-vibrant-ink span.cm-variable-2, .cm-s-vibrant span.cm-tag { color: #FFC66D } .cm-s-vibrant-ink span.cm-variable-3, .cm-s-vibrant span.cm-def { color: #FFC66D } .cm-s-vibrant-ink .cm-operator { color: #888; } .cm-s-vibrant-ink .cm-comment { color: gray; font-weight: bold; } .cm-s-vibrant-ink .cm-string { color: #A5C25C } .cm-s-vibrant-ink .cm-string-2 { color: red } .cm-s-vibrant-ink .cm-meta { color: #D8FA3C; } .cm-s-vibrant-ink .cm-builtin { color: #8DA6CE; } .cm-s-vibrant-ink .cm-tag { color: #8DA6CE; } .cm-s-vibrant-ink .cm-attribute { color: #8DA6CE; } .cm-s-vibrant-ink .cm-header { color: #FF6400; } .cm-s-vibrant-ink .cm-hr { color: #AEAEAE; } .cm-s-vibrant-ink .cm-link { color: blue; } .cm-s-vibrant-ink .cm-error { border-bottom: 1px solid red; } .cm-s-vibrant-ink .CodeMirror-activeline-background {background: #27282E !important;} .cm-s-vibrant-ink .CodeMirror-matchingbracket {outline:1px solid grey; color:white !important;} ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/theme/xq-dark.css ================================================ /* Copyright (C) 2011 by MarkLogic Corporation Author: Mike Brevoort 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. */ .cm-s-xq-dark.CodeMirror { background: #0a001f; color: #f8f8f8; } .cm-s-xq-dark .CodeMirror-selected { background: #27007A !important; } .cm-s-xq-dark.CodeMirror ::selection { background: rgba(39, 0, 122, 0.99); } .cm-s-xq-dark.CodeMirror ::-moz-selection { background: rgba(39, 0, 122, 0.99); } .cm-s-xq-dark .CodeMirror-gutters { background: #0a001f; border-right: 1px solid #aaa; } .cm-s-xq-dark .CodeMirror-guttermarker { color: #FFBD40; } .cm-s-xq-dark .CodeMirror-guttermarker-subtle { color: #f8f8f8; } .cm-s-xq-dark .CodeMirror-linenumber { color: #f8f8f8; } .cm-s-xq-dark .CodeMirror-cursor { border-left: 1px solid white !important; } .cm-s-xq-dark span.cm-keyword {color: #FFBD40;} .cm-s-xq-dark span.cm-atom {color: #6C8CD5;} .cm-s-xq-dark span.cm-number {color: #164;} .cm-s-xq-dark span.cm-def {color: #FFF; text-decoration:underline;} .cm-s-xq-dark span.cm-variable {color: #FFF;} .cm-s-xq-dark span.cm-variable-2 {color: #EEE;} .cm-s-xq-dark span.cm-variable-3 {color: #DDD;} .cm-s-xq-dark span.cm-property {} .cm-s-xq-dark span.cm-operator {} .cm-s-xq-dark span.cm-comment {color: gray;} .cm-s-xq-dark span.cm-string {color: #9FEE00;} .cm-s-xq-dark span.cm-meta {color: yellow;} .cm-s-xq-dark span.cm-qualifier {color: #FFF700;} .cm-s-xq-dark span.cm-builtin {color: #30a;} .cm-s-xq-dark span.cm-bracket {color: #cc7;} .cm-s-xq-dark span.cm-tag {color: #FFBD40;} .cm-s-xq-dark span.cm-attribute {color: #FFF700;} .cm-s-xq-dark span.cm-error {color: #f00;} .cm-s-xq-dark .CodeMirror-activeline-background {background: #27282E !important;} .cm-s-xq-dark .CodeMirror-matchingbracket {outline:1px solid grey; color:white !important;} ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/theme/xq-light.css ================================================ /* Copyright (C) 2011 by MarkLogic Corporation Author: Mike Brevoort 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. */ .cm-s-xq-light span.cm-keyword {line-height: 1em; font-weight: bold; color: #5A5CAD; } .cm-s-xq-light span.cm-atom {color: #6C8CD5;} .cm-s-xq-light span.cm-number {color: #164;} .cm-s-xq-light span.cm-def {text-decoration:underline;} .cm-s-xq-light span.cm-variable {color: black; } .cm-s-xq-light span.cm-variable-2 {color:black;} .cm-s-xq-light span.cm-variable-3 {color: black; } .cm-s-xq-light span.cm-property {} .cm-s-xq-light span.cm-operator {} .cm-s-xq-light span.cm-comment {color: #0080FF; font-style: italic;} .cm-s-xq-light span.cm-string {color: red;} .cm-s-xq-light span.cm-meta {color: yellow;} .cm-s-xq-light span.cm-qualifier {color: grey} .cm-s-xq-light span.cm-builtin {color: #7EA656;} .cm-s-xq-light span.cm-bracket {color: #cc7;} .cm-s-xq-light span.cm-tag {color: #3F7F7F;} .cm-s-xq-light span.cm-attribute {color: #7F007F;} .cm-s-xq-light span.cm-error {color: #f00;} .cm-s-xq-light .CodeMirror-activeline-background {background: #e8f2ff !important;} .cm-s-xq-light .CodeMirror-matchingbracket {outline:1px solid grey;color:black !important;background:yellow;} ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/lib/codemirror/theme/zenburn.css ================================================ /** * " * Using Zenburn color palette from the Emacs Zenburn Theme * https://github.com/bbatsov/zenburn-emacs/blob/master/zenburn-theme.el * * Also using parts of https://github.com/xavi/coderay-lighttable-theme * " * From: https://github.com/wisenomad/zenburn-lighttable-theme/blob/master/zenburn.css */ .cm-s-zenburn .CodeMirror-gutters { background: #3f3f3f !important; } .cm-s-zenburn .CodeMirror-foldgutter-open, .CodeMirror-foldgutter-folded { color: #999; } .cm-s-zenburn .CodeMirror-cursor { border-left: 1px solid white !important; } .cm-s-zenburn { background-color: #3f3f3f; color: #dcdccc; } .cm-s-zenburn span.cm-builtin { color: #dcdccc; font-weight: bold; } .cm-s-zenburn span.cm-comment { color: #7f9f7f; } .cm-s-zenburn span.cm-keyword { color: #f0dfaf; font-weight: bold; } .cm-s-zenburn span.cm-atom { color: #bfebbf; } .cm-s-zenburn span.cm-def { color: #dcdccc; } .cm-s-zenburn span.cm-variable { color: #dfaf8f; } .cm-s-zenburn span.cm-variable-2 { color: #dcdccc; } .cm-s-zenburn span.cm-string { color: #cc9393; } .cm-s-zenburn span.cm-string-2 { color: #cc9393; } .cm-s-zenburn span.cm-number { color: #dcdccc; } .cm-s-zenburn span.cm-tag { color: #93e0e3; } .cm-s-zenburn span.cm-property { color: #dfaf8f; } .cm-s-zenburn span.cm-attribute { color: #dfaf8f; } .cm-s-zenburn span.cm-qualifier { color: #7cb8bb; } .cm-s-zenburn span.cm-meta { color: #f0dfaf; } .cm-s-zenburn span.cm-header { color: #f0efd0; } .cm-s-zenburn span.cm-operator { color: #f0efd0; } .cm-s-zenburn span.CodeMirror-matchingbracket { box-sizing: border-box; background: transparent; border-bottom: 1px solid; } .cm-s-zenburn span.CodeMirror-nonmatchingbracket { border-bottom: 1px solid; background: none; } .cm-s-zenburn .CodeMirror-activeline { background: #000000; } .cm-s-zenburn .CodeMirror-activeline-background { background: #000000; } .cm-s-zenburn .CodeMirror-selected { background: #545454; } .cm-s-zenburn .CodeMirror-focused .CodeMirror-selected { background: #4f4f4f; } ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/package.json ================================================ { "name": "editor.md", "version": "1.5.0", "description": "Open source online markdown editor.", "directories": { "doc": "docs", "example": "examples", "test": "tests" }, "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "repository": { "type": "git", "url": "https://github.com/pandao/editor.md.git" }, "keywords": [ "editor.md", "markdown", "editor" ], "author": "Pandao", "license": "MIT", "bugs": { "url": "https://github.com/pandao/editor.md/issues" }, "homepage": "https://github.com/pandao/editor.md", "devDependencies": { "dateformatter": "^0.1.0", "gulp": "^3.8.11", "gulp-concat": "^2.4.2", "gulp-header": "^1.2.2", "gulp-jshint": "^1.9.0", "gulp-minify-css": "^0.4.4", "gulp-notify": "^2.1.0", "gulp-rename": "^1.2.0", "gulp-replace": "^0.5.3", "gulp-ruby-sass": "^1.0.1", "gulp-uglifyjs": "^0.6.1", "gulp-util": "^3.0.1" } } ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/plugins/code-block-dialog/code-block-dialog.js ================================================ /*! * Code block dialog plugin for Editor.md * * @file code-block-dialog.js * @author pandao * @version 1.2.0 * @updateTime 2015-03-07 * {@link https://github.com/pandao/editor.md} * @license MIT */ (function() { var factory = function (exports) { var cmEditor; var pluginName = "code-block-dialog"; // for CodeBlock dialog select var codeLanguages = exports.codeLanguages = { asp : ["ASP", "vbscript"], actionscript : ["ActionScript(3.0)/Flash/Flex", "clike"], bash : ["Bash/Bat", "shell"], css : ["CSS", "css"], c : ["C", "clike"], cpp : ["C++", "clike"], csharp : ["C#", "clike"], coffeescript : ["CoffeeScript", "coffeescript"], d : ["D", "d"], dart : ["Dart", "dart"], delphi : ["Delphi/Pascal", "pascal"], erlang : ["Erlang", "erlang"], go : ["Golang", "go"], groovy : ["Groovy", "groovy"], html : ["HTML", "text/html"], java : ["Java", "clike"], json : ["JSON", "text/json"], javascript : ["Javascript", "javascript"], lua : ["Lua", "lua"], less : ["LESS", "css"], markdown : ["Markdown", "gfm"], "objective-c" : ["Objective-C", "clike"], php : ["PHP", "php"], perl : ["Perl", "perl"], python : ["Python", "python"], r : ["R", "r"], rst : ["reStructedText", "rst"], ruby : ["Ruby", "ruby"], sql : ["SQL", "sql"], sass : ["SASS/SCSS", "sass"], shell : ["Shell", "shell"], scala : ["Scala", "clike"], swift : ["Swift", "clike"], vb : ["VB/VBScript", "vb"], xml : ["XML", "text/xml"], yaml : ["YAML", "yaml"] }; exports.fn.codeBlockDialog = function() { var _this = this; var cm = this.cm; var lang = this.lang; var editor = this.editor; var settings = this.settings; var cursor = cm.getCursor(); var selection = cm.getSelection(); var classPrefix = this.classPrefix; var dialogName = classPrefix + pluginName, dialog; var dialogLang = lang.dialog.codeBlock; cm.focus(); if (editor.find("." + dialogName).length > 0) { dialog = editor.find("." + dialogName); dialog.find("option:first").attr("selected", "selected"); dialog.find("textarea").val(selection); this.dialogShowMask(dialog); this.dialogLockScreen(); dialog.show(); } else { var dialogHTML = "
                  " + dialogLang.selectLabel + "" + "
                  " + ""; dialog = this.createDialog({ name : dialogName, title : dialogLang.title, width : 780, height : 565, mask : settings.dialogShowMask, drag : settings.dialogDraggable, content : dialogHTML, lockScreen : settings.dialogLockScreen, maskStyle : { opacity : settings.dialogMaskOpacity, backgroundColor : settings.dialogMaskBgColor }, buttons : { enter : [lang.buttons.enter, function() { var codeTexts = this.find("textarea").val(); var langName = this.find("select").val(); if (langName === "") { alert(lang.dialog.codeBlock.unselectedLanguageAlert); return false; } if (codeTexts === "") { alert(lang.dialog.codeBlock.codeEmptyAlert); return false; } langName = (langName === "other") ? "" : langName; cm.replaceSelection(["```" + langName, codeTexts, "```"].join("\n")); if (langName === "") { cm.setCursor(cursor.line, cursor.ch + 3); } this.hide().lockScreen(false).hideMask(); return false; }], cancel : [lang.buttons.cancel, function() { this.hide().lockScreen(false).hideMask(); return false; }] } }); } var langSelect = dialog.find("select"); if (langSelect.find("option").length === 1) { for (var key in codeLanguages) { var codeLang = codeLanguages[key]; langSelect.append(""); } langSelect.append(""); } var mode = langSelect.find("option:selected").attr("mode"); var cmConfig = { mode : (mode) ? mode : "text/html", theme : settings.theme, tabSize : 4, autofocus : true, autoCloseTags : true, indentUnit : 4, lineNumbers : true, lineWrapping : true, extraKeys : {"Ctrl-Q": function(cm){ cm.foldCode(cm.getCursor()); }}, foldGutter : true, gutters : ["CodeMirror-linenumbers", "CodeMirror-foldgutter"], matchBrackets : true, indentWithTabs : true, styleActiveLine : true, styleSelectedText : true, autoCloseBrackets : true, showTrailingSpace : true, highlightSelectionMatches : true }; var textarea = dialog.find("textarea"); var cmObj = dialog.find(".CodeMirror"); if (dialog.find(".CodeMirror").length < 1) { cmEditor = exports.$CodeMirror.fromTextArea(textarea[0], cmConfig); cmObj = dialog.find(".CodeMirror"); cmObj.css({ "float" : "none", margin : "8px 0", border : "1px solid #ddd", fontSize : settings.fontSize, width : "100%", height : "390px" }); cmEditor.on("change", function(cm) { textarea.val(cm.getValue()); }); } else { cmEditor.setValue(cm.getSelection()); } langSelect.change(function(){ var _mode = $(this).find("option:selected").attr("mode"); cmEditor.setOption("mode", _mode); }); }; }; // CommonJS/Node.js if (typeof require === "function" && typeof exports === "object" && typeof module === "object") { module.exports = factory; } else if (typeof define === "function") // AMD/CMD/Sea.js { if (define.amd) { // for Require.js define(["editormd"], function(editormd) { factory(editormd); }); } else { // for Sea.js define(function(require) { var editormd = require("./../../editormd"); factory(editormd); }); } } else { factory(window.editormd); } })(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/plugins/emoji-dialog/emoji-dialog.js ================================================ /*! * Emoji dialog plugin for Editor.md * * @file emoji-dialog.js * @author pandao * @version 1.2.0 * @updateTime 2015-03-08 * {@link https://github.com/pandao/editor.md} * @license MIT */ (function() { var factory = function (exports) { var $ = jQuery; var pluginName = "emoji-dialog"; var emojiTabIndex = 0; var emojiData = []; var selecteds = []; var logoPrefix = "editormd-logo"; var logos = [ logoPrefix, logoPrefix + "-1x", logoPrefix + "-2x", logoPrefix + "-3x", logoPrefix + "-4x", logoPrefix + "-5x", logoPrefix + "-6x", logoPrefix + "-7x", logoPrefix + "-8x" ]; var langs = { "zh-cn" : { toolbar : { emoji : "Emoji 表情" }, dialog : { emoji : { title : "Emoji 表情" } } }, "zh-tw" : { toolbar : { emoji : "Emoji 表情" }, dialog : { emoji : { title : "Emoji 表情" } } }, "en" : { toolbar : { emoji : "Emoji" }, dialog : { emoji : { title : "Emoji" } } } }; exports.fn.emojiDialog = function() { var _this = this; var cm = this.cm; var settings = _this.settings; if (!settings.emoji) { alert("settings.emoji == false"); return ; } var path = settings.pluginPath + pluginName + "/"; var editor = this.editor; var cursor = cm.getCursor(); var selection = cm.getSelection(); var classPrefix = this.classPrefix; $.extend(true, this.lang, langs[this.lang.name]); this.setToolbar(); var lang = this.lang; var dialogName = classPrefix + pluginName, dialog; var dialogLang = lang.dialog.emoji; var dialogContent = [ "
                  ", "
                  ", "
                  ", ].join("\n"); cm.focus(); if (editor.find("." + dialogName).length > 0) { dialog = editor.find("." + dialogName); selecteds = []; dialog.find("a").removeClass("selected"); this.dialogShowMask(dialog); this.dialogLockScreen(); dialog.show(); } else { dialog = this.createDialog({ name : dialogName, title : dialogLang.title, width : 800, height : 475, mask : settings.dialogShowMask, drag : settings.dialogDraggable, content : dialogContent, lockScreen : settings.dialogLockScreen, maskStyle : { opacity : settings.dialogMaskOpacity, backgroundColor : settings.dialogMaskBgColor }, buttons : { enter : [lang.buttons.enter, function() { cm.replaceSelection(selecteds.join(" ")); this.hide().lockScreen(false).hideMask(); return false; }], cancel : [lang.buttons.cancel, function() { this.hide().lockScreen(false).hideMask(); return false; }] } }); } var category = ["Github emoji", "Twemoji", "Font awesome", "Editor.md logo"]; var tab = dialog.find("." + classPrefix + "tab"); if (tab.html() === "") { var head = "
                    "; for (var i = 0; i<4; i++) { var active = (i === 0) ? " class=\"active\"" : ""; head += "" + category[i] + ""; } head += "
                  "; tab.append(head); var container = "
                  "; for (var x = 0; x < 4; x++) { var display = (x === 0) ? "" : "display:none;"; container += "
                  "; } container += "
                  "; tab.append(container); } var tabBoxs = tab.find("." + classPrefix + "tab-box"); var emojiCategories = ["github-emoji", "twemoji", "font-awesome", logoPrefix]; var drawTable = function() { var cname = emojiCategories[emojiTabIndex]; var $data = emojiData[cname]; var $tab = tabBoxs.eq(emojiTabIndex); if ($tab.html() !== "") { //console.log("break =>", cname); return ; } var pagination = function(data, type) { var rowNumber = (type === "editormd-logo") ? "5" : 20; var pageTotal = Math.ceil(data.length / rowNumber); var table = "
                  "; for (var i = 0; i < pageTotal; i++) { var row = "
                  "; for (var x = 0; x < rowNumber; x++) { var emoji = $.trim(data[(i * rowNumber) + x]); if (typeof emoji !== "undefined" && emoji !== "") { var img = "", icon = ""; if (type === "github-emoji") { var src = (emoji === "+1") ? "plus1" : emoji; src = (src === "black_large_square") ? "black_square" : src; src = (src === "moon") ? "waxing_gibbous_moon" : src; src = exports.emoji.path + src + exports.emoji.ext; img = "\":""; row += "" + img + ""; } else if (type === "twemoji") { var twemojiSrc = exports.twemoji.path + emoji + exports.twemoji.ext; img = "\"twemoji-""; row += "" + img + ""; } else if (type === "font-awesome") { icon = ""; row += "" + icon + ""; } else if (type === "editormd-logo") { icon = ""; row += "" + icon + ""; } } else { row += ""; } } row += "
                  "; table += row; } table += "
                  "; return table; }; if (emojiTabIndex === 0) { for (var i = 0, len = $data.length; i < len; i++) { var h4Style = (i === 0) ? " style=\"margin: 0 0 10px;\"" : " style=\"margin: 10px 0;\""; $tab.append("" + $data[i].category + ""); $tab.append(pagination($data[i].list, cname)); } } else { $tab.append(pagination($data, cname)); } $tab.find("." + classPrefix + "emoji-btn").bind(exports.mouseOrTouch("click", "touchend"), function() { $(this).toggleClass("selected"); if ($(this).hasClass("selected")) { selecteds.push($(this).attr("value")); } }); }; if (emojiData.length < 1) { if (typeof dialog.loading === "function") { dialog.loading(true); } $.getJSON(path + "emoji.json?temp=" + Math.random(), function(json) { if (typeof dialog.loading === "function") { dialog.loading(false); } emojiData = json; emojiData[logoPrefix] = logos; drawTable(); }); } else { drawTable(); } tab.find("li").bind(exports.mouseOrTouch("click", "touchend"), function() { var $this = $(this); emojiTabIndex = $this.index(); $this.addClass("active").siblings().removeClass("active"); tabBoxs.eq(emojiTabIndex).show().siblings().hide(); drawTable(); }); }; }; // CommonJS/Node.js if (typeof require === "function" && typeof exports === "object" && typeof module === "object") { module.exports = factory; } else if (typeof define === "function") // AMD/CMD/Sea.js { if (define.amd) { // for Require.js define(["editormd"], function(editormd) { factory(editormd); }); } else { // for Sea.js define(function(require) { var editormd = require("./../../editormd"); factory(editormd); }); } } else { factory(window.editormd); } })(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/plugins/emoji-dialog/emoji.json ================================================ { "github-emoji" : [ { "category" :"People", "list" : ["bowtie","smile","laughing","blush","smiley","relaxed","smirk","heart_eyes","kissing_heart","kissing_closed_eyes","flushed","relieved","satisfied","grin","wink","stuck_out_tongue_winking_eye","stuck_out_tongue_closed_eyes","grinning","kissing","kissing_smiling_eyes","stuck_out_tongue","sleeping","worried","frowning","anguished","open_mouth","grimacing","confused","hushed","expressionless","unamused","sweat_smile","sweat","disappointed_relieved","weary","pensive","disappointed","confounded","fearful","cold_sweat","persevere","cry","sob","joy","astonished","scream","neckbeard","tired_face","angry","rage","triumph","sleepy","yum","mask","sunglasses","dizzy_face","imp","smiling_imp","neutral_face","no_mouth","innocent","alien","yellow_heart","blue_heart","purple_heart","heart","green_heart","broken_heart","heartbeat","heartpulse","two_hearts","revolving_hearts","cupid","sparkling_heart","sparkles","star","star2","dizzy","boom","collision","anger","exclamation","question","grey_exclamation","grey_question","zzz","dash","sweat_drops","notes","musical_note","fire","hankey","poop","shit","+1","thumbsup","-1","thumbsdown","ok_hand","punch","facepunch","fist","v","wave","hand","raised_hand","open_hands","point_up","point_down","point_left","point_right","raised_hands","pray","point_up_2","clap","muscle","metal","fu","walking","runner","running","couple","family","two_men_holding_hands","two_women_holding_hands","dancer","dancers","ok_woman","no_good","information_desk_person","raising_hand","bride_with_veil","person_with_pouting_face","person_frowning","bow","couplekiss","couple_with_heart","massage","haircut","nail_care","boy","girl","woman","man","baby","older_woman","older_man","person_with_blond_hair","man_with_gua_pi_mao","man_with_turban","construction_worker","cop","angel","princess","smiley_cat","smile_cat","heart_eyes_cat","kissing_cat","smirk_cat","scream_cat","crying_cat_face","joy_cat","pouting_cat","japanese_ogre","japanese_goblin","see_no_evil","hear_no_evil","speak_no_evil","guardsman","skull","feet","lips","kiss","droplet","ear","eyes","nose","tongue","love_letter","bust_in_silhouette","busts_in_silhouette","speech_balloon","thought_balloon","feelsgood","finnadie","goberserk","godmode","hurtrealbad","rage1","rage2","rage3","rage4","suspect","trollface"] }, { "category" :"Nature", "list" : ["sunny","umbrella","cloud","snowflake","snowman","zap","cyclone","foggy","ocean","cat","dog","mouse","hamster","rabbit","wolf","frog","tiger","koala","bear","pig","pig_nose","cow","boar","monkey_face","monkey","horse","racehorse","camel","sheep","elephant","panda_face","snake","bird","baby_chick","hatched_chick","hatching_chick","chicken","penguin","turtle","bug","honeybee","ant","beetle","snail","octopus","tropical_fish","fish","whale","whale2","dolphin","cow2","ram","rat","water_buffalo","tiger2","rabbit2","dragon","goat","rooster","dog2","pig2","mouse2","ox","dragon_face","blowfish","crocodile","dromedary_camel","leopard","cat2","poodle","paw_prints","bouquet","cherry_blossom","tulip","four_leaf_clover","rose","sunflower","hibiscus","maple_leaf","leaves","fallen_leaf","herb","mushroom","cactus","palm_tree","evergreen_tree","deciduous_tree","chestnut","seedling","blossom","ear_of_rice","shell","globe_with_meridians","sun_with_face","full_moon_with_face","new_moon_with_face","new_moon","waxing_crescent_moon","first_quarter_moon","waxing_gibbous_moon","full_moon","waning_gibbous_moon","last_quarter_moon","waning_crescent_moon","last_quarter_moon_with_face","first_quarter_moon_with_face","moon","earth_africa","earth_americas","earth_asia","volcano","milky_way","partly_sunny","octocat","squirrel"] }, { "category" :"Objects", "list" : ["bamboo","gift_heart","dolls","school_satchel","mortar_board","flags","fireworks","sparkler","wind_chime","rice_scene","jack_o_lantern","ghost","santa","christmas_tree","gift","bell","no_bell","tanabata_tree","tada","confetti_ball","balloon","crystal_ball","cd","dvd","floppy_disk","camera","video_camera","movie_camera","computer","tv","iphone","phone","telephone","telephone_receiver","pager","fax","minidisc","vhs","sound","speaker","mute","loudspeaker","mega","hourglass","hourglass_flowing_sand","alarm_clock","watch","radio","satellite","loop","mag","mag_right","unlock","lock","lock_with_ink_pen","closed_lock_with_key","key","bulb","flashlight","high_brightness","low_brightness","electric_plug","battery","calling","email","mailbox","postbox","bath","bathtub","shower","toilet","wrench","nut_and_bolt","hammer","seat","moneybag","yen","dollar","pound","euro","credit_card","money_with_wings","e-mail","inbox_tray","outbox_tray","envelope","incoming_envelope","postal_horn","mailbox_closed","mailbox_with_mail","mailbox_with_no_mail","package","door","smoking","bomb","gun","hocho","pill","syringe","page_facing_up","page_with_curl","bookmark_tabs","bar_chart","chart_with_upwards_trend","chart_with_downwards_trend","scroll","clipboard","calendar","date","card_index","file_folder","open_file_folder","scissors","pushpin","paperclip","black_nib","pencil2","straight_ruler","triangular_ruler","closed_book","green_book","blue_book","orange_book","notebook","notebook_with_decorative_cover","ledger","books","bookmark","name_badge","microscope","telescope","newspaper","football","basketball","soccer","baseball","tennis","8ball","rugby_football","bowling","golf","mountain_bicyclist","bicyclist","horse_racing","snowboarder","swimmer","surfer","ski","spades","hearts","clubs","diamonds","gem","ring","trophy","musical_score","musical_keyboard","violin","space_invader","video_game","black_joker","flower_playing_cards","game_die","dart","mahjong","clapper","memo","pencil","book","art","microphone","headphones","trumpet","saxophone","guitar","shoe","sandal","high_heel","lipstick","boot","shirt","tshirt","necktie","womans_clothes","dress","running_shirt_with_sash","jeans","kimono","bikini","ribbon","tophat","crown","womans_hat","mans_shoe","closed_umbrella","briefcase","handbag","pouch","purse","eyeglasses","fishing_pole_and_fish","coffee","tea","sake","baby_bottle","beer","beers","cocktail","tropical_drink","wine_glass","fork_and_knife","pizza","hamburger","fries","poultry_leg","meat_on_bone","spaghetti","curry","fried_shrimp","bento","sushi","fish_cake","rice_ball","rice_cracker","rice","ramen","stew","oden","dango","egg","bread","doughnut","custard","icecream","ice_cream","shaved_ice","birthday","cake","cookie","chocolate_bar","candy","lollipop","honey_pot","apple","green_apple","tangerine","lemon","cherries","grapes","watermelon","strawberry","peach","melon","banana","pear","pineapple","sweet_potato","eggplant","tomato","corn"] }, { "category" :"Places", "list" : ["house","house_with_garden","school","office","post_office","hospital","bank","convenience_store","love_hotel","hotel","wedding","church","department_store","european_post_office","city_sunrise","city_sunset","japanese_castle","european_castle","tent","factory","tokyo_tower","japan","mount_fuji","sunrise_over_mountains","sunrise","stars","statue_of_liberty","bridge_at_night","carousel_horse","rainbow","ferris_wheel","fountain","roller_coaster","ship","speedboat","boat","sailboat","rowboat","anchor","rocket","airplane","helicopter","steam_locomotive","tram","mountain_railway","bike","aerial_tramway","suspension_railway","mountain_cableway","tractor","blue_car","oncoming_automobile","car","red_car","taxi","oncoming_taxi","articulated_lorry","bus","oncoming_bus","rotating_light","police_car","oncoming_police_car","fire_engine","ambulance","minibus","truck","train","station","train2","bullettrain_front","bullettrain_side","light_rail","monorail","railway_car","trolleybus","ticket","fuelpump","vertical_traffic_light","traffic_light","warning","construction","beginner","atm","slot_machine","busstop","barber","hotsprings","checkered_flag","crossed_flags","izakaya_lantern","moyai","circus_tent","performing_arts","round_pushpin","triangular_flag_on_post","jp","kr","cn","us","fr","es","it","ru","gb","uk","de"] }, { "category" :"Symbols", "list" : ["one","two","three","four","five","six","seven","eight","nine","keycap_ten","1234","zero","hash","symbols","arrow_backward","arrow_down","arrow_forward","arrow_left","capital_abcd","abcd","abc","arrow_lower_left","arrow_lower_right","arrow_right","arrow_up","arrow_upper_left","arrow_upper_right","arrow_double_down","arrow_double_up","arrow_down_small","arrow_heading_down","arrow_heading_up","leftwards_arrow_with_hook","arrow_right_hook","left_right_arrow","arrow_up_down","arrow_up_small","arrows_clockwise","arrows_counterclockwise","rewind","fast_forward","information_source","ok","twisted_rightwards_arrows","repeat","repeat_one","new","top","up","cool","free","ng","cinema","koko","signal_strength","u5272","u5408","u55b6","u6307","u6708","u6709","u6e80","u7121","u7533","u7a7a","u7981","sa","restroom","mens","womens","baby_symbol","no_smoking","parking","wheelchair","metro","baggage_claim","accept","wc","potable_water","put_litter_in_its_place","secret","congratulations","m","passport_control","left_luggage","customs","ideograph_advantage","cl","sos","id","no_entry_sign","underage","no_mobile_phones","do_not_litter","non-potable_water","no_bicycles","no_pedestrians","children_crossing","no_entry","eight_spoked_asterisk","sparkle","eight_pointed_black_star","heart_decoration","vs","vibration_mode","mobile_phone_off","chart","currency_exchange","aries","taurus","gemini","cancer","leo","virgo","libra","scorpius","sagittarius","capricorn","aquarius","pisces","ophiuchus","six_pointed_star","negative_squared_cross_mark","a","b","ab","o2","diamond_shape_with_a_dot_inside","recycle","end","back","on","soon","clock1","clock130","clock10","clock1030","clock11","clock1130","clock12","clock1230","clock2","clock230","clock3","clock330","clock4","clock430","clock5","clock530","clock6","clock630","clock7","clock730","clock8","clock830","clock9","clock930","heavy_dollar_sign","copyright","registered","tm","x","heavy_exclamation_mark","bangbang","interrobang","o","heavy_multiplication_x","heavy_plus_sign","heavy_minus_sign","heavy_division_sign","white_flower","100","heavy_check_mark","ballot_box_with_check","radio_button","link","curly_loop","wavy_dash","part_alternation_mark","trident","black_small_square","white_small_square","black_medium_small_square","white_medium_small_square","black_medium_square","white_medium_square","black_large_square","white_large_square","white_check_mark","black_square_button","white_square_button","black_circle","white_circle","red_circle","large_blue_circle","large_blue_diamond","large_orange_diamond","small_blue_diamond","small_orange_diamond","small_red_triangle","small_red_triangle_down","shipit"] } ], "twemoji" : ["1f004","1f0cf","1f170","1f171","1f17e","1f17f","1f18e","1f191","1f192","1f193","1f194","1f195","1f196","1f197","1f198","1f199","1f19a","1f1e6","1f1e7","1f1e8-1f1f3","1f1e8","1f1e9-1f1ea","1f1e9","1f1ea-1f1f8","1f1ea","1f1eb-1f1f7","1f1eb","1f1ec-1f1e7","1f1ec","1f1ed","1f1ee-1f1f9","1f1ee","1f1ef-1f1f5","1f1ef","1f1f0-1f1f7","1f1f0","1f1f1","1f1f2","1f1f3","1f1f4","1f1f5","1f1f6","1f1f7-1f1fa","1f1f7","1f1f8","1f1f9","1f1fa-1f1f8","1f1fa","1f1fb","1f1fc","1f1fd","1f1fe","1f1ff","1f201","1f202","1f21a","1f22f","1f232","1f233","1f234","1f235","1f236","1f237","1f238","1f239","1f23a","1f250","1f251","1f300","1f301","1f302","1f303","1f304","1f305","1f306","1f307","1f308","1f309","1f30a","1f30b","1f30c","1f30d","1f30e","1f30f","1f310","1f311","1f312","1f313","1f314","1f315","1f316","1f317","1f318","1f319","1f31a","1f31b","1f31c","1f31d","1f31e","1f31f","1f320","1f330","1f331","1f332","1f333","1f334","1f335","1f337","1f338","1f339","1f33a","1f33b","1f33c","1f33d","1f33e","1f33f","1f340","1f341","1f342","1f343","1f344","1f345","1f346","1f347","1f348","1f349","1f34a","1f34b","1f34c","1f34d","1f34e","1f34f","1f350","1f351","1f352","1f353","1f354","1f355","1f356","1f357","1f358","1f359","1f35a","1f35b","1f35c","1f35d","1f35e","1f35f","1f360","1f361","1f362","1f363","1f364","1f365","1f366","1f367","1f368","1f369","1f36a","1f36b","1f36c","1f36d","1f36e","1f36f","1f370","1f371","1f372","1f373","1f374","1f375","1f376","1f377","1f378","1f379","1f37a","1f37b","1f37c","1f380","1f381","1f382","1f383","1f384","1f385","1f386","1f387","1f388","1f389","1f38a","1f38b","1f38c","1f38d","1f38e","1f38f","1f390","1f391","1f392","1f393","1f3a0","1f3a1","1f3a2","1f3a3","1f3a4","1f3a5","1f3a6","1f3a7","1f3a8","1f3a9","1f3aa","1f3ab","1f3ac","1f3ad","1f3ae","1f3af","1f3b0","1f3b1","1f3b2","1f3b3","1f3b4","1f3b5","1f3b6","1f3b7","1f3b8","1f3b9","1f3ba","1f3bb","1f3bc","1f3bd","1f3be","1f3bf","1f3c0","1f3c1","1f3c2","1f3c3","1f3c4","1f3c6","1f3c7","1f3c8","1f3c9","1f3ca","1f3e0","1f3e1","1f3e2","1f3e3","1f3e4","1f3e5","1f3e6","1f3e7","1f3e8","1f3e9","1f3ea","1f3eb","1f3ec","1f3ed","1f3ee","1f3ef","1f3f0","1f400","1f401","1f402","1f403","1f404","1f405","1f406","1f407","1f408","1f409","1f40a","1f40b","1f40c","1f40d","1f40e","1f40f","1f410","1f411","1f412","1f413","1f414","1f415","1f416","1f417","1f418","1f419","1f41a","1f41b","1f41c","1f41d","1f41e","1f41f","1f420","1f421","1f422","1f423","1f424","1f425","1f426","1f427","1f428","1f429","1f42a","1f42b","1f42c","1f42d","1f42e","1f42f","1f430","1f431","1f432","1f433","1f434","1f435","1f436","1f437","1f438","1f439","1f43a","1f43b","1f43c","1f43d","1f43e","1f440","1f442","1f443","1f444","1f445","1f446","1f447","1f448","1f449","1f44a","1f44b","1f44c","1f44d","1f44e","1f44f","1f450","1f451","1f452","1f453","1f454","1f455","1f456","1f457","1f458","1f459","1f45a","1f45b","1f45c","1f45d","1f45e","1f45f","1f460","1f461","1f462","1f463","1f464","1f465","1f466","1f467","1f468","1f469","1f46a","1f46b","1f46c","1f46d","1f46e","1f46f","1f470","1f471","1f472","1f473","1f474","1f475","1f476","1f477","1f478","1f479","1f47a","1f47b","1f47c","1f47d","1f47e","1f47f","1f480","1f481","1f482","1f483","1f484","1f485","1f486","1f487","1f488","1f489","1f48a","1f48b","1f48c","1f48d","1f48e","1f48f","1f490","1f491","1f492","1f493","1f494","1f495","1f496","1f497","1f498","1f499","1f49a","1f49b","1f49c","1f49d","1f49e","1f49f","1f4a0","1f4a1","1f4a2","1f4a3","1f4a4","1f4a5","1f4a6","1f4a7","1f4a8","1f4a9","1f4aa","1f4ab","1f4ac","1f4ad","1f4ae","1f4af","1f4b0","1f4b1","1f4b2","1f4b3","1f4b4","1f4b5","1f4b6","1f4b7","1f4b8","1f4b9","1f4ba","1f4bb","1f4bc","1f4bd","1f4be","1f4bf","1f4c0","1f4c1","1f4c2","1f4c3","1f4c4","1f4c5","1f4c6","1f4c7","1f4c8","1f4c9","1f4ca","1f4cb","1f4cc","1f4cd","1f4ce","1f4cf","1f4d0","1f4d1","1f4d2","1f4d3","1f4d4","1f4d5","1f4d6","1f4d7","1f4d8","1f4d9","1f4da","1f4db","1f4dc","1f4dd","1f4de","1f4df","1f4e0","1f4e1","1f4e2","1f4e3","1f4e4","1f4e5","1f4e6","1f4e7","1f4e8","1f4e9","1f4ea","1f4eb","1f4ec","1f4ed","1f4ee","1f4ef","1f4f0","1f4f1","1f4f2","1f4f3","1f4f4","1f4f5","1f4f6","1f4f7","1f4f9","1f4fa","1f4fb","1f4fc","1f500","1f501","1f502","1f503","1f504","1f505","1f506","1f507","1f508","1f509","1f50a","1f50b","1f50c","1f50d","1f50e","1f50f","1f510","1f511","1f512","1f513","1f514","1f515","1f516","1f517","1f518","1f519","1f51a","1f51b","1f51c","1f51d","1f51e","1f51f","1f520","1f521","1f522","1f523","1f524","1f525","1f526","1f527","1f528","1f529","1f52a","1f52b","1f52c","1f52d","1f52e","1f52f","1f530","1f531","1f532","1f533","1f534","1f535","1f536","1f537","1f538","1f539","1f53a","1f53b","1f53c","1f53d","1f550","1f551","1f552","1f553","1f554","1f555","1f556","1f557","1f558","1f559","1f55a","1f55b","1f55c","1f55d","1f55e","1f55f","1f560","1f561","1f562","1f563","1f564","1f565","1f566","1f567","1f5fb","1f5fc","1f5fd","1f5fe","1f5ff","1f600","1f601","1f602","1f603","1f604","1f605","1f606","1f607","1f608","1f609","1f60a","1f60b","1f60c","1f60d","1f60e","1f60f","1f610","1f611","1f612","1f613","1f614","1f615","1f616","1f617","1f618","1f619","1f61a","1f61b","1f61c","1f61d","1f61e","1f61f","1f620","1f621","1f622","1f623","1f624","1f625","1f626","1f627","1f628","1f629","1f62a","1f62b","1f62c","1f62d","1f62e","1f62f","1f630","1f631","1f632","1f633","1f634","1f635","1f636","1f637","1f638","1f639","1f63a","1f63b","1f63c","1f63d","1f63e","1f63f","1f640","1f645","1f646","1f647","1f648","1f649","1f64a","1f64b","1f64c","1f64d","1f64e","1f64f","1f680","1f681","1f682","1f683","1f684","1f685","1f686","1f687","1f688","1f689","1f68a","1f68b","1f68c","1f68d","1f68e","1f68f","1f690","1f691","1f692","1f693","1f694","1f695","1f696","1f697","1f698","1f699","1f69a","1f69b","1f69c","1f69d","1f69e","1f69f","1f6a0","1f6a1","1f6a2","1f6a3","1f6a4","1f6a5","1f6a6","1f6a7","1f6a8","1f6a9","1f6aa","1f6ab","1f6ac","1f6ad","1f6ae","1f6af","1f6b0","1f6b1","1f6b2","1f6b3","1f6b4","1f6b5","1f6b6","1f6b7","1f6b8","1f6b9","1f6ba","1f6bb","1f6bc","1f6bd","1f6be","1f6bf","1f6c0","1f6c1","1f6c2","1f6c3","1f6c4","1f6c5","203c","2049","2122","2139","2194","2195","2196","2197","2198","2199","21a9","21aa","23-20e3","231a","231b","23e9","23ea","23eb","23ec","23f0","23f3","24c2","25aa","25ab","25b6","25c0","25fb","25fc","25fd","25fe","2600","2601","260e","2611","2614","2615","261d","263a","2648","2649","264a","264b","264c","264d","264e","264f","2650","2651","2652","2653","2660","2663","2665","2666","2668","267b","267f","2693","26a0","26a1","26aa","26ab","26bd","26be","26c4","26c5","26ce","26d4","26ea","26f2","26f3","26f5","26fa","26fd","2702","2705","2708","2709","270a","270b","270c","270f","2712","2714","2716","2728","2733","2734","2744","2747","274c","274e","2753","2754","2755","2757","2764","2795","2796","2797","27a1","27b0","27bf","2934","2935","2b05","2b06","2b07","2b1b","2b1c","2b50","2b55","30-20e3","3030","303d","31-20e3","32-20e3","3297","3299","33-20e3","34-20e3","35-20e3","36-20e3","37-20e3","38-20e3","39-20e3","a9","ae","e50a"], "font-awesome" : ["glass","music","search","envelope-o","heart","star","star-o","user","film","th-large","th","th-list","check","times","search-plus","search-minus","power-off","signal","cog","trash-o","home","file-o","clock-o","road","download","arrow-circle-o-down","arrow-circle-o-up","inbox","play-circle-o","repeat","refresh","list-alt","lock","flag","headphones","volume-off","volume-down","volume-up","qrcode","barcode","tag","tags","book","bookmark","print","camera","font","bold","italic","text-height","text-width","align-left","align-center","align-right","align-justify","list","outdent","indent","video-camera","picture-o","pencil","map-marker","adjust","tint","pencil-square-o","share-square-o","check-square-o","arrows","step-backward","fast-backward","backward","play","pause","stop","forward","fast-forward","step-forward","eject","chevron-left","chevron-right","plus-circle","minus-circle","times-circle","check-circle","question-circle","info-circle","crosshairs","times-circle-o","check-circle-o","ban","arrow-left","arrow-right","arrow-up","arrow-down","share","expand","compress","plus","minus","asterisk","exclamation-circle","gift","leaf","fire","eye","eye-slash","exclamation-triangle","plane","calendar","random","comment","magnet","chevron-up","chevron-down","retweet","shopping-cart","folder","folder-open","arrows-v","arrows-h","bar-chart","twitter-square","facebook-square","camera-retro","key","cogs","comments","thumbs-o-up","thumbs-o-down","star-half","heart-o","sign-out","linkedin-square","thumb-tack","external-link","sign-in","trophy","github-square","upload","lemon-o","phone","square-o","bookmark-o","phone-square","twitter","facebook","github","unlock","credit-card","rss","hdd-o","bullhorn","bell","certificate","hand-o-right","hand-o-left","hand-o-up","hand-o-down","arrow-circle-left","arrow-circle-right","arrow-circle-up","arrow-circle-down","globe","wrench","tasks","filter","briefcase","arrows-alt","users","link","cloud","flask","scissors","files-o","paperclip","floppy-o","square","bars","list-ul","list-ol","strikethrough","underline","table","magic","truck","pinterest","pinterest-square","google-plus-square","google-plus","money","caret-down","caret-up","caret-left","caret-right","columns","sort","sort-desc","sort-asc","envelope","linkedin","undo","gavel","tachometer","comment-o","comments-o","bolt","sitemap","umbrella","clipboard","lightbulb-o","exchange","cloud-download","cloud-upload","user-md","stethoscope","suitcase","bell-o","coffee","cutlery","file-text-o","building-o","hospital-o","ambulance","medkit","fighter-jet","beer","h-square","plus-square","angle-double-left","angle-double-right","angle-double-up","angle-double-down","angle-left","angle-right","angle-up","angle-down","desktop","laptop","tablet","mobile","circle-o","quote-left","quote-right","spinner","circle","reply","github-alt","folder-o","folder-open-o","smile-o","frown-o","meh-o","gamepad","keyboard-o","flag-o","flag-checkered","terminal","code","reply-all","star-half-o","location-arrow","crop","code-fork","chain-broken","question","info","exclamation","superscript","subscript","eraser","puzzle-piece","microphone","microphone-slash","shield","calendar-o","fire-extinguisher","rocket","maxcdn","chevron-circle-left","chevron-circle-right","chevron-circle-up","chevron-circle-down","html5","css3","anchor","unlock-alt","bullseye","ellipsis-h","ellipsis-v","rss-square","play-circle","ticket","minus-square","minus-square-o","level-up","level-down","check-square","pencil-square","share-square","compass","caret-square-o-down","caret-square-o-up","caret-square-o-right","eur","gbp","usd","inr","jpy","rub","krw","btc","file","file-text","sort-alpha-asc","sort-alpha-desc","sort-amount-asc","sort-amount-desc","sort-numeric-asc","sort-numeric-desc","thumbs-up","thumbs-down","youtube-square","youtube","xing","xing-square","youtube-play","dropbox","stack-overflow","instagram","flickr","adn","bitbucket","bitbucket-square","tumblr","tumblr-square","long-arrow-down","long-arrow-up","long-arrow-left","long-arrow-right","apple","windows","android","linux","dribbble","skype","foursquare","trello","female","male","gratipay","sun-o","moon-o","archive","bug","vk","weibo","renren","pagelines","stack-exchange","arrow-circle-o-right","arrow-circle-o-left","caret-square-o-left","dot-circle-o","wheelchair","vimeo-square","try","plus-square-o","space-shuttle","slack","envelope-square","wordpress","openid","university","graduation-cap","yahoo","google","reddit","reddit-square","stumbleupon-circle","stumbleupon","delicious","digg","pied-piper","pied-piper-alt","drupal","joomla","language","fax","building","child","paw","spoon","cube","cubes","behance","behance-square","steam","steam-square","recycle","car","taxi","tree","spotify","deviantart","soundcloud","database","file-pdf-o","file-word-o","file-excel-o","file-powerpoint-o","file-image-o","file-archive-o","file-audio-o","file-video-o","file-code-o","vine","codepen","jsfiddle","life-ring","circle-o-notch","rebel","empire","git-square","git","hacker-news","tencent-weibo","qq","weixin","paper-plane","paper-plane-o","history","circle-thin","header","paragraph","sliders","share-alt","share-alt-square","bomb","futbol-o","tty","binoculars","plug","slideshare","twitch","yelp","newspaper-o","wifi","calculator","paypal","google-wallet","cc-visa","cc-mastercard","cc-discover","cc-amex","cc-paypal","cc-stripe","bell-slash","bell-slash-o","trash","copyright","at","eyedropper","paint-brush","birthday-cake","area-chart","pie-chart","line-chart","lastfm","lastfm-square","toggle-off","toggle-on","bicycle","bus","ioxhost","angellist","cc","ils","meanpath","buysellads","connectdevelop","dashcube","forumbee","leanpub","sellsy","shirtsinbulk","simplybuilt","skyatlas","cart-plus","cart-arrow-down","diamond","ship","user-secret","motorcycle","street-view","heartbeat","venus","mars","mercury","transgender","transgender-alt","venus-double","mars-double","venus-mars","mars-stroke","mars-stroke-v","mars-stroke-h","neuter","facebook-official","pinterest-p","whatsapp","server","user-plus","user-times","bed","viacoin","train","subway","medium","GitHub","bed","buysellads","cart-arrow-down","cart-plus","connectdevelop","dashcube","diamond","facebook-official","forumbee","heartbeat","hotel","leanpub","mars","mars-double","mars-stroke","mars-stroke-h","mars-stroke-v","medium","mercury","motorcycle","neuter","pinterest-p","sellsy","server","ship","shirtsinbulk","simplybuilt","skyatlas","street-view","subway","train","transgender","transgender-alt","user-plus","user-secret","user-times","venus","venus-double","venus-mars","viacoin","whatsapp","adjust","anchor","archive","area-chart","arrows","arrows-h","arrows-v","asterisk","at","automobile","ban","bank","bar-chart","bar-chart-o","barcode","bars","bed","beer","bell","bell-o","bell-slash","bell-slash-o","bicycle","binoculars","birthday-cake","bolt","bomb","book","bookmark","bookmark-o","briefcase","bug","building","building-o","bullhorn","bullseye","bus","cab","calculator","calendar","calendar-o","camera","camera-retro","car","caret-square-o-down","caret-square-o-left","caret-square-o-right","caret-square-o-up","cart-arrow-down","cart-plus","cc","certificate","check","check-circle","check-circle-o","check-square","check-square-o","child","circle","circle-o","circle-o-notch","circle-thin","clock-o","close","cloud","cloud-download","cloud-upload","code","code-fork","coffee","cog","cogs","comment","comment-o","comments","comments-o","compass","copyright","credit-card","crop","crosshairs","cube","cubes","cutlery","dashboard","database","desktop","diamond","dot-circle-o","download","edit","ellipsis-h","ellipsis-v","envelope","envelope-o","envelope-square","eraser","exchange","exclamation","exclamation-circle","exclamation-triangle","external-link","external-link-square","eye","eye-slash","eyedropper","fax","female","fighter-jet","file-archive-o","file-audio-o","file-code-o","file-excel-o","file-image-o","file-movie-o","file-pdf-o","file-photo-o","file-picture-o","file-powerpoint-o","file-sound-o","file-video-o","file-word-o","file-zip-o","film","filter","fire","fire-extinguisher","flag","flag-checkered","flag-o","flash","flask","folder","folder-o","folder-open","folder-open-o","frown-o","futbol-o","gamepad","gavel","gear","gears","genderless","gift","glass","globe","graduation-cap","group","hdd-o","headphones","heart","heart-o","heartbeat","history","home","hotel","image","inbox","info","info-circle","institution","key","keyboard-o","language","laptop","leaf","legal","lemon-o","level-down","level-up","life-bouy","life-buoy","life-ring","life-saver","lightbulb-o","line-chart","location-arrow","lock","magic","magnet","mail-forward","mail-reply","mail-reply-all","male","map-marker","meh-o","microphone","microphone-slash","minus","minus-circle","minus-square","minus-square-o","mobile","mobile-phone","money","moon-o","mortar-board","motorcycle","music","navicon","newspaper-o","paint-brush","paper-plane","paper-plane-o","paw","pencil","pencil-square","pencil-square-o","phone","phone-square","photo","picture-o","pie-chart","plane","plug","plus","plus-circle","plus-square","plus-square-o","power-off","print","puzzle-piece","qrcode","question","question-circle","quote-left","quote-right","random","recycle","refresh","remove","reorder","reply","reply-all","retweet","road","rocket","rss","rss-square","search","search-minus","search-plus","send","send-o","server","share","share-alt","share-alt-square","share-square","share-square-o","shield","ship","shopping-cart","sign-in","sign-out","signal","sitemap","sliders","smile-o","soccer-ball-o","sort","sort-alpha-asc","sort-alpha-desc","sort-amount-asc","sort-amount-desc","sort-asc","sort-desc","sort-down","sort-numeric-asc","sort-numeric-desc","sort-up","space-shuttle","spinner","spoon","square","square-o","star","star-half","star-half-empty","star-half-full","star-half-o","star-o","street-view","suitcase","sun-o","support","tablet","tachometer","tag","tags","tasks","taxi","terminal","thumb-tack","thumbs-down","thumbs-o-down","thumbs-o-up","thumbs-up","ticket","times","times-circle","times-circle-o","tint","toggle-down","toggle-left","toggle-off","toggle-on","toggle-right","toggle-up","trash","trash-o","tree","trophy","truck","tty","umbrella","university","unlock","unlock-alt","unsorted","upload","user","user-plus","user-secret","user-times","users","video-camera","volume-down","volume-off","volume-up","warning","wheelchair","wifi","wrench","ambulance","automobile","bicycle","bus","cab","car","fighter-jet","motorcycle","plane","rocket","ship","space-shuttle","subway","taxi","train","truck","wheelchair","circle-thin","genderless","mars","mars-double","mars-stroke","mars-stroke-h","mars-stroke-v","mercury","neuter","transgender","transgender-alt","venus","venus-double","venus-mars","file","file-archive-o","file-audio-o","file-code-o","file-excel-o","file-image-o","file-movie-o","file-o","file-pdf-o","file-photo-o","file-picture-o","file-powerpoint-o","file-sound-o","file-text","file-text-o","file-video-o","file-word-o","file-zip-o","circle-o-notch","cog","gear","refresh","spinner","check-square","check-square-o","circle","circle-o","dot-circle-o","minus-square","minus-square-o","plus-square","plus-square-o","square","square-o","cc-amex","cc-discover","cc-mastercard","cc-paypal","cc-stripe","cc-visa","credit-card","google-wallet","paypal","area-chart","bar-chart","bar-chart-o","line-chart","pie-chart","bitcoin","btc","cny","dollar","eur","euro","gbp","ils","inr","jpy","krw","money","rmb","rouble","rub","ruble","rupee","shekel","sheqel","try","turkish-lira","usd","won","yen","align-center","align-justify","align-left","align-right","bold","chain","chain-broken","clipboard","columns","copy","cut","dedent","eraser","file","file-o","file-text","file-text-o","files-o","floppy-o","font","header","indent","italic","link","list","list-alt","list-ol","list-ul","outdent","paperclip","paragraph","paste","repeat","rotate-left","rotate-right","save","scissors","strikethrough","subscript","superscript","table","text-height","text-width","th","th-large","th-list","underline","undo","unlink","angle-double-down","angle-double-left","angle-double-right","angle-double-up","angle-down","angle-left","angle-right","angle-up","arrow-circle-down","arrow-circle-left","arrow-circle-o-down","arrow-circle-o-left","arrow-circle-o-right","arrow-circle-o-up","arrow-circle-right","arrow-circle-up","arrow-down","arrow-left","arrow-right","arrow-up","arrows","arrows-alt","arrows-h","arrows-v","caret-down","caret-left","caret-right","caret-square-o-down","caret-square-o-left","caret-square-o-right","caret-square-o-up","caret-up","chevron-circle-down","chevron-circle-left","chevron-circle-right","chevron-circle-up","chevron-down","chevron-left","chevron-right","chevron-up","hand-o-down","hand-o-left","hand-o-right","hand-o-up","long-arrow-down","long-arrow-left","long-arrow-right","long-arrow-up","toggle-down","toggle-left","toggle-right","toggle-up","arrows-alt","backward","compress","eject","expand","fast-backward","fast-forward","forward","pause","play","play-circle","play-circle-o","step-backward","step-forward","stop","youtube-play","report an issue with Adblock Plus","adn","android","angellist","apple","behance","behance-square","bitbucket","bitbucket-square","bitcoin","btc","buysellads","cc-amex","cc-discover","cc-mastercard","cc-paypal","cc-stripe","cc-visa","codepen","connectdevelop","css3","dashcube","delicious","deviantart","digg","dribbble","dropbox","drupal","empire","facebook","facebook-f","facebook-official","facebook-square","flickr","forumbee","foursquare","ge","git","git-square","github","github-alt","github-square","gittip","google","google-plus","google-plus-square","google-wallet","gratipay","hacker-news","html5","instagram","ioxhost","joomla","jsfiddle","lastfm","lastfm-square","leanpub","linkedin","linkedin-square","linux","maxcdn","meanpath","medium","openid","pagelines","paypal","pied-piper","pied-piper-alt","pinterest","pinterest-p","pinterest-square","qq","ra","rebel","reddit","reddit-square","renren","sellsy","share-alt","share-alt-square","shirtsinbulk","simplybuilt","skyatlas","skype","slack","slideshare","soundcloud","spotify","stack-exchange","stack-overflow","steam","steam-square","stumbleupon","stumbleupon-circle","tencent-weibo","trello","tumblr","tumblr-square","twitch","twitter","twitter-square","viacoin","vimeo-square","vine","vk","wechat","weibo","weixin","whatsapp","windows","wordpress","xing","xing-square","yahoo","yelp","youtube","youtube-play","youtube-square","ambulance","h-square","heart","heart-o","heartbeat","hospital-o","medkit","plus-square","stethoscope","user-md","wheelchair"] } ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/plugins/goto-line-dialog/goto-line-dialog.js ================================================ /*! * Goto line dialog plugin for Editor.md * * @file goto-line-dialog.js * @author pandao * @version 1.2.1 * @updateTime 2015-06-09 * {@link https://github.com/pandao/editor.md} * @license MIT */ (function() { var factory = function (exports) { var $ = jQuery; var pluginName = "goto-line-dialog"; var langs = { "zh-cn" : { toolbar : { "goto-line" : "跳转到行" }, dialog : { "goto-line" : { title : "跳转到行", label : "请输入行号", error : "错误:" } } }, "zh-tw" : { toolbar : { "goto-line" : "跳轉到行" }, dialog : { "goto-line" : { title : "跳轉到行", label : "請輸入行號", error : "錯誤:" } } }, "en" : { toolbar : { "goto-line" : "Goto line" }, dialog : { "goto-line" : { title : "Goto line", label : "Enter a line number, range ", error : "Error: " } } } }; exports.fn.gotoLineDialog = function() { var _this = this; var cm = this.cm; var editor = this.editor; var settings = this.settings; var path = settings.pluginPath + pluginName +"/"; var classPrefix = this.classPrefix; var dialogName = classPrefix + pluginName, dialog; $.extend(true, this.lang, langs[this.lang.name]); this.setToolbar(); var lang = this.lang; var dialogLang = lang.dialog["goto-line"]; var lineCount = cm.lineCount(); dialogLang.error += dialogLang.label + " 1-" + lineCount; if (editor.find("." + dialogName).length < 1) { var dialogContent = [ "
                  ", "

                  " + dialogLang.label + " 1-" + lineCount +"   

                  ", "
                  " ].join("\n"); dialog = this.createDialog({ name : dialogName, title : dialogLang.title, width : 400, height : 180, mask : settings.dialogShowMask, drag : settings.dialogDraggable, content : dialogContent, lockScreen : settings.dialogLockScreen, maskStyle : { opacity : settings.dialogMaskOpacity, backgroundColor : settings.dialogMaskBgColor }, buttons : { enter : [lang.buttons.enter, function() { var line = parseInt(this.find("[data-line-number]").val()); if (line < 1 || line > lineCount) { alert(dialogLang.error); return false; } _this.gotoLine(line); this.hide().lockScreen(false).hideMask(); return false; }], cancel : [lang.buttons.cancel, function() { this.hide().lockScreen(false).hideMask(); return false; }] } }); } dialog = editor.find("." + dialogName); this.dialogShowMask(dialog); this.dialogLockScreen(); dialog.show(); }; }; // CommonJS/Node.js if (typeof require === "function" && typeof exports === "object" && typeof module === "object") { module.exports = factory; } else if (typeof define === "function") // AMD/CMD/Sea.js { if (define.amd) { // for Require.js define(["editormd"], function(editormd) { factory(editormd); }); } else { // for Sea.js define(function(require) { var editormd = require("./../../editormd"); factory(editormd); }); } } else { factory(window.editormd); } })(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/plugins/help-dialog/help-dialog.js ================================================ /*! * Help dialog plugin for Editor.md * * @file help-dialog.js * @author pandao * @version 1.2.0 * @updateTime 2015-03-08 * {@link https://github.com/pandao/editor.md} * @license MIT */ (function() { var factory = function (exports) { var $ = jQuery; var pluginName = "help-dialog"; exports.fn.helpDialog = function() { var _this = this; var lang = this.lang; var editor = this.editor; var settings = this.settings; var path = settings.pluginPath + pluginName + "/"; var classPrefix = this.classPrefix; var dialogName = classPrefix + pluginName, dialog; var dialogLang = lang.dialog.help; if (editor.find("." + dialogName).length < 1) { var dialogContent = "
                  "; dialog = this.createDialog({ name : dialogName, title : dialogLang.title, width : 840, height : 540, mask : settings.dialogShowMask, drag : settings.dialogDraggable, content : dialogContent, lockScreen : settings.dialogLockScreen, maskStyle : { opacity : settings.dialogMaskOpacity, backgroundColor : settings.dialogMaskBgColor }, buttons : { close : [lang.buttons.close, function() { this.hide().lockScreen(false).hideMask(); return false; }] } }); } dialog = editor.find("." + dialogName); this.dialogShowMask(dialog); this.dialogLockScreen(); dialog.show(); var helpContent = dialog.find(".markdown-body"); if (helpContent.html() === "") { $.get(path + "help.md", function(text) { var md = exports.$marked(text); helpContent.html(md); helpContent.find("a").attr("target", "_blank"); }); } }; }; // CommonJS/Node.js if (typeof require === "function" && typeof exports === "object" && typeof module === "object") { module.exports = factory; } else if (typeof define === "function") // AMD/CMD/Sea.js { if (define.amd) { // for Require.js define(["editormd"], function(editormd) { factory(editormd); }); } else { // for Sea.js define(function(require) { var editormd = require("./../../editormd"); factory(editormd); }); } } else { factory(window.editormd); } })(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/plugins/help-dialog/help.md ================================================ ##### Markdown语法教程 (Markdown syntax tutorial) - [Markdown Syntax](http://daringfireball.net/projects/markdown/syntax/ "Markdown Syntax") - [Mastering Markdown](https://guides.github.com/features/mastering-markdown/ "Mastering Markdown") - [Markdown Basics](https://help.github.com/articles/markdown-basics/ "Markdown Basics") - [GitHub Flavored Markdown](https://help.github.com/articles/github-flavored-markdown/ "GitHub Flavored Markdown") - [Markdown 语法说明(简体中文)](http://www.markdown.cn/ "Markdown 语法说明(简体中文)") - [Markdown 語法說明(繁體中文)](http://markdown.tw/ "Markdown 語法說明(繁體中文)") ##### 键盘快捷键 (Keyboard shortcuts) > If Editor.md code editor is on focus, you can use keyboard shortcuts. | Keyboard shortcuts (键盘快捷键) | 说明 | Description | | :---------------------------------------------- |:--------------------------------- | :------------------------------------------------- | | F9 | 切换实时预览 | Switch watch/unwatch | | F10 | 全屏HTML预览(按 Shift + ESC 退出) | Full preview HTML (Press Shift + ESC exit) | | F11 | 切换全屏状态 | Switch fullscreen (Press ESC exit) | | Ctrl + 1~6 / Command + 1~6 | 插入标题1~6 | Insert heading 1~6 | | Ctrl + A / Command + A | 全选 | Select all | | Ctrl + B / Command + B | 插入粗体 | Insert bold | | Ctrl + D / Command + D | 插入日期时间 | Insert datetime | | Ctrl + E / Command + E | 插入Emoji符号 | Insert :emoji: | | Ctrl + F / Command + F | 查找/搜索 | Start searching | | Ctrl + G / Command + G | 切换到下一个搜索结果项 | Find next search results | | Ctrl + H / Command + H | 插入水平线 | Insert horizontal rule | | Ctrl + I / Command + I | 插入斜体 | Insert italic | | Ctrl + K / Command + K | 插入行内代码 | Insert inline code | | Ctrl + L / Command + L | 插入链接 | Insert link | | Ctrl + U / Command + U | 插入无序列表 | Insert unordered list | | Ctrl + Q | 代码折叠切换 | Switch code fold | | Ctrl + Z / Command + Z | 撤销 | Undo | | Ctrl + Y / Command + Y | 重做 | Redo | | Ctrl + Shift + A | 插入@链接 | Insert @link | | Ctrl + Shift + C | 插入行内代码 | Insert inline code | | Ctrl + Shift + E | 打开插入Emoji表情对话框 | Open emoji dialog | | Ctrl + Shift + F / Command + Option + F | 替换 | Replace | | Ctrl + Shift + G / Shift + Command + G | 切换到上一个搜索结果项 | Find previous search results | | Ctrl + Shift + H | 打开HTML实体字符对话框 | Open HTML Entities dialog | | Ctrl + Shift + I | 插入图片 | Insert image ![]() | | Ctrl + Shift + K | 插入TeX(KaTeX)公式符号 | Insert TeX(KaTeX) symbol $$TeX$$ | | Ctrl + Shift + L | 打开插入链接对话框 | Open link dialog | | Ctrl + Shift + O | 插入有序列表 | Insert ordered list | | Ctrl + Shift + P | 打开插入PRE对话框 | Open Preformatted text dialog | | Ctrl + Shift + Q | 插入引用 | Insert blockquotes | | Ctrl + Shift + R / Shift + Command + Option + F | 全部替换 | Replace all | | Ctrl + Shift + S | 插入删除线 | Insert strikethrough | | Ctrl + Shift + T | 打开插入表格对话框 | Open table dialog | | Ctrl + Shift + U | 将所选文字转成大写 | Selection text convert to uppercase | | Shift + Alt + C | 插入```代码 | Insert code blocks (```) | | Shift + Alt + H | 打开使用帮助对话框 | Open help dialog | | Shift + Alt + L | 将所选文本转成小写 | Selection text convert to lowercase | | Shift + Alt + P | 插入分页符 | Insert page break | | Alt + L | 将所选文本转成小写 | Selection text convert to lowercase | | Shift + Alt + U | 将所选的每个单词的首字母转成大写 | Selection words first letter convert to Uppercase | | Ctrl + Shift + Alt + C | 打开插入代码块对话框层 | Open code blocks dialog | | Ctrl + Shift + Alt + I | 打开插入图片对话框层 | Open image dialog | | Ctrl + Shift + Alt + U | 将所选文本的第一个首字母转成大写 | Selection text first letter convert to uppercase | | Ctrl + Alt + G | 跳转到指定的行 | Goto line | ##### Emoji表情参考 (Emoji reference) - [Github emoji](http://www.emoji-cheat-sheet.com/ "Github emoji") - [Twitter Emoji \(Twemoji\)](http://twitter.github.io/twemoji/preview.html "Twitter Emoji \(Twemoji\)") - [FontAwesome icons emoji](http://fortawesome.github.io/Font-Awesome/icons/ "FontAwesome icons emoji") ##### 流程图参考 (Flowchart reference) [http://adrai.github.io/flowchart.js/](http://adrai.github.io/flowchart.js/) ##### 时序图参考 (SequenceDiagram reference) [http://bramp.github.io/js-sequence-diagrams/](http://bramp.github.io/js-sequence-diagrams/) ##### TeX/LaTeX reference [http://meta.wikimedia.org/wiki/Help:Formula](http://meta.wikimedia.org/wiki/Help:Formula) ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/plugins/html-entities-dialog/html-entities-dialog.js ================================================ /*! * HTML entities dialog plugin for Editor.md * * @file html-entities-dialog.js * @author pandao * @version 1.2.0 * @updateTime 2015-03-08 * {@link https://github.com/pandao/editor.md} * @license MIT */ (function() { var factory = function (exports) { var $ = jQuery; var pluginName = "html-entities-dialog"; var selecteds = []; var entitiesData = []; exports.fn.htmlEntitiesDialog = function() { var _this = this; var cm = this.cm; var lang = _this.lang; var settings = _this.settings; var path = settings.pluginPath + pluginName + "/"; var editor = this.editor; var cursor = cm.getCursor(); var selection = cm.getSelection(); var classPrefix = _this.classPrefix; var dialogName = classPrefix + "dialog-" + pluginName, dialog; var dialogLang = lang.dialog.htmlEntities; var dialogContent = [ '
                  ', '
                  ', '
                  ', '
                  ', ].join("\r\n"); cm.focus(); if (editor.find("." + dialogName).length > 0) { dialog = editor.find("." + dialogName); selecteds = []; dialog.find("a").removeClass("selected"); this.dialogShowMask(dialog); this.dialogLockScreen(); dialog.show(); } else { dialog = this.createDialog({ name : dialogName, title : dialogLang.title, width : 800, height : 475, mask : settings.dialogShowMask, drag : settings.dialogDraggable, content : dialogContent, lockScreen : settings.dialogLockScreen, maskStyle : { opacity : settings.dialogMaskOpacity, backgroundColor : settings.dialogMaskBgColor }, buttons : { enter : [lang.buttons.enter, function() { cm.replaceSelection(selecteds.join(" ")); this.hide().lockScreen(false).hideMask(); return false; }], cancel : [lang.buttons.cancel, function() { this.hide().lockScreen(false).hideMask(); return false; }] } }); } var table = dialog.find("." + classPrefix + "grid-table"); var drawTable = function() { if (entitiesData.length < 1) return ; var rowNumber = 20; var pageTotal = Math.ceil(entitiesData.length / rowNumber); table.html(""); for (var i = 0; i < pageTotal; i++) { var row = "
                  "; for (var x = 0; x < rowNumber; x++) { var entity = entitiesData[(i * rowNumber) + x]; if (typeof entity !== "undefined") { var name = entity.name.replace("&", "&"); row += "" + name + ""; } } row += "
                  "; table.append(row); } dialog.find("." + classPrefix + "html-entity-btn").bind(exports.mouseOrTouch("click", "touchend"), function() { $(this).toggleClass("selected"); if ($(this).hasClass("selected")) { selecteds.push($(this).attr("value")); } }); }; if (entitiesData.length < 1) { if (typeof (dialog.loading) == "function") dialog.loading(true); $.getJSON(path + pluginName.replace("-dialog", "") + ".json", function(json) { if (typeof (dialog.loading) == "function") dialog.loading(false); entitiesData = json; drawTable(); }); } else { drawTable(); } }; }; // CommonJS/Node.js if (typeof require === "function" && typeof exports === "object" && typeof module === "object") { module.exports = factory; } else if (typeof define === "function") // AMD/CMD/Sea.js { if (define.amd) { // for Require.js define(["editormd"], function(editormd) { factory(editormd); }); } else { // for Sea.js define(function(require) { var editormd = require("./../../editormd"); factory(editormd); }); } } else { factory(window.editormd); } })(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/plugins/html-entities-dialog/html-entities.json ================================================ [ { "name" : "&#64;", "description":"at symbol" }, { "name":"&copy;", "description":"copyright symbol" }, { "name":"&reg;", "description":"registered symbol" }, { "name":"&trade;", "description":"trademark symbol" }, { "name":"&hearts;", "description":"heart" }, { "name":"&nbsp;", "description":"Inserts a non-breaking blank space" }, { "name":"&amp;", "description":"Ampersand" }, { "name":"&#36;", "description":"dollar symbol" }, { "name":"&cent;", "description":"Cent symbol" }, { "name":"&pound;", "description":"Pound" }, { "name":"&yen;", "description":"Yen" }, { "name":"&euro;", "description":"Euro symbol" }, { "name":"&quot;", "description":"quotation mark" }, { "name":"&ldquo;", "description":"Opening Double Quotes " }, { "name":"&rdquo;", "description":"Closing Double Quotes " }, { "name":"&lsquo;", "description":"Opening Single Quote Mark " }, { "name":"&rsquo;", "description":"Closing Single Quote Mark " }, { "name":"&laquo;", "description":"angle quotation mark (left)" }, { "name":"&raquo;", "description":"angle quotation mark (right)" }, { "name":"&lsaquo;", "description":"single left angle quotation" }, { "name":"&rsaquo;", "description":"single right angle quotation" }, { "name":"&sect;", "description":"Section Symbol" }, { "name":"&micro;", "description":"micro sign" }, { "name":"&para;", "description":"Paragraph symbol" }, { "name":"&bull;", "description":"Big List Dot" }, { "name":"&middot;", "description":"Medium List Dot" }, { "name":"&hellip;", "description":"horizontal ellipsis" }, { "name":"&#124;", "description":"vertical bar" }, { "name":"&brvbar;", "description":"broken vertical bar" }, { "name":"&ndash;", "description":"en-dash" }, { "name":"&mdash;", "description":"em-dash" }, { "name":"&curren;", "description":"Generic currency symbol" }, { "name":"&#33;", "description":"exclamation point" }, { "name":"&#35;", "description":"number sign" }, { "name":"&#39;", "description":"single quote" }, { "name":"&#40;", "description":"" }, { "name":"&#41;", "description":"" }, { "name":"&#42;", "description":"asterisk" }, { "name":"&#43;", "description":"plus sign" }, { "name":"&#44;", "description":"comma" }, { "name":"&#45;", "description":"minus sign - hyphen" }, { "name":"&#46;", "description":"period" }, { "name":"&#47;", "description":"slash" }, { "name":"&#48;", "description":"0" }, { "name":"&#49;", "description":"1" }, { "name":"&#50;", "description":"2" }, { "name":"&#51;", "description":"3" }, { "name":"&#52;", "description":"4" }, { "name":"&#53;", "description":"5" }, { "name":"&#54;", "description":"6" }, { "name":"&#55;", "description":"7" }, { "name":"&#56;", "description":"8" }, { "name":"&#57;", "description":"9" }, { "name":"&#58;", "description":"colon" }, { "name":"&#59;", "description":"semicolon" }, { "name":"&#61;", "description":"equal sign" }, { "name":"&#63;", "description":"question mark" }, { "name":"&lt;", "description":"Less than" }, { "name":"&gt;", "description":"Greater than" }, { "name":"&le;", "description":"Less than or Equal to" }, { "name":"&ge;", "description":"Greater than or Equal to" }, { "name":"&times;", "description":"Multiplication symbol" }, { "name":"&divide;", "description":"Division symbol" }, { "name":"&minus;", "description":"Minus symbol" }, { "name":"&plusmn;", "description":"Plus/minus symbol" }, { "name":"&ne;", "description":"Not Equal" }, { "name":"&sup1;", "description":"Superscript 1" }, { "name":"&sup2;", "description":"Superscript 2" }, { "name":"&sup3;", "description":"Superscript 3" }, { "name":"&frac12;", "description":"Fraction ½" }, { "name":"&frac14;", "description":"Fraction ¼" }, { "name":"&frac34;", "description":"Fraction ¾" }, { "name":"&permil;", "description":"per mille" }, { "name":"&deg;", "description":"Degree symbol" }, { "name":"&radic;", "description":"square root" }, { "name":"&infin;", "description":"Infinity" }, { "name":"&larr;", "description":"left arrow" }, { "name":"&uarr;", "description":"up arrow" }, { "name":"&rarr;", "description":"right arrow" }, { "name":"&darr;", "description":"down arrow" }, { "name":"&harr;", "description":"left right arrow" }, { "name":"&crarr;", "description":"carriage return arrow" }, { "name":"&lceil;", "description":"left ceiling" }, { "name":"&rceil;", "description":"right ceiling" }, { "name":"&lfloor;", "description":"left floor" }, { "name":"&rfloor;", "description":"right floor" }, { "name":"&spades;", "description":"spade" }, { "name":"&clubs;", "description":"club" }, { "name":"&hearts;", "description":"heart" }, { "name":"&diams;", "description":"diamond" }, { "name":"&loz;", "description":"lozenge" }, { "name":"&dagger;", "description":"dagger" }, { "name":"&Dagger;", "description":"double dagger" }, { "name":"&iexcl;", "description":"inverted exclamation mark" }, { "name":"&iquest;", "description":"inverted question mark" }, { "name":"&#338;", "description":"latin capital letter OE" }, { "name":"&#339;", "description":"latin small letter oe" }, { "name":"&#352;", "description":"latin capital letter S with caron" }, { "name":"&#353;", "description":"latin small letter s with caron" }, { "name":"&#376;", "description":"latin capital letter Y with diaeresis" }, { "name":"&#402;", "description":"latin small f with hook - function" }, { "name":"&not;", "description":"not sign" }, { "name":"&ordf;", "description":"feminine ordinal indicator" }, { "name":"&uml;", "description":"spacing diaeresis - umlaut" }, { "name":"&macr;", "description":"spacing macron - overline" }, { "name":"&acute;", "description":"acute accent - spacing acute" }, { "name":"&Agrave;", "description":"latin capital letter A with grave" }, { "name":"&Aacute;", "description":"latin capital letter A with acute" }, { "name":"&Acirc;", "description":"latin capital letter A with circumflex" }, { "name":"&Atilde;", "description":"latin capital letter A with tilde" }, { "name":"&Auml;", "description":"latin capital letter A with diaeresis" }, { "name":"&Aring;", "description":"latin capital letter A with ring above" }, { "name":"&AElig;", "description":"latin capital letter AE" }, { "name":"&Ccedil;", "description":"latin capital letter C with cedilla" }, { "name":"&Egrave;", "description":"latin capital letter E with grave" }, { "name":"&Eacute;", "description":"latin capital letter E with acute" }, { "name":"&Ecirc;", "description":"latin capital letter E with circumflex" }, { "name":"&Euml;", "description":"latin capital letter E with diaeresis" }, { "name":"&Igrave;", "description":"latin capital letter I with grave" }, { "name":"&Iacute;", "description":"latin capital letter I with acute" }, { "name":"&Icirc;", "description":"latin capital letter I with circumflex" }, { "name":"&Iuml;", "description":"latin capital letter I with diaeresis" }, { "name":"&ETH;", "description":"latin capital letter ETH" }, { "name":"&Ntilde;", "description":"latin capital letter N with tilde" }, { "name":"&Ograve;", "description":"latin capital letter O with grave" }, { "name":"&Oacute;", "description":"latin capital letter O with acute" }, { "name":"&Ocirc;", "description":"latin capital letter O with circumflex" }, { "name":"&Otilde;", "description":"latin capital letter O with tilde" }, { "name":"&Ouml;", "description":"latin capital letter O with diaeresis" }, { "name":"&times;", "description":"multiplication sign" }, { "name":"&Oslash;", "description":"latin capital letter O with slash" }, { "name":"&Ugrave;", "description":"latin capital letter U with grave" }, { "name":"&Uacute;", "description":"latin capital letter U with acute" }, { "name":"&Ucirc;", "description":"latin capital letter U with circumflex" }, { "name":"&Uuml;", "description":"latin capital letter U with diaeresis" }, { "name":"&Yacute;", "description":"latin capital letter Y with acute" }, { "name":"&THORN;", "description":"latin capital letter THORN" }, { "name":"&szlig;", "description":"latin small letter sharp s - ess-zed" }, { "name":"&eth;", "description":"latin capital letter eth" }, { "name":"&ntilde;", "description":"latin capital letter n with tilde" }, { "name":"&ograve;", "description":"latin capital letter o with grave" }, { "name":"&oacute;", "description":"latin capital letter o with acute" }, { "name":"&ocirc;", "description":"latin capital letter o with circumflex" }, { "name":"&otilde;", "description":"latin capital letter o with tilde" }, { "name":"&ouml;", "description":"latin capital letter o with diaeresis" }, { "name":"&times;", "description":"multiplication sign" }, { "name":"&oslash;", "description":"latin capital letter o with slash" }, { "name":"&ugrave;", "description":"latin capital letter u with grave" }, { "name":"&uacute;", "description":"latin capital letter u with acute" }, { "name":"&ucirc;", "description":"latin capital letter u with circumflex" }, { "name":"&uuml;", "description":"latin capital letter u with diaeresis" }, { "name":"&yacute;", "description":"latin capital letter y with acute" }, { "name":"&thorn;", "description":"latin capital letter thorn" }, { "name":"&yuml;", "description":"latin small letter y with diaeresis" }, { "name":"&agrave;", "description":"latin capital letter a with grave" }, { "name":"&aacute;", "description":"latin capital letter a with acute" }, { "name":"&acirc;", "description":"latin capital letter a with circumflex" }, { "name":"&atilde;", "description":"latin capital letter a with tilde" }, { "name":"&auml;", "description":"latin capital letter a with diaeresis" }, { "name":"&aring;", "description":"latin capital letter a with ring above" }, { "name":"&aelig;", "description":"latin capital letter ae" }, { "name":"&ccedil;", "description":"latin capital letter c with cedilla" }, { "name":"&egrave;", "description":"latin capital letter e with grave" }, { "name":"&eacute;", "description":"latin capital letter e with acute" }, { "name":"&ecirc;", "description":"latin capital letter e with circumflex" }, { "name":"&euml;", "description":"latin capital letter e with diaeresis" }, { "name":"&igrave;", "description":"latin capital letter i with grave" }, { "name":"&Iacute;", "description":"latin capital letter i with acute" }, { "name":"&icirc;", "description":"latin capital letter i with circumflex" }, { "name":"&iuml;", "description":"latin capital letter i with diaeresis" }, { "name":"&#65;", "description":"A" }, { "name":"&#66;", "description":"B" }, { "name":"&#67;", "description":"C" }, { "name":"&#68;", "description":"D" }, { "name":"&#69;", "description":"E" }, { "name":"&#70;", "description":"F" }, { "name":"&#71;", "description":"G" }, { "name":"&#72;", "description":"H" }, { "name":"&#73;", "description":"I" }, { "name":"&#74;", "description":"J" }, { "name":"&#75;", "description":"K" }, { "name":"&#76;", "description":"L" }, { "name":"&#77;", "description":"M" }, { "name":"&#78;", "description":"N" }, { "name":"&#79;", "description":"O" }, { "name":"&#80;", "description":"P" }, { "name":"&#81;", "description":"Q" }, { "name":"&#82;", "description":"R" }, { "name":"&#83;", "description":"S" }, { "name":"&#84;", "description":"T" }, { "name":"&#85;", "description":"U" }, { "name":"&#86;", "description":"V" }, { "name":"&#87;", "description":"W" }, { "name":"&#88;", "description":"X" }, { "name":"&#89;", "description":"Y" }, { "name":"&#90;", "description":"Z" }, { "name":"&#91;", "description":"opening bracket" }, { "name":"&#92;", "description":"backslash" }, { "name":"&#93;", "description":"closing bracket" }, { "name":"&#94;", "description":"caret - circumflex" }, { "name":"&#95;", "description":"underscore" }, { "name":"&#96;", "description":"grave accent" }, { "name":"&#97;", "description":"a" }, { "name":"&#98;", "description":"b" }, { "name":"&#99;", "description":"c" }, { "name":"&#100;", "description":"d" }, { "name":"&#101;", "description":"e" }, { "name":"&#102;", "description":"f" }, { "name":"&#103;", "description":"g" }, { "name":"&#104;", "description":"h" }, { "name":"&#105;", "description":"i" }, { "name":"&#106;", "description":"j" }, { "name":"&#107;", "description":"k" }, { "name":"&#108;", "description":"l" }, { "name":"&#109;", "description":"m" }, { "name":"&#110;", "description":"n" }, { "name":"&#111;", "description":"o" }, { "name":"&#112;", "description":"p" }, { "name":"&#113;", "description":"q" }, { "name":"&#114;", "description":"r" }, { "name":"&#115;", "description":"s" }, { "name":"&#116;", "description":"t" }, { "name":"&#117;", "description":"u" }, { "name":"&#118;", "description":"v" }, { "name":"&#119;", "description":"w" }, { "name":"&#120;", "description":"x" }, { "name":"&#121;", "description":"y" }, { "name":"&#122;", "description":"z" }, { "name":"&#123;", "description":"opening brace" }, { "name":"&#124;", "description":"vertical bar" }, { "name":"&#125;", "description":"closing brace" }, { "name":"&#126;", "description":"equivalency sign - tilde" } ] ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/plugins/image-dialog/image-dialog.js ================================================ /*! * Image (upload) dialog plugin for Editor.md * * @file image-dialog.js * @author pandao * @version 1.3.4 * @updateTime 2015-06-09 * {@link https://github.com/pandao/editor.md} * @license MIT */ (function() { var factory = function (exports) { var pluginName = "image-dialog"; exports.fn.imageDialog = function() { var _this = this; var cm = this.cm; var lang = this.lang; var editor = this.editor; var settings = this.settings; var cursor = cm.getCursor(); var selection = cm.getSelection(); var imageLang = lang.dialog.image; var classPrefix = this.classPrefix; var iframeName = classPrefix + "image-iframe"; var dialogName = classPrefix + pluginName, dialog; cm.focus(); var loading = function(show) { var _loading = dialog.find("." + classPrefix + "dialog-mask"); _loading[(show) ? "show" : "hide"](); }; if (editor.find("." + dialogName).length < 1) { var guid = (new Date).getTime(); var action = settings.imageUploadURL + (settings.imageUploadURL.indexOf("?") >= 0 ? "&" : "?") + "guid=" + guid; if (settings.crossDomainUpload) { action += "&callback=" + settings.uploadCallbackURL + "&dialog_id=editormd-image-dialog-" + guid; } var dialogContent = ( (settings.imageUpload) ? "
                  " : "
                  " ) + ( (settings.imageUpload) ? "" : "" ) + "" + "" + (function(){ return (settings.imageUpload) ? "
                  " + "" + "" + "
                  " : ""; })() + "
                  " + "" + "" + "
                  " + "" + "" + "
                  " + ( (settings.imageUpload) ? "" : "
                  "); //var imageFooterHTML = ""; dialog = this.createDialog({ title : imageLang.title, width : (settings.imageUpload) ? 465 : 380, height : 254, name : dialogName, content : dialogContent, mask : settings.dialogShowMask, drag : settings.dialogDraggable, lockScreen : settings.dialogLockScreen, maskStyle : { opacity : settings.dialogMaskOpacity, backgroundColor : settings.dialogMaskBgColor }, buttons : { enter : [lang.buttons.enter, function() { var url = this.find("[data-url]").val(); var alt = this.find("[data-alt]").val(); var link = this.find("[data-link]").val(); if (url === "") { alert(imageLang.imageURLEmpty); return false; } var altAttr = (alt !== "") ? " \"" + alt + "\"" : ""; if (link === "" || link === "http://") { cm.replaceSelection("![" + alt + "](" + url + altAttr + ")"); } else { cm.replaceSelection("[![" + alt + "](" + url + altAttr + ")](" + link + altAttr + ")"); } if (alt === "") { cm.setCursor(cursor.line, cursor.ch + 2); } this.hide().lockScreen(false).hideMask(); return false; }], cancel : [lang.buttons.cancel, function() { this.hide().lockScreen(false).hideMask(); return false; }] } }); dialog.attr("id", classPrefix + "image-dialog-" + guid); if (!settings.imageUpload) { return ; } var fileInput = dialog.find("[name=\"" + classPrefix + "image-file\"]"); fileInput.bind("change", function() { var fileName = fileInput.val(); var isImage = new RegExp("(\\.(" + settings.imageFormats.join("|") + "))$"); // /(\.(webp|jpg|jpeg|gif|bmp|png))$/ if (fileName === "") { alert(imageLang.uploadFileEmpty); return false; } if (!isImage.test(fileName)) { alert(imageLang.formatNotAllowed + settings.imageFormats.join(", ")); return false; } loading(true); var submitHandler = function() { var uploadIframe = document.getElementById(iframeName); uploadIframe.onload = function() { loading(false); var body = (uploadIframe.contentWindow ? uploadIframe.contentWindow : uploadIframe.contentDocument).document.body; var json = (body.innerText) ? body.innerText : ( (body.textContent) ? body.textContent : null); json = json.substr(json.indexOf('{')); json = (typeof JSON.parse !== "undefined") ? JSON.parse(json) : eval("(" + json + ")"); if (json.success === 1) { dialog.find("[data-url]").val(json.url); } else { alert(json.message); } return false; }; }; dialog.find("[type=\"submit\"]").bind("click", submitHandler).trigger("click"); }); } dialog = editor.find("." + dialogName); dialog.find("[type=\"text\"]").val(""); dialog.find("[type=\"file\"]").val(""); dialog.find("[data-link]").val("http://"); this.dialogShowMask(dialog); this.dialogLockScreen(); dialog.show(); }; }; // CommonJS/Node.js if (typeof require === "function" && typeof exports === "object" && typeof module === "object") { module.exports = factory; } else if (typeof define === "function") // AMD/CMD/Sea.js { if (define.amd) { // for Require.js define(["editormd"], function(editormd) { factory(editormd); }); } else { // for Sea.js define(function(require) { var editormd = require("./../../editormd"); factory(editormd); }); } } else { factory(window.editormd); } })(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/plugins/link-dialog/link-dialog.js ================================================ /*! * Link dialog plugin for Editor.md * * @file link-dialog.js * @author pandao * @version 1.2.1 * @updateTime 2015-06-09 * {@link https://github.com/pandao/editor.md} * @license MIT */ (function() { var factory = function (exports) { var pluginName = "link-dialog"; exports.fn.linkDialog = function() { var _this = this; var cm = this.cm; var editor = this.editor; var settings = this.settings; var selection = cm.getSelection(); var lang = this.lang; var linkLang = lang.dialog.link; var classPrefix = this.classPrefix; var dialogName = classPrefix + pluginName, dialog; cm.focus(); if (editor.find("." + dialogName).length > 0) { dialog = editor.find("." + dialogName); dialog.find("[data-url]").val("http://"); dialog.find("[data-title]").val(selection); this.dialogShowMask(dialog); this.dialogLockScreen(); dialog.show(); } else { var dialogHTML = "
                  " + "" + "" + "
                  " + "" + "" + "
                  " + "
                  "; dialog = this.createDialog({ title : linkLang.title, width : 380, height : 211, content : dialogHTML, mask : settings.dialogShowMask, drag : settings.dialogDraggable, lockScreen : settings.dialogLockScreen, maskStyle : { opacity : settings.dialogMaskOpacity, backgroundColor : settings.dialogMaskBgColor }, buttons : { enter : [lang.buttons.enter, function() { var url = this.find("[data-url]").val(); var title = this.find("[data-title]").val(); if (url === "http://" || url === "") { alert(linkLang.urlEmpty); return false; } /*if (title === "") { alert(linkLang.titleEmpty); return false; }*/ var str = "[" + title + "](" + url + " \"" + title + "\")"; if (title == "") { str = "[" + url + "](" + url + ")"; } cm.replaceSelection(str); this.hide().lockScreen(false).hideMask(); return false; }], cancel : [lang.buttons.cancel, function() { this.hide().lockScreen(false).hideMask(); return false; }] } }); } }; }; // CommonJS/Node.js if (typeof require === "function" && typeof exports === "object" && typeof module === "object") { module.exports = factory; } else if (typeof define === "function") // AMD/CMD/Sea.js { if (define.amd) { // for Require.js define(["editormd"], function(editormd) { factory(editormd); }); } else { // for Sea.js define(function(require) { var editormd = require("./../../editormd"); factory(editormd); }); } } else { factory(window.editormd); } })(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/plugins/plugin-template.js ================================================ /*! * Link dialog plugin for Editor.md * * @file link-dialog.js * @author pandao * @version 1.2.0 * @updateTime 2015-03-07 * {@link https://github.com/pandao/editor.md} * @license MIT */ (function() { var factory = function (exports) { var $ = jQuery; // if using module loader(Require.js/Sea.js). var langs = { "zh-cn" : { toolbar : { table : "表格" }, dialog : { table : { title : "添加表格", cellsLabel : "单元格数", alignLabel : "对齐方式", rows : "行数", cols : "列数", aligns : ["默认", "左对齐", "居中对齐", "右对齐"] } } }, "zh-tw" : { toolbar : { table : "添加表格" }, dialog : { table : { title : "添加表格", cellsLabel : "單元格數", alignLabel : "對齊方式", rows : "行數", cols : "列數", aligns : ["默認", "左對齊", "居中對齊", "右對齊"] } } }, "en" : { toolbar : { table : "Tables" }, dialog : { table : { title : "Tables", cellsLabel : "Cells", alignLabel : "Align", rows : "Rows", cols : "Cols", aligns : ["Default", "Left align", "Center align", "Right align"] } } } }; exports.fn.htmlEntities = function() { /* var _this = this; // this == the current instance object of Editor.md var lang = _this.lang; var settings = _this.settings; var editor = this.editor; var cursor = cm.getCursor(); var selection = cm.getSelection(); var classPrefix = this.classPrefix; $.extend(true, this.lang, langs[this.lang.name]); // l18n this.setToolbar(); cm.focus(); */ //.... }; }; // CommonJS/Node.js if (typeof require === "function" && typeof exports === "object" && typeof module === "object") { module.exports = factory; } else if (typeof define === "function") // AMD/CMD/Sea.js { if (define.amd) { // for Require.js define(["editormd"], function(editormd) { factory(editormd); }); } else { // for Sea.js define(function(require) { var editormd = require("./../../editormd"); factory(editormd); }); } } else { factory(window.editormd); } })(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/plugins/preformatted-text-dialog/preformatted-text-dialog.js ================================================ /*! * Preformatted text dialog plugin for Editor.md * * @file preformatted-text-dialog.js * @author pandao * @version 1.2.0 * @updateTime 2015-03-07 * {@link https://github.com/pandao/editor.md} * @license MIT */ (function() { var factory = function (exports) { var cmEditor; var pluginName = "preformatted-text-dialog"; exports.fn.preformattedTextDialog = function() { var _this = this; var cm = this.cm; var lang = this.lang; var editor = this.editor; var settings = this.settings; var cursor = cm.getCursor(); var selection = cm.getSelection(); var classPrefix = this.classPrefix; var dialogLang = lang.dialog.preformattedText; var dialogName = classPrefix + pluginName, dialog; cm.focus(); if (editor.find("." + dialogName).length > 0) { dialog = editor.find("." + dialogName); dialog.find("textarea").val(selection); this.dialogShowMask(dialog); this.dialogLockScreen(); dialog.show(); } else { var dialogContent = ""; dialog = this.createDialog({ name : dialogName, title : dialogLang.title, width : 780, height : 540, mask : settings.dialogShowMask, drag : settings.dialogDraggable, content : dialogContent, lockScreen : settings.dialogLockScreen, maskStyle : { opacity : settings.dialogMaskOpacity, backgroundColor : settings.dialogMaskBgColor }, buttons : { enter : [lang.buttons.enter, function() { var codeTexts = this.find("textarea").val(); if (codeTexts === "") { alert(dialogLang.emptyAlert); return false; } codeTexts = codeTexts.split("\n"); for (var i in codeTexts) { codeTexts[i] = " " + codeTexts[i]; } codeTexts = codeTexts.join("\n"); if (cursor.ch !== 0) { codeTexts = "\r\n\r\n" + codeTexts; } cm.replaceSelection(codeTexts); this.hide().lockScreen(false).hideMask(); return false; }], cancel : [lang.buttons.cancel, function() { this.hide().lockScreen(false).hideMask(); return false; }] } }); } var cmConfig = { mode : "text/html", theme : settings.theme, tabSize : 4, autofocus : true, autoCloseTags : true, indentUnit : 4, lineNumbers : true, lineWrapping : true, extraKeys : {"Ctrl-Q": function(cm){ cm.foldCode(cm.getCursor()); }}, foldGutter : true, gutters : ["CodeMirror-linenumbers", "CodeMirror-foldgutter"], matchBrackets : true, indentWithTabs : true, styleActiveLine : true, styleSelectedText : true, autoCloseBrackets : true, showTrailingSpace : true, highlightSelectionMatches : true }; var textarea = dialog.find("textarea"); var cmObj = dialog.find(".CodeMirror"); if (dialog.find(".CodeMirror").length < 1) { cmEditor = exports.$CodeMirror.fromTextArea(textarea[0], cmConfig); cmObj = dialog.find(".CodeMirror"); cmObj.css({ "float" : "none", margin : "0 0 5px", border : "1px solid #ddd", fontSize : settings.fontSize, width : "100%", height : "410px" }); cmEditor.on("change", function(cm) { textarea.val(cm.getValue()); }); } else { cmEditor.setValue(cm.getSelection()); } }; }; // CommonJS/Node.js if (typeof require === "function" && typeof exports === "object" && typeof module === "object") { module.exports = factory; } else if (typeof define === "function") // AMD/CMD/Sea.js { if (define.amd) { // for Require.js define(["editormd"], function(editormd) { factory(editormd); }); } else { // for Sea.js define(function(require) { var editormd = require("./../../editormd"); factory(editormd); }); } } else { factory(window.editormd); } })(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/plugins/reference-link-dialog/reference-link-dialog.js ================================================ /*! * Reference link dialog plugin for Editor.md * * @file reference-link-dialog.js * @author pandao * @version 1.2.1 * @updateTime 2015-06-09 * {@link https://github.com/pandao/editor.md} * @license MIT */ (function() { var factory = function (exports) { var pluginName = "reference-link-dialog"; var ReLinkId = 1; exports.fn.referenceLinkDialog = function() { var _this = this; var cm = this.cm; var lang = this.lang; var editor = this.editor; var settings = this.settings; var cursor = cm.getCursor(); var selection = cm.getSelection(); var dialogLang = lang.dialog.referenceLink; var classPrefix = this.classPrefix; var dialogName = classPrefix + pluginName, dialog; cm.focus(); if (editor.find("." + dialogName).length < 1) { var dialogHTML = "
                  " + "" + "" + "
                  " + "" + "" + "
                  " + "" + "" + "
                  " + "" + "" + "
                  " + "
                  "; dialog = this.createDialog({ name : dialogName, title : dialogLang.title, width : 380, height : 296, content : dialogHTML, mask : settings.dialogShowMask, drag : settings.dialogDraggable, lockScreen : settings.dialogLockScreen, maskStyle : { opacity : settings.dialogMaskOpacity, backgroundColor : settings.dialogMaskBgColor }, buttons : { enter : [lang.buttons.enter, function() { var name = this.find("[data-name]").val(); var url = this.find("[data-url]").val(); var rid = this.find("[data-url-id]").val(); var title = this.find("[data-title]").val(); if (name === "") { alert(dialogLang.nameEmpty); return false; } if (rid === "") { alert(dialogLang.idEmpty); return false; } if (url === "http://" || url === "") { alert(dialogLang.urlEmpty); return false; } //cm.replaceSelection("[" + title + "][" + name + "]\n[" + name + "]: " + url + ""); cm.replaceSelection("[" + name + "][" + rid + "]"); if (selection === "") { cm.setCursor(cursor.line, cursor.ch + 1); } title = (title === "") ? "" : " \"" + title + "\""; cm.setValue(cm.getValue() + "\n[" + rid + "]: " + url + title + ""); this.hide().lockScreen(false).hideMask(); return false; }], cancel : [lang.buttons.cancel, function() { this.hide().lockScreen(false).hideMask(); return false; }] } }); } dialog = editor.find("." + dialogName); dialog.find("[data-name]").val("[" + ReLinkId + "]"); dialog.find("[data-url-id]").val(""); dialog.find("[data-url]").val("http://"); dialog.find("[data-title]").val(selection); this.dialogShowMask(dialog); this.dialogLockScreen(); dialog.show(); ReLinkId++; }; }; // CommonJS/Node.js if (typeof require === "function" && typeof exports === "object" && typeof module === "object") { module.exports = factory; } else if (typeof define === "function") // AMD/CMD/Sea.js { if (define.amd) { // for Require.js define(["editormd"], function(editormd) { factory(editormd); }); } else { // for Sea.js define(function(require) { var editormd = require("./../../editormd"); factory(editormd); }); } } else { factory(window.editormd); } })(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/plugins/table-dialog/table-dialog.js ================================================ /*! * Table dialog plugin for Editor.md * * @file table-dialog.js * @author pandao * @version 1.2.1 * @updateTime 2015-06-09 * {@link https://github.com/pandao/editor.md} * @license MIT */ (function() { var factory = function (exports) { var $ = jQuery; var pluginName = "table-dialog"; var langs = { "zh-cn" : { toolbar : { table : "表格" }, dialog : { table : { title : "添加表格", cellsLabel : "单元格数", alignLabel : "对齐方式", rows : "行数", cols : "列数", aligns : ["默认", "左对齐", "居中对齐", "右对齐"] } } }, "zh-tw" : { toolbar : { table : "添加表格" }, dialog : { table : { title : "添加表格", cellsLabel : "單元格數", alignLabel : "對齊方式", rows : "行數", cols : "列數", aligns : ["默認", "左對齊", "居中對齊", "右對齊"] } } }, "en" : { toolbar : { table : "Tables" }, dialog : { table : { title : "Tables", cellsLabel : "Cells", alignLabel : "Align", rows : "Rows", cols : "Cols", aligns : ["Default", "Left align", "Center align", "Right align"] } } } }; exports.fn.tableDialog = function() { var _this = this; var cm = this.cm; var editor = this.editor; var settings = this.settings; var path = settings.path + "../plugins/" + pluginName +"/"; var classPrefix = this.classPrefix; var dialogName = classPrefix + pluginName, dialog; $.extend(true, this.lang, langs[this.lang.name]); this.setToolbar(); var lang = this.lang; var dialogLang = lang.dialog.table; var dialogContent = [ "
                  ", "", dialogLang.rows + "   ", dialogLang.cols + "
                  ", "", "
                  ", "
                  " ].join("\n"); if (editor.find("." + dialogName).length > 0) { dialog = editor.find("." + dialogName); this.dialogShowMask(dialog); this.dialogLockScreen(); dialog.show(); } else { dialog = this.createDialog({ name : dialogName, title : dialogLang.title, width : 360, height : 226, mask : settings.dialogShowMask, drag : settings.dialogDraggable, content : dialogContent, lockScreen : settings.dialogLockScreen, maskStyle : { opacity : settings.dialogMaskOpacity, backgroundColor : settings.dialogMaskBgColor }, buttons : { enter : [lang.buttons.enter, function() { var rows = parseInt(this.find("[data-rows]").val()); var cols = parseInt(this.find("[data-cols]").val()); var align = this.find("[name=\"table-align\"]:checked").val(); var table = ""; var hrLine = "------------"; var alignSign = { _default : hrLine, left : ":" + hrLine, center : ":" + hrLine + ":", right : hrLine + ":" }; if ( rows > 1 && cols > 0) { for (var r = 0, len = rows; r < len; r++) { var row = []; var head = []; for (var c = 0, len2 = cols; c < len2; c++) { if (r === 1) { head.push(alignSign[align]); } row.push(" "); } if (r === 1) { table += "| " + head.join(" | ") + " |" + "\n"; } table += "| " + row.join( (cols === 1) ? "" : " | " ) + " |" + "\n"; } } cm.replaceSelection(table); this.hide().lockScreen(false).hideMask(); return false; }], cancel : [lang.buttons.cancel, function() { this.hide().lockScreen(false).hideMask(); return false; }] } }); } var faBtns = dialog.find(".fa-btns"); if (faBtns.html() === "") { var icons = ["align-justify", "align-left", "align-center", "align-right"]; var _lang = dialogLang.aligns; var values = ["_default", "left", "center", "right"]; for (var i = 0, len = icons.length; i < len; i++) { var checked = (i === 0) ? " checked=\"checked\"" : ""; var btn = ""; faBtns.append(btn); } } }; }; // CommonJS/Node.js if (typeof require === "function" && typeof exports === "object" && typeof module === "object") { module.exports = factory; } else if (typeof define === "function") // AMD/CMD/Sea.js { if (define.amd) { // for Require.js define(["editormd"], function(editormd) { factory(editormd); }); } else { // for Sea.js define(function(require) { var editormd = require("./../../editormd"); factory(editormd); }); } } else { factory(window.editormd); } })(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/plugins/test-plugin/test-plugin.js ================================================ /*! * Test plugin for Editor.md * * @file test-plugin.js * @author pandao * @version 1.2.0 * @updateTime 2015-03-07 * {@link https://github.com/pandao/editor.md} * @license MIT */ (function() { var factory = function (exports) { var $ = jQuery; // if using module loader(Require.js/Sea.js). exports.testPlugin = function(){ alert("testPlugin"); }; exports.fn.testPluginMethodA = function() { /* var _this = this; // this == the current instance object of Editor.md var lang = _this.lang; var settings = _this.settings; var editor = this.editor; var cursor = cm.getCursor(); var selection = cm.getSelection(); var classPrefix = this.classPrefix; cm.focus(); */ //.... alert("testPluginMethodA"); }; }; // CommonJS/Node.js if (typeof require === "function" && typeof exports === "object" && typeof module === "object") { module.exports = factory; } else if (typeof define === "function") // AMD/CMD/Sea.js { if (define.amd) { // for Require.js define(["editormd"], function(editormd) { factory(editormd); }); } else { // for Sea.js define(function(require) { var editormd = require("./../../editormd"); factory(editormd); }); } } else { factory(window.editormd); } })(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/scss/editormd.codemirror.scss ================================================ @charset "UTF-8"; .editormd .CodeMirror, #{$prefix}preview { display: inline-block; width: 50%; height: 100%; vertical-align: top; @include box-sizing(border-box); margin: 0; } #{$prefix}preview { position: absolute; top: 35px; right: 0; right: -1px\0; overflow: auto; line-height: 1.6; display: none; background: #fff; } .editormd { .CodeMirror { z-index: 10; float: left; border-right: 1px solid $borderColor; font-size: 14px; font-family: "YaHei Consolas Hybrid", Consolas, "微软雅黑", "Meiryo UI", "Malgun Gothic", "Segoe UI", "Trebuchet MS", Helvetica, "Monaco", courier, monospace; line-height: 1.6; margin-top: 35px; pre { font-size: 14px; padding: 0 12px; } } .CodeMirror-linenumbers { padding: 0 5px; } .CodeMirror-selected { background: #70B7FF; } .CodeMirror-focused .CodeMirror-selected { background: #70B7FF; } .CodeMirror, .CodeMirror-scroll, #{$prefix}preview { -webkit-overflow-scrolling : touch; } .styled-background { background-color: #ff7; } .CodeMirror-focused .cm-matchhighlight { background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAFklEQVQI12NgYGBgkKzc8x9CMDAwAAAmhwSbidEoSQAAAABJRU5ErkJggg==); background-position: bottom; background-repeat: repeat-x; } .CodeMirror-empty { //outline: 1px solid #c22; &.CodeMirror-focused { outline: none; } } .CodeMirror pre.CodeMirror-placeholder { color: #999; } .cm-trailingspace { background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAACCAYAAAB/qH1jAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3QUXCToH00Y1UgAAACFJREFUCNdjPMDBUc/AwNDAAAFMTAwMDA0OP34wQgX/AQBYgwYEx4f9lQAAAABJRU5ErkJggg==); background-position: bottom left; background-repeat: repeat-x; } .cm-tab { background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=); background-position: right; background-repeat: no-repeat; } } ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/scss/editormd.dialog.scss ================================================ @charset "UTF-8"; #{$prefix}dialog { color: $color; position: fixed; z-index: 99999; display: none; @include border-radius(3px); @include box-shadow(0 0 10px rgba(0, 0, 0, 0.3)); //@include user-select(none); background: #fff; font-size: 14px; } #{$prefix}dialog-container { position: relative; padding: 20px; line-height: 1.4; h1 { font-size: 24px; margin-bottom: 10px; .fa { color: #2C7EEA; padding-right: 5px; } small { padding-left: 5px; font-weight: normal; font-size: 12px; color: #999; } } select { color: #999; padding: 3px 8px; border: 1px solid $borderColor; } } #{$prefix}dialog-close { position: absolute; top: 12px; right: 15px; font-size: 18px; color: #ccc; @include transition(color 300ms ease-out); &:hover { color: #999; } } #{$prefix}dialog-header { padding: 11px 20px; border-bottom: 1px solid #eee; @include transition(background 300ms ease-out); &:hover { background: #f6f6f6; } } #{$prefix}dialog-title { font-size: 14px; } #{$prefix}dialog-footer { padding: 10px 0 0 0; text-align: right; } #{$prefix}dialog-info { width: 420px; h1 { font-weight: normal; } #{$prefix}dialog-container { padding: 20px 25px 25px; } #{$prefix}dialog-close { top: 10px; right: 10px; } p > a, .hover-link:hover { color: #2196F3; } .hover-link { color: #666; } a { .fa-external-link { display: none; } &:hover { color: #2196F3; .fa-external-link { display: inline-block; } } } } #{$prefix}mask, #{$prefix}container-mask, #{$prefix}dialog-mask { display: none; width: 100%; height: 100%; position: absolute; top: 0; left: 0; } #{$prefix}mask, #{$prefix}dialog-mask-bg { background: #fff; opacity: 0.5; filter: alpha(opacity=50); } #{$prefix}mask { position: fixed; background: #000; @include opacity(0.2); z-index: 99998; } #{$prefix}container-mask, #{$prefix}dialog-mask-con { background: url(../images/loading.gif) no-repeat center center; @include background-size(32px 32px); } #{$prefix}container-mask { z-index: 20; display: block; background-color: #fff; } @media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min-device-pixel-ratio: 2) { #{$prefix}container-mask, #{$prefix}dialog-mask-con { background-image: url(../images/loading@2x.gif); } } @media only screen and (-webkit-min-device-pixel-ratio: 3), only screen and (min-device-pixel-ratio: 3) { #{$prefix}container-mask, #{$prefix}dialog-mask-con { background-image: url(../images/loading@3x.gif); } } #{$prefix}code-block-dialog, #{$prefix}preformatted-text-dialog { textarea { width: 100%; height: 400px; margin-bottom: 6px; overflow: auto; border: 1px solid #eee; background: #fff; padding: 15px; resize: none; } } #{$prefix}code-toolbar { color: #999; font-size: 14px; margin: -5px 0 10px; } ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/scss/editormd.form.scss ================================================ @charset "UTF-8"; // Form #{$prefix}form { color: $color; label { float: left; display: block; width: 75px; text-align: left; padding: 7px 0 15px 5px; margin: 0 0 2px; font-weight: normal; } br { clear: both; } iframe { display: none; } input:focus { outline: 0; } input[type="text"], input[type="number"] { color: #999; padding: 8px; border: 1px solid $borderColor; } input[type="number"] { width: 40px; display: inline-block; padding: 6px 8px; } input[type="text"] { display: inline-block; width: 264px; } .fa-btns { display: inline-block; a { color: #999; padding: 7px 10px 0 0; display: inline-block; text-decoration: none; text-align: center; } .fa { font-size: 1.3em; } label { float: none; display: inline-block; width: auto; text-align: left; padding: 0 0 0 5px; cursor: pointer; } } } #{$prefix}form, #{$prefix}dialog-container, #{$prefix}dialog-footer { input[type="submit"], #{$prefix}btn, button { color: $color; min-width: 75px; cursor: pointer; background: #fff; padding: 7px 10px; border: 1px solid #ddd; @include border-radius(3px); @include transition(background 300ms ease-out); &:hover { background: #eee; } } #{$prefix}btn { padding: 5px 8px 4px\0; } #{$prefix}btn + #{$prefix}btn { margin-left: 8px; } } #{$prefix}file-input { width: 75px; height: 32px; margin-left: 8px; position: relative; display: inline-block; input[type="file"] { width: 75px; height: 32px; opacity: 0; cursor: pointer; background: #000; display: inline-block; position: absolute; top: 0; right: 0; &::-webkit-file-upload-button { visibility: hidden; } } input[type="submit"] { } &:hover input[type="submit"] { background: #eee; } } ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/scss/editormd.grid.scss ================================================ @charset "utf-8"; .editormd-grid-table { width: 99%; display: table; border: 1px solid #ddd; border-collapse: collapse; } .editormd-grid-table-row { width: 100%; display: table-row; a { font-size: 1.4em; width: 5%; height: 36px; color: #999; text-align: center; display: table-cell; vertical-align: middle; border: 1px solid #ddd; text-decoration: none; @include transition(background-color 300ms ease-out, color 100ms ease-in); &.selected { color: #666; background-color: #eee; } &:hover { color: #777; background-color: #f6f6f6; } } } ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/scss/editormd.logo.scss ================================================ @charset "UTF-8"; @import "lib/variables"; @import "lib/prefixes"; @font-face { font-family: 'editormd-logo'; src:url('../fonts/editormd-logo.eot?-5y8q6h'); src:url('.../fonts/editormd-logo.eot?#iefix-5y8q6h') format('embedded-opentype'), url('../fonts/editormd-logo.woff?-5y8q6h') format('woff'), url('../fonts/editormd-logo.ttf?-5y8q6h') format('truetype'), url('../fonts/editormd-logo.svg?-5y8q6h#icomoon') format('svg'); font-weight: normal; font-style: normal; } #{$prefix}logo, #{$prefix}logo-1x, #{$prefix}logo-2x, #{$prefix}logo-3x, #{$prefix}logo-4x, #{$prefix}logo-5x, #{$prefix}logo-6x, #{$prefix}logo-7x, #{$prefix}logo-8x { font-family: 'editormd-logo'; speak: none; font-style: normal; font-weight: normal; font-variant: normal; text-transform: none; font-size: inherit; line-height: 1; display: inline-block; text-rendering: auto; vertical-align: inherit; //Better Font Rendering -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; &:before { content: "\e1987"; /* HTML Entity 󡦇 example: */ } } #{$prefix}logo-1x { font-size: 1em; } #{$prefix}logo-lg { font-size: 1.2em; } #{$prefix}logo-2x { font-size: 2em; } #{$prefix}logo-3x { font-size: 3em; } #{$prefix}logo-4x { font-size: 4em; } #{$prefix}logo-5x { font-size: 5em; } #{$prefix}logo-6x { font-size: 6em; } #{$prefix}logo-7x { font-size: 7em; } #{$prefix}logo-8x { font-size: 8em; } #{$prefix}logo-color { color: $mainColor; } ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/scss/editormd.menu.scss ================================================ @charset "UTF-8"; #{$prefix}menu { margin: 0; padding: 0; list-style: none; > li { margin: 0; padding: 5px 1px; display: inline-block; position: relative; &.divider { display: inline-block; text-indent: -9999px; margin: 0 5px; height: 65%; border-right: 1px solid $borderColor; } > a { outline: 0; color: $color; display: inline-block; min-width: 24px; font-size: 16px; text-decoration: none; text-align: center; @include border-radius(2px); border: 1px solid #fff; @include transition(all 300ms ease-out); &:hover, &.active { border: 1px solid $borderColor; background: #eee; } > .fa { text-align: center; display: block; padding: 5px; } > #{$prefix}bold { padding: 5px 2px; display: inline-block; font-weight: bold; } } &:hover #{$prefix}dropdown-menu { display: block; } } > li + li > a { margin-left: 3px; } } #{$prefix}dropdown-menu { display: none; background: #fff; border: 1px solid $borderColor; width: 148px; list-style: none; position: absolute; top: 33px; left: 0; z-index: 100; @include box-shadow(1px 2px 6px rgba(0, 0, 0, 0.15)); &:before, &:after { width: 0; height: 0; display: block; content: ""; position: absolute; top: -11px; left: 8px; border: 5px solid transparent; } &:before { border-bottom-color: #ccc; } &:after { border-bottom-color: #ffffff; top: -10px; } > li { > a { color: $color; display: block; text-decoration: none; padding: 8px 10px; &:hover { background: #f6f6f6; @include transition(all 300ms ease-out); } } } > li + li { border-top: 1px solid $borderColor; } } ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/scss/editormd.preview.scss ================================================ @charset "UTF-8"; @import "lib/variables"; @import "lib/prefixes"; @import "font-awesome"; @import "editormd.logo"; // github-markdown.css @import "github-markdown"; #{$prefix}preview-container, #{$prefix}html-preview { text-align: left; font-size: 14px; line-height: 1.6; padding: 20px; overflow: auto; width: 100%; background-color: #fff; blockquote { color: $color; border-left: 4px solid $borderColor; padding-left: 20px; margin-left: 0; font-size: 14px; font-style: italic; } p code { margin-left: 5px; margin-right: 4px; } abbr { background: #ffffdd; } hr { height: 1px; border: none; border-top: 1px solid $borderColor; background: none; } code { border: 1px solid $borderColor; background: #f6f6f6; padding: 3px; border-radius: 3px; font-size: 14px; } pre { border: 1px solid $borderColor; background: #f6f6f6; padding: 10px; @include border-radius(3px); code { padding: 0; } } pre, code, kbd { font-family: "YaHei Consolas Hybrid", Consolas, "Meiryo UI", "Malgun Gothic", "Segoe UI", "Trebuchet MS", Helvetica, monospace, monospace; } table thead tr { background-color: #F8F8F8; } .markdown-toc { } .markdown-toc-list { } p#{$prefix}tex { text-align: center; } span#{$prefix}tex { margin: 0 5px; } .emoji { width: 24px; height: 24px; } .katex { font-size: 1.4em; } .sequence-diagram, .flowchart { margin: 0 auto; text-align: center; svg { margin: 0 auto; } text { font-size : 15px !important; font-family: "YaHei Consolas Hybrid", Consolas, "Microsoft YaHei", "Malgun Gothic", "Segoe UI", Helvetica, Arial !important; } } } //Pretty printing styles. Used with prettify.js. @import "prettify"; #{$prefix}preview-container, #{$prefix}html-preview { pre.prettyprint { padding: 10px; border: 1px solid $borderColor; white-space: pre-wrap; word-wrap: break-word; } ol.linenums { color: #999; padding-left: 2.5em; li { list-style-type: decimal; code { border: none; background:none; padding: 0; } } } } #{$prefix}preview-container, #{$prefix}html-preview { #{$prefix}toc-menu { margin: 8px 0 12px 0; display: inline-block; > .markdown-toc { position: relative; @include border-radius(4px); border: 1px solid #ddd; display: inline-block; font-size: 1em; > ul { width : 160%; min-width: 180px; position: absolute; left: -1px; top: -2px; z-index: 100; padding: 0 10px 10px; display: none; background: #fff; border: 1px solid #ddd; @include border-radius(4px); @include box-shadow(0 3px 5px rgba(0, 0, 0, 0.2)); > li ul { width: 100%; min-width: 180px; border: 1px solid #ddd; display: none; background: #fff; @include border-radius(4px); } > li a { color: #666; padding: 6px 10px; display: block; @include transition(background-color 500ms ease-out); &:hover { background-color: #f6f6f6; } } } li { position: relative; > ul { position: absolute; top: 32px; left: 10%; display: none; @include box-shadow(0 3px 5px rgba(0, 0, 0, 0.2)); &:before, &:after { pointer-events: pointer-events; position: absolute; left: 15px; top: -6px; display: block; content: ""; width: 0; height: 0; border: 6px solid transparent; border-width: 0 6px 6px; z-index: 10; } &:before { border-bottom-color: #ccc; } &:after { border-bottom-color: #ffffff; top: -5px; } } } } ul { list-style: none; } a { text-decoration: none; } h1 { font-size: 16px; padding: 5px 0 10px 10px; line-height: 1; border-bottom: 1px solid #eee; .fa { padding-left: 10px; } } .toc-menu-btn { color: #666; min-width: 180px; padding: 5px 10px; border-radius: 4px; display: inline-block; @include transition(background-color 500ms ease-out); &:hover { background-color: #f6f6f6; } .fa { float: right; padding: 3px 0 0 10px; font-size: 1.3em; } } } } .markdown-body { #{$prefix}toc-menu { ul { padding-left: 0; } } .highlight pre, pre { line-height: 1.6; } } hr.editormd-page-break { border: 1px dotted #ccc; font-size: 0; height: 2px; } @media only print { hr.editormd-page-break { background: none; border: none; height: 0; } } #{$prefix}html-preview { textarea { display : none; } hr.editormd-page-break { background: none; border: none; height: 0; } } #{$prefix}preview-close-btn { color: #fff; padding: 4px 6px; font-size: 18px; @include border-radius(500px); display: none; background-color: #ccc; position: absolute; top: 25px; right: 35px; z-index: 19; @include transition(background-color 300ms ease-out); &:hover { background-color: #999; } } .editormd-preview-active { width: 100%; padding: 40px; } ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/scss/editormd.preview.themes.scss ================================================ /* Preview dark theme */ #{$prefix}preview-theme-dark { color: #777; background:#2C2827; #{$prefix}preview-container { color: #888; background-color: #2C2827; //font-family: "Meiryo UI", "Helvetica Neue", "Microsoft YaHei"; pre.prettyprint { border: none; } blockquote { color: #555; padding: 0.5em; background: #222; border-color: #333; } abbr { color: #fff; padding: 1px 3px; @include border-radius(3px); background:#ff9900; } code { color: #fff; border: none; padding: 1px 3px; @include border-radius(3px); background: #5A9600; } table { border: none; } .fa-emoji { color: #B4BF42; } .katex { color: #FEC93F; } } .editormd-toc-menu { > .markdown-toc { background:#fff; border:none; h1 { border-color:#ddd; } } } .markdown-body { h1, h2, hr { border-color: #222; } } pre { color: #999; background-color: #111; background-color: rgba(0,0,0,.4); /* plain text */ .pln { color: #999; } } li.L1, li.L3, li.L5, li.L7, li.L9 { background: none; } [class*=editormd-logo] { color: #2196F3; } .sequence-diagram { text { fill: #fff; } rect, path { color:#fff; fill : #64D1CB; stroke : #64D1CB; } } .flowchart { rect, path { stroke : #A6C6FF; } rect { fill: #A6C6FF; } text { fill: #5879B4; } } } @media screen { #{$prefix}preview-theme-dark { .str { color: #080 } /* string content */ .kwd { color: #ff9900; } /* a keyword */ .com { color: #444444; } /* a comment */ .typ { color: #606 } /* a type name */ .lit { color: #066 } /* a literal value */ /* punctuation, lisp open bracket, lisp close bracket */ .pun, .opn, .clo { color: #660 } .tag { color: #ff9900; } /* a markup tag name */ .atn { color: #6C95F5; } /* a markup attribute name */ .atv { color: #080 } /* a markup attribute value */ .dec, .var { color: #008BA7; } /* a declaration; a variable name */ .fun { color: red } /* a function name */ } } ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/scss/editormd.scss ================================================ @charset "UTF-8"; @import "lib/variables"; @import "lib/prefixes"; .editormd { width: 90%; height: 640px; margin: 0 auto; text-align: left; overflow: hidden; position: relative; margin-bottom: 15px; border: 1px solid $borderColor; font-family: "Meiryo UI", "Microsoft YaHei", "Malgun Gothic", "Segoe UI", "Trebuchet MS", Helvetica, "Monaco", monospace, Tahoma, STXihei, "华文细黑", STHeiti, "Helvetica Neue", "Droid Sans", "wenquanyi micro hei", FreeSans, Arimo, Arial, SimSun, "宋体", Heiti, "黑体", sans-serif; *, *:before, *:after { @include box-sizing(border-box); } a { text-decoration: none; } img { border: none; vertical-align: middle; } > textarea, #{$prefix}html-textarea, #{$prefix}markdown-textarea { width: 0; height: 0; outline: 0; resize:none; } #{$prefix}html-textarea, #{$prefix}markdown-textarea { display : none; } input[type="text"], input[type="button"], input[type="submit"], select, textarea, button { @include appearance(none); } ::-webkit-scrollbar { height: 10px; width: 7px; background: rgba(0, 0, 0, .1); &:hover { background: rgba(0, 0, 0, .2); } } ::-webkit-scrollbar-thumb { background: rgba(0,0,0,0.3); @include border-radius(6px); &:hover { @include box-shadow(inset 1px 1px 1px rgba(0, 0, 0, .25)); background-color: rgba(0, 0, 0, .4); } } } #{$prefix}user-unselect { @include user-select(none); } #{$prefix}toolbar { width: 100%; min-height: 37px; background: #fff; display: none; position: absolute; top: 0; left: 0; z-index: 10; border-bottom: 1px solid $borderColor; } #{$prefix}toolbar-container { padding: 0 8px; min-height: 35px; @include user-select(none); } @import "editormd.menu"; #{$prefix}container { margin: 0; width: 100%; height: 100%; overflow: hidden; padding: 35px 0 0; position: relative; background: #fff; @include box-sizing(border-box); } @import "editormd.dialog"; @import "editormd.grid"; @import "editormd.tab"; @import "editormd.form"; @import "editormd.codemirror"; @import "editormd.preview"; @import "editormd.preview.themes"; #{$prefix}onlyread { #{$prefix}toolbar { display: none; } .CodeMirror { margin-top: 0; } #{$prefix}preview { top: 0; } } #{$prefix}fullscreen { position: fixed; top : 0; left : 0; border: none; margin: 0 auto; } @import "editormd.themes"; ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/scss/editormd.tab.scss ================================================ @charset "utf-8"; .editormd-tab { } .editormd-tab-head { list-style: none; border-bottom: 1px solid #ddd; li { display: inline-block; a { color: #999; display: block; padding: 6px 12px 5px; text-align: center; text-decoration: none; margin-bottom: -1px; border: 1px solid #ddd; @include border-top-left-radius(3px); @include border-top-right-radius(3px); background: #f6f6f6; @include transition(all 300ms ease-out); &:hover { color: #666; background: #eee; } } &.active a { color: #666; background: #fff; border-bottom-color: #fff; } } li + li { margin-left: 3px; } } .editormd-tab-container { } .editormd-tab-box { padding: 20px 0; } ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/scss/editormd.themes.scss ================================================ /* Editor.md Dark theme */ #{$prefix}theme-dark { border-color: #1a1a17; #{$prefix}toolbar { background: #1A1A17; border-color: #1a1a17; } #{$prefix}menu > li > a { color: #777; border-color: #1a1a17; &:hover, &.active { border-color: #333; background: #333; } } #{$prefix}menu > li.divider { border-right: 1px solid #111; } .CodeMirror { border-right: 1px solid rgba(0,0,0,0.1); } } ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/scss/font-awesome.scss ================================================ /*! * Font Awesome 4.3.0 by @davegandy - http://fontawesome.io - @fontawesome * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) */ /* FONT PATH * -------------------------- */ @font-face { font-family: 'FontAwesome'; src: url('../fonts/fontawesome-webfont.eot?v=4.3.0'); src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.3.0') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff2?v=4.3.0') format('woff2'), url('../fonts/fontawesome-webfont.woff?v=4.3.0') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.3.0') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.3.0#fontawesomeregular') format('svg'); font-weight: normal; font-style: normal; } .fa { display: inline-block; font: normal normal normal 14px/1 FontAwesome; font-size: inherit; text-rendering: auto; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; transform: translate(0, 0); } /* makes the font 33% larger relative to the icon container */ .fa-lg { font-size: 1.33333333em; line-height: 0.75em; vertical-align: -15%; } .fa-2x { font-size: 2em; } .fa-3x { font-size: 3em; } .fa-4x { font-size: 4em; } .fa-5x { font-size: 5em; } .fa-fw { width: 1.28571429em; text-align: center; } .fa-ul { padding-left: 0; margin-left: 2.14285714em; list-style-type: none; } .fa-ul > li { position: relative; } .fa-li { position: absolute; left: -2.14285714em; width: 2.14285714em; top: 0.14285714em; text-align: center; } .fa-li.fa-lg { left: -1.85714286em; } .fa-border { padding: .2em .25em .15em; border: solid 0.08em #eeeeee; border-radius: .1em; } .pull-right { float: right; } .pull-left { float: left; } .fa.pull-left { margin-right: .3em; } .fa.pull-right { margin-left: .3em; } .fa-spin { -webkit-animation: fa-spin 2s infinite linear; animation: fa-spin 2s infinite linear; } .fa-pulse { -webkit-animation: fa-spin 1s infinite steps(8); animation: fa-spin 1s infinite steps(8); } @-webkit-keyframes fa-spin { 0% { -webkit-transform: rotate(0deg); transform: rotate(0deg); } 100% { -webkit-transform: rotate(359deg); transform: rotate(359deg); } } @keyframes fa-spin { 0% { -webkit-transform: rotate(0deg); transform: rotate(0deg); } 100% { -webkit-transform: rotate(359deg); transform: rotate(359deg); } } .fa-rotate-90 { filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); -webkit-transform: rotate(90deg); -ms-transform: rotate(90deg); transform: rotate(90deg); } .fa-rotate-180 { filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); -webkit-transform: rotate(180deg); -ms-transform: rotate(180deg); transform: rotate(180deg); } .fa-rotate-270 { filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); -webkit-transform: rotate(270deg); -ms-transform: rotate(270deg); transform: rotate(270deg); } .fa-flip-horizontal { filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1); -webkit-transform: scale(-1, 1); -ms-transform: scale(-1, 1); transform: scale(-1, 1); } .fa-flip-vertical { filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1); -webkit-transform: scale(1, -1); -ms-transform: scale(1, -1); transform: scale(1, -1); } :root .fa-rotate-90, :root .fa-rotate-180, :root .fa-rotate-270, :root .fa-flip-horizontal, :root .fa-flip-vertical { filter: none; } .fa-stack { position: relative; display: inline-block; width: 2em; height: 2em; line-height: 2em; vertical-align: middle; } .fa-stack-1x, .fa-stack-2x { position: absolute; left: 0; width: 100%; text-align: center; } .fa-stack-1x { line-height: inherit; } .fa-stack-2x { font-size: 2em; } .fa-inverse { color: #ffffff; } /* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen readers do not read off random characters that represent icons */ .fa-glass:before { content: "\f000"; } .fa-music:before { content: "\f001"; } .fa-search:before { content: "\f002"; } .fa-envelope-o:before { content: "\f003"; } .fa-heart:before { content: "\f004"; } .fa-star:before { content: "\f005"; } .fa-star-o:before { content: "\f006"; } .fa-user:before { content: "\f007"; } .fa-film:before { content: "\f008"; } .fa-th-large:before { content: "\f009"; } .fa-th:before { content: "\f00a"; } .fa-th-list:before { content: "\f00b"; } .fa-check:before { content: "\f00c"; } .fa-remove:before, .fa-close:before, .fa-times:before { content: "\f00d"; } .fa-search-plus:before { content: "\f00e"; } .fa-search-minus:before { content: "\f010"; } .fa-power-off:before { content: "\f011"; } .fa-signal:before { content: "\f012"; } .fa-gear:before, .fa-cog:before { content: "\f013"; } .fa-trash-o:before { content: "\f014"; } .fa-home:before { content: "\f015"; } .fa-file-o:before { content: "\f016"; } .fa-clock-o:before { content: "\f017"; } .fa-road:before { content: "\f018"; } .fa-download:before { content: "\f019"; } .fa-arrow-circle-o-down:before { content: "\f01a"; } .fa-arrow-circle-o-up:before { content: "\f01b"; } .fa-inbox:before { content: "\f01c"; } .fa-play-circle-o:before { content: "\f01d"; } .fa-rotate-right:before, .fa-repeat:before { content: "\f01e"; } .fa-refresh:before { content: "\f021"; } .fa-list-alt:before { content: "\f022"; } .fa-lock:before { content: "\f023"; } .fa-flag:before { content: "\f024"; } .fa-headphones:before { content: "\f025"; } .fa-volume-off:before { content: "\f026"; } .fa-volume-down:before { content: "\f027"; } .fa-volume-up:before { content: "\f028"; } .fa-qrcode:before { content: "\f029"; } .fa-barcode:before { content: "\f02a"; } .fa-tag:before { content: "\f02b"; } .fa-tags:before { content: "\f02c"; } .fa-book:before { content: "\f02d"; } .fa-bookmark:before { content: "\f02e"; } .fa-print:before { content: "\f02f"; } .fa-camera:before { content: "\f030"; } .fa-font:before { content: "\f031"; } .fa-bold:before { content: "\f032"; } .fa-italic:before { content: "\f033"; } .fa-text-height:before { content: "\f034"; } .fa-text-width:before { content: "\f035"; } .fa-align-left:before { content: "\f036"; } .fa-align-center:before { content: "\f037"; } .fa-align-right:before { content: "\f038"; } .fa-align-justify:before { content: "\f039"; } .fa-list:before { content: "\f03a"; } .fa-dedent:before, .fa-outdent:before { content: "\f03b"; } .fa-indent:before { content: "\f03c"; } .fa-video-camera:before { content: "\f03d"; } .fa-photo:before, .fa-image:before, .fa-picture-o:before { content: "\f03e"; } .fa-pencil:before { content: "\f040"; } .fa-map-marker:before { content: "\f041"; } .fa-adjust:before { content: "\f042"; } .fa-tint:before { content: "\f043"; } .fa-edit:before, .fa-pencil-square-o:before { content: "\f044"; } .fa-share-square-o:before { content: "\f045"; } .fa-check-square-o:before { content: "\f046"; } .fa-arrows:before { content: "\f047"; } .fa-step-backward:before { content: "\f048"; } .fa-fast-backward:before { content: "\f049"; } .fa-backward:before { content: "\f04a"; } .fa-play:before { content: "\f04b"; } .fa-pause:before { content: "\f04c"; } .fa-stop:before { content: "\f04d"; } .fa-forward:before { content: "\f04e"; } .fa-fast-forward:before { content: "\f050"; } .fa-step-forward:before { content: "\f051"; } .fa-eject:before { content: "\f052"; } .fa-chevron-left:before { content: "\f053"; } .fa-chevron-right:before { content: "\f054"; } .fa-plus-circle:before { content: "\f055"; } .fa-minus-circle:before { content: "\f056"; } .fa-times-circle:before { content: "\f057"; } .fa-check-circle:before { content: "\f058"; } .fa-question-circle:before { content: "\f059"; } .fa-info-circle:before { content: "\f05a"; } .fa-crosshairs:before { content: "\f05b"; } .fa-times-circle-o:before { content: "\f05c"; } .fa-check-circle-o:before { content: "\f05d"; } .fa-ban:before { content: "\f05e"; } .fa-arrow-left:before { content: "\f060"; } .fa-arrow-right:before { content: "\f061"; } .fa-arrow-up:before { content: "\f062"; } .fa-arrow-down:before { content: "\f063"; } .fa-mail-forward:before, .fa-share:before { content: "\f064"; } .fa-expand:before { content: "\f065"; } .fa-compress:before { content: "\f066"; } .fa-plus:before { content: "\f067"; } .fa-minus:before { content: "\f068"; } .fa-asterisk:before { content: "\f069"; } .fa-exclamation-circle:before { content: "\f06a"; } .fa-gift:before { content: "\f06b"; } .fa-leaf:before { content: "\f06c"; } .fa-fire:before { content: "\f06d"; } .fa-eye:before { content: "\f06e"; } .fa-eye-slash:before { content: "\f070"; } .fa-warning:before, .fa-exclamation-triangle:before { content: "\f071"; } .fa-plane:before { content: "\f072"; } .fa-calendar:before { content: "\f073"; } .fa-random:before { content: "\f074"; } .fa-comment:before { content: "\f075"; } .fa-magnet:before { content: "\f076"; } .fa-chevron-up:before { content: "\f077"; } .fa-chevron-down:before { content: "\f078"; } .fa-retweet:before { content: "\f079"; } .fa-shopping-cart:before { content: "\f07a"; } .fa-folder:before { content: "\f07b"; } .fa-folder-open:before { content: "\f07c"; } .fa-arrows-v:before { content: "\f07d"; } .fa-arrows-h:before { content: "\f07e"; } .fa-bar-chart-o:before, .fa-bar-chart:before { content: "\f080"; } .fa-twitter-square:before { content: "\f081"; } .fa-facebook-square:before { content: "\f082"; } .fa-camera-retro:before { content: "\f083"; } .fa-key:before { content: "\f084"; } .fa-gears:before, .fa-cogs:before { content: "\f085"; } .fa-comments:before { content: "\f086"; } .fa-thumbs-o-up:before { content: "\f087"; } .fa-thumbs-o-down:before { content: "\f088"; } .fa-star-half:before { content: "\f089"; } .fa-heart-o:before { content: "\f08a"; } .fa-sign-out:before { content: "\f08b"; } .fa-linkedin-square:before { content: "\f08c"; } .fa-thumb-tack:before { content: "\f08d"; } .fa-external-link:before { content: "\f08e"; } .fa-sign-in:before { content: "\f090"; } .fa-trophy:before { content: "\f091"; } .fa-github-square:before { content: "\f092"; } .fa-upload:before { content: "\f093"; } .fa-lemon-o:before { content: "\f094"; } .fa-phone:before { content: "\f095"; } .fa-square-o:before { content: "\f096"; } .fa-bookmark-o:before { content: "\f097"; } .fa-phone-square:before { content: "\f098"; } .fa-twitter:before { content: "\f099"; } .fa-facebook-f:before, .fa-facebook:before { content: "\f09a"; } .fa-github:before { content: "\f09b"; } .fa-unlock:before { content: "\f09c"; } .fa-credit-card:before { content: "\f09d"; } .fa-rss:before { content: "\f09e"; } .fa-hdd-o:before { content: "\f0a0"; } .fa-bullhorn:before { content: "\f0a1"; } .fa-bell:before { content: "\f0f3"; } .fa-certificate:before { content: "\f0a3"; } .fa-hand-o-right:before { content: "\f0a4"; } .fa-hand-o-left:before { content: "\f0a5"; } .fa-hand-o-up:before { content: "\f0a6"; } .fa-hand-o-down:before { content: "\f0a7"; } .fa-arrow-circle-left:before { content: "\f0a8"; } .fa-arrow-circle-right:before { content: "\f0a9"; } .fa-arrow-circle-up:before { content: "\f0aa"; } .fa-arrow-circle-down:before { content: "\f0ab"; } .fa-globe:before { content: "\f0ac"; } .fa-wrench:before { content: "\f0ad"; } .fa-tasks:before { content: "\f0ae"; } .fa-filter:before { content: "\f0b0"; } .fa-briefcase:before { content: "\f0b1"; } .fa-arrows-alt:before { content: "\f0b2"; } .fa-group:before, .fa-users:before { content: "\f0c0"; } .fa-chain:before, .fa-link:before { content: "\f0c1"; } .fa-cloud:before { content: "\f0c2"; } .fa-flask:before { content: "\f0c3"; } .fa-cut:before, .fa-scissors:before { content: "\f0c4"; } .fa-copy:before, .fa-files-o:before { content: "\f0c5"; } .fa-paperclip:before { content: "\f0c6"; } .fa-save:before, .fa-floppy-o:before { content: "\f0c7"; } .fa-square:before { content: "\f0c8"; } .fa-navicon:before, .fa-reorder:before, .fa-bars:before { content: "\f0c9"; } .fa-list-ul:before { content: "\f0ca"; } .fa-list-ol:before { content: "\f0cb"; } .fa-strikethrough:before { content: "\f0cc"; } .fa-underline:before { content: "\f0cd"; } .fa-table:before { content: "\f0ce"; } .fa-magic:before { content: "\f0d0"; } .fa-truck:before { content: "\f0d1"; } .fa-pinterest:before { content: "\f0d2"; } .fa-pinterest-square:before { content: "\f0d3"; } .fa-google-plus-square:before { content: "\f0d4"; } .fa-google-plus:before { content: "\f0d5"; } .fa-money:before { content: "\f0d6"; } .fa-caret-down:before { content: "\f0d7"; } .fa-caret-up:before { content: "\f0d8"; } .fa-caret-left:before { content: "\f0d9"; } .fa-caret-right:before { content: "\f0da"; } .fa-columns:before { content: "\f0db"; } .fa-unsorted:before, .fa-sort:before { content: "\f0dc"; } .fa-sort-down:before, .fa-sort-desc:before { content: "\f0dd"; } .fa-sort-up:before, .fa-sort-asc:before { content: "\f0de"; } .fa-envelope:before { content: "\f0e0"; } .fa-linkedin:before { content: "\f0e1"; } .fa-rotate-left:before, .fa-undo:before { content: "\f0e2"; } .fa-legal:before, .fa-gavel:before { content: "\f0e3"; } .fa-dashboard:before, .fa-tachometer:before { content: "\f0e4"; } .fa-comment-o:before { content: "\f0e5"; } .fa-comments-o:before { content: "\f0e6"; } .fa-flash:before, .fa-bolt:before { content: "\f0e7"; } .fa-sitemap:before { content: "\f0e8"; } .fa-umbrella:before { content: "\f0e9"; } .fa-paste:before, .fa-clipboard:before { content: "\f0ea"; } .fa-lightbulb-o:before { content: "\f0eb"; } .fa-exchange:before { content: "\f0ec"; } .fa-cloud-download:before { content: "\f0ed"; } .fa-cloud-upload:before { content: "\f0ee"; } .fa-user-md:before { content: "\f0f0"; } .fa-stethoscope:before { content: "\f0f1"; } .fa-suitcase:before { content: "\f0f2"; } .fa-bell-o:before { content: "\f0a2"; } .fa-coffee:before { content: "\f0f4"; } .fa-cutlery:before { content: "\f0f5"; } .fa-file-text-o:before { content: "\f0f6"; } .fa-building-o:before { content: "\f0f7"; } .fa-hospital-o:before { content: "\f0f8"; } .fa-ambulance:before { content: "\f0f9"; } .fa-medkit:before { content: "\f0fa"; } .fa-fighter-jet:before { content: "\f0fb"; } .fa-beer:before { content: "\f0fc"; } .fa-h-square:before { content: "\f0fd"; } .fa-plus-square:before { content: "\f0fe"; } .fa-angle-double-left:before { content: "\f100"; } .fa-angle-double-right:before { content: "\f101"; } .fa-angle-double-up:before { content: "\f102"; } .fa-angle-double-down:before { content: "\f103"; } .fa-angle-left:before { content: "\f104"; } .fa-angle-right:before { content: "\f105"; } .fa-angle-up:before { content: "\f106"; } .fa-angle-down:before { content: "\f107"; } .fa-desktop:before { content: "\f108"; } .fa-laptop:before { content: "\f109"; } .fa-tablet:before { content: "\f10a"; } .fa-mobile-phone:before, .fa-mobile:before { content: "\f10b"; } .fa-circle-o:before { content: "\f10c"; } .fa-quote-left:before { content: "\f10d"; } .fa-quote-right:before { content: "\f10e"; } .fa-spinner:before { content: "\f110"; } .fa-circle:before { content: "\f111"; } .fa-mail-reply:before, .fa-reply:before { content: "\f112"; } .fa-github-alt:before { content: "\f113"; } .fa-folder-o:before { content: "\f114"; } .fa-folder-open-o:before { content: "\f115"; } .fa-smile-o:before { content: "\f118"; } .fa-frown-o:before { content: "\f119"; } .fa-meh-o:before { content: "\f11a"; } .fa-gamepad:before { content: "\f11b"; } .fa-keyboard-o:before { content: "\f11c"; } .fa-flag-o:before { content: "\f11d"; } .fa-flag-checkered:before { content: "\f11e"; } .fa-terminal:before { content: "\f120"; } .fa-code:before { content: "\f121"; } .fa-mail-reply-all:before, .fa-reply-all:before { content: "\f122"; } .fa-star-half-empty:before, .fa-star-half-full:before, .fa-star-half-o:before { content: "\f123"; } .fa-location-arrow:before { content: "\f124"; } .fa-crop:before { content: "\f125"; } .fa-code-fork:before { content: "\f126"; } .fa-unlink:before, .fa-chain-broken:before { content: "\f127"; } .fa-question:before { content: "\f128"; } .fa-info:before { content: "\f129"; } .fa-exclamation:before { content: "\f12a"; } .fa-superscript:before { content: "\f12b"; } .fa-subscript:before { content: "\f12c"; } .fa-eraser:before { content: "\f12d"; } .fa-puzzle-piece:before { content: "\f12e"; } .fa-microphone:before { content: "\f130"; } .fa-microphone-slash:before { content: "\f131"; } .fa-shield:before { content: "\f132"; } .fa-calendar-o:before { content: "\f133"; } .fa-fire-extinguisher:before { content: "\f134"; } .fa-rocket:before { content: "\f135"; } .fa-maxcdn:before { content: "\f136"; } .fa-chevron-circle-left:before { content: "\f137"; } .fa-chevron-circle-right:before { content: "\f138"; } .fa-chevron-circle-up:before { content: "\f139"; } .fa-chevron-circle-down:before { content: "\f13a"; } .fa-html5:before { content: "\f13b"; } .fa-css3:before { content: "\f13c"; } .fa-anchor:before { content: "\f13d"; } .fa-unlock-alt:before { content: "\f13e"; } .fa-bullseye:before { content: "\f140"; } .fa-ellipsis-h:before { content: "\f141"; } .fa-ellipsis-v:before { content: "\f142"; } .fa-rss-square:before { content: "\f143"; } .fa-play-circle:before { content: "\f144"; } .fa-ticket:before { content: "\f145"; } .fa-minus-square:before { content: "\f146"; } .fa-minus-square-o:before { content: "\f147"; } .fa-level-up:before { content: "\f148"; } .fa-level-down:before { content: "\f149"; } .fa-check-square:before { content: "\f14a"; } .fa-pencil-square:before { content: "\f14b"; } .fa-external-link-square:before { content: "\f14c"; } .fa-share-square:before { content: "\f14d"; } .fa-compass:before { content: "\f14e"; } .fa-toggle-down:before, .fa-caret-square-o-down:before { content: "\f150"; } .fa-toggle-up:before, .fa-caret-square-o-up:before { content: "\f151"; } .fa-toggle-right:before, .fa-caret-square-o-right:before { content: "\f152"; } .fa-euro:before, .fa-eur:before { content: "\f153"; } .fa-gbp:before { content: "\f154"; } .fa-dollar:before, .fa-usd:before { content: "\f155"; } .fa-rupee:before, .fa-inr:before { content: "\f156"; } .fa-cny:before, .fa-rmb:before, .fa-yen:before, .fa-jpy:before { content: "\f157"; } .fa-ruble:before, .fa-rouble:before, .fa-rub:before { content: "\f158"; } .fa-won:before, .fa-krw:before { content: "\f159"; } .fa-bitcoin:before, .fa-btc:before { content: "\f15a"; } .fa-file:before { content: "\f15b"; } .fa-file-text:before { content: "\f15c"; } .fa-sort-alpha-asc:before { content: "\f15d"; } .fa-sort-alpha-desc:before { content: "\f15e"; } .fa-sort-amount-asc:before { content: "\f160"; } .fa-sort-amount-desc:before { content: "\f161"; } .fa-sort-numeric-asc:before { content: "\f162"; } .fa-sort-numeric-desc:before { content: "\f163"; } .fa-thumbs-up:before { content: "\f164"; } .fa-thumbs-down:before { content: "\f165"; } .fa-youtube-square:before { content: "\f166"; } .fa-youtube:before { content: "\f167"; } .fa-xing:before { content: "\f168"; } .fa-xing-square:before { content: "\f169"; } .fa-youtube-play:before { content: "\f16a"; } .fa-dropbox:before { content: "\f16b"; } .fa-stack-overflow:before { content: "\f16c"; } .fa-instagram:before { content: "\f16d"; } .fa-flickr:before { content: "\f16e"; } .fa-adn:before { content: "\f170"; } .fa-bitbucket:before { content: "\f171"; } .fa-bitbucket-square:before { content: "\f172"; } .fa-tumblr:before { content: "\f173"; } .fa-tumblr-square:before { content: "\f174"; } .fa-long-arrow-down:before { content: "\f175"; } .fa-long-arrow-up:before { content: "\f176"; } .fa-long-arrow-left:before { content: "\f177"; } .fa-long-arrow-right:before { content: "\f178"; } .fa-apple:before { content: "\f179"; } .fa-windows:before { content: "\f17a"; } .fa-android:before { content: "\f17b"; } .fa-linux:before { content: "\f17c"; } .fa-dribbble:before { content: "\f17d"; } .fa-skype:before { content: "\f17e"; } .fa-foursquare:before { content: "\f180"; } .fa-trello:before { content: "\f181"; } .fa-female:before { content: "\f182"; } .fa-male:before { content: "\f183"; } .fa-gittip:before, .fa-gratipay:before { content: "\f184"; } .fa-sun-o:before { content: "\f185"; } .fa-moon-o:before { content: "\f186"; } .fa-archive:before { content: "\f187"; } .fa-bug:before { content: "\f188"; } .fa-vk:before { content: "\f189"; } .fa-weibo:before { content: "\f18a"; } .fa-renren:before { content: "\f18b"; } .fa-pagelines:before { content: "\f18c"; } .fa-stack-exchange:before { content: "\f18d"; } .fa-arrow-circle-o-right:before { content: "\f18e"; } .fa-arrow-circle-o-left:before { content: "\f190"; } .fa-toggle-left:before, .fa-caret-square-o-left:before { content: "\f191"; } .fa-dot-circle-o:before { content: "\f192"; } .fa-wheelchair:before { content: "\f193"; } .fa-vimeo-square:before { content: "\f194"; } .fa-turkish-lira:before, .fa-try:before { content: "\f195"; } .fa-plus-square-o:before { content: "\f196"; } .fa-space-shuttle:before { content: "\f197"; } .fa-slack:before { content: "\f198"; } .fa-envelope-square:before { content: "\f199"; } .fa-wordpress:before { content: "\f19a"; } .fa-openid:before { content: "\f19b"; } .fa-institution:before, .fa-bank:before, .fa-university:before { content: "\f19c"; } .fa-mortar-board:before, .fa-graduation-cap:before { content: "\f19d"; } .fa-yahoo:before { content: "\f19e"; } .fa-google:before { content: "\f1a0"; } .fa-reddit:before { content: "\f1a1"; } .fa-reddit-square:before { content: "\f1a2"; } .fa-stumbleupon-circle:before { content: "\f1a3"; } .fa-stumbleupon:before { content: "\f1a4"; } .fa-delicious:before { content: "\f1a5"; } .fa-digg:before { content: "\f1a6"; } .fa-pied-piper:before { content: "\f1a7"; } .fa-pied-piper-alt:before { content: "\f1a8"; } .fa-drupal:before { content: "\f1a9"; } .fa-joomla:before { content: "\f1aa"; } .fa-language:before { content: "\f1ab"; } .fa-fax:before { content: "\f1ac"; } .fa-building:before { content: "\f1ad"; } .fa-child:before { content: "\f1ae"; } .fa-paw:before { content: "\f1b0"; } .fa-spoon:before { content: "\f1b1"; } .fa-cube:before { content: "\f1b2"; } .fa-cubes:before { content: "\f1b3"; } .fa-behance:before { content: "\f1b4"; } .fa-behance-square:before { content: "\f1b5"; } .fa-steam:before { content: "\f1b6"; } .fa-steam-square:before { content: "\f1b7"; } .fa-recycle:before { content: "\f1b8"; } .fa-automobile:before, .fa-car:before { content: "\f1b9"; } .fa-cab:before, .fa-taxi:before { content: "\f1ba"; } .fa-tree:before { content: "\f1bb"; } .fa-spotify:before { content: "\f1bc"; } .fa-deviantart:before { content: "\f1bd"; } .fa-soundcloud:before { content: "\f1be"; } .fa-database:before { content: "\f1c0"; } .fa-file-pdf-o:before { content: "\f1c1"; } .fa-file-word-o:before { content: "\f1c2"; } .fa-file-excel-o:before { content: "\f1c3"; } .fa-file-powerpoint-o:before { content: "\f1c4"; } .fa-file-photo-o:before, .fa-file-picture-o:before, .fa-file-image-o:before { content: "\f1c5"; } .fa-file-zip-o:before, .fa-file-archive-o:before { content: "\f1c6"; } .fa-file-sound-o:before, .fa-file-audio-o:before { content: "\f1c7"; } .fa-file-movie-o:before, .fa-file-video-o:before { content: "\f1c8"; } .fa-file-code-o:before { content: "\f1c9"; } .fa-vine:before { content: "\f1ca"; } .fa-codepen:before { content: "\f1cb"; } .fa-jsfiddle:before { content: "\f1cc"; } .fa-life-bouy:before, .fa-life-buoy:before, .fa-life-saver:before, .fa-support:before, .fa-life-ring:before { content: "\f1cd"; } .fa-circle-o-notch:before { content: "\f1ce"; } .fa-ra:before, .fa-rebel:before { content: "\f1d0"; } .fa-ge:before, .fa-empire:before { content: "\f1d1"; } .fa-git-square:before { content: "\f1d2"; } .fa-git:before { content: "\f1d3"; } .fa-hacker-news:before { content: "\f1d4"; } .fa-tencent-weibo:before { content: "\f1d5"; } .fa-qq:before { content: "\f1d6"; } .fa-wechat:before, .fa-weixin:before { content: "\f1d7"; } .fa-send:before, .fa-paper-plane:before { content: "\f1d8"; } .fa-send-o:before, .fa-paper-plane-o:before { content: "\f1d9"; } .fa-history:before { content: "\f1da"; } .fa-genderless:before, .fa-circle-thin:before { content: "\f1db"; } .fa-header:before { content: "\f1dc"; } .fa-paragraph:before { content: "\f1dd"; } .fa-sliders:before { content: "\f1de"; } .fa-share-alt:before { content: "\f1e0"; } .fa-share-alt-square:before { content: "\f1e1"; } .fa-bomb:before { content: "\f1e2"; } .fa-soccer-ball-o:before, .fa-futbol-o:before { content: "\f1e3"; } .fa-tty:before { content: "\f1e4"; } .fa-binoculars:before { content: "\f1e5"; } .fa-plug:before { content: "\f1e6"; } .fa-slideshare:before { content: "\f1e7"; } .fa-twitch:before { content: "\f1e8"; } .fa-yelp:before { content: "\f1e9"; } .fa-newspaper-o:before { content: "\f1ea"; } .fa-wifi:before { content: "\f1eb"; } .fa-calculator:before { content: "\f1ec"; } .fa-paypal:before { content: "\f1ed"; } .fa-google-wallet:before { content: "\f1ee"; } .fa-cc-visa:before { content: "\f1f0"; } .fa-cc-mastercard:before { content: "\f1f1"; } .fa-cc-discover:before { content: "\f1f2"; } .fa-cc-amex:before { content: "\f1f3"; } .fa-cc-paypal:before { content: "\f1f4"; } .fa-cc-stripe:before { content: "\f1f5"; } .fa-bell-slash:before { content: "\f1f6"; } .fa-bell-slash-o:before { content: "\f1f7"; } .fa-trash:before { content: "\f1f8"; } .fa-copyright:before { content: "\f1f9"; } .fa-at:before { content: "\f1fa"; } .fa-eyedropper:before { content: "\f1fb"; } .fa-paint-brush:before { content: "\f1fc"; } .fa-birthday-cake:before { content: "\f1fd"; } .fa-area-chart:before { content: "\f1fe"; } .fa-pie-chart:before { content: "\f200"; } .fa-line-chart:before { content: "\f201"; } .fa-lastfm:before { content: "\f202"; } .fa-lastfm-square:before { content: "\f203"; } .fa-toggle-off:before { content: "\f204"; } .fa-toggle-on:before { content: "\f205"; } .fa-bicycle:before { content: "\f206"; } .fa-bus:before { content: "\f207"; } .fa-ioxhost:before { content: "\f208"; } .fa-angellist:before { content: "\f209"; } .fa-cc:before { content: "\f20a"; } .fa-shekel:before, .fa-sheqel:before, .fa-ils:before { content: "\f20b"; } .fa-meanpath:before { content: "\f20c"; } .fa-buysellads:before { content: "\f20d"; } .fa-connectdevelop:before { content: "\f20e"; } .fa-dashcube:before { content: "\f210"; } .fa-forumbee:before { content: "\f211"; } .fa-leanpub:before { content: "\f212"; } .fa-sellsy:before { content: "\f213"; } .fa-shirtsinbulk:before { content: "\f214"; } .fa-simplybuilt:before { content: "\f215"; } .fa-skyatlas:before { content: "\f216"; } .fa-cart-plus:before { content: "\f217"; } .fa-cart-arrow-down:before { content: "\f218"; } .fa-diamond:before { content: "\f219"; } .fa-ship:before { content: "\f21a"; } .fa-user-secret:before { content: "\f21b"; } .fa-motorcycle:before { content: "\f21c"; } .fa-street-view:before { content: "\f21d"; } .fa-heartbeat:before { content: "\f21e"; } .fa-venus:before { content: "\f221"; } .fa-mars:before { content: "\f222"; } .fa-mercury:before { content: "\f223"; } .fa-transgender:before { content: "\f224"; } .fa-transgender-alt:before { content: "\f225"; } .fa-venus-double:before { content: "\f226"; } .fa-mars-double:before { content: "\f227"; } .fa-venus-mars:before { content: "\f228"; } .fa-mars-stroke:before { content: "\f229"; } .fa-mars-stroke-v:before { content: "\f22a"; } .fa-mars-stroke-h:before { content: "\f22b"; } .fa-neuter:before { content: "\f22c"; } .fa-facebook-official:before { content: "\f230"; } .fa-pinterest-p:before { content: "\f231"; } .fa-whatsapp:before { content: "\f232"; } .fa-server:before { content: "\f233"; } .fa-user-plus:before { content: "\f234"; } .fa-user-times:before { content: "\f235"; } .fa-hotel:before, .fa-bed:before { content: "\f236"; } .fa-viacoin:before { content: "\f237"; } .fa-train:before { content: "\f238"; } .fa-subway:before { content: "\f239"; } .fa-medium:before { content: "\f23a"; } ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/scss/github-markdown.scss ================================================ @charset "UTF-8"; /*! github-markdown-css | The MIT License (MIT) | Copyright (c) Sindre Sorhus (sindresorhus.com) | https://github.com/sindresorhus/github-markdown-css */ @font-face { font-family: octicons-anchor; src: url(data:font/woff;charset=utf-8;base64,d09GRgABAAAAAAYcAA0AAAAACjQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAABMAAAABwAAAAca8vGTk9TLzIAAAFMAAAARAAAAFZG1VHVY21hcAAAAZAAAAA+AAABQgAP9AdjdnQgAAAB0AAAAAQAAAAEACICiGdhc3AAAAHUAAAACAAAAAj//wADZ2x5ZgAAAdwAAADRAAABEKyikaNoZWFkAAACsAAAAC0AAAA2AtXoA2hoZWEAAALgAAAAHAAAACQHngNFaG10eAAAAvwAAAAQAAAAEAwAACJsb2NhAAADDAAAAAoAAAAKALIAVG1heHAAAAMYAAAAHwAAACABEAB2bmFtZQAAAzgAAALBAAAFu3I9x/Nwb3N0AAAF/AAAAB0AAAAvaoFvbwAAAAEAAAAAzBdyYwAAAADP2IQvAAAAAM/bz7t4nGNgZGFgnMDAysDB1Ml0hoGBoR9CM75mMGLkYGBgYmBlZsAKAtJcUxgcPsR8iGF2+O/AEMPsznAYKMwIkgMA5REMOXicY2BgYGaAYBkGRgYQsAHyGMF8FgYFIM0ChED+h5j//yEk/3KoSgZGNgYYk4GRCUgwMaACRoZhDwCs7QgGAAAAIgKIAAAAAf//AAJ4nHWMMQrCQBBF/0zWrCCIKUQsTDCL2EXMohYGSSmorScInsRGL2DOYJe0Ntp7BK+gJ1BxF1stZvjz/v8DRghQzEc4kIgKwiAppcA9LtzKLSkdNhKFY3HF4lK69ExKslx7Xa+vPRVS43G98vG1DnkDMIBUgFN0MDXflU8tbaZOUkXUH0+U27RoRpOIyCKjbMCVejwypzJJG4jIwb43rfl6wbwanocrJm9XFYfskuVC5K/TPyczNU7b84CXcbxks1Un6H6tLH9vf2LRnn8Ax7A5WQAAAHicY2BkYGAA4teL1+yI57f5ysDNwgAC529f0kOmWRiYVgEpDgYmEA8AUzEKsQAAAHicY2BkYGB2+O/AEMPCAAJAkpEBFbAAADgKAe0EAAAiAAAAAAQAAAAEAAAAAAAAKgAqACoAiAAAeJxjYGRgYGBhsGFgYgABEMkFhAwM/xn0QAIAD6YBhwB4nI1Ty07cMBS9QwKlQapQW3VXySvEqDCZGbGaHULiIQ1FKgjWMxknMfLEke2A+IJu+wntrt/QbVf9gG75jK577Lg8K1qQPCfnnnt8fX1NRC/pmjrk/zprC+8D7tBy9DHgBXoWfQ44Av8t4Bj4Z8CLtBL9CniJluPXASf0Lm4CXqFX8Q84dOLnMB17N4c7tBo1AS/Qi+hTwBH4rwHHwN8DXqQ30XXAS7QaLwSc0Gn8NuAVWou/gFmnjLrEaEh9GmDdDGgL3B4JsrRPDU2hTOiMSuJUIdKQQayiAth69r6akSSFqIJuA19TrzCIaY8sIoxyrNIrL//pw7A2iMygkX5vDj+G+kuoLdX4GlGK/8Lnlz6/h9MpmoO9rafrz7ILXEHHaAx95s9lsI7AHNMBWEZHULnfAXwG9/ZqdzLI08iuwRloXE8kfhXYAvE23+23DU3t626rbs8/8adv+9DWknsHp3E17oCf+Z48rvEQNZ78paYM38qfk3v/u3l3u3GXN2Dmvmvpf1Srwk3pB/VSsp512bA/GG5i2WJ7wu430yQ5K3nFGiOqgtmSB5pJVSizwaacmUZzZhXLlZTq8qGGFY2YcSkqbth6aW1tRmlaCFs2016m5qn36SbJrqosG4uMV4aP2PHBmB3tjtmgN2izkGQyLWprekbIntJFing32a5rKWCN/SdSoga45EJykyQ7asZvHQ8PTm6cslIpwyeyjbVltNikc2HTR7YKh9LBl9DADC0U/jLcBZDKrMhUBfQBvXRzLtFtjU9eNHKin0x5InTqb8lNpfKv1s1xHzTXRqgKzek/mb7nB8RZTCDhGEX3kK/8Q75AmUM/eLkfA+0Hi908Kx4eNsMgudg5GLdRD7a84npi+YxNr5i5KIbW5izXas7cHXIMAau1OueZhfj+cOcP3P8MNIWLyYOBuxL6DRylJ4cAAAB4nGNgYoAALjDJyIAOWMCiTIxMLDmZedkABtIBygAAAA==) format('woff'); } .markdown-body { -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; color: #333; overflow: hidden; //font-family: "Helvetica Neue", Helvetica, "Segoe UI", Arial, freesans, sans-serif; font-family: "Microsoft YaHei", Helvetica, "Meiryo UI", "Malgun Gothic", "Segoe UI", "Trebuchet MS", "Monaco", monospace, Tahoma, STXihei, "华文细黑", STHeiti, "Helvetica Neue", "Droid Sans", "wenquanyi micro hei", FreeSans, Arimo, Arial, SimSun, "宋体", Heiti, "黑体", sans-serif; font-size: 16px; line-height: 1.6; word-wrap: break-word; } .markdown-body a { background: transparent; } .markdown-body a:active, .markdown-body a:hover { outline: 0; } .markdown-body strong { font-weight: bold; } .markdown-body h1 { font-size: 2em; margin: 0.67em 0; } .markdown-body img { border: 0; } .markdown-body hr { -moz-box-sizing: content-box; box-sizing: content-box; height: 0; } .markdown-body pre { overflow: auto; } .markdown-body code, .markdown-body kbd, .markdown-body pre { font-family: "Meiryo UI", "YaHei Consolas Hybrid", Consolas, "Malgun Gothic", "Segoe UI", "Trebuchet MS", Helvetica, monospace, monospace; font-size: 1em; } .markdown-body input { color: inherit; font: inherit; margin: 0; } .markdown-body html input[disabled] { cursor: default; } .markdown-body input { line-height: normal; } .markdown-body input[type="checkbox"] { -moz-box-sizing: border-box; box-sizing: border-box; padding: 0; } .markdown-body table { border-collapse: collapse; border-spacing: 0; } .markdown-body td, .markdown-body th { padding: 0; } .markdown-body * { -moz-box-sizing: border-box; box-sizing: border-box; } .markdown-body input { font: 13px/1.4 Helvetica, arial, freesans, clean, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; } .markdown-body a { color: #4183c4; text-decoration: none; } .markdown-body a:hover, .markdown-body a:active { text-decoration: underline; } .markdown-body hr { height: 0; margin: 15px 0; overflow: hidden; background: transparent; border: 0; border-bottom: 1px solid #ddd; } .markdown-body hr:before { display: table; content: ""; } .markdown-body hr:after { display: table; clear: both; content: ""; } .markdown-body h1, .markdown-body h2, .markdown-body h3, .markdown-body h4, .markdown-body h5, .markdown-body h6 { margin-top: 15px; margin-bottom: 15px; line-height: 1.1; } .markdown-body h1 { font-size: 30px; } .markdown-body h2 { font-size: 21px; } .markdown-body h3 { font-size: 16px; } .markdown-body h4 { font-size: 14px; } .markdown-body h5 { font-size: 12px; } .markdown-body h6 { font-size: 11px; } .markdown-body blockquote { margin: 0; } .markdown-body ul, .markdown-body ol { padding: 0; margin-top: 0; margin-bottom: 0; } .markdown-body ol ol, .markdown-body ul ol { list-style-type: lower-roman; } .markdown-body ul ul ol, .markdown-body ul ol ol, .markdown-body ol ul ol, .markdown-body ol ol ol { list-style-type: lower-alpha; } .markdown-body dd { margin-left: 0; } .markdown-body code { font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 12px; } .markdown-body pre { margin-top: 0; margin-bottom: 0; font: 12px Consolas, "Liberation Mono", Menlo, Courier, monospace; } .markdown-body .octicon { font: normal normal 16px octicons-anchor; line-height: 1; display: inline-block; text-decoration: none; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } .markdown-body .octicon-link:before { content: '\f05c'; } .markdown-body>*:first-child { margin-top: 0 !important; } .markdown-body>*:last-child { margin-bottom: 0 !important; } .markdown-body .anchor { position: absolute; top: 0; left: 0; display: block; padding-right: 6px; padding-left: 30px; margin-left: -30px; } .markdown-body .anchor:focus { outline: none; } .markdown-body h1, .markdown-body h2, .markdown-body h3, .markdown-body h4, .markdown-body h5, .markdown-body h6 { position: relative; margin-top: 1em; margin-bottom: 16px; font-weight: bold; line-height: 1.4; } .markdown-body h1 .octicon-link, .markdown-body h2 .octicon-link, .markdown-body h3 .octicon-link, .markdown-body h4 .octicon-link, .markdown-body h5 .octicon-link, .markdown-body h6 .octicon-link { display: none; color: #000; vertical-align: middle; } .markdown-body h1:hover .anchor, .markdown-body h2:hover .anchor, .markdown-body h3:hover .anchor, .markdown-body h4:hover .anchor, .markdown-body h5:hover .anchor, .markdown-body h6:hover .anchor { padding-left: 8px; margin-left: -30px; text-decoration: none; } .markdown-body h1:hover .anchor .octicon-link, .markdown-body h2:hover .anchor .octicon-link, .markdown-body h3:hover .anchor .octicon-link, .markdown-body h4:hover .anchor .octicon-link, .markdown-body h5:hover .anchor .octicon-link, .markdown-body h6:hover .anchor .octicon-link { display: inline-block; } .markdown-body h1 { padding-bottom: 0.3em; font-size: 2.25em; line-height: 1.2; border-bottom: 1px solid #eee; } .markdown-body h1 .anchor { line-height: 1; } .markdown-body h2 { padding-bottom: 0.3em; font-size: 1.75em; line-height: 1.225; border-bottom: 1px solid #eee; } .markdown-body h2 .anchor { line-height: 1; } .markdown-body h3 { font-size: 1.5em; line-height: 1.43; } .markdown-body h3 .anchor { line-height: 1.2; } .markdown-body h4 { font-size: 1.25em; } .markdown-body h4 .anchor { line-height: 1.2; } .markdown-body h5 { font-size: 1em; } .markdown-body h5 .anchor { line-height: 1.1; } .markdown-body h6 { font-size: 1em; color: #777; } .markdown-body h6 .anchor { line-height: 1.1; } .markdown-body p, .markdown-body blockquote, .markdown-body ul, .markdown-body ol, .markdown-body dl, .markdown-body table, .markdown-body pre { margin-top: 0; margin-bottom: 16px; } /* .markdown-body hr { height: 4px; padding: 0; margin: 16px 0; background-color: #e7e7e7; border: 0 none; }*/ .markdown-body ul, .markdown-body ol { padding-left: 2em; } .markdown-body ul ul, .markdown-body ul ol, .markdown-body ol ol, .markdown-body ol ul { margin-top: 0; margin-bottom: 0; } .markdown-body li>p { margin-top: 16px; } .markdown-body dl { padding: 0; } .markdown-body dl dt { padding: 0; margin-top: 16px; font-size: 1em; font-style: italic; font-weight: bold; } .markdown-body dl dd { padding: 0 16px; margin-bottom: 16px; } .markdown-body blockquote { padding: 0 15px; color: #777; border-left: 4px solid #ddd; } .markdown-body blockquote>:first-child { margin-top: 0; } .markdown-body blockquote>:last-child { margin-bottom: 0; } .markdown-body table { display: block; width: 100%; overflow: auto; word-break: normal; word-break: keep-all; } .markdown-body table th { font-weight: bold; } .markdown-body table th, .markdown-body table td { padding: 6px 13px; border: 1px solid #ddd; } .markdown-body table tr { background-color: #fff; border-top: 1px solid #ccc; } .markdown-body table tr:nth-child(2n) { background-color: #f8f8f8; } .markdown-body img { max-width: 100%; -moz-box-sizing: border-box; box-sizing: border-box; } .markdown-body code { padding: 0; padding-top: 0.2em; padding-bottom: 0.2em; margin: 0; font-size: 85%; background-color: rgba(0,0,0,0.04); border-radius: 3px; } .markdown-body code:before, .markdown-body code:after { letter-spacing: -0.2em; content: "\00a0"; } .markdown-body pre>code { padding: 0; margin: 0; font-size: 100%; word-break: normal; white-space: pre; background: transparent; border: 0; } .markdown-body .highlight { margin-bottom: 16px; } .markdown-body .highlight pre, .markdown-body pre { padding: 16px; overflow: auto; font-size: 85%; line-height: 1.45; background-color: #f7f7f7; border-radius: 3px; } .markdown-body .highlight pre { margin-bottom: 0; word-break: normal; } .markdown-body pre { word-wrap: normal; } .markdown-body pre code { display: inline; max-width: initial; padding: 0; margin: 0; overflow: initial; line-height: inherit; word-wrap: normal; background-color: transparent; border: 0; } .markdown-body pre code:before, .markdown-body pre code:after { content: normal; } .markdown-body kbd { display: inline-block; padding: 3px 5px; font-size: 11px; line-height: 10px; color: #555; vertical-align: middle; background-color: #fcfcfc; border: solid 1px #ccc; border-bottom-color: #bbb; border-radius: 3px; box-shadow: inset 0 -1px 0 #bbb; } .markdown-body .pl-c { color: #969896; } .markdown-body .pl-c1, .markdown-body .pl-mdh, .markdown-body .pl-mm, .markdown-body .pl-mp, .markdown-body .pl-mr, .markdown-body .pl-s1 .pl-v, .markdown-body .pl-s3, .markdown-body .pl-sc, .markdown-body .pl-sv { color: #0086b3; } .markdown-body .pl-e, .markdown-body .pl-en { color: #795da3; } .markdown-body .pl-s1 .pl-s2, .markdown-body .pl-smi, .markdown-body .pl-smp, .markdown-body .pl-stj, .markdown-body .pl-vo, .markdown-body .pl-vpf { color: #333; } .markdown-body .pl-ent { color: #63a35c; } .markdown-body .pl-k, .markdown-body .pl-s, .markdown-body .pl-st { color: #a71d5d; } .markdown-body .pl-pds, .markdown-body .pl-s1, .markdown-body .pl-s1 .pl-pse .pl-s2, .markdown-body .pl-sr, .markdown-body .pl-sr .pl-cce, .markdown-body .pl-sr .pl-sra, .markdown-body .pl-sr .pl-sre, .markdown-body .pl-src { color: #df5000; } .markdown-body .pl-mo, .markdown-body .pl-v { color: #1d3e81; } .markdown-body .pl-id { color: #b52a1d; } .markdown-body .pl-ii { background-color: #b52a1d; color: #f8f8f8; } .markdown-body .pl-sr .pl-cce { color: #63a35c; font-weight: bold; } .markdown-body .pl-ml { color: #693a17; } .markdown-body .pl-mh, .markdown-body .pl-mh .pl-en, .markdown-body .pl-ms { color: #1d3e81; font-weight: bold; } .markdown-body .pl-mq { color: #008080; } .markdown-body .pl-mi { color: #333; font-style: italic; } .markdown-body .pl-mb { color: #333; font-weight: bold; } .markdown-body .pl-md, .markdown-body .pl-mdhf { background-color: #ffecec; color: #bd2c00; } .markdown-body .pl-mdht, .markdown-body .pl-mi1 { background-color: #eaffea; color: #55a532; } .markdown-body .pl-mdr { color: #795da3; font-weight: bold; } .markdown-body kbd { display: inline-block; padding: 3px 5px; font: 11px Consolas, "Liberation Mono", Menlo, Courier, monospace; line-height: 10px; color: #555; vertical-align: middle; background-color: #fcfcfc; border: solid 1px #ccc; border-bottom-color: #bbb; border-radius: 3px; box-shadow: inset 0 -1px 0 #bbb; } .markdown-body .task-list-item { list-style-type: none; } .markdown-body .task-list-item+.task-list-item { margin-top: 3px; } .markdown-body .task-list-item input { float: left; margin: 0.3em 0 0.25em -1.6em; vertical-align: middle; } .markdown-body :checked+.radio-label { z-index: 1; position: relative; border-color: #4183c4; } ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/scss/lib/prefixes.scss ================================================ @charset "UTF-8"; /*! prefixes.scss v0.1.0 | Author: Pandao | https://github.com/pandao/prefixes.scss | MIT license | Copyright (c) 2015 */ // appearance @mixin appearance($value) { -webkit-appearance: $value; -moz-appearance: $value; -ms-appearance: $value; appearance: $value; } // clearfix @mixin clearfix() { &:before, &:after { content: " "; display: table; } &:after { clear: both; } } // viewport @mixin viewport-device-width() { width: device-width; user-zoom: fixed; } @mixin viewport() { @-webkit-viewport { @include viewport-device-width(); } @-moz-viewport { @include viewport-device-width(); } @-ms-viewport { @include viewport-device-width(); } @-o-viewport { @include viewport-device-width(); } @viewport { @include viewport-device-width(); } } // Transform @mixin transform($transform) { -webkit-transform: $transform; /* Safari, Chrome */ -moz-transform: $transform; /* Firefox 3.5~16.0 */ -ms-transform: $transform; /* IE9~10 */ -o-transform: $transform; /* Opera 10.5~12.10 */ transform: $transform; } @mixin transform-origin($origin) { -webkit-transform-origin: $origin; -moz-transform-origin: $origin; /* Firefox 3.5~16.0 */ -ms-transform-origin: $origin; /* IE9~10 */ -o-transform-origin: $origin; /* Opera 10.5~12.10 */ transform-origin: $origin; } @mixin transform-origin-x($origin) { -webkit-transform-origin-x: $origin; /* Blink, Webkit */ transform-origin-x: $origin; /* IE11+ */ } @mixin transform-origin-y($origin) { -webkit-transform-origin-y: $origin; /* Blink, Webkit */ transform-origin-y: $origin; /* IE11+ */ } @mixin transform-origin-z($origin) { -webkit-transform-origin-z: $origin; /* Blink, Webkit */ transform-origin-z: $origin; /* IE11+ */ } @mixin transform-style($style) { -webkit-transform-style: $style; -moz-transform-style: $style; /* Firefox 10~16.0 */ -ms-transform-style: $style; /* IE9~10 */ transform-style: $style; /* Firefox, Blink, IE11+ */ } // perspective @mixin perspective($value) { -webkit-perspective: $value; /* Safari, Chrome */ perspective: $value; /* None yet / Non-standard */ } @mixin perspective-origin($value) { -webkit-perspective-origin: $value; /* Safari, Chrome 12+ */ -moz-perspective-origin: $value; /* Firefox 10~16 */ perspective-origin: $value; /* Opera 15+, IE10+ */ } @mixin perspective-origin-x($value) { -webkit-perspective-origin-x: $value; /* Safari, Chrome 12+ */ perspective-origin-x: $value; /* IE10+ */ } @mixin perspective-origin-y($value) { -webkit-perspective-origin-y: $value; /* Safari, Chrome 12+ */ perspective-origin-y: $value; /* IE10+ */ } @mixin backface-visibility($value : hidden) { -webkit-backface-visibility: $value; /* Chrome, Safari, Opera 15+ */ -moz-backface-visibility: $value; /* Firefox */ -ms-backface-visibility: $value; /* IE10 */ backface-visibility: $value; } // Transitions IE10+ @mixin transition($transition...) { -webkit-transition: $transition; /* Safari, Chrome */ -moz-transition: $transition; /* Firefox 4.0~16.0 */ transition: $transition; /* IE >9, FF >15, Opera >12.0 */ } @mixin transition-property($property) { -webkit-transition-property: $property; -moz-transition-property: $property; /* Firefox 4.0~16.0 */ transition-property: $property; } @mixin transition-duration($duration) { -webkit-transition-duration: $duration; -moz-transition-duration: $duration; /* Firefox 4.0~16.0 */ transition-duration: $duration; } @mixin transition-timing-function($easing) { -webkit-transition-timing-function: $easing; -moz-transition-timing-function: $easing; /* Firefox 4.0~16.0 */ transition-timing-function: $easing; } @mixin transition-delay($delay) { -webkit-transition-delay: $delay; -moz-transition-delay: $delay; /* Firefox 4.0~16.0 */ transition-delay: $delay; } // Flex align @mixin align-content($value) { -webkit-align-content: $value; /* Chrome 21.0+, Safari Not supported. */ align-content: $value; /* Firefox 28+, Opera 12.10, IE Not supported. */ } @mixin align-items($value) { -webkit-align-items: $value; /* Safari 7.0+, Chrome 21.0+ */ align-items: $value; /* Firefox 20.0+, IE11+, Opera 12.10 */ } @mixin align-self($value) { -webkit-align-self: $value; /* Chrome 21~36, Safari Not supported. */ align-self: $value; /* Firefox 28+, Opera 12.10, IE Not supported. */ } // Animations IE10+ @mixin keyframes($name) { @-webkit-keyframes #{$name} { @content; } @-moz-keyframes #{$name} { @content; } @keyframes #{$name} { @content; } } @mixin animation($animation...) { -webkit-animation: $animation; -moz-animation: $animation; /* Firefox 5.0~16.0 */ animation: $animation; /* IE10+ */ } @mixin animation-name($name) { -webkit-animation-name: $name; -moz-animation-name: $name; /* Firefox 5.0~16.0 */ animation-name: $name; } @mixin animation-duration($time : 1s) { -webkit-animation-duration: $time; -moz-animation-duration: $time; /* Firefox 5.0~16.0 */ animation-duration: $time; } @mixin animation-timing-function($easing : ease) { -webkit-animation-timing-function: $easing; -moz-animation-timing-function: $easing; /* Firefox 5.0~16.0 */ animation-timing-function: $easing; } @mixin animation-delay($delay : 1s) { -webkit-animation-delay: $delay; -moz-animation-delay: $delay; /* Firefox 5.0~16.0 */ animation-delay: $delay; } @mixin animation-iteration-count($count : infinite) { -webkit-animation-iteration-count: $count; -moz-animation-iteration-count: $count; /* Firefox 5.0~16.0 */ animation-iteration-count: $count; } // normal or alternate @mixin animation-direction($direction : normal) { -webkit-animation-direction: $direction; -moz-animation-direction: $direction; /* Firefox 5.0~16.0 */ animation-direction: $direction; } // paused or running @mixin animation-play-state($state) { -webkit-animation-play-state: $state; -moz-animation-play-state: $state; /* Firefox 5.0~16.0 */ animation-play-state: $state; } // animation-fill-mode @mixin animation-fill-mode($mode) { -webkit-animation-fill-mode: $mode; -moz-animation-fill-mode: $mode; animation-fill-mode: $mode; } // user-select @mixin user-select($type) { -webkit-user-select: $type; -moz-user-select: $type; -ms-user-select: $type; -o-user-select: $type; user-select: $type; } // border-radius @mixin border-radius($radius: 4px) { -webkit-border-radius: $radius; -moz-border-radius: $radius; -ms-border-radius: $radius; -o-border-radius: $radius; border-radius: $radius; } @mixin border-top-left-radius($radius: 4px) { -webkit-border-top-left-radius: $radius; -moz-border-top-left-radius: $radius; -ms-border-top-left-radius: $radius; -o-border-top-left-radius: $radius; border-top-left-radius: $radius; } @mixin border-top-right-radius($radius: 4px) { -webkit-border-top-right-radius: $radius; -moz-border-top-right-radius: $radius; -ms-border-top-right-radius: $radius; -o-border-top-right-radius: $radius; border-top-right-radius: $radius; } @mixin border-bottom-left-radius($radius: 4px) { -webkit-border-bottom-left-radius: $radius; -moz-border-bottom-left-radius: $radius; -ms-border-bottom-left-radius: $radius; -o-border-bottom-left-radius: $radius; border-bottom-left-radius: $radius; } @mixin border-bottom-right-radius($radius: 4px) { -webkit-border-bottom-right-radius: $radius; -moz-border-bottom-right-radius: $radius; -ms-border-bottom-right-radius: $radius; -o-border-bottom-right-radius: $radius; border-bottom-right-radius: $radius; } // border-image @mixin border-image($value) { -webkit-border-image: $value; /* Safari 5, Chrome */ -moz-border-image: $value; /* Firefox 3.5~15.0 */ -o-border-image: $value; /* Opera */ border-image: $value; /* Safari 6+, Chrome, New */ } @mixin border-image-source($value) { -webkit-border-image-source: $value; /* Safari 5, Chrome */ border-image-source: $value; /* Safari 6+, Chrome, IE11+, Opera 15+ */ } @mixin border-image-slice($value) { -webkit-border-image-slice: $value; /* Safari 5, Chrome */ border-image-slice: $value; /* Safari 6+, Chrome, IE11+, Opera 15+ */ } @mixin border-image-width($value) { -webkit-border-image-width: $value; /* Safari 5, Chrome */ border-image-width: $value; /* Safari 6+, Chrome, IE11+, Opera 15+ */ } @mixin border-image-outset($value) { -webkit-border-image-outset: $value; /* Safari 5, Chrome */ border-image-outset: $value; /* Safari 6+, Chrome, IE11+, Opera 15+ */ } @mixin border-image-repeat($value) { -webkit-border-image-repeat: $value; /* Safari 5, Chrome */ border-image-repeat: $value; /* Safari 6+, Chrome, IE11+, Opera 15+ */ } // box-shadow @mixin box-shadow($value) { -webkit-box-shadow: $value; /* Webkit browsers */ -moz-box-shadow: $value; /* Firefox */ -ms-box-shadow: $value; /* IE9 */ -o-box-shadow: $value; /* Opera(Old) */ box-shadow: $value; /* IE9+, News */ } //box-sizing @mixin box-sizing($value) { -webkit-box-sizing: $value; -moz-box-sizing: $value; box-sizing: $value; } // box-reflect @mixin box-reflect($value) { -webkit-box-reflect: $value; /* Chrome, Safari, iOS, Blackberry */ box-reflect: $value; /* None yet / Non-standard */ } // background @mixin linear-gradient($start-color, $end-color, $position : top, $perStart : 0%, $perEnd : 100%) { background: -webkit-linear-gradient($position, $start-color, $end-color); /* Webkit browsers */ background: -moz-linear-gradient( $position, $start-color, $end-color); /* Firefox(old) */ background: -o-linear-gradient( $position, $start-color, $end-color); /* Opera(old) */ background: -ms-linear-gradient( $position, $start-color $perStart, $end-color $perEnd); /* IE10 */ filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, start-colorstr=#{$start-color}, end-colorstr=#{$end-color}); /* IE9 */ ms-filter: "progid:DXImageTransform.Microsoft.gradient (GradientType=0, start-colorstr=#{$start-color}, end-colorstr=#{$end-color})"; /* IE8 */ background: linear-gradient( $position, $start-color $perStart, $end-color $perEnd); /* W3C */ } @mixin background-clip($value) { -webkit-background-clip: $value; background-clip: $value; /* Firefox 4.0, IE9+, Opera 10.5+, Chrome, Safari 3.0+ */ } @mixin background-origin($value) { -webkit-background-origin: $value; background-origin: $value; /* IE9+, Other */ } @mixin background-size($value) { -webkit-background-size: $value; /* Chrome, iOS, Safari */ -moz-background-size: $value; /* Firefox 3.6~4.0 */ -o-background-size: $value; /* Opera 9.5 */ background-size: $value; /* IE9+, New */ } // Column @mixin column-count($value) { -webkit-column-count: $value; /* Chrome, Safari, Android, Blackberry */ -moz-column-count: $value; /* Firefox 34+ */ column-count: $value; /* IE 10+, Opera 11.1+, New */ } @mixin column-gap($value) { -webkit-column-gap: $value; /* Chrome, Safari, Android, Blackberry */ -moz-column-gap: $value; /* Firefox 34+ */ column-gap: $value; /* IE 10+, Opera 11.1+, New */ } @mixin column-rule($value) { -webkit-column-rule: $value; /* Chrome, Safari, Android, Blackberry */ -moz-column-rule: $value; /* Firefox 34+ */ column-rule: $value; /* IE 10+, Opera 11.1+, New */ } @mixin column-rule-color($value) { -webkit-column-rule-color: $value; /* Chrome, Safari, Android, Blackberry */ -moz-column-rule-color: $value; /* Firefox 34+ */ column-rule-color: $value; /* IE 10+, Opera 11.1+, New */ } @mixin column-rule-style($value) { -webkit-column-rule-style: $value; /* Chrome, Safari, Android, Blackberry */ -moz-column-rule-style: $value; /* Firefox 34+ */ column-rule-style: $value; /* IE 10+, Opera 11.1+, New */ } @mixin column-rule-width($value) { -webkit-column-rule-width: $value; /* Chrome, Safari, Android, Blackberry */ -moz-column-rule-width: $value; /* Firefox 34+ */ column-rule-width: $value; /* IE 10+, Opera 11.1+, New */ } @mixin column-fill($value) { -webkit-column-fill: $value; /* None yet */ -moz-column-fill: $value; /* Firefox 13.0+ */ column-fill: $value; /* None yet / Non-standard */ } @mixin column-span($value) { -webkit-column-span: $value; /* Safari, Chrome, iOS 7.0+, Android, Opera 26+ */ -moz-column-span: $value; /* Firefox 34+ */ column-span: $value; /* IE10+, Opera Mini */ } @mixin column-width($value) { -webkit-column-width: $value; /* Safari, Chrome, iOS 7.0+, Android, Opera 26+ */ -moz-column-width: $value; /* Firefox */ column-width: $value; /* IE10+, Opera */ } // columns: column-width column-count; @mixin columns($value) { -webkit-columns: $value; /* Safari, Chrome, iOS 7.0+, Android, Opera 26+ */ -moz-columns: $value; /* Firefox */ columns: $value; /* IE10+, Opera */ } // clip-path @mixin clip-path($value) { -webkit-clip-path: $value; /* Chrome, iOS, Safari */ clip-path: $value; } // display @mixin display-grid() { display: -ms-grid; /* IE 10 */ display: grid; /* None yet */ } @mixin display-flex() { display: -webkit-box; /* Old - iOS 6-, Safari 3.1~6, Blackberry 7 */ display: -ms-flexbox; /* TWEENER - IE 10 */ display: -webkit-flex; /* New - Safari 6.1+. iOS 7.1+, Blackberry 10 */ display: flex; /* New, Spec - Firefox, Chrome, Opera */ } @mixin inline-flex($value) { -webkit-inline-flex: $value; /* Chrome 21.0+ */ inline-flex: $value; /* Firefox 20+, Opera 12.5 */ } @mixin flex($value) { -webkit-box-flex: $value; /* Old - iOS 6-, Safari 3.1~6 */ -webkit-flex: $value; /* Safari 6.1+. iOS 7.1+, Blackberry 10 */ -ms-flex: $value; /* IE 10 */ flex: $value; /* New, Spec - Firefox, Chrome, Opera */ } @mixin flex-direction($value) { -webkit-flex-direction: $value; /* Chrome 21.0+, But Safari & Android & iOS Not supported. */ flex-direction: $value; /* Firefox 28+, IE11, Opera 12.10 */ } @mixin flex-basis($value) { -webkit-flex-basis: $value; /* Chrome 21.0+, But Safari & Android & iOS Not supported. */ flex-basis: $value; /* Firefox 22+, IE11, Opera 12.10 */ } @mixin flex-flow($value) { -webkit-flex-flow: $value; /* Chrome 21.0+, But Safari & Android & iOS Not supported. */ flex-flow: $value; /* Firefox 28+, IE11, Opera 12.10 */ } @mixin flex-grow($value) { -webkit-flex-grow: $value; /* Chrome 21.0+, But Safari & Android & iOS Not supported. */ flex-grow: $value; /* Firefox 20+, Opera 12.10, IE Not supported. */ } @mixin flex-shrink($value) { -webkit-flex-shrink: $value; /* Chrome 21.0+, But Safari & Android & iOS Not supported. */ flex-shrink: $value; /* Firefox 20+, Opera 12.10, IE Not supported. */ } @mixin flex-wrap($value) { -webkit-flex-wrap: $value; /* Safari 6.1+, Chrome 21.0+, Android 4.4+, iOS 7.0+ */ flex-wrap: $value; /* Firefox 28+, IE11, Opera 12.10 */ } @mixin order($value) { -webkit-order: $value; /* Chrome 21+, Safari Not supported. */ -ms-flex-order: $value; /* IE 10.0 */ order: $value; /* Firefox 20+, Opera 12.10 */ } // flow @mixin flow-into($value) { -webkit-flow-into: $value; /* Safari 7.1+, iOS Safari 7.1+ */ -ms-flow-into: $value; /* IE10+ */ flow-into: $value; /* None yet */ } @mixin flow-from($value) { -webkit-flow-from: $value; /* Safari 7.1+, iOS Safari 7.1+ */ -ms-flow-from: $value; /* IE10+ */ flow-from: $value; /* None yet */ } // filter @mixin filter($value) { -webkit-filter: $value; /* Chrome 23+, Safari 6.0+, Blackberry 10.0+ */ filter: $value; /* None yet */ } // filter blur @mixin filter-blur($value : 10px, $ie-value : 10) { filter: progid:DXImageTransform.Microsoft.Blur(PixelRadius=#{$ie-value}, MakeShadow=false); /* IE6~IE9 */ -webkit-filter: blur($value); /* Chrome, Opera, iOS, Safari */ -moz-filter: blur($value); /* Firefox(Old) */ -ms-filter: blur($value); filter: blur($value); } @mixin font-kerning($value) { -webkit-font-kerning: $value; font-kerning: $value; } // font-feature-settings @mixin font-feature-settings($value) { -webkit-font-feature-settings: $value; /* Chrome 16-26, Blackberry 10 */ -moz-font-feature-settings: $value; /* Firefox 4-21 */ font-feature-settings: $value; /* IE 10, Safari 4.0-6.0 */ } @mixin font-variant-ligatures($value) { -webkit-font-variant-ligatures: $value; font-variant-ligatures: $value; } // hyphens @mixin hyphens($value : auto) { // Chrome 29- and Android 4.0 Browser support "-webkit-hyphens: none", but not the "auto" property. -webkit-hyphens: $value; /* Safari 5.1+, Chrome */ -moz-hyphens: $value; /* Firefox 6.0+ */ -ms-hyphens: $value; /* IE 10+ */ hyphens: $value; /* None yet */ } @mixin justify-content($value) { -webkit-justify-content: $value; /* Chrome 21+, Safari Not supported. */ justify-content: $value; /* Firefox 20+, Opera 12.10, IE Not supported. */ } // line @mixin line-break($value) { -webkit-line-break: $value; line-break: $value; } // margin @mixin margin-start($value) { -webkit-margin-start: $value; /* Safari 3.0+, Chrome */ -moz-margin-start: $value; /* Firefox 1.0+ */ margin-start: $value; /* None yet / Non-standard */ } @mixin margin-end($value) { -webkit-margin-end: $value; /* Safari 3.0+, Chrome */ -moz-margin-end: $value; /* Firefox 1.0+ */ margin-end: $value; /* None yet / Non-standard */ } // mask @mixin mask-image($value) { -webkit-mask-image: $value; /* Chrome, iOS, Safari */ mask-image: $value; /* None yet / Non-standard */ } @mixin mask-size($value) { -webkit-mask-size: $value; /* Chrome, iOS, Safari */ mask-size: $value; /* None yet / Non-standard */ } @mixin mask-clip($value) { -webkit-mask-clip: $value; /* Chrome, iOS, Safari */ mask-clip: $value; /* None yet / Non-standard */ } @mixin mask-position($value) { -webkit-mask-position: $value; /* Chrome, iOS, Safari */ mask-position: $value; /* None yet / Non-standard */ } @mixin mask-position-x($value) { -webkit-mask-position-x: $value; /* Chrome, iOS, Safari */ mask-position-x: $value; /* None yet / Non-standard */ } @mixin mask-position-y($value) { -webkit-mask-position-y: $value; /* Chrome, iOS, Safari */ mask-position-y: $value; /* None yet / Non-standard */ } @mixin mask-origin($value) { -webkit-mask-origin: $value; /* Chrome, iOS, Safari */ mask-origin: $value; /* None yet / Non-standard */ } @mixin mask-repeat($value) { -webkit-mask-repeat: $value; /* Chrome, iOS, Safari */ mask-repeat: $value; /* None yet / Non-standard */ } @mixin mask-attachment($value) { -webkit-mask-attachment: $value; /* Chrome, iOS, Safari */ mask-attachment: $value; /* None yet / Non-standard */ } @mixin mask-composite($value) { -webkit-mask-composite: $value; /* Chrome, iOS, Safari */ mask-composite: $value; /* None yet / Non-standard */ } @mixin mask-box-image($value) { -webkit-mask-box-image: $value; /* Chrome, iOS, Safari */ mask-box-image: $value; /* None yet / Non-standard */ } // opacity @mixin opacity($opacity) { opacity: $opacity; /* W3C */ filter: alpha(opacity=($opacity * 100)); /* IE */ } // padding @mixin padding-start($value) { -webkit-padding-start: $value; /* Safari, Chrome, WebKit */ -moz-padding-start: $value; /* Firefox 3+ */ padding-start: $value; } @mixin padding-end($value) { -webkit-padding-end: $value; /* Safari, Chrome, WebKit */ -moz-padding-end: $value; /* Firefox 3+ */ padding-end: $value; } // ruby-position @mixin ruby-position($value) { -webkit-ruby-position: $value; /* Blink, Webkit */ ruby-position: $value; /* Firefox, IE */ } // Text @mixin text-size-adjust($value) { -webkit-text-size-adjust: $value; /* Chrome 27+ */ -moz-text-size-adjust: $value; /* Firefox */ text-size-adjust: $value; /* None yet */ } @mixin text-align-last($value) { -webkit-text-align-last: $value; /* Chrome 35+, Safari Not supported. */ -moz-text-align-last: $value; /* Firefox 12.0 */ text-align-last: $value; /* IE 5.5+ */ } @mixin text-justify($value) { -webkit-text-justify: $value; text-justify: $value; } @mixin text-decoration-color($value) { -webkit-text-decoration-color: $value; text-decoration-color: $value; } @mixin text-decoration-line($value) { -webkit-text-decoration-line: $value; text-decoration-line: $value; } @mixin text-decoration-style($value) { -webkit-text-decoration-style: $value; text-decoration-style: $value; } @mixin text-orientation($value) { -webkit-text-orientation: $value; text-orientation: $value; } @mixin text-underline-position($value) { -webkit-text-underline-position: $value; /* Chrome 33 not fully supported. */ text-underline-position: $value; /* IE 5 not fully supported. */ } @mixin text-emphasis($value) { -webkit-text-emphasis: $value; /* Blink */ text-emphasis: $value; /* WebKit */ } @mixin text-emphasis-color($value) { -webkit-text-emphasis-color: $value; /* Blink */ text-emphasis-color: $value; /* WebKit */ } @mixin text-emphasis-style($value) { -webkit-text-emphasis-style: $value; /* Blink */ text-emphasis-style: $value; /* WebKit */ } @mixin text-emphasis-position($value) { -webkit-text-emphasis-position: $value; /* Blink */ text-emphasis-position: $value; /* WebKit */ } // tab @mixin tab-size($value) { -webkit-tab-size: $value; /* Chrome 21+, Safari 6.1+ */ -moz-tab-size: $value; /* Firefox 4.0 */ -o-tab-size: $value; /* Opera 10.6~15 */ tab-size: $value; /* Blink & Webkit */ } // input-placeholder @mixin input-placeholder($seletor) { #{$seletor}::-webkit-input-placeholder { @content; } #{$seletor}:-moz-placeholder { /* Firefox 4~18 */ @content; } #{$seletor}::-moz-placeholder { /* Firefox 19+ */ @content; } #{$seletor}:-ms-input-placeholder { /* IE10+ */ @content; } } ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/scss/lib/variables.scss ================================================ @charset "UTF-8"; // Global Variables $prefix : ".editormd-"; $color : #666; $mainColor : #2196F3; $primaryColor : $mainColor; $secondColor : #33CC66; $thirdColor : #999999; $borderColor : #ddd; ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/scss/prettify.scss ================================================ @charset "UTF-8"; /*! Pretty printing styles. Used with prettify.js. */ /* SPAN elements with the classes below are added by prettyprint. */ .pln { color: #000 } /* plain text */ @media screen { .str { color: #080 } /* string content */ .kwd { color: #008 } /* a keyword */ .com { color: #800 } /* a comment */ .typ { color: #606 } /* a type name */ .lit { color: #066 } /* a literal value */ /* punctuation, lisp open bracket, lisp close bracket */ .pun, .opn, .clo { color: #660 } .tag { color: #008 } /* a markup tag name */ .atn { color: #606 } /* a markup attribute name */ .atv { color: #080 } /* a markup attribute value */ .dec, .var { color: #606 } /* a declaration; a variable name */ .fun { color: red } /* a function name */ } /* Use higher contrast and text-weight for printable form. */ @media print, projection { .str { color: #060 } .kwd { color: #006; font-weight: bold } .com { color: #600; font-style: italic } .typ { color: #404; font-weight: bold } .lit { color: #044 } .pun, .opn, .clo { color: #440 } .tag { color: #006; font-weight: bold } .atn { color: #404 } .atv { color: #060 } } /* Put a border around prettyprinted code snippets. */ pre.prettyprint { padding: 2px; border: 1px solid #888 } /* Specify class=linenums on a pre to get line numbering */ ol.linenums { margin-top: 0; margin-bottom: 0 } /* IE indents via margin-left */ li.L0, li.L1, li.L2, li.L3, li.L5, li.L6, li.L7, li.L8 { list-style-type: none } /* Alternate shading for lines */ li.L1, li.L3, li.L5, li.L7, li.L9 { background: #eee } ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/editor-md/src/editormd.js ================================================ ;(function(factory) { "use strict"; // CommonJS/Node.js if (typeof require === "function" && typeof exports === "object" && typeof module === "object") { module.exports = factory; } else if (typeof define === "function") // AMD/CMD/Sea.js { if (define.amd) // for Require.js { /* Require.js define replace */ } else { define(["jquery"], factory); // for Sea.js } } else { window.editormd = factory(); } }(function() { /* Require.js assignment replace */ "use strict"; var $ = (typeof (jQuery) !== "undefined") ? jQuery : Zepto; if (typeof ($) === "undefined") { return ; } /** * editormd * * @param {String} id 编辑器的ID * @param {Object} options 配置选项 Key/Value * @returns {Object} editormd 返回editormd对象 */ var editormd = function (id, options) { return new editormd.fn.init(id, options); }; editormd.title = editormd.$name = "Editor.md"; editormd.version = "1.5.0"; editormd.homePage = "https://pandao.github.io/editor.md/"; editormd.classPrefix = "editormd-"; editormd.toolbarModes = { full : [ "undo", "redo", "|", "bold", "del", "italic", "quote", "ucwords", "uppercase", "lowercase", "|", "h1", "h2", "h3", "h4", "h5", "h6", "|", "list-ul", "list-ol", "hr", "|", "link", "reference-link", "image", "code", "preformatted-text", "code-block", "table", "datetime", "emoji", "html-entities", "pagebreak", "|", "goto-line", "watch", "preview", "fullscreen", "clear", "search", "|", "help", "info" ], simple : [ "undo", "redo", "|", "bold", "del", "italic", "quote", "uppercase", "lowercase", "|", "h1", "h2", "h3", "h4", "h5", "h6", "|", "list-ul", "list-ol", "hr", "|", "watch", "preview", "fullscreen", "|", "help", "info" ], mini : [ "undo", "redo", "|", "watch", "preview", "|", "help", "info" ] }; editormd.defaults = { mode : "gfm", //gfm or markdown name : "", // Form element name value : "", // value for CodeMirror, if mode not gfm/markdown theme : "", // Editor.md self themes, before v1.5.0 is CodeMirror theme, default empty editorTheme : "default", // Editor area, this is CodeMirror theme at v1.5.0 previewTheme : "", // Preview area theme, default empty markdown : "", // Markdown source code appendMarkdown : "", // if in init textarea value not empty, append markdown to textarea width : "100%", height : "100%", path : "./lib/", // Dependents module file directory pluginPath : "", // If this empty, default use settings.path + "../plugins/" delay : 300, // Delay parse markdown to html, Uint : ms autoLoadModules : true, // Automatic load dependent module files watch : true, placeholder : "Enjoy Markdown! coding now...", gotoLine : true, codeFold : false, autoHeight : false, autoFocus : true, autoCloseTags : true, searchReplace : true, syncScrolling : true, // true | false | "single", default true readOnly : false, tabSize : 4, indentUnit : 4, lineNumbers : true, lineWrapping : true, autoCloseBrackets : true, showTrailingSpace : true, matchBrackets : true, indentWithTabs : true, styleSelectedText : true, matchWordHighlight : true, // options: true, false, "onselected" styleActiveLine : true, // Highlight the current line dialogLockScreen : true, dialogShowMask : true, dialogDraggable : true, dialogMaskBgColor : "#fff", dialogMaskOpacity : 0.1, fontSize : "13px", saveHTMLToTextarea : false, disabledKeyMaps : [], onload : function() {}, onresize : function() {}, onchange : function() {}, onwatch : null, onunwatch : null, onpreviewing : function() {}, onpreviewed : function() {}, onfullscreen : function() {}, onfullscreenExit : function() {}, onscroll : function() {}, onpreviewscroll : function() {}, imageUpload : false, imageFormats : ["jpg", "jpeg", "gif", "png", "bmp", "webp"], imageUploadURL : "", crossDomainUpload : false, uploadCallbackURL : "", toc : true, // Table of contents tocm : false, // Using [TOCM], auto create ToC dropdown menu tocTitle : "", // for ToC dropdown menu btn tocDropdown : false, tocContainer : "", tocStartLevel : 1, // Said from H1 to create ToC htmlDecode : false, // Open the HTML tag identification pageBreak : true, // Enable parse page break [========] atLink : true, // for @link emailLink : true, // for email address auto link taskList : false, // Enable Github Flavored Markdown task lists emoji : false, // :emoji: , Support Github emoji, Twitter Emoji (Twemoji); // Support FontAwesome icon emoji :fa-xxx: > Using fontAwesome icon web fonts; // Support Editor.md logo icon emoji :editormd-logo: :editormd-logo-1x: > 1~8x; tex : false, // TeX(LaTeX), based on KaTeX flowChart : false, // flowChart.js only support IE9+ sequenceDiagram : false, // sequenceDiagram.js only support IE9+ previewCodeHighlight : true, toolbar : true, // show/hide toolbar toolbarAutoFixed : true, // on window scroll auto fixed position toolbarIcons : "full", toolbarTitles : {}, toolbarHandlers : { ucwords : function() { return editormd.toolbarHandlers.ucwords; }, lowercase : function() { return editormd.toolbarHandlers.lowercase; } }, toolbarCustomIcons : { // using html tag create toolbar icon, unused default tag. lowercase : "a", "ucwords" : "Aa" }, toolbarIconsClass : { undo : "fa-undo", redo : "fa-repeat", bold : "fa-bold", del : "fa-strikethrough", italic : "fa-italic", quote : "fa-quote-left", uppercase : "fa-font", h1 : editormd.classPrefix + "bold", h2 : editormd.classPrefix + "bold", h3 : editormd.classPrefix + "bold", h4 : editormd.classPrefix + "bold", h5 : editormd.classPrefix + "bold", h6 : editormd.classPrefix + "bold", "list-ul" : "fa-list-ul", "list-ol" : "fa-list-ol", hr : "fa-minus", link : "fa-link", "reference-link" : "fa-anchor", image : "fa-picture-o", code : "fa-code", "preformatted-text" : "fa-file-code-o", "code-block" : "fa-file-code-o", table : "fa-table", datetime : "fa-clock-o", emoji : "fa-smile-o", "html-entities" : "fa-copyright", pagebreak : "fa-newspaper-o", "goto-line" : "fa-terminal", // fa-crosshairs watch : "fa-eye-slash", unwatch : "fa-eye", preview : "fa-desktop", search : "fa-search", fullscreen : "fa-arrows-alt", clear : "fa-eraser", help : "fa-question-circle", info : "fa-info-circle" }, toolbarIconTexts : {}, lang : { name : "zh-cn", description : "开源在线Markdown编辑器
                  Open source online Markdown editor.", tocTitle : "目录", toolbar : { undo : "撤销(Ctrl+Z)", redo : "重做(Ctrl+Y)", bold : "粗体", del : "删除线", italic : "斜体", quote : "引用", ucwords : "将每个单词首字母转成大写", uppercase : "将所选转换成大写", lowercase : "将所选转换成小写", h1 : "标题1", h2 : "标题2", h3 : "标题3", h4 : "标题4", h5 : "标题5", h6 : "标题6", "list-ul" : "无序列表", "list-ol" : "有序列表", hr : "横线", link : "链接", "reference-link" : "引用链接", image : "添加图片", code : "行内代码", "preformatted-text" : "预格式文本 / 代码块(缩进风格)", "code-block" : "代码块(多语言风格)", table : "添加表格", datetime : "日期时间", emoji : "Emoji表情", "html-entities" : "HTML实体字符", pagebreak : "插入分页符", "goto-line" : "跳转到行", watch : "关闭实时预览", unwatch : "开启实时预览", preview : "全窗口预览HTML(按 Shift + ESC还原)", fullscreen : "全屏(按ESC还原)", clear : "清空", search : "搜索", help : "使用帮助", info : "关于" + editormd.title }, buttons : { enter : "确定", cancel : "取消", close : "关闭" }, dialog : { link : { title : "添加链接", url : "链接地址", urlTitle : "链接标题", urlEmpty : "错误:请填写链接地址。" }, referenceLink : { title : "添加引用链接", name : "引用名称", url : "链接地址", urlId : "链接ID", urlTitle : "链接标题", nameEmpty: "错误:引用链接的名称不能为空。", idEmpty : "错误:请填写引用链接的ID。", urlEmpty : "错误:请填写引用链接的URL地址。" }, image : { title : "添加图片", url : "图片地址", link : "图片链接", alt : "图片描述", uploadButton : "本地上传", imageURLEmpty : "错误:图片地址不能为空。", uploadFileEmpty : "错误:上传的图片不能为空。", formatNotAllowed : "错误:只允许上传图片文件,允许上传的图片文件格式有:" }, preformattedText : { title : "添加预格式文本或代码块", emptyAlert : "错误:请填写预格式文本或代码的内容。" }, codeBlock : { title : "添加代码块", selectLabel : "代码语言:", selectDefaultText : "请选择代码语言", otherLanguage : "其他语言", unselectedLanguageAlert : "错误:请选择代码所属的语言类型。", codeEmptyAlert : "错误:请填写代码内容。" }, htmlEntities : { title : "HTML 实体字符" }, help : { title : "使用帮助" } } } }; editormd.classNames = { tex : editormd.classPrefix + "tex" }; editormd.dialogZindex = 99999; editormd.$katex = null; editormd.$marked = null; editormd.$CodeMirror = null; editormd.$prettyPrint = null; var timer, flowchartTimer; editormd.prototype = editormd.fn = { state : { watching : false, loaded : false, preview : false, fullscreen : false }, /** * 构造函数/实例初始化 * Constructor / instance initialization * * @param {String} id 编辑器的ID * @param {Object} [options={}] 配置选项 Key/Value * @returns {editormd} 返回editormd的实例对象 */ init : function (id, options) { options = options || {}; if (typeof id === "object") { options = id; } var _this = this; var classPrefix = this.classPrefix = editormd.classPrefix; var settings = this.settings = $.extend(true, editormd.defaults, options); id = (typeof id === "object") ? settings.id : id; var editor = this.editor = $("#" + id); this.id = id; this.lang = settings.lang; var classNames = this.classNames = { textarea : { html : classPrefix + "html-textarea", markdown : classPrefix + "markdown-textarea" } }; settings.pluginPath = (settings.pluginPath === "") ? settings.path + "../plugins/" : settings.pluginPath; this.state.watching = (settings.watch) ? true : false; if ( !editor.hasClass("editormd") ) { editor.addClass("editormd"); } editor.css({ width : (typeof settings.width === "number") ? settings.width + "px" : settings.width, height : (typeof settings.height === "number") ? settings.height + "px" : settings.height }); if (settings.autoHeight) { editor.css("height", "auto"); } var markdownTextarea = this.markdownTextarea = editor.children("textarea"); if (markdownTextarea.length < 1) { editor.append(""); markdownTextarea = this.markdownTextarea = editor.children("textarea"); } markdownTextarea.addClass(classNames.textarea.markdown).attr("placeholder", settings.placeholder); if (typeof markdownTextarea.attr("name") === "undefined" || markdownTextarea.attr("name") === "") { markdownTextarea.attr("name", (settings.name !== "") ? settings.name : id + "-markdown-doc"); } var appendElements = [ (!settings.readOnly) ? "" : "", ( (settings.saveHTMLToTextarea) ? "" : "" ), "
                  ", "
                  ", "
                  " ].join("\n"); editor.append(appendElements).addClass(classPrefix + "vertical"); if (settings.theme !== "") { editor.addClass(classPrefix + "theme-" + settings.theme); } this.mask = editor.children("." + classPrefix + "mask"); this.containerMask = editor.children("." + classPrefix + "container-mask"); if (settings.markdown !== "") { markdownTextarea.val(settings.markdown); } if (settings.appendMarkdown !== "") { markdownTextarea.val(markdownTextarea.val() + settings.appendMarkdown); } this.htmlTextarea = editor.children("." + classNames.textarea.html); this.preview = editor.children("." + classPrefix + "preview"); this.previewContainer = this.preview.children("." + classPrefix + "preview-container"); if (settings.previewTheme !== "") { this.preview.addClass(classPrefix + "preview-theme-" + settings.previewTheme); } if (typeof define === "function" && define.amd) { if (typeof katex !== "undefined") { editormd.$katex = katex; } if (settings.searchReplace && !settings.readOnly) { editormd.loadCSS(settings.path + "codemirror/addon/dialog/dialog"); editormd.loadCSS(settings.path + "codemirror/addon/search/matchesonscrollbar"); } } if ((typeof define === "function" && define.amd) || !settings.autoLoadModules) { if (typeof CodeMirror !== "undefined") { editormd.$CodeMirror = CodeMirror; } if (typeof marked !== "undefined") { editormd.$marked = marked; } this.setCodeMirror().setToolbar().loadedDisplay(); } else { this.loadQueues(); } return this; }, /** * 所需组件加载队列 * Required components loading queue * * @returns {editormd} 返回editormd的实例对象 */ loadQueues : function() { var _this = this; var settings = this.settings; var loadPath = settings.path; var loadFlowChartOrSequenceDiagram = function() { if (editormd.isIE8) { _this.loadedDisplay(); return ; } if (settings.flowChart || settings.sequenceDiagram) { editormd.loadScript(loadPath + "raphael.min", function() { editormd.loadScript(loadPath + "underscore.min", function() { if (!settings.flowChart && settings.sequenceDiagram) { editormd.loadScript(loadPath + "sequence-diagram.min", function() { _this.loadedDisplay(); }); } else if (settings.flowChart && !settings.sequenceDiagram) { editormd.loadScript(loadPath + "flowchart.min", function() { editormd.loadScript(loadPath + "jquery.flowchart.min", function() { _this.loadedDisplay(); }); }); } else if (settings.flowChart && settings.sequenceDiagram) { editormd.loadScript(loadPath + "flowchart.min", function() { editormd.loadScript(loadPath + "jquery.flowchart.min", function() { editormd.loadScript(loadPath + "sequence-diagram.min", function() { _this.loadedDisplay(); }); }); }); } }); }); } else { _this.loadedDisplay(); } }; editormd.loadCSS(loadPath + "codemirror/codemirror.min"); if (settings.searchReplace && !settings.readOnly) { editormd.loadCSS(loadPath + "codemirror/addon/dialog/dialog"); editormd.loadCSS(loadPath + "codemirror/addon/search/matchesonscrollbar"); } if (settings.codeFold) { editormd.loadCSS(loadPath + "codemirror/addon/fold/foldgutter"); } editormd.loadScript(loadPath + "codemirror/codemirror.min", function() { editormd.$CodeMirror = CodeMirror; editormd.loadScript(loadPath + "codemirror/modes.min", function() { editormd.loadScript(loadPath + "codemirror/addons.min", function() { _this.setCodeMirror(); if (settings.mode !== "gfm" && settings.mode !== "markdown") { _this.loadedDisplay(); return false; } _this.setToolbar(); editormd.loadScript(loadPath + "marked.min", function() { editormd.$marked = marked; if (settings.previewCodeHighlight) { editormd.loadScript(loadPath + "prettify.min", function() { loadFlowChartOrSequenceDiagram(); }); } else { loadFlowChartOrSequenceDiagram(); } }); }); }); }); return this; }, /** * 设置 Editor.md 的整体主题,主要是工具栏 * Setting Editor.md theme * * @returns {editormd} 返回editormd的实例对象 */ setTheme : function(theme) { var editor = this.editor; var oldTheme = this.settings.theme; var themePrefix = this.classPrefix + "theme-"; editor.removeClass(themePrefix + oldTheme).addClass(themePrefix + theme); this.settings.theme = theme; return this; }, /** * 设置 CodeMirror(编辑区)的主题 * Setting CodeMirror (Editor area) theme * * @returns {editormd} 返回editormd的实例对象 */ setEditorTheme : function(theme) { var settings = this.settings; settings.editorTheme = theme; if (theme !== "default") { editormd.loadCSS(settings.path + "codemirror/theme/" + settings.editorTheme); } this.cm.setOption("theme", theme); return this; }, /** * setEditorTheme() 的别名 * setEditorTheme() alias * * @returns {editormd} 返回editormd的实例对象 */ setCodeMirrorTheme : function (theme) { this.setEditorTheme(theme); return this; }, /** * 设置 Editor.md 的主题 * Setting Editor.md theme * * @returns {editormd} 返回editormd的实例对象 */ setPreviewTheme : function(theme) { var preview = this.preview; var oldTheme = this.settings.previewTheme; var themePrefix = this.classPrefix + "preview-theme-"; preview.removeClass(themePrefix + oldTheme).addClass(themePrefix + theme); this.settings.previewTheme = theme; return this; }, /** * 配置和初始化CodeMirror组件 * CodeMirror initialization * * @returns {editormd} 返回editormd的实例对象 */ setCodeMirror : function() { var settings = this.settings; var editor = this.editor; if (settings.editorTheme !== "default") { editormd.loadCSS(settings.path + "codemirror/theme/" + settings.editorTheme); } var codeMirrorConfig = { mode : settings.mode, theme : settings.editorTheme, tabSize : settings.tabSize, dragDrop : false, autofocus : settings.autoFocus, autoCloseTags : settings.autoCloseTags, readOnly : (settings.readOnly) ? "nocursor" : false, indentUnit : settings.indentUnit, lineNumbers : settings.lineNumbers, lineWrapping : settings.lineWrapping, extraKeys : { "Ctrl-Q": function(cm) { cm.foldCode(cm.getCursor()); } }, foldGutter : settings.codeFold, gutters : ["CodeMirror-linenumbers", "CodeMirror-foldgutter"], matchBrackets : settings.matchBrackets, indentWithTabs : settings.indentWithTabs, styleActiveLine : settings.styleActiveLine, styleSelectedText : settings.styleSelectedText, autoCloseBrackets : settings.autoCloseBrackets, showTrailingSpace : settings.showTrailingSpace, highlightSelectionMatches : ( (!settings.matchWordHighlight) ? false : { showToken: (settings.matchWordHighlight === "onselected") ? false : /\w/ } ) }; this.codeEditor = this.cm = editormd.$CodeMirror.fromTextArea(this.markdownTextarea[0], codeMirrorConfig); this.codeMirror = this.cmElement = editor.children(".CodeMirror"); if (settings.value !== "") { this.cm.setValue(settings.value); } this.codeMirror.css({ fontSize : settings.fontSize, width : (!settings.watch) ? "100%" : "50%" }); if (settings.autoHeight) { this.codeMirror.css("height", "auto"); this.cm.setOption("viewportMargin", Infinity); } if (!settings.lineNumbers) { this.codeMirror.find(".CodeMirror-gutters").css("border-right", "none"); } return this; }, /** * 获取CodeMirror的配置选项 * Get CodeMirror setting options * * @returns {Mixed} return CodeMirror setting option value */ getCodeMirrorOption : function(key) { return this.cm.getOption(key); }, /** * 配置和重配置CodeMirror的选项 * CodeMirror setting options / resettings * * @returns {editormd} 返回editormd的实例对象 */ setCodeMirrorOption : function(key, value) { this.cm.setOption(key, value); return this; }, /** * 添加 CodeMirror 键盘快捷键 * Add CodeMirror keyboard shortcuts key map * * @returns {editormd} 返回editormd的实例对象 */ addKeyMap : function(map, bottom) { this.cm.addKeyMap(map, bottom); return this; }, /** * 移除 CodeMirror 键盘快捷键 * Remove CodeMirror keyboard shortcuts key map * * @returns {editormd} 返回editormd的实例对象 */ removeKeyMap : function(map) { this.cm.removeKeyMap(map); return this; }, /** * 跳转到指定的行 * Goto CodeMirror line * * @param {String|Intiger} line line number or "first"|"last" * @returns {editormd} 返回editormd的实例对象 */ gotoLine : function (line) { var settings = this.settings; if (!settings.gotoLine) { return this; } var cm = this.cm; var editor = this.editor; var count = cm.lineCount(); var preview = this.preview; if (typeof line === "string") { if(line === "last") { line = count; } if (line === "first") { line = 1; } } if (typeof line !== "number") { alert("Error: The line number must be an integer."); return this; } line = parseInt(line) - 1; if (line > count) { alert("Error: The line number range 1-" + count); return this; } cm.setCursor( {line : line, ch : 0} ); var scrollInfo = cm.getScrollInfo(); var clientHeight = scrollInfo.clientHeight; var coords = cm.charCoords({line : line, ch : 0}, "local"); cm.scrollTo(null, (coords.top + coords.bottom - clientHeight) / 2); if (settings.watch) { var cmScroll = this.codeMirror.find(".CodeMirror-scroll")[0]; var height = $(cmScroll).height(); var scrollTop = cmScroll.scrollTop; var percent = (scrollTop / cmScroll.scrollHeight); if (scrollTop === 0) { preview.scrollTop(0); } else if (scrollTop + height >= cmScroll.scrollHeight - 16) { preview.scrollTop(preview[0].scrollHeight); } else { preview.scrollTop(preview[0].scrollHeight * percent); } } cm.focus(); return this; }, /** * 扩展当前实例对象,可同时设置多个或者只设置一个 * Extend editormd instance object, can mutil setting. * * @returns {editormd} this(editormd instance object.) */ extend : function() { if (typeof arguments[1] !== "undefined") { if (typeof arguments[1] === "function") { arguments[1] = $.proxy(arguments[1], this); } this[arguments[0]] = arguments[1]; } if (typeof arguments[0] === "object" && typeof arguments[0].length === "undefined") { $.extend(true, this, arguments[0]); } return this; }, /** * 设置或扩展当前实例对象,单个设置 * Extend editormd instance object, one by one * * @param {String|Object} key option key * @param {String|Object} value option value * @returns {editormd} this(editormd instance object.) */ set : function (key, value) { if (typeof value !== "undefined" && typeof value === "function") { value = $.proxy(value, this); } this[key] = value; return this; }, /** * 重新配置 * Resetting editor options * * @param {String|Object} key option key * @param {String|Object} value option value * @returns {editormd} this(editormd instance object.) */ config : function(key, value) { var settings = this.settings; if (typeof key === "object") { settings = $.extend(true, settings, key); } if (typeof key === "string") { settings[key] = value; } this.settings = settings; this.recreate(); return this; }, /** * 注册事件处理方法 * Bind editor event handle * * @param {String} eventType event type * @param {Function} callback 回调函数 * @returns {editormd} this(editormd instance object.) */ on : function(eventType, callback) { var settings = this.settings; if (typeof settings["on" + eventType] !== "undefined") { settings["on" + eventType] = $.proxy(callback, this); } return this; }, /** * 解除事件处理方法 * Unbind editor event handle * * @param {String} eventType event type * @returns {editormd} this(editormd instance object.) */ off : function(eventType) { var settings = this.settings; if (typeof settings["on" + eventType] !== "undefined") { settings["on" + eventType] = function(){}; } return this; }, /** * 显示工具栏 * Display toolbar * * @param {Function} [callback=function(){}] 回调函数 * @returns {editormd} 返回editormd的实例对象 */ showToolbar : function(callback) { var settings = this.settings; if(settings.readOnly) { return this; } if (settings.toolbar && (this.toolbar.length < 1 || this.toolbar.find("." + this.classPrefix + "menu").html() === "") ) { this.setToolbar(); } settings.toolbar = true; this.toolbar.show(); this.resize(); $.proxy(callback || function(){}, this)(); return this; }, /** * 隐藏工具栏 * Hide toolbar * * @param {Function} [callback=function(){}] 回调函数 * @returns {editormd} this(editormd instance object.) */ hideToolbar : function(callback) { var settings = this.settings; settings.toolbar = false; this.toolbar.hide(); this.resize(); $.proxy(callback || function(){}, this)(); return this; }, /** * 页面滚动时工具栏的固定定位 * Set toolbar in window scroll auto fixed position * * @returns {editormd} 返回editormd的实例对象 */ setToolbarAutoFixed : function(fixed) { var state = this.state; var editor = this.editor; var toolbar = this.toolbar; var settings = this.settings; if (typeof fixed !== "undefined") { settings.toolbarAutoFixed = fixed; } var autoFixedHandle = function(){ var $window = $(window); var top = $window.scrollTop(); if (!settings.toolbarAutoFixed) { return false; } if (top - editor.offset().top > 10 && top < editor.height()) { toolbar.css({ position : "fixed", width : editor.width() + "px", left : ($window.width() - editor.width()) / 2 + "px" }); } else { toolbar.css({ position : "absolute", width : "100%", left : 0 }); } }; if (!state.fullscreen && !state.preview && settings.toolbar && settings.toolbarAutoFixed) { $(window).bind("scroll", autoFixedHandle); } return this; }, /** * 配置和初始化工具栏 * Set toolbar and Initialization * * @returns {editormd} 返回editormd的实例对象 */ setToolbar : function() { var settings = this.settings; if(settings.readOnly) { return this; } var editor = this.editor; var preview = this.preview; var classPrefix = this.classPrefix; var toolbar = this.toolbar = editor.children("." + classPrefix + "toolbar"); if (settings.toolbar && toolbar.length < 1) { var toolbarHTML = "
                    "; editor.append(toolbarHTML); toolbar = this.toolbar = editor.children("." + classPrefix + "toolbar"); } if (!settings.toolbar) { toolbar.hide(); return this; } toolbar.show(); var icons = (typeof settings.toolbarIcons === "function") ? settings.toolbarIcons() : ((typeof settings.toolbarIcons === "string") ? editormd.toolbarModes[settings.toolbarIcons] : settings.toolbarIcons); var toolbarMenu = toolbar.find("." + this.classPrefix + "menu"), menu = ""; var pullRight = false; for (var i = 0, len = icons.length; i < len; i++) { var name = icons[i]; if (name === "||") { pullRight = true; } else if (name === "|") { menu += "
                  • |
                  • "; } else { var isHeader = (/h(\d)/.test(name)); var index = name; if (name === "watch" && !settings.watch) { index = "unwatch"; } var title = settings.lang.toolbar[index]; var iconTexts = settings.toolbarIconTexts[index]; var iconClass = settings.toolbarIconsClass[index]; title = (typeof title === "undefined") ? "" : title; iconTexts = (typeof iconTexts === "undefined") ? "" : iconTexts; iconClass = (typeof iconClass === "undefined") ? "" : iconClass; var menuItem = pullRight ? "
                  • " : "
                  • "; if (typeof settings.toolbarCustomIcons[name] !== "undefined" && typeof settings.toolbarCustomIcons[name] !== "function") { menuItem += settings.toolbarCustomIcons[name]; } else { menuItem += ""; menuItem += ""+((isHeader) ? name.toUpperCase() : ( (iconClass === "") ? iconTexts : "") ) + ""; menuItem += ""; } menuItem += "
                  • "; menu = pullRight ? menuItem + menu : menu + menuItem; } } toolbarMenu.html(menu); toolbarMenu.find("[title=\"Lowercase\"]").attr("title", settings.lang.toolbar.lowercase); toolbarMenu.find("[title=\"ucwords\"]").attr("title", settings.lang.toolbar.ucwords); this.setToolbarHandler(); this.setToolbarAutoFixed(); return this; }, /** * 工具栏图标事件处理对象序列 * Get toolbar icons event handlers * * @param {Object} cm CodeMirror的实例对象 * @param {String} name 要获取的事件处理器名称 * @returns {Object} 返回处理对象序列 */ dialogLockScreen : function() { $.proxy(editormd.dialogLockScreen, this)(); return this; }, dialogShowMask : function(dialog) { $.proxy(editormd.dialogShowMask, this)(dialog); return this; }, getToolbarHandles : function(name) { var toolbarHandlers = this.toolbarHandlers = editormd.toolbarHandlers; return (name && typeof toolbarIconHandlers[name] !== "undefined") ? toolbarHandlers[name] : toolbarHandlers; }, /** * 工具栏图标事件处理器 * Bind toolbar icons event handle * * @returns {editormd} 返回editormd的实例对象 */ setToolbarHandler : function() { var _this = this; var settings = this.settings; if (!settings.toolbar || settings.readOnly) { return this; } var toolbar = this.toolbar; var cm = this.cm; var classPrefix = this.classPrefix; var toolbarIcons = this.toolbarIcons = toolbar.find("." + classPrefix + "menu > li > a"); var toolbarIconHandlers = this.getToolbarHandles(); toolbarIcons.bind(editormd.mouseOrTouch("click", "touchend"), function(event) { var icon = $(this).children(".fa"); var name = icon.attr("name"); var cursor = cm.getCursor(); var selection = cm.getSelection(); if (name === "") { return ; } _this.activeIcon = icon; if (typeof toolbarIconHandlers[name] !== "undefined") { $.proxy(toolbarIconHandlers[name], _this)(cm); } else { if (typeof settings.toolbarHandlers[name] !== "undefined") { $.proxy(settings.toolbarHandlers[name], _this)(cm, icon, cursor, selection); } } if (name !== "link" && name !== "reference-link" && name !== "image" && name !== "code-block" && name !== "preformatted-text" && name !== "watch" && name !== "preview" && name !== "search" && name !== "fullscreen" && name !== "info") { cm.focus(); } return false; }); return this; }, /** * 动态创建对话框 * Creating custom dialogs * * @param {Object} options 配置项键值对 Key/Value * @returns {dialog} 返回创建的dialog的jQuery实例对象 */ createDialog : function(options) { return $.proxy(editormd.createDialog, this)(options); }, /** * 创建关于Editor.md的对话框 * Create about Editor.md dialog * * @returns {editormd} 返回editormd的实例对象 */ createInfoDialog : function() { var _this = this; var editor = this.editor; var classPrefix = this.classPrefix; var infoDialogHTML = [ "
                    ", "
                    ", "

                    " + editormd.title + "v" + editormd.version + "

                    ", "

                    " + this.lang.description + "

                    ", "

                    " + editormd.homePage + "

                    ", "

                    Copyright © 2015 Pandao, The MIT License.

                    ", "
                    ", "", "
                    " ].join("\n"); editor.append(infoDialogHTML); var infoDialog = this.infoDialog = editor.children("." + classPrefix + "dialog-info"); infoDialog.find("." + classPrefix + "dialog-close").bind(editormd.mouseOrTouch("click", "touchend"), function() { _this.hideInfoDialog(); }); infoDialog.css("border", (editormd.isIE8) ? "1px solid #ddd" : "").css("z-index", editormd.dialogZindex).show(); this.infoDialogPosition(); return this; }, /** * 关于Editor.md对话居中定位 * Editor.md dialog position handle * * @returns {editormd} 返回editormd的实例对象 */ infoDialogPosition : function() { var infoDialog = this.infoDialog; var _infoDialogPosition = function() { infoDialog.css({ top : ($(window).height() - infoDialog.height()) / 2 + "px", left : ($(window).width() - infoDialog.width()) / 2 + "px" }); }; _infoDialogPosition(); $(window).resize(_infoDialogPosition); return this; }, /** * 显示关于Editor.md * Display about Editor.md dialog * * @returns {editormd} 返回editormd的实例对象 */ showInfoDialog : function() { $("html,body").css("overflow-x", "hidden"); var _this = this; var editor = this.editor; var settings = this.settings; var infoDialog = this.infoDialog = editor.children("." + this.classPrefix + "dialog-info"); if (infoDialog.length < 1) { this.createInfoDialog(); } this.lockScreen(true); this.mask.css({ opacity : settings.dialogMaskOpacity, backgroundColor : settings.dialogMaskBgColor }).show(); infoDialog.css("z-index", editormd.dialogZindex).show(); this.infoDialogPosition(); return this; }, /** * 隐藏关于Editor.md * Hide about Editor.md dialog * * @returns {editormd} 返回editormd的实例对象 */ hideInfoDialog : function() { $("html,body").css("overflow-x", ""); this.infoDialog.hide(); this.mask.hide(); this.lockScreen(false); return this; }, /** * 锁屏 * lock screen * * @param {Boolean} lock Boolean 布尔值,是否锁屏 * @returns {editormd} 返回editormd的实例对象 */ lockScreen : function(lock) { editormd.lockScreen(lock); this.resize(); return this; }, /** * 编辑器界面重建,用于动态语言包或模块加载等 * Recreate editor * * @returns {editormd} 返回editormd的实例对象 */ recreate : function() { var _this = this; var editor = this.editor; var settings = this.settings; this.codeMirror.remove(); this.setCodeMirror(); if (!settings.readOnly) { if (editor.find(".editormd-dialog").length > 0) { editor.find(".editormd-dialog").remove(); } if (settings.toolbar) { this.getToolbarHandles(); this.setToolbar(); } } this.loadedDisplay(true); return this; }, /** * 高亮预览HTML的pre代码部分 * highlight of preview codes * * @returns {editormd} 返回editormd的实例对象 */ previewCodeHighlight : function() { var settings = this.settings; var previewContainer = this.previewContainer; if (settings.previewCodeHighlight) { previewContainer.find("pre").addClass("prettyprint linenums"); if (typeof prettyPrint !== "undefined") { prettyPrint(); } } return this; }, /** * 解析TeX(KaTeX)科学公式 * TeX(KaTeX) Renderer * * @returns {editormd} 返回editormd的实例对象 */ katexRender : function() { if (timer === null) { return this; } this.previewContainer.find("." + editormd.classNames.tex).each(function(){ var tex = $(this); editormd.$katex.render(tex.text(), tex[0]); tex.find(".katex").css("font-size", "1.6em"); }); return this; }, /** * 解析和渲染流程图及时序图 * FlowChart and SequenceDiagram Renderer * * @returns {editormd} 返回editormd的实例对象 */ flowChartAndSequenceDiagramRender : function() { var $this = this; var settings = this.settings; var previewContainer = this.previewContainer; if (editormd.isIE8) { return this; } if (settings.flowChart) { if (flowchartTimer === null) { return this; } previewContainer.find(".flowchart").flowChart(); } if (settings.sequenceDiagram) { previewContainer.find(".sequence-diagram").sequenceDiagram({theme: "simple"}); } var preview = $this.preview; var codeMirror = $this.codeMirror; var codeView = codeMirror.find(".CodeMirror-scroll"); var height = codeView.height(); var scrollTop = codeView.scrollTop(); var percent = (scrollTop / codeView[0].scrollHeight); var tocHeight = 0; preview.find(".markdown-toc-list").each(function(){ tocHeight += $(this).height(); }); var tocMenuHeight = preview.find(".editormd-toc-menu").height(); tocMenuHeight = (!tocMenuHeight) ? 0 : tocMenuHeight; if (scrollTop === 0) { preview.scrollTop(0); } else if (scrollTop + height >= codeView[0].scrollHeight - 16) { preview.scrollTop(preview[0].scrollHeight); } else { preview.scrollTop((preview[0].scrollHeight + tocHeight + tocMenuHeight) * percent); } return this; }, /** * 注册键盘快捷键处理 * Register CodeMirror keyMaps (keyboard shortcuts). * * @param {Object} keyMap KeyMap key/value {"(Ctrl/Shift/Alt)-Key" : function(){}} * @returns {editormd} return this */ registerKeyMaps : function(keyMap) { var _this = this; var cm = this.cm; var settings = this.settings; var toolbarHandlers = editormd.toolbarHandlers; var disabledKeyMaps = settings.disabledKeyMaps; keyMap = keyMap || null; if (keyMap) { for (var i in keyMap) { if ($.inArray(i, disabledKeyMaps) < 0) { var map = {}; map[i] = keyMap[i]; cm.addKeyMap(keyMap); } } } else { for (var k in editormd.keyMaps) { var _keyMap = editormd.keyMaps[k]; var handle = (typeof _keyMap === "string") ? $.proxy(toolbarHandlers[_keyMap], _this) : $.proxy(_keyMap, _this); if ($.inArray(k, ["F9", "F10", "F11"]) < 0 && $.inArray(k, disabledKeyMaps) < 0) { var _map = {}; _map[k] = handle; cm.addKeyMap(_map); } } $(window).keydown(function(event) { var keymaps = { "120" : "F9", "121" : "F10", "122" : "F11" }; if ( $.inArray(keymaps[event.keyCode], disabledKeyMaps) < 0 ) { switch (event.keyCode) { case 120: $.proxy(toolbarHandlers["watch"], _this)(); return false; break; case 121: $.proxy(toolbarHandlers["preview"], _this)(); return false; break; case 122: $.proxy(toolbarHandlers["fullscreen"], _this)(); return false; break; default: break; } } }); } return this; }, /** * 绑定同步滚动 * * @returns {editormd} return this */ bindScrollEvent : function() { var _this = this; var preview = this.preview; var settings = this.settings; var codeMirror = this.codeMirror; var mouseOrTouch = editormd.mouseOrTouch; if (!settings.syncScrolling) { return this; } var cmBindScroll = function() { codeMirror.find(".CodeMirror-scroll").bind(mouseOrTouch("scroll", "touchmove"), function(event) { var height = $(this).height(); var scrollTop = $(this).scrollTop(); var percent = (scrollTop / $(this)[0].scrollHeight); var tocHeight = 0; preview.find(".markdown-toc-list").each(function(){ tocHeight += $(this).height(); }); var tocMenuHeight = preview.find(".editormd-toc-menu").height(); tocMenuHeight = (!tocMenuHeight) ? 0 : tocMenuHeight; if (scrollTop === 0) { preview.scrollTop(0); } else if (scrollTop + height >= $(this)[0].scrollHeight - 16) { preview.scrollTop(preview[0].scrollHeight); } else { preview.scrollTop((preview[0].scrollHeight + tocHeight + tocMenuHeight) * percent); } $.proxy(settings.onscroll, _this)(event); }); }; var cmUnbindScroll = function() { codeMirror.find(".CodeMirror-scroll").unbind(mouseOrTouch("scroll", "touchmove")); }; var previewBindScroll = function() { preview.bind(mouseOrTouch("scroll", "touchmove"), function(event) { var height = $(this).height(); var scrollTop = $(this).scrollTop(); var percent = (scrollTop / $(this)[0].scrollHeight); var codeView = codeMirror.find(".CodeMirror-scroll"); if(scrollTop === 0) { codeView.scrollTop(0); } else if (scrollTop + height >= $(this)[0].scrollHeight) { codeView.scrollTop(codeView[0].scrollHeight); } else { codeView.scrollTop(codeView[0].scrollHeight * percent); } $.proxy(settings.onpreviewscroll, _this)(event); }); }; var previewUnbindScroll = function() { preview.unbind(mouseOrTouch("scroll", "touchmove")); }; codeMirror.bind({ mouseover : cmBindScroll, mouseout : cmUnbindScroll, touchstart : cmBindScroll, touchend : cmUnbindScroll }); if (settings.syncScrolling === "single") { return this; } preview.bind({ mouseover : previewBindScroll, mouseout : previewUnbindScroll, touchstart : previewBindScroll, touchend : previewUnbindScroll }); return this; }, bindChangeEvent : function() { var _this = this; var cm = this.cm; var settings = this.settings; if (!settings.syncScrolling) { return this; } cm.on("change", function(_cm, changeObj) { if (settings.watch) { _this.previewContainer.css("padding", settings.autoHeight ? "20px 20px 50px 40px" : "20px"); } timer = setTimeout(function() { clearTimeout(timer); _this.save(); timer = null; }, settings.delay); }); return this; }, /** * 加载队列完成之后的显示处理 * Display handle of the module queues loaded after. * * @param {Boolean} recreate 是否为重建编辑器 * @returns {editormd} 返回editormd的实例对象 */ loadedDisplay : function(recreate) { recreate = recreate || false; var _this = this; var editor = this.editor; var preview = this.preview; var settings = this.settings; this.containerMask.hide(); this.save(); if (settings.watch) { preview.show(); } editor.data("oldWidth", editor.width()).data("oldHeight", editor.height()); // 为了兼容Zepto this.resize(); this.registerKeyMaps(); $(window).resize(function(){ _this.resize(); }); this.bindScrollEvent().bindChangeEvent(); if (!recreate) { $.proxy(settings.onload, this)(); } this.state.loaded = true; return this; }, /** * 设置编辑器的宽度 * Set editor width * * @param {Number|String} width 编辑器宽度值 * @returns {editormd} 返回editormd的实例对象 */ width : function(width) { this.editor.css("width", (typeof width === "number") ? width + "px" : width); this.resize(); return this; }, /** * 设置编辑器的高度 * Set editor height * * @param {Number|String} height 编辑器高度值 * @returns {editormd} 返回editormd的实例对象 */ height : function(height) { this.editor.css("height", (typeof height === "number") ? height + "px" : height); this.resize(); return this; }, /** * 调整编辑器的尺寸和布局 * Resize editor layout * * @param {Number|String} [width=null] 编辑器宽度值 * @param {Number|String} [height=null] 编辑器高度值 * @returns {editormd} 返回editormd的实例对象 */ resize : function(width, height) { width = width || null; height = height || null; var state = this.state; var editor = this.editor; var preview = this.preview; var toolbar = this.toolbar; var settings = this.settings; var codeMirror = this.codeMirror; if (width) { editor.css("width", (typeof width === "number") ? width + "px" : width); } if (settings.autoHeight && !state.fullscreen && !state.preview) { editor.css("height", "auto"); codeMirror.css("height", "auto"); } else { if (height) { editor.css("height", (typeof height === "number") ? height + "px" : height); } if (state.fullscreen) { editor.height($(window).height()); } if (settings.toolbar && !settings.readOnly) { codeMirror.css("margin-top", toolbar.height() + 1).height(editor.height() - toolbar.height()); } else { codeMirror.css("margin-top", 0).height(editor.height()); } } if(settings.watch) { codeMirror.width(editor.width() / 2); preview.width((!state.preview) ? editor.width() / 2 : editor.width()); this.previewContainer.css("padding", settings.autoHeight ? "20px 20px 50px 40px" : "20px"); if (settings.toolbar && !settings.readOnly) { preview.css("top", toolbar.height() + 1); } else { preview.css("top", 0); } if (settings.autoHeight && !state.fullscreen && !state.preview) { preview.height(""); } else { var previewHeight = (settings.toolbar && !settings.readOnly) ? editor.height() - toolbar.height() : editor.height(); preview.height(previewHeight); } } else { codeMirror.width(editor.width()); preview.hide(); } if (state.loaded) { $.proxy(settings.onresize, this)(); } return this; }, /** * 解析和保存Markdown代码 * Parse & Saving Markdown source code * * @returns {editormd} 返回editormd的实例对象 */ save : function() { if (timer === null) { return this; } var _this = this; var state = this.state; var settings = this.settings; var cm = this.cm; var cmValue = cm.getValue(); var previewContainer = this.previewContainer; if (settings.mode !== "gfm" && settings.mode !== "markdown") { this.markdownTextarea.val(cmValue); return this; } var marked = editormd.$marked; var markdownToC = this.markdownToC = []; var rendererOptions = this.markedRendererOptions = { toc : settings.toc, tocm : settings.tocm, tocStartLevel : settings.tocStartLevel, pageBreak : settings.pageBreak, taskList : settings.taskList, emoji : settings.emoji, tex : settings.tex, atLink : settings.atLink, // for @link emailLink : settings.emailLink, // for mail address auto link flowChart : settings.flowChart, sequenceDiagram : settings.sequenceDiagram, previewCodeHighlight : settings.previewCodeHighlight, }; var markedOptions = this.markedOptions = { renderer : editormd.markedRenderer(markdownToC, rendererOptions), gfm : true, tables : true, breaks : true, pedantic : false, sanitize : (settings.htmlDecode) ? false : true, // 关闭忽略HTML标签,即开启识别HTML标签,默认为false smartLists : true, smartypants : true }; marked.setOptions(markedOptions); var newMarkdownDoc = editormd.$marked(cmValue, markedOptions); //console.info("cmValue", cmValue, newMarkdownDoc); newMarkdownDoc = editormd.filterHTMLTags(newMarkdownDoc, settings.htmlDecode); //console.error("cmValue", cmValue, newMarkdownDoc); this.markdownTextarea.text(cmValue); cm.save(); if (settings.saveHTMLToTextarea) { this.htmlTextarea.text(newMarkdownDoc); } if(settings.watch || (!settings.watch && state.preview)) { previewContainer.html(newMarkdownDoc); this.previewCodeHighlight(); if (settings.toc) { var tocContainer = (settings.tocContainer === "") ? previewContainer : $(settings.tocContainer); var tocMenu = tocContainer.find("." + this.classPrefix + "toc-menu"); tocContainer.attr("previewContainer", (settings.tocContainer === "") ? "true" : "false"); if (settings.tocContainer !== "" && tocMenu.length > 0) { tocMenu.remove(); } editormd.markdownToCRenderer(markdownToC, tocContainer, settings.tocDropdown, settings.tocStartLevel); if (settings.tocDropdown || tocContainer.find("." + this.classPrefix + "toc-menu").length > 0) { editormd.tocDropdownMenu(tocContainer, (settings.tocTitle !== "") ? settings.tocTitle : this.lang.tocTitle); } if (settings.tocContainer !== "") { previewContainer.find(".markdown-toc").css("border", "none"); } } if (settings.tex) { if (!editormd.kaTeXLoaded && settings.autoLoadModules) { editormd.loadKaTeX(function() { editormd.$katex = katex; editormd.kaTeXLoaded = true; _this.katexRender(); }); } else { editormd.$katex = katex; this.katexRender(); } } if (settings.flowChart || settings.sequenceDiagram) { flowchartTimer = setTimeout(function(){ clearTimeout(flowchartTimer); _this.flowChartAndSequenceDiagramRender(); flowchartTimer = null; }, 10); } if (state.loaded) { $.proxy(settings.onchange, this)(); } } return this; }, /** * 聚焦光标位置 * Focusing the cursor position * * @returns {editormd} 返回editormd的实例对象 */ focus : function() { this.cm.focus(); return this; }, /** * 设置光标的位置 * Set cursor position * * @param {Object} cursor 要设置的光标位置键值对象,例:{line:1, ch:0} * @returns {editormd} 返回editormd的实例对象 */ setCursor : function(cursor) { this.cm.setCursor(cursor); return this; }, /** * 获取当前光标的位置 * Get the current position of the cursor * * @returns {Cursor} 返回一个光标Cursor对象 */ getCursor : function() { return this.cm.getCursor(); }, /** * 设置光标选中的范围 * Set cursor selected ranges * * @param {Object} from 开始位置的光标键值对象,例:{line:1, ch:0} * @param {Object} to 结束位置的光标键值对象,例:{line:1, ch:0} * @returns {editormd} 返回editormd的实例对象 */ setSelection : function(from, to) { this.cm.setSelection(from, to); return this; }, /** * 获取光标选中的文本 * Get the texts from cursor selected * * @returns {String} 返回选中文本的字符串形式 */ getSelection : function() { return this.cm.getSelection(); }, /** * 设置光标选中的文本范围 * Set the cursor selection ranges * * @param {Array} ranges cursor selection ranges array * @returns {Array} return this */ setSelections : function(ranges) { this.cm.setSelections(ranges); return this; }, /** * 获取光标选中的文本范围 * Get the cursor selection ranges * * @returns {Array} return selection ranges array */ getSelections : function() { return this.cm.getSelections(); }, /** * 替换当前光标选中的文本或在当前光标处插入新字符 * Replace the text at the current cursor selected or insert a new character at the current cursor position * * @param {String} value 要插入的字符值 * @returns {editormd} 返回editormd的实例对象 */ replaceSelection : function(value) { this.cm.replaceSelection(value); return this; }, /** * 在当前光标处插入新字符 * Insert a new character at the current cursor position * * 同replaceSelection()方法 * With the replaceSelection() method * * @param {String} value 要插入的字符值 * @returns {editormd} 返回editormd的实例对象 */ insertValue : function(value) { this.replaceSelection(value); return this; }, /** * 追加markdown * append Markdown to editor * * @param {String} md 要追加的markdown源文档 * @returns {editormd} 返回editormd的实例对象 */ appendMarkdown : function(md) { var settings = this.settings; var cm = this.cm; cm.setValue(cm.getValue() + md); return this; }, /** * 设置和传入编辑器的markdown源文档 * Set Markdown source document * * @param {String} md 要传入的markdown源文档 * @returns {editormd} 返回editormd的实例对象 */ setMarkdown : function(md) { this.cm.setValue(md || this.settings.markdown); return this; }, /** * 获取编辑器的markdown源文档 * Set Editor.md markdown/CodeMirror value * * @returns {editormd} 返回editormd的实例对象 */ getMarkdown : function() { return this.cm.getValue(); }, /** * 获取编辑器的源文档 * Get CodeMirror value * * @returns {editormd} 返回editormd的实例对象 */ getValue : function() { return this.cm.getValue(); }, /** * 设置编辑器的源文档 * Set CodeMirror value * * @param {String} value set code/value/string/text * @returns {editormd} 返回editormd的实例对象 */ setValue : function(value) { this.cm.setValue(value); return this; }, /** * 清空编辑器 * Empty CodeMirror editor container * * @returns {editormd} 返回editormd的实例对象 */ clear : function() { this.cm.setValue(""); return this; }, /** * 获取解析后存放在Textarea的HTML源码 * Get parsed html code from Textarea * * @returns {String} 返回HTML源码 */ getHTML : function() { if (!this.settings.saveHTMLToTextarea) { alert("Error: settings.saveHTMLToTextarea == false"); return false; } return this.htmlTextarea.val(); }, /** * getHTML()的别名 * getHTML (alias) * * @returns {String} Return html code 返回HTML源码 */ getTextareaSavedHTML : function() { return this.getHTML(); }, /** * 获取预览窗口的HTML源码 * Get html from preview container * * @returns {editormd} 返回editormd的实例对象 */ getPreviewedHTML : function() { if (!this.settings.watch) { alert("Error: settings.watch == false"); return false; } return this.previewContainer.html(); }, /** * 开启实时预览 * Enable real-time watching * * @returns {editormd} 返回editormd的实例对象 */ watch : function(callback) { var settings = this.settings; if ($.inArray(settings.mode, ["gfm", "markdown"]) < 0) { return this; } this.state.watching = settings.watch = true; this.preview.show(); if (this.toolbar) { var watchIcon = settings.toolbarIconsClass.watch; var unWatchIcon = settings.toolbarIconsClass.unwatch; var icon = this.toolbar.find(".fa[name=watch]"); icon.parent().attr("title", settings.lang.toolbar.watch); icon.removeClass(unWatchIcon).addClass(watchIcon); } this.codeMirror.css("border-right", "1px solid #ddd").width(this.editor.width() / 2); timer = 0; this.save().resize(); if (!settings.onwatch) { settings.onwatch = callback || function() {}; } $.proxy(settings.onwatch, this)(); return this; }, /** * 关闭实时预览 * Disable real-time watching * * @returns {editormd} 返回editormd的实例对象 */ unwatch : function(callback) { var settings = this.settings; this.state.watching = settings.watch = false; this.preview.hide(); if (this.toolbar) { var watchIcon = settings.toolbarIconsClass.watch; var unWatchIcon = settings.toolbarIconsClass.unwatch; var icon = this.toolbar.find(".fa[name=watch]"); icon.parent().attr("title", settings.lang.toolbar.unwatch); icon.removeClass(watchIcon).addClass(unWatchIcon); } this.codeMirror.css("border-right", "none").width(this.editor.width()); this.resize(); if (!settings.onunwatch) { settings.onunwatch = callback || function() {}; } $.proxy(settings.onunwatch, this)(); return this; }, /** * 显示编辑器 * Show editor * * @param {Function} [callback=function()] 回调函数 * @returns {editormd} 返回editormd的实例对象 */ show : function(callback) { callback = callback || function() {}; var _this = this; this.editor.show(0, function() { $.proxy(callback, _this)(); }); return this; }, /** * 隐藏编辑器 * Hide editor * * @param {Function} [callback=function()] 回调函数 * @returns {editormd} 返回editormd的实例对象 */ hide : function(callback) { callback = callback || function() {}; var _this = this; this.editor.hide(0, function() { $.proxy(callback, _this)(); }); return this; }, /** * 隐藏编辑器部分,只预览HTML * Enter preview html state * * @returns {editormd} 返回editormd的实例对象 */ previewing : function() { var _this = this; var editor = this.editor; var preview = this.preview; var toolbar = this.toolbar; var settings = this.settings; var codeMirror = this.codeMirror; var previewContainer = this.previewContainer; if ($.inArray(settings.mode, ["gfm", "markdown"]) < 0) { return this; } if (settings.toolbar && toolbar) { toolbar.toggle(); toolbar.find(".fa[name=preview]").toggleClass("active"); } codeMirror.toggle(); var escHandle = function(event) { if (event.shiftKey && event.keyCode === 27) { _this.previewed(); } }; if (codeMirror.css("display") === "none") // 为了兼容Zepto,而不使用codeMirror.is(":hidden") { this.state.preview = true; if (this.state.fullscreen) { preview.css("background", "#fff"); } editor.find("." + this.classPrefix + "preview-close-btn").show().bind(editormd.mouseOrTouch("click", "touchend"), function(){ _this.previewed(); }); if (!settings.watch) { this.save(); } else { previewContainer.css("padding", ""); } previewContainer.addClass(this.classPrefix + "preview-active"); preview.show().css({ position : "", top : 0, width : editor.width(), height : (settings.autoHeight && !this.state.fullscreen) ? "auto" : editor.height() }); if (this.state.loaded) { $.proxy(settings.onpreviewing, this)(); } $(window).bind("keyup", escHandle); } else { $(window).unbind("keyup", escHandle); this.previewed(); } }, /** * 显示编辑器部分,退出只预览HTML * Exit preview html state * * @returns {editormd} 返回editormd的实例对象 */ previewed : function() { var editor = this.editor; var preview = this.preview; var toolbar = this.toolbar; var settings = this.settings; var previewContainer = this.previewContainer; var previewCloseBtn = editor.find("." + this.classPrefix + "preview-close-btn"); this.state.preview = false; this.codeMirror.show(); if (settings.toolbar) { toolbar.show(); } preview[(settings.watch) ? "show" : "hide"](); previewCloseBtn.hide().unbind(editormd.mouseOrTouch("click", "touchend")); previewContainer.removeClass(this.classPrefix + "preview-active"); if (settings.watch) { previewContainer.css("padding", "20px"); } preview.css({ background : null, position : "absolute", width : editor.width() / 2, height : (settings.autoHeight && !this.state.fullscreen) ? "auto" : editor.height() - toolbar.height(), top : (settings.toolbar) ? toolbar.height() : 0 }); if (this.state.loaded) { $.proxy(settings.onpreviewed, this)(); } return this; }, /** * 编辑器全屏显示 * Fullscreen show * * @returns {editormd} 返回editormd的实例对象 */ fullscreen : function() { var _this = this; var state = this.state; var editor = this.editor; var preview = this.preview; var toolbar = this.toolbar; var settings = this.settings; var fullscreenClass = this.classPrefix + "fullscreen"; if (toolbar) { toolbar.find(".fa[name=fullscreen]").parent().toggleClass("active"); } var escHandle = function(event) { if (!event.shiftKey && event.keyCode === 27) { if (state.fullscreen) { _this.fullscreenExit(); } } }; if (!editor.hasClass(fullscreenClass)) { state.fullscreen = true; $("html,body").css("overflow", "hidden"); editor.css({ width : $(window).width(), height : $(window).height() }).addClass(fullscreenClass); this.resize(); $.proxy(settings.onfullscreen, this)(); $(window).bind("keyup", escHandle); } else { $(window).unbind("keyup", escHandle); this.fullscreenExit(); } return this; }, /** * 编辑器退出全屏显示 * Exit fullscreen state * * @returns {editormd} 返回editormd的实例对象 */ fullscreenExit : function() { var editor = this.editor; var settings = this.settings; var toolbar = this.toolbar; var fullscreenClass = this.classPrefix + "fullscreen"; this.state.fullscreen = false; if (toolbar) { toolbar.find(".fa[name=fullscreen]").parent().removeClass("active"); } $("html,body").css("overflow", ""); editor.css({ width : editor.data("oldWidth"), height : editor.data("oldHeight") }).removeClass(fullscreenClass); this.resize(); $.proxy(settings.onfullscreenExit, this)(); return this; }, /** * 加载并执行插件 * Load and execute the plugin * * @param {String} name plugin name / function name * @param {String} path plugin load path * @returns {editormd} 返回editormd的实例对象 */ executePlugin : function(name, path) { var _this = this; var cm = this.cm; var settings = this.settings; path = settings.pluginPath + path; if (typeof define === "function") { if (typeof this[name] === "undefined") { alert("Error: " + name + " plugin is not found, you are not load this plugin."); return this; } this[name](cm); return this; } if ($.inArray(path, editormd.loadFiles.plugin) < 0) { editormd.loadPlugin(path, function() { editormd.loadPlugins[name] = _this[name]; _this[name](cm); }); } else { $.proxy(editormd.loadPlugins[name], this)(cm); } return this; }, /** * 搜索替换 * Search & replace * * @param {String} command CodeMirror serach commands, "find, fintNext, fintPrev, clearSearch, replace, replaceAll" * @returns {editormd} return this */ search : function(command) { var settings = this.settings; if (!settings.searchReplace) { alert("Error: settings.searchReplace == false"); return this; } if (!settings.readOnly) { this.cm.execCommand(command || "find"); } return this; }, searchReplace : function() { this.search("replace"); return this; }, searchReplaceAll : function() { this.search("replaceAll"); return this; } }; editormd.fn.init.prototype = editormd.fn; /** * 锁屏 * lock screen when dialog opening * * @returns {void} */ editormd.dialogLockScreen = function() { var settings = this.settings || {dialogLockScreen : true}; if (settings.dialogLockScreen) { $("html,body").css("overflow", "hidden"); this.resize(); } }; /** * 显示透明背景层 * Display mask layer when dialog opening * * @param {Object} dialog dialog jQuery object * @returns {void} */ editormd.dialogShowMask = function(dialog) { var editor = this.editor; var settings = this.settings || {dialogShowMask : true}; dialog.css({ top : ($(window).height() - dialog.height()) / 2 + "px", left : ($(window).width() - dialog.width()) / 2 + "px" }); if (settings.dialogShowMask) { editor.children("." + this.classPrefix + "mask").css("z-index", parseInt(dialog.css("z-index")) - 1).show(); } }; editormd.toolbarHandlers = { undo : function() { this.cm.undo(); }, redo : function() { this.cm.redo(); }, bold : function() { var cm = this.cm; var cursor = cm.getCursor(); var selection = cm.getSelection(); cm.replaceSelection("**" + selection + "**"); if(selection === "") { cm.setCursor(cursor.line, cursor.ch + 2); } }, del : function() { var cm = this.cm; var cursor = cm.getCursor(); var selection = cm.getSelection(); cm.replaceSelection("~~" + selection + "~~"); if(selection === "") { cm.setCursor(cursor.line, cursor.ch + 2); } }, italic : function() { var cm = this.cm; var cursor = cm.getCursor(); var selection = cm.getSelection(); cm.replaceSelection("*" + selection + "*"); if(selection === "") { cm.setCursor(cursor.line, cursor.ch + 1); } }, quote : function() { var cm = this.cm; var cursor = cm.getCursor(); var selection = cm.getSelection(); if (cursor.ch !== 0) { cm.setCursor(cursor.line, 0); cm.replaceSelection("> " + selection); cm.setCursor(cursor.line, cursor.ch + 2); } else { cm.replaceSelection("> " + selection); } //cm.replaceSelection("> " + selection); //cm.setCursor(cursor.line, (selection === "") ? cursor.ch + 2 : cursor.ch + selection.length + 2); }, ucfirst : function() { var cm = this.cm; var selection = cm.getSelection(); var selections = cm.listSelections(); cm.replaceSelection(editormd.firstUpperCase(selection)); cm.setSelections(selections); }, ucwords : function() { var cm = this.cm; var selection = cm.getSelection(); var selections = cm.listSelections(); cm.replaceSelection(editormd.wordsFirstUpperCase(selection)); cm.setSelections(selections); }, uppercase : function() { var cm = this.cm; var selection = cm.getSelection(); var selections = cm.listSelections(); cm.replaceSelection(selection.toUpperCase()); cm.setSelections(selections); }, lowercase : function() { var cm = this.cm; var cursor = cm.getCursor(); var selection = cm.getSelection(); var selections = cm.listSelections(); cm.replaceSelection(selection.toLowerCase()); cm.setSelections(selections); }, h1 : function() { var cm = this.cm; var cursor = cm.getCursor(); var selection = cm.getSelection(); if (cursor.ch !== 0) { cm.setCursor(cursor.line, 0); cm.replaceSelection("# " + selection); cm.setCursor(cursor.line, cursor.ch + 2); } else { cm.replaceSelection("# " + selection); } }, h2 : function() { var cm = this.cm; var cursor = cm.getCursor(); var selection = cm.getSelection(); if (cursor.ch !== 0) { cm.setCursor(cursor.line, 0); cm.replaceSelection("## " + selection); cm.setCursor(cursor.line, cursor.ch + 3); } else { cm.replaceSelection("## " + selection); } }, h3 : function() { var cm = this.cm; var cursor = cm.getCursor(); var selection = cm.getSelection(); if (cursor.ch !== 0) { cm.setCursor(cursor.line, 0); cm.replaceSelection("### " + selection); cm.setCursor(cursor.line, cursor.ch + 4); } else { cm.replaceSelection("### " + selection); } }, h4 : function() { var cm = this.cm; var cursor = cm.getCursor(); var selection = cm.getSelection(); if (cursor.ch !== 0) { cm.setCursor(cursor.line, 0); cm.replaceSelection("#### " + selection); cm.setCursor(cursor.line, cursor.ch + 5); } else { cm.replaceSelection("#### " + selection); } }, h5 : function() { var cm = this.cm; var cursor = cm.getCursor(); var selection = cm.getSelection(); if (cursor.ch !== 0) { cm.setCursor(cursor.line, 0); cm.replaceSelection("##### " + selection); cm.setCursor(cursor.line, cursor.ch + 6); } else { cm.replaceSelection("##### " + selection); } }, h6 : function() { var cm = this.cm; var cursor = cm.getCursor(); var selection = cm.getSelection(); if (cursor.ch !== 0) { cm.setCursor(cursor.line, 0); cm.replaceSelection("###### " + selection); cm.setCursor(cursor.line, cursor.ch + 7); } else { cm.replaceSelection("###### " + selection); } }, "list-ul" : function() { var cm = this.cm; var cursor = cm.getCursor(); var selection = cm.getSelection(); if (selection === "") { cm.replaceSelection("- " + selection); } else { var selectionText = selection.split("\n"); for (var i = 0, len = selectionText.length; i < len; i++) { selectionText[i] = (selectionText[i] === "") ? "" : "- " + selectionText[i]; } cm.replaceSelection(selectionText.join("\n")); } }, "list-ol" : function() { var cm = this.cm; var cursor = cm.getCursor(); var selection = cm.getSelection(); if(selection === "") { cm.replaceSelection("1. " + selection); } else { var selectionText = selection.split("\n"); for (var i = 0, len = selectionText.length; i < len; i++) { selectionText[i] = (selectionText[i] === "") ? "" : (i+1) + ". " + selectionText[i]; } cm.replaceSelection(selectionText.join("\n")); } }, hr : function() { var cm = this.cm; var cursor = cm.getCursor(); var selection = cm.getSelection(); cm.replaceSelection(((cursor.ch !== 0) ? "\n\n" : "\n") + "------------\n\n"); }, tex : function() { if (!this.settings.tex) { alert("settings.tex === false"); return this; } var cm = this.cm; var cursor = cm.getCursor(); var selection = cm.getSelection(); cm.replaceSelection("$$" + selection + "$$"); if(selection === "") { cm.setCursor(cursor.line, cursor.ch + 2); } }, link : function() { this.executePlugin("linkDialog", "link-dialog/link-dialog"); }, "reference-link" : function() { this.executePlugin("referenceLinkDialog", "reference-link-dialog/reference-link-dialog"); }, pagebreak : function() { if (!this.settings.pageBreak) { alert("settings.pageBreak === false"); return this; } var cm = this.cm; var selection = cm.getSelection(); cm.replaceSelection("\r\n[========]\r\n"); }, image : function() { this.executePlugin("imageDialog", "image-dialog/image-dialog"); }, code : function() { var cm = this.cm; var cursor = cm.getCursor(); var selection = cm.getSelection(); cm.replaceSelection("`" + selection + "`"); if (selection === "") { cm.setCursor(cursor.line, cursor.ch + 1); } }, "code-block" : function() { this.executePlugin("codeBlockDialog", "code-block-dialog/code-block-dialog"); }, "preformatted-text" : function() { this.executePlugin("preformattedTextDialog", "preformatted-text-dialog/preformatted-text-dialog"); }, table : function() { this.executePlugin("tableDialog", "table-dialog/table-dialog"); }, datetime : function() { var cm = this.cm; var selection = cm.getSelection(); var date = new Date(); var langName = this.settings.lang.name; var datefmt = editormd.dateFormat() + " " + editormd.dateFormat((langName === "zh-cn" || langName === "zh-tw") ? "cn-week-day" : "week-day"); cm.replaceSelection(datefmt); }, emoji : function() { this.executePlugin("emojiDialog", "emoji-dialog/emoji-dialog"); }, "html-entities" : function() { this.executePlugin("htmlEntitiesDialog", "html-entities-dialog/html-entities-dialog"); }, "goto-line" : function() { this.executePlugin("gotoLineDialog", "goto-line-dialog/goto-line-dialog"); }, watch : function() { this[this.settings.watch ? "unwatch" : "watch"](); }, preview : function() { this.previewing(); }, fullscreen : function() { this.fullscreen(); }, clear : function() { this.clear(); }, search : function() { this.search(); }, help : function() { this.executePlugin("helpDialog", "help-dialog/help-dialog"); }, info : function() { this.showInfoDialog(); } }; editormd.keyMaps = { "Ctrl-1" : "h1", "Ctrl-2" : "h2", "Ctrl-3" : "h3", "Ctrl-4" : "h4", "Ctrl-5" : "h5", "Ctrl-6" : "h6", "Ctrl-B" : "bold", // if this is string == editormd.toolbarHandlers.xxxx "Ctrl-D" : "datetime", "Ctrl-E" : function() { // emoji var cm = this.cm; var cursor = cm.getCursor(); var selection = cm.getSelection(); if (!this.settings.emoji) { alert("Error: settings.emoji == false"); return ; } cm.replaceSelection(":" + selection + ":"); if (selection === "") { cm.setCursor(cursor.line, cursor.ch + 1); } }, "Ctrl-Alt-G" : "goto-line", "Ctrl-H" : "hr", "Ctrl-I" : "italic", "Ctrl-K" : "code", "Ctrl-L" : function() { var cm = this.cm; var cursor = cm.getCursor(); var selection = cm.getSelection(); var title = (selection === "") ? "" : " \""+selection+"\""; cm.replaceSelection("[" + selection + "]("+title+")"); if (selection === "") { cm.setCursor(cursor.line, cursor.ch + 1); } }, "Ctrl-U" : "list-ul", "Shift-Ctrl-A" : function() { var cm = this.cm; var cursor = cm.getCursor(); var selection = cm.getSelection(); if (!this.settings.atLink) { alert("Error: settings.atLink == false"); return ; } cm.replaceSelection("@" + selection); if (selection === "") { cm.setCursor(cursor.line, cursor.ch + 1); } }, "Shift-Ctrl-C" : "code", "Shift-Ctrl-Q" : "quote", "Shift-Ctrl-S" : "del", "Shift-Ctrl-K" : "tex", // KaTeX "Shift-Alt-C" : function() { var cm = this.cm; var cursor = cm.getCursor(); var selection = cm.getSelection(); cm.replaceSelection(["```", selection, "```"].join("\n")); if (selection === "") { cm.setCursor(cursor.line, cursor.ch + 3); } }, "Shift-Ctrl-Alt-C" : "code-block", "Shift-Ctrl-H" : "html-entities", "Shift-Alt-H" : "help", "Shift-Ctrl-E" : "emoji", "Shift-Ctrl-U" : "uppercase", "Shift-Alt-U" : "ucwords", "Shift-Ctrl-Alt-U" : "ucfirst", "Shift-Alt-L" : "lowercase", "Shift-Ctrl-I" : function() { var cm = this.cm; var cursor = cm.getCursor(); var selection = cm.getSelection(); var title = (selection === "") ? "" : " \""+selection+"\""; cm.replaceSelection("![" + selection + "]("+title+")"); if (selection === "") { cm.setCursor(cursor.line, cursor.ch + 4); } }, "Shift-Ctrl-Alt-I" : "image", "Shift-Ctrl-L" : "link", "Shift-Ctrl-O" : "list-ol", "Shift-Ctrl-P" : "preformatted-text", "Shift-Ctrl-T" : "table", "Shift-Alt-P" : "pagebreak", "F9" : "watch", "F10" : "preview", "F11" : "fullscreen", }; /** * 清除字符串两边的空格 * Clear the space of strings both sides. * * @param {String} str string * @returns {String} trimed string */ var trim = function(str) { return (!String.prototype.trim) ? str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, "") : str.trim(); }; editormd.trim = trim; /** * 所有单词首字母大写 * Words first to uppercase * * @param {String} str string * @returns {String} string */ var ucwords = function (str) { return str.toLowerCase().replace(/\b(\w)|\s(\w)/g, function($1) { return $1.toUpperCase(); }); }; editormd.ucwords = editormd.wordsFirstUpperCase = ucwords; /** * 字符串首字母大写 * Only string first char to uppercase * * @param {String} str string * @returns {String} string */ var firstUpperCase = function(str) { return str.toLowerCase().replace(/\b(\w)/, function($1){ return $1.toUpperCase(); }); }; var ucfirst = firstUpperCase; editormd.firstUpperCase = editormd.ucfirst = firstUpperCase; editormd.urls = { atLinkBase : "https://github.com/" }; editormd.regexs = { atLink : /@(\w+)/g, email : /(\w+)@(\w+)\.(\w+)\.?(\w+)?/g, emailLink : /(mailto:)?([\w\.\_]+)@(\w+)\.(\w+)\.?(\w+)?/g, emoji : /:([\w\+-]+):/g, emojiDatetime : /(\d{2}:\d{2}:\d{2})/g, twemoji : /:(tw-([\w]+)-?(\w+)?):/g, fontAwesome : /:(fa-([\w]+)(-(\w+)){0,}):/g, editormdLogo : /:(editormd-logo-?(\w+)?):/g, pageBreak : /^\[[=]{8,}\]$/ }; // Emoji graphics files url path editormd.emoji = { path : "http://www.emoji-cheat-sheet.com/graphics/emojis/", ext : ".png" }; // Twitter Emoji (Twemoji) graphics files url path editormd.twemoji = { path : "http://twemoji.maxcdn.com/36x36/", ext : ".png" }; /** * 自定义marked的解析器 * Custom Marked renderer rules * * @param {Array} markdownToC 传入用于接收TOC的数组 * @returns {Renderer} markedRenderer 返回marked的Renderer自定义对象 */ editormd.markedRenderer = function(markdownToC, options) { var defaults = { toc : true, // Table of contents tocm : false, tocStartLevel : 1, // Said from H1 to create ToC pageBreak : true, atLink : true, // for @link emailLink : true, // for mail address auto link taskList : false, // Enable Github Flavored Markdown task lists emoji : false, // :emoji: , Support Twemoji, fontAwesome, Editor.md logo emojis. tex : false, // TeX(LaTeX), based on KaTeX flowChart : false, // flowChart.js only support IE9+ sequenceDiagram : false, // sequenceDiagram.js only support IE9+ }; var settings = $.extend(defaults, options || {}); var marked = editormd.$marked; var markedRenderer = new marked.Renderer(); markdownToC = markdownToC || []; var regexs = editormd.regexs; var atLinkReg = regexs.atLink; var emojiReg = regexs.emoji; var emailReg = regexs.email; var emailLinkReg = regexs.emailLink; var twemojiReg = regexs.twemoji; var faIconReg = regexs.fontAwesome; var editormdLogoReg = regexs.editormdLogo; var pageBreakReg = regexs.pageBreak; markedRenderer.emoji = function(text) { text = text.replace(editormd.regexs.emojiDatetime, function($1) { return $1.replace(/:/g, ":"); }); var matchs = text.match(emojiReg); if (!matchs || !settings.emoji) { return text; } for (var i = 0, len = matchs.length; i < len; i++) { if (matchs[i] === ":+1:") { matchs[i] = ":\\+1:"; } text = text.replace(new RegExp(matchs[i]), function($1, $2){ var faMatchs = $1.match(faIconReg); var name = $1.replace(/:/g, ""); if (faMatchs) { for (var fa = 0, len1 = faMatchs.length; fa < len1; fa++) { var faName = faMatchs[fa].replace(/:/g, ""); return ""; } } else { var emdlogoMathcs = $1.match(editormdLogoReg); var twemojiMatchs = $1.match(twemojiReg); if (emdlogoMathcs) { for (var x = 0, len2 = emdlogoMathcs.length; x < len2; x++) { var logoName = emdlogoMathcs[x].replace(/:/g, ""); return ""; } } else if (twemojiMatchs) { for (var t = 0, len3 = twemojiMatchs.length; t < len3; t++) { var twe = twemojiMatchs[t].replace(/:/g, "").replace("tw-", ""); return "\"twemoji-""; } } else { var src = (name === "+1") ? "plus1" : name; src = (src === "black_large_square") ? "black_square" : src; src = (src === "moon") ? "waxing_gibbous_moon" : src; return "\":""; } } }); } return text; }; markedRenderer.atLink = function(text) { if (atLinkReg.test(text)) { if (settings.atLink) { text = text.replace(emailReg, function($1, $2, $3, $4) { return $1.replace(/@/g, "_#_@_#_"); }); text = text.replace(atLinkReg, function($1, $2) { return "" + $1 + ""; }).replace(/_#_@_#_/g, "@"); } if (settings.emailLink) { text = text.replace(emailLinkReg, function($1, $2, $3, $4, $5) { return (!$2 && $.inArray($5, "jpg|jpeg|png|gif|webp|ico|icon|pdf".split("|")) < 0) ? ""+$1+"" : $1; }); } return text; } return text; }; markedRenderer.link = function (href, title, text) { if (this.options.sanitize) { try { var prot = decodeURIComponent(unescape(href)).replace(/[^\w:]/g,"").toLowerCase(); } catch(e) { return ""; } if (prot.indexOf("javascript:") === 0) { return ""; } } var out = "" + text.replace(/@/g, "@") + ""; } if (title) { out += " title=\"" + title + "\""; } out += ">" + text + ""; return out; }; markedRenderer.heading = function(text, level, raw) { var linkText = text; var hasLinkReg = /\s*\]*)\>(.*)\<\/a\>\s*/; var getLinkTextReg = /\s*\]+)\>([^\>]*)\<\/a\>\s*/g; if (hasLinkReg.test(text)) { var tempText = []; text = text.split(/\]+)\>([^\>]*)\<\/a\>/); for (var i = 0, len = text.length; i < len; i++) { tempText.push(text[i].replace(/\s*href\=\"(.*)\"\s*/g, "")); } text = tempText.join(" "); } text = trim(text); var escapedText = text.toLowerCase().replace(/[^\w]+/g, "-"); var toc = { text : text, level : level, slug : escapedText }; var isChinese = /^[\u4e00-\u9fa5]+$/.test(text); var id = (isChinese) ? escape(text).replace(/\%/g, "") : text.toLowerCase().replace(/[^\w]+/g, "-"); markdownToC.push(toc); var headingHTML = ""; headingHTML += ""; headingHTML += ""; headingHTML += (hasLinkReg) ? this.atLink(this.emoji(linkText)) : this.atLink(this.emoji(text)); headingHTML += ""; return headingHTML; }; markedRenderer.pageBreak = function(text) { if (pageBreakReg.test(text) && settings.pageBreak) { text = "
                    "; } return text; }; markedRenderer.paragraph = function(text) { var isTeXInline = /\$\$(.*)\$\$/g.test(text); var isTeXLine = /^\$\$(.*)\$\$$/.test(text); var isTeXAddClass = (isTeXLine) ? " class=\"" + editormd.classNames.tex + "\"" : ""; var isToC = (settings.tocm) ? /^(\[TOC\]|\[TOCM\])$/.test(text) : /^\[TOC\]$/.test(text); var isToCMenu = /^\[TOCM\]$/.test(text); if (!isTeXLine && isTeXInline) { text = text.replace(/(\$\$([^\$]*)\$\$)+/g, function($1, $2) { return "" + $2.replace(/\$/g, "") + ""; }); } else { text = (isTeXLine) ? text.replace(/\$/g, "") : text; } var tocHTML = "
                    " + text + "
                    "; return (isToC) ? ( (isToCMenu) ? "
                    " + tocHTML + "

                    " : tocHTML ) : ( (pageBreakReg.test(text)) ? this.pageBreak(text) : "" + this.atLink(this.emoji(text)) + "

                    \n" ); }; markedRenderer.code = function (code, lang, escaped) { if (lang === "seq" || lang === "sequence") { return "
                    " + code + "
                    "; } else if ( lang === "flow") { return "
                    " + code + "
                    "; } else if ( lang === "math" || lang === "latex" || lang === "katex") { return "

                    " + code + "

                    "; } else { return marked.Renderer.prototype.code.apply(this, arguments); } }; markedRenderer.tablecell = function(content, flags) { var type = (flags.header) ? "th" : "td"; var tag = (flags.align) ? "<" + type +" style=\"text-align:" + flags.align + "\">" : "<" + type + ">"; return tag + this.atLink(this.emoji(content)) + "\n"; }; markedRenderer.listitem = function(text) { if (settings.taskList && /^\s*\[[x\s]\]\s*/.test(text)) { text = text.replace(/^\s*\[\s\]\s*/, " ") .replace(/^\s*\[x\]\s*/, " "); return "
                  • " + this.atLink(this.emoji(text)) + "
                  • "; } else { return "
                  • " + this.atLink(this.emoji(text)) + "
                  • "; } }; return markedRenderer; }; /** * * 生成TOC(Table of Contents) * Creating ToC (Table of Contents) * * @param {Array} toc 从marked获取的TOC数组列表 * @param {Element} container 插入TOC的容器元素 * @param {Integer} startLevel Hx 起始层级 * @returns {Object} tocContainer 返回ToC列表容器层的jQuery对象元素 */ editormd.markdownToCRenderer = function(toc, container, tocDropdown, startLevel) { var html = ""; var lastLevel = 0; var classPrefix = this.classPrefix; startLevel = startLevel || 1; for (var i = 0, len = toc.length; i < len; i++) { var text = toc[i].text; var level = toc[i].level; if (level < startLevel) { continue; } if (level > lastLevel) { html += ""; } else if (level < lastLevel) { html += (new Array(lastLevel - level + 2)).join("
                • "); } else { html += ""; } html += "
                • " + text + "
                    "; lastLevel = level; } var tocContainer = container.find(".markdown-toc"); if ((tocContainer.length < 1 && container.attr("previewContainer") === "false")) { var tocHTML = "
                    "; tocHTML = (tocDropdown) ? "
                    " + tocHTML + "
                    " : tocHTML; container.html(tocHTML); tocContainer = container.find(".markdown-toc"); } if (tocDropdown) { tocContainer.wrap("

                    "); } tocContainer.html("
                      ").children(".markdown-toc-list").html(html.replace(/\r?\n?\\<\/ul\>/g, "")); return tocContainer; }; /** * * 生成TOC下拉菜单 * Creating ToC dropdown menu * * @param {Object} container 插入TOC的容器jQuery对象元素 * @param {String} tocTitle ToC title * @returns {Object} return toc-menu object */ editormd.tocDropdownMenu = function(container, tocTitle) { tocTitle = tocTitle || "Table of Contents"; var zindex = 400; var tocMenus = container.find("." + this.classPrefix + "toc-menu"); tocMenus.each(function() { var $this = $(this); var toc = $this.children(".markdown-toc"); var icon = ""; var btn = "" + icon + tocTitle + ""; var menu = toc.children("ul"); var list = menu.find("li"); toc.append(btn); list.first().before("
                    • " + tocTitle + " " + icon + "

                    • "); $this.mouseover(function(){ menu.show(); list.each(function(){ var li = $(this); var ul = li.children("ul"); if (ul.html() === "") { ul.remove(); } if (ul.length > 0 && ul.html() !== "") { var firstA = li.children("a").first(); if (firstA.children(".fa").length < 1) { firstA.append( $(icon).css({ float:"right", paddingTop:"4px" }) ); } } li.mouseover(function(){ ul.css("z-index", zindex).show(); zindex += 1; }).mouseleave(function(){ ul.hide(); }); }); }).mouseleave(function(){ menu.hide(); }); }); return tocMenus; }; /** * 简单地过滤指定的HTML标签 * Filter custom html tags * * @param {String} html 要过滤HTML * @param {String} filters 要过滤的标签 * @returns {String} html 返回过滤的HTML */ editormd.filterHTMLTags = function(html, filters) { if (typeof html !== "string") { html = new String(html); } if (typeof filters !== "string") { return html; } var expression = filters.split("|"); var filterTags = expression[0].split(","); var attrs = expression[1]; for (var i = 0, len = filterTags.length; i < len; i++) { var tag = filterTags[i]; html = html.replace(new RegExp("\<\s*" + tag + "\s*([^\>]*)\>([^\>]*)\<\s*\/" + tag + "\s*\>", "igm"), ""); } //return html; if (typeof attrs !== "undefined") { var htmlTagRegex = /\<(\w+)\s*([^\>]*)\>([^\>]*)\<\/(\w+)\>/ig; if (attrs === "*") { html = html.replace(htmlTagRegex, function($1, $2, $3, $4, $5) { return "<" + $2 + ">" + $4 + ""; }); } else if (attrs === "on*") { html = html.replace(htmlTagRegex, function($1, $2, $3, $4, $5) { var el = $("<" + $2 + ">" + $4 + ""); var _attrs = $($1)[0].attributes; var $attrs = {}; $.each(_attrs, function(i, e) { if (e.nodeName !== '"') $attrs[e.nodeName] = e.nodeValue; }); $.each($attrs, function(i) { if (i.indexOf("on") === 0) { delete $attrs[i]; } }); el.attr($attrs); var text = (typeof el[1] !== "undefined") ? $(el[1]).text() : ""; return el[0].outerHTML + text; }); } else { html = html.replace(htmlTagRegex, function($1, $2, $3, $4) { var filterAttrs = attrs.split(","); var el = $($1); el.html($4); $.each(filterAttrs, function(i) { el.attr(filterAttrs[i], null); }); return el[0].outerHTML; }); } } return html; }; /** * 将Markdown文档解析为HTML用于前台显示 * Parse Markdown to HTML for Font-end preview. * * @param {String} id 用于显示HTML的对象ID * @param {Object} [options={}] 配置选项,可选 * @returns {Object} div 返回jQuery对象元素 */ editormd.markdownToHTML = function(id, options) { var defaults = { gfm : true, toc : true, tocm : false, tocStartLevel : 1, tocTitle : "目录", tocDropdown : false, tocContainer : "", markdown : "", markdownSourceCode : false, htmlDecode : false, autoLoadKaTeX : true, pageBreak : true, atLink : true, // for @link emailLink : true, // for mail address auto link tex : false, taskList : false, // Github Flavored Markdown task lists emoji : false, flowChart : false, sequenceDiagram : false, previewCodeHighlight : true }; editormd.$marked = marked; var div = $("#" + id); var settings = div.settings = $.extend(true, defaults, options || {}); var saveTo = div.find("textarea"); if (saveTo.length < 1) { div.append(""); saveTo = div.find("textarea"); } var markdownDoc = (settings.markdown === "") ? saveTo.val() : settings.markdown; var markdownToC = []; var rendererOptions = { toc : settings.toc, tocm : settings.tocm, tocStartLevel : settings.tocStartLevel, taskList : settings.taskList, emoji : settings.emoji, tex : settings.tex, pageBreak : settings.pageBreak, atLink : settings.atLink, // for @link emailLink : settings.emailLink, // for mail address auto link flowChart : settings.flowChart, sequenceDiagram : settings.sequenceDiagram, previewCodeHighlight : settings.previewCodeHighlight, }; var markedOptions = { renderer : editormd.markedRenderer(markdownToC, rendererOptions), gfm : settings.gfm, tables : true, breaks : true, pedantic : false, sanitize : (settings.htmlDecode) ? false : true, // 是否忽略HTML标签,即是否开启HTML标签解析,为了安全性,默认不开启 smartLists : true, smartypants : true }; markdownDoc = new String(markdownDoc); var markdownParsed = marked(markdownDoc, markedOptions); markdownParsed = editormd.filterHTMLTags(markdownParsed, settings.htmlDecode); if (settings.markdownSourceCode) { saveTo.text(markdownDoc); } else { saveTo.remove(); } div.addClass("markdown-body " + this.classPrefix + "html-preview").append(markdownParsed); var tocContainer = (settings.tocContainer !== "") ? $(settings.tocContainer) : div; if (settings.tocContainer !== "") { tocContainer.attr("previewContainer", false); } if (settings.toc) { div.tocContainer = this.markdownToCRenderer(markdownToC, tocContainer, settings.tocDropdown, settings.tocStartLevel); if (settings.tocDropdown || div.find("." + this.classPrefix + "toc-menu").length > 0) { this.tocDropdownMenu(div, settings.tocTitle); } if (settings.tocContainer !== "") { div.find(".editormd-toc-menu, .editormd-markdown-toc").remove(); } } if (settings.previewCodeHighlight) { div.find("pre").addClass("prettyprint linenums"); prettyPrint(); } if (!editormd.isIE8) { if (settings.flowChart) { div.find(".flowchart").flowChart(); } if (settings.sequenceDiagram) { div.find(".sequence-diagram").sequenceDiagram({theme: "simple"}); } } if (settings.tex) { var katexHandle = function() { div.find("." + editormd.classNames.tex).each(function(){ var tex = $(this); katex.render(tex.html().replace(/</g, "<").replace(/>/g, ">"), tex[0]); tex.find(".katex").css("font-size", "1.6em"); }); }; if (settings.autoLoadKaTeX && !editormd.$katex && !editormd.kaTeXLoaded) { this.loadKaTeX(function() { editormd.$katex = katex; editormd.kaTeXLoaded = true; katexHandle(); }); } else { katexHandle(); } } div.getMarkdown = function() { return saveTo.val(); }; return div; }; // Editor.md themes, change toolbar themes etc. // added @1.5.0 editormd.themes = ["default", "dark"]; // Preview area themes // added @1.5.0 editormd.previewThemes = ["default", "dark"]; // CodeMirror / editor area themes // @1.5.0 rename -> editorThemes, old version -> themes editormd.editorThemes = [ "default", "3024-day", "3024-night", "ambiance", "ambiance-mobile", "base16-dark", "base16-light", "blackboard", "cobalt", "eclipse", "elegant", "erlang-dark", "lesser-dark", "mbo", "mdn-like", "midnight", "monokai", "neat", "neo", "night", "paraiso-dark", "paraiso-light", "pastel-on-dark", "rubyblue", "solarized", "the-matrix", "tomorrow-night-eighties", "twilight", "vibrant-ink", "xq-dark", "xq-light" ]; editormd.loadPlugins = {}; editormd.loadFiles = { js : [], css : [], plugin : [] }; /** * 动态加载Editor.md插件,但不立即执行 * Load editor.md plugins * * @param {String} fileName 插件文件路径 * @param {Function} [callback=function()] 加载成功后执行的回调函数 * @param {String} [into="head"] 嵌入页面的位置 */ editormd.loadPlugin = function(fileName, callback, into) { callback = callback || function() {}; this.loadScript(fileName, function() { editormd.loadFiles.plugin.push(fileName); callback(); }, into); }; /** * 动态加载CSS文件的方法 * Load css file method * * @param {String} fileName CSS文件名 * @param {Function} [callback=function()] 加载成功后执行的回调函数 * @param {String} [into="head"] 嵌入页面的位置 */ editormd.loadCSS = function(fileName, callback, into) { into = into || "head"; callback = callback || function() {}; var css = document.createElement("link"); css.type = "text/css"; css.rel = "stylesheet"; css.onload = css.onreadystatechange = function() { editormd.loadFiles.css.push(fileName); callback(); }; css.href = fileName + ".css"; if(into === "head") { document.getElementsByTagName("head")[0].appendChild(css); } else { document.body.appendChild(css); } }; editormd.isIE = (navigator.appName == "Microsoft Internet Explorer"); editormd.isIE8 = (editormd.isIE && navigator.appVersion.match(/8./i) == "8."); /** * 动态加载JS文件的方法 * Load javascript file method * * @param {String} fileName JS文件名 * @param {Function} [callback=function()] 加载成功后执行的回调函数 * @param {String} [into="head"] 嵌入页面的位置 */ editormd.loadScript = function(fileName, callback, into) { into = into || "head"; callback = callback || function() {}; var script = null; script = document.createElement("script"); script.id = fileName.replace(/[\./]+/g, "-"); script.type = "text/javascript"; script.src = fileName + ".js"; if (editormd.isIE8) { script.onreadystatechange = function() { if(script.readyState) { if (script.readyState === "loaded" || script.readyState === "complete") { script.onreadystatechange = null; editormd.loadFiles.js.push(fileName); callback(); } } }; } else { script.onload = function() { editormd.loadFiles.js.push(fileName); callback(); }; } if (into === "head") { document.getElementsByTagName("head")[0].appendChild(script); } else { document.body.appendChild(script); } }; // 使用国外的CDN,加载速度有时会很慢,或者自定义URL // You can custom KaTeX load url. editormd.katexURL = { css : "//cdnjs.cloudflare.com/ajax/libs/KaTeX/0.3.0/katex.min", js : "//cdnjs.cloudflare.com/ajax/libs/KaTeX/0.3.0/katex.min" }; editormd.kaTeXLoaded = false; /** * 加载KaTeX文件 * load KaTeX files * * @param {Function} [callback=function()] 加载成功后执行的回调函数 */ editormd.loadKaTeX = function (callback) { editormd.loadCSS(editormd.katexURL.css, function(){ editormd.loadScript(editormd.katexURL.js, callback || function(){}); }); }; /** * 锁屏 * lock screen * * @param {Boolean} lock Boolean 布尔值,是否锁屏 * @returns {void} */ editormd.lockScreen = function(lock) { $("html,body").css("overflow", (lock) ? "hidden" : ""); }; /** * 动态创建对话框 * Creating custom dialogs * * @param {Object} options 配置项键值对 Key/Value * @returns {dialog} 返回创建的dialog的jQuery实例对象 */ editormd.createDialog = function(options) { var defaults = { name : "", width : 420, height: 240, title : "", drag : true, closed : true, content : "", mask : true, maskStyle : { backgroundColor : "#fff", opacity : 0.1 }, lockScreen : true, footer : true, buttons : false }; options = $.extend(true, defaults, options); var $this = this; var editor = this.editor; var classPrefix = editormd.classPrefix; var guid = (new Date()).getTime(); var dialogName = ( (options.name === "") ? classPrefix + "dialog-" + guid : options.name); var mouseOrTouch = editormd.mouseOrTouch; var html = "
                      "; if (options.title !== "") { html += "
                      "; html += "" + options.title + ""; html += "
                      "; } if (options.closed) { html += ""; } html += "
                      " + options.content; if (options.footer || typeof options.footer === "string") { html += "
                      " + ( (typeof options.footer === "boolean") ? "" : options.footer) + "
                      "; } html += "
                      "; html += "
                      "; html += "
                      "; html += "
                      "; editor.append(html); var dialog = editor.find("." + dialogName); dialog.lockScreen = function(lock) { if (options.lockScreen) { $("html,body").css("overflow", (lock) ? "hidden" : ""); $this.resize(); } return dialog; }; dialog.showMask = function() { if (options.mask) { editor.find("." + classPrefix + "mask").css(options.maskStyle).css("z-index", editormd.dialogZindex - 1).show(); } return dialog; }; dialog.hideMask = function() { if (options.mask) { editor.find("." + classPrefix + "mask").hide(); } return dialog; }; dialog.loading = function(show) { var loading = dialog.find("." + classPrefix + "dialog-mask"); loading[(show) ? "show" : "hide"](); return dialog; }; dialog.lockScreen(true).showMask(); dialog.show().css({ zIndex : editormd.dialogZindex, border : (editormd.isIE8) ? "1px solid #ddd" : "", width : (typeof options.width === "number") ? options.width + "px" : options.width, height : (typeof options.height === "number") ? options.height + "px" : options.height }); var dialogPosition = function(){ dialog.css({ top : ($(window).height() - dialog.height()) / 2 + "px", left : ($(window).width() - dialog.width()) / 2 + "px" }); }; dialogPosition(); $(window).resize(dialogPosition); dialog.children("." + classPrefix + "dialog-close").bind(mouseOrTouch("click", "touchend"), function() { dialog.hide().lockScreen(false).hideMask(); }); if (typeof options.buttons === "object") { var footer = dialog.footer = dialog.find("." + classPrefix + "dialog-footer"); for (var key in options.buttons) { var btn = options.buttons[key]; var btnClassName = classPrefix + key + "-btn"; footer.append(""); btn[1] = $.proxy(btn[1], dialog); footer.children("." + btnClassName).bind(mouseOrTouch("click", "touchend"), btn[1]); } } if (options.title !== "" && options.drag) { var posX, posY; var dialogHeader = dialog.children("." + classPrefix + "dialog-header"); if (!options.mask) { dialogHeader.bind(mouseOrTouch("click", "touchend"), function(){ editormd.dialogZindex += 2; dialog.css("z-index", editormd.dialogZindex); }); } dialogHeader.mousedown(function(e) { e = e || window.event; //IE posX = e.clientX - parseInt(dialog[0].style.left); posY = e.clientY - parseInt(dialog[0].style.top); document.onmousemove = moveAction; }); var userCanSelect = function (obj) { obj.removeClass(classPrefix + "user-unselect").off("selectstart"); }; var userUnselect = function (obj) { obj.addClass(classPrefix + "user-unselect").on("selectstart", function(event) { // selectstart for IE return false; }); }; var moveAction = function (e) { e = e || window.event; //IE var left, top, nowLeft = parseInt(dialog[0].style.left), nowTop = parseInt(dialog[0].style.top); if( nowLeft >= 0 ) { if( nowLeft + dialog.width() <= $(window).width()) { left = e.clientX - posX; } else { left = $(window).width() - dialog.width(); document.onmousemove = null; } } else { left = 0; document.onmousemove = null; } if( nowTop >= 0 ) { top = e.clientY - posY; } else { top = 0; document.onmousemove = null; } document.onselectstart = function() { return false; }; userUnselect($("body")); userUnselect(dialog); dialog[0].style.left = left + "px"; dialog[0].style.top = top + "px"; }; document.onmouseup = function() { userCanSelect($("body")); userCanSelect(dialog); document.onselectstart = null; document.onmousemove = null; }; dialogHeader.touchDraggable = function() { var offset = null; var start = function(e) { var orig = e.originalEvent; var pos = $(this).parent().position(); offset = { x : orig.changedTouches[0].pageX - pos.left, y : orig.changedTouches[0].pageY - pos.top }; }; var move = function(e) { e.preventDefault(); var orig = e.originalEvent; $(this).parent().css({ top : orig.changedTouches[0].pageY - offset.y, left : orig.changedTouches[0].pageX - offset.x }); }; this.bind("touchstart", start).bind("touchmove", move); }; dialogHeader.touchDraggable(); } editormd.dialogZindex += 2; return dialog; }; /** * 鼠标和触摸事件的判断/选择方法 * MouseEvent or TouchEvent type switch * * @param {String} [mouseEventType="click"] 供选择的鼠标事件 * @param {String} [touchEventType="touchend"] 供选择的触摸事件 * @returns {String} EventType 返回事件类型名称 */ editormd.mouseOrTouch = function(mouseEventType, touchEventType) { mouseEventType = mouseEventType || "click"; touchEventType = touchEventType || "touchend"; var eventType = mouseEventType; try { document.createEvent("TouchEvent"); eventType = touchEventType; } catch(e) {} return eventType; }; /** * 日期时间的格式化方法 * Datetime format method * * @param {String} [format=""] 日期时间的格式,类似PHP的格式 * @returns {String} datefmt 返回格式化后的日期时间字符串 */ editormd.dateFormat = function(format) { format = format || ""; var addZero = function(d) { return (d < 10) ? "0" + d : d; }; var date = new Date(); var year = date.getFullYear(); var year2 = year.toString().slice(2, 4); var month = addZero(date.getMonth() + 1); var day = addZero(date.getDate()); var weekDay = date.getDay(); var hour = addZero(date.getHours()); var min = addZero(date.getMinutes()); var second = addZero(date.getSeconds()); var ms = addZero(date.getMilliseconds()); var datefmt = ""; var ymd = year2 + "-" + month + "-" + day; var fymd = year + "-" + month + "-" + day; var hms = hour + ":" + min + ":" + second; switch (format) { case "UNIX Time" : datefmt = date.getTime(); break; case "UTC" : datefmt = date.toUTCString(); break; case "yy" : datefmt = year2; break; case "year" : case "yyyy" : datefmt = year; break; case "month" : case "mm" : datefmt = month; break; case "cn-week-day" : case "cn-wd" : var cnWeekDays = ["日", "一", "二", "三", "四", "五", "六"]; datefmt = "星期" + cnWeekDays[weekDay]; break; case "week-day" : case "wd" : var weekDays = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]; datefmt = weekDays[weekDay]; break; case "day" : case "dd" : datefmt = day; break; case "hour" : case "hh" : datefmt = hour; break; case "min" : case "ii" : datefmt = min; break; case "second" : case "ss" : datefmt = second; break; case "ms" : datefmt = ms; break; case "yy-mm-dd" : datefmt = ymd; break; case "yyyy-mm-dd" : datefmt = fymd; break; case "yyyy-mm-dd h:i:s ms" : case "full + ms" : datefmt = fymd + " " + hms + " " + ms; break; case "full" : case "yyyy-mm-dd h:i:s" : default: datefmt = fymd + " " + hms; break; } return datefmt; }; return editormd; })); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/extensions/toastr.css ================================================ /* Version 2.1.4 */ .toast-title{font-weight:700}.toast-message{-ms-word-wrap:break-word;word-wrap:break-word}.toast-message a,.toast-message label{color:#fff}.toast-message a:hover{color:#ccc;text-decoration:none}.toast-close-button{position:relative;right:-.3em;top:-.3em;float:right;font-size:20px;font-weight:700;color:#fff;-webkit-text-shadow:0 1px 0 #fff;text-shadow:0 1px 0 #fff;opacity:.8;line-height:1}.toast-close-button:focus,.toast-close-button:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.4}.rtl .toast-close-button{left:-.3em;float:left;right:.3em}button.toast-close-button{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.toast-top-center{top:0;right:0;width:100%}.toast-bottom-center{bottom:0;right:0;width:100%}.toast-top-full-width{top:0;right:0;width:100%}.toast-bottom-full-width{bottom:0;right:0;width:100%}.toast-top-left{top:12px;left:12px}.toast-top-right{top:12px;right:12px}.toast-bottom-right{right:12px;bottom:12px}.toast-bottom-left{bottom:12px;left:12px}.toast-container{position:fixed;z-index:999999;pointer-events:none}.toast-container *{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.toast-container>div{position:relative;pointer-events:auto;overflow:hidden;margin:0 0 6px;padding:15px 15px 15px 50px;width:300px;-moz-border-radius:3px 3px 3px 3px;-webkit-border-radius:3px 3px 3px 3px;border-radius:3px 3px 3px 3px;background-position:15px center;background-repeat:no-repeat;-moz-box-shadow:0 0 12px #999;-webkit-box-shadow:0 0 12px #999;box-shadow:0 0 12px #999;color:#fff;opacity:.8}.toast-container>div.rtl{direction:rtl;padding:15px 50px 15px 15px;background-position:right 15px center}.toast-container>div:hover{-moz-box-shadow:0 0 12px #000;-webkit-box-shadow:0 0 12px #000;box-shadow:0 0 12px #000;opacity:1;cursor:pointer}.toast-container>.toast-info{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=)!important}.toast-container>.toast-error{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=)!important}.toast-container>.toast-success{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==)!important}.toast-container>.toast-warning{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=)!important}.toast-container.toast-bottom-center>div,.toast-container.toast-top-center>div{width:300px;margin-left:auto;margin-right:auto}.toast-container.toast-bottom-full-width>div,.toast-container.toast-top-full-width>div{width:96%;margin-left:auto;margin-right:auto}.toast{background-color:#030303}.toast-success{background-color:#51a351}.toast-error{background-color:#bd362f}.toast-info{background-color:#2f96b4}.toast-warning{background-color:#f89406}.toast-progress{position:absolute;left:0;bottom:0;height:4px;background-color:#000;opacity:.4}@media all and (max-width:240px){.toast-container>div{padding:8px 8px 8px 50px;width:11em}.toast-container>div.rtl{padding:8px 50px 8px 8px}.toast-container .toast-close-button{right:-.2em;top:-.2em}.toast-container .rtl .toast-close-button{left:-.2em;right:.2em}}@media all and (min-width:241px) and (max-width:480px){.toast-container>div{padding:8px 8px 8px 50px;width:18em}.toast-container>div.rtl{padding:8px 50px 8px 8px}.toast-container .toast-close-button{right:-.2em;top:-.2em}.toast-container .rtl .toast-close-button{left:-.2em;right:.2em}}@media all and (min-width:481px) and (max-width:768px){.toast-container>div{padding:15px 15px 15px 50px;width:25em}.toast-container>div.rtl{padding:15px 50px 15px 15px}} ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/fontawesome-iconpicker/dist/css/fontawesome-iconpicker.css ================================================ /*! * Font Awesome Icon Picker * https://farbelous.github.io/fontawesome-iconpicker/ * * Originally written by (c) 2016 Javi Aguilar * Licensed under the MIT License * https://github.com/farbelous/fontawesome-iconpicker/blob/master/LICENSE * */ /* * Font Awesome Icon Picker * https://farbelous.github.io/fontawesome-iconpicker/ * * Originally written by (c) 2016 Javi Aguilar * Licensed under the MIT License * https://github.com/farbelous/fontawesome-iconpicker/blob/master/LICENSE * */ /* * Font Awesome Icon Picker * https://farbelous.github.io/fontawesome-iconpicker/ * * Originally written by (c) 2016 Javi Aguilar * Licensed under the MIT License * https://github.com/farbelous/fontawesome-iconpicker/blob/master/LICENSE * */ .iconpicker-popover.popover { position: absolute; top: 0; left: 0; display: none; max-width: none; padding: 1px; text-align: left; width: 216px; background: #f7f7f7; z-index: 9; } .iconpicker-popover.popover.top, .iconpicker-popover.popover.topLeftCorner, .iconpicker-popover.popover.topLeft, .iconpicker-popover.popover.topRight, .iconpicker-popover.popover.topRightCorner { margin-top: -10px; } .iconpicker-popover.popover.right, .iconpicker-popover.popover.rightTop, .iconpicker-popover.popover.rightBottom { margin-left: 10px; } .iconpicker-popover.popover.bottom, .iconpicker-popover.popover.bottomRightCorner, .iconpicker-popover.popover.bottomRight, .iconpicker-popover.popover.bottomLeft, .iconpicker-popover.popover.bottomLeftCorner { margin-top: 10px; } .iconpicker-popover.popover.left, .iconpicker-popover.popover.leftBottom, .iconpicker-popover.popover.leftTop { margin-left: -10px; } .iconpicker-popover.popover.inline { margin: 0 0 12px 0; position: relative; display: inline-block; opacity: 1; top: auto; left: auto; bottom: auto; right: auto; max-width: 100%; box-shadow: none; z-index: auto; vertical-align: top; } .iconpicker-popover.popover.inline > .arrow { display: none; } .dropdown-menu .iconpicker-popover.inline { margin: 0; border: none; } .dropdown-menu.iconpicker-container { padding: 0; } .iconpicker-popover.popover .popover-title { padding: 12px; font-size: 13px; line-height: 15px; border-bottom: 1px solid #ebebeb; background-color: #f7f7f7; } .iconpicker-popover.popover .popover-title input[type=search].iconpicker-search { margin: 0 0 2px 0; } .iconpicker-popover.popover .popover-title-text ~ input[type=search].iconpicker-search { margin-top: 12px; } .iconpicker-popover.popover .popover-content { padding: 0px; text-align: center; } .iconpicker-popover .popover-footer { float: none; clear: both; padding: 12px; text-align: right; margin: 0; border-top: 1px solid #ebebeb; background-color: #f7f7f7; } .iconpicker-popover .popover-footer:before, .iconpicker-popover .popover-footer:after { content: " "; display: table; } .iconpicker-popover .popover-footer:after { clear: both; } .iconpicker-popover .popover-footer .iconpicker-btn { margin-left: 10px; } .iconpicker-popover .popover-footer input[type=search].iconpicker-search { /*width:auto; float:left;*/ margin-bottom: 12px; } .iconpicker-popover.popover > .arrow, .iconpicker-popover.popover > .arrow:after { position: absolute; display: block; width: 0; height: 0; border-color: transparent; border-style: solid; } .iconpicker-popover.popover > .arrow { border-width: 11px; } .iconpicker-popover.popover > .arrow:after { border-width: 10px; content: ""; } .iconpicker-popover.popover.top > .arrow, .iconpicker-popover.popover.topLeft > .arrow, .iconpicker-popover.popover.topRight > .arrow { left: 50%; margin-left: -11px; border-bottom-width: 0; border-top-color: #999999; border-top-color: rgba(0, 0, 0, 0.25); bottom: -11px; } .iconpicker-popover.popover.top > .arrow:after, .iconpicker-popover.popover.topLeft > .arrow:after, .iconpicker-popover.popover.topRight > .arrow:after { content: " "; bottom: 1px; margin-left: -10px; border-bottom-width: 0; border-top-color: #ffffff; } .iconpicker-popover.popover.topLeft > .arrow { left: 8px; margin-left: 0; } .iconpicker-popover.popover.topRight > .arrow { left: auto; right: 8px; margin-left: 0; } .iconpicker-popover.popover.right > .arrow, .iconpicker-popover.popover.rightTop > .arrow, .iconpicker-popover.popover.rightBottom > .arrow { top: 50%; left: -11px; margin-top: -11px; border-left-width: 0; border-right-color: #999999; border-right-color: rgba(0, 0, 0, 0.25); } .iconpicker-popover.popover.right > .arrow:after, .iconpicker-popover.popover.rightTop > .arrow:after, .iconpicker-popover.popover.rightBottom > .arrow:after { content: " "; left: 1px; bottom: -10px; border-left-width: 0; border-right-color: #ffffff; } .iconpicker-popover.popover.rightTop > .arrow { top: auto; bottom: 8px; margin-top: 0; } .iconpicker-popover.popover.rightBottom > .arrow { top: 8px; margin-top: 0; } .iconpicker-popover.popover.bottom > .arrow, .iconpicker-popover.popover.bottomRight > .arrow, .iconpicker-popover.popover.bottomLeft > .arrow { left: 50%; margin-left: -11px; border-top-width: 0; border-bottom-color: #999999; border-bottom-color: rgba(0, 0, 0, 0.25); top: -11px; } .iconpicker-popover.popover.bottom > .arrow:after, .iconpicker-popover.popover.bottomRight > .arrow:after, .iconpicker-popover.popover.bottomLeft > .arrow:after { content: " "; top: 1px; margin-left: -10px; border-top-width: 0; border-bottom-color: #ffffff; } .iconpicker-popover.popover.bottomLeft > .arrow { left: 8px; margin-left: 0; } .iconpicker-popover.popover.bottomRight > .arrow { left: auto; right: 8px; margin-left: 0; } .iconpicker-popover.popover.left > .arrow, .iconpicker-popover.popover.leftBottom > .arrow, .iconpicker-popover.popover.leftTop > .arrow { top: 50%; right: -11px; margin-top: -11px; border-right-width: 0; border-left-color: #999999; border-left-color: rgba(0, 0, 0, 0.25); } .iconpicker-popover.popover.left > .arrow:after, .iconpicker-popover.popover.leftBottom > .arrow:after, .iconpicker-popover.popover.leftTop > .arrow:after { content: " "; right: 1px; border-right-width: 0; border-left-color: #ffffff; bottom: -10px; } .iconpicker-popover.popover.leftBottom > .arrow { top: 8px; margin-top: 0; } .iconpicker-popover.popover.leftTop > .arrow { top: auto; bottom: 8px; margin-top: 0; } .iconpicker { position: relative; text-align: left; text-shadow: none; line-height: 0; display: block; margin: 0; overflow: hidden; } .iconpicker * { -webkit-box-sizing: content-box; -moz-box-sizing: content-box; box-sizing: content-box; position: relative; } .iconpicker:before, .iconpicker:after { content: " "; display: table; } .iconpicker:after { clear: both; } .iconpicker .iconpicker-items { position: relative; clear: both; float: none; padding: 12px 0 0 12px; background: #fff; margin: 0; overflow: hidden; overflow-y: auto; min-height: 49px; max-height: 246px; } .iconpicker .iconpicker-items:before, .iconpicker .iconpicker-items:after { content: " "; display: table; } .iconpicker .iconpicker-items:after { clear: both; } .iconpicker .iconpicker-item { float: left; width: 14px; height: 14px; padding: 12px; margin: 0 12px 12px 0; text-align: center; cursor: pointer; border-radius: 3px; font-size: 14px; box-shadow: 0 0 0 1px #dddddd; color: inherit; /*&:nth-child(4n+4) { margin-right: 0; } &:nth-last-child(-n+4) { margin-bottom: 0; }*/ } .iconpicker .iconpicker-item:hover:not(.iconpicker-selected) { background-color: #eeeeee; } .iconpicker .iconpicker-item.iconpicker-selected { box-shadow: none; color: #fff; background: #000; } .iconpicker-component { cursor: pointer; } ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/fontawesome-iconpicker/dist/js/fontawesome-iconpicker.js ================================================ (function(a) { if (typeof define === "function" && define.amd) { define([ "jquery" ], a); } else { a(jQuery); } })(function(a) { a.ui = a.ui || {}; var b = a.ui.version = "1.12.1"; (function() { var b, c = Math.max, d = Math.abs, e = /left|center|right/, f = /top|center|bottom/, g = /[\+\-]\d+(\.[\d]+)?%?/, h = /^\w+/, i = /%$/, j = a.fn.pos; function k(a, b, c) { return [ parseFloat(a[0]) * (i.test(a[0]) ? b / 100 : 1), parseFloat(a[1]) * (i.test(a[1]) ? c / 100 : 1) ]; } function l(b, c) { return parseInt(a.css(b, c), 10) || 0; } function m(b) { var c = b[0]; if (c.nodeType === 9) { return { width: b.width(), height: b.height(), offset: { top: 0, left: 0 } }; } if (a.isWindow(c)) { return { width: b.width(), height: b.height(), offset: { top: b.scrollTop(), left: b.scrollLeft() } }; } if (c.preventDefault) { return { width: 0, height: 0, offset: { top: c.pageY, left: c.pageX } }; } return { width: b.outerWidth(), height: b.outerHeight(), offset: b.offset() }; } a.pos = { scrollbarWidth: function() { if (b !== undefined) { return b; } var c, d, e = a("
                      " + "
                      "), f = e.children()[0]; a("body").append(e); c = f.offsetWidth; e.css("overflow", "scroll"); d = f.offsetWidth; if (c === d) { d = e[0].clientWidth; } e.remove(); return b = c - d; }, getScrollInfo: function(b) { var c = b.isWindow || b.isDocument ? "" : b.element.css("overflow-x"), d = b.isWindow || b.isDocument ? "" : b.element.css("overflow-y"), e = c === "scroll" || c === "auto" && b.width < b.element[0].scrollWidth, f = d === "scroll" || d === "auto" && b.height < b.element[0].scrollHeight; return { width: f ? a.pos.scrollbarWidth() : 0, height: e ? a.pos.scrollbarWidth() : 0 }; }, getWithinInfo: function(b) { var c = a(b || window), d = a.isWindow(c[0]), e = !!c[0] && c[0].nodeType === 9, f = !d && !e; return { element: c, isWindow: d, isDocument: e, offset: f ? a(b).offset() : { left: 0, top: 0 }, scrollLeft: c.scrollLeft(), scrollTop: c.scrollTop(), width: c.outerWidth(), height: c.outerHeight() }; } }; a.fn.pos = function(b) { if (!b || !b.of) { return j.apply(this, arguments); } b = a.extend({}, b); var i, n, o, p, q, r, s = a(b.of), t = a.pos.getWithinInfo(b.within), u = a.pos.getScrollInfo(t), v = (b.collision || "flip").split(" "), w = {}; r = m(s); if (s[0].preventDefault) { b.at = "left top"; } n = r.width; o = r.height; p = r.offset; q = a.extend({}, p); a.each([ "my", "at" ], function() { var a = (b[this] || "").split(" "), c, d; if (a.length === 1) { a = e.test(a[0]) ? a.concat([ "center" ]) : f.test(a[0]) ? [ "center" ].concat(a) : [ "center", "center" ]; } a[0] = e.test(a[0]) ? a[0] : "center"; a[1] = f.test(a[1]) ? a[1] : "center"; c = g.exec(a[0]); d = g.exec(a[1]); w[this] = [ c ? c[0] : 0, d ? d[0] : 0 ]; b[this] = [ h.exec(a[0])[0], h.exec(a[1])[0] ]; }); if (v.length === 1) { v[1] = v[0]; } if (b.at[0] === "right") { q.left += n; } else if (b.at[0] === "center") { q.left += n / 2; } if (b.at[1] === "bottom") { q.top += o; } else if (b.at[1] === "center") { q.top += o / 2; } i = k(w.at, n, o); q.left += i[0]; q.top += i[1]; return this.each(function() { var e, f, g = a(this), h = g.outerWidth(), j = g.outerHeight(), m = l(this, "marginLeft"), r = l(this, "marginTop"), x = h + m + l(this, "marginRight") + u.width, y = j + r + l(this, "marginBottom") + u.height, z = a.extend({}, q), A = k(w.my, g.outerWidth(), g.outerHeight()); if (b.my[0] === "right") { z.left -= h; } else if (b.my[0] === "center") { z.left -= h / 2; } if (b.my[1] === "bottom") { z.top -= j; } else if (b.my[1] === "center") { z.top -= j / 2; } z.left += A[0]; z.top += A[1]; e = { marginLeft: m, marginTop: r }; a.each([ "left", "top" ], function(c, d) { if (a.ui.pos[v[c]]) { a.ui.pos[v[c]][d](z, { targetWidth: n, targetHeight: o, elemWidth: h, elemHeight: j, collisionPosition: e, collisionWidth: x, collisionHeight: y, offset: [ i[0] + A[0], i[1] + A[1] ], my: b.my, at: b.at, within: t, elem: g }); } }); if (b.using) { f = function(a) { var e = p.left - z.left, f = e + n - h, i = p.top - z.top, k = i + o - j, l = { target: { element: s, left: p.left, top: p.top, width: n, height: o }, element: { element: g, left: z.left, top: z.top, width: h, height: j }, horizontal: f < 0 ? "left" : e > 0 ? "right" : "center", vertical: k < 0 ? "top" : i > 0 ? "bottom" : "middle" }; if (n < h && d(e + f) < n) { l.horizontal = "center"; } if (o < j && d(i + k) < o) { l.vertical = "middle"; } if (c(d(e), d(f)) > c(d(i), d(k))) { l.important = "horizontal"; } else { l.important = "vertical"; } b.using.call(this, a, l); }; } g.offset(a.extend(z, { using: f })); }); }; a.ui.pos = { _trigger: function(a, b, c, d) { if (b.elem) { b.elem.trigger({ type: c, position: a, positionData: b, triggered: d }); } }, fit: { left: function(b, d) { a.ui.pos._trigger(b, d, "posCollide", "fitLeft"); var e = d.within, f = e.isWindow ? e.scrollLeft : e.offset.left, g = e.width, h = b.left - d.collisionPosition.marginLeft, i = f - h, j = h + d.collisionWidth - g - f, k; if (d.collisionWidth > g) { if (i > 0 && j <= 0) { k = b.left + i + d.collisionWidth - g - f; b.left += i - k; } else if (j > 0 && i <= 0) { b.left = f; } else { if (i > j) { b.left = f + g - d.collisionWidth; } else { b.left = f; } } } else if (i > 0) { b.left += i; } else if (j > 0) { b.left -= j; } else { b.left = c(b.left - h, b.left); } a.ui.pos._trigger(b, d, "posCollided", "fitLeft"); }, top: function(b, d) { a.ui.pos._trigger(b, d, "posCollide", "fitTop"); var e = d.within, f = e.isWindow ? e.scrollTop : e.offset.top, g = d.within.height, h = b.top - d.collisionPosition.marginTop, i = f - h, j = h + d.collisionHeight - g - f, k; if (d.collisionHeight > g) { if (i > 0 && j <= 0) { k = b.top + i + d.collisionHeight - g - f; b.top += i - k; } else if (j > 0 && i <= 0) { b.top = f; } else { if (i > j) { b.top = f + g - d.collisionHeight; } else { b.top = f; } } } else if (i > 0) { b.top += i; } else if (j > 0) { b.top -= j; } else { b.top = c(b.top - h, b.top); } a.ui.pos._trigger(b, d, "posCollided", "fitTop"); } }, flip: { left: function(b, c) { a.ui.pos._trigger(b, c, "posCollide", "flipLeft"); var e = c.within, f = e.offset.left + e.scrollLeft, g = e.width, h = e.isWindow ? e.scrollLeft : e.offset.left, i = b.left - c.collisionPosition.marginLeft, j = i - h, k = i + c.collisionWidth - g - h, l = c.my[0] === "left" ? -c.elemWidth : c.my[0] === "right" ? c.elemWidth : 0, m = c.at[0] === "left" ? c.targetWidth : c.at[0] === "right" ? -c.targetWidth : 0, n = -2 * c.offset[0], o, p; if (j < 0) { o = b.left + l + m + n + c.collisionWidth - g - f; if (o < 0 || o < d(j)) { b.left += l + m + n; } } else if (k > 0) { p = b.left - c.collisionPosition.marginLeft + l + m + n - h; if (p > 0 || d(p) < k) { b.left += l + m + n; } } a.ui.pos._trigger(b, c, "posCollided", "flipLeft"); }, top: function(b, c) { a.ui.pos._trigger(b, c, "posCollide", "flipTop"); var e = c.within, f = e.offset.top + e.scrollTop, g = e.height, h = e.isWindow ? e.scrollTop : e.offset.top, i = b.top - c.collisionPosition.marginTop, j = i - h, k = i + c.collisionHeight - g - h, l = c.my[1] === "top", m = l ? -c.elemHeight : c.my[1] === "bottom" ? c.elemHeight : 0, n = c.at[1] === "top" ? c.targetHeight : c.at[1] === "bottom" ? -c.targetHeight : 0, o = -2 * c.offset[1], p, q; if (j < 0) { q = b.top + m + n + o + c.collisionHeight - g - f; if (q < 0 || q < d(j)) { b.top += m + n + o; } } else if (k > 0) { p = b.top - c.collisionPosition.marginTop + m + n + o - h; if (p > 0 || d(p) < k) { b.top += m + n + o; } } a.ui.pos._trigger(b, c, "posCollided", "flipTop"); } }, flipfit: { left: function() { a.ui.pos.flip.left.apply(this, arguments); a.ui.pos.fit.left.apply(this, arguments); }, top: function() { a.ui.pos.flip.top.apply(this, arguments); a.ui.pos.fit.top.apply(this, arguments); } } }; (function() { var b, c, d, e, f, g = document.getElementsByTagName("body")[0], h = document.createElement("div"); b = document.createElement(g ? "div" : "body"); d = { visibility: "hidden", width: 0, height: 0, border: 0, margin: 0, background: "none" }; if (g) { a.extend(d, { position: "absolute", left: "-1000px", top: "-1000px" }); } for (f in d) { b.style[f] = d[f]; } b.appendChild(h); c = g || document.documentElement; c.insertBefore(b, c.firstChild); h.style.cssText = "position: absolute; left: 10.7432222px;"; e = a(h).offset().left; a.support.offsetFractions = e > 10 && e < 11; b.innerHTML = ""; c.removeChild(b); })(); })(); var c = a.ui.position; }); (function(a) { "use strict"; if (typeof define === "function" && define.amd) { define([ "jquery" ], a); } else if (window.jQuery && !window.jQuery.fn.iconpicker) { a(window.jQuery); } })(function(a) { "use strict"; var b = { isEmpty: function(a) { return a === false || a === "" || a === null || a === undefined; }, isEmptyObject: function(a) { return this.isEmpty(a) === true || a.length === 0; }, isElement: function(b) { return a(b).length > 0; }, isString: function(a) { return typeof a === "string" || a instanceof String; }, isArray: function(b) { return a.isArray(b); }, inArray: function(b, c) { return a.inArray(b, c) !== -1; }, throwError: function(a) { throw "Font Awesome Icon Picker Exception: " + a; } }; var c = function(d, e) { this._id = c._idCounter++; this.element = a(d).addClass("iconpicker-element"); this._trigger("iconpickerCreate"); this.options = a.extend({}, c.defaultOptions, this.element.data(), e); this.options.templates = a.extend({}, c.defaultOptions.templates, this.options.templates); this.options.originalPlacement = this.options.placement; this.container = b.isElement(this.options.container) ? a(this.options.container) : false; if (this.container === false) { if (this.element.is(".dropdown-toggle")) { this.container = a("~ .dropdown-menu:first", this.element); } else { this.container = this.element.is("input,textarea,button,.btn") ? this.element.parent() : this.element; } } this.container.addClass("iconpicker-container"); if (this.isDropdownMenu()) { this.options.templates.search = false; this.options.templates.buttons = false; this.options.placement = "inline"; } this.input = this.element.is("input,textarea") ? this.element.addClass("iconpicker-input") : false; if (this.input === false) { this.input = this.container.find(this.options.input); if (!this.input.is("input,textarea")) { this.input = false; } } this.component = this.isDropdownMenu() ? this.container.parent().find(this.options.component) : this.container.find(this.options.component); if (this.component.length === 0) { this.component = false; } else { this.component.find("i").addClass("iconpicker-component"); } this._createPopover(); this._createIconpicker(); if (this.getAcceptButton().length === 0) { this.options.mustAccept = false; } if (this.isInputGroup()) { this.container.parent().append(this.popover); } else { this.container.append(this.popover); } this._bindElementEvents(); this._bindWindowEvents(); this.update(this.options.selected); if (this.isInline()) { this.show(); } this._trigger("iconpickerCreated"); }; c._idCounter = 0; c.defaultOptions = { title: false, selected: false, defaultValue: false, placement: "bottom", collision: "none", animation: true, hideOnSelect: false, showFooter: false, searchInFooter: false, mustAccept: false, selectedCustomClass: "bg-primary", icons: [], fullClassFormatter: function(a) { return "fa " + a; }, input: "input,.iconpicker-input", inputSearch: false, container: false, component: ".input-group-addon,.iconpicker-component", templates: { popover: '
                      ' + '
                      ', footer: '', buttons: '' + ' ', search: '', iconpicker: '
                      ', iconpickerItem: '' } }; c.batch = function(b, c) { var d = Array.prototype.slice.call(arguments, 2); return a(b).each(function() { var b = a(this).data("iconpicker"); if (!!b) { b[c].apply(b, d); } }); }; c.prototype = { constructor: c, options: {}, _id: 0, _trigger: function(b, c) { c = c || {}; this.element.trigger(a.extend({ type: b, iconpickerInstance: this }, c)); }, _createPopover: function() { this.popover = a(this.options.templates.popover); var c = this.popover.find(".popover-title"); if (!!this.options.title) { c.append(a('
                      ' + this.options.title + "
                      ")); } if (this.hasSeparatedSearchInput() && !this.options.searchInFooter) { c.append(this.options.templates.search); } else if (!this.options.title) { c.remove(); } if (this.options.showFooter && !b.isEmpty(this.options.templates.footer)) { var d = a(this.options.templates.footer); if (this.hasSeparatedSearchInput() && this.options.searchInFooter) { d.append(a(this.options.templates.search)); } if (!b.isEmpty(this.options.templates.buttons)) { d.append(a(this.options.templates.buttons)); } this.popover.append(d); } if (this.options.animation === true) { this.popover.addClass("fade"); } return this.popover; }, _createIconpicker: function() { var b = this; this.iconpicker = a(this.options.templates.iconpicker); var c = function(c) { var d = a(this); if (d.is("i")) { d = d.parent(); } b._trigger("iconpickerSelect", { iconpickerItem: d, iconpickerValue: b.iconpickerValue }); if (b.options.mustAccept === false) { b.update(d.data("iconpickerValue")); b._trigger("iconpickerSelected", { iconpickerItem: this, iconpickerValue: b.iconpickerValue }); } else { b.update(d.data("iconpickerValue"), true); } if (b.options.hideOnSelect && b.options.mustAccept === false) { b.hide(); } c.preventDefault(); return false; }; for (var d in this.options.icons) { if (typeof this.options.icons[d] === "string") { var e = a(this.options.templates.iconpickerItem); e.find("i").addClass(this.options.fullClassFormatter(this.options.icons[d])); e.data("iconpickerValue", this.options.icons[d]).on("click.iconpicker", c); this.iconpicker.find(".iconpicker-items").append(e.attr("title", "." + this.options.icons[d])); } } this.popover.find(".popover-content").append(this.iconpicker); return this.iconpicker; }, _isEventInsideIconpicker: function(b) { var c = a(b.target); if ((!c.hasClass("iconpicker-element") || c.hasClass("iconpicker-element") && !c.is(this.element)) && c.parents(".iconpicker-popover").length === 0) { return false; } return true; }, _bindElementEvents: function() { var c = this; this.getSearchInput().on("keyup.iconpicker", function() { c.filter(a(this).val().toLowerCase()); }); this.getAcceptButton().on("click.iconpicker", function() { var a = c.iconpicker.find(".iconpicker-selected").get(0); c.update(c.iconpickerValue); c._trigger("iconpickerSelected", { iconpickerItem: a, iconpickerValue: c.iconpickerValue }); if (!c.isInline()) { c.hide(); } }); this.getCancelButton().on("click.iconpicker", function() { if (!c.isInline()) { c.hide(); } }); this.element.on("focus.iconpicker", function(a) { c.show(); a.stopPropagation(); }); if (this.hasComponent()) { this.component.on("click.iconpicker", function() { c.toggle(); }); } if (this.hasInput()) { this.input.on("keyup.iconpicker", function(d) { if (!b.inArray(d.keyCode, [ 38, 40, 37, 39, 16, 17, 18, 9, 8, 91, 93, 20, 46, 186, 190, 46, 78, 188, 44, 86 ])) { c.update(); } else { c._updateFormGroupStatus(c.getValid(this.value) !== false); } if (c.options.inputSearch === true) { c.filter(a(this).val().toLowerCase()); } }); } }, _bindWindowEvents: function() { var b = a(window.document); var c = this; var d = ".iconpicker.inst" + this._id; a(window).on("resize.iconpicker" + d + " orientationchange.iconpicker" + d, function(a) { if (c.popover.hasClass("in")) { c.updatePlacement(); } }); if (!c.isInline()) { b.on("mouseup" + d, function(a) { if (!c._isEventInsideIconpicker(a) && !c.isInline()) { c.hide(); } a.stopPropagation(); a.preventDefault(); return false; }); } return false; }, _unbindElementEvents: function() { this.popover.off(".iconpicker"); this.element.off(".iconpicker"); if (this.hasInput()) { this.input.off(".iconpicker"); } if (this.hasComponent()) { this.component.off(".iconpicker"); } if (this.hasContainer()) { this.container.off(".iconpicker"); } }, _unbindWindowEvents: function() { a(window).off(".iconpicker.inst" + this._id); a(window.document).off(".iconpicker.inst" + this._id); }, updatePlacement: function(b, c) { b = b || this.options.placement; this.options.placement = b; c = c || this.options.collision; c = c === true ? "flip" : c; var d = { at: "right bottom", my: "right top", of: this.hasInput() && !this.isInputGroup() ? this.input : this.container, collision: c === true ? "flip" : c, within: window }; this.popover.removeClass("inline topLeftCorner topLeft top topRight topRightCorner " + "rightTop right rightBottom bottomRight bottomRightCorner " + "bottom bottomLeft bottomLeftCorner leftBottom left leftTop"); if (typeof b === "object") { return this.popover.pos(a.extend({}, d, b)); } switch (b) { case "inline": { d = false; } break; case "topLeftCorner": { d.my = "right bottom"; d.at = "left top"; } break; case "topLeft": { d.my = "left bottom"; d.at = "left top"; } break; case "top": { d.my = "center bottom"; d.at = "center top"; } break; case "topRight": { d.my = "right bottom"; d.at = "right top"; } break; case "topRightCorner": { d.my = "left bottom"; d.at = "right top"; } break; case "rightTop": { d.my = "left bottom"; d.at = "right center"; } break; case "right": { d.my = "left center"; d.at = "right center"; } break; case "rightBottom": { d.my = "left top"; d.at = "right center"; } break; case "bottomRightCorner": { d.my = "left top"; d.at = "right bottom"; } break; case "bottomRight": { d.my = "right top"; d.at = "right bottom"; } break; case "bottom": { d.my = "center top"; d.at = "center bottom"; } break; case "bottomLeft": { d.my = "left top"; d.at = "left bottom"; } break; case "bottomLeftCorner": { d.my = "right top"; d.at = "left bottom"; } break; case "leftBottom": { d.my = "right top"; d.at = "left center"; } break; case "left": { d.my = "right center"; d.at = "left center"; } break; case "leftTop": { d.my = "right bottom"; d.at = "left center"; } break; default: { return false; } break; } this.popover.css({ display: this.options.placement === "inline" ? "" : "block" }); if (d !== false) { this.popover.pos(d).css("maxWidth", a(window).width() - this.container.offset().left - 5); } else { this.popover.css({ top: "auto", right: "auto", bottom: "auto", left: "auto", maxWidth: "none" }); } this.popover.addClass(this.options.placement); return true; }, _updateComponents: function() { this.iconpicker.find(".iconpicker-item.iconpicker-selected").removeClass("iconpicker-selected " + this.options.selectedCustomClass); if (this.iconpickerValue) { this.iconpicker.find("." + this.options.fullClassFormatter(this.iconpickerValue).replace(/ /g, ".")).parent().addClass("iconpicker-selected " + this.options.selectedCustomClass); } if (this.hasComponent()) { var a = this.component.find("i"); if (a.length > 0) { a.attr("class", this.options.fullClassFormatter(this.iconpickerValue)); } else { this.component.html(this.getHtml()); } } }, _updateFormGroupStatus: function(a) { if (this.hasInput()) { // if (a !== false) { // this.input.parents(".form-group:first").removeClass("has-error"); // } else { // this.input.parents(".form-group:first").addClass("has-error"); // } return true; } return false; }, getValid: function(c) { if (!b.isString(c)) { c = ""; } var d = c === ""; c = a.trim(c); if (b.inArray(c, this.options.icons) || d) { return c; } return false; }, setValue: function(a) { var b = this.getValid(a); if (b !== false) { this.iconpickerValue = b; this._trigger("iconpickerSetValue", { iconpickerValue: b }); return this.iconpickerValue; } else { this._trigger("iconpickerInvalid", { iconpickerValue: a }); return false; } }, getHtml: function() { return ''; }, setSourceValue: function(a) { a = this.setValue(a); if (a !== false && a !== "") { if (this.hasInput()) { this.input.val(this.iconpickerValue); } else { this.element.data("iconpickerValue", this.iconpickerValue); } this._trigger("iconpickerSetSourceValue", { iconpickerValue: a }); } return a; }, getSourceValue: function(a) { a = a || this.options.defaultValue; var b = a; if (this.hasInput()) { b = this.input.val(); } else { b = this.element.data("iconpickerValue"); } if (b === undefined || b === "" || b === null || b === false) { b = a; } return b; }, hasInput: function() { return this.input !== false; }, isInputSearch: function() { return this.hasInput() && this.options.inputSearch === true; }, isInputGroup: function() { return this.container.is(".input-group"); }, isDropdownMenu: function() { return this.container.is(".dropdown-menu"); }, hasSeparatedSearchInput: function() { return this.options.templates.search !== false && !this.isInputSearch(); }, hasComponent: function() { return this.component !== false; }, hasContainer: function() { return this.container !== false; }, getAcceptButton: function() { return this.popover.find(".iconpicker-btn-accept"); }, getCancelButton: function() { return this.popover.find(".iconpicker-btn-cancel"); }, getSearchInput: function() { return this.popover.find(".iconpicker-search"); }, filter: function(c) { if (b.isEmpty(c)) { this.iconpicker.find(".iconpicker-item").show(); return a(false); } else { var d = []; this.iconpicker.find(".iconpicker-item").each(function() { var b = a(this); var e = b.attr("title").toLowerCase(); var f = false; try { f = new RegExp(c, "g"); } catch (a) { f = false; } if (f !== false && e.match(f)) { d.push(b); b.show(); } else { b.hide(); } }); return d; } }, show: function() { if (this.popover.hasClass("in")) { return false; } a.iconpicker.batch(a(".iconpicker-popover.in:not(.inline)").not(this.popover), "hide"); this._trigger("iconpickerShow"); this.updatePlacement(); this.popover.addClass("in"); setTimeout(a.proxy(function() { this.popover.css("display", this.isInline() ? "" : "block"); this._trigger("iconpickerShown"); }, this), this.options.animation ? 300 : 1); }, hide: function() { if (!this.popover.hasClass("in")) { return false; } this._trigger("iconpickerHide"); this.popover.removeClass("in"); setTimeout(a.proxy(function() { this.popover.css("display", "none"); this.getSearchInput().val(""); this.filter(""); this._trigger("iconpickerHidden"); }, this), this.options.animation ? 300 : 1); }, toggle: function() { if (this.popover.is(":visible")) { this.hide(); } else { this.show(true); } }, update: function(a, b) { a = a ? a : this.getSourceValue(this.iconpickerValue); this._trigger("iconpickerUpdate"); if (b === true) { a = this.setValue(a); } else { a = this.setSourceValue(a); this._updateFormGroupStatus(a !== false); } if (a !== false) { this._updateComponents(); } this._trigger("iconpickerUpdated"); return a; }, destroy: function() { this._trigger("iconpickerDestroy"); this.element.removeData("iconpicker").removeData("iconpickerValue").removeClass("iconpicker-element"); this._unbindElementEvents(); this._unbindWindowEvents(); a(this.popover).remove(); this._trigger("iconpickerDestroyed"); }, disable: function() { if (this.hasInput()) { this.input.prop("disabled", true); return true; } return false; }, enable: function() { if (this.hasInput()) { this.input.prop("disabled", false); return true; } return false; }, isDisabled: function() { if (this.hasInput()) { return this.input.prop("disabled") === true; } return false; }, isInline: function() { return this.options.placement === "inline" || this.popover.hasClass("inline"); } }; a.iconpicker = c; a.fn.iconpicker = function(b) { return this.each(function() { var d = a(this); if (!d.data("iconpicker")) { d.data("iconpicker", new c(this, typeof b === "object" ? b : {})); } }); }; c.defaultOptions.icons = [ "fa-500px", "fa-address-book", "fa-address-book-o", "fa-address-card", "fa-address-card-o", "fa-adjust", "fa-adn", "fa-align-center", "fa-align-justify", "fa-align-left", "fa-align-right", "fa-amazon", "fa-ambulance", "fa-american-sign-language-interpreting", "fa-anchor", "fa-android", "fa-angellist", "fa-angle-double-down", "fa-angle-double-left", "fa-angle-double-right", "fa-angle-double-up", "fa-angle-down", "fa-angle-left", "fa-angle-right", "fa-angle-up", "fa-apple", "fa-archive", "fa-area-chart", "fa-arrow-circle-down", "fa-arrow-circle-left", "fa-arrow-circle-o-down", "fa-arrow-circle-o-left", "fa-arrow-circle-o-right", "fa-arrow-circle-o-up", "fa-arrow-circle-right", "fa-arrow-circle-up", "fa-arrow-down", "fa-arrow-left", "fa-arrow-right", "fa-arrow-up", "fa-arrows", "fa-arrows-alt", "fa-arrows-h", "fa-arrows-v", "fa-asl-interpreting", "fa-assistive-listening-systems", "fa-asterisk", "fa-at", "fa-audio-description", "fa-automobile", "fa-backward", "fa-balance-scale", "fa-ban", "fa-bandcamp", "fa-bank", "fa-bar-chart", "fa-bar-chart-o", "fa-barcode", "fa-bars", "fa-bath", "fa-bathtub", "fa-battery", "fa-battery-0", "fa-battery-1", "fa-battery-2", "fa-battery-3", "fa-battery-4", "fa-battery-empty", "fa-battery-full", "fa-battery-half", "fa-battery-quarter", "fa-battery-three-quarters", "fa-bed", "fa-beer", "fa-behance", "fa-behance-square", "fa-bell", "fa-bell-o", "fa-bell-slash", "fa-bell-slash-o", "fa-bicycle", "fa-binoculars", "fa-birthday-cake", "fa-bitbucket", "fa-bitbucket-square", "fa-bitcoin", "fa-black-tie", "fa-blind", "fa-bluetooth", "fa-bluetooth-b", "fa-bold", "fa-bolt", "fa-bomb", "fa-book", "fa-bookmark", "fa-bookmark-o", "fa-braille", "fa-briefcase", "fa-btc", "fa-bug", "fa-building", "fa-building-o", "fa-bullhorn", "fa-bullseye", "fa-bus", "fa-buysellads", "fa-cab", "fa-calculator", "fa-calendar", "fa-calendar-check-o", "fa-calendar-minus-o", "fa-calendar-o", "fa-calendar-plus-o", "fa-calendar-times-o", "fa-camera", "fa-camera-retro", "fa-car", "fa-caret-down", "fa-caret-left", "fa-caret-right", "fa-caret-square-o-down", "fa-caret-square-o-left", "fa-caret-square-o-right", "fa-caret-square-o-up", "fa-caret-up", "fa-cart-arrow-down", "fa-cart-plus", "fa-cc", "fa-cc-amex", "fa-cc-diners-club", "fa-cc-discover", "fa-cc-jcb", "fa-cc-mastercard", "fa-cc-paypal", "fa-cc-stripe", "fa-cc-visa", "fa-certificate", "fa-chain", "fa-chain-broken", "fa-check", "fa-check-circle", "fa-check-circle-o", "fa-check-square", "fa-check-square-o", "fa-chevron-circle-down", "fa-chevron-circle-left", "fa-chevron-circle-right", "fa-chevron-circle-up", "fa-chevron-down", "fa-chevron-left", "fa-chevron-right", "fa-chevron-up", "fa-child", "fa-chrome", "fa-circle", "fa-circle-o", "fa-circle-o-notch", "fa-circle-thin", "fa-clipboard", "fa-clock-o", "fa-clone", "fa-close", "fa-cloud", "fa-cloud-download", "fa-cloud-upload", "fa-cny", "fa-code", "fa-code-fork", "fa-codepen", "fa-codiepie", "fa-coffee", "fa-cog", "fa-cogs", "fa-columns", "fa-comment", "fa-comment-o", "fa-commenting", "fa-commenting-o", "fa-comments", "fa-comments-o", "fa-compass", "fa-compress", "fa-connectdevelop", "fa-contao", "fa-copy", "fa-copyright", "fa-creative-commons", "fa-credit-card", "fa-credit-card-alt", "fa-crop", "fa-crosshairs", "fa-css3", "fa-cube", "fa-cubes", "fa-cut", "fa-cutlery", "fa-dashboard", "fa-dashcube", "fa-database", "fa-deaf", "fa-deafness", "fa-dedent", "fa-delicious", "fa-desktop", "fa-deviantart", "fa-diamond", "fa-digg", "fa-dollar", "fa-dot-circle-o", "fa-download", "fa-dribbble", "fa-drivers-license", "fa-drivers-license-o", "fa-dropbox", "fa-drupal", "fa-edge", "fa-edit", "fa-eercast", "fa-eject", "fa-ellipsis-h", "fa-ellipsis-v", "fa-empire", "fa-envelope", "fa-envelope-o", "fa-envelope-open", "fa-envelope-open-o", "fa-envelope-square", "fa-envira", "fa-eraser", "fa-etsy", "fa-eur", "fa-euro", "fa-exchange", "fa-exclamation", "fa-exclamation-circle", "fa-exclamation-triangle", "fa-expand", "fa-expeditedssl", "fa-external-link", "fa-external-link-square", "fa-eye", "fa-eye-slash", "fa-eyedropper", "fa-fa", "fa-facebook", "fa-facebook-f", "fa-facebook-official", "fa-facebook-square", "fa-fast-backward", "fa-fast-forward", "fa-fax", "fa-feed", "fa-female", "fa-fighter-jet", "fa-file", "fa-file-archive-o", "fa-file-audio-o", "fa-file-code-o", "fa-file-excel-o", "fa-file-image-o", "fa-file-movie-o", "fa-file-o", "fa-file-pdf-o", "fa-file-photo-o", "fa-file-picture-o", "fa-file-powerpoint-o", "fa-file-sound-o", "fa-file-text", "fa-file-text-o", "fa-file-video-o", "fa-file-word-o", "fa-file-zip-o", "fa-files-o", "fa-film", "fa-filter", "fa-fire", "fa-fire-extinguisher", "fa-firefox", "fa-first-order", "fa-flag", "fa-flag-checkered", "fa-flag-o", "fa-flash", "fa-flask", "fa-flickr", "fa-floppy-o", "fa-folder", "fa-folder-o", "fa-folder-open", "fa-folder-open-o", "fa-font", "fa-font-awesome", "fa-fonticons", "fa-fort-awesome", "fa-forumbee", "fa-forward", "fa-foursquare", "fa-free-code-camp", "fa-frown-o", "fa-futbol-o", "fa-gamepad", "fa-gavel", "fa-gbp", "fa-ge", "fa-gear", "fa-gears", "fa-genderless", "fa-get-pocket", "fa-gg", "fa-gg-circle", "fa-gift", "fa-git", "fa-git-square", "fa-github", "fa-github-alt", "fa-github-square", "fa-gitlab", "fa-gittip", "fa-glass", "fa-glide", "fa-glide-g", "fa-globe", "fa-google", "fa-google-plus", "fa-google-plus-circle", "fa-google-plus-official", "fa-google-plus-square", "fa-google-wallet", "fa-graduation-cap", "fa-gratipay", "fa-grav", "fa-group", "fa-h-square", "fa-hacker-news", "fa-hand-grab-o", "fa-hand-lizard-o", "fa-hand-o-down", "fa-hand-o-left", "fa-hand-o-right", "fa-hand-o-up", "fa-hand-paper-o", "fa-hand-peace-o", "fa-hand-pointer-o", "fa-hand-rock-o", "fa-hand-scissors-o", "fa-hand-spock-o", "fa-hand-stop-o", "fa-handshake-o", "fa-hard-of-hearing", "fa-hashtag", "fa-hdd-o", "fa-header", "fa-headphones", "fa-heart", "fa-heart-o", "fa-heartbeat", "fa-history", "fa-home", "fa-hospital-o", "fa-hotel", "fa-hourglass", "fa-hourglass-1", "fa-hourglass-2", "fa-hourglass-3", "fa-hourglass-end", "fa-hourglass-half", "fa-hourglass-o", "fa-hourglass-start", "fa-houzz", "fa-html5", "fa-i-cursor", "fa-id-badge", "fa-id-card", "fa-id-card-o", "fa-ils", "fa-image", "fa-imdb", "fa-inbox", "fa-indent", "fa-industry", "fa-info", "fa-info-circle", "fa-inr", "fa-instagram", "fa-institution", "fa-internet-explorer", "fa-intersex", "fa-ioxhost", "fa-italic", "fa-joomla", "fa-jpy", "fa-jsfiddle", "fa-key", "fa-keyboard-o", "fa-krw", "fa-language", "fa-laptop", "fa-lastfm", "fa-lastfm-square", "fa-leaf", "fa-leanpub", "fa-legal", "fa-lemon-o", "fa-level-down", "fa-level-up", "fa-life-bouy", "fa-life-buoy", "fa-life-ring", "fa-life-saver", "fa-lightbulb-o", "fa-line-chart", "fa-link", "fa-linkedin", "fa-linkedin-square", "fa-linode", "fa-linux", "fa-list", "fa-list-alt", "fa-list-ol", "fa-list-ul", "fa-location-arrow", "fa-lock", "fa-long-arrow-down", "fa-long-arrow-left", "fa-long-arrow-right", "fa-long-arrow-up", "fa-low-vision", "fa-magic", "fa-magnet", "fa-mail-forward", "fa-mail-reply", "fa-mail-reply-all", "fa-male", "fa-map", "fa-map-marker", "fa-map-o", "fa-map-pin", "fa-map-signs", "fa-mars", "fa-mars-double", "fa-mars-stroke", "fa-mars-stroke-h", "fa-mars-stroke-v", "fa-maxcdn", "fa-meanpath", "fa-medium", "fa-medkit", "fa-meetup", "fa-meh-o", "fa-mercury", "fa-microchip", "fa-microphone", "fa-microphone-slash", "fa-minus", "fa-minus-circle", "fa-minus-square", "fa-minus-square-o", "fa-mixcloud", "fa-mobile", "fa-mobile-phone", "fa-modx", "fa-money", "fa-moon-o", "fa-mortar-board", "fa-motorcycle", "fa-mouse-pointer", "fa-music", "fa-navicon", "fa-neuter", "fa-newspaper-o", "fa-object-group", "fa-object-ungroup", "fa-odnoklassniki", "fa-odnoklassniki-square", "fa-opencart", "fa-openid", "fa-opera", "fa-optin-monster", "fa-outdent", "fa-pagelines", "fa-paint-brush", "fa-paper-plane", "fa-paper-plane-o", "fa-paperclip", "fa-paragraph", "fa-paste", "fa-pause", "fa-pause-circle", "fa-pause-circle-o", "fa-paw", "fa-paypal", "fa-pencil", "fa-pencil-square", "fa-pencil-square-o", "fa-percent", "fa-phone", "fa-phone-square", "fa-photo", "fa-picture-o", "fa-pie-chart", "fa-pied-piper", "fa-pied-piper-alt", "fa-pied-piper-pp", "fa-pinterest", "fa-pinterest-p", "fa-pinterest-square", "fa-plane", "fa-play", "fa-play-circle", "fa-play-circle-o", "fa-plug", "fa-plus", "fa-plus-circle", "fa-plus-square", "fa-plus-square-o", "fa-podcast", "fa-power-off", "fa-print", "fa-product-hunt", "fa-puzzle-piece", "fa-qq", "fa-qrcode", "fa-question", "fa-question-circle", "fa-question-circle-o", "fa-quora", "fa-quote-left", "fa-quote-right", "fa-ra", "fa-random", "fa-ravelry", "fa-rebel", "fa-recycle", "fa-reddit", "fa-reddit-alien", "fa-reddit-square", "fa-refresh", "fa-registered", "fa-remove", "fa-renren", "fa-reorder", "fa-repeat", "fa-reply", "fa-reply-all", "fa-resistance", "fa-retweet", "fa-rmb", "fa-road", "fa-rocket", "fa-rotate-left", "fa-rotate-right", "fa-rouble", "fa-rss", "fa-rss-square", "fa-rub", "fa-ruble", "fa-rupee", "fa-s15", "fa-safari", "fa-save", "fa-scissors", "fa-scribd", "fa-search", "fa-search-minus", "fa-search-plus", "fa-sellsy", "fa-send", "fa-send-o", "fa-server", "fa-share", "fa-share-alt", "fa-share-alt-square", "fa-share-square", "fa-share-square-o", "fa-shekel", "fa-sheqel", "fa-shield", "fa-ship", "fa-shirtsinbulk", "fa-shopping-bag", "fa-shopping-basket", "fa-shopping-cart", "fa-shower", "fa-sign-in", "fa-sign-language", "fa-sign-out", "fa-signal", "fa-signing", "fa-simplybuilt", "fa-sitemap", "fa-skyatlas", "fa-skype", "fa-slack", "fa-sliders", "fa-slideshare", "fa-smile-o", "fa-snapchat", "fa-snapchat-ghost", "fa-snapchat-square", "fa-snowflake-o", "fa-soccer-ball-o", "fa-sort", "fa-sort-alpha-asc", "fa-sort-alpha-desc", "fa-sort-amount-asc", "fa-sort-amount-desc", "fa-sort-asc", "fa-sort-desc", "fa-sort-down", "fa-sort-numeric-asc", "fa-sort-numeric-desc", "fa-sort-up", "fa-soundcloud", "fa-space-shuttle", "fa-spinner", "fa-spoon", "fa-spotify", "fa-square", "fa-square-o", "fa-stack-exchange", "fa-stack-overflow", "fa-star", "fa-star-half", "fa-star-half-empty", "fa-star-half-full", "fa-star-half-o", "fa-star-o", "fa-steam", "fa-steam-square", "fa-step-backward", "fa-step-forward", "fa-stethoscope", "fa-sticky-note", "fa-sticky-note-o", "fa-stop", "fa-stop-circle", "fa-stop-circle-o", "fa-street-view", "fa-strikethrough", "fa-stumbleupon", "fa-stumbleupon-circle", "fa-subscript", "fa-subway", "fa-suitcase", "fa-sun-o", "fa-superpowers", "fa-superscript", "fa-support", "fa-table", "fa-tablet", "fa-tachometer", "fa-tag", "fa-tags", "fa-tasks", "fa-taxi", "fa-telegram", "fa-television", "fa-tencent-weibo", "fa-terminal", "fa-text-height", "fa-text-width", "fa-th", "fa-th-large", "fa-th-list", "fa-themeisle", "fa-thermometer", "fa-thermometer-0", "fa-thermometer-1", "fa-thermometer-2", "fa-thermometer-3", "fa-thermometer-4", "fa-thermometer-empty", "fa-thermometer-full", "fa-thermometer-half", "fa-thermometer-quarter", "fa-thermometer-three-quarters", "fa-thumb-tack", "fa-thumbs-down", "fa-thumbs-o-down", "fa-thumbs-o-up", "fa-thumbs-up", "fa-ticket", "fa-times", "fa-times-circle", "fa-times-circle-o", "fa-times-rectangle", "fa-times-rectangle-o", "fa-tint", "fa-toggle-down", "fa-toggle-left", "fa-toggle-off", "fa-toggle-on", "fa-toggle-right", "fa-toggle-up", "fa-trademark", "fa-train", "fa-transgender", "fa-transgender-alt", "fa-trash", "fa-trash-o", "fa-tree", "fa-trello", "fa-tripadvisor", "fa-trophy", "fa-truck", "fa-try", "fa-tty", "fa-tumblr", "fa-tumblr-square", "fa-turkish-lira", "fa-tv", "fa-twitch", "fa-twitter", "fa-twitter-square", "fa-umbrella", "fa-underline", "fa-undo", "fa-universal-access", "fa-university", "fa-unlink", "fa-unlock", "fa-unlock-alt", "fa-unsorted", "fa-upload", "fa-usb", "fa-usd", "fa-user", "fa-user-circle", "fa-user-circle-o", "fa-user-md", "fa-user-o", "fa-user-plus", "fa-user-secret", "fa-user-times", "fa-users", "fa-vcard", "fa-vcard-o", "fa-venus", "fa-venus-double", "fa-venus-mars", "fa-viacoin", "fa-viadeo", "fa-viadeo-square", "fa-video-camera", "fa-vimeo", "fa-vimeo-square", "fa-vine", "fa-vk", "fa-volume-control-phone", "fa-volume-down", "fa-volume-off", "fa-volume-up", "fa-warning", "fa-wechat", "fa-weibo", "fa-weixin", "fa-whatsapp", "fa-wheelchair", "fa-wheelchair-alt", "fa-wifi", "fa-wikipedia-w", "fa-window-close", "fa-window-close-o", "fa-window-maximize", "fa-window-minimize", "fa-window-restore", "fa-windows", "fa-won", "fa-wordpress", "fa-wpbeginner", "fa-wpexplorer", "fa-wpforms", "fa-wrench", "fa-xing", "fa-xing-square", "fa-y-combinator", "fa-y-combinator-square", "fa-yahoo", "fa-yc", "fa-yc-square", "fa-yelp", "fa-yen", "fa-yoast", "fa-youtube", "fa-youtube-play", "fa-youtube-square" ]; }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/input-mask/phone-codes/phone-be.json ================================================ [ { "mask": "+32(53)##-##-##", "cc": "BE", "cd": "Belgium", "city": "Aalst (Alost)" }, { "mask": "+32(3)###-##-##", "cc": "BE", "cd": "Belgium", "city": "Antwerpen (Anvers)" }, { "mask": "+32(63)##-##-##", "cc": "BE", "cd": "Belgium", "city": "Arlon" }, { "mask": "+32(67)##-##-##", "cc": "BE", "cd": "Belgium", "city": "Ath" }, { "mask": "+32(50)##-##-##", "cc": "BE", "cd": "Belgium", "city": "Brugge (Bruges)" }, { "mask": "+32(2)###-##-##", "cc": "BE", "cd": "Belgium", "city": "Brussel/Bruxelles (Brussels)" }, { "mask": "+32(71)##-##-##", "cc": "BE", "cd": "Belgium", "city": "Charleroi" }, { "mask": "+32(60)##-##-##", "cc": "BE", "cd": "Belgium", "city": "Chimay" }, { "mask": "+32(83)##-##-##", "cc": "BE", "cd": "Belgium", "city": "Ciney" }, { "mask": "+32(52)##-##-##", "cc": "BE", "cd": "Belgium", "city": "Dendermonde" }, { "mask": "+32(13)##-##-##", "cc": "BE", "cd": "Belgium", "city": "Diest" }, { "mask": "+32(82)##-##-##", "cc": "BE", "cd": "Belgium", "city": "Dinant" }, { "mask": "+32(86)##-##-##", "cc": "BE", "cd": "Belgium", "city": "Durbuy" }, { "mask": "+32(89)##-##-##", "cc": "BE", "cd": "Belgium", "city": "Genk" }, { "mask": "+32(9)###-##-##", "cc": "BE", "cd": "Belgium", "city": "Gent (Gand)" }, { "mask": "+32(11)##-##-##", "cc": "BE", "cd": "Belgium", "city": "Hasselt" }, { "mask": "+32(14)##-##-##", "cc": "BE", "cd": "Belgium", "city": "Herentals" }, { "mask": "+32(85)##-##-##", "cc": "BE", "cd": "Belgium", "city": "Huy (Hoei)" }, { "mask": "+32(64)##-##-##", "cc": "BE", "cd": "Belgium", "city": "La Louvière" }, { "mask": "+32(16)##-##-##", "cc": "BE", "cd": "Belgium", "city": "Leuven (Louvain)" }, { "mask": "+32(61)##-##-##", "cc": "BE", "cd": "Belgium", "city": "Libramont" }, { "mask": "+32(4)###-##-##", "cc": "BE", "cd": "Belgium", "city": "Liège (Luik)" }, { "mask": "+32(15)##-##-##", "cc": "BE", "cd": "Belgium", "city": "Mechelen (Malines)" }, { "mask": "+32(47#)##-##-##", "cc": "BE", "cd": "Belgium", "city": "Mobile Phones" }, { "mask": "+32(48#)##-##-##", "cc": "BE", "cd": "Belgium", "city": "Mobile Phones" }, { "mask": "+32(49#)##-##-##", "cc": "BE", "cd": "Belgium", "city": "Mobile Phones" }, { "mask": "+32(65)##-##-##", "cc": "BE", "cd": "Belgium", "city": "Mons (Bergen)" }, { "mask": "+32(81)##-##-##", "cc": "BE", "cd": "Belgium", "city": "Namur (Namen)" }, { "mask": "+32(58)##-##-##", "cc": "BE", "cd": "Belgium", "city": "Nieuwpoort (Nieuport)" }, { "mask": "+32(54)##-##-##", "cc": "BE", "cd": "Belgium", "city": "Ninove" }, { "mask": "+32(67)##-##-##", "cc": "BE", "cd": "Belgium", "city": "Nivelles (Nijvel)" }, { "mask": "+32(59)##-##-##", "cc": "BE", "cd": "Belgium", "city": "Oostende (Ostende)" }, { "mask": "+32(51)##-##-##", "cc": "BE", "cd": "Belgium", "city": "Roeselare (Roulers)" }, { "mask": "+32(55)##-##-##", "cc": "BE", "cd": "Belgium", "city": "Ronse" }, { "mask": "+32(80)##-##-##", "cc": "BE", "cd": "Belgium", "city": "Stavelot" }, { "mask": "+32(12)##-##-##", "cc": "BE", "cd": "Belgium", "city": "Tongeren (Tongres)" }, { "mask": "+32(69)##-##-##", "cc": "BE", "cd": "Belgium", "city": "Tounai" }, { "mask": "+32(14)##-##-##", "cc": "BE", "cd": "Belgium", "city": "Turnhout" }, { "mask": "+32(87)##-##-##", "cc": "BE", "cd": "Belgium", "city": "Verviers" }, { "mask": "+32(58)##-##-##", "cc": "BE", "cd": "Belgium", "city": "Veurne" }, { "mask": "+32(19)##-##-##", "cc": "BE", "cd": "Belgium", "city": "Wareme" }, { "mask": "+32(10)##-##-##", "cc": "BE", "cd": "Belgium", "city": "Wavre (Waver)" }, { "mask": "+32(50)##-##-##", "cc": "BE", "cd": "Belgium", "city": "Zeebrugge" } ] ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/input-mask/phone-codes/phone-codes.json ================================================ [ { "mask": "+247-####", "cc": "AC", "name_en": "Ascension", "desc_en": "", "name_ru": "Остров Вознесения", "desc_ru": "" }, { "mask": "+376-###-###", "cc": "AD", "name_en": "Andorra", "desc_en": "", "name_ru": "Андорра", "desc_ru": "" }, { "mask": "+971-5#-###-####", "cc": "AE", "name_en": "United Arab Emirates", "desc_en": "mobile", "name_ru": "Объединенные Арабские Эмираты", "desc_ru": "мобильные" }, { "mask": "+971-#-###-####", "cc": "AE", "name_en": "United Arab Emirates", "desc_en": "", "name_ru": "Объединенные Арабские Эмираты", "desc_ru": "" }, { "mask": "+93-##-###-####", "cc": "AF", "name_en": "Afghanistan", "desc_en": "", "name_ru": "Афганистан", "desc_ru": "" }, { "mask": "+1(268)###-####", "cc": "AG", "name_en": "Antigua & Barbuda", "desc_en": "", "name_ru": "Антигуа и Барбуда", "desc_ru": "" }, { "mask": "+1(264)###-####", "cc": "AI", "name_en": "Anguilla", "desc_en": "", "name_ru": "Ангилья", "desc_ru": "" }, { "mask": "+355(###)###-###", "cc": "AL", "name_en": "Albania", "desc_en": "", "name_ru": "Албания", "desc_ru": "" }, { "mask": "+374-##-###-###", "cc": "AM", "name_en": "Armenia", "desc_en": "", "name_ru": "Армения", "desc_ru": "" }, { "mask": "+599-###-####", "cc": "AN", "name_en": "Caribbean Netherlands", "desc_en": "", "name_ru": "Карибские Нидерланды", "desc_ru": "" }, { "mask": "+599-###-####", "cc": "AN", "name_en": "Netherlands Antilles", "desc_en": "", "name_ru": "Нидерландские Антильские острова", "desc_ru": "" }, { "mask": "+599-9###-####", "cc": "AN", "name_en": "Netherlands Antilles", "desc_en": "Curacao", "name_ru": "Нидерландские Антильские острова", "desc_ru": "Кюрасао" }, { "mask": "+244(###)###-###", "cc": "AO", "name_en": "Angola", "desc_en": "", "name_ru": "Ангола", "desc_ru": "" }, { "mask": "+672-1##-###", "cc": "AQ", "name_en": "Australian bases in Antarctica", "desc_en": "", "name_ru": "Австралийская антарктическая база", "desc_ru": "" }, { "mask": "+54(###)###-####", "cc": "AR", "name_en": "Argentina", "desc_en": "", "name_ru": "Аргентина", "desc_ru": "" }, { "mask": "+1(684)###-####", "cc": "AS", "name_en": "American Samoa", "desc_en": "", "name_ru": "Американское Самоа", "desc_ru": "" }, { "mask": "+43(###)###-####", "cc": "AT", "name_en": "Austria", "desc_en": "", "name_ru": "Австрия", "desc_ru": "" }, { "mask": "+61-#-####-####", "cc": "AU", "name_en": "Australia", "desc_en": "", "name_ru": "Австралия", "desc_ru": "" }, { "mask": "+297-###-####", "cc": "AW", "name_en": "Aruba", "desc_en": "", "name_ru": "Аруба", "desc_ru": "" }, { "mask": "+994-##-###-##-##", "cc": "AZ", "name_en": "Azerbaijan", "desc_en": "", "name_ru": "Азербайджан", "desc_ru": "" }, { "mask": "+387-##-#####", "cc": "BA", "name_en": "Bosnia and Herzegovina", "desc_en": "", "name_ru": "Босния и Герцеговина", "desc_ru": "" }, { "mask": "+387-##-####", "cc": "BA", "name_en": "Bosnia and Herzegovina", "desc_en": "", "name_ru": "Босния и Герцеговина", "desc_ru": "" }, { "mask": "+1(246)###-####", "cc": "BB", "name_en": "Barbados", "desc_en": "", "name_ru": "Барбадос", "desc_ru": "" }, { "mask": "+880-##-###-###", "cc": "BD", "name_en": "Bangladesh", "desc_en": "", "name_ru": "Бангладеш", "desc_ru": "" }, { "mask": "+32(###)###-###", "cc": "BE", "name_en": "Belgium", "desc_en": "", "name_ru": "Бельгия", "desc_ru": "" }, { "mask": "+226-##-##-####", "cc": "BF", "name_en": "Burkina Faso", "desc_en": "", "name_ru": "Буркина Фасо", "desc_ru": "" }, { "mask": "+359(###)###-###", "cc": "BG", "name_en": "Bulgaria", "desc_en": "", "name_ru": "Болгария", "desc_ru": "" }, { "mask": "+973-####-####", "cc": "BH", "name_en": "Bahrain", "desc_en": "", "name_ru": "Бахрейн", "desc_ru": "" }, { "mask": "+257-##-##-####", "cc": "BI", "name_en": "Burundi", "desc_en": "", "name_ru": "Бурунди", "desc_ru": "" }, { "mask": "+229-##-##-####", "cc": "BJ", "name_en": "Benin", "desc_en": "", "name_ru": "Бенин", "desc_ru": "" }, { "mask": "+1(441)###-####", "cc": "BM", "name_en": "Bermuda", "desc_en": "", "name_ru": "Бермудские острова", "desc_ru": "" }, { "mask": "+673-###-####", "cc": "BN", "name_en": "Brunei Darussalam", "desc_en": "", "name_ru": "Бруней-Даруссалам", "desc_ru": "" }, { "mask": "+591-#-###-####", "cc": "BO", "name_en": "Bolivia", "desc_en": "", "name_ru": "Боливия", "desc_ru": "" }, { "mask": "+55-##-####[#]-####", "cc": "BR", "name_en": "Brazil", "desc_en": "", "name_ru": "Бразилия", "desc_ru": "" }, { "mask": "+1(242)###-####", "cc": "BS", "name_en": "Bahamas", "desc_en": "", "name_ru": "Багамские Острова", "desc_ru": "" }, { "mask": "+975-17-###-###", "cc": "BT", "name_en": "Bhutan", "desc_en": "", "name_ru": "Бутан", "desc_ru": "" }, { "mask": "+975-#-###-###", "cc": "BT", "name_en": "Bhutan", "desc_en": "", "name_ru": "Бутан", "desc_ru": "" }, { "mask": "+267-##-###-###", "cc": "BW", "name_en": "Botswana", "desc_en": "", "name_ru": "Ботсвана", "desc_ru": "" }, { "mask": "+375(##)###-##-##", "cc": "BY", "name_en": "Belarus", "desc_en": "", "name_ru": "Беларусь (Белоруссия)", "desc_ru": "" }, { "mask": "+501-###-####", "cc": "BZ", "name_en": "Belize", "desc_en": "", "name_ru": "Белиз", "desc_ru": "" }, { "mask": "+243(###)###-###", "cc": "CD", "name_en": "Dem. Rep. Congo", "desc_en": "", "name_ru": "Дем. Респ. Конго (Киншаса)", "desc_ru": "" }, { "mask": "+236-##-##-####", "cc": "CF", "name_en": "Central African Republic", "desc_en": "", "name_ru": "Центральноафриканская Республика", "desc_ru": "" }, { "mask": "+242-##-###-####", "cc": "CG", "name_en": "Congo (Brazzaville)", "desc_en": "", "name_ru": "Конго (Браззавиль)", "desc_ru": "" }, { "mask": "+41-##-###-####", "cc": "CH", "name_en": "Switzerland", "desc_en": "", "name_ru": "Швейцария", "desc_ru": "" }, { "mask": "+225-##-###-###", "cc": "CI", "name_en": "Cote d’Ivoire (Ivory Coast)", "desc_en": "", "name_ru": "Кот-д’Ивуар", "desc_ru": "" }, { "mask": "+682-##-###", "cc": "CK", "name_en": "Cook Islands", "desc_en": "", "name_ru": "Острова Кука", "desc_ru": "" }, { "mask": "+56-#-####-####", "cc": "CL", "name_en": "Chile", "desc_en": "", "name_ru": "Чили", "desc_ru": "" }, { "mask": "+237-####-####", "cc": "CM", "name_en": "Cameroon", "desc_en": "", "name_ru": "Камерун", "desc_ru": "" }, { "mask": "+86(###)####-####", "cc": "CN", "name_en": "China (PRC)", "desc_en": "", "name_ru": "Китайская Н.Р.", "desc_ru": "" }, { "mask": "+86(###)####-###", "cc": "CN", "name_en": "China (PRC)", "desc_en": "", "name_ru": "Китайская Н.Р.", "desc_ru": "" }, { "mask": "+86-##-#####-#####", "cc": "CN", "name_en": "China (PRC)", "desc_en": "", "name_ru": "Китайская Н.Р.", "desc_ru": "" }, { "mask": "+57(###)###-####", "cc": "CO", "name_en": "Colombia", "desc_en": "", "name_ru": "Колумбия", "desc_ru": "" }, { "mask": "+506-####-####", "cc": "CR", "name_en": "Costa Rica", "desc_en": "", "name_ru": "Коста-Рика", "desc_ru": "" }, { "mask": "+53-#-###-####", "cc": "CU", "name_en": "Cuba", "desc_en": "", "name_ru": "Куба", "desc_ru": "" }, { "mask": "+238(###)##-##", "cc": "CV", "name_en": "Cape Verde", "desc_en": "", "name_ru": "Кабо-Верде", "desc_ru": "" }, { "mask": "+599-###-####", "cc": "CW", "name_en": "Curacao", "desc_en": "", "name_ru": "Кюрасао", "desc_ru": "" }, { "mask": "+357-##-###-###", "cc": "CY", "name_en": "Cyprus", "desc_en": "", "name_ru": "Кипр", "desc_ru": "" }, { "mask": "+420(###)###-###", "cc": "CZ", "name_en": "Czech Republic", "desc_en": "", "name_ru": "Чехия", "desc_ru": "" }, { "mask": "+49(####)###-####", "cc": "DE", "name_en": "Germany", "desc_en": "", "name_ru": "Германия", "desc_ru": "" }, { "mask": "+49(###)###-####", "cc": "DE", "name_en": "Germany", "desc_en": "", "name_ru": "Германия", "desc_ru": "" }, { "mask": "+49(###)##-####", "cc": "DE", "name_en": "Germany", "desc_en": "", "name_ru": "Германия", "desc_ru": "" }, { "mask": "+49(###)##-###", "cc": "DE", "name_en": "Germany", "desc_en": "", "name_ru": "Германия", "desc_ru": "" }, { "mask": "+49(###)##-##", "cc": "DE", "name_en": "Germany", "desc_en": "", "name_ru": "Германия", "desc_ru": "" }, { "mask": "+49-###-###", "cc": "DE", "name_en": "Germany", "desc_en": "", "name_ru": "Германия", "desc_ru": "" }, { "mask": "+253-##-##-##-##", "cc": "DJ", "name_en": "Djibouti", "desc_en": "", "name_ru": "Джибути", "desc_ru": "" }, { "mask": "+45-##-##-##-##", "cc": "DK", "name_en": "Denmark", "desc_en": "", "name_ru": "Дания", "desc_ru": "" }, { "mask": "+1(767)###-####", "cc": "DM", "name_en": "Dominica", "desc_en": "", "name_ru": "Доминика", "desc_ru": "" }, { "mask": "+1(809)###-####", "cc": "DO", "name_en": "Dominican Republic", "desc_en": "", "name_ru": "Доминиканская Республика", "desc_ru": "" }, { "mask": "+1(829)###-####", "cc": "DO", "name_en": "Dominican Republic", "desc_en": "", "name_ru": "Доминиканская Республика", "desc_ru": "" }, { "mask": "+1(849)###-####", "cc": "DO", "name_en": "Dominican Republic", "desc_en": "", "name_ru": "Доминиканская Республика", "desc_ru": "" }, { "mask": "+213-##-###-####", "cc": "DZ", "name_en": "Algeria", "desc_en": "", "name_ru": "Алжир", "desc_ru": "" }, { "mask": "+593-##-###-####", "cc": "EC", "name_en": "Ecuador ", "desc_en": "mobile", "name_ru": "Эквадор ", "desc_ru": "мобильные" }, { "mask": "+593-#-###-####", "cc": "EC", "name_en": "Ecuador", "desc_en": "", "name_ru": "Эквадор", "desc_ru": "" }, { "mask": "+372-####-####", "cc": "EE", "name_en": "Estonia ", "desc_en": "mobile", "name_ru": "Эстония ", "desc_ru": "мобильные" }, { "mask": "+372-###-####", "cc": "EE", "name_en": "Estonia", "desc_en": "", "name_ru": "Эстония", "desc_ru": "" }, { "mask": "+20(###)###-####", "cc": "EG", "name_en": "Egypt", "desc_en": "", "name_ru": "Египет", "desc_ru": "" }, { "mask": "+291-#-###-###", "cc": "ER", "name_en": "Eritrea", "desc_en": "", "name_ru": "Эритрея", "desc_ru": "" }, { "mask": "+34(###)###-###", "cc": "ES", "name_en": "Spain", "desc_en": "", "name_ru": "Испания", "desc_ru": "" }, { "mask": "+251-##-###-####", "cc": "ET", "name_en": "Ethiopia", "desc_en": "", "name_ru": "Эфиопия", "desc_ru": "" }, { "mask": "+358(###)###-##-##", "cc": "FI", "name_en": "Finland", "desc_en": "", "name_ru": "Финляндия", "desc_ru": "" }, { "mask": "+679-##-#####", "cc": "FJ", "name_en": "Fiji", "desc_en": "", "name_ru": "Фиджи", "desc_ru": "" }, { "mask": "+500-#####", "cc": "FK", "name_en": "Falkland Islands", "desc_en": "", "name_ru": "Фолклендские острова", "desc_ru": "" }, { "mask": "+691-###-####", "cc": "FM", "name_en": "F.S. Micronesia", "desc_en": "", "name_ru": "Ф.Ш. Микронезии", "desc_ru": "" }, { "mask": "+298-###-###", "cc": "FO", "name_en": "Faroe Islands", "desc_en": "", "name_ru": "Фарерские острова", "desc_ru": "" }, { "mask": "+262-#####-####", "cc": "FR", "name_en": "Mayotte", "desc_en": "", "name_ru": "Майотта", "desc_ru": "" }, { "mask": "+33(###)###-###", "cc": "FR", "name_en": "France", "desc_en": "", "name_ru": "Франция", "desc_ru": "" }, { "mask": "+508-##-####", "cc": "FR", "name_en": "St Pierre & Miquelon", "desc_en": "", "name_ru": "Сен-Пьер и Микелон", "desc_ru": "" }, { "mask": "+590(###)###-###", "cc": "FR", "name_en": "Guadeloupe", "desc_en": "", "name_ru": "Гваделупа", "desc_ru": "" }, { "mask": "+241-#-##-##-##", "cc": "GA", "name_en": "Gabon", "desc_en": "", "name_ru": "Габон", "desc_ru": "" }, { "mask": "+1(473)###-####", "cc": "GD", "name_en": "Grenada", "desc_en": "", "name_ru": "Гренада", "desc_ru": "" }, { "mask": "+995(###)###-###", "cc": "GE", "name_en": "Rep. of Georgia", "desc_en": "", "name_ru": "Грузия", "desc_ru": "" }, { "mask": "+594-#####-####", "cc": "GF", "name_en": "Guiana (French)", "desc_en": "", "name_ru": "Фр. Гвиана", "desc_ru": "" }, { "mask": "+233(###)###-###", "cc": "GH", "name_en": "Ghana", "desc_en": "", "name_ru": "Гана", "desc_ru": "" }, { "mask": "+350-###-#####", "cc": "GI", "name_en": "Gibraltar", "desc_en": "", "name_ru": "Гибралтар", "desc_ru": "" }, { "mask": "+299-##-##-##", "cc": "GL", "name_en": "Greenland", "desc_en": "", "name_ru": "Гренландия", "desc_ru": "" }, { "mask": "+220(###)##-##", "cc": "GM", "name_en": "Gambia", "desc_en": "", "name_ru": "Гамбия", "desc_ru": "" }, { "mask": "+224-##-###-###", "cc": "GN", "name_en": "Guinea", "desc_en": "", "name_ru": "Гвинея", "desc_ru": "" }, { "mask": "+240-##-###-####", "cc": "GQ", "name_en": "Equatorial Guinea", "desc_en": "", "name_ru": "Экваториальная Гвинея", "desc_ru": "" }, { "mask": "+30(###)###-####", "cc": "GR", "name_en": "Greece", "desc_en": "", "name_ru": "Греция", "desc_ru": "" }, { "mask": "+502-#-###-####", "cc": "GT", "name_en": "Guatemala", "desc_en": "", "name_ru": "Гватемала", "desc_ru": "" }, { "mask": "+1(671)###-####", "cc": "GU", "name_en": "Guam", "desc_en": "", "name_ru": "Гуам", "desc_ru": "" }, { "mask": "+245-#-######", "cc": "GW", "name_en": "Guinea-Bissau", "desc_en": "", "name_ru": "Гвинея-Бисау", "desc_ru": "" }, { "mask": "+592-###-####", "cc": "GY", "name_en": "Guyana", "desc_en": "", "name_ru": "Гайана", "desc_ru": "" }, { "mask": "+852-####-####", "cc": "HK", "name_en": "Hong Kong", "desc_en": "", "name_ru": "Гонконг", "desc_ru": "" }, { "mask": "+504-####-####", "cc": "HN", "name_en": "Honduras", "desc_en": "", "name_ru": "Гондурас", "desc_ru": "" }, { "mask": "+385-##-###-###", "cc": "HR", "name_en": "Croatia", "desc_en": "", "name_ru": "Хорватия", "desc_ru": "" }, { "mask": "+509-##-##-####", "cc": "HT", "name_en": "Haiti", "desc_en": "", "name_ru": "Гаити", "desc_ru": "" }, { "mask": "+36(###)###-###", "cc": "HU", "name_en": "Hungary", "desc_en": "", "name_ru": "Венгрия", "desc_ru": "" }, { "mask": "+62(8##)###-####", "cc": "ID", "name_en": "Indonesia ", "desc_en": "mobile", "name_ru": "Индонезия ", "desc_ru": "мобильные" }, { "mask": "+62-##-###-##", "cc": "ID", "name_en": "Indonesia", "desc_en": "", "name_ru": "Индонезия", "desc_ru": "" }, { "mask": "+62-##-###-###", "cc": "ID", "name_en": "Indonesia", "desc_en": "", "name_ru": "Индонезия", "desc_ru": "" }, { "mask": "+62-##-###-####", "cc": "ID", "name_en": "Indonesia", "desc_en": "", "name_ru": "Индонезия", "desc_ru": "" }, { "mask": "+62(8##)###-###", "cc": "ID", "name_en": "Indonesia ", "desc_en": "mobile", "name_ru": "Индонезия ", "desc_ru": "мобильные" }, { "mask": "+62(8##)###-##-###", "cc": "ID", "name_en": "Indonesia ", "desc_en": "mobile", "name_ru": "Индонезия ", "desc_ru": "мобильные" }, { "mask": "+353(###)###-###", "cc": "IE", "name_en": "Ireland", "desc_en": "", "name_ru": "Ирландия", "desc_ru": "" }, { "mask": "+972-5#-###-####", "cc": "IL", "name_en": "Israel ", "desc_en": "mobile", "name_ru": "Израиль ", "desc_ru": "мобильные" }, { "mask": "+972-#-###-####", "cc": "IL", "name_en": "Israel", "desc_en": "", "name_ru": "Израиль", "desc_ru": "" }, { "mask": "+91(####)###-###", "cc": "IN", "name_en": "India", "desc_en": "", "name_ru": "Индия", "desc_ru": "" }, { "mask": "+246-###-####", "cc": "IO", "name_en": "Diego Garcia", "desc_en": "", "name_ru": "Диего-Гарсия", "desc_ru": "" }, { "mask": "+964(###)###-####", "cc": "IQ", "name_en": "Iraq", "desc_en": "", "name_ru": "Ирак", "desc_ru": "" }, { "mask": "+98(###)###-####", "cc": "IR", "name_en": "Iran", "desc_en": "", "name_ru": "Иран", "desc_ru": "" }, { "mask": "+354-###-####", "cc": "IS", "name_en": "Iceland", "desc_en": "", "name_ru": "Исландия", "desc_ru": "" }, { "mask": "+39(###)####-###", "cc": "IT", "name_en": "Italy", "desc_en": "", "name_ru": "Италия", "desc_ru": "" }, { "mask": "+1(876)###-####", "cc": "JM", "name_en": "Jamaica", "desc_en": "", "name_ru": "Ямайка", "desc_ru": "" }, { "mask": "+962-#-####-####", "cc": "JO", "name_en": "Jordan", "desc_en": "", "name_ru": "Иордания", "desc_ru": "" }, { "mask": "+81-##-####-####", "cc": "JP", "name_en": "Japan ", "desc_en": "mobile", "name_ru": "Япония ", "desc_ru": "мобильные" }, { "mask": "+81(###)###-###", "cc": "JP", "name_en": "Japan", "desc_en": "", "name_ru": "Япония", "desc_ru": "" }, { "mask": "+254-###-######", "cc": "KE", "name_en": "Kenya", "desc_en": "", "name_ru": "Кения", "desc_ru": "" }, { "mask": "+996(###)###-###", "cc": "KG", "name_en": "Kyrgyzstan", "desc_en": "", "name_ru": "Киргизия", "desc_ru": "" }, { "mask": "+855-##-###-###", "cc": "KH", "name_en": "Cambodia", "desc_en": "", "name_ru": "Камбоджа", "desc_ru": "" }, { "mask": "+686-##-###", "cc": "KI", "name_en": "Kiribati", "desc_en": "", "name_ru": "Кирибати", "desc_ru": "" }, { "mask": "+269-##-#####", "cc": "KM", "name_en": "Comoros", "desc_en": "", "name_ru": "Коморы", "desc_ru": "" }, { "mask": "+1(869)###-####", "cc": "KN", "name_en": "Saint Kitts & Nevis", "desc_en": "", "name_ru": "Сент-Китс и Невис", "desc_ru": "" }, { "mask": "+850-191-###-####", "cc": "KP", "name_en": "DPR Korea (North) ", "desc_en": "mobile", "name_ru": "Корейская НДР ", "desc_ru": "мобильные" }, { "mask": "+850-##-###-###", "cc": "KP", "name_en": "DPR Korea (North)", "desc_en": "", "name_ru": "Корейская НДР", "desc_ru": "" }, { "mask": "+850-###-####-###", "cc": "KP", "name_en": "DPR Korea (North)", "desc_en": "", "name_ru": "Корейская НДР", "desc_ru": "" }, { "mask": "+850-###-###", "cc": "KP", "name_en": "DPR Korea (North)", "desc_en": "", "name_ru": "Корейская НДР", "desc_ru": "" }, { "mask": "+850-####-####", "cc": "KP", "name_en": "DPR Korea (North)", "desc_en": "", "name_ru": "Корейская НДР", "desc_ru": "" }, { "mask": "+850-####-#############", "cc": "KP", "name_en": "DPR Korea (North)", "desc_en": "", "name_ru": "Корейская НДР", "desc_ru": "" }, { "mask": "+82-##-###-####", "cc": "KR", "name_en": "Korea (South)", "desc_en": "", "name_ru": "Респ. Корея", "desc_ru": "" }, { "mask": "+965-####-####", "cc": "KW", "name_en": "Kuwait", "desc_en": "", "name_ru": "Кувейт", "desc_ru": "" }, { "mask": "+1(345)###-####", "cc": "KY", "name_en": "Cayman Islands", "desc_en": "", "name_ru": "Каймановы острова", "desc_ru": "" }, { "mask": "+7(6##)###-##-##", "cc": "KZ", "name_en": "Kazakhstan", "desc_en": "", "name_ru": "Казахстан", "desc_ru": "" }, { "mask": "+7(7##)###-##-##", "cc": "KZ", "name_en": "Kazakhstan", "desc_en": "", "name_ru": "Казахстан", "desc_ru": "" }, { "mask": "+856(20##)###-###", "cc": "LA", "name_en": "Laos ", "desc_en": "mobile", "name_ru": "Лаос ", "desc_ru": "мобильные" }, { "mask": "+856-##-###-###", "cc": "LA", "name_en": "Laos", "desc_en": "", "name_ru": "Лаос", "desc_ru": "" }, { "mask": "+961-##-###-###", "cc": "LB", "name_en": "Lebanon ", "desc_en": "mobile", "name_ru": "Ливан ", "desc_ru": "мобильные" }, { "mask": "+961-#-###-###", "cc": "LB", "name_en": "Lebanon", "desc_en": "", "name_ru": "Ливан", "desc_ru": "" }, { "mask": "+1(758)###-####", "cc": "LC", "name_en": "Saint Lucia", "desc_en": "", "name_ru": "Сент-Люсия", "desc_ru": "" }, { "mask": "+423(###)###-####", "cc": "LI", "name_en": "Liechtenstein", "desc_en": "", "name_ru": "Лихтенштейн", "desc_ru": "" }, { "mask": "+94-##-###-####", "cc": "LK", "name_en": "Sri Lanka", "desc_en": "", "name_ru": "Шри-Ланка", "desc_ru": "" }, { "mask": "+231-##-###-###", "cc": "LR", "name_en": "Liberia", "desc_en": "", "name_ru": "Либерия", "desc_ru": "" }, { "mask": "+266-#-###-####", "cc": "LS", "name_en": "Lesotho", "desc_en": "", "name_ru": "Лесото", "desc_ru": "" }, { "mask": "+370(###)##-###", "cc": "LT", "name_en": "Lithuania", "desc_en": "", "name_ru": "Литва", "desc_ru": "" }, { "mask": "+352(###)###-###", "cc": "LU", "name_en": "Luxembourg", "desc_en": "", "name_ru": "Люксембург", "desc_ru": "" }, { "mask": "+371-##-###-###", "cc": "LV", "name_en": "Latvia", "desc_en": "", "name_ru": "Латвия", "desc_ru": "" }, { "mask": "+218-##-###-###", "cc": "LY", "name_en": "Libya", "desc_en": "", "name_ru": "Ливия", "desc_ru": "" }, { "mask": "+218-21-###-####", "cc": "LY", "name_en": "Libya", "desc_en": "Tripoli", "name_ru": "Ливия", "desc_ru": "Триполи" }, { "mask": "+212-##-####-###", "cc": "MA", "name_en": "Morocco", "desc_en": "", "name_ru": "Марокко", "desc_ru": "" }, { "mask": "+377(###)###-###", "cc": "MC", "name_en": "Monaco", "desc_en": "", "name_ru": "Монако", "desc_ru": "" }, { "mask": "+377-##-###-###", "cc": "MC", "name_en": "Monaco", "desc_en": "", "name_ru": "Монако", "desc_ru": "" }, { "mask": "+373-####-####", "cc": "MD", "name_en": "Moldova", "desc_en": "", "name_ru": "Молдова", "desc_ru": "" }, { "mask": "+382-##-###-###", "cc": "ME", "name_en": "Montenegro", "desc_en": "", "name_ru": "Черногория", "desc_ru": "" }, { "mask": "+261-##-##-#####", "cc": "MG", "name_en": "Madagascar", "desc_en": "", "name_ru": "Мадагаскар", "desc_ru": "" }, { "mask": "+692-###-####", "cc": "MH", "name_en": "Marshall Islands", "desc_en": "", "name_ru": "Маршалловы Острова", "desc_ru": "" }, { "mask": "+389-##-###-###", "cc": "MK", "name_en": "Republic of Macedonia", "desc_en": "", "name_ru": "Респ. Македония", "desc_ru": "" }, { "mask": "+223-##-##-####", "cc": "ML", "name_en": "Mali", "desc_en": "", "name_ru": "Мали", "desc_ru": "" }, { "mask": "+95-##-###-###", "cc": "MM", "name_en": "Burma (Myanmar)", "desc_en": "", "name_ru": "Бирма (Мьянма)", "desc_ru": "" }, { "mask": "+95-#-###-###", "cc": "MM", "name_en": "Burma (Myanmar)", "desc_en": "", "name_ru": "Бирма (Мьянма)", "desc_ru": "" }, { "mask": "+95-###-###", "cc": "MM", "name_en": "Burma (Myanmar)", "desc_en": "", "name_ru": "Бирма (Мьянма)", "desc_ru": "" }, { "mask": "+976-##-##-####", "cc": "MN", "name_en": "Mongolia", "desc_en": "", "name_ru": "Монголия", "desc_ru": "" }, { "mask": "+853-####-####", "cc": "MO", "name_en": "Macau", "desc_en": "", "name_ru": "Макао", "desc_ru": "" }, { "mask": "+1(670)###-####", "cc": "MP", "name_en": "Northern Mariana Islands", "desc_en": "", "name_ru": "Северные Марианские острова Сайпан", "desc_ru": "" }, { "mask": "+596(###)##-##-##", "cc": "MQ", "name_en": "Martinique", "desc_en": "", "name_ru": "Мартиника", "desc_ru": "" }, { "mask": "+222-##-##-####", "cc": "MR", "name_en": "Mauritania", "desc_en": "", "name_ru": "Мавритания", "desc_ru": "" }, { "mask": "+1(664)###-####", "cc": "MS", "name_en": "Montserrat", "desc_en": "", "name_ru": "Монтсеррат", "desc_ru": "" }, { "mask": "+356-####-####", "cc": "MT", "name_en": "Malta", "desc_en": "", "name_ru": "Мальта", "desc_ru": "" }, { "mask": "+230-###-####", "cc": "MU", "name_en": "Mauritius", "desc_en": "", "name_ru": "Маврикий", "desc_ru": "" }, { "mask": "+960-###-####", "cc": "MV", "name_en": "Maldives", "desc_en": "", "name_ru": "Мальдивские острова", "desc_ru": "" }, { "mask": "+265-1-###-###", "cc": "MW", "name_en": "Malawi", "desc_en": "Telecom Ltd", "name_ru": "Малави", "desc_ru": "Telecom Ltd" }, { "mask": "+265-#-####-####", "cc": "MW", "name_en": "Malawi", "desc_en": "", "name_ru": "Малави", "desc_ru": "" }, { "mask": "+52(###)###-####", "cc": "MX", "name_en": "Mexico", "desc_en": "", "name_ru": "Мексика", "desc_ru": "" }, { "mask": "+52-##-##-####", "cc": "MX", "name_en": "Mexico", "desc_en": "", "name_ru": "Мексика", "desc_ru": "" }, { "mask": "+60-##-###-####", "cc": "MY", "name_en": "Malaysia ", "desc_en": "mobile", "name_ru": "Малайзия ", "desc_ru": "мобильные" }, { "mask": "+60(###)###-###", "cc": "MY", "name_en": "Malaysia", "desc_en": "", "name_ru": "Малайзия", "desc_ru": "" }, { "mask": "+60-##-###-###", "cc": "MY", "name_en": "Malaysia", "desc_en": "", "name_ru": "Малайзия", "desc_ru": "" }, { "mask": "+60-#-###-###", "cc": "MY", "name_en": "Malaysia", "desc_en": "", "name_ru": "Малайзия", "desc_ru": "" }, { "mask": "+258-##-###-###", "cc": "MZ", "name_en": "Mozambique", "desc_en": "", "name_ru": "Мозамбик", "desc_ru": "" }, { "mask": "+264-##-###-####", "cc": "NA", "name_en": "Namibia", "desc_en": "", "name_ru": "Намибия", "desc_ru": "" }, { "mask": "+687-##-####", "cc": "NC", "name_en": "New Caledonia", "desc_en": "", "name_ru": "Новая Каледония", "desc_ru": "" }, { "mask": "+227-##-##-####", "cc": "NE", "name_en": "Niger", "desc_en": "", "name_ru": "Нигер", "desc_ru": "" }, { "mask": "+672-3##-###", "cc": "NF", "name_en": "Norfolk Island", "desc_en": "", "name_ru": "Норфолк (остров)", "desc_ru": "" }, { "mask": "+234(###)###-####", "cc": "NG", "name_en": "Nigeria", "desc_en": "", "name_ru": "Нигерия", "desc_ru": "" }, { "mask": "+234-##-###-###", "cc": "NG", "name_en": "Nigeria", "desc_en": "", "name_ru": "Нигерия", "desc_ru": "" }, { "mask": "+234-##-###-##", "cc": "NG", "name_en": "Nigeria", "desc_en": "", "name_ru": "Нигерия", "desc_ru": "" }, { "mask": "+234(###)###-####", "cc": "NG", "name_en": "Nigeria ", "desc_en": "mobile", "name_ru": "Нигерия ", "desc_ru": "мобильные" }, { "mask": "+505-####-####", "cc": "NI", "name_en": "Nicaragua", "desc_en": "", "name_ru": "Никарагуа", "desc_ru": "" }, { "mask": "+31-##-###-####", "cc": "NL", "name_en": "Netherlands", "desc_en": "", "name_ru": "Нидерланды", "desc_ru": "" }, { "mask": "+47(###)##-###", "cc": "NO", "name_en": "Norway", "desc_en": "", "name_ru": "Норвегия", "desc_ru": "" }, { "mask": "+977-##-###-###", "cc": "NP", "name_en": "Nepal", "desc_en": "", "name_ru": "Непал", "desc_ru": "" }, { "mask": "+674-###-####", "cc": "NR", "name_en": "Nauru", "desc_en": "", "name_ru": "Науру", "desc_ru": "" }, { "mask": "+683-####", "cc": "NU", "name_en": "Niue", "desc_en": "", "name_ru": "Ниуэ", "desc_ru": "" }, { "mask": "+64(###)###-###", "cc": "NZ", "name_en": "New Zealand", "desc_en": "", "name_ru": "Новая Зеландия", "desc_ru": "" }, { "mask": "+64-##-###-###", "cc": "NZ", "name_en": "New Zealand", "desc_en": "", "name_ru": "Новая Зеландия", "desc_ru": "" }, { "mask": "+64(###)###-####", "cc": "NZ", "name_en": "New Zealand", "desc_en": "", "name_ru": "Новая Зеландия", "desc_ru": "" }, { "mask": "+968-##-###-###", "cc": "OM", "name_en": "Oman", "desc_en": "", "name_ru": "Оман", "desc_ru": "" }, { "mask": "+507-###-####", "cc": "PA", "name_en": "Panama", "desc_en": "", "name_ru": "Панама", "desc_ru": "" }, { "mask": "+51(###)###-###", "cc": "PE", "name_en": "Peru", "desc_en": "", "name_ru": "Перу", "desc_ru": "" }, { "mask": "+689-##-##-##", "cc": "PF", "name_en": "French Polynesia", "desc_en": "", "name_ru": "Французская Полинезия (Таити)", "desc_ru": "" }, { "mask": "+675(###)##-###", "cc": "PG", "name_en": "Papua New Guinea", "desc_en": "", "name_ru": "Папуа-Новая Гвинея", "desc_ru": "" }, { "mask": "+63(###)###-####", "cc": "PH", "name_en": "Philippines", "desc_en": "", "name_ru": "Филиппины", "desc_ru": "" }, { "mask": "+92(###)###-####", "cc": "PK", "name_en": "Pakistan", "desc_en": "", "name_ru": "Пакистан", "desc_ru": "" }, { "mask": "+48(###)###-###", "cc": "PL", "name_en": "Poland", "desc_en": "", "name_ru": "Польша", "desc_ru": "" }, { "mask": "+970-##-###-####", "cc": "PS", "name_en": "Palestine", "desc_en": "", "name_ru": "Палестина", "desc_ru": "" }, { "mask": "+351-##-###-####", "cc": "PT", "name_en": "Portugal", "desc_en": "", "name_ru": "Португалия", "desc_ru": "" }, { "mask": "+680-###-####", "cc": "PW", "name_en": "Palau", "desc_en": "", "name_ru": "Палау", "desc_ru": "" }, { "mask": "+595(###)###-###", "cc": "PY", "name_en": "Paraguay", "desc_en": "", "name_ru": "Парагвай", "desc_ru": "" }, { "mask": "+974-####-####", "cc": "QA", "name_en": "Qatar", "desc_en": "", "name_ru": "Катар", "desc_ru": "" }, { "mask": "+262-#####-####", "cc": "RE", "name_en": "Reunion", "desc_en": "", "name_ru": "Реюньон", "desc_ru": "" }, { "mask": "+40-##-###-####", "cc": "RO", "name_en": "Romania", "desc_en": "", "name_ru": "Румыния", "desc_ru": "" }, { "mask": "+381-##-###-####", "cc": "RS", "name_en": "Serbia", "desc_en": "", "name_ru": "Сербия", "desc_ru": "" }, { "mask": "+7(###)###-##-##", "cc": "RU", "name_en": "Russia", "desc_en": "", "name_ru": "Россия", "desc_ru": "" }, { "mask": "+250(###)###-###", "cc": "RW", "name_en": "Rwanda", "desc_en": "", "name_ru": "Руанда", "desc_ru": "" }, { "mask": "+966-5-####-####", "cc": "SA", "name_en": "Saudi Arabia ", "desc_en": "mobile", "name_ru": "Саудовская Аравия ", "desc_ru": "мобильные" }, { "mask": "+966-#-###-####", "cc": "SA", "name_en": "Saudi Arabia", "desc_en": "", "name_ru": "Саудовская Аравия", "desc_ru": "" }, { "mask": "+677-###-####", "cc": "SB", "name_en": "Solomon Islands ", "desc_en": "mobile", "name_ru": "Соломоновы Острова ", "desc_ru": "мобильные" }, { "mask": "+677-#####", "cc": "SB", "name_en": "Solomon Islands", "desc_en": "", "name_ru": "Соломоновы Острова", "desc_ru": "" }, { "mask": "+248-#-###-###", "cc": "SC", "name_en": "Seychelles", "desc_en": "", "name_ru": "Сейшелы", "desc_ru": "" }, { "mask": "+249-##-###-####", "cc": "SD", "name_en": "Sudan", "desc_en": "", "name_ru": "Судан", "desc_ru": "" }, { "mask": "+46-##-###-####", "cc": "SE", "name_en": "Sweden", "desc_en": "", "name_ru": "Швеция", "desc_ru": "" }, { "mask": "+65-####-####", "cc": "SG", "name_en": "Singapore", "desc_en": "", "name_ru": "Сингапур", "desc_ru": "" }, { "mask": "+290-####", "cc": "SH", "name_en": "Saint Helena", "desc_en": "", "name_ru": "Остров Святой Елены", "desc_ru": "" }, { "mask": "+290-####", "cc": "SH", "name_en": "Tristan da Cunha", "desc_en": "", "name_ru": "Тристан-да-Кунья", "desc_ru": "" }, { "mask": "+386-##-###-###", "cc": "SI", "name_en": "Slovenia", "desc_en": "", "name_ru": "Словения", "desc_ru": "" }, { "mask": "+421(###)###-###", "cc": "SK", "name_en": "Slovakia", "desc_en": "", "name_ru": "Словакия", "desc_ru": "" }, { "mask": "+232-##-######", "cc": "SL", "name_en": "Sierra Leone", "desc_en": "", "name_ru": "Сьерра-Леоне", "desc_ru": "" }, { "mask": "+378-####-######", "cc": "SM", "name_en": "San Marino", "desc_en": "", "name_ru": "Сан-Марино", "desc_ru": "" }, { "mask": "+221-##-###-####", "cc": "SN", "name_en": "Senegal", "desc_en": "", "name_ru": "Сенегал", "desc_ru": "" }, { "mask": "+252-##-###-###", "cc": "SO", "name_en": "Somalia", "desc_en": "", "name_ru": "Сомали", "desc_ru": "" }, { "mask": "+252-#-###-###", "cc": "SO", "name_en": "Somalia", "desc_en": "", "name_ru": "Сомали", "desc_ru": "" }, { "mask": "+252-#-###-###", "cc": "SO", "name_en": "Somalia ", "desc_en": "mobile", "name_ru": "Сомали ", "desc_ru": "мобильные" }, { "mask": "+597-###-####", "cc": "SR", "name_en": "Suriname ", "desc_en": "mobile", "name_ru": "Суринам ", "desc_ru": "мобильные" }, { "mask": "+597-###-###", "cc": "SR", "name_en": "Suriname", "desc_en": "", "name_ru": "Суринам", "desc_ru": "" }, { "mask": "+211-##-###-####", "cc": "SS", "name_en": "South Sudan", "desc_en": "", "name_ru": "Южный Судан", "desc_ru": "" }, { "mask": "+239-##-#####", "cc": "ST", "name_en": "Sao Tome and Principe", "desc_en": "", "name_ru": "Сан-Томе и Принсипи", "desc_ru": "" }, { "mask": "+503-##-##-####", "cc": "SV", "name_en": "El Salvador", "desc_en": "", "name_ru": "Сальвадор", "desc_ru": "" }, { "mask": "+1(721)###-####", "cc": "SX", "name_en": "Sint Maarten", "desc_en": "", "name_ru": "Синт-Маартен", "desc_ru": "" }, { "mask": "+963-##-####-###", "cc": "SY", "name_en": "Syrian Arab Republic", "desc_en": "", "name_ru": "Сирийская арабская республика", "desc_ru": "" }, { "mask": "+268-##-##-####", "cc": "SZ", "name_en": "Swaziland", "desc_en": "", "name_ru": "Свазиленд", "desc_ru": "" }, { "mask": "+1(649)###-####", "cc": "TC", "name_en": "Turks & Caicos", "desc_en": "", "name_ru": "Тёркс и Кайкос", "desc_ru": "" }, { "mask": "+235-##-##-##-##", "cc": "TD", "name_en": "Chad", "desc_en": "", "name_ru": "Чад", "desc_ru": "" }, { "mask": "+228-##-###-###", "cc": "TG", "name_en": "Togo", "desc_en": "", "name_ru": "Того", "desc_ru": "" }, { "mask": "+66-##-###-####", "cc": "TH", "name_en": "Thailand ", "desc_en": "mobile", "name_ru": "Таиланд ", "desc_ru": "мобильные" }, { "mask": "+66-##-###-###", "cc": "TH", "name_en": "Thailand", "desc_en": "", "name_ru": "Таиланд", "desc_ru": "" }, { "mask": "+992-##-###-####", "cc": "TJ", "name_en": "Tajikistan", "desc_en": "", "name_ru": "Таджикистан", "desc_ru": "" }, { "mask": "+690-####", "cc": "TK", "name_en": "Tokelau", "desc_en": "", "name_ru": "Токелау", "desc_ru": "" }, { "mask": "+670-###-####", "cc": "TL", "name_en": "East Timor", "desc_en": "", "name_ru": "Восточный Тимор", "desc_ru": "" }, { "mask": "+670-77#-#####", "cc": "TL", "name_en": "East Timor", "desc_en": "Timor Telecom", "name_ru": "Восточный Тимор", "desc_ru": "Timor Telecom" }, { "mask": "+670-78#-#####", "cc": "TL", "name_en": "East Timor", "desc_en": "Timor Telecom", "name_ru": "Восточный Тимор", "desc_ru": "Timor Telecom" }, { "mask": "+993-#-###-####", "cc": "TM", "name_en": "Turkmenistan", "desc_en": "", "name_ru": "Туркменистан", "desc_ru": "" }, { "mask": "+216-##-###-###", "cc": "TN", "name_en": "Tunisia", "desc_en": "", "name_ru": "Тунис", "desc_ru": "" }, { "mask": "+676-#####", "cc": "TO", "name_en": "Tonga", "desc_en": "", "name_ru": "Тонга", "desc_ru": "" }, { "mask": "+90(###)###-####", "cc": "TR", "name_en": "Turkey", "desc_en": "", "name_ru": "Турция", "desc_ru": "" }, { "mask": "+1(868)###-####", "cc": "TT", "name_en": "Trinidad & Tobago", "desc_en": "", "name_ru": "Тринидад и Тобаго", "desc_ru": "" }, { "mask": "+688-90####", "cc": "TV", "name_en": "Tuvalu ", "desc_en": "mobile", "name_ru": "Тувалу ", "desc_ru": "мобильные" }, { "mask": "+688-2####", "cc": "TV", "name_en": "Tuvalu", "desc_en": "", "name_ru": "Тувалу", "desc_ru": "" }, { "mask": "+886-#-####-####", "cc": "TW", "name_en": "Taiwan", "desc_en": "", "name_ru": "Тайвань", "desc_ru": "" }, { "mask": "+886-####-####", "cc": "TW", "name_en": "Taiwan", "desc_en": "", "name_ru": "Тайвань", "desc_ru": "" }, { "mask": "+255-##-###-####", "cc": "TZ", "name_en": "Tanzania", "desc_en": "", "name_ru": "Танзания", "desc_ru": "" }, { "mask": "+380(##)###-##-##", "cc": "UA", "name_en": "Ukraine", "desc_en": "", "name_ru": "Украина", "desc_ru": "" }, { "mask": "+256(###)###-###", "cc": "UG", "name_en": "Uganda", "desc_en": "", "name_ru": "Уганда", "desc_ru": "" }, { "mask": "+44-##-####-####", "cc": "UK", "name_en": "United Kingdom", "desc_en": "", "name_ru": "Великобритания", "desc_ru": "" }, { "mask": "+598-#-###-##-##", "cc": "UY", "name_en": "Uruguay", "desc_en": "", "name_ru": "Уругвай", "desc_ru": "" }, { "mask": "+998-##-###-####", "cc": "UZ", "name_en": "Uzbekistan", "desc_en": "", "name_ru": "Узбекистан", "desc_ru": "" }, { "mask": "+39-6-698-#####", "cc": "VA", "name_en": "Vatican City", "desc_en": "", "name_ru": "Ватикан", "desc_ru": "" }, { "mask": "+1(784)###-####", "cc": "VC", "name_en": "Saint Vincent & the Grenadines", "desc_en": "", "name_ru": "Сент-Винсент и Гренадины", "desc_ru": "" }, { "mask": "+58(###)###-####", "cc": "VE", "name_en": "Venezuela", "desc_en": "", "name_ru": "Венесуэла", "desc_ru": "" }, { "mask": "+1(284)###-####", "cc": "VG", "name_en": "British Virgin Islands", "desc_en": "", "name_ru": "Британские Виргинские острова", "desc_ru": "" }, { "mask": "+1(340)###-####", "cc": "VI", "name_en": "US Virgin Islands", "desc_en": "", "name_ru": "Американские Виргинские острова", "desc_ru": "" }, { "mask": "+84-##-####-###", "cc": "VN", "name_en": "Vietnam", "desc_en": "", "name_ru": "Вьетнам", "desc_ru": "" }, { "mask": "+84(###)####-###", "cc": "VN", "name_en": "Vietnam", "desc_en": "", "name_ru": "Вьетнам", "desc_ru": "" }, { "mask": "+678-##-#####", "cc": "VU", "name_en": "Vanuatu ", "desc_en": "mobile", "name_ru": "Вануату ", "desc_ru": "мобильные" }, { "mask": "+678-#####", "cc": "VU", "name_en": "Vanuatu", "desc_en": "", "name_ru": "Вануату", "desc_ru": "" }, { "mask": "+681-##-####", "cc": "WF", "name_en": "Wallis and Futuna", "desc_en": "", "name_ru": "Уоллис и Футуна", "desc_ru": "" }, { "mask": "+685-##-####", "cc": "WS", "name_en": "Samoa", "desc_en": "", "name_ru": "Самоа", "desc_ru": "" }, { "mask": "+967-###-###-###", "cc": "YE", "name_en": "Yemen ", "desc_en": "mobile", "name_ru": "Йемен ", "desc_ru": "мобильные" }, { "mask": "+967-#-###-###", "cc": "YE", "name_en": "Yemen", "desc_en": "", "name_ru": "Йемен", "desc_ru": "" }, { "mask": "+967-##-###-###", "cc": "YE", "name_en": "Yemen", "desc_en": "", "name_ru": "Йемен", "desc_ru": "" }, { "mask": "+27-##-###-####", "cc": "ZA", "name_en": "South Africa", "desc_en": "", "name_ru": "Южно-Африканская Респ.", "desc_ru": "" }, { "mask": "+260-##-###-####", "cc": "ZM", "name_en": "Zambia", "desc_en": "", "name_ru": "Замбия", "desc_ru": "" }, { "mask": "+263-#-######", "cc": "ZW", "name_en": "Zimbabwe", "desc_en": "", "name_ru": "Зимбабве", "desc_ru": "" }, { "mask": "+1(###)###-####", "cc": ["US", "CA"], "name_en": "USA and Canada", "desc_en": "", "name_ru": "США и Канада", "desc_ru": "" } ] ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/input-mask/phone-codes/readme.txt ================================================ more phone masks can be found at https://github.com/andr-04/inputmask-multi ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/ionslider/ion.rangeSlider.css ================================================ /* Ion.RangeSlider // css version 1.8.5 // by Denis Ineshin | ionden.com // ===================================================================================================================*/ /* ===================================================================================================================== // RangeSlider */ .irs { position: relative; display: block; } .irs-line { position: relative; display: block; overflow: hidden; } .irs-line-left, .irs-line-mid, .irs-line-right { position: absolute; display: block; top: 0; } .irs-line-left { left: 0; width: 10%; } .irs-line-mid { left: 10%; width: 80%; } .irs-line-right { right: 0; width: 10%; } .irs-diapason { position: absolute; display: block; left: 0; width: 100%; } .irs-slider { position: absolute; display: block; cursor: default; z-index: 1; } .irs-slider.single { left: 10px; } .irs-slider.single:before { position: absolute; display: block; content: ""; top: -30%; left: -30%; width: 160%; height: 160%; background: rgba(0,0,0,0.0); } .irs-slider.from { left: 100px; } .irs-slider.from:before { position: absolute; display: block; content: ""; top: -30%; left: -30%; width: 130%; height: 160%; background: rgba(0,0,0,0.0); } .irs-slider.to { left: 300px; } .irs-slider.to:before { position: absolute; display: block; content: ""; top: -30%; left: 0; width: 130%; height: 160%; background: rgba(0,0,0,0.0); } .irs-slider.last { z-index: 2; } .irs-min { position: absolute; display: block; left: 0; cursor: default; } .irs-max { position: absolute; display: block; right: 0; cursor: default; } .irs-from, .irs-to, .irs-single { position: absolute; display: block; top: 0; left: 0; cursor: default; white-space: nowrap; } .irs-grid { position: absolute; display: none; bottom: 0; left: 0; width: 100%; height: 20px; } .irs-with-grid .irs-grid { display: block; } .irs-grid-pol { position: absolute; top: 0; left: 0; width: 1px; height: 8px; background: #000; } .irs-grid-pol.small { height: 4px; } .irs-grid-text { position: absolute; bottom: 0; left: 0; width: 100px; white-space: nowrap; text-align: center; font-size: 9px; line-height: 9px; color: #000; } .irs-disable-mask { position: absolute; display: block; top: 0; left: 0; width: 100%; height: 100%; cursor: default; background: rgba(0,0,0,0.0); z-index: 2; } .irs-disabled { opacity: 0.4; } ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/ionslider/ion.rangeSlider.skinFlat.css ================================================ /* Ion.RangeSlider, Flat UI Skin // css version 1.8.5 // by Denis Ineshin | ionden.com // ===================================================================================================================*/ /* ===================================================================================================================== // Skin details */ .irs-line-mid, .irs-line-left, .irs-line-right, .irs-diapason, .irs-slider { background: url(img/sprite-skin-flat.png) repeat-x; } .irs { height: 40px; } .irs-with-grid { height: 60px; } .irs-line { height: 12px; top: 25px; } .irs-line-left { height: 12px; background-position: 0 -30px; } .irs-line-mid { height: 12px; background-position: 0 0; } .irs-line-right { height: 12px; background-position: 100% -30px; } .irs-diapason { height: 12px; top: 25px; background-position: 0 -60px; } .irs-slider { width: 16px; height: 18px; top: 22px; background-position: 0 -90px; } #irs-active-slider, .irs-slider:hover { background-position: 0 -120px; } .irs-min, .irs-max { color: #999; font-size: 10px; line-height: 1.333; text-shadow: none; top: 0; padding: 1px 3px; background: #e1e4e9; border-radius: 4px; } .irs-from, .irs-to, .irs-single { color: #fff; font-size: 10px; line-height: 1.333; text-shadow: none; padding: 1px 5px; background: #ed5565; border-radius: 4px; } .irs-from:after, .irs-to:after, .irs-single:after { position: absolute; display: block; content: ""; bottom: -6px; left: 50%; width: 0; height: 0; margin-left: -3px; overflow: hidden; border: 3px solid transparent; border-top-color: #ed5565; } .irs-grid-pol { background: #e1e4e9; } .irs-grid-text { color: #999; } .irs-disabled { } ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/ionslider/ion.rangeSlider.skinNice.css ================================================ /* Ion.RangeSlider, Nice Skin // css version 1.8.5 // by Denis Ineshin | ionden.com // ===================================================================================================================*/ /* ===================================================================================================================== // Skin details */ .irs-line-mid, .irs-line-left, .irs-line-right, .irs-diapason, .irs-slider { background: url(img/sprite-skin-nice.png) repeat-x; } .irs { height: 40px; } .irs-with-grid { height: 60px; } .irs-line { height: 8px; top: 25px; } .irs-line-left { height: 8px; background-position: 0 -30px; } .irs-line-mid { height: 8px; background-position: 0 0; } .irs-line-right { height: 8px; background-position: 100% -30px; } .irs-diapason { height: 8px; top: 25px; background-position: 0 -60px; } .irs-slider { width: 22px; height: 22px; top: 17px; background-position: 0 -90px; } #irs-active-slider, .irs-slider:hover { background-position: 0 -120px; } .irs-min, .irs-max { color: #999; font-size: 10px; line-height: 1.333; text-shadow: none; top: 0; padding: 1px 3px; background: rgba(0,0,0,0.1); border-radius: 3px; } .lt-ie9 .irs-min, .lt-ie9 .irs-max { background: #ccc; } .irs-from, .irs-to, .irs-single { color: #fff; font-size: 10px; line-height: 1.333; text-shadow: none; padding: 1px 5px; background: rgba(0,0,0,0.3); border-radius: 3px; } .lt-ie9 .irs-from, .lt-ie9 .irs-to, .lt-ie9 .irs-single { background: #999; } .irs-grid-pol { background: #99a4ac; } .irs-grid-text { color: #99a4ac; } .irs-disabled { } ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/jquery-pjax/jquery.pjax.js ================================================ /*! Sea.js 2.2.3 | seajs.org/LICENSE.md */ !function(a,b){function c(a){return function(b){return{}.toString.call(b)=="[object "+a+"]"}}function d(){return B++}function e(a){return a.match(E)[0]}function f(a){for(a=a.replace(F,"/");a.match(G);)a=a.replace(G,"/");return a=a.replace(H,"$1/")}function g(a){var b=a.length-1,c=a.charAt(b);return"#"===c?a.substring(0,b):".js"===a.substring(b-2)||a.indexOf("?")>0||".css"===a.substring(b-3)||"/"===c?a:a+".js"}function h(a){var b=v.alias;return b&&x(b[a])?b[a]:a}function i(a){var b=v.paths,c;return b&&(c=a.match(I))&&x(b[c[1]])&&(a=b[c[1]]+c[2]),a}function j(a){var b=v.vars;return b&&a.indexOf("{")>-1&&(a=a.replace(J,function(a,c){return x(b[c])?b[c]:a})),a}function k(a){var b=v.map,c=a;if(b)for(var d=0,e=b.length;e>d;d++){var f=b[d];if(c=z(f)?f(a)||a:a.replace(f[0],f[1]),c!==a)break}return c}function l(a,b){var c,d=a.charAt(0);if(K.test(a))c=a;else if("."===d)c=f((b?e(b):v.cwd)+a);else if("/"===d){var g=v.cwd.match(L);c=g?g[0]+a.substring(1):a}else c=v.base+a;return 0===c.indexOf("//")&&(c=location.protocol+c),c}function m(a,b){if(!a)return"";a=h(a),a=i(a),a=j(a),a=g(a);var c=l(a,b);return c=k(c)}function n(a){return a.hasAttribute?a.src:a.getAttribute("src",4)}function o(a,b,c,d){var e=T.test(a),f=M.createElement(e?"link":"script");c&&(f.charset=c),A(d)||f.setAttribute("crossorigin",d),p(f,b,e,a),e?(f.rel="stylesheet",f.href=a):(f.async=!0,f.src=a),U=f,S?R.insertBefore(f,S):R.appendChild(f),U=null}function p(a,c,d,e){function f(){a.onload=a.onerror=a.onreadystatechange=null,d||v.debug||R.removeChild(a),a=null,c()}var g="onload"in a;return!d||!W&&g?(g?(a.onload=f,a.onerror=function(){D("error",{uri:e,node:a}),f()}):a.onreadystatechange=function(){/loaded|complete/.test(a.readyState)&&f()},b):(setTimeout(function(){q(a,c)},1),b)}function q(a,b){var c=a.sheet,d;if(W)c&&(d=!0);else if(c)try{c.cssRules&&(d=!0)}catch(e){"NS_ERROR_DOM_SECURITY_ERR"===e.name&&(d=!0)}setTimeout(function(){d?b():q(a,b)},20)}function r(){if(U)return U;if(V&&"interactive"===V.readyState)return V;for(var a=R.getElementsByTagName("script"),b=a.length-1;b>=0;b--){var c=a[b];if("interactive"===c.readyState)return V=c}}function s(a){var b=[];return a.replace(Y,"").replace(X,function(a,c,d){d&&b.push(d)}),b}function t(a,b){this.uri=a,this.dependencies=b||[],this.exports=null,this.status=0,this._waitings={},this._remain=0}if(!a.seajs){var u=a.seajs={version:"2.2.3"},v=u.data={},w=c("Object"),x=c("String"),y=Array.isArray||c("Array"),z=c("Function"),A=c("Undefined"),B=0,C=v.events={};u.on=function(a,b){var c=C[a]||(C[a]=[]);return c.push(b),u},u.off=function(a,b){if(!a&&!b)return C=v.events={},u;var c=C[a];if(c)if(b)for(var d=c.length-1;d>=0;d--)c[d]===b&&c.splice(d,1);else delete C[a];return u};var D=u.emit=function(a,b){var c=C[a],d;if(c)for(c=c.slice();d=c.shift();)d(b);return u},E=/[^?#]*\//,F=/\/\.\//g,G=/\/[^/]+\/\.\.\//,H=/([^:/])\/\//g,I=/^([^/:]+)(\/.+)$/,J=/{([^{]+)}/g,K=/^\/\/.|:\//,L=/^.*?\/\/.*?\//,M=document,N=e(M.URL),O=M.scripts,P=M.getElementById("seajsnode")||O[O.length-1],Q=e(n(P)||N);u.resolve=m;var R=M.head||M.getElementsByTagName("head")[0]||M.documentElement,S=R.getElementsByTagName("base")[0],T=/\.css(?:\?|$)/i,U,V,W=+navigator.userAgent.replace(/.*(?:AppleWebKit|AndroidWebKit)\/(\d+).*/,"$1")<536;u.request=o;var X=/"(?:\\"|[^"])*"|'(?:\\'|[^'])*'|\/\*[\S\s]*?\*\/|\/(?:\\\/|[^\/\r\n])+\/(?=[^\/])|\/\/.*|\.\s*require|(?:^|[^$])\brequire\s*\(\s*(["'])(.+?)\1\s*\)/g,Y=/\\\\/g,Z=u.cache={},$,_={},ab={},bb={},cb=t.STATUS={FETCHING:1,SAVED:2,LOADING:3,LOADED:4,EXECUTING:5,EXECUTED:6};t.prototype.resolve=function(){for(var a=this,b=a.dependencies,c=[],d=0,e=b.length;e>d;d++)c[d]=t.resolve(b[d],a.uri);return c},t.prototype.load=function(){var a=this;if(!(a.status>=cb.LOADING)){a.status=cb.LOADING;var c=a.resolve();D("load",c);for(var d=a._remain=c.length,e,f=0;d>f;f++)e=t.get(c[f]),e.statusf;f++)e=Z[c[f]],e.status=cb.EXECUTING)return c.exports;c.status=cb.EXECUTING;var e=c.uri;a.resolve=function(a){return t.resolve(a,e)},a.async=function(b,c){return t.use(b,c,e+"_async_"+d()),a};var f=c.factory,g=z(f)?f(a,c.exports={},c):f;return g===b&&(g=c.exports),delete c.factory,c.exports=g,c.status=cb.EXECUTED,D("exec",c),g},t.resolve=function(a,b){var c={id:a,refUri:b};return D("resolve",c),c.uri||u.resolve(c.id,b)},t.define=function(a,c,d){var e=arguments.length;1===e?(d=a,a=b):2===e&&(d=c,y(a)?(c=a,a=b):c=b),!y(c)&&z(d)&&(c=s(""+d));var f={id:a,uri:t.resolve(a),deps:c,factory:d};if(!f.uri&&M.attachEvent){var g=r();g&&(f.uri=g.src)}D("define",f),f.uri?t.save(f.uri,f):$=f},t.save=function(a,b){var c=t.get(a);c.statusf;f++)b[f]=Z[d[f]].exec();c&&c.apply(a,b),delete e.callback},e.load()},t.preload=function(a){var b=v.preload,c=b.length;c?t.use(b,function(){b.splice(0,c),t.preload(a)},v.cwd+"_preload_"+d()):a()},u.use=function(a,b){return t.preload(function(){t.use(a,b,v.cwd+"_use_"+d())}),u},t.define.cmd={},a.define=t.define,u.Module=t,v.fetchedList=ab,v.cid=d,u.require=function(a){var b=t.get(t.resolve(a));return b.status 1 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey ) return; // Ignore cross origin links if ( location.protocol !== link.protocol || location.hostname !== link.hostname ) return; // Ignore case when a hash is being tacked on the current URL if ( link.href.indexOf('#') > -1 && stripHash(link) == stripHash(location) ) return; // Ignore event with default prevented if (event.isDefaultPrevented()) return; var defaults = { url: link.href, container: $link.attr('data-pjax'), target: link }; var opts = $.extend({}, defaults, options); var clickEvent = $.Event('pjax:click'); $link.trigger(clickEvent, [opts]); if (!clickEvent.isDefaultPrevented()) { pjax(opts); event.preventDefault(); $link.trigger('pjax:clicked', [opts]) } } // Public: pjax on form submit handler // // Exported as $.pjax.submit // // event - "click" jQuery.Event // options - pjax options // // Examples // // $(document).on('submit', 'form', function(event) { // $.pjax.submit(event, '[data-pjax-container]') // }) // // Returns nothing. function handleSubmit(event, container, options) { options = optionsFor(container, options); var form = event.currentTarget; var $form = $(form); if (form.tagName.toUpperCase() !== 'FORM') throw "$.pjax.submit requires a form element"; var defaults = { type: ($form.attr('method') || 'GET').toUpperCase(), url: $form.attr('action'), container: $form.attr('data-pjax'), target: form }; if (defaults.type !== 'GET' && window.FormData !== undefined) { defaults.data = new FormData(form); defaults.processData = false; defaults.contentType = false; } else { // Can't handle file uploads, exit if ($form.find(':file').length) { return } // Fallback to manually serializing the fields defaults.data = $form.serializeArray() } pjax($.extend({}, defaults, options)); event.preventDefault() } // Loads a URL with ajax, puts the response body inside a container, // then pushState()'s the loaded URL. // // Works just like $.ajax in that it accepts a jQuery ajax // settings object (with keys like url, type, data, etc). // // Accepts these extra keys: // // container - String selector for where to stick the response body. // push - Whether to pushState the URL. Defaults to true (of course). // replace - Want to use replaceState instead? That's cool. // // Use it just like $.ajax: // // var xhr = $.pjax({ url: this.href, container: '#main' }) // console.log( xhr.readyState ) // // Returns whatever $.ajax returns. function pjax(options) { options = $.extend(true, {}, $.ajaxSettings, pjax.defaults, options); if ($.isFunction(options.url)) { options.url = options.url() } var hash = parseURL(options.url).hash; var containerType = $.type(options.container); if (containerType !== 'string') { throw "expected string value for 'container' option; got " + containerType } var context = options.context = $(options.container); if (!context.length) { throw "the container selector '" + options.container + "' did not match anything" } // We want the browser to maintain two separate internal caches: one // for pjax'd partial page loads and one for normal page loads. // Without adding this secret parameter, some browsers will often // confuse the two. if (!options.data) options.data = {}; if ($.isArray(options.data)) { options.data.push({name: '_pjax', value: options.container}) } else { options.data._pjax = options.container } function fire(type, args, props) { if (!props) props = {}; props.relatedTarget = options.target; var event = $.Event(type, props); context.trigger(event, args); return !event.isDefaultPrevented() } var timeoutTimer; options.beforeSend = function(xhr, settings) { // No timeout for non-GET requests // Its not safe to request the resource again with a fallback method. if (settings.type !== 'GET') { settings.timeout = 0 } xhr.setRequestHeader('X-PJAX', 'true'); xhr.setRequestHeader('X-PJAX-Container', options.container); if (!fire('pjax:beforeSend', [xhr, settings])) return false; if (settings.timeout > 0) { timeoutTimer = setTimeout(function() { if (fire('pjax:timeout', [xhr, options])) xhr.abort('timeout') }, settings.timeout); // Clear timeout setting so jquerys internal timeout isn't invoked settings.timeout = 0 } var url = parseURL(settings.url); if (hash) url.hash = hash; options.requestUrl = stripInternalParams(url) }; options.complete = function(xhr, textStatus) { if (timeoutTimer) clearTimeout(timeoutTimer); fire('pjax:complete', [xhr, textStatus, options]); fire('pjax:end', [xhr, options]) }; options.error = function(xhr, textStatus, errorThrown) { var container = extractContainer("", xhr, options); var allowed = fire('pjax:error', [xhr, textStatus, errorThrown, options]); if (options.type == 'GET' && textStatus !== 'abort' && allowed) { locationReplace(container.url) } }; options.success = function(data, status, xhr) { var previousState = pjax.state; // If $.pjax.defaults.version is a function, invoke it first. // Otherwise it can be a static string. var currentVersion = typeof $.pjax.defaults.version === 'function' ? $.pjax.defaults.version() : $.pjax.defaults.version; var latestVersion = xhr.getResponseHeader('X-PJAX-Version'); var container = extractContainer(data, xhr, options); var url = parseURL(container.url); if (hash) { url.hash = hash; container.url = url.href } // If there is a layout version mismatch, hard load the new url if (currentVersion && latestVersion && currentVersion !== latestVersion) { locationReplace(container.url); return } // If the new response is missing a body, hard load the page if (!container.contents) { locationReplace(container.url); return } pjax.state = { id: options.id || uniqueId(), url: container.url, title: container.title, container: options.container, fragment: options.fragment, timeout: options.timeout }; if (options.push || options.replace) { window.history.replaceState(pjax.state, container.title, container.url) } // Only blur the focus if the focused element is within the container. var blurFocus = $.contains(context, document.activeElement); // Clear out any focused controls before inserting new page contents. if (blurFocus) { try { document.activeElement.blur() } catch (e) { /* ignore */ } } if (container.title) document.title = container.title; fire('pjax:beforeReplace', [container.contents, options], { state: pjax.state, previousState: previousState }); context.html(container.contents); // FF bug: Won't autofocus fields that are inserted via JS. // This behavior is incorrect. So if theres no current focus, autofocus // the last field. // // http://www.w3.org/html/wg/drafts/html/master/forms.html var autofocusEl = context.find('input[autofocus], textarea[autofocus]').last()[0]; if (autofocusEl && document.activeElement !== autofocusEl) { autofocusEl.focus() } executeStyleTags(container.styles); executeScriptTags(container.scripts); var scrollTo = options.scrollTo; // Ensure browser scrolls to the element referenced by the URL anchor if (hash) { var name = decodeURIComponent(hash.slice(1)); var target = document.getElementById(name) || document.getElementsByName(name)[0]; if (target) scrollTo = $(target).offset().top } if (typeof scrollTo == 'number') $(window).scrollTop(scrollTo); fire('pjax:success', [data, status, xhr, options]) }; function executeScriptTags(scripts) { if (!scripts) return; var urls = []; scripts.each(function() { urls.unshift($(this).attr('src')); }); loadAssets(urls, true); } function executeStyleTags(styles) { if (!styles) return; var hrefs = []; styles.each(function() { hrefs.unshift($(this).attr('href')); }); loadAssets(hrefs); } // 按顺序加载静态资源 function loadAssets(urls, trigger) { if (urls.length < 1) { if (trigger) { fire('pjax:loaded'); } return; } seajs.use([urls.pop()], function () { loadAssets(urls, trigger); }); } // Initialize pjax.state for the initial page load. Assume we're // using the container and options of the link we're loading for the // back button to the initial page. This ensures good back button // behavior. if (!pjax.state) { pjax.state = { id: uniqueId(), url: window.location.href, title: document.title, container: options.container, fragment: options.fragment, timeout: options.timeout }; window.history.replaceState(pjax.state, document.title) } // Cancel the current request if we're already pjaxing abortXHR(pjax.xhr); pjax.options = options; var xhr = pjax.xhr = $.ajax(options); if (xhr.readyState > 0) { if (options.push && !options.replace) { // Cache current container element before replacing it cachePush(pjax.state.id, [options.container, cloneContents(context)]); window.history.pushState(null, "", options.requestUrl) } fire('pjax:start', [xhr, options]); fire('pjax:send', [xhr, options]) } return pjax.xhr } // Public: Reload current page with pjax. // // Returns whatever $.pjax returns. function pjaxReload(container, options) { var defaults = { url: window.location.href, push: false, replace: true, scrollTo: false }; return pjax($.extend(defaults, optionsFor(container, options))) } // Internal: Hard replace current state with url. // // Work for around WebKit // https://bugs.webkit.org/show_bug.cgi?id=93506 // // Returns nothing. function locationReplace(url) { window.history.replaceState(null, "", pjax.state.url); window.location.replace(url) } var initialPop = true; var initialURL = window.location.href; var initialState = window.history.state; // Initialize $.pjax.state if possible // Happens when reloading a page and coming forward from a different // session history. if (initialState && initialState.container) { pjax.state = initialState } // Non-webkit browsers don't fire an initial popstate event if ('state' in window.history) { initialPop = false } // popstate handler takes care of the back and forward buttons // // You probably shouldn't use pjax on pages with other pushState // stuff yet. function onPjaxPopstate(event) { // Hitting back or forward should override any pending PJAX request. if (!initialPop) { abortXHR(pjax.xhr) } var previousState = pjax.state; var state = event.state; var direction; if (state && state.container) { // When coming forward from a separate history session, will get an // initial pop with a state we are already at. Skip reloading the current // page. if (initialPop && initialURL == state.url) return; if (previousState) { // If popping back to the same state, just skip. // Could be clicking back from hashchange rather than a pushState. if (previousState.id === state.id) return; // Since state IDs always increase, we can deduce the navigation direction direction = previousState.id < state.id ? 'forward' : 'back' } var cache = cacheMapping[state.id] || []; var containerSelector = cache[0] || state.container; var container = $(containerSelector), contents = cache[1]; if (container.length) { if (previousState) { // Cache current container before replacement and inform the // cache which direction the history shifted. cachePop(direction, previousState.id, [containerSelector, cloneContents(container)]) } var popstateEvent = $.Event('pjax:popstate', { state: state, direction: direction }); container.trigger(popstateEvent); var options = { id: state.id, url: state.url, container: containerSelector, push: false, fragment: state.fragment, timeout: state.timeout, scrollTo: false }; if (contents) { container.trigger('pjax:start', [null, options]); pjax.state = state; if (state.title) document.title = state.title; var beforeReplaceEvent = $.Event('pjax:beforeReplace', { state: state, previousState: previousState }); container.trigger(beforeReplaceEvent, [contents, options]); container.html(contents); container.trigger('pjax:end', [null, options]) } else { pjax(options) } // Force reflow/relayout before the browser tries to restore the // scroll position. container[0].offsetHeight // eslint-disable-line no-unused-expressions } else { locationReplace(location.href) } } initialPop = false } // Fallback version of main pjax function for browsers that don't // support pushState. // // Returns nothing since it retriggers a hard form submission. function fallbackPjax(options) { var url = $.isFunction(options.url) ? options.url() : options.url, method = options.type ? options.type.toUpperCase() : 'GET'; var form = $('
                      ', { method: method === 'GET' ? 'GET' : 'POST', action: url, style: 'display:none' }); if (method !== 'GET' && method !== 'POST') { form.append($('', { type: 'hidden', name: '_method', value: method.toLowerCase() })) } var data = options.data; if (typeof data === 'string') { $.each(data.split('&'), function(index, value) { var pair = value.split('='); form.append($('', {type: 'hidden', name: pair[0], value: pair[1]})) }) } else if ($.isArray(data)) { $.each(data, function(index, value) { form.append($('', {type: 'hidden', name: value.name, value: value.value})) }) } else if (typeof data === 'object') { var key; for (key in data) form.append($('', {type: 'hidden', name: key, value: data[key]})) } $(document.body).append(form); form.submit() } // Internal: Abort an XmlHttpRequest if it hasn't been completed, // also removing its event handlers. function abortXHR(xhr) { if ( xhr && xhr.readyState < 4) { xhr.onreadystatechange = $.noop; xhr.abort() } } // Internal: Generate unique id for state object. // // Use a timestamp instead of a counter since ids should still be // unique across page loads. // // Returns Number. function uniqueId() { return (new Date).getTime() } function cloneContents(container) { var cloned = container.clone(); // Unmark script tags as already being eval'd so they can get executed again // when restored from cache. HAXX: Uses jQuery internal method. cloned.find('script').each(function(){ if (!this.src) $._data(this, 'globalEval', false) }); return cloned.contents() } // Internal: Strip internal query params from parsed URL. // // Returns sanitized url.href String. function stripInternalParams(url) { url.search = url.search.replace(/([?&])(_pjax|_)=[^&]*/g, '').replace(/^&/, ''); return url.href.replace(/\?($|#)/, '$1') } // Internal: Parse URL components and returns a Locationish object. // // url - String URL // // Returns HTMLAnchorElement that acts like Location. function parseURL(url) { var a = document.createElement('a'); a.href = url; return a } // Internal: Return the `href` component of given URL object with the hash // portion removed. // // location - Location or HTMLAnchorElement // // Returns String function stripHash(location) { return location.href.replace(/#.*/, '') } // Internal: Build options Object for arguments. // // For convenience the first parameter can be either the container or // the options object. // // Examples // // optionsFor('#container') // // => {container: '#container'} // // optionsFor('#container', {push: true}) // // => {container: '#container', push: true} // // optionsFor({container: '#container', push: true}) // // => {container: '#container', push: true} // // Returns options Object. function optionsFor(container, options) { if (container && options) { options = $.extend({}, options); options.container = container; return options } else if ($.isPlainObject(container)) { return container } else { return {container: container} } } // Internal: Filter and find all elements matching the selector. // // Where $.fn.find only matches descendants, findAll will test all the // top level elements in the jQuery object as well. // // elems - jQuery object of Elements // selector - String selector to match // // Returns a jQuery object. function findAll(elems, selector) { return elems.filter(selector).add(elems.find(selector)) } function parseHTML(html) { return $.parseHTML(html, document, true) } // Internal: Extracts container and metadata from response. // // 1. Extracts X-PJAX-URL header if set // 2. Extracts inline tags // 3. Builds response Element and extracts fragment if set // // data - String response data // xhr - XHR response // options - pjax options Object // // Returns an Object with url, title, and contents keys. function extractContainer(data, xhr, options) { var obj = {}, fullDocument = /<html/i.test(data); // Prefer X-PJAX-URL header if it was set, otherwise fallback to // using the original requested url. var serverUrl = xhr.getResponseHeader('X-PJAX-URL'); obj.url = serverUrl ? stripInternalParams(parseURL(serverUrl)) : options.requestUrl; var $head, $body; // Attempt to parse response html into elements if (fullDocument) { $body = $(parseHTML(data.match(/<body[^>]*>([\s\S.]*)<\/body>/i)[0])); var head = data.match(/<head[^>]*>([\s\S.]*)<\/head>/i); $head = head != null ? $(parseHTML(head[0])) : $body } else { $head = $body = $(parseHTML(data)) } // If response data is empty, return fast if ($body.length === 0) return obj; // If there's a <title> tag in the header, use it as // the page's title. obj.title = findAll($head, 'title').last().text(); if (options.fragment) { var $fragment = $body; // If they specified a fragment, look for it in the response // and pull it out. if (options.fragment !== 'body') { $fragment = findAll($fragment, options.fragment).first() } if ($fragment.length) { obj.contents = options.fragment === 'body' ? $fragment : $fragment.contents(); // If there's no title, look for data-title and title attributes // on the fragment if (!obj.title) obj.title = $fragment.attr('title') || $fragment.data('title') } } else if (!fullDocument) { obj.contents = $body } // Clean up any <title> tags if (obj.contents) { // Remove any parent title elements obj.contents = obj.contents.not(function() { return $(this).is('title') }); // Then scrub any titles from their descendants obj.contents.find('title').remove(); // Gather all script[src] elements obj.scripts = findAll(obj.contents, 'script[src]').remove(); obj.contents = obj.contents.not(obj.scripts); // Collect all link[type="text/css"] elements obj.styles = findAll(obj.contents, 'link[type="text/css"]').remove(); obj.contents = obj.contents.not(obj.styles); } // Trim any whitespace off the title if (obj.title) obj.title = $.trim(obj.title); return obj } // Internal: History DOM caching class. var cacheMapping = {}; var cacheForwardStack = []; var cacheBackStack = []; // Push previous state id and container contents into the history // cache. Should be called in conjunction with `pushState` to save the // previous container contents. // // id - State ID Number // value - DOM Element to cache // // Returns nothing. function cachePush(id, value) { cacheMapping[id] = value; cacheBackStack.push(id); // Remove all entries in forward history stack after pushing a new page. trimCacheStack(cacheForwardStack, 0); // Trim back history stack to max cache length. trimCacheStack(cacheBackStack, pjax.defaults.maxCacheLength) } // Shifts cache from directional history cache. Should be // called on `popstate` with the previous state id and container // contents. // // direction - "forward" or "back" String // id - State ID Number // value - DOM Element to cache // // Returns nothing. function cachePop(direction, id, value) { var pushStack, popStack; cacheMapping[id] = value; if (direction === 'forward') { pushStack = cacheBackStack; popStack = cacheForwardStack } else { pushStack = cacheForwardStack; popStack = cacheBackStack } pushStack.push(id); id = popStack.pop(); if (id) delete cacheMapping[id]; // Trim whichever stack we just pushed to to max cache length. trimCacheStack(pushStack, pjax.defaults.maxCacheLength) } // Trim a cache stack (either cacheBackStack or cacheForwardStack) to be no // longer than the specified length, deleting cached DOM elements as necessary. // // stack - Array of state IDs // length - Maximum length to trim to // // Returns nothing. function trimCacheStack(stack, length) { while (stack.length > length) delete cacheMapping[stack.shift()] } // Public: Find version identifier for the initial page load. // // Returns String version or undefined. function findVersion() { return $('meta').filter(function() { var name = $(this).attr('http-equiv'); return name && name.toUpperCase() === 'X-PJAX-VERSION' }).attr('content') } // Install pjax functions on $.pjax to enable pushState behavior. // // Does nothing if already enabled. // // Examples // // $.pjax.enable() // // Returns nothing. function enable() { $.fn.pjax = fnPjax; $.pjax = pjax; $.pjax.enable = $.noop; $.pjax.disable = disable; $.pjax.click = handleClick; $.pjax.submit = handleSubmit; $.pjax.reload = pjaxReload; $.pjax.defaults = { timeout: 650, push: true, replace: false, type: 'GET', dataType: 'html', scrollTo: 0, maxCacheLength: 20, version: findVersion }; $(window).on('popstate.pjax', onPjaxPopstate) } // Disable pushState behavior. // // This is the case when a browser doesn't support pushState. It is // sometimes useful to disable pushState for debugging on a modern // browser. // // Examples // // $.pjax.disable() // // Returns nothing. function disable() { $.fn.pjax = function() { return this }; $.pjax = fallbackPjax; $.pjax.enable = enable; $.pjax.disable = $.noop; $.pjax.click = $.noop; $.pjax.submit = $.noop; $.pjax.reload = function() { window.location.reload() }; $(window).off('popstate.pjax', onPjaxPopstate) } // Add the state property to jQuery's event object so we can use it in // $(window).bind('popstate') if ($.event.props && $.inArray('state', $.event.props) < 0) { $.event.props.push('state') } else if (!('state' in $.Event.prototype)) { $.event.addProp('state') } // Is pjax supported by this browser? $.support.pjax = window.history && window.history.pushState && window.history.replaceState && // pushState isn't reliable on iOS until 5. !navigator.userAgent.match(/((iPod|iPhone|iPad).+\bOS\s+[1-4]\D|WebApps\/.+CFNetwork)/); if ($.support.pjax) { enable() } else { disable() } })(jQuery); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/jquery-qrcode/dist/jquery-qrcode.js ================================================ /*! jquery-qrcode v0.17.0 - https://larsjung.de/jquery-qrcode/ */ (function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(); else if(typeof define === 'function' && define.amd) define("jquery-qrcode", [], factory); else if(typeof exports === 'object') exports["jquery-qrcode"] = factory(); else root["jquery-qrcode"] = factory(); })((typeof self !== 'undefined' ? self : this), function() { return /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) { /******/ return installedModules[moduleId].exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ i: moduleId, /******/ l: false, /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Flag the module as loaded /******/ module.l = true; /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ /******/ // define getter function for harmony exports /******/ __webpack_require__.d = function(exports, name, getter) { /******/ if(!__webpack_require__.o(exports, name)) { /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); /******/ } /******/ }; /******/ /******/ // define __esModule on exports /******/ __webpack_require__.r = function(exports) { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ /******/ // create a fake namespace object /******/ // mode & 1: value is a module id, require it /******/ // mode & 2: merge all properties of value into the ns /******/ // mode & 4: return value when already ns object /******/ // mode & 8|1: behave like require /******/ __webpack_require__.t = function(value, mode) { /******/ if(mode & 1) value = __webpack_require__(value); /******/ if(mode & 8) return value; /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; /******/ var ns = Object.create(null); /******/ __webpack_require__.r(ns); /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); /******/ return ns; /******/ }; /******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? /******/ function getDefault() { return module['default']; } : /******/ function getModuleExports() { return module; }; /******/ __webpack_require__.d(getter, 'a', getter); /******/ return getter; /******/ }; /******/ /******/ // Object.prototype.hasOwnProperty.call /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; /******/ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ /******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(__webpack_require__.s = 0); /******/ }) /************************************************************************/ /******/ ([ /* 0 */ /***/ (function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(global) {var WIN = global.window; var JQ = WIN.jQuery; // Check if canvas is available in the browser (as Modernizr does) var HAS_CANVAS = function () { var el = WIN.document.createElement('canvas'); return !!(el.getContext && el.getContext('2d')); }(); var is_img_el = function is_img_el(x) { return x && typeof x.tagName === 'string' && x.tagName.toUpperCase() === 'IMG'; }; // Wrapper for the original QR code generator. var create_qrcode = function create_qrcode(text, level, version, quiet) { var qr = {}; var qr_gen = __webpack_require__(2); qr_gen.stringToBytes = qr_gen.stringToBytesFuncs['UTF-8']; var vqr = qr_gen(version, level); vqr.addData(text); vqr.make(); quiet = quiet || 0; var module_count = vqr.getModuleCount(); var quiet_module_count = module_count + 2 * quiet; var is_dark = function is_dark(row, col) { row -= quiet; col -= quiet; return row >= 0 && row < module_count && col >= 0 && col < module_count && vqr.isDark(row, col); }; var add_blank = function add_blank(l, t, r, b) { var prev_is_dark = qr.is_dark; var module_size = 1 / quiet_module_count; qr.is_dark = function (row, col) { var ml = col * module_size; var mt = row * module_size; var mr = ml + module_size; var mb = mt + module_size; return prev_is_dark(row, col) && (l > mr || ml > r || t > mb || mt > b); }; }; qr.text = text; qr.level = level; qr.version = version; qr.module_count = quiet_module_count; qr.is_dark = is_dark; qr.add_blank = add_blank; return qr; }; // Returns a minimal QR code for the given text starting with version `min_ver`. // Returns `undefined` if `text` is too long to be encoded in `max_ver`. var create_min_qrcode = function create_min_qrcode(text, level, min_ver, max_ver, quiet) { min_ver = Math.max(1, min_ver || 1); max_ver = Math.min(40, max_ver || 40); for (var ver = min_ver; ver <= max_ver; ver += 1) { try { return create_qrcode(text, level, ver, quiet); } catch (err) { /* empty */ } } return undefined; }; var draw_background_label = function draw_background_label(qr, context, settings) { var size = settings.size; var font = 'bold ' + settings.mSize * size + 'px ' + settings.fontname; var ctx = JQ('<canvas/>')[0].getContext('2d'); ctx.font = font; var w = ctx.measureText(settings.label).width; var sh = settings.mSize; var sw = w / size; var sl = (1 - sw) * settings.mPosX; var st = (1 - sh) * settings.mPosY; var sr = sl + sw; var sb = st + sh; var pad = 0.01; if (settings.mode === 1) { // Strip qr.add_blank(0, st - pad, size, sb + pad); } else { // Box qr.add_blank(sl - pad, st - pad, sr + pad, sb + pad); } context.fillStyle = settings.fontcolor; context.font = font; context.fillText(settings.label, sl * size, st * size + 0.75 * settings.mSize * size); }; var draw_background_img = function draw_background_img(qr, context, settings) { var size = settings.size; var w = settings.image.naturalWidth || 1; var h = settings.image.naturalHeight || 1; var sh = settings.mSize; var sw = sh * w / h; var sl = (1 - sw) * settings.mPosX; var st = (1 - sh) * settings.mPosY; var sr = sl + sw; var sb = st + sh; var pad = 0.01; if (settings.mode === 3) { // Strip qr.add_blank(0, st - pad, size, sb + pad); } else { // Box qr.add_blank(sl - pad, st - pad, sr + pad, sb + pad); } context.drawImage(settings.image, sl * size, st * size, sw * size, sh * size); }; var draw_background = function draw_background(qr, context, settings) { if (is_img_el(settings.background)) { context.drawImage(settings.background, 0, 0, settings.size, settings.size); } else if (settings.background) { context.fillStyle = settings.background; context.fillRect(settings.left, settings.top, settings.size, settings.size); } var mode = settings.mode; if (mode === 1 || mode === 2) { draw_background_label(qr, context, settings); } else if (is_img_el(settings.image) && (mode === 3 || mode === 4)) { draw_background_img(qr, context, settings); } }; var draw_modules_default = function draw_modules_default(qr, context, settings, left, top, width, row, col) { if (qr.is_dark(row, col)) { context.rect(left, top, width, width); } }; var draw_modules_rounded_dark = function draw_modules_rounded_dark(ctx, l, t, r, b, rad, nw, ne, se, sw) { if (nw) { ctx.moveTo(l + rad, t); } else { ctx.moveTo(l, t); } if (ne) { ctx.lineTo(r - rad, t); ctx.arcTo(r, t, r, b, rad); } else { ctx.lineTo(r, t); } if (se) { ctx.lineTo(r, b - rad); ctx.arcTo(r, b, l, b, rad); } else { ctx.lineTo(r, b); } if (sw) { ctx.lineTo(l + rad, b); ctx.arcTo(l, b, l, t, rad); } else { ctx.lineTo(l, b); } if (nw) { ctx.lineTo(l, t + rad); ctx.arcTo(l, t, r, t, rad); } else { ctx.lineTo(l, t); } }; var draw_modules_rounded_light = function draw_modules_rounded_light(ctx, l, t, r, b, rad, nw, ne, se, sw) { if (nw) { ctx.moveTo(l + rad, t); ctx.lineTo(l, t); ctx.lineTo(l, t + rad); ctx.arcTo(l, t, l + rad, t, rad); } if (ne) { ctx.moveTo(r - rad, t); ctx.lineTo(r, t); ctx.lineTo(r, t + rad); ctx.arcTo(r, t, r - rad, t, rad); } if (se) { ctx.moveTo(r - rad, b); ctx.lineTo(r, b); ctx.lineTo(r, b - rad); ctx.arcTo(r, b, r - rad, b, rad); } if (sw) { ctx.moveTo(l + rad, b); ctx.lineTo(l, b); ctx.lineTo(l, b - rad); ctx.arcTo(l, b, l + rad, b, rad); } }; var draw_modules_rounded = function draw_modules_rounded(qr, context, settings, left, top, width, row, col) { var is_dark = qr.is_dark; var right = left + width; var bottom = top + width; var radius = settings.radius * width; var rowT = row - 1; var rowB = row + 1; var colL = col - 1; var colR = col + 1; var center = is_dark(row, col); var northwest = is_dark(rowT, colL); var north = is_dark(rowT, col); var northeast = is_dark(rowT, colR); var east = is_dark(row, colR); var southeast = is_dark(rowB, colR); var south = is_dark(rowB, col); var southwest = is_dark(rowB, colL); var west = is_dark(row, colL); if (center) { draw_modules_rounded_dark(context, left, top, right, bottom, radius, !north && !west, !north && !east, !south && !east, !south && !west); } else { draw_modules_rounded_light(context, left, top, right, bottom, radius, north && west && northwest, north && east && northeast, south && east && southeast, south && west && southwest); } }; var draw_modules = function draw_modules(qr, context, settings) { var module_count = qr.module_count; var module_size = settings.size / module_count; var fn = draw_modules_default; var row; var col; if (settings.radius > 0 && settings.radius <= 0.5) { fn = draw_modules_rounded; } context.beginPath(); for (row = 0; row < module_count; row += 1) { for (col = 0; col < module_count; col += 1) { var l = settings.left + col * module_size; var t = settings.top + row * module_size; var w = module_size; fn(qr, context, settings, l, t, w, row, col); } } if (is_img_el(settings.fill)) { context.strokeStyle = 'rgba(0,0,0,0.5)'; context.lineWidth = 2; context.stroke(); var prev = context.globalCompositeOperation; context.globalCompositeOperation = 'destination-out'; context.fill(); context.globalCompositeOperation = prev; context.clip(); context.drawImage(settings.fill, 0, 0, settings.size, settings.size); context.restore(); } else { context.fillStyle = settings.fill; context.fill(); } }; // Draws QR code to the given `canvas` and returns it. var draw_on_canvas = function draw_on_canvas(canvas, settings) { var qr = create_min_qrcode(settings.text, settings.ecLevel, settings.minVersion, settings.maxVersion, settings.quiet); if (!qr) { return null; } var $canvas = JQ(canvas).data('qrcode', qr); var context = $canvas[0].getContext('2d'); draw_background(qr, context, settings); draw_modules(qr, context, settings); return $canvas; }; // Returns a `canvas` element representing the QR code for the given settings. var create_canvas = function create_canvas(settings) { var $canvas = JQ('<canvas/>').attr('width', settings.size).attr('height', settings.size); return draw_on_canvas($canvas, settings); }; // Returns an `image` element representing the QR code for the given settings. var create_img = function create_img(settings) { return JQ('<img/>').attr('src', create_canvas(settings)[0].toDataURL('image/png')); }; // Returns a `div` element representing the QR code for the given settings. var create_div = function create_div(settings) { var qr = create_min_qrcode(settings.text, settings.ecLevel, settings.minVersion, settings.maxVersion, settings.quiet); if (!qr) { return null; } // some shortcuts to improve compression var settings_size = settings.size; var settings_bgColor = settings.background; var math_floor = Math.floor; var module_count = qr.module_count; var module_size = math_floor(settings_size / module_count); var offset = math_floor(0.5 * (settings_size - module_size * module_count)); var row; var col; var container_css = { position: 'relative', left: 0, top: 0, padding: 0, margin: 0, width: settings_size, height: settings_size }; var dark_css = { position: 'absolute', padding: 0, margin: 0, width: module_size, height: module_size, 'background-color': settings.fill }; var $div = JQ('<div/>').data('qrcode', qr).css(container_css); if (settings_bgColor) { $div.css('background-color', settings_bgColor); } for (row = 0; row < module_count; row += 1) { for (col = 0; col < module_count; col += 1) { if (qr.is_dark(row, col)) { JQ('<div/>').css(dark_css).css({ left: offset + col * module_size, top: offset + row * module_size }).appendTo($div); } } } return $div; }; var create_html = function create_html(settings) { if (HAS_CANVAS && settings.render === 'canvas') { return create_canvas(settings); } else if (HAS_CANVAS && settings.render === 'image') { return create_img(settings); } return create_div(settings); }; var DEFAULTS = { // render method: `'canvas'`, `'image'` or `'div'` render: 'canvas', // version range somewhere in 1 .. 40 minVersion: 1, maxVersion: 40, // error correction level: `'L'`, `'M'`, `'Q'` or `'H'` ecLevel: 'L', // offset in pixel if drawn onto existing canvas left: 0, top: 0, // size in pixel size: 200, // code color or image element fill: '#000', // background color or image element, `null` for transparent background background: '#fff', // content text: 'no text', // corner radius relative to module width: 0.0 .. 0.5 radius: 0, // quiet zone in modules quiet: 0, // modes // 0: normal // 1: label strip // 2: label box // 3: image strip // 4: image box mode: 0, mSize: 0.1, mPosX: 0.5, mPosY: 0.5, label: 'no label', fontname: 'sans', fontcolor: '#000', image: null }; JQ.fn.qrcode = module.exports = function main(options) { var settings = JQ.extend({}, DEFAULTS, options); return this.each(function (idx, el) { if (el.nodeName.toLowerCase() === 'canvas') { draw_on_canvas(el, settings); } else { JQ(el).append(create_html(settings)); } }); }; /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(1))) /***/ }), /* 1 */ /***/ (function(module, exports) { var g; // This works in non-strict mode g = (function() { return this; })(); try { // This works if eval is allowed (see CSP) g = g || new Function("return this")(); } catch (e) { // This works if the window reference is available if (typeof window === "object") g = window; } // g can still be undefined, but nothing to do about it... // We return undefined, instead of nothing here, so it's // easier to handle this case. if(!global) { ...} module.exports = g; /***/ }), /* 2 */ /***/ (function(module, exports, __webpack_require__) { var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;//--------------------------------------------------------------------- // // QR Code Generator for JavaScript // // Copyright (c) 2009 Kazuhiko Arase // // URL: http://www.d-project.com/ // // Licensed under the MIT license: // http://www.opensource.org/licenses/mit-license.php // // The word 'QR Code' is registered trademark of // DENSO WAVE INCORPORATED // http://www.denso-wave.com/qrcode/faqpatent-e.html // //--------------------------------------------------------------------- var qrcode = function() { //--------------------------------------------------------------------- // qrcode //--------------------------------------------------------------------- /** * qrcode * @param typeNumber 1 to 40 * @param errorCorrectionLevel 'L','M','Q','H' */ var qrcode = function(typeNumber, errorCorrectionLevel) { var PAD0 = 0xEC; var PAD1 = 0x11; var _typeNumber = typeNumber; var _errorCorrectionLevel = QRErrorCorrectionLevel[errorCorrectionLevel]; var _modules = null; var _moduleCount = 0; var _dataCache = null; var _dataList = []; var _this = {}; var makeImpl = function(test, maskPattern) { _moduleCount = _typeNumber * 4 + 17; _modules = function(moduleCount) { var modules = new Array(moduleCount); for (var row = 0; row < moduleCount; row += 1) { modules[row] = new Array(moduleCount); for (var col = 0; col < moduleCount; col += 1) { modules[row][col] = null; } } return modules; }(_moduleCount); setupPositionProbePattern(0, 0); setupPositionProbePattern(_moduleCount - 7, 0); setupPositionProbePattern(0, _moduleCount - 7); setupPositionAdjustPattern(); setupTimingPattern(); setupTypeInfo(test, maskPattern); if (_typeNumber >= 7) { setupTypeNumber(test); } if (_dataCache == null) { _dataCache = createData(_typeNumber, _errorCorrectionLevel, _dataList); } mapData(_dataCache, maskPattern); }; var setupPositionProbePattern = function(row, col) { for (var r = -1; r <= 7; r += 1) { if (row + r <= -1 || _moduleCount <= row + r) continue; for (var c = -1; c <= 7; c += 1) { if (col + c <= -1 || _moduleCount <= col + c) continue; if ( (0 <= r && r <= 6 && (c == 0 || c == 6) ) || (0 <= c && c <= 6 && (r == 0 || r == 6) ) || (2 <= r && r <= 4 && 2 <= c && c <= 4) ) { _modules[row + r][col + c] = true; } else { _modules[row + r][col + c] = false; } } } }; var getBestMaskPattern = function() { var minLostPoint = 0; var pattern = 0; for (var i = 0; i < 8; i += 1) { makeImpl(true, i); var lostPoint = QRUtil.getLostPoint(_this); if (i == 0 || minLostPoint > lostPoint) { minLostPoint = lostPoint; pattern = i; } } return pattern; }; var setupTimingPattern = function() { for (var r = 8; r < _moduleCount - 8; r += 1) { if (_modules[r][6] != null) { continue; } _modules[r][6] = (r % 2 == 0); } for (var c = 8; c < _moduleCount - 8; c += 1) { if (_modules[6][c] != null) { continue; } _modules[6][c] = (c % 2 == 0); } }; var setupPositionAdjustPattern = function() { var pos = QRUtil.getPatternPosition(_typeNumber); for (var i = 0; i < pos.length; i += 1) { for (var j = 0; j < pos.length; j += 1) { var row = pos[i]; var col = pos[j]; if (_modules[row][col] != null) { continue; } for (var r = -2; r <= 2; r += 1) { for (var c = -2; c <= 2; c += 1) { if (r == -2 || r == 2 || c == -2 || c == 2 || (r == 0 && c == 0) ) { _modules[row + r][col + c] = true; } else { _modules[row + r][col + c] = false; } } } } } }; var setupTypeNumber = function(test) { var bits = QRUtil.getBCHTypeNumber(_typeNumber); for (var i = 0; i < 18; i += 1) { var mod = (!test && ( (bits >> i) & 1) == 1); _modules[Math.floor(i / 3)][i % 3 + _moduleCount - 8 - 3] = mod; } for (var i = 0; i < 18; i += 1) { var mod = (!test && ( (bits >> i) & 1) == 1); _modules[i % 3 + _moduleCount - 8 - 3][Math.floor(i / 3)] = mod; } }; var setupTypeInfo = function(test, maskPattern) { var data = (_errorCorrectionLevel << 3) | maskPattern; var bits = QRUtil.getBCHTypeInfo(data); // vertical for (var i = 0; i < 15; i += 1) { var mod = (!test && ( (bits >> i) & 1) == 1); if (i < 6) { _modules[i][8] = mod; } else if (i < 8) { _modules[i + 1][8] = mod; } else { _modules[_moduleCount - 15 + i][8] = mod; } } // horizontal for (var i = 0; i < 15; i += 1) { var mod = (!test && ( (bits >> i) & 1) == 1); if (i < 8) { _modules[8][_moduleCount - i - 1] = mod; } else if (i < 9) { _modules[8][15 - i - 1 + 1] = mod; } else { _modules[8][15 - i - 1] = mod; } } // fixed module _modules[_moduleCount - 8][8] = (!test); }; var mapData = function(data, maskPattern) { var inc = -1; var row = _moduleCount - 1; var bitIndex = 7; var byteIndex = 0; var maskFunc = QRUtil.getMaskFunction(maskPattern); for (var col = _moduleCount - 1; col > 0; col -= 2) { if (col == 6) col -= 1; while (true) { for (var c = 0; c < 2; c += 1) { if (_modules[row][col - c] == null) { var dark = false; if (byteIndex < data.length) { dark = ( ( (data[byteIndex] >>> bitIndex) & 1) == 1); } var mask = maskFunc(row, col - c); if (mask) { dark = !dark; } _modules[row][col - c] = dark; bitIndex -= 1; if (bitIndex == -1) { byteIndex += 1; bitIndex = 7; } } } row += inc; if (row < 0 || _moduleCount <= row) { row -= inc; inc = -inc; break; } } } }; var createBytes = function(buffer, rsBlocks) { var offset = 0; var maxDcCount = 0; var maxEcCount = 0; var dcdata = new Array(rsBlocks.length); var ecdata = new Array(rsBlocks.length); for (var r = 0; r < rsBlocks.length; r += 1) { var dcCount = rsBlocks[r].dataCount; var ecCount = rsBlocks[r].totalCount - dcCount; maxDcCount = Math.max(maxDcCount, dcCount); maxEcCount = Math.max(maxEcCount, ecCount); dcdata[r] = new Array(dcCount); for (var i = 0; i < dcdata[r].length; i += 1) { dcdata[r][i] = 0xff & buffer.getBuffer()[i + offset]; } offset += dcCount; var rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount); var rawPoly = qrPolynomial(dcdata[r], rsPoly.getLength() - 1); var modPoly = rawPoly.mod(rsPoly); ecdata[r] = new Array(rsPoly.getLength() - 1); for (var i = 0; i < ecdata[r].length; i += 1) { var modIndex = i + modPoly.getLength() - ecdata[r].length; ecdata[r][i] = (modIndex >= 0)? modPoly.getAt(modIndex) : 0; } } var totalCodeCount = 0; for (var i = 0; i < rsBlocks.length; i += 1) { totalCodeCount += rsBlocks[i].totalCount; } var data = new Array(totalCodeCount); var index = 0; for (var i = 0; i < maxDcCount; i += 1) { for (var r = 0; r < rsBlocks.length; r += 1) { if (i < dcdata[r].length) { data[index] = dcdata[r][i]; index += 1; } } } for (var i = 0; i < maxEcCount; i += 1) { for (var r = 0; r < rsBlocks.length; r += 1) { if (i < ecdata[r].length) { data[index] = ecdata[r][i]; index += 1; } } } return data; }; var createData = function(typeNumber, errorCorrectionLevel, dataList) { var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, errorCorrectionLevel); var buffer = qrBitBuffer(); for (var i = 0; i < dataList.length; i += 1) { var data = dataList[i]; buffer.put(data.getMode(), 4); buffer.put(data.getLength(), QRUtil.getLengthInBits(data.getMode(), typeNumber) ); data.write(buffer); } // calc num max data. var totalDataCount = 0; for (var i = 0; i < rsBlocks.length; i += 1) { totalDataCount += rsBlocks[i].dataCount; } if (buffer.getLengthInBits() > totalDataCount * 8) { throw 'code length overflow. (' + buffer.getLengthInBits() + '>' + totalDataCount * 8 + ')'; } // end code if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) { buffer.put(0, 4); } // padding while (buffer.getLengthInBits() % 8 != 0) { buffer.putBit(false); } // padding while (true) { if (buffer.getLengthInBits() >= totalDataCount * 8) { break; } buffer.put(PAD0, 8); if (buffer.getLengthInBits() >= totalDataCount * 8) { break; } buffer.put(PAD1, 8); } return createBytes(buffer, rsBlocks); }; _this.addData = function(data, mode) { mode = mode || 'Byte'; var newData = null; switch(mode) { case 'Numeric' : newData = qrNumber(data); break; case 'Alphanumeric' : newData = qrAlphaNum(data); break; case 'Byte' : newData = qr8BitByte(data); break; case 'Kanji' : newData = qrKanji(data); break; default : throw 'mode:' + mode; } _dataList.push(newData); _dataCache = null; }; _this.isDark = function(row, col) { if (row < 0 || _moduleCount <= row || col < 0 || _moduleCount <= col) { throw row + ',' + col; } return _modules[row][col]; }; _this.getModuleCount = function() { return _moduleCount; }; _this.make = function() { if (_typeNumber < 1) { var typeNumber = 1; for (; typeNumber < 40; typeNumber++) { var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, _errorCorrectionLevel); var buffer = qrBitBuffer(); for (var i = 0; i < _dataList.length; i++) { var data = _dataList[i]; buffer.put(data.getMode(), 4); buffer.put(data.getLength(), QRUtil.getLengthInBits(data.getMode(), typeNumber) ); data.write(buffer); } var totalDataCount = 0; for (var i = 0; i < rsBlocks.length; i++) { totalDataCount += rsBlocks[i].dataCount; } if (buffer.getLengthInBits() <= totalDataCount * 8) { break; } } _typeNumber = typeNumber; } makeImpl(false, getBestMaskPattern() ); }; _this.createTableTag = function(cellSize, margin) { cellSize = cellSize || 2; margin = (typeof margin == 'undefined')? cellSize * 4 : margin; var qrHtml = ''; qrHtml += '<table style="'; qrHtml += ' border-width: 0px; border-style: none;'; qrHtml += ' border-collapse: collapse;'; qrHtml += ' padding: 0px; margin: ' + margin + 'px;'; qrHtml += '">'; qrHtml += '<tbody>'; for (var r = 0; r < _this.getModuleCount(); r += 1) { qrHtml += '<tr>'; for (var c = 0; c < _this.getModuleCount(); c += 1) { qrHtml += '<td style="'; qrHtml += ' border-width: 0px; border-style: none;'; qrHtml += ' border-collapse: collapse;'; qrHtml += ' padding: 0px; margin: 0px;'; qrHtml += ' width: ' + cellSize + 'px;'; qrHtml += ' height: ' + cellSize + 'px;'; qrHtml += ' background-color: '; qrHtml += _this.isDark(r, c)? '#000000' : '#ffffff'; qrHtml += ';'; qrHtml += '"/>'; } qrHtml += '</tr>'; } qrHtml += '</tbody>'; qrHtml += '</table>'; return qrHtml; }; _this.createSvgTag = function(cellSize, margin) { var opts = {}; if (typeof arguments[0] == 'object') { // Called by options. opts = arguments[0]; // overwrite cellSize and margin. cellSize = opts.cellSize; margin = opts.margin; } cellSize = cellSize || 2; margin = (typeof margin == 'undefined')? cellSize * 4 : margin; var size = _this.getModuleCount() * cellSize + margin * 2; var c, mc, r, mr, qrSvg='', rect; rect = 'l' + cellSize + ',0 0,' + cellSize + ' -' + cellSize + ',0 0,-' + cellSize + 'z '; qrSvg += '<svg version="1.1" xmlns="http://www.w3.org/2000/svg"'; qrSvg += !opts.scalable ? ' width="' + size + 'px" height="' + size + 'px"' : ''; qrSvg += ' viewBox="0 0 ' + size + ' ' + size + '" '; qrSvg += ' preserveAspectRatio="xMinYMin meet">'; qrSvg += '<rect width="100%" height="100%" fill="white" cx="0" cy="0"/>'; qrSvg += '<path d="'; for (r = 0; r < _this.getModuleCount(); r += 1) { mr = r * cellSize + margin; for (c = 0; c < _this.getModuleCount(); c += 1) { if (_this.isDark(r, c) ) { mc = c*cellSize+margin; qrSvg += 'M' + mc + ',' + mr + rect; } } } qrSvg += '" stroke="transparent" fill="black"/>'; qrSvg += '</svg>'; return qrSvg; }; _this.createDataURL = function(cellSize, margin) { cellSize = cellSize || 2; margin = (typeof margin == 'undefined')? cellSize * 4 : margin; var size = _this.getModuleCount() * cellSize + margin * 2; var min = margin; var max = size - margin; return createDataURL(size, size, function(x, y) { if (min <= x && x < max && min <= y && y < max) { var c = Math.floor( (x - min) / cellSize); var r = Math.floor( (y - min) / cellSize); return _this.isDark(r, c)? 0 : 1; } else { return 1; } } ); }; _this.createImgTag = function(cellSize, margin, alt) { cellSize = cellSize || 2; margin = (typeof margin == 'undefined')? cellSize * 4 : margin; var size = _this.getModuleCount() * cellSize + margin * 2; var img = ''; img += '<img'; img += '\u0020src="'; img += _this.createDataURL(cellSize, margin); img += '"'; img += '\u0020width="'; img += size; img += '"'; img += '\u0020height="'; img += size; img += '"'; if (alt) { img += '\u0020alt="'; img += alt; img += '"'; } img += '/>'; return img; }; var _createHalfASCII = function(margin) { var cellSize = 1; margin = (typeof margin == 'undefined')? cellSize * 2 : margin; var size = _this.getModuleCount() * cellSize + margin * 2; var min = margin; var max = size - margin; var y, x, r1, r2, p; var blocks = { '██': '█', '█ ': '▀', ' █': '▄', ' ': ' ' }; var blocksLastLineNoMargin = { '██': '▀', '█ ': '▀', ' █': ' ', ' ': ' ' }; var ascii = ''; for (y = 0; y < size; y += 2) { r1 = Math.floor((y - min) / cellSize); r2 = Math.floor((y + 1 - min) / cellSize); for (x = 0; x < size; x += 1) { p = '█'; if (min <= x && x < max && min <= y && y < max && _this.isDark(r1, Math.floor((x - min) / cellSize))) { p = ' '; } if (min <= x && x < max && min <= y+1 && y+1 < max && _this.isDark(r2, Math.floor((x - min) / cellSize))) { p += ' '; } else { p += '█'; } // Output 2 characters per pixel, to create full square. 1 character per pixels gives only half width of square. ascii += (margin < 1 && y+1 >= max) ? blocksLastLineNoMargin[p] : blocks[p]; } ascii += '\n'; } if (size % 2 && margin > 0) { return ascii.substring(0, ascii.length - size - 1) + Array(size+1).join('▀'); } return ascii.substring(0, ascii.length-1); }; _this.createASCII = function(cellSize, margin) { cellSize = cellSize || 1; if (cellSize < 2) { return _createHalfASCII(margin); } cellSize -= 1; margin = (typeof margin == 'undefined')? cellSize * 2 : margin; var size = _this.getModuleCount() * cellSize + margin * 2; var min = margin; var max = size - margin; var y, x, r, p; var white = Array(cellSize+1).join('██'); var black = Array(cellSize+1).join(' '); var ascii = ''; var line = ''; for (y = 0; y < size; y += 1) { r = Math.floor( (y - min) / cellSize); line = ''; for (x = 0; x < size; x += 1) { p = 1; if (min <= x && x < max && min <= y && y < max && _this.isDark(r, Math.floor((x - min) / cellSize))) { p = 0; } // Output 2 characters per pixel, to create full square. 1 character per pixels gives only half width of square. line += p ? white : black; } for (r = 0; r < cellSize; r += 1) { ascii += line + '\n'; } } return ascii.substring(0, ascii.length-1); }; _this.renderTo2dContext = function(context, cellSize) { cellSize = cellSize || 2; var length = _this.getModuleCount(); for (var row = 0; row < length; row++) { for (var col = 0; col < length; col++) { context.fillStyle = _this.isDark(row, col) ? 'black' : 'white'; context.fillRect(row * cellSize, col * cellSize, cellSize, cellSize); } } } return _this; }; //--------------------------------------------------------------------- // qrcode.stringToBytes //--------------------------------------------------------------------- qrcode.stringToBytesFuncs = { 'default' : function(s) { var bytes = []; for (var i = 0; i < s.length; i += 1) { var c = s.charCodeAt(i); bytes.push(c & 0xff); } return bytes; } }; qrcode.stringToBytes = qrcode.stringToBytesFuncs['default']; //--------------------------------------------------------------------- // qrcode.createStringToBytes //--------------------------------------------------------------------- /** * @param unicodeData base64 string of byte array. * [16bit Unicode],[16bit Bytes], ... * @param numChars */ qrcode.createStringToBytes = function(unicodeData, numChars) { // create conversion map. var unicodeMap = function() { var bin = base64DecodeInputStream(unicodeData); var read = function() { var b = bin.read(); if (b == -1) throw 'eof'; return b; }; var count = 0; var unicodeMap = {}; while (true) { var b0 = bin.read(); if (b0 == -1) break; var b1 = read(); var b2 = read(); var b3 = read(); var k = String.fromCharCode( (b0 << 8) | b1); var v = (b2 << 8) | b3; unicodeMap[k] = v; count += 1; } if (count != numChars) { throw count + ' != ' + numChars; } return unicodeMap; }(); var unknownChar = '?'.charCodeAt(0); return function(s) { var bytes = []; for (var i = 0; i < s.length; i += 1) { var c = s.charCodeAt(i); if (c < 128) { bytes.push(c); } else { var b = unicodeMap[s.charAt(i)]; if (typeof b == 'number') { if ( (b & 0xff) == b) { // 1byte bytes.push(b); } else { // 2bytes bytes.push(b >>> 8); bytes.push(b & 0xff); } } else { bytes.push(unknownChar); } } } return bytes; }; }; //--------------------------------------------------------------------- // QRMode //--------------------------------------------------------------------- var QRMode = { MODE_NUMBER : 1 << 0, MODE_ALPHA_NUM : 1 << 1, MODE_8BIT_BYTE : 1 << 2, MODE_KANJI : 1 << 3 }; //--------------------------------------------------------------------- // QRErrorCorrectionLevel //--------------------------------------------------------------------- var QRErrorCorrectionLevel = { L : 1, M : 0, Q : 3, H : 2 }; //--------------------------------------------------------------------- // QRMaskPattern //--------------------------------------------------------------------- var QRMaskPattern = { PATTERN000 : 0, PATTERN001 : 1, PATTERN010 : 2, PATTERN011 : 3, PATTERN100 : 4, PATTERN101 : 5, PATTERN110 : 6, PATTERN111 : 7 }; //--------------------------------------------------------------------- // QRUtil //--------------------------------------------------------------------- var QRUtil = function() { var PATTERN_POSITION_TABLE = [ [], [6, 18], [6, 22], [6, 26], [6, 30], [6, 34], [6, 22, 38], [6, 24, 42], [6, 26, 46], [6, 28, 50], [6, 30, 54], [6, 32, 58], [6, 34, 62], [6, 26, 46, 66], [6, 26, 48, 70], [6, 26, 50, 74], [6, 30, 54, 78], [6, 30, 56, 82], [6, 30, 58, 86], [6, 34, 62, 90], [6, 28, 50, 72, 94], [6, 26, 50, 74, 98], [6, 30, 54, 78, 102], [6, 28, 54, 80, 106], [6, 32, 58, 84, 110], [6, 30, 58, 86, 114], [6, 34, 62, 90, 118], [6, 26, 50, 74, 98, 122], [6, 30, 54, 78, 102, 126], [6, 26, 52, 78, 104, 130], [6, 30, 56, 82, 108, 134], [6, 34, 60, 86, 112, 138], [6, 30, 58, 86, 114, 142], [6, 34, 62, 90, 118, 146], [6, 30, 54, 78, 102, 126, 150], [6, 24, 50, 76, 102, 128, 154], [6, 28, 54, 80, 106, 132, 158], [6, 32, 58, 84, 110, 136, 162], [6, 26, 54, 82, 110, 138, 166], [6, 30, 58, 86, 114, 142, 170] ]; var G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0); var G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0); var G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1); var _this = {}; var getBCHDigit = function(data) { var digit = 0; while (data != 0) { digit += 1; data >>>= 1; } return digit; }; _this.getBCHTypeInfo = function(data) { var d = data << 10; while (getBCHDigit(d) - getBCHDigit(G15) >= 0) { d ^= (G15 << (getBCHDigit(d) - getBCHDigit(G15) ) ); } return ( (data << 10) | d) ^ G15_MASK; }; _this.getBCHTypeNumber = function(data) { var d = data << 12; while (getBCHDigit(d) - getBCHDigit(G18) >= 0) { d ^= (G18 << (getBCHDigit(d) - getBCHDigit(G18) ) ); } return (data << 12) | d; }; _this.getPatternPosition = function(typeNumber) { return PATTERN_POSITION_TABLE[typeNumber - 1]; }; _this.getMaskFunction = function(maskPattern) { switch (maskPattern) { case QRMaskPattern.PATTERN000 : return function(i, j) { return (i + j) % 2 == 0; }; case QRMaskPattern.PATTERN001 : return function(i, j) { return i % 2 == 0; }; case QRMaskPattern.PATTERN010 : return function(i, j) { return j % 3 == 0; }; case QRMaskPattern.PATTERN011 : return function(i, j) { return (i + j) % 3 == 0; }; case QRMaskPattern.PATTERN100 : return function(i, j) { return (Math.floor(i / 2) + Math.floor(j / 3) ) % 2 == 0; }; case QRMaskPattern.PATTERN101 : return function(i, j) { return (i * j) % 2 + (i * j) % 3 == 0; }; case QRMaskPattern.PATTERN110 : return function(i, j) { return ( (i * j) % 2 + (i * j) % 3) % 2 == 0; }; case QRMaskPattern.PATTERN111 : return function(i, j) { return ( (i * j) % 3 + (i + j) % 2) % 2 == 0; }; default : throw 'bad maskPattern:' + maskPattern; } }; _this.getErrorCorrectPolynomial = function(errorCorrectLength) { var a = qrPolynomial([1], 0); for (var i = 0; i < errorCorrectLength; i += 1) { a = a.multiply(qrPolynomial([1, QRMath.gexp(i)], 0) ); } return a; }; _this.getLengthInBits = function(mode, type) { if (1 <= type && type < 10) { // 1 - 9 switch(mode) { case QRMode.MODE_NUMBER : return 10; case QRMode.MODE_ALPHA_NUM : return 9; case QRMode.MODE_8BIT_BYTE : return 8; case QRMode.MODE_KANJI : return 8; default : throw 'mode:' + mode; } } else if (type < 27) { // 10 - 26 switch(mode) { case QRMode.MODE_NUMBER : return 12; case QRMode.MODE_ALPHA_NUM : return 11; case QRMode.MODE_8BIT_BYTE : return 16; case QRMode.MODE_KANJI : return 10; default : throw 'mode:' + mode; } } else if (type < 41) { // 27 - 40 switch(mode) { case QRMode.MODE_NUMBER : return 14; case QRMode.MODE_ALPHA_NUM : return 13; case QRMode.MODE_8BIT_BYTE : return 16; case QRMode.MODE_KANJI : return 12; default : throw 'mode:' + mode; } } else { throw 'type:' + type; } }; _this.getLostPoint = function(qrcode) { var moduleCount = qrcode.getModuleCount(); var lostPoint = 0; // LEVEL1 for (var row = 0; row < moduleCount; row += 1) { for (var col = 0; col < moduleCount; col += 1) { var sameCount = 0; var dark = qrcode.isDark(row, col); for (var r = -1; r <= 1; r += 1) { if (row + r < 0 || moduleCount <= row + r) { continue; } for (var c = -1; c <= 1; c += 1) { if (col + c < 0 || moduleCount <= col + c) { continue; } if (r == 0 && c == 0) { continue; } if (dark == qrcode.isDark(row + r, col + c) ) { sameCount += 1; } } } if (sameCount > 5) { lostPoint += (3 + sameCount - 5); } } }; // LEVEL2 for (var row = 0; row < moduleCount - 1; row += 1) { for (var col = 0; col < moduleCount - 1; col += 1) { var count = 0; if (qrcode.isDark(row, col) ) count += 1; if (qrcode.isDark(row + 1, col) ) count += 1; if (qrcode.isDark(row, col + 1) ) count += 1; if (qrcode.isDark(row + 1, col + 1) ) count += 1; if (count == 0 || count == 4) { lostPoint += 3; } } } // LEVEL3 for (var row = 0; row < moduleCount; row += 1) { for (var col = 0; col < moduleCount - 6; col += 1) { if (qrcode.isDark(row, col) && !qrcode.isDark(row, col + 1) && qrcode.isDark(row, col + 2) && qrcode.isDark(row, col + 3) && qrcode.isDark(row, col + 4) && !qrcode.isDark(row, col + 5) && qrcode.isDark(row, col + 6) ) { lostPoint += 40; } } } for (var col = 0; col < moduleCount; col += 1) { for (var row = 0; row < moduleCount - 6; row += 1) { if (qrcode.isDark(row, col) && !qrcode.isDark(row + 1, col) && qrcode.isDark(row + 2, col) && qrcode.isDark(row + 3, col) && qrcode.isDark(row + 4, col) && !qrcode.isDark(row + 5, col) && qrcode.isDark(row + 6, col) ) { lostPoint += 40; } } } // LEVEL4 var darkCount = 0; for (var col = 0; col < moduleCount; col += 1) { for (var row = 0; row < moduleCount; row += 1) { if (qrcode.isDark(row, col) ) { darkCount += 1; } } } var ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5; lostPoint += ratio * 10; return lostPoint; }; return _this; }(); //--------------------------------------------------------------------- // QRMath //--------------------------------------------------------------------- var QRMath = function() { var EXP_TABLE = new Array(256); var LOG_TABLE = new Array(256); // initialize tables for (var i = 0; i < 8; i += 1) { EXP_TABLE[i] = 1 << i; } for (var i = 8; i < 256; i += 1) { EXP_TABLE[i] = EXP_TABLE[i - 4] ^ EXP_TABLE[i - 5] ^ EXP_TABLE[i - 6] ^ EXP_TABLE[i - 8]; } for (var i = 0; i < 255; i += 1) { LOG_TABLE[EXP_TABLE[i] ] = i; } var _this = {}; _this.glog = function(n) { if (n < 1) { throw 'glog(' + n + ')'; } return LOG_TABLE[n]; }; _this.gexp = function(n) { while (n < 0) { n += 255; } while (n >= 256) { n -= 255; } return EXP_TABLE[n]; }; return _this; }(); //--------------------------------------------------------------------- // qrPolynomial //--------------------------------------------------------------------- function qrPolynomial(num, shift) { if (typeof num.length == 'undefined') { throw num.length + '/' + shift; } var _num = function() { var offset = 0; while (offset < num.length && num[offset] == 0) { offset += 1; } var _num = new Array(num.length - offset + shift); for (var i = 0; i < num.length - offset; i += 1) { _num[i] = num[i + offset]; } return _num; }(); var _this = {}; _this.getAt = function(index) { return _num[index]; }; _this.getLength = function() { return _num.length; }; _this.multiply = function(e) { var num = new Array(_this.getLength() + e.getLength() - 1); for (var i = 0; i < _this.getLength(); i += 1) { for (var j = 0; j < e.getLength(); j += 1) { num[i + j] ^= QRMath.gexp(QRMath.glog(_this.getAt(i) ) + QRMath.glog(e.getAt(j) ) ); } } return qrPolynomial(num, 0); }; _this.mod = function(e) { if (_this.getLength() - e.getLength() < 0) { return _this; } var ratio = QRMath.glog(_this.getAt(0) ) - QRMath.glog(e.getAt(0) ); var num = new Array(_this.getLength() ); for (var i = 0; i < _this.getLength(); i += 1) { num[i] = _this.getAt(i); } for (var i = 0; i < e.getLength(); i += 1) { num[i] ^= QRMath.gexp(QRMath.glog(e.getAt(i) ) + ratio); } // recursive call return qrPolynomial(num, 0).mod(e); }; return _this; }; //--------------------------------------------------------------------- // QRRSBlock //--------------------------------------------------------------------- var QRRSBlock = function() { var RS_BLOCK_TABLE = [ // L // M // Q // H // 1 [1, 26, 19], [1, 26, 16], [1, 26, 13], [1, 26, 9], // 2 [1, 44, 34], [1, 44, 28], [1, 44, 22], [1, 44, 16], // 3 [1, 70, 55], [1, 70, 44], [2, 35, 17], [2, 35, 13], // 4 [1, 100, 80], [2, 50, 32], [2, 50, 24], [4, 25, 9], // 5 [1, 134, 108], [2, 67, 43], [2, 33, 15, 2, 34, 16], [2, 33, 11, 2, 34, 12], // 6 [2, 86, 68], [4, 43, 27], [4, 43, 19], [4, 43, 15], // 7 [2, 98, 78], [4, 49, 31], [2, 32, 14, 4, 33, 15], [4, 39, 13, 1, 40, 14], // 8 [2, 121, 97], [2, 60, 38, 2, 61, 39], [4, 40, 18, 2, 41, 19], [4, 40, 14, 2, 41, 15], // 9 [2, 146, 116], [3, 58, 36, 2, 59, 37], [4, 36, 16, 4, 37, 17], [4, 36, 12, 4, 37, 13], // 10 [2, 86, 68, 2, 87, 69], [4, 69, 43, 1, 70, 44], [6, 43, 19, 2, 44, 20], [6, 43, 15, 2, 44, 16], // 11 [4, 101, 81], [1, 80, 50, 4, 81, 51], [4, 50, 22, 4, 51, 23], [3, 36, 12, 8, 37, 13], // 12 [2, 116, 92, 2, 117, 93], [6, 58, 36, 2, 59, 37], [4, 46, 20, 6, 47, 21], [7, 42, 14, 4, 43, 15], // 13 [4, 133, 107], [8, 59, 37, 1, 60, 38], [8, 44, 20, 4, 45, 21], [12, 33, 11, 4, 34, 12], // 14 [3, 145, 115, 1, 146, 116], [4, 64, 40, 5, 65, 41], [11, 36, 16, 5, 37, 17], [11, 36, 12, 5, 37, 13], // 15 [5, 109, 87, 1, 110, 88], [5, 65, 41, 5, 66, 42], [5, 54, 24, 7, 55, 25], [11, 36, 12, 7, 37, 13], // 16 [5, 122, 98, 1, 123, 99], [7, 73, 45, 3, 74, 46], [15, 43, 19, 2, 44, 20], [3, 45, 15, 13, 46, 16], // 17 [1, 135, 107, 5, 136, 108], [10, 74, 46, 1, 75, 47], [1, 50, 22, 15, 51, 23], [2, 42, 14, 17, 43, 15], // 18 [5, 150, 120, 1, 151, 121], [9, 69, 43, 4, 70, 44], [17, 50, 22, 1, 51, 23], [2, 42, 14, 19, 43, 15], // 19 [3, 141, 113, 4, 142, 114], [3, 70, 44, 11, 71, 45], [17, 47, 21, 4, 48, 22], [9, 39, 13, 16, 40, 14], // 20 [3, 135, 107, 5, 136, 108], [3, 67, 41, 13, 68, 42], [15, 54, 24, 5, 55, 25], [15, 43, 15, 10, 44, 16], // 21 [4, 144, 116, 4, 145, 117], [17, 68, 42], [17, 50, 22, 6, 51, 23], [19, 46, 16, 6, 47, 17], // 22 [2, 139, 111, 7, 140, 112], [17, 74, 46], [7, 54, 24, 16, 55, 25], [34, 37, 13], // 23 [4, 151, 121, 5, 152, 122], [4, 75, 47, 14, 76, 48], [11, 54, 24, 14, 55, 25], [16, 45, 15, 14, 46, 16], // 24 [6, 147, 117, 4, 148, 118], [6, 73, 45, 14, 74, 46], [11, 54, 24, 16, 55, 25], [30, 46, 16, 2, 47, 17], // 25 [8, 132, 106, 4, 133, 107], [8, 75, 47, 13, 76, 48], [7, 54, 24, 22, 55, 25], [22, 45, 15, 13, 46, 16], // 26 [10, 142, 114, 2, 143, 115], [19, 74, 46, 4, 75, 47], [28, 50, 22, 6, 51, 23], [33, 46, 16, 4, 47, 17], // 27 [8, 152, 122, 4, 153, 123], [22, 73, 45, 3, 74, 46], [8, 53, 23, 26, 54, 24], [12, 45, 15, 28, 46, 16], // 28 [3, 147, 117, 10, 148, 118], [3, 73, 45, 23, 74, 46], [4, 54, 24, 31, 55, 25], [11, 45, 15, 31, 46, 16], // 29 [7, 146, 116, 7, 147, 117], [21, 73, 45, 7, 74, 46], [1, 53, 23, 37, 54, 24], [19, 45, 15, 26, 46, 16], // 30 [5, 145, 115, 10, 146, 116], [19, 75, 47, 10, 76, 48], [15, 54, 24, 25, 55, 25], [23, 45, 15, 25, 46, 16], // 31 [13, 145, 115, 3, 146, 116], [2, 74, 46, 29, 75, 47], [42, 54, 24, 1, 55, 25], [23, 45, 15, 28, 46, 16], // 32 [17, 145, 115], [10, 74, 46, 23, 75, 47], [10, 54, 24, 35, 55, 25], [19, 45, 15, 35, 46, 16], // 33 [17, 145, 115, 1, 146, 116], [14, 74, 46, 21, 75, 47], [29, 54, 24, 19, 55, 25], [11, 45, 15, 46, 46, 16], // 34 [13, 145, 115, 6, 146, 116], [14, 74, 46, 23, 75, 47], [44, 54, 24, 7, 55, 25], [59, 46, 16, 1, 47, 17], // 35 [12, 151, 121, 7, 152, 122], [12, 75, 47, 26, 76, 48], [39, 54, 24, 14, 55, 25], [22, 45, 15, 41, 46, 16], // 36 [6, 151, 121, 14, 152, 122], [6, 75, 47, 34, 76, 48], [46, 54, 24, 10, 55, 25], [2, 45, 15, 64, 46, 16], // 37 [17, 152, 122, 4, 153, 123], [29, 74, 46, 14, 75, 47], [49, 54, 24, 10, 55, 25], [24, 45, 15, 46, 46, 16], // 38 [4, 152, 122, 18, 153, 123], [13, 74, 46, 32, 75, 47], [48, 54, 24, 14, 55, 25], [42, 45, 15, 32, 46, 16], // 39 [20, 147, 117, 4, 148, 118], [40, 75, 47, 7, 76, 48], [43, 54, 24, 22, 55, 25], [10, 45, 15, 67, 46, 16], // 40 [19, 148, 118, 6, 149, 119], [18, 75, 47, 31, 76, 48], [34, 54, 24, 34, 55, 25], [20, 45, 15, 61, 46, 16] ]; var qrRSBlock = function(totalCount, dataCount) { var _this = {}; _this.totalCount = totalCount; _this.dataCount = dataCount; return _this; }; var _this = {}; var getRsBlockTable = function(typeNumber, errorCorrectionLevel) { switch(errorCorrectionLevel) { case QRErrorCorrectionLevel.L : return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0]; case QRErrorCorrectionLevel.M : return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1]; case QRErrorCorrectionLevel.Q : return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2]; case QRErrorCorrectionLevel.H : return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3]; default : return undefined; } }; _this.getRSBlocks = function(typeNumber, errorCorrectionLevel) { var rsBlock = getRsBlockTable(typeNumber, errorCorrectionLevel); if (typeof rsBlock == 'undefined') { throw 'bad rs block @ typeNumber:' + typeNumber + '/errorCorrectionLevel:' + errorCorrectionLevel; } var length = rsBlock.length / 3; var list = []; for (var i = 0; i < length; i += 1) { var count = rsBlock[i * 3 + 0]; var totalCount = rsBlock[i * 3 + 1]; var dataCount = rsBlock[i * 3 + 2]; for (var j = 0; j < count; j += 1) { list.push(qrRSBlock(totalCount, dataCount) ); } } return list; }; return _this; }(); //--------------------------------------------------------------------- // qrBitBuffer //--------------------------------------------------------------------- var qrBitBuffer = function() { var _buffer = []; var _length = 0; var _this = {}; _this.getBuffer = function() { return _buffer; }; _this.getAt = function(index) { var bufIndex = Math.floor(index / 8); return ( (_buffer[bufIndex] >>> (7 - index % 8) ) & 1) == 1; }; _this.put = function(num, length) { for (var i = 0; i < length; i += 1) { _this.putBit( ( (num >>> (length - i - 1) ) & 1) == 1); } }; _this.getLengthInBits = function() { return _length; }; _this.putBit = function(bit) { var bufIndex = Math.floor(_length / 8); if (_buffer.length <= bufIndex) { _buffer.push(0); } if (bit) { _buffer[bufIndex] |= (0x80 >>> (_length % 8) ); } _length += 1; }; return _this; }; //--------------------------------------------------------------------- // qrNumber //--------------------------------------------------------------------- var qrNumber = function(data) { var _mode = QRMode.MODE_NUMBER; var _data = data; var _this = {}; _this.getMode = function() { return _mode; }; _this.getLength = function(buffer) { return _data.length; }; _this.write = function(buffer) { var data = _data; var i = 0; while (i + 2 < data.length) { buffer.put(strToNum(data.substring(i, i + 3) ), 10); i += 3; } if (i < data.length) { if (data.length - i == 1) { buffer.put(strToNum(data.substring(i, i + 1) ), 4); } else if (data.length - i == 2) { buffer.put(strToNum(data.substring(i, i + 2) ), 7); } } }; var strToNum = function(s) { var num = 0; for (var i = 0; i < s.length; i += 1) { num = num * 10 + chatToNum(s.charAt(i) ); } return num; }; var chatToNum = function(c) { if ('0' <= c && c <= '9') { return c.charCodeAt(0) - '0'.charCodeAt(0); } throw 'illegal char :' + c; }; return _this; }; //--------------------------------------------------------------------- // qrAlphaNum //--------------------------------------------------------------------- var qrAlphaNum = function(data) { var _mode = QRMode.MODE_ALPHA_NUM; var _data = data; var _this = {}; _this.getMode = function() { return _mode; }; _this.getLength = function(buffer) { return _data.length; }; _this.write = function(buffer) { var s = _data; var i = 0; while (i + 1 < s.length) { buffer.put( getCode(s.charAt(i) ) * 45 + getCode(s.charAt(i + 1) ), 11); i += 2; } if (i < s.length) { buffer.put(getCode(s.charAt(i) ), 6); } }; var getCode = function(c) { if ('0' <= c && c <= '9') { return c.charCodeAt(0) - '0'.charCodeAt(0); } else if ('A' <= c && c <= 'Z') { return c.charCodeAt(0) - 'A'.charCodeAt(0) + 10; } else { switch (c) { case ' ' : return 36; case '$' : return 37; case '%' : return 38; case '*' : return 39; case '+' : return 40; case '-' : return 41; case '.' : return 42; case '/' : return 43; case ':' : return 44; default : throw 'illegal char :' + c; } } }; return _this; }; //--------------------------------------------------------------------- // qr8BitByte //--------------------------------------------------------------------- var qr8BitByte = function(data) { var _mode = QRMode.MODE_8BIT_BYTE; var _data = data; var _bytes = qrcode.stringToBytes(data); var _this = {}; _this.getMode = function() { return _mode; }; _this.getLength = function(buffer) { return _bytes.length; }; _this.write = function(buffer) { for (var i = 0; i < _bytes.length; i += 1) { buffer.put(_bytes[i], 8); } }; return _this; }; //--------------------------------------------------------------------- // qrKanji //--------------------------------------------------------------------- var qrKanji = function(data) { var _mode = QRMode.MODE_KANJI; var _data = data; var stringToBytes = qrcode.stringToBytesFuncs['SJIS']; if (!stringToBytes) { throw 'sjis not supported.'; } !function(c, code) { // self test for sjis support. var test = stringToBytes(c); if (test.length != 2 || ( (test[0] << 8) | test[1]) != code) { throw 'sjis not supported.'; } }('\u53cb', 0x9746); var _bytes = stringToBytes(data); var _this = {}; _this.getMode = function() { return _mode; }; _this.getLength = function(buffer) { return ~~(_bytes.length / 2); }; _this.write = function(buffer) { var data = _bytes; var i = 0; while (i + 1 < data.length) { var c = ( (0xff & data[i]) << 8) | (0xff & data[i + 1]); if (0x8140 <= c && c <= 0x9FFC) { c -= 0x8140; } else if (0xE040 <= c && c <= 0xEBBF) { c -= 0xC140; } else { throw 'illegal char at ' + (i + 1) + '/' + c; } c = ( (c >>> 8) & 0xff) * 0xC0 + (c & 0xff); buffer.put(c, 13); i += 2; } if (i < data.length) { throw 'illegal char at ' + (i + 1); } }; return _this; }; //===================================================================== // GIF Support etc. // //--------------------------------------------------------------------- // byteArrayOutputStream //--------------------------------------------------------------------- var byteArrayOutputStream = function() { var _bytes = []; var _this = {}; _this.writeByte = function(b) { _bytes.push(b & 0xff); }; _this.writeShort = function(i) { _this.writeByte(i); _this.writeByte(i >>> 8); }; _this.writeBytes = function(b, off, len) { off = off || 0; len = len || b.length; for (var i = 0; i < len; i += 1) { _this.writeByte(b[i + off]); } }; _this.writeString = function(s) { for (var i = 0; i < s.length; i += 1) { _this.writeByte(s.charCodeAt(i) ); } }; _this.toByteArray = function() { return _bytes; }; _this.toString = function() { var s = ''; s += '['; for (var i = 0; i < _bytes.length; i += 1) { if (i > 0) { s += ','; } s += _bytes[i]; } s += ']'; return s; }; return _this; }; //--------------------------------------------------------------------- // base64EncodeOutputStream //--------------------------------------------------------------------- var base64EncodeOutputStream = function() { var _buffer = 0; var _buflen = 0; var _length = 0; var _base64 = ''; var _this = {}; var writeEncoded = function(b) { _base64 += String.fromCharCode(encode(b & 0x3f) ); }; var encode = function(n) { if (n < 0) { // error. } else if (n < 26) { return 0x41 + n; } else if (n < 52) { return 0x61 + (n - 26); } else if (n < 62) { return 0x30 + (n - 52); } else if (n == 62) { return 0x2b; } else if (n == 63) { return 0x2f; } throw 'n:' + n; }; _this.writeByte = function(n) { _buffer = (_buffer << 8) | (n & 0xff); _buflen += 8; _length += 1; while (_buflen >= 6) { writeEncoded(_buffer >>> (_buflen - 6) ); _buflen -= 6; } }; _this.flush = function() { if (_buflen > 0) { writeEncoded(_buffer << (6 - _buflen) ); _buffer = 0; _buflen = 0; } if (_length % 3 != 0) { // padding var padlen = 3 - _length % 3; for (var i = 0; i < padlen; i += 1) { _base64 += '='; } } }; _this.toString = function() { return _base64; }; return _this; }; //--------------------------------------------------------------------- // base64DecodeInputStream //--------------------------------------------------------------------- var base64DecodeInputStream = function(str) { var _str = str; var _pos = 0; var _buffer = 0; var _buflen = 0; var _this = {}; _this.read = function() { while (_buflen < 8) { if (_pos >= _str.length) { if (_buflen == 0) { return -1; } throw 'unexpected end of file./' + _buflen; } var c = _str.charAt(_pos); _pos += 1; if (c == '=') { _buflen = 0; return -1; } else if (c.match(/^\s$/) ) { // ignore if whitespace. continue; } _buffer = (_buffer << 6) | decode(c.charCodeAt(0) ); _buflen += 6; } var n = (_buffer >>> (_buflen - 8) ) & 0xff; _buflen -= 8; return n; }; var decode = function(c) { if (0x41 <= c && c <= 0x5a) { return c - 0x41; } else if (0x61 <= c && c <= 0x7a) { return c - 0x61 + 26; } else if (0x30 <= c && c <= 0x39) { return c - 0x30 + 52; } else if (c == 0x2b) { return 62; } else if (c == 0x2f) { return 63; } else { throw 'c:' + c; } }; return _this; }; //--------------------------------------------------------------------- // gifImage (B/W) //--------------------------------------------------------------------- var gifImage = function(width, height) { var _width = width; var _height = height; var _data = new Array(width * height); var _this = {}; _this.setPixel = function(x, y, pixel) { _data[y * _width + x] = pixel; }; _this.write = function(out) { //--------------------------------- // GIF Signature out.writeString('GIF87a'); //--------------------------------- // Screen Descriptor out.writeShort(_width); out.writeShort(_height); out.writeByte(0x80); // 2bit out.writeByte(0); out.writeByte(0); //--------------------------------- // Global Color Map // black out.writeByte(0x00); out.writeByte(0x00); out.writeByte(0x00); // white out.writeByte(0xff); out.writeByte(0xff); out.writeByte(0xff); //--------------------------------- // Image Descriptor out.writeString(','); out.writeShort(0); out.writeShort(0); out.writeShort(_width); out.writeShort(_height); out.writeByte(0); //--------------------------------- // Local Color Map //--------------------------------- // Raster Data var lzwMinCodeSize = 2; var raster = getLZWRaster(lzwMinCodeSize); out.writeByte(lzwMinCodeSize); var offset = 0; while (raster.length - offset > 255) { out.writeByte(255); out.writeBytes(raster, offset, 255); offset += 255; } out.writeByte(raster.length - offset); out.writeBytes(raster, offset, raster.length - offset); out.writeByte(0x00); //--------------------------------- // GIF Terminator out.writeString(';'); }; var bitOutputStream = function(out) { var _out = out; var _bitLength = 0; var _bitBuffer = 0; var _this = {}; _this.write = function(data, length) { if ( (data >>> length) != 0) { throw 'length over'; } while (_bitLength + length >= 8) { _out.writeByte(0xff & ( (data << _bitLength) | _bitBuffer) ); length -= (8 - _bitLength); data >>>= (8 - _bitLength); _bitBuffer = 0; _bitLength = 0; } _bitBuffer = (data << _bitLength) | _bitBuffer; _bitLength = _bitLength + length; }; _this.flush = function() { if (_bitLength > 0) { _out.writeByte(_bitBuffer); } }; return _this; }; var getLZWRaster = function(lzwMinCodeSize) { var clearCode = 1 << lzwMinCodeSize; var endCode = (1 << lzwMinCodeSize) + 1; var bitLength = lzwMinCodeSize + 1; // Setup LZWTable var table = lzwTable(); for (var i = 0; i < clearCode; i += 1) { table.add(String.fromCharCode(i) ); } table.add(String.fromCharCode(clearCode) ); table.add(String.fromCharCode(endCode) ); var byteOut = byteArrayOutputStream(); var bitOut = bitOutputStream(byteOut); // clear code bitOut.write(clearCode, bitLength); var dataIndex = 0; var s = String.fromCharCode(_data[dataIndex]); dataIndex += 1; while (dataIndex < _data.length) { var c = String.fromCharCode(_data[dataIndex]); dataIndex += 1; if (table.contains(s + c) ) { s = s + c; } else { bitOut.write(table.indexOf(s), bitLength); if (table.size() < 0xfff) { if (table.size() == (1 << bitLength) ) { bitLength += 1; } table.add(s + c); } s = c; } } bitOut.write(table.indexOf(s), bitLength); // end code bitOut.write(endCode, bitLength); bitOut.flush(); return byteOut.toByteArray(); }; var lzwTable = function() { var _map = {}; var _size = 0; var _this = {}; _this.add = function(key) { if (_this.contains(key) ) { throw 'dup key:' + key; } _map[key] = _size; _size += 1; }; _this.size = function() { return _size; }; _this.indexOf = function(key) { return _map[key]; }; _this.contains = function(key) { return typeof _map[key] != 'undefined'; }; return _this; }; return _this; }; var createDataURL = function(width, height, getPixel) { var gif = gifImage(width, height); for (var y = 0; y < height; y += 1) { for (var x = 0; x < width; x += 1) { gif.setPixel(x, y, getPixel(x, y) ); } } var b = byteArrayOutputStream(); gif.write(b); var base64 = base64EncodeOutputStream(); var bytes = b.toByteArray(); for (var i = 0; i < bytes.length; i += 1) { base64.writeByte(bytes[i]); } base64.flush(); return 'data:image/gif;base64,' + base64; }; //--------------------------------------------------------------------- // returns qrcode function. return qrcode; }(); // multibyte support !function() { qrcode.stringToBytesFuncs['UTF-8'] = function(s) { // http://stackoverflow.com/questions/18729405/how-to-convert-utf8-string-to-byte-array function toUTF8Array(str) { var utf8 = []; for (var i=0; i < str.length; i++) { var charcode = str.charCodeAt(i); if (charcode < 0x80) utf8.push(charcode); else if (charcode < 0x800) { utf8.push(0xc0 | (charcode >> 6), 0x80 | (charcode & 0x3f)); } else if (charcode < 0xd800 || charcode >= 0xe000) { utf8.push(0xe0 | (charcode >> 12), 0x80 | ((charcode>>6) & 0x3f), 0x80 | (charcode & 0x3f)); } // surrogate pair else { i++; // UTF-16 encodes 0x10000-0x10FFFF by // subtracting 0x10000 and splitting the // 20 bits of 0x0-0xFFFFF into two halves charcode = 0x10000 + (((charcode & 0x3ff)<<10) | (str.charCodeAt(i) & 0x3ff)); utf8.push(0xf0 | (charcode >>18), 0x80 | ((charcode>>12) & 0x3f), 0x80 | ((charcode>>6) & 0x3f), 0x80 | (charcode & 0x3f)); } } return utf8; } return toUTF8Array(s); }; }(); (function (factory) { if (true) { !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); } else {} }(function () { return qrcode; })); /***/ }) /******/ ]); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/jquery.initialize/LICENSE ================================================ The MIT License (MIT) Copyright (c) 2015-2016 Adam Pietrasiak 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: public/vendor/dcat-admin/dcat/plugins/jquery.initialize/jquery.initialize.js ================================================ /*! * https://github.com/adampietrasiak/jquery.initialize * * Copyright (c) 2015-2016 Adam Pietrasiak * Released under the MIT license * https://github.com/timpler/jquery.initialize/blob/master/LICENSE * * This is based on MutationObserver * https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver */ ;(function ($) { "use strict"; var combinators = [' ', '>', '+', '~']; // https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors#Combinators var fraternisers = ['+', '~']; // These combinators involve siblings. var complexTypes = ['ATTR', 'PSEUDO', 'ID', 'CLASS']; // These selectors are based upon attributes. //Check if browser supports "matches" function if (!Element.prototype.matches) { Element.prototype.matches = Element.prototype.matchesSelector || Element.prototype.webkitMatchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector; } // Understand what kind of selector the initializer is based upon. function grok(msobserver) { if (!$.find.tokenize) { // This is an old version of jQuery, so cannot parse the selector. // Therefore we must assume the worst case scenario. That is, that // this is a complicated selector. This feature was available in: // https://github.com/jquery/sizzle/issues/242 msobserver.isCombinatorial = true; msobserver.isFraternal = true; msobserver.isComplex = true; return; } // Parse the selector. msobserver.isCombinatorial = false; msobserver.isFraternal = false; msobserver.isComplex = false; var token = $.find.tokenize(msobserver.selector); for (var i = 0; i < token.length; i++) { for (var j = 0; j < token[i].length; j++) { if (combinators.indexOf(token[i][j].type) != -1) msobserver.isCombinatorial = true; // This selector uses combinators. if (fraternisers.indexOf(token[i][j].type) != -1) msobserver.isFraternal = true; // This selector uses sibling combinators. if (complexTypes.indexOf(token[i][j].type) != -1) msobserver.isComplex = true; // This selector is based on attributes. } } } // MutationSelectorObserver represents a selector and it's associated initialization callback. var MutationSelectorObserver = function (selector, callback, options) { this.selector = selector.trim(); this.callback = callback; this.options = options; grok(this); }; // List of MutationSelectorObservers. var msobservers = []; msobservers.initialize = function (selector, callback, options) { // Wrap the callback so that we can ensure that it is only // called once per element. var seen = []; var callbackOnce = function () { if (seen.indexOf(this) == -1) { seen.push(this); $(this).each(callback); } }; // See if the selector matches any elements already on the page. $(options.target).find(selector).each(callbackOnce); // Then, add it to the list of selector observers. var msobserver = new MutationSelectorObserver(selector, callbackOnce, options) this.push(msobserver); // The MutationObserver watches for when new elements are added to the DOM. var observer = new MutationObserver(function (mutations) { var matches = []; // For each mutation. for (var m = 0; m < mutations.length; m++) { // If this is an attributes mutation, then the target is the node upon which the mutation occurred. if (mutations[m].type == 'attributes') { // Check if the mutated node matchs. if (mutations[m].target.matches(msobserver.selector)) matches.push(mutations[m].target); // If the selector is fraternal, query siblings of the mutated node for matches. if (msobserver.isFraternal) matches.push.apply(matches, mutations[m].target.parentElement.querySelectorAll(msobserver.selector)); else matches.push.apply(matches, mutations[m].target.querySelectorAll(msobserver.selector)); } // If this is an childList mutation, then inspect added nodes. if (mutations[m].type == 'childList') { // Search added nodes for matching selectors. for (var n = 0; n < mutations[m].addedNodes.length; n++) { if (!(mutations[m].addedNodes[n] instanceof Element)) continue; // Check if the added node matches the selector if (mutations[m].addedNodes[n].matches(msobserver.selector)) matches.push(mutations[m].addedNodes[n]); // If the selector is fraternal, query siblings for matches. if (msobserver.isFraternal) matches.push.apply(matches, mutations[m].addedNodes[n].parentElement.querySelectorAll(msobserver.selector)); else matches.push.apply(matches, mutations[m].addedNodes[n].querySelectorAll(msobserver.selector)); } } } // For each match, call the callback using jQuery.each() to initialize the element (once only.) for (var i = 0; i < matches.length; i++) { $(matches[i]).each(msobserver.callback); } }); // Observe the target element. var defaultObeserverOpts = { childList: true, subtree: true, attributes: msobserver.isComplex }; observer.observe(options.target, options.observer || defaultObeserverOpts ); return observer; }; // Deprecated API (does not work with jQuery >= 3.1.1): $.fn.initialize = function (callback, options) { return msobservers.initialize(this.selector, callback, $.extend({}, $.initialize.defaults, options)); }; // Supported API $.initialize = function (selector, callback, options) { return msobservers.initialize(selector, callback, $.extend({}, $.initialize.defaults, options)); }; // Options $.initialize.defaults = { target: document.documentElement, // Defaults to observe the entire document. observer: null // MutationObserverInit: Defaults to internal configuration if not provided. } })(jQuery); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/jstree-theme/jstree.js ================================================ /*globals jQuery, define, exports, require, window, document */ (function (factory) { "use strict"; if (typeof define === 'function' && define.amd) { define(['jquery'], factory); } else if(typeof exports === 'object') { factory(require('jquery')); } else { factory(jQuery); } }(function ($, undefined) { "use strict"; /*! * jsTree 3.0.4 * http://jstree.com/ * * Copyright (c) 2014 Ivan Bozhanov (http://vakata.com) * * Licensed same as jquery - under the terms of the MIT License * http://www.opensource.org/licenses/mit-license.php */ /*! * if using jslint please allow for the jQuery global and use following options: * jslint: browser: true, ass: true, bitwise: true, continue: true, nomen: true, plusplus: true, regexp: true, unparam: true, todo: true, white: true */ // prevent another load? maybe there is a better way? if($.jstree) { return; } /** * ### jsTree core functionality */ // internal variables var instance_counter = 0, ccp_node = false, ccp_mode = false, ccp_inst = false, themes_loaded = [], src = $('script:last').attr('src'), _d = document, _node = _d.createElement('LI'), _temp1, _temp2; _node.setAttribute('role', 'treeitem'); _temp1 = _d.createElement('I'); _temp1.className = 'jstree-icon jstree-ocl'; _node.appendChild(_temp1); _temp1 = _d.createElement('A'); _temp1.className = 'jstree-anchor'; _temp1.setAttribute('href','#'); _temp2 = _d.createElement('I'); _temp2.className = 'jstree-icon jstree-themeicon'; _temp1.appendChild(_temp2); _node.appendChild(_temp1); _temp1 = _temp2 = null; /** * holds all jstree related functions and variables, including the actual class and methods to create, access and manipulate instances. * @name $.jstree */ $.jstree = { /** * specifies the jstree version in use * @name $.jstree.version */ version : '3.0.4', /** * holds all the default options used when creating new instances * @name $.jstree.defaults */ defaults : { /** * configure which plugins will be active on an instance. Should be an array of strings, where each element is a plugin name. The default is `[]` * @name $.jstree.defaults.plugins */ plugins : [] }, /** * stores all loaded jstree plugins (used internally) * @name $.jstree.plugins */ plugins : {}, path : src && src.indexOf('/') !== -1 ? src.replace(/\/[^\/]+$/,'') : '', idregex : /[\\:&!^|()\[\]<>@*'+~#";.,=\- \/${}%]/g }; /** * creates a jstree instance * @name $.jstree.create(el [, options]) * @param {DOMElement|jQuery|String} el the element to create the instance on, can be jQuery extended or a selector * @param {Object} options options for this instance (extends `$.jstree.defaults`) * @return {jsTree} the new instance */ $.jstree.create = function (el, options) { var tmp = new $.jstree.core(++instance_counter), opt = options; options = $.extend(true, {}, $.jstree.defaults, options); if(opt && opt.plugins) { options.plugins = opt.plugins; } $.each(options.plugins, function (i, k) { if(i !== 'core') { tmp = tmp.plugin(k, options[k]); } }); tmp.init(el, options); return tmp; }; /** * remove all traces of jstree from the DOM and destroy all instances * @name $.jstree.destroy() */ $.jstree.destroy = function () { $('.jstree:jstree').jstree('destroy'); $(document).off('.jstree'); }; /** * the jstree class constructor, used only internally * @private * @name $.jstree.core(id) * @param {Number} id this instance's index */ $.jstree.core = function (id) { this._id = id; this._cnt = 0; this._wrk = null; this._data = { core : { themes : { name : false, dots : false, icons : false }, selected : [], last_error : {}, working : false, worker_queue : [], focused : null } }; }; /** * get a reference to an existing instance * * __Examples__ * * // provided a container with an ID of "tree", and a nested node with an ID of "branch" * // all of there will return the same instance * $.jstree.reference('tree'); * $.jstree.reference('#tree'); * $.jstree.reference($('#tree')); * $.jstree.reference(document.getElementByID('tree')); * $.jstree.reference('branch'); * $.jstree.reference('#branch'); * $.jstree.reference($('#branch')); * $.jstree.reference(document.getElementByID('branch')); * * @name $.jstree.reference(needle) * @param {DOMElement|jQuery|String} needle * @return {jsTree|null} the instance or `null` if not found */ $.jstree.reference = function (needle) { var tmp = null, obj = null; if(needle && needle.id) { needle = needle.id; } if(!obj || !obj.length) { try { obj = $(needle); } catch (ignore) { } } if(!obj || !obj.length) { try { obj = $('#' + needle.replace($.jstree.idregex,'\\$&')); } catch (ignore) { } } if(obj && obj.length && (obj = obj.closest('.jstree')).length && (obj = obj.data('jstree'))) { tmp = obj; } else { $('.jstree').each(function () { var inst = $(this).data('jstree'); if(inst && inst._model.data[needle]) { tmp = inst; return false; } }); } return tmp; }; /** * Create an instance, get an instance or invoke a command on a instance. * * If there is no instance associated with the current node a new one is created and `arg` is used to extend `$.jstree.defaults` for this new instance. There would be no return value (chaining is not broken). * * If there is an existing instance and `arg` is a string the command specified by `arg` is executed on the instance, with any additional arguments passed to the function. If the function returns a value it will be returned (chaining could break depending on function). * * If there is an existing instance and `arg` is not a string the instance itself is returned (similar to `$.jstree.reference`). * * In any other case - nothing is returned and chaining is not broken. * * __Examples__ * * $('#tree1').jstree(); // creates an instance * $('#tree2').jstree({ plugins : [] }); // create an instance with some options * $('#tree1').jstree('open_node', '#branch_1'); // call a method on an existing instance, passing additional arguments * $('#tree2').jstree(); // get an existing instance (or create an instance) * $('#tree2').jstree(true); // get an existing instance (will not create new instance) * $('#branch_1').jstree().select_node('#branch_1'); // get an instance (using a nested element and call a method) * * @name $().jstree([arg]) * @param {String|Object} arg * @return {Mixed} */ $.fn.jstree = function (arg) { // check for string argument var is_method = (typeof arg === 'string'), args = Array.prototype.slice.call(arguments, 1), result = null; this.each(function () { // get the instance (if there is one) and method (if it exists) var instance = $.jstree.reference(this), method = is_method && instance ? instance[arg] : null; // if calling a method, and method is available - execute on the instance result = is_method && method ? method.apply(instance, args) : null; // if there is no instance and no method is being called - create one if(!instance && !is_method && (arg === undefined || $.isPlainObject(arg))) { $(this).data('jstree', new $.jstree.create(this, arg)); } // if there is an instance and no method is called - return the instance if( (instance && !is_method) || arg === true ) { result = instance || false; } // if there was a method call which returned a result - break and return the value if(result !== null && result !== undefined) { return false; } }); // if there was a method call with a valid return value - return that, otherwise continue the chain return result !== null && result !== undefined ? result : this; }; /** * used to find elements containing an instance * * __Examples__ * * $('div:jstree').each(function () { * $(this).jstree('destroy'); * }); * * @name $(':jstree') * @return {jQuery} */ $.expr[':'].jstree = $.expr.createPseudo(function(search) { return function(a) { return $(a).hasClass('jstree') && $(a).data('jstree') !== undefined; }; }); /** * stores all defaults for the core * @name $.jstree.defaults.core */ $.jstree.defaults.core = { /** * data configuration * * If left as `false` the HTML inside the jstree container element is used to populate the tree (that should be an unordered list with list items). * * You can also pass in a HTML string or a JSON array here. * * It is possible to pass in a standard jQuery-like AJAX config and jstree will automatically determine if the response is JSON or HTML and use that to populate the tree. * In addition to the standard jQuery ajax options here you can suppy functions for `data` and `url`, the functions will be run in the current instance's scope and a param will be passed indicating which node is being loaded, the return value of those functions will be used. * * The last option is to specify a function, that function will receive the node being loaded as argument and a second param which is a function which should be called with the result. * * __Examples__ * * // AJAX * $('#tree').jstree({ * 'core' : { * 'data' : { * 'url' : '/get/children/', * 'data' : function (node) { * return { 'id' : node.id }; * } * } * }); * * // direct data * $('#tree').jstree({ * 'core' : { * 'data' : [ * 'Simple root node', * { * 'id' : 'node_2', * 'text' : 'Root node with options', * 'state' : { 'opened' : true, 'selected' : true }, * 'children' : [ { 'text' : 'Child 1' }, 'Child 2'] * } * ] * }); * * // function * $('#tree').jstree({ * 'core' : { * 'data' : function (obj, callback) { * callback.call(this, ['Root 1', 'Root 2']); * } * }); * * @name $.jstree.defaults.core.data */ data : false, /** * configure the various strings used throughout the tree * * You can use an object where the key is the string you need to replace and the value is your replacement. * Another option is to specify a function which will be called with an argument of the needed string and should return the replacement. * If left as `false` no replacement is made. * * __Examples__ * * $('#tree').jstree({ * 'core' : { * 'strings' : { * 'Loading ...' : 'Please wait ...' * } * } * }); * * @name $.jstree.defaults.core.strings */ strings : false, /** * determines what happens when a user tries to modify the structure of the tree * If left as `false` all operations like create, rename, delete, move or copy are prevented. * You can set this to `true` to allow all interactions or use a function to have better control. * * __Examples__ * * $('#tree').jstree({ * 'core' : { * 'check_callback' : function (operation, node, node_parent, node_position, more) { * // operation can be 'create_node', 'rename_node', 'delete_node', 'move_node' or 'copy_node' * // in case of 'rename_node' node_position is filled with the new node name * return operation === 'rename_node' ? true : false; * } * } * }); * * @name $.jstree.defaults.core.check_callback */ check_callback : false, /** * a callback called with a single object parameter in the instance's scope when something goes wrong (operation prevented, ajax failed, etc) * @name $.jstree.defaults.core.error */ error : $.noop, /** * the open / close animation duration in milliseconds - set this to `false` to disable the animation (default is `200`) * @name $.jstree.defaults.core.animation */ animation : 200, /** * a boolean indicating if multiple nodes can be selected * @name $.jstree.defaults.core.multiple */ multiple : true, /** * theme configuration object * @name $.jstree.defaults.core.themes */ themes : { /** * the name of the theme to use (if left as `false` the default theme is used) * @name $.jstree.defaults.core.themes.name */ name : false, /** * the URL of the theme's CSS file, leave this as `false` if you have manually included the theme CSS (recommended). You can set this to `true` too which will try to autoload the theme. * @name $.jstree.defaults.core.themes.url */ url : false, /** * the location of all jstree themes - only used if `url` is set to `true` * @name $.jstree.defaults.core.themes.dir */ dir : false, /** * a boolean indicating if connecting dots are shown * @name $.jstree.defaults.core.themes.dots */ dots : true, /** * a boolean indicating if node icons are shown * @name $.jstree.defaults.core.themes.icons */ icons : true, /** * a boolean indicating if the tree background is striped * @name $.jstree.defaults.core.themes.stripes */ stripes : false, /** * a string (or boolean `false`) specifying the theme variant to use (if the theme supports variants) * @name $.jstree.defaults.core.themes.variant */ variant : false, /** * a boolean specifying if a reponsive version of the theme should kick in on smaller screens (if the theme supports it). Defaults to `false`. * @name $.jstree.defaults.core.themes.responsive */ responsive : false }, /** * if left as `true` all parents of all selected nodes will be opened once the tree loads (so that all selected nodes are visible to the user) * @name $.jstree.defaults.core.expand_selected_onload */ expand_selected_onload : true, /** * if left as `true` web workers will be used to parse incoming JSON data where possible, so that the UI will not be blocked by large requests. Workers are however about 30% slower. Defaults to `true` * @name $.jstree.defaults.core.worker */ worker : true, /** * Force node text to plain text (and escape HTML). Defaults to `false` * @name $.jstree.defaults.core.force_text */ force_text : false }; $.jstree.core.prototype = { /** * used to decorate an instance with a plugin. Used internally. * @private * @name plugin(deco [, opts]) * @param {String} deco the plugin to decorate with * @param {Object} opts options for the plugin * @return {jsTree} */ plugin : function (deco, opts) { var Child = $.jstree.plugins[deco]; if(Child) { this._data[deco] = {}; Child.prototype = this; return new Child(opts, this); } return this; }, /** * used to decorate an instance with a plugin. Used internally. * @private * @name init(el, optons) * @param {DOMElement|jQuery|String} el the element we are transforming * @param {Object} options options for this instance * @trigger init.jstree, loading.jstree, loaded.jstree, ready.jstree, changed.jstree */ init : function (el, options) { this._model = { data : { '#' : { id : '#', parent : null, parents : [], children : [], children_d : [], state : { loaded : false } } }, changed : [], force_full_redraw : false, redraw_timeout : false, default_state : { loaded : true, opened : false, selected : false, disabled : false } }; this.element = $(el).addClass('jstree jstree-' + this._id); this.settings = options; this.element.bind("destroyed", $.proxy(this.teardown, this)); this._data.core.ready = false; this._data.core.loaded = false; this._data.core.rtl = (this.element.css("direction") === "rtl"); this.element[this._data.core.rtl ? 'addClass' : 'removeClass']("jstree-rtl"); this.element.attr('role','tree'); this.bind(); /** * triggered after all events are bound * @event * @name init.jstree */ this.trigger("init"); this._data.core.original_container_html = this.element.find(" > ul > li").clone(true); this._data.core.original_container_html .find("li").addBack() .contents().filter(function() { return this.nodeType === 3 && (!this.nodeValue || /^\s+$/.test(this.nodeValue)); }) .remove(); this.element.html("<"+"ul class='jstree-container-ul jstree-children'><"+"li class='jstree-initial-node jstree-loading jstree-leaf jstree-last'><i class='jstree-icon jstree-ocl'></i><"+"a class='jstree-anchor' href='#'><i class='jstree-icon jstree-themeicon-hidden'></i>" + this.get_string("Loading ...") + "</a></li></ul>"); this._data.core.li_height = this.get_container_ul().children("li:eq(0)").height() || 24; /** * triggered after the loading text is shown and before loading starts * @event * @name loading.jstree */ this.trigger("loading"); this.load_node('#'); }, /** * destroy an instance * @name destroy() * @param {Boolean} keep_html if not set to `true` the container will be emptied, otherwise the current DOM elements will be kept intact */ destroy : function (keep_html) { if(this._wrk) { try { window.URL.revokeObjectURL(this._wrk); this._wrk = null; } catch (ignore) { } } if(!keep_html) { this.element.empty(); } this.element.unbind("destroyed", this.teardown); this.teardown(); }, /** * part of the destroying of an instance. Used internally. * @private * @name teardown() */ teardown : function () { this.unbind(); this.element .removeClass('jstree') .removeData('jstree') .find("[class^='jstree']") .addBack() .attr("class", function () { return this.className.replace(/jstree[^ ]*|$/ig,''); }); this.element = null; }, /** * bind all events. Used internally. * @private * @name bind() */ bind : function () { this.element .on("dblclick.jstree", function () { if(document.selection && document.selection.empty) { document.selection.empty(); } else { if(window.getSelection) { var sel = window.getSelection(); try { sel.removeAllRanges(); sel.collapse(); } catch (ignore) { } } } }) .on("click.jstree", ".jstree-ocl", $.proxy(function (e) { this.toggle_node(e.target); }, this)) .on("click.jstree", ".jstree-anchor", $.proxy(function (e) { e.preventDefault(); if(e.currentTarget !== document.activeElement) { $(e.currentTarget).focus(); } this.activate_node(e.currentTarget, e); }, this)) .on('keydown.jstree', '.jstree-anchor', $.proxy(function (e) { if(e.target.tagName === "INPUT") { return true; } var o = null; switch(e.which) { case 13: case 32: e.type = "click"; $(e.currentTarget).trigger(e); break; case 37: e.preventDefault(); if(this.is_open(e.currentTarget)) { this.close_node(e.currentTarget); } else { o = this.get_prev_dom(e.currentTarget); if(o && o.length) { o.children('.jstree-anchor').focus(); } } break; case 38: e.preventDefault(); o = this.get_prev_dom(e.currentTarget); if(o && o.length) { o.children('.jstree-anchor').focus(); } break; case 39: e.preventDefault(); if(this.is_closed(e.currentTarget)) { this.open_node(e.currentTarget, function (o) { this.get_node(o, true).children('.jstree-anchor').focus(); }); } else { o = this.get_next_dom(e.currentTarget); if(o && o.length) { o.children('.jstree-anchor').focus(); } } break; case 40: e.preventDefault(); o = this.get_next_dom(e.currentTarget); if(o && o.length) { o.children('.jstree-anchor').focus(); } break; // delete case 46: e.preventDefault(); o = this.get_node(e.currentTarget); if(o && o.id && o.id !== '#') { o = this.is_selected(o) ? this.get_selected() : o; // this.delete_node(o); } break; // f2 case 113: e.preventDefault(); o = this.get_node(e.currentTarget); /*! if(o && o.id && o.id !== '#') { // this.edit(o); } */ break; default: // console.log(e.which); break; } }, this)) .on("load_node.jstree", $.proxy(function (e, data) { if(data.status) { if(data.node.id === '#' && !this._data.core.loaded) { this._data.core.loaded = true; /** * triggered after the root node is loaded for the first time * @event * @name loaded.jstree */ this.trigger("loaded"); } if(!this._data.core.ready && !this.get_container_ul().find('.jstree-loading:eq(0)').length) { this._data.core.ready = true; if(this._data.core.selected.length) { if(this.settings.core.expand_selected_onload) { var tmp = [], i, j; for(i = 0, j = this._data.core.selected.length; i < j; i++) { tmp = tmp.concat(this._model.data[this._data.core.selected[i]].parents); } tmp = $.vakata.array_unique(tmp); for(i = 0, j = tmp.length; i < j; i++) { this.open_node(tmp[i], false, 0); } } this.trigger('changed', { 'action' : 'ready', 'selected' : this._data.core.selected }); } /** * triggered after all nodes are finished loading * @event * @name ready.jstree */ setTimeout($.proxy(function () { this.trigger("ready"); }, this), 0); } } }, this)) // THEME RELATED .on("init.jstree", $.proxy(function () { var s = this.settings.core.themes; this._data.core.themes.dots = s.dots; this._data.core.themes.stripes = s.stripes; this._data.core.themes.icons = s.icons; this.set_theme(s.name || "default", s.url); this.set_theme_variant(s.variant); }, this)) .on("loading.jstree", $.proxy(function () { this[ this._data.core.themes.dots ? "show_dots" : "hide_dots" ](); this[ this._data.core.themes.icons ? "show_icons" : "hide_icons" ](); this[ this._data.core.themes.stripes ? "show_stripes" : "hide_stripes" ](); }, this)) .on('blur.jstree', '.jstree-anchor', $.proxy(function (e) { this._data.core.focused = null; $(e.currentTarget).filter('.jstree-hovered').mouseleave(); }, this)) .on('focus.jstree', '.jstree-anchor', $.proxy(function (e) { var tmp = this.get_node(e.currentTarget); if(tmp && tmp.id) { this._data.core.focused = tmp.id; } this.element.find('.jstree-hovered').not(e.currentTarget).mouseleave(); $(e.currentTarget).mouseenter(); }, this)) .on('mouseenter.jstree', '.jstree-anchor', $.proxy(function (e) { this.hover_node(e.currentTarget); }, this)) .on('mouseleave.jstree', '.jstree-anchor', $.proxy(function (e) { this.dehover_node(e.currentTarget); }, this)); }, /** * part of the destroying of an instance. Used internally. * @private * @name unbind() */ unbind : function () { this.element.off('.jstree'); $(document).off('.jstree-' + this._id); }, /** * trigger an event. Used internally. * @private * @name trigger(ev [, data]) * @param {String} ev the name of the event to trigger * @param {Object} data additional data to pass with the event */ trigger : function (ev, data) { if(!data) { data = {}; } data.instance = this; this.element.triggerHandler(ev.replace('.jstree','') + '.jstree', data); }, /** * returns the jQuery extended instance container * @name get_container() * @return {jQuery} */ get_container : function () { return this.element; }, /** * returns the jQuery extended main UL node inside the instance container. Used internally. * @private * @name get_container_ul() * @return {jQuery} */ get_container_ul : function () { return this.element.children(".jstree-children:eq(0)"); }, /** * gets string replacements (localization). Used internally. * @private * @name get_string(key) * @param {String} key * @return {String} */ get_string : function (key) { var a = this.settings.core.strings; if($.isFunction(a)) { return a.call(this, key); } if(a && a[key]) { return a[key]; } return key; }, /** * gets the first child of a DOM node. Used internally. * @private * @name _firstChild(dom) * @param {DOMElement} dom * @return {DOMElement} */ _firstChild : function (dom) { dom = dom ? dom.firstChild : null; while(dom !== null && dom.nodeType !== 1) { dom = dom.nextSibling; } return dom; }, /** * gets the next sibling of a DOM node. Used internally. * @private * @name _nextSibling(dom) * @param {DOMElement} dom * @return {DOMElement} */ _nextSibling : function (dom) { dom = dom ? dom.nextSibling : null; while(dom !== null && dom.nodeType !== 1) { dom = dom.nextSibling; } return dom; }, /** * gets the previous sibling of a DOM node. Used internally. * @private * @name _previousSibling(dom) * @param {DOMElement} dom * @return {DOMElement} */ _previousSibling : function (dom) { dom = dom ? dom.previousSibling : null; while(dom !== null && dom.nodeType !== 1) { dom = dom.previousSibling; } return dom; }, /** * get the JSON representation of a node (or the actual jQuery extended DOM node) by using any input (child DOM element, ID string, selector, etc) * @name get_node(obj [, as_dom]) * @param {mixed} obj * @param {Boolean} as_dom * @return {Object|jQuery} */ get_node : function (obj, as_dom) { if(obj && obj.id) { obj = obj.id; } var dom; try { if(this._model.data[obj]) { obj = this._model.data[obj]; } else if(((dom = $(obj, this.element)).length || (dom = $('#' + obj.replace($.jstree.idregex,'\\$&'), this.element)).length) && this._model.data[dom.closest('.jstree-node').attr('id')]) { obj = this._model.data[dom.closest('.jstree-node').attr('id')]; } else if((dom = $(obj, this.element)).length && dom.hasClass('jstree')) { obj = this._model.data['#']; } else { return false; } if(as_dom) { obj = obj.id === '#' ? this.element : $('#' + obj.id.replace($.jstree.idregex,'\\$&'), this.element); } return obj; } catch (ex) { return false; } }, /** * get the path to a node, either consisting of node texts, or of node IDs, optionally glued together (otherwise an array) * @name get_path(obj [, glue, ids]) * @param {mixed} obj the node * @param {String} glue if you want the path as a string - pass the glue here (for example '/'), if a falsy value is supplied here, an array is returned * @param {Boolean} ids if set to true build the path using ID, otherwise node text is used * @return {mixed} */ get_path : function (obj, glue, ids) { obj = obj.parents ? obj : this.get_node(obj); if(!obj || obj.id === '#' || !obj.parents) { return false; } var i, j, p = []; p.push(ids ? obj.id : obj.text); for(i = 0, j = obj.parents.length; i < j; i++) { p.push(ids ? obj.parents[i] : this.get_text(obj.parents[i])); } p = p.reverse().slice(1); return glue ? p.join(glue) : p; }, /** * get the next visible node that is below the `obj` node. If `strict` is set to `true` only sibling nodes are returned. * @name get_next_dom(obj [, strict]) * @param {mixed} obj * @param {Boolean} strict * @return {jQuery} */ get_next_dom : function (obj, strict) { var tmp; obj = this.get_node(obj, true); if(obj[0] === this.element[0]) { tmp = this._firstChild(this.get_container_ul()[0]); while (tmp && tmp.offsetHeight === 0) { tmp = this._nextSibling(tmp); } return tmp ? $(tmp) : false; } if(!obj || !obj.length) { return false; } if(strict) { tmp = obj[0]; do { tmp = this._nextSibling(tmp); } while (tmp && tmp.offsetHeight === 0); return tmp ? $(tmp) : false; } if(obj.hasClass("jstree-open")) { tmp = this._firstChild(obj.children('.jstree-children')[0]); while (tmp && tmp.offsetHeight === 0) { tmp = this._nextSibling(tmp); } if(tmp !== null) { return $(tmp); } } tmp = obj[0]; do { tmp = this._nextSibling(tmp); } while (tmp && tmp.offsetHeight === 0); if(tmp !== null) { return $(tmp); } return obj.parentsUntil(".jstree",".jstree-node").next(".jstree-node:visible").eq(0); }, /** * get the previous visible node that is above the `obj` node. If `strict` is set to `true` only sibling nodes are returned. * @name get_prev_dom(obj [, strict]) * @param {mixed} obj * @param {Boolean} strict * @return {jQuery} */ get_prev_dom : function (obj, strict) { var tmp; obj = this.get_node(obj, true); if(obj[0] === this.element[0]) { tmp = this.get_container_ul()[0].lastChild; while (tmp && tmp.offsetHeight === 0) { tmp = this._previousSibling(tmp); } return tmp ? $(tmp) : false; } if(!obj || !obj.length) { return false; } if(strict) { tmp = obj[0]; do { tmp = this._previousSibling(tmp); } while (tmp && tmp.offsetHeight === 0); return tmp ? $(tmp) : false; } tmp = obj[0]; do { tmp = this._previousSibling(tmp); } while (tmp && tmp.offsetHeight === 0); if(tmp !== null) { obj = $(tmp); while(obj.hasClass("jstree-open")) { obj = obj.children(".jstree-children:eq(0)").children(".jstree-node:visible:last"); } return obj; } tmp = obj[0].parentNode.parentNode; return tmp && tmp.className && tmp.className.indexOf('jstree-node') !== -1 ? $(tmp) : false; }, /** * get the parent ID of a node * @name get_parent(obj) * @param {mixed} obj * @return {String} */ get_parent : function (obj) { obj = this.get_node(obj); if(!obj || obj.id === '#') { return false; } return obj.parent; }, /** * get a jQuery collection of all the children of a node (node must be rendered) * @name get_children_dom(obj) * @param {mixed} obj * @return {jQuery} */ get_children_dom : function (obj) { obj = this.get_node(obj, true); if(obj[0] === this.element[0]) { return this.get_container_ul().children(".jstree-node"); } if(!obj || !obj.length) { return false; } return obj.children(".jstree-children").children(".jstree-node"); }, /** * checks if a node has children * @name is_parent(obj) * @param {mixed} obj * @return {Boolean} */ is_parent : function (obj) { obj = this.get_node(obj); return obj && (obj.state.loaded === false || obj.children.length > 0); }, /** * checks if a node is loaded (its children are available) * @name is_loaded(obj) * @param {mixed} obj * @return {Boolean} */ is_loaded : function (obj) { obj = this.get_node(obj); return obj && obj.state.loaded; }, /** * check if a node is currently loading (fetching children) * @name is_loading(obj) * @param {mixed} obj * @return {Boolean} */ is_loading : function (obj) { obj = this.get_node(obj); return obj && obj.state && obj.state.loading; }, /** * check if a node is opened * @name is_open(obj) * @param {mixed} obj * @return {Boolean} */ is_open : function (obj) { obj = this.get_node(obj); return obj && obj.state.opened; }, /** * check if a node is in a closed state * @name is_closed(obj) * @param {mixed} obj * @return {Boolean} */ is_closed : function (obj) { obj = this.get_node(obj); return obj && this.is_parent(obj) && !obj.state.opened; }, /** * check if a node has no children * @name is_leaf(obj) * @param {mixed} obj * @return {Boolean} */ is_leaf : function (obj) { return !this.is_parent(obj); }, /** * loads a node (fetches its children using the `core.data` setting). Multiple nodes can be passed to by using an array. * @name load_node(obj [, callback]) * @param {mixed} obj * @param {function} callback a function to be executed once loading is complete, the function is executed in the instance's scope and receives two arguments - the node and a boolean status * @return {Boolean} * @trigger load_node.jstree */ load_node : function (obj, callback) { var k, l, i, j, c; if($.isArray(obj)) { this._load_nodes(obj.slice(), callback); return true; } obj = this.get_node(obj); if(!obj) { if(callback) { callback.call(this, obj, false); } return false; } // if(obj.state.loading) { } // the node is already loading - just wait for it to load and invoke callback? but if called implicitly it should be loaded again? if(obj.state.loaded) { obj.state.loaded = false; for(k = 0, l = obj.children_d.length; k < l; k++) { for(i = 0, j = obj.parents.length; i < j; i++) { this._model.data[obj.parents[i]].children_d = $.vakata.array_remove_item(this._model.data[obj.parents[i]].children_d, obj.children_d[k]); } if(this._model.data[obj.children_d[k]].state.selected) { c = true; this._data.core.selected = $.vakata.array_remove_item(this._data.core.selected, obj.children_d[k]); } delete this._model.data[obj.children_d[k]]; } obj.children = []; obj.children_d = []; if(c) { this.trigger('changed', { 'action' : 'load_node', 'node' : obj, 'selected' : this._data.core.selected }); } } obj.state.loading = true; this.get_node(obj, true).addClass("jstree-loading"); this._load_node(obj, $.proxy(function (status) { obj = this._model.data[obj.id]; obj.state.loading = false; obj.state.loaded = status; var dom = this.get_node(obj, true); if(obj.state.loaded && !obj.children.length && dom && dom.length && !dom.hasClass('jstree-leaf')) { dom.removeClass('jstree-closed jstree-open').addClass('jstree-leaf'); } dom.removeClass("jstree-loading"); /** * triggered after a node is loaded * @event * @name load_node.jstree * @param {Object} node the node that was loading * @param {Boolean} status was the node loaded successfully */ this.trigger('load_node', { "node" : obj, "status" : status }); if(callback) { callback.call(this, obj, status); } }, this)); return true; }, /** * load an array of nodes (will also load unavailable nodes as soon as the appear in the structure). Used internally. * @private * @name _load_nodes(nodes [, callback]) * @param {array} nodes * @param {function} callback a function to be executed once loading is complete, the function is executed in the instance's scope and receives one argument - the array passed to _load_nodes */ _load_nodes : function (nodes, callback, is_callback) { var r = true, c = function () { this._load_nodes(nodes, callback, true); }, m = this._model.data, i, j; for(i = 0, j = nodes.length; i < j; i++) { if(m[nodes[i]] && (!m[nodes[i]].state.loaded || !is_callback)) { if(!this.is_loading(nodes[i])) { this.load_node(nodes[i], c); } r = false; } } if(r) { if(callback && !callback.done) { callback.call(this, nodes); callback.done = true; } } }, /** * handles the actual loading of a node. Used only internally. * @private * @name _load_node(obj [, callback]) * @param {mixed} obj * @param {function} callback a function to be executed once loading is complete, the function is executed in the instance's scope and receives one argument - a boolean status * @return {Boolean} */ _load_node : function (obj, callback) { var s = this.settings.core.data, t; // use original HTML if(!s) { if(obj.id === '#') { return this._append_html_data(obj, this._data.core.original_container_html.clone(true), function (status) { callback.call(this, status); }); } else { return callback.call(this, false); } // return callback.call(this, obj.id === '#' ? this._append_html_data(obj, this._data.core.original_container_html.clone(true)) : false); } if($.isFunction(s)) { return s.call(this, obj, $.proxy(function (d) { if(d === false) { callback.call(this, false); } this[typeof d === 'string' ? '_append_html_data' : '_append_json_data'](obj, typeof d === 'string' ? $(d) : d, function (status) { callback.call(this, status); }); // return d === false ? callback.call(this, false) : callback.call(this, this[typeof d === 'string' ? '_append_html_data' : '_append_json_data'](obj, typeof d === 'string' ? $(d) : d)); }, this)); } if(typeof s === 'object') { if(s.url) { s = $.extend(true, {}, s); if($.isFunction(s.url)) { s.url = s.url.call(this, obj); } if($.isFunction(s.data)) { s.data = s.data.call(this, obj); } return $.ajax(s) .done($.proxy(function (d,t,x) { var type = x.getResponseHeader('Content-Type'); if(type.indexOf('json') !== -1 || typeof d === "object") { return this._append_json_data(obj, d, function (status) { callback.call(this, status); }); //return callback.call(this, this._append_json_data(obj, d)); } if(type.indexOf('html') !== -1 || typeof d === "string") { return this._append_html_data(obj, $(d), function (status) { callback.call(this, status); }); // return callback.call(this, this._append_html_data(obj, $(d))); } this._data.core.last_error = { 'error' : 'ajax', 'plugin' : 'core', 'id' : 'core_04', 'reason' : 'Could not load node', 'data' : JSON.stringify({ 'id' : obj.id, 'xhr' : x }) }; this.settings.core.error.call(this, this._data.core.last_error); return callback.call(this, false); }, this)) .fail($.proxy(function (f) { callback.call(this, false); this._data.core.last_error = { 'error' : 'ajax', 'plugin' : 'core', 'id' : 'core_04', 'reason' : 'Could not load node', 'data' : JSON.stringify({ 'id' : obj.id, 'xhr' : f }) }; this.settings.core.error.call(this, this._data.core.last_error); }, this)); } t = ($.isArray(s) || $.isPlainObject(s)) ? JSON.parse(JSON.stringify(s)) : s; if(obj.id === '#') { return this._append_json_data(obj, t, function (status) { callback.call(this, status); }); } else { this._data.core.last_error = { 'error' : 'nodata', 'plugin' : 'core', 'id' : 'core_05', 'reason' : 'Could not load node', 'data' : JSON.stringify({ 'id' : obj.id }) }; this.settings.core.error.call(this, this._data.core.last_error); return callback.call(this, false); } //return callback.call(this, (obj.id === "#" ? this._append_json_data(obj, t) : false) ); } if(typeof s === 'string') { if(obj.id === '#') { return this._append_html_data(obj, $(s), function (status) { callback.call(this, status); }); } else { this._data.core.last_error = { 'error' : 'nodata', 'plugin' : 'core', 'id' : 'core_06', 'reason' : 'Could not load node', 'data' : JSON.stringify({ 'id' : obj.id }) }; this.settings.core.error.call(this, this._data.core.last_error); return callback.call(this, false); } //return callback.call(this, (obj.id === "#" ? this._append_html_data(obj, $(s)) : false) ); } return callback.call(this, false); }, /** * adds a node to the list of nodes to redraw. Used only internally. * @private * @name _node_changed(obj [, callback]) * @param {mixed} obj */ _node_changed : function (obj) { obj = this.get_node(obj); if(obj) { this._model.changed.push(obj.id); } }, /** * appends HTML content to the tree. Used internally. * @private * @name _append_html_data(obj, data) * @param {mixed} obj the node to append to * @param {String} data the HTML string to parse and append * @trigger model.jstree, changed.jstree */ _append_html_data : function (dom, data, cb) { dom = this.get_node(dom); dom.children = []; dom.children_d = []; var dat = data.is('ul') ? data.children() : data, par = dom.id, chd = [], dpc = [], m = this._model.data, p = m[par], s = this._data.core.selected.length, tmp, i, j; dat.each($.proxy(function (i, v) { tmp = this._parse_model_from_html($(v), par, p.parents.concat()); if(tmp) { chd.push(tmp); dpc.push(tmp); if(m[tmp].children_d.length) { dpc = dpc.concat(m[tmp].children_d); } } }, this)); p.children = chd; p.children_d = dpc; for(i = 0, j = p.parents.length; i < j; i++) { m[p.parents[i]].children_d = m[p.parents[i]].children_d.concat(dpc); } /** * triggered when new data is inserted to the tree model * @event * @name model.jstree * @param {Array} nodes an array of node IDs * @param {String} parent the parent ID of the nodes */ this.trigger('model', { "nodes" : dpc, 'parent' : par }); if(par !== '#') { this._node_changed(par); this.redraw(); } else { this.get_container_ul().children('.jstree-initial-node').remove(); this.redraw(true); } if(this._data.core.selected.length !== s) { this.trigger('changed', { 'action' : 'model', 'selected' : this._data.core.selected }); } cb.call(this, true); }, /** * appends JSON content to the tree. Used internally. * @private * @name _append_json_data(obj, data) * @param {mixed} obj the node to append to * @param {String} data the JSON object to parse and append * @param {Boolean} force_processing internal param - do not set * @trigger model.jstree, changed.jstree */ _append_json_data : function (dom, data, cb, force_processing) { dom = this.get_node(dom); dom.children = []; dom.children_d = []; // *%$@!!! if(data.d) { data = data.d; if(typeof data === "string") { data = JSON.parse(data); } } if(!$.isArray(data)) { data = [data]; } var w = null, args = { 'df' : this._model.default_state, 'dat' : data, 'par' : dom.id, 'm' : this._model.data, 't_id' : this._id, 't_cnt' : this._cnt, 'sel' : this._data.core.selected }, func = function (data, undefined) { if(data.data) { data = data.data; } var dat = data.dat, par = data.par, chd = [], dpc = [], add = [], df = data.df, t_id = data.t_id, t_cnt = data.t_cnt, m = data.m, p = m[par], sel = data.sel, tmp, i, j, rslt, parse_flat = function (d, p, ps) { if(!ps) { ps = []; } else { ps = ps.concat(); } if(p) { ps.unshift(p); } var tid = d.id.toString(), i, j, c, e, tmp = { id : tid, text : d.text || '', icon : d.icon !== undefined ? d.icon : true, parent : p, parents : ps, children : d.children || [], children_d : d.children_d || [], data : d.data, state : { }, li_attr : { id : false }, a_attr : { href : '#' }, original : false }; for(i in df) { if(df.hasOwnProperty(i)) { tmp.state[i] = df[i]; } } if(d && d.data && d.data.jstree && d.data.jstree.icon) { tmp.icon = d.data.jstree.icon; } if(d && d.data) { tmp.data = d.data; if(d.data.jstree) { for(i in d.data.jstree) { if(d.data.jstree.hasOwnProperty(i)) { tmp.state[i] = d.data.jstree[i]; } } } } if(d && typeof d.state === 'object') { for (i in d.state) { if(d.state.hasOwnProperty(i)) { tmp.state[i] = d.state[i]; } } } if(d && typeof d.li_attr === 'object') { for (i in d.li_attr) { if(d.li_attr.hasOwnProperty(i)) { tmp.li_attr[i] = d.li_attr[i]; } } } if(!tmp.li_attr.id) { tmp.li_attr.id = tid; } if(d && typeof d.a_attr === 'object') { for (i in d.a_attr) { if(d.a_attr.hasOwnProperty(i)) { tmp.a_attr[i] = d.a_attr[i]; } } } if(d && d.children && d.children === true) { tmp.state.loaded = false; tmp.children = []; tmp.children_d = []; } m[tmp.id] = tmp; for(i = 0, j = tmp.children.length; i < j; i++) { c = parse_flat(m[tmp.children[i]], tmp.id, ps); e = m[c]; tmp.children_d.push(c); if(e.children_d.length) { tmp.children_d = tmp.children_d.concat(e.children_d); } } delete d.data; delete d.children; m[tmp.id].original = d; if(tmp.state.selected) { add.push(tmp.id); } return tmp.id; }, parse_nest = function (d, p, ps) { if(!ps) { ps = []; } else { ps = ps.concat(); } if(p) { ps.unshift(p); } var tid = false, i, j, c, e, tmp; do { tid = 'j' + t_id + '_' + (++t_cnt); } while(m[tid]); tmp = { id : false, text : typeof d === 'string' ? d : '', icon : typeof d === 'object' && d.icon !== undefined ? d.icon : true, parent : p, parents : ps, children : [], children_d : [], data : null, state : { }, li_attr : { id : false }, a_attr : { href : '#' }, original : false }; for(i in df) { if(df.hasOwnProperty(i)) { tmp.state[i] = df[i]; } } if(d && d.id) { tmp.id = d.id.toString(); } if(d && d.text) { tmp.text = d.text; } if(d && d.data && d.data.jstree && d.data.jstree.icon) { tmp.icon = d.data.jstree.icon; } if(d && d.data) { tmp.data = d.data; if(d.data.jstree) { for(i in d.data.jstree) { if(d.data.jstree.hasOwnProperty(i)) { tmp.state[i] = d.data.jstree[i]; } } } } if(d && typeof d.state === 'object') { for (i in d.state) { if(d.state.hasOwnProperty(i)) { tmp.state[i] = d.state[i]; } } } if(d && typeof d.li_attr === 'object') { for (i in d.li_attr) { if(d.li_attr.hasOwnProperty(i)) { tmp.li_attr[i] = d.li_attr[i]; } } } if(tmp.li_attr.id && !tmp.id) { tmp.id = tmp.li_attr.id.toString(); } if(!tmp.id) { tmp.id = tid; } if(!tmp.li_attr.id) { tmp.li_attr.id = tmp.id; } if(d && typeof d.a_attr === 'object') { for (i in d.a_attr) { if(d.a_attr.hasOwnProperty(i)) { tmp.a_attr[i] = d.a_attr[i]; } } } if(d && d.children && d.children.length) { for(i = 0, j = d.children.length; i < j; i++) { c = parse_nest(d.children[i], tmp.id, ps); e = m[c]; tmp.children.push(c); if(e.children_d.length) { tmp.children_d = tmp.children_d.concat(e.children_d); } } tmp.children_d = tmp.children_d.concat(tmp.children); } if(d && d.children && d.children === true) { tmp.state.loaded = false; tmp.children = []; tmp.children_d = []; } delete d.data; delete d.children; tmp.original = d; m[tmp.id] = tmp; if(tmp.state.selected) { add.push(tmp.id); } return tmp.id; }; if(dat.length && dat[0].id !== undefined && dat[0].parent !== undefined) { // Flat JSON support (for easy import from DB): // 1) convert to object (foreach) for(i = 0, j = dat.length; i < j; i++) { if(!dat[i].children) { dat[i].children = []; } m[dat[i].id.toString()] = dat[i]; } // 2) populate children (foreach) for(i = 0, j = dat.length; i < j; i++) { m[dat[i].parent.toString()].children.push(dat[i].id.toString()); // populate parent.children_d p.children_d.push(dat[i].id.toString()); } // 3) normalize && populate parents and children_d with recursion for(i = 0, j = p.children.length; i < j; i++) { tmp = parse_flat(m[p.children[i]], par, p.parents.concat()); dpc.push(tmp); if(m[tmp].children_d.length) { dpc = dpc.concat(m[tmp].children_d); } } for(i = 0, j = p.parents.length; i < j; i++) { m[p.parents[i]].children_d = m[p.parents[i]].children_d.concat(dpc); } // ?) three_state selection - p.state.selected && t - (if three_state foreach(dat => ch) -> foreach(parents) if(parent.selected) child.selected = true; rslt = { 'cnt' : t_cnt, 'mod' : m, 'sel' : sel, 'par' : par, 'dpc' : dpc, 'add' : add }; } else { for(i = 0, j = dat.length; i < j; i++) { tmp = parse_nest(dat[i], par, p.parents.concat()); if(tmp) { chd.push(tmp); dpc.push(tmp); if(m[tmp].children_d.length) { dpc = dpc.concat(m[tmp].children_d); } } } p.children = chd; p.children_d = dpc; for(i = 0, j = p.parents.length; i < j; i++) { m[p.parents[i]].children_d = m[p.parents[i]].children_d.concat(dpc); } rslt = { 'cnt' : t_cnt, 'mod' : m, 'sel' : sel, 'par' : par, 'dpc' : dpc, 'add' : add }; } return rslt; }, rslt = function (rslt, worker) { this._cnt = rslt.cnt; this._model.data = rslt.mod; // breaks the reference in load_node - careful if(worker) { var i, j, a = rslt.add, r = rslt.sel, s = this._data.core.selected.slice(), m = this._model.data; // if selection was changed while calculating in worker if(r.length !== s.length || $.vakata.array_unique(r.concat(s)).length !== r.length) { // deselect nodes that are no longer selected for(i = 0, j = r.length; i < j; i++) { if($.inArray(r[i], a) === -1 && $.inArray(r[i], s) === -1) { m[r[i]].state.selected = false; } } // select nodes that were selected in the mean time for(i = 0, j = s.length; i < j; i++) { if($.inArray(s[i], r) === -1) { m[s[i]].state.selected = true; } } } } if(rslt.add.length) { this._data.core.selected = this._data.core.selected.concat(rslt.add); } this.trigger('model', { "nodes" : rslt.dpc, 'parent' : rslt.par }); if(rslt.par !== '#') { this._node_changed(rslt.par); this.redraw(); } else { // this.get_container_ul().children('.jstree-initial-node').remove(); this.redraw(true); } if(rslt.add.length) { this.trigger('changed', { 'action' : 'model', 'selected' : this._data.core.selected }); } cb.call(this, true); }; if(this.settings.core.worker && window.Blob && window.URL && window.Worker) { try { if(this._wrk === null) { this._wrk = window.URL.createObjectURL( new window.Blob( ['self.onmessage = ' + func.toString().replace(/return ([^;}]+)[\s;}]+$/, 'postMessage($1);}')], {type:"text/javascript"} ) ); } if(!this._data.core.working || force_processing) { this._data.core.working = true; w = new window.Worker(this._wrk); w.onmessage = $.proxy(function (e) { rslt.call(this, e.data, true); try { w.terminate(); w = null; } catch(ignore) { } if(this._data.core.worker_queue.length) { this._append_json_data.apply(this, this._data.core.worker_queue.shift()); } else { this._data.core.working = false; } }, this); if(!args.par) { if(this._data.core.worker_queue.length) { this._append_json_data.apply(this, this._data.core.worker_queue.shift()); } else { this._data.core.working = false; } } else { w.postMessage(args); } } else { this._data.core.worker_queue.push([dom, data, cb, true]); } } catch(e) { rslt.call(this, func(args), false); if(this._data.core.worker_queue.length) { this._append_json_data.apply(this, this._data.core.worker_queue.shift()); } else { this._data.core.working = false; } } } else { rslt.call(this, func(args), false); } }, /** * parses a node from a jQuery object and appends them to the in memory tree model. Used internally. * @private * @name _parse_model_from_html(d [, p, ps]) * @param {jQuery} d the jQuery object to parse * @param {String} p the parent ID * @param {Array} ps list of all parents * @return {String} the ID of the object added to the model */ _parse_model_from_html : function (d, p, ps) { if(!ps) { ps = []; } else { ps = [].concat(ps); } if(p) { ps.unshift(p); } var c, e, m = this._model.data, data = { id : false, text : false, icon : true, parent : p, parents : ps, children : [], children_d : [], data : null, state : { }, li_attr : { id : false }, a_attr : { href : '#' }, original : false }, i, tmp, tid; for(i in this._model.default_state) { if(this._model.default_state.hasOwnProperty(i)) { data.state[i] = this._model.default_state[i]; } } tmp = $.vakata.attributes(d, true); $.each(tmp, function (i, v) { v = $.trim(v); if(!v.length) { return true; } data.li_attr[i] = v; if(i === 'id') { data.id = v.toString(); } }); tmp = d.children('a').eq(0); if(tmp.length) { tmp = $.vakata.attributes(tmp, true); $.each(tmp, function (i, v) { v = $.trim(v); if(v.length) { data.a_attr[i] = v; } }); } tmp = d.children("a:eq(0)").length ? d.children("a:eq(0)").clone() : d.clone(); tmp.children("ins, i, ul").remove(); tmp = tmp.html(); tmp = $('<div />').html(tmp); data.text = this.settings.core.force_text ? tmp.text() : tmp.html(); tmp = d.data(); data.data = tmp ? $.extend(true, {}, tmp) : null; data.state.opened = d.hasClass('jstree-open'); data.state.selected = d.children('a').hasClass('jstree-clicked'); data.state.disabled = d.children('a').hasClass('jstree-disabled'); if(data.data && data.data.jstree) { for(i in data.data.jstree) { if(data.data.jstree.hasOwnProperty(i)) { data.state[i] = data.data.jstree[i]; } } } tmp = d.children("a").children(".jstree-themeicon"); if(tmp.length) { data.icon = tmp.hasClass('jstree-themeicon-hidden') ? false : tmp.attr('rel'); } if(data.state.icon) { data.icon = data.state.icon; } tmp = d.children("ul").children("li"); do { tid = 'j' + this._id + '_' + (++this._cnt); } while(m[tid]); data.id = data.li_attr.id ? data.li_attr.id.toString() : tid; if(tmp.length) { tmp.each($.proxy(function (i, v) { c = this._parse_model_from_html($(v), data.id, ps); e = this._model.data[c]; data.children.push(c); if(e.children_d.length) { data.children_d = data.children_d.concat(e.children_d); } }, this)); data.children_d = data.children_d.concat(data.children); } else { if(d.hasClass('jstree-closed')) { data.state.loaded = false; } } if(data.li_attr['class']) { data.li_attr['class'] = data.li_attr['class'].replace('jstree-closed','').replace('jstree-open',''); } if(data.a_attr['class']) { data.a_attr['class'] = data.a_attr['class'].replace('jstree-clicked','').replace('jstree-disabled',''); } m[data.id] = data; if(data.state.selected) { this._data.core.selected.push(data.id); } return data.id; }, /** * parses a node from a JSON object (used when dealing with flat data, which has no nesting of children, but has id and parent properties) and appends it to the in memory tree model. Used internally. * @private * @name _parse_model_from_flat_json(d [, p, ps]) * @param {Object} d the JSON object to parse * @param {String} p the parent ID * @param {Array} ps list of all parents * @return {String} the ID of the object added to the model */ _parse_model_from_flat_json : function (d, p, ps) { if(!ps) { ps = []; } else { ps = ps.concat(); } if(p) { ps.unshift(p); } var tid = d.id.toString(), m = this._model.data, df = this._model.default_state, i, j, c, e, tmp = { id : tid, text : d.text || '', icon : d.icon !== undefined ? d.icon : true, parent : p, parents : ps, children : d.children || [], children_d : d.children_d || [], data : d.data, state : { }, li_attr : { id : false }, a_attr : { href : '#' }, original : false }; for(i in df) { if(df.hasOwnProperty(i)) { tmp.state[i] = df[i]; } } if(d && d.data && d.data.jstree && d.data.jstree.icon) { tmp.icon = d.data.jstree.icon; } if(d && d.data) { tmp.data = d.data; if(d.data.jstree) { for(i in d.data.jstree) { if(d.data.jstree.hasOwnProperty(i)) { tmp.state[i] = d.data.jstree[i]; } } } } if(d && typeof d.state === 'object') { for (i in d.state) { if(d.state.hasOwnProperty(i)) { tmp.state[i] = d.state[i]; } } } if(d && typeof d.li_attr === 'object') { for (i in d.li_attr) { if(d.li_attr.hasOwnProperty(i)) { tmp.li_attr[i] = d.li_attr[i]; } } } if(!tmp.li_attr.id) { tmp.li_attr.id = tid; } if(d && typeof d.a_attr === 'object') { for (i in d.a_attr) { if(d.a_attr.hasOwnProperty(i)) { tmp.a_attr[i] = d.a_attr[i]; } } } if(d && d.children && d.children === true) { tmp.state.loaded = false; tmp.children = []; tmp.children_d = []; } m[tmp.id] = tmp; for(i = 0, j = tmp.children.length; i < j; i++) { c = this._parse_model_from_flat_json(m[tmp.children[i]], tmp.id, ps); e = m[c]; tmp.children_d.push(c); if(e.children_d.length) { tmp.children_d = tmp.children_d.concat(e.children_d); } } delete d.data; delete d.children; m[tmp.id].original = d; if(tmp.state.selected) { this._data.core.selected.push(tmp.id); } return tmp.id; }, /** * parses a node from a JSON object and appends it to the in memory tree model. Used internally. * @private * @name _parse_model_from_json(d [, p, ps]) * @param {Object} d the JSON object to parse * @param {String} p the parent ID * @param {Array} ps list of all parents * @return {String} the ID of the object added to the model */ _parse_model_from_json : function (d, p, ps) { if(!ps) { ps = []; } else { ps = ps.concat(); } if(p) { ps.unshift(p); } var tid = false, i, j, c, e, m = this._model.data, df = this._model.default_state, tmp; do { tid = 'j' + this._id + '_' + (++this._cnt); } while(m[tid]); tmp = { id : false, text : typeof d === 'string' ? d : '', icon : typeof d === 'object' && d.icon !== undefined ? d.icon : true, parent : p, parents : ps, children : [], children_d : [], data : null, state : { }, li_attr : { id : false }, a_attr : { href : '#' }, original : false }; for(i in df) { if(df.hasOwnProperty(i)) { tmp.state[i] = df[i]; } } if(d && d.id) { tmp.id = d.id.toString(); } if(d && d.text) { tmp.text = d.text; } if(d && d.data && d.data.jstree && d.data.jstree.icon) { tmp.icon = d.data.jstree.icon; } if(d && d.data) { tmp.data = d.data; if(d.data.jstree) { for(i in d.data.jstree) { if(d.data.jstree.hasOwnProperty(i)) { tmp.state[i] = d.data.jstree[i]; } } } } if(d && typeof d.state === 'object') { for (i in d.state) { if(d.state.hasOwnProperty(i)) { tmp.state[i] = d.state[i]; } } } if(d && typeof d.li_attr === 'object') { for (i in d.li_attr) { if(d.li_attr.hasOwnProperty(i)) { tmp.li_attr[i] = d.li_attr[i]; } } } if(tmp.li_attr.id && !tmp.id) { tmp.id = tmp.li_attr.id.toString(); } if(!tmp.id) { tmp.id = tid; } if(!tmp.li_attr.id) { tmp.li_attr.id = tmp.id; } if(d && typeof d.a_attr === 'object') { for (i in d.a_attr) { if(d.a_attr.hasOwnProperty(i)) { tmp.a_attr[i] = d.a_attr[i]; } } } if(d && d.children && d.children.length) { for(i = 0, j = d.children.length; i < j; i++) { c = this._parse_model_from_json(d.children[i], tmp.id, ps); e = m[c]; tmp.children.push(c); if(e.children_d.length) { tmp.children_d = tmp.children_d.concat(e.children_d); } } tmp.children_d = tmp.children_d.concat(tmp.children); } if(d && d.children && d.children === true) { tmp.state.loaded = false; tmp.children = []; tmp.children_d = []; } delete d.data; delete d.children; tmp.original = d; m[tmp.id] = tmp; if(tmp.state.selected) { this._data.core.selected.push(tmp.id); } return tmp.id; }, /** * redraws all nodes that need to be redrawn. Used internally. * @private * @name _redraw() * @trigger redraw.jstree */ _redraw : function () { var nodes = this._model.force_full_redraw ? this._model.data['#'].children.concat([]) : this._model.changed.concat([]), f = document.createElement('UL'), tmp, i, j, fe = this._data.core.focused; for(i = 0, j = nodes.length; i < j; i++) { tmp = this.redraw_node(nodes[i], true, this._model.force_full_redraw); if(tmp && this._model.force_full_redraw) { f.appendChild(tmp); } } if(this._model.force_full_redraw) { f.className = this.get_container_ul()[0].className; this.element.empty().append(f); //this.get_container_ul()[0].appendChild(f); } if(fe !== null) { tmp = this.get_node(fe, true); if(tmp && tmp.length && tmp.children('.jstree-anchor')[0] !== document.activeElement) { tmp.children('.jstree-anchor').focus(); } else { this._data.core.focused = null; } } this._model.force_full_redraw = false; this._model.changed = []; /** * triggered after nodes are redrawn * @event * @name redraw.jstree * @param {array} nodes the redrawn nodes */ this.trigger('redraw', { "nodes" : nodes }); }, /** * redraws all nodes that need to be redrawn or optionally - the whole tree * @name redraw([full]) * @param {Boolean} full if set to `true` all nodes are redrawn. */ redraw : function (full) { if(full) { this._model.force_full_redraw = true; } //if(this._model.redraw_timeout) { // clearTimeout(this._model.redraw_timeout); //} //this._model.redraw_timeout = setTimeout($.proxy(this._redraw, this),0); this._redraw(); }, /** * redraws a single node. Used internally. * @private * @name redraw_node(node, deep, is_callback) * @param {mixed} node the node to redraw * @param {Boolean} deep should child nodes be redrawn too * @param {Boolean} is_callback is this a recursion call */ redraw_node : function (node, deep, is_callback) { var obj = this.get_node(node), par = false, ind = false, old = false, i = false, j = false, k = false, c = '', d = document, m = this._model.data, f = false, s = false, tmp = null; if(!obj) { return false; } if(obj.id === '#') { return this.redraw(true); } deep = deep || obj.children.length === 0; node = !document.querySelector ? document.getElementById(obj.id) : this.element[0].querySelector('#' + ("0123456789".indexOf(obj.id[0]) !== -1 ? '\\3' + obj.id[0] + ' ' + obj.id.substr(1).replace($.jstree.idregex,'\\$&') : obj.id.replace($.jstree.idregex,'\\$&')) ); //, this.element); if(!node) { deep = true; //node = d.createElement('LI'); if(!is_callback) { par = obj.parent !== '#' ? $('#' + obj.parent.replace($.jstree.idregex,'\\$&'), this.element)[0] : null; if(par !== null && (!par || !m[obj.parent].state.opened)) { return false; } ind = $.inArray(obj.id, par === null ? m['#'].children : m[obj.parent].children); } } else { node = $(node); if(!is_callback) { par = node.parent().parent()[0]; if(par === this.element[0]) { par = null; } ind = node.index(); } // m[obj.id].data = node.data(); // use only node's data, no need to touch jquery storage if(!deep && obj.children.length && !node.children('.jstree-children').length) { deep = true; } if(!deep) { old = node.children('.jstree-children')[0]; } s = node.attr('aria-selected'); f = node.children('.jstree-anchor')[0] === document.activeElement; node.remove(); //node = d.createElement('LI'); //node = node[0]; } node = _node.cloneNode(true); // node is DOM, deep is boolean c = 'jstree-node '; for(i in obj.li_attr) { if(obj.li_attr.hasOwnProperty(i)) { if(i === 'id') { continue; } if(i !== 'class') { node.setAttribute(i, obj.li_attr[i]); } else { c += obj.li_attr[i]; } } } if(s && s !== "false") { node.setAttribute('aria-selected', true); } if(obj.state.loaded && !obj.children.length) { c += ' jstree-leaf'; } else { c += obj.state.opened && obj.state.loaded ? ' jstree-open' : ' jstree-closed'; node.setAttribute('aria-expanded', (obj.state.opened && obj.state.loaded) ); } if(obj.parent !== null && m[obj.parent].children[m[obj.parent].children.length - 1] === obj.id) { c += ' jstree-last'; } node.id = obj.id; node.className = c; c = ( obj.state.selected ? ' jstree-clicked' : '') + ( obj.state.disabled ? ' jstree-disabled' : ''); for(j in obj.a_attr) { if(obj.a_attr.hasOwnProperty(j)) { if(j === 'href' && obj.a_attr[j] === '#') { continue; } if(j !== 'class') { node.childNodes[1].setAttribute(j, obj.a_attr[j]); } else { c += ' ' + obj.a_attr[j]; } } } if(c.length) { node.childNodes[1].className = 'jstree-anchor ' + c; } if((obj.icon && obj.icon !== true) || obj.icon === false) { if(obj.icon === false) { node.childNodes[1].childNodes[0].className += ' jstree-themeicon-hidden'; } else if(obj.icon.indexOf('/') === -1 && obj.icon.indexOf('.') === -1) { node.childNodes[1].childNodes[0].className += ' ' + obj.icon + ' jstree-themeicon-custom'; } else { node.childNodes[1].childNodes[0].style.backgroundImage = 'url('+obj.icon+')'; node.childNodes[1].childNodes[0].style.backgroundPosition = 'center center'; node.childNodes[1].childNodes[0].style.backgroundSize = 'auto'; node.childNodes[1].childNodes[0].className += ' jstree-themeicon-custom'; } } if(this.settings.core.force_text) { node.childNodes[1].appendChild(d.createTextNode(obj.text)); } else { node.childNodes[1].innerHTML += obj.text; } if(deep && obj.children.length && obj.state.opened && obj.state.loaded) { k = d.createElement('UL'); k.setAttribute('role', 'group'); k.className = 'jstree-children'; for(i = 0, j = obj.children.length; i < j; i++) { k.appendChild(this.redraw_node(obj.children[i], deep, true)); } node.appendChild(k); } if(old) { node.appendChild(old); } if(!is_callback) { // append back using par / ind if(!par) { par = this.element[0]; } for(i = 0, j = par.childNodes.length; i < j; i++) { if(par.childNodes[i] && par.childNodes[i].className && par.childNodes[i].className.indexOf('jstree-children') !== -1) { tmp = par.childNodes[i]; break; } } if(!tmp) { tmp = d.createElement('UL'); tmp.setAttribute('role', 'group'); tmp.className = 'jstree-children'; par.appendChild(tmp); } par = tmp; if(ind < par.childNodes.length) { par.insertBefore(node, par.childNodes[ind]); } else { par.appendChild(node); } if(f) { node.childNodes[1].focus(); } } if(obj.state.opened && !obj.state.loaded) { obj.state.opened = false; setTimeout($.proxy(function () { this.open_node(obj.id, false, 0); }, this), 0); } return node; }, /** * opens a node, revaling its children. If the node is not loaded it will be loaded and opened once ready. * @name open_node(obj [, callback, animation]) * @param {mixed} obj the node to open * @param {Function} callback a function to execute once the node is opened * @param {Number} animation the animation duration in milliseconds when opening the node (overrides the `core.animation` setting). Use `false` for no animation. * @trigger open_node.jstree, after_open.jstree, before_open.jstree */ open_node : function (obj, callback, animation) { var t1, t2, d, t; if($.isArray(obj)) { obj = obj.slice(); for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { this.open_node(obj[t1], callback, animation); } return true; } obj = this.get_node(obj); if(!obj || obj.id === '#') { return false; } animation = animation === undefined ? this.settings.core.animation : animation; if(!this.is_closed(obj)) { if(callback) { callback.call(this, obj, false); } return false; } if(!this.is_loaded(obj)) { if(this.is_loading(obj)) { return setTimeout($.proxy(function () { this.open_node(obj, callback, animation); }, this), 500); } this.load_node(obj, function (o, ok) { return ok ? this.open_node(o, callback, animation) : (callback ? callback.call(this, o, false) : false); }); } else { d = this.get_node(obj, true); t = this; if(d.length) { if(obj.children.length && !this._firstChild(d.children('.jstree-children')[0])) { obj.state.opened = true; this.redraw_node(obj, true); d = this.get_node(obj, true); } if(!animation) { this.trigger('before_open', { "node" : obj }); d[0].className = d[0].className.replace('jstree-closed', 'jstree-open'); d[0].setAttribute("aria-expanded", true); } else { this.trigger('before_open', { "node" : obj }); d .children(".jstree-children").css("display","none").end() .removeClass("jstree-closed").addClass("jstree-open").attr("aria-expanded", true) .children(".jstree-children").stop(true, true) .slideDown(animation, function () { this.style.display = ""; t.trigger("after_open", { "node" : obj }); }); } } obj.state.opened = true; if(callback) { callback.call(this, obj, true); } if(!d.length) { /** * triggered when a node is about to be opened (if the node is supposed to be in the DOM, it will be, but it won't be visible yet) * @event * @name before_open.jstree * @param {Object} node the opened node */ this.trigger('before_open', { "node" : obj }); } /** * triggered when a node is opened (if there is an animation it will not be completed yet) * @event * @name open_node.jstree * @param {Object} node the opened node */ this.trigger('open_node', { "node" : obj }); if(!animation || !d.length) { /** * triggered when a node is opened and the animation is complete * @event * @name after_open.jstree * @param {Object} node the opened node */ this.trigger("after_open", { "node" : obj }); } } }, /** * opens every parent of a node (node should be loaded) * @name _open_to(obj) * @param {mixed} obj the node to reveal * @private */ _open_to : function (obj) { obj = this.get_node(obj); if(!obj || obj.id === '#') { return false; } var i, j, p = obj.parents; for(i = 0, j = p.length; i < j; i+=1) { if(i !== '#') { this.open_node(p[i], false, 0); } } return $('#' + obj.id.replace($.jstree.idregex,'\\$&'), this.element); }, /** * closes a node, hiding its children * @name close_node(obj [, animation]) * @param {mixed} obj the node to close * @param {Number} animation the animation duration in milliseconds when closing the node (overrides the `core.animation` setting). Use `false` for no animation. * @trigger close_node.jstree, after_close.jstree */ close_node : function (obj, animation) { var t1, t2, t, d; if($.isArray(obj)) { obj = obj.slice(); for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { this.close_node(obj[t1], animation); } return true; } obj = this.get_node(obj); if(!obj || obj.id === '#') { return false; } if(this.is_closed(obj)) { return false; } animation = animation === undefined ? this.settings.core.animation : animation; t = this; d = this.get_node(obj, true); if(d.length) { if(!animation) { d[0].className = d[0].className.replace('jstree-open', 'jstree-closed'); d.attr("aria-expanded", false).children('.jstree-children').remove(); } else { d .children(".jstree-children").attr("style","display:block !important").end() .removeClass("jstree-open").addClass("jstree-closed").attr("aria-expanded", false) .children(".jstree-children").stop(true, true).slideUp(animation, function () { this.style.display = ""; d.children('.jstree-children').remove(); t.trigger("after_close", { "node" : obj }); }); } } obj.state.opened = false; /** * triggered when a node is closed (if there is an animation it will not be complete yet) * @event * @name close_node.jstree * @param {Object} node the closed node */ this.trigger('close_node',{ "node" : obj }); if(!animation || !d.length) { /** * triggered when a node is closed and the animation is complete * @event * @name after_close.jstree * @param {Object} node the closed node */ this.trigger("after_close", { "node" : obj }); } }, /** * toggles a node - closing it if it is open, opening it if it is closed * @name toggle_node(obj) * @param {mixed} obj the node to toggle */ toggle_node : function (obj) { var t1, t2; if($.isArray(obj)) { obj = obj.slice(); for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { this.toggle_node(obj[t1]); } return true; } if(this.is_closed(obj)) { return this.open_node(obj); } if(this.is_open(obj)) { return this.close_node(obj); } }, /** * opens all nodes within a node (or the tree), revaling their children. If the node is not loaded it will be loaded and opened once ready. * @name open_all([obj, animation, original_obj]) * @param {mixed} obj the node to open recursively, omit to open all nodes in the tree * @param {Number} animation the animation duration in milliseconds when opening the nodes, the default is no animation * @param {jQuery} reference to the node that started the process (internal use) * @trigger open_all.jstree */ open_all : function (obj, animation, original_obj) { if(!obj) { obj = '#'; } obj = this.get_node(obj); if(!obj) { return false; } var dom = obj.id === '#' ? this.get_container_ul() : this.get_node(obj, true), i, j, _this; if(!dom.length) { for(i = 0, j = obj.children_d.length; i < j; i++) { if(this.is_closed(this._model.data[obj.children_d[i]])) { this._model.data[obj.children_d[i]].state.opened = true; } } return this.trigger('open_all', { "node" : obj }); } original_obj = original_obj || dom; _this = this; dom = this.is_closed(obj) ? dom.find('.jstree-closed').addBack() : dom.find('.jstree-closed'); dom.each(function () { _this.open_node( this, function(node, status) { if(status && this.is_parent(node)) { this.open_all(node, animation, original_obj); } }, animation || 0 ); }); if(original_obj.find('.jstree-closed').length === 0) { /** * triggered when an `open_all` call completes * @event * @name open_all.jstree * @param {Object} node the opened node */ this.trigger('open_all', { "node" : this.get_node(original_obj) }); } }, /** * closes all nodes within a node (or the tree), revaling their children * @name close_all([obj, animation]) * @param {mixed} obj the node to close recursively, omit to close all nodes in the tree * @param {Number} animation the animation duration in milliseconds when closing the nodes, the default is no animation * @trigger close_all.jstree */ close_all : function (obj, animation) { if(!obj) { obj = '#'; } obj = this.get_node(obj); if(!obj) { return false; } var dom = obj.id === '#' ? this.get_container_ul() : this.get_node(obj, true), _this = this, i, j; if(!dom.length) { for(i = 0, j = obj.children_d.length; i < j; i++) { this._model.data[obj.children_d[i]].state.opened = false; } return this.trigger('close_all', { "node" : obj }); } dom = this.is_open(obj) ? dom.find('.jstree-open').addBack() : dom.find('.jstree-open'); $(dom.get().reverse()).each(function () { _this.close_node(this, animation || 0); }); /** * triggered when an `close_all` call completes * @event * @name close_all.jstree * @param {Object} node the closed node */ this.trigger('close_all', { "node" : obj }); }, /** * checks if a node is disabled (not selectable) * @name is_disabled(obj) * @param {mixed} obj * @return {Boolean} */ is_disabled : function (obj) { obj = this.get_node(obj); return obj && obj.state && obj.state.disabled; }, /** * enables a node - so that it can be selected * @name enable_node(obj) * @param {mixed} obj the node to enable * @trigger enable_node.jstree */ enable_node : function (obj) { var t1, t2; if($.isArray(obj)) { obj = obj.slice(); for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { this.enable_node(obj[t1]); } return true; } obj = this.get_node(obj); if(!obj || obj.id === '#') { return false; } obj.state.disabled = false; this.get_node(obj,true).children('.jstree-anchor').removeClass('jstree-disabled'); /** * triggered when an node is enabled * @event * @name enable_node.jstree * @param {Object} node the enabled node */ this.trigger('enable_node', { 'node' : obj }); }, /** * disables a node - so that it can not be selected * @name disable_node(obj) * @param {mixed} obj the node to disable * @trigger disable_node.jstree */ disable_node : function (obj) { var t1, t2; if($.isArray(obj)) { obj = obj.slice(); for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { this.disable_node(obj[t1]); } return true; } obj = this.get_node(obj); if(!obj || obj.id === '#') { return false; } obj.state.disabled = true; this.get_node(obj,true).children('.jstree-anchor').addClass('jstree-disabled'); /** * triggered when an node is disabled * @event * @name disable_node.jstree * @param {Object} node the disabled node */ this.trigger('disable_node', { 'node' : obj }); }, /** * called when a node is selected by the user. Used internally. * @private * @name activate_node(obj, e) * @param {mixed} obj the node * @param {Object} e the related event * @trigger activate_node.jstree */ activate_node : function (obj, e) { if(this.is_disabled(obj)) { return false; } // ensure last_clicked is still in the DOM, make it fresh (maybe it was moved?) and make sure it is still selected, if not - make last_clicked the last selected node this._data.core.last_clicked = this._data.core.last_clicked && this._data.core.last_clicked.id !== undefined ? this.get_node(this._data.core.last_clicked.id) : null; if(this._data.core.last_clicked && !this._data.core.last_clicked.state.selected) { this._data.core.last_clicked = null; } if(!this._data.core.last_clicked && this._data.core.selected.length) { this._data.core.last_clicked = this.get_node(this._data.core.selected[this._data.core.selected.length - 1]); } if(!this.settings.core.multiple || (!e.metaKey && !e.ctrlKey && !e.shiftKey) || (e.shiftKey && (!this._data.core.last_clicked || !this.get_parent(obj) || this.get_parent(obj) !== this._data.core.last_clicked.parent ) )) { if(!this.settings.core.multiple && (e.metaKey || e.ctrlKey || e.shiftKey) && this.is_selected(obj)) { this.deselect_node(obj, false, e); } else { this.deselect_all(true); this.select_node(obj, false, false, e); this._data.core.last_clicked = this.get_node(obj); } } else { if(e.shiftKey) { var o = this.get_node(obj).id, l = this._data.core.last_clicked.id, p = this.get_node(this._data.core.last_clicked.parent).children, c = false, i, j; for(i = 0, j = p.length; i < j; i += 1) { // separate IFs work whem o and l are the same if(p[i] === o) { c = !c; } if(p[i] === l) { c = !c; } if(c || p[i] === o || p[i] === l) { this.select_node(p[i], false, false, e); } else { this.deselect_node(p[i], false, e); } } } else { if(!this.is_selected(obj)) { this.select_node(obj, false, false, e); } else { this.deselect_node(obj, false, e); } } } /** * triggered when an node is clicked or intercated with by the user * @event * @name activate_node.jstree * @param {Object} node */ this.trigger('activate_node', { 'node' : this.get_node(obj) }); }, /** * applies the hover state on a node, called when a node is hovered by the user. Used internally. * @private * @name hover_node(obj) * @param {mixed} obj * @trigger hover_node.jstree */ hover_node : function (obj) { obj = this.get_node(obj, true); if(!obj || !obj.length || obj.children('.jstree-hovered').length) { return false; } var o = this.element.find('.jstree-hovered'), t = this.element; if(o && o.length) { this.dehover_node(o); } obj.children('.jstree-anchor').addClass('jstree-hovered'); /** * triggered when an node is hovered * @event * @name hover_node.jstree * @param {Object} node */ this.trigger('hover_node', { 'node' : this.get_node(obj) }); setTimeout(function () { t.attr('aria-activedescendant', obj[0].id); obj.attr('aria-selected', true); }, 0); }, /** * removes the hover state from a nodecalled when a node is no longer hovered by the user. Used internally. * @private * @name dehover_node(obj) * @param {mixed} obj * @trigger dehover_node.jstree */ dehover_node : function (obj) { obj = this.get_node(obj, true); if(!obj || !obj.length || !obj.children('.jstree-hovered').length) { return false; } obj.attr('aria-selected', false).children('.jstree-anchor').removeClass('jstree-hovered'); /** * triggered when an node is no longer hovered * @event * @name dehover_node.jstree * @param {Object} node */ this.trigger('dehover_node', { 'node' : this.get_node(obj) }); }, /** * select a node * @name select_node(obj [, supress_event, prevent_open]) * @param {mixed} obj an array can be used to select multiple nodes * @param {Boolean} supress_event if set to `true` the `changed.jstree` event won't be triggered * @param {Boolean} prevent_open if set to `true` parents of the selected node won't be opened * @trigger select_node.jstree, changed.jstree */ select_node : function (obj, supress_event, prevent_open, e) { var dom, t1, t2, th; if($.isArray(obj)) { obj = obj.slice(); for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { this.select_node(obj[t1], supress_event, prevent_open, e); } return true; } obj = this.get_node(obj); if(!obj || obj.id === '#') { return false; } dom = this.get_node(obj, true); if(!obj.state.selected) { obj.state.selected = true; this._data.core.selected.push(obj.id); if(!prevent_open) { dom = this._open_to(obj); } if(dom && dom.length) { dom.children('.jstree-anchor').addClass('jstree-clicked'); } /** * triggered when an node is selected * @event * @name select_node.jstree * @param {Object} node * @param {Array} selected the current selection * @param {Object} event the event (if any) that triggered this select_node */ this.trigger('select_node', { 'node' : obj, 'selected' : this._data.core.selected, 'event' : e }); if(!supress_event) { /** * triggered when selection changes * @event * @name changed.jstree * @param {Object} node * @param {Object} action the action that caused the selection to change * @param {Array} selected the current selection * @param {Object} event the event (if any) that triggered this changed event */ this.trigger('changed', { 'action' : 'select_node', 'node' : obj, 'selected' : this._data.core.selected, 'event' : e }); } } }, /** * deselect a node * @name deselect_node(obj [, supress_event]) * @param {mixed} obj an array can be used to deselect multiple nodes * @param {Boolean} supress_event if set to `true` the `changed.jstree` event won't be triggered * @trigger deselect_node.jstree, changed.jstree */ deselect_node : function (obj, supress_event, e) { var t1, t2, dom; if($.isArray(obj)) { obj = obj.slice(); for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { this.deselect_node(obj[t1], supress_event, e); } return true; } obj = this.get_node(obj); if(!obj || obj.id === '#') { return false; } dom = this.get_node(obj, true); if(obj.state.selected) { obj.state.selected = false; this._data.core.selected = $.vakata.array_remove_item(this._data.core.selected, obj.id); if(dom.length) { dom.children('.jstree-anchor').removeClass('jstree-clicked'); } /** * triggered when an node is deselected * @event * @name deselect_node.jstree * @param {Object} node * @param {Array} selected the current selection * @param {Object} event the event (if any) that triggered this deselect_node */ this.trigger('deselect_node', { 'node' : obj, 'selected' : this._data.core.selected, 'event' : e }); if(!supress_event) { this.trigger('changed', { 'action' : 'deselect_node', 'node' : obj, 'selected' : this._data.core.selected, 'event' : e }); } } }, /** * select all nodes in the tree * @name select_all([supress_event]) * @param {Boolean} supress_event if set to `true` the `changed.jstree` event won't be triggered * @trigger select_all.jstree, changed.jstree */ select_all : function (supress_event) { var tmp = this._data.core.selected.concat([]), i, j; this._data.core.selected = this._model.data['#'].children_d.concat(); for(i = 0, j = this._data.core.selected.length; i < j; i++) { if(this._model.data[this._data.core.selected[i]]) { this._model.data[this._data.core.selected[i]].state.selected = true; } } this.redraw(true); /** * triggered when all nodes are selected * @event * @name select_all.jstree * @param {Array} selected the current selection */ this.trigger('select_all', { 'selected' : this._data.core.selected }); if(!supress_event) { this.trigger('changed', { 'action' : 'select_all', 'selected' : this._data.core.selected, 'old_selection' : tmp }); } }, /** * deselect all selected nodes * @name deselect_all([supress_event]) * @param {Boolean} supress_event if set to `true` the `changed.jstree` event won't be triggered * @trigger deselect_all.jstree, changed.jstree */ deselect_all : function (supress_event) { var tmp = this._data.core.selected.concat([]), i, j; for(i = 0, j = this._data.core.selected.length; i < j; i++) { if(this._model.data[this._data.core.selected[i]]) { this._model.data[this._data.core.selected[i]].state.selected = false; } } this._data.core.selected = []; this.element.find('.jstree-clicked').removeClass('jstree-clicked'); /** * triggered when all nodes are deselected * @event * @name deselect_all.jstree * @param {Object} node the previous selection * @param {Array} selected the current selection */ this.trigger('deselect_all', { 'selected' : this._data.core.selected, 'node' : tmp }); if(!supress_event) { this.trigger('changed', { 'action' : 'deselect_all', 'selected' : this._data.core.selected, 'old_selection' : tmp }); } }, /** * checks if a node is selected * @name is_selected(obj) * @param {mixed} obj * @return {Boolean} */ is_selected : function (obj) { obj = this.get_node(obj); if(!obj || obj.id === '#') { return false; } return obj.state.selected; }, /** * get an array of all selected nodes * @name get_selected([full]) * @param {mixed} full if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned * @return {Array} */ get_selected : function (full) { return full ? $.map(this._data.core.selected, $.proxy(function (i) { return this.get_node(i); }, this)) : this._data.core.selected.slice(); }, /** * get an array of all top level selected nodes (ignoring children of selected nodes) * @name get_top_selected([full]) * @param {mixed} full if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned * @return {Array} */ get_top_selected : function (full) { var tmp = this.get_selected(true), obj = {}, i, j, k, l; for(i = 0, j = tmp.length; i < j; i++) { obj[tmp[i].id] = tmp[i]; } for(i = 0, j = tmp.length; i < j; i++) { for(k = 0, l = tmp[i].children_d.length; k < l; k++) { if(obj[tmp[i].children_d[k]]) { delete obj[tmp[i].children_d[k]]; } } } tmp = []; for(i in obj) { if(obj.hasOwnProperty(i)) { tmp.push(i); } } return full ? $.map(tmp, $.proxy(function (i) { return this.get_node(i); }, this)) : tmp; }, /** * get an array of all bottom level selected nodes (ignoring selected parents) * @name get_bottom_selected([full]) * @param {mixed} full if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned * @return {Array} */ get_bottom_selected : function (full) { var tmp = this.get_selected(true), obj = [], i, j; for(i = 0, j = tmp.length; i < j; i++) { if(!tmp[i].children.length) { obj.push(tmp[i].id); } } return full ? $.map(obj, $.proxy(function (i) { return this.get_node(i); }, this)) : obj; }, /** * gets the current state of the tree so that it can be restored later with `set_state(state)`. Used internally. * @name get_state() * @private * @return {Object} */ get_state : function () { var state = { 'core' : { 'open' : [], 'scroll' : { 'left' : this.element.scrollLeft(), 'top' : this.element.scrollTop() }, /*! 'themes' : { 'name' : this.get_theme(), 'icons' : this._data.core.themes.icons, 'dots' : this._data.core.themes.dots }, */ 'selected' : [] } }, i; for(i in this._model.data) { if(this._model.data.hasOwnProperty(i)) { if(i !== '#') { if(this._model.data[i].state.opened) { state.core.open.push(i); } if(this._model.data[i].state.selected) { state.core.selected.push(i); } } } } return state; }, /** * sets the state of the tree. Used internally. * @name set_state(state [, callback]) * @private * @param {Object} state the state to restore * @param {Function} callback an optional function to execute once the state is restored. * @trigger set_state.jstree */ set_state : function (state, callback) { if(state) { if(state.core) { var res, n, t, _this; if(state.core.open) { if(!$.isArray(state.core.open)) { delete state.core.open; this.set_state(state, callback); return false; } res = true; n = false; t = this; $.each(state.core.open.concat([]), function (i, v) { n = t.get_node(v); if(n) { if(t.is_loaded(v)) { if(t.is_closed(v)) { t.open_node(v, false, 0); } if(state && state.core && state.core.open) { $.vakata.array_remove_item(state.core.open, v); } } else { if(!t.is_loading(v)) { t.open_node(v, $.proxy(function (o, s) { if(!s && state && state.core && state.core.open) { $.vakata.array_remove_item(state.core.open, o.id); } this.set_state(state, callback); }, t), 0); } // there will be some async activity - so wait for it res = false; } } }); if(res) { delete state.core.open; this.set_state(state, callback); } return false; } if(state.core.scroll) { if(state.core.scroll && state.core.scroll.left !== undefined) { this.element.scrollLeft(state.core.scroll.left); } if(state.core.scroll && state.core.scroll.top !== undefined) { this.element.scrollTop(state.core.scroll.top); } delete state.core.scroll; this.set_state(state, callback); return false; } /*! if(state.core.themes) { if(state.core.themes.name) { this.set_theme(state.core.themes.name); } if(typeof state.core.themes.dots !== 'undefined') { this[ state.core.themes.dots ? "show_dots" : "hide_dots" ](); } if(typeof state.core.themes.icons !== 'undefined') { this[ state.core.themes.icons ? "show_icons" : "hide_icons" ](); } delete state.core.themes; delete state.core.open; this.set_state(state, callback); return false; } */ if(state.core.selected) { _this = this; this.deselect_all(); $.each(state.core.selected, function (i, v) { _this.select_node(v); }); delete state.core.selected; this.set_state(state, callback); return false; } if($.isEmptyObject(state.core)) { delete state.core; this.set_state(state, callback); return false; } } if($.isEmptyObject(state)) { state = null; if(callback) { callback.call(this); } /** * triggered when a `set_state` call completes * @event * @name set_state.jstree */ this.trigger('set_state'); return false; } return true; } return false; }, /** * refreshes the tree - all nodes are reloaded with calls to `load_node`. * @name refresh() * @param {Boolean} skip_loading an option to skip showing the loading indicator * @param {Mixed} forget_state if set to `true` state will not be reapplied, if set to a function (receiving the current state as argument) the result of that function will be used as state * @trigger refresh.jstree */ refresh : function (skip_loading, forget_state) { this._data.core.state = forget_state === true ? {} : this.get_state(); if(forget_state && $.isFunction(forget_state)) { this._data.core.state = forget_state.call(this, this._data.core.state); } this._cnt = 0; this._model.data = { '#' : { id : '#', parent : null, parents : [], children : [], children_d : [], state : { loaded : false } } }; var c = this.get_container_ul()[0].className; if(!skip_loading) { this.element.html("<"+"ul class='"+c+"'><"+"li class='jstree-initial-node jstree-loading jstree-leaf jstree-last'><i class='jstree-icon jstree-ocl'></i><"+"a class='jstree-anchor' href='#'><i class='jstree-icon jstree-themeicon-hidden'></i>" + this.get_string("Loading ...") + "</a></li></ul>"); } this.load_node('#', function (o, s) { if(s) { this.get_container_ul()[0].className = c; this.set_state($.extend(true, {}, this._data.core.state), function () { /** * triggered when a `refresh` call completes * @event * @name refresh.jstree */ this.trigger('refresh'); }); } this._data.core.state = null; }); }, /** * refreshes a node in the tree (reload its children) all opened nodes inside that node are reloaded with calls to `load_node`. * @name refresh_node(obj) * @param {mixed} obj the node * @trigger refresh_node.jstree */ refresh_node : function (obj) { obj = this.get_node(obj); if(!obj || obj.id === '#') { return false; } var opened = [], to_load = [], s = this._data.core.selected.concat([]); to_load.push(obj.id); if(obj.state.opened === true) { opened.push(obj.id); } this.get_node(obj, true).find('.jstree-open').each(function() { opened.push(this.id); }); this._load_nodes(to_load, $.proxy(function (nodes) { this.open_node(opened, false, 0); this.select_node(this._data.core.selected); /** * triggered when a node is refreshed * @event * @name refresh_node.jstree * @param {Object} node - the refreshed node * @param {Array} nodes - an array of the IDs of the nodes that were reloaded */ this.trigger('refresh_node', { 'node' : obj, 'nodes' : nodes }); }, this)); }, /** * set (change) the ID of a node * @name set_id(obj, id) * @param {mixed} obj the node * @param {String} id the new ID * @return {Boolean} */ set_id : function (obj, id) { obj = this.get_node(obj); if(!obj || obj.id === '#') { return false; } var i, j, m = this._model.data; id = id.toString(); // update parents (replace current ID with new one in children and children_d) m[obj.parent].children[$.inArray(obj.id, m[obj.parent].children)] = id; for(i = 0, j = obj.parents.length; i < j; i++) { m[obj.parents[i]].children_d[$.inArray(obj.id, m[obj.parents[i]].children_d)] = id; } // update children (replace current ID with new one in parent and parents) for(i = 0, j = obj.children.length; i < j; i++) { m[obj.children[i]].parent = id; } for(i = 0, j = obj.children_d.length; i < j; i++) { m[obj.children_d[i]].parents[$.inArray(obj.id, m[obj.children_d[i]].parents)] = id; } i = $.inArray(obj.id, this._data.core.selected); if(i !== -1) { this._data.core.selected[i] = id; } // update model and obj itself (obj.id, this._model.data[KEY]) i = this.get_node(obj.id, true); if(i) { i.attr('id', id); } delete m[obj.id]; obj.id = id; m[id] = obj; return true; }, /** * get the text value of a node * @name get_text(obj) * @param {mixed} obj the node * @return {String} */ get_text : function (obj) { obj = this.get_node(obj); return (!obj || obj.id === '#') ? false : obj.text; }, /** * set the text value of a node. Used internally, please use `rename_node(obj, val)`. * @private * @name set_text(obj, val) * @param {mixed} obj the node, you can pass an array to set the text on multiple nodes * @param {String} val the new text value * @return {Boolean} * @trigger set_text.jstree */ set_text : function (obj, val) { var t1, t2; if($.isArray(obj)) { obj = obj.slice(); for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { this.set_text(obj[t1], val); } return true; } obj = this.get_node(obj); if(!obj || obj.id === '#') { return false; } obj.text = val; if(this.get_node(obj, true).length) { this.redraw_node(obj.id); } /** * triggered when a node text value is changed * @event * @name set_text.jstree * @param {Object} obj * @param {String} text the new value */ this.trigger('set_text',{ "obj" : obj, "text" : val }); return true; }, /** * gets a JSON representation of a node (or the whole tree) * @name get_json([obj, options]) * @param {mixed} obj * @param {Object} options * @param {Boolean} options.no_state do not return state information * @param {Boolean} options.no_id do not return ID * @param {Boolean} options.no_children do not include children * @param {Boolean} options.no_data do not include node data * @param {Boolean} options.flat return flat JSON instead of nested * @return {Object} */ get_json : function (obj, options, flat) { obj = this.get_node(obj || '#'); if(!obj) { return false; } if(options && options.flat && !flat) { flat = []; } var tmp = { 'id' : obj.id, 'text' : obj.text, 'icon' : this.get_icon(obj), 'li_attr' : $.extend(true, {}, obj.li_attr), 'a_attr' : $.extend(true, {}, obj.a_attr), 'state' : {}, 'data' : options && options.no_data ? false : $.extend(true, {}, obj.data) //( this.get_node(obj, true).length ? this.get_node(obj, true).data() : obj.data ), }, i, j; if(options && options.flat) { tmp.parent = obj.parent; } else { tmp.children = []; } if(!options || !options.no_state) { for(i in obj.state) { if(obj.state.hasOwnProperty(i)) { tmp.state[i] = obj.state[i]; } } } if(options && options.no_id) { delete tmp.id; if(tmp.li_attr && tmp.li_attr.id) { delete tmp.li_attr.id; } } if(options && options.flat && obj.id !== '#') { flat.push(tmp); } if(!options || !options.no_children) { for(i = 0, j = obj.children.length; i < j; i++) { if(options && options.flat) { this.get_json(obj.children[i], options, flat); } else { tmp.children.push(this.get_json(obj.children[i], options)); } } } return options && options.flat ? flat : (obj.id === '#' ? tmp.children : tmp); }, /** * create a new node (do not confuse with load_node) * @name create_node([obj, node, pos, callback, is_loaded]) * @param {mixed} par the parent node (to create a root node use either "#" (string) or `null`) * @param {mixed} node the data for the new node (a valid JSON object, or a simple string with the name) * @param {mixed} pos the index at which to insert the node, "first" and "last" are also supported, default is "last" * @param {Function} callback a function to be called once the node is created * @param {Boolean} is_loaded internal argument indicating if the parent node was succesfully loaded * @return {String} the ID of the newly create node * @trigger model.jstree, create_node.jstree */ create_node : function (par, node, pos, callback, is_loaded) { if(par === null) { par = "#"; } par = this.get_node(par); if(!par) { return false; } pos = pos === undefined ? "last" : pos; if(!pos.toString().match(/^(before|after)$/) && !is_loaded && !this.is_loaded(par)) { return this.load_node(par, function () { this.create_node(par, node, pos, callback, true); }); } if(!node) { node = { "text" : this.get_string('New node') }; } if(node.text === undefined) { node.text = this.get_string('New node'); } var tmp, dpc, i, j; if(par.id === '#') { if(pos === "before") { pos = "first"; } if(pos === "after") { pos = "last"; } } switch(pos) { case "before": tmp = this.get_node(par.parent); pos = $.inArray(par.id, tmp.children); par = tmp; break; case "after" : tmp = this.get_node(par.parent); pos = $.inArray(par.id, tmp.children) + 1; par = tmp; break; case "inside": case "first": pos = 0; break; case "last": pos = par.children.length; break; default: if(!pos) { pos = 0; } break; } if(pos > par.children.length) { pos = par.children.length; } if(!node.id) { node.id = true; } if(!this.check("create_node", node, par, pos)) { this.settings.core.error.call(this, this._data.core.last_error); return false; } if(node.id === true) { delete node.id; } node = this._parse_model_from_json(node, par.id, par.parents.concat()); if(!node) { return false; } tmp = this.get_node(node); dpc = []; dpc.push(node); dpc = dpc.concat(tmp.children_d); this.trigger('model', { "nodes" : dpc, "parent" : par.id }); par.children_d = par.children_d.concat(dpc); for(i = 0, j = par.parents.length; i < j; i++) { this._model.data[par.parents[i]].children_d = this._model.data[par.parents[i]].children_d.concat(dpc); } node = tmp; tmp = []; for(i = 0, j = par.children.length; i < j; i++) { tmp[i >= pos ? i+1 : i] = par.children[i]; } tmp[pos] = node.id; par.children = tmp; this.redraw_node(par, true); if(callback) { callback.call(this, this.get_node(node)); } /** * triggered when a node is created * @event * @name create_node.jstree * @param {Object} node * @param {String} parent the parent's ID * @param {Number} position the position of the new node among the parent's children */ this.trigger('create_node', { "node" : this.get_node(node), "parent" : par.id, "position" : pos }); return node.id; }, /** * set the text value of a node * @name rename_node(obj, val) * @param {mixed} obj the node, you can pass an array to rename multiple nodes to the same name * @param {String} val the new text value * @return {Boolean} * @trigger rename_node.jstree */ rename_node : function (obj, val) { var t1, t2, old; if($.isArray(obj)) { obj = obj.slice(); for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { this.rename_node(obj[t1], val); } return true; } obj = this.get_node(obj); if(!obj || obj.id === '#') { return false; } old = obj.text; if(!this.check("rename_node", obj, this.get_parent(obj), val)) { this.settings.core.error.call(this, this._data.core.last_error); return false; } this.set_text(obj, val); // .apply(this, Array.prototype.slice.call(arguments)) /** * triggered when a node is renamed * @event * @name rename_node.jstree * @param {Object} node * @param {String} text the new value * @param {String} old the old value */ this.trigger('rename_node', { "node" : obj, "text" : val, "old" : old }); return true; }, /** * remove a node * @name delete_node(obj) * @param {mixed} obj the node, you can pass an array to delete multiple nodes * @return {Boolean} * @trigger delete_node.jstree, changed.jstree */ delete_node : function (obj) { var t1, t2, par, pos, tmp, i, j, k, l, c; if($.isArray(obj)) { obj = obj.slice(); for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { this.delete_node(obj[t1]); } return true; } obj = this.get_node(obj); if(!obj || obj.id === '#') { return false; } par = this.get_node(obj.parent); pos = $.inArray(obj.id, par.children); c = false; if(!this.check("delete_node", obj, par, pos)) { this.settings.core.error.call(this, this._data.core.last_error); return false; } if(pos !== -1) { par.children = $.vakata.array_remove(par.children, pos); } tmp = obj.children_d.concat([]); tmp.push(obj.id); for(k = 0, l = tmp.length; k < l; k++) { for(i = 0, j = obj.parents.length; i < j; i++) { pos = $.inArray(tmp[k], this._model.data[obj.parents[i]].children_d); if(pos !== -1) { this._model.data[obj.parents[i]].children_d = $.vakata.array_remove(this._model.data[obj.parents[i]].children_d, pos); } } if(this._model.data[tmp[k]].state.selected) { c = true; pos = $.inArray(tmp[k], this._data.core.selected); if(pos !== -1) { this._data.core.selected = $.vakata.array_remove(this._data.core.selected, pos); } } } /** * triggered when a node is deleted * @event * @name delete_node.jstree * @param {Object} node * @param {String} parent the parent's ID */ this.trigger('delete_node', { "node" : obj, "parent" : par.id }); if(c) { this.trigger('changed', { 'action' : 'delete_node', 'node' : obj, 'selected' : this._data.core.selected, 'parent' : par.id }); } for(k = 0, l = tmp.length; k < l; k++) { delete this._model.data[tmp[k]]; } this.redraw_node(par, true); return true; }, /** * check if an operation is premitted on the tree. Used internally. * @private * @name check(chk, obj, par, pos) * @param {String} chk the operation to check, can be "create_node", "rename_node", "delete_node", "copy_node" or "move_node" * @param {mixed} obj the node * @param {mixed} par the parent * @param {mixed} pos the position to insert at, or if "rename_node" - the new name * @param {mixed} more some various additional information, for example if a "move_node" operations is triggered by DND this will be the hovered node * @return {Boolean} */ check : function (chk, obj, par, pos, more) { obj = obj && obj.id ? obj : this.get_node(obj); par = par && par.id ? par : this.get_node(par); var tmp = chk.match(/^move_node|copy_node|create_node$/i) ? par : obj, chc = this.settings.core.check_callback; if(chk === "move_node" || chk === "copy_node") { if((!more || !more.is_multi) && (obj.id === par.id || $.inArray(obj.id, par.children) === pos || $.inArray(par.id, obj.children_d) !== -1)) { this._data.core.last_error = { 'error' : 'check', 'plugin' : 'core', 'id' : 'core_01', 'reason' : 'Moving parent inside child', 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) }; return false; } } if(tmp && tmp.data) { tmp = tmp.data; } if(tmp && tmp.functions && (tmp.functions[chk] === false || tmp.functions[chk] === true)) { if(tmp.functions[chk] === false) { this._data.core.last_error = { 'error' : 'check', 'plugin' : 'core', 'id' : 'core_02', 'reason' : 'Node data prevents function: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) }; } return tmp.functions[chk]; } if(chc === false || ($.isFunction(chc) && chc.call(this, chk, obj, par, pos, more) === false) || (chc && chc[chk] === false)) { this._data.core.last_error = { 'error' : 'check', 'plugin' : 'core', 'id' : 'core_03', 'reason' : 'User config for core.check_callback prevents function: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) }; return false; } return true; }, /** * get the last error * @name last_error() * @return {Object} */ last_error : function () { return this._data.core.last_error; }, /** * move a node to a new parent * @name move_node(obj, par [, pos, callback, is_loaded]) * @param {mixed} obj the node to move, pass an array to move multiple nodes * @param {mixed} par the new parent * @param {mixed} pos the position to insert at (besides integer values, "first" and "last" are supported, as well as "before" and "after"), defaults to integer `0` * @param {function} callback a function to call once the move is completed, receives 3 arguments - the node, the new parent and the position * @param {Boolean} internal parameter indicating if the parent node has been loaded * @trigger move_node.jstree */ move_node : function (obj, par, pos, callback, is_loaded) { var t1, t2, old_par, old_pos, new_par, old_ins, is_multi, dpc, tmp, i, j, k, l, p; par = this.get_node(par); pos = pos === undefined ? 0 : pos; if(!par) { return false; } if(!pos.toString().match(/^(before|after)$/) && !is_loaded && !this.is_loaded(par)) { return this.load_node(par, function () { this.move_node(obj, par, pos, callback, true); }); } if($.isArray(obj)) { obj = obj.reverse().slice(); for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { this.move_node(obj[t1], par, pos, callback, is_loaded); } return true; } obj = obj && obj.id ? obj : this.get_node(obj); if(!obj || obj.id === '#') { return false; } old_par = (obj.parent || '#').toString(); new_par = (!pos.toString().match(/^(before|after)$/) || par.id === '#') ? par : this.get_node(par.parent); old_ins = obj.instance ? obj.instance : (this._model.data[obj.id] ? this : $.jstree.reference(obj.id)); is_multi = !old_ins || !old_ins._id || (this._id !== old_ins._id); old_pos = old_ins && old_ins._id && old_par && old_ins._model.data[old_par] && old_ins._model.data[old_par].children ? $.inArray(obj.id, old_ins._model.data[old_par].children) : -1; if(is_multi) { if(this.copy_node(obj, par, pos, callback, is_loaded)) { if(old_ins) { old_ins.delete_node(obj); } return true; } return false; } //var m = this._model.data; if(new_par.id === '#') { if(pos === "before") { pos = "first"; } if(pos === "after") { pos = "last"; } } switch(pos) { case "before": pos = $.inArray(par.id, new_par.children); break; case "after" : pos = $.inArray(par.id, new_par.children) + 1; break; case "inside": case "first": pos = 0; break; case "last": pos = new_par.children.length; break; default: if(!pos) { pos = 0; } break; } if(pos > new_par.children.length) { pos = new_par.children.length; } if(!this.check("move_node", obj, new_par, pos, { 'core' : true, 'is_multi' : (old_ins && old_ins._id && old_ins._id !== this._id), 'is_foreign' : (!old_ins || !old_ins._id) })) { this.settings.core.error.call(this, this._data.core.last_error); return false; } if(obj.parent === new_par.id) { dpc = new_par.children.concat(); tmp = $.inArray(obj.id, dpc); if(tmp !== -1) { dpc = $.vakata.array_remove(dpc, tmp); if(pos > tmp) { pos--; } } tmp = []; for(i = 0, j = dpc.length; i < j; i++) { tmp[i >= pos ? i+1 : i] = dpc[i]; } tmp[pos] = obj.id; new_par.children = tmp; this._node_changed(new_par.id); this.redraw(new_par.id === '#'); } else { // clean old parent and up tmp = obj.children_d.concat(); tmp.push(obj.id); for(i = 0, j = obj.parents.length; i < j; i++) { dpc = []; p = old_ins._model.data[obj.parents[i]].children_d; for(k = 0, l = p.length; k < l; k++) { if($.inArray(p[k], tmp) === -1) { dpc.push(p[k]); } } old_ins._model.data[obj.parents[i]].children_d = dpc; } old_ins._model.data[old_par].children = $.vakata.array_remove_item(old_ins._model.data[old_par].children, obj.id); // insert into new parent and up for(i = 0, j = new_par.parents.length; i < j; i++) { this._model.data[new_par.parents[i]].children_d = this._model.data[new_par.parents[i]].children_d.concat(tmp); } dpc = []; for(i = 0, j = new_par.children.length; i < j; i++) { dpc[i >= pos ? i+1 : i] = new_par.children[i]; } dpc[pos] = obj.id; new_par.children = dpc; new_par.children_d.push(obj.id); new_par.children_d = new_par.children_d.concat(obj.children_d); // update object obj.parent = new_par.id; tmp = new_par.parents.concat(); tmp.unshift(new_par.id); p = obj.parents.length; obj.parents = tmp; // update object children tmp = tmp.concat(); for(i = 0, j = obj.children_d.length; i < j; i++) { this._model.data[obj.children_d[i]].parents = this._model.data[obj.children_d[i]].parents.slice(0,p*-1); Array.prototype.push.apply(this._model.data[obj.children_d[i]].parents, tmp); } this._node_changed(old_par); this._node_changed(new_par.id); this.redraw(old_par === '#' || new_par.id === '#'); } if(callback) { callback.call(this, obj, new_par, pos); } /** * triggered when a node is moved * @event * @name move_node.jstree * @param {Object} node * @param {String} parent the parent's ID * @param {Number} position the position of the node among the parent's children * @param {String} old_parent the old parent of the node * @param {Number} old_position the old position of the node * @param {Boolean} is_multi do the node and new parent belong to different instances * @param {jsTree} old_instance the instance the node came from * @param {jsTree} new_instance the instance of the new parent */ this.trigger('move_node', { "node" : obj, "parent" : new_par.id, "position" : pos, "old_parent" : old_par, "old_position" : old_pos, 'is_multi' : (old_ins && old_ins._id && old_ins._id !== this._id), 'is_foreign' : (!old_ins || !old_ins._id), 'old_instance' : old_ins, 'new_instance' : this }); return true; }, /** * copy a node to a new parent * @name copy_node(obj, par [, pos, callback, is_loaded]) * @param {mixed} obj the node to copy, pass an array to copy multiple nodes * @param {mixed} par the new parent * @param {mixed} pos the position to insert at (besides integer values, "first" and "last" are supported, as well as "before" and "after"), defaults to integer `0` * @param {function} callback a function to call once the move is completed, receives 3 arguments - the node, the new parent and the position * @param {Boolean} internal parameter indicating if the parent node has been loaded * @trigger model.jstree copy_node.jstree */ copy_node : function (obj, par, pos, callback, is_loaded) { var t1, t2, dpc, tmp, i, j, node, old_par, new_par, old_ins, is_multi; par = this.get_node(par); pos = pos === undefined ? 0 : pos; if(!par) { return false; } if(!pos.toString().match(/^(before|after)$/) && !is_loaded && !this.is_loaded(par)) { return this.load_node(par, function () { this.copy_node(obj, par, pos, callback, true); }); } if($.isArray(obj)) { obj = obj.reverse().slice(); for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { this.copy_node(obj[t1], par, pos, callback, is_loaded); } return true; } obj = obj && obj.id ? obj : this.get_node(obj); if(!obj || obj.id === '#') { return false; } old_par = (obj.parent || '#').toString(); new_par = (!pos.toString().match(/^(before|after)$/) || par.id === '#') ? par : this.get_node(par.parent); old_ins = obj.instance ? obj.instance : (this._model.data[obj.id] ? this : $.jstree.reference(obj.id)); is_multi = !old_ins || !old_ins._id || (this._id !== old_ins._id); if(new_par.id === '#') { if(pos === "before") { pos = "first"; } if(pos === "after") { pos = "last"; } } switch(pos) { case "before": pos = $.inArray(par.id, new_par.children); break; case "after" : pos = $.inArray(par.id, new_par.children) + 1; break; case "inside": case "first": pos = 0; break; case "last": pos = new_par.children.length; break; default: if(!pos) { pos = 0; } break; } if(pos > new_par.children.length) { pos = new_par.children.length; } if(!this.check("copy_node", obj, new_par, pos, { 'core' : true, 'is_multi' : (old_ins && old_ins._id && old_ins._id !== this._id), 'is_foreign' : (!old_ins || !old_ins._id) })) { this.settings.core.error.call(this, this._data.core.last_error); return false; } node = old_ins ? old_ins.get_json(obj, { no_id : true, no_data : true, no_state : true }) : obj; if(!node) { return false; } if(node.id === true) { delete node.id; } node = this._parse_model_from_json(node, new_par.id, new_par.parents.concat()); if(!node) { return false; } tmp = this.get_node(node); if(obj && obj.state && obj.state.loaded === false) { tmp.state.loaded = false; } dpc = []; dpc.push(node); dpc = dpc.concat(tmp.children_d); this.trigger('model', { "nodes" : dpc, "parent" : new_par.id }); // insert into new parent and up for(i = 0, j = new_par.parents.length; i < j; i++) { this._model.data[new_par.parents[i]].children_d = this._model.data[new_par.parents[i]].children_d.concat(dpc); } dpc = []; for(i = 0, j = new_par.children.length; i < j; i++) { dpc[i >= pos ? i+1 : i] = new_par.children[i]; } dpc[pos] = tmp.id; new_par.children = dpc; new_par.children_d.push(tmp.id); new_par.children_d = new_par.children_d.concat(tmp.children_d); this._node_changed(new_par.id); this.redraw(new_par.id === '#'); if(callback) { callback.call(this, tmp, new_par, pos); } /** * triggered when a node is copied * @event * @name copy_node.jstree * @param {Object} node the copied node * @param {Object} original the original node * @param {String} parent the parent's ID * @param {Number} position the position of the node among the parent's children * @param {String} old_parent the old parent of the node * @param {Number} old_position the position of the original node * @param {Boolean} is_multi do the node and new parent belong to different instances * @param {jsTree} old_instance the instance the node came from * @param {jsTree} new_instance the instance of the new parent */ this.trigger('copy_node', { "node" : tmp, "original" : obj, "parent" : new_par.id, "position" : pos, "old_parent" : old_par, "old_position" : old_ins && old_ins._id && old_par && old_ins._model.data[old_par] && old_ins._model.data[old_par].children ? $.inArray(obj.id, old_ins._model.data[old_par].children) : -1,'is_multi' : (old_ins && old_ins._id && old_ins._id !== this._id), 'is_foreign' : (!old_ins || !old_ins._id), 'old_instance' : old_ins, 'new_instance' : this }); return tmp.id; }, /** * cut a node (a later call to `paste(obj)` would move the node) * @name cut(obj) * @param {mixed} obj multiple objects can be passed using an array * @trigger cut.jstree */ cut : function (obj) { if(!obj) { obj = this._data.core.selected.concat(); } if(!$.isArray(obj)) { obj = [obj]; } if(!obj.length) { return false; } var tmp = [], o, t1, t2; for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { o = this.get_node(obj[t1]); if(o && o.id && o.id !== '#') { tmp.push(o); } } if(!tmp.length) { return false; } ccp_node = tmp; ccp_inst = this; ccp_mode = 'move_node'; /** * triggered when nodes are added to the buffer for moving * @event * @name cut.jstree * @param {Array} node */ this.trigger('cut', { "node" : obj }); }, /** * copy a node (a later call to `paste(obj)` would copy the node) * @name copy(obj) * @param {mixed} obj multiple objects can be passed using an array * @trigger copy.jstre */ copy : function (obj) { if(!obj) { obj = this._data.core.selected.concat(); } if(!$.isArray(obj)) { obj = [obj]; } if(!obj.length) { return false; } var tmp = [], o, t1, t2; for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { o = this.get_node(obj[t1]); if(o && o.id && o.id !== '#') { tmp.push(o); } } if(!tmp.length) { return false; } ccp_node = tmp; ccp_inst = this; ccp_mode = 'copy_node'; /** * triggered when nodes are added to the buffer for copying * @event * @name copy.jstree * @param {Array} node */ this.trigger('copy', { "node" : obj }); }, /** * get the current buffer (any nodes that are waiting for a paste operation) * @name get_buffer() * @return {Object} an object consisting of `mode` ("copy_node" or "move_node"), `node` (an array of objects) and `inst` (the instance) */ get_buffer : function () { return { 'mode' : ccp_mode, 'node' : ccp_node, 'inst' : ccp_inst }; }, /** * check if there is something in the buffer to paste * @name can_paste() * @return {Boolean} */ can_paste : function () { return ccp_mode !== false && ccp_node !== false; // && ccp_inst._model.data[ccp_node]; }, /** * copy or move the previously cut or copied nodes to a new parent * @name paste(obj [, pos]) * @param {mixed} obj the new parent * @param {mixed} pos the position to insert at (besides integer, "first" and "last" are supported), defaults to integer `0` * @trigger paste.jstree */ paste : function (obj, pos) { obj = this.get_node(obj); if(!obj || !ccp_mode || !ccp_mode.match(/^(copy_node|move_node)$/) || !ccp_node) { return false; } if(this[ccp_mode](ccp_node, obj, pos)) { /** * triggered when paste is invoked * @event * @name paste.jstree * @param {String} parent the ID of the receiving node * @param {Array} node the nodes in the buffer * @param {String} mode the performed operation - "copy_node" or "move_node" */ this.trigger('paste', { "parent" : obj.id, "node" : ccp_node, "mode" : ccp_mode }); } ccp_node = false; ccp_mode = false; ccp_inst = false; }, /** * put a node in edit mode (input field to rename the node) * @name edit(obj [, default_text]) * @param {mixed} obj * @param {String} default_text the text to populate the input with (if omitted the node text value is used) */ edit : function (obj, default_text) { obj = this.get_node(obj); if(!obj) { return false; } if(this.settings.core.check_callback === false) { this._data.core.last_error = { 'error' : 'check', 'plugin' : 'core', 'id' : 'core_07', 'reason' : 'Could not edit node because of check_callback' }; this.settings.core.error.call(this, this._data.core.last_error); return false; } default_text = typeof default_text === 'string' ? default_text : obj.text; this.set_text(obj, ""); obj = this._open_to(obj); var rtl = this._data.core.rtl, w = this.element.width(), a = obj.children('.jstree-anchor'), s = $('<span>'), /*! oi = obj.children("i:visible"), ai = a.children("i:visible"), w1 = oi.width() * oi.length, w2 = ai.width() * ai.length, */ t = default_text, h1 = $("<"+"div />", { css : { "position" : "absolute", "top" : "-200px", "left" : (rtl ? "0px" : "-1000px"), "visibility" : "hidden" } }).appendTo("body"), h2 = $("<"+"input />", { "value" : t, "class" : "jstree-rename-input", // "size" : t.length, "css" : { "padding" : "0", "border" : "1px solid silver", "box-sizing" : "border-box", "display" : "inline-block", "height" : (this._data.core.li_height) + "px", "lineHeight" : (this._data.core.li_height) + "px", "width" : "150px" // will be set a bit further down }, "blur" : $.proxy(function () { var i = s.children(".jstree-rename-input"), v = i.val(); if(v === "") { v = t; } h1.remove(); s.replaceWith(a); s.remove(); this.set_text(obj, t); if(this.rename_node(obj, $('<div></div>').text(v)[this.settings.core.force_text ? 'text' : 'html']()) === false) { this.set_text(obj, t); // move this up? and fix #483 } }, this), "keydown" : function (event) { var key = event.which; if(key === 27) { this.value = t; } if(key === 27 || key === 13 || key === 37 || key === 38 || key === 39 || key === 40 || key === 32) { event.stopImmediatePropagation(); } if(key === 27 || key === 13) { event.preventDefault(); this.blur(); } }, "click" : function (e) { e.stopImmediatePropagation(); }, "mousedown" : function (e) { e.stopImmediatePropagation(); }, "keyup" : function (event) { h2.width(Math.min(h1.text("pW" + this.value).width(),w)); }, "keypress" : function(event) { if(event.which === 13) { return false; } } }), fn = { fontFamily : a.css('fontFamily') || '', fontSize : a.css('fontSize') || '', fontWeight : a.css('fontWeight') || '', fontStyle : a.css('fontStyle') || '', fontStretch : a.css('fontStretch') || '', fontVariant : a.css('fontVariant') || '', letterSpacing : a.css('letterSpacing') || '', wordSpacing : a.css('wordSpacing') || '' }; s.attr('class', a.attr('class')).append(a.contents().clone()).append(h2); a.replaceWith(s); h1.css(fn); h2.css(fn).width(Math.min(h1.text("pW" + h2[0].value).width(),w))[0].select(); }, /** * changes the theme * @name set_theme(theme_name [, theme_url]) * @param {String} theme_name the name of the new theme to apply * @param {mixed} theme_url the location of the CSS file for this theme. Omit or set to `false` if you manually included the file. Set to `true` to autoload from the `core.themes.dir` directory. * @trigger set_theme.jstree */ set_theme : function (theme_name, theme_url) { if(!theme_name) { return false; } if(theme_url === true) { var dir = this.settings.core.themes.dir; if(!dir) { dir = $.jstree.path + '/themes'; } theme_url = dir + '/' + theme_name + '/style.css'; } if(theme_url && $.inArray(theme_url, themes_loaded) === -1) { $('head').append('<'+'link rel="stylesheet" href="' + theme_url + '" type="text/css" />'); themes_loaded.push(theme_url); } if(this._data.core.themes.name) { this.element.removeClass('jstree-' + this._data.core.themes.name); } this._data.core.themes.name = theme_name; this.element.addClass('jstree-' + theme_name); this.element[this.settings.core.themes.responsive ? 'addClass' : 'removeClass' ]('jstree-' + theme_name + '-responsive'); /** * triggered when a theme is set * @event * @name set_theme.jstree * @param {String} theme the new theme */ this.trigger('set_theme', { 'theme' : theme_name }); }, /** * gets the name of the currently applied theme name * @name get_theme() * @return {String} */ get_theme : function () { return this._data.core.themes.name; }, /** * changes the theme variant (if the theme has variants) * @name set_theme_variant(variant_name) * @param {String|Boolean} variant_name the variant to apply (if `false` is used the current variant is removed) */ set_theme_variant : function (variant_name) { if(this._data.core.themes.variant) { this.element.removeClass('jstree-' + this._data.core.themes.name + '-' + this._data.core.themes.variant); } this._data.core.themes.variant = variant_name; if(variant_name) { this.element.addClass('jstree-' + this._data.core.themes.name + '-' + this._data.core.themes.variant); } }, /** * gets the name of the currently applied theme variant * @name get_theme() * @return {String} */ get_theme_variant : function () { return this._data.core.themes.variant; }, /** * shows a striped background on the container (if the theme supports it) * @name show_stripes() */ show_stripes : function () { this._data.core.themes.stripes = true; this.get_container_ul().addClass("jstree-striped"); }, /** * hides the striped background on the container * @name hide_stripes() */ hide_stripes : function () { this._data.core.themes.stripes = false; this.get_container_ul().removeClass("jstree-striped"); }, /** * toggles the striped background on the container * @name toggle_stripes() */ toggle_stripes : function () { if(this._data.core.themes.stripes) { this.hide_stripes(); } else { this.show_stripes(); } }, /** * shows the connecting dots (if the theme supports it) * @name show_dots() */ show_dots : function () { this._data.core.themes.dots = true; this.get_container_ul().removeClass("jstree-no-dots"); }, /** * hides the connecting dots * @name hide_dots() */ hide_dots : function () { this._data.core.themes.dots = false; this.get_container_ul().addClass("jstree-no-dots"); }, /** * toggles the connecting dots * @name toggle_dots() */ toggle_dots : function () { if(this._data.core.themes.dots) { this.hide_dots(); } else { this.show_dots(); } }, /** * show the node icons * @name show_icons() */ show_icons : function () { this._data.core.themes.icons = true; this.get_container_ul().removeClass("jstree-no-icons"); }, /** * hide the node icons * @name hide_icons() */ hide_icons : function () { this._data.core.themes.icons = false; this.get_container_ul().addClass("jstree-no-icons"); }, /** * toggle the node icons * @name toggle_icons() */ toggle_icons : function () { if(this._data.core.themes.icons) { this.hide_icons(); } else { this.show_icons(); } }, /** * set the node icon for a node * @name set_icon(obj, icon) * @param {mixed} obj * @param {String} icon the new icon - can be a path to an icon or a className, if using an image that is in the current directory use a `./` prefix, otherwise it will be detected as a class */ set_icon : function (obj, icon) { var t1, t2, dom, old; if($.isArray(obj)) { obj = obj.slice(); for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { this.set_icon(obj[t1], icon); } return true; } obj = this.get_node(obj); if(!obj || obj.id === '#') { return false; } old = obj.icon; obj.icon = icon; dom = this.get_node(obj, true).children(".jstree-anchor").children(".jstree-themeicon"); if(icon === false) { this.hide_icon(obj); } else if(icon === true) { dom.removeClass('jstree-themeicon-custom ' + old).css("background","").removeAttr("rel"); } else if(icon.indexOf("/") === -1 && icon.indexOf(".") === -1) { dom.removeClass(old).css("background",""); dom.addClass(icon + ' jstree-themeicon-custom').attr("rel",icon); } else { dom.removeClass(old).css("background",""); dom.addClass('jstree-themeicon-custom').css("background", "url('" + icon + "') center center no-repeat").attr("rel",icon); } return true; }, /** * get the node icon for a node * @name get_icon(obj) * @param {mixed} obj * @return {String} */ get_icon : function (obj) { obj = this.get_node(obj); return (!obj || obj.id === '#') ? false : obj.icon; }, /** * hide the icon on an individual node * @name hide_icon(obj) * @param {mixed} obj */ hide_icon : function (obj) { var t1, t2; if($.isArray(obj)) { obj = obj.slice(); for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { this.hide_icon(obj[t1]); } return true; } obj = this.get_node(obj); if(!obj || obj === '#') { return false; } obj.icon = false; this.get_node(obj, true).children(".jstree-anchor").children(".jstree-themeicon").addClass('jstree-themeicon-hidden'); return true; }, /** * show the icon on an individual node * @name show_icon(obj) * @param {mixed} obj */ show_icon : function (obj) { var t1, t2, dom; if($.isArray(obj)) { obj = obj.slice(); for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { this.show_icon(obj[t1]); } return true; } obj = this.get_node(obj); if(!obj || obj === '#') { return false; } dom = this.get_node(obj, true); obj.icon = dom.length ? dom.children(".jstree-anchor").children(".jstree-themeicon").attr('rel') : true; if(!obj.icon) { obj.icon = true; } dom.children(".jstree-anchor").children(".jstree-themeicon").removeClass('jstree-themeicon-hidden'); return true; } }; // helpers $.vakata = {}; // collect attributes $.vakata.attributes = function(node, with_values) { node = $(node)[0]; var attr = with_values ? {} : []; if(node && node.attributes) { $.each(node.attributes, function (i, v) { if($.inArray(v.name.toLowerCase(),['style','contenteditable','hasfocus','tabindex']) !== -1) { return; } if(v.value !== null && $.trim(v.value) !== '') { if(with_values) { attr[v.name] = v.value; } else { attr.push(v.name); } } }); } return attr; }; $.vakata.array_unique = function(array) { var a = [], i, j, l; for(i = 0, l = array.length; i < l; i++) { for(j = 0; j <= i; j++) { if(array[i] === array[j]) { break; } } if(j === i) { a.push(array[i]); } } return a; }; // remove item from array $.vakata.array_remove = function(array, from, to) { var rest = array.slice((to || from) + 1 || array.length); array.length = from < 0 ? array.length + from : from; array.push.apply(array, rest); return array; }; // remove item from array $.vakata.array_remove_item = function(array, item) { var tmp = $.inArray(item, array); return tmp !== -1 ? $.vakata.array_remove(array, tmp) : array; }; /** * ### Checkbox plugin * * This plugin renders checkbox icons in front of each node, making multiple selection much easier. * It also supports tri-state behavior, meaning that if a node has a few of its children checked it will be rendered as undetermined, and state will be propagated up. */ var _i = document.createElement('I'); _i.className = 'jstree-icon jstree-checkbox'; /** * stores all defaults for the checkbox plugin * @name $.jstree.defaults.checkbox * @plugin checkbox */ $.jstree.defaults.checkbox = { /** * a boolean indicating if checkboxes should be visible (can be changed at a later time using `show_checkboxes()` and `hide_checkboxes`). Defaults to `true`. * @name $.jstree.defaults.checkbox.visible * @plugin checkbox */ visible : true, /** * a boolean indicating if checkboxes should cascade down and have an undetermined state. Defaults to `true`. * @name $.jstree.defaults.checkbox.three_state * @plugin checkbox */ three_state : true, /** * a boolean indicating if clicking anywhere on the node should act as clicking on the checkbox. Defaults to `true`. * @name $.jstree.defaults.checkbox.whole_node * @plugin checkbox */ whole_node : true, /** * a boolean indicating if the selected style of a node should be kept, or removed. Defaults to `true`. * @name $.jstree.defaults.checkbox.keep_selected_style * @plugin checkbox */ keep_selected_style : true, /** * This setting controls how cascading and undetermined nodes are applied. * If 'up' is in the string - cascading up is enabled, if 'down' is in the string - cascading down is enabled, if 'undetermined' is in the string - undetermined nodes will be used. * If `three_state` is set to `true` this setting is automatically set to 'up+down+undetermined'. Defaults to ''. * @name $.jstree.defaults.checkbox.cascade * @plugin checkbox */ cascade : '', /** * This setting controls if checkbox are bound to the general tree selection or to an internal array maintained by the checkbox plugin. Defaults to `true`, only set to `false` if you know exactly what you are doing. * @name $.jstree.defaults.checkbox.tie_selection * @plugin checkbox */ tie_selection : true }; $.jstree.plugins.checkbox = function (options, parent) { this.bind = function () { parent.bind.call(this); this._data.checkbox.uto = false; this._data.checkbox.selected = []; if(this.settings.checkbox.three_state) { this.settings.checkbox.cascade = 'up+down+undetermined'; } this.element .on("init.jstree", $.proxy(function () { this._data.checkbox.visible = this.settings.checkbox.visible; if(!this.settings.checkbox.keep_selected_style) { this.element.addClass('jstree-checkbox-no-clicked'); } if(this.settings.checkbox.tie_selection) { this.element.addClass('jstree-checkbox-selection'); } }, this)) .on("loading.jstree", $.proxy(function () { this[ this._data.checkbox.visible ? 'show_checkboxes' : 'hide_checkboxes' ](); }, this)); if(this.settings.checkbox.cascade.indexOf('undetermined') !== -1) { this.element .on('changed.jstree uncheck_node.jstree check_node.jstree uncheck_all.jstree check_all.jstree move_node.jstree copy_node.jstree redraw.jstree open_node.jstree', $.proxy(function () { // only if undetermined is in setting if(this._data.checkbox.uto) { clearTimeout(this._data.checkbox.uto); } this._data.checkbox.uto = setTimeout($.proxy(this._undetermined, this), 50); }, this)); } if(!this.settings.checkbox.tie_selection) { this.element .on('model.jstree', $.proxy(function (e, data) { var m = this._model.data, p = m[data.parent], dpc = data.nodes, i, j; for(i = 0, j = dpc.length; i < j; i++) { m[dpc[i]].state.checked = (m[dpc[i]].original && m[dpc[i]].original.state && m[dpc[i]].original.state.checked); if(m[dpc[i]].state.checked) { this._data.checkbox.selected.push(dpc[i]); } } }, this)); } if(this.settings.checkbox.cascade.indexOf('up') !== -1 || this.settings.checkbox.cascade.indexOf('down') !== -1) { this.element .on('model.jstree', $.proxy(function (e, data) { var m = this._model.data, p = m[data.parent], dpc = data.nodes, chd = [], c, i, j, k, l, tmp, s = this.settings.checkbox.cascade, t = this.settings.checkbox.tie_selection; if(s.indexOf('down') !== -1) { // apply down if(p.state[ t ? 'selected' : 'checked' ]) { for(i = 0, j = dpc.length; i < j; i++) { m[dpc[i]].state[ t ? 'selected' : 'checked' ] = true; } this._data[ t ? 'core' : 'checkbox' ].selected = this._data[ t ? 'core' : 'checkbox' ].selected.concat(dpc); } else { for(i = 0, j = dpc.length; i < j; i++) { if(m[dpc[i]].state[ t ? 'selected' : 'checked' ]) { for(k = 0, l = m[dpc[i]].children_d.length; k < l; k++) { m[m[dpc[i]].children_d[k]].state[ t ? 'selected' : 'checked' ] = true; } this._data[ t ? 'core' : 'checkbox' ].selected = this._data[ t ? 'core' : 'checkbox' ].selected.concat(m[dpc[i]].children_d); } } } } if(s.indexOf('up') !== -1) { // apply up for(i = 0, j = p.children_d.length; i < j; i++) { if(!m[p.children_d[i]].children.length) { chd.push(m[p.children_d[i]].parent); } } chd = $.vakata.array_unique(chd); for(k = 0, l = chd.length; k < l; k++) { p = m[chd[k]]; while(p && p.id !== '#') { c = 0; for(i = 0, j = p.children.length; i < j; i++) { c += m[p.children[i]].state[ t ? 'selected' : 'checked' ]; } if(c === j) { p.state[ t ? 'selected' : 'checked' ] = true; this._data[ t ? 'core' : 'checkbox' ].selected.push(p.id); tmp = this.get_node(p, true); if(tmp && tmp.length) { tmp.children('.jstree-anchor').addClass( t ? 'jstree-clicked' : 'jstree-checked'); } } else { break; } p = this.get_node(p.parent); } } } this._data[ t ? 'core' : 'checkbox' ].selected = $.vakata.array_unique(this._data[ t ? 'core' : 'checkbox' ].selected); }, this)) .on(this.settings.checkbox.tie_selection ? 'select_node.jstree' : 'check_node.jstree', $.proxy(function (e, data) { var obj = data.node, m = this._model.data, par = this.get_node(obj.parent), dom = this.get_node(obj, true), i, j, c, tmp, s = this.settings.checkbox.cascade, t = this.settings.checkbox.tie_selection; // apply down if(s.indexOf('down') !== -1) { this._data[ t ? 'core' : 'checkbox' ].selected = $.vakata.array_unique(this._data[ t ? 'core' : 'checkbox' ].selected.concat(obj.children_d)); for(i = 0, j = obj.children_d.length; i < j; i++) { tmp = m[obj.children_d[i]]; tmp.state[ t ? 'selected' : 'checked' ] = true; if(tmp && tmp.original && tmp.original.state && tmp.original.state.undetermined) { tmp.original.state.undetermined = false; } } } // apply up if(s.indexOf('up') !== -1) { while(par && par.id !== '#') { c = 0; for(i = 0, j = par.children.length; i < j; i++) { c += m[par.children[i]].state[ t ? 'selected' : 'checked' ]; } if(c === j) { par.state[ t ? 'selected' : 'checked' ] = true; this._data[ t ? 'core' : 'checkbox' ].selected.push(par.id); tmp = this.get_node(par, true); if(tmp && tmp.length) { tmp.children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked'); } } else { break; } par = this.get_node(par.parent); } } // apply down (process .children separately?) if(s.indexOf('down') !== -1 && dom.length) { dom.find('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked'); } }, this)) .on(this.settings.checkbox.tie_selection ? 'deselect_all.jstree' : 'uncheck_all.jstree', $.proxy(function (e, data) { var obj = this.get_node('#'), m = this._model.data, i, j, tmp; for(i = 0, j = obj.children_d.length; i < j; i++) { tmp = m[obj.children_d[i]]; if(tmp && tmp.original && tmp.original.state && tmp.original.state.undetermined) { tmp.original.state.undetermined = false; } } }, this)) .on(this.settings.checkbox.tie_selection ? 'deselect_node.jstree' : 'uncheck_node.jstree', $.proxy(function (e, data) { var obj = data.node, dom = this.get_node(obj, true), i, j, tmp, s = this.settings.checkbox.cascade, t = this.settings.checkbox.tie_selection; if(obj && obj.original && obj.original.state && obj.original.state.undetermined) { obj.original.state.undetermined = false; } // apply down if(s.indexOf('down') !== -1) { for(i = 0, j = obj.children_d.length; i < j; i++) { tmp = this._model.data[obj.children_d[i]]; tmp.state[ t ? 'selected' : 'checked' ] = false; if(tmp && tmp.original && tmp.original.state && tmp.original.state.undetermined) { tmp.original.state.undetermined = false; } } } // apply up if(s.indexOf('up') !== -1) { for(i = 0, j = obj.parents.length; i < j; i++) { tmp = this._model.data[obj.parents[i]]; tmp.state[ t ? 'selected' : 'checked' ] = false; if(tmp && tmp.original && tmp.original.state && tmp.original.state.undetermined) { tmp.original.state.undetermined = false; } tmp = this.get_node(obj.parents[i], true); if(tmp && tmp.length) { tmp.children('.jstree-anchor').removeClass(t ? 'jstree-clicked' : 'jstree-checked'); } } } tmp = []; for(i = 0, j = this._data[ t ? 'core' : 'checkbox' ].selected.length; i < j; i++) { // apply down + apply up if( (s.indexOf('down') === -1 || $.inArray(this._data[ t ? 'core' : 'checkbox' ].selected[i], obj.children_d) === -1) && (s.indexOf('up') === -1 || $.inArray(this._data[ t ? 'core' : 'checkbox' ].selected[i], obj.parents) === -1) ) { tmp.push(this._data[ t ? 'core' : 'checkbox' ].selected[i]); } } this._data[ t ? 'core' : 'checkbox' ].selected = $.vakata.array_unique(tmp); // apply down (process .children separately?) if(s.indexOf('down') !== -1 && dom.length) { dom.find('.jstree-anchor').removeClass(t ? 'jstree-clicked' : 'jstree-checked'); } }, this)); } if(this.settings.checkbox.cascade.indexOf('up') !== -1) { this.element .on('delete_node.jstree', $.proxy(function (e, data) { // apply up (whole handler) var p = this.get_node(data.parent), m = this._model.data, i, j, c, tmp, t = this.settings.checkbox.tie_selection; while(p && p.id !== '#') { c = 0; for(i = 0, j = p.children.length; i < j; i++) { c += m[p.children[i]].state[ t ? 'selected' : 'checked' ]; } if(c === j) { p.state[ t ? 'selected' : 'checked' ] = true; this._data[ t ? 'core' : 'checkbox' ].selected.push(p.id); tmp = this.get_node(p, true); if(tmp && tmp.length) { tmp.children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked'); } } else { break; } p = this.get_node(p.parent); } }, this)) .on('move_node.jstree', $.proxy(function (e, data) { // apply up (whole handler) var is_multi = data.is_multi, old_par = data.old_parent, new_par = this.get_node(data.parent), m = this._model.data, p, c, i, j, tmp, t = this.settings.checkbox.tie_selection; if(!is_multi) { p = this.get_node(old_par); while(p && p.id !== '#') { c = 0; for(i = 0, j = p.children.length; i < j; i++) { c += m[p.children[i]].state[ t ? 'selected' : 'checked' ]; } if(c === j) { p.state[ t ? 'selected' : 'checked' ] = true; this._data[ t ? 'core' : 'checkbox' ].selected.push(p.id); tmp = this.get_node(p, true); if(tmp && tmp.length) { tmp.children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked'); } } else { break; } p = this.get_node(p.parent); } } p = new_par; while(p && p.id !== '#') { c = 0; for(i = 0, j = p.children.length; i < j; i++) { c += m[p.children[i]].state[ t ? 'selected' : 'checked' ]; } if(c === j) { if(!p.state[ t ? 'selected' : 'checked' ]) { p.state[ t ? 'selected' : 'checked' ] = true; this._data[ t ? 'core' : 'checkbox' ].selected.push(p.id); tmp = this.get_node(p, true); if(tmp && tmp.length) { tmp.children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked'); } } } else { if(p.state[ t ? 'selected' : 'checked' ]) { p.state[ t ? 'selected' : 'checked' ] = false; this._data[ t ? 'core' : 'checkbox' ].selected = $.vakata.array_remove_item(this._data[ t ? 'core' : 'checkbox' ].selected, p.id); tmp = this.get_node(p, true); if(tmp && tmp.length) { tmp.children('.jstree-anchor').removeClass(t ? 'jstree-clicked' : 'jstree-checked'); } } else { break; } } p = this.get_node(p.parent); } }, this)); } }; /** * set the undetermined state where and if necessary. Used internally. * @private * @name _undetermined() * @plugin checkbox */ this._undetermined = function () { var i, j, m = this._model.data, t = this.settings.checkbox.tie_selection, s = this._data[ t ? 'core' : 'checkbox' ].selected, p = [], tt = this; for(i = 0, j = s.length; i < j; i++) { if(m[s[i]] && m[s[i]].parents) { p = p.concat(m[s[i]].parents); } } // attempt for server side undetermined state this.element.find('.jstree-closed').not(':has(.jstree-children)') .each(function () { var tmp = tt.get_node(this), tmp2; if(!tmp.state.loaded) { if(tmp.original && tmp.original.state && tmp.original.state.undetermined && tmp.original.state.undetermined === true) { p.push(tmp.id); p = p.concat(tmp.parents); } } else { for(i = 0, j = tmp.children_d.length; i < j; i++) { tmp2 = m[tmp.children_d[i]]; if(!tmp2.state.loaded && tmp2.original && tmp2.original.state && tmp2.original.state.undetermined && tmp2.original.state.undetermined === true) { p.push(tmp2.id); p = p.concat(tmp2.parents); } } } }); p = $.vakata.array_unique(p); p = $.vakata.array_remove_item(p,'#'); this.element.find('.jstree-undetermined').removeClass('jstree-undetermined'); for(i = 0, j = p.length; i < j; i++) { if(!m[p[i]].state[ t ? 'selected' : 'checked' ]) { s = this.get_node(p[i], true); if(s && s.length) { s.children('.jstree-anchor').children('.jstree-checkbox').addClass('jstree-undetermined'); } } } }; this.redraw_node = function(obj, deep, is_callback) { obj = parent.redraw_node.call(this, obj, deep, is_callback); if(obj) { var i, j, tmp = null; for(i = 0, j = obj.childNodes.length; i < j; i++) { if(obj.childNodes[i] && obj.childNodes[i].className && obj.childNodes[i].className.indexOf("jstree-anchor") !== -1) { tmp = obj.childNodes[i]; break; } } if(tmp) { if(!this.settings.checkbox.tie_selection && this._model.data[obj.id].state.checked) { tmp.className += ' jstree-checked'; } tmp.insertBefore(_i.cloneNode(false), tmp.childNodes[0]); } } if(!is_callback && this.settings.checkbox.cascade.indexOf('undetermined') !== -1) { if(this._data.checkbox.uto) { clearTimeout(this._data.checkbox.uto); } this._data.checkbox.uto = setTimeout($.proxy(this._undetermined, this), 50); } return obj; }; /** * show the node checkbox icons * @name show_checkboxes() * @plugin checkbox */ this.show_checkboxes = function () { this._data.core.themes.checkboxes = true; this.get_container_ul().removeClass("jstree-no-checkboxes"); }; /** * hide the node checkbox icons * @name hide_checkboxes() * @plugin checkbox */ this.hide_checkboxes = function () { this._data.core.themes.checkboxes = false; this.get_container_ul().addClass("jstree-no-checkboxes"); }; /** * toggle the node icons * @name toggle_checkboxes() * @plugin checkbox */ this.toggle_checkboxes = function () { if(this._data.core.themes.checkboxes) { this.hide_checkboxes(); } else { this.show_checkboxes(); } }; /** * checks if a node is in an undetermined state * @name is_undetermined(obj) * @param {mixed} obj * @return {Boolean} */ this.is_undetermined = function (obj) { obj = this.get_node(obj); var s = this.settings.checkbox.cascade, i, j, t = this.settings.checkbox.tie_selection, d = this._data[ t ? 'core' : 'checkbox' ].selected, m = this._model.data; if(!obj || obj.state[ t ? 'selected' : 'checked' ] === true || s.indexOf('undetermined') === -1 || (s.indexOf('down') === -1 && s.indexOf('up') === -1)) { return false; } if(!obj.state.loaded && obj.original.state.undetermined === true) { return true; } for(i = 0, j = obj.children_d.length; i < j; i++) { if($.inArray(obj.children_d[i], d) !== -1 || (!m[obj.children_d[i]].state.loaded && m[obj.children_d[i]].original.state.undetermined)) { return true; } } return false; }; this.activate_node = function (obj, e) { if(this.settings.checkbox.tie_selection && (this.settings.checkbox.whole_node || $(e.target).hasClass('jstree-checkbox'))) { e.ctrlKey = true; } if(this.settings.checkbox.tie_selection || (!this.settings.checkbox.whole_node && !$(e.target).hasClass('jstree-checkbox'))) { return parent.activate_node.call(this, obj, e); } if(this.is_checked(obj)) { this.uncheck_node(obj, e); } else { this.check_node(obj, e); } this.trigger('activate_node', { 'node' : this.get_node(obj) }); }; /** * check a node (only if tie_selection in checkbox settings is false, otherwise select_node will be called internally) * @name check_node(obj) * @param {mixed} obj an array can be used to check multiple nodes * @trigger check_node.jstree * @plugin checkbox */ this.check_node = function (obj, e) { if(this.settings.checkbox.tie_selection) { return this.select_node(obj, false, true, e); } var dom, t1, t2, th; if($.isArray(obj)) { obj = obj.slice(); for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { this.check_node(obj[t1], e); } return true; } obj = this.get_node(obj); if(!obj || obj.id === '#') { return false; } dom = this.get_node(obj, true); if(!obj.state.checked) { obj.state.checked = true; this._data.checkbox.selected.push(obj.id); if(dom && dom.length) { dom.children('.jstree-anchor').addClass('jstree-checked'); } /** * triggered when an node is checked (only if tie_selection in checkbox settings is false) * @event * @name check_node.jstree * @param {Object} node * @param {Array} selected the current selection * @param {Object} event the event (if any) that triggered this check_node * @plugin checkbox */ this.trigger('check_node', { 'node' : obj, 'selected' : this._data.checkbox.selected, 'event' : e }); } }; /** * uncheck a node (only if tie_selection in checkbox settings is false, otherwise deselect_node will be called internally) * @name deselect_node(obj) * @param {mixed} obj an array can be used to deselect multiple nodes * @trigger uncheck_node.jstree * @plugin checkbox */ this.uncheck_node = function (obj, e) { if(this.settings.checkbox.tie_selection) { return this.deselect_node(obj, false, e); } var t1, t2, dom; if($.isArray(obj)) { obj = obj.slice(); for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { this.uncheck_node(obj[t1], e); } return true; } obj = this.get_node(obj); if(!obj || obj.id === '#') { return false; } dom = this.get_node(obj, true); if(obj.state.checked) { obj.state.checked = false; this._data.checkbox.selected = $.vakata.array_remove_item(this._data.checkbox.selected, obj.id); if(dom.length) { dom.children('.jstree-anchor').removeClass('jstree-checked'); } /** * triggered when an node is unchecked (only if tie_selection in checkbox settings is false) * @event * @name uncheck_node.jstree * @param {Object} node * @param {Array} selected the current selection * @param {Object} event the event (if any) that triggered this uncheck_node * @plugin checkbox */ this.trigger('uncheck_node', { 'node' : obj, 'selected' : this._data.checkbox.selected, 'event' : e }); } }; /** * checks all nodes in the tree (only if tie_selection in checkbox settings is false, otherwise select_all will be called internally) * @name check_all() * @trigger check_all.jstree, changed.jstree * @plugin checkbox */ this.check_all = function () { if(this.settings.checkbox.tie_selection) { return this.select_all(); } var tmp = this._data.checkbox.selected.concat([]), i, j; this._data.checkbox.selected = this._model.data['#'].children_d.concat(); for(i = 0, j = this._data.checkbox.selected.length; i < j; i++) { if(this._model.data[this._data.checkbox.selected[i]]) { this._model.data[this._data.checkbox.selected[i]].state.checked = true; } } this.redraw(true); /** * triggered when all nodes are checked (only if tie_selection in checkbox settings is false) * @event * @name check_all.jstree * @param {Array} selected the current selection * @plugin checkbox */ this.trigger('check_all', { 'selected' : this._data.checkbox.selected }); }; /** * uncheck all checked nodes (only if tie_selection in checkbox settings is false, otherwise deselect_all will be called internally) * @name uncheck_all() * @trigger uncheck_all.jstree * @plugin checkbox */ this.uncheck_all = function () { if(this.settings.checkbox.tie_selection) { return this.deselect_all(); } var tmp = this._data.checkbox.selected.concat([]), i, j; for(i = 0, j = this._data.checkbox.selected.length; i < j; i++) { if(this._model.data[this._data.checkbox.selected[i]]) { this._model.data[this._data.checkbox.selected[i]].state.checked = false; } } this._data.checkbox.selected = []; this.element.find('.jstree-checked').removeClass('jstree-checked'); /** * triggered when all nodes are unchecked (only if tie_selection in checkbox settings is false) * @event * @name uncheck_all.jstree * @param {Object} node the previous selection * @param {Array} selected the current selection * @plugin checkbox */ this.trigger('uncheck_all', { 'selected' : this._data.checkbox.selected, 'node' : tmp }); }; /** * checks if a node is checked (if tie_selection is on in the settings this function will return the same as is_selected) * @name is_checked(obj) * @param {mixed} obj * @return {Boolean} * @plugin checkbox */ this.is_checked = function (obj) { if(this.settings.checkbox.tie_selection) { return this.is_selected(obj); } obj = this.get_node(obj); if(!obj || obj.id === '#') { return false; } return obj.state.checked; }; /** * get an array of all checked nodes (if tie_selection is on in the settings this function will return the same as get_selected) * @name get_checked([full]) * @param {mixed} full if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned * @return {Array} * @plugin checkbox */ this.get_checked = function (full) { if(this.settings.checkbox.tie_selection) { return this.get_selected(full); } return full ? $.map(this._data.checkbox.selected, $.proxy(function (i) { return this.get_node(i); }, this)) : this._data.checkbox.selected; }; /** * get an array of all top level checked nodes (ignoring children of checked nodes) (if tie_selection is on in the settings this function will return the same as get_top_selected) * @name get_top_checked([full]) * @param {mixed} full if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned * @return {Array} * @plugin checkbox */ this.get_top_checked = function (full) { if(this.settings.checkbox.tie_selection) { return this.get_top_selected(full); } var tmp = this.get_checked(true), obj = {}, i, j, k, l; for(i = 0, j = tmp.length; i < j; i++) { obj[tmp[i].id] = tmp[i]; } for(i = 0, j = tmp.length; i < j; i++) { for(k = 0, l = tmp[i].children_d.length; k < l; k++) { if(obj[tmp[i].children_d[k]]) { delete obj[tmp[i].children_d[k]]; } } } tmp = []; for(i in obj) { if(obj.hasOwnProperty(i)) { tmp.push(i); } } return full ? $.map(tmp, $.proxy(function (i) { return this.get_node(i); }, this)) : tmp; }; /** * get an array of all bottom level checked nodes (ignoring selected parents) (if tie_selection is on in the settings this function will return the same as get_bottom_selected) * @name get_bottom_checked([full]) * @param {mixed} full if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned * @return {Array} * @plugin checkbox */ this.get_bottom_checked = function (full) { if(this.settings.checkbox.tie_selection) { return this.get_bottom_selected(full); } var tmp = this.get_checked(true), obj = [], i, j; for(i = 0, j = tmp.length; i < j; i++) { if(!tmp[i].children.length) { obj.push(tmp[i].id); } } return full ? $.map(obj, $.proxy(function (i) { return this.get_node(i); }, this)) : obj; }; }; // include the checkbox plugin by default // $.jstree.defaults.plugins.push("checkbox"); /** * ### Contextmenu plugin * * Shows a context menu when a node is right-clicked. */ // TODO: move logic outside of function + check multiple move /** * stores all defaults for the contextmenu plugin * @name $.jstree.defaults.contextmenu * @plugin contextmenu */ $.jstree.defaults.contextmenu = { /** * a boolean indicating if the node should be selected when the context menu is invoked on it. Defaults to `true`. * @name $.jstree.defaults.contextmenu.select_node * @plugin contextmenu */ select_node : true, /** * a boolean indicating if the menu should be shown aligned with the node. Defaults to `true`, otherwise the mouse coordinates are used. * @name $.jstree.defaults.contextmenu.show_at_node * @plugin contextmenu */ show_at_node : true, /** * an object of actions, or a function that accepts a node and a callback function and calls the callback function with an object of actions available for that node (you can also return the items too). * * Each action consists of a key (a unique name) and a value which is an object with the following properties (only label and action are required): * * * `separator_before` - a boolean indicating if there should be a separator before this item * * `separator_after` - a boolean indicating if there should be a separator after this item * * `_disabled` - a boolean indicating if this action should be disabled * * `label` - a string - the name of the action (could be a function returning a string) * * `action` - a function to be executed if this item is chosen * * `icon` - a string, can be a path to an icon or a className, if using an image that is in the current directory use a `./` prefix, otherwise it will be detected as a class * * `shortcut` - keyCode which will trigger the action if the menu is open (for example `113` for rename, which equals F2) * * `shortcut_label` - shortcut label (like for example `F2` for rename) * * @name $.jstree.defaults.contextmenu.items * @plugin contextmenu */ items : function (o, cb) { // Could be an object directly return { "create" : { "separator_before" : false, "separator_after" : true, "_disabled" : false, //(this.check("create_node", data.reference, {}, "last")), "label" : "Create", "action" : function (data) { var inst = $.jstree.reference(data.reference), obj = inst.get_node(data.reference); inst.create_node(obj, {}, "last", function (new_node) { setTimeout(function () { inst.edit(new_node); },0); }); } }, "rename" : { "separator_before" : false, "separator_after" : false, "_disabled" : false, //(this.check("rename_node", data.reference, this.get_parent(data.reference), "")), "label" : "Rename", /* "shortcut" : 113, "shortcut_label" : 'F2', "icon" : "glyphicon glyphicon-leaf", */ "action" : function (data) { var inst = $.jstree.reference(data.reference), obj = inst.get_node(data.reference); inst.edit(obj); } }, "remove" : { "separator_before" : false, "icon" : false, "separator_after" : false, "_disabled" : false, //(this.check("delete_node", data.reference, this.get_parent(data.reference), "")), "label" : "Delete", "action" : function (data) { var inst = $.jstree.reference(data.reference), obj = inst.get_node(data.reference); if(inst.is_selected(obj)) { inst.delete_node(inst.get_selected()); } else { inst.delete_node(obj); } } }, "ccp" : { "separator_before" : true, "icon" : false, "separator_after" : false, "label" : "Edit", "action" : false, "submenu" : { "cut" : { "separator_before" : false, "separator_after" : false, "label" : "Cut", "action" : function (data) { var inst = $.jstree.reference(data.reference), obj = inst.get_node(data.reference); if(inst.is_selected(obj)) { inst.cut(inst.get_selected()); } else { inst.cut(obj); } } }, "copy" : { "separator_before" : false, "icon" : false, "separator_after" : false, "label" : "Copy", "action" : function (data) { var inst = $.jstree.reference(data.reference), obj = inst.get_node(data.reference); if(inst.is_selected(obj)) { inst.copy(inst.get_selected()); } else { inst.copy(obj); } } }, "paste" : { "separator_before" : false, "icon" : false, "_disabled" : function (data) { return !$.jstree.reference(data.reference).can_paste(); }, "separator_after" : false, "label" : "Paste", "action" : function (data) { var inst = $.jstree.reference(data.reference), obj = inst.get_node(data.reference); inst.paste(obj); } } } } }; } }; $.jstree.plugins.contextmenu = function (options, parent) { this.bind = function () { parent.bind.call(this); var last_ts = 0; this.element .on("contextmenu.jstree", ".jstree-anchor", $.proxy(function (e) { e.preventDefault(); last_ts = e.ctrlKey ? e.timeStamp : 0; if(!this.is_loading(e.currentTarget)) { this.show_contextmenu(e.currentTarget, e.pageX, e.pageY, e); } }, this)) .on("click.jstree", ".jstree-anchor", $.proxy(function (e) { if(this._data.contextmenu.visible && (!last_ts || e.timeStamp - last_ts > 250)) { // work around safari & macOS ctrl+click $.vakata.context.hide(); } }, this)); /* if(!('oncontextmenu' in document.body) && ('ontouchstart' in document.body)) { var el = null, tm = null; this.element .on("touchstart", ".jstree-anchor", function (e) { el = e.currentTarget; tm = +new Date(); $(document).one("touchend", function (e) { e.target = document.elementFromPoint(e.originalEvent.targetTouches[0].pageX - window.pageXOffset, e.originalEvent.targetTouches[0].pageY - window.pageYOffset); e.currentTarget = e.target; tm = ((+(new Date())) - tm); if(e.target === el && tm > 600 && tm < 1000) { e.preventDefault(); $(el).trigger('contextmenu', e); } el = null; tm = null; }); }); } */ $(document).on("context_hide.vakata.jstree", $.proxy(function () { this._data.contextmenu.visible = false; }, this)); }; this.teardown = function () { if(this._data.contextmenu.visible) { $.vakata.context.hide(); } parent.teardown.call(this); }; /** * prepare and show the context menu for a node * @name show_contextmenu(obj [, x, y]) * @param {mixed} obj the node * @param {Number} x the x-coordinate relative to the document to show the menu at * @param {Number} y the y-coordinate relative to the document to show the menu at * @param {Object} e the event if available that triggered the contextmenu * @plugin contextmenu * @trigger show_contextmenu.jstree */ this.show_contextmenu = function (obj, x, y, e) { obj = this.get_node(obj); if(!obj || obj.id === '#') { return false; } var s = this.settings.contextmenu, d = this.get_node(obj, true), a = d.children(".jstree-anchor"), o = false, i = false; if(s.show_at_node || x === undefined || y === undefined) { o = a.offset(); x = o.left; y = o.top + this._data.core.li_height; } if(this.settings.contextmenu.select_node && !this.is_selected(obj)) { this.activate_node(obj, e); } i = s.items; if($.isFunction(i)) { i = i.call(this, obj, $.proxy(function (i) { this._show_contextmenu(obj, x, y, i); }, this)); } if($.isPlainObject(i)) { this._show_contextmenu(obj, x, y, i); } }; /** * show the prepared context menu for a node * @name _show_contextmenu(obj, x, y, i) * @param {mixed} obj the node * @param {Number} x the x-coordinate relative to the document to show the menu at * @param {Number} y the y-coordinate relative to the document to show the menu at * @param {Number} i the object of items to show * @plugin contextmenu * @trigger show_contextmenu.jstree * @private */ this._show_contextmenu = function (obj, x, y, i) { var d = this.get_node(obj, true), a = d.children(".jstree-anchor"); $(document).one("context_show.vakata.jstree", $.proxy(function (e, data) { var cls = 'jstree-contextmenu jstree-' + this.get_theme() + '-contextmenu'; $(data.element).addClass(cls); }, this)); this._data.contextmenu.visible = true; $.vakata.context.show(a, { 'x' : x, 'y' : y }, i); /** * triggered when the contextmenu is shown for a node * @event * @name show_contextmenu.jstree * @param {Object} node the node * @param {Number} x the x-coordinate of the menu relative to the document * @param {Number} y the y-coordinate of the menu relative to the document * @plugin contextmenu */ this.trigger('show_contextmenu', { "node" : obj, "x" : x, "y" : y }); }; }; // contextmenu helper (function ($) { var right_to_left = false, vakata_context = { element : false, reference : false, position_x : 0, position_y : 0, items : [], html : "", is_visible : false }; $.vakata.context = { settings : { hide_onmouseleave : 0, icons : true }, _trigger : function (event_name) { $(document).triggerHandler("context_" + event_name + ".vakata", { "reference" : vakata_context.reference, "element" : vakata_context.element, "position" : { "x" : vakata_context.position_x, "y" : vakata_context.position_y } }); }, _execute : function (i) { i = vakata_context.items[i]; return i && (!i._disabled || ($.isFunction(i._disabled) && !i._disabled({ "item" : i, "reference" : vakata_context.reference, "element" : vakata_context.element }))) && i.action ? i.action.call(null, { "item" : i, "reference" : vakata_context.reference, "element" : vakata_context.element, "position" : { "x" : vakata_context.position_x, "y" : vakata_context.position_y } }) : false; }, _parse : function (o, is_callback) { if(!o) { return false; } if(!is_callback) { vakata_context.html = ""; vakata_context.items = []; } var str = "", sep = false, tmp; if(is_callback) { str += "<"+"ul>"; } $.each(o, function (i, val) { if(!val) { return true; } vakata_context.items.push(val); if(!sep && val.separator_before) { str += "<"+"li class='vakata-context-separator'><"+"a href='#' " + ($.vakata.context.settings.icons ? '' : 'style="margin-left:0px;"') + "> <"+"/a><"+"/li>"; } sep = false; str += "<"+"li class='" + (val._class || "") + (val._disabled === true || ($.isFunction(val._disabled) && val._disabled({ "item" : val, "reference" : vakata_context.reference, "element" : vakata_context.element })) ? " vakata-contextmenu-disabled " : "") + "' "+(val.shortcut?" data-shortcut='"+val.shortcut+"' ":'')+">"; str += "<"+"a href='#' rel='" + (vakata_context.items.length - 1) + "'>"; if($.vakata.context.settings.icons) { str += "<"+"i "; if(val.icon) { if(val.icon.indexOf("/") !== -1 || val.icon.indexOf(".") !== -1) { str += " style='background:url(\"" + val.icon + "\") center center no-repeat' "; } else { str += " class='" + val.icon + "' "; } } str += "><"+"/i><"+"span class='vakata-contextmenu-sep'> <"+"/span>"; } str += ($.isFunction(val.label) ? val.label({ "item" : i, "reference" : vakata_context.reference, "element" : vakata_context.element }) : val.label) + (val.shortcut?' <span class="vakata-contextmenu-shortcut vakata-contextmenu-shortcut-'+val.shortcut+'">'+ (val.shortcut_label || '') +'</span>':'') + "<"+"/a>"; if(val.submenu) { tmp = $.vakata.context._parse(val.submenu, true); if(tmp) { str += tmp; } } str += "<"+"/li>"; if(val.separator_after) { str += "<"+"li class='vakata-context-separator'><"+"a href='#' " + ($.vakata.context.settings.icons ? '' : 'style="margin-left:0px;"') + "> <"+"/a><"+"/li>"; sep = true; } }); str = str.replace(/<li class\='vakata-context-separator'\><\/li\>$/,""); if(is_callback) { str += "</ul>"; } /** * triggered on the document when the contextmenu is parsed (HTML is built) * @event * @plugin contextmenu * @name context_parse.vakata * @param {jQuery} reference the element that was right clicked * @param {jQuery} element the DOM element of the menu itself * @param {Object} position the x & y coordinates of the menu */ if(!is_callback) { vakata_context.html = str; $.vakata.context._trigger("parse"); } return str.length > 10 ? str : false; }, _show_submenu : function (o) { o = $(o); if(!o.length || !o.children("ul").length) { return; } var e = o.children("ul"), x = o.offset().left + o.outerWidth(), y = o.offset().top, w = e.width(), h = e.height(), dw = $(window).width() + $(window).scrollLeft(), dh = $(window).height() + $(window).scrollTop(); // може да се спести е една проверка - дали няма някой от класовете вече нагоре if(right_to_left) { o[x - (w + 10 + o.outerWidth()) < 0 ? "addClass" : "removeClass"]("vakata-context-left"); } else { o[x + w + 10 > dw ? "addClass" : "removeClass"]("vakata-context-right"); } if(y + h + 10 > dh) { e.css("bottom","-1px"); } e.show(); }, show : function (reference, position, data) { var o, e, x, y, w, h, dw, dh, cond = true; if(vakata_context.element && vakata_context.element.length) { vakata_context.element.width(''); } switch(cond) { case (!position && !reference): return false; case (!!position && !!reference): vakata_context.reference = reference; vakata_context.position_x = position.x; vakata_context.position_y = position.y; break; case (!position && !!reference): vakata_context.reference = reference; o = reference.offset(); vakata_context.position_x = o.left + reference.outerHeight(); vakata_context.position_y = o.top; break; case (!!position && !reference): vakata_context.position_x = position.x; vakata_context.position_y = position.y; break; } if(!!reference && !data && $(reference).data('vakata_contextmenu')) { data = $(reference).data('vakata_contextmenu'); } if($.vakata.context._parse(data)) { vakata_context.element.html(vakata_context.html); } if(vakata_context.items.length) { vakata_context.element.appendTo("body"); e = vakata_context.element; x = vakata_context.position_x; y = vakata_context.position_y; w = e.width(); h = e.height(); dw = $(window).width() + $(window).scrollLeft(); dh = $(window).height() + $(window).scrollTop(); if(right_to_left) { x -= e.outerWidth(); if(x < $(window).scrollLeft() + 20) { x = $(window).scrollLeft() + 20; } } if(x + w + 20 > dw) { x = dw - (w + 20); } if(y + h + 20 > dh) { y = dh - (h + 20); } vakata_context.element .css({ "left" : x, "top" : y }) .show() .find('a:eq(0)').focus().parent().addClass("vakata-context-hover"); vakata_context.is_visible = true; /** * triggered on the document when the contextmenu is shown * @event * @plugin contextmenu * @name context_show.vakata * @param {jQuery} reference the element that was right clicked * @param {jQuery} element the DOM element of the menu itself * @param {Object} position the x & y coordinates of the menu */ $.vakata.context._trigger("show"); } }, hide : function () { if(vakata_context.is_visible) { vakata_context.element.hide().find("ul").hide().end().find(':focus').blur().end().detach(); vakata_context.is_visible = false; /** * triggered on the document when the contextmenu is hidden * @event * @plugin contextmenu * @name context_hide.vakata * @param {jQuery} reference the element that was right clicked * @param {jQuery} element the DOM element of the menu itself * @param {Object} position the x & y coordinates of the menu */ $.vakata.context._trigger("hide"); } } }; $(function () { right_to_left = $("body").css("direction") === "rtl"; var to = false; vakata_context.element = $("<ul class='vakata-context'></ul>"); vakata_context.element .on("mouseenter", "li", function (e) { e.stopImmediatePropagation(); if($.contains(this, e.relatedTarget)) { // премахнато заради delegate mouseleave по-долу // $(this).find(".vakata-context-hover").removeClass("vakata-context-hover"); return; } if(to) { clearTimeout(to); } vakata_context.element.find(".vakata-context-hover").removeClass("vakata-context-hover").end(); $(this) .siblings().find("ul").hide().end().end() .parentsUntil(".vakata-context", "li").addBack().addClass("vakata-context-hover"); $.vakata.context._show_submenu(this); }) // тестово - дали не натоварва? .on("mouseleave", "li", function (e) { if($.contains(this, e.relatedTarget)) { return; } $(this).find(".vakata-context-hover").addBack().removeClass("vakata-context-hover"); }) .on("mouseleave", function (e) { $(this).find(".vakata-context-hover").removeClass("vakata-context-hover"); if($.vakata.context.settings.hide_onmouseleave) { to = setTimeout( (function (t) { return function () { $.vakata.context.hide(); }; }(this)), $.vakata.context.settings.hide_onmouseleave); } }) .on("click", "a", function (e) { e.preventDefault(); //}) //.on("mouseup", "a", function (e) { if(!$(this).blur().parent().hasClass("vakata-context-disabled") && $.vakata.context._execute($(this).attr("rel")) !== false) { $.vakata.context.hide(); } }) .on('keydown', 'a', function (e) { var o = null; switch(e.which) { case 13: case 32: e.type = "mouseup"; e.preventDefault(); $(e.currentTarget).trigger(e); break; case 37: if(vakata_context.is_visible) { vakata_context.element.find(".vakata-context-hover").last().parents("li:eq(0)").find("ul").hide().find(".vakata-context-hover").removeClass("vakata-context-hover").end().end().children('a').focus(); e.stopImmediatePropagation(); e.preventDefault(); } break; case 38: if(vakata_context.is_visible) { o = vakata_context.element.find("ul:visible").addBack().last().children(".vakata-context-hover").removeClass("vakata-context-hover").prevAll("li:not(.vakata-context-separator)").first(); if(!o.length) { o = vakata_context.element.find("ul:visible").addBack().last().children("li:not(.vakata-context-separator)").last(); } o.addClass("vakata-context-hover").children('a').focus(); e.stopImmediatePropagation(); e.preventDefault(); } break; case 39: if(vakata_context.is_visible) { vakata_context.element.find(".vakata-context-hover").last().children("ul").show().children("li:not(.vakata-context-separator)").removeClass("vakata-context-hover").first().addClass("vakata-context-hover").children('a').focus(); e.stopImmediatePropagation(); e.preventDefault(); } break; case 40: if(vakata_context.is_visible) { o = vakata_context.element.find("ul:visible").addBack().last().children(".vakata-context-hover").removeClass("vakata-context-hover").nextAll("li:not(.vakata-context-separator)").first(); if(!o.length) { o = vakata_context.element.find("ul:visible").addBack().last().children("li:not(.vakata-context-separator)").first(); } o.addClass("vakata-context-hover").children('a').focus(); e.stopImmediatePropagation(); e.preventDefault(); } break; case 27: $.vakata.context.hide(); e.preventDefault(); break; default: //console.log(e.which); break; } }) .on('keydown', function (e) { e.preventDefault(); var a = vakata_context.element.find('.vakata-contextmenu-shortcut-' + e.which).parent(); if(a.parent().not('.vakata-context-disabled')) { a.click(); } }); $(document) .on("mousedown.vakata.jstree", function (e) { if(vakata_context.is_visible && !$.contains(vakata_context.element[0], e.target)) { $.vakata.context.hide(); } }) .on("context_show.vakata.jstree", function (e, data) { vakata_context.element.find("li:has(ul)").children("a").addClass("vakata-context-parent"); if(right_to_left) { vakata_context.element.addClass("vakata-context-rtl").css("direction", "rtl"); } // also apply a RTL class? vakata_context.element.find("ul").hide().end(); }); }); }($)); // $.jstree.defaults.plugins.push("contextmenu"); /** * ### Drag'n'drop plugin * * Enables dragging and dropping of nodes in the tree, resulting in a move or copy operations. */ /** * stores all defaults for the drag'n'drop plugin * @name $.jstree.defaults.dnd * @plugin dnd */ $.jstree.defaults.dnd = { /** * a boolean indicating if a copy should be possible while dragging (by pressint the meta key or Ctrl). Defaults to `true`. * @name $.jstree.defaults.dnd.copy * @plugin dnd */ copy : true, /** * a number indicating how long a node should remain hovered while dragging to be opened. Defaults to `500`. * @name $.jstree.defaults.dnd.open_timeout * @plugin dnd */ open_timeout : 500, /** * a function invoked each time a node is about to be dragged, invoked in the tree's scope and receives the nodes about to be dragged as an argument (array) - return `false` to prevent dragging * @name $.jstree.defaults.dnd.is_draggable * @plugin dnd */ is_draggable : true, /** * a boolean indicating if checks should constantly be made while the user is dragging the node (as opposed to checking only on drop), default is `true` * @name $.jstree.defaults.dnd.check_while_dragging * @plugin dnd */ check_while_dragging : true, /** * a boolean indicating if nodes from this tree should only be copied with dnd (as opposed to moved), default is `false` * @name $.jstree.defaults.dnd.always_copy * @plugin dnd */ always_copy : false, /** * when dropping a node "inside", this setting indicates the position the node should go to - it can be an integer or a string: "first" (same as 0) or "last", default is `0` * @name $.jstree.defaults.dnd.inside_pos * @plugin dnd */ inside_pos : 0 }; // TODO: now check works by checking for each node individually, how about max_children, unique, etc? // TODO: drop somewhere else - maybe demo only? $.jstree.plugins.dnd = function (options, parent) { this.bind = function () { parent.bind.call(this); this.element .on('mousedown.jstree touchstart.jstree', '.jstree-anchor', $.proxy(function (e) { var obj = this.get_node(e.target), mlt = this.is_selected(obj) ? this.get_selected().length : 1; if(obj && obj.id && obj.id !== "#" && (e.which === 1 || e.type === "touchstart") && (this.settings.dnd.is_draggable === true || ($.isFunction(this.settings.dnd.is_draggable) && this.settings.dnd.is_draggable.call(this, (mlt > 1 ? this.get_selected(true) : [obj])))) ) { this.element.trigger('mousedown.jstree'); return $.vakata.dnd.start(e, { 'jstree' : true, 'origin' : this, 'obj' : this.get_node(obj,true), 'nodes' : mlt > 1 ? this.get_selected() : [obj.id] }, '<div id="jstree-dnd" class="jstree-' + this.get_theme() + ' jstree-' + this.get_theme() + '-' + this.get_theme_variant() + ' ' + ( this.settings.core.themes.responsive ? ' jstree-dnd-responsive' : '' ) + '"><i class="jstree-icon jstree-er"></i>' + (mlt > 1 ? mlt + ' ' + this.get_string('nodes') : this.get_text(e.currentTarget, true)) + '<ins class="jstree-copy" style="display:none;">+</ins></div>'); } }, this)); }; }; $(function() { // bind only once for all instances var lastmv = false, laster = false, opento = false, marker = $('<div id="jstree-marker"> </div>').hide(); //.appendTo('body'); $(document) .on('dnd_start.vakata.jstree', function (e, data) { lastmv = false; if(!data || !data.data || !data.data.jstree) { return; } marker.appendTo('body'); //.show(); }) .on('dnd_move.vakata.jstree', function (e, data) { if(opento) { clearTimeout(opento); } if(!data || !data.data || !data.data.jstree) { return; } // if we are hovering the marker image do nothing (can happen on "inside" drags) if(data.event.target.id && data.event.target.id === 'jstree-marker') { return; } var ins = $.jstree.reference(data.event.target), ref = false, off = false, rel = false, l, t, h, p, i, o, ok, t1, t2, op, ps, pr, ip, tm; // if we are over an instance if(ins && ins._data && ins._data.dnd) { marker.attr('class', 'jstree-' + ins.get_theme() + ( ins.settings.core.themes.responsive ? ' jstree-dnd-responsive' : '' )); data.helper .children().attr('class', 'jstree-' + ins.get_theme() + ' jstree-' + ins.get_theme() + '-' + ins.get_theme_variant() + ' ' + ( ins.settings.core.themes.responsive ? ' jstree-dnd-responsive' : '' )) .find('.jstree-copy:eq(0)')[ data.data.origin && (data.data.origin.settings.dnd.always_copy || (data.data.origin.settings.dnd.copy && (data.event.metaKey || data.event.ctrlKey))) ? 'show' : 'hide' ](); // if are hovering the container itself add a new root node if( (data.event.target === ins.element[0] || data.event.target === ins.get_container_ul()[0]) && ins.get_container_ul().children().length === 0) { ok = true; for(t1 = 0, t2 = data.data.nodes.length; t1 < t2; t1++) { ok = ok && ins.check( (data.data.origin && (data.data.origin.settings.dnd.always_copy || (data.data.origin.settings.dnd.copy && (data.event.metaKey || data.event.ctrlKey)) ) ? "copy_node" : "move_node"), (data.data.origin && data.data.origin !== ins ? data.data.origin.get_node(data.data.nodes[t1]) : data.data.nodes[t1]), '#', 'last', { 'dnd' : true, 'ref' : ins.get_node('#'), 'pos' : 'i', 'is_multi' : (data.data.origin && data.data.origin !== ins), 'is_foreign' : (!data.data.origin) }); if(!ok) { break; } } if(ok) { lastmv = { 'ins' : ins, 'par' : '#', 'pos' : 'last' }; marker.hide(); data.helper.find('.jstree-icon:eq(0)').removeClass('jstree-er').addClass('jstree-ok'); return; } } else { // if we are hovering a tree node ref = $(data.event.target).closest('.jstree-anchor'); if(ref && ref.length && ref.parent().is('.jstree-closed, .jstree-open, .jstree-leaf')) { off = ref.offset(); rel = data.event.pageY - off.top; h = ref.height(); if(rel < h / 3) { o = ['b', 'i', 'a']; } else if(rel > h - h / 3) { o = ['a', 'i', 'b']; } else { o = rel > h / 2 ? ['i', 'a', 'b'] : ['i', 'b', 'a']; } $.each(o, function (j, v) { switch(v) { case 'b': l = off.left - 6; t = off.top; p = ins.get_parent(ref); i = ref.parent().index(); break; case 'i': ip = ins.settings.dnd.inside_pos; tm = ins.get_node(ref.parent()); l = off.left - 2; t = off.top + h / 2 + 1; p = tm.id; i = ip === 'first' ? 0 : (ip === 'last' ? tm.children.length : Math.min(ip, tm.children.length)); break; case 'a': l = off.left - 6; t = off.top + h; p = ins.get_parent(ref); i = ref.parent().index() + 1; break; } /*! // TODO: moving inside, but the node is not yet loaded? // the check will work anyway, as when moving the node will be loaded first and checked again if(v === 'i' && !ins.is_loaded(p)) { } */ ok = true; for(t1 = 0, t2 = data.data.nodes.length; t1 < t2; t1++) { op = data.data.origin && (data.data.origin.settings.dnd.always_copy || (data.data.origin.settings.dnd.copy && (data.event.metaKey || data.event.ctrlKey))) ? "copy_node" : "move_node"; ps = i; if(op === "move_node" && v === 'a' && (data.data.origin && data.data.origin === ins) && p === ins.get_parent(data.data.nodes[t1])) { pr = ins.get_node(p); if(ps > $.inArray(data.data.nodes[t1], pr.children)) { ps -= 1; } } ok = ok && ( (ins && ins.settings && ins.settings.dnd && ins.settings.dnd.check_while_dragging === false) || ins.check(op, (data.data.origin && data.data.origin !== ins ? data.data.origin.get_node(data.data.nodes[t1]) : data.data.nodes[t1]), p, ps, { 'dnd' : true, 'ref' : ins.get_node(ref.parent()), 'pos' : v, 'is_multi' : (data.data.origin && data.data.origin !== ins), 'is_foreign' : (!data.data.origin) }) ); if(!ok) { if(ins && ins.last_error) { laster = ins.last_error(); } break; } } if(ok) { if(v === 'i' && ref.parent().is('.jstree-closed') && ins.settings.dnd.open_timeout) { opento = setTimeout((function (x, z) { return function () { x.open_node(z); }; }(ins, ref)), ins.settings.dnd.open_timeout); } lastmv = { 'ins' : ins, 'par' : p, 'pos' : v === 'i' && ip === 'last' && i === 0 && !ins.is_loaded(tm) ? 'last' : i }; marker.css({ 'left' : l + 'px', 'top' : t + 'px' }).show(); data.helper.find('.jstree-icon:eq(0)').removeClass('jstree-er').addClass('jstree-ok'); laster = {}; o = true; return false; } }); if(o === true) { return; } } } } lastmv = false; data.helper.find('.jstree-icon').removeClass('jstree-ok').addClass('jstree-er'); marker.hide(); }) .on('dnd_scroll.vakata.jstree', function (e, data) { if(!data || !data.data || !data.data.jstree) { return; } marker.hide(); lastmv = false; data.helper.find('.jstree-icon:eq(0)').removeClass('jstree-ok').addClass('jstree-er'); }) .on('dnd_stop.vakata.jstree', function (e, data) { if(opento) { clearTimeout(opento); } if(!data || !data.data || !data.data.jstree) { return; } marker.hide().detach(); var i, j, nodes = []; if(lastmv) { for(i = 0, j = data.data.nodes.length; i < j; i++) { nodes[i] = data.data.origin ? data.data.origin.get_node(data.data.nodes[i]) : data.data.nodes[i]; if(data.data.origin) { nodes[i].instance = data.data.origin; } } lastmv.ins[ data.data.origin && (data.data.origin.settings.dnd.always_copy || (data.data.origin.settings.dnd.copy && (data.event.metaKey || data.event.ctrlKey))) ? 'copy_node' : 'move_node' ](nodes, lastmv.par, lastmv.pos); for(i = 0, j = nodes.length; i < j; i++) { if(nodes[i].instance) { nodes[i].instance = null; } } } else { i = $(data.event.target).closest('.jstree'); if(i.length && laster && laster.error && laster.error === 'check') { i = i.jstree(true); if(i) { i.settings.core.error.call(this, laster); } } } }) .on('keyup.jstree keydown.jstree', function (e, data) { data = $.vakata.dnd._get(); if(data && data.data && data.data.jstree) { data.helper.find('.jstree-copy:eq(0)')[ data.data.origin && (data.data.origin.settings.dnd.always_copy || (data.data.origin.settings.dnd.copy && (e.metaKey || e.ctrlKey))) ? 'show' : 'hide' ](); } }); }); // helpers (function ($) { // private variable var vakata_dnd = { element : false, target : false, is_down : false, is_drag : false, helper : false, helper_w: 0, data : false, init_x : 0, init_y : 0, scroll_l: 0, scroll_t: 0, scroll_e: false, scroll_i: false, is_touch: false }; $.vakata.dnd = { settings : { scroll_speed : 10, scroll_proximity : 20, helper_left : 5, helper_top : 10, threshold : 5, threshold_touch : 50 }, _trigger : function (event_name, e) { var data = $.vakata.dnd._get(); data.event = e; $(document).triggerHandler("dnd_" + event_name + ".vakata", data); }, _get : function () { return { "data" : vakata_dnd.data, "element" : vakata_dnd.element, "helper" : vakata_dnd.helper }; }, _clean : function () { if(vakata_dnd.helper) { vakata_dnd.helper.remove(); } if(vakata_dnd.scroll_i) { clearInterval(vakata_dnd.scroll_i); vakata_dnd.scroll_i = false; } vakata_dnd = { element : false, target : false, is_down : false, is_drag : false, helper : false, helper_w: 0, data : false, init_x : 0, init_y : 0, scroll_l: 0, scroll_t: 0, scroll_e: false, scroll_i: false, is_touch: false }; $(document).off("mousemove.vakata.jstree touchmove.vakata.jstree", $.vakata.dnd.drag); $(document).off("mouseup.vakata.jstree touchend.vakata.jstree", $.vakata.dnd.stop); }, _scroll : function (init_only) { if(!vakata_dnd.scroll_e || (!vakata_dnd.scroll_l && !vakata_dnd.scroll_t)) { if(vakata_dnd.scroll_i) { clearInterval(vakata_dnd.scroll_i); vakata_dnd.scroll_i = false; } return false; } if(!vakata_dnd.scroll_i) { vakata_dnd.scroll_i = setInterval($.vakata.dnd._scroll, 100); return false; } if(init_only === true) { return false; } var i = vakata_dnd.scroll_e.scrollTop(), j = vakata_dnd.scroll_e.scrollLeft(); vakata_dnd.scroll_e.scrollTop(i + vakata_dnd.scroll_t * $.vakata.dnd.settings.scroll_speed); vakata_dnd.scroll_e.scrollLeft(j + vakata_dnd.scroll_l * $.vakata.dnd.settings.scroll_speed); if(i !== vakata_dnd.scroll_e.scrollTop() || j !== vakata_dnd.scroll_e.scrollLeft()) { /** * triggered on the document when a drag causes an element to scroll * @event * @plugin dnd * @name dnd_scroll.vakata * @param {Mixed} data any data supplied with the call to $.vakata.dnd.start * @param {DOM} element the DOM element being dragged * @param {jQuery} helper the helper shown next to the mouse * @param {jQuery} event the element that is scrolling */ $.vakata.dnd._trigger("scroll", vakata_dnd.scroll_e); } }, start : function (e, data, html) { if(e.type === "touchstart" && e.originalEvent && e.originalEvent.changedTouches && e.originalEvent.changedTouches[0]) { e.pageX = e.originalEvent.changedTouches[0].pageX; e.pageY = e.originalEvent.changedTouches[0].pageY; e.target = document.elementFromPoint(e.originalEvent.changedTouches[0].pageX - window.pageXOffset, e.originalEvent.changedTouches[0].pageY - window.pageYOffset); } if(vakata_dnd.is_drag) { $.vakata.dnd.stop({}); } try { e.currentTarget.unselectable = "on"; e.currentTarget.onselectstart = function() { return false; }; if(e.currentTarget.style) { e.currentTarget.style.MozUserSelect = "none"; } } catch(ignore) { } vakata_dnd.init_x = e.pageX; vakata_dnd.init_y = e.pageY; vakata_dnd.data = data; vakata_dnd.is_down = true; vakata_dnd.element = e.currentTarget; vakata_dnd.target = e.target; vakata_dnd.is_touch = e.type === "touchstart"; if(html !== false) { vakata_dnd.helper = $("<div id='vakata-dnd'></div>").html(html).css({ "display" : "block", "margin" : "0", "padding" : "0", "position" : "absolute", "top" : "-2000px", "lineHeight" : "16px", "zIndex" : "10000" }); } $(document).on("mousemove.vakata.jstree touchmove.vakata.jstree", $.vakata.dnd.drag); $(document).on("mouseup.vakata.jstree touchend.vakata.jstree", $.vakata.dnd.stop); return false; }, drag : function (e) { if(e.type === "touchmove" && e.originalEvent && e.originalEvent.changedTouches && e.originalEvent.changedTouches[0]) { e.pageX = e.originalEvent.changedTouches[0].pageX; e.pageY = e.originalEvent.changedTouches[0].pageY; e.target = document.elementFromPoint(e.originalEvent.changedTouches[0].pageX - window.pageXOffset, e.originalEvent.changedTouches[0].pageY - window.pageYOffset); } if(!vakata_dnd.is_down) { return; } if(!vakata_dnd.is_drag) { if( Math.abs(e.pageX - vakata_dnd.init_x) > (vakata_dnd.is_touch ? $.vakata.dnd.settings.threshold_touch : $.vakata.dnd.settings.threshold) || Math.abs(e.pageY - vakata_dnd.init_y) > (vakata_dnd.is_touch ? $.vakata.dnd.settings.threshold_touch : $.vakata.dnd.settings.threshold) ) { if(vakata_dnd.helper) { vakata_dnd.helper.appendTo("body"); vakata_dnd.helper_w = vakata_dnd.helper.outerWidth(); } vakata_dnd.is_drag = true; /** * triggered on the document when a drag starts * @event * @plugin dnd * @name dnd_start.vakata * @param {Mixed} data any data supplied with the call to $.vakata.dnd.start * @param {DOM} element the DOM element being dragged * @param {jQuery} helper the helper shown next to the mouse * @param {Object} event the event that caused the start (probably mousemove) */ $.vakata.dnd._trigger("start", e); } else { return; } } var d = false, w = false, dh = false, wh = false, dw = false, ww = false, dt = false, dl = false, ht = false, hl = false; vakata_dnd.scroll_t = 0; vakata_dnd.scroll_l = 0; vakata_dnd.scroll_e = false; $($(e.target).parentsUntil("body").addBack().get().reverse()) .filter(function () { return (/^auto|scroll$/).test($(this).css("overflow")) && (this.scrollHeight > this.offsetHeight || this.scrollWidth > this.offsetWidth); }) .each(function () { var t = $(this), o = t.offset(); if(this.scrollHeight > this.offsetHeight) { if(o.top + t.height() - e.pageY < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_t = 1; } if(e.pageY - o.top < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_t = -1; } } if(this.scrollWidth > this.offsetWidth) { if(o.left + t.width() - e.pageX < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_l = 1; } if(e.pageX - o.left < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_l = -1; } } if(vakata_dnd.scroll_t || vakata_dnd.scroll_l) { vakata_dnd.scroll_e = $(this); return false; } }); if(!vakata_dnd.scroll_e) { d = $(document); w = $(window); dh = d.height(); wh = w.height(); dw = d.width(); ww = w.width(); dt = d.scrollTop(); dl = d.scrollLeft(); if(dh > wh && e.pageY - dt < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_t = -1; } if(dh > wh && wh - (e.pageY - dt) < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_t = 1; } if(dw > ww && e.pageX - dl < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_l = -1; } if(dw > ww && ww - (e.pageX - dl) < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_l = 1; } if(vakata_dnd.scroll_t || vakata_dnd.scroll_l) { vakata_dnd.scroll_e = d; } } if(vakata_dnd.scroll_e) { $.vakata.dnd._scroll(true); } if(vakata_dnd.helper) { ht = parseInt(e.pageY + $.vakata.dnd.settings.helper_top, 10); hl = parseInt(e.pageX + $.vakata.dnd.settings.helper_left, 10); if(dh && ht + 25 > dh) { ht = dh - 50; } if(dw && hl + vakata_dnd.helper_w > dw) { hl = dw - (vakata_dnd.helper_w + 2); } vakata_dnd.helper.css({ left : hl + "px", top : ht + "px" }); } /** * triggered on the document when a drag is in progress * @event * @plugin dnd * @name dnd_move.vakata * @param {Mixed} data any data supplied with the call to $.vakata.dnd.start * @param {DOM} element the DOM element being dragged * @param {jQuery} helper the helper shown next to the mouse * @param {Object} event the event that caused this to trigger (most likely mousemove) */ $.vakata.dnd._trigger("move", e); return false; }, stop : function (e) { if(e.type === "touchend" && e.originalEvent && e.originalEvent.changedTouches && e.originalEvent.changedTouches[0]) { e.pageX = e.originalEvent.changedTouches[0].pageX; e.pageY = e.originalEvent.changedTouches[0].pageY; e.target = document.elementFromPoint(e.originalEvent.changedTouches[0].pageX - window.pageXOffset, e.originalEvent.changedTouches[0].pageY - window.pageYOffset); } if(vakata_dnd.is_drag) { /** * triggered on the document when a drag stops (the dragged element is dropped) * @event * @plugin dnd * @name dnd_stop.vakata * @param {Mixed} data any data supplied with the call to $.vakata.dnd.start * @param {DOM} element the DOM element being dragged * @param {jQuery} helper the helper shown next to the mouse * @param {Object} event the event that caused the stop */ $.vakata.dnd._trigger("stop", e); } else { if(e.type === "touchend" && e.target === vakata_dnd.target) { var to = setTimeout(function () { $(e.target).click(); }, 100); $(e.target).one('click', function() { if(to) { clearTimeout(to); } }); } } $.vakata.dnd._clean(); return false; } }; }($)); // include the dnd plugin by default // $.jstree.defaults.plugins.push("dnd"); /** * ### Search plugin * * Adds search functionality to jsTree. */ /** * stores all defaults for the search plugin * @name $.jstree.defaults.search * @plugin search */ $.jstree.defaults.search = { /** * a jQuery-like AJAX config, which jstree uses if a server should be queried for results. * * A `str` (which is the search string) parameter will be added with the request. The expected result is a JSON array with nodes that need to be opened so that matching nodes will be revealed. * Leave this setting as `false` to not query the server. You can also set this to a function, which will be invoked in the instance's scope and receive 2 parameters - the search string and the callback to call with the array of nodes to load. * @name $.jstree.defaults.search.ajax * @plugin search */ ajax : false, /** * Indicates if the search should be fuzzy or not (should `chnd3` match `child node 3`). Default is `false`. * @name $.jstree.defaults.search.fuzzy * @plugin search */ fuzzy : false, /** * Indicates if the search should be case sensitive. Default is `false`. * @name $.jstree.defaults.search.case_sensitive * @plugin search */ case_sensitive : false, /** * Indicates if the tree should be filtered to show only matching nodes (keep in mind this can be a heavy on large trees in old browsers). Default is `false`. * @name $.jstree.defaults.search.show_only_matches * @plugin search */ show_only_matches : false, /** * Indicates if all nodes opened to reveal the search result, should be closed when the search is cleared or a new search is performed. Default is `true`. * @name $.jstree.defaults.search.close_opened_onclear * @plugin search */ close_opened_onclear : true, /** * Indicates if only leaf nodes should be included in search results. Default is `false`. * @name $.jstree.defaults.search.search_leaves_only * @plugin search */ search_leaves_only : false, /** * If set to a function it wil be called in the instance's scope with two arguments - search string and node (where node will be every node in the structure, so use with caution). * If the function returns a truthy value the node will be considered a match (it might not be displayed if search_only_leaves is set to true and the node is not a leaf). Default is `false`. * @name $.jstree.defaults.search.search_callback * @plugin search */ search_callback : false }; $.jstree.plugins.search = function (options, parent) { this.bind = function () { parent.bind.call(this); this._data.search.str = ""; this._data.search.dom = $(); this._data.search.res = []; this._data.search.opn = []; this.element.on('before_open.jstree', $.proxy(function (e, data) { var i, j, f, r = this._data.search.res, s = [], o = $(); if(r && r.length) { this._data.search.dom = $(this.element[0].querySelectorAll('#' + $.map(r, function (v) { return "0123456789".indexOf(v[0]) !== -1 ? '\\3' + v[0] + ' ' + v.substr(1).replace($.jstree.idregex,'\\$&') : v.replace($.jstree.idregex,'\\$&'); }).join(', #'))); this._data.search.dom.children(".jstree-anchor").addClass('jstree-search'); if(this.settings.search.show_only_matches && this._data.search.res.length) { for(i = 0, j = r.length; i < j; i++) { s = s.concat(this.get_node(r[i]).parents); } s = $.vakata.array_remove_item($.vakata.array_unique(s),'#'); o = s.length ? $(this.element[0].querySelectorAll('#' + $.map(s, function (v) { return "0123456789".indexOf(v[0]) !== -1 ? '\\3' + v[0] + ' ' + v.substr(1).replace($.jstree.idregex,'\\$&') : v.replace($.jstree.idregex,'\\$&'); }).join(', #'))) : $(); this.element.find(".jstree-node").hide().filter('.jstree-last').filter(function() { return this.nextSibling; }).removeClass('jstree-last'); o = o.add(this._data.search.dom); o.parentsUntil(".jstree").addBack().show() .filter(".jstree-children").each(function () { $(this).children(".jstree-node:visible").eq(-1).addClass("jstree-last"); }); } } }, this)); if(this.settings.search.show_only_matches) { this.element .on("search.jstree", function (e, data) { if(data.nodes.length) { $(this).find(".jstree-node").hide().filter('.jstree-last').filter(function() { return this.nextSibling; }).removeClass('jstree-last'); data.nodes.parentsUntil(".jstree").addBack().show() .filter(".jstree-children").each(function () { $(this).children(".jstree-node:visible").eq(-1).addClass("jstree-last"); }); } }) .on("clear_search.jstree", function (e, data) { if(data.nodes.length) { $(this).find(".jstree-node").css("display","").filter('.jstree-last').filter(function() { return this.nextSibling; }).removeClass('jstree-last'); } }); } }; /** * used to search the tree nodes for a given string * @name search(str [, skip_async]) * @param {String} str the search string * @param {Boolean} skip_async if set to true server will not be queried even if configured * @plugin search * @trigger search.jstree */ this.search = function (str, skip_async) { if(str === false || $.trim(str.toString()) === "") { return this.clear_search(); } str = str.toString(); var s = this.settings.search, a = s.ajax ? s.ajax : false, f = null, r = [], p = [], i, j; if(this._data.search.res.length) { this.clear_search(); } if(!skip_async && a !== false) { if($.isFunction(a)) { return a.call(this, str, $.proxy(function (d) { if(d && d.d) { d = d.d; } this._load_nodes(!$.isArray(d) ? [] : $.vakata.array_unique(d), function () { this.search(str, true); }, true); }, this)); } else { a = $.extend({}, a); if(!a.data) { a.data = {}; } a.data.str = str; return $.ajax(a) .fail($.proxy(function () { this._data.core.last_error = { 'error' : 'ajax', 'plugin' : 'search', 'id' : 'search_01', 'reason' : 'Could not load search parents', 'data' : JSON.stringify(a) }; this.settings.core.error.call(this, this._data.core.last_error); }, this)) .done($.proxy(function (d) { if(d && d.d) { d = d.d; } this._load_nodes(!$.isArray(d) ? [] : $.vakata.array_unique(d), function () { this.search(str, true); }, true); }, this)); } } this._data.search.str = str; this._data.search.dom = $(); this._data.search.res = []; this._data.search.opn = []; f = new $.vakata.search(str, true, { caseSensitive : s.case_sensitive, fuzzy : s.fuzzy }); $.each(this._model.data, function (i, v) { if(v.text && ( (s.search_callback && s.search_callback.call(this, str, v)) || (!s.search_callback && f.search(v.text).isMatch) ) && (!s.search_leaves_only || (v.state.loaded && v.children.length === 0)) ) { r.push(i); p = p.concat(v.parents); } }); if(r.length) { p = $.vakata.array_unique(p); this._search_open(p); this._data.search.dom = $(this.element[0].querySelectorAll('#' + $.map(r, function (v) { return "0123456789".indexOf(v[0]) !== -1 ? '\\3' + v[0] + ' ' + v.substr(1).replace($.jstree.idregex,'\\$&') : v.replace($.jstree.idregex,'\\$&'); }).join(', #'))); this._data.search.res = r; this._data.search.dom.children(".jstree-anchor").addClass('jstree-search'); } /** * triggered after search is complete * @event * @name search.jstree * @param {jQuery} nodes a jQuery collection of matching nodes * @param {String} str the search string * @param {Array} res a collection of objects represeing the matching nodes * @plugin search */ this.trigger('search', { nodes : this._data.search.dom, str : str, res : this._data.search.res }); }; /** * used to clear the last search (removes classes and shows all nodes if filtering is on) * @name clear_search() * @plugin search * @trigger clear_search.jstree */ this.clear_search = function () { this._data.search.dom.children(".jstree-anchor").removeClass("jstree-search"); if(this.settings.search.close_opened_onclear) { this.close_node(this._data.search.opn, 0); } /** * triggered after search is complete * @event * @name clear_search.jstree * @param {jQuery} nodes a jQuery collection of matching nodes (the result from the last search) * @param {String} str the search string (the last search string) * @param {Array} res a collection of objects represeing the matching nodes (the result from the last search) * @plugin search */ this.trigger('clear_search', { 'nodes' : this._data.search.dom, str : this._data.search.str, res : this._data.search.res }); this._data.search.str = ""; this._data.search.res = []; this._data.search.opn = []; this._data.search.dom = $(); }; /** * opens nodes that need to be opened to reveal the search results. Used only internally. * @private * @name _search_open(d) * @param {Array} d an array of node IDs * @plugin search */ this._search_open = function (d) { var t = this; $.each(d.concat([]), function (i, v) { if(v === "#") { return true; } try { v = $('#' + v.replace($.jstree.idregex,'\\$&'), t.element); } catch(ignore) { } if(v && v.length) { if(t.is_closed(v)) { t._data.search.opn.push(v[0].id); t.open_node(v, function () { t._search_open(d); }, 0); } } }); }; }; // helpers (function ($) { // from http://kiro.me/projects/fuse.html $.vakata.search = function(pattern, txt, options) { options = options || {}; if(options.fuzzy !== false) { options.fuzzy = true; } pattern = options.caseSensitive ? pattern : pattern.toLowerCase(); var MATCH_LOCATION = options.location || 0, MATCH_DISTANCE = options.distance || 100, MATCH_THRESHOLD = options.threshold || 0.6, patternLen = pattern.length, matchmask, pattern_alphabet, match_bitapScore, search; if(patternLen > 32) { options.fuzzy = false; } if(options.fuzzy) { matchmask = 1 << (patternLen - 1); pattern_alphabet = (function () { var mask = {}, i = 0; for (i = 0; i < patternLen; i++) { mask[pattern.charAt(i)] = 0; } for (i = 0; i < patternLen; i++) { mask[pattern.charAt(i)] |= 1 << (patternLen - i - 1); } return mask; }()); match_bitapScore = function (e, x) { var accuracy = e / patternLen, proximity = Math.abs(MATCH_LOCATION - x); if(!MATCH_DISTANCE) { return proximity ? 1.0 : accuracy; } return accuracy + (proximity / MATCH_DISTANCE); }; } search = function (text) { text = options.caseSensitive ? text : text.toLowerCase(); if(pattern === text || text.indexOf(pattern) !== -1) { return { isMatch: true, score: 0 }; } if(!options.fuzzy) { return { isMatch: false, score: 1 }; } var i, j, textLen = text.length, scoreThreshold = MATCH_THRESHOLD, bestLoc = text.indexOf(pattern, MATCH_LOCATION), binMin, binMid, binMax = patternLen + textLen, lastRd, start, finish, rd, charMatch, score = 1, locations = []; if (bestLoc !== -1) { scoreThreshold = Math.min(match_bitapScore(0, bestLoc), scoreThreshold); bestLoc = text.lastIndexOf(pattern, MATCH_LOCATION + patternLen); if (bestLoc !== -1) { scoreThreshold = Math.min(match_bitapScore(0, bestLoc), scoreThreshold); } } bestLoc = -1; for (i = 0; i < patternLen; i++) { binMin = 0; binMid = binMax; while (binMin < binMid) { if (match_bitapScore(i, MATCH_LOCATION + binMid) <= scoreThreshold) { binMin = binMid; } else { binMax = binMid; } binMid = Math.floor((binMax - binMin) / 2 + binMin); } binMax = binMid; start = Math.max(1, MATCH_LOCATION - binMid + 1); finish = Math.min(MATCH_LOCATION + binMid, textLen) + patternLen; rd = new Array(finish + 2); rd[finish + 1] = (1 << i) - 1; for (j = finish; j >= start; j--) { charMatch = pattern_alphabet[text.charAt(j - 1)]; if (i === 0) { rd[j] = ((rd[j + 1] << 1) | 1) & charMatch; } else { rd[j] = ((rd[j + 1] << 1) | 1) & charMatch | (((lastRd[j + 1] | lastRd[j]) << 1) | 1) | lastRd[j + 1]; } if (rd[j] & matchmask) { score = match_bitapScore(i, j - 1); if (score <= scoreThreshold) { scoreThreshold = score; bestLoc = j - 1; locations.push(bestLoc); if (bestLoc > MATCH_LOCATION) { start = Math.max(1, 2 * MATCH_LOCATION - bestLoc); } else { break; } } } } if (match_bitapScore(i + 1, MATCH_LOCATION) > scoreThreshold) { break; } lastRd = rd; } return { isMatch: bestLoc >= 0, score: score }; }; return txt === true ? { 'search' : search } : search(txt); }; }($)); // include the search plugin by default // $.jstree.defaults.plugins.push("search"); /** * ### Sort plugin * * Automatically sorts all siblings in the tree according to a sorting function. */ /** * the settings function used to sort the nodes. * It is executed in the tree's context, accepts two nodes as arguments and should return `1` or `-1`. * @name $.jstree.defaults.sort * @plugin sort */ $.jstree.defaults.sort = function (a, b) { //return this.get_type(a) === this.get_type(b) ? (this.get_text(a) > this.get_text(b) ? 1 : -1) : this.get_type(a) >= this.get_type(b); return this.get_text(a) > this.get_text(b) ? 1 : -1; }; $.jstree.plugins.sort = function (options, parent) { this.bind = function () { parent.bind.call(this); this.element .on("model.jstree", $.proxy(function (e, data) { this.sort(data.parent, true); }, this)) .on("rename_node.jstree create_node.jstree", $.proxy(function (e, data) { this.sort(data.parent || data.node.parent, false); this.redraw_node(data.parent || data.node.parent, true); }, this)) .on("move_node.jstree copy_node.jstree", $.proxy(function (e, data) { this.sort(data.parent, false); this.redraw_node(data.parent, true); }, this)); }; /** * used to sort a node's children * @private * @name sort(obj [, deep]) * @param {mixed} obj the node * @param {Boolean} deep if set to `true` nodes are sorted recursively. * @plugin sort * @trigger search.jstree */ this.sort = function (obj, deep) { var i, j; obj = this.get_node(obj); if(obj && obj.children && obj.children.length) { obj.children.sort($.proxy(this.settings.sort, this)); if(deep) { for(i = 0, j = obj.children_d.length; i < j; i++) { this.sort(obj.children_d[i], false); } } } }; }; // include the sort plugin by default // $.jstree.defaults.plugins.push("sort"); /** * ### State plugin * * Saves the state of the tree (selected nodes, opened nodes) on the user's computer using available options (localStorage, cookies, etc) */ var to = false; /** * stores all defaults for the state plugin * @name $.jstree.defaults.state * @plugin state */ $.jstree.defaults.state = { /** * A string for the key to use when saving the current tree (change if using multiple trees in your project). Defaults to `jstree`. * @name $.jstree.defaults.state.key * @plugin state */ key : 'jstree', /** * A space separated list of events that trigger a state save. Defaults to `changed.jstree open_node.jstree close_node.jstree`. * @name $.jstree.defaults.state.events * @plugin state */ events : 'changed.jstree open_node.jstree close_node.jstree', /** * Time in milliseconds after which the state will expire. Defaults to 'false' meaning - no expire. * @name $.jstree.defaults.state.ttl * @plugin state */ ttl : false, /** * A function that will be executed prior to restoring state with one argument - the state object. Can be used to clear unwanted parts of the state. * @name $.jstree.defaults.state.filter * @plugin state */ filter : false }; $.jstree.plugins.state = function (options, parent) { this.bind = function () { parent.bind.call(this); var bind = $.proxy(function () { this.element.on(this.settings.state.events, $.proxy(function () { if(to) { clearTimeout(to); } to = setTimeout($.proxy(function () { this.save_state(); }, this), 100); }, this)); }, this); this.element .on("ready.jstree", $.proxy(function (e, data) { this.element.one("restore_state.jstree", bind); if(!this.restore_state()) { bind(); } }, this)); }; /** * save the state * @name save_state() * @plugin state */ this.save_state = function () { var st = { 'state' : this.get_state(), 'ttl' : this.settings.state.ttl, 'sec' : +(new Date()) }; $.vakata.storage.set(this.settings.state.key, JSON.stringify(st)); }; /** * restore the state from the user's computer * @name restore_state() * @plugin state */ this.restore_state = function () { var k = $.vakata.storage.get(this.settings.state.key); if(!!k) { try { k = JSON.parse(k); } catch(ex) { return false; } } if(!!k && k.ttl && k.sec && +(new Date()) - k.sec > k.ttl) { return false; } if(!!k && k.state) { k = k.state; } if(!!k && $.isFunction(this.settings.state.filter)) { k = this.settings.state.filter.call(this, k); } if(!!k) { this.element.one("set_state.jstree", function (e, data) { data.instance.trigger('restore_state', { 'state' : $.extend(true, {}, k) }); }); this.set_state(k); return true; } return false; }; /** * clear the state on the user's computer * @name clear_state() * @plugin state */ this.clear_state = function () { return $.vakata.storage.del(this.settings.state.key); }; }; (function ($, undefined) { $.vakata.storage = { // simply specifying the functions in FF throws an error set : function (key, val) { return window.localStorage.setItem(key, val); }, get : function (key) { return window.localStorage.getItem(key); }, del : function (key) { return window.localStorage.removeItem(key); } }; }($)); // include the state plugin by default // $.jstree.defaults.plugins.push("state"); /** * ### Types plugin * * Makes it possible to add predefined types for groups of nodes, which make it possible to easily control nesting rules and icon for each group. */ /** * An object storing all types as key value pairs, where the key is the type name and the value is an object that could contain following keys (all optional). * * * `max_children` the maximum number of immediate children this node type can have. Do not specify or set to `-1` for unlimited. * * `max_depth` the maximum number of nesting this node type can have. A value of `1` would mean that the node can have children, but no grandchildren. Do not specify or set to `-1` for unlimited. * * `valid_children` an array of node type strings, that nodes of this type can have as children. Do not specify or set to `-1` for no limits. * * `icon` a string - can be a path to an icon or a className, if using an image that is in the current directory use a `./` prefix, otherwise it will be detected as a class. Omit to use the default icon from your theme. * * There are two predefined types: * * * `#` represents the root of the tree, for example `max_children` would control the maximum number of root nodes. * * `default` represents the default node - any settings here will be applied to all nodes that do not have a type specified. * * @name $.jstree.defaults.types * @plugin types */ $.jstree.defaults.types = { '#' : {}, 'default' : {} }; $.jstree.plugins.types = function (options, parent) { this.init = function (el, options) { var i, j; if(options && options.types && options.types['default']) { for(i in options.types) { if(i !== "default" && i !== "#" && options.types.hasOwnProperty(i)) { for(j in options.types['default']) { if(options.types['default'].hasOwnProperty(j) && options.types[i][j] === undefined) { options.types[i][j] = options.types['default'][j]; } } } } } parent.init.call(this, el, options); this._model.data['#'].type = '#'; }; this.refresh = function (skip_loading, forget_state) { parent.refresh.call(this, skip_loading, forget_state); this._model.data['#'].type = '#'; }; this.bind = function () { this.element .on('model.jstree', $.proxy(function (e, data) { var m = this._model.data, dpc = data.nodes, t = this.settings.types, i, j, c = 'default'; for(i = 0, j = dpc.length; i < j; i++) { c = 'default'; if(m[dpc[i]].original && m[dpc[i]].original.type && t[m[dpc[i]].original.type]) { c = m[dpc[i]].original.type; } if(m[dpc[i]].data && m[dpc[i]].data.jstree && m[dpc[i]].data.jstree.type && t[m[dpc[i]].data.jstree.type]) { c = m[dpc[i]].data.jstree.type; } m[dpc[i]].type = c; if(m[dpc[i]].icon === true && t[c].icon !== undefined) { m[dpc[i]].icon = t[c].icon; } } m['#'].type = '#'; }, this)); parent.bind.call(this); }; this.get_json = function (obj, options, flat) { var i, j, m = this._model.data, opt = options ? $.extend(true, {}, options, {no_id:false}) : {}, tmp = parent.get_json.call(this, obj, opt, flat); if(tmp === false) { return false; } if($.isArray(tmp)) { for(i = 0, j = tmp.length; i < j; i++) { tmp[i].type = tmp[i].id && m[tmp[i].id] && m[tmp[i].id].type ? m[tmp[i].id].type : "default"; if(options && options.no_id) { delete tmp[i].id; if(tmp[i].li_attr && tmp[i].li_attr.id) { delete tmp[i].li_attr.id; } } } } else { tmp.type = tmp.id && m[tmp.id] && m[tmp.id].type ? m[tmp.id].type : "default"; if(options && options.no_id) { tmp = this._delete_ids(tmp); } } return tmp; }; this._delete_ids = function (tmp) { if($.isArray(tmp)) { for(var i = 0, j = tmp.length; i < j; i++) { tmp[i] = this._delete_ids(tmp[i]); } return tmp; } delete tmp.id; if(tmp.li_attr && tmp.li_attr.id) { delete tmp.li_attr.id; } if(tmp.children && $.isArray(tmp.children)) { tmp.children = this._delete_ids(tmp.children); } return tmp; }; this.check = function (chk, obj, par, pos, more) { if(parent.check.call(this, chk, obj, par, pos, more) === false) { return false; } obj = obj && obj.id ? obj : this.get_node(obj); par = par && par.id ? par : this.get_node(par); var m = obj && obj.id ? $.jstree.reference(obj.id) : null, tmp, d, i, j; m = m && m._model && m._model.data ? m._model.data : null; switch(chk) { case "create_node": case "move_node": case "copy_node": if(chk !== 'move_node' || $.inArray(obj.id, par.children) === -1) { tmp = this.get_rules(par); if(tmp.max_children !== undefined && tmp.max_children !== -1 && tmp.max_children === par.children.length) { this._data.core.last_error = { 'error' : 'check', 'plugin' : 'types', 'id' : 'types_01', 'reason' : 'max_children prevents function: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) }; return false; } if(tmp.valid_children !== undefined && tmp.valid_children !== -1 && $.inArray((obj.type || 'default'), tmp.valid_children) === -1) { this._data.core.last_error = { 'error' : 'check', 'plugin' : 'types', 'id' : 'types_02', 'reason' : 'valid_children prevents function: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) }; return false; } if(m && obj.children_d && obj.parents) { d = 0; for(i = 0, j = obj.children_d.length; i < j; i++) { d = Math.max(d, m[obj.children_d[i]].parents.length); } d = d - obj.parents.length + 1; } if(d <= 0 || d === undefined) { d = 1; } do { if(tmp.max_depth !== undefined && tmp.max_depth !== -1 && tmp.max_depth < d) { this._data.core.last_error = { 'error' : 'check', 'plugin' : 'types', 'id' : 'types_03', 'reason' : 'max_depth prevents function: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) }; return false; } par = this.get_node(par.parent); tmp = this.get_rules(par); d++; } while(par); } break; } return true; }; /** * used to retrieve the type settings object for a node * @name get_rules(obj) * @param {mixed} obj the node to find the rules for * @return {Object} * @plugin types */ this.get_rules = function (obj) { obj = this.get_node(obj); if(!obj) { return false; } var tmp = this.get_type(obj, true); if(tmp.max_depth === undefined) { tmp.max_depth = -1; } if(tmp.max_children === undefined) { tmp.max_children = -1; } if(tmp.valid_children === undefined) { tmp.valid_children = -1; } return tmp; }; /** * used to retrieve the type string or settings object for a node * @name get_type(obj [, rules]) * @param {mixed} obj the node to find the rules for * @param {Boolean} rules if set to `true` instead of a string the settings object will be returned * @return {String|Object} * @plugin types */ this.get_type = function (obj, rules) { obj = this.get_node(obj); return (!obj) ? false : ( rules ? $.extend({ 'type' : obj.type }, this.settings.types[obj.type]) : obj.type); }; /** * used to change a node's type * @name set_type(obj, type) * @param {mixed} obj the node to change * @param {String} type the new type * @plugin types */ this.set_type = function (obj, type) { var t, t1, t2, old_type, old_icon; if($.isArray(obj)) { obj = obj.slice(); for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { this.set_type(obj[t1], type); } return true; } t = this.settings.types; obj = this.get_node(obj); if(!t[type] || !obj) { return false; } old_type = obj.type; old_icon = this.get_icon(obj); obj.type = type; if(old_icon === true || (t[old_type] && t[old_type].icon && old_icon === t[old_type].icon)) { this.set_icon(obj, t[type].icon !== undefined ? t[type].icon : true); } return true; }; }; // include the types plugin by default // $.jstree.defaults.plugins.push("types"); /** * ### Unique plugin * * Enforces that no nodes with the same name can coexist as siblings. */ /** * stores all defaults for the unique plugin * @name $.jstree.defaults.unique * @plugin unique */ $.jstree.defaults.unique = { /** * Indicates if the comparison should be case sensitive. Default is `false`. * @name $.jstree.defaults.unique.case_sensitive * @plugin unique */ case_sensitive : false, /** * A callback executed in the instance's scope when a new node is created and the name is already taken, the two arguments are the conflicting name and the counter. The default will produce results like `New node (2)`. * @name $.jstree.defaults.unique.duplicate * @plugin unique */ duplicate : function (name, counter) { return name + ' (' + counter + ')'; } }; $.jstree.plugins.unique = function (options, parent) { this.check = function (chk, obj, par, pos, more) { if(parent.check.call(this, chk, obj, par, pos, more) === false) { return false; } obj = obj && obj.id ? obj : this.get_node(obj); par = par && par.id ? par : this.get_node(par); if(!par || !par.children) { return true; } var n = chk === "rename_node" ? pos : obj.text, c = [], s = this.settings.unique.case_sensitive, m = this._model.data, i, j; for(i = 0, j = par.children.length; i < j; i++) { c.push(s ? m[par.children[i]].text : m[par.children[i]].text.toLowerCase()); } if(!s) { n = n.toLowerCase(); } switch(chk) { case "delete_node": return true; case "rename_node": i = ($.inArray(n, c) === -1 || (obj.text && obj.text[ s ? 'toString' : 'toLowerCase']() === n)); if(!i) { this._data.core.last_error = { 'error' : 'check', 'plugin' : 'unique', 'id' : 'unique_01', 'reason' : 'Child with name ' + n + ' already exists. Preventing: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) }; } return i; case "create_node": i = ($.inArray(n, c) === -1); if(!i) { this._data.core.last_error = { 'error' : 'check', 'plugin' : 'unique', 'id' : 'unique_04', 'reason' : 'Child with name ' + n + ' already exists. Preventing: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) }; } return i; case "copy_node": i = ($.inArray(n, c) === -1); if(!i) { this._data.core.last_error = { 'error' : 'check', 'plugin' : 'unique', 'id' : 'unique_02', 'reason' : 'Child with name ' + n + ' already exists. Preventing: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) }; } return i; case "move_node": i = (obj.parent === par.id || $.inArray(n, c) === -1); if(!i) { this._data.core.last_error = { 'error' : 'check', 'plugin' : 'unique', 'id' : 'unique_03', 'reason' : 'Child with name ' + n + ' already exists. Preventing: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) }; } return i; } return true; }; this.create_node = function (par, node, pos, callback, is_loaded) { if(!node || node.text === undefined) { if(par === null) { par = "#"; } par = this.get_node(par); if(!par) { return parent.create_node.call(this, par, node, pos, callback, is_loaded); } pos = pos === undefined ? "last" : pos; if(!pos.toString().match(/^(before|after)$/) && !is_loaded && !this.is_loaded(par)) { return parent.create_node.call(this, par, node, pos, callback, is_loaded); } if(!node) { node = {}; } var tmp, n, dpc, i, j, m = this._model.data, s = this.settings.unique.case_sensitive, cb = this.settings.unique.duplicate; n = tmp = this.get_string('New node'); dpc = []; for(i = 0, j = par.children.length; i < j; i++) { dpc.push(s ? m[par.children[i]].text : m[par.children[i]].text.toLowerCase()); } i = 1; while($.inArray(s ? n : n.toLowerCase(), dpc) !== -1) { n = cb.call(this, tmp, (++i)).toString(); } node.text = n; } return parent.create_node.call(this, par, node, pos, callback, is_loaded); }; }; // include the unique plugin by default // $.jstree.defaults.plugins.push("unique"); /** * ### Wholerow plugin * * Makes each node appear block level. Making selection easier. May cause slow down for large trees in old browsers. */ var div = document.createElement('DIV'); div.setAttribute('unselectable','on'); div.className = 'jstree-wholerow'; div.innerHTML = ' '; $.jstree.plugins.wholerow = function (options, parent) { this.bind = function () { parent.bind.call(this); this.element .on('ready.jstree set_state.jstree', $.proxy(function () { this.hide_dots(); }, this)) .on("init.jstree loading.jstree ready.jstree", $.proxy(function () { //div.style.height = this._data.core.li_height + 'px'; this.get_container_ul().addClass('jstree-wholerow-ul'); }, this)) .on("deselect_all.jstree", $.proxy(function (e, data) { this.element.find('.jstree-wholerow-clicked').removeClass('jstree-wholerow-clicked'); }, this)) .on("changed.jstree", $.proxy(function (e, data) { this.element.find('.jstree-wholerow-clicked').removeClass('jstree-wholerow-clicked'); var tmp = false, i, j; for(i = 0, j = data.selected.length; i < j; i++) { tmp = this.get_node(data.selected[i], true); if(tmp && tmp.length) { tmp.children('.jstree-wholerow').addClass('jstree-wholerow-clicked'); } } }, this)) .on("open_node.jstree", $.proxy(function (e, data) { this.get_node(data.node, true).find('.jstree-clicked').parent().children('.jstree-wholerow').addClass('jstree-wholerow-clicked'); }, this)) .on("hover_node.jstree dehover_node.jstree", $.proxy(function (e, data) { this.get_node(data.node, true).children('.jstree-wholerow')[e.type === "hover_node"?"addClass":"removeClass"]('jstree-wholerow-hovered'); }, this)) .on("contextmenu.jstree", ".jstree-wholerow", $.proxy(function (e) { e.preventDefault(); var tmp = $.Event('contextmenu', { metaKey : e.metaKey, ctrlKey : e.ctrlKey, altKey : e.altKey, shiftKey : e.shiftKey, pageX : e.pageX, pageY : e.pageY }); $(e.currentTarget).closest(".jstree-node").children(".jstree-anchor:eq(0)").trigger(tmp); }, this)) .on("click.jstree", ".jstree-wholerow", function (e) { e.stopImmediatePropagation(); var tmp = $.Event('click', { metaKey : e.metaKey, ctrlKey : e.ctrlKey, altKey : e.altKey, shiftKey : e.shiftKey }); $(e.currentTarget).closest(".jstree-node").children(".jstree-anchor:eq(0)").trigger(tmp).focus(); }) .on("click.jstree", ".jstree-leaf > .jstree-ocl", $.proxy(function (e) { e.stopImmediatePropagation(); var tmp = $.Event('click', { metaKey : e.metaKey, ctrlKey : e.ctrlKey, altKey : e.altKey, shiftKey : e.shiftKey }); $(e.currentTarget).closest(".jstree-node").children(".jstree-anchor:eq(0)").trigger(tmp).focus(); }, this)) .on("mouseover.jstree", ".jstree-wholerow, .jstree-icon", $.proxy(function (e) { e.stopImmediatePropagation(); this.hover_node(e.currentTarget); return false; }, this)) .on("mouseleave.jstree", ".jstree-node", $.proxy(function (e) { this.dehover_node(e.currentTarget); }, this)); }; this.teardown = function () { if(this.settings.wholerow) { this.element.find(".jstree-wholerow").remove(); } parent.teardown.call(this); }; this.redraw_node = function(obj, deep, callback) { obj = parent.redraw_node.call(this, obj, deep, callback); if(obj) { var tmp = div.cloneNode(true); //tmp.style.height = this._data.core.li_height + 'px'; if($.inArray(obj.id, this._data.core.selected) !== -1) { tmp.className += ' jstree-wholerow-clicked'; } obj.insertBefore(tmp, obj.childNodes[0]); } return obj; }; }; // include the wholerow plugin by default // $.jstree.defaults.plugins.push("wholerow"); (function ($) { if(document.registerElement) { var proto = Object.create(HTMLElement.prototype); proto.createdCallback = function () { var c = { core : {}, plugins : [] }, i; for(i in $.jstree.plugins) { if($.jstree.plugins.hasOwnProperty(i) && this.attributes[i]) { c.plugins.push(i); if(this.getAttribute(i) && JSON.parse(this.getAttribute(i))) { c[i] = JSON.parse(this.getAttribute(i)); } } } for(i in $.jstree.defaults.core) { if($.jstree.defaults.core.hasOwnProperty(i) && this.attributes[i]) { c.core[i] = JSON.parse(this.getAttribute(i)) || this.getAttribute(i); } } jQuery(this).jstree(c); }; // proto.attributeChangedCallback = function (name, previous, value) { }; try { document.registerElement("vakata-jstree", { prototype: proto }); } catch(ignore) { } } }(jQuery)); })); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/jstree-theme/themes/default/style.css ================================================ /* jsTree default theme */ .jstree-node, .jstree-children, .jstree-container-ul { display: block; margin: 0; padding: 0; list-style-type: none; list-style-image: none; } .jstree-node { white-space: nowrap; } .jstree-anchor { display: inline-block; color: black; white-space: nowrap; padding: 0 4px 0 1px; margin: 0; vertical-align: top; } .jstree-anchor:focus { outline: 0; } .jstree-anchor, .jstree-anchor:link, .jstree-anchor:visited, .jstree-anchor:hover, .jstree-anchor:active { text-decoration: none; color: inherit; } .jstree-icon { display: inline-block; text-decoration: none; margin: 0; padding: 0; vertical-align: top; text-align: center; } .jstree-icon:empty { display: inline-block; text-decoration: none; margin: 0; padding: 0; vertical-align: top; text-align: center; } .jstree-ocl { cursor: pointer; } .jstree-leaf > .jstree-ocl { cursor: default; } .jstree .jstree-open > .jstree-children { display: block; } .jstree .jstree-closed > .jstree-children, .jstree .jstree-leaf > .jstree-children { display: none; } .jstree-anchor > .jstree-themeicon { margin-right: 2px; } .jstree-no-icons .jstree-themeicon, .jstree-anchor > .jstree-themeicon-hidden { display: none; } .jstree-rtl .jstree-anchor { padding: 0 1px 0 4px; } .jstree-rtl .jstree-anchor > .jstree-themeicon { margin-left: 2px; margin-right: 0; } .jstree-rtl .jstree-node { margin-left: 0; } .jstree-rtl .jstree-container-ul > .jstree-node { margin-right: 0; } .jstree-wholerow-ul { position: relative; display: inline-block; min-width: 100%; } .jstree-wholerow-ul .jstree-leaf > .jstree-ocl { cursor: pointer; } .jstree-wholerow-ul .jstree-anchor, .jstree-wholerow-ul .jstree-icon { position: relative; } .jstree-wholerow-ul .jstree-wholerow { width: 100%; cursor: pointer; position: absolute; left: 0; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } .vakata-context { display: none; } .vakata-context, .vakata-context ul { margin: 0; padding: 2px; position: absolute; background: #f5f5f5; border: 1px solid #979797; -moz-box-shadow: 5px 5px 4px -4px #666666; -webkit-box-shadow: 2px 2px 2px #999999; box-shadow: 2px 2px 2px #999999; } .vakata-context ul { list-style: none; left: 100%; margin-top: -2.7em; margin-left: -4px; } .vakata-context .vakata-context-right ul { left: auto; right: 100%; margin-left: auto; margin-right: -4px; } .vakata-context li { list-style: none; display: inline; } .vakata-context li > a { display: block; padding: 0 2em 0 2em; text-decoration: none; width: auto; color: black; white-space: nowrap; line-height: 2.4em; -moz-text-shadow: 1px 1px 0 white; -webkit-text-shadow: 1px 1px 0 white; text-shadow: 1px 1px 0 white; -moz-border-radius: 1px; -webkit-border-radius: 1px; border-radius: 1px; } .vakata-context li > a:hover { position: relative; background-color: #e8eff7; -moz-box-shadow: 0 0 2px #0a6aa1; -webkit-box-shadow: 0 0 2px #0a6aa1; box-shadow: 0 0 2px #0a6aa1; } .vakata-context li > a.vakata-context-parent { background-image: url("data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAIORI4JlrqN1oMSnmmZDQUAOw=="); background-position: right center; background-repeat: no-repeat; } .vakata-context li > a:focus { outline: 0; } .vakata-context .vakata-context-hover > a { position: relative; background-color: #e8eff7; -moz-box-shadow: 0 0 2px #0a6aa1; -webkit-box-shadow: 0 0 2px #0a6aa1; box-shadow: 0 0 2px #0a6aa1; } .vakata-context .vakata-context-separator > a, .vakata-context .vakata-context-separator > a:hover { background: white; border: 0; border-top: 1px solid #e2e3e3; height: 1px; min-height: 1px; max-height: 1px; padding: 0; margin: 0 0 0 2.4em; border-left: 1px solid #e0e0e0; -moz-text-shadow: 0 0 0 transparent; -webkit-text-shadow: 0 0 0 transparent; text-shadow: 0 0 0 transparent; -moz-box-shadow: 0 0 0 transparent; -webkit-box-shadow: 0 0 0 transparent; box-shadow: 0 0 0 transparent; -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; } .vakata-context .vakata-contextmenu-disabled a, .vakata-context .vakata-contextmenu-disabled a:hover { color: silver; background-color: transparent; border: 0; box-shadow: 0 0 0; } .vakata-context li > a > i { text-decoration: none; display: inline-block; width: 2.4em; height: 2.4em; background: transparent; margin: 0 0 0 -2em; vertical-align: top; text-align: center; line-height: 2.4em; } .vakata-context li > a > i:empty { width: 2.4em; line-height: 2.4em; } .vakata-context li > a .vakata-contextmenu-sep { display: inline-block; width: 1px; height: 2.4em; background: white; margin: 0 0.5em 0 0; border-left: 1px solid #e2e3e3; } .vakata-context .vakata-contextmenu-shortcut { font-size: 0.8em; color: silver; opacity: 0.5; display: none; } .vakata-context-rtl ul { left: auto; right: 100%; margin-left: auto; margin-right: -4px; } .vakata-context-rtl li > a.vakata-context-parent { background-image: url("data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAINjI+AC7rWHIsPtmoxLAA7"); background-position: left center; background-repeat: no-repeat; } .vakata-context-rtl .vakata-context-separator > a { margin: 0 2.4em 0 0; border-left: 0; border-right: 1px solid #e2e3e3; } .vakata-context-rtl .vakata-context-left ul { right: auto; left: 100%; margin-left: -4px; margin-right: auto; } .vakata-context-rtl li > a > i { margin: 0 -2em 0 0; } .vakata-context-rtl li > a .vakata-contextmenu-sep { margin: 0 0 0 0.5em; border-left-color: white; background: #e2e3e3; } #jstree-marker { position: absolute; top: 0; left: 0; margin: -5px 0 0 0; padding: 0; border-right: 0; border-top: 5px solid transparent; border-bottom: 5px solid transparent; border-left: 5px solid; width: 0; height: 0; font-size: 0; line-height: 0; } #jstree-dnd { line-height: 16px; margin: 0; padding: 4px; } #jstree-dnd .jstree-icon, #jstree-dnd .jstree-copy { display: inline-block; text-decoration: none; margin: 0 2px 0 0; padding: 0; width: 16px; height: 16px; } #jstree-dnd .jstree-ok { background: green; } #jstree-dnd .jstree-er { background: red; } #jstree-dnd .jstree-copy { margin: 0 2px 0 2px; } .jstree-default .jstree-node, .jstree-default .jstree-icon { background-repeat: no-repeat; background-color: transparent; } .jstree-default .jstree-anchor, .jstree-default .jstree-wholerow { transition: background-color 0.15s, box-shadow 0.15s; } .jstree-default .jstree-hovered { background: #e7f4f9; border-radius: 2px; box-shadow: inset 0 0 1px #cccccc; } .jstree-default .jstree-clicked { background: #beebff; border-radius: 2px; box-shadow: inset 0 0 1px #999999; } .jstree-default .jstree-no-icons .jstree-anchor > .jstree-themeicon { display: none; } .jstree-default .jstree-disabled { background: transparent; color: #666666; } .jstree-default .jstree-disabled.jstree-hovered { background: transparent; box-shadow: none; } .jstree-default .jstree-disabled.jstree-clicked { background: #efefef; } .jstree-default .jstree-disabled > .jstree-icon { opacity: 0.8; filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'jstree-grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#jstree-grayscale"); /* Firefox 10+ */ filter: gray; /* IE6-9 */ -webkit-filter: grayscale(100%); /* Chrome 19+ & Safari 6+ */ } .jstree-default .jstree-search { font-style: italic; color: #8b0000; font-weight: bold; } .jstree-default .jstree-no-checkboxes .jstree-checkbox { display: none !important; } .jstree-default.jstree-checkbox-no-clicked .jstree-clicked { background: transparent; box-shadow: none; } .jstree-default.jstree-checkbox-no-clicked .jstree-clicked.jstree-hovered { background: #e7f4f9; } .jstree-default.jstree-checkbox-no-clicked > .jstree-wholerow-ul .jstree-wholerow-clicked { background: transparent; } .jstree-default.jstree-checkbox-no-clicked > .jstree-wholerow-ul .jstree-wholerow-clicked.jstree-wholerow-hovered { background: #e7f4f9; } .jstree-default > .jstree-striped { background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAMAAAB/qqA+AAAABlBMVEUAAAAAAAClZ7nPAAAAAnRSTlMNAMM9s3UAAAAXSURBVHjajcEBAQAAAIKg/H/aCQZ70AUBjAATb6YPDgAAAABJRU5ErkJggg==") left top repeat; } .jstree-default > .jstree-wholerow-ul .jstree-hovered, .jstree-default > .jstree-wholerow-ul .jstree-clicked { background: transparent; box-shadow: none; border-radius: 0; } .jstree-default .jstree-wholerow { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; } .jstree-default .jstree-wholerow-hovered { background: #e7f4f9; } .jstree-default .jstree-wholerow-clicked { background: #beebff; background: -moz-linear-gradient(top, #beebff 0%, #a8e4ff 100%); background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #beebff), color-stop(100%, #a8e4ff)); background: -webkit-linear-gradient(top, #beebff 0%, #a8e4ff 100%); background: -o-linear-gradient(top, #beebff 0%, #a8e4ff 100%); background: -ms-linear-gradient(top, #beebff 0%, #a8e4ff 100%); background: linear-gradient(to bottom, #beebff 0%, #a8e4ff 100%); /*filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='@color1', endColorstr='@color2',GradientType=0 );*/ } .jstree-default .jstree-node { min-height: 24px; line-height: 24px; margin-left: 24px; min-width: 24px; } .jstree-default .jstree-anchor { line-height: 24px; height: 24px; } .jstree-default .jstree-icon { width: 24px; height: 24px; line-height: 24px; } .jstree-default .jstree-icon:empty { width: 24px; height: 24px; line-height: 24px; } .jstree-default.jstree-rtl .jstree-node { margin-right: 24px; } .jstree-default .jstree-wholerow { height: 24px; } .jstree-default .jstree-node, .jstree-default .jstree-icon { background-image: url("32px.png"); } .jstree-default .jstree-node { background-position: -292px -4px; background-repeat: repeat-y; } .jstree-default .jstree-last { background: transparent; } .jstree-default .jstree-open > .jstree-ocl { background-position: -132px -4px; } .jstree-default .jstree-closed > .jstree-ocl { background-position: -100px -4px; } .jstree-default .jstree-leaf > .jstree-ocl { background-position: -68px -4px; } .jstree-default .jstree-themeicon { background-position: -260px -4px; } .jstree-default > .jstree-no-dots .jstree-node, .jstree-default > .jstree-no-dots .jstree-leaf > .jstree-ocl { background: transparent; } .jstree-default > .jstree-no-dots .jstree-open > .jstree-ocl { background-position: -36px -4px; } .jstree-default > .jstree-no-dots .jstree-closed > .jstree-ocl { background-position: -4px -4px; } .jstree-default .jstree-disabled { background: transparent; } .jstree-default .jstree-disabled.jstree-hovered { background: transparent; } .jstree-default .jstree-disabled.jstree-clicked { background: #efefef; } .jstree-default .jstree-checkbox { background-position: -164px -4px; } .jstree-default .jstree-checkbox:hover { background-position: -164px -36px; } .jstree-default.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox, .jstree-default .jstree-checked > .jstree-checkbox { background-position: -228px -4px; } .jstree-default.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover, .jstree-default .jstree-checked > .jstree-checkbox:hover { background-position: -228px -36px; } .jstree-default .jstree-anchor > .jstree-undetermined { background-position: -196px -4px; } .jstree-default .jstree-anchor > .jstree-undetermined:hover { background-position: -196px -36px; } .jstree-default > .jstree-striped { background-size: auto 48px; } .jstree-default.jstree-rtl .jstree-node { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg=="); background-position: 100% 1px; background-repeat: repeat-y; } .jstree-default.jstree-rtl .jstree-last { background: transparent; } .jstree-default.jstree-rtl .jstree-open > .jstree-ocl { background-position: -132px -36px; } .jstree-default.jstree-rtl .jstree-closed > .jstree-ocl { background-position: -100px -36px; } .jstree-default.jstree-rtl .jstree-leaf > .jstree-ocl { background-position: -68px -36px; } .jstree-default.jstree-rtl > .jstree-no-dots .jstree-node, .jstree-default.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl { background: transparent; } .jstree-default.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl { background-position: -36px -36px; } .jstree-default.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl { background-position: -4px -36px; } .jstree-default .jstree-themeicon-custom { background-color: transparent; background-image: none; background-position: 0 0; } .jstree-default > .jstree-container-ul .jstree-loading > .jstree-ocl { background: url("throbber.gif") center center no-repeat; } .jstree-default .jstree-file { background: url("32px.png") -100px -68px no-repeat; } .jstree-default .jstree-folder { background: url("32px.png") -260px -4px no-repeat; } .jstree-default > .jstree-container-ul > .jstree-node { margin-left: 0; margin-right: 0; } #jstree-dnd.jstree-default { line-height: 24px; padding: 0 4px; } #jstree-dnd.jstree-default .jstree-ok, #jstree-dnd.jstree-default .jstree-er { background-image: url("32px.png"); background-repeat: no-repeat; background-color: transparent; } #jstree-dnd.jstree-default i { background: transparent; width: 24px; height: 24px; line-height: 24px; } #jstree-dnd.jstree-default .jstree-ok { background-position: -4px -68px; } #jstree-dnd.jstree-default .jstree-er { background-position: -36px -68px; } .jstree-default.jstree-rtl .jstree-node { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg=="); } .jstree-default.jstree-rtl .jstree-last { background: transparent; } .jstree-default-small .jstree-node { min-height: 18px; line-height: 18px; margin-left: 18px; min-width: 18px; } .jstree-default-small .jstree-anchor { line-height: 18px; height: 18px; } .jstree-default-small .jstree-icon { width: 18px; height: 18px; line-height: 18px; } .jstree-default-small .jstree-icon:empty { width: 18px; height: 18px; line-height: 18px; } .jstree-default-small.jstree-rtl .jstree-node { margin-right: 18px; } .jstree-default-small .jstree-wholerow { height: 18px; } .jstree-default-small .jstree-node, .jstree-default-small .jstree-icon { background-image: url("32px.png"); } .jstree-default-small .jstree-node { background-position: -295px -7px; background-repeat: repeat-y; } .jstree-default-small .jstree-last { background: transparent; } .jstree-default-small .jstree-open > .jstree-ocl { background-position: -135px -7px; } .jstree-default-small .jstree-closed > .jstree-ocl { background-position: -103px -7px; } .jstree-default-small .jstree-leaf > .jstree-ocl { background-position: -71px -7px; } .jstree-default-small .jstree-themeicon { background-position: -263px -7px; } .jstree-default-small > .jstree-no-dots .jstree-node, .jstree-default-small > .jstree-no-dots .jstree-leaf > .jstree-ocl { background: transparent; } .jstree-default-small > .jstree-no-dots .jstree-open > .jstree-ocl { background-position: -39px -7px; } .jstree-default-small > .jstree-no-dots .jstree-closed > .jstree-ocl { background-position: -7px -7px; } .jstree-default-small .jstree-disabled { background: transparent; } .jstree-default-small .jstree-disabled.jstree-hovered { background: transparent; } .jstree-default-small .jstree-disabled.jstree-clicked { background: #efefef; } .jstree-default-small .jstree-checkbox { background-position: -167px -7px; } .jstree-default-small .jstree-checkbox:hover { background-position: -167px -39px; } .jstree-default-small.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox, .jstree-default-small .jstree-checked > .jstree-checkbox { background-position: -231px -7px; } .jstree-default-small.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover, .jstree-default-small .jstree-checked > .jstree-checkbox:hover { background-position: -231px -39px; } .jstree-default-small .jstree-anchor > .jstree-undetermined { background-position: -199px -7px; } .jstree-default-small .jstree-anchor > .jstree-undetermined:hover { background-position: -199px -39px; } .jstree-default-small > .jstree-striped { background-size: auto 36px; } .jstree-default-small.jstree-rtl .jstree-node { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg=="); background-position: 100% 1px; background-repeat: repeat-y; } .jstree-default-small.jstree-rtl .jstree-last { background: transparent; } .jstree-default-small.jstree-rtl .jstree-open > .jstree-ocl { background-position: -135px -39px; } .jstree-default-small.jstree-rtl .jstree-closed > .jstree-ocl { background-position: -103px -39px; } .jstree-default-small.jstree-rtl .jstree-leaf > .jstree-ocl { background-position: -71px -39px; } .jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-node, .jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl { background: transparent; } .jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl { background-position: -39px -39px; } .jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl { background-position: -7px -39px; } .jstree-default-small .jstree-themeicon-custom { background-color: transparent; background-image: none; background-position: 0 0; } .jstree-default-small > .jstree-container-ul .jstree-loading > .jstree-ocl { background: url("throbber.gif") center center no-repeat; } .jstree-default-small .jstree-file { background: url("32px.png") -103px -71px no-repeat; } .jstree-default-small .jstree-folder { background: url("32px.png") -263px -7px no-repeat; } .jstree-default-small > .jstree-container-ul > .jstree-node { margin-left: 0; margin-right: 0; } #jstree-dnd.jstree-default-small { line-height: 18px; padding: 0 4px; } #jstree-dnd.jstree-default-small .jstree-ok, #jstree-dnd.jstree-default-small .jstree-er { background-image: url("32px.png"); background-repeat: no-repeat; background-color: transparent; } #jstree-dnd.jstree-default-small i { background: transparent; width: 18px; height: 18px; line-height: 18px; } #jstree-dnd.jstree-default-small .jstree-ok { background-position: -7px -71px; } #jstree-dnd.jstree-default-small .jstree-er { background-position: -39px -71px; } .jstree-default-small.jstree-rtl .jstree-node { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAACAQMAAABv1h6PAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMHBgAAiABBI4gz9AAAAABJRU5ErkJggg=="); } .jstree-default-small.jstree-rtl .jstree-last { background: transparent; } .jstree-default-large .jstree-node { min-height: 32px; line-height: 32px; margin-left: 32px; min-width: 32px; } .jstree-default-large .jstree-anchor { line-height: 32px; height: 32px; } .jstree-default-large .jstree-icon { width: 32px; height: 32px; line-height: 32px; } .jstree-default-large .jstree-icon:empty { width: 32px; height: 32px; line-height: 32px; } .jstree-default-large.jstree-rtl .jstree-node { margin-right: 32px; } .jstree-default-large .jstree-wholerow { height: 32px; } .jstree-default-large .jstree-node, .jstree-default-large .jstree-icon { background-image: url("32px.png"); } .jstree-default-large .jstree-node { background-position: -288px 0px; background-repeat: repeat-y; } .jstree-default-large .jstree-last { background: transparent; } .jstree-default-large .jstree-open > .jstree-ocl { background-position: -128px 0px; } .jstree-default-large .jstree-closed > .jstree-ocl { background-position: -96px 0px; } .jstree-default-large .jstree-leaf > .jstree-ocl { background-position: -64px 0px; } .jstree-default-large .jstree-themeicon { background-position: -256px 0px; } .jstree-default-large > .jstree-no-dots .jstree-node, .jstree-default-large > .jstree-no-dots .jstree-leaf > .jstree-ocl { background: transparent; } .jstree-default-large > .jstree-no-dots .jstree-open > .jstree-ocl { background-position: -32px 0px; } .jstree-default-large > .jstree-no-dots .jstree-closed > .jstree-ocl { background-position: 0px 0px; } .jstree-default-large .jstree-disabled { background: transparent; } .jstree-default-large .jstree-disabled.jstree-hovered { background: transparent; } .jstree-default-large .jstree-disabled.jstree-clicked { background: #efefef; } .jstree-default-large .jstree-checkbox { background-position: -160px 0px; } .jstree-default-large .jstree-checkbox:hover { background-position: -160px -32px; } .jstree-default-large.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox, .jstree-default-large .jstree-checked > .jstree-checkbox { background-position: -224px 0px; } .jstree-default-large.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover, .jstree-default-large .jstree-checked > .jstree-checkbox:hover { background-position: -224px -32px; } .jstree-default-large .jstree-anchor > .jstree-undetermined { background-position: -192px 0px; } .jstree-default-large .jstree-anchor > .jstree-undetermined:hover { background-position: -192px -32px; } .jstree-default-large > .jstree-striped { background-size: auto 64px; } .jstree-default-large.jstree-rtl .jstree-node { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg=="); background-position: 100% 1px; background-repeat: repeat-y; } .jstree-default-large.jstree-rtl .jstree-last { background: transparent; } .jstree-default-large.jstree-rtl .jstree-open > .jstree-ocl { background-position: -128px -32px; } .jstree-default-large.jstree-rtl .jstree-closed > .jstree-ocl { background-position: -96px -32px; } .jstree-default-large.jstree-rtl .jstree-leaf > .jstree-ocl { background-position: -64px -32px; } .jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-node, .jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl { background: transparent; } .jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl { background-position: -32px -32px; } .jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl { background-position: 0px -32px; } .jstree-default-large .jstree-themeicon-custom { background-color: transparent; background-image: none; background-position: 0 0; } .jstree-default-large > .jstree-container-ul .jstree-loading > .jstree-ocl { background: url("throbber.gif") center center no-repeat; } .jstree-default-large .jstree-file { background: url("32px.png") -96px -64px no-repeat; } .jstree-default-large .jstree-folder { background: url("32px.png") -256px 0px no-repeat; } .jstree-default-large > .jstree-container-ul > .jstree-node { margin-left: 0; margin-right: 0; } #jstree-dnd.jstree-default-large { line-height: 32px; padding: 0 4px; } #jstree-dnd.jstree-default-large .jstree-ok, #jstree-dnd.jstree-default-large .jstree-er { background-image: url("32px.png"); background-repeat: no-repeat; background-color: transparent; } #jstree-dnd.jstree-default-large i { background: transparent; width: 32px; height: 32px; line-height: 32px; } #jstree-dnd.jstree-default-large .jstree-ok { background-position: 0px -64px; } #jstree-dnd.jstree-default-large .jstree-er { background-position: -32px -64px; } .jstree-default-large.jstree-rtl .jstree-node { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAACAQMAAAAD0EyKAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjgIIGBgABCgCBvVLXcAAAAABJRU5ErkJggg=="); } .jstree-default-large.jstree-rtl .jstree-last { background: transparent; } @media (max-width: 768px) { #jstree-dnd.jstree-dnd-responsive { line-height: 40px; font-weight: bold; font-size: 1.1em; text-shadow: 1px 1px white; } #jstree-dnd.jstree-dnd-responsive > i { background: transparent; width: 40px; height: 40px; } #jstree-dnd.jstree-dnd-responsive > .jstree-ok { background-image: url("40px.png"); background-position: 0 -200px; background-size: 120px 240px; } #jstree-dnd.jstree-dnd-responsive > .jstree-er { background-image: url("40px.png"); background-position: -40px -200px; background-size: 120px 240px; } #jstree-marker.jstree-dnd-responsive { border-left-width: 10px; border-top-width: 10px; border-bottom-width: 10px; margin-top: -10px; } } @media (max-width: 768px) { .jstree-default-responsive { /* .jstree-open > .jstree-ocl, .jstree-closed > .jstree-ocl { border-radius:20px; background-color:white; } */ } .jstree-default-responsive .jstree-icon { background-image: url("40px.png"); } .jstree-default-responsive .jstree-node, .jstree-default-responsive .jstree-leaf > .jstree-ocl { background: transparent; } .jstree-default-responsive .jstree-node { min-height: 40px; line-height: 40px; margin-left: 40px; min-width: 40px; white-space: nowrap; } .jstree-default-responsive .jstree-anchor { line-height: 40px; height: 40px; } .jstree-default-responsive .jstree-icon, .jstree-default-responsive .jstree-icon:empty { width: 40px; height: 40px; line-height: 40px; } .jstree-default-responsive > .jstree-container-ul > .jstree-node { margin-left: 0; } .jstree-default-responsive.jstree-rtl .jstree-node { margin-left: 0; margin-right: 40px; } .jstree-default-responsive.jstree-rtl .jstree-container-ul > .jstree-node { margin-right: 0; } .jstree-default-responsive .jstree-ocl, .jstree-default-responsive .jstree-themeicon, .jstree-default-responsive .jstree-checkbox { background-size: 120px 240px; } .jstree-default-responsive .jstree-leaf > .jstree-ocl { background: transparent; } .jstree-default-responsive .jstree-open > .jstree-ocl { background-position: 0 0px !important; } .jstree-default-responsive .jstree-closed > .jstree-ocl { background-position: 0 -40px !important; } .jstree-default-responsive.jstree-rtl .jstree-closed > .jstree-ocl { background-position: -40px 0px !important; } .jstree-default-responsive .jstree-themeicon { background-position: -40px -40px; } .jstree-default-responsive .jstree-checkbox, .jstree-default-responsive .jstree-checkbox:hover { background-position: -40px -80px; } .jstree-default-responsive.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox, .jstree-default-responsive.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover, .jstree-default-responsive .jstree-checked > .jstree-checkbox, .jstree-default-responsive .jstree-checked > .jstree-checkbox:hover { background-position: 0 -80px; } .jstree-default-responsive .jstree-anchor > .jstree-undetermined, .jstree-default-responsive .jstree-anchor > .jstree-undetermined:hover { background-position: 0 -120px; } .jstree-default-responsive .jstree-anchor { font-weight: bold; font-size: 1.1em; text-shadow: 1px 1px white; } .jstree-default-responsive > .jstree-striped { background: transparent; } .jstree-default-responsive .jstree-wholerow { border-top: 1px solid rgba(255, 255, 255, 0.7); border-bottom: 1px solid rgba(64, 64, 64, 0.2); background: #ebebeb; height: 40px; } .jstree-default-responsive .jstree-wholerow-hovered { background: #e7f4f9; } .jstree-default-responsive .jstree-wholerow-clicked { background: #beebff; } .jstree-default-responsive .jstree-children .jstree-last > .jstree-wholerow { box-shadow: inset 0 -6px 3px -5px #666666; } .jstree-default-responsive .jstree-children .jstree-open > .jstree-wholerow { box-shadow: inset 0 6px 3px -5px #666666; border-top: 0; } .jstree-default-responsive .jstree-children .jstree-open + .jstree-open { box-shadow: none; } .jstree-default-responsive .jstree-node, .jstree-default-responsive .jstree-icon, .jstree-default-responsive .jstree-node > .jstree-ocl, .jstree-default-responsive .jstree-themeicon, .jstree-default-responsive .jstree-checkbox { background-image: url("40px.png"); background-size: 120px 240px; } .jstree-default-responsive .jstree-node { background-position: -80px 0; background-repeat: repeat-y; } .jstree-default-responsive .jstree-last { background: transparent; } .jstree-default-responsive .jstree-leaf > .jstree-ocl { background-position: -40px -120px; } .jstree-default-responsive .jstree-last > .jstree-ocl { background-position: -40px -160px; } .jstree-default-responsive .jstree-themeicon-custom { background-color: transparent; background-image: none; background-position: 0 0; } .jstree-default-responsive .jstree-file { background: url("40px.png") 0 -160px no-repeat; background-size: 120px 240px; } .jstree-default-responsive .jstree-folder { background: url("40px.png") -40px -40px no-repeat; background-size: 120px 240px; } .jstree-default-responsive > .jstree-container-ul > .jstree-node { margin-left: 0; margin-right: 0; } } ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/jstree-theme/themes/proton/style.css ================================================ /* jsTree default theme */ .jstree-node, .jstree-children, .jstree-container-ul { display: block; margin: 0; padding: 0; list-style-type: none; list-style-image: none; } .jstree-node { white-space: nowrap; } .jstree-anchor { display: inline-block; color: #333; white-space: nowrap; padding: 0 4px 0 1px; margin: 0; vertical-align: top; } .jstree-anchor:focus { outline: 0; } .jstree-anchor, .jstree-anchor:link, .jstree-anchor:visited, .jstree-anchor:hover, .jstree-anchor:active { text-decoration: none; color: inherit; } .jstree-icon { display: inline-block; text-decoration: none; margin: 0; padding: 0; vertical-align: top; text-align: center; } .jstree-icon:empty { display: inline-block; text-decoration: none; margin: 0; padding: 0; vertical-align: top; text-align: center; } .jstree-ocl { cursor: pointer; } .jstree-leaf > .jstree-ocl { cursor: default; } .jstree .jstree-open > .jstree-children { display: block; } .jstree .jstree-closed > .jstree-children, .jstree .jstree-leaf > .jstree-children { display: none; } .jstree-anchor > .jstree-themeicon { margin-right: 2px; } .jstree-no-icons .jstree-themeicon, .jstree-anchor > .jstree-themeicon-hidden { display: none; } .jstree-rtl .jstree-anchor { padding: 0 1px 0 4px; } .jstree-rtl .jstree-anchor > .jstree-themeicon { margin-left: 2px; margin-right: 0; } .jstree-rtl .jstree-node { margin-left: 0; } .jstree-rtl .jstree-container-ul > .jstree-node { margin-right: 0; } .jstree-wholerow-ul { position: relative; display: inline-block; min-width: 100%; } .jstree-wholerow-ul .jstree-leaf > .jstree-ocl { cursor: pointer; } .jstree-wholerow-ul .jstree-anchor, .jstree-wholerow-ul .jstree-icon { position: relative; } .jstree-wholerow-ul .jstree-wholerow { width: 100%; cursor: pointer; position: absolute; left: 0; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } .vakata-context { display: none; } .vakata-context, .vakata-context ul { margin: 0; padding: 2px; position: absolute; background: #f5f5f5; border: 1px solid #979797; -moz-box-shadow: 5px 5px 4px -4px #666666; -webkit-box-shadow: 2px 2px 2px #999999; box-shadow: 2px 2px 2px #999999; } .vakata-context ul { list-style: none; left: 100%; margin-top: -2.7em; margin-left: -4px; } .vakata-context .vakata-context-right ul { left: auto; right: 100%; margin-left: auto; margin-right: -4px; } .vakata-context li { list-style: none; display: inline; } .vakata-context li > a { display: block; padding: 0 2em 0 2em; text-decoration: none; width: auto; color: black; white-space: nowrap; line-height: 2.4em; -moz-text-shadow: 1px 1px 0 white; -webkit-text-shadow: 1px 1px 0 white; text-shadow: 1px 1px 0 white; -moz-border-radius: 1px; -webkit-border-radius: 1px; border-radius: 1px; } .vakata-context li > a:hover { position: relative; background-color: #e8eff7; -moz-box-shadow: 0 0 2px #0a6aa1; -webkit-box-shadow: 0 0 2px #0a6aa1; box-shadow: 0 0 2px #0a6aa1; } .vakata-context li > a.vakata-context-parent { background-image: url("data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAIORI4JlrqN1oMSnmmZDQUAOw=="); background-position: right center; background-repeat: no-repeat; } .vakata-context li > a:focus { outline: 0; } .vakata-context .vakata-context-hover > a { position: relative; background-color: #e8eff7; -moz-box-shadow: 0 0 2px #0a6aa1; -webkit-box-shadow: 0 0 2px #0a6aa1; box-shadow: 0 0 2px #0a6aa1; } .vakata-context .vakata-context-separator > a, .vakata-context .vakata-context-separator > a:hover { background: white; border: 0; border-top: 1px solid #e2e3e3; height: 1px; min-height: 1px; max-height: 1px; padding: 0; margin: 0 0 0 2.4em; border-left: 1px solid #e0e0e0; -moz-text-shadow: 0 0 0 transparent; -webkit-text-shadow: 0 0 0 transparent; text-shadow: 0 0 0 transparent; -moz-box-shadow: 0 0 0 transparent; -webkit-box-shadow: 0 0 0 transparent; box-shadow: 0 0 0 transparent; -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; } .vakata-context .vakata-contextmenu-disabled a, .vakata-context .vakata-contextmenu-disabled a:hover { color: silver; background-color: transparent; border: 0; box-shadow: 0 0 0; } .vakata-context li > a > i { text-decoration: none; display: inline-block; width: 2.4em; height: 2.4em; background: transparent; margin: 0 0 0 -2em; vertical-align: top; text-align: center; line-height: 2.4em; } .vakata-context li > a > i:empty { width: 2.4em; line-height: 2.4em; } .vakata-context li > a .vakata-contextmenu-sep { display: inline-block; width: 1px; height: 2.4em; background: white; margin: 0 0.5em 0 0; border-left: 1px solid #e2e3e3; } .vakata-context .vakata-contextmenu-shortcut { font-size: 0.8em; color: silver; opacity: 0.5; display: none; } .vakata-context-rtl ul { left: auto; right: 100%; margin-left: auto; margin-right: -4px; } .vakata-context-rtl li > a.vakata-context-parent { background-image: url("data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAINjI+AC7rWHIsPtmoxLAA7"); background-position: left center; background-repeat: no-repeat; } .vakata-context-rtl .vakata-context-separator > a { margin: 0 2.4em 0 0; border-left: 0; border-right: 1px solid #e2e3e3; } .vakata-context-rtl .vakata-context-left ul { right: auto; left: 100%; margin-left: -4px; margin-right: auto; } .vakata-context-rtl li > a > i { margin: 0 -2em 0 0; } .vakata-context-rtl li > a .vakata-contextmenu-sep { margin: 0 0 0 0.5em; border-left-color: white; background: #e2e3e3; } #jstree-marker { position: absolute; top: 0; left: 0; margin: -5px 0 0 0; padding: 0; border-right: 0; border-top: 5px solid transparent; border-bottom: 5px solid transparent; border-left: 5px solid; width: 0; height: 0; font-size: 0; line-height: 0; } #jstree-dnd { line-height: 16px; margin: 0; padding: 4px; } #jstree-dnd .jstree-icon, #jstree-dnd .jstree-copy { display: inline-block; text-decoration: none; margin: 0 2px 0 0; padding: 0; width: 16px; height: 16px; } #jstree-dnd .jstree-ok { background: green; } #jstree-dnd .jstree-er { background: red; } #jstree-dnd .jstree-copy { margin: 0 2px 0 2px; } .jstree-proton .jstree-node, .jstree-proton .jstree-icon { background-repeat: no-repeat; background-color: transparent; } .jstree-proton .jstree-anchor, .jstree-proton .jstree-wholerow { transition: background-color 0.15s, box-shadow 0.15s, color 0.15s; } .jstree-proton .jstree-hovered { background: #76b6ec; color: #ffffff; border-radius: 3px; box-shadow: inset 0 0 1px #76b6ec; } .jstree-proton .jstree-clicked { background: #3392e3; color: #ffffff; border-radius: 3px; box-shadow: inset 0 0 1px #3392e3; } .jstree-proton .jstree-no-icons .jstree-anchor > .jstree-themeicon { display: none; } .jstree-proton .jstree-disabled { background: transparent; color: #666666; } .jstree-proton .jstree-disabled.jstree-hovered { background: transparent; box-shadow: none; } .jstree-proton .jstree-disabled.jstree-clicked { background: #efefef; } .jstree-proton .jstree-disabled > .jstree-icon { opacity: 0.8; filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'jstree-grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#jstree-grayscale"); /* Firefox 10+ * filter: gray; /* IE6-9 */ -webkit-filter: grayscale(100%); /* Chrome 19+ & Safari 6+ */ } .jstree-proton .jstree-search { font-style: italic; color: #8b0000; font-weight: bold; } .jstree-proton .jstree-no-checkboxes .jstree-checkbox { display: none !important; } .jstree-proton.jstree-checkbox-no-clicked .jstree-clicked { background: transparent; color: inherit; box-shadow: none; } .jstree-proton.jstree-checkbox-no-clicked .jstree-clicked.jstree-hovered { background: #76b6ec; color: #ffffff; } .jstree-proton.jstree-checkbox-no-clicked > .jstree-wholerow-ul .jstree-wholerow-clicked { background: transparent; color: inherit; } .jstree-proton.jstree-checkbox-no-clicked > .jstree-wholerow-ul .jstree-wholerow-clicked.jstree-wholerow-hovered { background: #76b6ec; color: #ffffff; } .jstree-proton > .jstree-striped { background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAMAAAB/qqA+AAAABlBMVEUAAAAAAAClZ7nPAAAAAnRSTlMNAMM9s3UAAAAXSURBVHjajcEBAQAAAIKg/H/aCQZ70AUBjAATb6YPDgAAAABJRU5ErkJggg==") left top repeat; } .jstree-proton > .jstree-wholerow-ul .jstree-hovered, .jstree-proton > .jstree-wholerow-ul .jstree-clicked { background: transparent; box-shadow: none; border-radius: 0; } .jstree-proton .jstree-wholerow { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; } .jstree-proton .jstree-wholerow-hovered { background: #76b6ec; } .jstree-proton .jstree-wholerow-clicked { background: #3392e3; background: -moz-linear-gradient(top, #3392e3 0%, #3392e3 100%); background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #3392e3), color-stop(100%, #3392e3)); background: -webkit-linear-gradient(top, #3392e3 0%, #3392e3 100%); background: -o-linear-gradient(top, #3392e3 0%, #3392e3 100%); background: -ms-linear-gradient(top, #3392e3 0%, #3392e3 100%); background: linear-gradient(to bottom, #3392e3 0%, #3392e3 100%); /*filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='@color1', endColorstr='@color2',GradientType=0 );*/ } .jstree-proton .jstree-node { min-height: 22px; line-height: 22px; margin-left: 22px; min-width: 22px; } .jstree-proton .jstree-anchor { line-height: 22px; margin: 1px 0 2px; height: 22px; } .jstree-proton .jstree-icon { width: 22px; height: 22px; line-height: 22px; } .jstree-proton .jstree-icon:empty { width: 22px; height: 22px; line-height: 22px; } .jstree-proton.jstree-rtl .jstree-node { margin-right: 22px; } .jstree-proton .jstree-wholerow { height: 22px; } .jstree-proton .jstree-node, .jstree-proton .jstree-icon { background-size: 320px 96px; background-image: url("32px.png"); } .jstree-proton .jstree-node { background-position: -293px -5px; background-repeat: repeat-y; } .jstree-proton .jstree-last { background: transparent; } .jstree-proton .jstree-open > .jstree-ocl { background-position: -133px -5px; } .jstree-proton .jstree-closed > .jstree-ocl { background-position: -101px -5px; } .jstree-proton .jstree-leaf > .jstree-ocl { background-position: -69px -5px; } .jstree-proton .jstree-themeicon { background-position: -261px -7px; } .jstree-proton > .jstree-no-dots .jstree-node, .jstree-proton > .jstree-no-dots .jstree-leaf > .jstree-ocl { background: transparent; } .jstree-proton > .jstree-no-dots .jstree-open > .jstree-ocl { background-position: -37px -5px; } .jstree-proton > .jstree-no-dots .jstree-closed > .jstree-ocl { background-position: -5px -5px; } .jstree-proton .jstree-disabled { background: transparent; } .jstree-proton .jstree-disabled.jstree-hovered { background: transparent; } .jstree-proton .jstree-disabled.jstree-clicked { background: #efefef; } .jstree-proton .jstree-checkbox { background-position: -165px -5px; } .jstree-proton .jstree-checkbox:hover { background-position: -165px -37px; } .jstree-proton.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox, .jstree-proton .jstree-checked > .jstree-checkbox { background-position: -229px -5px; } .jstree-proton.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover, .jstree-proton .jstree-checked > .jstree-checkbox:hover { background-position: -229px -37px; } .jstree-proton .jstree-anchor > .jstree-undetermined { background-position: -197px -5px; } .jstree-proton .jstree-anchor > .jstree-undetermined:hover { background-position: -197px -37px; } .jstree-proton > .jstree-striped { background-size: auto 44px; } .jstree-proton.jstree-rtl .jstree-node { background-size: 320px 96px; background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg=="); background-position: 100% 1px; background-repeat: repeat-y; } .jstree-proton.jstree-rtl .jstree-last { background: transparent; } .jstree-proton.jstree-rtl .jstree-open > .jstree-ocl { background-position: -133px -37px; } .jstree-proton.jstree-rtl .jstree-closed > .jstree-ocl { background-position: -101px -37px; } .jstree-proton.jstree-rtl .jstree-leaf > .jstree-ocl { background-position: -69px -37px; } .jstree-proton.jstree-rtl > .jstree-no-dots .jstree-node, .jstree-proton.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl { background: transparent; } .jstree-proton.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl { background-position: -37px -37px; } .jstree-proton.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl { background-position: -5px -37px; } .jstree-proton .jstree-themeicon-custom { background-color: transparent; background-size: 320px 96px; background-image: none; background-position: 0 0; } .jstree-proton > .jstree-container-ul .jstree-loading > .jstree-ocl { background: url("throbber.gif") center center no-repeat; } .jstree-proton .jstree-file { background: url("32px.png") -101px -69px no-repeat; } .jstree-proton .jstree-folder { background: url("32px.png") -261px -5px no-repeat; } .jstree-proton > .jstree-container-ul > .jstree-node { margin-left: 0; margin-right: 0; } #jstree-dnd.jstree-proton { line-height: 22px; padding: 0 4px; } #jstree-dnd.jstree-proton .jstree-ok, #jstree-dnd.jstree-proton .jstree-er { background-size: 320px 96px; background-image: url("32px.png"); background-repeat: no-repeat; background-color: transparent; } #jstree-dnd.jstree-proton i { background: transparent; width: 22px; height: 22px; line-height: 22px; } #jstree-dnd.jstree-proton .jstree-ok { background-position: -5px -69px; } #jstree-dnd.jstree-proton .jstree-er { background-position: -37px -69px; } .jstree-proton.jstree-rtl .jstree-node { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg=="); } .jstree-proton.jstree-rtl .jstree-last { background: transparent; } .jstree-proton-small .jstree-node { min-height: 18px; line-height: 18px; margin-left: 18px; min-width: 18px; } .jstree-proton-small .jstree-anchor { line-height: 18px; margin: 1px 0 2px; height: 18px; } .jstree-proton-small .jstree-icon { width: 18px; height: 18px; line-height: 18px; } .jstree-proton-small .jstree-icon:empty { width: 18px; height: 18px; line-height: 18px; } .jstree-proton-small.jstree-rtl .jstree-node { margin-right: 18px; } .jstree-proton-small .jstree-wholerow { height: 18px; } .jstree-proton-small .jstree-node, .jstree-proton-small .jstree-icon { background-size: 320px 96px; background-image: url("32px.png"); } .jstree-proton-small .jstree-node { background-position: -295px -7px; background-repeat: repeat-y; } .jstree-proton-small .jstree-last { background: transparent; } .jstree-proton-small .jstree-open > .jstree-ocl { background-position: -135px -7px; } .jstree-proton-small .jstree-closed > .jstree-ocl { background-position: -103px -7px; } .jstree-proton-small .jstree-leaf > .jstree-ocl { background-position: -71px -7px; } .jstree-proton-small .jstree-themeicon { background-position: -263px -9px; } .jstree-proton-small > .jstree-no-dots .jstree-node, .jstree-proton-small > .jstree-no-dots .jstree-leaf > .jstree-ocl { background: transparent; } .jstree-proton-small > .jstree-no-dots .jstree-open > .jstree-ocl { background-position: -39px -7px; } .jstree-proton-small > .jstree-no-dots .jstree-closed > .jstree-ocl { background-position: -7px -7px; } .jstree-proton-small .jstree-disabled { background: transparent; } .jstree-proton-small .jstree-disabled.jstree-hovered { background: transparent; } .jstree-proton-small .jstree-disabled.jstree-clicked { background: #efefef; } .jstree-proton-small .jstree-checkbox { background-position: -167px -7px; } .jstree-proton-small .jstree-checkbox:hover { background-position: -167px -39px; } .jstree-proton-small.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox, .jstree-proton-small .jstree-checked > .jstree-checkbox { background-position: -231px -7px; } .jstree-proton-small.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover, .jstree-proton-small .jstree-checked > .jstree-checkbox:hover { background-position: -231px -39px; } .jstree-proton-small .jstree-anchor > .jstree-undetermined { background-position: -199px -7px; } .jstree-proton-small .jstree-anchor > .jstree-undetermined:hover { background-position: -199px -39px; } .jstree-proton-small > .jstree-striped { background-size: auto 36px; } .jstree-proton-small.jstree-rtl .jstree-node { background-size: 320px 96px; background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg=="); background-position: 100% 1px; background-repeat: repeat-y; } .jstree-proton-small.jstree-rtl .jstree-last { background: transparent; } .jstree-proton-small.jstree-rtl .jstree-open > .jstree-ocl { background-position: -135px -39px; } .jstree-proton-small.jstree-rtl .jstree-closed > .jstree-ocl { background-position: -103px -39px; } .jstree-proton-small.jstree-rtl .jstree-leaf > .jstree-ocl { background-position: -71px -39px; } .jstree-proton-small.jstree-rtl > .jstree-no-dots .jstree-node, .jstree-proton-small.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl { background: transparent; } .jstree-proton-small.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl { background-position: -39px -39px; } .jstree-proton-small.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl { background-position: -7px -39px; } .jstree-proton-small .jstree-themeicon-custom { background-color: transparent; background-size: 320px 96px; background-image: none; background-position: 0 0; } .jstree-proton-small > .jstree-container-ul .jstree-loading > .jstree-ocl { background: url("throbber.gif") center center no-repeat; } .jstree-proton-small .jstree-file { background: url("32px.png") -103px -71px no-repeat; } .jstree-proton-small .jstree-folder { background: url("32px.png") -263px -7px no-repeat; } .jstree-proton-small > .jstree-container-ul > .jstree-node { margin-left: 0; margin-right: 0; } #jstree-dnd.jstree-proton-small { line-height: 18px; padding: 0 4px; } #jstree-dnd.jstree-proton-small .jstree-ok, #jstree-dnd.jstree-proton-small .jstree-er { background-size: 320px 96px; background-image: url("32px.png"); background-repeat: no-repeat; background-color: transparent; } #jstree-dnd.jstree-proton-small i { background: transparent; width: 18px; height: 18px; line-height: 18px; } #jstree-dnd.jstree-proton-small .jstree-ok { background-position: -7px -71px; } #jstree-dnd.jstree-proton-small .jstree-er { background-position: -39px -71px; } .jstree-proton-small.jstree-rtl .jstree-node { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAACAQMAAABv1h6PAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMHBgAAiABBI4gz9AAAAABJRU5ErkJggg=="); } .jstree-proton-small.jstree-rtl .jstree-last { background: transparent; } .jstree-proton-large .jstree-node { min-height: 32px; line-height: 32px; margin-left: 32px; min-width: 32px; } .jstree-proton-large .jstree-anchor { line-height: 32px; margin: 1px 0 2px; height: 32px; } .jstree-proton-large .jstree-icon { width: 32px; height: 32px; line-height: 32px; } .jstree-proton-large .jstree-icon:empty { width: 32px; height: 32px; line-height: 32px; } .jstree-proton-large.jstree-rtl .jstree-node { margin-right: 32px; } .jstree-proton-large .jstree-wholerow { height: 32px; } .jstree-proton-large .jstree-node, .jstree-proton-large .jstree-icon { background-size: 320px 96px; background-image: url("32px.png"); } .jstree-proton-large .jstree-node { background-position: -288px 0px; background-repeat: repeat-y; } .jstree-proton-large .jstree-last { background: transparent; } .jstree-proton-large .jstree-open > .jstree-ocl { background-position: -128px 0px; } .jstree-proton-large .jstree-closed > .jstree-ocl { background-position: -96px 0px; } .jstree-proton-large .jstree-leaf > .jstree-ocl { background-position: -64px 0px; } .jstree-proton-large .jstree-themeicon { background-position: -256px -2px; } .jstree-proton-large > .jstree-no-dots .jstree-node, .jstree-proton-large > .jstree-no-dots .jstree-leaf > .jstree-ocl { background: transparent; } .jstree-proton-large > .jstree-no-dots .jstree-open > .jstree-ocl { background-position: -32px 0px; } .jstree-proton-large > .jstree-no-dots .jstree-closed > .jstree-ocl { background-position: 0px 0px; } .jstree-proton-large .jstree-disabled { background: transparent; } .jstree-proton-large .jstree-disabled.jstree-hovered { background: transparent; } .jstree-proton-large .jstree-disabled.jstree-clicked { background: #efefef; } .jstree-proton-large .jstree-checkbox { background-position: -160px 0px; } .jstree-proton-large .jstree-checkbox:hover { background-position: -160px -32px; } .jstree-proton-large.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox, .jstree-proton-large .jstree-checked > .jstree-checkbox { background-position: -224px 0px; } .jstree-proton-large.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover, .jstree-proton-large .jstree-checked > .jstree-checkbox:hover { background-position: -224px -32px; } .jstree-proton-large .jstree-anchor > .jstree-undetermined { background-position: -192px 0px; } .jstree-proton-large .jstree-anchor > .jstree-undetermined:hover { background-position: -192px -32px; } .jstree-proton-large > .jstree-striped { background-size: auto 64px; } .jstree-proton-large.jstree-rtl .jstree-node { background-size: 320px 96px; background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg=="); background-position: 100% 1px; background-repeat: repeat-y; } .jstree-proton-large.jstree-rtl .jstree-last { background: transparent; } .jstree-proton-large.jstree-rtl .jstree-open > .jstree-ocl { background-position: -128px -32px; } .jstree-proton-large.jstree-rtl .jstree-closed > .jstree-ocl { background-position: -96px -32px; } .jstree-proton-large.jstree-rtl .jstree-leaf > .jstree-ocl { background-position: -64px -32px; } .jstree-proton-large.jstree-rtl > .jstree-no-dots .jstree-node, .jstree-proton-large.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl { background: transparent; } .jstree-proton-large.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl { background-position: -32px -32px; } .jstree-proton-large.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl { background-position: 0px -32px; } .jstree-proton-large .jstree-themeicon-custom { background-color: transparent; background-size: 320px 96px; background-image: none; background-position: 0 0; } .jstree-proton-large > .jstree-container-ul .jstree-loading > .jstree-ocl { background: url("throbber.gif") center center no-repeat; } .jstree-proton-large .jstree-file { background: url("32px.png") -96px -64px no-repeat; } .jstree-proton-large .jstree-folder { background: url("32px.png") -256px 0px no-repeat; } .jstree-proton-large > .jstree-container-ul > .jstree-node { margin-left: 0; margin-right: 0; } #jstree-dnd.jstree-proton-large { line-height: 32px; padding: 0 4px; } #jstree-dnd.jstree-proton-large .jstree-ok, #jstree-dnd.jstree-proton-large .jstree-er { background-size: 320px 96px; background-image: url("32px.png"); background-repeat: no-repeat; background-color: transparent; } #jstree-dnd.jstree-proton-large i { background: transparent; width: 32px; height: 32px; line-height: 32px; } #jstree-dnd.jstree-proton-large .jstree-ok { background-position: 0px -64px; } #jstree-dnd.jstree-proton-large .jstree-er { background-position: -32px -64px; } .jstree-proton-large.jstree-rtl .jstree-node { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAACAQMAAAAD0EyKAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjgIIGBgABCgCBvVLXcAAAAABJRU5ErkJggg=="); } .jstree-proton-large.jstree-rtl .jstree-last { background: transparent; } @media (max-width: 768px) { #jstree-dnd.jstree-dnd-responsive { line-height: 30px; font-weight: bold; font-size: 1.1em; text-shadow: 1px 1px white; } #jstree-dnd.jstree-dnd-responsive > i { background: transparent; width: 30px; height: 30px; } #jstree-dnd.jstree-dnd-responsive > .jstree-ok { background-image: url("30px.png"); background-position: 0 -150px; background-size: 90px 180px; } #jstree-dnd.jstree-dnd-responsive > .jstree-er { background-image: url("30px.png"); background-position: -30px -150px; background-size: 90px 180px; } #jstree-marker.jstree-dnd-responsive { border-left-width: 10px; border-top-width: 10px; border-bottom-width: 10px; margin-top: -10px; } } @media (max-width: 768px) { .jstree-proton-responsive { /* .jstree-open > .jstree-ocl, .jstree-closed > .jstree-ocl { border-radius:20px; background-color:white; } */ } .jstree-proton-responsive .jstree-container-ul { overflow: hidden; } .jstree-proton-responsive .jstree-icon { background-image: url("30px.png"); background-size: 90px 180px; } .jstree-proton-responsive .jstree-node, .jstree-proton-responsive .jstree-leaf > .jstree-ocl { background: transparent; } .jstree-proton-responsive .jstree-node { min-height: 30px; line-height: 30px; margin-left: 30px; min-width: 30px; white-space: nowrap; } .jstree-proton-responsive .jstree-anchor { line-height: 38px; height: 38px; margin: 0; } .jstree-proton-responsive .jstree-icon, .jstree-proton-responsive .jstree-icon:empty { margin-top: 4px; width: 30px; height: 30px; line-height: 30px; } .jstree-proton-responsive > .jstree-container-ul > .jstree-node { margin-left: 0; } .jstree-proton-responsive.jstree-rtl .jstree-node { margin-left: 0; margin-right: 30px; } .jstree-proton-responsive.jstree-rtl .jstree-container-ul > .jstree-node { margin-right: 0; } .jstree-proton-responsive .jstree-ocl, .jstree-proton-responsive .jstree-themeicon, .jstree-proton-responsive .jstree-checkbox { background-size: 90px 180px; } .jstree-proton-responsive .jstree-leaf > .jstree-ocl { background: transparent; } .jstree-proton-responsive .jstree-open > .jstree-ocl { background-position: 0 0px !important; } .jstree-proton-responsive .jstree-closed > .jstree-ocl { background-position: 0 -30px !important; } .jstree-proton-responsive.jstree-rtl .jstree-closed > .jstree-ocl { background-position: -30px 0px !important; } .jstree-proton-responsive .jstree-themeicon { background-position: -30px -30px; } .jstree-proton-responsive .jstree-checkbox, .jstree-proton-responsive .jstree-checkbox:hover { background-position: -30px -60px; } .jstree-proton-responsive.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox, .jstree-proton-responsive.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover, .jstree-proton-responsive .jstree-checked > .jstree-checkbox, .jstree-proton-responsive .jstree-checked > .jstree-checkbox:hover { background-position: 0 -60px; } .jstree-proton-responsive .jstree-anchor > .jstree-undetermined, .jstree-proton-responsive .jstree-anchor > .jstree-undetermined:hover { background-position: 0 -90px; } .jstree-proton-responsive > .jstree-striped { background: transparent; } .jstree-proton-responsive .jstree-wholerow-ul li { position: relative; } .jstree-proton-responsive .jstree-wholerow-ul .jstree-wholerow { position: absolute; top: 0; left: -1000px; right: -1000px; width: auto; height: 100%; } .jstree-proton-responsive .jstree-wholerow { border-top: 1px solid rgba(0, 0, 0, 0.05); background: rgba(0, 0, 0, 0.02); height: 30px; } .jstree-proton-responsive .jstree-wholerow-hovered { background: #76b6ec; } .jstree-proton-responsive .jstree-wholerow-clicked { background: #3392e3; } .jstree-proton-responsive .jstree-children .jstree-open + .jstree-open { box-shadow: none; } .jstree-proton-responsive .jstree-node, .jstree-proton-responsive .jstree-icon, .jstree-proton-responsive .jstree-node > .jstree-ocl, .jstree-proton-responsive .jstree-themeicon, .jstree-proton-responsive .jstree-checkbox { background-image: url("30px.png"); background-size: 90px 180px; } .jstree-proton-responsive .jstree-node { background-position: -60px 0; background-repeat: repeat-y; } .jstree-proton-responsive .jstree-last { background: transparent; } .jstree-proton-responsive .jstree-leaf > .jstree-ocl { background-position: -30px -90px; } .jstree-proton-responsive .jstree-last > .jstree-ocl { background-position: -30px -120px; } .jstree-proton-responsive .jstree-themeicon-custom { background-color: transparent; background-image: none; background-position: 0 0; } .jstree-proton-responsive .jstree-file { background: url("30px.png") 0 -120px no-repeat; background-size: 90px 180px; } .jstree-proton-responsive .jstree-folder { background: url("30px.png") -30px -30px no-repeat; background-size: 90px 180px; } .jstree-proton-responsive > .jstree-container-ul > .jstree-node { margin-left: 0; margin-right: 0; } } @font-face { font-family: 'Titillium Web'; src: url('fonts/titillium/titilliumweb-extralight-webfont.eot'); src: url('fonts/titillium/titilliumweb-extralight-webfont.eot?#iefix') format('embedded-opentype'), url('fonts/titillium/titilliumweb-extralight-webfont.woff') format('woff'), url('fonts/titillium/titilliumweb-extralight-webfont.ttf') format('truetype'), url('fonts/titillium/titilliumweb-extralight-webfont.svg#titillium_webthin') format('svg'); font-weight: 300; font-style: normal; } @font-face { font-family: 'Titillium Web'; src: url('fonts/titillium/titilliumweb-regular-webfont.eot'); src: url('fonts/titillium/titilliumweb-regular-webfont.eot?#iefix') format('embedded-opentype'), url('fonts/titillium/titilliumweb-regular-webfont.woff') format('woff'), url('fonts/titillium/titilliumweb-regular-webfont.ttf') format('truetype'), url('fonts/titillium/titilliumweb-regular-webfont.svg#titillium_webregular') format('svg'); font-weight: 400; font-style: normal; } @font-face { font-family: 'Titillium Web'; src: url('fonts/titillium/titilliumweb-bold-webfont.eot'); src: url('fonts/titillium/titilliumweb-bold-webfont.eot?#iefix') format('embedded-opentype'), url('fonts/titillium/titilliumweb-bold-webfont.woff') format('woff'), url('fonts/titillium/titilliumweb-bold-webfont.ttf') format('truetype'), url('fonts/titillium/titilliumweb-bold-webfont.svg#titillium_webbold') format('svg'); font-weight: 700; font-style: normal; } @media screen and (-webkit-min-device-pixel-ratio: 0) { @font-face { font-family: 'Titillium Web'; src: url('fonts/titillium/titilliumweb-extralight-webfont.svg#titillium_webthin') format('svg'); font-weight: 300; font-style: normal; } @font-face { font-family: 'Titillium Web'; src: url('fonts/titillium/titilliumweb-regular-webfont.svg#titillium_webregular') format('svg'); font-weight: 400; font-style: normal; } @font-face { font-family: 'Titillium Web'; src: url('fonts/titillium/titilliumweb-bold-webfont.svg#titillium_webbold') format('svg'); font-weight: 700; font-style: normal; } } .jstree-proton { font-family: 'Titillium Web', sans-serif, Arial, sans-serif; } .jstree-wrapper .jstree-container-ul .jstree-node:not(.jstree-leaf) { display: block; clear: both; } .jstree-wrapper .jstree-leaf { float: left; margin-left: 0; padding-left: 24px; /*width: 80px;*/ clear: none; color: #777; } .jstree-wrapper .jstree-leaf:not(first-child) { background: none; } .jstree-wrapper .jstree-leaf > .jstree-icon, #treeview .jstree-leaf .jstree-themeicon { display: none; } ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/layer/layer.js ================================================ /*! layer-v3.1.1 Web弹层组件 MIT License http://layer.layui.com/ By 贤心 */ eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}(';!j(e,t){"6G 6f";q i,n,a=e.m&&m.1W,o={4j:j(){q e=1g.4i?1g.4i.18:j(){25(q e,t=1g.6a,i=t.15-1,n=i;n>0;n--)J("67"===t[n].66){e=t[n].18;23}D e||t[i].18}();D e.65(0,e.63("/")+1)}(),L:{},1j:{},2k:0,1f:[],M:["g;f;","e;d;"],x:["2S","2T","1k","2X","N"],4a:j(t,i){q n=t.49?t.49:e.5S(t,1Y);D n[n.48?"48":"5K"](i)},2l:j(t,i,n){J(r.1B){q a=1g.5C("5z")[0],s=1g.5n("2l");"24"==R i&&(n=i);q l=(n||t).5m(/\\.|\\//g,""),f="54-"+l,c=0;s.4T="4R",s.1K=r.1B+t,s.1v=f,1g.3M(f)||a.4L(s),"j"==R i&&!j u(){D++c>4I?e.3I&&3I.4F("k.A: 4D"):3D(4u===3A(o.4a(1g.3M(f),"F"))?i():1R(u,1H))}()}}},r={v:"3.1.1",1x:j(){q t=6A.6z.6y();D!!(e.3z||"3z"3a e)&&((t.6h(/6g\\s(\\d+)/)||[])[1]||"11")}(),C:e.k&&e.k.v?6d:0,1B:o.4j,L:j(e,t){D e=e||{},r.2R=o.L=i.Y({},o.L,e),r.1B=o.L.1B||r.1B,"24"==R e.Y&&(e.Y=[e.Y]),o.L.1B&&r.2H(),e.Y?(a?m.3y("3t/k/"+e.Y):o.2l("3s/"+e.Y),K):K},2H:j(e){q t="k",i="",n=(a?"3t/k/":"3s/")+"3r/k.A?v="+r.v+i;D a?m.3y(n,e,t):o.2l(n,e,t),K},5T:j(e,t,n){q a="j"==R t;D a&&(n=t),r.1w(i.Y({H:e,1T:n},a?{}:t))},5R:j(e,t,n,a){q s="j"==R t;D s&&(a=n,n=t),r.1w(i.Y({H:e,M:o.M,1T:n,5O:a},s?{}:t))},2a:j(e,n,a){q s="j"==R n,f=o.L.17,c=(f?f+" "+f+"-2a":"")||"m-k-2a",u=l.Q.15-1;D s&&(a=n),r.1w(i.Y({H:e,1J:3q,W:!1,17:c,T:!1,1G:!1,M:!1,1e:!1,1j:a},s&&!o.L.17?{17:c+" m-k-3p",Q:u}:j(){D n=n||{},(n.1p===-1||n.1p===t&&!o.L.17)&&(n.17=c+" "+(n.17||"m-k-3p")),n}()))},2w:j(e,t){D r.1w(i.Y({x:3,1p:e||0,1e:!1,W:.3o},t))},N:j(e,t,n){D r.1w(i.Y({x:4,H:[e,t],1G:!1,1J:3q,W:!1,1e:!1,1d:!1,20:5F},n))}},s=j(e){q t=K;t.C=++r.C,t.L=i.Y({},t.L,o.L,e),1g.2c?t.32():1R(j(){t.32()},30)};s.1m=s.5q;q l=["m-k",".m-k-T",".m-k-5l",".m-k-2S","m-k-1k","m-k-H","m-k-M","m-k-1a"];l.Q=["k-Q-5k","k-Q-3o","k-Q-5i","k-Q-5c","k-Q-4W","k-Q-4O","k-Q-4B"],s.1m.L={x:0,W:.3,1d:!0,1n:l[1],T:"A;v;",I:"1r",P:"1r",1G:1,1J:0,1s:6k,20:6c,Q:0,1P:!0,1p:-1,3k:1,1e:!0,2z:!0,N:2},s.1m.3j=j(e,t){q n=K,a=n.C,r=n.L,s=r.1s+a,f="1U"==R r.T,c=r.2n&&(1===r.x||2===r.x),u=r.T?\'<V G="m-k-T" 19="\'+(f?r.T[1]:"")+\'">\'+(f?r.T[0]:r.T)+"</V>":"";D r.1s=s,t([r.W?\'<V G="m-k-W" 1v="m-k-W\'+a+\'" 2e="\'+a+\'" 19="\'+("z-C:"+(s-1)+"; ")+\'"></V>\':"",\'<V G="\'+l[0]+(" m-k-"+o.x[r.x])+(0!=r.x&&2!=r.x||r.W?"":" m-k-2d")+" "+(r.17||"")+\'" 1v="\'+l[0]+a+\'" x="\'+o.x[r.x]+\'" 2e="\'+a+\'" 60="\'+r.1J+\'" 3i="\'+(e?"1U":"24")+\'" 19="z-C: \'+s+"; F:"+r.P[0]+";E:"+r.P[1]+(r.1d?"":";1o:5Y;")+\'">\'+(e&&2!=r.x?"":u)+\'<V 1v="\'+(r.1v||"")+\'" G="m-k-H\'+(0==r.x&&r.1p!==-1?" m-k-2f":"")+(3==r.x?" m-k-2X"+r.1p:"")+\'">\'+(0==r.x&&r.1p!==-1?\'<i G="m-k-2i m-k-2i\'+r.1p+\'"></i>\':"")+(1==r.x&&e?"":r.H||"")+\'</V><1b G="m-k-5W">\'+j(){q e=c?\'<a G="m-k-1y" 1K="1O:;"><3h></3h></a><a G="m-k-2i m-k-2E" 1K="1O:;"></a>\':"";D r.1G&&(e+=\'<a G="m-k-2i \'+l[7]+" "+l[7]+(r.T?r.1G:4==r.x?"1":"2")+\'" 1K="1O:;"></a>\'),e}()+"</1b>"+(r.M?j(){q e="";"24"==R r.M&&(r.M=[r.M]);25(q t=0,i=r.M.15;t<i;t++)e+=\'<a G="\'+l[6]+t+\'">\'+r.M[t]+"</a>";D\'<V G="\'+l[6]+" m-k-M-"+(r.5J||"")+\'">\'+e+"</V>"}():"")+(r.1e?\'<1b G="m-k-1e"></1b>\':"")+"</V>"],u,i(\'<V G="m-k-1n"></V>\')),n},s.1m.32=j(){q e=K,t=e.L,a=e.C,s=t.H,f="1U"==R s,c=i("2c");J(!t.1v||!i("#"+t.1v)[0]){3g("24"==R t.P&&(t.P="1r"===t.P?["",""]:[t.P,""]),t.35&&(t.Q=t.35),6==r.1x&&(t.1d=!1),t.x){2b 0:t.M="M"3a t?t.M:o.M[0],r.2I("2S");23;2b 2:q s=t.H=f?t.H:[t.H||"4U://k.m.4C","1r"];t.H=\'<1k 6K="\'+(t.H[1]||"1r")+\'" 69="61" 1v="\'+l[4]+a+\'" 5L="\'+l[4]+a+\'" 3d="K.5H=\\\'\\\';" G="m-k-2w" 52="0" 18="\'+t.H[0]+\'"></1k>\';23;2b 3:1q t.T,1q t.1G,t.1p===-1&&0===t.1p,r.2I("2X");23;2b 4:f||(t.H=[t.H,"2c"]),t.3R=t.H[1],t.H=t.H[0]+\'<i G="m-k-3f"></i>\',1q t.T,t.N="1U"==R t.N?t.N:[t.N,!0],t.5Z||r.2I("N")}J(e.3j(f,j(n,r,u){c.2M(n[0]),f?j(){2==t.x||4==t.x?j(){i("2c").2M(n[1])}():j(){s.2L("."+l[0])[0]||(s.1I("1Z",s.A("1Z")).1E().1u("m-k-33").33(n[1]),i("#"+l[0]+a).w("."+l[5]).5X(r))}()}():c.2M(n[1]),i(".m-k-1n")[0]||c.2M(o.2h=u),e.1F=i("#"+l[0]+a),t.2z||l.1h.A("1X","2P").B("k-1i",a)}).1r(a),i("#m-k-W"+e.C).A({"3l-1V":t.W[1]||"#4x",4z:t.W[0]||t.W}),2==t.x&&6==r.1x&&e.1F.w("1k").B("18",s[0]),4==t.x?e.N():e.I(),t.1d&&n.X("1e",j(){e.I(),(/^\\d+%$/.2o(t.P[0])||/^\\d+%$/.2o(t.P[1]))&&e.1r(a),4==t.x&&e.N()}),t.1J<=0||1R(j(){r.1a(e.C)},t.1J),e.1n().3m(),l.Q[t.Q]){q u="k-Q "+l.Q[t.Q];e.1F.1u(u).4E("4G 4H 4J 4M 4N",j(){i(K).1D(u)})}t.1P&&e.1F.1I("1P",!0)}},s.1m.1r=j(e){q t=K,a=t.L,o=i("#"+l[0]+e);""===a.P[0]&&a.20>0&&(r.1x&&r.1x<8&&a.M&&o.F(o.3n()),o.21()>a.20&&o.F(a.20));q s=[o.3n(),o.51()],f=o.w(l[1]).13()||0,c=o.w("."+l[6]).13()||0,u=j(e){e=o.w(e),e.E(s[1]-f-c-2*(0|U(e.A("2f-S"))))};3g(a.x){2b 2:u("1k");23;3r:""===a.P[1]?a.38>0&&o.13()>a.38?(s[1]=a.38,u("."+l[5])):a.1d&&s[1]>=n.E()&&(s[1]=n.E(),u("."+l[5])):u("."+l[5])}D t},s.1m.I=j(){q e=K,t=e.L,i=e.1F,a=[i.21(),i.13()],o="1U"==R t.I;e.Z=(n.E()-a[1])/2,e.14=(n.F()-a[0])/2,o?(e.Z=t.I[0],e.14=t.I[1]||e.14):"1r"!==t.I&&("t"===t.I?e.Z=0:"r"===t.I?e.14=n.F()-a[0]:"b"===t.I?e.Z=n.E()-a[1]:"l"===t.I?e.14=0:"5A"===t.I?(e.Z=0,e.14=0):"5B"===t.I?(e.Z=n.E()-a[1],e.14=0):"5D"===t.I?(e.Z=0,e.14=n.F()-a[0]):"5E"===t.I?(e.Z=n.E()-a[1],e.14=n.F()-a[0]):e.Z=t.I),t.1d||(e.Z=/%$/.2o(e.Z)?n.E()*U(e.Z)/1H:U(e.Z),e.14=/%$/.2o(e.14)?n.F()*U(e.14)/1H:U(e.14),e.Z+=n.1N(),e.14+=n.2u()),i.B("1f")&&(e.Z=n.E()-(i.w(l[1]).13()||0),e.14=i.A("O")),i.A({S:e.Z,O:e.14})},s.1m.N=j(){q e=K,t=e.L,a=e.1F,o=[a.21(),a.13()],r=i(t.3R);r[0]||(r=i("2c"));q s={F:r.21(),E:r.13(),S:r.I().S,O:r.I().O},f=a.w(".m-k-3f"),c=t.N[0];t.N[1]||f.2B(),s.36=j(){s.O+o[0]-n.F()>0?(s.26=s.O+s.F-o[0],f.A({2C:12,O:"1r"})):s.26=s.O},s.1S=[j(){s.36(),s.22=s.S-o[1]-10,f.1D("m-k-3u").1u("m-k-3v").A("2d-2C-1V",t.N[1])},j(){s.26=s.O+s.F+10,s.22=s.S,f.1D("m-k-3w").1u("m-k-3x").A("2d-2U-1V",t.N[1])},j(){s.36(),s.22=s.S+s.E+10,f.1D("m-k-3v").1u("m-k-3u").A("2d-2C-1V",t.N[1])},j(){s.26=s.O-o[0]-10,s.22=s.S,f.1D("m-k-3x").1u("m-k-3w").A("2d-2U-1V",t.N[1])}],s.1S[c-1](),1===c?s.S-(n.1N()+o[1]+16)<0&&s.1S[2]():2===c?n.F()-(s.O+s.F+o[0]+16)>0||s.1S[3]():3===c?s.S-n.1N()+s.E+o[1]+16-n.E()>0&&s.1S[0]():4===c&&o[0]+16-s.O>0&&s.1S[1](),a.w("."+l[5]).A({"3l-1V":t.N[1],"2f-2C":t.1G?"6e":""}),a.A({O:s.26-(t.1d?n.2u():0),S:s.22-(t.1d?n.1N():0)})},s.1m.1n=j(){q e=K,t=e.L,a=i(1g),s=e.1F,l=s.w(t.1n),f=s.w(".m-k-1e"),c={};D t.1n&&l.A("2O","1n"),l.X("2N",j(e){e.1L(),t.1n&&(c.2K=!0,c.I=[e.2J-U(s.A("O")),e.2G-U(s.A("S"))],o.2h.A("2O","1n").1E())}),f.X("2N",j(e){e.1L(),c.2D=!0,c.I=[e.2J,e.2G],c.P=[s.21(),s.13()],o.2h.A("2O","6B-1e").1E()}),a.X("6H",j(i){J(c.2K){q a=i.2J-c.I[0],o=i.2G-c.I[1],l="1d"===s.A("1o");J(i.1L(),c.2y=l?0:n.2u(),c.2x=l?0:n.1N(),!t.3B){q f=n.F()-s.21()+c.2y,u=n.E()-s.13()+c.2x;a<c.2y&&(a=c.2y),a>f&&(a=f),o<c.2x&&(o=c.2x),o>u&&(o=u)}s.A({O:a,S:o})}J(t.1e&&c.2D){q a=i.2J-c.I[0],o=i.2G-c.I[1];i.1L(),r.19(e.C,{F:c.P[0]+a,E:c.P[1]+o}),c.4w=!0,t.3C&&t.3C(s)}}).X("4y",j(e){c.2K&&(1q c.2K,o.2h.1z(),t.3E&&t.3E(s)),c.2D&&(1q c.2D,o.2h.1z())}),e},s.1m.3m=j(){j e(){q e=a.3F&&a.3F(t.C,n);e===!1||r.1a(t.C)}q t=K,n=t.1F,a=t.L;t.3G(),a.1c&&(2==a.x?n.w("1k").X("2w",j(){a.1c(n,t.C)}):a.1c(n,t.C)),6==r.1x&&t.3H(n),n.w("."+l[6]).2t("a").X("1C",j(){q e=i(K).C();J(0===e)a.1T?a.1T(t.C,n):a.3J?a.3J(t.C,n):r.1a(t.C);31{q o=a["M"+(e+1)]&&a["M"+(e+1)](t.C,n);o===!1||r.1a(t.C)}}),n.w("."+l[7]).X("1C",e),a.3K&&i("#m-k-W"+t.C).X("1C",j(){r.1a(t.C)}),n.w(".m-k-1y").X("1C",j(){q e=a.1y&&a.1y(n);e===!1||r.1y(t.C,a)}),n.w(".m-k-2E").X("1C",j(){i(K).4K("m-k-2n")?(r.2s(t.C),a.2s&&a.2s(n)):(r.1i(t.C,a),1R(j(){a.1i&&a.1i(n)},1H))}),a.1j&&(o.1j[t.C]=a.1j)},o.3L=j(){i.2r(i("3N"),j(e,t){q n=i(K);n.2L("."+l[0])[0]||1==n.B("k")&&i("."+l[0]).15<1&&n.3O("k").1E(),n=1Y})},s.1m.3H=j(e){i("3N").2r(j(e,t){q n=i(K);n.2L("."+l[0])[0]||"4P"===n.A("1Z")||n.B({k:"1"}).1z(),n=1Y})},s.1m.3G=j(){q e=K;r.1s=e.L.1s,r.4Q=j(e){q t=j(){r.1s++,e.A("z-C",r.1s+1)};D r.1s=3A(e[0].19.1s),e.X("2N",t),r.1s}},o.2V=j(e){q t=[e.F(),e.E(),e.1o().S,e.1o().O+U(e.A("4S-O"))];e.w(".m-k-2E").1u("m-k-2n"),e.B({P:t})},o.2q=j(e){l.1h.B("k-1i")==e&&(l.1h[0].19.3P?l.1h[0].19.3P("1X"):l.1h[0].19.4V("1X"),l.1h.3O("k-1i"))},e.k=r,r.3Q=j(e,t){D t=t||i("."+l[4]).B("2e"),i("#"+l[0]+t).w("1k").4X().w(e)},r.4Y=j(e){D i("#"+e).2L("."+l[4]).B("2e")},r.4Z=j(e){J(e){q t=r.3Q("1h",e).13(),n=i("#"+l[0]+e),a=n.w(l[1]).13()||0,o=n.w("."+l[6]).13()||0;n.A({E:t+a+o}),n.w("1k").A({E:t})}},r.50=j(e,t){i("#"+l[0]+e).w("1k").B("18",t)},r.19=j(e,t,n){q a=i("#"+l[0]+e),r=a.w(".m-k-H"),s=a.B("x"),f=a.w(l[1]).13()||0,c=a.w("."+l[6]).13()||0;a.B("1f");s!==o.x[3]&&s!==o.x[4]&&(n||(U(t.F)<=3e&&(t.F=3e),U(t.E)-f-c<=64&&(t.E=64+f+c)),a.A(t),c=a.w("."+l[6]).13(),s===o.x[2]?a.w("1k").A({E:U(t.E)-f-c}):r.A({E:U(t.E)-f-c-U(r.A("2f-S"))-U(r.A("2f-2U"))}))},r.1y=j(e,t){q a=i("#"+l[0]+e),s=a.w(l[1]).13()||0,f=a.B("1f")||53*o.2k+"2Q",c=a.A("1o");o.2V(a),o.1f[0]&&(f=o.1f[0],o.1f.35()),a.B("1o",c),r.19(e,{F:55,E:s,O:f,S:n.E()-s,1o:"1d",1X:"2P"},!0),a.w(".m-k-1y").1z(),"2T"===a.B("x")&&a.w(l[4]).1z(),o.2q(e),a.B("1f")||o.2k++,a.B("1f",f)},r.2s=j(e){q t=i("#"+l[0]+e),n=t.B("P").56(",");t.B("x");r.19(e,{F:U(n[0]),E:U(n[1]),S:U(n[2]),O:U(n[3]),1o:t.B("1o"),1X:"57"},!0),t.w(".m-k-2E").1D("m-k-2n"),t.w(".m-k-1y").1E(),"2T"===t.B("x")&&t.w(l[4]).1E(),o.2q(e)},r.1i=j(e){q t,a=i("#"+l[0]+e);o.2V(a),l.1h.B("k-1i")||l.1h.A("1X","2P").B("k-1i",e),58(t),t=1R(j(){q t="1d"===a.A("1o");r.19(e,{S:t?0:n.1N(),O:t?0:n.2u(),F:n.F(),E:n.E()},!0),a.w(".m-k-1y").1z()},1H)},r.T=j(e,t){q n=i("#"+l[0]+(t||r.C)).w(l[1]);n.1h(e)},r.1a=j(e){q t=i("#"+l[0]+e),n=t.B("x"),a="k-Q-1a";J(t[0]){q s="m-k-33",f=j(){J(n===o.x[1]&&"1U"===t.B("3i")){t.2t(":59(."+l[5]+")").2B();25(q a=t.w("."+s),r=0;r<2;r++)a.5a();a.A("1Z",a.1I("1Z")).1D(s)}31{J(n===o.x[2])5b{q f=i("#"+l[4]+e)[0];f.3S.1g.5d(""),f.3S.1a(),t.w("."+l[5])[0].5e(f)}5f(c){}t[0].5g="",t.2B()}"j"==R o.1j[e]&&o.1j[e](),1q o.1j[e]};t.1I("1P")&&t.1u("k-Q "+a),i("#m-k-5h, #m-k-W"+e).2B(),6==r.1x&&o.3L(),o.2q(e),t.B("1f")&&(o.2k--,o.1f.3T(t.B("1f"))),r.1x&&r.1x<10||!t.1I("1P")?f():1R(j(){f()},5j)}},r.2I=j(e){i.2r(i("."+l[0]),j(){q t=i(K),n=e?t.B("x")===e:1;n&&r.1a(t.B("2e")),n=1Y})};q f=r.2R||{},c=j(e){D f.17?" "+f.17+" "+f.17+"-"+e:""};r.3c=j(e,t){q a="";J(e=e||{},"j"==R e&&(t=e),e.P){q o=e.P;a=\'19="F: \'+o[0]+"; E: "+o[1]+\';"\',1q e.P}q s,l=2==e.3U?\'<3V G="m-k-2p"\'+a+">"+(e.2Z||"")+"</3V>":j(){D\'<2p x="\'+(1==e.3U?"5o":"5p")+\'" G="m-k-2p" 2Z="\'+(e.2Z||"")+\'">\'}(),f=e.1c;D 1q e.1c,r.1w(i.Y({x:1,M:["g;f;","e;d;"],H:l,17:"m-k-3c"+c("3c"),20:n.F(),1c:j(e){s=e.w(".m-k-2p"),s.3W(),"j"==R f&&f(e)},1e:!1,1T:j(i){q n=s.5r();""===n?s.3W():n.15>(e.3X||3Y)?r.N("s;t;u;v;"+(e.3X||3Y)+"w;x;y;",s,{N:1}):t&&t(n,i,s)}},e))},r.1A=j(e){e=e||{};q t=e.1A||{},n="m-K",a=e.1c;D 1q e.1c,r.1w(i.Y({x:1,17:"m-k-1A"+c("1A"),1e:!1,T:j(){q e=t.15,i=1,a="";J(e>0)25(a=\'<1b G="\'+n+\'">\'+t[0].T+"</1b>";i<e;i++)a+="<1b>"+t[i].T+"</1b>";D a}(),H:\'<3Z G="m-k-40">\'+j(){q e=t.15,i=1,a="";J(e>0)25(a=\'<2m G="m-k-41 \'+n+\'">\'+(t[0].H||"42 H")+"</2m>";i<e;i++)a+=\'<2m G="m-k-41">\'+(t[i].H||"42 H")+"</2m>";D a}()+"</3Z>",1c:j(t){q o=t.w(".m-k-T").2t(),r=t.w(".m-k-40").2t();o.X("2N",j(t){t.43?t.43():t.5G=!0;q a=i(K),o=a.C();a.1u(n).44().1D(n),r.5I(o).1E().44().1z(),"j"==R e.45&&e.45(o)}),"j"==R a&&a(t)}},e))},r.1l=j(t,n,a){j o(e,t,i){q n=46 5M;D n.18=e,n.5N?t(n):(n.3d=j(){n.3d=1Y,t(n)},3D(n.47=j(e){n.47=1Y,i(e)}))}q s={};J(t=t||{},t.1l){q l=t.1l.5P===5Q,f=l?t.1l:{},u=f.1I||[],d=f.3b||0;s.1t=(0|d)+1,t.1M=t.1M||"1M";q y=t.1c;J(1q t.1c,l){J(0===u.15)D r.2a("U;V;b;c;")}31{q p=i(t.1l),h=j(){u=[],p.w(t.1M).2r(j(e){q t=i(K);t.B("k-C",e),u.3T({2g:t.B("2g"),2j:t.B("k-2j"),18:t.B("k-18")||t.B("18"),62:t.B("18")})})};J(h(),0===u.15)D;J(n||p.X("1C",t.1M,j(){q e=i(K),n=e.B("k-C");r.1l(i.Y(t,{1l:{3b:n,1I:u,1A:t.1A},1i:t.1i}),!0),h()}),!n)D}s.28=j(e){s.1t--,s.1t<1&&(s.1t=u.15),s.34(e)},s.1Q=j(e,t){s.1t++,s.1t>u.15&&(s.1t=1,t)||s.34(e)},s.29=j(e){J(!s.1j){q t=e.68;e.1L(),37===t?s.28(!0):39===t?s.1Q(!0):27===t&&r.1a(s.C)}},s.34=j(e){J(!(u.15<=1))D f.3b=s.1t-1,r.1a(s.C),r.1l(t,!0,e)},s.4h=j(){s.2v.6b(j(){s.2A.1E()},j(){s.2A.1z()}),s.2v.w(".m-k-28").X("1C",j(e){e.1L(),s.28()}),s.2v.w(".m-k-1Q").X("1C",j(e){e.1L(),s.1Q()}),i(1g).X("29",s.29)},s.2W=r.2w(1,{W:!("W"3a t)&&.9,2z:!1}),o(u[d].18,j(n){r.1a(s.2W),s.C=r.1w(i.Y({x:1,1v:"m-k-1l",P:j(){q a=[n.F,n.E],o=[i(e).F()-1H,i(e).E()-1H];J(!t.1i&&(a[0]>o[0]||a[1]>o[1])){q r=[a[0]/o[0],a[1]/o[1]];r[0]>r[1]?(a[0]=a[0]/r[0],a[1]=a[1]/r[0]):r[0]<r[1]&&(a[0]=a[0]/r[1],a[1]=a[1]/r[1])}D[a[0]+"2Q",a[1]+"2Q"]}(),T:!1,W:.9,3K:!0,1G:!1,1n:".m-k-2Y 1M",3k:1,2z:!1,3B:!0,1P:!1,17:"m-k-1l"+c("1l"),H:\'<V G="m-k-2Y"><1M 18="\'+u[d].18+\'" 2g="\'+(u[d].2g||"")+\'" k-2j="\'+u[d].2j+\'"><V G="m-k-2A">\'+(u.15>1?\'<1b G="m-k-4k"><a 1K="1O:;" G="m-k-4l m-k-28"></a><a 1K="1O:;" G="m-k-4l m-k-1Q"></a></1b>\':"")+\'<V G="m-k-4m" 19="1Z:\'+(a?"6i":"")+\'"><1b G="m-k-6j"><a 1K="1O:;">\'+(u[d].2g||"")+"</a><4n>"+s.1t+"/"+u.15+"</4n></1b></V></V></V>",1c:j(e,i){s.2v=e.w(".m-k-2Y"),s.2A=e.w(".m-k-4k,.m-k-4m"),s.4h(e),t.1A&&t.1A(u[d],e),"j"==R y&&y(e)},1j:j(){s.1j=!0,i(1g).6l("29",s.29)}},t))},j(){r.1a(s.2W),r.2a("m;n;b;c;o;p;q;r;<6s>t;u;v;w;x;o;p;q;r;C;",{1J:6D,M:["p;q;r;","E;o;F;"],1T:j(){u.15>1&&s.1Q(!0,!0)}})})}},o.2F=j(t){i=t,n=i(e),l.1h=i("1h"),r.1w=j(e){q t=46 s(e);D t.C}},e.m&&m.1W?(r.2H(),m.1W("4s",j(t){r.1B=m.2R.6I,o.2F(m.$),e.k=r,t("k",r)})):"j"==R 1W&&1W.6J?1W(["4s"],j(){D o.2F(e.4t),r}):j(){o.2F(e.4t),r.2H()}()}(6L);',62,420,'|||||||||||||||||||function|layer||layui||||var||||||find|type|||css|attr|index|return|height|width|class|content|offset|if|this|config|btn|tips|left|area|anim|typeof|top|title|parseFloat|div|shade|on|extend|offsetTop||||outerHeight|offsetLeft|length||skin|src|style|close|span|success|fixed|resize|minLeft|document|html|full|end|iframe|photos|pt|move|position|icon|delete|auto|zIndex|imgIndex|addClass|id|open|ie|min|hide|tab|path|click|removeClass|show|layero|closeBtn|100|data|time|href|preventDefault|img|scrollTop|javascript|isOutAnim|imgnext|setTimeout|where|yes|object|color|define|overflow|null|display|maxWidth|outerWidth|tipTop|break|string|for|tipLeft||imgprev|keyup|msg|case|body|border|times|padding|alt|moveElem|ico|pid|minIndex|link|li|maxmin|test|input|rescollbar|each|restore|children|scrollLeft|bigimg|load|stY|stX|scrollbar|imgsee|remove|right|resizeStart|max|run|clientY|ready|closeAll|clientX|moveStart|parents|append|mousedown|cursor|hidden|px|cache|dialog|page|bottom|record|loadi|loading|phimg|value||else|creat|wrap|tabimg|shift|autoLeft||maxHeight||in|start|prompt|onload|260|TipsG|switch|cite|conType|vessel|moveType|background|callback|innerWidth|01|hui|3e3|default|theme|modules|TipsB|TipsT|TipsL|TipsR|addcss|ActiveXObject|parseInt|moveOut|resizing|void|moveEnd|cancel|openLayer|IE6|console|btn1|shadeClose|reselect|getElementById|select|removeAttr|removeProperty|getChildFrame|follow|contentWindow|push|formType|textarea|focus|maxlength|500|ul|tabmain|tabli|no|stopPropagation|siblings|change|new|onerror|getPropertyValue|currentStyle|getStyle|x56FE|x7247|x6D88|x53D6|x5B9A|x786E|event|currentScript|getPath|imguide|iconext|imgbar|em|x770B|x4E0B|x4E00|x5F20|jquery|jQuery|1989|x606F|isResize|000|mouseup|opacity|x4FE1|06|com|Invalid|one|error|webkitAnimationEnd|mozAnimationEnd|80|MSAnimationEnd|hasClass|appendChild|oanimationend|animationend|05|none|setTop|stylesheet|margin|rel|http|removeAttribute|04|contents|getFrameIndex|iframeAuto|iframeSrc|innerHeight|frameborder|181|layuicss|180|split|visible|clearTimeout|not|unwrap|try|03|write|removeChild|catch|innerHTML|moves|02|200|00|main|replace|createElement|password|text|prototype|val|x6700|x591A|x8F93|x5165|x4E2A|x5B57|x6570|head|lt|lb|getElementsByTagName|rt|rb|210|cancelBubble|className|eq|btnAlign|getAttribute|name|Image|complete|btn2|constructor|Object|confirm|getComputedStyle|alert|x6CA1|x6709|setwin|before|absolute|tipsMore|showtime|true|thumb|lastIndexOf||substring|readyState|interactive|keyCode|allowtransparency|scripts|hover|360|1e5|30px|strict|msie|match|block|imgtit|19891014|off|x5F53|x524D|x5730|x5740|x5F02|x5E38|br|x662F|x5426|x7EE7|x7EED|x67E5|toLowerCase|userAgent|navigator|se|xFF1F|3e4|x4E0D|x4E86|use|mousemove|dir|amd|scrolling|window'.split('|'),0,{})) ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/layer/mobile/layer.js ================================================ /*! layer mobile-v2.0.0 Web弹层组件 MIT License http://layer.layui.com/mobile By 贤心 */ ;!function(e){"use strict";var t=document,n="querySelectorAll",i="getElementsByClassName",a=function(e){return t[n](e)},s={type:0,shade:!0,shadeClose:!0,fixed:!0,anim:"scale"},l={extend:function(e){var t=JSON.parse(JSON.stringify(s));for(var n in e)t[n]=e[n];return t},timer:{},end:{}};l.touch=function(e,t){e.addEventListener("click",function(e){t.call(this,e)},!1)};var r=0,o=["layui-m-layer"],c=function(e){var t=this;t.config=l.extend(e),t.view()};c.prototype.view=function(){var e=this,n=e.config,s=t.createElement("div");e.id=s.id=o[0]+r,s.setAttribute("class",o[0]+" "+o[0]+(n.type||0)),s.setAttribute("index",r);var l=function(){var e="object"==typeof n.title;return n.title?'<h3 style="'+(e?n.title[1]:"")+'">'+(e?n.title[0]:n.title)+"</h3>":""}(),c=function(){"string"==typeof n.btn&&(n.btn=[n.btn]);var e,t=(n.btn||[]).length;return 0!==t&&n.btn?(e='<span yes type="1">'+n.btn[0]+"</span>",2===t&&(e='<span no type="0">'+n.btn[1]+"</span>"+e),'<div class="layui-m-layerbtn">'+e+"</div>"):""}();if(n.fixed||(n.top=n.hasOwnProperty("top")?n.top:100,n.style=n.style||"",n.style+=" top:"+(t.body.scrollTop+n.top)+"px"),2===n.type&&(n.content='<i></i><i class="layui-m-layerload"></i><i></i><p>'+(n.content||"")+"</p>"),n.skin&&(n.anim="up"),"msg"===n.skin&&(n.shade=!1),s.innerHTML=(n.shade?"<div "+("string"==typeof n.shade?'style="'+n.shade+'"':"")+' class="layui-m-layershade"></div>':"")+'<div class="layui-m-layermain" '+(n.fixed?"":'style="position:static;"')+'><div class="layui-m-layersection"><div class="layui-m-layerchild '+(n.skin?"layui-m-layer-"+n.skin+" ":"")+(n.className?n.className:"")+" "+(n.anim?"layui-m-anim-"+n.anim:"")+'" '+(n.style?'style="'+n.style+'"':"")+">"+l+'<div class="layui-m-layercont">'+n.content+"</div>"+c+"</div></div></div>",!n.type||2===n.type){var d=t[i](o[0]+n.type),y=d.length;y>=1&&layer.close(d[0].getAttribute("index"))}document.body.appendChild(s);var u=e.elem=a("#"+e.id)[0];n.success&&n.success(u),e.index=r++,e.action(n,u)},c.prototype.action=function(e,t){var n=this;e.time&&(l.timer[n.index]=setTimeout(function(){layer.close(n.index)},1e3*e.time));var a=function(){var t=this.getAttribute("type");0==t?(e.no&&e.no(),layer.close(n.index)):e.yes?e.yes(n.index):layer.close(n.index)};if(e.btn)for(var s=t[i]("layui-m-layerbtn")[0].children,r=s.length,o=0;o<r;o++)l.touch(s[o],a);if(e.shade&&e.shadeClose){var c=t[i]("layui-m-layershade")[0];l.touch(c,function(){layer.close(n.index,e.end)})}e.end&&(l.end[n.index]=e.end)},e.layer={v:"2.0",index:r,open:function(e){var t=new c(e||{});return t.index},close:function(e){var n=a("#"+o[0]+e)[0];n&&(n.innerHTML="",t.body.removeChild(n),clearTimeout(l.timer[e]),delete l.timer[e],"function"==typeof l.end[e]&&l.end[e](),delete l.end[e])},closeAll:function(){for(var e=t[i](o[0]),n=0,a=e.length;n<a;n++)layer.close(0|e[0].getAttribute("index"))}},"function"==typeof define?define(function(){return layer}):function(){var e=document.scripts,n=e[e.length-1],i=n.src,a=i.substring(0,i.lastIndexOf("/")+1);n.getAttribute("merge")||document.head.appendChild(function(){var e=t.createElement("link");return e.href=a+"need/layer.css?2.0",e.type="text/css",e.rel="styleSheet",e.id="layermcss",e}())}()}(window); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/layer/mobile/need/layer.css ================================================ .layui-m-layer{position:relative;z-index:19891014}.layui-m-layer *{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.layui-m-layermain,.layui-m-layershade{position:fixed;left:0;top:0;width:100%;height:100%}.layui-m-layershade{background-color:rgba(0,0,0,.7);pointer-events:auto}.layui-m-layermain{display:table;font-family:Helvetica,arial,sans-serif;pointer-events:none}.layui-m-layermain .layui-m-layersection{display:table-cell;vertical-align:middle;text-align:center}.layui-m-layerchild{position:relative;display:inline-block;text-align:left;background-color:#fff;font-size:14px;border-radius:5px;box-shadow:0 0 8px rgba(0,0,0,.1);pointer-events:auto;-webkit-overflow-scrolling:touch;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.2s;animation-duration:.2s}@-webkit-keyframes layui-m-anim-scale{0%{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes layui-m-anim-scale{0%{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}.layui-m-anim-scale{animation-name:layui-m-anim-scale;-webkit-animation-name:layui-m-anim-scale}@-webkit-keyframes layui-m-anim-up{0%{opacity:0;-webkit-transform:translateY(800px);transform:translateY(800px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes layui-m-anim-up{0%{opacity:0;-webkit-transform:translateY(800px);transform:translateY(800px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}.layui-m-anim-up{-webkit-animation-name:layui-m-anim-up;animation-name:layui-m-anim-up}.layui-m-layer0 .layui-m-layerchild{width:90%;max-width:640px}.layui-m-layer1 .layui-m-layerchild{border:none;border-radius:0}.layui-m-layer2 .layui-m-layerchild{width:auto;max-width:260px;min-width:40px;border:none;background:0 0;box-shadow:none;color:#fff}.layui-m-layerchild h3{padding:0 10px;height:60px;line-height:60px;font-size:16px;font-weight:400;border-radius:5px 5px 0 0;text-align:center}.layui-m-layerbtn span,.layui-m-layerchild h3{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-m-layercont{padding:50px 30px;line-height:22px;text-align:center}.layui-m-layer1 .layui-m-layercont{padding:0;text-align:left}.layui-m-layer2 .layui-m-layercont{text-align:center;padding:0;line-height:0}.layui-m-layer2 .layui-m-layercont i{width:25px;height:25px;margin-left:8px;display:inline-block;background-color:#fff;border-radius:100%;-webkit-animation:layui-m-anim-loading 1.4s infinite ease-in-out;animation:layui-m-anim-loading 1.4s infinite ease-in-out;-webkit-animation-fill-mode:both;animation-fill-mode:both}.layui-m-layerbtn,.layui-m-layerbtn span{position:relative;text-align:center;border-radius:0 0 5px 5px}.layui-m-layer2 .layui-m-layercont p{margin-top:20px}@-webkit-keyframes layui-m-anim-loading{0%,100%,80%{transform:scale(0);-webkit-transform:scale(0)}40%{transform:scale(1);-webkit-transform:scale(1)}}@keyframes layui-m-anim-loading{0%,100%,80%{transform:scale(0);-webkit-transform:scale(0)}40%{transform:scale(1);-webkit-transform:scale(1)}}.layui-m-layer2 .layui-m-layercont i:first-child{margin-left:0;-webkit-animation-delay:-.32s;animation-delay:-.32s}.layui-m-layer2 .layui-m-layercont i.layui-m-layerload{-webkit-animation-delay:-.16s;animation-delay:-.16s}.layui-m-layer2 .layui-m-layercont>div{line-height:22px;padding-top:7px;margin-bottom:20px;font-size:14px}.layui-m-layerbtn{display:box;display:-moz-box;display:-webkit-box;width:100%;height:50px;line-height:50px;font-size:0;border-top:1px solid #D0D0D0;background-color:#F2F2F2}.layui-m-layerbtn span{display:block;-moz-box-flex:1;box-flex:1;-webkit-box-flex:1;font-size:14px;cursor:pointer}.layui-m-layerbtn span[yes]{color:#40AFFE}.layui-m-layerbtn span[no]{border-right:1px solid #D0D0D0;border-radius:0 0 0 5px}.layui-m-layerbtn span:active{background-color:#F6F6F6}.layui-m-layerend{position:absolute;right:7px;top:10px;width:30px;height:30px;border:0;font-weight:400;background:0 0;cursor:pointer;-webkit-appearance:none;font-size:30px}.layui-m-layerend::after,.layui-m-layerend::before{position:absolute;left:5px;top:15px;content:'';width:18px;height:1px;background-color:#999;transform:rotate(45deg);-webkit-transform:rotate(45deg);border-radius:3px}.layui-m-layerend::after{transform:rotate(-45deg);-webkit-transform:rotate(-45deg)}body .layui-m-layer .layui-m-layer-footer{position:fixed;width:95%;max-width:100%;margin:0 auto;left:0;right:0;bottom:10px;background:0 0}.layui-m-layer-footer .layui-m-layercont{padding:20px;border-radius:5px 5px 0 0;background-color:rgba(255,255,255,.8)}.layui-m-layer-footer .layui-m-layerbtn{display:block;height:auto;background:0 0;border-top:none}.layui-m-layer-footer .layui-m-layerbtn span{background-color:rgba(255,255,255,.8)}.layui-m-layer-footer .layui-m-layerbtn span[no]{color:#FD482C;border-top:1px solid #c2c2c2;border-radius:0 0 5px 5px}.layui-m-layer-footer .layui-m-layerbtn span[yes]{margin-top:10px;border-radius:5px}body .layui-m-layer .layui-m-layer-msg{width:auto;max-width:90%;margin:0 auto;bottom:-150px;background-color:rgba(0,0,0,.7);color:#fff}.layui-m-layer-msg .layui-m-layercont{padding:10px 20px} ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/layer/theme/default/layer.css ================================================ .layui-layer-imgbar,.layui-layer-imgtit a,.layui-layer-tab .layui-layer-title span,.layui-layer-title{text-overflow:ellipsis;white-space:nowrap}html #layuicss-layer{display:none;position:absolute;width:1989px}.layui-layer,.layui-layer-shade{position:fixed;_position:absolute;pointer-events:auto}.layui-layer-shade{top:0;left:0;width:100%;height:100%;_height:expression(document.body.offsetHeight+"px")}.layui-layer{-webkit-overflow-scrolling:touch;top:150px;left:0;margin:0;padding:0;background-color:#fff;-webkit-background-clip:content;border-radius:2px;box-shadow:1px 1px 50px rgba(0,0,0,.3)}.layui-layer-close{position:absolute}.layui-layer-content{position:relative}.layui-layer-border{border:1px solid #B2B2B2;border:1px solid rgba(0,0,0,.1);box-shadow:1px 1px 5px rgba(0,0,0,.2)}.layui-layer-load{background:url(loading-1.gif) center center no-repeat #eee}.layui-layer-ico{background:url(icon.png) no-repeat}.layui-layer-btn a,.layui-layer-dialog .layui-layer-ico,.layui-layer-setwin a{display:inline-block;*display:inline;*zoom:1;vertical-align:top}.layui-layer-move{display:none;position:fixed;*position:absolute;left:0;top:0;width:100%;height:100%;cursor:move;opacity:0;filter:alpha(opacity=0);background-color:#fff;z-index:2147483647}.layui-layer-resize{position:absolute;width:15px;height:15px;right:0;bottom:0;cursor:se-resize}.layer-anim{-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.3s;animation-duration:.3s}@-webkit-keyframes layer-bounceIn{0%{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes layer-bounceIn{0%{opacity:0;-webkit-transform:scale(.5);-ms-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}.layer-anim-00{-webkit-animation-name:layer-bounceIn;animation-name:layer-bounceIn}@-webkit-keyframes layer-zoomInDown{0%{opacity:0;-webkit-transform:scale(.1) translateY(-2000px);transform:scale(.1) translateY(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateY(60px);transform:scale(.475) translateY(60px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}@keyframes layer-zoomInDown{0%{opacity:0;-webkit-transform:scale(.1) translateY(-2000px);-ms-transform:scale(.1) translateY(-2000px);transform:scale(.1) translateY(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateY(60px);-ms-transform:scale(.475) translateY(60px);transform:scale(.475) translateY(60px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}.layer-anim-01{-webkit-animation-name:layer-zoomInDown;animation-name:layer-zoomInDown}@-webkit-keyframes layer-fadeInUpBig{0%{opacity:0;-webkit-transform:translateY(2000px);transform:translateY(2000px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes layer-fadeInUpBig{0%{opacity:0;-webkit-transform:translateY(2000px);-ms-transform:translateY(2000px);transform:translateY(2000px)}100%{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}.layer-anim-02{-webkit-animation-name:layer-fadeInUpBig;animation-name:layer-fadeInUpBig}@-webkit-keyframes layer-zoomInLeft{0%{opacity:0;-webkit-transform:scale(.1) translateX(-2000px);transform:scale(.1) translateX(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateX(48px);transform:scale(.475) translateX(48px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}@keyframes layer-zoomInLeft{0%{opacity:0;-webkit-transform:scale(.1) translateX(-2000px);-ms-transform:scale(.1) translateX(-2000px);transform:scale(.1) translateX(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateX(48px);-ms-transform:scale(.475) translateX(48px);transform:scale(.475) translateX(48px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}.layer-anim-03{-webkit-animation-name:layer-zoomInLeft;animation-name:layer-zoomInLeft}@-webkit-keyframes layer-rollIn{0%{opacity:0;-webkit-transform:translateX(-100%) rotate(-120deg);transform:translateX(-100%) rotate(-120deg)}100%{opacity:1;-webkit-transform:translateX(0) rotate(0);transform:translateX(0) rotate(0)}}@keyframes layer-rollIn{0%{opacity:0;-webkit-transform:translateX(-100%) rotate(-120deg);-ms-transform:translateX(-100%) rotate(-120deg);transform:translateX(-100%) rotate(-120deg)}100%{opacity:1;-webkit-transform:translateX(0) rotate(0);-ms-transform:translateX(0) rotate(0);transform:translateX(0) rotate(0)}}.layer-anim-04{-webkit-animation-name:layer-rollIn;animation-name:layer-rollIn}@keyframes layer-fadeIn{0%{opacity:0}100%{opacity:1}}.layer-anim-05{-webkit-animation-name:layer-fadeIn;animation-name:layer-fadeIn}@-webkit-keyframes layer-shake{0%,100%{-webkit-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px);transform:translateX(10px)}}@keyframes layer-shake{0%,100%{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px);-ms-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px);-ms-transform:translateX(10px);transform:translateX(10px)}}.layer-anim-06{-webkit-animation-name:layer-shake;animation-name:layer-shake}@-webkit-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}.layui-layer-title{padding:0 80px 0 20px;height:42px;line-height:42px;border-bottom:1px solid #eee;font-size:14px;color:#333;overflow:hidden;background-color:#F8F8F8;border-radius:2px 2px 0 0}.layui-layer-setwin{position:absolute;right:15px;*right:0;top:15px;font-size:0;line-height:initial}.layui-layer-setwin a{position:relative;width:16px;height:16px;margin-left:10px;font-size:12px;_overflow:hidden}.layui-layer-setwin .layui-layer-min cite{position:absolute;width:14px;height:2px;left:0;top:50%;margin-top:-1px;background-color:#2E2D3C;cursor:pointer;_overflow:hidden}.layui-layer-setwin .layui-layer-min:hover cite{background-color:#2D93CA}.layui-layer-setwin .layui-layer-max{background-position:-32px -40px}.layui-layer-setwin .layui-layer-max:hover{background-position:-16px -40px}.layui-layer-setwin .layui-layer-maxmin{background-position:-65px -40px}.layui-layer-setwin .layui-layer-maxmin:hover{background-position:-49px -40px}.layui-layer-setwin .layui-layer-close1{background-position:1px -40px;cursor:pointer}.layui-layer-setwin .layui-layer-close1:hover{opacity:.7}.layui-layer-setwin .layui-layer-close2{position:absolute;right:-28px;top:-28px;width:30px;height:30px;margin-left:0;background-position:-149px -31px;*right:-18px;_display:none}.layui-layer-setwin .layui-layer-close2:hover{background-position:-180px -31px}.layui-layer-btn{text-align:right;padding:0 15px 12px;pointer-events:auto;user-select:none;-webkit-user-select:none}.layui-layer-btn a{height:28px;line-height:28px;margin:5px 5px 0;padding:0 15px;border:1px solid #dedede;background-color:#fff;color:#333;border-radius:2px;font-weight:400;cursor:pointer;text-decoration:none}.layui-layer-btn a:hover{opacity:.9;text-decoration:none}.layui-layer-btn a:active{opacity:.8}.layui-layer-btn .layui-layer-btn0{border-color:#1E9FFF;background-color:#1E9FFF;color:#fff}.layui-layer-btn-l{text-align:left}.layui-layer-btn-c{text-align:center}.layui-layer-dialog{min-width:260px}.layui-layer-dialog .layui-layer-content{position:relative;padding:20px;line-height:24px;word-break:break-all;overflow:hidden;font-size:14px;overflow-x:hidden;overflow-y:auto}.layui-layer-dialog .layui-layer-content .layui-layer-ico{position:absolute;top:16px;left:15px;_left:-40px;width:30px;height:30px}.layui-layer-ico1{background-position:-30px 0}.layui-layer-ico2{background-position:-60px 0}.layui-layer-ico3{background-position:-90px 0}.layui-layer-ico4{background-position:-120px 0}.layui-layer-ico5{background-position:-150px 0}.layui-layer-ico6{background-position:-180px 0}.layui-layer-rim{border:6px solid #8D8D8D;border:6px solid rgba(0,0,0,.3);border-radius:5px;box-shadow:none}.layui-layer-msg{min-width:180px;border:1px solid #D3D4D3;box-shadow:none}.layui-layer-hui{min-width:100px;background-color:#000;filter:alpha(opacity=60);background-color:rgba(0,0,0,.6);color:#fff;border:none}.layui-layer-hui .layui-layer-content{padding:12px 25px;text-align:center}.layui-layer-dialog .layui-layer-padding{padding:20px 20px 20px 55px;text-align:left}.layui-layer-page .layui-layer-content{position:relative;overflow:auto}.layui-layer-iframe .layui-layer-btn,.layui-layer-page .layui-layer-btn{padding-top:10px}.layui-layer-nobg{background:0 0}.layui-layer-iframe iframe{display:block;width:100%}.layui-layer-loading{border-radius:100%;background:0 0;box-shadow:none;border:none}.layui-layer-loading .layui-layer-content{width:60px;height:24px;background:url(loading-0.gif) no-repeat}.layui-layer-loading .layui-layer-loading1{width:37px;height:37px;background:url(loading-1.gif) no-repeat}.layui-layer-ico16,.layui-layer-loading .layui-layer-loading2{width:32px;height:32px;background:url(loading-2.gif) no-repeat}.layui-layer-tips{background:0 0;box-shadow:none;border:none}.layui-layer-tips .layui-layer-content{position:relative;line-height:22px;min-width:12px;padding:8px 15px;font-size:12px;_float:left;border-radius:2px;box-shadow:1px 1px 3px rgba(0,0,0,.2);background-color:#000;color:#fff}.layui-layer-tips .layui-layer-close{right:-2px;top:-1px}.layui-layer-tips i.layui-layer-TipsG{position:absolute;width:0;height:0;border-width:8px;border-color:transparent;border-style:dashed;*overflow:hidden}.layui-layer-tips i.layui-layer-TipsB,.layui-layer-tips i.layui-layer-TipsT{left:5px;border-right-style:solid;border-right-color:#000}.layui-layer-tips i.layui-layer-TipsT{bottom:-8px}.layui-layer-tips i.layui-layer-TipsB{top:-8px}.layui-layer-tips i.layui-layer-TipsL,.layui-layer-tips i.layui-layer-TipsR{top:5px;border-bottom-style:solid;border-bottom-color:#000}.layui-layer-tips i.layui-layer-TipsR{left:-8px}.layui-layer-tips i.layui-layer-TipsL{right:-8px}.layui-layer-lan[type=dialog]{min-width:280px}.layui-layer-lan .layui-layer-title{background:#4476A7;color:#fff;border:none}.layui-layer-lan .layui-layer-btn{padding:5px 10px 10px;text-align:right;border-top:1px solid #E9E7E7}.layui-layer-lan .layui-layer-btn a{background:#fff;border-color:#E9E7E7;color:#333}.layui-layer-lan .layui-layer-btn .layui-layer-btn1{background:#C9C5C5}.layui-layer-molv .layui-layer-title{background:#009f95;color:#fff;border:none}.layui-layer-molv .layui-layer-btn a{background:#009f95;border-color:#009f95}.layui-layer-molv .layui-layer-btn .layui-layer-btn1{background:#92B8B1}.layui-layer-iconext{background:url(icon-ext.png) no-repeat}.layui-layer-prompt .layui-layer-input{display:block;width:230px;height:36px;margin:0 auto;line-height:30px;padding-left:10px;border:1px solid #e6e6e6;color:#333}.layui-layer-prompt textarea.layui-layer-input{width:300px;height:100px;line-height:20px;padding:6px 10px}.layui-layer-prompt .layui-layer-content{padding:20px}.layui-layer-prompt .layui-layer-btn{padding-top:0}.layui-layer-tab{box-shadow:1px 1px 50px rgba(0,0,0,.4)}.layui-layer-tab .layui-layer-title{padding-left:0;overflow:visible}.layui-layer-tab .layui-layer-title span{position:relative;float:left;min-width:80px;max-width:260px;padding:0 20px;text-align:center;overflow:hidden;cursor:pointer}.layui-layer-tab .layui-layer-title span.layui-this{height:43px;border-left:1px solid #eee;border-right:1px solid #eee;background-color:#fff;z-index:10}.layui-layer-tab .layui-layer-title span:first-child{border-left:none}.layui-layer-tabmain{line-height:24px;clear:both}.layui-layer-tabmain .layui-layer-tabli{display:none}.layui-layer-tabmain .layui-layer-tabli.layui-this{display:block}.layui-layer-photos{-webkit-animation-duration:.8s;animation-duration:.8s}.layui-layer-photos .layui-layer-content{overflow:hidden;text-align:center}.layui-layer-photos .layui-layer-phimg img{position:relative;width:100%;display:inline-block;*display:inline;*zoom:1;vertical-align:top}.layui-layer-imgbar,.layui-layer-imguide{display:none}.layui-layer-imgnext,.layui-layer-imgprev{position:absolute;top:50%;width:27px;_width:44px;height:44px;margin-top:-22px;outline:0;blr:expression(this.onFocus=this.blur())}.layui-layer-imgprev{left:10px;background-position:-5px -5px;_background-position:-70px -5px}.layui-layer-imgprev:hover{background-position:-33px -5px;_background-position:-120px -5px}.layui-layer-imgnext{right:10px;_right:8px;background-position:-5px -50px;_background-position:-70px -50px}.layui-layer-imgnext:hover{background-position:-33px -50px;_background-position:-120px -50px}.layui-layer-imgbar{position:absolute;left:0;bottom:0;width:100%;height:32px;line-height:32px;background-color:rgba(0,0,0,.8);background-color:#000\9;filter:Alpha(opacity=80);color:#fff;overflow:hidden;font-size:0}.layui-layer-imgtit *{display:inline-block;*display:inline;*zoom:1;vertical-align:top;font-size:12px}.layui-layer-imgtit a{max-width:65%;overflow:hidden;color:#fff}.layui-layer-imgtit a:hover{color:#fff;text-decoration:underline}.layui-layer-imgtit em{padding-left:10px;font-style:normal}@-webkit-keyframes layer-bounceOut{100%{opacity:0;-webkit-transform:scale(.7);transform:scale(.7)}30%{-webkit-transform:scale(1.05);transform:scale(1.05)}0%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes layer-bounceOut{100%{opacity:0;-webkit-transform:scale(.7);-ms-transform:scale(.7);transform:scale(.7)}30%{-webkit-transform:scale(1.05);-ms-transform:scale(1.05);transform:scale(1.05)}0%{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}.layer-anim-close{-webkit-animation-name:layer-bounceOut;animation-name:layer-bounceOut;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.2s;animation-duration:.2s}@media screen and (max-width:1100px){.layui-layer-iframe{overflow-y:auto;-webkit-overflow-scrolling:touch}} ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/moment-timezone/moment-timezone-with-data-10-year-range.js ================================================ //! moment-timezone.js //! version : 0.5.28 //! Copyright (c) JS Foundation and other contributors //! license : MIT //! github.com/moment/moment-timezone (function (root, factory) { "use strict"; /*global define*/ if (typeof module === 'object' && module.exports) { module.exports = factory(require('moment')); // Node } else if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else { factory(root.moment); // Browser } }(this, function (moment) { "use strict"; // Do not load moment-timezone a second time. // if (moment.tz !== undefined) { // logError('Moment Timezone ' + moment.tz.version + ' was already loaded ' + (moment.tz.dataVersion ? 'with data from ' : 'without any data') + moment.tz.dataVersion); // return moment; // } var VERSION = "0.5.28", zones = {}, links = {}, countries = {}, names = {}, guesses = {}, cachedGuess; if (!moment || typeof moment.version !== 'string') { logError('Moment Timezone requires Moment.js. See https://momentjs.com/timezone/docs/#/use-it/browser/'); } var momentVersion = moment.version.split('.'), major = +momentVersion[0], minor = +momentVersion[1]; // Moment.js version check if (major < 2 || (major === 2 && minor < 6)) { logError('Moment Timezone requires Moment.js >= 2.6.0. You are using Moment.js ' + moment.version + '. See momentjs.com'); } /************************************ Unpacking ************************************/ function charCodeToInt(charCode) { if (charCode > 96) { return charCode - 87; } else if (charCode > 64) { return charCode - 29; } return charCode - 48; } function unpackBase60(string) { var i = 0, parts = string.split('.'), whole = parts[0], fractional = parts[1] || '', multiplier = 1, num, out = 0, sign = 1; // handle negative numbers if (string.charCodeAt(0) === 45) { i = 1; sign = -1; } // handle digits before the decimal for (i; i < whole.length; i++) { num = charCodeToInt(whole.charCodeAt(i)); out = 60 * out + num; } // handle digits after the decimal for (i = 0; i < fractional.length; i++) { multiplier = multiplier / 60; num = charCodeToInt(fractional.charCodeAt(i)); out += num * multiplier; } return out * sign; } function arrayToInt (array) { for (var i = 0; i < array.length; i++) { array[i] = unpackBase60(array[i]); } } function intToUntil (array, length) { for (var i = 0; i < length; i++) { array[i] = Math.round((array[i - 1] || 0) + (array[i] * 60000)); // minutes to milliseconds } array[length - 1] = Infinity; } function mapIndices (source, indices) { var out = [], i; for (i = 0; i < indices.length; i++) { out[i] = source[indices[i]]; } return out; } function unpack (string) { var data = string.split('|'), offsets = data[2].split(' '), indices = data[3].split(''), untils = data[4].split(' '); arrayToInt(offsets); arrayToInt(indices); arrayToInt(untils); intToUntil(untils, indices.length); return { name : data[0], abbrs : mapIndices(data[1].split(' '), indices), offsets : mapIndices(offsets, indices), untils : untils, population : data[5] | 0 }; } /************************************ Zone object ************************************/ function Zone (packedString) { if (packedString) { this._set(unpack(packedString)); } } Zone.prototype = { _set : function (unpacked) { this.name = unpacked.name; this.abbrs = unpacked.abbrs; this.untils = unpacked.untils; this.offsets = unpacked.offsets; this.population = unpacked.population; }, _index : function (timestamp) { var target = +timestamp, untils = this.untils, i; for (i = 0; i < untils.length; i++) { if (target < untils[i]) { return i; } } }, countries : function () { var zone_name = this.name; return Object.keys(countries).filter(function (country_code) { return countries[country_code].zones.indexOf(zone_name) !== -1; }); }, parse : function (timestamp) { var target = +timestamp, offsets = this.offsets, untils = this.untils, max = untils.length - 1, offset, offsetNext, offsetPrev, i; for (i = 0; i < max; i++) { offset = offsets[i]; offsetNext = offsets[i + 1]; offsetPrev = offsets[i ? i - 1 : i]; if (offset < offsetNext && tz.moveAmbiguousForward) { offset = offsetNext; } else if (offset > offsetPrev && tz.moveInvalidForward) { offset = offsetPrev; } if (target < untils[i] - (offset * 60000)) { return offsets[i]; } } return offsets[max]; }, abbr : function (mom) { return this.abbrs[this._index(mom)]; }, offset : function (mom) { logError("zone.offset has been deprecated in favor of zone.utcOffset"); return this.offsets[this._index(mom)]; }, utcOffset : function (mom) { return this.offsets[this._index(mom)]; } }; /************************************ Country object ************************************/ function Country (country_name, zone_names) { this.name = country_name; this.zones = zone_names; } /************************************ Current Timezone ************************************/ function OffsetAt(at) { var timeString = at.toTimeString(); var abbr = timeString.match(/\([a-z ]+\)/i); if (abbr && abbr[0]) { // 17:56:31 GMT-0600 (CST) // 17:56:31 GMT-0600 (Central Standard Time) abbr = abbr[0].match(/[A-Z]/g); abbr = abbr ? abbr.join('') : undefined; } else { // 17:56:31 CST // 17:56:31 GMT+0800 (台北標準時間) abbr = timeString.match(/[A-Z]{3,5}/g); abbr = abbr ? abbr[0] : undefined; } if (abbr === 'GMT') { abbr = undefined; } this.at = +at; this.abbr = abbr; this.offset = at.getTimezoneOffset(); } function ZoneScore(zone) { this.zone = zone; this.offsetScore = 0; this.abbrScore = 0; } ZoneScore.prototype.scoreOffsetAt = function (offsetAt) { this.offsetScore += Math.abs(this.zone.utcOffset(offsetAt.at) - offsetAt.offset); if (this.zone.abbr(offsetAt.at).replace(/[^A-Z]/g, '') !== offsetAt.abbr) { this.abbrScore++; } }; function findChange(low, high) { var mid, diff; while ((diff = ((high.at - low.at) / 12e4 | 0) * 6e4)) { mid = new OffsetAt(new Date(low.at + diff)); if (mid.offset === low.offset) { low = mid; } else { high = mid; } } return low; } function userOffsets() { var startYear = new Date().getFullYear() - 2, last = new OffsetAt(new Date(startYear, 0, 1)), offsets = [last], change, next, i; for (i = 1; i < 48; i++) { next = new OffsetAt(new Date(startYear, i, 1)); if (next.offset !== last.offset) { change = findChange(last, next); offsets.push(change); offsets.push(new OffsetAt(new Date(change.at + 6e4))); } last = next; } for (i = 0; i < 4; i++) { offsets.push(new OffsetAt(new Date(startYear + i, 0, 1))); offsets.push(new OffsetAt(new Date(startYear + i, 6, 1))); } return offsets; } function sortZoneScores (a, b) { if (a.offsetScore !== b.offsetScore) { return a.offsetScore - b.offsetScore; } if (a.abbrScore !== b.abbrScore) { return a.abbrScore - b.abbrScore; } if (a.zone.population !== b.zone.population) { return b.zone.population - a.zone.population; } return b.zone.name.localeCompare(a.zone.name); } function addToGuesses (name, offsets) { var i, offset; arrayToInt(offsets); for (i = 0; i < offsets.length; i++) { offset = offsets[i]; guesses[offset] = guesses[offset] || {}; guesses[offset][name] = true; } } function guessesForUserOffsets (offsets) { var offsetsLength = offsets.length, filteredGuesses = {}, out = [], i, j, guessesOffset; for (i = 0; i < offsetsLength; i++) { guessesOffset = guesses[offsets[i].offset] || {}; for (j in guessesOffset) { if (guessesOffset.hasOwnProperty(j)) { filteredGuesses[j] = true; } } } for (i in filteredGuesses) { if (filteredGuesses.hasOwnProperty(i)) { out.push(names[i]); } } return out; } function rebuildGuess () { // use Intl API when available and returning valid time zone try { var intlName = Intl.DateTimeFormat().resolvedOptions().timeZone; if (intlName && intlName.length > 3) { var name = names[normalizeName(intlName)]; if (name) { return name; } logError("Moment Timezone found " + intlName + " from the Intl api, but did not have that data loaded."); } } catch (e) { // Intl unavailable, fall back to manual guessing. } var offsets = userOffsets(), offsetsLength = offsets.length, guesses = guessesForUserOffsets(offsets), zoneScores = [], zoneScore, i, j; for (i = 0; i < guesses.length; i++) { zoneScore = new ZoneScore(getZone(guesses[i]), offsetsLength); for (j = 0; j < offsetsLength; j++) { zoneScore.scoreOffsetAt(offsets[j]); } zoneScores.push(zoneScore); } zoneScores.sort(sortZoneScores); return zoneScores.length > 0 ? zoneScores[0].zone.name : undefined; } function guess (ignoreCache) { if (!cachedGuess || ignoreCache) { cachedGuess = rebuildGuess(); } return cachedGuess; } /************************************ Global Methods ************************************/ function normalizeName (name) { return (name || '').toLowerCase().replace(/\//g, '_'); } function addZone (packed) { var i, name, split, normalized; if (typeof packed === "string") { packed = [packed]; } for (i = 0; i < packed.length; i++) { split = packed[i].split('|'); name = split[0]; normalized = normalizeName(name); zones[normalized] = packed[i]; names[normalized] = name; addToGuesses(normalized, split[2].split(' ')); } } function getZone (name, caller) { name = normalizeName(name); var zone = zones[name]; var link; if (zone instanceof Zone) { return zone; } if (typeof zone === 'string') { zone = new Zone(zone); zones[name] = zone; return zone; } // Pass getZone to prevent recursion more than 1 level deep if (links[name] && caller !== getZone && (link = getZone(links[name], getZone))) { zone = zones[name] = new Zone(); zone._set(link); zone.name = names[name]; return zone; } return null; } function getNames () { var i, out = []; for (i in names) { if (names.hasOwnProperty(i) && (zones[i] || zones[links[i]]) && names[i]) { out.push(names[i]); } } return out.sort(); } function getCountryNames () { return Object.keys(countries); } function addLink (aliases) { var i, alias, normal0, normal1; if (typeof aliases === "string") { aliases = [aliases]; } for (i = 0; i < aliases.length; i++) { alias = aliases[i].split('|'); normal0 = normalizeName(alias[0]); normal1 = normalizeName(alias[1]); links[normal0] = normal1; names[normal0] = alias[0]; links[normal1] = normal0; names[normal1] = alias[1]; } } function addCountries (data) { var i, country_code, country_zones, split; if (!data || !data.length) return; for (i = 0; i < data.length; i++) { split = data[i].split('|'); country_code = split[0].toUpperCase(); country_zones = split[1].split(' '); countries[country_code] = new Country( country_code, country_zones ); } } function getCountry (name) { name = name.toUpperCase(); return countries[name] || null; } function zonesForCountry(country, with_offset) { country = getCountry(country); if (!country) return null; var zones = country.zones.sort(); if (with_offset) { return zones.map(function (zone_name) { var zone = getZone(zone_name); return { name: zone_name, offset: zone.utcOffset(new Date()) }; }); } return zones; } function loadData (data) { addZone(data.zones); addLink(data.links); addCountries(data.countries); tz.dataVersion = data.version; } function zoneExists (name) { if (!zoneExists.didShowError) { zoneExists.didShowError = true; logError("moment.tz.zoneExists('" + name + "') has been deprecated in favor of !moment.tz.zone('" + name + "')"); } return !!getZone(name); } function needsOffset (m) { var isUnixTimestamp = (m._f === 'X' || m._f === 'x'); return !!(m._a && (m._tzm === undefined) && !isUnixTimestamp); } function logError (message) { if (typeof console !== 'undefined' && typeof console.error === 'function') { console.error(message); } } /************************************ moment.tz namespace ************************************/ function tz (input) { var args = Array.prototype.slice.call(arguments, 0, -1), name = arguments[arguments.length - 1], zone = getZone(name), out = moment.utc.apply(null, args); if (zone && !moment.isMoment(input) && needsOffset(out)) { out.add(zone.parse(out), 'minutes'); } out.tz(name); return out; } tz.version = VERSION; tz.dataVersion = ''; tz._zones = zones; tz._links = links; tz._names = names; tz._countries = countries; tz.add = addZone; tz.link = addLink; tz.load = loadData; tz.zone = getZone; tz.zoneExists = zoneExists; // deprecated in 0.1.0 tz.guess = guess; tz.names = getNames; tz.Zone = Zone; tz.unpack = unpack; tz.unpackBase60 = unpackBase60; tz.needsOffset = needsOffset; tz.moveInvalidForward = true; tz.moveAmbiguousForward = false; tz.countries = getCountryNames; tz.zonesForCountry = zonesForCountry; /************************************ Interface with Moment.js ************************************/ var fn = moment.fn; moment.tz = tz; moment.defaultZone = null; moment.updateOffset = function (mom, keepTime) { var zone = moment.defaultZone, offset; if (mom._z === undefined) { if (zone && needsOffset(mom) && !mom._isUTC) { mom._d = moment.utc(mom._a)._d; mom.utc().add(zone.parse(mom), 'minutes'); } mom._z = zone; } if (mom._z) { offset = mom._z.utcOffset(mom); if (Math.abs(offset) < 16) { offset = offset / 60; } if (mom.utcOffset !== undefined) { var z = mom._z; mom.utcOffset(-offset, keepTime); mom._z = z; } else { mom.zone(offset, keepTime); } } }; fn.tz = function (name, keepTime) { if (name) { if (typeof name !== 'string') { throw new Error('Time zone name must be a string, got ' + name + ' [' + typeof name + ']'); } this._z = getZone(name); if (this._z) { moment.updateOffset(this, keepTime); } else { logError("Moment Timezone has no data for " + name + ". See http://momentjs.com/timezone/docs/#/data-loading/."); } return this; } if (this._z) { return this._z.name; } }; function abbrWrap (old) { return function () { if (this._z) { return this._z.abbr(this); } return old.call(this); }; } function resetZoneWrap (old) { return function () { this._z = null; return old.apply(this, arguments); }; } function resetZoneWrap2 (old) { return function () { if (arguments.length > 0) this._z = null; return old.apply(this, arguments); }; } fn.zoneName = abbrWrap(fn.zoneName); fn.zoneAbbr = abbrWrap(fn.zoneAbbr); fn.utc = resetZoneWrap(fn.utc); fn.local = resetZoneWrap(fn.local); fn.utcOffset = resetZoneWrap2(fn.utcOffset); moment.tz.setDefault = function(name) { if (major < 2 || (major === 2 && minor < 9)) { logError('Moment Timezone setDefault() requires Moment.js >= 2.9.0. You are using Moment.js ' + moment.version + '.'); } moment.defaultZone = name ? getZone(name) : null; return moment; }; // Cloning a moment should include the _z property. var momentProperties = moment.momentProperties; if (Object.prototype.toString.call(momentProperties) === '[object Array]') { // moment 2.8.1+ momentProperties.push('_z'); momentProperties.push('_a'); } else if (momentProperties) { // moment 2.7.0 momentProperties._z = null; } loadData({ "version": "2019c", "zones": [ "Africa/Abidjan|GMT|0|0||48e5", "Africa/Nairobi|EAT|-30|0||47e5", "Africa/Algiers|CET|-10|0||26e5", "Africa/Lagos|WAT|-10|0||17e6", "Africa/Maputo|CAT|-20|0||26e5", "Africa/Cairo|EET|-20|0||15e6", "Africa/Casablanca|+00 +01|0 -10|010101010101010101010101010101|1O9e0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 28M0 e00 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0|32e5", "Europe/Paris|CET CEST|-10 -20|01010101010101010101010|1O9d0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|11e6", "Africa/Johannesburg|SAST|-20|0||84e5", "Africa/Khartoum|EAT CAT|-30 -20|01|1Usl0|51e5", "Africa/Sao_Tome|GMT WAT|0 -10|010|1UQN0 2q00|", "Africa/Windhoek|CAT WAT|-20 -10|0101010|1Oc00 11B0 1nX0 11B0 1nX0 11B0|32e4", "America/Adak|HST HDT|a0 90|01010101010101010101010|1O100 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|326", "America/Anchorage|AKST AKDT|90 80|01010101010101010101010|1O0X0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|30e4", "America/Santo_Domingo|AST|40|0||29e5", "America/Fortaleza|-03|30|0||34e5", "America/Asuncion|-03 -04|30 40|01010101010101010101010|1O6r0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0|28e5", "America/Panama|EST|50|0||15e5", "America/Mexico_City|CST CDT|60 50|01010101010101010101010|1Oc80 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|20e6", "America/Managua|CST|60|0||22e5", "America/La_Paz|-04|40|0||19e5", "America/Lima|-05|50|0||11e6", "America/Denver|MST MDT|70 60|01010101010101010101010|1O0V0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|26e5", "America/Campo_Grande|-03 -04|30 40|0101010101|1NTf0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|77e4", "America/Cancun|CST EST|60 50|01|1NKU0|63e4", "America/Caracas|-0430 -04|4u 40|01|1QMT0|29e5", "America/Chicago|CST CDT|60 50|01010101010101010101010|1O0U0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|92e5", "America/Chihuahua|MST MDT|70 60|01010101010101010101010|1Oc90 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|81e4", "America/Phoenix|MST|70|0||42e5", "America/Los_Angeles|PST PDT|80 70|01010101010101010101010|1O0W0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|15e6", "America/New_York|EST EDT|50 40|01010101010101010101010|1O0T0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e6", "America/Fort_Nelson|PST MST|80 70|01|1O0W0|39e2", "America/Halifax|AST ADT|40 30|01010101010101010101010|1O0S0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|39e4", "America/Godthab|-03 -02|30 20|01010101010101010101010|1O9d0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|17e3", "America/Grand_Turk|EST EDT AST|50 40 40|0121010101010101010|1O0T0 1zb0 5Ip0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e2", "America/Havana|CST CDT|50 40|01010101010101010101010|1O0R0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0|21e5", "America/Metlakatla|PST AKST AKDT|80 90 80|01212120121212121212121|1PAa0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 uM0 jB0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|14e2", "America/Miquelon|-03 -02|30 20|01010101010101010101010|1O0R0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|61e2", "America/Montevideo|-02 -03|20 30|01|1O0Q0|17e5", "America/Noronha|-02|20|0||30e2", "America/Port-au-Prince|EST EDT|50 40|010101010101010101010|1O0T0 1zb0 3iN0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e5", "Antarctica/Palmer|-03 -04|30 40|010|1QSr0 Ap0|40", "America/Santiago|-03 -04|30 40|010101010101010101010|1QSr0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0|62e5", "America/Sao_Paulo|-02 -03|20 30|0101010101|1NTe0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|20e6", "Atlantic/Azores|-01 +00|10 0|01010101010101010101010|1O9d0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|25e4", "America/St_Johns|NST NDT|3u 2u|01010101010101010101010|1O0Ru 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|11e4", "Antarctica/Casey|+08 +11|-80 -b0|010|1RWg0 3m10|10", "Asia/Bangkok|+07|-70|0||15e6", "Asia/Vladivostok|+10|-a0|0||60e4", "Pacific/Bougainville|+11|-b0|0||18e4", "Asia/Tashkent|+05|-50|0||23e5", "Pacific/Auckland|NZDT NZST|-d0 -c0|01010101010101010101010|1ObO0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00|14e5", "Asia/Baghdad|+03|-30|0||66e5", "Antarctica/Troll|+00 +02|0 -20|01010101010101010101010|1O9d0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|40", "Asia/Dhaka|+06|-60|0||16e6", "Asia/Amman|EET EEST|-20 -30|01010101010101010101010|1O8m0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0|25e5", "Asia/Kamchatka|+12|-c0|0||18e4", "Asia/Baku|+04 +05|-40 -50|010|1O9c0 1o00|27e5", "Asia/Barnaul|+06 +07|-60 -70|01|1QyI0|", "Asia/Beirut|EET EEST|-20 -30|01010101010101010101010|1O9a0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0|22e5", "Asia/Kuala_Lumpur|+08|-80|0||71e5", "Asia/Kolkata|IST|-5u|0||15e6", "Asia/Chita|+08 +09|-80 -90|01|1QyG0|33e4", "Asia/Ulaanbaatar|+08 +09|-80 -90|01010|1O8G0 1cJ0 1cP0 1cJ0|12e5", "Asia/Shanghai|CST|-80|0||23e6", "Asia/Colombo|+0530|-5u|0||22e5", "Asia/Damascus|EET EEST|-20 -30|01010101010101010101010|1O8m0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0|26e5", "Asia/Yakutsk|+09|-90|0||28e4", "Asia/Dubai|+04|-40|0||39e5", "Asia/Famagusta|EET EEST +03|-20 -30 -30|0101201010101010101010|1O9d0 1o00 11A0 15U0 2Ks0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|", "Asia/Gaza|EET EEST|-20 -30|01010101010101010101010|1O8K0 1nz0 1220 1qL0 WN0 1qL0 WN0 1qL0 11c0 1oo0 11c0 1rc0 Wo0 1rc0 Wo0 1rc0 11c0 1oo0 11c0 1oo0 11c0 1oo0|18e5", "Asia/Hong_Kong|HKT|-80|0||73e5", "Asia/Hovd|+07 +08|-70 -80|01010|1O8H0 1cJ0 1cP0 1cJ0|81e3", "Europe/Istanbul|EET EEST +03|-20 -30 -30|01012|1O9d0 1tA0 U00 15w0|13e6", "Asia/Jakarta|WIB|-70|0||31e6", "Asia/Jayapura|WIT|-90|0||26e4", "Asia/Jerusalem|IST IDT|-20 -30|01010101010101010101010|1O8o0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0|81e4", "Asia/Kabul|+0430|-4u|0||46e5", "Asia/Karachi|PKT|-50|0||24e6", "Asia/Kathmandu|+0545|-5J|0||12e5", "Asia/Magadan|+10 +11|-a0 -b0|01|1QJQ0|95e3", "Asia/Makassar|WITA|-80|0||15e5", "Asia/Manila|PST|-80|0||24e6", "Europe/Athens|EET EEST|-20 -30|01010101010101010101010|1O9d0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|35e5", "Asia/Novosibirsk|+06 +07|-60 -70|01|1Rmk0|15e5", "Asia/Pyongyang|KST KST|-90 -8u|010|1P4D0 6BA0|29e5", "Asia/Qyzylorda|+06 +05|-60 -50|01|1Xei0|73e4", "Asia/Rangoon|+0630|-6u|0||48e5", "Asia/Sakhalin|+10 +11|-a0 -b0|01|1QyE0|58e4", "Asia/Seoul|KST|-90|0||23e6", "Asia/Tehran|+0330 +0430|-3u -4u|01010101010101010101010|1O6ku 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0|14e6", "Asia/Tokyo|JST|-90|0||38e6", "Asia/Tomsk|+06 +07|-60 -70|01|1QXU0|10e5", "Europe/Lisbon|WET WEST|0 -10|01010101010101010101010|1O9d0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|27e5", "Atlantic/Cape_Verde|-01|10|0||50e4", "Australia/Sydney|AEDT AEST|-b0 -a0|01010101010101010101010|1ObQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0|40e5", "Australia/Adelaide|ACDT ACST|-au -9u|01010101010101010101010|1ObQu 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0|11e5", "Australia/Brisbane|AEST|-a0|0||20e5", "Australia/Darwin|ACST|-9u|0||12e4", "Australia/Eucla|+0845|-8J|0||368", "Australia/Lord_Howe|+11 +1030|-b0 -au|01010101010101010101010|1ObP0 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu|347", "Australia/Perth|AWST|-80|0||18e5", "Pacific/Easter|-05 -06|50 60|010101010101010101010|1QSr0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0|30e2", "Europe/Dublin|GMT IST|0 -10|01010101010101010101010|1O9d0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5", "Etc/GMT-1|+01|-10|0||", "Pacific/Fakaofo|+13|-d0|0||483", "Pacific/Kiritimati|+14|-e0|0||51e2", "Etc/GMT-2|+02|-20|0||", "Pacific/Tahiti|-10|a0|0||18e4", "Pacific/Niue|-11|b0|0||12e2", "Etc/GMT+12|-12|c0|0||", "Pacific/Galapagos|-06|60|0||25e3", "Etc/GMT+7|-07|70|0||", "Pacific/Pitcairn|-08|80|0||56", "Pacific/Gambier|-09|90|0||125", "Etc/UTC|UTC|0|0||", "Europe/Ulyanovsk|+03 +04|-30 -40|01|1QyL0|13e5", "Europe/London|GMT BST|0 -10|01010101010101010101010|1O9d0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|10e6", "Europe/Chisinau|EET EEST|-20 -30|01010101010101010101010|1O9c0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|67e4", "Europe/Moscow|MSK|-30|0||16e6", "Europe/Saratov|+03 +04|-30 -40|01|1Sfz0|", "Europe/Volgograd|+03 +04|-30 -40|01|1WQL0|10e5", "Pacific/Honolulu|HST|a0|0||37e4", "MET|MET MEST|-10 -20|01010101010101010101010|1O9d0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|", "Pacific/Chatham|+1345 +1245|-dJ -cJ|01010101010101010101010|1ObO0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00|600", "Pacific/Apia|+14 +13|-e0 -d0|01010101010101010101010|1ObO0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00|37e3", "Pacific/Fiji|+13 +12|-d0 -c0|01010101010101010101010|1NF20 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 20o0 pc0 20o0 s00 20o0 pc0 20o0 pc0 20o0 pc0 20o0 pc0 20o0|88e4", "Pacific/Guam|ChST|-a0|0||17e4", "Pacific/Marquesas|-0930|9u|0||86e2", "Pacific/Pago_Pago|SST|b0|0||37e2", "Pacific/Norfolk|+1130 +11 +12|-bu -b0 -c0|012121212121212|1PoCu 9Jcu 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0|25e4", "Pacific/Tongatapu|+13 +14|-d0 -e0|010|1S4d0 s00|75e3" ], "links": [ "Africa/Abidjan|Africa/Accra", "Africa/Abidjan|Africa/Bamako", "Africa/Abidjan|Africa/Banjul", "Africa/Abidjan|Africa/Bissau", "Africa/Abidjan|Africa/Conakry", "Africa/Abidjan|Africa/Dakar", "Africa/Abidjan|Africa/Freetown", "Africa/Abidjan|Africa/Lome", "Africa/Abidjan|Africa/Monrovia", "Africa/Abidjan|Africa/Nouakchott", "Africa/Abidjan|Africa/Ouagadougou", "Africa/Abidjan|Africa/Timbuktu", "Africa/Abidjan|America/Danmarkshavn", "Africa/Abidjan|Atlantic/Reykjavik", "Africa/Abidjan|Atlantic/St_Helena", "Africa/Abidjan|Etc/GMT", "Africa/Abidjan|Etc/GMT+0", "Africa/Abidjan|Etc/GMT-0", "Africa/Abidjan|Etc/GMT0", "Africa/Abidjan|Etc/Greenwich", "Africa/Abidjan|GMT", "Africa/Abidjan|GMT+0", "Africa/Abidjan|GMT-0", "Africa/Abidjan|GMT0", "Africa/Abidjan|Greenwich", "Africa/Abidjan|Iceland", "Africa/Algiers|Africa/Tunis", "Africa/Cairo|Africa/Tripoli", "Africa/Cairo|Egypt", "Africa/Cairo|Europe/Kaliningrad", "Africa/Cairo|Libya", "Africa/Casablanca|Africa/El_Aaiun", "Africa/Johannesburg|Africa/Maseru", "Africa/Johannesburg|Africa/Mbabane", "Africa/Lagos|Africa/Bangui", "Africa/Lagos|Africa/Brazzaville", "Africa/Lagos|Africa/Douala", "Africa/Lagos|Africa/Kinshasa", "Africa/Lagos|Africa/Libreville", "Africa/Lagos|Africa/Luanda", "Africa/Lagos|Africa/Malabo", "Africa/Lagos|Africa/Ndjamena", "Africa/Lagos|Africa/Niamey", "Africa/Lagos|Africa/Porto-Novo", "Africa/Maputo|Africa/Blantyre", "Africa/Maputo|Africa/Bujumbura", "Africa/Maputo|Africa/Gaborone", "Africa/Maputo|Africa/Harare", "Africa/Maputo|Africa/Kigali", "Africa/Maputo|Africa/Lubumbashi", "Africa/Maputo|Africa/Lusaka", "Africa/Nairobi|Africa/Addis_Ababa", "Africa/Nairobi|Africa/Asmara", "Africa/Nairobi|Africa/Asmera", "Africa/Nairobi|Africa/Dar_es_Salaam", "Africa/Nairobi|Africa/Djibouti", "Africa/Nairobi|Africa/Juba", "Africa/Nairobi|Africa/Kampala", "Africa/Nairobi|Africa/Mogadishu", "Africa/Nairobi|Indian/Antananarivo", "Africa/Nairobi|Indian/Comoro", "Africa/Nairobi|Indian/Mayotte", "America/Adak|America/Atka", "America/Adak|US/Aleutian", "America/Anchorage|America/Juneau", "America/Anchorage|America/Nome", "America/Anchorage|America/Sitka", "America/Anchorage|America/Yakutat", "America/Anchorage|US/Alaska", "America/Campo_Grande|America/Cuiaba", "America/Chicago|America/Indiana/Knox", "America/Chicago|America/Indiana/Tell_City", "America/Chicago|America/Knox_IN", "America/Chicago|America/Matamoros", "America/Chicago|America/Menominee", "America/Chicago|America/North_Dakota/Beulah", "America/Chicago|America/North_Dakota/Center", "America/Chicago|America/North_Dakota/New_Salem", "America/Chicago|America/Rainy_River", "America/Chicago|America/Rankin_Inlet", "America/Chicago|America/Resolute", "America/Chicago|America/Winnipeg", "America/Chicago|CST6CDT", "America/Chicago|Canada/Central", "America/Chicago|US/Central", "America/Chicago|US/Indiana-Starke", "America/Chihuahua|America/Mazatlan", "America/Chihuahua|Mexico/BajaSur", "America/Denver|America/Boise", "America/Denver|America/Cambridge_Bay", "America/Denver|America/Edmonton", "America/Denver|America/Inuvik", "America/Denver|America/Ojinaga", "America/Denver|America/Shiprock", "America/Denver|America/Yellowknife", "America/Denver|Canada/Mountain", "America/Denver|MST7MDT", "America/Denver|Navajo", "America/Denver|US/Mountain", "America/Fortaleza|America/Araguaina", "America/Fortaleza|America/Argentina/Buenos_Aires", "America/Fortaleza|America/Argentina/Catamarca", "America/Fortaleza|America/Argentina/ComodRivadavia", "America/Fortaleza|America/Argentina/Cordoba", "America/Fortaleza|America/Argentina/Jujuy", "America/Fortaleza|America/Argentina/La_Rioja", "America/Fortaleza|America/Argentina/Mendoza", "America/Fortaleza|America/Argentina/Rio_Gallegos", "America/Fortaleza|America/Argentina/Salta", "America/Fortaleza|America/Argentina/San_Juan", "America/Fortaleza|America/Argentina/San_Luis", "America/Fortaleza|America/Argentina/Tucuman", "America/Fortaleza|America/Argentina/Ushuaia", "America/Fortaleza|America/Bahia", "America/Fortaleza|America/Belem", "America/Fortaleza|America/Buenos_Aires", "America/Fortaleza|America/Catamarca", "America/Fortaleza|America/Cayenne", "America/Fortaleza|America/Cordoba", "America/Fortaleza|America/Jujuy", "America/Fortaleza|America/Maceio", "America/Fortaleza|America/Mendoza", "America/Fortaleza|America/Paramaribo", "America/Fortaleza|America/Recife", "America/Fortaleza|America/Rosario", "America/Fortaleza|America/Santarem", "America/Fortaleza|Antarctica/Rothera", "America/Fortaleza|Atlantic/Stanley", "America/Fortaleza|Etc/GMT+3", "America/Halifax|America/Glace_Bay", "America/Halifax|America/Goose_Bay", "America/Halifax|America/Moncton", "America/Halifax|America/Thule", "America/Halifax|Atlantic/Bermuda", "America/Halifax|Canada/Atlantic", "America/Havana|Cuba", "America/La_Paz|America/Boa_Vista", "America/La_Paz|America/Guyana", "America/La_Paz|America/Manaus", "America/La_Paz|America/Porto_Velho", "America/La_Paz|Brazil/West", "America/La_Paz|Etc/GMT+4", "America/Lima|America/Bogota", "America/Lima|America/Eirunepe", "America/Lima|America/Guayaquil", "America/Lima|America/Porto_Acre", "America/Lima|America/Rio_Branco", "America/Lima|Brazil/Acre", "America/Lima|Etc/GMT+5", "America/Los_Angeles|America/Dawson", "America/Los_Angeles|America/Ensenada", "America/Los_Angeles|America/Santa_Isabel", "America/Los_Angeles|America/Tijuana", "America/Los_Angeles|America/Vancouver", "America/Los_Angeles|America/Whitehorse", "America/Los_Angeles|Canada/Pacific", "America/Los_Angeles|Canada/Yukon", "America/Los_Angeles|Mexico/BajaNorte", "America/Los_Angeles|PST8PDT", "America/Los_Angeles|US/Pacific", "America/Los_Angeles|US/Pacific-New", "America/Managua|America/Belize", "America/Managua|America/Costa_Rica", "America/Managua|America/El_Salvador", "America/Managua|America/Guatemala", "America/Managua|America/Regina", "America/Managua|America/Swift_Current", "America/Managua|America/Tegucigalpa", "America/Managua|Canada/Saskatchewan", "America/Mexico_City|America/Bahia_Banderas", "America/Mexico_City|America/Merida", "America/Mexico_City|America/Monterrey", "America/Mexico_City|Mexico/General", "America/New_York|America/Detroit", "America/New_York|America/Fort_Wayne", "America/New_York|America/Indiana/Indianapolis", "America/New_York|America/Indiana/Marengo", "America/New_York|America/Indiana/Petersburg", "America/New_York|America/Indiana/Vevay", "America/New_York|America/Indiana/Vincennes", "America/New_York|America/Indiana/Winamac", "America/New_York|America/Indianapolis", "America/New_York|America/Iqaluit", "America/New_York|America/Kentucky/Louisville", "America/New_York|America/Kentucky/Monticello", "America/New_York|America/Louisville", "America/New_York|America/Montreal", "America/New_York|America/Nassau", "America/New_York|America/Nipigon", "America/New_York|America/Pangnirtung", "America/New_York|America/Thunder_Bay", "America/New_York|America/Toronto", "America/New_York|Canada/Eastern", "America/New_York|EST5EDT", "America/New_York|US/East-Indiana", "America/New_York|US/Eastern", "America/New_York|US/Michigan", "America/Noronha|Atlantic/South_Georgia", "America/Noronha|Brazil/DeNoronha", "America/Noronha|Etc/GMT+2", "America/Panama|America/Atikokan", "America/Panama|America/Cayman", "America/Panama|America/Coral_Harbour", "America/Panama|America/Jamaica", "America/Panama|EST", "America/Panama|Jamaica", "America/Phoenix|America/Creston", "America/Phoenix|America/Dawson_Creek", "America/Phoenix|America/Hermosillo", "America/Phoenix|MST", "America/Phoenix|US/Arizona", "America/Santiago|Chile/Continental", "America/Santo_Domingo|America/Anguilla", "America/Santo_Domingo|America/Antigua", "America/Santo_Domingo|America/Aruba", "America/Santo_Domingo|America/Barbados", "America/Santo_Domingo|America/Blanc-Sablon", "America/Santo_Domingo|America/Curacao", "America/Santo_Domingo|America/Dominica", "America/Santo_Domingo|America/Grenada", "America/Santo_Domingo|America/Guadeloupe", "America/Santo_Domingo|America/Kralendijk", "America/Santo_Domingo|America/Lower_Princes", "America/Santo_Domingo|America/Marigot", "America/Santo_Domingo|America/Martinique", "America/Santo_Domingo|America/Montserrat", "America/Santo_Domingo|America/Port_of_Spain", "America/Santo_Domingo|America/Puerto_Rico", "America/Santo_Domingo|America/St_Barthelemy", "America/Santo_Domingo|America/St_Kitts", "America/Santo_Domingo|America/St_Lucia", "America/Santo_Domingo|America/St_Thomas", "America/Santo_Domingo|America/St_Vincent", "America/Santo_Domingo|America/Tortola", "America/Santo_Domingo|America/Virgin", "America/Sao_Paulo|Brazil/East", "America/St_Johns|Canada/Newfoundland", "Antarctica/Palmer|America/Punta_Arenas", "Asia/Baghdad|Antarctica/Syowa", "Asia/Baghdad|Asia/Aden", "Asia/Baghdad|Asia/Bahrain", "Asia/Baghdad|Asia/Kuwait", "Asia/Baghdad|Asia/Qatar", "Asia/Baghdad|Asia/Riyadh", "Asia/Baghdad|Etc/GMT-3", "Asia/Baghdad|Europe/Kirov", "Asia/Baghdad|Europe/Minsk", "Asia/Bangkok|Antarctica/Davis", "Asia/Bangkok|Asia/Ho_Chi_Minh", "Asia/Bangkok|Asia/Krasnoyarsk", "Asia/Bangkok|Asia/Novokuznetsk", "Asia/Bangkok|Asia/Phnom_Penh", "Asia/Bangkok|Asia/Saigon", "Asia/Bangkok|Asia/Vientiane", "Asia/Bangkok|Etc/GMT-7", "Asia/Bangkok|Indian/Christmas", "Asia/Dhaka|Antarctica/Vostok", "Asia/Dhaka|Asia/Almaty", "Asia/Dhaka|Asia/Bishkek", "Asia/Dhaka|Asia/Dacca", "Asia/Dhaka|Asia/Kashgar", "Asia/Dhaka|Asia/Omsk", "Asia/Dhaka|Asia/Qostanay", "Asia/Dhaka|Asia/Thimbu", "Asia/Dhaka|Asia/Thimphu", "Asia/Dhaka|Asia/Urumqi", "Asia/Dhaka|Etc/GMT-6", "Asia/Dhaka|Indian/Chagos", "Asia/Dubai|Asia/Muscat", "Asia/Dubai|Asia/Tbilisi", "Asia/Dubai|Asia/Yerevan", "Asia/Dubai|Etc/GMT-4", "Asia/Dubai|Europe/Samara", "Asia/Dubai|Indian/Mahe", "Asia/Dubai|Indian/Mauritius", "Asia/Dubai|Indian/Reunion", "Asia/Gaza|Asia/Hebron", "Asia/Hong_Kong|Hongkong", "Asia/Jakarta|Asia/Pontianak", "Asia/Jerusalem|Asia/Tel_Aviv", "Asia/Jerusalem|Israel", "Asia/Kamchatka|Asia/Anadyr", "Asia/Kamchatka|Etc/GMT-12", "Asia/Kamchatka|Kwajalein", "Asia/Kamchatka|Pacific/Funafuti", "Asia/Kamchatka|Pacific/Kwajalein", "Asia/Kamchatka|Pacific/Majuro", "Asia/Kamchatka|Pacific/Nauru", "Asia/Kamchatka|Pacific/Tarawa", "Asia/Kamchatka|Pacific/Wake", "Asia/Kamchatka|Pacific/Wallis", "Asia/Kathmandu|Asia/Katmandu", "Asia/Kolkata|Asia/Calcutta", "Asia/Kuala_Lumpur|Asia/Brunei", "Asia/Kuala_Lumpur|Asia/Irkutsk", "Asia/Kuala_Lumpur|Asia/Kuching", "Asia/Kuala_Lumpur|Asia/Singapore", "Asia/Kuala_Lumpur|Etc/GMT-8", "Asia/Kuala_Lumpur|Singapore", "Asia/Makassar|Asia/Ujung_Pandang", "Asia/Rangoon|Asia/Yangon", "Asia/Rangoon|Indian/Cocos", "Asia/Seoul|ROK", "Asia/Shanghai|Asia/Chongqing", "Asia/Shanghai|Asia/Chungking", "Asia/Shanghai|Asia/Harbin", "Asia/Shanghai|Asia/Macao", "Asia/Shanghai|Asia/Macau", "Asia/Shanghai|Asia/Taipei", "Asia/Shanghai|PRC", "Asia/Shanghai|ROC", "Asia/Tashkent|Antarctica/Mawson", "Asia/Tashkent|Asia/Aqtau", "Asia/Tashkent|Asia/Aqtobe", "Asia/Tashkent|Asia/Ashgabat", "Asia/Tashkent|Asia/Ashkhabad", "Asia/Tashkent|Asia/Atyrau", "Asia/Tashkent|Asia/Dushanbe", "Asia/Tashkent|Asia/Oral", "Asia/Tashkent|Asia/Samarkand", "Asia/Tashkent|Asia/Yekaterinburg", "Asia/Tashkent|Etc/GMT-5", "Asia/Tashkent|Indian/Kerguelen", "Asia/Tashkent|Indian/Maldives", "Asia/Tehran|Iran", "Asia/Tokyo|Japan", "Asia/Ulaanbaatar|Asia/Choibalsan", "Asia/Ulaanbaatar|Asia/Ulan_Bator", "Asia/Vladivostok|Antarctica/DumontDUrville", "Asia/Vladivostok|Asia/Ust-Nera", "Asia/Vladivostok|Etc/GMT-10", "Asia/Vladivostok|Pacific/Chuuk", "Asia/Vladivostok|Pacific/Port_Moresby", "Asia/Vladivostok|Pacific/Truk", "Asia/Vladivostok|Pacific/Yap", "Asia/Yakutsk|Asia/Dili", "Asia/Yakutsk|Asia/Khandyga", "Asia/Yakutsk|Etc/GMT-9", "Asia/Yakutsk|Pacific/Palau", "Atlantic/Azores|America/Scoresbysund", "Atlantic/Cape_Verde|Etc/GMT+1", "Australia/Adelaide|Australia/Broken_Hill", "Australia/Adelaide|Australia/South", "Australia/Adelaide|Australia/Yancowinna", "Australia/Brisbane|Australia/Lindeman", "Australia/Brisbane|Australia/Queensland", "Australia/Darwin|Australia/North", "Australia/Lord_Howe|Australia/LHI", "Australia/Perth|Australia/West", "Australia/Sydney|Australia/ACT", "Australia/Sydney|Australia/Canberra", "Australia/Sydney|Australia/Currie", "Australia/Sydney|Australia/Hobart", "Australia/Sydney|Australia/Melbourne", "Australia/Sydney|Australia/NSW", "Australia/Sydney|Australia/Tasmania", "Australia/Sydney|Australia/Victoria", "Etc/UTC|Etc/UCT", "Etc/UTC|Etc/Universal", "Etc/UTC|Etc/Zulu", "Etc/UTC|UCT", "Etc/UTC|UTC", "Etc/UTC|Universal", "Etc/UTC|Zulu", "Europe/Athens|Asia/Nicosia", "Europe/Athens|EET", "Europe/Athens|Europe/Bucharest", "Europe/Athens|Europe/Helsinki", "Europe/Athens|Europe/Kiev", "Europe/Athens|Europe/Mariehamn", "Europe/Athens|Europe/Nicosia", "Europe/Athens|Europe/Riga", "Europe/Athens|Europe/Sofia", "Europe/Athens|Europe/Tallinn", "Europe/Athens|Europe/Uzhgorod", "Europe/Athens|Europe/Vilnius", "Europe/Athens|Europe/Zaporozhye", "Europe/Chisinau|Europe/Tiraspol", "Europe/Dublin|Eire", "Europe/Istanbul|Asia/Istanbul", "Europe/Istanbul|Turkey", "Europe/Lisbon|Atlantic/Canary", "Europe/Lisbon|Atlantic/Faeroe", "Europe/Lisbon|Atlantic/Faroe", "Europe/Lisbon|Atlantic/Madeira", "Europe/Lisbon|Portugal", "Europe/Lisbon|WET", "Europe/London|Europe/Belfast", "Europe/London|Europe/Guernsey", "Europe/London|Europe/Isle_of_Man", "Europe/London|Europe/Jersey", "Europe/London|GB", "Europe/London|GB-Eire", "Europe/Moscow|Europe/Simferopol", "Europe/Moscow|W-SU", "Europe/Paris|Africa/Ceuta", "Europe/Paris|Arctic/Longyearbyen", "Europe/Paris|Atlantic/Jan_Mayen", "Europe/Paris|CET", "Europe/Paris|Europe/Amsterdam", "Europe/Paris|Europe/Andorra", "Europe/Paris|Europe/Belgrade", "Europe/Paris|Europe/Berlin", "Europe/Paris|Europe/Bratislava", "Europe/Paris|Europe/Brussels", "Europe/Paris|Europe/Budapest", "Europe/Paris|Europe/Busingen", "Europe/Paris|Europe/Copenhagen", "Europe/Paris|Europe/Gibraltar", "Europe/Paris|Europe/Ljubljana", "Europe/Paris|Europe/Luxembourg", "Europe/Paris|Europe/Madrid", "Europe/Paris|Europe/Malta", "Europe/Paris|Europe/Monaco", "Europe/Paris|Europe/Oslo", "Europe/Paris|Europe/Podgorica", "Europe/Paris|Europe/Prague", "Europe/Paris|Europe/Rome", "Europe/Paris|Europe/San_Marino", "Europe/Paris|Europe/Sarajevo", "Europe/Paris|Europe/Skopje", "Europe/Paris|Europe/Stockholm", "Europe/Paris|Europe/Tirane", "Europe/Paris|Europe/Vaduz", "Europe/Paris|Europe/Vatican", "Europe/Paris|Europe/Vienna", "Europe/Paris|Europe/Warsaw", "Europe/Paris|Europe/Zagreb", "Europe/Paris|Europe/Zurich", "Europe/Paris|Poland", "Europe/Ulyanovsk|Europe/Astrakhan", "Pacific/Auckland|Antarctica/McMurdo", "Pacific/Auckland|Antarctica/South_Pole", "Pacific/Auckland|NZ", "Pacific/Bougainville|Antarctica/Macquarie", "Pacific/Bougainville|Asia/Srednekolymsk", "Pacific/Bougainville|Etc/GMT-11", "Pacific/Bougainville|Pacific/Efate", "Pacific/Bougainville|Pacific/Guadalcanal", "Pacific/Bougainville|Pacific/Kosrae", "Pacific/Bougainville|Pacific/Noumea", "Pacific/Bougainville|Pacific/Pohnpei", "Pacific/Bougainville|Pacific/Ponape", "Pacific/Chatham|NZ-CHAT", "Pacific/Easter|Chile/EasterIsland", "Pacific/Fakaofo|Etc/GMT-13", "Pacific/Fakaofo|Pacific/Enderbury", "Pacific/Galapagos|Etc/GMT+6", "Pacific/Gambier|Etc/GMT+9", "Pacific/Guam|Pacific/Saipan", "Pacific/Honolulu|HST", "Pacific/Honolulu|Pacific/Johnston", "Pacific/Honolulu|US/Hawaii", "Pacific/Kiritimati|Etc/GMT-14", "Pacific/Niue|Etc/GMT+11", "Pacific/Pago_Pago|Pacific/Midway", "Pacific/Pago_Pago|Pacific/Samoa", "Pacific/Pago_Pago|US/Samoa", "Pacific/Pitcairn|Etc/GMT+8", "Pacific/Tahiti|Etc/GMT+10", "Pacific/Tahiti|Pacific/Rarotonga" ], "countries": [ "AD|Europe/Andorra", "AE|Asia/Dubai", "AF|Asia/Kabul", "AG|America/Port_of_Spain America/Antigua", "AI|America/Port_of_Spain America/Anguilla", "AL|Europe/Tirane", "AM|Asia/Yerevan", "AO|Africa/Lagos Africa/Luanda", "AQ|Antarctica/Casey Antarctica/Davis Antarctica/DumontDUrville Antarctica/Mawson Antarctica/Palmer Antarctica/Rothera Antarctica/Syowa Antarctica/Troll Antarctica/Vostok Pacific/Auckland Antarctica/McMurdo", "AR|America/Argentina/Buenos_Aires America/Argentina/Cordoba America/Argentina/Salta America/Argentina/Jujuy America/Argentina/Tucuman America/Argentina/Catamarca America/Argentina/La_Rioja America/Argentina/San_Juan America/Argentina/Mendoza America/Argentina/San_Luis America/Argentina/Rio_Gallegos America/Argentina/Ushuaia", "AS|Pacific/Pago_Pago", "AT|Europe/Vienna", "AU|Australia/Lord_Howe Antarctica/Macquarie Australia/Hobart Australia/Currie Australia/Melbourne Australia/Sydney Australia/Broken_Hill Australia/Brisbane Australia/Lindeman Australia/Adelaide Australia/Darwin Australia/Perth Australia/Eucla", "AW|America/Curacao America/Aruba", "AX|Europe/Helsinki Europe/Mariehamn", "AZ|Asia/Baku", "BA|Europe/Belgrade Europe/Sarajevo", "BB|America/Barbados", "BD|Asia/Dhaka", "BE|Europe/Brussels", "BF|Africa/Abidjan Africa/Ouagadougou", "BG|Europe/Sofia", "BH|Asia/Qatar Asia/Bahrain", "BI|Africa/Maputo Africa/Bujumbura", "BJ|Africa/Lagos Africa/Porto-Novo", "BL|America/Port_of_Spain America/St_Barthelemy", "BM|Atlantic/Bermuda", "BN|Asia/Brunei", "BO|America/La_Paz", "BQ|America/Curacao America/Kralendijk", "BR|America/Noronha America/Belem America/Fortaleza America/Recife America/Araguaina America/Maceio America/Bahia America/Sao_Paulo America/Campo_Grande America/Cuiaba America/Santarem America/Porto_Velho America/Boa_Vista America/Manaus America/Eirunepe America/Rio_Branco", "BS|America/Nassau", "BT|Asia/Thimphu", "BW|Africa/Maputo Africa/Gaborone", "BY|Europe/Minsk", "BZ|America/Belize", "CA|America/St_Johns America/Halifax America/Glace_Bay America/Moncton America/Goose_Bay America/Blanc-Sablon America/Toronto America/Nipigon America/Thunder_Bay America/Iqaluit America/Pangnirtung America/Atikokan America/Winnipeg America/Rainy_River America/Resolute America/Rankin_Inlet America/Regina America/Swift_Current America/Edmonton America/Cambridge_Bay America/Yellowknife America/Inuvik America/Creston America/Dawson_Creek America/Fort_Nelson America/Vancouver America/Whitehorse America/Dawson", "CC|Indian/Cocos", "CD|Africa/Maputo Africa/Lagos Africa/Kinshasa Africa/Lubumbashi", "CF|Africa/Lagos Africa/Bangui", "CG|Africa/Lagos Africa/Brazzaville", "CH|Europe/Zurich", "CI|Africa/Abidjan", "CK|Pacific/Rarotonga", "CL|America/Santiago America/Punta_Arenas Pacific/Easter", "CM|Africa/Lagos Africa/Douala", "CN|Asia/Shanghai Asia/Urumqi", "CO|America/Bogota", "CR|America/Costa_Rica", "CU|America/Havana", "CV|Atlantic/Cape_Verde", "CW|America/Curacao", "CX|Indian/Christmas", "CY|Asia/Nicosia Asia/Famagusta", "CZ|Europe/Prague", "DE|Europe/Zurich Europe/Berlin Europe/Busingen", "DJ|Africa/Nairobi Africa/Djibouti", "DK|Europe/Copenhagen", "DM|America/Port_of_Spain America/Dominica", "DO|America/Santo_Domingo", "DZ|Africa/Algiers", "EC|America/Guayaquil Pacific/Galapagos", "EE|Europe/Tallinn", "EG|Africa/Cairo", "EH|Africa/El_Aaiun", "ER|Africa/Nairobi Africa/Asmara", "ES|Europe/Madrid Africa/Ceuta Atlantic/Canary", "ET|Africa/Nairobi Africa/Addis_Ababa", "FI|Europe/Helsinki", "FJ|Pacific/Fiji", "FK|Atlantic/Stanley", "FM|Pacific/Chuuk Pacific/Pohnpei Pacific/Kosrae", "FO|Atlantic/Faroe", "FR|Europe/Paris", "GA|Africa/Lagos Africa/Libreville", "GB|Europe/London", "GD|America/Port_of_Spain America/Grenada", "GE|Asia/Tbilisi", "GF|America/Cayenne", "GG|Europe/London Europe/Guernsey", "GH|Africa/Accra", "GI|Europe/Gibraltar", "GL|America/Godthab America/Danmarkshavn America/Scoresbysund America/Thule", "GM|Africa/Abidjan Africa/Banjul", "GN|Africa/Abidjan Africa/Conakry", "GP|America/Port_of_Spain America/Guadeloupe", "GQ|Africa/Lagos Africa/Malabo", "GR|Europe/Athens", "GS|Atlantic/South_Georgia", "GT|America/Guatemala", "GU|Pacific/Guam", "GW|Africa/Bissau", "GY|America/Guyana", "HK|Asia/Hong_Kong", "HN|America/Tegucigalpa", "HR|Europe/Belgrade Europe/Zagreb", "HT|America/Port-au-Prince", "HU|Europe/Budapest", "ID|Asia/Jakarta Asia/Pontianak Asia/Makassar Asia/Jayapura", "IE|Europe/Dublin", "IL|Asia/Jerusalem", "IM|Europe/London Europe/Isle_of_Man", "IN|Asia/Kolkata", "IO|Indian/Chagos", "IQ|Asia/Baghdad", "IR|Asia/Tehran", "IS|Atlantic/Reykjavik", "IT|Europe/Rome", "JE|Europe/London Europe/Jersey", "JM|America/Jamaica", "JO|Asia/Amman", "JP|Asia/Tokyo", "KE|Africa/Nairobi", "KG|Asia/Bishkek", "KH|Asia/Bangkok Asia/Phnom_Penh", "KI|Pacific/Tarawa Pacific/Enderbury Pacific/Kiritimati", "KM|Africa/Nairobi Indian/Comoro", "KN|America/Port_of_Spain America/St_Kitts", "KP|Asia/Pyongyang", "KR|Asia/Seoul", "KW|Asia/Riyadh Asia/Kuwait", "KY|America/Panama America/Cayman", "KZ|Asia/Almaty Asia/Qyzylorda Asia/Qostanay Asia/Aqtobe Asia/Aqtau Asia/Atyrau Asia/Oral", "LA|Asia/Bangkok Asia/Vientiane", "LB|Asia/Beirut", "LC|America/Port_of_Spain America/St_Lucia", "LI|Europe/Zurich Europe/Vaduz", "LK|Asia/Colombo", "LR|Africa/Monrovia", "LS|Africa/Johannesburg Africa/Maseru", "LT|Europe/Vilnius", "LU|Europe/Luxembourg", "LV|Europe/Riga", "LY|Africa/Tripoli", "MA|Africa/Casablanca", "MC|Europe/Monaco", "MD|Europe/Chisinau", "ME|Europe/Belgrade Europe/Podgorica", "MF|America/Port_of_Spain America/Marigot", "MG|Africa/Nairobi Indian/Antananarivo", "MH|Pacific/Majuro Pacific/Kwajalein", "MK|Europe/Belgrade Europe/Skopje", "ML|Africa/Abidjan Africa/Bamako", "MM|Asia/Yangon", "MN|Asia/Ulaanbaatar Asia/Hovd Asia/Choibalsan", "MO|Asia/Macau", "MP|Pacific/Guam Pacific/Saipan", "MQ|America/Martinique", "MR|Africa/Abidjan Africa/Nouakchott", "MS|America/Port_of_Spain America/Montserrat", "MT|Europe/Malta", "MU|Indian/Mauritius", "MV|Indian/Maldives", "MW|Africa/Maputo Africa/Blantyre", "MX|America/Mexico_City America/Cancun America/Merida America/Monterrey America/Matamoros America/Mazatlan America/Chihuahua America/Ojinaga America/Hermosillo America/Tijuana America/Bahia_Banderas", "MY|Asia/Kuala_Lumpur Asia/Kuching", "MZ|Africa/Maputo", "NA|Africa/Windhoek", "NC|Pacific/Noumea", "NE|Africa/Lagos Africa/Niamey", "NF|Pacific/Norfolk", "NG|Africa/Lagos", "NI|America/Managua", "NL|Europe/Amsterdam", "NO|Europe/Oslo", "NP|Asia/Kathmandu", "NR|Pacific/Nauru", "NU|Pacific/Niue", "NZ|Pacific/Auckland Pacific/Chatham", "OM|Asia/Dubai Asia/Muscat", "PA|America/Panama", "PE|America/Lima", "PF|Pacific/Tahiti Pacific/Marquesas Pacific/Gambier", "PG|Pacific/Port_Moresby Pacific/Bougainville", "PH|Asia/Manila", "PK|Asia/Karachi", "PL|Europe/Warsaw", "PM|America/Miquelon", "PN|Pacific/Pitcairn", "PR|America/Puerto_Rico", "PS|Asia/Gaza Asia/Hebron", "PT|Europe/Lisbon Atlantic/Madeira Atlantic/Azores", "PW|Pacific/Palau", "PY|America/Asuncion", "QA|Asia/Qatar", "RE|Indian/Reunion", "RO|Europe/Bucharest", "RS|Europe/Belgrade", "RU|Europe/Kaliningrad Europe/Moscow Europe/Simferopol Europe/Kirov Europe/Astrakhan Europe/Volgograd Europe/Saratov Europe/Ulyanovsk Europe/Samara Asia/Yekaterinburg Asia/Omsk Asia/Novosibirsk Asia/Barnaul Asia/Tomsk Asia/Novokuznetsk Asia/Krasnoyarsk Asia/Irkutsk Asia/Chita Asia/Yakutsk Asia/Khandyga Asia/Vladivostok Asia/Ust-Nera Asia/Magadan Asia/Sakhalin Asia/Srednekolymsk Asia/Kamchatka Asia/Anadyr", "RW|Africa/Maputo Africa/Kigali", "SA|Asia/Riyadh", "SB|Pacific/Guadalcanal", "SC|Indian/Mahe", "SD|Africa/Khartoum", "SE|Europe/Stockholm", "SG|Asia/Singapore", "SH|Africa/Abidjan Atlantic/St_Helena", "SI|Europe/Belgrade Europe/Ljubljana", "SJ|Europe/Oslo Arctic/Longyearbyen", "SK|Europe/Prague Europe/Bratislava", "SL|Africa/Abidjan Africa/Freetown", "SM|Europe/Rome Europe/San_Marino", "SN|Africa/Abidjan Africa/Dakar", "SO|Africa/Nairobi Africa/Mogadishu", "SR|America/Paramaribo", "SS|Africa/Juba", "ST|Africa/Sao_Tome", "SV|America/El_Salvador", "SX|America/Curacao America/Lower_Princes", "SY|Asia/Damascus", "SZ|Africa/Johannesburg Africa/Mbabane", "TC|America/Grand_Turk", "TD|Africa/Ndjamena", "TF|Indian/Reunion Indian/Kerguelen", "TG|Africa/Abidjan Africa/Lome", "TH|Asia/Bangkok", "TJ|Asia/Dushanbe", "TK|Pacific/Fakaofo", "TL|Asia/Dili", "TM|Asia/Ashgabat", "TN|Africa/Tunis", "TO|Pacific/Tongatapu", "TR|Europe/Istanbul", "TT|America/Port_of_Spain", "TV|Pacific/Funafuti", "TW|Asia/Taipei", "TZ|Africa/Nairobi Africa/Dar_es_Salaam", "UA|Europe/Simferopol Europe/Kiev Europe/Uzhgorod Europe/Zaporozhye", "UG|Africa/Nairobi Africa/Kampala", "UM|Pacific/Pago_Pago Pacific/Wake Pacific/Honolulu Pacific/Midway", "US|America/New_York America/Detroit America/Kentucky/Louisville America/Kentucky/Monticello America/Indiana/Indianapolis America/Indiana/Vincennes America/Indiana/Winamac America/Indiana/Marengo America/Indiana/Petersburg America/Indiana/Vevay America/Chicago America/Indiana/Tell_City America/Indiana/Knox America/Menominee America/North_Dakota/Center America/North_Dakota/New_Salem America/North_Dakota/Beulah America/Denver America/Boise America/Phoenix America/Los_Angeles America/Anchorage America/Juneau America/Sitka America/Metlakatla America/Yakutat America/Nome America/Adak Pacific/Honolulu", "UY|America/Montevideo", "UZ|Asia/Samarkand Asia/Tashkent", "VA|Europe/Rome Europe/Vatican", "VC|America/Port_of_Spain America/St_Vincent", "VE|America/Caracas", "VG|America/Port_of_Spain America/Tortola", "VI|America/Port_of_Spain America/St_Thomas", "VN|Asia/Bangkok Asia/Ho_Chi_Minh", "VU|Pacific/Efate", "WF|Pacific/Wallis", "WS|Pacific/Apia", "YE|Asia/Riyadh Asia/Aden", "YT|Africa/Nairobi Indian/Mayotte", "ZA|Africa/Johannesburg", "ZM|Africa/Maputo Africa/Lusaka", "ZW|Africa/Maputo Africa/Harare" ] }); return moment; })); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/moment-timezone/moment-timezone-with-data-1970-2030.js ================================================ //! moment-timezone.js //! version : 0.5.28 //! Copyright (c) JS Foundation and other contributors //! license : MIT //! github.com/moment/moment-timezone (function (root, factory) { "use strict"; /*global define*/ if (typeof module === 'object' && module.exports) { module.exports = factory(require('moment')); // Node } else if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else { factory(root.moment); // Browser } }(this, function (moment) { "use strict"; // Do not load moment-timezone a second time. // if (moment.tz !== undefined) { // logError('Moment Timezone ' + moment.tz.version + ' was already loaded ' + (moment.tz.dataVersion ? 'with data from ' : 'without any data') + moment.tz.dataVersion); // return moment; // } var VERSION = "0.5.28", zones = {}, links = {}, countries = {}, names = {}, guesses = {}, cachedGuess; if (!moment || typeof moment.version !== 'string') { logError('Moment Timezone requires Moment.js. See https://momentjs.com/timezone/docs/#/use-it/browser/'); } var momentVersion = moment.version.split('.'), major = +momentVersion[0], minor = +momentVersion[1]; // Moment.js version check if (major < 2 || (major === 2 && minor < 6)) { logError('Moment Timezone requires Moment.js >= 2.6.0. You are using Moment.js ' + moment.version + '. See momentjs.com'); } /************************************ Unpacking ************************************/ function charCodeToInt(charCode) { if (charCode > 96) { return charCode - 87; } else if (charCode > 64) { return charCode - 29; } return charCode - 48; } function unpackBase60(string) { var i = 0, parts = string.split('.'), whole = parts[0], fractional = parts[1] || '', multiplier = 1, num, out = 0, sign = 1; // handle negative numbers if (string.charCodeAt(0) === 45) { i = 1; sign = -1; } // handle digits before the decimal for (i; i < whole.length; i++) { num = charCodeToInt(whole.charCodeAt(i)); out = 60 * out + num; } // handle digits after the decimal for (i = 0; i < fractional.length; i++) { multiplier = multiplier / 60; num = charCodeToInt(fractional.charCodeAt(i)); out += num * multiplier; } return out * sign; } function arrayToInt (array) { for (var i = 0; i < array.length; i++) { array[i] = unpackBase60(array[i]); } } function intToUntil (array, length) { for (var i = 0; i < length; i++) { array[i] = Math.round((array[i - 1] || 0) + (array[i] * 60000)); // minutes to milliseconds } array[length - 1] = Infinity; } function mapIndices (source, indices) { var out = [], i; for (i = 0; i < indices.length; i++) { out[i] = source[indices[i]]; } return out; } function unpack (string) { var data = string.split('|'), offsets = data[2].split(' '), indices = data[3].split(''), untils = data[4].split(' '); arrayToInt(offsets); arrayToInt(indices); arrayToInt(untils); intToUntil(untils, indices.length); return { name : data[0], abbrs : mapIndices(data[1].split(' '), indices), offsets : mapIndices(offsets, indices), untils : untils, population : data[5] | 0 }; } /************************************ Zone object ************************************/ function Zone (packedString) { if (packedString) { this._set(unpack(packedString)); } } Zone.prototype = { _set : function (unpacked) { this.name = unpacked.name; this.abbrs = unpacked.abbrs; this.untils = unpacked.untils; this.offsets = unpacked.offsets; this.population = unpacked.population; }, _index : function (timestamp) { var target = +timestamp, untils = this.untils, i; for (i = 0; i < untils.length; i++) { if (target < untils[i]) { return i; } } }, countries : function () { var zone_name = this.name; return Object.keys(countries).filter(function (country_code) { return countries[country_code].zones.indexOf(zone_name) !== -1; }); }, parse : function (timestamp) { var target = +timestamp, offsets = this.offsets, untils = this.untils, max = untils.length - 1, offset, offsetNext, offsetPrev, i; for (i = 0; i < max; i++) { offset = offsets[i]; offsetNext = offsets[i + 1]; offsetPrev = offsets[i ? i - 1 : i]; if (offset < offsetNext && tz.moveAmbiguousForward) { offset = offsetNext; } else if (offset > offsetPrev && tz.moveInvalidForward) { offset = offsetPrev; } if (target < untils[i] - (offset * 60000)) { return offsets[i]; } } return offsets[max]; }, abbr : function (mom) { return this.abbrs[this._index(mom)]; }, offset : function (mom) { logError("zone.offset has been deprecated in favor of zone.utcOffset"); return this.offsets[this._index(mom)]; }, utcOffset : function (mom) { return this.offsets[this._index(mom)]; } }; /************************************ Country object ************************************/ function Country (country_name, zone_names) { this.name = country_name; this.zones = zone_names; } /************************************ Current Timezone ************************************/ function OffsetAt(at) { var timeString = at.toTimeString(); var abbr = timeString.match(/\([a-z ]+\)/i); if (abbr && abbr[0]) { // 17:56:31 GMT-0600 (CST) // 17:56:31 GMT-0600 (Central Standard Time) abbr = abbr[0].match(/[A-Z]/g); abbr = abbr ? abbr.join('') : undefined; } else { // 17:56:31 CST // 17:56:31 GMT+0800 (台北標準時間) abbr = timeString.match(/[A-Z]{3,5}/g); abbr = abbr ? abbr[0] : undefined; } if (abbr === 'GMT') { abbr = undefined; } this.at = +at; this.abbr = abbr; this.offset = at.getTimezoneOffset(); } function ZoneScore(zone) { this.zone = zone; this.offsetScore = 0; this.abbrScore = 0; } ZoneScore.prototype.scoreOffsetAt = function (offsetAt) { this.offsetScore += Math.abs(this.zone.utcOffset(offsetAt.at) - offsetAt.offset); if (this.zone.abbr(offsetAt.at).replace(/[^A-Z]/g, '') !== offsetAt.abbr) { this.abbrScore++; } }; function findChange(low, high) { var mid, diff; while ((diff = ((high.at - low.at) / 12e4 | 0) * 6e4)) { mid = new OffsetAt(new Date(low.at + diff)); if (mid.offset === low.offset) { low = mid; } else { high = mid; } } return low; } function userOffsets() { var startYear = new Date().getFullYear() - 2, last = new OffsetAt(new Date(startYear, 0, 1)), offsets = [last], change, next, i; for (i = 1; i < 48; i++) { next = new OffsetAt(new Date(startYear, i, 1)); if (next.offset !== last.offset) { change = findChange(last, next); offsets.push(change); offsets.push(new OffsetAt(new Date(change.at + 6e4))); } last = next; } for (i = 0; i < 4; i++) { offsets.push(new OffsetAt(new Date(startYear + i, 0, 1))); offsets.push(new OffsetAt(new Date(startYear + i, 6, 1))); } return offsets; } function sortZoneScores (a, b) { if (a.offsetScore !== b.offsetScore) { return a.offsetScore - b.offsetScore; } if (a.abbrScore !== b.abbrScore) { return a.abbrScore - b.abbrScore; } if (a.zone.population !== b.zone.population) { return b.zone.population - a.zone.population; } return b.zone.name.localeCompare(a.zone.name); } function addToGuesses (name, offsets) { var i, offset; arrayToInt(offsets); for (i = 0; i < offsets.length; i++) { offset = offsets[i]; guesses[offset] = guesses[offset] || {}; guesses[offset][name] = true; } } function guessesForUserOffsets (offsets) { var offsetsLength = offsets.length, filteredGuesses = {}, out = [], i, j, guessesOffset; for (i = 0; i < offsetsLength; i++) { guessesOffset = guesses[offsets[i].offset] || {}; for (j in guessesOffset) { if (guessesOffset.hasOwnProperty(j)) { filteredGuesses[j] = true; } } } for (i in filteredGuesses) { if (filteredGuesses.hasOwnProperty(i)) { out.push(names[i]); } } return out; } function rebuildGuess () { // use Intl API when available and returning valid time zone try { var intlName = Intl.DateTimeFormat().resolvedOptions().timeZone; if (intlName && intlName.length > 3) { var name = names[normalizeName(intlName)]; if (name) { return name; } logError("Moment Timezone found " + intlName + " from the Intl api, but did not have that data loaded."); } } catch (e) { // Intl unavailable, fall back to manual guessing. } var offsets = userOffsets(), offsetsLength = offsets.length, guesses = guessesForUserOffsets(offsets), zoneScores = [], zoneScore, i, j; for (i = 0; i < guesses.length; i++) { zoneScore = new ZoneScore(getZone(guesses[i]), offsetsLength); for (j = 0; j < offsetsLength; j++) { zoneScore.scoreOffsetAt(offsets[j]); } zoneScores.push(zoneScore); } zoneScores.sort(sortZoneScores); return zoneScores.length > 0 ? zoneScores[0].zone.name : undefined; } function guess (ignoreCache) { if (!cachedGuess || ignoreCache) { cachedGuess = rebuildGuess(); } return cachedGuess; } /************************************ Global Methods ************************************/ function normalizeName (name) { return (name || '').toLowerCase().replace(/\//g, '_'); } function addZone (packed) { var i, name, split, normalized; if (typeof packed === "string") { packed = [packed]; } for (i = 0; i < packed.length; i++) { split = packed[i].split('|'); name = split[0]; normalized = normalizeName(name); zones[normalized] = packed[i]; names[normalized] = name; addToGuesses(normalized, split[2].split(' ')); } } function getZone (name, caller) { name = normalizeName(name); var zone = zones[name]; var link; if (zone instanceof Zone) { return zone; } if (typeof zone === 'string') { zone = new Zone(zone); zones[name] = zone; return zone; } // Pass getZone to prevent recursion more than 1 level deep if (links[name] && caller !== getZone && (link = getZone(links[name], getZone))) { zone = zones[name] = new Zone(); zone._set(link); zone.name = names[name]; return zone; } return null; } function getNames () { var i, out = []; for (i in names) { if (names.hasOwnProperty(i) && (zones[i] || zones[links[i]]) && names[i]) { out.push(names[i]); } } return out.sort(); } function getCountryNames () { return Object.keys(countries); } function addLink (aliases) { var i, alias, normal0, normal1; if (typeof aliases === "string") { aliases = [aliases]; } for (i = 0; i < aliases.length; i++) { alias = aliases[i].split('|'); normal0 = normalizeName(alias[0]); normal1 = normalizeName(alias[1]); links[normal0] = normal1; names[normal0] = alias[0]; links[normal1] = normal0; names[normal1] = alias[1]; } } function addCountries (data) { var i, country_code, country_zones, split; if (!data || !data.length) return; for (i = 0; i < data.length; i++) { split = data[i].split('|'); country_code = split[0].toUpperCase(); country_zones = split[1].split(' '); countries[country_code] = new Country( country_code, country_zones ); } } function getCountry (name) { name = name.toUpperCase(); return countries[name] || null; } function zonesForCountry(country, with_offset) { country = getCountry(country); if (!country) return null; var zones = country.zones.sort(); if (with_offset) { return zones.map(function (zone_name) { var zone = getZone(zone_name); return { name: zone_name, offset: zone.utcOffset(new Date()) }; }); } return zones; } function loadData (data) { addZone(data.zones); addLink(data.links); addCountries(data.countries); tz.dataVersion = data.version; } function zoneExists (name) { if (!zoneExists.didShowError) { zoneExists.didShowError = true; logError("moment.tz.zoneExists('" + name + "') has been deprecated in favor of !moment.tz.zone('" + name + "')"); } return !!getZone(name); } function needsOffset (m) { var isUnixTimestamp = (m._f === 'X' || m._f === 'x'); return !!(m._a && (m._tzm === undefined) && !isUnixTimestamp); } function logError (message) { if (typeof console !== 'undefined' && typeof console.error === 'function') { console.error(message); } } /************************************ moment.tz namespace ************************************/ function tz (input) { var args = Array.prototype.slice.call(arguments, 0, -1), name = arguments[arguments.length - 1], zone = getZone(name), out = moment.utc.apply(null, args); if (zone && !moment.isMoment(input) && needsOffset(out)) { out.add(zone.parse(out), 'minutes'); } out.tz(name); return out; } tz.version = VERSION; tz.dataVersion = ''; tz._zones = zones; tz._links = links; tz._names = names; tz._countries = countries; tz.add = addZone; tz.link = addLink; tz.load = loadData; tz.zone = getZone; tz.zoneExists = zoneExists; // deprecated in 0.1.0 tz.guess = guess; tz.names = getNames; tz.Zone = Zone; tz.unpack = unpack; tz.unpackBase60 = unpackBase60; tz.needsOffset = needsOffset; tz.moveInvalidForward = true; tz.moveAmbiguousForward = false; tz.countries = getCountryNames; tz.zonesForCountry = zonesForCountry; /************************************ Interface with Moment.js ************************************/ var fn = moment.fn; moment.tz = tz; moment.defaultZone = null; moment.updateOffset = function (mom, keepTime) { var zone = moment.defaultZone, offset; if (mom._z === undefined) { if (zone && needsOffset(mom) && !mom._isUTC) { mom._d = moment.utc(mom._a)._d; mom.utc().add(zone.parse(mom), 'minutes'); } mom._z = zone; } if (mom._z) { offset = mom._z.utcOffset(mom); if (Math.abs(offset) < 16) { offset = offset / 60; } if (mom.utcOffset !== undefined) { var z = mom._z; mom.utcOffset(-offset, keepTime); mom._z = z; } else { mom.zone(offset, keepTime); } } }; fn.tz = function (name, keepTime) { if (name) { if (typeof name !== 'string') { throw new Error('Time zone name must be a string, got ' + name + ' [' + typeof name + ']'); } this._z = getZone(name); if (this._z) { moment.updateOffset(this, keepTime); } else { logError("Moment Timezone has no data for " + name + ". See http://momentjs.com/timezone/docs/#/data-loading/."); } return this; } if (this._z) { return this._z.name; } }; function abbrWrap (old) { return function () { if (this._z) { return this._z.abbr(this); } return old.call(this); }; } function resetZoneWrap (old) { return function () { this._z = null; return old.apply(this, arguments); }; } function resetZoneWrap2 (old) { return function () { if (arguments.length > 0) this._z = null; return old.apply(this, arguments); }; } fn.zoneName = abbrWrap(fn.zoneName); fn.zoneAbbr = abbrWrap(fn.zoneAbbr); fn.utc = resetZoneWrap(fn.utc); fn.local = resetZoneWrap(fn.local); fn.utcOffset = resetZoneWrap2(fn.utcOffset); moment.tz.setDefault = function(name) { if (major < 2 || (major === 2 && minor < 9)) { logError('Moment Timezone setDefault() requires Moment.js >= 2.9.0. You are using Moment.js ' + moment.version + '.'); } moment.defaultZone = name ? getZone(name) : null; return moment; }; // Cloning a moment should include the _z property. var momentProperties = moment.momentProperties; if (Object.prototype.toString.call(momentProperties) === '[object Array]') { // moment 2.8.1+ momentProperties.push('_z'); momentProperties.push('_a'); } else if (momentProperties) { // moment 2.7.0 momentProperties._z = null; } loadData({ "version": "2019c", "zones": [ "Africa/Abidjan|GMT|0|0||48e5", "Africa/Nairobi|EAT|-30|0||47e5", "Africa/Algiers|WET WEST CET CEST|0 -10 -10 -20|01012320102|3bX0 11A0 dDd0 17b0 11B0 1cN0 2Dy0 1cN0 1fB0 1cL0|26e5", "Africa/Lagos|WAT|-10|0||17e6", "Africa/Bissau|-01 GMT|10 0|01|cap0|39e4", "Africa/Maputo|CAT|-20|0||26e5", "Africa/Cairo|EET EEST|-20 -30|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|LX0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1WL0 rd0 1Rz0 wp0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1qL0 Xd0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1ny0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 WL0 1qN0 Rb0 1wp0 On0 1zd0 Lz0 1EN0 Fb0 c10 8n0 8Nd0 gL0 e10 mn0|15e6", "Africa/Casablanca|+00 +01|0 -10|01010101010101010101010101010101010101010101010101010101010101010101010|aS00 rz0 43d0 AL0 1Nd0 XX0 1Cp0 pz0 dEp0 4mn0 SyN0 AL0 1Nd0 wn0 1FB0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 28M0 e00 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 e00 28M0 e00 2600 gM0 2600|32e5", "Africa/Ceuta|WET WEST CET CEST|0 -10 -10 -20|0101010102323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|aS00 rz0 43d0 AL0 1Nd0 XX0 1Cp0 pz0 dEp0 4VB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00|85e3", "Africa/El_Aaiun|-01 +00 +01|10 0 -10|01212121212121212121212121212121212121212121212121212121212121212121|fi10 6L0 AL0 1Nd0 XX0 1Cp0 pz0 1cBB0 AL0 1Nd0 wn0 1FB0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 28M0 e00 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 e00 28M0 e00 2600 gM0 2600|20e4", "Africa/Johannesburg|SAST|-20|0||84e5", "Africa/Juba|CAT CAST EAT|-20 -30 -30|0101010101010101010101010101010102|LW0 16L0 1iN0 17b0 1jd0 17b0 1ip0 17z0 1i10 17X0 1hB0 18n0 1hd0 19b0 1gp0 19z0 1iN0 17b0 1ip0 17z0 1i10 18n0 1hd0 18L0 1gN0 19b0 1gp0 19z0 1iN0 17z0 1i10 17X0 yGd0|", "Africa/Khartoum|CAT CAST EAT|-20 -30 -30|01010101010101010101010101010101020|LW0 16L0 1iN0 17b0 1jd0 17b0 1ip0 17z0 1i10 17X0 1hB0 18n0 1hd0 19b0 1gp0 19z0 1iN0 17b0 1ip0 17z0 1i10 18n0 1hd0 18L0 1gN0 19b0 1gp0 19z0 1iN0 17z0 1i10 17X0 yGd0 HjL0|51e5", "Africa/Monrovia|MMT GMT|I.u 0|01|4SoI.u|11e5", "Africa/Ndjamena|WAT WAST|-10 -20|010|nNb0 Wn0|13e5", "Africa/Sao_Tome|GMT WAT|0 -10|010|1UQN0 2q00|", "Africa/Tripoli|EET CET CEST|-20 -10 -20|0121212121212121210120120|tda0 A10 1db0 1cN0 1db0 1dd0 1db0 1eN0 1bb0 1e10 1cL0 1c10 1db0 1dd0 1db0 1cN0 1db0 1q10 fAn0 1ep0 1db0 AKq0 TA0 1o00|11e5", "Africa/Tunis|CET CEST|-10 -20|0101010101010101010|hOn0 WM0 1rA0 11c0 nwo0 Ko0 1cM0 1cM0 1rA0 10M0 zuM0 10N0 1aN0 1qM0 WM0 1qM0 11A0 1o00|20e5", "Africa/Windhoek|SAST CAT WAT|-20 -20 -10|01212121212121212121212121212121212121212121212121|Ndy0 9Io0 16P0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0|32e4", "America/Adak|BST BDT AHST HST HDT|b0 a0 a0 a0 90|0101010101010101010101010101234343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|Kd0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cm0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|326", "America/Anchorage|AHST AHDT YST AKST AKDT|a0 90 90 90 80|0101010101010101010101010101234343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|Kc0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cm0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|30e4", "America/Puerto_Rico|AST|40|0||24e5", "America/Araguaina|-03 -02|30 20|01010101010101010101010101010|CxD0 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 dMN0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 ny10 Lz0|14e4", "America/Argentina/Buenos_Aires|-03 -02|30 20|01010101010101010|9Rf0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 A4p0 uL0 1qN0 WL0|", "America/Argentina/Catamarca|-03 -02 -04|30 20 40|01010101210102010|9Rf0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 rlB0 7B0 8zb0 uL0|", "America/Argentina/Cordoba|-03 -02 -04|30 20 40|01010101210101010|9Rf0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 A4p0 uL0 1qN0 WL0|", "America/Argentina/Jujuy|-03 -02 -04|30 20 40|010101202101010|9Rf0 Db0 zvd0 Bz0 1tB0 TX0 1ze0 TX0 1ld0 WK0 1wp0 TX0 A4p0 uL0|", "America/Argentina/La_Rioja|-03 -02 -04|30 20 40|010101012010102010|9Rf0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Qn0 qO0 16n0 Rb0 1wp0 TX0 rlB0 7B0 8zb0 uL0|", "America/Argentina/Mendoza|-03 -02 -04|30 20 40|01010120202102010|9Rf0 Db0 zvd0 Bz0 1tB0 TX0 1u20 SL0 1vd0 Tb0 1wp0 TW0 ri10 Op0 7TX0 uL0|", "America/Argentina/Rio_Gallegos|-03 -02 -04|30 20 40|01010101010102010|9Rf0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 rlB0 7B0 8zb0 uL0|", "America/Argentina/Salta|-03 -02 -04|30 20 40|010101012101010|9Rf0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 A4p0 uL0|", "America/Argentina/San_Juan|-03 -02 -04|30 20 40|010101012010102010|9Rf0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Qn0 qO0 16n0 Rb0 1wp0 TX0 rld0 m10 8lb0 uL0|", "America/Argentina/San_Luis|-03 -02 -04|30 20 40|010101202020102020|9Rf0 Db0 zvd0 Bz0 1tB0 XX0 1q20 SL0 AN0 vDb0 m10 8lb0 8L0 jd0 1qN0 WL0 1qN0|", "America/Argentina/Tucuman|-03 -02 -04|30 20 40|0101010121010201010|9Rf0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 rlB0 4N0 8BX0 uL0 1qN0 WL0|", "America/Argentina/Ushuaia|-03 -02 -04|30 20 40|01010101010102010|9Rf0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 rkN0 8p0 8zb0 uL0|", "America/Asuncion|-04 -03|40 30|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|6FE0 3CL0 3Dd0 10L0 1pB0 10n0 1pB0 10n0 1pB0 1cL0 1dd0 1db0 1dd0 1cL0 1dd0 1cL0 1dd0 1cL0 1dd0 1db0 1dd0 1cL0 1dd0 1cL0 1dd0 1cL0 1dd0 1db0 1dd0 1cL0 1lB0 14n0 1dd0 1cL0 1fd0 WL0 1rd0 1aL0 1dB0 Xz0 1qp0 Xb0 1qN0 10L0 1rB0 TX0 1tB0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 WN0 1qL0 11B0 1nX0 1ip0 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 TX0 1tB0 19X0 1a10 1fz0 1a10 1fz0 1cN0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0|28e5", "America/Panama|EST|50|0||15e5", "America/Bahia_Banderas|PST MST MDT CDT CST|80 70 60 50 60|012121212121212121212121212121343434343434343434343434343434343434343434|80 13Vd0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nW0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0|84e3", "America/Bahia|-03 -02|30 20|010101010101010101010101010101010101010|CxD0 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 l5B0 Rb0|27e5", "America/Barbados|AST ADT|40 30|010101010|i7G0 IL0 1ip0 17b0 1ip0 17b0 1ld0 13b0|28e4", "America/Belem|-03 -02|30 20|0101010|CxD0 Rb0 1tB0 IL0 1Fd0 FX0|20e5", "America/Belize|CST CDT|60 50|01010|9xG0 qn0 lxB0 mn0|57e3", "America/Boa_Vista|-04 -03|40 30|01010101010|CxE0 Rb0 1tB0 IL0 1Fd0 FX0 smp0 WL0 1tB0 2L0|62e2", "America/Bogota|-05 -04|50 40|010|Snh0 2en0|90e5", "America/Boise|MST MDT|70 60|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|K90 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 Dd0 1Kn0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e4", "America/Cambridge_Bay|MST MDT CST CDT EST|70 60 60 50 50|01010101010101010101010101010101010101012342101010101010101010101010101010101010101010101010101010101010|p7J0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11A0 1nX0 2K0 WQ0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|15e2", "America/Campo_Grande|-04 -03|40 30|010101010101010101010101010101010101010101010101010101010101010101010|CxE0 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 1C10 Lz0 1Ip0 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|77e4", "America/Cancun|CST EST EDT CDT|60 50 40 50|012121230303030303030303030303030303030301|t9G0 yLB0 1lb0 14p0 1lb0 14p0 Lz0 xB0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 Dd0|63e4", "America/Caracas|-04 -0430|40 4u|010|1wmv0 kqo0|29e5", "America/Cayenne|-03|30|0||58e3", "America/Chicago|CST CDT|60 50|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|K80 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|92e5", "America/Chihuahua|CST CDT MDT MST|60 50 60 70|01010232323232323232323232323232323232323232323232323232323232323232323|13Vk0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0|81e4", "America/Costa_Rica|CST CDT|60 50|010101010|mgS0 Db0 1Kp0 Db0 pRB0 15b0 1kp0 mL0|12e5", "America/Phoenix|MST|70|0||42e5", "America/Cuiaba|-04 -03|40 30|0101010101010101010101010101010101010101010101010101010101010101010|CxE0 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 4a10 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|54e4", "America/Danmarkshavn|-03 -02 GMT|30 20 0|0101010101010101010101010101010102|oXh0 19U0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 DC0|8", "America/Dawson_Creek|PST PDT MST|80 70 70|0101012|Ka0 1cL0 1cN0 1fz0 1cN0 ML0|12e3", "America/Dawson|YST PST PDT|90 80 70|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|9ix0 fNd0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|13e2", "America/Denver|MST MDT|70 60|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|K90 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|26e5", "America/Detroit|EST EDT|50 40|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|85H0 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e5", "America/Edmonton|MST MDT|70 60|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|5E90 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|10e5", "America/Eirunepe|-05 -04|50 40|01010101010|CxF0 Rb0 1tB0 IL0 1Fd0 FX0 dPB0 On0 yTd0 d5X0|31e3", "America/El_Salvador|CST CDT|60 50|01010|Gcu0 WL0 1qN0 WL0|11e5", "America/Tijuana|PST PDT|80 70|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|fmy0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|20e5", "America/Fort_Nelson|PST PDT MST|80 70 70|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010102|Ka0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0|39e2", "America/Fort_Wayne|EST EDT|50 40|01010101010101010101010101010101010101010101010101010|K70 1cL0 1qhd0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|", "America/Fortaleza|-03 -02|30 20|01010101010101010|CxD0 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 5z0 2mN0 On0|34e5", "America/Glace_Bay|AST ADT|40 30|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|5E60 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|19e3", "America/Godthab|-03 -02|30 20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|oXh0 19U0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00|17e3", "America/Goose_Bay|AST ADT ADDT|40 30 20|010101010101010101010101010101010101020101010101010101010101010101010101010101010101010101010101010101010101010101010101010|K60 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14n1 1lb0 14p0 1nW0 11C0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|76e2", "America/Grand_Turk|EST EDT AST|50 40 40|01010101010101010101010101010101010101010101010101010101010101010101010101210101010101010101010101010|mG70 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 5Ip0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e2", "America/Guatemala|CST CDT|60 50|010101010|9tG0 An0 mtd0 Nz0 ifB0 17b0 zDB0 11z0|13e5", "America/Guayaquil|-05 -04|50 40|010|TKR0 rz0|27e5", "America/Guyana|-0345 -03 -04|3J 30 40|012|dyPJ Bxbf|80e4", "America/Halifax|AST ADT|40 30|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|K60 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|39e4", "America/Havana|CST CDT|50 40|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|K50 1cL0 1cN0 1fz0 1cN0 14n0 1ld0 14L0 1kN0 15b0 1kp0 1cL0 1cN0 1fz0 1a10 1fz0 1fB0 11z0 14p0 1nX0 11B0 1nX0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 1a10 1in0 1a10 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 17c0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 11A0 6i00 Rc0 1wo0 U00 1tA0 Rc0 1wo0 U00 1wo0 U00 1zc0 U00 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0|21e5", "America/Hermosillo|PST MST MDT|80 70 60|01212121|80 13Vd0 1lb0 14p0 1lb0 14p0 1lb0|64e4", "America/Indiana/Knox|CST CDT EST|60 50 50|01010101010101010101010101010101010101010101210101010101010101010101010101010101010101010101010|K80 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 z8o0 1o00 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|", "America/Indiana/Marengo|EST EDT CDT|50 40 50|010101010201010101010101010101010101010101010101010101010101010|K70 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1VA0 LA0 1BX0 1e6p0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|", "America/Indiana/Petersburg|CST CDT EST EDT|60 50 50 40|0101010101010101210123232323232323232323232323232323232323232323232|K80 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 19co0 1o00 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|", "America/Indiana/Tell_City|EST EDT CDT CST|50 40 50 60|01023232323232323232323232323232323232323232323232323|K70 1cL0 1qhd0 1o00 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|", "America/Indiana/Vevay|EST EDT|50 40|010101010101010101010101010101010101010101010101010101010|K70 1cL0 1cN0 1fz0 1cN0 1cL0 1lnd0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|", "America/Indiana/Vincennes|EST EDT CDT CST|50 40 50 60|01023201010101010101010101010101010101010101010101010|K70 1cL0 1qhd0 1o00 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|", "America/Indiana/Winamac|EST EDT CDT CST|50 40 50 60|01023101010101010101010101010101010101010101010101010|K70 1cL0 1qhd0 1o00 Rd0 1za0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|", "America/Inuvik|PST MST MDT|80 70 60|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|mGa0 2pz0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|35e2", "America/Iqaluit|EST EDT CST CDT|50 40 60 50|0101010101010101010101010101010101010101230101010101010101010101010101010101010101010101010101010101010|p7H0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11C0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|67e2", "America/Jamaica|EST EDT|50 40|010101010101010101010|9Kv0 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0|94e4", "America/Juneau|PST PDT YDT YST AKST AKDT|80 70 80 90 90 80|0101010101010101010102010101345454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|Ka0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cM0 1cM0 1cL0 1cN0 1fz0 1a10 1fz0 co0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|33e3", "America/Kentucky/Louisville|EST EDT CDT|50 40 50|010101010201010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|K70 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1VA0 LA0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|", "America/Kentucky/Monticello|CST CDT EST EDT|60 50 50 40|010101010101010101010101010101010101010101010101010101010101012323232323232323232323232323232323232323232323232323232323232|K80 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|", "America/La_Paz|-04|40|0||19e5", "America/Lima|-05 -04|50 40|010101010|CVF0 zX0 1O10 zX0 6Gp0 zX0 98p0 zX0|11e6", "America/Los_Angeles|PST PDT|80 70|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|Ka0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|15e6", "America/Maceio|-03 -02|30 20|0101010101010101010|CxD0 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 dMN0 Lz0 8Q10 WL0 1tB0 5z0 2mN0 On0|93e4", "America/Managua|CST EST CDT|60 50 50|010202010102020|86u0 4mn0 9Up0 Dz0 1K10 Dz0 s3F0 1KH0 DB0 9In0 k8p0 19X0 1o30 11y0|22e5", "America/Manaus|-04 -03|40 30|010101010|CxE0 Rb0 1tB0 IL0 1Fd0 FX0 dPB0 On0|19e5", "America/Martinique|AST ADT|40 30|010|oXg0 19X0|39e4", "America/Matamoros|CST CDT|60 50|0101010101010101010101010101010101010101010101010101010101010101010101010|IqU0 1nX0 i6p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|45e4", "America/Mazatlan|PST MST MDT|80 70 60|012121212121212121212121212121212121212121212121212121212121212121212121|80 13Vd0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0|44e4", "America/Menominee|EST CDT CST|50 50 60|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|85H0 1cM0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|85e2", "America/Merida|CST EST CDT|60 50 50|0102020202020202020202020202020202020202020202020202020202020202020202020|t9G0 2hz0 wu30 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0|11e5", "America/Metlakatla|PST PDT AKST AKDT|80 70 90 80|0101010101010101010101010101023232302323232323232323232323232|Ka0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1hU10 Rd0 1zb0 Op0 1zb0 Op0 1zb0 uM0 jB0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|14e2", "America/Mexico_City|CST CDT|60 50|01010101010101010101010101010101010101010101010101010101010101010101010|13Vk0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0|20e6", "America/Miquelon|AST -03 -02|40 30 20|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|p9g0 gQ10 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|61e2", "America/Moncton|AST ADT|40 30|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|K60 1cL0 1cN0 1fz0 1cN0 1cL0 3Cp0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14n1 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 ReX 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|64e3", "America/Monterrey|CST CDT|60 50|0101010101010101010101010101010101010101010101010101010101010101010101010|IqU0 1nX0 i6p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0|41e5", "America/Montevideo|-03 -02 -0130 -0230|30 20 1u 2u|0101023010101010101010101010101010101010101010101010|JD0 jX0 4vB0 xz0 3Cp0 mmu 1a10 IMu Db0 4c10 uL0 1Nd0 An0 1SN0 uL0 mp0 28L0 iPB0 un0 1SN0 xz0 1zd0 Lz0 1zd0 Rb0 1zd0 On0 1wp0 Rb0 s8p0 1fB0 1ip0 11z0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 11z0|17e5", "America/Toronto|EST EDT|50 40|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|K70 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|65e5", "America/New_York|EST EDT|50 40|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|K70 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e6", "America/Nipigon|EST EDT|50 40|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|avj0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|16e2", "America/Nome|BST BDT YST AKST AKDT|b0 a0 90 90 80|0101010101010101010101010101234343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|Kd0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cl0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|38e2", "America/Noronha|-02 -01|20 10|01010101010101010|CxC0 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 2L0 2pB0 On0|30e2", "America/North_Dakota/Beulah|MST MDT CST CDT|70 60 60 50|010101010101010101010101010101010101010101010101010101010101010101010101010101010123232323232323232323232323232323232323232|K90 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|", "America/North_Dakota/Center|MST MDT CST CDT|70 60 60 50|010101010101010101010101010101010101010101010123232323232323232323232323232323232323232323232323232323232323232323232323232|K90 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14o0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|", "America/North_Dakota/New_Salem|MST MDT CST CDT|70 60 60 50|010101010101010101010101010101010101010101010101010101010101010101012323232323232323232323232323232323232323232323232323232|K90 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14o0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|", "America/Ojinaga|CST CDT MDT MST|60 50 60 70|01010232323232323232323232323232323232323232323232323232323232323232323|13Vk0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e3", "America/Pangnirtung|AST ADT EDT EST CST CDT|40 30 40 50 60 50|0101010101010101010101010101010232323232453232323232323232323232323232323232323232323232323232323232323|p7G0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1o00 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11C0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|14e2", "America/Paramaribo|-0330 -03|3u 30|01|zSPu|24e4", "America/Port-au-Prince|EST EDT|50 40|01010101010101010101010101010101010101010101010101010101010101010101010|wu50 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14q0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 i6n0 1nX0 11B0 1nX0 d430 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 3iN0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e5", "America/Rio_Branco|-05 -04|50 40|010101010|CxF0 Rb0 1tB0 IL0 1Fd0 FX0 NBd0 d5X0|31e4", "America/Porto_Velho|-04 -03|40 30|0101010|CxE0 Rb0 1tB0 IL0 1Fd0 FX0|37e4", "America/Punta_Arenas|-03 -04|30 40|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|yP0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0|", "America/Rainy_River|CST CDT|60 50|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|avk0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|842", "America/Rankin_Inlet|CST CDT EST|60 50 50|0101010101010101010101010101010101010101012101010101010101010101010101010101010101010101010101010101010|p7I0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|26e2", "America/Recife|-03 -02|30 20|01010101010101010|CxD0 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 2L0 2pB0 On0|33e5", "America/Regina|CST|60|0||19e4", "America/Resolute|CST CDT EST|60 50 50|0101010101010101010101010101010101010101012101010101012101010101010101010101010101010101010101010101010|p7I0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|229", "America/Santarem|-04 -03|40 30|01010101|CxE0 Rb0 1tB0 IL0 1Fd0 FX0 NBd0|21e4", "America/Santiago|-03 -04|30 40|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|yP0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0|62e5", "America/Santo_Domingo|-0430 EST AST|4u 50 40|0101010101212|ksu 1Cou yLu 1RAu wLu 1QMu xzu 1Q0u xXu 1PAu 13jB0 e00|29e5", "America/Sao_Paulo|-03 -02|30 20|010101010101010101010101010101010101010101010101010101010101010101010|CxD0 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 1C10 Lz0 1Ip0 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|20e6", "America/Scoresbysund|-02 -01 +00|20 10 0|0102121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|oXg0 1a00 1cK0 1cL0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00|452", "America/Sitka|PST PDT YST AKST AKDT|80 70 90 90 80|0101010101010101010101010101234343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|Ka0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 co0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|90e2", "America/St_Johns|NST NDT NDDT|3u 2u 1u|010101010101010101010101010101010101020101010101010101010101010101010101010101010101010101010101010101010101010101010101010|K5u 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14n1 1lb0 14p0 1nW0 11C0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|11e4", "America/Swift_Current|MST CST|70 60|01|5E90|16e3", "America/Tegucigalpa|CST CDT|60 50|0101010|Gcu0 WL0 1qN0 WL0 GRd0 AL0|11e5", "America/Thule|AST ADT|40 30|010101010101010101010101010101010101010101010101010101010101010101010101010101010|PHG0 1cL0 1cN0 1cL0 1fB0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|656", "America/Thunder_Bay|EST EDT|50 40|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|K70 1cL0 1cN0 1fz0 1cN0 1cL0 3Cp0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|11e4", "America/Vancouver|PST PDT|80 70|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|Ka0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e5", "America/Whitehorse|PST PDT|80 70|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|p7K0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e3", "America/Winnipeg|CST CDT|60 50|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|K80 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|66e4", "America/Yakutat|YST YDT AKST AKDT|90 80 90 80|0101010101010101010101010101023232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|Kb0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cn0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|642", "America/Yellowknife|MST MDT|70 60|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|p7J0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|19e3", "Antarctica/Casey|+08 +11|-80 -b0|0101010|1ARS0 T90 40P0 KL0 blz0 3m10|10", "Antarctica/Davis|+07 +05|-70 -50|01010|1ART0 VB0 3Wn0 KN0|70", "Pacific/Port_Moresby|+10|-a0|0||25e4", "Antarctica/Macquarie|AEDT AEST +11|-b0 -a0 -b0|0101010101010101010101010101010101010101010101010101010101010101010101010101010102|qg0 1wo0 U00 1wo0 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 1cM0|1", "Antarctica/Mawson|+06 +05|-60 -50|01|1ARU0|60", "Pacific/Auckland|NZST NZDT|-c0 -d0|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|bKC0 IM0 1C00 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1qM0 14o0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1io0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00|14e5", "Antarctica/Palmer|-03 -02 -04|30 20 40|01020202020202020202020202020202020202020202020202020202020202020202020|9Rf0 Db0 jsN0 14N0 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0|40", "Antarctica/Rothera|-00 -03|0 30|01|gOo0|130", "Asia/Riyadh|+03|-30|0||57e5", "Antarctica/Troll|-00 +00 +02|0 0 -20|012121212121212121212121212121212121212121212121212121|1puo0 hd0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00|40", "Asia/Urumqi|+06|-60|0||32e5", "Europe/Berlin|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|oXd0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00|41e5", "Asia/Almaty|+06 +07 +05|-60 -70 -50|0101010101010101010102010101010101010101010101010|rn60 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0|15e5", "Asia/Amman|EET EEST|-20 -30|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|8kK0 KL0 1oN0 11b0 1oN0 11b0 1pd0 1dz0 1cp0 11b0 1op0 11b0 fO10 1db0 1e10 1cL0 1cN0 1cL0 1cN0 1fz0 1pd0 10n0 1ld0 14n0 1hB0 15b0 1ip0 19X0 1cN0 1cL0 1cN0 17b0 1ld0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1So0 y00 1fc0 1dc0 1co0 1dc0 1cM0 1cM0 1cM0 1o00 11A0 1lc0 17c0 1cM0 1cM0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 4bX0 Dd0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|25e5", "Asia/Anadyr|+13 +14 +12 +11|-d0 -e0 -c0 -b0|010202020202020202023202020202020202020202020202020202020232|rmX0 1db0 2q10 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|13e3", "Asia/Aqtau|+05 +06 +04|-50 -60 -40|0101010101010101010201010120202020202020202020|sAj0 2pX0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|15e4", "Asia/Aqtobe|+05 +06 +04|-50 -60 -40|01010101010101010102010101010101010101010101010|rn70 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0|27e4", "Asia/Ashgabat|+05 +06 +04|-50 -60 -40|01010101010101010101020|rn70 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0|41e4", "Asia/Atyrau|+05 +06 +04|-50 -60 -40|010101010101010101020101010101010102020202020|sAj0 2pX0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 2sp0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|", "Asia/Baghdad|+03 +04|-30 -40|01010101010101010101010101010101010101010101010101010|u190 11b0 1cp0 1dz0 1dd0 1db0 1cN0 1cp0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1de0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0|66e5", "Asia/Qatar|+04 +03|-40 -30|01|5QI0|96e4", "Asia/Baku|+04 +05 +03|-40 -50 -30|010101010101010101010201010101010101010101010101010101010101010|rn80 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cM0 9Je0 1o00 11z0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e5", "Asia/Bangkok|+07|-70|0||15e6", "Asia/Barnaul|+07 +08 +06|-70 -80 -60|01010101010101010101020101010102020202020202020202020202020202020|rn50 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 p90 LE0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|", "Asia/Beirut|EET EEST|-20 -30|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|61a0 En0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1op0 11b0 dA10 17b0 1iN0 17b0 1iN0 17b0 1iN0 17b0 1vB0 SL0 1mp0 13z0 1iN0 17b0 1iN0 17b0 1jd0 12n0 1a10 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0|22e5", "Asia/Bishkek|+06 +07 +05|-60 -70 -50|0101010101010101010102020202020202020202020202020|rn60 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2e00 1tX0 17b0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1cPu 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0|87e4", "Asia/Brunei|+08|-80|0||42e4", "Asia/Kolkata|IST|-5u|0||15e6", "Asia/Chita|+09 +10 +08|-90 -a0 -80|0101010101010101010102010101010101010101010101010101010101010120|rn30 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3re0|33e4", "Asia/Choibalsan|+07 +08 +10 +09|-70 -80 -a0 -90|012323232323232323232323232323232323232323232313131|jsF0 cKn0 1da0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 3Db0 h1f0 1cJ0 1cP0 1cJ0|38e3", "Asia/Shanghai|CST CDT|-80 -90|0101010101010|DKG0 Rb0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0|23e6", "Asia/Colombo|+0530 +0630 +06|-5u -6u -60|0120|14giu 11zu n3cu|22e5", "Asia/Dhaka|+06 +07|-60 -70|010|1A5R0 1i00|16e6", "Asia/Damascus|EET EEST|-20 -30|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|M00 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 Nb0 1AN0 Nb0 bcp0 19X0 1gp0 19X0 3ld0 1xX0 Vd0 1Bz0 Sp0 1vX0 10p0 1dz0 1cN0 1cL0 1db0 1db0 1g10 1an0 1ap0 1db0 1fd0 1db0 1cN0 1db0 1dd0 1db0 1cp0 1dz0 1c10 1dX0 1cN0 1db0 1dd0 1db0 1cN0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1db0 1cN0 1db0 1cN0 19z0 1fB0 1qL0 11B0 1on0 Wp0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0|26e5", "Asia/Dili|+09 +08|-90 -80|010|fpr0 Xld0|19e4", "Asia/Dubai|+04|-40|0||39e5", "Asia/Dushanbe|+06 +07 +05|-60 -70 -50|0101010101010101010102|rn60 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2hB0|76e4", "Asia/Famagusta|EET EEST +03|-20 -30 -30|0101010101010101010101010101010101010101010101010101010101010101010101010101010101012010101010101010101010101010|cPa0 1cL0 1qp0 Xz0 19B0 19X0 1fB0 1db0 1cp0 1cL0 1fB0 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1o30 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 15U0 2Ks0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00|", "Asia/Gaza|IST IDT EET EEST|-20 -30 -20 -30|010101010101010101010101010101023232323232323232323232323232323232323232323232323232323232323232323232|aXa0 Db0 1fB0 Rb0 bXd0 gM0 8Q00 IM0 1wM0 11z0 1C10 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 M10 C00 17c0 1io0 17c0 1io0 17c0 1o00 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 17c0 1io0 18N0 1bz0 19z0 1gp0 1610 1iL0 11z0 1o10 14o0 1lA1 SKX 1xd1 MKX 1AN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nz0 1220 1qL0 WN0 1qL0 WN0 1qL0 11c0 1oo0 11c0 1rc0 Wo0 1rc0 Wo0 1rc0 11c0 1oo0 11c0 1oo0 11c0 1oo0 11c0 1rc0 Wo0 1rc0 11c0 1oo0 11c0 1oo0 11c0 1oo0|18e5", "Asia/Hebron|IST IDT EET EEST|-20 -30 -20 -30|01010101010101010101010101010102323232323232323232323232323232323232323232323232323232323232323232323232|aXa0 Db0 1fB0 Rb0 bXd0 gM0 8Q00 IM0 1wM0 11z0 1C10 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 M10 C00 17c0 1io0 17c0 1io0 17c0 1o00 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 17c0 1io0 18N0 1bz0 19z0 1gp0 1610 1iL0 12L0 1mN0 14o0 1lc0 Tb0 1xd1 MKX bB0 cn0 1cN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nz0 1220 1qL0 WN0 1qL0 WN0 1qL0 11c0 1oo0 11c0 1rc0 Wo0 1rc0 Wo0 1rc0 11c0 1oo0 11c0 1oo0 11c0 1oo0 11c0 1rc0 Wo0 1rc0 11c0 1oo0 11c0 1oo0 11c0 1oo0|25e4", "Asia/Ho_Chi_Minh|+08 +07|-80 -70|01|dfs0|90e5", "Asia/Hong_Kong|HKT HKST|-80 -90|01010101010101010|H7u 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1cL0 6fd0 14n0|73e5", "Asia/Hovd|+06 +07 +08|-60 -70 -80|01212121212121212121212121212121212121212121212121|jsG0 cKn0 1db0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 kEp0 1cJ0 1cP0 1cJ0|81e3", "Asia/Irkutsk|+08 +09 +07|-80 -90 -70|010101010101010101010201010101010101010101010101010101010101010|rn40 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|60e4", "Europe/Istanbul|EET EEST +03 +04|-20 -30 -30 -40|01010101010123201010101010101010101010101010101010101010101010101010101010101012|8jz0 11A0 WN0 1qL0 TB0 1tX0 U10 1tz0 11B0 1in0 17d0 z90 cne0 pb0 2Cp0 1800 14o0 1dc0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1a00 1fA0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WO0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 Xc0 1qo0 WM0 1qM0 11A0 1o00 1200 1nA0 11A0 1tA0 U00 15w0|13e6", "Asia/Jakarta|WIB|-70|0||31e6", "Asia/Jayapura|WIT|-90|0||26e4", "Asia/Jerusalem|IST IDT|-20 -30|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|aXa0 Db0 1fB0 Rb0 bXd0 gM0 8Q00 IM0 1wM0 11z0 1C10 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 1hB0 1dX0 1ep0 1aL0 1eN0 17X0 1nf0 11z0 1tB0 19W0 1e10 17b0 1ep0 1gL0 18N0 1fz0 1eN0 17b0 1gq0 1gn0 19d0 1dz0 1c10 17X0 1hB0 1gn0 19d0 1dz0 1c10 17X0 1kp0 1dz0 1c10 1aL0 1eN0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0|81e4", "Asia/Kabul|+0430|-4u|0||46e5", "Asia/Kamchatka|+12 +13 +11|-c0 -d0 -b0|0101010101010101010102010101010101010101010101010101010101020|rn00 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|18e4", "Asia/Karachi|+05 PKT PKST|-50 -50 -60|01212121|2Xv0 1fy00 1cL0 dK10 11b0 1610 1jX0|24e6", "Asia/Kathmandu|+0530 +0545|-5u -5J|01|CVuu|12e5", "Asia/Khandyga|+09 +10 +08 +11|-90 -a0 -80 -b0|01010101010101010101020101010101010101010101010131313131313131310|rn30 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 qK0 yN0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 17V0 7zD0|66e2", "Asia/Krasnoyarsk|+07 +08 +06|-70 -80 -60|010101010101010101010201010101010101010101010101010101010101010|rn50 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|10e5", "Asia/Kuala_Lumpur|+0730 +08|-7u -80|01|td4u|71e5", "Asia/Macau|CST CDT|-80 -90|01010101010101010|H7u 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1cL0 6fd0 14n0|57e4", "Asia/Magadan|+11 +12 +10|-b0 -c0 -a0|0101010101010101010102010101010101010101010101010101010101010120|rn10 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3Cq0|95e3", "Asia/Makassar|WITA|-80|0||15e5", "Asia/Manila|PST PDT|-80 -90|010|k0E0 1db0|24e6", "Asia/Nicosia|EET EEST|-20 -30|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|cPa0 1cL0 1qp0 Xz0 19B0 19X0 1fB0 1db0 1cp0 1cL0 1fB0 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1o30 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00|32e4", "Asia/Novokuznetsk|+07 +08 +06|-70 -80 -60|0101010101010101010102010101010101010101010101010101010101020|rn50 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|55e4", "Asia/Novosibirsk|+07 +08 +06|-70 -80 -60|01010101010101010101020101020202020202020202020202020202020202020|rn50 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 ml0 Os0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 4eN0|15e5", "Asia/Omsk|+06 +07 +05|-60 -70 -50|010101010101010101010201010101010101010101010101010101010101010|rn60 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|12e5", "Asia/Oral|+05 +06 +04|-50 -60 -40|010101010101010202020202020202020202020202020|rn70 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 1cM0 IM0 1EM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|27e4", "Asia/Pontianak|WITA WIB|-80 -70|01|HNs0|23e4", "Asia/Pyongyang|KST KST|-90 -8u|010|1P4D0 6BA0|29e5", "Asia/Qostanay|+05 +06 +04|-50 -60 -40|0101010101010101010201010101010101010101010101|rn70 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|", "Asia/Qyzylorda|+05 +06|-50 -60|010101010101010101010101010101010101010101010|rn70 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 3ao0 1EM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 zQl0|73e4", "Asia/Rangoon|+0630|-6u|0||48e5", "Asia/Sakhalin|+11 +12 +10|-b0 -c0 -a0|010101010101010101010201010101010202020202020202020202020202020|rn10 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 2pB0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|58e4", "Asia/Samarkand|+05 +06|-50 -60|010101010101010101010|rn70 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0|36e4", "Asia/Seoul|KST KDT|-90 -a0|01010|Gf50 11A0 1o00 11A0|23e6", "Asia/Srednekolymsk|+11 +12 +10|-b0 -c0 -a0|010101010101010101010201010101010101010101010101010101010101010|rn10 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|35e2", "Asia/Taipei|CST CDT|-80 -90|0101010|akg0 1db0 1cN0 1db0 97B0 AL0|74e5", "Asia/Tashkent|+06 +07 +05|-60 -70 -50|0101010101010101010102|rn60 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0|23e5", "Asia/Tbilisi|+04 +05 +03|-40 -50 -30|01010101010101010101020202010101010101010101020|rn80 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cK0 1cL0 1cN0 1cL0 1cN0 2pz0 1cL0 1fB0 3Nz0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 An0 Os0 WM0|11e5", "Asia/Tehran|+0330 +04 +05 +0430|-3u -40 -50 -4u|0121030303030303030303030303030303030303030303030303030303030303030303030303030303030|j4ku TXu 1pz0 sN0 vAu 1cL0 1dB0 1en0 pNB0 UL0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 64p0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0|14e6", "Asia/Thimphu|+0530 +06|-5u -60|01|HcGu|79e3", "Asia/Tokyo|JST|-90|0||38e6", "Asia/Tomsk|+07 +08 +06|-70 -80 -60|01010101010101010101020101010101010101010101020202020202020202020|rn50 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 co0 1bB0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3Qp0|10e5", "Asia/Ulaanbaatar|+07 +08 +09|-70 -80 -90|01212121212121212121212121212121212121212121212121|jsF0 cKn0 1db0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 kEp0 1cJ0 1cP0 1cJ0|12e5", "Asia/Ust-Nera|+09 +12 +11 +10|-90 -c0 -b0 -a0|0121212121212121212123212121212121212121212121212121212121212123|rn30 1d90 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 17V0 7zD0|65e2", "Asia/Vladivostok|+10 +11 +09|-a0 -b0 -90|010101010101010101010201010101010101010101010101010101010101010|rn20 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|60e4", "Asia/Yakutsk|+09 +10 +08|-90 -a0 -80|010101010101010101010201010101010101010101010101010101010101010|rn30 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|28e4", "Asia/Yekaterinburg|+05 +06 +04|-50 -60 -40|010101010101010101010201010101010101010101010101010101010101010|rn70 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|14e5", "Asia/Yerevan|+04 +05 +03|-40 -50 -30|01010101010101010101020202020101010101010101010101010101010|rn80 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 4RX0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|13e5", "Atlantic/Azores|-01 +00 WET|10 0 0|0101010101010101010101010101010121010101010101010101010101010101010101010101010101010101010101010101010101010|hAN0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cL0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00|25e4", "Atlantic/Bermuda|AST ADT|40 30|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|avi0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|65e3", "Atlantic/Canary|WET WEST|0 -10|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|oXc0 1a10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00|54e4", "Atlantic/Cape_Verde|-02 -01|20 10|01|elE0|50e4", "Atlantic/Faroe|WET WEST|0 -10|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|rm10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00|49e3", "Atlantic/Madeira|WET WEST|0 -10|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|hAM0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00|27e4", "Atlantic/South_Georgia|-02|20|0||30", "Atlantic/Stanley|-04 -03 -02|40 30 20|01212101010101010101010101010101010101010101010101010101|wrg0 WL0 1qL0 U10 1tz0 2mN0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1tz0 U10 1tz0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1tz0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qN0 U10 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 U10 1tz0 U10 1tz0 U10|21e2", "Australia/Sydney|AEST AEDT|-a0 -b0|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|4r40 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 14o0 1o00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 11A0 1o00 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0|40e5", "Australia/Adelaide|ACST ACDT|-9u -au|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|4r4u LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 Oo0 1zc0 WM0 1qM0 Rc0 1zc0 U00 1tA0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0|11e5", "Australia/Brisbane|AEST AEDT|-a0 -b0|010101010|4r40 LA0 H1A0 Oo0 1zc0 Oo0 1zc0 Oo0|20e5", "Australia/Broken_Hill|ACST ACDT|-9u -au|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|4r4u LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 14o0 1o00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0|18e3", "Australia/Currie|AEST AEDT|-a0 -b0|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|4r40 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0|746", "Australia/Darwin|ACST|-9u|0||12e4", "Australia/Eucla|+0845 +0945|-8J -9J|0101010101010|bHRf Oo0 l5A0 Oo0 iJA0 G00 zU00 IM0 1qM0 11A0 1o00 11A0|368", "Australia/Hobart|AEDT AEST|-b0 -a0|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|qg0 1wo0 U00 1wo0 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0|21e4", "Australia/Lord_Howe|AEST +1030 +1130 +11|-a0 -au -bu -b0|01212121213131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313|raC0 1zdu Rb0 1zd0 On0 1zd0 On0 1zd0 On0 1zd0 TXu 1qMu WLu 1tAu WLu 1tAu TXu 1tAu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu 11zu 1o0u 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 11Au 1nXu 1qMu 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 1qMu 11zu 1o0u WLu 1qMu 14nu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu|347", "Australia/Lindeman|AEST AEDT|-a0 -b0|0101010101010|4r40 LA0 H1A0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0|10", "Australia/Melbourne|AEST AEDT|-a0 -b0|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|4r40 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1qM0 11A0 1tA0 U00 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 11A0 1o00 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0|39e5", "Australia/Perth|AWST AWDT|-80 -90|0101010101010|bHS0 Oo0 l5A0 Oo0 iJA0 G00 zU00 IM0 1qM0 11A0 1o00 11A0|18e5", "Europe/Brussels|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|hDB0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00|21e5", "Pacific/Easter|-06 -07 -05|60 70 50|010101010101010101010101020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202|yP0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 2pA0 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0|30e2", "EET|EET EEST|-20 -30|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|hDB0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00|", "Europe/Dublin|IST GMT|-10 0|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|4re0 U00 1tA0 U00 1tA0 U00 1tA0 U00 1tA0 WM0 1qM0 WM0 1qM0 WM0 1tA0 U00 1tA0 U00 1tA0 11z0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00|12e5", "Etc/GMT-1|+01|-10|0||", "Pacific/Guadalcanal|+11|-b0|0||11e4", "Pacific/Tarawa|+12|-c0|0||29e3", "Etc/GMT-13|+13|-d0|0||", "Etc/GMT-14|+14|-e0|0||", "Etc/GMT-2|+02|-20|0||", "Indian/Maldives|+05|-50|0||35e4", "Pacific/Palau|+09|-90|0||21e3", "Etc/GMT+1|-01|10|0||", "Pacific/Tahiti|-10|a0|0||18e4", "Etc/GMT+11|-11|b0|0||", "Etc/GMT+12|-12|c0|0||", "Etc/GMT+5|-05|50|0||", "Etc/GMT+6|-06|60|0||", "Etc/GMT+7|-07|70|0||", "Etc/GMT+8|-08|80|0||", "Pacific/Gambier|-09|90|0||125", "Etc/UTC|UTC|0|0||", "Europe/Andorra|CET CEST|-10 -20|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|B7d0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00|79e3", "Europe/Astrakhan|+04 +05 +03|-40 -50 -30|0101010101010101020202020202020202020202020202020202020202020|rn80 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|10e5", "Europe/Athens|EET EEST|-20 -30|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|cOK0 1vc0 SO0 1cM0 1a00 1ao0 1fc0 1a10 1fG0 1cg0 1dX0 1bX0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00|35e5", "Europe/London|BST GMT|-10 0|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|4re0 U00 1tA0 U00 1tA0 U00 1tA0 U00 1tA0 WM0 1qM0 WM0 1qM0 WM0 1tA0 U00 1tA0 U00 1tA0 11z0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00|10e6", "Europe/Belgrade|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|wdd0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00|12e5", "Europe/Prague|CET CEST|-10 -20|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|muN0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00|13e5", "Europe/Bucharest|EET EEST|-20 -30|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|mRa0 On0 1fA0 1a10 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cK0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cL0 1cN0 1cL0 1fB0 1nX0 11E0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00|19e5", "Europe/Budapest|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|oXc0 1a10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00|17e5", "Europe/Zurich|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|rm10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00|38e4", "Europe/Chisinau|MSK MSD EEST EET|-30 -40 -30 -20|010101010101010101012323232323232323232323232323232323232323232323232323232323232323232323232323232323|rn90 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 gL0 WO0 1cM0 1cM0 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1nX0 11D0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00|67e4", "Europe/Gibraltar|CET CEST|-10 -20|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|tLB0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00|30e3", "Europe/Helsinki|EET EEST|-20 -30|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|rm00 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00|12e5", "Europe/Kaliningrad|MSK MSD EEST EET +03|-30 -40 -30 -20 -30|010101010101010102323232323232323232323232323232323232323232343|rn90 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|44e4", "Europe/Kiev|MSK MSD EEST EET|-30 -40 -30 -20|0101010101010101010123232323232323232323232323232323232323232323232323232323232323232323232323232323|rn90 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 Db0 3220 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cQ0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00|34e5", "Europe/Kirov|+04 +05 +03|-40 -50 -30|010101010101010102020202020202020202020202020202020202020202|rn80 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|48e4", "Europe/Lisbon|CET WET WEST CEST|-10 0 -10 -20|01212121212121212121212121212121203030302121212121212121212121212121212121212121212121212121212121212121212121|go00 1cM0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00|27e5", "Europe/Madrid|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|apy0 1a10 1fz0 1a10 19X0 1cN0 1fz0 1a10 1fC0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00|62e5", "Europe/Malta|CET CEST|-10 -20|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|XX0 LA0 1zc0 Oo0 1C00 Oo0 1co0 1cM0 1lA0 Xc0 1qq0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1iN0 19z0 1fB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00|42e4", "Europe/Minsk|MSK MSD EEST EET +03|-30 -40 -30 -20 -30|010101010101010101023232323232323232323232323232323232323234|rn90 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 3Fc0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0|19e5", "Europe/Paris|CET CEST|-10 -20|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|fbc0 1cL0 1fC0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00|11e6", "Europe/Moscow|MSK MSD EEST EET MSK|-30 -40 -30 -20 -40|0101010101010101010102301010101010101010101010101010101010101040|rn90 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|16e6", "Europe/Riga|MSK MSD EEST EET|-30 -40 -30 -20|010101010101010102323232323232323232323232323232323232323232323232323232323232323232323232323232323|rn90 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 1o00 11A0 1o00 11A0 1qM0 3oo0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00|64e4", "Europe/Rome|CET CEST|-10 -20|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|XX0 LA0 1zc0 Oo0 1C00 Oo0 1C00 LA0 1zc0 Oo0 1C00 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1zc0 Oo0 1fC0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00|39e5", "Europe/Samara|+04 +05 +03|-40 -50 -30|01010101010101010202010101010101010101010101010101010101020|rn80 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 2y10 14m0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|12e5", "Europe/Saratov|+04 +05 +03|-40 -50 -30|0101010101010102020202020202020202020202020202020202020202020|rn80 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1cM0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 5810|", "Europe/Simferopol|MSK MSD EET EEST MSK|-30 -40 -20 -30 -40|0101010101010101010232323101010323232323232323232323232323232323240|rn90 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Q00 4eL0 1cL0 1cN0 1cL0 1cN0 dX0 WL0 1cN0 1cL0 1fB0 1o30 11B0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11z0 1nW0|33e4", "Europe/Sofia|EET EEST|-20 -30|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|muJ0 1dd0 1fb0 1ap0 1fb0 1a20 1fy0 1a30 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1nX0 11E0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00|12e5", "Europe/Tallinn|MSK MSD EEST EET|-30 -40 -30 -20|0101010101010101023232323232323232323232323232323232323232323232323232323232323232323232323232323|rn90 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o10 11A0 1qM0 5QM0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00|41e4", "Europe/Tirane|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|axz0 10n0 1op0 11z0 1pd0 11z0 1qN0 WL0 1qp0 Xb0 1qp0 Xb0 1qp0 11z0 1lB0 11z0 1qN0 11z0 1iN0 16n0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00|42e4", "Europe/Ulyanovsk|+04 +05 +03 +02|-40 -50 -30 -20|010101010101010102023202020202020202020202020202020202020202020|rn80 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|13e5", "Europe/Uzhgorod|MSK MSD CET EET EEST|-30 -40 -10 -20 -30|010101010101010101023434343434343434343434343434343434343434343434343434343434343434343434343434343|rn90 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Q00 1Nf0 2pw0 1cL0 1cN0 1cL0 1cN0 1cL0 1cQ0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00|11e4", "Europe/Vienna|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|oXb0 19X0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00|18e5", "Europe/Vilnius|MSK MSD EEST EET CEST CET|-30 -40 -30 -20 -20 -10|01010101010101010232323232323232323454323232323232323232323232323232323232323232323232323232323|rn90 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11B0 1o00 11A0 1qM0 8io0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00|54e4", "Europe/Volgograd|+04 +05 +03|-40 -50 -30|0101010101010102020202020202020202020202020202020202020202020|rn80 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1cM0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 9Jd0|10e5", "Europe/Warsaw|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|hDA0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00|17e5", "Europe/Zaporozhye|MSK MSD EEST EET|-30 -40 -30 -20|01010101010101010101023232323232323232323232323232323232323232323232323232323232323232323232323232323|rn90 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cK0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cQ0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00|77e4", "Pacific/Honolulu|HST|a0|0||37e4", "Indian/Chagos|+05 +06|-50 -60|01|13ij0|30e2", "Indian/Mauritius|+04 +05|-40 -50|01010|v5U0 14L0 12kr0 11z0|15e4", "Pacific/Kwajalein|-12 +12|c0 -c0|01|Vxo0|14e3", "MET|MET MEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|hDB0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00|", "Pacific/Chatham|+1245 +1345|-cJ -dJ|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|bKC0 IM0 1C00 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1qM0 14o0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1io0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00|600", "Pacific/Apia|-11 -10 +14 +13|b0 a0 -e0 -d0|0101232323232323232323232323232323232323232|1Dbn0 1ff0 1a00 CI0 AQ0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00|37e3", "Pacific/Bougainville|+10 +11|-a0 -b0|01|1NwE0|18e4", "Pacific/Efate|+11 +12|-b0 -c0|010101010101010101010|xpN0 1cL0 1oN0 10L0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 Lz0 1Nd0 An0|66e3", "Pacific/Enderbury|-12 -11 +13|c0 b0 -d0|012|nIc0 B7X0|1", "Pacific/Fakaofo|-11 +13|b0 -d0|01|1Gfn0|483", "Pacific/Fiji|+12 +13|-c0 -d0|010101010101010101010101010101010101010101010101|1ace0 LA0 1EM0 IM0 nJc0 LA0 1o00 Rc0 1wo0 Ao0 1Nc0 Ao0 1Q00 xz0 1SN0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 20o0 pc0 20o0 s00 20o0 pc0 20o0 pc0 20o0 pc0 20o0 pc0 20o0 s00 1VA0 s00 20o0 pc0 20o0 pc0 20o0 pc0 20o0|88e4", "Pacific/Galapagos|-05 -06|50 60|0101|CVF0 gNd0 rz0|25e3", "Pacific/Guam|GST GDT ChST|-a0 -b0 -a0|010101010102|JQ0 Rb0 1wp0 Rb0 5xd0 rX0 5sN0 zb1 1C0X On0 ULb0|17e4", "Pacific/Kiritimati|-1040 -10 +14|aE a0 -e0|012|nIaE B7Xk|51e2", "Pacific/Kosrae|+12 +11|-c0 -b0|01|1aAA0|66e2", "Pacific/Marquesas|-0930|9u|0||86e2", "Pacific/Pago_Pago|SST|b0|0||37e2", "Pacific/Nauru|+1130 +12|-bu -c0|01|maCu|10e3", "Pacific/Niue|-1130 -11|bu b0|01|libu|12e2", "Pacific/Norfolk|+1130 +1230 +11 +12|-bu -cu -b0 -c0|010232323232323232323232323|bHOu Oo0 1COo0 9Jcu 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0|25e4", "Pacific/Noumea|+11 +12|-b0 -c0|0101010|jhp0 xX0 1PB0 yn0 HeP0 Ao0|98e3", "Pacific/Pitcairn|-0830 -08|8u 80|01|18Vku|56", "Pacific/Rarotonga|-1030 -0930 -10|au 9u a0|012121212121212121212121212|lyWu IL0 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu Onu|13e3", "Pacific/Tongatapu|+13 +14|-d0 -e0|010101010|1csd0 15A0 1wo0 xz0 1Q10 xz0 zWN0 s00|75e3", "WET|WET WEST|0 -10|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|hDB0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00|" ], "links": [ "Africa/Abidjan|Africa/Accra", "Africa/Abidjan|Africa/Bamako", "Africa/Abidjan|Africa/Banjul", "Africa/Abidjan|Africa/Conakry", "Africa/Abidjan|Africa/Dakar", "Africa/Abidjan|Africa/Freetown", "Africa/Abidjan|Africa/Lome", "Africa/Abidjan|Africa/Nouakchott", "Africa/Abidjan|Africa/Ouagadougou", "Africa/Abidjan|Africa/Timbuktu", "Africa/Abidjan|Atlantic/Reykjavik", "Africa/Abidjan|Atlantic/St_Helena", "Africa/Abidjan|Etc/GMT", "Africa/Abidjan|Etc/GMT+0", "Africa/Abidjan|Etc/GMT-0", "Africa/Abidjan|Etc/GMT0", "Africa/Abidjan|Etc/Greenwich", "Africa/Abidjan|GMT", "Africa/Abidjan|GMT+0", "Africa/Abidjan|GMT-0", "Africa/Abidjan|GMT0", "Africa/Abidjan|Greenwich", "Africa/Abidjan|Iceland", "Africa/Cairo|Egypt", "Africa/Johannesburg|Africa/Maseru", "Africa/Johannesburg|Africa/Mbabane", "Africa/Lagos|Africa/Bangui", "Africa/Lagos|Africa/Brazzaville", "Africa/Lagos|Africa/Douala", "Africa/Lagos|Africa/Kinshasa", "Africa/Lagos|Africa/Libreville", "Africa/Lagos|Africa/Luanda", "Africa/Lagos|Africa/Malabo", "Africa/Lagos|Africa/Niamey", "Africa/Lagos|Africa/Porto-Novo", "Africa/Maputo|Africa/Blantyre", "Africa/Maputo|Africa/Bujumbura", "Africa/Maputo|Africa/Gaborone", "Africa/Maputo|Africa/Harare", "Africa/Maputo|Africa/Kigali", "Africa/Maputo|Africa/Lubumbashi", "Africa/Maputo|Africa/Lusaka", "Africa/Nairobi|Africa/Addis_Ababa", "Africa/Nairobi|Africa/Asmara", "Africa/Nairobi|Africa/Asmera", "Africa/Nairobi|Africa/Dar_es_Salaam", "Africa/Nairobi|Africa/Djibouti", "Africa/Nairobi|Africa/Kampala", "Africa/Nairobi|Africa/Mogadishu", "Africa/Nairobi|Indian/Antananarivo", "Africa/Nairobi|Indian/Comoro", "Africa/Nairobi|Indian/Mayotte", "Africa/Tripoli|Libya", "America/Adak|America/Atka", "America/Adak|US/Aleutian", "America/Anchorage|US/Alaska", "America/Argentina/Buenos_Aires|America/Buenos_Aires", "America/Argentina/Catamarca|America/Argentina/ComodRivadavia", "America/Argentina/Catamarca|America/Catamarca", "America/Argentina/Cordoba|America/Cordoba", "America/Argentina/Cordoba|America/Rosario", "America/Argentina/Jujuy|America/Jujuy", "America/Argentina/Mendoza|America/Mendoza", "America/Cayenne|Etc/GMT+3", "America/Chicago|CST6CDT", "America/Chicago|US/Central", "America/Denver|America/Shiprock", "America/Denver|MST7MDT", "America/Denver|Navajo", "America/Denver|US/Mountain", "America/Detroit|US/Michigan", "America/Edmonton|Canada/Mountain", "America/Fort_Wayne|America/Indiana/Indianapolis", "America/Fort_Wayne|America/Indianapolis", "America/Fort_Wayne|US/East-Indiana", "America/Halifax|Canada/Atlantic", "America/Havana|Cuba", "America/Indiana/Knox|America/Knox_IN", "America/Indiana/Knox|US/Indiana-Starke", "America/Jamaica|Jamaica", "America/Kentucky/Louisville|America/Louisville", "America/La_Paz|Etc/GMT+4", "America/Los_Angeles|PST8PDT", "America/Los_Angeles|US/Pacific", "America/Los_Angeles|US/Pacific-New", "America/Manaus|Brazil/West", "America/Mazatlan|Mexico/BajaSur", "America/Mexico_City|Mexico/General", "America/New_York|EST5EDT", "America/New_York|US/Eastern", "America/Noronha|Brazil/DeNoronha", "America/Panama|America/Atikokan", "America/Panama|America/Cayman", "America/Panama|America/Coral_Harbour", "America/Panama|EST", "America/Phoenix|America/Creston", "America/Phoenix|MST", "America/Phoenix|US/Arizona", "America/Puerto_Rico|America/Anguilla", "America/Puerto_Rico|America/Antigua", "America/Puerto_Rico|America/Aruba", "America/Puerto_Rico|America/Blanc-Sablon", "America/Puerto_Rico|America/Curacao", "America/Puerto_Rico|America/Dominica", "America/Puerto_Rico|America/Grenada", "America/Puerto_Rico|America/Guadeloupe", "America/Puerto_Rico|America/Kralendijk", "America/Puerto_Rico|America/Lower_Princes", "America/Puerto_Rico|America/Marigot", "America/Puerto_Rico|America/Montserrat", "America/Puerto_Rico|America/Port_of_Spain", "America/Puerto_Rico|America/St_Barthelemy", "America/Puerto_Rico|America/St_Kitts", "America/Puerto_Rico|America/St_Lucia", "America/Puerto_Rico|America/St_Thomas", "America/Puerto_Rico|America/St_Vincent", "America/Puerto_Rico|America/Tortola", "America/Puerto_Rico|America/Virgin", "America/Regina|Canada/Saskatchewan", "America/Rio_Branco|America/Porto_Acre", "America/Rio_Branco|Brazil/Acre", "America/Santiago|Chile/Continental", "America/Sao_Paulo|Brazil/East", "America/St_Johns|Canada/Newfoundland", "America/Tijuana|America/Ensenada", "America/Tijuana|America/Santa_Isabel", "America/Tijuana|Mexico/BajaNorte", "America/Toronto|America/Montreal", "America/Toronto|America/Nassau", "America/Toronto|Canada/Eastern", "America/Vancouver|Canada/Pacific", "America/Whitehorse|Canada/Yukon", "America/Winnipeg|Canada/Central", "Asia/Ashgabat|Asia/Ashkhabad", "Asia/Bangkok|Asia/Phnom_Penh", "Asia/Bangkok|Asia/Vientiane", "Asia/Bangkok|Etc/GMT-7", "Asia/Bangkok|Indian/Christmas", "Asia/Brunei|Asia/Kuching", "Asia/Brunei|Etc/GMT-8", "Asia/Dhaka|Asia/Dacca", "Asia/Dubai|Asia/Muscat", "Asia/Dubai|Etc/GMT-4", "Asia/Dubai|Indian/Mahe", "Asia/Dubai|Indian/Reunion", "Asia/Ho_Chi_Minh|Asia/Saigon", "Asia/Hong_Kong|Hongkong", "Asia/Jerusalem|Asia/Tel_Aviv", "Asia/Jerusalem|Israel", "Asia/Kathmandu|Asia/Katmandu", "Asia/Kolkata|Asia/Calcutta", "Asia/Kuala_Lumpur|Asia/Singapore", "Asia/Kuala_Lumpur|Singapore", "Asia/Macau|Asia/Macao", "Asia/Makassar|Asia/Ujung_Pandang", "Asia/Nicosia|Europe/Nicosia", "Asia/Qatar|Asia/Bahrain", "Asia/Rangoon|Asia/Yangon", "Asia/Rangoon|Indian/Cocos", "Asia/Riyadh|Antarctica/Syowa", "Asia/Riyadh|Asia/Aden", "Asia/Riyadh|Asia/Kuwait", "Asia/Riyadh|Etc/GMT-3", "Asia/Seoul|ROK", "Asia/Shanghai|Asia/Chongqing", "Asia/Shanghai|Asia/Chungking", "Asia/Shanghai|Asia/Harbin", "Asia/Shanghai|PRC", "Asia/Taipei|ROC", "Asia/Tehran|Iran", "Asia/Thimphu|Asia/Thimbu", "Asia/Tokyo|Japan", "Asia/Ulaanbaatar|Asia/Ulan_Bator", "Asia/Urumqi|Antarctica/Vostok", "Asia/Urumqi|Asia/Kashgar", "Asia/Urumqi|Etc/GMT-6", "Atlantic/Faroe|Atlantic/Faeroe", "Atlantic/South_Georgia|Etc/GMT+2", "Australia/Adelaide|Australia/South", "Australia/Brisbane|Australia/Queensland", "Australia/Broken_Hill|Australia/Yancowinna", "Australia/Darwin|Australia/North", "Australia/Hobart|Australia/Tasmania", "Australia/Lord_Howe|Australia/LHI", "Australia/Melbourne|Australia/Victoria", "Australia/Perth|Australia/West", "Australia/Sydney|Australia/ACT", "Australia/Sydney|Australia/Canberra", "Australia/Sydney|Australia/NSW", "Etc/UTC|Etc/UCT", "Etc/UTC|Etc/Universal", "Etc/UTC|Etc/Zulu", "Etc/UTC|UCT", "Etc/UTC|UTC", "Etc/UTC|Universal", "Etc/UTC|Zulu", "Europe/Belgrade|Europe/Ljubljana", "Europe/Belgrade|Europe/Podgorica", "Europe/Belgrade|Europe/Sarajevo", "Europe/Belgrade|Europe/Skopje", "Europe/Belgrade|Europe/Zagreb", "Europe/Berlin|Arctic/Longyearbyen", "Europe/Berlin|Atlantic/Jan_Mayen", "Europe/Berlin|Europe/Copenhagen", "Europe/Berlin|Europe/Oslo", "Europe/Berlin|Europe/Stockholm", "Europe/Brussels|CET", "Europe/Brussels|Europe/Amsterdam", "Europe/Brussels|Europe/Luxembourg", "Europe/Chisinau|Europe/Tiraspol", "Europe/Dublin|Eire", "Europe/Helsinki|Europe/Mariehamn", "Europe/Istanbul|Asia/Istanbul", "Europe/Istanbul|Turkey", "Europe/Lisbon|Portugal", "Europe/London|Europe/Belfast", "Europe/London|Europe/Guernsey", "Europe/London|Europe/Isle_of_Man", "Europe/London|Europe/Jersey", "Europe/London|GB", "Europe/London|GB-Eire", "Europe/Moscow|W-SU", "Europe/Paris|Europe/Monaco", "Europe/Prague|Europe/Bratislava", "Europe/Rome|Europe/San_Marino", "Europe/Rome|Europe/Vatican", "Europe/Warsaw|Poland", "Europe/Zurich|Europe/Busingen", "Europe/Zurich|Europe/Vaduz", "Indian/Maldives|Etc/GMT-5", "Indian/Maldives|Indian/Kerguelen", "Pacific/Auckland|Antarctica/McMurdo", "Pacific/Auckland|Antarctica/South_Pole", "Pacific/Auckland|NZ", "Pacific/Chatham|NZ-CHAT", "Pacific/Easter|Chile/EasterIsland", "Pacific/Gambier|Etc/GMT+9", "Pacific/Guadalcanal|Etc/GMT-11", "Pacific/Guadalcanal|Pacific/Pohnpei", "Pacific/Guadalcanal|Pacific/Ponape", "Pacific/Guam|Pacific/Saipan", "Pacific/Honolulu|HST", "Pacific/Honolulu|Pacific/Johnston", "Pacific/Honolulu|US/Hawaii", "Pacific/Kwajalein|Kwajalein", "Pacific/Pago_Pago|Pacific/Midway", "Pacific/Pago_Pago|Pacific/Samoa", "Pacific/Pago_Pago|US/Samoa", "Pacific/Palau|Etc/GMT-9", "Pacific/Port_Moresby|Antarctica/DumontDUrville", "Pacific/Port_Moresby|Etc/GMT-10", "Pacific/Port_Moresby|Pacific/Chuuk", "Pacific/Port_Moresby|Pacific/Truk", "Pacific/Port_Moresby|Pacific/Yap", "Pacific/Tahiti|Etc/GMT+10", "Pacific/Tarawa|Etc/GMT-12", "Pacific/Tarawa|Pacific/Funafuti", "Pacific/Tarawa|Pacific/Majuro", "Pacific/Tarawa|Pacific/Wake", "Pacific/Tarawa|Pacific/Wallis" ], "countries": [ "AD|Europe/Andorra", "AE|Asia/Dubai", "AF|Asia/Kabul", "AG|America/Port_of_Spain America/Antigua", "AI|America/Port_of_Spain America/Anguilla", "AL|Europe/Tirane", "AM|Asia/Yerevan", "AO|Africa/Lagos Africa/Luanda", "AQ|Antarctica/Casey Antarctica/Davis Antarctica/DumontDUrville Antarctica/Mawson Antarctica/Palmer Antarctica/Rothera Antarctica/Syowa Antarctica/Troll Antarctica/Vostok Pacific/Auckland Antarctica/McMurdo", "AR|America/Argentina/Buenos_Aires America/Argentina/Cordoba America/Argentina/Salta America/Argentina/Jujuy America/Argentina/Tucuman America/Argentina/Catamarca America/Argentina/La_Rioja America/Argentina/San_Juan America/Argentina/Mendoza America/Argentina/San_Luis America/Argentina/Rio_Gallegos America/Argentina/Ushuaia", "AS|Pacific/Pago_Pago", "AT|Europe/Vienna", "AU|Australia/Lord_Howe Antarctica/Macquarie Australia/Hobart Australia/Currie Australia/Melbourne Australia/Sydney Australia/Broken_Hill Australia/Brisbane Australia/Lindeman Australia/Adelaide Australia/Darwin Australia/Perth Australia/Eucla", "AW|America/Curacao America/Aruba", "AX|Europe/Helsinki Europe/Mariehamn", "AZ|Asia/Baku", "BA|Europe/Belgrade Europe/Sarajevo", "BB|America/Barbados", "BD|Asia/Dhaka", "BE|Europe/Brussels", "BF|Africa/Abidjan Africa/Ouagadougou", "BG|Europe/Sofia", "BH|Asia/Qatar Asia/Bahrain", "BI|Africa/Maputo Africa/Bujumbura", "BJ|Africa/Lagos Africa/Porto-Novo", "BL|America/Port_of_Spain America/St_Barthelemy", "BM|Atlantic/Bermuda", "BN|Asia/Brunei", "BO|America/La_Paz", "BQ|America/Curacao America/Kralendijk", "BR|America/Noronha America/Belem America/Fortaleza America/Recife America/Araguaina America/Maceio America/Bahia America/Sao_Paulo America/Campo_Grande America/Cuiaba America/Santarem America/Porto_Velho America/Boa_Vista America/Manaus America/Eirunepe America/Rio_Branco", "BS|America/Nassau", "BT|Asia/Thimphu", "BW|Africa/Maputo Africa/Gaborone", "BY|Europe/Minsk", "BZ|America/Belize", "CA|America/St_Johns America/Halifax America/Glace_Bay America/Moncton America/Goose_Bay America/Blanc-Sablon America/Toronto America/Nipigon America/Thunder_Bay America/Iqaluit America/Pangnirtung America/Atikokan America/Winnipeg America/Rainy_River America/Resolute America/Rankin_Inlet America/Regina America/Swift_Current America/Edmonton America/Cambridge_Bay America/Yellowknife America/Inuvik America/Creston America/Dawson_Creek America/Fort_Nelson America/Vancouver America/Whitehorse America/Dawson", "CC|Indian/Cocos", "CD|Africa/Maputo Africa/Lagos Africa/Kinshasa Africa/Lubumbashi", "CF|Africa/Lagos Africa/Bangui", "CG|Africa/Lagos Africa/Brazzaville", "CH|Europe/Zurich", "CI|Africa/Abidjan", "CK|Pacific/Rarotonga", "CL|America/Santiago America/Punta_Arenas Pacific/Easter", "CM|Africa/Lagos Africa/Douala", "CN|Asia/Shanghai Asia/Urumqi", "CO|America/Bogota", "CR|America/Costa_Rica", "CU|America/Havana", "CV|Atlantic/Cape_Verde", "CW|America/Curacao", "CX|Indian/Christmas", "CY|Asia/Nicosia Asia/Famagusta", "CZ|Europe/Prague", "DE|Europe/Zurich Europe/Berlin Europe/Busingen", "DJ|Africa/Nairobi Africa/Djibouti", "DK|Europe/Copenhagen", "DM|America/Port_of_Spain America/Dominica", "DO|America/Santo_Domingo", "DZ|Africa/Algiers", "EC|America/Guayaquil Pacific/Galapagos", "EE|Europe/Tallinn", "EG|Africa/Cairo", "EH|Africa/El_Aaiun", "ER|Africa/Nairobi Africa/Asmara", "ES|Europe/Madrid Africa/Ceuta Atlantic/Canary", "ET|Africa/Nairobi Africa/Addis_Ababa", "FI|Europe/Helsinki", "FJ|Pacific/Fiji", "FK|Atlantic/Stanley", "FM|Pacific/Chuuk Pacific/Pohnpei Pacific/Kosrae", "FO|Atlantic/Faroe", "FR|Europe/Paris", "GA|Africa/Lagos Africa/Libreville", "GB|Europe/London", "GD|America/Port_of_Spain America/Grenada", "GE|Asia/Tbilisi", "GF|America/Cayenne", "GG|Europe/London Europe/Guernsey", "GH|Africa/Accra", "GI|Europe/Gibraltar", "GL|America/Godthab America/Danmarkshavn America/Scoresbysund America/Thule", "GM|Africa/Abidjan Africa/Banjul", "GN|Africa/Abidjan Africa/Conakry", "GP|America/Port_of_Spain America/Guadeloupe", "GQ|Africa/Lagos Africa/Malabo", "GR|Europe/Athens", "GS|Atlantic/South_Georgia", "GT|America/Guatemala", "GU|Pacific/Guam", "GW|Africa/Bissau", "GY|America/Guyana", "HK|Asia/Hong_Kong", "HN|America/Tegucigalpa", "HR|Europe/Belgrade Europe/Zagreb", "HT|America/Port-au-Prince", "HU|Europe/Budapest", "ID|Asia/Jakarta Asia/Pontianak Asia/Makassar Asia/Jayapura", "IE|Europe/Dublin", "IL|Asia/Jerusalem", "IM|Europe/London Europe/Isle_of_Man", "IN|Asia/Kolkata", "IO|Indian/Chagos", "IQ|Asia/Baghdad", "IR|Asia/Tehran", "IS|Atlantic/Reykjavik", "IT|Europe/Rome", "JE|Europe/London Europe/Jersey", "JM|America/Jamaica", "JO|Asia/Amman", "JP|Asia/Tokyo", "KE|Africa/Nairobi", "KG|Asia/Bishkek", "KH|Asia/Bangkok Asia/Phnom_Penh", "KI|Pacific/Tarawa Pacific/Enderbury Pacific/Kiritimati", "KM|Africa/Nairobi Indian/Comoro", "KN|America/Port_of_Spain America/St_Kitts", "KP|Asia/Pyongyang", "KR|Asia/Seoul", "KW|Asia/Riyadh Asia/Kuwait", "KY|America/Panama America/Cayman", "KZ|Asia/Almaty Asia/Qyzylorda Asia/Qostanay Asia/Aqtobe Asia/Aqtau Asia/Atyrau Asia/Oral", "LA|Asia/Bangkok Asia/Vientiane", "LB|Asia/Beirut", "LC|America/Port_of_Spain America/St_Lucia", "LI|Europe/Zurich Europe/Vaduz", "LK|Asia/Colombo", "LR|Africa/Monrovia", "LS|Africa/Johannesburg Africa/Maseru", "LT|Europe/Vilnius", "LU|Europe/Luxembourg", "LV|Europe/Riga", "LY|Africa/Tripoli", "MA|Africa/Casablanca", "MC|Europe/Monaco", "MD|Europe/Chisinau", "ME|Europe/Belgrade Europe/Podgorica", "MF|America/Port_of_Spain America/Marigot", "MG|Africa/Nairobi Indian/Antananarivo", "MH|Pacific/Majuro Pacific/Kwajalein", "MK|Europe/Belgrade Europe/Skopje", "ML|Africa/Abidjan Africa/Bamako", "MM|Asia/Yangon", "MN|Asia/Ulaanbaatar Asia/Hovd Asia/Choibalsan", "MO|Asia/Macau", "MP|Pacific/Guam Pacific/Saipan", "MQ|America/Martinique", "MR|Africa/Abidjan Africa/Nouakchott", "MS|America/Port_of_Spain America/Montserrat", "MT|Europe/Malta", "MU|Indian/Mauritius", "MV|Indian/Maldives", "MW|Africa/Maputo Africa/Blantyre", "MX|America/Mexico_City America/Cancun America/Merida America/Monterrey America/Matamoros America/Mazatlan America/Chihuahua America/Ojinaga America/Hermosillo America/Tijuana America/Bahia_Banderas", "MY|Asia/Kuala_Lumpur Asia/Kuching", "MZ|Africa/Maputo", "NA|Africa/Windhoek", "NC|Pacific/Noumea", "NE|Africa/Lagos Africa/Niamey", "NF|Pacific/Norfolk", "NG|Africa/Lagos", "NI|America/Managua", "NL|Europe/Amsterdam", "NO|Europe/Oslo", "NP|Asia/Kathmandu", "NR|Pacific/Nauru", "NU|Pacific/Niue", "NZ|Pacific/Auckland Pacific/Chatham", "OM|Asia/Dubai Asia/Muscat", "PA|America/Panama", "PE|America/Lima", "PF|Pacific/Tahiti Pacific/Marquesas Pacific/Gambier", "PG|Pacific/Port_Moresby Pacific/Bougainville", "PH|Asia/Manila", "PK|Asia/Karachi", "PL|Europe/Warsaw", "PM|America/Miquelon", "PN|Pacific/Pitcairn", "PR|America/Puerto_Rico", "PS|Asia/Gaza Asia/Hebron", "PT|Europe/Lisbon Atlantic/Madeira Atlantic/Azores", "PW|Pacific/Palau", "PY|America/Asuncion", "QA|Asia/Qatar", "RE|Indian/Reunion", "RO|Europe/Bucharest", "RS|Europe/Belgrade", "RU|Europe/Kaliningrad Europe/Moscow Europe/Simferopol Europe/Kirov Europe/Astrakhan Europe/Volgograd Europe/Saratov Europe/Ulyanovsk Europe/Samara Asia/Yekaterinburg Asia/Omsk Asia/Novosibirsk Asia/Barnaul Asia/Tomsk Asia/Novokuznetsk Asia/Krasnoyarsk Asia/Irkutsk Asia/Chita Asia/Yakutsk Asia/Khandyga Asia/Vladivostok Asia/Ust-Nera Asia/Magadan Asia/Sakhalin Asia/Srednekolymsk Asia/Kamchatka Asia/Anadyr", "RW|Africa/Maputo Africa/Kigali", "SA|Asia/Riyadh", "SB|Pacific/Guadalcanal", "SC|Indian/Mahe", "SD|Africa/Khartoum", "SE|Europe/Stockholm", "SG|Asia/Singapore", "SH|Africa/Abidjan Atlantic/St_Helena", "SI|Europe/Belgrade Europe/Ljubljana", "SJ|Europe/Oslo Arctic/Longyearbyen", "SK|Europe/Prague Europe/Bratislava", "SL|Africa/Abidjan Africa/Freetown", "SM|Europe/Rome Europe/San_Marino", "SN|Africa/Abidjan Africa/Dakar", "SO|Africa/Nairobi Africa/Mogadishu", "SR|America/Paramaribo", "SS|Africa/Juba", "ST|Africa/Sao_Tome", "SV|America/El_Salvador", "SX|America/Curacao America/Lower_Princes", "SY|Asia/Damascus", "SZ|Africa/Johannesburg Africa/Mbabane", "TC|America/Grand_Turk", "TD|Africa/Ndjamena", "TF|Indian/Reunion Indian/Kerguelen", "TG|Africa/Abidjan Africa/Lome", "TH|Asia/Bangkok", "TJ|Asia/Dushanbe", "TK|Pacific/Fakaofo", "TL|Asia/Dili", "TM|Asia/Ashgabat", "TN|Africa/Tunis", "TO|Pacific/Tongatapu", "TR|Europe/Istanbul", "TT|America/Port_of_Spain", "TV|Pacific/Funafuti", "TW|Asia/Taipei", "TZ|Africa/Nairobi Africa/Dar_es_Salaam", "UA|Europe/Simferopol Europe/Kiev Europe/Uzhgorod Europe/Zaporozhye", "UG|Africa/Nairobi Africa/Kampala", "UM|Pacific/Pago_Pago Pacific/Wake Pacific/Honolulu Pacific/Midway", "US|America/New_York America/Detroit America/Kentucky/Louisville America/Kentucky/Monticello America/Indiana/Indianapolis America/Indiana/Vincennes America/Indiana/Winamac America/Indiana/Marengo America/Indiana/Petersburg America/Indiana/Vevay America/Chicago America/Indiana/Tell_City America/Indiana/Knox America/Menominee America/North_Dakota/Center America/North_Dakota/New_Salem America/North_Dakota/Beulah America/Denver America/Boise America/Phoenix America/Los_Angeles America/Anchorage America/Juneau America/Sitka America/Metlakatla America/Yakutat America/Nome America/Adak Pacific/Honolulu", "UY|America/Montevideo", "UZ|Asia/Samarkand Asia/Tashkent", "VA|Europe/Rome Europe/Vatican", "VC|America/Port_of_Spain America/St_Vincent", "VE|America/Caracas", "VG|America/Port_of_Spain America/Tortola", "VI|America/Port_of_Spain America/St_Thomas", "VN|Asia/Bangkok Asia/Ho_Chi_Minh", "VU|Pacific/Efate", "WF|Pacific/Wallis", "WS|Pacific/Apia", "YE|Asia/Riyadh Asia/Aden", "YT|Africa/Nairobi Indian/Mayotte", "ZA|Africa/Johannesburg", "ZM|Africa/Maputo Africa/Lusaka", "ZW|Africa/Maputo Africa/Harare" ] }); return moment; })); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/moment-timezone/moment-timezone-with-data-2012-2022.js ================================================ //! moment-timezone.js //! version : 0.5.28 //! Copyright (c) JS Foundation and other contributors //! license : MIT //! github.com/moment/moment-timezone (function (root, factory) { "use strict"; /*global define*/ if (typeof module === 'object' && module.exports) { module.exports = factory(require('moment')); // Node } else if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else { factory(root.moment); // Browser } }(this, function (moment) { "use strict"; // Do not load moment-timezone a second time. // if (moment.tz !== undefined) { // logError('Moment Timezone ' + moment.tz.version + ' was already loaded ' + (moment.tz.dataVersion ? 'with data from ' : 'without any data') + moment.tz.dataVersion); // return moment; // } var VERSION = "0.5.28", zones = {}, links = {}, countries = {}, names = {}, guesses = {}, cachedGuess; if (!moment || typeof moment.version !== 'string') { logError('Moment Timezone requires Moment.js. See https://momentjs.com/timezone/docs/#/use-it/browser/'); } var momentVersion = moment.version.split('.'), major = +momentVersion[0], minor = +momentVersion[1]; // Moment.js version check if (major < 2 || (major === 2 && minor < 6)) { logError('Moment Timezone requires Moment.js >= 2.6.0. You are using Moment.js ' + moment.version + '. See momentjs.com'); } /************************************ Unpacking ************************************/ function charCodeToInt(charCode) { if (charCode > 96) { return charCode - 87; } else if (charCode > 64) { return charCode - 29; } return charCode - 48; } function unpackBase60(string) { var i = 0, parts = string.split('.'), whole = parts[0], fractional = parts[1] || '', multiplier = 1, num, out = 0, sign = 1; // handle negative numbers if (string.charCodeAt(0) === 45) { i = 1; sign = -1; } // handle digits before the decimal for (i; i < whole.length; i++) { num = charCodeToInt(whole.charCodeAt(i)); out = 60 * out + num; } // handle digits after the decimal for (i = 0; i < fractional.length; i++) { multiplier = multiplier / 60; num = charCodeToInt(fractional.charCodeAt(i)); out += num * multiplier; } return out * sign; } function arrayToInt (array) { for (var i = 0; i < array.length; i++) { array[i] = unpackBase60(array[i]); } } function intToUntil (array, length) { for (var i = 0; i < length; i++) { array[i] = Math.round((array[i - 1] || 0) + (array[i] * 60000)); // minutes to milliseconds } array[length - 1] = Infinity; } function mapIndices (source, indices) { var out = [], i; for (i = 0; i < indices.length; i++) { out[i] = source[indices[i]]; } return out; } function unpack (string) { var data = string.split('|'), offsets = data[2].split(' '), indices = data[3].split(''), untils = data[4].split(' '); arrayToInt(offsets); arrayToInt(indices); arrayToInt(untils); intToUntil(untils, indices.length); return { name : data[0], abbrs : mapIndices(data[1].split(' '), indices), offsets : mapIndices(offsets, indices), untils : untils, population : data[5] | 0 }; } /************************************ Zone object ************************************/ function Zone (packedString) { if (packedString) { this._set(unpack(packedString)); } } Zone.prototype = { _set : function (unpacked) { this.name = unpacked.name; this.abbrs = unpacked.abbrs; this.untils = unpacked.untils; this.offsets = unpacked.offsets; this.population = unpacked.population; }, _index : function (timestamp) { var target = +timestamp, untils = this.untils, i; for (i = 0; i < untils.length; i++) { if (target < untils[i]) { return i; } } }, countries : function () { var zone_name = this.name; return Object.keys(countries).filter(function (country_code) { return countries[country_code].zones.indexOf(zone_name) !== -1; }); }, parse : function (timestamp) { var target = +timestamp, offsets = this.offsets, untils = this.untils, max = untils.length - 1, offset, offsetNext, offsetPrev, i; for (i = 0; i < max; i++) { offset = offsets[i]; offsetNext = offsets[i + 1]; offsetPrev = offsets[i ? i - 1 : i]; if (offset < offsetNext && tz.moveAmbiguousForward) { offset = offsetNext; } else if (offset > offsetPrev && tz.moveInvalidForward) { offset = offsetPrev; } if (target < untils[i] - (offset * 60000)) { return offsets[i]; } } return offsets[max]; }, abbr : function (mom) { return this.abbrs[this._index(mom)]; }, offset : function (mom) { logError("zone.offset has been deprecated in favor of zone.utcOffset"); return this.offsets[this._index(mom)]; }, utcOffset : function (mom) { return this.offsets[this._index(mom)]; } }; /************************************ Country object ************************************/ function Country (country_name, zone_names) { this.name = country_name; this.zones = zone_names; } /************************************ Current Timezone ************************************/ function OffsetAt(at) { var timeString = at.toTimeString(); var abbr = timeString.match(/\([a-z ]+\)/i); if (abbr && abbr[0]) { // 17:56:31 GMT-0600 (CST) // 17:56:31 GMT-0600 (Central Standard Time) abbr = abbr[0].match(/[A-Z]/g); abbr = abbr ? abbr.join('') : undefined; } else { // 17:56:31 CST // 17:56:31 GMT+0800 (台北標準時間) abbr = timeString.match(/[A-Z]{3,5}/g); abbr = abbr ? abbr[0] : undefined; } if (abbr === 'GMT') { abbr = undefined; } this.at = +at; this.abbr = abbr; this.offset = at.getTimezoneOffset(); } function ZoneScore(zone) { this.zone = zone; this.offsetScore = 0; this.abbrScore = 0; } ZoneScore.prototype.scoreOffsetAt = function (offsetAt) { this.offsetScore += Math.abs(this.zone.utcOffset(offsetAt.at) - offsetAt.offset); if (this.zone.abbr(offsetAt.at).replace(/[^A-Z]/g, '') !== offsetAt.abbr) { this.abbrScore++; } }; function findChange(low, high) { var mid, diff; while ((diff = ((high.at - low.at) / 12e4 | 0) * 6e4)) { mid = new OffsetAt(new Date(low.at + diff)); if (mid.offset === low.offset) { low = mid; } else { high = mid; } } return low; } function userOffsets() { var startYear = new Date().getFullYear() - 2, last = new OffsetAt(new Date(startYear, 0, 1)), offsets = [last], change, next, i; for (i = 1; i < 48; i++) { next = new OffsetAt(new Date(startYear, i, 1)); if (next.offset !== last.offset) { change = findChange(last, next); offsets.push(change); offsets.push(new OffsetAt(new Date(change.at + 6e4))); } last = next; } for (i = 0; i < 4; i++) { offsets.push(new OffsetAt(new Date(startYear + i, 0, 1))); offsets.push(new OffsetAt(new Date(startYear + i, 6, 1))); } return offsets; } function sortZoneScores (a, b) { if (a.offsetScore !== b.offsetScore) { return a.offsetScore - b.offsetScore; } if (a.abbrScore !== b.abbrScore) { return a.abbrScore - b.abbrScore; } if (a.zone.population !== b.zone.population) { return b.zone.population - a.zone.population; } return b.zone.name.localeCompare(a.zone.name); } function addToGuesses (name, offsets) { var i, offset; arrayToInt(offsets); for (i = 0; i < offsets.length; i++) { offset = offsets[i]; guesses[offset] = guesses[offset] || {}; guesses[offset][name] = true; } } function guessesForUserOffsets (offsets) { var offsetsLength = offsets.length, filteredGuesses = {}, out = [], i, j, guessesOffset; for (i = 0; i < offsetsLength; i++) { guessesOffset = guesses[offsets[i].offset] || {}; for (j in guessesOffset) { if (guessesOffset.hasOwnProperty(j)) { filteredGuesses[j] = true; } } } for (i in filteredGuesses) { if (filteredGuesses.hasOwnProperty(i)) { out.push(names[i]); } } return out; } function rebuildGuess () { // use Intl API when available and returning valid time zone try { var intlName = Intl.DateTimeFormat().resolvedOptions().timeZone; if (intlName && intlName.length > 3) { var name = names[normalizeName(intlName)]; if (name) { return name; } logError("Moment Timezone found " + intlName + " from the Intl api, but did not have that data loaded."); } } catch (e) { // Intl unavailable, fall back to manual guessing. } var offsets = userOffsets(), offsetsLength = offsets.length, guesses = guessesForUserOffsets(offsets), zoneScores = [], zoneScore, i, j; for (i = 0; i < guesses.length; i++) { zoneScore = new ZoneScore(getZone(guesses[i]), offsetsLength); for (j = 0; j < offsetsLength; j++) { zoneScore.scoreOffsetAt(offsets[j]); } zoneScores.push(zoneScore); } zoneScores.sort(sortZoneScores); return zoneScores.length > 0 ? zoneScores[0].zone.name : undefined; } function guess (ignoreCache) { if (!cachedGuess || ignoreCache) { cachedGuess = rebuildGuess(); } return cachedGuess; } /************************************ Global Methods ************************************/ function normalizeName (name) { return (name || '').toLowerCase().replace(/\//g, '_'); } function addZone (packed) { var i, name, split, normalized; if (typeof packed === "string") { packed = [packed]; } for (i = 0; i < packed.length; i++) { split = packed[i].split('|'); name = split[0]; normalized = normalizeName(name); zones[normalized] = packed[i]; names[normalized] = name; addToGuesses(normalized, split[2].split(' ')); } } function getZone (name, caller) { name = normalizeName(name); var zone = zones[name]; var link; if (zone instanceof Zone) { return zone; } if (typeof zone === 'string') { zone = new Zone(zone); zones[name] = zone; return zone; } // Pass getZone to prevent recursion more than 1 level deep if (links[name] && caller !== getZone && (link = getZone(links[name], getZone))) { zone = zones[name] = new Zone(); zone._set(link); zone.name = names[name]; return zone; } return null; } function getNames () { var i, out = []; for (i in names) { if (names.hasOwnProperty(i) && (zones[i] || zones[links[i]]) && names[i]) { out.push(names[i]); } } return out.sort(); } function getCountryNames () { return Object.keys(countries); } function addLink (aliases) { var i, alias, normal0, normal1; if (typeof aliases === "string") { aliases = [aliases]; } for (i = 0; i < aliases.length; i++) { alias = aliases[i].split('|'); normal0 = normalizeName(alias[0]); normal1 = normalizeName(alias[1]); links[normal0] = normal1; names[normal0] = alias[0]; links[normal1] = normal0; names[normal1] = alias[1]; } } function addCountries (data) { var i, country_code, country_zones, split; if (!data || !data.length) return; for (i = 0; i < data.length; i++) { split = data[i].split('|'); country_code = split[0].toUpperCase(); country_zones = split[1].split(' '); countries[country_code] = new Country( country_code, country_zones ); } } function getCountry (name) { name = name.toUpperCase(); return countries[name] || null; } function zonesForCountry(country, with_offset) { country = getCountry(country); if (!country) return null; var zones = country.zones.sort(); if (with_offset) { return zones.map(function (zone_name) { var zone = getZone(zone_name); return { name: zone_name, offset: zone.utcOffset(new Date()) }; }); } return zones; } function loadData (data) { addZone(data.zones); addLink(data.links); addCountries(data.countries); tz.dataVersion = data.version; } function zoneExists (name) { if (!zoneExists.didShowError) { zoneExists.didShowError = true; logError("moment.tz.zoneExists('" + name + "') has been deprecated in favor of !moment.tz.zone('" + name + "')"); } return !!getZone(name); } function needsOffset (m) { var isUnixTimestamp = (m._f === 'X' || m._f === 'x'); return !!(m._a && (m._tzm === undefined) && !isUnixTimestamp); } function logError (message) { if (typeof console !== 'undefined' && typeof console.error === 'function') { console.error(message); } } /************************************ moment.tz namespace ************************************/ function tz (input) { var args = Array.prototype.slice.call(arguments, 0, -1), name = arguments[arguments.length - 1], zone = getZone(name), out = moment.utc.apply(null, args); if (zone && !moment.isMoment(input) && needsOffset(out)) { out.add(zone.parse(out), 'minutes'); } out.tz(name); return out; } tz.version = VERSION; tz.dataVersion = ''; tz._zones = zones; tz._links = links; tz._names = names; tz._countries = countries; tz.add = addZone; tz.link = addLink; tz.load = loadData; tz.zone = getZone; tz.zoneExists = zoneExists; // deprecated in 0.1.0 tz.guess = guess; tz.names = getNames; tz.Zone = Zone; tz.unpack = unpack; tz.unpackBase60 = unpackBase60; tz.needsOffset = needsOffset; tz.moveInvalidForward = true; tz.moveAmbiguousForward = false; tz.countries = getCountryNames; tz.zonesForCountry = zonesForCountry; /************************************ Interface with Moment.js ************************************/ var fn = moment.fn; moment.tz = tz; moment.defaultZone = null; moment.updateOffset = function (mom, keepTime) { var zone = moment.defaultZone, offset; if (mom._z === undefined) { if (zone && needsOffset(mom) && !mom._isUTC) { mom._d = moment.utc(mom._a)._d; mom.utc().add(zone.parse(mom), 'minutes'); } mom._z = zone; } if (mom._z) { offset = mom._z.utcOffset(mom); if (Math.abs(offset) < 16) { offset = offset / 60; } if (mom.utcOffset !== undefined) { var z = mom._z; mom.utcOffset(-offset, keepTime); mom._z = z; } else { mom.zone(offset, keepTime); } } }; fn.tz = function (name, keepTime) { if (name) { if (typeof name !== 'string') { throw new Error('Time zone name must be a string, got ' + name + ' [' + typeof name + ']'); } this._z = getZone(name); if (this._z) { moment.updateOffset(this, keepTime); } else { logError("Moment Timezone has no data for " + name + ". See http://momentjs.com/timezone/docs/#/data-loading/."); } return this; } if (this._z) { return this._z.name; } }; function abbrWrap (old) { return function () { if (this._z) { return this._z.abbr(this); } return old.call(this); }; } function resetZoneWrap (old) { return function () { this._z = null; return old.apply(this, arguments); }; } function resetZoneWrap2 (old) { return function () { if (arguments.length > 0) this._z = null; return old.apply(this, arguments); }; } fn.zoneName = abbrWrap(fn.zoneName); fn.zoneAbbr = abbrWrap(fn.zoneAbbr); fn.utc = resetZoneWrap(fn.utc); fn.local = resetZoneWrap(fn.local); fn.utcOffset = resetZoneWrap2(fn.utcOffset); moment.tz.setDefault = function(name) { if (major < 2 || (major === 2 && minor < 9)) { logError('Moment Timezone setDefault() requires Moment.js >= 2.9.0. You are using Moment.js ' + moment.version + '.'); } moment.defaultZone = name ? getZone(name) : null; return moment; }; // Cloning a moment should include the _z property. var momentProperties = moment.momentProperties; if (Object.prototype.toString.call(momentProperties) === '[object Array]') { // moment 2.8.1+ momentProperties.push('_z'); momentProperties.push('_a'); } else if (momentProperties) { // moment 2.7.0 momentProperties._z = null; } loadData({ "version": "2019c", "zones": [ "Africa/Abidjan|GMT|0|0||48e5", "Africa/Nairobi|EAT|-30|0||47e5", "Africa/Algiers|CET|-10|0||26e5", "Africa/Lagos|WAT|-10|0||17e6", "Africa/Maputo|CAT|-20|0||26e5", "Africa/Cairo|EET EEST|-20 -30|01010|1M2m0 gL0 e10 mn0|15e6", "Africa/Casablanca|+00 +01|0 -10|010101010101010101010101010101010101|1H3C0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 28M0 e00 2600 e00 28M0 e00 2600 gM0|32e5", "Europe/Paris|CET CEST|-10 -20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|11e6", "Africa/Johannesburg|SAST|-20|0||84e5", "Africa/Khartoum|EAT CAT|-30 -20|01|1Usl0|51e5", "Africa/Sao_Tome|GMT WAT|0 -10|010|1UQN0 2q00|", "Africa/Tripoli|EET CET CEST|-20 -10 -20|0120|1IlA0 TA0 1o00|11e5", "Africa/Windhoek|CAT WAT|-20 -10|0101010101010|1GQo0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0|32e4", "America/Adak|HST HDT|a0 90|01010101010101010101010|1GIc0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|326", "America/Anchorage|AKST AKDT|90 80|01010101010101010101010|1GIb0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|30e4", "America/Santo_Domingo|AST|40|0||29e5", "America/Araguaina|-03 -02|30 20|010|1IdD0 Lz0|14e4", "America/Fortaleza|-03|30|0||34e5", "America/Asuncion|-03 -04|30 40|01010101010101010101010|1GTf0 1cN0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0|28e5", "America/Panama|EST|50|0||15e5", "America/Mexico_City|CST CDT|60 50|01010101010101010101010|1GQw0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|20e6", "America/Bahia|-02 -03|20 30|01|1GCq0|27e5", "America/Managua|CST|60|0||22e5", "America/La_Paz|-04|40|0||19e5", "America/Lima|-05|50|0||11e6", "America/Denver|MST MDT|70 60|01010101010101010101010|1GI90 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|26e5", "America/Campo_Grande|-03 -04|30 40|0101010101010101|1GCr0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|77e4", "America/Cancun|CST CDT EST|60 50 50|01010102|1GQw0 1nX0 14p0 1lb0 14p0 1lb0 Dd0|63e4", "America/Caracas|-0430 -04|4u 40|01|1QMT0|29e5", "America/Chicago|CST CDT|60 50|01010101010101010101010|1GI80 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|92e5", "America/Chihuahua|MST MDT|70 60|01010101010101010101010|1GQx0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|81e4", "America/Phoenix|MST|70|0||42e5", "America/Los_Angeles|PST PDT|80 70|01010101010101010101010|1GIa0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|15e6", "America/New_York|EST EDT|50 40|01010101010101010101010|1GI70 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|21e6", "America/Rio_Branco|-04 -05|40 50|01|1KLE0|31e4", "America/Fort_Nelson|PST PDT MST|80 70 70|01010102|1GIa0 1zb0 Op0 1zb0 Op0 1zb0 Op0|39e2", "America/Halifax|AST ADT|40 30|01010101010101010101010|1GI60 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|39e4", "America/Godthab|-03 -02|30 20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|17e3", "America/Grand_Turk|EST EDT AST|50 40 40|0101010121010101010|1GI70 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 5Ip0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|37e2", "America/Havana|CST CDT|50 40|01010101010101010101010|1GQt0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0|21e5", "America/Metlakatla|PST AKST AKDT|80 90 80|01212120121212121|1PAa0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 uM0 jB0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|14e2", "America/Miquelon|-03 -02|30 20|01010101010101010101010|1GI50 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|61e2", "America/Montevideo|-02 -03|20 30|01010101|1GI40 1o10 11z0 1o10 11z0 1o10 11z0|17e5", "America/Noronha|-02|20|0||30e2", "America/Port-au-Prince|EST EDT|50 40|010101010101010101010|1GI70 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 3iN0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|23e5", "Antarctica/Palmer|-03 -04|30 40|010101010|1H3D0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0|40", "America/Santiago|-03 -04|30 40|010101010101010101010|1H3D0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0|62e5", "America/Sao_Paulo|-02 -03|20 30|0101010101010101|1GCq0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|20e6", "Atlantic/Azores|-01 +00|10 0|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|25e4", "America/St_Johns|NST NDT|3u 2u|01010101010101010101010|1GI5u 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|11e4", "Antarctica/Casey|+11 +08|-b0 -80|0101|1GAF0 blz0 3m10|10", "Antarctica/Davis|+05 +07|-50 -70|01|1GAI0|70", "Pacific/Port_Moresby|+10|-a0|0||25e4", "Pacific/Guadalcanal|+11|-b0|0||11e4", "Asia/Tashkent|+05|-50|0||23e5", "Pacific/Auckland|NZDT NZST|-d0 -c0|01010101010101010101010|1GQe0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00|14e5", "Asia/Baghdad|+03|-30|0||66e5", "Antarctica/Troll|+00 +02|0 -20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|40", "Asia/Dhaka|+06|-60|0||16e6", "Asia/Amman|EET EEST|-20 -30|010101010101010101010|1GPy0 4bX0 Dd0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00|25e5", "Asia/Kamchatka|+12|-c0|0||18e4", "Asia/Baku|+04 +05|-40 -50|010101010|1GNA0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e5", "Asia/Bangkok|+07|-70|0||15e6", "Asia/Barnaul|+07 +06|-70 -60|010|1N7v0 3rd0|", "Asia/Beirut|EET EEST|-20 -30|01010101010101010101010|1GNy0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0|22e5", "Asia/Kuala_Lumpur|+08|-80|0||71e5", "Asia/Kolkata|IST|-5u|0||15e6", "Asia/Chita|+10 +08 +09|-a0 -80 -90|012|1N7s0 3re0|33e4", "Asia/Ulaanbaatar|+08 +09|-80 -90|01010|1O8G0 1cJ0 1cP0 1cJ0|12e5", "Asia/Shanghai|CST|-80|0||23e6", "Asia/Colombo|+0530|-5u|0||22e5", "Asia/Damascus|EET EEST|-20 -30|01010101010101010101010|1GPy0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0|26e5", "Asia/Dili|+09|-90|0||19e4", "Asia/Dubai|+04|-40|0||39e5", "Asia/Famagusta|EET EEST +03|-20 -30 -30|0101010101201010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 15U0 2Ks0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|", "Asia/Gaza|EET EEST|-20 -30|01010101010101010101010|1GPy0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nz0 1220 1qL0 WN0 1qL0 WN0 1qL0 11c0 1oo0 11c0 1rc0 Wo0 1rc0 Wo0 1rc0|18e5", "Asia/Hong_Kong|HKT|-80|0||73e5", "Asia/Hovd|+07 +08|-70 -80|01010|1O8H0 1cJ0 1cP0 1cJ0|81e3", "Asia/Irkutsk|+09 +08|-90 -80|01|1N7t0|60e4", "Europe/Istanbul|EET EEST +03|-20 -30 -30|01010101012|1GNB0 1qM0 11A0 1o00 1200 1nA0 11A0 1tA0 U00 15w0|13e6", "Asia/Jakarta|WIB|-70|0||31e6", "Asia/Jayapura|WIT|-90|0||26e4", "Asia/Jerusalem|IST IDT|-20 -30|01010101010101010101010|1GPA0 1aL0 1eN0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0|81e4", "Asia/Kabul|+0430|-4u|0||46e5", "Asia/Karachi|PKT|-50|0||24e6", "Asia/Kathmandu|+0545|-5J|0||12e5", "Asia/Yakutsk|+10 +09|-a0 -90|01|1N7s0|28e4", "Asia/Krasnoyarsk|+08 +07|-80 -70|01|1N7u0|10e5", "Asia/Magadan|+12 +10 +11|-c0 -a0 -b0|012|1N7q0 3Cq0|95e3", "Asia/Makassar|WITA|-80|0||15e5", "Asia/Manila|PST|-80|0||24e6", "Europe/Athens|EET EEST|-20 -30|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|35e5", "Asia/Novosibirsk|+07 +06|-70 -60|010|1N7v0 4eN0|15e5", "Asia/Omsk|+07 +06|-70 -60|01|1N7v0|12e5", "Asia/Pyongyang|KST KST|-90 -8u|010|1P4D0 6BA0|29e5", "Asia/Qyzylorda|+06 +05|-60 -50|01|1Xei0|73e4", "Asia/Rangoon|+0630|-6u|0||48e5", "Asia/Sakhalin|+11 +10|-b0 -a0|010|1N7r0 3rd0|58e4", "Asia/Seoul|KST|-90|0||23e6", "Asia/Srednekolymsk|+12 +11|-c0 -b0|01|1N7q0|35e2", "Asia/Tehran|+0330 +0430|-3u -4u|01010101010101010101010|1GLUu 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0|14e6", "Asia/Tokyo|JST|-90|0||38e6", "Asia/Tomsk|+07 +06|-70 -60|010|1N7v0 3Qp0|10e5", "Asia/Vladivostok|+11 +10|-b0 -a0|01|1N7r0|60e4", "Asia/Yekaterinburg|+06 +05|-60 -50|01|1N7w0|14e5", "Europe/Lisbon|WET WEST|0 -10|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|27e5", "Atlantic/Cape_Verde|-01|10|0||50e4", "Australia/Sydney|AEDT AEST|-b0 -a0|01010101010101010101010|1GQg0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|40e5", "Australia/Adelaide|ACDT ACST|-au -9u|01010101010101010101010|1GQgu 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|11e5", "Australia/Brisbane|AEST|-a0|0||20e5", "Australia/Darwin|ACST|-9u|0||12e4", "Australia/Eucla|+0845|-8J|0||368", "Australia/Lord_Howe|+11 +1030|-b0 -au|01010101010101010101010|1GQf0 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu|347", "Australia/Perth|AWST|-80|0||18e5", "Pacific/Easter|-05 -06|50 60|010101010101010101010|1H3D0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0|30e2", "Europe/Dublin|GMT IST|0 -10|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|12e5", "Etc/GMT-1|+01|-10|0||", "Pacific/Fakaofo|+13|-d0|0||483", "Pacific/Kiritimati|+14|-e0|0||51e2", "Etc/GMT-2|+02|-20|0||", "Pacific/Tahiti|-10|a0|0||18e4", "Pacific/Niue|-11|b0|0||12e2", "Etc/GMT+12|-12|c0|0||", "Pacific/Galapagos|-06|60|0||25e3", "Etc/GMT+7|-07|70|0||", "Pacific/Pitcairn|-08|80|0||56", "Pacific/Gambier|-09|90|0||125", "Etc/UTC|UTC|0|0||", "Europe/Ulyanovsk|+04 +03|-40 -30|010|1N7y0 3rd0|13e5", "Europe/London|GMT BST|0 -10|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|10e6", "Europe/Chisinau|EET EEST|-20 -30|01010101010101010101010|1GNA0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|67e4", "Europe/Kaliningrad|+03 EET|-30 -20|01|1N7z0|44e4", "Europe/Kirov|+04 +03|-40 -30|01|1N7y0|48e4", "Europe/Moscow|MSK MSK|-40 -30|01|1N7y0|16e6", "Europe/Saratov|+04 +03|-40 -30|010|1N7y0 5810|", "Europe/Simferopol|EET EEST MSK MSK|-20 -30 -40 -30|0101023|1GNB0 1qM0 11A0 1o00 11z0 1nW0|33e4", "Europe/Volgograd|+04 +03|-40 -30|010|1N7y0 9Jd0|10e5", "Pacific/Honolulu|HST|a0|0||37e4", "MET|MET MEST|-10 -20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|", "Pacific/Chatham|+1345 +1245|-dJ -cJ|01010101010101010101010|1GQe0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00|600", "Pacific/Apia|+14 +13|-e0 -d0|01010101010101010101010|1GQe0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00|37e3", "Pacific/Bougainville|+10 +11|-a0 -b0|01|1NwE0|18e4", "Pacific/Fiji|+13 +12|-d0 -c0|01010101010101010101010|1Goe0 1Nc0 Ao0 1Q00 xz0 1SN0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 20o0 pc0 20o0 s00 20o0 pc0 20o0|88e4", "Pacific/Guam|ChST|-a0|0||17e4", "Pacific/Marquesas|-0930|9u|0||86e2", "Pacific/Pago_Pago|SST|b0|0||37e2", "Pacific/Norfolk|+1130 +11 +12|-bu -b0 -c0|012121212|1PoCu 9Jcu 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|25e4", "Pacific/Tongatapu|+13 +14|-d0 -e0|010|1S4d0 s00|75e3" ], "links": [ "Africa/Abidjan|Africa/Accra", "Africa/Abidjan|Africa/Bamako", "Africa/Abidjan|Africa/Banjul", "Africa/Abidjan|Africa/Bissau", "Africa/Abidjan|Africa/Conakry", "Africa/Abidjan|Africa/Dakar", "Africa/Abidjan|Africa/Freetown", "Africa/Abidjan|Africa/Lome", "Africa/Abidjan|Africa/Monrovia", "Africa/Abidjan|Africa/Nouakchott", "Africa/Abidjan|Africa/Ouagadougou", "Africa/Abidjan|Africa/Timbuktu", "Africa/Abidjan|America/Danmarkshavn", "Africa/Abidjan|Atlantic/Reykjavik", "Africa/Abidjan|Atlantic/St_Helena", "Africa/Abidjan|Etc/GMT", "Africa/Abidjan|Etc/GMT+0", "Africa/Abidjan|Etc/GMT-0", "Africa/Abidjan|Etc/GMT0", "Africa/Abidjan|Etc/Greenwich", "Africa/Abidjan|GMT", "Africa/Abidjan|GMT+0", "Africa/Abidjan|GMT-0", "Africa/Abidjan|GMT0", "Africa/Abidjan|Greenwich", "Africa/Abidjan|Iceland", "Africa/Algiers|Africa/Tunis", "Africa/Cairo|Egypt", "Africa/Casablanca|Africa/El_Aaiun", "Africa/Johannesburg|Africa/Maseru", "Africa/Johannesburg|Africa/Mbabane", "Africa/Lagos|Africa/Bangui", "Africa/Lagos|Africa/Brazzaville", "Africa/Lagos|Africa/Douala", "Africa/Lagos|Africa/Kinshasa", "Africa/Lagos|Africa/Libreville", "Africa/Lagos|Africa/Luanda", "Africa/Lagos|Africa/Malabo", "Africa/Lagos|Africa/Ndjamena", "Africa/Lagos|Africa/Niamey", "Africa/Lagos|Africa/Porto-Novo", "Africa/Maputo|Africa/Blantyre", "Africa/Maputo|Africa/Bujumbura", "Africa/Maputo|Africa/Gaborone", "Africa/Maputo|Africa/Harare", "Africa/Maputo|Africa/Kigali", "Africa/Maputo|Africa/Lubumbashi", "Africa/Maputo|Africa/Lusaka", "Africa/Nairobi|Africa/Addis_Ababa", "Africa/Nairobi|Africa/Asmara", "Africa/Nairobi|Africa/Asmera", "Africa/Nairobi|Africa/Dar_es_Salaam", "Africa/Nairobi|Africa/Djibouti", "Africa/Nairobi|Africa/Juba", "Africa/Nairobi|Africa/Kampala", "Africa/Nairobi|Africa/Mogadishu", "Africa/Nairobi|Indian/Antananarivo", "Africa/Nairobi|Indian/Comoro", "Africa/Nairobi|Indian/Mayotte", "Africa/Tripoli|Libya", "America/Adak|America/Atka", "America/Adak|US/Aleutian", "America/Anchorage|America/Juneau", "America/Anchorage|America/Nome", "America/Anchorage|America/Sitka", "America/Anchorage|America/Yakutat", "America/Anchorage|US/Alaska", "America/Campo_Grande|America/Cuiaba", "America/Chicago|America/Indiana/Knox", "America/Chicago|America/Indiana/Tell_City", "America/Chicago|America/Knox_IN", "America/Chicago|America/Matamoros", "America/Chicago|America/Menominee", "America/Chicago|America/North_Dakota/Beulah", "America/Chicago|America/North_Dakota/Center", "America/Chicago|America/North_Dakota/New_Salem", "America/Chicago|America/Rainy_River", "America/Chicago|America/Rankin_Inlet", "America/Chicago|America/Resolute", "America/Chicago|America/Winnipeg", "America/Chicago|CST6CDT", "America/Chicago|Canada/Central", "America/Chicago|US/Central", "America/Chicago|US/Indiana-Starke", "America/Chihuahua|America/Mazatlan", "America/Chihuahua|Mexico/BajaSur", "America/Denver|America/Boise", "America/Denver|America/Cambridge_Bay", "America/Denver|America/Edmonton", "America/Denver|America/Inuvik", "America/Denver|America/Ojinaga", "America/Denver|America/Shiprock", "America/Denver|America/Yellowknife", "America/Denver|Canada/Mountain", "America/Denver|MST7MDT", "America/Denver|Navajo", "America/Denver|US/Mountain", "America/Fortaleza|America/Argentina/Buenos_Aires", "America/Fortaleza|America/Argentina/Catamarca", "America/Fortaleza|America/Argentina/ComodRivadavia", "America/Fortaleza|America/Argentina/Cordoba", "America/Fortaleza|America/Argentina/Jujuy", "America/Fortaleza|America/Argentina/La_Rioja", "America/Fortaleza|America/Argentina/Mendoza", "America/Fortaleza|America/Argentina/Rio_Gallegos", "America/Fortaleza|America/Argentina/Salta", "America/Fortaleza|America/Argentina/San_Juan", "America/Fortaleza|America/Argentina/San_Luis", "America/Fortaleza|America/Argentina/Tucuman", "America/Fortaleza|America/Argentina/Ushuaia", "America/Fortaleza|America/Belem", "America/Fortaleza|America/Buenos_Aires", "America/Fortaleza|America/Catamarca", "America/Fortaleza|America/Cayenne", "America/Fortaleza|America/Cordoba", "America/Fortaleza|America/Jujuy", "America/Fortaleza|America/Maceio", "America/Fortaleza|America/Mendoza", "America/Fortaleza|America/Paramaribo", "America/Fortaleza|America/Recife", "America/Fortaleza|America/Rosario", "America/Fortaleza|America/Santarem", "America/Fortaleza|Antarctica/Rothera", "America/Fortaleza|Atlantic/Stanley", "America/Fortaleza|Etc/GMT+3", "America/Halifax|America/Glace_Bay", "America/Halifax|America/Goose_Bay", "America/Halifax|America/Moncton", "America/Halifax|America/Thule", "America/Halifax|Atlantic/Bermuda", "America/Halifax|Canada/Atlantic", "America/Havana|Cuba", "America/La_Paz|America/Boa_Vista", "America/La_Paz|America/Guyana", "America/La_Paz|America/Manaus", "America/La_Paz|America/Porto_Velho", "America/La_Paz|Brazil/West", "America/La_Paz|Etc/GMT+4", "America/Lima|America/Bogota", "America/Lima|America/Guayaquil", "America/Lima|Etc/GMT+5", "America/Los_Angeles|America/Dawson", "America/Los_Angeles|America/Ensenada", "America/Los_Angeles|America/Santa_Isabel", "America/Los_Angeles|America/Tijuana", "America/Los_Angeles|America/Vancouver", "America/Los_Angeles|America/Whitehorse", "America/Los_Angeles|Canada/Pacific", "America/Los_Angeles|Canada/Yukon", "America/Los_Angeles|Mexico/BajaNorte", "America/Los_Angeles|PST8PDT", "America/Los_Angeles|US/Pacific", "America/Los_Angeles|US/Pacific-New", "America/Managua|America/Belize", "America/Managua|America/Costa_Rica", "America/Managua|America/El_Salvador", "America/Managua|America/Guatemala", "America/Managua|America/Regina", "America/Managua|America/Swift_Current", "America/Managua|America/Tegucigalpa", "America/Managua|Canada/Saskatchewan", "America/Mexico_City|America/Bahia_Banderas", "America/Mexico_City|America/Merida", "America/Mexico_City|America/Monterrey", "America/Mexico_City|Mexico/General", "America/New_York|America/Detroit", "America/New_York|America/Fort_Wayne", "America/New_York|America/Indiana/Indianapolis", "America/New_York|America/Indiana/Marengo", "America/New_York|America/Indiana/Petersburg", "America/New_York|America/Indiana/Vevay", "America/New_York|America/Indiana/Vincennes", "America/New_York|America/Indiana/Winamac", "America/New_York|America/Indianapolis", "America/New_York|America/Iqaluit", "America/New_York|America/Kentucky/Louisville", "America/New_York|America/Kentucky/Monticello", "America/New_York|America/Louisville", "America/New_York|America/Montreal", "America/New_York|America/Nassau", "America/New_York|America/Nipigon", "America/New_York|America/Pangnirtung", "America/New_York|America/Thunder_Bay", "America/New_York|America/Toronto", "America/New_York|Canada/Eastern", "America/New_York|EST5EDT", "America/New_York|US/East-Indiana", "America/New_York|US/Eastern", "America/New_York|US/Michigan", "America/Noronha|Atlantic/South_Georgia", "America/Noronha|Brazil/DeNoronha", "America/Noronha|Etc/GMT+2", "America/Panama|America/Atikokan", "America/Panama|America/Cayman", "America/Panama|America/Coral_Harbour", "America/Panama|America/Jamaica", "America/Panama|EST", "America/Panama|Jamaica", "America/Phoenix|America/Creston", "America/Phoenix|America/Dawson_Creek", "America/Phoenix|America/Hermosillo", "America/Phoenix|MST", "America/Phoenix|US/Arizona", "America/Rio_Branco|America/Eirunepe", "America/Rio_Branco|America/Porto_Acre", "America/Rio_Branco|Brazil/Acre", "America/Santiago|Chile/Continental", "America/Santo_Domingo|America/Anguilla", "America/Santo_Domingo|America/Antigua", "America/Santo_Domingo|America/Aruba", "America/Santo_Domingo|America/Barbados", "America/Santo_Domingo|America/Blanc-Sablon", "America/Santo_Domingo|America/Curacao", "America/Santo_Domingo|America/Dominica", "America/Santo_Domingo|America/Grenada", "America/Santo_Domingo|America/Guadeloupe", "America/Santo_Domingo|America/Kralendijk", "America/Santo_Domingo|America/Lower_Princes", "America/Santo_Domingo|America/Marigot", "America/Santo_Domingo|America/Martinique", "America/Santo_Domingo|America/Montserrat", "America/Santo_Domingo|America/Port_of_Spain", "America/Santo_Domingo|America/Puerto_Rico", "America/Santo_Domingo|America/St_Barthelemy", "America/Santo_Domingo|America/St_Kitts", "America/Santo_Domingo|America/St_Lucia", "America/Santo_Domingo|America/St_Thomas", "America/Santo_Domingo|America/St_Vincent", "America/Santo_Domingo|America/Tortola", "America/Santo_Domingo|America/Virgin", "America/Sao_Paulo|Brazil/East", "America/St_Johns|Canada/Newfoundland", "Antarctica/Palmer|America/Punta_Arenas", "Asia/Baghdad|Antarctica/Syowa", "Asia/Baghdad|Asia/Aden", "Asia/Baghdad|Asia/Bahrain", "Asia/Baghdad|Asia/Kuwait", "Asia/Baghdad|Asia/Qatar", "Asia/Baghdad|Asia/Riyadh", "Asia/Baghdad|Etc/GMT-3", "Asia/Baghdad|Europe/Minsk", "Asia/Bangkok|Asia/Ho_Chi_Minh", "Asia/Bangkok|Asia/Novokuznetsk", "Asia/Bangkok|Asia/Phnom_Penh", "Asia/Bangkok|Asia/Saigon", "Asia/Bangkok|Asia/Vientiane", "Asia/Bangkok|Etc/GMT-7", "Asia/Bangkok|Indian/Christmas", "Asia/Dhaka|Antarctica/Vostok", "Asia/Dhaka|Asia/Almaty", "Asia/Dhaka|Asia/Bishkek", "Asia/Dhaka|Asia/Dacca", "Asia/Dhaka|Asia/Kashgar", "Asia/Dhaka|Asia/Qostanay", "Asia/Dhaka|Asia/Thimbu", "Asia/Dhaka|Asia/Thimphu", "Asia/Dhaka|Asia/Urumqi", "Asia/Dhaka|Etc/GMT-6", "Asia/Dhaka|Indian/Chagos", "Asia/Dili|Etc/GMT-9", "Asia/Dili|Pacific/Palau", "Asia/Dubai|Asia/Muscat", "Asia/Dubai|Asia/Tbilisi", "Asia/Dubai|Asia/Yerevan", "Asia/Dubai|Etc/GMT-4", "Asia/Dubai|Europe/Samara", "Asia/Dubai|Indian/Mahe", "Asia/Dubai|Indian/Mauritius", "Asia/Dubai|Indian/Reunion", "Asia/Gaza|Asia/Hebron", "Asia/Hong_Kong|Hongkong", "Asia/Jakarta|Asia/Pontianak", "Asia/Jerusalem|Asia/Tel_Aviv", "Asia/Jerusalem|Israel", "Asia/Kamchatka|Asia/Anadyr", "Asia/Kamchatka|Etc/GMT-12", "Asia/Kamchatka|Kwajalein", "Asia/Kamchatka|Pacific/Funafuti", "Asia/Kamchatka|Pacific/Kwajalein", "Asia/Kamchatka|Pacific/Majuro", "Asia/Kamchatka|Pacific/Nauru", "Asia/Kamchatka|Pacific/Tarawa", "Asia/Kamchatka|Pacific/Wake", "Asia/Kamchatka|Pacific/Wallis", "Asia/Kathmandu|Asia/Katmandu", "Asia/Kolkata|Asia/Calcutta", "Asia/Kuala_Lumpur|Asia/Brunei", "Asia/Kuala_Lumpur|Asia/Kuching", "Asia/Kuala_Lumpur|Asia/Singapore", "Asia/Kuala_Lumpur|Etc/GMT-8", "Asia/Kuala_Lumpur|Singapore", "Asia/Makassar|Asia/Ujung_Pandang", "Asia/Rangoon|Asia/Yangon", "Asia/Rangoon|Indian/Cocos", "Asia/Seoul|ROK", "Asia/Shanghai|Asia/Chongqing", "Asia/Shanghai|Asia/Chungking", "Asia/Shanghai|Asia/Harbin", "Asia/Shanghai|Asia/Macao", "Asia/Shanghai|Asia/Macau", "Asia/Shanghai|Asia/Taipei", "Asia/Shanghai|PRC", "Asia/Shanghai|ROC", "Asia/Tashkent|Antarctica/Mawson", "Asia/Tashkent|Asia/Aqtau", "Asia/Tashkent|Asia/Aqtobe", "Asia/Tashkent|Asia/Ashgabat", "Asia/Tashkent|Asia/Ashkhabad", "Asia/Tashkent|Asia/Atyrau", "Asia/Tashkent|Asia/Dushanbe", "Asia/Tashkent|Asia/Oral", "Asia/Tashkent|Asia/Samarkand", "Asia/Tashkent|Etc/GMT-5", "Asia/Tashkent|Indian/Kerguelen", "Asia/Tashkent|Indian/Maldives", "Asia/Tehran|Iran", "Asia/Tokyo|Japan", "Asia/Ulaanbaatar|Asia/Choibalsan", "Asia/Ulaanbaatar|Asia/Ulan_Bator", "Asia/Vladivostok|Asia/Ust-Nera", "Asia/Yakutsk|Asia/Khandyga", "Atlantic/Azores|America/Scoresbysund", "Atlantic/Cape_Verde|Etc/GMT+1", "Australia/Adelaide|Australia/Broken_Hill", "Australia/Adelaide|Australia/South", "Australia/Adelaide|Australia/Yancowinna", "Australia/Brisbane|Australia/Lindeman", "Australia/Brisbane|Australia/Queensland", "Australia/Darwin|Australia/North", "Australia/Lord_Howe|Australia/LHI", "Australia/Perth|Australia/West", "Australia/Sydney|Australia/ACT", "Australia/Sydney|Australia/Canberra", "Australia/Sydney|Australia/Currie", "Australia/Sydney|Australia/Hobart", "Australia/Sydney|Australia/Melbourne", "Australia/Sydney|Australia/NSW", "Australia/Sydney|Australia/Tasmania", "Australia/Sydney|Australia/Victoria", "Etc/UTC|Etc/UCT", "Etc/UTC|Etc/Universal", "Etc/UTC|Etc/Zulu", "Etc/UTC|UCT", "Etc/UTC|UTC", "Etc/UTC|Universal", "Etc/UTC|Zulu", "Europe/Athens|Asia/Nicosia", "Europe/Athens|EET", "Europe/Athens|Europe/Bucharest", "Europe/Athens|Europe/Helsinki", "Europe/Athens|Europe/Kiev", "Europe/Athens|Europe/Mariehamn", "Europe/Athens|Europe/Nicosia", "Europe/Athens|Europe/Riga", "Europe/Athens|Europe/Sofia", "Europe/Athens|Europe/Tallinn", "Europe/Athens|Europe/Uzhgorod", "Europe/Athens|Europe/Vilnius", "Europe/Athens|Europe/Zaporozhye", "Europe/Chisinau|Europe/Tiraspol", "Europe/Dublin|Eire", "Europe/Istanbul|Asia/Istanbul", "Europe/Istanbul|Turkey", "Europe/Lisbon|Atlantic/Canary", "Europe/Lisbon|Atlantic/Faeroe", "Europe/Lisbon|Atlantic/Faroe", "Europe/Lisbon|Atlantic/Madeira", "Europe/Lisbon|Portugal", "Europe/Lisbon|WET", "Europe/London|Europe/Belfast", "Europe/London|Europe/Guernsey", "Europe/London|Europe/Isle_of_Man", "Europe/London|Europe/Jersey", "Europe/London|GB", "Europe/London|GB-Eire", "Europe/Moscow|W-SU", "Europe/Paris|Africa/Ceuta", "Europe/Paris|Arctic/Longyearbyen", "Europe/Paris|Atlantic/Jan_Mayen", "Europe/Paris|CET", "Europe/Paris|Europe/Amsterdam", "Europe/Paris|Europe/Andorra", "Europe/Paris|Europe/Belgrade", "Europe/Paris|Europe/Berlin", "Europe/Paris|Europe/Bratislava", "Europe/Paris|Europe/Brussels", "Europe/Paris|Europe/Budapest", "Europe/Paris|Europe/Busingen", "Europe/Paris|Europe/Copenhagen", "Europe/Paris|Europe/Gibraltar", "Europe/Paris|Europe/Ljubljana", "Europe/Paris|Europe/Luxembourg", "Europe/Paris|Europe/Madrid", "Europe/Paris|Europe/Malta", "Europe/Paris|Europe/Monaco", "Europe/Paris|Europe/Oslo", "Europe/Paris|Europe/Podgorica", "Europe/Paris|Europe/Prague", "Europe/Paris|Europe/Rome", "Europe/Paris|Europe/San_Marino", "Europe/Paris|Europe/Sarajevo", "Europe/Paris|Europe/Skopje", "Europe/Paris|Europe/Stockholm", "Europe/Paris|Europe/Tirane", "Europe/Paris|Europe/Vaduz", "Europe/Paris|Europe/Vatican", "Europe/Paris|Europe/Vienna", "Europe/Paris|Europe/Warsaw", "Europe/Paris|Europe/Zagreb", "Europe/Paris|Europe/Zurich", "Europe/Paris|Poland", "Europe/Ulyanovsk|Europe/Astrakhan", "Pacific/Auckland|Antarctica/McMurdo", "Pacific/Auckland|Antarctica/South_Pole", "Pacific/Auckland|NZ", "Pacific/Chatham|NZ-CHAT", "Pacific/Easter|Chile/EasterIsland", "Pacific/Fakaofo|Etc/GMT-13", "Pacific/Fakaofo|Pacific/Enderbury", "Pacific/Galapagos|Etc/GMT+6", "Pacific/Gambier|Etc/GMT+9", "Pacific/Guadalcanal|Antarctica/Macquarie", "Pacific/Guadalcanal|Etc/GMT-11", "Pacific/Guadalcanal|Pacific/Efate", "Pacific/Guadalcanal|Pacific/Kosrae", "Pacific/Guadalcanal|Pacific/Noumea", "Pacific/Guadalcanal|Pacific/Pohnpei", "Pacific/Guadalcanal|Pacific/Ponape", "Pacific/Guam|Pacific/Saipan", "Pacific/Honolulu|HST", "Pacific/Honolulu|Pacific/Johnston", "Pacific/Honolulu|US/Hawaii", "Pacific/Kiritimati|Etc/GMT-14", "Pacific/Niue|Etc/GMT+11", "Pacific/Pago_Pago|Pacific/Midway", "Pacific/Pago_Pago|Pacific/Samoa", "Pacific/Pago_Pago|US/Samoa", "Pacific/Pitcairn|Etc/GMT+8", "Pacific/Port_Moresby|Antarctica/DumontDUrville", "Pacific/Port_Moresby|Etc/GMT-10", "Pacific/Port_Moresby|Pacific/Chuuk", "Pacific/Port_Moresby|Pacific/Truk", "Pacific/Port_Moresby|Pacific/Yap", "Pacific/Tahiti|Etc/GMT+10", "Pacific/Tahiti|Pacific/Rarotonga" ], "countries": [ "AD|Europe/Andorra", "AE|Asia/Dubai", "AF|Asia/Kabul", "AG|America/Port_of_Spain America/Antigua", "AI|America/Port_of_Spain America/Anguilla", "AL|Europe/Tirane", "AM|Asia/Yerevan", "AO|Africa/Lagos Africa/Luanda", "AQ|Antarctica/Casey Antarctica/Davis Antarctica/DumontDUrville Antarctica/Mawson Antarctica/Palmer Antarctica/Rothera Antarctica/Syowa Antarctica/Troll Antarctica/Vostok Pacific/Auckland Antarctica/McMurdo", "AR|America/Argentina/Buenos_Aires America/Argentina/Cordoba America/Argentina/Salta America/Argentina/Jujuy America/Argentina/Tucuman America/Argentina/Catamarca America/Argentina/La_Rioja America/Argentina/San_Juan America/Argentina/Mendoza America/Argentina/San_Luis America/Argentina/Rio_Gallegos America/Argentina/Ushuaia", "AS|Pacific/Pago_Pago", "AT|Europe/Vienna", "AU|Australia/Lord_Howe Antarctica/Macquarie Australia/Hobart Australia/Currie Australia/Melbourne Australia/Sydney Australia/Broken_Hill Australia/Brisbane Australia/Lindeman Australia/Adelaide Australia/Darwin Australia/Perth Australia/Eucla", "AW|America/Curacao America/Aruba", "AX|Europe/Helsinki Europe/Mariehamn", "AZ|Asia/Baku", "BA|Europe/Belgrade Europe/Sarajevo", "BB|America/Barbados", "BD|Asia/Dhaka", "BE|Europe/Brussels", "BF|Africa/Abidjan Africa/Ouagadougou", "BG|Europe/Sofia", "BH|Asia/Qatar Asia/Bahrain", "BI|Africa/Maputo Africa/Bujumbura", "BJ|Africa/Lagos Africa/Porto-Novo", "BL|America/Port_of_Spain America/St_Barthelemy", "BM|Atlantic/Bermuda", "BN|Asia/Brunei", "BO|America/La_Paz", "BQ|America/Curacao America/Kralendijk", "BR|America/Noronha America/Belem America/Fortaleza America/Recife America/Araguaina America/Maceio America/Bahia America/Sao_Paulo America/Campo_Grande America/Cuiaba America/Santarem America/Porto_Velho America/Boa_Vista America/Manaus America/Eirunepe America/Rio_Branco", "BS|America/Nassau", "BT|Asia/Thimphu", "BW|Africa/Maputo Africa/Gaborone", "BY|Europe/Minsk", "BZ|America/Belize", "CA|America/St_Johns America/Halifax America/Glace_Bay America/Moncton America/Goose_Bay America/Blanc-Sablon America/Toronto America/Nipigon America/Thunder_Bay America/Iqaluit America/Pangnirtung America/Atikokan America/Winnipeg America/Rainy_River America/Resolute America/Rankin_Inlet America/Regina America/Swift_Current America/Edmonton America/Cambridge_Bay America/Yellowknife America/Inuvik America/Creston America/Dawson_Creek America/Fort_Nelson America/Vancouver America/Whitehorse America/Dawson", "CC|Indian/Cocos", "CD|Africa/Maputo Africa/Lagos Africa/Kinshasa Africa/Lubumbashi", "CF|Africa/Lagos Africa/Bangui", "CG|Africa/Lagos Africa/Brazzaville", "CH|Europe/Zurich", "CI|Africa/Abidjan", "CK|Pacific/Rarotonga", "CL|America/Santiago America/Punta_Arenas Pacific/Easter", "CM|Africa/Lagos Africa/Douala", "CN|Asia/Shanghai Asia/Urumqi", "CO|America/Bogota", "CR|America/Costa_Rica", "CU|America/Havana", "CV|Atlantic/Cape_Verde", "CW|America/Curacao", "CX|Indian/Christmas", "CY|Asia/Nicosia Asia/Famagusta", "CZ|Europe/Prague", "DE|Europe/Zurich Europe/Berlin Europe/Busingen", "DJ|Africa/Nairobi Africa/Djibouti", "DK|Europe/Copenhagen", "DM|America/Port_of_Spain America/Dominica", "DO|America/Santo_Domingo", "DZ|Africa/Algiers", "EC|America/Guayaquil Pacific/Galapagos", "EE|Europe/Tallinn", "EG|Africa/Cairo", "EH|Africa/El_Aaiun", "ER|Africa/Nairobi Africa/Asmara", "ES|Europe/Madrid Africa/Ceuta Atlantic/Canary", "ET|Africa/Nairobi Africa/Addis_Ababa", "FI|Europe/Helsinki", "FJ|Pacific/Fiji", "FK|Atlantic/Stanley", "FM|Pacific/Chuuk Pacific/Pohnpei Pacific/Kosrae", "FO|Atlantic/Faroe", "FR|Europe/Paris", "GA|Africa/Lagos Africa/Libreville", "GB|Europe/London", "GD|America/Port_of_Spain America/Grenada", "GE|Asia/Tbilisi", "GF|America/Cayenne", "GG|Europe/London Europe/Guernsey", "GH|Africa/Accra", "GI|Europe/Gibraltar", "GL|America/Godthab America/Danmarkshavn America/Scoresbysund America/Thule", "GM|Africa/Abidjan Africa/Banjul", "GN|Africa/Abidjan Africa/Conakry", "GP|America/Port_of_Spain America/Guadeloupe", "GQ|Africa/Lagos Africa/Malabo", "GR|Europe/Athens", "GS|Atlantic/South_Georgia", "GT|America/Guatemala", "GU|Pacific/Guam", "GW|Africa/Bissau", "GY|America/Guyana", "HK|Asia/Hong_Kong", "HN|America/Tegucigalpa", "HR|Europe/Belgrade Europe/Zagreb", "HT|America/Port-au-Prince", "HU|Europe/Budapest", "ID|Asia/Jakarta Asia/Pontianak Asia/Makassar Asia/Jayapura", "IE|Europe/Dublin", "IL|Asia/Jerusalem", "IM|Europe/London Europe/Isle_of_Man", "IN|Asia/Kolkata", "IO|Indian/Chagos", "IQ|Asia/Baghdad", "IR|Asia/Tehran", "IS|Atlantic/Reykjavik", "IT|Europe/Rome", "JE|Europe/London Europe/Jersey", "JM|America/Jamaica", "JO|Asia/Amman", "JP|Asia/Tokyo", "KE|Africa/Nairobi", "KG|Asia/Bishkek", "KH|Asia/Bangkok Asia/Phnom_Penh", "KI|Pacific/Tarawa Pacific/Enderbury Pacific/Kiritimati", "KM|Africa/Nairobi Indian/Comoro", "KN|America/Port_of_Spain America/St_Kitts", "KP|Asia/Pyongyang", "KR|Asia/Seoul", "KW|Asia/Riyadh Asia/Kuwait", "KY|America/Panama America/Cayman", "KZ|Asia/Almaty Asia/Qyzylorda Asia/Qostanay Asia/Aqtobe Asia/Aqtau Asia/Atyrau Asia/Oral", "LA|Asia/Bangkok Asia/Vientiane", "LB|Asia/Beirut", "LC|America/Port_of_Spain America/St_Lucia", "LI|Europe/Zurich Europe/Vaduz", "LK|Asia/Colombo", "LR|Africa/Monrovia", "LS|Africa/Johannesburg Africa/Maseru", "LT|Europe/Vilnius", "LU|Europe/Luxembourg", "LV|Europe/Riga", "LY|Africa/Tripoli", "MA|Africa/Casablanca", "MC|Europe/Monaco", "MD|Europe/Chisinau", "ME|Europe/Belgrade Europe/Podgorica", "MF|America/Port_of_Spain America/Marigot", "MG|Africa/Nairobi Indian/Antananarivo", "MH|Pacific/Majuro Pacific/Kwajalein", "MK|Europe/Belgrade Europe/Skopje", "ML|Africa/Abidjan Africa/Bamako", "MM|Asia/Yangon", "MN|Asia/Ulaanbaatar Asia/Hovd Asia/Choibalsan", "MO|Asia/Macau", "MP|Pacific/Guam Pacific/Saipan", "MQ|America/Martinique", "MR|Africa/Abidjan Africa/Nouakchott", "MS|America/Port_of_Spain America/Montserrat", "MT|Europe/Malta", "MU|Indian/Mauritius", "MV|Indian/Maldives", "MW|Africa/Maputo Africa/Blantyre", "MX|America/Mexico_City America/Cancun America/Merida America/Monterrey America/Matamoros America/Mazatlan America/Chihuahua America/Ojinaga America/Hermosillo America/Tijuana America/Bahia_Banderas", "MY|Asia/Kuala_Lumpur Asia/Kuching", "MZ|Africa/Maputo", "NA|Africa/Windhoek", "NC|Pacific/Noumea", "NE|Africa/Lagos Africa/Niamey", "NF|Pacific/Norfolk", "NG|Africa/Lagos", "NI|America/Managua", "NL|Europe/Amsterdam", "NO|Europe/Oslo", "NP|Asia/Kathmandu", "NR|Pacific/Nauru", "NU|Pacific/Niue", "NZ|Pacific/Auckland Pacific/Chatham", "OM|Asia/Dubai Asia/Muscat", "PA|America/Panama", "PE|America/Lima", "PF|Pacific/Tahiti Pacific/Marquesas Pacific/Gambier", "PG|Pacific/Port_Moresby Pacific/Bougainville", "PH|Asia/Manila", "PK|Asia/Karachi", "PL|Europe/Warsaw", "PM|America/Miquelon", "PN|Pacific/Pitcairn", "PR|America/Puerto_Rico", "PS|Asia/Gaza Asia/Hebron", "PT|Europe/Lisbon Atlantic/Madeira Atlantic/Azores", "PW|Pacific/Palau", "PY|America/Asuncion", "QA|Asia/Qatar", "RE|Indian/Reunion", "RO|Europe/Bucharest", "RS|Europe/Belgrade", "RU|Europe/Kaliningrad Europe/Moscow Europe/Simferopol Europe/Kirov Europe/Astrakhan Europe/Volgograd Europe/Saratov Europe/Ulyanovsk Europe/Samara Asia/Yekaterinburg Asia/Omsk Asia/Novosibirsk Asia/Barnaul Asia/Tomsk Asia/Novokuznetsk Asia/Krasnoyarsk Asia/Irkutsk Asia/Chita Asia/Yakutsk Asia/Khandyga Asia/Vladivostok Asia/Ust-Nera Asia/Magadan Asia/Sakhalin Asia/Srednekolymsk Asia/Kamchatka Asia/Anadyr", "RW|Africa/Maputo Africa/Kigali", "SA|Asia/Riyadh", "SB|Pacific/Guadalcanal", "SC|Indian/Mahe", "SD|Africa/Khartoum", "SE|Europe/Stockholm", "SG|Asia/Singapore", "SH|Africa/Abidjan Atlantic/St_Helena", "SI|Europe/Belgrade Europe/Ljubljana", "SJ|Europe/Oslo Arctic/Longyearbyen", "SK|Europe/Prague Europe/Bratislava", "SL|Africa/Abidjan Africa/Freetown", "SM|Europe/Rome Europe/San_Marino", "SN|Africa/Abidjan Africa/Dakar", "SO|Africa/Nairobi Africa/Mogadishu", "SR|America/Paramaribo", "SS|Africa/Juba", "ST|Africa/Sao_Tome", "SV|America/El_Salvador", "SX|America/Curacao America/Lower_Princes", "SY|Asia/Damascus", "SZ|Africa/Johannesburg Africa/Mbabane", "TC|America/Grand_Turk", "TD|Africa/Ndjamena", "TF|Indian/Reunion Indian/Kerguelen", "TG|Africa/Abidjan Africa/Lome", "TH|Asia/Bangkok", "TJ|Asia/Dushanbe", "TK|Pacific/Fakaofo", "TL|Asia/Dili", "TM|Asia/Ashgabat", "TN|Africa/Tunis", "TO|Pacific/Tongatapu", "TR|Europe/Istanbul", "TT|America/Port_of_Spain", "TV|Pacific/Funafuti", "TW|Asia/Taipei", "TZ|Africa/Nairobi Africa/Dar_es_Salaam", "UA|Europe/Simferopol Europe/Kiev Europe/Uzhgorod Europe/Zaporozhye", "UG|Africa/Nairobi Africa/Kampala", "UM|Pacific/Pago_Pago Pacific/Wake Pacific/Honolulu Pacific/Midway", "US|America/New_York America/Detroit America/Kentucky/Louisville America/Kentucky/Monticello America/Indiana/Indianapolis America/Indiana/Vincennes America/Indiana/Winamac America/Indiana/Marengo America/Indiana/Petersburg America/Indiana/Vevay America/Chicago America/Indiana/Tell_City America/Indiana/Knox America/Menominee America/North_Dakota/Center America/North_Dakota/New_Salem America/North_Dakota/Beulah America/Denver America/Boise America/Phoenix America/Los_Angeles America/Anchorage America/Juneau America/Sitka America/Metlakatla America/Yakutat America/Nome America/Adak Pacific/Honolulu", "UY|America/Montevideo", "UZ|Asia/Samarkand Asia/Tashkent", "VA|Europe/Rome Europe/Vatican", "VC|America/Port_of_Spain America/St_Vincent", "VE|America/Caracas", "VG|America/Port_of_Spain America/Tortola", "VI|America/Port_of_Spain America/St_Thomas", "VN|Asia/Bangkok Asia/Ho_Chi_Minh", "VU|Pacific/Efate", "WF|Pacific/Wallis", "WS|Pacific/Apia", "YE|Asia/Riyadh Asia/Aden", "YT|Africa/Nairobi Indian/Mayotte", "ZA|Africa/Johannesburg", "ZM|Africa/Maputo Africa/Lusaka", "ZW|Africa/Maputo Africa/Harare" ] }); return moment; })); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/moment-timezone/moment-timezone-with-data.js ================================================ //! moment-timezone.js //! version : 0.5.28 //! Copyright (c) JS Foundation and other contributors //! license : MIT //! github.com/moment/moment-timezone (function (root, factory) { "use strict"; /*global define*/ if (typeof module === 'object' && module.exports) { module.exports = factory(require('moment')); // Node } else if (typeof define === 'function' && define.amd) { define(['moment'], factory); // AMD } else { factory(root.moment); // Browser } }(this, function (moment) { "use strict"; // Do not load moment-timezone a second time. // if (moment.tz !== undefined) { // logError('Moment Timezone ' + moment.tz.version + ' was already loaded ' + (moment.tz.dataVersion ? 'with data from ' : 'without any data') + moment.tz.dataVersion); // return moment; // } var VERSION = "0.5.28", zones = {}, links = {}, countries = {}, names = {}, guesses = {}, cachedGuess; if (!moment || typeof moment.version !== 'string') { logError('Moment Timezone requires Moment.js. See https://momentjs.com/timezone/docs/#/use-it/browser/'); } var momentVersion = moment.version.split('.'), major = +momentVersion[0], minor = +momentVersion[1]; // Moment.js version check if (major < 2 || (major === 2 && minor < 6)) { logError('Moment Timezone requires Moment.js >= 2.6.0. You are using Moment.js ' + moment.version + '. See momentjs.com'); } /************************************ Unpacking ************************************/ function charCodeToInt(charCode) { if (charCode > 96) { return charCode - 87; } else if (charCode > 64) { return charCode - 29; } return charCode - 48; } function unpackBase60(string) { var i = 0, parts = string.split('.'), whole = parts[0], fractional = parts[1] || '', multiplier = 1, num, out = 0, sign = 1; // handle negative numbers if (string.charCodeAt(0) === 45) { i = 1; sign = -1; } // handle digits before the decimal for (i; i < whole.length; i++) { num = charCodeToInt(whole.charCodeAt(i)); out = 60 * out + num; } // handle digits after the decimal for (i = 0; i < fractional.length; i++) { multiplier = multiplier / 60; num = charCodeToInt(fractional.charCodeAt(i)); out += num * multiplier; } return out * sign; } function arrayToInt (array) { for (var i = 0; i < array.length; i++) { array[i] = unpackBase60(array[i]); } } function intToUntil (array, length) { for (var i = 0; i < length; i++) { array[i] = Math.round((array[i - 1] || 0) + (array[i] * 60000)); // minutes to milliseconds } array[length - 1] = Infinity; } function mapIndices (source, indices) { var out = [], i; for (i = 0; i < indices.length; i++) { out[i] = source[indices[i]]; } return out; } function unpack (string) { var data = string.split('|'), offsets = data[2].split(' '), indices = data[3].split(''), untils = data[4].split(' '); arrayToInt(offsets); arrayToInt(indices); arrayToInt(untils); intToUntil(untils, indices.length); return { name : data[0], abbrs : mapIndices(data[1].split(' '), indices), offsets : mapIndices(offsets, indices), untils : untils, population : data[5] | 0 }; } /************************************ Zone object ************************************/ function Zone (packedString) { if (packedString) { this._set(unpack(packedString)); } } Zone.prototype = { _set : function (unpacked) { this.name = unpacked.name; this.abbrs = unpacked.abbrs; this.untils = unpacked.untils; this.offsets = unpacked.offsets; this.population = unpacked.population; }, _index : function (timestamp) { var target = +timestamp, untils = this.untils, i; for (i = 0; i < untils.length; i++) { if (target < untils[i]) { return i; } } }, countries : function () { var zone_name = this.name; return Object.keys(countries).filter(function (country_code) { return countries[country_code].zones.indexOf(zone_name) !== -1; }); }, parse : function (timestamp) { var target = +timestamp, offsets = this.offsets, untils = this.untils, max = untils.length - 1, offset, offsetNext, offsetPrev, i; for (i = 0; i < max; i++) { offset = offsets[i]; offsetNext = offsets[i + 1]; offsetPrev = offsets[i ? i - 1 : i]; if (offset < offsetNext && tz.moveAmbiguousForward) { offset = offsetNext; } else if (offset > offsetPrev && tz.moveInvalidForward) { offset = offsetPrev; } if (target < untils[i] - (offset * 60000)) { return offsets[i]; } } return offsets[max]; }, abbr : function (mom) { return this.abbrs[this._index(mom)]; }, offset : function (mom) { logError("zone.offset has been deprecated in favor of zone.utcOffset"); return this.offsets[this._index(mom)]; }, utcOffset : function (mom) { return this.offsets[this._index(mom)]; } }; /************************************ Country object ************************************/ function Country (country_name, zone_names) { this.name = country_name; this.zones = zone_names; } /************************************ Current Timezone ************************************/ function OffsetAt(at) { var timeString = at.toTimeString(); var abbr = timeString.match(/\([a-z ]+\)/i); if (abbr && abbr[0]) { // 17:56:31 GMT-0600 (CST) // 17:56:31 GMT-0600 (Central Standard Time) abbr = abbr[0].match(/[A-Z]/g); abbr = abbr ? abbr.join('') : undefined; } else { // 17:56:31 CST // 17:56:31 GMT+0800 (台北標準時間) abbr = timeString.match(/[A-Z]{3,5}/g); abbr = abbr ? abbr[0] : undefined; } if (abbr === 'GMT') { abbr = undefined; } this.at = +at; this.abbr = abbr; this.offset = at.getTimezoneOffset(); } function ZoneScore(zone) { this.zone = zone; this.offsetScore = 0; this.abbrScore = 0; } ZoneScore.prototype.scoreOffsetAt = function (offsetAt) { this.offsetScore += Math.abs(this.zone.utcOffset(offsetAt.at) - offsetAt.offset); if (this.zone.abbr(offsetAt.at).replace(/[^A-Z]/g, '') !== offsetAt.abbr) { this.abbrScore++; } }; function findChange(low, high) { var mid, diff; while ((diff = ((high.at - low.at) / 12e4 | 0) * 6e4)) { mid = new OffsetAt(new Date(low.at + diff)); if (mid.offset === low.offset) { low = mid; } else { high = mid; } } return low; } function userOffsets() { var startYear = new Date().getFullYear() - 2, last = new OffsetAt(new Date(startYear, 0, 1)), offsets = [last], change, next, i; for (i = 1; i < 48; i++) { next = new OffsetAt(new Date(startYear, i, 1)); if (next.offset !== last.offset) { change = findChange(last, next); offsets.push(change); offsets.push(new OffsetAt(new Date(change.at + 6e4))); } last = next; } for (i = 0; i < 4; i++) { offsets.push(new OffsetAt(new Date(startYear + i, 0, 1))); offsets.push(new OffsetAt(new Date(startYear + i, 6, 1))); } return offsets; } function sortZoneScores (a, b) { if (a.offsetScore !== b.offsetScore) { return a.offsetScore - b.offsetScore; } if (a.abbrScore !== b.abbrScore) { return a.abbrScore - b.abbrScore; } if (a.zone.population !== b.zone.population) { return b.zone.population - a.zone.population; } return b.zone.name.localeCompare(a.zone.name); } function addToGuesses (name, offsets) { var i, offset; arrayToInt(offsets); for (i = 0; i < offsets.length; i++) { offset = offsets[i]; guesses[offset] = guesses[offset] || {}; guesses[offset][name] = true; } } function guessesForUserOffsets (offsets) { var offsetsLength = offsets.length, filteredGuesses = {}, out = [], i, j, guessesOffset; for (i = 0; i < offsetsLength; i++) { guessesOffset = guesses[offsets[i].offset] || {}; for (j in guessesOffset) { if (guessesOffset.hasOwnProperty(j)) { filteredGuesses[j] = true; } } } for (i in filteredGuesses) { if (filteredGuesses.hasOwnProperty(i)) { out.push(names[i]); } } return out; } function rebuildGuess () { // use Intl API when available and returning valid time zone try { var intlName = Intl.DateTimeFormat().resolvedOptions().timeZone; if (intlName && intlName.length > 3) { var name = names[normalizeName(intlName)]; if (name) { return name; } logError("Moment Timezone found " + intlName + " from the Intl api, but did not have that data loaded."); } } catch (e) { // Intl unavailable, fall back to manual guessing. } var offsets = userOffsets(), offsetsLength = offsets.length, guesses = guessesForUserOffsets(offsets), zoneScores = [], zoneScore, i, j; for (i = 0; i < guesses.length; i++) { zoneScore = new ZoneScore(getZone(guesses[i]), offsetsLength); for (j = 0; j < offsetsLength; j++) { zoneScore.scoreOffsetAt(offsets[j]); } zoneScores.push(zoneScore); } zoneScores.sort(sortZoneScores); return zoneScores.length > 0 ? zoneScores[0].zone.name : undefined; } function guess (ignoreCache) { if (!cachedGuess || ignoreCache) { cachedGuess = rebuildGuess(); } return cachedGuess; } /************************************ Global Methods ************************************/ function normalizeName (name) { return (name || '').toLowerCase().replace(/\//g, '_'); } function addZone (packed) { var i, name, split, normalized; if (typeof packed === "string") { packed = [packed]; } for (i = 0; i < packed.length; i++) { split = packed[i].split('|'); name = split[0]; normalized = normalizeName(name); zones[normalized] = packed[i]; names[normalized] = name; addToGuesses(normalized, split[2].split(' ')); } } function getZone (name, caller) { name = normalizeName(name); var zone = zones[name]; var link; if (zone instanceof Zone) { return zone; } if (typeof zone === 'string') { zone = new Zone(zone); zones[name] = zone; return zone; } // Pass getZone to prevent recursion more than 1 level deep if (links[name] && caller !== getZone && (link = getZone(links[name], getZone))) { zone = zones[name] = new Zone(); zone._set(link); zone.name = names[name]; return zone; } return null; } function getNames () { var i, out = []; for (i in names) { if (names.hasOwnProperty(i) && (zones[i] || zones[links[i]]) && names[i]) { out.push(names[i]); } } return out.sort(); } function getCountryNames () { return Object.keys(countries); } function addLink (aliases) { var i, alias, normal0, normal1; if (typeof aliases === "string") { aliases = [aliases]; } for (i = 0; i < aliases.length; i++) { alias = aliases[i].split('|'); normal0 = normalizeName(alias[0]); normal1 = normalizeName(alias[1]); links[normal0] = normal1; names[normal0] = alias[0]; links[normal1] = normal0; names[normal1] = alias[1]; } } function addCountries (data) { var i, country_code, country_zones, split; if (!data || !data.length) return; for (i = 0; i < data.length; i++) { split = data[i].split('|'); country_code = split[0].toUpperCase(); country_zones = split[1].split(' '); countries[country_code] = new Country( country_code, country_zones ); } } function getCountry (name) { name = name.toUpperCase(); return countries[name] || null; } function zonesForCountry(country, with_offset) { country = getCountry(country); if (!country) return null; var zones = country.zones.sort(); if (with_offset) { return zones.map(function (zone_name) { var zone = getZone(zone_name); return { name: zone_name, offset: zone.utcOffset(new Date()) }; }); } return zones; } function loadData (data) { addZone(data.zones); addLink(data.links); addCountries(data.countries); tz.dataVersion = data.version; } function zoneExists (name) { if (!zoneExists.didShowError) { zoneExists.didShowError = true; logError("moment.tz.zoneExists('" + name + "') has been deprecated in favor of !moment.tz.zone('" + name + "')"); } return !!getZone(name); } function needsOffset (m) { var isUnixTimestamp = (m._f === 'X' || m._f === 'x'); return !!(m._a && (m._tzm === undefined) && !isUnixTimestamp); } function logError (message) { if (typeof console !== 'undefined' && typeof console.error === 'function') { console.error(message); } } /************************************ moment.tz namespace ************************************/ function tz (input) { var args = Array.prototype.slice.call(arguments, 0, -1), name = arguments[arguments.length - 1], zone = getZone(name), out = moment.utc.apply(null, args); if (zone && !moment.isMoment(input) && needsOffset(out)) { out.add(zone.parse(out), 'minutes'); } out.tz(name); return out; } tz.version = VERSION; tz.dataVersion = ''; tz._zones = zones; tz._links = links; tz._names = names; tz._countries = countries; tz.add = addZone; tz.link = addLink; tz.load = loadData; tz.zone = getZone; tz.zoneExists = zoneExists; // deprecated in 0.1.0 tz.guess = guess; tz.names = getNames; tz.Zone = Zone; tz.unpack = unpack; tz.unpackBase60 = unpackBase60; tz.needsOffset = needsOffset; tz.moveInvalidForward = true; tz.moveAmbiguousForward = false; tz.countries = getCountryNames; tz.zonesForCountry = zonesForCountry; /************************************ Interface with Moment.js ************************************/ var fn = moment.fn; moment.tz = tz; moment.defaultZone = null; moment.updateOffset = function (mom, keepTime) { var zone = moment.defaultZone, offset; if (mom._z === undefined) { if (zone && needsOffset(mom) && !mom._isUTC) { mom._d = moment.utc(mom._a)._d; mom.utc().add(zone.parse(mom), 'minutes'); } mom._z = zone; } if (mom._z) { offset = mom._z.utcOffset(mom); if (Math.abs(offset) < 16) { offset = offset / 60; } if (mom.utcOffset !== undefined) { var z = mom._z; mom.utcOffset(-offset, keepTime); mom._z = z; } else { mom.zone(offset, keepTime); } } }; fn.tz = function (name, keepTime) { if (name) { if (typeof name !== 'string') { throw new Error('Time zone name must be a string, got ' + name + ' [' + typeof name + ']'); } this._z = getZone(name); if (this._z) { moment.updateOffset(this, keepTime); } else { logError("Moment Timezone has no data for " + name + ". See http://momentjs.com/timezone/docs/#/data-loading/."); } return this; } if (this._z) { return this._z.name; } }; function abbrWrap (old) { return function () { if (this._z) { return this._z.abbr(this); } return old.call(this); }; } function resetZoneWrap (old) { return function () { this._z = null; return old.apply(this, arguments); }; } function resetZoneWrap2 (old) { return function () { if (arguments.length > 0) this._z = null; return old.apply(this, arguments); }; } fn.zoneName = abbrWrap(fn.zoneName); fn.zoneAbbr = abbrWrap(fn.zoneAbbr); fn.utc = resetZoneWrap(fn.utc); fn.local = resetZoneWrap(fn.local); fn.utcOffset = resetZoneWrap2(fn.utcOffset); moment.tz.setDefault = function(name) { if (major < 2 || (major === 2 && minor < 9)) { logError('Moment Timezone setDefault() requires Moment.js >= 2.9.0. You are using Moment.js ' + moment.version + '.'); } moment.defaultZone = name ? getZone(name) : null; return moment; }; // Cloning a moment should include the _z property. var momentProperties = moment.momentProperties; if (Object.prototype.toString.call(momentProperties) === '[object Array]') { // moment 2.8.1+ momentProperties.push('_z'); momentProperties.push('_a'); } else if (momentProperties) { // moment 2.7.0 momentProperties._z = null; } loadData({ "version": "2019c", "zones": [ "Africa/Abidjan|LMT GMT|g.8 0|01|-2ldXH.Q|48e5", "Africa/Accra|LMT GMT +0020|.Q 0 -k|012121212121212121212121212121212121212121212121|-26BbX.8 6tzX.8 MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE|41e5", "Africa/Nairobi|LMT EAT +0230 +0245|-2r.g -30 -2u -2J|01231|-1F3Cr.g 3Dzr.g okMu MFXJ|47e5", "Africa/Algiers|PMT WET WEST CET CEST|-9.l 0 -10 -10 -20|0121212121212121343431312123431213|-2nco9.l cNb9.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 DA0 Imo0 rd0 De0 9Xz0 1fb0 1ap0 16K0 2yo0 mEp0 hwL0 jxA0 11A0 dDd0 17b0 11B0 1cN0 2Dy0 1cN0 1fB0 1cL0|26e5", "Africa/Lagos|LMT WAT|-d.A -10|01|-22y0d.A|17e6", "Africa/Bissau|LMT -01 GMT|12.k 10 0|012|-2ldX0 2xoo0|39e4", "Africa/Maputo|LMT CAT|-2a.k -20|01|-2GJea.k|26e5", "Africa/Cairo|EET EEST|-20 -30|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-1bIO0 vb0 1ip0 11z0 1iN0 1nz0 12p0 1pz0 10N0 1pz0 16p0 1jz0 s3d0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1WL0 rd0 1Rz0 wp0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1qL0 Xd0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1ny0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 WL0 1qN0 Rb0 1wp0 On0 1zd0 Lz0 1EN0 Fb0 c10 8n0 8Nd0 gL0 e10 mn0|15e6", "Africa/Casablanca|LMT +00 +01|u.k 0 -10|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2gMnt.E 130Lt.E rb0 Dd0 dVb0 b6p0 TX0 EoB0 LL0 gnd0 rz0 43d0 AL0 1Nd0 XX0 1Cp0 pz0 dEp0 4mn0 SyN0 AL0 1Nd0 wn0 1FB0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 28M0 e00 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0|32e5", "Africa/Ceuta|WET WEST CET CEST|0 -10 -10 -20|010101010101010101010232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-25KN0 11z0 drd0 18p0 3HX0 17d0 1fz0 1a10 1io0 1a00 1y7o0 LL0 gnd0 rz0 43d0 AL0 1Nd0 XX0 1Cp0 pz0 dEp0 4VB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|85e3", "Africa/El_Aaiun|LMT -01 +00 +01|Q.M 10 0 -10|012323232323232323232323232323232323232323232323232323232323232323232323232323232323|-1rDz7.c 1GVA7.c 6L0 AL0 1Nd0 XX0 1Cp0 pz0 1cBB0 AL0 1Nd0 wn0 1FB0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 28M0 e00 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0|20e4", "Africa/Johannesburg|SAST SAST SAST|-1u -20 -30|012121|-2GJdu 1Ajdu 1cL0 1cN0 1cL0|84e5", "Africa/Juba|LMT CAT CAST EAT|-26.s -20 -30 -30|01212121212121212121212121212121213|-1yW26.s 1zK06.s 16L0 1iN0 17b0 1jd0 17b0 1ip0 17z0 1i10 17X0 1hB0 18n0 1hd0 19b0 1gp0 19z0 1iN0 17b0 1ip0 17z0 1i10 18n0 1hd0 18L0 1gN0 19b0 1gp0 19z0 1iN0 17z0 1i10 17X0 yGd0|", "Africa/Khartoum|LMT CAT CAST EAT|-2a.8 -20 -30 -30|012121212121212121212121212121212131|-1yW2a.8 1zK0a.8 16L0 1iN0 17b0 1jd0 17b0 1ip0 17z0 1i10 17X0 1hB0 18n0 1hd0 19b0 1gp0 19z0 1iN0 17b0 1ip0 17z0 1i10 18n0 1hd0 18L0 1gN0 19b0 1gp0 19z0 1iN0 17z0 1i10 17X0 yGd0 HjL0|51e5", "Africa/Monrovia|MMT MMT GMT|H.8 I.u 0|012|-23Lzg.Q 28G01.m|11e5", "Africa/Ndjamena|LMT WAT WAST|-10.c -10 -20|0121|-2le10.c 2J3c0.c Wn0|13e5", "Africa/Sao_Tome|LMT GMT WAT|A.J 0 -10|0121|-2le00 4i6N0 2q00|", "Africa/Tripoli|LMT CET CEST EET|-Q.I -10 -20 -20|012121213121212121212121213123123|-21JcQ.I 1hnBQ.I vx0 4iP0 xx0 4eN0 Bb0 7ip0 U0n0 A10 1db0 1cN0 1db0 1dd0 1db0 1eN0 1bb0 1e10 1cL0 1c10 1db0 1dd0 1db0 1cN0 1db0 1q10 fAn0 1ep0 1db0 AKq0 TA0 1o00|11e5", "Africa/Tunis|PMT CET CEST|-9.l -10 -20|0121212121212121212121212121212121|-2nco9.l 18pa9.l 1qM0 DA0 3Tc0 11B0 1ze0 WM0 7z0 3d0 14L0 1cN0 1f90 1ar0 16J0 1gXB0 WM0 1rA0 11c0 nwo0 Ko0 1cM0 1cM0 1rA0 10M0 zuM0 10N0 1aN0 1qM0 WM0 1qM0 11A0 1o00|20e5", "Africa/Windhoek|+0130 SAST SAST CAT WAT|-1u -20 -30 -20 -10|01213434343434343434343434343434343434343434343434343|-2GJdu 1Ajdu 1cL0 1SqL0 9Io0 16P0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0|32e4", "America/Adak|NST NWT NPT BST BDT AHST HST HDT|b0 a0 a0 b0 a0 a0 a0 90|012034343434343434343434343434343456767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-17SX0 8wW0 iB0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cm0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|326", "America/Anchorage|AST AWT APT AHST AHDT YST AKST AKDT|a0 90 90 a0 90 90 90 80|012034343434343434343434343434343456767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-17T00 8wX0 iA0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cm0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|30e4", "America/Port_of_Spain|LMT AST|46.4 40|01|-2kNvR.U|43e3", "America/Araguaina|LMT -03 -02|3c.M 30 20|0121212121212121212121212121212121212121212121212121|-2glwL.c HdKL.c 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 dMN0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 ny10 Lz0|14e4", "America/Argentina/Buenos_Aires|CMT -04 -03 -02|4g.M 40 30 20|01212121212121212121212121212121212121212123232323232323232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 A4p0 uL0 1qN0 WL0|", "America/Argentina/Catamarca|CMT -04 -03 -02|4g.M 40 30 20|01212121212121212121212121212121212121212123232323132321232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 rlB0 7B0 8zb0 uL0|", "America/Argentina/Cordoba|CMT -04 -03 -02|4g.M 40 30 20|01212121212121212121212121212121212121212123232323132323232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 A4p0 uL0 1qN0 WL0|", "America/Argentina/Jujuy|CMT -04 -03 -02|4g.M 40 30 20|012121212121212121212121212121212121212121232323121323232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1ze0 TX0 1ld0 WK0 1wp0 TX0 A4p0 uL0|", "America/Argentina/La_Rioja|CMT -04 -03 -02|4g.M 40 30 20|012121212121212121212121212121212121212121232323231232321232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Qn0 qO0 16n0 Rb0 1wp0 TX0 rlB0 7B0 8zb0 uL0|", "America/Argentina/Mendoza|CMT -04 -03 -02|4g.M 40 30 20|01212121212121212121212121212121212121212123232312121321232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1u20 SL0 1vd0 Tb0 1wp0 TW0 ri10 Op0 7TX0 uL0|", "America/Argentina/Rio_Gallegos|CMT -04 -03 -02|4g.M 40 30 20|01212121212121212121212121212121212121212123232323232321232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 rlB0 7B0 8zb0 uL0|", "America/Argentina/Salta|CMT -04 -03 -02|4g.M 40 30 20|012121212121212121212121212121212121212121232323231323232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 A4p0 uL0|", "America/Argentina/San_Juan|CMT -04 -03 -02|4g.M 40 30 20|012121212121212121212121212121212121212121232323231232321232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Qn0 qO0 16n0 Rb0 1wp0 TX0 rld0 m10 8lb0 uL0|", "America/Argentina/San_Luis|CMT -04 -03 -02|4g.M 40 30 20|012121212121212121212121212121212121212121232323121212321212|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 XX0 1q20 SL0 AN0 vDb0 m10 8lb0 8L0 jd0 1qN0 WL0 1qN0|", "America/Argentina/Tucuman|CMT -04 -03 -02|4g.M 40 30 20|0121212121212121212121212121212121212121212323232313232123232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 rlB0 4N0 8BX0 uL0 1qN0 WL0|", "America/Argentina/Ushuaia|CMT -04 -03 -02|4g.M 40 30 20|01212121212121212121212121212121212121212123232323232321232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 rkN0 8p0 8zb0 uL0|", "America/Curacao|LMT -0430 AST|4z.L 4u 40|012|-2kV7o.d 28KLS.d|15e4", "America/Asuncion|AMT -04 -03|3O.E 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-1x589.k 1DKM9.k 3CL0 3Dd0 10L0 1pB0 10n0 1pB0 10n0 1pB0 1cL0 1dd0 1db0 1dd0 1cL0 1dd0 1cL0 1dd0 1cL0 1dd0 1db0 1dd0 1cL0 1dd0 1cL0 1dd0 1cL0 1dd0 1db0 1dd0 1cL0 1lB0 14n0 1dd0 1cL0 1fd0 WL0 1rd0 1aL0 1dB0 Xz0 1qp0 Xb0 1qN0 10L0 1rB0 TX0 1tB0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 WN0 1qL0 11B0 1nX0 1ip0 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 TX0 1tB0 19X0 1a10 1fz0 1a10 1fz0 1cN0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0|28e5", "America/Atikokan|CST CDT CWT CPT EST|60 50 50 50 50|0101234|-25TQ0 1in0 Rnb0 3je0 8x30 iw0|28e2", "America/Bahia_Banderas|LMT MST CST PST MDT CDT|71 70 60 80 60 50|0121212131414141414141414141414141414152525252525252525252525252525252525252525252525252525252|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nW0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|84e3", "America/Bahia|LMT -03 -02|2y.4 30 20|01212121212121212121212121212121212121212121212121212121212121|-2glxp.U HdLp.U 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 l5B0 Rb0|27e5", "America/Barbados|LMT BMT AST ADT|3W.t 3W.t 40 30|01232323232|-1Q0I1.v jsM0 1ODC1.v IL0 1ip0 17b0 1ip0 17b0 1ld0 13b0|28e4", "America/Belem|LMT -03 -02|3d.U 30 20|012121212121212121212121212121|-2glwK.4 HdKK.4 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0|20e5", "America/Belize|LMT CST -0530 CDT|5Q.M 60 5u 50|01212121212121212121212121212121212121212121212121213131|-2kBu7.c fPA7.c Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1f0Mu qn0 lxB0 mn0|57e3", "America/Blanc-Sablon|AST ADT AWT APT|40 30 30 30|010230|-25TS0 1in0 UGp0 8x50 iu0|11e2", "America/Boa_Vista|LMT -04 -03|42.E 40 30|0121212121212121212121212121212121|-2glvV.k HdKV.k 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 smp0 WL0 1tB0 2L0|62e2", "America/Bogota|BMT -05 -04|4U.g 50 40|0121|-2eb73.I 38yo3.I 2en0|90e5", "America/Boise|PST PDT MST MWT MPT MDT|80 70 70 60 60 60|0101023425252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-261q0 1nX0 11B0 1nX0 8C10 JCL0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 Dd0 1Kn0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e4", "America/Cambridge_Bay|-00 MST MWT MPT MDDT MDT CST CDT EST|0 70 60 60 50 60 60 50 50|0123141515151515151515151515151515151515151515678651515151515151515151515151515151515151515151515151515151515151515151515151|-21Jc0 RO90 8x20 ix0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11A0 1nX0 2K0 WQ0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|15e2", "America/Campo_Grande|LMT -04 -03|3C.s 40 30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glwl.w HdLl.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 1C10 Lz0 1Ip0 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|77e4", "America/Cancun|LMT CST EST EDT CDT|5L.4 60 50 40 50|0123232341414141414141414141414141414141412|-1UQG0 2q2o0 yLB0 1lb0 14p0 1lb0 14p0 Lz0 xB0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 Dd0|63e4", "America/Caracas|CMT -0430 -04|4r.E 4u 40|01212|-2kV7w.k 28KM2.k 1IwOu kqo0|29e5", "America/Cayenne|LMT -04 -03|3t.k 40 30|012|-2mrwu.E 2gWou.E|58e3", "America/Panama|CMT EST|5j.A 50|01|-2uduE.o|15e5", "America/Chicago|CST CDT EST CWT CPT|60 50 50 50 50|01010101010101010101010101010101010102010101010103401010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 1wp0 TX0 WN0 1qL0 1cN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 11B0 1Hz0 14p0 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 RB0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|92e5", "America/Chihuahua|LMT MST CST CDT MDT|74.k 70 60 50 60|0121212323241414141414141414141414141414141414141414141414141414141414141414141414141414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|81e4", "America/Costa_Rica|SJMT CST CDT|5A.d 60 50|0121212121|-1Xd6n.L 2lu0n.L Db0 1Kp0 Db0 pRB0 15b0 1kp0 mL0|12e5", "America/Creston|MST PST|70 80|010|-29DR0 43B0|53e2", "America/Cuiaba|LMT -04 -03|3I.k 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glwf.E HdLf.E 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 4a10 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|54e4", "America/Danmarkshavn|LMT -03 -02 GMT|1e.E 30 20 0|01212121212121212121212121212121213|-2a5WJ.k 2z5fJ.k 19U0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 DC0|8", "America/Dawson_Creek|PST PDT PWT PPT MST|80 70 70 70 70|0102301010101010101010101010101010101010101010101010101014|-25TO0 1in0 UGp0 8x10 iy0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 ML0|12e3", "America/Dawson|YST YDT YWT YPT YDDT PST PDT|90 80 80 80 70 80 70|0101023040565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-25TN0 1in0 1o10 13V0 Ser0 8x00 iz0 LCL0 1fA0 jrA0 fNd0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|13e2", "America/Denver|MST MDT MWT MPT|70 60 60 60|01010101023010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261r0 1nX0 11B0 1nX0 11B0 1qL0 WN0 mn0 Ord0 8x20 ix0 LCN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|26e5", "America/Detroit|LMT CST EST EWT EPT EDT|5w.b 60 50 40 40 40|0123425252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-2Cgir.N peqr.N 156L0 8x40 iv0 6fd0 11z0 JxX1 SMX 1cN0 1cL0 aW10 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e5", "America/Edmonton|LMT MST MDT MWT MPT|7x.Q 70 60 60 60|0121212121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2yd4q.8 shdq.8 1in0 17d0 hz0 2dB0 1fz0 1a10 11z0 1qN0 WL0 1qN0 11z0 IGN0 8x20 ix0 3NB0 11z0 XQp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|10e5", "America/Eirunepe|LMT -05 -04|4D.s 50 40|0121212121212121212121212121212121|-2glvk.w HdLk.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 dPB0 On0 yTd0 d5X0|31e3", "America/El_Salvador|LMT CST CDT|5U.M 60 50|012121|-1XiG3.c 2Fvc3.c WL0 1qN0 WL0|11e5", "America/Tijuana|LMT MST PST PDT PWT PPT|7M.4 70 80 70 70 70|012123245232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UQE0 4PX0 8mM0 8lc0 SN0 1cL0 pHB0 83r0 zI0 5O10 1Rz0 cOO0 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 BUp0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|20e5", "America/Fort_Nelson|PST PDT PWT PPT MST|80 70 70 70 70|01023010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010104|-25TO0 1in0 UGp0 8x10 iy0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0|39e2", "America/Fort_Wayne|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|010101023010101010101010101040454545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 QI10 Db0 RB0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 5Tz0 1o10 qLb0 1cL0 1cN0 1cL0 1qhd0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|", "America/Fortaleza|LMT -03 -02|2y 30 20|0121212121212121212121212121212121212121|-2glxq HdLq 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 5z0 2mN0 On0|34e5", "America/Glace_Bay|LMT AST ADT AWT APT|3X.M 40 30 30 30|012134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsI0.c CwO0.c 1in0 UGp0 8x50 iu0 iq10 11z0 Jg10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|19e3", "America/Godthab|LMT -03 -02|3q.U 30 20|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a5Ux.4 2z5dx.4 19U0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|17e3", "America/Goose_Bay|NST NDT NST NDT NWT NPT AST ADT ADDT|3u.Q 2u.Q 3u 2u 2u 2u 40 30 20|010232323232323245232323232323232323232323232323232323232326767676767676767676767676767676767676767676768676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-25TSt.8 1in0 DXb0 2HbX.8 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 WL0 1qN0 WL0 1qN0 7UHu itu 1tB0 WL0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1tB0 WL0 1ld0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 S10 g0u 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14n1 1lb0 14p0 1nW0 11C0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|76e2", "America/Grand_Turk|KMT EST EDT AST|57.a 50 40 40|01212121212121212121212121212121212121212121212121212121212121212121212121232121212121212121212121212121212121212121|-2l1uQ.O 2HHBQ.O 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 5Ip0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e2", "America/Guatemala|LMT CST CDT|62.4 60 50|0121212121|-24KhV.U 2efXV.U An0 mtd0 Nz0 ifB0 17b0 zDB0 11z0|13e5", "America/Guayaquil|QMT -05 -04|5e 50 40|0121|-1yVSK 2uILK rz0|27e5", "America/Guyana|LMT -0345 -03 -04|3Q.E 3J 30 40|0123|-2dvU7.k 2r6LQ.k Bxbf|80e4", "America/Halifax|LMT AST ADT AWT APT|4e.o 40 30 30 30|0121212121212121212121212121212121212121212121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsHJ.A xzzJ.A 1db0 3I30 1in0 3HX0 IL0 1E10 ML0 1yN0 Pb0 1Bd0 Mn0 1Bd0 Rz0 1w10 Xb0 1w10 LX0 1w10 Xb0 1w10 Lz0 1C10 Jz0 1E10 OL0 1yN0 Un0 1qp0 Xb0 1qp0 11X0 1w10 Lz0 1HB0 LX0 1C10 FX0 1w10 Xb0 1qp0 Xb0 1BB0 LX0 1td0 Xb0 1qp0 Xb0 Rf0 8x50 iu0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 3Qp0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 3Qp0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 6i10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|39e4", "America/Havana|HMT CST CDT|5t.A 50 40|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1Meuu.o 72zu.o ML0 sld0 An0 1Nd0 Db0 1Nd0 An0 6Ep0 An0 1Nd0 An0 JDd0 Mn0 1Ap0 On0 1fd0 11X0 1qN0 WL0 1wp0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 14n0 1ld0 14L0 1kN0 15b0 1kp0 1cL0 1cN0 1fz0 1a10 1fz0 1fB0 11z0 14p0 1nX0 11B0 1nX0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 1a10 1in0 1a10 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 17c0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 11A0 6i00 Rc0 1wo0 U00 1tA0 Rc0 1wo0 U00 1wo0 U00 1zc0 U00 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0|21e5", "America/Hermosillo|LMT MST CST PST MDT|7n.Q 70 60 80 60|0121212131414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0|64e4", "America/Indiana/Knox|CST CDT CWT CPT EST|60 50 50 50 50|0101023010101010101010101010101010101040101010101010101010101010101010101010101010101010141010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 11z0 1o10 11z0 1o10 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 3Cn0 8wp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 z8o0 1o00 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|", "America/Indiana/Marengo|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|0101023010101010101010104545454545414545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 dyN0 11z0 6fd0 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 jrz0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1VA0 LA0 1BX0 1e6p0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|", "America/Indiana/Petersburg|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|01010230101010101010101010104010101010101010101010141014545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 njX0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 3Fb0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 19co0 1o00 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|", "America/Indiana/Tell_City|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|01010230101010101010101010401054541010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 njX0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 8wn0 1cN0 1cL0 1cN0 1cK0 1cN0 1cL0 1qhd0 1o00 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|", "America/Indiana/Vevay|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|010102304545454545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 kPB0 Awn0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1lnd0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|", "America/Indiana/Vincennes|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|01010230101010101010101010101010454541014545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 g0p0 11z0 1o10 11z0 1qL0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 caL0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|", "America/Indiana/Winamac|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|01010230101010101010101010101010101010454541054545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 jrz0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1za0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|", "America/Inuvik|-00 PST PDDT MST MDT|0 80 60 70 60|0121343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-FnA0 tWU0 1fA0 wPe0 2pz0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|35e2", "America/Iqaluit|-00 EWT EPT EST EDDT EDT CST CDT|0 40 40 50 30 40 60 50|01234353535353535353535353535353535353535353567353535353535353535353535353535353535353535353535353535353535353535353535353|-16K00 7nX0 iv0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11C0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|67e2", "America/Jamaica|KMT EST EDT|57.a 50 40|0121212121212121212121|-2l1uQ.O 2uM1Q.O 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0|94e4", "America/Juneau|PST PWT PPT PDT YDT YST AKST AKDT|80 70 70 70 80 90 90 80|01203030303030303030303030403030356767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-17T20 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cM0 1cM0 1cL0 1cN0 1fz0 1a10 1fz0 co0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|33e3", "America/Kentucky/Louisville|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|0101010102301010101010101010101010101454545454545414545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 3Fd0 Nb0 LPd0 11z0 RB0 8x30 iw0 1nX1 e0X 9vd0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 xz0 gso0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1VA0 LA0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|", "America/Kentucky/Monticello|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|0101023010101010101010101010101010101010101010101010101010101010101010101454545454545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 SWp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|", "America/La_Paz|CMT BST -04|4w.A 3w.A 40|012|-1x37r.o 13b0|19e5", "America/Lima|LMT -05 -04|58.A 50 40|0121212121212121|-2tyGP.o 1bDzP.o zX0 1aN0 1cL0 1cN0 1cL0 1PrB0 zX0 1O10 zX0 6Gp0 zX0 98p0 zX0|11e6", "America/Los_Angeles|PST PDT PWT PPT|80 70 70 70|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261q0 1nX0 11B0 1nX0 SgN0 8x10 iy0 5Wp1 1VaX 3dA0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|15e6", "America/Maceio|LMT -03 -02|2m.Q 30 20|012121212121212121212121212121212121212121|-2glxB.8 HdLB.8 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 dMN0 Lz0 8Q10 WL0 1tB0 5z0 2mN0 On0|93e4", "America/Managua|MMT CST EST CDT|5J.c 60 50 50|0121313121213131|-1quie.M 1yAMe.M 4mn0 9Up0 Dz0 1K10 Dz0 s3F0 1KH0 DB0 9In0 k8p0 19X0 1o30 11y0|22e5", "America/Manaus|LMT -04 -03|40.4 40 30|01212121212121212121212121212121|-2glvX.U HdKX.U 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 dPB0 On0|19e5", "America/Martinique|FFMT AST ADT|44.k 40 30|0121|-2mPTT.E 2LPbT.E 19X0|39e4", "America/Matamoros|LMT CST CDT|6E 60 50|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1UQG0 2FjC0 1nX0 i6p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|45e4", "America/Mazatlan|LMT MST CST PST MDT|75.E 70 60 80 60|0121212131414141414141414141414141414141414141414141414141414141414141414141414141414141414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|44e4", "America/Menominee|CST CDT CWT CPT EST|60 50 50 50 50|01010230101041010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 LCN0 1fz0 6410 9Jb0 1cM0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|85e2", "America/Merida|LMT CST EST CDT|5W.s 60 50 50|0121313131313131313131313131313131313131313131313131313131313131313131313131313131313131|-1UQG0 2q2o0 2hz0 wu30 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|11e5", "America/Metlakatla|PST PWT PPT PDT AKST AKDT|80 70 70 70 90 80|01203030303030303030303030303030304545450454545454545454545454545454545454545454|-17T20 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1hU10 Rd0 1zb0 Op0 1zb0 Op0 1zb0 uM0 jB0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|14e2", "America/Mexico_City|LMT MST CST CDT CWT|6A.A 70 60 50 50|012121232324232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 gEn0 TX0 3xd0 Jb0 6zB0 SL0 e5d0 17b0 1Pff0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|20e6", "America/Miquelon|LMT AST -03 -02|3I.E 40 30 20|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2mKkf.k 2LTAf.k gQ10 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|61e2", "America/Moncton|EST AST ADT AWT APT|50 40 30 30 30|012121212121212121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsH0 CwN0 1in0 zAo0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1K10 Lz0 1zB0 NX0 1u10 Wn0 S20 8x50 iu0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 3Cp0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14n1 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 ReX 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|64e3", "America/Monterrey|LMT CST CDT|6F.g 60 50|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1UQG0 2FjC0 1nX0 i6p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|41e5", "America/Montevideo|LMT MMT -04 -03 -0330 -0230 -02 -0130|3I.P 3I.P 40 30 3u 2u 20 1u|012343434343434343434343435353636353636375363636363636363636363636363636363636363636363|-2tRUf.9 sVc0 8jcf.9 1db0 1dcu 1cLu 1dcu 1cLu ircu 11zu 1o0u 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 1qMu WLu 1fAu 1cLu 1o0u 11zu NAu 3jXu zXu Dq0u 19Xu pcu jz0 cm10 19X0 6tB0 1fbu 3o0u jX0 4vB0 xz0 3Cp0 mmu 1a10 IMu Db0 4c10 uL0 1Nd0 An0 1SN0 uL0 mp0 28L0 iPB0 un0 1SN0 xz0 1zd0 Lz0 1zd0 Rb0 1zd0 On0 1wp0 Rb0 s8p0 1fB0 1ip0 11z0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 11z0|17e5", "America/Toronto|EST EDT EWT EPT|50 40 40 40|01010101010101010101010101010101010101010101012301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-25TR0 1in0 11Wu 1nzu 1fD0 WJ0 1wr0 Nb0 1Ap0 On0 1zd0 On0 1wp0 TX0 1tB0 TX0 1tB0 TX0 1tB0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 4kM0 8x40 iv0 1o10 11z0 1nX0 11z0 1o10 11z0 1o10 1qL0 11D0 1nX0 11B0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|65e5", "America/Nassau|LMT EST EDT|59.u 50 40|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2kNuO.u 26XdO.u 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|24e4", "America/New_York|EST EDT EWT EPT|50 40 40 40|01010101010101010101010101010101010101010101010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261t0 1nX0 11B0 1nX0 11B0 1qL0 1a10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 RB0 8x40 iv0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e6", "America/Nipigon|EST EDT EWT EPT|50 40 40 40|010123010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-25TR0 1in0 Rnb0 3je0 8x40 iv0 19yN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|16e2", "America/Nome|NST NWT NPT BST BDT YST AKST AKDT|b0 a0 a0 b0 a0 90 90 80|012034343434343434343434343434343456767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-17SX0 8wW0 iB0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cl0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|38e2", "America/Noronha|LMT -02 -01|29.E 20 10|0121212121212121212121212121212121212121|-2glxO.k HdKO.k 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 2L0 2pB0 On0|30e2", "America/North_Dakota/Beulah|MST MDT MWT MPT CST CDT|70 60 60 60 60 50|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101014545454545454545454545454545454545454545454545454545454|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|", "America/North_Dakota/Center|MST MDT MWT MPT CST CDT|70 60 60 60 60 50|010102301010101010101010101010101010101010101010101010101014545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14o0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|", "America/North_Dakota/New_Salem|MST MDT MWT MPT CST CDT|70 60 60 60 60 50|010102301010101010101010101010101010101010101010101010101010101010101010101010101454545454545454545454545454545454545454545454545454545454545454545454|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14o0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|", "America/Ojinaga|LMT MST CST CDT MDT|6V.E 70 60 50 60|0121212323241414141414141414141414141414141414141414141414141414141414141414141414141414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e3", "America/Pangnirtung|-00 AST AWT APT ADDT ADT EDT EST CST CDT|0 40 30 30 20 30 40 50 60 50|012314151515151515151515151515151515167676767689767676767676767676767676767676767676767676767676767676767676767676767676767|-1XiM0 PnG0 8x50 iu0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1o00 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11C0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|14e2", "America/Paramaribo|LMT PMT PMT -0330 -03|3E.E 3E.Q 3E.A 3u 30|01234|-2nDUj.k Wqo0.c qanX.I 1yVXN.o|24e4", "America/Phoenix|MST MDT MWT|70 60 60|01010202010|-261r0 1nX0 11B0 1nX0 SgN0 4Al1 Ap0 1db0 SWqX 1cL0|42e5", "America/Port-au-Prince|PPMT EST EDT|4N 50 40|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-28RHb 2FnMb 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14q0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 i6n0 1nX0 11B0 1nX0 d430 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 3iN0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e5", "America/Rio_Branco|LMT -05 -04|4v.c 50 40|01212121212121212121212121212121|-2glvs.M HdLs.M 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 NBd0 d5X0|31e4", "America/Porto_Velho|LMT -04 -03|4f.A 40 30|012121212121212121212121212121|-2glvI.o HdKI.o 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0|37e4", "America/Puerto_Rico|AST AWT APT|40 30 30|0120|-17lU0 7XT0 iu0|24e5", "America/Punta_Arenas|SMT -05 -04 -03|4G.K 50 40 30|0102021212121212121232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-2q2jh.e fJAh.e 5knG.K 1Vzh.e jRAG.K 1pbh.e 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 nHX0 op0 blz0 ko0 Qeo0 WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0|", "America/Rainy_River|CST CDT CWT CPT|60 50 50 50|010123010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-25TQ0 1in0 Rnb0 3je0 8x30 iw0 19yN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|842", "America/Rankin_Inlet|-00 CST CDDT CDT EST|0 60 40 50 50|012131313131313131313131313131313131313131313431313131313131313131313131313131313131313131313131313131313131313131313131|-vDc0 keu0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|26e2", "America/Recife|LMT -03 -02|2j.A 30 20|0121212121212121212121212121212121212121|-2glxE.o HdLE.o 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 2L0 2pB0 On0|33e5", "America/Regina|LMT MST MDT MWT MPT CST|6W.A 70 60 60 60 60|012121212121212121212121341212121212121212121212121215|-2AD51.o uHe1.o 1in0 s2L0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 66N0 1cL0 1cN0 19X0 1fB0 1cL0 1fB0 1cL0 1cN0 1cL0 M30 8x20 ix0 1ip0 1cL0 1ip0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 3NB0 1cL0 1cN0|19e4", "America/Resolute|-00 CST CDDT CDT EST|0 60 40 50 50|012131313131313131313131313131313131313131313431313131313431313131313131313131313131313131313131313131313131313131313131|-SnA0 GWS0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|229", "America/Santarem|LMT -04 -03|3C.M 40 30|0121212121212121212121212121212|-2glwl.c HdLl.c 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 NBd0|21e4", "America/Santiago|SMT -05 -04 -03|4G.K 50 40 30|010202121212121212321232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-2q2jh.e fJAh.e 5knG.K 1Vzh.e jRAG.K 1pbh.e 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 nHX0 op0 9Bz0 jb0 1oN0 ko0 Qeo0 WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0|62e5", "America/Santo_Domingo|SDMT EST EDT -0430 AST|4E 50 40 4u 40|01213131313131414|-1ttjk 1lJMk Mn0 6sp0 Lbu 1Cou yLu 1RAu wLu 1QMu xzu 1Q0u xXu 1PAu 13jB0 e00|29e5", "America/Sao_Paulo|LMT -03 -02|36.s 30 20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glwR.w HdKR.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 pTd0 PX0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 1C10 Lz0 1Ip0 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|20e6", "America/Scoresbysund|LMT -02 -01 +00|1r.Q 20 10 0|0121323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2a5Ww.8 2z5ew.8 1a00 1cK0 1cL0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|452", "America/Sitka|PST PWT PPT PDT YST AKST AKDT|80 70 70 70 90 90 80|01203030303030303030303030303030345656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-17T20 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 co0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|90e2", "America/St_Johns|NST NDT NST NDT NWT NPT NDDT|3u.Q 2u.Q 3u 2u 2u 2u 1u|01010101010101010101010101010101010102323232323232324523232323232323232323232323232323232323232323232323232323232323232323232323232323232326232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-28oit.8 14L0 1nB0 1in0 1gm0 Dz0 1JB0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1fB0 19X0 1fB0 19X0 10O0 eKX.8 19X0 1iq0 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 WL0 1qN0 WL0 1qN0 7UHu itu 1tB0 WL0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1tB0 WL0 1ld0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14n1 1lb0 14p0 1nW0 11C0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|11e4", "America/Swift_Current|LMT MST MDT MWT MPT CST|7b.k 70 60 60 60 60|012134121212121212121215|-2AD4M.E uHdM.E 1in0 UGp0 8x20 ix0 1o10 17b0 1ip0 11z0 1o10 11z0 1o10 11z0 isN0 1cL0 3Cp0 1cL0 1cN0 11z0 1qN0 WL0 pMp0|16e3", "America/Tegucigalpa|LMT CST CDT|5M.Q 60 50|01212121|-1WGGb.8 2ETcb.8 WL0 1qN0 WL0 GRd0 AL0|11e5", "America/Thule|LMT AST ADT|4z.8 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a5To.Q 31NBo.Q 1cL0 1cN0 1cL0 1fB0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|656", "America/Thunder_Bay|CST EST EWT EPT EDT|60 50 40 40 40|0123141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141|-2q5S0 1iaN0 8x40 iv0 XNB0 1cL0 1cN0 1fz0 1cN0 1cL0 3Cp0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|11e4", "America/Vancouver|PST PDT PWT PPT|80 70 70 70|0102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-25TO0 1in0 UGp0 8x10 iy0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e5", "America/Whitehorse|YST YDT YWT YPT YDDT PST PDT|90 80 80 80 70 80 70|0101023040565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-25TN0 1in0 1o10 13V0 Ser0 8x00 iz0 LCL0 1fA0 3NA0 vrd0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e3", "America/Winnipeg|CST CDT CWT CPT|60 50 50 50|010101023010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aIi0 WL0 3ND0 1in0 Jap0 Rb0 aCN0 8x30 iw0 1tB0 11z0 1ip0 11z0 1o10 11z0 1o10 11z0 1rd0 10L0 1op0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 1cL0 1cN0 11z0 6i10 WL0 6i10 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|66e4", "America/Yakutat|YST YWT YPT YDT AKST AKDT|90 80 80 80 90 80|01203030303030303030303030303030304545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-17T10 8x00 iz0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cn0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|642", "America/Yellowknife|-00 MST MWT MPT MDDT MDT|0 70 60 60 50 60|012314151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151|-1pdA0 hix0 8x20 ix0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|19e3", "Antarctica/Casey|-00 +08 +11|0 -80 -b0|01212121|-2q00 1DjS0 T90 40P0 KL0 blz0 3m10|10", "Antarctica/Davis|-00 +07 +05|0 -70 -50|01012121|-vyo0 iXt0 alj0 1D7v0 VB0 3Wn0 KN0|70", "Antarctica/DumontDUrville|-00 +10|0 -a0|0101|-U0o0 cfq0 bFm0|80", "Antarctica/Macquarie|AEST AEDT -00 +11|-a0 -b0 0 -b0|0102010101010101010101010101010101010101010101010101010101010101010101010101010101010101013|-29E80 19X0 4SL0 1ayy0 Lvs0 1cM0 1o00 Rc0 1wo0 Rc0 1wo0 U00 1wo0 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 1cM0|1", "Antarctica/Mawson|-00 +06 +05|0 -60 -50|012|-CEo0 2fyk0|60", "Pacific/Auckland|NZMT NZST NZST NZDT|-bu -cu -c0 -d0|01020202020202020202020202023232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-1GCVu Lz0 1tB0 11zu 1o0u 11zu 1o0u 11zu 1o0u 14nu 1lcu 14nu 1lcu 1lbu 11Au 1nXu 11Au 1nXu 11Au 1nXu 11Au 1nXu 11Au 1qLu WMu 1qLu 11Au 1n1bu IM0 1C00 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1qM0 14o0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1io0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00|14e5", "Antarctica/Palmer|-00 -03 -04 -02|0 30 40 20|0121212121213121212121212121212121212121212121212121212121212121212121212121212121|-cao0 nD0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 jsN0 14N0 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0|40", "Antarctica/Rothera|-00 -03|0 30|01|gOo0|130", "Antarctica/Syowa|-00 +03|0 -30|01|-vs00|20", "Antarctica/Troll|-00 +00 +02|0 0 -20|01212121212121212121212121212121212121212121212121212121212121212121|1puo0 hd0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|40", "Antarctica/Vostok|-00 +06|0 -60|01|-tjA0|25", "Europe/Oslo|CET CEST|-10 -20|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2awM0 Qm0 W6o0 5pf0 WM0 1fA0 1cM0 1cM0 1cM0 1cM0 wJc0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1qM0 WM0 zpc0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|62e4", "Asia/Riyadh|LMT +03|-36.Q -30|01|-TvD6.Q|57e5", "Asia/Almaty|LMT +05 +06 +07|-57.M -50 -60 -70|012323232323232323232321232323232323232323232323232|-1Pc57.M eUo7.M 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0|15e5", "Asia/Amman|LMT EET EEST|-2n.I -20 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1yW2n.I 1HiMn.I KL0 1oN0 11b0 1oN0 11b0 1pd0 1dz0 1cp0 11b0 1op0 11b0 fO10 1db0 1e10 1cL0 1cN0 1cL0 1cN0 1fz0 1pd0 10n0 1ld0 14n0 1hB0 15b0 1ip0 19X0 1cN0 1cL0 1cN0 17b0 1ld0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1So0 y00 1fc0 1dc0 1co0 1dc0 1cM0 1cM0 1cM0 1o00 11A0 1lc0 17c0 1cM0 1cM0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 4bX0 Dd0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|25e5", "Asia/Anadyr|LMT +12 +13 +14 +11|-bN.U -c0 -d0 -e0 -b0|01232121212121212121214121212121212121212121212121212121212141|-1PcbN.U eUnN.U 23CL0 1db0 2q10 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|13e3", "Asia/Aqtau|LMT +04 +05 +06|-3l.4 -40 -50 -60|012323232323232323232123232312121212121212121212|-1Pc3l.4 eUnl.4 24PX0 2pX0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|15e4", "Asia/Aqtobe|LMT +04 +05 +06|-3M.E -40 -50 -60|0123232323232323232321232323232323232323232323232|-1Pc3M.E eUnM.E 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0|27e4", "Asia/Ashgabat|LMT +04 +05 +06|-3R.w -40 -50 -60|0123232323232323232323212|-1Pc3R.w eUnR.w 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0|41e4", "Asia/Atyrau|LMT +03 +05 +06 +04|-3r.I -30 -50 -60 -40|01232323232323232323242323232323232324242424242|-1Pc3r.I eUor.I 24PW0 2pX0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 2sp0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|", "Asia/Baghdad|BMT +03 +04|-2V.A -30 -40|012121212121212121212121212121212121212121212121212121|-26BeV.A 2ACnV.A 11b0 1cp0 1dz0 1dd0 1db0 1cN0 1cp0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1de0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0|66e5", "Asia/Qatar|LMT +04 +03|-3q.8 -40 -30|012|-21Jfq.8 27BXq.8|96e4", "Asia/Baku|LMT +03 +04 +05|-3j.o -30 -40 -50|01232323232323232323232123232323232323232323232323232323232323232|-1Pc3j.o 1jUoj.o WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cM0 9Je0 1o00 11z0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e5", "Asia/Bangkok|BMT +07|-6G.4 -70|01|-218SG.4|15e6", "Asia/Barnaul|LMT +06 +07 +08|-5z -60 -70 -80|0123232323232323232323212323232321212121212121212121212121212121212|-21S5z pCnz 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 p90 LE0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|", "Asia/Beirut|EET EEST|-20 -30|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-21aq0 1on0 1410 1db0 19B0 1in0 1ip0 WL0 1lQp0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 q6N0 En0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1op0 11b0 dA10 17b0 1iN0 17b0 1iN0 17b0 1iN0 17b0 1vB0 SL0 1mp0 13z0 1iN0 17b0 1iN0 17b0 1jd0 12n0 1a10 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0|22e5", "Asia/Bishkek|LMT +05 +06 +07|-4W.o -50 -60 -70|012323232323232323232321212121212121212121212121212|-1Pc4W.o eUnW.o 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2e00 1tX0 17b0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1cPu 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0|87e4", "Asia/Brunei|LMT +0730 +08|-7D.E -7u -80|012|-1KITD.E gDc9.E|42e4", "Asia/Kolkata|MMT IST +0630|-5l.a -5u -6u|012121|-2zOtl.a 1r2LP.a 1un0 HB0 7zX0|15e6", "Asia/Chita|LMT +08 +09 +10|-7x.Q -80 -90 -a0|012323232323232323232321232323232323232323232323232323232323232312|-21Q7x.Q pAnx.Q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3re0|33e4", "Asia/Choibalsan|LMT +07 +08 +10 +09|-7C -70 -80 -a0 -90|0123434343434343434343434343434343434343434343424242|-2APHC 2UkoC cKn0 1da0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 3Db0 h1f0 1cJ0 1cP0 1cJ0|38e3", "Asia/Shanghai|CST CDT|-80 -90|010101010101010101010101010|-1c2w0 Rz0 11d0 1wL0 A10 8HX0 1G10 Tz0 1ip0 1jX0 1cN0 11b0 1oN0 aL0 1tU30 Rb0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0|23e6", "Asia/Colombo|MMT +0530 +06 +0630|-5j.w -5u -60 -6u|01231321|-2zOtj.w 1rFbN.w 1zzu 7Apu 23dz0 11zu n3cu|22e5", "Asia/Dhaka|HMT +0630 +0530 +06 +07|-5R.k -6u -5u -60 -70|0121343|-18LFR.k 1unn.k HB0 m6n0 2kxbu 1i00|16e6", "Asia/Damascus|LMT EET EEST|-2p.c -20 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-21Jep.c Hep.c 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1xRB0 11X0 1oN0 10L0 1pB0 11b0 1oN0 10L0 1mp0 13X0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 Nb0 1AN0 Nb0 bcp0 19X0 1gp0 19X0 3ld0 1xX0 Vd0 1Bz0 Sp0 1vX0 10p0 1dz0 1cN0 1cL0 1db0 1db0 1g10 1an0 1ap0 1db0 1fd0 1db0 1cN0 1db0 1dd0 1db0 1cp0 1dz0 1c10 1dX0 1cN0 1db0 1dd0 1db0 1cN0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1db0 1cN0 1db0 1cN0 19z0 1fB0 1qL0 11B0 1on0 Wp0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0|26e5", "Asia/Dili|LMT +08 +09|-8m.k -80 -90|01212|-2le8m.k 1dnXm.k 1nfA0 Xld0|19e4", "Asia/Dubai|LMT +04|-3F.c -40|01|-21JfF.c|39e5", "Asia/Dushanbe|LMT +05 +06 +07|-4z.c -50 -60 -70|012323232323232323232321|-1Pc4z.c eUnz.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2hB0|76e4", "Asia/Famagusta|LMT EET EEST +03|-2f.M -20 -30 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212312121212121212121212121212121212121212121|-1Vc2f.M 2a3cf.M 1cL0 1qp0 Xz0 19B0 19X0 1fB0 1db0 1cp0 1cL0 1fB0 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1o30 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 15U0 2Ks0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|", "Asia/Gaza|EET EEST IST IDT|-20 -30 -20 -30|0101010101010101010101010101010123232323232323232323232323232320101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-1c2q0 5Rb0 10r0 1px0 10N0 1pz0 16p0 1jB0 16p0 1jx0 pBd0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 dW0 hfB0 Db0 1fB0 Rb0 bXd0 gM0 8Q00 IM0 1wM0 11z0 1C10 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 M10 C00 17c0 1io0 17c0 1io0 17c0 1o00 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 17c0 1io0 18N0 1bz0 19z0 1gp0 1610 1iL0 11z0 1o10 14o0 1lA1 SKX 1xd1 MKX 1AN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nz0 1220 1qL0 WN0 1qL0 WN0 1qL0 11c0 1oo0 11c0 1rc0 Wo0 1rc0 Wo0 1rc0 11c0 1oo0 11c0 1oo0 11c0 1oo0 11c0 1rc0 Wo0 1rc0 11c0 1oo0 11c0 1oo0 11c0 1oo0 11c0 1oo0 11c0 1rc0 Wo0 1rc0 11c0 1oo0 11c0 1oo0 11c0 1oo0 11c0 1rc0|18e5", "Asia/Hebron|EET EEST IST IDT|-20 -30 -20 -30|010101010101010101010101010101012323232323232323232323232323232010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-1c2q0 5Rb0 10r0 1px0 10N0 1pz0 16p0 1jB0 16p0 1jx0 pBd0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 dW0 hfB0 Db0 1fB0 Rb0 bXd0 gM0 8Q00 IM0 1wM0 11z0 1C10 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 M10 C00 17c0 1io0 17c0 1io0 17c0 1o00 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 17c0 1io0 18N0 1bz0 19z0 1gp0 1610 1iL0 12L0 1mN0 14o0 1lc0 Tb0 1xd1 MKX bB0 cn0 1cN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nz0 1220 1qL0 WN0 1qL0 WN0 1qL0 11c0 1oo0 11c0 1rc0 Wo0 1rc0 Wo0 1rc0 11c0 1oo0 11c0 1oo0 11c0 1oo0 11c0 1rc0 Wo0 1rc0 11c0 1oo0 11c0 1oo0 11c0 1oo0 11c0 1oo0 11c0 1rc0 Wo0 1rc0 11c0 1oo0 11c0 1oo0 11c0 1oo0 11c0 1rc0|25e4", "Asia/Ho_Chi_Minh|LMT PLMT +07 +08 +09|-76.E -76.u -70 -80 -90|0123423232|-2yC76.E bK00.a 1h7b6.u 5lz0 18o0 3Oq0 k5b0 aW00 BAM0|90e5", "Asia/Hong_Kong|LMT HKT HKST HKWT JST|-7A.G -80 -90 -8u -90|0123412121212121212121212121212121212121212121212121212121212121212121|-2CFH0 1taO0 Hc0 xUu 9tBu 11z0 1tDu Rc0 1wo0 11A0 1cM0 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1nX0 U10 1tz0 U10 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 Rd0 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 17d0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1cL0 6fd0 14n0|73e5", "Asia/Hovd|LMT +06 +07 +08|-66.A -60 -70 -80|012323232323232323232323232323232323232323232323232|-2APG6.A 2Uko6.A cKn0 1db0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 kEp0 1cJ0 1cP0 1cJ0|81e3", "Asia/Irkutsk|IMT +07 +08 +09|-6V.5 -70 -80 -90|01232323232323232323232123232323232323232323232323232323232323232|-21zGV.5 pjXV.5 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|60e4", "Europe/Istanbul|IMT EET EEST +03 +04|-1U.U -20 -30 -30 -40|0121212121212121212121212121212121212121212121234312121212121212121212121212121212121212121212121212121212121212123|-2ogNU.U dzzU.U 11b0 8tB0 1on0 1410 1db0 19B0 1in0 3Rd0 Un0 1oN0 11b0 zSN0 CL0 mp0 1Vz0 1gN0 8yn0 1yp0 ML0 1kp0 17b0 1ip0 17b0 1fB0 19X0 1ip0 19X0 1ip0 17b0 qdB0 38L0 1jd0 Tz0 l6O0 11A0 WN0 1qL0 TB0 1tX0 U10 1tz0 11B0 1in0 17d0 z90 cne0 pb0 2Cp0 1800 14o0 1dc0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1a00 1fA0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WO0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 Xc0 1qo0 WM0 1qM0 11A0 1o00 1200 1nA0 11A0 1tA0 U00 15w0|13e6", "Asia/Jakarta|BMT +0720 +0730 +09 +08 WIB|-77.c -7k -7u -90 -80 -70|01232425|-1Q0Tk luM0 mPzO 8vWu 6kpu 4PXu xhcu|31e6", "Asia/Jayapura|LMT +09 +0930 WIT|-9m.M -90 -9u -90|0123|-1uu9m.M sMMm.M L4nu|26e4", "Asia/Jerusalem|JMT IST IDT IDDT|-2k.E -20 -30 -40|012121212121321212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-26Bek.E SyMk.E 5Rb0 10r0 1px0 10N0 1pz0 16p0 1jB0 16p0 1jx0 3LB0 Em0 or0 1cn0 1dB0 16n0 10O0 1ja0 1tC0 14o0 1cM0 1a00 11A0 1Na0 An0 1MP0 AJ0 1Kp0 LC0 1oo0 Wl0 EQN0 Db0 1fB0 Rb0 bXd0 gM0 8Q00 IM0 1wM0 11z0 1C10 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 1hB0 1dX0 1ep0 1aL0 1eN0 17X0 1nf0 11z0 1tB0 19W0 1e10 17b0 1ep0 1gL0 18N0 1fz0 1eN0 17b0 1gq0 1gn0 19d0 1dz0 1c10 17X0 1hB0 1gn0 19d0 1dz0 1c10 17X0 1kp0 1dz0 1c10 1aL0 1eN0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0|81e4", "Asia/Kabul|+04 +0430|-40 -4u|01|-10Qs0|46e5", "Asia/Kamchatka|LMT +11 +12 +13|-ay.A -b0 -c0 -d0|012323232323232323232321232323232323232323232323232323232323212|-1SLKy.A ivXy.A 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|18e4", "Asia/Karachi|LMT +0530 +0630 +05 PKT PKST|-4s.c -5u -6u -50 -50 -60|012134545454|-2xoss.c 1qOKW.c 7zX0 eup0 LqMu 1fy00 1cL0 dK10 11b0 1610 1jX0|24e6", "Asia/Urumqi|LMT +06|-5O.k -60|01|-1GgtO.k|32e5", "Asia/Kathmandu|LMT +0530 +0545|-5F.g -5u -5J|012|-21JhF.g 2EGMb.g|12e5", "Asia/Khandyga|LMT +08 +09 +10 +11|-92.d -80 -90 -a0 -b0|0123232323232323232323212323232323232323232323232343434343434343432|-21Q92.d pAp2.d 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 qK0 yN0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 17V0 7zD0|66e2", "Asia/Krasnoyarsk|LMT +06 +07 +08|-6b.q -60 -70 -80|01232323232323232323232123232323232323232323232323232323232323232|-21Hib.q prAb.q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|10e5", "Asia/Kuala_Lumpur|SMT +07 +0720 +0730 +09 +08|-6T.p -70 -7k -7u -90 -80|0123435|-2Bg6T.p 17anT.p l5XE 17bO 8Fyu 1so1u|71e5", "Asia/Kuching|LMT +0730 +08 +0820 +09|-7l.k -7u -80 -8k -90|0123232323232323242|-1KITl.k gDbP.k 6ynu AnE 1O0k AnE 1NAk AnE 1NAk AnE 1NAk AnE 1O0k AnE 1NAk AnE pAk 8Fz0|13e4", "Asia/Macau|LMT CST +09 +10 CDT|-7y.a -80 -90 -a0 -90|012323214141414141414141414141414141414141414141414141414141414141414141|-2CFHy.a 1uqKy.a PX0 1kn0 15B0 11b0 4Qq0 1oM0 11c0 1ko0 1u00 11A0 1cM0 11c0 1o00 11A0 1o00 11A0 1oo0 1400 1o00 11A0 1o00 U00 1tA0 U00 1wo0 Rc0 1wru U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 Rd0 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 17d0 1cK0 1cO0 1cK0 1cO0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1cL0 6fd0 14n0|57e4", "Asia/Magadan|LMT +10 +11 +12|-a3.c -a0 -b0 -c0|012323232323232323232321232323232323232323232323232323232323232312|-1Pca3.c eUo3.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3Cq0|95e3", "Asia/Makassar|LMT MMT +08 +09 WITA|-7V.A -7V.A -80 -90 -80|01234|-21JjV.A vfc0 myLV.A 8ML0|15e5", "Asia/Manila|PST PDT JST|-80 -90 -90|010201010|-1kJI0 AL0 cK10 65X0 mXB0 vX0 VK10 1db0|24e6", "Asia/Nicosia|LMT EET EEST|-2d.s -20 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1Vc2d.s 2a3cd.s 1cL0 1qp0 Xz0 19B0 19X0 1fB0 1db0 1cp0 1cL0 1fB0 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1o30 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|32e4", "Asia/Novokuznetsk|LMT +06 +07 +08|-5M.M -60 -70 -80|012323232323232323232321232323232323232323232323232323232323212|-1PctM.M eULM.M 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|55e4", "Asia/Novosibirsk|LMT +06 +07 +08|-5v.E -60 -70 -80|0123232323232323232323212323212121212121212121212121212121212121212|-21Qnv.E pAFv.E 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 ml0 Os0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 4eN0|15e5", "Asia/Omsk|LMT +05 +06 +07|-4R.u -50 -60 -70|01232323232323232323232123232323232323232323232323232323232323232|-224sR.u pMLR.u 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|12e5", "Asia/Oral|LMT +03 +05 +06 +04|-3p.o -30 -50 -60 -40|01232323232323232424242424242424242424242424242|-1Pc3p.o eUop.o 23CK0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 1cM0 IM0 1EM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|27e4", "Asia/Pontianak|LMT PMT +0730 +09 +08 WITA WIB|-7h.k -7h.k -7u -90 -80 -80 -70|012324256|-2ua7h.k XE00 munL.k 8Rau 6kpu 4PXu xhcu Wqnu|23e4", "Asia/Pyongyang|LMT KST JST KST|-8n -8u -90 -90|012313|-2um8n 97XR 1lTzu 2Onc0 6BA0|29e5", "Asia/Qostanay|LMT +04 +05 +06|-4e.s -40 -50 -60|012323232323232323232123232323232323232323232323|-1Pc4e.s eUoe.s 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|", "Asia/Qyzylorda|LMT +04 +05 +06|-4l.Q -40 -50 -60|01232323232323232323232323232323232323232323232|-1Pc4l.Q eUol.Q 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 3ao0 1EM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 zQl0|73e4", "Asia/Rangoon|RMT +0630 +09|-6o.L -6u -90|0121|-21Jio.L SmnS.L 7j9u|48e5", "Asia/Sakhalin|LMT +09 +11 +12 +10|-9u.M -90 -b0 -c0 -a0|01232323232323232323232423232323232424242424242424242424242424242|-2AGVu.M 1BoMu.M 1qFa0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 2pB0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|58e4", "Asia/Samarkand|LMT +04 +05 +06|-4r.R -40 -50 -60|01232323232323232323232|-1Pc4r.R eUor.R 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0|36e4", "Asia/Seoul|LMT KST JST KST KDT KDT|-8r.Q -8u -90 -90 -a0 -9u|012343434343151515151515134343|-2um8r.Q 97XV.Q 1m1zu 6CM0 Fz0 1kN0 14n0 1kN0 14L0 1zd0 On0 69B0 2I0u OL0 1FB0 Rb0 1qN0 TX0 1tB0 TX0 1tB0 TX0 1tB0 TX0 2ap0 12FBu 11A0 1o00 11A0|23e6", "Asia/Srednekolymsk|LMT +10 +11 +12|-ae.Q -a0 -b0 -c0|01232323232323232323232123232323232323232323232323232323232323232|-1Pcae.Q eUoe.Q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|35e2", "Asia/Taipei|CST JST CDT|-80 -90 -90|01020202020202020202020202020202020202020|-1iw80 joM0 1yo0 Tz0 1ip0 1jX0 1cN0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 10N0 1BX0 10p0 1pz0 10p0 1pz0 10p0 1db0 1dd0 1db0 1cN0 1db0 1cN0 1db0 1cN0 1db0 1BB0 ML0 1Bd0 ML0 uq10 1db0 1cN0 1db0 97B0 AL0|74e5", "Asia/Tashkent|LMT +05 +06 +07|-4B.b -50 -60 -70|012323232323232323232321|-1Pc4B.b eUnB.b 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0|23e5", "Asia/Tbilisi|TBMT +03 +04 +05|-2X.b -30 -40 -50|0123232323232323232323212121232323232323232323212|-1Pc2X.b 1jUnX.b WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cK0 1cL0 1cN0 1cL0 1cN0 2pz0 1cL0 1fB0 3Nz0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 An0 Os0 WM0|11e5", "Asia/Tehran|LMT TMT +0330 +04 +05 +0430|-3p.I -3p.I -3u -40 -50 -4u|01234325252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-2btDp.I 1d3c0 1huLT.I TXu 1pz0 sN0 vAu 1cL0 1dB0 1en0 pNB0 UL0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 64p0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0|14e6", "Asia/Thimphu|LMT +0530 +06|-5W.A -5u -60|012|-Su5W.A 1BGMs.A|79e3", "Asia/Tokyo|JST JDT|-90 -a0|010101010|-QJJ0 Rc0 1lc0 14o0 1zc0 Oo0 1zc0 Oo0|38e6", "Asia/Tomsk|LMT +06 +07 +08|-5D.P -60 -70 -80|0123232323232323232323212323232323232323232323212121212121212121212|-21NhD.P pxzD.P 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 co0 1bB0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3Qp0|10e5", "Asia/Ulaanbaatar|LMT +07 +08 +09|-77.w -70 -80 -90|012323232323232323232323232323232323232323232323232|-2APH7.w 2Uko7.w cKn0 1db0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 kEp0 1cJ0 1cP0 1cJ0|12e5", "Asia/Ust-Nera|LMT +08 +09 +12 +11 +10|-9w.S -80 -90 -c0 -b0 -a0|012343434343434343434345434343434343434343434343434343434343434345|-21Q9w.S pApw.S 23CL0 1d90 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 17V0 7zD0|65e2", "Asia/Vladivostok|LMT +09 +10 +11|-8L.v -90 -a0 -b0|01232323232323232323232123232323232323232323232323232323232323232|-1SJIL.v itXL.v 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|60e4", "Asia/Yakutsk|LMT +08 +09 +10|-8C.W -80 -90 -a0|01232323232323232323232123232323232323232323232323232323232323232|-21Q8C.W pAoC.W 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|28e4", "Asia/Yekaterinburg|LMT PMT +04 +05 +06|-42.x -3J.5 -40 -50 -60|012343434343434343434343234343434343434343434343434343434343434343|-2ag42.x 7mQh.s qBvJ.5 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|14e5", "Asia/Yerevan|LMT +03 +04 +05|-2W -30 -40 -50|0123232323232323232323212121212323232323232323232323232323232|-1Pc2W 1jUnW WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 4RX0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|13e5", "Atlantic/Azores|HMT -02 -01 +00 WET|1S.w 20 10 0 0|01212121212121212121212121212121212121212121232123212321232121212121212121212121212121212121212121232323232323232323232323232323234323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2ldW0 aPX0 Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 3Co0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 qIl0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cL0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|25e4", "Atlantic/Bermuda|LMT AST ADT|4j.i 40 30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1BnRE.G 1LTbE.G 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|65e3", "Atlantic/Canary|LMT -01 WET WEST|11.A 10 0 -10|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UtaW.o XPAW.o 1lAK0 1a10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|54e4", "Atlantic/Cape_Verde|LMT -02 -01|1y.4 20 10|01212|-2ldW0 1eEo0 7zX0 1djf0|50e4", "Atlantic/Faroe|LMT WET WEST|r.4 0 -10|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2uSnw.U 2Wgow.U 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|49e3", "Atlantic/Madeira|FMT -01 +00 +01 WET WEST|17.A 10 0 -10 0 -10|01212121212121212121212121212121212121212121232123212321232121212121212121212121212121212121212121454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-2ldX0 aPX0 Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 3Co0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 qIl0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|27e4", "Atlantic/Reykjavik|LMT -01 +00 GMT|1s 10 0 0|012121212121212121212121212121212121212121212121212121212121212121213|-2uWmw mfaw 1Bd0 ML0 1LB0 Cn0 1LB0 3fX0 C10 HrX0 1cO0 LB0 1EL0 LA0 1C00 Oo0 1wo0 Rc0 1wo0 Rc0 1wo0 Rc0 1zc0 Oo0 1zc0 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1lc0 14o0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 14o0|12e4", "Atlantic/South_Georgia|-02|20|0||30", "Atlantic/Stanley|SMT -04 -03 -02|3P.o 40 30 20|012121212121212323212121212121212121212121212121212121212121212121212|-2kJw8.A 12bA8.A 19X0 1fB0 19X0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 Cn0 1Cc10 WL0 1qL0 U10 1tz0 2mN0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1tz0 U10 1tz0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1tz0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qN0 U10 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 U10 1tz0 U10 1tz0 U10|21e2", "Australia/Sydney|AEST AEDT|-a0 -b0|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-293lX xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 14o0 1o00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 11A0 1o00 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|40e5", "Australia/Adelaide|ACST ACDT|-9u -au|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-293lt xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 Oo0 1zc0 WM0 1qM0 Rc0 1zc0 U00 1tA0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|11e5", "Australia/Brisbane|AEST AEDT|-a0 -b0|01010101010101010|-293lX xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 H1A0 Oo0 1zc0 Oo0 1zc0 Oo0|20e5", "Australia/Broken_Hill|ACST ACDT|-9u -au|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-293lt xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 14o0 1o00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|18e3", "Australia/Currie|AEST AEDT|-a0 -b0|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-29E80 19X0 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|746", "Australia/Darwin|ACST ACDT|-9u -au|010101010|-293lt xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0|12e4", "Australia/Eucla|+0845 +0945|-8J -9J|0101010101010101010|-293kI xcX 10jd0 yL0 1cN0 1cL0 1gSp0 Oo0 l5A0 Oo0 iJA0 G00 zU00 IM0 1qM0 11A0 1o00 11A0|368", "Australia/Hobart|AEST AEDT|-a0 -b0|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-29E80 19X0 10jd0 yL0 1cN0 1cL0 1fB0 19X0 VfB0 1cM0 1o00 Rc0 1wo0 Rc0 1wo0 U00 1wo0 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|21e4", "Australia/Lord_Howe|AEST +1030 +1130 +11|-a0 -au -bu -b0|0121212121313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313|raC0 1zdu Rb0 1zd0 On0 1zd0 On0 1zd0 On0 1zd0 TXu 1qMu WLu 1tAu WLu 1tAu TXu 1tAu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu 11zu 1o0u 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 11Au 1nXu 1qMu 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 1qMu 11zu 1o0u WLu 1qMu 14nu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu|347", "Australia/Lindeman|AEST AEDT|-a0 -b0|010101010101010101010|-293lX xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 H1A0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0|10", "Australia/Melbourne|AEST AEDT|-a0 -b0|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-293lX xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1qM0 11A0 1tA0 U00 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 11A0 1o00 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|39e5", "Australia/Perth|AWST AWDT|-80 -90|0101010101010101010|-293jX xcX 10jd0 yL0 1cN0 1cL0 1gSp0 Oo0 l5A0 Oo0 iJA0 G00 zU00 IM0 1qM0 11A0 1o00 11A0|18e5", "CET|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 16M0 1gMM0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|", "Pacific/Easter|EMT -07 -06 -05|7h.s 70 60 50|012121212121212121212121212123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-1uSgG.w 1s4IG.w WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 2pA0 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0|30e2", "CST6CDT|CST CDT CWT CPT|60 50 50 50|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|", "EET|EET EEST|-20 -30|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|hDB0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|", "Europe/Dublin|DMT IST GMT BST IST|p.l -y.D 0 -10 -10|01232323232324242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242|-2ax9y.D Rc0 1fzy.D 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 g600 14o0 1wo0 17c0 1io0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1a00 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1tA0 IM0 90o0 U00 1tA0 U00 1tA0 U00 1tA0 U00 1tA0 WM0 1qM0 WM0 1qM0 WM0 1tA0 U00 1tA0 U00 1tA0 11z0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5", "EST|EST|50|0||", "EST5EDT|EST EDT EWT EPT|50 40 40 40|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261t0 1nX0 11B0 1nX0 SgN0 8x40 iv0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|", "Etc/GMT-0|GMT|0|0||", "Etc/GMT-1|+01|-10|0||", "Pacific/Port_Moresby|+10|-a0|0||25e4", "Etc/GMT-11|+11|-b0|0||", "Pacific/Tarawa|+12|-c0|0||29e3", "Etc/GMT-13|+13|-d0|0||", "Etc/GMT-14|+14|-e0|0||", "Etc/GMT-2|+02|-20|0||", "Etc/GMT-3|+03|-30|0||", "Etc/GMT-4|+04|-40|0||", "Etc/GMT-5|+05|-50|0||", "Etc/GMT-6|+06|-60|0||", "Indian/Christmas|+07|-70|0||21e2", "Etc/GMT-8|+08|-80|0||", "Pacific/Palau|+09|-90|0||21e3", "Etc/GMT+1|-01|10|0||", "Etc/GMT+10|-10|a0|0||", "Etc/GMT+11|-11|b0|0||", "Etc/GMT+12|-12|c0|0||", "Etc/GMT+3|-03|30|0||", "Etc/GMT+4|-04|40|0||", "Etc/GMT+5|-05|50|0||", "Etc/GMT+6|-06|60|0||", "Etc/GMT+7|-07|70|0||", "Etc/GMT+8|-08|80|0||", "Etc/GMT+9|-09|90|0||", "Etc/UTC|UTC|0|0||", "Europe/Amsterdam|AMT NST +0120 +0020 CEST CET|-j.w -1j.w -1k -k -20 -10|010101010101010101010101010101010101010101012323234545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545|-2aFcj.w 11b0 1iP0 11A0 1io0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1co0 1io0 1yo0 Pc0 1a00 1fA0 1Bc0 Mo0 1tc0 Uo0 1tA0 U00 1uo0 W00 1s00 VA0 1so0 Vc0 1sM0 UM0 1wo0 Rc0 1u00 Wo0 1rA0 W00 1s00 VA0 1sM0 UM0 1w00 fV0 BCX.w 1tA0 U00 1u00 Wo0 1sm0 601k WM0 1fA0 1cM0 1cM0 1cM0 16M0 1gMM0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|16e5", "Europe/Andorra|WET CET CEST|0 -10 -20|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-UBA0 1xIN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|79e3", "Europe/Astrakhan|LMT +03 +04 +05|-3c.c -30 -40 -50|012323232323232323212121212121212121212121212121212121212121212|-1Pcrc.c eUMc.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|10e5", "Europe/Athens|AMT EET EEST CEST CET|-1y.Q -20 -30 -20 -10|012123434121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a61x.Q CNbx.Q mn0 kU10 9b0 3Es0 Xa0 1fb0 1dd0 k3X0 Nz0 SCp0 1vc0 SO0 1cM0 1a00 1ao0 1fc0 1a10 1fG0 1cg0 1dX0 1bX0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|35e5", "Europe/London|GMT BST BDST|0 -10 -20|0101010101010101010101010101010101010101010101010121212121210101210101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2axa0 Rc0 1fA0 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 2Rz0 Dc0 1zc0 Oo0 1zc0 Rc0 1wo0 17c0 1iM0 FA0 xB0 1fA0 1a00 14o0 bb0 LA0 xB0 Rc0 1wo0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1a00 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1tA0 IM0 90o0 U00 1tA0 U00 1tA0 U00 1tA0 U00 1tA0 WM0 1qM0 WM0 1qM0 WM0 1tA0 U00 1tA0 U00 1tA0 11z0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|10e6", "Europe/Belgrade|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-19RC0 3IP0 WM0 1fA0 1cM0 1cM0 1rc0 Qo0 1vmo0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5", "Europe/Berlin|CET CEST CEMT|-10 -20 -30|01010101010101210101210101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 kL0 Nc0 m10 WM0 1ao0 1cp0 dX0 jz0 Dd0 1io0 17c0 1fA0 1a00 1ehA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|41e5", "Europe/Prague|CET CEST GMT|-10 -20 0|01010101010101010201010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 1cM0 1qM0 11c0 mp0 xA0 mn0 17c0 1io0 17c0 1fc0 1ao0 1bNc0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|13e5", "Europe/Brussels|WET CET CEST WEST|0 -10 -20 -10|0121212103030303030303030303030303030303030303030303212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2ehc0 3zX0 11c0 1iO0 11A0 1o00 11A0 my0 Ic0 1qM0 Rc0 1EM0 UM0 1u00 10o0 1io0 1io0 17c0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a30 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 y00 5Wn0 WM0 1fA0 1cM0 16M0 1iM0 16M0 1C00 Uo0 1eeo0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|21e5", "Europe/Bucharest|BMT EET EEST|-1I.o -20 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1xApI.o 20LI.o RA0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Axc0 On0 1fA0 1a10 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cK0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cL0 1cN0 1cL0 1fB0 1nX0 11E0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|19e5", "Europe/Budapest|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1ip0 17b0 1op0 1tb0 Q2m0 3Ne0 WM0 1fA0 1cM0 1cM0 1oJ0 1dc0 1030 1fA0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1iM0 1fA0 8Ha0 Rb0 1wN0 Rb0 1BB0 Lz0 1C20 LB0 SNX0 1a10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|17e5", "Europe/Zurich|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-19Lc0 11A0 1o00 11A0 1xG10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|38e4", "Europe/Chisinau|CMT BMT EET EEST CEST CET MSK MSD|-1T -1I.o -20 -30 -20 -10 -30 -40|012323232323232323234545467676767676767676767323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-26jdT wGMa.A 20LI.o RA0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 27A0 2en0 39g0 WM0 1fA0 1cM0 V90 1t7z0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 gL0 WO0 1cM0 1cM0 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1nX0 11D0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|67e4", "Europe/Copenhagen|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2azC0 Tz0 VuO0 60q0 WM0 1fA0 1cM0 1cM0 1cM0 S00 1HA0 Nc0 1C00 Dc0 1Nc0 Ao0 1h5A0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5", "Europe/Gibraltar|GMT BST BDST CET CEST|0 -10 -20 -10 -20|010101010101010101010101010101010101010101010101012121212121010121010101010101010101034343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-2axa0 Rc0 1fA0 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 2Rz0 Dc0 1zc0 Oo0 1zc0 Rc0 1wo0 17c0 1iM0 FA0 xB0 1fA0 1a00 14o0 bb0 LA0 xB0 Rc0 1wo0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 10Jz0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|30e3", "Europe/Helsinki|HMT EET EEST|-1D.N -20 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1WuND.N OULD.N 1dA0 1xGq0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5", "Europe/Kaliningrad|CET CEST EET EEST MSK MSD +03|-10 -20 -20 -30 -30 -40 -30|01010101010101232454545454545454543232323232323232323232323232323232323232323262|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 390 7A0 1en0 12N0 1pbb0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|44e4", "Europe/Kiev|KMT EET MSK CEST CET MSD EEST|-22.4 -20 -30 -20 -10 -40 -30|0123434252525252525252525256161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161|-1Pc22.4 eUo2.4 rnz0 2Hg0 WM0 1fA0 da0 1v4m0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 Db0 3220 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cQ0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|34e5", "Europe/Kirov|LMT +03 +04 +05|-3i.M -30 -40 -50|01232323232323232321212121212121212121212121212121212121212121|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|48e4", "Europe/Lisbon|LMT WET WEST WEMT CET CEST|A.J 0 -10 -20 -10 -20|012121212121212121212121212121212121212121212321232123212321212121212121212121212121212121212121214121212121212121212121212121212124545454212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2le00 aPX0 Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 3Co0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 pvy0 1cM0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|27e5", "Europe/Luxembourg|LMT CET CEST WET WEST WEST WET|-o.A -10 -20 0 -10 -20 -10|0121212134343434343434343434343434343434343434343434565651212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2DG0o.A t6mo.A TB0 1nX0 Up0 1o20 11A0 rW0 CM0 1qP0 R90 1EO0 UK0 1u20 10m0 1ip0 1in0 17e0 19W0 1fB0 1db0 1cp0 1in0 17d0 1fz0 1a10 1in0 1a10 1in0 17f0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 vA0 60L0 WM0 1fA0 1cM0 17c0 1io0 16M0 1C00 Uo0 1eeo0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|54e4", "Europe/Madrid|WET WEST WEMT CET CEST|0 -10 -20 -10 -20|010101010101010101210343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-25Td0 19B0 1cL0 1dd0 b1z0 18p0 3HX0 17d0 1fz0 1a10 1io0 1a00 1in0 17d0 iIn0 Hd0 1cL0 bb0 1200 2s20 14n0 5aL0 Mp0 1vz0 17d0 1in0 17d0 1in0 17d0 1in0 17d0 6hX0 11B0 XHX0 1a10 1fz0 1a10 19X0 1cN0 1fz0 1a10 1fC0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|62e5", "Europe/Malta|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2arB0 Lz0 1cN0 1db0 1410 1on0 Wp0 1qL0 17d0 1cL0 M3B0 5M20 WM0 1fA0 1co0 17c0 1iM0 16m0 1de0 1lc0 14m0 1lc0 WO0 1qM0 GTW0 On0 1C10 LA0 1C00 LA0 1EM0 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1co0 1cM0 1lA0 Xc0 1qq0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1iN0 19z0 1fB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|42e4", "Europe/Minsk|MMT EET MSK CEST CET MSD EEST +03|-1O -20 -30 -20 -10 -40 -30 -30|01234343252525252525252525261616161616161616161616161616161616161617|-1Pc1O eUnO qNX0 3gQ0 WM0 1fA0 1cM0 Al0 1tsn0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 3Fc0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0|19e5", "Europe/Monaco|PMT WET WEST WEMT CET CEST|-9.l 0 -10 -20 -10 -20|01212121212121212121212121212121212121212121212121232323232345454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-2nco9.l cNb9.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 1u00 10o0 1io0 1wo0 Rc0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Df0 2RV0 11z0 11B0 1ze0 WM0 1fA0 1cM0 1fa0 1aq0 16M0 1ekn0 1cL0 1fC0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|38e3", "Europe/Moscow|MMT MMT MST MDST MSD MSK +05 EET EEST MSK|-2u.h -2v.j -3v.j -4v.j -40 -30 -50 -20 -30 -40|012132345464575454545454545454545458754545454545454545454545454545454545454595|-2ag2u.h 2pyW.W 1bA0 11X0 GN0 1Hb0 c4v.j ik0 3DA0 dz0 15A0 c10 2q10 iM10 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|16e6", "Europe/Paris|PMT WET WEST CEST CET WEMT|-9.l 0 -10 -20 -10 -20|0121212121212121212121212121212121212121212121212123434352543434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-2nco8.l cNb8.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 1u00 10o0 1io0 1wo0 Rc0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Df0 Ik0 5M30 WM0 1fA0 1cM0 Vx0 hB0 1aq0 16M0 1ekn0 1cL0 1fC0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|11e6", "Europe/Riga|RMT LST EET MSK CEST CET MSD EEST|-1A.y -2A.y -20 -30 -20 -10 -40 -30|010102345454536363636363636363727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272|-25TzA.y 11A0 1iM0 ko0 gWm0 yDXA.y 2bX0 3fE0 WM0 1fA0 1cM0 1cM0 4m0 1sLy0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 1o00 11A0 1o00 11A0 1qM0 3oo0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|64e4", "Europe/Rome|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2arB0 Lz0 1cN0 1db0 1410 1on0 Wp0 1qL0 17d0 1cL0 M3B0 5M20 WM0 1fA0 1cM0 16M0 1iM0 16m0 1de0 1lc0 14m0 1lc0 WO0 1qM0 GTW0 On0 1C10 LA0 1C00 LA0 1EM0 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1C00 LA0 1zc0 Oo0 1C00 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1zc0 Oo0 1fC0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|39e5", "Europe/Samara|LMT +03 +04 +05|-3k.k -30 -40 -50|0123232323232323232121232323232323232323232323232323232323212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 2y10 14m0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|12e5", "Europe/Saratov|LMT +03 +04 +05|-34.i -30 -40 -50|012323232323232321212121212121212121212121212121212121212121212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1cM0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 5810|", "Europe/Simferopol|SMT EET MSK CEST CET MSD EEST MSK|-2g -20 -30 -20 -10 -40 -30 -40|012343432525252525252525252161616525252616161616161616161616161616161616172|-1Pc2g eUog rEn0 2qs0 WM0 1fA0 1cM0 3V0 1u0L0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Q00 4eL0 1cL0 1cN0 1cL0 1cN0 dX0 WL0 1cN0 1cL0 1fB0 1o30 11B0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11z0 1nW0|33e4", "Europe/Sofia|EET CET CEST EEST|-20 -10 -20 -30|01212103030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030|-168L0 WM0 1fA0 1cM0 1cM0 1cN0 1mKH0 1dd0 1fb0 1ap0 1fb0 1a20 1fy0 1a30 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1nX0 11E0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5", "Europe/Stockholm|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2azC0 TB0 2yDe0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|15e5", "Europe/Tallinn|TMT CET CEST EET MSK MSD EEST|-1D -10 -20 -20 -30 -40 -30|012103421212454545454545454546363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363|-26oND teD 11A0 1Ta0 4rXl KSLD 2FX0 2Jg0 WM0 1fA0 1cM0 18J0 1sTX0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o10 11A0 1qM0 5QM0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|41e4", "Europe/Tirane|LMT CET CEST|-1j.k -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glBj.k 14pcj.k 5LC0 WM0 4M0 1fCK0 10n0 1op0 11z0 1pd0 11z0 1qN0 WL0 1qp0 Xb0 1qp0 Xb0 1qp0 11z0 1lB0 11z0 1qN0 11z0 1iN0 16n0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|42e4", "Europe/Ulyanovsk|LMT +03 +04 +05 +02|-3d.A -30 -40 -50 -20|01232323232323232321214121212121212121212121212121212121212121212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|13e5", "Europe/Uzhgorod|CET CEST MSK MSD EET EEST|-10 -20 -30 -40 -20 -30|010101023232323232323232320454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-1cqL0 6i00 WM0 1fA0 1cM0 1ml0 1Cp0 1r3W0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Q00 1Nf0 2pw0 1cL0 1cN0 1cL0 1cN0 1cL0 1cQ0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|11e4", "Europe/Vienna|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 3KM0 14o0 LA00 6i00 WM0 1fA0 1cM0 1cM0 1cM0 400 2qM0 1ao0 1co0 1cM0 1io0 17c0 1gHa0 19X0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|18e5", "Europe/Vilnius|WMT KMT CET EET MSK CEST MSD EEST|-1o -1z.A -10 -20 -30 -20 -40 -30|012324525254646464646464646473737373737373737352537373737373737373737373737373737373737373737373737373737373737373737373|-293do 6ILM.o 1Ooz.A zz0 Mfd0 29W0 3is0 WM0 1fA0 1cM0 LV0 1tgL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11B0 1o00 11A0 1qM0 8io0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|54e4", "Europe/Volgograd|LMT +03 +04 +05|-2V.E -30 -40 -50|012323232323232321212121212121212121212121212121212121212121212|-21IqV.E psLV.E 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1cM0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 9Jd0|10e5", "Europe/Warsaw|WMT CET CEST EET EEST|-1o -10 -20 -20 -30|012121234312121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2ctdo 1LXo 11d0 1iO0 11A0 1o00 11A0 1on0 11A0 6zy0 HWP0 5IM0 WM0 1fA0 1cM0 1dz0 1mL0 1en0 15B0 1aq0 1nA0 11A0 1io0 17c0 1fA0 1a00 iDX0 LA0 1cM0 1cM0 1C00 Oo0 1cM0 1cM0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1C00 LA0 uso0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|17e5", "Europe/Zaporozhye|+0220 EET MSK CEST CET MSD EEST|-2k -20 -30 -20 -10 -40 -30|01234342525252525252525252526161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161|-1Pc2k eUok rdb0 2RE0 WM0 1fA0 8m0 1v9a0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cK0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cQ0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|77e4", "HST|HST|a0|0||", "Indian/Chagos|LMT +05 +06|-4N.E -50 -60|012|-2xosN.E 3AGLN.E|30e2", "Indian/Cocos|+0630|-6u|0||596", "Indian/Kerguelen|-00 +05|0 -50|01|-MG00|130", "Indian/Mahe|LMT +04|-3F.M -40|01|-2yO3F.M|79e3", "Indian/Maldives|MMT +05|-4S -50|01|-olgS|35e4", "Indian/Mauritius|LMT +04 +05|-3O -40 -50|012121|-2xorO 34unO 14L0 12kr0 11z0|15e4", "Indian/Reunion|LMT +04|-3F.Q -40|01|-2mDDF.Q|84e4", "Pacific/Kwajalein|+11 +10 +09 -12 +12|-b0 -a0 -90 c0 -c0|012034|-1kln0 akp0 6Up0 12ry0 Wan0|14e3", "MET|MET MEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 16M0 1gMM0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|", "MST|MST|70|0||", "MST7MDT|MST MDT MWT MPT|70 60 60 60|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|", "Pacific/Chatham|+1215 +1245 +1345|-cf -cJ -dJ|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-WqAf 1adef IM0 1C00 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1qM0 14o0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1io0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00|600", "Pacific/Apia|LMT -1130 -11 -10 +14 +13|bq.U bu b0 a0 -e0 -d0|01232345454545454545454545454545454545454545454545454545454|-2nDMx.4 1yW03.4 2rRbu 1ff0 1a00 CI0 AQ0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00|37e3", "Pacific/Bougainville|+10 +09 +11|-a0 -90 -b0|0102|-16Wy0 7CN0 2MQp0|18e4", "Pacific/Chuuk|+10 +09|-a0 -90|01010|-2ewy0 axB0 RVX0 axd0|49e3", "Pacific/Efate|LMT +11 +12|-bd.g -b0 -c0|0121212121212121212121|-2l9nd.g 2Szcd.g 1cL0 1oN0 10L0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 Lz0 1Nd0 An0|66e3", "Pacific/Enderbury|-12 -11 +13|c0 b0 -d0|012|nIc0 B7X0|1", "Pacific/Fakaofo|-11 +13|b0 -d0|01|1Gfn0|483", "Pacific/Fiji|LMT +12 +13|-bT.I -c0 -d0|0121212121212121212121212121212121212121212121212121212121212121|-2bUzT.I 3m8NT.I LA0 1EM0 IM0 nJc0 LA0 1o00 Rc0 1wo0 Ao0 1Nc0 Ao0 1Q00 xz0 1SN0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 20o0 pc0 20o0 s00 20o0 pc0 20o0 pc0 20o0 pc0 20o0 pc0 20o0 s00 1VA0 s00 20o0 pc0 20o0 pc0 20o0 pc0 20o0 pc0 20o0 s00 20o0 pc0 20o0 pc0 20o0 pc0 20o0 pc0 20o0 s00 1VA0 s00|88e4", "Pacific/Galapagos|LMT -05 -06|5W.o 50 60|01212|-1yVS1.A 2dTz1.A gNd0 rz0|25e3", "Pacific/Gambier|LMT -09|8X.M 90|01|-2jof0.c|125", "Pacific/Guadalcanal|LMT +11|-aD.M -b0|01|-2joyD.M|11e4", "Pacific/Guam|GST +09 GDT ChST|-a0 -90 -b0 -a0|01020202020202020203|-18jK0 6pB0 AhB0 3QL0 g2p0 3p91 WOX rX0 1zd0 Rb0 1wp0 Rb0 5xd0 rX0 5sN0 zb1 1C0X On0 ULb0|17e4", "Pacific/Honolulu|HST HDT HWT HPT HST|au 9u 9u 9u a0|0102304|-1thLu 8x0 lef0 8wWu iAu 46p0|37e4", "Pacific/Kiritimati|-1040 -10 +14|aE a0 -e0|012|nIaE B7Xk|51e2", "Pacific/Kosrae|+11 +09 +10 +12|-b0 -90 -a0 -c0|01021030|-2ewz0 axC0 HBy0 akp0 axd0 WOK0 1bdz0|66e2", "Pacific/Majuro|+11 +09 +10 +12|-b0 -90 -a0 -c0|0102103|-2ewz0 axC0 HBy0 akp0 6RB0 12um0|28e3", "Pacific/Marquesas|LMT -0930|9i 9u|01|-2joeG|86e2", "Pacific/Pago_Pago|LMT SST|bm.M b0|01|-2nDMB.c|37e2", "Pacific/Nauru|LMT +1130 +09 +12|-b7.E -bu -90 -c0|01213|-1Xdn7.E QCnB.E 7mqu 1lnbu|10e3", "Pacific/Niue|-1120 -1130 -11|bk bu b0|012|-KfME 17y0a|12e2", "Pacific/Norfolk|+1112 +1130 +1230 +11 +12|-bc -bu -cu -b0 -c0|012134343434343434343434343434343434343434|-Kgbc W01G Oo0 1COo0 9Jcu 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|25e4", "Pacific/Noumea|LMT +11 +12|-b5.M -b0 -c0|01212121|-2l9n5.M 2EqM5.M xX0 1PB0 yn0 HeP0 Ao0|98e3", "Pacific/Pitcairn|-0830 -08|8u 80|01|18Vku|56", "Pacific/Pohnpei|+11 +09 +10|-b0 -90 -a0|010210|-2ewz0 axC0 HBy0 akp0 axd0|34e3", "Pacific/Rarotonga|-1030 -0930 -10|au 9u a0|012121212121212121212121212|lyWu IL0 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu Onu|13e3", "Pacific/Tahiti|LMT -10|9W.g a0|01|-2joe1.I|18e4", "Pacific/Tongatapu|+1220 +13 +14|-ck -d0 -e0|0121212121|-1aB0k 2n5dk 15A0 1wo0 xz0 1Q10 xz0 zWN0 s00|75e3", "PST8PDT|PST PDT PWT PPT|80 70 70 70|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261q0 1nX0 11B0 1nX0 SgN0 8x10 iy0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|", "WET|WET WEST|0 -10|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|hDB0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|" ], "links": [ "Africa/Abidjan|Africa/Bamako", "Africa/Abidjan|Africa/Banjul", "Africa/Abidjan|Africa/Conakry", "Africa/Abidjan|Africa/Dakar", "Africa/Abidjan|Africa/Freetown", "Africa/Abidjan|Africa/Lome", "Africa/Abidjan|Africa/Nouakchott", "Africa/Abidjan|Africa/Ouagadougou", "Africa/Abidjan|Africa/Timbuktu", "Africa/Abidjan|Atlantic/St_Helena", "Africa/Cairo|Egypt", "Africa/Johannesburg|Africa/Maseru", "Africa/Johannesburg|Africa/Mbabane", "Africa/Lagos|Africa/Bangui", "Africa/Lagos|Africa/Brazzaville", "Africa/Lagos|Africa/Douala", "Africa/Lagos|Africa/Kinshasa", "Africa/Lagos|Africa/Libreville", "Africa/Lagos|Africa/Luanda", "Africa/Lagos|Africa/Malabo", "Africa/Lagos|Africa/Niamey", "Africa/Lagos|Africa/Porto-Novo", "Africa/Maputo|Africa/Blantyre", "Africa/Maputo|Africa/Bujumbura", "Africa/Maputo|Africa/Gaborone", "Africa/Maputo|Africa/Harare", "Africa/Maputo|Africa/Kigali", "Africa/Maputo|Africa/Lubumbashi", "Africa/Maputo|Africa/Lusaka", "Africa/Nairobi|Africa/Addis_Ababa", "Africa/Nairobi|Africa/Asmara", "Africa/Nairobi|Africa/Asmera", "Africa/Nairobi|Africa/Dar_es_Salaam", "Africa/Nairobi|Africa/Djibouti", "Africa/Nairobi|Africa/Kampala", "Africa/Nairobi|Africa/Mogadishu", "Africa/Nairobi|Indian/Antananarivo", "Africa/Nairobi|Indian/Comoro", "Africa/Nairobi|Indian/Mayotte", "Africa/Tripoli|Libya", "America/Adak|America/Atka", "America/Adak|US/Aleutian", "America/Anchorage|US/Alaska", "America/Argentina/Buenos_Aires|America/Buenos_Aires", "America/Argentina/Catamarca|America/Argentina/ComodRivadavia", "America/Argentina/Catamarca|America/Catamarca", "America/Argentina/Cordoba|America/Cordoba", "America/Argentina/Cordoba|America/Rosario", "America/Argentina/Jujuy|America/Jujuy", "America/Argentina/Mendoza|America/Mendoza", "America/Atikokan|America/Coral_Harbour", "America/Chicago|US/Central", "America/Curacao|America/Aruba", "America/Curacao|America/Kralendijk", "America/Curacao|America/Lower_Princes", "America/Denver|America/Shiprock", "America/Denver|Navajo", "America/Denver|US/Mountain", "America/Detroit|US/Michigan", "America/Edmonton|Canada/Mountain", "America/Fort_Wayne|America/Indiana/Indianapolis", "America/Fort_Wayne|America/Indianapolis", "America/Fort_Wayne|US/East-Indiana", "America/Halifax|Canada/Atlantic", "America/Havana|Cuba", "America/Indiana/Knox|America/Knox_IN", "America/Indiana/Knox|US/Indiana-Starke", "America/Jamaica|Jamaica", "America/Kentucky/Louisville|America/Louisville", "America/Los_Angeles|US/Pacific", "America/Los_Angeles|US/Pacific-New", "America/Manaus|Brazil/West", "America/Mazatlan|Mexico/BajaSur", "America/Mexico_City|Mexico/General", "America/New_York|US/Eastern", "America/Noronha|Brazil/DeNoronha", "America/Panama|America/Cayman", "America/Phoenix|US/Arizona", "America/Port_of_Spain|America/Anguilla", "America/Port_of_Spain|America/Antigua", "America/Port_of_Spain|America/Dominica", "America/Port_of_Spain|America/Grenada", "America/Port_of_Spain|America/Guadeloupe", "America/Port_of_Spain|America/Marigot", "America/Port_of_Spain|America/Montserrat", "America/Port_of_Spain|America/St_Barthelemy", "America/Port_of_Spain|America/St_Kitts", "America/Port_of_Spain|America/St_Lucia", "America/Port_of_Spain|America/St_Thomas", "America/Port_of_Spain|America/St_Vincent", "America/Port_of_Spain|America/Tortola", "America/Port_of_Spain|America/Virgin", "America/Regina|Canada/Saskatchewan", "America/Rio_Branco|America/Porto_Acre", "America/Rio_Branco|Brazil/Acre", "America/Santiago|Chile/Continental", "America/Sao_Paulo|Brazil/East", "America/St_Johns|Canada/Newfoundland", "America/Tijuana|America/Ensenada", "America/Tijuana|America/Santa_Isabel", "America/Tijuana|Mexico/BajaNorte", "America/Toronto|America/Montreal", "America/Toronto|Canada/Eastern", "America/Vancouver|Canada/Pacific", "America/Whitehorse|Canada/Yukon", "America/Winnipeg|Canada/Central", "Asia/Ashgabat|Asia/Ashkhabad", "Asia/Bangkok|Asia/Phnom_Penh", "Asia/Bangkok|Asia/Vientiane", "Asia/Dhaka|Asia/Dacca", "Asia/Dubai|Asia/Muscat", "Asia/Ho_Chi_Minh|Asia/Saigon", "Asia/Hong_Kong|Hongkong", "Asia/Jerusalem|Asia/Tel_Aviv", "Asia/Jerusalem|Israel", "Asia/Kathmandu|Asia/Katmandu", "Asia/Kolkata|Asia/Calcutta", "Asia/Kuala_Lumpur|Asia/Singapore", "Asia/Kuala_Lumpur|Singapore", "Asia/Macau|Asia/Macao", "Asia/Makassar|Asia/Ujung_Pandang", "Asia/Nicosia|Europe/Nicosia", "Asia/Qatar|Asia/Bahrain", "Asia/Rangoon|Asia/Yangon", "Asia/Riyadh|Asia/Aden", "Asia/Riyadh|Asia/Kuwait", "Asia/Seoul|ROK", "Asia/Shanghai|Asia/Chongqing", "Asia/Shanghai|Asia/Chungking", "Asia/Shanghai|Asia/Harbin", "Asia/Shanghai|PRC", "Asia/Taipei|ROC", "Asia/Tehran|Iran", "Asia/Thimphu|Asia/Thimbu", "Asia/Tokyo|Japan", "Asia/Ulaanbaatar|Asia/Ulan_Bator", "Asia/Urumqi|Asia/Kashgar", "Atlantic/Faroe|Atlantic/Faeroe", "Atlantic/Reykjavik|Iceland", "Atlantic/South_Georgia|Etc/GMT+2", "Australia/Adelaide|Australia/South", "Australia/Brisbane|Australia/Queensland", "Australia/Broken_Hill|Australia/Yancowinna", "Australia/Darwin|Australia/North", "Australia/Hobart|Australia/Tasmania", "Australia/Lord_Howe|Australia/LHI", "Australia/Melbourne|Australia/Victoria", "Australia/Perth|Australia/West", "Australia/Sydney|Australia/ACT", "Australia/Sydney|Australia/Canberra", "Australia/Sydney|Australia/NSW", "Etc/GMT-0|Etc/GMT", "Etc/GMT-0|Etc/GMT+0", "Etc/GMT-0|Etc/GMT0", "Etc/GMT-0|Etc/Greenwich", "Etc/GMT-0|GMT", "Etc/GMT-0|GMT+0", "Etc/GMT-0|GMT-0", "Etc/GMT-0|GMT0", "Etc/GMT-0|Greenwich", "Etc/UTC|Etc/UCT", "Etc/UTC|Etc/Universal", "Etc/UTC|Etc/Zulu", "Etc/UTC|UCT", "Etc/UTC|UTC", "Etc/UTC|Universal", "Etc/UTC|Zulu", "Europe/Belgrade|Europe/Ljubljana", "Europe/Belgrade|Europe/Podgorica", "Europe/Belgrade|Europe/Sarajevo", "Europe/Belgrade|Europe/Skopje", "Europe/Belgrade|Europe/Zagreb", "Europe/Chisinau|Europe/Tiraspol", "Europe/Dublin|Eire", "Europe/Helsinki|Europe/Mariehamn", "Europe/Istanbul|Asia/Istanbul", "Europe/Istanbul|Turkey", "Europe/Lisbon|Portugal", "Europe/London|Europe/Belfast", "Europe/London|Europe/Guernsey", "Europe/London|Europe/Isle_of_Man", "Europe/London|Europe/Jersey", "Europe/London|GB", "Europe/London|GB-Eire", "Europe/Moscow|W-SU", "Europe/Oslo|Arctic/Longyearbyen", "Europe/Oslo|Atlantic/Jan_Mayen", "Europe/Prague|Europe/Bratislava", "Europe/Rome|Europe/San_Marino", "Europe/Rome|Europe/Vatican", "Europe/Warsaw|Poland", "Europe/Zurich|Europe/Busingen", "Europe/Zurich|Europe/Vaduz", "Indian/Christmas|Etc/GMT-7", "Pacific/Auckland|Antarctica/McMurdo", "Pacific/Auckland|Antarctica/South_Pole", "Pacific/Auckland|NZ", "Pacific/Chatham|NZ-CHAT", "Pacific/Chuuk|Pacific/Truk", "Pacific/Chuuk|Pacific/Yap", "Pacific/Easter|Chile/EasterIsland", "Pacific/Guam|Pacific/Saipan", "Pacific/Honolulu|Pacific/Johnston", "Pacific/Honolulu|US/Hawaii", "Pacific/Kwajalein|Kwajalein", "Pacific/Pago_Pago|Pacific/Midway", "Pacific/Pago_Pago|Pacific/Samoa", "Pacific/Pago_Pago|US/Samoa", "Pacific/Palau|Etc/GMT-9", "Pacific/Pohnpei|Pacific/Ponape", "Pacific/Port_Moresby|Etc/GMT-10", "Pacific/Tarawa|Etc/GMT-12", "Pacific/Tarawa|Pacific/Funafuti", "Pacific/Tarawa|Pacific/Wake", "Pacific/Tarawa|Pacific/Wallis" ], "countries": [ "AD|Europe/Andorra", "AE|Asia/Dubai", "AF|Asia/Kabul", "AG|America/Port_of_Spain America/Antigua", "AI|America/Port_of_Spain America/Anguilla", "AL|Europe/Tirane", "AM|Asia/Yerevan", "AO|Africa/Lagos Africa/Luanda", "AQ|Antarctica/Casey Antarctica/Davis Antarctica/DumontDUrville Antarctica/Mawson Antarctica/Palmer Antarctica/Rothera Antarctica/Syowa Antarctica/Troll Antarctica/Vostok Pacific/Auckland Antarctica/McMurdo", "AR|America/Argentina/Buenos_Aires America/Argentina/Cordoba America/Argentina/Salta America/Argentina/Jujuy America/Argentina/Tucuman America/Argentina/Catamarca America/Argentina/La_Rioja America/Argentina/San_Juan America/Argentina/Mendoza America/Argentina/San_Luis America/Argentina/Rio_Gallegos America/Argentina/Ushuaia", "AS|Pacific/Pago_Pago", "AT|Europe/Vienna", "AU|Australia/Lord_Howe Antarctica/Macquarie Australia/Hobart Australia/Currie Australia/Melbourne Australia/Sydney Australia/Broken_Hill Australia/Brisbane Australia/Lindeman Australia/Adelaide Australia/Darwin Australia/Perth Australia/Eucla", "AW|America/Curacao America/Aruba", "AX|Europe/Helsinki Europe/Mariehamn", "AZ|Asia/Baku", "BA|Europe/Belgrade Europe/Sarajevo", "BB|America/Barbados", "BD|Asia/Dhaka", "BE|Europe/Brussels", "BF|Africa/Abidjan Africa/Ouagadougou", "BG|Europe/Sofia", "BH|Asia/Qatar Asia/Bahrain", "BI|Africa/Maputo Africa/Bujumbura", "BJ|Africa/Lagos Africa/Porto-Novo", "BL|America/Port_of_Spain America/St_Barthelemy", "BM|Atlantic/Bermuda", "BN|Asia/Brunei", "BO|America/La_Paz", "BQ|America/Curacao America/Kralendijk", "BR|America/Noronha America/Belem America/Fortaleza America/Recife America/Araguaina America/Maceio America/Bahia America/Sao_Paulo America/Campo_Grande America/Cuiaba America/Santarem America/Porto_Velho America/Boa_Vista America/Manaus America/Eirunepe America/Rio_Branco", "BS|America/Nassau", "BT|Asia/Thimphu", "BW|Africa/Maputo Africa/Gaborone", "BY|Europe/Minsk", "BZ|America/Belize", "CA|America/St_Johns America/Halifax America/Glace_Bay America/Moncton America/Goose_Bay America/Blanc-Sablon America/Toronto America/Nipigon America/Thunder_Bay America/Iqaluit America/Pangnirtung America/Atikokan America/Winnipeg America/Rainy_River America/Resolute America/Rankin_Inlet America/Regina America/Swift_Current America/Edmonton America/Cambridge_Bay America/Yellowknife America/Inuvik America/Creston America/Dawson_Creek America/Fort_Nelson America/Vancouver America/Whitehorse America/Dawson", "CC|Indian/Cocos", "CD|Africa/Maputo Africa/Lagos Africa/Kinshasa Africa/Lubumbashi", "CF|Africa/Lagos Africa/Bangui", "CG|Africa/Lagos Africa/Brazzaville", "CH|Europe/Zurich", "CI|Africa/Abidjan", "CK|Pacific/Rarotonga", "CL|America/Santiago America/Punta_Arenas Pacific/Easter", "CM|Africa/Lagos Africa/Douala", "CN|Asia/Shanghai Asia/Urumqi", "CO|America/Bogota", "CR|America/Costa_Rica", "CU|America/Havana", "CV|Atlantic/Cape_Verde", "CW|America/Curacao", "CX|Indian/Christmas", "CY|Asia/Nicosia Asia/Famagusta", "CZ|Europe/Prague", "DE|Europe/Zurich Europe/Berlin Europe/Busingen", "DJ|Africa/Nairobi Africa/Djibouti", "DK|Europe/Copenhagen", "DM|America/Port_of_Spain America/Dominica", "DO|America/Santo_Domingo", "DZ|Africa/Algiers", "EC|America/Guayaquil Pacific/Galapagos", "EE|Europe/Tallinn", "EG|Africa/Cairo", "EH|Africa/El_Aaiun", "ER|Africa/Nairobi Africa/Asmara", "ES|Europe/Madrid Africa/Ceuta Atlantic/Canary", "ET|Africa/Nairobi Africa/Addis_Ababa", "FI|Europe/Helsinki", "FJ|Pacific/Fiji", "FK|Atlantic/Stanley", "FM|Pacific/Chuuk Pacific/Pohnpei Pacific/Kosrae", "FO|Atlantic/Faroe", "FR|Europe/Paris", "GA|Africa/Lagos Africa/Libreville", "GB|Europe/London", "GD|America/Port_of_Spain America/Grenada", "GE|Asia/Tbilisi", "GF|America/Cayenne", "GG|Europe/London Europe/Guernsey", "GH|Africa/Accra", "GI|Europe/Gibraltar", "GL|America/Godthab America/Danmarkshavn America/Scoresbysund America/Thule", "GM|Africa/Abidjan Africa/Banjul", "GN|Africa/Abidjan Africa/Conakry", "GP|America/Port_of_Spain America/Guadeloupe", "GQ|Africa/Lagos Africa/Malabo", "GR|Europe/Athens", "GS|Atlantic/South_Georgia", "GT|America/Guatemala", "GU|Pacific/Guam", "GW|Africa/Bissau", "GY|America/Guyana", "HK|Asia/Hong_Kong", "HN|America/Tegucigalpa", "HR|Europe/Belgrade Europe/Zagreb", "HT|America/Port-au-Prince", "HU|Europe/Budapest", "ID|Asia/Jakarta Asia/Pontianak Asia/Makassar Asia/Jayapura", "IE|Europe/Dublin", "IL|Asia/Jerusalem", "IM|Europe/London Europe/Isle_of_Man", "IN|Asia/Kolkata", "IO|Indian/Chagos", "IQ|Asia/Baghdad", "IR|Asia/Tehran", "IS|Atlantic/Reykjavik", "IT|Europe/Rome", "JE|Europe/London Europe/Jersey", "JM|America/Jamaica", "JO|Asia/Amman", "JP|Asia/Tokyo", "KE|Africa/Nairobi", "KG|Asia/Bishkek", "KH|Asia/Bangkok Asia/Phnom_Penh", "KI|Pacific/Tarawa Pacific/Enderbury Pacific/Kiritimati", "KM|Africa/Nairobi Indian/Comoro", "KN|America/Port_of_Spain America/St_Kitts", "KP|Asia/Pyongyang", "KR|Asia/Seoul", "KW|Asia/Riyadh Asia/Kuwait", "KY|America/Panama America/Cayman", "KZ|Asia/Almaty Asia/Qyzylorda Asia/Qostanay Asia/Aqtobe Asia/Aqtau Asia/Atyrau Asia/Oral", "LA|Asia/Bangkok Asia/Vientiane", "LB|Asia/Beirut", "LC|America/Port_of_Spain America/St_Lucia", "LI|Europe/Zurich Europe/Vaduz", "LK|Asia/Colombo", "LR|Africa/Monrovia", "LS|Africa/Johannesburg Africa/Maseru", "LT|Europe/Vilnius", "LU|Europe/Luxembourg", "LV|Europe/Riga", "LY|Africa/Tripoli", "MA|Africa/Casablanca", "MC|Europe/Monaco", "MD|Europe/Chisinau", "ME|Europe/Belgrade Europe/Podgorica", "MF|America/Port_of_Spain America/Marigot", "MG|Africa/Nairobi Indian/Antananarivo", "MH|Pacific/Majuro Pacific/Kwajalein", "MK|Europe/Belgrade Europe/Skopje", "ML|Africa/Abidjan Africa/Bamako", "MM|Asia/Yangon", "MN|Asia/Ulaanbaatar Asia/Hovd Asia/Choibalsan", "MO|Asia/Macau", "MP|Pacific/Guam Pacific/Saipan", "MQ|America/Martinique", "MR|Africa/Abidjan Africa/Nouakchott", "MS|America/Port_of_Spain America/Montserrat", "MT|Europe/Malta", "MU|Indian/Mauritius", "MV|Indian/Maldives", "MW|Africa/Maputo Africa/Blantyre", "MX|America/Mexico_City America/Cancun America/Merida America/Monterrey America/Matamoros America/Mazatlan America/Chihuahua America/Ojinaga America/Hermosillo America/Tijuana America/Bahia_Banderas", "MY|Asia/Kuala_Lumpur Asia/Kuching", "MZ|Africa/Maputo", "NA|Africa/Windhoek", "NC|Pacific/Noumea", "NE|Africa/Lagos Africa/Niamey", "NF|Pacific/Norfolk", "NG|Africa/Lagos", "NI|America/Managua", "NL|Europe/Amsterdam", "NO|Europe/Oslo", "NP|Asia/Kathmandu", "NR|Pacific/Nauru", "NU|Pacific/Niue", "NZ|Pacific/Auckland Pacific/Chatham", "OM|Asia/Dubai Asia/Muscat", "PA|America/Panama", "PE|America/Lima", "PF|Pacific/Tahiti Pacific/Marquesas Pacific/Gambier", "PG|Pacific/Port_Moresby Pacific/Bougainville", "PH|Asia/Manila", "PK|Asia/Karachi", "PL|Europe/Warsaw", "PM|America/Miquelon", "PN|Pacific/Pitcairn", "PR|America/Puerto_Rico", "PS|Asia/Gaza Asia/Hebron", "PT|Europe/Lisbon Atlantic/Madeira Atlantic/Azores", "PW|Pacific/Palau", "PY|America/Asuncion", "QA|Asia/Qatar", "RE|Indian/Reunion", "RO|Europe/Bucharest", "RS|Europe/Belgrade", "RU|Europe/Kaliningrad Europe/Moscow Europe/Simferopol Europe/Kirov Europe/Astrakhan Europe/Volgograd Europe/Saratov Europe/Ulyanovsk Europe/Samara Asia/Yekaterinburg Asia/Omsk Asia/Novosibirsk Asia/Barnaul Asia/Tomsk Asia/Novokuznetsk Asia/Krasnoyarsk Asia/Irkutsk Asia/Chita Asia/Yakutsk Asia/Khandyga Asia/Vladivostok Asia/Ust-Nera Asia/Magadan Asia/Sakhalin Asia/Srednekolymsk Asia/Kamchatka Asia/Anadyr", "RW|Africa/Maputo Africa/Kigali", "SA|Asia/Riyadh", "SB|Pacific/Guadalcanal", "SC|Indian/Mahe", "SD|Africa/Khartoum", "SE|Europe/Stockholm", "SG|Asia/Singapore", "SH|Africa/Abidjan Atlantic/St_Helena", "SI|Europe/Belgrade Europe/Ljubljana", "SJ|Europe/Oslo Arctic/Longyearbyen", "SK|Europe/Prague Europe/Bratislava", "SL|Africa/Abidjan Africa/Freetown", "SM|Europe/Rome Europe/San_Marino", "SN|Africa/Abidjan Africa/Dakar", "SO|Africa/Nairobi Africa/Mogadishu", "SR|America/Paramaribo", "SS|Africa/Juba", "ST|Africa/Sao_Tome", "SV|America/El_Salvador", "SX|America/Curacao America/Lower_Princes", "SY|Asia/Damascus", "SZ|Africa/Johannesburg Africa/Mbabane", "TC|America/Grand_Turk", "TD|Africa/Ndjamena", "TF|Indian/Reunion Indian/Kerguelen", "TG|Africa/Abidjan Africa/Lome", "TH|Asia/Bangkok", "TJ|Asia/Dushanbe", "TK|Pacific/Fakaofo", "TL|Asia/Dili", "TM|Asia/Ashgabat", "TN|Africa/Tunis", "TO|Pacific/Tongatapu", "TR|Europe/Istanbul", "TT|America/Port_of_Spain", "TV|Pacific/Funafuti", "TW|Asia/Taipei", "TZ|Africa/Nairobi Africa/Dar_es_Salaam", "UA|Europe/Simferopol Europe/Kiev Europe/Uzhgorod Europe/Zaporozhye", "UG|Africa/Nairobi Africa/Kampala", "UM|Pacific/Pago_Pago Pacific/Wake Pacific/Honolulu Pacific/Midway", "US|America/New_York America/Detroit America/Kentucky/Louisville America/Kentucky/Monticello America/Indiana/Indianapolis America/Indiana/Vincennes America/Indiana/Winamac America/Indiana/Marengo America/Indiana/Petersburg America/Indiana/Vevay America/Chicago America/Indiana/Tell_City America/Indiana/Knox America/Menominee America/North_Dakota/Center America/North_Dakota/New_Salem America/North_Dakota/Beulah America/Denver America/Boise America/Phoenix America/Los_Angeles America/Anchorage America/Juneau America/Sitka America/Metlakatla America/Yakutat America/Nome America/Adak Pacific/Honolulu", "UY|America/Montevideo", "UZ|Asia/Samarkand Asia/Tashkent", "VA|Europe/Rome Europe/Vatican", "VC|America/Port_of_Spain America/St_Vincent", "VE|America/Caracas", "VG|America/Port_of_Spain America/Tortola", "VI|America/Port_of_Spain America/St_Thomas", "VN|Asia/Bangkok Asia/Ho_Chi_Minh", "VU|Pacific/Efate", "WF|Pacific/Wallis", "WS|Pacific/Apia", "YE|Asia/Riyadh Asia/Aden", "YT|Africa/Nairobi Indian/Mayotte", "ZA|Africa/Johannesburg", "ZM|Africa/Maputo Africa/Lusaka", "ZW|Africa/Maputo Africa/Harare" ] }); return moment; })); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/nestable/jquery.nestable.js ================================================ /*! * Nestable jQuery Plugin - Copyright (c) 2012 David Bushell - http://dbushell.com/ * Dual-licensed under the BSD or MIT licenses */ ;(function($, window, document, undefined) { var hasTouch = 'ontouchstart' in document; /** * Detect CSS pointer-events property * events are normally disabled on the dragging element to avoid conflicts * https://github.com/ausi/Feature-detection-technique-for-pointer-events/blob/master/modernizr-pointerevents.js */ var hasPointerEvents = (function() { var el = document.createElement('div'), docEl = document.documentElement; if (!('pointerEvents' in el.style)) { return false; } el.style.pointerEvents = 'auto'; el.style.pointerEvents = 'x'; docEl.appendChild(el); var supports = window.getComputedStyle && window.getComputedStyle(el, '').pointerEvents === 'auto'; docEl.removeChild(el); return !!supports; })(); var defaults = { listNodeName : 'ol', itemNodeName : 'li', rootClass : 'dd', listClass : 'dd-list', itemClass : 'dd-item', dragClass : 'dd-dragel', handleClass : 'dd-handle', collapsedClass : 'dd-collapsed', placeClass : 'dd-placeholder', noDragClass : 'dd-nodrag', emptyClass : 'dd-empty', expandBtnHTML : '<button data-action="expand" type="button">Expand</button>', collapseBtnHTML : '<button data-action="collapse" type="button">Collapse</button>', group : 0, maxDepth : 5, threshold : 20 }; function Plugin(element, options) { this.w = $(document); this.el = $(element); this.options = $.extend({}, defaults, options); this.init(); } Plugin.prototype = { init: function() { var list = this; list.reset(); list.el.data('nestable-group', this.options.group); list.placeEl = $('<div class="' + list.options.placeClass + '"/>'); $.each(this.el.find(list.options.itemNodeName), function(k, el) { list.setParent($(el)); }); list.el.on('click', 'button', function(e) { if (list.dragEl) { return; } var target = $(e.currentTarget), action = target.data('action'), item = target.parent(list.options.itemNodeName); if (action === 'collapse') { list.collapseItem(item); } if (action === 'expand') { list.expandItem(item); } }); var onStartEvent = function(e) { var handle = $(e.target); if (!handle.hasClass(list.options.handleClass)) { if (handle.closest('.' + list.options.noDragClass).length) { return; } handle = handle.closest('.' + list.options.handleClass); } if (!handle.length || list.dragEl) { return; } list.isTouch = /^touch/.test(e.type); if (list.isTouch && e.touches.length !== 1) { return; } e.preventDefault(); list.dragStart(e.touches ? e.touches[0] : e); }; var onMoveEvent = function(e) { if (list.dragEl) { e.preventDefault(); list.dragMove(e.touches ? e.touches[0] : e); } }; var onEndEvent = function(e) { if (list.dragEl) { e.preventDefault(); list.dragStop(e.touches ? e.touches[0] : e); } }; if (hasTouch) { list.el[0].addEventListener('touchstart', onStartEvent, false); window.addEventListener('touchmove', onMoveEvent, false); window.addEventListener('touchend', onEndEvent, false); window.addEventListener('touchcancel', onEndEvent, false); } list.el.on('mousedown', onStartEvent); list.w.on('mousemove', onMoveEvent); list.w.on('mouseup', onEndEvent); }, serialize: function() { var data, depth = 0, list = this; step = function(level, depth) { var array = [ ], items = level.children(list.options.itemNodeName); items.each(function() { var li = $(this), item = $.extend({}, li.data()), sub = li.children(list.options.listNodeName); if (sub.length) { item.children = step(sub, depth + 1); } array.push(item); }); return array; }; data = step(list.el.find(list.options.listNodeName).first(), depth); return data; }, serialise: function() { return this.serialize(); }, reset: function() { this.mouse = { offsetX : 0, offsetY : 0, startX : 0, startY : 0, lastX : 0, lastY : 0, nowX : 0, nowY : 0, distX : 0, distY : 0, dirAx : 0, dirX : 0, dirY : 0, lastDirX : 0, lastDirY : 0, distAxX : 0, distAxY : 0 }; this.isTouch = false; this.moving = false; this.dragEl = null; this.dragRootEl = null; this.dragDepth = 0; this.hasNewRoot = false; this.pointEl = null; }, expandItem: function(li) { li.removeClass(this.options.collapsedClass); li.children('[data-action="expand"]').hide(); li.children('[data-action="collapse"]').show(); li.children(this.options.listNodeName).show(); }, collapseItem: function(li) { var lists = li.children(this.options.listNodeName); if (lists.length) { li.addClass(this.options.collapsedClass); li.children('[data-action="collapse"]').hide(); li.children('[data-action="expand"]').show(); li.children(this.options.listNodeName).hide(); } }, expandAll: function() { var list = this; list.el.find(list.options.itemNodeName).each(function() { list.expandItem($(this)); }); }, collapseAll: function() { var list = this; list.el.find(list.options.itemNodeName).each(function() { list.collapseItem($(this)); }); }, setParent: function(li) { if (li.children(this.options.listNodeName).length) { li.prepend($(this.options.expandBtnHTML)); li.prepend($(this.options.collapseBtnHTML)); } li.children('[data-action="expand"]').hide(); }, unsetParent: function(li) { li.removeClass(this.options.collapsedClass); li.children('[data-action]').remove(); li.children(this.options.listNodeName).remove(); }, dragStart: function(e) { var mouse = this.mouse, target = $(e.target), dragItem = target.closest(this.options.itemNodeName); this.placeEl.css('height', dragItem.height()); mouse.offsetX = e.offsetX !== undefined ? e.offsetX : e.pageX - target.offset().left; mouse.offsetY = e.offsetY !== undefined ? e.offsetY : e.pageY - target.offset().top; mouse.startX = mouse.lastX = e.pageX; mouse.startY = mouse.lastY = e.pageY; this.dragRootEl = this.el; this.dragEl = $(document.createElement(this.options.listNodeName)).addClass(this.options.listClass + ' ' + this.options.dragClass); this.dragEl.css('width', dragItem.width()); dragItem.after(this.placeEl); dragItem[0].parentNode.removeChild(dragItem[0]); dragItem.appendTo(this.dragEl); $(document.body).append(this.dragEl); this.dragEl.css({ 'left' : e.pageX - mouse.offsetX, 'top' : e.pageY - mouse.offsetY }); // total depth of dragging item var i, depth, items = this.dragEl.find(this.options.itemNodeName); for (i = 0; i < items.length; i++) { depth = $(items[i]).parents(this.options.listNodeName).length; if (depth > this.dragDepth) { this.dragDepth = depth; } } }, dragStop: function(e) { var el = this.dragEl.children(this.options.itemNodeName).first(); el[0].parentNode.removeChild(el[0]); this.placeEl.replaceWith(el); this.dragEl.remove(); this.el.trigger('change'); if (this.hasNewRoot) { this.dragRootEl.trigger('change'); } this.reset(); }, dragMove: function(e) { var list, parent, prev, next, depth, opt = this.options, mouse = this.mouse; this.dragEl.css({ 'left' : e.pageX - mouse.offsetX, 'top' : e.pageY - mouse.offsetY }); // mouse position last events mouse.lastX = mouse.nowX; mouse.lastY = mouse.nowY; // mouse position this events mouse.nowX = e.pageX; mouse.nowY = e.pageY; // distance mouse moved between events mouse.distX = mouse.nowX - mouse.lastX; mouse.distY = mouse.nowY - mouse.lastY; // direction mouse was moving mouse.lastDirX = mouse.dirX; mouse.lastDirY = mouse.dirY; // direction mouse is now moving (on both axis) mouse.dirX = mouse.distX === 0 ? 0 : mouse.distX > 0 ? 1 : -1; mouse.dirY = mouse.distY === 0 ? 0 : mouse.distY > 0 ? 1 : -1; // axis mouse is now moving on var newAx = Math.abs(mouse.distX) > Math.abs(mouse.distY) ? 1 : 0; // do nothing on first move if (!mouse.moving) { mouse.dirAx = newAx; mouse.moving = true; return; } // calc distance moved on this axis (and direction) if (mouse.dirAx !== newAx) { mouse.distAxX = 0; mouse.distAxY = 0; } else { mouse.distAxX += Math.abs(mouse.distX); if (mouse.dirX !== 0 && mouse.dirX !== mouse.lastDirX) { mouse.distAxX = 0; } mouse.distAxY += Math.abs(mouse.distY); if (mouse.dirY !== 0 && mouse.dirY !== mouse.lastDirY) { mouse.distAxY = 0; } } mouse.dirAx = newAx; /** * move horizontal */ if (mouse.dirAx && mouse.distAxX >= opt.threshold) { // reset move distance on x-axis for new phase mouse.distAxX = 0; prev = this.placeEl.prev(opt.itemNodeName); // increase horizontal level if previous sibling exists and is not collapsed if (mouse.distX > 0 && prev.length && !prev.hasClass(opt.collapsedClass)) { // cannot increase level when item above is collapsed list = prev.find(opt.listNodeName).last(); // check if depth limit has reached depth = this.placeEl.parents(opt.listNodeName).length; if (depth + this.dragDepth <= opt.maxDepth) { // create new sub-level if one doesn't exist if (!list.length) { list = $('<' + opt.listNodeName + '/>').addClass(opt.listClass); list.append(this.placeEl); prev.append(list); this.setParent(prev); } else { // else append to next level up list = prev.children(opt.listNodeName).last(); list.append(this.placeEl); } } } // decrease horizontal level if (mouse.distX < 0) { // we can't decrease a level if an item preceeds the current one next = this.placeEl.next(opt.itemNodeName); if (!next.length) { parent = this.placeEl.parent(); this.placeEl.closest(opt.itemNodeName).after(this.placeEl); if (!parent.children().length) { this.unsetParent(parent.parent()); } } } } var isEmpty = false; // find list item under cursor if (!hasPointerEvents) { this.dragEl[0].style.visibility = 'hidden'; } this.pointEl = $(document.elementFromPoint(e.pageX - document.body.scrollLeft, e.pageY - (window.pageYOffset || document.documentElement.scrollTop))); if (!hasPointerEvents) { this.dragEl[0].style.visibility = 'visible'; } if (this.pointEl.hasClass(opt.handleClass)) { this.pointEl = this.pointEl.parent(opt.itemNodeName); } if (this.pointEl.hasClass(opt.emptyClass)) { isEmpty = true; } else if (!this.pointEl.length || !this.pointEl.hasClass(opt.itemClass)) { return; } // find parent list of item under cursor var pointElRoot = this.pointEl.closest('.' + opt.rootClass), isNewRoot = this.dragRootEl.data('nestable-id') !== pointElRoot.data('nestable-id'); /** * move vertical */ if (!mouse.dirAx || isNewRoot || isEmpty) { // check if groups match if dragging over new root if (isNewRoot && opt.group !== pointElRoot.data('nestable-group')) { return; } // check depth limit depth = this.dragDepth - 1 + this.pointEl.parents(opt.listNodeName).length; if (depth > opt.maxDepth) { return; } var before = e.pageY < (this.pointEl.offset().top + this.pointEl.height() / 2); parent = this.placeEl.parent(); // if empty create new list to replace empty placeholder if (isEmpty) { list = $(document.createElement(opt.listNodeName)).addClass(opt.listClass); list.append(this.placeEl); this.pointEl.replaceWith(list); } else if (before) { this.pointEl.before(this.placeEl); } else { this.pointEl.after(this.placeEl); } if (!parent.children().length) { this.unsetParent(parent.parent()); } if (!this.dragRootEl.find(opt.itemNodeName).length) { this.dragRootEl.append('<div class="' + opt.emptyClass + '"/>'); } // parent root list has changed if (isNewRoot) { this.dragRootEl = pointElRoot; this.hasNewRoot = this.el[0] !== this.dragRootEl[0]; } } } }; $.fn.nestable = function(params) { var lists = this, retval = this; lists.each(function() { var plugin = $(this).data("nestable"); if (!plugin) { $(this).data("nestable", new Plugin(this, params)); $(this).data("nestable-id", new Date().getTime()); } else { if (typeof params === 'string' && typeof plugin[params] === 'function') { retval = plugin[params](); } } }); return retval || lists; }; })(window.jQuery || window.Zepto, window, document); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/nestable/nestable.css ================================================ .dd { position: relative; display: block; margin: 10px; padding: 0; list-style: none; font-size: 13px; line-height: 20px; } .dd-list { display: block; position: relative; margin: 0; padding: 0; list-style: none; } .dd-list .dd-list { padding-left: 30px; } .dd-collapsed .dd-list { display: none; } .dd-item, .dd-empty, .dd-placeholder { display: block; position: relative; margin: 0; padding: 0;} .dd-handle { display: block; margin: 1px 0; padding: 8px 10px; color: #333; text-decoration: none; border: 1px solid #ddd; background: #fff; } .dd-handle:hover { color: var(--primary); background: #fff; } .dd-item > button { display: block; position: relative; cursor: pointer; float: left; width: 25px; height: 20px; margin: 5px 0; padding: 0; text-indent: 100%; white-space: nowrap; overflow: hidden; border: 0; background: transparent; font-size: 12px; line-height: 1; text-align: center; font-weight: bold; } .dd-item > button:before { content: '+'; display: block; position: absolute; width: 100%; text-align: center; text-indent: 0; } .dd-item > button[data-action="collapse"]:before { content: '-'; } .dd-placeholder { margin: 5px 0; padding: 0; min-height: 30px; background: #f2fbff; border: 1px dashed #b6bcbf; box-sizing: border-box; -moz-box-sizing: border-box; } .dd-dragel { position: absolute; pointer-events: none; z-index: 9999; } .dd-dragel > .dd-item .dd-handle { margin-top: 0; } .dd-dragel .dd-handle { -webkit-box-shadow: 2px 4px 6px 0 rgba(0,0,0,.1); box-shadow: 2px 4px 6px 0 rgba(0,0,0,.1); } ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/number-input/bootstrap-number-input.js ================================================ /* ======================================================================== * bootstrap-spin - v1.0 * https://github.com/wpic/bootstrap-spin * ======================================================================== * Copyright 2014 WPIC, Hamed Abdollahpour * * ======================================================================== * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ======================================================================== */ (function ($) { $.fn.bootstrapNumber = function (options) { var settings = $.extend({ upClass: 'default', downClass: 'default', center: true }, options); return this.each(function (e) { var self = $(this); var clone = self.clone(); var min = self.attr('min'); var max = self.attr('max'); function getVal() { var val = clone.val(); if (! val || val === "NaN") { return 0; } return parseInt(val); } function setText(n) { if ((min && n < min) || (max && n > max)) { return false; } clone.focus().val(n); clone.trigger('change'); return true; } var group = $("<div class='input-group'></div>"); var down = $("<button type='button'>-</button>").attr('class', 'btn btn-' + settings.downClass).click(function () { setText(getVal() - 1); }); var up = $("<button type='button'>+</button>").attr('class', 'btn btn-' + settings.upClass).click(function () { setText(getVal() + 1); }); $("<span class='input-group-btn'></span>").append(down).appendTo(group); clone.appendTo(group); if (clone) { clone.css('text-align', 'center'); } $("<span class='input-group-btn'></span>").append(up).appendTo(group); // remove spins from original clone.prop('type', 'text').keydown(function (e) { if ($.inArray(e.keyCode, [46, 8, 9, 27, 13, 110, 190]) !== -1 || (e.keyCode == 65 && e.ctrlKey === true) || (e.keyCode >= 35 && e.keyCode <= 39)) { return; } if ((e.shiftKey || (e.keyCode < 48 || e.keyCode > 57)) && (e.keyCode < 96 || e.keyCode > 105)) { e.preventDefault(); } var c = String.fromCharCode(e.which); var n = (getVal() + c); //if ((min && n < min) || (max && n > max)) { // e.preventDefault(); //} }); clone.prop('type', 'text').blur(function (e) { var c = parseInt(String.fromCharCode(e.which)); if (isNaN(c)) { c = 0; } var n = getVal() + c; if ((min && n < min)) { setText(min); } else if (max && n > max) { setText(max); } }); self.replaceWith(group); }); }; }(jQuery)); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/i18n/af.js ================================================ /*! Select2 4.1.0-beta.1 | https://github.com/select2/select2/blob/master/LICENSE.md */ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/af",[],function(){return{errorLoading:function(){return"Die resultate kon nie gelaai word nie."},inputTooLong:function(e){var n=e.input.length-e.maximum,r="Verwyders asseblief "+n+" character";return 1!=n&&(r+="s"),r},inputTooShort:function(e){return"Voer asseblief "+(e.minimum-e.input.length)+" of meer karakters"},loadingMore:function(){return"Meer resultate word gelaai…"},maximumSelected:function(e){var n="Kies asseblief net "+e.maximum+" item";return 1!=e.maximum&&(n+="s"),n},noResults:function(){return"Geen resultate gevind"},searching:function(){return"Besig…"},removeAllItems:function(){return"Verwyder alle items"}}}),e.define,e.require}(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/i18n/ar.js ================================================ /*! Select2 4.1.0-beta.1 | https://github.com/select2/select2/blob/master/LICENSE.md */ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/ar",[],function(){return{errorLoading:function(){return"لا يمكن تحميل النتائج"},inputTooLong:function(n){return"الرجاء حذف "+(n.input.length-n.maximum)+" عناصر"},inputTooShort:function(n){return"الرجاء إضافة "+(n.minimum-n.input.length)+" عناصر"},loadingMore:function(){return"جاري تحميل نتائج إضافية..."},maximumSelected:function(n){return"تستطيع إختيار "+n.maximum+" بنود فقط"},noResults:function(){return"لم يتم العثور على أي نتائج"},searching:function(){return"جاري البحث…"},removeAllItems:function(){return"قم بإزالة كل العناصر"}}}),n.define,n.require}(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/i18n/az.js ================================================ /*! Select2 4.1.0-beta.1 | https://github.com/select2/select2/blob/master/LICENSE.md */ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/az",[],function(){return{inputTooLong:function(n){return n.input.length-n.maximum+" simvol silin"},inputTooShort:function(n){return n.minimum-n.input.length+" simvol daxil edin"},loadingMore:function(){return"Daha çox nəticə yüklənir…"},maximumSelected:function(n){return"Sadəcə "+n.maximum+" element seçə bilərsiniz"},noResults:function(){return"Nəticə tapılmadı"},searching:function(){return"Axtarılır…"},removeAllItems:function(){return"Bütün elementləri sil"}}}),n.define,n.require}(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/i18n/bg.js ================================================ /*! Select2 4.1.0-beta.1 | https://github.com/select2/select2/blob/master/LICENSE.md */ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/bg",[],function(){return{inputTooLong:function(n){var e=n.input.length-n.maximum,u="Моля въведете с "+e+" по-малко символ";return e>1&&(u+="a"),u},inputTooShort:function(n){var e=n.minimum-n.input.length,u="Моля въведете още "+e+" символ";return e>1&&(u+="a"),u},loadingMore:function(){return"Зареждат се още…"},maximumSelected:function(n){var e="Можете да направите до "+n.maximum+" ";return n.maximum>1?e+="избора":e+="избор",e},noResults:function(){return"Няма намерени съвпадения"},searching:function(){return"Търсене…"},removeAllItems:function(){return"Премахнете всички елементи"}}}),n.define,n.require}(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/i18n/bn.js ================================================ /*! Select2 4.1.0-beta.1 | https://github.com/select2/select2/blob/master/LICENSE.md */ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/bn",[],function(){return{errorLoading:function(){return"ফলাফলগুলি লোড করা যায়নি।"},inputTooLong:function(n){var e=n.input.length-n.maximum,u="অনুগ্রহ করে "+e+" টি অক্ষর মুছে দিন।";return 1!=e&&(u="অনুগ্রহ করে "+e+" টি অক্ষর মুছে দিন।"),u},inputTooShort:function(n){return n.minimum-n.input.length+" টি অক্ষর অথবা অধিক অক্ষর লিখুন।"},loadingMore:function(){return"আরো ফলাফল লোড হচ্ছে ..."},maximumSelected:function(n){var e=n.maximum+" টি আইটেম নির্বাচন করতে পারবেন।";return 1!=n.maximum&&(e=n.maximum+" টি আইটেম নির্বাচন করতে পারবেন।"),e},noResults:function(){return"কোন ফলাফল পাওয়া যায়নি।"},searching:function(){return"অনুসন্ধান করা হচ্ছে ..."}}}),n.define,n.require}(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/i18n/bs.js ================================================ /*! Select2 4.1.0-beta.1 | https://github.com/select2/select2/blob/master/LICENSE.md */ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/bs",[],function(){function e(e,n,r,t){return e%10==1&&e%100!=11?n:e%10>=2&&e%10<=4&&(e%100<12||e%100>14)?r:t}return{errorLoading:function(){return"Preuzimanje nije uspijelo."},inputTooLong:function(n){var r=n.input.length-n.maximum,t="Obrišite "+r+" simbol";return t+=e(r,"","a","a")},inputTooShort:function(n){var r=n.minimum-n.input.length,t="Ukucajte bar još "+r+" simbol";return t+=e(r,"","a","a")},loadingMore:function(){return"Preuzimanje još rezultata…"},maximumSelected:function(n){var r="Možete izabrati samo "+n.maximum+" stavk";return r+=e(n.maximum,"u","e","i")},noResults:function(){return"Ništa nije pronađeno"},searching:function(){return"Pretraga…"},removeAllItems:function(){return"Uklonite sve stavke"}}}),e.define,e.require}(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/i18n/ca.js ================================================ /*! Select2 4.1.0-beta.1 | https://github.com/select2/select2/blob/master/LICENSE.md */ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/ca",[],function(){return{errorLoading:function(){return"La càrrega ha fallat"},inputTooLong:function(e){var n=e.input.length-e.maximum,r="Si us plau, elimina "+n+" car";return r+=1==n?"àcter":"àcters"},inputTooShort:function(e){var n=e.minimum-e.input.length,r="Si us plau, introdueix "+n+" car";return r+=1==n?"àcter":"àcters"},loadingMore:function(){return"Carregant més resultats…"},maximumSelected:function(e){var n="Només es pot seleccionar "+e.maximum+" element";return 1!=e.maximum&&(n+="s"),n},noResults:function(){return"No s'han trobat resultats"},searching:function(){return"Cercant…"},removeAllItems:function(){return"Treu tots els elements"}}}),e.define,e.require}(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/i18n/cs.js ================================================ /*! Select2 4.1.0-beta.1 | https://github.com/select2/select2/blob/master/LICENSE.md */ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/cs",[],function(){function e(e,n){switch(e){case 2:return n?"dva":"dvě";case 3:return"tři";case 4:return"čtyři"}return""}return{errorLoading:function(){return"Výsledky nemohly být načteny."},inputTooLong:function(n){var t=n.input.length-n.maximum;return 1==t?"Prosím, zadejte o jeden znak méně.":t<=4?"Prosím, zadejte o "+e(t,!0)+" znaky méně.":"Prosím, zadejte o "+t+" znaků méně."},inputTooShort:function(n){var t=n.minimum-n.input.length;return 1==t?"Prosím, zadejte ještě jeden znak.":t<=4?"Prosím, zadejte ještě další "+e(t,!0)+" znaky.":"Prosím, zadejte ještě dalších "+t+" znaků."},loadingMore:function(){return"Načítají se další výsledky…"},maximumSelected:function(n){var t=n.maximum;return 1==t?"Můžete zvolit jen jednu položku.":t<=4?"Můžete zvolit maximálně "+e(t,!1)+" položky.":"Můžete zvolit maximálně "+t+" položek."},noResults:function(){return"Nenalezeny žádné položky."},searching:function(){return"Vyhledávání…"},removeAllItems:function(){return"Odstraňte všechny položky"}}}),e.define,e.require}(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/i18n/da.js ================================================ /*! Select2 4.1.0-beta.1 | https://github.com/select2/select2/blob/master/LICENSE.md */ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/da",[],function(){return{errorLoading:function(){return"Resultaterne kunne ikke indlæses."},inputTooLong:function(e){return"Angiv venligst "+(e.input.length-e.maximum)+" tegn mindre"},inputTooShort:function(e){return"Angiv venligst "+(e.minimum-e.input.length)+" tegn mere"},loadingMore:function(){return"Indlæser flere resultater…"},maximumSelected:function(e){var n="Du kan kun vælge "+e.maximum+" emne";return 1!=e.maximum&&(n+="r"),n},noResults:function(){return"Ingen resultater fundet"},searching:function(){return"Søger…"},removeAllItems:function(){return"Fjern alle elementer"}}}),e.define,e.require}(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/i18n/de.js ================================================ /*! Select2 4.1.0-beta.1 | https://github.com/select2/select2/blob/master/LICENSE.md */ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/de",[],function(){return{errorLoading:function(){return"Die Ergebnisse konnten nicht geladen werden."},inputTooLong:function(e){return"Bitte "+(e.input.length-e.maximum)+" Zeichen weniger eingeben"},inputTooShort:function(e){return"Bitte "+(e.minimum-e.input.length)+" Zeichen mehr eingeben"},loadingMore:function(){return"Lade mehr Ergebnisse…"},maximumSelected:function(e){var n="Sie können nur "+e.maximum+" Element";return 1!=e.maximum&&(n+="e"),n+=" auswählen"},noResults:function(){return"Keine Übereinstimmungen gefunden"},searching:function(){return"Suche…"},removeAllItems:function(){return"Entferne alle Elemente"}}}),e.define,e.require}(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/i18n/dsb.js ================================================ /*! Select2 4.1.0-beta.1 | https://github.com/select2/select2/blob/master/LICENSE.md */ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/dsb",[],function(){var n=["znamuško","znamušce","znamuška","znamuškow"],e=["zapisk","zapiska","zapiski","zapiskow"],u=function(n,e){return 1===n?e[0]:2===n?e[1]:n>2&&n<=4?e[2]:n>=5?e[3]:void 0};return{errorLoading:function(){return"Wuslědki njejsu se dali zacytaś."},inputTooLong:function(e){var a=e.input.length-e.maximum;return"Pšosym lašuj "+a+" "+u(a,n)},inputTooShort:function(e){var a=e.minimum-e.input.length;return"Pšosym zapódaj nanejmjenjej "+a+" "+u(a,n)},loadingMore:function(){return"Dalšne wuslědki se zacytaju…"},maximumSelected:function(n){return"Móžoš jano "+n.maximum+" "+u(n.maximum,e)+"wubraś."},noResults:function(){return"Žedne wuslědki namakane"},searching:function(){return"Pyta se…"},removeAllItems:function(){return"Remove all items"}}}),n.define,n.require}(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/i18n/el.js ================================================ /*! Select2 4.1.0-beta.1 | https://github.com/select2/select2/blob/master/LICENSE.md */ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/el",[],function(){return{errorLoading:function(){return"Τα αποτελέσματα δεν μπόρεσαν να φορτώσουν."},inputTooLong:function(n){var e=n.input.length-n.maximum,u="Παρακαλώ διαγράψτε "+e+" χαρακτήρ";return 1==e&&(u+="α"),1!=e&&(u+="ες"),u},inputTooShort:function(n){return"Παρακαλώ συμπληρώστε "+(n.minimum-n.input.length)+" ή περισσότερους χαρακτήρες"},loadingMore:function(){return"Φόρτωση περισσότερων αποτελεσμάτων…"},maximumSelected:function(n){var e="Μπορείτε να επιλέξετε μόνο "+n.maximum+" επιλογ";return 1==n.maximum&&(e+="ή"),1!=n.maximum&&(e+="ές"),e},noResults:function(){return"Δεν βρέθηκαν αποτελέσματα"},searching:function(){return"Αναζήτηση…"},removeAllItems:function(){return"Καταργήστε όλα τα στοιχεία"}}}),n.define,n.require}(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/i18n/en.js ================================================ /*! Select2 4.1.0-beta.1 | https://github.com/select2/select2/blob/master/LICENSE.md */ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/en",[],function(){return{errorLoading:function(){return"The results could not be loaded."},inputTooLong:function(e){var n=e.input.length-e.maximum,r="Please delete "+n+" character";return 1!=n&&(r+="s"),r},inputTooShort:function(e){return"Please enter "+(e.minimum-e.input.length)+" or more characters"},loadingMore:function(){return"Loading more results…"},maximumSelected:function(e){var n="You can only select "+e.maximum+" item";return 1!=e.maximum&&(n+="s"),n},noResults:function(){return"No results found"},searching:function(){return"Searching…"},removeAllItems:function(){return"Remove all items"},removeItem:function(){return"Remove item"}}}),e.define,e.require}(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/i18n/eo.js ================================================ /*! Select2 4.1.0-beta.1 | https://github.com/select2/select2/blob/master/LICENSE.md */ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/eo",[],function(){return{errorLoading:function(){return"La rezultoj ne povas esti ŝargitaj."},inputTooLong:function(n){var e=n.input.length-n.maximum,r="Bonvolu forigi "+e+" signo";return r+=1==e?"n":"jn"},inputTooShort:function(n){return"Bv. enigi "+(n.minimum-n.input.length)+" aŭ pli multajn signojn"},loadingMore:function(){return"Ŝargado de pliaj rezultoj…"},maximumSelected:function(n){var e="Vi povas elekti nur "+n.maximum+" ero";return 1==n.maximum?e+="n":e+="jn",e},noResults:function(){return"Neniuj rezultoj trovitaj"},searching:function(){return"Serĉado…"},removeAllItems:function(){return"Forigi ĉiujn erojn"}}}),n.define,n.require}(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/i18n/es.js ================================================ /*! Select2 4.1.0-beta.1 | https://github.com/select2/select2/blob/master/LICENSE.md */ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/es",[],function(){return{errorLoading:function(){return"No se pudieron cargar los resultados"},inputTooLong:function(e){var n=e.input.length-e.maximum,r="Por favor, elimine "+n+" car";return r+=1==n?"ácter":"acteres"},inputTooShort:function(e){var n=e.minimum-e.input.length,r="Por favor, introduzca "+n+" car";return r+=1==n?"ácter":"acteres"},loadingMore:function(){return"Cargando más resultados…"},maximumSelected:function(e){var n="Sólo puede seleccionar "+e.maximum+" elemento";return 1!=e.maximum&&(n+="s"),n},noResults:function(){return"No se encontraron resultados"},searching:function(){return"Buscando…"},removeAllItems:function(){return"Eliminar todos los elementos"}}}),e.define,e.require}(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/i18n/et.js ================================================ /*! Select2 4.1.0-beta.1 | https://github.com/select2/select2/blob/master/LICENSE.md */ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/et",[],function(){return{inputTooLong:function(e){var n=e.input.length-e.maximum,t="Sisesta "+n+" täht";return 1!=n&&(t+="e"),t+=" vähem"},inputTooShort:function(e){var n=e.minimum-e.input.length,t="Sisesta "+n+" täht";return 1!=n&&(t+="e"),t+=" rohkem"},loadingMore:function(){return"Laen tulemusi…"},maximumSelected:function(e){var n="Saad vaid "+e.maximum+" tulemus";return 1==e.maximum?n+="e":n+="t",n+=" valida"},noResults:function(){return"Tulemused puuduvad"},searching:function(){return"Otsin…"},removeAllItems:function(){return"Eemalda kõik esemed"}}}),e.define,e.require}(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/i18n/eu.js ================================================ /*! Select2 4.1.0-beta.1 | https://github.com/select2/select2/blob/master/LICENSE.md */ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/eu",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Idatzi ";return n+=1==t?"karaktere bat":t+" karaktere",n+=" gutxiago"},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Idatzi ";return n+=1==t?"karaktere bat":t+" karaktere",n+=" gehiago"},loadingMore:function(){return"Emaitza gehiago kargatzen…"},maximumSelected:function(e){return 1===e.maximum?"Elementu bakarra hauta dezakezu":e.maximum+" elementu hauta ditzakezu soilik"},noResults:function(){return"Ez da bat datorrenik aurkitu"},searching:function(){return"Bilatzen…"},removeAllItems:function(){return"Kendu elementu guztiak"}}}),e.define,e.require}(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/i18n/fa.js ================================================ /*! Select2 4.1.0-beta.1 | https://github.com/select2/select2/blob/master/LICENSE.md */ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/fa",[],function(){return{errorLoading:function(){return"امکان بارگذاری نتایج وجود ندارد."},inputTooLong:function(n){return"لطفاً "+(n.input.length-n.maximum)+" کاراکتر را حذف نمایید"},inputTooShort:function(n){return"لطفاً تعداد "+(n.minimum-n.input.length)+" کاراکتر یا بیشتر وارد نمایید"},loadingMore:function(){return"در حال بارگذاری نتایج بیشتر..."},maximumSelected:function(n){return"شما تنها می‌توانید "+n.maximum+" آیتم را انتخاب نمایید"},noResults:function(){return"هیچ نتیجه‌ای یافت نشد"},searching:function(){return"در حال جستجو..."},removeAllItems:function(){return"همه موارد را حذف کنید"}}}),n.define,n.require}(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/i18n/fi.js ================================================ /*! Select2 4.1.0-beta.1 | https://github.com/select2/select2/blob/master/LICENSE.md */ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/fi",[],function(){return{errorLoading:function(){return"Tuloksia ei saatu ladattua."},inputTooLong:function(n){return"Ole hyvä ja anna "+(n.input.length-n.maximum)+" merkkiä vähemmän"},inputTooShort:function(n){return"Ole hyvä ja anna "+(n.minimum-n.input.length)+" merkkiä lisää"},loadingMore:function(){return"Ladataan lisää tuloksia…"},maximumSelected:function(n){return"Voit valita ainoastaan "+n.maximum+" kpl"},noResults:function(){return"Ei tuloksia"},searching:function(){return"Haetaan…"},removeAllItems:function(){return"Poista kaikki kohteet"}}}),n.define,n.require}(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/i18n/fr.js ================================================ /*! Select2 4.1.0-beta.1 | https://github.com/select2/select2/blob/master/LICENSE.md */ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/fr",[],function(){return{errorLoading:function(){return"Les résultats ne peuvent pas être chargés."},inputTooLong:function(e){var n=e.input.length-e.maximum;return"Supprimez "+n+" caractère"+(n>1?"s":"")},inputTooShort:function(e){var n=e.minimum-e.input.length;return"Saisissez au moins "+n+" caractère"+(n>1?"s":"")},loadingMore:function(){return"Chargement de résultats supplémentaires…"},maximumSelected:function(e){return"Vous pouvez seulement sélectionner "+e.maximum+" élément"+(e.maximum>1?"s":"")},noResults:function(){return"Aucun résultat trouvé"},searching:function(){return"Recherche en cours…"},removeAllItems:function(){return"Supprimer tous les éléments"}}}),e.define,e.require}(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/i18n/gl.js ================================================ /*! Select2 4.1.0-beta.1 | https://github.com/select2/select2/blob/master/LICENSE.md */ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/gl",[],function(){return{errorLoading:function(){return"Non foi posíbel cargar os resultados."},inputTooLong:function(e){var n=e.input.length-e.maximum;return 1===n?"Elimine un carácter":"Elimine "+n+" caracteres"},inputTooShort:function(e){var n=e.minimum-e.input.length;return 1===n?"Engada un carácter":"Engada "+n+" caracteres"},loadingMore:function(){return"Cargando máis resultados…"},maximumSelected:function(e){return 1===e.maximum?"Só pode seleccionar un elemento":"Só pode seleccionar "+e.maximum+" elementos"},noResults:function(){return"Non se atoparon resultados"},searching:function(){return"Buscando…"},removeAllItems:function(){return"Elimina todos os elementos"}}}),e.define,e.require}(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/i18n/he.js ================================================ /*! Select2 4.1.0-beta.1 | https://github.com/select2/select2/blob/master/LICENSE.md */ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/he",[],function(){return{errorLoading:function(){return"שגיאה בטעינת התוצאות"},inputTooLong:function(n){var e=n.input.length-n.maximum,r="נא למחוק ";return r+=1===e?"תו אחד":e+" תווים"},inputTooShort:function(n){var e=n.minimum-n.input.length,r="נא להכניס ";return r+=1===e?"תו אחד":e+" תווים",r+=" או יותר"},loadingMore:function(){return"טוען תוצאות נוספות…"},maximumSelected:function(n){var e="באפשרותך לבחור עד ";return 1===n.maximum?e+="פריט אחד":e+=n.maximum+" פריטים",e},noResults:function(){return"לא נמצאו תוצאות"},searching:function(){return"מחפש…"},removeAllItems:function(){return"הסר את כל הפריטים"}}}),n.define,n.require}(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/i18n/hi.js ================================================ /*! Select2 4.1.0-beta.1 | https://github.com/select2/select2/blob/master/LICENSE.md */ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/hi",[],function(){return{errorLoading:function(){return"परिणामों को लोड नहीं किया जा सका।"},inputTooLong:function(n){var e=n.input.length-n.maximum,r=e+" अक्षर को हटा दें";return e>1&&(r=e+" अक्षरों को हटा दें "),r},inputTooShort:function(n){return"कृपया "+(n.minimum-n.input.length)+" या अधिक अक्षर दर्ज करें"},loadingMore:function(){return"अधिक परिणाम लोड हो रहे है..."},maximumSelected:function(n){return"आप केवल "+n.maximum+" आइटम का चयन कर सकते हैं"},noResults:function(){return"कोई परिणाम नहीं मिला"},searching:function(){return"खोज रहा है..."},removeAllItems:function(){return"सभी वस्तुओं को हटा दें"}}}),n.define,n.require}(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/i18n/hr.js ================================================ /*! Select2 4.1.0-beta.1 | https://github.com/select2/select2/blob/master/LICENSE.md */ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/hr",[],function(){function n(n){var e=" "+n+" znak";return n%10<5&&n%10>0&&(n%100<5||n%100>19)?n%10>1&&(e+="a"):e+="ova",e}return{errorLoading:function(){return"Preuzimanje nije uspjelo."},inputTooLong:function(e){return"Unesite "+n(e.input.length-e.maximum)},inputTooShort:function(e){return"Unesite još "+n(e.minimum-e.input.length)},loadingMore:function(){return"Učitavanje rezultata…"},maximumSelected:function(n){return"Maksimalan broj odabranih stavki je "+n.maximum},noResults:function(){return"Nema rezultata"},searching:function(){return"Pretraga…"},removeAllItems:function(){return"Ukloni sve stavke"}}}),n.define,n.require}(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/i18n/hsb.js ================================================ /*! Select2 4.1.0-beta.1 | https://github.com/select2/select2/blob/master/LICENSE.md */ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/hsb",[],function(){var n=["znamješko","znamješce","znamješka","znamješkow"],e=["zapisk","zapiskaj","zapiski","zapiskow"],u=function(n,e){return 1===n?e[0]:2===n?e[1]:n>2&&n<=4?e[2]:n>=5?e[3]:void 0};return{errorLoading:function(){return"Wuslědki njedachu so začitać."},inputTooLong:function(e){var a=e.input.length-e.maximum;return"Prošu zhašej "+a+" "+u(a,n)},inputTooShort:function(e){var a=e.minimum-e.input.length;return"Prošu zapodaj znajmjeńša "+a+" "+u(a,n)},loadingMore:function(){return"Dalše wuslědki so začitaja…"},maximumSelected:function(n){return"Móžeš jenož "+n.maximum+" "+u(n.maximum,e)+"wubrać"},noResults:function(){return"Žane wuslědki namakane"},searching:function(){return"Pyta so…"},removeAllItems:function(){return"Remove all items"}}}),n.define,n.require}(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/i18n/hu.js ================================================ /*! Select2 4.1.0-beta.1 | https://github.com/select2/select2/blob/master/LICENSE.md */ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/hu",[],function(){return{errorLoading:function(){return"Az eredmények betöltése nem sikerült."},inputTooLong:function(e){return"Túl hosszú. "+(e.input.length-e.maximum)+" karakterrel több, mint kellene."},inputTooShort:function(e){return"Túl rövid. Még "+(e.minimum-e.input.length)+" karakter hiányzik."},loadingMore:function(){return"Töltés…"},maximumSelected:function(e){return"Csak "+e.maximum+" elemet lehet kiválasztani."},noResults:function(){return"Nincs találat."},searching:function(){return"Keresés…"},removeAllItems:function(){return"Távolítson el minden elemet"}}}),e.define,e.require}(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/i18n/hy.js ================================================ /*! Select2 4.1.0-beta.1 | https://github.com/select2/select2/blob/master/LICENSE.md */ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/hy",[],function(){return{errorLoading:function(){return"Արդյունքները հնարավոր չէ բեռնել։"},inputTooLong:function(n){return"Խնդրում ենք հեռացնել "+(n.input.length-n.maximum)+" նշան"},inputTooShort:function(n){return"Խնդրում ենք մուտքագրել "+(n.minimum-n.input.length)+" կամ ավել նշաններ"},loadingMore:function(){return"Բեռնվում են նոր արդյունքներ․․․"},maximumSelected:function(n){return"Դուք կարող եք ընտրել առավելագույնը "+n.maximum+" կետ"},noResults:function(){return"Արդյունքներ չեն գտնվել"},searching:function(){return"Որոնում․․․"},removeAllItems:function(){return"Հեռացնել բոլոր տարրերը"}}}),n.define,n.require}(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/i18n/id.js ================================================ /*! Select2 4.1.0-beta.1 | https://github.com/select2/select2/blob/master/LICENSE.md */ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/id",[],function(){return{errorLoading:function(){return"Data tidak boleh diambil."},inputTooLong:function(n){return"Hapuskan "+(n.input.length-n.maximum)+" huruf"},inputTooShort:function(n){return"Masukkan "+(n.minimum-n.input.length)+" huruf lagi"},loadingMore:function(){return"Mengambil data…"},maximumSelected:function(n){return"Anda hanya dapat memilih "+n.maximum+" pilihan"},noResults:function(){return"Tidak ada data yang sesuai"},searching:function(){return"Mencari…"},removeAllItems:function(){return"Hapus semua item"}}}),n.define,n.require}(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/i18n/is.js ================================================ /*! Select2 4.1.0-beta.1 | https://github.com/select2/select2/blob/master/LICENSE.md */ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/is",[],function(){return{inputTooLong:function(n){var t=n.input.length-n.maximum,e="Vinsamlegast styttið texta um "+t+" staf";return t<=1?e:e+"i"},inputTooShort:function(n){var t=n.minimum-n.input.length,e="Vinsamlegast skrifið "+t+" staf";return t>1&&(e+="i"),e+=" í viðbót"},loadingMore:function(){return"Sæki fleiri niðurstöður…"},maximumSelected:function(n){return"Þú getur aðeins valið "+n.maximum+" atriði"},noResults:function(){return"Ekkert fannst"},searching:function(){return"Leita…"},removeAllItems:function(){return"Fjarlægðu öll atriði"}}}),n.define,n.require}(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/i18n/it.js ================================================ /*! Select2 4.1.0-beta.1 | https://github.com/select2/select2/blob/master/LICENSE.md */ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/it",[],function(){return{errorLoading:function(){return"I risultati non possono essere caricati."},inputTooLong:function(e){var n=e.input.length-e.maximum,t="Per favore cancella "+n+" caratter";return t+=1!==n?"i":"e"},inputTooShort:function(e){return"Per favore inserisci "+(e.minimum-e.input.length)+" o più caratteri"},loadingMore:function(){return"Caricando più risultati…"},maximumSelected:function(e){var n="Puoi selezionare solo "+e.maximum+" element";return 1!==e.maximum?n+="i":n+="o",n},noResults:function(){return"Nessun risultato trovato"},searching:function(){return"Sto cercando…"},removeAllItems:function(){return"Rimuovi tutti gli oggetti"}}}),e.define,e.require}(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/i18n/ja.js ================================================ /*! Select2 4.1.0-beta.1 | https://github.com/select2/select2/blob/master/LICENSE.md */ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/ja",[],function(){return{errorLoading:function(){return"結果が読み込まれませんでした"},inputTooLong:function(n){return n.input.length-n.maximum+" 文字を削除してください"},inputTooShort:function(n){return"少なくとも "+(n.minimum-n.input.length)+" 文字を入力してください"},loadingMore:function(){return"読み込み中…"},maximumSelected:function(n){return n.maximum+" 件しか選択できません"},noResults:function(){return"対象が見つかりません"},searching:function(){return"検索しています…"},removeAllItems:function(){return"すべてのアイテムを削除"}}}),n.define,n.require}(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/i18n/ka.js ================================================ /*! Select2 4.1.0-beta.1 | https://github.com/select2/select2/blob/master/LICENSE.md */ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/ka",[],function(){return{errorLoading:function(){return"მონაცემების ჩატვირთვა შეუძლებელია."},inputTooLong:function(n){return"გთხოვთ აკრიფეთ "+(n.input.length-n.maximum)+" სიმბოლოთი ნაკლები"},inputTooShort:function(n){return"გთხოვთ აკრიფეთ "+(n.minimum-n.input.length)+" სიმბოლო ან მეტი"},loadingMore:function(){return"მონაცემების ჩატვირთვა…"},maximumSelected:function(n){return"თქვენ შეგიძლიათ აირჩიოთ არაუმეტეს "+n.maximum+" ელემენტი"},noResults:function(){return"რეზულტატი არ მოიძებნა"},searching:function(){return"ძიება…"},removeAllItems:function(){return"ამოიღე ყველა ელემენტი"}}}),n.define,n.require}(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/i18n/km.js ================================================ /*! Select2 4.1.0-beta.1 | https://github.com/select2/select2/blob/master/LICENSE.md */ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/km",[],function(){return{errorLoading:function(){return"មិនអាចទាញយកទិន្នន័យ"},inputTooLong:function(n){return"សូមលុបចេញ "+(n.input.length-n.maximum)+" អក្សរ"},inputTooShort:function(n){return"សូមបញ្ចូល"+(n.minimum-n.input.length)+" អក្សរ រឺ ច្រើនជាងនេះ"},loadingMore:function(){return"កំពុងទាញយកទិន្នន័យបន្ថែម..."},maximumSelected:function(n){return"អ្នកអាចជ្រើសរើសបានតែ "+n.maximum+" ជម្រើសប៉ុណ្ណោះ"},noResults:function(){return"មិនមានលទ្ធផល"},searching:function(){return"កំពុងស្វែងរក..."},removeAllItems:function(){return"លុបធាតុទាំងអស់"}}}),n.define,n.require}(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/i18n/ko.js ================================================ /*! Select2 4.1.0-beta.1 | https://github.com/select2/select2/blob/master/LICENSE.md */ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/ko",[],function(){return{errorLoading:function(){return"결과를 불러올 수 없습니다."},inputTooLong:function(n){return"너무 깁니다. "+(n.input.length-n.maximum)+" 글자 지워주세요."},inputTooShort:function(n){return"너무 짧습니다. "+(n.minimum-n.input.length)+" 글자 더 입력해주세요."},loadingMore:function(){return"불러오는 중…"},maximumSelected:function(n){return"최대 "+n.maximum+"개까지만 선택 가능합니다."},noResults:function(){return"결과가 없습니다."},searching:function(){return"검색 중…"},removeAllItems:function(){return"모든 항목 삭제"}}}),n.define,n.require}(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/i18n/lt.js ================================================ /*! Select2 4.1.0-beta.1 | https://github.com/select2/select2/blob/master/LICENSE.md */ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/lt",[],function(){function n(n,e,i,t){return n%10==1&&(n%100<11||n%100>19)?e:n%10>=2&&n%10<=9&&(n%100<11||n%100>19)?i:t}return{inputTooLong:function(e){var i=e.input.length-e.maximum,t="Pašalinkite "+i+" simbol";return t+=n(i,"į","ius","ių")},inputTooShort:function(e){var i=e.minimum-e.input.length,t="Įrašykite dar "+i+" simbol";return t+=n(i,"į","ius","ių")},loadingMore:function(){return"Kraunama daugiau rezultatų…"},maximumSelected:function(e){var i="Jūs galite pasirinkti tik "+e.maximum+" element";return i+=n(e.maximum,"ą","us","ų")},noResults:function(){return"Atitikmenų nerasta"},searching:function(){return"Ieškoma…"},removeAllItems:function(){return"Pašalinti visus elementus"}}}),n.define,n.require}(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/i18n/lv.js ================================================ /*! Select2 4.1.0-beta.1 | https://github.com/select2/select2/blob/master/LICENSE.md */ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/lv",[],function(){function e(e,n,u,i){return 11===e?n:e%10==1?u:i}return{inputTooLong:function(n){var u=n.input.length-n.maximum,i="Lūdzu ievadiet par "+u;return(i+=" simbol"+e(u,"iem","u","iem"))+" mazāk"},inputTooShort:function(n){var u=n.minimum-n.input.length,i="Lūdzu ievadiet vēl "+u;return i+=" simbol"+e(u,"us","u","us")},loadingMore:function(){return"Datu ielāde…"},maximumSelected:function(n){var u="Jūs varat izvēlēties ne vairāk kā "+n.maximum;return u+=" element"+e(n.maximum,"us","u","us")},noResults:function(){return"Sakritību nav"},searching:function(){return"Meklēšana…"},removeAllItems:function(){return"Noņemt visus vienumus"}}}),e.define,e.require}(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/i18n/mk.js ================================================ /*! Select2 4.1.0-beta.1 | https://github.com/select2/select2/blob/master/LICENSE.md */ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/mk",[],function(){return{inputTooLong:function(n){var e=(n.input.length,n.maximum,"Ве молиме внесете "+n.maximum+" помалку карактер");return 1!==n.maximum&&(e+="и"),e},inputTooShort:function(n){var e=(n.minimum,n.input.length,"Ве молиме внесете уште "+n.maximum+" карактер");return 1!==n.maximum&&(e+="и"),e},loadingMore:function(){return"Вчитување резултати…"},maximumSelected:function(n){var e="Можете да изберете само "+n.maximum+" ставк";return 1===n.maximum?e+="а":e+="и",e},noResults:function(){return"Нема пронајдено совпаѓања"},searching:function(){return"Пребарување…"},removeAllItems:function(){return"Отстрани ги сите предмети"}}}),n.define,n.require}(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/i18n/ms.js ================================================ /*! Select2 4.1.0-beta.1 | https://github.com/select2/select2/blob/master/LICENSE.md */ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/ms",[],function(){return{errorLoading:function(){return"Keputusan tidak berjaya dimuatkan."},inputTooLong:function(n){return"Sila hapuskan "+(n.input.length-n.maximum)+" aksara"},inputTooShort:function(n){return"Sila masukkan "+(n.minimum-n.input.length)+" atau lebih aksara"},loadingMore:function(){return"Sedang memuatkan keputusan…"},maximumSelected:function(n){return"Anda hanya boleh memilih "+n.maximum+" pilihan"},noResults:function(){return"Tiada padanan yang ditemui"},searching:function(){return"Mencari…"},removeAllItems:function(){return"Keluarkan semua item"}}}),n.define,n.require}(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/i18n/nb.js ================================================ /*! Select2 4.1.0-beta.1 | https://github.com/select2/select2/blob/master/LICENSE.md */ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/nb",[],function(){return{errorLoading:function(){return"Kunne ikke hente resultater."},inputTooLong:function(e){return"Vennligst fjern "+(e.input.length-e.maximum)+" tegn"},inputTooShort:function(e){return"Vennligst skriv inn "+(e.minimum-e.input.length)+" tegn til"},loadingMore:function(){return"Laster flere resultater…"},maximumSelected:function(e){return"Du kan velge maks "+e.maximum+" elementer"},noResults:function(){return"Ingen treff"},searching:function(){return"Søker…"},removeAllItems:function(){return"Fjern alle elementer"}}}),e.define,e.require}(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/i18n/ne.js ================================================ /*! Select2 4.1.0-beta.1 | https://github.com/select2/select2/blob/master/LICENSE.md */ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/ne",[],function(){return{errorLoading:function(){return"नतिजाहरु देखाउन सकिएन।"},inputTooLong:function(n){var e=n.input.length-n.maximum,u="कृपया "+e+" अक्षर मेटाउनुहोस्।";return 1!=e&&(u+="कृपया "+e+" अक्षरहरु मेटाउनुहोस्।"),u},inputTooShort:function(n){return"कृपया बाँकी रहेका "+(n.minimum-n.input.length)+" वा अरु धेरै अक्षरहरु भर्नुहोस्।"},loadingMore:function(){return"अरु नतिजाहरु भरिँदैछन् …"},maximumSelected:function(n){var e="तँपाई "+n.maximum+" वस्तु मात्र छान्न पाउँनुहुन्छ।";return 1!=n.maximum&&(e="तँपाई "+n.maximum+" वस्तुहरु मात्र छान्न पाउँनुहुन्छ।"),e},noResults:function(){return"कुनै पनि नतिजा भेटिएन।"},searching:function(){return"खोजि हुँदैछ…"}}}),n.define,n.require}(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/i18n/nl.js ================================================ /*! Select2 4.1.0-beta.1 | https://github.com/select2/select2/blob/master/LICENSE.md */ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/nl",[],function(){return{errorLoading:function(){return"De resultaten konden niet worden geladen."},inputTooLong:function(e){return"Gelieve "+(e.input.length-e.maximum)+" karakters te verwijderen"},inputTooShort:function(e){return"Gelieve "+(e.minimum-e.input.length)+" of meer karakters in te voeren"},loadingMore:function(){return"Meer resultaten laden…"},maximumSelected:function(e){var n=1==e.maximum?"kan":"kunnen",r="Er "+n+" maar "+e.maximum+" item";return 1!=e.maximum&&(r+="s"),r+=" worden geselecteerd"},noResults:function(){return"Geen resultaten gevonden…"},searching:function(){return"Zoeken…"},removeAllItems:function(){return"Verwijder alle items"}}}),e.define,e.require}(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/i18n/pa.js ================================================ /*! Select2 4.1.0-beta.1 | https://github.com/select2/select2/blob/master/LICENSE.md */ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/pa",[],function(){return{errorLoading:function(){return"ਨਤੀਜੇ ਲੋਡ ਨਹੀਂ ਕੀਤੇ ਜਾ ਸਕਦੇ ।"},inputTooLong:function(n){var e=n.input.length-n.maximum;return"ਕ੍ਰਿਪਾ ਕਰਕੇ "+e+(1!=e?" ਅੱਖਰਾਂ ਨੂੰ ":" ਅੱਖਰ ")+"ਮਿਟਾਓ ।"},inputTooShort:function(n){var e=n.minimum-n.input.length;return"ਕ੍ਰਿਪਾ ਕਰਕੇ "+e+" ਜਾਂ "+e+" ਤੋਂ ਵੱਧ"+(e>1?" ਅੱਖਰਾਂ ":" ਅੱਖਰ ")+"ਦੀ ਵਰਤੋਂ ਕਰੋ ।"},loadingMore:function(){return"ਹੋਰ ਨਤੀਜੇ ਲੋਡ ਹੋ ਰਹੇ ਹਨ ...।"},maximumSelected:function(n){var e="ਤੁਸੀਂ ਸਿਰਫ਼ "+n.maximum+" ਨਤੀਜਾ ਚੁਣ ਸਕਦੇ ਹੋ ।";return 1!=n.maximum&&(e="ਤੁਸੀਂ ਸਿਰਫ਼ "+n.maximum+" ਨਤੀਜੇ ਚੁਣ ਸਕਦੇ ਹੋ ।"),e},noResults:function(){return"ਨਤੀਜਾ ਨਹੀਂ ਮਿਲ ਰਿਹਾ ਹੈ ।"},searching:function(){return"ਖ਼ੋਜ ਕਰ ਰਹੇਂ ਹਾਂ ...।"},removeAllItems:function(){return"ਸਾਰੇ ਨਤੀਜੇ ਮਿਟਾਓ ।"}}}),n.define,n.require}(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/i18n/pl.js ================================================ /*! Select2 4.1.0-beta.1 | https://github.com/select2/select2/blob/master/LICENSE.md */ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/pl",[],function(){var n=["znak","znaki","znaków"],e=["element","elementy","elementów"],r=function(n,e){return 1===n?e[0]:n>1&&n<=4?e[1]:n>=5?e[2]:void 0};return{errorLoading:function(){return"Nie można załadować wyników."},inputTooLong:function(e){var t=e.input.length-e.maximum;return"Usuń "+t+" "+r(t,n)},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Podaj przynajmniej "+t+" "+r(t,n)},loadingMore:function(){return"Trwa ładowanie…"},maximumSelected:function(n){return"Możesz zaznaczyć tylko "+n.maximum+" "+r(n.maximum,e)},noResults:function(){return"Brak wyników"},searching:function(){return"Trwa wyszukiwanie…"},removeAllItems:function(){return"Usuń wszystkie przedmioty"}}}),n.define,n.require}(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/i18n/ps.js ================================================ /*! Select2 4.1.0-beta.1 | https://github.com/select2/select2/blob/master/LICENSE.md */ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/ps",[],function(){return{errorLoading:function(){return"پايلي نه سي ترلاسه کېدای"},inputTooLong:function(n){var e=n.input.length-n.maximum,r="د مهربانۍ لمخي "+e+" توری ړنګ کړئ";return 1!=e&&(r=r.replace("توری","توري")),r},inputTooShort:function(n){return"لږ تر لږه "+(n.minimum-n.input.length)+" يا ډېر توري وليکئ"},loadingMore:function(){return"نوري پايلي ترلاسه کيږي..."},maximumSelected:function(n){var e="تاسو يوازي "+n.maximum+" قلم په نښه کولای سی";return 1!=n.maximum&&(e=e.replace("قلم","قلمونه")),e},noResults:function(){return"پايلي و نه موندل سوې"},searching:function(){return"لټول کيږي..."},removeAllItems:function(){return"ټول توکي لرې کړئ"}}}),n.define,n.require}(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/i18n/pt-BR.js ================================================ /*! Select2 4.1.0-beta.1 | https://github.com/select2/select2/blob/master/LICENSE.md */ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/pt-BR",[],function(){return{errorLoading:function(){return"Os resultados não puderam ser carregados."},inputTooLong:function(e){var n=e.input.length-e.maximum,r="Apague "+n+" caracter";return 1!=n&&(r+="es"),r},inputTooShort:function(e){return"Digite "+(e.minimum-e.input.length)+" ou mais caracteres"},loadingMore:function(){return"Carregando mais resultados…"},maximumSelected:function(e){var n="Você só pode selecionar "+e.maximum+" ite";return 1==e.maximum?n+="m":n+="ns",n},noResults:function(){return"Nenhum resultado encontrado"},searching:function(){return"Buscando…"},removeAllItems:function(){return"Remover todos os itens"}}}),e.define,e.require}(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/i18n/pt.js ================================================ /*! Select2 4.1.0-beta.1 | https://github.com/select2/select2/blob/master/LICENSE.md */ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/pt",[],function(){return{errorLoading:function(){return"Os resultados não puderam ser carregados."},inputTooLong:function(e){var r=e.input.length-e.maximum,n="Por favor apague "+r+" ";return n+=1!=r?"caracteres":"caractere"},inputTooShort:function(e){return"Introduza "+(e.minimum-e.input.length)+" ou mais caracteres"},loadingMore:function(){return"A carregar mais resultados…"},maximumSelected:function(e){var r="Apenas pode seleccionar "+e.maximum+" ";return r+=1!=e.maximum?"itens":"item"},noResults:function(){return"Sem resultados"},searching:function(){return"A procurar…"},removeAllItems:function(){return"Remover todos os itens"}}}),e.define,e.require}(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/i18n/ro.js ================================================ /*! Select2 4.1.0-beta.1 | https://github.com/select2/select2/blob/master/LICENSE.md */ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/ro",[],function(){return{errorLoading:function(){return"Rezultatele nu au putut fi incărcate."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Vă rugăm să ștergeți"+t+" caracter";return 1!==t&&(n+="e"),n},inputTooShort:function(e){return"Vă rugăm să introduceți "+(e.minimum-e.input.length)+" sau mai multe caractere"},loadingMore:function(){return"Se încarcă mai multe rezultate…"},maximumSelected:function(e){var t="Aveți voie să selectați cel mult "+e.maximum;return t+=" element",1!==e.maximum&&(t+="e"),t},noResults:function(){return"Nu au fost găsite rezultate"},searching:function(){return"Căutare…"},removeAllItems:function(){return"Eliminați toate elementele"}}}),e.define,e.require}(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/i18n/ru.js ================================================ /*! Select2 4.1.0-beta.1 | https://github.com/select2/select2/blob/master/LICENSE.md */ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/ru",[],function(){function n(n,e,r,u){return n%10<5&&n%10>0&&n%100<5||n%100>20?n%10>1?r:e:u}return{errorLoading:function(){return"Невозможно загрузить результаты"},inputTooLong:function(e){var r=e.input.length-e.maximum,u="Пожалуйста, введите на "+r+" символ";return u+=n(r,"","a","ов"),u+=" меньше"},inputTooShort:function(e){var r=e.minimum-e.input.length,u="Пожалуйста, введите ещё хотя бы "+r+" символ";return u+=n(r,"","a","ов")},loadingMore:function(){return"Загрузка данных…"},maximumSelected:function(e){var r="Вы можете выбрать не более "+e.maximum+" элемент";return r+=n(e.maximum,"","a","ов")},noResults:function(){return"Совпадений не найдено"},searching:function(){return"Поиск…"},removeAllItems:function(){return"Удалить все элементы"}}}),n.define,n.require}(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/i18n/sk.js ================================================ /*! Select2 4.1.0-beta.1 | https://github.com/select2/select2/blob/master/LICENSE.md */ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/sk",[],function(){var e={2:function(e){return e?"dva":"dve"},3:function(){return"tri"},4:function(){return"štyri"}};return{errorLoading:function(){return"Výsledky sa nepodarilo načítať."},inputTooLong:function(n){var t=n.input.length-n.maximum;return 1==t?"Prosím, zadajte o jeden znak menej":t>=2&&t<=4?"Prosím, zadajte o "+e[t](!0)+" znaky menej":"Prosím, zadajte o "+t+" znakov menej"},inputTooShort:function(n){var t=n.minimum-n.input.length;return 1==t?"Prosím, zadajte ešte jeden znak":t<=4?"Prosím, zadajte ešte ďalšie "+e[t](!0)+" znaky":"Prosím, zadajte ešte ďalších "+t+" znakov"},loadingMore:function(){return"Načítanie ďalších výsledkov…"},maximumSelected:function(n){return 1==n.maximum?"Môžete zvoliť len jednu položku":n.maximum>=2&&n.maximum<=4?"Môžete zvoliť najviac "+e[n.maximum](!1)+" položky":"Môžete zvoliť najviac "+n.maximum+" položiek"},noResults:function(){return"Nenašli sa žiadne položky"},searching:function(){return"Vyhľadávanie…"},removeAllItems:function(){return"Odstráňte všetky položky"}}}),e.define,e.require}(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/i18n/sl.js ================================================ /*! Select2 4.1.0-beta.1 | https://github.com/select2/select2/blob/master/LICENSE.md */ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/sl",[],function(){return{errorLoading:function(){return"Zadetkov iskanja ni bilo mogoče naložiti."},inputTooLong:function(e){var n=e.input.length-e.maximum,t="Prosim zbrišite "+n+" znak";return 2==n?t+="a":1!=n&&(t+="e"),t},inputTooShort:function(e){var n=e.minimum-e.input.length,t="Prosim vpišite še "+n+" znak";return 2==n?t+="a":1!=n&&(t+="e"),t},loadingMore:function(){return"Nalagam več zadetkov…"},maximumSelected:function(e){var n="Označite lahko največ "+e.maximum+" predmet";return 2==e.maximum?n+="a":1!=e.maximum&&(n+="e"),n},noResults:function(){return"Ni zadetkov."},searching:function(){return"Iščem…"},removeAllItems:function(){return"Odstranite vse elemente"}}}),e.define,e.require}(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/i18n/sq.js ================================================ /*! Select2 4.1.0-beta.1 | https://github.com/select2/select2/blob/master/LICENSE.md */ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/sq",[],function(){return{errorLoading:function(){return"Rezultatet nuk mund të ngarkoheshin."},inputTooLong:function(e){var n=e.input.length-e.maximum,t="Të lutem fshi "+n+" karakter";return 1!=n&&(t+="e"),t},inputTooShort:function(e){return"Të lutem shkruaj "+(e.minimum-e.input.length)+" ose më shumë karaktere"},loadingMore:function(){return"Duke ngarkuar më shumë rezultate…"},maximumSelected:function(e){var n="Mund të zgjedhësh vetëm "+e.maximum+" element";return 1!=e.maximum&&(n+="e"),n},noResults:function(){return"Nuk u gjet asnjë rezultat"},searching:function(){return"Duke kërkuar…"},removeAllItems:function(){return"Hiq të gjitha sendet"}}}),e.define,e.require}(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/i18n/sr-Cyrl.js ================================================ /*! Select2 4.1.0-beta.1 | https://github.com/select2/select2/blob/master/LICENSE.md */ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/sr-Cyrl",[],function(){function n(n,e,r,u){return n%10==1&&n%100!=11?e:n%10>=2&&n%10<=4&&(n%100<12||n%100>14)?r:u}return{errorLoading:function(){return"Преузимање није успело."},inputTooLong:function(e){var r=e.input.length-e.maximum,u="Обришите "+r+" симбол";return u+=n(r,"","а","а")},inputTooShort:function(e){var r=e.minimum-e.input.length,u="Укуцајте бар још "+r+" симбол";return u+=n(r,"","а","а")},loadingMore:function(){return"Преузимање још резултата…"},maximumSelected:function(e){var r="Можете изабрати само "+e.maximum+" ставк";return r+=n(e.maximum,"у","е","и")},noResults:function(){return"Ништа није пронађено"},searching:function(){return"Претрага…"},removeAllItems:function(){return"Уклоните све ставке"}}}),n.define,n.require}(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/i18n/sr.js ================================================ /*! Select2 4.1.0-beta.1 | https://github.com/select2/select2/blob/master/LICENSE.md */ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/sr",[],function(){function n(n,e,r,t){return n%10==1&&n%100!=11?e:n%10>=2&&n%10<=4&&(n%100<12||n%100>14)?r:t}return{errorLoading:function(){return"Preuzimanje nije uspelo."},inputTooLong:function(e){var r=e.input.length-e.maximum,t="Obrišite "+r+" simbol";return t+=n(r,"","a","a")},inputTooShort:function(e){var r=e.minimum-e.input.length,t="Ukucajte bar još "+r+" simbol";return t+=n(r,"","a","a")},loadingMore:function(){return"Preuzimanje još rezultata…"},maximumSelected:function(e){var r="Možete izabrati samo "+e.maximum+" stavk";return r+=n(e.maximum,"u","e","i")},noResults:function(){return"Ništa nije pronađeno"},searching:function(){return"Pretraga…"},removeAllItems:function(){return"Уклоните све ставке"}}}),n.define,n.require}(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/i18n/sv.js ================================================ /*! Select2 4.1.0-beta.1 | https://github.com/select2/select2/blob/master/LICENSE.md */ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/sv",[],function(){return{errorLoading:function(){return"Resultat kunde inte laddas."},inputTooLong:function(n){return"Vänligen sudda ut "+(n.input.length-n.maximum)+" tecken"},inputTooShort:function(n){return"Vänligen skriv in "+(n.minimum-n.input.length)+" eller fler tecken"},loadingMore:function(){return"Laddar fler resultat…"},maximumSelected:function(n){return"Du kan max välja "+n.maximum+" element"},noResults:function(){return"Inga träffar"},searching:function(){return"Söker…"},removeAllItems:function(){return"Ta bort alla objekt"}}}),n.define,n.require}(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/i18n/th.js ================================================ /*! Select2 4.1.0-beta.1 | https://github.com/select2/select2/blob/master/LICENSE.md */ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/th",[],function(){return{errorLoading:function(){return"ไม่สามารถค้นข้อมูลได้"},inputTooLong:function(n){return"โปรดลบออก "+(n.input.length-n.maximum)+" ตัวอักษร"},inputTooShort:function(n){return"โปรดพิมพ์เพิ่มอีก "+(n.minimum-n.input.length)+" ตัวอักษร"},loadingMore:function(){return"กำลังค้นข้อมูลเพิ่ม…"},maximumSelected:function(n){return"คุณสามารถเลือกได้ไม่เกิน "+n.maximum+" รายการ"},noResults:function(){return"ไม่พบข้อมูล"},searching:function(){return"กำลังค้นข้อมูล…"},removeAllItems:function(){return"ลบรายการทั้งหมด"}}}),n.define,n.require}(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/i18n/tk.js ================================================ /*! Select2 4.1.0-beta.1 | https://github.com/select2/select2/blob/master/LICENSE.md */ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/tk",[],function(){return{errorLoading:function(){return"Netije ýüklenmedi."},inputTooLong:function(e){return e.input.length-e.maximum+" harp bozuň."},inputTooShort:function(e){return"Ýene-de iň az "+(e.minimum-e.input.length)+" harp ýazyň."},loadingMore:function(){return"Köpräk netije görkezilýär…"},maximumSelected:function(e){return"Diňe "+e.maximum+" sanysyny saýlaň."},noResults:function(){return"Netije tapylmady."},searching:function(){return"Gözlenýär…"},removeAllItems:function(){return"Remove all items"}}}),e.define,e.require}(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/i18n/tr.js ================================================ /*! Select2 4.1.0-beta.1 | https://github.com/select2/select2/blob/master/LICENSE.md */ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/tr",[],function(){return{errorLoading:function(){return"Sonuç yüklenemedi"},inputTooLong:function(n){return n.input.length-n.maximum+" karakter daha girmelisiniz"},inputTooShort:function(n){return"En az "+(n.minimum-n.input.length)+" karakter daha girmelisiniz"},loadingMore:function(){return"Daha fazla…"},maximumSelected:function(n){return"Sadece "+n.maximum+" seçim yapabilirsiniz"},noResults:function(){return"Sonuç bulunamadı"},searching:function(){return"Aranıyor…"},removeAllItems:function(){return"Tüm öğeleri kaldır"}}}),n.define,n.require}(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/i18n/uk.js ================================================ /*! Select2 4.1.0-beta.1 | https://github.com/select2/select2/blob/master/LICENSE.md */ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/uk",[],function(){function n(n,e,u,r){return n%100>10&&n%100<15?r:n%10==1?e:n%10>1&&n%10<5?u:r}return{errorLoading:function(){return"Неможливо завантажити результати"},inputTooLong:function(e){return"Будь ласка, видаліть "+(e.input.length-e.maximum)+" "+n(e.maximum,"літеру","літери","літер")},inputTooShort:function(n){return"Будь ласка, введіть "+(n.minimum-n.input.length)+" або більше літер"},loadingMore:function(){return"Завантаження інших результатів…"},maximumSelected:function(e){return"Ви можете вибрати лише "+e.maximum+" "+n(e.maximum,"пункт","пункти","пунктів")},noResults:function(){return"Нічого не знайдено"},searching:function(){return"Пошук…"},removeAllItems:function(){return"Видалити всі елементи"}}}),n.define,n.require}(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/i18n/vi.js ================================================ /*! Select2 4.1.0-beta.1 | https://github.com/select2/select2/blob/master/LICENSE.md */ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/vi",[],function(){return{inputTooLong:function(n){return"Vui lòng xóa bớt "+(n.input.length-n.maximum)+" ký tự"},inputTooShort:function(n){return"Vui lòng nhập thêm từ "+(n.minimum-n.input.length)+" ký tự trở lên"},loadingMore:function(){return"Đang lấy thêm kết quả…"},maximumSelected:function(n){return"Chỉ có thể chọn được "+n.maximum+" lựa chọn"},noResults:function(){return"Không tìm thấy kết quả"},searching:function(){return"Đang tìm…"},removeAllItems:function(){return"Xóa tất cả các mục"}}}),n.define,n.require}(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/i18n/zh-CN.js ================================================ /*! Select2 4.1.0-beta.1 | https://github.com/select2/select2/blob/master/LICENSE.md */ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/zh-CN",[],function(){return{errorLoading:function(){return"无法载入结果。"},inputTooLong:function(n){return"请删除"+(n.input.length-n.maximum)+"个字符"},inputTooShort:function(n){return"请再输入至少"+(n.minimum-n.input.length)+"个字符"},loadingMore:function(){return"载入更多结果…"},maximumSelected:function(n){return"最多只能选择"+n.maximum+"个项目"},noResults:function(){return"未找到结果"},searching:function(){return"搜索中…"},removeAllItems:function(){return"删除所有项目"}}}),n.define,n.require}(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/i18n/zh-TW.js ================================================ /*! Select2 4.1.0-beta.1 | https://github.com/select2/select2/blob/master/LICENSE.md */ !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/zh-TW",[],function(){return{inputTooLong:function(n){return"請刪掉"+(n.input.length-n.maximum)+"個字元"},inputTooShort:function(n){return"請再輸入"+(n.minimum-n.input.length)+"個字元"},loadingMore:function(){return"載入中…"},maximumSelected:function(n){return"你只能選擇最多"+n.maximum+"項"},noResults:function(){return"沒有找到相符的項目"},searching:function(){return"搜尋中…"},removeAllItems:function(){return"刪除所有項目"}}}),n.define,n.require}(); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/select2.css ================================================ .select2-container { box-sizing: border-box; display: inline-block; margin: 0; position: relative; vertical-align: middle; } .select2-container .select2-selection--single { box-sizing: border-box; cursor: pointer; display: block; height: 28px; user-select: none; -webkit-user-select: none; } .select2-container .select2-selection--single .select2-selection__rendered { display: block; padding-left: 8px; padding-right: 20px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .select2-container .select2-selection--single .select2-selection__clear { background-color: transparent; border: none; font-size: 1em; } .select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered { padding-right: 8px; padding-left: 20px; } .select2-container .select2-selection--multiple { box-sizing: border-box; cursor: pointer; display: block; min-height: 32px; user-select: none; -webkit-user-select: none; } .select2-container .select2-selection--multiple .select2-selection__rendered { display: inline; list-style: none; padding: 0; } .select2-container .select2-selection--multiple .select2-selection__clear { background-color: transparent; border: none; font-size: 1em; } .select2-container .select2-search--inline .select2-search__field { box-sizing: border-box; border: none; font-size: 100%; margin-top: 5px; margin-left: 5px; padding: 0; } .select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button { -webkit-appearance: none; } .select2-dropdown { background-color: white; border: 1px solid #aaa; border-radius: 4px; box-sizing: border-box; display: block; position: absolute; left: -100000px; width: 100%; z-index: 1051; } .select2-results { display: block; } .select2-results__options { list-style: none; margin: 0; padding: 0; } .select2-results__option { padding: 6px; user-select: none; -webkit-user-select: none; } .select2-results__option--selectable { cursor: pointer; } .select2-container--open .select2-dropdown { left: 0; } .select2-container--open .select2-dropdown--above { border-bottom: none; border-bottom-left-radius: 0; border-bottom-right-radius: 0; } .select2-container--open .select2-dropdown--below { border-top: none; border-top-left-radius: 0; border-top-right-radius: 0; } .select2-search--dropdown { display: block; padding: 4px; } .select2-search--dropdown .select2-search__field { padding: 4px; width: 100%; box-sizing: border-box; } .select2-search--dropdown .select2-search__field::-webkit-search-cancel-button { -webkit-appearance: none; } .select2-search--dropdown.select2-search--hide { display: none; } .select2-close-mask { border: 0; margin: 0; padding: 0; display: block; position: fixed; left: 0; top: 0; min-height: 100%; min-width: 100%; height: auto; width: auto; opacity: 0; z-index: 99; background-color: #fff; filter: alpha(opacity=0); } .select2-hidden-accessible { border: 0 !important; clip: rect(0 0 0 0) !important; -webkit-clip-path: inset(50%) !important; clip-path: inset(50%) !important; height: 1px !important; overflow: hidden !important; padding: 0 !important; position: absolute !important; width: 1px !important; white-space: nowrap !important; } .select2-container--default .select2-selection--single { background-color: #fff; border: 1px solid #aaa; border-radius: 4px; } .select2-container--default .select2-selection--single .select2-selection__rendered { color: #444; line-height: 28px; } .select2-container--default .select2-selection--single .select2-selection__clear { cursor: pointer; float: right; font-weight: bold; height: 26px; margin-right: 20px; padding-right: 0px; } .select2-container--default .select2-selection--single .select2-selection__placeholder { color: #999; } .select2-container--default .select2-selection--single .select2-selection__arrow { height: 26px; position: absolute; top: 1px; right: 1px; width: 20px; } .select2-container--default .select2-selection--single .select2-selection__arrow b { border-color: #888 transparent transparent transparent; border-style: solid; border-width: 5px 4px 0 4px; height: 0; left: 50%; margin-left: -4px; margin-top: -2px; position: absolute; top: 50%; width: 0; } .select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear { float: left; } .select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow { left: 1px; right: auto; } .select2-container--default.select2-container--disabled .select2-selection--single { background-color: #eee; cursor: default; } .select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear { display: none; } .select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b { border-color: transparent transparent #888 transparent; border-width: 0 4px 5px 4px; } .select2-container--default .select2-selection--multiple { background-color: white; border: 1px solid #aaa; border-radius: 4px; cursor: text; padding-bottom: 5px; padding-right: 5px; } .select2-container--default .select2-selection--multiple .select2-selection__clear { cursor: pointer; float: right; font-weight: bold; height: 20px; margin-right: 10px; margin-top: 5px; padding: 1px; } .select2-container--default .select2-selection--multiple .select2-selection__choice { background-color: #e4e4e4; border: 1px solid #aaa; border-radius: 4px; display: inline-block; margin-left: 5px; margin-top: 5px; padding: 0; } .select2-container--default .select2-selection--multiple .select2-selection__choice__display { cursor: default; padding-left: 2px; padding-right: 5px; } .select2-container--default .select2-selection--multiple .select2-selection__choice__remove { background-color: transparent; border: none; border-right: 1px solid #aaa; border-top-left-radius: 4px; border-bottom-left-radius: 4px; color: #999; cursor: pointer; font-size: 1em; font-weight: bold; padding: 0 4px; } .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover, .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:focus { background-color: #f1f1f1; color: #333; outline: none; } .select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice { margin-left: 5px; margin-right: auto; } .select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__display { padding-left: 5px; padding-right: 2px; } .select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove { border-left: 1px solid #aaa; border-right: none; border-top-left-radius: 0; border-bottom-left-radius: 0; border-top-right-radius: 4px; border-bottom-right-radius: 4px; } .select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__clear { float: left; margin-left: 10px; margin-right: auto; } .select2-container--default.select2-container--focus .select2-selection--multiple { border: solid black 1px; outline: 0; } .select2-container--default.select2-container--disabled .select2-selection--multiple { background-color: #eee; cursor: default; } .select2-container--default.select2-container--disabled .select2-selection__choice__remove { display: none; } .select2-container--default.select2-container--open.select2-container--above .select2-selection--single, .select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple { border-top-left-radius: 0; border-top-right-radius: 0; } .select2-container--default.select2-container--open.select2-container--below .select2-selection--single, .select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple { border-bottom-left-radius: 0; border-bottom-right-radius: 0; } .select2-container--default .select2-search--dropdown .select2-search__field { border: 1px solid #aaa; } .select2-container--default .select2-search--inline .select2-search__field { background: transparent; border: none; outline: 0; box-shadow: none; -webkit-appearance: textfield; } .select2-container--default .select2-results > .select2-results__options { max-height: 200px; overflow-y: auto; } .select2-container--default .select2-results__option .select2-results__option { padding-left: 1em; } .select2-container--default .select2-results__option .select2-results__option .select2-results__group { padding-left: 0; } .select2-container--default .select2-results__option .select2-results__option .select2-results__option { margin-left: -1em; padding-left: 2em; } .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option { margin-left: -2em; padding-left: 3em; } .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { margin-left: -3em; padding-left: 4em; } .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { margin-left: -4em; padding-left: 5em; } .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { margin-left: -5em; padding-left: 6em; } .select2-container--default .select2-results__option--group { padding: 0; } .select2-container--default .select2-results__option--disabled { color: #999; } .select2-container--default .select2-results__option--selected { background-color: #ddd; } .select2-container--default .select2-results__option--highlighted.select2-results__option--selectable { background-color: #5897fb; color: white; } .select2-container--default .select2-results__group { cursor: default; display: block; padding: 6px; } .select2-container--classic .select2-selection--single { background-color: #f7f7f7; border: 1px solid #aaa; border-radius: 4px; outline: 0; background-image: -webkit-linear-gradient(top, white 50%, #eeeeee 100%); background-image: -o-linear-gradient(top, white 50%, #eeeeee 100%); background-image: linear-gradient(to bottom, white 50%, #eeeeee 100%); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0); } .select2-container--classic .select2-selection--single:focus { border: 1px solid #5897fb; } .select2-container--classic .select2-selection--single .select2-selection__rendered { color: #444; line-height: 28px; } .select2-container--classic .select2-selection--single .select2-selection__clear { cursor: pointer; float: right; font-weight: bold; height: 26px; margin-right: 20px; } .select2-container--classic .select2-selection--single .select2-selection__placeholder { color: #999; } .select2-container--classic .select2-selection--single .select2-selection__arrow { background-color: #ddd; border: none; border-left: 1px solid #aaa; border-top-right-radius: 4px; border-bottom-right-radius: 4px; height: 26px; position: absolute; top: 1px; right: 1px; width: 20px; background-image: -webkit-linear-gradient(top, #eeeeee 50%, #cccccc 100%); background-image: -o-linear-gradient(top, #eeeeee 50%, #cccccc 100%); background-image: linear-gradient(to bottom, #eeeeee 50%, #cccccc 100%); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0); } .select2-container--classic .select2-selection--single .select2-selection__arrow b { border-color: #888 transparent transparent transparent; border-style: solid; border-width: 5px 4px 0 4px; height: 0; left: 50%; margin-left: -4px; margin-top: -2px; position: absolute; top: 50%; width: 0; } .select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__clear { float: left; } .select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow { border: none; border-right: 1px solid #aaa; border-radius: 0; border-top-left-radius: 4px; border-bottom-left-radius: 4px; left: 1px; right: auto; } .select2-container--classic.select2-container--open .select2-selection--single { border: 1px solid #5897fb; } .select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow { background: transparent; border: none; } .select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b { border-color: transparent transparent #888 transparent; border-width: 0 4px 5px 4px; } .select2-container--classic.select2-container--open.select2-container--above .select2-selection--single { border-top: none; border-top-left-radius: 0; border-top-right-radius: 0; background-image: -webkit-linear-gradient(top, white 0%, #eeeeee 50%); background-image: -o-linear-gradient(top, white 0%, #eeeeee 50%); background-image: linear-gradient(to bottom, white 0%, #eeeeee 50%); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0); } .select2-container--classic.select2-container--open.select2-container--below .select2-selection--single { border-bottom: none; border-bottom-left-radius: 0; border-bottom-right-radius: 0; background-image: -webkit-linear-gradient(top, #eeeeee 50%, white 100%); background-image: -o-linear-gradient(top, #eeeeee 50%, white 100%); background-image: linear-gradient(to bottom, #eeeeee 50%, white 100%); background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0); } .select2-container--classic .select2-selection--multiple { background-color: white; border: 1px solid #aaa; border-radius: 4px; cursor: text; outline: 0; padding-bottom: 5px; padding-right: 5px; } .select2-container--classic .select2-selection--multiple:focus { border: 1px solid #5897fb; } .select2-container--classic .select2-selection--multiple .select2-selection__clear { display: none; } .select2-container--classic .select2-selection--multiple .select2-selection__choice { background-color: #e4e4e4; border: 1px solid #aaa; border-radius: 4px; display: inline-block; margin-left: 5px; margin-top: 5px; padding: 0; } .select2-container--classic .select2-selection--multiple .select2-selection__choice__display { cursor: default; padding-left: 2px; padding-right: 5px; } .select2-container--classic .select2-selection--multiple .select2-selection__choice__remove { background-color: transparent; border: none; border-top-left-radius: 4px; border-bottom-left-radius: 4px; color: #888; cursor: pointer; font-size: 1em; font-weight: bold; padding: 0 4px; } .select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover { color: #555; outline: none; } .select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice { margin-left: 5px; margin-right: auto; } .select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__display { padding-left: 5px; padding-right: 2px; } .select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove { border-top-left-radius: 0; border-bottom-left-radius: 0; border-top-right-radius: 4px; border-bottom-right-radius: 4px; } .select2-container--classic.select2-container--open .select2-selection--multiple { border: 1px solid #5897fb; } .select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple { border-top: none; border-top-left-radius: 0; border-top-right-radius: 0; } .select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple { border-bottom: none; border-bottom-left-radius: 0; border-bottom-right-radius: 0; } .select2-container--classic .select2-search--dropdown .select2-search__field { border: 1px solid #aaa; outline: 0; } .select2-container--classic .select2-search--inline .select2-search__field { outline: 0; box-shadow: none; } .select2-container--classic .select2-dropdown { background-color: white; border: 1px solid transparent; } .select2-container--classic .select2-dropdown--above { border-bottom: none; } .select2-container--classic .select2-dropdown--below { border-top: none; } .select2-container--classic .select2-results > .select2-results__options { max-height: 200px; overflow-y: auto; } .select2-container--classic .select2-results__option--group { padding: 0; } .select2-container--classic .select2-results__option--disabled { color: grey; } .select2-container--classic .select2-results__option--highlighted.select2-results__option--selectable { background-color: #3875d7; color: white; } .select2-container--classic .select2-results__group { cursor: default; display: block; padding: 6px; } .select2-container--classic.select2-container--open .select2-dropdown { border-color: #5897fb; } ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/select2.full.js ================================================ /*! * Select2 4.1.0-beta.1 * https://select2.github.io * * Released under the MIT license * https://github.com/select2/select2/blob/master/LICENSE.md */ ;(function (factory) { if (typeof define === 'function' && define.amd) { // AMD. Register as an anonymous module. define(['jquery'], factory); } else if (typeof module === 'object' && module.exports) { // Node/CommonJS module.exports = function (root, jQuery) { if (jQuery === undefined) { // require('jQuery') returns a factory that requires window to // build a jQuery instance, we normalize how we use modules // that require this pattern but the window provided is a noop // if it's defined (how jquery works) if (typeof window !== 'undefined') { jQuery = require('jquery'); } else { jQuery = require('jquery')(root); } } factory(jQuery); return jQuery; }; } else { // Browser globals factory(jQuery); } } (function (jQuery) { // This is needed so we can catch the AMD loader configuration and use it // The inner file should be wrapped (by `banner.start.js`) in a function that // returns the AMD loader references. var S2 =(function () { // Restore the Select2 AMD loader so it can be used // Needed mostly in the language files, where the loader is not inserted if (jQuery && jQuery.fn && jQuery.fn.select2 && jQuery.fn.select2.amd) { var S2 = jQuery.fn.select2.amd; } var S2;(function () { if (!S2 || !S2.requirejs) { if (!S2) { S2 = {}; } else { require = S2; } /** * @license almond 0.3.3 Copyright jQuery Foundation and other contributors. * Released under MIT license, http://github.com/requirejs/almond/LICENSE */ //Going sloppy to avoid 'use strict' string cost, but strict practices should //be followed. /*global setTimeout: false */ var requirejs, require, define; (function (undef) { var main, req, makeMap, handlers, defined = {}, waiting = {}, config = {}, defining = {}, hasOwn = Object.prototype.hasOwnProperty, aps = [].slice, jsSuffixRegExp = /\.js$/; function hasProp(obj, prop) { return hasOwn.call(obj, prop); } /** * Given a relative module name, like ./something, normalize it to * a real name that can be mapped to a path. * @param {String} name the relative name * @param {String} baseName a real name that the name arg is relative * to. * @returns {String} normalized name */ function normalize(name, baseName) { var nameParts, nameSegment, mapValue, foundMap, lastIndex, foundI, foundStarMap, starI, i, j, part, normalizedBaseParts, baseParts = baseName && baseName.split("/"), map = config.map, starMap = (map && map['*']) || {}; //Adjust any relative paths. if (name) { name = name.split('/'); lastIndex = name.length - 1; // If wanting node ID compatibility, strip .js from end // of IDs. Have to do this here, and not in nameToUrl // because node allows either .js or non .js to map // to same file. if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) { name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, ''); } // Starts with a '.' so need the baseName if (name[0].charAt(0) === '.' && baseParts) { //Convert baseName to array, and lop off the last part, //so that . matches that 'directory' and not name of the baseName's //module. For instance, baseName of 'one/two/three', maps to //'one/two/three.js', but we want the directory, 'one/two' for //this normalization. normalizedBaseParts = baseParts.slice(0, baseParts.length - 1); name = normalizedBaseParts.concat(name); } //start trimDots for (i = 0; i < name.length; i++) { part = name[i]; if (part === '.') { name.splice(i, 1); i -= 1; } else if (part === '..') { // If at the start, or previous value is still .., // keep them so that when converted to a path it may // still work when converted to a path, even though // as an ID it is less than ideal. In larger point // releases, may be better to just kick out an error. if (i === 0 || (i === 1 && name[2] === '..') || name[i - 1] === '..') { continue; } else if (i > 0) { name.splice(i - 1, 2); i -= 2; } } } //end trimDots name = name.join('/'); } //Apply map config if available. if ((baseParts || starMap) && map) { nameParts = name.split('/'); for (i = nameParts.length; i > 0; i -= 1) { nameSegment = nameParts.slice(0, i).join("/"); if (baseParts) { //Find the longest baseName segment match in the config. //So, do joins on the biggest to smallest lengths of baseParts. for (j = baseParts.length; j > 0; j -= 1) { mapValue = map[baseParts.slice(0, j).join('/')]; //baseName segment has config, find if it has one for //this name. if (mapValue) { mapValue = mapValue[nameSegment]; if (mapValue) { //Match, update name to the new value. foundMap = mapValue; foundI = i; break; } } } } if (foundMap) { break; } //Check for a star map match, but just hold on to it, //if there is a shorter segment match later in a matching //config, then favor over this star map. if (!foundStarMap && starMap && starMap[nameSegment]) { foundStarMap = starMap[nameSegment]; starI = i; } } if (!foundMap && foundStarMap) { foundMap = foundStarMap; foundI = starI; } if (foundMap) { nameParts.splice(0, foundI, foundMap); name = nameParts.join('/'); } } return name; } function makeRequire(relName, forceSync) { return function () { //A version of a require function that passes a moduleName //value for items that may need to //look up paths relative to the moduleName var args = aps.call(arguments, 0); //If first arg is not require('string'), and there is only //one arg, it is the array form without a callback. Insert //a null so that the following concat is correct. if (typeof args[0] !== 'string' && args.length === 1) { args.push(null); } return req.apply(undef, args.concat([relName, forceSync])); }; } function makeNormalize(relName) { return function (name) { return normalize(name, relName); }; } function makeLoad(depName) { return function (value) { defined[depName] = value; }; } function callDep(name) { if (hasProp(waiting, name)) { var args = waiting[name]; delete waiting[name]; defining[name] = true; main.apply(undef, args); } if (!hasProp(defined, name) && !hasProp(defining, name)) { throw new Error('No ' + name); } return defined[name]; } //Turns a plugin!resource to [plugin, resource] //with the plugin being undefined if the name //did not have a plugin prefix. function splitPrefix(name) { var prefix, index = name ? name.indexOf('!') : -1; if (index > -1) { prefix = name.substring(0, index); name = name.substring(index + 1, name.length); } return [prefix, name]; } //Creates a parts array for a relName where first part is plugin ID, //second part is resource ID. Assumes relName has already been normalized. function makeRelParts(relName) { return relName ? splitPrefix(relName) : []; } /** * Makes a name map, normalizing the name, and using a plugin * for normalization if necessary. Grabs a ref to plugin * too, as an optimization. */ makeMap = function (name, relParts) { var plugin, parts = splitPrefix(name), prefix = parts[0], relResourceName = relParts[1]; name = parts[1]; if (prefix) { prefix = normalize(prefix, relResourceName); plugin = callDep(prefix); } //Normalize according if (prefix) { if (plugin && plugin.normalize) { name = plugin.normalize(name, makeNormalize(relResourceName)); } else { name = normalize(name, relResourceName); } } else { name = normalize(name, relResourceName); parts = splitPrefix(name); prefix = parts[0]; name = parts[1]; if (prefix) { plugin = callDep(prefix); } } //Using ridiculous property names for space reasons return { f: prefix ? prefix + '!' + name : name, //fullName n: name, pr: prefix, p: plugin }; }; function makeConfig(name) { return function () { return (config && config.config && config.config[name]) || {}; }; } handlers = { require: function (name) { return makeRequire(name); }, exports: function (name) { var e = defined[name]; if (typeof e !== 'undefined') { return e; } else { return (defined[name] = {}); } }, module: function (name) { return { id: name, uri: '', exports: defined[name], config: makeConfig(name) }; } }; main = function (name, deps, callback, relName) { var cjsModule, depName, ret, map, i, relParts, args = [], callbackType = typeof callback, usingExports; //Use name if no relName relName = relName || name; relParts = makeRelParts(relName); //Call the callback to define the module, if necessary. if (callbackType === 'undefined' || callbackType === 'function') { //Pull out the defined dependencies and pass the ordered //values to the callback. //Default to [require, exports, module] if no deps deps = !deps.length && callback.length ? ['require', 'exports', 'module'] : deps; for (i = 0; i < deps.length; i += 1) { map = makeMap(deps[i], relParts); depName = map.f; //Fast path CommonJS standard dependencies. if (depName === "require") { args[i] = handlers.require(name); } else if (depName === "exports") { //CommonJS module spec 1.1 args[i] = handlers.exports(name); usingExports = true; } else if (depName === "module") { //CommonJS module spec 1.1 cjsModule = args[i] = handlers.module(name); } else if (hasProp(defined, depName) || hasProp(waiting, depName) || hasProp(defining, depName)) { args[i] = callDep(depName); } else if (map.p) { map.p.load(map.n, makeRequire(relName, true), makeLoad(depName), {}); args[i] = defined[depName]; } else { throw new Error(name + ' missing ' + depName); } } ret = callback ? callback.apply(defined[name], args) : undefined; if (name) { //If setting exports via "module" is in play, //favor that over return value and exports. After that, //favor a non-undefined return value over exports use. if (cjsModule && cjsModule.exports !== undef && cjsModule.exports !== defined[name]) { defined[name] = cjsModule.exports; } else if (ret !== undef || !usingExports) { //Use the return value from the function. defined[name] = ret; } } } else if (name) { //May just be an object definition for the module. Only //worry about defining if have a module name. defined[name] = callback; } }; requirejs = require = req = function (deps, callback, relName, forceSync, alt) { if (typeof deps === "string") { if (handlers[deps]) { //callback in this case is really relName return handlers[deps](callback); } //Just return the module wanted. In this scenario, the //deps arg is the module name, and second arg (if passed) //is just the relName. //Normalize module name, if it contains . or .. return callDep(makeMap(deps, makeRelParts(callback)).f); } else if (!deps.splice) { //deps is a config object, not an array. config = deps; if (config.deps) { req(config.deps, config.callback); } if (!callback) { return; } if (callback.splice) { //callback is an array, which means it is a dependency list. //Adjust args if there are dependencies deps = callback; callback = relName; relName = null; } else { deps = undef; } } //Support require(['a']) callback = callback || function () {}; //If relName is a function, it is an errback handler, //so remove it. if (typeof relName === 'function') { relName = forceSync; forceSync = alt; } //Simulate async callback; if (forceSync) { main(undef, deps, callback, relName); } else { //Using a non-zero value because of concern for what old browsers //do, and latest browsers "upgrade" to 4 if lower value is used: //http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#dom-windowtimers-settimeout: //If want a value immediately, use require('id') instead -- something //that works in almond on the global level, but not guaranteed and //unlikely to work in other AMD implementations. setTimeout(function () { main(undef, deps, callback, relName); }, 4); } return req; }; /** * Just drops the config on the floor, but returns req in case * the config return value is used. */ req.config = function (cfg) { return req(cfg); }; /** * Expose module registry for debugging and tooling */ requirejs._defined = defined; define = function (name, deps, callback) { if (typeof name !== 'string') { throw new Error('See almond README: incorrect module build, no module name'); } //This module may not have dependencies if (!deps.splice) { //deps is not an array, so probably means //an object literal or factory function for //the value. Adjust args. callback = deps; deps = []; } if (!hasProp(defined, name) && !hasProp(waiting, name)) { waiting[name] = [name, deps, callback]; } }; define.amd = { jQuery: true }; }()); S2.requirejs = requirejs;S2.require = require;S2.define = define; } }()); S2.define("almond", function(){}); /* global jQuery:false, $:false */ S2.define('jquery',[],function () { var _$ = jQuery || $; if (_$ == null && console && console.error) { console.error( 'Select2: An instance of jQuery or a jQuery-compatible library was not ' + 'found. Make sure that you are including jQuery before Select2 on your ' + 'web page.' ); } return _$; }); S2.define('select2/utils',[ 'jquery' ], function ($) { var Utils = {}; Utils.Extend = function (ChildClass, SuperClass) { var __hasProp = {}.hasOwnProperty; function BaseConstructor () { this.constructor = ChildClass; } for (var key in SuperClass) { if (__hasProp.call(SuperClass, key)) { ChildClass[key] = SuperClass[key]; } } BaseConstructor.prototype = SuperClass.prototype; ChildClass.prototype = new BaseConstructor(); ChildClass.__super__ = SuperClass.prototype; return ChildClass; }; function getMethods (theClass) { var proto = theClass.prototype; var methods = []; for (var methodName in proto) { var m = proto[methodName]; if (typeof m !== 'function') { continue; } if (methodName === 'constructor') { continue; } methods.push(methodName); } return methods; } Utils.Decorate = function (SuperClass, DecoratorClass) { var decoratedMethods = getMethods(DecoratorClass); var superMethods = getMethods(SuperClass); function DecoratedClass () { var unshift = Array.prototype.unshift; var argCount = DecoratorClass.prototype.constructor.length; var calledConstructor = SuperClass.prototype.constructor; if (argCount > 0) { unshift.call(arguments, SuperClass.prototype.constructor); calledConstructor = DecoratorClass.prototype.constructor; } calledConstructor.apply(this, arguments); } DecoratorClass.displayName = SuperClass.displayName; function ctr () { this.constructor = DecoratedClass; } DecoratedClass.prototype = new ctr(); for (var m = 0; m < superMethods.length; m++) { var superMethod = superMethods[m]; DecoratedClass.prototype[superMethod] = SuperClass.prototype[superMethod]; } var calledMethod = function (methodName) { // Stub out the original method if it's not decorating an actual method var originalMethod = function () {}; if (methodName in DecoratedClass.prototype) { originalMethod = DecoratedClass.prototype[methodName]; } var decoratedMethod = DecoratorClass.prototype[methodName]; return function () { var unshift = Array.prototype.unshift; unshift.call(arguments, originalMethod); return decoratedMethod.apply(this, arguments); }; }; for (var d = 0; d < decoratedMethods.length; d++) { var decoratedMethod = decoratedMethods[d]; DecoratedClass.prototype[decoratedMethod] = calledMethod(decoratedMethod); } return DecoratedClass; }; var Observable = function () { this.listeners = {}; }; Observable.prototype.on = function (event, callback) { this.listeners = this.listeners || {}; if (event in this.listeners) { this.listeners[event].push(callback); } else { this.listeners[event] = [callback]; } }; Observable.prototype.trigger = function (event) { var slice = Array.prototype.slice; var params = slice.call(arguments, 1); this.listeners = this.listeners || {}; // Params should always come in as an array if (params == null) { params = []; } // If there are no arguments to the event, use a temporary object if (params.length === 0) { params.push({}); } // Set the `_type` of the first object to the event params[0]._type = event; if (event in this.listeners) { this.invoke(this.listeners[event], slice.call(arguments, 1)); } if ('*' in this.listeners) { this.invoke(this.listeners['*'], arguments); } }; Observable.prototype.invoke = function (listeners, params) { for (var i = 0, len = listeners.length; i < len; i++) { listeners[i].apply(this, params); } }; Utils.Observable = Observable; Utils.generateChars = function (length) { var chars = ''; for (var i = 0; i < length; i++) { var randomChar = Math.floor(Math.random() * 36); chars += randomChar.toString(36); } return chars; }; Utils.bind = function (func, context) { return function () { func.apply(context, arguments); }; }; Utils._convertData = function (data) { for (var originalKey in data) { var keys = originalKey.split('-'); var dataLevel = data; if (keys.length === 1) { continue; } for (var k = 0; k < keys.length; k++) { var key = keys[k]; // Lowercase the first letter // By default, dash-separated becomes camelCase key = key.substring(0, 1).toLowerCase() + key.substring(1); if (!(key in dataLevel)) { dataLevel[key] = {}; } if (k == keys.length - 1) { dataLevel[key] = data[originalKey]; } dataLevel = dataLevel[key]; } delete data[originalKey]; } return data; }; Utils.hasScroll = function (index, el) { // Adapted from the function created by @ShadowScripter // and adapted by @BillBarry on the Stack Exchange Code Review website. // The original code can be found at // http://codereview.stackexchange.com/q/13338 // and was designed to be used with the Sizzle selector engine. var $el = $(el); var overflowX = el.style.overflowX; var overflowY = el.style.overflowY; //Check both x and y declarations if (overflowX === overflowY && (overflowY === 'hidden' || overflowY === 'visible')) { return false; } if (overflowX === 'scroll' || overflowY === 'scroll') { return true; } return ($el.innerHeight() < el.scrollHeight || $el.innerWidth() < el.scrollWidth); }; Utils.escapeMarkup = function (markup) { var replaceMap = { '\\': '\', '&': '&', '<': '<', '>': '>', '"': '"', '\'': ''', '/': '/' }; // Do not try to escape the markup if it's not a string if (typeof markup !== 'string') { return markup; } return String(markup).replace(/[&<>"'\/\\]/g, function (match) { return replaceMap[match]; }); }; // Cache objects in Utils.__cache instead of $.data (see #4346) Utils.__cache = {}; var id = 0; Utils.GetUniqueElementId = function (element) { // Get a unique element Id. If element has no id, // creates a new unique number, stores it in the id // attribute and returns the new id with a prefix. // If an id already exists, it simply returns it with a prefix. var select2Id = element.getAttribute('data-select2-id'); if (select2Id != null) { return select2Id; } // If element has id, use it. if (element.id) { select2Id = 'select2-data-' + element.id; } else { select2Id = 'select2-data-' + (++id).toString() + '-' + Utils.generateChars(4); } element.setAttribute('data-select2-id', select2Id); return select2Id; }; Utils.StoreData = function (element, name, value) { // Stores an item in the cache for a specified element. // name is the cache key. var id = Utils.GetUniqueElementId(element); if (!Utils.__cache[id]) { Utils.__cache[id] = {}; } Utils.__cache[id][name] = value; }; Utils.GetData = function (element, name) { // Retrieves a value from the cache by its key (name) // name is optional. If no name specified, return // all cache items for the specified element. // and for a specified element. var id = Utils.GetUniqueElementId(element); if (name) { if (Utils.__cache[id]) { if (Utils.__cache[id][name] != null) { return Utils.__cache[id][name]; } return $(element).data(name); // Fallback to HTML5 data attribs. } return $(element).data(name); // Fallback to HTML5 data attribs. } else { return Utils.__cache[id]; } }; Utils.RemoveData = function (element) { // Removes all cached items for a specified element. var id = Utils.GetUniqueElementId(element); if (Utils.__cache[id] != null) { delete Utils.__cache[id]; } element.removeAttribute('data-select2-id'); }; Utils.copyNonInternalCssClasses = function (dest, src) { var classes; var destinationClasses = dest.getAttribute('class').trim().split(/\s+/); destinationClasses = destinationClasses.filter(function (clazz) { // Save all Select2 classes return clazz.indexOf('select2-') === 0; }); var sourceClasses = src.getAttribute('class').trim().split(/\s+/); sourceClasses = sourceClasses.filter(function (clazz) { // Only copy non-Select2 classes return clazz.indexOf('select2-') !== 0; }); var replacements = destinationClasses.concat(sourceClasses); dest.setAttribute('class', replacements.join(' ')); }; return Utils; }); S2.define('select2/results',[ 'jquery', './utils' ], function ($, Utils) { function Results ($element, options, dataAdapter) { this.$element = $element; this.data = dataAdapter; this.options = options; Results.__super__.constructor.call(this); } Utils.Extend(Results, Utils.Observable); Results.prototype.render = function () { var $results = $( '<ul class="select2-results__options" role="listbox"></ul>' ); if (this.options.get('multiple')) { $results.attr('aria-multiselectable', 'true'); } this.$results = $results; return $results; }; Results.prototype.clear = function () { this.$results.empty(); }; Results.prototype.displayMessage = function (params) { var escapeMarkup = this.options.get('escapeMarkup'); this.clear(); this.hideLoading(); var $message = $( '<li role="alert" aria-live="assertive"' + ' class="select2-results__option"></li>' ); var message = this.options.get('translations').get(params.message); $message.append( escapeMarkup( message(params.args) ) ); $message[0].className += ' select2-results__message'; this.$results.append($message); }; Results.prototype.hideMessages = function () { this.$results.find('.select2-results__message').remove(); }; Results.prototype.append = function (data) { this.hideLoading(); var $options = []; if (data.results == null || data.results.length === 0) { if (this.$results.children().length === 0) { this.trigger('results:message', { message: 'noResults' }); } return; } data.results = this.sort(data.results); for (var d = 0; d < data.results.length; d++) { var item = data.results[d]; var $option = this.option(item); $options.push($option); } this.$results.append($options); }; Results.prototype.position = function ($results, $dropdown) { var $resultsContainer = $dropdown.find('.select2-results'); $resultsContainer.append($results); }; Results.prototype.sort = function (data) { var sorter = this.options.get('sorter'); return sorter(data); }; Results.prototype.highlightFirstItem = function () { var $options = this.$results .find('.select2-results__option--selectable'); var $selected = $options.filter('.select2-results__option--selected'); // Check if there are any selected options if ($selected.length > 0) { // If there are selected options, highlight the first $selected.first().trigger('mouseenter'); } else { // If there are no selected options, highlight the first option // in the dropdown $options.first().trigger('mouseenter'); } this.ensureHighlightVisible(); }; Results.prototype.setClasses = function () { var self = this; this.data.current(function (selected) { var selectedIds = selected.map(function (s) { return s.id.toString(); }); var $options = self.$results .find('.select2-results__option--selectable'); $options.each(function () { var $option = $(this); var item = Utils.GetData(this, 'data'); // id needs to be converted to a string when comparing var id = '' + item.id; if ((item.element != null && item.element.selected) || (item.element == null && selectedIds.indexOf(id) > -1)) { this.classList.add('select2-results__option--selected'); $option.attr('aria-selected', 'true'); } else { this.classList.remove('select2-results__option--selected'); $option.attr('aria-selected', 'false'); } }); }); }; Results.prototype.showLoading = function (params) { this.hideLoading(); var loadingMore = this.options.get('translations').get('searching'); var loading = { disabled: true, loading: true, text: loadingMore(params) }; var $loading = this.option(loading); $loading.className += ' loading-results'; this.$results.prepend($loading); }; Results.prototype.hideLoading = function () { this.$results.find('.loading-results').remove(); }; Results.prototype.option = function (data) { var option = document.createElement('li'); option.classList.add('select2-results__option'); option.classList.add('select2-results__option--selectable'); var attrs = { 'role': 'option' }; var matches = window.Element.prototype.matches || window.Element.prototype.msMatchesSelector || window.Element.prototype.webkitMatchesSelector; if ((data.element != null && matches.call(data.element, ':disabled')) || (data.element == null && data.disabled)) { attrs['aria-disabled'] = 'true'; option.classList.remove('select2-results__option--selectable'); option.classList.add('select2-results__option--disabled'); } if (data.id == null) { option.classList.remove('select2-results__option--selectable'); } if (data._resultId != null) { option.id = data._resultId; } if (data.title) { option.title = data.title; } if (data.children) { attrs.role = 'group'; attrs['aria-label'] = data.text; option.classList.remove('select2-results__option--selectable'); option.classList.add('select2-results__option--group'); } for (var attr in attrs) { var val = attrs[attr]; option.setAttribute(attr, val); } if (data.children) { var $option = $(option); var label = document.createElement('strong'); label.className = 'select2-results__group'; this.template(data, label); var $children = []; for (var c = 0; c < data.children.length; c++) { var child = data.children[c]; var $child = this.option(child); $children.push($child); } var $childrenContainer = $('<ul></ul>', { 'class': 'select2-results__options select2-results__options--nested' }); $childrenContainer.append($children); $option.append(label); $option.append($childrenContainer); } else { this.template(data, option); } Utils.StoreData(option, 'data', data); return option; }; Results.prototype.bind = function (container, $container) { var self = this; var id = container.id + '-results'; this.$results.attr('id', id); container.on('results:all', function (params) { self.clear(); self.append(params.data); if (container.isOpen()) { self.setClasses(); self.highlightFirstItem(); } }); container.on('results:append', function (params) { self.append(params.data); if (container.isOpen()) { self.setClasses(); } }); container.on('query', function (params) { self.hideMessages(); self.showLoading(params); }); container.on('select', function () { if (!container.isOpen()) { return; } self.setClasses(); if (self.options.get('scrollAfterSelect')) { self.highlightFirstItem(); } }); container.on('unselect', function () { if (!container.isOpen()) { return; } self.setClasses(); if (self.options.get('scrollAfterSelect')) { self.highlightFirstItem(); } }); container.on('open', function () { // When the dropdown is open, aria-expended="true" self.$results.attr('aria-expanded', 'true'); self.$results.attr('aria-hidden', 'false'); self.setClasses(); self.ensureHighlightVisible(); }); container.on('close', function () { // When the dropdown is closed, aria-expended="false" self.$results.attr('aria-expanded', 'false'); self.$results.attr('aria-hidden', 'true'); self.$results.removeAttr('aria-activedescendant'); }); container.on('results:toggle', function () { var $highlighted = self.getHighlightedResults(); if ($highlighted.length === 0) { return; } $highlighted.trigger('mouseup'); }); container.on('results:select', function () { var $highlighted = self.getHighlightedResults(); if ($highlighted.length === 0) { return; } var data = Utils.GetData($highlighted[0], 'data'); if ($highlighted.hasClass('select2-results__option--selected')) { self.trigger('close', {}); } else { self.trigger('select', { data: data }); } }); container.on('results:previous', function () { var $highlighted = self.getHighlightedResults(); var $options = self.$results.find('.select2-results__option--selectable'); var currentIndex = $options.index($highlighted); // If we are already at the top, don't move further // If no options, currentIndex will be -1 if (currentIndex <= 0) { return; } var nextIndex = currentIndex - 1; // If none are highlighted, highlight the first if ($highlighted.length === 0) { nextIndex = 0; } var $next = $options.eq(nextIndex); $next.trigger('mouseenter'); var currentOffset = self.$results.offset().top; var nextTop = $next.offset().top; var nextOffset = self.$results.scrollTop() + (nextTop - currentOffset); if (nextIndex === 0) { self.$results.scrollTop(0); } else if (nextTop - currentOffset < 0) { self.$results.scrollTop(nextOffset); } }); container.on('results:next', function () { var $highlighted = self.getHighlightedResults(); var $options = self.$results.find('.select2-results__option--selectable'); var currentIndex = $options.index($highlighted); var nextIndex = currentIndex + 1; // If we are at the last option, stay there if (nextIndex >= $options.length) { return; } var $next = $options.eq(nextIndex); $next.trigger('mouseenter'); var currentOffset = self.$results.offset().top + self.$results.outerHeight(false); var nextBottom = $next.offset().top + $next.outerHeight(false); var nextOffset = self.$results.scrollTop() + nextBottom - currentOffset; if (nextIndex === 0) { self.$results.scrollTop(0); } else if (nextBottom > currentOffset) { self.$results.scrollTop(nextOffset); } }); container.on('results:focus', function (params) { params.element[0].classList.add('select2-results__option--highlighted'); params.element[0].setAttribute('aria-selected', 'true'); }); container.on('results:message', function (params) { self.displayMessage(params); }); if ($.fn.mousewheel) { this.$results.on('mousewheel', function (e) { var top = self.$results.scrollTop(); var bottom = self.$results.get(0).scrollHeight - top + e.deltaY; var isAtTop = e.deltaY > 0 && top - e.deltaY <= 0; var isAtBottom = e.deltaY < 0 && bottom <= self.$results.height(); if (isAtTop) { self.$results.scrollTop(0); e.preventDefault(); e.stopPropagation(); } else if (isAtBottom) { self.$results.scrollTop( self.$results.get(0).scrollHeight - self.$results.height() ); e.preventDefault(); e.stopPropagation(); } }); } this.$results.on('mouseup', '.select2-results__option--selectable', function (evt) { var $this = $(this); var data = Utils.GetData(this, 'data'); if ($this.hasClass('select2-results__option--selected')) { if (self.options.get('multiple')) { self.trigger('unselect', { originalEvent: evt, data: data }); } else { self.trigger('close', {}); } return; } self.trigger('select', { originalEvent: evt, data: data }); }); this.$results.on('mouseenter', '.select2-results__option--selectable', function (evt) { var data = Utils.GetData(this, 'data'); self.getHighlightedResults() .removeClass('select2-results__option--highlighted') .attr('aria-selected', 'false'); self.trigger('results:focus', { data: data, element: $(this) }); }); }; Results.prototype.getHighlightedResults = function () { var $highlighted = this.$results .find('.select2-results__option--highlighted'); return $highlighted; }; Results.prototype.destroy = function () { this.$results.remove(); }; Results.prototype.ensureHighlightVisible = function () { var $highlighted = this.getHighlightedResults(); if ($highlighted.length === 0) { return; } var $options = this.$results.find('.select2-results__option--selectable'); var currentIndex = $options.index($highlighted); var currentOffset = this.$results.offset().top; var nextTop = $highlighted.offset().top; var nextOffset = this.$results.scrollTop() + (nextTop - currentOffset); var offsetDelta = nextTop - currentOffset; nextOffset -= $highlighted.outerHeight(false) * 2; if (currentIndex <= 2) { this.$results.scrollTop(0); } else if (offsetDelta > this.$results.outerHeight() || offsetDelta < 0) { this.$results.scrollTop(nextOffset); } }; Results.prototype.template = function (result, container) { var template = this.options.get('templateResult'); var escapeMarkup = this.options.get('escapeMarkup'); var content = template(result, container); if (content == null) { container.style.display = 'none'; } else if (typeof content === 'string') { container.innerHTML = escapeMarkup(content); } else { $(container).append(content); } }; return Results; }); S2.define('select2/keys',[ ], function () { var KEYS = { BACKSPACE: 8, TAB: 9, ENTER: 13, SHIFT: 16, CTRL: 17, ALT: 18, ESC: 27, SPACE: 32, PAGE_UP: 33, PAGE_DOWN: 34, END: 35, HOME: 36, LEFT: 37, UP: 38, RIGHT: 39, DOWN: 40, DELETE: 46 }; return KEYS; }); S2.define('select2/selection/base',[ 'jquery', '../utils', '../keys' ], function ($, Utils, KEYS) { function BaseSelection ($element, options) { this.$element = $element; this.options = options; BaseSelection.__super__.constructor.call(this); } Utils.Extend(BaseSelection, Utils.Observable); BaseSelection.prototype.render = function () { var $selection = $( '<span class="select2-selection" role="combobox" ' + ' aria-haspopup="true" aria-expanded="false">' + '</span>' ); this._tabindex = 0; if (Utils.GetData(this.$element[0], 'old-tabindex') != null) { this._tabindex = Utils.GetData(this.$element[0], 'old-tabindex'); } else if (this.$element.attr('tabindex') != null) { this._tabindex = this.$element.attr('tabindex'); } $selection.attr('title', this.$element.attr('title')); $selection.attr('tabindex', this._tabindex); $selection.attr('aria-disabled', 'false'); this.$selection = $selection; return $selection; }; BaseSelection.prototype.bind = function (container, $container) { var self = this; var resultsId = container.id + '-results'; this.container = container; this.$selection.on('focus', function (evt) { self.trigger('focus', evt); }); this.$selection.on('blur', function (evt) { self._handleBlur(evt); }); this.$selection.on('keydown', function (evt) { self.trigger('keypress', evt); if (evt.which === KEYS.SPACE) { evt.preventDefault(); } }); container.on('results:focus', function (params) { self.$selection.attr('aria-activedescendant', params.data._resultId); }); container.on('selection:update', function (params) { self.update(params.data); }); container.on('open', function () { // When the dropdown is open, aria-expanded="true" self.$selection.attr('aria-expanded', 'true'); self.$selection.attr('aria-owns', resultsId); self._attachCloseHandler(container); }); container.on('close', function () { // When the dropdown is closed, aria-expanded="false" self.$selection.attr('aria-expanded', 'false'); self.$selection.removeAttr('aria-activedescendant'); self.$selection.removeAttr('aria-owns'); self.$selection.trigger('focus'); self._detachCloseHandler(container); }); container.on('enable', function () { self.$selection.attr('tabindex', self._tabindex); self.$selection.attr('aria-disabled', 'false'); }); container.on('disable', function () { self.$selection.attr('tabindex', '-1'); self.$selection.attr('aria-disabled', 'true'); }); }; BaseSelection.prototype._handleBlur = function (evt) { var self = this; // This needs to be delayed as the active element is the body when the tab // key is pressed, possibly along with others. window.setTimeout(function () { // Don't trigger `blur` if the focus is still in the selection if ( (document.activeElement == self.$selection[0]) || ($.contains(self.$selection[0], document.activeElement)) ) { return; } self.trigger('blur', evt); }, 1); }; BaseSelection.prototype._attachCloseHandler = function (container) { $(document.body).on('mousedown.select2.' + container.id, function (e) { var $target = $(e.target); var $select = $target.closest('.select2'); var $all = $('.select2.select2-container--open'); $all.each(function () { if (this == $select[0]) { return; } var $element = Utils.GetData(this, 'element'); $element.select2('close'); }); }); }; BaseSelection.prototype._detachCloseHandler = function (container) { $(document.body).off('mousedown.select2.' + container.id); }; BaseSelection.prototype.position = function ($selection, $container) { var $selectionContainer = $container.find('.selection'); $selectionContainer.append($selection); }; BaseSelection.prototype.destroy = function () { this._detachCloseHandler(this.container); }; BaseSelection.prototype.update = function (data) { throw new Error('The `update` method must be defined in child classes.'); }; /** * Helper method to abstract the "enabled" (not "disabled") state of this * object. * * @return {true} if the instance is not disabled. * @return {false} if the instance is disabled. */ BaseSelection.prototype.isEnabled = function () { return !this.isDisabled(); }; /** * Helper method to abstract the "disabled" state of this object. * * @return {true} if the disabled option is true. * @return {false} if the disabled option is false. */ BaseSelection.prototype.isDisabled = function () { return this.options.get('disabled'); }; return BaseSelection; }); S2.define('select2/selection/single',[ 'jquery', './base', '../utils', '../keys' ], function ($, BaseSelection, Utils, KEYS) { function SingleSelection () { SingleSelection.__super__.constructor.apply(this, arguments); } Utils.Extend(SingleSelection, BaseSelection); SingleSelection.prototype.render = function () { var $selection = SingleSelection.__super__.render.call(this); $selection[0].classList.add('select2-selection--single'); $selection.html( '<span class="select2-selection__rendered"></span>' + '<span class="select2-selection__arrow" role="presentation">' + '<b role="presentation"></b>' + '</span>' ); return $selection; }; SingleSelection.prototype.bind = function (container, $container) { var self = this; SingleSelection.__super__.bind.apply(this, arguments); var id = container.id + '-container'; this.$selection.find('.select2-selection__rendered') .attr('id', id) .attr('role', 'textbox') .attr('aria-readonly', 'true'); this.$selection.attr('aria-labelledby', id); this.$selection.on('mousedown', function (evt) { // Only respond to left clicks if (evt.which !== 1) { return; } self.trigger('toggle', { originalEvent: evt }); }); this.$selection.on('focus', function (evt) { // User focuses on the container }); this.$selection.on('blur', function (evt) { // User exits the container }); container.on('focus', function (evt) { if (!container.isOpen()) { self.$selection.trigger('focus'); } }); }; SingleSelection.prototype.clear = function () { var $rendered = this.$selection.find('.select2-selection__rendered'); $rendered.empty(); $rendered.removeAttr('title'); // clear tooltip on empty }; SingleSelection.prototype.display = function (data, container) { var template = this.options.get('templateSelection'); var escapeMarkup = this.options.get('escapeMarkup'); return escapeMarkup(template(data, container)); }; SingleSelection.prototype.selectionContainer = function () { return $('<span></span>'); }; SingleSelection.prototype.update = function (data) { if (data.length === 0) { this.clear(); return; } var selection = data[0]; var $rendered = this.$selection.find('.select2-selection__rendered'); var formatted = this.display(selection, $rendered); $rendered.empty().append(formatted); var title = selection.title || selection.text; if (title) { $rendered.attr('title', title); } else { $rendered.removeAttr('title'); } }; return SingleSelection; }); S2.define('select2/selection/multiple',[ 'jquery', './base', '../utils' ], function ($, BaseSelection, Utils) { function MultipleSelection ($element, options) { MultipleSelection.__super__.constructor.apply(this, arguments); } Utils.Extend(MultipleSelection, BaseSelection); MultipleSelection.prototype.render = function () { var $selection = MultipleSelection.__super__.render.call(this); $selection[0].classList.add('select2-selection--multiple'); $selection.html( '<ul class="select2-selection__rendered"></ul>' ); return $selection; }; MultipleSelection.prototype.bind = function (container, $container) { var self = this; MultipleSelection.__super__.bind.apply(this, arguments); var id = container.id + '-container'; this.$selection.find('.select2-selection__rendered').attr('id', id); this.$selection.on('click', function (evt) { self.trigger('toggle', { originalEvent: evt }); }); this.$selection.on( 'click', '.select2-selection__choice__remove', function (evt) { // Ignore the event if it is disabled if (self.isDisabled()) { return; } var $remove = $(this); var $selection = $remove.parent(); var data = Utils.GetData($selection[0], 'data'); self.trigger('unselect', { originalEvent: evt, data: data }); } ); this.$selection.on( 'keydown', '.select2-selection__choice__remove', function (evt) { // Ignore the event if it is disabled if (self.isDisabled()) { return; } evt.stopPropagation(); } ); }; MultipleSelection.prototype.clear = function () { var $rendered = this.$selection.find('.select2-selection__rendered'); $rendered.empty(); $rendered.removeAttr('title'); }; MultipleSelection.prototype.display = function (data, container) { var template = this.options.get('templateSelection'); var escapeMarkup = this.options.get('escapeMarkup'); return escapeMarkup(template(data, container)); }; MultipleSelection.prototype.selectionContainer = function () { var $container = $( '<li class="select2-selection__choice">' + '<button type="button" class="select2-selection__choice__remove" ' + 'tabindex="-1">' + '<span aria-hidden="true">×</span>' + '</button>' + '<span class="select2-selection__choice__display"></span>' + '</li>' ); return $container; }; MultipleSelection.prototype.update = function (data) { this.clear(); if (data.length === 0) { return; } var $selections = []; var selectionIdPrefix = this.$selection.find('.select2-selection__rendered') .attr('id') + '-choice-'; for (var d = 0; d < data.length; d++) { var selection = data[d]; var $selection = this.selectionContainer(); var formatted = this.display(selection, $selection); var selectionId = selectionIdPrefix + Utils.generateChars(4) + '-'; if (selection.id) { selectionId += selection.id; } else { selectionId += Utils.generateChars(4); } $selection.find('.select2-selection__choice__display') .append(formatted) .attr('id', selectionId); var title = selection.title || selection.text; if (title) { $selection.attr('title', title); } var removeItem = this.options.get('translations').get('removeItem'); var $remove = $selection.find('.select2-selection__choice__remove'); $remove.attr('title', removeItem()); $remove.attr('aria-label', removeItem()); $remove.attr('aria-describedby', selectionId); Utils.StoreData($selection[0], 'data', selection); $selections.push($selection); } var $rendered = this.$selection.find('.select2-selection__rendered'); $rendered.append($selections); }; return MultipleSelection; }); S2.define('select2/selection/placeholder',[ ], function () { function Placeholder (decorated, $element, options) { this.placeholder = this.normalizePlaceholder(options.get('placeholder')); decorated.call(this, $element, options); } Placeholder.prototype.normalizePlaceholder = function (_, placeholder) { if (typeof placeholder === 'string') { placeholder = { id: '', text: placeholder }; } return placeholder; }; Placeholder.prototype.createPlaceholder = function (decorated, placeholder) { var $placeholder = this.selectionContainer(); $placeholder.html(this.display(placeholder)); $placeholder[0].classList.add('select2-selection__placeholder'); $placeholder[0].classList.remove('select2-selection__choice'); return $placeholder; }; Placeholder.prototype.update = function (decorated, data) { var singlePlaceholder = ( data.length == 1 && data[0].id != this.placeholder.id ); var multipleSelections = data.length > 1; if (multipleSelections || singlePlaceholder) { return decorated.call(this, data); } this.clear(); var $placeholder = this.createPlaceholder(this.placeholder); this.$selection.find('.select2-selection__rendered').append($placeholder); }; return Placeholder; }); S2.define('select2/selection/allowClear',[ 'jquery', '../keys', '../utils' ], function ($, KEYS, Utils) { function AllowClear () { } AllowClear.prototype.bind = function (decorated, container, $container) { var self = this; decorated.call(this, container, $container); if (this.placeholder == null) { if (this.options.get('debug') && window.console && console.error) { console.error( 'Select2: The `allowClear` option should be used in combination ' + 'with the `placeholder` option.' ); } } this.$selection.on('mousedown', '.select2-selection__clear', function (evt) { self._handleClear(evt); }); container.on('keypress', function (evt) { self._handleKeyboardClear(evt, container); }); }; AllowClear.prototype._handleClear = function (_, evt) { // Ignore the event if it is disabled if (this.isDisabled()) { return; } var $clear = this.$selection.find('.select2-selection__clear'); // Ignore the event if nothing has been selected if ($clear.length === 0) { return; } evt.stopPropagation(); var data = Utils.GetData($clear[0], 'data'); var previousVal = this.$element.val(); this.$element.val(this.placeholder.id); var unselectData = { data: data }; this.trigger('clear', unselectData); if (unselectData.prevented) { this.$element.val(previousVal); return; } for (var d = 0; d < data.length; d++) { unselectData = { data: data[d] }; // Trigger the `unselect` event, so people can prevent it from being // cleared. this.trigger('unselect', unselectData); // If the event was prevented, don't clear it out. if (unselectData.prevented) { this.$element.val(previousVal); return; } } this.$element.trigger('input').trigger('change'); this.trigger('toggle', {}); }; AllowClear.prototype._handleKeyboardClear = function (_, evt, container) { if (container.isOpen()) { return; } if (evt.which == KEYS.DELETE || evt.which == KEYS.BACKSPACE) { this._handleClear(evt); } }; AllowClear.prototype.update = function (decorated, data) { decorated.call(this, data); this.$selection.find('.select2-selection__clear').remove(); if (this.$selection.find('.select2-selection__placeholder').length > 0 || data.length === 0) { return; } var selectionId = this.$selection.find('.select2-selection__rendered') .attr('id'); var removeAll = this.options.get('translations').get('removeAllItems'); var $remove = $( '<button type="button" class="select2-selection__clear" tabindex="-1">' + '<span aria-hidden="true">×</span>' + '</button>' ); $remove.attr('title', removeAll()); $remove.attr('aria-label', removeAll()); $remove.attr('aria-describedby', selectionId); Utils.StoreData($remove[0], 'data', data); this.$selection.prepend($remove); }; return AllowClear; }); S2.define('select2/selection/search',[ 'jquery', '../utils', '../keys' ], function ($, Utils, KEYS) { function Search (decorated, $element, options) { decorated.call(this, $element, options); } Search.prototype.render = function (decorated) { var $search = $( '<span class="select2-search select2-search--inline">' + '<input class="select2-search__field" type="search" tabindex="-1"' + ' autocorrect="off" autocapitalize="none"' + ' spellcheck="false" role="searchbox" aria-autocomplete="list" />' + '</span>' ); this.$searchContainer = $search; this.$search = $search.find('input'); this.$search.prop('autocomplete', this.options.get('autocomplete')); var $rendered = decorated.call(this); this._transferTabIndex(); $rendered.append(this.$searchContainer); return $rendered; }; Search.prototype.bind = function (decorated, container, $container) { var self = this; var resultsId = container.id + '-results'; var selectionId = container.id + '-container'; decorated.call(this, container, $container); self.$search.attr('aria-describedby', selectionId); container.on('open', function () { self.$search.attr('aria-controls', resultsId); self.$search.trigger('focus'); }); container.on('close', function () { self.$search.val(''); self.resizeSearch(); self.$search.removeAttr('aria-controls'); self.$search.removeAttr('aria-activedescendant'); self.$search.trigger('focus'); }); container.on('enable', function () { self.$search.prop('disabled', false); self._transferTabIndex(); }); container.on('disable', function () { self.$search.prop('disabled', true); }); container.on('focus', function (evt) { self.$search.trigger('focus'); }); container.on('results:focus', function (params) { if (params.data._resultId) { self.$search.attr('aria-activedescendant', params.data._resultId); } else { self.$search.removeAttr('aria-activedescendant'); } }); this.$selection.on('focusin', '.select2-search--inline', function (evt) { self.trigger('focus', evt); }); this.$selection.on('focusout', '.select2-search--inline', function (evt) { self._handleBlur(evt); }); this.$selection.on('keydown', '.select2-search--inline', function (evt) { evt.stopPropagation(); self.trigger('keypress', evt); self._keyUpPrevented = evt.isDefaultPrevented(); var key = evt.which; if (key === KEYS.BACKSPACE && self.$search.val() === '') { var $previousChoice = self.$selection .find('.select2-selection__choice').last(); if ($previousChoice.length > 0) { var item = Utils.GetData($previousChoice[0], 'data'); self.searchRemoveChoice(item); evt.preventDefault(); } } }); this.$selection.on('click', '.select2-search--inline', function (evt) { if (self.$search.val()) { evt.stopPropagation(); } }); // Try to detect the IE version should the `documentMode` property that // is stored on the document. This is only implemented in IE and is // slightly cleaner than doing a user agent check. // This property is not available in Edge, but Edge also doesn't have // this bug. var msie = document.documentMode; var disableInputEvents = msie && msie <= 11; // Workaround for browsers which do not support the `input` event // This will prevent double-triggering of events for browsers which support // both the `keyup` and `input` events. this.$selection.on( 'input.searchcheck', '.select2-search--inline', function (evt) { // IE will trigger the `input` event when a placeholder is used on a // search box. To get around this issue, we are forced to ignore all // `input` events in IE and keep using `keyup`. if (disableInputEvents) { self.$selection.off('input.search input.searchcheck'); return; } // Unbind the duplicated `keyup` event self.$selection.off('keyup.search'); } ); this.$selection.on( 'keyup.search input.search', '.select2-search--inline', function (evt) { // IE will trigger the `input` event when a placeholder is used on a // search box. To get around this issue, we are forced to ignore all // `input` events in IE and keep using `keyup`. if (disableInputEvents && evt.type === 'input') { self.$selection.off('input.search input.searchcheck'); return; } var key = evt.which; // We can freely ignore events from modifier keys if (key == KEYS.SHIFT || key == KEYS.CTRL || key == KEYS.ALT) { return; } // Tabbing will be handled during the `keydown` phase if (key == KEYS.TAB) { return; } self.handleSearch(evt); } ); }; /** * This method will transfer the tabindex attribute from the rendered * selection to the search box. This allows for the search box to be used as * the primary focus instead of the selection container. * * @private */ Search.prototype._transferTabIndex = function (decorated) { this.$search.attr('tabindex', this.$selection.attr('tabindex')); this.$selection.attr('tabindex', '-1'); }; Search.prototype.createPlaceholder = function (decorated, placeholder) { this.$search.attr('placeholder', placeholder.text); }; Search.prototype.update = function (decorated, data) { var searchHadFocus = this.$search[0] == document.activeElement; this.$search.attr('placeholder', ''); decorated.call(this, data); this.resizeSearch(); if (searchHadFocus) { this.$search.trigger('focus'); } }; Search.prototype.handleSearch = function () { this.resizeSearch(); if (!this._keyUpPrevented) { var input = this.$search.val(); this.trigger('query', { term: input }); } this._keyUpPrevented = false; }; Search.prototype.searchRemoveChoice = function (decorated, item) { this.trigger('unselect', { data: item }); this.$search.val(item.text); this.handleSearch(); }; Search.prototype.resizeSearch = function () { this.$search.css('width', '25px'); var width = '100%'; if (this.$search.attr('placeholder') === '') { var minimumWidth = this.$search.val().length + 1; width = (minimumWidth * 0.75) + 'em'; } this.$search.css('width', width); }; return Search; }); S2.define('select2/selection/selectionCss',[ '../utils' ], function (Utils) { function SelectionCSS () { } SelectionCSS.prototype.render = function (decorated) { var $selection = decorated.call(this); var selectionCssClass = this.options.get('selectionCssClass') || ''; if (selectionCssClass.indexOf(':all:') !== -1) { selectionCssClass = selectionCssClass.replace(':all:', ''); Utils.copyNonInternalCssClasses($selection[0], this.$element[0]); } $selection.addClass(selectionCssClass); return $selection; }; return SelectionCSS; }); S2.define('select2/selection/eventRelay',[ 'jquery' ], function ($) { function EventRelay () { } EventRelay.prototype.bind = function (decorated, container, $container) { var self = this; var relayEvents = [ 'open', 'opening', 'close', 'closing', 'select', 'selecting', 'unselect', 'unselecting', 'clear', 'clearing' ]; var preventableEvents = [ 'opening', 'closing', 'selecting', 'unselecting', 'clearing' ]; decorated.call(this, container, $container); container.on('*', function (name, params) { // Ignore events that should not be relayed if (relayEvents.indexOf(name) === -1) { return; } // The parameters should always be an object params = params || {}; // Generate the jQuery event for the Select2 event var evt = $.Event('select2:' + name, { params: params }); self.$element.trigger(evt); // Only handle preventable events if it was one if (preventableEvents.indexOf(name) === -1) { return; } params.prevented = evt.isDefaultPrevented(); }); }; return EventRelay; }); S2.define('select2/translation',[ 'jquery', 'require' ], function ($, require) { function Translation (dict) { this.dict = dict || {}; } Translation.prototype.all = function () { return this.dict; }; Translation.prototype.get = function (key) { return this.dict[key]; }; Translation.prototype.extend = function (translation) { this.dict = $.extend({}, translation.all(), this.dict); }; // Static functions Translation._cache = {}; Translation.loadPath = function (path) { if (!(path in Translation._cache)) { var translations = require(path); Translation._cache[path] = translations; } return new Translation(Translation._cache[path]); }; return Translation; }); S2.define('select2/diacritics',[ ], function () { var diacritics = { '\u24B6': 'A', '\uFF21': 'A', '\u00C0': 'A', '\u00C1': 'A', '\u00C2': 'A', '\u1EA6': 'A', '\u1EA4': 'A', '\u1EAA': 'A', '\u1EA8': 'A', '\u00C3': 'A', '\u0100': 'A', '\u0102': 'A', '\u1EB0': 'A', '\u1EAE': 'A', '\u1EB4': 'A', '\u1EB2': 'A', '\u0226': 'A', '\u01E0': 'A', '\u00C4': 'A', '\u01DE': 'A', '\u1EA2': 'A', '\u00C5': 'A', '\u01FA': 'A', '\u01CD': 'A', '\u0200': 'A', '\u0202': 'A', '\u1EA0': 'A', '\u1EAC': 'A', '\u1EB6': 'A', '\u1E00': 'A', '\u0104': 'A', '\u023A': 'A', '\u2C6F': 'A', '\uA732': 'AA', '\u00C6': 'AE', '\u01FC': 'AE', '\u01E2': 'AE', '\uA734': 'AO', '\uA736': 'AU', '\uA738': 'AV', '\uA73A': 'AV', '\uA73C': 'AY', '\u24B7': 'B', '\uFF22': 'B', '\u1E02': 'B', '\u1E04': 'B', '\u1E06': 'B', '\u0243': 'B', '\u0182': 'B', '\u0181': 'B', '\u24B8': 'C', '\uFF23': 'C', '\u0106': 'C', '\u0108': 'C', '\u010A': 'C', '\u010C': 'C', '\u00C7': 'C', '\u1E08': 'C', '\u0187': 'C', '\u023B': 'C', '\uA73E': 'C', '\u24B9': 'D', '\uFF24': 'D', '\u1E0A': 'D', '\u010E': 'D', '\u1E0C': 'D', '\u1E10': 'D', '\u1E12': 'D', '\u1E0E': 'D', '\u0110': 'D', '\u018B': 'D', '\u018A': 'D', '\u0189': 'D', '\uA779': 'D', '\u01F1': 'DZ', '\u01C4': 'DZ', '\u01F2': 'Dz', '\u01C5': 'Dz', '\u24BA': 'E', '\uFF25': 'E', '\u00C8': 'E', '\u00C9': 'E', '\u00CA': 'E', '\u1EC0': 'E', '\u1EBE': 'E', '\u1EC4': 'E', '\u1EC2': 'E', '\u1EBC': 'E', '\u0112': 'E', '\u1E14': 'E', '\u1E16': 'E', '\u0114': 'E', '\u0116': 'E', '\u00CB': 'E', '\u1EBA': 'E', '\u011A': 'E', '\u0204': 'E', '\u0206': 'E', '\u1EB8': 'E', '\u1EC6': 'E', '\u0228': 'E', '\u1E1C': 'E', '\u0118': 'E', '\u1E18': 'E', '\u1E1A': 'E', '\u0190': 'E', '\u018E': 'E', '\u24BB': 'F', '\uFF26': 'F', '\u1E1E': 'F', '\u0191': 'F', '\uA77B': 'F', '\u24BC': 'G', '\uFF27': 'G', '\u01F4': 'G', '\u011C': 'G', '\u1E20': 'G', '\u011E': 'G', '\u0120': 'G', '\u01E6': 'G', '\u0122': 'G', '\u01E4': 'G', '\u0193': 'G', '\uA7A0': 'G', '\uA77D': 'G', '\uA77E': 'G', '\u24BD': 'H', '\uFF28': 'H', '\u0124': 'H', '\u1E22': 'H', '\u1E26': 'H', '\u021E': 'H', '\u1E24': 'H', '\u1E28': 'H', '\u1E2A': 'H', '\u0126': 'H', '\u2C67': 'H', '\u2C75': 'H', '\uA78D': 'H', '\u24BE': 'I', '\uFF29': 'I', '\u00CC': 'I', '\u00CD': 'I', '\u00CE': 'I', '\u0128': 'I', '\u012A': 'I', '\u012C': 'I', '\u0130': 'I', '\u00CF': 'I', '\u1E2E': 'I', '\u1EC8': 'I', '\u01CF': 'I', '\u0208': 'I', '\u020A': 'I', '\u1ECA': 'I', '\u012E': 'I', '\u1E2C': 'I', '\u0197': 'I', '\u24BF': 'J', '\uFF2A': 'J', '\u0134': 'J', '\u0248': 'J', '\u24C0': 'K', '\uFF2B': 'K', '\u1E30': 'K', '\u01E8': 'K', '\u1E32': 'K', '\u0136': 'K', '\u1E34': 'K', '\u0198': 'K', '\u2C69': 'K', '\uA740': 'K', '\uA742': 'K', '\uA744': 'K', '\uA7A2': 'K', '\u24C1': 'L', '\uFF2C': 'L', '\u013F': 'L', '\u0139': 'L', '\u013D': 'L', '\u1E36': 'L', '\u1E38': 'L', '\u013B': 'L', '\u1E3C': 'L', '\u1E3A': 'L', '\u0141': 'L', '\u023D': 'L', '\u2C62': 'L', '\u2C60': 'L', '\uA748': 'L', '\uA746': 'L', '\uA780': 'L', '\u01C7': 'LJ', '\u01C8': 'Lj', '\u24C2': 'M', '\uFF2D': 'M', '\u1E3E': 'M', '\u1E40': 'M', '\u1E42': 'M', '\u2C6E': 'M', '\u019C': 'M', '\u24C3': 'N', '\uFF2E': 'N', '\u01F8': 'N', '\u0143': 'N', '\u00D1': 'N', '\u1E44': 'N', '\u0147': 'N', '\u1E46': 'N', '\u0145': 'N', '\u1E4A': 'N', '\u1E48': 'N', '\u0220': 'N', '\u019D': 'N', '\uA790': 'N', '\uA7A4': 'N', '\u01CA': 'NJ', '\u01CB': 'Nj', '\u24C4': 'O', '\uFF2F': 'O', '\u00D2': 'O', '\u00D3': 'O', '\u00D4': 'O', '\u1ED2': 'O', '\u1ED0': 'O', '\u1ED6': 'O', '\u1ED4': 'O', '\u00D5': 'O', '\u1E4C': 'O', '\u022C': 'O', '\u1E4E': 'O', '\u014C': 'O', '\u1E50': 'O', '\u1E52': 'O', '\u014E': 'O', '\u022E': 'O', '\u0230': 'O', '\u00D6': 'O', '\u022A': 'O', '\u1ECE': 'O', '\u0150': 'O', '\u01D1': 'O', '\u020C': 'O', '\u020E': 'O', '\u01A0': 'O', '\u1EDC': 'O', '\u1EDA': 'O', '\u1EE0': 'O', '\u1EDE': 'O', '\u1EE2': 'O', '\u1ECC': 'O', '\u1ED8': 'O', '\u01EA': 'O', '\u01EC': 'O', '\u00D8': 'O', '\u01FE': 'O', '\u0186': 'O', '\u019F': 'O', '\uA74A': 'O', '\uA74C': 'O', '\u0152': 'OE', '\u01A2': 'OI', '\uA74E': 'OO', '\u0222': 'OU', '\u24C5': 'P', '\uFF30': 'P', '\u1E54': 'P', '\u1E56': 'P', '\u01A4': 'P', '\u2C63': 'P', '\uA750': 'P', '\uA752': 'P', '\uA754': 'P', '\u24C6': 'Q', '\uFF31': 'Q', '\uA756': 'Q', '\uA758': 'Q', '\u024A': 'Q', '\u24C7': 'R', '\uFF32': 'R', '\u0154': 'R', '\u1E58': 'R', '\u0158': 'R', '\u0210': 'R', '\u0212': 'R', '\u1E5A': 'R', '\u1E5C': 'R', '\u0156': 'R', '\u1E5E': 'R', '\u024C': 'R', '\u2C64': 'R', '\uA75A': 'R', '\uA7A6': 'R', '\uA782': 'R', '\u24C8': 'S', '\uFF33': 'S', '\u1E9E': 'S', '\u015A': 'S', '\u1E64': 'S', '\u015C': 'S', '\u1E60': 'S', '\u0160': 'S', '\u1E66': 'S', '\u1E62': 'S', '\u1E68': 'S', '\u0218': 'S', '\u015E': 'S', '\u2C7E': 'S', '\uA7A8': 'S', '\uA784': 'S', '\u24C9': 'T', '\uFF34': 'T', '\u1E6A': 'T', '\u0164': 'T', '\u1E6C': 'T', '\u021A': 'T', '\u0162': 'T', '\u1E70': 'T', '\u1E6E': 'T', '\u0166': 'T', '\u01AC': 'T', '\u01AE': 'T', '\u023E': 'T', '\uA786': 'T', '\uA728': 'TZ', '\u24CA': 'U', '\uFF35': 'U', '\u00D9': 'U', '\u00DA': 'U', '\u00DB': 'U', '\u0168': 'U', '\u1E78': 'U', '\u016A': 'U', '\u1E7A': 'U', '\u016C': 'U', '\u00DC': 'U', '\u01DB': 'U', '\u01D7': 'U', '\u01D5': 'U', '\u01D9': 'U', '\u1EE6': 'U', '\u016E': 'U', '\u0170': 'U', '\u01D3': 'U', '\u0214': 'U', '\u0216': 'U', '\u01AF': 'U', '\u1EEA': 'U', '\u1EE8': 'U', '\u1EEE': 'U', '\u1EEC': 'U', '\u1EF0': 'U', '\u1EE4': 'U', '\u1E72': 'U', '\u0172': 'U', '\u1E76': 'U', '\u1E74': 'U', '\u0244': 'U', '\u24CB': 'V', '\uFF36': 'V', '\u1E7C': 'V', '\u1E7E': 'V', '\u01B2': 'V', '\uA75E': 'V', '\u0245': 'V', '\uA760': 'VY', '\u24CC': 'W', '\uFF37': 'W', '\u1E80': 'W', '\u1E82': 'W', '\u0174': 'W', '\u1E86': 'W', '\u1E84': 'W', '\u1E88': 'W', '\u2C72': 'W', '\u24CD': 'X', '\uFF38': 'X', '\u1E8A': 'X', '\u1E8C': 'X', '\u24CE': 'Y', '\uFF39': 'Y', '\u1EF2': 'Y', '\u00DD': 'Y', '\u0176': 'Y', '\u1EF8': 'Y', '\u0232': 'Y', '\u1E8E': 'Y', '\u0178': 'Y', '\u1EF6': 'Y', '\u1EF4': 'Y', '\u01B3': 'Y', '\u024E': 'Y', '\u1EFE': 'Y', '\u24CF': 'Z', '\uFF3A': 'Z', '\u0179': 'Z', '\u1E90': 'Z', '\u017B': 'Z', '\u017D': 'Z', '\u1E92': 'Z', '\u1E94': 'Z', '\u01B5': 'Z', '\u0224': 'Z', '\u2C7F': 'Z', '\u2C6B': 'Z', '\uA762': 'Z', '\u24D0': 'a', '\uFF41': 'a', '\u1E9A': 'a', '\u00E0': 'a', '\u00E1': 'a', '\u00E2': 'a', '\u1EA7': 'a', '\u1EA5': 'a', '\u1EAB': 'a', '\u1EA9': 'a', '\u00E3': 'a', '\u0101': 'a', '\u0103': 'a', '\u1EB1': 'a', '\u1EAF': 'a', '\u1EB5': 'a', '\u1EB3': 'a', '\u0227': 'a', '\u01E1': 'a', '\u00E4': 'a', '\u01DF': 'a', '\u1EA3': 'a', '\u00E5': 'a', '\u01FB': 'a', '\u01CE': 'a', '\u0201': 'a', '\u0203': 'a', '\u1EA1': 'a', '\u1EAD': 'a', '\u1EB7': 'a', '\u1E01': 'a', '\u0105': 'a', '\u2C65': 'a', '\u0250': 'a', '\uA733': 'aa', '\u00E6': 'ae', '\u01FD': 'ae', '\u01E3': 'ae', '\uA735': 'ao', '\uA737': 'au', '\uA739': 'av', '\uA73B': 'av', '\uA73D': 'ay', '\u24D1': 'b', '\uFF42': 'b', '\u1E03': 'b', '\u1E05': 'b', '\u1E07': 'b', '\u0180': 'b', '\u0183': 'b', '\u0253': 'b', '\u24D2': 'c', '\uFF43': 'c', '\u0107': 'c', '\u0109': 'c', '\u010B': 'c', '\u010D': 'c', '\u00E7': 'c', '\u1E09': 'c', '\u0188': 'c', '\u023C': 'c', '\uA73F': 'c', '\u2184': 'c', '\u24D3': 'd', '\uFF44': 'd', '\u1E0B': 'd', '\u010F': 'd', '\u1E0D': 'd', '\u1E11': 'd', '\u1E13': 'd', '\u1E0F': 'd', '\u0111': 'd', '\u018C': 'd', '\u0256': 'd', '\u0257': 'd', '\uA77A': 'd', '\u01F3': 'dz', '\u01C6': 'dz', '\u24D4': 'e', '\uFF45': 'e', '\u00E8': 'e', '\u00E9': 'e', '\u00EA': 'e', '\u1EC1': 'e', '\u1EBF': 'e', '\u1EC5': 'e', '\u1EC3': 'e', '\u1EBD': 'e', '\u0113': 'e', '\u1E15': 'e', '\u1E17': 'e', '\u0115': 'e', '\u0117': 'e', '\u00EB': 'e', '\u1EBB': 'e', '\u011B': 'e', '\u0205': 'e', '\u0207': 'e', '\u1EB9': 'e', '\u1EC7': 'e', '\u0229': 'e', '\u1E1D': 'e', '\u0119': 'e', '\u1E19': 'e', '\u1E1B': 'e', '\u0247': 'e', '\u025B': 'e', '\u01DD': 'e', '\u24D5': 'f', '\uFF46': 'f', '\u1E1F': 'f', '\u0192': 'f', '\uA77C': 'f', '\u24D6': 'g', '\uFF47': 'g', '\u01F5': 'g', '\u011D': 'g', '\u1E21': 'g', '\u011F': 'g', '\u0121': 'g', '\u01E7': 'g', '\u0123': 'g', '\u01E5': 'g', '\u0260': 'g', '\uA7A1': 'g', '\u1D79': 'g', '\uA77F': 'g', '\u24D7': 'h', '\uFF48': 'h', '\u0125': 'h', '\u1E23': 'h', '\u1E27': 'h', '\u021F': 'h', '\u1E25': 'h', '\u1E29': 'h', '\u1E2B': 'h', '\u1E96': 'h', '\u0127': 'h', '\u2C68': 'h', '\u2C76': 'h', '\u0265': 'h', '\u0195': 'hv', '\u24D8': 'i', '\uFF49': 'i', '\u00EC': 'i', '\u00ED': 'i', '\u00EE': 'i', '\u0129': 'i', '\u012B': 'i', '\u012D': 'i', '\u00EF': 'i', '\u1E2F': 'i', '\u1EC9': 'i', '\u01D0': 'i', '\u0209': 'i', '\u020B': 'i', '\u1ECB': 'i', '\u012F': 'i', '\u1E2D': 'i', '\u0268': 'i', '\u0131': 'i', '\u24D9': 'j', '\uFF4A': 'j', '\u0135': 'j', '\u01F0': 'j', '\u0249': 'j', '\u24DA': 'k', '\uFF4B': 'k', '\u1E31': 'k', '\u01E9': 'k', '\u1E33': 'k', '\u0137': 'k', '\u1E35': 'k', '\u0199': 'k', '\u2C6A': 'k', '\uA741': 'k', '\uA743': 'k', '\uA745': 'k', '\uA7A3': 'k', '\u24DB': 'l', '\uFF4C': 'l', '\u0140': 'l', '\u013A': 'l', '\u013E': 'l', '\u1E37': 'l', '\u1E39': 'l', '\u013C': 'l', '\u1E3D': 'l', '\u1E3B': 'l', '\u017F': 'l', '\u0142': 'l', '\u019A': 'l', '\u026B': 'l', '\u2C61': 'l', '\uA749': 'l', '\uA781': 'l', '\uA747': 'l', '\u01C9': 'lj', '\u24DC': 'm', '\uFF4D': 'm', '\u1E3F': 'm', '\u1E41': 'm', '\u1E43': 'm', '\u0271': 'm', '\u026F': 'm', '\u24DD': 'n', '\uFF4E': 'n', '\u01F9': 'n', '\u0144': 'n', '\u00F1': 'n', '\u1E45': 'n', '\u0148': 'n', '\u1E47': 'n', '\u0146': 'n', '\u1E4B': 'n', '\u1E49': 'n', '\u019E': 'n', '\u0272': 'n', '\u0149': 'n', '\uA791': 'n', '\uA7A5': 'n', '\u01CC': 'nj', '\u24DE': 'o', '\uFF4F': 'o', '\u00F2': 'o', '\u00F3': 'o', '\u00F4': 'o', '\u1ED3': 'o', '\u1ED1': 'o', '\u1ED7': 'o', '\u1ED5': 'o', '\u00F5': 'o', '\u1E4D': 'o', '\u022D': 'o', '\u1E4F': 'o', '\u014D': 'o', '\u1E51': 'o', '\u1E53': 'o', '\u014F': 'o', '\u022F': 'o', '\u0231': 'o', '\u00F6': 'o', '\u022B': 'o', '\u1ECF': 'o', '\u0151': 'o', '\u01D2': 'o', '\u020D': 'o', '\u020F': 'o', '\u01A1': 'o', '\u1EDD': 'o', '\u1EDB': 'o', '\u1EE1': 'o', '\u1EDF': 'o', '\u1EE3': 'o', '\u1ECD': 'o', '\u1ED9': 'o', '\u01EB': 'o', '\u01ED': 'o', '\u00F8': 'o', '\u01FF': 'o', '\u0254': 'o', '\uA74B': 'o', '\uA74D': 'o', '\u0275': 'o', '\u0153': 'oe', '\u01A3': 'oi', '\u0223': 'ou', '\uA74F': 'oo', '\u24DF': 'p', '\uFF50': 'p', '\u1E55': 'p', '\u1E57': 'p', '\u01A5': 'p', '\u1D7D': 'p', '\uA751': 'p', '\uA753': 'p', '\uA755': 'p', '\u24E0': 'q', '\uFF51': 'q', '\u024B': 'q', '\uA757': 'q', '\uA759': 'q', '\u24E1': 'r', '\uFF52': 'r', '\u0155': 'r', '\u1E59': 'r', '\u0159': 'r', '\u0211': 'r', '\u0213': 'r', '\u1E5B': 'r', '\u1E5D': 'r', '\u0157': 'r', '\u1E5F': 'r', '\u024D': 'r', '\u027D': 'r', '\uA75B': 'r', '\uA7A7': 'r', '\uA783': 'r', '\u24E2': 's', '\uFF53': 's', '\u00DF': 's', '\u015B': 's', '\u1E65': 's', '\u015D': 's', '\u1E61': 's', '\u0161': 's', '\u1E67': 's', '\u1E63': 's', '\u1E69': 's', '\u0219': 's', '\u015F': 's', '\u023F': 's', '\uA7A9': 's', '\uA785': 's', '\u1E9B': 's', '\u24E3': 't', '\uFF54': 't', '\u1E6B': 't', '\u1E97': 't', '\u0165': 't', '\u1E6D': 't', '\u021B': 't', '\u0163': 't', '\u1E71': 't', '\u1E6F': 't', '\u0167': 't', '\u01AD': 't', '\u0288': 't', '\u2C66': 't', '\uA787': 't', '\uA729': 'tz', '\u24E4': 'u', '\uFF55': 'u', '\u00F9': 'u', '\u00FA': 'u', '\u00FB': 'u', '\u0169': 'u', '\u1E79': 'u', '\u016B': 'u', '\u1E7B': 'u', '\u016D': 'u', '\u00FC': 'u', '\u01DC': 'u', '\u01D8': 'u', '\u01D6': 'u', '\u01DA': 'u', '\u1EE7': 'u', '\u016F': 'u', '\u0171': 'u', '\u01D4': 'u', '\u0215': 'u', '\u0217': 'u', '\u01B0': 'u', '\u1EEB': 'u', '\u1EE9': 'u', '\u1EEF': 'u', '\u1EED': 'u', '\u1EF1': 'u', '\u1EE5': 'u', '\u1E73': 'u', '\u0173': 'u', '\u1E77': 'u', '\u1E75': 'u', '\u0289': 'u', '\u24E5': 'v', '\uFF56': 'v', '\u1E7D': 'v', '\u1E7F': 'v', '\u028B': 'v', '\uA75F': 'v', '\u028C': 'v', '\uA761': 'vy', '\u24E6': 'w', '\uFF57': 'w', '\u1E81': 'w', '\u1E83': 'w', '\u0175': 'w', '\u1E87': 'w', '\u1E85': 'w', '\u1E98': 'w', '\u1E89': 'w', '\u2C73': 'w', '\u24E7': 'x', '\uFF58': 'x', '\u1E8B': 'x', '\u1E8D': 'x', '\u24E8': 'y', '\uFF59': 'y', '\u1EF3': 'y', '\u00FD': 'y', '\u0177': 'y', '\u1EF9': 'y', '\u0233': 'y', '\u1E8F': 'y', '\u00FF': 'y', '\u1EF7': 'y', '\u1E99': 'y', '\u1EF5': 'y', '\u01B4': 'y', '\u024F': 'y', '\u1EFF': 'y', '\u24E9': 'z', '\uFF5A': 'z', '\u017A': 'z', '\u1E91': 'z', '\u017C': 'z', '\u017E': 'z', '\u1E93': 'z', '\u1E95': 'z', '\u01B6': 'z', '\u0225': 'z', '\u0240': 'z', '\u2C6C': 'z', '\uA763': 'z', '\u0386': '\u0391', '\u0388': '\u0395', '\u0389': '\u0397', '\u038A': '\u0399', '\u03AA': '\u0399', '\u038C': '\u039F', '\u038E': '\u03A5', '\u03AB': '\u03A5', '\u038F': '\u03A9', '\u03AC': '\u03B1', '\u03AD': '\u03B5', '\u03AE': '\u03B7', '\u03AF': '\u03B9', '\u03CA': '\u03B9', '\u0390': '\u03B9', '\u03CC': '\u03BF', '\u03CD': '\u03C5', '\u03CB': '\u03C5', '\u03B0': '\u03C5', '\u03CE': '\u03C9', '\u03C2': '\u03C3', '\u2019': '\'' }; return diacritics; }); S2.define('select2/data/base',[ '../utils' ], function (Utils) { function BaseAdapter ($element, options) { BaseAdapter.__super__.constructor.call(this); } Utils.Extend(BaseAdapter, Utils.Observable); BaseAdapter.prototype.current = function (callback) { throw new Error('The `current` method must be defined in child classes.'); }; BaseAdapter.prototype.query = function (params, callback) { throw new Error('The `query` method must be defined in child classes.'); }; BaseAdapter.prototype.bind = function (container, $container) { // Can be implemented in subclasses }; BaseAdapter.prototype.destroy = function () { // Can be implemented in subclasses }; BaseAdapter.prototype.generateResultId = function (container, data) { var id = container.id + '-result-'; id += Utils.generateChars(4); if (data.id != null) { id += '-' + data.id.toString(); } else { id += '-' + Utils.generateChars(4); } return id; }; return BaseAdapter; }); S2.define('select2/data/select',[ './base', '../utils', 'jquery' ], function (BaseAdapter, Utils, $) { function SelectAdapter ($element, options) { this.$element = $element; this.options = options; SelectAdapter.__super__.constructor.call(this); } Utils.Extend(SelectAdapter, BaseAdapter); SelectAdapter.prototype.current = function (callback) { var self = this; var data = Array.prototype.map.call( this.$element[0].querySelectorAll(':checked'), function (selectedElement) { return self.item($(selectedElement)); } ); callback(data); }; SelectAdapter.prototype.select = function (data) { var self = this; data.selected = true; // If data.element is a DOM node, use it instead if ( data.element != null && data.element.tagName.toLowerCase() === 'option' ) { data.element.selected = true; this.$element.trigger('input').trigger('change'); return; } if (this.$element.prop('multiple')) { this.current(function (currentData) { var val = []; data = [data]; data.push.apply(data, currentData); for (var d = 0; d < data.length; d++) { var id = data[d].id; if (val.indexOf(id) === -1) { val.push(id); } } self.$element.val(val); self.$element.trigger('input').trigger('change'); }); } else { var val = data.id; this.$element.val(val); this.$element.trigger('input').trigger('change'); } }; SelectAdapter.prototype.unselect = function (data) { var self = this; if (!this.$element.prop('multiple')) { return; } data.selected = false; if ( data.element != null && data.element.tagName.toLowerCase() === 'option' ) { data.element.selected = false; this.$element.trigger('input').trigger('change'); return; } this.current(function (currentData) { var val = []; for (var d = 0; d < currentData.length; d++) { var id = currentData[d].id; if (id !== data.id && val.indexOf(id) === -1) { val.push(id); } } self.$element.val(val); self.$element.trigger('input').trigger('change'); }); }; SelectAdapter.prototype.bind = function (container, $container) { var self = this; this.container = container; container.on('select', function (params) { self.select(params.data); }); container.on('unselect', function (params) { self.unselect(params.data); }); }; SelectAdapter.prototype.destroy = function () { // Remove anything added to child elements this.$element.find('*').each(function () { // Remove any custom data set by Select2 Utils.RemoveData(this); }); }; SelectAdapter.prototype.query = function (params, callback) { var data = []; var self = this; var $options = this.$element.children(); $options.each(function () { if ( this.tagName.toLowerCase() !== 'option' && this.tagName.toLowerCase() !== 'optgroup' ) { return; } var $option = $(this); var option = self.item($option); var matches = self.matches(params, option); if (matches !== null) { data.push(matches); } }); callback({ results: data }); }; SelectAdapter.prototype.addOptions = function ($options) { this.$element.append($options); }; SelectAdapter.prototype.option = function (data) { var option; if (data.children) { option = document.createElement('optgroup'); option.label = data.text; } else { option = document.createElement('option'); if (option.textContent !== undefined) { option.textContent = data.text; } else { option.innerText = data.text; } } if (data.id !== undefined) { option.value = data.id; } if (data.disabled) { option.disabled = true; } if (data.selected) { option.selected = true; } if (data.title) { option.title = data.title; } var normalizedData = this._normalizeItem(data); normalizedData.element = option; // Override the option's data with the combined data Utils.StoreData(option, 'data', normalizedData); return $(option); }; SelectAdapter.prototype.item = function ($option) { var data = {}; data = Utils.GetData($option[0], 'data'); if (data != null) { return data; } var option = $option[0]; if (option.tagName.toLowerCase() === 'option') { data = { id: $option.val(), text: $option.text(), disabled: $option.prop('disabled'), selected: $option.prop('selected'), title: $option.prop('title') }; } else if (option.tagName.toLowerCase() === 'optgroup') { data = { text: $option.prop('label'), children: [], title: $option.prop('title') }; var $children = $option.children('option'); var children = []; for (var c = 0; c < $children.length; c++) { var $child = $($children[c]); var child = this.item($child); children.push(child); } data.children = children; } data = this._normalizeItem(data); data.element = $option[0]; Utils.StoreData($option[0], 'data', data); return data; }; SelectAdapter.prototype._normalizeItem = function (item) { if (item !== Object(item)) { item = { id: item, text: item }; } item = $.extend({}, { text: '' }, item); var defaults = { selected: false, disabled: false }; if (item.id != null) { item.id = item.id.toString(); } if (item.text != null) { item.text = item.text.toString(); } if (item._resultId == null && item.id && this.container != null) { item._resultId = this.generateResultId(this.container, item); } return $.extend({}, defaults, item); }; SelectAdapter.prototype.matches = function (params, data) { var matcher = this.options.get('matcher'); return matcher(params, data); }; return SelectAdapter; }); S2.define('select2/data/array',[ './select', '../utils', 'jquery' ], function (SelectAdapter, Utils, $) { function ArrayAdapter ($element, options) { this._dataToConvert = options.get('data') || []; ArrayAdapter.__super__.constructor.call(this, $element, options); } Utils.Extend(ArrayAdapter, SelectAdapter); ArrayAdapter.prototype.bind = function (container, $container) { ArrayAdapter.__super__.bind.call(this, container, $container); this.addOptions(this.convertToOptions(this._dataToConvert)); }; ArrayAdapter.prototype.select = function (data) { var $option = this.$element.find('option').filter(function (i, elm) { return elm.value == data.id.toString(); }); if ($option.length === 0) { $option = this.option(data); this.addOptions($option); } ArrayAdapter.__super__.select.call(this, data); }; ArrayAdapter.prototype.convertToOptions = function (data) { var self = this; var $existing = this.$element.find('option'); var existingIds = $existing.map(function () { return self.item($(this)).id; }).get(); var $options = []; // Filter out all items except for the one passed in the argument function onlyItem (item) { return function () { return $(this).val() == item.id; }; } for (var d = 0; d < data.length; d++) { var item = this._normalizeItem(data[d]); // Skip items which were pre-loaded, only merge the data if (existingIds.indexOf(item.id) >= 0) { var $existingOption = $existing.filter(onlyItem(item)); var existingData = this.item($existingOption); var newData = $.extend(true, {}, item, existingData); var $newOption = this.option(newData); $existingOption.replaceWith($newOption); continue; } var $option = this.option(item); if (item.children) { var $children = this.convertToOptions(item.children); $option.append($children); } $options.push($option); } return $options; }; return ArrayAdapter; }); S2.define('select2/data/ajax',[ './array', '../utils', 'jquery' ], function (ArrayAdapter, Utils, $) { function AjaxAdapter ($element, options) { this.ajaxOptions = this._applyDefaults(options.get('ajax')); if (this.ajaxOptions.processResults != null) { this.processResults = this.ajaxOptions.processResults; } AjaxAdapter.__super__.constructor.call(this, $element, options); } Utils.Extend(AjaxAdapter, ArrayAdapter); AjaxAdapter.prototype._applyDefaults = function (options) { var defaults = { data: function (params) { return $.extend({}, params, { q: params.term }); }, transport: function (params, success, failure) { var $request = $.ajax(params); $request.then(success); $request.fail(failure); return $request; } }; return $.extend({}, defaults, options, true); }; AjaxAdapter.prototype.processResults = function (results) { return results; }; AjaxAdapter.prototype.query = function (params, callback) { var matches = []; var self = this; if (this._request != null) { // JSONP requests cannot always be aborted if ($.isFunction(this._request.abort)) { this._request.abort(); } this._request = null; } var options = $.extend({ type: 'GET' }, this.ajaxOptions); if (typeof options.url === 'function') { options.url = options.url.call(this.$element, params); } if (typeof options.data === 'function') { options.data = options.data.call(this.$element, params); } function request () { var $request = options.transport(options, function (data) { var results = self.processResults(data, params); if (self.options.get('debug') && window.console && console.error) { // Check to make sure that the response included a `results` key. if (!results || !results.results || !Array.isArray(results.results)) { console.error( 'Select2: The AJAX results did not return an array in the ' + '`results` key of the response.' ); } } callback(results); }, function () { // Attempt to detect if a request was aborted // Only works if the transport exposes a status property if ('status' in $request && ($request.status === 0 || $request.status === '0')) { return; } self.trigger('results:message', { message: 'errorLoading' }); }); self._request = $request; } if (this.ajaxOptions.delay && params.term != null) { if (this._queryTimeout) { window.clearTimeout(this._queryTimeout); } this._queryTimeout = window.setTimeout(request, this.ajaxOptions.delay); } else { request(); } }; return AjaxAdapter; }); S2.define('select2/data/tags',[ 'jquery' ], function ($) { function Tags (decorated, $element, options) { var tags = options.get('tags'); var createTag = options.get('createTag'); if (createTag !== undefined) { this.createTag = createTag; } var insertTag = options.get('insertTag'); if (insertTag !== undefined) { this.insertTag = insertTag; } decorated.call(this, $element, options); if (Array.isArray(tags)) { for (var t = 0; t < tags.length; t++) { var tag = tags[t]; var item = this._normalizeItem(tag); var $option = this.option(item); this.$element.append($option); } } } Tags.prototype.query = function (decorated, params, callback) { var self = this; this._removeOldTags(); if (params.term == null || params.page != null) { decorated.call(this, params, callback); return; } function wrapper (obj, child) { var data = obj.results; for (var i = 0; i < data.length; i++) { var option = data[i]; var checkChildren = ( option.children != null && !wrapper({ results: option.children }, true) ); var optionText = (option.text || '').toUpperCase(); var paramsTerm = (params.term || '').toUpperCase(); var checkText = optionText === paramsTerm; if (checkText || checkChildren) { if (child) { return false; } obj.data = data; callback(obj); return; } } if (child) { return true; } var tag = self.createTag(params); if (tag != null) { var $option = self.option(tag); $option.attr('data-select2-tag', true); self.addOptions([$option]); self.insertTag(data, tag); } obj.results = data; callback(obj); } decorated.call(this, params, wrapper); }; Tags.prototype.createTag = function (decorated, params) { if (params.term == null) { return null; } var term = params.term.trim(); if (term === '') { return null; } return { id: term, text: term }; }; Tags.prototype.insertTag = function (_, data, tag) { data.unshift(tag); }; Tags.prototype._removeOldTags = function (_) { var $options = this.$element.find('option[data-select2-tag]'); $options.each(function () { if (this.selected) { return; } $(this).remove(); }); }; return Tags; }); S2.define('select2/data/tokenizer',[ 'jquery' ], function ($) { function Tokenizer (decorated, $element, options) { var tokenizer = options.get('tokenizer'); if (tokenizer !== undefined) { this.tokenizer = tokenizer; } decorated.call(this, $element, options); } Tokenizer.prototype.bind = function (decorated, container, $container) { decorated.call(this, container, $container); this.$search = container.dropdown.$search || container.selection.$search || $container.find('.select2-search__field'); }; Tokenizer.prototype.query = function (decorated, params, callback) { var self = this; function createAndSelect (data) { // Normalize the data object so we can use it for checks var item = self._normalizeItem(data); // Check if the data object already exists as a tag // Select it if it doesn't var $existingOptions = self.$element.find('option').filter(function () { return $(this).val() === item.id; }); // If an existing option wasn't found for it, create the option if (!$existingOptions.length) { var $option = self.option(item); $option.attr('data-select2-tag', true); self._removeOldTags(); self.addOptions([$option]); } // Select the item, now that we know there is an option for it select(item); } function select (data) { self.trigger('select', { data: data }); } params.term = params.term || ''; var tokenData = this.tokenizer(params, this.options, createAndSelect); if (tokenData.term !== params.term) { // Replace the search term if we have the search box if (this.$search.length) { this.$search.val(tokenData.term); this.$search.trigger('focus'); } params.term = tokenData.term; } decorated.call(this, params, callback); }; Tokenizer.prototype.tokenizer = function (_, params, options, callback) { var separators = options.get('tokenSeparators') || []; var term = params.term; var i = 0; var createTag = this.createTag || function (params) { return { id: params.term, text: params.term }; }; while (i < term.length) { var termChar = term[i]; if (separators.indexOf(termChar) === -1) { i++; continue; } var part = term.substr(0, i); var partParams = $.extend({}, params, { term: part }); var data = createTag(partParams); if (data == null) { i++; continue; } callback(data); // Reset the term to not include the tokenized portion term = term.substr(i + 1) || ''; i = 0; } return { term: term }; }; return Tokenizer; }); S2.define('select2/data/minimumInputLength',[ ], function () { function MinimumInputLength (decorated, $e, options) { this.minimumInputLength = options.get('minimumInputLength'); decorated.call(this, $e, options); } MinimumInputLength.prototype.query = function (decorated, params, callback) { params.term = params.term || ''; if (params.term.length < this.minimumInputLength) { this.trigger('results:message', { message: 'inputTooShort', args: { minimum: this.minimumInputLength, input: params.term, params: params } }); return; } decorated.call(this, params, callback); }; return MinimumInputLength; }); S2.define('select2/data/maximumInputLength',[ ], function () { function MaximumInputLength (decorated, $e, options) { this.maximumInputLength = options.get('maximumInputLength'); decorated.call(this, $e, options); } MaximumInputLength.prototype.query = function (decorated, params, callback) { params.term = params.term || ''; if (this.maximumInputLength > 0 && params.term.length > this.maximumInputLength) { this.trigger('results:message', { message: 'inputTooLong', args: { maximum: this.maximumInputLength, input: params.term, params: params } }); return; } decorated.call(this, params, callback); }; return MaximumInputLength; }); S2.define('select2/data/maximumSelectionLength',[ ], function (){ function MaximumSelectionLength (decorated, $e, options) { this.maximumSelectionLength = options.get('maximumSelectionLength'); decorated.call(this, $e, options); } MaximumSelectionLength.prototype.bind = function (decorated, container, $container) { var self = this; decorated.call(this, container, $container); container.on('select', function () { self._checkIfMaximumSelected(); }); }; MaximumSelectionLength.prototype.query = function (decorated, params, callback) { var self = this; this._checkIfMaximumSelected(function () { decorated.call(self, params, callback); }); }; MaximumSelectionLength.prototype._checkIfMaximumSelected = function (_, successCallback) { var self = this; this.current(function (currentData) { var count = currentData != null ? currentData.length : 0; if (self.maximumSelectionLength > 0 && count >= self.maximumSelectionLength) { self.trigger('results:message', { message: 'maximumSelected', args: { maximum: self.maximumSelectionLength } }); return; } if (successCallback) { successCallback(); } }); }; return MaximumSelectionLength; }); S2.define('select2/dropdown',[ 'jquery', './utils' ], function ($, Utils) { function Dropdown ($element, options) { this.$element = $element; this.options = options; Dropdown.__super__.constructor.call(this); } Utils.Extend(Dropdown, Utils.Observable); Dropdown.prototype.render = function () { var $dropdown = $( '<span class="select2-dropdown">' + '<span class="select2-results"></span>' + '</span>' ); $dropdown.attr('dir', this.options.get('dir')); this.$dropdown = $dropdown; return $dropdown; }; Dropdown.prototype.bind = function () { // Should be implemented in subclasses }; Dropdown.prototype.position = function ($dropdown, $container) { // Should be implemented in subclasses }; Dropdown.prototype.destroy = function () { // Remove the dropdown from the DOM this.$dropdown.remove(); }; return Dropdown; }); S2.define('select2/dropdown/search',[ 'jquery' ], function ($) { function Search () { } Search.prototype.render = function (decorated) { var $rendered = decorated.call(this); var $search = $( '<span class="select2-search select2-search--dropdown">' + '<input class="select2-search__field" type="search" tabindex="-1"' + ' autocorrect="off" autocapitalize="none"' + ' spellcheck="false" role="searchbox" aria-autocomplete="list" />' + '</span>' ); this.$searchContainer = $search; this.$search = $search.find('input'); this.$search.prop('autocomplete', this.options.get('autocomplete')); $rendered.prepend($search); return $rendered; }; Search.prototype.bind = function (decorated, container, $container) { var self = this; var resultsId = container.id + '-results'; decorated.call(this, container, $container); this.$search.on('keydown', function (evt) { self.trigger('keypress', evt); self._keyUpPrevented = evt.isDefaultPrevented(); }); // Workaround for browsers which do not support the `input` event // This will prevent double-triggering of events for browsers which support // both the `keyup` and `input` events. this.$search.on('input', function (evt) { // Unbind the duplicated `keyup` event $(this).off('keyup'); }); this.$search.on('keyup input', function (evt) { self.handleSearch(evt); }); container.on('open', function () { self.$search.attr('tabindex', 0); self.$search.attr('aria-controls', resultsId); self.$search.trigger('focus'); window.setTimeout(function () { self.$search.trigger('focus'); }, 0); }); container.on('close', function () { self.$search.attr('tabindex', -1); self.$search.removeAttr('aria-controls'); self.$search.removeAttr('aria-activedescendant'); self.$search.val(''); self.$search.trigger('blur'); }); container.on('focus', function () { if (!container.isOpen()) { self.$search.trigger('focus'); } }); container.on('results:all', function (params) { if (params.query.term == null || params.query.term === '') { var showSearch = self.showSearch(params); if (showSearch) { self.$searchContainer[0].classList.remove('select2-search--hide'); } else { self.$searchContainer[0].classList.add('select2-search--hide'); } } }); container.on('results:focus', function (params) { if (params.data._resultId) { self.$search.attr('aria-activedescendant', params.data._resultId); } else { self.$search.removeAttr('aria-activedescendant'); } }); }; Search.prototype.handleSearch = function (evt) { if (!this._keyUpPrevented) { var input = this.$search.val(); this.trigger('query', { term: input }); } this._keyUpPrevented = false; }; Search.prototype.showSearch = function (_, params) { return true; }; return Search; }); S2.define('select2/dropdown/hidePlaceholder',[ ], function () { function HidePlaceholder (decorated, $element, options, dataAdapter) { this.placeholder = this.normalizePlaceholder(options.get('placeholder')); decorated.call(this, $element, options, dataAdapter); } HidePlaceholder.prototype.append = function (decorated, data) { data.results = this.removePlaceholder(data.results); decorated.call(this, data); }; HidePlaceholder.prototype.normalizePlaceholder = function (_, placeholder) { if (typeof placeholder === 'string') { placeholder = { id: '', text: placeholder }; } return placeholder; }; HidePlaceholder.prototype.removePlaceholder = function (_, data) { var modifiedData = data.slice(0); for (var d = data.length - 1; d >= 0; d--) { var item = data[d]; if (this.placeholder.id === item.id) { modifiedData.splice(d, 1); } } return modifiedData; }; return HidePlaceholder; }); S2.define('select2/dropdown/infiniteScroll',[ 'jquery' ], function ($) { function InfiniteScroll (decorated, $element, options, dataAdapter) { this.lastParams = {}; decorated.call(this, $element, options, dataAdapter); this.$loadingMore = this.createLoadingMore(); this.loading = false; } InfiniteScroll.prototype.append = function (decorated, data) { this.$loadingMore.remove(); this.loading = false; decorated.call(this, data); if (this.showLoadingMore(data)) { this.$results.append(this.$loadingMore); this.loadMoreIfNeeded(); } }; InfiniteScroll.prototype.bind = function (decorated, container, $container) { var self = this; decorated.call(this, container, $container); container.on('query', function (params) { self.lastParams = params; self.loading = true; }); container.on('query:append', function (params) { self.lastParams = params; self.loading = true; }); this.$results.on('scroll', this.loadMoreIfNeeded.bind(this)); }; InfiniteScroll.prototype.loadMoreIfNeeded = function () { var isLoadMoreVisible = $.contains( document.documentElement, this.$loadingMore[0] ); if (this.loading || !isLoadMoreVisible) { return; } var currentOffset = this.$results.offset().top + this.$results.outerHeight(false); var loadingMoreOffset = this.$loadingMore.offset().top + this.$loadingMore.outerHeight(false); if (currentOffset + 50 >= loadingMoreOffset) { this.loadMore(); } }; InfiniteScroll.prototype.loadMore = function () { this.loading = true; var params = $.extend({}, {page: 1}, this.lastParams); params.page++; this.trigger('query:append', params); }; InfiniteScroll.prototype.showLoadingMore = function (_, data) { return data.pagination && data.pagination.more; }; InfiniteScroll.prototype.createLoadingMore = function () { var $option = $( '<li ' + 'class="select2-results__option select2-results__option--load-more"' + 'role="option" aria-disabled="true"></li>' ); var message = this.options.get('translations').get('loadingMore'); $option.html(message(this.lastParams)); return $option; }; return InfiniteScroll; }); S2.define('select2/dropdown/attachBody',[ 'jquery', '../utils' ], function ($, Utils) { function AttachBody (decorated, $element, options) { this.$dropdownParent = $(options.get('dropdownParent') || document.body); decorated.call(this, $element, options); } AttachBody.prototype.bind = function (decorated, container, $container) { var self = this; decorated.call(this, container, $container); container.on('open', function () { self._showDropdown(); self._attachPositioningHandler(container); // Must bind after the results handlers to ensure correct sizing self._bindContainerResultHandlers(container); }); container.on('close', function () { self._hideDropdown(); self._detachPositioningHandler(container); }); this.$dropdownContainer.on('mousedown', function (evt) { evt.stopPropagation(); }); }; AttachBody.prototype.destroy = function (decorated) { decorated.call(this); this.$dropdownContainer.remove(); }; AttachBody.prototype.position = function (decorated, $dropdown, $container) { // Clone all of the container classes $dropdown.attr('class', $container.attr('class')); $dropdown[0].classList.remove('select2'); $dropdown[0].classList.add('select2-container--open'); $dropdown.css({ position: 'absolute', top: -999999 }); this.$container = $container; }; AttachBody.prototype.render = function (decorated) { var $container = $('<span></span>'); var $dropdown = decorated.call(this); $container.append($dropdown); this.$dropdownContainer = $container; return $container; }; AttachBody.prototype._hideDropdown = function (decorated) { this.$dropdownContainer.detach(); }; AttachBody.prototype._bindContainerResultHandlers = function (decorated, container) { // These should only be bound once if (this._containerResultsHandlersBound) { return; } var self = this; container.on('results:all', function () { self._positionDropdown(); self._resizeDropdown(); }); container.on('results:append', function () { self._positionDropdown(); self._resizeDropdown(); }); container.on('results:message', function () { self._positionDropdown(); self._resizeDropdown(); }); container.on('select', function () { self._positionDropdown(); self._resizeDropdown(); }); container.on('unselect', function () { self._positionDropdown(); self._resizeDropdown(); }); this._containerResultsHandlersBound = true; }; AttachBody.prototype._attachPositioningHandler = function (decorated, container) { var self = this; var scrollEvent = 'scroll.select2.' + container.id; var resizeEvent = 'resize.select2.' + container.id; var orientationEvent = 'orientationchange.select2.' + container.id; var $watchers = this.$container.parents().filter(Utils.hasScroll); $watchers.each(function () { Utils.StoreData(this, 'select2-scroll-position', { x: $(this).scrollLeft(), y: $(this).scrollTop() }); }); $watchers.on(scrollEvent, function (ev) { var position = Utils.GetData(this, 'select2-scroll-position'); $(this).scrollTop(position.y); }); $(window).on(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent, function (e) { self._positionDropdown(); self._resizeDropdown(); }); }; AttachBody.prototype._detachPositioningHandler = function (decorated, container) { var scrollEvent = 'scroll.select2.' + container.id; var resizeEvent = 'resize.select2.' + container.id; var orientationEvent = 'orientationchange.select2.' + container.id; var $watchers = this.$container.parents().filter(Utils.hasScroll); $watchers.off(scrollEvent); $(window).off(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent); }; AttachBody.prototype._positionDropdown = function () { var $window = $(window); var isCurrentlyAbove = this.$dropdown[0].classList .contains('select2-dropdown--above'); var isCurrentlyBelow = this.$dropdown[0].classList .contains('select2-dropdown--below'); var newDirection = null; var offset = this.$container.offset(); offset.bottom = offset.top + this.$container.outerHeight(false); var container = { height: this.$container.outerHeight(false) }; container.top = offset.top; container.bottom = offset.top + container.height; var dropdown = { height: this.$dropdown.outerHeight(false) }; var viewport = { top: $window.scrollTop(), bottom: $window.scrollTop() + $window.height() }; var enoughRoomAbove = viewport.top < (offset.top - dropdown.height); var enoughRoomBelow = viewport.bottom > (offset.bottom + dropdown.height); var css = { left: offset.left, top: container.bottom }; // Determine what the parent element is to use for calculating the offset var $offsetParent = this.$dropdownParent; // For statically positioned elements, we need to get the element // that is determining the offset if ($offsetParent.css('position') === 'static') { $offsetParent = $offsetParent.offsetParent(); } var parentOffset = { top: 0, left: 0 }; if ( $.contains(document.body, $offsetParent[0]) || $offsetParent[0].isConnected ) { parentOffset = $offsetParent.offset(); } css.top -= parentOffset.top; css.left -= parentOffset.left; if (!isCurrentlyAbove && !isCurrentlyBelow) { newDirection = 'below'; } if (!enoughRoomBelow && enoughRoomAbove && !isCurrentlyAbove) { newDirection = 'above'; } else if (!enoughRoomAbove && enoughRoomBelow && isCurrentlyAbove) { newDirection = 'below'; } if (newDirection == 'above' || (isCurrentlyAbove && newDirection !== 'below')) { css.top = container.top - parentOffset.top - dropdown.height; } if (newDirection != null) { this.$dropdown[0].classList.remove('select2-dropdown--below'); this.$dropdown[0].classList.remove('select2-dropdown--above'); this.$dropdown[0].classList.add('select2-dropdown--' + newDirection); this.$container[0].classList.remove('select2-container--below'); this.$container[0].classList.remove('select2-container--above'); this.$container[0].classList.add('select2-container--' + newDirection); } this.$dropdownContainer.css(css); }; AttachBody.prototype._resizeDropdown = function () { var css = { width: this.$container.outerWidth(false) + 'px' }; if (this.options.get('dropdownAutoWidth')) { css.minWidth = css.width; css.position = 'relative'; css.width = 'auto'; } this.$dropdown.css(css); }; AttachBody.prototype._showDropdown = function (decorated) { this.$dropdownContainer.appendTo(this.$dropdownParent); this._positionDropdown(); this._resizeDropdown(); }; return AttachBody; }); S2.define('select2/dropdown/minimumResultsForSearch',[ ], function () { function countResults (data) { var count = 0; for (var d = 0; d < data.length; d++) { var item = data[d]; if (item.children) { count += countResults(item.children); } else { count++; } } return count; } function MinimumResultsForSearch (decorated, $element, options, dataAdapter) { this.minimumResultsForSearch = options.get('minimumResultsForSearch'); if (this.minimumResultsForSearch < 0) { this.minimumResultsForSearch = Infinity; } decorated.call(this, $element, options, dataAdapter); } MinimumResultsForSearch.prototype.showSearch = function (decorated, params) { if (countResults(params.data.results) < this.minimumResultsForSearch) { return false; } return decorated.call(this, params); }; return MinimumResultsForSearch; }); S2.define('select2/dropdown/selectOnClose',[ '../utils' ], function (Utils) { function SelectOnClose () { } SelectOnClose.prototype.bind = function (decorated, container, $container) { var self = this; decorated.call(this, container, $container); container.on('close', function (params) { self._handleSelectOnClose(params); }); }; SelectOnClose.prototype._handleSelectOnClose = function (_, params) { if (params && params.originalSelect2Event != null) { var event = params.originalSelect2Event; // Don't select an item if the close event was triggered from a select or // unselect event if (event._type === 'select' || event._type === 'unselect') { return; } } var $highlightedResults = this.getHighlightedResults(); // Only select highlighted results if ($highlightedResults.length < 1) { return; } var data = Utils.GetData($highlightedResults[0], 'data'); // Don't re-select already selected resulte if ( (data.element != null && data.element.selected) || (data.element == null && data.selected) ) { return; } this.trigger('select', { data: data }); }; return SelectOnClose; }); S2.define('select2/dropdown/closeOnSelect',[ ], function () { function CloseOnSelect () { } CloseOnSelect.prototype.bind = function (decorated, container, $container) { var self = this; decorated.call(this, container, $container); container.on('select', function (evt) { self._selectTriggered(evt); }); container.on('unselect', function (evt) { self._selectTriggered(evt); }); }; CloseOnSelect.prototype._selectTriggered = function (_, evt) { var originalEvent = evt.originalEvent; // Don't close if the control key is being held if (originalEvent && (originalEvent.ctrlKey || originalEvent.metaKey)) { return; } this.trigger('close', { originalEvent: originalEvent, originalSelect2Event: evt }); }; return CloseOnSelect; }); S2.define('select2/dropdown/dropdownCss',[ '../utils' ], function (Utils) { function DropdownCSS () { } DropdownCSS.prototype.render = function (decorated) { var $dropdown = decorated.call(this); var dropdownCssClass = this.options.get('dropdownCssClass') || ''; if (dropdownCssClass.indexOf(':all:') !== -1) { dropdownCssClass = dropdownCssClass.replace(':all:', ''); Utils.copyNonInternalCssClasses($dropdown[0], this.$element[0]); } $dropdown.addClass(dropdownCssClass); return $dropdown; }; return DropdownCSS; }); S2.define('select2/i18n/en',[],function () { // English return { errorLoading: function () { return 'The results could not be loaded.'; }, inputTooLong: function (args) { var overChars = args.input.length - args.maximum; var message = 'Please delete ' + overChars + ' character'; if (overChars != 1) { message += 's'; } return message; }, inputTooShort: function (args) { var remainingChars = args.minimum - args.input.length; var message = 'Please enter ' + remainingChars + ' or more characters'; return message; }, loadingMore: function () { return 'Loading more results…'; }, maximumSelected: function (args) { var message = 'You can only select ' + args.maximum + ' item'; if (args.maximum != 1) { message += 's'; } return message; }, noResults: function () { return 'No results found'; }, searching: function () { return 'Searching…'; }, removeAllItems: function () { return 'Remove all items'; }, removeItem: function () { return 'Remove item'; } }; }); S2.define('select2/defaults',[ 'jquery', './results', './selection/single', './selection/multiple', './selection/placeholder', './selection/allowClear', './selection/search', './selection/selectionCss', './selection/eventRelay', './utils', './translation', './diacritics', './data/select', './data/array', './data/ajax', './data/tags', './data/tokenizer', './data/minimumInputLength', './data/maximumInputLength', './data/maximumSelectionLength', './dropdown', './dropdown/search', './dropdown/hidePlaceholder', './dropdown/infiniteScroll', './dropdown/attachBody', './dropdown/minimumResultsForSearch', './dropdown/selectOnClose', './dropdown/closeOnSelect', './dropdown/dropdownCss', './i18n/en' ], function ($, ResultsList, SingleSelection, MultipleSelection, Placeholder, AllowClear, SelectionSearch, SelectionCSS, EventRelay, Utils, Translation, DIACRITICS, SelectData, ArrayData, AjaxData, Tags, Tokenizer, MinimumInputLength, MaximumInputLength, MaximumSelectionLength, Dropdown, DropdownSearch, HidePlaceholder, InfiniteScroll, AttachBody, MinimumResultsForSearch, SelectOnClose, CloseOnSelect, DropdownCSS, EnglishTranslation) { function Defaults () { this.reset(); } Defaults.prototype.apply = function (options) { options = $.extend(true, {}, this.defaults, options); if (options.dataAdapter == null) { if (options.ajax != null) { options.dataAdapter = AjaxData; } else if (options.data != null) { options.dataAdapter = ArrayData; } else { options.dataAdapter = SelectData; } if (options.minimumInputLength > 0) { options.dataAdapter = Utils.Decorate( options.dataAdapter, MinimumInputLength ); } if (options.maximumInputLength > 0) { options.dataAdapter = Utils.Decorate( options.dataAdapter, MaximumInputLength ); } if (options.maximumSelectionLength > 0) { options.dataAdapter = Utils.Decorate( options.dataAdapter, MaximumSelectionLength ); } if (options.tags) { options.dataAdapter = Utils.Decorate(options.dataAdapter, Tags); } if (options.tokenSeparators != null || options.tokenizer != null) { options.dataAdapter = Utils.Decorate( options.dataAdapter, Tokenizer ); } } if (options.resultsAdapter == null) { options.resultsAdapter = ResultsList; if (options.ajax != null) { options.resultsAdapter = Utils.Decorate( options.resultsAdapter, InfiniteScroll ); } if (options.placeholder != null) { options.resultsAdapter = Utils.Decorate( options.resultsAdapter, HidePlaceholder ); } if (options.selectOnClose) { options.resultsAdapter = Utils.Decorate( options.resultsAdapter, SelectOnClose ); } } if (options.dropdownAdapter == null) { if (options.multiple) { options.dropdownAdapter = Dropdown; } else { var SearchableDropdown = Utils.Decorate(Dropdown, DropdownSearch); options.dropdownAdapter = SearchableDropdown; } if (options.minimumResultsForSearch !== 0) { options.dropdownAdapter = Utils.Decorate( options.dropdownAdapter, MinimumResultsForSearch ); } if (options.closeOnSelect) { options.dropdownAdapter = Utils.Decorate( options.dropdownAdapter, CloseOnSelect ); } if (options.dropdownCssClass != null) { options.dropdownAdapter = Utils.Decorate( options.dropdownAdapter, DropdownCSS ); } options.dropdownAdapter = Utils.Decorate( options.dropdownAdapter, AttachBody ); } if (options.selectionAdapter == null) { if (options.multiple) { options.selectionAdapter = MultipleSelection; } else { options.selectionAdapter = SingleSelection; } // Add the placeholder mixin if a placeholder was specified if (options.placeholder != null) { options.selectionAdapter = Utils.Decorate( options.selectionAdapter, Placeholder ); } if (options.allowClear) { options.selectionAdapter = Utils.Decorate( options.selectionAdapter, AllowClear ); } if (options.multiple) { options.selectionAdapter = Utils.Decorate( options.selectionAdapter, SelectionSearch ); } if (options.selectionCssClass != null) { options.selectionAdapter = Utils.Decorate( options.selectionAdapter, SelectionCSS ); } options.selectionAdapter = Utils.Decorate( options.selectionAdapter, EventRelay ); } // If the defaults were not previously applied from an element, it is // possible for the language option to have not been resolved options.language = this._resolveLanguage(options.language); // Always fall back to English since it will always be complete options.language.push('en'); var uniqueLanguages = []; for (var l = 0; l < options.language.length; l++) { var language = options.language[l]; if (uniqueLanguages.indexOf(language) === -1) { uniqueLanguages.push(language); } } options.language = uniqueLanguages; options.translations = this._processTranslations( options.language, options.debug ); return options; }; Defaults.prototype.reset = function () { function stripDiacritics (text) { // Used 'uni range + named function' from http://jsperf.com/diacritics/18 function match(a) { return DIACRITICS[a] || a; } return text.replace(/[^\u0000-\u007E]/g, match); } function matcher (params, data) { // Always return the object if there is nothing to compare if (params.term == null || params.term.trim() === '') { return data; } // Do a recursive check for options with children if (data.children && data.children.length > 0) { // Clone the data object if there are children // This is required as we modify the object to remove any non-matches var match = $.extend(true, {}, data); // Check each child of the option for (var c = data.children.length - 1; c >= 0; c--) { var child = data.children[c]; var matches = matcher(params, child); // If there wasn't a match, remove the object in the array if (matches == null) { match.children.splice(c, 1); } } // If any children matched, return the new object if (match.children.length > 0) { return match; } // If there were no matching children, check just the plain object return matcher(params, match); } var original = stripDiacritics(data.text).toUpperCase(); var term = stripDiacritics(params.term).toUpperCase(); // Check if the text contains the term if (original.indexOf(term) > -1) { return data; } // If it doesn't contain the term, don't return anything return null; } this.defaults = { amdLanguageBase: './i18n/', autocomplete: 'off', closeOnSelect: true, debug: false, dropdownAutoWidth: false, escapeMarkup: Utils.escapeMarkup, language: {}, matcher: matcher, minimumInputLength: 0, maximumInputLength: 0, maximumSelectionLength: 0, minimumResultsForSearch: 0, selectOnClose: false, scrollAfterSelect: false, sorter: function (data) { return data; }, templateResult: function (result) { return result.text; }, templateSelection: function (selection) { return selection.text; }, theme: 'default', width: 'resolve' }; }; Defaults.prototype.applyFromElement = function (options, $element) { var optionLanguage = options.language; var defaultLanguage = this.defaults.language; var elementLanguage = $element.prop('lang'); var parentLanguage = $element.closest('[lang]').prop('lang'); var languages = Array.prototype.concat.call( this._resolveLanguage(elementLanguage), this._resolveLanguage(optionLanguage), this._resolveLanguage(defaultLanguage), this._resolveLanguage(parentLanguage) ); options.language = languages; return options; }; Defaults.prototype._resolveLanguage = function (language) { if (!language) { return []; } if ($.isEmptyObject(language)) { return []; } if ($.isPlainObject(language)) { return [language]; } var languages; if (!Array.isArray(language)) { languages = [language]; } else { languages = language; } var resolvedLanguages = []; for (var l = 0; l < languages.length; l++) { resolvedLanguages.push(languages[l]); if (typeof languages[l] === 'string' && languages[l].indexOf('-') > 0) { // Extract the region information if it is included var languageParts = languages[l].split('-'); var baseLanguage = languageParts[0]; resolvedLanguages.push(baseLanguage); } } return resolvedLanguages; }; Defaults.prototype._processTranslations = function (languages, debug) { var translations = new Translation(); for (var l = 0; l < languages.length; l++) { var languageData = new Translation(); var language = languages[l]; if (typeof language === 'string') { try { // Try to load it with the original name languageData = Translation.loadPath(language); } catch (e) { try { // If we couldn't load it, check if it wasn't the full path language = this.defaults.amdLanguageBase + language; languageData = Translation.loadPath(language); } catch (ex) { // The translation could not be loaded at all. Sometimes this is // because of a configuration problem, other times this can be // because of how Select2 helps load all possible translation files if (debug && window.console && console.warn) { console.warn( 'Select2: The language file for "' + language + '" could ' + 'not be automatically loaded. A fallback will be used instead.' ); } } } } else if ($.isPlainObject(language)) { languageData = new Translation(language); } else { languageData = language; } translations.extend(languageData); } return translations; }; Defaults.prototype.set = function (key, value) { var camelKey = $.camelCase(key); var data = {}; data[camelKey] = value; var convertedData = Utils._convertData(data); $.extend(true, this.defaults, convertedData); }; var defaults = new Defaults(); return defaults; }); S2.define('select2/options',[ 'jquery', './defaults', './utils' ], function ($, Defaults, Utils) { function Options (options, $element) { this.options = options; if ($element != null) { this.fromElement($element); } if ($element != null) { this.options = Defaults.applyFromElement(this.options, $element); } this.options = Defaults.apply(this.options); } Options.prototype.fromElement = function ($e) { var excludedData = ['select2']; if (this.options.multiple == null) { this.options.multiple = $e.prop('multiple'); } if (this.options.disabled == null) { this.options.disabled = $e.prop('disabled'); } if (this.options.autocomplete == null && $e.prop('autocomplete')) { this.options.autocomplete = $e.prop('autocomplete'); } if (this.options.dir == null) { if ($e.prop('dir')) { this.options.dir = $e.prop('dir'); } else if ($e.closest('[dir]').prop('dir')) { this.options.dir = $e.closest('[dir]').prop('dir'); } else { this.options.dir = 'ltr'; } } $e.prop('disabled', this.options.disabled); $e.prop('multiple', this.options.multiple); if (Utils.GetData($e[0], 'select2Tags')) { if (this.options.debug && window.console && console.warn) { console.warn( 'Select2: The `data-select2-tags` attribute has been changed to ' + 'use the `data-data` and `data-tags="true"` attributes and will be ' + 'removed in future versions of Select2.' ); } Utils.StoreData($e[0], 'data', Utils.GetData($e[0], 'select2Tags')); Utils.StoreData($e[0], 'tags', true); } if (Utils.GetData($e[0], 'ajaxUrl')) { if (this.options.debug && window.console && console.warn) { console.warn( 'Select2: The `data-ajax-url` attribute has been changed to ' + '`data-ajax--url` and support for the old attribute will be removed' + ' in future versions of Select2.' ); } $e.attr('ajax--url', Utils.GetData($e[0], 'ajaxUrl')); Utils.StoreData($e[0], 'ajax-Url', Utils.GetData($e[0], 'ajaxUrl')); } var dataset = {}; function upperCaseLetter(_, letter) { return letter.toUpperCase(); } // Pre-load all of the attributes which are prefixed with `data-` for (var attr = 0; attr < $e[0].attributes.length; attr++) { var attributeName = $e[0].attributes[attr].name; var prefix = 'data-'; if (attributeName.substr(0, prefix.length) == prefix) { // Get the contents of the attribute after `data-` var dataName = attributeName.substring(prefix.length); // Get the data contents from the consistent source // This is more than likely the jQuery data helper var dataValue = Utils.GetData($e[0], dataName); // camelCase the attribute name to match the spec var camelDataName = dataName.replace(/-([a-z])/g, upperCaseLetter); // Store the data attribute contents into the dataset since dataset[camelDataName] = dataValue; } } // Prefer the element's `dataset` attribute if it exists // jQuery 1.x does not correctly handle data attributes with multiple dashes if ($.fn.jquery && $.fn.jquery.substr(0, 2) == '1.' && $e[0].dataset) { dataset = $.extend(true, {}, $e[0].dataset, dataset); } // Prefer our internal data cache if it exists var data = $.extend(true, {}, Utils.GetData($e[0]), dataset); data = Utils._convertData(data); for (var key in data) { if (excludedData.indexOf(key) > -1) { continue; } if ($.isPlainObject(this.options[key])) { $.extend(this.options[key], data[key]); } else { this.options[key] = data[key]; } } return this; }; Options.prototype.get = function (key) { return this.options[key]; }; Options.prototype.set = function (key, val) { this.options[key] = val; }; return Options; }); S2.define('select2/core',[ 'jquery', './options', './utils', './keys' ], function ($, Options, Utils, KEYS) { var Select2 = function ($element, options) { if (Utils.GetData($element[0], 'select2') != null) { Utils.GetData($element[0], 'select2').destroy(); } this.$element = $element; this.id = this._generateId($element); options = options || {}; this.options = new Options(options, $element); Select2.__super__.constructor.call(this); // Set up the tabindex var tabindex = $element.attr('tabindex') || 0; Utils.StoreData($element[0], 'old-tabindex', tabindex); $element.attr('tabindex', '-1'); // Set up containers and adapters var DataAdapter = this.options.get('dataAdapter'); this.dataAdapter = new DataAdapter($element, this.options); var $container = this.render(); this._placeContainer($container); var SelectionAdapter = this.options.get('selectionAdapter'); this.selection = new SelectionAdapter($element, this.options); this.$selection = this.selection.render(); this.selection.position(this.$selection, $container); var DropdownAdapter = this.options.get('dropdownAdapter'); this.dropdown = new DropdownAdapter($element, this.options); this.$dropdown = this.dropdown.render(); this.dropdown.position(this.$dropdown, $container); var ResultsAdapter = this.options.get('resultsAdapter'); this.results = new ResultsAdapter($element, this.options, this.dataAdapter); this.$results = this.results.render(); this.results.position(this.$results, this.$dropdown); // Bind events var self = this; // Bind the container to all of the adapters this._bindAdapters(); // Register any DOM event handlers this._registerDomEvents(); // Register any internal event handlers this._registerDataEvents(); this._registerSelectionEvents(); this._registerDropdownEvents(); this._registerResultsEvents(); this._registerEvents(); // Set the initial state this.dataAdapter.current(function (initialData) { self.trigger('selection:update', { data: initialData }); }); // Hide the original select $element[0].classList.add('select2-hidden-accessible'); $element.attr('aria-hidden', 'true'); // Synchronize any monitored attributes this._syncAttributes(); Utils.StoreData($element[0], 'select2', this); // Ensure backwards compatibility with $element.data('select2'). $element.data('select2', this); }; Utils.Extend(Select2, Utils.Observable); Select2.prototype._generateId = function ($element) { var id = ''; if ($element.attr('id') != null) { id = $element.attr('id'); } else if ($element.attr('name') != null) { id = $element.attr('name') + '-' + Utils.generateChars(2); } else { id = Utils.generateChars(4); } id = id.replace(/(:|\.|\[|\]|,)/g, ''); id = 'select2-' + id; return id; }; Select2.prototype._placeContainer = function ($container) { $container.insertAfter(this.$element); var width = this._resolveWidth(this.$element, this.options.get('width')); if (width != null) { $container.css('width', width); } }; Select2.prototype._resolveWidth = function ($element, method) { var WIDTH = /^width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i; if (method == 'resolve') { var styleWidth = this._resolveWidth($element, 'style'); if (styleWidth != null) { return styleWidth; } return this._resolveWidth($element, 'element'); } if (method == 'element') { var elementWidth = $element.outerWidth(false); if (elementWidth <= 0) { return 'auto'; } return elementWidth + 'px'; } if (method == 'style') { var style = $element.attr('style'); if (typeof(style) !== 'string') { return null; } var attrs = style.split(';'); for (var i = 0, l = attrs.length; i < l; i = i + 1) { var attr = attrs[i].replace(/\s/g, ''); var matches = attr.match(WIDTH); if (matches !== null && matches.length >= 1) { return matches[1]; } } return null; } if (method == 'computedstyle') { var computedStyle = window.getComputedStyle($element[0]); return computedStyle.width; } return method; }; Select2.prototype._bindAdapters = function () { this.dataAdapter.bind(this, this.$container); this.selection.bind(this, this.$container); this.dropdown.bind(this, this.$container); this.results.bind(this, this.$container); }; Select2.prototype._registerDomEvents = function () { var self = this; this.$element.on('change.select2', function () { self.dataAdapter.current(function (data) { self.trigger('selection:update', { data: data }); }); }); this.$element.on('focus.select2', function (evt) { self.trigger('focus', evt); }); this._syncA = Utils.bind(this._syncAttributes, this); this._syncS = Utils.bind(this._syncSubtree, this); this._observer = new window.MutationObserver(function (mutations) { self._syncA(); self._syncS(mutations); }); this._observer.observe(this.$element[0], { attributes: true, childList: true, subtree: false }); }; Select2.prototype._registerDataEvents = function () { var self = this; this.dataAdapter.on('*', function (name, params) { self.trigger(name, params); }); }; Select2.prototype._registerSelectionEvents = function () { var self = this; var nonRelayEvents = ['toggle', 'focus']; this.selection.on('toggle', function () { self.toggleDropdown(); }); this.selection.on('focus', function (params) { self.focus(params); }); this.selection.on('*', function (name, params) { if (nonRelayEvents.indexOf(name) !== -1) { return; } self.trigger(name, params); }); }; Select2.prototype._registerDropdownEvents = function () { var self = this; this.dropdown.on('*', function (name, params) { self.trigger(name, params); }); }; Select2.prototype._registerResultsEvents = function () { var self = this; this.results.on('*', function (name, params) { self.trigger(name, params); }); }; Select2.prototype._registerEvents = function () { var self = this; this.on('open', function () { self.$container[0].classList.add('select2-container--open'); }); this.on('close', function () { self.$container[0].classList.remove('select2-container--open'); }); this.on('enable', function () { self.$container[0].classList.remove('select2-container--disabled'); }); this.on('disable', function () { self.$container[0].classList.add('select2-container--disabled'); }); this.on('blur', function () { self.$container[0].classList.remove('select2-container--focus'); }); this.on('query', function (params) { if (!self.isOpen()) { self.trigger('open', {}); } this.dataAdapter.query(params, function (data) { self.trigger('results:all', { data: data, query: params }); }); }); this.on('query:append', function (params) { this.dataAdapter.query(params, function (data) { self.trigger('results:append', { data: data, query: params }); }); }); this.on('keypress', function (evt) { var key = evt.which; if (self.isOpen()) { if (key === KEYS.ESC || key === KEYS.TAB || (key === KEYS.UP && evt.altKey)) { self.close(evt); evt.preventDefault(); } else if (key === KEYS.ENTER) { self.trigger('results:select', {}); evt.preventDefault(); } else if ((key === KEYS.SPACE && evt.ctrlKey)) { self.trigger('results:toggle', {}); evt.preventDefault(); } else if (key === KEYS.UP) { self.trigger('results:previous', {}); evt.preventDefault(); } else if (key === KEYS.DOWN) { self.trigger('results:next', {}); evt.preventDefault(); } } else { if (key === KEYS.ENTER || key === KEYS.SPACE || (key === KEYS.DOWN && evt.altKey)) { self.open(); evt.preventDefault(); } } }); }; Select2.prototype._syncAttributes = function () { this.options.set('disabled', this.$element.prop('disabled')); if (this.isDisabled()) { if (this.isOpen()) { this.close(); } this.trigger('disable', {}); } else { this.trigger('enable', {}); } }; Select2.prototype._isChangeMutation = function (mutations) { var self = this; if (mutations.addedNodes && mutations.addedNodes.length > 0) { for (var n = 0; n < mutations.addedNodes.length; n++) { var node = mutations.addedNodes[n]; if (node.selected) { return true; } } } else if (mutations.removedNodes && mutations.removedNodes.length > 0) { return true; } else if (Array.isArray(mutations)) { return mutations.some(function (mutation) { return self._isChangeMutation(mutation); }); } return false; }; Select2.prototype._syncSubtree = function (mutations) { var changed = this._isChangeMutation(mutations); var self = this; // Only re-pull the data if we think there is a change if (changed) { this.dataAdapter.current(function (currentData) { self.trigger('selection:update', { data: currentData }); }); } }; /** * Override the trigger method to automatically trigger pre-events when * there are events that can be prevented. */ Select2.prototype.trigger = function (name, args) { var actualTrigger = Select2.__super__.trigger; var preTriggerMap = { 'open': 'opening', 'close': 'closing', 'select': 'selecting', 'unselect': 'unselecting', 'clear': 'clearing' }; if (args === undefined) { args = {}; } if (name in preTriggerMap) { var preTriggerName = preTriggerMap[name]; var preTriggerArgs = { prevented: false, name: name, args: args }; actualTrigger.call(this, preTriggerName, preTriggerArgs); if (preTriggerArgs.prevented) { args.prevented = true; return; } } actualTrigger.call(this, name, args); }; Select2.prototype.toggleDropdown = function () { if (this.isDisabled()) { return; } if (this.isOpen()) { this.close(); } else { this.open(); } }; Select2.prototype.open = function () { if (this.isOpen()) { return; } if (this.isDisabled()) { return; } this.trigger('query', {}); }; Select2.prototype.close = function (evt) { if (!this.isOpen()) { return; } this.trigger('close', { originalEvent : evt }); }; /** * Helper method to abstract the "enabled" (not "disabled") state of this * object. * * @return {true} if the instance is not disabled. * @return {false} if the instance is disabled. */ Select2.prototype.isEnabled = function () { return !this.isDisabled(); }; /** * Helper method to abstract the "disabled" state of this object. * * @return {true} if the disabled option is true. * @return {false} if the disabled option is false. */ Select2.prototype.isDisabled = function () { return this.options.get('disabled'); }; Select2.prototype.isOpen = function () { return this.$container[0].classList.contains('select2-container--open'); }; Select2.prototype.hasFocus = function () { return this.$container[0].classList.contains('select2-container--focus'); }; Select2.prototype.focus = function (data) { // No need to re-trigger focus events if we are already focused if (this.hasFocus()) { return; } this.$container[0].classList.add('select2-container--focus'); this.trigger('focus', {}); }; Select2.prototype.enable = function (args) { if (this.options.get('debug') && window.console && console.warn) { console.warn( 'Select2: The `select2("enable")` method has been deprecated and will' + ' be removed in later Select2 versions. Use $element.prop("disabled")' + ' instead.' ); } if (args == null || args.length === 0) { args = [true]; } var disabled = !args[0]; this.$element.prop('disabled', disabled); }; Select2.prototype.data = function () { if (this.options.get('debug') && arguments.length > 0 && window.console && console.warn) { console.warn( 'Select2: Data can no longer be set using `select2("data")`. You ' + 'should consider setting the value instead using `$element.val()`.' ); } var data = []; this.dataAdapter.current(function (currentData) { data = currentData; }); return data; }; Select2.prototype.val = function (args) { if (this.options.get('debug') && window.console && console.warn) { console.warn( 'Select2: The `select2("val")` method has been deprecated and will be' + ' removed in later Select2 versions. Use $element.val() instead.' ); } if (args == null || args.length === 0) { return this.$element.val(); } var newVal = args[0]; if (Array.isArray(newVal)) { newVal = newVal.map(function (obj) { return obj.toString(); }); } this.$element.val(newVal).trigger('input').trigger('change'); }; Select2.prototype.destroy = function () { this.$container.remove(); this._observer.disconnect(); this._observer = null; this._syncA = null; this._syncS = null; this.$element.off('.select2'); this.$element.attr('tabindex', Utils.GetData(this.$element[0], 'old-tabindex')); this.$element[0].classList.remove('select2-hidden-accessible'); this.$element.attr('aria-hidden', 'false'); Utils.RemoveData(this.$element[0]); this.$element.removeData('select2'); this.dataAdapter.destroy(); this.selection.destroy(); this.dropdown.destroy(); this.results.destroy(); this.dataAdapter = null; this.selection = null; this.dropdown = null; this.results = null; }; Select2.prototype.render = function () { var $container = $( '<span class="select2 select2-container">' + '<span class="selection"></span>' + '<span class="dropdown-wrapper" aria-hidden="true"></span>' + '</span>' ); $container.attr('dir', this.options.get('dir')); this.$container = $container; this.$container[0].classList .add('select2-container--' + this.options.get('theme')); Utils.StoreData($container[0], 'element', this.$element); return $container; }; return Select2; }); S2.define('select2/dropdown/attachContainer',[ ], function () { function AttachContainer (decorated, $element, options) { decorated.call(this, $element, options); } AttachContainer.prototype.position = function (decorated, $dropdown, $container) { var $dropdownContainer = $container.find('.dropdown-wrapper'); $dropdownContainer.append($dropdown); $dropdown[0].classList.add('select2-dropdown--below'); $container[0].classList.add('select2-container--below'); }; return AttachContainer; }); S2.define('select2/dropdown/stopPropagation',[ ], function () { function StopPropagation () { } StopPropagation.prototype.bind = function (decorated, container, $container) { decorated.call(this, container, $container); var stoppedEvents = [ 'blur', 'change', 'click', 'dblclick', 'focus', 'focusin', 'focusout', 'input', 'keydown', 'keyup', 'keypress', 'mousedown', 'mouseenter', 'mouseleave', 'mousemove', 'mouseover', 'mouseup', 'search', 'touchend', 'touchstart' ]; this.$dropdown.on(stoppedEvents.join(' '), function (evt) { evt.stopPropagation(); }); }; return StopPropagation; }); S2.define('select2/selection/stopPropagation',[ ], function () { function StopPropagation () { } StopPropagation.prototype.bind = function (decorated, container, $container) { decorated.call(this, container, $container); var stoppedEvents = [ 'blur', 'change', 'click', 'dblclick', 'focus', 'focusin', 'focusout', 'input', 'keydown', 'keyup', 'keypress', 'mousedown', 'mouseenter', 'mouseleave', 'mousemove', 'mouseover', 'mouseup', 'search', 'touchend', 'touchstart' ]; this.$selection.on(stoppedEvents.join(' '), function (evt) { evt.stopPropagation(); }); }; return StopPropagation; }); /*! * jQuery Mousewheel 3.1.13 * * Copyright jQuery Foundation and other contributors * Released under the MIT license * http://jquery.org/license */ (function (factory) { if ( typeof S2.define === 'function' && S2.define.amd ) { // AMD. Register as an anonymous module. S2.define('jquery-mousewheel',['jquery'], factory); } else if (typeof exports === 'object') { // Node/CommonJS style for Browserify module.exports = factory; } else { // Browser globals factory(jQuery); } }(function ($) { var toFix = ['wheel', 'mousewheel', 'DOMMouseScroll', 'MozMousePixelScroll'], toBind = ( 'onwheel' in document || document.documentMode >= 9 ) ? ['wheel'] : ['mousewheel', 'DomMouseScroll', 'MozMousePixelScroll'], slice = Array.prototype.slice, nullLowestDeltaTimeout, lowestDelta; if ( $.event.fixHooks ) { for ( var i = toFix.length; i; ) { $.event.fixHooks[ toFix[--i] ] = $.event.mouseHooks; } } var special = $.event.special.mousewheel = { version: '3.1.12', setup: function() { if ( this.addEventListener ) { for ( var i = toBind.length; i; ) { this.addEventListener( toBind[--i], handler, false ); } } else { this.onmousewheel = handler; } // Store the line height and page height for this particular element $.data(this, 'mousewheel-line-height', special.getLineHeight(this)); $.data(this, 'mousewheel-page-height', special.getPageHeight(this)); }, teardown: function() { if ( this.removeEventListener ) { for ( var i = toBind.length; i; ) { this.removeEventListener( toBind[--i], handler, false ); } } else { this.onmousewheel = null; } // Clean up the data we added to the element $.removeData(this, 'mousewheel-line-height'); $.removeData(this, 'mousewheel-page-height'); }, getLineHeight: function(elem) { var $elem = $(elem), $parent = $elem['offsetParent' in $.fn ? 'offsetParent' : 'parent'](); if (!$parent.length) { $parent = $('body'); } return parseInt($parent.css('fontSize'), 10) || parseInt($elem.css('fontSize'), 10) || 16; }, getPageHeight: function(elem) { return $(elem).height(); }, settings: { adjustOldDeltas: true, // see shouldAdjustOldDeltas() below normalizeOffset: true // calls getBoundingClientRect for each event } }; $.fn.extend({ mousewheel: function(fn) { return fn ? this.bind('mousewheel', fn) : this.trigger('mousewheel'); }, unmousewheel: function(fn) { return this.unbind('mousewheel', fn); } }); function handler(event) { var orgEvent = event || window.event, args = slice.call(arguments, 1), delta = 0, deltaX = 0, deltaY = 0, absDelta = 0, offsetX = 0, offsetY = 0; event = $.event.fix(orgEvent); event.type = 'mousewheel'; // Old school scrollwheel delta if ( 'detail' in orgEvent ) { deltaY = orgEvent.detail * -1; } if ( 'wheelDelta' in orgEvent ) { deltaY = orgEvent.wheelDelta; } if ( 'wheelDeltaY' in orgEvent ) { deltaY = orgEvent.wheelDeltaY; } if ( 'wheelDeltaX' in orgEvent ) { deltaX = orgEvent.wheelDeltaX * -1; } // Firefox < 17 horizontal scrolling related to DOMMouseScroll event if ( 'axis' in orgEvent && orgEvent.axis === orgEvent.HORIZONTAL_AXIS ) { deltaX = deltaY * -1; deltaY = 0; } // Set delta to be deltaY or deltaX if deltaY is 0 for backwards compatabilitiy delta = deltaY === 0 ? deltaX : deltaY; // New school wheel delta (wheel event) if ( 'deltaY' in orgEvent ) { deltaY = orgEvent.deltaY * -1; delta = deltaY; } if ( 'deltaX' in orgEvent ) { deltaX = orgEvent.deltaX; if ( deltaY === 0 ) { delta = deltaX * -1; } } // No change actually happened, no reason to go any further if ( deltaY === 0 && deltaX === 0 ) { return; } // Need to convert lines and pages to pixels if we aren't already in pixels // There are three delta modes: // * deltaMode 0 is by pixels, nothing to do // * deltaMode 1 is by lines // * deltaMode 2 is by pages if ( orgEvent.deltaMode === 1 ) { var lineHeight = $.data(this, 'mousewheel-line-height'); delta *= lineHeight; deltaY *= lineHeight; deltaX *= lineHeight; } else if ( orgEvent.deltaMode === 2 ) { var pageHeight = $.data(this, 'mousewheel-page-height'); delta *= pageHeight; deltaY *= pageHeight; deltaX *= pageHeight; } // Store lowest absolute delta to normalize the delta values absDelta = Math.max( Math.abs(deltaY), Math.abs(deltaX) ); if ( !lowestDelta || absDelta < lowestDelta ) { lowestDelta = absDelta; // Adjust older deltas if necessary if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) { lowestDelta /= 40; } } // Adjust older deltas if necessary if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) { // Divide all the things by 40! delta /= 40; deltaX /= 40; deltaY /= 40; } // Get a whole, normalized value for the deltas delta = Math[ delta >= 1 ? 'floor' : 'ceil' ](delta / lowestDelta); deltaX = Math[ deltaX >= 1 ? 'floor' : 'ceil' ](deltaX / lowestDelta); deltaY = Math[ deltaY >= 1 ? 'floor' : 'ceil' ](deltaY / lowestDelta); // Normalise offsetX and offsetY properties if ( special.settings.normalizeOffset && this.getBoundingClientRect ) { var boundingRect = this.getBoundingClientRect(); offsetX = event.clientX - boundingRect.left; offsetY = event.clientY - boundingRect.top; } // Add information to the event object event.deltaX = deltaX; event.deltaY = deltaY; event.deltaFactor = lowestDelta; event.offsetX = offsetX; event.offsetY = offsetY; // Go ahead and set deltaMode to 0 since we converted to pixels // Although this is a little odd since we overwrite the deltaX/Y // properties with normalized deltas. event.deltaMode = 0; // Add event and delta to the front of the arguments args.unshift(event, delta, deltaX, deltaY); // Clearout lowestDelta after sometime to better // handle multiple device types that give different // a different lowestDelta // Ex: trackpad = 3 and mouse wheel = 120 if (nullLowestDeltaTimeout) { clearTimeout(nullLowestDeltaTimeout); } nullLowestDeltaTimeout = setTimeout(nullLowestDelta, 200); return ($.event.dispatch || $.event.handle).apply(this, args); } function nullLowestDelta() { lowestDelta = null; } function shouldAdjustOldDeltas(orgEvent, absDelta) { // If this is an older event and the delta is divisable by 120, // then we are assuming that the browser is treating this as an // older mouse wheel event and that we should divide the deltas // by 40 to try and get a more usable deltaFactor. // Side note, this actually impacts the reported scroll distance // in older browsers and can cause scrolling to be slower than native. // Turn this off by setting $.event.special.mousewheel.settings.adjustOldDeltas to false. return special.settings.adjustOldDeltas && orgEvent.type === 'mousewheel' && absDelta % 120 === 0; } })); S2.define('jquery.select2',[ 'jquery', 'jquery-mousewheel', './select2/core', './select2/defaults', './select2/utils' ], function ($, _, Select2, Defaults, Utils) { if ($.fn.select2 == null) { // All methods that should return the element var thisMethods = ['open', 'close', 'destroy']; $.fn.select2 = function (options) { options = options || {}; if (typeof options === 'object') { this.each(function () { var instanceOptions = $.extend(true, {}, options); var instance = new Select2($(this), instanceOptions); }); return this; } else if (typeof options === 'string') { var ret; var args = Array.prototype.slice.call(arguments, 1); this.each(function () { var instance = Utils.GetData(this, 'select2'); if (instance == null && window.console && console.error) { console.error( 'The select2(\'' + options + '\') method was called on an ' + 'element that is not using Select2.' ); } ret = instance[options].apply(instance, args); }); // Check if we should be returning `this` if (thisMethods.indexOf(options) > -1) { return this; } return ret; } else { throw new Error('Invalid arguments for Select2: ' + options); } }; } if ($.fn.select2.defaults == null) { $.fn.select2.defaults = Defaults; } return Select2; }); // Return the AMD loader configuration so it can be used outside of this file return { define: S2.define, require: S2.require }; }()); // Autoload the jQuery bindings // We know that all of the modules exist above this, so we're safe var select2 = S2.require('jquery.select2'); // Hold the AMD module references on the jQuery function that was just loaded // This allows Select2 to use the internal loader outside of this file, such // as in the language files. jQuery.fn.select2.amd = S2; // Return the Select2 instance for anyone who is importing it. return select2; })); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/select/select2.js ================================================ /*! * Select2 4.1.0-beta.1 * https://select2.github.io * * Released under the MIT license * https://github.com/select2/select2/blob/master/LICENSE.md */ ;(function (factory) { if (typeof define === 'function' && define.amd) { // AMD. Register as an anonymous module. define(['jquery'], factory); } else if (typeof module === 'object' && module.exports) { // Node/CommonJS module.exports = function (root, jQuery) { if (jQuery === undefined) { // require('jQuery') returns a factory that requires window to // build a jQuery instance, we normalize how we use modules // that require this pattern but the window provided is a noop // if it's defined (how jquery works) if (typeof window !== 'undefined') { jQuery = require('jquery'); } else { jQuery = require('jquery')(root); } } factory(jQuery); return jQuery; }; } else { // Browser globals factory(jQuery); } } (function (jQuery) { // This is needed so we can catch the AMD loader configuration and use it // The inner file should be wrapped (by `banner.start.js`) in a function that // returns the AMD loader references. var S2 =(function () { // Restore the Select2 AMD loader so it can be used // Needed mostly in the language files, where the loader is not inserted if (jQuery && jQuery.fn && jQuery.fn.select2 && jQuery.fn.select2.amd) { var S2 = jQuery.fn.select2.amd; } var S2;(function () { if (!S2 || !S2.requirejs) { if (!S2) { S2 = {}; } else { require = S2; } /** * @license almond 0.3.3 Copyright jQuery Foundation and other contributors. * Released under MIT license, http://github.com/requirejs/almond/LICENSE */ //Going sloppy to avoid 'use strict' string cost, but strict practices should //be followed. /*global setTimeout: false */ var requirejs, require, define; (function (undef) { var main, req, makeMap, handlers, defined = {}, waiting = {}, config = {}, defining = {}, hasOwn = Object.prototype.hasOwnProperty, aps = [].slice, jsSuffixRegExp = /\.js$/; function hasProp(obj, prop) { return hasOwn.call(obj, prop); } /** * Given a relative module name, like ./something, normalize it to * a real name that can be mapped to a path. * @param {String} name the relative name * @param {String} baseName a real name that the name arg is relative * to. * @returns {String} normalized name */ function normalize(name, baseName) { var nameParts, nameSegment, mapValue, foundMap, lastIndex, foundI, foundStarMap, starI, i, j, part, normalizedBaseParts, baseParts = baseName && baseName.split("/"), map = config.map, starMap = (map && map['*']) || {}; //Adjust any relative paths. if (name) { name = name.split('/'); lastIndex = name.length - 1; // If wanting node ID compatibility, strip .js from end // of IDs. Have to do this here, and not in nameToUrl // because node allows either .js or non .js to map // to same file. if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) { name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, ''); } // Starts with a '.' so need the baseName if (name[0].charAt(0) === '.' && baseParts) { //Convert baseName to array, and lop off the last part, //so that . matches that 'directory' and not name of the baseName's //module. For instance, baseName of 'one/two/three', maps to //'one/two/three.js', but we want the directory, 'one/two' for //this normalization. normalizedBaseParts = baseParts.slice(0, baseParts.length - 1); name = normalizedBaseParts.concat(name); } //start trimDots for (i = 0; i < name.length; i++) { part = name[i]; if (part === '.') { name.splice(i, 1); i -= 1; } else if (part === '..') { // If at the start, or previous value is still .., // keep them so that when converted to a path it may // still work when converted to a path, even though // as an ID it is less than ideal. In larger point // releases, may be better to just kick out an error. if (i === 0 || (i === 1 && name[2] === '..') || name[i - 1] === '..') { continue; } else if (i > 0) { name.splice(i - 1, 2); i -= 2; } } } //end trimDots name = name.join('/'); } //Apply map config if available. if ((baseParts || starMap) && map) { nameParts = name.split('/'); for (i = nameParts.length; i > 0; i -= 1) { nameSegment = nameParts.slice(0, i).join("/"); if (baseParts) { //Find the longest baseName segment match in the config. //So, do joins on the biggest to smallest lengths of baseParts. for (j = baseParts.length; j > 0; j -= 1) { mapValue = map[baseParts.slice(0, j).join('/')]; //baseName segment has config, find if it has one for //this name. if (mapValue) { mapValue = mapValue[nameSegment]; if (mapValue) { //Match, update name to the new value. foundMap = mapValue; foundI = i; break; } } } } if (foundMap) { break; } //Check for a star map match, but just hold on to it, //if there is a shorter segment match later in a matching //config, then favor over this star map. if (!foundStarMap && starMap && starMap[nameSegment]) { foundStarMap = starMap[nameSegment]; starI = i; } } if (!foundMap && foundStarMap) { foundMap = foundStarMap; foundI = starI; } if (foundMap) { nameParts.splice(0, foundI, foundMap); name = nameParts.join('/'); } } return name; } function makeRequire(relName, forceSync) { return function () { //A version of a require function that passes a moduleName //value for items that may need to //look up paths relative to the moduleName var args = aps.call(arguments, 0); //If first arg is not require('string'), and there is only //one arg, it is the array form without a callback. Insert //a null so that the following concat is correct. if (typeof args[0] !== 'string' && args.length === 1) { args.push(null); } return req.apply(undef, args.concat([relName, forceSync])); }; } function makeNormalize(relName) { return function (name) { return normalize(name, relName); }; } function makeLoad(depName) { return function (value) { defined[depName] = value; }; } function callDep(name) { if (hasProp(waiting, name)) { var args = waiting[name]; delete waiting[name]; defining[name] = true; main.apply(undef, args); } if (!hasProp(defined, name) && !hasProp(defining, name)) { throw new Error('No ' + name); } return defined[name]; } //Turns a plugin!resource to [plugin, resource] //with the plugin being undefined if the name //did not have a plugin prefix. function splitPrefix(name) { var prefix, index = name ? name.indexOf('!') : -1; if (index > -1) { prefix = name.substring(0, index); name = name.substring(index + 1, name.length); } return [prefix, name]; } //Creates a parts array for a relName where first part is plugin ID, //second part is resource ID. Assumes relName has already been normalized. function makeRelParts(relName) { return relName ? splitPrefix(relName) : []; } /** * Makes a name map, normalizing the name, and using a plugin * for normalization if necessary. Grabs a ref to plugin * too, as an optimization. */ makeMap = function (name, relParts) { var plugin, parts = splitPrefix(name), prefix = parts[0], relResourceName = relParts[1]; name = parts[1]; if (prefix) { prefix = normalize(prefix, relResourceName); plugin = callDep(prefix); } //Normalize according if (prefix) { if (plugin && plugin.normalize) { name = plugin.normalize(name, makeNormalize(relResourceName)); } else { name = normalize(name, relResourceName); } } else { name = normalize(name, relResourceName); parts = splitPrefix(name); prefix = parts[0]; name = parts[1]; if (prefix) { plugin = callDep(prefix); } } //Using ridiculous property names for space reasons return { f: prefix ? prefix + '!' + name : name, //fullName n: name, pr: prefix, p: plugin }; }; function makeConfig(name) { return function () { return (config && config.config && config.config[name]) || {}; }; } handlers = { require: function (name) { return makeRequire(name); }, exports: function (name) { var e = defined[name]; if (typeof e !== 'undefined') { return e; } else { return (defined[name] = {}); } }, module: function (name) { return { id: name, uri: '', exports: defined[name], config: makeConfig(name) }; } }; main = function (name, deps, callback, relName) { var cjsModule, depName, ret, map, i, relParts, args = [], callbackType = typeof callback, usingExports; //Use name if no relName relName = relName || name; relParts = makeRelParts(relName); //Call the callback to define the module, if necessary. if (callbackType === 'undefined' || callbackType === 'function') { //Pull out the defined dependencies and pass the ordered //values to the callback. //Default to [require, exports, module] if no deps deps = !deps.length && callback.length ? ['require', 'exports', 'module'] : deps; for (i = 0; i < deps.length; i += 1) { map = makeMap(deps[i], relParts); depName = map.f; //Fast path CommonJS standard dependencies. if (depName === "require") { args[i] = handlers.require(name); } else if (depName === "exports") { //CommonJS module spec 1.1 args[i] = handlers.exports(name); usingExports = true; } else if (depName === "module") { //CommonJS module spec 1.1 cjsModule = args[i] = handlers.module(name); } else if (hasProp(defined, depName) || hasProp(waiting, depName) || hasProp(defining, depName)) { args[i] = callDep(depName); } else if (map.p) { map.p.load(map.n, makeRequire(relName, true), makeLoad(depName), {}); args[i] = defined[depName]; } else { throw new Error(name + ' missing ' + depName); } } ret = callback ? callback.apply(defined[name], args) : undefined; if (name) { //If setting exports via "module" is in play, //favor that over return value and exports. After that, //favor a non-undefined return value over exports use. if (cjsModule && cjsModule.exports !== undef && cjsModule.exports !== defined[name]) { defined[name] = cjsModule.exports; } else if (ret !== undef || !usingExports) { //Use the return value from the function. defined[name] = ret; } } } else if (name) { //May just be an object definition for the module. Only //worry about defining if have a module name. defined[name] = callback; } }; requirejs = require = req = function (deps, callback, relName, forceSync, alt) { if (typeof deps === "string") { if (handlers[deps]) { //callback in this case is really relName return handlers[deps](callback); } //Just return the module wanted. In this scenario, the //deps arg is the module name, and second arg (if passed) //is just the relName. //Normalize module name, if it contains . or .. return callDep(makeMap(deps, makeRelParts(callback)).f); } else if (!deps.splice) { //deps is a config object, not an array. config = deps; if (config.deps) { req(config.deps, config.callback); } if (!callback) { return; } if (callback.splice) { //callback is an array, which means it is a dependency list. //Adjust args if there are dependencies deps = callback; callback = relName; relName = null; } else { deps = undef; } } //Support require(['a']) callback = callback || function () {}; //If relName is a function, it is an errback handler, //so remove it. if (typeof relName === 'function') { relName = forceSync; forceSync = alt; } //Simulate async callback; if (forceSync) { main(undef, deps, callback, relName); } else { //Using a non-zero value because of concern for what old browsers //do, and latest browsers "upgrade" to 4 if lower value is used: //http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#dom-windowtimers-settimeout: //If want a value immediately, use require('id') instead -- something //that works in almond on the global level, but not guaranteed and //unlikely to work in other AMD implementations. setTimeout(function () { main(undef, deps, callback, relName); }, 4); } return req; }; /** * Just drops the config on the floor, but returns req in case * the config return value is used. */ req.config = function (cfg) { return req(cfg); }; /** * Expose module registry for debugging and tooling */ requirejs._defined = defined; define = function (name, deps, callback) { if (typeof name !== 'string') { throw new Error('See almond README: incorrect module build, no module name'); } //This module may not have dependencies if (!deps.splice) { //deps is not an array, so probably means //an object literal or factory function for //the value. Adjust args. callback = deps; deps = []; } if (!hasProp(defined, name) && !hasProp(waiting, name)) { waiting[name] = [name, deps, callback]; } }; define.amd = { jQuery: true }; }()); S2.requirejs = requirejs;S2.require = require;S2.define = define; } }()); S2.define("almond", function(){}); /* global jQuery:false, $:false */ S2.define('jquery',[],function () { var _$ = jQuery || $; if (_$ == null && console && console.error) { console.error( 'Select2: An instance of jQuery or a jQuery-compatible library was not ' + 'found. Make sure that you are including jQuery before Select2 on your ' + 'web page.' ); } return _$; }); S2.define('select2/utils',[ 'jquery' ], function ($) { var Utils = {}; Utils.Extend = function (ChildClass, SuperClass) { var __hasProp = {}.hasOwnProperty; function BaseConstructor () { this.constructor = ChildClass; } for (var key in SuperClass) { if (__hasProp.call(SuperClass, key)) { ChildClass[key] = SuperClass[key]; } } BaseConstructor.prototype = SuperClass.prototype; ChildClass.prototype = new BaseConstructor(); ChildClass.__super__ = SuperClass.prototype; return ChildClass; }; function getMethods (theClass) { var proto = theClass.prototype; var methods = []; for (var methodName in proto) { var m = proto[methodName]; if (typeof m !== 'function') { continue; } if (methodName === 'constructor') { continue; } methods.push(methodName); } return methods; } Utils.Decorate = function (SuperClass, DecoratorClass) { var decoratedMethods = getMethods(DecoratorClass); var superMethods = getMethods(SuperClass); function DecoratedClass () { var unshift = Array.prototype.unshift; var argCount = DecoratorClass.prototype.constructor.length; var calledConstructor = SuperClass.prototype.constructor; if (argCount > 0) { unshift.call(arguments, SuperClass.prototype.constructor); calledConstructor = DecoratorClass.prototype.constructor; } calledConstructor.apply(this, arguments); } DecoratorClass.displayName = SuperClass.displayName; function ctr () { this.constructor = DecoratedClass; } DecoratedClass.prototype = new ctr(); for (var m = 0; m < superMethods.length; m++) { var superMethod = superMethods[m]; DecoratedClass.prototype[superMethod] = SuperClass.prototype[superMethod]; } var calledMethod = function (methodName) { // Stub out the original method if it's not decorating an actual method var originalMethod = function () {}; if (methodName in DecoratedClass.prototype) { originalMethod = DecoratedClass.prototype[methodName]; } var decoratedMethod = DecoratorClass.prototype[methodName]; return function () { var unshift = Array.prototype.unshift; unshift.call(arguments, originalMethod); return decoratedMethod.apply(this, arguments); }; }; for (var d = 0; d < decoratedMethods.length; d++) { var decoratedMethod = decoratedMethods[d]; DecoratedClass.prototype[decoratedMethod] = calledMethod(decoratedMethod); } return DecoratedClass; }; var Observable = function () { this.listeners = {}; }; Observable.prototype.on = function (event, callback) { this.listeners = this.listeners || {}; if (event in this.listeners) { this.listeners[event].push(callback); } else { this.listeners[event] = [callback]; } }; Observable.prototype.trigger = function (event) { var slice = Array.prototype.slice; var params = slice.call(arguments, 1); this.listeners = this.listeners || {}; // Params should always come in as an array if (params == null) { params = []; } // If there are no arguments to the event, use a temporary object if (params.length === 0) { params.push({}); } // Set the `_type` of the first object to the event params[0]._type = event; if (event in this.listeners) { this.invoke(this.listeners[event], slice.call(arguments, 1)); } if ('*' in this.listeners) { this.invoke(this.listeners['*'], arguments); } }; Observable.prototype.invoke = function (listeners, params) { for (var i = 0, len = listeners.length; i < len; i++) { listeners[i].apply(this, params); } }; Utils.Observable = Observable; Utils.generateChars = function (length) { var chars = ''; for (var i = 0; i < length; i++) { var randomChar = Math.floor(Math.random() * 36); chars += randomChar.toString(36); } return chars; }; Utils.bind = function (func, context) { return function () { func.apply(context, arguments); }; }; Utils._convertData = function (data) { for (var originalKey in data) { var keys = originalKey.split('-'); var dataLevel = data; if (keys.length === 1) { continue; } for (var k = 0; k < keys.length; k++) { var key = keys[k]; // Lowercase the first letter // By default, dash-separated becomes camelCase key = key.substring(0, 1).toLowerCase() + key.substring(1); if (!(key in dataLevel)) { dataLevel[key] = {}; } if (k == keys.length - 1) { dataLevel[key] = data[originalKey]; } dataLevel = dataLevel[key]; } delete data[originalKey]; } return data; }; Utils.hasScroll = function (index, el) { // Adapted from the function created by @ShadowScripter // and adapted by @BillBarry on the Stack Exchange Code Review website. // The original code can be found at // http://codereview.stackexchange.com/q/13338 // and was designed to be used with the Sizzle selector engine. var $el = $(el); var overflowX = el.style.overflowX; var overflowY = el.style.overflowY; //Check both x and y declarations if (overflowX === overflowY && (overflowY === 'hidden' || overflowY === 'visible')) { return false; } if (overflowX === 'scroll' || overflowY === 'scroll') { return true; } return ($el.innerHeight() < el.scrollHeight || $el.innerWidth() < el.scrollWidth); }; Utils.escapeMarkup = function (markup) { var replaceMap = { '\\': '\', '&': '&', '<': '<', '>': '>', '"': '"', '\'': ''', '/': '/' }; // Do not try to escape the markup if it's not a string if (typeof markup !== 'string') { return markup; } return String(markup).replace(/[&<>"'\/\\]/g, function (match) { return replaceMap[match]; }); }; // Cache objects in Utils.__cache instead of $.data (see #4346) Utils.__cache = {}; var id = 0; Utils.GetUniqueElementId = function (element) { // Get a unique element Id. If element has no id, // creates a new unique number, stores it in the id // attribute and returns the new id with a prefix. // If an id already exists, it simply returns it with a prefix. var select2Id = element.getAttribute('data-select2-id'); if (select2Id != null) { return select2Id; } // If element has id, use it. if (element.id) { select2Id = 'select2-data-' + element.id; } else { select2Id = 'select2-data-' + (++id).toString() + '-' + Utils.generateChars(4); } element.setAttribute('data-select2-id', select2Id); return select2Id; }; Utils.StoreData = function (element, name, value) { // Stores an item in the cache for a specified element. // name is the cache key. var id = Utils.GetUniqueElementId(element); if (!Utils.__cache[id]) { Utils.__cache[id] = {}; } Utils.__cache[id][name] = value; }; Utils.GetData = function (element, name) { // Retrieves a value from the cache by its key (name) // name is optional. If no name specified, return // all cache items for the specified element. // and for a specified element. var id = Utils.GetUniqueElementId(element); if (name) { if (Utils.__cache[id]) { if (Utils.__cache[id][name] != null) { return Utils.__cache[id][name]; } return $(element).data(name); // Fallback to HTML5 data attribs. } return $(element).data(name); // Fallback to HTML5 data attribs. } else { return Utils.__cache[id]; } }; Utils.RemoveData = function (element) { // Removes all cached items for a specified element. var id = Utils.GetUniqueElementId(element); if (Utils.__cache[id] != null) { delete Utils.__cache[id]; } element.removeAttribute('data-select2-id'); }; Utils.copyNonInternalCssClasses = function (dest, src) { var classes; var destinationClasses = dest.getAttribute('class').trim().split(/\s+/); destinationClasses = destinationClasses.filter(function (clazz) { // Save all Select2 classes return clazz.indexOf('select2-') === 0; }); var sourceClasses = src.getAttribute('class').trim().split(/\s+/); sourceClasses = sourceClasses.filter(function (clazz) { // Only copy non-Select2 classes return clazz.indexOf('select2-') !== 0; }); var replacements = destinationClasses.concat(sourceClasses); dest.setAttribute('class', replacements.join(' ')); }; return Utils; }); S2.define('select2/results',[ 'jquery', './utils' ], function ($, Utils) { function Results ($element, options, dataAdapter) { this.$element = $element; this.data = dataAdapter; this.options = options; Results.__super__.constructor.call(this); } Utils.Extend(Results, Utils.Observable); Results.prototype.render = function () { var $results = $( '<ul class="select2-results__options" role="listbox"></ul>' ); if (this.options.get('multiple')) { $results.attr('aria-multiselectable', 'true'); } this.$results = $results; return $results; }; Results.prototype.clear = function () { this.$results.empty(); }; Results.prototype.displayMessage = function (params) { var escapeMarkup = this.options.get('escapeMarkup'); this.clear(); this.hideLoading(); var $message = $( '<li role="alert" aria-live="assertive"' + ' class="select2-results__option"></li>' ); var message = this.options.get('translations').get(params.message); $message.append( escapeMarkup( message(params.args) ) ); $message[0].className += ' select2-results__message'; this.$results.append($message); }; Results.prototype.hideMessages = function () { this.$results.find('.select2-results__message').remove(); }; Results.prototype.append = function (data) { this.hideLoading(); var $options = []; if (data.results == null || data.results.length === 0) { if (this.$results.children().length === 0) { this.trigger('results:message', { message: 'noResults' }); } return; } data.results = this.sort(data.results); for (var d = 0; d < data.results.length; d++) { var item = data.results[d]; var $option = this.option(item); $options.push($option); } this.$results.append($options); }; Results.prototype.position = function ($results, $dropdown) { var $resultsContainer = $dropdown.find('.select2-results'); $resultsContainer.append($results); }; Results.prototype.sort = function (data) { var sorter = this.options.get('sorter'); return sorter(data); }; Results.prototype.highlightFirstItem = function () { var $options = this.$results .find('.select2-results__option--selectable'); var $selected = $options.filter('.select2-results__option--selected'); // Check if there are any selected options if ($selected.length > 0) { // If there are selected options, highlight the first $selected.first().trigger('mouseenter'); } else { // If there are no selected options, highlight the first option // in the dropdown $options.first().trigger('mouseenter'); } this.ensureHighlightVisible(); }; Results.prototype.setClasses = function () { var self = this; this.data.current(function (selected) { var selectedIds = selected.map(function (s) { return s.id.toString(); }); var $options = self.$results .find('.select2-results__option--selectable'); $options.each(function () { var $option = $(this); var item = Utils.GetData(this, 'data'); // id needs to be converted to a string when comparing var id = '' + item.id; if ((item.element != null && item.element.selected) || (item.element == null && selectedIds.indexOf(id) > -1)) { this.classList.add('select2-results__option--selected'); $option.attr('aria-selected', 'true'); } else { this.classList.remove('select2-results__option--selected'); $option.attr('aria-selected', 'false'); } }); }); }; Results.prototype.showLoading = function (params) { this.hideLoading(); var loadingMore = this.options.get('translations').get('searching'); var loading = { disabled: true, loading: true, text: loadingMore(params) }; var $loading = this.option(loading); $loading.className += ' loading-results'; this.$results.prepend($loading); }; Results.prototype.hideLoading = function () { this.$results.find('.loading-results').remove(); }; Results.prototype.option = function (data) { var option = document.createElement('li'); option.classList.add('select2-results__option'); option.classList.add('select2-results__option--selectable'); var attrs = { 'role': 'option' }; var matches = window.Element.prototype.matches || window.Element.prototype.msMatchesSelector || window.Element.prototype.webkitMatchesSelector; if ((data.element != null && matches.call(data.element, ':disabled')) || (data.element == null && data.disabled)) { attrs['aria-disabled'] = 'true'; option.classList.remove('select2-results__option--selectable'); option.classList.add('select2-results__option--disabled'); } if (data.id == null) { option.classList.remove('select2-results__option--selectable'); } if (data._resultId != null) { option.id = data._resultId; } if (data.title) { option.title = data.title; } if (data.children) { attrs.role = 'group'; attrs['aria-label'] = data.text; option.classList.remove('select2-results__option--selectable'); option.classList.add('select2-results__option--group'); } for (var attr in attrs) { var val = attrs[attr]; option.setAttribute(attr, val); } if (data.children) { var $option = $(option); var label = document.createElement('strong'); label.className = 'select2-results__group'; this.template(data, label); var $children = []; for (var c = 0; c < data.children.length; c++) { var child = data.children[c]; var $child = this.option(child); $children.push($child); } var $childrenContainer = $('<ul></ul>', { 'class': 'select2-results__options select2-results__options--nested' }); $childrenContainer.append($children); $option.append(label); $option.append($childrenContainer); } else { this.template(data, option); } Utils.StoreData(option, 'data', data); return option; }; Results.prototype.bind = function (container, $container) { var self = this; var id = container.id + '-results'; this.$results.attr('id', id); container.on('results:all', function (params) { self.clear(); self.append(params.data); if (container.isOpen()) { self.setClasses(); self.highlightFirstItem(); } }); container.on('results:append', function (params) { self.append(params.data); if (container.isOpen()) { self.setClasses(); } }); container.on('query', function (params) { self.hideMessages(); self.showLoading(params); }); container.on('select', function () { if (!container.isOpen()) { return; } self.setClasses(); if (self.options.get('scrollAfterSelect')) { self.highlightFirstItem(); } }); container.on('unselect', function () { if (!container.isOpen()) { return; } self.setClasses(); if (self.options.get('scrollAfterSelect')) { self.highlightFirstItem(); } }); container.on('open', function () { // When the dropdown is open, aria-expended="true" self.$results.attr('aria-expanded', 'true'); self.$results.attr('aria-hidden', 'false'); self.setClasses(); self.ensureHighlightVisible(); }); container.on('close', function () { // When the dropdown is closed, aria-expended="false" self.$results.attr('aria-expanded', 'false'); self.$results.attr('aria-hidden', 'true'); self.$results.removeAttr('aria-activedescendant'); }); container.on('results:toggle', function () { var $highlighted = self.getHighlightedResults(); if ($highlighted.length === 0) { return; } $highlighted.trigger('mouseup'); }); container.on('results:select', function () { var $highlighted = self.getHighlightedResults(); if ($highlighted.length === 0) { return; } var data = Utils.GetData($highlighted[0], 'data'); if ($highlighted.hasClass('select2-results__option--selected')) { self.trigger('close', {}); } else { self.trigger('select', { data: data }); } }); container.on('results:previous', function () { var $highlighted = self.getHighlightedResults(); var $options = self.$results.find('.select2-results__option--selectable'); var currentIndex = $options.index($highlighted); // If we are already at the top, don't move further // If no options, currentIndex will be -1 if (currentIndex <= 0) { return; } var nextIndex = currentIndex - 1; // If none are highlighted, highlight the first if ($highlighted.length === 0) { nextIndex = 0; } var $next = $options.eq(nextIndex); $next.trigger('mouseenter'); var currentOffset = self.$results.offset().top; var nextTop = $next.offset().top; var nextOffset = self.$results.scrollTop() + (nextTop - currentOffset); if (nextIndex === 0) { self.$results.scrollTop(0); } else if (nextTop - currentOffset < 0) { self.$results.scrollTop(nextOffset); } }); container.on('results:next', function () { var $highlighted = self.getHighlightedResults(); var $options = self.$results.find('.select2-results__option--selectable'); var currentIndex = $options.index($highlighted); var nextIndex = currentIndex + 1; // If we are at the last option, stay there if (nextIndex >= $options.length) { return; } var $next = $options.eq(nextIndex); $next.trigger('mouseenter'); var currentOffset = self.$results.offset().top + self.$results.outerHeight(false); var nextBottom = $next.offset().top + $next.outerHeight(false); var nextOffset = self.$results.scrollTop() + nextBottom - currentOffset; if (nextIndex === 0) { self.$results.scrollTop(0); } else if (nextBottom > currentOffset) { self.$results.scrollTop(nextOffset); } }); container.on('results:focus', function (params) { params.element[0].classList.add('select2-results__option--highlighted'); params.element[0].setAttribute('aria-selected', 'true'); }); container.on('results:message', function (params) { self.displayMessage(params); }); if ($.fn.mousewheel) { this.$results.on('mousewheel', function (e) { var top = self.$results.scrollTop(); var bottom = self.$results.get(0).scrollHeight - top + e.deltaY; var isAtTop = e.deltaY > 0 && top - e.deltaY <= 0; var isAtBottom = e.deltaY < 0 && bottom <= self.$results.height(); if (isAtTop) { self.$results.scrollTop(0); e.preventDefault(); e.stopPropagation(); } else if (isAtBottom) { self.$results.scrollTop( self.$results.get(0).scrollHeight - self.$results.height() ); e.preventDefault(); e.stopPropagation(); } }); } this.$results.on('mouseup', '.select2-results__option--selectable', function (evt) { var $this = $(this); var data = Utils.GetData(this, 'data'); if ($this.hasClass('select2-results__option--selected')) { if (self.options.get('multiple')) { self.trigger('unselect', { originalEvent: evt, data: data }); } else { self.trigger('close', {}); } return; } self.trigger('select', { originalEvent: evt, data: data }); }); this.$results.on('mouseenter', '.select2-results__option--selectable', function (evt) { var data = Utils.GetData(this, 'data'); self.getHighlightedResults() .removeClass('select2-results__option--highlighted') .attr('aria-selected', 'false'); self.trigger('results:focus', { data: data, element: $(this) }); }); }; Results.prototype.getHighlightedResults = function () { var $highlighted = this.$results .find('.select2-results__option--highlighted'); return $highlighted; }; Results.prototype.destroy = function () { this.$results.remove(); }; Results.prototype.ensureHighlightVisible = function () { var $highlighted = this.getHighlightedResults(); if ($highlighted.length === 0) { return; } var $options = this.$results.find('.select2-results__option--selectable'); var currentIndex = $options.index($highlighted); var currentOffset = this.$results.offset().top; var nextTop = $highlighted.offset().top; var nextOffset = this.$results.scrollTop() + (nextTop - currentOffset); var offsetDelta = nextTop - currentOffset; nextOffset -= $highlighted.outerHeight(false) * 2; if (currentIndex <= 2) { this.$results.scrollTop(0); } else if (offsetDelta > this.$results.outerHeight() || offsetDelta < 0) { this.$results.scrollTop(nextOffset); } }; Results.prototype.template = function (result, container) { var template = this.options.get('templateResult'); var escapeMarkup = this.options.get('escapeMarkup'); var content = template(result, container); if (content == null) { container.style.display = 'none'; } else if (typeof content === 'string') { container.innerHTML = escapeMarkup(content); } else { $(container).append(content); } }; return Results; }); S2.define('select2/keys',[ ], function () { var KEYS = { BACKSPACE: 8, TAB: 9, ENTER: 13, SHIFT: 16, CTRL: 17, ALT: 18, ESC: 27, SPACE: 32, PAGE_UP: 33, PAGE_DOWN: 34, END: 35, HOME: 36, LEFT: 37, UP: 38, RIGHT: 39, DOWN: 40, DELETE: 46 }; return KEYS; }); S2.define('select2/selection/base',[ 'jquery', '../utils', '../keys' ], function ($, Utils, KEYS) { function BaseSelection ($element, options) { this.$element = $element; this.options = options; BaseSelection.__super__.constructor.call(this); } Utils.Extend(BaseSelection, Utils.Observable); BaseSelection.prototype.render = function () { var $selection = $( '<span class="select2-selection" role="combobox" ' + ' aria-haspopup="true" aria-expanded="false">' + '</span>' ); this._tabindex = 0; if (Utils.GetData(this.$element[0], 'old-tabindex') != null) { this._tabindex = Utils.GetData(this.$element[0], 'old-tabindex'); } else if (this.$element.attr('tabindex') != null) { this._tabindex = this.$element.attr('tabindex'); } $selection.attr('title', this.$element.attr('title')); $selection.attr('tabindex', this._tabindex); $selection.attr('aria-disabled', 'false'); this.$selection = $selection; return $selection; }; BaseSelection.prototype.bind = function (container, $container) { var self = this; var resultsId = container.id + '-results'; this.container = container; this.$selection.on('focus', function (evt) { self.trigger('focus', evt); }); this.$selection.on('blur', function (evt) { self._handleBlur(evt); }); this.$selection.on('keydown', function (evt) { self.trigger('keypress', evt); if (evt.which === KEYS.SPACE) { evt.preventDefault(); } }); container.on('results:focus', function (params) { self.$selection.attr('aria-activedescendant', params.data._resultId); }); container.on('selection:update', function (params) { self.update(params.data); }); container.on('open', function () { // When the dropdown is open, aria-expanded="true" self.$selection.attr('aria-expanded', 'true'); self.$selection.attr('aria-owns', resultsId); self._attachCloseHandler(container); }); container.on('close', function () { // When the dropdown is closed, aria-expanded="false" self.$selection.attr('aria-expanded', 'false'); self.$selection.removeAttr('aria-activedescendant'); self.$selection.removeAttr('aria-owns'); self.$selection.trigger('focus'); self._detachCloseHandler(container); }); container.on('enable', function () { self.$selection.attr('tabindex', self._tabindex); self.$selection.attr('aria-disabled', 'false'); }); container.on('disable', function () { self.$selection.attr('tabindex', '-1'); self.$selection.attr('aria-disabled', 'true'); }); }; BaseSelection.prototype._handleBlur = function (evt) { var self = this; // This needs to be delayed as the active element is the body when the tab // key is pressed, possibly along with others. window.setTimeout(function () { // Don't trigger `blur` if the focus is still in the selection if ( (document.activeElement == self.$selection[0]) || ($.contains(self.$selection[0], document.activeElement)) ) { return; } self.trigger('blur', evt); }, 1); }; BaseSelection.prototype._attachCloseHandler = function (container) { $(document.body).on('mousedown.select2.' + container.id, function (e) { var $target = $(e.target); var $select = $target.closest('.select2'); var $all = $('.select2.select2-container--open'); $all.each(function () { if (this == $select[0]) { return; } var $element = Utils.GetData(this, 'element'); $element.select2('close'); }); }); }; BaseSelection.prototype._detachCloseHandler = function (container) { $(document.body).off('mousedown.select2.' + container.id); }; BaseSelection.prototype.position = function ($selection, $container) { var $selectionContainer = $container.find('.selection'); $selectionContainer.append($selection); }; BaseSelection.prototype.destroy = function () { this._detachCloseHandler(this.container); }; BaseSelection.prototype.update = function (data) { throw new Error('The `update` method must be defined in child classes.'); }; /** * Helper method to abstract the "enabled" (not "disabled") state of this * object. * * @return {true} if the instance is not disabled. * @return {false} if the instance is disabled. */ BaseSelection.prototype.isEnabled = function () { return !this.isDisabled(); }; /** * Helper method to abstract the "disabled" state of this object. * * @return {true} if the disabled option is true. * @return {false} if the disabled option is false. */ BaseSelection.prototype.isDisabled = function () { return this.options.get('disabled'); }; return BaseSelection; }); S2.define('select2/selection/single',[ 'jquery', './base', '../utils', '../keys' ], function ($, BaseSelection, Utils, KEYS) { function SingleSelection () { SingleSelection.__super__.constructor.apply(this, arguments); } Utils.Extend(SingleSelection, BaseSelection); SingleSelection.prototype.render = function () { var $selection = SingleSelection.__super__.render.call(this); $selection[0].classList.add('select2-selection--single'); $selection.html( '<span class="select2-selection__rendered"></span>' + '<span class="select2-selection__arrow" role="presentation">' + '<b role="presentation"></b>' + '</span>' ); return $selection; }; SingleSelection.prototype.bind = function (container, $container) { var self = this; SingleSelection.__super__.bind.apply(this, arguments); var id = container.id + '-container'; this.$selection.find('.select2-selection__rendered') .attr('id', id) .attr('role', 'textbox') .attr('aria-readonly', 'true'); this.$selection.attr('aria-labelledby', id); this.$selection.on('mousedown', function (evt) { // Only respond to left clicks if (evt.which !== 1) { return; } self.trigger('toggle', { originalEvent: evt }); }); this.$selection.on('focus', function (evt) { // User focuses on the container }); this.$selection.on('blur', function (evt) { // User exits the container }); container.on('focus', function (evt) { if (!container.isOpen()) { self.$selection.trigger('focus'); } }); }; SingleSelection.prototype.clear = function () { var $rendered = this.$selection.find('.select2-selection__rendered'); $rendered.empty(); $rendered.removeAttr('title'); // clear tooltip on empty }; SingleSelection.prototype.display = function (data, container) { var template = this.options.get('templateSelection'); var escapeMarkup = this.options.get('escapeMarkup'); return escapeMarkup(template(data, container)); }; SingleSelection.prototype.selectionContainer = function () { return $('<span></span>'); }; SingleSelection.prototype.update = function (data) { if (data.length === 0) { this.clear(); return; } var selection = data[0]; var $rendered = this.$selection.find('.select2-selection__rendered'); var formatted = this.display(selection, $rendered); $rendered.empty().append(formatted); var title = selection.title || selection.text; if (title) { $rendered.attr('title', title); } else { $rendered.removeAttr('title'); } }; return SingleSelection; }); S2.define('select2/selection/multiple',[ 'jquery', './base', '../utils' ], function ($, BaseSelection, Utils) { function MultipleSelection ($element, options) { MultipleSelection.__super__.constructor.apply(this, arguments); } Utils.Extend(MultipleSelection, BaseSelection); MultipleSelection.prototype.render = function () { var $selection = MultipleSelection.__super__.render.call(this); $selection[0].classList.add('select2-selection--multiple'); $selection.html( '<ul class="select2-selection__rendered"></ul>' ); return $selection; }; MultipleSelection.prototype.bind = function (container, $container) { var self = this; MultipleSelection.__super__.bind.apply(this, arguments); var id = container.id + '-container'; this.$selection.find('.select2-selection__rendered').attr('id', id); this.$selection.on('click', function (evt) { self.trigger('toggle', { originalEvent: evt }); }); this.$selection.on( 'click', '.select2-selection__choice__remove', function (evt) { // Ignore the event if it is disabled if (self.isDisabled()) { return; } var $remove = $(this); var $selection = $remove.parent(); var data = Utils.GetData($selection[0], 'data'); self.trigger('unselect', { originalEvent: evt, data: data }); } ); this.$selection.on( 'keydown', '.select2-selection__choice__remove', function (evt) { // Ignore the event if it is disabled if (self.isDisabled()) { return; } evt.stopPropagation(); } ); }; MultipleSelection.prototype.clear = function () { var $rendered = this.$selection.find('.select2-selection__rendered'); $rendered.empty(); $rendered.removeAttr('title'); }; MultipleSelection.prototype.display = function (data, container) { var template = this.options.get('templateSelection'); var escapeMarkup = this.options.get('escapeMarkup'); return escapeMarkup(template(data, container)); }; MultipleSelection.prototype.selectionContainer = function () { var $container = $( '<li class="select2-selection__choice">' + '<button type="button" class="select2-selection__choice__remove" ' + 'tabindex="-1">' + '<span aria-hidden="true">×</span>' + '</button>' + '<span class="select2-selection__choice__display"></span>' + '</li>' ); return $container; }; MultipleSelection.prototype.update = function (data) { this.clear(); if (data.length === 0) { return; } var $selections = []; var selectionIdPrefix = this.$selection.find('.select2-selection__rendered') .attr('id') + '-choice-'; for (var d = 0; d < data.length; d++) { var selection = data[d]; var $selection = this.selectionContainer(); var formatted = this.display(selection, $selection); var selectionId = selectionIdPrefix + Utils.generateChars(4) + '-'; if (selection.id) { selectionId += selection.id; } else { selectionId += Utils.generateChars(4); } $selection.find('.select2-selection__choice__display') .append(formatted) .attr('id', selectionId); var title = selection.title || selection.text; if (title) { $selection.attr('title', title); } var removeItem = this.options.get('translations').get('removeItem'); var $remove = $selection.find('.select2-selection__choice__remove'); $remove.attr('title', removeItem()); $remove.attr('aria-label', removeItem()); $remove.attr('aria-describedby', selectionId); Utils.StoreData($selection[0], 'data', selection); $selections.push($selection); } var $rendered = this.$selection.find('.select2-selection__rendered'); $rendered.append($selections); }; return MultipleSelection; }); S2.define('select2/selection/placeholder',[ ], function () { function Placeholder (decorated, $element, options) { this.placeholder = this.normalizePlaceholder(options.get('placeholder')); decorated.call(this, $element, options); } Placeholder.prototype.normalizePlaceholder = function (_, placeholder) { if (typeof placeholder === 'string') { placeholder = { id: '', text: placeholder }; } return placeholder; }; Placeholder.prototype.createPlaceholder = function (decorated, placeholder) { var $placeholder = this.selectionContainer(); $placeholder.html(this.display(placeholder)); $placeholder[0].classList.add('select2-selection__placeholder'); $placeholder[0].classList.remove('select2-selection__choice'); return $placeholder; }; Placeholder.prototype.update = function (decorated, data) { var singlePlaceholder = ( data.length == 1 && data[0].id != this.placeholder.id ); var multipleSelections = data.length > 1; if (multipleSelections || singlePlaceholder) { return decorated.call(this, data); } this.clear(); var $placeholder = this.createPlaceholder(this.placeholder); this.$selection.find('.select2-selection__rendered').append($placeholder); }; return Placeholder; }); S2.define('select2/selection/allowClear',[ 'jquery', '../keys', '../utils' ], function ($, KEYS, Utils) { function AllowClear () { } AllowClear.prototype.bind = function (decorated, container, $container) { var self = this; decorated.call(this, container, $container); if (this.placeholder == null) { if (this.options.get('debug') && window.console && console.error) { console.error( 'Select2: The `allowClear` option should be used in combination ' + 'with the `placeholder` option.' ); } } this.$selection.on('mousedown', '.select2-selection__clear', function (evt) { self._handleClear(evt); }); container.on('keypress', function (evt) { self._handleKeyboardClear(evt, container); }); }; AllowClear.prototype._handleClear = function (_, evt) { // Ignore the event if it is disabled if (this.isDisabled()) { return; } var $clear = this.$selection.find('.select2-selection__clear'); // Ignore the event if nothing has been selected if ($clear.length === 0) { return; } evt.stopPropagation(); var data = Utils.GetData($clear[0], 'data'); var previousVal = this.$element.val(); this.$element.val(this.placeholder.id); var unselectData = { data: data }; this.trigger('clear', unselectData); if (unselectData.prevented) { this.$element.val(previousVal); return; } for (var d = 0; d < data.length; d++) { unselectData = { data: data[d] }; // Trigger the `unselect` event, so people can prevent it from being // cleared. this.trigger('unselect', unselectData); // If the event was prevented, don't clear it out. if (unselectData.prevented) { this.$element.val(previousVal); return; } } this.$element.trigger('input').trigger('change'); this.trigger('toggle', {}); }; AllowClear.prototype._handleKeyboardClear = function (_, evt, container) { if (container.isOpen()) { return; } if (evt.which == KEYS.DELETE || evt.which == KEYS.BACKSPACE) { this._handleClear(evt); } }; AllowClear.prototype.update = function (decorated, data) { decorated.call(this, data); this.$selection.find('.select2-selection__clear').remove(); if (this.$selection.find('.select2-selection__placeholder').length > 0 || data.length === 0) { return; } var selectionId = this.$selection.find('.select2-selection__rendered') .attr('id'); var removeAll = this.options.get('translations').get('removeAllItems'); var $remove = $( '<button type="button" class="select2-selection__clear" tabindex="-1">' + '<span aria-hidden="true">×</span>' + '</button>' ); $remove.attr('title', removeAll()); $remove.attr('aria-label', removeAll()); $remove.attr('aria-describedby', selectionId); Utils.StoreData($remove[0], 'data', data); this.$selection.prepend($remove); }; return AllowClear; }); S2.define('select2/selection/search',[ 'jquery', '../utils', '../keys' ], function ($, Utils, KEYS) { function Search (decorated, $element, options) { decorated.call(this, $element, options); } Search.prototype.render = function (decorated) { var $search = $( '<span class="select2-search select2-search--inline">' + '<input class="select2-search__field" type="search" tabindex="-1"' + ' autocorrect="off" autocapitalize="none"' + ' spellcheck="false" role="searchbox" aria-autocomplete="list" />' + '</span>' ); this.$searchContainer = $search; this.$search = $search.find('input'); this.$search.prop('autocomplete', this.options.get('autocomplete')); var $rendered = decorated.call(this); this._transferTabIndex(); $rendered.append(this.$searchContainer); return $rendered; }; Search.prototype.bind = function (decorated, container, $container) { var self = this; var resultsId = container.id + '-results'; var selectionId = container.id + '-container'; decorated.call(this, container, $container); self.$search.attr('aria-describedby', selectionId); container.on('open', function () { self.$search.attr('aria-controls', resultsId); self.$search.trigger('focus'); }); container.on('close', function () { self.$search.val(''); self.resizeSearch(); self.$search.removeAttr('aria-controls'); self.$search.removeAttr('aria-activedescendant'); self.$search.trigger('focus'); }); container.on('enable', function () { self.$search.prop('disabled', false); self._transferTabIndex(); }); container.on('disable', function () { self.$search.prop('disabled', true); }); container.on('focus', function (evt) { self.$search.trigger('focus'); }); container.on('results:focus', function (params) { if (params.data._resultId) { self.$search.attr('aria-activedescendant', params.data._resultId); } else { self.$search.removeAttr('aria-activedescendant'); } }); this.$selection.on('focusin', '.select2-search--inline', function (evt) { self.trigger('focus', evt); }); this.$selection.on('focusout', '.select2-search--inline', function (evt) { self._handleBlur(evt); }); this.$selection.on('keydown', '.select2-search--inline', function (evt) { evt.stopPropagation(); self.trigger('keypress', evt); self._keyUpPrevented = evt.isDefaultPrevented(); var key = evt.which; if (key === KEYS.BACKSPACE && self.$search.val() === '') { var $previousChoice = self.$selection .find('.select2-selection__choice').last(); if ($previousChoice.length > 0) { var item = Utils.GetData($previousChoice[0], 'data'); self.searchRemoveChoice(item); evt.preventDefault(); } } }); this.$selection.on('click', '.select2-search--inline', function (evt) { if (self.$search.val()) { evt.stopPropagation(); } }); // Try to detect the IE version should the `documentMode` property that // is stored on the document. This is only implemented in IE and is // slightly cleaner than doing a user agent check. // This property is not available in Edge, but Edge also doesn't have // this bug. var msie = document.documentMode; var disableInputEvents = msie && msie <= 11; // Workaround for browsers which do not support the `input` event // This will prevent double-triggering of events for browsers which support // both the `keyup` and `input` events. this.$selection.on( 'input.searchcheck', '.select2-search--inline', function (evt) { // IE will trigger the `input` event when a placeholder is used on a // search box. To get around this issue, we are forced to ignore all // `input` events in IE and keep using `keyup`. if (disableInputEvents) { self.$selection.off('input.search input.searchcheck'); return; } // Unbind the duplicated `keyup` event self.$selection.off('keyup.search'); } ); this.$selection.on( 'keyup.search input.search', '.select2-search--inline', function (evt) { // IE will trigger the `input` event when a placeholder is used on a // search box. To get around this issue, we are forced to ignore all // `input` events in IE and keep using `keyup`. if (disableInputEvents && evt.type === 'input') { self.$selection.off('input.search input.searchcheck'); return; } var key = evt.which; // We can freely ignore events from modifier keys if (key == KEYS.SHIFT || key == KEYS.CTRL || key == KEYS.ALT) { return; } // Tabbing will be handled during the `keydown` phase if (key == KEYS.TAB) { return; } self.handleSearch(evt); } ); }; /** * This method will transfer the tabindex attribute from the rendered * selection to the search box. This allows for the search box to be used as * the primary focus instead of the selection container. * * @private */ Search.prototype._transferTabIndex = function (decorated) { this.$search.attr('tabindex', this.$selection.attr('tabindex')); this.$selection.attr('tabindex', '-1'); }; Search.prototype.createPlaceholder = function (decorated, placeholder) { this.$search.attr('placeholder', placeholder.text); }; Search.prototype.update = function (decorated, data) { var searchHadFocus = this.$search[0] == document.activeElement; this.$search.attr('placeholder', ''); decorated.call(this, data); this.resizeSearch(); if (searchHadFocus) { this.$search.trigger('focus'); } }; Search.prototype.handleSearch = function () { this.resizeSearch(); if (!this._keyUpPrevented) { var input = this.$search.val(); this.trigger('query', { term: input }); } this._keyUpPrevented = false; }; Search.prototype.searchRemoveChoice = function (decorated, item) { this.trigger('unselect', { data: item }); this.$search.val(item.text); this.handleSearch(); }; Search.prototype.resizeSearch = function () { this.$search.css('width', '25px'); var width = '100%'; if (this.$search.attr('placeholder') === '') { var minimumWidth = this.$search.val().length + 1; width = (minimumWidth * 0.75) + 'em'; } this.$search.css('width', width); }; return Search; }); S2.define('select2/selection/selectionCss',[ '../utils' ], function (Utils) { function SelectionCSS () { } SelectionCSS.prototype.render = function (decorated) { var $selection = decorated.call(this); var selectionCssClass = this.options.get('selectionCssClass') || ''; if (selectionCssClass.indexOf(':all:') !== -1) { selectionCssClass = selectionCssClass.replace(':all:', ''); Utils.copyNonInternalCssClasses($selection[0], this.$element[0]); } $selection.addClass(selectionCssClass); return $selection; }; return SelectionCSS; }); S2.define('select2/selection/eventRelay',[ 'jquery' ], function ($) { function EventRelay () { } EventRelay.prototype.bind = function (decorated, container, $container) { var self = this; var relayEvents = [ 'open', 'opening', 'close', 'closing', 'select', 'selecting', 'unselect', 'unselecting', 'clear', 'clearing' ]; var preventableEvents = [ 'opening', 'closing', 'selecting', 'unselecting', 'clearing' ]; decorated.call(this, container, $container); container.on('*', function (name, params) { // Ignore events that should not be relayed if (relayEvents.indexOf(name) === -1) { return; } // The parameters should always be an object params = params || {}; // Generate the jQuery event for the Select2 event var evt = $.Event('select2:' + name, { params: params }); self.$element.trigger(evt); // Only handle preventable events if it was one if (preventableEvents.indexOf(name) === -1) { return; } params.prevented = evt.isDefaultPrevented(); }); }; return EventRelay; }); S2.define('select2/translation',[ 'jquery', 'require' ], function ($, require) { function Translation (dict) { this.dict = dict || {}; } Translation.prototype.all = function () { return this.dict; }; Translation.prototype.get = function (key) { return this.dict[key]; }; Translation.prototype.extend = function (translation) { this.dict = $.extend({}, translation.all(), this.dict); }; // Static functions Translation._cache = {}; Translation.loadPath = function (path) { if (!(path in Translation._cache)) { var translations = require(path); Translation._cache[path] = translations; } return new Translation(Translation._cache[path]); }; return Translation; }); S2.define('select2/diacritics',[ ], function () { var diacritics = { '\u24B6': 'A', '\uFF21': 'A', '\u00C0': 'A', '\u00C1': 'A', '\u00C2': 'A', '\u1EA6': 'A', '\u1EA4': 'A', '\u1EAA': 'A', '\u1EA8': 'A', '\u00C3': 'A', '\u0100': 'A', '\u0102': 'A', '\u1EB0': 'A', '\u1EAE': 'A', '\u1EB4': 'A', '\u1EB2': 'A', '\u0226': 'A', '\u01E0': 'A', '\u00C4': 'A', '\u01DE': 'A', '\u1EA2': 'A', '\u00C5': 'A', '\u01FA': 'A', '\u01CD': 'A', '\u0200': 'A', '\u0202': 'A', '\u1EA0': 'A', '\u1EAC': 'A', '\u1EB6': 'A', '\u1E00': 'A', '\u0104': 'A', '\u023A': 'A', '\u2C6F': 'A', '\uA732': 'AA', '\u00C6': 'AE', '\u01FC': 'AE', '\u01E2': 'AE', '\uA734': 'AO', '\uA736': 'AU', '\uA738': 'AV', '\uA73A': 'AV', '\uA73C': 'AY', '\u24B7': 'B', '\uFF22': 'B', '\u1E02': 'B', '\u1E04': 'B', '\u1E06': 'B', '\u0243': 'B', '\u0182': 'B', '\u0181': 'B', '\u24B8': 'C', '\uFF23': 'C', '\u0106': 'C', '\u0108': 'C', '\u010A': 'C', '\u010C': 'C', '\u00C7': 'C', '\u1E08': 'C', '\u0187': 'C', '\u023B': 'C', '\uA73E': 'C', '\u24B9': 'D', '\uFF24': 'D', '\u1E0A': 'D', '\u010E': 'D', '\u1E0C': 'D', '\u1E10': 'D', '\u1E12': 'D', '\u1E0E': 'D', '\u0110': 'D', '\u018B': 'D', '\u018A': 'D', '\u0189': 'D', '\uA779': 'D', '\u01F1': 'DZ', '\u01C4': 'DZ', '\u01F2': 'Dz', '\u01C5': 'Dz', '\u24BA': 'E', '\uFF25': 'E', '\u00C8': 'E', '\u00C9': 'E', '\u00CA': 'E', '\u1EC0': 'E', '\u1EBE': 'E', '\u1EC4': 'E', '\u1EC2': 'E', '\u1EBC': 'E', '\u0112': 'E', '\u1E14': 'E', '\u1E16': 'E', '\u0114': 'E', '\u0116': 'E', '\u00CB': 'E', '\u1EBA': 'E', '\u011A': 'E', '\u0204': 'E', '\u0206': 'E', '\u1EB8': 'E', '\u1EC6': 'E', '\u0228': 'E', '\u1E1C': 'E', '\u0118': 'E', '\u1E18': 'E', '\u1E1A': 'E', '\u0190': 'E', '\u018E': 'E', '\u24BB': 'F', '\uFF26': 'F', '\u1E1E': 'F', '\u0191': 'F', '\uA77B': 'F', '\u24BC': 'G', '\uFF27': 'G', '\u01F4': 'G', '\u011C': 'G', '\u1E20': 'G', '\u011E': 'G', '\u0120': 'G', '\u01E6': 'G', '\u0122': 'G', '\u01E4': 'G', '\u0193': 'G', '\uA7A0': 'G', '\uA77D': 'G', '\uA77E': 'G', '\u24BD': 'H', '\uFF28': 'H', '\u0124': 'H', '\u1E22': 'H', '\u1E26': 'H', '\u021E': 'H', '\u1E24': 'H', '\u1E28': 'H', '\u1E2A': 'H', '\u0126': 'H', '\u2C67': 'H', '\u2C75': 'H', '\uA78D': 'H', '\u24BE': 'I', '\uFF29': 'I', '\u00CC': 'I', '\u00CD': 'I', '\u00CE': 'I', '\u0128': 'I', '\u012A': 'I', '\u012C': 'I', '\u0130': 'I', '\u00CF': 'I', '\u1E2E': 'I', '\u1EC8': 'I', '\u01CF': 'I', '\u0208': 'I', '\u020A': 'I', '\u1ECA': 'I', '\u012E': 'I', '\u1E2C': 'I', '\u0197': 'I', '\u24BF': 'J', '\uFF2A': 'J', '\u0134': 'J', '\u0248': 'J', '\u24C0': 'K', '\uFF2B': 'K', '\u1E30': 'K', '\u01E8': 'K', '\u1E32': 'K', '\u0136': 'K', '\u1E34': 'K', '\u0198': 'K', '\u2C69': 'K', '\uA740': 'K', '\uA742': 'K', '\uA744': 'K', '\uA7A2': 'K', '\u24C1': 'L', '\uFF2C': 'L', '\u013F': 'L', '\u0139': 'L', '\u013D': 'L', '\u1E36': 'L', '\u1E38': 'L', '\u013B': 'L', '\u1E3C': 'L', '\u1E3A': 'L', '\u0141': 'L', '\u023D': 'L', '\u2C62': 'L', '\u2C60': 'L', '\uA748': 'L', '\uA746': 'L', '\uA780': 'L', '\u01C7': 'LJ', '\u01C8': 'Lj', '\u24C2': 'M', '\uFF2D': 'M', '\u1E3E': 'M', '\u1E40': 'M', '\u1E42': 'M', '\u2C6E': 'M', '\u019C': 'M', '\u24C3': 'N', '\uFF2E': 'N', '\u01F8': 'N', '\u0143': 'N', '\u00D1': 'N', '\u1E44': 'N', '\u0147': 'N', '\u1E46': 'N', '\u0145': 'N', '\u1E4A': 'N', '\u1E48': 'N', '\u0220': 'N', '\u019D': 'N', '\uA790': 'N', '\uA7A4': 'N', '\u01CA': 'NJ', '\u01CB': 'Nj', '\u24C4': 'O', '\uFF2F': 'O', '\u00D2': 'O', '\u00D3': 'O', '\u00D4': 'O', '\u1ED2': 'O', '\u1ED0': 'O', '\u1ED6': 'O', '\u1ED4': 'O', '\u00D5': 'O', '\u1E4C': 'O', '\u022C': 'O', '\u1E4E': 'O', '\u014C': 'O', '\u1E50': 'O', '\u1E52': 'O', '\u014E': 'O', '\u022E': 'O', '\u0230': 'O', '\u00D6': 'O', '\u022A': 'O', '\u1ECE': 'O', '\u0150': 'O', '\u01D1': 'O', '\u020C': 'O', '\u020E': 'O', '\u01A0': 'O', '\u1EDC': 'O', '\u1EDA': 'O', '\u1EE0': 'O', '\u1EDE': 'O', '\u1EE2': 'O', '\u1ECC': 'O', '\u1ED8': 'O', '\u01EA': 'O', '\u01EC': 'O', '\u00D8': 'O', '\u01FE': 'O', '\u0186': 'O', '\u019F': 'O', '\uA74A': 'O', '\uA74C': 'O', '\u0152': 'OE', '\u01A2': 'OI', '\uA74E': 'OO', '\u0222': 'OU', '\u24C5': 'P', '\uFF30': 'P', '\u1E54': 'P', '\u1E56': 'P', '\u01A4': 'P', '\u2C63': 'P', '\uA750': 'P', '\uA752': 'P', '\uA754': 'P', '\u24C6': 'Q', '\uFF31': 'Q', '\uA756': 'Q', '\uA758': 'Q', '\u024A': 'Q', '\u24C7': 'R', '\uFF32': 'R', '\u0154': 'R', '\u1E58': 'R', '\u0158': 'R', '\u0210': 'R', '\u0212': 'R', '\u1E5A': 'R', '\u1E5C': 'R', '\u0156': 'R', '\u1E5E': 'R', '\u024C': 'R', '\u2C64': 'R', '\uA75A': 'R', '\uA7A6': 'R', '\uA782': 'R', '\u24C8': 'S', '\uFF33': 'S', '\u1E9E': 'S', '\u015A': 'S', '\u1E64': 'S', '\u015C': 'S', '\u1E60': 'S', '\u0160': 'S', '\u1E66': 'S', '\u1E62': 'S', '\u1E68': 'S', '\u0218': 'S', '\u015E': 'S', '\u2C7E': 'S', '\uA7A8': 'S', '\uA784': 'S', '\u24C9': 'T', '\uFF34': 'T', '\u1E6A': 'T', '\u0164': 'T', '\u1E6C': 'T', '\u021A': 'T', '\u0162': 'T', '\u1E70': 'T', '\u1E6E': 'T', '\u0166': 'T', '\u01AC': 'T', '\u01AE': 'T', '\u023E': 'T', '\uA786': 'T', '\uA728': 'TZ', '\u24CA': 'U', '\uFF35': 'U', '\u00D9': 'U', '\u00DA': 'U', '\u00DB': 'U', '\u0168': 'U', '\u1E78': 'U', '\u016A': 'U', '\u1E7A': 'U', '\u016C': 'U', '\u00DC': 'U', '\u01DB': 'U', '\u01D7': 'U', '\u01D5': 'U', '\u01D9': 'U', '\u1EE6': 'U', '\u016E': 'U', '\u0170': 'U', '\u01D3': 'U', '\u0214': 'U', '\u0216': 'U', '\u01AF': 'U', '\u1EEA': 'U', '\u1EE8': 'U', '\u1EEE': 'U', '\u1EEC': 'U', '\u1EF0': 'U', '\u1EE4': 'U', '\u1E72': 'U', '\u0172': 'U', '\u1E76': 'U', '\u1E74': 'U', '\u0244': 'U', '\u24CB': 'V', '\uFF36': 'V', '\u1E7C': 'V', '\u1E7E': 'V', '\u01B2': 'V', '\uA75E': 'V', '\u0245': 'V', '\uA760': 'VY', '\u24CC': 'W', '\uFF37': 'W', '\u1E80': 'W', '\u1E82': 'W', '\u0174': 'W', '\u1E86': 'W', '\u1E84': 'W', '\u1E88': 'W', '\u2C72': 'W', '\u24CD': 'X', '\uFF38': 'X', '\u1E8A': 'X', '\u1E8C': 'X', '\u24CE': 'Y', '\uFF39': 'Y', '\u1EF2': 'Y', '\u00DD': 'Y', '\u0176': 'Y', '\u1EF8': 'Y', '\u0232': 'Y', '\u1E8E': 'Y', '\u0178': 'Y', '\u1EF6': 'Y', '\u1EF4': 'Y', '\u01B3': 'Y', '\u024E': 'Y', '\u1EFE': 'Y', '\u24CF': 'Z', '\uFF3A': 'Z', '\u0179': 'Z', '\u1E90': 'Z', '\u017B': 'Z', '\u017D': 'Z', '\u1E92': 'Z', '\u1E94': 'Z', '\u01B5': 'Z', '\u0224': 'Z', '\u2C7F': 'Z', '\u2C6B': 'Z', '\uA762': 'Z', '\u24D0': 'a', '\uFF41': 'a', '\u1E9A': 'a', '\u00E0': 'a', '\u00E1': 'a', '\u00E2': 'a', '\u1EA7': 'a', '\u1EA5': 'a', '\u1EAB': 'a', '\u1EA9': 'a', '\u00E3': 'a', '\u0101': 'a', '\u0103': 'a', '\u1EB1': 'a', '\u1EAF': 'a', '\u1EB5': 'a', '\u1EB3': 'a', '\u0227': 'a', '\u01E1': 'a', '\u00E4': 'a', '\u01DF': 'a', '\u1EA3': 'a', '\u00E5': 'a', '\u01FB': 'a', '\u01CE': 'a', '\u0201': 'a', '\u0203': 'a', '\u1EA1': 'a', '\u1EAD': 'a', '\u1EB7': 'a', '\u1E01': 'a', '\u0105': 'a', '\u2C65': 'a', '\u0250': 'a', '\uA733': 'aa', '\u00E6': 'ae', '\u01FD': 'ae', '\u01E3': 'ae', '\uA735': 'ao', '\uA737': 'au', '\uA739': 'av', '\uA73B': 'av', '\uA73D': 'ay', '\u24D1': 'b', '\uFF42': 'b', '\u1E03': 'b', '\u1E05': 'b', '\u1E07': 'b', '\u0180': 'b', '\u0183': 'b', '\u0253': 'b', '\u24D2': 'c', '\uFF43': 'c', '\u0107': 'c', '\u0109': 'c', '\u010B': 'c', '\u010D': 'c', '\u00E7': 'c', '\u1E09': 'c', '\u0188': 'c', '\u023C': 'c', '\uA73F': 'c', '\u2184': 'c', '\u24D3': 'd', '\uFF44': 'd', '\u1E0B': 'd', '\u010F': 'd', '\u1E0D': 'd', '\u1E11': 'd', '\u1E13': 'd', '\u1E0F': 'd', '\u0111': 'd', '\u018C': 'd', '\u0256': 'd', '\u0257': 'd', '\uA77A': 'd', '\u01F3': 'dz', '\u01C6': 'dz', '\u24D4': 'e', '\uFF45': 'e', '\u00E8': 'e', '\u00E9': 'e', '\u00EA': 'e', '\u1EC1': 'e', '\u1EBF': 'e', '\u1EC5': 'e', '\u1EC3': 'e', '\u1EBD': 'e', '\u0113': 'e', '\u1E15': 'e', '\u1E17': 'e', '\u0115': 'e', '\u0117': 'e', '\u00EB': 'e', '\u1EBB': 'e', '\u011B': 'e', '\u0205': 'e', '\u0207': 'e', '\u1EB9': 'e', '\u1EC7': 'e', '\u0229': 'e', '\u1E1D': 'e', '\u0119': 'e', '\u1E19': 'e', '\u1E1B': 'e', '\u0247': 'e', '\u025B': 'e', '\u01DD': 'e', '\u24D5': 'f', '\uFF46': 'f', '\u1E1F': 'f', '\u0192': 'f', '\uA77C': 'f', '\u24D6': 'g', '\uFF47': 'g', '\u01F5': 'g', '\u011D': 'g', '\u1E21': 'g', '\u011F': 'g', '\u0121': 'g', '\u01E7': 'g', '\u0123': 'g', '\u01E5': 'g', '\u0260': 'g', '\uA7A1': 'g', '\u1D79': 'g', '\uA77F': 'g', '\u24D7': 'h', '\uFF48': 'h', '\u0125': 'h', '\u1E23': 'h', '\u1E27': 'h', '\u021F': 'h', '\u1E25': 'h', '\u1E29': 'h', '\u1E2B': 'h', '\u1E96': 'h', '\u0127': 'h', '\u2C68': 'h', '\u2C76': 'h', '\u0265': 'h', '\u0195': 'hv', '\u24D8': 'i', '\uFF49': 'i', '\u00EC': 'i', '\u00ED': 'i', '\u00EE': 'i', '\u0129': 'i', '\u012B': 'i', '\u012D': 'i', '\u00EF': 'i', '\u1E2F': 'i', '\u1EC9': 'i', '\u01D0': 'i', '\u0209': 'i', '\u020B': 'i', '\u1ECB': 'i', '\u012F': 'i', '\u1E2D': 'i', '\u0268': 'i', '\u0131': 'i', '\u24D9': 'j', '\uFF4A': 'j', '\u0135': 'j', '\u01F0': 'j', '\u0249': 'j', '\u24DA': 'k', '\uFF4B': 'k', '\u1E31': 'k', '\u01E9': 'k', '\u1E33': 'k', '\u0137': 'k', '\u1E35': 'k', '\u0199': 'k', '\u2C6A': 'k', '\uA741': 'k', '\uA743': 'k', '\uA745': 'k', '\uA7A3': 'k', '\u24DB': 'l', '\uFF4C': 'l', '\u0140': 'l', '\u013A': 'l', '\u013E': 'l', '\u1E37': 'l', '\u1E39': 'l', '\u013C': 'l', '\u1E3D': 'l', '\u1E3B': 'l', '\u017F': 'l', '\u0142': 'l', '\u019A': 'l', '\u026B': 'l', '\u2C61': 'l', '\uA749': 'l', '\uA781': 'l', '\uA747': 'l', '\u01C9': 'lj', '\u24DC': 'm', '\uFF4D': 'm', '\u1E3F': 'm', '\u1E41': 'm', '\u1E43': 'm', '\u0271': 'm', '\u026F': 'm', '\u24DD': 'n', '\uFF4E': 'n', '\u01F9': 'n', '\u0144': 'n', '\u00F1': 'n', '\u1E45': 'n', '\u0148': 'n', '\u1E47': 'n', '\u0146': 'n', '\u1E4B': 'n', '\u1E49': 'n', '\u019E': 'n', '\u0272': 'n', '\u0149': 'n', '\uA791': 'n', '\uA7A5': 'n', '\u01CC': 'nj', '\u24DE': 'o', '\uFF4F': 'o', '\u00F2': 'o', '\u00F3': 'o', '\u00F4': 'o', '\u1ED3': 'o', '\u1ED1': 'o', '\u1ED7': 'o', '\u1ED5': 'o', '\u00F5': 'o', '\u1E4D': 'o', '\u022D': 'o', '\u1E4F': 'o', '\u014D': 'o', '\u1E51': 'o', '\u1E53': 'o', '\u014F': 'o', '\u022F': 'o', '\u0231': 'o', '\u00F6': 'o', '\u022B': 'o', '\u1ECF': 'o', '\u0151': 'o', '\u01D2': 'o', '\u020D': 'o', '\u020F': 'o', '\u01A1': 'o', '\u1EDD': 'o', '\u1EDB': 'o', '\u1EE1': 'o', '\u1EDF': 'o', '\u1EE3': 'o', '\u1ECD': 'o', '\u1ED9': 'o', '\u01EB': 'o', '\u01ED': 'o', '\u00F8': 'o', '\u01FF': 'o', '\u0254': 'o', '\uA74B': 'o', '\uA74D': 'o', '\u0275': 'o', '\u0153': 'oe', '\u01A3': 'oi', '\u0223': 'ou', '\uA74F': 'oo', '\u24DF': 'p', '\uFF50': 'p', '\u1E55': 'p', '\u1E57': 'p', '\u01A5': 'p', '\u1D7D': 'p', '\uA751': 'p', '\uA753': 'p', '\uA755': 'p', '\u24E0': 'q', '\uFF51': 'q', '\u024B': 'q', '\uA757': 'q', '\uA759': 'q', '\u24E1': 'r', '\uFF52': 'r', '\u0155': 'r', '\u1E59': 'r', '\u0159': 'r', '\u0211': 'r', '\u0213': 'r', '\u1E5B': 'r', '\u1E5D': 'r', '\u0157': 'r', '\u1E5F': 'r', '\u024D': 'r', '\u027D': 'r', '\uA75B': 'r', '\uA7A7': 'r', '\uA783': 'r', '\u24E2': 's', '\uFF53': 's', '\u00DF': 's', '\u015B': 's', '\u1E65': 's', '\u015D': 's', '\u1E61': 's', '\u0161': 's', '\u1E67': 's', '\u1E63': 's', '\u1E69': 's', '\u0219': 's', '\u015F': 's', '\u023F': 's', '\uA7A9': 's', '\uA785': 's', '\u1E9B': 's', '\u24E3': 't', '\uFF54': 't', '\u1E6B': 't', '\u1E97': 't', '\u0165': 't', '\u1E6D': 't', '\u021B': 't', '\u0163': 't', '\u1E71': 't', '\u1E6F': 't', '\u0167': 't', '\u01AD': 't', '\u0288': 't', '\u2C66': 't', '\uA787': 't', '\uA729': 'tz', '\u24E4': 'u', '\uFF55': 'u', '\u00F9': 'u', '\u00FA': 'u', '\u00FB': 'u', '\u0169': 'u', '\u1E79': 'u', '\u016B': 'u', '\u1E7B': 'u', '\u016D': 'u', '\u00FC': 'u', '\u01DC': 'u', '\u01D8': 'u', '\u01D6': 'u', '\u01DA': 'u', '\u1EE7': 'u', '\u016F': 'u', '\u0171': 'u', '\u01D4': 'u', '\u0215': 'u', '\u0217': 'u', '\u01B0': 'u', '\u1EEB': 'u', '\u1EE9': 'u', '\u1EEF': 'u', '\u1EED': 'u', '\u1EF1': 'u', '\u1EE5': 'u', '\u1E73': 'u', '\u0173': 'u', '\u1E77': 'u', '\u1E75': 'u', '\u0289': 'u', '\u24E5': 'v', '\uFF56': 'v', '\u1E7D': 'v', '\u1E7F': 'v', '\u028B': 'v', '\uA75F': 'v', '\u028C': 'v', '\uA761': 'vy', '\u24E6': 'w', '\uFF57': 'w', '\u1E81': 'w', '\u1E83': 'w', '\u0175': 'w', '\u1E87': 'w', '\u1E85': 'w', '\u1E98': 'w', '\u1E89': 'w', '\u2C73': 'w', '\u24E7': 'x', '\uFF58': 'x', '\u1E8B': 'x', '\u1E8D': 'x', '\u24E8': 'y', '\uFF59': 'y', '\u1EF3': 'y', '\u00FD': 'y', '\u0177': 'y', '\u1EF9': 'y', '\u0233': 'y', '\u1E8F': 'y', '\u00FF': 'y', '\u1EF7': 'y', '\u1E99': 'y', '\u1EF5': 'y', '\u01B4': 'y', '\u024F': 'y', '\u1EFF': 'y', '\u24E9': 'z', '\uFF5A': 'z', '\u017A': 'z', '\u1E91': 'z', '\u017C': 'z', '\u017E': 'z', '\u1E93': 'z', '\u1E95': 'z', '\u01B6': 'z', '\u0225': 'z', '\u0240': 'z', '\u2C6C': 'z', '\uA763': 'z', '\u0386': '\u0391', '\u0388': '\u0395', '\u0389': '\u0397', '\u038A': '\u0399', '\u03AA': '\u0399', '\u038C': '\u039F', '\u038E': '\u03A5', '\u03AB': '\u03A5', '\u038F': '\u03A9', '\u03AC': '\u03B1', '\u03AD': '\u03B5', '\u03AE': '\u03B7', '\u03AF': '\u03B9', '\u03CA': '\u03B9', '\u0390': '\u03B9', '\u03CC': '\u03BF', '\u03CD': '\u03C5', '\u03CB': '\u03C5', '\u03B0': '\u03C5', '\u03CE': '\u03C9', '\u03C2': '\u03C3', '\u2019': '\'' }; return diacritics; }); S2.define('select2/data/base',[ '../utils' ], function (Utils) { function BaseAdapter ($element, options) { BaseAdapter.__super__.constructor.call(this); } Utils.Extend(BaseAdapter, Utils.Observable); BaseAdapter.prototype.current = function (callback) { throw new Error('The `current` method must be defined in child classes.'); }; BaseAdapter.prototype.query = function (params, callback) { throw new Error('The `query` method must be defined in child classes.'); }; BaseAdapter.prototype.bind = function (container, $container) { // Can be implemented in subclasses }; BaseAdapter.prototype.destroy = function () { // Can be implemented in subclasses }; BaseAdapter.prototype.generateResultId = function (container, data) { var id = container.id + '-result-'; id += Utils.generateChars(4); if (data.id != null) { id += '-' + data.id.toString(); } else { id += '-' + Utils.generateChars(4); } return id; }; return BaseAdapter; }); S2.define('select2/data/select',[ './base', '../utils', 'jquery' ], function (BaseAdapter, Utils, $) { function SelectAdapter ($element, options) { this.$element = $element; this.options = options; SelectAdapter.__super__.constructor.call(this); } Utils.Extend(SelectAdapter, BaseAdapter); SelectAdapter.prototype.current = function (callback) { var self = this; var data = Array.prototype.map.call( this.$element[0].querySelectorAll(':checked'), function (selectedElement) { return self.item($(selectedElement)); } ); callback(data); }; SelectAdapter.prototype.select = function (data) { var self = this; data.selected = true; // If data.element is a DOM node, use it instead if ( data.element != null && data.element.tagName.toLowerCase() === 'option' ) { data.element.selected = true; this.$element.trigger('input').trigger('change'); return; } if (this.$element.prop('multiple')) { this.current(function (currentData) { var val = []; data = [data]; data.push.apply(data, currentData); for (var d = 0; d < data.length; d++) { var id = data[d].id; if (val.indexOf(id) === -1) { val.push(id); } } self.$element.val(val); self.$element.trigger('input').trigger('change'); }); } else { var val = data.id; this.$element.val(val); this.$element.trigger('input').trigger('change'); } }; SelectAdapter.prototype.unselect = function (data) { var self = this; if (!this.$element.prop('multiple')) { return; } data.selected = false; if ( data.element != null && data.element.tagName.toLowerCase() === 'option' ) { data.element.selected = false; this.$element.trigger('input').trigger('change'); return; } this.current(function (currentData) { var val = []; for (var d = 0; d < currentData.length; d++) { var id = currentData[d].id; if (id !== data.id && val.indexOf(id) === -1) { val.push(id); } } self.$element.val(val); self.$element.trigger('input').trigger('change'); }); }; SelectAdapter.prototype.bind = function (container, $container) { var self = this; this.container = container; container.on('select', function (params) { self.select(params.data); }); container.on('unselect', function (params) { self.unselect(params.data); }); }; SelectAdapter.prototype.destroy = function () { // Remove anything added to child elements this.$element.find('*').each(function () { // Remove any custom data set by Select2 Utils.RemoveData(this); }); }; SelectAdapter.prototype.query = function (params, callback) { var data = []; var self = this; var $options = this.$element.children(); $options.each(function () { if ( this.tagName.toLowerCase() !== 'option' && this.tagName.toLowerCase() !== 'optgroup' ) { return; } var $option = $(this); var option = self.item($option); var matches = self.matches(params, option); if (matches !== null) { data.push(matches); } }); callback({ results: data }); }; SelectAdapter.prototype.addOptions = function ($options) { this.$element.append($options); }; SelectAdapter.prototype.option = function (data) { var option; if (data.children) { option = document.createElement('optgroup'); option.label = data.text; } else { option = document.createElement('option'); if (option.textContent !== undefined) { option.textContent = data.text; } else { option.innerText = data.text; } } if (data.id !== undefined) { option.value = data.id; } if (data.disabled) { option.disabled = true; } if (data.selected) { option.selected = true; } if (data.title) { option.title = data.title; } var normalizedData = this._normalizeItem(data); normalizedData.element = option; // Override the option's data with the combined data Utils.StoreData(option, 'data', normalizedData); return $(option); }; SelectAdapter.prototype.item = function ($option) { var data = {}; data = Utils.GetData($option[0], 'data'); if (data != null) { return data; } var option = $option[0]; if (option.tagName.toLowerCase() === 'option') { data = { id: $option.val(), text: $option.text(), disabled: $option.prop('disabled'), selected: $option.prop('selected'), title: $option.prop('title') }; } else if (option.tagName.toLowerCase() === 'optgroup') { data = { text: $option.prop('label'), children: [], title: $option.prop('title') }; var $children = $option.children('option'); var children = []; for (var c = 0; c < $children.length; c++) { var $child = $($children[c]); var child = this.item($child); children.push(child); } data.children = children; } data = this._normalizeItem(data); data.element = $option[0]; Utils.StoreData($option[0], 'data', data); return data; }; SelectAdapter.prototype._normalizeItem = function (item) { if (item !== Object(item)) { item = { id: item, text: item }; } item = $.extend({}, { text: '' }, item); var defaults = { selected: false, disabled: false }; if (item.id != null) { item.id = item.id.toString(); } if (item.text != null) { item.text = item.text.toString(); } if (item._resultId == null && item.id && this.container != null) { item._resultId = this.generateResultId(this.container, item); } return $.extend({}, defaults, item); }; SelectAdapter.prototype.matches = function (params, data) { var matcher = this.options.get('matcher'); return matcher(params, data); }; return SelectAdapter; }); S2.define('select2/data/array',[ './select', '../utils', 'jquery' ], function (SelectAdapter, Utils, $) { function ArrayAdapter ($element, options) { this._dataToConvert = options.get('data') || []; ArrayAdapter.__super__.constructor.call(this, $element, options); } Utils.Extend(ArrayAdapter, SelectAdapter); ArrayAdapter.prototype.bind = function (container, $container) { ArrayAdapter.__super__.bind.call(this, container, $container); this.addOptions(this.convertToOptions(this._dataToConvert)); }; ArrayAdapter.prototype.select = function (data) { var $option = this.$element.find('option').filter(function (i, elm) { return elm.value == data.id.toString(); }); if ($option.length === 0) { $option = this.option(data); this.addOptions($option); } ArrayAdapter.__super__.select.call(this, data); }; ArrayAdapter.prototype.convertToOptions = function (data) { var self = this; var $existing = this.$element.find('option'); var existingIds = $existing.map(function () { return self.item($(this)).id; }).get(); var $options = []; // Filter out all items except for the one passed in the argument function onlyItem (item) { return function () { return $(this).val() == item.id; }; } for (var d = 0; d < data.length; d++) { var item = this._normalizeItem(data[d]); // Skip items which were pre-loaded, only merge the data if (existingIds.indexOf(item.id) >= 0) { var $existingOption = $existing.filter(onlyItem(item)); var existingData = this.item($existingOption); var newData = $.extend(true, {}, item, existingData); var $newOption = this.option(newData); $existingOption.replaceWith($newOption); continue; } var $option = this.option(item); if (item.children) { var $children = this.convertToOptions(item.children); $option.append($children); } $options.push($option); } return $options; }; return ArrayAdapter; }); S2.define('select2/data/ajax',[ './array', '../utils', 'jquery' ], function (ArrayAdapter, Utils, $) { function AjaxAdapter ($element, options) { this.ajaxOptions = this._applyDefaults(options.get('ajax')); if (this.ajaxOptions.processResults != null) { this.processResults = this.ajaxOptions.processResults; } AjaxAdapter.__super__.constructor.call(this, $element, options); } Utils.Extend(AjaxAdapter, ArrayAdapter); AjaxAdapter.prototype._applyDefaults = function (options) { var defaults = { data: function (params) { return $.extend({}, params, { q: params.term }); }, transport: function (params, success, failure) { var $request = $.ajax(params); $request.then(success); $request.fail(failure); return $request; } }; return $.extend({}, defaults, options, true); }; AjaxAdapter.prototype.processResults = function (results) { return results; }; AjaxAdapter.prototype.query = function (params, callback) { var matches = []; var self = this; if (this._request != null) { // JSONP requests cannot always be aborted if ($.isFunction(this._request.abort)) { this._request.abort(); } this._request = null; } var options = $.extend({ type: 'GET' }, this.ajaxOptions); if (typeof options.url === 'function') { options.url = options.url.call(this.$element, params); } if (typeof options.data === 'function') { options.data = options.data.call(this.$element, params); } function request () { var $request = options.transport(options, function (data) { var results = self.processResults(data, params); if (self.options.get('debug') && window.console && console.error) { // Check to make sure that the response included a `results` key. if (!results || !results.results || !Array.isArray(results.results)) { console.error( 'Select2: The AJAX results did not return an array in the ' + '`results` key of the response.' ); } } callback(results); }, function () { // Attempt to detect if a request was aborted // Only works if the transport exposes a status property if ('status' in $request && ($request.status === 0 || $request.status === '0')) { return; } self.trigger('results:message', { message: 'errorLoading' }); }); self._request = $request; } if (this.ajaxOptions.delay && params.term != null) { if (this._queryTimeout) { window.clearTimeout(this._queryTimeout); } this._queryTimeout = window.setTimeout(request, this.ajaxOptions.delay); } else { request(); } }; return AjaxAdapter; }); S2.define('select2/data/tags',[ 'jquery' ], function ($) { function Tags (decorated, $element, options) { var tags = options.get('tags'); var createTag = options.get('createTag'); if (createTag !== undefined) { this.createTag = createTag; } var insertTag = options.get('insertTag'); if (insertTag !== undefined) { this.insertTag = insertTag; } decorated.call(this, $element, options); if (Array.isArray(tags)) { for (var t = 0; t < tags.length; t++) { var tag = tags[t]; var item = this._normalizeItem(tag); var $option = this.option(item); this.$element.append($option); } } } Tags.prototype.query = function (decorated, params, callback) { var self = this; this._removeOldTags(); if (params.term == null || params.page != null) { decorated.call(this, params, callback); return; } function wrapper (obj, child) { var data = obj.results; for (var i = 0; i < data.length; i++) { var option = data[i]; var checkChildren = ( option.children != null && !wrapper({ results: option.children }, true) ); var optionText = (option.text || '').toUpperCase(); var paramsTerm = (params.term || '').toUpperCase(); var checkText = optionText === paramsTerm; if (checkText || checkChildren) { if (child) { return false; } obj.data = data; callback(obj); return; } } if (child) { return true; } var tag = self.createTag(params); if (tag != null) { var $option = self.option(tag); $option.attr('data-select2-tag', true); self.addOptions([$option]); self.insertTag(data, tag); } obj.results = data; callback(obj); } decorated.call(this, params, wrapper); }; Tags.prototype.createTag = function (decorated, params) { if (params.term == null) { return null; } var term = params.term.trim(); if (term === '') { return null; } return { id: term, text: term }; }; Tags.prototype.insertTag = function (_, data, tag) { data.unshift(tag); }; Tags.prototype._removeOldTags = function (_) { var $options = this.$element.find('option[data-select2-tag]'); $options.each(function () { if (this.selected) { return; } $(this).remove(); }); }; return Tags; }); S2.define('select2/data/tokenizer',[ 'jquery' ], function ($) { function Tokenizer (decorated, $element, options) { var tokenizer = options.get('tokenizer'); if (tokenizer !== undefined) { this.tokenizer = tokenizer; } decorated.call(this, $element, options); } Tokenizer.prototype.bind = function (decorated, container, $container) { decorated.call(this, container, $container); this.$search = container.dropdown.$search || container.selection.$search || $container.find('.select2-search__field'); }; Tokenizer.prototype.query = function (decorated, params, callback) { var self = this; function createAndSelect (data) { // Normalize the data object so we can use it for checks var item = self._normalizeItem(data); // Check if the data object already exists as a tag // Select it if it doesn't var $existingOptions = self.$element.find('option').filter(function () { return $(this).val() === item.id; }); // If an existing option wasn't found for it, create the option if (!$existingOptions.length) { var $option = self.option(item); $option.attr('data-select2-tag', true); self._removeOldTags(); self.addOptions([$option]); } // Select the item, now that we know there is an option for it select(item); } function select (data) { self.trigger('select', { data: data }); } params.term = params.term || ''; var tokenData = this.tokenizer(params, this.options, createAndSelect); if (tokenData.term !== params.term) { // Replace the search term if we have the search box if (this.$search.length) { this.$search.val(tokenData.term); this.$search.trigger('focus'); } params.term = tokenData.term; } decorated.call(this, params, callback); }; Tokenizer.prototype.tokenizer = function (_, params, options, callback) { var separators = options.get('tokenSeparators') || []; var term = params.term; var i = 0; var createTag = this.createTag || function (params) { return { id: params.term, text: params.term }; }; while (i < term.length) { var termChar = term[i]; if (separators.indexOf(termChar) === -1) { i++; continue; } var part = term.substr(0, i); var partParams = $.extend({}, params, { term: part }); var data = createTag(partParams); if (data == null) { i++; continue; } callback(data); // Reset the term to not include the tokenized portion term = term.substr(i + 1) || ''; i = 0; } return { term: term }; }; return Tokenizer; }); S2.define('select2/data/minimumInputLength',[ ], function () { function MinimumInputLength (decorated, $e, options) { this.minimumInputLength = options.get('minimumInputLength'); decorated.call(this, $e, options); } MinimumInputLength.prototype.query = function (decorated, params, callback) { params.term = params.term || ''; if (params.term.length < this.minimumInputLength) { this.trigger('results:message', { message: 'inputTooShort', args: { minimum: this.minimumInputLength, input: params.term, params: params } }); return; } decorated.call(this, params, callback); }; return MinimumInputLength; }); S2.define('select2/data/maximumInputLength',[ ], function () { function MaximumInputLength (decorated, $e, options) { this.maximumInputLength = options.get('maximumInputLength'); decorated.call(this, $e, options); } MaximumInputLength.prototype.query = function (decorated, params, callback) { params.term = params.term || ''; if (this.maximumInputLength > 0 && params.term.length > this.maximumInputLength) { this.trigger('results:message', { message: 'inputTooLong', args: { maximum: this.maximumInputLength, input: params.term, params: params } }); return; } decorated.call(this, params, callback); }; return MaximumInputLength; }); S2.define('select2/data/maximumSelectionLength',[ ], function (){ function MaximumSelectionLength (decorated, $e, options) { this.maximumSelectionLength = options.get('maximumSelectionLength'); decorated.call(this, $e, options); } MaximumSelectionLength.prototype.bind = function (decorated, container, $container) { var self = this; decorated.call(this, container, $container); container.on('select', function () { self._checkIfMaximumSelected(); }); }; MaximumSelectionLength.prototype.query = function (decorated, params, callback) { var self = this; this._checkIfMaximumSelected(function () { decorated.call(self, params, callback); }); }; MaximumSelectionLength.prototype._checkIfMaximumSelected = function (_, successCallback) { var self = this; this.current(function (currentData) { var count = currentData != null ? currentData.length : 0; if (self.maximumSelectionLength > 0 && count >= self.maximumSelectionLength) { self.trigger('results:message', { message: 'maximumSelected', args: { maximum: self.maximumSelectionLength } }); return; } if (successCallback) { successCallback(); } }); }; return MaximumSelectionLength; }); S2.define('select2/dropdown',[ 'jquery', './utils' ], function ($, Utils) { function Dropdown ($element, options) { this.$element = $element; this.options = options; Dropdown.__super__.constructor.call(this); } Utils.Extend(Dropdown, Utils.Observable); Dropdown.prototype.render = function () { var $dropdown = $( '<span class="select2-dropdown">' + '<span class="select2-results"></span>' + '</span>' ); $dropdown.attr('dir', this.options.get('dir')); this.$dropdown = $dropdown; return $dropdown; }; Dropdown.prototype.bind = function () { // Should be implemented in subclasses }; Dropdown.prototype.position = function ($dropdown, $container) { // Should be implemented in subclasses }; Dropdown.prototype.destroy = function () { // Remove the dropdown from the DOM this.$dropdown.remove(); }; return Dropdown; }); S2.define('select2/dropdown/search',[ 'jquery' ], function ($) { function Search () { } Search.prototype.render = function (decorated) { var $rendered = decorated.call(this); var $search = $( '<span class="select2-search select2-search--dropdown">' + '<input class="select2-search__field" type="search" tabindex="-1"' + ' autocorrect="off" autocapitalize="none"' + ' spellcheck="false" role="searchbox" aria-autocomplete="list" />' + '</span>' ); this.$searchContainer = $search; this.$search = $search.find('input'); this.$search.prop('autocomplete', this.options.get('autocomplete')); $rendered.prepend($search); return $rendered; }; Search.prototype.bind = function (decorated, container, $container) { var self = this; var resultsId = container.id + '-results'; decorated.call(this, container, $container); this.$search.on('keydown', function (evt) { self.trigger('keypress', evt); self._keyUpPrevented = evt.isDefaultPrevented(); }); // Workaround for browsers which do not support the `input` event // This will prevent double-triggering of events for browsers which support // both the `keyup` and `input` events. this.$search.on('input', function (evt) { // Unbind the duplicated `keyup` event $(this).off('keyup'); }); this.$search.on('keyup input', function (evt) { self.handleSearch(evt); }); container.on('open', function () { self.$search.attr('tabindex', 0); self.$search.attr('aria-controls', resultsId); self.$search.trigger('focus'); window.setTimeout(function () { self.$search.trigger('focus'); }, 0); }); container.on('close', function () { self.$search.attr('tabindex', -1); self.$search.removeAttr('aria-controls'); self.$search.removeAttr('aria-activedescendant'); self.$search.val(''); self.$search.trigger('blur'); }); container.on('focus', function () { if (!container.isOpen()) { self.$search.trigger('focus'); } }); container.on('results:all', function (params) { if (params.query.term == null || params.query.term === '') { var showSearch = self.showSearch(params); if (showSearch) { self.$searchContainer[0].classList.remove('select2-search--hide'); } else { self.$searchContainer[0].classList.add('select2-search--hide'); } } }); container.on('results:focus', function (params) { if (params.data._resultId) { self.$search.attr('aria-activedescendant', params.data._resultId); } else { self.$search.removeAttr('aria-activedescendant'); } }); }; Search.prototype.handleSearch = function (evt) { if (!this._keyUpPrevented) { var input = this.$search.val(); this.trigger('query', { term: input }); } this._keyUpPrevented = false; }; Search.prototype.showSearch = function (_, params) { return true; }; return Search; }); S2.define('select2/dropdown/hidePlaceholder',[ ], function () { function HidePlaceholder (decorated, $element, options, dataAdapter) { this.placeholder = this.normalizePlaceholder(options.get('placeholder')); decorated.call(this, $element, options, dataAdapter); } HidePlaceholder.prototype.append = function (decorated, data) { data.results = this.removePlaceholder(data.results); decorated.call(this, data); }; HidePlaceholder.prototype.normalizePlaceholder = function (_, placeholder) { if (typeof placeholder === 'string') { placeholder = { id: '', text: placeholder }; } return placeholder; }; HidePlaceholder.prototype.removePlaceholder = function (_, data) { var modifiedData = data.slice(0); for (var d = data.length - 1; d >= 0; d--) { var item = data[d]; if (this.placeholder.id === item.id) { modifiedData.splice(d, 1); } } return modifiedData; }; return HidePlaceholder; }); S2.define('select2/dropdown/infiniteScroll',[ 'jquery' ], function ($) { function InfiniteScroll (decorated, $element, options, dataAdapter) { this.lastParams = {}; decorated.call(this, $element, options, dataAdapter); this.$loadingMore = this.createLoadingMore(); this.loading = false; } InfiniteScroll.prototype.append = function (decorated, data) { this.$loadingMore.remove(); this.loading = false; decorated.call(this, data); if (this.showLoadingMore(data)) { this.$results.append(this.$loadingMore); this.loadMoreIfNeeded(); } }; InfiniteScroll.prototype.bind = function (decorated, container, $container) { var self = this; decorated.call(this, container, $container); container.on('query', function (params) { self.lastParams = params; self.loading = true; }); container.on('query:append', function (params) { self.lastParams = params; self.loading = true; }); this.$results.on('scroll', this.loadMoreIfNeeded.bind(this)); }; InfiniteScroll.prototype.loadMoreIfNeeded = function () { var isLoadMoreVisible = $.contains( document.documentElement, this.$loadingMore[0] ); if (this.loading || !isLoadMoreVisible) { return; } var currentOffset = this.$results.offset().top + this.$results.outerHeight(false); var loadingMoreOffset = this.$loadingMore.offset().top + this.$loadingMore.outerHeight(false); if (currentOffset + 50 >= loadingMoreOffset) { this.loadMore(); } }; InfiniteScroll.prototype.loadMore = function () { this.loading = true; var params = $.extend({}, {page: 1}, this.lastParams); params.page++; this.trigger('query:append', params); }; InfiniteScroll.prototype.showLoadingMore = function (_, data) { return data.pagination && data.pagination.more; }; InfiniteScroll.prototype.createLoadingMore = function () { var $option = $( '<li ' + 'class="select2-results__option select2-results__option--load-more"' + 'role="option" aria-disabled="true"></li>' ); var message = this.options.get('translations').get('loadingMore'); $option.html(message(this.lastParams)); return $option; }; return InfiniteScroll; }); S2.define('select2/dropdown/attachBody',[ 'jquery', '../utils' ], function ($, Utils) { function AttachBody (decorated, $element, options) { this.$dropdownParent = $(options.get('dropdownParent') || document.body); decorated.call(this, $element, options); } AttachBody.prototype.bind = function (decorated, container, $container) { var self = this; decorated.call(this, container, $container); container.on('open', function () { self._showDropdown(); self._attachPositioningHandler(container); // Must bind after the results handlers to ensure correct sizing self._bindContainerResultHandlers(container); }); container.on('close', function () { self._hideDropdown(); self._detachPositioningHandler(container); }); this.$dropdownContainer.on('mousedown', function (evt) { evt.stopPropagation(); }); }; AttachBody.prototype.destroy = function (decorated) { decorated.call(this); this.$dropdownContainer.remove(); }; AttachBody.prototype.position = function (decorated, $dropdown, $container) { // Clone all of the container classes $dropdown.attr('class', $container.attr('class')); $dropdown[0].classList.remove('select2'); $dropdown[0].classList.add('select2-container--open'); $dropdown.css({ position: 'absolute', top: -999999 }); this.$container = $container; }; AttachBody.prototype.render = function (decorated) { var $container = $('<span></span>'); var $dropdown = decorated.call(this); $container.append($dropdown); this.$dropdownContainer = $container; return $container; }; AttachBody.prototype._hideDropdown = function (decorated) { this.$dropdownContainer.detach(); }; AttachBody.prototype._bindContainerResultHandlers = function (decorated, container) { // These should only be bound once if (this._containerResultsHandlersBound) { return; } var self = this; container.on('results:all', function () { self._positionDropdown(); self._resizeDropdown(); }); container.on('results:append', function () { self._positionDropdown(); self._resizeDropdown(); }); container.on('results:message', function () { self._positionDropdown(); self._resizeDropdown(); }); container.on('select', function () { self._positionDropdown(); self._resizeDropdown(); }); container.on('unselect', function () { self._positionDropdown(); self._resizeDropdown(); }); this._containerResultsHandlersBound = true; }; AttachBody.prototype._attachPositioningHandler = function (decorated, container) { var self = this; var scrollEvent = 'scroll.select2.' + container.id; var resizeEvent = 'resize.select2.' + container.id; var orientationEvent = 'orientationchange.select2.' + container.id; var $watchers = this.$container.parents().filter(Utils.hasScroll); $watchers.each(function () { Utils.StoreData(this, 'select2-scroll-position', { x: $(this).scrollLeft(), y: $(this).scrollTop() }); }); $watchers.on(scrollEvent, function (ev) { var position = Utils.GetData(this, 'select2-scroll-position'); $(this).scrollTop(position.y); }); $(window).on(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent, function (e) { self._positionDropdown(); self._resizeDropdown(); }); }; AttachBody.prototype._detachPositioningHandler = function (decorated, container) { var scrollEvent = 'scroll.select2.' + container.id; var resizeEvent = 'resize.select2.' + container.id; var orientationEvent = 'orientationchange.select2.' + container.id; var $watchers = this.$container.parents().filter(Utils.hasScroll); $watchers.off(scrollEvent); $(window).off(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent); }; AttachBody.prototype._positionDropdown = function () { var $window = $(window); var isCurrentlyAbove = this.$dropdown[0].classList .contains('select2-dropdown--above'); var isCurrentlyBelow = this.$dropdown[0].classList .contains('select2-dropdown--below'); var newDirection = null; var offset = this.$container.offset(); offset.bottom = offset.top + this.$container.outerHeight(false); var container = { height: this.$container.outerHeight(false) }; container.top = offset.top; container.bottom = offset.top + container.height; var dropdown = { height: this.$dropdown.outerHeight(false) }; var viewport = { top: $window.scrollTop(), bottom: $window.scrollTop() + $window.height() }; var enoughRoomAbove = viewport.top < (offset.top - dropdown.height); var enoughRoomBelow = viewport.bottom > (offset.bottom + dropdown.height); var css = { left: offset.left, top: container.bottom }; // Determine what the parent element is to use for calculating the offset var $offsetParent = this.$dropdownParent; // For statically positioned elements, we need to get the element // that is determining the offset if ($offsetParent.css('position') === 'static') { $offsetParent = $offsetParent.offsetParent(); } var parentOffset = { top: 0, left: 0 }; if ( $.contains(document.body, $offsetParent[0]) || $offsetParent[0].isConnected ) { parentOffset = $offsetParent.offset(); } css.top -= parentOffset.top; css.left -= parentOffset.left; if (!isCurrentlyAbove && !isCurrentlyBelow) { newDirection = 'below'; } if (!enoughRoomBelow && enoughRoomAbove && !isCurrentlyAbove) { newDirection = 'above'; } else if (!enoughRoomAbove && enoughRoomBelow && isCurrentlyAbove) { newDirection = 'below'; } if (newDirection == 'above' || (isCurrentlyAbove && newDirection !== 'below')) { css.top = container.top - parentOffset.top - dropdown.height; } if (newDirection != null) { this.$dropdown[0].classList.remove('select2-dropdown--below'); this.$dropdown[0].classList.remove('select2-dropdown--above'); this.$dropdown[0].classList.add('select2-dropdown--' + newDirection); this.$container[0].classList.remove('select2-container--below'); this.$container[0].classList.remove('select2-container--above'); this.$container[0].classList.add('select2-container--' + newDirection); } this.$dropdownContainer.css(css); }; AttachBody.prototype._resizeDropdown = function () { var css = { width: this.$container.outerWidth(false) + 'px' }; if (this.options.get('dropdownAutoWidth')) { css.minWidth = css.width; css.position = 'relative'; css.width = 'auto'; } this.$dropdown.css(css); }; AttachBody.prototype._showDropdown = function (decorated) { this.$dropdownContainer.appendTo(this.$dropdownParent); this._positionDropdown(); this._resizeDropdown(); }; return AttachBody; }); S2.define('select2/dropdown/minimumResultsForSearch',[ ], function () { function countResults (data) { var count = 0; for (var d = 0; d < data.length; d++) { var item = data[d]; if (item.children) { count += countResults(item.children); } else { count++; } } return count; } function MinimumResultsForSearch (decorated, $element, options, dataAdapter) { this.minimumResultsForSearch = options.get('minimumResultsForSearch'); if (this.minimumResultsForSearch < 0) { this.minimumResultsForSearch = Infinity; } decorated.call(this, $element, options, dataAdapter); } MinimumResultsForSearch.prototype.showSearch = function (decorated, params) { if (countResults(params.data.results) < this.minimumResultsForSearch) { return false; } return decorated.call(this, params); }; return MinimumResultsForSearch; }); S2.define('select2/dropdown/selectOnClose',[ '../utils' ], function (Utils) { function SelectOnClose () { } SelectOnClose.prototype.bind = function (decorated, container, $container) { var self = this; decorated.call(this, container, $container); container.on('close', function (params) { self._handleSelectOnClose(params); }); }; SelectOnClose.prototype._handleSelectOnClose = function (_, params) { if (params && params.originalSelect2Event != null) { var event = params.originalSelect2Event; // Don't select an item if the close event was triggered from a select or // unselect event if (event._type === 'select' || event._type === 'unselect') { return; } } var $highlightedResults = this.getHighlightedResults(); // Only select highlighted results if ($highlightedResults.length < 1) { return; } var data = Utils.GetData($highlightedResults[0], 'data'); // Don't re-select already selected resulte if ( (data.element != null && data.element.selected) || (data.element == null && data.selected) ) { return; } this.trigger('select', { data: data }); }; return SelectOnClose; }); S2.define('select2/dropdown/closeOnSelect',[ ], function () { function CloseOnSelect () { } CloseOnSelect.prototype.bind = function (decorated, container, $container) { var self = this; decorated.call(this, container, $container); container.on('select', function (evt) { self._selectTriggered(evt); }); container.on('unselect', function (evt) { self._selectTriggered(evt); }); }; CloseOnSelect.prototype._selectTriggered = function (_, evt) { var originalEvent = evt.originalEvent; // Don't close if the control key is being held if (originalEvent && (originalEvent.ctrlKey || originalEvent.metaKey)) { return; } this.trigger('close', { originalEvent: originalEvent, originalSelect2Event: evt }); }; return CloseOnSelect; }); S2.define('select2/dropdown/dropdownCss',[ '../utils' ], function (Utils) { function DropdownCSS () { } DropdownCSS.prototype.render = function (decorated) { var $dropdown = decorated.call(this); var dropdownCssClass = this.options.get('dropdownCssClass') || ''; if (dropdownCssClass.indexOf(':all:') !== -1) { dropdownCssClass = dropdownCssClass.replace(':all:', ''); Utils.copyNonInternalCssClasses($dropdown[0], this.$element[0]); } $dropdown.addClass(dropdownCssClass); return $dropdown; }; return DropdownCSS; }); S2.define('select2/i18n/en',[],function () { // English return { errorLoading: function () { return 'The results could not be loaded.'; }, inputTooLong: function (args) { var overChars = args.input.length - args.maximum; var message = 'Please delete ' + overChars + ' character'; if (overChars != 1) { message += 's'; } return message; }, inputTooShort: function (args) { var remainingChars = args.minimum - args.input.length; var message = 'Please enter ' + remainingChars + ' or more characters'; return message; }, loadingMore: function () { return 'Loading more results…'; }, maximumSelected: function (args) { var message = 'You can only select ' + args.maximum + ' item'; if (args.maximum != 1) { message += 's'; } return message; }, noResults: function () { return 'No results found'; }, searching: function () { return 'Searching…'; }, removeAllItems: function () { return 'Remove all items'; }, removeItem: function () { return 'Remove item'; } }; }); S2.define('select2/defaults',[ 'jquery', './results', './selection/single', './selection/multiple', './selection/placeholder', './selection/allowClear', './selection/search', './selection/selectionCss', './selection/eventRelay', './utils', './translation', './diacritics', './data/select', './data/array', './data/ajax', './data/tags', './data/tokenizer', './data/minimumInputLength', './data/maximumInputLength', './data/maximumSelectionLength', './dropdown', './dropdown/search', './dropdown/hidePlaceholder', './dropdown/infiniteScroll', './dropdown/attachBody', './dropdown/minimumResultsForSearch', './dropdown/selectOnClose', './dropdown/closeOnSelect', './dropdown/dropdownCss', './i18n/en' ], function ($, ResultsList, SingleSelection, MultipleSelection, Placeholder, AllowClear, SelectionSearch, SelectionCSS, EventRelay, Utils, Translation, DIACRITICS, SelectData, ArrayData, AjaxData, Tags, Tokenizer, MinimumInputLength, MaximumInputLength, MaximumSelectionLength, Dropdown, DropdownSearch, HidePlaceholder, InfiniteScroll, AttachBody, MinimumResultsForSearch, SelectOnClose, CloseOnSelect, DropdownCSS, EnglishTranslation) { function Defaults () { this.reset(); } Defaults.prototype.apply = function (options) { options = $.extend(true, {}, this.defaults, options); if (options.dataAdapter == null) { if (options.ajax != null) { options.dataAdapter = AjaxData; } else if (options.data != null) { options.dataAdapter = ArrayData; } else { options.dataAdapter = SelectData; } if (options.minimumInputLength > 0) { options.dataAdapter = Utils.Decorate( options.dataAdapter, MinimumInputLength ); } if (options.maximumInputLength > 0) { options.dataAdapter = Utils.Decorate( options.dataAdapter, MaximumInputLength ); } if (options.maximumSelectionLength > 0) { options.dataAdapter = Utils.Decorate( options.dataAdapter, MaximumSelectionLength ); } if (options.tags) { options.dataAdapter = Utils.Decorate(options.dataAdapter, Tags); } if (options.tokenSeparators != null || options.tokenizer != null) { options.dataAdapter = Utils.Decorate( options.dataAdapter, Tokenizer ); } } if (options.resultsAdapter == null) { options.resultsAdapter = ResultsList; if (options.ajax != null) { options.resultsAdapter = Utils.Decorate( options.resultsAdapter, InfiniteScroll ); } if (options.placeholder != null) { options.resultsAdapter = Utils.Decorate( options.resultsAdapter, HidePlaceholder ); } if (options.selectOnClose) { options.resultsAdapter = Utils.Decorate( options.resultsAdapter, SelectOnClose ); } } if (options.dropdownAdapter == null) { if (options.multiple) { options.dropdownAdapter = Dropdown; } else { var SearchableDropdown = Utils.Decorate(Dropdown, DropdownSearch); options.dropdownAdapter = SearchableDropdown; } if (options.minimumResultsForSearch !== 0) { options.dropdownAdapter = Utils.Decorate( options.dropdownAdapter, MinimumResultsForSearch ); } if (options.closeOnSelect) { options.dropdownAdapter = Utils.Decorate( options.dropdownAdapter, CloseOnSelect ); } if (options.dropdownCssClass != null) { options.dropdownAdapter = Utils.Decorate( options.dropdownAdapter, DropdownCSS ); } options.dropdownAdapter = Utils.Decorate( options.dropdownAdapter, AttachBody ); } if (options.selectionAdapter == null) { if (options.multiple) { options.selectionAdapter = MultipleSelection; } else { options.selectionAdapter = SingleSelection; } // Add the placeholder mixin if a placeholder was specified if (options.placeholder != null) { options.selectionAdapter = Utils.Decorate( options.selectionAdapter, Placeholder ); } if (options.allowClear) { options.selectionAdapter = Utils.Decorate( options.selectionAdapter, AllowClear ); } if (options.multiple) { options.selectionAdapter = Utils.Decorate( options.selectionAdapter, SelectionSearch ); } if (options.selectionCssClass != null) { options.selectionAdapter = Utils.Decorate( options.selectionAdapter, SelectionCSS ); } options.selectionAdapter = Utils.Decorate( options.selectionAdapter, EventRelay ); } // If the defaults were not previously applied from an element, it is // possible for the language option to have not been resolved options.language = this._resolveLanguage(options.language); // Always fall back to English since it will always be complete options.language.push('en'); var uniqueLanguages = []; for (var l = 0; l < options.language.length; l++) { var language = options.language[l]; if (uniqueLanguages.indexOf(language) === -1) { uniqueLanguages.push(language); } } options.language = uniqueLanguages; options.translations = this._processTranslations( options.language, options.debug ); return options; }; Defaults.prototype.reset = function () { function stripDiacritics (text) { // Used 'uni range + named function' from http://jsperf.com/diacritics/18 function match(a) { return DIACRITICS[a] || a; } return text.replace(/[^\u0000-\u007E]/g, match); } function matcher (params, data) { // Always return the object if there is nothing to compare if (params.term == null || params.term.trim() === '') { return data; } // Do a recursive check for options with children if (data.children && data.children.length > 0) { // Clone the data object if there are children // This is required as we modify the object to remove any non-matches var match = $.extend(true, {}, data); // Check each child of the option for (var c = data.children.length - 1; c >= 0; c--) { var child = data.children[c]; var matches = matcher(params, child); // If there wasn't a match, remove the object in the array if (matches == null) { match.children.splice(c, 1); } } // If any children matched, return the new object if (match.children.length > 0) { return match; } // If there were no matching children, check just the plain object return matcher(params, match); } var original = stripDiacritics(data.text).toUpperCase(); var term = stripDiacritics(params.term).toUpperCase(); // Check if the text contains the term if (original.indexOf(term) > -1) { return data; } // If it doesn't contain the term, don't return anything return null; } this.defaults = { amdLanguageBase: './i18n/', autocomplete: 'off', closeOnSelect: true, debug: false, dropdownAutoWidth: false, escapeMarkup: Utils.escapeMarkup, language: {}, matcher: matcher, minimumInputLength: 0, maximumInputLength: 0, maximumSelectionLength: 0, minimumResultsForSearch: 0, selectOnClose: false, scrollAfterSelect: false, sorter: function (data) { return data; }, templateResult: function (result) { return result.text; }, templateSelection: function (selection) { return selection.text; }, theme: 'default', width: 'resolve' }; }; Defaults.prototype.applyFromElement = function (options, $element) { var optionLanguage = options.language; var defaultLanguage = this.defaults.language; var elementLanguage = $element.prop('lang'); var parentLanguage = $element.closest('[lang]').prop('lang'); var languages = Array.prototype.concat.call( this._resolveLanguage(elementLanguage), this._resolveLanguage(optionLanguage), this._resolveLanguage(defaultLanguage), this._resolveLanguage(parentLanguage) ); options.language = languages; return options; }; Defaults.prototype._resolveLanguage = function (language) { if (!language) { return []; } if ($.isEmptyObject(language)) { return []; } if ($.isPlainObject(language)) { return [language]; } var languages; if (!Array.isArray(language)) { languages = [language]; } else { languages = language; } var resolvedLanguages = []; for (var l = 0; l < languages.length; l++) { resolvedLanguages.push(languages[l]); if (typeof languages[l] === 'string' && languages[l].indexOf('-') > 0) { // Extract the region information if it is included var languageParts = languages[l].split('-'); var baseLanguage = languageParts[0]; resolvedLanguages.push(baseLanguage); } } return resolvedLanguages; }; Defaults.prototype._processTranslations = function (languages, debug) { var translations = new Translation(); for (var l = 0; l < languages.length; l++) { var languageData = new Translation(); var language = languages[l]; if (typeof language === 'string') { try { // Try to load it with the original name languageData = Translation.loadPath(language); } catch (e) { try { // If we couldn't load it, check if it wasn't the full path language = this.defaults.amdLanguageBase + language; languageData = Translation.loadPath(language); } catch (ex) { // The translation could not be loaded at all. Sometimes this is // because of a configuration problem, other times this can be // because of how Select2 helps load all possible translation files if (debug && window.console && console.warn) { console.warn( 'Select2: The language file for "' + language + '" could ' + 'not be automatically loaded. A fallback will be used instead.' ); } } } } else if ($.isPlainObject(language)) { languageData = new Translation(language); } else { languageData = language; } translations.extend(languageData); } return translations; }; Defaults.prototype.set = function (key, value) { var camelKey = $.camelCase(key); var data = {}; data[camelKey] = value; var convertedData = Utils._convertData(data); $.extend(true, this.defaults, convertedData); }; var defaults = new Defaults(); return defaults; }); S2.define('select2/options',[ 'jquery', './defaults', './utils' ], function ($, Defaults, Utils) { function Options (options, $element) { this.options = options; if ($element != null) { this.fromElement($element); } if ($element != null) { this.options = Defaults.applyFromElement(this.options, $element); } this.options = Defaults.apply(this.options); } Options.prototype.fromElement = function ($e) { var excludedData = ['select2']; if (this.options.multiple == null) { this.options.multiple = $e.prop('multiple'); } if (this.options.disabled == null) { this.options.disabled = $e.prop('disabled'); } if (this.options.autocomplete == null && $e.prop('autocomplete')) { this.options.autocomplete = $e.prop('autocomplete'); } if (this.options.dir == null) { if ($e.prop('dir')) { this.options.dir = $e.prop('dir'); } else if ($e.closest('[dir]').prop('dir')) { this.options.dir = $e.closest('[dir]').prop('dir'); } else { this.options.dir = 'ltr'; } } $e.prop('disabled', this.options.disabled); $e.prop('multiple', this.options.multiple); if (Utils.GetData($e[0], 'select2Tags')) { if (this.options.debug && window.console && console.warn) { console.warn( 'Select2: The `data-select2-tags` attribute has been changed to ' + 'use the `data-data` and `data-tags="true"` attributes and will be ' + 'removed in future versions of Select2.' ); } Utils.StoreData($e[0], 'data', Utils.GetData($e[0], 'select2Tags')); Utils.StoreData($e[0], 'tags', true); } if (Utils.GetData($e[0], 'ajaxUrl')) { if (this.options.debug && window.console && console.warn) { console.warn( 'Select2: The `data-ajax-url` attribute has been changed to ' + '`data-ajax--url` and support for the old attribute will be removed' + ' in future versions of Select2.' ); } $e.attr('ajax--url', Utils.GetData($e[0], 'ajaxUrl')); Utils.StoreData($e[0], 'ajax-Url', Utils.GetData($e[0], 'ajaxUrl')); } var dataset = {}; function upperCaseLetter(_, letter) { return letter.toUpperCase(); } // Pre-load all of the attributes which are prefixed with `data-` for (var attr = 0; attr < $e[0].attributes.length; attr++) { var attributeName = $e[0].attributes[attr].name; var prefix = 'data-'; if (attributeName.substr(0, prefix.length) == prefix) { // Get the contents of the attribute after `data-` var dataName = attributeName.substring(prefix.length); // Get the data contents from the consistent source // This is more than likely the jQuery data helper var dataValue = Utils.GetData($e[0], dataName); // camelCase the attribute name to match the spec var camelDataName = dataName.replace(/-([a-z])/g, upperCaseLetter); // Store the data attribute contents into the dataset since dataset[camelDataName] = dataValue; } } // Prefer the element's `dataset` attribute if it exists // jQuery 1.x does not correctly handle data attributes with multiple dashes if ($.fn.jquery && $.fn.jquery.substr(0, 2) == '1.' && $e[0].dataset) { dataset = $.extend(true, {}, $e[0].dataset, dataset); } // Prefer our internal data cache if it exists var data = $.extend(true, {}, Utils.GetData($e[0]), dataset); data = Utils._convertData(data); for (var key in data) { if (excludedData.indexOf(key) > -1) { continue; } if ($.isPlainObject(this.options[key])) { $.extend(this.options[key], data[key]); } else { this.options[key] = data[key]; } } return this; }; Options.prototype.get = function (key) { return this.options[key]; }; Options.prototype.set = function (key, val) { this.options[key] = val; }; return Options; }); S2.define('select2/core',[ 'jquery', './options', './utils', './keys' ], function ($, Options, Utils, KEYS) { var Select2 = function ($element, options) { if (Utils.GetData($element[0], 'select2') != null) { Utils.GetData($element[0], 'select2').destroy(); } this.$element = $element; this.id = this._generateId($element); options = options || {}; this.options = new Options(options, $element); Select2.__super__.constructor.call(this); // Set up the tabindex var tabindex = $element.attr('tabindex') || 0; Utils.StoreData($element[0], 'old-tabindex', tabindex); $element.attr('tabindex', '-1'); // Set up containers and adapters var DataAdapter = this.options.get('dataAdapter'); this.dataAdapter = new DataAdapter($element, this.options); var $container = this.render(); this._placeContainer($container); var SelectionAdapter = this.options.get('selectionAdapter'); this.selection = new SelectionAdapter($element, this.options); this.$selection = this.selection.render(); this.selection.position(this.$selection, $container); var DropdownAdapter = this.options.get('dropdownAdapter'); this.dropdown = new DropdownAdapter($element, this.options); this.$dropdown = this.dropdown.render(); this.dropdown.position(this.$dropdown, $container); var ResultsAdapter = this.options.get('resultsAdapter'); this.results = new ResultsAdapter($element, this.options, this.dataAdapter); this.$results = this.results.render(); this.results.position(this.$results, this.$dropdown); // Bind events var self = this; // Bind the container to all of the adapters this._bindAdapters(); // Register any DOM event handlers this._registerDomEvents(); // Register any internal event handlers this._registerDataEvents(); this._registerSelectionEvents(); this._registerDropdownEvents(); this._registerResultsEvents(); this._registerEvents(); // Set the initial state this.dataAdapter.current(function (initialData) { self.trigger('selection:update', { data: initialData }); }); // Hide the original select $element[0].classList.add('select2-hidden-accessible'); $element.attr('aria-hidden', 'true'); // Synchronize any monitored attributes this._syncAttributes(); Utils.StoreData($element[0], 'select2', this); // Ensure backwards compatibility with $element.data('select2'). $element.data('select2', this); }; Utils.Extend(Select2, Utils.Observable); Select2.prototype._generateId = function ($element) { var id = ''; if ($element.attr('id') != null) { id = $element.attr('id'); } else if ($element.attr('name') != null) { id = $element.attr('name') + '-' + Utils.generateChars(2); } else { id = Utils.generateChars(4); } id = id.replace(/(:|\.|\[|\]|,)/g, ''); id = 'select2-' + id; return id; }; Select2.prototype._placeContainer = function ($container) { $container.insertAfter(this.$element); var width = this._resolveWidth(this.$element, this.options.get('width')); if (width != null) { $container.css('width', width); } }; Select2.prototype._resolveWidth = function ($element, method) { var WIDTH = /^width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i; if (method == 'resolve') { var styleWidth = this._resolveWidth($element, 'style'); if (styleWidth != null) { return styleWidth; } return this._resolveWidth($element, 'element'); } if (method == 'element') { var elementWidth = $element.outerWidth(false); if (elementWidth <= 0) { return 'auto'; } return elementWidth + 'px'; } if (method == 'style') { var style = $element.attr('style'); if (typeof(style) !== 'string') { return null; } var attrs = style.split(';'); for (var i = 0, l = attrs.length; i < l; i = i + 1) { var attr = attrs[i].replace(/\s/g, ''); var matches = attr.match(WIDTH); if (matches !== null && matches.length >= 1) { return matches[1]; } } return null; } if (method == 'computedstyle') { var computedStyle = window.getComputedStyle($element[0]); return computedStyle.width; } return method; }; Select2.prototype._bindAdapters = function () { this.dataAdapter.bind(this, this.$container); this.selection.bind(this, this.$container); this.dropdown.bind(this, this.$container); this.results.bind(this, this.$container); }; Select2.prototype._registerDomEvents = function () { var self = this; this.$element.on('change.select2', function () { self.dataAdapter.current(function (data) { self.trigger('selection:update', { data: data }); }); }); this.$element.on('focus.select2', function (evt) { self.trigger('focus', evt); }); this._syncA = Utils.bind(this._syncAttributes, this); this._syncS = Utils.bind(this._syncSubtree, this); this._observer = new window.MutationObserver(function (mutations) { self._syncA(); self._syncS(mutations); }); this._observer.observe(this.$element[0], { attributes: true, childList: true, subtree: false }); }; Select2.prototype._registerDataEvents = function () { var self = this; this.dataAdapter.on('*', function (name, params) { self.trigger(name, params); }); }; Select2.prototype._registerSelectionEvents = function () { var self = this; var nonRelayEvents = ['toggle', 'focus']; this.selection.on('toggle', function () { self.toggleDropdown(); }); this.selection.on('focus', function (params) { self.focus(params); }); this.selection.on('*', function (name, params) { if (nonRelayEvents.indexOf(name) !== -1) { return; } self.trigger(name, params); }); }; Select2.prototype._registerDropdownEvents = function () { var self = this; this.dropdown.on('*', function (name, params) { self.trigger(name, params); }); }; Select2.prototype._registerResultsEvents = function () { var self = this; this.results.on('*', function (name, params) { self.trigger(name, params); }); }; Select2.prototype._registerEvents = function () { var self = this; this.on('open', function () { self.$container[0].classList.add('select2-container--open'); }); this.on('close', function () { self.$container[0].classList.remove('select2-container--open'); }); this.on('enable', function () { self.$container[0].classList.remove('select2-container--disabled'); }); this.on('disable', function () { self.$container[0].classList.add('select2-container--disabled'); }); this.on('blur', function () { self.$container[0].classList.remove('select2-container--focus'); }); this.on('query', function (params) { if (!self.isOpen()) { self.trigger('open', {}); } this.dataAdapter.query(params, function (data) { self.trigger('results:all', { data: data, query: params }); }); }); this.on('query:append', function (params) { this.dataAdapter.query(params, function (data) { self.trigger('results:append', { data: data, query: params }); }); }); this.on('keypress', function (evt) { var key = evt.which; if (self.isOpen()) { if (key === KEYS.ESC || key === KEYS.TAB || (key === KEYS.UP && evt.altKey)) { self.close(evt); evt.preventDefault(); } else if (key === KEYS.ENTER) { self.trigger('results:select', {}); evt.preventDefault(); } else if ((key === KEYS.SPACE && evt.ctrlKey)) { self.trigger('results:toggle', {}); evt.preventDefault(); } else if (key === KEYS.UP) { self.trigger('results:previous', {}); evt.preventDefault(); } else if (key === KEYS.DOWN) { self.trigger('results:next', {}); evt.preventDefault(); } } else { if (key === KEYS.ENTER || key === KEYS.SPACE || (key === KEYS.DOWN && evt.altKey)) { self.open(); evt.preventDefault(); } } }); }; Select2.prototype._syncAttributes = function () { this.options.set('disabled', this.$element.prop('disabled')); if (this.isDisabled()) { if (this.isOpen()) { this.close(); } this.trigger('disable', {}); } else { this.trigger('enable', {}); } }; Select2.prototype._isChangeMutation = function (mutations) { var self = this; if (mutations.addedNodes && mutations.addedNodes.length > 0) { for (var n = 0; n < mutations.addedNodes.length; n++) { var node = mutations.addedNodes[n]; if (node.selected) { return true; } } } else if (mutations.removedNodes && mutations.removedNodes.length > 0) { return true; } else if (Array.isArray(mutations)) { return mutations.some(function (mutation) { return self._isChangeMutation(mutation); }); } return false; }; Select2.prototype._syncSubtree = function (mutations) { var changed = this._isChangeMutation(mutations); var self = this; // Only re-pull the data if we think there is a change if (changed) { this.dataAdapter.current(function (currentData) { self.trigger('selection:update', { data: currentData }); }); } }; /** * Override the trigger method to automatically trigger pre-events when * there are events that can be prevented. */ Select2.prototype.trigger = function (name, args) { var actualTrigger = Select2.__super__.trigger; var preTriggerMap = { 'open': 'opening', 'close': 'closing', 'select': 'selecting', 'unselect': 'unselecting', 'clear': 'clearing' }; if (args === undefined) { args = {}; } if (name in preTriggerMap) { var preTriggerName = preTriggerMap[name]; var preTriggerArgs = { prevented: false, name: name, args: args }; actualTrigger.call(this, preTriggerName, preTriggerArgs); if (preTriggerArgs.prevented) { args.prevented = true; return; } } actualTrigger.call(this, name, args); }; Select2.prototype.toggleDropdown = function () { if (this.isDisabled()) { return; } if (this.isOpen()) { this.close(); } else { this.open(); } }; Select2.prototype.open = function () { if (this.isOpen()) { return; } if (this.isDisabled()) { return; } this.trigger('query', {}); }; Select2.prototype.close = function (evt) { if (!this.isOpen()) { return; } this.trigger('close', { originalEvent : evt }); }; /** * Helper method to abstract the "enabled" (not "disabled") state of this * object. * * @return {true} if the instance is not disabled. * @return {false} if the instance is disabled. */ Select2.prototype.isEnabled = function () { return !this.isDisabled(); }; /** * Helper method to abstract the "disabled" state of this object. * * @return {true} if the disabled option is true. * @return {false} if the disabled option is false. */ Select2.prototype.isDisabled = function () { return this.options.get('disabled'); }; Select2.prototype.isOpen = function () { return this.$container[0].classList.contains('select2-container--open'); }; Select2.prototype.hasFocus = function () { return this.$container[0].classList.contains('select2-container--focus'); }; Select2.prototype.focus = function (data) { // No need to re-trigger focus events if we are already focused if (this.hasFocus()) { return; } this.$container[0].classList.add('select2-container--focus'); this.trigger('focus', {}); }; Select2.prototype.enable = function (args) { if (this.options.get('debug') && window.console && console.warn) { console.warn( 'Select2: The `select2("enable")` method has been deprecated and will' + ' be removed in later Select2 versions. Use $element.prop("disabled")' + ' instead.' ); } if (args == null || args.length === 0) { args = [true]; } var disabled = !args[0]; this.$element.prop('disabled', disabled); }; Select2.prototype.data = function () { if (this.options.get('debug') && arguments.length > 0 && window.console && console.warn) { console.warn( 'Select2: Data can no longer be set using `select2("data")`. You ' + 'should consider setting the value instead using `$element.val()`.' ); } var data = []; this.dataAdapter.current(function (currentData) { data = currentData; }); return data; }; Select2.prototype.val = function (args) { if (this.options.get('debug') && window.console && console.warn) { console.warn( 'Select2: The `select2("val")` method has been deprecated and will be' + ' removed in later Select2 versions. Use $element.val() instead.' ); } if (args == null || args.length === 0) { return this.$element.val(); } var newVal = args[0]; if (Array.isArray(newVal)) { newVal = newVal.map(function (obj) { return obj.toString(); }); } this.$element.val(newVal).trigger('input').trigger('change'); }; Select2.prototype.destroy = function () { this.$container.remove(); this._observer.disconnect(); this._observer = null; this._syncA = null; this._syncS = null; this.$element.off('.select2'); this.$element.attr('tabindex', Utils.GetData(this.$element[0], 'old-tabindex')); this.$element[0].classList.remove('select2-hidden-accessible'); this.$element.attr('aria-hidden', 'false'); Utils.RemoveData(this.$element[0]); this.$element.removeData('select2'); this.dataAdapter.destroy(); this.selection.destroy(); this.dropdown.destroy(); this.results.destroy(); this.dataAdapter = null; this.selection = null; this.dropdown = null; this.results = null; }; Select2.prototype.render = function () { var $container = $( '<span class="select2 select2-container">' + '<span class="selection"></span>' + '<span class="dropdown-wrapper" aria-hidden="true"></span>' + '</span>' ); $container.attr('dir', this.options.get('dir')); this.$container = $container; this.$container[0].classList .add('select2-container--' + this.options.get('theme')); Utils.StoreData($container[0], 'element', this.$element); return $container; }; return Select2; }); S2.define('jquery-mousewheel',[ 'jquery' ], function ($) { // Used to shim jQuery.mousewheel for non-full builds. return $; }); S2.define('jquery.select2',[ 'jquery', 'jquery-mousewheel', './select2/core', './select2/defaults', './select2/utils' ], function ($, _, Select2, Defaults, Utils) { if ($.fn.select2 == null) { // All methods that should return the element var thisMethods = ['open', 'close', 'destroy']; $.fn.select2 = function (options) { options = options || {}; if (typeof options === 'object') { this.each(function () { var instanceOptions = $.extend(true, {}, options); var instance = new Select2($(this), instanceOptions); }); return this; } else if (typeof options === 'string') { var ret; var args = Array.prototype.slice.call(arguments, 1); this.each(function () { var instance = Utils.GetData(this, 'select2'); if (instance == null && window.console && console.error) { console.error( 'The select2(\'' + options + '\') method was called on an ' + 'element that is not using Select2.' ); } ret = instance[options].apply(instance, args); }); // Check if we should be returning `this` if (thisMethods.indexOf(options) > -1) { return this; } return ret; } else { throw new Error('Invalid arguments for Select2: ' + options); } }; } if ($.fn.select2.defaults == null) { $.fn.select2.defaults = Defaults; } return Select2; }); // Return the AMD loader configuration so it can be used outside of this file return { define: S2.define, require: S2.require }; }()); // Autoload the jQuery bindings // We know that all of the modules exist above this, so we're safe var select2 = S2.require('jquery.select2'); // Hold the AMD module references on the jQuery function that was just loaded // This allows Select2 to use the internal loader outside of this file, such // as in the language files. jQuery.fn.select2.amd = S2; // Return the Select2 instance for anyone who is importing it. return select2; })); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/tinymce/langs/ar.js ================================================ tinymce.addI18n('ar',{ "Redo": "\u0625\u0639\u0627\u062f\u0629", "Undo": "\u062a\u0631\u0627\u062c\u0639", "Cut": "\u0642\u0635", "Copy": "\u0646\u0633\u062e", "Paste": "\u0644\u0635\u0642", "Select all": "\u062a\u062d\u062f\u064a\u062f \u0627\u0644\u0643\u0644", "New document": "\u0645\u0633\u062a\u0646\u062f \u062c\u062f\u064a\u062f", "Ok": "\u0645\u0648\u0627\u0641\u0642", "Cancel": "\u0625\u0644\u063a\u0627\u0621 \u0627\u0644\u0623\u0645\u0631", "Visual aids": "\u0623\u062f\u0648\u0627\u062a \u0627\u0644\u0645\u0633\u0627\u0639\u062f\u0629 \u0627\u0644\u0628\u0635\u0631\u064a\u0629", "Bold": "\u063a\u0627\u0645\u0642", "Italic": "\u0645\u0627\u0626\u0644", "Underline": "\u062a\u0633\u0637\u064a\u0631", "Strikethrough": "\u064a\u062a\u0648\u0633\u0637\u0647 \u062e\u0637", "Superscript": "\u0645\u0631\u062a\u0641\u0639", "Subscript": "\u0645\u0646\u062e\u0641\u0636", "Clear formatting": "\u0645\u0633\u062d \u0627\u0644\u062a\u0646\u0633\u064a\u0642", "Align left": "\u0645\u062d\u0627\u0630\u0627\u0629 \u0625\u0644\u0649 \u0627\u0644\u064a\u0633\u0627\u0631", "Align center": "\u0645\u062d\u0627\u0630\u0627\u0629 \u0625\u0644\u0649 \u0627\u0644\u0648\u0633\u0637", "Align right": "\u0645\u062d\u0627\u0630\u0627\u0629 \u0625\u0644\u0649 \u0627\u0644\u064a\u0645\u064a\u0646", "Justify": "\u0636\u0628\u0637", "Bullet list": "\u0642\u0627\u0626\u0645\u0629 \u062a\u0639\u062f\u0627\u062f \u0646\u0642\u0637\u064a", "Numbered list": "\u0642\u0627\u0626\u0645\u0629 \u0645\u0631\u0642\u0645\u0651\u064e\u0629", "Decrease indent": "\u062a\u0642\u0644\u064a\u0644 \u0627\u0644\u0645\u0633\u0627\u0641\u0629 \u0627\u0644\u0628\u0627\u062f\u0626\u0629", "Increase indent": "\u0632\u064a\u0627\u062f\u0629 \u0627\u0644\u0645\u0633\u0627\u0641\u0629 \u0627\u0644\u0628\u0627\u062f\u0626\u0629", "Close": "\u0625\u063a\u0644\u0627\u0642", "Formats": "\u0627\u0644\u062a\u0646\u0633\u064a\u0642\u0627\u062a", "Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u0645\u062a\u0635\u0641\u062d\u0643 \u0644\u0627 \u064a\u062f\u0639\u0645 \u0627\u0644\u0648\u0635\u0648\u0644 \u0627\u0644\u0645\u0628\u0627\u0634\u0631 \u0625\u0644\u0649 \u0627\u0644\u062d\u0627\u0641\u0638\u0629. \u064a\u064f\u0631\u062c\u0649 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u062e\u062a\u0635\u0627\u0631\u0627\u062a \u0644\u0648\u062d\u0629 \u0627\u0644\u0645\u0641\u0627\u062a\u064a\u062d Ctrl+X\/C\/V \u0628\u062f\u0644\u0627\u064b \u0645\u0646 \u0630\u0644\u0643.", "Headers": "\u0627\u0644\u0639\u0646\u0627\u0648\u064a\u0646", "Header 1": "\u0627\u0644\u0639\u0646\u0648\u0627\u0646 1", "Header 2": "\u0627\u0644\u0639\u0646\u0648\u0627\u0646 2", "Header 3": "\u0627\u0644\u0639\u0646\u0648\u0627\u0646 3", "Header 4": "\u0627\u0644\u0639\u0646\u0648\u0627\u0646 4", "Header 5": "\u0627\u0644\u0639\u0646\u0648\u0627\u0646 5", "Header 6": "\u0627\u0644\u0639\u0646\u0648\u0627\u0646 6", "Headings": "\u0627\u0644\u0639\u0646\u0627\u0648\u064a\u0646", "Heading 1": "\u0639\u0646\u0648\u0627\u0646 \u0661", "Heading 2": "\u0639\u0646\u0648\u0627\u0646 2", "Heading 3": "\u0639\u0646\u0648\u0627\u0646 3", "Heading 4": "\u0639\u0646\u0648\u0627\u0646 4", "Heading 5": "\u0639\u0646\u0648\u0627\u0646 5", "Heading 6": "\u0639\u0646\u0648\u0627\u0646 6", "Preformatted": "\u0645\u0646\u0633\u0642 \u0645\u0633\u0628\u0642\u064b\u0627", "Div": "Div", "Pre": "Pre", "Code": "\u0631\u0645\u0632", "Paragraph": "\u0627\u0644\u0641\u0642\u0631\u0629", "Blockquote": "Blockquote", "Inline": "\u062f\u0627\u062e\u0644\u064a", "Blocks": "\u0627\u0644\u0643\u062a\u0644", "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u064a\u062a\u0645 \u0627\u0644\u0644\u0635\u0642 \u062d\u0627\u0644\u064a\u0627\u064b \u0643\u0646\u0635 \u0639\u0627\u062f\u064a. \u0627\u0644\u0645\u062d\u062a\u0648\u0649 \u0633\u064a\u0628\u0642\u0649 \u0643\u0646\u0635 \u0639\u0627\u062f\u064a \u062d\u062a\u0649 \u062a\u0642\u0648\u0645 \u0628\u062a\u0639\u0637\u064a\u0644 \u0647\u0630\u0627 \u0627\u0644\u062e\u064a\u0627\u0631.", "Fonts": "\u0627\u0644\u062e\u0637\u0648\u0637", "Font Sizes": "\u0623\u062d\u062c\u0627\u0645 \u0627\u0644\u062e\u0637\u0648\u0637", "Class": "\u0627\u0644\u0641\u0626\u0629", "Browse for an image": "\u0627\u0633\u062a\u0639\u0631\u0627\u0636 \u0635\u0648\u0631\u0629", "OR": "\u0623\u0648", "Drop an image here": "\u0625\u0641\u0644\u0627\u062a \u0635\u0648\u0631\u0629 \u0647\u0646\u0627", "Upload": "\u062a\u062d\u0645\u064a\u0644", "Block": "\u062d\u0638\u0631", "Align": "\u0645\u062d\u0627\u0630\u0627\u0629", "Default": "\u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a", "Circle": "\u062f\u0627\u0626\u0631\u0629", "Disc": "\u0642\u0631\u0635", "Square": "\u0645\u0631\u0628\u0639", "Lower Alpha": "\u062a\u0631\u0642\u064a\u0645 \u0623\u062e\u0631\u0641 \u0635\u063a\u064a\u0631\u0629", "Lower Greek": "\u062a\u0631\u0642\u064a\u0645 \u064a\u0648\u0646\u0627\u0646\u064a \u0635\u063a\u064a\u0631", "Lower Roman": "\u062a\u0631\u0642\u064a\u0645 \u0631\u0648\u0645\u0627\u0646\u064a \u0635\u063a\u064a\u0631", "Upper Alpha": "\u062a\u0631\u0642\u064a\u0645 \u0623\u062d\u0631\u0641 \u0643\u0628\u064a\u0631\u0629", "Upper Roman": "\u062a\u0631\u0642\u064a\u0645 \u0631\u0648\u0645\u0627\u0646\u064a \u0643\u0628\u064a\u0631", "Anchor...": "\u0645\u0631\u0633\u0627\u0629...", "Name": "\u0627\u0644\u0627\u0633\u0645", "Id": "\u0631\u0642\u0645 \u0627\u0644\u0645\u0639\u0631\u0641", "Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "\u0631\u0642\u0645 \u0627\u0644\u0645\u0639\u0631\u0641 \u064a\u062c\u0628 \u0623\u0646 \u062a\u0628\u062f\u0623 \u0628\u062d\u0631\u0641\u060c \u064a\u062a\u0628\u0639 \u0641\u0642\u0637 \u0628\u062d\u0631\u0648\u0641 \u0648\u0623\u0631\u0642\u0627\u0645\u060c \u0634\u0631\u0637\u0627\u062a\u060c \u0623\u0648 \u0627\u0644\u0646\u0642\u0627\u0637\u060c \u0627\u0644\u0646\u0642\u0637\u062a\u064a\u0646 \u0623\u0648 \u0627\u0644\u0634\u0631\u0637\u0627\u062a \u0627\u0644\u0633\u0641\u0644\u064a\u0629.", "You have unsaved changes are you sure you want to navigate away?": "\u0644\u062f\u064a\u0643 \u062a\u063a\u064a\u064a\u0631\u0627\u062a \u0644\u0645 \u064a\u062a\u0645 \u062d\u0641\u0638\u0647\u0627 \u0647\u0644 \u0623\u0646\u062a \u0645\u062a\u0623\u0643\u062f \u0623\u0646\u0643 \u062a\u0631\u063a\u0628 \u0641\u064a \u0627\u0644\u0627\u0646\u062a\u0642\u0627\u0644 \u0628\u0639\u064a\u062f\u0627\u061f", "Restore last draft": "\u0627\u0633\u062a\u0639\u0627\u062f\u0629 \u0623\u062e\u0631 \u0645\u0633\u0648\u062f\u0629", "Special character...": "\u0631\u0645\u0632 \u062e\u0627\u0635...", "Source code": "\u0634\u0641\u0631\u0629 \u0627\u0644\u0645\u0635\u062f\u0631", "Insert\/Edit code sample": "\u0625\u062f\u0631\u0627\u062c\/\u062a\u062d\u0631\u064a\u0631 \u0627\u0644\u0643\u0648\u062f", "Language": "\u0627\u0644\u0644\u063a\u0629", "Code sample...": "\u0639\u064a\u0646\u0629 \u0627\u0644\u0631\u0645\u0632...", "Color Picker": "\u0645\u0646\u062a\u0642\u064a \u0627\u0644\u0623\u0644\u0648\u0627\u0646", "R": "R", "G": "G", "B": "B", "Left to right": "\u0645\u0646 \u0627\u0644\u064a\u0633\u0627\u0631 \u0644\u0644\u064a\u0645\u064a\u0646", "Right to left": "\u0645\u0646 \u0627\u0644\u064a\u0645\u064a\u0646 \u0644\u0644\u064a\u0633\u0627\u0631", "Emoticons...": "\u0631\u0645\u0648\u0632 \u0627\u0644\u0645\u0634\u0627\u0639\u0631...", "Metadata and Document Properties": "\u062e\u0635\u0627\u0626\u0635 \u0628\u064a\u0627\u0646\u0627\u062a \u0627\u0644\u062a\u0639\u0631\u064a\u0641 \u0648\u0627\u0644\u0645\u0633\u062a\u0646\u062f", "Title": "\u0627\u0644\u0639\u0646\u0648\u0627\u0646", "Keywords": "\u0643\u0644\u0645\u0627\u062a \u0627\u0644\u0628\u062d\u062b", "Description": "\u0627\u0644\u0648\u0635\u0641", "Robots": "\u0627\u0644\u0631\u0648\u0628\u0648\u062a\u0627\u062a", "Author": "\u0627\u0644\u0643\u0627\u062a\u0628", "Encoding": "\u0627\u0644\u062a\u0631\u0645\u064a\u0632", "Fullscreen": "\u0645\u0644\u0621 \u0627\u0644\u0634\u0627\u0634\u0629", "Action": "\u0627\u0644\u0639\u0645\u0644\u064a\u0629", "Shortcut": "\u0627\u0644\u0627\u062e\u062a\u0635\u0627\u0631", "Help": "\u0627\u0644\u0645\u0633\u0627\u0639\u062f\u0629", "Address": "\u0627\u0644\u0639\u0646\u0648\u0627\u0646", "Focus to menubar": "\u0627\u0644\u062a\u0631\u0643\u064a\u0632 \u0639\u0644\u0649 \u0634\u0631\u064a\u0637 \u0627\u0644\u0642\u0648\u0627\u0626\u0645", "Focus to toolbar": "\u0627\u0644\u062a\u0631\u0643\u064a\u0632 \u0639\u0644\u0649 \u0634\u0631\u064a\u0637 \u0627\u0644\u0623\u062f\u0648\u0627\u062a", "Focus to element path": "\u0627\u0644\u062a\u0631\u0643\u064a\u0632 \u0639\u0644\u0649 \u0645\u0633\u0627\u0631 \u0627\u0644\u0639\u0646\u0635\u0631", "Focus to contextual toolbar": "\u0627\u0644\u062a\u0631\u0643\u064a\u0632 \u0639\u0644\u0649 \u0634\u0631\u064a\u0637 \u0623\u062f\u0648\u0627\u062a \u0627\u0644\u0633\u064a\u0627\u0642", "Insert link (if link plugin activated)": "\u0625\u0636\u0627\u0641\u0629 \u0631\u0627\u0628\u0637 (\u0625\u0630\u0627 \u0643\u0627\u0646\u062a \u0625\u0636\u0627\u0641\u0629 \u0627\u0644\u0631\u0648\u0627\u0628\u0637 \u0645\u0641\u0639\u0644\u0629)", "Save (if save plugin activated)": "\u062d\u0641\u0638 (\u0625\u0630\u0627 \u0643\u0627\u0646\u062a \u0625\u0636\u0627\u0641\u0629 \u0627\u0644\u062d\u0641\u0638 \u0645\u0641\u0639\u0644\u0629)", "Find (if searchreplace plugin activated)": "\u0627\u0644\u0628\u062d\u062b (\u0625\u0630\u0627 \u0643\u0627\u0646\u062a \u0625\u0636\u0627\u0641\u0629 \u0627\u0644\u0628\u062d\u062b \u0645\u0641\u0639\u0644\u0629)", "Plugins installed ({0}):": "\u0627\u0644\u0625\u0636\u0627\u0641\u0627\u062a \u0627\u0644\u0645\u062b\u0628\u062a\u0629 ({0}):", "Premium plugins:": "\u0627\u0644\u0625\u0636\u0627\u0641\u0627\u062a \u0627\u0644\u0645\u0645\u064a\u0632\u0629:", "Learn more...": "\u0645\u0639\u0631\u0641\u0629 \u0627\u0644\u0645\u0632\u064a\u062f...", "You are using {0}": "\u0623\u0646\u062a \u062a\u0633\u062a\u062e\u062f\u0645 {0}", "Plugins": "\u0627\u0644\u0625\u0636\u0627\u0641\u0627\u062a", "Handy Shortcuts": "\u0627\u062e\u062a\u0635\u0627\u0631\u0627\u062a \u0645\u0633\u0627\u0639\u0650\u062f\u0629", "Horizontal line": "\u062e\u0637 \u0623\u0641\u0642\u064a", "Insert\/edit image": "\u0625\u062f\u0631\u0627\u062c\/\u062a\u062d\u0631\u064a\u0631 \u0635\u0648\u0631\u0629", "Image description": "\u0648\u0635\u0641 \u0627\u0644\u0635\u0648\u0631\u0629", "Source": "\u0627\u0644\u0645\u0635\u062f\u0631", "Dimensions": "\u0627\u0644\u0623\u0628\u0639\u0627\u062f", "Constrain proportions": "\u0627\u0644\u062a\u0646\u0627\u0633\u0628", "General": "\u0639\u0627\u0645", "Advanced": "\u062e\u0635\u0627\u0626\u0635 \u0645\u062a\u0642\u062f\u0645\u0647", "Style": "\u0627\u0644\u0646\u0645\u0637 \/ \u0627\u0644\u0634\u0643\u0644", "Vertical space": "\u0645\u0633\u0627\u0641\u0629 \u0639\u0645\u0648\u062f\u064a\u0629", "Horizontal space": "\u0645\u0633\u0627\u0641\u0629 \u0623\u0641\u0642\u064a\u0629", "Border": "\u062d\u062f\u0648\u062f", "Insert image": "\u0625\u062f\u0631\u0627\u062c \u0635\u0648\u0631\u0629", "Image...": "\u0635\u0648\u0631\u0629...", "Image list": "\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0635\u0648\u0631", "Rotate counterclockwise": "\u062a\u062f\u0648\u064a\u0631 \u0639\u0643\u0633 \u0627\u062a\u062c\u0627\u0647 \u0639\u0642\u0627\u0631\u0628 \u0627\u0644\u0633\u0627\u0639\u0629", "Rotate clockwise": "\u062a\u062f\u0648\u064a\u0631 \u0641\u064a \u0627\u062a\u062c\u0627\u0647 \u0639\u0642\u0627\u0631\u0628 \u0627\u0644\u0633\u0627\u0639\u0629", "Flip vertically": "\u0627\u0646\u0639\u0643\u0627\u0633 \u0639\u0627\u0645\u0648\u062f\u064a", "Flip horizontally": "\u0627\u0646\u0639\u0643\u0627\u0633 \u0623\u0641\u0642\u064a", "Edit image": "\u062a\u062d\u0631\u064a\u0631 \u0627\u0644\u0635\u0648\u0631\u0629", "Image options": "\u0627\u0639\u062f\u0627\u062f\u0627\u062a \u0627\u0644\u0635\u0648\u0631\u0629", "Zoom in": "\u062a\u0643\u0628\u064a\u0631", "Zoom out": "\u062a\u0635\u063a\u064a\u0631", "Crop": "\u0642\u0635", "Resize": "\u062a\u063a\u064a\u064a\u0631 \u062d\u062c\u0645", "Orientation": "\u0627\u0644\u0645\u062d\u0627\u0630\u0627\u0629", "Brightness": "\u0627\u0644\u0625\u0636\u0627\u0621\u0629", "Sharpen": "\u062d\u0627\u062f\u0629", "Contrast": "\u0627\u0644\u062a\u0628\u0627\u064a\u0646", "Color levels": "\u0645\u0633\u062a\u0648\u0649 \u0627\u0644\u0644\u0648\u0646", "Gamma": "\u063a\u0627\u0645\u0627", "Invert": "\u0639\u0643\u0633", "Apply": "\u062a\u0637\u0628\u064a\u0642", "Back": "\u0644\u0644\u062e\u0644\u0641", "Insert date\/time": "\u0625\u062f\u0631\u0627\u062c \u062a\u0627\u0631\u064a\u062e\/\u0648\u0642\u062a", "Date\/time": "\u0627\u0644\u062a\u0627\u0631\u064a\u062e\/\u0627\u0644\u0648\u0642\u062a", "Insert\/Edit Link": "\u0625\u062f\u0631\u0627\u062c\/\u062a\u062d\u0631\u064a\u0631 \u0627\u0631\u062a\u0628\u0627\u0637", "Insert\/edit link": "\u0625\u062f\u0631\u0627\u062c\/\u062a\u062d\u0631\u064a\u0631 \u0631\u0627\u0628\u0637", "Text to display": "\u0627\u0644\u0646\u0635 \u0627\u0644\u0645\u0637\u0644\u0648\u0628 \u0639\u0631\u0636\u0647", "Url": "\u0627\u0644\u0639\u0646\u0648\u0627\u0646", "Open link in...": "\u062c\u0627\u0631\u064d \u0641\u062a\u062d \u0627\u0644\u0627\u0631\u062a\u0628\u0627\u0637.", "Current window": "\u0627\u0644\u0646\u0627\u0641\u0630\u0629 \u0627\u0644\u062d\u0627\u0644\u064a\u0629", "None": "\u0628\u0644\u0627", "New window": "\u0646\u0627\u0641\u0630\u0629 \u062c\u062f\u064a\u062f\u0629", "Remove link": "\u062d\u0630\u0641 \u0627\u0644\u0631\u0627\u0628\u0637", "Anchors": "\u0627\u0644\u0645\u0631\u0633\u0627\u0629", "Link...": "\u0627\u0631\u062a\u0628\u0627\u0637...", "Paste or type a link": "\u0623\u062f\u062e\u0644 \u0623\u0648 \u0627\u0643\u062a\u0628 \u0627\u0644\u0631\u0627\u0628\u0637", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u0627\u0644\u0631\u0627\u0628\u0637 \u0627\u0644\u0630\u064a \u0642\u0645\u062a \u0628\u0625\u062f\u0631\u0627\u062c\u0647 \u064a\u0634\u0627\u0628\u0647 \u0627\u0644\u0628\u0631\u064a\u062f \u0627\u0644\u0627\u0644\u0643\u062a\u0631\u0648\u0646\u064a. \u0647\u0644 \u062a\u0631\u064a\u062f \u0627\u0646 \u062a\u0636\u064a\u0641 \u0627\u0644\u0644\u0627\u062d\u0642\u0629 mailto: \u0645\u0639\u062a\u0628\u0631\u0627\u064b \u0647\u0630\u0627 \u0627\u0644\u0631\u0627\u0628\u0637 \u0628\u0631\u064a\u062f\u0627 \u0627\u0644\u0643\u062a\u0631\u0648\u0646\u064a\u0627\u064b\u061f", "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\u0646\u062a\u0648\u0642\u0639 \u0627\u0646\u0643 \u0642\u0645\u062a \u0628\u0625\u062f\u0631\u0627\u062c \u0631\u0627\u0628\u0637 \u0644\u0645\u0648\u0642\u0639 \u062e\u0627\u0631\u062c\u064a. \u0647\u0644 \u062a\u0631\u064a\u062f \u0627\u0646 \u0646\u0636\u064a\u0641 \u0627\u0644\u0644\u0627\u062d\u0642\u0629 http:\/\/ \u0644\u0644\u0631\u0627\u0628\u0637 \u0627\u0644\u0630\u064a \u0627\u062f\u062e\u0644\u062a\u0647\u061f", "Link list": "\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0631\u0648\u0627\u0628\u0637", "Insert video": "\u0625\u062f\u0631\u0627\u062c \u0641\u064a\u062f\u064a\u0648", "Insert\/edit video": "\u0625\u062f\u0631\u0627\u062c\/\u062a\u062d\u0631\u064a\u0631 \u0641\u064a\u062f\u064a\u0648", "Insert\/edit media": "\u0625\u062f\u0631\u0627\u062c\/\u062a\u062d\u0631\u064a\u0631 \u0627\u0644\u0648\u0633\u0627\u0626\u0637 \u0627\u0644\u0645\u062a\u0639\u062f\u062f\u0629", "Alternative source": "\u0645\u0635\u062f\u0631 \u0628\u062f\u064a\u0644", "Alternative source URL": "\u0639\u0646\u0648\u0627\u0646 URL \u0644\u0644\u0645\u0635\u062f\u0631 \u0627\u0644\u0628\u062f\u064a\u0644", "Media poster (Image URL)": "\u0645\u0644\u0635\u0642 \u0627\u0644\u0648\u0633\u0627\u0626\u0637 (\u0639\u0646\u0648\u0627\u0646 URL \u0644\u0644\u0635\u0648\u0631\u0629)", "Paste your embed code below:": "\u0644\u0635\u0642 \u0643\u0648\u062f \u0627\u0644\u062a\u0636\u0645\u064a\u0646 \u0647\u0646\u0627:", "Embed": "\u062a\u0636\u0645\u064a\u0646", "Media...": "\u0627\u0644\u0648\u0633\u0627\u0626\u0637...", "Nonbreaking space": "\u0645\u0633\u0627\u0641\u0629 \u063a\u064a\u0631 \u0645\u0646\u0642\u0633\u0645\u0629", "Page break": "\u0641\u0627\u0635\u0644 \u0644\u0644\u0635\u0641\u062d\u0629", "Paste as text": "\u0644\u0635\u0642 \u0643\u0646\u0635", "Preview": "\u0645\u0639\u0627\u064a\u0646\u0629", "Print...": "\u0637\u0628\u0627\u0639\u0629...", "Save": "\u062d\u0641\u0638", "Find": "\u0628\u062d\u062b", "Replace with": "\u0627\u0633\u062a\u0628\u062f\u0627\u0644 \u0628\u0640", "Replace": "\u0627\u0633\u062a\u0628\u062f\u0627\u0644", "Replace all": "\u0627\u0633\u062a\u0628\u062f\u0627\u0644 \u0627\u0644\u0643\u0644", "Previous": "\u0627\u0644\u0633\u0627\u0628\u0642", "Next": "\u0627\u0644\u062a\u0627\u0644\u064a", "Find and replace...": "\u062c\u0627\u0631\u064d \u0627\u0644\u0628\u062d\u062b \u0648\u0627\u0644\u0627\u0633\u062a\u0628\u062f\u0627\u0644...", "Could not find the specified string.": "\u062a\u0639\u0630\u0631 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0627\u0644\u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u062d\u062f\u062f\u0629", "Match case": "\u0645\u0637\u0627\u0628\u0642\u0629 \u062d\u0627\u0644\u0629 \u0627\u0644\u0623\u062d\u0631\u0641", "Find whole words only": "\u0628\u062d\u062b \u0643\u0644\u0645\u0627\u062a \u0628\u0623\u0643\u0645\u0644\u0647\u0627 \u0641\u0642\u0637", "Spell check": "\u062a\u062f\u0642\u064a\u0642 \u0625\u0645\u0644\u0627\u0626\u064a", "Ignore": "\u062a\u062c\u0627\u0647\u0644", "Ignore all": "\u062a\u062c\u0627\u0647\u0644 \u0627\u0644\u0643\u0644", "Finish": "\u0627\u0646\u062a\u0647\u064a", "Add to Dictionary": "\u0627\u0636\u0641 \u0627\u0644\u064a \u0627\u0644\u0642\u0627\u0645\u0648\u0633", "Insert table": "\u0625\u062f\u0631\u0627\u062c \u062c\u062f\u0648\u0644", "Table properties": "\u062e\u0635\u0627\u0626\u0635 \u0627\u0644\u062c\u062f\u0648\u0644", "Delete table": "\u062d\u0630\u0641 \u062c\u062f\u0648\u0644", "Cell": "\u062e\u0644\u064a\u0629", "Row": "\u0635\u0641", "Column": "\u0639\u0645\u0648\u062f", "Cell properties": "\u062e\u0635\u0627\u0626\u0635 \u0627\u0644\u062e\u0644\u064a\u0629", "Merge cells": "\u062f\u0645\u062c \u062e\u0644\u0627\u064a\u0627", "Split cell": "\u062a\u0642\u0633\u064a\u0645 \u0627\u0644\u062e\u0644\u0627\u064a\u0627", "Insert row before": "\u0625\u062f\u0631\u0627\u062c \u0635\u0641 \u0644\u0644\u0623\u0639\u0644\u0649", "Insert row after": "\u0625\u062f\u0631\u0627\u062c \u0635\u0641 \u0644\u0644\u0623\u0633\u0641\u0644", "Delete row": "\u062d\u0630\u0641 \u0635\u0641", "Row properties": "\u062e\u0635\u0627\u0626\u0635 \u0627\u0644\u0635\u0641", "Cut row": "\u0642\u0635 \u0627\u0644\u0635\u0641", "Copy row": "\u0646\u0633\u062e \u0627\u0644\u0635\u0641", "Paste row before": "\u0644\u0635\u0642 \u0627\u0644\u0635\u0641 \u0644\u0644\u0623\u0639\u0644\u0649", "Paste row after": "\u0644\u0635\u0642 \u0627\u0644\u0635\u0641 \u0644\u0644\u0623\u0633\u0641\u0644", "Insert column before": "\u0625\u062f\u0631\u0627\u062c \u0639\u0645\u0648\u062f \u0644\u0644\u064a\u0633\u0627\u0631", "Insert column after": "\u0625\u062f\u0631\u0627\u062c \u0639\u0645\u0648\u062f \u0644\u0644\u064a\u0645\u064a\u0646", "Delete column": "\u062d\u0630\u0641 \u0639\u0645\u0648\u062f", "Cols": "\u0639\u062f\u062f \u0627\u0644\u0623\u0639\u0645\u062f\u0629", "Rows": "\u0639\u062f\u062f \u0627\u0644\u0635\u0641\u0648\u0641", "Width": "\u0639\u0631\u0636", "Height": "\u0627\u0631\u062a\u0641\u0627\u0639", "Cell spacing": "\u0627\u0644\u0645\u0633\u0627\u0641\u0629 \u0628\u064a\u0646 \u0627\u0644\u062e\u0644\u0627\u064a\u0627", "Cell padding": "\u062a\u0628\u0627\u0639\u062f \u0627\u0644\u062e\u0644\u064a\u0629", "Show caption": "\u0625\u0638\u0647\u0627\u0631 \u0627\u0644\u062a\u0633\u0645\u064a\u0629 \u0627\u0644\u062a\u0648\u0636\u064a\u062d\u064a\u0629", "Left": "\u064a\u0633\u0627\u0631", "Center": "\u062a\u0648\u0633\u064a\u0637", "Right": "\u064a\u0645\u064a\u0646", "Cell type": "\u0646\u0648\u0639 \u0627\u0644\u062e\u0644\u064a\u0629", "Scope": "\u0627\u0644\u0645\u062c\u0627\u0644", "Alignment": "\u0645\u062d\u0627\u0630\u0627\u0629", "H Align": "\u0645\u062d\u0627\u0630\u0627\u0629 \u0623\u0641\u0642\u064a\u0629", "V Align": "\u0645\u062d\u0627\u0630\u0627\u0629 \u0631\u0623\u0633\u064a\u0629", "Top": "\u0623\u0639\u0644\u064a", "Middle": "\u0627\u0644\u0648\u0633\u0637", "Bottom": "\u0627\u0644\u0623\u0633\u0641\u0644", "Header cell": "\u0631\u0623\u0633 \u0627\u0644\u062e\u0644\u064a\u0629", "Row group": "\u0645\u062c\u0645\u0648\u0639\u0629 \u0635\u0641", "Column group": "\u0645\u062c\u0645\u0648\u0639\u0629 \u0639\u0645\u0648\u062f", "Row type": "\u0646\u0648\u0639 \u0627\u0644\u0635\u0641", "Header": "\u0627\u0644\u0631\u0623\u0633", "Body": "\u0647\u064a\u0643\u0644", "Footer": "\u062a\u0630\u064a\u064a\u0644", "Border color": "\u0644\u0648\u0646 \u0627\u0644\u0625\u0637\u0627\u0631", "Insert template...": "\u062c\u0627\u0631\u064d \u0625\u062f\u0631\u0627\u062c \u0642\u0627\u0644\u0628...", "Templates": "\u0642\u0648\u0627\u0644\u0628", "Template": "\u0627\u0644\u0642\u0627\u0644\u0628", "Text color": "\u0644\u0648\u0646 \u0627\u0644\u0646\u0635", "Background color": "\u0644\u0648\u0646 \u0627\u0644\u062e\u0644\u0641\u064a\u0629", "Custom...": "\u062a\u062e\u0635\u064a\u0635 ...", "Custom color": "\u0644\u0648\u0646 \u0645\u062e\u0635\u0635", "No color": "\u0628\u062f\u0648\u0646 \u0644\u0648\u0646", "Remove color": "\u0625\u0632\u0627\u0644\u0629 \u0644\u0648\u0646", "Table of Contents": "\u062c\u062f\u0648\u0644 \u0627\u0644\u0645\u062d\u062a\u0648\u064a\u0627\u062a", "Show blocks": "\u0645\u0634\u0627\u0647\u062f\u0629 \u0627\u0644\u0643\u062a\u0644", "Show invisible characters": "\u0623\u0638\u0647\u0631 \u0627\u0644\u0623\u062d\u0631\u0641 \u0627\u0644\u063a\u064a\u0631 \u0645\u0631\u0626\u064a\u0629", "Word count": "\u0639\u062f\u062f \u0627\u0644\u0643\u0644\u0645\u0627\u062a", "Count": "\u0627\u0644\u0639\u062f\u062f", "Document": "\u0627\u0644\u0645\u0633\u062a\u0646\u062f", "Selection": "\u0627\u0644\u062a\u062d\u062f\u064a\u062f", "Words": "\u0627\u0644\u0643\u0644\u0645\u0627\u062a", "Words: {0}": "\u0627\u0644\u0643\u0644\u0645\u0627\u062a:{0}", "{0} words": "{0} \u0643\u0644\u0645\u0627\u062a", "File": "\u0645\u0644\u0641", "Edit": "\u062a\u062d\u0631\u064a\u0631", "Insert": "\u0625\u062f\u0631\u0627\u062c", "View": "\u0639\u0631\u0636", "Format": "\u062a\u0646\u0633\u064a\u0642", "Table": "\u062c\u062f\u0648\u0644", "Tools": "\u0623\u062f\u0627\u0648\u0627\u062a", "Powered by {0}": "\u0645\u062f\u0639\u0648\u0645 \u0645\u0646 {0}", "Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u0645\u0646\u0637\u0642\u0629 \u0646\u0635 \u0645\u0646\u0633\u0642. \u0627\u0636\u063a\u0637 ALT-F9 \u0644\u0644\u0642\u0627\u0626\u0645\u0629. \u0627\u0636\u063a\u0637 ALT-F10 \u0644\u0634\u0631\u064a\u0637 \u0627\u0644\u0623\u062f\u0648\u0627\u062a. \u0627\u0636\u063a\u0637 ALT-0 \u0644\u0644\u062d\u0635\u0648\u0644 \u0639\u0644\u0649 \u0645\u0633\u0627\u0639\u062f\u0629", "Image title": "\u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u0635\u0648\u0631\u0629", "Border width": "\u0639\u0631\u0636 \u0627\u0644\u062d\u062f", "Border style": "\u0646\u0645\u0637 \u0627\u0644\u062d\u062f", "Error": "\u062e\u0637\u0623", "Warn": "\u062a\u062d\u0630\u064a\u0631", "Valid": "\u0635\u062d\u064a\u062d", "To open the popup, press Shift+Enter": "\u0644\u0641\u062a\u062d \u0627\u0644\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0645\u0646\u0628\u062b\u0642\u0629\u060c \u0627\u0636\u063a\u0637 \u0639\u0644\u0649 Shift\u200f+Enter", "Rich Text Area. Press ALT-0 for help.": "\u0645\u0646\u0637\u0642\u0629 \u0646\u0635 \u0645\u0646\u0633\u0642. \u0627\u0636\u063a\u0637 ALT-0 \u0644\u0644\u062d\u0635\u0648\u0644 \u0639\u0644\u0649 \u0627\u0644\u0645\u0633\u0627\u0639\u062f\u0629.", "System Font": "\u062e\u0637 \u0627\u0644\u0646\u0638\u0627\u0645", "Failed to upload image: {0}": "\u0641\u0634\u0644 \u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0635\u0648\u0631\u0629: {0}", "Failed to load plugin: {0} from url {1}": "\u0641\u0634\u0644 \u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0645\u0643\u0648\u0651\u0650\u0646 \u0627\u0644\u0625\u0636\u0627\u0641\u064a: {0} \u0645\u0646 url \u200f{1}", "Failed to load plugin url: {0}": "\u0641\u0634\u0644 \u062a\u062d\u0645\u064a\u0644 url \u0644\u0644\u0645\u0643\u0648\u0651\u0650\u0646 \u0627\u0644\u0625\u0636\u0627\u0641\u064a: {0}", "Failed to initialize plugin: {0}": "\u0641\u0634\u0644\u062a \u062a\u0647\u064a\u0626\u0629 \u0627\u0644\u0645\u0643\u0648\u0651\u0650\u0646 \u0627\u0644\u0625\u0636\u0627\u0641\u064a: {0}", "example": "\u0645\u062b\u0627\u0644", "Search": "\u0628\u062d\u062b", "All": "\u0627\u0644\u0643\u0644", "Currency": "\u0627\u0644\u0639\u0645\u0644\u0629", "Text": "\u0627\u0644\u0646\u0635", "Quotations": "\u0639\u0631\u0648\u0636 \u0627\u0644\u0623\u0633\u0639\u0627\u0631", "Mathematical": "\u0631\u064a\u0627\u0636\u064a\u0629", "Extended Latin": "\u0627\u0644\u0644\u0627\u062a\u064a\u0646\u064a\u0629 \u0627\u0644\u0645\u0648\u0633\u0639\u0629", "Symbols": "\u0627\u0644\u0631\u0645\u0648\u0632", "Arrows": "\u0627\u0644\u0623\u0633\u0647\u0645", "User Defined": "\u0645\u0639\u0631\u0651\u064e\u0641 \u0645\u0646 \u0642\u0628\u0644 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645", "dollar sign": "\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u062f\u0648\u0644\u0627\u0631", "currency sign": "\u0639\u0644\u0627\u0645\u0629 \u0639\u0645\u0644\u0629", "euro-currency sign": "\u0639\u0644\u0627\u0645\u0629 \u0639\u0645\u0644\u0629 \u0627\u0644\u064a\u0648\u0631\u0648", "colon sign": "\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0646\u0642\u0637\u062a\u064a\u0646", "cruzeiro sign": "\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0643\u0631\u0648\u0632\u064a\u0631\u0648", "french franc sign": "\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0641\u0631\u0646\u0643 \u0627\u0644\u0641\u0631\u0646\u0633\u064a", "lira sign": "\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0644\u064a\u0631\u0629", "mill sign": "\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0645\u0644", "naira sign": "\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0646\u064a\u0631\u0629", "peseta sign": "\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0628\u064a\u0632\u064a\u062a\u0627", "rupee sign": "\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0631\u0648\u0628\u064a\u0629", "won sign": "\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0648\u0646", "new sheqel sign": "\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0634\u064a\u0643\u0644 \u0627\u0644\u062c\u062f\u064a\u062f", "dong sign": "\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u062f\u0648\u0646\u062c", "kip sign": "\u0639\u0645\u0644\u0629 \u0627\u0644\u0643\u064a\u0628", "tugrik sign": "\u0639\u0645\u0644\u0629 \u0627\u0644\u062a\u0648\u063a\u0631\u064a\u0643", "drachma sign": "\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u062f\u0631\u0627\u062e\u0645\u0627", "german penny symbol": "\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0628\u0646\u0633 \u0627\u0644\u0623\u0644\u0645\u0627\u0646\u064a", "peso sign": "\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0628\u064a\u0632\u0648", "guarani sign": "\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u062c\u0648\u0627\u0631\u0627\u0646\u064a", "austral sign": "\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0623\u0648\u0633\u062a\u0631\u0627\u0644", "hryvnia sign": "\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0647\u0631\u064a\u0641\u0646\u064a\u0627", "cedi sign": "\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0633\u064a\u062f\u064a", "livre tournois sign": "\u0639\u0644\u0627\u0645\u0629 \u0644\u064a\u0641\u0631 \u062a\u0648\u0631\u0646\u0648\u064a\u0632", "spesmilo sign": "\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0627\u0633\u0628\u064a\u0632\u0645\u0627\u064a\u0644\u0648", "tenge sign": "\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u062a\u064a\u0646\u062c", "indian rupee sign": "\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0631\u0648\u0628\u064a\u0629 \u0627\u0644\u0647\u0646\u062f\u064a\u0629", "turkish lira sign": "\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0644\u064a\u0631\u0629 \u0627\u0644\u062a\u0631\u0643\u064a\u0629", "nordic mark sign": "\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0646\u0648\u0631\u062f\u0643", "manat sign": "\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0645\u0627\u0646\u0627\u062a", "ruble sign": "\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0631\u0648\u0628\u0644", "yen character": "\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u064a\u0646", "yuan character": "\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u064a\u0648\u0627\u0646", "yuan character, in hong kong and taiwan": "\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u064a\u0648\u0627\u0646 \u0641\u064a \u0647\u0648\u0646\u062c \u0643\u0648\u0646\u062c \u0648\u062a\u0627\u064a\u0648\u0627\u0646", "yen\/yuan character variant one": "\u0627\u0644\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0628\u062f\u064a\u0644\u0629 \u0644\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u064a\u0646\/\u0627\u0644\u064a\u0648\u0627\u0646", "Loading emoticons...": "\u062c\u0627\u0631\u064d \u062a\u062d\u0645\u064a\u0644 \u0631\u0645\u0648\u0632 \u0627\u0644\u0645\u0634\u0627\u0639\u0631...", "Could not load emoticons": "\u062c\u0627\u0631\u064d \u062a\u062d\u0645\u064a\u0644 \u0631\u0645\u0648\u0632 \u0627\u0644\u0645\u0634\u0627\u0639\u0631", "People": "\u0623\u0634\u062e\u0627\u0635", "Animals and Nature": "\u0627\u0644\u062d\u064a\u0648\u0627\u0646\u0627\u062a \u0648\u0627\u0644\u0637\u0628\u064a\u0639\u0629", "Food and Drink": "\u0627\u0644\u0623\u0637\u0639\u0645\u0629 \u0648\u0627\u0644\u0645\u0634\u0631\u0648\u0628\u0627\u062a", "Activity": "\u0627\u0644\u0646\u0634\u0627\u0637", "Travel and Places": "\u0627\u0644\u0633\u0641\u0631 \u0648\u0627\u0644\u0623\u0645\u0627\u0643\u0646 \u0633\u064a\u0627\u062d\u064a\u0629", "Objects": "\u0643\u0627\u0626\u0646\u0627\u062a", "Flags": "\u0627\u0644\u0639\u0644\u0627\u0645\u0627\u062a", "Characters": "\u0627\u0644\u0623\u062d\u0631\u0641", "Characters (no spaces)": "\u0627\u0644\u0623\u062d\u0631\u0641 (\u062f\u0648\u0646 \u0627\u0644\u0645\u0633\u0627\u0641\u0627\u062a)", "{0} characters": "{0} \u0631\u0645\u0648\u0632", "Error: Form submit field collision.": "\u062e\u0637\u0623: \u062a\u0636\u0627\u0631\u0628 \u0641\u064a \u062d\u0642\u0644 \u0625\u0631\u0633\u0627\u0644 \u0627\u0644\u0646\u0645\u0648\u0630\u062c.", "Error: No form element found.": "\u0627\u0644\u062e\u0637\u0623: \u0644\u0645 \u064a\u062a\u0645 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0639\u0646\u0635\u0631 \u0646\u0645\u0648\u0630\u062c.", "Update": "\u062a\u062d\u062f\u064a\u062b", "Color swatch": "\u0639\u064a\u0646\u0627\u062a \u0627\u0644\u0623\u0644\u0648\u0627\u0646", "Turquoise": "\u0641\u064a\u0631\u0648\u0632\u064a", "Green": "\u0623\u062e\u0636\u0631", "Blue": "\u0623\u0632\u0631\u0642", "Purple": "\u0628\u0646\u0641\u0633\u062c\u064a", "Navy Blue": "\u0623\u0632\u0631\u0642 \u0646\u064a\u0644\u064a", "Dark Turquoise": "\u0641\u064a\u0631\u0648\u0632\u064a \u062f\u0627\u0643\u0646", "Dark Green": "\u0623\u062e\u0636\u0631 \u062f\u0627\u0643\u0646", "Medium Blue": "\u0623\u0632\u0631\u0642 \u0645\u062a\u0648\u0633\u0637", "Medium Purple": "\u0628\u0646\u0641\u0633\u062c\u064a \u0645\u062a\u0648\u0633\u0637", "Midnight Blue": "\u0623\u0632\u0631\u0642 \u062f\u0627\u0643\u0646 \u062c\u062f\u0627\u064b", "Yellow": "\u0623\u0635\u0641\u0631", "Orange": "\u0628\u0631\u062a\u0642\u0627\u0644\u064a", "Red": "\u0623\u062d\u0645\u0631", "Light Gray": "\u0631\u0645\u0627\u062f\u064a \u0641\u0627\u062a\u062d", "Gray": "\u0631\u0645\u0627\u062f\u064a", "Dark Yellow": "\u0623\u0635\u0641\u0631 \u062f\u0627\u0643\u0646", "Dark Orange": "\u0628\u0631\u062a\u0642\u0627\u0644\u064a \u062f\u0627\u0643\u0646", "Dark Red": "\u0623\u062d\u0645\u0631 \u062f\u0627\u0643\u0646", "Medium Gray": "\u0631\u0645\u0627\u062f\u064a \u0645\u062a\u0648\u0633\u0637", "Dark Gray": "\u0631\u0645\u0627\u062f\u064a \u062f\u0627\u0643\u0646", "Light Green": "\u0623\u062e\u0636\u0631 \u0641\u0627\u062a\u062d", "Light Yellow": "\u0623\u0635\u0641\u0631 \u0641\u0627\u062a\u062d", "Light Red": "\u0623\u062d\u0645\u0631 \u0641\u0627\u062a\u062d", "Light Purple": "\u0628\u0646\u0641\u0633\u062c\u064a \u0641\u0627\u062a\u062d", "Light Blue": "\u0623\u0632\u0631\u0642 \u0641\u0627\u062a\u062d", "Dark Purple": "\u0623\u0631\u062c\u0648\u0627\u0646\u064a \u062f\u0627\u0643\u0646", "Dark Blue": "\u0623\u0632\u0631\u0642 \u062f\u0627\u0643\u0646", "Black": "\u0623\u0633\u0648\u062f", "White": "\u0623\u0628\u064a\u0636", "Switch to or from fullscreen mode": "\u0627\u0644\u062a\u0628\u062f\u064a\u0644 \u0625\u0644\u0649 \u0623\u0648 \u0645\u0646 \u0648\u0636\u0639 \u0645\u0644\u0621 \u0627\u0644\u0634\u0627\u0634\u0629", "Open help dialog": "\u0627\u0641\u062a\u062d \u062d\u0648\u0627\u0631 \u0627\u0644\u062a\u0639\u0644\u064a\u0645\u0627\u062a", "history": "\u0627\u0644\u0645\u062d\u0641\u0648\u0638\u0627\u062a", "styles": "\u0627\u0644\u0623\u0646\u0645\u0627\u0637", "formatting": "\u062a\u0646\u0633\u064a\u0642", "alignment": "\u0645\u062d\u0627\u0630\u0627\u0629", "indentation": "\u0645\u0633\u0627\u0641\u0629 \u0628\u0627\u062f\u0626\u0629", "permanent pen": "\u0642\u0644\u0645 \u062b\u0627\u0628\u062a", "comments": "\u0627\u0644\u062a\u0639\u0644\u064a\u0642\u0627\u062a", "Format Painter": "\u0646\u0627\u0633\u062e \u0627\u0644\u062a\u0646\u0633\u064a\u0642", "Insert\/edit iframe": "\u0625\u062f\u0631\u0627\u062c\/\u062a\u062d\u0631\u064a\u0631 \u0625\u0637\u0627\u0631 \u0645\u062f\u0645\u062c", "Capitalization": "\u0643\u062a\u0627\u0628\u0629 \u0628\u0627\u0644\u0623\u062d\u0631\u0641 \u0627\u0644\u0643\u0628\u064a\u0631\u0629", "lowercase": "\u0623\u062d\u0631\u0641 \u0635\u063a\u064a\u0631\u0629", "UPPERCASE": "\u0623\u062d\u0631\u0641 \u0643\u0628\u064a\u0631\u0629", "Title Case": "\u062d\u0627\u0644\u0629 \u0623\u062d\u0631\u0641 \u0627\u0644\u0639\u0646\u0648\u0627\u0646", "Permanent Pen Properties": "\u062e\u0635\u0627\u0626\u0635 \u0627\u0644\u0642\u0644\u0645 \u0627\u0644\u062b\u0627\u0628\u062a", "Permanent pen properties...": "\u062e\u0635\u0627\u0626\u0635 \u0627\u0644\u0642\u0644\u0645 \u0627\u0644\u062b\u0627\u0628\u062a...", "Font": "\u0627\u0644\u062e\u0637", "Size": "\u0627\u0644\u062d\u062c\u0645", "More...": "\u0627\u0644\u0645\u0632\u064a\u062f...", "Spellcheck Language": "\u0644\u063a\u0629 \u0627\u0644\u062a\u062f\u0642\u064a\u0642 \u0627\u0644\u0625\u0645\u0644\u0627\u0626\u064a", "Select...": "\u062a\u062d\u062f\u064a\u062f...", "Preferences": "\u0627\u0644\u062a\u0641\u0636\u064a\u0644\u0627\u062a", "Yes": "\u0646\u0639\u0645", "No": "\u0644\u0627", "Keyboard Navigation": "\u0627\u0644\u062a\u0646\u0642\u0644 \u0628\u0648\u0627\u0633\u0637\u0629 \u0644\u0648\u062d\u0629 \u0627\u0644\u0645\u0641\u0627\u062a\u064a\u062d", "Version": "\u0627\u0644\u0625\u0635\u062f\u0627\u0631", "Anchor": "\u0645\u0631\u0633\u0627\u0629", "Special character": "\u0631\u0645\u0632", "Code sample": "\u0639\u064a\u0651\u0646\u0629 \u0639\u0646 \u0627\u0644\u0643\u0648\u062f \u0627\u0644\u0628\u0631\u0645\u062c\u064a", "Color": "\u0627\u0644\u0644\u0648\u0646", "Emoticons": "\u0627\u0644\u0631\u0645\u0648\u0632", "Document properties": "\u062e\u0635\u0627\u0626\u0635 \u0627\u0644\u0645\u0633\u062a\u0646\u062f", "Image": "\u0627\u0644\u0635\u0648\u0631\u0629", "Insert link": "\u0625\u062f\u0631\u0627\u062c \u0631\u0627\u0628\u0637", "Target": "\u0627\u0644\u0625\u0637\u0627\u0631 \u0627\u0644\u0647\u062f\u0641", "Link": "\u0627\u0644\u0631\u0627\u0628\u0637", "Poster": "\u0645\u0644\u0635\u0642", "Media": "\u0627\u0644\u0648\u0633\u0627\u0626\u0637 \u0627\u0644\u0645\u062a\u0639\u062f\u062f\u0629", "Print": "\u0637\u0628\u0627\u0639\u0629", "Prev": "\u0627\u0644\u0633\u0627\u0628\u0642", "Find and replace": "\u0628\u062d\u062b \u0648\u0627\u0633\u062a\u0628\u062f\u0627\u0644", "Whole words": "\u0645\u0637\u0627\u0628\u0642\u0629 \u0627\u0644\u0643\u0644\u0645\u0627\u062a \u0628\u0627\u0644\u0643\u0627\u0645\u0644", "Spellcheck": "\u062a\u062f\u0642\u064a\u0642 \u0625\u0645\u0644\u0627\u0626\u064a", "Caption": "\u0634\u0631\u062d", "Insert template": "\u0625\u062f\u0631\u0627\u062c \u0642\u0627\u0644\u0628", "_dir": "rtl" }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/tinymce/langs/bg_BG.js ================================================ tinymce.addI18n('bg_BG',{ "Redo": "\u041e\u0442\u043c\u0435\u043d\u044f\u043d\u0435", "Undo": "\u0412\u0440\u044a\u0449\u0430\u043d\u0435", "Cut": "\u0418\u0437\u0440\u044f\u0437\u0432\u0430\u043d\u0435", "Copy": "\u041a\u043e\u043f\u0438\u0440\u0430\u043d\u0435", "Paste": "\u041f\u043e\u0441\u0442\u0430\u0432\u044f\u043d\u0435", "Select all": "\u041c\u0430\u0440\u043a\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0446\u044f\u043b\u043e\u0442\u043e \u0441\u044a\u0434\u044a\u0440\u0436\u0430\u043d\u0438\u0435", "New document": "\u041d\u043e\u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442", "Ok": "\u0414\u043e\u0431\u0440\u0435", "Cancel": "\u041e\u0442\u043a\u0430\u0437", "Visual aids": "\u0412\u0438\u0437\u0443\u0430\u043b\u043d\u043e \u043e\u0442\u043a\u0440\u043e\u044f\u0432\u0430\u043d\u0435 \u043d\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0438 \u0431\u0435\u0437 \u043a\u0430\u043d\u0442\u043e\u0432\u0435 (\u0440\u0430\u043c\u043a\u0438)", "Bold": "\u0423\u0434\u0435\u0431\u0435\u043b\u0435\u043d (\u043f\u043e\u043b\u0443\u0447\u0435\u0440)", "Italic": "\u041d\u0430\u043a\u043b\u043e\u043d\u0435\u043d (\u043a\u0443\u0440\u0441\u0438\u0432)", "Underline": "\u041f\u043e\u0434\u0447\u0435\u0440\u0442\u0430\u0432\u0430\u043d\u0435", "Strikethrough": "\u0417\u0430\u0447\u0435\u0440\u0442\u0430\u0432\u0430\u043d\u0435", "Superscript": "\u0413\u043e\u0440\u0435\u043d \u0438\u043d\u0434\u0435\u043a\u0441", "Subscript": "\u0414\u043e\u043b\u0435\u043d \u0438\u043d\u0434\u0435\u043a\u0441", "Clear formatting": "\u0418\u0437\u0447\u0438\u0441\u0442\u0432\u0430\u043d\u0435 \u043d\u0430 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u0430\u043d\u0435\u0442\u043e", "Align left": "\u041f\u043e\u0434\u0440\u0430\u0432\u043d\u044f\u0432\u0430\u043d\u0435 \u043e\u0442\u043b\u044f\u0432\u043e", "Align center": "\u0426\u0435\u043d\u0442\u0440\u0438\u0440\u0430\u043d\u0435", "Align right": "\u041f\u043e\u0434\u0440\u0430\u0432\u043d\u044f\u0432\u0430\u043d\u0435 \u043e\u0442\u0434\u044f\u0441\u043d\u043e", "Justify": "\u0414\u0432\u0443\u0441\u0442\u0440\u0430\u043d\u043d\u043e \u043f\u043e\u0434\u0440\u0430\u0432\u043d\u044f\u0432\u0430\u043d\u0435", "Bullet list": "\u0421\u043f\u0438\u0441\u044a\u043a \u0441 \u0432\u043e\u0434\u0430\u0447\u0438", "Numbered list": "\u041d\u043e\u043c\u0435\u0440\u0438\u0440\u0430\u043d \u0441\u043f\u0438\u0441\u044a\u043a", "Decrease indent": "\u041d\u0430\u043c\u0430\u043b\u044f\u0432\u0430\u043d\u0435 \u043d\u0430 \u043e\u0442\u0441\u0442\u044a\u043f\u0430", "Increase indent": "\u0423\u0432\u0435\u043b\u0438\u0447\u0430\u0432\u0430\u043d\u0435 \u043d\u0430 \u043e\u0442\u0441\u0442\u044a\u043f\u0430", "Close": "\u0417\u0430\u0442\u0432\u0430\u0440\u044f\u043d\u0435", "Formats": "\u0424\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u0430\u043d\u0435", "Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u0412\u0430\u0448\u0438\u044f\u0442 \u0431\u0440\u0430\u0443\u0437\u044a\u0440 \u043d\u0435 \u043f\u043e\u0434\u0434\u044a\u0440\u0436\u0430 \u0434\u0438\u0440\u0435\u043a\u0442\u0435\u043d \u0434\u043e\u0441\u0442\u044a\u043f \u0434\u043e \u043a\u043b\u0438\u043f\u0431\u043e\u0440\u0434\u0430. \u0412\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0432\u0430 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0439\u0442\u0435 \u043a\u043b\u0430\u0432\u0438\u0448\u043d\u0438\u0442\u0435 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0438 Ctrl+X (\u0437\u0430 \u0438\u0437\u0440\u044f\u0437\u0432\u0430\u043d\u0435), Ctrl+C (\u0437\u0430 \u043a\u043e\u043f\u0438\u0440\u0430\u043d\u0435) \u0438 Ctrl+V (\u0437\u0430 \u043f\u043e\u0441\u0442\u0430\u0432\u044f\u043d\u0435).", "Headers": "\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u044f", "Header 1": "\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435 1", "Header 2": "\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435 2", "Header 3": "\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435 3", "Header 4": "\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435 4", "Header 5": "\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435 5", "Header 6": "\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435 6", "Headings": "\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u044f", "Heading 1": "\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435 1", "Heading 2": "\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435 2", "Heading 3": "\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435 3", "Heading 4": "\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435 4", "Heading 5": "\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435 5", "Heading 6": "\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435 6", "Preformatted": "\u041f\u0440\u0435\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u0430\u043d", "Div": "\u0411\u043b\u043e\u043a", "Pre": "\u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u043d\u043e \u043e\u0444\u043e\u0440\u043c\u0435\u043d \u0442\u0435\u043a\u0441\u0442", "Code": "\u041a\u043e\u0434", "Paragraph": "\u041f\u0430\u0440\u0430\u0433\u0440\u0430\u0444", "Blockquote": "\u0426\u0438\u0442\u0430\u0442", "Inline": "\u041d\u0430 \u0435\u0434\u0438\u043d \u0440\u0435\u0434", "Blocks": "\u0411\u043b\u043e\u043a\u043e\u0432\u0435", "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u041f\u043e\u0441\u0442\u0430\u0432\u044f\u043d\u0435\u0442\u043e \u0432 \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0435 \u0432 \u043e\u0431\u0438\u043a\u043d\u043e\u0432\u0435\u043d \u0440\u0435\u0436\u0438\u043c. \u0421\u044a\u0434\u044a\u0440\u0436\u0430\u043d\u0438\u0435\u0442\u043e \u0449\u0435 \u0431\u044a\u0434\u0435 \u043f\u043e\u0441\u0442\u0430\u0432\u0435\u043d\u043e \u043a\u0430\u0442\u043e \u043d\u0435\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u0430\u043d \u0442\u0435\u043a\u0441\u0442, \u0434\u043e\u043a\u0430\u0442\u043e \u0438\u0437\u043a\u043b\u044e\u0447\u0438\u0442\u0435 \u0442\u0430\u0437\u0438 \u043e\u043f\u0446\u0438\u044f.", "Fonts": "\u0428\u0440\u0438\u0444\u0442\u043e\u0432\u0435", "Font Sizes": "\u0420\u0430\u0437\u043c\u0435\u0440 \u043d\u0430 \u0448\u0440\u0438\u0444\u0442\u0430", "Class": "\u041a\u043b\u0430\u0441", "Browse for an image": "\u041f\u043e\u0442\u044a\u0440\u0441\u0435\u0442\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435", "OR": "\u0418\u041b\u0418", "Drop an image here": "\u041f\u0443\u0441\u043d\u0435\u0442\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u0442\u043e \u0442\u0443\u043a", "Upload": "\u041a\u0430\u0447\u0432\u0430\u043d\u0435", "Block": "\u0411\u043b\u043e\u043a", "Align": "\u041f\u043e\u0434\u0440\u0430\u0432\u043d\u044f\u0432\u0430\u043d\u0435", "Default": "\u041f\u043e \u043f\u043e\u0434\u0440\u0430\u0437\u0431\u0438\u0440\u0430\u043d\u0435", "Circle": "\u041e\u043a\u0440\u044a\u0436\u043d\u043e\u0441\u0442\u0438", "Disc": "\u041a\u0440\u044a\u0433\u0447\u0435\u0442\u0430", "Square": "\u0417\u0430\u043f\u044a\u043b\u043d\u0435\u043d\u0438 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0438", "Lower Alpha": "\u041c\u0430\u043b\u043a\u0438 \u0431\u0443\u043a\u0432\u0438", "Lower Greek": "\u041c\u0430\u043b\u043a\u0438 \u0433\u0440\u044a\u0446\u043a\u0438 \u0431\u0443\u043a\u0432\u0438", "Lower Roman": "\u0420\u0438\u043c\u0441\u043a\u0438 \u0447\u0438\u0441\u043b\u0430 \u0441 \u043c\u0430\u043b\u043a\u0438 \u0431\u0443\u043a\u0432\u0438", "Upper Alpha": "\u0413\u043b\u0430\u0432\u043d\u0438 \u0431\u0443\u043a\u0432\u0438", "Upper Roman": "\u0420\u0438\u043c\u0441\u043a\u0438 \u0447\u0438\u0441\u043b\u0430 \u0441 \u0433\u043b\u0430\u0432\u043d\u0438 \u0431\u0443\u043a\u0432\u0438", "Anchor...": "\u041a\u043e\u0442\u0432\u0430...", "Name": "\u041d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435", "Id": "\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 (id)", "Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430 (id) \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u0437\u0430\u043f\u043e\u0447\u0432\u0430 \u0441 \u0431\u0443\u043a\u0432\u0430, \u043f\u043e\u0441\u043b\u0435\u0434\u0432\u0430\u043d \u043e\u0442 \u0431\u0443\u043a\u0432\u0438, \u0447\u0438\u0444\u0440\u0438, \u0442\u0438\u0440\u0435\u0442\u0430, \u0442\u043e\u0447\u043a\u0438, \u0434\u0432\u043e\u0435\u0442\u043e\u0447\u0438\u0435 \u0438 \u0434\u043e\u043b\u043d\u043e \u0442\u0438\u0440\u0435.", "You have unsaved changes are you sure you want to navigate away?": "\u0412 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430 \u0438\u043c\u0430 \u043d\u0435\u0437\u0430\u043f\u0430\u0437\u0435\u043d\u0438 \u043f\u0440\u043e\u043c\u0435\u043d\u0438. \u0429\u0435 \u043f\u0440\u043e\u0434\u044a\u043b\u0436\u0438\u0442\u0435 \u043b\u0438?", "Restore last draft": "\u0412\u044a\u0437\u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0432\u0430\u043d\u0435 \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0430\u0442\u0430 \u0447\u0435\u0440\u043d\u043e\u0432\u0430", "Special character...": "\u0421\u043f\u0435\u0446\u0438\u0430\u043b\u0435\u043d \u0441\u0438\u043c\u0432\u043e\u043b...", "Source code": "\u0418\u0437\u0445\u043e\u0434\u0435\u043d \u043a\u043e\u0434 \u043d\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430 \u0432 HTML", "Insert\/Edit code sample": "\u0412\u043c\u044a\u043a\u043d\u0438\/ \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0430\u0439 \u043f\u0440\u0438\u043c\u0435\u0440\u0435\u043d \u043a\u043e\u0434", "Language": "\u0415\u0437\u0438\u043a", "Code sample...": "\u041f\u0440\u0438\u043c\u0435\u0440\u0435\u043d \u043a\u043e\u0434...", "Color Picker": "\u0418\u0437\u0431\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0446\u0432\u044f\u0442", "R": "R", "G": "G", "B": "B", "Left to right": "\u041e\u0442\u043b\u044f\u0432\u043e \u043d\u0430\u0434\u044f\u0441\u043d\u043e", "Right to left": "\u041e\u0442\u0434\u044f\u0441\u043d\u043e \u043d\u0430\u043b\u044f\u0432\u043e", "Emoticons...": "\u0415\u043c\u043e\u0442\u0438\u043a\u043e\u043d\u0438...", "Metadata and Document Properties": "\u041c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u0438 \u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430", "Title": "\u041d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435", "Keywords": "\u041a\u043b\u044e\u0447\u043e\u0432\u0438 \u0434\u0443\u043c\u0438", "Description": "\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435", "Robots": "\u0420\u043e\u0431\u043e\u0442\u0438 \u043d\u0430 \u0443\u0435\u0431 \u0442\u044a\u0440\u0441\u0430\u0447\u043a\u0438", "Author": "\u0410\u0432\u0442\u043e\u0440", "Encoding": "\u041a\u043e\u0434\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0437\u043d\u0430\u0446\u0438\u0442\u0435", "Fullscreen": "\u041d\u0430 \u0446\u044f\u043b \u0435\u043a\u0440\u0430\u043d", "Action": "\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435", "Shortcut": "\u0411\u044a\u0440\u0437 \u043a\u043b\u0430\u0432\u0438\u0448", "Help": "\u041f\u043e\u043c\u043e\u0449", "Address": "\u0410\u0434\u0440\u0435\u0441", "Focus to menubar": "Focus to menubar", "Focus to toolbar": "Focus to toolbar", "Focus to element path": "Focus to element path", "Focus to contextual toolbar": "Focus to contextual toolbar", "Insert link (if link plugin activated)": "\u041f\u043e\u0441\u0442\u0430\u0432\u0438 \u0432\u0440\u044a\u0437\u043a\u0430 (\u0430\u043a\u043e \u043f\u043b\u044a\u0433\u0438\u043d\u0430 \u0437\u0430 \u0432\u0440\u044a\u0437\u043a\u0438 \u0435 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0430\u043d)", "Save (if save plugin activated)": "\u0417\u0430\u043f\u0438\u0448\u0438 (\u0430\u043a\u043e \u043f\u043b\u044a\u0433\u0438\u043d\u0430 \u0437\u0430 \u0437\u0430\u043f\u0438\u0441 \u0435 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0430\u043d)", "Find (if searchreplace plugin activated)": "\u041d\u0430\u043c\u0435\u0440\u0438 (\u0430\u043a\u043e \u043f\u043b\u044a\u0433\u0438\u043d\u0430 \u0437\u0430 \u0442\u044a\u0440\u0441\u0435\u043d\u0435\/\u0437\u0430\u043c\u044f\u043d\u0430 \u0435 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0430\u043d)", "Plugins installed ({0}):": "\u0418\u043d\u0441\u0442\u0430\u043b\u0438\u0440\u0430\u043d\u0438 \u043f\u043b\u044a\u0433\u0438\u043d\u0438 ({0}):", "Premium plugins:": "\u041f\u0440\u0435\u043c\u0438\u0439\u043d\u0438 \u043f\u043b\u044a\u0433\u0438\u043d\u0438:", "Learn more...": "\u041d\u0430\u0443\u0447\u0435\u0442\u0435 \u043f\u043e\u0432\u0435\u0447\u0435...", "You are using {0}": "\u0418\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0442\u0435 {0}", "Plugins": "Plugins", "Handy Shortcuts": "Handy Shortcuts", "Horizontal line": "\u0425\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u043d\u0430 \u0447\u0435\u0440\u0442\u0430", "Insert\/edit image": "\u0414\u043e\u0431\u0430\u0432\u044f\u043d\u0435\/\u043a\u043e\u0440\u0435\u043a\u0446\u0438\u044f \u043d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430", "Image description": "\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u0442\u043e", "Source": "\u0410\u0434\u0440\u0435\u0441", "Dimensions": "\u0420\u0430\u0437\u043c\u0435\u0440", "Constrain proportions": "\u0417\u0430\u0432\u0430\u0437\u043d\u0430\u0432\u0435 \u043d\u0430 \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u0438\u0442\u0435", "General": "\u041e\u0431\u0449\u043e", "Advanced": "\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e", "Style": "\u0421\u0442\u0438\u043b", "Vertical space": "\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e", "Horizontal space": "\u0425\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e", "Border": "\u041a\u0430\u043d\u0442 (\u0440\u0430\u043c\u043a\u0430)", "Insert image": "\u0414\u043e\u0431\u0430\u0432\u044f\u043d\u0435 \u043d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435", "Image...": "\u0418\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435...", "Image list": "\u0421\u043f\u0438\u0441\u044a\u043a \u0441 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438", "Rotate counterclockwise": "\u0417\u0430\u0432\u044a\u0440\u0442\u0430\u043d\u0435 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u043d\u0430 \u0447\u0430\u0441\u043e\u0432\u043d\u0438\u043a\u0430", "Rotate clockwise": "\u0417\u0430\u0432\u044a\u0440\u0442\u0430\u043d\u0435 \u043f\u043e \u0447\u0430\u0441\u043e\u0432\u043d\u0438\u043a\u0430", "Flip vertically": "\u041e\u0431\u044a\u0440\u043d\u0438 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u043d\u043e", "Flip horizontally": "\u041e\u0431\u044a\u0440\u043d\u0438 \u0445\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u043d\u043e", "Edit image": "\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u0442\u043e", "Image options": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u0442\u043e", "Zoom in": "\u041f\u0440\u0438\u0431\u043b\u0438\u0436\u0438", "Zoom out": "\u041e\u0442\u0434\u0430\u043b\u0435\u0447\u0438", "Crop": "\u0418\u0437\u0440\u044f\u0437\u0432\u0430\u043d\u0435", "Resize": "\u041f\u0440\u0435\u043e\u0440\u0430\u0437\u043c\u0435\u0440\u044f\u0432\u0430\u043d\u0435", "Orientation": "\u041e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u044f", "Brightness": "\u042f\u0440\u043a\u043e\u0441\u0442", "Sharpen": "\u0418\u0437\u043e\u0441\u0442\u0440\u044f\u043d\u0435", "Contrast": "\u041a\u043e\u043d\u0442\u0440\u0430\u0441\u0442", "Color levels": "\u0426\u0432\u0435\u0442\u043d\u0438 \u043d\u0438\u0432\u0430", "Gamma": "\u0413\u0430\u043c\u0430", "Invert": "\u0418\u043d\u0432\u0435\u0440\u0441\u0438\u044f", "Apply": "\u041f\u0440\u0438\u043b\u043e\u0436\u0438", "Back": "\u041d\u0430\u0437\u0430\u0434", "Insert date\/time": "\u0414\u043e\u0431\u0430\u0432\u044f\u043d\u0435 \u043d\u0430 \u0434\u0430\u0442\u0430\/\u0447\u0430\u0441", "Date\/time": "\u0414\u0430\u0442\u0430\/\u0447\u0430\u0441", "Insert\/Edit Link": "\u0414\u043e\u0431\u0430\u0432\u044f\u043d\u0435\/\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0445\u0438\u043f\u0435\u0440\u0432\u0440\u044a\u0437\u043a\u0430 (\u043b\u0438\u043d\u043a)", "Insert\/edit link": "\u0414\u043e\u0431\u0430\u0432\u044f\u043d\u0435\/\u043a\u043e\u0440\u0435\u043a\u0446\u0438\u044f \u043d\u0430 \u0445\u0438\u043f\u0435\u0440\u0432\u0440\u044a\u0437\u043a\u0430 (\u043b\u0438\u043d\u043a)", "Text to display": "\u0422\u0435\u043a\u0441\u0442", "Url": "\u0410\u0434\u0440\u0435\u0441 (URL)", "Open link in...": "\u041e\u0442\u0432\u0430\u0440\u044f\u043d\u0435 \u043d\u0430 \u0445\u0438\u043f\u0435\u0440\u0432\u0440\u044a\u0437\u043a\u0430 \u0432...", "Current window": "\u0422\u0435\u043a\u0443\u0449 \u043f\u0440\u043e\u0437\u043e\u0440\u0435\u0446", "None": "\u0411\u0435\u0437", "New window": "\u0412 \u043d\u043e\u0432 \u043f\u0440\u043e\u0437\u043e\u0440\u0435\u0446 (\u043f\u043e\u0434\u043f\u0440\u043e\u0437\u043e\u0440\u0435\u0446)", "Remove link": "\u041f\u0440\u0435\u043c\u0430\u0445\u0432\u0430\u043d\u0435 \u043d\u0430 \u0445\u0438\u043f\u0435\u0440\u0432\u0440\u044a\u0437\u043a\u0430", "Anchors": "\u041a\u043e\u0442\u0432\u0438", "Link...": "\u0425\u0438\u043f\u0435\u0440\u0432\u0440\u044a\u0437\u043a\u0430...", "Paste or type a link": "\u041f\u043e\u0441\u0442\u0430\u0432\u0435\u0442\u0435 \u0438\u043b\u0438 \u043d\u0430\u043f\u0438\u0448\u0435\u0442\u0435 \u0432\u0440\u044a\u0437\u043a\u0430(\u043b\u0438\u043d\u043a)", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "URL \u0430\u0434\u0440\u0435\u0441\u044a\u0442, \u043a\u043e\u0439\u0442\u043e \u0432\u044a\u0432\u0434\u043e\u0445\u0442\u0435 \u043f\u0440\u0438\u043b\u0438\u0447\u0430 \u043d\u0430 \u0435-\u043c\u0435\u0439\u043b \u0430\u0434\u0440\u0435\u0441. \u0418\u0441\u043a\u0430\u0442\u0435 \u043b\u0438 \u0434\u0430 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0438\u044f mailto: \u043f\u0440\u0435\u0444\u0438\u043a\u0441?", "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "URL \u0430\u0434\u0440\u0435\u0441\u044a\u0442, \u043a\u043e\u0439\u0442\u043e \u0432\u044a\u0432\u0434\u043e\u0445\u0442\u0435 \u043f\u0440\u0438\u043b\u0438\u0447\u0430 \u0432\u044a\u043d\u0448\u0435\u043d \u0430\u0434\u0440\u0435\u0441. \u0418\u0441\u043a\u0430\u0442\u0435 \u043b\u0438 \u0434\u0430 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0438\u044f http:\/\/ \u043f\u0440\u0435\u0444\u0438\u043a\u0441?", "Link list": "\u0421\u043f\u0438\u0441\u044a\u043a \u0441 \u0432\u0440\u044a\u0437\u043a\u0438", "Insert video": "\u0414\u043e\u0431\u0430\u0432\u044f\u043d\u0435 \u043d\u0430 \u0432\u0438\u0434\u0435\u043e", "Insert\/edit video": "\u0414\u043e\u0431\u0430\u0432\u044f\u043d\u0435\/\u043a\u043e\u0440\u0435\u043a\u0446\u0438\u044f \u043d\u0430 \u0432\u0438\u0434\u0435\u043e", "Insert\/edit media": "\u0414\u043e\u0431\u0430\u0432\u044f\u043d\u0435\/\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u043c\u0435\u0434\u0438\u044f", "Alternative source": "\u0410\u043b\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0435\u043d \u0430\u0434\u0440\u0435\u0441", "Alternative source URL": "\u0410\u043b\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0435\u043d \u0430\u0434\u0440\u0435\u0441 URL", "Media poster (Image URL)": "\u041c\u0435\u0434\u0438\u0435\u043d \u043f\u043b\u0430\u043a\u0430\u0442 (\u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 URL)", "Paste your embed code below:": "\u041f\u043e\u0441\u0442\u0430\u0432\u0435\u0442\u0435 \u043a\u043e\u0434\u0430 \u0437\u0430 \u0432\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435 \u0432 \u043f\u043e\u043b\u0435\u0442\u043e \u043f\u043e-\u0434\u043e\u043b\u0443:", "Embed": "\u0412\u0433\u0440\u0430\u0436\u0434\u0430\u043d\u0435", "Media...": "\u041c\u0435\u0434\u0438\u044f...", "Nonbreaking space": "\u0418\u043d\u0442\u0435\u0440\u0432\u0430\u043b", "Page break": "\u041d\u043e\u0432\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430", "Paste as text": "\u041f\u043e\u0441\u0442\u0430\u0432\u0438 \u043a\u0430\u0442\u043e \u0442\u0435\u043a\u0441\u0442", "Preview": "\u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u0435\u043d \u0438\u0437\u0433\u043b\u0435\u0434", "Print...": "\u041e\u0442\u043f\u0435\u0447\u0430\u0442\u0432\u0430\u043d\u0435...", "Save": "\u0421\u044a\u0445\u0440\u0430\u043d\u044f\u0432\u0430\u043d\u0435", "Find": "\u0422\u044a\u0440\u0441\u0435\u043d\u0435 \u0437\u0430", "Replace with": "\u0417\u0430\u043c\u044f\u043d\u0430 \u0441", "Replace": "\u0417\u0430\u043c\u044f\u043d\u0430", "Replace all": "\u0417\u0430\u043c\u044f\u043d\u0430 \u043d\u0430 \u0432\u0441\u0438\u0447\u043a\u0438 \u0441\u0440\u0435\u0449\u0430\u043d\u0438\u044f", "Previous": "\u041f\u0440\u0435\u0434\u0438\u0448\u0435\u043d", "Next": "\u0421\u043b\u0435\u0434\u0432\u0430\u0449", "Find and replace...": "\u041d\u0430\u043c\u0438\u0440\u0430\u043d\u0435 \u0438 \u0437\u0430\u043c\u044f\u043d\u0430...", "Could not find the specified string.": "\u0422\u044a\u0440\u0441\u0435\u043d\u0438\u044f\u0442 \u0442\u0435\u043a\u0441\u0442 \u043d\u0435 \u0435 \u043d\u0430\u043c\u0435\u0440\u0435\u043d.", "Match case": "\u0421\u044a\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u043d\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u044a\u0440\u0430 (\u043c\u0430\u043b\u043a\u0438\/\u0433\u043b\u0430\u0432\u043d\u0438 \u0431\u0443\u043a\u0432\u0438)", "Find whole words only": "\u0422\u044a\u0440\u0441\u0435\u043d\u0435 \u0441\u0430\u043c\u043e \u043d\u0430 \u0446\u0435\u043b\u0438 \u0434\u0443\u043c\u0438", "Spell check": "\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u043f\u0440\u0430\u0432\u043e\u043f\u0438\u0441\u0430", "Ignore": "\u0418\u0433\u043d\u043e\u0440\u0438\u0440\u0430\u043d\u0435", "Ignore all": "\u0418\u0433\u043d\u043e\u0440\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0432\u0441\u0438\u0447\u043a\u043e", "Finish": "\u041a\u0440\u0430\u0439", "Add to Dictionary": "\u0414\u043e\u0431\u0430\u0432\u0438 \u0432 \u0440\u0435\u0447\u043d\u0438\u043a\u0430", "Insert table": "\u0414\u043e\u0431\u0430\u0432\u044f\u043d\u0435 \u043d\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0430", "Table properties": "\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0442\u0430", "Delete table": "\u0418\u0437\u0442\u0440\u0438\u0432\u0430\u043d\u0435 \u043d\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0442\u0430", "Cell": "\u041a\u043b\u0435\u0442\u043a\u0430", "Row": "\u0420\u0435\u0434", "Column": "\u041a\u043e\u043b\u043e\u043d\u0430", "Cell properties": "\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0430 \u043a\u043b\u0435\u0442\u043a\u0430\u0442\u0430", "Merge cells": "\u0421\u043b\u0438\u0432\u0430\u043d\u0435 \u043d\u0430 \u043a\u043b\u0435\u0442\u043a\u0438\u0442\u0435", "Split cell": "\u0420\u0430\u0437\u0434\u0435\u043b\u044f\u043d\u0435 \u043d\u0430 \u043a\u043b\u0435\u0442\u043a\u0430", "Insert row before": "\u0412\u043c\u044a\u043a\u0432\u0430\u043d\u0435 \u043d\u0430 \u0440\u0435\u0434 \u043f\u0440\u0435\u0434\u0438", "Insert row after": "\u0412\u043c\u044a\u043a\u0432\u0430\u043d\u0435 \u043d\u0430 \u0440\u0435\u0434 \u0441\u043b\u0435\u0434", "Delete row": "\u0418\u0437\u0442\u0440\u0438\u0432\u0430\u043d\u0435 \u043d\u0430 \u0440\u0435\u0434\u0430", "Row properties": "\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0430 \u0440\u0435\u0434\u0430", "Cut row": "\u0418\u0437\u0440\u044f\u0437\u0432\u0430\u043d\u0435 \u043d\u0430 \u0440\u0435\u0434", "Copy row": "\u041a\u043e\u043f\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0440\u0435\u0434", "Paste row before": "\u041f\u043e\u0441\u0442\u0430\u0432\u044f\u043d\u0435 \u043d\u0430 \u0440\u0435\u0434 \u043f\u0440\u0435\u0434\u0438", "Paste row after": "\u041f\u043e\u0441\u0442\u0430\u0432\u044f\u043d\u0435 \u043d\u0430 \u0440\u0435\u0434 \u0441\u043b\u0435\u0434", "Insert column before": "\u0412\u043c\u044a\u043a\u0432\u0430\u043d\u0435 \u043d\u0430 \u043a\u043e\u043b\u043e\u043d\u0430 \u043f\u0440\u0435\u0434\u0438", "Insert column after": "\u0412\u043c\u044a\u043a\u0432\u0430\u043d\u0435 \u043d\u0430 \u043a\u043e\u043b\u043e\u043d\u0430 \u0441\u043b\u0435\u0434", "Delete column": "\u0418\u0437\u0442\u0440\u0438\u0432\u0430\u043d\u0435 \u043d\u0430 \u043a\u043e\u043b\u043e\u043d\u0430\u0442\u0430", "Cols": "\u041a\u043e\u043b\u043e\u043d\u0438", "Rows": "\u0420\u0435\u0434\u043e\u0432\u0435", "Width": "\u0428\u0438\u0440\u0438\u043d\u0430", "Height": "\u0412\u0438\u0441\u043e\u0447\u0438\u043d\u0430", "Cell spacing": "\u0420\u0430\u0437\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u043a\u043b\u0435\u0442\u043a\u0438\u0442\u0435", "Cell padding": "\u0420\u0430\u0437\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0434\u043e \u0441\u044a\u0434\u044a\u0440\u0436\u0430\u043d\u0438\u0435\u0442\u043e", "Show caption": "\u041f\u043e\u043a\u0430\u0437\u0432\u0430\u043d\u0435 \u043d\u0430 \u043d\u0430\u0434\u043f\u0438\u0441", "Left": "\u041b\u044f\u0432\u043e", "Center": "\u0426\u0435\u043d\u0442\u0440\u0438\u0440\u0430\u043d\u043e", "Right": "\u0414\u044f\u0441\u043d\u043e", "Cell type": "\u0422\u0438\u043f \u043d\u0430 \u043a\u043b\u0435\u0442\u043a\u0430\u0442\u0430", "Scope": "\u041e\u0431\u0445\u0432\u0430\u0442", "Alignment": "\u041f\u043e\u0434\u0440\u0430\u0432\u043d\u044f\u0432\u0430\u043d\u0435", "H Align": "\u0425\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u043d\u043e \u043f\u043e\u0434\u0440\u0430\u0432\u043d\u044f\u0432\u0430\u043d\u0435", "V Align": "\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u043d\u043e \u043f\u043e\u0434\u0440\u0430\u0432\u043d\u044f\u0432\u0430\u043d\u0435", "Top": "\u0413\u043e\u0440\u0435", "Middle": "\u041f\u043e \u0441\u0440\u0435\u0434\u0430\u0442\u0430", "Bottom": "\u0414\u043e\u043b\u0443", "Header cell": "\u0417\u0430\u0433\u043b\u0430\u0432\u043d\u0430 \u043a\u043b\u0435\u0442\u043a\u0430 (\u0430\u043d\u0442\u0435\u0442\u043a\u0430)", "Row group": "Row group", "Column group": "Column group", "Row type": "\u0422\u0438\u043f \u043d\u0430 \u0440\u0435\u0434\u0430", "Header": "\u0413\u043e\u0440\u0435\u043d \u043a\u043e\u043b\u043e\u043d\u0442\u0438\u0442\u0443\u043b (header)", "Body": "\u0421\u044a\u0434\u044a\u0440\u0436\u0430\u043d\u0438\u0435 (body)", "Footer": "\u0414\u043e\u043b\u0435\u043d \u043a\u043e\u043b\u043e\u043d\u0442\u0438\u0442\u0443\u043b (footer)", "Border color": "\u0426\u0432\u044f\u0442 \u043d\u0430 \u0440\u0430\u043c\u043a\u0430\u0442\u0430", "Insert template...": "\u0412\u043c\u044a\u043a\u0432\u0430\u043d\u0435 \u043d\u0430 \u0448\u0430\u0431\u043b\u043e\u043d...", "Templates": "\u0428\u0430\u0431\u043b\u043e\u043d\u0438", "Template": "\u0428\u0430\u0431\u043b\u043e\u043d", "Text color": "\u0426\u0432\u044f\u0442 \u043d\u0430 \u0448\u0440\u0438\u0444\u0442\u0430", "Background color": "\u0424\u043e\u043d\u043e\u0432 \u0446\u0432\u044f\u0442", "Custom...": "\u0418\u0437\u0431\u0440\u0430\u043d...", "Custom color": "\u0426\u0432\u044f\u0442 \u043f\u043e \u0438\u0437\u0431\u043e\u0440", "No color": "\u0411\u0435\u0437 \u0446\u0432\u044f\u0442", "Remove color": "\u041f\u0440\u0435\u043c\u0430\u0445\u0432\u0430\u043d\u0435 \u043d\u0430 \u0446\u0432\u0435\u0442\u0430", "Table of Contents": "\u0421\u044a\u0434\u044a\u0440\u0436\u0430\u043d\u0438\u0435", "Show blocks": "\u041f\u043e\u043a\u0430\u0437\u0432\u0430\u043d\u0435 \u043d\u0430 \u0431\u043b\u043e\u043a\u043e\u0432\u0435\u0442\u0435", "Show invisible characters": "\u041f\u043e\u043a\u0430\u0437\u0432\u0430\u043d\u0435 \u043d\u0430 \u043d\u0435\u043f\u0435\u0447\u0430\u0442\u0430\u0435\u043c\u0438 \u0437\u043d\u0430\u0446\u0438", "Word count": "\u0411\u0440\u043e\u0435\u043d\u0435 \u043d\u0430 \u0434\u0443\u043c\u0438", "Count": "\u0411\u0440\u043e\u0439", "Document": "\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442", "Selection": "\u0418\u0437\u0431\u0440\u0430\u043d\u043e", "Words": "\u0414\u0443\u043c\u0438", "Words: {0}": "\u0411\u0440\u043e\u0439 \u0434\u0443\u043c\u0438: {0}", "{0} words": "{0} \u0431\u0440\u043e\u0439 \u0434\u0443\u043c\u0438", "File": "\u0424\u0430\u0439\u043b", "Edit": "\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0430\u043d\u0435", "Insert": "\u0412\u043c\u044a\u043a\u0432\u0430\u043d\u0435", "View": "\u0418\u0437\u0433\u043b\u0435\u0434", "Format": "\u0424\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u0430\u043d\u0435", "Table": "\u0422\u0430\u0431\u043b\u0438\u0446\u0430", "Tools": "\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0438", "Powered by {0}": "\u0421\u044a\u0437\u0434\u0430\u0434\u0435\u043d\u043e \u0441 {0}", "Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u041f\u043e\u043b\u0435 \u0437\u0430 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u0430\u043d \u0442\u0435\u043a\u0441\u0442. \u041d\u0430\u0442\u0438\u0441\u043d\u0435\u0442\u0435 Alt+F9 \u0437\u0430 \u043c\u0435\u043d\u044e; Alt+F10 \u0437\u0430 \u043b\u0435\u043d\u0442\u0430 \u0441 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0438; Alt+0 \u0437\u0430 \u043f\u043e\u043c\u043e\u0449.", "Image title": "\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435 \u043d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u0442\u043e", "Border width": "\u0428\u0438\u0440\u0438\u043d\u0430 \u043d\u0430 \u0440\u0430\u043c\u043a\u0430\u0442\u0430", "Border style": "\u0421\u0442\u0438\u043b \u043d\u0430 \u0440\u0430\u043c\u043a\u0430\u0442\u0430", "Error": "\u0413\u0440\u0435\u0448\u043a\u0430", "Warn": "\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435", "Valid": "\u0412\u0430\u043b\u0438\u0434\u043d\u043e", "To open the popup, press Shift+Enter": "\u0417\u0430 \u0434\u0430 \u043e\u0442\u0432\u043e\u0440\u0438\u0442\u0435 \u0438\u0437\u0441\u043a\u0430\u0447\u0430\u0449\u0438\u044f \u043f\u0440\u043e\u0437\u043e\u0440\u0435\u0446, \u043d\u0430\u0442\u0438\u0441\u043d\u0435\u0442\u0435 Shift+Enter", "Rich Text Area. Press ALT-0 for help.": "\u041f\u043e\u043b\u0435 \u0437\u0430 \u043e\u0431\u043e\u0433\u0430\u0442\u0435\u043d \u0442\u0435\u043a\u0441\u0442. \u041d\u0430\u0442\u0438\u0441\u043d\u0435\u0442\u0435 ALT+0 \u0437\u0430 \u043f\u043e\u043c\u043e\u0449.", "System Font": "\u0421\u0438\u0441\u0442\u0435\u043c\u0435\u043d \u0448\u0440\u0438\u0444\u0442", "Failed to upload image: {0}": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043a\u0430\u0447\u0432\u0430\u043d\u0435 \u043d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435: {0}", "Failed to load plugin: {0} from url {1}": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0437\u0430\u0440\u0435\u0436\u0434\u0430\u043d\u0435 \u043d\u0430 \u043f\u043b\u044a\u0433\u0438\u043d {0} \u043e\u0442 URL {1}", "Failed to load plugin url: {0}": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0437\u0430\u0440\u0435\u0436\u0434\u0430\u043d\u0435 \u043d\u0430 URL \u043d\u0430 \u043f\u043b\u044a\u0433\u0438\u043d: {0}", "Failed to initialize plugin: {0}": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u043f\u043b\u044a\u0433\u0438\u043d: {0}", "example": "\u043f\u0440\u0438\u043c\u0435\u0440", "Search": "\u0422\u044a\u0440\u0441\u0435\u043d\u0435", "All": "\u0412\u0441\u0438\u0447\u043a\u0438", "Currency": "\u0412\u0430\u043b\u0443\u0442\u0430", "Text": "\u0422\u0435\u043a\u0441\u0442", "Quotations": "\u0426\u0438\u0442\u0430\u0442\u0438", "Mathematical": "\u041c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438", "Extended Latin": "\u0420\u0430\u0437\u0448\u0438\u0440\u0435\u043d\u0438 \u043b\u0430\u0442\u0438\u043d\u0441\u043a\u0438 \u0431\u0443\u043a\u0432\u0438", "Symbols": "\u0421\u0438\u043c\u0432\u043e\u043b\u0438", "Arrows": "\u0421\u0442\u0440\u0435\u043b\u043a\u0438", "User Defined": "\u0417\u0430\u0434\u0430\u0434\u0435\u043d\u0438 \u043e\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u044f", "dollar sign": "\u0437\u043d\u0430\u043a \u0437\u0430 \u0434\u043e\u043b\u0430\u0440", "currency sign": "\u0437\u043d\u0430\u043a \u0437\u0430 \u0432\u0430\u043b\u0443\u0442\u0430", "euro-currency sign": "\u0437\u043d\u0430\u043a \u0437\u0430 \u0435\u0432\u0440\u043e \u0432\u0430\u043b\u0443\u0442\u0430", "colon sign": "\u0437\u043d\u0430\u043a \u0437\u0430 \u043a\u043e\u043b\u043e\u043d", "cruzeiro sign": "\u0437\u043d\u0430\u043a \u0437\u0430 \u043a\u0440\u0443\u0437\u0435\u0439\u0440\u043e", "french franc sign": "\u0437\u043d\u0430\u043a \u0437\u0430 \u0444\u0440\u0435\u043d\u0441\u043a\u0438 \u0444\u0440\u0430\u043d\u043a", "lira sign": "\u0437\u043d\u0430\u043a \u0437\u0430 \u043b\u0438\u0440\u0430", "mill sign": "\u0437\u043d\u0430\u043a \u0437\u0430 \u043c\u0438\u043b", "naira sign": "\u0437\u043d\u0430\u043a \u0437\u0430 \u043d\u0430\u0439\u0440\u0430", "peseta sign": "\u0437\u043d\u0430\u043a \u0437\u0430 \u043f\u0435\u0441\u0435\u0442\u0430", "rupee sign": "\u0437\u043d\u0430\u043a \u0437\u0430 \u0440\u0443\u043f\u0438\u044f", "won sign": "\u0437\u043d\u0430\u043a \u0437\u0430 \u043a\u043e\u0440\u0435\u0439\u0441\u043a\u0438 \u0432\u043e\u043d", "new sheqel sign": "\u0437\u043d\u0430\u043a \u0437\u0430 \u043d\u043e\u0432 \u0448\u0435\u043a\u0435\u043b", "dong sign": "\u0437\u043d\u0430\u043a \u0437\u0430 \u0432\u0438\u0435\u0442\u043d\u0430\u043c\u0441\u043a\u0438 \u0434\u043e\u043d\u0433", "kip sign": "\u0437\u043d\u0430\u043a \u0437\u0430 \u043b\u0430\u043e\u0441\u043a\u0438 \u043a\u0438\u043f", "tugrik sign": "\u0437\u043d\u0430\u043a \u0437\u0430 \u043c\u043e\u043d\u0433\u043e\u043b\u0441\u043a\u0438 \u0442\u0443\u0433\u0440\u0438\u043a", "drachma sign": "\u0437\u043d\u0430\u043a \u0437\u0430 \u0434\u0440\u0430\u0445\u043c\u0430", "german penny symbol": "\u0441\u0438\u043c\u0432\u043e\u043b \u0437\u0430 \u0433\u0435\u0440\u043c\u0430\u043d\u0441\u043a\u043e \u043f\u0435\u043d\u0438", "peso sign": "\u0437\u043d\u0430\u043a \u0437\u0430 \u043f\u0435\u0441\u043e", "guarani sign": "\u0437\u043d\u0430\u043a \u0437\u0430 \u0433\u0443\u0430\u0440\u0430\u043d\u0438", "austral sign": "\u0437\u043d\u0430\u043a \u0437\u0430 \u0430\u0443\u0441\u0442\u0440\u0430\u043b", "hryvnia sign": "\u0437\u043d\u0430\u043a \u0437\u0430 \u0433\u0440\u0438\u0432\u043d\u044f", "cedi sign": "\u0437\u043d\u0430\u043a \u0437\u0430 \u0441\u0435\u0434\u0438", "livre tournois sign": "\u0437\u043d\u0430\u043a \u0437\u0430 \u043b\u0438\u0432\u0440 \u0442\u0443\u0440\u043d\u0443\u0430", "spesmilo sign": "\u0437\u043d\u0430\u043a \u0437\u0430 \u0441\u043f\u0435\u0441\u043c\u0438\u043b\u043e", "tenge sign": "\u0437\u043d\u0430\u043a \u0437\u0430 \u0442\u0435\u043d\u0433\u0435", "indian rupee sign": "\u0437\u043d\u0430\u043a \u0437\u0430 \u0438\u043d\u0434\u0438\u0439\u0441\u043a\u0430 \u0440\u0443\u043f\u0438\u044f", "turkish lira sign": "\u0437\u043d\u0430\u043a \u0437\u0430 \u0442\u0443\u0440\u0441\u043a\u0430 \u043b\u0438\u0440\u0430", "nordic mark sign": "\u0437\u043d\u0430\u043a \u0437\u0430 \u043d\u043e\u0440\u0434\u0441\u043a\u0430 \u043c\u0430\u0440\u043a\u0430", "manat sign": "\u0437\u043d\u0430\u043a \u0437\u0430 \u043c\u0430\u043d\u0430\u0442", "ruble sign": "\u0437\u043d\u0430\u043a \u0437\u0430 \u0440\u0443\u0431\u043b\u0430", "yen character": "\u0441\u0438\u043c\u0432\u043e\u043b \u0437\u0430 \u0439\u0435\u043d\u0430", "yuan character": "\u0441\u0438\u043c\u0432\u043e\u043b \u0437\u0430 \u044e\u0430\u043d", "yuan character, in hong kong and taiwan": "\u0441\u0438\u043c\u0432\u043e\u043b \u0437\u0430 \u044e\u0430\u043d \u0432 \u0425\u043e\u043d\u043a\u043e\u043d\u0433 \u0438 \u0422\u0430\u0439\u0432\u0430\u043d", "yen\/yuan character variant one": "\u0441\u0438\u043c\u0432\u043e\u043b \u0437\u0430 \u0439\u0435\u043d\u0430\/\u044e\u0430\u043d \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0435\u0434\u043d\u043e", "Loading emoticons...": "\u0417\u0430\u0440\u0435\u0436\u0434\u0430\u043d\u0435 \u043d\u0430 \u0435\u043c\u043e\u0442\u0438\u043a\u043e\u043d\u0438...", "Could not load emoticons": "\u041d\u0435\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0437\u0430\u0440\u0435\u0436\u0434\u0430\u043d\u0435 \u043d\u0430 \u0435\u043c\u043e\u0442\u0438\u043a\u043e\u043d\u0438", "People": "\u0425\u043e\u0440\u0430", "Animals and Nature": "\u0416\u0438\u0432\u043e\u0442\u043d\u0438 \u0438 \u043f\u0440\u0438\u0440\u043e\u0434\u0430", "Food and Drink": "\u0425\u0440\u0430\u043d\u0430 \u0438 \u043d\u0430\u043f\u0438\u0442\u043a\u0438", "Activity": "\u0414\u0435\u0439\u043d\u043e\u0441\u0442\u0438", "Travel and Places": "\u041f\u044a\u0442\u0443\u0432\u0430\u043d\u0435 \u0438 \u043c\u0435\u0441\u0442\u0430", "Objects": "\u041f\u0440\u0435\u0434\u043c\u0435\u0442\u0438", "Flags": "\u0417\u043d\u0430\u043c\u0435\u043d\u0430", "Characters": "\u0421\u0438\u043c\u0432\u043e\u043b\u0438", "Characters (no spaces)": "\u0421\u0438\u043c\u0432\u043e\u043b\u0438 (\u0431\u0435\u0437 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0438)", "{0} characters": "{0} \u0441\u0438\u043c\u0432\u043e\u043b\u0430", "Error: Form submit field collision.": "\u0413\u0440\u0435\u0448\u043a\u0430: \u041d\u0435\u0441\u044a\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u043d\u0430 \u043f\u043e\u043b\u0435 \u043f\u0440\u0438 \u0438\u0437\u043f\u0440\u0430\u0449\u0430\u043d\u0435 \u043d\u0430 \u0444\u043e\u0440\u043c\u0443\u043b\u044f\u0440.", "Error: No form element found.": "\u0413\u0440\u0435\u0448\u043a\u0430: \u041d\u0435 \u0435 \u043e\u0442\u043a\u0440\u0438\u0442 \u0435\u043b\u0435\u043c\u0435\u043d\u0442 \u043d\u0430 \u0444\u043e\u0440\u043c\u0443\u043b\u044f\u0440\u0430.", "Update": "\u0410\u043a\u0442\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u0430\u043d\u0435", "Color swatch": "\u0426\u0432\u0435\u0442\u043d\u0430 \u043c\u043e\u0441\u0442\u0440\u0430", "Turquoise": "\u0422\u044e\u0440\u043a\u043e\u0430\u0437\u0435\u043d\u043e", "Green": "\u0417\u0435\u043b\u0435\u043d\u043e", "Blue": "\u0421\u0438\u043d\u044c\u043e", "Purple": "\u041b\u0438\u043b\u0430\u0432\u043e", "Navy Blue": "\u041c\u043e\u0440\u0441\u043a\u043e\u0441\u0438\u043d\u044c\u043e", "Dark Turquoise": "\u0422\u044a\u043c\u043d\u043e\u0442\u044e\u0440\u043a\u043e\u0430\u0437\u0435\u043d\u043e", "Dark Green": "\u0422\u044a\u043c\u043d\u043e\u0437\u0435\u043b\u0435\u043d\u043e", "Medium Blue": "\u0421\u0440\u0435\u0434\u043d\u043e\u0441\u0438\u043d\u044c\u043e", "Medium Purple": "\u0421\u0440\u0435\u0434\u043d\u043e\u043b\u0438\u043b\u0430\u0432\u043e", "Midnight Blue": "\u0421\u0440\u0435\u0434\u043d\u043e\u0449\u043d\u043e \u0441\u0438\u043d\u044c\u043e", "Yellow": "\u0416\u044a\u043b\u0442\u043e", "Orange": "\u041e\u0440\u0430\u043d\u0436\u0435\u0432\u043e", "Red": "\u0427\u0435\u0440\u0432\u0435\u043d\u043e", "Light Gray": "\u0421\u0432\u0435\u0442\u043b\u043e\u0441\u0438\u0432\u043e", "Gray": "\u0421\u0438\u0432\u043e", "Dark Yellow": "\u0422\u044a\u043c\u043d\u043e\u0436\u044a\u043b\u0442\u043e", "Dark Orange": "\u0422\u044a\u043c\u043d\u043e\u043e\u0440\u0430\u043d\u0436\u0435\u0432\u043e", "Dark Red": "\u0422\u044a\u043c\u043d\u043e\u0447\u0435\u0440\u0432\u0435\u043d\u043e", "Medium Gray": "\u0421\u0440\u0435\u0434\u043d\u043e\u0441\u0438\u0432\u043e", "Dark Gray": "\u0422\u044a\u043c\u043d\u043e\u0441\u0438\u0432\u043e", "Light Green": "\u0421\u0432\u0435\u0442\u043b\u043e\u0437\u0435\u043b\u0435\u043d", "Light Yellow": "\u0421\u0432\u0435\u0442\u043b\u043e\u0436\u044a\u043b\u0442", "Light Red": "\u0421\u0432\u0435\u0442\u043b\u043e\u0447\u0435\u0440\u0432\u0435\u043d", "Light Purple": "\u0421\u0432\u0435\u0442\u043b\u043e\u043b\u0438\u043b\u0430\u0432", "Light Blue": "\u0421\u0432\u0435\u0442\u043b\u043e\u0441\u0438\u043d", "Dark Purple": "\u0422\u044a\u043c\u043d\u043e\u043b\u0438\u043b\u0430\u0432", "Dark Blue": "\u0422\u044a\u043c\u043d\u043e\u0441\u0438\u043d", "Black": "\u0427\u0435\u0440\u043d\u043e", "White": "\u0411\u044f\u043b\u043e", "Switch to or from fullscreen mode": "\u041f\u0440\u0435\u0432\u043a\u043b\u044e\u0447\u0432\u0430\u043d\u0435 \u043a\u044a\u043c \u0438\u043b\u0438 \u043e\u0442 \u0440\u0435\u0436\u0438\u043c \u043d\u0430 \u0446\u044f\u043b \u0435\u043a\u0440\u0430\u043d", "Open help dialog": "\u041e\u0442\u0432\u0430\u0440\u044f\u043d\u0435 \u043d\u0430 \u0434\u0438\u0430\u043b\u043e\u0433\u043e\u0432 \u043f\u0440\u043e\u0437\u043e\u0440\u0435\u0446 \u0437\u0430 \u043f\u043e\u043c\u043e\u0449", "history": "\u0438\u0441\u0442\u043e\u0440\u0438\u044f", "styles": "\u0441\u0442\u0438\u043b\u043e\u0432\u0435", "formatting": "\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u0430\u043d\u0435", "alignment": "\u043f\u043e\u0434\u0440\u0430\u0432\u043d\u044f\u0432\u0430\u043d\u0435", "indentation": "\u043e\u0442\u0441\u0442\u044a\u043f", "permanent pen": "\u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u0430 \u0445\u0438\u043c\u0438\u043a\u0430\u043b\u043a\u0430", "comments": "\u043a\u043e\u043c\u0435\u043d\u0442\u0430\u0440\u0438", "Format Painter": "\u041a\u043e\u043f\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u0430\u043d\u0435\u0442\u043e", "Insert\/edit iframe": "\u0414\u043e\u0431\u0430\u0432\u044f\u043d\u0435\/\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043d\u0435 \u043d\u0430 iframe", "Capitalization": "\u0413\u043b\u0430\u0432\u043d\u0430 \u0431\u0443\u043a\u0432\u0430", "lowercase": "\u043c\u0430\u043b\u043a\u0438 \u0431\u0443\u043a\u0432\u0438", "UPPERCASE": "\u0413\u041e\u041b\u0415\u041c\u0418 \u0411\u0423\u041a\u0412\u0418", "Title Case": "\u0417\u0430\u0433\u043b\u0430\u0432\u043d\u0438 \u0411\u0443\u043a\u0432\u0438", "Permanent Pen Properties": "\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0430 \u041f\u0435\u0440\u043c\u0430\u043d\u0435\u043d\u0442\u043d\u0438\u044f \u041c\u0430\u0440\u043a\u0435\u0440", "Permanent pen properties...": "\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0430 \u043f\u0435\u0440\u043c\u0430\u043d\u0435\u043d\u0442\u043d\u0438\u044f \u043c\u0430\u0440\u043a\u0435\u0440...", "Font": "\u0428\u0440\u0438\u0444\u0442", "Size": "\u0420\u0430\u0437\u043c\u0435\u0440", "More...": "\u041e\u0449\u0435...", "Spellcheck Language": "\u041f\u0440\u043e\u0432\u0435\u0440\u0438 \u041f\u0440\u0430\u0432\u043e\u043f\u0438\u0441\u0430", "Select...": "\u0418\u0437\u0431\u0435\u0440\u0438...", "Preferences": "\u041f\u0440\u0435\u0434\u043f\u043e\u0447\u0438\u0442\u0430\u043d\u0438\u044f", "Yes": "\u0414\u0430", "No": "\u041d\u0435", "Keyboard Navigation": "\u041d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044f \u0441 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u0430", "Version": "\u0412\u0435\u0440\u0441\u0438\u044f", "Anchor": "\u041a\u043e\u0442\u0432\u0430 (\u0432\u0440\u044a\u0437\u043a\u0430 \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430)", "Special character": "\u0421\u043f\u0435\u0446\u0438\u0430\u043b\u0435\u043d \u0437\u043d\u0430\u043a", "Code sample": "\u041f\u0440\u0438\u043c\u0435\u0440\u0435\u043d \u043a\u043e\u0434", "Color": "\u0426\u0432\u044f\u0442", "Emoticons": "\u0415\u043c\u043e\u0442\u0438\u043a\u043e\u043d\u0438", "Document properties": "\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430", "Image": "\u041a\u0430\u0440\u0442\u0438\u043d\u043a\u0430", "Insert link": "\u0414\u043e\u0431\u0430\u0432\u044f\u043d\u0435 \u043d\u0430 \u0445\u0438\u043f\u0435\u0440\u0432\u0440\u044a\u0437\u043a\u0430 (\u043b\u0438\u043d\u043a)", "Target": "\u0426\u0435\u043b \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430", "Link": "\u0412\u0440\u044a\u0437\u043a\u0430(\u043b\u0438\u043d\u043a)", "Poster": "\u041f\u043e\u0441\u0442\u0435\u0440", "Media": "\u041c\u0435\u0434\u0438\u044f", "Print": "\u041f\u0435\u0447\u0430\u0442", "Prev": "\u041f\u0440\u0435\u0434\u0438\u0448\u0435\u043d", "Find and replace": "\u0422\u044a\u0440\u0441\u0435\u043d\u0435 \u0438 \u0437\u0430\u043c\u044f\u043d\u0430", "Whole words": "\u0421\u0430\u043c\u043e \u0446\u0435\u043b\u0438 \u0434\u0443\u043c\u0438", "Spellcheck": "\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u043f\u0440\u0430\u0432\u043e\u043f\u0438\u0441\u0430", "Caption": "\u0414\u043e\u0431\u0430\u0432\u044f\u043d\u0435 \u043d\u0430 \u0437\u0430\u0433\u043b\u0430\u0432\u0438\u0435 \u043f\u0440\u0435\u0434\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0442\u0430", "Insert template": "\u0414\u043e\u0431\u0430\u0432\u044f\u043d\u0435 \u043d\u0430 \u0448\u0430\u0431\u043b\u043e\u043d" }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/tinymce/langs/bn_BD.js ================================================ tinymce.addI18n('bn_BD',{ "Redo": "\u09aa\u09c1\u09a8\u09b0\u09be\u09af\u09bc \u0995\u09b0\u09c1\u09a8", "Undo": "\u09aa\u09c2\u09b0\u09cd\u09ac\u09be\u09ac\u09b8\u09cd\u09a5\u09be\u09af\u09bc \u09ab\u09bf\u09b0\u09c1\u09a8", "Cut": "\u0995\u09b0\u09cd\u09a4\u09a8", "Copy": "\u0985\u09a8\u09c1\u0995\u09b0\u09a3", "Paste": "\u09aa\u09cd\u09b0\u09a4\u09bf\u09b2\u09c7\u09aa\u09a8 \u0995\u09b0\u09c1\u09a8", "Select all": "\u09b8\u09ac \u09a8\u09bf\u09b0\u09cd\u09ac\u09be\u099a\u09a8 \u0995\u09b0\u09c1\u09a8", "New document": "\u09a8\u09a4\u09c1\u09a8 \u09a6\u09b8\u09cd\u09a4\u09be\u09ac\u09c7\u099c", "Ok": "\u09a0\u09bf\u0995 \u0986\u099b\u09c7", "Cancel": "\u09ac\u09be\u09a4\u09bf\u09b2", "Visual aids": "\u09ac\u09cd\u09af\u09be\u0996\u09cd\u09af\u09be\u09ae\u09c2\u09b2\u0995 \u09b8\u09be\u09b9\u09be\u09af\u09cd\u09af", "Bold": "\u09b8\u09cd\u09a5\u09c2\u09b2", "Italic": "\u09a4\u09bf\u09b0\u09cd\u09af\u0995", "Underline": "\u09a8\u09bf\u09ae\u09cd\u09a8\u09b0\u09c7\u0996\u09be", "Strikethrough": "\u09b8\u09cd\u099f\u09cd\u09b0\u09be\u0987\u0995\u09a5\u09cd\u09b0\u09c1", "Superscript": "\u098a\u09b0\u09cd\u09a7\u09cd\u09ac\u09b2\u09bf\u09aa\u09bf", "Subscript": "\u09a8\u09bf\u09ae\u09cd\u09a8\u09b2\u09bf\u09aa\u09bf", "Clear formatting": "\u09ac\u09bf\u09a8\u09cd\u09af\u09be\u09b8 \u0985\u09aa\u09b8\u09be\u09b0\u09a3", "Align left": "\u09ac\u09be\u09ae\u09c7 \u09b8\u09be\u09b0\u09bf\u0995\u09b0\u09a3", "Align center": "\u09ae\u09a7\u09cd\u09af\u09b8\u09cd\u09a5\u09be\u09a8\u09c7 \u09b8\u09be\u09b0\u09bf\u0995\u09b0\u09a3", "Align right": "\u09a1\u09be\u09a8\u09c7 \u09b8\u09be\u09b0\u09bf\u0995\u09b0\u09a3", "Justify": "\u0989\u09ad\u09af\u09bc\u09aa\u09cd\u09b0\u09be\u09a8\u09cd\u09a4\u09c7 \u09b8\u09ae\u09be\u09a8 \u0995\u09b0\u09c1\u09a8", "Bullet list": "\u09ac\u09c1\u09b2\u09c7\u099f \u09a4\u09be\u09b2\u09bf\u0995\u09be", "Numbered list": "\u09b8\u0982\u0996\u09cd\u09af\u09be\u09af\u09c1\u0995\u09cd\u09a4 \u09a4\u09be\u09b2\u09bf\u0995\u09be", "Decrease indent": "\u0987\u09a8\u09cd\u09a1\u09c7\u09a8\u09cd\u099f \u0995\u09ae\u09be\u09a8", "Increase indent": "\u0987\u09a8\u09cd\u09a1\u09c7\u09a8\u09cd\u099f \u09ac\u09be\u09a1\u09bc\u09be\u09a8", "Close": "\u09ac\u09a8\u09cd\u09a7", "Formats": "\u09ac\u09bf\u09a8\u09cd\u09af\u09be\u09b8", "Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u0986\u09aa\u09a8\u09be\u09b0 \u09ac\u09cd\u09b0\u09be\u0989\u099c\u09be\u09b0 \u0995\u09cd\u09b2\u09bf\u09aa\u09ac\u09cb\u09b0\u09cd\u09a1 \u09a5\u09c7\u0995\u09c7 \u09b8\u09b0\u09be\u09b8\u09b0\u09bf \u09aa\u09cd\u09b0\u09ac\u09c7\u09b6\u09be\u09a7\u09bf\u0995\u09be\u09b0 \u09b8\u09ae\u09b0\u09cd\u09a5\u09a8 \u0995\u09b0\u09c7 \u09a8\u09be\u0964 \u0985\u09a8\u09c1\u0997\u09cd\u09b0\u09b9 \u0995\u09b0\u09c7 \u0995\u09c0\u09ac\u09cb\u09b0\u09cd\u09a1 \u09b6\u09b0\u09cd\u099f\u0995\u09be\u099f Ctrl +X\/C\/V \u09ac\u09cd\u09af\u09ac\u09b9\u09be\u09b0 \u0995\u09b0\u09c1\u09a8\u0964", "Headers": "\u09b9\u09c7\u09a1\u09be\u09b0 \u09b8\u09ae\u09c1\u09b9", "Header 1": "\u09b9\u09c7\u09a1\u09be\u09b0 \u09e7", "Header 2": "\u09b9\u09c7\u09a1\u09be\u09b0 \u09e8", "Header 3": "\u09b9\u09c7\u09a1\u09be\u09b0 \u09e9", "Header 4": "\u09b9\u09c7\u09a1\u09be\u09b0 \u09ea", "Header 5": "\u09b9\u09c7\u09a1\u09be\u09b0 \u09eb", "Header 6": "\u09b9\u09c7\u09a1\u09be\u09b0 \u09ec", "Headings": "\u09b6\u09bf\u09b0\u09cb\u09a8\u09be\u09ae", "Heading 1": "\u09b6\u09bf\u09b0\u09cb\u09a8\u09be\u09ae \u09e7", "Heading 2": "\u09b6\u09bf\u09b0\u09cb\u09a8\u09be\u09ae \u09e8", "Heading 3": "\u09b6\u09bf\u09b0\u09cb\u09a8\u09be\u09ae \u09e9", "Heading 4": "\u09b6\u09bf\u09b0\u09cb\u09a8\u09be\u09ae \u09ea", "Heading 5": "\u09b6\u09bf\u09b0\u09cb\u09a8\u09be\u09ae \u09eb", "Heading 6": "\u09b6\u09bf\u09b0\u09cb\u09a8\u09be\u09ae \u09ec", "Preformatted": "\u09aa\u09c2\u09b0\u09cd\u09ac\u09ac\u09bf\u09a8\u09cd\u09af\u09be\u09b8\u09bf\u09a4", "Div": "\u09a1\u09bf\u09ad", "Pre": "\u09aa\u09cd\u09b0\u09be\u0995", "Code": "\u09b8\u0982\u0995\u09c7\u09a4\u09b2\u09bf\u09aa\u09bf", "Paragraph": "\u09aa\u09cd\u09af\u09be\u09b0\u09be\u0997\u09cd\u09b0\u09be\u09ab", "Blockquote": "\u09ac\u09cd\u09b2\u0995\u0995\u09cb\u099f", "Inline": "\u09b8\u0999\u09cd\u0997\u09a4\u09bf\u09aa\u09c2\u09b0\u09cd\u09a3\u09ad\u09be\u09ac\u09c7", "Blocks": "\u09b8\u09cd\u09a5\u09c2\u09b2 ", "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u09aa\u09c7\u09b8\u09cd\u099f \u098f\u0996\u09a8 \u09aa\u09cd\u09b2\u09c7\u0987\u09a8 \u099f\u09c7\u0995\u09cd\u09b8\u099f \u09ae\u09cb\u09a1\u09c7\u0964 \u0986\u09aa\u09a8\u09bf \u098f\u0996\u09a8 \u098f\u0987 \u09ac\u09bf\u0995\u09b2\u09cd\u09aa \u09ac\u09a8\u09cd\u09a7 \u099f\u0997\u09b2 \u09aa\u09b0\u09cd\u09af\u09a8\u09cd\u09a4 \u09ac\u09bf\u09b7\u09af\u09bc\u09ac\u09b8\u09cd\u09a4\u09c1 \u098f\u0996\u09a8 \u09aa\u09cd\u09b2\u09c7\u0987\u09a8 \u099f\u09c7\u0995\u09cd\u09b8\u099f \u09b9\u09bf\u09b8\u09be\u09ac\u09c7 \u0986\u099f\u0995\u09be\u09a8\u09cb \u09b9\u09ac\u09c7\u0964", "Fonts": "\u09ab\u09a8\u09cd\u099f\u09b8", "Font Sizes": "\u09ab\u09a8\u09cd\u099f \u09ae\u09be\u09aa", "Class": "\u0995\u09cd\u09b2\u09be\u09b8", "Browse for an image": "\u098f\u0995\u099f\u09bf \u099b\u09ac\u09bf \u09ac\u09cd\u09b0\u09be\u0989\u099c \u0995\u09b0\u09c1\u09a8", "OR": "\u0985\u09a5\u09ac\u09be", "Drop an image here": "\u098f\u0996\u09be\u09a8\u09c7 \u098f\u0995\u099f\u09bf \u099b\u09ac\u09bf \u09a1\u09cd\u09b0\u09aa \u0995\u09b0\u09c1\u09a8", "Upload": "\u0986\u09aa\u09b2\u09cb\u09a1", "Block": "\u09ac\u09cd\u09b2\u0995", "Align": "\u09ac\u09bf\u09a8\u09cd\u09af\u09b8\u09cd\u09a4\u0995\u09b0\u09c1\u09a8", "Default": "\u09a1\u09bf\u09ab\u09b2\u09cd\u099f", "Circle": "\u09ac\u09c3\u09a4\u09cd\u09a4", "Disc": "\u09a1\u09bf\u09b8\u09cd\u0995", "Square": "\u09ac\u09b0\u09cd\u0997\u0995\u09cd\u09b7\u09c7\u09a4\u09cd\u09b0", "Lower Alpha": "\u09a8\u09bf\u09ae\u09cd\u09a8 \u0986\u09b2\u09ab\u09be", "Lower Greek": "\u09a8\u09bf\u09ae\u09cd\u09a8 \u0997\u09cd\u09b0\u09bf\u0995", "Lower Roman": "\u09a8\u09bf\u09ae\u09cd\u09a8 \u09b0\u09cb\u09ae\u09be\u09a8", "Upper Alpha": "\u0989\u099a\u09cd\u099a\u09a4\u09b0 \u0986\u09b2\u09ab\u09be", "Upper Roman": "\u098a\u09b0\u09cd\u09a7\u09cd\u09ac \u09b0\u09cb\u09ae\u09be\u09a8", "Anchor...": "\u098f\u0999\u09cd\u0995\u09b0...", "Name": "\u09a8\u09be\u09ae", "Id": "\u0986\u0987\u09a1\u09bf", "Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "\u0986\u0987\u09a1\u09bf\u099f\u09bf \u0985\u0995\u09cd\u09b7\u09b0, \u09b8\u0982\u0996\u09cd\u09af\u09be, \u09a1\u09cd\u09af\u09be\u09b6, \u09a1\u099f\u09b8, \u0995\u09b2\u09cb\u09a8 \u09ac\u09be \u0986\u09a8\u09cd\u09a1\u09be\u09b0\u09b8\u09cd\u0995\u09cb\u09b0 \u09a6\u09cd\u09ac\u09be\u09b0\u09be \u0985\u09a8\u09c1\u09b8\u09b0\u09a3 \u0995\u09b0\u09be \u098f\u0995\u099f\u09bf \u099a\u09bf\u09a0\u09bf \u09a6\u09bf\u09af\u09bc\u09c7 \u09b6\u09c1\u09b0\u09c1 \u0995\u09b0\u09be \u0989\u099a\u09bf\u09a4\u0964", "You have unsaved changes are you sure you want to navigate away?": "\u0986\u09aa\u09a8\u09be\u09b0 \u0985\u09b8\u0982\u09b0\u0995\u09cd\u09b7\u09bf\u09a4 \u09aa\u09b0\u09bf\u09ac\u09b0\u09cd\u09a4\u09a8\u0997\u09c1\u09b2\u09bf \u0986\u09aa\u09a8\u09bf \u0995\u09bf \u09a8\u09bf\u09b6\u09cd\u099a\u09bf\u09a4 \u09af\u09c7 \u0986\u09aa\u09a8\u09bf \u09a8\u09c7\u09ad\u09bf\u0997\u09c7\u099f \u0995\u09b0\u09a4\u09c7 \u099a\u09be\u09a8?", "Restore last draft": "\u09b6\u09c7\u09b7 \u0996\u09b8\u09a1\u09bc\u09be\u099f\u09bf \u09aa\u09c1\u09a8\u09b0\u09c1\u09a6\u09cd\u09a7\u09be\u09b0 \u0995\u09b0\u09c1\u09a8", "Special character...": "\u09ac\u09bf\u09b6\u09c7\u09b7 \u09ac\u09b0\u09cd\u09a3...", "Source code": "\u09b8\u09cb\u09b0\u09cd\u09b8 \u0995\u09cb\u09a1", "Insert\/Edit code sample": "\u0995\u09cb\u09a1 \u09a8\u09ae\u09c1\u09a8\u09be \u09a2\u09cb\u0995\u09be\u09a8 \/ \u09b8\u09ae\u09cd\u09aa\u09be\u09a6\u09a8\u09be \u0995\u09b0\u09c1\u09a8", "Language": "\u09ad\u09be\u09b7\u09be", "Code sample...": "\u09a8\u09ae\u09c1\u09a8\u09be \u0995\u09cb\u09a1", "Color Picker": "\u09b0\u0999 \u099a\u09af\u09bc\u09a8\u0995\u09be\u09b0\u09c0", "R": "R", "G": "G", "B": "B", "Left to right": "\u09ac\u09be\u09ae \u09a5\u09c7\u0995\u09c7 \u09a1\u09be\u09a8", "Right to left": "\u09a1\u09be\u09a8 \u09a5\u09c7\u0995\u09c7 \u09ac\u09be\u09ae", "Emoticons...": "\u0987\u09ae\u09cb\u099f\u09bf\u0995\u09a8", "Metadata and Document Properties": "\u09ae\u09c7\u099f\u09be\u09a1\u09c7\u099f\u09be \u098f\u09ac\u0982 \u09a1\u0995\u09c1\u09ae\u09c7\u09a8\u09cd\u099f\u09c7\u09b0 \u09ac\u09c8\u09b6\u09bf\u09b7\u09cd\u099f\u09cd\u09af", "Title": "\u09b6\u09bf\u09b0\u09cb\u09a8\u09be\u09ae", "Keywords": "\u0995\u09c0\u0993\u09af\u09bc\u09be\u09b0\u09cd\u09a1", "Description": "\u09ac\u09bf\u09ac\u09b0\u09a3", "Robots": "\u09b0\u09cb\u09ac\u099f", "Author": "\u09b2\u09c7\u0996\u0995", "Encoding": "\u098f\u09a8\u0995\u09cb\u09a1\u09bf\u0982", "Fullscreen": "\u09aa\u09c2\u09b0\u09cd\u09a3 \u09aa\u09b0\u09cd\u09a6\u09be", "Action": "\u0995\u09b0\u09cd\u09ae", "Shortcut": "\u09b6\u09b0\u09cd\u099f\u0995\u09be\u099f", "Help": "\u09b8\u09be\u09b9\u09be\u09af\u09cd\u09af \u0995\u09b0\u09c1\u09a8", "Address": "\u09a0\u09bf\u0995\u09be\u09a8\u09be", "Focus to menubar": "\u09ae\u09c7\u09a8\u09c1\u09ac\u09be\u09b0\u09c7 \u09ab\u09cb\u0995\u09be\u09b8 \u0995\u09b0\u09c1\u09a8", "Focus to toolbar": "\u099f\u09c1\u09b2\u09ac\u09be\u09b0\u09c7 \u09ab\u09cb\u0995\u09be\u09b8 \u0995\u09b0\u09c1\u09a8", "Focus to element path": "\u0989\u09aa\u09be\u09a6\u09be\u09a8 \u09aa\u09be\u09a5 \u09ab\u09cb\u0995\u09be\u09b8 \u0995\u09b0\u09c1\u09a8", "Focus to contextual toolbar": "\u09aa\u09cd\u09b0\u09be\u09b8\u0999\u09cd\u0997\u09bf\u0995 \u099f\u09c1\u09b2\u09ac\u09be\u09b0\u09c7 \u09ab\u09cb\u0995\u09be\u09b8 \u0995\u09b0\u09c1\u09a8", "Insert link (if link plugin activated)": "\u09b2\u09bf\u0999\u09cd\u0995 \u09b8\u09a8\u09cd\u09a8\u09bf\u09ac\u09c7\u09b6 \u0995\u09b0\u09c1\u09a8 (\u09af\u09a6\u09bf \u09b2\u09bf\u0999\u09cd\u0995 \u09aa\u09cd\u09b2\u09be\u0997\u0987\u09a8 \u0985\u09cd\u09af\u09be\u0995\u09cd\u099f\u09bf\u09ad\u09c7\u099f \u0995\u09b0\u09be \u09b9\u09af\u09bc)", "Save (if save plugin activated)": "\u09b8\u0982\u09b0\u0995\u09cd\u09b7\u09a3 \u0995\u09b0\u09c1\u09a8 (\u09aa\u09cd\u09b2\u09be\u0997\u0987\u09a8 \u0985\u09cd\u09af\u09be\u0995\u09cd\u099f\u09bf\u09ad\u09c7\u099f \u09b9\u09b2\u09c7)", "Find (if searchreplace plugin activated)": "\u09b8\u09a8\u09cd\u09a7\u09be\u09a8 \u0995\u09b0\u09c1\u09a8 (\u09af\u09a6\u09bf \u0985\u09a8\u09c1\u09b8\u09a8\u09cd\u09a7\u09be\u09a8\u09af\u09cb\u0997\u09cd\u09af \u09aa\u09cd\u09b2\u09be\u0997\u0987\u09a8 \u09b8\u0995\u09cd\u09b0\u09bf\u09af\u09bc \u0995\u09b0\u09be \u09b9\u09af\u09bc)", "Plugins installed ({0}):": "\u09aa\u09cd\u09b2\u09be\u0997\u0987\u09a8 \u0987\u09a8\u09b8\u09cd\u099f\u09b2 ({0}):", "Premium plugins:": "\u09aa\u09cd\u09b0\u09bf\u09ae\u09bf\u09af\u09bc\u09be\u09ae \u09aa\u09cd\u09b2\u09be\u0997\u0987\u09a8:", "Learn more...": "\u0986\u09b0\u0993 \u099c\u09be\u09a8\u09c1\u09a8...", "You are using {0}": "\u0986\u09aa\u09a8\u09bf \u09ac\u09cd\u09af\u09ac\u09b9\u09be\u09b0 \u0995\u09b0\u099b\u09c7\u09a8 {0}", "Plugins": "\u09aa\u09cd\u09b2\u09be\u0997\u0987\u09a8", "Handy Shortcuts": "\u09b8\u09b9\u099c \u09b6\u09b0\u09cd\u099f\u0995\u09be\u099f ", "Horizontal line": "\u0985\u09a8\u09c1\u09ad\u09c2\u09ae\u09bf\u0995 \u09b0\u09c7\u0996\u09be", "Insert\/edit image": "\u0987\u09ae\u09c7\u099c \u09b8\u09a8\u09cd\u09a8\u09bf\u09ac\u09c7\u09b6 \/ \u09b8\u09ae\u09cd\u09aa\u09be\u09a6\u09a8\u09be \u0995\u09b0\u09c1\u09a8", "Image description": "\u099b\u09ac\u09bf\u09b0 \u09ac\u09b0\u09cd\u09a3\u09a8\u09be", "Source": "\u0989\u09ce\u09b8", "Dimensions": "\u09ae\u09be\u09a4\u09cd\u09b0\u09be", "Constrain proportions": "\u0985\u09a8\u09c1\u09aa\u09be\u09a4 \u09b8\u09c0\u09ae\u09be\u09ac\u09a6\u09cd\u09a7", "General": "\u09b8\u09be\u09a7\u09be\u09b0\u09a3", "Advanced": "\u0985\u0997\u09cd\u09b0\u09b8\u09b0", "Style": "\u09b6\u09c8\u09b2\u09c0", "Vertical space": "\u0989\u09b2\u09cd\u09b2\u09ae\u09cd\u09ac \u09b8\u09cd\u09a5\u09be\u09a8", "Horizontal space": "\u0985\u09a8\u09c1\u09ad\u09c2\u09ae\u09bf\u0995 \u09b8\u09cd\u09a5\u09be\u09a8", "Border": "\u09b8\u09c0\u09ae\u09be\u09a8\u09cd\u09a4", "Insert image": "\u099a\u09bf\u09a4\u09cd\u09b0 \u09a2\u09cb\u0995\u09be\u09a8", "Image...": "\u0987\u09ae\u09c7\u099c...", "Image list": "\u099a\u09bf\u09a4\u09cd\u09b0 \u09a4\u09be\u09b2\u09bf\u0995\u09be", "Rotate counterclockwise": "\u09ac\u09be\u09ae\u09be\u09ac\u09b0\u09cd\u09a4\u09c7 \u0998\u09cb\u09b0\u09be\u09a4\u09c7", "Rotate clockwise": "\u0998\u09a1\u09bc\u09bf\u09b0 \u0995\u09be\u0981\u099f\u09be\u09b0 \u09a6\u09bf\u0995\u09c7 \u0998\u09cb\u09b0\u09be\u09a8", "Flip vertically": "\u0989\u09b2\u09cd\u09b2\u09ae\u09cd\u09ac\u09ad\u09be\u09ac\u09c7 \u09ab\u09cd\u09b2\u09bf\u09aa \u0995\u09b0\u09c1\u09a8", "Flip horizontally": "\u0985\u09a8\u09c1\u09ad\u09c2\u09ae\u09bf\u0995\u09ad\u09be\u09ac\u09c7 \u09ab\u09cd\u09b2\u09bf\u09aa \u0995\u09b0\u09c1\u09a8", "Edit image": "\u099a\u09bf\u09a4\u09cd\u09b0 \u09b8\u09ae\u09cd\u09aa\u09be\u09a6\u09a8\u09be \u0995\u09b0\u09c1\u09a8", "Image options": "\u099a\u09bf\u09a4\u09cd\u09b0 \u09ac\u09bf\u0995\u09b2\u09cd\u09aa\u0997\u09c1\u09b2\u09bf", "Zoom in": "\u09aa\u09cd\u09b0\u09b8\u09be\u09b0\u09bf\u09a4 \u0995\u09b0\u09cb", "Zoom out": "\u099b\u09cb\u099f \u0995\u09b0\u09be", "Crop": "\u0995\u09be\u099f\u09be", "Resize": "\u09ae\u09be\u09aa \u09aa\u09b0\u09bf\u09ac\u09b0\u09cd\u09a4\u09a8 \u0995\u09b0\u09c1\u09a8", "Orientation": "\u099d\u09cb\u0981\u0995", "Brightness": "\u0989\u099c\u09cd\u099c\u09cd\u09ac\u09b2\u09a4\u09be", "Sharpen": "\u09a7\u09be\u09b0 \u0995\u09b0\u09be", "Contrast": "\u09ac\u09bf\u09aa\u09b0\u09c0\u09a4 \u09b9\u09a4\u09cd\u09a4\u09af\u09bc\u09be", "Color levels": "\u09b0\u0999\u09c7\u09b0 \u09ae\u09be\u09a4\u09cd\u09b0\u09be", "Gamma": "Gamma", "Invert": "\u09ac\u09bf\u09a8\u09b7\u09cd\u099f \u0995\u09b0\u09be", "Apply": "\u09aa\u09cd\u09b0\u09af\u09bc\u09cb\u0997 \u0995\u09b0\u09be", "Back": "\u09aa\u09bf\u099b\u09a8\u09c7", "Insert date\/time": "\u09a4\u09be\u09b0\u09bf\u0996 \/ \u09b8\u09ae\u09af\u09bc \u09b8\u09a8\u09cd\u09a8\u09bf\u09ac\u09c7\u09b6 \u0995\u09b0\u09c1\u09a8", "Date\/time": "\u09a4\u09be\u09b0\u09bf\u0996 \/ \u09b8\u09ae\u09af\u09bc", "Insert\/Edit Link": "\u09b8\u09a8\u09cd\u09a8\u09bf\u09ac\u09c7\u09b6\/\u09b8\u09ae\u09cd\u09aa\u09be\u09a6\u09a8\u09be \u09b2\u09bf\u0999\u09cd\u0995", "Insert\/edit link": "\u09b8\u09a8\u09cd\u09a8\u09bf\u09ac\u09c7\u09b6 \/ \u09b8\u09ae\u09cd\u09aa\u09be\u09a6\u09a8\u09be \u09b2\u09bf\u0999\u09cd\u0995", "Text to display": "\u09aa\u09cd\u09b0\u09a6\u09b0\u09cd\u09b6\u09a8 \u099f\u09c7\u0995\u09cd\u09b8\u099f", "Url": "URL", "Open link in...": "\u09b2\u09bf\u0999\u09cd\u0995\u099f\u09bf \u0996\u09c1\u09b2\u09c1\u09a8...", "Current window": "\u09ac\u09b0\u09cd\u09a4\u09ae\u09be\u09a8 \u0989\u0987\u09a8\u09cd\u09a1\u09cb", "None": "\u09a8\u09be", "New window": "\u09a8\u09a4\u09c1\u09a8 \u0989\u0987\u09a8\u09cd\u09a1\u09cb", "Remove link": "\u09b2\u09bf\u0999\u09cd\u0995 \u09b8\u09b0\u09be\u09a8", "Anchors": "\u09a8\u09cb\u0999\u09cd\u0997\u09b0", "Link...": "\u09b2\u09bf\u0982\u0995...", "Paste or type a link": "\u098f\u0995\u099f\u09bf \u09b2\u09bf\u0999\u09cd\u0995 \u0986\u099f\u0995\u09be\u09a8 \u09ac\u09be \u099f\u09be\u0987\u09aa \u0995\u09b0\u09c1\u09a8", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u0986\u09aa\u09a8\u09be\u09b0 \u09aa\u09cd\u09b0\u09ac\u09c7\u09b6 \u0995\u09b0\u09be URL\u099f\u09bf \u098f\u0995\u099f\u09bf \u0987\u09ae\u09c7\u09b2 \u09a0\u09bf\u0995\u09be\u09a8\u09be \u09ac\u09b2\u09c7 \u09ae\u09a8\u09c7 \u09b9\u099a\u09cd\u099b\u09c7\u0964 \u0986\u09aa\u09a8\u09bf \u09aa\u09cd\u09b0\u09af\u09bc\u09cb\u099c\u09a8\u09c0\u09af\u09bc \u09ae\u09c7\u0987\u09b2\u099f\u09cb \u09af\u09cb\u0997 \u0995\u09b0\u09a4\u09c7 \u099a\u09be\u09a8: \u0989\u09aa\u09b8\u09b0\u09cd\u0997?", "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\u0986\u09aa\u09a8\u09be\u09b0 \u09aa\u09cd\u09b0\u09ac\u09c7\u09b6 \u0995\u09b0\u09be URL\u099f\u09bf \u098f\u0995\u099f\u09bf \u09ac\u09b9\u09bf\u09b0\u09be\u0997\u09a4 \u09b2\u09bf\u0999\u09cd\u0995 \u09ac\u09b2\u09c7 \u09ae\u09a8\u09c7 \u09b9\u099a\u09cd\u099b\u09c7\u0964 \u0986\u09aa\u09a8\u09bf \u0995\u09bf \u09aa\u09cd\u09b0\u09af\u09bc\u09cb\u099c\u09a8\u09c0\u09af\u09bc http:\/\/ \u09aa\u09cd\u09b0\u09bf\u09ab\u09bf\u0995\u09cd\u09b8 \u09af\u09cb\u0997 \u0995\u09b0\u09a4\u09c7 \u099a\u09be\u09a8?", "Link list": "\u09b2\u09bf\u0999\u09cd\u0995 \u09a4\u09be\u09b2\u09bf\u0995\u09be", "Insert video": "\u09ad\u09bf\u09a1\u09bf\u0993 \u09a2\u09cb\u0995\u09be\u09a8", "Insert\/edit video": "\u09ad\u09bf\u09a1\u09bf\u0993 \u09b8\u09a8\u09cd\u09a8\u09bf\u09ac\u09c7\u09b6 \/ \u09b8\u09ae\u09cd\u09aa\u09be\u09a6\u09a8\u09be \u0995\u09b0\u09c1\u09a8", "Insert\/edit media": "\u09ae\u09bf\u09a1\u09bf\u09af\u09bc\u09be \u09b8\u09a8\u09cd\u09a8\u09bf\u09ac\u09c7\u09b6 \u0995\u09b0\u09c1\u09a8 \/ \u09b8\u09ae\u09cd\u09aa\u09be\u09a6\u09a8\u09be \u0995\u09b0\u09c1\u09a8", "Alternative source": "\u09ac\u09bf\u0995\u09b2\u09cd\u09aa \u0989\u09ce\u09b8", "Alternative source URL": "\u09ac\u09bf\u0995\u09b2\u09cd\u09aa \u0989\u09ce\u09b8 \u0987\u0986\u09b0\u098f\u09b2", "Media poster (Image URL)": "\u09ae\u09bf\u09a1\u09bf\u09af\u09bc\u09be \u09aa\u09cb\u09b8\u09cd\u099f\u09be\u09b0 (\u0987\u09ae\u09c7\u099c \u0987\u0989\u0986\u09b0\u098f\u09b2)", "Paste your embed code below:": "\u09a8\u09c0\u099a\u09c7\u09b0 \u0986\u09aa\u09a8\u09be\u09b0 \u098f\u09ae\u09cd\u09ac\u09c7\u09a1 \u0995\u09cb\u09a1 \u0986\u099f\u0995\u09be\u09a8:", "Embed": "\u098f\u09ae\u09cd\u09ac\u09c7\u09a1", "Media...": "\u09ae\u09bf\u09a1\u09bf\u09af\u09bc\u09be...", "Nonbreaking space": "\u0985\u09ac\u09bf\u099a\u09cd\u099b\u09bf\u09a8\u09cd\u09a8 \u09b8\u09cd\u09a5\u09be\u09a8", "Page break": "\u09aa\u09c3\u09b7\u09cd\u09a0\u09be \u09ac\u09bf\u09b0\u09a4\u09bf", "Paste as text": "\u09aa\u09be\u09a0\u09cd\u09af \u09b9\u09bf\u09b8\u09be\u09ac\u09c7 \u09aa\u09c7\u09b8\u09cd\u099f \u0995\u09b0\u09c1\u09a8", "Preview": "\u09aa\u09c2\u09b0\u09cd\u09ac\u09b0\u09c2\u09aa", "Print...": "\u09ae\u09c1\u09a6\u09cd\u09b0\u09a8...", "Save": "\u09b8\u0982\u09b0\u0995\u09cd\u09b7\u09a3", "Find": "\u0986\u09ac\u09bf\u09b7\u09cd\u0995\u09be\u09b0", "Replace with": "\u09aa\u09cd\u09b0\u09a4\u09bf\u09b8\u09cd\u09a5\u09be\u09aa\u09a8", "Replace": "\u09aa\u09cd\u09b0\u09a4\u09bf\u09b8\u09cd\u09a5\u09be\u09aa\u09a8 \u0995\u09b0\u09be", "Replace all": "\u09b8\u09ae\u09b8\u09cd\u09a4 \u09aa\u09cd\u09b0\u09a4\u09bf\u09b8\u09cd\u09a5\u09be\u09aa\u09a8", "Previous": "\u09aa\u09c2\u09b0\u09cd\u09ac\u09ac\u09b0\u09cd\u09a4\u09c0", "Next": "\u09aa\u09b0\u09ac\u09b0\u09cd\u09a4\u09c0", "Find and replace...": "\u0996\u09c1\u0981\u099c\u09c1\u09a8 \u0993 \u09aa\u09cd\u09b0\u09a4\u09bf\u09b8\u09cd\u09a5\u09be\u09aa\u09a8 \u0995\u09b0\u09c1\u09a8...", "Could not find the specified string.": "\u09a8\u09bf\u09b0\u09cd\u09a6\u09bf\u09b7\u09cd\u099f \u09b8\u09cd\u099f\u09cd\u09b0\u09bf\u0982\u099f\u09bf \u0996\u09c1\u0981\u099c\u09c7 \u09aa\u09be\u0993\u09af\u09bc\u09be \u09af\u09be\u09af\u09bc\u09a8\u09bf\u0964", "Match case": "\u09ae\u09cd\u09af\u09be\u099a \u0995\u09cd\u09b7\u09c7\u09a4\u09cd\u09b0\u09c7", "Find whole words only": "\u09b6\u09c1\u09a7\u09c1\u09ae\u09be\u09a4\u09cd\u09b0 \u09aa\u09c1\u09b0\u09cb \u09b6\u09ac\u09cd\u09a6\u0997\u09c1\u09b2\u09bf \u09b8\u09a8\u09cd\u09a7\u09be\u09a8 \u0995\u09b0\u09c1\u09a8", "Spell check": "\u09ac\u09be\u09a8\u09be\u09a8 \u09af\u09be\u099a\u09be\u0987", "Ignore": "\u0989\u09aa\u09c7\u0995\u09cd\u09b7\u09be \u0995\u09b0\u09be", "Ignore all": "\u09b8\u09ac\u0997\u09c1\u09b2\u09cb \u0989\u09aa\u09c7\u0995\u09cd\u09b7\u09be \u0995\u09b0\u09c1\u09a8", "Finish": "\u09b6\u09c7\u09b7", "Add to Dictionary": "\u0985\u09ad\u09bf\u09a7\u09be\u09a8 \u09af\u09cb\u0997 \u0995\u09b0\u09c1\u09a8", "Insert table": "\u099f\u09c7\u09ac\u09bf\u09b2 \u09b8\u09a8\u09cd\u09a8\u09bf\u09ac\u09c7\u09b6 \u0995\u09b0\u09c1\u09a8", "Table properties": "\u099f\u09c7\u09ac\u09bf\u09b2 \u09ac\u09c8\u09b6\u09bf\u09b7\u09cd\u099f\u09cd\u09af", "Delete table": "\u09b8\u09be\u09b0\u09a3\u09bf \u09ae\u09c1\u099b\u09c1\u09a8", "Cell": "\u09b8\u09c7\u09b2", "Row": "\u09b8\u09be\u09b0\u09bf", "Column": "\u0995\u09b2\u09be\u09ae", "Cell properties": "\u09b8\u09c7\u09b2 \u09ac\u09c8\u09b6\u09bf\u09b7\u09cd\u099f\u09cd\u09af", "Merge cells": "\u09b8\u09c7\u09b2 \u09ae\u09be\u09b0\u09cd\u099c \u0995\u09b0\u09c1\u09a8", "Split cell": "\u09b8\u09cd\u09aa\u09cd\u09b2\u09bf\u099f \u09b8\u09c7\u09b2", "Insert row before": "\u0986\u0997\u09c7 \u09b8\u09be\u09b0\u09bf \u09a2\u09cb\u0995\u09be\u09a8", "Insert row after": "\u09aa\u09b0\u09c7 \u09b8\u09be\u09b0\u09bf \u09a2\u09cb\u0995\u09be\u09a8", "Delete row": "\u09b8\u09be\u09b0\u09bf \u09ae\u09c1\u099b\u09c1\u09a8", "Row properties": "\u09b8\u09be\u09b0\u09bf \u09ac\u09c8\u09b6\u09bf\u09b7\u09cd\u099f\u09cd\u09af", "Cut row": "\u09b8\u09be\u09b0\u09bf \u0995\u09be\u099f\u09c1\u09a8", "Copy row": "\u09b8\u09be\u09b0\u09bf \u0985\u09a8\u09c1\u09b2\u09bf\u09aa\u09bf \u0995\u09b0\u09c1\u09a8", "Paste row before": "\u0986\u0997\u09c7 \u09b8\u09be\u09b0\u09bf \u09aa\u09c7\u09b8\u09cd\u099f \u0995\u09b0\u09c1\u09a8", "Paste row after": "\u09aa\u09b0\u09c7 \u09b8\u09be\u09b0\u09bf \u09aa\u09c7\u09b8\u09cd\u099f \u0995\u09b0\u09c1\u09a8", "Insert column before": "\u0986\u0997\u09c7 \u0995\u09b2\u09be\u09ae \u09a2\u09cb\u0995\u09be\u09a8", "Insert column after": "\u09aa\u09b0\u09c7 \u0995\u09b2\u09be\u09ae \u09b8\u09a8\u09cd\u09a8\u09bf\u09ac\u09c7\u09b6 \u0995\u09b0\u09c1\u09a8", "Delete column": "\u0995\u09b2\u09be\u09ae \u09ae\u09c1\u099b\u09c1\u09a8", "Cols": "\u0995\u09b2\u09be\u09ae \u0997\u09c1\u09b2\u09cb", "Rows": "\u09b8\u09be\u09b0\u09bf\u0997\u09c1\u09b2\u09cb", "Width": "\u09aa\u09cd\u09b0\u09b8\u09cd\u09a5", "Height": "\u0989\u099a\u09cd\u099a\u09a4\u09be", "Cell spacing": "\u09b8\u09c7\u09b2 \u09ab\u09be\u0981\u0995\u09be", "Cell padding": "\u09b8\u09c7\u09b2 \u09aa\u09cd\u09af\u09be\u09a1\u09bf\u0982", "Show caption": "\u0995\u09cd\u09af\u09be\u09aa\u09b6\u09a8 \u09a6\u09c7\u0996\u09be\u09a8", "Left": "\u09ac\u09be\u09ae", "Center": "\u0995\u09c7\u09a8\u09cd\u09a6\u09cd\u09b0", "Right": "\u09a1\u09be\u09a8", "Cell type": "\u09b8\u09c7\u09b2 \u099f\u09be\u0987\u09aa", "Scope": "\u09ac\u09cd\u09af\u09be\u09aa\u09cd\u09a4\u09bf", "Alignment": "\u09b6\u09cd\u09b0\u09c7\u09a3\u09c0\u09ac\u09bf\u09a8\u09cd\u09af\u09be\u09b8", "H Align": "H \u09b8\u09be\u09b0\u09bf\u09ac\u09a6\u09cd\u09a7", "V Align": "V \u09b8\u09be\u09b0\u09bf\u09ac\u09a6\u09cd\u09a7", "Top": "\u0989\u09aa\u09b0", "Middle": "\u09ae\u09a7\u09cd\u09af\u09ae", "Bottom": "\u09a8\u09bf\u099a\u09c7", "Header cell": "\u09b9\u09c7\u09a1\u09be\u09b0 \u09b8\u09c7\u09b2", "Row group": "\u09b8\u09be\u09b0\u09bf \u0997\u09cd\u09b0\u09c1\u09aa", "Column group": "\u0995\u09b2\u09be\u09ae \u0997\u09cd\u09b0\u09c1\u09aa", "Row type": "\u09b8\u09be\u09b0\u09bf\u09b0 \u09a7\u09b0\u09a8", "Header": "\u09b9\u09c7\u09a1\u09be\u09b0", "Body": "\u09ac\u09a1\u09bf", "Footer": "\u09ab\u09c1\u099f\u09be\u09b0", "Border color": "\u09b8\u09c0\u09ae\u09be\u09a8\u09cd\u09a4 \u09b0\u0999", "Insert template...": "\u099f\u09c7\u09ae\u09aa\u09cd\u09b2\u09c7\u099f \u09a2\u09cb\u0995\u09be\u09a8...", "Templates": "\u099f\u09c7\u09ae\u09aa\u09cd\u09b2\u09c7\u099f", "Template": "\u099f\u09c7\u09ae\u09aa\u09cd\u09b2\u09c7\u099f", "Text color": "\u09b2\u09c7\u0996\u09be\u09b0 \u09b0\u0999", "Background color": "\u09aa\u09c7\u099b\u09a8\u09c7\u09b0 \u09b0\u0982", "Custom...": "\u0995\u09be\u09b8\u09cd\u099f\u09ae...", "Custom color": "\u0995\u09be\u09b8\u09cd\u099f\u09ae \u09b0\u0982", "No color": "\u0995\u09cb\u09a8 \u09b0\u0982 \u09a8\u09c7\u0987", "Remove color": "\u09b0\u0999 \u09b8\u09b0\u09be\u09a8", "Table of Contents": "\u09b8\u09c1\u099a\u09bf\u09aa\u09a4\u09cd\u09b0", "Show blocks": "\u09ac\u09cd\u09b2\u0995 \u09a6\u09c7\u0996\u09be\u09a8", "Show invisible characters": "\u0985\u09a6\u09c3\u09b6\u09cd\u09af \u0985\u0995\u09cd\u09b7\u09b0 \u09a6\u09c7\u0996\u09be\u09a8", "Word count": "\u09b6\u09ac\u09cd\u09a6 \u0997\u09a3\u09a8\u09be", "Count": "\u0997\u09a3\u09a8\u09be", "Document": "\u09a6\u09b2\u09bf\u09b2", "Selection": "\u09a8\u09bf\u09b0\u09cd\u09ac\u09be\u099a\u09a8", "Words": "\u09b6\u09ac\u09cd\u09a6\u09b8\u09ae\u09c2\u09b9", "Words: {0}": "\u09b6\u09ac\u09cd\u09a6: {0}", "{0} words": "{0} \u09b6\u09ac\u09cd\u09a6", "File": "\u09ab\u09be\u0987\u09b2", "Edit": "\u09b8\u09ae\u09cd\u09aa\u09be\u09a6\u09a8 \u0995\u09b0\u09be", "Insert": "\u09b8\u09a8\u09cd\u09a8\u09bf\u09ac\u09c7\u09b6", "View": "\u09a6\u09c3\u09b6\u09cd\u09af", "Format": "\u09ac\u09bf\u09a8\u09cd\u09af\u09be\u09b8", "Table": "\u099f\u09c7\u09ac\u09bf\u09b2", "Tools": "\u09b8\u09b0\u099e\u09cd\u099c\u09be\u09ae\u09b8\u09ae\u09c2\u09b9", "Powered by {0}": "{0} \u09a6\u09cd\u09ac\u09be\u09b0\u09be \u099a\u09be\u09b2\u09bf\u09a4", "Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u09b0\u09bf\u099a \u099f\u09c7\u0995\u09cd\u09b8\u099f \u098f\u09b0\u09bf\u09af\u09bc\u09be \u09ae\u09c7\u09a8\u09c1 \u099c\u09a8\u09cd\u09af ALT-F9 \u099a\u09be\u09aa\u09c1\u09a8 \u099f\u09c1\u09b2\u09ac\u09be\u09b0\u09c7\u09b0 \u099c\u09a8\u09cd\u09af ALT-F10 \u099f\u09bf\u09aa\u09c1\u09a8 \u09b8\u09be\u09b9\u09be\u09af\u09cd\u09af\u09c7\u09b0 \u099c\u09a8\u09cd\u09af ALT-0 \u099a\u09be\u09aa\u09c1\u09a8", "Image title": "\u0987\u09ae\u09c7\u099c\u09c7\u09b0 \u09b6\u09bf\u09b0\u09cb\u09a8\u09be\u09ae", "Border width": "\u09b8\u09c0\u09ae\u09be\u09a8\u09be\u09b0 \u09aa\u09cd\u09b0\u09b6\u09b8\u09cd\u09a5\u09a4\u09be", "Border style": "\u09b8\u09c0\u09ae\u09be\u09a8\u09be \u09b6\u09c8\u09b2\u09c0", "Error": "\u09a4\u09cd\u09b0\u09c1\u099f\u09bf", "Warn": "\u09b8\u09be\u09ac\u09a7\u09be\u09a8", "Valid": "\u09ac\u09c8\u09a7", "To open the popup, press Shift+Enter": "\u09aa\u09aa\u0986\u09aa \u0996\u09c1\u09b2\u09a4\u09c7, \u09b6\u09bf\u09ab\u099f + \u098f\u09a8\u09cd\u099f\u09be\u09b0 \u099f\u09bf\u09aa\u09c1\u09a8", "Rich Text Area. Press ALT-0 for help.": "\u09b8\u09ae\u09c3\u09a6\u09cd\u09a7 \u09aa\u09be\u09a0\u09cd\u09af \u0985\u099e\u09cd\u099a\u09b2\u0964 \u09b8\u09b9\u09be\u09af\u09bc\u09a4\u09be\u09b0 \u099c\u09a8\u09cd\u09af ALT-0 \u099f\u09bf\u09aa\u09c1\u09a8\u0964", "System Font": "\u09b8\u09bf\u09b8\u09cd\u099f\u09c7\u09ae \u09ab\u09a8\u09cd\u099f", "Failed to upload image: {0}": "\u099a\u09bf\u09a4\u09cd\u09b0 \u0986\u09aa\u09b2\u09cb\u09a1 \u0995\u09b0\u09a4\u09c7 \u09ac\u09cd\u09af\u09b0\u09cd\u09a5 \u09b9\u09df\u09c7\u099b\u09c7: {0}", "Failed to load plugin: {0} from url {1}": "\u09aa\u09cd\u09b2\u09be\u0997\u0987\u09a8 \u09b2\u09cb\u09a1 \u0995\u09b0\u09a4\u09c7 \u09ac\u09cd\u09af\u09b0\u09cd\u09a5: {0} \u0987\u0989\u0986\u09b0\u098f\u09b2 \u09a5\u09c7\u0995\u09c7 {1}", "Failed to load plugin url: {0}": "\u09aa\u09cd\u09b2\u09be\u0997\u0987\u09a8 \u0987\u0989\u0986\u09b0\u098f\u09b2 \u09b2\u09cb\u09a1 \u0995\u09b0\u09a4\u09c7 \u09ac\u09cd\u09af\u09b0\u09cd\u09a5: {0}", "Failed to initialize plugin: {0}": "\u09aa\u09cd\u09b2\u09be\u0997\u0987\u09a8 \u099a\u09be\u09b2\u09c1 \u0995\u09b0\u09a4\u09c7 \u09ac\u09cd\u09af\u09b0\u09cd\u09a5 \u09b9\u09df\u09c7\u099b\u09c7: {0}", "example": "\u0989\u09a6\u09be\u09b9\u09b0\u09a3", "Search": "\u0985\u09a8\u09c1\u09b8\u09a8\u09cd\u09a7\u09be\u09a8 \u0995\u09b0\u09c1\u09a8", "All": "\u09b8\u0995\u09b2", "Currency": "\u09ae\u09c1\u09a6\u09cd\u09b0\u09be", "Text": "\u099f\u09c7\u0995\u09cd\u09b8\u099f", "Quotations": "\u0989\u09a6\u09cd\u09a7\u09c3\u09a4\u09bf", "Mathematical": "\u0997\u09be\u09a3\u09bf\u09a4\u09bf\u0995", "Extended Latin": "\u09ac\u09b0\u09cd\u09a7\u09bf\u09a4 \u09b2\u09be\u09a4\u09bf\u09a8", "Symbols": "\u09aa\u09cd\u09b0\u09a4\u09c0\u0995", "Arrows": "\u09a4\u09c0\u09b0", "User Defined": "\u09ac\u09cd\u09af\u09ac\u09b9\u09be\u09b0\u0995\u09be\u09b0\u09c0 \u09b8\u0982\u099c\u09cd\u099e\u09be\u09af\u09bc\u09bf\u09a4", "dollar sign": "\u09a1\u09b2\u09be\u09b0 \u099a\u09bf\u09b9\u09cd\u09a8", "currency sign": "\u09ae\u09c1\u09a6\u09cd\u09b0\u09be\u09b0 \u099a\u09bf\u09b9\u09cd\u09a8", "euro-currency sign": "\u0987\u0989\u09b0\u09cb-\u09ae\u09c1\u09a6\u09cd\u09b0\u09be \u09b8\u09be\u0987\u09a8", "colon sign": "\u0995\u09cb\u09b2\u09a8 \u099a\u09bf\u09b9\u09cd\u09a8", "cruzeiro sign": "\u0995\u09cd\u09b0\u09c1\u099c\u09c1\u0987\u09b0\u09cb \u099a\u09bf\u09b9\u09cd\u09a8", "french franc sign": "\u09ab\u09cd\u09b0\u09c7\u099e\u09cd\u099a \u09ab\u09cd\u09b0\u09cd\u09af\u09be\u0999\u09cd\u0995 \u099a\u09bf\u09b9\u09cd\u09a8", "lira sign": "\u09b2\u09bf\u09b0\u09be \u099a\u09bf\u09b9\u09cd\u09a8", "mill sign": "\u09ae\u09bf\u09b2 \u099a\u09bf\u09b9\u09cd\u09a8", "naira sign": "\u09a8\u09be\u09df\u09b0\u09be \u099a\u09bf\u09b9\u09cd\u09a8", "peseta sign": "\u09aa\u09c7\u09b8\u09c7\u099f\u09be \u099a\u09bf\u09b9\u09cd\u09a8", "rupee sign": "\u09b0\u09c1\u09aa\u09bf \u099a\u09bf\u09b9\u09cd\u09a8", "won sign": "\u0989\u09a8 \u099a\u09bf\u09b9\u09cd\u09a8", "new sheqel sign": "\u09a8\u09a4\u09c1\u09a8 \u09b6\u09bf\u0995\u09c7\u09b2 \u099a\u09bf\u09b9\u09cd\u09a8", "dong sign": "\u09a1\u0982 \u099a\u09bf\u09b9\u09cd\u09a8", "kip sign": "\u0995\u09bf\u09aa \u099a\u09bf\u09b9\u09cd\u09a8", "tugrik sign": "\u09a4\u09c1\u0997\u09b0\u09bf\u0995 \u099a\u09bf\u09b9\u09cd\u09a8", "drachma sign": "\u09a1\u09cd\u09b0\u09be\u099a\u09ae\u09be \u099a\u09bf\u09b9\u09cd\u09a8", "german penny symbol": "\u099c\u09be\u09b0\u09cd\u09ae\u09be\u09a8 \u09aa\u09c7\u09a8\u09bf \u099a\u09bf\u09b9\u09cd\u09a8", "peso sign": "\u09aa\u09c7\u09b8\u09cb \u099a\u09bf\u09b9\u09cd\u09a8", "guarani sign": "\u0997\u09c1\u09df\u09be\u09b0\u09be\u09a8\u09c0 \u099a\u09bf\u09b9\u09cd\u09a8", "austral sign": "\u0993\u09b8\u09cd\u099f\u09cd\u09b0\u09be\u09b2 \u099a\u09bf\u09b9\u09cd\u09a8", "hryvnia sign": "\u09b9\u09be\u09b0\u09ad\u09a8\u09bf\u09df\u09be \u099a\u09bf\u09b9\u09cd\u09a8", "cedi sign": "\u09b8\u09c7\u09a1\u09bf \u099a\u09bf\u09b9\u09cd\u09a8", "livre tournois sign": "\u09b2\u09bf\u09ad\u09cd\u09b0\u09c7 \u099f\u09c1\u09b0\u09a8\u0987\u09b8 \u099a\u09bf\u09b9\u09cd\u09a8", "spesmilo sign": "\u09b8\u09cd\u09aa\u09c7\u09b8\u09ae\u09bf\u09b2\u09cb \u099a\u09bf\u09b9\u09cd\u09a8", "tenge sign": "\u099f\u09bf\u09a8\u0997\u09c7 \u099a\u09bf\u09b9\u09cd\u09a8", "indian rupee sign": "\u0987\u09a8\u09cd\u09a1\u09bf\u09df\u09be\u09a8 \u09b0\u09c1\u09aa\u09bf \u099a\u09bf\u09b9\u09cd\u09a8", "turkish lira sign": "\u09a4\u09c1\u0995\u09bf\u09b8\u09cd\u09a4\u09be\u09a8 \u09b2\u09bf\u09b0\u09be \u099a\u09bf\u09b9\u09cd\u09a8", "nordic mark sign": "\u09a8\u09b0\u09a1\u09bf\u0995 \u09ae\u09be\u09b0\u09cd\u0995 \u099a\u09bf\u09b9\u09cd\u09a8", "manat sign": "\u09ae\u09be\u09a8\u09be\u099f \u099a\u09bf\u09b9\u09cd\u09a8", "ruble sign": "\u09b0\u09c1\u09ac\u09c7\u09b2 \u099a\u09bf\u09b9\u09cd\u09a8", "yen character": "\u0987\u09df\u09c7\u09a8 \u0985\u0995\u09cd\u09b7\u09b0", "yuan character": "\u0987\u0989\u09af\u09bc\u09be\u09a8 \u0985\u0995\u09cd\u09b7\u09b0", "yuan character, in hong kong and taiwan": "\u09b9\u0982\u0995\u0982 \u098f\u09ac\u0982 \u09a4\u09be\u0987\u0993\u09af\u09bc\u09be\u09a8\u09c7 \u0987\u0989\u09af\u09bc\u09be\u09a8 \u0985\u0995\u09cd\u09b7\u09b0", "yen\/yuan character variant one": "\u0987\u09af\u09bc\u09c7\u09a8\/\u0987\u0989\u09af\u09bc\u09be\u09a8 \u0985\u0995\u09cd\u09b7\u09b0\u09c7\u09b0 \u098f\u0995\u099f\u09bf \u09ac\u09c8\u0995\u09b2\u09cd\u09aa\u09bf\u0995", "Loading emoticons...": "\u0987\u09ae\u09cb\u099f\u09bf\u0995\u09a8 \u09b2\u09cb\u09a1 \u09b9\u099a\u09cd\u099b\u09c7...", "Could not load emoticons": "\u0987\u09ae\u09cb\u099f\u09bf\u0995\u09a8 \u09b2\u09cb\u09a1 \u0995\u09b0\u09be \u09af\u09be\u09af\u09bc\u09a8\u09bf", "People": "\u099c\u09a8\u09b8\u09be\u09a7\u09be\u09b0\u09a3", "Animals and Nature": "\u09aa\u09cd\u09b0\u09be\u09a3\u09c0 \u098f\u09ac\u0982 \u09aa\u09cd\u09b0\u0995\u09c3\u09a4\u09bf", "Food and Drink": "\u0996\u09be\u09a6\u09cd\u09af \u0993 \u09aa\u09be\u09a8\u09c0\u09af\u09bc", "Activity": "\u0995\u09be\u09b0\u09cd\u09af\u0995\u09b2\u09be\u09aa", "Travel and Places": "\u09ad\u09cd\u09b0\u09ae\u09a3 \u098f\u09ac\u0982 \u09b8\u09cd\u09a5\u09be\u09a8", "Objects": "\u0989\u09a6\u09cd\u09a6\u09c7\u09b6\u09cd\u09af", "Flags": "\u09aa\u09a4\u09be\u0995\u09be", "Characters": "\u0985\u0995\u09cd\u09b7\u09b0", "Characters (no spaces)": "\u0985\u0995\u09cd\u09b7\u09b0 (\u0995\u09cb\u09a8\u0993 \u09b8\u09cd\u09aa\u09c7\u09b8 \u09a8\u09c7\u0987)", "{0} characters": "{0} \u0985\u0995\u09cd\u09b7\u09b0", "Error: Form submit field collision.": "\u09a4\u09cd\u09b0\u09c1\u099f\u09bf: \u09ab\u09b0\u09cd\u09ae \u099c\u09ae\u09be \u09a6\u09c7\u0993\u09af\u09bc\u09be\u09b0 \u0995\u09cd\u09b7\u09c7\u09a4\u09cd\u09b0\u09c7 \u09b8\u0982\u0998\u09b0\u09cd\u09b7\u0964", "Error: No form element found.": "\u09a4\u09cd\u09b0\u09c1\u099f\u09bf: \u0995\u09cb\u09a8\u0993 \u09ab\u09b0\u09cd\u09ae \u0989\u09aa\u09be\u09a6\u09be\u09a8 \u09aa\u09be\u0993\u09af\u09bc\u09be \u09af\u09be\u09af\u09bc \u09a8\u09bf\u0964", "Update": "\u09b9\u09be\u09b2\u09a8\u09be\u0997\u09be\u09a6", "Color swatch": "\u09b0\u0999\u09cd\u0997\u09c7\u09b0 \u09aa\u09cd\u09b2\u09c7\u099f", "Turquoise": "\u09ab\u09bf\u09b0\u09cb\u099c\u09be", "Green": "\u09b8\u09ac\u09c1\u099c", "Blue": "\u09a8\u09c0\u09b2", "Purple": "\u09ac\u09c7\u0997\u09c1\u09a8\u09c0", "Navy Blue": "\u0986\u0995\u09be\u09b6\u09c0", "Dark Turquoise": "\u0997\u09be\u09a2\u09bc \u09ab\u09bf\u09b0\u09cb\u099c\u09be", "Dark Green": "\u0997\u09be\u09a2\u09bc \u09b8\u09ac\u09c1\u099c", "Medium Blue": "\u09ae\u09be\u099d\u09be\u09b0\u09bf \u09a8\u09c0\u09b2", "Medium Purple": "\u09ae\u09be\u099d\u09be\u09b0\u09bf \u09ac\u09c7\u0997\u09c1\u09a8\u09bf", "Midnight Blue": "\u09ae\u09be\u099d\u09b0\u09be\u09a4\u09c7\u09b0 \u09a8\u09c0\u09b2", "Yellow": "\u09b9\u09b2\u09c1\u09a6", "Orange": "\u0995\u09ae\u09b2\u09be", "Red": "\u09b2\u09be\u09b2", "Light Gray": "\u09b9\u09be\u09b2\u0995\u09be \u09a7\u09c2\u09b8\u09b0", "Gray": "\u09a7\u09c2\u09b8\u09b0", "Dark Yellow": "\u0997\u09be\u09a2\u09bc \u09b9\u09b2\u09c1\u09a6", "Dark Orange": "\u0997\u09be\u09a2\u09bc \u0995\u09ae\u09b2\u09be", "Dark Red": "\u0997\u09be\u09a2\u09bc \u09b2\u09be\u09b2", "Medium Gray": "\u09ae\u09cb\u099f\u09be\u09ae\u09c1\u099f\u09bf \u09a7\u09c2\u09b8\u09b0", "Dark Gray": "\u0997\u09be\u09a2\u09bc \u09a7\u09c2\u09b8\u09b0", "Light Green": "\u09b9\u09be\u09b2\u0995\u09be \u09b8\u09ac\u09c1\u099c", "Light Yellow": "\u09b9\u09be\u09b2\u0995\u09be \u09b9\u09b2\u09c1\u09a6", "Light Red": "\u09b9\u09be\u09b2\u0995\u09be \u09b2\u09be\u09b2", "Light Purple": "\u09b9\u09be\u09b2\u0995\u09be \u09b0\u0995\u09cd\u09a4\u09ac\u09b0\u09cd\u09a3", "Light Blue": "\u09b9\u09be\u09b2\u0995\u09be \u09a8\u09c0\u09b2", "Dark Purple": "\u0997\u09be\u09a2\u09bc \u09b0\u0995\u09cd\u09a4\u09ac\u09b0\u09cd\u09a3", "Dark Blue": "\u0997\u09be\u09a2\u09bc \u09a8\u09c0\u09b2", "Black": "\u0995\u09be\u09b2\u09cb", "White": "\u09b8\u09be\u09a6\u09be", "Switch to or from fullscreen mode": "\u09aa\u09c2\u09b0\u09cd\u09a3\u09b8\u09cd\u0995\u09cd\u09b0\u09bf\u09a8 \u09ae\u09cb\u09a1\u09c7 \u09ac\u09be \u09a5\u09c7\u0995\u09c7 \u09b8\u09cd\u09af\u09c1\u0987\u099a \u0995\u09b0\u09c1\u09a8", "Open help dialog": "\u09b8\u09b9\u09be\u09af\u09bc\u09a4\u09be \u09a1\u09be\u09af\u09bc\u09be\u09b2\u0997 \u0996\u09c1\u09b2\u09c1\u09a8", "history": "\u0987\u09a4\u09bf\u09b9\u09be\u09b8", "styles": "\u09b6\u09c8\u09b2\u09c0", "formatting": "\u09ac\u09bf\u09a8\u09cd\u09af\u09be\u09b8", "alignment": "\u09b8\u09ae\u09a4\u09b2\u09a4\u09be", "indentation": "\u0996\u09be\u0981\u099c", "permanent pen": "\u09b8\u09cd\u09a5\u09be\u09af\u09bc\u09c0 \u0995\u09b2\u09ae", "comments": "\u09ae\u09a8\u09cd\u09a4\u09ac\u09cd\u09af", "Format Painter": "\u099a\u09bf\u09a4\u09cd\u09b0\u0995\u09b0 \u09ac\u09bf\u09a8\u09cd\u09af\u09be\u09b8", "Insert\/edit iframe": "\u0986\u0987\u09ab\u09cd\u09b0\u09c7\u09ae \u09b8\u09a8\u09cd\u09a8\u09bf\u09ac\u09c7\u09b6\/\u09b8\u09ae\u09cd\u09aa\u09be\u09a6\u09a8", "Capitalization": "\u09aa\u09cd\u09b0\u09a5\u09ae \u0985\u0995\u09cd\u09b7\u09b0 \u09ac\u09dc \u09b9\u09be\u09a4\u09c7\u09b0", "lowercase": "\u099a\u09cb\u099f \u09b9\u09be\u09a4\u09c7\u09b0", "UPPERCASE": "\u09ac\u09dc \u09b9\u09be\u09a4\u09c7\u09b0", "Title Case": "\u09b6\u09bf\u09b0\u09cb\u09a8\u09be\u09ae \u0995\u09c7\u09b8", "Permanent Pen Properties": "\u09b8\u09cd\u09a5\u09be\u09af\u09bc\u09c0 \u0995\u09b2\u09ae\u09c7\u09b0 \u09ac\u09c8\u09b6\u09bf\u09b7\u09cd\u099f\u09cd\u09af", "Permanent pen properties...": "\u09b8\u09cd\u09a5\u09be\u09af\u09bc\u09c0 \u0995\u09b2\u09ae\u09c7\u09b0 \u09ac\u09c8\u09b6\u09bf\u09b7\u09cd\u099f\u09cd\u09af...", "Font": "\u09ab\u09a8\u09cd\u099f", "Size": "\u0986\u09df\u09a4\u09a8", "More...": "\u0986\u09b0\u09cb...", "Spellcheck Language": "\u09ad\u09be\u09b7\u09be\u09b0 \u09ac\u09be\u09a8\u09be\u09a8 \u099a\u09c7\u0995", "Select...": "\u09a8\u09bf\u09b0\u09cd\u09ac\u09be\u099a\u09a8...", "Preferences": "\u09aa\u099b\u09a8\u09cd\u09a6\u09b8\u09ae\u09c2\u09b9", "Yes": "\u09b9\u09cd\u09af\u09be\u0981", "No": "\u09a8\u09be", "Keyboard Navigation": "\u0995\u09c0\u09ac\u09cb\u09b0\u09cd\u09a1 \u09a8\u09c7\u09ad\u09bf\u0997\u09c7\u09b6\u09a8", "Version": "\u09b8\u0982\u09b8\u09cd\u0995\u09b0\u09a3", "Anchor": "\u09a8\u09cb\u0999\u09cd\u0997\u09b0", "Special character": "\u09ac\u09bf\u09b6\u09c7\u09b7 \u099a\u09b0\u09bf\u09a4\u09cd\u09b0", "Code sample": "\u09a8\u09ae\u09c1\u09a8\u09be \u0995\u09cb\u09a1", "Color": "\u09b0\u0999", "Emoticons": "\u0987\u09ae\u09cb\u099f\u09bf\u0995\u09a8", "Document properties": "\u09a8\u09a5\u09bf\u09b0 \u09ac\u09c8\u09b6\u09bf\u09b7\u09cd\u099f\u09cd\u09af", "Image": "\u099b\u09ac\u09bf", "Insert link": "\u09b2\u09bf\u0999\u09cd\u0995 \u09b8\u09a8\u09cd\u09a8\u09bf\u09ac\u09c7\u09b6 \u0995\u09b0\u09c1\u09a8", "Target": "\u09b2\u0995\u09cd\u09b7\u09cd\u09af", "Link": "\u09b2\u09bf\u0982\u0995", "Poster": "\u09aa\u09cb\u09b8\u09cd\u099f\u09be\u09b0", "Media": "\u09ae\u09bf\u09a1\u09bf\u09af\u09bc\u09be", "Print": "\u099b\u09be\u09aa\u09be", "Prev": "\u09aa\u09c2\u09b0\u09cd\u09ac\u09ac\u09b0\u09cd\u09a4\u09c0", "Find and replace": "\u0996\u09c1\u0981\u099c\u09c1\u09a8 \u0993 \u09aa\u09cd\u09b0\u09a4\u09bf\u09b8\u09cd\u09a5\u09be\u09aa\u09a8 \u0995\u09b0\u09c1\u09a8", "Whole words": "\u09b8\u09ae\u09cd\u09aa\u09c2\u09b0\u09cd\u09a3 \u09b6\u09ac\u09cd\u09a6\u09c7\u09b0", "Spellcheck": "\u09ac\u09be\u09a8\u09be\u09a8 \u09af\u09be\u099a\u09be\u0987", "Caption": "\u0995\u09cd\u09af\u09be\u09aa\u09b6\u09a8", "Insert template": "\u099f\u09c7\u09ae\u09aa\u09cd\u09b2\u09c7\u099f \u09a2\u09cb\u0995\u09be\u09a8" }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/tinymce/langs/ca.js ================================================ tinymce.addI18n('ca',{ "Redo": "Refer", "Undo": "Desfer", "Cut": "Retalla", "Copy": "Copia", "Paste": "Enganxa", "Select all": "Seleccionar-ho tot", "New document": "Nou document", "Ok": "Acceptar", "Cancel": "Cancel\u00b7la", "Visual aids": "Assist\u00e8ncia visual", "Bold": "Negreta", "Italic": "Cursiva", "Underline": "Subratllat", "Strikethrough": "Barrat", "Superscript": "Super\u00edndex", "Subscript": "Sub\u00edndex", "Clear formatting": "Eliminar format", "Align left": "Alinea a l'esquerra", "Align center": "Alinea al centre", "Align right": "Alinea a la dreta", "Justify": "Justificat", "Bullet list": "Llista no ordenada", "Numbered list": "Llista enumerada", "Decrease indent": "Disminuir sagnat", "Increase indent": "Augmentar sagnat", "Close": "Tancar", "Formats": "Formats", "Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "El vostre navegador no suporta l'acc\u00e9s directe al portaobjectes. Si us plau, feu servir les dreceres de teclat Ctrl+X\/C\/V.", "Headers": "Encap\u00e7alaments", "Header 1": "Encap\u00e7alament 1", "Header 2": "Encap\u00e7alament 2", "Header 3": "Encap\u00e7alament 3", "Header 4": "Encap\u00e7alament 4", "Header 5": "Encap\u00e7alament 5", "Header 6": "Encap\u00e7alament 6", "Headings": "Encap\u00e7alaments", "Heading 1": "Encap\u00e7alament 1", "Heading 2": "Encap\u00e7alament 2", "Heading 3": "Encap\u00e7alament 3", "Heading 4": "Encap\u00e7alament 4", "Heading 5": "Encap\u00e7alament 5", "Heading 6": "Encap\u00e7alament 6", "Preformatted": "Preformatat", "Div": "Div", "Pre": "Pre", "Code": "Codi", "Paragraph": "Par\u00e0graf", "Blockquote": "Cita", "Inline": "En l\u00ednia", "Blocks": "Blocs", "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Enganxar ara est\u00e0 en mode text pla. Els continguts s'enganxaran com a text pla fins que desactivis aquesta opci\u00f3. ", "Fonts": "Fonts", "Font Sizes": "Mides de la font", "Class": "Classe", "Browse for an image": "Explorar per cercar una imatge", "OR": "O", "Drop an image here": "Deixar anar una imatge aqu\u00ed", "Upload": "Pujar", "Block": "Bloc", "Align": "Alinea", "Default": "Per defecte", "Circle": "Cercle", "Disc": "Disc", "Square": "Quadrat", "Lower Alpha": "Alfa menor", "Lower Greek": "Grec menor", "Lower Roman": "Roman menor", "Upper Alpha": "Alfa major", "Upper Roman": "Roman major", "Anchor...": "Ancoratge...", "Name": "Nom", "Id": "Id", "Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "La Id ha de comen\u00e7ar amb una lletra, seguida d'altres lletres, n\u00fameros, punts, ratlles, comes, o guions baixos", "You have unsaved changes are you sure you want to navigate away?": "Teniu canvis sense desar, esteu segur que voleu deixar-ho ara?", "Restore last draft": "Restaurar l'\u00faltim esborrany", "Special character...": "Car\u00e0cters especials\u2026", "Source code": "Codi font", "Insert\/Edit code sample": "Inserir\/Editar tros de codi", "Language": "Idioma", "Code sample...": "Mostra de codi...", "Color Picker": "Selector de colors", "R": "R", "G": "G", "B": "B", "Left to right": "D'esquerra a dreta", "Right to left": "De dreta a esquerra", "Emoticons...": "Emoticones...", "Metadata and Document Properties": "Metadades i propietats del document", "Title": "T\u00edtol", "Keywords": "Paraules clau", "Description": "Descripci\u00f3", "Robots": "Robots", "Author": "Autor", "Encoding": "Codificaci\u00f3", "Fullscreen": "Pantalla completa", "Action": "Acci\u00f3", "Shortcut": "Drecera", "Help": "Ajuda", "Address": "Adre\u00e7a", "Focus to menubar": "Enfocar la barra de men\u00fa", "Focus to toolbar": "Enfocar la barra d'eines", "Focus to element path": "Enfocar la ruta d'elements", "Focus to contextual toolbar": "Enfocar la barra d'eines contextual", "Insert link (if link plugin activated)": "Inserir enlla\u00e7 (si el complement d'enlla\u00e7 est\u00e0 activat)", "Save (if save plugin activated)": "Desar (si el complement desar est\u00e0 activat)", "Find (if searchreplace plugin activated)": "Cercar (si el complement cercar-reempla\u00e7ar est\u00e0 activat)", "Plugins installed ({0}):": "Complements instal\u00b7lats ({0}):", "Premium plugins:": "Complements premium", "Learn more...": "Apr\u00e8n m\u00e9s...", "You are using {0}": "Est\u00e0s utilitzant {0}", "Plugins": "Complements", "Handy Shortcuts": "Dreceres a m\u00e0", "Horizontal line": "L\u00ednia horitzontal", "Insert\/edit image": "Inserir\/editar imatge", "Image description": "Descripci\u00f3 de la imatge", "Source": "Font", "Dimensions": "Dimensions", "Constrain proportions": "Mantenir proporcions", "General": "General", "Advanced": "Avan\u00e7at", "Style": "Estil", "Vertical space": "Espai vertical", "Horizontal space": "Espai horitzontal", "Border": "Vora", "Insert image": "Inserir imatge", "Image...": "Imatge...", "Image list": "Llista d'imatges", "Rotate counterclockwise": "Girar a l'esquerra", "Rotate clockwise": "Girar a la dreta", "Flip vertically": "Capgirar verticalment", "Flip horizontally": "Capgirar horitzontalment", "Edit image": "Editar imatge", "Image options": "Opcions d'imatge", "Zoom in": "Ampliar", "Zoom out": "Empetitir", "Crop": "Escap\u00e7ar", "Resize": "Canviar mida", "Orientation": "Orientaci\u00f3", "Brightness": "Brillantor", "Sharpen": "Remarcar vores", "Contrast": "Contrast", "Color levels": "Nivells de color", "Gamma": "Gamma", "Invert": "Invertir", "Apply": "Aplicar", "Back": "Tornar", "Insert date\/time": "Inserir data\/hora", "Date\/time": "Data\/hora", "Insert\/Edit Link": "Inserir\/editar l'enlla\u00e7", "Insert\/edit link": "Inserir\/editar enlla\u00e7", "Text to display": "Text per mostrar", "Url": "URL", "Open link in...": "Obrir l'enlla\u00e7 a...", "Current window": "Finestra actual", "None": "Cap", "New window": "Finestra nova", "Remove link": "Treure enlla\u00e7", "Anchors": "\u00c0ncores", "Link...": "Enlla\u00e7...", "Paste or type a link": "Enganxa o escriu un enlla\u00e7", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "L'URL que has escrit sembla una adre\u00e7a de correu electr\u00f2nic. Vols afegir-li el prefix obligatori mailto: ?", "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "L'URL que has escrit sembla un enlla\u00e7 extern. Vols afegir-li el prefix obligatori http:\/\/ ?", "Link list": "Llista d'enlla\u00e7os", "Insert video": "Inserir v\u00eddeo", "Insert\/edit video": "Inserir\/editar v\u00eddeo", "Insert\/edit media": "Inserir\/editar mitj\u00e0", "Alternative source": "Font alternativa", "Alternative source URL": "URL de font alternativa", "Media poster (Image URL)": "Cartell de multim\u00e8dia (URL d'imatge)", "Paste your embed code below:": "Enganxau el codi a sota:", "Embed": "Incloure", "Media...": "Multim\u00e8dia...", "Nonbreaking space": "Espai fixe", "Page break": "Salt de p\u00e0gina", "Paste as text": "Enganxar com a text", "Preview": "Previsualitzaci\u00f3", "Print...": "Imprimir...", "Save": "Desa", "Find": "Buscar", "Replace with": "Rempla\u00e7ar amb", "Replace": "Rempla\u00e7ar", "Replace all": "Rempla\u00e7ar-ho tot", "Previous": "Anterior", "Next": "Seg\u00fcent", "Find and replace...": "Cercar i reempla\u00e7ar...", "Could not find the specified string.": "No es pot trobar el text especificat.", "Match case": "Coincidir maj\u00fascules", "Find whole words only": "Cercar nom\u00e9s paraules completes", "Spell check": "Corrector ortogr\u00e0fic", "Ignore": "Ignorar", "Ignore all": "Ignorar tots", "Finish": "Finalitzar", "Add to Dictionary": "Afegir al diccionari", "Insert table": "Inserir taula", "Table properties": "Propietats de taula", "Delete table": "Esborrar taula", "Cell": "Cel\u00b7la", "Row": "Fila", "Column": "Columna", "Cell properties": "Propietats de cel\u00b7la", "Merge cells": "Fusionar cel\u00b7les", "Split cell": "Dividir cel\u00b7les", "Insert row before": "Inserir fila a sobre", "Insert row after": "Inserir fila a sota", "Delete row": "Esborrar fila", "Row properties": "Propietats de fila", "Cut row": "Retallar fila", "Copy row": "Copiar fila", "Paste row before": "Enganxar fila a sobre", "Paste row after": "Enganxar fila a sota", "Insert column before": "Inserir columna abans", "Insert column after": "Inserir columna despr\u00e9s", "Delete column": "Esborrar columna", "Cols": "Cols", "Rows": "Files", "Width": "Amplada", "Height": "Al\u00e7ada", "Cell spacing": "Espai entre cel\u00b7les", "Cell padding": "Marge intern", "Show caption": "Mostrar encap\u00e7alament", "Left": "A l'esquerra", "Center": "Centrat", "Right": "A la dreta", "Cell type": "Tipus de cel\u00b7la", "Scope": "\u00c0mbit", "Alignment": "Aliniament", "H Align": "Al\u00edniament H", "V Align": "Al\u00edniament V", "Top": "Superior", "Middle": "Mitj\u00e0", "Bottom": "Inferior", "Header cell": "Cel\u00b7la de cap\u00e7alera", "Row group": "Grup de fila", "Column group": "Grup de columna", "Row type": "Tipus de fila", "Header": "Cap\u00e7alera", "Body": "Cos", "Footer": "Peu", "Border color": "Color de vora", "Insert template...": "Inserir plantilla...", "Templates": "Plantilles", "Template": "Plantilla", "Text color": "Color del text", "Background color": "Color del fons", "Custom...": "Personalitzar...", "Custom color": "Personalitzar el color", "No color": "Sense color", "Remove color": "Eliminar el color", "Table of Contents": "Taula de continguts", "Show blocks": "Mostrar blocs", "Show invisible characters": "Mostrar car\u00e0cters invisibles", "Word count": "Recompte de paraules", "Count": "Compta", "Document": "Document", "Selection": "Selecci\u00f3", "Words": "Paraules", "Words: {0}": "Paraules: {0}", "{0} words": "{0} paraules", "File": "Arxiu", "Edit": "Edici\u00f3", "Insert": "Inserir", "View": "Veure", "Format": "Format", "Table": "Taula", "Tools": "Eines", "Powered by {0}": "Impulsat per {0}", "Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u00c0rea de text amb format. Premeu ALT-F9 per mostrar el men\u00fa, ALT F10 per la barra d'eines i ALT-0 per ajuda.", "Image title": "T\u00edtol de la imatge", "Border width": "Amplada de la vora", "Border style": "Estil de la vora", "Error": "Error", "Warn": "Alerta", "Valid": "V\u00e0lid", "To open the popup, press Shift+Enter": "Per obrir la finestra emergent, premeu Maj.+Retorn", "Rich Text Area. Press ALT-0 for help.": "\u00c0rea de Text enriquit. Premeu ALT-0 per obtenir ajuda.", "System Font": "Font del sistema", "Failed to upload image: {0}": "No s'ha pogut carregar la imatge: {0}", "Failed to load plugin: {0} from url {1}": "No s'ha pogut carregar el complement: {0} de l\u2019URL {1}", "Failed to load plugin url: {0}": "No s'ha pogut carregar l\u2019URL del complement: {0}", "Failed to initialize plugin: {0}": "No s'ha pogut inicialitzar el complement: {0}", "example": "exemple", "Search": "Cerca", "All": "Tot", "Currency": "Moneda", "Text": "Text", "Quotations": "Cites", "Mathematical": "S\u00edmbols matem\u00e0tics", "Extended Latin": "Llat\u00ed ampliat", "Symbols": "S\u00edmbols", "Arrows": "Fletxes", "User Defined": "Definit per l'usuari", "dollar sign": "signe del d\u00f2lar", "currency sign": "signe de la moneda", "euro-currency sign": "signe de l'euro", "colon sign": "signe del col\u00f3n", "cruzeiro sign": "signe del cruzeiro", "french franc sign": "signe del franc franc\u00e8s", "lira sign": "signe de la lira", "mill sign": "signe del mill", "naira sign": "signe de la naira", "peseta sign": "signe de la pesseta", "rupee sign": "signe de la rupia", "won sign": "signe del won", "new sheqel sign": "signe del nou x\u00e9quel", "dong sign": "signe del dong", "kip sign": "signe del kip", "tugrik sign": "signe del t\u00f6gr\u00f6g", "drachma sign": "signe del dracma", "german penny symbol": "signe del penic alemany", "peso sign": "signe del peso", "guarani sign": "signe del guaran\u00ed", "austral sign": "signe de l\u2019austral", "hryvnia sign": "signe de la hr\u00edvnia", "cedi sign": "signe del cedi", "livre tournois sign": "signe de la lliura tornesa", "spesmilo sign": "signe de l\u2019spesmilo", "tenge sign": "signe del tenge", "indian rupee sign": "signe de la rupia \u00edndia", "turkish lira sign": "signe de la lira turca", "nordic mark sign": "signe del marc n\u00f2rdic", "manat sign": "signe del manat", "ruble sign": "signe del ruble", "yen character": "signe del ien", "yuan character": "signe del iuan", "yuan character, in hong kong and taiwan": "signe del iuan en Hong Kong i Taiwan", "yen\/yuan character variant one": "variaci\u00f3 1 del signe del ien\/iuan", "Loading emoticons...": "Carregant les emoticones...", "Could not load emoticons": "No s'han pogut carregar les emoticones", "People": "Gent", "Animals and Nature": "Animals i natura", "Food and Drink": "Menjar i beure", "Activity": "Activitat", "Travel and Places": "Viatges i llocs", "Objects": "Objectes", "Flags": "Banderes", "Characters": "Car\u00e0cters", "Characters (no spaces)": "Car\u00e0cters (sense espais)", "{0} characters": "{0} car\u00e0cters", "Error: Form submit field collision.": "Error: error en el camp d\u2019enviament del formulari.", "Error: No form element found.": "Error: no s'ha trobat l'element del formulari.", "Update": "Actualitzar", "Color swatch": "Mostra de color", "Turquoise": "Turquesa", "Green": "Verd", "Blue": "Blau", "Purple": "Violeta", "Navy Blue": "Blau mar\u00ed", "Dark Turquoise": "Turquesa fosc", "Dark Green": "Verd fosc", "Medium Blue": "Blau mitj\u00e0", "Medium Purple": "Violeta mitj\u00e0", "Midnight Blue": "Blau mitjanit", "Yellow": "Groc", "Orange": "Taronja", "Red": "Vermell", "Light Gray": "Gris clar", "Gray": "Gris", "Dark Yellow": "Groc fosc", "Dark Orange": "Taronja fosc", "Dark Red": "Vermell fosc", "Medium Gray": "Gris mitj\u00e0", "Dark Gray": "Gris fosc", "Light Green": "Verd clar", "Light Yellow": "Groc clar", "Light Red": "Vermell clar", "Light Purple": "Porpra clar", "Light Blue": "Blau clar", "Dark Purple": "Porpra fosc", "Dark Blue": "Blau fosc", "Black": "Negre", "White": "Blanc", "Switch to or from fullscreen mode": "Canviar a o del mode de pantalla completa", "Open help dialog": "Obrir el quadre de di\u00e0leg d'ajuda", "history": "historial", "styles": "estils", "formatting": "format", "alignment": "alineaci\u00f3", "indentation": "sagnat", "permanent pen": "retolador permanent", "comments": "comentaris", "Format Painter": "Formata el Painter", "Insert\/edit iframe": "Insereix\/edita iframe", "Capitalization": "Capitalitzaci\u00f3", "lowercase": "min\u00fascules", "UPPERCASE": "MAJ\u00daSCULES", "Title Case": "Caixa del t\u00edtol", "Permanent Pen Properties": "Par\u00e0metres permanents del llapis", "Permanent pen properties...": "Par\u00e0metres permanents del llapis\u2026", "Font": "Font", "Size": "Mida", "More...": "M\u00e9s\u2026", "Spellcheck Language": "Idioma de la comprovaci\u00f3 d'ortografia", "Select...": "Selecciona\u2026", "Preferences": "Par\u00e0metres", "Yes": "S\u00ed", "No": "No", "Keyboard Navigation": "Navegaci\u00f3 per teclat", "Version": "Versi\u00f3", "Anchor": "\u00c0ncora", "Special character": "Car\u00e0cter especial", "Code sample": "Mostra de codi", "Color": "Color", "Emoticons": "Emoticones", "Document properties": "Propietats del document", "Image": "Imatge", "Insert link": "Inserir enlla\u00e7", "Target": "Dest\u00ed", "Link": "Enlla\u00e7", "Poster": "P\u00f3ster", "Media": "Mitjans", "Print": "Imprimir", "Prev": "Anterior", "Find and replace": "Buscar i rempla\u00e7ar", "Whole words": "Paraules senceres", "Spellcheck": "Comprovar ortrografia", "Caption": "Encap\u00e7alament", "Insert template": "Inserir plantilla" }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/tinymce/langs/cs.js ================================================ tinymce.addI18n('cs',{ "Redo": "Opakovat", "Undo": "Zp\u011bt", "Cut": "Vyjmout", "Copy": "Kop\u00edrovat", "Paste": "Vlo\u017eit", "Select all": "Vybrat v\u0161e", "New document": "Nov\u00fd dokument", "Ok": "OK", "Cancel": "Storno", "Visual aids": "Vizu\u00e1ln\u00ed pom\u016fcky", "Bold": "Tu\u010dn\u00e9", "Italic": "Kurz\u00edva", "Underline": "Podtr\u017een\u00ed", "Strikethrough": "P\u0159e\u0161krtnut\u00e9", "Superscript": "Horn\u00ed index", "Subscript": "Doln\u00ed index", "Clear formatting": "Vymazat form\u00e1tov\u00e1n\u00ed", "Align left": "Zarovnat doleva", "Align center": "Zarovnat na st\u0159ed", "Align right": "Zarovnat doprava", "Justify": "Zarovnat do bloku", "Bullet list": "Odr\u00e1\u017eky", "Numbered list": "\u010c\u00edslov\u00e1n\u00ed", "Decrease indent": "Zmen\u0161it odsazen\u00ed", "Increase indent": "Zv\u011bt\u0161it odsazen\u00ed", "Close": "Zav\u0159\u00edt", "Formats": "Form\u00e1ty", "Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "V\u00e1\u0161 prohl\u00ed\u017ee\u010d nepodporuje p\u0159\u00edm\u00fd p\u0159\u00edstup do schr\u00e1nky. Pou\u017eijte pros\u00edm kl\u00e1vesov\u00e9 zkratky Ctrl+X\/C\/V.", "Headers": "Nadpisy", "Header 1": "Nadpis 1", "Header 2": "Nadpis 2", "Header 3": "Nadpis 3", "Header 4": "Nadpis 4", "Header 5": "Nadpis 5", "Header 6": "Nadpis 6", "Headings": "Nadpisy", "Heading 1": "Nadpis 1", "Heading 2": "Nadpis 2", "Heading 3": "Nadpis 3", "Heading 4": "Nadpis 4", "Heading 5": "Nadpis 5", "Heading 6": "Nadpis 6", "Preformatted": "P\u0159edform\u00e1tovan\u00fd text", "Div": "Div", "Pre": "Pre", "Code": "K\u00f3d", "Paragraph": "Odstavec", "Blockquote": "Blokov\u00e1 citace", "Inline": "\u0158\u00e1dkov\u00e9 zobrazen\u00ed (inline)", "Blocks": "Bloky", "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Je zapnuto vkl\u00e1d\u00e1n\u00ed \u010dist\u00e9ho textu. Dokud nebude tato volba vypnuta, bude ve\u0161ker\u00fd obsah vlo\u017een jako \u010dist\u00fd text.", "Fonts": "P\u00edsma", "Font Sizes": "Velikost p\u00edsma", "Class": "T\u0159\u00edda", "Browse for an image": "Vyhledat obr\u00e1zek", "OR": "OR", "Drop an image here": "P\u0159esu\u0148te obr\u00e1zek sem", "Upload": "Nahr\u00e1t", "Block": "Do bloku", "Align": "Zarovnat", "Default": "V\u00fdchoz\u00ed", "Circle": "Kole\u010dko", "Disc": "Punt\u00edk", "Square": "\u010ctvere\u010dek", "Lower Alpha": "Norm\u00e1ln\u00ed \u010d\u00edslov\u00e1n\u00ed", "Lower Greek": "Mal\u00e9 p\u00edsmenkov\u00e1n\u00ed", "Lower Roman": "Mal\u00e9 \u0159\u00edmsk\u00e9 \u010d\u00edslice", "Upper Alpha": "velk\u00e9 p\u00edsmenkov\u00e1n\u00ed", "Upper Roman": "\u0158\u00edmsk\u00e9 \u010d\u00edslice", "Anchor...": "Kotva...", "Name": "N\u00e1zev", "Id": "Id", "Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Id by m\u011blo za\u010d\u00ednat p\u00edsmenem a d\u00e1le obsahovat pouze p\u00edsmena, \u010d\u00edsla, poml\u010dky, te\u010dky, dvojte\u010dky, nebo podtr\u017e\u00edtka.", "You have unsaved changes are you sure you want to navigate away?": "M\u00e1te neulo\u017een\u00e9 zm\u011bny. Opravdu chcete opustit str\u00e1nku?", "Restore last draft": "Obnovit posledn\u00ed koncept", "Special character...": "Speci\u00e1ln\u00ed znak\u2026", "Source code": "Zdrojov\u00fd k\u00f3d", "Insert\/Edit code sample": "Vlo\u017eit \/ Upravit uk\u00e1zkov\u00fd k\u00f3d", "Language": "Jazyk", "Code sample...": "Uk\u00e1zkov\u00fd k\u00f3d...", "Color Picker": "V\u00fdb\u011br barvy", "R": "R", "G": "G", "B": "B", "Left to right": "Zleva doprava", "Right to left": "Zprava doleva", "Emoticons...": "Emotikony...", "Metadata and Document Properties": "Metadata a vlastnosti dokumentu", "Title": "Titulek", "Keywords": "Kl\u00ed\u010dov\u00e1 slova", "Description": "Popis", "Robots": "Roboti", "Author": "Autor", "Encoding": "K\u00f3dov\u00e1n\u00ed", "Fullscreen": "Na celou obrazovku", "Action": "Akce", "Shortcut": "Kl\u00e1vesov\u00e1 zkratka", "Help": "N\u00e1pov\u011bda", "Address": "Blok s po\u0161tovn\u00ed adresou", "Focus to menubar": "P\u0159ej\u00edt do menu", "Focus to toolbar": "P\u0159ej\u00edt na panel n\u00e1stroj\u016f", "Focus to element path": "P\u0159ej\u00edt na element path", "Focus to contextual toolbar": "P\u0159ej\u00edt na kontextov\u00fd panel n\u00e1stroj\u016f", "Insert link (if link plugin activated)": "Vlo\u017eit odkaz (pokud je aktivn\u00ed link plugin)", "Save (if save plugin activated)": "Ulo\u017eit (pokud je aktivni save plugin)", "Find (if searchreplace plugin activated)": "Hledat (pokud je aktivn\u00ed plugin searchreplace)", "Plugins installed ({0}):": "Instalovan\u00e9 pluginy ({0}):", "Premium plugins:": "Pr\u00e9miov\u00e9 pluginy:", "Learn more...": "Zjistit v\u00edce...", "You are using {0}": "Pou\u017e\u00edv\u00e1te {0}", "Plugins": "Pluginy", "Handy Shortcuts": "U\u017eite\u010dn\u00e9 kl\u00e1vesov\u00e9 zkratky", "Horizontal line": "Vodorovn\u00e1 \u010d\u00e1ra", "Insert\/edit image": "Vlo\u017eit \/ upravit obr\u00e1zek", "Image description": "Popis obr\u00e1zku", "Source": "URL", "Dimensions": "Rozm\u011bry", "Constrain proportions": "Zachovat proporce", "General": "Obecn\u00e9", "Advanced": "Pokro\u010dil\u00e9", "Style": "Styl", "Vertical space": "Vertik\u00e1ln\u00ed mezera", "Horizontal space": "Horizont\u00e1ln\u00ed mezera", "Border": "R\u00e1me\u010dek", "Insert image": "Vlo\u017eit obr\u00e1zek", "Image...": "Obr\u00e1zek\u2026", "Image list": "Seznam obr\u00e1zk\u016f", "Rotate counterclockwise": "Oto\u010dit doleva", "Rotate clockwise": "Oto\u010dit doprava", "Flip vertically": "P\u0159evr\u00e1tit svisle", "Flip horizontally": "P\u0159evr\u00e1tit vodorovn\u011b", "Edit image": "Upravit obr\u00e1zek", "Image options": "Vlastnosti obr\u00e1zku", "Zoom in": "P\u0159ibl\u00ed\u017eit", "Zoom out": "Odd\u00e1lit", "Crop": "O\u0159\u00edznout", "Resize": "Zm\u011bnit velikost", "Orientation": "Transformovat", "Brightness": "Jas", "Sharpen": "Ostrost", "Contrast": "Kontrast", "Color levels": "\u00darovn\u011b barev", "Gamma": "Gama", "Invert": "Invertovat", "Apply": "Pou\u017e\u00edt", "Back": "Zp\u011bt", "Insert date\/time": "Vlo\u017eit datum \/ \u010das", "Date\/time": "Datum\/\u010das", "Insert\/Edit Link": "P\u0159idat\/upravit odkaz", "Insert\/edit link": "Vlo\u017eit \/ upravit odkaz", "Text to display": "Text k zobrazen\u00ed", "Url": "URL", "Open link in...": "Otev\u0159\u00edt odkaz v...", "Current window": "Aktu\u00e1ln\u00ed okno", "None": "\u017d\u00e1dn\u00e9", "New window": "Nov\u00e9 okno", "Remove link": "Odstranit odkaz", "Anchors": "Kotvy", "Link...": "Odkaz...", "Paste or type a link": "Vlo\u017eit nebo napsat odkaz", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "Zadan\u00e9 URL vypad\u00e1 jako e-mailov\u00e1 adresa. Chcete doplnit povinn\u00fd prefix mailto:?", "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "Zadan\u00e9 URL vypad\u00e1 jako odkaz na jin\u00fd web. Chcete doplnit povinn\u00fd prefix http:\/\/?", "Link list": "Seznam odkaz\u016f", "Insert video": "Vlo\u017eit video", "Insert\/edit video": "Vlo\u017eit \/ upravit video", "Insert\/edit media": "Vlo\u017eit \/ upravit m\u00e9dia", "Alternative source": "Alternativn\u00ed zdroj", "Alternative source URL": "Alternativn\u00ed zdrojov\u00e1 URL", "Media poster (Image URL)": "Medi\u00e1ln\u00ed plak\u00e1t (URL obr\u00e1zku)", "Paste your embed code below:": "Vlo\u017ete k\u00f3d pro vlo\u017een\u00ed n\u00ed\u017ee:", "Embed": "Vlo\u017eit", "Media...": "M\u00e9dium...", "Nonbreaking space": "Pevn\u00e1 mezera", "Page break": "Konec str\u00e1nky", "Paste as text": "Vlo\u017eit jako \u010dist\u00fd text", "Preview": "N\u00e1hled", "Print...": "Tisk...", "Save": "Ulo\u017eit", "Find": "Naj\u00edt", "Replace with": "Nahradit za", "Replace": "Nahradit", "Replace all": "Nahradit v\u0161e", "Previous": "P\u0159edchoz\u00ed", "Next": "Dal\u0161\u00ed", "Find and replace...": "Naj\u00edt a nahradit...", "Could not find the specified string.": "Zadan\u00fd \u0159et\u011bzec nebyl nalezen.", "Match case": "Rozli\u0161ovat mal\u00e1 a velk\u00e1 p\u00edsmena", "Find whole words only": "Hledat pouze cel\u00e1 slova", "Spell check": "Kontrola pravopisu", "Ignore": "Ignorovat", "Ignore all": "Ignorovat v\u0161e", "Finish": "Ukon\u010dit", "Add to Dictionary": "P\u0159idat do slovn\u00edku", "Insert table": "Vlo\u017eit tabulku", "Table properties": "Vlastnosti tabulky", "Delete table": "Smazat tabulku", "Cell": "Bu\u0148ka", "Row": "\u0158\u00e1dek", "Column": "Sloupec", "Cell properties": "Vlastnosti bu\u0148ky", "Merge cells": "Slou\u010dit bu\u0148ky", "Split cell": "Rozd\u011blit bu\u0148ky", "Insert row before": "Vlo\u017eit \u0159\u00e1dek nad", "Insert row after": "Vlo\u017eit \u0159\u00e1dek pod", "Delete row": "Smazat \u0159\u00e1dek", "Row properties": "Vlastnosti \u0159\u00e1dku", "Cut row": "Vyjmout \u0159\u00e1dek", "Copy row": "Kop\u00edrovat \u0159\u00e1dek", "Paste row before": "Vlo\u017eit \u0159\u00e1dek nad", "Paste row after": "Vlo\u017eit \u0159\u00e1dek pod", "Insert column before": "Vlo\u017eit sloupec vlevo", "Insert column after": "Vlo\u017eit sloupec vpravo", "Delete column": "Smazat sloupec", "Cols": "Sloupc\u016f", "Rows": "\u0158\u00e1dek", "Width": "\u0160\u00ed\u0159ka", "Height": "V\u00fd\u0161ka", "Cell spacing": "Vn\u011bj\u0161\u00ed okraj bun\u011bk", "Cell padding": "Vnit\u0159n\u00ed okraj bun\u011bk", "Show caption": "Zobrazit titulku", "Left": "Vlevo", "Center": "Na st\u0159ed", "Right": "Vpravo", "Cell type": "Typ bu\u0148ky", "Scope": "Rozsah", "Alignment": "Zarovn\u00e1n\u00ed", "H Align": "Horizont\u00e1ln\u00ed zarovn\u00e1n\u00ed", "V Align": "Vertik\u00e1ln\u00ed zarovn\u00e1n\u00ed", "Top": "Nahoru", "Middle": "Uprost\u0159ed", "Bottom": "Dol\u016f", "Header cell": "Hlavi\u010dkov\u00e1 bu\u0148ka", "Row group": "Skupina \u0159\u00e1dk\u016f", "Column group": "Skupina sloupc\u016f", "Row type": "Typ \u0159\u00e1dku", "Header": "Hlavi\u010dka", "Body": "T\u011blo", "Footer": "Pati\u010dka", "Border color": "Barva r\u00e1me\u010dku", "Insert template...": "Vlo\u017eit \u0161ablonu...", "Templates": "\u0160ablony", "Template": "\u0160ablona", "Text color": "Barva p\u00edsma", "Background color": "Barva pozad\u00ed", "Custom...": "Vlastn\u00ed...", "Custom color": "Vlastn\u00ed barva", "No color": "Bez barvy", "Remove color": "Odebrat barvu", "Table of Contents": "Obsah", "Show blocks": "Uk\u00e1zat bloky", "Show invisible characters": "Zobrazit speci\u00e1ln\u00ed znaky", "Word count": "Po\u010det slov", "Count": "Po\u010det", "Document": "Dokument", "Selection": "V\u00fdb\u011br", "Words": "Slova", "Words: {0}": "Po\u010det slov: {0}", "{0} words": "Po\u010det slov: {0}", "File": "Soubor", "Edit": "\u00dapravy", "Insert": "Vlo\u017eit", "View": "Zobrazit", "Format": "Form\u00e1t", "Table": "Tabulka", "Tools": "N\u00e1stroje", "Powered by {0}": "Vytvo\u0159il {0}", "Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Editor. Stiskn\u011bte ALT-F9 pro menu, ALT-F10 pro n\u00e1strojovou li\u0161tu a ALT-0 pro n\u00e1pov\u011bdu.", "Image title": "N\u00e1zev obr\u00e1zku", "Border width": "\u0160\u00ed\u0159ka ohrani\u010den\u00ed", "Border style": "Styl ohrani\u010den\u00ed", "Error": "Chyba", "Warn": "Varov\u00e1n\u00ed", "Valid": "Platn\u00fd", "To open the popup, press Shift+Enter": "Vyskakovac\u00ed okno otev\u0159ete stisknut\u00edm Shift+Enter", "Rich Text Area. Press ALT-0 for help.": "Oblast Rich Text, stiskn\u011bte ALT-0 pro n\u00e1pov\u011bdu.", "System Font": "Syst\u00e9mov\u00e9 p\u00edsmo", "Failed to upload image: {0}": "Nahr\u00e1n\u00ed obr\u00e1zku selhalo:", "Failed to load plugin: {0} from url {1}": "Na\u010dten\u00ed z\u00e1suvn\u00e9ho modulu selhalo: {0} z URL {1}", "Failed to load plugin url: {0}": "Na\u010dten\u00ed z\u00e1suvn\u00e9ho modulu URL selhalo: {0}", "Failed to initialize plugin: {0}": "Inicializace z\u00e1suvn\u00e9ho modulu selhala:", "example": "p\u0159\u00edklad", "Search": "Hledat", "All": "V\u0161e", "Currency": "M\u011bna", "Text": "Text", "Quotations": "Citace", "Mathematical": "Matematick\u00e9 symboly", "Extended Latin": "Roz\u0161\u00ed\u0159en\u00e9 Latin", "Symbols": "Symboly", "Arrows": "\u0160ipky", "User Defined": "Definovan\u00e9 u\u017eivatelem", "dollar sign": "znak dolaru", "currency sign": "znak m\u011bny", "euro-currency sign": "znak m\u011bny euro", "colon sign": "znak dvojte\u010dky", "cruzeiro sign": "znak cruzeiro", "french franc sign": "znak francouzsk\u00e9ho franku", "lira sign": "znak liry", "mill sign": "znak mill", "naira sign": "znak nairy", "peseta sign": "znak pesety", "rupee sign": "znak rupie", "won sign": "znak wonu", "new sheqel sign": "znak nov\u00e9ho \u0161ekelu", "dong sign": "znak dongu", "kip sign": "znak kipu", "tugrik sign": "znak tugriku", "drachma sign": "znak drachmy", "german penny symbol": "znak n\u011bmeck\u00e9ho feniku", "peso sign": "znak pesa", "guarani sign": "znak guaran\u00ed", "austral sign": "znak austral", "hryvnia sign": "znak h\u0159ivny", "cedi sign": "znak cedi", "livre tournois sign": "znak tournois libry", "spesmilo sign": "znak spesmilo", "tenge sign": "znak tenge", "indian rupee sign": "znak indick\u00e9 rupie", "turkish lira sign": "znak tureck\u00e9 liry", "nordic mark sign": "znak norsk\u00e9 marky", "manat sign": "znak manatu", "ruble sign": "znak rublu", "yen character": "znak jenu", "yuan character": "znak juanu", "yuan character, in hong kong and taiwan": "znak juanu v hongkongu a tchaj-wanu", "yen\/yuan character variant one": "znak jenu\/juanu, varianta 1", "Loading emoticons...": "Na\u010d\u00edt\u00e1n\u00ed emotikon\u016f...", "Could not load emoticons": "Nelze na\u010d\u00edst emotikony", "People": "Lid\u00e9", "Animals and Nature": "Zv\u00ed\u0159ata a p\u0159\u00edroda", "Food and Drink": "J\u00eddlo a pit\u00ed", "Activity": "Aktivita", "Travel and Places": "Cestov\u00e1n\u00ed a m\u00edsta", "Objects": "Objekty", "Flags": "Vlajky", "Characters": "Znaky", "Characters (no spaces)": "Znaky (bez mezer)", "{0} characters": "{0} znak\u016f", "Error: Form submit field collision.": "Chyba: Kolize odes\u00edlac\u00edho formul\u00e1\u0159ov\u00e9ho pole.", "Error: No form element found.": "Chyba: Nebyl nalezen \u017e\u00e1dn\u00fd prvek formul\u00e1\u0159e.", "Update": "Aktualizovat", "Color swatch": "Vzorek barvy", "Turquoise": "Tyrkysov\u00e1", "Green": "Zelen\u00e1", "Blue": "Modr\u00e1", "Purple": "Fialov\u00e1", "Navy Blue": "N\u00e1mo\u0159nick\u00e1 mod\u0159", "Dark Turquoise": "Tmav\u011b tyrkysov\u00e1", "Dark Green": "Tmav\u011b zelen\u00e1", "Medium Blue": "St\u0159edn\u011b modr\u00e1", "Medium Purple": "St\u0159edn\u011b fialov\u00e1", "Midnight Blue": "P\u016flno\u010dn\u00ed modr\u00e1", "Yellow": "\u017dlut\u00e1", "Orange": "Oran\u017eov\u00e1", "Red": "\u010cerven\u00e1", "Light Gray": "Sv\u011btle \u0161ed\u00e1", "Gray": "\u0160ed\u00e1", "Dark Yellow": "Tmav\u011b \u017elut\u00e1", "Dark Orange": "Tmav\u011b oran\u017eov\u00e1", "Dark Red": "Tmav\u011b \u010derven\u00e1", "Medium Gray": "St\u0159edn\u011b \u0161ed\u00e1", "Dark Gray": "Tmav\u011b \u0161ed\u00e1", "Light Green": "Sv\u011btle zelen\u00e1", "Light Yellow": "Sv\u011btle \u017elut\u00e1", "Light Red": "Sv\u011btle \u010derven\u00e1", "Light Purple": "Sv\u011btle fialov\u00e1", "Light Blue": "Sv\u011btle modr\u00e1", "Dark Purple": "Tmav\u011b fialov\u00e1", "Dark Blue": "Tmav\u011b modr\u00e1", "Black": "\u010cern\u00e1", "White": "B\u00edl\u00e1", "Switch to or from fullscreen mode": "P\u0159ep\u00edn\u00e1n\u00ed mezi re\u017eimem cel\u00e9 obrazovky", "Open help dialog": "Otev\u0159\u00edt okno n\u00e1pov\u011bdy", "history": "historie", "styles": "styly", "formatting": "form\u00e1tov\u00e1n\u00ed", "alignment": "zarovn\u00e1n\u00ed", "indentation": "odsazen\u00ed", "permanent pen": "permanentn\u00ed pero", "comments": "koment\u00e1\u0159e", "Format Painter": "Kop\u00edrovat form\u00e1t", "Insert\/edit iframe": "Vlo\u017eit\/upravit prvek iframe", "Capitalization": "Velk\u00e1 p\u00edsmena", "lowercase": "mal\u00e1 p\u00edsmena", "UPPERCASE": "VELK\u00c1 P\u00cdSMENA", "Title Case": "V\u0161echna Prvn\u00ed Velk\u00e1", "Permanent Pen Properties": "Vlastnosti permanentn\u00edho pera", "Permanent pen properties...": "Vlastnosti permanentn\u00edho pera\u2026", "Font": "P\u00edsmo", "Size": "Velikost", "More...": "Dal\u0161\u00ed\u2026", "Spellcheck Language": "Jazyk kontroly pravopisu", "Select...": "Vybrat\u2026", "Preferences": "P\u0159edvolby", "Yes": "Ano", "No": "Ne", "Keyboard Navigation": "Navigace pomoc\u00ed kl\u00e1vesnice", "Version": "Verze", "Anchor": "Kotva", "Special character": "Speci\u00e1ln\u00ed znak", "Code sample": "Uk\u00e1zkov\u00fd k\u00f3d", "Color": "Barva", "Emoticons": "Emotikony", "Document properties": "Vlastnosti dokumentu", "Image": "Obr\u00e1zek", "Insert link": "Vlo\u017eit odkaz", "Target": "C\u00edl", "Link": "Odkaz", "Poster": "N\u00e1hled", "Media": "M\u00e9dia", "Print": "Tisk", "Prev": "P\u0159edchoz\u00ed", "Find and replace": "Naj\u00edt a nahradit", "Whole words": "Pouze cel\u00e1 slova", "Spellcheck": "Kontrola pravopisu", "Caption": "Nadpis", "Insert template": "Vlo\u017eit \u0161ablonu" }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/tinymce/langs/cy.js ================================================ tinymce.addI18n('cy',{ "Redo": "Ailwneud", "Undo": "Dadwneud", "Cut": "Torri", "Copy": "Cop\u00efo", "Paste": "Gludo", "Select all": "Dewis popeth", "New document": "Dogfen newydd", "Ok": "Iawn", "Cancel": "Canslo", "Visual aids": "Cymorth gweledol", "Bold": "Bras", "Italic": "Italig", "Underline": "Tanlinellu", "Strikethrough": "Llinell drwodd", "Superscript": "Uwchsgript", "Subscript": "Is-sgript", "Clear formatting": "Clirio pob fformat", "Align left": "Aliniad chwith", "Align center": "Aliniad canol", "Align right": "Aliniad de", "Justify": "Unioni", "Bullet list": "Rhestr fwled", "Numbered list": "Rhestr rifol", "Decrease indent": "Lleihau mewnoliad", "Increase indent": "Cynyddu mewnoliad", "Close": "Cau", "Formats": "Fformatau", "Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Dyw eich porwr ddim yn cynnal mynediad uniongyrchol i'r clipfwrdd. Yn hytrach defnyddiwch y bysellau llwybrau byr Ctrl+X\/C\/V.", "Headers": "Penawdau", "Header 1": "Pennawd 1", "Header 2": "Pennawd 2", "Header 3": "Pennawd 3", "Header 4": "Pennawd 4", "Header 5": "Pennawd 5", "Header 6": "Pennawd 6", "Headings": "Penawdau", "Heading 1": "Pennawd 1", "Heading 2": "Pennawd 2", "Heading 3": "Pennawd 3", "Heading 4": "Pennawd 4", "Heading 5": "Pennawd 5", "Heading 6": "Pennawd 6", "Preformatted": "Wedi ei rag-fformatio", "Div": "Div", "Pre": "Pre", "Code": "Cod", "Paragraph": "Paragraff", "Blockquote": "Dyfyniad Bloc", "Inline": "Mewnlin", "Blocks": "Blociau", "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Mae gludo nawr yn gweithio yn y modd testun plaen. Caiff testun plaen ei ludo nawr tan gaiff yr opsiwn ei doglo i'w ddiffodd.", "Fonts": "Ffontau", "Font Sizes": "Meintiau Ffont", "Class": "Dosbarth", "Browse for an image": "Pori am ddelwedd", "OR": "NEU", "Drop an image here": "Gollwng delwedd yma", "Upload": "Uwchlwytho", "Block": "Bloc", "Align": "Alinio", "Default": "Diofyn", "Circle": "Cylch", "Disc": "Disg", "Square": "Sgw\u00e2r", "Lower Alpha": "Alffa Is", "Lower Greek": "Groeg Is", "Lower Roman": "Rhufeinig Is", "Upper Alpha": "Alffa Uwch", "Upper Roman": "Rhufeinig Uwch", "Anchor...": "Angor...", "Name": "Enw", "Id": "Id", "Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Dylai Id gychwyn gyda llythyren ac yna dim ond llythrennau, rhifau, llinellau toriad,dotiau, colonau neu danlinellau.", "You have unsaved changes are you sure you want to navigate away?": "Mae newidiadau heb eu cadw - ydych chi wir am symud i ffwrdd?", "Restore last draft": "Adfer y drafft olaf", "Special character...": "Nod arbennig...", "Source code": "Cod gwreiddiol", "Insert\/Edit code sample": "Mewnosod\/golygu sampl cod", "Language": "Iaith", "Code sample...": "Sampl cod...", "Color Picker": "Dewisydd Lliw", "R": "C", "G": "Gw", "B": "Gl", "Left to right": "Chwith i'r dde", "Right to left": "De i'r chwith", "Emoticons...": "Gwenogluniau...", "Metadata and Document Properties": "Metaddata a Priodweddau'r ddogfen", "Title": "Teitl", "Keywords": "Allweddeiriau", "Description": "Disgrifiad", "Robots": "Robotiaid", "Author": "Awdur", "Encoding": "Amgodiad", "Fullscreen": "Sgrin llawn", "Action": "Gweithred", "Shortcut": "Llwybr Byr", "Help": "Help", "Address": "Cyfeiriad", "Focus to menubar": "Ffocws i'r bar dewislen", "Focus to toolbar": "Ffocws i'r bar offer", "Focus to element path": "Ffocws i lwybr elfen", "Focus to contextual toolbar": "Ffocws i far offer y cyd-destun", "Insert link (if link plugin activated)": "Mewnosod dolen (os yw'r ategyn dolen yn weithredol)", "Save (if save plugin activated)": "Cadw (os yw'r ategyn cadw yn weithredol)", "Find (if searchreplace plugin activated)": "Canfod (os yw'r ategyn chwilio ac amnewid yn weithredol)", "Plugins installed ({0}):": "Ategio wedi eu gosod ({0}):", "Premium plugins:": "Ategion premiwm:", "Learn more...": "Dysgu Mwy...", "You are using {0}": "Rydych yn defnyddio {0}", "Plugins": "Ategion", "Handy Shortcuts": "Llwybrau byr cyfleus", "Horizontal line": "Llinell lorweddol", "Insert\/edit image": "Mewnosod\/golygu delwedd", "Image description": "Disgrifiad y ddelwedd", "Source": "Ffynhonnell", "Dimensions": "Dimensiynau", "Constrain proportions": "Gorfodi cyfrannedd", "General": "Cyffredinol", "Advanced": "Uwch", "Style": "Arddull", "Vertical space": "Gofod fertigol", "Horizontal space": "Gofod llorweddol", "Border": "Border", "Insert image": "Mewnosod delwedd", "Image...": "Delwedd...", "Image list": "Rhestr delweddau", "Rotate counterclockwise": "Troi gwrthgloc", "Rotate clockwise": "Troi clocwedd", "Flip vertically": "Fflipio fertigol", "Flip horizontally": "Fflipio llorweddol", "Edit image": "Golygu delwedd", "Image options": "Dewisiadau delwedd", "Zoom in": "Chwyddo mewn", "Zoom out": "Chwyddo allan", "Crop": "Tocio", "Resize": "Ailfeintio", "Orientation": "Cyfeiriadaeth", "Brightness": "Disgleirdeb", "Sharpen": "Hogi", "Contrast": "Cyferbynnedd", "Color levels": "Lefelau Lliw", "Gamma": "Gamma", "Invert": "Gwrthdroi", "Apply": "Rhoi ar waith", "Back": "Nol", "Insert date\/time": "Mewnosod dyddiad\/amser", "Date\/time": "Dyddiad\/amser", "Insert\/Edit Link": "Mewnosod\/Golygu dolen", "Insert\/edit link": "Mewnosod\/golygu dolen", "Text to display": "Testun i'w ddangos", "Url": "Url", "Open link in...": "Agor dolen yn...", "Current window": "Ffenestr gyfredol", "None": "Dim", "New window": "Ffenest newydd", "Remove link": "Tynnu dolen", "Anchors": "Angorau", "Link...": "Dolen...", "Paste or type a link": "Pastio neu deipio dolen", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "Mae'n debyg mai cyfeiriad e-bost yw'r URL hwn. Ydych chi am ychwanegu'r rhagddoddiad mailto:?", "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "Mae'n debyg mai dolen allanol yw'r URL hwn. Ydych chi am ychwanegu'r rhagddodiad http:\/\/ ?", "Link list": "Rhestr dolenni", "Insert video": "Mewnosod fideo", "Insert\/edit video": "Mewnosod\/golygu fideo", "Insert\/edit media": "Mewnosod\/golygu cyfrwng", "Alternative source": "Ffynhonnell amgen", "Alternative source URL": "Ffynhonnell URL arall", "Media poster (Image URL)": "Poster cyfrwng (URL delwedd)", "Paste your embed code below:": "Gludwch eich cod mewnosod isod:", "Embed": "Mewnosod", "Media...": "Cyfrwng...", "Nonbreaking space": "Bwlch heb dorri", "Page break": "Toriad tudalen", "Paste as text": "Gludo fel testun", "Preview": "Rhagolwg", "Print...": "Argraffu...", "Save": "Cadw", "Find": "Chwilio", "Replace with": "Amnewid gyda", "Replace": "Amnewid", "Replace all": "Amnewid y cwbl", "Previous": "Blaenorol", "Next": "Nesaf", "Find and replace...": "Chwilio ac amnewid", "Could not find the specified string.": "Methu ffeindio'r llinyn hwnnw.", "Match case": "Cas yn cyfateb", "Find whole words only": "Canfod geiriau llawn yn unig", "Spell check": "Gwirwr sillafu", "Ignore": "Anwybyddu", "Ignore all": "Amwybyddu pob", "Finish": "Gorffen", "Add to Dictionary": "Adio i'r Geiriadur", "Insert table": "Mewnosod tabl", "Table properties": "Priodweddau tabl", "Delete table": "Dileu'r tabl", "Cell": "Cell", "Row": "Rhes", "Column": "Colofn", "Cell properties": "Priodweddau'r gell", "Merge cells": "Cyfuno celloedd", "Split cell": "Hollti celloedd", "Insert row before": "Mewnosod rhes cyn", "Insert row after": "Mewnosod rhes ar \u00f4l", "Delete row": "Dileu rhes", "Row properties": "Priodweddau rhes", "Cut row": "Torri rhes", "Copy row": "Cop\u00efo rhes", "Paste row before": "Gludo rhes cyn", "Paste row after": "Gludo rhes ar \u00f4l", "Insert column before": "Mewnosod colofn cyn", "Insert column after": "Mewnosod colofn ar \u00f4l", "Delete column": "Dileu colofn", "Cols": "Colofnau", "Rows": "Rhesi", "Width": "Lled", "Height": "Uchder", "Cell spacing": "Bylchiad celloedd", "Cell padding": "Padio celloedd", "Show caption": "Dangos capsiwn", "Left": "Chwith", "Center": "Canol", "Right": "De", "Cell type": "Math y gell", "Scope": "Cwmpas", "Alignment": "Aliniad", "H Align": "Aliniad Ll", "V Align": "Aliniad F", "Top": "Brig", "Middle": "Canol", "Bottom": "Gwaelod", "Header cell": "Cell bennawd", "Row group": "Gr\u0175p rhes", "Column group": "Gr\u0175p colofn", "Row type": "Math y rhes", "Header": "Pennyn", "Body": "Corff", "Footer": "Troedyn", "Border color": "Lliw Border", "Insert template...": "Mewnosod templed...", "Templates": "Templedi", "Template": "Templed", "Text color": "Lliw testun", "Background color": "Lliw cefndir", "Custom...": "Personol...", "Custom color": "Lliw personol", "No color": "Dim Lliw", "Remove color": "Tynnu lliw", "Table of Contents": "Tabl Cynnwys", "Show blocks": "Dangos blociau", "Show invisible characters": "Dangos nodau anweledig", "Word count": "Cyfri geiriau", "Count": "Cyfrif", "Document": "Dogfen", "Selection": "Dewis", "Words": "Geiriau", "Words: {0}": "Geiriau: {0}", "{0} words": "{0} o eiriau", "File": "Ffeil", "Edit": "Golygu", "Insert": "Mewnosod", "View": "Dangos", "Format": "Fformat", "Table": "Tabl", "Tools": "Offer", "Powered by {0}": "Gyrrir gan {0}", "Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Ardal Testun Uwch. Pwyswch ALT-F9 ar gyfer y ddewislen, Pwyswch ALT-F10 ar gyfer y bar offer. Pwyswch ALT-0 am gymorth", "Image title": "Teitl delwedd", "Border width": "Lled border", "Border style": "Steil border", "Error": "Gwall", "Warn": "Rhybuddio", "Valid": "Dilys", "To open the popup, press Shift+Enter": "I agor y llamlen, pwyswch Shift+Enter", "Rich Text Area. Press ALT-0 for help.": "Ardal testun cyfoethog. Pwyswch ALT-0 am help.", "System Font": "Ffont system", "Failed to upload image: {0}": "Wedi methu uwchlwytho'r ddelwedd: {0}", "Failed to load plugin: {0} from url {1}": "Wedi methu llwytho'r ategyn: {0} o'r url {1}", "Failed to load plugin url: {0}": "Wedi methu llwytho url yr ategyn: {0}", "Failed to initialize plugin: {0}": "Wedi methu ymgychwyn yr ategyn: {0}", "example": "enghraifft", "Search": "Chwilio", "All": "Y cwbl", "Currency": "Arian cyfred", "Text": "Testun", "Quotations": "Dyfyniadau", "Mathematical": "Mathemategol", "Extended Latin": "Lladin estynedig", "Symbols": "Symbolau", "Arrows": "Saethau", "User Defined": "Diffinir gan y defnyddiwr", "dollar sign": "Arwydd dolar", "currency sign": "Arwydd arian cyfred", "euro-currency sign": "Arwydd euro", "colon sign": "Arwydd colon", "cruzeiro sign": "Arwydd cruzeiro", "french franc sign": "Arwydd ffranc Ffrengig", "lira sign": "Arwydd lira", "mill sign": "arwydd mill", "naira sign": "arwydd naira", "peseta sign": "arwydd peseta", "rupee sign": "arwydd rupee", "won sign": "arwydd won", "new sheqel sign": "arwydd sheqel newydd", "dong sign": "arwydd dong", "kip sign": "arwydd kip", "tugrik sign": "arwydd tugrik", "drachma sign": "arwydd drachma", "german penny symbol": "arwydd ceiniog almaenig", "peso sign": "arwydd peso", "guarani sign": "arwydd quarani", "austral sign": "arwydd austral", "hryvnia sign": "arwydd hryvnia", "cedi sign": "arwydd cedi", "livre tournois sign": "arwydd punt tournois", "spesmilo sign": "arwydd spesmilo", "tenge sign": "arwydd tenge", "indian rupee sign": "arwydd rupee india", "turkish lira sign": "arwydd lira twrcaidd", "nordic mark sign": "arwydd marc nordig", "manat sign": "arwydd manat", "ruble sign": "arwydd ruble", "yen character": "nod yen", "yuan character": "nod yuan", "yuan character, in hong kong and taiwan": "nod yuan yn Hong Kong a Taiwan", "yen\/yuan character variant one": "nod yen\/yuan amrywiad un", "Loading emoticons...": "Yn llwytho gwenogluniau", "Could not load emoticons": "Wedi methu llwytho gwenogluniau", "People": "Pobl", "Animals and Nature": "Anifeiliaid a Natur", "Food and Drink": "Bwyd a Diod", "Activity": "Gweithgaredd", "Travel and Places": "Teithio a lleoedd", "Objects": "Gwrthrychau", "Flags": "Baneri", "Characters": "Nodau", "Characters (no spaces)": "Nodau (dim gofod)", "{0} characters": "{0} nod", "Error: Form submit field collision.": "Gwall: Gwrthdrawiad maes cyflwyno ffurflen", "Error: No form element found.": "Gwall: Ni chafwyd elfen ffurflen", "Update": "Diweddaru", "Color swatch": "Casgliad lliwiau", "Turquoise": "Gwyrddlas", "Green": "Gwyrdd", "Blue": "Glas", "Purple": "Porffor", "Navy Blue": "Dulas", "Dark Turquoise": "Gwyrddlas tywyll", "Dark Green": "Gwyrdd tywyll", "Medium Blue": "Glas canolig", "Medium Purple": "Porffor canolig", "Midnight Blue": "Glas y nos", "Yellow": "Melyn", "Orange": "Oren", "Red": "Coch", "Light Gray": "Llwyd golau", "Gray": "d", "Dark Yellow": "Melyn tywyll", "Dark Orange": "Oren tywyll", "Dark Red": "Coch tywyll", "Medium Gray": "Llwyd canolig", "Dark Gray": "Llwyd tywyll", "Light Green": "Gwyrdd Golau", "Light Yellow": "Melyn Golau", "Light Red": "Coch Golau", "Light Purple": "Porffor Golau", "Light Blue": "Glas Golau", "Dark Purple": "Porffor Tywyll", "Dark Blue": "Glas Tywyll", "Black": "Du", "White": "Gwyn", "Switch to or from fullscreen mode": "Newid i neu o'r modd sgr\u00een llawn", "Open help dialog": "Agor y ddeialog gymorth", "history": "hanes", "styles": "steiliau", "formatting": "fformatio", "alignment": "aliniad", "indentation": "mewnoli", "permanent pen": "pen sefydlog", "comments": "Sylwadau", "Format Painter": "Brwsh Fformat", "Insert\/edit iframe": "Mewnosod\/golygu iframe", "Capitalization": "Priflythrennu", "lowercase": "llythrennau bach", "UPPERCASE": "Priflythrennau", "Title Case": "Priflythyren i bob gair", "Permanent Pen Properties": "Priodweddau Yswgrifbin Parhaol", "Permanent pen properties...": "Priodweddau ysgrifbin parhaol...", "Font": "Ffont", "Size": "Maint", "More...": "Mwy...", "Spellcheck Language": "Iaith Gwirio Sillafu", "Select...": "Dewis...", "Preferences": "Dewisiadau", "Yes": "Iawn", "No": "Na", "Keyboard Navigation": "Llywio Bysellfwrdd", "Version": "Fersiwn", "Anchor": "Angor", "Special character": "Nod arbennig", "Color": "Lliw", "Emoticons": "Gwenogluniau", "Document properties": "Priodweddau'r ddogfen", "Image": "Delwedd", "Insert link": "Mewnosod dolen", "Link": "Dolen", "Target": "Targed", "Media": "Cyfrwng", "Poster": "Poster", "Print": "Argraffu", "Whole words": "Geiriau cyfan", "Find and replace": "Chwilio ac amnewid", "Prev": "Blaenorol", "Spellcheck": "Sillafydd", "Caption": "Pennawd", "Insert template": "Mewnosod templed" }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/tinymce/langs/da.js ================================================ tinymce.addI18n('da',{ "Redo": "Gendan", "Undo": "Fortryd", "Cut": "Klip", "Copy": "Kopier", "Paste": "S\u00e6t ind", "Select all": "V\u00e6lg alle", "New document": "Nyt dokument", "Ok": "Ok", "Cancel": "Annuller", "Visual aids": "Visuel hj\u00e6lp", "Bold": "Fed", "Italic": "Kursiv", "Underline": "Understreget", "Strikethrough": "Gennemstreget", "Superscript": "H\u00e6vet skrift", "Subscript": "S\u00e6nket skrift", "Clear formatting": "Nulstil formattering", "Align left": "Opstil til venstre", "Align center": "Centrer", "Align right": "Opstil til h\u00f8jre", "Justify": "Justering", "Bullet list": "Punktopstillet liste", "Numbered list": "Nummereret liste", "Decrease indent": "Formindsk indrykning", "Increase indent": "For\u00f8g indrykning", "Close": "Luk", "Formats": "Formater", "Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Din browser underst\u00f8tter ikke direkte adgang til udklipsholder. Benyt Ctrl+X\/C\/ tastaturgenveje i stedet for.", "Headers": "Overskrifter", "Header 1": "Overskrift 1", "Header 2": "Overskrift 2", "Header 3": "Overskrift 3", "Header 4": "Overskrift 4", "Header 5": "Overskrift 5", "Header 6": "Overskrift 6", "Headings": "Overskrifter", "Heading 1": "Overskrift 1", "Heading 2": "Overskrift 2", "Heading 3": "Overskrift 3", "Heading 4": "Overskrift 4", "Heading 5": "Overskrift 5", "Heading 6": "Overskrift 6", "Preformatted": "Forudformateret", "Div": "Div", "Pre": "Pre", "Code": "Kode", "Paragraph": "Afsnit", "Blockquote": "Blockquote", "Inline": "Inline", "Blocks": "Blokke", "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "S\u00e6t ind er indstillet til at inds\u00e6tte som ren tekst. Indhold bliver nu indsat uden formatering indtil du \u00e6ndrer indstillingen.", "Fonts": "Skrifttyper", "Font Sizes": "Skriftst\u00f8rrelse", "Class": "Class", "Browse for an image": "S\u00f8g efter et billede", "OR": "OR", "Drop an image here": "Slip et billede her", "Upload": "Upload", "Block": "Blok\u00e9r", "Align": "Align", "Default": "Standard", "Circle": "Cirkel", "Disc": "Disk", "Square": "Kvadrat", "Lower Alpha": "Lower Alpha", "Lower Greek": "Lower Gr\u00e6sk", "Lower Roman": "Lower Roman", "Upper Alpha": "Upper Alpha", "Upper Roman": "Upper Roman", "Anchor...": "Anker...", "Name": "Navn", "Id": "Id", "Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Id b\u00f8r starte med et bogstav, efterfulgt af bogstaver, tal, bindestreger, punktummer, koloner eller underscores.", "You have unsaved changes are you sure you want to navigate away?": "Du har ikke gemte \u00e6ndringer. Er du sikker p\u00e5 at du vil forts\u00e6tte?", "Restore last draft": "Genopret sidste kladde", "Special character...": "Specielle tegn...", "Source code": "Kildekode", "Insert\/Edit code sample": "Inds\u00e6t\/Ret kodeeksempel", "Language": "Sprog", "Code sample...": "Kodeeksempel...", "Color Picker": "Farvev\u00e6lger", "R": "R", "G": "G", "B": "B", "Left to right": "Venstre til h\u00f8jre", "Right to left": "H\u00f8jre til venstre", "Emoticons...": "Emotikoner...", "Metadata and Document Properties": "Metadata og dokumentegenskaber", "Title": "Titel", "Keywords": "S\u00f8geord", "Description": "Beskrivelse", "Robots": "Robotter", "Author": "Forfatter", "Encoding": "Kodning", "Fullscreen": "Fuldsk\u00e6rm", "Action": "Handling", "Shortcut": "Genvej", "Help": "Hj\u00e6lp", "Address": "Adresse", "Focus to menubar": "Fokus p\u00e5 menulinjen", "Focus to toolbar": "Fokus p\u00e5 v\u00e6rkt\u00f8jslinjen", "Focus to element path": "Fokuser p\u00e5 elementvej", "Focus to contextual toolbar": "Fokuser p\u00e5 kontekstuelle v\u00e6rkt\u00f8jslinje", "Insert link (if link plugin activated)": "Inds\u00e6t link (hvis link plugin er aktiveret)", "Save (if save plugin activated)": "Gem (hvis save plugin er aktiveret)", "Find (if searchreplace plugin activated)": "Find (hvis searchreplace plugin er aktiveret)", "Plugins installed ({0}):": "Installerede plugins ({0}):", "Premium plugins:": "Premium plugins:", "Learn more...": "L\u00e6r mere...", "You are using {0}": "Du benytter {0}", "Plugins": "Plugins", "Handy Shortcuts": "Praktiske Genveje", "Horizontal line": "Vandret linie", "Insert\/edit image": "Inds\u00e6t\/ret billede", "Image description": "Billede beskrivelse", "Source": "Kilde", "Dimensions": "Dimensioner", "Constrain proportions": "Behold propertioner", "General": "Generet", "Advanced": "Avanceret", "Style": "Stil", "Vertical space": "Lodret afstand", "Horizontal space": "Vandret afstand", "Border": "Kant", "Insert image": "Inds\u00e6t billede", "Image...": "Billede...", "Image list": "Billede liste", "Rotate counterclockwise": "Drej modsat urets retning", "Rotate clockwise": "Drej med urets retning", "Flip vertically": "Flip vertikalt", "Flip horizontally": "Flip horisontalt", "Edit image": "Rediger billede", "Image options": "Billede indstillinger", "Zoom in": "Zoom ind", "Zoom out": "Zoom ud", "Crop": "Besk\u00e6r", "Resize": "Skaler", "Orientation": "Retning", "Brightness": "Lysstyrke", "Sharpen": "G\u00f8r skarpere", "Contrast": "Kontrast", "Color levels": "Farve niveauer", "Gamma": "Gamma", "Invert": "Inverter", "Apply": "Anvend", "Back": "Tilbage", "Insert date\/time": "Inds\u00e6t dato\/klokkeslet", "Date\/time": "Dato\/klokkeslet", "Insert\/Edit Link": "Inds\u00e6t\/rediger link", "Insert\/edit link": "Inds\u00e6t\/ret link", "Text to display": "Vis tekst", "Url": "Url", "Open link in...": "\u00c5bn link med...", "Current window": "Aktuelle vindue", "None": "Ingen", "New window": "Nyt vindue", "Remove link": "Fjern link", "Anchors": "Ankre", "Link...": "Link...", "Paste or type a link": "Inds\u00e6t eller skriv et link", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "URLen som du angav ser ud til at v\u00e6re en email adresse. \u00d8nsker du at tilf\u00f8je det kr\u00e6vede prefiks mailto: ?", "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "URLen som du angav ser ud til at v\u00e6re et eksternt link. \u00d8nsker du at tilf\u00f8je det kr\u00e6vede prefiks http:\/\/ ?", "Link list": "Link liste", "Insert video": "Inds\u00e6t video", "Insert\/edit video": "Inds\u00e6t\/ret video", "Insert\/edit media": "Inds\u00e6t\/ret medier", "Alternative source": "Alternativ kilde", "Alternative source URL": "Alternativ kilde URL", "Media poster (Image URL)": "Medieplakat (billede URL)", "Paste your embed code below:": "Inds\u00e6t din embed kode herunder:", "Embed": "Integrer", "Media...": "Medie...", "Nonbreaking space": "H\u00e5rdt mellemrum", "Page break": "Sideskift", "Paste as text": "Inds\u00e6t som ren tekst", "Preview": "Forh\u00e5ndsvisning", "Print...": "Udskriv...", "Save": "Gem", "Find": "Find", "Replace with": "Erstat med", "Replace": "Erstat", "Replace all": "Erstat alt", "Previous": "Forrige", "Next": "N\u00e6ste", "Find and replace...": "Find og erstat...", "Could not find the specified string.": "Kunne ikke finde s\u00f8getekst", "Match case": "STORE og sm\u00e5 bogstaver", "Find whole words only": "Find kun hele ord", "Spell check": "Stavekontrol", "Ignore": "Ignorer", "Ignore all": "Ignorer alt", "Finish": "F\u00e6rdig", "Add to Dictionary": "Tilf\u00f8j til ordbog", "Insert table": "Inds\u00e6t tabel", "Table properties": "Tabel egenskaber", "Delete table": "Slet tabel", "Cell": "Celle", "Row": "R\u00e6kke", "Column": "Kolonne", "Cell properties": "Celle egenskaber", "Merge cells": "Flet celler", "Split cell": "Split celle", "Insert row before": "Inds\u00e6t r\u00e6kke f\u00f8r", "Insert row after": "Inds\u00e6t r\u00e6kke efter", "Delete row": "Slet r\u00e6kke", "Row properties": "R\u00e6kke egenskaber", "Cut row": "Klip r\u00e6kke", "Copy row": "Kopier r\u00e6kke", "Paste row before": "Inds\u00e6t r\u00e6kke f\u00f8r", "Paste row after": "Inds\u00e6t r\u00e6kke efter", "Insert column before": "Inds\u00e6t kolonne f\u00f8r", "Insert column after": "Inds\u00e6t kolonne efter", "Delete column": "Slet kolonne", "Cols": "Kolonne", "Rows": "R\u00e6kker", "Width": "Bredde", "Height": "H\u00f8jde", "Cell spacing": "Celle afstand", "Cell padding": "Celle padding", "Show caption": "Vis overskrift", "Left": "Venstre", "Center": "Centrering", "Right": "H\u00f8jre", "Cell type": "Celle type", "Scope": "Anvendelsesomr\u00e5de", "Alignment": "Tilpasning", "H Align": "H juster", "V Align": "V juster", "Top": "Top", "Middle": "Midt", "Bottom": "Bund", "Header cell": "Sidehoved celle", "Row group": "R\u00e6kke gruppe", "Column group": "Kolonne gruppe", "Row type": "R\u00e6kke type", "Header": "Sidehoved", "Body": "Krop", "Footer": "Sidefod", "Border color": "Kant farve", "Insert template...": "Inds\u00e6t skabelon...", "Templates": "Skabeloner", "Template": "Skabelon", "Text color": "Tekst farve", "Background color": "Baggrunds farve", "Custom...": "Brugerdefineret...", "Custom color": "Brugerdefineret farve", "No color": "Ingen farve", "Remove color": "Fjern farve", "Table of Contents": "Indholdsfortegnelse", "Show blocks": "Vis klokke", "Show invisible characters": "Vis usynlige tegn", "Word count": "Optalte ord", "Count": "Antal", "Document": "Dokument", "Selection": "Valg", "Words": "Ord", "Words: {0}": "Ord: {0}", "{0} words": "{0} ord", "File": "Fil", "Edit": "Rediger", "Insert": "Inds\u00e6t", "View": "Vis", "Format": "Format", "Table": "Tabel", "Tools": "V\u00e6rkt\u00f8j", "Powered by {0}": "Drevet af {0}", "Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Rich Text omr\u00e5de. Tryk ALT-F9 for menu. Tryk ALT-F10 for toolbar. Tryk ALT-0 for hj\u00e6lp", "Image title": "Billedtitel", "Border width": "Kantbredde", "Border style": "Kantstil", "Error": "Fejl", "Warn": "Advar", "Valid": "Gyldig", "To open the popup, press Shift+Enter": "Tryk skift + enter for at \u00e5bne pop op", "Rich Text Area. Press ALT-0 for help.": "Rich tekst omr\u00e5de. Tryk p\u00e5 ALT-0 for hj\u00e6lp.", "System Font": "Systemskrifttype", "Failed to upload image: {0}": "Mislykket billed-upload:", "Failed to load plugin: {0} from url {1}": "Mislykket plugin indl\u00e6sning: {0} fra url {1}", "Failed to load plugin url: {0}": "Mislykket indl\u00e6sning af plugin-url: {0}", "Failed to initialize plugin: {0}": "Mislykket initiering a plugin: {0}", "example": "eksempel", "Search": "S\u00f8g", "All": "Alle", "Currency": "Valuta", "Text": "Tekst", "Quotations": "Anf\u00f8rselstegn", "Mathematical": "Matematiske tegn", "Extended Latin": "Udvidet Latin", "Symbols": "Symboler", "Arrows": "Pile", "User Defined": "Brugerdefineret", "dollar sign": "dollartegn", "currency sign": "valutategn", "euro-currency sign": "euro-tegn", "colon sign": "kolontegn", "cruzeiro sign": "cruzeiro-tegn", "french franc sign": "fransk frank-tegn", "lira sign": "lira-tegn", "mill sign": "mill-tegn", "naira sign": "naira-tegn", "peseta sign": "peseta-tegn", "rupee sign": "rupee-tegn", "won sign": "won-tegn", "new sheqel sign": "ny sheqel-tegn", "dong sign": "dong-tegn", "kip sign": "kip-tegn", "tugrik sign": "tugrik-tegn", "drachma sign": "drakmer-tegn", "german penny symbol": "tysk penny-symbol", "peso sign": "peso-tegn", "guarani sign": "guarani-tegn", "austral sign": "austral-tegn", "hryvnia sign": "hryvnia-tegn", "cedi sign": "cedi-tegn", "livre tournois sign": "livre tournois-tegn", "spesmilo sign": "spesmilo-tegn", "tenge sign": "tenge-tegn", "indian rupee sign": "indisk rupee-tegn", "turkish lira sign": "tyrkisk lira-tegn", "nordic mark sign": "nordisk mark-tegn", "manat sign": "manat-tegn", "ruble sign": "rubel-tegn", "yen character": "yen-tegn", "yuan character": "yuan-tegn", "yuan character, in hong kong and taiwan": "yuan-tegn, i hong kong og taiwan", "yen\/yuan character variant one": "yen\/yuan-tegn variant en", "Loading emoticons...": "Indl\u00e6ser emotikoner...", "Could not load emoticons": "Kunne ikke indl\u00e6se emotikoner", "People": "Folk", "Animals and Nature": "Dyr og natur", "Food and Drink": "F\u00f8de og drikke", "Activity": "Aktivitet", "Travel and Places": "Rejser og steder", "Objects": "Objekter", "Flags": "Flag", "Characters": "Tegn", "Characters (no spaces)": "Tegn (uden mellemrum)", "{0} characters": "{0} tegn", "Error: Form submit field collision.": "Fejl: Form submit felt kollision", "Error: No form element found.": "Fejl: Ingen form element fundet.", "Update": "Opdater", "Color swatch": "Farvepr\u00f8ve", "Turquoise": "Turkis", "Green": "Gr\u00f8n", "Blue": "Bl\u00e5", "Purple": "Lilla", "Navy Blue": "Marinebl\u00e5", "Dark Turquoise": "M\u00f8rketurkis", "Dark Green": "M\u00f8rkegr\u00f8n", "Medium Blue": "Medium bl\u00e5", "Medium Purple": "Medium lilla", "Midnight Blue": "Midnatsbl\u00e5", "Yellow": "Gul", "Orange": "Orange", "Red": "R\u00f8d", "Light Gray": "Lysegr\u00e5", "Gray": "Gr\u00e5", "Dark Yellow": "M\u00f8rkegul", "Dark Orange": "M\u00f8rkeorange", "Dark Red": "M\u00f8rker\u00f8d", "Medium Gray": "Mellemgr\u00e5", "Dark Gray": "M\u00f8rkegr\u00e5", "Light Green": "Lysegr\u00f8n", "Light Yellow": "Lysegul", "Light Red": "Lyser\u00f8d", "Light Purple": "Lyslilla", "Light Blue": "Lysebl\u00e5", "Dark Purple": "M\u00f8rkelilla", "Dark Blue": "M\u00f8rkebl\u00e5", "Black": "Sort", "White": "Hvid", "Switch to or from fullscreen mode": "Skift til eller fra fuldsk\u00e6rmstilstand", "Open help dialog": "\u00c5bn hj\u00e6lpedialog", "history": "historie", "styles": "stile", "formatting": "formatering", "alignment": "justering", "indentation": "indrykning", "permanent pen": "permanent pen", "comments": "kommentarer", "Format Painter": "Formatpensel", "Insert\/edit iframe": "Inds\u00e6t\/rediger iframe", "Capitalization": "Store bogstaver", "lowercase": "sm\u00e5 bogstaver", "UPPERCASE": "STORE BOGSTAVER", "Title Case": "Stort begyndelsesbogstav", "Permanent Pen Properties": "Permanente penegenskaber", "Permanent pen properties...": "Permanente penegenskaber...", "Font": "Skrifttype", "Size": "St\u00f8rrelse", "More...": "Mere...", "Spellcheck Language": "Sprog til stavekontrol", "Select...": "V\u00e6lg...", "Preferences": "Pr\u00e6ferencer", "Yes": "Ja", "No": "Nej", "Keyboard Navigation": "Navigation med tastatur", "Version": "Version", "Anchor": "Anchor", "Special character": "Specielle tegn", "Code sample": "Kodepr\u00f8ve", "Color": "Farve", "Emoticons": "Emot-ikoner", "Document properties": "Dokument egenskaber", "Image": "Billede", "Insert link": "Inds\u00e6t link", "Target": "Target", "Link": "Link", "Poster": "Poster", "Media": "Medier", "Print": "Udskriv", "Prev": "Forrige", "Find and replace": "Find og erstat", "Whole words": "Hele ord", "Spellcheck": "Stavekontrol", "Caption": "Tekst", "Insert template": "Inds\u00e6t skabelon" }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/tinymce/langs/de.js ================================================ tinymce.addI18n('de',{ "Redo": "Wiederholen", "Undo": "R\u00fcckg\u00e4ngig machen", "Cut": "Ausschneiden", "Copy": "Kopieren", "Paste": "Einf\u00fcgen", "Select all": "Alles ausw\u00e4hlen", "New document": "Neues Dokument", "Ok": "Ok", "Cancel": "Abbrechen", "Visual aids": "Visuelle Hilfen", "Bold": "Fett", "Italic": "Kursiv", "Underline": "Unterstrichen", "Strikethrough": "Durchgestrichen", "Superscript": "Hochgestellt", "Subscript": "Tiefgestellt", "Clear formatting": "Formatierung entfernen", "Align left": "Linksb\u00fcndig ausrichten", "Align center": "Zentrieren", "Align right": "Rechtsb\u00fcndig ausrichten", "Justify": "Blocksatz", "Bullet list": "Aufz\u00e4hlung", "Numbered list": "Nummerierte Liste", "Decrease indent": "Einzug verkleinern", "Increase indent": "Einzug vergr\u00f6\u00dfern", "Close": "Schlie\u00dfen", "Formats": "Formate", "Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Ihr Browser unterst\u00fctzt leider keinen direkten Zugriff auf die Zwischenablage. Bitte benutzen Sie die Tastenkombinationen Strg+X\/C\/V.", "Headers": "\u00dcberschriften", "Header 1": "\u00dcberschrift 1", "Header 2": "\u00dcberschrift 2", "Header 3": "\u00dcberschrift 3", "Header 4": "\u00dcberschrift 4", "Header 5": "\u00dcberschrift 5", "Header 6": "\u00dcberschrift 6", "Headings": "\u00dcberschriften", "Heading 1": "Kopfzeile 1", "Heading 2": "Kopfzeile 2", "Heading 3": "Kopfzeile 3", "Heading 4": "Kopfzeile 4", "Heading 5": "Kopfzeile 5", "Heading 6": "Kopfzeile 6", "Preformatted": "Vorformatiert", "Div": "Div", "Pre": "Pre", "Code": "Code", "Paragraph": "Absatz", "Blockquote": "Blockquote", "Inline": "Zeichenformate", "Blocks": "Bl\u00f6cke", "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Einf\u00fcgen ist nun im einfachen Textmodus. Inhalte werden ab jetzt als unformatierter Text eingef\u00fcgt, bis Sie diese Einstellung wieder ausschalten!", "Fonts": "Schriftarten", "Font Sizes": "Schriftgr\u00f6\u00dfe", "Class": "Klasse", "Browse for an image": "Bild...", "OR": "ODER", "Drop an image here": "Bild hier ablegen", "Upload": "Hochladen", "Block": "Blocksatz", "Align": "Ausrichten", "Default": "Standard", "Circle": "Kreis", "Disc": "Punkt", "Square": "Quadrat", "Lower Alpha": "Kleinbuchstaben", "Lower Greek": "Griechische Kleinbuchstaben", "Lower Roman": "R\u00f6mische Zahlen (Kleinbuchstaben)", "Upper Alpha": "Gro\u00dfbuchstaben", "Upper Roman": "R\u00f6mische Zahlen (Gro\u00dfbuchstaben)", "Anchor...": "Textmarke", "Name": "Name", "Id": "Kennung", "Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Die Kennung sollte mit einem Buchstaben anfangen. Nachfolgend nur Buchstaben, Zahlen, Striche (Minus), Punkte, Kommas und Unterstriche.", "You have unsaved changes are you sure you want to navigate away?": "Die \u00c4nderungen wurden noch nicht gespeichert, sind Sie sicher, dass Sie diese Seite verlassen wollen?", "Restore last draft": "Letzten Entwurf wiederherstellen", "Special character...": "Sonderzeichen...", "Source code": "Quelltext", "Insert\/Edit code sample": "Codebeispiel einf\u00fcgen\/bearbeiten", "Language": "Sprache", "Code sample...": "Codebeispiel...", "Color Picker": "Farbwahl", "R": "R", "G": "G", "B": "B", "Left to right": "Von links nach rechts", "Right to left": "Von rechts nach links", "Emoticons...": "Emoticons...", "Metadata and Document Properties": "Dokument-Eigenschaften und -Metadaten", "Title": "Titel", "Keywords": "Sch\u00fcsselw\u00f6rter", "Description": "Beschreibung", "Robots": "Robots", "Author": "Verfasser", "Encoding": "Zeichenkodierung", "Fullscreen": "Vollbild", "Action": "Aktion", "Shortcut": "Shortcut", "Help": "Hilfe", "Address": "Adresse", "Focus to menubar": "Fokus auf Men\u00fcleiste", "Focus to toolbar": "Fokus auf Werkzeugleiste", "Focus to element path": "Fokus auf Elementpfad", "Focus to contextual toolbar": "Fokus auf kontextbezogene Werkzeugleiste", "Insert link (if link plugin activated)": "Link einf\u00fcgen (wenn Link-Plugin aktiviert ist)", "Save (if save plugin activated)": "Speichern (wenn Save-Plugin aktiviert ist)", "Find (if searchreplace plugin activated)": "Suchen einf\u00fcgen (wenn Suchen\/Ersetzen-Plugin aktiviert ist)", "Plugins installed ({0}):": "installierte Plugins ({0}):", "Premium plugins:": "Premium Plugins:", "Learn more...": "Erfahren Sie mehr dazu...", "You are using {0}": "Sie verwenden {0}", "Plugins": "Plugins", "Handy Shortcuts": "Praktische Tastenkombinationen", "Horizontal line": "Horizontale Linie", "Insert\/edit image": "Bild einf\u00fcgen\/bearbeiten", "Image description": "Bildbeschreibung", "Source": "Quelle", "Dimensions": "Abmessungen", "Constrain proportions": "Seitenverh\u00e4ltnis beibehalten", "General": "Allgemein", "Advanced": "Erweitert", "Style": "Stil", "Vertical space": "Vertikaler Abstand", "Horizontal space": "Horizontaler Abstand", "Border": "Rahmen", "Insert image": "Bild einf\u00fcgen", "Image...": "Bild...", "Image list": "Bildliste", "Rotate counterclockwise": "Gegen den Uhrzeigersinn drehen", "Rotate clockwise": "Im Uhrzeigersinn drehen", "Flip vertically": "Vertikal spiegeln", "Flip horizontally": "Horizontal spiegeln", "Edit image": "Bild bearbeiten", "Image options": "Bildeigenschaften", "Zoom in": "Ansicht vergr\u00f6\u00dfern", "Zoom out": "Ansicht verkleinern", "Crop": "Bescheiden", "Resize": "Skalieren", "Orientation": "Ausrichtung", "Brightness": "Helligkeit", "Sharpen": "Sch\u00e4rfen", "Contrast": "Kontrast", "Color levels": "Farbwerte", "Gamma": "Gamma", "Invert": "Invertieren", "Apply": "Anwenden", "Back": "Zur\u00fcck", "Insert date\/time": "Datum\/Uhrzeit einf\u00fcgen ", "Date\/time": "Datum\/Uhrzeit", "Insert\/Edit Link": "Link einf\u00fcgen\/bearbeiten", "Insert\/edit link": "Link einf\u00fcgen\/bearbeiten", "Text to display": "Anzuzeigender Text", "Url": "URL", "Open link in...": "Link \u00f6ffnen in...", "Current window": "Aktuelles Fenster", "None": "Keine", "New window": "Neues Fenster", "Remove link": "Link entfernen", "Anchors": "Textmarken", "Link...": "Link...", "Paste or type a link": "Link einf\u00fcgen oder eintippen", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "Diese Adresse scheint eine E-Mail-Adresse zu sein. M\u00f6chten Sie das dazu ben\u00f6tigte \"mailto:\" voranstellen?", "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "Diese Adresse scheint ein externer Link zu sein. M\u00f6chten Sie das dazu ben\u00f6tigte \"http:\/\/\" voranstellen?", "Link list": "Linkliste", "Insert video": "Video einf\u00fcgen", "Insert\/edit video": "Video einf\u00fcgen\/bearbeiten", "Insert\/edit media": "Medien einf\u00fcgen\/bearbeiten", "Alternative source": "Alternative Quelle", "Alternative source URL": "URL der alternativen Quelle", "Media poster (Image URL)": "Medienposter (Bild-URL)", "Paste your embed code below:": "F\u00fcgen Sie Ihren Einbettungscode hier ein:", "Embed": "Einbetten", "Media...": "Medien...", "Nonbreaking space": "Gesch\u00fctztes Leerzeichen", "Page break": "Seitenumbruch", "Paste as text": "Als Text einf\u00fcgen", "Preview": "Vorschau", "Print...": "Drucken...", "Save": "Speichern", "Find": "Suchen", "Replace with": "Ersetzen durch", "Replace": "Ersetzen", "Replace all": "Alles ersetzen", "Previous": "Vorherige", "Next": "Weiter", "Find and replace...": "Suchen und ersetzen...", "Could not find the specified string.": "Die Zeichenfolge wurde nicht gefunden.", "Match case": "Gro\u00df-\/Kleinschreibung beachten", "Find whole words only": "Nur ganze W\u00f6rter suchen", "Spell check": "Rechschreibpr\u00fcfung", "Ignore": "Ignorieren", "Ignore all": "Alles Ignorieren", "Finish": "Ende", "Add to Dictionary": "Zum W\u00f6rterbuch hinzuf\u00fcgen", "Insert table": "Tabelle einf\u00fcgen", "Table properties": "Tabelleneigenschaften", "Delete table": "Tabelle l\u00f6schen", "Cell": "Zelle", "Row": "Zeile", "Column": "Spalte", "Cell properties": "Zelleneigenschaften", "Merge cells": "Zellen verbinden", "Split cell": "Zelle aufteilen", "Insert row before": "Neue Zeile davor einf\u00fcgen ", "Insert row after": "Neue Zeile danach einf\u00fcgen", "Delete row": "Zeile l\u00f6schen", "Row properties": "Zeileneigenschaften", "Cut row": "Zeile ausschneiden", "Copy row": "Zeile kopieren", "Paste row before": "Zeile davor einf\u00fcgen", "Paste row after": "Zeile danach einf\u00fcgen", "Insert column before": "Neue Spalte davor einf\u00fcgen", "Insert column after": "Neue Spalte danach einf\u00fcgen", "Delete column": "Spalte l\u00f6schen", "Cols": "Spalten", "Rows": "Zeilen", "Width": "Breite", "Height": "H\u00f6he", "Cell spacing": "Zellenabstand", "Cell padding": "Zelleninnenabstand", "Show caption": "Beschriftung anzeigen", "Left": "Linksb\u00fcndig", "Center": "Zentriert", "Right": "Rechtsb\u00fcndig", "Cell type": "Zellentyp", "Scope": "G\u00fcltigkeitsbereich", "Alignment": "Ausrichtung", "H Align": "Horizontale Ausrichtung", "V Align": "Vertikale Ausrichtung", "Top": "Oben", "Middle": "Mitte", "Bottom": "Unten", "Header cell": "Kopfzelle", "Row group": "Zeilengruppe", "Column group": "Spaltengruppe", "Row type": "Zeilentyp", "Header": "Kopfzeile", "Body": "Inhalt", "Footer": "Fu\u00dfzeile", "Border color": "Rahmenfarbe", "Insert template...": "Vorlage einf\u00fcgen...", "Templates": "Vorlagen", "Template": "Vorlage", "Text color": "Textfarbe", "Background color": "Hintergrundfarbe", "Custom...": "Benutzerdefiniert...", "Custom color": "Benutzerdefinierte Farbe", "No color": "Keine Farbe", "Remove color": "Farbauswahl aufheben", "Table of Contents": "Inhaltsverzeichnis", "Show blocks": "Bl\u00f6cke anzeigen", "Show invisible characters": "Unsichtbare Zeichen anzeigen", "Word count": "Anzahl der W\u00f6rter", "Count": "Anzahl", "Document": "Dokument", "Selection": "Auswahl", "Words": "W\u00f6rter", "Words: {0}": "W\u00f6rter: {0}", "{0} words": "{0} W\u00f6rter", "File": "Datei", "Edit": "Bearbeiten", "Insert": "Einf\u00fcgen", "View": "Ansicht", "Format": "Format", "Table": "Tabelle", "Tools": "Werkzeuge", "Powered by {0}": "Betrieben von {0}", "Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Rich-Text- Area. Dr\u00fccken Sie ALT-F9 f\u00fcr das Men\u00fc. Dr\u00fccken Sie ALT-F10 f\u00fcr Symbolleiste. Dr\u00fccken Sie ALT-0 f\u00fcr Hilfe", "Image title": "Bildtitel", "Border width": "Rahmenbreite", "Border style": "Rahmenstil", "Error": "Fehler", "Warn": "Warnung", "Valid": "G\u00fcltig", "To open the popup, press Shift+Enter": "Dr\u00fccken Sie Umschalt+Eingabe, um das Popup-Fenster zu \u00f6ffnen.", "Rich Text Area. Press ALT-0 for help.": "Rich-Text-Bereich. Dr\u00fccken Sie Alt+0 f\u00fcr Hilfe.", "System Font": "Betriebssystemschriftart", "Failed to upload image: {0}": "Bild konnte nicht hochgeladen werden: {0}", "Failed to load plugin: {0} from url {1}": "Plugin konnte nicht geladen werden: {0} von URL {1}", "Failed to load plugin url: {0}": "Plugin-URL konnte nicht geladen werden: {0}", "Failed to initialize plugin: {0}": "Plugin konnte nicht initialisiert werden: {0}", "example": "Beispiel", "Search": "Suchen", "All": "Alles", "Currency": "W\u00e4hrung", "Text": "Text", "Quotations": "Anf\u00fchrungszeichen", "Mathematical": "Mathematisch", "Extended Latin": "Erweitertes Latein", "Symbols": "Symbole", "Arrows": "Pfeile", "User Defined": "Benutzerdefiniert", "dollar sign": "Dollarzeichen", "currency sign": "W\u00e4hrungssymbol", "euro-currency sign": "Eurozeichen", "colon sign": "Doppelpunkt", "cruzeiro sign": "Cruzeirozeichen", "french franc sign": "Franczeichen", "lira sign": "Lirezeichen", "mill sign": "Millzeichen", "naira sign": "Nairazeichen", "peseta sign": "Pesetazeichen", "rupee sign": "Rupiezeichen", "won sign": "Wonzeichen", "new sheqel sign": "Schekelzeichen", "dong sign": "Dongzeichen", "kip sign": "Kipzeichen", "tugrik sign": "Tugrikzeichen", "drachma sign": "Drachmezeichen", "german penny symbol": "Pfennigzeichen", "peso sign": "Pesozeichen", "guarani sign": "Guaranizeichen", "austral sign": "Australzeichen", "hryvnia sign": "Hrywnjazeichen", "cedi sign": "Cedizeichen", "livre tournois sign": "Livrezeichen", "spesmilo sign": "Spesmilozeichen", "tenge sign": "Tengezeichen", "indian rupee sign": "Indisches Rupiezeichen", "turkish lira sign": "T\u00fcrkisches Lirazeichen", "nordic mark sign": "Zeichen nordische Mark", "manat sign": "Manatzeichen", "ruble sign": "Rubelzeichen", "yen character": "Yenzeichen", "yuan character": "Yuanzeichen", "yuan character, in hong kong and taiwan": "Yuanzeichen in Hongkong und Taiwan", "yen\/yuan character variant one": "Yen-\/Yuanzeichen Variante 1", "Loading emoticons...": "Emoticons werden geladen...", "Could not load emoticons": "Emoticons konnten nicht geladen werden", "People": "Menschen", "Animals and Nature": "Tiere und Natur", "Food and Drink": "Essen und Trinken", "Activity": "Aktivit\u00e4t", "Travel and Places": "Reisen und Orte", "Objects": "Objekte", "Flags": "Flaggen", "Characters": "Zeichen", "Characters (no spaces)": "Zeichen (ohne Leerzeichen)", "{0} characters": "{0}\u00a0Zeichen", "Error: Form submit field collision.": "Fehler: Kollision der Formularbest\u00e4tigungsfelder.", "Error: No form element found.": "Fehler: Kein Formularelement gefunden.", "Update": "Aktualisieren", "Color swatch": "Farbpalette", "Turquoise": "T\u00fcrkis", "Green": "Gr\u00fcn", "Blue": "Blau", "Purple": "Violett", "Navy Blue": "Marineblau", "Dark Turquoise": "Dunkelt\u00fcrkis", "Dark Green": "Dunkelgr\u00fcn", "Medium Blue": "Mittleres Blau", "Medium Purple": "Mittelviolett", "Midnight Blue": "Mitternachtsblau", "Yellow": "Gelb", "Orange": "Orange", "Red": "Rot", "Light Gray": "Hellgrau", "Gray": "Grau", "Dark Yellow": "Dunkelgelb", "Dark Orange": "Dunkelorange", "Dark Red": "Dunkelrot", "Medium Gray": "Mittelgrau", "Dark Gray": "Dunkelgrau", "Light Green": "Hellgr\u00fcn", "Light Yellow": "Hellgelb", "Light Red": "Hellrot", "Light Purple": "Helllila", "Light Blue": "Hellblau", "Dark Purple": "Dunkellila", "Dark Blue": "Dunkelblau", "Black": "Schwarz", "White": "Wei\u00df", "Switch to or from fullscreen mode": "Vollbildmodus umschalten", "Open help dialog": "Hilfe-Dialog \u00f6ffnen", "history": "Historie", "styles": "Stile", "formatting": "Formatierung", "alignment": "Ausrichtung", "indentation": "Einr\u00fcckungen", "permanent pen": "Textmarker", "comments": "Anmerkungen", "Format Painter": "Format-Painter", "Insert\/edit iframe": "iframe einf\u00fcgen\/bearbeiten", "Capitalization": "Gro\u00dfschreibung", "lowercase": "Kleinbuchstaben", "UPPERCASE": "Gro\u00dfbuchstaben", "Title Case": "Gro\u00df-\/Kleinschreibung des Titels", "Permanent Pen Properties": "Eigenschaften von Permanent Pen", "Permanent pen properties...": "Eigenschaften von Permanent Pen...", "Font": "Schriftart", "Size": "Schriftgr\u00f6\u00dfe", "More...": "Mehr...", "Spellcheck Language": "Sprache f\u00fcr die Rechtschreibpr\u00fcfung", "Select...": "Auswahl...", "Preferences": "Einstellungen", "Yes": "Ja", "No": "Nein", "Keyboard Navigation": "Tastaturnavigation", "Version": "Version", "Anchor": "Textmarke", "Special character": "Sonderzeichen", "Code sample": "Codebeispiel", "Color": "Farbe", "Emoticons": "Emoticons", "Document properties": "Dokumenteigenschaften", "Image": "Bild", "Insert link": "Link einf\u00fcgen", "Target": "Ziel", "Link": "Link", "Poster": "Poster", "Media": "Medium", "Print": "Drucken", "Prev": "Zur\u00fcck", "Find and replace": "Suchen und ersetzen", "Whole words": "Nur ganze W\u00f6rter", "Spellcheck": "Rechtschreibpr\u00fcfung", "Caption": "Beschriftung", "Insert template": "Vorlage einf\u00fcgen " }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/tinymce/langs/el.js ================================================ tinymce.addI18n('el',{ "Redo": "\u0395\u03c0\u03b1\u03bd\u03ac\u03bb\u03b7\u03c8\u03b7", "Undo": "\u0391\u03bd\u03b1\u03af\u03c1\u03b5\u03c3\u03b7", "Cut": "\u0391\u03c0\u03bf\u03ba\u03bf\u03c0\u03ae", "Copy": "\u0391\u03bd\u03c4\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae", "Paste": "\u0395\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7", "Select all": "\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03cc\u03bb\u03c9\u03bd", "New document": "\u039d\u03ad\u03bf \u03ad\u03b3\u03b3\u03c1\u03b1\u03c6\u03bf", "Ok": "\u0395\u03bd\u03c4\u03ac\u03be\u03b5\u03b9", "Cancel": "\u0391\u03ba\u03cd\u03c1\u03c9\u03c3\u03b7", "Visual aids": "O\u03c0\u03c4\u03b9\u03ba\u03ac \u03b2\u03bf\u03b7\u03b8\u03ae\u03bc\u03b1\u03c4\u03b1 ", "Bold": "\u0388\u03bd\u03c4\u03bf\u03bd\u03b7", "Italic": "\u03a0\u03bb\u03ac\u03b3\u03b9\u03b1", "Underline": "\u03a5\u03c0\u03bf\u03b3\u03c1\u03ac\u03bc\u03bc\u03b9\u03c3\u03b7", "Strikethrough": "\u0394\u03b9\u03b1\u03ba\u03c1\u03b9\u03c4\u03ae \u03b4\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae", "Superscript": "\u0395\u03ba\u03b8\u03ad\u03c4\u03b7\u03c2", "Subscript": "\u0394\u03b5\u03af\u03ba\u03c4\u03b7\u03c2", "Clear formatting": "\u0391\u03c0\u03b1\u03bb\u03bf\u03b9\u03c6\u03ae \u03bc\u03bf\u03c1\u03c6\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7\u03c2", "Align left": "\u03a3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7 \u03b1\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac", "Align center": "\u03a3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7 \u03c3\u03c4\u03bf \u03ba\u03ad\u03bd\u03c4\u03c1\u03bf", "Align right": "\u03a3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7 \u03b4\u03b5\u03be\u03b9\u03ac", "Justify": "\u03a0\u03bb\u03ae\u03c1\u03b7\u03c2 \u03c3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7", "Bullet list": "\u039b\u03af\u03c3\u03c4\u03b1 \u03bc\u03b5 \u03ba\u03bf\u03c5\u03ba\u03ba\u03af\u03b4\u03b5\u03c2", "Numbered list": "\u0391\u03c1\u03b9\u03b8\u03bc\u03b7\u03bc\u03ad\u03bd\u03b7 \u03bb\u03af\u03c3\u03c4\u03b1", "Decrease indent": "\u039c\u03b5\u03af\u03c9\u03c3\u03b7 \u03b5\u03c3\u03bf\u03c7\u03ae\u03c2", "Increase indent": "\u0391\u03cd\u03be\u03b7\u03c3\u03b7 \u03b5\u03c3\u03bf\u03c7\u03ae\u03c2", "Close": "\u039a\u03bb\u03b5\u03af\u03c3\u03b9\u03bc\u03bf", "Formats": "\u039c\u03bf\u03c1\u03c6\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7", "Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u039f \u03c0\u03b5\u03c1\u03b9\u03b7\u03b3\u03b7\u03c4\u03ae\u03c2 \u03c3\u03b1\u03c2 \u03b4\u03b5\u03bd \u03c5\u03c0\u03bf\u03c3\u03c4\u03b7\u03c1\u03af\u03b6\u03b5\u03b9 \u03ac\u03bc\u03b5\u03c3\u03b7 \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7 \u03c3\u03c4\u03bf \u03c0\u03c1\u03cc\u03c7\u03b5\u03b9\u03c1\u03bf. \u03a0\u03b1\u03c1\u03b1\u03ba\u03b1\u03bb\u03ce \u03c7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03c4\u03b5 \u03c4\u03b9\u03c2 \u03c3\u03c5\u03bd\u03c4\u03bf\u03bc\u03b5\u03cd\u03c3\u03b5\u03b9\u03c2 \u03c0\u03bb\u03b7\u03ba\u03c4\u03c1\u03bf\u03bb\u03bf\u03b3\u03af\u03bf\u03c5 Ctrl+X\/C\/V.", "Headers": "\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b5\u03c2", "Header 1": "\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 1", "Header 2": "\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 2", "Header 3": "\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 3", "Header 4": "\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 4", "Header 5": "\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 5", "Header 6": "\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 6", "Headings": "\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b5\u03c2", "Heading 1": "\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 1", "Heading 2": "\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 2", "Heading 3": "\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 3", "Heading 4": "\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 4", "Heading 5": "\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 5", "Heading 6": "\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 6", "Preformatted": "\u03a0\u03c1\u03bf\u03b4\u03b9\u03b1\u03bc\u03bf\u03c1\u03c6\u03c9\u03bc\u03ad\u03bd\u03bf", "Div": "Div", "Pre": "Pre", "Code": "\u039a\u03ce\u03b4\u03b9\u03ba\u03b1\u03c2", "Paragraph": "\u03a0\u03b1\u03c1\u03ac\u03b3\u03c1\u03b1\u03c6\u03bf\u03c2", "Blockquote": "\u03a0\u03b5\u03c1\u03b9\u03bf\u03c7\u03ae \u03c0\u03b1\u03c1\u03ac\u03b8\u03b5\u03c3\u03b7\u03c2", "Inline": "\u0395\u03bd\u03c3\u03c9\u03bc\u03b1\u03c4\u03c9\u03bc\u03ad\u03bd\u03b7", "Blocks": "\u03a4\u03bc\u03ae\u03bc\u03b1\u03c4\u03b1", "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u0397 \u03b5\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7 \u03b5\u03af\u03bd\u03b1\u03b9 \u03c4\u03ce\u03c1\u03b1 \u03c3\u03b5 \u03bb\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 \u03b1\u03c0\u03bb\u03bf\u03cd \u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5. \u03a4\u03b1 \u03c0\u03b5\u03c1\u03b9\u03b5\u03c7\u03cc\u03bc\u03b5\u03bd\u03b1 \u03bc\u03b9\u03b1\u03c2 \u03b5\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7\u03c2 \u03b8\u03b1 \u03b5\u03c0\u03b9\u03ba\u03bf\u03bb\u03bb\u03bf\u03cd\u03bd\u03c4\u03b1\u03b9 \u03c9\u03c2 \u03b1\u03c0\u03bb\u03cc \u03ba\u03b5\u03af\u03bc\u03b5\u03bd\u03bf \u03cc\u03c3\u03bf \u03b7 \u03bb\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 \u03b1\u03c5\u03c4\u03ae \u03c0\u03b1\u03c1\u03b1\u03bc\u03ad\u03bd\u03b5\u03b9 \u03b5\u03bd\u03b5\u03c1\u03b3\u03ae.", "Font Family": "\u0393\u03c1\u03b1\u03bc\u03bc\u03b1\u03c4\u03bf\u03c3\u03b5\u03b9\u03c1\u03ac", "Font Sizes": "\u039c\u03ad\u03b3\u03b5\u03b8\u03bf\u03c2", "Class": "\u039a\u03bb\u03ac\u03c3\u03b7", "Browse for an image": "\u0391\u03bd\u03b1\u03b6\u03b7\u03c4\u03ae\u03c3\u03c4\u03b5 \u03bc\u03b9\u03b1 \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1", "OR": "\u0389", "Drop an image here": "\u03a1\u03af\u03be\u03c4\u03b5 \u03bc\u03b9\u03b1 \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1 \u03b5\u03b4\u03ce", "Upload": "\u039c\u03b5\u03c4\u03b1\u03c6\u03cc\u03c1\u03c4\u03c9\u03c3\u03b7", "Block": "\u03a4\u03bc\u03ae\u03bc\u03b1", "Align": "\u03a3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7", "Default": "\u03a0\u03c1\u03bf\u03ba\u03b1\u03b8\u03bf\u03c1\u03b9\u03c3\u03bc\u03ad\u03bd\u03bf", "Circle": "\u039a\u03cd\u03ba\u03bb\u03bf\u03c2", "Disc": "\u0394\u03af\u03c3\u03ba\u03bf\u03c2", "Square": "\u03a4\u03b5\u03c4\u03c1\u03ac\u03b3\u03c9\u03bd\u03bf", "Lower Alpha": "\u03a0\u03b5\u03b6\u03ac \u03bb\u03b1\u03c4\u03b9\u03bd\u03b9\u03ba\u03ac", "Lower Greek": "\u03a0\u03b5\u03b6\u03ac \u03b5\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03ac", "Lower Roman": "\u03a0\u03b5\u03b6\u03ac \u03c1\u03c9\u03bc\u03b1\u03ca\u03ba\u03ac", "Upper Alpha": "\u039a\u03b5\u03c6\u03b1\u03bb\u03b1\u03af\u03b1 \u03bb\u03b1\u03c4\u03b9\u03bd\u03b9\u03ba\u03ac", "Upper Roman": "\u039a\u03b5\u03c6\u03b1\u03bb\u03b1\u03af\u03b1 \u03c1\u03c9\u03bc\u03b1\u03ca\u03ba\u03ac", "Anchor": "\u0391\u03b3\u03ba\u03cd\u03c1\u03c9\u03c3\u03b7", "Name": "\u038c\u03bd\u03bf\u03bc\u03b1", "Id": "\u039a\u03c9\u03b4\u03b9\u03ba\u03cc\u03c2", "Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "\u039f \u039a\u03c9\u03b4\u03b9\u03ba\u03cc\u03c2 \u03c0\u03c1\u03ad\u03c0\u03b5\u03b9 \u03bd\u03b1 \u03b1\u03c1\u03c7\u03af\u03b6\u03b5\u03b9 \u03bc\u03b5 \u03ad\u03bd\u03b1 \u03b3\u03c1\u03ac\u03bc\u03bc\u03b1, \u03b1\u03ba\u03bf\u03bb\u03bf\u03c5\u03b8\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf \u03bc\u03cc\u03bd\u03bf \u03b1\u03c0\u03cc \u03b3\u03c1\u03ac\u03bc\u03bc\u03b1\u03c4\u03b1, \u03b1\u03c1\u03b9\u03b8\u03bc\u03bf\u03cd\u03c2, \u03c0\u03b1\u03cd\u03bb\u03b5\u03c2, \u03c4\u03b5\u03bb\u03b5\u03af\u03b5\u03c2, \u03ac\u03bd\u03c9 \u03c4\u03b5\u03bb\u03b5\u03af\u03b1 \u03ae \u03c5\u03c0\u03bf\u03b3\u03c1\u03b1\u03bc\u03bc\u03af\u03c3\u03b5\u03b9\u03c2.", "You have unsaved changes are you sure you want to navigate away?": "\u0388\u03c7\u03b5\u03c4\u03b5 \u03bc\u03b7 \u03b1\u03c0\u03bf\u03b8\u03b7\u03ba\u03b5\u03c5\u03bc\u03ad\u03bd\u03b5\u03c2 \u03b1\u03bb\u03bb\u03b1\u03b3\u03ad\u03c2. \u0395\u03af\u03c3\u03c4\u03b5 \u03b2\u03ad\u03b2\u03b1\u03b9\u03bf\u03b9 \u03cc\u03c4\u03b9 \u03b8\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03c6\u03cd\u03b3\u03b5\u03c4\u03b5 \u03b1\u03c0\u03cc \u03c4\u03b7\u03bd \u03c3\u03b5\u03bb\u03af\u03b4\u03b1;", "Restore last draft": "\u0395\u03c0\u03b1\u03bd\u03b1\u03c6\u03bf\u03c1\u03ac \u03c4\u03b5\u03bb\u03b5\u03c5\u03c4\u03b1\u03af\u03bf\u03c5 \u03c3\u03c7\u03b5\u03b4\u03af\u03bf\u03c5", "Special character": "\u0395\u03b9\u03b4\u03b9\u03ba\u03cc\u03c2 \u03c7\u03b1\u03c1\u03b1\u03ba\u03c4\u03ae\u03c1\u03b1\u03c2", "Source code": "\u03a0\u03b7\u03b3\u03b1\u03af\u03bf\u03c2 \u03ba\u03ce\u03b4\u03b9\u03ba\u03b1\u03c2", "Insert\/Edit code sample": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae\/\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03b4\u03b5\u03af\u03b3\u03bc\u03b1\u03c4\u03bf\u03c2 \u03ba\u03ce\u03b4\u03b9\u03ba\u03b1", "Language": "\u0393\u03bb\u03ce\u03c3\u03c3\u03b1", "Code sample": "\u0394\u03b5\u03af\u03b3\u03bc\u03b1 \u039a\u03ce\u03b4\u03b9\u03ba\u03b1", "Color": "\u03a7\u03c1\u03ce\u03bc\u03b1", "R": "\u03ba", "G": "\u03a0", "B": "\u039c", "Left to right": "\u0391\u03c0\u03cc \u03b1\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac \u03c0\u03c1\u03bf\u03c2 \u03c4\u03b1 \u03b4\u03b5\u03be\u03b9\u03ac", "Right to left": "\u0391\u03c0\u03cc \u03b4\u03b5\u03be\u03b9\u03ac \u03c0\u03c1\u03bf\u03c2 \u03c4\u03b1 \u03b1\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac", "Emoticons": "\u03a6\u03b1\u03c4\u03c3\u03bf\u03cd\u03bb\u03b5\u03c2", "Document properties": "\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2 \u03b5\u03b3\u03b3\u03c1\u03ac\u03c6\u03bf\u03c5", "Title": "\u03a4\u03af\u03c4\u03bb\u03bf\u03c2", "Keywords": "\u039b\u03ad\u03be\u03b5\u03b9\u03c2 \u03ba\u03bb\u03b5\u03b9\u03b4\u03b9\u03ac", "Description": "\u03a0\u03b5\u03c1\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae", "Robots": "\u03a1\u03bf\u03bc\u03c0\u03cc\u03c4", "Author": "\u03a3\u03c5\u03bd\u03c4\u03ac\u03ba\u03c4\u03b7\u03c2", "Encoding": "\u039a\u03c9\u03b4\u03b9\u03ba\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7", "Fullscreen": "\u03a0\u03bb\u03ae\u03c1\u03b7\u03c2 \u03bf\u03b8\u03cc\u03bd\u03b7", "Action": "\u0395\u03bd\u03ad\u03c1\u03b3\u03b5\u03b9\u03b1", "Shortcut": "\u03a3\u03c5\u03bd\u03c4\u03cc\u03bc\u03b5\u03c5\u03c3\u03b7", "Help": "\u0392\u03bf\u03ae\u03b8\u03b5\u03b9\u03b1", "Address": "\u0394\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7", "Focus to menubar": "\u0395\u03c3\u03c4\u03af\u03b1\u03c3\u03b7 \u03c3\u03c4\u03bf \u03bc\u03b5\u03bd\u03bf\u03cd", "Focus to toolbar": "\u0395\u03c3\u03c4\u03af\u03b1\u03c3\u03b7 \u03c3\u03c4\u03b7 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae \u03b5\u03c1\u03b3\u03b1\u03bb\u03b5\u03af\u03c9\u03bd", "Focus to element path": "\u0395\u03c3\u03c4\u03af\u03b1\u03c3\u03b7 \u03c3\u03c4\u03b7 \u03b4\u03b9\u03b1\u03b4\u03c1\u03bf\u03bc\u03ae \u03c3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03bf\u03c5", "Focus to contextual toolbar": "\u0395\u03c3\u03c4\u03af\u03b1\u03c3\u03b7 \u03c3\u03c4\u03b7 \u03c3\u03c5\u03bd\u03b1\u03c6\u03ae \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae \u03b5\u03c1\u03b3\u03b1\u03bb\u03b5\u03af\u03c9\u03bd", "Insert link (if link plugin activated)": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5 (\u03b5\u03ac\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03b7\u03bc\u03ad\u03bd\u03bf \u03c4\u03bf \u03c0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c4\u03bf \u03c4\u03bf\u03c5 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5)", "Save (if save plugin activated)": "\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7 (\u03b5\u03ac\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03b7\u03bc\u03ad\u03bd\u03bf \u03c4\u03bf \u03c0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c4\u03bf \u03c4\u03b7\u03c2 \u03b1\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7\u03c2)", "Find (if searchreplace plugin activated)": "\u0395\u03cd\u03c1\u03b5\u03c3\u03b7 (\u03b5\u03ac\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03b7\u03bc\u03ad\u03bd\u03bf \u03c4\u03bf \u03c0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c4\u03bf \u03c4\u03b7\u03c2 \u03b1\u03bd\u03b1\u03b6\u03ae\u03c4\u03b7\u03c3\u03b7\u03c2)", "Plugins installed ({0}):": "\u0395\u03b3\u03ba\u03b1\u03c4\u03b5\u03c3\u03c4\u03b7\u03bc\u03ad\u03bd\u03b1 \u03c0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c4\u03b1 ({0}):", "Premium plugins:": "\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c4\u03b1 \u03c5\u03c8\u03b7\u03bb\u03ae\u03c2 \u03c0\u03bf\u03b9\u03cc\u03c4\u03b7\u03c4\u03b1\u03c2:", "Learn more...": "\u039c\u03ac\u03b8\u03b5\u03c4\u03b5 \u03c0\u03b5\u03c1\u03b9\u03c3\u03c3\u03cc\u03c4\u03b5\u03c1\u03b1...", "You are using {0}": "\u03a7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03b5\u03af\u03c4\u03b5 {0}", "Plugins": "\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c4\u03b1", "Handy Shortcuts": "\u03a7\u03c1\u03ae\u03c3\u03b9\u03bc\u03b5\u03c2 \u03c3\u03c5\u03bd\u03c4\u03bf\u03bc\u03b5\u03cd\u03c3\u03b5\u03b9\u03c2", "Horizontal line": "\u039f\u03c1\u03b9\u03b6\u03cc\u03bd\u03c4\u03b9\u03b1 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae", "Insert\/edit image": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae\/\u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2", "Image description": "\u03a0\u03b5\u03c1\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2", "Source": "\u03a0\u03b7\u03b3\u03ae", "Dimensions": "\u0394\u03b9\u03b1\u03c3\u03c4\u03ac\u03c3\u03b5\u03b9\u03c2", "Constrain proportions": "\u03a0\u03b5\u03c1\u03b9\u03bf\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2 \u03b1\u03bd\u03b1\u03bb\u03bf\u03b3\u03b9\u03ce\u03bd", "General": "\u0393\u03b5\u03bd\u03b9\u03ba\u03ac", "Advanced": "\u0393\u03b9\u03b1 \u03a0\u03c1\u03bf\u03c7\u03c9\u03c1\u03b7\u03bc\u03ad\u03bd\u03bf\u03c5\u03c2", "Style": "\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7", "Vertical space": "\u039a\u03ac\u03b8\u03b5\u03c4\u03bf \u03b4\u03b9\u03ac\u03c3\u03c4\u03b7\u03bc\u03b1", "Horizontal space": "\u039f\u03c1\u03b9\u03b6\u03cc\u03bd\u03c4\u03b9\u03bf \u03b4\u03b9\u03ac\u03c3\u03c4\u03b7\u03bc\u03b1", "Border": "\u03a0\u03bb\u03b1\u03af\u03c3\u03b9\u03bf", "Insert image": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2", "Image": "\u0395\u03b9\u03ba\u03cc\u03bd\u03b1", "Image list": "\u039b\u03af\u03c3\u03c4\u03b1 \u03b5\u03b9\u03ba\u03cc\u03bd\u03c9\u03bd", "Rotate counterclockwise": "\u03a0\u03b5\u03c1\u03b9\u03c3\u03c4\u03c1\u03bf\u03c6\u03ae \u03b1\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03cc\u03c3\u03c4\u03c1\u03bf\u03c6\u03b1", "Rotate clockwise": "\u03a0\u03b5\u03c1\u03b9\u03c3\u03c4\u03c1\u03bf\u03c6\u03ae \u03b4\u03b5\u03be\u03b9\u03cc\u03c3\u03c4\u03c1\u03bf\u03c6\u03b1", "Flip vertically": "\u0391\u03bd\u03b1\u03c3\u03c4\u03c1\u03bf\u03c6\u03ae \u03ba\u03b1\u03b8\u03ad\u03c4\u03c9\u03c2", "Flip horizontally": "\u0391\u03bd\u03b1\u03c3\u03c4\u03c1\u03bf\u03c6\u03ae \u03bf\u03c1\u03b9\u03b6\u03bf\u03bd\u03c4\u03af\u03c9\u03c2", "Edit image": "\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2", "Image options": "\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ad\u03c2 \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2", "Zoom in": "\u039c\u03b5\u03b3\u03ad\u03b8\u03c5\u03bd\u03c3\u03b7", "Zoom out": "\u03a3\u03bc\u03af\u03ba\u03c1\u03c5\u03bd\u03c3\u03b7", "Crop": "\u03a0\u03b5\u03c1\u03b9\u03ba\u03bf\u03c0\u03ae", "Resize": "\u0391\u03bb\u03bb\u03b1\u03b3\u03ae \u03bc\u03b5\u03b3\u03ad\u03b8\u03bf\u03c5\u03c2", "Orientation": "\u03a0\u03c1\u03bf\u03c3\u03b1\u03bd\u03b1\u03c4\u03bf\u03bb\u03b9\u03c3\u03bc\u03cc\u03c2", "Brightness": "\u03a6\u03c9\u03c4\u03b5\u03b9\u03bd\u03cc\u03c4\u03b7\u03c4\u03b1", "Sharpen": "\u038c\u03be\u03c5\u03bd\u03c3\u03b7", "Contrast": "\u0391\u03bd\u03c4\u03af\u03b8\u03b5\u03c3\u03b7", "Color levels": "\u0395\u03c0\u03af\u03c0\u03b5\u03b4\u03b1 \u03c7\u03c1\u03ce\u03bc\u03b1\u03c4\u03bf\u03c2", "Gamma": "\u0393\u03ac\u03bc\u03bc\u03b1", "Invert": "\u0391\u03bd\u03c4\u03b9\u03c3\u03c4\u03c1\u03bf\u03c6\u03ae", "Apply": "\u0395\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae", "Back": "\u03a0\u03af\u03c3\u03c9", "Insert date\/time": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03b7\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03af\u03b1\u03c2\/\u03ce\u03c1\u03b1\u03c2", "Date\/time": "\u0397\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03af\u03b1\/\u03ce\u03c1\u03b1", "Insert link": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5", "Insert\/edit link": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae\/\u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5", "Text to display": "\u039a\u03b5\u03af\u03bc\u03b5\u03bd\u03bf \u03b3\u03b9\u03b1 \u03b5\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7", "Url": "URL", "Target": "\u03a0\u03c1\u03bf\u03bf\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2", "None": "\u039a\u03b1\u03bc\u03af\u03b1", "New window": "\u039d\u03ad\u03bf \u03c0\u03b1\u03c1\u03ac\u03b8\u03c5\u03c1\u03bf", "Remove link": "\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5", "Anchors": "\u0386\u03b3\u03ba\u03c5\u03c1\u03b5\u03c2", "Link": "\u03a3\u03cd\u03bd\u03b4\u03b5\u03c3\u03bc\u03bf\u03c2", "Paste or type a link": "\u0395\u03c0\u03b9\u03ba\u03bf\u03bb\u03bb\u03ae\u03c3\u03c4\u03b5 \u03ae \u03c0\u03bb\u03b7\u03ba\u03c4\u03c1\u03bf\u03bb\u03bf\u03b3\u03ae\u03c3\u03c4\u03b5 \u03ad\u03bd\u03b1 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03bc\u03bf", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u0397 \u03b4\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 URL \u03c0\u03bf\u03c5 \u03b5\u03b9\u03c3\u03ac\u03c7\u03b8\u03b7\u03ba\u03b5 \u03c0\u03b9\u03b8\u03b1\u03bd\u03ce\u03c2 \u03b5\u03af\u03bd\u03b1\u03b9 \u03b4\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 email. \u0398\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03c0\u03c1\u03bf\u03c3\u03b8\u03ad\u03c3\u03b5\u03c4\u03b5 \u03c4\u03bf \u03b1\u03c0\u03b1\u03b9\u03c4\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf \u03c0\u03c1\u03cc\u03b8\u03b7\u03bc\u03b1 mailto:;", "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\u0397 \u03b4\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 URL \u03c0\u03bf\u03c5 \u03b5\u03b9\u03c3\u03ac\u03c7\u03b8\u03b7\u03ba\u03b5 \u03c0\u03b9\u03b8\u03b1\u03bd\u03ce\u03c2 \u03b5\u03af\u03bd\u03b1\u03b9 \u03b5\u03be\u03c9\u03c4\u03b5\u03c1\u03b9\u03ba\u03cc\u03c2 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03bc\u03bf\u03c2. \u0398\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03c0\u03c1\u03bf\u03c3\u03b8\u03ad\u03c3\u03b5\u03c4\u03b5 \u03c4\u03bf \u03b1\u03c0\u03b1\u03b9\u03c4\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf \u03c0\u03c1\u03cc\u03b8\u03b7\u03bc\u03b1 http:\/\/;", "Link list": "\u039b\u03af\u03c3\u03c4\u03b1 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03c9\u03bd", "Insert video": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03b2\u03af\u03bd\u03c4\u03b5\u03bf", "Insert\/edit video": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae\/\u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03b2\u03af\u03bd\u03c4\u03b5\u03bf", "Insert\/edit media": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae\/\u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 media", "Alternative source": "\u0395\u03bd\u03b1\u03bb\u03bb\u03b1\u03ba\u03c4\u03b9\u03ba\u03ae \u03c0\u03c1\u03bf\u03ad\u03bb\u03b5\u03c5\u03c3\u03b7", "Poster": "\u0391\u03c6\u03af\u03c3\u03b1", "Paste your embed code below:": "\u0395\u03b9\u03c3\u03ac\u03b3\u03b5\u03c4\u03b5 \u03c4\u03bf\u03bd \u03b5\u03bd\u03c3\u03c9\u03bc\u03b1\u03c4\u03c9\u03bc\u03ad\u03bd\u03bf \u03ba\u03ce\u03b4\u03b9\u03ba\u03b1 \u03c0\u03b1\u03c1\u03b1\u03ba\u03ac\u03c4\u03c9:", "Embed": "\u0395\u03bd\u03c3\u03c9\u03bc\u03ac\u03c4\u03c9\u03c3\u03b7", "Media": "\u039c\u03ad\u03c3\u03b1 (\u03bc\u03af\u03bd\u03c4\u03b9\u03b1)", "Nonbreaking space": "\u039a\u03b5\u03bd\u03cc \u03c7\u03c9\u03c1\u03af\u03c2 \u03b4\u03b9\u03b1\u03ba\u03bf\u03c0\u03ae", "Page break": "\u0391\u03bb\u03bb\u03b1\u03b3\u03ae \u03c3\u03b5\u03bb\u03af\u03b4\u03b1\u03c2", "Paste as text": "\u0395\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7 \u03c9\u03c2 \u03ba\u03b5\u03af\u03bc\u03b5\u03bd\u03bf", "Preview": "\u03a0\u03c1\u03bf\u03b5\u03c0\u03b9\u03c3\u03ba\u03cc\u03c0\u03b7\u03c3\u03b7", "Print": "\u0395\u03ba\u03c4\u03cd\u03c0\u03c9\u03c3\u03b7", "Save": "\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7", "Find": "\u0395\u03cd\u03c1\u03b5\u03c3\u03b7", "Replace with": "\u0391\u03bd\u03c4\u03b9\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7 \u03bc\u03b5", "Replace": "\u0391\u03bd\u03c4\u03b9\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7", "Replace all": "\u0391\u03bd\u03c4\u03b9\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7 \u03cc\u03bb\u03c9\u03bd", "Prev": "\u03a0\u03c1\u03bf\u03b7\u03b3.", "Next": "\u0395\u03c0\u03cc\u03bc.", "Find and replace": "\u0395\u03cd\u03c1\u03b5\u03c3\u03b7 \u03ba\u03b1\u03b9 \u03b1\u03bd\u03c4\u03b9\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7", "Could not find the specified string.": "\u0394\u03b5\u03bd \u03ae\u03c4\u03b1\u03bd \u03b4\u03c5\u03bd\u03b1\u03c4\u03ae \u03b7 \u03b5\u03cd\u03c1\u03b5\u03c3\u03b7 \u03c4\u03bf\u03c5 \u03ba\u03b1\u03b8\u03bf\u03c1\u03b9\u03c3\u03bc\u03ad\u03bd\u03bf\u03c5 \u03b1\u03bb\u03c6\u03b1\u03c1\u03b9\u03b8\u03bc\u03b7\u03c4\u03b9\u03ba\u03bf\u03cd.", "Match case": "\u03a4\u03b1\u03af\u03c1\u03b9\u03b1\u03c3\u03bc\u03b1 \u03c0\u03b5\u03b6\u03ce\u03bd\/\u03ba\u03b5\u03c6\u03b1\u03bb\u03b1\u03af\u03c9\u03bd", "Whole words": "\u039f\u03bb\u03cc\u03ba\u03bb\u03b7\u03c1\u03b5\u03c2 \u03bb\u03ad\u03be\u03b5\u03b9\u03c2", "Spellcheck": "\u039f\u03c1\u03b8\u03bf\u03b3\u03c1\u03b1\u03c6\u03b9\u03ba\u03cc\u03c2 \u03ad\u03bb\u03b5\u03b3\u03c7\u03bf\u03c2 ", "Ignore": "\u03a0\u03b1\u03c1\u03ac\u03b2\u03bb\u03b5\u03c8\u03b7", "Ignore all": "\u03a0\u03b1\u03c1\u03ac\u03b2\u03bb\u03b5\u03c8\u03b7 \u03cc\u03bb\u03c9\u03bd", "Finish": "\u03a4\u03ad\u03bb\u03bf\u03c2", "Add to Dictionary": "\u03a0\u03c1\u03bf\u03c3\u03b8\u03ae\u03ba\u03b7 \u03c3\u03c4\u03bf \u039b\u03b5\u03be\u03b9\u03ba\u03cc", "Insert table": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03c0\u03af\u03bd\u03b1\u03ba\u03b1", "Table properties": "\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2 \u03c0\u03af\u03bd\u03b1\u03ba\u03b1", "Delete table": "\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae \u03c0\u03af\u03bd\u03b1\u03ba\u03b1", "Cell": "\u039a\u03b5\u03bb\u03af", "Row": "\u0393\u03c1\u03b1\u03bc\u03bc\u03ae", "Column": "\u03a3\u03c4\u03ae\u03bb\u03b7", "Cell properties": "\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2 \u03ba\u03b5\u03bb\u03b9\u03bf\u03cd", "Merge cells": "\u03a3\u03c5\u03b3\u03c7\u03ce\u03bd\u03b5\u03c5\u03c3\u03b7 \u03ba\u03b5\u03bb\u03b9\u03ce\u03bd", "Split cell": "\u0394\u03b9\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 \u03ba\u03b5\u03bb\u03b9\u03bf\u03cd", "Insert row before": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2 \u03b5\u03c0\u03ac\u03bd\u03c9", "Insert row after": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2 \u03ba\u03ac\u03c4\u03c9", "Delete row": "\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2", "Row properties": "\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2", "Cut row": "\u0391\u03c0\u03bf\u03ba\u03bf\u03c0\u03ae \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2", "Copy row": "\u0391\u03bd\u03c4\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2", "Paste row before": "\u0395\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2 \u03b5\u03c0\u03ac\u03bd\u03c9", "Paste row after": "\u0395\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2 \u03ba\u03ac\u03c4\u03c9", "Insert column before": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03c3\u03c4\u03ae\u03bb\u03b7\u03c2 \u03b1\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac", "Insert column after": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03c3\u03c4\u03ae\u03bb\u03b7\u03c2 \u03b4\u03b5\u03be\u03b9\u03ac", "Delete column": "\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae \u03c3\u03c4\u03ae\u03bb\u03b7\u03c2", "Cols": "\u03a3\u03c4\u03ae\u03bb\u03b5\u03c2", "Rows": "\u0393\u03c1\u03b1\u03bc\u03bc\u03ad\u03c2", "Width": "\u03a0\u03bb\u03ac\u03c4\u03bf\u03c2", "Height": "\u038e\u03c8\u03bf\u03c2", "Cell spacing": "\u0391\u03c0\u03cc\u03c3\u03c4\u03b1\u03c3\u03b7 \u03ba\u03b5\u03bb\u03b9\u03ce\u03bd", "Cell padding": "\u0391\u03bd\u03b1\u03c0\u03bb\u03ae\u03c1\u03c9\u03c3\u03b7 \u03ba\u03b5\u03bb\u03b9\u03ce\u03bd", "Caption": "\u039b\u03b5\u03b6\u03ac\u03bd\u03c4\u03b1", "Left": "\u0391\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac", "Center": "\u039a\u03b5\u03bd\u03c4\u03c1\u03b1\u03c1\u03b9\u03c3\u03bc\u03ad\u03bd\u03b7", "Right": "\u0394\u03b5\u03be\u03b9\u03ac", "Cell type": "\u03a4\u03cd\u03c0\u03bf\u03c2 \u03ba\u03b5\u03bb\u03b9\u03bf\u03cd", "Scope": "\u0388\u03ba\u03c4\u03b1\u03c3\u03b7", "Alignment": "\u03a3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7", "H Align": "\u039f\u03c1. \u03a3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7", "V Align": "\u039a. \u03a3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7", "Top": "\u039a\u03bf\u03c1\u03c5\u03c6\u03ae", "Middle": "\u039c\u03ad\u03c3\u03b7", "Bottom": "\u039a\u03ac\u03c4\u03c9", "Header cell": "\u039a\u03b5\u03bb\u03af-\u03ba\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1", "Row group": "\u039f\u03bc\u03ac\u03b4\u03b1 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ce\u03bd", "Column group": "\u039f\u03bc\u03ac\u03b4\u03b1 \u03c3\u03c4\u03b7\u03bb\u03ce\u03bd", "Row type": "\u03a4\u03cd\u03c0\u03bf\u03c2 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2", "Header": "\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1", "Body": "\u03a3\u03ce\u03bc\u03b1", "Footer": "\u03a5\u03c0\u03bf\u03c3\u03ad\u03bb\u03b9\u03b4\u03bf", "Border color": "\u03a7\u03c1\u03ce\u03bc\u03b1 \u03c0\u03bb\u03b1\u03b9\u03c3\u03af\u03bf\u03c5", "Insert template": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03c0\u03c1\u03bf\u03c4\u03cd\u03c0\u03bf\u03c5 ", "Templates": "\u03a0\u03c1\u03cc\u03c4\u03c5\u03c0\u03b1", "Template": "\u03a0\u03c1\u03cc\u03c4\u03c5\u03c0\u03bf", "Text color": "\u03a7\u03c1\u03ce\u03bc\u03b1 \u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5 ", "Background color": "\u03a7\u03c1\u03ce\u03bc\u03b1 \u03c6\u03cc\u03bd\u03c4\u03bf\u03c5", "Custom...": "\u03a0\u03c1\u03bf\u03c3\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae...", "Custom color": "\u03a0\u03c1\u03bf\u03c3\u03b1\u03c1\u03bc\u03bf\u03c3\u03bc\u03ad\u03bd\u03bf \u03c7\u03c1\u03ce\u03bc\u03b1", "No color": "\u03a7\u03c9\u03c1\u03af\u03c2 \u03c7\u03c1\u03ce\u03bc\u03b1", "Table of Contents": "\u03a0\u03af\u03bd\u03b1\u03ba\u03b1\u03c2 \u03a0\u03b5\u03c1\u03b9\u03b5\u03c7\u03bf\u03bc\u03ad\u03bd\u03c9\u03bd", "Show blocks": "\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7 \u03c4\u03bc\u03b7\u03bc\u03ac\u03c4\u03c9\u03bd", "Show invisible characters": "\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7 \u03ba\u03c1\u03c5\u03c6\u03ce\u03bd \u03c7\u03b1\u03c1\u03b1\u03ba\u03c4\u03ae\u03c1\u03c9\u03bd", "Words: {0}": "\u039b\u03ad\u03be\u03b5\u03b9\u03c2: {0}", "{0} words": "{0} \u03bb\u03ad\u03be\u03b5\u03b9\u03c2", "File": "\u0391\u03c1\u03c7\u03b5\u03af\u03bf", "Edit": "\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1", "Insert": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae", "View": "\u03a0\u03c1\u03bf\u03b2\u03bf\u03bb\u03ae", "Format": "\u039c\u03bf\u03c1\u03c6\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7", "Table": "\u03a0\u03af\u03bd\u03b1\u03ba\u03b1\u03c2", "Tools": "\u0395\u03c1\u03b3\u03b1\u03bb\u03b5\u03af\u03b1", "Powered by {0}": "\u03a4\u03c1\u03bf\u03c6\u03bf\u03b4\u03bf\u03c4\u03b5\u03af\u03c4\u03b1\u03b9 \u03b1\u03c0\u03cc {0}", "Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u03a0\u03b5\u03c1\u03b9\u03bf\u03c7\u03ae \u0395\u03bc\u03c0\u03bb\u03bf\u03c5\u03c4\u03b9\u03c3\u03bc\u03ad\u03bd\u03bf \u039a\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5. \u03a0\u03b1\u03c4\u03ae\u03c3\u03c4\u03b5 ALT-F9 \u03b3\u03b9\u03b1 \u03c4\u03bf \u03bc\u03b5\u03bd\u03bf\u03cd. \u03a0\u03b1\u03c4\u03ae\u03c3\u03c4\u03b5 ALT-F10 \u03b3\u03b9\u03b1 \u03c4\u03b7 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae \u03b5\u03c1\u03b3\u03b1\u03bb\u03b5\u03af\u03c9\u03bd. \u03a0\u03b1\u03c4\u03ae\u03c3\u03c4\u03b5 ALT-0 \u03b3\u03b9\u03b1 \u03b2\u03bf\u03ae\u03b8\u03b5\u03b9\u03b1" }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/tinymce/langs/eo.js ================================================ tinymce.addI18n('eo',{ "Cut": "Eltran\u0109i", "Heading 5": "Titolo 5", "Header 2": "\u0108apo 2", "Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Via retumilo ne subtenas rektan aliron al bufro. Bonvolu antata\u016de uzi klavarajn kombinojn Ctrl+X\/C\/V.", "Heading 4": "Titolo 4", "Div": "Div", "Heading 2": "Titolo 2", "Paste": "Englui", "Close": "Fermi", "Font Family": "Tipara familio", "Pre": "Pre", "Align right": "Ordigu dekstren", "New document": "Nova dokumento", "Blockquote": "Mar\u011denigo", "Numbered list": "Numera listo", "Heading 1": "Titolo 1", "Headings": "Titoloj", "Increase indent": "Pliigu alineon", "Formats": "Formatoj", "Headers": "\u0108apoj", "Select all": "Elekti \u0109ion", "Header 3": "\u0108apo 3", "Blocks": "Blokoj", "Undo": "Malfari", "Strikethrough": "Trastreki", "Bullet list": "Punkta listo", "Header 1": "\u0108apo 1", "Superscript": "Superskribi", "Clear formatting": "Forigi formatigon", "Font Sizes": "Tiparaj grandoj", "Subscript": "Malsuperskribi", "Header 6": "\u0108apo 6", "Redo": "Refari", "Paragraph": "Alineo", "Ok": "Bone", "Bold": "Dika", "Code": "Kodo", "Italic": "Oblikva", "Align center": "Ordigu centren", "Header 5": "\u0108apo 5", "Heading 6": "Titolo 6", "Heading 3": "Titolo 3", "Decrease indent": "Malpliigu alineon", "Header 4": "\u0108apo 4", "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "La engluado nun okazas en simpla teksta re\u011dimo. La enhavo estos engluata kiel simpla teksto \u011dis anta\u016d vi for\u015daltos tiun \u0109i opcion.", "Underline": "Substreki", "Cancel": "Nuligi", "Justify": "Ordigu la\u016dflanke", "Inline": "Enlinie", "Copy": "Kopii", "Align left": "Ordigu maldekstren", "Visual aids": "Videblaj helpiloj", "Lower Greek": "Minuskla greka", "Square": "Kvadrato", "Default": "Implicite", "Lower Alpha": "Minuskla alfabeta", "Circle": "Cirklo", "Disc": "Disko", "Upper Alpha": "Majuskla alfabeta", "Upper Roman": "Majuskla latina", "Lower Roman": "Minuskla latina", "Name": "Nomo", "Anchor": "Ankro", "You have unsaved changes are you sure you want to navigate away?": "Vi havas nekonservitajn \u015dan\u011dojn, \u0109u vi certe deziras eliri?", "Restore last draft": "Restarigu lastan malneton", "Special character": "Speciala karaktro", "Source code": "Fonta kodo", "B": "B", "R": "R", "G": "G", "Color": "Koloro", "Right to left": "Dekstro maldekstren", "Left to right": "Maldekstro dekstren", "Emoticons": "Emociikonoj", "Robots": "Robotoj", "Document properties": "Dokumentaj trajtoj", "Title": "Titolo", "Keywords": "\u015closilvortoj", "Encoding": "Enkodigo", "Description": "Priskribo", "Author": "A\u016dtoro", "Fullscreen": "Tutekrane", "Horizontal line": "Horizontala linio", "Horizontal space": "Horizontala spaco", "Insert\/edit image": "Enmetu\/redaktu bildon", "General": "\u011cenerale", "Advanced": "Por spertuloj", "Source": "Fonto", "Border": "Limo", "Constrain proportions": "Relativigu proporciojn", "Vertical space": "Vertikala spaco", "Image description": "Bilda priskribo", "Style": "Stilo", "Dimensions": "Dimensioj", "Insert image": "Enmetu bildon", "Zoom in": "Plilar\u011digu", "Contrast": "Kontrasto", "Back": "Reen", "Gamma": "Gamo", "Flip horizontally": "Respegulu horizontale", "Resize": "\u015can\u011du dimensiojn", "Sharpen": "Akrigu", "Zoom out": "Malplilar\u011digu", "Image options": "Bildaj opcioj", "Apply": "Apliku", "Brightness": "Heleco", "Rotate clockwise": "Rotaciu la\u016d horlo\u011do", "Rotate counterclockwise": "Rotaciu kontra\u016d horlo\u011do", "Edit image": "Redaktu bildon", "Color levels": "Kolorniveloj", "Crop": "Randtran\u0109u", "Orientation": "Orientigo", "Flip vertically": "Respegulu vertikale", "Invert": "Inversigu", "Insert date\/time": "Enmetu daton\/tempon", "Remove link": "Forigu ligilon", "Url": "Urlo", "Text to display": "Montrata teksto", "Anchors": "Ankroj", "Insert link": "Enmetu ligilon", "New window": "Nova fenestro", "None": "Nenio", "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "La enmetita URLo \u015dajnas esti ekstera ligilo. \u0108u vi deziras aldoni nepran prefikson http:\/\/?", "Target": "Celo", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "La enmetita URLo \u015dajnas esti retadreso. \u0108u vi deziras aldoni prefikson mailto:?", "Insert\/edit link": "Enmetu\/redaktu ligilon", "Insert\/edit video": "Enmetu\/redaktu videon", "Poster": "Afi\u015do", "Alternative source": "Alternativa fonto", "Paste your embed code below:": "Engluu vian internan kodon \u0109i-sube:", "Insert video": "Enmetu videon", "Embed": "Enkonstruu", "Nonbreaking space": "Nerompebla spaco", "Page break": "Pa\u011da fino", "Paste as text": "Engluu kiel tekston", "Preview": "Provrigardo", "Print": "Presu", "Save": "Konservi", "Could not find the specified string.": "Malsukceso trovi la indikitan sinsekvon", "Replace": "Anstata\u016digi", "Next": "Posta", "Whole words": "Tutaj vortoj", "Find and replace": "Trovi kaj anstata\u016digi", "Replace with": "Anstata\u016digi per", "Find": "Trovi", "Replace all": "Anstata\u016digi\u0109ion", "Match case": "Sekvi usklecon", "Prev": "Anta\u016da", "Spellcheck": "Literumu", "Finish": "Finu", "Ignore all": "Ignoru \u0109ion", "Ignore": "Ignoru", "Add to Dictionary": "Aldonu al vortaro", "Insert row before": "Enmetu vicon anta\u016d", "Rows": "Vicoj", "Height": "Alto", "Paste row after": "Engluu vicon poste", "Alignment": "Aligo", "Border color": "Lima koloro", "Column group": "Kolumna grupo", "Row": "Vico", "Insert column before": "Enmetu kolumnon anta\u016d", "Split cell": "Disdividu \u0109elon", "Cell padding": "\u0108elmar\u011denoj", "Cell spacing": "\u0108elspacoj", "Row type": "Vica tipo", "Insert table": "Enmetu tabelon", "Body": "Korpo", "Caption": "Cita\u0135o", "Footer": "Piedo", "Delete row": "Forigu vicon", "Paste row before": "Engluu vicon anta\u016d", "Scope": "Amplekso", "Delete table": "Forigu tabelon", "H Align": "H aligo", "Top": "Supro", "Header cell": "\u0108apa \u0109elo", "Column": "Kolumno", "Row group": "Vica grupo", "Cell": "\u0108elo", "Middle": "Mezo", "Cell type": "\u0108ela tipo", "Copy row": "Kopiu vicon", "Row properties": "Vicaj ecoj", "Table properties": "Tabelaj ecoj", "Bottom": "Subo", "V Align": "V aligo", "Header": "\u0108apo", "Right": "Dekstro", "Insert column after": "Enmetu kolumnon poste", "Cols": "Kolumonoj", "Insert row after": "Enmetu vicon poste", "Width": "Lar\u011do", "Cell properties": "\u0108elaj ecoj", "Left": "Maldekstro", "Cut row": "Eltran\u0109u vicon", "Delete column": "Forigu kolumnon", "Center": "Centro", "Merge cells": "Kunigu \u0109elojn", "Insert template": "Enmetu \u015dablonon", "Templates": "\u015cablonoj", "Background color": "Fona koloro", "Custom...": "Propra...", "Custom color": "Propra koloro", "No color": "Neniu koloro", "Text color": "Teksta koloro", "Show blocks": "Montru blokojn", "Show invisible characters": "Montru nevideblajn karaktrojn", "Words: {0}": "Vortoj: {0}", "Insert": "Enmeti", "File": "Dokumento", "Edit": "Redakti", "Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Ri\u0109teksta Areo. Premu ALT-F9 por menuo. Premu ALT-F10 por menuejo. Premu ALT-0 por helpo", "Tools": "Iloj", "View": "Vidi", "Table": "Tabelo", "Format": "Aspektigi" }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/tinymce/langs/es.js ================================================ tinymce.addI18n('es',{ "Redo": "Rehacer", "Undo": "Deshacer", "Cut": "Cortar", "Copy": "Copiar", "Paste": "Pegar", "Select all": "Seleccionar todo", "New document": "Nuevo documento", "Ok": "Ok", "Cancel": "Cancelar", "Visual aids": "Ayudas visuales", "Bold": "Negrita", "Italic": "Cursiva", "Underline": "Subrayado", "Strikethrough": "Tachado", "Superscript": "Super\u00edndice", "Subscript": "Sub\u00edndice", "Clear formatting": "Limpiar formato", "Align left": "Alinear a la izquierda", "Align center": "Alinear al centro", "Align right": "Alinear a la derecha", "Justify": "Justificar", "Bullet list": "Lista de vi\u00f1etas", "Numbered list": "Lista numerada", "Decrease indent": "Disminuir sangr\u00eda", "Increase indent": "Incrementar sangr\u00eda", "Close": "Cerrar", "Formats": "Formatos", "Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Su navegador no es compatible con el acceso directo al portapapeles. Use las teclas Crtl+X\/C\/V de su teclado.", "Headers": "Encabezados", "Header 1": "Encabezado 1", "Header 2": "Encabezado 2", "Header 3": "Encabezado 3", "Header 4": "Encabezado 4", "Header 5": "Encabezado 5", "Header 6": "Encabezado 6", "Headings": "Encabezados", "Heading 1": "Encabezado 1", "Heading 2": "Encabezado 2", "Heading 3": "Encabezado 3", "Heading 4": "Encabezado 4", "Heading 5": "Encabezado 5", "Heading 6": "Encabezado 6", "Preformatted": "Con formato previo", "Div": "Div", "Pre": "Pre", "Code": "C\u00f3digo", "Paragraph": "P\u00e1rrafo", "Blockquote": "Blockquote", "Inline": "Alineado", "Blocks": "Bloques", "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Pegar est\u00e1 ahora en modo de texto plano. El contenido se pegar\u00e1 como texto plano hasta que desactive esta opci\u00f3n.", "Fonts": "Fuentes", "Font Sizes": "Tama\u00f1os de fuente", "Class": "Clase", "Browse for an image": "Buscar una imagen", "OR": "OR", "Drop an image here": "Arrastre una imagen aqu\u00ed", "Upload": "Cargar", "Block": "Bloque", "Align": "Alinear", "Default": "Por defecto", "Circle": "C\u00edrculo", "Disc": "Disco", "Square": "Cuadrado", "Lower Alpha": "Inferior Alfa", "Lower Greek": "Inferior Griega", "Lower Roman": "Inferior Romana", "Upper Alpha": "Superior Alfa", "Upper Roman": "Superior Romana", "Anchor...": "Anclaje...", "Name": "Nombre", "Id": "Id", "Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Deber\u00eda comenzar por una letra, seguida solo de letras, n\u00fameros, guiones, puntos, dos puntos o guiones bajos.", "You have unsaved changes are you sure you want to navigate away?": "Tiene cambios sin guardar. \u00bfEst\u00e1 seguro de que quiere salir?", "Restore last draft": "Restaurar el \u00faltimo borrador", "Special character...": "Car\u00e1cter especial...", "Source code": "C\u00f3digo fuente", "Insert\/Edit code sample": "Insertar\/editar c\u00f3digo de prueba", "Language": "Idioma", "Code sample...": "Ejemplo de c\u00f3digo...", "Color Picker": "Selector de colores", "R": "R", "G": "V", "B": "A", "Left to right": "De izquierda a derecha", "Right to left": "De derecha a izquierda", "Emoticons...": "Emoticones...", "Metadata and Document Properties": "Metadatos y propiedades del documento", "Title": "T\u00edtulo", "Keywords": "Palabras clave", "Description": "Descripci\u00f3n", "Robots": "Robots", "Author": "Autor", "Encoding": "Codificaci\u00f3n", "Fullscreen": "Pantalla completa", "Action": "Acci\u00f3n", "Shortcut": "Atajo", "Help": "Ayuda", "Address": "Direcci\u00f3n", "Focus to menubar": "Enfocar la barra del men\u00fa", "Focus to toolbar": "Enfocar la barra de herramientas", "Focus to element path": "Enfocar la ruta del elemento", "Focus to contextual toolbar": "Enfocar la barra de herramientas contextual", "Insert link (if link plugin activated)": "Insertar enlace (si el complemento de enlace est\u00e1 activado)", "Save (if save plugin activated)": "Guardar (si el componente de salvar est\u00e1 activado)", "Find (if searchreplace plugin activated)": "Buscar (si el complemento buscar-remplazar est\u00e1 activado)", "Plugins installed ({0}):": "Plugins instalados ({0}):", "Premium plugins:": "Complementos premium:", "Learn more...": "Aprende m\u00e1s...", "You are using {0}": "Estas usando {0}", "Plugins": "Complementos", "Handy Shortcuts": "Accesos directos", "Horizontal line": "L\u00ednea horizontal", "Insert\/edit image": "Insertar\/editar imagen", "Image description": "Descripci\u00f3n de la imagen", "Source": "Enlace", "Dimensions": "Dimensiones", "Constrain proportions": "Restringir proporciones", "General": "General", "Advanced": "Avanzado", "Style": "Estilo", "Vertical space": "Espacio vertical", "Horizontal space": "Espacio horizontal", "Border": "Borde", "Insert image": "Insertar imagen", "Image...": "Imagen...", "Image list": "Lista de im\u00e1genes", "Rotate counterclockwise": "Girar a la izquierda", "Rotate clockwise": "Girar a la derecha", "Flip vertically": "Invertir verticalmente", "Flip horizontally": "Invertir horizontalmente", "Edit image": "Editar imagen", "Image options": "Opciones de imagen", "Zoom in": "Acercar", "Zoom out": "Alejar", "Crop": "Recortar", "Resize": "Redimensionar", "Orientation": "Orientaci\u00f3n", "Brightness": "Brillo", "Sharpen": "Forma", "Contrast": "Contraste", "Color levels": "Niveles de color", "Gamma": "Gamma", "Invert": "Invertir", "Apply": "Aplicar", "Back": "Atr\u00e1s", "Insert date\/time": "Insertar fecha\/hora", "Date\/time": "Fecha\/hora", "Insert\/Edit Link": "Insertar\/editar enlace", "Insert\/edit link": "Insertar\/editar enlace", "Text to display": "Texto para mostrar", "Url": "URL", "Open link in...": "Abrir enlace en...", "Current window": "Ventana actual", "None": "Ninguno", "New window": "Nueva ventana", "Remove link": "Quitar enlace", "Anchors": "Anclas", "Link...": "Enlace...", "Paste or type a link": "Pega o introduce un enlace", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "El enlace que has introducido no parece ser una direcci\u00f3n de correo electr\u00f3nico. Quieres a\u00f1adir el prefijo necesario mailto: ?", "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "El enlace que has introducido no parece ser una enlace externo. Quieres a\u00f1adir el prefijo necesario http:\/\/ ?", "Link list": "Lista de enlaces", "Insert video": "Insertar video", "Insert\/edit video": "Insertar\/editar video", "Insert\/edit media": "Insertar\/editar medio", "Alternative source": "Enlace alternativo", "Alternative source URL": "Origen de URL alternativo", "Media poster (Image URL)": "P\u00f3ster de medio (URL de imagen)", "Paste your embed code below:": "Pega tu c\u00f3digo embebido debajo", "Embed": "Incrustado", "Media...": "Medios...", "Nonbreaking space": "Espacio fijo", "Page break": "Salto de p\u00e1gina", "Paste as text": "Pegar como texto", "Preview": "Previsualizar", "Print...": "Imprimir...", "Save": "Guardar", "Find": "Buscar", "Replace with": "Reemplazar con", "Replace": "Reemplazar", "Replace all": "Reemplazar todo", "Previous": "Anterior", "Next": "Siguiente", "Find and replace...": "Buscar y reemplazar...", "Could not find the specified string.": "No se encuentra la cadena de texto especificada", "Match case": "Coincidencia exacta", "Find whole words only": "Solo palabras completas", "Spell check": "Revisar ortograf\u00eda", "Ignore": "Ignorar", "Ignore all": "Ignorar todos", "Finish": "Finalizar", "Add to Dictionary": "A\u00f1adir al Diccionario", "Insert table": "Insertar tabla", "Table properties": "Propiedades de la tabla", "Delete table": "Eliminar tabla", "Cell": "Celda", "Row": "Fila", "Column": "Columna", "Cell properties": "Propiedades de la celda", "Merge cells": "Combinar celdas", "Split cell": "Dividir celdas", "Insert row before": "Insertar fila antes", "Insert row after": "Insertar fila despu\u00e9s ", "Delete row": "Eliminar fila", "Row properties": "Propiedades de la fila", "Cut row": "Cortar fila", "Copy row": "Copiar fila", "Paste row before": "Pegar la fila antes", "Paste row after": "Pegar la fila despu\u00e9s", "Insert column before": "Insertar columna antes", "Insert column after": "Insertar columna despu\u00e9s", "Delete column": "Eliminar columna", "Cols": "Columnas", "Rows": "Filas", "Width": "Ancho", "Height": "Alto", "Cell spacing": "Espacio entre celdas", "Cell padding": "Relleno de celda", "Show caption": "Mostrar t\u00edtulo", "Left": "Izquierda", "Center": "Centrado", "Right": "Derecha", "Cell type": "Tipo de celda", "Scope": "\u00c1mbito", "Alignment": "Alineaci\u00f3n", "H Align": "Alineamiento Horizontal", "V Align": "Alineamiento Vertical", "Top": "Arriba", "Middle": "Centro", "Bottom": "Abajo", "Header cell": "Celda de la cebecera", "Row group": "Grupo de filas", "Column group": "Grupo de columnas", "Row type": "Tipo de fila", "Header": "Cabecera", "Body": "Cuerpo", "Footer": "Pie de p\u00e1gina", "Border color": "Color del borde", "Insert template...": "Insertar plantilla...", "Templates": "Plantillas", "Template": "Plantilla", "Text color": "Color del texto", "Background color": "Color de fondo", "Custom...": "Personalizar...", "Custom color": "Color personalizado", "No color": "Sin color", "Remove color": "Quitar color", "Table of Contents": "Tabla de contenidos", "Show blocks": "Mostrar bloques", "Show invisible characters": "Mostrar caracteres invisibles", "Word count": "Contar palabras", "Count": "Recuento", "Document": "Documento", "Selection": "Selecci\u00f3n", "Words": "Palabras", "Words: {0}": "Palabras: {0}", "{0} words": "{0} palabras", "File": "Archivo", "Edit": "Editar", "Insert": "Insertar", "View": "Ver", "Format": "Formato", "Table": "Tabla", "Tools": "Herramientas", "Powered by {0}": "Desarrollado por {0}", "Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u00c1rea de texto enriquecido. Pulse ALT-F9 para el menu. Pulse ALT-F10 para la barra de herramientas. Pulse ALT-0 para ayuda", "Image title": "Titulo de imagen", "Border width": "Ancho de borde", "Border style": "Estilo de borde", "Error": "Error", "Warn": "Advertencia", "Valid": "V\u00e1lido", "To open the popup, press Shift+Enter": "Para abrir el elemento emergente, pulse May\u00fas+Intro", "Rich Text Area. Press ALT-0 for help.": "\u00c1rea de texto enriquecido. Pulse ALT-0 para abrir la ayuda.", "System Font": "Fuente de sistema", "Failed to upload image: {0}": "Fallo al cargar imagen: {0}", "Failed to load plugin: {0} from url {1}": "Fallo al cargar complemento: {0} desde URL {1}", "Failed to load plugin url: {0}": "Fallo al cargar URL del complemento: {0}", "Failed to initialize plugin: {0}": "Fallo al iniciar el complemento: {0}", "example": "ejemplo", "Search": "Buscar", "All": "Todo", "Currency": "Divisa", "Text": "Texto", "Quotations": "Comillas", "Mathematical": "S\u00edmbolo matem\u00e1tico", "Extended Latin": "Latino extendido A", "Symbols": "S\u00edmbolos", "Arrows": "Flechas", "User Defined": "Definido por el usuario", "dollar sign": "signo de d\u00f3lar", "currency sign": "signo de divisa", "euro-currency sign": "signo de euro", "colon sign": "signo de dos puntos", "cruzeiro sign": "signo de cruceiro", "french franc sign": "signo de franco franc\u00e9s", "lira sign": "signo de lira", "mill sign": "signo de mill", "naira sign": "signo de naira", "peseta sign": "signo de peseta", "rupee sign": "signo de rupia", "won sign": "signo de won", "new sheqel sign": "signo de nuevo s\u00e9quel", "dong sign": "signo de dong", "kip sign": "signo de kip", "tugrik sign": "signo de tugrik", "drachma sign": "signo de dracma", "german penny symbol": "signo de penique alem\u00e1n", "peso sign": "signo de peso", "guarani sign": "signo de guaran\u00ed", "austral sign": "signo de austral", "hryvnia sign": "signo de grivna", "cedi sign": "signo de cedi", "livre tournois sign": "signo de libra tornesa", "spesmilo sign": "signo de spesmilo", "tenge sign": "signo de tenge", "indian rupee sign": "signo de rupia india", "turkish lira sign": "signo de lira turca", "nordic mark sign": "signo de marco n\u00f3rdico", "manat sign": "signo de manat", "ruble sign": "signo de rublo", "yen character": "car\u00e1cter de yen", "yuan character": "car\u00e1cter de yuan", "yuan character, in hong kong and taiwan": "car\u00e1cter de yuan en Hong Kong y Taiw\u00e1n", "yen\/yuan character variant one": "Variante uno de car\u00e1cter de yen\/yuan", "Loading emoticons...": "Cargando emoticonos...", "Could not load emoticons": "No se han podido cargar los emoticonos", "People": "Personas", "Animals and Nature": "Animales y naturaleza", "Food and Drink": "Comida y bebida", "Activity": "Actividad", "Travel and Places": "Viajes y lugares", "Objects": "Objetos", "Flags": "Banderas", "Characters": "Caracteres", "Characters (no spaces)": "Caracteres (sin espacios)", "{0} characters": "{0} caracteres", "Error: Form submit field collision.": "Error: Colisi\u00f3n de campo al enviar formulario.", "Error: No form element found.": "Error: No se encuentra ning\u00fan elemento de formulario.", "Update": "Actualizar", "Color swatch": "Muestrario de colores", "Turquoise": "Turquesa", "Green": "Verde", "Blue": "Azul", "Purple": "P\u00farpura", "Navy Blue": "Azul marino", "Dark Turquoise": "Turquesa oscuro", "Dark Green": "Verde oscuro", "Medium Blue": "Azul medio", "Medium Purple": "P\u00farpura medio", "Midnight Blue": "Azul medio", "Yellow": "Amarillo", "Orange": "Naranja", "Red": "Rojo", "Light Gray": "Gris claro", "Gray": "Gris", "Dark Yellow": "Amarillo oscuro", "Dark Orange": "Naranja oscuro", "Dark Red": "Rojo oscuro", "Medium Gray": "Gris medio", "Dark Gray": "Gris oscuro", "Light Green": "Verde claro", "Light Yellow": "Amarillo claro", "Light Red": "Rojo claro", "Light Purple": "Morado claro", "Light Blue": "Azul claro", "Dark Purple": "Morado oscuro", "Dark Blue": "Azul oscuro", "Black": "Negro", "White": "Blanco", "Switch to or from fullscreen mode": "Activar o desactivar modo pantalla completa", "Open help dialog": "Abrir di\u00e1logo de ayuda", "history": "historial", "styles": "estilos", "formatting": "formato", "alignment": "alineaci\u00f3n", "indentation": "sangr\u00eda", "permanent pen": "bol\u00edgrafo permanente", "comments": "comentarios", "Format Painter": "Copiar formato", "Insert\/edit iframe": "Insertar\/editar iframe", "Capitalization": "Uso de may\u00fasculas", "lowercase": "min\u00fasculas", "UPPERCASE": "MAY\u00daSCULAS", "Title Case": "Tipo T\u00edtulo", "Permanent Pen Properties": "Propiedades del bol\u00edgrafo permanente", "Permanent pen properties...": "Propiedades del bol\u00edgrafo permanente...", "Font": "Fuente", "Size": "Tama\u00f1o", "More...": "M\u00e1s...", "Spellcheck Language": "Corrector", "Select...": "Seleccionar...", "Preferences": "Preferencias", "Yes": "S\u00ed", "No": "No", "Keyboard Navigation": "Navegaci\u00f3n con el teclado", "Version": "Versi\u00f3n", "Anchor": "Ancla", "Special character": "Car\u00e1cter especial", "Code sample": "Ejemplo de c\u00f3digo", "Color": "Color", "Emoticons": "Emoticonos", "Document properties": "Propiedades del documento", "Image": "Imagen", "Insert link": "Insertar enlace", "Target": "Destino", "Link": "Enlace", "Poster": "Miniatura", "Media": "Media", "Print": "Imprimir", "Prev": "Anterior", "Find and replace": "Buscar y reemplazar", "Whole words": "Palabras completas", "Spellcheck": "Corrector ortogr\u00e1fico", "Caption": "Subt\u00edtulo", "Insert template": "Insertar plantilla" }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/tinymce/langs/es_ES.js ================================================ tinymce.addI18n('es_ES',{ "Redo": "Rehacer", "Undo": "Deshacer", "Cut": "Cortar", "Copy": "Copiar", "Paste": "Pegar", "Select all": "Seleccionar todo", "New document": "Nuevo documento", "Ok": "Ok", "Cancel": "Cancelar", "Visual aids": "Ayudas visuales", "Bold": "Negrita", "Italic": "Cursiva", "Underline": "Subrayado", "Strikethrough": "Tachado", "Superscript": "Super\u00edndice", "Subscript": "Sub\u00edndice", "Clear formatting": "Limpiar formato", "Align left": "Alinear a la izquierda", "Align center": "Alinear al centro", "Align right": "Alinear a la derecha", "Justify": "Justificar", "Bullet list": "Lista de vi\u00f1etas", "Numbered list": "Lista numerada", "Decrease indent": "Disminuir sangr\u00eda", "Increase indent": "Incrementar sangr\u00eda", "Close": "Cerrar", "Formats": "Formatos", "Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Su navegador no es compatible con el acceso directo al portapapeles. Use las teclas Crtl+X\/C\/V de su teclado.", "Headers": "Encabezados", "Header 1": "Encabezado 1", "Header 2": "Encabezado 2", "Header 3": "Encabezado 3", "Header 4": "Encabezado 4", "Header 5": "Encabezado 5", "Header 6": "Encabezado 6", "Headings": "Encabezados", "Heading 1": "Encabezado 1", "Heading 2": "Encabezado 2", "Heading 3": "Encabezado 3", "Heading 4": "Encabezado 4", "Heading 5": "Encabezado 5", "Heading 6": "Encabezado 6", "Preformatted": "Con formato previo", "Div": "Div", "Pre": "Pre", "Code": "C\u00f3digo", "Paragraph": "P\u00e1rrafo", "Blockquote": "Blockquote", "Inline": "Alineado", "Blocks": "Bloques", "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Pegar est\u00e1 ahora en modo de texto sin formato. El contenido se pegar\u00e1 ahora como texto sin formato hasta que desactive esta opci\u00f3n.", "Fonts": "Fuentes", "Font Sizes": "Tama\u00f1os de fuente", "Class": "Clase", "Browse for an image": "Buscar una imagen", "OR": "O", "Drop an image here": "Arrastre una imagen aqu\u00ed", "Upload": "Cargar", "Block": "Bloque", "Align": "Alinear", "Default": "Por defecto", "Circle": "C\u00edrculo", "Disc": "Disco", "Square": "Cuadrado", "Lower Alpha": "Letras min\u00fasculas", "Lower Greek": "Griego en min\u00fasculas", "Lower Roman": "Romano en min\u00fasculas", "Upper Alpha": "Letras may\u00fasculas", "Upper Roman": "Romano en may\u00fasculas", "Anchor...": "Anclaje...", "Name": "Nombre", "Id": "Id.", "Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "El Id. debe comenzar por una letra, seguida solo de letras, n\u00fameros, guiones, puntos, dos puntos o guiones bajos.", "You have unsaved changes are you sure you want to navigate away?": "Tiene cambios sin guardar. \u00bfEst\u00e1 seguro de que quiere salir?", "Restore last draft": "Restaurar el \u00faltimo borrador", "Special characters...": "Caracteres especiales...", "Source code": "C\u00f3digo fuente", "Insert\/Edit code sample": "Insertar\/editar ejemplo de c\u00f3digo", "Language": "Idioma", "Code sample...": "Ejemplo de c\u00f3digo...", "Color Picker": "Selector de colores", "R": "R", "G": "G", "B": "B", "Left to right": "Izquierda a derecha", "Right to left": "Derecha a izquierda", "Emoticons...": "Emoticones...", "Metadata and Document Properties": "Metadatos y propiedades del documento", "Title": "T\u00edtulo", "Keywords": "Palabras clave", "Description": "Descripci\u00f3n", "Robots": "Robots", "Author": "Autor", "Encoding": "Codificaci\u00f3n", "Fullscreen": "Pantalla completa", "Action": "Acci\u00f3n", "Shortcut": "Acceso directo", "Help": "Ayuda", "Address": "Direcci\u00f3n", "Focus to menubar": "Enfocar la barra del men\u00fa", "Focus to toolbar": "Enfocar la barra de herramientas", "Focus to element path": "Enfocar la ruta del elemento", "Focus to contextual toolbar": "Enfocar la barra de herramientas contextual", "Insert link (if link plugin activated)": "Insertar enlace (si el complemento de enlace est\u00e1 activado)", "Save (if save plugin activated)": "Guardar (si el complemento de guardar est\u00e1 activado)", "Find (if searchreplace plugin activated)": "Buscar (si el complemento buscar-reemplazar est\u00e1 activado)", "Plugins installed ({0}):": "Complementos instalados ({0}):", "Premium plugins:": "Complementos premium:", "Learn more...": "M\u00e1s informaci\u00f3n...", "You are using {0}": "Est\u00e1 usando {0}", "Plugins": "Complementos", "Handy Shortcuts": "Accesos pr\u00e1cticos", "Horizontal line": "L\u00ednea horizontal", "Insert\/edit image": "Insertar\/editar imagen", "Image description": "Descripci\u00f3n de la imagen", "Source": "C\u00f3digo fuente", "Dimensions": "Dimensiones", "Constrain proportions": "Restringir proporciones", "General": "General", "Advanced": "Avanzado", "Style": "Estilo", "Vertical space": "Espacio vertical", "Horizontal space": "Espacio horizontal", "Border": "Borde", "Insert image": "Insertar imagen", "Image...": "Imagen...", "Image list": "Lista de im\u00e1genes", "Rotate counterclockwise": "Girar a la izquierda", "Rotate clockwise": "Girar a la derecha", "Flip vertically": "Invertir verticalmente", "Flip horizontally": "Invertir horizontalmente", "Edit image": "Editar imagen", "Image options": "Opciones de imagen", "Zoom in": "Acercar", "Zoom out": "Alejar", "Crop": "Recortar", "Resize": "Redimensionar", "Orientation": "Orientaci\u00f3n", "Brightness": "Brillo", "Sharpen": "Enfocar", "Contrast": "Contraste", "Color levels": "Niveles de color", "Gamma": "Gama", "Invert": "Invertir", "Apply": "Aplicar", "Back": "Atr\u00e1s", "Insert date\/time": "Insertar fecha\/hora", "Date\/time": "Fecha\/hora", "Insert\/Edit Link": "Insertar\/editar enlace", "Insert\/edit link": "Insertar\/editar enlace", "Text to display": "Texto que mostrar", "Url": "URL", "Open link in...": "Abrir enlace en...", "Current window": "Ventana actual", "None": "Ninguno", "New window": "Nueva ventana", "Remove link": "Quitar enlace", "Anchors": "Anclajes", "Link...": "Enlace...", "Paste or type a link": "Pegue o escriba un enlace", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "La URL que ha introducido parece ser una direcci\u00f3n de correo electr\u00f3nico. \u00bfQuiere a\u00f1adir el prefijo necesario mailto:?", "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "La URL que ha introducido parece ser un enlace externo. \u00bfQuiere a\u00f1adir el prefijo necesario http:\/\/?", "Link list": "Lista de enlaces", "Insert video": "Insertar v\u00eddeo", "Insert\/edit video": "Insertar\/editar v\u00eddeo", "Insert\/edit media": "Insertar\/editar medio", "Alternative source": "Enlace alternativo", "Alternative source URL": "Origen de URL alternativo", "Media poster (Image URL)": "P\u00f3ster de medio (URL de imagen)", "Paste your embed code below:": "Pegue el c\u00f3digo para insertar a continuaci\u00f3n:", "Embed": "Insertar", "Media...": "Medios...", "Nonbreaking space": "Espacio de no separaci\u00f3n", "Page break": "Salto de p\u00e1gina", "Paste as text": "Pegar como texto", "Preview": "Previsualizar", "Print...": "Imprimir...", "Save": "Guardar", "Find": "Buscar", "Replace with": "Reemplazar por", "Replace": "Reemplazar", "Replace all": "Reemplazar todo", "Previous": "Anterior", "Next": "Siguiente", "Find and replace...": "Buscar y reemplazar...", "Could not find the specified string.": "No se encuentra la cadena especificada.", "Match case": "Coincidir may\u00fasculas y min\u00fasculas", "Find whole words only": "Solo palabras completas", "Spell check": "Revisar ortograf\u00eda", "Ignore": "Ignorar", "Ignore all": "Ignorar todo", "Finish": "Fin\u00e9s", "Add to Dictionary": "A\u00f1adir al Diccionario", "Insert table": "Insertar tabla", "Table properties": "Propiedades de la tabla", "Delete table": "Eliminar tabla", "Cell": "Celda", "Row": "Fila", "Column": "Columna", "Cell properties": "Propiedades de la celda", "Merge cells": "Combinar celdas", "Split cell": "Dividir celda", "Insert row before": "Insertar fila antes", "Insert row after": "Insertar fila despu\u00e9s", "Delete row": "Eliminar fila", "Row properties": "Propiedades de la fila", "Cut row": "Cortar fila", "Copy row": "Copiar fila", "Paste row before": "Pegar la fila antes", "Paste row after": "Pegar la fila despu\u00e9s", "Insert column before": "Insertar columna antes", "Insert column after": "Insertar columna despu\u00e9s", "Delete column": "Eliminar columna", "Cols": "Columnas", "Rows": "Filas", "Width": "Ancho", "Height": "Altura", "Cell spacing": "Espacio entre celdas", "Cell padding": "Relleno de celda", "Show caption": "Mostrar t\u00edtulo", "Left": "Izquierda", "Center": "Centro", "Right": "Derecha", "Cell type": "Tipo de celda", "Scope": "\u00c1mbito", "Alignment": "Alineaci\u00f3n", "H Align": "Alineaci\u00f3n horizontal", "V Align": "Alineaci\u00f3n vertical", "Top": "Superior", "Middle": "Central", "Bottom": "Inferior", "Header cell": "Celda de encabezado", "Row group": "Grupo de filas", "Column group": "Grupo de columnas", "Row type": "Tipo de fila", "Header": "Encabezado", "Body": "Cuerpo", "Footer": "Pie de p\u00e1gina", "Border color": "Color de borde", "Insert template...": "Insertar plantilla...", "Templates": "Plantillas", "Template": "Plantilla", "Text color": "Color del texto", "Background color": "Color de fondo", "Custom...": "Personalizado...", "Custom color": "Color personalizado", "No color": "Sin color", "Remove color": "Quitar color", "Table of Contents": "Tabla de contenido", "Show blocks": "Mostrar bloques", "Show invisible characters": "Mostrar caracteres invisibles", "Word count": "Contar palabras", "Words: {0}": "Palabras: {0}", "{0} words": "{0} palabras", "File": "Archivo", "Edit": "Editar", "Insert": "Insertar", "View": "Ver", "Format": "Formato", "Table": "Tabla", "Tools": "Herramientas", "Powered by {0}": "Con tecnolog\u00eda de {0}", "Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u00c1rea de texto enriquecido. Pulse ALT-F9 para el men\u00fa. Pulse ALT-F10 para la barra de herramientas. Pulse ALT-0 para la ayuda.", "Image title": "Titulo de imagen", "Border width": "Ancho de borde", "Border style": "Estilo de borde", "Error": "Error", "Warn": "Advertencia", "Valid": "V\u00e1lido", "To open the popup, press Shift+Enter": "Para abrir el elemento emergente, pulse May\u00fas+Intro", "Rich Text Area. Press ALT-0 for help.": "\u00c1rea de texto enriquecido. Pulse ALT-0 para abrir la ayuda.", "System Font": "Fuente de sistema", "Failed to upload image: {0}": "Fallo al cargar imagen: {0}", "Failed to load plugin: {0} from url {1}": "Fallo al cargar complemento: {0} desde URL {1}", "Failed to load plugin url: {0}": "Fallo al cargar URL del complemento: {0}", "Failed to initialize plugin: {0}": "Fallo al iniciar el complemento: {0}", "example": "ejemplo", "Search": "Buscar", "All": "Todo", "Currency": "Divisa", "Text": "Texto", "Quotations": "Comillas", "Mathematical": "S\u00edmbolo matem\u00e1tico", "Extended Latin": "Latino extendido A", "Symbols": "S\u00edmbolos", "Arrows": "Flechas", "User Defined": "Definido por el usuario", "dollar sign": "signo de d\u00f3lar", "currency sign": "signo de divisa", "euro-currency sign": "signo de euro", "colon sign": "signo de dos puntos", "cruzeiro sign": "signo de cruceiro", "french franc sign": "signo de franco franc\u00e9s", "lira sign": "signo de lira", "mill sign": "signo de mill", "naira sign": "signo de naira", "peseta sign": "signo de peseta", "rupee sign": "signo de rupia", "won sign": "signo de won", "new sheqel sign": "signo de nuevo s\u00e9quel", "dong sign": "signo de dong", "kip sign": "signo de kip", "tugrik sign": "signo de tugrik", "drachma sign": "signo de dracma", "german penny symbol": "signo de penique alem\u00e1n", "peso sign": "signo de peso", "guarani sign": "signo de guaran\u00ed", "austral sign": "signo de austral", "hryvnia sign": "signo de grivna", "cedi sign": "signo de cedi", "livre tournois sign": "signo de libra tornesa", "spesmilo sign": "signo de spesmilo", "tenge sign": "signo de tenge", "indian rupee sign": "signo de rupia india", "turkish lira sign": "signo de lira turca", "nordic mark sign": "signo de marco n\u00f3rdico", "manat sign": "signo de manat", "ruble sign": "signo de rublo", "yen character": "car\u00e1cter de yen", "yuan character": "car\u00e1cter de yuan", "yuan character, in hong kong and taiwan": "car\u00e1cter de yuan en Hong Kong y Taiw\u00e1n", "yen\/yuan character variant one": "Variante uno de car\u00e1cter de yen\/yuan", "Loading emoticons...": "Cargando emoticonos...", "Could not load emoticons": "No se han podido cargar los emoticonos", "People": "Personas", "Animals and Nature": "Animales y naturaleza", "Food and Drink": "Comida y bebida", "Activity": "Actividad", "Travel and Places": "Viajes y lugares", "Objects": "Objetos", "Flags": "Banderas", "Characters": "Caracteres", "Characters (no spaces)": "Caracteres (sin espacios)", "Error: Form submit field collision.": "Error: Colisi\u00f3n de campo al enviar formulario.", "Error: No form element found.": "Error: No se encuentra ning\u00fan elemento de formulario.", "Update": "Actualizar", "Color swatch": "Muestrario de colores", "Turquoise": "Turquesa", "Green": "Verde", "Blue": "Azul", "Purple": "P\u00farpura", "Navy Blue": "Azul marino", "Dark Turquoise": "Turquesa oscuro", "Dark Green": "Verde oscuro", "Medium Blue": "Azul medio", "Medium Purple": "P\u00farpura medio", "Midnight Blue": "Azul medio", "Yellow": "Amarillo", "Orange": "Naranja", "Red": "Rojo", "Light Gray": "Gris claro", "Gray": "Gris", "Dark Yellow": "Amarillo oscuro", "Dark Orange": "Naranja oscuro", "Dark Red": "Rojo oscuro", "Medium Gray": "Gris medio", "Dark Gray": "Gris oscuro", "Black": "Negro", "White": "Blanco", "Switch to or from fullscreen mode": "Activar o desactivar modo pantalla completa", "Open help dialog": "Abrir di\u00e1logo de ayuda", "history": "historial", "styles": "estilos", "formatting": "formato", "alignment": "alineaci\u00f3n", "indentation": "sangr\u00eda", "permanent pen": "bol\u00edgrafo permanente", "comments": "comentarios" }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/tinymce/langs/es_MX.js ================================================ tinymce.addI18n('es_MX',{ "Redo": "Rehacer", "Undo": "Deshacer", "Cut": "Cortar", "Copy": "Copiar", "Paste": "Pegar", "Select all": "Seleccionar todo", "New document": "Nuevo documento", "Ok": "Aceptar", "Cancel": "Cancelar", "Visual aids": "Ayudas visuales", "Bold": "Negrita", "Italic": "Cursiva", "Underline": "Subrayado", "Strikethrough": "Tachado", "Superscript": "Super\u00edndice", "Subscript": "Sub\u00edndice", "Clear formatting": "Borrar formato", "Align left": "Alinear a la izquierda", "Align center": "Alinear al centro", "Align right": "Alinear a la derecha", "Justify": "Justificar", "Bullet list": "Lista de vi\u00f1etas", "Numbered list": "Lista numerada", "Decrease indent": "Reducir sangr\u00eda", "Increase indent": "Aumentar sangr\u00eda", "Close": "Cerrar", "Formats": "Formatos", "Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Su navegador no admite el acceso directo al portapapeles. Utilice los m\u00e9todos abreviados de teclado Ctrl+ X\/C\/V.", "Headers": "Encabezados", "Header 1": "Encabezado 1", "Header 2": "Encabezado 2", "Header 3": "Encabezado 3", "Header 4": "Encabezado 4", "Header 5": "Encabezado 5", "Header 6": "Encabezado 6", "Headings": "T\u00edtulos", "Heading 1": "T\u00edtulo 1", "Heading 2": "T\u00edtulo 2", "Heading 3": "T\u00edtulo 3", "Heading 4": "T\u00edtulo 4", "Heading 5": "T\u00edtulo 5", "Heading 6": "T\u00edtulo 6", "Preformatted": "Con formato previo", "Div": "Div", "Pre": "Pre", "Code": "C\u00f3digo", "Paragraph": "P\u00e1rrafo", "Blockquote": "Blockquote", "Inline": "En l\u00ednea", "Blocks": "Bloques", "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Se pegar\u00e1 en texto plano. El contenido se pegar\u00e1 como texto plano hasta que desactive esta opci\u00f3n.", "Fonts": "Fuentes", "Font Sizes": "Tama\u00f1os de fuente", "Class": "Clase", "Browse for an image": "Buscar una imagen", "OR": "O", "Drop an image here": "Soltar una imagen aqu\u00ed", "Upload": "Cargar", "Block": "Bloque", "Align": "Alinear", "Default": "Por defecto", "Circle": "Circulo", "Disc": "Disco", "Square": "Cuadro", "Lower Alpha": "Alfa min\u00fascula", "Lower Greek": "Griega min\u00fascula", "Lower Roman": "Romano min\u00fascula", "Upper Alpha": "Alfa may\u00fascula", "Upper Roman": "May\u00fascula Romana", "Anchor...": "Marcador...", "Name": "Nombre", "Id": "Identificador", "Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "El Identificador debe comenzar con una letra, seguido solo por letras, n\u00fameros, puntos, guiones medios o guiones bajos. ", "You have unsaved changes are you sure you want to navigate away?": "No se han guardado los cambios. \u00bfSeguro que desea abandonar la p\u00e1gina?", "Restore last draft": "Restaurar el \u00faltimo borrador", "Special character...": "Car\u00e1cter especial...", "Source code": "C\u00f3digo fuente", "Insert\/Edit code sample": "Insertar\/Editar c\u00f3digo muestra", "Language": "idioma", "Code sample...": "Ejemplo de c\u00f3digo...", "Color Picker": "Selector de colores", "R": "R", "G": "G", "B": "B", "Left to right": "Izquierda a derecha", "Right to left": "Derecha a Izquierda", "Emoticons...": "Emoticonos...", "Metadata and Document Properties": "Metadatos y propiedades del documento", "Title": "T\u00edtulo", "Keywords": "Palabras clave", "Description": "Descripci\u00f3n ", "Robots": "Robots", "Author": "Autor", "Encoding": "Codificaci\u00f3n", "Fullscreen": "Pantalla completa", "Action": "Acci\u00f3n", "Shortcut": "Atajo", "Help": "Ayuda", "Address": "Direcci\u00f3n", "Focus to menubar": "Enfocar en barra de menu", "Focus to toolbar": "Enfocar en barra de herramientas", "Focus to element path": "Enfocar ruta del elemento", "Focus to contextual toolbar": "Enfocar en barra de herramientas contextual", "Insert link (if link plugin activated)": "Insertar enlace (si enlace del plugin est\u00e1 activo)", "Save (if save plugin activated)": "Guardar (si el plugin guardar est\u00e1 activo)", "Find (if searchreplace plugin activated)": "Buscar (si el plugin buscar\/reemplazar est\u00e1 activo)", "Plugins installed ({0}):": "Plugins instalados ({0}):", "Premium plugins:": "Plugins premium:", "Learn more...": "Aprende m\u00e1s...", "You are using {0}": "est\u00e1s usando {0}", "Plugins": "Plugins", "Handy Shortcuts": "Atajos \u00fatiles", "Horizontal line": "L\u00ednea Horizontal", "Insert\/edit image": "Insertar\/editar imagen", "Image description": "Descripci\u00f3n de imagen", "Source": "Origen", "Dimensions": "Dimensiones", "Constrain proportions": "Restringir proporciones", "General": "General", "Advanced": "Avanzado", "Style": "Estilo", "Vertical space": "Espacio vertical", "Horizontal space": "Espacio horizontal", "Border": "Borde", "Insert image": "Insertar imagen", "Image...": "Imagen...", "Image list": "Lista de im\u00e1genes", "Rotate counterclockwise": "Rotar en sentido contrario a las manecillas", "Rotate clockwise": "Rotar en sentido de las manecillas", "Flip vertically": "Voltear verticalmente", "Flip horizontally": "Volter horizontalmente", "Edit image": "Editar imagen", "Image options": "Opciones de la imagen", "Zoom in": "Acercar", "Zoom out": "Alejar", "Crop": "Recortar", "Resize": "Cambiar tama\u00f1o", "Orientation": "Orientaci\u00f3n", "Brightness": "Brillo", "Sharpen": "Nitidez", "Contrast": "Contraste", "Color levels": "Niveles de Color", "Gamma": "Gamma", "Invert": "Invertir", "Apply": "Aplicar", "Back": "Regresar", "Insert date\/time": "Insertar fecha\/hora", "Date\/time": "Fecha\/hora", "Insert\/Edit Link": "Insertar\/editar v\u00ednculo", "Insert\/edit link": "Inserta\/editar enlace", "Text to display": "Texto a mostrar", "Url": "Url", "Open link in...": "Abrir v\u00ednculo en...", "Current window": "Ventana actual", "None": "Ninguno", "New window": "Nueva ventana", "Remove link": "Eliminar elnace", "Anchors": "Anclas", "Link...": "V\u00ednculo...", "Paste or type a link": "Pega o escribe un enlace", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "El URL que ha insertado tiene formato de correo electr\u00f3nico. \u00bfDesea agregar con prefijo \"mailto:\"?", "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "El URL que ha ingresado es un enlace externo. \u00bfDesea agregar el prefijo \"http:\/\/\"?", "Link list": "Lista de enlaces", "Insert video": "Insertar video", "Insert\/edit video": "Insertar\/editar video", "Insert\/edit media": "Insertar\/editar multimedia", "Alternative source": "Fuente alternativa", "Alternative source URL": "URL de origen alternativo", "Media poster (Image URL)": "P\u00f3ster multimedia (URL de la imagen)", "Paste your embed code below:": "Pegue su c\u00f3digo de inserci\u00f3n abajo:", "Embed": "Incrustar", "Media...": "Elemento multimedia...", "Nonbreaking space": "Espacio de no separaci\u00f3n", "Page break": "Salto de p\u00e1gina ", "Paste as text": "Copiar como texto", "Preview": "Vista previa ", "Print...": "Imprimir...", "Save": "Guardar", "Find": "Buscar", "Replace with": "Remplazar con", "Replace": "Remplazar", "Replace all": "Remplazar todo", "Previous": "Anterior", "Next": "Siguiente", "Find and replace...": "Buscar y reemplazar...", "Could not find the specified string.": "No se ha encontrado la cadena especificada.", "Match case": "Coincidencia", "Find whole words only": "Buscar solo palabras completas", "Spell check": "Corrector ortogr\u00e1fico", "Ignore": "Ignorar", "Ignore all": "Ignorar todo", "Finish": "Terminar", "Add to Dictionary": "Agregar al diccionario ", "Insert table": "Insertar tabla", "Table properties": "Propiedades de tabla", "Delete table": "Eliminar tabla", "Cell": "Celda", "Row": "Rengl\u00f3n ", "Column": "Columna", "Cell properties": "Propiedades de celda", "Merge cells": "Unir celdas", "Split cell": "Dividir celdas", "Insert row before": "Insertar rengl\u00f3n antes", "Insert row after": "Insertar rengl\u00f3n despu\u00e9s", "Delete row": "Eliminar rengl\u00f3n ", "Row properties": "Propiedades del rengl\u00f3n ", "Cut row": "Cortar renglon", "Copy row": "Copiar rengl\u00f3n ", "Paste row before": "Pegar rengl\u00f3n antes", "Paste row after": "Pegar rengl\u00f3n despu\u00e9s", "Insert column before": "Insertar columna antes", "Insert column after": "Insertar columna despu\u00e9s", "Delete column": "Eliminar columna", "Cols": "Columnas", "Rows": "Renglones ", "Width": "Ancho", "Height": "Alto", "Cell spacing": "Espacio entre celdas", "Cell padding": "Relleno de la celda", "Show caption": "Mostrar leyenda", "Left": "Izquierda", "Center": "Centro", "Right": "Derecha", "Cell type": "Tipo de celda", "Scope": "Alcance", "Alignment": "Alineaci\u00f3n ", "H Align": "Alineaci\u00f3n Horizontal", "V Align": "Alineaci\u00f3n Vertical", "Top": "Arriba", "Middle": "Centrado", "Bottom": "Abajo", "Header cell": "Celda de encabezado", "Row group": "Grupo de renglones", "Column group": "Grupo de columnas", "Row type": "Tipo de rengl\u00f3n ", "Header": "Encabezado", "Body": "Cuerpo", "Footer": "Pie", "Border color": "Color del borde", "Insert template...": "Insertar plantilla...", "Templates": "Plantilla", "Template": "Plantilla", "Text color": "Color de letra", "Background color": "Color de fondo", "Custom...": "Personalizar", "Custom color": "Perzonalizar color", "No color": "Sin color", "Remove color": "Eliminar color", "Table of Contents": "Tabla de Contenidos", "Show blocks": "Mostrar bloques", "Show invisible characters": "Mostrar caracteres invisibles", "Word count": "Contar palabras", "Count": "Recuento", "Document": "Documento", "Selection": "Selecci\u00f3n", "Words": "Palabras", "Words: {0}": "Palabras:{0}", "{0} words": "{0} palabras", "File": "Archivo", "Edit": "Editar", "Insert": "Insertar", "View": "Vistas", "Format": "Formato", "Table": "Tabla", "Tools": "Herramientas", "Powered by {0}": "Creado con {0}", "Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Presione dentro del \u00e1rea de texto ALT-F9 para invocar el men\u00fa, ALT-F10 para la barra de herramientas y ALT-0 para la ayuda.", "Image title": "T\u00edtulo de la imagen", "Border width": "Ancho del borde", "Border style": "Estilo del borde", "Error": "Error", "Warn": "Advertencia", "Valid": "V\u00e1lido", "To open the popup, press Shift+Enter": "Para abrir la ventana emergente, pulse May\u00fas+Intro", "Rich Text Area. Press ALT-0 for help.": "\u00c1rea de texto enriquecido. Pulse ALT-0 para obtener ayuda.", "System Font": "Fuente del sistema", "Failed to upload image: {0}": "Error al cargar la imagen: {0}", "Failed to load plugin: {0} from url {1}": "Error al cargar el complemento: {0} desde la url {1}", "Failed to load plugin url: {0}": "Error al cargar la url del complemento: {0}", "Failed to initialize plugin: {0}": "Error al inicializar el complemento: {0}", "example": "ejemplo", "Search": "Buscar", "All": "Todo", "Currency": "Moneda", "Text": "Texto", "Quotations": "Comillas", "Mathematical": "Matem\u00e1ticos", "Extended Latin": "Lat\u00edn extendido", "Symbols": "S\u00edmbolos", "Arrows": "Flechas", "User Defined": "Definido por el usuario", "dollar sign": "signo de d\u00f3lar", "currency sign": "signo de moneda", "euro-currency sign": "signo de euro", "colon sign": "signo del col\u00f3n", "cruzeiro sign": "signo del cruzeiro", "french franc sign": "signo del franco franc\u00e9s", "lira sign": "signo de la lira", "mill sign": "signo de mil", "naira sign": "signo del naira", "peseta sign": "signo de la peseta", "rupee sign": "signo de la rupia", "won sign": "signo del won", "new sheqel sign": "signo de nuevo shequel", "dong sign": "signo del dong", "kip sign": "signo del kip", "tugrik sign": "signo del tugrik", "drachma sign": "signo del dracma", "german penny symbol": "signo del penique alem\u00e1n", "peso sign": "signo del peso", "guarani sign": "signo del guaran\u00ed", "austral sign": "signo del austral", "hryvnia sign": "signo de hryvnia", "cedi sign": "signo de cedi", "livre tournois sign": "signo de livre tournois", "spesmilo sign": "signo de spesmilo", "tenge sign": "signo de tenge", "indian rupee sign": "signo de la rupia india", "turkish lira sign": "signo de la lira turca", "nordic mark sign": "signo del marco n\u00f3rdico", "manat sign": "signo de manat", "ruble sign": "signo de rublo", "yen character": "car\u00e1cter del yen", "yuan character": "car\u00e1cter del yuan", "yuan character, in hong kong and taiwan": "car\u00e1cter del yuan, en Hong Kong y Taiw\u00e1n", "yen\/yuan character variant one": "variante uno del car\u00e1cter del yen\/yuan", "Loading emoticons...": "Cargando emoticonos...", "Could not load emoticons": "No se pudieron cargar los emoticonos", "People": "Personas", "Animals and Nature": "Animales y naturaleza", "Food and Drink": "Comida y bebida", "Activity": "Actividad", "Travel and Places": "Viajes y lugares", "Objects": "Objetos", "Flags": "Banderas", "Characters": "Caracteres", "Characters (no spaces)": "Caracteres (sin espacios)", "{0} characters": "{0} caracteres", "Error: Form submit field collision.": "Error: colisi\u00f3n de campo env\u00edo de formulario.", "Error: No form element found.": "Error: no se encontr\u00f3 ning\u00fan elemento de formulario.", "Update": "Actualizar", "Color swatch": "Muestrario de colores", "Turquoise": "Turquesa", "Green": "Verde", "Blue": "Azul", "Purple": "Morado", "Navy Blue": "Azul marino", "Dark Turquoise": "Turquesa oscuro", "Dark Green": "Verde oscuro", "Medium Blue": "Azul medio", "Medium Purple": "Morado medio", "Midnight Blue": "Azul noche", "Yellow": "Amarillo", "Orange": "Anaranjado", "Red": "Rojo", "Light Gray": "Gris claro", "Gray": "Gris", "Dark Yellow": "Amarillo oscuro", "Dark Orange": "Anaranjado oscuro", "Dark Red": "Rojo oscuro", "Medium Gray": "Gris medio", "Dark Gray": "Gris oscuro", "Light Green": "Verde claro", "Light Yellow": "Amarillo claro", "Light Red": "Rojo claro", "Light Purple": "Morado claro", "Light Blue": "Azul claro", "Dark Purple": "Morado oscuro", "Dark Blue": "Azul oscuro", "Black": "Negro", "White": "Blanco", "Switch to or from fullscreen mode": "Cambiar a modo de pantalla completa o salir de \u00e9l", "Open help dialog": "Abrir di\u00e1logo de ayuda", "history": "historial", "styles": "estilos", "formatting": "formato", "alignment": "alineaci\u00f3n", "indentation": "sangr\u00eda", "permanent pen": "l\u00e1piz permanente", "comments": "comentarios", "Format Painter": "Copiar formato", "Insert\/edit iframe": "Insertar\/editar marco flotante", "Capitalization": "Uso de may\u00fasculas", "lowercase": "min\u00fascula", "UPPERCASE": "MAY\u00daSCULA", "Title Case": "Tipo t\u00edtulo", "Permanent Pen Properties": "Propiedades del l\u00e1piz permanente", "Permanent pen properties...": "Propiedades del l\u00e1piz permanente...", "Font": "Fuente", "Size": "Tama\u00f1o", "More...": "M\u00e1s...", "Spellcheck Language": "Idioma de la revisi\u00f3n ortogr\u00e1fica", "Select...": "Seleccionar...", "Preferences": "Preferencias", "Yes": "S\u00ed", "No": "No", "Keyboard Navigation": "Navegaci\u00f3n con el teclado", "Version": "Versi\u00f3n", "Anchor": "Anclar", "Special character": "Caracter especial", "Code sample": "C\u00f3digo muestra", "Color": "Color", "Emoticons": "Emoticones", "Document properties": "Propiedades del documento", "Image": "Imagen", "Insert link": "Insertar enlace", "Target": "Objetivo", "Link": "Enlace", "Poster": "Cartel", "Media": "Multimedia", "Print": "Imprimir", "Prev": "Anterior", "Find and replace": "Buscar y reemplazar", "Whole words": "Palabras completas", "Spellcheck": "Revisi\u00f3n ortogr\u00e1fica", "Caption": "Subt\u00edtulo", "Insert template": "Insertar plantilla" }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/tinymce/langs/et.js ================================================ tinymce.addI18n('et',{ "Redo": "Tee uuesti", "Undo": "V\u00f5ta tagasi", "Cut": "L\u00f5ika", "Copy": "Kopeeri", "Paste": "Kleebi", "Select all": "Vali k\u00f5ik", "New document": "Uus dokument", "Ok": "Ok", "Cancel": "Katkesta", "Visual aids": "N\u00e4itevahendid", "Bold": "Rasvane", "Italic": "Kaldkiri", "Underline": "Allakriipsutatud", "Strikethrough": "L\u00e4bikriipsutatud", "Superscript": "\u00dclaindeks", "Subscript": "Alaindeks", "Clear formatting": "Puhasta vorming", "Align left": "Joonda vasakule", "Align center": "Joonda keskele", "Align right": "Joonda paremale", "Justify": "Joonda r\u00f6\u00f6pselt", "Bullet list": "J\u00e4rjestamata loend", "Numbered list": "J\u00e4rjestatud loend", "Decrease indent": "V\u00e4henda taanet", "Increase indent": "Suurenda taanet", "Close": "Sulge", "Formats": "Vormingud", "Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Sinu veebilehitseja ei toeta otsest ligip\u00e4\u00e4su l\u00f5ikelauale. Palun kasuta selle asemel klaviatuuri kiirk\u00e4sklusi Ctrl+X\/C\/V.", "Headers": "P\u00e4ised", "Header 1": "Pealkiri 1", "Header 2": "Pealkiri 2", "Header 3": "Pealkiri 3", "Header 4": "Pealkiri 4", "Header 5": "Pealkiri 5", "Header 6": "Pealkiri 6", "Headings": "Pealkirjad", "Heading 1": "Pealkiri 1", "Heading 2": "Pealkiri 2", "Heading 3": "Pealkiri 3", "Heading 4": "Pealkiri 4", "Heading 5": "Pealkiri 5", "Heading 6": "Pealkiri 6", "Preformatted": "Eelvormindaud", "Div": "Sektsioon", "Pre": "Eelvormindatud", "Code": "Kood", "Paragraph": "L\u00f5ik", "Blockquote": "Plokktsitaat", "Inline": "Reasisene", "Blocks": "Plokid", "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Asetamine on n\u00fc\u00fcd tekstire\u017eiimis. Sisu asetatakse n\u00fc\u00fcd lihttekstina, kuni sa l\u00fclitad selle valiku v\u00e4lja.", "Fonts": "Fondid", "Font Sizes": "Kirja suurused", "Class": "Klass", "Browse for an image": "Sirvi pilte", "OR": "V\u00d5I", "Drop an image here": "Kukuta pilt siia", "Upload": "\u00dcles laadimine", "Block": "Plokk", "Align": "Joonda", "Default": "Vaikimisi", "Circle": "Ring", "Disc": "Ketas", "Square": "Ruut", "Lower Alpha": "V\u00e4iket\u00e4hed (a, b, c)", "Lower Greek": "Kreeka v\u00e4iket\u00e4hed (\u03b1, \u03b2, \u03b3)", "Lower Roman": "Rooma v\u00e4iket\u00e4hed (i, ii, iii)", "Upper Alpha": "Suurt\u00e4hed (A, B, C)", "Upper Roman": "Rooma suurt\u00e4hed (I, II, III)", "Anchor...": "Ankur ...", "Name": "Nimi", "Id": "ID", "Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "ID peaks algama t\u00e4hega ning sellele peaks j\u00e4rgnema ainult t\u00e4hed, arvud, sidekriipsud, punktid, koolonid v\u00f5i alakriipsud.", "You have unsaved changes are you sure you want to navigate away?": "Sul on salvestamata muudatusi. Oled Sa kindel, et soovid mujale navigeeruda?", "Restore last draft": "Taasta viimane mustand", "Special character...": "Eriline tegelane ...", "Source code": "L\u00e4htekood", "Insert\/Edit code sample": "Sisesta\/muuda koodin\u00e4idis", "Language": "Keel", "Code sample...": "Koodin\u00e4ide ...", "Color Picker": "V\u00e4rvivalija", "R": "R", "G": "G", "B": "B", "Left to right": "Vasakult paremale", "Right to left": "Paremalt vasakule", "Emoticons...": "Emotikonid ...", "Metadata and Document Properties": "Metaandmed ja dokumendi atribuudid", "Title": "Pealkiri", "Keywords": "M\u00e4rks\u00f5nad", "Description": "Kirjeldus", "Robots": "Robotid", "Author": "Autor", "Encoding": "M\u00e4rgistik", "Fullscreen": "T\u00e4isekraan", "Action": "Tegevus", "Shortcut": "Otsetee", "Help": "Abiinfo", "Address": "Aadress", "Focus to menubar": "Fookus men\u00fc\u00fcribale", "Focus to toolbar": "Fookus t\u00f6\u00f6riistaribale", "Focus to element path": "Fookus elemendi asukohale", "Focus to contextual toolbar": "Fookus kontekstimen\u00fc\u00fcle", "Insert link (if link plugin activated)": "Sisesta link (kui lingi plugin on aktiveeritud)", "Save (if save plugin activated)": "Salvesta (kui salvestamise plugin on aktiveeritud)", "Find (if searchreplace plugin activated)": "Otsi (kui plugin searchreplace on aktiveeritud)", "Plugins installed ({0}):": "Pluginad on paigaldatud ({0}):", "Premium plugins:": "Tasulised pluginad:", "Learn more...": "Vaata lisainfot...", "You are using {0}": "Sa kasutad {0}", "Plugins": "Pluginad", "Handy Shortcuts": "Mugavad otseteed", "Horizontal line": "Horisontaaljoon", "Insert\/edit image": "Lisa\/muuda pilt", "Image description": "Pildi kirjeldus", "Source": "Allikas", "Dimensions": "M\u00f5\u00f5tmed", "Constrain proportions": "S\u00e4ilita kuvasuhe", "General": "\u00dcldine", "Advanced": "T\u00e4iendavad seaded", "Style": "Stiil", "Vertical space": "P\u00fcstine vahe", "Horizontal space": "Reavahe", "Border": "\u00c4\u00e4ris", "Insert image": "Lisa pilt", "Image...": "Pilt ...", "Image list": "Piltide nimekiri", "Rotate counterclockwise": "P\u00f6\u00f6ra vastup\u00e4eva", "Rotate clockwise": "P\u00f6\u00f6ra p\u00e4rip\u00e4eva", "Flip vertically": "Peegelda vertikaalselt", "Flip horizontally": "Peegelda horisontaalselt", "Edit image": "Muuda pilti", "Image options": "Pildi valikud", "Zoom in": "Suumi sisse", "Zoom out": "Suumi v\u00e4lja", "Crop": "L\u00f5ika", "Resize": "Muuda suurust", "Orientation": "Suund", "Brightness": "Heledus", "Sharpen": "Teravamaks", "Contrast": "Kontrast", "Color levels": "V\u00e4rvi tasemed", "Gamma": "Gamma", "Invert": "P\u00f6\u00f6ra v\u00e4rvid", "Apply": "Rakenda", "Back": "Tagasi", "Insert date\/time": "Lisa kuup\u00e4ev\/kellaaeg", "Date\/time": "Kuup\u00e4ev\/kellaaeg", "Insert\/Edit Link": "Lingi lisamine \/ muutmine", "Insert\/edit link": "Lisa\/muuda link", "Text to display": "Kuvatav tekst", "Url": "Viide (url)", "Open link in...": "Ava link saidil ...", "Current window": "Praegune aken", "None": "Puudub", "New window": "Uus aken", "Remove link": "Eemalda link", "Anchors": "Ankrud", "Link...": "Link...", "Paste or type a link": "Aseta v\u00f5i sisesta link", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "URL, mille sa sisestasid, n\u00e4ib olevat e-posti aadress. Kas sa soovid lisada sellele eesliite mailto: ?", "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "URL, mille sa sisestasid, n\u00e4ib olevat v\u00e4line link. Kas sa soovid lisada sellele eesliite http:\/\/ ?", "Link list": "Linkide nimekiri", "Insert video": "Lisa video", "Insert\/edit video": "Lisa\/muuda video", "Insert\/edit media": "Lisa\/muuda multimeediat", "Alternative source": "Teine allikas", "Alternative source URL": "Alternatiivne allika URL", "Media poster (Image URL)": "Meediaplakat (pildi URL)", "Paste your embed code below:": "Kleebi oma manustamiskood siia alla:", "Embed": "Manusta", "Media...": "Meedia ...", "Nonbreaking space": "T\u00fchim\u00e4rk (nbsp)", "Page break": "Lehevahetus", "Paste as text": "Aseta tekstina", "Preview": "Eelvaade", "Print...": "Prindi ...", "Save": "Salvesta", "Find": "Otsi", "Replace with": "Asendus", "Replace": "Asenda", "Replace all": "Asenda k\u00f5ik", "Previous": "Eelmine", "Next": "J\u00e4rg", "Find and replace...": "Leidke ja asendage ...", "Could not find the specified string.": "Ei suutnud leida etteantud s\u00f5net.", "Match case": "Erista suur- ja v\u00e4iket\u00e4hti", "Find whole words only": "Leidke ainult terved s\u00f5nad", "Spell check": "\u00d5igekirja kontroll", "Ignore": "Eira", "Ignore all": "Eira k\u00f5iki", "Finish": "L\u00f5peta", "Add to Dictionary": "Lisa s\u00f5naraamatusse", "Insert table": "Lisa tabel", "Table properties": "Tabeli omadused", "Delete table": "Kustuta tabel", "Cell": "Lahter", "Row": "Rida", "Column": "Tulp", "Cell properties": "Lahtri omadused", "Merge cells": "\u00dchenda lahtrid", "Split cell": "T\u00fckelda lahter", "Insert row before": "Lisa rida enne", "Insert row after": "Lisa rida j\u00e4rele", "Delete row": "Kustuta rida", "Row properties": "Rea omadused", "Cut row": "L\u00f5ika rida", "Copy row": "Kopeeri rida", "Paste row before": "Kleebi rida enne", "Paste row after": "Kleebi rida j\u00e4rele", "Insert column before": "Lisa tulp enne", "Insert column after": "Lisa tulp j\u00e4rele", "Delete column": "Kustuta tulp", "Cols": "Veerud", "Rows": "Read", "Width": "Laius", "Height": "K\u00f5rgus", "Cell spacing": "Lahtrivahe", "Cell padding": "Lahtri sisu ja tabeli \u00e4\u00e4rise vahe", "Show caption": "Kuva pealdis", "Left": "Vasakul", "Center": "Keskel", "Right": "Paremal", "Cell type": "Lahtri t\u00fc\u00fcp", "Scope": "Ulatus", "Alignment": "Joondus", "H Align": "H Joondus", "V Align": "V Joondus", "Top": "\u00dcleval", "Middle": "Keskel", "Bottom": "All", "Header cell": "P\u00e4islahter", "Row group": "Ridade r\u00fchm", "Column group": "Veergude r\u00fchm", "Row type": "Rea t\u00fc\u00fcp", "Header": "P\u00e4is", "Body": "P\u00f5hiosa", "Footer": "Jalus", "Border color": "Piirjoone v\u00e4rv", "Insert template...": "Sisesta mall ...", "Templates": "Mallid", "Template": "Mall", "Text color": "Teksti v\u00e4rv", "Background color": "Tausta v\u00e4rv", "Custom...": "Kohandatud...", "Custom color": "Kohandatud v\u00e4rv", "No color": "V\u00e4rvi pole", "Remove color": "Eemaldage v\u00e4rv", "Table of Contents": "Sisukord", "Show blocks": "N\u00e4ita plokke", "Show invisible characters": "N\u00e4ita peidetud m\u00e4rke", "Word count": "S\u00f5nade arv", "Count": "Krahv", "Document": "Dokument", "Selection": "Valik", "Words": "S\u00f5nad", "Words: {0}": "S\u00f5nu: {0}", "{0} words": "{0} s\u00f5na", "File": "Fail", "Edit": "Muuda", "Insert": "Sisesta", "View": "Vaade", "Format": "Vorming", "Table": "Tabel", "Tools": "T\u00f6\u00f6riistad", "Powered by {0}": "Kasutatud tarkvara {0}", "Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Rikastatud teksti ala. Men\u00fc\u00fc jaoks vajuta ALT-F9. T\u00f6\u00f6riistariba jaoks vajuta ALT-F10. Abi saamiseks vajuta ALT-0.", "Image title": "Pildi pealkiri", "Border width": "\u00c4\u00e4rise laius", "Border style": "Piiri stiil", "Error": "Viga", "Warn": "Hoiatage", "Valid": "Kehtib", "To open the popup, press Shift+Enter": "H\u00fcpikakna avamiseks vajutage t\u00f5stuklahvi + sisestusklahvi", "Rich Text Area. Press ALT-0 for help.": "Rikasteksti ala. Abi saamiseks vajutage ALT-0.", "System Font": "S\u00fcsteemi font", "Failed to upload image: {0}": "Pildi \u00fcleslaadimine eba\u00f5nnestus: {0}", "Failed to load plugin: {0} from url {1}": "Pistikprogrammi laadimine nurjus: {0} URL-ist {1}", "Failed to load plugin url: {0}": "Pistikprogrammi URL-i laadimine nurjus: {0}", "Failed to initialize plugin: {0}": "Pistikprogrammi l\u00e4htestamine eba\u00f5nnestus: {0}", "example": "n\u00e4ide", "Search": "Otsing", "All": "K\u00f5ik", "Currency": "Valuuta", "Text": "Tekst", "Quotations": "Tsitaadid", "Mathematical": "Matemaatiline", "Extended Latin": "Laiendatud ladina keel", "Symbols": "S\u00fcmbolid", "Arrows": "Nooled", "User Defined": "Kasutaja m\u00e4\u00e4ratud", "dollar sign": "dollari m\u00e4rk", "currency sign": "v\u00e4\u00e4ringu m\u00e4rk", "euro-currency sign": "euro v\u00e4\u00e4ringu m\u00e4rk", "colon sign": "j\u00e4mesoole m\u00e4rk", "cruzeiro sign": "cruzeiro m\u00e4rk", "french franc sign": "Prantsuse frangi m\u00e4rk", "lira sign": "liiri m\u00e4rk", "mill sign": "veskim\u00e4rk", "naira sign": "naira m\u00e4rk", "peseta sign": "peseta m\u00e4rk", "rupee sign": "ruupia m\u00e4rk", "won sign": "v\u00f5itis m\u00e4rgi", "new sheqel sign": "uus \u0161ekeli m\u00e4rk", "dong sign": "dongi m\u00e4rk", "kip sign": "kip m\u00e4rk", "tugrik sign": "tugriku m\u00e4rk", "drachma sign": "drahmam\u00e4rk", "german penny symbol": "saksa senti s\u00fcmbol", "peso sign": "peeso m\u00e4rk", "guarani sign": "guarani m\u00e4rk", "austral sign": "austraalne m\u00e4rk", "hryvnia sign": "grivna m\u00e4rk", "cedi sign": "cedi m\u00e4rk", "livre tournois sign": "elav turniiri m\u00e4rk", "spesmilo sign": "spesmilo m\u00e4rk", "tenge sign": "tenge m\u00e4rk", "indian rupee sign": "India ruupia m\u00e4rk", "turkish lira sign": "t\u00fcrgi liiri m\u00e4rk", "nordic mark sign": "p\u00f5hjam\u00e4rgi m\u00e4rk", "manat sign": "manati m\u00e4rk", "ruble sign": "rubla m\u00e4rk", "yen character": "jeeni tegelaskuju", "yuan character": "j\u00fcaani tegelaskuju", "yuan character, in hong kong and taiwan": "j\u00fcaani tegelane, Hongkongis ja Taiwanis", "yen\/yuan character variant one": "jeeni \/ j\u00fcaani t\u00e4hem\u00e4rgi variant \u00fcks", "Loading emoticons...": "Emotikonide laadimine ...", "Could not load emoticons": "Emotikonide laadimine nurjus", "People": "Inimesed", "Animals and Nature": "Loomad ja loodus", "Food and Drink": "Toit ja jook", "Activity": "Tegevus", "Travel and Places": "Reisimine ja kohad", "Objects": "Objektid", "Flags": "Lipud", "Characters": "Tegelased", "Characters (no spaces)": "M\u00e4rgid (t\u00fchikud puuduvad)", "{0} characters": "{0} t\u00e4hem\u00e4rki", "Error: Form submit field collision.": "Viga: vormi esitamise v\u00e4lja kokkup\u00f5rge.", "Error: No form element found.": "Viga: vormielementi ei leitud.", "Update": "Uuenda", "Color swatch": "V\u00e4rvivalik", "Turquoise": "T\u00fcrkiis", "Green": "Roheline", "Blue": "Sinine", "Purple": "Lilla", "Navy Blue": "Merev\u00e4e sinine", "Dark Turquoise": "Tume t\u00fcrkiissinine", "Dark Green": "Tumeroheline", "Medium Blue": "Keskmine sinine", "Medium Purple": "Keskmine lilla", "Midnight Blue": "Kesk\u00f6ine sinine", "Yellow": "Kollane", "Orange": "Oran\u017e", "Red": "Punane", "Light Gray": "Helehall", "Gray": "Hall", "Dark Yellow": "Tumekollane", "Dark Orange": "Tumeoran\u017e", "Dark Red": "Tumepunane", "Medium Gray": "Keskmiselt hall", "Dark Gray": "Tumehall", "Light Green": "Heleroheline", "Light Yellow": "Helekollane", "Light Red": "Helepunane", "Light Purple": "Helelilla", "Light Blue": "Helesinine", "Dark Purple": "Tumelilla", "Dark Blue": "Tumesinine", "Black": "Must", "White": "Valge", "Switch to or from fullscreen mode": "L\u00fclitumine t\u00e4isekraanre\u017eiimile v\u00f5i sellest v\u00e4lja", "Open help dialog": "Ava dialoog", "history": "ajalugu", "styles": "stiilid", "formatting": "vormindamine", "alignment": "joondamine", "indentation": "taane", "permanent pen": "p\u00fcsiv pliiats", "comments": "kommentaare", "Format Painter": "Format Painter", "Insert\/edit iframe": "Sisesta \/ redigeeri iframe", "Capitalization": "Suurt\u00e4htede kasutamine", "lowercase": "v\u00e4iket\u00e4hed", "UPPERCASE": "\u00dcLEMINEK", "Title Case": "Pealkirja juhtum", "Permanent Pen Properties": "P\u00fcsivad pliiatsi omadused", "Permanent pen properties...": "Pliiatsi p\u00fcsivad omadused ...", "Font": "Font", "Size": "Suurus", "More...": "Veel ...", "Spellcheck Language": "\u00d5igekirjakontroll", "Select...": "Valige ...", "Preferences": "Eelistused", "Yes": "Jah", "No": "Ei", "Keyboard Navigation": "Klaviatuuril navigeerimine", "Version": "Versioon", "Anchor": "Ankur", "Special character": "Erim\u00e4rk", "Code sample": "Koodi n\u00e4idis", "Color": "V\u00e4rv", "Emoticons": "Emotikonid", "Document properties": "Dokumendi omadused", "Image": "Pilt", "Insert link": "Lisa link", "Target": "Sihtm\u00e4rk", "Link": "Link", "Poster": "Lisaja", "Media": "Multimeedia", "Print": "Tr\u00fcki", "Prev": "Eelm", "Find and replace": "Otsi ja asenda", "Whole words": "Terviks\u00f5nad", "Spellcheck": "\u00d5igekirja kontroll", "Caption": "Alapealkiri", "Insert template": "Lisa mall" }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/tinymce/langs/eu.js ================================================ tinymce.addI18n('eu',{ "Redo": "Berregin", "Undo": "Desegin", "Cut": "Ebaki", "Copy": "Kopiatu", "Paste": "Itsatsi", "Select all": "Hautatu dena", "New document": "Dokumentu berria", "Ok": "Ondo", "Cancel": "Ezeztatu", "Visual aids": "Laguntza bisualak", "Bold": "Lodia", "Italic": "Etzana", "Underline": "Azpimarratua", "Strikethrough": "Marratua", "Superscript": "Goi-indizea", "Subscript": "Azpiindizea", "Clear formatting": "Ezabatu formatua", "Align left": "Lerrokatu ezkerrean", "Align center": "Lerrokatu erdian", "Align right": "Lerrokatu eskuinean", "Justify": "Justifikatuta", "Bullet list": "Bulet zerrenda", "Numbered list": "Zenbaki-zerrenda", "Decrease indent": "Txikitu koska", "Increase indent": "Handitu koska", "Close": "Itxi", "Formats": "Formatuak", "Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Zure nabigatzaileak ez du arbela zuzenean erabiltzeko euskarririk. Mesedez erabili CTRL+X\/C\/V teklatuko lasterbideak.", "Headers": "Goiburuak", "Header 1": "1. goiburua", "Header 2": "2. goiburua", "Header 3": "3. goiburua", "Header 4": "4. goiburua", "Header 5": "5. goiburua", "Header 6": "6. goiburua", "Headings": "Izenburuak", "Heading 1": "1. izenburua", "Heading 2": "2. izenburua", "Heading 3": "3. izenburua", "Heading 4": "4. izenburua", "Heading 5": "5. izenburua", "Heading 6": "6. izenburua", "Preformatted": "Aurreformateatuta", "Div": "Div", "Pre": "Pre", "Code": "Kodea", "Paragraph": "Paragrafoa", "Blockquote": "Blockquote", "Inline": "Txertatuta", "Blocks": "Blokeak", "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Itsatsi testu arrunt moduan dago orain. Edukiak testu arruntak bezala itsatsiko dira aukera hau itzaltzen duzunera arte.", "Fonts": "Letra-motak", "Font Sizes": "Letra-tamainak", "Class": "Klasea", "Browse for an image": "Irudia arakatu", "OR": "EDO", "Drop an image here": "Irudia hona ekarri", "Upload": "Kargatu", "Block": "Blokea", "Align": "Lerrokatu", "Default": "Lehenetstia", "Circle": "Zirkulua", "Disc": "Diskoa", "Square": "Karratua", "Lower Alpha": "Behe alfa", "Lower Greek": "Behe grekoa", "Lower Roman": "Behe erromatarra", "Upper Alpha": "Goi alfa", "Upper Roman": "Goi erromatarra", "Anchor...": "Aingura...", "Name": "Izena", "Id": "Id", "Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Ida hizki batekin hasi behar da, jarraian hizkiak, zenbakiak, gidoiak, puntuak, bi-puntu edo azpiko marrak bakarrik izan ditzake.", "You have unsaved changes are you sure you want to navigate away?": "Gorde gabeko aldaketak dituzu, zihur zaude hemendik irten nahi duzula?", "Restore last draft": "Leheneratu azken zirriborroa", "Special character...": "Karaktere bereziak...", "Source code": "Iturburu-kodea", "Insert\/Edit code sample": "Txertatu\/editatu kode adibidea", "Language": "Hizkuntza", "Code sample...": "Kode adibidea...", "Color Picker": "Kolore-hautatzailea", "R": "R", "G": "G", "B": "B", "Left to right": "Ezkerretik eskuinera", "Right to left": "Eskuinetik ezkerrera", "Emoticons...": "Emotikonoak...", "Metadata and Document Properties": "Metadatuak eta dokumentuaren propietateak", "Title": "Titulua", "Keywords": "Hitz gakoak", "Description": "Deskribapena", "Robots": "Robotak", "Author": "Egilea", "Encoding": "Encoding", "Fullscreen": "Pantaila osoa", "Action": "Akzioa", "Shortcut": "Laster tekla", "Help": "Laguntza", "Address": "Helbidea", "Focus to menubar": "Fokoa menu-barrara eraman", "Focus to toolbar": "Fokoa tresna-barrara eraman", "Focus to element path": "Fokoa elementuaren bidera eraman", "Focus to contextual toolbar": "Fokoa kontestuko tresna-barrara eraman", "Insert link (if link plugin activated)": "Lotura txertatu (lotura plugina aktibatuta badago)", "Save (if save plugin activated)": "Gorde (gordetzeko plugina aktibatuta badago)", "Find (if searchreplace plugin activated)": "Bilatu (bilatuordezkatu plugina instalatuta badago)", "Plugins installed ({0}):": "Instalatutako pluginak ({0}):", "Premium plugins:": "Premium pluginak:", "Learn more...": "Gehiago ikasi...", "You are using {0}": "{0} erabiltzen ari zara", "Plugins": "Pluginak", "Handy Shortcuts": "Laster-tekla erabilgarriak", "Horizontal line": "Marra horizontala", "Insert\/edit image": "Irudia txertatu\/editatu", "Image description": "Irudiaren deskribapena", "Source": "Iturburua", "Dimensions": "Neurriak", "Constrain proportions": "Zerraditu proportzioak", "General": "Orokorra", "Advanced": "Aurreratua", "Style": "Estiloa", "Vertical space": "Hutsune bertikala", "Horizontal space": "Hutsune horizontala", "Border": "Ertza", "Insert image": "Irudia txertatu", "Image...": "Irudia...", "Image list": "Irudi zerrenda", "Rotate counterclockwise": "Erlojuaren aurkako eran biratu", "Rotate clockwise": "Erlojuaren eran biratu", "Flip vertically": "Bertikalki irauli", "Flip horizontally": "Horizontalki irauli", "Edit image": "Irudia editatu", "Image options": "Irudiaren aukerak", "Zoom in": "Zooma handiagotu", "Zoom out": "Zooma txikiagotu", "Crop": "Moztu", "Resize": "Tamaina aldatu", "Orientation": "Orientazioa", "Brightness": "Distira", "Sharpen": "Zorroztu", "Contrast": "Kontrastatu", "Color levels": "Kolore mailak", "Gamma": "Gamma", "Invert": "Biratu", "Apply": "Gorde", "Back": "Atzera", "Insert date\/time": "Data\/ordua txertatu", "Date\/time": "Data\/ordua", "Insert\/Edit Link": "Lotura txertatu\/aldatu...", "Insert\/edit link": "Esteka txertatu\/editatu", "Text to display": "Bistaratzeko testua", "Url": "Url", "Open link in...": "Lotura hemen ireki...", "Current window": "Leiho hau", "None": "Bat ere ez", "New window": "Lehio berria", "Remove link": "Kendu esteka", "Anchors": "Estekak", "Link...": "Esteka...", "Paste or type a link": "Itsatsu edo idatzi lotura", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "Sartu duzun URL-ak e-posta helbidea dela dirudi. Nahi duzu dagokion mailto: aurrizkia gehitzea?", "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "Sartu duzun URL-ak kanpoko esteka dela dirudi. Nahi duzu dagokion http:\/\/ aurrizkia gehitzea?", "Link list": "Loturen zerrenda", "Insert video": "Bideoa txertatu", "Insert\/edit video": "Bideoa txertatu\/editatu", "Insert\/edit media": "Media txertatu\/editatu", "Alternative source": "Iturburu alternatiboa", "Alternative source URL": "Ordezko jatorri URL-a", "Media poster (Image URL)": "Media posterra (irudiaren URL-a)", "Paste your embed code below:": "Itsatsi hemen zure enkapsulatzeko kodea:", "Embed": "Kapsulatu", "Media...": "Multimedia...", "Nonbreaking space": "Zuriune zatiezina", "Page break": "Orrialde-jauzia", "Paste as text": "Itsatsi testu bezala", "Preview": "Aurrebista", "Print...": "Inprimatu...", "Save": "Gorde", "Find": "Bilatu", "Replace with": "Honekin ordeztu", "Replace": "Ordeztu", "Replace all": "Ordeztu dena", "Previous": "Aurrekoa", "Next": "Hurrengoa", "Find and replace...": "Bilatu eta ordezkatu...", "Could not find the specified string.": "Ezin izan da zehaztutako katea aurkitu.", "Match case": "Maiuskula\/minuskula", "Find whole words only": "Hitz osoak bakarrik bilatu", "Spell check": "Hizkuntza zuzenketa", "Ignore": "Ez ikusi", "Ignore all": "Ez ikusi guztia", "Finish": "Amaitu", "Add to Dictionary": "Hiztegira gehitu", "Insert table": "Txertatu taula", "Table properties": "Taularen propietateak", "Delete table": "Taula ezabatu", "Cell": "Gelaxka", "Row": "Errenkada", "Column": "Zutabea", "Cell properties": "Gelaxkaren propietateak", "Merge cells": "Batu gelaxkak", "Split cell": "Banatu gelaxkak", "Insert row before": "Txertatu errenkada aurretik", "Insert row after": "Txertatu errenkada ostean", "Delete row": "Ezabatu errenkada", "Row properties": "Errenkadaren propietateak", "Cut row": "Ebaki errenkada", "Copy row": "Kopiatu errenkada", "Paste row before": "Itsatsi errenkada aurretik", "Paste row after": "Itsatsi errenkada ostean", "Insert column before": "Txertatu zutabe aurretik", "Insert column after": "Txertatu zutabea ostean", "Delete column": "Ezabatu zutabea", "Cols": "Zutabeak", "Rows": "Errenkadak", "Width": "Zabalera", "Height": "Altuera", "Cell spacing": "Gelaxka arteko tartea", "Cell padding": "Gelaxken betegarria", "Show caption": "Erakutsi irudi-oina erakutsi", "Left": "Ezkerra", "Center": "Erdia", "Right": "Eskuina", "Cell type": "Gelaxka mota", "Scope": "Esparrua", "Alignment": "Lerrokatzea", "H Align": "Lerrokatze horizontala", "V Align": "Lerrokatze bertikala", "Top": "Goian", "Middle": "Erdian", "Bottom": "Behean", "Header cell": "Goiburuko gelaxka", "Row group": "Lerro taldea", "Column group": "Zutabe taldea", "Row type": "Lerro mota", "Header": "Goiburua", "Body": "Gorputza", "Footer": "Oina", "Border color": "Inguruko marraren kolorea", "Insert template...": "Txantiloia txertatu...", "Templates": "Txantiloiak", "Template": "Txantiloia", "Text color": "Testuaren kolorea", "Background color": "Atzeko kolorea", "Custom...": "Pertsonalizatu", "Custom color": "Pertsonalizatutako kolorea", "No color": "Kolorerik ez", "Remove color": "Kendu kolorea", "Table of Contents": "Edukien taula", "Show blocks": "Erakutsi blokeak", "Show invisible characters": "Erakutsi karaktere izkutuak", "Word count": "Hizki-kontaketa", "Count": "Zenbatu", "Document": "Dokumentua", "Selection": "Aukera", "Words": "Hitzak", "Words: {0}": "Hitzak: {0}", "{0} words": "{0} hitz", "File": "Fitxategia", "Edit": "Editatu", "Insert": "Sartu", "View": "Ikusi", "Format": "Formatua", "Table": "Taula", "Tools": "Tresnak", "Powered by {0}": "{0}rekin egina", "Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Testu aberastuko area. Sakatu ALT-F9 menurako. Sakatu ALT-F10 tresna-barrarako. Sakatu ALT-0 laguntzarako", "Image title": "Irudiaren izenburua", "Border width": "Ertzaren zabalera", "Border style": "Ertzaren estiloa", "Error": "Errorea", "Warn": "Oharra", "Valid": "Zuzena", "To open the popup, press Shift+Enter": "Leiho berria irekitzeko, sakatu Shift+Enter", "Rich Text Area. Press ALT-0 for help.": "Testu aberastuko area. Sakatu ALT-0 laguntza lortzeko.", "System Font": "Sistemaren letra-mota", "Failed to upload image: {0}": "Errorea gertatu da irudia igotzean: {0}", "Failed to load plugin: {0} from url {1}": "Errorea gertatu da {0} plugina kargatzean {1} url-tik", "Failed to load plugin url: {0}": "Errorea gertatu da pluginaren url-a kargatzean: {0}", "Failed to initialize plugin: {0}": "Errorea gertatu da plugina hasieratzean: {0}", "example": "adibidea", "Search": "Bilatu", "All": "Guztiak", "Currency": "Moneta", "Text": "Testua", "Quotations": "Aipuak", "Mathematical": "Matematika", "Extended Latin": "Latin zabaldua", "Symbols": "Ikurrak", "Arrows": "Geziak", "User Defined": "Erabiltzaileak definitutakoak", "dollar sign": "dolarraren ikurra", "currency sign": "monetaren ikurra", "euro-currency sign": "euroaren ikurra", "colon sign": "bi puntuen ikurra", "cruzeiro sign": "cruzeiroaren ikurra", "french franc sign": "libera frantsesaren ikurra", "lira sign": "liraren ikurra", "mill sign": "millaren ikurra", "naira sign": "naira ikurra", "peseta sign": "pezetaren ikurra", "rupee sign": "rupiaren ikurra", "won sign": "wonaren ikurra", "new sheqel sign": "sheqel berriaren ikurra", "dong sign": "dongaren ikurra", "kip sign": "kiparen ikurra", "tugrik sign": "tugrikaren ikurra", "drachma sign": "drakmaren ikurra", "german penny symbol": "alemaniako peniaren ikurra", "peso sign": "pesoaren ikurra", "guarani sign": "guaraniaren ikurra", "austral sign": "australaren ikurra", "hryvnia sign": "hryvniaren ikurra", "cedi sign": "cediaren ikurra", "livre tournois sign": "libre tournoisaren ikurra", "spesmilo sign": "spesmiloaren ikurra", "tenge sign": "tengearen ikurra", "indian rupee sign": "indiako rupiaren ikurra", "turkish lira sign": "lira turkiarraren ikurra", "nordic mark sign": "iparraldeko markoaren ikurra", "manat sign": "manataren ikurra", "ruble sign": "rubloaren ikurra", "yen character": "yenaren karakterea", "yuan character": "yuanaren karakterea", "yuan character, in hong kong and taiwan": "yuanaren karakterea, hong kong eta taiwanen", "yen\/yuan character variant one": "yen\/yuan karakterearen 1go bariantea", "Loading emoticons...": "Emotikonoak kargatzen...", "Could not load emoticons": "Ezin izan dira emotikonoak kargatu", "People": "Jendea", "Animals and Nature": "Animaliak eta natura", "Food and Drink": "Janari eta edaria", "Activity": "Ekintzak", "Travel and Places": "Bidaiak eta lekuak", "Objects": "Objektuak", "Flags": "Banderak", "Characters": "Karaktereak", "Characters (no spaces)": "Karaktereak (espaziorik gabe)", "{0} characters": "{0} karaktere", "Error: Form submit field collision.": "Errorea: formularioaren eremuetan talka gertatu da.", "Error: No form element found.": "Errorea: ez da formularioa aurkitu.", "Update": "Eguneratu", "Color swatch": "Koloreak", "Turquoise": "Turkesa", "Green": "Berdea", "Blue": "Urdina", "Purple": "Morea", "Navy Blue": "Itsas-urdina", "Dark Turquoise": "Turkesa iluna", "Dark Green": "Berde iluna", "Medium Blue": "Tarteko urdina", "Medium Purple": "Tarteko morea", "Midnight Blue": "Gauerdiko urdina", "Yellow": "Horia", "Orange": "Laranja", "Red": "Gorria", "Light Gray": "Gris argia", "Gray": "Grisa", "Dark Yellow": "Hori iluna", "Dark Orange": "Laranja iluna", "Dark Red": "Gorri iluna", "Medium Gray": "Tarteko grisa", "Dark Gray": "Gris iluna", "Light Green": "Berde argia", "Light Yellow": "Hori argia", "Light Red": "Gorri argia", "Light Purple": "More argia", "Light Blue": "Urdin argia", "Dark Purple": "More iluna", "Dark Blue": "Urdin iluna", "Black": "Beltza", "White": "Zuria", "Switch to or from fullscreen mode": "Pantaila osoko modura joan edo handik itzuli", "Open help dialog": "Laguntza elkarrizketa ireki", "history": "historia", "styles": "estiloak", "formatting": "formatua", "alignment": "lerrokatzea", "indentation": "koska", "permanent pen": "boligrafo iraunkorra", "comments": "iruzkinak", "Format Painter": "Formatua kopiatu", "Insert\/edit iframe": "Txertatu\/editatu bideoa", "Capitalization": "Letra larriak", "lowercase": "Letra xeheak", "UPPERCASE": "Maiuskula", "Title Case": "Izenburu kasua", "Permanent Pen Properties": "Boligrafo iraunkorraren ezaugarriak", "Permanent pen properties...": "Boligrafo iraunkorraren ezaugarriak...", "Font": "Letra-motak", "Size": "Tamaina", "More...": "Gehiago...", "Spellcheck Language": "Zuzenketa ortografikoaren hizkuntza", "Select...": "Aukeratu...", "Preferences": "Lehentasunak", "Yes": "Bai", "No": "Ez", "Keyboard Navigation": "Teklatuaren nabigazioa", "Version": "Bertsioa", "Anchor": "Esteka", "Special character": "Karaktere bereziak", "Code sample": "Kode adibidea", "Color": "Kolorea", "Emoticons": "Irrifartxoak", "Document properties": "Dokumentuaren propietateak", "Image": "Irudia", "Insert link": "Esteka txertatu", "Target": "Target", "Link": "Lotura", "Poster": "Poster-a", "Media": "Media", "Print": "Inprimatu", "Prev": "Aurrekoa", "Find and replace": "Bilatu eta ordeztu", "Whole words": "hitz osoak", "Spellcheck": "Egiaztapenak", "Caption": "Epigrafea", "Insert template": "Txertatu txantiloia" }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/tinymce/langs/fa.js ================================================ tinymce.addI18n('fa',{ "Redo": "\u0628\u0627\u0632\u0627\u0646\u062c\u0627\u0645", "Undo": "\u0648\u0627\u06af\u0631\u062f", "Cut": "\u0628\u0631\u0634", "Copy": "\u06a9\u067e\u06cc", "Paste": "\u0686\u0633\u0628\u0627\u0646\u062f\u0646", "Select all": "\u0627\u0646\u062a\u062e\u0627\u0628 \u0647\u0645\u0647", "New document": "\u0633\u0646\u062f \u062c\u062f\u06cc\u062f", "Ok": "\u062a\u0623\u06cc\u06cc\u062f", "Cancel": "\u0644\u063a\u0648", "Visual aids": "\u06a9\u0645\u06a9\u200c\u0647\u0627\u06cc \u0628\u0635\u0631\u06cc", "Bold": "\u067e\u0631\u0631\u0646\u06af", "Italic": "\u06a9\u062c", "Underline": "\u0632\u06cc\u0631 \u062e\u0637 \u062f\u0627\u0631", "Strikethrough": "\u062e\u0637 \u0632\u062f\u0646", "Superscript": "\u0628\u0627\u0644\u0627\u0646\u06af\u0627\u0634\u062a", "Subscript": "\u0632\u06cc\u0631\u0646\u06af\u0627\u0634\u062a", "Clear formatting": "\u067e\u0627\u06a9 \u06a9\u0631\u062f\u0646 \u0642\u0627\u0644\u0628\u200c\u0628\u0646\u062f\u06cc", "Align left": "\u062a\u0631\u0627\u0632\u0628\u0646\u062f\u06cc \u0627\u0632 \u0686\u067e", "Align center": "\u062a\u0631\u0627\u0632\u0628\u0646\u062f\u06cc \u0627\u0632 \u0648\u0633\u0637", "Align right": "\u062a\u0631\u0627\u0632\u0628\u0646\u062f\u06cc \u0627\u0632 \u0631\u0627\u0633\u062a", "Justify": "\u062a\u0631\u0627\u0632\u0628\u0646\u062f\u06cc \u062f\u0648\u0637\u0631\u0641\u0647", "Bullet list": "\u0641\u0647\u0631\u0633\u062a \u0646\u0634\u0627\u0646\u0647\u200c\u062f\u0627\u0631", "Numbered list": "\u0641\u0647\u0631\u0633\u062a \u0634\u0645\u0627\u0631\u0647\u200c\u062f\u0627\u0631", "Decrease indent": "\u06a9\u0627\u0647\u0634 \u062a\u0648\u0631\u0641\u062a\u06af\u06cc", "Increase indent": "\u0627\u0641\u0632\u0627\u06cc\u0634 \u062a\u0648\u0631\u0641\u062a\u06af\u06cc", "Close": "\u0628\u0633\u062a\u0646", "Formats": "\u0642\u0627\u0644\u0628\u200c\u0628\u0646\u062f\u06cc\u200c\u0647\u0627", "Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u0645\u0631\u0648\u0631\u06af\u0631 \u0634\u0645\u0627 \u0627\u0632 \u062f\u0633\u062a\u0631\u0633\u06cc \u0645\u0633\u062a\u0642\u06cc\u0645 \u0628\u0647 \u06a9\u0644\u06cc\u067e\u200c\u0628\u0648\u0631\u062f \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0646\u0645\u06cc\u200c\u06a9\u0646\u062f\u060c \u0644\u0637\u0641\u0627\u064b \u0627\u0632 \u0645\u06cc\u0627\u0646\u0628\u0631\u0647\u0627\u06cc Ctrl+X\/C\/V \u0635\u0641\u062d\u0647 \u06a9\u0644\u06cc\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.", "Headers": "\u0633\u0631\u0628\u0631\u06af\u200c\u0647\u0627", "Header 1": "\u0633\u0631\u0628\u0631\u06af 1", "Header 2": "\u0633\u0631\u0628\u0631\u06af 2", "Header 3": "\u0633\u0631\u0628\u0631\u06af 3", "Header 4": "\u0633\u0631\u0628\u0631\u06af 4", "Header 5": "\u0633\u0631\u0628\u0631\u06af 5", "Header 6": "\u0633\u0631\u0628\u0631\u06af 6", "Headings": "\u0633\u0631\u0641\u0635\u0644\u200c\u0647\u0627", "Heading 1": "\u0633\u0631\u0641\u0635\u0644 1", "Heading 2": "\u0633\u0631\u0641\u0635\u0644 2", "Heading 3": "\u0633\u0631\u0641\u0635\u0644 3", "Heading 4": "\u0633\u0631\u0641\u0635\u0644 4", "Heading 5": "\u0633\u0631\u0641\u0635\u0644 5", "Heading 6": "\u0633\u0631\u0641\u0635\u0644 6", "Preformatted": "\u0627\u0632 \u067e\u06cc\u0634 \u0642\u0627\u0644\u0628\u200c\u0628\u0646\u062f\u06cc\u200c\u0634\u062f\u0647", "Div": "\u0628\u062e\u0634", "Pre": "\u067e\u06cc\u0634", "Code": "\u06a9\u062f", "Paragraph": "\u067e\u0627\u0631\u0627\u06af\u0631\u0627\u0641", "Blockquote": "\u0646\u0642\u0644 \u0642\u0648\u0644 \u0628\u0644\u0648\u06a9\u06cc", "Inline": "\u0647\u0645\u200c\u0631\u0627\u0633\u062a\u0627", "Blocks": "\u0628\u0644\u0648\u06a9\u200c\u0647\u0627", "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u0686\u0633\u0628\u0627\u0646\u062f\u0646 \u0647\u0645 \u0627\u06a9\u0646\u0648\u0646 \u062f\u0631 \u062d\u0627\u0644\u062a \u0645\u062a\u0646 \u0633\u0627\u062f\u0647 \u0627\u0633\u062a. \u062a\u0627 \u0632\u0645\u0627\u0646\u06cc \u06a9\u0647 \u0627\u06cc\u0646 \u062d\u0627\u0644\u062a \u0631\u0627 \u063a\u06cc\u0631\u200c\u0641\u0639\u0627\u0644 \u0646\u06a9\u0646\u06cc\u062f\u060c \u0645\u062d\u062a\u0648\u0627 \u062f\u0631 \u062d\u0627\u0644\u062a \u0645\u062a\u0646 \u0633\u0627\u062f\u0647 \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f.", "Fonts": "\u0641\u0648\u0646\u062a\u200c\u200c\u0647\u0627", "Font Sizes": "\u0627\u0646\u062f\u0627\u0632\u0647\u0654 \u0641\u0648\u0646\u062a", "Class": "\u0637\u0628\u0642\u0647", "Browse for an image": "\u06af\u0634\u062a\u0646 \u0628\u0631\u0627\u06cc \u0639\u06a9\u0633 \u0645\u0648\u0631\u062f \u0646\u0638\u0631", "OR": "OR", "Drop an image here": "\u062a\u0635\u0648\u06cc\u0631 \u0645\u0648\u0631\u062f \u0646\u0638\u0631 \u0631\u0627 \u0627\u06cc\u0646\u062c\u0627 \u0631\u0647\u0627 \u06a9\u0646\u06cc\u062f", "Upload": "\u0622\u067e\u0644\u0648\u062f", "Block": "\u0628\u0644\u0648\u06a9", "Align": "\u062a\u0631\u0627\u0632\u0628\u0646\u062f\u06cc", "Default": "\u067e\u06cc\u0634\u0641\u0631\u0636", "Circle": "\u062f\u0627\u06cc\u0631\u0647", "Disc": "\u062f\u06cc\u0633\u06a9", "Square": "\u0645\u0631\u0628\u0639", "Lower Alpha": "\u0622\u0644\u0641\u0627\u0621 \u06a9\u0648\u0686\u06a9", "Lower Greek": "\u06cc\u0648\u0646\u0627\u0646\u06cc \u06a9\u0648\u0686\u06a9", "Lower Roman": "\u0631\u0648\u0645\u06cc \u06a9\u0648\u0686\u06a9", "Upper Alpha": "\u0622\u0644\u0641\u0627\u0621 \u0628\u0632\u0631\u06af", "Upper Roman": "\u0631\u0648\u0645\u06cc \u0628\u0632\u0631\u06af", "Anchor...": "\u0642\u0644\u0627\u0628...", "Name": "\u0646\u0627\u0645", "Id": "Id", "Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.", "You have unsaved changes are you sure you want to navigate away?": "\u0634\u0645\u0627 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0630\u062e\u06cc\u0631\u0647 \u0646\u0634\u062f\u0647 \u0627\u06cc \u062f\u0627\u0631\u06cc\u062f\u060c \u0622\u06cc\u0627 \u0645\u0637\u0645\u0626\u0646\u06cc\u062f \u06a9\u0647 \u0645\u06cc\u062e\u0648\u0627\u0647\u06cc\u062f \u0627\u0632 \u0627\u06cc\u0646 \u0635\u0641\u062d\u0647 \u0628\u0631\u0648\u06cc\u062f\u061f", "Restore last draft": "\u0628\u0627\u0632\u06af\u0631\u062f\u0627\u0646\u062f\u0646 \u0622\u062e\u0631\u06cc\u0646 \u067e\u06cc\u0634 \u0646\u0648\u06cc\u0633", "Special character...": "\u0646\u0648\u06cc\u0633\u06c0 \u0648\u06cc\u0698\u0647...", "Source code": "\u06a9\u062f \u0645\u0646\u0628\u0639", "Insert\/Edit code sample": "Insert\/Edit code sample", "Language": "Language", "Code sample...": "\u0646\u0645\u0648\u0646\u0647 \u06a9\u062f...", "Color Picker": "\u0627\u0646\u062a\u062e\u0627\u0628\u200c\u06a9\u0646\u0646\u062f\u0647 \u0631\u0646\u06af", "R": "\u0642\u0631\u0645\u0632", "G": "\u0633\u0628\u0632", "B": "\u0622\u0628\u06cc", "Left to right": "\u0686\u067e \u0628\u0647 \u0631\u0627\u0633\u062a", "Right to left": "\u0631\u0627\u0633\u062a \u0628\u0647 \u0686\u067e", "Emoticons...": "\u0635\u0648\u0631\u062a\u06a9\u200c\u0647\u0627...", "Metadata and Document Properties": "\u0641\u0631\u0627\u062f\u0627\u062f\u0647 \u0648 \u0645\u0634\u062e\u0635\u0627\u062a \u0633\u0646\u062f", "Title": "\u0639\u0646\u0648\u0627\u0646", "Keywords": "\u06a9\u0644\u0645\u0627\u062a \u06a9\u0644\u06cc\u062f\u06cc", "Description": "\u062a\u0648\u0636\u06cc\u062d\u0627\u062a", "Robots": "\u0631\u0628\u0627\u062a\u200c\u0647\u0627", "Author": "\u0646\u0648\u06cc\u0633\u0646\u062f\u0647", "Encoding": "\u06a9\u062f \u06af\u0630\u0627\u0631\u06cc", "Fullscreen": "\u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647", "Action": "\u0627\u0642\u062f\u0627\u0645", "Shortcut": "\u0645\u06cc\u0627\u0646\u0628\u0631", "Help": "\u0631\u0627\u0647\u0646\u0645\u0627", "Address": "\u0622\u062f\u0631\u0633", "Focus to menubar": "\u062a\u0645\u0631\u06a9\u0632 \u0628\u0631 \u0646\u0648\u0627\u0631 \u0645\u0646\u0648", "Focus to toolbar": "\u062a\u0645\u0631\u06a9\u0632 \u0628\u0631 \u0646\u0648\u0627\u0631 \u0627\u0628\u0632\u0627\u0631", "Focus to element path": "\u062a\u0645\u0631\u06a9\u0632 \u0628\u0631 \u0645\u0633\u06cc\u0631 \u0627\u0644\u0645\u0627\u0646", "Focus to contextual toolbar": "\u062a\u0645\u0631\u06a9\u0632 \u0628\u0631 \u0646\u0648\u0627\u0631 \u0627\u0628\u0632\u0627\u0631 \u0628\u0627\u0641\u062a\u0627\u0631\u06cc", "Insert link (if link plugin activated)": "\u062f\u0631\u062c \u067e\u06cc\u0648\u0646\u062f (\u062f\u0631 \u0635\u0648\u0631\u062a \u0641\u0639\u0627\u0644 \u0628\u0648\u062f\u0646 \u0627\u0641\u0632\u0648\u0646\u0647\u0654 \u067e\u06cc\u0648\u0646\u062f)", "Save (if save plugin activated)": "\u0630\u062e\u06cc\u0631\u0647\u00a0(\u062f\u0631 \u0635\u0648\u0631\u062a \u0641\u0639\u0627\u0644 \u0628\u0648\u062f\u0646 \u0627\u0641\u0632\u0648\u0646\u0647\u0654 \u0630\u062e\u06cc\u0631\u0647)", "Find (if searchreplace plugin activated)": "\u06cc\u0627\u0641\u062a\u0646 (\u062f\u0631 \u0635\u0648\u0631\u062a \u0641\u0639\u0627\u0644 \u0628\u0648\u062f\u0646 \u0627\u0641\u0632\u0648\u0646\u0647\u0654 \u062c\u0633\u062a\u062c\u0648\/\u062c\u0627\u06cc\u06af\u0632\u06cc\u0646\u06cc)", "Plugins installed ({0}):": "\u0627\u0641\u0632\u0648\u0646\u0647\u200c\u0647\u0627\u06cc \u0646\u0635\u0628\u200c\u0634\u062f\u0647 ({0}):", "Premium plugins:": "\u0627\u0641\u0632\u0648\u0646\u0647\u200c\u0647\u0627\u06cc \u067e\u0648\u0644\u06cc:", "Learn more...": "\u06cc\u0627\u062f\u06af\u06cc\u0631\u06cc \u0628\u06cc\u0634\u062a\u0631...", "You are using {0}": "\u062f\u0631 \u062d\u0627\u0644 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 {0} \u0647\u0633\u062a\u06cc\u062f", "Plugins": "\u0627\u0641\u0632\u0648\u0646\u0647\u200c\u0647\u0627", "Handy Shortcuts": "\u0645\u06cc\u0627\u0646\u0628\u0631\u0647\u0627\u06cc \u0645\u0641\u06cc\u062f", "Horizontal line": "\u062e\u0637 \u0627\u0641\u0642\u06cc", "Insert\/edit image": "\u0627\u0636\u0627\u0641\u0647\/\u0648\u06cc\u0631\u0627\u06cc\u0634 \u06a9\u0631\u062f\u0646 \u062a\u0635\u0648\u06cc\u0631", "Image description": "\u062a\u0648\u0636\u06cc\u062d\u0627\u062a \u0639\u06a9\u0633", "Source": "\u0645\u0646\u0628\u0639", "Dimensions": "\u0627\u0628\u0639\u0627\u062f", "Constrain proportions": "\u062d\u0641\u0638 \u062a\u0646\u0627\u0633\u0628", "General": "\u0639\u0645\u0648\u0645\u06cc", "Advanced": "\u067e\u06cc\u0634\u0631\u0641\u062a\u0647", "Style": "\u0633\u0628\u06a9", "Vertical space": "\u0641\u0636\u0627\u06cc \u0639\u0645\u0648\u062f\u06cc", "Horizontal space": "\u0641\u0636\u0627\u06cc \u0627\u0641\u0642\u06cc", "Border": "\u062d\u0627\u0634\u06cc\u0647", "Insert image": "\u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u062a\u0635\u0648\u06cc\u0631", "Image...": "\u062a\u0635\u0648\u06cc\u0631...", "Image list": "\u0641\u0647\u0631\u0633\u062a \u062a\u0635\u0648\u06cc\u0631", "Rotate counterclockwise": "Rotate counterclockwise", "Rotate clockwise": "Rotate clockwise", "Flip vertically": "Flip vertically", "Flip horizontally": "Flip horizontally", "Edit image": "Edit image", "Image options": "Image options", "Zoom in": "Zoom in", "Zoom out": "Zoom out", "Crop": "Crop", "Resize": "Resize", "Orientation": "Orientation", "Brightness": "Brightness", "Sharpen": "Sharpen", "Contrast": "Contrast", "Color levels": "Color levels", "Gamma": "Gamma", "Invert": "Invert", "Apply": "Apply", "Back": "Back", "Insert date\/time": "\u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u062a\u0627\u0631\u06cc\u062e\/\u0632\u0645\u0627\u0646", "Date\/time": "Date\/time", "Insert\/Edit Link": "\u062f\u0631\u062c\/\u0648\u06cc\u0631\u0627\u06cc\u0634 \u067e\u06cc\u0648\u0646\u062f", "Insert\/edit link": "\u0627\u0636\u0627\u0641\u0647\/\u0648\u06cc\u0631\u0627\u06cc\u0634 \u06a9\u0631\u062f\u0646 \u0644\u06cc\u0646\u06a9", "Text to display": "\u0645\u062a\u0646 \u0628\u0631\u0627\u06cc \u0646\u0645\u0627\u06cc\u0634", "Url": "\u0627\u062f\u0631\u0633 \u0644\u06cc\u0646\u06a9", "Open link in...": "\u0628\u0627\u0632 \u06a9\u0631\u062f\u0646 \u067e\u06cc\u0648\u0646\u062f \u062f\u0631...", "Current window": "\u067e\u0646\u062c\u0631\u0647 \u062c\u0627\u0631\u06cc", "None": "\u0647\u06cc\u0686 \u06a9\u062f\u0627\u0645", "New window": "\u067e\u0646\u062c\u0631\u0647 \u062c\u062f\u06cc\u062f", "Remove link": "\u062d\u0630\u0641 \u0644\u06cc\u0646\u06a9", "Anchors": "\u0644\u0646\u06af\u0631 - \u0644\u06cc\u0646\u06a9 \u062f\u0627\u062e\u0644 \u0635\u0641\u062d\u0647", "Link...": "\u067e\u06cc\u0648\u0646\u062f...", "Paste or type a link": "Paste or type a link", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?", "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?", "Link list": "\u0641\u0647\u0631\u0633\u062a \u067e\u06cc\u0648\u0646\u062f\u0647\u0627", "Insert video": "\u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u0641\u0627\u06cc\u0644 \u062a\u0635\u0648\u06cc\u0631\u06cc", "Insert\/edit video": "\u0627\u0636\u0627\u0641\u0647\/\u0648\u06cc\u0631\u0627\u06cc\u0634 \u06a9\u0631\u062f\u0646 \u0641\u0627\u06cc\u0644 \u062a\u0635\u0648\u06cc\u0631\u06cc", "Insert\/edit media": "Insert\/edit media", "Alternative source": "\u0645\u0646\u0628\u0639 \u062f\u06cc\u06af\u0631", "Alternative source URL": "\u0646\u0634\u0627\u0646\u06cc \u0648\u0628 \u0645\u0646\u0628\u0639 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646", "Media poster (Image URL)": "\u067e\u0648\u0633\u062a\u0631 \u0631\u0633\u0627\u0646\u0647 (\u0646\u0634\u0627\u0646\u06cc \u0648\u0628 \u062a\u0635\u0648\u06cc\u0631)", "Paste your embed code below:": "\u06a9\u062f \u062e\u0648\u062f \u0631\u0627 \u0628\u0631\u0627\u06cc \u062c\u0627 \u062f\u0627\u062f\u0646 \u062f\u0631 \u0633\u0627\u06cc\u062a - embed - \u060c \u062f\u0631 \u0632\u06cc\u0631 \u0642\u0631\u0627\u0631 \u062f\u0647\u06cc\u062f:", "Embed": "\u062c\u0627 \u062f\u0627\u062f\u0646", "Media...": "\u0631\u0633\u0627\u0646\u0647...", "Nonbreaking space": "\u0641\u0636\u0627\u06cc \u063a\u06cc\u0631 \u0634\u06a9\u0633\u062a\u0646", "Page break": "\u0634\u06a9\u0633\u062a\u0646 \u0635\u0641\u062d\u0647", "Paste as text": "\u0686\u0633\u0628\u0627\u0646\u062f\u0646 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062a\u0646", "Preview": "\u067e\u06cc\u0634 \u0646\u0645\u0627\u06cc\u0634", "Print...": "\u0686\u0627\u067e...", "Save": "\u0630\u062e\u06cc\u0631\u0647", "Find": "\u062c\u0633\u062a\u200c\u0648\u200c\u062c\u0648", "Replace with": "\u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u06a9\u0631\u062f\u0646 \u0628\u0627", "Replace": "\u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u06a9\u0631\u062f\u0646", "Replace all": "\u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u06a9\u0631\u062f\u0646 \u0647\u0645\u0647", "Previous": "\u0642\u0628\u0644\u06cc", "Next": "\u0628\u0639\u062f\u06cc", "Find and replace...": "\u06cc\u0627\u0641\u062a\u0646 \u0648 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u06a9\u0631\u062f\u0646...", "Could not find the specified string.": "\u0631\u0634\u062a\u0647 \u0645\u062a\u0646\u06cc \u0645\u0648\u0631\u062f \u0646\u0638\u0631 \u067e\u06cc\u062f\u0627 \u0646\u0634\u062f.", "Match case": "\u062d\u0633\u0627\u0633 \u0628\u0647 \u062d\u0631\u0648\u0641 \u06a9\u0648\u0686\u06a9 \u0648 \u0628\u0632\u0631\u06af", "Find whole words only": "\u06cc\u0627\u0641\u062a\u0646 \u062f\u0642\u06cc\u0642\u0627\u064b \u06a9\u0644 \u0648\u0627\u0698\u0647", "Spell check": "\u0628\u0631\u0631\u0633\u06cc \u0627\u0645\u0644\u0627", "Ignore": "\u0646\u0627\u062f\u06cc\u062f\u0647 \u06af\u0631\u0641\u062a\u0646", "Ignore all": "\u0646\u0627\u062f\u06cc\u062f\u0647 \u06af\u0631\u0641\u062a\u0646 \u0647\u0645\u0647", "Finish": "\u067e\u0627\u06cc\u0627\u0646", "Add to Dictionary": "Add to Dictionary", "Insert table": "\u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u062c\u062f\u0648\u0644", "Table properties": "\u0648\u06cc\u0698\u06af\u06cc\u200c\u0647\u0627\u06cc \u062c\u062f\u0648\u0644", "Delete table": "\u062d\u0630\u0641 \u062c\u062f\u0648\u0644", "Cell": "\u0633\u0644\u0648\u0644", "Row": "\u0633\u0637\u0631", "Column": "\u0633\u062a\u0648\u0646", "Cell properties": "\u0648\u06cc\u0698\u06af\u06cc\u200c\u0647\u0627\u06cc \u0633\u0644\u0648\u0644", "Merge cells": "\u0627\u062f\u063a\u0627\u0645 \u0633\u0644\u0648\u0644\u200c\u0647\u0627", "Split cell": "\u062a\u0642\u0633\u06cc\u0645 \u0633\u0644\u0648\u0644 \u062c\u062f\u0648\u0644", "Insert row before": "\u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u0633\u0637\u0631 \u062c\u062f\u06cc\u062f \u0642\u0628\u0644 \u0627\u0632 \u0627\u06cc\u0646 \u0633\u0637\u0631", "Insert row after": "\u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u0633\u0637\u0631 \u062c\u062f\u06cc\u062f \u0628\u0639\u062f \u0627\u0632 \u0627\u06cc\u0646 \u0633\u0637\u0631", "Delete row": "\u062d\u0630\u0641 \u0633\u0637\u0631", "Row properties": "\u0648\u06cc\u0698\u06af\u06cc\u200c\u0647\u0627\u06cc \u0633\u0637\u0631", "Cut row": "\u0628\u0631\u0634 \u0633\u0637\u0631", "Copy row": "\u06a9\u067e\u06cc \u0633\u0637\u0631", "Paste row before": "\u0686\u0633\u0628\u0627\u0646\u062f\u0646 \u0633\u0637\u0631\u060c \u0642\u0628\u0644 \u0627\u0632 \u0627\u06cc\u0646 \u0633\u0637\u0631", "Paste row after": "\u0686\u0633\u0628\u0627\u0646\u062f\u0646 \u0633\u0637\u0631\u060c \u0628\u0639\u062f \u0627\u0632 \u0627\u06cc\u0646 \u0633\u0637\u0631", "Insert column before": "\u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u0633\u062a\u0648\u0646 \u062c\u062f\u06cc\u062f \u0642\u0628\u0644 \u0627\u0632 \u0627\u06cc\u0646 \u0633\u062a\u0648\u0646", "Insert column after": "\u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u0633\u062a\u0648\u0646 \u062c\u062f\u06cc\u062f \u0628\u0639\u062f \u0627\u0632 \u0627\u06cc\u0646 \u0633\u062a\u0648\u0646", "Delete column": "\u062d\u0630\u0641 \u0633\u062a\u0648\u0646", "Cols": "\u062a\u0639\u062f\u0627\u062f \u0633\u062a\u0648\u0646\u200c\u0647\u0627", "Rows": "\u062a\u0639\u062f\u0627\u062f \u0633\u0637\u0631\u200c\u0647\u0627", "Width": "\u0639\u0631\u0636", "Height": "\u0627\u0631\u062a\u0641\u0627\u0639", "Cell spacing": "\u0641\u0627\u0635\u0644\u0647\u200c\u06cc \u0628\u06cc\u0646 \u0633\u0644\u0648\u0644 \u0647\u0627", "Cell padding": "\u062d\u0627\u0634\u06cc\u0647 \u0633\u0644\u0648\u0644 \u0647\u0627", "Show caption": "\u0646\u0645\u0627\u06cc\u0634 \u0639\u0646\u0648\u0627\u0646", "Left": "\u0686\u067e", "Center": "\u0648\u0633\u0637", "Right": "\u0631\u0627\u0633\u062a", "Cell type": "\u0646\u0648\u0639 \u0633\u0644\u0648\u0644", "Scope": "\u0645\u062d\u062f\u0648\u062f\u0647\u200c\u06cc \u0639\u0646\u0648\u0627\u0646", "Alignment": "\u0631\u062f\u06cc\u0641 \u0628\u0646\u062f\u06cc \u0646\u0648\u0634\u062a\u0647", "H Align": "H Align", "V Align": "V Align", "Top": "Top", "Middle": "Middle", "Bottom": "Bottom", "Header cell": "\u0633\u0631\u0622\u06cc\u0646\u062f \u0633\u0644\u0648\u0644", "Row group": "\u06af\u0631\u0648\u0647 \u0633\u0637\u0631", "Column group": "\u06af\u0631\u0648\u0647 \u0633\u062a\u0648\u0646", "Row type": "\u0646\u0648\u0639 \u0633\u0637\u0631", "Header": "\u0633\u0631\u0622\u06cc\u0646\u062f", "Body": "\u0628\u062f\u0646\u0647", "Footer": "\u067e\u0627\u0646\u0648\u06cc\u0633", "Border color": "Border color", "Insert template...": "\u062f\u0631\u062c \u0627\u0644\u06af\u0648...", "Templates": "\u0627\u0644\u06af\u0648\u200c\u0647\u0627", "Template": "\u0627\u0644\u06af\u0648", "Text color": "\u0631\u0646\u06af \u0645\u062a\u0646", "Background color": "\u0631\u0646\u06af \u0632\u0645\u06cc\u0646\u0647 \u0645\u062a\u0646", "Custom...": "Custom...", "Custom color": "Custom color", "No color": "No color", "Remove color": "\u062d\u0630\u0641 \u0631\u0646\u06af", "Table of Contents": "Table of Contents", "Show blocks": "\u0646\u0645\u0627\u06cc\u0634 \u0628\u062e\u0634\u200c\u0647\u0627", "Show invisible characters": "\u0646\u0645\u0627\u06cc\u0634 \u06a9\u0627\u0631\u0627\u06a9\u062a\u0631\u0647\u0627\u06cc \u063a\u06cc\u0631 \u0642\u0627\u0628\u0644 \u0686\u0627\u067e", "Word count": "\u062a\u0639\u062f\u0627\u062f \u0648\u0627\u0698\u0647\u200c\u0647\u0627", "Count": "\u0634\u0645\u0627\u0631\u0634", "Document": "\u0633\u0646\u062f", "Selection": "\u0627\u0646\u062a\u062e\u0627\u0628", "Words": "\u06a9\u0644\u0645\u0627\u062a", "Words: {0}": "\u06a9\u0644\u0645\u0627\u062a : {0}", "{0} words": "{0} \u0648\u0627\u0698\u0647", "File": "\u067e\u0631\u0648\u0646\u062f\u0647", "Edit": "\u0648\u06cc\u0631\u0627\u06cc\u0634", "Insert": "\u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646", "View": "\u0646\u0645\u0627\u06cc\u0634", "Format": "\u0642\u0627\u0644\u0628", "Table": "\u062c\u062f\u0648\u0644", "Tools": "\u0627\u0628\u0632\u0627\u0631\u0647\u0627", "Powered by {0}": "\u0642\u0648\u062a\u200c\u06af\u0631\u0641\u062a\u0647 \u0627\u0632 {0}", "Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u0648\u06cc\u0631\u0627\u06cc\u0634\u06af\u0631 \u067e\u06cc\u0634\u0631\u0641\u062a\u0647\u200c\u06cc \u0645\u062a\u0646. \u0628\u0631\u0627\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 \u0645\u0646\u0648 \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc ALT-F9\u060c \u0646\u0648\u0627\u0631 \u0627\u0628\u0632\u0627\u0631 ALT-F10 \u0648 \u0628\u0631\u0627\u06cc \u0645\u0634\u0627\u0647\u062f\u0647\u200c\u06cc \u0631\u0627\u0647\u0646\u0645\u0627 ALT-0 \u0631\u0627 \u0641\u0634\u0627\u0631 \u062f\u0647\u06cc\u062f.", "Image title": "\u0639\u0646\u0648\u0627\u0646 \u062a\u0635\u0648\u06cc\u0631", "Border width": "\u0639\u0631\u0636 \u062d\u0627\u0634\u06cc\u0647", "Border style": "\u0633\u0628\u06a9 \u062d\u0627\u0634\u06cc\u0647", "Error": "\u062e\u0637\u0627", "Warn": "\u0647\u0634\u062f\u0627\u0631", "Valid": "\u0645\u0639\u062a\u0628\u0631", "To open the popup, press Shift+Enter": "\u062c\u0647\u062a \u0628\u0627\u0632 \u06a9\u0631\u062f\u0646 \u067e\u0646\u062c\u0631\u0647 \u0628\u0627\u0632\u0634\u0648\u060c \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc Shift + Enter \u0631\u0627 \u0641\u0634\u0627\u0631 \u062f\u0647\u06cc\u062f.", "Rich Text Area. Press ALT-0 for help.": "\u0646\u0627\u062d\u06cc\u0647 \u0645\u062a\u0646 \u063a\u0646\u06cc. \u062c\u0647\u062a \u0645\u0634\u0627\u0647\u062f\u0647\u0654 \u0631\u0627\u0647\u0646\u0645\u0627 \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc ALT + 0 \u0631\u0627 \u0641\u0634\u0627\u0631 \u062f\u0647\u06cc\u062f.", "System Font": "\u0641\u0648\u0646\u062a \u0633\u06cc\u0633\u062a\u0645\u06cc", "Failed to upload image: {0}": "\u0639\u062f\u0645 \u0645\u0648\u0641\u0642\u06cc\u062a \u062f\u0631 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u062a\u0635\u0648\u06cc\u0631: {0}", "Failed to load plugin: {0} from url {1}": "\u0639\u062f\u0645 \u0645\u0648\u0641\u0642\u06cc\u062a \u062f\u0631 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0627\u0641\u0632\u0648\u0646\u0647: {0} \u0627\u0632 \u0646\u0634\u0627\u0646\u06cc \u0648\u0628 {1}", "Failed to load plugin url: {0}": "\u0639\u062f\u0645 \u0645\u0648\u0641\u0642\u06cc\u062a \u062f\u0631 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0646\u0634\u0627\u0646\u06cc \u0648\u0628 \u0627\u0641\u0632\u0648\u0646\u0647: {0}", "Failed to initialize plugin: {0}": "\u0639\u062f\u0645 \u0645\u0648\u0641\u0642\u06cc\u062a \u062f\u0631 \u0631\u0627\u0647\u200c\u0627\u0646\u062f\u0627\u0632\u06cc \u0627\u0641\u0632\u0648\u0646\u0647: {0}", "example": "\u0645\u062b\u0627\u0644", "Search": "\u062c\u0633\u062a\u062c\u0648", "All": "\u0647\u0645\u0647", "Currency": "\u0627\u0631\u0632", "Text": "\u0645\u062a\u0646", "Quotations": "\u0646\u0642\u0644\u200c\u0642\u0648\u0644\u200c\u0647\u0627", "Mathematical": "\u0631\u06cc\u0627\u0636\u06cc", "Extended Latin": "\u0644\u0627\u062a\u06cc\u0646 \u06af\u0633\u062a\u0631\u062f\u0647", "Symbols": "\u0646\u0645\u0627\u062f\u0647\u0627", "Arrows": "\u067e\u06cc\u06a9\u0627\u0646\u200c\u0647\u0627", "User Defined": "\u0628\u0647 \u062e\u0648\u0627\u0633\u062a \u06a9\u0627\u0631\u0628\u0631", "dollar sign": "\u0646\u0645\u0627\u062f \u062f\u0644\u0627\u0631", "currency sign": "\u0646\u0645\u0627\u062f \u0627\u0631\u0632", "euro-currency sign": "\u0646\u0645\u0627\u062f \u06cc\u0648\u0631\u0648", "colon sign": "\u0646\u0645\u0627\u062f \u062f\u0648\u0646\u0642\u0637\u0647", "cruzeiro sign": "\u0646\u0645\u0627\u062f \u06a9\u0631\u0648\u0632\u06cc\u0631\u0648", "french franc sign": "\u0646\u0645\u0627\u062f \u0641\u0631\u0627\u0646\u06a9 \u0641\u0631\u0627\u0646\u0633\u0647", "lira sign": "\u0646\u0645\u0627\u062f \u0644\u06cc\u0631\u0647", "mill sign": "\u0646\u0645\u0627\u062f \u0645\u06cc\u0644", "naira sign": "\u0646\u0645\u0627\u062f \u0646\u0627\u06cc\u0631\u0627", "peseta sign": "\u0646\u0645\u0627\u062f \u067e\u0632\u062a\u0627", "rupee sign": "\u0646\u0645\u0627\u062f \u0631\u0648\u067e\u06cc\u0647", "won sign": "\u0646\u0645\u0627\u062f \u0648\u0648\u0646", "new sheqel sign": "\u0646\u0645\u0627\u062f \u0634\u06a9\u0644 \u062c\u062f\u06cc\u062f", "dong sign": "\u0646\u0645\u0627\u062f \u062f\u0627\u0646\u06af", "kip sign": "\u0646\u0645\u0627\u062f \u06a9\u06cc\u067e", "tugrik sign": "\u0646\u0645\u0627\u062f \u062a\u0648\u06af\u0631\u0648\u06af", "drachma sign": "\u0646\u0645\u0627\u062f \u062f\u0631\u0627\u062e\u0645\u0627", "german penny symbol": "\u0646\u0645\u0627\u062f \u067e\u0646\u06cc \u0622\u0644\u0645\u0627\u0646\u06cc", "peso sign": "\u0646\u0645\u0627\u062f \u067e\u0632\u0648", "guarani sign": "\u0646\u0645\u0627\u062f \u06af\u0648\u0627\u0631\u0627\u0646\u06cc", "austral sign": "\u0646\u0645\u0627\u062f \u0622\u0633\u062a\u0631\u0627\u0644", "hryvnia sign": "\u0646\u0645\u0627\u062f \u06af\u0631\u06cc\u0648\u0646\u0627", "cedi sign": "\u0646\u0645\u0627\u062f \u0633\u062f\u06cc", "livre tournois sign": "\u0646\u0645\u0627\u062f \u0644\u06cc\u0648\u0631\u0647 \u062a\u0648\u0631\u0646\u0648\u0627", "spesmilo sign": "\u0646\u0645\u0627\u062f \u0627\u0633\u067e\u0633\u0645\u06cc\u0644\u0648", "tenge sign": "\u0646\u0645\u0627\u062f \u062a\u0646\u06af\u0647", "indian rupee sign": "\u0646\u0645\u0627\u062f \u0631\u0648\u067e\u06cc\u0647 \u0647\u0646\u062f\u06cc", "turkish lira sign": "\u0646\u0645\u0627\u062f \u0644\u06cc\u0631\u0647 \u062a\u0631\u06a9\u06cc", "nordic mark sign": "\u0646\u0645\u0627\u062f \u0645\u0627\u0631\u06a9 \u0646\u0631\u0648\u0698", "manat sign": "\u0646\u0645\u0627\u062f \u0645\u0646\u0627\u062a", "ruble sign": "\u0646\u0645\u0627\u062f \u0631\u0648\u0628\u0644", "yen character": "\u0646\u0648\u06cc\u0633\u0647 \u06cc\u0646", "yuan character": "\u0646\u0648\u06cc\u0633\u0647 \u06cc\u0648\u0627\u0646", "yuan character, in hong kong and taiwan": "\u0646\u0648\u06cc\u0633\u0647 \u06cc\u0648\u0627\u0646\u060c \u062f\u0631 \u0647\u0646\u06af\u200c\u06a9\u0646\u06af \u0648 \u062a\u0627\u06cc\u0648\u0627\u0646", "yen\/yuan character variant one": "\u0646\u0648\u06cc\u0633\u0647 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u06cc\u0646\/\u06cc\u0648\u0627\u0646", "Loading emoticons...": "\u062f\u0631 \u062d\u0627\u0644 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0634\u06a9\u0644\u06a9\u200c\u0647\u0627...", "Could not load emoticons": "\u0634\u06a9\u0644\u06a9\u200c\u0647\u0627 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0646\u0634\u062f\u0646\u062f", "People": "\u0627\u0641\u0631\u0627\u062f", "Animals and Nature": "\u062d\u06cc\u0648\u0627\u0646\u0627\u062a \u0648 \u0637\u0628\u06cc\u0639\u062a", "Food and Drink": "\u063a\u0630\u0627 \u0648 \u0646\u0648\u0634\u06cc\u062f\u0646\u06cc", "Activity": "\u0641\u0639\u0627\u0644\u06cc\u062a", "Travel and Places": "\u0633\u0641\u0631 \u0648 \u0627\u0645\u0627\u06a9\u0646", "Objects": "\u0627\u0634\u06cc\u0627", "Flags": "\u067e\u0631\u0686\u0645\u200c\u0647\u0627", "Characters": "\u0646\u0648\u06cc\u0633\u0647\u200c\u0647\u0627", "Characters (no spaces)": "\u0646\u0648\u06cc\u0633\u0647 \u0647\u0627 (\u0628\u062f\u0648\u0646 \u0641\u0627\u0635\u0644\u0647)", "{0} characters": "{0} \u06a9\u0627\u0631\u0627\u06a9\u062a\u0631", "Error: Form submit field collision.": "\u062e\u0637\u0627: \u062a\u062f\u0627\u062e\u0644 \u062f\u0631 \u062b\u0628\u062a \u0641\u0631\u0645.", "Error: No form element found.": "\u062e\u0637\u0627: \u0647\u06cc\u0686 \u0627\u0644\u0645\u0627\u0646 \u0641\u0631\u0645\u06cc \u06cc\u0627\u0641\u062a \u0646\u0634\u062f.", "Update": "\u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc", "Color swatch": "\u0646\u0645\u0648\u0646\u0647 \u0631\u0646\u06af", "Turquoise": "\u0641\u06cc\u0631\u0648\u0632\u0647\u200c\u0627\u06cc", "Green": "\u0633\u0628\u0632", "Blue": "\u0622\u0628\u06cc", "Purple": "\u0628\u0646\u0641\u0634", "Navy Blue": "\u0633\u0631\u0645\u0647\u200c\u0627\u06cc", "Dark Turquoise": "\u0641\u06cc\u0631\u0648\u0632\u0647\u200c\u0627\u06cc \u062a\u06cc\u0631\u0647", "Dark Green": "\u0633\u0628\u0632 \u062a\u06cc\u0631\u0647", "Medium Blue": "\u0622\u0628\u06cc \u0633\u06cc\u0631", "Medium Purple": "\u0622\u0628\u06cc \u0628\u0646\u0641\u0634", "Midnight Blue": "\u0622\u0628\u06cc \u0646\u0641\u062a\u06cc", "Yellow": "\u0632\u0631\u062f", "Orange": "\u0646\u0627\u0631\u0646\u062c\u06cc", "Red": "\u0642\u0631\u0645\u0632", "Light Gray": "\u062e\u0627\u06a9\u0633\u062a\u0631\u06cc \u0631\u0648\u0634\u0646", "Gray": "\u062e\u0627\u06a9\u0633\u062a\u0631\u06cc", "Dark Yellow": "\u0632\u0631\u062f \u062a\u06cc\u0631\u0647", "Dark Orange": "\u0646\u0627\u0631\u0646\u062c\u06cc \u062a\u06cc\u0631\u0647", "Dark Red": "\u0642\u0631\u0645\u0632 \u062a\u06cc\u0631\u0647", "Medium Gray": "\u062e\u0627\u06a9\u0633\u062a\u0631\u06cc \u0646\u06cc\u0645\u0647\u200c\u0631\u0648\u0634\u0646", "Dark Gray": "\u062e\u0627\u06a9\u0633\u062a\u0631\u06cc \u062a\u06cc\u0631\u0647", "Light Green": "\u0633\u0628\u0632 \u0631\u0648\u0634\u0646", "Light Yellow": "\u0632\u0631\u062f \u0631\u0648\u0634\u0646", "Light Red": "\u0642\u0631\u0645\u0632 \u0631\u0648\u0634\u0646", "Light Purple": "\u0628\u0646\u0641\u0634 \u0631\u0648\u0634\u0646", "Light Blue": "\u0622\u0628\u06cc \u0631\u0648\u0634\u0646", "Dark Purple": "\u0628\u0646\u0641\u0634 \u062a\u06cc\u0631\u0647", "Dark Blue": "\u0622\u0628\u06cc \u062a\u06cc\u0631\u0647", "Black": "\u0633\u06cc\u0627\u0647", "White": "\u0633\u0641\u06cc\u062f", "Switch to or from fullscreen mode": "\u062a\u063a\u06cc\u06cc\u0631 \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645\u200c\u0635\u0641\u062d\u0647 \u06cc\u0627 \u0628\u0647 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645\u200c\u0635\u0641\u062d\u0647", "Open help dialog": "\u0628\u0627\u0632 \u06a9\u0631\u062f\u0646 \u06a9\u0627\u062f\u0631 \u0631\u0627\u0647\u0646\u0645\u0627", "history": "\u062a\u0627\u0631\u06cc\u062e\u0686\u0647", "styles": "\u0633\u0628\u06a9\u200c\u0647\u0627", "formatting": "\u0642\u0627\u0644\u0628\u200c\u0628\u0646\u062f\u06cc", "alignment": "\u062a\u0631\u0627\u0632\u0628\u0646\u062f\u06cc", "indentation": "\u062a\u0648\u0631\u0641\u062a\u06af\u06cc", "permanent pen": "\u0642\u0644\u0645 \u062f\u0627\u0626\u0645\u06cc", "comments": "\u0646\u0638\u0631\u0627\u062a", "Format Painter": "\u0646\u0642\u0627\u0634 \u0641\u0631\u0645\u062a", "Insert\/edit iframe": "\u062f\u0631\u062c\/\u0648\u06cc\u0631\u0627\u06cc\u0634 iframe", "Capitalization": "\u062d\u0631\u0648\u0641 \u0628\u0632\u0631\u06af", "lowercase": "\u062d\u0631\u0648\u0641 \u06a9\u0648\u0686\u06a9", "UPPERCASE": "\u062d\u0631\u0648\u0641 \u0628\u0632\u0631\u06af", "Title Case": "\u062d\u0631\u0648\u0641 \u062a\u06cc\u062a\u0631\u06cc", "Permanent Pen Properties": "\u0645\u0634\u062e\u0635\u0627\u062a \u062f\u0627\u0626\u0645\u06cc \u0642\u0644\u0645", "Permanent pen properties...": "\u0645\u0634\u062e\u0635\u0627\u062a \u062f\u0627\u0626\u0645\u06cc \u0642\u0644\u0645...", "Font": "\u0641\u0648\u0646\u062a", "Size": "\u0627\u0646\u062f\u0627\u0632\u0647", "More...": "\u0628\u06cc\u0634\u062a\u0631...", "Spellcheck Language": "\u0632\u0628\u0627\u0646 \u0686\u06a9 \u0627\u0633\u067e\u0644\u06cc\u0646\u06af", "Select...": "\u0627\u0646\u062a\u062e\u0627\u0628...", "Preferences": "\u062a\u0631\u062c\u06cc\u062d\u0627\u062a", "Yes": "\u0628\u0644\u0647", "No": "\u062e\u06cc\u0631", "Keyboard Navigation": "\u0645\u0631\u0648\u0631 \u0628\u0627 \u0635\u0641\u062d\u0647 \u06a9\u0644\u06cc\u062f", "Version": "\u0646\u0633\u062e\u0647", "Anchor": "\u0644\u0646\u06af\u0631 - \u0644\u06cc\u0646\u06a9", "Special character": "\u06a9\u0627\u0631\u0627\u06a9\u062a\u0631 \u0647\u0627\u06cc \u062e\u0627\u0635", "Color": "Color", "Emoticons": "\u0634\u06a9\u0644\u06a9\u200c\u0647\u0627", "Document properties": "\u0648\u06cc\u0698\u06af\u06cc\u200c\u0647\u0627\u06cc \u0633\u0646\u062f", "Image": "\u0639\u06a9\u0633", "Insert link": "\u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u0644\u06cc\u0646\u06a9", "Link": "Link", "Target": "\u0646\u062d\u0648\u0647 \u0628\u0627\u0632 \u0634\u062f\u0646 \u062f\u0631 \u0645\u0631\u0648\u0631\u06af\u0631", "Media": "Media", "Poster": "\u067e\u0648\u0633\u062a\u0631", "Print": "\u0686\u0627\u067e", "Whole words": "\u0647\u0645\u0647 \u06a9\u0644\u0645\u0647\u200c\u0647\u0627", "Find and replace": "\u062c\u0633\u062a\u200c\u0648\u200c\u062c\u0648 \u0648 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u06a9\u0631\u062f\u0646", "Prev": "\u0642\u0628\u0644\u06cc", "Spellcheck": "\u0628\u0631\u0631\u0633\u06cc \u0627\u0645\u0644\u0627\u06cc\u06cc", "Caption": "\u0639\u0646\u0648\u0627\u0646", "Insert template": "\u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u0627\u0644\u06af\u0648", "_dir": "rtl" }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/tinymce/langs/fa_IR.js ================================================ tinymce.addI18n('fa_IR',{ "Redo": "\u0628\u0627\u0632\u0627\u0646\u062c\u0627\u0645", "Undo": "\u0648\u0627\u06af\u0631\u062f", "Cut": "\u0628\u0631\u0634", "Copy": "\u06a9\u067e\u06cc", "Paste": "\u0686\u0633\u0628\u0627\u0646\u062f\u0646", "Select all": "\u0627\u0646\u062a\u062e\u0627\u0628 \u0647\u0645\u0647", "New document": "\u0633\u0646\u062f \u062c\u062f\u06cc\u062f", "Ok": "\u062a\u0623\u06cc\u06cc\u062f", "Cancel": "\u0644\u063a\u0648", "Visual aids": "\u06a9\u0645\u06a9\u200c\u0647\u0627\u06cc \u0628\u0635\u0631\u06cc", "Bold": "\u067e\u0631\u0631\u0646\u06af", "Italic": "\u06a9\u062c", "Underline": "\u0632\u06cc\u0631 \u062e\u0637 \u062f\u0627\u0631", "Strikethrough": "\u062e\u0637 \u0632\u062f\u0646", "Superscript": "\u0628\u0627\u0644\u0627\u0646\u06af\u0627\u0634\u062a", "Subscript": "\u0632\u06cc\u0631\u0646\u06af\u0627\u0634\u062a", "Clear formatting": "\u067e\u0627\u06a9 \u06a9\u0631\u062f\u0646 \u0642\u0627\u0644\u0628\u200c\u0628\u0646\u062f\u06cc", "Align left": "\u062a\u0631\u0627\u0632\u0628\u0646\u062f\u06cc \u0627\u0632 \u0686\u067e", "Align center": "\u062a\u0631\u0627\u0632\u0628\u0646\u062f\u06cc \u0627\u0632 \u0648\u0633\u0637", "Align right": "\u062a\u0631\u0627\u0632\u0628\u0646\u062f\u06cc \u0627\u0632 \u0631\u0627\u0633\u062a", "Justify": "\u062a\u0631\u0627\u0632\u0628\u0646\u062f\u06cc \u062f\u0648\u0637\u0631\u0641\u0647", "Bullet list": "\u0641\u0647\u0631\u0633\u062a \u0646\u0634\u0627\u0646\u0647\u200c\u062f\u0627\u0631", "Numbered list": "\u0641\u0647\u0631\u0633\u062a \u0634\u0645\u0627\u0631\u0647\u200c\u062f\u0627\u0631", "Decrease indent": "\u06a9\u0627\u0647\u0634 \u062a\u0648\u0631\u0641\u062a\u06af\u06cc", "Increase indent": "\u0627\u0641\u0632\u0627\u06cc\u0634 \u062a\u0648\u0631\u0641\u062a\u06af\u06cc", "Close": "\u0628\u0633\u062a\u0646", "Formats": "\u0642\u0627\u0644\u0628\u200c\u0628\u0646\u062f\u06cc\u200c\u0647\u0627", "Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u0645\u0631\u0648\u0631\u06af\u0631 \u0634\u0645\u0627 \u0627\u0632 \u062f\u0633\u062a\u0631\u0633\u06cc \u0645\u0633\u062a\u0642\u06cc\u0645 \u0628\u0647 \u06a9\u0644\u06cc\u067e\u200c\u0628\u0648\u0631\u062f \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0646\u0645\u06cc\u200c\u06a9\u0646\u062f\u060c \u0644\u0637\u0641\u0627\u064b \u0627\u0632 \u0645\u06cc\u0627\u0646\u0628\u0631\u0647\u0627\u06cc Ctrl+X\/C\/V \u0635\u0641\u062d\u0647 \u06a9\u0644\u06cc\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.", "Headers": "\u0633\u0631\u0628\u0631\u06af\u200c\u0647\u0627", "Header 1": "\u0633\u0631\u0628\u0631\u06af 1", "Header 2": "\u0633\u0631\u0628\u0631\u06af 2", "Header 3": "\u0633\u0631\u0628\u0631\u06af 3", "Header 4": "\u0633\u0631\u0628\u0631\u06af 4", "Header 5": "\u0633\u0631\u0628\u0631\u06af 5", "Header 6": "\u0633\u0631\u0628\u0631\u06af 6", "Headings": "\u0633\u0631\u0641\u0635\u0644\u200c\u0647\u0627", "Heading 1": "\u0633\u0631\u0641\u0635\u0644\u200c 1", "Heading 2": "\u0633\u0631\u0641\u0635\u0644 2", "Heading 3": "\u0633\u0631\u0641\u0635\u0644 3", "Heading 4": "\u0633\u0631\u0641\u0635\u0644 4", "Heading 5": "\u0633\u0631\u0641\u0635\u0644 5", "Heading 6": "\u0633\u0631\u0641\u0635\u0644 6", "Preformatted": "\u0627\u0632 \u067e\u06cc\u0634 \u0642\u0627\u0644\u0628\u200c\u0628\u0646\u062f\u06cc\u200c\u0634\u062f\u0647", "Div": "\u0628\u062e\u0634", "Pre": "\u067e\u06cc\u0634", "Code": "\u06a9\u062f", "Paragraph": "\u067e\u0627\u0631\u0627\u06af\u0631\u0627\u0641", "Blockquote": "\u0646\u0642\u0644 \u0642\u0648\u0644 \u0628\u0644\u0648\u06a9\u06cc", "Inline": "\u0647\u0645\u200c\u0631\u0627\u0633\u062a\u0627", "Blocks": "\u0628\u0644\u0648\u06a9\u200c\u0647\u0627", "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u0627\u0645\u06a9\u0627\u0646 \u0686\u0633\u0628\u0627\u0646\u062f\u0646\u060c \u062f\u0631 \u062d\u0627\u0644\u062a \u0645\u062a\u0646 \u062e\u0627\u0644\u0635 \u062a\u0646\u0638\u06cc\u0645 \u06af\u0634\u062a\u0647. \u062a\u0627 \u0632\u0645\u0627\u0646 \u062a\u063a\u06cc\u06cc\u0631 \u0627\u06cc\u0646 \u062d\u0627\u0644\u062a\u060c \u0645\u062d\u062a\u0648\u0627\u06cc \u0645\u0648\u0631\u062f \u0686\u0633\u0628\u0627\u0646\u062f\u0646\u060c \u0628\u0647 \u0635\u0648\u0631\u062a \u0645\u062a\u0646 \u062e\u0627\u0644\u0635 \u062e\u0648\u0627\u0647\u062f \u0686\u0633\u0628\u06cc\u062f.", "Fonts": "\u0641\u0648\u0646\u062a\u200c\u200c\u0647\u0627", "Font Sizes": "\u0627\u0646\u062f\u0627\u0632\u0647\u0654 \u0641\u0648\u0646\u062a", "Class": "\u0637\u0628\u0642\u0647", "Browse for an image": "\u06af\u0634\u062a\u0646 \u0628\u0631\u0627\u06cc \u0639\u06a9\u0633 \u0645\u0648\u0631\u062f \u0646\u0638\u0631", "OR": "\u06cc\u0627", "Drop an image here": "\u062a\u0635\u0648\u06cc\u0631 \u0645\u0648\u0631\u062f \u0646\u0638\u0631 \u0631\u0627 \u0627\u06cc\u0646\u062c\u0627 \u0631\u0647\u0627 \u06a9\u0646\u06cc\u062f", "Upload": "\u0622\u067e\u0644\u0648\u062f", "Block": "\u0628\u0644\u0648\u06a9", "Align": "\u062a\u0631\u0627\u0632\u0628\u0646\u062f\u06cc", "Default": "\u067e\u06cc\u0634 \u0641\u0631\u0636", "Circle": "\u062f\u0627\u06cc\u0631\u0647", "Disc": "\u062f\u0627\u06cc\u0631\u0647\u0621 \u062a\u0648\u067e\u0631", "Square": "\u0686\u0647\u0627\u0631 \u06af\u0648\u0634", "Lower Alpha": "\u062d\u0631\u0648\u0641 \u06a9\u0648\u0686\u06a9", "Lower Greek": "\u062d\u0631\u0648\u0641 \u06a9\u0648\u0686\u06a9 \u06cc\u0648\u0646\u0627\u0646\u06cc", "Lower Roman": "\u0627\u0631\u0642\u0627\u0645 \u06a9\u0648\u0686\u06a9 \u0631\u0648\u0645\u06cc", "Upper Alpha": "\u062d\u0631\u0648\u0641 \u0628\u0632\u0631\u06af", "Upper Roman": "\u0627\u0631\u0642\u0627\u0645 \u0628\u0632\u0631\u06af \u0631\u0648\u0645\u06cc", "Anchor...": "\u0642\u0644\u0627\u0628...", "Name": "\u0646\u0627\u0645", "Id": "\u0634\u0646\u0627\u0633\u0647", "Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "\u0634\u0646\u0627\u0633\u0647 \u0645\u06cc \u0628\u0627\u06cc\u0633\u062a \u0628\u0627 \u06cc\u06a9 \u062d\u0631\u0641 \u0627\u0644\u0641\u0628\u0627 \u0622\u063a\u0627\u0632 \u0648 \u0628\u0627 \u062f\u0646\u0628\u0627\u0644\u0647 \u0627\u06cc \u0627\u0632 \u062d\u0631\u0648\u0641\u060c \u0627\u0639\u062f\u0627\u062f\u060c \u0639\u0644\u0627\u0645\u062a \u0645\u0650\u0646\u0647\u0627\u060c \u0646\u0642\u0637\u0647\u060c \u062f\u0648 \u0646\u0642\u0637\u0647 \u06cc\u0627 \u062e\u0637 \u062a\u06cc\u0631\u0647 \u0627\u062f\u0627\u0645\u0647 \u06cc\u0627\u0628\u062f.", "You have unsaved changes are you sure you want to navigate away?": "\u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0634\u0645\u0627 \u0630\u062e\u06cc\u0631\u0647 \u0646\u0634\u062f\u0647 \u0627\u0646\u062f\u060c \u0622\u06cc\u0627 \u062c\u0647\u062a \u062e\u0631\u0648\u062c \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u062f\u0627\u0631\u06cc\u062f\u061f", "Restore last draft": "\u0628\u0627\u0632\u06cc\u0627\u0628\u06cc \u0622\u062e\u0631\u06cc\u0646 \u067e\u06cc\u0634 \u0646\u0648\u06cc\u0633", "Special characters...": "\u0646\u0648\u06cc\u0633\u0647\u200c\u0647\u0627\u06cc \u0648\u06cc\u0698\u0647...", "Source code": "\u0645\u062a\u0646 \u06a9\u062f \u0645\u0646\u0628\u0639", "Insert\/Edit code sample": "\u062f\u0631\u062c\/\u0648\u06cc\u0631\u0627\u06cc\u0634 \u0646\u0645\u0648\u0646\u0647\u0621 \u06a9\u062f", "Language": "\u0632\u0628\u0627\u0646", "Code sample...": "\u0646\u0645\u0648\u0646\u0647 \u06a9\u062f...", "Color Picker": "\u0627\u0646\u062a\u062e\u0627\u0628\u200c\u06a9\u0646\u0646\u062f\u0647 \u0631\u0646\u06af", "R": "\u0642\u0631\u0645\u0632", "G": "\u0633\u0628\u0632", "B": "\u0622\u0628\u06cc", "Left to right": "\u0686\u067e \u0628\u0647 \u0631\u0627\u0633\u062a", "Right to left": "\u0631\u0627\u0633\u062a \u0628\u0647 \u0686\u067e", "Emoticons...": "\u0635\u0648\u0631\u062a\u06a9\u200c\u0647\u0627...", "Metadata and Document Properties": "\u0641\u0631\u0627\u062f\u0627\u062f\u0647 \u0648 \u0645\u0634\u062e\u0635\u0627\u062a \u0633\u0646\u062f", "Title": "\u0639\u0646\u0648\u0627\u0646", "Keywords": "\u0648\u0627\u0698\u06af\u0627\u0646 \u06a9\u0644\u06cc\u062f\u06cc", "Description": "\u062a\u0648\u0636\u06cc\u062d", "Robots": "\u0631\u0648\u0628\u0627\u062a\u0647\u0627", "Author": "\u0645\u0648\u0644\u0641", "Encoding": "\u06a9\u062f\u06af\u0632\u0627\u0631\u06cc \u0645\u062a\u0646", "Fullscreen": "\u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647", "Action": "\u0639\u0645\u0644", "Shortcut": "\u0645\u06cc\u0627\u0646\u0628\u064f\u0631", "Help": "\u0631\u0627\u0647\u0646\u0645\u0627", "Address": "\u0646\u0634\u0627\u0646\u06cc", "Focus to menubar": "\u062a\u0645\u0631\u06a9\u0632 \u0628\u0631 \u0646\u0648\u0627\u0631 \u0645\u0646\u0648", "Focus to toolbar": "\u062a\u0645\u0631\u06a9\u0632 \u0628\u0631 \u0646\u0648\u0627\u0631 \u0627\u0628\u0632\u0627\u0631", "Focus to element path": "\u062a\u0645\u0631\u06a9\u0632 \u0628\u0631 \u0645\u0633\u06cc\u0631 \u0627\u0650\u0644\u0650\u0645\u0627\u0646", "Focus to contextual toolbar": "\u062a\u0645\u0631\u06a9\u0632 \u0628\u0631 \u0646\u0648\u0627\u0631 \u0627\u0628\u0632\u0627\u0631 \u0645\u062a\u0646\u06cc", "Insert link (if link plugin activated)": "\u062f\u0631\u062c \u067e\u06cc\u0648\u0646\u062f (\u0627\u06af\u0631 \u0627\u0641\u0632\u0648\u0646\u0647\u0621 \u067e\u06cc\u0648\u0646\u062f \u0641\u0639\u0627\u0644 \u0634\u062f)", "Save (if save plugin activated)": "\u062b\u0628\u062a\u00a0(\u0627\u06af\u0631 \u0627\u0641\u0632\u0648\u0646\u0647\u0621 \u0630\u062e\u06cc\u0631\u0647 \u0633\u0627\u0632\u06cc \u0641\u0639\u0627\u0644 \u0634\u062f)", "Find (if searchreplace plugin activated)": "\u06cc\u0627\u0641\u062a\u0646 (\u0627\u06af\u0631 \u0627\u0641\u0632\u0648\u0646\u0647\u0621 \u062c\u0633\u062a\u062c\u0648\/\u062c\u0627\u06cc\u06af\u0632\u06cc\u0646\u06cc \u0641\u0639\u0627\u0644 \u0634\u062f)", "Plugins installed ({0}):": "\u0627\u0641\u0632\u0648\u0646\u0647 \u0647\u0627\u06cc\u06cc \u06a9\u0647 \u0646\u0635\u0628 \u0634\u062f\u0646\u062f ({0}):", "Premium plugins:": "\u0627\u0641\u0632\u0648\u0646\u0647 \u0647\u0627\u06cc \u0645\u062e\u0635\u0648\u0635:", "Learn more...": "\u06cc\u0627\u062f\u06af\u06cc\u0631\u06cc \u0628\u06cc\u0634\u062a\u0631...", "You are using {0}": "\u0634\u0645\u0627 \u062f\u0631 \u062d\u0627\u0644 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 {0} \u0645\u06cc \u0628\u0627\u0634\u06cc\u062f", "Plugins": "\u0627\u0641\u0632\u0648\u0646\u0647 \u0647\u0627", "Handy Shortcuts": "\u0645\u06cc\u0627\u0646\u0628\u064f\u0631\u0647\u0627\u06cc \u0633\u0648\u062f\u0645\u0646\u062f", "Horizontal line": "\u062e\u0637 \u0627\u0641\u0642\u06cc", "Insert\/edit image": "\u062f\u0631\u062c\/\u0648\u06cc\u0631\u0627\u06cc\u0634 \u062a\u0635\u0648\u06cc\u0631", "Image description": "\u062a\u0648\u0635\u06cc\u0641 \u062a\u0635\u0648\u06cc\u0631", "Source": "\u0645\u0646\u0628\u0639", "Dimensions": "\u0627\u0628\u0639\u0627\u062f", "Constrain proportions": "\u062d\u0641\u0638 \u062a\u0646\u0627\u0633\u0628", "General": "\u0639\u0645\u0648\u0645\u06cc", "Advanced": "\u067e\u06cc\u0634\u0631\u0641\u062a\u0647", "Style": "\u0633\u0628\u06a9", "Vertical space": "\u0641\u0636\u0627\u06cc \u0639\u0645\u0648\u062f\u06cc", "Horizontal space": "\u0641\u0636\u0627\u06cc \u0627\u0641\u0642\u06cc", "Border": "\u0644\u0628\u0647", "Insert image": "\u062f\u0631\u062c \u062a\u0635\u0648\u06cc\u0631", "Image...": "\u062a\u0635\u0648\u06cc\u0631...", "Image list": "\u0641\u0647\u0631\u0633\u062a \u062a\u0635\u0648\u06cc\u0631\u06cc", "Rotate counterclockwise": "\u062f\u064e\u0648\u064e\u0631\u0627\u0646 \u067e\u0627\u062f \u0633\u0627\u0639\u062a \u06af\u0631\u062f", "Rotate clockwise": "\u062f\u064e\u0648\u064e\u0631\u0627\u0646 \u0633\u0627\u0639\u062a \u06af\u0631\u062f", "Flip vertically": "\u0642\u0631\u06cc\u0646\u0647 \u0639\u0645\u0648\u062f\u06cc", "Flip horizontally": "\u0642\u0631\u06cc\u0646\u0647 \u0627\u0641\u0642\u06cc", "Edit image": "\u0648\u06cc\u0631\u0627\u0633\u062a \u062a\u0635\u0648\u06cc\u0631", "Image options": "\u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u062a\u0635\u0648\u06cc\u0631", "Zoom in": "\u0628\u0632\u0631\u06af \u0646\u0645\u0627\u06cc\u06cc", "Zoom out": "\u06a9\u0648\u0686\u06a9 \u0646\u0645\u0627\u06cc\u06cc", "Crop": "\u0628\u064f\u0631\u0634 \u062f\u064f\u0648\u0631", "Resize": "\u062a\u063a\u06cc\u06cc\u0631 \u0627\u0646\u062f\u0627\u0632\u0647", "Orientation": "\u06af\u0650\u0631\u0627", "Brightness": "\u0631\u0648\u0634\u0646\u0627\u06cc\u06cc", "Sharpen": "\u0628\u0647\u0628\u0648\u062f \u0644\u0628\u0647", "Contrast": "\u062a\u0636\u0627\u062f \u0631\u0646\u06af", "Color levels": "\u0633\u0637\u0648\u062d \u0631\u0646\u06af", "Gamma": "\u06af\u0627\u0645\u0627", "Invert": "\u0628\u0631\u06af\u0634\u062a \u0631\u0646\u06af", "Apply": "\u0627\u0650\u0639\u0645\u0627\u0644", "Back": "\u0628\u0627\u0632\u06af\u0634\u062a", "Insert date\/time": "\u062f\u0631\u062c \u062a\u0627\u0631\u06cc\u062e\/\u0632\u0645\u0627\u0646", "Date\/time": "\u062a\u0627\u0631\u06cc\u062e\/\u0632\u0645\u0627\u0646", "Insert\/Edit Link": "\u062f\u0631\u062c\/\u0648\u06cc\u0631\u0627\u06cc\u0634 \u067e\u06cc\u0648\u0646\u062f", "Insert\/edit link": "\u062f\u0631\u062c\/\u0648\u06cc\u0631\u0627\u06cc\u0634 \u067e\u06cc\u0648\u0646\u062f", "Text to display": "\u0645\u062a\u0646 \u0646\u0645\u0627\u06cc\u0634\u06cc", "Url": "\u0622\u062f\u0631\u0633", "Open link in...": "\u0628\u0627\u0632 \u06a9\u0631\u062f\u0646 \u067e\u06cc\u0648\u0646\u062f \u062f\u0631...", "Current window": "\u067e\u0646\u062c\u0631\u0647 \u062c\u0627\u0631\u06cc", "None": "\u0647\u06cc\u0686", "New window": "\u067e\u0646\u062c\u0631\u0647\u0621 \u062c\u062f\u06cc\u062f", "Remove link": "\u062d\u0630\u0641 \u067e\u06cc\u0648\u0646\u062f", "Anchors": "\u0642\u0644\u0627\u0628 \u0647\u0627", "Link...": "\u067e\u06cc\u0648\u0646\u062f...", "Paste or type a link": "\u0686\u0633\u0628\u0627\u0646\u062f\u0646 \u06cc\u0627 \u062a\u0627\u06cc\u067e \u067e\u06cc\u0648\u0646\u062f", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u0628\u0647 \u0646\u0638\u0631 \u0645\u06cc \u0631\u0633\u062f \u0622\u062f\u0631\u0633 \u0648\u0631\u0648\u062f\u06cc \u06cc\u06a9 \u0631\u0627\u06cc\u0627\u0646\u0627\u0645\u0647 \u0628\u0627\u0634\u062f. \u0622\u06cc\u0627 \u062a\u0645\u0627\u06cc\u0644 \u0628\u0647 \u0627\u0641\u0632\u0648\u0631\u062f\u0646 \u067e\u06cc\u0634\u0648\u0646\u062f mailto: \u062f\u0627\u0631\u06cc\u062f\u061f", "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\u0628\u0647 \u0646\u0638\u0631 \u0645\u06cc \u0631\u0633\u062f \u0622\u062f\u0631\u0633 \u0648\u0631\u0648\u062f\u06cc \u0627\u0631\u062c\u0627\u0639\u06cc \u0628\u0647 \u062e\u0627\u0631\u062c \u0627\u0632 \u0627\u06cc\u0646 \u0633\u0627\u06cc\u062a \u0645\u06cc \u0628\u0627\u0634\u062f. \u0622\u06cc\u0627 \u062a\u0645\u0627\u06cc\u0644 \u0628\u0647 \u0627\u0641\u0632\u0648\u0631\u062f\u0646 \u067e\u06cc\u0634\u0648\u0646\u062f http:\/\/ \u062f\u0627\u0631\u06cc\u062f\u061f", "Link list": "\u0641\u0647\u0631\u0633\u062a \u067e\u06cc\u0648\u0646\u062f", "Insert video": "\u062f\u0631\u062c \u0648\u06cc\u062f\u06cc\u0648", "Insert\/edit video": "\u062f\u0631\u062c\/\u0648\u06cc\u0631\u0627\u06cc\u0634 \u0648\u06cc\u062f\u06cc\u0648", "Insert\/edit media": "\u062f\u0631\u062c\/\u0648\u06cc\u0631\u0627\u06cc\u0634 \u0631\u0633\u0627\u0646\u0647", "Alternative source": "\u0645\u0646\u0628\u0639 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646", "Alternative source URL": "\u0646\u0634\u0627\u0646\u06cc \u0648\u0628 \u0645\u0646\u0628\u0639 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646", "Media poster (Image URL)": "\u067e\u0648\u0633\u062a\u0631 \u0631\u0633\u0627\u0646\u0647 (\u0646\u0634\u0627\u0646\u06cc \u0648\u0628 \u062a\u0635\u0648\u06cc\u0631)", "Paste your embed code below:": "\u0686\u0633\u0628\u0627\u0646\u062f\u0646 \u06a9\u062f \u062c\u0627\u0633\u0627\u0632\u06cc \u0634\u0645\u0627 \u062f\u0631 \u0632\u06cc\u0631: ", "Embed": "\u062c\u0627\u0633\u0627\u0632\u06cc", "Media...": "\u0631\u0633\u0627\u0646\u0647...", "Nonbreaking space": "\u0641\u0636\u0627\u06cc \u062e\u0627\u0644\u06cc \u0628\u0631\u0634 \u0646\u0627\u067e\u0630\u06cc\u0631", "Page break": "\u0628\u0631\u0634 \u0635\u0641\u062d\u0647", "Paste as text": "\u0686\u0633\u0628\u0627\u0646\u062f\u0646 \u0645\u062a\u0646", "Preview": "\u067e\u06cc\u0634 \u0646\u0645\u0627\u06cc\u0634", "Print...": "\u0686\u0627\u067e...", "Save": "\u0630\u062e\u06cc\u0631\u0647", "Find": "\u062c\u0633\u062a\u062c\u0648", "Replace with": "\u062c\u0627\u06cc\u06af\u0632\u06cc\u0646\u06cc \u0628\u0627", "Replace": "\u062c\u0627\u06cc\u06af\u0632\u06cc\u0646\u06cc", "Replace all": "\u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u0647\u0645\u0647", "Previous": "\u0642\u0628\u0644\u06cc", "Next": "\u0628\u0639\u062f\u06cc", "Find and replace...": "\u06cc\u0627\u0641\u062a\u0646 \u0648 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u06a9\u0631\u062f\u0646...", "Could not find the specified string.": "\u0631\u0634\u062a\u0647\u0621 \u0645\u0648\u0631\u062f \u0646\u0638\u0631 \u06cc\u0627\u0641\u062a \u0646\u06af\u0631\u062f\u06cc\u062f.", "Match case": "\u062a\u0637\u0627\u0628\u0642 \u062d\u0631\u0648\u0641", "Find whole words only": "\u06cc\u0627\u0641\u062a\u0646 \u062f\u0642\u06cc\u0642\u0627\u064b \u06a9\u0644 \u0648\u0627\u0698\u0647", "Spell check": "\u0628\u0631\u0631\u0633\u06cc \u0627\u0645\u0644\u0627", "Ignore": "\u0628\u06cc \u062e\u06cc\u0627\u0644", "Ignore all": "\u0628\u06cc \u062e\u06cc\u0627\u0644 \u0647\u0645\u0647", "Finish": "\u0627\u062a\u0645\u0627\u0645", "Add to Dictionary": "\u0628\u0647 \u0648\u0627\u0698\u0647 \u0646\u0627\u0645\u0647 \u0628\u06cc \u0627\u0641\u0632\u0627", "Insert table": "\u062f\u0631\u062c \u062c\u062f\u0648\u0644", "Table properties": "\u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u062c\u062f\u0648\u0644", "Delete table": "\u062d\u0630\u0641 \u062c\u062f\u0648\u0644", "Cell": "\u0633\u0644\u0648\u0644", "Row": "\u0633\u0637\u0631", "Column": "\u0633\u062a\u0648\u0646", "Cell properties": "\u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0633\u0644\u0648\u0644", "Merge cells": "\u067e\u06cc\u0648\u0646\u062f \u0633\u0644\u0648\u0644 \u0647\u0627", "Split cell": "\u062c\u062f\u0627 \u0633\u0627\u0632\u06cc \u0633\u0644\u0648\u0644", "Insert row before": "\u062f\u0631\u062c \u0633\u0637\u0631 \u062f\u0631 \u0628\u0627\u0644\u0627", "Insert row after": "\u062f\u0631\u062c \u0633\u0637\u0631 \u062f\u0631 \u067e\u0627\u06cc\u06cc\u0646", "Delete row": "\u062d\u0630\u0641 \u0633\u0637\u0631", "Row properties": "\u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0633\u0637\u0631", "Cut row": "\u0628\u0631\u0634 \u0633\u0637\u0631", "Copy row": "\u0631\u0648\u0646\u0648\u06cc\u0633\u06cc \u0633\u0637\u0631", "Paste row before": "\u0686\u0633\u0628\u0627\u0646\u062f\u0646 \u0633\u0637\u0631 \u062f\u0631 \u0628\u0627\u0644\u0627", "Paste row after": "\u0686\u0633\u0628\u0627\u0646\u062f\u0646 \u0633\u0637\u0631 \u062f\u0631 \u067e\u0627\u06cc\u06cc\u0646", "Insert column before": "\u062f\u0631\u062c \u0633\u062a\u0648\u0646 \u0642\u0628\u0644", "Insert column after": "\u062f\u0631\u062c \u0633\u062a\u0648\u0646 \u0628\u0639\u062f", "Delete column": "\u062d\u0630\u0641 \u0633\u062a\u0648\u0646", "Cols": "\u0633\u062a\u0648\u0646 \u0647\u0627", "Rows": "\u0633\u0637\u0631 \u0647\u0627", "Width": "\u0639\u0631\u0636", "Height": "\u0627\u0631\u062a\u0641\u0627\u0639", "Cell spacing": "\u0641\u0627\u0635\u0644\u0647 \u0645\u06cc\u0627\u0646 \u0633\u0644\u0648\u0644\u06cc", "Cell padding": "\u062d\u0627\u0634\u06cc\u0647 \u062f\u0631\u0648\u0646 \u0633\u0644\u0648\u0644\u06cc", "Show caption": "\u0646\u0645\u0627\u06cc\u0634 \u0639\u0646\u0648\u0627\u0646", "Left": "\u0686\u067e", "Center": "\u0645\u06cc\u0627\u0646\u0647", "Right": "\u0631\u0627\u0633\u062a", "Cell type": "\u0646\u0648\u0639 \u0633\u0644\u0648\u0644", "Scope": "\u062d\u0648\u0632\u0647", "Alignment": "\u0647\u0645 \u062a\u0631\u0627\u0632\u06cc", "H Align": "\u062a\u0631\u0627\u0632 \u0627\u0641\u0642\u06cc", "V Align": "\u062a\u0631\u0627\u0632 \u0639\u0645\u0648\u062f\u06cc", "Top": "\u0628\u0627\u0644\u0627", "Middle": "\u0645\u06cc\u0627\u0646\u0647", "Bottom": "\u067e\u0627\u06cc\u06cc\u0646", "Header cell": "\u0633\u0644\u0648\u0644 \u0633\u0631 \u0633\u062a\u0648\u0646", "Row group": "\u06af\u0631\u0648\u0647 \u0633\u0637\u0631\u06cc", "Column group": "\u06af\u0631\u0648\u0647 \u0633\u062a\u0648\u0646\u06cc", "Row type": "\u0646\u0648\u0639 \u0633\u0637\u0631", "Header": "\u0633\u0631 \u0622\u0645\u062f", "Body": "\u0628\u062f\u0646\u0647", "Footer": "\u067e\u0627 \u0646\u0648\u0634\u062a", "Border color": "\u0631\u0646\u06af \u0644\u0628\u0647", "Insert template...": "\u062f\u0631\u062c \u0627\u0644\u06af\u0648...", "Templates": "\u0627\u0644\u06af\u0648\u0647\u0627", "Template": "\u0627\u0644\u06af\u0648", "Text color": "\u0631\u0646\u06af \u0645\u062a\u0646", "Background color": "\u0631\u0646\u06af \u067e\u0633 \u0632\u0645\u06cc\u0646\u0647", "Custom...": "\u062f\u0644\u062e\u0648\u0627\u0647...", "Custom color": "\u0631\u0646\u06af \u062f\u0644\u062e\u0648\u0627\u0647", "No color": "\u0628\u062f\u0648\u0646 \u0631\u0646\u06af", "Remove color": "\u062d\u0630\u0641 \u0631\u0646\u06af", "Table of Contents": "\u0641\u0647\u0631\u0633\u062a \u0639\u0646\u0627\u0648\u06cc\u0646", "Show blocks": "\u0646\u0645\u0627\u06cc\u0634 \u0628\u0644\u0648\u06a9 \u0647\u0627", "Show invisible characters": "\u0646\u0645\u0627\u06cc\u0634 \u0646\u0648\u06cc\u0633\u0647 \u0647\u0627\u06cc \u0646\u0627\u067e\u06cc\u062f\u0627", "Word count": "\u062a\u0639\u062f\u0627\u062f \u0648\u0627\u0698\u0647\u200c\u0647\u0627", "Words: {0}": "\u0648\u0627\u0698\u0647 \u0647\u0627: {0}", "{0} words": "{0} \u0648\u0627\u0698\u0647", "File": "\u067e\u0631\u0648\u0646\u062f\u0647", "Edit": "\u0648\u06cc\u0631\u0627\u06cc\u0634", "Insert": "\u062f\u0631\u062c", "View": "\u0646\u0645\u0627\u06cc\u0634", "Format": "\u0642\u0627\u0644\u0628", "Table": "\u062c\u062f\u0648\u0644", "Tools": "\u0627\u0628\u0632\u0627\u0631\u0647\u0627", "Powered by {0}": "\u062a\u0648\u0627\u0646 \u06af\u0631\u0641\u062a\u0647 \u0627\u0632 {0}", "Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u0646\u0627\u062d\u06cc\u0647 \u0645\u062a\u0646 \u063a\u0646\u06cc.\n\u062c\u0647\u062a \u0645\u0634\u0627\u0647\u062f\u0647 \u0645\u0646\u0648 \u0627\u0632 \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc \u062a\u0631\u06a9\u06cc\u0628\u06cc ALT + F9 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0646\u0645\u0627\u06cc\u06cc\u062f.\n\u062c\u0647\u062a \u0645\u0634\u0627\u0647\u062f\u0647 \u0646\u0648\u0627\u0631 \u0627\u0628\u0632\u0627\u0631 \u0627\u0632 \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc \u062a\u0631\u06a9\u06cc\u0628\u06cc ALT + F10 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0646\u0645\u0627\u06cc\u06cc\u062f.\n\u062c\u0647\u062a \u0645\u0634\u0627\u0647\u062f\u0647 \u0631\u0627\u0647\u0646\u0645\u0627 \u0627\u0632 \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc \u062a\u0631\u06a9\u06cc\u0628\u06cc ALT + 0 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0646\u0645\u0627\u06cc\u06cc\u062f.", "Image title": "\u0639\u0646\u0648\u0627\u0646 \u062a\u0635\u0648\u06cc\u0631", "Border width": "\u0639\u0631\u0636 \u062d\u0627\u0634\u06cc\u0647", "Border style": "\u0633\u0628\u06a9 \u062d\u0627\u0634\u06cc\u0647", "Error": "\u062e\u0637\u0627", "Warn": "\u0647\u0634\u062f\u0627\u0631", "Valid": "\u0645\u0639\u062a\u0628\u0631", "To open the popup, press Shift+Enter": "\u062c\u0647\u062a \u0628\u0627\u0632 \u06a9\u0631\u062f\u0646 \u067e\u0646\u062c\u0631\u0647 \u0628\u0627\u0632\u0634\u0648\u060c \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc Shift + Enter \u0631\u0627 \u0641\u0634\u0627\u0631 \u062f\u0647\u06cc\u062f.", "Rich Text Area. Press ALT-0 for help.": "\u0646\u0627\u062d\u06cc\u0647 \u0645\u062a\u0646 \u063a\u0646\u06cc. \u062c\u0647\u062a \u0645\u0634\u0627\u0647\u062f\u0647\u0654 \u0631\u0627\u0647\u0646\u0645\u0627 \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc ALT + 0 \u0631\u0627 \u0641\u0634\u0627\u0631 \u062f\u0647\u06cc\u062f.", "System Font": "\u0641\u0648\u0646\u062a \u0633\u06cc\u0633\u062a\u0645\u06cc", "Failed to upload image: {0}": "\u0639\u062f\u0645 \u0645\u0648\u0641\u0642\u06cc\u062a \u062f\u0631 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u062a\u0635\u0648\u06cc\u0631: {0}", "Failed to load plugin: {0} from url {1}": "\u0639\u062f\u0645 \u0645\u0648\u0641\u0642\u06cc\u062a \u062f\u0631 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0627\u0641\u0632\u0648\u0646\u0647: {0} \u0627\u0632 \u0646\u0634\u0627\u0646\u06cc \u0648\u0628 {1}", "Failed to load plugin url: {0}": "\u0639\u062f\u0645 \u0645\u0648\u0641\u0642\u06cc\u062a \u062f\u0631 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0646\u0634\u0627\u0646\u06cc \u0648\u0628 \u0627\u0641\u0632\u0648\u0646\u0647: {0}", "Failed to initialize plugin: {0}": "\u0639\u062f\u0645 \u0645\u0648\u0641\u0642\u06cc\u062a \u062f\u0631 \u0631\u0627\u0647\u200c\u0627\u0646\u062f\u0627\u0632\u06cc \u0627\u0641\u0632\u0648\u0646\u0647: {0}", "example": "\u0645\u062b\u0627\u0644", "Search": "\u062c\u0633\u062a\u062c\u0648", "All": "\u0647\u0645\u0647", "Currency": "\u0627\u0631\u0632", "Text": "\u0645\u062a\u0646", "Quotations": "\u0646\u0642\u0644\u200c\u0642\u0648\u0644\u200c\u0647\u0627", "Mathematical": "\u0631\u06cc\u0627\u0636\u06cc", "Extended Latin": "\u0644\u0627\u062a\u06cc\u0646 \u06af\u0633\u062a\u0631\u062f\u0647", "Symbols": "\u0646\u0645\u0627\u062f\u0647\u0627", "Arrows": "\u067e\u06cc\u06a9\u0627\u0646\u200c\u0647\u0627", "User Defined": "\u0628\u0647 \u062e\u0648\u0627\u0633\u062a \u06a9\u0627\u0631\u0628\u0631", "dollar sign": "\u0646\u0645\u0627\u062f \u062f\u0644\u0627\u0631", "currency sign": "\u0646\u0645\u0627\u062f \u0627\u0631\u0632", "euro-currency sign": "\u0646\u0645\u0627\u062f \u06cc\u0648\u0631\u0648", "colon sign": "\u0646\u0645\u0627\u062f \u062f\u0648\u0646\u0642\u0637\u0647", "cruzeiro sign": "\u0646\u0645\u0627\u062f \u06a9\u0631\u0648\u0632\u06cc\u0631\u0648", "french franc sign": "\u0646\u0645\u0627\u062f \u0641\u0631\u0627\u0646\u06a9 \u0641\u0631\u0627\u0646\u0633\u0647", "lira sign": "\u0646\u0645\u0627\u062f \u0644\u06cc\u0631\u0647", "mill sign": "\u0646\u0645\u0627\u062f \u0645\u06cc\u0644", "naira sign": "\u0646\u0645\u0627\u062f \u0646\u0627\u06cc\u0631\u0627", "peseta sign": "\u0646\u0645\u0627\u062f \u067e\u0632\u062a\u0627", "rupee sign": "\u0646\u0645\u0627\u062f \u0631\u0648\u067e\u06cc\u0647", "won sign": "\u0646\u0645\u0627\u062f \u0648\u0648\u0646", "new sheqel sign": "\u0646\u0645\u0627\u062f \u0634\u06a9\u0644 \u062c\u062f\u06cc\u062f", "dong sign": "\u0646\u0645\u0627\u062f \u062f\u0627\u0646\u06af", "kip sign": "\u0646\u0645\u0627\u062f \u06a9\u06cc\u067e", "tugrik sign": "\u0646\u0645\u0627\u062f \u062a\u0648\u06af\u0631\u0648\u06af", "drachma sign": "\u0646\u0645\u0627\u062f \u062f\u0631\u0627\u062e\u0645\u0627", "german penny symbol": "\u0646\u0645\u0627\u062f \u067e\u0646\u06cc \u0622\u0644\u0645\u0627\u0646\u06cc", "peso sign": "\u0646\u0645\u0627\u062f \u067e\u0632\u0648", "guarani sign": "\u0646\u0645\u0627\u062f \u06af\u0648\u0627\u0631\u0627\u0646\u06cc", "austral sign": "\u0646\u0645\u0627\u062f \u0622\u0633\u062a\u0631\u0627\u0644", "hryvnia sign": "\u0646\u0645\u0627\u062f \u06af\u0631\u06cc\u0648\u0646\u0627", "cedi sign": "\u0646\u0645\u0627\u062f \u0633\u062f\u06cc", "livre tournois sign": "\u0646\u0645\u0627\u062f \u0644\u06cc\u0648\u0631\u0647 \u062a\u0648\u0631\u0646\u0648\u0627", "spesmilo sign": "\u0646\u0645\u0627\u062f \u0627\u0633\u067e\u0633\u0645\u06cc\u0644\u0648", "tenge sign": "\u0646\u0645\u0627\u062f \u062a\u0646\u06af\u0647", "indian rupee sign": "\u0646\u0645\u0627\u062f \u0631\u0648\u067e\u06cc\u0647 \u0647\u0646\u062f\u06cc", "turkish lira sign": "\u0646\u0645\u0627\u062f \u0644\u06cc\u0631\u0647 \u062a\u0631\u06a9\u06cc", "nordic mark sign": "\u0646\u0645\u0627\u062f \u0645\u0627\u0631\u06a9 \u0646\u0631\u0648\u0698", "manat sign": "\u0646\u0645\u0627\u062f \u0645\u0646\u0627\u062a", "ruble sign": "\u0646\u0645\u0627\u062f \u0631\u0648\u0628\u0644", "yen character": "\u0646\u0648\u06cc\u0633\u0647 \u06cc\u0646", "yuan character": "\u0646\u0648\u06cc\u0633\u0647 \u06cc\u0648\u0627\u0646", "yuan character, in hong kong and taiwan": "\u0646\u0648\u06cc\u0633\u0647 \u06cc\u0648\u0627\u0646\u060c \u062f\u0631 \u0647\u0646\u06af\u200c\u06a9\u0646\u06af \u0648 \u062a\u0627\u06cc\u0648\u0627\u0646", "yen\/yuan character variant one": "\u0646\u0648\u06cc\u0633\u0647 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u06cc\u0646\/\u06cc\u0648\u0627\u0646", "Loading emoticons...": "\u062f\u0631 \u062d\u0627\u0644 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0634\u06a9\u0644\u06a9\u200c\u0647\u0627...", "Could not load emoticons": "\u0634\u06a9\u0644\u06a9\u200c\u0647\u0627 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0646\u0634\u062f\u0646\u062f", "People": "\u0627\u0641\u0631\u0627\u062f", "Animals and Nature": "\u062d\u06cc\u0648\u0627\u0646\u0627\u062a \u0648 \u0637\u0628\u06cc\u0639\u062a", "Food and Drink": "\u063a\u0630\u0627 \u0648 \u0646\u0648\u0634\u06cc\u062f\u0646\u06cc", "Activity": "\u0641\u0639\u0627\u0644\u06cc\u062a", "Travel and Places": "\u0633\u0641\u0631 \u0648 \u0627\u0645\u0627\u06a9\u0646", "Objects": "\u0627\u0634\u06cc\u0627", "Flags": "\u067e\u0631\u0686\u0645\u200c\u0647\u0627", "Characters": "\u0646\u0648\u06cc\u0633\u0647\u200c\u0647\u0627", "Characters (no spaces)": "\u0646\u0648\u06cc\u0633\u0647 \u0647\u0627 (\u0628\u062f\u0648\u0646 \u0641\u0627\u0635\u0644\u0647)", "Error: Form submit field collision.": "\u062e\u0637\u0627: \u062a\u062f\u0627\u062e\u0644 \u062f\u0631 \u062b\u0628\u062a \u0641\u0631\u0645.", "Error: No form element found.": "\u062e\u0637\u0627: \u0647\u06cc\u0686 \u0627\u0644\u0645\u0627\u0646 \u0641\u0631\u0645\u06cc \u06cc\u0627\u0641\u062a \u0646\u0634\u062f.", "Update": "\u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc", "Color swatch": "\u0646\u0645\u0648\u0646\u0647 \u0631\u0646\u06af", "Turquoise": "\u0641\u06cc\u0631\u0648\u0632\u0647\u200c\u0627\u06cc", "Green": "\u0633\u0628\u0632", "Blue": "\u0622\u0628\u06cc", "Purple": "\u0628\u0646\u0641\u0634", "Navy Blue": "\u0633\u0631\u0645\u0647\u200c\u0627\u06cc", "Dark Turquoise": "\u0641\u06cc\u0631\u0648\u0632\u0647\u200c\u0627\u06cc \u062a\u06cc\u0631\u0647", "Dark Green": "\u0633\u0628\u0632 \u062a\u06cc\u0631\u0647", "Medium Blue": "\u0622\u0628\u06cc \u0633\u06cc\u0631", "Medium Purple": "\u0622\u0628\u06cc \u0628\u0646\u0641\u0634", "Midnight Blue": "\u0622\u0628\u06cc \u0646\u0641\u062a\u06cc", "Yellow": "\u0632\u0631\u062f", "Orange": "\u0646\u0627\u0631\u0646\u062c\u06cc", "Red": "\u0642\u0631\u0645\u0632", "Light Gray": "\u062e\u0627\u06a9\u0633\u062a\u0631\u06cc \u0631\u0648\u0634\u0646", "Gray": "\u062e\u0627\u06a9\u0633\u062a\u0631\u06cc", "Dark Yellow": "\u0632\u0631\u062f \u062a\u06cc\u0631\u0647", "Dark Orange": "\u0646\u0627\u0631\u0646\u062c\u06cc \u062a\u06cc\u0631\u0647", "Dark Red": "\u0642\u0631\u0645\u0632 \u062a\u06cc\u0631\u0647", "Medium Gray": "\u062e\u0627\u06a9\u0633\u062a\u0631\u06cc \u0646\u06cc\u0645\u0647\u200c\u0631\u0648\u0634\u0646", "Dark Gray": "\u062e\u0627\u06a9\u0633\u062a\u0631\u06cc \u062a\u06cc\u0631\u0647", "Black": "\u0633\u06cc\u0627\u0647", "White": "\u0633\u0641\u06cc\u062f", "Switch to or from fullscreen mode": "\u062a\u063a\u06cc\u06cc\u0631 \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645\u200c\u0635\u0641\u062d\u0647 \u06cc\u0627 \u0628\u0647 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645\u200c\u0635\u0641\u062d\u0647", "Open help dialog": "\u0628\u0627\u0632 \u06a9\u0631\u062f\u0646 \u06a9\u0627\u062f\u0631 \u0631\u0627\u0647\u0646\u0645\u0627", "history": "\u062a\u0627\u0631\u06cc\u062e\u0686\u0647", "styles": "\u0633\u0628\u06a9\u200c\u0647\u0627", "formatting": "\u0642\u0627\u0644\u0628\u200c\u0628\u0646\u062f\u06cc", "alignment": "\u062a\u0631\u0627\u0632\u0628\u0646\u062f\u06cc", "indentation": "\u062a\u0648\u0631\u0641\u062a\u06af\u06cc", "permanent pen": "\u0642\u0644\u0645 \u062f\u0627\u0626\u0645\u06cc", "comments": "\u0646\u0638\u0631\u0627\u062a", "Anchor": "\u0642\u0644\u0627\u0628", "Special character": "\u0646\u0648\u06cc\u0633\u0647 \u0647\u0627\u06cc \u062e\u0627\u0635", "Code sample": "\u0646\u0645\u0648\u0646\u0647 \u06a9\u064f\u062f", "Color": "\u0631\u0646\u06af", "Emoticons": "\u0635\u0648\u0631\u062a\u06a9 \u0647\u0627", "Document properties": "\u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0633\u0646\u062f", "Image": "\u062a\u0635\u0648\u06cc\u0631", "Insert link": "\u062f\u0631\u062c \u067e\u06cc\u0648\u0646\u062f", "Target": "\u0645\u0642\u0635\u062f", "Link": "\u067e\u06cc\u0648\u0646\u062f", "Poster": "\u067e\u0648\u0633\u062a\u0631", "Media": "\u0631\u0633\u0627\u0646\u0647", "Print": "\u0686\u0627\u067e", "Prev": "\u0642\u0628\u0644\u06cc", "Find and replace": "\u062c\u0633\u062a\u062c\u0648 \u0648 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646\u06cc", "Whole words": "\u062a\u0645\u0627\u0645 \u0648\u0627\u0698\u06af\u0627\u0646", "Spellcheck": "\u0628\u0631\u0631\u0633\u06cc \u0627\u0645\u0644\u0627\u0621", "Caption": "\u0639\u0646\u0648\u0627\u0646", "Insert template": "\u062f\u0631\u062c \u0627\u0644\u06af\u0648", "_dir": "rtl" }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/tinymce/langs/fi.js ================================================ tinymce.addI18n('fi',{ "Redo": "Tee uudelleen", "Undo": "Kumoa", "Cut": "Leikkaa", "Copy": "Kopioi", "Paste": "Liit\u00e4", "Select all": "Valitse kaikki", "New document": "Uusi asiakirja", "Ok": "Ok", "Cancel": "Peruuta", "Visual aids": "Visuaaliset neuvot", "Bold": "Lihavoitu", "Italic": "Kursivoitu", "Underline": "Alleviivaus", "Strikethrough": "Yliviivaus", "Superscript": "Yl\u00e4indeksi", "Subscript": "Alaindeksi", "Clear formatting": "Poista muotoilu", "Align left": "Tasaa vasemmalle", "Align center": "Tasaa keskelle", "Align right": "Tasaa oikealle", "Justify": "Tasaus", "Bullet list": "J\u00e4rjest\u00e4m\u00e4t\u00f6n lista", "Numbered list": "J\u00e4rjestetty lista", "Decrease indent": "Sisenn\u00e4", "Increase indent": "Loitonna", "Close": "Sulje", "Formats": "Muotoilut", "Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Selaimesi ei tue leikep\u00f6yd\u00e4n suoraa k\u00e4ytt\u00e4mist\u00e4. Ole hyv\u00e4 ja k\u00e4yt\u00e4 n\u00e4pp\u00e4imist\u00f6n Ctrl+X\/C\/V n\u00e4pp\u00e4inyhdistelmi\u00e4.", "Headers": "Otsikot", "Header 1": "Otsikko 1", "Header 2": "Otsikko 2", "Header 3": "Otsikko 3", "Header 4": "Otsikko 4", "Header 5": "Otsikko 5", "Header 6": "Otsikko 6", "Headings": "Otsikot", "Heading 1": "Otsikko 1", "Heading 2": "Otsikko 2", "Heading 3": "Otsikko 3", "Heading 4": "Otsikko 4", "Heading 5": "Otsikko 5", "Heading 6": "Otsikko 6", "Preformatted": "Esimuotoiltu", "Div": "Div", "Pre": "Pre", "Code": "Koodi", "Paragraph": "Kappale", "Blockquote": "Lohkolainaus", "Inline": "Samalla rivill\u00e4", "Blocks": "Lohkot", "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Liitt\u00e4minen on nyt pelk\u00e4n tekstin -tilassa. Sis\u00e4ll\u00f6t liitet\u00e4\u00e4n nyt pelkk\u00e4n\u00e4 tekstin\u00e4, kunnes otat vaihtoehdon pois k\u00e4yt\u00f6st\u00e4.", "Fonts": "Fontti", "Font Sizes": "Fonttikoko", "Class": "Luokka", "Browse for an image": "Selaa kuvia", "OR": "TAI", "Drop an image here": "Pudota kuva t\u00e4h\u00e4n", "Upload": "Vie", "Block": "Lohko", "Align": "Tasaa", "Default": "Oletus", "Circle": "Pallo", "Disc": "Ympyr\u00e4", "Square": "Neli\u00f6", "Lower Alpha": "pienet kirjaimet: a, b, c", "Lower Greek": "pienet kirjaimet: \u03b1, \u03b2, \u03b3", "Lower Roman": "pienet kirjaimet: i, ii, iii", "Upper Alpha": "isot kirjaimet: A, B, C", "Upper Roman": "isot kirjaimet: I, II, III", "Anchor...": "Ankkuri...", "Name": "Nimi", "Id": "Id", "Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Id voi alkaa kirjaimella, sen j\u00e4lkeen voi k\u00e4ytt\u00e4\u00e4 kirjaimia, numeroja, viivoja, pisteit\u00e4, kaksoispistett\u00e4 ja alaviivausta", "You have unsaved changes are you sure you want to navigate away?": "Sinulla on tallentamattomia muutoksia, haluatko varmasti siirty\u00e4 toiselle sivulle?", "Restore last draft": "Palauta aiempi luonnos", "Special character...": "Erikoismerkki...", "Source code": "L\u00e4hdekoodi", "Insert\/Edit code sample": "Lis\u00e4\u00e4\/muokkaa koodiesimerkki", "Language": "Kieli", "Code sample...": "Koodin\u00e4yte...", "Color Picker": "V\u00e4rivalitsin", "R": "R", "G": "G", "B": "B", "Left to right": "Vasemmalta oikealle", "Right to left": "Oikealta vasemmalle", "Emoticons...": "Emoticonit...", "Metadata and Document Properties": "Metadata ja asiakirjan ominaisuudet", "Title": "Otsikko", "Keywords": "Avainsanat", "Description": "Kuvaus", "Robots": "Robotit", "Author": "Tekij\u00e4", "Encoding": "Merkist\u00f6", "Fullscreen": "Koko ruutu", "Action": "Toiminto", "Shortcut": "Oikotie", "Help": "Ohje", "Address": "Osoite", "Focus to menubar": "Kohdistus valikkoon", "Focus to toolbar": "Kohdistus ty\u00f6kalupalkkiin", "Focus to element path": "Kohdistus elementtiin", "Focus to contextual toolbar": "Kohdistus kontekstuaaliseen ty\u00f6kalupalkkiin", "Insert link (if link plugin activated)": "Lis\u00e4\u00e4 linkki (jos linkki-liit\u00e4nn\u00e4inen aktiivinen)", "Save (if save plugin activated)": "Tallenna (jos tallenna-liit\u00e4nn\u00e4inen aktiivinen)", "Find (if searchreplace plugin activated)": "Etsi (jos etsikorvaa-liit\u00e4nn\u00e4inen aktiivinen)", "Plugins installed ({0}):": "Asennetut liit\u00e4nn\u00e4iset ({0}):", "Premium plugins:": "Premium liit\u00e4nn\u00e4iset:", "Learn more...": "Lis\u00e4tietoja...", "You are using {0}": "K\u00e4yt\u00e4t {0}", "Plugins": "Liit\u00e4nn\u00e4iset", "Handy Shortcuts": "K\u00e4tev\u00e4t pikan\u00e4pp\u00e4imet", "Horizontal line": "Vaakasuora viiva", "Insert\/edit image": "Lis\u00e4\u00e4\/muokkaa kuva", "Image description": "Kuvaus", "Source": "L\u00e4hde", "Dimensions": "Mittasuhteet", "Constrain proportions": "S\u00e4ilyt\u00e4 mittasuhteet", "General": "Yleiset", "Advanced": "Lis\u00e4asetukset", "Style": "Tyyli", "Vertical space": "Vertikaalinen tila", "Horizontal space": "Horisontaalinen tila", "Border": "Reunus", "Insert image": "Lis\u00e4\u00e4 kuva", "Image...": "Kuva...", "Image list": "Kuvalista", "Rotate counterclockwise": "Kierr\u00e4 vastap\u00e4iv\u00e4\u00e4n", "Rotate clockwise": "Kierr\u00e4 my\u00f6t\u00e4p\u00e4iv\u00e4\u00e4n", "Flip vertically": "K\u00e4\u00e4nn\u00e4 pystysuunnassa", "Flip horizontally": "K\u00e4\u00e4nn\u00e4 vaakasuunnassa", "Edit image": "Muokkaa kuvaa", "Image options": "Kuvan asetukset", "Zoom in": "L\u00e4henn\u00e4", "Zoom out": "Loitonna", "Crop": "Rajaa valintaan", "Resize": "Kuvan koon muutos", "Orientation": "Suunta", "Brightness": "Kirkkaus", "Sharpen": "Ter\u00e4vyys", "Contrast": "Kontrasti", "Color levels": "V\u00e4ritasot", "Gamma": "Gamma", "Invert": "K\u00e4\u00e4nteinen", "Apply": "Aseta", "Back": "Takaisin", "Insert date\/time": "Lis\u00e4\u00e4 p\u00e4iv\u00e4m\u00e4\u00e4r\u00e4 tai aika", "Date\/time": "P\u00e4iv\u00e4m\u00e4\u00e4r\u00e4\/aika", "Insert\/Edit Link": "Lis\u00e4\u00e4 linkki\/muokkaa linkki\u00e4", "Insert\/edit link": "Lis\u00e4\u00e4\/muokkaa linkki", "Text to display": "N\u00e4ytett\u00e4v\u00e4 teksti", "Url": "Osoite", "Open link in...": "Avaa linkki...", "Current window": "Nykyinen ikkuna", "None": "Ei mit\u00e4\u00e4n", "New window": "Uusi ikkuna", "Remove link": "Poista linkki", "Anchors": "Ankkurit", "Link...": "Linkki...", "Paste or type a link": "Sijoita tai kirjoita linkki", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "Antamasi osoite n\u00e4ytt\u00e4\u00e4 olevan s\u00e4hk\u00f6postiosoite. Haluatko lis\u00e4t\u00e4 osoitteeseen vaaditun mailto: -etuliitteen?", "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "Antamasi osoite n\u00e4ytt\u00e4\u00e4 olevan ulkoinen linkki. Haluatko lis\u00e4t\u00e4 osoitteeseen vaaditun http:\/\/ -etuliitteen?", "Link list": "Linkkilista", "Insert video": "Lis\u00e4\u00e4 video", "Insert\/edit video": "Lis\u00e4\u00e4\/muokkaa video", "Insert\/edit media": "Lis\u00e4\u00e4\/muokkaa media", "Alternative source": "Vaihtoehtoinen l\u00e4hde", "Alternative source URL": "Vaihtoehtoinen l\u00e4hde-URL", "Media poster (Image URL)": "Median julkaisija (kuvan URL)", "Paste your embed code below:": "Liit\u00e4 upotuskoodisi alapuolelle:", "Embed": "Upota", "Media...": "Media...", "Nonbreaking space": "Sitova v\u00e4lily\u00f6nti", "Page break": "Sivunvaihto", "Paste as text": "Liit\u00e4 tekstin\u00e4", "Preview": "Esikatselu", "Print...": "Tulosta", "Save": "Tallenna", "Find": "Etsi", "Replace with": "Korvaa", "Replace": "Korvaa", "Replace all": "Korvaa kaikki", "Previous": "Edellinen", "Next": "Seur.", "Find and replace...": "Etsi ja korvaa...", "Could not find the specified string.": "Haettua merkkijonoa ei l\u00f6ytynyt.", "Match case": "Erota isot ja pienet kirjaimet", "Find whole words only": "Etsi vain kokonaisia sanoja", "Spell check": "Oikeinkirjoituksen tarkistus", "Ignore": "\u00c4l\u00e4 huomioi", "Ignore all": "\u00c4l\u00e4 huomioi mit\u00e4\u00e4n", "Finish": "Lopeta", "Add to Dictionary": "Lis\u00e4\u00e4 sanakirjaan", "Insert table": "Lis\u00e4\u00e4 taulukko", "Table properties": "Taulukon ominaisuudet", "Delete table": "Poista taulukko", "Cell": "Solu", "Row": "Rivi", "Column": "Sarake", "Cell properties": "Solun ominaisuudet", "Merge cells": "Yhdist\u00e4 solut", "Split cell": "Jaa solu", "Insert row before": "Lis\u00e4\u00e4 rivi ennen", "Insert row after": "Lis\u00e4\u00e4 rivi j\u00e4lkeen", "Delete row": "Poista rivi", "Row properties": "Rivin ominaisuudet", "Cut row": "Leikkaa rivi", "Copy row": "Kopioi rivi", "Paste row before": "Liit\u00e4 rivi ennen", "Paste row after": "Liit\u00e4 rivi j\u00e4lkeen", "Insert column before": "Lis\u00e4\u00e4 rivi ennen", "Insert column after": "Lis\u00e4\u00e4 rivi j\u00e4lkeen", "Delete column": "Poista sarake", "Cols": "Sarakkeet", "Rows": "Rivit", "Width": "Leveys", "Height": "Korkeus", "Cell spacing": "Solun v\u00e4li", "Cell padding": "Solun tyhj\u00e4 tila", "Show caption": "N\u00e4yt\u00e4 kuvateksti", "Left": "Vasen", "Center": "Keskell\u00e4", "Right": "Oikea", "Cell type": "Solun tyyppi", "Scope": "Laajuus", "Alignment": "Tasaus", "H Align": "H tasaus", "V Align": "V tasaus", "Top": "Yl\u00e4reuna", "Middle": "Keskikohta", "Bottom": "Alareuna", "Header cell": "Otsikkosolu", "Row group": "Riviryhm\u00e4", "Column group": "Sarakeryhm\u00e4", "Row type": "Rivityyppi", "Header": "Otsikko", "Body": "Runko", "Footer": "Alaosa", "Border color": "Reunuksen v\u00e4ri", "Insert template...": "Lis\u00e4\u00e4 malli...", "Templates": "Pohjat", "Template": "Pohja", "Text color": "Tekstin v\u00e4ri", "Background color": "Taustan v\u00e4ri", "Custom...": "Mukauta...", "Custom color": "Mukautettu v\u00e4ri", "No color": "Ei v\u00e4ri\u00e4", "Remove color": "Poista v\u00e4ri", "Table of Contents": "Sis\u00e4llysluettelo", "Show blocks": "N\u00e4yt\u00e4 lohkot", "Show invisible characters": "N\u00e4yt\u00e4 n\u00e4kym\u00e4tt\u00f6m\u00e4t merkit", "Word count": "Sanam\u00e4\u00e4r\u00e4", "Count": "M\u00e4\u00e4r\u00e4", "Document": "Tiedosto", "Selection": "Valinta", "Words": "Sanaa", "Words: {0}": "Sanat: {0}", "{0} words": "{0} sanaa", "File": "Tiedosto", "Edit": "Muokkaa", "Insert": "Lis\u00e4\u00e4", "View": "N\u00e4yt\u00e4", "Format": "Muotoilu", "Table": "Taulukko", "Tools": "Ty\u00f6kalut", "Powered by {0}": "Tehty {0}:ll\u00e4", "Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Rikastetun tekstin alue. Paina ALT-F9 valikkoon. Paina ALT-F10 ty\u00f6kaluriviin. Paina ALT-0 ohjeeseen.", "Image title": "Kuvan otsikko", "Border width": "Reunuksen leveys", "Border style": "Reunuksen tyyli", "Error": "Virhe", "Warn": "Varoitus", "Valid": "Voimassa", "To open the popup, press Shift+Enter": "Avaa ponnahdusikkuna painamalla Shift+Enter", "Rich Text Area. Press ALT-0 for help.": "Rikastetun tekstin alue. Avaa ohje painamalla ALT-0.", "System Font": "J\u00e4rjestelm\u00e4fontti", "Failed to upload image: {0}": "Kuvan lataus ep\u00e4onnistui: {0}", "Failed to load plugin: {0} from url {1}": "Liit\u00e4nn\u00e4isen lataus ep\u00e4onnistui: {0} url:st\u00e4 {1}", "Failed to load plugin url: {0}": "Liit\u00e4nn\u00e4isen url:n lataus ep\u00e4onnistui: {0}", "Failed to initialize plugin: {0}": "Liit\u00e4nn\u00e4isen alustus ep\u00e4onnistui: {0}", "example": "esimerkki", "Search": "Etsi", "All": "Kaikki", "Currency": "Valuutta", "Text": "Teksti", "Quotations": "Lainaukset", "Mathematical": "Matemaattiset", "Extended Latin": "Laajennettu latina", "Symbols": "Symbolit", "Arrows": "Nuolet", "User Defined": "K\u00e4ytt\u00e4j\u00e4m\u00e4\u00e4ritetty", "dollar sign": "dollarimerkki", "currency sign": "valuuttamerkki", "euro-currency sign": "eurovaluuttamerkki", "colon sign": "kaksoispisteen merkki", "cruzeiro sign": "cruzeiro-merkki", "french franc sign": "ranskalaisen frangin merkki", "lira sign": "liiran merkki", "mill sign": "millin merkki", "naira sign": "nairan merkki", "peseta sign": "pesetan merkki", "rupee sign": "rupian merkki", "won sign": "wonin merkki", "new sheqel sign": "uuden sekelin merkki", "dong sign": "dongin merkki", "kip sign": "kipin merkki", "tugrik sign": "tugrikin merkki", "drachma sign": "drakman merkki", "german penny symbol": "saksalaisen pennin merkki", "peso sign": "peson merkki", "guarani sign": "guaranin merkki", "austral sign": "australin merkki", "hryvnia sign": "hryvnian merkki", "cedi sign": "cedin merkki", "livre tournois sign": "livre tournoisin merkki", "spesmilo sign": "spesmilon merkki", "tenge sign": "tengen merkki", "indian rupee sign": "intialaisen rupian merkki", "turkish lira sign": "turkkilaisen liiran merkki", "nordic mark sign": "pohjoismaisen markan merkki", "manat sign": "manatin merkki", "ruble sign": "ruplan merkki", "yen character": "jenin merkki", "yuan character": "juanin merkki", "yuan character, in hong kong and taiwan": "juanin merkki, Hongkongissa ja Taiwanissa", "yen\/yuan character variant one": "jenin\/juanin merkin variantti", "Loading emoticons...": "Ladataan emoticoneja...", "Could not load emoticons": "Emoticoneja ei voitu ladata", "People": "Ihmiset", "Animals and Nature": "El\u00e4imet ja luonto", "Food and Drink": "Ruoka ja juoma", "Activity": "Aktiviteetit", "Travel and Places": "Matkailu ja paikat", "Objects": "Esineet", "Flags": "Liput", "Characters": "Merkki\u00e4", "Characters (no spaces)": "Merkki\u00e4 (ilman v\u00e4lily\u00f6ntej\u00e4)", "{0} characters": "{0} merkki\u00e4", "Error: Form submit field collision.": "Virhe: lomakkeen l\u00e4hetyskent\u00e4n t\u00f6rm\u00e4ys.", "Error: No form element found.": "Virhe: muotoelementti\u00e4 ei l\u00f6ytynyt.", "Update": "P\u00e4ivit\u00e4", "Color swatch": "V\u00e4rin\u00e4yte", "Turquoise": "Turkoosi", "Green": "Vihre\u00e4", "Blue": "Sininen", "Purple": "Purppura", "Navy Blue": "Laivastonsininen", "Dark Turquoise": "Tumma turkoosi", "Dark Green": "Tumma vihre\u00e4", "Medium Blue": "Keskitumma sininen", "Medium Purple": "Keskitumma purppura", "Midnight Blue": "keskiy\u00f6n sininen", "Yellow": "Keltainen", "Orange": "Oranssi", "Red": "Punainen", "Light Gray": "Vaaleanharmaa", "Gray": "Harmaa", "Dark Yellow": "Tummankeltainen", "Dark Orange": "Tumma oranssi", "Dark Red": "Tumma punainen", "Medium Gray": "Keskiharmaa", "Dark Gray": "Tummanharmaa", "Light Green": "Vaaleanvihre\u00e4", "Light Yellow": "Vaaleankeltainen", "Light Red": "Vaaleanpunainen", "Light Purple": "Liila", "Light Blue": "Vaaleansininen", "Dark Purple": "Tummanvioletti", "Dark Blue": "Tummansininen", "Black": "Musta", "White": "Valkoinen", "Switch to or from fullscreen mode": "Vaihda kokon\u00e4ytt\u00f6\u00f6n tai kokon\u00e4yt\u00f6st\u00e4", "Open help dialog": "Avaa ohjeen valintaikkuna", "history": "historia", "styles": "tyylit", "formatting": "muotoiltu", "alignment": "tasaus", "indentation": "sisennys", "permanent pen": "pysyv\u00e4 kyn\u00e4", "comments": "kommentit", "Format Painter": "Muotoilusivellin", "Insert\/edit iframe": "Lis\u00e4\u00e4\/muokkaa iframe-kehyst\u00e4", "Capitalization": "Kapitalisointi", "lowercase": "pienaakkoset", "UPPERCASE": "SUURAAKKOSET", "Title Case": "Otsikon kapitalisointi", "Permanent Pen Properties": "Pysyv\u00e4t kyn\u00e4n ominaisuudet", "Permanent pen properties...": "Pysyv\u00e4t kyn\u00e4n ominaisuudet...", "Font": "Fontti", "Size": "Koko", "More...": "Lis\u00e4\u00e4...", "Spellcheck Language": "Oikoluvun kieli", "Select...": "Valitse...", "Preferences": "Asetukset", "Yes": "Kyll\u00e4", "No": "Ei", "Keyboard Navigation": "Navigointi n\u00e4pp\u00e4imist\u00f6ll\u00e4", "Version": "Versio", "Anchor": "Ankkuri", "Special character": "Erikoismerkki", "Code sample": "Koodiesimerkki", "Color": "V\u00e4ri", "Emoticons": "Hymi\u00f6t", "Document properties": "Dokumentin ominaisuudet", "Image": "Kuva", "Insert link": "Lis\u00e4\u00e4 linkki", "Target": "Kohde", "Link": "Linkki", "Poster": "L\u00e4hett\u00e4j\u00e4", "Media": "Media", "Print": "Tulosta", "Prev": "Edel.", "Find and replace": "Etsi ja korvaa", "Whole words": "Koko sanat", "Spellcheck": "Oikolue", "Caption": "Seloste", "Insert template": "Lis\u00e4\u00e4 pohja" }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/tinymce/langs/fr_FR.js ================================================ tinymce.addI18n('fr_FR',{ "Redo": "R\u00e9tablir", "Undo": "Annuler", "Cut": "Couper", "Copy": "Copier", "Paste": "Coller", "Select all": "S\u00e9lectionner tout", "New document": "Nouveau document", "Ok": "OK", "Cancel": "Annuler", "Visual aids": "Aides visuelles", "Bold": "Gras", "Italic": "Italique", "Underline": "Soulign\u00e9", "Strikethrough": "Barr\u00e9", "Superscript": "Exposant", "Subscript": "Indice", "Clear formatting": "Effacer la mise en forme", "Align left": "Aligner \u00e0 gauche", "Align center": "Centrer", "Align right": "Aligner \u00e0 droite", "Justify": "Justifier", "Bullet list": "Liste \u00e0 puces", "Numbered list": "Liste num\u00e9rot\u00e9e", "Decrease indent": "R\u00e9duire le retrait", "Increase indent": "Augmenter le retrait", "Close": "Fermer", "Formats": "Formats", "Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Votre navigateur ne supporte pas l\u2019acc\u00e8s direct au presse-papiers. Merci d'utiliser les raccourcis clavier Ctrl+X\/C\/V.", "Headers": "En-t\u00eates", "Header 1": "En-t\u00eate 1", "Header 2": "En-t\u00eate 2", "Header 3": "En-t\u00eate 3", "Header 4": "En-t\u00eate 4", "Header 5": "En-t\u00eate 5", "Header 6": "En-t\u00eate 6", "Headings": "Titres", "Heading 1": "Titre\u00a01", "Heading 2": "Titre\u00a02", "Heading 3": "Titre\u00a03", "Heading 4": "Titre\u00a04", "Heading 5": "Titre\u00a05", "Heading 6": "Titre\u00a06", "Preformatted": "Pr\u00e9format\u00e9", "Div": "Div", "Pre": "Pre", "Code": "Code", "Paragraph": "Paragraphe", "Blockquote": "Blockquote", "Inline": "En ligne", "Blocks": "Blocs", "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Le presse-papiers est maintenant en mode \"texte plein\". Les contenus seront coll\u00e9s sans retenir les formatages jusqu'\u00e0 ce que vous d\u00e9sactiviez cette option.", "Fonts": "Polices", "Font Sizes": "Tailles de police", "Class": "Classe", "Browse for an image": "Rechercher une image", "OR": "OU", "Drop an image here": "D\u00e9poser une image ici", "Upload": "T\u00e9l\u00e9charger", "Block": "Bloc", "Align": "Aligner", "Default": "Par d\u00e9faut", "Circle": "Cercle", "Disc": "Disque", "Square": "Carr\u00e9", "Lower Alpha": "Alpha minuscule", "Lower Greek": "Grec minuscule", "Lower Roman": "Romain minuscule", "Upper Alpha": "Alpha majuscule", "Upper Roman": "Romain majuscule", "Anchor...": "Ancre...", "Name": "Nom", "Id": "Id", "Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "L'Id doit commencer par une lettre suivi par des lettres, nombres, tirets, points, deux-points ou underscores", "You have unsaved changes are you sure you want to navigate away?": "Vous avez des modifications non enregistr\u00e9es, \u00eates-vous s\u00fbr de quitter la page?", "Restore last draft": "Restaurer le dernier brouillon", "Special character...": "Caract\u00e8re sp\u00e9cial...", "Source code": "Code source", "Insert\/Edit code sample": "Ins\u00e9rer \/ modifier une exemple de code", "Language": "Langue", "Code sample...": "Exemple de code...", "Color Picker": "S\u00e9lecteur de couleurs", "R": "R", "G": "V", "B": "B", "Left to right": "Gauche \u00e0 droite", "Right to left": "Droite \u00e0 gauche", "Emoticons...": "\u00c9motic\u00f4nes...", "Metadata and Document Properties": "M\u00e9tadonn\u00e9es et propri\u00e9t\u00e9s du document", "Title": "Titre", "Keywords": "Mots-cl\u00e9s", "Description": "Description", "Robots": "Robots", "Author": "Auteur", "Encoding": "Encodage", "Fullscreen": "Plein \u00e9cran", "Action": "Action", "Shortcut": "Raccourci", "Help": "Aide", "Address": "Adresse", "Focus to menubar": "Cibler la barre de menu", "Focus to toolbar": "Cibler la barre d'outils", "Focus to element path": "Cibler le chemin vers l'\u00e9l\u00e9ment", "Focus to contextual toolbar": "Cibler la barre d'outils contextuelle", "Insert link (if link plugin activated)": "Ins\u00e9rer un lien (si le module link est activ\u00e9)", "Save (if save plugin activated)": "Enregistrer (si le module save est activ\u00e9)", "Find (if searchreplace plugin activated)": "Rechercher (si le module searchreplace est activ\u00e9)", "Plugins installed ({0}):": "Modules install\u00e9s ({0}) : ", "Premium plugins:": "Modules premium :", "Learn more...": "En savoir plus...", "You are using {0}": "Vous utilisez {0}", "Plugins": "Plugins", "Handy Shortcuts": "Raccourcis utiles", "Horizontal line": "Ligne horizontale", "Insert\/edit image": "Ins\u00e9rer\/modifier une image", "Image description": "Description de l'image", "Source": "Source", "Dimensions": "Dimensions", "Constrain proportions": "Conserver les proportions", "General": "G\u00e9n\u00e9ral", "Advanced": "Avanc\u00e9", "Style": "Style", "Vertical space": "Espacement vertical", "Horizontal space": "Espacement horizontal", "Border": "Bordure", "Insert image": "Ins\u00e9rer une image", "Image...": "Image...", "Image list": "Liste d'images", "Rotate counterclockwise": "Rotation anti-horaire", "Rotate clockwise": "Rotation horaire", "Flip vertically": "Retournement vertical", "Flip horizontally": "Retournement horizontal", "Edit image": "Modifier l'image", "Image options": "Options de l'image", "Zoom in": "Zoomer", "Zoom out": "D\u00e9zoomer", "Crop": "Rogner", "Resize": "Redimensionner", "Orientation": "Orientation", "Brightness": "Luminosit\u00e9", "Sharpen": "Affiner", "Contrast": "Contraste", "Color levels": "Niveaux de couleur", "Gamma": "Gamma", "Invert": "Inverser", "Apply": "Appliquer", "Back": "Retour", "Insert date\/time": "Ins\u00e9rer date\/heure", "Date\/time": "Date\/heure", "Insert\/Edit Link": "Ins\u00e9rer\/Modifier lien", "Insert\/edit link": "Ins\u00e9rer\/modifier un lien", "Text to display": "Texte \u00e0 afficher", "Url": "Url", "Open link in...": "Ouvrir le lien dans...", "Current window": "Fen\u00eatre active", "None": "n\/a", "New window": "Nouvelle fen\u00eatre", "Remove link": "Enlever le lien", "Anchors": "Ancres", "Link...": "Lien...", "Paste or type a link": "Coller ou taper un lien", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "L'URL que vous avez entr\u00e9e semble \u00eatre une adresse e-mail. Voulez-vous ajouter le pr\u00e9fixe mailto: n\u00e9cessaire?", "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "L'URL que vous avez entr\u00e9e semble \u00eatre un lien externe. Voulez-vous ajouter le pr\u00e9fixe http:\/\/ n\u00e9cessaire?", "Link list": "Liste de liens", "Insert video": "Ins\u00e9rer une vid\u00e9o", "Insert\/edit video": "Ins\u00e9rer\/modifier une vid\u00e9o", "Insert\/edit media": "Ins\u00e9rer\/modifier un m\u00e9dia", "Alternative source": "Source alternative", "Alternative source URL": "URL de la source alternative", "Media poster (Image URL)": "Affiche de m\u00e9dia (URL de l'image)", "Paste your embed code below:": "Collez votre code d'int\u00e9gration ci-dessous :", "Embed": "Int\u00e9grer", "Media...": "M\u00e9dia...", "Nonbreaking space": "Espace ins\u00e9cable", "Page break": "Saut de page", "Paste as text": "Coller comme texte", "Preview": "Pr\u00e9visualiser", "Print...": "Imprimer...", "Save": "Enregistrer", "Find": "Chercher", "Replace with": "Remplacer par", "Replace": "Remplacer", "Replace all": "Tout remplacer", "Previous": "Pr\u00e9c\u00e9dente", "Next": "Suiv", "Find and replace...": "Trouver et remplacer...", "Could not find the specified string.": "Impossible de trouver la cha\u00eene sp\u00e9cifi\u00e9e.", "Match case": "Respecter la casse", "Find whole words only": "Mot entier", "Spell check": "V\u00e9rification de l'orthographe", "Ignore": "Ignorer", "Ignore all": "Tout ignorer", "Finish": "Finie", "Add to Dictionary": "Ajouter au dictionnaire", "Insert table": "Ins\u00e9rer un tableau", "Table properties": "Propri\u00e9t\u00e9s du tableau", "Delete table": "Supprimer le tableau", "Cell": "Cellule", "Row": "Ligne", "Column": "Colonne", "Cell properties": "Propri\u00e9t\u00e9s de la cellule", "Merge cells": "Fusionner les cellules", "Split cell": "Diviser la cellule", "Insert row before": "Ins\u00e9rer une ligne avant", "Insert row after": "Ins\u00e9rer une ligne apr\u00e8s", "Delete row": "Effacer la ligne", "Row properties": "Propri\u00e9t\u00e9s de la ligne", "Cut row": "Couper la ligne", "Copy row": "Copier la ligne", "Paste row before": "Coller la ligne avant", "Paste row after": "Coller la ligne apr\u00e8s", "Insert column before": "Ins\u00e9rer une colonne avant", "Insert column after": "Ins\u00e9rer une colonne apr\u00e8s", "Delete column": "Effacer la colonne", "Cols": "Colonnes", "Rows": "Lignes", "Width": "Largeur", "Height": "Hauteur", "Cell spacing": "Espacement inter-cellulles", "Cell padding": "Espacement interne cellule", "Show caption": "Afficher le sous-titrage", "Left": "Gauche", "Center": "Centr\u00e9", "Right": "Droite", "Cell type": "Type de cellule", "Scope": "Etendue", "Alignment": "Alignement", "H Align": "Alignement H", "V Align": "Alignement V", "Top": "Haut", "Middle": "Milieu", "Bottom": "Bas", "Header cell": "Cellule d'en-t\u00eate", "Row group": "Groupe de lignes", "Column group": "Groupe de colonnes", "Row type": "Type de ligne", "Header": "En-t\u00eate", "Body": "Corps", "Footer": "Pied", "Border color": "Couleur de la bordure", "Insert template...": "Ins\u00e9rer un mod\u00e8le...", "Templates": "Th\u00e8mes", "Template": "Mod\u00e8le", "Text color": "Couleur du texte", "Background color": "Couleur d'arri\u00e8re-plan", "Custom...": "Personnalis\u00e9...", "Custom color": "Couleur personnalis\u00e9e", "No color": "Aucune couleur", "Remove color": "Supprimer la couleur", "Table of Contents": "Table des mati\u00e8res", "Show blocks": "Afficher les blocs", "Show invisible characters": "Afficher les caract\u00e8res invisibles", "Word count": "Nombre de mots", "Count": "Total", "Document": "Document", "Selection": "S\u00e9lection", "Words": "Mots", "Words: {0}": "Mots : {0}", "{0} words": "{0} mots", "File": "Fichier", "Edit": "Editer", "Insert": "Ins\u00e9rer", "View": "Voir", "Format": "Format", "Table": "Tableau", "Tools": "Outils", "Powered by {0}": "Propuls\u00e9 par {0}", "Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Zone Texte Riche. Appuyer sur ALT-F9 pour le menu. Appuyer sur ALT-F10 pour la barre d'outils. Appuyer sur ALT-0 pour de l'aide.", "Image title": "Titre d'image", "Border width": "\u00c9paisseur de la bordure", "Border style": "Style de la bordure", "Error": "Erreur", "Warn": "Avertir", "Valid": "Valide", "To open the popup, press Shift+Enter": "Pour ouvrir la popup, appuyez sur Maj+Entr\u00e9e", "Rich Text Area. Press ALT-0 for help.": "Zone de texte riche. Appuyez sur ALT-0 pour l'aide.", "System Font": "Police syst\u00e8me", "Failed to upload image: {0}": "\u00c9chec d'envoi de l'image\u00a0: {0}", "Failed to load plugin: {0} from url {1}": "\u00c9chec de chargement du plug-in\u00a0: {0} \u00e0 partir de l\u2019URL {1}", "Failed to load plugin url: {0}": "\u00c9chec de chargement de l'URL du plug-in\u00a0: {0}", "Failed to initialize plugin: {0}": "\u00c9chec d'initialisation du plug-in\u00a0: {0}", "example": "exemple", "Search": "Rechercher", "All": "Tout", "Currency": "Devise", "Text": "Texte", "Quotations": "Citations", "Mathematical": "Op\u00e9rateurs math\u00e9matiques", "Extended Latin": "Latin \u00e9tendu", "Symbols": "Symboles", "Arrows": "Fl\u00e8ches", "User Defined": "D\u00e9fini par l'utilisateur", "dollar sign": "Symbole dollar", "currency sign": "Symbole devise", "euro-currency sign": "Symbole euro", "colon sign": "Symbole col\u00f3n", "cruzeiro sign": "Symbole cruzeiro", "french franc sign": "Symbole franc fran\u00e7ais", "lira sign": "Symbole lire", "mill sign": "Symbole milli\u00e8me", "naira sign": "Symbole naira", "peseta sign": "Symbole peseta", "rupee sign": "Symbole roupie", "won sign": "Symbole won", "new sheqel sign": "Symbole nouveau ch\u00e9kel", "dong sign": "Symbole dong", "kip sign": "Symbole kip", "tugrik sign": "Symbole tougrik", "drachma sign": "Symbole drachme", "german penny symbol": "Symbole pfennig", "peso sign": "Symbole peso", "guarani sign": "Symbole guarani", "austral sign": "Symbole austral", "hryvnia sign": "Symbole hryvnia", "cedi sign": "Symbole cedi", "livre tournois sign": "Symbole livre tournois", "spesmilo sign": "Symbole spesmilo", "tenge sign": "Symbole tenge", "indian rupee sign": "Symbole roupie indienne", "turkish lira sign": "Symbole lire turque", "nordic mark sign": "Symbole du mark nordique", "manat sign": "Symbole manat", "ruble sign": "Symbole rouble", "yen character": "Sinogramme Yen", "yuan character": "Sinogramme Yuan", "yuan character, in hong kong and taiwan": "Sinogramme Yuan, Hong Kong et Taiwan", "yen\/yuan character variant one": "Sinogramme Yen\/Yuan, premi\u00e8re variante", "Loading emoticons...": "Chargement des \u00e9motic\u00f4nes en cours...", "Could not load emoticons": "\u00c9chec de chargement des \u00e9motic\u00f4nes", "People": "Personnes", "Animals and Nature": "Animaux & nature", "Food and Drink": "Nourriture & boissons", "Activity": "Activit\u00e9", "Travel and Places": "Voyages & lieux", "Objects": "Objets", "Flags": "Drapeaux", "Characters": "Caract\u00e8res", "Characters (no spaces)": "Caract\u00e8res (espaces non compris)", "{0} characters": "{0}\u00a0caract\u00e8res", "Error: Form submit field collision.": "Erreur\u00a0: conflit de champs lors de la soumission du formulaire.", "Error: No form element found.": "Erreur : aucun \u00e9l\u00e9ment de formulaire trouv\u00e9.", "Update": "Mettre \u00e0 jour", "Color swatch": "\u00c9chantillon de couleurs", "Turquoise": "Turquoise", "Green": "Vert", "Blue": "Bleu", "Purple": "Violet", "Navy Blue": "Bleu marine", "Dark Turquoise": "Turquoise fonc\u00e9", "Dark Green": "Vert fonc\u00e9", "Medium Blue": "Bleu moyen", "Medium Purple": "Violet moyen", "Midnight Blue": "Bleu de minuit", "Yellow": "Jaune", "Orange": "Orange", "Red": "Rouge", "Light Gray": "Gris clair", "Gray": "Gris", "Dark Yellow": "Jaune fonc\u00e9", "Dark Orange": "Orange fonc\u00e9", "Dark Red": "Rouge fonc\u00e9", "Medium Gray": "Gris moyen", "Dark Gray": "Gris fonc\u00e9", "Light Green": "Vert clair", "Light Yellow": "Jaune clair", "Light Red": "Rouge clair", "Light Purple": "Violet clair", "Light Blue": "Bleu clair", "Dark Purple": "Violet fonc\u00e9", "Dark Blue": "Bleu fonc\u00e9", "Black": "Noir", "White": "Blanc", "Switch to or from fullscreen mode": "Passer en ou quitter le mode plein \u00e9cran", "Open help dialog": "Ouvrir la bo\u00eete de dialogue d'aide", "history": "historique", "styles": "styles", "formatting": "mise en forme", "alignment": "alignement", "indentation": "retrait", "permanent pen": "feutre ind\u00e9l\u00e9bile", "comments": "commentaires", "Format Painter": "Reproduire la mise en forme", "Insert\/edit iframe": "Ins\u00e9rer\/modifier iframe", "Capitalization": "Mise en majuscules", "lowercase": "minuscule", "UPPERCASE": "MAJUSCULE", "Title Case": "Casse du titre", "Permanent Pen Properties": "Propri\u00e9t\u00e9s du feutre ind\u00e9l\u00e9bile", "Permanent pen properties...": "Propri\u00e9t\u00e9s du feutre ind\u00e9l\u00e9bile...", "Font": "Police", "Size": "Taille", "More...": "Plus...", "Spellcheck Language": "Langue du correcteur orthographique", "Select...": "S\u00e9lectionner...", "Preferences": "Pr\u00e9f\u00e9rences", "Yes": "Oui", "No": "Non", "Keyboard Navigation": "Navigation au clavier", "Version": "Version", "Anchor": "Ancre", "Special character": "Caract\u00e8res sp\u00e9ciaux", "Code sample": "Extrait de code", "Color": "Couleur", "Emoticons": "Emotic\u00f4nes", "Document properties": "Propri\u00e9t\u00e9 du document", "Image": "Image", "Insert link": "Ins\u00e9rer un lien", "Target": "Cible", "Link": "Lien", "Poster": "Publier", "Media": "M\u00e9dia", "Print": "Imprimer", "Prev": "Pr\u00e9c ", "Find and replace": "Trouver et remplacer", "Whole words": "Mots entiers", "Spellcheck": "V\u00e9rification orthographique", "Caption": "Titre", "Insert template": "Ajouter un th\u00e8me" }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/tinymce/langs/gl.js ================================================ tinymce.addI18n('gl',{ "Redo": "Refacer", "Undo": "Desfacer", "Cut": "Cortar", "Copy": "Copiar", "Paste": "Pegar", "Select all": "Seleccionar todo", "New document": "Novo documento", "Ok": "Aceptar", "Cancel": "Cancelar", "Visual aids": "Axudas visuais", "Bold": "Negra", "Italic": "Cursiva", "Underline": "Subli\u00f1ado", "Strikethrough": "Riscado", "Superscript": "Super\u00edndice", "Subscript": "Sub\u00edndice", "Clear formatting": "Limpar o formato", "Align left": "Ali\u00f1ar \u00e1 esquerda", "Align center": "Ali\u00f1ar ao centro", "Align right": "Ali\u00f1ar \u00e1 dereita", "Justify": "Xustificar", "Bullet list": "Lista de vi\u00f1etas", "Numbered list": "Lista numerada", "Decrease indent": "Reducir a sangr\u00eda", "Increase indent": "Aumentar a sangr\u00eda", "Close": "Pechar", "Formats": "Formatos", "Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "O seu navegador non admite o acceso directo ao portapapeis. Empregue os atallos de teclado Ctrl+X\/C\/V no seu canto.", "Headers": "Cabeceiras", "Header 1": "Cabeceira 1", "Header 2": "Cabeceira 2", "Header 3": "Cabeceira 3", "Header 4": "Cabeceira 4", "Header 5": "Cabeceira 5", "Header 6": "Cabeceira 6", "Headings": "T\u00edtulo", "Heading 1": "T\u00edtulo 1", "Heading 2": "T\u00edtulo 2", "Heading 3": "T\u00edtulo 3", "Heading 4": "T\u00edtulo 4", "Heading 5": "T\u00edtulo 5", "Heading 6": "T\u00edtulo 6", "Preformatted": "Preformatado", "Div": "Div", "Pre": "Pre", "Code": "C\u00f3digo", "Paragraph": "Par\u00e1grafo", "Blockquote": "Bloque entre comi\u00f1as", "Inline": "En li\u00f1a", "Blocks": "Bloques", "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Neste momento o pegado est\u00e1 definido en modo de texto simple. Os contidos p\u00e9garanse como texto sen formato ata que se active esta opci\u00f3n.", "Fonts": "Tipos de letra", "Font Sizes": "Tama\u00f1o da letra", "Class": "Clase", "Browse for an image": "Buscar unha imaxe", "OR": "OU", "Drop an image here": "Soltar unha imaxe", "Upload": "Cargar", "Block": "Bloque", "Align": "Ali\u00f1amento", "Default": "Predeterminada", "Circle": "Circulo", "Disc": "Disco", "Square": "Cadrado", "Lower Alpha": "Alfa min\u00fascula", "Lower Greek": "Grega min\u00fascula", "Lower Roman": "Romana min\u00fascula", "Upper Alpha": "Alfa mai\u00fascula", "Upper Roman": "Romana mai\u00fascula", "Anchor...": "Ancoraxe...", "Name": "Nome", "Id": "ID", "Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "O ID debe comezar cunha letra, seguida s\u00f3 por letras, n\u00fameros, gui\u00f3ns, puntos, dos puntos ou gui\u00f3ns baixos.", "You have unsaved changes are you sure you want to navigate away?": "Ten cambios sen gardar. Confirma que quere sa\u00edr?", "Restore last draft": "Restaurar o \u00faltimo borrador", "Special characters...": "Caracteres especiais...", "Source code": "C\u00f3digo fonte", "Insert\/Edit code sample": "Inserir\/editar mostra de c\u00f3digo", "Language": "Idioma", "Code sample...": "Mostra de c\u00f3digo...", "Color Picker": "Selector de cor", "R": "R", "G": "G", "B": "B", "Left to right": "De esquerda a dereita", "Right to left": "De dereita a esquerda", "Emoticons...": "Emoticonas...", "Metadata and Document Properties": "Metadatos e propiedades do documento", "Title": "T\u00edtulo", "Keywords": "Palabras clave", "Description": "Descrici\u00f3n", "Robots": "Robots", "Author": "Autor", "Encoding": "Codificaci\u00f3n", "Fullscreen": "Pantalla completa", "Action": "Action", "Shortcut": "Shortcut", "Help": "Help", "Address": "Address", "Focus to menubar": "Focus to menubar", "Focus to toolbar": "Focus to toolbar", "Focus to element path": "Focus to element path", "Focus to contextual toolbar": "Focus to contextual toolbar", "Insert link (if link plugin activated)": "Insert link (if link plugin activated)", "Save (if save plugin activated)": "Save (if save plugin activated)", "Find (if searchreplace plugin activated)": "Find (if searchreplace plugin activated)", "Plugins installed ({0}):": "Plugins installed ({0}):", "Premium plugins:": "Premium plugins:", "Learn more...": "Learn more...", "You are using {0}": "You are using {0}", "Plugins": "Engadidos", "Handy Shortcuts": "Atallos \u00fatiles", "Horizontal line": "Li\u00f1a horizontal", "Insert\/edit image": "Inserir\/editar imaxe", "Image description": "Descrici\u00f3n da imaxe", "Source": "Orixe", "Dimensions": "Dimensi\u00f3ns", "Constrain proportions": "Restrinxir as proporci\u00f3ns", "General": "Xeral", "Advanced": "Avanzado", "Style": "Estilo", "Vertical space": "Espazo vertical", "Horizontal space": "Espazo horizontal", "Border": "Bordo", "Insert image": "Inserir imaxe", "Image...": "Imaxe...", "Image list": "Lista de imaxes", "Rotate counterclockwise": "Rotate counterclockwise", "Rotate clockwise": "Rotate clockwise", "Flip vertically": "Flip vertically", "Flip horizontally": "Flip horizontally", "Edit image": "Edit image", "Image options": "Image options", "Zoom in": "Zoom in", "Zoom out": "Zoom out", "Crop": "Crop", "Resize": "Resize", "Orientation": "Orientation", "Brightness": "Brightness", "Sharpen": "Sharpen", "Contrast": "Contrast", "Color levels": "Color levels", "Gamma": "Gamma", "Invert": "Invert", "Apply": "Apply", "Back": "Back", "Insert date\/time": "Inserir data\/hora", "Date\/time": "Data\/hora", "Insert\/Edit Link": "Inserir\/editar ligaz\u00f3n", "Insert\/edit link": "Inserir\/editar ligaz\u00f3n", "Text to display": "Texto que amosar", "Url": "URL", "Open link in...": "Abrir a ligaz\u00f3n en...", "Current window": "Xanela actual", "None": "Ning\u00fan", "New window": "Nova xanela", "Remove link": "Retirar a ligaz\u00f3n", "Anchors": "Ancoraxes", "Link...": "Ligaz\u00f3n...", "Paste or type a link": "Pegue ou escriba unha ligaz\u00f3n", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "O URL que introduciu semella seren un enderezo de correo. Quere engadirlle o prefixo mailto: requirido?", "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "O URL que introduciu semella seren unha ligaz\u00f3n externa. Quere engadirlle o prefixo http:\/\/ requirido?", "Link list": "Lista de ligaz\u00f3ns", "Insert video": "Inserir v\u00eddeo", "Insert\/edit video": "Inserir\/editar v\u00eddeo", "Insert\/edit media": "Inserir\/editar medios", "Alternative source": "Orixe alternativa", "Alternative source URL": "URL da orixe alternativa", "Media poster (Image URL)": "Cartel multimedia (URL da imaxe)", "Paste your embed code below:": "Pegue embaixo o c\u00f3digo integrado:", "Embed": "Integrado", "Media...": "Multimedia...", "Nonbreaking space": "Espazo irromp\u00edbel", "Page break": "Quebra de p\u00e1xina", "Paste as text": "Pegar como texto", "Preview": "Vista previa", "Print...": "Imprimir...", "Save": "Gardar", "Find": "Buscar", "Replace with": "Substitu\u00edr con", "Replace": "Substitu\u00edr", "Replace all": "Substitu\u00edr todo", "Previous": "Anterior", "Next": "Seguinte", "Find and replace...": "Atopar e substitu\u00edr...", "Could not find the specified string.": "Non foi pos\u00edbel atopar a cadea de texto especificada.", "Match case": "Distinguir mai\u00fasculas", "Find whole words only": "Atopar unicamente as palabras enteiras", "Spell check": "Corrector ortogr\u00e1fico", "Ignore": "Ignorar", "Ignore all": "Ignorar todo", "Finish": "Rematar", "Add to Dictionary": "Engadir ao dicionario", "Insert table": "Inserir t\u00e1boa", "Table properties": "Propiedades da t\u00e1boa", "Delete table": "Eliminar t\u00e1boa", "Cell": "Cela", "Row": "Fila", "Column": "Columna", "Cell properties": "Propiedades da cela", "Merge cells": "Combinar celas", "Split cell": "Dividir celas", "Insert row before": "Inserir unha fila enriba", "Insert row after": "Inserir unha fila embaixo", "Delete row": "Eliminar fila", "Row properties": "Propiedades das filas", "Cut row": "Cortar fila", "Copy row": "Copiar fila", "Paste row before": "Pegar fila embaixo", "Paste row after": "Pegar fila enriba", "Insert column before": "Inserir columna \u00e1 esquerda", "Insert column after": "Inserir columna \u00e1 dereita", "Delete column": "Eliminar columna", "Cols": "Cols.", "Rows": "Filas", "Width": "Largo", "Height": "Alto", "Cell spacing": "Marxe entre celas", "Cell padding": "Marxe interior da cela", "Show caption": "Amosar subt\u00edtulo", "Left": "Esquerda", "Center": "Centro", "Right": "Dereita", "Cell type": "Tipo de cela", "Scope": "\u00c1mbito", "Alignment": "Ali\u00f1amento", "H Align": "Ali\u00f1amento H", "V Align": "Ali\u00f1amento V", "Top": "Arriba", "Middle": "Medio", "Bottom": "Abaixo", "Header cell": "Cela de cabeceira", "Row group": "Grupo de filas", "Column group": "Grupo de columnas", "Row type": "Tipo de fila", "Header": "Cabeceira", "Body": "Corpo", "Footer": "Rodap\u00e9", "Border color": "Cor do bordo", "Insert template...": "Inserir modelo...", "Templates": "Modelos", "Template": "Modelo", "Text color": "Cor do texto", "Background color": "Cor do fondo", "Custom...": "Personalizado...", "Custom color": "Cor personalizado", "No color": "Sen cor", "Remove color": "Retirar a cor", "Table of Contents": "\u00cdndice de contidos", "Show blocks": "Amosar os bloques", "Show invisible characters": "Amosar caracteres invis\u00edbeis", "Word count": "Reconto de palabras", "Words: {0}": "Palabras: {0}", "{0} words": "{0} palabras", "File": "Ficheiro", "Edit": "Editar", "Insert": "Inserir", "View": "Ver", "Format": "Formato", "Table": "T\u00e1boa", "Tools": "Ferramentas", "Powered by {0}": "Coa tecnolox\u00eda de {0}", "Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u00c1rea de texto mellorado. Prema ALT-F9 para o men\u00fa. Prema ALT-F10 para a barra de ferramentas. Prema ALT-0 para a axuda", "Image title": "T\u00edtulo da imaxe", "Border width": "Largo do bordo", "Border style": "Estilo do bordo", "Error": "Erro", "Warn": "Aviso", "Valid": "V\u00e1lido", "To open the popup, press Shift+Enter": "Para abrir a xanela emerxente, prema Mai\u00fas+Intro", "Rich Text Area. Press ALT-0 for help.": "\u00c1rea de texto mellorado. PremaALT-0 para obter axuda.", "System Font": "Tipo de letra do sistema", "Failed to upload image: {0}": "Produciuse un fallo ao cargar a imaxe: {0}", "Failed to load plugin: {0} from url {1}": "Produciuse un fallo ao cargar a o engadido: {0} dende o URL {1}", "Failed to load plugin url: {0}": "Produciuse un fallo ao cargar a o URL do engadido: {0}", "Failed to initialize plugin: {0}": "Produciuse un fallo ao iniciar o engadido: {0}", "example": "exemplo", "Search": "Buscar", "All": "Todo", "Currency": "Moeda", "Text": "Texto", "Quotations": "Citas", "Mathematical": "Matem\u00e1tico", "Extended Latin": "Latino extendido", "Symbols": "S\u00edmbolos", "Arrows": "Frechas", "User Defined": "Definido polo usuario", "dollar sign": "S\u00edmbolo do dolar", "currency sign": "S\u00edmbolo de moeda", "euro-currency sign": "S\u00edmbolo do euro", "colon sign": "S\u00edmbolo do col\u00f3n", "cruzeiro sign": "S\u00edmbolo do cruzeiro", "french franc sign": "S\u00edmbolo do franco franc\u00e9s", "lira sign": "S\u00edmbolo da lira", "mill sign": "S\u00edmbolo do mill", "naira sign": "S\u00edmbolo da naira", "peseta sign": "S\u00edmbolo da peseta", "rupee sign": "S\u00edmbolo da rupia", "won sign": "S\u00edmbolo do won", "new sheqel sign": "S\u00edmbolo do novo s\u00e9quel", "dong sign": "S\u00edmbolo do dong", "kip sign": "S\u00edmbolo do kip", "tugrik sign": "S\u00edmbolo do tugrik", "drachma sign": "S\u00edmbolo do dracma", "german penny symbol": "S\u00edmbolo do penique alem\u00e1n", "peso sign": "S\u00edmbolo do peso", "guarani sign": "S\u00edmbolo do guaran\u00ed", "austral sign": "S\u00edmbolo do austral", "hryvnia sign": "S\u00edmbolo do grivna", "cedi sign": "S\u00edmbolo do cedi", "livre tournois sign": "S\u00edmbolo da libre tournois", "spesmilo sign": "S\u00edmbolo do spesmilo", "tenge sign": "S\u00edmbolo do tengue", "indian rupee sign": "S\u00edmbolo da rupia india", "turkish lira sign": "S\u00edmbolo da lira turca", "nordic mark sign": "S\u00edmbolo do marco n\u00f3rdico", "manat sign": "S\u00edmbolo do manat", "ruble sign": "S\u00edmbolo do rublo", "yen character": "Car\u00e1cter do ien", "yuan character": "Car\u00e1cter do yuan", "yuan character, in hong kong and taiwan": "Car\u00e1cter do yuan, en Hong Kong e Taiwan", "yen\/yuan character variant one": "Variante 1 do car\u00e1cter do ien\/yuan", "Loading emoticons...": "Cargando emoticonas...", "Could not load emoticons": "Non foi pos\u00edbel cargar as emoticonas", "People": "Xente", "Animals and Nature": "Animais e natureza", "Food and Drink": "Comida e bebida", "Activity": "Actividade", "Travel and Places": "Viaxes e lugares", "Objects": "Obxectos", "Flags": "Bandeiras", "Characters": "Caracteres", "Characters (no spaces)": "Caracteres (sen espazos)", "Error: Form submit field collision.": "Erro: conflito de campo ao enviar o formulario ", "Error: No form element found.": "Erro: non se atopou ning\u00fan elemento de formulario", "Update": "Actualizar", "Color swatch": "Mostra de cores", "Turquoise": "Turquesa", "Green": "Verde", "Blue": "Azul", "Purple": "P\u00farpura", "Navy Blue": "Azul mari\u00f1o", "Dark Turquoise": "Turquesa escuro", "Dark Green": "Verde escuro", "Medium Blue": "Azul medio", "Medium Purple": "P\u00farpura medio", "Midnight Blue": "Azul noite", "Yellow": "Amarelo", "Orange": "Laranxa", "Red": "Vermello", "Light Gray": "Gris claro", "Gray": "Gris", "Dark Yellow": "Amarelo escuro", "Dark Orange": "Laranxa escuro", "Dark Red": "Vermello escuro", "Medium Gray": "Gris medio", "Dark Gray": "Gris escuro", "Black": "Negro", "White": "Branco", "Switch to or from fullscreen mode": "Activar ou desactivar o modo de pantalla completa", "Open help dialog": "Abrir o di\u00e1logo de axuda", "history": "historial", "styles": "estilos", "formatting": "formatado", "alignment": "ali\u00f1amento", "indentation": "sangrado", "permanent pen": "rotulador permanente", "comments": "comentarios", "Anchor": "Ancoraxe", "Special character": "Car\u00e1cter especial", "Color": "Cor", "Emoticons": "Emoticonas", "Document properties": "Propiedades do documento", "Image": "Imaxe", "Insert link": "Inserir ligaz\u00f3n", "Target": "Destino", "Link": "Ligaz\u00f3n", "Poster": "Cartel", "Media": "Medios", "Print": "Imprimir", "Prev": "Anterior", "Find and replace": "Buscar e substitu\u00edr", "Whole words": "Palabras completas", "Spellcheck": "Corrector ortogr\u00e1fico", "Caption": "Subt\u00edtulo", "Insert template": "Inserir modelo" }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/tinymce/langs/he_IL.js ================================================ tinymce.addI18n('he_IL',{ "Redo": "\u05d1\u05e6\u05e2 \u05e9\u05d5\u05d1", "Undo": "\u05d1\u05d8\u05dc", "Cut": "\u05d2\u05d6\u05d5\u05e8", "Copy": "\u05d4\u05e2\u05ea\u05e7", "Paste": "\u05d4\u05d3\u05d1\u05e7", "Select all": "\u05d1\u05d7\u05e8 \u05d4\u05db\u05dc", "New document": "\u05de\u05e1\u05de\u05da \u05d7\u05d3\u05e9", "Ok": "\u05d0\u05d9\u05e9\u05d5\u05e8", "Cancel": "\u05d1\u05d9\u05d8\u05d5\u05dc", "Visual aids": "\u05e2\u05d6\u05e8\u05d9\u05dd \u05d7\u05d6\u05d5\u05ea\u05d9\u05d9\u05dd", "Bold": "\u05de\u05d5\u05d3\u05d2\u05e9", "Italic": "\u05e0\u05d8\u05d5\u05d9", "Underline": "\u05e7\u05d5 \u05ea\u05d7\u05ea\u05d5\u05df", "Strikethrough": "\u05e7\u05d5 \u05d7\u05d5\u05e6\u05d4", "Superscript": "\u05db\u05ea\u05d1 \u05e2\u05d9\u05dc\u05d9", "Subscript": "\u05db\u05ea\u05d1 \u05ea\u05d7\u05ea\u05d9", "Clear formatting": "\u05e0\u05e7\u05d4 \u05e2\u05d9\u05e6\u05d5\u05d1", "Align left": "\u05d9\u05e9\u05e8 \u05dc\u05e9\u05de\u05d0\u05dc", "Align center": "\u05de\u05e8\u05db\u05d6", "Align right": "\u05d9\u05e9\u05e8 \u05dc\u05d9\u05de\u05d9\u05df", "Justify": "\u05d9\u05d9\u05e9\u05e8", "Bullet list": "\u05e8\u05e9\u05d9\u05de\u05ea \u05ea\u05d1\u05dc\u05d9\u05d8\u05d9\u05dd", "Numbered list": "\u05e8\u05e9\u05d9\u05de\u05d4 \u05de\u05de\u05d5\u05e1\u05e4\u05e8\u05ea", "Decrease indent": "\u05d4\u05e7\u05d8\u05df \u05d4\u05d6\u05d7\u05d4", "Increase indent": "\u05d4\u05d2\u05d3\u05dc \u05d4\u05d6\u05d7\u05d4", "Close": "\u05e1\u05d2\u05d5\u05e8", "Formats": "\u05e2\u05d9\u05e6\u05d5\u05d1\u05d9\u05dd", "Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u05d4\u05d3\u05e4\u05d3\u05e4\u05df \u05e9\u05dc\u05da \u05d0\u05d9\u05e0\u05d5 \u05de\u05d0\u05e4\u05e9\u05e8 \u05d2\u05d9\u05e9\u05d4 \u05d9\u05e9\u05d9\u05e8\u05d4 \u05dc\u05dc\u05d5\u05d7. \u05d0\u05e0\u05d0 \u05d4\u05e9\u05ea\u05de\u05e9 \u05d1\u05e7\u05d9\u05e6\u05d5\u05e8\u05d9 \u05d4\u05de\u05e7\u05dc\u05d3\u05ea Ctrl+X\/C\/V \u05d1\u05de\u05e7\u05d5\u05dd.", "Headers": "\u05db\u05d5\u05ea\u05e8\u05d5\u05ea", "Header 1": "\u05db\u05d5\u05ea\u05e8\u05ea 1", "Header 2": "\u05db\u05d5\u05ea\u05e8\u05ea 2", "Header 3": "\u05db\u05d5\u05ea\u05e8\u05ea 3", "Header 4": "\u05db\u05d5\u05ea\u05e8\u05ea 4", "Header 5": "\u05db\u05d5\u05ea\u05e8\u05ea 5", "Header 6": "\u05db\u05d5\u05ea\u05e8\u05ea 6", "Headings": "\u05db\u05d5\u05ea\u05e8\u05d5\u05ea", "Heading 1": "\u05db\u05d5\u05ea\u05e8\u05ea 1", "Heading 2": "\u05db\u05d5\u05ea\u05e8\u05ea 2", "Heading 3": "\u05db\u05d5\u05ea\u05e8\u05ea 3", "Heading 4": "\u05db\u05d5\u05ea\u05e8\u05ea 4", "Heading 5": "\u05db\u05d5\u05ea\u05e8\u05ea 5", "Heading 6": "\u05db\u05d5\u05ea\u05e8\u05ea 6", "Preformatted": "\u05de\u05e2\u05d5\u05e6\u05d1 \u05de\u05e8\u05d0\u05e9", "Div": "Div", "Pre": "Pre", "Code": "\u05e7\u05d5\u05d3", "Paragraph": "\u05e4\u05e1\u05e7\u05d4", "Blockquote": "Blockquote", "Inline": "\u05d1\u05ea\u05d5\u05da \u05e9\u05d5\u05e8\u05d4", "Blocks": "\u05d1\u05dc\u05d5\u05e7\u05d9\u05dd", "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u05d4\u05d3\u05d1\u05e7\u05d4 \u05d1\u05de\u05e6\u05d1 \u05d8\u05e7\u05e1\u05d8 \u05e8\u05d2\u05d9\u05dc. \u05ea\u05db\u05e0\u05d9\u05dd \u05d9\u05d5\u05d3\u05d1\u05e7\u05d5 \u05de\u05e2\u05ea\u05d4 \u05db\u05d8\u05e7\u05e1\u05d8 \u05e8\u05d2\u05d9\u05dc \u05e2\u05d3 \u05e9\u05ea\u05db\u05d1\u05d4 \u05d0\u05e4\u05e9\u05e8\u05d5\u05ea \u05d6\u05d5.", "Fonts": "\u05d2\u05d5\u05e4\u05e0\u05d9\u05dd", "Font Sizes": "\u05d2\u05d5\u05d3\u05dc \u05d2\u05d5\u05e4\u05e0\u05d9\u05dd", "Class": "\u05de\u05d7\u05dc\u05e7\u05d4", "Browse for an image": "\u05d7\u05e4\u05e9 \u05ea\u05de\u05d5\u05e0\u05d4", "OR": "OR", "Drop an image here": "\u05e9\u05d7\u05e8\u05e8 \u05ea\u05de\u05d5\u05e0\u05d4 \u05db\u05d0\u05df", "Upload": "\u05d4\u05e2\u05dc\u05d4", "Block": "\u05d1\u05dc\u05d5\u05e7", "Align": "\u05d9\u05e9\u05e8", "Default": "\u05d1\u05e8\u05d9\u05e8\u05ea \u05de\u05d7\u05d3\u05dc", "Circle": "\u05e2\u05d9\u05d2\u05d5\u05dc", "Disc": "\u05d7\u05d9\u05e9\u05d5\u05e7", "Square": "\u05e8\u05d9\u05d1\u05d5\u05e2", "Lower Alpha": "\u05d0\u05d5\u05ea\u05d9\u05d5\u05ea \u05d0\u05e0\u05d2\u05dc\u05d9\u05d5\u05ea \u05e7\u05d8\u05e0\u05d5\u05ea", "Lower Greek": "\u05d0\u05d5\u05ea\u05d9\u05d5\u05ea \u05d9\u05d5\u05d5\u05e0\u05d9\u05d5\u05ea \u05e7\u05d8\u05e0\u05d5\u05ea", "Lower Roman": "\u05e1\u05e4\u05e8\u05d5\u05ea \u05e8\u05d5\u05de\u05d9\u05d5\u05ea \u05e7\u05d8\u05e0\u05d5\u05ea", "Upper Alpha": "\u05d0\u05d5\u05ea\u05d9\u05d5\u05ea \u05d0\u05e0\u05d2\u05dc\u05d9\u05d5\u05ea \u05d2\u05d3\u05d5\u05dc\u05d5\u05ea", "Upper Roman": "\u05e1\u05e4\u05e8\u05d5\u05ea \u05e8\u05d5\u05de\u05d9\u05d5\u05ea \u05d2\u05d3\u05d5\u05dc\u05d5\u05ea", "Anchor...": "\u05e2\u05d5\u05d2\u05df...", "Name": "\u05e9\u05dd", "Id": "\u05de\u05d6\u05d4\u05d4", "Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "\u05d4\u05de\u05d6\u05d4\u05d4 \u05d7\u05d9\u05d9\u05d1 \u05dc\u05d4\u05ea\u05d7\u05d9\u05dc \u05d1\u05d0\u05d5\u05ea \u05d5\u05dc\u05d0\u05d7\u05e8\u05d9\u05d4 \u05e8\u05e7 \u05d0\u05d5\u05ea\u05d9\u05d5\u05ea, \u05de\u05e1\u05e4\u05e8\u05d9\u05dd, \u05de\u05e7\u05e4\u05d9\u05dd, \u05e0\u05e7\u05d5\u05d3\u05d5\u05ea, \u05e0\u05e7\u05d5\u05d3\u05ea\u05d9\u05d9\u05dd \u05d0\u05d5 \u05e7\u05d5\u05d5\u05d9\u05dd \u05ea\u05d7\u05ea\u05d9\u05d9\u05dd.", "You have unsaved changes are you sure you want to navigate away?": "\u05d4\u05e9\u05d9\u05e0\u05d5\u05d9\u05d9\u05dd \u05dc\u05d0 \u05e0\u05e9\u05de\u05e8\u05d5. \u05d1\u05d8\u05d5\u05d7 \u05e9\u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05e6\u05d0\u05ea \u05de\u05d4\u05d3\u05e3?", "Restore last draft": "\u05e9\u05d7\u05d6\u05e8 \u05d8\u05d9\u05d5\u05d8\u05d4 \u05d0\u05d7\u05e8\u05d5\u05e0\u05d4", "Special character...": "\u05ea\u05d5\u05d5\u05d9\u05dd \u05de\u05d9\u05d5\u05d7\u05d3\u05d9\u05dd...", "Source code": "\u05e7\u05d5\u05d3 \u05de\u05e7\u05d5\u05e8", "Insert\/Edit code sample": "\u05d4\u05db\u05e0\u05e1\/\u05e2\u05e8\u05d5\u05da \u05d3\u05d5\u05d2\u05de\u05ea \u05e7\u05d5\u05d3", "Language": "\u05e9\u05e4\u05d4", "Code sample...": "\u05d3\u05d5\u05d2\u05de\u05ea \u05e7\u05d5\u05d3...", "Color Picker": "\u05d1\u05d5\u05e8\u05e8 \u05e6\u05d1\u05e2\u05d9\u05dd", "R": "\u05d0'", "G": "\u05d9'", "B": "\u05db'", "Left to right": "\u05de\u05e9\u05de\u05d0\u05dc \u05dc\u05d9\u05de\u05d9\u05df", "Right to left": "\u05de\u05d9\u05de\u05d9\u05df \u05dc\u05e9\u05de\u05d0\u05dc", "Emoticons...": "\u05e1\u05de\u05dc\u05d9 \u05d4\u05d1\u05e2\u05d4...", "Metadata and Document Properties": "\u05de\u05d0\u05e4\u05d9\u05d9\u05e0\u05d9 \u05de\u05d8\u05d4-\u05e0\u05ea\u05d5\u05e0\u05d9\u05dd \u05d5\u05de\u05e1\u05de\u05da", "Title": "\u05db\u05d5\u05ea\u05e8\u05ea", "Keywords": "\u05de\u05d9\u05dc\u05d5\u05ea \u05de\u05e4\u05ea\u05d7", "Description": "\u05ea\u05d9\u05d0\u05d5\u05e8", "Robots": "\u05e8\u05d5\u05d1\u05d5\u05d8\u05d9\u05dd", "Author": "\u05de\u05d7\u05d1\u05e8", "Encoding": "\u05e7\u05d9\u05d3\u05d5\u05d3", "Fullscreen": "\u05de\u05e1\u05da \u05de\u05dc\u05d0", "Action": "\u05e4\u05e2\u05d5\u05dc\u05d4", "Shortcut": "\u05e7\u05d9\u05e6\u05d5\u05e8", "Help": "\u05e2\u05d6\u05e8\u05d4", "Address": "\u05db\u05ea\u05d5\u05d1\u05ea", "Focus to menubar": "\u05d4\u05e2\u05d1\u05e8 \u05de\u05d9\u05e7\u05d5\u05d3 \u05dc\u05e1\u05e8\u05d2\u05dc \u05d4\u05ea\u05e4\u05e8\u05d8\u05d9\u05dd", "Focus to toolbar": "\u05d4\u05e2\u05d1\u05e8 \u05de\u05d9\u05e7\u05d5\u05d3 \u05dc\u05e1\u05e8\u05d2\u05dc \u05d4\u05db\u05dc\u05d9\u05dd", "Focus to element path": "\u05e2\u05d1\u05e8 \u05de\u05d9\u05e7\u05d5\u05d3 \u05dc\u05db\u05ea\u05d5\u05d1\u05ea \u05d4\u05e4\u05e8\u05d9\u05d8", "Focus to contextual toolbar": "\u05d4\u05e2\u05d1\u05e8 \u05de\u05d9\u05e7\u05d5\u05d3 \u05dc\u05e1\u05e8\u05d2\u05dc \u05ea\u05d5\u05db\u05df", "Insert link (if link plugin activated)": "\u05d4\u05db\u05e0\u05e1 \u05e7\u05d9\u05e9\u05d5\u05e8 (\u05d0\u05dd \u05ea\u05d5\u05e1\u05e3 \"\u05e7\u05d9\u05e9\u05d5\u05e8\u05d9\u05dd\" \u05e4\u05e2\u05d9\u05dc)", "Save (if save plugin activated)": "\u05e9\u05de\u05d5\u05e8 (\u05d0\u05dd \u05ea\u05d5\u05e1\u05e3 \"\u05e9\u05de\u05d9\u05e8\u05d4\" \u05e4\u05e2\u05d9\u05dc)", "Find (if searchreplace plugin activated)": "\u05d7\u05e4\u05e9 (\u05d0\u05dd \u05ea\u05d5\u05e1\u05e3 \"\u05d7\u05e4\u05e9 \u05d5\u05d4\u05d7\u05dc\u05e3\" \u05e4\u05e2\u05d9\u05dc)", "Plugins installed ({0}):": "\u05ea\u05d5\u05e1\u05e4\u05d9\u05dd \u05de\u05d5\u05ea\u05e7\u05e0\u05d9\u05dd ({0}):", "Premium plugins:": "\u05ea\u05d5\u05e1\u05e4\u05d9\u05dd \u05d1\u05ea\u05e9\u05dc\u05d5\u05dd:", "Learn more...": "\u05dc\u05de\u05d3 \u05e2\u05d5\u05d3...", "You are using {0}": "\u05d0\u05ea\\\u05d4 \u05de\u05e9\u05ea\u05de\u05e9\\\u05ea {0}", "Plugins": "\u05ea\u05d5\u05e1\u05e4\u05d9\u05dd", "Handy Shortcuts": "\u05e7\u05d9\u05e6\u05d5\u05e8\u05d9\u05dd \u05e9\u05d9\u05de\u05d5\u05e9\u05d9\u05d9\u05dd", "Horizontal line": "\u05e7\u05d5 \u05d0\u05d5\u05e4\u05e7\u05d9", "Insert\/edit image": "\u05d4\u05db\u05e0\u05e1\/\u05e2\u05e8\u05d5\u05da \u05ea\u05de\u05d5\u05e0\u05d4", "Image description": "\u05ea\u05d9\u05d0\u05d5\u05e8 \u05d4\u05ea\u05de\u05d5\u05e0\u05d4", "Source": "\u05de\u05e7\u05d5\u05e8", "Dimensions": "\u05de\u05d9\u05de\u05d3\u05d9\u05dd", "Constrain proportions": "\u05d4\u05d2\u05d1\u05dc\u05ea \u05e4\u05e8\u05d5\u05e4\u05d5\u05e8\u05e6\u05d9\u05d5\u05ea", "General": "\u05db\u05dc\u05dc\u05d9", "Advanced": "\u05de\u05ea\u05e7\u05d3\u05dd", "Style": "\u05e1\u05d2\u05e0\u05d5\u05df", "Vertical space": "\u05de\u05e8\u05d5\u05d5\u05d7 \u05d0\u05e0\u05db\u05d9", "Horizontal space": "\u05de\u05e8\u05d5\u05d5\u05d7 \u05d0\u05d5\u05e4\u05e7\u05d9", "Border": "\u05de\u05e1\u05d2\u05e8\u05ea", "Insert image": "\u05d4\u05db\u05e0\u05e1 \u05ea\u05de\u05d5\u05e0\u05d4", "Image...": "\u05ea\u05de\u05d5\u05e0\u05d4...", "Image list": "\u05e8\u05e9\u05d9\u05de\u05ea \u05ea\u05de\u05d5\u05e0\u05d5\u05ea", "Rotate counterclockwise": "\u05e1\u05d5\u05d1\u05d1 \u05d1\u05db\u05d9\u05d5\u05d5\u05df \u05d4\u05e4\u05d5\u05da \u05dc\u05e9\u05e2\u05d5\u05df", "Rotate clockwise": "\u05e1\u05d5\u05d1\u05d1 \u05d1\u05db\u05d9\u05d5\u05d5\u05df \u05d4\u05e9\u05e2\u05d5\u05df", "Flip vertically": "\u05d4\u05e4\u05d5\u05da \u05d0\u05e0\u05db\u05d9\u05ea", "Flip horizontally": "\u05d4\u05e4\u05d5\u05da \u05d0\u05d5\u05e4\u05e7\u05d9\u05ea", "Edit image": "\u05e2\u05e8\u05d5\u05da \u05ea\u05de\u05d5\u05e0\u05d4", "Image options": "\u05d0\u05e4\u05e9\u05e8\u05d5\u05d9\u05d5\u05ea \u05ea\u05de\u05d5\u05e0\u05d4", "Zoom in": "\u05d4\u05d2\u05d3\u05dc \u05ea\u05e6\u05d5\u05d2\u05d4", "Zoom out": "\u05d4\u05e7\u05d8\u05df \u05ea\u05e6\u05d5\u05d2\u05d4", "Crop": "\u05e7\u05e6\u05e5", "Resize": "\u05e9\u05e0\u05d4 \u05d2\u05d5\u05d3\u05dc", "Orientation": "\u05db\u05d9\u05d5\u05d5\u05df \u05dc\u05d0\u05d5\u05e8\u05da \/ \u05dc\u05e8\u05d5\u05d7\u05d1", "Brightness": "\u05d1\u05d4\u05d9\u05e8\u05d5\u05ea", "Sharpen": "\u05d7\u05d3\u05d3", "Contrast": "\u05e0\u05d9\u05d2\u05d5\u05d3\u05d9\u05d5\u05ea", "Color levels": "\u05e8\u05de\u05d5\u05ea \u05e6\u05d1\u05e2\u05d9\u05dd", "Gamma": "\u05d2\u05d0\u05de\u05d4", "Invert": "\u05d4\u05d9\u05e4\u05d5\u05da \u05e6\u05d1\u05e2\u05d9\u05dd", "Apply": "\u05d9\u05d9\u05e9\u05dd", "Back": "\u05d7\u05d6\u05d5\u05e8", "Insert date\/time": "\u05d4\u05db\u05e0\u05e1 \u05ea\u05d0\u05e8\u05d9\u05da\/\u05e9\u05e2\u05d4", "Date\/time": "\u05ea\u05d0\u05e8\u05d9\u05da\/\u05e9\u05e2\u05d4", "Insert\/Edit Link": "\u05d4\u05db\u05e0\u05e1\/\u05e2\u05e8\u05d5\u05da \u05e7\u05d9\u05e9\u05d5\u05e8", "Insert\/edit link": "\u05d4\u05db\u05e0\u05e1\/\u05e2\u05e8\u05d5\u05da \u05e7\u05d9\u05e9\u05d5\u05e8", "Text to display": "\u05d8\u05e7\u05e1\u05d8 \u05dc\u05d4\u05e6\u05d2\u05d4", "Url": "\u05db\u05ea\u05d5\u05d1\u05ea \u05e7\u05d9\u05e9\u05d5\u05e8", "Open link in...": "\u05e4\u05ea\u05d7 \u05e7\u05d9\u05e9\u05d5\u05e8 \u05d1...", "Current window": "\u05d7\u05dc\u05d5\u05df \u05e0\u05d5\u05db\u05d7\u05d9", "None": "\u05dc\u05dc\u05d0", "New window": "\u05d7\u05dc\u05d5\u05df \u05d7\u05d3\u05e9", "Remove link": "\u05de\u05d7\u05e7 \u05e7\u05d9\u05e9\u05d5\u05e8", "Anchors": "\u05e2\u05d5\u05d2\u05e0\u05d9\u05dd", "Link...": "\u05e7\u05d9\u05e9\u05d5\u05e8...", "Paste or type a link": "\u05d4\u05d3\u05d1\u05e7 \u05d0\u05d5 \u05d4\u05e7\u05dc\u05d3 \u05e7\u05d9\u05e9\u05d5\u05e8", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u05e0\u05e8\u05d0\u05d4 \u05e9\u05d4\u05db\u05ea\u05d5\u05d1\u05ea \u05e9\u05d4\u05db\u05e0\u05e1\u05ea \u05d4\u05d9\u05d0 \u05db\u05ea\u05d5\u05d1\u05ea \u05d0\u05d9\u05de\u05d9\u05d9\u05dc. \u05d4\u05d0\u05dd \u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05d4\u05d5\u05e1\u05d9\u05e3 \u05d0\u05ea \u05d4\u05e7\u05d9\u05d3\u05d5\u05de\u05ea :mailto?", "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\u05e0\u05e8\u05d0\u05d4 \u05e9\u05d4\u05db\u05ea\u05d5\u05d1\u05ea \u05e9\u05d4\u05db\u05e0\u05e1\u05ea \u05d4\u05d9\u05d0 \u05e7\u05d9\u05e9\u05d5\u05e8 \u05d7\u05d9\u05e6\u05d5\u05e0\u05d9 \u05d4\u05d0\u05dd \u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05d4\u05d5\u05e1\u05d9\u05e3 \u05e7\u05d9\u05d3\u05d5\u05de\u05ea http:\/\/?", "Link list": "\u05e8\u05e9\u05d9\u05de\u05ea \u05e7\u05d9\u05e9\u05d5\u05e8\u05d9\u05dd", "Insert video": "\u05d4\u05db\u05e0\u05e1 \u05e1\u05e8\u05d8\u05d5\u05df", "Insert\/edit video": "\u05d4\u05db\u05e0\u05e1\/\u05e2\u05e8\u05d5\u05da \u05e1\u05e8\u05d8\u05d5\u05df", "Insert\/edit media": "\u05d4\u05db\u05e0\u05e1\/\u05e2\u05e8\u05d5\u05da \u05de\u05d3\u05d9\u05d4", "Alternative source": "\u05de\u05e7\u05d5\u05e8 \u05de\u05e9\u05e0\u05d9", "Alternative source URL": "\u05db\u05ea\u05d5\u05d1\u05ea URL \u05dc\u05de\u05e7\u05d5\u05e8 \u05d7\u05dc\u05d5\u05e4\u05d9", "Media poster (Image URL)": "\u05e4\u05d5\u05e1\u05d8\u05e8 \u05de\u05d3\u05d9\u05d4 (\u05db\u05ea\u05d5\u05d1\u05ea URL \u05dc\u05ea\u05de\u05d5\u05e0\u05d4)", "Paste your embed code below:": "\u05d4\u05d3\u05d1\u05e7 \u05e7\u05d5\u05d3 \u05d4\u05d8\u05de\u05e2\u05d4 \u05de\u05ea\u05d7\u05ea:", "Embed": "\u05d4\u05d8\u05de\u05e2", "Media...": "\u05de\u05d3\u05d9\u05d4...", "Nonbreaking space": "\u05e8\u05d5\u05d5\u05d7 (\u05dc\u05dc\u05d0 \u05e9\u05d1\u05d9\u05e8\u05ea \u05e9\u05d5\u05e8\u05d4)", "Page break": "\u05d3\u05e3 \u05d7\u05d3\u05e9", "Paste as text": "\u05d4\u05d3\u05d1\u05e7 \u05db\u05d8\u05e7\u05e1\u05d8", "Preview": "\u05ea\u05e6\u05d5\u05d2\u05d4 \u05de\u05e7\u05d3\u05d9\u05de\u05d4", "Print...": "\u05d4\u05d3\u05e4\u05e1...", "Save": "\u05e9\u05de\u05d9\u05e8\u05d4", "Find": "\u05d7\u05e4\u05e9", "Replace with": "\u05d4\u05d7\u05dc\u05e3 \u05d1", "Replace": "\u05d4\u05d7\u05dc\u05e3", "Replace all": "\u05d4\u05d7\u05dc\u05e3 \u05d4\u05db\u05dc", "Previous": "\u05d4\u05e7\u05d5\u05d3\u05dd", "Next": "\u05d4\u05d1\u05d0", "Find and replace...": "\u05d7\u05d9\u05e4\u05d5\u05e9 \u05d5\u05d4\u05d7\u05dc\u05e4\u05d4...", "Could not find the specified string.": "\u05de\u05d7\u05e8\u05d5\u05d6\u05ea \u05dc\u05d0 \u05e0\u05de\u05e6\u05d0\u05d4", "Match case": "\u05d4\u05d1\u05d7\u05df \u05d1\u05d9\u05df \u05d0\u05d5\u05ea\u05d9\u05d5\u05ea \u05e7\u05d8\u05e0\u05d5\u05ea \u05dc\u05d2\u05d3\u05d5\u05dc\u05d5\u05ea", "Find whole words only": "\u05d7\u05e4\u05e9 \u05de\u05d9\u05dc\u05d9\u05dd \u05e9\u05dc\u05de\u05d5\u05ea \u05d1\u05dc\u05d1\u05d3", "Spell check": "\u05d1\u05d3\u05d9\u05e7\u05ea \u05d0\u05d9\u05d5\u05ea", "Ignore": "\u05d4\u05ea\u05e2\u05dc\u05dd", "Ignore all": "\u05d4\u05ea\u05e2\u05dc\u05dd \u05de\u05d4\u05db\u05dc", "Finish": "\u05e1\u05d9\u05d9\u05dd", "Add to Dictionary": "\u05d4\u05d5\u05e1\u05e3 \u05dc\u05de\u05d9\u05dc\u05d5\u05df", "Insert table": "\u05d4\u05db\u05e0\u05e1 \u05d8\u05d1\u05dc\u05d4", "Table properties": "\u05de\u05d0\u05e4\u05d9\u05d9\u05e0\u05d9 \u05d8\u05d1\u05dc\u05d4", "Delete table": "\u05de\u05d7\u05e7 \u05d8\u05d1\u05dc\u05d4", "Cell": "\u05ea\u05d0", "Row": "\u05e9\u05d5\u05e8\u05d4", "Column": "\u05e2\u05de\u05d5\u05d3\u05d4", "Cell properties": "\u05de\u05d0\u05e4\u05d9\u05d9\u05e0\u05d9 \u05ea\u05d0", "Merge cells": "\u05de\u05d6\u05d2 \u05ea\u05d0\u05d9\u05dd", "Split cell": "\u05e4\u05e6\u05dc \u05ea\u05d0", "Insert row before": "\u05d4\u05d5\u05e1\u05e3 \u05e9\u05d5\u05e8\u05d4 \u05dc\u05e4\u05e0\u05d9", "Insert row after": "\u05d4\u05d5\u05e1\u05e3 \u05e9\u05d5\u05e8\u05d4 \u05d0\u05d7\u05e8\u05d9", "Delete row": "\u05de\u05d7\u05e7 \u05e9\u05d5\u05e8\u05d4", "Row properties": "\u05de\u05d0\u05e4\u05d9\u05d9\u05e0\u05d9 \u05e9\u05d5\u05e8\u05d4", "Cut row": "\u05d2\u05d6\u05d5\u05e8 \u05e9\u05d5\u05e8\u05d4", "Copy row": "\u05d4\u05e2\u05ea\u05e7 \u05e9\u05d5\u05e8\u05d4", "Paste row before": "\u05d4\u05d3\u05d1\u05e7 \u05e9\u05d5\u05e8\u05d4 \u05dc\u05e4\u05e0\u05d9", "Paste row after": "\u05d4\u05e2\u05ea\u05e7 \u05e9\u05d5\u05e8\u05d4 \u05d0\u05d7\u05e8\u05d9", "Insert column before": "\u05d4\u05e2\u05ea\u05e7 \u05e2\u05de\u05d5\u05d3\u05d4 \u05dc\u05e4\u05e0\u05d9", "Insert column after": "\u05d4\u05e2\u05ea\u05e7 \u05e2\u05de\u05d5\u05d3\u05d4 \u05d0\u05d7\u05e8\u05d9", "Delete column": "\u05de\u05d7\u05e7 \u05e2\u05de\u05d5\u05d3\u05d4", "Cols": "\u05e2\u05de\u05d5\u05d3\u05d5\u05ea", "Rows": "\u05e9\u05d5\u05e8\u05d5\u05ea", "Width": "\u05e8\u05d5\u05d7\u05d1", "Height": "\u05d2\u05d5\u05d1\u05d4", "Cell spacing": "\u05e9\u05d5\u05dc\u05d9\u05d9\u05dd \u05d7\u05d9\u05e6\u05d5\u05e0\u05d9\u05dd \u05dc\u05ea\u05d0", "Cell padding": "\u05e9\u05d5\u05dc\u05d9\u05d9\u05dd \u05e4\u05e0\u05d9\u05de\u05d9\u05d9\u05dd \u05dc\u05ea\u05d0", "Show caption": "\u05d4\u05e6\u05d2 \u05db\u05ea\u05d5\u05d1\u05d9\u05ea", "Left": "\u05e9\u05de\u05d0\u05dc", "Center": "\u05de\u05e8\u05db\u05d6", "Right": "\u05d9\u05de\u05d9\u05df", "Cell type": "\u05e1\u05d5\u05d2 \u05ea\u05d0", "Scope": "\u05d4\u05d9\u05e7\u05e3", "Alignment": "\u05d9\u05d9\u05e9\u05d5\u05e8", "H Align": "\u05d9\u05d9\u05e9\u05d5\u05e8 \u05d0\u05d5\u05e4\u05e7\u05d9", "V Align": "\u05d9\u05d9\u05e9\u05d5\u05e8 \u05d0\u05e0\u05db\u05d9", "Top": "\u05e2\u05dc\u05d9\u05d5\u05df", "Middle": "\u05d0\u05de\u05e6\u05e2", "Bottom": "\u05ea\u05d7\u05ea\u05d9\u05ea", "Header cell": "\u05db\u05d5\u05ea\u05e8\u05ea \u05dc\u05ea\u05d0", "Row group": "\u05e7\u05d9\u05d1\u05d5\u05e5 \u05e9\u05d5\u05e8\u05d5\u05ea", "Column group": "\u05e7\u05d9\u05d1\u05d5\u05e5 \u05e2\u05de\u05d5\u05d3\u05d5\u05ea", "Row type": "\u05e1\u05d5\u05d2 \u05e9\u05d5\u05e8\u05d4", "Header": "\u05db\u05d5\u05ea\u05e8\u05ea", "Body": "\u05d2\u05d5\u05e3 \u05d4\u05d8\u05d1\u05dc\u05d0", "Footer": "\u05db\u05d5\u05ea\u05e8\u05ea \u05ea\u05d7\u05ea\u05d5\u05e0\u05d4", "Border color": "\u05e6\u05d1\u05e2 \u05d2\u05d1\u05d5\u05dc", "Insert template...": "\u05d4\u05db\u05e0\u05e1 \u05ea\u05d1\u05e0\u05d9\u05ea...", "Templates": "\u05ea\u05d1\u05e0\u05d9\u05d5\u05ea", "Template": "\u05ea\u05d1\u05e0\u05d9\u05ea", "Text color": "\u05e6\u05d1\u05e2 \u05d4\u05db\u05ea\u05d1", "Background color": "\u05e6\u05d1\u05e2 \u05e8\u05e7\u05e2", "Custom...": "\u05de\u05d5\u05ea\u05d0\u05dd \u05d0\u05d9\u05e9\u05d9\u05ea...", "Custom color": "\u05e6\u05d1\u05e2 \u05de\u05d5\u05ea\u05d0\u05dd \u05d0\u05d9\u05e9\u05d9\u05ea", "No color": "\u05dc\u05dc\u05d0 \u05e6\u05d1\u05e2", "Remove color": "\u05d4\u05e1\u05e8 \u05e6\u05d1\u05e2", "Table of Contents": "\u05ea\u05d5\u05db\u05df \u05e2\u05e0\u05d9\u05d9\u05e0\u05d9\u05dd", "Show blocks": "\u05d4\u05e6\u05d2 \u05ea\u05d9\u05d1\u05d5\u05ea", "Show invisible characters": "\u05d4\u05e6\u05d2 \u05ea\u05d5\u05d5\u05d9\u05dd \u05dc\u05d0 \u05e0\u05e8\u05d0\u05d9\u05dd", "Word count": "\u05e1\u05e4\u05d9\u05e8\u05ea \u05de\u05d9\u05dc\u05d9\u05dd", "Count": "\u05e1\u05e4\u05d9\u05e8\u05d4", "Document": "\u05de\u05e1\u05de\u05da", "Selection": "\u05d1\u05d7\u05d9\u05e8\u05d4", "Words": "\u05de\u05d9\u05dc\u05d9\u05dd", "Words: {0}": "\u05de\u05d9\u05dc\u05d9\u05dd: {0}", "{0} words": "{0} \u05de\u05d9\u05dc\u05d9\u05dd", "File": "\u05e7\u05d5\u05d1\u05e5", "Edit": "\u05e2\u05e8\u05d9\u05db\u05d4", "Insert": "\u05d4\u05d5\u05e1\u05e4\u05d4", "View": "\u05ea\u05e6\u05d5\u05d2\u05d4", "Format": "\u05e4\u05d5\u05e8\u05de\u05d8", "Table": "\u05d8\u05d1\u05dc\u05d4", "Tools": "\u05db\u05dc\u05d9\u05dd", "Powered by {0}": "\u05de\u05d5\u05e4\u05e2\u05dc \u05e2\"\u05d9 {0}", "Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u05ea\u05d9\u05d1\u05ea \u05e2\u05e8\u05d9\u05db\u05d4 \u05d7\u05db\u05de\u05d4. \u05dc\u05d7\u05e5 Alt-F9 \u05dc\u05ea\u05e4\u05e8\u05d9\u05d8. Alt-F10 \u05dc\u05ea\u05e6\u05d5\u05d2\u05ea \u05db\u05e4\u05ea\u05d5\u05e8\u05d9\u05dd, Alt-0 \u05dc\u05e2\u05d6\u05e8\u05d4", "Image title": "\u05db\u05d5\u05ea\u05e8\u05ea \u05ea\u05de\u05d5\u05e0\u05d4", "Border width": "\u05e8\u05d5\u05d7\u05d1 \u05d2\u05d1\u05d5\u05dc", "Border style": "\u05e1\u05d2\u05e0\u05d5\u05df \u05d2\u05d1\u05d5\u05dc", "Error": "\u05e9\u05d2\u05d9\u05d0\u05d4", "Warn": "\u05d0\u05d6\u05d4\u05e8\u05d4", "Valid": "\u05d7\u05d5\u05e7\u05d9", "To open the popup, press Shift+Enter": "\u05db\u05d3\u05d9 \u05dc\u05e4\u05ea\u05d5\u05d7 \u05d0\u05ea \u05d4\u05e4\u05e8\u05d9\u05d8 \u05d4\u05de\u05d5\u05e7\u05e4\u05e5, \u05d4\u05e7\u05e9 \u05e2\u05dc Shift+Enter", "Rich Text Area. Press ALT-0 for help.": "\u05d0\u05d6\u05d5\u05e8 \u05d8\u05e7\u05e1\u05d8 \u05e2\u05e9\u05d9\u05e8. \u05d4\u05e7\u05e9 \u05e2\u05dc ALT-0 \u05dc\u05e2\u05d6\u05e8\u05d4.", "System Font": "\u05d2\u05d5\u05e4\u05df \u05de\u05e2\u05e8\u05db\u05ea", "Failed to upload image: {0}": "\u05db\u05e9\u05dc \u05d1\u05d4\u05e2\u05dc\u05d0\u05ea \u05ea\u05de\u05d5\u05e0\u05d4: {0}", "Failed to load plugin: {0} from url {1}": "\u05db\u05e9\u05dc \u05d1\u05d8\u05e2\u05d9\u05e0\u05ea \u05d9\u05d9\u05e9\u05d5\u05dd Plugin: {0} \u05de\u05db\u05ea\u05d5\u05d1\u05ea URL\u200f {1}", "Failed to load plugin url: {0}": "\u05db\u05e9\u05dc \u05d1\u05d8\u05e2\u05d9\u05e0\u05ea \u05db\u05ea\u05d5\u05d1\u05ea URL \u05e9\u05dc \u05d9\u05d9\u05e9\u05d5\u05dd Plugin\u200f: {0}", "Failed to initialize plugin: {0}": "\u05db\u05e9\u05dc \u05d1\u05d0\u05ea\u05d7\u05d5\u05dc \u05d9\u05d9\u05e9\u05d5\u05dd Plugin\u200f: {0}", "example": "\u05d3\u05d5\u05d2\u05de\u05d4", "Search": "\u05d7\u05e4\u05e9", "All": "\u05d4\u05db\u05dc", "Currency": "\u05de\u05d8\u05d1\u05e2", "Text": "\u05d8\u05e7\u05e1\u05d8", "Quotations": "\u05e9\u05d0\u05dc\u05d5\u05ea", "Mathematical": "\u05de\u05ea\u05de\u05d8\u05d9", "Extended Latin": "\u05dc\u05d8\u05d9\u05e0\u05d9\u05ea \u05de\u05d5\u05e8\u05d7\u05d1\u05ea", "Symbols": "\u05e1\u05de\u05dc\u05d9\u05dd", "Arrows": "\u05d7\u05d9\u05e6\u05d9\u05dd", "User Defined": "\u05de\u05d5\u05d2\u05d3\u05e8 \u05e2\u05dc-\u05d9\u05d3\u05d9 \u05d4\u05de\u05e9\u05ea\u05de\u05e9", "dollar sign": "\u05e1\u05d9\u05de\u05df \u05d3\u05d5\u05dc\u05e8", "currency sign": "\u05e1\u05d9\u05de\u05df \u05de\u05d8\u05d1\u05e2", "euro-currency sign": "\u05e1\u05d9\u05de\u05df \u05de\u05d8\u05d1\u05e2 \u05d0\u05d9\u05e8\u05d5", "colon sign": "\u05e1\u05d9\u05de\u05df \u05e7\u05d5\u05dc\u05d5\u05df", "cruzeiro sign": "\u05e1\u05d9\u05de\u05df \u05e7\u05e8\u05d5\u05d6\u05e8\u05d5", "french franc sign": "\u05e1\u05d9\u05de\u05df \u05e4\u05e8\u05e0\u05e7 \u05e6\u05e8\u05e4\u05ea\u05d9", "lira sign": "\u05e1\u05d9\u05de\u05df \u05dc\u05d9\u05e8\u05d4", "mill sign": "\u05e1\u05d9\u05de\u05df \u05de\u05d9\u05dc", "naira sign": "\u05e1\u05d9\u05de\u05df \u05e0\u05d0\u05d9\u05e8\u05d4", "peseta sign": "\u05e1\u05d9\u05de\u05df \u05e4\u05d6\u05d8\u05d4", "rupee sign": "\u05e1\u05d9\u05de\u05df \u05e8\u05d5\u05e4\u05d9", "won sign": "\u05e1\u05d9\u05de\u05df \u05d5\u05d5\u05df", "new sheqel sign": "\u05e1\u05d9\u05de\u05df \u05e9\u05e7\u05dc \u05d7\u05d3\u05e9", "dong sign": "\u05e1\u05d9\u05de\u05df \u05d3\u05d5\u05e0\u05d2", "kip sign": "\u05e1\u05d9\u05de\u05df \u05e7\u05d9\u05e4", "tugrik sign": "\u05e1\u05d9\u05de\u05df \u05d8\u05d5\u05d2\u05e8\u05d9\u05e7", "drachma sign": "\u05e1\u05d9\u05de\u05df \u05d3\u05e8\u05db\u05de\u05d4", "german penny symbol": "\u05e1\u05de\u05dc \u05e4\u05e0\u05d9 \u05d2\u05e8\u05de\u05e0\u05d9", "peso sign": "\u05e1\u05d9\u05de\u05df \u05e4\u05d6\u05d5", "guarani sign": "\u05e1\u05d9\u05de\u05df \u05d2\u05d5\u05d0\u05e8\u05e0\u05d9\u05ea", "austral sign": "\u05e1\u05d9\u05de\u05df \u05d0\u05d5\u05e1\u05d8\u05e8\u05dc", "hryvnia sign": "\u05e1\u05d9\u05de\u05df \u05e8\u05d9\u05d1\u05e0\u05d9\u05d4", "cedi sign": "\u05e1\u05d9\u05de\u05df \u05e1\u05d3\u05d9", "livre tournois sign": "\u05e1\u05d9\u05de\u05df \u05dc\u05d1\u05e8\u05d4 \u05d8\u05d5\u05e8\u05e0\u05d5", "spesmilo sign": "\u05e1\u05d9\u05de\u05df \u05e1\u05e4\u05e1\u05de\u05d9\u05dc\u05d5", "tenge sign": "\u05e1\u05d9\u05de\u05df \u05d8\u05e0\u05d2\u05d4", "indian rupee sign": "\u05e1\u05d9\u05de\u05df \u05e8\u05d5\u05e4\u05d9 \u05d4\u05d5\u05d3\u05d9", "turkish lira sign": "\u05e1\u05d9\u05de\u05df \u05dc\u05d9\u05e8\u05d4 \u05d8\u05d5\u05e8\u05e7\u05d9\u05ea", "nordic mark sign": "\u05e1\u05d9\u05de\u05df \u05de\u05d0\u05e8\u05e7 \u05e1\u05e7\u05e0\u05d3\u05d9\u05e0\u05d1\u05d9", "manat sign": "\u05e1\u05d9\u05de\u05df \u05de\u05d0\u05e0\u05d0\u05d8", "ruble sign": "\u05e1\u05d9\u05de\u05df \u05e8\u05d5\u05d1\u05dc", "yen character": "\u05ea\u05d5 \u05d9\u05df", "yuan character": "\u05ea\u05d5 \u05d9\u05d5\u05d0\u05df", "yuan character, in hong kong and taiwan": "\u05ea\u05d5 \u05d9\u05d5\u05d0\u05df, \u05d1\u05d4\u05d5\u05e0\u05d2 \u05e7\u05d5\u05e0\u05d2 \u05d5\u05d1\u05d8\u05d9\u05d9\u05d5\u05d5\u05d0\u05df", "yen\/yuan character variant one": "\u05de\u05e9\u05ea\u05e0\u05d4 \u05d0\u05d7\u05d3 \u05e9\u05dc \u05ea\u05d5 \u05d9\u05d5\u05d0\u05df\/\u05d9\u05df", "Loading emoticons...": "\u05d8\u05d5\u05e2\u05df \u05e1\u05de\u05dc\u05d9 \u05d4\u05d1\u05e2\u05d4...", "Could not load emoticons": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05d4\u05d9\u05d4 \u05dc\u05d8\u05e2\u05d5\u05df \u05e1\u05de\u05dc\u05d9 \u05d4\u05d1\u05e2\u05d4", "People": "\u05d0\u05e0\u05e9\u05d9\u05dd", "Animals and Nature": "\u05d1\u05e2\u05dc\u05d9-\u05d7\u05d9\u05d9\u05dd \u05d5\u05d8\u05d1\u05e2", "Food and Drink": "\u05d0\u05d5\u05db\u05dc \u05d5\u05e9\u05ea\u05d9\u05d9\u05d4", "Activity": "\u05e4\u05e2\u05d9\u05dc\u05d5\u05ea", "Travel and Places": "\u05e0\u05e1\u05d9\u05e2\u05d4 \u05d5\u05de\u05e7\u05d5\u05de\u05d5\u05ea", "Objects": "\u05d0\u05d5\u05d1\u05d9\u05d9\u05e7\u05d8\u05d9\u05dd", "Flags": "\u05d3\u05d2\u05dc\u05d9\u05dd", "Characters": "\u05ea\u05d5\u05d5\u05d9\u05dd", "Characters (no spaces)": "\u05ea\u05d5\u05d5\u05d9\u05dd (\u05dc\u05dc\u05d0 \u05e8\u05d5\u05d5\u05d7\u05d9\u05dd)", "{0} characters": "{0} \u05ea\u05d5\u05d5\u05d9\u05dd", "Error: Form submit field collision.": "\u05e9\u05d2\u05d9\u05d0\u05d4: \u05d4\u05ea\u05e0\u05d2\u05e9\u05d5\u05ea \u05d1\u05e9\u05d3\u05d4 \u05e9\u05dc\u05d9\u05d7\u05ea \u05d8\u05d5\u05e4\u05e1.", "Error: No form element found.": "\u05e9\u05d2\u05d9\u05d0\u05d4: \u05dc\u05d0 \u05e0\u05de\u05e6\u05d0 \u05e8\u05db\u05d9\u05d1 \u05d8\u05d5\u05e4\u05e1.", "Update": "\u05e2\u05d3\u05db\u05df", "Color swatch": "\u05d3\u05d5\u05d2\u05de\u05d0\u05d5\u05ea \u05e6\u05d1\u05e2", "Turquoise": "\u05d8\u05d5\u05e8\u05e7\u05d9\u05d6", "Green": "\u05d9\u05e8\u05d5\u05e7", "Blue": "\u05db\u05d7\u05d5\u05dc", "Purple": "\u05e1\u05d2\u05d5\u05dc", "Navy Blue": "\u05db\u05d7\u05d5\u05dc \u05e6\u05d9", "Dark Turquoise": "\u05d8\u05d5\u05e8\u05e7\u05d9\u05d6 \u05db\u05d4\u05d4", "Dark Green": "\u05d9\u05e8\u05d5\u05e7 \u05db\u05d4\u05d4", "Medium Blue": "\u05db\u05d7\u05d5\u05dc \u05d1\u05d9\u05e0\u05d5\u05e0\u05d9", "Medium Purple": "\u05e1\u05d2\u05d5\u05dc \u05d1\u05d9\u05e0\u05d5\u05e0\u05d9", "Midnight Blue": "\u05db\u05d7\u05d5\u05dc \u05d7\u05e6\u05d5\u05ea", "Yellow": "\u05e6\u05d4\u05d5\u05d1", "Orange": "\u05db\u05ea\u05d5\u05dd", "Red": "\u05d0\u05d3\u05d5\u05dd", "Light Gray": "\u05d0\u05e4\u05d5\u05e8 \u05d1\u05d4\u05d9\u05e8", "Gray": "\u05d0\u05e4\u05d5\u05e8", "Dark Yellow": "\u05e6\u05d4\u05d5\u05d1 \u05db\u05d4\u05d4", "Dark Orange": "\u05db\u05ea\u05d5\u05dd \u05db\u05d4\u05d4", "Dark Red": "\u05d0\u05d3\u05d5\u05dd \u05db\u05d4\u05d4", "Medium Gray": "\u05d0\u05e4\u05d5\u05e8 \u05d1\u05d9\u05e0\u05d5\u05e0\u05d9", "Dark Gray": "\u05d0\u05e4\u05d5\u05e8 \u05db\u05d4\u05d4", "Light Green": "\u05d9\u05e8\u05d5\u05e7 \u05d1\u05d4\u05d9\u05e8", "Light Yellow": "\u05e6\u05d4\u05d5\u05d1 \u05d1\u05d4\u05d9\u05e8", "Light Red": "\u05d0\u05d3\u05d5\u05dd \u05d1\u05d4\u05d9\u05e8", "Light Purple": "\u05e1\u05d2\u05d5\u05dc \u05d1\u05d4\u05d9\u05e8", "Light Blue": "\u05db\u05d7\u05d5\u05dc \u05d1\u05d4\u05d9\u05e8", "Dark Purple": "\u05e1\u05d2\u05d5\u05dc \u05db\u05d4\u05d4", "Dark Blue": "\u05db\u05d7\u05d5\u05dc \u05db\u05d4\u05d4", "Black": "\u05e9\u05d7\u05d5\u05e8", "White": "\u05dc\u05d1\u05df", "Switch to or from fullscreen mode": "\u05d4\u05d7\u05dc\u05e3 \u05dc\u05de\u05e6\u05d1 \u05de\u05e1\u05da \u05de\u05dc\u05d0 \u05d0\u05d5 \u05e6\u05d0 \u05de\u05de\u05e0\u05d5", "Open help dialog": "\u05e4\u05ea\u05d7 \u05ea\u05d9\u05d1\u05ea \u05d3\u05d5-\u05e9\u05d9\u05d7 \u05e9\u05dc \u05e2\u05d6\u05e8\u05d4", "history": "\u05d4\u05d9\u05e1\u05d8\u05d5\u05e8\u05d9\u05d4", "styles": "\u05e1\u05d2\u05e0\u05d5\u05e0\u05d5\u05ea", "formatting": "\u05e2\u05d9\u05e6\u05d5\u05d1", "alignment": "\u05d9\u05d9\u05e9\u05d5\u05e8", "indentation": "\u05d4\u05d6\u05d7\u05d4", "permanent pen": "\u05e2\u05d8 \u05e7\u05d1\u05d5\u05e2", "comments": "\u05d4\u05e2\u05e8\u05d5\u05ea", "Format Painter": "\u05e6\u05d9\u05d9\u05e8 \u05e2\u05d9\u05e6\u05d5\u05d1", "Insert\/edit iframe": "\u05d4\u05db\u05e0\u05e1\/\u05e2\u05e8\u05d5\u05da \u05d7\u05dc\u05d5\u05df \u05de\u05e1\u05d2\u05e8\u05ea", "Capitalization": "\u05d0\u05d5\u05ea\u05d9\u05d5\u05ea \u05e8\u05d9\u05e9\u05d9\u05d5\u05ea", "lowercase": "\u05d0\u05d5\u05ea\u05d9\u05d5\u05ea \u05e7\u05d8\u05e0\u05d5\u05ea", "UPPERCASE": "\u05d0\u05d5\u05ea\u05d9\u05d5\u05ea \u05e8\u05d9\u05e9\u05d9\u05d5\u05ea", "Title Case": "\u05d0\u05d5\u05ea\u05d9\u05d5\u05ea \u05db\u05d5\u05ea\u05e8\u05ea", "Permanent Pen Properties": "\u05de\u05d0\u05e4\u05d9\u05d9\u05e0\u05d9 \u05e2\u05d8 \u05e7\u05d1\u05d5\u05e2\u05d9\u05dd", "Permanent pen properties...": "\u05de\u05d0\u05e4\u05d9\u05d9\u05e0\u05d9 \u05e2\u05d8 \u05e7\u05d1\u05d5\u05e2\u05d9\u05dd...", "Font": "\u05d2\u05d5\u05e4\u05df", "Size": "\u05d2\u05d5\u05d3\u05dc", "More...": "\u05e2\u05d5\u05d3...", "Spellcheck Language": "\u05e9\u05e4\u05ea \u05d1\u05d3\u05d9\u05e7\u05ea \u05d0\u05d9\u05d5\u05ea", "Select...": "\u05d1\u05d7\u05e8...", "Preferences": "\u05d4\u05e2\u05d3\u05e4\u05d5\u05ea", "Yes": "\u05db\u05df", "No": "\u05dc\u05d0", "Keyboard Navigation": "\u05e0\u05d9\u05d5\u05d5\u05d8 \u05d1\u05de\u05e7\u05dc\u05d3\u05ea", "Version": "\u05d2\u05e8\u05e1\u05d4", "Anchor": "\u05de\u05e7\u05d5\u05dd \u05e2\u05d9\u05d2\u05d5\u05df", "Special character": "\u05ea\u05d5\u05d5\u05d9\u05dd \u05de\u05d9\u05d5\u05d7\u05d3\u05d9\u05dd", "Code sample": "\u05d3\u05d5\u05d2\u05de\u05ea \u05e7\u05d5\u05d3", "Color": "\u05e6\u05d1\u05e2", "Emoticons": "\u05de\u05d7\u05d5\u05d5\u05ea", "Document properties": "\u05de\u05d0\u05e4\u05d9\u05d9\u05e0\u05d9 \u05de\u05e1\u05de\u05da", "Image": "\u05ea\u05de\u05d5\u05e0\u05d4", "Insert link": "\u05d4\u05db\u05e0\u05e1 \u05e7\u05d9\u05e9\u05d5\u05e8", "Target": "\u05de\u05d8\u05e8\u05d4", "Link": "\u05e7\u05d9\u05e9\u05d5\u05e8", "Poster": "\u05e4\u05d5\u05e1\u05d8\u05e8", "Media": "\u05de\u05d3\u05d9\u05d4", "Print": "\u05d4\u05d3\u05e4\u05e1", "Prev": "\u05e7\u05d5\u05d3\u05dd", "Find and replace": "\u05d7\u05e4\u05e9 \u05d5\u05d4\u05d7\u05dc\u05e3", "Whole words": "\u05de\u05d9\u05dc\u05d4 \u05e9\u05dc\u05de\u05d4", "Spellcheck": "\u05d1\u05d5\u05d3\u05e7 \u05d0\u05d9\u05d5\u05ea", "Caption": "\u05db\u05d9\u05ea\u05d5\u05d1", "Insert template": "\u05d4\u05db\u05e0\u05e1 \u05ea\u05d1\u05e0\u05d9\u05ea", "_dir": "rtl" }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/tinymce/langs/hr.js ================================================ tinymce.addI18n('hr',{ "Redo": "Ponovi", "Undo": "Poni\u0161ti", "Cut": "Izre\u017ei", "Copy": "Kopiraj", "Paste": "Zalijepi", "Select all": "Odaberi sve", "New document": "Novi dokument", "Ok": "U redu", "Cancel": "Odustani", "Visual aids": "Vizualna pomo\u0107", "Bold": "Podebljano", "Italic": "Kurziv", "Underline": "Podcrtaj", "Strikethrough": "Prekri\u017ei", "Superscript": "Eksponent", "Subscript": "Indeks", "Clear formatting": "Izbri\u0161i oblikovanje", "Align left": "Poravnaj lijevo", "Align center": "Poravnaj po sredini", "Align right": "Poravnaj desno", "Justify": "Obostrano poravnanje", "Bullet list": "Popis s oznakama", "Numbered list": "Numerirani popis", "Decrease indent": "Smanji uvla\u010denje", "Increase indent": "Pove\u0107aj uvla\u010denje", "Close": "Zatvori", "Formats": "Formati", "Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Va\u0161 preglednik ne podr\u017eava izravan pristup me\u0111uspremniku. Umjesto toga upotrijebite tipkovni\u010dke pre\u010dace Ctrl\u00a0+\u00a0X\/C\/V.", "Headers": "Zaglavlja", "Header 1": "Zaglavlje 1", "Header 2": "Zaglavlje 2", "Header 3": "Zaglavlje 3", "Header 4": "Zaglavlje 4", "Header 5": "Zaglavlje 5", "Header 6": "Zaglavlje 6", "Headings": "Zaglavlja", "Heading 1": "Zaglavlje 1", "Heading 2": "Zaglavlje 2", "Heading 3": "Zaglavlje 3", "Heading 4": "Zaglavlje 4", "Heading 5": "Zaglavlje 5", "Heading 6": "Zaglavlje 6", "Preformatted": "Prethodno oblikovano", "Div": "Div", "Pre": "Pre", "Code": "Kod", "Paragraph": "Odlomak", "Blockquote": "Blockquote", "Inline": "U retku", "Blocks": "Blokovi", "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Akcija zalijepi od sada lijepi \u010disti tekst. Sadr\u017eaj \u0107e biti zaljepljen kao \u010disti tekst sve dok ne isklju\u010dite ovu opciju.", "Fonts": "Fontovi", "Font Sizes": "Veli\u010dine fonta", "Class": "Razred", "Browse for an image": "Potra\u017eite sliku", "OR": "ILI", "Drop an image here": "Ispustite sliku ovdje", "Upload": "U\u010ditaj", "Block": "Blok", "Align": "Poravnaj", "Default": "Zadano", "Circle": "Krug", "Disc": "To\u010dka", "Square": "Kvadrat", "Lower Alpha": "Mala slova", "Lower Greek": "Mala gr\u010dka slova", "Lower Roman": "Mala rimska slova", "Upper Alpha": "Velika slova", "Upper Roman": "Velika rimska slova", "Anchor...": "Fiksna to\u010dka...", "Name": "Ime", "Id": "Id", "Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Id treba po\u010dinjati slovom, a nakon toga slijede samo slova, brojevi, crtice, to\u010dke, dvoto\u010dke i podvlake.", "You have unsaved changes are you sure you want to navigate away?": "Postoje ne pohranjene izmjene, jeste li sigurni da \u017eelite oti\u0107i?", "Restore last draft": "Vrati posljednju skicu", "Special character...": "Poseban znak...", "Source code": "Izvorni kod", "Insert\/Edit code sample": "Umetni\/Uredi primjer k\u00f4da", "Language": "Jezik", "Code sample...": "Primjerak k\u00f4da...", "Color Picker": "Izabira\u010d boja", "R": "R", "G": "G", "B": "B", "Left to right": "S lijeva na desno", "Right to left": "S desna na lijevo", "Emoticons...": "Emotikoni...", "Metadata and Document Properties": "Metapodaci i svojstva dokumenta", "Title": "Naslov", "Keywords": "Klju\u010dne rije\u010di", "Description": "Opis", "Robots": "Roboti pretra\u017eiva\u010da", "Author": "Autor", "Encoding": "Kodna stranica", "Fullscreen": "Cijeli ekran", "Action": "Action", "Shortcut": "Shortcut", "Help": "Help", "Address": "Address", "Focus to menubar": "Focus to menubar", "Focus to toolbar": "Focus to toolbar", "Focus to element path": "Focus to element path", "Focus to contextual toolbar": "Focus to contextual toolbar", "Insert link (if link plugin activated)": "Insert link (if link plugin activated)", "Save (if save plugin activated)": "Save (if save plugin activated)", "Find (if searchreplace plugin activated)": "Find (if searchreplace plugin activated)", "Plugins installed ({0}):": "Plugins installed ({0}):", "Premium plugins:": "Premium plugins:", "Learn more...": "Learn more...", "You are using {0}": "You are using {0}", "Plugins": "Dodaci", "Handy Shortcuts": "Korisni pre\u010daci", "Horizontal line": "Horizontalna linija", "Insert\/edit image": "Umetni\/izmijeni sliku", "Image description": "Opis slike", "Source": "Izvor", "Dimensions": "Dimenzije", "Constrain proportions": "Zadr\u017ei proporcije", "General": "Op\u0107enito", "Advanced": "Napredno", "Style": "Stil", "Vertical space": "Okomit razmak", "Horizontal space": "Horizontalan razmak", "Border": "Rub", "Insert image": "Umetni sliku", "Image...": "Slika...", "Image list": "Image list", "Rotate counterclockwise": "Rotiraj lijevo", "Rotate clockwise": "Rotiraj desno", "Flip vertically": "Obrni vertikalno", "Flip horizontally": "Obrni horizontalno", "Edit image": "Uredi sliku", "Image options": "Opcije slike", "Zoom in": "Pove\u0107aj", "Zoom out": "Smanji", "Crop": "Obre\u017ei", "Resize": "Promjeni veli\u010dinu", "Orientation": "Orijentacija", "Brightness": "Svjetlina", "Sharpen": "Izo\u0161travanje", "Contrast": "Kontrast", "Color levels": "Razine boje", "Gamma": "Gamma", "Invert": "Invertiraj", "Apply": "Primijeni", "Back": "Natrag", "Insert date\/time": "Umetni datum\/vrijeme", "Date\/time": "Datum\/vrijeme", "Insert\/Edit Link": "Umetni\/uredi poveznicu", "Insert\/edit link": "Umetni\/izmijeni poveznicu", "Text to display": "Tekst za prikaz", "Url": "Url", "Open link in...": "Otvori poveznicu u...", "Current window": "Trenuta\u010dni prozor", "None": "Ni\u0161ta", "New window": "Novi prozor", "Remove link": "Ukloni poveznicu", "Anchors": "Kra\u0107e poveznice", "Link...": "Poveznica...", "Paste or type a link": "Zalijepi ili upi\u0161i link", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "Izgleda da je URL koji ste upisali e-mail adresa. \u017delite li dodati obavezan mailto: prefiks?", "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "Izgleda da je URL koji ste upisali vanjski link. \u017delite li dodati obavezan http:\/\/ prefiks?", "Link list": "Link list", "Insert video": "Umetni video", "Insert\/edit video": "Umetni\/izmijeni video", "Insert\/edit media": "Umetni\/uredi mediju", "Alternative source": "Alternativni izvor", "Alternative source URL": "URL alternativnog izvora", "Media poster (Image URL)": "Medijski poster (URL slike)", "Paste your embed code below:": "Umetnite va\u0161 kod za ugradnju ispod:", "Embed": "Ugradi", "Media...": "Mediji...", "Nonbreaking space": "Neprekidaju\u0107i razmak", "Page break": "Prijelom stranice", "Paste as text": "Zalijepi kao tekst", "Preview": "Pregled", "Print...": "Ispi\u0161i...", "Save": "Spremi", "Find": "Tra\u017ei", "Replace with": "Zamijeni s", "Replace": "Zamijeni", "Replace all": "Zamijeni sve", "Previous": "Prethodno", "Next": "Slijede\u0107i", "Find and replace...": "Prona\u0111i i zamijeni...", "Could not find the specified string.": "Tra\u017eeni tekst nije prona\u0111en", "Match case": "Pazi na mala i velika slova", "Find whole words only": "Prona\u0111i samo cijele rije\u010di", "Spell check": "Provjera pravopisa", "Ignore": "Zanemari", "Ignore all": "Zanemari sve", "Finish": "Zavr\u0161i", "Add to Dictionary": "Dodaj u rje\u010dnik", "Insert table": "Umetni tablicu", "Table properties": "Svojstva tablice", "Delete table": "Izbri\u0161i tablicu", "Cell": "Polje", "Row": "Redak", "Column": "Stupac", "Cell properties": "Svojstva polja", "Merge cells": "Spoji polja", "Split cell": "Razdvoji polja", "Insert row before": "Umetni redak prije", "Insert row after": "Umetni redak nakon", "Delete row": "Izbri\u0161i redak", "Row properties": "Svojstva redka", "Cut row": "Izre\u017ei redak", "Copy row": "Kopiraj redak", "Paste row before": "Zalijepi redak prije", "Paste row after": "Zalijepi redak nakon", "Insert column before": "Umetni stupac prije", "Insert column after": "Umetni stupac nakon", "Delete column": "Izbri\u0161i stupac", "Cols": "Stupci", "Rows": "Redci", "Width": "\u0160irina", "Height": "Visina", "Cell spacing": "Razmak izme\u0111u polja", "Cell padding": "Razmak unutar polja", "Show caption": "Prika\u017ei natpis", "Left": "Lijevo", "Center": "Sredina", "Right": "Desno", "Cell type": "Vrsta polja", "Scope": "Doseg", "Alignment": "Poravnanje", "H Align": "H Poravnavanje", "V Align": "V Poravnavanje", "Top": "Vrh", "Middle": "Sredina", "Bottom": "Dno", "Header cell": "Polje zaglavlja", "Row group": "Grupirani redci", "Column group": "Grupirani stupci", "Row type": "Vrsta redka", "Header": "Zaglavlje", "Body": "Sadr\u017eaj", "Footer": "Podno\u017eje", "Border color": "Boja ruba", "Insert template...": "Umetni predlo\u017eak...", "Templates": "Predlo\u0161ci", "Template": "Predlo\u017eak", "Text color": "Boja teksta", "Background color": "Boja pozadine", "Custom...": "Prilago\u0111eno...", "Custom color": "Prilago\u0111ena boja", "No color": "Bez boje", "Remove color": "Ukloni boju", "Table of Contents": "Sadr\u017eaj", "Show blocks": "Prika\u017ei blokove", "Show invisible characters": "Prika\u017ei nevidljive znakove", "Word count": "Broj rije\u010di", "Count": "Broj", "Document": "Dokument", "Selection": "Odabir", "Words": "Rije\u010di", "Words: {0}": "Rije\u010di: {0}", "{0} words": "{0} rije\u010d(i)", "File": "Datoteka", "Edit": "Izmijeni", "Insert": "Umetni", "View": "Pogled", "Format": "Oblikuj", "Table": "Tablica", "Tools": "Alati", "Powered by {0}": "Omogu\u0107uje {0}", "Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Pritisni ALT-F9 za izbornik. Pritisni ALT-F10 za alatnu traku. Pritisni ALT-0 za pomo\u0107", "Image title": "Naslov slike", "Border width": "\u0160irina granice", "Border style": "Stil granice", "Error": "Pogre\u0161ka", "Warn": "Upozori", "Valid": "Valjano", "To open the popup, press Shift+Enter": "Da biste otvorili sko\u010dni prozor, pritisnite Shift\u00a0+\u00a0Enter", "Rich Text Area. Press ALT-0 for help.": "Podru\u010dje oboga\u0107enog teksta. Pritisnite ALT-0 za pomo\u0107.", "System Font": "Font sustava", "Failed to upload image: {0}": "U\u010ditavanje slike nije uspjelo: {0}", "Failed to load plugin: {0} from url {1}": "U\u010ditavanje dodatka nije uspjelo: {0} s URL-a {1}", "Failed to load plugin url: {0}": "U\u010ditavanje dodatka nije uspjelo: {0}", "Failed to initialize plugin: {0}": "Pokretanje dodatka nije uspjelo: {0}", "example": "primjer", "Search": "Tra\u017ei", "All": "Svi", "Currency": "Valuta", "Text": "Tekst", "Quotations": "Navodnici", "Mathematical": "Matemati\u010dki", "Extended Latin": "Pro\u0161ireni latinski", "Symbols": "Simboli", "Arrows": "Strelice", "User Defined": "Korisni\u010dki definirano", "dollar sign": "znak za dolar", "currency sign": "znak za valutu", "euro-currency sign": "znak za valutu \u2013 euro", "colon sign": "znak za kolon", "cruzeiro sign": "znak za cruzeiro", "french franc sign": "znak za francuski franak", "lira sign": "znak za liru", "mill sign": "znak za mill", "naira sign": "znak za nairu", "peseta sign": "znak za pezetu", "rupee sign": "znak za rupiju", "won sign": "znak za von", "new sheqel sign": "znak za novi \u0161ekel", "dong sign": "znak za dong", "kip sign": "znak za kip", "tugrik sign": "znak za tugrik", "drachma sign": "znak za drahmu", "german penny symbol": "simbol za njema\u010dki peni", "peso sign": "znak za pezo", "guarani sign": "znak za gvarani", "austral sign": "znak za austral", "hryvnia sign": "znak za grivnju", "cedi sign": "znak za cedi", "livre tournois sign": "znak za livre tournois", "spesmilo sign": "znak za spesmilo", "tenge sign": "znak za tengu", "indian rupee sign": "znak za indijsku rupiju", "turkish lira sign": "znak za tursku liru", "nordic mark sign": "znak za nordijsku marku", "manat sign": "znak za manat", "ruble sign": "znak za rubalj", "yen character": "znak za jen", "yuan character": "znak za juan", "yuan character, in hong kong and taiwan": "znak za juan, u Hong Kongu i Tajvanu", "yen\/yuan character variant one": "znak za jen\/juan, prva varijanta", "Loading emoticons...": "U\u010ditavanje emotikona...", "Could not load emoticons": "Nije mogu\u0107e u\u010ditati emotikone", "People": "Osobe", "Animals and Nature": "\u017divotinje i priroda", "Food and Drink": "Hrana i pi\u0107e", "Activity": "Aktivnosti", "Travel and Places": "Putovanje i mjesta", "Objects": "Predmeti", "Flags": "Zastave", "Characters": "Znakovi", "Characters (no spaces)": "Znakovi (bez razmaka)", "{0} characters": "{0} znakova", "Error: Form submit field collision.": "Pogre\u0161ka: sukob polja za podno\u0161enje obrasca.", "Error: No form element found.": "Pogre\u0161ka: nema elementa oblika.", "Update": "A\u017euriraj", "Color swatch": "Uzorak boje", "Turquoise": "Tirkizna", "Green": "Zelena", "Blue": "Plava", "Purple": "Ljubi\u010dasta", "Navy Blue": "Mornarsko plava", "Dark Turquoise": "Tamnotirkizna", "Dark Green": "Tamnozelena", "Medium Blue": "Srednje plava", "Medium Purple": "Srednje ljubi\u010dasta", "Midnight Blue": "Pono\u0107no plava", "Yellow": "\u017duta", "Orange": "Naran\u010dasta", "Red": "Crvena", "Light Gray": "Svijetlosiva", "Gray": "Siva", "Dark Yellow": "Tamno\u017euta", "Dark Orange": "Tamnonaran\u010dasta", "Dark Red": "Tamnocrvena", "Medium Gray": "Srednje siva", "Dark Gray": "Tamnosiva", "Light Green": "Svjetlozelena", "Light Yellow": "Svjetlo\u017euta", "Light Red": "Svjetlocrvena", "Light Purple": "Svjetloljubi\u010dasta", "Light Blue": "Svjetloplava", "Dark Purple": "Tamnoljubi\u010dasta", "Dark Blue": "Tamnoplava", "Black": "Crna", "White": "Bijela", "Switch to or from fullscreen mode": "Prebacivanje u prikaz preko cijelog zaslona ili iz njega", "Open help dialog": "Otvori dijalo\u0161ki okvir za pomo\u0107", "history": "povijest", "styles": "stilovi", "formatting": "oblikovanje", "alignment": "poravnanje", "indentation": "uvlaka", "permanent pen": "trajna olovka", "comments": "komentari", "Format Painter": "Prenositelj oblikovanja", "Insert\/edit iframe": "Umetni\/uredi iframe oznaku", "Capitalization": "Velika slova", "lowercase": "mala slova", "UPPERCASE": "VELIKA SLOVA", "Title Case": "Pisanje naslova", "Permanent Pen Properties": "Trajna svojstva olovke", "Permanent pen properties...": "Trajna svojstva olovke...", "Font": "Font", "Size": "Veli\u010dina", "More...": "Vi\u0161e...", "Spellcheck Language": "Jezik provjere pravopisa", "Select...": "Odaberi...", "Preferences": "Postavke", "Yes": "Da", "No": "Ne", "Keyboard Navigation": "Navigacija na tipkovnici", "Version": "Ina\u010dica", "Anchor": "Sidro", "Special character": "Poseban znak", "Color": "Boja", "Emoticons": "Emotikoni", "Document properties": "Svojstva dokumenta", "Image": "Slika", "Insert link": "Umetni poveznicu", "Target": "Meta", "Link": "Link", "Poster": "Poster", "Media": "Media", "Print": "Ispis", "Prev": "Prethodni", "Find and replace": "Prona\u0111i i zamijeni", "Whole words": "Cijele rije\u010di", "Spellcheck": "Provjeri pravopis", "Caption": "Natpis", "Insert template": "Umetni predlo\u017eak" }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/tinymce/langs/hu_HU.js ================================================ tinymce.addI18n('hu_HU',{ "Redo": "Ism\u00e9t", "Undo": "Visszavon\u00e1s", "Cut": "Kiv\u00e1g\u00e1s", "Copy": "M\u00e1sol\u00e1s", "Paste": "Beilleszt\u00e9s", "Select all": "Minden kijel\u00f6l\u00e9se", "New document": "\u00daj dokumentum", "Ok": "Rendben", "Cancel": "M\u00e9gse", "Visual aids": "Vizu\u00e1lis seg\u00e9deszk\u00f6z\u00f6k", "Bold": "F\u00e9lk\u00f6v\u00e9r", "Italic": "D\u0151lt", "Underline": "Al\u00e1h\u00fazott", "Strikethrough": "\u00c1th\u00fazott", "Superscript": "Fels\u0151 index", "Subscript": "Als\u00f3 index", "Clear formatting": "Form\u00e1z\u00e1s t\u00f6rl\u00e9se", "Align left": "Balra igaz\u00edt", "Align center": "K\u00f6z\u00e9pre igaz\u00edt", "Align right": "Jobbra igaz\u00edt", "Justify": "Sorkiz\u00e1rt", "Bullet list": "Listajeles lista", "Numbered list": "Sz\u00e1mozott lista", "Decrease indent": "Beh\u00faz\u00e1s cs\u00f6kkent\u00e9se", "Increase indent": "Beh\u00faz\u00e1s n\u00f6vel\u00e9se", "Close": "Bez\u00e1r", "Formats": "Form\u00e1tumok", "Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "A b\u00f6ng\u00e9sz\u0151d nem t\u00e1mogatja a k\u00f6zvetlen hozz\u00e1f\u00e9r\u00e9st a v\u00e1g\u00f3laphoz. K\u00e9rlek, haszn\u00e1ld a Ctrl+X\/C\/V billenty\u0171ket.", "Headers": "C\u00edmsorok", "Header 1": "C\u00edmsor 1", "Header 2": "C\u00edmsor 2", "Header 3": "C\u00edmsor 3", "Header 4": "C\u00edmsor 4", "Header 5": "C\u00edmsor 5", "Header 6": "C\u00edmsor 6", "Headings": "Fejl\u00e9cek", "Heading 1": "1. fejl\u00e9c", "Heading 2": "2. fejl\u00e9c", "Heading 3": "3. fejl\u00e9c", "Heading 4": "4. fejl\u00e9c", "Heading 5": "5. fejl\u00e9c", "Heading 6": "6. fejl\u00e9c", "Preformatted": "El\u0151form\u00e1zott", "Div": "Div", "Pre": "Pre", "Code": "K\u00f3d", "Paragraph": "Bekezd\u00e9s", "Blockquote": "Id\u00e9zetblokk", "Inline": "Foly\u00f3 sz\u00f6veg", "Blocks": "Blokkok", "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Beilleszt\u00e9s mostant\u00f3l egyszer\u0171 sz\u00f6veg m\u00f3dban. A tartalmak mostant\u00f3l egyszer\u0171 sz\u00f6vegk\u00e9nt lesznek beillesztve, am\u00edg nem kapcsolod ki ezt az opci\u00f3t.", "Fonts": "Bet\u0171t\u00edpusok", "Font Sizes": "Bet\u0171m\u00e9retek", "Class": "Oszt\u00e1ly", "Browse for an image": "K\u00e9p keres\u00e9se tall\u00f3z\u00e1ssal", "OR": "VAGY", "Drop an image here": "H\u00fazz ide egy k\u00e9pet", "Upload": "Felt\u00f6lt\u00e9s", "Block": "Blokk", "Align": "Igaz\u00edt\u00e1s", "Default": "Alap\u00e9rtelmezett", "Circle": "K\u00f6r", "Disc": "Pont", "Square": "N\u00e9gyzet", "Lower Alpha": "Kisbet\u0171", "Lower Greek": "Kis g\u00f6r\u00f6g sz\u00e1m", "Lower Roman": "Kis r\u00f3mai sz\u00e1m", "Upper Alpha": "Nagybet\u0171", "Upper Roman": "Nagy r\u00f3mai sz\u00e1m", "Anchor...": "Horgony...", "Name": "N\u00e9v", "Id": "Azonos\u00edt\u00f3", "Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Az azonos\u00edt\u00f3nak bet\u0171vel kell kezd\u0151dnie, azut\u00e1n csak bet\u0171ket, sz\u00e1mokat, gondolatjeleket, pontokat, kett\u0151spontokat vagy al\u00e1h\u00faz\u00e1st tartalmazhat.", "You have unsaved changes are you sure you want to navigate away?": "Nem mentett m\u00f3dos\u00edt\u00e1said vannak, biztos hogy el akarsz navig\u00e1lni?", "Restore last draft": "Utols\u00f3 piszkozat vissza\u00e1ll\u00edt\u00e1sa", "Special character...": "Speci\u00e1lis karakter...", "Source code": "Forr\u00e1sk\u00f3d", "Insert\/Edit code sample": "K\u00f3dminta besz\u00far\u00e1sa\/szerkeszt\u00e9se", "Language": "Nyelv", "Code sample...": "K\u00f3dminta...", "Color Picker": "Sz\u00ednv\u00e1laszt\u00f3", "R": "R", "G": "G", "B": "B", "Left to right": "Balr\u00f3l jobbra", "Right to left": "Jobbr\u00f3l balra", "Emoticons...": "Hangulatjelek...", "Metadata and Document Properties": "Metaadatok \u00e9s a dokumentum tulajdons\u00e1gai", "Title": "C\u00edm", "Keywords": "Kulcsszavak", "Description": "Le\u00edr\u00e1s", "Robots": "Robotok", "Author": "Szerz\u0151", "Encoding": "K\u00f3dol\u00e1s", "Fullscreen": "Teljes k\u00e9perny\u0151", "Action": "M\u0171velet", "Shortcut": "Parancsikon", "Help": "S\u00fag\u00f3", "Address": "C\u00edm", "Focus to menubar": "F\u00f3kusz a men\u00fcre", "Focus to toolbar": "F\u00f3kusz az eszk\u00f6zt\u00e1rra", "Focus to element path": "F\u00f3kusz az elemek \u00fatvonal\u00e1ra", "Focus to contextual toolbar": "F\u00f3kusz a k\u00f6rnyezetf\u00fcgg\u0151 eszk\u00f6zt\u00e1rra", "Insert link (if link plugin activated)": "Hivatkoz\u00e1s besz\u00far\u00e1sa (ha a hivatkoz\u00e1s b\u0151v\u00edtm\u00e9ny enged\u00e9lyezett)", "Save (if save plugin activated)": "Ment\u00e9s (ha a ment\u00e9s b\u0151v\u00edtm\u00e9ny enged\u00e9lyezett)", "Find (if searchreplace plugin activated)": "Keres\u00e9s (ha a keres\u00e9s \u00e9s csere b\u0151v\u00edtm\u00e9ny enged\u00e9lyezett)", "Plugins installed ({0}):": "Telep\u00edtett b\u0151v\u00edtm\u00e9nyek ({0}):", "Premium plugins:": "Pr\u00e9mium b\u0151v\u00edtm\u00e9nyek:", "Learn more...": "Tudj meg t\u00f6bbet...", "You are using {0}": "Haszn\u00e1latban: {0}", "Plugins": "Pluginek", "Handy Shortcuts": "Hasznos linkek", "Horizontal line": "V\u00edzszintes vonal", "Insert\/edit image": "K\u00e9p beilleszt\u00e9se\/szerkeszt\u00e9se", "Image description": "K\u00e9p le\u00edr\u00e1sa", "Source": "Forr\u00e1s", "Dimensions": "M\u00e9retek", "Constrain proportions": "M\u00e9retar\u00e1ny", "General": "\u00c1ltal\u00e1nos", "Advanced": "Halad\u00f3", "Style": "St\u00edlus", "Vertical space": "Vertik\u00e1lis hely", "Horizontal space": "Horizont\u00e1lis hely", "Border": "Szeg\u00e9ly", "Insert image": "K\u00e9p beilleszt\u00e9se", "Image...": "K\u00e9p...", "Image list": "K\u00e9p lista", "Rotate counterclockwise": "Forgat\u00e1s az \u00f3ramutat\u00f3 j\u00e1r\u00e1s\u00e1val ellent\u00e9tesen", "Rotate clockwise": "Forgat\u00e1s az \u00f3ramutat\u00f3 j\u00e1r\u00e1s\u00e1val megegyez\u0151en", "Flip vertically": "F\u00fcgg\u0151leges t\u00fckr\u00f6z\u00e9s", "Flip horizontally": "V\u00edzszintes t\u00fckr\u00f6z\u00e9s", "Edit image": "K\u00e9p szerkeszt\u00e9se", "Image options": "K\u00e9p be\u00e1ll\u00edt\u00e1sok", "Zoom in": "Nagy\u00edt\u00e1s", "Zoom out": "Kicsiny\u00edt\u00e9s", "Crop": "K\u00e9p v\u00e1g\u00e1s", "Resize": "\u00c1tm\u00e9retez\u00e9s", "Orientation": "K\u00e9p t\u00e1jol\u00e1s", "Brightness": "F\u00e9nyer\u0151", "Sharpen": "\u00c9less\u00e9g", "Contrast": "Kontraszt", "Color levels": "Sz\u00ednszint", "Gamma": "Gamma", "Invert": "Inverz k\u00e9p", "Apply": "Ment\u00e9s", "Back": "Vissza", "Insert date\/time": "D\u00e1tum\/id\u0151 beilleszt\u00e9se", "Date\/time": "D\u00e1tum\/id\u0151", "Insert\/Edit Link": "Hivatkoz\u00e1s beilleszt\u00e9se\/szerkeszt\u00e9se", "Insert\/edit link": "Hivatkoz\u00e1s beilleszt\u00e9se\/szerkeszt\u00e9se", "Text to display": "Megjelen\u0151 sz\u00f6veg", "Url": "Url", "Open link in...": "Hivatkoz\u00e1s megnyit\u00e1sa...", "Current window": "Jelenlegi ablak", "None": "Nincs", "New window": "\u00daj ablak", "Remove link": "Hivatkoz\u00e1s t\u00f6rl\u00e9se", "Anchors": "Horgonyok", "Link...": "Hivatkoz\u00e1s...", "Paste or type a link": "Hivatkoz\u00e1s be\u00edr\u00e1sa vagy beilleszt\u00e9se", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "A megadott URL email c\u00edmnek t\u0171nik. Szeretn\u00e9d hozz\u00e1adni a sz\u00fcks\u00e9ges mailto: el\u0151tagot?", "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "A megadott URL k\u00fcls\u0151 c\u00edmnek t\u0171nik. Szeretn\u00e9d hozz\u00e1adni a sz\u00fcks\u00e9ges http:\/\/ el\u0151tagot?", "Link list": "Hivatkoz\u00e1slista", "Insert video": "Vide\u00f3 beilleszt\u00e9se", "Insert\/edit video": "Vide\u00f3 beilleszt\u00e9se\/szerkeszt\u00e9se", "Insert\/edit media": "M\u00e9dia besz\u00far\u00e1sa\/beilleszt\u00e9se", "Alternative source": "Alternat\u00edv forr\u00e1s", "Alternative source URL": "Alternat\u00edv forr\u00e1s URL", "Media poster (Image URL)": "M\u00e9dia poszter (k\u00e9p URL)", "Paste your embed code below:": "Illeszd be a be\u00e1gyaz\u00f3 k\u00f3dot alulra:", "Embed": "Be\u00e1gyaz\u00e1s", "Media...": "M\u00e9dia...", "Nonbreaking space": "Nem t\u00f6rhet\u0151 sz\u00f3k\u00f6z", "Page break": "Oldalt\u00f6r\u00e9s", "Paste as text": "Beilleszt\u00e9s sz\u00f6vegk\u00e9nt", "Preview": "El\u0151n\u00e9zet", "Print...": "Nyomtat\u00e1s...", "Save": "Ment\u00e9s", "Find": "Keres\u00e9s", "Replace with": "Csere erre", "Replace": "Csere", "Replace all": "Az \u00f6sszes cser\u00e9je", "Previous": "El\u0151z\u0151", "Next": "K\u00f6vetkez\u0151", "Find and replace...": "Keres\u00e9s \u00e9s csere...", "Could not find the specified string.": "A be\u00edrt kifejez\u00e9s nem tal\u00e1lhat\u00f3.", "Match case": "Kis \u00e9s nagybet\u0171k megk\u00fcl\u00f6nb\u00f6ztet\u00e9se", "Find whole words only": "Csak teljes szavak keres\u00e9se", "Spell check": "Helyes\u00edr\u00e1s-ellen\u0151rz\u00e9s", "Ignore": "Figyelmen k\u00edv\u00fcl hagy", "Ignore all": "Mindent figyelmen k\u00edv\u00fcl hagy", "Finish": "Befejez\u00e9s", "Add to Dictionary": "Sz\u00f3t\u00e1rhoz ad", "Insert table": "T\u00e1bl\u00e1zat beilleszt\u00e9se", "Table properties": "T\u00e1bl\u00e1zat tulajdons\u00e1gok", "Delete table": "T\u00e1bl\u00e1zat t\u00f6rl\u00e9se", "Cell": "Cella", "Row": "Sor", "Column": "Oszlop", "Cell properties": "Cella tulajdons\u00e1gok", "Merge cells": "Cell\u00e1k egyes\u00edt\u00e9se", "Split cell": "Cell\u00e1k sz\u00e9tv\u00e1laszt\u00e1sa", "Insert row before": "Sor besz\u00far\u00e1sa el\u00e9", "Insert row after": "Sor besz\u00far\u00e1sa m\u00f6g\u00e9", "Delete row": "Sor t\u00f6rl\u00e9se", "Row properties": "Sor tulajdons\u00e1gai", "Cut row": "Sor kiv\u00e1g\u00e1sa", "Copy row": "Sor m\u00e1sol\u00e1sa", "Paste row before": "Sor beilleszt\u00e9se el\u00e9", "Paste row after": "Sor beilleszt\u00e9se m\u00f6g\u00e9", "Insert column before": "Oszlop besz\u00far\u00e1sa el\u00e9", "Insert column after": "Oszlop besz\u00far\u00e1sa m\u00f6g\u00e9", "Delete column": "Oszlop t\u00f6rl\u00e9se", "Cols": "Oszlopok", "Rows": "Sorok", "Width": "Sz\u00e9less\u00e9g", "Height": "Magass\u00e1g", "Cell spacing": "Cell\u00e1k t\u00e1vols\u00e1ga", "Cell padding": "Cella m\u00e9rete", "Show caption": "C\u00edm megjelen\u00edt\u00e9se", "Left": "Bal", "Center": "K\u00f6z\u00e9p", "Right": "Jobb", "Cell type": "Cella t\u00edpusa", "Scope": "Hat\u00f3k\u00f6r", "Alignment": "Igaz\u00edt\u00e1s", "H Align": "V\u00edzszintes igaz\u00edt\u00e1s", "V Align": "F\u00fcgg\u0151leges igaz\u00edt\u00e1s", "Top": "Fel\u00fcl", "Middle": "K\u00f6z\u00e9pen", "Bottom": "Alul", "Header cell": "Fejl\u00e9c cella", "Row group": "Sor csoport", "Column group": "Oszlop csoport", "Row type": "Sor t\u00edpus", "Header": "Fejl\u00e9c", "Body": "Sz\u00f6vegt\u00f6rzs", "Footer": "L\u00e1bl\u00e9c", "Border color": "Szeg\u00e9ly sz\u00edne", "Insert template...": "Sablon besz\u00far\u00e1sa...", "Templates": "Sablonok", "Template": "Sablon", "Text color": "Sz\u00f6veg sz\u00edne", "Background color": "H\u00e1tt\u00e9r sz\u00edn", "Custom...": "Egy\u00e9ni...", "Custom color": "Egy\u00e9ni sz\u00edn", "No color": "Nincs sz\u00edn", "Remove color": "Sz\u00edn t\u00f6rl\u00e9se", "Table of Contents": "Tartalomjegyz\u00e9k", "Show blocks": "Blokkok mutat\u00e1sa", "Show invisible characters": "L\u00e1thatatlan karakterek mutat\u00e1sa", "Word count": "Szavak sz\u00e1ma", "Count": "Sz\u00e1m", "Document": "Dokumentum", "Selection": "Kiv\u00e1laszt\u00e1s", "Words": "Szavak", "Words: {0}": "Szavak: {0}", "{0} words": "{0} sz\u00f3", "File": "F\u00e1jl", "Edit": "Szerkeszt\u00e9s", "Insert": "Beilleszt\u00e9s", "View": "N\u00e9zet", "Format": "Form\u00e1tum", "Table": "T\u00e1bl\u00e1zat", "Tools": "Eszk\u00f6z\u00f6k", "Powered by {0}": "\u00dczemelteti: {0}", "Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Rich Text ter\u00fclet. Nyomj ALT-F9-et a men\u00fch\u00f6z. Nyomj ALT-F10-et az eszk\u00f6zt\u00e1rhoz. Nyomj ALT-0-t a s\u00fag\u00f3hoz", "Image title": "K\u00e9p c\u00edme", "Border width": "Szeg\u00e9ly vastags\u00e1ga", "Border style": "Szeg\u00e9ly st\u00edlusa", "Error": "Hiba", "Warn": "Figyelmeztet\u00e9s", "Valid": "\u00c9rv\u00e9nyes", "To open the popup, press Shift+Enter": "A felugr\u00f3 ablak megnyit\u00e1s\u00e1hoz nyomja meg a Shift+Enter billenty\u0171t", "Rich Text Area. Press ALT-0 for help.": "Vizu\u00e1lis szerkeszt\u0151 ter\u00fclet. Nyomjon ALT-0-t a s\u00fag\u00f3hoz.", "System Font": "Rendszer-bet\u0171t\u00edpus", "Failed to upload image: {0}": "Nem siker\u00fclt felt\u00f6lteni a k\u00e9pet: {0}", "Failed to load plugin: {0} from url {1}": "Nem siker\u00fclt bet\u00f6lteni a be\u00e9p\u00fcl\u0151 modult: {0} err\u0151l a webc\u00edmr\u0151l: {1}", "Failed to load plugin url: {0}": "Nem siker\u00fclt bet\u00f6lteni a be\u00e9p\u00fcl\u0151 modul url-\u00e9t: {0}", "Failed to initialize plugin: {0}": "Nem siker\u00fclt inicializ\u00e1lni a be\u00e9p\u00fcl\u0151 modult: {0}", "example": "p\u00e9lda", "Search": "Keres\u00e9s", "All": "Minden", "Currency": "P\u00e9nznem", "Text": "Sz\u00f6veg", "Quotations": "Id\u00e9z\u0151jelek", "Mathematical": "Matematikai", "Extended Latin": "B\u0151v\u00edtett latin", "Symbols": "Szimb\u00f3lumok", "Arrows": "Nyilak", "User Defined": "Felhaszn\u00e1l\u00f3 \u00e1ltal meghat\u00e1rozott", "dollar sign": "doll\u00e1r jel", "currency sign": "valuta jel", "euro-currency sign": "euro-valuta jel", "colon sign": "kett\u0151spont", "cruzeiro sign": "cruzeiro jel", "french franc sign": "francia frank jel", "lira sign": "l\u00edra jel", "mill sign": "mill jel", "naira sign": "naira jel", "peseta sign": "peseta jel", "rupee sign": "r\u00fapia jel", "won sign": "won jel", "new sheqel sign": "\u00faj shekel jel", "dong sign": "dong jel", "kip sign": "kip jel", "tugrik sign": "tugrik jel", "drachma sign": "drachma jel", "german penny symbol": "n\u00e9met penny jel", "peso sign": "peso jel", "guarani sign": "guarani jel", "austral sign": "austral jel", "hryvnia sign": "hrivnya jel", "cedi sign": "cedi jel", "livre tournois sign": "livre tournois jel", "spesmilo sign": "spesmilo jel", "tenge sign": "tenge jel", "indian rupee sign": "r\u00fapel jel", "turkish lira sign": "t\u00f6r\u00f6k l\u00edra jel", "nordic mark sign": "\u00e9szaki m\u00e1rka jel", "manat sign": "manat jel", "ruble sign": "rubel jel", "yen character": "jen karakter", "yuan character": "j\u00fcan karakter", "yuan character, in hong kong and taiwan": "hongkongi \u00e9s tajvani j\u00fcan karakter", "yen\/yuan character variant one": "jen\/j\u00fcan karaktervari\u00e1ns", "Loading emoticons...": "Hangulatjelek bet\u00f6lt\u00e9se...", "Could not load emoticons": "Nem siker\u00fclt a hangulatjelek bet\u00f6lt\u00e9se", "People": "Emberek", "Animals and Nature": "\u00c1llatok \u00e9s term\u00e9szet", "Food and Drink": "\u00c9tel, ital", "Activity": "Tev\u00e9kenys\u00e9gek", "Travel and Places": "Utaz\u00e1s \u00e9s helyek", "Objects": "T\u00e1rgyak", "Flags": "Z\u00e1szl\u00f3k", "Characters": "Karakterek", "Characters (no spaces)": "Karakterek (sz\u00f3k\u00f6z\u00f6k n\u00e9lk\u00fcl)", "{0} characters": "{0} karakter", "Error: Form submit field collision.": "Hiba: \u00dctk\u00f6z\u00e9s t\u00f6rt\u00e9nt az \u0171rlap elk\u00fcld\u00e9sekor.", "Error: No form element found.": "Hiba: Nem tal\u00e1lhat\u00f3 \u0171rlap elem.", "Update": "Friss\u00edt\u00e9s", "Color swatch": "Sz\u00ednpaletta", "Turquoise": "T\u00fcrkiz", "Green": "Z\u00f6ld", "Blue": "K\u00e9k", "Purple": "Lila", "Navy Blue": "Tengerk\u00e9k", "Dark Turquoise": "S\u00f6t\u00e9tt\u00fcrkiz", "Dark Green": "S\u00f6t\u00e9tz\u00f6ld", "Medium Blue": "Kir\u00e1lyk\u00e9k", "Medium Purple": "K\u00f6z\u00e9plila", "Midnight Blue": "\u00c9jf\u00e9lk\u00e9k", "Yellow": "S\u00e1rga", "Orange": "Narancss\u00e1rga", "Red": "Piros", "Light Gray": "Vil\u00e1gossz\u00fcrke", "Gray": "Sz\u00fcrke", "Dark Yellow": "S\u00f6t\u00e9ts\u00e1rga", "Dark Orange": "S\u00f6t\u00e9t narancss\u00e1rga", "Dark Red": "S\u00f6t\u00e9tv\u00f6r\u00f6s", "Medium Gray": "K\u00f6z\u00e9psz\u00fcrke", "Dark Gray": "S\u00f6t\u00e9tsz\u00fcrke", "Light Green": "Vil\u00e1gosz\u00f6ld", "Light Yellow": "Vil\u00e1goss\u00e1rga", "Light Red": "Vil\u00e1gospiros", "Light Purple": "Vil\u00e1goslila", "Light Blue": "Vil\u00e1gosk\u00e9k", "Dark Purple": "S\u00f6t\u00e9tlila", "Dark Blue": "S\u00f6t\u00e9tk\u00e9k", "Black": "Fekete", "White": "Feh\u00e9r", "Switch to or from fullscreen mode": "Teljes vagy norm\u00e1l k\u00e9perny\u0151s m\u00f3dra v\u00e1lt\u00e1s", "Open help dialog": "S\u00fag\u00f3ablak megnyit\u00e1sa", "history": "el\u0151zm\u00e9nyek", "styles": "st\u00edlusok", "formatting": "form\u00e1z\u00e1s", "alignment": "igaz\u00edt\u00e1s", "indentation": "beh\u00faz\u00e1s", "permanent pen": "sz\u00f6vegkiemel\u0151", "comments": "megjegyz\u00e9sek", "Format Painter": "Form\u00e1tumm\u00e1sol\u00f3", "Insert\/edit iframe": "iframe besz\u00far\u00e1sa\/szerkeszt\u00e9se", "Capitalization": "Nagybet\u0171s \u00edr\u00e1s", "lowercase": "kisbet\u0171s", "UPPERCASE": "NAGYBET\u0170S", "Title Case": "C\u00edm szerinti \u00edr\u00e1sm\u00f3d", "Permanent Pen Properties": "Tart\u00f3s toll tulajdons\u00e1gai", "Permanent pen properties...": "Tart\u00f3s toll tulajdons\u00e1gai...", "Font": "Bet\u0171t\u00edpus", "Size": "M\u00e9ret", "More...": "Tov\u00e1bbiak...", "Spellcheck Language": "Helyes\u00edr\u00e1s-ellen\u0151rz\u00e9s nyelve", "Select...": "V\u00e1lasszon...", "Preferences": "Preferenci\u00e1k", "Yes": "Igen", "No": "Nem", "Keyboard Navigation": "Billenty\u0171zettel val\u00f3 navig\u00e1l\u00e1s", "Version": "Verzi\u00f3", "Anchor": "Horgony", "Special character": "Speci\u00e1lis karakter", "Code sample": "K\u00f3d p\u00e9lda", "Color": "Sz\u00edn", "Emoticons": "Vigyorok", "Document properties": "Dokumentum tulajdons\u00e1gai", "Image": "K\u00e9p", "Insert link": "Hivatkoz\u00e1s beilleszt\u00e9se", "Target": "C\u00e9l", "Link": "Hivatkoz\u00e1s", "Poster": "El\u0151n\u00e9zeti k\u00e9p", "Media": "M\u00e9dia", "Print": "Nyomtat\u00e1s", "Prev": "El\u0151z\u0151", "Find and replace": "Keres\u00e9s \u00e9s csere", "Whole words": "Csak ha ez a teljes sz\u00f3", "Spellcheck": "Helyes\u00edr\u00e1s ellen\u0151rz\u00e9s", "Caption": "Felirat", "Insert template": "Sablon beilleszt\u00e9se" }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/tinymce/langs/hy.js ================================================ tinymce.addI18n('hy',{ "Redo": "\u0540\u0561\u057b\u0578\u0580\u0564 \u0584\u0561\u0575\u056c", "Undo": "\u0546\u0561\u056d\u0578\u0580\u0564 \u0584\u0561\u0575\u056c", "Cut": "\u053f\u057f\u0580\u0565\u056c", "Copy": "\u054a\u0561\u057f\u0573\u0565\u0576\u0565\u056c", "Paste": "\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c", "Select all": "\u0546\u0577\u0565\u056c \u0562\u0578\u056c\u0578\u0580\u0568", "New document": "\u0546\u0578\u0580 \u0583\u0561\u057d\u057f\u0561\u0569\u0578\u0582\u0572\u0569", "Ok": "Ok", "Cancel": "\u0553\u0561\u056f\u0565\u056c", "Visual aids": "\u0551\u0578\u0582\u0581\u0561\u0564\u0580\u0565\u056c \u056f\u0578\u0576\u057f\u0578\u0582\u0580\u0576\u0565\u0580\u0568", "Bold": "\u0539\u0561\u057e\u0561\u057f\u0561\u057c", "Italic": "\u0547\u0565\u0572\u0561\u057f\u0561\u057c", "Underline": "\u0538\u0576\u0564\u0563\u056e\u057e\u0561\u056e", "Strikethrough": "\u0531\u0580\u057f\u0561\u0563\u056e\u057e\u0561\u056e", "Superscript": "\u054e\u0565\u0580\u056b\u0576 \u056b\u0576\u0564\u0565\u0584\u057d", "Subscript": "\u054d\u057f\u0578\u0580\u056b\u0576 \u056b\u0576\u0564\u0565\u0584\u057d", "Clear formatting": "\u0544\u0561\u0584\u0580\u0565\u056c \u0586\u0578\u0580\u0574\u0561\u057f\u0561\u057e\u0578\u0580\u0578\u0582\u0574\u0568", "Align left": "\u0541\u0561\u056d\u0561\u056f\u0578\u0572\u0574\u0575\u0561 \u0570\u0561\u057e\u0561\u057d\u0561\u0580\u0578\u0582\u0569\u0575\u0578\u0582\u0576", "Align center": "\u053f\u0565\u0576\u057f\u0580\u0578\u0576\u0561\u056f\u0561\u0576 \u0570\u0561\u057e\u0561\u057d\u0561\u0580\u0578\u0582\u0569\u0575\u0578\u0582\u0576", "Align right": "\u0531\u057b\u0561\u056f\u0578\u0572\u0574\u0575\u0561 \u0570\u0561\u057e\u0561\u057d\u0561\u0580\u0578\u0582\u0569\u0575\u0578\u0582\u0576", "Justify": "\u0535\u0580\u056f\u056f\u0578\u0572\u0574\u0561\u0576\u056b \u0570\u0561\u057e\u0561\u057d\u0561\u0580\u0578\u0582\u0569\u0575\u0578\u0582\u0576", "Bullet list": "\u0549\u0570\u0561\u0574\u0561\u0580\u0561\u056f\u0561\u056c\u057e\u0561\u056e \u0581\u0578\u0582\u0581\u0561\u056f", "Numbered list": "\u0540\u0561\u0574\u0561\u0580\u0561\u056f\u0561\u056c\u057e\u0561\u056e \u0581\u0578\u0582\u0581\u0561\u056f", "Decrease indent": "\u0553\u0578\u0584\u0580\u0561\u0581\u0576\u0565\u056c \u0571\u0561\u056d \u0565\u0566\u0580\u056b \u0570\u0565\u057c\u0561\u057e\u0578\u0580\u0578\u0582\u0569\u0575\u0578\u0582\u0576\u0568", "Increase indent": "\u0544\u0565\u056e\u0561\u0581\u0576\u0565\u056c \u0571\u0561\u056d \u0565\u0566\u0580\u056b \u0570\u0565\u057c\u0561\u057e\u0578\u0580\u0578\u0582\u0569\u0575\u0578\u0582\u0576\u0568", "Close": "\u0553\u0561\u056f\u0565\u056c", "Formats": "\u0556\u0578\u0580\u0574\u0561\u057f\u0576\u0565\u0580", "Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u0541\u0565\u0580 \u0562\u0580\u0561\u0578\u0582\u0566\u0565\u0580\u0568 \u0579\u056b \u0561\u057a\u0561\u0570\u0578\u057e\u0578\u0582\u0574 \u0561\u0576\u0574\u056b\u057b\u0561\u056f\u0561\u0576 \u0565\u056c\u0584 \u0583\u0578\u056d\u0561\u0576\u0561\u056f\u0574\u0561\u0576 \u0562\u0578\u0582\u0586\u0565\u0580\u056b\u0576\u0589 \u053d\u0576\u0564\u0580\u0578\u0582\u0574 \u0565\u0576\u0584 \u0585\u0563\u057f\u057e\u0565\u056c Ctrl+X\/C\/V \u057d\u057f\u0565\u0572\u0576\u0565\u0580\u056b\u0581\u0589", "Headers": "\u054e\u0565\u0580\u0576\u0561\u0563\u0580\u0565\u0580", "Header 1": "\u054e\u0565\u0580\u0576\u0561\u0563\u056b\u0580 1", "Header 2": "\u054e\u0565\u0580\u0576\u0561\u0563\u056b\u0580 2", "Header 3": "\u054e\u0565\u0580\u0576\u0561\u0563\u056b\u0580 3", "Header 4": "\u054e\u0565\u0580\u0576\u0561\u0563\u056b\u0580 4", "Header 5": "\u054e\u0565\u0580\u0576\u0561\u0563\u056b\u0580 5", "Header 6": "\u054e\u0565\u0580\u0576\u0561\u0563\u056b\u0580 6", "Headings": "\u054e\u0565\u0580\u0576\u0561\u0563\u0580\u0565\u0580", "Heading 1": "\u054e\u0565\u0580\u0576\u0561\u0563\u056b\u0580 1", "Heading 2": "\u054e\u0565\u0580\u0576\u0561\u0563\u056b\u0580 2", "Heading 3": "\u054e\u0565\u0580\u0576\u0561\u0563\u056b\u0580 3", "Heading 4": "\u054e\u0565\u0580\u0576\u0561\u0563\u056b\u0580 4", "Heading 5": "\u054e\u0565\u0580\u0576\u0561\u0563\u056b\u0580 5", "Heading 6": "\u054e\u0565\u0580\u0576\u0561\u0563\u056b\u0580 6", "Preformatted": "\u0546\u0561\u056d\u0561\u057a\u0565\u057d \u0571\u0565\u0582\u0561\u057e\u0578\u0580\u057e\u0561\u056e", "Div": "Div", "Pre": "Pre", "Code": "\u053f\u0578\u0564", "Paragraph": "\u054a\u0561\u0580\u0562\u0565\u0580\u0578\u0582\u0569\u0575\u0578\u0582\u0576", "Blockquote": "\u0544\u0565\u057b\u0562\u0565\u0580\u0578\u0582\u0574", "Inline": "\u054f\u0578\u0572\u0561\u0575\u056b\u0576", "Blocks": "\u0532\u056c\u0578\u056f\u0576\u0565\u0580", "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u054f\u0565\u0584\u057d\u057f\u056b \u057f\u0565\u0572\u0561\u0564\u0580\u0578\u0582\u0574\u0568 \u056f\u0561\u057f\u0561\u0580\u057e\u0565\u056c\u0578\u0582 \u0567 \u0570\u0561\u057d\u0561\u0580\u0561\u056f \u057f\u0565\u0584\u057d\u057f\u056b \u057c\u0565\u056a\u056b\u0574\u0578\u057e\u0589 \u054a\u0561\u057f\u0573\u0565\u0576\u057e\u0561\u056e \u057f\u0565\u0584\u057d\u057f\u0568 \u057f\u0565\u0572\u0561\u0564\u0580\u057e\u0565\u056c\u0578\u0582 \u0567 \u0570\u0561\u057d\u0561\u0580\u0561\u056f \u057f\u0565\u0584\u057d\u057f\u056b \u0571\u0587\u0578\u057e \u0574\u056b\u0576\u0579\u0587 \u0561\u0575\u057d \u057c\u0565\u056a\u056b\u0574\u056b \u0561\u0576\u057b\u0561\u057f\u0578\u0582\u0574\u0568\u0589", "Fonts": "\u0556\u0578\u0576\u057f\u0565\u0580", "Font Sizes": "\u054f\u0561\u057c\u056b \u0579\u0561\u0583", "Class": "\u0534\u0561\u057d", "Browse for an image": "\u0538\u0576\u057f\u0580\u0565\u056c \u0576\u056f\u0561\u0580", "OR": "\u053f\u0531\u0544", "Drop an image here": "\u0546\u056f\u0561\u0580\u0568 \u0563\u0581\u0565\u0584 \u0561\u0575\u057d\u057f\u0565\u0572", "Upload": "\u054e\u0565\u0580\u0562\u0565\u057c\u0576\u0565\u056c", "Block": "\u0532\u056c\u0578\u056f", "Align": "\u0540\u0561\u057e\u0561\u057d\u0561\u0580\u0565\u0581\u0576\u0565\u056c", "Default": "\u054d\u057f\u0561\u0576\u0564\u0561\u0580\u057f", "Circle": "\u0547\u0580\u057b\u0561\u0576", "Disc": "\u053f\u056c\u0578\u0580", "Square": "\u0554\u0561\u057c\u0561\u056f\u0578\u0582\u057d\u056b", "Lower Alpha": "\u0553\u0578\u0584\u0580\u0561\u057f\u0561\u057c \u056c\u0561\u057f\u056b\u0576\u0561\u056f\u0561\u0576 \u057f\u0561\u057c\u0565\u0580", "Lower Greek": "\u0553\u0578\u0584\u0580\u0561\u057f\u0561\u057c \u0570\u0578\u0582\u0576\u0561\u056f\u0561\u0576 \u057f\u0561\u057c\u0565\u0580", "Lower Roman": "\u0553\u0578\u0584\u0580\u0561\u057f\u0561\u057c \u0570\u057c\u0578\u0574\u0565\u0561\u056f\u0561\u0576 \u0569\u057e\u0565\u0580", "Upper Alpha": "\u0544\u0565\u056e\u0561\u057f\u0561\u057c \u056c\u0561\u057f\u056b\u0576\u0565\u0580\u0565\u0576 \u057f\u0561\u057c\u0565\u0580", "Upper Roman": "\u0544\u0565\u056e\u0561\u057f\u0561\u057c \u0570\u057c\u0578\u0574\u0565\u0561\u056f\u0561\u0576 \u0569\u057e\u0565\u0580", "Anchor...": "\u053d\u0561\u0580\u056b\u057d\u056d...", "Name": "\u0531\u0576\u0578\u0582\u0576", "Id": "Id", "Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Id-\u0576 \u057a\u0565\u057f\u0584 \u0567 \u057d\u056f\u057d\u057e\u056b \u057f\u0561\u057c\u0578\u057e \u0587 \u056f\u0561\u0580\u0578\u0572 \u0567 \u057a\u0561\u0580\u0578\u0582\u0576\u0561\u056f\u0565\u056c \u057f\u0561\u057c\u0565\u0580, \u0569\u057e\u0565\u0580, \u0563\u056e\u056b\u056f, \u056f\u0565\u057f, \u057e\u0565\u0580\u057b\u0561\u056f\u0565\u0565\u057f \u056f\u0561\u0574 \u057f\u0578\u0572\u0561\u057f\u0561\u056f\u056b \u0563\u056e\u056b\u056f", "You have unsaved changes are you sure you want to navigate away?": "\u053f\u0561\u0576 \u0579\u057a\u0561\u0570\u057a\u0561\u0576\u057e\u0561\u056e \u0583\u0578\u0583\u0578\u056d\u0578\u0582\u0569\u0575\u0578\u0582\u0576\u0576\u0565\u0580\u0589 \u0534\u0578\u0582\u0584 \u056b\u0580\u0578\u055e\u0584 \u0578\u0582\u0566\u0578\u0582\u0574 \u0565\u0584 \u0564\u0578\u0582\u0580\u057d \u0563\u0561\u056c", "Restore last draft": "\u054e\u0565\u0580\u0561\u056f\u0561\u0576\u0563\u0576\u0565\u056c \u057e\u0565\u0580\u057b\u056b\u0576 \u0576\u0561\u056d\u0561\u0563\u056b\u056e\u0568", "Special character...": "\u0540\u0561\u057f\u0578\u0582\u056f \u057d\u056b\u0574\u057e\u0578\u056c\u0576\u0565\u0580...", "Source code": "\u053e\u0580\u0561\u0563\u0580\u0561\u0575\u056b\u0576 \u056f\u0578\u0564", "Insert\/Edit code sample": "\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c\/\u056d\u0574\u0562\u0561\u0563\u0580\u0565\u056c \u056f\u0578\u0564\u0568", "Language": "\u053c\u0565\u0566\u0578\u0582", "Code sample...": "\u053f\u0578\u0564\u056b \u0585\u0580\u0576\u0561\u056f", "Color Picker": "\u0533\u0578\u0582\u0576\u0561\u057a\u0576\u0561\u056f", "R": "R", "G": "G", "B": "B", "Left to right": "\u0541\u0561\u056d\u056b\u0581 \u0561\u057b", "Right to left": "\u0531\u057b\u056b\u0581 \u0571\u0561\u056d", "Emoticons...": "\u054d\u0574\u0561\u0575\u056c\u056b\u056f\u0576\u0565\u0580...", "Metadata and Document Properties": "\u0553\u0561\u057d\u057f\u0561\u0569\u0572\u0569\u056b \u0570\u0561\u057f\u056f\u0578\u0582\u0569\u0575\u0578\u0582\u0576\u0576\u0565\u0580\u0568", "Title": "\u054e\u0565\u0580\u0576\u0561\u0563\u056b\u0580", "Keywords": "\u0548\u0580\u0578\u0576\u0578\u0572\u0561\u056f\u0561\u0576 \u0562\u0561\u057c\u0565\u0580", "Description": "\u0546\u056f\u0561\u0580\u0561\u0563\u0580\u0578\u0582\u0569\u0575\u0578\u0582\u0576", "Robots": "Robots", "Author": "\u0540\u0565\u0572\u056b\u0576\u0561\u056f", "Encoding": "\u053f\u0578\u0564\u0561\u057e\u0578\u0580\u0578\u0582\u0574", "Fullscreen": "\u0531\u0574\u0562\u0578\u0572\u057b \u0567\u056f\u0580\u0561\u0576\u0578\u057e", "Action": "\u0533\u0578\u0580\u056e\u0578\u0572\u0578\u0582\u0569\u0575\u0578\u0582\u0576", "Shortcut": "\u053f\u0561\u0580\u0573\u0578\u0582\u0572\u056b", "Help": "\u0555\u0563\u0576\u0578\u0582\u0569\u0575\u0578\u0582\u0576", "Address": "\u0540\u0561\u057d\u0581\u0565", "Focus to menubar": "Focus to menubar", "Focus to toolbar": "Focus to toolbar", "Focus to element path": "Focus to element path", "Focus to contextual toolbar": "Focus to contextual toolbar", "Insert link (if link plugin activated)": "\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c \u0570\u0572\u0578\u0582\u0574 (\u0565\u0569\u0565 \u0570\u0572\u0578\u0582\u0574 \u0568\u0576\u0564\u056c\u0561\u0575\u0576\u0578\u0582\u0574\u0568 \u0561\u057e\u057f\u056b\u057e \u0567)", "Save (if save plugin activated)": "\u054a\u0561\u0570\u057a\u0561\u0576\u0565\u056c (\u0565\u0569\u0565 save \u0568\u0576\u0564\u056c\u0561\u0575\u0576\u0578\u0582\u0574\u0568 \u0561\u056f\u057f\u056b\u057e \u0567)", "Find (if searchreplace plugin activated)": "\u0553\u0576\u057f\u0580\u0565\u056c (\u0565\u0569\u0565 searchreplace \u0568\u0576\u0564\u056c\u0561\u0575\u0576\u0578\u0582\u0574\u0568 \u0561\u056f\u057f\u056b\u057e \u0567)", "Plugins installed ({0}):": "\u054f\u0565\u0572\u0561\u0564\u0580\u057e\u0561\u056e \u0583\u056c\u0561\u0563\u056b\u0576\u0576\u0565\u0580 ({0}):", "Premium plugins:": "\u054e\u0573\u0561\u0580\u0578\u057e\u056b \u0568\u0576\u0564\u056c\u0561\u0575\u0576\u0578\u0582\u0574\u0576\u0565\u0580", "Learn more...": "\u053b\u0574\u0561\u0576\u0561\u056c \u0561\u057e\u0565\u056c\u056b\u0576 \u2024\u2024\u2024", "You are using {0}": "\u0534\u0578\u0582\u0584 \u0585\u0563\u057f\u0561\u0563\u0578\u0580\u056e\u0578\u0582\u0574 \u0565\u0584 {0}", "Plugins": "\u0538\u0576\u0564\u056c\u0561\u0575\u0576\u0578\u0582\u0574\u0576\u0565\u0580", "Handy Shortcuts": "\u0555\u0563\u057f\u0561\u056f\u0561\u0580 \u056f\u0561\u0580\u0573\u0578\u0582\u0572\u056b\u0576\u0565\u0580", "Horizontal line": "\u0540\u0578\u0580\u056b\u0566\u0578\u0576\u0561\u056f\u0561\u0576 \u0563\u056b\u056e", "Insert\/edit image": "\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c\/\u056d\u0574\u0562\u0561\u0563\u0580\u0565\u056c \u0576\u056f\u0561\u0580", "Image description": "\u0546\u056f\u0561\u0580\u0561\u0563\u0580\u0578\u0582\u0569\u0575\u0578\u0582\u0576", "Source": "\u0546\u056f\u0561\u0580\u056b \u0570\u0561\u057d\u0581\u0565", "Dimensions": "\u0549\u0561\u0583\u0565\u0580", "Constrain proportions": "\u054a\u0561\u0570\u057a\u0561\u0576\u0565\u056c \u0574\u0561\u0577\u057f\u0561\u0562\u0561\u057e\u0578\u0580\u0578\u0582\u0574\u0568", "General": "\u0533\u056c\u056d\u0561\u057e\u0578\u0580", "Advanced": "\u053c\u0580\u0561\u0581\u0578\u0582\u0581\u056b\u0579", "Style": "\u0548\u0573", "Vertical space": "\u0548\u0582\u0572\u0572\u0561\u0570\u0561\u0575\u0561\u0581 \u057f\u0561\u0580\u0561\u056e\u0578\u0582\u0569\u0575\u0578\u0582\u0576", "Horizontal space": "\u0540\u0578\u0580\u056b\u0566\u0578\u0576\u0561\u056f\u0561\u0576 \u057f\u0561\u0580\u0561\u056e\u0578\u0582\u0569\u0575\u0578\u0582\u0576", "Border": "\u0535\u0566\u0580\u0561\u0563\u056b\u056e", "Insert image": "\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c \u0576\u056f\u0561\u0580", "Image...": "\u0546\u056f\u0561\u0580", "Image list": "Image list", "Rotate counterclockwise": "\u054a\u057f\u057f\u0565\u056c \u056a\u0561\u0574\u057d\u056c\u0561\u0584\u056b\u0576 \u0570\u0561\u056f\u0561\u057c\u0561\u056f", "Rotate clockwise": "\u054a\u057f\u057f\u0565\u056c \u056a\u0561\u0574\u057d\u056c\u0561\u0584\u056b \u0578\u0582\u0572\u0572\u0578\u0582\u0569\u0575\u0561\u0574\u0562", "Flip vertically": "\u0548\u0582\u0572\u0572\u0561\u0570\u0561\u0575\u0561\u0581 \u0561\u0580\u057f\u0561\u0581\u0578\u056c\u0578\u0582\u0574", "Flip horizontally": "\u0540\u0578\u0580\u056b\u0566\u0578\u0576\u0561\u056f\u0561\u0576 \u0561\u0580\u057f\u0561\u0581\u0578\u056c\u0578\u0582\u0574", "Edit image": "\u053d\u0562\u0574\u0562\u0561\u0563\u0580\u0565\u056c \u0576\u056f\u0561\u0580\u0568", "Image options": "\u0546\u056f\u0561\u0580\u056b \u056f\u0561\u0580\u0563\u0561\u057e\u0578\u0580\u0578\u0582\u0574\u0576\u0565\u0580\u0568", "Zoom in": "\u0544\u0565\u056e\u0561\u0581\u0576\u0565\u056c", "Zoom out": "\u0553\u0578\u0584\u0580\u0561\u0581\u0576\u0565\u056c", "Crop": "\u053f\u057f\u0580\u0565\u056c", "Resize": "\u0553\u0578\u056d\u0565\u056c \u0579\u0561\u0583\u0568", "Orientation": "\u053f\u0578\u0572\u0574\u0576\u0578\u0580\u0578\u0577\u0578\u0582\u0574", "Brightness": "\u054a\u0561\u0575\u056e\u0561\u057c\u0578\u0582\u0569\u0575\u0578\u0582\u0576", "Sharpen": "Sharpen", "Contrast": "\u053f\u0578\u0576\u057f\u0580\u0561\u057d\u057f", "Color levels": "Color levels", "Gamma": "\u0533\u0561\u0574\u0574\u0561", "Invert": "\u0553\u0578\u056d\u0561\u057f\u0565\u0572\u0565\u056c", "Apply": "\u0540\u0561\u057d\u057f\u0561\u057f\u0565\u056c", "Back": "\u0540\u0565\u057f", "Insert date\/time": "\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c \u0561\u0574\u057d\u0561\u0569\u056b\u057e\/\u056a\u0561\u0574\u0561\u0576\u0561\u056f", "Date\/time": "\u0531\u0574\u057d\u0561\u0569\u056b\u057e\/\u056a\u0561\u0574\u0561\u0576\u0561\u056f", "Insert\/Edit Link": "\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c\/\u0553\u0578\u0583\u0578\u056d\u0565\u056c \u0540\u0572\u0578\u0582\u0574\u0568", "Insert\/edit link": "\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c\/\u056d\u0574\u0562\u0561\u0563\u0580\u0565\u056c \u0570\u0572\u0578\u0582\u0574", "Text to display": "\u0540\u0572\u0574\u0561\u0576 \u057f\u0565\u0584\u057d\u057f", "Url": "Url", "Open link in...": "\u0532\u0561\u0581\u0565\u056c \u0570\u0572\u0578\u0582\u0574\u0568", "Current window": "\u0538\u0576\u0569\u0561\u0581\u056b\u056f \u057a\u0561\u057f\u0578\u0582\u0570\u0561\u0576\u0568", "None": "\u0548\u0579\u056b\u0576\u0579", "New window": "\u0546\u0578\u0580 \u057a\u0561\u057f\u0578\u0582\u0570\u0561\u0576", "Remove link": "\u054b\u0576\u057b\u0565\u056c \u0570\u0572\u0578\u0582\u0574\u0568", "Anchors": "\u053d\u0561\u0580\u056b\u057d\u056d\u0576\u0565\u0580", "Link...": "\u0540\u0572\u0578\u0582\u0574", "Paste or type a link": "\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u0584 \u056f\u0561\u0574 \u0563\u0580\u0565\u0584 \u0570\u0572\u0578\u0582\u0574\u0568", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u0544\u0578\u0582\u057f\u0584\u0561\u0563\u0580\u057e\u0561\u056e \u0570\u0572\u0578\u0582\u0574\u0568 \u056f\u0561\u0580\u056e\u0565\u057d \u0537\u056c. \u0583\u0578\u057d\u057f\u056b \u0570\u0561\u057d\u0581\u0565 \u0567: \u0534\u0578\u0582\u0584 \u056f\u0581\u0561\u0576\u056f\u0561\u0576\u0561\u0584 \u0561\u057e\u0565\u056c\u0561\u0581\u0576\u0565\u056c mailto: \u0570\u0572\u0574\u0561\u0576 \u057d\u056f\u0566\u0562\u0578\u0582\u0574", "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\u0544\u0578\u0582\u057f\u0584\u0561\u0563\u0580\u057e\u0561\u056e \u0570\u0572\u0578\u0582\u0574\u0568 \u056f\u0561\u0580\u056e\u0565\u057d \u0561\u0580\u057f\u0561\u0584\u056b\u0576 \u0570\u0572\u0578\u0582\u0574 \u0567: \u0534\u0578\u0582\u0584 \u056f\u0581\u0561\u0576\u056f\u0561\u0576\u0561\u0584 \u0561\u057e\u0565\u056c\u0561\u0581\u0576\u0565\u056c http:\/\/ \u0570\u0572\u0574\u0561\u0576 \u057d\u056f\u0566\u0562\u0578\u0582\u0574", "Link list": "\u0540\u0572\u0578\u0582\u0574\u0576\u0565\u0580\u056b \u0581\u0578\u0582\u0581\u0561\u056f", "Insert video": "\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c \u057e\u056b\u0564\u0565\u0578", "Insert\/edit video": "\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c\/\u056d\u0574\u0562\u0561\u0563\u0580\u0565\u056c \u057e\u056b\u0564\u0565\u0578", "Insert\/edit media": "\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c\/\u056d\u0574\u0562\u0561\u0563\u0580\u0565\u056c \u0574\u0565\u0564\u056b\u0561", "Alternative source": "\u0531\u0575\u056c\u0568\u0576\u057f\u0580\u0561\u0576\u0584\u0561\u0575\u056b\u0576 \u056f\u0578\u0564", "Alternative source URL": "\u0531\u0575\u056c\u0568\u0576\u057f\u0580\u0561\u0576\u0584\u0561\u0575\u056b\u0576 \u0561\u0572\u0562\u0575\u0578\u0582\u0580\u056b \u0570\u0572\u0578\u0582\u0574", "Media poster (Image URL)": "\u0544\u0565\u0564\u056b\u0561 \u057a\u0561\u057d\u057f\u0561\u057c (\u0546\u056f\u0561\u0580\u056b \u0570\u0572\u0578\u0582\u0574)", "Paste your embed code below:": "\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u0584 \u0541\u0565\u0580 \u056f\u0578\u0564\u0568 \u0561\u0575\u057d\u057f\u0565\u0572\u055d", "Embed": "\u054f\u0565\u0572\u0561\u0564\u0580\u057e\u0578\u0572 \u056f\u0578\u0564", "Media...": "\u0544\u0565\u0564\u056b\u0561", "Nonbreaking space": "\u0531\u057c\u0561\u0576\u0581 \u0576\u0578\u0580 \u057f\u0578\u0572\u056b \u0562\u0561\u0581\u0561\u057f", "Page break": "\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c \u0567\u057b\u056b \u0561\u0576\u057b\u0561\u057f\u056b\u0579", "Paste as text": "\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c \u0578\u0580\u057a\u0565\u057d \u057f\u0565\u0584\u057d\u057f", "Preview": "\u0546\u0561\u056d\u0576\u0561\u056f\u0561\u0576 \u0564\u056b\u057f\u0578\u0582\u0574", "Print...": "\u054f\u057a\u0565\u056c", "Save": "\u054a\u0561\u0570\u057a\u0561\u0576\u0565\u056c", "Find": "\u0553\u0576\u057f\u0580\u0565\u056c", "Replace with": "\u0553\u0578\u056d\u0561\u0580\u056b\u0576\u0565\u056c", "Replace": "\u0553\u0578\u056d\u0561\u0580\u056b\u0576\u0565\u056c", "Replace all": "\u0553\u0578\u056d\u0561\u0580\u056b\u0576\u0565\u056c \u0562\u0578\u056c\u0578\u0580\u0568", "Previous": "\u0546\u0561\u056d\u0578\u0580\u0564", "Next": "\u0540\u0561\u057b\u0578\u0580\u0564", "Find and replace...": "\u0553\u0576\u057f\u0580\u0565\u056c \u0587 \u0583\u0578\u056d\u0561\u0580\u056b\u0576\u0565\u056c", "Could not find the specified string.": "\u0546\u0577\u057e\u0561\u056e \u057f\u0565\u0584\u057d\u057f\u0568 \u0579\u056b \u0563\u057f\u0576\u057e\u0565\u056c", "Match case": "\u0540\u0561\u0577\u057e\u056b \u0561\u057c\u0576\u0565\u056c \u057c\u0565\u0563\u056b\u057d\u057f\u0578\u0580\u0568", "Find whole words only": "\u0533\u057f\u0576\u0565\u056c \u0574\u056b\u0561\u0575\u0576 \u0561\u0574\u0562\u0578\u0572\u057b \u0562\u0561\u057c\u0565\u0580\u0568", "Spell check": "\u0548\u0582\u0572\u0572\u0561\u0563\u0580\u0578\u0582\u0569\u0575\u0561\u0576 \u057d\u057f\u0578\u0582\u0563\u0578\u0582\u0574", "Ignore": "\u0531\u0576\u057f\u0565\u057d\u0565\u056c", "Ignore all": "\u0531\u0576\u057f\u0565\u057d\u0565\u056c \u0562\u0578\u056c\u0578\u0580\u0568", "Finish": "\u0531\u057e\u0561\u0580\u057f\u0565\u056c", "Add to Dictionary": "\u0531\u057e\u0565\u056c\u0561\u0581\u0576\u0565\u056c \u0562\u0561\u057c\u0561\u0580\u0561\u0576\u0578\u0582\u0574", "Insert table": "\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c \u0561\u0572\u0575\u0578\u0582\u057d\u0561\u056f", "Table properties": "\u0531\u0572\u0575\u0578\u0582\u057d\u0561\u056f\u056b \u0570\u0561\u057f\u056f\u0578\u0582\u0569\u0575\u0578\u0582\u0576\u0576\u0565\u0580\u0568", "Delete table": "\u054b\u0576\u057b\u0565\u056c \u0561\u0572\u0575\u0578\u0582\u057d\u0561\u056f\u0568", "Cell": "\u054e\u0561\u0576\u0564\u0561\u056f", "Row": "\u054f\u0578\u0572", "Column": "\u054d\u0575\u0578\u0582\u0576\u0575\u0561\u056f", "Cell properties": "\u054e\u0561\u0576\u0564\u0561\u056f\u056b \u0570\u0561\u057f\u056f\u0578\u0582\u0569\u0575\u0578\u0582\u0576\u0576\u0565\u0580\u0568", "Merge cells": "\u0544\u056b\u0561\u057e\u0578\u0580\u0565\u056c \u057e\u0561\u0576\u0564\u0561\u056f\u0576\u0565\u0580\u0568", "Split cell": "\u0532\u0561\u056a\u0561\u0576\u0565\u056c \u057e\u0561\u0576\u0564\u0561\u056f\u0568", "Insert row before": "\u0531\u057e\u0565\u056c\u0561\u0581\u0576\u0565\u056c \u057f\u0578\u0572 \u057e\u0565\u0580\u0587\u0578\u0582\u0574", "Insert row after": "\u0531\u057e\u0565\u056c\u0561\u0581\u0576\u0565\u056c \u057f\u0578\u0572 \u0576\u0565\u0580\u0584\u0587\u0578\u0582\u0574", "Delete row": "\u054b\u0576\u057b\u0565\u056c \u057f\u0578\u0572\u0568", "Row properties": "\u054f\u0578\u0572\u056b \u0570\u0561\u057f\u056f\u0578\u0582\u0569\u0575\u0578\u0582\u0576\u0576\u0565\u0580\u0568", "Cut row": "\u053f\u057f\u0580\u0565\u056c \u057f\u0578\u0572\u0568", "Copy row": "\u054a\u0561\u057f\u0573\u0565\u0576\u0565\u056c \u057f\u0578\u0572\u0568", "Paste row before": "\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c \u057f\u0578\u0572\u0568 \u057e\u0565\u0580\u0587\u0578\u0582\u0574", "Paste row after": "\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c \u057f\u0578\u0572\u0568 \u0576\u0565\u0580\u0584\u0587\u0578\u0582\u0574", "Insert column before": "\u0531\u057e\u0565\u056c\u0561\u0581\u0576\u0565\u056c \u0576\u0578\u0580 \u057d\u0575\u0578\u0582\u0576 \u0571\u0561\u056d\u056b\u0581", "Insert column after": "\u0531\u057e\u0565\u056c\u0561\u0581\u0576\u0565\u056c \u0576\u0578\u0580 \u057d\u0575\u0578\u0582\u0576 \u0561\u057b\u056b\u0581", "Delete column": "\u0541\u0576\u057b\u0565\u056c \u057d\u0575\u0578\u0582\u0576\u0568", "Cols": "\u054d\u0575\u0578\u0582\u0576\u0575\u0561\u056f\u0576\u0565\u0580", "Rows": "\u054f\u0578\u0572\u0565\u0580", "Width": "\u053c\u0561\u0575\u0576\u0578\u0582\u0569\u0575\u0578\u0582\u0576", "Height": "\u0532\u0561\u0580\u0571\u0580\u0578\u0582\u0569\u0575\u0578\u0582\u0576", "Cell spacing": "\u0531\u0580\u057f\u0561\u0584\u056b\u0576 \u057f\u0561\u0580\u0561\u056e\u0578\u0582\u0569\u0575\u0578\u0582\u0576", "Cell padding": "\u0546\u0565\u0580\u0584\u056b\u0576 \u057f\u0561\u0580\u0561\u056e\u0578\u0582\u0569\u0575\u0578\u0582\u0576", "Show caption": "\u0551\u0578\u0582\u0581\u0561\u0564\u0580\u0565\u056c \u057e\u0565\u0580\u0576\u0561\u0563\u056b\u0580\u0568", "Left": "\u0541\u0561\u056d", "Center": "\u053f\u0565\u0576\u057f\u0580\u0578\u0576", "Right": "\u0531\u057b", "Cell type": "\u054e\u0561\u0576\u0564\u0561\u056f\u056b \u057f\u056b\u057a", "Scope": "Scope", "Alignment": "\u0540\u0561\u057e\u0561\u057d\u0561\u0580\u0565\u0581\u0578\u0582\u0574", "H Align": "\u0540. \u0540\u0561\u057e\u0561\u057d\u0561\u0580\u0565\u0581\u0578\u0582\u0574", "V Align": "\u0548\u0582. \u0570\u0561\u057e\u0561\u057d\u0561\u0580\u0565\u0581\u0578\u0582\u0574", "Top": "\u054e\u0565\u0580\u0587", "Middle": "\u0544\u0565\u057b\u057f\u0565\u0572", "Bottom": "\u0546\u0565\u0580\u0584\u0587", "Header cell": "\u054e\u0565\u0580\u0576\u0561\u0563\u0580\u056b \u057e\u0561\u0576\u0564\u0561\u056f\u0576\u0565\u0580", "Row group": "\u054f\u0578\u0572\u0565\u0580\u056b \u056d\u0578\u0582\u0574\u0562", "Column group": "\u054d\u0575\u0578\u0582\u0576\u0575\u0561\u056f\u0576\u0565\u0580\u056b \u056d\u0578\u0582\u0574\u0562", "Row type": "\u054f\u0578\u0572\u056b \u057f\u056b\u057a", "Header": "\u054e\u0565\u0580\u0576\u0561\u0563\u056b\u0580", "Body": "\u054a\u0561\u0580\u0578\u0582\u0576\u0561\u056f\u0578\u0582\u0569\u0575\u0578\u0582\u0576", "Footer": "\u0531\u0572\u0575\u0578\u0582\u057d\u0561\u056f\u056b \u057d\u057f\u0578\u0580\u056b\u0576 \u0570\u0561\u057f\u057e\u0561\u056e", "Border color": "\u0535\u0566\u0580\u0561\u0563\u056b\u056e", "Insert template...": "\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u0584 \u0571\u0587\u0561\u0576\u0574\u0578\u0582\u0577", "Templates": "\u0541\u0587\u0561\u0576\u0574\u0578\u0582\u0577\u0576\u0565\u0580", "Template": "\u0541\u0587\u0561\u0576\u0574\u0578\u0582\u0577", "Text color": "\u054f\u0561\u057c\u056b \u0563\u0578\u0582\u0575\u0576", "Background color": "\u0556\u0578\u0576\u056b \u0563\u0578\u0582\u0575\u0576", "Custom...": "\u0531\u0575\u056c...", "Custom color": "\u0531\u0575\u056c \u0563\u0578\u0582\u0575\u0576", "No color": "\u0531\u0576\u0563\u0578\u0582\u0575\u0576", "Remove color": "\u054b\u0576\u057b\u0565\u056c \u0563\u0578\u0582\u0575\u0576\u0568", "Table of Contents": "\u0551\u0561\u0576\u056f", "Show blocks": "\u0551\u0578\u0582\u0581\u0561\u0564\u0580\u0565\u056c \u0562\u056c\u0578\u056f\u0576\u0565\u0580\u0568", "Show invisible characters": "\u0551\u0578\u0582\u0575\u0581 \u057f\u0561\u056c \u0561\u0576\u057f\u0565\u057d\u0561\u0576\u0565\u056c\u056b \u057d\u056b\u0574\u057e\u0578\u056c\u0576\u0565\u0580\u0568", "Word count": "\u0532\u0561\u057c\u056b \u0584\u0561\u0576\u0561\u056f", "Count": "\u0554\u0561\u0576\u0561\u056f\u0568", "Document": "\u0553\u0561\u057d\u057f\u0561\u0569\u0578\u0582\u0572\u0569", "Selection": "\u0538\u0576\u057f\u0580\u0578\u0582\u0569\u0575\u0578\u0582\u0576", "Words": "\u0532\u0561\u057c\u0565\u0580", "Words: {0}": "\u0532\u0561\u057c\u0565\u0580\u056b \u0584\u0561\u0576\u0561\u056f: {0}", "{0} words": "{0} \u0562\u0561\u057c", "File": "\u0556\u0561\u0575\u056c", "Edit": "\u053d\u0574\u0562\u0561\u0563\u0580\u0565\u056c", "Insert": "\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c", "View": "\u054f\u0565\u057d\u0584", "Format": "\u0556\u0578\u0580\u0574\u0561\u057f", "Table": "\u0531\u0572\u0575\u0578\u0582\u057d\u0561\u056f", "Tools": "\u0533\u0578\u0580\u056e\u056b\u0584\u0576\u0565\u0580", "Powered by {0}": "Powered by {0}", "Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u054f\u0565\u0584\u057d\u057f\u0561\u0575\u056b\u0576 \u0564\u0561\u0577\u057f\u0589 \u054d\u0565\u0572\u0574\u0565\u0584 ALT-F9 \u0574\u0565\u0576\u0575\u0578\u0582\u056b \u0570\u0561\u0574\u0561\u0580\u0589 ALT-F10 \u0563\u0578\u0580\u056e\u056b\u0584\u0576\u0565\u0580\u056b \u057e\u0561\u0570\u0561\u0576\u0561\u056f\u0589 \u054d\u0565\u0572\u0574\u0565\u0584 ALT-0 \u0585\u0563\u0576\u0578\u0582\u0569\u0575\u0561\u0576 \u0570\u0561\u0574\u0561\u0580", "Image title": "\u0546\u056f\u0561\u0580\u056b \u057e\u0565\u0580\u0576\u0561\u0563\u056b\u0580", "Border width": "\u054d\u0561\u0570\u0574\u0561\u0576\u056b \u056c\u0561\u0575\u0576\u0578\u0582\u0569\u0575\u0578\u0582\u0576\u0568", "Border style": "\u054d\u0561\u0570\u0574\u0561\u0576\u056b \u0578\u0573\u0568", "Error": "\u054d\u056d\u0561\u056c", "Warn": "\u0536\u0563\u0578\u0582\u0577\u0561\u0581\u0578\u0582\u0574", "Valid": "\u054e\u0561\u057e\u0565\u0580 \u0567", "To open the popup, press Shift+Enter": "\u0539\u057c\u0578\u0582\u0581\u056b\u056f\u0568 \u0562\u0561\u0581\u0565\u056c\u0578\u0582 \u0570\u0561\u0574\u0561\u0580 \u057d\u0565\u0572\u0574\u0565\u0584 Shift + Enter", "Rich Text Area. Press ALT-0 for help.": "\u0540\u0561\u0580\u0578\u0582\u057d\u057f \u057f\u0565\u0584\u057d\u057f\u0561\u0575\u056b\u0576 \u057f\u0561\u0580\u0561\u056e\u0584: \u0555\u0563\u0576\u0578\u0582\u0569\u0575\u0561\u0576 \u0570\u0561\u0574\u0561\u0580 \u057d\u0565\u0572\u0574\u0565\u0584 ALT-0:", "System Font": "\u0540\u0561\u0574\u0561\u056f\u0561\u0580\u0563\u056b \u057f\u0561\u057c\u0561\u057f\u0565\u057d\u0561\u056f", "Failed to upload image: {0}": "\u0549\u0570\u0561\u057b\u0578\u0572\u057e\u0565\u0581 \u057e\u0565\u0580\u0562\u0565\u057c\u0576\u0565\u056c \u057a\u0561\u057f\u056f\u0565\u0580\u0568: {0}", "Failed to load plugin: {0} from url {1}": "\u0549\u0570\u0561\u057b\u0578\u0572\u057e\u0565\u0581 \u0562\u0565\u057c\u0576\u0565\u056c \u057a\u056c\u0561\u0563\u056b\u0576\u0568\u0589 {0} \u0570\u0572\u0578\u0582\u0574\u056b\u0581 {1}", "Failed to load plugin url: {0}": "\u0549\u0570\u0561\u057b\u0578\u0572\u057e\u0565\u0581 \u0562\u0565\u057c\u0576\u0565\u056c \u057a\u056c\u0561\u0563\u056b\u0576\u0568 \u0570\u0572\u0578\u0582\u0574\u056b\u0581\u0589 {0}", "Failed to initialize plugin: {0}": "\u0549\u0570\u0561\u057b\u0578\u0572\u057e\u0565\u0581 \u0574\u056b\u0561\u0581\u0576\u0565\u056c \u057a\u056c\u0561\u0563\u056b\u0576\u0568\u0589 {0}", "example": "\u0585\u0580\u056b\u0576\u0561\u056f", "Search": "\u0553\u0576\u057f\u0580\u0565\u056c", "All": "\u0532\u0578\u056c\u0578\u0580\u0568", "Currency": "\u0531\u0580\u056a\u0578\u0582\u0575\u0569", "Text": "\u054f\u0565\u0584\u057d\u057f", "Quotations": "\u0544\u0565\u057b\u0562\u0565\u0580\u0578\u0582\u0574\u0576\u0565\u0580", "Mathematical": "\u0544\u0561\u0569\u0565\u0574\u0561\u057f\u056b\u056f\u0561\u056f\u0561\u0576", "Extended Latin": "\u0538\u0576\u0564\u0561\u0580\u0571\u0561\u056f \u056c\u0561\u057f\u056b\u0576\u0565\u0580\u0565\u0576", "Symbols": "\u054d\u056b\u0574\u057e\u0578\u056c\u0576\u0565\u0580", "Arrows": "\u054d\u056c\u0561\u0584\u0576\u0565\u0580", "User Defined": "\u0555\u0563\u057f\u0561\u0563\u0578\u0580\u056e\u0578\u0572\u056b \u056f\u0578\u0572\u0574\u056b\u0581 \u054d\u0561\u0570\u0574\u0561\u0576\u057e\u0561\u056e", "dollar sign": "\u0564\u0578\u056c\u056c\u0561\u0580\u056b \u0576\u0577\u0561\u0576", "currency sign": "\u0561\u0580\u056a\u0578\u0582\u0575\u0569\u056b \u0576\u0577\u0561\u0576", "euro-currency sign": "\u0565\u057e\u0580\u0578-\u0561\u0580\u056a\u0578\u0582\u0575\u0569\u056b \u0576\u0577\u0561\u0576", "colon sign": "\u056f\u0580\u056f\u0576\u0561\u056f\u0565\u057f \u0576\u0577\u0561\u0576", "cruzeiro sign": "\u0576\u0561\u057e\u0561\u0580\u056f\u0578\u0582\u0569\u0575\u0561\u0576 \u0576\u0577\u0561\u0576", "french franc sign": "\u0586\u0580\u0561\u0576\u057d\u056b\u0561\u056f\u0561\u0576 \u0586\u0580\u0561\u0576\u056f\u056b \u0576\u0577\u0561\u0576", "lira sign": "\u056c\u056b\u0580\u056b \u0576\u0577\u0561\u0576", "mill sign": "\u057b\u0580\u0561\u0572\u0561\u0581\u056b \u0576\u0577\u0561\u0576", "naira sign": "\u0576\u0561\u056b\u0580\u0561\u0575\u056b \u0576\u0577\u0561\u0576", "peseta sign": "\u057a\u0565\u057d\u0565\u057f\u0561\u0575\u056b \u0576\u0577\u0561\u0576", "rupee sign": "\u057c\u0578\u0582\u0583\u056b\u056b \u0576\u0577\u0561\u0576", "won sign": "\u0577\u0561\u0570\u0565\u056c\u0578\u0582 \u0576\u0577\u0561\u0576\u0568", "new sheqel sign": "\u0576\u0578\u0580 \u0577\u0565\u056f\u0565\u056c \u0576\u0577\u0561\u0576", "dong sign": "\u0564\u0578\u0576\u0563\u056b \u0576\u0577\u0561\u0576", "kip sign": "\u056f\u056b\u057a \u0576\u0577\u0561\u0576", "tugrik sign": "\u057f\u0578\u0582\u0563\u0580\u056b\u056f\u056b \u0576\u0577\u0561\u0576", "drachma sign": "\u0564\u0580\u0561\u0574\u0561\u056d\u0574\u0561\u0575\u056b \u0576\u0577\u0561\u0576", "german penny symbol": "\u0563\u0565\u0580\u0574\u0561\u0576\u0561\u056f\u0561\u0576 \u057a\u0565\u0576\u056b\u0575\u056b \u056d\u0578\u0580\u0570\u0580\u0564\u0561\u0576\u056b\u0577", "peso sign": "\u057a\u0565\u057d\u0578\u0575\u056b \u0576\u0577\u0561\u0576", "guarani sign": "\u0563\u0578\u0582\u0561\u0580\u0561\u0576\u056b \u0576\u0577\u0561\u0576", "austral sign": "\u0561\u057e\u057d\u057f\u0580\u0561\u056c\u056b \u0576\u0577\u0561\u0576", "hryvnia sign": "\u0563\u0580\u056b\u057e\u0576\u0561\u0575\u056b \u0576\u0577\u0561\u0576", "cedi sign": "\u0584\u0565\u0564\u056b \u0576\u0577\u0561\u0576", "livre tournois sign": "\u056c\u056b\u057e\u0580\u0565 \u0569\u0578\u0582\u0580\u0576\u0578\u056b\u057d \u0576\u0577\u0561\u0576", "spesmilo sign": "\u057d\u057a\u0565\u057d\u0574\u056b\u056c\u0578 \u0576\u0577\u0561\u0576", "tenge sign": "\u057f\u0565\u0576\u0563\u0565 \u0576\u0577\u0561\u0576", "indian rupee sign": "\u0570\u0576\u0564\u056f\u0561\u056f\u0561\u0576 \u057c\u0578\u0582\u0583\u056b \u0576\u0577\u0561\u0576", "turkish lira sign": "\u0569\u0578\u0582\u0580\u0584\u0561\u056f\u0561\u0576 \u056c\u056b\u0580\u0561\u0575\u056b \u0576\u0577\u0561\u0576", "nordic mark sign": "\u0570\u0575\u0578\u0582\u057d\u056b\u057d\u0561\u0575\u056b\u0576 \u0576\u0577\u0561\u0576\u056b \u0576\u0577\u0561\u0576", "manat sign": "\u0574\u0561\u0576\u0561\u0569\u056b \u0576\u0577\u0561\u0576", "ruble sign": "\u057c\u0578\u0582\u0562\u056c\u0578\u0582 \u0576\u0577\u0561\u0576", "yen character": "\u056b\u0565\u0576\u056b \u0576\u0577\u0561\u0576", "yuan character": "\u0575\u0578\u0582\u0561\u0576\u056b \u0576\u0577\u0561\u0576", "yuan character, in hong kong and taiwan": "\u0575\u0578\u0582\u0561\u0576\u056b \u0576\u0577\u0561\u0576 \u0570\u0578\u0576\u0563\u056f\u0578\u0576\u0563\u0578\u0582\u0574 \u0587 \u0569\u0561\u0575\u057e\u0561\u0576\u0578\u0582\u0574", "yen\/yuan character variant one": "\u0575\u0565\u0576\u056b\/\u0575\u0578\u0582\u0561\u0576\u056b \u0576\u0577\u0561\u0576 \u057f\u0561\u0580\u0562\u0565\u0580\u0561\u056f \u0561\u057c\u0561\u057b\u056b\u0576", "Loading emoticons...": "\u054d\u0574\u0561\u0575\u056c\u056b\u056f\u0576\u0565\u0580\u056b \u0562\u0565\u057c\u0576\u0578\u0582\u0574\u0568\u2024\u2024\u2024", "Could not load emoticons": "\u0549\u056f\u0561\u0580\u0578\u0572\u0561\u0581\u0561\u0576 \u0562\u0565\u057c\u0576\u057e\u0565\u056c \u057d\u0574\u0561\u0575\u056c\u056b\u056f\u0576\u0565\u0580\u0568", "People": "\u0544\u0561\u0580\u0564\u056b\u0584", "Animals and Nature": "\u053f\u0565\u0576\u0564\u0561\u0576\u056b\u0576\u0565\u0580 \u0587 \u0532\u0576\u0578\u0582\u0569\u0575\u0578\u0582\u0576", "Food and Drink": "\u054d\u0576\u0578\u0582\u0576\u0564 \u0587 \u056d\u0574\u056b\u0579\u0584", "Activity": "\u0533\u0578\u0580\u056e\u0578\u0582\u0576\u0565\u0578\u0582\u0569\u0575\u0578\u0582\u0576", "Travel and Places": "\u0543\u0561\u0576\u0561\u057a\u0561\u0580\u0570\u0578\u0580\u0564\u0578\u0582\u0569\u0575\u0578\u0582\u0576\u0576\u0565\u0580 \u0587 \u057e\u0561\u0575\u0580\u0565\u0580", "Objects": "\u0555\u0562\u0575\u0565\u056f\u057f\u0576\u0565\u0580", "Flags": "\u0534\u0580\u0578\u0577\u0576\u0565\u0580", "Characters": "\u0546\u056b\u0577\u0565\u0580", "Characters (no spaces)": "\u0546\u056b\u0577\u0565\u0580 (\u0562\u0561\u0581\u0561\u057f\u0576\u0565\u0580)", "{0} characters": "{0} \u0576\u056b\u0577\u0565\u0580", "Error: Form submit field collision.": "\u054d\u056d\u0561\u056c\u0589 \u0541\u0587\u0568 \u0570\u0561\u057d\u057f\u0561\u057f\u0565\u056c\u0578\u0582\u0581 \u0564\u0561\u0577\u057f\u056b \u0562\u0561\u056d\u0578\u0582\u0574:", "Error: No form element found.": "\u054d\u056d\u0561\u056c\u0589 \u0541\u0587\u056b \u0578\u0579 \u0574\u056b \u057f\u0561\u0580\u0580 \u0579\u056b \u0563\u057f\u0576\u057e\u0565\u056c:", "Update": "\u0539\u0561\u0580\u0574\u0561\u0581\u0576\u0565\u056c", "Color swatch": "\u0533\u0578\u0582\u0575\u0576\u056b \u0583\u0578\u056d\u0561\u0576\u0561\u056f\u0578\u0582\u0574", "Turquoise": "\u0553\u056b\u0580\u0578\u0582\u0566\u0561\u0563\u0578\u0582\u0575\u0576", "Green": "\u053f\u0561\u0576\u0561\u0579", "Blue": "\u053f\u0561\u057a\u0578\u0582\u0575\u057f", "Purple": "\u0544\u0561\u0576\u0578\u0582\u0577\u0561\u056f\u0561\u0563\u0578\u0582\u0575\u0576", "Navy Blue": "\u0544\u0578\u0582\u0563 \u056f\u0561\u057a\u0578\u0582\u0575\u057f", "Dark Turquoise": "\u0544\u0578\u0582\u0563 \u0583\u056b\u0580\u0578\u0582\u0566\u0561\u0563\u0578\u0582\u0575\u0576", "Dark Green": "\u0544\u0578\u0582\u0563 \u056f\u0561\u0576\u0561\u0579", "Medium Blue": "\u0544\u056b\u057b\u056b\u0576 \u056f\u0561\u057a\u0578\u0582\u0575\u057f", "Medium Purple": "\u0544\u056b\u057b\u056b\u0576 \u0574\u0561\u0576\u0578\u0582\u0577\u0561\u056f\u0561\u0563\u0578\u0582\u0575\u0576", "Midnight Blue": "\u053f\u0565\u057d\u0563\u056b\u0577\u0565\u0580\u0561\u0575\u056b\u0576 \u056f\u0561\u057a\u0578\u0582\u0575\u057f", "Yellow": "\u0534\u0565\u0572\u056b\u0576", "Orange": "\u0546\u0561\u0580\u0576\u057b\u0561\u0563\u0578\u0582\u0575\u0576", "Red": "\u053f\u0561\u0580\u0574\u056b\u0580", "Light Gray": "\u0532\u0561\u0581 \u0574\u0578\u056d\u0580\u0561\u0563\u0578\u0582\u0575\u0576", "Gray": "\u0544\u0578\u056d\u0580\u0561\u0563\u0578\u0582\u0575\u0576", "Dark Yellow": "\u0544\u0578\u0582\u0563 \u0564\u0565\u0572\u056b\u0576", "Dark Orange": "\u0544\u0578\u0582\u0563 \u0576\u0561\u0580\u0576\u057b\u0561\u0563\u0578\u0582\u0575\u0576", "Dark Red": "\u0544\u0578\u0582\u0563 \u056f\u0561\u0580\u0574\u056b\u0580", "Medium Gray": "\u0544\u056b\u057b\u056b\u0576 \u0574\u0578\u056d\u0580\u0561\u0563\u0578\u0582\u0575\u0576", "Dark Gray": "\u0544\u0578\u0582\u0563 \u0574\u0578\u056d\u0580\u0561\u0563\u0578\u0582\u0575\u0576", "Light Green": "\u0532\u0561\u0581 \u056f\u0561\u0576\u0561\u0579", "Light Yellow": "\u0532\u0561\u0581 \u0564\u0565\u0572\u056b\u0576", "Light Red": "\u0532\u0561\u0581 \u056f\u0561\u0580\u0574\u056b\u0580", "Light Purple": "\u0532\u0561\u0581 \u0574\u0561\u0576\u0578\u0582\u0577\u0561\u056f\u0561\u0563\u0578\u0582\u0575\u0576", "Light Blue": "\u0532\u0561\u0581 \u056f\u0561\u057a\u0578\u0582\u0575\u057f", "Dark Purple": "\u0544\u0578\u0582\u0563 \u0574\u0561\u0576\u0578\u0582\u0577\u0561\u056f\u0561\u0563\u0578\u0582\u0575\u0576", "Dark Blue": "\u0544\u0578\u0582\u0563 \u056f\u0561\u057a\u0578\u0582\u0575\u057f", "Black": "\u054d\u0587", "White": "\u054d\u057a\u056b\u057f\u0561\u056f", "Switch to or from fullscreen mode": "\u0531\u0576\u0581\u0565\u0584 \u0561\u0574\u0562\u0578\u0572\u057b \u0567\u056f\u0580\u0561\u0576\u056b\u0576 \u057c\u0565\u056a\u056b\u0574\u056b\u0581 \u056f\u0561\u0574 \u0561\u0574\u0562\u0578\u0572\u057b \u057c\u0565\u056a\u056b\u0574\u056b\u0581", "Open help dialog": "\u0532\u0561\u0581\u0565\u056c \u0585\u0563\u0576\u0578\u0582\u0569\u0575\u0561\u0576 \u0565\u0580\u056f\u056d\u0578\u057d\u0578\u0582\u0569\u0575\u0578\u0582\u0576\u0568", "history": "\u054a\u0561\u057f\u0574\u0578\u0582\u0569\u0575\u0578\u0582\u0576", "styles": "\u0578\u0573\u0565\u0580\u0568", "formatting": "\u0579\u0561\u0583\u0561\u0576\u0577\u0578\u0582\u0574", "alignment": "\u0570\u0561\u057e\u0561\u057d\u0561\u0580\u0565\u0581\u0578\u0582\u0574", "indentation": "\u056d\u0561\u0575\u0569\u0578\u0581", "permanent pen": "\u0574\u0577\u057f\u0561\u056f\u0561\u0576 \u0563\u0580\u056b\u0579", "comments": "\u0574\u0565\u056f\u0576\u0561\u0562\u0561\u0576\u0578\u0582\u0569\u0575\u0578\u0582\u0576\u0576\u0565\u0580", "Format Painter": "\u0541\u0587\u0561\u0579\u0561\u0583\u056b \u0576\u056f\u0561\u0580\u056b\u0579", "Insert\/edit iframe": "\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u0584\/\u056d\u0574\u0562\u0561\u0563\u0580\u0565\u0584 iframe- \u0568", "Capitalization": "\u0544\u0565\u056e\u0561\u057f\u0561\u057c", "lowercase": "\u0553\u0578\u0584\u0580\u0561\u057f\u0561\u057c", "UPPERCASE": "\u0544\u0535\u053e\u0531\u054f\u0531\u054c", "Title Case": "\u054e\u0565\u0580\u0576\u0561\u0563\u056b\u0580 \u0533\u0578\u0580\u056e", "Permanent Pen Properties": "\u0544\u0577\u057f\u0561\u056f\u0561\u0576 \u0563\u0580\u056b\u0579\u056b \u0570\u0561\u057f\u056f\u0578\u0582\u0569\u0575\u0578\u0582\u0576\u0576\u0565\u0580\u0568", "Permanent pen properties...": "\u0544\u0577\u057f\u0561\u056f\u0561\u0576 \u0563\u0580\u056b\u0579\u056b \u0570\u0561\u057f\u056f\u0578\u0582\u0569\u0575\u0578\u0582\u0576\u0576\u0565\u0580\u0568\u2024\u2024\u2024", "Font": "\u054f\u0561\u057c\u0561\u057f\u0565\u057d\u0561\u056f", "Size": "\u0549\u0561\u0583\u057d", "More...": "\u0531\u057e\u0565\u056c\u056b\u0576\u2024\u2024\u2024", "Spellcheck Language": "\u0548\u0582\u0572\u0572\u0561\u0563\u0580\u0578\u0582\u0569\u0575\u0561\u0576 \u057d\u057f\u0578\u0582\u0563\u0574\u0561\u0576 \u056c\u0565\u0566\u0578\u0582", "Select...": "\u0538\u0576\u057f\u0580\u0565\u056c\u2024\u2024\u2024", "Preferences": "\u0546\u0561\u056d\u0561\u057a\u0561\u057f\u057e\u0578\u0582\u0569\u0575\u0578\u0582\u0576\u0576\u0565\u0580", "Yes": "\u0531\u0575\u0578", "No": "\u0548\u0579", "Keyboard Navigation": "\u054d\u057f\u0565\u0572\u0576\u0561\u0577\u0561\u0580\u056b \u0546\u0561\u057e\u056b\u0563\u0561\u0581\u056b\u0561", "Version": "\u054f\u0561\u0580\u0562\u0565\u0580\u0561\u056f", "Anchor": "\u053d\u0561\u0580\u056b\u057d\u056d", "Special character": "\u0540\u0561\u057f\u0578\u0582\u056f \u057d\u056b\u0574\u057e\u0578\u056c\u0576\u0565\u0580", "Code sample": "\u053f\u0578\u0564\u056b \u0585\u0580\u056b\u0576\u0561\u056f", "Color": "\u0533\u0578\u0582\u0575\u0576", "Emoticons": "\u054d\u0574\u0561\u0575\u056c\u056b\u056f\u0576\u0565\u0580", "Document properties": "\u0553\u0561\u057d\u057f\u0561\u0569\u0572\u0569\u056b \u0570\u0561\u057f\u056f\u0578\u0582\u0569\u0575\u0578\u0582\u0576\u0576\u0565\u0580\u0568", "Image": "\u0546\u056f\u0561\u0580", "Insert link": "\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c \u0570\u0572\u0578\u0582\u0574", "Target": "\u0539\u056b\u0580\u0561\u056d", "Link": "\u0540\u0572\u0578\u0582\u0574", "Poster": "\u054a\u0561\u057d\u057f\u0561\u057c", "Media": "\u0544\u0565\u0564\u056b\u0561", "Print": "\u054f\u057a\u0565\u056c", "Prev": "\u0546\u0561\u056d\u0578\u0580\u0564", "Find and replace": "\u0553\u0576\u057f\u0580\u0565\u056c \u0587 \u0583\u0578\u056d\u0561\u0580\u056b\u0576\u0565\u056c", "Whole words": "\u0532\u0561\u057c\u0565\u0580\u0568 \u0561\u0574\u0562\u0578\u0572\u057b\u0578\u0582\u0569\u0575\u0561\u0574\u0562", "Spellcheck": "\u0548\u0582\u0572\u0572\u0561\u0563\u0580\u0578\u0582\u0569\u0575\u0578\u0582\u0576", "Caption": "\u054e\u0565\u0580\u0576\u0561\u0563\u056b\u0580", "Insert template": "\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c \u0571\u0587\u0561\u0576\u0574\u0578\u0582\u0577" }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/tinymce/langs/id.js ================================================ tinymce.addI18n('id',{ "Redo": "Ulang", "Undo": "Batalkan", "Cut": "Potong", "Copy": "Salin", "Paste": "Rekat", "Select all": "Pilih semua", "New document": "Dokumen baru", "Ok": "Ok", "Cancel": "Batal", "Visual aids": "Alat bantu visual", "Bold": "Tebal", "Italic": "Miring", "Underline": "Garis bawah", "Strikethrough": "Coret", "Superscript": "Superskrip", "Subscript": "Subskrip", "Clear formatting": "Kosongkan format", "Align left": "Rata kiri", "Align center": "Rata tengah", "Align right": "Rata kanan", "Justify": "Rata penuh", "Bullet list": "Daftar bersimbol", "Numbered list": "Daftar bernomor", "Decrease indent": "Kurangi inden", "Increase indent": "Tambah inden", "Close": "Tutup", "Formats": "Format", "Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Browser anda tidak mendukung akses langsung ke papan klip. Silakan gunakan pintasan Ctrl+X\/C\/V dari keyboard.", "Headers": "Judul", "Header 1": "Judul 1", "Header 2": "Judul 2", "Header 3": "Judul 3", "Header 4": "Judul 4", "Header 5": "Judul 5", "Header 6": "Judul 6", "Headings": "Kepala", "Heading 1": "Kepala 1", "Heading 2": "Kepala 2", "Heading 3": "Kepala 3", "Heading 4": "Kepala 4", "Heading 5": "Kepala 5", "Heading 6": "Kepala 6", "Preformatted": "Praformat", "Div": "Div", "Pre": "Pre", "Code": "Kode", "Paragraph": "Paragraf", "Blockquote": "Kutipan", "Inline": "Baris", "Blocks": "Blok", "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Penempelan sekarang dalam modus teks biasa. Konten sekarang akan disisipkan sebagai teks biasa sampai Anda memadamkan pilihan ini.", "Fonts": "Huruf", "Font Sizes": "Ukuran Huruf", "Class": "Kelas", "Browse for an image": "Jelajahi gambar", "OR": "ATAU", "Drop an image here": "Simpan gambar di sini", "Upload": "Unggah", "Block": "Blok", "Align": "Sejajarkan", "Default": "Bawaan", "Circle": "Lingkaran", "Disc": "Cakram", "Square": "Kotak", "Lower Alpha": "Huruf Kecil", "Lower Greek": "Huruf Kecil Yunani", "Lower Roman": "Huruf Kecil Romawi", "Upper Alpha": "Huruf Besar", "Upper Roman": "Huruf Besar Romawi", "Anchor...": "Jangkar..", "Name": "Nama", "Id": "Id", "Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Id harus dimulai dengan huruf, dan hanya diikuti oleh huruf, angka, koma, titik, titik koma atau garis bawah.", "You have unsaved changes are you sure you want to navigate away?": "Anda memiliki perubahan yang belum disimpan, yakin ingin beralih ?", "Restore last draft": "Muat kembali draft sebelumnya", "Special character...": "Karakter khusus...", "Source code": "Kode sumber", "Insert\/Edit code sample": "Tambah\/Edit contoh kode", "Language": "Bahasa", "Code sample...": "Sampel kode...", "Color Picker": "Pemilih warna", "R": "M", "G": "H", "B": "B", "Left to right": "Kiri ke kanan", "Right to left": "Kanan ke kiri", "Emoticons...": "Emotikon...", "Metadata and Document Properties": "Metadata dan Properti Dokumen", "Title": "Judul", "Keywords": "Kata kunci", "Description": "Deskripsi", "Robots": "Robot", "Author": "Penulis", "Encoding": "Enkoding", "Fullscreen": "Layar penuh", "Action": "Tindakan", "Shortcut": "Pintasan", "Help": "Bantuan", "Address": "Alamat", "Focus to menubar": "Fokus ke menubar", "Focus to toolbar": "Fokus ke toolbar", "Focus to element path": "Fokus ke jalur elemen", "Focus to contextual toolbar": "Fokus ke toolbar kontekstual", "Insert link (if link plugin activated)": "Masukan link (jika plugin diaktifkan)", "Save (if save plugin activated)": "Simpan (jika plugin simpan diaktifkan)", "Find (if searchreplace plugin activated)": "Cari (jika plugin searchplace diaktifkan)", "Plugins installed ({0}):": "Plugin terpasang ({0})", "Premium plugins:": "Plugin premium:", "Learn more...": "Pelajari selengkapnya...", "You are using {0}": "Anda menggunakan {0}", "Plugins": "Plugin", "Handy Shortcuts": "Pintasan Praktis", "Horizontal line": "Garis horisontal", "Insert\/edit image": "Sisip\/sunting gambar", "Image description": "Deskripsi gambar", "Source": "Sumber", "Dimensions": "Dimensi", "Constrain proportions": "Samakan proporsi", "General": "Umum", "Advanced": "Lanjutan", "Style": "Gaya", "Vertical space": "Spasi vertikal", "Horizontal space": "Spasi horisontal", "Border": "Batas", "Insert image": "Sisipkan gambar", "Image...": "Gambar...", "Image list": "Daftar gambar", "Rotate counterclockwise": "Putar berlawananjarumjam", "Rotate clockwise": "Putar searahjarumjam", "Flip vertically": "Balik vertikal", "Flip horizontally": "Balik horisontal", "Edit image": "Sunting gambar", "Image options": "Opsi gambar", "Zoom in": "Perbesar", "Zoom out": "Perkecil", "Crop": "Krop", "Resize": "Ubah ukuran", "Orientation": "Orientasi", "Brightness": "Kecerahan", "Sharpen": "Ketajaman", "Contrast": "Kontras", "Color levels": "Tingakt warna", "Gamma": "Gamma", "Invert": "Kebalikan", "Apply": "Terapkan", "Back": "Kembali", "Insert date\/time": "Sisipkan tanggal\/waktu", "Date\/time": "Tanggal\/waktu", "Insert\/Edit Link": "Masukkan\/Edit Tautan", "Insert\/edit link": "Sisip\/sunting tautan", "Text to display": "Teks yang ditampilkan", "Url": "Tautan", "Open link in...": "Buka tautan dalam...", "Current window": "Jendela saat ini", "None": "Tidak ada", "New window": "Jendela baru", "Remove link": "Buang tautan", "Anchors": "Jangkar", "Link...": "Tautan...", "Paste or type a link": "Tempel atau ketik sebuah tautan", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "Tautan yang anda masukkan sepertinya adalah alamat email. Apakah Anda ingin menambahkan prefiks mailto: yang dibutuhkan?", "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "Tautan yang anda masukkan sepertinya adalah tautan eksternal. Apakah Anda ingin menambahkan prefiks http:\/\/ yang dibutuhkan?", "Link list": "Daftar tautan", "Insert video": "Sisipkan video", "Insert\/edit video": "Sisip\/sunting video", "Insert\/edit media": "Sisip\/sunting media", "Alternative source": "Sumber alternatif", "Alternative source URL": "URL Sumber alternatif", "Media poster (Image URL)": "Poster media (URL gambar)", "Paste your embed code below:": "Tempel kode yang diembed dibawah ini:", "Embed": "Embed", "Media...": "Media...", "Nonbreaking space": "Spasi", "Page break": "Baris baru", "Paste as text": "Tempel sebagai teks biasa", "Preview": "Pratinjau", "Print...": "Cetak...", "Save": "Simpan", "Find": "Cari", "Replace with": "Ganti dengan", "Replace": "Ganti", "Replace all": "Ganti semua", "Previous": "Sebelumnya", "Next": "Berikutnya", "Find and replace...": "Cari dan ganti...", "Could not find the specified string.": "Tidak dapat menemukan string yang dimaksud.", "Match case": "Samakan besar kecil huruf", "Find whole words only": "Cari hanya kata utuh", "Spell check": "Periksa ejaan", "Ignore": "Abaikan", "Ignore all": "Abaikan semua", "Finish": "Selesai", "Add to Dictionary": "Tambahkan ke kamus", "Insert table": "Sisipkan tabel", "Table properties": "Properti tabel", "Delete table": "Hapus tabel", "Cell": "Sel", "Row": "Baris", "Column": "Kolom", "Cell properties": "Properti sel", "Merge cells": "Gabung sel", "Split cell": "Bagi sel", "Insert row before": "Sisipkan baris sebelum", "Insert row after": "Sisipkan baris setelah", "Delete row": "Hapus baris", "Row properties": "Properti baris", "Cut row": "Penggal baris", "Copy row": "Salin baris", "Paste row before": "Tempel baris sebelum", "Paste row after": "Tempel baris setelah", "Insert column before": "Sisipkan kolom sebelum", "Insert column after": "Sisipkan kolom setelah", "Delete column": "Hapus kolom", "Cols": "Kolom", "Rows": "Baris", "Width": "Lebar", "Height": "Tinggi", "Cell spacing": "Spasi sel ", "Cell padding": "Lapisan sel", "Show caption": "Perlihatkan keterangan", "Left": "Kiri", "Center": "Tengah", "Right": "Kanan", "Cell type": "Tipe sel", "Scope": "Skup", "Alignment": "Penjajaran", "H Align": "Rata Samping", "V Align": "Rata Atas", "Top": "Atas", "Middle": "Tengah", "Bottom": "Bawah", "Header cell": "Judul sel", "Row group": "Kelompok baris", "Column group": "Kelompok kolom", "Row type": "Tipe baris", "Header": "Judul", "Body": "Body", "Footer": "Footer", "Border color": "Warna batas", "Insert template...": "Masukkan template...", "Templates": "Templat", "Template": "Templat", "Text color": "Warna teks", "Background color": "Warna latar", "Custom...": "Atur sendiri...", "Custom color": "Warna sendiri", "No color": "Tidak berwarna", "Remove color": "Hapus warna", "Table of Contents": "Daftar Isi", "Show blocks": "Tampilkan blok", "Show invisible characters": "Tampilkan karakter tak tampak", "Word count": "Hitungan kata", "Count": "Hitungan", "Document": "Dokumen", "Selection": "Pemilihan", "Words": "Kata", "Words: {0}": "Kata: {0}", "{0} words": "{0} kata", "File": "Berkas", "Edit": "Sunting", "Insert": "Sisip", "View": "Tampilan", "Format": "Format", "Table": "Tabel", "Tools": "Alat", "Powered by {0}": "Didukung oleh {0}", "Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Area teks kaya. Tekan ALT-F9 untuk menu. Tekan ALT-F10 untuk toolbar. Tekan ALT-0 untuk bantuan", "Image title": "Judul gambar", "Border width": "Lebar pinggiran", "Border style": "Gaya pinggiran", "Error": "Kesalahan", "Warn": "Peringatkan", "Valid": "Valid", "To open the popup, press Shift+Enter": "Untuk membuka popup, tekan Shift+Enter", "Rich Text Area. Press ALT-0 for help.": "Area Teks Kaya. Tekan ALT-0 untuk bantuan.", "System Font": "Huruf Sistem", "Failed to upload image: {0}": "Gagal mengunggah gambar: {0}", "Failed to load plugin: {0} from url {1}": "Gagal memuat plugin: {0} dari url {1}", "Failed to load plugin url: {0}": "Gagal memuat url plugin: {0}", "Failed to initialize plugin: {0}": "Gagal memulai plugin: {0}", "example": "contoh", "Search": "Cari", "All": "Semua", "Currency": "Mata Uang", "Text": "Teks", "Quotations": "Kutipan", "Mathematical": "Matematis", "Extended Latin": "Latin Diperluas", "Symbols": "Simbol", "Arrows": "Panah", "User Defined": "Ditentukan Pengguna", "dollar sign": "tanda dolar", "currency sign": "tanda mata uang", "euro-currency sign": "tanda mata uang eropa", "colon sign": "tanda titik dua", "cruzeiro sign": "tanda cruzeiro", "french franc sign": "tanda franc prancis", "lira sign": "tanda lira", "mill sign": "tanda mill", "naira sign": "tanda naira", "peseta sign": "tanda peseta", "rupee sign": "tanda rupee", "won sign": "tanda won", "new sheqel sign": "tanda sheqel baru", "dong sign": "tanda dong", "kip sign": "tanda kip", "tugrik sign": "tanda tugrik", "drachma sign": "tanda drachma", "german penny symbol": "simbol penny jerman", "peso sign": "tanda peso", "guarani sign": "tanda guarani", "austral sign": "tanda austral", "hryvnia sign": "tanda hryvnia", "cedi sign": "tanda cedi", "livre tournois sign": "tanda livre tournois", "spesmilo sign": "tanda spesmilo", "tenge sign": "tanda tenge", "indian rupee sign": "tanda rupee india", "turkish lira sign": "tanda lira turki", "nordic mark sign": "tanda mark nordik", "manat sign": "tanda manat", "ruble sign": "tanda ruble", "yen character": "karakter yen", "yuan character": "karakter yuan", "yuan character, in hong kong and taiwan": "karakter yuan, di hong kong dan taiwan", "yen\/yuan character variant one": "varian satu karakter yen\/yuan", "Loading emoticons...": "Memuat emotikon...", "Could not load emoticons": "Tidak dapat memuat emotikon", "People": "Orang", "Animals and Nature": "Hewan dan Alam", "Food and Drink": "Makanan dan Minuman", "Activity": "Aktivitas", "Travel and Places": "Perjalanan dan Lokasi", "Objects": "Objek", "Flags": "Bendera", "Characters": "Karakter", "Characters (no spaces)": "Karakter (tanpa spasi)", "{0} characters": "{0} karakter", "Error: Form submit field collision.": "Kesalahan: Benturan bidang pengiriman bentuk.", "Error: No form element found.": "Kesalahan: tidak ditemukan elemen bentuk.", "Update": "Perbarui", "Color swatch": "Contoh warna", "Turquoise": "Turquoise", "Green": "Hijau", "Blue": "Biru", "Purple": "Ungu", "Navy Blue": "Biru Navy", "Dark Turquoise": "Turquoise Gelap", "Dark Green": "Hijau Gelap", "Medium Blue": "Biru Medium", "Medium Purple": "Ungu Medium", "Midnight Blue": "Biru Midnight", "Yellow": "Kuning", "Orange": "Jingga", "Red": "Merah", "Light Gray": "Abu Muda", "Gray": "Abu-abu", "Dark Yellow": "Kuning Gelap", "Dark Orange": "Jingga Gelap", "Dark Red": "Merah Gelap", "Medium Gray": "Abu Medium", "Dark Gray": "Abu Gelap", "Light Green": "Hijau Muda", "Light Yellow": "Kuning Muda", "Light Red": "Merah Muda", "Light Purple": "Ungu Muda", "Light Blue": "Biru Muda", "Dark Purple": "Ungu Gelap", "Dark Blue": "Biru Gelap", "Black": "Hitam", "White": "Putih", "Switch to or from fullscreen mode": "Alihkan ke atau dari mode layar penuh", "Open help dialog": "Buka dialog bantuan", "history": "riwayat", "styles": "gaya", "formatting": "pemformatan", "alignment": "penyejajaran", "indentation": "indentasi", "permanent pen": "pena permanen", "comments": "komentar", "Format Painter": "Format Pelukis", "Insert\/edit iframe": "Masukkan\/edit iframe", "Capitalization": "Kapitalisasi", "lowercase": "huruf kecil", "UPPERCASE": "HURUF BESAR", "Title Case": "Huruf Judul", "Permanent Pen Properties": "Properti Pena Permanen", "Permanent pen properties...": "Properti pena permanen...", "Font": "Huruf", "Size": "Ukuran", "More...": "Lainnya...", "Spellcheck Language": "Periksa Ejaan Bahasa", "Select...": "Pilih...", "Preferences": "Preferensi", "Yes": "Ya", "No": "Tidak", "Keyboard Navigation": "Navigasi Keyboard", "Version": "Versi", "Anchor": "Jangkar", "Special character": "Spesial karakter", "Code sample": "Contoh kode", "Color": "Warna", "Emoticons": "Emotikon", "Document properties": "Properti dokumwn", "Image": "Gambar", "Insert link": "Sisipkan tautan", "Target": "Jendela tujuan", "Link": "Tautan", "Poster": "Penulis", "Media": "Media", "Print": "Cetak", "Prev": "Sebelumnya", "Find and replace": "Cari dan ganti", "Whole words": "Semua kata", "Spellcheck": "Periksa ejaan", "Caption": "Caption", "Insert template": "Sisipkan templat" }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/tinymce/langs/it.js ================================================ tinymce.addI18n('it',{ "Redo": "Ripristina", "Undo": "Annulla", "Cut": "Taglia", "Copy": "Copia", "Paste": "Incolla", "Select all": "Seleziona tutto", "New document": "Nuovo documento", "Ok": "OK", "Cancel": "Annulla", "Visual aids": "Aiuti visivi", "Bold": "Grassetto", "Italic": "Corsivo", "Underline": "Sottolineato", "Strikethrough": "Barrato", "Superscript": "Apice", "Subscript": "Pedice", "Clear formatting": "Cancella la formattazione", "Align left": "Allinea a sinistra", "Align center": "Allinea al centro", "Align right": "Allinea a destra", "Justify": "Giustifica", "Bullet list": "Elenco puntato", "Numbered list": "Elenco numerato", "Decrease indent": "Riduci rientro", "Increase indent": "Aumenta rientro", "Close": "Chiudi", "Formats": "Formati", "Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Il browser non supporta l'accesso diretto alla cartella degli appunti. Usare i tasti di scelta rapida Ctrl+X\/C\/V.", "Headers": "Intestazioni", "Header 1": "Intestazione 1", "Header 2": "Intestazione 2", "Header 3": "Intestazione 3", "Header 4": "Intestazione 4", "Header 5": "Intestazione 5", "Header 6": "Intestazione 6", "Headings": "Titoli", "Heading 1": "Titolo 1", "Heading 2": "Titolo 2", "Heading 3": "Titolo 3", "Heading 4": "Titolo 4", "Heading 5": "Titolo 5", "Heading 6": "Titolo 6", "Preformatted": "Preformattato", "Div": "Div", "Pre": "Pre", "Code": "Codice", "Paragraph": "Paragrafo", "Blockquote": "Blockquote", "Inline": "In linea", "Blocks": "Blocchi", "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Incolla \u00e8 in modalit\u00e0 testo normale. I contenuti sono incollati come testo normale se non disattivi l'opzione.", "Fonts": "Caratteri", "Font Sizes": "Dimensioni caratteri", "Class": "Classe", "Browse for an image": "Cerca un'immagine", "OR": "OPPURE", "Drop an image here": "Rilasciare un'immagine qui", "Upload": "Carica", "Block": "Blocco", "Align": "Allinea", "Default": "Default", "Circle": "Cerchio", "Disc": "Disco", "Square": "Quadrato", "Lower Alpha": "Alpha Minore", "Lower Greek": "Greek Minore", "Lower Roman": "Roman Minore", "Upper Alpha": "Alpha Superiore", "Upper Roman": "Roman Superiore", "Anchor...": "Ancoraggio...", "Name": "Nome", "Id": "Id", "Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "L'id dovrebbe cominciare con una lettera, seguito solo da lettere, numeri, linee, punti, virgole.", "You have unsaved changes are you sure you want to navigate away?": "Non hai salvato delle modifiche, sei sicuro di andartene?", "Restore last draft": "Ripristina l'ultima bozza.", "Special character...": "Carattere speciale...", "Source code": "Codice Sorgente", "Insert\/Edit code sample": "Inserisci\/Modifica esempio di codice", "Language": "Lingua", "Code sample...": "Esempio di codice...", "Color Picker": "Selezione colori", "R": "R", "G": "G", "B": "B", "Left to right": "Da Sinistra a Destra", "Right to left": "Da Destra a Sinistra", "Emoticons...": "Emoticon...", "Metadata and Document Properties": "Metadata e propriet\u00e0 del documento", "Title": "Titolo", "Keywords": "Parola Chiave", "Description": "Descrizione", "Robots": "Robot", "Author": "Autore", "Encoding": "Codifica", "Fullscreen": "Schermo Intero", "Action": "Azione", "Shortcut": "Scorciatoia", "Help": "Aiuto", "Address": "Indirizzo", "Focus to menubar": "Focus sulla barra del menu", "Focus to toolbar": "Focus sulla barra degli strumenti", "Focus to element path": "Focus sul percorso dell'elemento", "Focus to contextual toolbar": "Focus sulla barra degli strumenti contestuale", "Insert link (if link plugin activated)": "Inserisci link (se il plugin link \u00e8 attivato)", "Save (if save plugin activated)": "Salva (se il plugin save \u00e8 attivato)", "Find (if searchreplace plugin activated)": "Trova (se il plugin searchreplace \u00e8 attivato)", "Plugins installed ({0}):": "Plugin installati ({0}):", "Premium plugins:": "Plugin Premium:", "Learn more...": "Per saperne di pi\u00f9...", "You are using {0}": "Stai usando {0}", "Plugins": "Plugin", "Handy Shortcuts": "Scorciatoia pratica", "Horizontal line": "Linea Orizzontale", "Insert\/edit image": "Aggiungi\/Modifica Immagine", "Image description": "Descrizione Immagine", "Source": "Fonte", "Dimensions": "Dimenzioni", "Constrain proportions": "Mantieni Proporzioni", "General": "Generale", "Advanced": "Avanzato", "Style": "Stile", "Vertical space": "Spazio Verticale", "Horizontal space": "Spazio Orizzontale", "Border": "Bordo", "Insert image": "Inserisci immagine", "Image...": "Immagine...", "Image list": "Elenco immagini", "Rotate counterclockwise": "Ruota in senso antiorario", "Rotate clockwise": "Ruota in senso orario", "Flip vertically": "Rifletti verticalmente", "Flip horizontally": "Rifletti orizzontalmente", "Edit image": "Modifica immagine", "Image options": "Opzioni immagine", "Zoom in": "Ingrandisci", "Zoom out": "Rimpicciolisci", "Crop": "Taglia", "Resize": "Ridimensiona", "Orientation": "Orientamento", "Brightness": "Luminosit\u00e0", "Sharpen": "Contrasta", "Contrast": "Contrasto", "Color levels": "Livelli colore", "Gamma": "Gamma", "Invert": "Inverti", "Apply": "Applica", "Back": "Indietro", "Insert date\/time": "Inserisci Data\/Ora", "Date\/time": "Data\/Ora", "Insert\/Edit Link": "Inserisci\/modifica collegamento", "Insert\/edit link": "Inserisci\/Modifica Link", "Text to display": "Testo da Visualizzare", "Url": "Url", "Open link in...": "Apri collegamento in...", "Current window": "Finestra corrente", "None": "No", "New window": "Nuova Finestra", "Remove link": "Rimuovi link", "Anchors": "Anchors", "Link...": "Collegamento...", "Paste or type a link": "Incolla o digita un collegamento", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "L'URL inserito sembra essere un indirizzo email. Vuoi aggiungere il prefisso necessario mailto:?", "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "L'URL inserito sembra essere un collegamento esterno. Vuoi aggiungere il prefisso necessario http:\/\/?", "Link list": "Elenco link", "Insert video": "Inserisci Video", "Insert\/edit video": "Inserisci\/Modifica Video", "Insert\/edit media": "Inserisci\/Modifica Media", "Alternative source": "Alternativo", "Alternative source URL": "URL sorgente alternativa", "Media poster (Image URL)": "Poster dell'oggetto multimediale (URL dell'immagine)", "Paste your embed code below:": "Incolla il codice d'incorporamento qui:", "Embed": "Incorporare", "Media...": "Oggetto multimediale...", "Nonbreaking space": "Spazio unificatore", "Page break": "Interruzione di pagina", "Paste as text": "incolla come testo", "Preview": "Anteprima", "Print...": "Stampa...", "Save": "Salva", "Find": "Trova", "Replace with": "Sostituisci Con", "Replace": "Sostituisci", "Replace all": "Sostituisci Tutto", "Previous": "Indietro", "Next": "Successivo", "Find and replace...": "Trova e sostituisci...", "Could not find the specified string.": "Impossibile trovare la parola specifica.", "Match case": "Maiuscole\/Minuscole ", "Find whole words only": "Trova solo parole intere", "Spell check": "Controllo ortografia", "Ignore": "Ignora", "Ignore all": "Ignora Tutto", "Finish": "Termina", "Add to Dictionary": "Aggiungi al Dizionario", "Insert table": "Inserisci Tabella", "Table properties": "Propiet\u00e0 della Tabella", "Delete table": "Cancella Tabella", "Cell": "Cella", "Row": "Riga", "Column": "Colonna", "Cell properties": "Propiet\u00e0 della Cella", "Merge cells": "Unisci Cella", "Split cell": "Dividi Cella", "Insert row before": "Inserisci una Riga Prima", "Insert row after": "Inserisci una Riga Dopo", "Delete row": "Cancella Riga", "Row properties": "Propriet\u00e0 della Riga", "Cut row": "Taglia Riga", "Copy row": "Copia Riga", "Paste row before": "Incolla una Riga Prima", "Paste row after": "Incolla una Riga Dopo", "Insert column before": "Inserisci una Colonna Prima", "Insert column after": "Inserisci una Colonna Dopo", "Delete column": "Cancella Colonna", "Cols": "Colonne", "Rows": "Righe", "Width": "Larghezza", "Height": "Altezza", "Cell spacing": "Spaziatura della Cella", "Cell padding": "Padding della Cella", "Show caption": "Mostra didascalia", "Left": "Sinistra", "Center": "Centro", "Right": "Destra", "Cell type": "Tipo di Cella", "Scope": "Campo", "Alignment": "Allineamento", "H Align": "Allineamento H", "V Align": "Allineamento V", "Top": "In alto", "Middle": "In mezzo", "Bottom": "In fondo", "Header cell": "cella d'intestazione", "Row group": "Gruppo di Righe", "Column group": "Gruppo di Colonne", "Row type": "Tipo di Riga", "Header": "Header", "Body": "Body", "Footer": "Footer", "Border color": "Colore bordo", "Insert template...": "Inserisci modello...", "Templates": "Template", "Template": "Modello", "Text color": "Colore Testo", "Background color": "Colore Background", "Custom...": "Personalizzato...", "Custom color": "Colore personalizzato", "No color": "Nessun colore", "Remove color": "Rimuovi colore", "Table of Contents": "Tabella dei contenuti", "Show blocks": "Mostra Blocchi", "Show invisible characters": "Mostra Caratteri Invisibili", "Word count": "Conteggio parole", "Count": "Conteggio", "Document": "Documento", "Selection": "Selezione", "Words": "Parole", "Words: {0}": "Parole: {0}", "{0} words": "{0} parole", "File": "File", "Edit": "Modifica", "Insert": "Inserisci", "View": "Visualiza", "Format": "Formato", "Table": "Tabella", "Tools": "Strumenti", "Powered by {0}": "Fornito da {0}", "Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Rich Text Area. Premi ALT-F9 per il men\u00f9. Premi ALT-F10 per la barra degli strumenti. Premi ALT-0 per l'aiuto.", "Image title": "Titolo immagine", "Border width": "Larghezza del bordo", "Border style": "Stile del bordo", "Error": "Errore", "Warn": "Avviso", "Valid": "Valido", "To open the popup, press Shift+Enter": "Per aprire il popup, premere Shift+Invio", "Rich Text Area. Press ALT-0 for help.": "Area di testo RTF. Premere ALT-0 per la guida.", "System Font": "Carattere di sistema", "Failed to upload image: {0}": "Caricamento immagine fallito: {0}", "Failed to load plugin: {0} from url {1}": "Caricamento plugin fallito: {0} dall'URL {1}", "Failed to load plugin url: {0}": "Caricamento URL plugin fallito: {0}", "Failed to initialize plugin: {0}": "Inizializzazione plugin fallita: {0}", "example": "esempio", "Search": "Cerca", "All": "Tutto", "Currency": "Valuta", "Text": "Testo", "Quotations": "Citazioni", "Mathematical": "Caratteri matematici", "Extended Latin": "Latino esteso", "Symbols": "Simboli", "Arrows": "Frecce", "User Defined": "Definito dall'utente", "dollar sign": "simbolo del dollaro", "currency sign": "simbolo di valuta", "euro-currency sign": "simbolo dell'euro", "colon sign": "simbolo del col\u00f3n", "cruzeiro sign": "simbolo del cruzeiro", "french franc sign": "simbolo del franco francese", "lira sign": "simbolo della lira", "mill sign": "simbolo del mill", "naira sign": "simbolo della naira", "peseta sign": "simbolo della peseta", "rupee sign": "simbolo della rup\u00eca", "won sign": "simbolo del won", "new sheqel sign": "simbolo del nuovo shekel", "dong sign": "simbolo del dong", "kip sign": "simbolo del kip", "tugrik sign": "simbolo del tugrik", "drachma sign": "simbolo della dracma", "german penny symbol": "simbolo del pfennig tedesco", "peso sign": "simbolo del peso", "guarani sign": "simbolo del guaran\u00ec", "austral sign": "simbolo dell'austral", "hryvnia sign": "simbolo della hryvnia", "cedi sign": "simbolo del cedi", "livre tournois sign": "simbolo della lira di Tours", "spesmilo sign": "simbolo dello spesmilo", "tenge sign": "simbolo del tenge", "indian rupee sign": "simbolo della rup\u00eca indiana", "turkish lira sign": "simbolo della lira turca", "nordic mark sign": "simbolo del marco nordico", "manat sign": "simbolo del manat", "ruble sign": "simbolo del rublo", "yen character": "simbolo dello yen", "yuan character": "simbolo dello yuan", "yuan character, in hong kong and taiwan": "simbolo dello yuan, Hong Kong e Taiwan", "yen\/yuan character variant one": "simbolo yen\/yuan variante uno", "Loading emoticons...": "Caricamento emoticon in corso", "Could not load emoticons": "Impossibile caricare emoticon", "People": "Persone", "Animals and Nature": "Animali e natura", "Food and Drink": "Cibi e bevande", "Activity": "Attivit\u00e0", "Travel and Places": "Viaggi e luoghi", "Objects": "Oggetti", "Flags": "Bandiere", "Characters": "Caratteri", "Characters (no spaces)": "Caratteri (senza spazi)", "{0} characters": "{0} caratteri", "Error: Form submit field collision.": "Errore: Conflitto di campi nel modulo inviato.", "Error: No form element found.": "Errore: Nessun elemento di modulo trovato.", "Update": "Aggiorna", "Color swatch": "Campione di colore", "Turquoise": "Turchese", "Green": "Verde", "Blue": "Blu", "Purple": "Viola", "Navy Blue": "Blu scuro", "Dark Turquoise": "Turchese scuro", "Dark Green": "Verde scuro", "Medium Blue": "Blu medio", "Medium Purple": "Viola medio", "Midnight Blue": "Blu notte", "Yellow": "Giallo", "Orange": "Arancio", "Red": "Rosso", "Light Gray": "Grigio chiaro", "Gray": "Grigio", "Dark Yellow": "Giallo scuro", "Dark Orange": "Arancio scuro", "Dark Red": "Rosso scuro", "Medium Gray": "Grigio medio", "Dark Gray": "Grigio scuro", "Light Green": "Verde chiaro", "Light Yellow": "Giallo chiaro", "Light Red": "Rosso chiaro", "Light Purple": "Viola chiaro", "Light Blue": "Azzurro", "Dark Purple": "Viola scuro", "Dark Blue": "Blu scuro", "Black": "Nero", "White": "Bianco", "Switch to or from fullscreen mode": "Attiva\/disattiva la modalit\u00e0 schermo intero", "Open help dialog": "Apri la finestra di aiuto", "history": "cronologia", "styles": "stili", "formatting": "formattazione", "alignment": "allineamento", "indentation": "indentazione", "permanent pen": "penna indelebile", "comments": "commenti", "Format Painter": "Copia formattazione", "Insert\/edit iframe": "Inserisci\/modifica iframe", "Capitalization": "Maiuscole\/minuscole", "lowercase": "minuscole", "UPPERCASE": "MAIUSCOLE", "Title Case": "Iniziali Maiuscole", "Permanent Pen Properties": "Propriet\u00e0 penna indelebile", "Permanent pen properties...": "Propriet\u00e0 penna indelebile...", "Font": "Carattere", "Size": "Dimensione carattere", "More...": "Altro\u2026", "Spellcheck Language": "Lingua controllo ortografico", "Select...": "Seleziona...", "Preferences": "Preferenze", "Yes": "S\u00ec", "No": "No", "Keyboard Navigation": "Navigazione tramite tastiera", "Version": "Versione", "Anchor": "Fissa", "Special character": "Carattere Speciale", "Code sample": "Esempio di codice", "Color": "Colore", "Emoticons": "Emoction", "Document properties": "Propriet\u00e0 Documento", "Image": "Immagine", "Insert link": "Inserisci il Link", "Target": "Target", "Link": "Collegamento", "Poster": "Anteprima", "Media": "Media", "Print": "Stampa", "Prev": "Precedente", "Find and replace": "Trova e Sostituisci", "Whole words": "Parole Sbagliate", "Spellcheck": "Controllo ortografico", "Caption": "Didascalia", "Insert template": "Inserisci Template" }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/tinymce/langs/it_IT.js ================================================ tinymce.addI18n('it_IT',{ "Redo": "Ripristina", "Undo": "Annulla", "Cut": "Taglia", "Copy": "Copia", "Paste": "Incolla", "Select all": "Seleziona tutto", "New document": "Nuovo documento", "Ok": "OK", "Cancel": "Annulla", "Visual aids": "Aiuti visivi", "Bold": "Grassetto", "Italic": "Corsivo", "Underline": "Sottolineato", "Strikethrough": "Barrato", "Superscript": "Apice", "Subscript": "Pedice", "Clear formatting": "Cancella la formattazione", "Align left": "Allinea a sinistra", "Align center": "Allinea al centro", "Align right": "Allinea a destra", "Justify": "Giustifica", "Bullet list": "Elenco puntato", "Numbered list": "Elenco numerato", "Decrease indent": "Riduci rientro", "Increase indent": "Aumenta rientro", "Close": "Chiudi", "Formats": "Formati", "Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Il browser non supporta l'accesso diretto alla cartella degli appunti. Usare i tasti di scelta rapida Ctrl+X\/C\/V.", "Headers": "Intestazioni", "Header 1": "Intestazione 1", "Header 2": "Intestazione 2", "Header 3": "Intestazione 3", "Header 4": "Intestazione 4", "Header 5": "Intestazione 5", "Header 6": "Intestazione 6", "Headings": "Titoli", "Heading 1": "Titolo 1", "Heading 2": "Titolo 2", "Heading 3": "Titolo 3", "Heading 4": "Titolo 4", "Heading 5": "Titolo 5", "Heading 6": "Titolo 6", "Preformatted": "Preformattato", "Div": "Div", "Pre": "Pre", "Code": "Codice", "Paragraph": "Paragrafo", "Blockquote": "Blockquote", "Inline": "In linea", "Blocks": "Blocchi", "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Incolla \u00e8 in modalit\u00e0 testo normale. I contenuti saranno incollati come testo normale se non viene disattivata questa opzione.", "Fonts": "Caratteri", "Font Sizes": "Dimensioni caratteri", "Class": "Classe", "Browse for an image": "Cerca un'immagine", "OR": "OPPURE", "Drop an image here": "Rilasciare un'immagine qui", "Upload": "Carica", "Block": "Blocco", "Align": "Allinea", "Default": "Predefinito", "Circle": "Circolo", "Disc": "Disco", "Square": "Quadrato", "Lower Alpha": "Alfabetico minuscolo", "Lower Greek": "Greco minuscolo", "Lower Roman": "Romano minuscolo", "Upper Alpha": "Alfabetico maiuscolo", "Upper Roman": "Romano maiuscolo", "Anchor...": "Ancoraggio...", "Name": "Nome", "Id": "ID", "Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "L'ID dovrebbe cominciare con una lettera, seguita unicamente da lettere, numeri, linee, punti, due punti o caratteri di sottolineatura.", "You have unsaved changes are you sure you want to navigate away?": "Ci sono modifiche non salvate, si \u00e8 sicuro di volere uscire?", "Restore last draft": "Ripristina l'ultima bozza", "Special characters...": "Caratteri speciali...", "Source code": "Codice sorgente", "Insert\/Edit code sample": "Inserisci\/modifica esempio di codice", "Language": "Lingua", "Code sample...": "Esempio di codice...", "Color Picker": "Selezione colori", "R": "R", "G": "G", "B": "B", "Left to right": "Da sinistra a destra", "Right to left": "Da destra a sinistra", "Emoticons...": "Emoticon...", "Metadata and Document Properties": "Metadata e propriet\u00e0 del documento", "Title": "Titolo", "Keywords": "Parole chiave", "Description": "Descrizione", "Robots": "Robot", "Author": "Autore", "Encoding": "Codifica", "Fullscreen": "A tutto schermo", "Action": "Azione", "Shortcut": "Collegamento", "Help": "Guida", "Address": "Indirizzo", "Focus to menubar": "Imposta stato attivo per la barra dei menu", "Focus to toolbar": "Imposta stato attivo per la barra degli strumenti", "Focus to element path": "Imposta stato attivo per il percorso dell'elemento", "Focus to contextual toolbar": "Imposta stato attivo per la barra degli strumenti contestuale", "Insert link (if link plugin activated)": "Inserisci un collegamento (se \u00e8 attivato l'apposito plugin)", "Save (if save plugin activated)": "Salva (se \u00e8 attivato l'apposito plugin)", "Find (if searchreplace plugin activated)": "Trova (se \u00e8 attivato l'apposito plugin)", "Plugins installed ({0}):": "Plugin installati ({0}):", "Premium plugins:": "Plugin Premium:", "Learn more...": "Maggiori informazioni...", "You are using {0}": "Si sta utilizzando {0}", "Plugins": "Plugin", "Handy Shortcuts": "Scorciatoie utili", "Horizontal line": "Linea orizzontale", "Insert\/edit image": "Inserisci\/modifica immagine", "Image description": "Descrizione immagine", "Source": "Fonte", "Dimensions": "Dimensioni", "Constrain proportions": "Mantieni proporzioni", "General": "Generali", "Advanced": "Avanzate", "Style": "Stile", "Vertical space": "Spazio verticale", "Horizontal space": "Spazio orizzontale", "Border": "Bordo", "Insert image": "Inserisci immagine", "Image...": "Immagine...", "Image list": "Elenco immagini", "Rotate counterclockwise": "Ruota in senso antiorario", "Rotate clockwise": "Ruota in senso orario", "Flip vertically": "Rifletti verticalmente", "Flip horizontally": "Rifletti orizzontalmente", "Edit image": "Modifica immagine", "Image options": "Opzioni immagine", "Zoom in": "Ingrandisci", "Zoom out": "Zoom indietro", "Crop": "Ritaglia", "Resize": "Ridimensiona", "Orientation": "Orientamento", "Brightness": "Luminosit\u00e0", "Sharpen": "Nitidezza", "Contrast": "Contrasto", "Color levels": "Livelli di colore", "Gamma": "Gamma", "Invert": "Inverti", "Apply": "Applica", "Back": "Indietro", "Insert date\/time": "Inserisci data\/ora", "Date\/time": "Data\/ora", "Insert\/Edit Link": "Inserisci\/modifica collegamento", "Insert\/edit link": "Inserisci\/modifica collegamento", "Text to display": "Testo da visualizzare", "Url": "URL", "Open link in...": "Apri collegamento in...", "Current window": "Finestra corrente", "None": "Nessuno", "New window": "Nuova finestra", "Remove link": "Rimuovi collegamento", "Anchors": "Ancoraggi", "Link...": "Collegamento...", "Paste or type a link": "Incolla o digita un collegamento", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "L'URL inserito sembra essere un indirizzo email. Si vuole aggiungere il necessario prefisso mailto:?", "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "L'URL inserito sembra essere un collegamento esterno. Si vuole aggiungere il necessario prefisso http:\/\/?", "Link list": "Elenco collegamenti", "Insert video": "Inserisci video", "Insert\/edit video": "Inserisci\/modifica video", "Insert\/edit media": "Inserisci\/modifica oggetti multimediali", "Alternative source": "Sorgente alternativa", "Alternative source URL": "URL sorgente alternativa", "Media poster (Image URL)": "Poster dell'oggetto multimediale (URL dell'immagine)", "Paste your embed code below:": "Incolla il codice d'incorporamento di seguito:", "Embed": "Incorpora", "Media...": "Oggetto multimediale...", "Nonbreaking space": "Spazio indivisibile", "Page break": "Interruzione di pagina", "Paste as text": "Incolla senza formattazioni", "Preview": "Anteprima", "Print...": "Stampa...", "Save": "Salva", "Find": "Trova", "Replace with": "Sostituisci con", "Replace": "Sostituisci", "Replace all": "Sostituisci tutto", "Previous": "Indietro", "Next": "Avanti", "Find and replace...": "Trova e sostituisci...", "Could not find the specified string.": "Impossibile trovare la stringa specificata.", "Match case": "Maiuscole\/minuscole", "Find whole words only": "Trova solo parole intere", "Spell check": "Controllo ortografia", "Ignore": "Ignora", "Ignore all": "Ignora tutto", "Finish": "Fine", "Add to Dictionary": "Aggiungi al dizionario", "Insert table": "Inserisci tabella", "Table properties": "Propriet\u00e0 della tabella", "Delete table": "Elimina tabella", "Cell": "Cella", "Row": "Riga", "Column": "Colonna", "Cell properties": "Propriet\u00e0 cella", "Merge cells": "Unisci le celle", "Split cell": "Dividi la cella", "Insert row before": "Inserisci riga prima", "Insert row after": "Inserisci riga dopo", "Delete row": "Elimina riga", "Row properties": "Propriet\u00e0 della riga", "Cut row": "Taglia riga", "Copy row": "Copia riga", "Paste row before": "Incolla riga prima", "Paste row after": "Incolla riga dopo", "Insert column before": "Inserisci colonna prima", "Insert column after": "Inserisci colonna dopo", "Delete column": "Elimina colonna", "Cols": "Colonne", "Rows": "Righe", "Width": "Larghezza", "Height": "Altezza", "Cell spacing": "Spaziatura tra celle", "Cell padding": "Spaziatura interna celle", "Show caption": "Mostra didascalia", "Left": "Sinistra", "Center": "Centro", "Right": "Destra", "Cell type": "Tipo di cella", "Scope": "Ambito", "Alignment": "Allineamento", "H Align": "Allineamento H", "V Align": "Allineamento V", "Top": "In alto", "Middle": "Centrato", "Bottom": "In basso", "Header cell": "Cella d'intestazione", "Row group": "Gruppo di righe", "Column group": "Gruppo di colonne", "Row type": "Tipo di riga", "Header": "Intestazione", "Body": "Corpo", "Footer": "Pi\u00e8 di pagina", "Border color": "Colore del bordo", "Insert template...": "Inserisci modello...", "Templates": "Modelli", "Template": "Modello", "Text color": "Colore testo", "Background color": "Colore dello sfondo", "Custom...": "Personalizzato...", "Custom color": "Colore personalizzato", "No color": "Nessun colore", "Remove color": "Rimuovi colore", "Table of Contents": "Sommario", "Show blocks": "Mostra blocchi", "Show invisible characters": "Mostra caratteri invisibili", "Word count": "Conteggio parole", "Words: {0}": "Parole: {0}", "{0} words": "{0} parole", "File": "File", "Edit": "Modifica", "Insert": "Inserisci", "View": "Visualizza", "Format": "Formato", "Table": "Tabella", "Tools": "Strumenti", "Powered by {0}": "Con tecnologia {0}", "Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Area di testo RTF. Premere ALT-F9 per il menu. Premere ALT-F10 per la barra degli strumenti. Premere ALT-0 per la guida.", "Image title": "Titolo immagine", "Border width": "Larghezza del bordo", "Border style": "Stile del bordo", "Error": "Errore", "Warn": "Avviso", "Valid": "Valido", "To open the popup, press Shift+Enter": "Per aprire il popup, premere Shift+Invio", "Rich Text Area. Press ALT-0 for help.": "Area di testo RTF. Premere ALT-0 per la guida.", "System Font": "Carattere di sistema", "Failed to upload image: {0}": "Caricamento immagine fallito: {0}", "Failed to load plugin: {0} from url {1}": "Caricamento plugin fallito: {0} dall'URL {1}", "Failed to load plugin url: {0}": "Caricamento URL plugin fallito: {0}", "Failed to initialize plugin: {0}": "Inizializzazione plugin fallita: {0}", "example": "esempio", "Search": "Cerca", "All": "Tutto", "Currency": "Valuta", "Text": "Testo", "Quotations": "Citazioni", "Mathematical": "Caratteri matematici", "Extended Latin": "Latino esteso", "Symbols": "Simboli", "Arrows": "Frecce", "User Defined": "Definito dall'utente", "dollar sign": "simbolo del dollaro", "currency sign": "simbolo di valuta", "euro-currency sign": "simbolo dell'euro", "colon sign": "simbolo del col\u00f3n", "cruzeiro sign": "simbolo del cruzeiro", "french franc sign": "simbolo del franco francese", "lira sign": "simbolo della lira", "mill sign": "simbolo del mill", "naira sign": "simbolo della naira", "peseta sign": "simbolo della peseta", "rupee sign": "simbolo della rup\u00eca", "won sign": "simbolo del won", "new sheqel sign": "simbolo del nuovo shekel", "dong sign": "simbolo del dong", "kip sign": "simbolo del kip", "tugrik sign": "simbolo del tugrik", "drachma sign": "simbolo della dracma", "german penny symbol": "simbolo del pfennig tedesco", "peso sign": "simbolo del peso", "guarani sign": "simbolo del guaran\u00ec", "austral sign": "simbolo dell'austral", "hryvnia sign": "simbolo della hryvnia", "cedi sign": "simbolo del cedi", "livre tournois sign": "simbolo della lira di Tours", "spesmilo sign": "simbolo dello spesmilo", "tenge sign": "simbolo del tenge", "indian rupee sign": "simbolo della rup\u00eca indiana", "turkish lira sign": "simbolo della lira turca", "nordic mark sign": "simbolo del marco nordico", "manat sign": "simbolo del manat", "ruble sign": "simbolo del rublo", "yen character": "simbolo dello yen", "yuan character": "simbolo dello yuan", "yuan character, in hong kong and taiwan": "simbolo dello yuan, Hong Kong e Taiwan", "yen\/yuan character variant one": "simbolo yen\/yuan variante uno", "Loading emoticons...": "Caricamento emoticon in corso", "Could not load emoticons": "Impossibile caricare emoticon", "People": "Persone", "Animals and Nature": "Animali e natura", "Food and Drink": "Cibi e bevande", "Activity": "Attivit\u00e0", "Travel and Places": "Viaggi e luoghi", "Objects": "Oggetti", "Flags": "Bandiere", "Characters": "Caratteri", "Characters (no spaces)": "Caratteri (senza spazi)", "Error: Form submit field collision.": "Errore: Conflitto di campi nel modulo inviato.", "Error: No form element found.": "Errore: Nessun elemento di modulo trovato.", "Update": "Aggiorna", "Color swatch": "Campione di colore", "Turquoise": "Turchese", "Green": "Verde", "Blue": "Blu", "Purple": "Viola", "Navy Blue": "Blu scuro", "Dark Turquoise": "Turchese scuro", "Dark Green": "Verde scuro", "Medium Blue": "Blu medio", "Medium Purple": "Viola medio", "Midnight Blue": "Blu notte", "Yellow": "Giallo", "Orange": "Arancio", "Red": "Rosso", "Light Gray": "Grigio chiaro", "Gray": "Grigio", "Dark Yellow": "Giallo scuro", "Dark Orange": "Arancio scuro", "Dark Red": "Rosso scuro", "Medium Gray": "Grigio medio", "Dark Gray": "Grigio scuro", "Black": "Nero", "White": "Bianco", "Switch to or from fullscreen mode": "Attiva\/disattiva la modalit\u00e0 schermo intero", "Open help dialog": "Apri la finestra di aiuto", "history": "cronologia", "styles": "stili", "formatting": "formattazione", "alignment": "allineamento", "indentation": "indentazione", "permanent pen": "penna indelebile", "comments": "commenti" }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/tinymce/langs/ja.js ================================================ tinymce.addI18n('ja',{ "Redo": "\u3084\u308a\u76f4\u3057", "Undo": "\u5143\u306b\u623b\u3059", "Cut": "\u5207\u308a\u53d6\u308a", "Copy": "\u30b3\u30d4\u30fc", "Paste": "\u8cbc\u308a\u4ed8\u3051", "Select all": "\u3059\u3079\u3066\u9078\u629e", "New document": "\u65b0\u898f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8", "Ok": "OK", "Cancel": "\u53d6\u6d88", "Visual aids": "\u8868\u306e\u67a0\u7dda\u3092\u70b9\u7dda\u3067\u8868\u793a", "Bold": "\u592a\u5b57", "Italic": "\u659c\u4f53", "Underline": "\u4e0b\u7dda", "Strikethrough": "\u53d6\u6d88\u7dda", "Superscript": "\u4e0a\u4ed8\u304d", "Subscript": "\u4e0b\u4ed8\u304d", "Clear formatting": "\u66f8\u5f0f\u3092\u30af\u30ea\u30a2", "Align left": "\u5de6\u63c3\u3048", "Align center": "\u4e2d\u592e\u63c3\u3048", "Align right": "\u53f3\u63c3\u3048", "Justify": "\u4e21\u7aef\u63c3\u3048", "Bullet list": "\u7b87\u6761\u66f8\u304d", "Numbered list": "\u756a\u53f7\u4ed8\u304d\u7b87\u6761\u66f8\u304d", "Decrease indent": "\u30a4\u30f3\u30c7\u30f3\u30c8\u3092\u6e1b\u3089\u3059", "Increase indent": "\u30a4\u30f3\u30c7\u30f3\u30c8\u3092\u5897\u3084\u3059", "Close": "\u9589\u3058\u308b", "Formats": "\u66f8\u5f0f", "Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u304a\u4f7f\u3044\u306e\u30d6\u30e9\u30a6\u30b6\u3067\u306f\u30af\u30ea\u30c3\u30d7\u30dc\u30fc\u30c9\u6a5f\u80fd\u3092\u5229\u7528\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3002\u30ad\u30fc\u30dc\u30fc\u30c9\u306e\u30b7\u30e7\u30fc\u30c8\u30ab\u30c3\u30c8\uff08Ctrl+X, Ctrl+C, Ctrl+V\uff09\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002", "Headers": "\u30d8\u30c3\u30c0\u30fc", "Header 1": "\u30d8\u30c3\u30c0\u30fc 1", "Header 2": "\u30d8\u30c3\u30c0\u30fc 2", "Header 3": "\u30d8\u30c3\u30c0\u30fc 3", "Header 4": "\u30d8\u30c3\u30c0\u30fc 4", "Header 5": "\u30d8\u30c3\u30c0\u30fc 5", "Header 6": "\u30d8\u30c3\u30c0\u30fc 6", "Headings": "\u898b\u51fa\u3057", "Heading 1": "\u898b\u51fa\u30571", "Heading 2": "\u898b\u51fa\u30572", "Heading 3": "\u898b\u51fa\u30573", "Heading 4": "\u898b\u51fa\u30574", "Heading 5": "\u898b\u51fa\u30575", "Heading 6": "\u898b\u51fa\u30576", "Preformatted": "\u66f8\u5f0f\u8a2d\u5b9a\u6e08\u307f", "Div": "Div", "Pre": "Pre", "Code": "\u30b3\u30fc\u30c9", "Paragraph": "\u6bb5\u843d", "Blockquote": "Blockquote", "Inline": "\u30a4\u30f3\u30e9\u30a4\u30f3", "Blocks": "\u30d6\u30ed\u30c3\u30af", "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u8cbc\u308a\u4ed8\u3051\u306f\u73fe\u5728\u30d7\u30ec\u30fc\u30f3\u30c6\u30ad\u30b9\u30c8\u30e2\u30fc\u30c9\u3067\u3059\u3002\u3053\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u30aa\u30d5\u306b\u3057\u306a\u3044\u9650\u308a\u5185\u5bb9\u306f\u30d7\u30ec\u30fc\u30f3\u30c6\u30ad\u30b9\u30c8\u3068\u3057\u3066\u8cbc\u308a\u4ed8\u3051\u3089\u308c\u307e\u3059\u3002", "Fonts": "\u30d5\u30a9\u30f3\u30c8", "Font Sizes": "\u30d5\u30a9\u30f3\u30c8\u30b5\u30a4\u30ba", "Class": "\u30af\u30e9\u30b9", "Browse for an image": "\u753b\u50cf\u3092\u53c2\u7167", "OR": "OR", "Drop an image here": "\u3053\u3053\u306b\u753b\u50cf\u3092\u30c9\u30ed\u30c3\u30d7", "Upload": "\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9", "Block": "\u30d6\u30ed\u30c3\u30af", "Align": "\u914d\u7f6e", "Default": "\u30c7\u30d5\u30a9\u30eb\u30c8", "Circle": "\u5186", "Disc": "\u70b9", "Square": "\u56db\u89d2", "Lower Alpha": "\u5c0f\u6587\u5b57\u306e\u30a2\u30eb\u30d5\u30a1\u30d9\u30c3\u30c8", "Lower Greek": "\u5c0f\u6587\u5b57\u306e\u30ae\u30ea\u30b7\u30e3\u6587\u5b57", "Lower Roman": "\u5c0f\u6587\u5b57\u306e\u30ed\u30fc\u30de\u6570\u5b57", "Upper Alpha": "\u5927\u6587\u5b57\u306e\u30a2\u30eb\u30d5\u30a1\u30d9\u30c3\u30c8", "Upper Roman": "\u5927\u6587\u5b57\u306e\u30ed\u30fc\u30de\u6570\u5b57", "Anchor...": "\u30a2\u30f3\u30ab\u30fc...", "Name": "\u30a2\u30f3\u30ab\u30fc\u540d", "Id": "Id", "Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "ID\u306f\u6587\u5b57\u3067\u59cb\u307e\u308a\u3001\u6587\u5b57\u3001\u6570\u5b57\u3001\u30c0\u30c3\u30b7\u30e5\u3001\u30c9\u30c3\u30c8\u3001\u30b3\u30ed\u30f3\u307e\u305f\u306f\u30a2\u30f3\u30c0\u30fc\u30b9\u30b3\u30a2\u3067\u59cb\u307e\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002", "You have unsaved changes are you sure you want to navigate away?": "\u307e\u3060\u4fdd\u5b58\u3057\u3066\u3044\u306a\u3044\u5909\u66f4\u304c\u3042\u308a\u307e\u3059\u304c\u3001\u672c\u5f53\u306b\u3053\u306e\u30da\u30fc\u30b8\u3092\u96e2\u308c\u307e\u3059\u304b\uff1f", "Restore last draft": "\u524d\u56de\u306e\u4e0b\u66f8\u304d\u3092\u5fa9\u6d3b\u3055\u305b\u308b", "Special character...": "\u7279\u6b8a\u6587\u5b57...", "Source code": "\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9", "Insert\/Edit code sample": "\u30b3\u30fc\u30c9\u30b5\u30f3\u30d7\u30eb\u306e\u633f\u5165\u30fb\u7de8\u96c6", "Language": "\u8a00\u8a9e", "Code sample...": "\u30b3\u30fc\u30c9\u306e\u30b5\u30f3\u30d7\u30eb...", "Color Picker": "\u30ab\u30e9\u30fc\u30d4\u30c3\u30ab\u30fc", "R": "R", "G": "G", "B": "B", "Left to right": "\u5de6\u304b\u3089\u53f3", "Right to left": "\u53f3\u304b\u3089\u5de6", "Emoticons...": "\u7d75\u6587\u5b57...", "Metadata and Document Properties": "\u30e1\u30bf\u30c7\u30fc\u30bf\u3068\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u30d7\u30ed\u30d1\u30c6\u30a3", "Title": "\u30bf\u30a4\u30c8\u30eb", "Keywords": "\u30ad\u30fc\u30ef\u30fc\u30c9", "Description": "\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u5185\u5bb9", "Robots": "\u30ed\u30dc\u30c3\u30c4", "Author": "\u8457\u8005", "Encoding": "\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0", "Fullscreen": "\u5168\u753b\u9762\u8868\u793a", "Action": "\u30a2\u30af\u30b7\u30e7\u30f3", "Shortcut": "\u30b7\u30e7\u30fc\u30c8\u30ab\u30c3\u30c8", "Help": "\u30d8\u30eb\u30d7", "Address": "\u30a2\u30c9\u30ec\u30b9", "Focus to menubar": "\u30e1\u30cb\u30e5\u30fc\u30d0\u30fc\u306b\u30d5\u30a9\u30fc\u30ab\u30b9", "Focus to toolbar": "\u30c4\u30fc\u30eb\u30d0\u30fc\u306b\u30d5\u30a9\u30fc\u30ab\u30b9", "Focus to element path": "\u8981\u7d20\u30d1\u30b9\u306b\u30d5\u30a9\u30fc\u30ab\u30b9", "Focus to contextual toolbar": "\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u30c4\u30fc\u30eb\u30d0\u30fc\u306b\u30d5\u30a9\u30fc\u30ab\u30b9", "Insert link (if link plugin activated)": "\u30ea\u30f3\u30af\u3092\u633f\u5165 (\u30ea\u30f3\u30af\u30d7\u30e9\u30b0\u30a4\u30f3\u6709\u52b9\u6642)", "Save (if save plugin activated)": "\u4fdd\u5b58 (\u4fdd\u5b58\u30d7\u30e9\u30b0\u30a4\u30f3\u6709\u52b9\u6642)", "Find (if searchreplace plugin activated)": "\u691c\u7d22(\u7f6e\u63db\u30d7\u30e9\u30b0\u30a4\u30f3\u6709\u52b9\u6642)", "Plugins installed ({0}):": "\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u6e08\u30d7\u30e9\u30b0\u30a4\u30f3 ({0}):", "Premium plugins:": "\u30d7\u30ec\u30df\u30a2\u30e0\u30d7\u30e9\u30b0\u30a4\u30f3:", "Learn more...": "\u8a73\u7d30...", "You are using {0}": "\u3042\u306a\u305f\u306f {0} \u4f7f\u7528\u4e2d", "Plugins": "\u30d7\u30e9\u30b0\u30a4\u30f3", "Handy Shortcuts": "\u4fbf\u5229\u306a\u30b7\u30e7\u30fc\u30c8\u30ab\u30c3\u30c8", "Horizontal line": "\u6c34\u5e73\u7f6b\u7dda", "Insert\/edit image": "\u753b\u50cf\u306e\u633f\u5165\u30fb\u7de8\u96c6", "Image description": "\u753b\u50cf\u306e\u8aac\u660e\u6587", "Source": "\u753b\u50cf\u306e\u30bd\u30fc\u30b9", "Dimensions": "\u753b\u50cf\u30b5\u30a4\u30ba\uff08\u6a2a\u30fb\u7e26\uff09", "Constrain proportions": "\u7e26\u6a2a\u6bd4\u3092\u4fdd\u6301\u3059\u308b", "General": "\u4e00\u822c", "Advanced": "\u8a73\u7d30\u8a2d\u5b9a", "Style": "\u30b9\u30bf\u30a4\u30eb", "Vertical space": "\u7e26\u65b9\u5411\u306e\u4f59\u767d", "Horizontal space": "\u6a2a\u65b9\u5411\u306e\u4f59\u767d", "Border": "\u67a0\u7dda", "Insert image": "\u753b\u50cf\u306e\u633f\u5165", "Image...": "\u753b\u50cf..", "Image list": "\u753b\u50cf\u4e00\u89a7", "Rotate counterclockwise": "\u53cd\u6642\u8a08\u56de\u308a\u306b\u56de\u8ee2", "Rotate clockwise": "\u6642\u8a08\u56de\u308a\u306b\u56de\u8ee2", "Flip vertically": "\u4e0a\u4e0b\u306b\u53cd\u8ee2", "Flip horizontally": "\u6c34\u5e73\u306b\u53cd\u8ee2", "Edit image": "\u753b\u50cf\u306e\u7de8\u96c6", "Image options": "\u753b\u50cf\u30aa\u30d7\u30b7\u30e7\u30f3", "Zoom in": "\u30ba\u30fc\u30e0\u30a4\u30f3", "Zoom out": "\u30ba\u30fc\u30e0\u30a2\u30a6\u30c8", "Crop": "\u30af\u30ed\u30c3\u30d7", "Resize": "\u30ea\u30b5\u30a4\u30ba", "Orientation": "\u5411\u304d", "Brightness": "\u660e\u308b\u3055", "Sharpen": "\u30b7\u30e3\u30fc\u30d7\u5316", "Contrast": "\u30b3\u30f3\u30c8\u30e9\u30b9\u30c8", "Color levels": "\u30ab\u30e9\u30fc\u30ec\u30d9\u30eb", "Gamma": "\u30ac\u30f3\u30de", "Invert": "\u53cd\u8ee2", "Apply": "\u9069\u7528", "Back": "\u623b\u308b", "Insert date\/time": "\u65e5\u4ed8\u30fb\u6642\u523b", "Date\/time": "\u65e5\u4ed8\u30fb\u6642\u523b", "Insert\/Edit Link": "\u30ea\u30f3\u30af\u306e\u633f\u5165\/\u7de8\u96c6", "Insert\/edit link": "\u30ea\u30f3\u30af\u306e\u633f\u5165\u30fb\u7de8\u96c6", "Text to display": "\u30ea\u30f3\u30af\u5143\u30c6\u30ad\u30b9\u30c8", "Url": "\u30ea\u30f3\u30af\u5148URL", "Open link in...": "\u30ea\u30f3\u30af\u306e\u958b\u304d\u65b9...", "Current window": "\u540c\u3058\u30a6\u30a3\u30f3\u30c9\u30a6", "None": "\u306a\u3057", "New window": "\u65b0\u898f\u30a6\u30a3\u30f3\u30c9\u30a6", "Remove link": "\u30ea\u30f3\u30af\u306e\u524a\u9664", "Anchors": "\u30a2\u30f3\u30ab\u30fc\uff08\u30ea\u30f3\u30af\u306e\u5230\u9054\u70b9\uff09", "Link...": "\u30ea\u30f3\u30af...", "Paste or type a link": "\u30ea\u30f3\u30af\u3092\u30da\u30fc\u30b9\u30c8\u307e\u305f\u306f\u5165\u529b", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u5165\u529b\u3055\u308c\u305fURL\u306f\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u306e\u3088\u3046\u3067\u3059\u3002\u300cmailto:\u300d\u30d7\u30ec\u30d5\u30a3\u30c3\u30af\u30b9\u3092\u8ffd\u52a0\u3057\u307e\u3059\u304b\uff1f", "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\u5165\u529b\u3055\u308c\u305fURL\u306f\u5916\u90e8\u30ea\u30f3\u30af\u306e\u3088\u3046\u3067\u3059\u3002\u300chttp:\/\/\u300d\u30d7\u30ec\u30d5\u30a3\u30c3\u30af\u30b9\u3092\u8ffd\u52a0\u3057\u307e\u3059\u304b\uff1f", "Link list": "\u30ea\u30f3\u30af\u4e00\u89a7", "Insert video": "\u52d5\u753b", "Insert\/edit video": "\u52d5\u753b\u306e\u633f\u5165\u30fb\u7de8\u96c6", "Insert\/edit media": "\u30e1\u30c7\u30a3\u30a2\u306e\u633f\u5165\u30fb\u7de8\u96c6", "Alternative source": "\u4ee3\u66ff\u52d5\u753b\u306e\u5834\u6240", "Alternative source URL": "\u4ee3\u66ff\u30bd\u30fc\u30b9URL", "Media poster (Image URL)": "\u30e1\u30c7\u30a3\u30a2\u30dd\u30b9\u30bf\u30fc (\u753b\u50cfURL)", "Paste your embed code below:": "\u57cb\u3081\u8fbc\u307f\u7528\u30b3\u30fc\u30c9\u3092\u4e0b\u8a18\u306b\u8cbc\u308a\u4ed8\u3051\u3066\u304f\u3060\u3055\u3044\u3002", "Embed": "\u57cb\u3081\u8fbc\u307f", "Media...": "\u30e1\u30c7\u30a3\u30a2\u2026", "Nonbreaking space": "\u56fa\u5b9a\u30b9\u30da\u30fc\u30b9\uff08 \uff09", "Page break": "\u30da\u30fc\u30b8\u533a\u5207\u308a", "Paste as text": "\u30c6\u30ad\u30b9\u30c8\u3068\u3057\u3066\u8cbc\u308a\u4ed8\u3051", "Preview": "\u30d7\u30ec\u30d3\u30e5\u30fc", "Print...": "\u5370\u5237...", "Save": "\u4fdd\u5b58", "Find": "\u691c\u7d22", "Replace with": "\u7f6e\u304d\u63db\u3048\u308b\u6587\u5b57", "Replace": "\u7f6e\u304d\u63db\u3048", "Replace all": "\u5168\u3066\u3092\u7f6e\u304d\u63db\u3048\u308b", "Previous": "\u524d\u3078", "Next": "\u6b21", "Find and replace...": "\u7f6e\u63db...", "Could not find the specified string.": "\u304a\u63a2\u3057\u306e\u6587\u5b57\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002", "Match case": "\u5927\u6587\u5b57\u30fb\u5c0f\u6587\u5b57\u3092\u533a\u5225\u3059\u308b", "Find whole words only": "\u8a9e\u5168\u4f53\u3092\u542b\u3080\u3082\u306e\u306e\u307f\u691c\u7d22", "Spell check": "\u30b9\u30da\u30eb\u30c1\u30a7\u30c3\u30af", "Ignore": "\u7121\u8996", "Ignore all": "\u5168\u3066\u3092\u7121\u8996", "Finish": "\u7d42\u4e86", "Add to Dictionary": "\u8f9e\u66f8\u306b\u8ffd\u52a0", "Insert table": "\u8868\u306e\u633f\u5165", "Table properties": "\u8868\u306e\u8a73\u7d30\u8a2d\u5b9a", "Delete table": "\u8868\u306e\u524a\u9664", "Cell": "\u30bb\u30eb", "Row": "\u884c", "Column": "\u5217", "Cell properties": "\u30bb\u30eb\u306e\u8a73\u7d30\u8a2d\u5b9a", "Merge cells": "\u30bb\u30eb\u306e\u7d50\u5408", "Split cell": "\u30bb\u30eb\u306e\u5206\u5272", "Insert row before": "\u4e0a\u5074\u306b\u884c\u3092\u633f\u5165", "Insert row after": "\u4e0b\u5074\u306b\u884c\u3092\u633f\u5165", "Delete row": "\u884c\u306e\u524a\u9664", "Row properties": "\u884c\u306e\u8a73\u7d30\u8a2d\u5b9a", "Cut row": "\u884c\u306e\u5207\u308a\u53d6\u308a", "Copy row": "\u884c\u306e\u30b3\u30d4\u30fc", "Paste row before": "\u4e0a\u5074\u306b\u884c\u3092\u8cbc\u308a\u4ed8\u3051", "Paste row after": "\u4e0b\u5074\u306b\u884c\u3092\u8cbc\u308a\u4ed8\u3051", "Insert column before": "\u5de6\u5074\u306b\u5217\u3092\u633f\u5165", "Insert column after": "\u53f3\u5074\u306b\u5217\u3092\u633f\u5165", "Delete column": "\u5217\u306e\u524a\u9664", "Cols": "\u5217\u6570", "Rows": "\u884c\u6570", "Width": "\u5e45", "Height": "\u9ad8\u3055", "Cell spacing": "\u30bb\u30eb\u306e\u9593\u9694", "Cell padding": "\u30bb\u30eb\u5185\u4f59\u767d\uff08\u30d1\u30c7\u30a3\u30f3\u30b0\uff09", "Show caption": "\u30ad\u30e3\u30d7\u30b7\u30e7\u30f3\u306e\u8868\u793a", "Left": "\u5de6\u5bc4\u305b", "Center": "\u4e2d\u592e\u63c3\u3048", "Right": "\u53f3\u5bc4\u305b", "Cell type": "\u30bb\u30eb\u30bf\u30a4\u30d7", "Scope": "\u30b9\u30b3\u30fc\u30d7", "Alignment": "\u914d\u7f6e", "H Align": "\u6c34\u5e73\u65b9\u5411\u306e\u914d\u7f6e", "V Align": "\u5782\u76f4\u65b9\u5411\u306e\u914d\u7f6e", "Top": "\u4e0a", "Middle": "\u4e2d\u592e", "Bottom": "\u4e0b", "Header cell": "\u30d8\u30c3\u30c0\u30fc\u30bb\u30eb", "Row group": "\u884c\u30b0\u30eb\u30fc\u30d7", "Column group": "\u5217\u30b0\u30eb\u30fc\u30d7", "Row type": "\u884c\u30bf\u30a4\u30d7", "Header": "\u30d8\u30c3\u30c0\u30fc", "Body": "\u30dc\u30c7\u30a3\u30fc", "Footer": "\u30d5\u30c3\u30bf\u30fc", "Border color": "\u67a0\u7dda\u306e\u8272", "Insert template...": "\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u633f\u5165..", "Templates": "\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u540d", "Template": "\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8", "Text color": "\u30c6\u30ad\u30b9\u30c8\u306e\u8272", "Background color": "\u80cc\u666f\u8272", "Custom...": "\u30ab\u30b9\u30bf\u30e0...", "Custom color": "\u30ab\u30b9\u30bf\u30e0\u30ab\u30e9\u30fc", "No color": "\u30ab\u30e9\u30fc\u306a\u3057", "Remove color": "\u8272\u8a2d\u5b9a\u3092\u89e3\u9664", "Table of Contents": "\u76ee\u6b21", "Show blocks": "\u6587\u7ae0\u306e\u533a\u5207\u308a\u3092\u70b9\u7dda\u3067\u8868\u793a", "Show invisible characters": "\u4e0d\u53ef\u8996\u6587\u5b57\u3092\u8868\u793a", "Word count": "\u6587\u5b57\u6570\u30ab\u30a6\u30f3\u30c8", "Count": "\u30ab\u30a6\u30f3\u30c8", "Document": "\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8", "Selection": "\u9078\u629e", "Words": "\u5358\u8a9e\u6570", "Words: {0}": "\u5358\u8a9e\u6570: {0}", "{0} words": "{0} \u30ef\u30fc\u30c9", "File": "\u30d5\u30a1\u30a4\u30eb", "Edit": "\u7de8\u96c6", "Insert": "\u633f\u5165", "View": "\u8868\u793a", "Format": "\u66f8\u5f0f", "Table": "\u8868", "Tools": "\u30c4\u30fc\u30eb", "Powered by {0}": "Powered by {0}", "Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u66f8\u5f0f\u4ed8\u304d\u30c6\u30ad\u30b9\u30c8\u306e\u7de8\u96c6\u753b\u9762\u3002ALT-F9\u3067\u30e1\u30cb\u30e5\u30fc\u3001ALT-F10\u3067\u30c4\u30fc\u30eb\u30d0\u30fc\u3001ALT-0\u3067\u30d8\u30eb\u30d7\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002", "Image title": "\u753b\u50cf\u30bf\u30a4\u30c8\u30eb", "Border width": "\u67a0\u7dda\u5e45", "Border style": "\u67a0\u7dda\u30b9\u30bf\u30a4\u30eb", "Error": "\u30a8\u30e9\u30fc", "Warn": "\u8b66\u544a", "Valid": "\u6709\u52b9", "To open the popup, press Shift+Enter": "\u30dd\u30c3\u30d7\u30a2\u30c3\u30d7\u3092\u958b\u304f\u306b\u306f\u3001Shift+Enter\u3092\u62bc\u3057\u3066\u304f\u3060\u3055\u3044", "Rich Text Area. Press ALT-0 for help.": "\u30ea\u30c3\u30c1\u30c6\u30ad\u30b9\u30c8\u30a8\u30ea\u30a2\u3002Alt-0\u3067\u30d8\u30eb\u30d7\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002", "System Font": "\u30b7\u30b9\u30c6\u30e0\u30d5\u30a9\u30f3\u30c8", "Failed to upload image: {0}": "\u753b\u50cf{0}\u3092\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f", "Failed to load plugin: {0} from url {1}": "URL{1}\u304b\u3089\u306e\u30d7\u30e9\u30b0\u30a4\u30f3{0}\u306e\u8aad\u307f\u8fbc\u307f\u306b\u5931\u6557\u3057\u307e\u3057\u305f", "Failed to load plugin url: {0}": "\u30d7\u30e9\u30b0\u30a4\u30f3\u306eURL{0}\u3092\u8aad\u307f\u8fbc\u3081\u307e\u305b\u3093\u3067\u3057\u305f", "Failed to initialize plugin: {0}": "\u30d7\u30e9\u30b0\u30a4\u30f3{0}\u306e\u521d\u671f\u5316\u306b\u5931\u6557\u3057\u307e\u3057\u305f", "example": "\u4f8b", "Search": "\u691c\u7d22", "All": "\u3059\u3079\u3066", "Currency": "\u901a\u8ca8", "Text": "\u30c6\u30ad\u30b9\u30c8", "Quotations": "\u5f15\u7528", "Mathematical": "\u6570\u5b66\u8a18\u53f7", "Extended Latin": "\u30e9\u30c6\u30f3\u6587\u5b57\u62e1\u5f35", "Symbols": "\u8a18\u53f7", "Arrows": "\u77e2\u5370", "User Defined": "\u30e6\u30fc\u30b6\u30fc\u5b9a\u7fa9", "dollar sign": "\u30c9\u30eb\u8a18\u53f7", "currency sign": "\u901a\u8ca8\u8a18\u53f7", "euro-currency sign": "\u30e6\u30fc\u30ed\u8a18\u53f7", "colon sign": "\u30b3\u30ed\u30f3\u8a18\u53f7", "cruzeiro sign": "\u30af\u30eb\u30bc\u30a4\u30ed\u8a18\u53f7", "french franc sign": "\u30d5\u30e9\u30f3\u30b9\u30d5\u30e9\u30f3\u8a18\u53f7", "lira sign": "\u30ea\u30e9\u8a18\u53f7", "mill sign": "\u30df\u30eb\u8a18\u53f7", "naira sign": "\u30ca\u30a4\u30e9\u8a18\u53f7", "peseta sign": "\u30da\u30bb\u30bf\u8a18\u53f7", "rupee sign": "\u30eb\u30d4\u30fc\u8a18\u53f7", "won sign": "\u30a6\u30a9\u30f3\u8a18\u53f7", "new sheqel sign": "\u65b0\u30b7\u30a7\u30b1\u30eb\u8a18\u53f7", "dong sign": "\u30c9\u30f3\u8a18\u53f7", "kip sign": "\u30ad\u30fc\u30d7\u8a18\u53f7", "tugrik sign": "\u30c8\u30a5\u30b0\u30eb\u30b0\u8a18\u53f7", "drachma sign": "\u30c9\u30e9\u30af\u30de\u8a18\u53f7", "german penny symbol": "\u30c9\u30a4\u30c4\u30da\u30cb\u30fc\u8a18\u53f7", "peso sign": "\u30da\u30bd\u8a18\u53f7", "guarani sign": "\u30ac\u30e9\u30cb\u8a18\u53f7", "austral sign": "\u30a2\u30a6\u30b9\u30c8\u30e9\u30eb\u8a18\u53f7", "hryvnia sign": "\u30d5\u30ea\u30f4\u30cb\u30e3\u8a18\u53f7", "cedi sign": "\u30bb\u30c7\u30a3\u8a18\u53f7", "livre tournois sign": "\u30c8\u30a5\u30fc\u30eb\u30dd\u30f3\u30c9\u8a18\u53f7", "spesmilo sign": "\u30b9\u30da\u30b9\u30df\u30fc\u30ed\u8a18\u53f7", "tenge sign": "\u30c6\u30f3\u30b2\u8a18\u53f7", "indian rupee sign": "\u30a4\u30f3\u30c9\u30eb\u30d4\u30fc\u8a18\u53f7", "turkish lira sign": "\u30c8\u30eb\u30b3\u30ea\u30e9\u8a18\u53f7", "nordic mark sign": "\u5317\u6b27\u30de\u30eb\u30af\u8a18\u53f7", "manat sign": "\u30de\u30ca\u30c8\u8a18\u53f7", "ruble sign": "\u30eb\u30fc\u30d6\u30eb\u8a18\u53f7", "yen character": "\u5186\u8a18\u53f7", "yuan character": "\u4eba\u6c11\u5143\u8a18\u53f7", "yuan character, in hong kong and taiwan": "\u9999\u6e2f\u304a\u3088\u3073\u53f0\u6e7e\u306b\u304a\u3051\u308b\u5143\u8a18\u53f7", "yen\/yuan character variant one": "\u5186\/\u5143\u8a18\u53f7\u306e\u30d0\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3", "Loading emoticons...": "\u7d75\u6587\u5b57\u3092\u8aad\u307f\u8fbc\u3093\u3067\u3044\u307e\u3059...", "Could not load emoticons": "\u7d75\u6587\u5b57\u304c\u8aad\u307f\u8fbc\u3081\u307e\u305b\u3093\u3067\u3057\u305f\u3002", "People": "\u4eba", "Animals and Nature": "\u52d5\u7269\u3068\u81ea\u7136", "Food and Drink": "\u98df\u3079\u7269\u3068\u98f2\u307f\u7269", "Activity": "\u884c\u52d5", "Travel and Places": "\u65c5\u884c\u3068\u5834\u6240", "Objects": "\u7269", "Flags": "\u65d7", "Characters": "\u6587\u5b57\u6570", "Characters (no spaces)": "\u6587\u5b57\u6570 (\u30b9\u30da\u30fc\u30b9\u306a\u3057)", "{0} characters": "{0}\u6587\u5b57", "Error: Form submit field collision.": "\u30a8\u30e9\u30fc\uff1a\u30d5\u30a9\u30fc\u30e0\u9001\u4fe1\u30d5\u30a3\u30fc\u30eb\u30c9\u304c\u7af6\u5408\u3057\u3066\u3044\u307e\u3059\u3002", "Error: No form element found.": "\u30a8\u30e9\u30fc\uff1a\u30d5\u30a9\u30fc\u30e0\u8981\u7d20\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002", "Update": "\u66f4\u65b0", "Color swatch": "\u8272\u306e\u898b\u672c", "Turquoise": "\u30bf\u30fc\u30b3\u30a4\u30ba", "Green": "\u30b0\u30ea\u30fc\u30f3", "Blue": "\u30d6\u30eb\u30fc", "Purple": "\u30d1\u30fc\u30d7\u30eb", "Navy Blue": "\u30cd\u30a4\u30d3\u30fc", "Dark Turquoise": "\u30c0\u30fc\u30af\u30bf\u30fc\u30b3\u30a4\u30ba", "Dark Green": "\u30c0\u30fc\u30af\u30b0\u30ea\u30fc\u30f3", "Medium Blue": "\u30e1\u30c7\u30a3\u30a2\u30e0\u30d6\u30eb\u30fc", "Medium Purple": "\u30df\u30c7\u30a3\u30a2\u30e0\u30d1\u30fc\u30d7\u30eb", "Midnight Blue": "\u30df\u30c3\u30c9\u30ca\u30a4\u30c8\u30d6\u30eb\u30fc", "Yellow": "\u30a4\u30a8\u30ed\u30fc", "Orange": "\u30aa\u30ec\u30f3\u30b8", "Red": "\u30ec\u30c3\u30c9", "Light Gray": "\u30e9\u30a4\u30c8\u30b0\u30ec\u30fc", "Gray": "\u30b0\u30ec\u30fc", "Dark Yellow": "\u30c0\u30fc\u30af\u30a4\u30a8\u30ed\u30fc", "Dark Orange": "\u30c0\u30fc\u30af\u30aa\u30ec\u30f3\u30b8", "Dark Red": "\u30c0\u30fc\u30af\u30ec\u30c3\u30c9", "Medium Gray": "\u30df\u30c7\u30a3\u30a2\u30e0\u30b0\u30ec\u30fc", "Dark Gray": "\u30c0\u30fc\u30af\u30b0\u30ec\u30fc", "Light Green": "\u30e9\u30a4\u30c8\u30b0\u30ea\u30fc\u30f3", "Light Yellow": "\u30e9\u30a4\u30c8\u30a4\u30a8\u30ed\u30fc", "Light Red": "\u30e9\u30a4\u30c8\u30ec\u30c3\u30c9", "Light Purple": "\u30e9\u30a4\u30c8\u30d1\u30fc\u30d7\u30eb", "Light Blue": "\u30e9\u30a4\u30c8\u30d6\u30eb\u30fc", "Dark Purple": "\u30c0\u30fc\u30af\u30d1\u30fc\u30d7\u30eb", "Dark Blue": "\u30c0\u30fc\u30af\u30d6\u30eb\u30fc", "Black": "\u30d6\u30e9\u30c3\u30af", "White": "\u30db\u30ef\u30a4\u30c8", "Switch to or from fullscreen mode": "\u30d5\u30eb\u30b9\u30af\u30ea\u30fc\u30f3\u30e2\u30fc\u30c9\u5207\u66ff", "Open help dialog": "\u30d8\u30eb\u30d7\u30c0\u30a4\u30a2\u30ed\u30b0\u3092\u958b\u304f", "history": "\u5c65\u6b74", "styles": "\u30b9\u30bf\u30a4\u30eb", "formatting": "\u66f8\u5f0f", "alignment": "\u914d\u7f6e", "indentation": "\u30a4\u30f3\u30c7\u30f3\u30c8", "permanent pen": "\u86cd\u5149\u30da\u30f3", "comments": "\u30b3\u30e1\u30f3\u30c8", "Format Painter": "\u66f8\u5f0f\u306e\u30b3\u30d4\u30fc\/\u8cbc\u308a\u4ed8\u3051", "Insert\/edit iframe": "iframe\u306e\u633f\u5165\/\u7de8\u96c6", "Capitalization": "\u5927\u6587\u5b57\u5316", "lowercase": "\u5c0f\u6587\u5b57", "UPPERCASE": "\u5927\u6587\u5b57", "Title Case": "\u30bf\u30a4\u30c8\u30eb\u6587\u5b57", "Permanent Pen Properties": "\u86cd\u5149\u30da\u30f3\u306e\u30d7\u30ed\u30d1\u30c6\u30a3", "Permanent pen properties...": "\u86cd\u5149\u30da\u30f3\u306e\u30d7\u30ed\u30d1\u30c6\u30a3...", "Font": "\u30d5\u30a9\u30f3\u30c8", "Size": "\u30b5\u30a4\u30ba", "More...": "\u8a73\u7d30...", "Spellcheck Language": "\u8a00\u8a9e\u306e\u30b9\u30da\u30eb\u30c1\u30a7\u30c3\u30af", "Select...": "\u9078\u629e...", "Preferences": "\u30d7\u30ea\u30d5\u30a1\u30ec\u30f3\u30b9", "Yes": "\u306f\u3044", "No": "\u3044\u3044\u3048", "Keyboard Navigation": "\u30ad\u30fc\u30dc\u30fc\u30c9\u30ca\u30d3\u30b2\u30fc\u30b7\u30e7\u30f3", "Version": "\u30d0\u30fc\u30b8\u30e7\u30f3", "Anchor": "\u30a2\u30f3\u30ab\u30fc\uff08\u30ea\u30f3\u30af\u306e\u5230\u9054\u70b9\uff09", "Special character": "\u7279\u6b8a\u6587\u5b57", "Code sample": "\u30b3\u30fc\u30c9\u30b5\u30f3\u30d7\u30eb", "Color": "\u30ab\u30e9\u30fc", "Emoticons": "\u7d75\u6587\u5b57", "Document properties": "\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306e\u30d7\u30ed\u30d1\u30c6\u30a3", "Image": "\u753b\u50cf", "Insert link": "\u30ea\u30f3\u30af", "Target": "\u30bf\u30fc\u30b2\u30c3\u30c8\u5c5e\u6027", "Link": "\u30ea\u30f3\u30af", "Poster": "\u4ee3\u66ff\u753b\u50cf\u306e\u5834\u6240", "Media": "\u30e1\u30c7\u30a3\u30a2", "Print": "\u5370\u5237", "Prev": "\u524d", "Find and replace": "\u691c\u7d22\u3068\u7f6e\u304d\u63db\u3048", "Whole words": "\u5358\u8a9e\u5358\u4f4d\u3067\u691c\u7d22\u3059\u308b", "Spellcheck": "\u30b9\u30da\u30eb\u30c1\u30a7\u30c3\u30af", "Caption": "\u8868\u984c", "Insert template": "\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u633f\u5165" }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/tinymce/langs/kab.js ================================================ tinymce.addI18n('kab',{ "Redo": "Err-d", "Undo": "Semmet", "Cut": "Gzem", "Copy": "N\u0263el", "Paste": "Sente\u1e0d", "Select all": "Fren kulec", "New document": "Attaftar amaynut", "Ok": "Ih", "Cancel": "Semmet", "Visual aids": "Visual aids", "Bold": "Tira tazurant", "Italic": "Tira yeknan", "Underline": "Aderrer", "Strikethrough": "Strikethrough", "Superscript": "Superscript", "Subscript": "Subscript", "Clear formatting": "Clear formatting", "Align left": "Tarigla \u0263er zelma\u1e0d", "Align center": "Di tlemast", "Align right": "tarigla \u0263er zelma\u1e0d", "Justify": "Justify", "Bullet list": "Tabdart s tlillac", "Numbered list": "Tabdart s wu\u1e6d\u1e6dunen", "Decrease indent": "Simc\u1e6du\u1e25 asi\u1e93i", "Increase indent": "Sim\u0263ur asi\u1e93i", "Close": "Mdel", "Formats": "Imasalen", "Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.", "Headers": "Izwal", "Header 1": "Azwel 1", "Header 2": "Azwel 2", "Header 3": "Azwel 3", "Header 4": "Azwel 4", "Header 5": "Header 5", "Header 6": "Azwel 6", "Headings": "Izewlen", "Heading 1": "Inixf 1", "Heading 2": "Inixf 2", "Heading 3": "Inixf 3", "Heading 4": "Inixf 4", "Heading 5": "Inixf 5", "Heading 6": "Inixf 6", "Preformatted": "Yettwamsel si tazwara", "Div": "Div", "Pre": "Pre", "Code": "Tangalt", "Paragraph": "taseddart", "Blockquote": "Tanebdurt", "Inline": "Inline", "Blocks": "I\u1e25edran", "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.", "Fonts": "Tisefsa", "Font Sizes": "Tiddi n tsefsit", "Class": "Asmil", "Browse for an image": "Snirem iwakken ad tferne\u1e0d tugna", "OR": "Ih", "Drop an image here": "Ssers tugna dagi", "Upload": "Sili", "Block": "Sew\u1e25el", "Align": "Settef", "Default": "Lex\u1e63as", "Circle": "Tawinest", "Disc": "A\u1e0debsi", "Square": "Amku\u1e93", "Lower Alpha": "Alpha ame\u1e93yan", "Lower Greek": "Grik ame\u1e93yan", "Lower Roman": "Ruman amectu\u1e25", "Upper Alpha": "Alfa ameqran", "Upper Roman": "Ruman ameqran", "Anchor...": "Tamdeyt...", "Name": "Isem", "Id": "Id", "Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "id ilaq ad ibdu s usekkil, ad yettwa\u1e0dfer kan s isekkilen, im\u1e0danen, ijerri\u1e0den, tinqi\u1e0din, snat n tenqi\u1e0din ne\u0263 ijerri\u1e0den n wadda.", "You have unsaved changes are you sure you want to navigate away?": "Ibeddilen ur twaskelsen ara teb\u0263i\u1e0d ad teff\u0263e\u1e0d ?", "Restore last draft": "Restore last draft", "Special character...": "Isekkilen uzzigen...", "Source code": "Tangalt ta\u0263balut", "Insert\/Edit code sample": "Ger\/\u1e92reg tangalt n umedya", "Language": "Tutlayt", "Code sample...": "Amedya n tengalt...", "Color Picker": "Amelqa\u1e0d n yini", "R": "R", "G": "G", "B": "B", "Left to right": "Seg zelma\u1e0d \u0263er yefus", "Right to left": "Seg yefus \u0263er zelma\u1e0d", "Emoticons...": "Tigitin n u\u1e25ulfu...", "Metadata and Document Properties": "Idfersefka akked yiraten n yisemli", "Title": "Azwel", "Keywords": "Awalen yufraren", "Description": "Aglam", "Robots": "Robots", "Author": "Ameskar", "Encoding": "Asettengel", "Fullscreen": "Agdil a\u010duran", "Action": "Tigawt", "Shortcut": "Anegzum", "Help": "Tallalt", "Address": "Tansa", "Focus to menubar": "Asa\u1e0des \u0263ef tfeggagt n wumu\u0263", "Focus to toolbar": "Asa\u1e0des \u0263ef tfeggagt n ifecka", "Focus to element path": "Asa\u1e0des \u0263ef ubrid n uferdis", "Focus to contextual toolbar": "Asa\u1e0des \u0263ef tfeggagt n ifecka tanattalt", "Insert link (if link plugin activated)": "Ger ase\u0263wen (ma yermed uzegrir n use\u0263wen)", "Save (if save plugin activated)": "Sekles (ma yermed uzegrir save)", "Find (if searchreplace plugin activated)": "Nadi (ma yermed uzegrir searchreplace)", "Plugins installed ({0}):": "Izegriren yettwasbedden ({0}):", "Premium plugins:": "Izegriren premium :", "Learn more...": "\u1e92er ugar...", "You are using {0}": "Tsseqdace\u1e0d {0}", "Plugins": "Isi\u0263zifen", "Handy Shortcuts": "Inegzumen", "Horizontal line": "Ajerri\u1e0d aglawan", "Insert\/edit image": "Ger\/\u1e92reg tugna", "Image description": "Aglam n tugna", "Source": "A\u0263balu", "Dimensions": "Tisekta", "Constrain proportions": "Constrain proportions", "General": "Amatu", "Advanced": "Ana\u1e93i", "Style": "A\u0263anib", "Vertical space": "Talunt taratakt", "Horizontal space": "Talunt taglawant", "Border": "Iri", "Insert image": "Ger tugna", "Image...": "Tugna...", "Image list": "Tabdart n tugniwin", "Rotate counterclockwise": "Tuzya mgal tamrilt", "Rotate clockwise": "Tuzya yugdan tamrilt", "Flip vertically": "Tuzya taratakt", "Flip horizontally": "Tuzttya tagrawant", "Edit image": "\u1e92reg tugna", "Image options": "Tixti\u1e5biyin n tugna", "Zoom in": "Zoom in", "Zoom out": "Zoom out", "Crop": "Rogner", "Resize": "Beddel tiddi", "Orientation": "Ta\u0263da", "Brightness": "Tafat", "Sharpen": "Affiner", "Contrast": "Contrast", "Color levels": "Iswiren n yini", "Gamma": "Gamma", "Invert": "Tti", "Apply": "Snes", "Back": "Tu\u0263alin", "Insert date\/time": "Ger azemz\/asrag", "Date\/time": "Azemz\/Asrag", "Insert\/Edit Link": "Ger\/\u1e92reg as\u0263en", "Insert\/edit link": "Ger\/\u1e93reg azday", "Text to display": "A\u1e0dris ara yettwabeqq\u1e0den", "Url": "Url", "Open link in...": "Ldi as\u0263en di...", "Current window": "Asfaylu amiran", "None": "Ulac", "New window": "Asfaylu amaynut", "Remove link": "Kkes azday", "Anchors": "Timdyin", "Link...": "As\u0263en...", "Paste or type a link": "Sente\u1e0d ne\u0263 sekcem ase\u0263wen", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "URL i teskecme\u1e0d tettban-d d tansa email. teb\u0263i\u1e0d ad s-ternu\u1e0d azwir mailto : ?", "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "URL i teskecme\u1e0d tettban-d d azday uffi\u0263. Teb\u0263i\u1e0d ad s-ternu\u1e0d azwir http:\/\/ ?", "Link list": "Tabdart n is\u0263ewnen", "Insert video": "Ger avidyu", "Insert\/edit video": "Ger\/\u1e93reg avidyu", "Insert\/edit media": "Ger\/\u1e92reg amiya", "Alternative source": "A\u0263balu amlellay", "Alternative source URL": "A\u0263balu n URL amlellay", "Media poster (Image URL)": "Abeqqi\u1e0d n umidya (URL n tugna)", "Paste your embed code below:": "Paste your embed code below:", "Embed": "Embed", "Media...": "Amidya...", "Nonbreaking space": "Talunt ur nettwagzam ara", "Page break": "Angaz n usebter", "Paste as text": "Sente\u1e0d d a\u1e0dris", "Preview": "Sken", "Print...": "Siggez...", "Save": "Sekles", "Find": "Nadi", "Replace with": "Semselsi s", "Replace": "Semselsi", "Replace all": "Semselsi kulec", "Previous": "Uzwir", "Next": "Win \u0263ers", "Find and replace...": "Nadi semselsi...", "Could not find the specified string.": "Ur d-nufi ara azrar i d-yettunefken.", "Match case": "Match case", "Find whole words only": "Af-d awal ummid kan", "Spell check": "Selken ta\u0263dirawt", "Ignore": "Zgel", "Ignore all": "Zgel kulec", "Finish": "Fak", "Add to Dictionary": "Rnu-t s amawal", "Insert table": "Ger tafelwit", "Table properties": "Iraten n tfelwit", "Delete table": "Kkes tafelwit", "Cell": "Taxxamt", "Row": "Adur", "Column": "Tagejdit", "Cell properties": "Iraten n texxamt", "Merge cells": "Seddukel tixxamin", "Split cell": "B\u1e0du tixxamin", "Insert row before": "Ger adur deffir", "Insert row after": "Ger adur sdat", "Delete row": "Kkes tagejdit", "Row properties": "Iraten n udur", "Cut row": "Gzem adur", "Copy row": "N\u0263el adur", "Paste row before": "Sente\u1e0d adur sdat", "Paste row after": "Sente\u1e0d adur deffir", "Insert column before": "Sente\u1e0d tagejdit sdat", "Insert column after": "Sente\u1e0d tagejdit deffir", "Delete column": "Kkes tagejdit", "Cols": "Tigejda", "Rows": "Aduren", "Width": "Tehri", "Height": "Te\u0263zi", "Cell spacing": "Tlunt ger texxamin", "Cell padding": "Tama n texxamt", "Show caption": "Sken taw\u1e6d\u1e6dfa", "Left": "\u0194er zelma\u1e0d", "Center": "Di tlemmast", "Right": "\u0194er yefus", "Cell type": "Anaw n texxamt", "Scope": "Scope", "Alignment": "Tarigla", "H Align": "Tarigla taglawant", "V Align": "Tarigla taratakt", "Top": "Uksawen", "Middle": "Di tlemmast", "Bottom": "Uksar", "Header cell": "Tasen\u1e6di\u1e0dt n texxamt", "Row group": "Agraw n waduren", "Column group": "Agraw n tgejda", "Row type": "Anaw n wadur", "Header": "Tasenti\u1e0dt", "Body": "Tafka", "Footer": "A\u1e0dar", "Border color": "Ini n yiri", "Insert template...": "Ger tane\u0263ruft...", "Templates": "Timudimin", "Template": "Tine\u0263rufin", "Text color": "Ini n u\u1e0dris", "Background color": "Ini n ugilal", "Custom...": "Custom...", "Custom color": "Custom color", "No color": "Ulac ini", "Remove color": "Kkes ini", "Table of Contents": "Tafelwit n ugbur", "Show blocks": "Beqqe\u1e0d i\u1e25edran", "Show invisible characters": "Beqqe\u1e0d isekkilen uffiren", "Word count": "Am\u1e0dan n wawalen", "Count": "A\u0263rud", "Document": "Isemli", "Selection": "Tafrayt", "Words": "Awalen", "Words: {0}": "Words: {0}", "{0} words": "{0} n wawalen", "File": "Afaylu", "Edit": "\u1e92reg", "Insert": "Ger", "View": "Tamu\u0263li", "Format": "Amasal", "Table": "Tafelwit", "Tools": "Ifecka", "Powered by {0}": "Iteddu s {0} ", "Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help", "Image title": "Azwel n tugna", "Border width": "Tehri n yiri", "Border style": "A\u0263anib n yiri", "Error": "Tucc\u1e0da", "Warn": "\u0190eyyen", "Valid": "Ame\u0263tu", "To open the popup, press Shift+Enter": "Iwakken ad teldi\u1e0d asfaylu udhim, ssed Shift+Kcem", "Rich Text Area. Press ALT-0 for help.": "Ta\u0263zut n u\u1e0dris anesba\u0263ur. Ssed ALT-0 i tallelt.", "System Font": "Anagraw n tsefsa", "Failed to upload image: {0}": "Tucc\u1e0da deg usili n tugna: {0}", "Failed to load plugin: {0} from url {1}": "Tucc\u1e0da deg usili n usi\u0263zef: {0} seg url {1}", "Failed to load plugin url: {0}": "Tucc\u1e0da deg usali n usi\u0263zef: {0}", "Failed to initialize plugin: {0}": "Tucc\u1e0da deg wallus n uwennez n usi\u0263zef: {0}", "example": "amedya", "Search": "Nadi", "All": "Akk", "Currency": "Adrim", "Text": "A\u1e0dris", "Quotations": "Tinebdurin", "Mathematical": "Inemhalen usnaken", "Extended Latin": "Talatinit ye\u1e93len", "Symbols": "Izamulen", "Arrows": "Tineccabin", "User Defined": "Yesbadu-t useqdac", "dollar sign": "Azamul n dular", "currency sign": "Azamul n wedrim", "euro-currency sign": "azamul n euro", "colon sign": "azamul n kulun", "cruzeiro sign": "azamul n krutayru", "french franc sign": "azamul n f\u1e5bank afransi", "lira sign": "azamul n lira", "mill sign": "azamul n mil", "naira sign": "azamul n nayra", "peseta sign": "azamul n pizi\u1e6da", "rupee sign": "azamul n urupi", "won sign": "azamul n wun", "new sheqel sign": "azamul n ciqel amaynut", "dong sign": "azamul n dung", "kip sign": "azamul n kip", "tugrik sign": "azamul n tugrik", "drachma sign": "azamul n d\u1e5bacma", "german penny symbol": "azamul n pini almani", "peso sign": "azamul n pizu", "guarani sign": "azamul n gwa\u1e5bani", "austral sign": "azamul n ustral", "hryvnia sign": "azamul n hrivniya", "cedi sign": "azamul n siddi", "livre tournois sign": "azamul lira aturnwa", "spesmilo sign": "azamul n spismilu", "tenge sign": "azamul n tingi", "indian rupee sign": "azamul n urupi ahindi", "turkish lira sign": "azamul n lira a\u1e6durki", "nordic mark sign": "azamul n ma\u1e5bk n ugafa", "manat sign": "azamul n mana\u1e6d", "ruble sign": "azamul n rubl", "yen character": "azamul n yan", "yuan character": "azamul n yuwan", "yuan character, in hong kong and taiwan": "asekkil n yuwan, di hunkung akked \u1e6daywan", "yen\/yuan character variant one": "yan\/yuwan tasenfelt n usekkil yiwen", "Loading emoticons...": "Asali n tignitin n u\u1e25ulfu...", "Could not load emoticons": "Tucc\u1e0da deg usali n tignitin n u\u1e25ulfu", "People": "L\u0263aci", "Animals and Nature": "i\u0263ersiwen akked ugama", "Food and Drink": "Tu\u010d\u010dit akked tisit", "Activity": "Armud", "Travel and Places": "Asikel akked ime\u1e0dqan", "Objects": "Ti\u0263awsiwin", "Flags": "Annayen", "Characters": "Isekkilen", "Characters (no spaces)": "Isekkilen (tallunin ur ttekkint ara)", "{0} characters": "{0} n yisekkilen", "Error: Form submit field collision.": "Tucc\u1e0da: amgirred n wurtan di tuzzna n tferkit.", "Error: No form element found.": "Ulac aferdis n tferkit i yettwafen.", "Update": "Leqqem", "Color swatch": "Talemmict n yini", "Turquoise": "Ajenjari", "Green": "Azegzaw", "Blue": "Anili", "Purple": "Amidadi", "Navy Blue": "Anili n yilel", "Dark Turquoise": "Ajenjari a\u0263mayan", "Dark Green": "Azegzaw a\u0263mayan", "Medium Blue": "Anili alemmas", "Medium Purple": "Amidadi alemmas", "Midnight Blue": "Anili n yi\u1e0d", "Yellow": "Awra\u0263", "Orange": "A\u010d\u010dinawi", "Red": "Azegga\u0263", "Light Gray": "Amelli\u0263di afaw", "Gray": "Amelli\u0263di", "Dark Yellow": "Awra\u0263 a\u0263mayan", "Dark Orange": "A\u010dinawi a\u0263mayan", "Dark Red": "Azegga\u0263 a\u0263mayan", "Medium Gray": "Amelli\u0263di alemmas", "Dark Gray": "Amelli\u0263di a\u0263mayan", "Light Green": "Azegzaw afaw", "Light Yellow": "Awra\u0263 afaw", "Light Red": "Azegga\u0263 afaw", "Light Purple": "Amidadi afaw", "Light Blue": "Anili afaw", "Dark Purple": "Amidadi a\u0263mayan", "Dark Blue": "Anili a\u0263mayan", "Black": "Aberkan", "White": "Amellal", "Switch to or from fullscreen mode": "Kcem ne\u0263 ffe\u0263 agdil a\u010d\u010duran", "Open help dialog": "Ldi tankult n udiwenni n tallelt", "history": "Amazray", "styles": "i\u0263unab", "formatting": "amsal", "alignment": "aderrec", "indentation": "asi\u1e93i", "permanent pen": "imru ama\u0263lal", "comments": "iwenniten", "Format Painter": "Sisleg amsal", "Insert\/edit iframe": "Ger\/\u1e92reg akatar", "Capitalization": "Selket s asekkil ameqran", "lowercase": "asekkil amec\u1e6du\u1e25", "UPPERCASE": "ASEKKIL AMEQRAN", "Title Case": "Taj\u1e5but n uzwel", "Permanent Pen Properties": "Iraten n yimru ama\u0263lal", "Permanent pen properties...": "Iraten n yimru ama\u0263lal...", "Font": "Tasefsit", "Size": "Tiddi", "More...": "Ugar...", "Spellcheck Language": "Tutlayt n umse\u0263ti n tira", "Select...": "Fren...", "Preferences": "Imenyafen", "Yes": "Ih", "No": "Ala", "Keyboard Navigation": "Tunigin s unasiw", "Version": "Lqem", "Anchor": "Tamdeyt", "Special character": "Askil uslig", "Code sample": "Tikkest n tengalt", "Color": "Ini", "Emoticons": "Emoticons", "Document properties": "Iraten n warat", "Image": "Tugna", "Insert link": "Ger azday", "Target": "Target", "Link": "Ase\u0263wen", "Poster": "Poster", "Media": "Amidya", "Print": "Siggez", "Prev": "Win yezrin", "Find and replace": "Nadi semselsi", "Whole words": "Awal ummid", "Spellcheck": "Ase\u0263ti n tira", "Caption": "Caption", "Insert template": "Ger tamuddimt" }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/tinymce/langs/kk.js ================================================ tinymce.addI18n('kk',{ "Redo": "\u049a\u0430\u0439\u0442\u0430\u0440\u0443", "Undo": "\u0411\u043e\u043b\u0434\u044b\u0440\u043c\u0430\u0443", "Cut": "\u049a\u0438\u044b\u043f \u0430\u043b\u0443", "Copy": "\u041a\u04e9\u0448\u0456\u0440\u0443", "Paste": "\u049a\u043e\u044e", "Select all": "\u0411\u0430\u0440\u043b\u044b\u0493\u044b\u043d \u0442\u0430\u04a3\u0434\u0430\u0443", "New document": "\u0416\u0430\u04a3\u0430 \u049b\u04b1\u0436\u0430\u0442", "Ok": "\u041e\u041a", "Cancel": "\u0411\u0430\u0441 \u0442\u0430\u0440\u0442\u0443", "Visual aids": "\u041a\u04e9\u0440\u043d\u0435\u043a\u0456 \u049b\u04b1\u0440\u0430\u043b\u0434\u0430\u0440", "Bold": "\u049a\u0430\u043b\u044b\u04a3", "Italic": "\u041a\u04e9\u043b\u0431\u0435\u0443", "Underline": "\u0410\u0441\u0442\u044b \u0441\u044b\u0437\u044b\u043b\u0493\u0430\u043d", "Strikethrough": "\u0421\u044b\u0437\u044b\u043b\u0493\u0430\u043d", "Superscript": "\u0416\u043e\u043b \u04af\u0441\u0442\u0456", "Subscript": "\u0416\u043e\u043b \u0430\u0441\u0442\u044b", "Clear formatting": "\u041f\u0456\u0448\u0456\u043c\u0434\u0435\u0443\u0434\u0456 \u0442\u0430\u0437\u0430\u043b\u0430\u0443", "Align left": "\u0421\u043e\u043b\u0493\u0430 \u0442\u0443\u0440\u0430\u043b\u0430\u0443", "Align center": "\u041e\u0440\u0442\u0430\u0441\u044b\u043d\u0430 \u0442\u0443\u0440\u0430\u043b\u0430\u0443", "Align right": "\u041e\u04a3\u0493\u0430 \u0442\u0443\u0440\u0430\u043b\u0430\u0443", "Justify": "\u0415\u043d\u0456 \u0431\u043e\u0439\u044b\u043d\u0448\u0430 \u0442\u0443\u0440\u0430\u043b\u0430\u0443", "Bullet list": "\u0422\u0430\u04a3\u0431\u0430\u043b\u0430\u043d\u0493\u0430\u043d \u0442\u0456\u0437\u0456\u043c", "Numbered list": "\u041d\u04e9\u043c\u0456\u0440\u043b\u0435\u043d\u0433\u0435\u043d \u0442\u0456\u0437\u0456\u043c", "Decrease indent": "\u0428\u0435\u0433\u0456\u043d\u0456\u0441\u0442\u0456 \u043a\u0435\u043c\u0456\u0442\u0443", "Increase indent": "\u0428\u0435\u0433\u0456\u043d\u0456\u0441\u0442\u0456 \u0430\u0440\u0442\u0442\u044b\u0440\u0443", "Close": "\u0416\u0430\u0431\u0443", "Formats": "\u041f\u0456\u0448\u0456\u043c\u0434\u0435\u0440", "Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u0411\u0440\u0430\u0443\u0437\u0435\u0440\u0456\u04a3\u0456\u0437 \u0430\u0440\u0430\u043b\u044b\u049b \u0441\u0430\u049b\u0442\u0430\u0493\u044b\u0448\u049b\u0430 \u0442\u0456\u043a\u0435\u043b\u0435\u0439 \u049b\u0430\u0442\u044b\u043d\u0430\u0439 \u0430\u043b\u043c\u0430\u0439\u0434\u044b. Ctrl+X\/C\/V \u043f\u0435\u0440\u043d\u0435\u043b\u0435\u0440 \u0442\u0456\u0440\u043a\u0435\u0441\u0456\u043c\u0456\u043d \u043f\u0430\u0439\u0434\u0430\u043b\u0430\u043d\u044b\u04a3\u044b\u0437.", "Headers": "\u0422\u0430\u049b\u044b\u0440\u044b\u043f\u0448\u0430\u043b\u0430\u0440", "Header 1": "\u0422\u0430\u049b\u044b\u0440\u044b\u043f\u0448\u0430 1", "Header 2": "\u0422\u0430\u049b\u044b\u0440\u044b\u043f\u0448\u0430 2", "Header 3": "\u0422\u0430\u049b\u044b\u0440\u044b\u043f\u0448\u0430 3", "Header 4": "\u0422\u0430\u049b\u044b\u0440\u044b\u043f\u0448\u0430 4", "Header 5": "\u0422\u0430\u049b\u044b\u0440\u044b\u043f\u0448\u0430 5", "Header 6": "\u0422\u0430\u049b\u044b\u0440\u044b\u043f\u0448\u0430 6", "Headings": "\u0422\u0430\u049b\u044b\u0440\u044b\u043f\u0442\u0430\u0440", "Heading 1": "1-\u0442\u0430\u049b\u044b\u0440\u044b\u043f", "Heading 2": "2-\u0442\u0430\u049b\u044b\u0440\u044b\u043f", "Heading 3": "3-\u0442\u0430\u049b\u044b\u0440\u044b\u043f", "Heading 4": "4-\u0442\u0430\u049b\u044b\u0440\u044b\u043f", "Heading 5": "5-\u0442\u0430\u049b\u044b\u0440\u044b\u043f", "Heading 6": "6-\u0442\u0430\u049b\u044b\u0440\u044b\u043f", "Preformatted": "\u0410\u043b\u0434\u044b\u043d \u0430\u043b\u0430 \u043f\u0456\u0448\u0456\u043c\u0434\u0435\u043b\u0433\u0435\u043d", "Div": "Div", "Pre": "Pre", "Code": "\u041a\u043e\u0434", "Paragraph": "\u041f\u0430\u0440\u0430\u0433\u0440\u0430\u0444", "Blockquote": "\u0414\u04d9\u0439\u0435\u043a\u0441\u04e9\u0437", "Inline": "\u041a\u0456\u0440\u0456\u0441\u0442\u0456\u0440\u0456\u043b\u0433\u0435\u043d", "Blocks": "\u0411\u043b\u043e\u043a\u0442\u0430\u0440", "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u041e\u0441\u044b \u043e\u043f\u0446\u0438\u044f \u04e9\u0448\u0456\u0440\u0456\u043b\u043c\u0435\u0433\u0435\u043d\u0448\u0435, \u0431\u0443\u0444\u0435\u0440\u0434\u0435\u0433\u0456 \u043c\u04d9\u0442\u0456\u043d \u043a\u04d9\u0434\u0456\u043c\u0433\u0456 \u043c\u04d9\u0442\u0456\u043d \u0440\u0435\u0442\u0456\u043d\u0434\u0435 \u049b\u043e\u0439\u044b\u043b\u0430\u0434\u044b.", "Fonts": "\u049a\u0430\u0440\u0456\u043f\u0442\u0435\u0440", "Font Sizes": "\u049a\u0430\u0440\u0456\u043f \u04e9\u043b\u0448\u0435\u043c\u0434\u0435\u0440\u0456", "Class": "\u0421\u044b\u043d\u044b\u043f", "Browse for an image": "\u041a\u0435\u0441\u043a\u0456\u043d\u0434\u0456 \u0448\u043e\u043b\u0443", "OR": "\u041d\u0415\u041c\u0415\u0421\u0415", "Drop an image here": "\u041a\u0435\u0441\u043a\u0456\u043d\u0434\u0456 \u043e\u0441\u044b \u0436\u0435\u0440\u0434\u0435 \u0442\u0430\u0441\u0442\u0430\u04a3\u044b\u0437", "Upload": "\u0416\u04af\u043a\u0442\u0435\u043f \u0441\u0430\u043b\u0443", "Block": "\u0411\u043b\u043e\u043a", "Align": "\u0422\u0443\u0440\u0430\u043b\u0430\u0443", "Default": "\u04d8\u0434\u0435\u043f\u043a\u0456", "Circle": "\u0428\u0435\u04a3\u0431\u0435\u0440", "Disc": "\u0414\u0438\u0441\u043a", "Square": "\u0428\u0430\u0440\u0448\u044b", "Lower Alpha": "\u041a\u0456\u0448\u0456 \u04d9\u0440\u0456\u043f\u0442\u0435\u0440", "Lower Greek": "\u041a\u0456\u0448\u0456 \u0433\u0440\u0435\u043a \u04d9\u0440\u0456\u043f\u0442\u0435\u0440\u0456", "Lower Roman": "\u041a\u0456\u0448\u0456 \u0440\u0438\u043c \u0446\u0438\u0444\u0440\u043b\u0430\u0440\u044b", "Upper Alpha": "\u0411\u0430\u0441 \u04d9\u0440\u0456\u043f\u0442\u0435\u0440", "Upper Roman": "\u0411\u0430\u0441 \u0440\u0438\u043c \u0446\u0438\u0444\u0440\u043b\u0430\u0440\u044b", "Anchor...": "\u0421\u0456\u043b\u0442\u0435\u043c\u0435...", "Name": "\u0410\u0442\u044b", "Id": "Id", "Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Id \u0442\u0435\u043a \u049b\u0430\u043d\u0430 \u04d9\u0440\u0456\u043f\u0442\u0435\u043d \u0431\u0430\u0441\u0442\u0430\u043b\u044b\u043f, \u04d9\u0440\u0456\u043f\u0442\u0435\u0440, \u0441\u0430\u043d\u0434\u0430\u0440, \u0441\u044b\u0437\u044b\u049b\u0448\u0430\u043b\u0430\u0440, \u043d\u04af\u043a\u0442\u0435\u043b\u0435\u0440 \u0436\u04d9\u043d\u0435 \u0442.\u0431 \u0436\u0430\u043b\u0493\u0430\u0441\u0443\u044b \u0442\u0438\u0456\u0441.", "You have unsaved changes are you sure you want to navigate away?": "\u0421\u0430\u049b\u0442\u0430\u043b\u043c\u0430\u0493\u0430\u043d \u04e9\u0437\u0433\u0435\u0440\u0456\u0441\u0442\u0435\u0440 \u0431\u0430\u0440. \u0421\u0456\u0437 \u0448\u044b\u043d\u044b\u043c\u0435\u043d \u0431\u0430\u0441\u049b\u0430 \u0436\u0435\u0440\u0433\u0435 \u043a\u0435\u0442\u0443\u0434\u0456 \u049b\u0430\u043b\u0430\u0439\u0441\u044b\u0437 \u0431\u0430?", "Restore last draft": "\u0421\u043e\u04a3\u0493\u044b \u0441\u0430\u049b\u0442\u0430\u043b\u0493\u0430\u043d\u0434\u044b \u049b\u0430\u043b\u043f\u044b\u043d\u0430 \u043a\u0435\u043b\u0442\u0456\u0440\u0443", "Special character...": "\u0410\u0440\u043d\u0430\u0439\u044b \u0442\u0430\u04a3\u0431\u0430...", "Source code": "\u0411\u0430\u0441\u0442\u0430\u043f\u049b\u044b \u043a\u043e\u0434", "Insert\/Edit code sample": "\u041a\u043e\u0434 \u04af\u043b\u0433\u0456\u0441\u0456\u043d \u043a\u0456\u0440\u0456\u0441\u0442\u0456\u0440\u0443\/\u0442\u04af\u0437\u0435\u0442\u0443", "Language": "\u0422\u0456\u043b", "Code sample...": "\u041a\u043e\u0434 \u04af\u043b\u0433\u0456\u0441\u0456...", "Color Picker": "\u0422\u04af\u0441 \u0442\u0430\u04a3\u0434\u0430\u0443 \u049b\u04b1\u0440\u0430\u043b\u044b", "R": "R", "G": "G", "B": "B", "Left to right": "\u0421\u043e\u043b\u0434\u0430\u043d \u043e\u04a3\u0493\u0430", "Right to left": "\u041e\u04a3\u043d\u0430\u043d \u0441\u043e\u043b\u0493\u0430", "Emoticons...": "\u042d\u043c\u043e\u0442\u0438\u043a\u043e\u043d\u0434\u0430\u0440...", "Metadata and Document Properties": "\u041c\u0435\u0442\u0430\u0434\u0435\u0440\u0435\u043a\u0442\u0435\u0440 \u0436\u04d9\u043d\u0435 \u049b\u04b1\u0436\u0430\u0442 \u0441\u0438\u043f\u0430\u0442\u0442\u0430\u0440\u044b", "Title": "\u0410\u0442\u0430\u0443\u044b", "Keywords": "Meta-keywords", "Description": "\u0421\u0438\u043f\u0430\u0442\u0442\u0430\u043c\u0430\u0441\u044b", "Robots": "Meta-robots", "Author": "Meta-author", "Encoding": "Meta-charset", "Fullscreen": "\u0422\u043e\u043b\u044b\u049b \u044d\u043a\u0440\u0430\u043d", "Action": "\u04d8\u0440\u0435\u043a\u0435\u0442", "Shortcut": "\u041f\u0435\u0440\u043d\u0435\u043b\u0435\u0440 \u0442\u0456\u0440\u043a\u0435\u0441\u0456\u043c\u0456", "Help": "\u0410\u043d\u044b\u049b\u0442\u0430\u043c\u0430", "Address": "\u041c\u0435\u043a\u0435\u043d\u0436\u0430\u0439", "Focus to menubar": "\u041c\u04d9\u0437\u0456\u0440 \u0436\u043e\u043b\u0430\u0493\u044b\u043d \u0444\u043e\u043a\u0443\u0441\u0442\u0430\u0443", "Focus to toolbar": "\u049a\u04b1\u0440\u0430\u043b\u0434\u0430\u0440 \u0442\u0430\u049b\u0442\u0430\u0441\u044b\u043d \u0444\u043e\u043a\u0443\u0441\u0442\u0430\u0443", "Focus to element path": "\u042d\u043b\u0435\u043c\u0435\u043d\u0442 \u0436\u043e\u043b\u044b\u043d \u0444\u043e\u043a\u0443\u0441\u0442\u0430\u0443", "Focus to contextual toolbar": "\u041c\u04d9\u0442\u0456\u043d\u043c\u04d9\u043d\u0434\u0456\u043a \u049b\u04b1\u0440\u0430\u043b\u0434\u0430\u0440 \u0442\u0430\u049b\u0442\u0430\u0441\u044b\u043d \u0444\u043e\u043a\u0443\u0441\u0442\u0430\u0443", "Insert link (if link plugin activated)": "\u0421\u0456\u043b\u0442\u0435\u043c\u0435\u043d\u0456 \u043a\u0456\u0440\u0456\u0441\u0442\u0456\u0440\u0443 (\u0441\u0456\u043b\u0442\u0435\u043c\u0435 \u049b\u043e\u0441\u044b\u043b\u0430\u0442\u044b\u043d \u043c\u043e\u0434\u0443\u043b\u0456 \u0431\u0435\u043b\u0441\u0435\u043d\u0434\u0456\u0440\u0456\u043b\u0433\u0435\u043d \u0431\u043e\u043b\u0441\u0430)", "Save (if save plugin activated)": "\u0421\u0430\u049b\u0442\u0430\u0443 (\u0441\u0430\u049b\u0442\u0430\u0443 \u049b\u043e\u0441\u044b\u043b\u0430\u0442\u044b\u043d \u049b\u043e\u0441\u044b\u043b\u0430\u0442\u044b\u043d \u043c\u043e\u0434\u0443\u043b\u0456 \u0431\u0435\u043b\u0441\u0435\u043d\u0434\u0456\u0440\u0456\u043b\u0433\u0435\u043d \u0431\u043e\u043b\u0441\u0430)", "Find (if searchreplace plugin activated)": "\u0422\u0430\u0431\u0443 (\u0456\u0437\u0434\u0435\u0443\/\u0430\u0443\u044b\u0441\u0442\u044b\u0440\u0443 \u049b\u043e\u0441\u044b\u043b\u0430\u0442\u044b\u043d \u043c\u043e\u0434\u0443\u043b\u0456 \u0431\u0435\u043b\u0441\u0435\u043d\u0434\u0456\u0440\u0456\u043b\u0433\u0435\u043d \u0431\u043e\u043b\u0441\u0430)", "Plugins installed ({0}):": "\u041e\u0440\u043d\u0430\u0442\u044b\u043b\u0493\u0430\u043d \u049b\u043e\u0441\u044b\u043b\u0430\u0442\u044b\u043d \u043c\u043e\u0434\u0443\u043b\u044c\u0434\u0435\u0440 ({0}):", "Premium plugins:": "\u041f\u0440\u0435\u043c\u0438\u0443\u043c \u049b\u043e\u0441\u044b\u043b\u0430\u0442\u044b\u043d \u043c\u043e\u0434\u0443\u043b\u044c\u0434\u0435\u0440:", "Learn more...": "\u049a\u043e\u0441\u044b\u043c\u0448\u0430 \u043c\u04d9\u043b\u0456\u043c\u0435\u0442\u0442\u0435\u0440...", "You are using {0}": "\u0421\u0456\u0437 {0} \u043f\u0430\u0439\u0434\u0430\u043b\u0430\u043d\u0443\u0434\u0430\u0441\u044b\u0437", "Plugins": "\u049a\u043e\u0441\u044b\u043b\u0430\u0442\u044b\u043d \u043c\u043e\u0434\u0443\u043b\u044c\u0434\u0435\u0440", "Handy Shortcuts": "\u042b\u04a3\u0493\u0430\u0439\u043b\u044b \u043f\u0435\u0440\u043d\u0435\u043b\u0435\u0440 \u0442\u0456\u0440\u043a\u0435\u0441\u0456\u043c\u0434\u0435\u0440\u0456", "Horizontal line": "\u041a\u04e9\u043b\u0434\u0435\u043d\u0435\u04a3 \u0441\u044b\u0437\u044b\u049b", "Insert\/edit image": "\u0421\u0443\u0440\u0435\u0442 \u043a\u0456\u0440\u0456\u0441\u0442\u0456\u0440\u0443\/\u0442\u04af\u0437\u0435\u0442\u0443", "Image description": "\u0421\u0443\u0440\u0435\u0442 \u0441\u0438\u043f\u0430\u0442\u0442\u0430\u043c\u0430\u0441\u044b", "Source": "\u0410\u0434\u0440\u0435\u0441\u0456", "Dimensions": "\u04e8\u043b\u0448\u0435\u043c\u0434\u0435\u0440\u0456", "Constrain proportions": "\u041f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u044f\u043b\u0430\u0440\u0434\u044b \u0441\u0430\u049b\u0442\u0430\u0443", "General": "\u0416\u0430\u043b\u043f\u044b", "Advanced": "\u049a\u043e\u0441\u044b\u043c\u0448\u0430", "Style": "\u0421\u0442\u0438\u043b\u0456", "Vertical space": "\u0422\u0456\u043a \u043a\u0435\u04a3\u0434\u0456\u0433\u0456", "Horizontal space": "\u041a\u04e9\u043b\u0434\u0435\u043d\u0435\u04a3\u0456\u043d\u0435\u043d \u049b\u0430\u043b\u0430\u0442\u044b\u043d \u043e\u0440\u044b\u043d", "Border": "\u0416\u0438\u0435\u0433\u0456", "Insert image": "\u0421\u0443\u0440\u0435\u0442 \u043a\u0456\u0440\u0456\u0441\u0442\u0456\u0440\u0443", "Image...": "\u041a\u0435\u0441\u043a\u0456\u043d...", "Image list": "\u041a\u0435\u0441\u043a\u0456\u043d\u0434\u0435\u0440 \u0442\u0456\u0437\u0456\u043c\u0456", "Rotate counterclockwise": "\u0421\u0430\u0493\u0430\u0442 \u0442\u0456\u043b\u0456\u043d\u0456\u04a3 \u0431\u0430\u0493\u044b\u0442\u044b\u043d\u0430 \u049b\u0430\u0440\u0441\u044b \u0431\u04b1\u0440\u0443", "Rotate clockwise": "\u0421\u0430\u0493\u0430\u0442 \u0442\u0456\u043b\u0456\u043d\u0456\u04a3 \u0431\u0430\u0493\u044b\u0442\u044b\u043c\u0435\u043d \u0431\u04b1\u0440\u0443", "Flip vertically": "\u0422\u0456\u0433\u0456\u043d\u0435\u043d \u0430\u0443\u0434\u0430\u0440\u0443", "Flip horizontally": "\u041a\u04e9\u043b\u0434\u0435\u043d\u0435\u04a3\u043d\u0435\u043d \u0430\u0443\u0434\u0430\u0440\u0443", "Edit image": "\u0421\u0443\u0440\u0435\u0442\u0442\u0456 \u04e9\u0437\u0433\u0435\u0440\u0442\u0443", "Image options": "\u0421\u0443\u0440\u0435\u0442 \u0431\u0430\u043f\u0442\u0430\u0443\u043b\u0430\u0440\u044b", "Zoom in": "\u0416\u0430\u049b\u044b\u043d\u0434\u0430\u0442\u0443", "Zoom out": "\u0410\u043b\u044b\u0441\u0442\u0430\u0442\u0443", "Crop": "\u041a\u0435\u0441\u0443", "Resize": "\u04e8\u043b\u0448\u0435\u043c\u0456\u043d \u04e9\u0437\u0433\u0435\u0440\u0442\u0443", "Orientation": "\u0411\u0430\u0493\u0434\u0430\u0440", "Brightness": "\u0410\u0448\u044b\u049b\u0442\u0430\u0443", "Sharpen": "\u041d\u0430\u049b\u0442\u044b\u043b\u0430\u0443", "Contrast": "\u049a\u043e\u044e\u043b\u0430\u0442\u0443", "Color levels": "\u0422\u04af\u0441 \u0434\u0435\u04a3\u0433\u0435\u0439\u043b\u0435\u0440\u0456", "Gamma": "\u0413\u0430\u043c\u043c\u0430", "Invert": "\u041a\u0456\u0440\u0456\u0441\u0442\u0456\u0440\u0443", "Apply": "\u0421\u0430\u049b\u0442\u0430\u0443", "Back": "\u0410\u0440\u0442\u049b\u0430", "Insert date\/time": "\u041a\u04af\u043d\/\u0443\u0430\u049b\u044b\u0442 \u043a\u0456\u0440\u0456\u0441\u0442\u0456\u0440\u0443", "Date\/time": "\u041a\u04af\u043d\/\u0443\u0430\u049b\u044b\u0442", "Insert\/Edit Link": "\u0421\u0456\u043b\u0442\u0435\u043c\u0435 \u043a\u0456\u0440\u0456\u0441\u0442\u0456\u0440\u0443\/\u04e9\u04a3\u0434\u0435\u0443", "Insert\/edit link": "\u0421\u0456\u043b\u0442\u0435\u043c\u0435 \u043a\u0456\u0440\u0456\u0441\u0442\u0456\u0440\u0443\/\u0442\u04af\u0437\u0435\u0442\u0443", "Text to display": "\u041a\u04e9\u0440\u0441\u0435\u0442\u0456\u043b\u0435\u0442\u0456\u043d \u043c\u04d9\u0442\u0456\u043d", "Url": "URL-\u0430\u0434\u0440\u0435\u0441\u0456", "Open link in...": "\u0421\u0456\u043b\u0442\u0435\u043c\u0435\u043d\u0456 \u0430\u0448\u0443...", "Current window": "\u0410\u0493\u044b\u043c\u0434\u0430\u0493\u044b \u0442\u0435\u0440\u0435\u0437\u0435", "None": "\u0416\u043e\u049b", "New window": "\u0416\u0430\u04a3\u0430 \u0442\u0435\u0440\u0435\u0437\u0435", "Remove link": "\u0421\u0456\u043b\u0442\u0435\u043c\u0435\u043d\u0456 \u0430\u043b\u044b\u043f \u0442\u0430\u0441\u0442\u0430\u0443", "Anchors": "\u0421\u0456\u043b\u0442\u0435\u043c\u0435\u043b\u0435\u0440", "Link...": "\u0421\u0456\u043b\u0442\u0435\u043c\u0435...", "Paste or type a link": "\u0421\u0456\u043b\u0442\u0435\u043c\u0435\u043d\u0456 \u049b\u043e\u0439\u044b\u04a3\u044b\u0437 \u043d\u0435\u043c\u0435\u0441\u0435 \u0442\u0435\u0440\u0456\u04a3\u0456\u0437", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u0421\u0456\u0437 \u0435\u04a3\u0433\u0456\u0437\u0456\u043f \u0442\u04b1\u0440\u0493\u0430\u043d URL e-mail \u0430\u0434\u0440\u0435\u0441\u0456 \u0431\u043e\u043b\u044b\u043f \u0442\u0430\u0431\u044b\u043b\u0430\u0434\u044b. \u0410\u043b\u0434\u044b\u043d\u0430 mailto: \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0456\u043d \u049b\u043e\u0441\u0443\u0434\u044b \u049b\u0430\u043b\u0430\u0439\u0441\u044b\u0437 \u0431\u0430?", "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\u0421\u0456\u0437 \u0435\u04a3\u0433\u0456\u0437\u0456\u043f \u0442\u04b1\u0440\u0493\u0430\u043d URL \u0441\u044b\u0440\u0442\u049b\u044b \u0441\u0456\u043b\u0442\u0435\u043c\u0435 \u0431\u043e\u043b\u044b\u043f \u0442\u0430\u0431\u044b\u043b\u0430\u0434\u044b. \u0410\u043b\u0434\u044b\u043d\u0430 http:\/\/ \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0456\u043d \u049b\u043e\u0441\u0443\u0434\u044b \u049b\u0430\u043b\u0430\u0439\u0441\u044b\u0437 \u0431\u0430?", "Link list": "\u0421\u0456\u043b\u0442\u0435\u043c\u0435\u043b\u0435\u0440 \u0442\u0456\u0437\u0456\u043c\u0456", "Insert video": "\u0412\u0438\u0434\u0435\u043e \u043a\u0456\u0440\u0456\u0441\u0442\u0456\u0440\u0443", "Insert\/edit video": "\u0412\u0438\u0434\u0435\u043e \u043a\u0456\u0440\u0456\u0441\u0442\u0456\u0440\u0443\/\u0442\u04af\u0437\u0435\u0442\u0443", "Insert\/edit media": "\u041c\u0435\u0434\u0438\u0430 \u043a\u0456\u0440\u0456\u0441\u0442\u0456\u0440\u0443\/\u0442\u04af\u0437\u0435\u0442\u0443", "Alternative source": "\u049a\u043e\u0441\u044b\u043c\u0448\u0430 \u0430\u0434\u0440\u0435\u0441\u0456", "Alternative source URL": "\u0411\u0430\u043b\u0430\u043c\u0430\u043b\u044b \u043a\u04e9\u0437\u0434\u0456\u04a3 URL \u043c\u0435\u043a\u0435\u043d\u0436\u0430\u0439\u044b", "Media poster (Image URL)": "\u041c\u0435\u0434\u0438\u0430\u0444\u0430\u0439\u043b\u0434\u044b \u0436\u0430\u0440\u0438\u044f\u043b\u0430\u0443\u0448\u044b (\u043a\u0435\u0441\u043a\u0456\u043d\u043d\u0456\u04a3 URL \u043c\u0435\u043a\u0435\u043d\u0436\u0430\u0439\u044b)", "Paste your embed code below:": "\u0422\u04e9\u043c\u0435\u043d\u0434\u0435\u0433\u0456 \u043a\u043e\u0434\u0442\u044b \u043a\u04e9\u0448\u0456\u0440\u0456\u043f \u0430\u043b\u044b\u043f, \u049b\u043e\u0439\u044b\u04a3\u044b\u0437:", "Embed": "\u0415\u043d\u0434\u0456\u0440\u0443", "Media...": "\u041c\u0435\u0434\u0438\u0430\u0444\u0430\u0439\u043b...", "Nonbreaking space": "\u04ae\u0437\u0434\u0456\u043a\u0441\u0456\u0437 \u0431\u043e\u0441 \u043e\u0440\u044b\u043d", "Page break": "\u0411\u0435\u0442 \u04af\u0437\u0456\u043b\u0456\u043c\u0456", "Paste as text": "\u041c\u04d9\u0442\u0456\u043d \u0440\u0435\u0442\u0456\u043d\u0434\u0435 \u049b\u043e\u044e", "Preview": "\u0410\u043b\u0434\u044b\u043d-\u0430\u043b\u0430 \u049b\u0430\u0440\u0430\u0443", "Print...": "\u0411\u0430\u0441\u044b\u043f \u0448\u044b\u0493\u0430\u0440\u0443...", "Save": "\u0421\u0430\u049b\u0442\u0430\u0443", "Find": "\u0422\u0430\u0431\u044b\u043b\u0430\u0442\u044b\u043d \u043c\u04d9\u0442\u0456\u043d", "Replace with": "\u0410\u0443\u044b\u0441\u0442\u044b\u0440\u0430\u0442\u044b\u043d \u043c\u04d9\u0442\u0456\u043d", "Replace": "\u0410\u0443\u044b\u0441\u0442\u044b\u0440\u0443", "Replace all": "\u0411\u0430\u0440\u043b\u044b\u0493\u044b\u043d \u0430\u0443\u044b\u0441\u0442\u044b\u0440\u0443", "Previous": "\u0410\u043b\u0434\u044b\u04a3\u0493\u044b", "Next": "\u041a\u0435\u043b\u0435\u0441\u0456", "Find and replace...": "\u0422\u0430\u0431\u0443 \u0436\u04d9\u043d\u0435 \u0430\u0443\u044b\u0441\u0442\u044b\u0440\u0443...", "Could not find the specified string.": "\u041a\u04e9\u0440\u0441\u0435\u0442\u0456\u043b\u0433\u0435\u043d \u0436\u043e\u043b \u0442\u0430\u0431\u044b\u043b\u043c\u0430\u0434\u044b.", "Match case": "\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0434\u0456 \u0435\u0441\u043a\u0435\u0440\u0443", "Find whole words only": "\u0422\u0435\u043a \u0431\u04af\u0442\u0456\u043d \u0441\u04e9\u0437\u0434\u0435\u0440\u0434\u0456 \u0442\u0430\u0431\u0443", "Spell check": "\u0415\u043c\u043b\u0435\u043d\u0456 \u0442\u0435\u043a\u0441\u0435\u0440\u0443", "Ignore": "\u0415\u043b\u0435\u043c\u0435\u0443", "Ignore all": "\u0415\u0448\u049b\u0430\u0439\u0441\u044b\u0441\u044b\u043d \u0435\u043b\u0435\u043c\u0435\u0443", "Finish": "\u0410\u044f\u049b\u0442\u0430\u0443", "Add to Dictionary": "\u0421\u04e9\u0437\u0434\u0456\u043a\u043a\u0435 \u043a\u0456\u0440\u0456\u0441\u0442\u0456\u0440\u0443", "Insert table": "\u041a\u0435\u0441\u0442\u0435 \u043a\u0456\u0440\u0456\u0441\u0442\u0456\u0440\u0443", "Table properties": "\u041a\u0435\u0441\u0442\u0435 \u0441\u0438\u043f\u0430\u0442\u0442\u0430\u0440\u044b", "Delete table": "\u041a\u0435\u0441\u0442\u0435\u043d\u0456 \u0436\u043e\u044e", "Cell": "\u04b0\u044f\u0448\u044b\u049b", "Row": "\u0416\u043e\u043b", "Column": "\u0411\u0430\u0493\u0430\u043d", "Cell properties": "\u04b0\u044f\u0448\u044b\u049b \u0441\u0438\u043f\u0430\u0442\u0442\u0430\u0440\u044b", "Merge cells": "\u04b0\u044f\u0448\u044b\u049b\u0442\u0430\u0440\u0434\u044b \u0431\u0456\u0440\u0456\u043a\u0442\u0456\u0440\u0443", "Split cell": "\u04b0\u044f\u0448\u044b\u049b\u0442\u044b \u0431\u04e9\u043b\u0443", "Insert row before": "\u04ae\u0441\u0442\u0456\u043d\u0435 \u0436\u043e\u043b \u049b\u043e\u0441\u0443", "Insert row after": "\u0410\u0441\u0442\u044b\u043d\u0430 \u0436\u043e\u043b \u049b\u043e\u0441\u0443", "Delete row": "\u0416\u043e\u043b\u0434\u044b \u0436\u043e\u044e", "Row properties": "\u0416\u043e\u043b \u0441\u0438\u043f\u0430\u0442\u0442\u0430\u0440\u044b", "Cut row": "\u0416\u043e\u043b\u0434\u044b \u049b\u0438\u044b\u043f \u0430\u043b\u0443", "Copy row": "\u0416\u043e\u043b\u0434\u044b \u043a\u04e9\u0448\u0456\u0440\u0443", "Paste row before": "\u0416\u043e\u043b\u0434\u044b\u04a3 \u04af\u0441\u0442\u0456\u043d\u0435 \u049b\u043e\u044e", "Paste row after": "\u0416\u043e\u043b\u0434\u044b\u04a3 \u0430\u0441\u0442\u044b\u043d\u0430 \u049b\u043e\u044e", "Insert column before": "\u0410\u043b\u0434\u044b\u043d\u0430 \u0431\u0430\u0493\u0430\u043d \u049b\u043e\u0441\u0443", "Insert column after": "\u0410\u0440\u0442\u044b\u043d\u0430 \u0431\u0430\u0493\u0430\u043d \u049b\u043e\u0441\u0443", "Delete column": "\u0411\u0430\u0493\u0430\u043d\u0434\u044b \u0436\u043e\u044e", "Cols": "\u0411\u0430\u0493\u0430\u043d\u044b", "Rows": "\u0416\u043e\u043b\u044b", "Width": "\u04b0\u0437\u044b\u043d\u0434\u044b\u0493\u044b", "Height": "\u0411\u0438\u0456\u043a\u0442\u0456\u0433\u0456", "Cell spacing": "\u04b0\u044f\u0448\u044b\u049b \u0430\u0440\u0430\u043b\u044b\u0493\u044b", "Cell padding": "\u04b0\u044f\u0448\u044b\u049b \u043a\u0435\u04a3\u0434\u0456\u0433\u0456", "Show caption": "\u0416\u0430\u0437\u0431\u0430\u043d\u044b \u043a\u04e9\u0440\u0441\u0435\u0442\u0443", "Left": "\u0421\u043e\u043b\u0493\u0430", "Center": "\u041e\u0440\u0442\u0430\u0441\u044b\u043d\u0430", "Right": "\u041e\u04a3\u0493\u0430", "Cell type": "\u04b0\u044f\u0448\u044b\u049b \u0442\u0438\u043f\u0456", "Scope": "\u0410\u0443\u043c\u0430\u0493\u044b", "Alignment": "\u041e\u0440\u043d\u0430\u043b\u0430\u0441\u0443\u044b", "H Align": "\u041a\u04e9\u043b\u0434\u0435\u043d\u0435\u04a3\u043d\u0435\u043d \u0442\u0443\u0440\u0430\u043b\u0430\u0443", "V Align": "\u0422\u0456\u0433\u0456\u043d\u0435\u043d \u0442\u0443\u0440\u0430\u043b\u0430\u0443", "Top": "\u04ae\u0441\u0442\u0456", "Middle": "\u041e\u0440\u0442\u0430\u0441\u044b", "Bottom": "\u0410\u0441\u0442\u044b", "Header cell": "\u0422\u0430\u049b\u044b\u0440\u044b\u043f\u0448\u0430 \u04b1\u044f\u0448\u044b\u049b", "Row group": "\u0416\u043e\u043b \u0442\u043e\u0431\u044b", "Column group": "\u0411\u0430\u0493\u0430\u043d \u0442\u043e\u0431\u044b", "Row type": "\u0416\u043e\u043b \u0442\u0438\u043f\u0456", "Header": "\u0411\u0430\u0441 \u0436\u0430\u0493\u044b", "Body": "\u041d\u0435\u0433\u0456\u0437\u0433\u0456 \u0431\u04e9\u043b\u0456\u0433\u0456", "Footer": "\u0410\u044f\u049b \u0436\u0430\u0493\u044b", "Border color": "\u0416\u0438\u0435\u043a \u0442\u04af\u0441\u0456", "Insert template...": "\u04ae\u043b\u0433\u0456 \u043a\u0456\u0440\u0456\u0441\u0442\u0456\u0440\u0443...", "Templates": "\u04ae\u043b\u0433\u0456\u043b\u0435\u0440", "Template": "\u04ae\u043b\u0433\u0456", "Text color": "\u041c\u04d9\u0442\u0456\u043d \u0442\u04af\u0441\u0456", "Background color": "\u04e8\u04a3\u0456\u043d\u0456\u04a3 \u0442\u04af\u0441\u0456", "Custom...": "\u04e8\u0437\u0433\u0435\u0440\u0442\u0443", "Custom color": "\u0422\u04af\u0441 \u04e9\u0437\u0433\u0435\u0440\u0442\u0443", "No color": "\u0422\u04af\u0441\u0441\u0456\u0437", "Remove color": "\u0422\u04af\u0441\u0442\u0456 \u0436\u043e\u044e", "Table of Contents": "\u041c\u0430\u0437\u043c\u04b1\u043d\u0434\u0430\u0440 \u043a\u0435\u0441\u0442\u0435\u0441\u0456", "Show blocks": "\u0411\u043b\u043e\u043a\u0442\u0430\u0440\u0434\u044b \u043a\u04e9\u0440\u0441\u0435\u0442\u0443", "Show invisible characters": "\u041a\u04e9\u0440\u0456\u043d\u0431\u0435\u0439\u0442\u0456\u043d \u0442\u0430\u04a3\u0431\u0430\u043b\u0430\u0440\u0434\u044b \u043a\u04e9\u0440\u0441\u0435\u0442\u0443", "Word count": "\u0421\u04e9\u0437 \u0441\u0430\u043d\u044b", "Count": "\u0421\u0430\u043d\u044b", "Document": "\u049a\u04b1\u0436\u0430\u0442", "Selection": "\u0422\u0430\u04a3\u0434\u0430\u0443", "Words": "\u0421\u04e9\u0437\u0434\u0435\u0440", "Words: {0}": "\u0421\u04e9\u0437 \u0441\u0430\u043d\u044b: {0}", "{0} words": "{0} \u0441\u04e9\u0437", "File": "\u0424\u0430\u0439\u043b", "Edit": "\u0422\u04af\u0437\u0435\u0442\u0443", "Insert": "\u041a\u0456\u0440\u0456\u0441\u0442\u0456\u0440\u0443", "View": "\u041a\u04e9\u0440\u0456\u043d\u0456\u0441", "Format": "\u0424\u043e\u0440\u043c\u0430\u0442", "Table": "\u041a\u0435\u0441\u0442\u0435", "Tools": "\u049a\u04b1\u0440\u0430\u043b\u0434\u0430\u0440", "Powered by {0}": "{0} \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f\u0441\u044b\u043d\u0430 \u043d\u0435\u0433\u0456\u0437\u0434\u0435\u043b\u0433\u0435\u043d", "Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u0424\u043e\u0440\u043c\u0430\u0442\u0442\u0430\u043b\u0493\u0430\u043d \u043c\u04d9\u0442\u0456\u043d \u0430\u0443\u043c\u0430\u0493\u044b. \u041c\u0435\u043d\u044e \u043a\u04e9\u0440\u0441\u0435\u0442\u0443 \u04af\u0448\u0456\u043d ALT-F9 \u0431\u0430\u0441\u044b\u04a3\u044b\u0437. \u049a\u04b1\u0440\u0430\u043b\u0434\u0430\u0440 \u043f\u0430\u043d\u0435\u043b\u0456\u043d \u043a\u04e9\u0440\u0441\u0435\u0442\u0443 \u04af\u0448\u0456\u043d ALT-F10 \u0431\u0430\u0441\u044b\u04a3\u044b\u0437. \u041a\u04e9\u043c\u0435\u043a \u0430\u043b\u0443 \u04af\u0448\u0456\u043d ALT-0 \u0431\u0430\u0441\u044b\u04a3\u044b\u0437.", "Image title": "\u041a\u0435\u0441\u043a\u0456\u043d \u0430\u0442\u0430\u0443\u044b", "Border width": "\u0416\u0438\u0435\u043a \u0435\u043d\u0456", "Border style": "\u0416\u0438\u0435\u043a \u043c\u04d9\u043d\u0435\u0440\u0456", "Error": "\u049a\u0430\u0442\u0435", "Warn": "\u0415\u0441\u043a\u0435\u0440\u0442\u0443", "Valid": "\u0416\u0430\u0440\u0430\u043c\u0434\u044b", "To open the popup, press Shift+Enter": "\u049a\u0430\u043b\u049b\u044b\u043c\u0430\u043b\u044b \u0442\u0435\u0440\u0435\u0437\u0435\u043d\u0456 \u0430\u0448\u0443 \u04af\u0448\u0456\u043d Shift+Enter \u0431\u0430\u0441\u044b\u04a3\u044b\u0437", "Rich Text Area. Press ALT-0 for help.": "\u041f\u0456\u0448\u0456\u043c\u0434\u0435\u043b\u0433\u0435\u043d \u043c\u04d9\u0442\u0456\u043d \u0430\u0443\u043c\u0430\u0493\u044b. \u0410\u043d\u044b\u049b\u0442\u0430\u043c\u0430 \u0430\u043b\u0443 \u04af\u0448\u0456\u043d ALT-0 \u0431\u0430\u0441\u044b\u04a3\u044b\u0437.", "System Font": "\u0416\u04af\u0439\u0435 \u049b\u0430\u0440\u043f\u0456", "Failed to upload image: {0}": "\u041a\u0435\u0441\u043a\u0456\u043d \u0436\u04af\u043a\u0442\u0435\u043f \u0441\u0430\u043b\u044b\u043d\u0431\u0430\u0434\u044b: {0}", "Failed to load plugin: {0} from url {1}": "\u049a\u043e\u0441\u044b\u043b\u0430\u0442\u044b\u043d \u043c\u043e\u0434\u0443\u043b\u044c \u0436\u04af\u043a\u0442\u0435\u043b\u043c\u0435\u0434\u0456: {0} {1} URL \u043c\u0435\u043a\u0435\u043d\u0436\u0430\u0439\u044b\u043d\u0430\u043d", "Failed to load plugin url: {0}": "\u049a\u043e\u0441\u044b\u043b\u0430\u0442\u044b\u043d \u043c\u043e\u0434\u0443\u043b\u044c \u0436\u04af\u043a\u0442\u0435\u043b\u043c\u0435\u0434\u0456 URL \u043c\u0435\u043a\u0435\u043d\u0436\u0430\u0439\u044b: {0}", "Failed to initialize plugin: {0}": "\u049a\u043e\u0441\u044b\u043b\u0430\u0442\u044b\u043d \u043c\u043e\u0434\u0443\u043b\u044c \u0431\u0430\u043f\u0442\u0430\u043d\u0434\u044b\u0440\u044b\u043b\u043c\u0430\u0434\u044b: {0}", "example": "\u043c\u044b\u0441\u0430\u043b", "Search": "\u0406\u0437\u0434\u0435\u0443", "All": "\u0411\u0430\u0440\u043b\u044b\u0493\u044b", "Currency": "\u0412\u0430\u043b\u044e\u0442\u0430", "Text": "\u041c\u04d9\u0442\u0456\u043d", "Quotations": "\u0422\u044b\u0440\u043d\u0430\u049b\u0448\u0430\u043b\u0430\u0440", "Mathematical": "\u041c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0430\u043b\u044b\u049b", "Extended Latin": "\u041a\u0435\u04a3\u0435\u0439\u0442\u0456\u043b\u0433\u0435\u043d \u043b\u0430\u0442\u044b\u043d", "Symbols": "\u0422\u0430\u04a3\u0431\u0430\u043b\u0430\u0440", "Arrows": "\u041a\u04e9\u0440\u0441\u0435\u0442\u043a\u0456\u043b\u0435\u0440", "User Defined": "\u041f\u0430\u0439\u0434\u0430\u043b\u0430\u043d\u0443\u0448\u044b \u0430\u043d\u044b\u049b\u0442\u0430\u0493\u0430\u043d", "dollar sign": "\u0434\u043e\u043b\u043b\u0430\u0440 \u0431\u0435\u043b\u0433\u0456\u0441\u0456", "currency sign": "\u0432\u0430\u043b\u044e\u0442\u0430 \u0431\u0435\u043b\u0433\u0456\u0441\u0456", "euro-currency sign": "\u0435\u0443\u0440\u043e \u0432\u0430\u043b\u044e\u0442\u0430\u0441\u044b\u043d\u044b\u04a3 \u0431\u0435\u043b\u0433\u0456\u0441\u0456", "colon sign": "\u049b\u043e\u0441 \u043d\u04af\u043a\u0442\u0435 \u0431\u0435\u043b\u0433\u0456\u0441\u0456", "cruzeiro sign": "\u043a\u0440\u0443\u0437\u0435\u0439\u0440\u043e \u0431\u0435\u043b\u0433\u0456\u0441\u0456", "french franc sign": "\u0444\u0440\u0430\u043d\u0446\u0443\u0437\u0434\u044b\u049b \u0444\u0440\u0430\u043d\u043a \u0431\u0435\u043b\u0433\u0456\u0441\u0456", "lira sign": "\u043b\u0438\u0440\u0430 \u0431\u0435\u043b\u0433\u0456\u0441\u0456", "mill sign": "\u043c\u0438\u043b\u043b \u0431\u0435\u043b\u0433\u0456\u0441\u0456", "naira sign": "\u043d\u0430\u0439\u0440\u0430 \u0431\u0435\u043b\u0433\u0456\u0441\u0456", "peseta sign": "\u043f\u0435\u0441\u0435\u0442\u0430 \u0431\u0435\u043b\u0433\u0456\u0441\u0456", "rupee sign": "\u0440\u0443\u043f\u0438\u044f \u0431\u0435\u043b\u0433\u0456\u0441\u0456", "won sign": "\u0432\u043e\u043d \u0431\u0435\u043b\u0433\u0456\u0441\u0456", "new sheqel sign": "\u0436\u0430\u04a3\u0430 \u0448\u0435\u043a\u0435\u043b\u044c \u0431\u0435\u043b\u0433\u0456\u0441\u0456", "dong sign": "\u0434\u043e\u043d\u0433 \u0431\u0435\u043b\u0433\u0456\u0441\u0456", "kip sign": "\u043a\u0438\u043f \u0431\u0435\u043b\u0433\u0456\u0441\u0456", "tugrik sign": "\u0442\u0443\u0433\u0440\u0438\u043a \u0431\u0435\u043b\u0433\u0456\u0441\u0456", "drachma sign": "\u0434\u0440\u0430\u0445\u043c\u0430 \u0431\u0435\u043b\u0433\u0456\u0441\u0456", "german penny symbol": "\u0433\u0435\u0440\u043c\u0430\u043d\u0434\u044b\u049b \u043f\u0435\u043d\u043d\u0438 \u0442\u0430\u04a3\u0431\u0430\u0441\u044b", "peso sign": "\u043f\u0435\u0441\u043e \u0431\u0435\u043b\u0433\u0456\u0441\u0456", "guarani sign": "\u0433\u0443\u0430\u0440\u0430\u043d\u0438 \u0431\u0435\u043b\u0433\u0456\u0441\u0456", "austral sign": "\u0430\u0443\u0441\u0442\u0440\u0430\u043b \u0431\u0435\u0433\u043b\u0456\u0441\u0456", "hryvnia sign": "\u0433\u0440\u0438\u0432\u043d\u0430 \u0431\u0435\u043b\u0433\u0456\u0441\u0456", "cedi sign": "\u0441\u0435\u0434\u0438 \u0431\u0435\u043b\u0433\u0456\u0441\u0456", "livre tournois sign": "\u0442\u0443\u0440 \u043b\u0438\u0432\u0440\u044b \u0431\u0435\u043b\u0433\u0456\u0441\u0456", "spesmilo sign": "\u0441\u043f\u0435\u0441\u043c\u0438\u043b\u043e \u0431\u0435\u043b\u0433\u0456\u0441\u0456", "tenge sign": "\u0442\u0435\u04a3\u0433\u0435 \u0431\u0435\u043b\u0433\u0456\u0441\u0456", "indian rupee sign": "\u04af\u043d\u0434\u0456 \u0440\u0443\u043f\u0438\u044f\u0441\u044b \u0431\u0435\u043b\u0433\u0456\u0441\u0456", "turkish lira sign": "\u0442\u04af\u0440\u0456\u043a \u043b\u0438\u0440\u0430\u0441\u044b \u0431\u0435\u043b\u0433\u0456\u0441\u0456", "nordic mark sign": "\u0441\u043a\u0430\u043d\u0434\u0438\u043d\u0430\u0432\u0438\u044f\u043b\u044b\u049b \u043c\u0430\u0440\u043a\u0430 \u0431\u0435\u043b\u0433\u0456\u0441\u0456", "manat sign": "\u043c\u0430\u043d\u0430\u0442 \u0431\u0435\u043b\u0433\u0456\u0441\u0456", "ruble sign": "\u0440\u0443\u0431\u043b\u044c \u0431\u0435\u043b\u0433\u0456\u0441\u0456", "yen character": "\u0439\u0435\u043d\u0430 \u0442\u0430\u04a3\u0431\u0430\u0441\u044b", "yuan character": "\u044e\u0430\u043d\u044c \u0442\u0430\u04a3\u0431\u0430\u0441\u044b", "yuan character, in hong kong and taiwan": "\u044e\u0430\u043d\u044c \u0442\u0430\u04a3\u0431\u0430\u0441\u044b, \u0413\u043e\u043d\u043a\u043e\u043d\u0433 \u043f\u0435\u043d \u0422\u0430\u0439\u0432\u0430\u043d\u044c\u0434\u0430", "yen\/yuan character variant one": "\u0439\u0435\u043d\u0430\/\u044e\u0430\u043d\u044c \u0442\u0430\u04a3\u0431\u0430\u0441\u044b\u043d\u044b\u04a3 \u0431\u0456\u0440\u0456\u043d\u0448\u0456 \u043d\u04b1\u0441\u049b\u0430\u0441\u044b", "Loading emoticons...": "\u042d\u043c\u043e\u0442\u0438\u043a\u043e\u043d\u0434\u0430\u0440 \u0436\u04af\u043a\u0442\u0435\u043b\u0443\u0434\u0435...", "Could not load emoticons": "\u042d\u043c\u043e\u0442\u0438\u043a\u043e\u043d\u0434\u0430\u0440\u0434\u044b \u0436\u04af\u043a\u0442\u0435\u0443 \u043c\u04af\u043c\u043a\u0456\u043d \u0431\u043e\u043b\u043c\u0430\u0434\u044b", "People": "\u0410\u0434\u0430\u043c\u0434\u0430\u0440", "Animals and Nature": "\u0416\u0430\u043d\u0443\u0430\u0440\u043b\u0430\u0440 \u0436\u04d9\u043d\u0435 \u0442\u0430\u0431\u0438\u0493\u0430\u0442", "Food and Drink": "\u0422\u0430\u0493\u0430\u043c\u0434\u0430\u0440 \u0436\u04d9\u043d\u0435 \u0441\u0443\u0441\u044b\u043d\u0434\u0430\u0440", "Activity": "\u0411\u0435\u043b\u0441\u0435\u043d\u0434\u0456\u043b\u0456\u043a", "Travel and Places": "\u0421\u0430\u044f\u0445\u0430\u0442 \u0436\u04d9\u043d\u0435 \u043e\u0440\u044b\u043d\u0434\u0430\u0440", "Objects": "\u041d\u044b\u0441\u0430\u043d\u0434\u0430\u0440", "Flags": "\u0422\u0443\u043b\u0430\u0440", "Characters": "\u0422\u0430\u04a3\u0431\u0430\u043b\u0430\u0440", "Characters (no spaces)": "\u0422\u0430\u04a3\u0431\u0430\u043b\u0430\u0440 (\u043e\u0440\u044b\u043d\u0434\u0430\u0440\u0441\u044b\u0437)", "{0} characters": "{0} \u0442\u0430\u04a3\u0431\u0430", "Error: Form submit field collision.": "\u049a\u0430\u0442\u0435: \u043f\u0456\u0448\u0456\u043d\u0434\u0456 \u0436\u0456\u0431\u0435\u0440\u0443 \u04e9\u0440\u0456\u0441\u0456\u043d\u0456\u04a3 \u049b\u0430\u0439\u0448\u044b\u043b\u044b\u0493\u044b.", "Error: No form element found.": "\u049a\u0430\u0442\u0435: \u043f\u0456\u0448\u0456\u043d \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0456 \u0442\u0430\u0431\u044b\u043b\u043c\u0430\u0434\u044b.", "Update": "\u0416\u0430\u04a3\u0430\u0440\u0442\u0443", "Color swatch": "\u0422\u04af\u0441 \u04af\u043b\u0433\u0456\u0441\u0456", "Turquoise": "\u041a\u04e9\u0433\u0456\u043b\u0434\u0456\u0440", "Green": "\u0416\u0430\u0441\u044b\u043b", "Blue": "\u041a\u04e9\u043a", "Purple": "\u041a\u04af\u043b\u0433\u0456\u043d", "Navy Blue": "\u041a\u04af\u04a3\u0433\u0456\u0440\u0442 \u043a\u04e9\u043a", "Dark Turquoise": "\u041a\u04af\u04a3\u0433\u0456\u0440\u0442 \u043a\u04e9\u0433\u0456\u043b\u0434\u0456\u0440", "Dark Green": "\u041a\u04af\u04a3\u0433\u0456\u0440\u0442 \u0436\u0430\u0441\u044b\u043b", "Medium Blue": "\u041e\u0440\u0442\u0430\u0448\u0430 \u043a\u04e9\u043a", "Medium Purple": "\u041e\u0440\u0442\u0430\u0448\u0430 \u043a\u04af\u043b\u0433\u0456\u043d", "Midnight Blue": "\u0422\u04af\u043d\u0433\u0456 \u043a\u04e9\u043a", "Yellow": "\u0421\u0430\u0440\u044b", "Orange": "\u0421\u0430\u0440\u0493\u044b\u0448", "Red": "\u049a\u044b\u0437\u044b\u043b", "Light Gray": "\u0410\u0448\u044b\u049b \u0441\u04b1\u0440", "Gray": "\u0421\u04b1\u0440", "Dark Yellow": "\u041a\u04af\u04a3\u0433\u0456\u0440\u0442 \u0441\u0430\u0440\u044b", "Dark Orange": "\u041a\u04af\u04a3\u0433\u0456\u0440\u0442 \u0441\u0430\u0440\u0493\u044b\u0448", "Dark Red": "\u041a\u04af\u04a3\u0433\u0456\u0440\u0442 \u049b\u044b\u0437\u044b\u043b", "Medium Gray": "\u041e\u0440\u0442\u0430\u0448\u0430 \u0441\u04b1\u0440", "Dark Gray": "\u041a\u04af\u04a3\u0433\u0456\u0440\u0442 \u0441\u04b1\u0440", "Light Green": "\u0410\u0448\u044b\u049b \u0436\u0430\u0441\u044b\u043b", "Light Yellow": "\u0410\u0448\u044b\u049b \u0441\u0430\u0440\u044b", "Light Red": "\u0410\u0448\u044b\u049b \u049b\u044b\u0437\u044b\u043b", "Light Purple": "\u0410\u0448\u044b\u049b \u043a\u04af\u043b\u0433\u0456\u043d", "Light Blue": "\u0410\u0448\u044b\u049b \u043a\u04e9\u043a", "Dark Purple": "\u049a\u0430\u0440\u0430 \u043a\u04af\u043b\u0433\u0456\u043d", "Dark Blue": "\u049a\u0430\u0440\u0430 \u043a\u04e9\u043a", "Black": "\u049a\u0430\u0440\u0430", "White": "\u0410\u049b", "Switch to or from fullscreen mode": "\u0422\u043e\u043b\u044b\u049b \u044d\u043a\u0440\u0430\u043d \u0440\u0435\u0436\u0438\u043c\u0456\u043d\u0435 \u043d\u0435\u043c\u0435\u0441\u0435 \u043e\u0434\u0430\u043d \u0430\u0443\u044b\u0441\u0443", "Open help dialog": "\u0410\u043d\u044b\u049b\u0442\u0430\u043c\u0430 \u0434\u0438\u0430\u043b\u043e\u0433\u0442\u044b\u049b \u0442\u0435\u0440\u0435\u0437\u0435\u0441\u0456\u043d \u0430\u0448\u0443", "history": "\u0442\u0430\u0440\u0438\u0445", "styles": "\u0441\u0442\u0438\u043b\u044c\u0434\u0435\u0440", "formatting": "\u043f\u0456\u0448\u0456\u043c\u0434\u0435\u0443", "alignment": "\u0442\u0443\u0440\u0430\u043b\u0430\u0443", "indentation": "\u0448\u0435\u0433\u0456\u043d\u0456\u0441", "permanent pen": "\u043f\u0435\u0440\u043c\u0430\u043d\u0435\u043d\u0442\u0442\u0456\u043a \u043c\u0430\u0440\u043a\u0435\u0440", "comments": "\u0442\u04af\u0441\u0456\u043d\u0434\u0456\u0440\u043c\u0435\u043b\u0435\u0440", "Format Painter": "\u04ae\u043b\u0433\u0456 \u0431\u043e\u0439\u044b\u043d\u0448\u0430 \u043f\u0456\u0448\u0456\u043c\u0434\u0435\u0443", "Insert\/edit iframe": "iframe \u043a\u0456\u0440\u0456\u0441\u0442\u0456\u0440\u0443\/\u04e9\u04a3\u0434\u0435\u0443", "Capitalization": "\u0411\u0430\u0441 \u04d9\u0440\u0456\u043f\u043a\u0435 \u0442\u04af\u0440\u043b\u0435\u043d\u0434\u0456\u0440\u0443", "lowercase": "\u043a\u0456\u0448\u0456 \u04d9\u0440\u0456\u043f", "UPPERCASE": "\u0411\u0410\u0421 \u04d8\u0420\u0406\u041f", "Title Case": "\u0406\u0441 \u0430\u0442\u0430\u0443\u044b", "Permanent Pen Properties": "\u041f\u0435\u0440\u043c\u0430\u043d\u0435\u043d\u0442\u0442\u0456\u043a \u043c\u0430\u0440\u043a\u0435\u0440 \u0441\u0438\u043f\u0430\u0442\u0442\u0430\u0440\u044b", "Permanent pen properties...": "\u041f\u0435\u0440\u043c\u0430\u043d\u0435\u043d\u0442\u0442\u0456\u043a \u043c\u0430\u0440\u043a\u0435\u0440 \u0441\u0438\u043f\u0430\u0442\u0442\u0430\u0440\u044b...", "Font": "\u049a\u0430\u0440\u0456\u043f", "Size": "\u04e8\u043b\u0448\u0435\u043c", "More...": "\u049a\u043e\u0441\u044b\u043c\u0448\u0430...", "Spellcheck Language": "\u0415\u043c\u043b\u0435\u043d\u0456 \u0442\u0435\u043a\u0441\u0435\u0440\u0443 \u0442\u0456\u043b\u0456", "Select...": "\u0422\u0430\u04a3\u0434\u0430\u0443...", "Preferences": "\u0411\u0430\u043f\u0442\u0430\u043b\u044b\u043c\u0434\u0430\u0440", "Yes": "\u0418\u04d9", "No": "\u0416\u043e\u049b", "Keyboard Navigation": "\u041f\u0435\u0440\u043d\u0435\u0442\u0430\u049b\u0442\u0430 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044f\u0441\u044b", "Version": "\u041d\u04b1\u0441\u049b\u0430", "Anchor": "\u0411\u0435\u0442\u0431\u0435\u043b\u0433\u0456", "Special character": "\u0410\u0440\u043d\u0430\u0439\u044b \u0442\u0430\u04a3\u0431\u0430", "Color": "\u0422\u04af\u0441", "Emoticons": "\u0421\u043c\u0430\u0439\u043b\u0438\u043a\u0442\u0430\u0440", "Document properties": "\u049a\u04b1\u0436\u0430\u0442 \u0441\u0438\u043f\u0430\u0442\u0442\u0430\u0440\u044b", "Image": "\u0421\u0443\u0440\u0435\u0442", "Insert link": "\u0421\u0456\u043b\u0442\u0435\u043c\u0435 \u043a\u0456\u0440\u0456\u0441\u0442\u0456\u0440\u0443", "Link": "\u0421\u0456\u043b\u0442\u0435\u043c\u0435", "Target": "\u0410\u0448\u044b\u043b\u0430\u0442\u044b\u043d \u0436\u0435\u0440\u0456", "Media": "\u041c\u0435\u0434\u0438\u0430", "Poster": "\u041f\u043e\u0441\u0442\u0435\u0440\u0456", "Print": "\u0411\u0430\u0441\u044b\u043f \u0448\u044b\u0493\u0430\u0440\u0443", "Whole words": "\u0422\u04b1\u0442\u0430\u0441 \u0441\u04e9\u0437\u0434\u0435\u0440", "Find and replace": "\u0422\u0430\u0431\u0443 \u0436\u04d9\u043d\u0435 \u0430\u0443\u044b\u0441\u0442\u044b\u0440\u0443", "Prev": "\u0410\u043b\u0434\u044b\u04a3\u0493\u044b", "Spellcheck": "\u0415\u043c\u043b\u0435 \u0442\u0435\u043a\u0441\u0435\u0440\u0443", "Caption": "\u0410\u0442\u0430\u0443\u044b", "Insert template": "\u04ae\u043b\u0433\u0456 \u043a\u0456\u0440\u0456\u0441\u0442\u0456\u0440\u0443" }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/tinymce/langs/ko_KR.js ================================================ tinymce.addI18n('ko_KR',{ "Redo": "\ub2e4\uc2dc \uc2e4\ud589", "Undo": "\uc2e4\ud589 \ucde8\uc18c", "Cut": "\uc798\ub77c\ub0b4\uae30", "Copy": "\ubcf5\uc0ac", "Paste": "\ubd99\uc5ec\ub123\uae30", "Select all": "\uc804\uccb4\uc120\ud0dd", "New document": "\uc0c8 \ubb38\uc11c", "Ok": "\ud655\uc778", "Cancel": "\ucde8\uc18c", "Visual aids": "\uc2dc\uac01\uad50\uc7ac", "Bold": "\uad75\uac8c", "Italic": "\uae30\uc6b8\uc784\uaf34", "Underline": "\ubc11\uc904", "Strikethrough": "\ucde8\uc18c\uc120", "Superscript": "\uc704 \ucca8\uc790", "Subscript": "\uc544\ub798 \ucca8\uc790", "Clear formatting": "\uc11c\uc2dd \uc9c0\uc6b0\uae30", "Align left": "\uc67c\ucabd \ub9de\ucda4", "Align center": "\uac00\uc6b4\ub370 \ub9de\ucda4", "Align right": "\uc624\ub978\ucabd \ub9de\ucda4", "Justify": "\uc591\ucabd \ub9de\ucda4", "Bullet list": "\uae00\uba38\ub9ac \uae30\ud638 \ubaa9\ub85d", "Numbered list": "\ubc88\ud638 \ub9e4\uae30\uae30 \ubaa9\ub85d", "Decrease indent": "\ub0b4\uc5b4\uc4f0\uae30", "Increase indent": "\ub4e4\uc5ec\uc4f0\uae30", "Close": "\ub2eb\uae30", "Formats": "\uc11c\uc2dd", "Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\ube0c\ub77c\uc6b0\uc800\uac00 \ud074\ub9bd\ubcf4\ub4dc \uc811\uadfc\uc744 \uc9c0\uc6d0\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. Ctrl+X\/C\/V \ub2e8\ucd95\ud0a4\ub97c \uc774\uc6a9\ud558\uc2ed\uc2dc\uc624.", "Headers": "\uba38\ub9ac\uae00", "Header 1": "\uba38\ub9ac\uae00 1", "Header 2": "\uba38\ub9ac\uae00 2", "Header 3": "\uba38\ub9ac\uae00 3", "Header 4": "\uba38\ub9ac\uae00 4", "Header 5": "\uba38\ub9ac\uae00 5", "Header 6": "\uba38\ub9ac\uae00 6", "Headings": "\uc81c\ubaa9", "Heading 1": "\uc81c\ubaa9 1", "Heading 2": "\uc81c\ubaa9 2", "Heading 3": "\uc81c\ubaa9 3", "Heading 4": "\uc81c\ubaa9 4", "Heading 5": "\uc81c\ubaa9 5", "Heading 6": "\uc81c\ubaa9 6", "Preformatted": "\uc11c\uc2dd \ubbf8\uc124\uc815", "Div": "Div", "Pre": "Pre", "Code": "\ucf54\ub4dc", "Paragraph": "\ub2e8\ub77d", "Blockquote": "\uc778\uc6a9\ubb38", "Inline": "\uc778\ub77c\uc778", "Blocks": "\ube14\ub85d", "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\uc2a4\ud0c0\uc77c\ubcf5\uc0ac \ub044\uae30. \uc774 \uc635\uc158\uc744 \ub044\uae30 \uc804\uc5d0\ub294 \ubcf5\uc0ac \uc2dc, \uc2a4\ud0c0\uc77c\uc774 \ubcf5\uc0ac\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.", "Fonts": "\uae00\uaf34", "Font Sizes": "\uae00\uaf34 \ud06c\uae30", "Class": "\ud074\ub798\uc2a4", "Browse for an image": "\uc774\ubbf8\uc9c0 \ucc3e\uae30", "OR": "\ub610\ub294", "Drop an image here": "\uc5ec\uae30\ub85c \uc774\ubbf8\uc9c0 \ub04c\uc5b4\uc624\uae30", "Upload": "\uc5c5\ub85c\ub4dc", "Block": "\ube14\ub85d", "Align": "\uc815\ub82c", "Default": "\uae30\ubcf8", "Circle": "\uc6d0", "Disc": "\uc6d0\ubc18", "Square": "\uc0ac\uac01", "Lower Alpha": "\uc54c\ud30c\ubcb3 \uc18c\ubb38\uc790", "Lower Greek": "\uadf8\ub9ac\uc2a4\uc5b4 \uc18c\ubb38\uc790", "Lower Roman": "\ub85c\ub9c8\uc790 \uc18c\ubb38\uc790", "Upper Alpha": "\uc54c\ud30c\ubcb3 \uc18c\ubb38\uc790", "Upper Roman": "\ub85c\ub9c8\uc790 \ub300\ubb38\uc790", "Anchor...": "\uc575\ucee4...", "Name": "\uc774\ub984", "Id": "\uc544\uc774\ub514", "Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "\uc544\uc774\ub514\ub294 \ubb38\uc790, \uc22b\uc790, \ub300\uc2dc, \uc810, \ucf5c\ub860 \ub610\ub294 \ubc11\uc904\ub85c \uc2dc\uc791\ud574\uc57c\ud569\ub2c8\ub2e4.", "You have unsaved changes are you sure you want to navigate away?": "\uc800\uc7a5\ud558\uc9c0 \uc54a\uc740 \uc815\ubcf4\uac00 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \ud398\uc774\uc9c0\ub97c \ubc97\uc5b4\ub098\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", "Restore last draft": "\ub9c8\uc9c0\ub9c9 \ucd08\uc548 \ubcf5\uc6d0", "Special character...": "\ud2b9\uc218 \ubb38\uc790...", "Source code": "\uc18c\uc2a4\ucf54\ub4dc", "Insert\/Edit code sample": "\ucf54\ub4dc\uc0d8\ud50c \uc0bd\uc785\/\ud3b8\uc9d1", "Language": "\uc5b8\uc5b4", "Code sample...": "\ucf54\ub4dc \uc0d8\ud50c...", "Color Picker": "\uc0c9 \uc120\ud0dd\uae30", "R": "R", "G": "G", "B": "B", "Left to right": "\uc67c\ucabd\uc5d0\uc11c \uc624\ub978\ucabd", "Right to left": "\uc624\ub978\ucabd\uc5d0\uc11c \uc67c\ucabd", "Emoticons...": "\uc774\ubaa8\ud2f0\ucf58...", "Metadata and Document Properties": "\uba54\ud0c0\ub370\uc774\ud130\uc640 \ubb38\uc11c \uc18d\uc131", "Title": "\uc81c\ubaa9", "Keywords": "\ud0a4\uc6cc\ub4dc", "Description": "\uc124\uba85", "Robots": "\ub85c\ubd07", "Author": "\uc800\uc790", "Encoding": "\uc778\ucf54\ub529", "Fullscreen": "\uc804\uccb4\ud654\uba74", "Action": "\ub3d9\uc791", "Shortcut": "\ub2e8\ucd95\ud0a4", "Help": "\ub3c4\uc6c0\ub9d0", "Address": "\uc8fc\uc18c", "Focus to menubar": "\uba54\ub274\uc5d0 \ud3ec\ucee4\uc2a4", "Focus to toolbar": "\ud234\ubc14\uc5d0 \ud3ec\ucee4\uc2a4", "Focus to element path": "element path\uc5d0 \ud3ec\ucee4\uc2a4", "Focus to contextual toolbar": "\ucf04\ud14d\uc2a4\ud2b8 \ud234\ubc14\uc5d0 \ud3ec\ucee4\uc2a4", "Insert link (if link plugin activated)": "\ub9c1\ud06c \uc0bd\uc785 (link \ud50c\ub7ec\uadf8\uc778\uc774 \ud65c\uc131\ud654\ub41c \uc0c1\ud0dc\uc5d0\uc11c)", "Save (if save plugin activated)": "\uc800\uc7a5 (save \ud50c\ub7ec\uadf8\uc778\uc774 \ud65c\uc131\ud654\ub41c \uc0c1\ud0dc\uc5d0\uc11c)", "Find (if searchreplace plugin activated)": "\ucc3e\uae30(searchreplace \ud50c\ub7ec\uadf8\uc778\uc774 \ud65c\uc131\ud654\ub41c \uc0c1\ud0dc\uc5d0\uc11c)", "Plugins installed ({0}):": "\uc124\uce58\ub41c \ud50c\ub7ec\uadf8\uc778 ({0}):", "Premium plugins:": "\uace0\uae09 \ud50c\ub7ec\uadf8\uc778", "Learn more...": "\uc880 \ub354 \uc0b4\ud3b4\ubcf4\uae30", "You are using {0}": "{0}\ub97c \uc0ac\uc6a9\uc911", "Plugins": "\ud50c\ub7ec\uadf8\uc778", "Handy Shortcuts": "\ub2e8\ucd95\ud0a4", "Horizontal line": "\uac00\ub85c", "Insert\/edit image": "\uc774\ubbf8\uc9c0 \uc0bd\uc785\/\uc218\uc815", "Image description": "\uc774\ubbf8\uc9c0 \uc124\uba85", "Source": "\uc18c\uc2a4", "Dimensions": "\ud06c\uae30", "Constrain proportions": "\uc791\uc5c5 \uc81c\ud55c", "General": "\uc77c\ubc18", "Advanced": "\uace0\uae09", "Style": "\uc2a4\ud0c0\uc77c", "Vertical space": "\uc218\uc9c1 \uacf5\ubc31", "Horizontal space": "\uc218\ud3c9 \uacf5\ubc31", "Border": "\ud14c\ub450\ub9ac", "Insert image": "\uc774\ubbf8\uc9c0 \uc0bd\uc785", "Image...": "\uc774\ubbf8\uc9c0...", "Image list": "\uc774\ubbf8\uc9c0 \ubaa9\ub85d", "Rotate counterclockwise": "\uc2dc\uacc4\ubc18\ub300\ubc29\ud5a5\uc73c\ub85c \ud68c\uc804", "Rotate clockwise": "\uc2dc\uacc4\ubc29\ud5a5\uc73c\ub85c \ud68c\uc804", "Flip vertically": "\uc218\uc9c1 \ub4a4\uc9d1\uae30", "Flip horizontally": "\uc218\ud3c9 \ub4a4\uc9d1\uae30", "Edit image": "\uc774\ubbf8\uc9c0 \ud3b8\uc9d1", "Image options": "\uc774\ubbf8\uc9c0 \uc635\uc158", "Zoom in": "\ud655\ub300", "Zoom out": "\ucd95\uc18c", "Crop": "\uc790\ub974\uae30", "Resize": "\ud06c\uae30 \uc870\uc808", "Orientation": "\ubc29\ud5a5", "Brightness": "\ubc1d\uae30", "Sharpen": "\uc120\uba85\ud558\uac8c", "Contrast": "\ub300\ube44", "Color levels": "\uc0c9\uc0c1\ub808\ubca8", "Gamma": "\uac10\ub9c8", "Invert": "\ubc18\uc804", "Apply": "\uc801\uc6a9", "Back": "\ub4a4\ub85c", "Insert date\/time": "\ub0a0\uc9dc\/\uc2dc\uac04\uc0bd\uc785", "Date\/time": "\ub0a0\uc9dc\/\uc2dc\uac04", "Insert\/Edit Link": "\ub9c1\ud06c \uc0bd\uc785\/\ud3b8\uc9d1", "Insert\/edit link": "\ub9c1\ud06c \uc0bd\uc785\/\uc218\uc815", "Text to display": "\ubcf8\ubb38", "Url": "\uc8fc\uc18c", "Open link in...": "...\uc5d0\uc11c \ub9c1\ud06c \uc5f4\uae30", "Current window": "\ud604\uc7ac \ucc3d", "None": "\uc5c6\uc74c", "New window": "\uc0c8\ucc3d", "Remove link": "\ub9c1\ud06c\uc0ad\uc81c", "Anchors": "\ucc45\uac08\ud53c", "Link...": "\ub9c1\ud06c...", "Paste or type a link": "\ub9c1\ud06c\ub97c \ubd99\uc5ec\ub123\uac70\ub098 \uc785\ub825\ud558\uc138\uc694", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\ud604\uc7ac E-mail\uc8fc\uc18c\ub97c \uc785\ub825\ud558\uc168\uc2b5\ub2c8\ub2e4. E-mail \uc8fc\uc18c\uc5d0 \ub9c1\ud06c\ub97c \uac78\uae4c\uc694?", "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\ud604\uc7ac \uc6f9\uc0ac\uc774\ud2b8 \uc8fc\uc18c\ub97c \uc785\ub825\ud558\uc168\uc2b5\ub2c8\ub2e4. \ud574\ub2f9 \uc8fc\uc18c\uc5d0 \ub9c1\ud06c\ub97c \uac78\uae4c\uc694?", "Link list": "\ub9c1\ud06c \ub9ac\uc2a4\ud2b8", "Insert video": "\ube44\ub514\uc624 \uc0bd\uc785", "Insert\/edit video": "\ube44\ub514\uc624 \uc0bd\uc785\/\uc218\uc815", "Insert\/edit media": "\ubbf8\ub514\uc5b4 \uc0bd\uc785\/\uc218\uc815", "Alternative source": "\ub300\uccb4 \uc18c\uc2a4", "Alternative source URL": "\ub300\uccb4 \uc6d0\ubcf8 URL", "Media poster (Image URL)": "\ub300\ud45c \uc774\ubbf8\uc9c0(\uc774\ubbf8\uc9c0 URL)", "Paste your embed code below:": "\uc544\ub798\uc5d0 \ucf54\ub4dc\ub97c \ubd99\uc5ec\ub123\uc73c\uc138\uc694:", "Embed": "\uc0bd\uc785", "Media...": "\ubbf8\ub514\uc5b4...", "Nonbreaking space": "\ub744\uc5b4\uc4f0\uae30", "Page break": "\ud398\uc774\uc9c0 \uad6c\ubd84\uc790", "Paste as text": "\ud14d\uc2a4\ud2b8\ub85c \ubd99\uc5ec\ub123\uae30", "Preview": "\ubbf8\ub9ac\ubcf4\uae30", "Print...": "\uc778\uc1c4...", "Save": "\uc800\uc7a5", "Find": "\ucc3e\uae30", "Replace with": "\uad50\uccb4", "Replace": "\uad50\uccb4", "Replace all": "\uc804\uccb4 \uad50\uccb4", "Previous": "\uc774\uc804", "Next": "\ub2e4\uc74c", "Find and replace...": "\ucc3e\uae30 \ubc0f \ubc14\uafb8\uae30...", "Could not find the specified string.": "\ubb38\uc790\ub97c \ucc3e\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.", "Match case": "\ub300\uc18c\ubb38\uc790 \uc77c\uce58", "Find whole words only": "\ubaa8\ub450 \uc77c\uce58\ud558\ub294 \ubb38\uc790 \ucc3e\uae30", "Spell check": "\ub9de\ucda4\ubc95 \uac80\uc0ac", "Ignore": "\ubb34\uc2dc", "Ignore all": "\uc804\uccb4\ubb34\uc2dc", "Finish": "\uc644\ub8cc", "Add to Dictionary": "\uc0ac\uc804\uc5d0 \ucd94\uac00", "Insert table": "\ud14c\uc774\ube14 \uc0bd\uc785", "Table properties": "\ud14c\uc774\ube14 \uc18d\uc131", "Delete table": "\ud14c\uc774\ube14 \uc0ad\uc81c", "Cell": "\uc140", "Row": "\uc5f4", "Column": "\ud589", "Cell properties": "\uc140 \uc18d", "Merge cells": "\uc140 \ud569\uce58\uae30", "Split cell": "\uc140 \ub098\ub204\uae30", "Insert row before": "\uc774\uc804\uc5d0 \ud589 \uc0bd\uc785", "Insert row after": "\ub2e4\uc74c\uc5d0 \ud589 \uc0bd\uc785", "Delete row": "\ud589 \uc9c0\uc6b0\uae30", "Row properties": "\ud589 \uc18d\uc131", "Cut row": "\ud589 \uc798\ub77c\ub0b4\uae30", "Copy row": "\ud589 \ubcf5\uc0ac", "Paste row before": "\uc774\uc804\uc5d0 \ud589 \ubd99\uc5ec\ub123\uae30", "Paste row after": "\ub2e4\uc74c\uc5d0 \ud589 \ubd99\uc5ec\ub123\uae30", "Insert column before": "\uc774\uc804\uc5d0 \ud589 \uc0bd\uc785", "Insert column after": "\ub2e4\uc74c\uc5d0 \uc5f4 \uc0bd\uc785", "Delete column": "\uc5f4 \uc9c0\uc6b0\uae30", "Cols": "\uc5f4", "Rows": "\ud589", "Width": "\ub113\uc774", "Height": "\ub192\uc774", "Cell spacing": "\uc140 \uac04\uaca9", "Cell padding": "\uc140 \uc548\ucabd \uc5ec\ubc31", "Show caption": "\ucea1\uc158 \ud45c\uc2dc", "Left": "\uc67c\ucabd", "Center": "\uac00\uc6b4\ub370", "Right": "\uc624\ub978\ucabd", "Cell type": "\uc140 \ud0c0\uc785", "Scope": "\ubc94\uc704", "Alignment": "\uc815\ub82c", "H Align": "\uac00\ub85c \uc815\ub82c", "V Align": "\uc138\ub85c \uc815\ub82c", "Top": "\uc0c1\ub2e8", "Middle": "\uc911\uac04", "Bottom": "\ud558\ub2e8", "Header cell": "\ud5e4\ub354 \uc140", "Row group": "\ud589 \uadf8\ub8f9", "Column group": "\uc5f4 \uadf8\ub8f9", "Row type": "\ud589 \ud0c0\uc785", "Header": "\ud5e4\ub354", "Body": "\ubc14\ub514", "Footer": "\ud478\ud130", "Border color": "\ud14c\ub450\ub9ac \uc0c9", "Insert template...": "\ud15c\ud50c\ub9bf \uc0bd\uc785...", "Templates": "\ud15c\ud50c\ub9bf", "Template": "\ud15c\ud50c\ub9bf", "Text color": "\ubb38\uc790 \uc0c9\uae54", "Background color": "\ubc30\uacbd\uc0c9", "Custom...": "\uc9c1\uc811 \uc0c9\uae54 \uc9c0\uc815\ud558\uae30", "Custom color": "\uc9c1\uc811 \uc9c0\uc815\ud55c \uc0c9\uae54", "No color": "\uc0c9\uc0c1 \uc5c6\uc74c", "Remove color": "\uc0c9 \uc81c\uac70", "Table of Contents": "\ubaa9\ucc28", "Show blocks": "\ube14\ub7ed \ubcf4\uc5ec\uc8fc\uae30", "Show invisible characters": "\uc548\ubcf4\uc774\ub294 \ubb38\uc790 \ubcf4\uc774\uae30", "Word count": "\ub2e8\uc5b4 \uc218", "Count": "\uac1c\uc218", "Document": "\ubb38\uc11c", "Selection": "\uc120\ud0dd", "Words": "\ub2e8\uc5b4", "Words: {0}": "\ub2e8\uc5b4: {0}", "{0} words": "{0} \ub2e8\uc5b4", "File": "\ud30c\uc77c", "Edit": "\uc218\uc815", "Insert": "\uc0bd\uc785", "View": "\ubcf4\uae30", "Format": "\ud3ec\ub9f7", "Table": "\ud14c\uc774\ube14", "Tools": "\ub3c4\uad6c", "Powered by {0}": "Powered by {0}", "Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\uc11c\uc2dd \uc788\ub294 \ud14d\uc2a4\ud2b8 \ud3b8\uc9d1\uae30 \uc785\ub2c8\ub2e4. ALT-F9\ub97c \ub204\ub974\uba74 \uba54\ub274, ALT-F10\ub97c \ub204\ub974\uba74 \ud234\ubc14, ALT-0\uc744 \ub204\ub974\uba74 \ub3c4\uc6c0\ub9d0\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4.", "Image title": "\uc774\ubbf8\uc9c0 \uc81c\ubaa9", "Border width": "\ud14c\ub450\ub9ac \ub450\uaed8", "Border style": "\ud14c\ub450\ub9ac \uc2a4\ud0c0\uc77c", "Error": "\uc624\ub958", "Warn": "\uacbd\uace0", "Valid": "\uc720\ud6a8\ud568", "To open the popup, press Shift+Enter": "\ud31d\uc5c5\uc744 \uc5f4\ub824\uba74 Shift+Enter\ub97c \ub204\ub974\uc2ed\uc2dc\uc624.", "Rich Text Area. Press ALT-0 for help.": "\uc11c\uc2dd \uc788\ub294 \ud14d\uc2a4\ud2b8 \uc601\uc5ed. ALT-0\uc744 \ub204\ub974\uba74 \ub3c4\uc6c0\ub9d0\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4.", "System Font": "\uc2dc\uc2a4\ud15c \uae00\uaf34", "Failed to upload image: {0}": "\uc774\ubbf8\uc9c0 \uc5c5\ub85c\ub4dc \uc2e4\ud328: {0}", "Failed to load plugin: {0} from url {1}": "\ud50c\ub7ec\uadf8\uc778 \ub85c\ub4dc \uc2e4\ud328: URL: {1}\uc5d0\uc11c\uc758 {0}", "Failed to load plugin url: {0}": "\ud50c\ub7ec\uadf8\uc778 URL \ub85c\ub4dc \uc2e4\ud328: {0}", "Failed to initialize plugin: {0}": "\ud50c\ub7ec\uadf8\uc778 \ucd08\uae30\ud654 \uc2e4\ud328: {0}", "example": "\uc608\uc81c", "Search": "\uac80\uc0c9", "All": "\ubaa8\ub450", "Currency": "\ud1b5\ud654", "Text": "\ud14d\uc2a4\ud2b8", "Quotations": "\uc778\uc6a9\ubb38", "Mathematical": "\uc218\ud559", "Extended Latin": "\ud655\uc7a5 \ub77c\ud2f4\uc5b4", "Symbols": "\uae30\ud638", "Arrows": "\ud654\uc0b4\ud45c", "User Defined": "\uc0ac\uc6a9\uc790 \uc815\uc758", "dollar sign": "\ub2ec\ub7ec \uae30\ud638", "currency sign": "\ud1b5\ud654 \uae30\ud638", "euro-currency sign": "\uc720\ub85c\ud654 \uae30\ud638", "colon sign": "\ucf5c\ub860 \uae30\ud638", "cruzeiro sign": "\ud06c\ub8e8\uc81c\uc774\ub8e8 \uae30\ud638", "french franc sign": "\ud504\ub791\uc2a4 \ud504\ub791 \uae30\ud638", "lira sign": "\ub9ac\ub77c \uae30\ud638", "mill sign": "\ubc00 \uae30\ud638", "naira sign": "\ub098\uc774\ub77c \uae30\ud638", "peseta sign": "\ud398\uc138\ud0c0 \uae30\ud638", "rupee sign": "\ub8e8\ud53c \uae30\ud638", "won sign": "\uc6d0 \uae30\ud638", "new sheqel sign": "\ub274 \uc138\ucf08 \uae30\ud638", "dong sign": "\ub3d9 \uae30\ud638", "kip sign": "\ud0b5 \uae30\ud638", "tugrik sign": "\ud22c\uadf8\ub9ac\ud06c \uae30\ud638", "drachma sign": "\ub4dc\ub77c\ud06c\ub9c8 \uae30\ud638", "german penny symbol": "\ub3c5\uc77c \ud398\ub2c8 \uae30\ud638", "peso sign": "\ud398\uc18c \uae30\ud638", "guarani sign": "\uacfc\ub77c\ub2c8 \uae30\ud638", "austral sign": "\uc544\uc6b0\uc2a4\ud2b8\ub784 \uae30\ud638", "hryvnia sign": "\uadf8\ub9ac\ube0c\ub098 \uae30\ud638", "cedi sign": "\uc138\ub514 \uae30\ud638", "livre tournois sign": "\ub9ac\ube0c\ub974 \ud2b8\ub974\ub204\uc544 \uae30\ud638", "spesmilo sign": "\uc2a4\ud398\uc2a4\ubc00\ub85c \uae30\ud638", "tenge sign": "\ud161\uac8c \uae30\ud638", "indian rupee sign": "\uc778\ub3c4 \ub8e8\ud53c \uae30\ud638", "turkish lira sign": "\ud130\ud0a4 \ub9ac\ub77c \uae30\ud638", "nordic mark sign": "\ub178\ub974\ub515 \ub9c8\ub974\ud06c \uae30\ud638", "manat sign": "\ub9c8\ub098\ud2b8 \uae30\ud638", "ruble sign": "\ub8e8\ube14 \uae30\ud638", "yen character": "\uc5d4 \uae30\ud638", "yuan character": "\uc704\uc548 \uae30\ud638", "yuan character, in hong kong and taiwan": "\ub300\ub9cc \uc704\uc548 \uae30\ud638", "yen\/yuan character variant one": "\uc5d4\/\uc704\uc548 \ubb38\uc790 \ubcc0\ud615", "Loading emoticons...": "\uc774\ubaa8\ud2f0\ucf58 \ubd88\ub7ec\uc624\ub294 \uc911...", "Could not load emoticons": "\uc774\ubaa8\ud2f0\ucf58\uc744 \ubd88\ub7ec\uc62c \uc218 \uc5c6\uc74c", "People": "\uc0ac\ub78c", "Animals and Nature": "\ub3d9\ubb3c\uacfc \uc790\uc5f0", "Food and Drink": "\uc74c\uc2dd\uacfc \uc74c\ub8cc", "Activity": "\ud65c\ub3d9", "Travel and Places": "\uc5ec\ud589\uacfc \uc7a5\uc18c", "Objects": "\ubb3c\uac74", "Flags": "\uae43\ubc1c", "Characters": "\ubb38\uc790", "Characters (no spaces)": "\ubb38\uc790(\uacf5\ubc31 \uc5c6\uc74c)", "{0} characters": "{0} \ubb38\uc790", "Error: Form submit field collision.": "\uc624\ub958: \uc591\uc2dd \uc81c\ucd9c \ud544\ub4dc \ubd88\uc77c\uce58", "Error: No form element found.": "\uc624\ub958: \uc591\uc2dd \ud56d\ubaa9 \uc5c6\uc74c", "Update": "\uc5c5\ub370\uc774\ud2b8", "Color swatch": "\uc0c9\uc0c1 \uacac\ubcf8", "Turquoise": "\uccad\ub85d\uc0c9", "Green": "\ucd08\ub85d\uc0c9", "Blue": "\ud30c\ub780\uc0c9", "Purple": "\ubcf4\ub77c\uc0c9", "Navy Blue": "\ub0a8\uc0c9", "Dark Turquoise": "\uc9c4\ud55c \uccad\ub85d\uc0c9", "Dark Green": "\uc9c4\ud55c \ucd08\ub85d\uc0c9", "Medium Blue": "\uc911\uac04 \ud30c\ub780\uc0c9", "Medium Purple": "\uc911\uac04 \ubcf4\ub77c\uc0c9", "Midnight Blue": "\uc9c4\ud55c \ud30c\ub780\uc0c9", "Yellow": "\ub178\ub780\uc0c9", "Orange": "\uc8fc\ud669\uc0c9", "Red": "\ube68\uac04\uc0c9", "Light Gray": "\ubc1d\uc740 \ud68c\uc0c9", "Gray": "\ud68c\uc0c9", "Dark Yellow": "\uc9c4\ud55c \ub178\ub780\uc0c9", "Dark Orange": "\uc9c4\ud55c \uc8fc\ud669\uc0c9", "Dark Red": "\uc9c4\ud55c \ube68\uac04\uc0c9", "Medium Gray": "\uc911\uac04 \ud68c\uc0c9", "Dark Gray": "\uc9c4\ud55c \ud68c\uc0c9", "Light Green": "\ubc1d\uc740 \ub179\uc0c9", "Light Yellow": "\ubc1d\uc740 \ub178\ub780\uc0c9", "Light Red": "\ubc1d\uc740 \ube68\uac04\uc0c9", "Light Purple": "\ubc1d\uc740 \ubcf4\ub77c\uc0c9", "Light Blue": "\ubc1d\uc740 \ud30c\ub780\uc0c9", "Dark Purple": "\uc9c4\ud55c \ubcf4\ub77c\uc0c9", "Dark Blue": "\uc9c4\ud55c \ud30c\ub780\uc0c9", "Black": "\uac80\uc740\uc0c9", "White": "\ud770\uc0c9", "Switch to or from fullscreen mode": "\uc804\uccb4 \ud654\uba74\uc73c\ub85c\/\uc5d0\uc11c \uc804\ud658", "Open help dialog": "\ub3c4\uc6c0\ub9d0 \ub300\ud654\ucc3d \uc5f4\uae30", "history": "\uae30\ub85d", "styles": "\uc2a4\ud0c0\uc77c", "formatting": "\ud3ec\ub9f7\ud305", "alignment": "\uc815\ub82c", "indentation": "\ub4e4\uc5ec\uc4f0\uae30", "permanent pen": "\uc720\uc131\ud39c", "comments": "\uc8fc\uc11d", "Format Painter": "\uc11c\uc2dd \ubcf5\uc0ac", "Insert\/edit iframe": "\uc544\uc774\ud504\ub808\uc784 \uc0bd\uc785\/\ud3b8\uc9d1", "Capitalization": "\ub300\ubb38\uc790\ud654", "lowercase": "\uc18c\ubb38\uc790", "UPPERCASE": "\ub300\ubb38\uc790", "Title Case": "\uc81c\ubaa9\uc744 \ub300\ubb38\uc790\ud654", "Permanent Pen Properties": "\uc601\uad6c \ud39c \ud2b9\uc131", "Permanent pen properties...": "\uc601\uad6c \ud39c \ud2b9\uc131...", "Font": "\uae00\uaf34", "Size": "\ud06c\uae30", "More...": "\ub354 \ubcf4\uae30...", "Spellcheck Language": "\ub9de\ucda4\ubc95 \uac80\uc0ac \uc5b8\uc5b4", "Select...": "\uc120\ud0dd...", "Preferences": "\ud658\uacbd\uc124\uc815", "Yes": "\ub124", "No": "\uc544\ub2c8\uc624", "Keyboard Navigation": "\ud0a4 \uc120\ud0dd", "Version": "\ubc84\uc804", "Anchor": "\uc575\ucee4", "Special character": "\ud2b9\uc218\ubb38\uc790", "Code sample": "\ucf54\ub4dc\uc0d8\ud50c", "Color": "\uc0c9\uc0c1", "Emoticons": "\uc774\ubaa8\ud2f0\ucf58", "Document properties": "\ubb38\uc11c \uc18d\uc131", "Image": "\uc774\ubbf8\uc9c0", "Insert link": "\ub9c1\ud06c \uc0bd\uc785 ", "Target": "\ub300\uc0c1", "Link": "\ub9c1\ud06c", "Poster": "\ud3ec\uc2a4\ud130", "Media": "\ubbf8\ub514\uc5b4", "Print": "\ucd9c\ub825", "Prev": "\uc774\uc804", "Find and replace": "\ucc3e\uc544\uc11c \uad50\uccb4", "Whole words": "\uc804\uccb4 \ub2e8\uc5b4", "Spellcheck": "\ubb38\ubc95\uccb4\ud06c", "Caption": "\ucea1\uc158", "Insert template": "\ud15c\ud50c\ub9bf \uc0bd\uc785" }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/tinymce/langs/ku.js ================================================ tinymce.addI18n('ku',{ "Redo": "\u06a9\u0631\u062f\u0646\u06d5\u0648\u06d5", "Undo": "\u06af\u06d5\u0695\u0627\u0646\u06d5\u0648\u06d5", "Cut": "\u0628\u0695\u06cc\u0646", "Copy": "\u0644\u06d5\u0628\u06d5\u0631\u06af\u0631\u062a\u0646\u06d5\u0648\u06d5", "Paste": "\u0644\u06a9\u0627\u0646\u062f\u0646", "Select all": "\u0647\u06d5\u06b5\u0628\u0698\u0627\u0631\u062f\u0646\u06cc \u0647\u06d5\u0645\u0648\u0648", "New document": "\u0628\u06d5\u06b5\u06af\u06d5\u0646\u0627\u0645\u06d5\u06cc \u0646\u0648\u06ce", "Ok": "\u0628\u0627\u0634\u06d5", "Cancel": "\u067e\u0627\u0634\u06af\u06d5\u0632\u0628\u0648\u0648\u0646\u06d5\u0648\u06d5", "Visual aids": "\u0647\u0627\u0648\u06a9\u0627\u0631\u06cc \u0628\u06cc\u0646\u06d5\u06cc\u06cc", "Bold": "\u062a\u06c6\u062e\u06a9\u0631\u062f\u0646", "Italic": "\u0644\u0627\u0631\u06a9\u0631\u062f\u0646", "Underline": "\u0647\u06ce\u06b5 \u0628\u06d5\u0698\u06ce\u0631\u062f\u0627\u0646", "Strikethrough": "\u0647\u06ce\u06b5 \u0628\u06d5\u0646\u0627\u0648\u062f\u0627\u0646", "Superscript": "\u0633\u06d5\u0631\u0646\u0648\u0648\u0633", "Subscript": "\u0698\u06ce\u0631\u0646\u0648\u0648\u0633", "Clear formatting": "\u067e\u0627\u06a9\u06a9\u0631\u062f\u0646\u06d5\u0648\u06d5\u06cc \u0634\u06ce\u0648\u0627\u0632\u06a9\u0631\u062f\u0646", "Align left": "\u0644\u0627\u06af\u0631\u062a\u0646\u06cc \u0686\u06d5\u067e", "Align center": "\u0644\u0627\u06af\u0631\u062a\u0646\u06cc \u0646\u0627\u0648\u06d5\u0695\u0627\u0633\u062a", "Align right": "\u0644\u0627\u06af\u0631\u062a\u0646\u06cc \u0695\u0627\u0633\u062a", "Justify": "\u0647\u0627\u0648\u0695\u06ce\u06a9\u06cc ", "Bullet list": "\u0644\u06cc\u0633\u062a\u06cc \u062e\u0627\u06b5", "Numbered list": "\u0644\u06cc\u0633\u062a\u06cc \u0698\u0645\u0627\u0631\u06d5", "Decrease indent": "\u06a9\u06d5\u0645\u06a9\u0631\u062f\u0646\u06cc \u0628\u06c6\u0634\u0627\u06cc\u06cc", "Increase indent": "\u0632\u06cc\u0627\u062f\u06a9\u0631\u062f\u0646\u06cc \u0628\u06c6\u0634\u0627\u06cc\u06cc", "Close": "\u062f\u0627\u062e\u0633\u062a\u0646", "Formats": "\u0634\u06ce\u0648\u0627\u0632\u06a9\u0631\u062f\u0646\u06d5\u06a9\u0627\u0646", "Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u0648\u06ce\u0628\u06af\u06d5\u0695\u06d5\u06a9\u06d5\u062a \u067e\u0627\u06b5\u067e\u0634\u062a\u06cc \u062f\u06d5\u0633\u062a\u06a9\u06d5\u0648\u062a\u0646\u06cc \u0695\u0627\u0633\u062a\u06d5\u0648\u062e\u06c6\u06cc \u06a9\u0644\u06cc\u067e\u0628\u06c6\u0631\u062f \u0646\u0627\u06a9\u0627\u062a. \u062a\u06a9\u0627\u06cc\u06d5 \u0644\u06d5\u062c\u06cc\u0627\u062a\u06cc \u06a9\u0648\u0631\u062a\u0628\u0695\u06d5\u06a9\u0627\u0646\u06cc Ctrl+X\/C\/V \u062a\u06d5\u062e\u062a\u06d5\u06a9\u0644\u06cc\u0644 \u0628\u06d5\u06a9\u0627\u0631\u0628\u06ce\u0646\u06d5.", "Headers": "\u0633\u06d5\u0631\u067e\u06d5\u0695\u06d5\u06a9\u0627\u0646", "Header 1": "\u0633\u06d5\u0631\u067e\u06d5\u0695\u06d5 1", "Header 2": "\u0633\u06d5\u0631\u067e\u06d5\u0695\u06d5 2", "Header 3": "\u0633\u06d5\u0631\u067e\u06d5\u0695\u06d5 3", "Header 4": "\u0633\u06d5\u0631\u067e\u06d5\u0695\u06d5 4", "Header 5": "\u0633\u06d5\u0631\u067e\u06d5\u0695\u06d5 5", "Header 6": "\u0633\u06d5\u0631\u067e\u06d5\u0695\u06d5 6", "Headings": "\u0633\u06d5\u0631\u0628\u0627\u0628\u06d5\u062a\u06d5\u06a9\u0627\u0646", "Heading 1": "\u0633\u06d5\u0631\u0628\u0627\u0628\u06d5\u062a 1", "Heading 2": "\u0633\u06d5\u0631\u0628\u0627\u0628\u06d5\u062a 2", "Heading 3": "\u0633\u06d5\u0631\u0628\u0627\u0628\u06d5\u062a 3", "Heading 4": "\u0633\u06d5\u0631\u0628\u0627\u0628\u06d5\u062a 4", "Heading 5": "\u0633\u06d5\u0631\u0628\u0627\u0628\u06d5\u062a 5", "Heading 6": "\u0633\u06d5\u0631\u0628\u0627\u0628\u06d5\u062a 6", "Preformatted": "\u067e\u06ce\u0634\u0634\u06ce\u0648\u0627\u0632\u06a9\u0631\u0627\u0648", "Div": "Div", "Pre": "Pre", "Code": "\u06a9\u06c6\u062f", "Paragraph": "\u0628\u0695\u06af\u06d5", "Blockquote": "Blockquote", "Inline": "\u0644\u06d5\u0633\u06d5\u0631\u062f\u06ce\u0631", "Blocks": "\u0628\u0644\u06c6\u06a9\u06d5\u06a9\u0627\u0646", "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u0644\u06a9\u0627\u0646\u062f\u0646 \u0626\u06ce\u0633\u062a\u0627 \u0644\u06d5 \u0628\u0627\u0631\u06cc \u062f\u06d5\u0642\u06cc \u0633\u0627\u062f\u06d5\u06cc\u06d5. \u0646\u0627\u0648\u06d5\u0695\u06c6\u06a9\u06d5\u06a9\u0627\u0646 \u062f\u06d5\u0644\u06a9\u06ce\u0646 \u0648\u06d5\u06a9 \u062f\u06d5\u0642\u06cc \u0633\u0627\u062f\u06d5 \u0647\u06d5\u062a\u0627 \u0626\u06d5\u0645 \u0647\u06d5\u06b5\u0628\u0698\u0627\u0631\u062f\u06d5 \u0646\u0627\u06a9\u0627\u0631\u0627 \u062f\u06d5\u06a9\u06d5\u06cc\u062a.", "Fonts": "\u0641\u06c6\u0646\u062a\u06d5\u06a9\u0627\u0646", "Font Sizes": "\u0642\u06d5\u0628\u0627\u0631\u06d5\u06cc \u0641\u06c6\u0646\u062a", "Class": "\u067e\u06c6\u0644", "Browse for an image": "\u0628\u06af\u06d5\u0695\u06ce \u0628\u06c6 \u0648\u06ce\u0646\u06d5\u06cc\u06d5\u06a9", "OR": "OR", "Drop an image here": "\u0648\u06ce\u0646\u06d5\u06cc\u06d5\u06a9 \u0695\u0627\u06a9\u06ce\u0634\u06d5 \u0628\u06c6 \u0626\u06ce\u0631\u06d5", "Upload": "\u0628\u0627\u0631\u06a9\u0631\u062f\u0646", "Block": "\u0628\u0644\u06c6\u06a9", "Align": "\u0644\u0627\u06af\u0631\u062a\u0646", "Default": "\u0628\u0646\u06d5\u0695\u06d5\u062a\u06cc", "Circle": "\u0628\u0627\u0632\u0646\u06d5", "Disc": "\u067e\u06d5\u067e\u06a9\u06d5", "Square": "\u0686\u0648\u0627\u0631\u06af\u06c6\u0634\u06d5", "Lower Alpha": "\u0626\u06d5\u0644\u0641\u0627\u06cc \u0628\u0686\u0648\u0648\u06a9", "Lower Greek": "\u06cc\u06c6\u0646\u0627\u0646\u06cc \u0628\u0686\u0648\u0648\u06a9", "Lower Roman": "\u0695\u06c6\u0645\u0627\u0646\u06cc \u0628\u0686\u0648\u0648\u06a9", "Upper Alpha": "\u0626\u06d5\u0644\u0641\u0627\u06cc \u06af\u06d5\u0648\u0631\u06d5", "Upper Roman": "\u0695\u06c6\u0645\u0627\u0646\u06cc \u06af\u06d5\u0648\u0631\u06d5", "Anchor...": "\u0644\u06d5\u0646\u06af\u06d5\u0631...", "Name": "\u0646\u0627\u0648", "Id": "\u067e\u06ce\u0646\u0627\u0633\u06d5", "Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "\u067e\u06ce\u0646\u0627\u0633\u06d5 \u062f\u06d5\u0628\u06ce \u0628\u06d5 \u062d\u06d5\u0631\u0641\u06d5\u0648\u06d5 \u062f\u06d5\u0633\u062a \u067e\u06ce \u0628\u06a9\u0627\u060c \u0648 \u0628\u06d5 \u062d\u06d5\u0631\u0641\u060c \u0698\u0645\u0627\u0631\u06d5\u060c \u0628\u06d5\u0646\u062f\u06d5\u06a9\u060c \u062e\u0627\u06b5\u060c \u062c\u0648\u0648\u062a\u062e\u0627\u06b5 \u06cc\u0627\u0646 \u0628\u0646\u0647\u06ce\u06b5 \u062f\u0631\u06ce\u0698\u06d5\u06cc \u067e\u06ce \u0628\u062f\u0631\u06ce.", "You have unsaved changes are you sure you want to navigate away?": "\u062a\u06c6 \u06af\u06c6\u0695\u0627\u0646\u06a9\u0627\u0631\u06cc\u06cc\u06d5\u06a9\u0627\u0646\u062a \u067e\u0627\u0634\u06d5\u06a9\u06d5\u0648\u062a \u0646\u06d5\u06a9\u0631\u062f\u0648\u0648\u06d5\u060c \u0626\u0627\u06cc\u0627 \u062f\u06b5\u0646\u06cc\u0627\u06cc\u062a \u0644\u06d5 \u062f\u06d5\u0631\u0686\u0648\u0648\u0646\u062a\u061f", "Restore last draft": "\u06af\u06d5\u0695\u0627\u0646\u062f\u0646\u06d5\u0648\u06d5\u06cc \u062f\u0648\u0627\u06cc\u06cc\u0646 \u0695\u06d5\u0634\u0646\u0648\u0648\u0633", "Special character...": "\u0646\u0648\u0648\u0633\u06d5 \u062a\u0627\u06cc\u0628\u06d5\u062a\u06d5\u06a9\u0627\u0646...", "Source code": "\u06a9\u06c6\u062f\u06cc \u0633\u06d5\u0631\u0686\u0627\u0648\u06d5", "Insert\/Edit code sample": "\u062a\u06ce\u062e\u0633\u062a\u0646\/\u0628\u0698\u0627\u0631\u06a9\u0631\u062f\u0646\u06cc \u0646\u0645\u0648\u0648\u0646\u06d5 \u06a9\u06c6\u062f", "Language": "\u0632\u0645\u0627\u0646", "Code sample...": "\u0646\u0645\u0648\u0648\u0646\u06d5 \u06a9\u06c6\u062f...", "Color Picker": "\u0647\u06d5\u06b5\u0686\u0646\u06cc \u0695\u06d5\u0646\u06af", "R": "R", "G": "G", "B": "B", "Left to right": "\u0686\u06d5\u067e \u0628\u06c6 \u0695\u0627\u0633\u062a", "Right to left": "\u0695\u0627\u0633\u062a \u0628\u06c6 \u0686\u06d5\u067e", "Emoticons...": "\u067e\u06ce\u06a9\u06d5\u0646\u06c6\u06a9...", "Metadata and Document Properties": "\u0645\u06ce\u062a\u0627\u062f\u0631\u0627\u0648\u06d5 \u0648 \u062a\u0627\u06cc\u0628\u06d5\u062a\u0645\u06d5\u0646\u062f\u06cc\u06cc\u06d5\u06a9\u0627\u0646\u06cc \u0628\u06d5\u06b5\u06af\u06d5", "Title": "\u0646\u0627\u0648\u0646\u06cc\u0634\u0627\u0646", "Keywords": "\u06a9\u0644\u06cc\u0644\u0647\u200c\u0648\u0634\u0647\u200c\u06a9\u0627\u0646", "Description": "\u0628\u0627\u0633\u06a9\u0631\u062f\u0646", "Robots": "\u0695\u06c6\u0628\u06c6\u062a\u06d5\u06a9\u0627\u0646", "Author": "\u0646\u0648\u0648\u0633\u06d5\u0631", "Encoding": "\u0628\u06d5\u06a9\u06c6\u062f\u06a9\u0631\u062f\u0646", "Fullscreen": "\u0695\u0648\u0648\u067e\u0695\u06cc", "Action": "\u06a9\u0631\u062f\u0627\u0631", "Shortcut": "\u0646\u0627\u0648\u0628\u0695", "Help": "\u06cc\u0627\u0631\u0645\u06d5\u062a\u06cc", "Address": "\u0646\u0627\u0648\u0646\u06cc\u0634\u0627\u0646", "Focus to menubar": "\u0633\u06d5\u0631\u0646\u062c\u062f\u0627\u0646 \u0644\u06d5 \u0634\u0631\u06cc\u062a\u06cc \u0645\u06ce\u0646\u0648\u0648", "Focus to toolbar": "\u0633\u06d5\u0631\u0646\u062c\u062f\u0627\u0646 \u0644\u06d5 \u0634\u0631\u06cc\u062a\u06cc \u0626\u0627\u0645\u06ce\u0631\u06d5\u06a9\u0627\u0646", "Focus to element path": "\u0633\u06d5\u0631\u0646\u062c\u062f\u0627\u0646 \u0644\u06d5 \u0695\u06ce\u0686\u06a9\u06d5\u06cc \u0639\u0648\u0646\u0633\u0648\u0631", "Focus to contextual toolbar": "\u0633\u06d5\u0631\u0646\u062c\u062f\u0627\u0646 \u0644\u06d5 \u0634\u0631\u06cc\u062a\u06cc \u0626\u0627\u0645\u06ce\u0631\u06cc \u062f\u06d5\u0642\u06cc", "Insert link (if link plugin activated)": "\u062a\u06ce\u062e\u0633\u062a\u0646\u06cc \u0644\u06cc\u0646\u06a9 (\u0626\u06d5\u06af\u06d5\u0631 \u067e\u06ce\u0648\u06d5\u06a9\u0631\u0627\u0648 \u0686\u0627\u0644\u0627\u06a9 \u06a9\u0631\u0627\u0648\u06d5)", "Save (if save plugin activated)": "\u067e\u0627\u0634\u06d5\u06a9\u06d5\u0648\u062a\u06a9\u0631\u062f\u0646 (\u0626\u06d5\u06af\u06d5\u0631 \u067e\u06ce\u0648\u06d5\u06a9\u0631\u0627\u0648\u06cc \u067e\u0627\u0634\u06d5\u06a9\u06d5\u0648\u062a\u06a9\u0631\u062f\u0646 \u0686\u0627\u0644\u0627\u06a9 \u06a9\u0631\u0627\u0648\u06d5)", "Find (if searchreplace plugin activated)": "\u062f\u06c6\u0632\u06cc\u0646\u06d5\u0648\u06d5 (\u0626\u06d5\u06af\u06d5\u0631 \u067e\u06ce\u0648\u06d5\u06a9\u0631\u0627\u0648\u06cc \u062c\u06ce\u06af\u06c6\u0695\u06cc\u0646\u06cc \u06af\u06d5\u0695\u0627\u0646 \u0686\u0627\u0644\u0627\u06a9 \u06a9\u0631\u0627\u0648\u06d5)", "Plugins installed ({0}):": "\u0626\u06d5\u0648 \u067e\u06ce\u0648\u06d5\u06a9\u0631\u0627\u0648\u0627\u0646\u06d5\u06cc \u062f\u0627\u0645\u06d5\u0632\u0631\u0627\u0648\u0646 ({0}):", "Premium plugins:": "\u067e\u06ce\u0648\u06d5\u06a9\u0631\u0627\u0648\u06d5 \u067e\u0627\u0631\u06d5\u06cc\u06cc\u06cc\u06d5\u06a9\u0627\u0646:", "Learn more...": "\u0632\u06cc\u0627\u062a\u0631 \u0628\u0632\u0627\u0646\u06d5...", "You are using {0}": "\u062a\u06c6 {0} \u0628\u06d5\u06a9\u0627\u0631 \u062f\u06ce\u0646\u06cc", "Plugins": "\u067e\u06ce\u0648\u06d5\u06a9\u0631\u0627\u0648\u06d5\u06a9\u0627\u0646", "Handy Shortcuts": "\u0646\u0627\u0648\u0628\u0695\u06d5 \u062f\u06d5\u0633\u062a\u06cc\u06cc\u06d5\u06a9\u0627\u0646", "Horizontal line": "\u0647\u06ce\u06b5\u06cc \u0626\u0627\u0633\u06c6\u06cc\u06cc", "Insert\/edit image": "\u062e\u0633\u062a\u0646\u06d5\u0646\u0627\u0648\/\u062f\u06d5\u0633\u062a\u06a9\u0627\u0631\u06cc \u0648\u06ce\u0646\u06d5", "Image description": "\u0628\u0627\u0633\u06a9\u0631\u062f\u0646\u06cc \u0648\u06ce\u0646\u06d5", "Source": "\u0633\u06d5\u0631\u0686\u0627\u0648\u06d5", "Dimensions": "\u062f\u0648\u0648\u0631\u06cc\u06cc\u06d5\u06a9\u0627\u0646", "Constrain proportions": "\u0695\u06d5\u0647\u06d5\u0646\u062f\u06cc \u0645\u06d5\u0631\u062c\u06d5\u06a9\u0627\u0646", "General": "\u06af\u0634\u062a\u06cc", "Advanced": "\u067e\u06ce\u0634\u06a9\u06d5\u0648\u062a\u0648\u0648", "Style": "\u0634\u06ce\u0648\u0627\u0632", "Vertical space": "\u0628\u06c6\u0634\u0627\u06cc\u06cc \u0633\u062a\u0648\u0648\u0646\u06cc", "Horizontal space": "\u0628\u06c6\u0634\u0627\u06cc\u06cc \u0626\u0627\u0633\u06c6\u06cc\u06cc", "Border": "\u0633\u0646\u0648\u0648\u0631", "Insert image": "\u062e\u0633\u062a\u0646\u06d5\u0646\u0627\u0648\u06cc \u0648\u06ce\u0646\u06d5", "Image...": "\u0648\u06ce\u0646\u06d5...", "Image list": "\u067e\u06ce\u0631\u0633\u062a\u06cc \u0648\u06ce\u0646\u06d5", "Rotate counterclockwise": "Rotate counterclockwise", "Rotate clockwise": "Rotate clockwise", "Flip vertically": "Flip vertically", "Flip horizontally": "Flip horizontally", "Edit image": "Edit image", "Image options": "Image options", "Zoom in": "Zoom in", "Zoom out": "Zoom out", "Crop": "Crop", "Resize": "Resize", "Orientation": "Orientation", "Brightness": "Brightness", "Sharpen": "Sharpen", "Contrast": "Contrast", "Color levels": "Color levels", "Gamma": "Gamma", "Invert": "Invert", "Apply": "Apply", "Back": "Back", "Insert date\/time": "\u062e\u0633\u062a\u0646\u06d5\u0646\u0627\u0648\u06cc \u0695\u06c6\u0698\/\u06a9\u0627\u062a", "Date\/time": "\u0695\u06ce\u06a9\u06d5\u0648\u062a\/\u06a9\u0627\u062a", "Insert\/Edit Link": "\u062a\u06ce\u062e\u0633\u062a\u0646\/\u0628\u0698\u0627\u0631\u06a9\u0631\u062f\u0646\u06cc \u0628\u06d5\u0633\u062a\u06d5\u0631", "Insert\/edit link": "\u062e\u0633\u062a\u0646\u06d5\u0646\u0627\u0648\/\u062f\u06d5\u0633\u062a\u06a9\u0627\u0631\u06cc \u0628\u06d5\u0633\u062a\u06d5\u0631", "Text to display": "\u062f\u06d5\u0642 \u0628\u06c6 \u067e\u06cc\u0634\u0627\u0646\u062f\u0627\u0646", "Url": "\u0628\u06d5\u0633\u062a\u06d5\u0631", "Open link in...": "\u06a9\u0631\u062f\u0646\u06d5\u0648\u06d5\u06cc \u0628\u06d5\u0633\u062a\u06d5\u0631 \u0644\u06d5...", "Current window": "\u0647\u06d5\u0631\u0626\u06d5\u0645 \u067e\u06d5\u0646\u062c\u06d5\u0631\u06d5\u06cc\u06d5", "None": "\u0647\u06cc\u0686", "New window": "\u067e\u06d5\u0646\u062c\u06d5\u0631\u06d5\u06cc \u0646\u0648\u06ce", "Remove link": "\u0633\u0695\u06cc\u0646\u06d5\u0648\u06d5\u06cc \u0628\u06d5\u0633\u062a\u06d5\u0631", "Anchors": "\u0644\u06d5\u0646\u06af\u06d5\u0631\u06d5\u06a9\u0627\u0646", "Link...": "\u0628\u06d5\u0633\u062a\u06d5\u0631...", "Paste or type a link": "\u0644\u06a9\u0627\u0646\u062f\u0646 \u06cc\u0627\u0646 \u0646\u0648\u0648\u0633\u06cc\u0646\u06cc \u0628\u06d5\u0633\u062a\u06d5\u0631", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u0626\u06d5\u0648 \u0628\u06d5\u0633\u062a\u06d5\u0631\u06d5\u06cc \u0646\u0648\u0648\u0633\u06cc\u0648\u062a\u06d5 \u0628\u06d5 \u067e\u06d5\u06cc\u0627\u0645\u06cc \u0626\u06d5\u0644\u06cc\u06a9\u062a\u0695\u06c6\u0646\u06cc \u062f\u06d5\u0686\u06ce\u062a. \u0626\u0627\u06cc\u0627 \u062f\u06d5\u062a\u06d5\u0648\u06ce\u062a mailto: prefix \u06cc \u0628\u06c6 \u0632\u06cc\u0627\u062f \u0628\u06a9\u06d5\u06cc\u062a\u061f", "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\u0626\u06d5\u0648 \u0628\u06d5\u0633\u062a\u06d5\u0631\u06d5\u06cc \u0646\u0648\u0648\u0633\u06cc\u0648\u062a\u06d5 \u0628\u06d5 \u0628\u06d5\u0633\u062a\u06d5\u0631\u06cc \u062f\u06d5\u0631\u06d5\u06a9\u06cc \u062f\u06d5\u0686\u06ce\u062a. \u0626\u0627\u06cc\u0627 \u062f\u06d5\u062a\u06d5\u0648\u06ce\u062a http:\/\/ prefix \u06cc \u0628\u06c6 \u0632\u06cc\u0627\u062f \u0628\u06a9\u06d5\u06cc\u062a\u061f", "Link list": "\u067e\u06ce\u0633\u0631\u062a\u06cc \u0628\u06d5\u0633\u062a\u06d5\u0631", "Insert video": "\u062e\u0633\u062a\u0646\u06d5\u0646\u0627\u0648\u06cc \u06a4\u06cc\u062f\u06cc\u06c6", "Insert\/edit video": "\u062e\u0633\u062a\u0646\u06d5\u0646\u0627\u0648\/\u062f\u06d5\u0633\u062a\u06a9\u0627\u0631\u06cc \u06a4\u06cc\u062f\u06cc\u06c6", "Insert\/edit media": "\u062a\u06ce\u062e\u0633\u062a\u0646\/\u0628\u0698\u0627\u0631\u06a9\u0631\u062f\u0646\u06cc \u06af\u06d5\u06cc\u0627\u0646\u06d5", "Alternative source": "\u0633\u06d5\u0631\u0686\u0627\u0648\u06d5\u06cc \u062c\u06ce\u06af\u0631\u06d5\u0648\u06d5", "Alternative source URL": "\u0628\u06d5\u0633\u062a\u06d5\u0631\u06cc \u0633\u06d5\u0631\u0686\u0627\u0648\u06d5\u06cc \u062c\u06ce\u06af\u0631\u06d5\u0648\u06d5", "Media poster (Image URL)": "\u067e\u06c6\u0633\u062a\u06d5\u0631\u06cc \u06af\u06d5\u06cc\u0627\u0646\u06d5 (\u0628\u06d5\u0633\u062a\u06d5\u0631\u06cc \u0648\u06ce\u0646\u06d5)", "Paste your embed code below:": "\u06a9\u06c6\u062f\u06cc \u062a\u06ce\u062e\u0633\u062a\u0646\u06d5\u06a9\u06d5\u062a \u0644\u06d5\u062e\u0648\u0627\u0631\u06d5\u0648\u06d5 \u0628\u0644\u06a9\u06ce\u0646\u06d5:", "Embed": "\u062a\u06ce\u062e\u0633\u062a\u0646", "Media...": "\u06af\u06d5\u06cc\u0627\u0646\u06d5...", "Nonbreaking space": "\u0628\u06c6\u0634\u0627\u06cc\u06cc \u0646\u06d5\u0628\u0695\u0627\u0648", "Page break": "\u0628\u0695\u06cc\u0646\u06cc \u067e\u06d5\u0695\u06d5", "Paste as text": "\u0644\u06a9\u0627\u0646\u062f\u0646 \u0648\u06d5\u06a9 \u062f\u06d5\u0642", "Preview": "\u067e\u06cc\u0634\u0627\u0646\u062f\u0627\u0646", "Print...": "\u0686\u0627\u067e\u06a9\u0631\u062f\u0646...", "Save": "\u067e\u0627\u0634\u06d5\u06a9\u06d5\u0648\u062a", "Find": "\u062f\u06c6\u0632\u06cc\u0646\u06d5\u0648\u06d5", "Replace with": "\u062c\u06ce\u06af\u06c6\u0695\u06cc\u0646 \u0644\u06d5\u06af\u06d5\u06b5", "Replace": "\u062c\u06ce\u06af\u06c6\u0695\u06cc\u0646", "Replace all": "\u062c\u06ce\u06af\u06c6\u0695\u06cc\u0646\u06cc \u0647\u06d5\u0645\u0648\u0648", "Previous": "\u067e\u06ce\u0634\u0648\u0648", "Next": "\u062f\u0648\u0627\u062a\u0631", "Find and replace...": "\u062f\u06c6\u0632\u06cc\u0646 \u0648 \u062c\u06ce\u06af\u06c6\u0695\u06cc\u0646...", "Could not find the specified string.": "\u0695\u06cc\u0632\u0628\u06d5\u0646\u062f\u06cc \u062f\u06cc\u0627\u0631\u06cc\u06a9\u0631\u0627\u0648 \u0646\u0627\u062f\u06c6\u0632\u0631\u06ce\u062a\u06d5\u0648\u06d5.", "Match case": "\u0647\u0627\u0648\u062a\u0627\u0628\u0648\u0648\u0646\u06cc \u0628\u0627\u0631", "Find whole words only": "\u062f\u06c6\u0632\u06cc\u0646\u06d5\u0648\u06d5\u06cc \u062a\u06d5\u0646\u06cc\u0627 \u062a\u06d5\u0648\u0627\u0648\u06cc \u0648\u0634\u06d5\u06a9\u0627\u0646", "Spell check": "\u062a\u0627\u0648\u062a\u0648\u06ce\u06cc \u0695\u06ce\u0646\u0648\u0648\u0633", "Ignore": "\u0644\u06d5\u0628\u06cc\u0631\u06a9\u0631\u062f\u0646", "Ignore all": "\u0644\u06d5\u0628\u06cc\u0631\u06a9\u0631\u062f\u0646\u06cc \u0647\u06d5\u0645\u0648\u0648", "Finish": "\u062a\u06d5\u0648\u0627\u0648", "Add to Dictionary": "\u0632\u06cc\u0627\u062f\u06a9\u0631\u062f\u0646 \u0628\u06c6 \u0641\u06d5\u0631\u0647\u06d5\u0646\u06af", "Insert table": "\u062e\u0633\u062a\u0646\u06d5\u0646\u0627\u0648\u06cc \u062e\u0634\u062a\u06d5", "Table properties": "\u062a\u0627\u06cc\u0628\u0647\u200c\u062a\u0645\u0647\u200c\u0646\u062f\u06cc\u06cc\u06d5\u06a9\u0627\u0646\u06cc \u062e\u0634\u062a\u06d5", "Delete table": "\u0633\u0695\u06cc\u0646\u06d5\u0648\u06d5\u06cc \u062e\u0634\u062a\u06d5", "Cell": "\u062e\u0627\u0646\u06d5", "Row": "\u0695\u06cc\u0632", "Column": "\u0633\u062a\u0648\u0648\u0646", "Cell properties": "\u062a\u0627\u06cc\u0628\u0647\u200c\u062a\u0645\u0647\u200c\u0646\u062f\u06cc\u06cc\u06d5\u06a9\u0627\u0646\u06cc \u062e\u0627\u0646\u06d5", "Merge cells": "\u06cc\u06d5\u06a9\u062e\u0633\u062a\u0646\u06cc \u062e\u0627\u0646\u06d5\u06a9\u0627\u0646", "Split cell": "\u062c\u06cc\u0627\u06a9\u0631\u062f\u0646\u06d5\u0648\u06d5\u06cc \u062e\u0627\u0646\u06d5", "Insert row before": "\u062e\u0633\u062a\u0646\u06d5\u0646\u0627\u0648\u06cc \u0695\u06cc\u0632 \u0628\u06c6 \u067e\u06ce\u0634\u062a\u0631", "Insert row after": "\u062e\u0633\u062a\u0646\u06d5\u0646\u0627\u0648\u06cc \u0695\u06cc\u0632 \u0628\u06c6 \u062f\u0648\u0627\u062a\u0631", "Delete row": "\u0633\u0695\u06cc\u0646\u06d5\u0648\u06d5\u06cc \u0695\u06cc\u0632", "Row properties": "\u062a\u0627\u06cc\u0628\u0647\u200c\u062a\u0645\u0647\u200c\u0646\u062f\u06cc\u06cc\u06d5\u06a9\u0627\u0646\u06cc \u0695\u06cc\u0632", "Cut row": "\u0628\u0695\u06cc\u0646\u06cc \u0695\u06cc\u0632", "Copy row": "\u0644\u06d5\u0628\u06d5\u0631\u06af\u0631\u062a\u0646\u06d5\u0648\u06d5\u06cc \u0695\u06cc\u0632", "Paste row before": "\u0644\u06a9\u0627\u0646\u062f\u0646\u06cc \u0695\u06cc\u0632 \u0644\u06d5 \u067e\u06ce\u0634\u062a\u0631", "Paste row after": "\u0644\u06a9\u0627\u0646\u062f\u0646\u06cc \u0695\u06cc\u0632 \u0644\u06d5 \u062f\u0648\u0627\u062a\u0631", "Insert column before": "\u062e\u0633\u062a\u0646\u06d5\u0646\u0627\u0648\u06cc \u0633\u062a\u0648\u0648\u0646 \u0628\u06c6 \u067e\u06ce\u0634\u062a\u0631", "Insert column after": "\u062e\u0633\u062a\u0646\u06d5\u0646\u0627\u0648\u06cc \u0633\u062a\u0648\u0648\u0646 \u0628\u06c6 \u062f\u0648\u0627\u062a\u0631", "Delete column": "\u0633\u0695\u06cc\u0646\u06d5\u0648\u06d5\u06cc \u0633\u062a\u0648\u0648\u0646", "Cols": "\u0633\u062a\u0648\u0648\u0646\u06d5\u06a9\u0627\u0646", "Rows": "\u0695\u06cc\u0632\u06d5\u06a9\u0627\u0646", "Width": "\u062f\u0631\u06ce\u0698\u06cc", "Height": "\u0628\u06d5\u0631\u0632\u06cc", "Cell spacing": "\u0628\u06c6\u0634\u0627\u06cc\u06cc \u062e\u0627\u0646\u06d5", "Cell padding": "\u0646\u0627\u0648\u067e\u06c6\u0634\u06cc \u062e\u0627\u0646\u06d5", "Show caption": "\u0646\u06cc\u0634\u0627\u0646\u062f\u0627\u0646\u06cc \u0633\u06d5\u0631\u062f\u06ce\u0695", "Left": "\u0686\u06d5\u067e", "Center": "\u0646\u0627\u0648\u06d5\u0695\u0627\u0633\u062a", "Right": "\u0695\u0627\u0633\u062a", "Cell type": "\u062c\u06c6\u0631\u06cc \u062e\u0627\u0646\u06d5", "Scope": "\u0628\u0648\u0627\u0631", "Alignment": "\u0644\u0627\u06af\u0631\u062a\u0646", "H Align": "\u0644\u0627\u06af\u0631\u062a\u0646\u06cc \u0626\u0627\u0633\u06c6\u06cc\u06cc", "V Align": "\u0644\u0627\u06af\u0631\u062a\u0646\u06cc \u0633\u062a\u0648\u0648\u0646\u06cc", "Top": "\u0633\u06d5\u0631\u06d5\u0648\u06d5", "Middle": "\u0646\u0627\u0648\u06d5\u0646\u062f", "Bottom": "\u0698\u06ce\u0631\u06d5\u0648\u06d5", "Header cell": "\u062e\u0627\u0646\u06d5\u06cc \u0633\u06d5\u0631\u067e\u06d5\u0695\u06d5", "Row group": "\u06a9\u06c6\u0645\u06d5\u06b5\u06d5 \u0695\u06cc\u0632", "Column group": "\u06a9\u06c6\u0645\u06d5\u06b5\u06d5 \u0633\u062a\u0648\u0648\u0646", "Row type": "\u062c\u06c6\u0631\u06cc \u0695\u06cc\u0632", "Header": "\u0633\u06d5\u0631\u067e\u06d5\u0695\u06d5", "Body": "\u0646\u0627\u0648\u06d5\u0695\u06c6\u06a9", "Footer": "\u067e\u06ce\u067e\u06d5\u0695\u06d5", "Border color": "\u0695\u06d5\u0646\u06af\u06cc \u0633\u0646\u0648\u0648\u0631", "Insert template...": "\u062a\u06ce\u062e\u0633\u062a\u0646\u06cc \u0642\u0627\u06b5\u0628...", "Templates": "\u062f\u0627\u0695\u06ce\u0698\u06d5\u06a9\u0627\u0646", "Template": "\u0642\u0627\u06b5\u0628", "Text color": "\u0695\u06d5\u0646\u06af\u06cc \u062f\u06d5\u0642", "Background color": "\u0695\u06d5\u0646\u06af\u06cc \u067e\u0627\u0634\u0628\u0646\u06d5\u0645\u0627", "Custom...": "\u062f\u0627\u0646\u0631\u0627\u0648...", "Custom color": "\u0695\u06d5\u0646\u06af\u06cc \u062f\u0627\u0646\u0631\u0627\u0648", "No color": "\u0628\u06d5\u0628\u06ce \u0695\u06d5\u0646\u06af", "Remove color": "\u0644\u0627\u0628\u0631\u062f\u0646\u06cc \u0695\u06d5\u0646\u06af", "Table of Contents": "\u062c\u06d5\u062f\u0648\u06d5\u0644\u06cc \u0646\u0627\u0648\u06d5\u0631\u06c6\u06a9", "Show blocks": "\u067e\u06cc\u0634\u0627\u0646\u062f\u0627\u0646\u06cc \u0628\u0644\u06c6\u06a9\u06d5\u06a9\u0627\u0646", "Show invisible characters": "\u067e\u06cc\u0634\u0627\u0646\u062f\u0627\u0646\u06cc \u0646\u0648\u0648\u0633\u06d5 \u0634\u0627\u0631\u0627\u0648\u06d5\u06a9\u0627\u0646", "Word count": "\u0698\u0645\u0627\u0631\u06d5\u06cc \u0648\u0634\u06d5\u06a9\u0627\u0646", "Count": "\u0698\u0645\u0627\u0631\u06d5", "Document": "\u0628\u06d5\u06b5\u06af\u06d5", "Selection": "\u0647\u06d5\u06b5\u0628\u0698\u0627\u0631\u062f\u0646", "Words": "\u0648\u0634\u06d5\u06a9\u0627\u0646", "Words: {0}": "\u0648\u0634\u06d5\u06a9\u0627\u0646: {0}", "{0} words": "{0} \u0648\u0634\u06d5", "File": "\u067e\u06d5\u0695\u06af\u06d5", "Edit": "\u062f\u06d5\u0633\u062a\u06a9\u0627\u0631\u06cc", "Insert": "\u062e\u0633\u062a\u0646\u06d5\u0646\u0627\u0648", "View": "\u0628\u06cc\u0646\u06cc\u0646", "Format": "\u0634\u06ce\u0648\u0627\u0632", "Table": "\u062e\u0634\u062a\u06d5", "Tools": "\u0626\u0627\u0645\u0631\u0627\u0632\u06d5\u06a9\u0627\u0646", "Powered by {0}": "\u0647\u06ce\u0632\u06af\u0631\u062a\u0648\u0648 \u0644\u06d5 {0}", "Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u0646\u0627\u0648\u0686\u06d5\u06cc \u062f\u06d5\u0642\u06cc \u062a\u06d5\u0648\u0627\u0648. ALT-F9 \u062f\u0627\u06af\u0631\u06d5 \u0628\u06c6 \u0644\u06cc\u0633\u062a\u06d5. ALT-F10 \u062f\u0627\u06af\u0631\u06d5 \u0628\u06c6 \u062a\u0648\u0648\u06b5\u0627\u0645\u0631\u0627\u0632. ALT-0 \u062f\u0627\u06af\u0631\u06d5 \u0628\u06c6 \u06cc\u0627\u0631\u0645\u06d5\u062a\u06cc", "Image title": "\u0633\u06d5\u0631\u062f\u06ce\u0631\u06cc \u0648\u06ce\u0646\u06d5", "Border width": "\u067e\u0627\u0646\u06cc\u06cc \u0644\u06ce\u0648\u0627\u0631", "Border style": "\u0634\u06ce\u0648\u0627\u0632\u06cc \u0644\u06ce\u0648\u0627\u0631", "Error": "\u0647\u06d5\u06b5\u06d5", "Warn": "\u0647\u06c6\u0634\u06cc\u0627\u0631\u06cc", "Valid": "\u062f\u0631\u0648\u0633\u062a", "To open the popup, press Shift+Enter": "\u0628\u06c6 \u06a9\u0631\u062f\u0646\u06d5\u0648\u06d5\u06cc \u067e\u06d5\u0646\u062c\u06d5\u0631\u06d5\u06cc \u0633\u06d5\u0631\u067e\u06d5\u0695\u060c Shift+Enter \u0644\u06ce\u062f\u06d5", "Rich Text Area. Press ALT-0 for help.": "\u062f\u06d5\u06a4\u06d5\u0631\u06cc \u062f\u06d5\u0642\u06cc \u062f\u06d5\u0648\u06b5\u06d5\u0645\u06d5\u0646\u062f. \u0628\u06c6 \u0695\u06ce\u0646\u0645\u0627\u06cc\u06cc ALT-0 \u0644\u06ce\u062f\u06d5.", "System Font": "\u0641\u06c6\u0646\u062a\u06cc \u0633\u06cc\u0633\u062a\u0645", "Failed to upload image: {0}": "\u0628\u0627\u0631\u06a9\u0631\u062f\u0646\u06cc \u0648\u06ce\u0646\u06d5 \u0634\u06a9\u0633\u062a\u06cc \u0647\u06ce\u0646\u0627: {0}", "Failed to load plugin: {0} from url {1}": "\u0628\u0627\u0631\u06af\u0631\u062a\u0646\u06cc \u067e\u06ce\u0648\u06d5\u06a9\u0631\u0627\u0648 \u0634\u06a9\u0633\u062a\u06cc \u0647\u06ce\u0646\u0627: {0}", "Failed to load plugin url: {0}": "\u0628\u0627\u0631\u06af\u0631\u062a\u0646\u06cc \u0628\u06d5\u0633\u062a\u06d5\u0631\u06cc \u067e\u06ce\u0648\u06d5\u06a9\u0631\u0627\u0648 \u0634\u06a9\u0633\u062a\u06cc \u0647\u06ce\u0646\u0627: {0}", "Failed to initialize plugin: {0}": "\u0695\u06ce\u062e\u0633\u062a\u0646\u06cc \u0633\u06d5\u0631\u06d5\u062a\u0627\u06cc\u06cc \u067e\u06ce\u0648\u06d5\u06a9\u0631\u0627\u0648 \u0634\u06a9\u0633\u062a\u06cc \u0647\u06ce\u0646\u0627: {0}", "example": "\u0646\u0645\u0648\u0648\u0646\u06d5", "Search": "\u06af\u06d5\u0695\u0627\u0646", "All": "\u0647\u06d5\u0645\u0648\u0648", "Currency": "\u062f\u0631\u0627\u0648", "Text": "\u062f\u06d5\u0642", "Quotations": "\u0648\u062a\u06d5\u06cc \u06af\u06ce\u0695\u0627\u0648\u06d5", "Mathematical": "\u0628\u06cc\u0631\u06a9\u0627\u0631\u06cc\u0627\u0646\u06d5", "Extended Latin": "\u0644\u0627\u062a\u06cc\u0646\u06cc \u067e\u06d5\u0631\u06d5\u067e\u06ce\u062f\u0631\u0627\u0648", "Symbols": "\u0646\u06cc\u0634\u0627\u0646\u06d5\u06a9\u0627\u0646", "Arrows": "\u062a\u06cc\u0631\u0646\u06cc\u0634\u0627\u0646\u06d5\u06a9\u0627\u0646", "User Defined": "\u062f\u06cc\u0627\u0631\u06cc\u06a9\u0631\u0627\u0648\u06cc \u0628\u06d5\u06a9\u0627\u0631\u0647\u06ce\u0646\u06d5\u0631", "dollar sign": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u062f\u06c6\u0644\u0627\u0631", "currency sign": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u062f\u0631\u0627\u0648", "euro-currency sign": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u062f\u0631\u0627\u0648\u06cc \u06cc\u06c6\u0631\u06c6", "colon sign": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u062c\u0648\u0648\u062a\u062e\u0627\u06b5", "cruzeiro sign": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u06a9\u0631\u0648\u0648\u0632\u06cc\u0631\u06c6", "french franc sign": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u0641\u0631\u0627\u0646\u06a9\u06cc \u0641\u06d5\u0695\u06d5\u0646\u0633\u0627", "lira sign": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u0644\u06cc\u0631\u06d5", "mill sign": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u0645\u06cc\u0644", "naira sign": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u0646\u0627\u06cc\u0631\u0627", "peseta sign": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u067e\u06ce\u0633\u06ce\u062a\u0627", "rupee sign": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u0695\u0648\u0648\u067e\u06cc\u06d5", "won sign": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u0648\u06c6\u0646", "new sheqel sign": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u0646\u0648\u06ce\u06cc \u0634\u06ce\u06a9\u06ce\u0644", "dong sign": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u062f\u06c6\u0646\u06af", "kip sign": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u06a9\u06cc\u067e", "tugrik sign": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u062a\u0648\u06af\u0631\u0648\u06af", "drachma sign": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u062f\u0631\u0627\u062e\u0645\u0627", "german penny symbol": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u067e\u06ce\u0646\u06cc\u06cc \u0626\u06d5\u06b5\u0645\u0627\u0646\u06cc", "peso sign": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u067e\u06ce\u0633\u06c6", "guarani sign": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u06af\u0648\u0627\u0631\u0627\u0646\u06cc", "austral sign": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u0626\u0627\u0648\u0633\u062a\u0631\u0627\u0644", "hryvnia sign": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u06af\u0631\u06cc\u06a4\u0646\u06cc\u0627", "cedi sign": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u0633\u06ce\u062f\u06cc", "livre tournois sign": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u0644\u06cc\u06a4\u0631\u06ce \u062a\u0648\u0631\u0646\u06c6\u06cc\u0633", "spesmilo sign": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u0633\u067e\u06ce\u0633\u0645\u0627\u06cc\u06b5\u06c6", "tenge sign": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u062a\u06ce\u0646\u062c", "indian rupee sign": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u0695\u0648\u0648\u067e\u06cc\u06d5\u06cc \u0647\u0646\u062f\u06cc", "turkish lira sign": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u0644\u06cc\u0631\u06d5\u06cc \u062a\u0648\u0631\u06a9", "nordic mark sign": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u0645\u0627\u0631\u06a9\u06cc \u0646\u06c6\u0631\u0648\u06cc\u0698", "manat sign": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u0645\u06d5\u0646\u0627\u062a", "ruble sign": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u0695\u0648\u0648\u0628\u06b5", "yen character": "\u0646\u0648\u0648\u0633\u06d5\u06cc \u06cc\u06ce\u0646", "yuan character": "\u0646\u0648\u0648\u0633\u06d5\u06cc \u06cc\u0648\u0627\u0646", "yuan character, in hong kong and taiwan": "\u0646\u06cc\u0634\u0627\u0646\u06cc \u06cc\u0648\u0627\u0646\u060c \u0644\u06d5 \u0647\u06c6\u0646\u06af \u06a9\u06c6\u0646\u06af \u0648 \u062a\u0627\u06cc\u0648\u0627\u0646", "yen\/yuan character variant one": "\u0646\u0648\u0648\u0633\u06d5\u06cc \u062c\u06ce\u06af\u0631\u06cc \u06cc\u06ce\u0646\/\u06cc\u0648\u0627\u0646", "Loading emoticons...": "\u062e\u06d5\u0631\u06cc\u06a9\u06cc \u0628\u0627\u0631\u06af\u0631\u062a\u0646\u06cc \u067e\u06ce\u06a9\u06d5\u0646\u06c6\u06a9\u06d5\u06a9\u0627\u0646...", "Could not load emoticons": "\u0646\u0627\u062a\u0648\u0627\u0646\u0631\u06ce \u067e\u06ce\u06a9\u06d5\u0646\u06c6\u06a9\u06d5\u06a9\u0627\u0646 \u0628\u0627\u0631 \u0628\u06af\u06cc\u0631\u06ce", "People": "\u062e\u06d5\u06b5\u06a9", "Animals and Nature": "\u0626\u0627\u0698\u06d5\u06b5 \u0648 \u0633\u0631\u0648\u0634\u062a", "Food and Drink": "\u0686\u06ce\u0634\u062a \u0648 \u062e\u0648\u0627\u0631\u062f\u0646", "Activity": "\u0686\u0627\u0644\u0627\u06a9\u06cc", "Travel and Places": "\u0633\u06d5\u0641\u06d5\u0631 \u0648 \u0634\u0648\u06ce\u0646\u06d5\u06a9\u0627\u0646", "Objects": "\u0634\u062a\u06d5\u06a9\u0627\u0646", "Flags": "\u0626\u0627\u06b5\u0627\u06a9\u0627\u0646", "Characters": "\u0646\u0648\u0648\u0633\u06d5\u06a9\u0627\u0646", "Characters (no spaces)": "\u0646\u0648\u0648\u0633\u06d5\u06a9\u0627\u0646 (\u0628\u06d5\u0628\u06ce \u0628\u06c6\u0634\u0627\u06cc\u06cc)", "{0} characters": "{0} \u0646\u0648\u0648\u0633\u06d5", "Error: Form submit field collision.": "\u0647\u06d5\u06b5\u06d5: \u062a\u06ce\u06a9\u0686\u0648\u0648\u0646\u06cc \u0646\u0627\u0631\u062f\u0646\u06cc \u0641\u06c6\u0631\u0645.", "Error: No form element found.": "\u0647\u06d5\u06b5\u06d5: \u0647\u06cc\u0686 \u0639\u0648\u0646\u0633\u0648\u0631\u06ce\u06a9\u06cc \u0641\u06c6\u0631\u0645 \u0646\u06d5\u062f\u06c6\u0632\u0631\u0627\u06cc\u06d5\u0648\u06d5.", "Update": "\u0695\u06c6\u0698\u0627\u0646\u06d5\u06a9\u0631\u062f\u0646", "Color swatch": "\u0646\u0645\u0648\u0648\u0646\u06d5 \u0695\u06d5\u0646\u06af", "Turquoise": "\u067e\u06cc\u0631\u06c6\u0632\u06d5\u06cc\u06cc", "Green": "\u0633\u06d5\u0648\u0632", "Blue": "\u06a9\u06d5\u0648\u06d5", "Purple": "\u0645\u06c6\u0631", "Navy Blue": "\u0633\u0648\u0631\u0645\u06d5\u06cc\u06cc", "Dark Turquoise": "\u067e\u06cc\u0631\u06c6\u0632\u06d5\u06cc\u06cc \u062a\u0627\u0631\u06cc\u06a9", "Dark Green": "\u0633\u06d5\u0648\u0632\u06cc \u062a\u0627\u0631\u06cc\u06a9", "Medium Blue": "\u06a9\u06d5\u0648\u06d5\u06cc \u0645\u0627\u0645\u0646\u0627\u0648\u06d5\u0646\u062f", "Medium Purple": "\u0645\u06c6\u0631\u06cc \u0645\u0627\u0645\u0646\u0627\u0648\u06d5\u0646\u062f", "Midnight Blue": "\u06a9\u06d5\u0648\u06d5\u06cc \u0646\u06cc\u0648\u06d5\u0634\u06d5\u0648", "Yellow": "\u0632\u06d5\u0631\u062f", "Orange": "\u067e\u0631\u062a\u06d5\u0642\u0627\u06b5\u06cc", "Red": "\u0633\u0648\u0648\u0631", "Light Gray": "\u0628\u06c6\u0631\u06cc \u06a9\u0627\u06b5", "Gray": "\u0628\u06c6\u0631", "Dark Yellow": "\u0632\u06d5\u0631\u062f\u06cc \u062a\u0627\u0631\u06cc\u06a9", "Dark Orange": "\u067e\u0631\u062a\u06d5\u0642\u0627\u06b5\u06cc\u06cc \u062a\u0627\u0631\u06cc\u06a9", "Dark Red": "\u0633\u0648\u0648\u0631\u06cc \u062a\u0627\u0631\u06cc\u06a9", "Medium Gray": "\u0628\u06c6\u0631\u06cc \u0645\u0627\u0645\u0646\u0627\u0648\u06d5\u0646\u062f", "Dark Gray": "\u0628\u06c6\u0631\u06cc \u062a\u0627\u0631\u06cc\u06a9", "Light Green": "\u0633\u06d5\u0648\u0632\u06cc \u06a9\u0627\u06b5", "Light Yellow": "\u0632\u06d5\u0631\u062f\u06cc \u06a9\u0627\u06b5", "Light Red": "\u0633\u0648\u0648\u0631\u06cc \u06a9\u0627\u06b5", "Light Purple": "\u0645\u06c6\u0631\u06cc \u06a9\u0627\u06b5", "Light Blue": "\u06a9\u06d5\u0648\u06d5\u06cc \u06a9\u0627\u06b5", "Dark Purple": "\u0645\u06c6\u0631\u06cc \u062a\u0627\u0631\u06cc\u06a9", "Dark Blue": "\u06a9\u06d5\u0648\u06d5\u06cc \u062a\u0627\u0631\u06cc\u06a9", "Black": "\u0695\u06d5\u0634", "White": "\u0633\u067e\u06cc", "Switch to or from fullscreen mode": "\u06af\u06c6\u0695\u06cc\u0646 \u0644\u06d5 \u06cc\u0627\u0646 \u0628\u06c6 \u062d\u0627\u06b5\u06d5\u062a\u06cc \u067e\u0695\u062f\u06cc\u0645\u06d5\u0646", "Open help dialog": "\u06a9\u0631\u062f\u0646\u06d5\u0648\u06d5\u06cc \u0648\u062a\u0648\u0648\u06ce\u0698\u06cc \u06cc\u0627\u0631\u0645\u06d5\u062a\u06cc", "history": "\u0645\u06ce\u0698\u0648\u0648", "styles": "\u0634\u06ce\u0648\u06d5\u06a9\u0627\u0646", "formatting": "\u0634\u06ce\u0648\u06d5\u067e\u06ce\u062f\u0627\u0646", "alignment": "\u0644\u0627\u06af\u0631\u062a\u0646", "indentation": "\u0646\u0627\u0648\u0648\u06d5\u0686\u0648\u0648\u0646", "permanent pen": "\u067e\u06ce\u0646\u0648\u0648\u0633\u06cc \u0647\u06d5\u0645\u06cc\u0634\u06d5\u06cc\u06cc", "comments": "\u0628\u06c6\u0686\u0648\u0648\u0646\u06d5\u06a9\u0627\u0646", "Format Painter": "\u0646\u06cc\u06af\u0627\u0631\u06a9\u06ce\u0634\u06cc \u0634\u06ce\u0648\u0627\u0632", "Insert\/edit iframe": "\u062a\u06ce\u062e\u0633\u062a\u0646\/\u0628\u0698\u0627\u0631\u06a9\u0631\u062f\u0646\u06cc \u0626\u0627\u06cc\u0641\u0631\u06d5\u06cc\u0645", "Capitalization": "\u062d\u06d5\u0631\u0641\u06d5 \u06af\u06d5\u0648\u0631\u06d5\u06a9\u0627\u0646", "lowercase": "\u062d\u06d5\u0631\u0641\u06cc \u0628\u0686\u0648\u0648\u06a9", "UPPERCASE": "\u062d\u06d5\u0631\u0641\u06cc \u06af\u06d5\u0648\u0631\u06d5", "Title Case": "\u062d\u06d5\u0631\u0641\u06d5 \u0633\u06d5\u0631\u062f\u06ce\u0631\u06cc\u06cc\u06d5\u06a9\u0627\u0646", "Permanent Pen Properties": "\u062a\u0627\u06cc\u0628\u06d5\u062a\u0645\u06d5\u0646\u062f\u06cc\u06cc\u06d5\u06a9\u0627\u0646\u06cc \u067e\u06ce\u0646\u0648\u0648\u0633\u06cc \u0647\u06d5\u0645\u06cc\u0634\u06d5\u06cc\u06cc", "Permanent pen properties...": "\u062a\u0627\u06cc\u0628\u06d5\u062a\u0645\u06d5\u0646\u062f\u06cc\u06cc\u06d5\u06a9\u0627\u0646\u06cc \u067e\u06ce\u0646\u0648\u0648\u0633\u06cc \u0647\u06d5\u0645\u06cc\u0634\u06d5\u06cc\u06cc...", "Font": "\u0641\u06c6\u0646\u062a", "Size": "\u0626\u06d5\u0646\u062f\u0627\u0632\u06d5", "More...": "\u0632\u06cc\u0627\u062a\u0631...", "Spellcheck Language": "\u0632\u0645\u0627\u0646\u06cc \u062a\u0627\u0648\u062a\u0648\u06ce\u06cc \u0695\u06ce\u0646\u0648\u0648\u0633", "Select...": "\u0647\u06d5\u06b5\u0628\u0698\u0627\u0631\u062f\u0646...", "Preferences": "\u0647\u06d5\u06b5\u0628\u0698\u0627\u0631\u062f\u06d5\u06a9\u0627\u0646", "Yes": "\u0626\u06d5\u0631\u06ce", "No": "\u0646\u06d5\u062e\u06ce\u0631", "Keyboard Navigation": "\u0695\u06ce\u067e\u06ce\u0648\u0627\u0646 \u0628\u06d5 \u062a\u06d5\u062e\u062a\u06d5\u06a9\u0644\u06cc\u0644", "Version": "\u0648\u06d5\u0634\u0627\u0646", "Anchor": "\u0644\u06d5\u0646\u06af\u06d5\u0631", "Special character": "\u0646\u0648\u0648\u0633\u06d5\u06cc \u062a\u0627\u06cc\u0628\u06d5\u062a", "Color": "\u0695\u06d5\u0646\u06af", "Emoticons": "\u0648\u06ce\u0646\u06c6\u0686\u06a9\u06d5\u06a9\u0627\u0646\u06cc \u0647\u06d5\u0633\u062a", "Document properties": "\u062a\u0627\u06cc\u0628\u0647\u200c\u062a\u0645\u0647\u200c\u0646\u062f\u06cc\u06cc\u06d5\u06a9\u0627\u0646\u06cc \u0628\u06d5\u06b5\u06af\u06d5\u0646\u0627\u0645\u06d5", "Insert link": "\u062e\u0633\u062a\u0646\u06d5\u0646\u0627\u0648\u06cc \u0628\u06d5\u0633\u062a\u06d5\u0631", "Target": "\u0626\u0627\u0645\u0627\u0646\u062c", "Poster": "\u067e\u06c6\u0633\u062a\u06d5\u0631", "Print": "\u0686\u0627\u067e\u06a9\u0631\u062f\u0646", "Whole words": "\u0647\u06d5\u0645\u0648\u0648 \u0648\u0634\u06d5\u06a9\u0627\u0646", "Find and replace": "\u062f\u06c6\u0632\u06cc\u0646\u06d5\u0648\u06d5 \u0648 \u062c\u06ce\u06af\u06c6\u0695\u06cc\u0646", "Prev": "\u067e\u06ce\u0634\u0648\u0648", "Spellcheck": "\u067e\u0634\u06a9\u0646\u06cc\u0646\u06cc \u0695\u06ce\u0646\u0648\u0648\u0633", "Caption": "\u0633\u06d5\u0631\u062f\u06ce\u0695", "Insert template": "\u062e\u0633\u062a\u0646\u06d5\u0646\u0627\u0648\u06cc \u062f\u0627\u0695\u06ce\u0698\u06d5" }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/tinymce/langs/lt.js ================================================ tinymce.addI18n('lt',{ "Redo": "Gr\u0105\u017einti", "Undo": "Atstatyti", "Cut": "I\u0161kirpti", "Copy": "Kopijuoti", "Paste": "\u012ed\u0117ti", "Select all": "Pa\u017eym\u0117ti visk\u0105", "New document": "Naujas dokumentas", "Ok": "Gerai", "Cancel": "Atsisakyti", "Visual aids": "Vaizdin\u0117s priemon\u0117s", "Bold": "Pary\u0161kintas", "Italic": "Kursyvinis", "Underline": "Pabrauktas", "Strikethrough": "Perbrauktas", "Superscript": "Vir\u0161utinis indeksas", "Subscript": "Apatinis indeksas", "Clear formatting": "Naikinti formatavim\u0105", "Align left": "Lygiuoti kair\u0117je", "Align center": "Centruoti", "Align right": "Lygiuoti de\u0161in\u0117je", "Justify": "I\u0161d\u0117styti per vis\u0105 plot\u012f", "Bullet list": "\u017denklinimo s\u0105ra\u0161as", "Numbered list": "Skaitmeninis s\u0105ra\u0161as", "Decrease indent": "Ma\u017einti \u012ftrauk\u0105", "Increase indent": "Didinti \u012ftrauk\u0105", "Close": "U\u017edaryti", "Formats": "Formatai", "Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Nar\u0161ykl\u0117s nustatymai neleid\u017eia redaktoriui tiesiogiai pasiekti laikinosios atminties. Pra\u0161ome naudoti klaviat\u016bros klavi\u0161us Ctrl+X\/C\/V.", "Headers": "Antra\u0161t\u0117s", "Header 1": "Antra\u0161t\u0117 1", "Header 2": "Antra\u0161t\u0117 2", "Header 3": "Antra\u0161t\u0117 3", "Header 4": "Antra\u0161t\u0117 4", "Header 5": "Antra\u0161t\u0117 5", "Header 6": "Antra\u0161t\u0117 6", "Headings": "Antra\u0161t\u0117s", "Heading 1": "Antra\u0161t\u0117 1", "Heading 2": "Antra\u0161t\u0117 2", "Heading 3": "Antra\u0161t\u0117 3", "Heading 4": "Antra\u0161t\u0117 4", "Heading 5": "Antra\u0161t\u0117 5", "Heading 6": "Antra\u0161t\u0117 6", "Preformatted": "Suformuotas i\u0161 anksto", "Div": "Div", "Pre": "Pre", "Code": "Kodas", "Paragraph": "Paragrafas", "Blockquote": "Citata", "Inline": "Inline", "Blocks": "Blokai", "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Dabar \u012fterpiama paprastojo teksto re\u017eimu. Kol \u0161i parinktis \u012fjungta, turinys bus \u012fterptas kaip paprastas tekstas.", "Fonts": "\u0160riftai", "Font Sizes": "\u0160rifto dyd\u017eiai", "Class": "Klas\u0117", "Browse for an image": "Ie\u0161koti paveiksl\u0117lio", "OR": "ARBA", "Drop an image here": "Tempkite paveiksl\u0117l\u012f \u010dia", "Upload": "\u012ekelti", "Block": "Blokas", "Align": "Lygiavimas", "Default": "Pagrindinis", "Circle": "Apskritimas", "Disc": "Diskas", "Square": "Kvadratas", "Lower Alpha": "Ma\u017eosios raid\u0117s", "Lower Greek": "Ma\u017eosios graik\u0173", "Lower Roman": "Ma\u017eosios rom\u0117n\u0173", "Upper Alpha": "Did\u017eiosios raid\u0117s", "Upper Roman": "Did\u017eiosios rom\u0117n\u0173", "Anchor...": "Nuoroda...", "Name": "Pavadinimas", "Id": "ID", "Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "ID turi prasid\u0117ti raide, po kurios gali b\u016bti raid\u0117s, skai\u010diai, br\u016bk\u0161niai, ta\u0161kai, kabliata\u0161kiai ar apatiniai pabraukimai.", "You have unsaved changes are you sure you want to navigate away?": "Turite nei\u0161saugot\u0173 pakeitim\u0173! Ar tikrai norite i\u0161eiti?", "Restore last draft": "Atstatyti paskutin\u012f projekt\u0105", "Special character...": "Specialieji simboliai...", "Source code": "Pirminis \u0161altinis", "Insert\/Edit code sample": "Prid\u0117ti \/ keisti kodo pavyzd\u012f", "Language": "Kalba", "Code sample...": "Kodo pavyzdys...", "Color Picker": "Spalvos parinkimas", "R": "R", "G": "G", "B": "B", "Left to right": "I\u0161 kair\u0117s \u012f de\u0161in\u0119", "Right to left": "I\u0161 de\u0161in\u0117s \u012f kair\u0119", "Emoticons...": "Jaustukai...", "Metadata and Document Properties": "Meta duomenys ir dokumento ypatyb\u0117s", "Title": "Pavadinimas", "Keywords": "\u017dymos", "Description": "Apra\u0161as", "Robots": "Robotai", "Author": "Autorius", "Encoding": "Kodavimas", "Fullscreen": "Visas ekranas", "Action": "Veiksmas", "Shortcut": "Nuoroda", "Help": "Pagalba", "Address": "Adresas", "Focus to menubar": "Fokusuoti \u012f meniu", "Focus to toolbar": "Fokusuoti \u012f \u012franki\u0173 juost\u0105", "Focus to element path": "Fokusuoti \u012f elemento keli\u0105", "Focus to contextual toolbar": "Fokusuoti \u012f kontekstin\u012f \u012franki\u0173 juost\u0105", "Insert link (if link plugin activated)": "Prid\u0117ti nuorod\u0105 (jei link priedas aktyvuotas)", "Save (if save plugin activated)": "I\u0161saugoti (jei save priedas aktyvuotas)", "Find (if searchreplace plugin activated)": "Ie\u0161koti (jei searchreplace priedas aktyvuotas)", "Plugins installed ({0}):": "\u012ediegti priedai ({0}):", "Premium plugins:": "Mokami priedai:", "Learn more...": "Su\u017einoti daugiau...", "You are using {0}": "Naudojate {0}", "Plugins": "Priedai", "Handy Shortcuts": "Patogios nuorodos", "Horizontal line": "Horizontali linija", "Insert\/edit image": "\u012eterpti|Tvarkyti paveiksl\u0117l\u012f", "Image description": "Paveiksl\u0117lio apra\u0161as", "Source": "Pirmin\u0117 nuoroda", "Dimensions": "Matmenys", "Constrain proportions": "Laikytis proporcij\u0173", "General": "Bendra", "Advanced": "I\u0161pl\u0117stas", "Style": "Stilius", "Vertical space": "Vertikalus tarpas", "Horizontal space": "Horizontalus tarpas", "Border": "R\u0117melis", "Insert image": "\u012eterpti paveiksl\u0117l\u012f", "Image...": "Paveiksl\u0117lis...", "Image list": "Paveiksl\u0117li\u0173 s\u0105ra\u0161as", "Rotate counterclockwise": "Pasukti prie\u0161 laikrod\u017eio rodykl\u0119", "Rotate clockwise": "Pasukti pagal laikrod\u017eio rodykl\u0119", "Flip vertically": "Apversti vertikaliai", "Flip horizontally": "Apversti horizontaliai", "Edit image": "Redaguoti paveiksl\u0117l\u012f", "Image options": "Paveiksl\u0117lio nustatymai", "Zoom in": "Priartinti", "Zoom out": "Atitolinti", "Crop": "Atkarpyti", "Resize": "Keisti dyd\u012f", "Orientation": "Pasukimas", "Brightness": "\u0160viesumas", "Sharpen": "Ry\u0161kumas", "Contrast": "Kontrastas", "Color levels": "Spalv\u0173 lygiai", "Gamma": "Gama", "Invert": "Prie\u0161ingos spalvos", "Apply": "Taikyti", "Back": "Atgal", "Insert date\/time": "\u012eterpti dat\u0105\/laik\u0105", "Date\/time": "Data \/ laikas", "Insert\/Edit Link": "Prid\u0117ti\/Keisti nuorod\u0105", "Insert\/edit link": "\u012eterpti\/taisyti nuorod\u0105", "Text to display": "Rodomas tekstas", "Url": "Nuoroda", "Open link in...": "Nuorod\u0105 atverti...", "Current window": "Dabartiniame lange", "None": "Nieko", "New window": "Naujas langas", "Remove link": "\u0160alinti nuorod\u0105", "Anchors": "\u017dym\u0117", "Link...": "Nuoroda...", "Paste or type a link": "\u012eklijuokite arba \u012fra\u0161ykite nuorod\u0105", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "Atrodo, kad \u012fvesta nuoroda yra elektroninio pa\u0161to adresas. Ar norite prie\u0161 j\u012f \u012fvesti reikalaujam\u0105 \u201emailto:\u201c?", "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "Atrodo, kad \u012fved\u0117te nuotolin\u0119 nuorod\u0105. Ar norite prie\u0161 j\u0105 \u012fvesti reikalaujam\u0105 \u201ehttp:\/\/\u201c?", "Link list": "Nuorod\u0173 s\u0105ra\u0161as", "Insert video": "\u012eterpti video", "Insert\/edit video": "\u012eterpti\/tvarkyti video", "Insert\/edit media": "Prid\u0117ti \/ keisti medij\u0105", "Alternative source": "Alternatyvus \u0161altinis", "Alternative source URL": "Alternatyvus \u0161altinio URL adresas", "Media poster (Image URL)": "medijos skelbiklis (paveiksl\u0117lio URL adresas)", "Paste your embed code below:": "\u012eterpkite kod\u0105 \u017eemiau:", "Embed": "\u012eterpti", "Media...": "Medija...", "Nonbreaking space": "Nepertraukiamos vietos", "Page break": "Puslapio skirtukas", "Paste as text": "\u012eklijuoti kaip tekst\u0105", "Preview": "Per\u017ei\u016bra", "Print...": "Spausdinti...", "Save": "I\u0161saugoti", "Find": "Ie\u0161koti", "Replace with": "Kuo pakeisti", "Replace": "Pakeisti", "Replace all": "Pakeisti visk\u0105", "Previous": "Ankstesnis", "Next": "Sekantis", "Find and replace...": "Ie\u0161koti ir pakeisti...", "Could not find the specified string.": "Nepavyko rasti nurodytos eilut\u0117s.", "Match case": "Atitinkamus", "Find whole words only": "Ie\u0161koti tik vis\u0105 \u017eod\u012f", "Spell check": "Klaid\u0173 tikrinimas", "Ignore": "Ignoruoti", "Ignore all": "Ignoruoti visk\u0105", "Finish": "Baigti", "Add to Dictionary": "Prid\u0117ti \u012f \u017dodyn\u0105", "Insert table": "\u012eterpti lentel\u0119", "Table properties": "Lentel\u0117s savyb\u0117s", "Delete table": "\u0160alinti lentel\u0119", "Cell": "Langeliai", "Row": "Eilut\u0117s", "Column": "Stulpelis", "Cell properties": "Langelio savyb\u0117s", "Merge cells": "Sujungti langelius", "Split cell": "Skaidyti langelius", "Insert row before": "\u012eterpti eilut\u0119 prie\u0161", "Insert row after": "\u012eterpti eilut\u0119 po", "Delete row": "Naikinti eilut\u0119", "Row properties": "Eilut\u0117s savyb\u0117s", "Cut row": "I\u0161kirpti eilut\u0119", "Copy row": "Kopijuoti eilut\u0119", "Paste row before": "\u012ed\u0117ti eilut\u0119 prie\u0161", "Paste row after": "\u012ed\u0117ti eilut\u0119 po", "Insert column before": "\u012eterpti stulpel\u012f prie\u0161", "Insert column after": "\u012eterpti stulpel\u012f po", "Delete column": "Naikinti stulpel\u012f", "Cols": "Stulpeliai", "Rows": "Eilut\u0117s", "Width": "Plotis", "Height": "Auk\u0161tis", "Cell spacing": "Tarpas tarp langeli\u0173", "Cell padding": "Tarpas nuo langelio iki teksto", "Show caption": "Rodyti antra\u0161t\u0119", "Left": "Kair\u0117", "Center": "Centras", "Right": "De\u0161in\u0117", "Cell type": "Langelio tipas", "Scope": "Strukt\u016bra", "Alignment": "Lygiavimas", "H Align": "H Lygiavimas", "V Align": "V Lygiavimas", "Top": "Vir\u0161uje", "Middle": "Viduryje", "Bottom": "Apa\u010dioje", "Header cell": "Antra\u0161t\u0117s langelis", "Row group": "Eilu\u010di\u0173 grup\u0117", "Column group": "Stulpeli\u0173 grup\u0117", "Row type": "Eilu\u010di\u0173 tipas", "Header": "Antra\u0161t\u0117", "Body": "Turinys", "Footer": "Apa\u010dia", "Border color": "R\u0117melio spalva", "Insert template...": "Prid\u0117ti \u0161ablon\u0105...", "Templates": "\u0160ablonai", "Template": "\u0160ablonas", "Text color": "Teksto spalva", "Background color": "Fono spalva", "Custom...": "Pasirinktinas...", "Custom color": "Pasirinktina spalva", "No color": "Jokios spalvos", "Remove color": "Pa\u0161alinti spalv\u0105", "Table of Contents": "Turinys", "Show blocks": "Rodyti blokus", "Show invisible characters": "Rodyti nematomus simbolius", "Word count": "\u017dod\u017ei\u0173 kiekis", "Count": "Skai\u010dius", "Document": "Dokumentas", "Selection": "Pasirinkimas", "Words": "\u017dod\u017ei\u0173", "Words: {0}": "\u017dod\u017eiai: {0}", "{0} words": "{0} \u017eod\u017eiai", "File": "Failas", "Edit": "Redaguoti", "Insert": "\u012eterpti", "View": "Per\u017ei\u016bra", "Format": "Formatas", "Table": "Lentel\u0117", "Tools": "\u012erankiai", "Powered by {0}": "Sukurta {0}", "Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Suformatuoto teksto laukas. D\u0117l meniu spauskite ALT-F9. U\u017eduo\u010di\u0173 juostos \u012fjungimui spauskite ALT-F10. Pagalbai - spauskite ALT-0.", "Image title": "Paveiksl\u0117lio pavadinimas", "Border width": "Kra\u0161tin\u0117s plotis", "Border style": "Kra\u0161tin\u0117s stilius", "Error": "Klaida", "Warn": "\u012esp\u0117ti", "Valid": "Tinkamas", "To open the popup, press Shift+Enter": "Spustel\u0117j\u0119 Shift+Enter atversite i\u0161kylant\u012f lang\u0105", "Rich Text Area. Press ALT-0 for help.": "Rai\u0161kiojo teksto vieta. Spustel\u0117j\u0119 Alt-0 gausite pagalbos.", "System Font": "Sisteminiai \u0161riftai", "Failed to upload image: {0}": "Paveiksl\u0117lio \u012fkelti nepavyko: {0}", "Failed to load plugin: {0} from url {1}": "Priedo \u012fkelti nepavyko: {0} i\u0161 adreso {1}", "Failed to load plugin url: {0}": "Priedo adreso \u012fkelti nepavyko: {0}", "Failed to initialize plugin: {0}": "Priedo inicijuoti nepavyko: {0}", "example": "pavyzdys", "Search": "Ie\u0161koti", "All": "Visi", "Currency": "Valiuta", "Text": "Tekstas", "Quotations": "Citata", "Mathematical": "Matematinis", "Extended Latin": "Lotyn\u0173 i\u0161pl\u0117stin\u0117", "Symbols": "Simboliai", "Arrows": "Rodykl\u0117s", "User Defined": "Vartotojo apibr\u0117\u017eta", "dollar sign": "dolerio \u017eenklas", "currency sign": "valiutos \u017eenklas", "euro-currency sign": "euro \u017eenklas", "colon sign": "dvita\u0161kio \u017eenklas", "cruzeiro sign": "kruzeiro \u017eenklas", "french franc sign": "Pranc\u016bz\u0173 franko \u017eenklas", "lira sign": "lyros \u017eenklas", "mill sign": "milo simbolis", "naira sign": "nairos simbolis", "peseta sign": "peseto \u017eenklas", "rupee sign": "rupijos \u017eenklas", "won sign": "vono \u017eenklas", "new sheqel sign": "naujojo \u0161ekelio \u017eenklas", "dong sign": "dongo \u017eenklas", "kip sign": "kipo \u017eenklas", "tugrik sign": "tugriko \u017eenklas", "drachma sign": "drachmos \u017eenklas", "german penny symbol": "Vokietijos fenigo \u017eenklas", "peso sign": "peso \u017eenklas", "guarani sign": "gvaranio \u017eenklas", "austral sign": "australo \u017eenklas", "hryvnia sign": "grivinos \u017eenklas", "cedi sign": "sed\u017eio \u017eenklas", "livre tournois sign": "toro svaro \u017eenklas", "spesmilo sign": "spesmilo \u017eenklas", "tenge sign": "teng\u0117s \u017eenklas", "indian rupee sign": "Indijos rupijos \u017eenklas", "turkish lira sign": "Turkijos lyros \u017eenklas", "nordic mark sign": "\u0161iaur\u0117s \u0161ali\u0173 mark\u0117s \u017eenklas", "manat sign": "manato \u017eenklas", "ruble sign": "rublio \u017eenklas", "yen character": "jienos simbolis", "yuan character": "juanio simbolis", "yuan character, in hong kong and taiwan": "juanio \u017eenklas, naudojamas Hongkonge ir Taivane", "yen\/yuan character variant one": "jienos\/juanio vieningas \u017eenklas", "Loading emoticons...": "\u012ekeliami jaustukai...", "Could not load emoticons": "Nepavyko \u012fkelti jaustuk\u0173", "People": "\u017dmon\u0117s", "Animals and Nature": "Gyv\u016bnai ir gamta", "Food and Drink": "Maistas ir g\u0117rimai", "Activity": "Veikla", "Travel and Places": "Kelion\u0117s ir vietos", "Objects": "Objektai", "Flags": "V\u0117liavos", "Characters": "Simboli\u0173", "Characters (no spaces)": "Simboli\u0173 (be tarp\u0173)", "{0} characters": "{0} simboliai", "Error: Form submit field collision.": "Klaida: formos lauk\u0173 nesuderinamumas.", "Error: No form element found.": "Klaida: formos element\u0173 nerasta.", "Update": "Naujinti", "Color swatch": "Spalv\u0173 pavyzd\u017eiai", "Turquoise": "\u017dalsvai m\u0117lyna", "Green": "\u017dalia", "Blue": "M\u0117lyna", "Purple": "Ro\u017ein\u0117", "Navy Blue": "Tamsiai m\u0117lyna", "Dark Turquoise": "Tamsiai \u017ealsvai m\u0117lyna", "Dark Green": "Tamsiai \u017ealia", "Medium Blue": "Vidutini\u0161kai m\u0117lyna", "Medium Purple": "Vidutini\u0161kai violetin\u0117", "Midnight Blue": "Vidurnak\u010dio m\u0117lyna", "Yellow": "Geltona", "Orange": "Oran\u017ein\u0117", "Red": "Raudona", "Light Gray": "\u0160viesiai pilka", "Gray": "Pilka", "Dark Yellow": "Tamsiai geltona", "Dark Orange": "Tamsiai oran\u017ein\u0117", "Dark Red": "Tamsiai raudona", "Medium Gray": "Vidutini\u0161kai pilka", "Dark Gray": "Tamsiai pilka", "Light Green": "\u0160viesiai \u017ealia", "Light Yellow": "\u0160viesiai geltona", "Light Red": "\u0160viesiai raudona", "Light Purple": "\u0160viesiai violetin\u0117", "Light Blue": "\u0160viesiai m\u0117lyna", "Dark Purple": "Tamsiai violetin\u0117", "Dark Blue": "Tamsiai m\u0117lyna", "Black": "Juoda", "White": "Balta", "Switch to or from fullscreen mode": "Perjungti i\u0161\/\u012f viso ekrano rodym\u0105", "Open help dialog": "Atverti pagalbos lang\u0105", "history": "praeitis", "styles": "stiliai", "formatting": "formatavimas", "alignment": "lygiavimas", "indentation": "\u012ftrauka", "permanent pen": "nuolatinis ra\u0161iklis", "comments": "komentarai", "Format Painter": "Formato kopijavimo priemon\u0117", "Insert\/edit iframe": "Prid\u0117ti \/ keisti iframe", "Capitalization": "Did\u017eiosios raid\u0117s", "lowercase": "ma\u017eosios raid\u0117s", "UPPERCASE": "VISOS DID\u017dIOSIOS", "Title Case": "Pirmos Did\u017eiosios", "Permanent Pen Properties": "Nuolatinio ra\u0161iklio nustatymai", "Permanent pen properties...": "Nuolatinio ra\u0161iklio nustatymai...", "Font": "\u0160riftas", "Size": "Dydis", "More...": "Daugiau...", "Spellcheck Language": "Ra\u0161ybos tikrinimo kalba", "Select...": "Pasirinkti...", "Preferences": "Nustatymai", "Yes": "Taip", "No": "Ne", "Keyboard Navigation": "Valdymas klaviat\u016bra", "Version": "Versija", "Anchor": "\u017dym\u0117", "Special character": "Specialus simbolis", "Code sample": "Kodo pavyzdys", "Color": "Spalva", "Emoticons": "Jaustukai", "Document properties": "Dokumento savyb\u0117s", "Image": "Paveiksl\u0117lis", "Insert link": "\u012eterpti nuorod\u0105", "Target": "Tikslin\u0117 nuoroda", "Link": "Nuoroda", "Poster": "Plakatas", "Media": "Medija", "Print": "Spausdinti", "Prev": "Ankstesnis", "Find and replace": "Surasti ir pakeisti", "Whole words": "Visus \u017eod\u017eius", "Spellcheck": "Ra\u0161ybos tikrinimas", "Caption": "Antra\u0161t\u0117", "Insert template": "\u012eterpti \u0161ablon\u0105" }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/tinymce/langs/nb_NO.js ================================================ tinymce.addI18n('nb_NO',{ "Redo": "Gj\u00f8r om", "Undo": "Angre", "Cut": "Klipp ut", "Copy": "Kopier", "Paste": "Lim inn", "Select all": "Marker alt", "New document": "Nytt dokument", "Ok": "Ok", "Cancel": "Avbryt", "Visual aids": "Visuelle hjelpemidler", "Bold": "Fet", "Italic": "Kursiv", "Underline": "Understreking", "Strikethrough": "Gjennomstreking", "Superscript": "Hevet skrift", "Subscript": "Senket skrift", "Clear formatting": "Fjern formateringer", "Align left": "Venstrejuster", "Align center": "Midtstill", "Align right": "H\u00f8yrejuster", "Justify": "Blokkjuster", "Bullet list": "Punktliste", "Numbered list": "Nummerliste", "Decrease indent": "Reduser innrykk", "Increase indent": "\u00d8k innrykk", "Close": "Lukk", "Formats": "Stiler", "Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Nettleseren din st\u00f8tter ikke direkte tilgang til utklippsboken. Bruk istedet tastatursnarveiene Ctrl+X\/C\/V.", "Headers": "Overskrifter", "Header 1": "Overskrift 1", "Header 2": "Overskrift 2", "Header 3": "Overskrift 3", "Header 4": "Overskrift 4", "Header 5": "Overskrift 5", "Header 6": "Overskrift 6", "Headings": "Overskrifter", "Heading 1": "Overskrift 1", "Heading 2": "Overskrift 2", "Heading 3": "Overskrift 3", "Heading 4": "Overskrift 4", "Heading 5": "Overskrift 5", "Heading 6": "Overskrift 6", "Preformatted": "Forh\u00e5ndsformatert", "Div": "Div", "Pre": "Pre", "Code": "Kode", "Paragraph": "Avsnitt", "Blockquote": "Blockquote", "Inline": "Innkapslet", "Blocks": "Blokker", "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Lim inn er n\u00e5 i ren-tekst modus. Kopiert innhold vil bli limt inn som ren tekst inntil du sl\u00e5r av dette valget.", "Fonts": "Fonter", "Font Sizes": "Fontst\u00f8rrelser", "Class": "Klasse", "Browse for an image": "S\u00f8k etter bilde", "OR": "OR", "Drop an image here": "Slipp et bilde her", "Upload": "Last opp", "Block": "Blokk", "Align": "Juster", "Default": "Normal", "Circle": "\u00c5pen sirkel", "Disc": "Fylt sirkel", "Square": "Fylt firkant", "Lower Alpha": "Minuskler", "Lower Greek": "Greske minuskler", "Lower Roman": "Romerske minuskler", "Upper Alpha": "Versaler", "Upper Roman": "Romerske versaler", "Anchor...": "Lenke", "Name": "Navn", "Id": "Id", "Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Id burde starte med en bokstav, bare fulgt av bokstaver, nummer, streker, punktum, koloner eller understreker.", "You have unsaved changes are you sure you want to navigate away?": "Du har ikke arkivert endringene. Vil du fortsette uten \u00e5 arkivere?", "Restore last draft": "Gjenopprett siste utkast", "Special character...": "Spesialtegn...", "Source code": "Kildekode", "Insert\/Edit code sample": "Sett inn\/endre kodeeksempel", "Language": "Spr\u00e5k", "Code sample...": "Kodeeksempel", "Color Picker": "Fargevelger", "R": "R", "G": "G", "B": "B", "Left to right": "Venstre til h\u00f8yre", "Right to left": "H\u00f8yre til venstre", "Emoticons...": "Emoticons..", "Metadata and Document Properties": "Metadata og dokumentverdier", "Title": "Tittel", "Keywords": "N\u00f8kkelord", "Description": "Beskrivelse", "Robots": "Roboter", "Author": "Forfatter", "Encoding": "Tegnkoding", "Fullscreen": "Fullskjerm", "Action": "Handling", "Shortcut": "Snarvei", "Help": "Hjelp", "Address": "Adresse", "Focus to menubar": "Fokus p\u00e5 menylinje", "Focus to toolbar": "Fokus p\u00e5 verkt\u00f8ylinje", "Focus to element path": "Fokus p\u00e5 elementsti", "Focus to contextual toolbar": "Fokus p\u00e5 kontekstuell verkt\u00f8ylinje", "Insert link (if link plugin activated)": "Sett inn lenke (dersom lenketillegg er aktivert)", "Save (if save plugin activated)": "Lagre (dersom lagretillegg er aktivert)", "Find (if searchreplace plugin activated)": "Finn (dersom tillegg for s\u00f8k og erstatt er aktivert)", "Plugins installed ({0}):": "Installerte tillegg ({0}):", "Premium plugins:": "Premiumtillegg:", "Learn more...": "Les mer ...", "You are using {0}": "Du bruker {0}", "Plugins": "Tillegg", "Handy Shortcuts": "Nyttige snarveier", "Horizontal line": "Horisontal linje", "Insert\/edit image": "Sett inn\/endre bilde", "Image description": "Bildebeskrivelse", "Source": "Bildelenke", "Dimensions": "Dimensjoner", "Constrain proportions": "Behold proporsjoner", "General": "Generelt", "Advanced": "Avansert", "Style": "Stil", "Vertical space": "Vertikal marg", "Horizontal space": "Horisontal marg", "Border": "Ramme", "Insert image": "Sett inn bilde", "Image...": "Bilde...", "Image list": "Bildeliste", "Rotate counterclockwise": "Roter mot venstre", "Rotate clockwise": "Roter mot h\u00f8yre", "Flip vertically": "Speilvend vertikalt", "Flip horizontally": "Speilvend horisontalt", "Edit image": "Rediger bilde", "Image options": "Bilde innstillinger", "Zoom in": "Zoom inn", "Zoom out": "Zoom ut", "Crop": "Beskj\u00e6r", "Resize": "Skaler", "Orientation": "Orientering", "Brightness": "Lysstyrke", "Sharpen": "Skarphet", "Contrast": "Kontrast", "Color levels": "Fargeniv\u00e5", "Gamma": "Gamma", "Invert": "Inverter", "Apply": "Utf\u00f8r", "Back": "Tilbake", "Insert date\/time": "Sett inn dato\/tid", "Date\/time": "Dato\/tid", "Insert\/Edit Link": "Sett inn \/ Rediger lenke", "Insert\/edit link": "Sett inn\/endre lenke", "Text to display": "Tekst som skal vises", "Url": "Url", "Open link in...": "\u00c5pne lenke i..", "Current window": "N\u00e5v\u00e6rende vindu", "None": "Ingen", "New window": "Nytt vindu", "Remove link": "Fjern lenke", "Anchors": "Anker", "Link...": "Lenke...", "Paste or type a link": "Lim inn eller skriv en lenke", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "Oppgitte URL ser ut til \u00e5 v\u00e6re en epost-adresse. \u00d8nsker du \u00e5 sette inn p\u00e5krevet mailto: prefiks forran epost-adressen?", "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "Oppgitt URL ser ut til \u00e5 v\u00e6re en e-postadresse. \u00d8nsker du \u00e5 sette inn p\u00e5krevd mailto:-prefiks foran e-postadressen?", "Link list": "Lenkeliste", "Insert video": "Sett inn video", "Insert\/edit video": "Sett inn\/rediger video", "Insert\/edit media": "Sett inn\/endre media", "Alternative source": "Alternativ kilde", "Alternative source URL": "Alternativ kilde URL", "Media poster (Image URL)": "Mediaposter (bilde-URL)", "Paste your embed code below:": "Lim inn inkluderings-koden nedenfor", "Embed": "Inkluder", "Media...": "Media..", "Nonbreaking space": "Hardt mellomrom", "Page break": "Sideskifte", "Paste as text": "Lim inn som tekst", "Preview": "Forh\u00e5ndsvisning", "Print...": "Skriv ut...", "Save": "Arkiver", "Find": "Finn", "Replace with": "Erstatt med", "Replace": "Erstatt", "Replace all": "Erstatt alle", "Previous": "Forrige", "Next": "Neste", "Find and replace...": "Finn og erstatt...", "Could not find the specified string.": "Kunne ikke finne den spesifiserte teksten", "Match case": "Match store og sm\u00e5 bokstaver", "Find whole words only": "Finn kun hele ord", "Spell check": "Stavekontroll", "Ignore": "Ignorer", "Ignore all": "Ignorer alle", "Finish": "Avslutt", "Add to Dictionary": "Legg til i ordliste", "Insert table": "Sett inn tabell", "Table properties": "Tabell egenskaper", "Delete table": "Slett tabell", "Cell": "Celle", "Row": "Rad", "Column": "Kolonne", "Cell properties": "Celle egenskaper", "Merge cells": "Sl\u00e5 sammen celler", "Split cell": "Splitt celle", "Insert row before": "Sett inn rad f\u00f8r", "Insert row after": "Sett in rad etter", "Delete row": "Slett rad", "Row properties": "Rad egenskaper", "Cut row": "Klipp ut rad", "Copy row": "Kopier rad", "Paste row before": "Lim inn rad f\u00f8r", "Paste row after": "Lim inn rad etter", "Insert column before": "Sett inn kolonne f\u00f8r", "Insert column after": "Sett inn kolonne etter", "Delete column": "Slett kolonne", "Cols": "Kolonner", "Rows": "Rader", "Width": "Bredde", "Height": "H\u00f8yde", "Cell spacing": "Celleavstand", "Cell padding": "Cellemarg", "Show caption": "Vis bildetekst", "Left": "Venstre", "Center": "Midtstilt", "Right": "H\u00f8yre", "Cell type": "Celletype", "Scope": "Omfang", "Alignment": "Justering", "H Align": "H Justering", "V Align": "V Justering", "Top": "Topp", "Middle": "Midten", "Bottom": "Bunn", "Header cell": "Topptekst-celle", "Row group": "Radgruppe", "Column group": "Kolonnegruppe", "Row type": "Rad-type", "Header": "Topptekst", "Body": "Br\u00f8dtekst", "Footer": "Bunntekst", "Border color": "Rammefarge", "Insert template...": "Sett inn mal..", "Templates": "Maler", "Template": "Mal", "Text color": "Tekstfarge", "Background color": "Bakgrunnsfarge", "Custom...": "Tilpass...", "Custom color": "Tilpasset farge", "No color": "Ingen farge", "Remove color": "Fjern farge", "Table of Contents": "Innholdsfortegnelse", "Show blocks": "Vis blokker", "Show invisible characters": "Vis skjulte tegn", "Word count": "Ordtelling", "Count": "Opptelling", "Document": "Dokument", "Selection": "Utvalg", "Words": "Ord", "Words: {0}": "Antall ord: {0}", "{0} words": "{0} ord", "File": "Arkiv", "Edit": "Rediger", "Insert": "Sett inn", "View": "Vis", "Format": "Format", "Table": "Tabell", "Tools": "Verkt\u00f8y", "Powered by {0}": "Redigert med {0}", "Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Tekstredigering. Tast ALT-F9 for meny. Tast ALT-F10 for verkt\u00f8ys-rader. Tast ALT-0 for hjelp.", "Image title": "Bildetittel", "Border width": "Bordbredde", "Border style": "Bordstil", "Error": "Feil", "Warn": "Advarsel", "Valid": "Gyldig", "To open the popup, press Shift+Enter": "For \u00e5 \u00e5pne popup, trykk Shift+Enter", "Rich Text Area. Press ALT-0 for help.": "Rik-tekstomr\u00e5de. Trykk ALT-0 for hjelp.", "System Font": "Systemfont", "Failed to upload image: {0}": "Opplasting av bilde feilet: {0}", "Failed to load plugin: {0} from url {1}": "Kunne ikke laste tillegg: {0} from url {1}", "Failed to load plugin url: {0}": "Kunne ikke laste tillegg url: {0}", "Failed to initialize plugin: {0}": "Kunne ikke initialisere tillegg: {0}", "example": "eksempel", "Search": "S\u00f8k", "All": "Alle", "Currency": "Valuta", "Text": "Tekst", "Quotations": "Sitater", "Mathematical": "Matematisk", "Extended Latin": "Utvidet latin", "Symbols": "Symboler", "Arrows": "Piler", "User Defined": "Brukerdefinert", "dollar sign": "dollartegn", "currency sign": "valutasymbol", "euro-currency sign": "Euro-valutasymbol", "colon sign": "kolon-symbol", "cruzeiro sign": "cruzeiro-symbol", "french franc sign": "franske franc-symbol", "lira sign": "lire-symbol", "mill sign": "mill-symbol", "naira sign": "naira-symbol", "peseta sign": "peseta-symbol", "rupee sign": "rupee-symbol", "won sign": "won-symbol", "new sheqel sign": "Ny sheqel-symbol", "dong sign": "dong-symbol", "kip sign": "kip-symbol", "tugrik sign": "tugrik-symbol", "drachma sign": "drachma-symbol", "german penny symbol": "tysk penny-symbol", "peso sign": "peso-symbol", "guarani sign": "quarani-symbol", "austral sign": "austral-symbol", "hryvnia sign": "hryvina-symbol", "cedi sign": "credi-symbol", "livre tournois sign": "livre tournois-symbol", "spesmilo sign": "spesmilo-symbol", "tenge sign": "tenge-symbol", "indian rupee sign": "indisk rupee-symbol", "turkish lira sign": "tyrkisk lire-symbol", "nordic mark sign": "nordisk mark-symbol", "manat sign": "manat-symbol", "ruble sign": "ruble-symbol", "yen character": "yen-symbol", "yuan character": "yuan-symbol", "yuan character, in hong kong and taiwan": "yuan-symbol, i Hongkong og Taiwan", "yen\/yuan character variant one": "yen\/yuan-symbol variant en", "Loading emoticons...": "Laster emoticons..", "Could not load emoticons": "Kunne ikke laste emoticons", "People": "Mennesker", "Animals and Nature": "Dyr og natur", "Food and Drink": "Mat og drikke", "Activity": "Aktivitet", "Travel and Places": "Reise og steder", "Objects": "Objekter", "Flags": "Flagg", "Characters": "Tegn", "Characters (no spaces)": "Tegn (uten mellomrom)", "{0} characters": "{0} tegn", "Error: Form submit field collision.": "Feil: Skjemafelt innsendingskollisjon.", "Error: No form element found.": "Feil: Intet skjemafelt funnet.", "Update": "Oppdater", "Color swatch": "Fargepalett", "Turquoise": "Turkis", "Green": "Gr\u00f8nn", "Blue": "Bl\u00e5", "Purple": "Lilla", "Navy Blue": "Marinebl\u00e5", "Dark Turquoise": "M\u00f8rk turkis", "Dark Green": "M\u00f8rkegr\u00f8nn", "Medium Blue": "Mellombl\u00e5", "Medium Purple": "Medium lilla", "Midnight Blue": "Midnattbl\u00e5", "Yellow": "Gul", "Orange": "Oransje", "Red": "R\u00f8d", "Light Gray": "Lys gr\u00e5", "Gray": "Gr\u00e5", "Dark Yellow": "M\u00f8rk gul", "Dark Orange": "M\u00f8rk oransje", "Dark Red": "M\u00f8rker\u00f8d", "Medium Gray": "Medium gr\u00e5", "Dark Gray": "M\u00f8rk gr\u00e5", "Light Green": "Lys gr\u00f8nn", "Light Yellow": "Lys gul", "Light Red": "Lys r\u00f8d", "Light Purple": "Lys lilla", "Light Blue": "Lys bl\u00e5", "Dark Purple": "M\u00f8rk lilla", "Dark Blue": "M\u00f8rk bl\u00e5", "Black": "Svart", "White": "Hvit", "Switch to or from fullscreen mode": "Bytt til eller fra fullskjermmodus", "Open help dialog": "\u00c5pne hjelp-dialog", "history": "historikk", "styles": "stiler", "formatting": "formatering", "alignment": "justering", "indentation": "innrykk", "permanent pen": "permanent penn", "comments": "kommentarer", "Format Painter": "Kopier format", "Insert\/edit iframe": "Sett inn \/ rediger iframe", "Capitalization": "Store\/sm\u00e5 bokstaver", "lowercase": "sm\u00e5 bokstaver", "UPPERCASE": "STORE BOKSTAVER", "Title Case": "Tittelbokstav", "Permanent Pen Properties": "Permanente egenskaper for penn", "Permanent pen properties...": "Permanente egenskaper for penn...", "Font": "Skrift", "Size": "St\u00f8rrelse", "More...": "Mer...", "Spellcheck Language": "Stavekontroller spr\u00e5k", "Select...": "Velg...", "Preferences": "Innstillinger", "Yes": "Ja", "No": "Nei", "Keyboard Navigation": "Navigering med tastaturet", "Version": "Versjon", "Anchor": "Anker", "Special character": "Spesialtegn", "Code sample": "Kodeeksempel", "Color": "Farge", "Emoticons": "Hum\u00f8rfjes", "Document properties": "Dokumentegenskaper", "Image": "Bilde", "Insert link": "Sett inn lenke", "Target": "M\u00e5l", "Link": "Lenke", "Poster": "Plakatbilde", "Media": "Media", "Print": "Skriv ut", "Prev": "Forrige", "Find and replace": "Finn og erstatt", "Whole words": "Hele ord", "Spellcheck": "Stavekontroll", "Caption": "Tittel", "Insert template": "Sett inn mal" }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/tinymce/langs/nl.js ================================================ tinymce.addI18n('nl',{ "Redo": "Opnieuw uitvoeren", "Undo": "Ongedaan maken", "Cut": "Knippen", "Copy": "Kopi\u00ebren", "Paste": "Plakken", "Select all": "Alles selecteren", "New document": "Nieuw document", "Ok": "OK", "Cancel": "Annuleren", "Visual aids": " Visuele hulpmiddelen", "Bold": "Vet", "Italic": "Cursief", "Underline": "Onderstrepen", "Strikethrough": "Doorhalen", "Superscript": "Superscript", "Subscript": "Subscript", "Clear formatting": "Opmaak wissen", "Align left": "Links uitlijnen", "Align center": "Centreren", "Align right": "Rechts uitlijnen", "Justify": "Uitvullen", "Bullet list": "Lijst met opsommingstekens", "Numbered list": "Genummerde lijst", "Decrease indent": "Inspringing verkleinen", "Increase indent": "Inspringing vergroten", "Close": "Sluiten", "Formats": "Opmaken", "Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Jouw browser ondersteunt geen rechtstreekse toegang tot het klembord. Gebruik in plaats daarvan de sneltoetsen Ctrl+X\/C\/V.", "Headers": "Kopteksten", "Header 1": "Koptekst 1", "Header 2": "Koptekst 2", "Header 3": "Koptekst 3", "Header 4": "Koptekst 4", "Header 5": "Koptekst 5", "Header 6": "Koptekst 6", "Headings": "Koppen", "Heading 1": "Kop 1", "Heading 2": "Kop 2", "Heading 3": "Kop 3", "Heading 4": "Kop 4", "Heading 5": "Kop 5", "Heading 6": "Kop 6", "Preformatted": "Vooraf opgemaakt", "Div": "Div", "Pre": "Pre", "Code": "Code", "Paragraph": "Alinea", "Blockquote": "Blockquote", "Inline": "Inline", "Blocks": "Blokken", "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Plakken gebeurt nu als platte tekst. Tekst wordt nu ingevoegd zonder opmaak tot deze optie uitgeschakeld wordt.", "Fonts": "Lettertypes", "Font Sizes": "Tekengroottes", "Class": "Klasse", "Browse for an image": "Afbeelding zoeken", "OR": "OF", "Drop an image here": "Hier een afbeelding neerzetten", "Upload": "Uploaden", "Block": "Blok", "Align": "Uitlijnen", "Default": "Standaard", "Circle": "Cirkel", "Disc": "Bolletje", "Square": "Vierkant", "Lower Alpha": "Kleine letters", "Lower Greek": "Griekse letters", "Lower Roman": "Romeinse cijfers klein", "Upper Alpha": "Hoofdletters", "Upper Roman": "Romeinse cijfers groot", "Anchor...": "Anker...", "Name": "Naam", "Id": "ID", "Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "ID moet beginnen met een letter, gevolgd door letters, nummers, streepjes, punten, dubbele punten of underscores.", "You have unsaved changes are you sure you want to navigate away?": "U hebt niet alles opgeslagen bent u zeker dat u de pagina wenst te verlaten?", "Restore last draft": "Herstel het laatste concept", "Special character...": "Speciaal teken...", "Source code": "Broncode", "Insert\/Edit code sample": "Broncode invoegen\/bewerken", "Language": "Programmeertaal", "Code sample...": "Codevoorbeeld...", "Color Picker": "Kleurenkiezer", "R": "Rood", "G": "Groen", "B": "Blauw", "Left to right": "Links naar rechts", "Right to left": "Rechts naar links", "Emoticons...": "Emoticons...", "Metadata and Document Properties": "Metadata en documenteigenschappen", "Title": "Titel", "Keywords": "Sleutelwoorden", "Description": "Omschrijving", "Robots": "Robots", "Author": "Auteur", "Encoding": "Codering", "Fullscreen": "Volledig scherm", "Action": "Actie", "Shortcut": "Snelkoppeling", "Help": "Help", "Address": "Adres", "Focus to menubar": "Menubalk selecteren", "Focus to toolbar": "Werkbalk selecteren", "Focus to element path": "Element pad selecteren", "Focus to contextual toolbar": "Contextuele werkbalk selecteren", "Insert link (if link plugin activated)": "Link invoegen (als link plug-in geactiveerd is)", "Save (if save plugin activated)": "Opslaan (als opslaan plug-in ingeschakeld is)", "Find (if searchreplace plugin activated)": "Zoeken (als zoeken\/vervangen plug-in ingeschakeld is)", "Plugins installed ({0}):": "Plug-ins ge\u00efnstalleerd ({0}):", "Premium plugins:": "Premium plug-ins:", "Learn more...": "Leer meer...", "You are using {0}": "Je gebruikt {0}", "Plugins": "Plug-ins", "Handy Shortcuts": "Handige snelkoppelingen", "Horizontal line": "Horizontale lijn", "Insert\/edit image": "Afbeelding invoegen\/bewerken", "Image description": "Afbeelding omschrijving", "Source": "Bron", "Dimensions": "Afmetingen", "Constrain proportions": "Verhoudingen behouden", "General": "Algemeen", "Advanced": "Geavanceerd", "Style": "Stijl", "Vertical space": "Verticale ruimte", "Horizontal space": "Horizontale ruimte", "Border": "Rand", "Insert image": "Afbeelding invoegen", "Image...": "Afbeelding...", "Image list": "Afbeeldingenlijst", "Rotate counterclockwise": "Linksom draaien", "Rotate clockwise": "Rechtsom draaien", "Flip vertically": "Verticaal spiegelen", "Flip horizontally": "Horizontaal spiegelen", "Edit image": "Bewerk afbeelding", "Image options": "Afbeelding opties", "Zoom in": "Inzoomen", "Zoom out": "Uitzoomen", "Crop": "Uitsnijden", "Resize": "Formaat aanpassen", "Orientation": "Orientatie", "Brightness": "Helderheid", "Sharpen": "Scherpte", "Contrast": "Contrast", "Color levels": "Kleurniveau's", "Gamma": "Gamma", "Invert": "Omkeren", "Apply": "Toepassen", "Back": "Terug", "Insert date\/time": "Voeg datum\/tijd in", "Date\/time": "Datum\/tijd", "Insert\/Edit Link": "Link invoegen\/bewerken", "Insert\/edit link": "Hyperlink invoegen\/bewerken", "Text to display": "Linktekst", "Url": "Url", "Open link in...": "Link openen in...", "Current window": "Huidige venster", "None": "Geen", "New window": "Nieuw venster", "Remove link": "Link verwijderen", "Anchors": "Anker", "Link...": "Link...", "Paste or type a link": "Plak of typ een link", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "De ingegeven URL lijkt op een e-mailadres. Wil je er \"mailto:\" aan toevoegen?", "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "De ingegeven URL verwijst naar een extern adres. Wil je er \"http:\/\/\" aan toevoegen?", "Link list": "Linklijst", "Insert video": "Video invoegen", "Insert\/edit video": "Video invoegen\/bewerken", "Insert\/edit media": "Media invoegen\/bewerken", "Alternative source": "Alternatieve bron", "Alternative source URL": "Alternatief bron-URL", "Media poster (Image URL)": "Mediaposter (afbeeldings-url)", "Paste your embed code below:": "Plak u in te sluiten code hieronder:", "Embed": "Insluiten", "Media...": "Media...", "Nonbreaking space": "Vaste spatie invoegen", "Page break": "Pagina einde", "Paste as text": "Plakken als tekst", "Preview": "Voorbeeld", "Print...": "Afdrukken... ", "Save": "Opslaan", "Find": "Zoeken", "Replace with": "Vervangen door", "Replace": "Vervangen", "Replace all": "Alles vervangen", "Previous": "Vorige", "Next": "Volgende", "Find and replace...": "Zoeken en vervangen...", "Could not find the specified string.": "Geen resultaten gevonden", "Match case": "Identieke hoofd\/kleine letters", "Find whole words only": "Alleen hele woorden zoeken", "Spell check": "Spellingscontrole", "Ignore": "Negeren", "Ignore all": "Alles negeren", "Finish": "Einde", "Add to Dictionary": "Toevoegen aan woordenlijst", "Insert table": "Tabel invoegen", "Table properties": "Tabel eigenschappen", "Delete table": "Verwijder tabel", "Cell": "Cel", "Row": "Rij", "Column": "Kolom", "Cell properties": "Cel eigenschappen", "Merge cells": "Cellen samenvoegen", "Split cell": "Cel splitsen", "Insert row before": "Voeg rij boven toe", "Insert row after": "Voeg rij onder toe", "Delete row": "Verwijder rij", "Row properties": "Rij eigenschappen", "Cut row": "Knip rij", "Copy row": "Kopieer rij", "Paste row before": "Plak rij boven", "Paste row after": "Plak rij onder", "Insert column before": "Voeg kolom in voor", "Insert column after": "Voeg kolom in na", "Delete column": "Verwijder kolom", "Cols": "Kolommen", "Rows": "Rijen", "Width": "Breedte", "Height": "Hoogte", "Cell spacing": "Celruimte", "Cell padding": "Ruimte binnen cel", "Show caption": "Bijschrift weergeven", "Left": "Links", "Center": "Midden", "Right": "Rechts", "Cell type": "Celtype", "Scope": "Bereik", "Alignment": "Uitlijning", "H Align": "Links uitlijnen", "V Align": "Boven uitlijnen", "Top": "Bovenaan", "Middle": "Centreren", "Bottom": "Onderaan", "Header cell": "Kopcel", "Row group": "Rijgroep", "Column group": "Kolomgroep", "Row type": "Rijtype", "Header": "Koptekst", "Body": "Body", "Footer": "Voettekst", "Border color": "Randkleur", "Insert template...": "Sjabloon invoegen...", "Templates": "Sjablonen", "Template": "Sjabloon", "Text color": "Tekstkleur", "Background color": "Achtergrondkleur", "Custom...": "Eigen...", "Custom color": "Eigen kleur", "No color": "Geen kleur", "Remove color": "Kleur verwijderen", "Table of Contents": "Inhoudsopgave", "Show blocks": "Blokken tonen", "Show invisible characters": "Onzichtbare karakters tonen", "Word count": "Aantal woorden", "Count": "Telling", "Document": "Document", "Selection": "Selectie", "Words": "Woorden", "Words: {0}": "Woorden: {0}", "{0} words": "{0} woorden", "File": "Bestand", "Edit": "Bewerken", "Insert": "Invoegen", "View": "Beeld", "Format": "Opmaak", "Table": "Tabel", "Tools": "Gereedschap", "Powered by {0}": "Gemaakt door {0}", "Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Rich Text Area. Druk ALT-F9 voor het menu. Druk ALT-F10 voor de toolbar. Druk ALT-0 voor help.", "Image title": "Afbeeldingstitel", "Border width": "Randbreedte", "Border style": "Randstijl", "Error": "Fout", "Warn": "Waarschuwen", "Valid": "Geldig", "To open the popup, press Shift+Enter": "Druk op Shift+Enter om de pop-up te openen", "Rich Text Area. Press ALT-0 for help.": " Gebied met opgemaakte tekst. Druk op ALT-0 voor hulp.", "System Font": "Systeemlettertype", "Failed to upload image: {0}": "Niet gelukt om afbeelding te uploaden: {0}", "Failed to load plugin: {0} from url {1}": "Niet gelukt om plug-in te laden: {0} vanaf URL {1}", "Failed to load plugin url: {0}": "Niet gelukt om URL plug-in te laden: {0}", "Failed to initialize plugin: {0}": "Niet gelukt om plug-in te initialiseren: {0}", "example": "voorbeeld", "Search": "Zoeken", "All": "Alle", "Currency": "Valuta", "Text": "Tekst", "Quotations": "Citaten", "Mathematical": "Wiskundig", "Extended Latin": "Latijn uitgebreid ", "Symbols": "Symbolen", "Arrows": "Pijlen", "User Defined": "Door gebruiker gedefinieerd ", "dollar sign": "dollarteken", "currency sign": "valutateken", "euro-currency sign": "euroteken", "colon sign": "colon-teken", "cruzeiro sign": "cruzeiro-teken", "french franc sign": "franse franc-teken", "lira sign": "lire-teken", "mill sign": "mill-teken", "naira sign": "naira-teken", "peseta sign": "peseta-teken", "rupee sign": "roepie-teken", "won sign": "won-teken", "new sheqel sign": "nieuwe sheqel-teken", "dong sign": "dong-teken", "kip sign": "kip-teken", "tugrik sign": "tugrik-teken", "drachma sign": "drachme-teken", "german penny symbol": "duitse pfennig-teken", "peso sign": "peso-teken", "guarani sign": "guarani-teken", "austral sign": "austral-teken", "hryvnia sign": "hryvnia-teken", "cedi sign": "cedi-teken", "livre tournois sign": "livre tournois-teken", "spesmilo sign": "spesmilo-teken", "tenge sign": "tenge-teken", "indian rupee sign": "indiaase roepie-teken", "turkish lira sign": "turkse lire-teken", "nordic mark sign": "noorse mark-teken", "manat sign": "manat-teken", "ruble sign": "roebel-teken", "yen character": "yen-teken", "yuan character": "yuan-teken", "yuan character, in hong kong and taiwan": "yuan-teken (Hong Kong en Taiwan)", "yen\/yuan character variant one": "yen\/yuan variant 1-teken", "Loading emoticons...": "Emoticons laden...", "Could not load emoticons": "Kan emoticons niet laden", "People": "Personen", "Animals and Nature": "Dieren en natuur", "Food and Drink": "Eten en drinken", "Activity": "Activiteit", "Travel and Places": "Reizen en plaatsen", "Objects": "Objecten", "Flags": "Vlaggen", "Characters": "Tekens", "Characters (no spaces)": "Tekens (geen spaties)", "{0} characters": "{0} karakters", "Error: Form submit field collision.": "Fout: Veldconflict bij versturen formulier.", "Error: No form element found.": "Fout: Geen formulierelement gevonden.", "Update": "Bijwerken", "Color swatch": "Kleurenwaaier", "Turquoise": "Turquoise", "Green": "Groen", "Blue": "Blauw", "Purple": "Paars", "Navy Blue": "Marineblauw", "Dark Turquoise": "Donkerturquoise", "Dark Green": "Donkergroen", "Medium Blue": "Middelblauw", "Medium Purple": "Middelpaars", "Midnight Blue": "Middernachtblauw", "Yellow": "Geel", "Orange": "Oranje", "Red": "Rood", "Light Gray": "Lichtgrijs", "Gray": "Grijs", "Dark Yellow": "Donkergeel", "Dark Orange": "Donkeroranje", "Dark Red": "Donkerrood", "Medium Gray": "Middelgrijs", "Dark Gray": "Donkergrijs", "Light Green": "Lichtgroen", "Light Yellow": "Lichtgeel", "Light Red": "Lichtrood", "Light Purple": "Lichtpaars", "Light Blue": "Lichtblauw", "Dark Purple": "Donkerpaars", "Dark Blue": "Donkerblauw", "Black": "Zwart", "White": "Wit", "Switch to or from fullscreen mode": "Overschakelen naar of vanuit de volledig scherm-modus", "Open help dialog": "Help-scherm openen", "history": "geschiedenis", "styles": "stijlen", "formatting": "opmaak", "alignment": "uitlijning", "indentation": "inspringing", "permanent pen": "permanent pen", "comments": "opmerkingen", "Format Painter": "Opmaak overnemen", "Insert\/edit iframe": "Iframe toevoegen\/aanpassen", "Capitalization": "Hoofdletter gebruik", "lowercase": "kleine letters", "UPPERCASE": "HOOFDLETTERS", "Title Case": "Titel hoofdletter gebruik", "Permanent Pen Properties": "Permantente Pen eigenschappen", "Permanent pen properties...": "Permantente pen eigenschappen...", "Font": "Lettertype", "Size": "Formaat", "More...": "Meer...", "Spellcheck Language": "Spellingscontrole taal", "Select...": "Selecteer...", "Preferences": "Voorkeuren", "Yes": "Ja", "No": "Nee", "Keyboard Navigation": "Toetsenbord navigatie", "Version": "Versie", "Anchor": "Anker", "Special character": "Speciale karakters", "Code sample": "Broncode voorbeeld", "Color": "Kleur", "Emoticons": "Emoticons", "Document properties": "Document eigenschappen", "Image": "Afbeelding", "Insert link": "Hyperlink invoegen", "Target": "Doel", "Link": "Link", "Poster": "Poster", "Media": "Media", "Print": "Print", "Prev": "Vorige", "Find and replace": "Zoek en vervang", "Whole words": "Alleen hele woorden", "Spellcheck": "Spellingscontrole", "Caption": "Onderschrift", "Insert template": "Sjabloon invoegen" }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/tinymce/langs/pl.js ================================================ tinymce.addI18n('pl',{ "Redo": "Powt\u00f3rz", "Undo": "Cofnij", "Cut": "Wytnij", "Copy": "Kopiuj", "Paste": "Wklej", "Select all": "Zaznacz wszystko", "New document": "Nowy dokument", "Ok": "Ok", "Cancel": "Anuluj", "Visual aids": "Pomoce wizualne", "Bold": "Pogrubienie", "Italic": "Kursywa", "Underline": "Podkre\u015blenie", "Strikethrough": "Przekre\u015blenie", "Superscript": "Indeks g\u00f3rny", "Subscript": "Indeks dolny", "Clear formatting": "Wyczy\u015b\u0107 formatowanie", "Align left": "Wyr\u00f3wnaj do lewej", "Align center": "Wyr\u00f3wnaj do \u015brodka", "Align right": "Wyr\u00f3wnaj do prawej", "Justify": "Wyjustuj", "Bullet list": "Lista wypunktowana", "Numbered list": "Lista numerowana", "Decrease indent": "Zmniejsz wci\u0119cie", "Increase indent": "Zwi\u0119ksz wci\u0119cie", "Close": "Zamknij", "Formats": "Formaty", "Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Twoja przegl\u0105darka nie obs\u0142uguje bezpo\u015bredniego dost\u0119pu do schowka. U\u017cyj zamiast tego kombinacji klawiszy Ctrl+X\/C\/V.", "Headers": "Nag\u0142\u00f3wki", "Header 1": "Nag\u0142\u00f3wek 1", "Header 2": "Nag\u0142\u00f3wek 2", "Header 3": "Nag\u0142\u00f3wek 3", "Header 4": "Nag\u0142\u00f3wek 4", "Header 5": "Nag\u0142\u00f3wek 5", "Header 6": "Nag\u0142\u00f3wek 6", "Headings": "Nag\u0142\u00f3wki", "Heading 1": "Nag\u0142\u00f3wek 1", "Heading 2": "Nag\u0142\u00f3wek 2", "Heading 3": "Nag\u0142\u00f3wek 3", "Heading 4": "Nag\u0142\u00f3wek 4", "Heading 5": "Nag\u0142\u00f3wek 5", "Heading 6": "Nag\u0142\u00f3wek 6", "Preformatted": "Wst\u0119pne formatowanie", "Div": "Div", "Pre": "Pre", "Code": "Kod", "Paragraph": "Akapit", "Blockquote": "Blok cytatu", "Inline": "W tek\u015bcie", "Blocks": "Bloki", "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Wklejanie jest w trybie tekstowym. Zawarto\u015b\u0107 zostanie wklejona jako zwyk\u0142y tekst dop\u00f3ki nie wy\u0142\u0105czysz tej opcji.", "Fonts": "Fonty", "Font Sizes": "Rozmiar fontu", "Class": "Klasa", "Browse for an image": "Przegl\u0105daj za zdj\u0119ciem", "OR": "LUB", "Drop an image here": "Upu\u015b\u0107 obraz tutaj", "Upload": "Prze\u015blij", "Block": "Zablokuj", "Align": "Wyr\u00f3wnaj", "Default": "Domy\u015blne", "Circle": "K\u00f3\u0142ko", "Disc": "Dysk", "Square": "Kwadrat", "Lower Alpha": "Ma\u0142e litery", "Lower Greek": "Ma\u0142e greckie", "Lower Roman": "Ma\u0142e rzymskie", "Upper Alpha": "Wielkie litery", "Upper Roman": "Wielkie rzymskie", "Anchor...": "Kotwica...", "Name": "Nazwa", "Id": "Identyfikator", "Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Identyfikator powinien zaczyna\u0107 si\u0119 liter\u0105, dozwolone s\u0105 tylko litery, numery, uko\u015bniki, kropki, dwukropki i podkre\u015blniki - tzw. pod\u0142ogi", "You have unsaved changes are you sure you want to navigate away?": "Masz niezapisane zmiany. Czy na pewno chcesz opu\u015bci\u0107 stron\u0119?", "Restore last draft": "Przywr\u00f3\u0107 ostatni szkic", "Special character...": "Znak specjalny...", "Source code": "Kod \u017ar\u00f3d\u0142owy", "Insert\/Edit code sample": "Dodaj\/Edytuj przyk\u0142adowy kod", "Language": "J\u0119zyk", "Code sample...": "Przyk\u0142ad kodu...", "Color Picker": "Selektor kolor\u00f3w", "R": "R", "G": "G", "B": "B", "Left to right": "Od lewej do prawej", "Right to left": "Od prawej do lewej", "Emoticons...": "Emotikony...", "Metadata and Document Properties": "Metadane i w\u0142a\u015bciwo\u015bci dokumentu", "Title": "Tytu\u0142", "Keywords": "S\u0142owa kluczowe", "Description": "Opis", "Robots": "Roboty", "Author": "Autor", "Encoding": "Kodowanie", "Fullscreen": "Pe\u0142ny ekran", "Action": "Akcja", "Shortcut": "Skr\u00f3t", "Help": "Pomoc", "Address": "Adres", "Focus to menubar": "Skup si\u0119 na pasku menu", "Focus to toolbar": "Skupi\u0107 si\u0119 na pasku", "Focus to element path": "Skup si\u0119 na \u015bcie\u017cce elementu", "Focus to contextual toolbar": "Skupi\u0107 si\u0119 na pasku narz\u0119dzi kontekstowych", "Insert link (if link plugin activated)": "Wstaw \u0142\u0105cze (je\u015bli w\u0142\u0105czysz wtyczk\u0119 link\u00f3w)", "Save (if save plugin activated)": "Zapisz (je\u015bli aktywowana jest wtyczka do zapisu)", "Find (if searchreplace plugin activated)": "Znajd\u017a (je\u015bli w\u0142\u0105czysz wtyczk\u0119 do wyszukiwania)", "Plugins installed ({0}):": "Zainstalowane wtyczki ({0}):", "Premium plugins:": "Wtyczki Premium:", "Learn more...": "Dowiedz si\u0119 wi\u0119cej...", "You are using {0}": "U\u017cywasz {0}", "Plugins": "Pluginy", "Handy Shortcuts": "Przydatne skr\u00f3ty", "Horizontal line": "Pozioma linia", "Insert\/edit image": "Wstaw\/edytuj obrazek", "Image description": "Opis obrazka", "Source": "\u0179r\u00f3d\u0142o", "Dimensions": "Wymiary", "Constrain proportions": "Zachowaj proporcje", "General": "Og\u00f3lne", "Advanced": "Zaawansowane", "Style": "Styl", "Vertical space": "Odst\u0119p pionowy", "Horizontal space": "Odst\u0119p poziomy", "Border": "Ramka", "Insert image": "Wstaw obrazek", "Image...": "Obraz...", "Image list": "Lista obrazk\u00f3w", "Rotate counterclockwise": "Obr\u00f3\u0107 w lewo", "Rotate clockwise": "Obr\u00f3\u0107 w prawo", "Flip vertically": "Przerzu\u0107 w pionie", "Flip horizontally": "Przerzu\u0107 w poziomie", "Edit image": "Edytuj obrazek", "Image options": "Opcje obrazu", "Zoom in": "Powi\u0119ksz", "Zoom out": "Pomniejsz", "Crop": "Przytnij", "Resize": "Zmiana rozmiaru", "Orientation": "Orientacja", "Brightness": "Jasno\u015b\u0107", "Sharpen": "Wyostrz", "Contrast": "Kontrast", "Color levels": "Poziom koloru", "Gamma": "Gamma", "Invert": "Odwr\u00f3\u0107", "Apply": "Zaakceptuj", "Back": "Cofnij", "Insert date\/time": "Wstaw dat\u0119\/czas", "Date\/time": "Data\/Czas", "Insert\/Edit Link": "Wstaw\/Edytuj \u0142\u0105cze", "Insert\/edit link": "Wstaw\/edytuj \u0142\u0105cze", "Text to display": "Tekst do wy\u015bwietlenia", "Url": "URL", "Open link in...": "Otw\u00f3rz \u0142\u0105cze w...", "Current window": "Bie\u017c\u0105ce okno", "None": "\u017baden", "New window": "Nowe okno", "Remove link": "Usu\u0144 \u0142\u0105cze", "Anchors": "Kotwice", "Link...": "\u0141\u0105cze...", "Paste or type a link": "Wklej lub wpisz adres \u0142\u0105cza", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "URL, kt\u00f3ry wprowadzi\u0142e\u015b wygl\u0105da na adres e-mail. Czy chcesz doda\u0107 mailto: jako prefiks?", "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "URL, kt\u00f3ry wprowadzi\u0142e\u015b wygl\u0105da na link zewn\u0119trzny. Czy chcesz doda\u0107 http:\/\/ jako prefiks?", "Link list": "Lista link\u00f3w", "Insert video": "Wstaw wideo", "Insert\/edit video": "Wstaw\/edytuj wideo", "Insert\/edit media": "Wstaw\/Edytuj media", "Alternative source": "Alternatywne \u017ar\u00f3d\u0142o", "Alternative source URL": "Alternatywny URL \u017ar\u00f3d\u0142a", "Media poster (Image URL)": "Plakat (URL obrazu)", "Paste your embed code below:": "Wklej tutaj kod do osadzenia:", "Embed": "Osad\u017a", "Media...": "Multimedia...", "Nonbreaking space": "Nie\u0142amliwa spacja", "Page break": "Podzia\u0142 strony", "Paste as text": "Wklej jako zwyk\u0142y tekst", "Preview": "Podgl\u0105d", "Print...": "Drukuj...", "Save": "Zapisz", "Find": "Znajd\u017a", "Replace with": "Zamie\u0144 na", "Replace": "Zamie\u0144", "Replace all": "Zamie\u0144 wszystko", "Previous": "Poprzedni", "Next": "Nast.", "Find and replace...": "Znajd\u017a i zamie\u0144...", "Could not find the specified string.": "Nie znaleziono szukanego tekstu.", "Match case": "Dopasuj wielko\u015b\u0107 liter", "Find whole words only": "Znajd\u017a tylko ca\u0142e wyrazy", "Spell check": "Sprawd\u017a pisowni\u0119", "Ignore": "Ignoruj", "Ignore all": "Ignoruj wszystko", "Finish": "Zako\u0144cz", "Add to Dictionary": "Dodaj do s\u0142ownika", "Insert table": "Wstaw tabel\u0119", "Table properties": "W\u0142a\u015bciwo\u015bci tabeli", "Delete table": "Usu\u0144 tabel\u0119", "Cell": "Kom\u00f3rka", "Row": "Wiersz", "Column": "Kolumna", "Cell properties": "W\u0142a\u015bciwo\u015bci kom\u00f3rki", "Merge cells": "\u0141\u0105cz kom\u00f3rki", "Split cell": "Podziel kom\u00f3rk\u0119", "Insert row before": "Wstaw wiersz przed", "Insert row after": "Wstaw wiersz po", "Delete row": "Usu\u0144 wiersz", "Row properties": "W\u0142a\u015bciwo\u015bci wiersza", "Cut row": "Wytnij wiersz", "Copy row": "Kopiuj wiersz", "Paste row before": "Wklej wiersz przed", "Paste row after": "Wklej wiersz po", "Insert column before": "Wstaw kolumn\u0119 przed", "Insert column after": "Wstaw kolumn\u0119 po", "Delete column": "Usu\u0144 kolumn\u0119", "Cols": "Kol.", "Rows": "Wiersz.", "Width": "Szeroko\u015b\u0107", "Height": "Wysoko\u015b\u0107", "Cell spacing": "Odst\u0119py kom\u00f3rek", "Cell padding": "Dope\u0142nienie kom\u00f3rki", "Show caption": "Poka\u017c podpis", "Left": "Lewo", "Center": "\u015arodek", "Right": "Prawo", "Cell type": "Typ kom\u00f3rki", "Scope": "Kontekst", "Alignment": "Wyr\u00f3wnanie", "H Align": "Wyr\u00f3wnanie w pionie", "V Align": "Wyr\u00f3wnanie w poziomie", "Top": "G\u00f3ra", "Middle": "\u015arodek", "Bottom": "D\u00f3\u0142", "Header cell": "Kom\u00f3rka nag\u0142\u00f3wka", "Row group": "Grupa wierszy", "Column group": "Grupa kolumn", "Row type": "Typ wiersza", "Header": "Nag\u0142\u00f3wek", "Body": "Tre\u015b\u0107", "Footer": "Stopka", "Border color": "Kolor ramki", "Insert template...": "Wstaw szablon...", "Templates": "Szablony", "Template": "Szablon", "Text color": "Kolor tekstu", "Background color": "Kolor t\u0142a", "Custom...": "Niestandardowy...", "Custom color": "Kolor niestandardowy", "No color": "Bez koloru", "Remove color": "Usu\u0144 kolor", "Table of Contents": "Spis tre\u015bci", "Show blocks": "Poka\u017c bloki", "Show invisible characters": "Poka\u017c niewidoczne znaki", "Word count": "Liczba s\u0142\u00f3w", "Count": "Liczba", "Document": "Dokument", "Selection": "Zaznaczenie", "Words": "S\u0142owa", "Words: {0}": "S\u0142\u00f3w: {0}", "{0} words": "{0} s\u0142\u00f3w", "File": "Plik", "Edit": "Edycja", "Insert": "Wstaw", "View": "Widok", "Format": "Format", "Table": "Tabela", "Tools": "Narz\u0119dzia", "Powered by {0}": "Powered by {0}", "Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Obszar Edycji. ALT-F9 - menu. ALT-F10 - pasek narz\u0119dzi. ALT-0 - pomoc", "Image title": "Tytu\u0142 obrazu", "Border width": "Grubo\u015b\u0107 ramki", "Border style": "Styl ramki", "Error": "B\u0142\u0105d", "Warn": "Ostrze\u017cenie", "Valid": "Prawid\u0142owe", "To open the popup, press Shift+Enter": "Aby otworzy\u0107 okienko, naci\u015bnij Shift+Enter", "Rich Text Area. Press ALT-0 for help.": "Obszar tekstu sformatowanego. Naci\u015bnij ALT-0, aby uzyska\u0107 pomoc.", "System Font": "Font systemowy", "Failed to upload image: {0}": "Nie uda\u0142o si\u0119 przes\u0142a\u0107 obrazu: {0}", "Failed to load plugin: {0} from url {1}": "Nie uda\u0142o si\u0119 za\u0142adowa\u0107 dodatku: {0} spod adresu url {1}", "Failed to load plugin url: {0}": "Nie uda\u0142o si\u0119 za\u0142adowa\u0107 adresu url dodatku: {0}", "Failed to initialize plugin: {0}": "Nie mo\u017cna zainicjowa\u0107 dodatku: {0}", "example": "przyk\u0142ad", "Search": "Wyszukaj", "All": "Wszystkie", "Currency": "Waluta", "Text": "Tekst", "Quotations": "Cudzys\u0142owy", "Mathematical": "Matematyczne", "Extended Latin": "Rozszerzony \u0142aci\u0144ski", "Symbols": "Symbole", "Arrows": "Strza\u0142ki", "User Defined": "W\u0142asny", "dollar sign": "znak dolara", "currency sign": "znak waluty", "euro-currency sign": "znak euro", "colon sign": "znak colon", "cruzeiro sign": "znak cruzeiro", "french franc sign": "znak franka francuskiego", "lira sign": "znak liry", "mill sign": "znak mill", "naira sign": "znak nairy", "peseta sign": "znak pesety", "rupee sign": "znak rupii", "won sign": "znak wona", "new sheqel sign": "znak nowego szekla", "dong sign": "znak donga", "kip sign": "znak kipa", "tugrik sign": "znak tugrika", "drachma sign": "znak drachmy", "german penny symbol": "znak feniga", "peso sign": "znak peso", "guarani sign": "znak guarani", "austral sign": "znak australa", "hryvnia sign": "znak hrywny", "cedi sign": "znak cedi", "livre tournois sign": "znak livre tournois", "spesmilo sign": "znak spesmilo", "tenge sign": "znak tenge", "indian rupee sign": "znak rupii indyjskiej", "turkish lira sign": "znak liry tureckiej", "nordic mark sign": "znak nordic mark", "manat sign": "znak manata", "ruble sign": "znak rubla", "yen character": "znak jena", "yuan character": "znak juana", "yuan character, in hong kong and taiwan": "znak juana w Hongkongu i na Tajwanie", "yen\/yuan character variant one": "jen\/juan, wariant pierwszy", "Loading emoticons...": "\u0141adowanie emotikon\u00f3w...", "Could not load emoticons": "Nie mo\u017cna za\u0142adowa\u0107 emotikon\u00f3w", "People": "Ludzie", "Animals and Nature": "Zwierz\u0119ta i natura", "Food and Drink": "Jedzenie i picie", "Activity": "Aktywno\u015b\u0107", "Travel and Places": "Podr\u00f3\u017ce i miejsca", "Objects": "Obiekty", "Flags": "Flagi", "Characters": "Znaki", "Characters (no spaces)": "Znaki (bez spacji)", "{0} characters": "{0} znak\u00f3w", "Error: Form submit field collision.": "B\u0142\u0105d: kolizja pola przesy\u0142ania formularza.", "Error: No form element found.": "B\u0142\u0105d: nie znaleziono elementu formularza.", "Update": "Aktualizuj", "Color swatch": "Pr\u00f3bka koloru", "Turquoise": "Turkusowy", "Green": "Zielony", "Blue": "Niebieski", "Purple": "Purpurowy", "Navy Blue": "Ciemnoniebieski", "Dark Turquoise": "Ciemnoturkusowy", "Dark Green": "Ciemnozielony", "Medium Blue": "\u015arednioniebieski", "Medium Purple": "\u015aredniopurpurowy", "Midnight Blue": "Nocny b\u0142\u0119kit", "Yellow": "\u017b\u00f3\u0142ty", "Orange": "Pomara\u0144czowy", "Red": "Czerwony", "Light Gray": "Jasnoszary", "Gray": "Szary", "Dark Yellow": "Ciemno\u017c\u00f3\u0142ty", "Dark Orange": "Ciemnopomara\u0144czowy", "Dark Red": "Ciemnoczerwony", "Medium Gray": "\u015arednioszary", "Dark Gray": "Ciemnoszary", "Light Green": "Jasnozielony", "Light Yellow": "Jasno\u017c\u00f3\u0142ty", "Light Red": "Jasnoczerwony", "Light Purple": "Jasnopurpurowy", "Light Blue": "Jasnoniebieski", "Dark Purple": "Ciemnopurpurowy", "Dark Blue": "Ciemnoniebieski", "Black": "Czarny", "White": "Bia\u0142y", "Switch to or from fullscreen mode": "W\u0142\u0105cz lub wy\u0142\u0105cz tryb pe\u0142noekranowy", "Open help dialog": "Otw\u00f3rz okno dialogowe pomocy", "history": "historia", "styles": "style", "formatting": "formatowanie", "alignment": "wyr\u00f3wnanie", "indentation": "wci\u0119cie", "permanent pen": "marker", "comments": "komentarze", "Format Painter": "Malarz format\u00f3w", "Insert\/edit iframe": "Wstaw\/edytuj iframe", "Capitalization": "Jak w zdaniu", "lowercase": "ma\u0142e litery", "UPPERCASE": "WIELKIE LITERY", "Title Case": "Jak Nazwy W\u0142asne", "Permanent Pen Properties": "W\u0142a\u015bciwo\u015bci markera", "Permanent pen properties...": "W\u0142a\u015bciwo\u015bci markera...", "Font": "Font", "Size": "Rozmiar", "More...": "Wi\u0119cej...", "Spellcheck Language": "J\u0119zyk sprawdzania pisowni", "Select...": "Wybierz...", "Preferences": "Ustawienia", "Yes": "Tak", "No": "Nie", "Keyboard Navigation": "Nawigacja za pomoc\u0105 klawiatury", "Version": "Wersja", "Anchor": "Kotwica", "Special character": "Znak specjalny", "Code sample": "Przyk\u0142ad kodu \u017ar\u00f3d\u0142owego", "Color": "Kolor", "Emoticons": "Ikony emocji", "Document properties": "W\u0142a\u015bciwo\u015bci dokumentu", "Image": "Obraz", "Insert link": "Wstaw \u0142\u0105cze", "Target": "Cel", "Link": "Adres \u0142\u0105cza", "Poster": "Plakat", "Media": "Media", "Print": "Drukuj", "Prev": "Poprz.", "Find and replace": "Znajd\u017a i zamie\u0144", "Whole words": "Ca\u0142e s\u0142owa", "Spellcheck": "Sprawdzanie pisowni", "Caption": "Tytu\u0142", "Insert template": "Wstaw szablon" }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/tinymce/langs/pt_BR.js ================================================ tinymce.addI18n('pt_BR',{ "Redo": "Refazer", "Undo": "Desfazer", "Cut": "Cortar", "Copy": "Copiar", "Paste": "Colar", "Select all": "Selecionar tudo", "New document": "Novo documento", "Ok": "Ok", "Cancel": "Cancelar", "Visual aids": "Ajuda visual", "Bold": "Negrito", "Italic": "It\u00e1lico", "Underline": "Sublinhado", "Strikethrough": "Tachado", "Superscript": "Sobrescrito", "Subscript": "Subscrito", "Clear formatting": "Limpar formata\u00e7\u00e3o", "Align left": "Alinhar \u00e0 esquerda", "Align center": "Centralizar", "Align right": "Alinhar \u00e0 direita", "Justify": "Justificar", "Bullet list": "Lista n\u00e3o ordenada", "Numbered list": "Lista ordenada", "Decrease indent": "Diminuir recuo", "Increase indent": "Aumentar recuo", "Close": "Fechar", "Formats": "Formatos", "Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Seu navegador n\u00e3o suporta acesso direto \u00e0 \u00e1rea de transfer\u00eancia. Por favor use os atalhos Ctrl+X - C - V do teclado", "Headers": "Cabe\u00e7alhos", "Header 1": "Cabe\u00e7alho 1", "Header 2": "Cabe\u00e7alho 2", "Header 3": "Cabe\u00e7alho 3", "Header 4": "Cabe\u00e7alho 4", "Header 5": "Cabe\u00e7alho 5", "Header 6": "Cabe\u00e7alho 6", "Headings": "T\u00edtulos", "Heading 1": "T\u00edtulo 1", "Heading 2": "T\u00edtulo 2", "Heading 3": "T\u00edtulo 3", "Heading 4": "T\u00edtulo 4", "Heading 5": "T\u00edtulo 5", "Heading 6": "T\u00edtulo 6", "Preformatted": "Pr\u00e9-formatado", "Div": "Div", "Pre": "Pre", "Code": "C\u00f3digo", "Paragraph": "Par\u00e1grafo", "Blockquote": "Aspas", "Inline": "Em linha", "Blocks": "Blocos", "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "O comando colar est\u00e1 agora em modo texto plano. O conte\u00fado ser\u00e1 colado como texto plano at\u00e9 voc\u00ea desligar esta op\u00e7\u00e3o.", "Fonts": "Fontes", "Font Sizes": "Tamanhos da fonte", "Class": "Classe", "Browse for an image": "Procure uma imagem", "OR": "OU", "Drop an image here": "Solte uma imagem aqui", "Upload": "Carregar", "Block": "Bloco", "Align": "Alinhamento", "Default": "Padr\u00e3o", "Circle": "C\u00edrculo", "Disc": "Disco", "Square": "Quadrado", "Lower Alpha": "a. b. c. ...", "Lower Greek": "\u03b1. \u03b2. \u03b3. ...", "Lower Roman": "i. ii. iii. ...", "Upper Alpha": "A. B. C. ...", "Upper Roman": "I. II. III. ...", "Anchor...": "\u00c2ncora...", "Name": "Nome", "Id": "Id", "Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Id deve come\u00e7ar com uma letra, seguido apenas por letras, n\u00fameros, tra\u00e7os, pontos, dois pontos ou sublinhados.", "You have unsaved changes are you sure you want to navigate away?": "Voc\u00ea tem mudan\u00e7as n\u00e3o salvas. Voc\u00ea tem certeza que deseja sair?", "Restore last draft": "Restaurar \u00faltimo rascunho", "Special character...": "Caractere especial...", "Source code": "C\u00f3digo fonte", "Insert\/Edit code sample": "Inserir\/Editar c\u00f3digo de exemplo", "Language": "Idioma", "Code sample...": "Exemplo de c\u00f3digo...", "Color Picker": "Seletor de Cores", "R": "R", "G": "G", "B": "B", "Left to right": "Da esquerda para a direita", "Right to left": "Da direita para a esquerda", "Emoticons...": "Emojis...", "Metadata and Document Properties": "Metadados e Propriedades do Documento", "Title": "T\u00edtulo", "Keywords": "Palavras-chave", "Description": "Descri\u00e7\u00e3o", "Robots": "Rob\u00f4s", "Author": "Autor", "Encoding": "Codifica\u00e7\u00e3o", "Fullscreen": "Tela cheia", "Action": "A\u00e7\u00e3o", "Shortcut": "Atalho", "Help": "Ajuda", "Address": "Endere\u00e7o", "Focus to menubar": "Foco no menu", "Focus to toolbar": "Foco na barra de ferramentas", "Focus to element path": "Foco no caminho do elemento", "Focus to contextual toolbar": "Foco na barra de ferramentas contextual", "Insert link (if link plugin activated)": "Inserir link (se o plugin de link estiver ativado)", "Save (if save plugin activated)": "Salvar (se o plugin de salvar estiver ativado)", "Find (if searchreplace plugin activated)": "Procurar (se o plugin de procurar e substituir estiver ativado)", "Plugins installed ({0}):": "Plugins instalados ({0}):", "Premium plugins:": "Plugins premium:", "Learn more...": "Saiba mais...", "You are using {0}": "Voc\u00ea est\u00e1 usando {0}", "Plugins": "Plugins", "Handy Shortcuts": "Atalhos \u00fateis", "Horizontal line": "Linha horizontal", "Insert\/edit image": "Inserir\/editar imagem", "Image description": "Inserir descri\u00e7\u00e3o", "Source": "Endere\u00e7o da imagem", "Dimensions": "Dimens\u00f5es", "Constrain proportions": "Manter propor\u00e7\u00f5es", "General": "Geral", "Advanced": "Avan\u00e7ado", "Style": "Estilo", "Vertical space": "Espa\u00e7amento vertical", "Horizontal space": "Espa\u00e7amento horizontal", "Border": "Borda", "Insert image": "Inserir imagem", "Image...": "Imagem...", "Image list": "Lista de Imagens", "Rotate counterclockwise": "Girar em sentido hor\u00e1rio", "Rotate clockwise": "Girar em sentido anti-hor\u00e1rio", "Flip vertically": "Virar verticalmente", "Flip horizontally": "Virar horizontalmente", "Edit image": "Editar imagem", "Image options": "Op\u00e7\u00f5es de Imagem", "Zoom in": "Aumentar zoom", "Zoom out": "Diminuir zoom", "Crop": "Cortar", "Resize": "Redimensionar", "Orientation": "Orienta\u00e7\u00e3o", "Brightness": "Brilho", "Sharpen": "Aumentar nitidez", "Contrast": "Contraste", "Color levels": "N\u00edveis de cor", "Gamma": "Gama", "Invert": "Inverter", "Apply": "Aplicar", "Back": "Voltar", "Insert date\/time": "Inserir data\/hora", "Date\/time": "data\/hora", "Insert\/Edit Link": "Inserir\/Editar Link", "Insert\/edit link": "Inserir\/editar link", "Text to display": "Texto para mostrar", "Url": "Url", "Open link in...": "Abrir link em...", "Current window": "Janela atual", "None": "Nenhum", "New window": "Nova janela", "Remove link": "Remover link", "Anchors": "\u00c2ncoras", "Link...": "Link...", "Paste or type a link": "Cole ou digite um Link", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?", "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "A URL que voc\u00ea informou parece ser um link externo. Deseja incluir o prefixo http:\/\/?", "Link list": "Lista de Links", "Insert video": "Inserir v\u00eddeo", "Insert\/edit video": "Inserir\/editar v\u00eddeo", "Insert\/edit media": "Inserir\/editar imagem", "Alternative source": "Fonte alternativa", "Alternative source URL": "Endere\u00e7o URL alternativo", "Media poster (Image URL)": "Post de m\u00eddia (URL da Imagem)", "Paste your embed code below:": "Insira o c\u00f3digo de incorpora\u00e7\u00e3o abaixo:", "Embed": "Incorporar", "Media...": "M\u00eddia...", "Nonbreaking space": "Espa\u00e7o n\u00e3o separ\u00e1vel", "Page break": "Quebra de p\u00e1gina", "Paste as text": "Colar como texto", "Preview": "Pr\u00e9-visualizar", "Print...": "Imprimir...", "Save": "Salvar", "Find": "Localizar", "Replace with": "Substituir por", "Replace": "Substituir", "Replace all": "Substituir tudo", "Previous": "Anterior", "Next": "Pr\u00f3ximo", "Find and replace...": "Encontrar e substituir...", "Could not find the specified string.": "N\u00e3o foi poss\u00edvel encontrar o termo especificado", "Match case": "Diferenciar mai\u00fasculas e min\u00fasculas", "Find whole words only": "Encontrar somente palavras inteiras", "Spell check": "Verifica\u00e7\u00e3o ortogr\u00e1fica", "Ignore": "Ignorar", "Ignore all": "Ignorar tudo", "Finish": "Finalizar", "Add to Dictionary": "Adicionar ao Dicion\u00e1rio", "Insert table": "Inserir tabela", "Table properties": "Propriedades da tabela", "Delete table": "Excluir tabela", "Cell": "C\u00e9lula", "Row": "Linha", "Column": "Coluna", "Cell properties": "Propriedades da c\u00e9lula", "Merge cells": "Agrupar c\u00e9lulas", "Split cell": "Dividir c\u00e9lula", "Insert row before": "Inserir linha antes", "Insert row after": "Inserir linha depois", "Delete row": "Excluir linha", "Row properties": "Propriedades da linha", "Cut row": "Recortar linha", "Copy row": "Copiar linha", "Paste row before": "Colar linha antes", "Paste row after": "Colar linha depois", "Insert column before": "Inserir coluna antes", "Insert column after": "Inserir coluna depois", "Delete column": "Excluir coluna", "Cols": "Colunas", "Rows": "Linhas", "Width": "Largura", "Height": "Altura", "Cell spacing": "Espa\u00e7amento da c\u00e9lula", "Cell padding": "Espa\u00e7amento interno da c\u00e9lula", "Show caption": "Mostrar descri\u00e7\u00e3o", "Left": "Esquerdo", "Center": "Centro", "Right": "Direita", "Cell type": "Tipo de c\u00e9lula", "Scope": "Escopo", "Alignment": "Alinhamento", "H Align": "Alinhamento H", "V Align": "Alinhamento V", "Top": "Superior", "Middle": "Meio", "Bottom": "Inferior", "Header cell": "C\u00e9lula cabe\u00e7alho", "Row group": "Agrupar linha", "Column group": "Agrupar coluna", "Row type": "Tipo de linha", "Header": "Cabe\u00e7alho", "Body": "Corpo", "Footer": "Rodap\u00e9", "Border color": "Cor da borda", "Insert template...": "Inserir modelo...", "Templates": "Modelos", "Template": "Modelo", "Text color": "Cor do texto", "Background color": "Cor do fundo", "Custom...": "Personalizado...", "Custom color": "Cor personalizada", "No color": "Nenhuma cor", "Remove color": "Remover cor", "Table of Contents": "\u00edndice de Conte\u00fado", "Show blocks": "Mostrar blocos", "Show invisible characters": "Exibir caracteres invis\u00edveis", "Word count": "Contador de palavras", "Count": "Contar", "Document": "Documento", "Selection": "Sele\u00e7\u00e3o", "Words": "Palavras", "Words: {0}": "Palavras: {0}", "{0} words": "{0} palavras", "File": "Arquivo", "Edit": "Editar", "Insert": "Inserir", "View": "Visualizar", "Format": "Formatar", "Table": "Tabela", "Tools": "Ferramentas", "Powered by {0}": "Distribu\u00eddo por {0}", "Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u00c1rea de texto formatado. Pressione ALT-F9 para exibir o menu, ALT-F10 para exibir a barra de ferramentas ou ALT-0 para exibir a ajuda", "Image title": "T\u00edtulo da imagem", "Border width": "Espessura da borda", "Border style": "Estilo da borda", "Error": "Erro", "Warn": "Aviso", "Valid": "V\u00e1lido", "To open the popup, press Shift+Enter": "Para abrir a popup, aperte Shit+Enter", "Rich Text Area. Press ALT-0 for help.": "\u00c1rea Rich Text. Aperte ALT-0 para ajuda.", "System Font": "Fonte do sistema", "Failed to upload image: {0}": "Falha no upload da imagem: {0}", "Failed to load plugin: {0} from url {1}": "Falha ao carregar plugin: {0} da url {1}", "Failed to load plugin url: {0}": "Falha ao carregar url do plugin: {0}", "Failed to initialize plugin: {0}": "Falha ao inicializar plugin: {0}", "example": "exemplo", "Search": "Pesquisar", "All": "Tudo", "Currency": "Moeda", "Text": "Texto", "Quotations": "Cita\u00e7\u00f5es", "Mathematical": "Matem\u00e1tico", "Extended Latin": "Latino estendido", "Symbols": "S\u00edmbolos", "Arrows": "Setas", "User Defined": "Definido pelo Usu\u00e1rio", "dollar sign": "s\u00edmbolo de d\u00f3lar", "currency sign": "s\u00edmbolo de moeda", "euro-currency sign": "s\u00edmbolo de euro", "colon sign": "s\u00edmbolo de dois pontos", "cruzeiro sign": "s\u00edmbolo de cruzeiro", "french franc sign": "s\u00edmbolo de franco franc\u00eas", "lira sign": "s\u00edmbolo de lira", "mill sign": "s\u00edmbolo do mill", "naira sign": "s\u00edmbolo da naira", "peseta sign": "s\u00edmbolo da peseta", "rupee sign": "s\u00edmbolo da r\u00fapia", "won sign": "s\u00edmbolo do won", "new sheqel sign": "s\u00edmbolo do novo sheqel", "dong sign": "s\u00edmbolo do dong", "kip sign": "s\u00edmbolo do kip", "tugrik sign": "s\u00edmbolo do tugrik", "drachma sign": "s\u00edmbolo do drachma", "german penny symbol": "s\u00edmbolo de centavo alem\u00e3o", "peso sign": "s\u00edmbolo do peso", "guarani sign": "s\u00edmbolo do guarani", "austral sign": "s\u00edmbolo do austral", "hryvnia sign": "s\u00edmbolo do hryvnia", "cedi sign": "s\u00edmbolo do cedi", "livre tournois sign": "s\u00edmbolo do livre tournois", "spesmilo sign": "s\u00edmbolo do spesmilo", "tenge sign": "s\u00edmbolo do tenge", "indian rupee sign": "s\u00edmbolo de r\u00fapia indiana", "turkish lira sign": "s\u00edmbolo de lira turca", "nordic mark sign": "s\u00edmbolo do marco n\u00f3rdico", "manat sign": "s\u00edmbolo do manat", "ruble sign": "s\u00edmbolo do rublo", "yen character": "caractere do yen", "yuan character": "caractere do yuan", "yuan character, in hong kong and taiwan": "caractere do yuan, em Hong Kong e Taiwan", "yen\/yuan character variant one": "varia\u00e7\u00e3o do caractere de yen\/yuan", "Loading emoticons...": "Carregando emojis...", "Could not load emoticons": "N\u00e3o foi poss\u00edvel carregar emojis", "People": "Pessoas", "Animals and Nature": "Animais e Natureza", "Food and Drink": "Comida e Bebida", "Activity": "Atividade", "Travel and Places": "Viagem e Lugares", "Objects": "Objetos", "Flags": "Bandeiras", "Characters": "Caracteres", "Characters (no spaces)": "Caracteres (sem espa\u00e7os)", "{0} characters": "{0} caracteres", "Error: Form submit field collision.": "Erro: colis\u00e3o de bot\u00e3o de envio do formul\u00e1rio.", "Error: No form element found.": "Erro: elemento de formul\u00e1rio n\u00e3o encontrado.", "Update": "Atualizar", "Color swatch": "Amostra de cor", "Turquoise": "Turquesa", "Green": "Verde", "Blue": "Azul", "Purple": "Roxo", "Navy Blue": "Azul marinho", "Dark Turquoise": "Turquesa escuro", "Dark Green": "Verde escuro", "Medium Blue": "Azul m\u00e9dio", "Medium Purple": "Roxo m\u00e9dio", "Midnight Blue": "Azul meia-noite", "Yellow": "Amarelo", "Orange": "Laranja", "Red": "Vermelho", "Light Gray": "Cinza claro", "Gray": "Cinza", "Dark Yellow": "Amarelo escuro", "Dark Orange": "Laranja escuro", "Dark Red": "Vermelho escuro", "Medium Gray": "Cinza m\u00e9dio", "Dark Gray": "Cinza escuro", "Light Green": "Verde claro", "Light Yellow": "Amarelo claro", "Light Red": "Vermelho claro", "Light Purple": "Roxo claro", "Light Blue": "Azul claro", "Dark Purple": "Roxo escuro", "Dark Blue": "Azul escuro", "Black": "Preto", "White": "Branco", "Switch to or from fullscreen mode": "Abrir ou fechar modo de tela cheia", "Open help dialog": "Abrir janela de ajuda", "history": "hist\u00f3rico", "styles": "estilos", "formatting": "formata\u00e7\u00e3o", "alignment": "alinhamento", "indentation": "indenta\u00e7\u00e3o", "permanent pen": "caneta permanente", "comments": "coment\u00e1rios", "Format Painter": "Pincel de Formata\u00e7\u00e3o", "Insert\/edit iframe": "Inserir\/editar iframe", "Capitalization": "Capitaliza\u00e7\u00e3o", "lowercase": "min\u00fasculos", "UPPERCASE": "MAI\u00daSCULAS", "Title Case": "T\u00edtulo do caso", "Permanent Pen Properties": "Propriedades da caneta permanente", "Permanent pen properties...": "Propriedades de caneta permanentes...", "Font": "Fonte", "Size": "Tamanho", "More...": "Mais...", "Spellcheck Language": "Idioma de verifica\u00e7\u00e3o ortogr\u00e1fica", "Select...": "Selecionar...", "Preferences": "Prefer\u00eancias", "Yes": "Sim", "No": "N\u00e3o", "Keyboard Navigation": "Navega\u00e7\u00e3o por Teclado", "Version": "Vers\u00e3o", "Anchor": "\u00c2ncora", "Special character": "Caracteres especiais", "Code sample": "Exemplo de c\u00f3digo", "Color": "Cor", "Emoticons": "Emoticons", "Document properties": "Propriedades do documento", "Image": "Imagem", "Insert link": "Inserir link", "Target": "Alvo", "Link": "Link", "Poster": "Autor", "Media": "imagem", "Print": "Imprimir", "Prev": "Anterior", "Find and replace": "Localizar e substituir", "Whole words": "Palavras inteiras", "Spellcheck": "Corretor ortogr\u00e1fico", "Caption": "Legenda", "Insert template": "Inserir modelo" }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/tinymce/langs/pt_PT.js ================================================ tinymce.addI18n('pt_PT',{ "Redo": "Refazer", "Undo": "Anular", "Cut": "Cortar", "Copy": "Copiar", "Paste": "Colar", "Select all": "Selecionar tudo", "New document": "Novo documento", "Ok": "Ok", "Cancel": "Cancelar", "Visual aids": "Ajuda visual", "Bold": "Negrito", "Italic": "It\u00e1lico", "Underline": "Sublinhado", "Strikethrough": "Rasurado", "Superscript": "Superior \u00e0 linha", "Subscript": "Inferior \u00e0 linha", "Clear formatting": "Limpar formata\u00e7\u00e3o", "Align left": "Alinhar \u00e0 esquerda", "Align center": "Alinhar ao centro", "Align right": "Alinhar \u00e0 direita", "Justify": "Justificar", "Bullet list": "Lista com marcas", "Numbered list": "Lista numerada", "Decrease indent": "Diminuir avan\u00e7o", "Increase indent": "Aumentar avan\u00e7o", "Close": "Fechar", "Formats": "Formatos", "Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "O seu navegador n\u00e3o suporta acesso direto \u00e0 \u00e1rea de transfer\u00eancia. Por favor, use os atalhos Ctrl+X\/C\/V do seu teclado.", "Headers": "Cabe\u00e7alhos", "Header 1": "Cabe\u00e7alho 1", "Header 2": "Cabe\u00e7alho 2", "Header 3": "Cabe\u00e7alho 3", "Header 4": "Cabe\u00e7alho 4", "Header 5": "Cabe\u00e7alho 5", "Header 6": "Cabe\u00e7alho 6", "Headings": "T\u00edtulos", "Heading 1": "T\u00edtulo 1", "Heading 2": "T\u00edtulo 2", "Heading 3": "T\u00edtulo 3", "Heading 4": "T\u00edtulo 4", "Heading 5": "T\u00edtulo 5", "Heading 6": "T\u00edtulo 6", "Preformatted": "Pr\u00e9-formatado", "Div": "Div", "Pre": "Pre", "Code": "C\u00f3digo", "Paragraph": "Par\u00e1grafo", "Blockquote": "Blockquote", "Inline": "Inline", "Blocks": "Blocos", "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "O comando colar est\u00e1 em modo de texto simples. O conte\u00fado ser\u00e1 colado como texto simples at\u00e9 desativar esta op\u00e7\u00e3o.", "Fonts": "Tipos de letra", "Font Sizes": "Tamanhos dos tipos de letra", "Class": "Classe", "Browse for an image": "Procurar uma imagem", "OR": "OU", "Drop an image here": "Largar aqui uma imagem", "Upload": "Carregar", "Block": "Bloco", "Align": "Alinhar", "Default": "Padr\u00e3o", "Circle": "C\u00edrculo", "Disc": "Disco", "Square": "Quadrado", "Lower Alpha": "a. b. c. ...", "Lower Greek": "\\u03b1. \\u03b2. \\u03b3. ...", "Lower Roman": "i. ii. iii. ...", "Upper Alpha": "A. B. C. ...", "Upper Roman": "I. II. III. ...", "Anchor...": "\u00c2ncora...", "Name": "Nome", "Id": "ID", "Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "O ID deve come\u00e7ar com uma letra, seguido apenas por letras, n\u00fameros, pontos, dois pontos, tra\u00e7os ou sobtra\u00e7os.", "You have unsaved changes are you sure you want to navigate away?": "Existem altera\u00e7\u00f5es que ainda n\u00e3o foram guardadas. Tem a certeza que pretende sair?", "Restore last draft": "Restaurar o \u00faltimo rascunho", "Special character...": "Car\u00e1ter especial...", "Source code": "C\u00f3digo fonte", "Insert\/Edit code sample": "Inserir\/editar amostra de c\u00f3digo", "Language": "Idioma", "Code sample...": "Amostra de c\u00f3digo...", "Color Picker": "Seletor de cores", "R": "R", "G": "G", "B": "B", "Left to right": "Da esquerda para a direita", "Right to left": "Da direita para a esquerda", "Emoticons...": "\u00cdcones expressivos...", "Metadata and Document Properties": "Metadados e propriedades do documento", "Title": "T\u00edtulo", "Keywords": "Palavras-chave", "Description": "Descri\u00e7\u00e3o", "Robots": "Rob\u00f4s", "Author": "Autor", "Encoding": "Codifica\u00e7\u00e3o", "Fullscreen": "Ecr\u00e3 completo", "Action": "A\u00e7\u00e3o", "Shortcut": "Atalho", "Help": "Ajuda", "Address": "Endere\u00e7o", "Focus to menubar": "Foco na barra de menu", "Focus to toolbar": "Foco na barra de ferramentas", "Focus to element path": "Foco no caminho do elemento", "Focus to contextual toolbar": "Foco na barra de contexto", "Insert link (if link plugin activated)": "Inserir hiperliga\u00e7\u00e3o (se o plugin de liga\u00e7\u00f5es estiver ativado)", "Save (if save plugin activated)": "Guardar (se o plugin de guardar estiver ativado)", "Find (if searchreplace plugin activated)": "Pesquisar (se o plugin pesquisar e substituir estiver ativado)", "Plugins installed ({0}):": "Plugins instalados ({0}):", "Premium plugins:": "Plugins comerciais:", "Learn more...": "Saiba mais...", "You are using {0}": "Est\u00e1 a usar {0}", "Plugins": "Plugins", "Handy Shortcuts": "Atalhos \u00fateis", "Horizontal line": "Linha horizontal", "Insert\/edit image": "Inserir\/editar imagem", "Image description": "Descri\u00e7\u00e3o da imagem", "Source": "Localiza\u00e7\u00e3o", "Dimensions": "Dimens\u00f5es", "Constrain proportions": "Manter propor\u00e7\u00f5es", "General": "Geral", "Advanced": "Avan\u00e7ado", "Style": "Estilo", "Vertical space": "Espa\u00e7amento vertical", "Horizontal space": "Espa\u00e7amento horizontal", "Border": "Contorno", "Insert image": "Inserir imagem", "Image...": "Imagem...", "Image list": "Lista de imagens", "Rotate counterclockwise": "Rota\u00e7\u00e3o anti-hor\u00e1ria", "Rotate clockwise": "Rota\u00e7\u00e3o hor\u00e1ria", "Flip vertically": "Inverter verticalmente", "Flip horizontally": "Inverter horizontalmente", "Edit image": "Editar imagem", "Image options": "Op\u00e7\u00f5es de imagem", "Zoom in": "Mais zoom", "Zoom out": "Menos zoom", "Crop": "Recortar", "Resize": "Redimensionar", "Orientation": "Orienta\u00e7\u00e3o", "Brightness": "Brilho", "Sharpen": "Mais nitidez", "Contrast": "Contraste", "Color levels": "N\u00edveis de cor", "Gamma": "Gama", "Invert": "Inverter", "Apply": "Aplicar", "Back": "Voltar", "Insert date\/time": "Inserir data\/hora", "Date\/time": "Data\/hora", "Insert\/Edit Link": "Inserir\/editar liga\u00e7\u00e3o", "Insert\/edit link": "Inserir\/editar liga\u00e7\u00e3o", "Text to display": "Texto a exibir", "Url": "URL", "Open link in...": "Abrir liga\u00e7\u00e3o em...", "Current window": "Janela atual", "None": "Nenhum", "New window": "Nova janela", "Remove link": "Remover liga\u00e7\u00e3o", "Anchors": "\u00c2ncora", "Link...": "Liga\u00e7\u00e3o...", "Paste or type a link": "Copiar ou escrever uma hiperliga\u00e7\u00e3o", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "O URL que indicou parece ser um endere\u00e7o de email. Quer adicionar o prefixo mailto: tal como necess\u00e1rio?", "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "O URL que indicou parece ser um endere\u00e7o web. Quer adicionar o prefixo http:\/\/ tal como necess\u00e1rio?", "Link list": "Lista de liga\u00e7\u00f5es", "Insert video": "Inserir v\u00eddeo", "Insert\/edit video": "Inserir\/editar v\u00eddeo", "Insert\/edit media": "Inserir\/editar media", "Alternative source": "Localiza\u00e7\u00e3o alternativa", "Alternative source URL": "URL da origem alternativa", "Media poster (Image URL)": "Publicador de media (URL da imagem)", "Paste your embed code below:": "Colar c\u00f3digo para embeber:", "Embed": "Embeber", "Media...": "Media...", "Nonbreaking space": "Espa\u00e7o n\u00e3o quebr\u00e1vel", "Page break": "Quebra de p\u00e1gina", "Paste as text": "Colar como texto", "Preview": "Pr\u00e9-visualizar", "Print...": "Imprimir...", "Save": "Guardar", "Find": "Pesquisar", "Replace with": "Substituir por", "Replace": "Substituir", "Replace all": "Substituir tudo", "Previous": "Anterior", "Next": "Pr\u00f3ximo", "Find and replace...": "Localizar e substituir...", "Could not find the specified string.": "N\u00e3o foi poss\u00edvel localizar o termo especificado.", "Match case": "Diferenciar mai\u00fasculas e min\u00fasculas", "Find whole words only": "Localizar apenas palavras inteiras", "Spell check": "Verifica\u00e7\u00e3o ortogr\u00e1fica", "Ignore": "Ignorar", "Ignore all": "Ignorar tudo", "Finish": "Concluir", "Add to Dictionary": "Adicionar ao dicion\u00e1rio", "Insert table": "Inserir tabela", "Table properties": "Propriedades da tabela", "Delete table": "Eliminar tabela", "Cell": "C\u00e9lula", "Row": "Linha", "Column": "Coluna", "Cell properties": "Propriedades da c\u00e9lula", "Merge cells": "Unir c\u00e9lulas", "Split cell": "Dividir c\u00e9lula", "Insert row before": "Inserir linha antes", "Insert row after": "Inserir linha depois", "Delete row": "Eliminar linha", "Row properties": "Propriedades da linha", "Cut row": "Cortar linha", "Copy row": "Copiar linha", "Paste row before": "Colar linha antes", "Paste row after": "Colar linha depois", "Insert column before": "Inserir coluna antes", "Insert column after": "Inserir coluna depois", "Delete column": "Eliminar coluna", "Cols": "Colunas", "Rows": "Linhas", "Width": "Largura", "Height": "Altura", "Cell spacing": "Espa\u00e7amento entre c\u00e9lulas", "Cell padding": "Espa\u00e7amento interno da c\u00e9lula", "Show caption": "Mostrar legenda", "Left": "Esquerda", "Center": "Centro", "Right": "Direita", "Cell type": "Tipo de c\u00e9lula", "Scope": "Escopo", "Alignment": "Alinhamento", "H Align": "Alinhamento H", "V Align": "Alinhamento V", "Top": "Superior", "Middle": "Meio", "Bottom": "Inferior", "Header cell": "C\u00e9lula de cabe\u00e7alho", "Row group": "Agrupar linha", "Column group": "Agrupar coluna", "Row type": "Tipo de linha", "Header": "Cabe\u00e7alho", "Body": "Corpo", "Footer": "Rodap\u00e9", "Border color": "Cor de contorno", "Insert template...": "Inserir modelo...", "Templates": "Modelos", "Template": "Tema", "Text color": "Cor do texto", "Background color": "Cor de fundo", "Custom...": "Personalizada...", "Custom color": "Cor personalizada", "No color": "Sem cor", "Remove color": "Remover cor", "Table of Contents": "\u00cdndice", "Show blocks": "Mostrar blocos", "Show invisible characters": "Mostrar caracteres invis\u00edveis", "Word count": "Contagem de palavras", "Count": "Contagem", "Document": "Documento", "Selection": "Sele\u00e7\u00e3o", "Words": "Palavras", "Words: {0}": "Palavras: {0}", "{0} words": "{0} palavras", "File": "Ficheiro", "Edit": "Editar", "Insert": "Inserir", "View": "Ver", "Format": "Formatar", "Table": "Tabela", "Tools": "Ferramentas", "Powered by {0}": "Criado em {0}", "Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Caixa de texto formatado. Pressione ALT-F9 para exibir o menu. Pressione ALT-F10 para exibir a barra de ferramentas. Pressione ALT-0 para exibir a ajuda", "Image title": "T\u00edtulo da imagem", "Border width": "Largura do limite", "Border style": "Estilo do limite", "Error": "Erro", "Warn": "Aviso", "Valid": "V\u00e1lido", "To open the popup, press Shift+Enter": "Para abrir o pop-up, prima Shift+Enter", "Rich Text Area. Press ALT-0 for help.": "\u00c1rea de texto formatado. Prima ALT-0 para exibir a ajuda.", "System Font": "Tipo de letra do sistema", "Failed to upload image: {0}": "Falha ao carregar imagem: {0}", "Failed to load plugin: {0} from url {1}": "Falha ao carregar plugin: {0} do URL {1}", "Failed to load plugin url: {0}": "Falha ao carregar o URL do plugin: {0}", "Failed to initialize plugin: {0}": "Falha ao inicializar plugin: {0}", "example": "exemplo", "Search": "Pesquisar", "All": "Tudo", "Currency": "Moeda", "Text": "Texto", "Quotations": "Aspas", "Mathematical": "Matem\u00e1tico", "Extended Latin": "Carateres latinos estendidos", "Symbols": "S\u00edmbolos", "Arrows": "Setas", "User Defined": "Definido pelo utilizador", "dollar sign": "cifr\u00e3o", "currency sign": "sinal monet\u00e1rio", "euro-currency sign": "sinal monet\u00e1rio do euro", "colon sign": "sinal de dois pontos", "cruzeiro sign": "sinal de cruzeiro", "french franc sign": "sinal de franco franc\u00eas", "lira sign": "sinal de lira", "mill sign": "sinal de por mil", "naira sign": "sinal de naira", "peseta sign": "sinal de peseta", "rupee sign": "sinal de r\u00fapia", "won sign": "sinal de won", "new sheqel sign": "sinal de novo sheqel", "dong sign": "sinal de dong", "kip sign": "sinal kip", "tugrik sign": "sinal tugrik", "drachma sign": "sinal drachma", "german penny symbol": "sinal de penny alem\u00e3o", "peso sign": "sinal de peso", "guarani sign": "sinal de guarani", "austral sign": "sinal de austral", "hryvnia sign": "sinal hryvnia", "cedi sign": "sinal de cedi", "livre tournois sign": "sinal de libra de tours", "spesmilo sign": "sinal de spesmilo", "tenge sign": "sinal de tengue", "indian rupee sign": "sinal de rupia indiana", "turkish lira sign": "sinal de lira turca", "nordic mark sign": "sinal de marca n\u00f3rdica", "manat sign": "sinal manat", "ruble sign": "sinal de rublo", "yen character": "sinal de iene", "yuan character": "sinal de iuane", "yuan character, in hong kong and taiwan": "sinal de iuane, em Hong Kong e Taiwan", "yen\/yuan character variant one": "variante um de sinal de iene\/iuane", "Loading emoticons...": "A carregar \u00edcones expressivos...", "Could not load emoticons": "N\u00e3o foi poss\u00edvel carregar \u00edcones expressivos", "People": "Pessoas", "Animals and Nature": "Animais e natureza", "Food and Drink": "Comida e bebida", "Activity": "Atividade", "Travel and Places": "Viagens e lugares", "Objects": "Objetos", "Flags": "Bandeiras", "Characters": "Carateres", "Characters (no spaces)": "Carateres (sem espa\u00e7os)", "{0} characters": "{0} carateres", "Error: Form submit field collision.": "Erro: conflito no campo de submiss\u00e3o de formul\u00e1rio.", "Error: No form element found.": "Erro: nenhum elemento de formul\u00e1rio encontrado.", "Update": "Atualizar", "Color swatch": "Cole\u00e7\u00e3o de cores", "Turquoise": "Turquesa", "Green": "Verde", "Blue": "Azul", "Purple": "P\u00farpura", "Navy Blue": "Azul-atl\u00e2ntico", "Dark Turquoise": "Turquesa escuro", "Dark Green": "Verde escuro", "Medium Blue": "Azul interm\u00e9dio", "Medium Purple": "P\u00farpura interm\u00e9dio", "Midnight Blue": "Azul muito escuro", "Yellow": "Amarelo", "Orange": "Laranja", "Red": "Vermelho", "Light Gray": "Cinzento claro", "Gray": "Cinzento", "Dark Yellow": "Amarelo escuro", "Dark Orange": "Laranja escuro", "Dark Red": "Vermelho escuro", "Medium Gray": "Cinzento m\u00e9dio", "Dark Gray": "Cinzento escuro", "Light Green": "Verde claro", "Light Yellow": "Amarelo claro", "Light Red": "Vermelho claro", "Light Purple": "P\u00farpura claro", "Light Blue": "Azul claro", "Dark Purple": "P\u00farpura escuro", "Dark Blue": "Azul escuro", "Black": "Preto", "White": "Branco", "Switch to or from fullscreen mode": "Entrar ou sair do modo de ecr\u00e3 inteiro", "Open help dialog": "Abrir caixa de di\u00e1logo Ajuda", "history": "hist\u00f3rico", "styles": "estilos", "formatting": "formata\u00e7\u00e3o", "alignment": "alinhamento", "indentation": "avan\u00e7o", "permanent pen": "caneta permanente", "comments": "coment\u00e1rios", "Format Painter": "Pincel de formata\u00e7\u00e3o", "Insert\/edit iframe": "Inserir\/editar iframe", "Capitalization": "Capitaliza\u00e7\u00e3o", "lowercase": "min\u00fasculas", "UPPERCASE": "MAI\u00daSCULAS", "Title Case": "Iniciais mai\u00fasculas", "Permanent Pen Properties": "Propriedades da Caneta Permanente", "Permanent pen properties...": "Propriedades da caneta permanente...", "Font": "Tipo de letra", "Size": "Tamanho", "More...": "Mais...", "Spellcheck Language": "Idioma de verifica\u00e7\u00e3o lingu\u00edstica", "Select...": "Selecionar...", "Preferences": "Prefer\u00eancias", "Yes": "Sim", "No": "N\u00e3o", "Keyboard Navigation": "Navega\u00e7\u00e3o com teclado", "Version": "Vers\u00e3o", "Anchor": "\u00c2ncora", "Special character": "Car\u00e1cter especial", "Code sample": "Amostra de c\u00f3digo", "Color": "Cor", "Emoticons": "Emo\u00e7\u00f5es", "Document properties": "Propriedades do documento", "Image": "Imagem", "Insert link": "Inserir liga\u00e7\u00e3o", "Target": "Alvo", "Link": "Liga\u00e7\u00e3o", "Poster": "Autor", "Media": "Media", "Print": "Imprimir", "Prev": "Anterior", "Find and replace": "Pesquisar e substituir", "Whole words": "Palavras completas", "Spellcheck": "Corretor ortogr\u00e1fico", "Caption": "Legenda", "Insert template": "Inserir modelo" }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/tinymce/langs/readme.md ================================================ This is where language files should be placed. Please DO NOT translate these directly use this service: https://www.transifex.com/projects/p/tinymce/ ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/tinymce/langs/ro.js ================================================ tinymce.addI18n('ro',{ "Redo": "Refacere", "Undo": "Anulare", "Cut": "Decupare", "Copy": "Copiere", "Paste": "Lipire", "Select all": "Selecteaz\u0103 tot", "New document": "Document nou", "Ok": "Ok", "Cancel": "Revocare", "Visual aids": "Ajutoare vizuale", "Bold": "Aldin", "Italic": "Cursiv", "Underline": "Subliniere", "Strikethrough": "T\u0103iere", "Superscript": "Exponent", "Subscript": "Indice", "Clear formatting": "\u00cendep\u0103rtare formatare", "Align left": "Aliniere st\u00e2nga", "Align center": "Aliniere centru", "Align right": "Aliniere dreapta", "Justify": "Aliniere st\u00e2nga-dreapta", "Bullet list": "List\u0103 marcatori", "Numbered list": "List\u0103 numerotat\u0103", "Decrease indent": "Mic\u0219orare indent", "Increase indent": "M\u0103rire indent", "Close": "\u00cenchidere", "Formats": "Formate", "Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Browser-ul dumneavoastr\u0103 nu are acces direct la clipboard. V\u0103 rug\u0103m s\u0103 folosi\u021bi \u00een schimb scurt\u0103turile de tastatur\u0103 Ctrl+X\/C\/V.", "Headers": "Antete", "Header 1": "Antet 1", "Header 2": "Antet 2", "Header 3": "Antet 3", "Header 4": "Antet 4", "Header 5": "Antet 5", "Header 6": "Antet 6", "Headings": "Rubrici", "Heading 1": "Titlu 1", "Heading 2": "Titlu 2", "Heading 3": "Titlu 3", "Heading 4": "Titlu 4", "Heading 5": "Titlu 5", "Heading 6": "Titlu 6", "Preformatted": "Preformatat", "Div": "Div", "Pre": "Pre", "Code": "Cod", "Paragraph": "Paragraf", "Blockquote": "Blockquote", "Inline": "\u00cen linie", "Blocks": "Blocuri", "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Functia \"lipe\u015fte\" este acum \u00een modul text simplu. Continutul va fi acum inserat ca text simplu p\u00e2n\u0103 c\u00e2nd aceast\u0103 op\u021biune va fi dezactivat.", "Fonts": "Fonturi", "Font Sizes": "Dimensiuni font", "Class": "Clas\u0103", "Browse for an image": "C\u0103uta\u021bi o imagine", "OR": "OR", "Drop an image here": "Glisa\u021bi o imagine aici", "Upload": "\u00cenc\u0103rcare", "Block": "Sec\u021biune", "Align": "Aliniere", "Default": "Implicit", "Circle": "Cerc", "Disc": "Disc", "Square": "P\u0103trat", "Lower Alpha": "Minuscule Alfanumerice", "Lower Greek": "Minuscule Grecesti", "Lower Roman": "Minuscule Romane", "Upper Alpha": "Majuscule Alfanumerice", "Upper Roman": "Majuscule Romane", "Anchor...": "Ancor\u0103\u2026", "Name": "Nume", "Id": "Id", "Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Id-ul trebuie s\u0103 inceap\u0103 cu o liter\u0103, urmat\u0103 exclusiv de litere, numere, cratime, puncte, punct \u0219i virgul\u0103 sau underscore-uri.", "You have unsaved changes are you sure you want to navigate away?": "Ave\u021bi modific\u0103ri nesalvate! Sunte\u0163i sigur c\u0103 dori\u0163i s\u0103 ie\u015fiti?", "Restore last draft": "Restaurare la ultima salvare", "Special character...": "Caracter special\u2026", "Source code": "Codul surs\u0103", "Insert\/Edit code sample": "Inserare\/Editare mostr\u0103 cod", "Language": "Limba", "Code sample...": "Mostr\u0103 cod\u2026", "Color Picker": "Selector culori", "R": "R", "G": "G", "B": "B", "Left to right": "St\u00e2nga la dreapta", "Right to left": "Dreapta la st\u00e2nga", "Emoticons...": "Emoticoane\u2026", "Metadata and Document Properties": "Meta date \u0219i Propriet\u0103\u021bi Document", "Title": "Titlu", "Keywords": "Cuvinte cheie", "Description": "Descriere", "Robots": "Robo\u021bi", "Author": "Autor", "Encoding": "Codare", "Fullscreen": "Pe tot ecranul", "Action": "Ac\u0163iune", "Shortcut": "Comand\u0103 rapid\u0103", "Help": "Ajutor", "Address": "Adres\u0103", "Focus to menubar": "Centrare pe bara de meniuri", "Focus to toolbar": "Centrare pe bara de unelte", "Focus to element path": "Centrare pe calea elementului", "Focus to contextual toolbar": "Centrare pe bara de unelte contextual\u0103", "Insert link (if link plugin activated)": "Inserare link (dac\u0103 modulul de link-uri este activat)", "Save (if save plugin activated)": "Salvare (dac\u0103 modulul de salvare este activat)", "Find (if searchreplace plugin activated)": "C\u0103utare (dac\u0103 modulul de c\u0103utare \u0219i \u00eenlocuire este activat)", "Plugins installed ({0}):": "Module instalate ({0}):", "Premium plugins:": "Module premium:", "Learn more...": "Afla\u021bi mai multe\u2026", "You are using {0}": "Folosi\u021bi {0}", "Plugins": "Inserturi", "Handy Shortcuts": "Comenzi rapide accesibile", "Horizontal line": "Linie orizontal\u0103", "Insert\/edit image": "Inserare\/editarea imaginilor", "Image description": "Descrierea imaginii", "Source": "Surs\u0103", "Dimensions": "Dimensiuni", "Constrain proportions": "Constr\u00e2nge propor\u021biile", "General": "General", "Advanced": "Avansat", "Style": "Stil", "Vertical space": "Spa\u021biul vertical", "Horizontal space": "Spa\u021biul orizontal", "Border": "Bordur\u0103", "Insert image": "Inserare imagine", "Image...": "Imagine\u2026", "Image list": "List\u0103 de imagini", "Rotate counterclockwise": "Rotire \u00een sensul antiorar", "Rotate clockwise": "Rotire \u00een sensul orar", "Flip vertically": "R\u0103sturn\u0103 vertical", "Flip horizontally": "R\u0103sturn\u0103 orizontal", "Edit image": "Editare imagine", "Image options": "Op\u021biuni imagine", "Zoom in": "M\u0103rire", "Zoom out": "Mic\u015forare", "Crop": "Decupare", "Resize": "Redimensionare", "Orientation": "Orientare", "Brightness": "Str\u0103lucire", "Sharpen": "Accentuare", "Contrast": "Contrast", "Color levels": "Niveluri de culoare", "Gamma": "Gamma", "Invert": "Invers\u0103", "Apply": "Salveaz\u0103", "Back": "\u00cenapoi", "Insert date\/time": "Insereaz\u0103 data\/ora", "Date\/time": "Data\/ora", "Insert\/Edit Link": "Inserare\/Editare link", "Insert\/edit link": "Inserare\/editare link", "Text to display": "Text de afi\u0219at", "Url": "Url", "Open link in...": "Deschide link \u00een\u2026", "Current window": "Fereastra curent\u0103", "None": "Nici unul", "New window": "Fereastr\u0103 nou\u0103", "Remove link": "\u0218terge link-ul", "Anchors": "Ancor\u0103", "Link...": "Link\u2026", "Paste or type a link": "Introduce\u021bi un link", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "URL-ul introdus pare s\u0103 fie o adres\u0103 de e-mail. Dori\u021bi s\u0103 ad\u0103uga\u021bi prefixul mailto: ?", "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "URL-ul introdus pare s\u0103 fie o adres\u0103 web. Dori\u021bi s\u0103 ad\u0103uga\u021bi prefixul http:\/\/ ?", "Link list": "List\u0103 linkuri", "Insert video": "Inserare video", "Insert\/edit video": "Inserare\/editare video", "Insert\/edit media": "Inserare\/editare media", "Alternative source": "Surs\u0103 alternativ\u0103", "Alternative source URL": "URL surs\u0103 alternativ\u0103", "Media poster (Image URL)": "Poster media (URL imagine)", "Paste your embed code below:": "Insera\u021bi codul:", "Embed": "Embed", "Media...": "Media\u2026", "Nonbreaking space": "Spa\u021biu neseparator", "Page break": "\u00centrerupere de pagin\u0103", "Paste as text": "Lipe\u015fte ca text", "Preview": "Previzualizare", "Print...": "Tip\u0103rire\u2026", "Save": "Salveaz\u0103", "Find": "Caut\u0103", "Replace with": "\u00cenlocuie\u015fte cu", "Replace": "\u00cenlocuie\u015fte", "Replace all": "\u00cenlocuie\u015fte toate", "Previous": "Anterior", "Next": "Precedent", "Find and replace...": "C\u0103utare \u0219i \u00eenlocuire\u2026", "Could not find the specified string.": "Nu am putut g\u0103si \u0219irul specificat.", "Match case": "Distinge majuscule\/minuscule", "Find whole words only": "G\u0103se\u0219te doar cuvintele \u00eentregi", "Spell check": "Verificare ortografic\u0103", "Ignore": "Ignor\u0103", "Ignore all": "Ignor\u0103 toate", "Finish": "Finalizeaz\u0103", "Add to Dictionary": "Adaug\u0103 \u00een Dic\u021bionar", "Insert table": "Insereaz\u0103 tabel\u0103", "Table properties": "Propriet\u0103\u021bi tabel\u0103", "Delete table": "\u0218terge tabel\u0103", "Cell": "Celul\u0103", "Row": "Linie", "Column": "Coloan\u0103", "Cell properties": "Propriet\u0103\u021bi celul\u0103", "Merge cells": "\u00cembinarea celulelor", "Split cell": "\u00cemp\u0103r\u021birea celulelor", "Insert row before": "Insereaz\u0103 \u00eenainte de linie", "Insert row after": "Insereaz\u0103 dup\u0103 linie", "Delete row": "\u0218terge linia", "Row properties": "Propriet\u0103\u021bi linie", "Cut row": "Taie linie", "Copy row": "Copiaz\u0103 linie", "Paste row before": "Lipe\u015fte \u00eenainte de linie", "Paste row after": "Lipe\u015fte linie dup\u0103", "Insert column before": "Insereaza \u00eenainte de coloan\u0103", "Insert column after": "Insereaza dup\u0103 coloan\u0103", "Delete column": "\u0218terge coloana", "Cols": "Coloane", "Rows": "Linii", "Width": "L\u0103\u0163ime", "Height": "\u00cen\u0103l\u0163ime", "Cell spacing": "Spa\u021biere celule", "Cell padding": "Spa\u021biere", "Show caption": "Afi\u0219are captur\u0103", "Left": "St\u00e2nga", "Center": "Centru", "Right": "Dreapta", "Cell type": "Tip celul\u0103", "Scope": "Domeniu", "Alignment": "Aliniament", "H Align": "Aliniere H", "V Align": "Aliniere V", "Top": "Sus", "Middle": "Mijloc", "Bottom": "Jos", "Header cell": "Antet celul\u0103", "Row group": "Grup de linii", "Column group": "Grup de coloane", "Row type": "Tip de linie", "Header": "Antet", "Body": "Corp", "Footer": "Subsol", "Border color": "Culoare bordur\u0103", "Insert template...": "Inserare \u0219ablon\u2026", "Templates": "\u015eabloane", "Template": "\u0218ablon", "Text color": "Culoare text", "Background color": "Culoare fundal", "Custom...": "Personalizat...", "Custom color": "Culoare personalizat\u0103", "No color": "F\u0103r\u0103 culoare", "Remove color": "Eliminare culoare", "Table of Contents": "Cuprins", "Show blocks": "Afi\u0219are blocuri", "Show invisible characters": "Afi\u0219are caractere invizibile", "Word count": "Num\u0103r\u0103toare cuvinte", "Count": "Num\u0103r\u0103toare", "Document": "Document", "Selection": "Selec\u021bie", "Words": "Cuvinte", "Words: {0}": "Cuvinte: {0}", "{0} words": "{0} cuvinte", "File": "Fil\u0103", "Edit": "Editeaz\u0103", "Insert": "Insereaz\u0103", "View": "Vezi", "Format": "Formateaz\u0103", "Table": "Tabel\u0103", "Tools": "Unelte", "Powered by {0}": "Sus\u021binut de {0}", "Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Zon\u0103 cu Rich Text. Apas\u0103 ALT-F9 pentru meniu. Apas\u0103 ALT-F10 pentru bara de unelte. Apas\u0103 ALT-0 pentru ajutor", "Image title": "Titlu imagine", "Border width": "Grosime chenar", "Border style": "Stil chenar", "Error": "Eroare", "Warn": "Aten\u021bionare", "Valid": "Valid", "To open the popup, press Shift+Enter": "Pentru a deschide fereastra popup, ap\u0103sa\u021bi Shift+Enter", "Rich Text Area. Press ALT-0 for help.": "Zon\u0103 Text Formatat. Ap\u0103sa\u021bi ALT-0 pentru ajutor.", "System Font": "Font Sistem", "Failed to upload image: {0}": "Nu s-a putut \u00eenc\u0103rca imaginea: {0}", "Failed to load plugin: {0} from url {1}": "Nu s-a putut \u00eenc\u0103rca modulul: {0} de la URL-ul {1}", "Failed to load plugin url: {0}": "Nu s-a putut \u00eenc\u0103rca URL-ul modulului: {0}", "Failed to initialize plugin: {0}": "Nu s-a putut ini\u021bializa modulul: {0}", "example": "exemplu", "Search": "C\u0103utare", "All": "Tot", "Currency": "Moned\u0103", "Text": "Text", "Quotations": "Ghilimele", "Mathematical": "Simboluri matematice", "Extended Latin": "Simboluri alfabet latin extins", "Symbols": "Simboluri", "Arrows": "S\u0103ge\u021bi", "User Defined": "Definite de utilizator", "dollar sign": "simbol dolar", "currency sign": "simbol moned\u0103", "euro-currency sign": "simbol euro", "colon sign": "dou\u0103 puncte", "cruzeiro sign": "simbol cruzeiro", "french franc sign": "simbol franc francez", "lira sign": "simbol lir\u0103", "mill sign": "simbol mill", "naira sign": "simbol naira", "peseta sign": "simbol peset\u0103", "rupee sign": "simbol rupie", "won sign": "simbol won", "new sheqel sign": "simbol shekel nou", "dong sign": "simbol dong", "kip sign": "simbol kip", "tugrik sign": "simbol tugrik", "drachma sign": "simbol drahm\u0103", "german penny symbol": "simbol peni german", "peso sign": "simbol peso", "guarani sign": "simbol guarani", "austral sign": "simbol austral", "hryvnia sign": "simbol grivn\u0103", "cedi sign": "simbol cedi", "livre tournois sign": "simbol livr\u0103 tournois", "spesmilo sign": "simbol spesmilo", "tenge sign": "simbol tenge", "indian rupee sign": "simbol rupie indian\u0103", "turkish lira sign": "simbol lir\u0103 turceasc\u0103", "nordic mark sign": "simbol marc\u0103 nordic\u0103", "manat sign": "simbol manat", "ruble sign": "simbol rubl\u0103", "yen character": "simbol yen", "yuan character": "simbol yuan", "yuan character, in hong kong and taiwan": "simbol yuan \u00een Hong Kong \u0219i Taiwan", "yen\/yuan character variant one": "simbol yen\/yuan prima variant\u0103", "Loading emoticons...": "Se \u00eencarc\u0103 emoticoanele\u2026", "Could not load emoticons": "Nu s-au putut \u00eenc\u0103rca emoticoanele", "People": "Persoane", "Animals and Nature": "Animale \u0219i natur\u0103", "Food and Drink": "M\u00e2ncare \u0219i b\u0103uturi", "Activity": "Activit\u0103\u021bi", "Travel and Places": "C\u0103l\u0103torii \u0219i loca\u021bii", "Objects": "Obiecte", "Flags": "Steaguri", "Characters": "Caractere", "Characters (no spaces)": "Caractere (f\u0103r\u0103 spa\u021bii)", "{0} characters": "{0} caractere", "Error: Form submit field collision.": "Eroare: Coliziune c\u00e2mpuri la trimiterea formularului.", "Error: No form element found.": "Eroare: Niciun element de formular g\u0103sit.", "Update": "Actualizare", "Color swatch": "Mostr\u0103 de culori", "Turquoise": "Turcoaz", "Green": "Verde", "Blue": "Albastru", "Purple": "Mov", "Navy Blue": "Albastru marin", "Dark Turquoise": "Turcoaz \u00eenchis", "Dark Green": "Verde \u00eenchis", "Medium Blue": "Albastru mediu", "Medium Purple": "Mov mediu", "Midnight Blue": "Albastru \u00eenchis", "Yellow": "Galben", "Orange": "Portocaliu", "Red": "Ro\u0219u", "Light Gray": "Gri deschis", "Gray": "Gri", "Dark Yellow": "Galben \u00eenchis", "Dark Orange": "Portocaliu \u00eenchis", "Dark Red": "Ro\u0219u \u00eenchis", "Medium Gray": "Gri mediu", "Dark Gray": "Gri \u00eenchis", "Light Green": "Verde deschis", "Light Yellow": "Galben deschis", "Light Red": "Ro\u015fu deschis", "Light Purple": "Violet deschis", "Light Blue": "Albastru deschis", "Dark Purple": "Violet \u00eenchis", "Dark Blue": "Negru \u00eenchis", "Black": "Negru", "White": "Alb", "Switch to or from fullscreen mode": "Comutare pe sau de la modul ecran complet", "Open help dialog": "Deschide dialogul de ajutor", "history": "istoric", "styles": "stiluri", "formatting": "formatare", "alignment": "aliniere", "indentation": "indentare", "permanent pen": "stilou permanent", "comments": "comentarii", "Format Painter": "Descriptor de formate", "Insert\/edit iframe": "Inserare\/editare icadru", "Capitalization": "Scriere cu majuscule", "lowercase": "litere mici", "UPPERCASE": "MAJUSCULE", "Title Case": "Ini\u021bial\u0103 majuscul\u0103", "Permanent Pen Properties": "Propriet\u0103\u021bile stiloului permanent", "Permanent pen properties...": "Propriet\u0103\u021bile stiloului permanent...", "Font": "Font", "Size": "Dimensiuni", "More...": "Mai multe...", "Spellcheck Language": "Verificare ortografic\u0103 a limbii", "Select...": "Selectare...", "Preferences": "Preferin\u021be", "Yes": "Da", "No": "Nu", "Keyboard Navigation": "Navigare de la tastatur\u0103", "Version": "Versiune", "Anchor": "Ancor\u0103", "Special character": "Caractere speciale", "Color": "Culoare", "Emoticons": "Emoticoane", "Document properties": "Propriet\u0103\u021bi document", "Image": "Imagine", "Insert link": "Inserare link", "Link": "Link", "Target": "\u021aint\u0103", "Media": "Media", "Poster": "Poster", "Print": "Tip\u0103re\u0219te", "Whole words": "Doar cuv\u00eentul \u00eentreg", "Find and replace": "Caut\u0103 \u015fi \u00eenlocuie\u015fte", "Prev": "Anterior", "Spellcheck": "Verificarea ortografic\u0103", "Caption": "Titlu", "Insert template": "Insereaz\u0103 \u0219ablon" }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/tinymce/langs/ro_RO.js ================================================ tinymce.addI18n('ro_RO',{ "Redo": "Refacere", "Undo": "Anulare", "Cut": "Decupare", "Copy": "Copiere", "Paste": "Lipire", "Select all": "Selecteaz\u0103 tot", "New document": "Document nou", "Ok": "Ok", "Cancel": "Revocare", "Visual aids": "Ajutoare vizuale", "Bold": "Aldin", "Italic": "Cursiv", "Underline": "Subliniere", "Strikethrough": "T\u0103iere", "Superscript": "Exponent", "Subscript": "Indice", "Clear formatting": "\u00cendep\u0103rtare formatare", "Align left": "Aliniere st\u00e2nga", "Align center": "Aliniere centru", "Align right": "Aliniere dreapta", "Justify": "Aliniere st\u00e2nga-dreapta", "Bullet list": "List\u0103 marcatori", "Numbered list": "List\u0103 numerotat\u0103", "Decrease indent": "Mic\u0219orare indent", "Increase indent": "M\u0103rire indent", "Close": "\u00cenchidere", "Formats": "Formate", "Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Browser-ul dumneavoastr\u0103 nu are acces direct la clipboard. V\u0103 rug\u0103m s\u0103 folosi\u021bi \u00een schimb scurt\u0103turile de tastatur\u0103 Ctrl+X\/C\/V.", "Headers": "Antete", "Header 1": "Antet 1", "Header 2": "Antet 2", "Header 3": "Antet 3", "Header 4": "Antet 4", "Header 5": "Antet 5", "Header 6": "Antet 6", "Headings": "Rubrici", "Heading 1": "Titlu 1", "Heading 2": "Titlu 2", "Heading 3": "Titlu 3", "Heading 4": "Titlu 4", "Heading 5": "Titlu 5", "Heading 6": "Titlu 6", "Preformatted": "Preformatat", "Div": "Div", "Pre": "Pre", "Code": "Cod", "Paragraph": "Paragraf", "Blockquote": "Blockquote", "Inline": "\u00cen linie", "Blocks": "Blocuri", "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Lipirea este \u00een mod text simplu. Con\u021binutul va fi lipit ca text simplu p\u00e2n\u0103 dezactiva\u021bi aceast\u0103 op\u021biune.", "Fonts": "Fonturi", "Font Sizes": "Dimensiuni font", "Class": "Clas\u0103", "Browse for an image": "C\u0103uta\u021bi o imagine", "OR": "SAU", "Drop an image here": "Glisa\u021bi o imagine aici", "Upload": "\u00cenc\u0103rcare", "Block": "Sec\u021biune", "Align": "Aliniere", "Default": "Implicit", "Circle": "Cerc", "Disc": "Disc", "Square": "P\u0103trat", "Lower Alpha": "Litere mici", "Lower Greek": "Grecesc mic", "Lower Roman": "Cifre romane mici", "Upper Alpha": "Litere mari", "Upper Roman": "Cifre romane mari", "Anchor...": "Ancor\u0103\u2026", "Name": "Nume", "Id": "Id", "Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Id-ul ar trebui s\u0103 \u00eenceap\u0103 cu o liter\u0103, urmat\u0103 doar de litere, numere, cratime, puncte, virgule sau sublinieri.", "You have unsaved changes are you sure you want to navigate away?": "Ave\u021bi modific\u0103ri nesalvate. Sigur dori\u021bi s\u0103 naviga\u021bi \u00een alt\u0103 parte?", "Restore last draft": "Restabili\u021bi ultima ciorn\u0103", "Special characters...": "Caractere speciale\u2026", "Source code": "Cod surs\u0103", "Insert\/Edit code sample": "Inserare\/Editare mostr\u0103 cod", "Language": "Limb\u0103", "Code sample...": "Mostr\u0103 cod\u2026", "Color Picker": "Selector culori", "R": "R", "G": "G", "B": "B", "Left to right": "St\u00e2nga la dreapta", "Right to left": "Dreapta la st\u00e2nga", "Emoticons...": "Emoticoane\u2026", "Metadata and Document Properties": "Meta date \u0219i Propriet\u0103\u021bi Document", "Title": "Titlu", "Keywords": "Cuvinte cheie", "Description": "Descriere", "Robots": "Robo\u0163i", "Author": "Autor", "Encoding": "Codare", "Fullscreen": "Ecran complet", "Action": "Ac\u0163iune", "Shortcut": "Comand\u0103 rapid\u0103", "Help": "Ajutor", "Address": "Adres\u0103", "Focus to menubar": "Centrare pe bara de meniuri", "Focus to toolbar": "Centrare pe bara de unelte", "Focus to element path": "Centrare pe calea elementului", "Focus to contextual toolbar": "Centrare pe bara de unelte contextual\u0103", "Insert link (if link plugin activated)": "Inserare link (dac\u0103 modulul de link-uri este activat)", "Save (if save plugin activated)": "Salvare (dac\u0103 modulul de salvare este activat)", "Find (if searchreplace plugin activated)": "C\u0103utare (dac\u0103 modulul de c\u0103utare \u0219i \u00eenlocuire este activat)", "Plugins installed ({0}):": "Module instalate ({0}):", "Premium plugins:": "Module premium:", "Learn more...": "Afla\u021bi mai multe\u2026", "You are using {0}": "Folosi\u021bi {0}", "Plugins": "Inserturi", "Handy Shortcuts": "Comenzi rapide accesibile", "Horizontal line": "Linie orizontal\u0103", "Insert\/edit image": "Inserare\/editare imagini", "Image description": "Descriere imagine", "Source": "Surs\u0103", "Dimensions": "Dimensiuni", "Constrain proportions": "Restric\u021bionare propor\u021bii", "General": "General", "Advanced": "Complex", "Style": "Stil", "Vertical space": "Spa\u0163iu vertical", "Horizontal space": "Spa\u0163iu orizontal", "Border": "Chenar", "Insert image": "Inserare imagine", "Image...": "Imagine\u2026", "Image list": "List\u0103 de imagini", "Rotate counterclockwise": "Rotire invers sensului acelor de ceasornic", "Rotate clockwise": "Rotire \u00een sensul acelor de ceasornic", "Flip vertically": "Inversare vertical\u0103", "Flip horizontally": "Inversare orizontal\u0103", "Edit image": "Editare imagine", "Image options": "Op\u021biuni imagine", "Zoom in": "Apropiere", "Zoom out": "Dep\u0103rtare", "Crop": "Decupare", "Resize": "Redimensionare", "Orientation": "Orientare", "Brightness": "Luminozitate", "Sharpen": "Accentuare", "Contrast": "Contrast", "Color levels": "Niveluri culori", "Gamma": "Gamma", "Invert": "Inversare", "Apply": "Aplicare", "Back": "\u00cenapoi", "Insert date\/time": "Inserare dat\u0103\/or\u0103", "Date\/time": "Dat\u0103\/or\u0103", "Insert\/Edit Link": "Inserare\/Editare link", "Insert\/edit link": "Inserare\/editare link", "Text to display": "Text de afi\u0219at", "Url": "Url", "Open link in...": "Deschide link \u00een\u2026", "Current window": "Fereastra curent\u0103", "None": "Nu se utilizeaz\u0103 (acest c\u00e2mp)", "New window": "Fereastr\u0103 nou\u0103", "Remove link": "Eliminare link", "Anchors": "Ancore", "Link...": "Link\u2026", "Paste or type a link": "Lipi\u021bi sau scrie\u021bi un link", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "URL-ul introdus pare a fi o adres\u0103 de e-mail. Dori\u021bi s\u0103 ad\u0103uga\u021bi prefixul mailto: necesar?", "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "URL-ul introdus pare a fi un link extern. Dori\u021bi s\u0103 ad\u0103uga\u021bi prefixul http:\/\/ necesar?", "Link list": "List\u0103 linkuri", "Insert video": "Inserare video", "Insert\/edit video": "Inserare\/editare video", "Insert\/edit media": "Inserare\/editare media", "Alternative source": "Surs\u0103 alternativ\u0103", "Alternative source URL": "URL surs\u0103 alternativ\u0103", "Media poster (Image URL)": "Poster media (URL imagine)", "Paste your embed code below:": "Lipi\u021bi codul de \u00eencorporare mai jos:", "Embed": "\u00cencorporare", "Media...": "Media\u2026", "Nonbreaking space": "Spa\u021biu f\u0103r\u0103 \u00eentreruperi", "Page break": "\u00centrerupere de pagin\u0103", "Paste as text": "Lipire ca text", "Preview": "Previzualizare", "Print...": "Tip\u0103rire\u2026", "Save": "Salvare", "Find": "G\u0103sire", "Replace with": "\u00cenlocuire cu", "Replace": "\u00cenlocuire", "Replace all": "\u00cenlocuire peste tot", "Previous": "Anterior", "Next": "Urm\u0103torul", "Find and replace...": "C\u0103utare \u0219i \u00eenlocuire\u2026", "Could not find the specified string.": "Nu s-a g\u0103sit \u0219irul indicat.", "Match case": "Potrivire litere mari \u0219i mici", "Find whole words only": "G\u0103se\u0219te doar cuvintele \u00eentregi", "Spell check": "Verificare ortografic\u0103", "Ignore": "Ignorare", "Ignore all": "Ignor\u0103 tot", "Finish": "Finalizare", "Add to Dictionary": "Ad\u0103ugare \u00een Dic\u021bionar", "Insert table": "Inserare tabel", "Table properties": "Propriet\u0103\u021bi tabel", "Delete table": "Eliminare tabel", "Cell": "Celul\u0103", "Row": "R\u00e2nd", "Column": "Coloan\u0103", "Cell properties": "Propriet\u0103\u021bi celul\u0103", "Merge cells": "\u00cembinare celule", "Split cell": "Scindare celul\u0103", "Insert row before": "Inserare r\u00e2nd \u00eenainte", "Insert row after": "Inserare r\u00e2nd dup\u0103", "Delete row": "Eliminare r\u00e2nd", "Row properties": "Propriet\u0103\u021bi r\u00e2nd", "Cut row": "Decupare r\u00e2nd", "Copy row": "Copiere r\u00e2nd", "Paste row before": "Lipire r\u00e2nd \u00eenainte", "Paste row after": "Lipire r\u00e2nd dup\u0103", "Insert column before": "Inserare coloan\u0103 \u00eenainte", "Insert column after": "Inserare coloan\u0103 dup\u0103", "Delete column": "Eliminare coloan\u0103", "Cols": "Coloane", "Rows": "R\u00e2nduri", "Width": "L\u0103\u021bime", "Height": "\u00cen\u0103l\u021bime", "Cell spacing": "Spa\u021biere celul\u0103", "Cell padding": "Spa\u021biere \u00een celul\u0103", "Show caption": "Afi\u0219are captur\u0103", "Left": "St\u00e2nga", "Center": "Centru", "Right": "Dreapta", "Cell type": "Tip celul\u0103", "Scope": "Domeniu", "Alignment": "Aliniere", "H Align": "Aliniere O", "V Align": "Aliniere V", "Top": "Sus", "Middle": "Mijloc", "Bottom": "Jos", "Header cell": "Celul\u0103 de antet", "Row group": "Grupare r\u00e2nduri", "Column group": "Grup coloane", "Row type": "Tip r\u00e2nd", "Header": "Antet", "Body": "Corp", "Footer": "Subsol de pagin\u0103", "Border color": "Culoare chenar", "Insert template...": "Inserare \u0219ablon\u2026", "Templates": "\u0218abloane", "Template": "\u0218ablon", "Text color": "Culoare text", "Background color": "Culoare fundal", "Custom...": "Particularizare...", "Custom color": "Culoare personalizat\u0103", "No color": "F\u0103r\u0103 culoare", "Remove color": "Eliminare culoare", "Table of Contents": "Cuprins", "Show blocks": "Arat\u0103 rubricile", "Show invisible characters": "Arat\u0103 caracterele invizibile", "Word count": "Num\u0103r\u0103toare cuvinte", "Words: {0}": "Cuvinte: {0}", "{0} words": "{0} cuvinte", "File": "Fi\u0219ier", "Edit": "Editare", "Insert": "Inserare", "View": "Vizualizare", "Format": "Formatare", "Table": "Tabel", "Tools": "Unelte", "Powered by {0}": "Sus\u021binut de {0}", "Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Zon\u0103 Text Formatat. Ap\u0103sa\u021bi ALT-F9 pentru a accesa meniul. Ap\u0103sa\u021bi ALT-F10 pentru a accesa bara de unelte. Ap\u0103sa\u021bi ALT-0 pentru ajutor", "Image title": "Titlu imagine", "Border width": "Grosime chenar", "Border style": "Stil chenar", "Error": "Eroare", "Warn": "Aten\u021bionare", "Valid": "Valid", "To open the popup, press Shift+Enter": "Pentru a deschide fereastra popup, ap\u0103sa\u021bi Shift+Enter", "Rich Text Area. Press ALT-0 for help.": "Zon\u0103 Text Formatat. Ap\u0103sa\u021bi ALT-0 pentru ajutor.", "System Font": "Font Sistem", "Failed to upload image: {0}": "Nu s-a putut \u00eenc\u0103rca imaginea: {0}", "Failed to load plugin: {0} from url {1}": "Nu s-a putut \u00eenc\u0103rca modulul: {0} de la URL-ul {1}", "Failed to load plugin url: {0}": "Nu s-a putut \u00eenc\u0103rca URL-ul modulului: {0}", "Failed to initialize plugin: {0}": "Nu s-a putut ini\u021bializa modulul: {0}", "example": "exemplu", "Search": "C\u0103utare", "All": "Tot", "Currency": "Moned\u0103", "Text": "Text", "Quotations": "Ghilimele", "Mathematical": "Simboluri matematice", "Extended Latin": "Simboluri alfabet latin extins", "Symbols": "Simboluri", "Arrows": "S\u0103ge\u021bi", "User Defined": "Definite de utilizator", "dollar sign": "simbol dolar", "currency sign": "simbol moned\u0103", "euro-currency sign": "simbol euro", "colon sign": "dou\u0103 puncte", "cruzeiro sign": "simbol cruzeiro", "french franc sign": "simbol franc francez", "lira sign": "simbol lir\u0103", "mill sign": "simbol mill", "naira sign": "simbol naira", "peseta sign": "simbol peset\u0103", "rupee sign": "simbol rupie", "won sign": "simbol won", "new sheqel sign": "simbol shekel nou", "dong sign": "simbol dong", "kip sign": "simbol kip", "tugrik sign": "simbol tugrik", "drachma sign": "simbol drahm\u0103", "german penny symbol": "simbol peni german", "peso sign": "simbol peso", "guarani sign": "simbol guarani", "austral sign": "simbol austral", "hryvnia sign": "simbol grivn\u0103", "cedi sign": "simbol cedi", "livre tournois sign": "simbol livr\u0103 tournois", "spesmilo sign": "simbol spesmilo", "tenge sign": "simbol tenge", "indian rupee sign": "simbol rupie indian\u0103", "turkish lira sign": "simbol lir\u0103 turceasc\u0103", "nordic mark sign": "simbol marc\u0103 nordic\u0103", "manat sign": "simbol manat", "ruble sign": "simbol rubl\u0103", "yen character": "simbol yen", "yuan character": "simbol yuan", "yuan character, in hong kong and taiwan": "simbol yuan \u00een Hong Kong \u0219i Taiwan", "yen\/yuan character variant one": "simbol yen\/yuan prima variant\u0103", "Loading emoticons...": "Se \u00eencarc\u0103 emoticoanele\u2026", "Could not load emoticons": "Nu s-au putut \u00eenc\u0103rca emoticoanele", "People": "Persoane", "Animals and Nature": "Animale \u0219i natur\u0103", "Food and Drink": "M\u00e2ncare \u0219i b\u0103uturi", "Activity": "Activit\u0103\u021bi", "Travel and Places": "C\u0103l\u0103torii \u0219i loca\u021bii", "Objects": "Obiecte", "Flags": "Steaguri", "Characters": "Caractere", "Characters (no spaces)": "Caractere (f\u0103r\u0103 spa\u021bii)", "Error: Form submit field collision.": "Eroare: Coliziune c\u00e2mpuri la trimiterea formularului.", "Error: No form element found.": "Eroare: Niciun element de formular g\u0103sit.", "Update": "Actualizare", "Color swatch": "Mostr\u0103 de culori", "Turquoise": "Turcoaz", "Green": "Verde", "Blue": "Albastru", "Purple": "Mov", "Navy Blue": "Albastru marin", "Dark Turquoise": "Turcoaz \u00eenchis", "Dark Green": "Verde \u00eenchis", "Medium Blue": "Albastru mediu", "Medium Purple": "Mov mediu", "Midnight Blue": "Albastru \u00eenchis", "Yellow": "Galben", "Orange": "Portocaliu", "Red": "Ro\u0219u", "Light Gray": "Gri deschis", "Gray": "Gri", "Dark Yellow": "Galben \u00eenchis", "Dark Orange": "Portocaliu \u00eenchis", "Dark Red": "Ro\u0219u \u00eenchis", "Medium Gray": "Gri mediu", "Dark Gray": "Gri \u00eenchis", "Black": "Negru", "White": "Alb", "Switch to or from fullscreen mode": "Comutare pe sau de la modul ecran complet", "Open help dialog": "Deschide dialogul de ajutor", "history": "istoric", "styles": "stiluri", "formatting": "formatare", "alignment": "aliniere", "indentation": "indentare", "permanent pen": "stilou permanent", "comments": "comentarii" }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/tinymce/langs/ru.js ================================================ tinymce.addI18n('ru',{ "Redo": "\u0412\u0435\u0440\u043d\u0443\u0442\u044c", "Undo": "\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c", "Cut": "\u0412\u044b\u0440\u0435\u0437\u0430\u0442\u044c", "Copy": "\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c", "Paste": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c", "Select all": "\u0412\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0432\u0441\u0435", "New document": "\u041d\u043e\u0432\u044b\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442", "Ok": "OK", "Cancel": "\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c", "Visual aids": "\u0412\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438", "Bold": "\u0416\u0438\u0440\u043d\u044b\u0439 \u0448\u0440\u0438\u0444\u0442", "Italic": "\u041a\u0443\u0440\u0441\u0438\u0432", "Underline": "\u041f\u043e\u0434\u0447\u0435\u0440\u043a\u0438\u0432\u0430\u043d\u0438\u0435", "Strikethrough": "\u0417\u0430\u0447\u0435\u0440\u043a\u0438\u0432\u0430\u043d\u0438\u0435", "Superscript": "\u041d\u0430\u0434\u0441\u0442\u0440\u043e\u0447\u043d\u044b\u0439", "Subscript": "\u041f\u043e\u0434\u0441\u0442\u0440\u043e\u0447\u043d\u044b\u0439", "Clear formatting": "\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435", "Align left": "\u0412\u044b\u0440\u043e\u0432\u043d\u044f\u0442\u044c \u043f\u043e \u043b\u0435\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e", "Align center": "\u0412\u044b\u0440\u043e\u0432\u043d\u044f\u0442\u044c \u043f\u043e \u0446\u0435\u043d\u0442\u0440\u0443", "Align right": "\u0412\u044b\u0440\u043e\u0432\u043d\u044f\u0442\u044c \u043f\u043e \u043f\u0440\u0430\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e", "Justify": "\u0412\u044b\u0440\u043e\u0432\u043d\u044f\u0442\u044c \u0442\u0435\u0441\u0442 \u043f\u043e \u0448\u0438\u0440\u0438\u043d\u0435", "Bullet list": "\u041c\u0430\u0440\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a", "Numbered list": "\u041d\u0443\u043c\u0435\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a", "Decrease indent": "\u0423\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u043e\u0442\u0441\u0442\u0443\u043f", "Increase indent": "\u0423\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u043e\u0442\u0441\u0442\u0443\u043f", "Close": "\u0417\u0430\u043a\u0440\u044b\u0442\u044c", "Formats": "\u0424\u043e\u0440\u043c\u0430\u0442\u044b", "Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u0412\u0430\u0448 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u0440\u044f\u043c\u043e\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0431\u0443\u0444\u0435\u0440\u0443 \u043e\u0431\u043c\u0435\u043d\u0430. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u044f \u043a\u043b\u0430\u0432\u0438\u0448: Ctrl+X\/C\/V.", "Headers": "\u0412\u0435\u0440\u0445\u043d\u0438\u0435 \u043a\u043e\u043b\u043e\u043d\u0442\u0438\u0442\u0443\u043b\u044b", "Header 1": "\u0412\u0435\u0440\u0445\u043d\u0438\u0439 \u043a\u043e\u043b\u043e\u043d\u0442\u0438\u0442\u0443\u043b 1", "Header 2": "\u0412\u0435\u0440\u0445\u043d\u0438\u0439 \u043a\u043e\u043b\u043e\u043d\u0442\u0438\u0442\u0443\u043b 2", "Header 3": "\u0412\u0435\u0440\u0445\u043d\u0438\u0439 \u043a\u043e\u043b\u043e\u043d\u0442\u0438\u0442\u0443\u043b 3", "Header 4": "\u0412\u0435\u0440\u0445\u043d\u0438\u0439 \u043a\u043e\u043b\u043e\u043d\u0442\u0438\u0442\u0443\u043b 4", "Header 5": "\u0412\u0435\u0440\u0445\u043d\u0438\u0439 \u043a\u043e\u043b\u043e\u043d\u0442\u0438\u0442\u0443\u043b 5", "Header 6": "\u0412\u0435\u0440\u0445\u043d\u0438\u0439 \u043a\u043e\u043b\u043e\u043d\u0442\u0438\u0442\u0443\u043b 6", "Headings": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438", "Heading 1": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 1", "Heading 2": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 2", "Heading 3": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 3", "Heading 4": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 4", "Heading 5": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 5", "Heading 6": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 6", "Preformatted": "\u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439", "Div": "Div", "Pre": "Pre", "Code": "\u041a\u043e\u0434", "Paragraph": "\u0410\u0431\u0437\u0430\u0446", "Blockquote": "\u0411\u043b\u043e\u043a \u0446\u0438\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f", "Inline": "\u0412\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439", "Blocks": "\u0411\u043b\u043e\u043a\u0438", "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u0412\u0441\u0442\u0430\u0432\u043a\u0430 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0430, \u043f\u043e\u043a\u0430 \u043d\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u0443\u044e \u043e\u043f\u0446\u0438\u044e.", "Fonts": "\u0428\u0440\u0438\u0444\u0442\u044b", "Font Sizes": "\u0420\u0430\u0437\u043c\u0435\u0440 \u0448\u0440\u0438\u0444\u0442\u0430", "Class": "\u041a\u043b\u0430\u0441\u0441", "Browse for an image": "\u0412\u044b\u0431\u043e\u0440 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f", "OR": "\u0418\u041b\u0418", "Drop an image here": "\u041f\u0435\u0440\u0435\u0442\u0430\u0449\u0438\u0442\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441\u044e\u0434\u0430", "Upload": "\u041f\u0435\u0440\u0435\u0434\u0430\u0442\u044c", "Block": "\u0411\u043b\u043e\u043a", "Align": "\u0412\u044b\u0440\u043e\u0432\u043d\u044f\u0442\u044c", "Default": "\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439", "Circle": "\u041e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u0438", "Disc": "\u041a\u0440\u0443\u0433\u0438", "Square": "\u041a\u0432\u0430\u0434\u0440\u0430\u0442\u044b", "Lower Alpha": "\u0421\u0442\u0440\u043e\u0447\u043d\u044b\u0435 \u043b\u0430\u0442\u0438\u043d\u0441\u043a\u0438\u0435 \u0431\u0443\u043a\u0432\u044b", "Lower Greek": "\u0421\u0442\u0440\u043e\u0447\u043d\u044b\u0435 \u0433\u0440\u0435\u0447\u0435\u0441\u043a\u0438\u0435 \u0431\u0443\u043a\u0432\u044b", "Lower Roman": "\u0421\u0442\u0440\u043e\u0447\u043d\u044b\u0435 \u0440\u0438\u043c\u0441\u043a\u0438\u0435 \u0446\u0438\u0444\u0440\u044b", "Upper Alpha": "\u0417\u0430\u0433\u043b\u0430\u0432\u043d\u044b\u0435 \u043b\u0430\u0442\u0438\u043d\u0441\u043a\u0438\u0435 \u0431\u0443\u043a\u0432\u044b", "Upper Roman": "\u0417\u0430\u0433\u043b\u0430\u0432\u043d\u044b\u0435 \u0440\u0438\u043c\u0441\u043a\u0438\u0435 \u0446\u0438\u0444\u0440\u044b", "Anchor...": "\u042f\u043a\u043e\u0440\u044c...", "Name": "\u0418\u043c\u044f", "Id": "Id", "Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Id \u0434\u043e\u043b\u0436\u0435\u043d \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c\u0441\u044f \u0441 \u0431\u0443\u043a\u0432\u044b, \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0442\u044c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u0431\u0443\u043a\u0432\u044b, \u0446\u0438\u0444\u0440\u044b, \u0442\u0438\u0440\u0435, \u0442\u043e\u0447\u043a\u0438, \u0434\u0432\u043e\u0435\u0442\u043e\u0447\u0438\u044f \u0438\u043b\u0438 \u043f\u043e\u0434\u0447\u0435\u0440\u043a\u0438\u0432\u0430\u043d\u0438\u044f.", "You have unsaved changes are you sure you want to navigate away?": "\u0423 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u043d\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f. \u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0439\u0442\u0438?", "Restore last draft": "\u0412\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430", "Special character...": "\u0421\u043f\u0435\u0446. \u0441\u0438\u043c\u0432\u043e\u043b\u044b...", "Source code": "\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434", "Insert\/Edit code sample": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c\/\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0434\u0430", "Language": "\u042f\u0437\u044b\u043a", "Code sample...": "\u041f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0434\u0430...", "Color Picker": "\u041f\u0438\u043f\u0435\u0442\u043a\u0430 \u0446\u0432\u0435\u0442\u0430", "R": "R", "G": "G", "B": "B", "Left to right": "\u041d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043b\u0435\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043e", "Right to left": "\u041d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u043b\u0435\u0432\u043e", "Emoticons...": "\u0421\u043c\u0430\u0439\u043b\u0438\u043a\u0438...", "Metadata and Document Properties": "\u041c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430", "Title": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a", "Keywords": "\u041a\u043b\u044e\u0447\u0438\u0432\u044b\u0435 \u0441\u043b\u043e\u0432\u0430", "Description": "\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435", "Robots": "\u0420\u043e\u0431\u043e\u0442\u044b", "Author": "\u0410\u0432\u0442\u043e\u0440", "Encoding": "\u041a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0430", "Fullscreen": "\u041f\u043e\u043b\u043d\u043e\u044d\u043a\u0440\u0430\u043d\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c", "Action": "\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435", "Shortcut": "\u042f\u0440\u043b\u044b\u043a", "Help": "\u041f\u043e\u043c\u043e\u0449\u044c", "Address": "\u0410\u0434\u0440\u0435\u0441", "Focus to menubar": "\u0424\u043e\u043a\u0443\u0441 \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u0438 \u043c\u0435\u043d\u044e", "Focus to toolbar": "\u0424\u043e\u043a\u0443\u0441 \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432", "Focus to element path": "\u0424\u043e\u043a\u0443\u0441 \u043d\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0435 \u043f\u0443\u0442\u0438", "Focus to contextual toolbar": "\u0424\u043e\u043a\u0443\u0441 \u043d\u0430 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u043e\u0439 \u043f\u0430\u043d\u0435\u043b\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432", "Insert link (if link plugin activated)": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443 (\u0435\u0441\u043b\u0438 \u043f\u043b\u0430\u0433\u0438\u043d link \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043d)", "Save (if save plugin activated)": "\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c (\u0435\u0441\u043b\u0438 \u043f\u043b\u0430\u0433\u0438\u043d save \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043d)", "Find (if searchreplace plugin activated)": "\u041d\u0430\u0439\u0442\u0438 (\u0435\u0441\u043b\u0438 \u043f\u043b\u0430\u0433\u0438\u043d searchreplace \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043d)", "Plugins installed ({0}):": "\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u044b ({0}):", "Premium plugins:": "\u041f\u0440\u0435\u043c\u0438\u0443\u043c \u043f\u043b\u0430\u0433\u0438\u043d\u044b:", "Learn more...": "\u0423\u0437\u043d\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435...", "You are using {0}": "\u0412\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 {0}", "Plugins": "\u041f\u043b\u0430\u0433\u0438\u043d\u044b", "Handy Shortcuts": "\u0413\u043e\u0440\u044f\u0447\u0438\u0435 \u043a\u043b\u0430\u0432\u0438\u0448\u0438", "Horizontal line": "\u0413\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u043b\u0438\u043d\u0438\u044f", "Insert\/edit image": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c\/\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435", "Image description": "\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f", "Source": "\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a", "Dimensions": "\u0420\u0430\u0437\u043c\u0435\u0440", "Constrain proportions": "\u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u0438", "General": "\u041e\u0431\u0449\u0435\u0435", "Advanced": "\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u0435", "Style": "\u0421\u0442\u0438\u043b\u044c", "Vertical space": "\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b", "Horizontal space": "\u0413\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b", "Border": "\u0420\u0430\u043c\u043a\u0430", "Insert image": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435", "Image...": "\u0418\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435...", "Image list": "\u0421\u043f\u0438\u0441\u043e\u043a \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439", "Rotate counterclockwise": "\u041f\u043e\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043f\u0440\u043e\u0442\u0438\u0432 \u0447\u0430\u0441\u043e\u0432\u043e\u0439 \u0441\u0442\u0440\u0435\u043b\u043a\u0438", "Rotate clockwise": "\u041f\u043e\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043f\u043e \u0447\u0430\u0441\u043e\u0432\u043e\u0439 \u0441\u0442\u0440\u0435\u043b\u043a\u0435", "Flip vertically": "\u041e\u0442\u0440\u0430\u0437\u0438\u0442\u044c \u043f\u043e \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u0438", "Flip horizontally": "\u041e\u0442\u0440\u0430\u0437\u0438\u0442\u044c \u043f\u043e \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u0438", "Edit image": "\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435", "Image options": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f", "Zoom in": "\u041f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u044c", "Zoom out": "\u041e\u0442\u0434\u0430\u043b\u0438\u0442\u044c", "Crop": "\u041e\u0431\u0440\u0435\u0437\u0430\u0442\u044c", "Resize": "\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440", "Orientation": "\u041e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u044f", "Brightness": "\u042f\u0440\u043a\u043e\u0441\u0442\u044c", "Sharpen": "\u0427\u0435\u0442\u043a\u043e\u0441\u0442\u044c", "Contrast": "\u041a\u043e\u043d\u0442\u0440\u0430\u0441\u0442", "Color levels": "\u0426\u0432\u0435\u0442\u043e\u0432\u044b\u0435 \u0443\u0440\u043e\u0432\u043d\u0438", "Gamma": "\u0413\u0430\u043c\u043c\u0430", "Invert": "\u0418\u043d\u0432\u0435\u0440\u0441\u0438\u044f", "Apply": "\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c", "Back": "\u041d\u0430\u0437\u0430\u0434", "Insert date\/time": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0434\u0430\u0442\u0443\/\u0432\u0440\u0435\u043c\u044f", "Date\/time": "\u0414\u0430\u0442\u0430\/\u0432\u0440\u0435\u043c\u044f", "Insert\/Edit Link": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c\/\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443", "Insert\/edit link": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c\/\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443", "Text to display": "\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c\u044b\u0439 \u0442\u0435\u043a\u0441\u0442", "Url": "\u0410\u0434\u0440\u0435\u0441 \u0441\u0441\u044b\u043b\u043a\u0438", "Open link in...": "\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443 \u0432...", "Current window": "\u0422\u0435\u043a\u0443\u0449\u0435\u0435 \u043e\u043a\u043d\u043e", "None": "\u041d\u0435\u0442", "New window": "\u0412 \u043d\u043e\u0432\u043e\u043c \u043e\u043a\u043d\u0435", "Remove link": "\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443", "Anchors": "\u042f\u043a\u043e\u0440\u044f", "Link...": "\u0421\u0441\u044b\u043b\u043a\u0430...", "Paste or type a link": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0438\u043b\u0438 \u0432\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u0441\u0441\u044b\u043b\u043a\u0443", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u0412\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0439 URL \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u043c \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b. \u0412\u044b \u0436\u0435\u043b\u0430\u0435\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u0435\u0444\u0438\u043a\u0441 \u00abmailto:\u00bb?", "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\u0412\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0439 URL \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043d\u0435\u0448\u043d\u0435\u0439 \u0441\u0441\u044b\u043b\u043a\u043e\u0439. \u0412\u044b \u0436\u0435\u043b\u0430\u0435\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u0435\u0444\u0438\u043a\u0441 \u00abhttp:\/\/\u00bb?", "Link list": "\u0421\u043f\u0438\u0441\u043e\u043a \u0441\u0441\u044b\u043b\u043e\u043a", "Insert video": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0438\u0434\u0435\u043e", "Insert\/edit video": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c\/\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0438\u0434\u0435\u043e", "Insert\/edit media": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c\/\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0438\u0434\u0435\u043e", "Alternative source": "\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a", "Alternative source URL": "URL \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430", "Media poster (Image URL)": "\u041f\u043e\u0441\u0442\u0435\u0440 \u043c\u0443\u043b\u044c\u0442\u0438\u043c\u0435\u0434\u0438\u0430 (URL \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f)", "Paste your embed code below:": "\u0412\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u0432\u0430\u0448 \u043a\u043e\u0434 \u043d\u0438\u0436\u0435:", "Embed": "\u041a\u043e\u0434 \u0434\u043b\u044f \u0432\u0441\u0442\u0430\u0432\u043a\u0438", "Media...": "\u041c\u0443\u043b\u044c\u0442\u0438\u043c\u0435\u0434\u0438\u0430...", "Nonbreaking space": "\u041d\u0435\u0440\u0430\u0437\u0440\u044b\u0432\u043d\u044b\u0439 \u043f\u0440\u043e\u0431\u0435\u043b", "Page break": "\u0420\u0430\u0437\u0440\u044b\u0432 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b", "Paste as text": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u0430\u043a \u0442\u0435\u043a\u0441\u0442", "Preview": "\u041f\u0440\u0435\u0434\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440", "Print...": "\u041d\u0430\u043f\u0435\u0447\u0430\u0442\u0430\u0442\u044c...", "Save": "\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c", "Find": "\u041d\u0430\u0439\u0442\u0438", "Replace with": "\u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0430", "Replace": "\u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c", "Replace all": "\u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u0441\u0435", "Previous": "\u041f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439", "Next": "\u0412\u043d\u0438\u0437", "Find and replace...": "\u041d\u0430\u0439\u0442\u0438 \u0438 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c...", "Could not find the specified string.": "\u0417\u0430\u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u0430", "Match case": "\u0423\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440", "Find whole words only": "\u041d\u0430\u0439\u0442\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0446\u0435\u043b\u044b\u0435 \u0441\u043b\u043e\u0432\u0430", "Spell check": "\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043e\u0440\u0444\u043e\u0433\u0440\u0430\u0444\u0438\u0438", "Ignore": "\u0418\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c", "Ignore all": "\u0418\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435", "Finish": "\u0417\u0430\u043a\u043e\u043d\u0447\u0438\u0442\u044c", "Add to Dictionary": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u0441\u043b\u043e\u0432\u0430\u0440\u044c", "Insert table": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u0443", "Table properties": "\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u044b", "Delete table": "\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u0443", "Cell": "\u042f\u0447\u0435\u0439\u043a\u0430", "Row": "\u0421\u0442\u0440\u043e\u043a\u0430", "Column": "\u0421\u0442\u043e\u043b\u0431\u0435\u0446", "Cell properties": "\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u044f\u0447\u0435\u0439\u043a\u0438", "Merge cells": "\u041e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u044f\u0447\u0435\u0439\u043a\u0438", "Split cell": "\u0420\u0430\u0437\u0431\u0438\u0442\u044c \u044f\u0447\u0435\u0439\u043a\u0443", "Insert row before": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u0443\u0441\u0442\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0441\u0432\u0435\u0440\u0445\u0443", "Insert row after": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u0443\u0441\u0442\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0441\u043d\u0438\u0437\u0443", "Delete row": "\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443", "Row properties": "\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0441\u0442\u0440\u043e\u043a\u0438", "Cut row": "\u0412\u044b\u0440\u0435\u0437\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443", "Copy row": "\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443", "Paste row before": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u0441\u0432\u0435\u0440\u0445\u0443", "Paste row after": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u0441\u043d\u0438\u0437\u0443", "Insert column before": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u0441\u043b\u0435\u0432\u0430", "Insert column after": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u0441\u043f\u0440\u0430\u0432\u0430", "Delete column": "\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0435\u0446", "Cols": "\u0421\u0442\u043e\u043b\u0431\u0446\u044b", "Rows": "\u0421\u0442\u0440\u043e\u043a\u0438", "Width": "\u0428\u0438\u0440\u0438\u043d\u0430", "Height": "\u0412\u044b\u0441\u043e\u0442\u0430", "Cell spacing": "\u0412\u043d\u0435\u0448\u043d\u0438\u0439 \u043e\u0442\u0441\u0442\u0443\u043f", "Cell padding": "\u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u043e\u0442\u0441\u0442\u0443\u043f", "Show caption": "\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u043e\u0434\u043f\u0438\u0441\u044c", "Left": "\u041f\u043e \u043b\u0435\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e", "Center": "\u041f\u043e \u0446\u0435\u043d\u0442\u0440\u0443", "Right": "\u041f\u043e \u043f\u0440\u0430\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e", "Cell type": "\u0422\u0438\u043f \u044f\u0447\u0435\u0439\u043a\u0438", "Scope": "Scope", "Alignment": "\u0412\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435", "H Align": "\u0413\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435", "V Align": "\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435", "Top": "\u041f\u043e \u0432\u0435\u0440\u0445\u0443", "Middle": "\u041f\u043e \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435", "Bottom": "\u041f\u043e \u043d\u0438\u0437\u0443", "Header cell": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a", "Row group": "\u0413\u0440\u0443\u043f\u043f\u0430 \u0441\u0442\u0440\u043e\u043a", "Column group": "\u0413\u0440\u0443\u043f\u043f\u0430 \u043a\u043e\u043b\u043e\u043d\u043e\u043a", "Row type": "\u0422\u0438\u043f \u0441\u0442\u0440\u043e\u043a\u0438", "Header": "\u0428\u0430\u043f\u043a\u0430", "Body": "\u0422\u0435\u043b\u043e", "Footer": "\u041d\u0438\u0437", "Border color": "\u0426\u0432\u0435\u0442 \u0440\u0430\u043c\u043a\u0438", "Insert template...": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d...", "Templates": "\u0428\u0430\u0431\u043b\u043e\u043d\u044b", "Template": "\u0428\u0430\u0431\u043b\u043e\u043d", "Text color": "\u0426\u0432\u0435\u0442 \u0442\u0435\u043a\u0441\u0442\u0430", "Background color": "\u0426\u0432\u0435\u0442 \u0444\u043e\u043d\u0430", "Custom...": "\u0412\u044b\u0431\u0440\u0430\u0442\u044c\u2026", "Custom color": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u0446\u0432\u0435\u0442", "No color": "\u0411\u0435\u0437 \u0446\u0432\u0435\u0442\u0430", "Remove color": "\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0446\u0432\u0435\u0442", "Table of Contents": "\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435", "Show blocks": "\u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0431\u043b\u043e\u043a\u0438", "Show invisible characters": "\u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u044b\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b", "Word count": "\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u043b\u043e\u0432", "Count": "\u041f\u043e\u0434\u0441\u0447\u0435\u0442", "Document": "\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442", "Selection": "\u0412\u044b\u0431\u043e\u0440", "Words": "\u0421\u043b\u043e\u0432\u0430", "Words: {0}": "\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u043b\u043e\u0432: {0}", "{0} words": "\u0441\u043b\u043e\u0432: {0}", "File": "\u0424\u0430\u0439\u043b", "Edit": "\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c", "Insert": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c", "View": "\u0412\u0438\u0434", "Format": "\u0424\u043e\u0440\u043c\u0430\u0442", "Table": "\u0422\u0430\u0431\u043b\u0438\u0446\u0430", "Tools": "\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b", "Powered by {0}": "\u041f\u0440\u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0435 {0}", "Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u0422\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0435 \u043f\u043e\u043b\u0435. \u041d\u0430\u0436\u043c\u0438\u0442\u0435 ALT-F9 \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043c\u0435\u043d\u044e, ALT-F10 \u043f\u0430\u043d\u0435\u043b\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432, ALT-0 \u0434\u043b\u044f \u0432\u044b\u0437\u043e\u0432\u0430 \u043f\u043e\u043c\u043e\u0449\u0438.", "Image title": "\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f", "Border width": "\u0428\u0438\u0440\u0438\u043d\u0430 \u0440\u0430\u043c\u043a\u0438", "Border style": "\u0421\u0442\u0438\u043b\u044c \u0440\u0430\u043c\u043a\u0438", "Error": "\u041e\u0448\u0438\u0431\u043a\u0430", "Warn": "\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435", "Valid": "\u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0439", "To open the popup, press Shift+Enter": "\u0427\u0442\u043e\u0431\u044b \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0449\u0435\u0435 \u043e\u043a\u043d\u043e, \u043d\u0430\u0436\u043c\u0438\u0442\u0435 Shift+Enter", "Rich Text Area. Press ALT-0 for help.": "\u041f\u043e\u043b\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0430. \u041d\u0430\u0436\u043c\u0438\u0442\u0435 ALT-0, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0441\u043f\u0440\u0430\u0432\u043a\u0443.", "System Font": "\u0421\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0448\u0440\u0438\u0444\u0442", "Failed to upload image: {0}": "\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f: {0}", "Failed to load plugin: {0} from url {1}": "\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u0430: {0} \u0438\u0437 URL {1}", "Failed to load plugin url: {0}": "\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 URL \u043f\u043b\u0430\u0433\u0438\u043d\u0430: {0}", "Failed to initialize plugin: {0}": "\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u0430: {0}", "example": "\u043f\u0440\u0438\u043c\u0435\u0440", "Search": "\u041f\u043e\u0438\u0441\u043a", "All": "\u0412\u0441\u0435", "Currency": "\u0412\u0430\u043b\u044e\u0442\u0430", "Text": "\u0422\u0435\u043a\u0441\u0442", "Quotations": "\u0426\u0438\u0442\u0430\u0442\u044b", "Mathematical": "\u041c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435", "Extended Latin": "\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u0430\u044f \u043b\u0430\u0442\u044b\u043d\u044c", "Symbols": "\u0421\u0438\u043c\u0432\u043e\u043b\u044b", "Arrows": "\u0421\u0442\u0440\u0435\u043b\u043a\u0438", "User Defined": "\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c", "dollar sign": "\u0421\u0438\u043c\u0432\u043e\u043b \u0434\u043e\u043b\u043b\u0430\u0440\u0430", "currency sign": "\u0421\u0438\u043c\u0432\u043e\u043b \u0432\u0430\u043b\u044e\u0442\u044b", "euro-currency sign": "\u0421\u0438\u043c\u0432\u043e\u043b \u0435\u0432\u0440\u043e", "colon sign": "\u0414\u0432\u043e\u0435\u0442\u043e\u0447\u0438\u0435", "cruzeiro sign": "\u0421\u0438\u043c\u0432\u043e\u043b \u043a\u0440\u0443\u0437\u0435\u0439\u0440\u043e", "french franc sign": "\u0421\u0438\u043c\u0432\u043e\u043b \u0444\u0440\u0430\u043d\u0446\u0443\u0437\u0441\u043a\u043e\u0433\u043e \u0444\u0440\u0430\u043d\u043a\u0430", "lira sign": "\u0421\u0438\u043c\u0432\u043e\u043b \u043b\u0438\u0440\u044b", "mill sign": "\u0421\u0438\u043c\u0432\u043e\u043b \u0434\u0435\u0441\u044f\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0446\u0435\u043d\u0442\u0430", "naira sign": "\u0421\u0438\u043c\u0432\u043e\u043b \u043d\u0430\u0439\u0440\u044b", "peseta sign": "\u0421\u0438\u043c\u0432\u043e\u043b \u043f\u0435\u0441\u0435\u0442\u044b", "rupee sign": "\u0421\u0438\u043c\u0432\u043e\u043b \u0440\u0443\u043f\u0438\u0438", "won sign": "\u0421\u0438\u043c\u0432\u043e\u043b \u0432\u043e\u043d\u044b", "new sheqel sign": "\u0421\u0438\u043c\u0432\u043e\u043b \u0448\u0435\u043a\u0435\u043b\u044f", "dong sign": "\u0421\u0438\u043c\u0432\u043e\u043b \u0434\u043e\u043d\u0433\u0430", "kip sign": "\u0421\u0438\u043c\u0432\u043e\u043b \u043a\u0438\u043f\u044b", "tugrik sign": "\u0421\u0438\u043c\u0432\u043e\u043b \u0442\u0443\u0433\u0440\u0438\u043a\u0430", "drachma sign": "\u0421\u0438\u043c\u0432\u043e\u043b \u0434\u0440\u0430\u0445\u043c\u044b", "german penny symbol": "\u0441\u0438\u043c\u0432\u043e\u043b \u043f\u0444\u0435\u043d\u043d\u0438\u0433\u0430", "peso sign": "\u0421\u0438\u043c\u0432\u043e\u043b \u043f\u0435\u0441\u043e", "guarani sign": "\u0421\u0438\u043c\u0432\u043e\u043b \u0433\u0443\u0430\u0440\u0430\u043d\u0438", "austral sign": "\u0421\u0438\u043c\u0432\u043e\u043b \u0430\u0443\u0441\u0442\u0440\u0430\u043b\u0430", "hryvnia sign": "\u0421\u0438\u043c\u0432\u043e\u043b \u0433\u0440\u0438\u0432\u043d\u0438", "cedi sign": "\u0421\u0438\u043c\u0432\u043e\u043b \u0441\u0435\u0434\u0438", "livre tournois sign": "\u0421\u0438\u043c\u0432\u043e\u043b \u043b\u0438\u0432\u0440\u044b", "spesmilo sign": "\u0421\u0438\u043c\u0432\u043e\u043b \u0441\u043f\u0435\u0441\u043c\u0438\u043b\u043e", "tenge sign": "\u0421\u0438\u043c\u0432\u043e\u043b \u0442\u0435\u043d\u044c\u0433\u0435", "indian rupee sign": "\u0421\u0438\u043c\u0432\u043e\u043b \u0438\u043d\u0434\u0438\u0439\u0441\u043a\u043e\u0439 \u0440\u0443\u043f\u0438\u0438", "turkish lira sign": "\u0421\u0438\u043c\u0432\u043e\u043b \u0442\u0443\u0440\u0435\u0446\u043a\u043e\u0439 \u043b\u0438\u0440\u044b", "nordic mark sign": "\u0421\u0438\u043c\u0432\u043e\u043b \u043c\u0430\u0440\u043a\u0438", "manat sign": "\u0421\u0438\u043c\u0432\u043e\u043b \u043c\u0430\u043d\u0430\u0442\u0430", "ruble sign": "\u0421\u0438\u043c\u0432\u043e\u043b \u0440\u0443\u0431\u043b\u044f", "yen character": "\u0441\u0438\u043c\u0432\u043e\u043b \u0438\u0435\u043d\u044b", "yuan character": "\u0441\u0438\u043c\u0432\u043e\u043b \u044e\u0430\u043d\u044f", "yuan character, in hong kong and taiwan": "\u0421\u0438\u043c\u0432\u043e\u043b \u044e\u0430\u043d\u044f, \u0413\u043e\u043d\u043a\u043e\u043d\u0433 \u0438 \u0422\u0430\u0439\u0432\u0430\u043d\u044c", "yen\/yuan character variant one": "\u0441\u0438\u043c\u0432\u043e\u043b \u0438\u0435\u043d\u044b\/\u044e\u0430\u043d\u044f, \u0432\u0430\u0440\u0438\u0430\u043d\u0442 1", "Loading emoticons...": "\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0441\u043c\u0430\u0439\u043b\u043e\u0432...", "Could not load emoticons": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0441\u043c\u0430\u0439\u043b\u044b", "People": "\u041b\u044e\u0434\u0438", "Animals and Nature": "\u0416\u0438\u0432\u043e\u0442\u043d\u044b\u0435 \u0438 \u043f\u0440\u0438\u0440\u043e\u0434\u0430", "Food and Drink": "\u0415\u0434\u0430 \u0438 \u043d\u0430\u043f\u0438\u0442\u043a\u0438", "Activity": "\u0414\u0435\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c", "Travel and Places": "\u041f\u0443\u0442\u0435\u0448\u0435\u0441\u0442\u0432\u0438\u044f \u0438 \u043c\u0435\u0441\u0442\u0430", "Objects": "\u041e\u0431\u044a\u0435\u043a\u0442\u044b", "Flags": "\u0424\u043b\u0430\u0433\u0438", "Characters": "\u0421\u0438\u043c\u0432\u043e\u043b\u044b", "Characters (no spaces)": "\u0421\u0438\u043c\u0432\u043e\u043b\u044b (\u0431\u0435\u0437 \u043f\u0440\u043e\u0431\u0435\u043b\u043e\u0432)", "{0} characters": "{0} \u0441\u0438\u043c\u0432\u043e\u043b.", "Error: Form submit field collision.": "\u041e\u0448\u0438\u0431\u043a\u0430: \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442 \u043f\u043e\u043b\u0435\u0439 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0444\u043e\u0440\u043c\u044b.", "Error: No form element found.": "\u041e\u0448\u0438\u0431\u043a\u0430: \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0444\u043e\u0440\u043c\u044b.", "Update": "\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c", "Color swatch": "\u041e\u0431\u0440\u0430\u0437\u0435\u0446 \u0446\u0432\u0435\u0442\u0430", "Turquoise": "\u0411\u0438\u0440\u044e\u0437\u043e\u0432\u044b\u0439", "Green": "\u0417\u0435\u043b\u0435\u043d\u044b\u0439", "Blue": "\u0421\u0438\u043d\u0438\u0439", "Purple": "\u0420\u043e\u0437\u043e\u0432\u044b\u0439", "Navy Blue": "\u0422\u0435\u043c\u043d\u043e-\u0441\u0438\u043d\u0438\u0439", "Dark Turquoise": "\u0422\u0435\u043c\u043d\u043e-\u0431\u0438\u0440\u044e\u0437\u043e\u0432\u044b\u0439", "Dark Green": "\u0422\u0435\u043c\u043d\u043e-\u0437\u0435\u043b\u0435\u043d\u044b\u0439", "Medium Blue": "\u0421\u0440\u0435\u0434\u043d\u0438\u0439 \u0441\u0438\u043d\u0438\u0439", "Medium Purple": "\u0423\u043c\u0435\u0440\u0435\u043d\u043d\u043e \u043f\u0443\u0440\u043f\u0443\u0440\u043d\u044b\u0439", "Midnight Blue": "\u0427\u0435\u0440\u043d\u043e-\u0441\u0438\u043d\u0438\u0439", "Yellow": "\u0416\u0435\u043b\u0442\u044b\u0439", "Orange": "\u041e\u0440\u0430\u043d\u0436\u0435\u0432\u044b\u0439", "Red": "\u041a\u0440\u0430\u0441\u043d\u044b\u0439", "Light Gray": "\u0421\u0432\u0435\u0442\u043b\u043e-\u0441\u0435\u0440\u044b\u0439", "Gray": "\u0421\u0435\u0440\u044b\u0439", "Dark Yellow": "\u0422\u0435\u043c\u043d\u043e-\u0436\u0435\u043b\u0442\u044b\u0439", "Dark Orange": "\u0422\u0435\u043c\u043d\u043e-\u043e\u0440\u0430\u043d\u0436\u0435\u0432\u044b\u0439", "Dark Red": "\u0422\u0435\u043c\u043d\u043e-\u043a\u0440\u0430\u0441\u043d\u044b\u0439", "Medium Gray": "\u0423\u043c\u0435\u0440\u0435\u043d\u043d\u043e \u0441\u0435\u0440\u044b\u0439", "Dark Gray": "\u0422\u0435\u043c\u043d\u043e-\u0441\u0435\u0440\u044b\u0439", "Light Green": "\u0421\u0432\u0435\u0442\u043b\u043e-\u0437\u0435\u043b\u0435\u043d\u044b\u0439", "Light Yellow": "\u0421\u0432\u0435\u0442\u043b\u043e-\u0436\u0435\u043b\u0442\u044b\u0439", "Light Red": "\u0421\u0432\u0435\u0442\u043b\u043e-\u043a\u0440\u0430\u0441\u043d\u044b\u0439", "Light Purple": "\u0421\u0432\u0435\u0442\u043b\u043e-\u0444\u0438\u043e\u043b\u0435\u0442\u043e\u0432\u044b\u0439", "Light Blue": "\u0421\u0432\u0435\u0442\u043b\u043e-\u0441\u0438\u043d\u0438\u0439", "Dark Purple": "\u0422\u0435\u043c\u043d\u043e-\u0444\u0438\u043e\u043b\u0435\u0442\u043e\u0432\u044b\u0439", "Dark Blue": "\u0422\u0435\u043c\u043d\u043e-\u0441\u0438\u043d\u0438\u0439", "Black": "\u0427\u0435\u0440\u043d\u044b\u0439", "White": "\u0411\u0435\u043b\u044b\u0439", "Switch to or from fullscreen mode": "\u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u044d\u043a\u0440\u0430\u043d\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c", "Open help dialog": "\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0441\u043f\u0440\u0430\u0432\u043a\u0443", "history": "\u0438\u0441\u0442\u043e\u0440\u0438\u044f", "styles": "\u0441\u0442\u0438\u043b\u0438", "formatting": "\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435", "alignment": "\u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435", "indentation": "\u043e\u0442\u0441\u0442\u0443\u043f", "permanent pen": "\u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0435 \u043f\u0435\u0440\u043e", "comments": "\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438", "Format Painter": "\u0424\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e \u043e\u0431\u0440\u0430\u0437\u0446\u0443", "Insert\/edit iframe": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c\/\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442 iframe", "Capitalization": "\u041f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u043f\u0438\u0441\u043d\u044b\u0445 \u0431\u0443\u043a\u0432", "lowercase": "\u043d\u0438\u0436\u043d\u0438\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440", "UPPERCASE": "\u0412\u0415\u0420\u0425\u041d\u0418\u0419 \u0420\u0415\u0413\u0418\u0421\u0422\u0420", "Title Case": "\u0420\u0435\u0433\u0438\u0441\u0442\u0440 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f", "Permanent Pen Properties": "\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043f\u0435\u0440\u043c\u0430\u043d\u0435\u043d\u0442\u043d\u043e\u0433\u043e \u043f\u0435\u0440\u0430", "Permanent pen properties...": "\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043f\u0435\u0440\u043c\u0430\u043d\u0435\u043d\u0442\u043d\u043e\u0433\u043e \u043f\u0435\u0440\u0430...", "Font": "\u0428\u0440\u0438\u0444\u0442", "Size": "\u0420\u0430\u0437\u043c\u0435\u0440", "More...": "\u0411\u043e\u043b\u044c\u0448\u0435...", "Spellcheck Language": "\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u0440\u0430\u0432\u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f", "Select...": "\u0412\u044b\u0431\u0440\u0430\u0442\u044c...", "Preferences": "\u041f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0435\u043d\u0438\u044f", "Yes": "\u0414\u0430", "No": "\u041d\u0435\u0442", "Keyboard Navigation": "\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044b", "Version": "\u0412\u0435\u0440\u0441\u0438\u044f", "Anchor": "\u042f\u043a\u043e\u0440\u044c", "Special character": "\u0421\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b", "Code sample": "\u041f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0434\u0430", "Color": "\u0426\u0432\u0435\u0442", "Emoticons": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u043c\u0430\u0439\u043b", "Document properties": "\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430", "Image": "\u0418\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f", "Insert link": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443", "Target": "\u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443", "Link": "\u0421\u0441\u044b\u043b\u043a\u0430", "Poster": "\u0418\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435", "Media": "\u0412\u0438\u0434\u0435\u043e", "Print": "\u041f\u0435\u0447\u0430\u0442\u044c", "Prev": "\u0412\u0432\u0435\u0440\u0445", "Find and replace": "\u041f\u043e\u0438\u0441\u043a \u0438 \u0437\u0430\u043c\u0435\u043d\u0430", "Whole words": "\u0421\u043b\u043e\u0432\u043e \u0446\u0435\u043b\u0438\u043a\u043e\u043c", "Spellcheck": "\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043f\u0440\u0430\u0432\u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435", "Caption": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a", "Insert template": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d" }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/tinymce/langs/sk.js ================================================ tinymce.addI18n('sk',{ "Redo": "Znova", "Undo": "Sp\u00e4\u0165", "Cut": "Vystrihn\u00fa\u0165", "Copy": "Kop\u00edrova\u0165", "Paste": "Prilepi\u0165", "Select all": "Ozna\u010di\u0165 v\u0161etko", "New document": "Nov\u00fd dokument", "Ok": "Ok", "Cancel": "Zru\u0161i\u0165", "Visual aids": "Vizu\u00e1lne pom\u00f4cky", "Bold": "Tu\u010dn\u00e9", "Italic": "Kurz\u00edva", "Underline": "Pod\u010diarknut\u00e9", "Strikethrough": "Pre\u010diarknut\u00e9", "Superscript": "Horn\u00fd index", "Subscript": "Doln\u00fd index", "Clear formatting": "Vymaza\u0165 form\u00e1tovanie", "Align left": "Zarovna\u0165 v\u013eavo", "Align center": "Zarovna\u0165 na stred", "Align right": "Zarovna\u0165 vpravo", "Justify": "Zarovna\u0165", "Bullet list": "Zoznam s odr\u00e1\u017ekami", "Numbered list": "\u010c\u00edslovan\u00fd zoznam", "Decrease indent": "Zmen\u0161i\u0165 odsadenie", "Increase indent": "Zv\u00e4\u010d\u0161i\u0165 odsadenie", "Close": "Zatvori\u0165", "Formats": "Form\u00e1ty", "Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "V\u00e1\u0161 prehliada\u010d nepodporuje priamy pr\u00edstup do schr\u00e1nky. Pou\u017eite kl\u00e1vesov\u00e9 skratky Ctrl+X\/C\/V.", "Headers": "Z\u00e1hlavia", "Header 1": "Z\u00e1hlavie 1", "Header 2": "Z\u00e1hlavie 2", "Header 3": "Z\u00e1hlavie 3", "Header 4": "Z\u00e1hlavie 4", "Header 5": "Z\u00e1hlavie 5", "Header 6": "Z\u00e1hlavie 6", "Headings": "Nadpisy", "Heading 1": "Nadpis 1", "Heading 2": "Nadpis 2", "Heading 3": "Nadpis 3", "Heading 4": "Nadpis 4", "Heading 5": "Nadpis 5", "Heading 6": "Nadpis 6", "Preformatted": "Predform\u00e1tovan\u00e9", "Div": "Div", "Pre": "Pre", "Code": "K\u00f3d", "Paragraph": "Odstavec", "Blockquote": "Blockquote", "Inline": "Vlo\u017een\u00e9 \u0161t\u00fdly", "Blocks": "Bloky", "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Vkladanie je v m\u00f3de neform\u00e1tovan\u00e9ho textu. Vkladan\u00fd obsah bude vlo\u017een\u00fd ako neform\u00e1tovan\u00fd, a\u017e pok\u00fdm t\u00fato mo\u017enos\u0165 nevypnete.", "Fonts": "Typy p\u00edsma", "Font Sizes": "Ve\u013ekosti p\u00edsma", "Class": "Trieda", "Browse for an image": "N\u00e1js\u0165 obr\u00e1zok", "OR": "ALEBO", "Drop an image here": "Pretiahnite obr\u00e1zok sem", "Upload": "Nahra\u0165", "Block": "Blok", "Align": "Zarovna\u0165", "Default": "V\u00fdchodzie", "Circle": "Kruh", "Disc": "Disk", "Square": "\u0160tvorec", "Lower Alpha": "Mal\u00e9 p\u00edsmen\u00e1", "Lower Greek": "Mal\u00e9 gr\u00e9cke p\u00edsmen\u00e1", "Lower Roman": "Mal\u00e9 r\u00edmske \u010d\u00edslice", "Upper Alpha": "Ve\u013ek\u00e9 p\u00edsmen\u00e1", "Upper Roman": "Ve\u013ek\u00e9 r\u00edmske \u010d\u00edslice", "Anchor...": "Kotva...", "Name": "N\u00e1zov", "Id": "Id", "Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Id by malo za\u010d\u00edna\u0165 p\u00edsmenom, nasledovan\u00e9 p\u00edsmenami, \u010d\u00edslami, pom\u013a\u010dkami, bodkami, dvojbodkami alebo podtr\u017en\u00edkmi.", "You have unsaved changes are you sure you want to navigate away?": "M\u00e1te neulo\u017een\u00e9 zmeny, naozaj chcete opusti\u0165 str\u00e1nku?", "Restore last draft": "Obnovi\u0165 posledn\u00fd koncept", "Special character...": "\u0160peci\u00e1lny znak...", "Source code": "Zdrojov\u00fd k\u00f3d", "Insert\/Edit code sample": "Vlo\u017ei\u0165\/upravi\u0165 vzorku k\u00f3du", "Language": "Jazyk", "Code sample...": "Vzorka k\u00f3du...", "Color Picker": "V\u00fdber farieb", "R": "R", "G": "G", "B": "B", "Left to right": "Z\u013eava doprava", "Right to left": "Sprava do\u013eava", "Emoticons...": "Smajl\u00edky...", "Metadata and Document Properties": "Meta\u00fadaje a vlastnosti dokumentu", "Title": "Nadpis", "Keywords": "K\u013e\u00fa\u010dov\u00e9 slov\u00e1", "Description": "Popis", "Robots": "Preh\u013ead\u00e1vacie roboty", "Author": "Autor", "Encoding": "K\u00f3dovanie", "Fullscreen": "Na cel\u00fa obrazovku", "Action": "Action", "Shortcut": "Shortcut", "Help": "Help", "Address": "Address", "Focus to menubar": "Focus to menubar", "Focus to toolbar": "Focus to toolbar", "Focus to element path": "Focus to element path", "Focus to contextual toolbar": "Focus to contextual toolbar", "Insert link (if link plugin activated)": "Insert link (if link plugin activated)", "Save (if save plugin activated)": "Save (if save plugin activated)", "Find (if searchreplace plugin activated)": "Find (if searchreplace plugin activated)", "Plugins installed ({0}):": "Plugins installed ({0}):", "Premium plugins:": "Premium plugins:", "Learn more...": "Learn more...", "You are using {0}": "You are using {0}", "Plugins": "Pluginy", "Handy Shortcuts": "U\u017eito\u010dn\u00e9 odkazy", "Horizontal line": "Horizont\u00e1lna \u010diara", "Insert\/edit image": "Vlo\u017ei\u0165\/upravi\u0165 obr\u00e1zok", "Image description": "Popis obr\u00e1zku", "Source": "Zdroj", "Dimensions": "Rozmery", "Constrain proportions": "Vymedzen\u00e9 proporcie", "General": "Hlavn\u00e9", "Advanced": "Pokro\u010dil\u00e9", "Style": "\u0160t\u00fdl", "Vertical space": "Vertik\u00e1lny priestor", "Horizontal space": "Horizont\u00e1lny priestor", "Border": "Or\u00e1movanie", "Insert image": "Vlo\u017ei\u0165 obr\u00e1zok", "Image...": "Obr\u00e1zok...", "Image list": "Zoznam obr\u00e1zkov", "Rotate counterclockwise": "Oto\u010di\u0165 proti smeru hodinov\u00fdch ru\u010di\u010diek", "Rotate clockwise": "Oto\u010di\u0165 v smere hodinov\u00fdch ru\u010di\u010diek", "Flip vertically": "Preklopi\u0165 vertik\u00e1lne", "Flip horizontally": "Preklopi\u0165 horizont\u00e1lne", "Edit image": "Upravi\u0165 obr\u00e1zok", "Image options": "Mo\u017enosti obr\u00e1zku", "Zoom in": "Pribl\u00ed\u017ei\u0165", "Zoom out": "Oddiali\u0165", "Crop": "Vyreza\u0165", "Resize": "Zmeni\u0165 ve\u013ekos\u0165", "Orientation": "Orient\u00e1cia", "Brightness": "Jas", "Sharpen": "Zaostri\u0165", "Contrast": "Kontrast", "Color levels": "\u00darovne farieb", "Gamma": "Gama", "Invert": "Invertova\u0165", "Apply": "Pou\u017ei\u0165", "Back": "Sp\u00e4\u0165", "Insert date\/time": "Vlo\u017ei\u0165 d\u00e1tum\/\u010das", "Date\/time": "D\u00e1tum\/\u010das", "Insert\/Edit Link": "Vlo\u017ei\u0165\/Upravi\u0165 odkaz", "Insert\/edit link": "Vlo\u017ei\u0165\/upravi\u0165 odkaz", "Text to display": "Zobrazen\u00fd text", "Url": "Url", "Open link in...": "Otvori\u0165 odkaz v...", "Current window": "Aktu\u00e1lne okno", "None": "\u017diadne", "New window": "Nov\u00e9 okno", "Remove link": "Odstr\u00e1ni\u0165 odkaz", "Anchors": "Kotvy", "Link...": "Odkaz...", "Paste or type a link": "Prilepte alebo nap\u00ed\u0161te odkaz", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "URL, ktor\u00fa ste vlo\u017eili je pravdepodobne emailov\u00e1 adresa. \u017del\u00e1te si prida\u0165 vy\u017eadovan\u00fa mailto: predponu?", "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "URL adresa ktor\u00fa ste zadali vyzer\u00e1 ako extern\u00fd odkaz. Chcete prida\u0165 vy\u017eadovan\u00fa http:\/\/ predponu?", "Link list": "Zoznam odkazov", "Insert video": "Vlo\u017ei\u0165 video", "Insert\/edit video": "Vlo\u017ei\u0165\/upravi\u0165 video", "Insert\/edit media": "Vlo\u017ei\u0165\/upravi\u0165 m\u00e9di\u00e1", "Alternative source": "Alternat\u00edvny zdroj", "Alternative source URL": "Alternat\u00edvny zdroj URL", "Media poster (Image URL)": "Obr\u00e1zok m\u00e9dia (URL obr\u00e1zka)", "Paste your embed code below:": "Vlo\u017ete k\u00f3d pre vlo\u017eenie na str\u00e1nku:", "Embed": "Vlo\u017een\u00e9", "Media...": "M\u00e9di\u00e1...", "Nonbreaking space": "Nedelite\u013en\u00e1 medzera", "Page break": "Zalomenie str\u00e1nky", "Paste as text": "Vlo\u017ei\u0165 ako text", "Preview": "N\u00e1h\u013ead", "Print...": "Tla\u010d...", "Save": "Ulo\u017ei\u0165", "Find": "H\u013eada\u0165", "Replace with": "Nahradi\u0165 za", "Replace": "Nahradi\u0165", "Replace all": "Nahradi\u0165 v\u0161etko", "Previous": "Predch\u00e1dzaj\u00face", "Next": "Nasleduj\u00face", "Find and replace...": "N\u00e1js\u0165 a nahradi\u0165...", "Could not find the specified string.": "Zadan\u00fd re\u0165azec sa nena\u0161iel.", "Match case": "Rozli\u0161ova\u0165 ve\u013ek\u00e9\/mal\u00e9", "Find whole words only": "H\u013eada\u0165 len cel\u00e9 slov\u00e1", "Spell check": "Kontrola pravopisu", "Ignore": "Ignorova\u0165", "Ignore all": "Ignorova\u0165 v\u0161etko", "Finish": "Dokon\u010di\u0165", "Add to Dictionary": "Prida\u0165 do slovn\u00edka", "Insert table": "Vlo\u017ei\u0165 tabu\u013eku", "Table properties": "Nastavenia tabu\u013eky", "Delete table": "Zmaza\u0165 tabu\u013eku", "Cell": "Bunka", "Row": "Riadok", "Column": "St\u013apec", "Cell properties": "Vlastnosti bunky", "Merge cells": "Spoji\u0165 bunky", "Split cell": "Rozdeli\u0165 bunku", "Insert row before": "Vlo\u017ei\u0165 nov\u00fd riadok pred", "Insert row after": "Vlo\u017ei\u0165 nov\u00fd riadok za", "Delete row": "Zmaza\u0165 riadok", "Row properties": "Vlastnosti riadku", "Cut row": "Vystrihn\u00fa\u0165 riadok", "Copy row": "Kop\u00edrova\u0165 riadok", "Paste row before": "Vlo\u017ei\u0165 riadok pred", "Paste row after": "Vlo\u017ei\u0165 riadok za", "Insert column before": "Prida\u0165 nov\u00fd st\u013apec pred", "Insert column after": "Prida\u0165 nov\u00fd st\u013apec za", "Delete column": "Vymaza\u0165 st\u013apec", "Cols": "St\u013apce", "Rows": "Riadky", "Width": "\u0160\u00edrka", "Height": "V\u00fd\u0161ka", "Cell spacing": "Priestor medzi bunkami", "Cell padding": "Odsadenie v bunk\u00e1ch", "Show caption": "Zobrazi\u0165 popis", "Left": "V\u013eavo", "Center": "Na stred", "Right": "Vpravo", "Cell type": "Typ bunky", "Scope": "Oblas\u0165", "Alignment": "Zarovnanie", "H Align": "Horizont\u00e1lne zarovnanie", "V Align": "Vertik\u00e1lne zarovnanie", "Top": "Vrch", "Middle": "Stred", "Bottom": "Spodok", "Header cell": "Bunka z\u00e1hlavia", "Row group": "Skupina riadkov", "Column group": "Skupina st\u013apcov", "Row type": "Typ riadku", "Header": "Z\u00e1hlavie", "Body": "Telo", "Footer": "P\u00e4ti\u010dka", "Border color": "Farba or\u00e1movania", "Insert template...": "Vlo\u017ei\u0165 \u0161abl\u00f3nu...", "Templates": "\u0160abl\u00f3ny", "Template": "\u0160abl\u00f3na", "Text color": "Farba textu", "Background color": "Farba pozadia", "Custom...": "Vlastn\u00e1...", "Custom color": "Vlastn\u00e1 farba", "No color": "Bez farby", "Remove color": "Odstr\u00e1ni\u0165 farbu", "Table of Contents": "Obsah", "Show blocks": "Zobrazi\u0165 bloky", "Show invisible characters": "Zobrazi\u0165 skryt\u00e9 znaky", "Word count": "Po\u010det slov", "Count": "Po\u010det", "Document": "Dokument", "Selection": "V\u00fdber", "Words": "Slov\u00e1", "Words: {0}": "Slov: {0}", "{0} words": "{0} slov\u00e1\/slov", "File": "S\u00fabor", "Edit": "Upravi\u0165", "Insert": "Vlo\u017ei\u0165", "View": "Zobrazi\u0165", "Format": "Form\u00e1t", "Table": "Tabu\u013eka", "Tools": "N\u00e1stroje", "Powered by {0}": "Pou\u017e\u00edva {0}", "Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Textov\u00e9 pole. Stla\u010dte ALT-F9 pre zobrazenie menu, ALT-F10 pre zobrazenie panela n\u00e1strojov, ALT-0 pre n\u00e1povedu.", "Image title": "N\u00e1zov obr\u00e1zka", "Border width": "\u0160\u00edrka okraja", "Border style": "\u0160t\u00fdl okraja", "Error": "Chyba", "Warn": "Upozornenie", "Valid": "Platn\u00e9", "To open the popup, press Shift+Enter": "Na otvorenie kontextovej ponuky stla\u010dte Shift+Enter", "Rich Text Area. Press ALT-0 for help.": "Oblas\u0165 pre text vo form\u00e1te RTF. Stla\u010dte ALT-0 pre n\u00e1povedu.", "System Font": "Syst\u00e9mov\u00e9 p\u00edsmo", "Failed to upload image: {0}": "Obr\u00e1zok sa nepodarilo nahra\u0165: {0}", "Failed to load plugin: {0} from url {1}": "Plugin: {0} sa nepodarilo nahra\u0165 z url {1}", "Failed to load plugin url: {0}": "Nepodarilo sa nahra\u0165 plugin url: {0}", "Failed to initialize plugin: {0}": "Nepodarilo sa inicializova\u0165 plugin: {0}", "example": "pr\u00edklad", "Search": "Vyh\u013eada\u0165", "All": "V\u0161etko", "Currency": "Mena", "Text": "Text", "Quotations": "Kvot\u00e1cie", "Mathematical": "Matematick\u00e9", "Extended Latin": "Roz\u0161\u00edren\u00e1 latinka", "Symbols": "Symboly", "Arrows": "\u0160\u00edpky", "User Defined": "Definovan\u00e9 pou\u017e\u00edvate\u013eom", "dollar sign": "znak pre dol\u00e1r", "currency sign": "znak meny", "euro-currency sign": "znak eura", "colon sign": "znak dvojbodky", "cruzeiro sign": "znak pre cruzeiro", "french franc sign": "znak pre franc\u00fazsky frank", "lira sign": "znak pre l\u00edru", "mill sign": "znak pre mill", "naira sign": "znak pre nairu", "peseta sign": "znak pre pesetu", "rupee sign": "znak pre rupiu", "won sign": "znak pre won", "new sheqel sign": "znak pre nov\u00fd \u0161ekel", "dong sign": "znak pre dong", "kip sign": "znak pre kip", "tugrik sign": "znak pre tugrik", "drachma sign": "znak pre drachmu", "german penny symbol": "znak pre nemeck\u00fd pfennig", "peso sign": "znak pre peso", "guarani sign": "znak pre guarani", "austral sign": "znak pre austral", "hryvnia sign": "znak pre hrivnu", "cedi sign": "znak pre cedi", "livre tournois sign": "znak pre livre tournois", "spesmilo sign": "znak pre spesmilo", "tenge sign": "znak pre tenge", "indian rupee sign": "znak pre indick\u00fa rupiu", "turkish lira sign": "znak pre tureck\u00fa l\u00edru", "nordic mark sign": "znak pre nordick\u00fa marku", "manat sign": "znak pre manat", "ruble sign": "znak pre rube\u013e", "yen character": "znak pre jen", "yuan character": "znak pre j\u00fcan", "yuan character, in hong kong and taiwan": "znak pre j\u00fcan, v Hongkongu a Taiwane", "yen\/yuan character variant one": "znak pre jen\/j\u00fcan variant jedna", "Loading emoticons...": "Na\u010d\u00edtavam smajl\u00edky...", "Could not load emoticons": "Smajl\u00edky sa nepodarilo na\u010d\u00edta\u0165", "People": "\u013dudia", "Animals and Nature": "Zvierat\u00e1 a pr\u00edroda", "Food and Drink": "Jedlo a n\u00e1poje", "Activity": "Aktivity", "Travel and Places": "Cestovanie a miesta", "Objects": "Objekty", "Flags": "Vlajky", "Characters": "Znaky", "Characters (no spaces)": "Znaky (bez medzier)", "{0} characters": "Znaky: {0}", "Error: Form submit field collision.": "Chyba: konflikt po\u013ea odosielania formul\u00e1ra.", "Error: No form element found.": "Chyba: nena\u0161iel sa prvok formul\u00e1ra.", "Update": "Aktualizova\u0165", "Color swatch": "Vzorky farieb", "Turquoise": "Tyrkysov\u00e1", "Green": "Zelen\u00e1", "Blue": "Modr\u00e1", "Purple": "Fialov\u00e1", "Navy Blue": "N\u00e1morn\u00edcka modr\u00e1", "Dark Turquoise": "Tmavotyrkysov\u00e1", "Dark Green": "Tmavozelen\u00e1", "Medium Blue": "Stredn\u00e1 modr\u00e1", "Medium Purple": "Stredn\u00e1 fialov\u00e1", "Midnight Blue": "Polno\u010dn\u00e1 modr\u00e1", "Yellow": "\u017dlt\u00e1", "Orange": "Oran\u017eov\u00e1", "Red": "\u010cerven\u00e1", "Light Gray": "Svetlosiv\u00e1", "Gray": "Siv\u00e1", "Dark Yellow": "Tmavo\u017elt\u00e1", "Dark Orange": "Tmavooran\u017eov\u00e1", "Dark Red": "Tmavo\u010derven\u00e1", "Medium Gray": "Stredn\u00e1 siv\u00e1", "Dark Gray": "Tmavosiv\u00e1", "Light Green": "Svetlozelen\u00e1", "Light Yellow": "Svetlo\u017elt\u00e1", "Light Red": "Svetlo\u010derven\u00e1", "Light Purple": "Svetlofialov\u00e1", "Light Blue": "Svetlomodr\u00e1", "Dark Purple": "Tmavofialov\u00e1", "Dark Blue": "Tmavomodr\u00e1", "Black": "\u010cierna", "White": "Biela", "Switch to or from fullscreen mode": "Prepn\u00fa\u0165 do alebo z re\u017eimu plnej obrazovky", "Open help dialog": "Otvori\u0165 okno n\u00e1povedy", "history": "hist\u00f3ria", "styles": "\u0161t\u00fdly", "formatting": "form\u00e1tovanie", "alignment": "zarovnanie", "indentation": "odsadenie", "permanent pen": "fixka", "comments": "koment\u00e1re", "Format Painter": "Kop\u00edrova\u0165 form\u00e1t", "Insert\/edit iframe": "Vlo\u017ei\u0165\/upravi\u0165 iframe", "Capitalization": "Ve\u013ek\u00e9 p\u00edsmen\u00e1", "lowercase": "mal\u00e9 p\u00edsmen\u00e1", "UPPERCASE": "V\u0160ETKY P\u00cdSMEN\u00c1 VE\u013dK\u00c9", "Title Case": "Prv\u00e9 P\u00edsmen\u00e1 Ve\u013ek\u00e9", "Permanent Pen Properties": "Vlastnosti fixky", "Permanent pen properties...": "Vlastnosti fixky...", "Font": "P\u00edsmo", "Size": "Ve\u013ekos\u0165", "More...": "Viac...", "Spellcheck Language": "Jazyk kontroly pravopisu", "Select...": "Vyberte...", "Preferences": "Preferencie", "Yes": "\u00c1no", "No": "Nie", "Keyboard Navigation": "Navig\u00e1cia pomocou kl\u00e1vesnice", "Version": "Verzia", "Anchor": "Odkaz", "Special character": "\u0160peci\u00e1lny znak", "Color": "Farba", "Emoticons": "Smajl\u00edci", "Document properties": "Vlastnosti dokumentu", "Image": "Obr\u00e1zok", "Insert link": "Vlo\u017ei\u0165 odkaz", "Target": "Cie\u013e", "Link": "Odkaz", "Poster": "Uk\u00e1\u017eka", "Media": "M\u00e9di\u00e1", "Print": "Tla\u010di\u0165", "Prev": "Predch\u00e1dzaj\u00face", "Find and replace": "Vyh\u013eada\u0165 a nahradi\u0165", "Whole words": "Cel\u00e9 slov\u00e1", "Spellcheck": "Kontrola pravopisu", "Caption": "Popisok", "Insert template": "Vlo\u017ei\u0165 \u0161abl\u00f3nu" }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/tinymce/langs/sl.js ================================================ tinymce.addI18n('sl',{ "Redo": "Ponovno uveljavi", "Undo": "Razveljavi", "Cut": "Izre\u017ei", "Copy": "Kopiraj", "Paste": "Prilepi", "Select all": "Izberi vse", "New document": "Nov dokument", "Ok": "V redu", "Cancel": "Prekli\u010di", "Visual aids": "Vizualni pripomo\u010dki", "Bold": "Krepko", "Italic": "Po\u0161evno", "Underline": "Pod\u010drtano", "Strikethrough": "Pre\u010drtano", "Superscript": "Nadpisano", "Subscript": "Podpisano", "Clear formatting": "Odstrani oblikovanje", "Align left": "Leva poravnava", "Align center": "Sredinska poravnava", "Align right": "Desna poravnava", "Justify": "Obojestranska poravnava", "Bullet list": "Ozna\u010den seznam", "Numbered list": "O\u0161tevil\u010den seznam", "Decrease indent": "Zmanj\u0161aj zamik", "Increase indent": "Pove\u010daj zamik", "Close": "Zapri", "Formats": "Oblika", "Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Varnostne nastavitve brskalnika ne dopu\u0161\u010dajo direktnega dostopa do odlo\u017ei\u0161\u010da. Uporabite kombinacijo tipk Ctrl + X\/C\/V na tipkovnici.", "Headers": "Naslovi", "Header 1": "Naslov 1", "Header 2": "Naslov 2", "Header 3": "Naslov 3", "Header 4": "Naslov 4", "Header 5": "Naslov 5", "Header 6": "Naslov 6", "Headings": "Naslovi", "Heading 1": "Naslov 1", "Heading 2": "Naslov 2", "Heading 3": "Naslov 3", "Heading 4": "Naslov 4", "Heading 5": "Naslov 5", "Heading 6": "Naslov 6", "Preformatted": "Predformatirano", "Div": "Div", "Pre": "Pre", "Code": "Koda", "Paragraph": "Odstavek", "Blockquote": "Blockquote", "Inline": "Med besedilom", "Blocks": "Bloki", "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Odlagali\u0161\u010de je sedaj v tekstovnem na\u010dinu. Vsebina bo preslikana kot besedilo, dokler te mo\u017enosti ne izklju\u010dite.", "Fonts": "Pisave", "Font Sizes": "Velikosti pisave", "Class": "Razred", "Browse for an image": "Prebrskaj za sliko", "OR": "ALI", "Drop an image here": "Spusti sliko sem", "Upload": "Nalo\u017ei", "Block": "Blok", "Align": "Poravnava", "Default": "Privzeto", "Circle": "Krog", "Disc": "Disk", "Square": "Kvadrat", "Lower Alpha": "Mala alfa", "Lower Greek": "Male gr\u0161ke \u010drke", "Lower Roman": "Male rimske \u0161tevilke", "Upper Alpha": "Velika alfa", "Upper Roman": "Velike rimske \u0161tevilke", "Anchor...": "Sidro ...", "Name": "Naziv", "Id": "Id", "Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Id se mora za\u010deti s \u010drko, sledijo samo \u010drke, \u0161tevilke, pomi\u0161ljaji, pike, dvopi\u010dja ali pod\u010drtaji.", "You have unsaved changes are you sure you want to navigate away?": "Imate neshranjene spremembe. Ste prepri\u010dati, da \u017eelite zapustiti stran?", "Restore last draft": "Obnovi zadnji osnutek", "Special character...": "Poseben znak ...", "Source code": "Izvorna koda", "Insert\/Edit code sample": "Vstavi\/Uredi vzor\u010dno kodo", "Language": "Jezik", "Code sample...": "Vzor\u010dna koda ...", "Color Picker": "Izbirnik barve", "R": "R", "G": "G", "B": "B", "Left to right": "Od leve proti desni", "Right to left": "Od desne proti levi", "Emoticons...": "\u010custveni simboli ...", "Metadata and Document Properties": "Metapodatki in lastnosti dokumenta", "Title": "Naslov", "Keywords": "Klju\u010dne besede", "Description": "Opis", "Robots": "Robotki", "Author": "Avtor", "Encoding": "Kodiranje", "Fullscreen": "\u010cez cel zaslon", "Action": "Dejanje", "Shortcut": "Bli\u017enjica", "Help": "Pomo\u010d", "Address": "Naslov", "Focus to menubar": "Poudarek na menijski vrstici", "Focus to toolbar": "Poudarek na orodni vrstici", "Focus to element path": "Poudarek na poti elementa", "Focus to contextual toolbar": "Poudarek na kontekstualni orodni vrstici", "Insert link (if link plugin activated)": "Vstavi povezavo (\u010de je aktiviran vti\u010dnik za povezavo)", "Save (if save plugin activated)": "Shrani (\u010de je aktiviran vti\u010dnik za shranjevanje)", "Find (if searchreplace plugin activated)": "I\u0161\u010di (\u010de je aktiviran vti\u010dnik za iskanje\/zamenjavo)", "Plugins installed ({0}):": "Name\u0161\u010deni vti\u010dniki ({0}):", "Premium plugins:": "Premium vti\u010dniki:", "Learn more...": "Ve\u010d ...", "You are using {0}": "Uporabljate {0}", "Plugins": "Vti\u010dniki", "Handy Shortcuts": "Uporabne bli\u017enjice", "Horizontal line": "Vodoravna \u010drta", "Insert\/edit image": "Vstavi\/uredi sliko", "Image description": "Opis slike", "Source": "Pot", "Dimensions": "Dimenzije", "Constrain proportions": "Obdr\u017ei razmerje", "General": "Splo\u0161no", "Advanced": "Napredno", "Style": "Slog", "Vertical space": "Navpi\u010dni prostor", "Horizontal space": "Vodoravni prostor", "Border": "Meja", "Insert image": "Vnesi sliko", "Image...": "Slika ...", "Image list": "Seznam slik", "Rotate counterclockwise": "Zavrti v nasprotni smeri urnega kazalca", "Rotate clockwise": "Zavrti v smeri urnega kazalca", "Flip vertically": "Obrni navpi\u010dno", "Flip horizontally": "Obrni vodoravno", "Edit image": "Uredi sliko", "Image options": "Mo\u017enosti slike", "Zoom in": "Pove\u010daj", "Zoom out": "Pomanj\u0161aj", "Crop": "Obre\u017ei", "Resize": "Spremeni velikost", "Orientation": "Usmerjenost", "Brightness": "Svetlost", "Sharpen": "Izostri", "Contrast": "Kontrast", "Color levels": "Barvni nivo", "Gamma": "Gama", "Invert": "Obrni", "Apply": "Uporabi", "Back": "Nazaj", "Insert date\/time": "Vstavi datum\/\u010das", "Date\/time": "Datum\/\u010das", "Insert\/Edit Link": "Vstavi\/uredi povezavo", "Insert\/edit link": "Vstavi\/uredi povezavo", "Text to display": "Besedilo za prikaz", "Url": "Povezava", "Open link in...": "Odpri povezavo v ...", "Current window": "Trenutno okno", "None": "Brez", "New window": "Novo okno", "Remove link": "Odstrani povezavo", "Anchors": "Sidra", "Link...": "Povezava ...", "Paste or type a link": "Prilepite ali vnesite povezavo", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "Vneseni URL predstavlja e-po\u0161tni naslov. Ali \u017eelite dodati potrebno predpono \"mailto:\"?", "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "Vneseni URL predstavlja zunanjo povezavo. Ali \u017eelite dodati predpono \"http:\/\/\"?", "Link list": "Seznam povezav", "Insert video": "Vstavi video", "Insert\/edit video": "Vstavi\/uredi video", "Insert\/edit media": "Vstavi\/uredi medij", "Alternative source": "Nadomestni vir", "Alternative source URL": "Nadomestni vir URL", "Media poster (Image URL)": "Medijski poster (URL slike)", "Paste your embed code below:": "Spodaj prilepite kodo za vdelavo:", "Embed": "Vdelaj", "Media...": "Mediji ...", "Nonbreaking space": "Nedeljivi presledek", "Page break": "Prelom strani", "Paste as text": "Vnesi kot besedilo", "Preview": "Predogled", "Print...": "Natisni ...", "Save": "Shrani", "Find": "Najdi", "Replace with": "Zamenjaj z", "Replace": "Zamenjaj", "Replace all": "Zamenjaj vse", "Previous": "Prej\u0161nja", "Next": "Naslednja", "Find and replace...": "Najdi in zamenjaj ...", "Could not find the specified string.": "Iskanje ni vrnilo rezultatov.", "Match case": "Ujemanje malih in velikih \u010drk", "Find whole words only": "I\u0161\u010di samo cele besede", "Spell check": "\u010crkovanje", "Ignore": "Prezri", "Ignore all": "Prezri vse", "Finish": "Zaklju\u010di", "Add to Dictionary": "Dodaj v slovar", "Insert table": "Vstavi tabelo", "Table properties": "Lastnosti tabele", "Delete table": "Izbri\u0161i tabelo", "Cell": "Celica", "Row": "Vrstica", "Column": "Stolpec", "Cell properties": "Lastnosti celice", "Merge cells": "Zdru\u017ei celice", "Split cell": "Razdeli celico", "Insert row before": "Vstavi vrstico pred", "Insert row after": "Vstavi vrstico za", "Delete row": "Izbri\u0161i vrstico", "Row properties": "Lastnosti vrstice", "Cut row": "Izre\u017ei vrstico", "Copy row": "Kopiraj vrstico", "Paste row before": "Prilepi vrstico pred", "Paste row after": "Prilepi vrstico za", "Insert column before": "Vstavi stolpec pred", "Insert column after": "Vstavi stolpec za", "Delete column": "Izbri\u0161i stolpec", "Cols": "Stolpci", "Rows": "Vrstice", "Width": "\u0160irina", "Height": "Vi\u0161ina", "Cell spacing": "Razmik med celicami", "Cell padding": "Polnilo med celicami", "Show caption": "Poka\u017ei napis", "Left": "Leva", "Center": "Sredinska", "Right": "Desna", "Cell type": "Tip celice", "Scope": "Obseg", "Alignment": "Poravnava", "H Align": "Vodoravna poravnava", "V Align": "Navpi\u010dna poravnava", "Top": "Vrh", "Middle": "Sredina", "Bottom": "Dno", "Header cell": "Celica glave", "Row group": "Grupiranje vrstic", "Column group": "Grupiranje stolpcev", "Row type": "Tip vrstice", "Header": "Header", "Body": "Vsebina", "Footer": "Footer", "Border color": "Barva obrobe", "Insert template...": "Vstavi predlogo ...", "Templates": "Predloge", "Template": "Predloga", "Text color": "Barva besedila", "Background color": "Barva ozadja", "Custom...": "Po meri ...", "Custom color": "Barva po meri", "No color": "Brezbarvno", "Remove color": "Odstrani barvo", "Table of Contents": "Kazalo", "Show blocks": "Prika\u017ei bloke", "Show invisible characters": "Prika\u017ei skrite znake", "Word count": "\u0160tevilo besed", "Count": "\u0160tevilo", "Document": "Dokument", "Selection": "Izbor", "Words": "Besede", "Words: {0}": "Besed: {0}", "{0} words": "{0} besed", "File": "Datoteka", "Edit": "Uredi", "Insert": "Vstavi", "View": "Pogled", "Format": "Oblika", "Table": "Tabela", "Tools": "Orodja", "Powered by {0}": "Uporablja tehnologijo {0}", "Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Bogato besedilo. Pritisnite ALT-F9 za meni. Pritisnite ALT-F10 za orodno vrstico. Pritisnite ALT-0 za pomo\u010d", "Image title": "Naslov slike", "Border width": "\u0160irina obrobe", "Border style": "Slog obrobe", "Error": "Napaka", "Warn": "Opozorilo", "Valid": "Veljavno", "To open the popup, press Shift+Enter": "Za odpiranje pojavnega okna pritisnite Shift + Enter.", "Rich Text Area. Press ALT-0 for help.": "Bogato besedilo. Pritisnite ALT-0 za pomo\u010d.", "System Font": "Sistemska pisava", "Failed to upload image: {0}": "Napaka nalaganja slike: {0}", "Failed to load plugin: {0} from url {1}": "Napaka nalaganja vti\u010dnika: {0} z url {1}", "Failed to load plugin url: {0}": "Napaka nalaganja url: {0}", "Failed to initialize plugin: {0}": "Napaka inicializacije vti\u010dnika: {0}", "example": "primer", "Search": "Iskanje", "All": "Vse", "Currency": "Valuta", "Text": "Besedilo", "Quotations": "Citati", "Mathematical": "Matemati\u010dno", "Extended Latin": "Raz\u0161irjena latinica", "Symbols": "Simboli", "Arrows": "Pu\u0161\u010dice", "User Defined": "Uporabnik dolo\u010den", "dollar sign": "znak za dolar", "currency sign": "znak za valuto", "euro-currency sign": "znak za evro", "colon sign": "znak za dvopi\u010dje", "cruzeiro sign": "znak za cruzeiro", "french franc sign": "znak za francoski frank", "lira sign": "znak za liro", "mill sign": "znak za mill", "naira sign": "znak za nairo", "peseta sign": "znak za peseto", "rupee sign": "znak za rupijo", "won sign": "znak za won", "new sheqel sign": "znak za novi \u0161ekl", "dong sign": "znak za dong", "kip sign": "znak za kip", "tugrik sign": "znak za tugrik", "drachma sign": "znak za drahmo", "german penny symbol": "znak za nem\u0161ki peni", "peso sign": "znak za peso", "guarani sign": "znak za guarani", "austral sign": "znak za austral", "hryvnia sign": "znak za hrivnijo", "cedi sign": "znak za cedi", "livre tournois sign": "znak za livre tournois", "spesmilo sign": "znak za spesmilo", "tenge sign": "znak za tenge", "indian rupee sign": "znak za indijsko rupijo", "turkish lira sign": "znak za tur\u0161ko liro", "nordic mark sign": "znak za nordijsko marko", "manat sign": "znak za manat", "ruble sign": "znak za rubelj", "yen character": "znak za jen", "yuan character": "znak za yuan", "yuan character, in hong kong and taiwan": "znak za yuan, v Hongkongu in na Tajvanu", "yen\/yuan character variant one": "znak za jen\/yuan, prva razli\u010dica", "Loading emoticons...": "Nalaganje \u010dustvenih simbolov ...", "Could not load emoticons": "\u010custvenih simbolov ni mogo\u010de nalo\u017eiti.", "People": "Ljudje", "Animals and Nature": "\u017divali in narava", "Food and Drink": "Hrana in pija\u010da", "Activity": "Dejavnost", "Travel and Places": "Potovanja in kraji", "Objects": "Predmeti", "Flags": "Zastave", "Characters": "Znaki", "Characters (no spaces)": "Znaki (brez presledkov)", "{0} characters": "{0} znakov", "Error: Form submit field collision.": "Napaka: navzkri\u017eje polja za oddajo obrazca", "Error: No form element found.": "Napaka: elementa oblike ni mogo\u010de najti", "Update": "Posodobitev", "Color swatch": "Vzorec barv", "Turquoise": "Turkizna", "Green": "Zelena", "Blue": "Modra", "Purple": "\u0160krlatna", "Navy Blue": "Mornarsko modra", "Dark Turquoise": "Temno turkizna", "Dark Green": "Temno zelena", "Medium Blue": "Srednje modra", "Medium Purple": "Srednje \u0161krlatna", "Midnight Blue": "Polno\u010dno modra", "Yellow": "Rumena", "Orange": "Oran\u017ena", "Red": "Rde\u010da", "Light Gray": "Svetlo siva", "Gray": "Siva", "Dark Yellow": "Temno rumena", "Dark Orange": "Temno oran\u017ena", "Dark Red": "Temno rde\u010da", "Medium Gray": "Srednje siva", "Dark Gray": "Temno siva", "Light Green": "Svetlo zelena", "Light Yellow": "Svetlo rumena", "Light Red": "Svetlo rde\u010da", "Light Purple": "Svetlo vijoli\u010dna", "Light Blue": "Svetlo modra", "Dark Purple": "Temno vijoli\u010dna", "Dark Blue": "Temno modra", "Black": "\u010crna", "White": "Bela", "Switch to or from fullscreen mode": "Preklopi v ali iz celozaslonskega na\u010dina", "Open help dialog": "Odpri pogovorno okno za pomo\u010d", "history": "zgodovina", "styles": "slogi", "formatting": "oblikovanje", "alignment": "poravnava", "indentation": "zamik", "permanent pen": "permanentno pisalo", "comments": "komentarji", "Format Painter": "Preslikovalnik Oblik", "Insert\/edit iframe": "Vstavi\/uredi iFrame", "Capitalization": "Velika za\u010detnica", "lowercase": "male \u010drke", "UPPERCASE": "VELIKE \u010cRKE", "Title Case": "Velike za\u010detnice naslovov", "Permanent Pen Properties": "Lastnosti permanentnega pisala", "Permanent pen properties...": "Lastnosti permanentnega pisala ...", "Font": "Pisava", "Size": "Velikost", "More...": "Ve\u010d ...", "Spellcheck Language": "Jezik \u010drkovalnika", "Select...": "Izberi ...", "Preferences": "Preference", "Yes": "Da", "No": "Ne", "Keyboard Navigation": "Krmarjenje s tipkovnico", "Version": "Razli\u010dica" }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/tinymce/langs/sl_SI.js ================================================ tinymce.addI18n('sl_SI',{ "Redo": "Ponovno uveljavi", "Undo": "Razveljavi", "Cut": "Izre\u017ei", "Copy": "Kopiraj", "Paste": "Prilepi", "Select all": "Izberi vse", "New document": "Nov dokument", "Ok": "V redu", "Cancel": "Prekli\u010di", "Visual aids": "Vizualni pripomo\u010dki", "Bold": "Krepko", "Italic": "Po\u0161evno", "Underline": "Pod\u010drtano", "Strikethrough": "Pre\u010drtano", "Superscript": "Nadpisano", "Subscript": "Podpisano", "Clear formatting": "Odstrani oblikovanje", "Align left": "Leva poravnava", "Align center": "Sredinska poravnava", "Align right": "Desna poravnava", "Justify": "Obojestranska poravnava", "Bullet list": "Ozna\u010den seznam", "Numbered list": "O\u0161tevil\u010den seznam", "Decrease indent": "Zmanj\u0161aj zamik", "Increase indent": "Pove\u010daj zamik", "Close": "Zapri", "Formats": "Oblika", "Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Varnostne nastavitve brskalnika ne dopu\u0161\u010dajo direktnega dostopa do odlo\u017ei\u0161\u010da. Uporabite kombinacijo tipk Ctrl + X\/C\/V na tipkovnici.", "Headers": "Naslovi", "Header 1": "Naslov 1", "Header 2": "Naslov 2", "Header 3": "Naslov 3", "Header 4": "Naslov 4", "Header 5": "Naslov 5", "Header 6": "Naslov 6", "Headings": "Naslovi", "Heading 1": "Naslov 1", "Heading 2": "Naslov 2", "Heading 3": "Naslov 3", "Heading 4": "Naslov 4", "Heading 5": "Naslov 5", "Heading 6": "Naslov 6", "Preformatted": "Predformatirano", "Div": "Div", "Pre": "Pre", "Code": "Koda", "Paragraph": "Odstavek", "Blockquote": "Blockquote", "Inline": "Med besedilom", "Blocks": "Bloki", "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Odlagali\u0161\u010de je zdaj v tekstovnem na\u010dinu. Vsebina bo preslikana kot golo besedilo brez oblike, dokler te mo\u017enosti ne izklju\u010dite.", "Fonts": "Pisave", "Font Sizes": "Velikosti pisave", "Class": "Razred", "Browse for an image": "Prebrskaj za sliko", "OR": "ALI", "Drop an image here": "Spusti sliko sem", "Upload": "Nalo\u017ei", "Block": "Blok", "Align": "Poravnava", "Default": "Privzeto", "Circle": "Pikica", "Disc": "Kroglica", "Square": "Kvadratek", "Lower Alpha": "Male tiskane \u010drke", "Lower Greek": "Male gr\u0161ke \u010drke", "Lower Roman": "Male rimske \u0161tevilke", "Upper Alpha": "Velike tiskane \u010drke", "Upper Roman": "Velike rimske \u0161tevilke", "Anchor...": "Sidro ...", "Name": "Naziv zaznamka", "Id": "Id", "Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Id se mora za\u010deti s \u010drko, sledijo samo \u010drke, \u0161tevilke, pomi\u0161ljaj, pike, dvopi\u010dje ali pod\u010drtaj.", "You have unsaved changes are you sure you want to navigate away?": "Imate neshranjene spremembe. Ste prepri\u010dati, da \u017eelite zapustiti stran?", "Restore last draft": "Obnovi zadnji osnutek", "Special characters...": "Posebni znaki ...", "Source code": "Izvorna koda", "Insert\/Edit code sample": "Vstavi\/Uredi vzor\u010dno kodo", "Language": "Jezik", "Code sample...": "Vzor\u010dna koda ...", "Color Picker": "Izbirnik barve", "R": "R", "G": "G", "B": "B", "Left to right": "Od leve proti desni", "Right to left": "Od desne proti levi", "Emoticons...": "\u010custveni simboli ...", "Metadata and Document Properties": "Metapodatki in lastnosti dokumenta", "Title": "Naslov", "Keywords": "Klju\u010dne besede", "Description": "Opis", "Robots": "Robotki", "Author": "Avtor", "Encoding": "Kodiranje", "Fullscreen": "\u010cez cel zaslon", "Action": "Dejanje", "Shortcut": "Bli\u017enjica", "Help": "Pomo\u010d", "Address": "Naslov", "Focus to menubar": "Poudarek na menijski vrstici", "Focus to toolbar": "Poudarek na orodni vrstici", "Focus to element path": "Poudarek na poti elementa", "Focus to contextual toolbar": "Poudarek na kontekstualni orodni vrstici", "Insert link (if link plugin activated)": "Vstavi povezavo (\u010de je aktiviran vti\u010dnik za povezavo)", "Save (if save plugin activated)": "Shrani (\u010de je aktiviran vti\u010dnik za shranjevanje)", "Find (if searchreplace plugin activated)": "I\u0161\u010di (\u010de je aktiviran vti\u010dnik za iskanje\/zamenjavo)", "Plugins installed ({0}):": "Name\u0161\u010deni vti\u010dniki ({0}):", "Premium plugins:": "Premium vti\u010dniki:", "Learn more...": "Ve\u010d ...", "You are using {0}": "Uporabljate {0}", "Plugins": "Vti\u010dniki", "Handy Shortcuts": "Uporabne bli\u017enjice", "Horizontal line": "Vodoravna \u010drta", "Insert\/edit image": "Vstavi\/uredi sliko", "Image description": "Opis slike", "Source": "Pot", "Dimensions": "Dimenzije", "Constrain proportions": "Obdr\u017ei razmerje", "General": "Splo\u0161no", "Advanced": "Napredno", "Style": "Slog", "Vertical space": "Navpi\u010dni prostor", "Horizontal space": "Vodoravni prostor", "Border": "Obroba", "Insert image": "Vnesi sliko", "Image...": "Slika ...", "Image list": "Seznam slik", "Rotate counterclockwise": "Zavrti v nasprotni smeri urnega kazalca", "Rotate clockwise": "Zavrti v smeri urinega kazalca", "Flip vertically": "Obrni navpi\u010dno", "Flip horizontally": "Obrni vodoravno", "Edit image": "Uredi sliko", "Image options": "Mo\u017enosti slike", "Zoom in": "Pove\u010daj", "Zoom out": "Pomanj\u0161aj", "Crop": "Obre\u017ei", "Resize": "Spremeni velikost", "Orientation": "Usmerjenost", "Brightness": "Svetlost", "Sharpen": "Izostri", "Contrast": "Kontrast", "Color levels": "Barvni nivo", "Gamma": "Gama", "Invert": "Obrni", "Apply": "Uporabi", "Back": "Nazaj", "Insert date\/time": "Vstavi datum\/\u010das", "Date\/time": "Datum\/\u010das", "Insert\/Edit Link": "Vstavi\/uredi povezavo", "Insert\/edit link": "Vstavi\/uredi povezavo", "Text to display": "Prikazno besedilo", "Url": "Povezava", "Open link in...": "Odpri povezavo v ...", "Current window": "Trenutno okno", "None": "Brez", "New window": "Novo okno", "Remove link": "Odstrani povezavo", "Anchors": "Sidra", "Link...": "Povezava ...", "Paste or type a link": "Prilepite ali vnesite povezavo", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "Vne\u0161eni URL predstavlja e-po\u0161tni naslov. Ali \u017eelite dodati potrebno \"mailto:\" predpono?", "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "Vne\u0161eni URL predstavlja zunanjo povezavo. Ali \u017eelite dodati \"http:\/\/\" predpono?", "Link list": "Seznam povezav", "Insert video": "Vstavi video", "Insert\/edit video": "Vstavi\/uredi video", "Insert\/edit media": "Vstavi\/uredi medij", "Alternative source": "Nadomestni vir", "Alternative source URL": "Nadomestni vir URL", "Media poster (Image URL)": "Medijski poster (URL slike)", "Paste your embed code below:": "Prilepite kodo za vdelavo:", "Embed": "Vdelaj", "Media...": "Mediji ...", "Nonbreaking space": "Nedeljivi presledek", "Page break": "Prelom strani", "Paste as text": "Vnesi kot besedilo", "Preview": "Predogled", "Print...": "Natisni ...", "Save": "Shrani", "Find": "I\u0161\u010di", "Replace with": "Zamenjaj z", "Replace": "Zamenjaj", "Replace all": "Zamenjaj vse", "Previous": "Prej\u0161nja", "Next": "Naprej", "Find and replace...": "Najdi in zamenjaj ...", "Could not find the specified string.": "Iskanje ni vrnilo rezultatov.", "Match case": "Ujemanje malih in velikih \u010drk", "Find whole words only": "I\u0161\u010di samo cele besede", "Spell check": "\u010crkovanje", "Ignore": "Prezri", "Ignore all": "Prezri vse", "Finish": "Zaklju\u010di", "Add to Dictionary": "Dodaj v slovar", "Insert table": "Vstavi tabelo", "Table properties": "Lastnosti tabele", "Delete table": "Izbri\u0161i tabelo", "Cell": "Celica", "Row": "Vrstica", "Column": "Stolpec", "Cell properties": "Lastnosti celice", "Merge cells": "Zdru\u017ei celice", "Split cell": "Razdeli celico", "Insert row before": "Vstavi vrstico pred", "Insert row after": "Vstavi vrstico za", "Delete row": "Izbri\u0161i vrstico", "Row properties": "Lastnosti vrstice", "Cut row": "Izre\u017ei vrstico", "Copy row": "Kopiraj vrstico", "Paste row before": "Prilepi vrstico pred", "Paste row after": "Prilepi vrstico za", "Insert column before": "Vstavi stolpec pred", "Insert column after": "Vstavi stolpec za", "Delete column": "Izbri\u0161i stolpec", "Cols": "Stolpci", "Rows": "Vrstice", "Width": "\u0160irina", "Height": "Vi\u0161ina", "Cell spacing": "Razmik med celicami", "Cell padding": "Polnilo med celicami", "Show caption": "Poka\u017ei napis", "Left": "Levo", "Center": "Sredinsko", "Right": "Desno", "Cell type": "Tip celice", "Scope": "Obseg", "Alignment": "Poravnava", "H Align": "Horizontalna poravnava", "V Align": "Vertikalna poravnava", "Top": "Vrh", "Middle": "Sredina", "Bottom": "Dno", "Header cell": "Celica glave", "Row group": "Grupiranje vrstic", "Column group": "Grupiranje stolpcev", "Row type": "Tip vrstice", "Header": "Glava", "Body": "Vsebina", "Footer": "Noga", "Border color": "Barva obrobe", "Insert template...": "Vstavi predlogo ...", "Templates": "Predloge", "Template": "Predloga", "Text color": "Barva besedila", "Background color": "Barva ozadja", "Custom...": "Po meri ...", "Custom color": "Barva po meri", "No color": "Brezbarvno", "Remove color": "Odstrani barvo", "Table of Contents": "Kazalo", "Show blocks": "Prika\u017ei bloke", "Show invisible characters": "Prika\u017ei skrite znake", "Word count": "\u0160tevilo besed", "Words: {0}": "Besed: {0}", "{0} words": "{0} besed", "File": "Datoteka", "Edit": "Uredi", "Insert": "Vstavi", "View": "Pogled", "Format": "Oblika", "Table": "Tabela", "Tools": "Orodja", "Powered by {0}": "Uporablja tehnologijo {0}", "Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Bogato besedilo. Pritisnite ALT-F9 za meni. Pritisnite ALT-F10 za orodno vrstico. Pritisnite ALT-0 za pomo\u010d", "Image title": "Naslov slike", "Border width": "\u0160irina obrobe", "Border style": "Slog obrobe", "Error": "Napaka", "Warn": "Opozorilo", "Valid": "Veljavno", "To open the popup, press Shift+Enter": "Za odpiranje pojavnega okna pritisnite Shift + Enter.", "Rich Text Area. Press ALT-0 for help.": "Bogato besedilo. Pritisnite ALT-0 za pomo\u010d.", "System Font": "Sistemska pisava", "Failed to upload image: {0}": "Napaka nalaganja slike: {0}", "Failed to load plugin: {0} from url {1}": "Napaka nalaganja vti\u010dnika: {0} z url {1}", "Failed to load plugin url: {0}": "Napaka nalaganja url: {0}", "Failed to initialize plugin: {0}": "Napaka inicializacije vti\u010dnika: {0}", "example": "primer", "Search": "Iskanje", "All": "Vse", "Currency": "Valuta", "Text": "Besedilo", "Quotations": "Citati", "Mathematical": "Matemati\u010dno", "Extended Latin": "Raz\u0161irjena latinica", "Symbols": "Simboli", "Arrows": "Pu\u0161\u010dice", "User Defined": "Uporabnik dolo\u010den", "dollar sign": "znak za dolar", "currency sign": "znak za valuto", "euro-currency sign": "znak za evro", "colon sign": "znak za dvopi\u010dje", "cruzeiro sign": "znak za cruzeiro", "french franc sign": "znak za francoski frank", "lira sign": "znak za liro", "mill sign": "znak za mill", "naira sign": "znak za nairo", "peseta sign": "znak za peseto", "rupee sign": "znak za rupijo", "won sign": "znak za won", "new sheqel sign": "znak za novi \u0161ekl", "dong sign": "znak za dong", "kip sign": "znak za kip", "tugrik sign": "znak za tugrik", "drachma sign": "znak za drahmo", "german penny symbol": "znak za nem\u0161ki peni", "peso sign": "znak za peso", "guarani sign": "znak za guarani", "austral sign": "znak za austral", "hryvnia sign": "znak za hrivnijo", "cedi sign": "znak za cedi", "livre tournois sign": "znak za livre tournois", "spesmilo sign": "znak za spesmilo", "tenge sign": "znak za tenge", "indian rupee sign": "znak za indijsko rupijo", "turkish lira sign": "znak za tur\u0161ko liro", "nordic mark sign": "znak za nordijsko marko", "manat sign": "znak za manat", "ruble sign": "znak za rubelj", "yen character": "znak za jen", "yuan character": "znak za yuan", "yuan character, in hong kong and taiwan": "znak za yuan, v Hongkongu in na Tajvanu", "yen\/yuan character variant one": "znak za jen\/yuan, prva razli\u010dica", "Loading emoticons...": "Nalaganje \u010dustvenih simbolov ...", "Could not load emoticons": "\u010custvenih simbolov ni mogo\u010de nalo\u017eiti.", "People": "Ljudje", "Animals and Nature": "\u017divali in narava", "Food and Drink": "Hrana in pija\u010da", "Activity": "Dejavnost", "Travel and Places": "Potovanja in kraji", "Objects": "Predmeti", "Flags": "Zastave", "Characters": "Znaki", "Characters (no spaces)": "Znaki (brez presledkov)", "Error: Form submit field collision.": "Napaka: navzkri\u017eje polja za oddajo obrazca", "Error: No form element found.": "Napaka: elementa oblike ni mogo\u010de najti", "Update": "Posodobitev", "Color swatch": "Vzorec barv", "Turquoise": "Turkizna", "Green": "Zelena", "Blue": "Modra", "Purple": "\u0160krlatna", "Navy Blue": "Mornarsko modra", "Dark Turquoise": "Temno turkizna", "Dark Green": "Temno zelena", "Medium Blue": "Srednje modra", "Medium Purple": "Srednje \u0161krlatna", "Midnight Blue": "Polno\u010dno modra", "Yellow": "Rumena", "Orange": "Oran\u017ena", "Red": "Rde\u010da", "Light Gray": "Svetlo siva", "Gray": "Siva", "Dark Yellow": "Temno rumena", "Dark Orange": "Temno oran\u017ena", "Dark Red": "Temno rde\u010da", "Medium Gray": "Srednje siva", "Dark Gray": "Temno siva", "Black": "\u010crna", "White": "Bela", "Switch to or from fullscreen mode": "Preklopi v ali iz celozaslonskega na\u010dina", "Open help dialog": "Odpri pogovorno okno za pomo\u010d", "history": "zgodovina", "styles": "slogi", "formatting": "oblikovanje", "alignment": "poravnava", "indentation": "zamik", "permanent pen": "permanentno pisalo", "comments": "komentarji", "Anchor": "Zaznamek", "Special character": "Posebni znaki", "Color": "Barva", "Emoticons": "Sme\u0161ki", "Document properties": "Lastnosti dokumenta", "Image": "Slika", "Insert link": "Vstavi povezavo", "Link": "Povezava", "Target": "Cilj", "Media": "Medij", "Poster": "Poster", "Print": "Natisni", "Whole words": "Cele besede", "Find and replace": "Poi\u0161\u010di in zamenjaj", "Prev": "Nazaj", "Spellcheck": "Preverjanje \u010drkovanja", "Caption": "Naslov", "Insert template": "Vstavi predlogo" }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/tinymce/langs/sv_SE.js ================================================ tinymce.addI18n('sv_SE',{ "Redo": "G\u00f6r om", "Undo": "\u00c5ngra", "Cut": "Klipp ut", "Copy": "Kopiera", "Paste": "Klistra in", "Select all": "Markera allt", "New document": "Nytt dokument", "Ok": "Ok", "Cancel": "Avbryt", "Visual aids": "Visuella hj\u00e4lpmedel", "Bold": "Fet", "Italic": "Kursiv", "Underline": "Understruken", "Strikethrough": "Genomstruken", "Superscript": "Upph\u00f6jd", "Subscript": "Neds\u00e4nkt", "Clear formatting": "Rensa formatering", "Align left": "V\u00e4nsterjustera", "Align center": "Centrera", "Align right": "H\u00f6gerjustera", "Justify": "Verifiera", "Bullet list": "Punktlista", "Numbered list": "Nummerlista", "Decrease indent": "Minska indrag", "Increase indent": "\u00d6ka indrag", "Close": "St\u00e4ng", "Formats": "Format", "Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Din webbl\u00e4sare st\u00f6djer inte direkt \u00e5tkomst till klippboken. Anv\u00e4nd kortkommandona Ctrl\u00a0+\u00a0X\/C\/V i st\u00e4llet.", "Headers": "Rubriker", "Header 1": "Rubrik 1", "Header 2": "Rubrik 2", "Header 3": "Rubrik 3", "Header 4": "Rubrik 4", "Header 5": "Rubrik 5", "Header 6": "Rubrik 6", "Headings": "Rubriker", "Heading 1": "Rubrik 1", "Heading 2": "Rubrik 2", "Heading 3": "Rubrik 3", "Heading 4": "Rubrik 4", "Heading 5": "Rubrik 5", "Heading 6": "Rubrik 6", "Preformatted": "F\u00f6rformaterad", "Div": "Div", "Pre": "Pre", "Code": "Kod", "Paragraph": "Avsnitt", "Blockquote": "Blockquote", "Inline": "Inline", "Blocks": "Block", "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Klistra in \u00e4r nu i textl\u00e4ge. Inneh\u00e5ll kommer att konverteras till text tills du sl\u00e5r av detta l\u00e4ge.", "Fonts": "Typsnitt", "Font Sizes": "Teckenstorlek", "Class": "Klass", "Browse for an image": "Bl\u00e4ddra efter en bild", "OR": "OR", "Drop an image here": "Sl\u00e4pp en bild h\u00e4r", "Upload": "Ladda upp", "Block": "Block", "Align": "Justera", "Default": "Original", "Circle": "Cirkel", "Disc": "Disk", "Square": "Fyrkant", "Lower Alpha": "Gemener", "Lower Greek": "Grekiska gemener", "Lower Roman": "Romerska gemener", "Upper Alpha": "Versaler", "Upper Roman": "Romerska versaler", "Anchor...": "Ankare...", "Name": "Namn", "Id": "Id", "Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Id skall b\u00f6rja med en bokstav och f\u00f6ljande tecken ska vara bokst\u00e4ver, nummer, punkter, understr\u00e4ck eller kolon.", "You have unsaved changes are you sure you want to navigate away?": "Du har f\u00f6r\u00e4ndringar som du inte har sparat. \u00c4r du s\u00e4ker p\u00e5 att du vill navigera vidare?", "Restore last draft": "\u00c5terst\u00e4ll senaste utkast", "Special character...": "Specialtecken...", "Source code": "K\u00e4llkod", "Insert\/Edit code sample": "Infoga\/Redigera k\u00e5d exempel", "Language": "Spr\u00e5k", "Code sample...": "Kodexempel...", "Color Picker": "F\u00e4rgv\u00e4ljare", "R": "R", "G": "G", "B": "B", "Left to right": "V\u00e4nster till h\u00f6ger", "Right to left": "H\u00f6ger till v\u00e4nster", "Emoticons...": "Emoticons...", "Metadata and Document Properties": "Metadata och dokumentegenskaper", "Title": "Titel", "Keywords": "Nyckelord", "Description": "Beskrivning", "Robots": "Robotar", "Author": "F\u00f6rfattare", "Encoding": "Encoding", "Fullscreen": "Fullsk\u00e4rm", "Action": "H\u00e4ndelse", "Shortcut": "Kortkommando", "Help": "Hj\u00e4lp", "Address": "Adress", "Focus to menubar": "Fokusera p\u00e5 menyrad", "Focus to toolbar": "Fokusera p\u00e5 verktygsrad", "Focus to element path": "Fokusera p\u00e5 elements\u00f6kv\u00e4gsrad", "Focus to contextual toolbar": "Fokusera p\u00e5 den kontextuella verktygsraden", "Insert link (if link plugin activated)": "Infoga l\u00e4nk (om link-pluginet \u00e4r aktiverat)", "Save (if save plugin activated)": "Spara (om save-pluginet \u00e4r aktiverat)", "Find (if searchreplace plugin activated)": "S\u00f6k (om searchreplace-pluginet \u00e4r aktiverat)", "Plugins installed ({0}):": "Installerade plugins ({0}):", "Premium plugins:": "Premiumplugins:", "Learn more...": "L\u00e4s mer...", "You are using {0}": "Du anv\u00e4nder {0}", "Plugins": "Plugins", "Handy Shortcuts": "Kortkommandon", "Horizontal line": "Horisontell linje", "Insert\/edit image": "Infoga\/redigera bild", "Image description": "Bildbeskrivning", "Source": "K\u00e4lla", "Dimensions": "Dimensioner", "Constrain proportions": "Begr\u00e4nsa proportioner", "General": "Generella", "Advanced": "Avancerat", "Style": "Stil", "Vertical space": "Vertikaltutrymme", "Horizontal space": "Horisontellt utrymme", "Border": "Ram", "Insert image": "Infoga bild", "Image...": "Bild...", "Image list": "Bildlista", "Rotate counterclockwise": "Rotera moturs", "Rotate clockwise": "Rotera medurs", "Flip vertically": "Spegelv\u00e4nd vertikalt", "Flip horizontally": "Spegelv\u00e4nd horisontellt", "Edit image": "Redigera bild", "Image options": "Bild inst\u00e4llningar", "Zoom in": "Zooma in", "Zoom out": "Zooma ut", "Crop": "Besk\u00e4r", "Resize": "Skala om", "Orientation": "Orientera", "Brightness": "Ljusstyrka", "Sharpen": "Sk\u00e4rpa", "Contrast": "Kontrast", "Color levels": "F\u00e4rgniv\u00e5er", "Gamma": "Gamma", "Invert": "Invertera", "Apply": "Applicera", "Back": "Tillbaka", "Insert date\/time": "Infoga datum\/tid", "Date\/time": "Datum\/tid", "Insert\/Edit Link": "Infoga\/redigera l\u00e4nk", "Insert\/edit link": "Infoga\/redigera l\u00e4nk", "Text to display": "Text att visa", "Url": "Url", "Open link in...": "\u00d6ppna l\u00e4nk i...", "Current window": "Nuvarande f\u00f6nster", "None": "Ingen", "New window": "Nytt f\u00f6nster", "Remove link": "Ta bort l\u00e4nk", "Anchors": "Bokm\u00e4rken", "Link...": "L\u00e4nk...", "Paste or type a link": "Klistra in eller skriv en l\u00e4nk", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "Urlen du angav verkar vara en epost adress. Vill du l\u00e4gga till ett mailto: prefix?", "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "Urlen du angav verkar vara en extern l\u00e4nk. Vill du l\u00e4gga till http:\/\/ prefixet?", "Link list": "L\u00e4nklista", "Insert video": "Infoga video", "Insert\/edit video": "Infoga\/redigera video", "Insert\/edit media": "Infoga\/redigera media", "Alternative source": "Alternativ k\u00e4lla", "Alternative source URL": "Alternativ k\u00e4llwebbadress", "Media poster (Image URL)": "Mediaposter (bildwebbadress)", "Paste your embed code below:": "Klistra in din inb\u00e4ddningskod nedan:", "Embed": "Inb\u00e4ddning", "Media...": "Media...", "Nonbreaking space": "Avbrottsfritt mellanrum", "Page break": "Sidbrytning", "Paste as text": "Klistra in som text", "Preview": "F\u00f6rhandsgranska", "Print...": "Skriv ut...", "Save": "Spara", "Find": "S\u00f6k", "Replace with": "Ers\u00e4tt med", "Replace": "Ers\u00e4tt", "Replace all": "Ers\u00e4tt alla", "Previous": "F\u00f6reg\u00e5ende", "Next": "N\u00e4sta", "Find and replace...": "S\u00f6k och ers\u00e4tt...", "Could not find the specified string.": "Kunde inte hitta den specifierade st\u00e4ngen.", "Match case": "Matcha gemener\/versaler", "Find whole words only": "Hitta endast hela ord", "Spell check": "Stavningskontroll", "Ignore": "Ignorera", "Ignore all": "Ignorera alla", "Finish": "Avsluta", "Add to Dictionary": "L\u00e4gg till i ordlista", "Insert table": "Infoga tabell", "Table properties": "Tabellegenskaper", "Delete table": "Radera tabell", "Cell": "Cell", "Row": "Rad", "Column": "Kolumn", "Cell properties": "Cellegenskaper", "Merge cells": "Sammanfoga celler", "Split cell": "Bryt is\u00e4r celler", "Insert row before": "Infoga rad f\u00f6re", "Insert row after": "Infoga rad efter", "Delete row": "Radera rad", "Row properties": "Radegenskaper", "Cut row": "Klipp ut rad", "Copy row": "Kopiera rad", "Paste row before": "Klista in rad f\u00f6re", "Paste row after": "Klistra in rad efter", "Insert column before": "Infoga kolumn f\u00f6re", "Insert column after": "Infoga kolumn efter", "Delete column": "Radera kolumn", "Cols": "Kolumner", "Rows": "Rader", "Width": "Bredd", "Height": "H\u00f6jd", "Cell spacing": "Cellmellanrum", "Cell padding": "Cellpaddning", "Show caption": "Visa bildtext", "Left": "V\u00e4nster", "Center": "Centrum", "Right": "H\u00f6ger", "Cell type": "Celltyp", "Scope": "Omf\u00e5ng", "Alignment": "Justering", "H Align": "H-justering", "V Align": "V-justering", "Top": "Toppen", "Middle": "Mitten", "Bottom": "Botten", "Header cell": "Huvudcell", "Row group": "Radgrupp", "Column group": "Kolumngrupp", "Row type": "Radtyp", "Header": "Huvud", "Body": "Kropp", "Footer": "Fot", "Border color": "Ramf\u00e4rg", "Insert template...": "Infoga mall...", "Templates": "Mallar", "Template": "Mall", "Text color": "Textf\u00e4rg", "Background color": "Bakgrundsf\u00e4rg", "Custom...": "Anpassad...", "Custom color": "Anpassad f\u00e4rg", "No color": "Ingen f\u00e4rg", "Remove color": "Ta bort f\u00e4rg", "Table of Contents": "Inneh\u00e5llsf\u00f6rteckning", "Show blocks": "Visa block", "Show invisible characters": "Visa onsynliga tecken", "Word count": "Ordantal", "Count": "Antal", "Document": "Dokument", "Selection": "Val", "Words": "Ord", "Words: {0}": "Ord: {0}", "{0} words": "{0} ord", "File": "Fil", "Edit": "Redigera", "Insert": "Infoga", "View": "Visa", "Format": "Format", "Table": "Tabell", "Tools": "Verktyg", "Powered by {0}": "Powered by {0}", "Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Textredigerare. Tryck ALT-F9 f\u00f6r menyn. Tryck ALT-F10 f\u00f6r verktygsrader. Tryck ALT-0 f\u00f6r hj\u00e4lp.", "Image title": "Bildtitel", "Border width": "Kantlinjebredd", "Border style": "Kantlinjestil", "Error": "Fel", "Warn": "Varning", "Valid": "Giltig", "To open the popup, press Shift+Enter": "Tryck p\u00e5 Shift\u00a0+\u00a0Enter f\u00f6r att \u00f6ppna popup-f\u00f6nstret", "Rich Text Area. Press ALT-0 for help.": "Omr\u00e5de med formaterad text. Tryck p\u00e5 ALT-0 f\u00f6r hj\u00e4lp.", "System Font": "Systemtypsnitt", "Failed to upload image: {0}": "Kunde inte ladda upp bild: {0}", "Failed to load plugin: {0} from url {1}": "Kunde inte l\u00e4sa in insticksprogram: {0} fr\u00e5n webbadress {1}", "Failed to load plugin url: {0}": "Kunde inte l\u00e4sa in webbadress f\u00f6r insticksprogram: {0}", "Failed to initialize plugin: {0}": "Kunde inte initiera insticksprogram: {0}", "example": "exempel", "Search": "S\u00f6k", "All": "Alla", "Currency": "Valuta", "Text": "Text", "Quotations": "Citattecken", "Mathematical": "Matematiskt", "Extended Latin": "Ut\u00f6kad latin", "Symbols": "Symboler", "Arrows": "Pilar", "User Defined": "Anv\u00e4ndardefinierade", "dollar sign": "dollartecken", "currency sign": "valutatecken", "euro-currency sign": "eurotecken", "colon sign": "kolon", "cruzeiro sign": "cruzeirotecken", "french franc sign": "franctecken", "lira sign": "liratecken", "mill sign": "milltecken", "naira sign": "nairatecken", "peseta sign": "pesetastecken", "rupee sign": "rupeetecken", "won sign": "wontecken", "new sheqel sign": "schekeltecken", "dong sign": "dongtecken", "kip sign": "kiptecken", "tugrik sign": "tugriktecken", "drachma sign": "drachmertecken", "german penny symbol": "tecken f\u00f6r tysk penny", "peso sign": "pesotecken", "guarani sign": "guaranitecken", "austral sign": "australtecken", "hryvnia sign": "hryvniatecken", "cedi sign": "ceditecken", "livre tournois sign": "tecken f\u00f6r livre tournois", "spesmilo sign": "spesmilotecken", "tenge sign": "tengetecken", "indian rupee sign": "tecken f\u00f6r indisk rupee", "turkish lira sign": "tecken f\u00f6r turkisk lira", "nordic mark sign": "tecken f\u00f6r nordisk mark", "manat sign": "manattecken", "ruble sign": "rubeltecken", "yen character": "yentecken", "yuan character": "yuantecken", "yuan character, in hong kong and taiwan": "yuantecken i Hongkong och Taiwan", "yen\/yuan character variant one": "yen-\/yuantecken variant ett", "Loading emoticons...": "L\u00e4ser in emoticons...", "Could not load emoticons": "Kunde inte l\u00e4sa in emoticons", "People": "M\u00e4nniskor", "Animals and Nature": "Djur och natur", "Food and Drink": "Mat och dryck", "Activity": "Aktivitet", "Travel and Places": "Resa och platser", "Objects": "F\u00f6rem\u00e5l", "Flags": "Flaggor", "Characters": "Tecken", "Characters (no spaces)": "Tecken (inga mellanrum)", "{0} characters": "{0} tecken", "Error: Form submit field collision.": "Fel: Kollision f\u00e4lt f\u00f6r s\u00e4ndning av formul\u00e4r.", "Error: No form element found.": "Fel: Inget formul\u00e4relement hittades.", "Update": "Uppdatera", "Color swatch": "F\u00e4rgpalett", "Turquoise": "Turkos", "Green": "Gr\u00f6n", "Blue": "Bl\u00e5", "Purple": "Lila", "Navy Blue": "M\u00f6rkbl\u00e5", "Dark Turquoise": "M\u00f6rkturkos", "Dark Green": "M\u00f6rkgr\u00f6n", "Medium Blue": "Mellanbl\u00e5", "Medium Purple": "Mellanlila", "Midnight Blue": "Midnattsbl\u00e5", "Yellow": "Gul", "Orange": "Orange", "Red": "R\u00f6d", "Light Gray": "Ljusgr\u00e5", "Gray": "Gr\u00e5", "Dark Yellow": "M\u00f6rkgul", "Dark Orange": "M\u00f6rkorange", "Dark Red": "M\u00f6rkr\u00f6d", "Medium Gray": "Mellangr\u00e5", "Dark Gray": "M\u00f6rkgr\u00e5", "Light Green": "Ljusgr\u00f6n", "Light Yellow": "Ljusgul", "Light Red": "Ljusr\u00f6d", "Light Purple": "Ljuslila", "Light Blue": "Ljusbl\u00e5", "Dark Purple": "M\u00f6rklila", "Dark Blue": "M\u00f6rkbl\u00e5", "Black": "Svart", "White": "Vit", "Switch to or from fullscreen mode": "V\u00e4xla till eller fr\u00e5n fullsk\u00e4rmsl\u00e4ge", "Open help dialog": "\u00d6ppna hj\u00e4lpdialogrutan", "history": "historik", "styles": "stilar", "formatting": "formatering", "alignment": "justering", "indentation": "indragning", "permanent pen": "permanent penna", "comments": "kommentarer", "Format Painter": "H\u00e4mta format", "Insert\/edit iframe": "Infoga\/redigera iframe", "Capitalization": "Versaler", "lowercase": "gemener", "UPPERCASE": "VERSALER", "Title Case": "Inledande versal", "Permanent Pen Properties": "Permanenta pennegenskaper", "Permanent pen properties...": "Permanenta pennegenskaper\u00a0\u2026", "Font": "Teckensnitt", "Size": "Storlek", "More...": "Mer...", "Spellcheck Language": "Spr\u00e5k f\u00f6r stavningskontroll", "Select...": "V\u00e4lj...", "Preferences": "Inst\u00e4llningar", "Yes": "Ja", "No": "Nej", "Keyboard Navigation": "Tangentbordsnavigering", "Version": "Version", "Anchor": "Ankare", "Special character": "Specialtecken", "Code sample": "K\u00e5dexempel", "Color": "F\u00e4rg", "Emoticons": "Emoticons", "Document properties": "Dokumentegenskaper", "Image": "Bild", "Insert link": "Infoga l\u00e4nk", "Target": "M\u00e5l", "Link": "L\u00e4nk", "Poster": "Affish", "Media": "Media", "Print": "Skriv ut", "Prev": "F\u00f6reg\u00e5ende", "Find and replace": "S\u00f6k och ers\u00e4tt", "Whole words": "Hela ord", "Spellcheck": "R\u00e4ttstava", "Caption": "Rubrik", "Insert template": "Infoga mall" }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/tinymce/langs/ta.js ================================================ tinymce.addI18n('ta',{ "Redo": "\u0bae\u0bc0\u0ba3\u0bcd\u0b9f\u0bc1\u0bae\u0bcd \u0b9a\u0bc6\u0baf\u0bcd\u0b95", "Undo": "\u0b9a\u0bc6\u0baf\u0bb2\u0bcd\u0ba4\u0bb5\u0bbf\u0bb0\u0bcd\u0b95\u0bcd\u0b95", "Cut": "\u0bb5\u0bc6\u0b9f\u0bcd\u0b9f\u0bc1\u0b95", "Copy": "\u0ba8\u0b95\u0bb2\u0bc6\u0b9f\u0bc1\u0b95\u0bcd\u0b95", "Paste": "\u0b92\u0b9f\u0bcd\u0b9f\u0bc1\u0b95", "Select all": "\u0b85\u0ba9\u0bc8\u0ba4\u0bcd\u0ba4\u0bc8\u0baf\u0bc1\u0bae\u0bcd \u0ba4\u0bc7\u0bb0\u0bcd\u0bb5\u0bc1 \u0b9a\u0bc6\u0baf\u0bcd\u0b95", "New document": "\u0baa\u0bc1\u0ba4\u0bbf\u0baf \u0b86\u0bb5\u0ba3\u0bae\u0bcd", "Ok": "\u0b9a\u0bb0\u0bbf", "Cancel": "\u0bb0\u0ba4\u0bcd\u0ba4\u0bc1 \u0b9a\u0bc6\u0baf\u0bcd\u0b95", "Visual aids": "\u0b95\u0bbe\u0b9f\u0bcd\u0b9a\u0bbf\u0ba4\u0bcd \u0ba4\u0bc1\u0ba3\u0bc8\u0baf\u0ba9\u0bcd\u0b95\u0bb3\u0bcd", "Bold": "\u0ba4\u0b9f\u0bbf\u0baa\u0bcd\u0baa\u0bc1", "Italic": "\u0b9a\u0bbe\u0baf\u0bcd\u0bb5\u0bc1", "Underline": "\u0b85\u0b9f\u0bbf\u0b95\u0bcd\u0b95\u0bcb\u0b9f\u0bc1", "Strikethrough": "\u0ba8\u0b9f\u0bc1\u0b95\u0bcd\u0b95\u0bcb\u0b9f\u0bc1", "Superscript": "\u0bae\u0bc7\u0bb2\u0bcd\u0b92\u0b9f\u0bcd\u0b9f\u0bc1", "Subscript": "\u0b95\u0bc0\u0bb4\u0bcd\u0b92\u0b9f\u0bcd\u0b9f\u0bc1", "Clear formatting": "\u0bb5\u0b9f\u0bbf\u0bb5\u0bae\u0bc8\u0baa\u0bcd\u0baa\u0bc1 \u0b85\u0bb4\u0bbf\u0b95\u0bcd\u0b95", "Align left": "\u0b87\u0b9f\u0ba4\u0bc1 \u0b9a\u0bc0\u0bb0\u0bae\u0bc8", "Align center": "\u0bae\u0bc8\u0baf \u0b9a\u0bc0\u0bb0\u0bae\u0bc8", "Align right": "\u0bb5\u0bb2\u0ba4\u0bc1 \u0b9a\u0bc0\u0bb0\u0bae\u0bc8", "Justify": "\u0ba8\u0bc7\u0bb0\u0bcd\u0ba4\u0bcd\u0ba4\u0bbf \u0b9a\u0bc6\u0baf\u0bcd\u0b95", "Bullet list": "\u0baa\u0bca\u0b9f\u0bcd\u0b9f\u0bbf\u0b9f\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f \u0baa\u0b9f\u0bcd\u0b9f\u0bbf\u0baf\u0bb2\u0bcd", "Numbered list": "\u0b8e\u0ba3\u0bcd\u0ba3\u0bbf\u0b9f\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f \u0baa\u0b9f\u0bcd\u0b9f\u0bbf\u0baf\u0bb2\u0bcd", "Decrease indent": "\u0b89\u0bb3\u0bcd\u0ba4\u0bb3\u0bcd\u0bb3\u0bc1\u0ba4\u0bb2\u0bc8 \u0b95\u0bc1\u0bb1\u0bc8\u0b95\u0bcd\u0b95", "Increase indent": "\u0b89\u0bb3\u0bcd\u0ba4\u0bb3\u0bcd\u0bb3\u0bc1\u0ba4\u0bb2\u0bc8 \u0b85\u0ba4\u0bbf\u0b95\u0bb0\u0bbf\u0b95\u0bcd\u0b95", "Close": "\u0bae\u0bc2\u0b9f\u0bc1\u0b95", "Formats": "\u0bb5\u0b9f\u0bbf\u0bb5\u0bae\u0bc8\u0baa\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bcd", "Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u0ba8\u0b95\u0bb2\u0b95\u0ba4\u0bcd\u0ba4\u0bbf\u0bb1\u0bcd\u0b95\u0bc1 \u0ba8\u0bc7\u0bb0\u0b9f\u0bbf \u0b85\u0ba3\u0bc1\u0b95\u0bb2\u0bc8 \u0ba4\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b89\u0bb2\u0bbe\u0bb5\u0bbf \u0b86\u0ba4\u0bb0\u0bbf\u0b95\u0bcd\u0b95\u0bb5\u0bbf\u0bb2\u0bcd\u0bb2\u0bc8. \u0b86\u0b95\u0bb5\u0bc7 \u0bb5\u0bbf\u0b9a\u0bc8\u0baa\u0bcd\u0baa\u0bb2\u0b95\u0bc8 \u0b95\u0bc1\u0bb1\u0bc1\u0b95\u0bcd\u0b95\u0bc1\u0bb5\u0bb4\u0bbf\u0b95\u0bb3\u0bbe\u0ba9 Ctrl+X\/C\/V \u0b87\u0bb5\u0bb1\u0bcd\u0bb1\u0bc8 \u0ba4\u0baf\u0bb5\u0bc1 \u0b9a\u0bc6\u0baf\u0bcd\u0ba4\u0bc1 \u0baa\u0baf\u0ba9\u0bcd\u0baa\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0b95.", "Headers": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bcd", "Header 1": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 1", "Header 2": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 2", "Header 3": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 3", "Header 4": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 4", "Header 5": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 5", "Header 6": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 6", "Headings": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bcd", "Heading 1": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 1", "Heading 2": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 2", "Heading 3": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 3", "Heading 4": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 4", "Heading 5": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 5", "Heading 6": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 6", "Preformatted": "\u0bae\u0bc1\u0ba9\u0bcd\u0bb5\u0b9f\u0bbf\u0bb5\u0bae\u0bc8\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0ba4\u0bc1", "Div": "\u0baa\u0bbf\u0bb0\u0bbf\u0bb5\u0bc1 (Div)", "Pre": "\u0bae\u0bc1\u0ba9\u0bcd \u0bb5\u0b9f\u0bbf\u0bb5\u0bae\u0bc8\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0ba4\u0bc1 (Pre)", "Code": "\u0b95\u0bc1\u0bb1\u0bbf\u0baf\u0bc0\u0b9f\u0bc1", "Paragraph": "\u0baa\u0ba4\u0bcd\u0ba4\u0bbf", "Blockquote": "\u0ba4\u0bca\u0b95\u0bc1\u0ba4\u0bbf \u0bae\u0bc7\u0bb1\u0bcd\u0b95\u0bcb\u0bb3\u0bcd", "Inline": "\u0b89\u0bb3\u0bcd\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8", "Blocks": "\u0ba4\u0bca\u0b95\u0bc1\u0ba4\u0bbf\u0b95\u0bb3\u0bcd", "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u0b87\u0baf\u0bb2\u0bcd\u0baa\u0bc1 \u0b89\u0bb0\u0bc8 \u0bae\u0bc1\u0bb1\u0bc8\u0bae\u0bc8\u0baf\u0bbf\u0bb2\u0bcd \u0ba4\u0bb1\u0bcd\u0baa\u0bcb\u0ba4\u0bc1 \u0b92\u0b9f\u0bcd\u0b9f\u0bc1\u0ba4\u0bb2\u0bcd \u0b89\u0bb3\u0bcd\u0bb3\u0ba4\u0bc1. \u0ba4\u0bbe\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b87\u0ba8\u0bcd\u0ba4 \u0bb5\u0bbf\u0bb0\u0bc1\u0baa\u0bcd\u0baa\u0bc8 \u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bc1\u0bae\u0bcd \u0bb5\u0bb0\u0bc8 \u0b89\u0bb3\u0bcd\u0bb3\u0b9f\u0b95\u0bcd\u0b95\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b87\u0baf\u0bb2\u0bcd\u0baa\u0bc1 \u0b89\u0bb0\u0bc8\u0baf\u0bbe\u0b95 \u0b92\u0b9f\u0bcd\u0b9f\u0baa\u0bcd\u0baa\u0b9f\u0bc1\u0bae\u0bcd.", "Fonts": "\u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0bb0\u0bc1\u0b95\u0bcd\u0b95\u0bb3\u0bcd", "Font Sizes": "\u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0bb0\u0bc1 \u0b85\u0bb3\u0bb5\u0bc1\u0b95\u0bb3\u0bcd", "Class": "Class", "Browse for an image": "\u0b92\u0bb0\u0bc1 \u0baa\u0b9f\u0ba4\u0bcd\u0ba4\u0bc1\u0b95\u0bcd\u0b95\u0bc1 \u0b89\u0bb2\u0bbe\u0bb5\u0bc1\u0b95", "OR": "\u0b85\u0bb2\u0bcd\u0bb2\u0ba4\u0bc1", "Drop an image here": "\u0b92\u0bb0\u0bc1 \u0baa\u0b9f\u0ba4\u0bcd\u0ba4\u0bc8 \u0b87\u0b99\u0bcd\u0b95\u0bc1 \u0b87\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0baa\u0bcd \u0baa\u0bcb\u0b9f\u0bb5\u0bc1\u0bae\u0bcd", "Upload": "\u0baa\u0ba4\u0bbf\u0bb5\u0bc7\u0bb1\u0bcd\u0bb1\u0bc1\u0b95", "Block": "\u0ba4\u0bca\u0b95\u0bc1\u0ba4\u0bbf", "Align": "\u0b9a\u0bc0\u0bb0\u0bae\u0bc8", "Default": "\u0b89\u0bb3\u0bcd\u0bb3\u0bbf\u0bb0\u0bc1\u0baa\u0bcd\u0baa\u0bc1", "Circle": "\u0bb5\u0b9f\u0bcd\u0b9f\u0bae\u0bcd", "Disc": "\u0bb5\u0b9f\u0bcd\u0b9f\u0bc1", "Square": "\u0b9a\u0ba4\u0bc1\u0bb0\u0bae\u0bcd", "Lower Alpha": "\u0b95\u0bc0\u0bb4\u0bcd \u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1", "Lower Greek": "\u0b95\u0bc0\u0bb4\u0bcd \u0b95\u0bbf\u0bb0\u0bc7\u0b95\u0bcd\u0b95\u0bae\u0bcd", "Lower Roman": "\u0b95\u0bc0\u0bb4\u0bcd \u0bb0\u0bcb\u0bae\u0bbe\u0ba9\u0bbf\u0baf\u0bae\u0bcd", "Upper Alpha": "\u0bae\u0bc7\u0bb2\u0bcd \u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1", "Upper Roman": "\u0bae\u0bc7\u0bb2\u0bcd \u0bb0\u0bcb\u0bae\u0bbe\u0ba9\u0bbf\u0baf\u0bae\u0bcd", "Anchor...": "\u0ba8\u0b99\u0bcd\u0b95\u0bc2\u0bb0\u0bae\u0bcd...", "Name": "\u0baa\u0bc6\u0baf\u0bb0\u0bcd", "Id": "Id", "Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Id \u0b86\u0ba9\u0ba4\u0bc1 \u0b92\u0bb0\u0bc1 \u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bbf\u0bb2\u0bcd \u0ba4\u0bca\u0b9f\u0b99\u0bcd\u0b95 \u0bb5\u0bc7\u0ba3\u0bcd\u0b9f\u0bc1\u0bae\u0bcd; \u0b87\u0ba4\u0ba9\u0bc8\u0ba4\u0bcd \u0ba4\u0bca\u0b9f\u0bb0\u0bcd\u0ba8\u0bcd\u0ba4\u0bc1 \u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0b95\u0bcd\u0b95\u0bb3\u0bcd, \u0b8e\u0ba3\u0bcd\u0b95\u0bb3\u0bcd, \u0b87\u0b9f\u0bc8\u0b95\u0bcd\u0b95\u0bc7\u0bbe\u0b9f\u0bc1\u0b95\u0bb3\u0bcd (-), \u0baa\u0bc1\u0bb3\u0bcd\u0bb3\u0bbf\u0b95\u0bb3\u0bcd (.), \u0bae\u0bc1\u0b95\u0bcd\u0b95\u0bbe\u0bb1\u0bcd\u0baa\u0bc1\u0bb3\u0bcd\u0bb3\u0bbf\u0b95\u0bb3\u0bcd (:) \u0bae\u0bb1\u0bcd\u0bb1\u0bc1\u0bae\u0bcd \u0b85\u0b9f\u0bbf\u0b95\u0bcd\u0b95\u0bc7\u0bbe\u0b9f\u0bc1\u0b95\u0bb3\u0bcd (_) \u0bae\u0b9f\u0bcd\u0b9f\u0bc1\u0bae\u0bc7 \u0b87\u0bb0\u0bc1\u0ba4\u0bcd\u0ba4\u0bb2\u0bcd \u0bb5\u0bc7\u0ba3\u0bcd\u0b9f\u0bc1\u0bae\u0bcd.", "You have unsaved changes are you sure you want to navigate away?": "\u0b9a\u0bc7\u0bae\u0bbf\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bbe\u0ba4 \u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b89\u0bb3\u0bcd\u0bb3\u0ba9; \u0ba4\u0bbe\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b89\u0bb1\u0bc1\u0ba4\u0bbf\u0baf\u0bbe\u0b95 \u0bb5\u0bc6\u0bb3\u0bbf\u0baf\u0bc7\u0bb1 \u0bb5\u0bbf\u0bb0\u0bc1\u0bae\u0bcd\u0baa\u0bc1\u0b95\u0bbf\u0bb1\u0bc0\u0bb0\u0bcd\u0b95\u0bbe\u0bb3\u0bbe?", "Restore last draft": "\u0b95\u0b9f\u0ba8\u0bcd\u0ba4 \u0bb5\u0bb0\u0bc8\u0bb5\u0bc8 \u0bae\u0bc0\u0b9f\u0bcd\u0b9f\u0bc6\u0b9f\u0bc1\u0b95\u0bcd\u0b95", "Special character...": "\u0b9a\u0bbf\u0bb1\u0baa\u0bcd\u0baa\u0bc1 \u0b89\u0bb0\u0bc1...", "Source code": "\u0bae\u0bc2\u0bb2 \u0b95\u0bc1\u0bb1\u0bbf\u0baf\u0bc0\u0b9f\u0bc1", "Insert\/Edit code sample": "\u0b95\u0bc1\u0bb1\u0bbf\u0baf\u0bc0\u0b9f\u0bc1 \u0bae\u0bbe\u0ba4\u0bbf\u0bb0\u0bbf \u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95\/\u0ba4\u0bca\u0b95\u0bc1\u0b95\u0bcd\u0b95", "Language": "\u0bae\u0bca\u0bb4\u0bbf", "Code sample...": "\u0b95\u0bc1\u0bb1\u0bbf\u0baf\u0bc0\u0b9f\u0bc1 \u0bae\u0bbe\u0ba4\u0bbf\u0bb0\u0bbf...", "Color Picker": "\u0ba8\u0bbf\u0bb1\u0ba4\u0bcd \u0ba4\u0bc6\u0bb0\u0bbf\u0bb5\u0bc1", "R": "R", "G": "G", "B": "B", "Left to right": "\u0b87\u0b9f\u0bae\u0bbf\u0bb0\u0bc1\u0ba8\u0bcd\u0ba4\u0bc1 \u0bb5\u0bb2\u0bae\u0bcd", "Right to left": "\u0bb5\u0bb2\u0bae\u0bbf\u0bb0\u0bc1\u0ba8\u0bcd\u0ba4\u0bc1 \u0b87\u0b9f\u0bae\u0bcd", "Emoticons...": "\u0b89\u0ba3\u0bb0\u0bcd\u0b9a\u0bcd\u0b9a\u0bbf\u0baa\u0bcd\u0baa\u0b9f\u0bbf\u0bae\u0b99\u0bcd\u0b95\u0bb3\u0bcd", "Metadata and Document Properties": "\u0bae\u0bc0\u0ba4\u0bcd\u0ba4\u0bb0\u0bb5\u0bc1 \u0bae\u0bb1\u0bcd\u0bb1\u0bc1\u0bae\u0bcd \u0b86\u0bb5\u0ba3\u0baa\u0bcd \u0baa\u0ba3\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bcd", "Title": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1", "Keywords": "\u0bae\u0bc1\u0ba4\u0ba9\u0bcd\u0bae\u0bc8\u0b9a\u0bcd\u0b9a\u0bca\u0bb1\u0bcd\u0b95\u0bb3\u0bcd", "Description": "\u0bb5\u0bbf\u0bb5\u0bb0\u0bae\u0bcd", "Robots": "\u0baa\u0bca\u0bb1\u0bbf\u0baf\u0ba9\u0bcd\u0b95\u0bb3\u0bcd (Robots)", "Author": "\u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bbe\u0bb3\u0bb0\u0bcd", "Encoding": "\u0b95\u0bc1\u0bb1\u0bbf\u0baf\u0bc0\u0b9f\u0bbe\u0b95\u0bcd\u0b95\u0bae\u0bcd", "Fullscreen": "\u0bae\u0bc1\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bbf\u0bb0\u0bc8", "Action": "\u0b9a\u0bc6\u0baf\u0bb2\u0bcd", "Shortcut": "\u0b95\u0bc1\u0bb1\u0bc1\u0b95\u0bcd\u0b95\u0bc1\u0bb5\u0bb4\u0bbf", "Help": "\u0b89\u0ba4\u0bb5\u0bbf", "Address": "\u0bae\u0bc1\u0b95\u0bb5\u0bb0\u0bbf", "Focus to menubar": "\u0baa\u0b9f\u0bcd\u0b9f\u0bbf\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0bc8\u0baf\u0bbf\u0bb2\u0bcd \u0b95\u0bb5\u0ba9\u0bae\u0bcd \u0b9a\u0bc6\u0bb2\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0b95", "Focus to toolbar": "\u0b95\u0bb0\u0bc1\u0bb5\u0bbf\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0bc8\u0baf\u0bbf\u0bb2\u0bcd \u0b95\u0bb5\u0ba9\u0bae\u0bcd \u0b9a\u0bc6\u0bb2\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0b95", "Focus to element path": "\u0bae\u0bc2\u0bb2\u0b95\u0baa\u0bcd \u0baa\u0bbe\u0ba4\u0bc8\u0baf\u0bbf\u0bb2\u0bcd \u0b95\u0bb5\u0ba9\u0bae\u0bcd \u0b9a\u0bc6\u0bb2\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0b95", "Focus to contextual toolbar": "\u0b9a\u0bc2\u0bb4\u0bcd\u0ba8\u0bbf\u0bb2\u0bc8 \u0b95\u0bb0\u0bc1\u0bb5\u0bbf\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0bc8\u0baf\u0bbf\u0bb2\u0bcd \u0b95\u0bb5\u0ba9\u0bae\u0bcd \u0b9a\u0bc6\u0bb2\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0b95", "Insert link (if link plugin activated)": "\u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc1 \u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95 (\u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc1 \u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bbf \u0b9a\u0bc6\u0baf\u0bb2\u0bbe\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0bbf\u0baf\u0bbf\u0bb0\u0bc1\u0ba8\u0bcd\u0ba4\u0bbe\u0bb2\u0bcd)", "Save (if save plugin activated)": "\u0b9a\u0bc7\u0bae\u0bbf\u0b95\u0bcd\u0b95 (\u0b9a\u0bc7\u0bae\u0bbf\u0baa\u0bcd\u0baa\u0bc1 \u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bbf \u0b9a\u0bc6\u0baf\u0bb2\u0bbe\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0bbf\u0baf\u0bbf\u0bb0\u0bc1\u0ba8\u0bcd\u0ba4\u0bbe\u0bb2\u0bcd)", "Find (if searchreplace plugin activated)": "\u0b95\u0ba3\u0bcd\u0b9f\u0bc1\u0baa\u0bbf\u0b9f\u0bbf\u0b95\u0bcd\u0b95 (\u0ba4\u0bc7\u0b9f\u0bbf\u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bb2\u0bcd \u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bbf \u0b9a\u0bc6\u0baf\u0bb2\u0bbe\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0bbf\u0baf\u0bbf\u0bb0\u0bc1\u0ba8\u0bcd\u0ba4\u0bbe\u0bb2\u0bcd)", "Plugins installed ({0}):": "\u0ba8\u0bbf\u0bb1\u0bc1\u0bb5\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0bc1\u0bb3\u0bcd\u0bb3 \u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bbf\u0b95\u0bb3\u0bcd ({0}):", "Premium plugins:": "\u0b89\u0baf\u0bb0\u0bcd\u0bae\u0ba4\u0bbf\u0baa\u0bcd\u0baa\u0bc1 \u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bbf\u0b95\u0bb3\u0bcd:", "Learn more...": "\u0bae\u0bc7\u0bb2\u0bc1\u0bae\u0bcd \u0b85\u0bb1\u0bbf\u0b95...", "You are using {0}": "\u0ba4\u0bbe\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0baa\u0baf\u0ba9\u0bcd\u0baa\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0bb5\u0ba4\u0bc1 {0}", "Plugins": "\u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bbf\u0b95\u0bb3\u0bcd", "Handy Shortcuts": "\u0b8e\u0bb3\u0bbf\u0ba4\u0bbf\u0bb2\u0bcd \u0b95\u0bc8\u0baf\u0bbe\u0bb3\u0b95\u0bcd\u0b95\u0bc2\u0b9f\u0bbf\u0baf \u0b95\u0bc1\u0bb1\u0bc1\u0b95\u0bcd\u0b95\u0bc1\u0bb5\u0bb4\u0bbf\u0b95\u0bb3\u0bcd", "Horizontal line": "\u0b95\u0bbf\u0b9f\u0bc8 \u0b95\u0bcb\u0b9f\u0bc1", "Insert\/edit image": "\u0baa\u0b9f\u0bae\u0bcd \u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95\/\u0ba4\u0bca\u0b95\u0bc1\u0b95\u0bcd\u0b95", "Image description": "\u0baa\u0b9f \u0bb5\u0bbf\u0bb5\u0bb0\u0bae\u0bcd", "Source": "\u0bae\u0bc2\u0bb2\u0bae\u0bcd", "Dimensions": "\u0baa\u0bb0\u0bbf\u0bae\u0bbe\u0ba3\u0b99\u0bcd\u0b95\u0bb3\u0bcd", "Constrain proportions": "\u0bb5\u0bbf\u0b95\u0bbf\u0ba4\u0bbe\u0b9a\u0bcd\u0b9a\u0bbe\u0bb0\u0ba4\u0bcd\u0ba4\u0bbf\u0bb2\u0bcd \u0b95\u0b9f\u0bcd\u0b9f\u0bc1\u0baa\u0bcd\u0baa\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0b95", "General": "\u0baa\u0bca\u0ba4\u0bc1", "Advanced": "\u0bae\u0bc7\u0bae\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0ba4\u0bc1", "Style": "\u0baa\u0bbe\u0ba3\u0bbf", "Vertical space": "\u0ba8\u0bc6\u0b9f\u0bc1\u0ba4\u0bb3 \u0b87\u0b9f\u0bc8\u0bb5\u0bc6\u0bb3\u0bbf", "Horizontal space": "\u0b95\u0bbf\u0b9f\u0bc8\u0bae\u0b9f\u0bcd\u0b9f \u0b87\u0b9f\u0bc8\u0bb5\u0bc6\u0bb3\u0bbf", "Border": "\u0b95\u0bb0\u0bc8", "Insert image": "\u0baa\u0b9f\u0bae\u0bcd \u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95", "Image...": "\u0baa\u0b9f\u0bae\u0bcd...", "Image list": "\u0baa\u0b9f\u0baa\u0bcd \u0baa\u0b9f\u0bcd\u0b9f\u0bbf\u0baf\u0bb2\u0bcd", "Rotate counterclockwise": "\u0b95\u0b9f\u0bbf\u0b95\u0bbe\u0bb0 \u0b8e\u0ba4\u0bbf\u0bb0\u0bcd\u0ba4\u0bbf\u0b9a\u0bc8\u0baf\u0bbf\u0bb2\u0bcd \u0b9a\u0bc1\u0bb4\u0bb1\u0bcd\u0bb1\u0bc1", "Rotate clockwise": "\u0b95\u0b9f\u0bbf\u0b95\u0bbe\u0bb0\u0ba4\u0bcd\u0ba4\u0bbf\u0b9a\u0bc8\u0baf\u0bbf\u0bb2\u0bcd \u0b9a\u0bc1\u0bb4\u0bb1\u0bcd\u0bb1\u0bc1", "Flip vertically": "\u0b9a\u0bc6\u0b99\u0bcd\u0b95\u0bc1\u0ba4\u0bcd\u0ba4\u0bbe\u0b95 \u0baa\u0bc1\u0bb0\u0b9f\u0bcd\u0b9f\u0bc1", "Flip horizontally": "\u0b95\u0bbf\u0b9f\u0bc8\u0bae\u0b9f\u0bcd\u0b9f\u0bae\u0bbe\u0b95 \u0baa\u0bc1\u0bb0\u0b9f\u0bcd\u0b9f\u0bc1", "Edit image": "\u0baa\u0b9f\u0ba4\u0bcd\u0ba4\u0bc8 \u0ba4\u0bca\u0b95\u0bc1", "Image options": "\u0baa\u0b9f \u0bb5\u0bbf\u0bb0\u0bc1\u0baa\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bcd", "Zoom in": "\u0baa\u0bc6\u0bb0\u0bbf\u0ba4\u0bbe\u0b95\u0bcd\u0b95\u0bc1", "Zoom out": "\u0b9a\u0bbf\u0bb1\u0bbf\u0ba4\u0bbe\u0b95\u0bcd\u0b95\u0bc1", "Crop": "\u0b9a\u0bc6\u0ba4\u0bc1\u0b95\u0bcd\u0b95\u0bc1", "Resize": "\u0bae\u0bb1\u0bc1\u0b85\u0bb3\u0bb5\u0bbf\u0b9f\u0bc1", "Orientation": "\u0ba4\u0bbf\u0b9a\u0bc8\u0baf\u0bae\u0bc8\u0bb5\u0bc1", "Brightness": "\u0b92\u0bb3\u0bbf\u0bb0\u0bcd\u0bb5\u0bc1", "Sharpen": "\u0b95\u0bc2\u0bb0\u0bcd\u0bae\u0bc8\u0baf\u0bbe\u0b95\u0bcd\u0b95\u0bc1", "Contrast": "\u0ba8\u0bbf\u0bb1\u0bae\u0bbe\u0bb1\u0bc1\u0baa\u0bbe\u0b9f\u0bc1", "Color levels": "\u0bb5\u0ba3\u0bcd\u0ba3 \u0ba8\u0bbf\u0bb2\u0bc8\u0b95\u0bb3\u0bcd", "Gamma": "Gamma", "Invert": "\u0ba8\u0bc7\u0bb0\u0bcd\u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bc1", "Apply": "\u0baa\u0baf\u0ba9\u0bcd\u0baa\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1", "Back": "\u0baa\u0bbf\u0ba9\u0bcd", "Insert date\/time": "\u0ba4\u0bc7\u0ba4\u0bbf\/\u0ba8\u0bc7\u0bb0\u0bae\u0bcd \u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95", "Date\/time": "\u0ba4\u0bc7\u0ba4\u0bbf\/\u0ba8\u0bc7\u0bb0\u0bae\u0bcd", "Insert\/Edit Link": "\u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc1 \u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95\/\u0ba4\u0bca\u0b95\u0bc1\u0b95\u0bcd\u0b95", "Insert\/edit link": "\u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc1 \u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95\/\u0ba4\u0bca\u0b95\u0bc1\u0b95\u0bcd\u0b95", "Text to display": "\u0b95\u0bbe\u0b9f\u0bcd\u0b9a\u0bbf\u0baa\u0bcd\u0baa\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4 \u0bb5\u0bc7\u0ba3\u0bcd\u0b9f\u0bbf\u0baf \u0b89\u0bb0\u0bc8", "Url": "\u0b87\u0ba3\u0bc8\u0baf\u0bae\u0bc1\u0b95\u0bb5\u0bb0\u0bbf", "Open link in...": "\u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc8 \u0b87\u0ba4\u0bbf\u0bb2\u0bcd \u0ba4\u0bbf\u0bb1\u0b95\u0bcd\u0b95...", "Current window": "\u0ba4\u0bb1\u0bcd\u0baa\u0bcb\u0ba4\u0bc8\u0baf \u0b9a\u0bbe\u0bb3\u0bb0\u0bae\u0bcd", "None": "\u0b8f\u0ba4\u0bc1\u0bae\u0bbf\u0bb2\u0bcd\u0bb2\u0bc8", "New window": "\u0baa\u0bc1\u0ba4\u0bbf\u0baf \u0b9a\u0bbe\u0bb3\u0bb0\u0bae\u0bcd", "Remove link": "\u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc8 \u0b85\u0b95\u0bb1\u0bcd\u0bb1\u0bc1\u0b95", "Anchors": "\u0ba8\u0b99\u0bcd\u0b95\u0bc2\u0bb0\u0b99\u0bcd\u0b95\u0bb3\u0bcd", "Link...": "\u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc1...", "Paste or type a link": "\u0b92\u0bb0\u0bc1 \u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc1 \u0b92\u0b9f\u0bcd\u0b9f\u0bc1\u0b95 \u0b85\u0bb2\u0bcd\u0bb2\u0ba4\u0bc1 \u0ba4\u0b9f\u0bcd\u0b9f\u0b9a\u0bcd\u0b9a\u0bbf\u0b9f\u0bc1\u0b95", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u0ba4\u0bbe\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b89\u0bb3\u0bcd\u0bb3\u0bbf\u0b9f\u0bcd\u0b9f \u0b87\u0ba3\u0bc8\u0baf\u0bae\u0bc1\u0b95\u0bb5\u0bb0\u0bbf (URL) \u0b92\u0bb0\u0bc1 \u0bae\u0bbf\u0ba9\u0bcd-\u0b85\u0b9e\u0bcd\u0b9a\u0bb2\u0bcd \u0bae\u0bc1\u0b95\u0bb5\u0bb0\u0bbf \u0baa\u0bcb\u0bb2\u0bcd \u0ba4\u0bcb\u0ba9\u0bcd\u0bb1\u0bc1\u0b95\u0bbf\u0bb1\u0ba4\u0bc1. \u0ba4\u0bc7\u0bb5\u0bc8\u0baf\u0bbe\u0ba9 mailto: \u0bae\u0bc1\u0ba9\u0bcd-\u0b92\u0b9f\u0bcd\u0b9f\u0bc8\u0ba4\u0bcd (prefix) \u0ba4\u0bbe\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b9a\u0bc7\u0bb0\u0bcd\u0b95\u0bcd\u0b95 \u0bb5\u0bc7\u0ba3\u0bcd\u0b9f\u0bc1\u0bae\u0bbe?", "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\u0ba4\u0bbe\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b89\u0bb3\u0bcd\u0bb3\u0bbf\u0b9f\u0bcd\u0b9f \u0b87\u0ba3\u0bc8\u0baf\u0bae\u0bc1\u0b95\u0bb5\u0bb0\u0bbf (URL) \u0b92\u0bb0\u0bc1 \u0bb5\u0bc6\u0bb3\u0bbf\u0baa\u0bcd\u0baa\u0bc1\u0bb1 \u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc1 (external link) \u0baa\u0bcb\u0bb2\u0bcd \u0ba4\u0bcb\u0ba9\u0bcd\u0bb1\u0bc1\u0b95\u0bbf\u0bb1\u0ba4\u0bc1. \u0ba4\u0bc7\u0bb5\u0bc8\u0baf\u0bbe\u0ba9 http:\/\/ \u0bae\u0bc1\u0ba9\u0bcd-\u0b92\u0b9f\u0bcd\u0b9f\u0bc8\u0ba4\u0bcd (prefix) \u0ba4\u0bbe\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b9a\u0bc7\u0bb0\u0bcd\u0b95\u0bcd\u0b95 \u0bb5\u0bc7\u0ba3\u0bcd\u0b9f\u0bc1\u0bae\u0bbe?", "Link list": "\u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc1\u0baa\u0bcd \u0baa\u0b9f\u0bcd\u0b9f\u0bbf\u0baf\u0bb2\u0bcd", "Insert video": "\u0b95\u0bbe\u0ba3\u0bca\u0bb3\u0bbf \u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95", "Insert\/edit video": "\u0b95\u0bbe\u0ba3\u0bca\u0bb3\u0bbf \u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95\/\u0ba4\u0bca\u0b95\u0bc1\u0b95\u0bcd\u0b95", "Insert\/edit media": "\u0b8a\u0b9f\u0b95\u0bae\u0bcd \u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95\/\u0ba4\u0bca\u0b95\u0bc1\u0b95\u0bcd\u0b95", "Alternative source": "\u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bc1 \u0bae\u0bc2\u0bb2\u0bae\u0bcd", "Alternative source URL": "\u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bc1 \u0bae\u0bc2\u0bb2 \u0b87\u0ba3\u0bc8\u0baf\u0bae\u0bc1\u0b95\u0bb5\u0bb0\u0bbf", "Media poster (Image URL)": "\u0b8a\u0b9f\u0b95 \u0b9a\u0bc1\u0bb5\u0bb0\u0bca\u0b9f\u0bcd\u0b9f\u0bbf (\u0b89\u0b9f \u0b87\u0ba3\u0bc8\u0baf\u0bae\u0bc1\u0b95\u0bb5\u0bb0\u0bbf)", "Paste your embed code below:": "\u0ba4\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b89\u0b9f\u0bcd\u0baa\u0bc6\u0bbe\u0ba4\u0bbf \u0b95\u0bc1\u0bb1\u0bbf\u0baf\u0bc0\u0b9f\u0bcd\u0b9f\u0bc8 \u0b95\u0bc0\u0bb4\u0bc7 \u0b92\u0b9f\u0bcd\u0b9f\u0bb5\u0bc1\u0bae\u0bcd:", "Embed": "\u0b89\u0b9f\u0bcd\u0baa\u0bca\u0ba4\u0bbf", "Media...": "\u0b8a\u0b9f\u0b95\u0bae\u0bcd...", "Nonbreaking space": "\u0baa\u0bbf\u0bb0\u0bbf\u0baf\u0bbe\u0ba4 \u0b87\u0b9f\u0bc8\u0bb5\u0bc6\u0bb3\u0bbf", "Page break": "\u0baa\u0b95\u0bcd\u0b95 \u0baa\u0bbf\u0bb0\u0bbf\u0baa\u0bcd\u0baa\u0bc1", "Paste as text": "\u0b89\u0bb0\u0bc8\u0baf\u0bbe\u0b95 \u0b92\u0b9f\u0bcd\u0b9f\u0bc1\u0b95", "Preview": "\u0bae\u0bc1\u0ba9\u0bcd\u0ba8\u0bcb\u0b95\u0bcd\u0b95\u0bc1", "Print...": "\u0b85\u0b9a\u0bcd\u0b9a\u0bbf\u0b9f\u0bc1\u0b95...", "Save": "\u0b9a\u0bc7\u0bae\u0bbf\u0b95\u0bcd\u0b95", "Find": "\u0b95\u0ba3\u0bcd\u0b9f\u0bc1\u0baa\u0bbf\u0b9f\u0bbf\u0b95\u0bcd\u0b95", "Replace with": "\u0b87\u0ba4\u0ba9\u0bc1\u0b9f\u0ba9\u0bcd \u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bc1\u0b95", "Replace": "\u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bc1\u0b95", "Replace all": "\u0b85\u0ba9\u0bc8\u0ba4\u0bcd\u0ba4\u0bc8\u0baf\u0bc1\u0bae\u0bcd \u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bc1\u0b95", "Previous": "\u0bae\u0bc1\u0ba8\u0bcd\u0ba4\u0bc8\u0baf", "Next": "\u0b85\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4", "Find and replace...": "\u0b95\u0ba3\u0bcd\u0b9f\u0bc1\u0baa\u0bbf\u0b9f\u0bbf\u0ba4\u0bcd\u0ba4\u0bc1 \u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bc1\u0b95...", "Could not find the specified string.": "\u0b95\u0bc1\u0bb1\u0bbf\u0baa\u0bcd\u0baa\u0bbf\u0b9f\u0bcd\u0b9f \u0b9a\u0bb0\u0bae\u0bcd \u0b95\u0ba3\u0bcd\u0b9f\u0bc1\u0baa\u0bbf\u0b9f\u0bbf\u0b95\u0bcd\u0b95 \u0bae\u0bc1\u0b9f\u0bbf\u0baf\u0bb5\u0bbf\u0bb2\u0bcd\u0bb2\u0bc8", "Match case": "\u0bb5\u0b9f\u0bbf\u0bb5\u0ba4\u0bcd\u0ba4\u0bc8 \u0baa\u0bca\u0bb0\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0b95", "Find whole words only": "\u0bae\u0bc1\u0bb4\u0bc1 \u0b9a\u0bca\u0bb1\u0bcd\u0b95\u0bb3\u0bcd \u0bae\u0b9f\u0bcd\u0b9f\u0bc1\u0bae\u0bcd \u0b95\u0ba3\u0bcd\u0b9f\u0bc1\u0baa\u0bbf\u0b9f\u0bbf\u0b95\u0bcd\u0b95", "Spell check": "\u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0baa\u0bcd\u0baa\u0bbf\u0bb4\u0bc8 \u0b9a\u0bb0\u0bbf\u0baa\u0bbe\u0bb0\u0bcd\u0baa\u0bcd\u0baa\u0bc1", "Ignore": "\u0baa\u0bc1\u0bb1\u0b95\u0bcd\u0b95\u0ba3\u0bbf\u0b95\u0bcd\u0b95", "Ignore all": "\u0b85\u0ba9\u0bc8\u0ba4\u0bcd\u0ba4\u0bc8\u0baf\u0bc1\u0bae\u0bcd \u0baa\u0bc1\u0bb1\u0b95\u0bcd\u0b95\u0ba3\u0bbf\u0b95\u0bcd\u0b95", "Finish": "\u0bae\u0bc1\u0b9f\u0bbf\u0b95\u0bcd\u0b95", "Add to Dictionary": "\u0b85\u0b95\u0bb0\u0bbe\u0ba4\u0bbf\u0baf\u0bbf\u0bb2\u0bcd \u0b9a\u0bc7\u0bb0\u0bcd\u0b95\u0bcd\u0b95", "Insert table": "\u0b85\u0b9f\u0bcd\u0b9f\u0bb5\u0ba3\u0bc8 \u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95", "Table properties": "\u0b85\u0b9f\u0bcd\u0b9f\u0bb5\u0ba3\u0bc8 \u0baa\u0ba3\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bcd", "Delete table": "\u0b85\u0b9f\u0bcd\u0b9f\u0bb5\u0ba3\u0bc8 \u0ba8\u0bc0\u0b95\u0bcd\u0b95\u0bc1\u0b95", "Cell": "\u0b9a\u0bbf\u0bb1\u0bcd\u0bb1\u0bb1\u0bc8", "Row": "\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8", "Column": "\u0ba8\u0bc6\u0b9f\u0bc1\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8", "Cell properties": "\u0b9a\u0bbf\u0bb1\u0bcd\u0bb1\u0bb1\u0bc8 \u0baa\u0ba3\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bcd", "Merge cells": "\u0b9a\u0bbf\u0bb1\u0bcd\u0bb1\u0bb1\u0bc8\u0b95\u0bb3\u0bcd \u0b9a\u0bc7\u0bb0\u0bcd\u0b95\u0bcd\u0b95", "Split cell": "\u0b9a\u0bbf\u0bb1\u0bcd\u0bb1\u0bb1\u0bc8 \u0baa\u0bbf\u0bb0\u0bbf\u0b95\u0bcd\u0b95", "Insert row before": "\u0b87\u0ba4\u0bb1\u0bcd\u0b95\u0bc1 \u0bae\u0bc1\u0ba9\u0bcd \u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95", "Insert row after": "\u0b87\u0ba4\u0bb1\u0bcd\u0b95\u0bc1 \u0baa\u0bbf\u0ba9\u0bcd \u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95", "Delete row": "\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0ba8\u0bc0\u0b95\u0bcd\u0b95\u0bc1\u0b95", "Row properties": "\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0baa\u0ba3\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bcd", "Cut row": "\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0bb5\u0bc6\u0b9f\u0bcd\u0b9f\u0bc1\u0b95", "Copy row": "\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0ba8\u0b95\u0bb2\u0bc6\u0b9f\u0bc1\u0b95\u0bcd\u0b95", "Paste row before": "\u0b87\u0ba4\u0bb1\u0bcd\u0b95\u0bc1 \u0bae\u0bc1\u0ba9\u0bcd \u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0b92\u0b9f\u0bcd\u0b9f\u0bc1\u0b95", "Paste row after": "\u0b87\u0ba4\u0bb1\u0bcd\u0b95\u0bc1 \u0baa\u0bbf\u0ba9\u0bcd \u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0b92\u0b9f\u0bcd\u0b9f\u0bc1\u0b95", "Insert column before": "\u0b87\u0ba4\u0bb1\u0bcd\u0b95\u0bc1 \u0bae\u0bc1\u0ba9\u0bcd \u0ba8\u0bc6\u0b9f\u0bc1\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95", "Insert column after": "\u0b87\u0ba4\u0bb1\u0bcd\u0b95\u0bc1 \u0baa\u0bbf\u0ba9\u0bcd \u0ba8\u0bc6\u0b9f\u0bc1\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95", "Delete column": "\u0ba8\u0bc6\u0b9f\u0bc1\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0ba8\u0bc0\u0b95\u0bcd\u0b95\u0bc1\u0b95", "Cols": "\u0ba8\u0bc6\u0b9f\u0bc1\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8\u0b95\u0bb3\u0bcd", "Rows": "\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8\u0b95\u0bb3\u0bcd", "Width": "\u0b85\u0b95\u0bb2\u0bae\u0bcd", "Height": "\u0b89\u0baf\u0bb0\u0bae\u0bcd", "Cell spacing": "\u0b9a\u0bbf\u0bb1\u0bcd\u0bb1\u0bb1\u0bc8 \u0b87\u0b9f\u0bc8\u0bb5\u0bc6\u0bb3\u0bbf", "Cell padding": "\u0b9a\u0bbf\u0bb1\u0bcd\u0bb1\u0bb1\u0bc8 \u0ba8\u0bbf\u0bb0\u0baa\u0bcd\u0baa\u0bb2\u0bcd", "Show caption": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 \u0b95\u0bbe\u0b9f\u0bcd\u0b9f\u0bc1\u0b95", "Left": "\u0b87\u0b9f\u0bae\u0bcd", "Center": "\u0bae\u0bc8\u0baf\u0bae\u0bcd", "Right": "\u0bb5\u0bb2\u0bae\u0bcd", "Cell type": "\u0b9a\u0bbf\u0bb1\u0bcd\u0bb1\u0bb1\u0bc8 \u0bb5\u0b95\u0bc8", "Scope": "\u0bb5\u0bb0\u0bc8\u0baf\u0bc6\u0bb2\u0bcd\u0bb2\u0bc8", "Alignment": "\u0b9a\u0bc0\u0bb0\u0bae\u0bc8\u0bb5\u0bc1", "H Align": "\u0b95\u0bbf (H) \u0b9a\u0bc0\u0bb0\u0bae\u0bc8", "V Align": "\u0b9a\u0bc6 (V) \u0b9a\u0bc0\u0bb0\u0bae\u0bc8", "Top": "\u0bae\u0bc7\u0bb2\u0bcd", "Middle": "\u0ba8\u0b9f\u0bc1", "Bottom": "\u0b95\u0bc0\u0bb4\u0bcd", "Header cell": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 \u0b9a\u0bbf\u0bb1\u0bcd\u0bb1\u0bb1\u0bc8", "Row group": "\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0b95\u0bc1\u0bb4\u0bc1", "Column group": "\u0ba8\u0bc6\u0b9f\u0bc1\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0b95\u0bc1\u0bb4\u0bc1", "Row type": "\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0bb5\u0b95\u0bc8", "Header": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1", "Body": "\u0b89\u0b9f\u0bb2\u0bcd", "Footer": "\u0b85\u0b9f\u0bbf\u0b95\u0bcd\u0b95\u0bc1\u0bb1\u0bbf\u0baa\u0bcd\u0baa\u0bc1", "Border color": "\u0b95\u0bb0\u0bc8\u0baf\u0bbf\u0ba9\u0bcd \u0ba8\u0bbf\u0bb1\u0bae\u0bcd", "Insert template...": "\u0bb5\u0bbe\u0bb0\u0bcd\u0baa\u0bcd\u0baa\u0bc1\u0bb0\u0bc1 \u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95...", "Templates": "\u0bb5\u0bbe\u0bb0\u0bcd\u0baa\u0bcd\u0baa\u0bc1\u0bb0\u0bc1\u0b95\u0bcd\u0b95\u0bb3\u0bcd", "Template": "\u0bb5\u0bbe\u0bb0\u0bcd\u0baa\u0bcd\u0baa\u0bc1\u0bb0\u0bc1", "Text color": "\u0b89\u0bb0\u0bc8\u0baf\u0bbf\u0ba9\u0bcd \u0ba8\u0bbf\u0bb1\u0bae\u0bcd", "Background color": "\u0baa\u0bbf\u0ba9\u0bcd\u0ba9\u0ba3\u0bbf \u0ba8\u0bbf\u0bb1\u0bae\u0bcd", "Custom...": "\u0ba4\u0ba9\u0bbf\u0baa\u0bcd\u0baa\u0baf\u0ba9\u0bcd...", "Custom color": "\u0ba4\u0ba9\u0bbf\u0baa\u0bcd\u0baa\u0baf\u0ba9\u0bcd \u0ba8\u0bbf\u0bb1\u0bae\u0bcd", "No color": "\u0ba8\u0bbf\u0bb1\u0bae\u0bcd \u0b87\u0bb2\u0bcd\u0bb2\u0bc8", "Remove color": "\u0ba8\u0bbf\u0bb1\u0bae\u0bcd \u0b85\u0b95\u0bb1\u0bcd\u0bb1\u0bc1\u0b95", "Table of Contents": "\u0baa\u0bca\u0bb0\u0bc1\u0bb3\u0b9f\u0b95\u0bcd\u0b95\u0bae\u0bcd", "Show blocks": "\u0ba4\u0bca\u0b95\u0bc1\u0ba4\u0bbf\u0b95\u0bb3\u0bc8 \u0b95\u0bbe\u0b9f\u0bcd\u0b9f\u0bc1\u0b95", "Show invisible characters": "\u0b95\u0ba3\u0bcd\u0ba3\u0bc1\u0b95\u0bcd\u0b95\u0bc1\u0ba4\u0bcd \u0ba4\u0bc6\u0bb0\u0bbf\u0baf\u0bbe\u0ba4 \u0b89\u0bb0\u0bc1\u0b95\u0bcd\u0b95\u0bb3\u0bc8 \u0b95\u0bbe\u0b9f\u0bcd\u0b9f\u0bc1\u0b95", "Word count": "\u0b9a\u0bca\u0bb2\u0bcd \u0b8e\u0ba3\u0bcd\u0ba3\u0bbf\u0b95\u0bcd\u0b95\u0bc8", "Count": "\u0b8e\u0ba3\u0bcd\u0ba3\u0bbf\u0b95\u0bcd\u0b95\u0bc8", "Document": "\u0b86\u0bb5\u0ba3\u0bae\u0bcd", "Selection": "\u0ba4\u0bc7\u0bb0\u0bcd\u0bb5\u0bc1", "Words": "\u0b9a\u0bca\u0bb1\u0bcd\u0b95\u0bb3\u0bcd", "Words: {0}": "\u0b9a\u0bca\u0bb1\u0bcd\u0b95\u0bb3\u0bcd: {0}", "{0} words": "{0} \u0b9a\u0bca\u0bb1\u0bcd\u0b95\u0bb3\u0bcd", "File": "\u0b95\u0bcb\u0baa\u0bcd\u0baa\u0bc1", "Edit": "\u0ba4\u0bca\u0b95\u0bc1\u0b95\u0bcd\u0b95", "Insert": "\u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95", "View": "\u0ba8\u0bcb\u0b95\u0bcd\u0b95\u0bc1\u0b95", "Format": "\u0bb5\u0b9f\u0bbf\u0bb5\u0bae\u0bc8\u0baa\u0bcd\u0baa\u0bc1", "Table": "\u0b85\u0b9f\u0bcd\u0b9f\u0bb5\u0ba3\u0bc8", "Tools": "\u0b95\u0bb0\u0bc1\u0bb5\u0bbf\u0b95\u0bb3\u0bcd", "Powered by {0}": "\u0bb5\u0bb2\u0bc1\u0bb5\u0bb3\u0bbf\u0baa\u0bcd\u0baa\u0ba4\u0bc1 {0}", "Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u0b89\u0baf\u0bb0\u0bcd \u0b89\u0bb0\u0bc8 \u0baa\u0b95\u0bc1\u0ba4\u0bbf. \u0baa\u0b9f\u0bcd\u0b9f\u0bbf\u0b95\u0bcd\u0b95\u0bc1 ALT-F9 , \u0b95\u0bb0\u0bc1\u0bb5\u0bbf\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0bc8\u0b95\u0bcd\u0b95\u0bc1 ALT-F10 , \u0b89\u0ba4\u0bb5\u0bbf\u0b95\u0bcd\u0b95\u0bc1 ALT-0", "Image title": "\u0baa\u0b9f\u0ba4\u0bcd \u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1", "Border width": "\u0b95\u0bb0\u0bc8 \u0b85\u0b95\u0bb2\u0bae\u0bcd", "Border style": "\u0b95\u0bb0\u0bc8 \u0baa\u0bbe\u0ba3\u0bbf", "Error": "\u0baa\u0bbf\u0bb4\u0bc8", "Warn": "\u0b8e\u0b9a\u0bcd\u0b9a\u0bb0\u0bbf\u0b95\u0bcd\u0b95", "Valid": "\u0b9a\u0bc6\u0bb2\u0bcd\u0bb2\u0ba4\u0bcd\u0ba4\u0b95\u0bcd\u0b95\u0ba4\u0bc1", "To open the popup, press Shift+Enter": "\u0bae\u0bc7\u0bb2\u0bcd\u0ba4\u0bcb\u0ba9\u0bcd\u0bb1\u0bc1-\u0bb5\u0bc8\u0ba4\u0bcd \u0ba4\u0bbf\u0bb1\u0b95\u0bcd\u0b95 Shift+Enter", "Rich Text Area. Press ALT-0 for help.": "\u0b89\u0baf\u0bb0\u0bcd \u0b89\u0bb0\u0bc8 \u0baa\u0b95\u0bc1\u0ba4\u0bbf. \u0b89\u0ba4\u0bb5\u0bbf\u0b95\u0bcd\u0b95\u0bc1 ALT-0", "System Font": "\u0ba4\u0bca\u0b95\u0bc1\u0ba4\u0bbf \u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0bb0\u0bc1", "Failed to upload image: {0}": "\u0baa\u0b9f\u0bae\u0bcd \u0baa\u0ba4\u0bbf\u0bb5\u0bc7\u0bb1\u0bcd\u0bb1\u0bb2\u0bcd \u0ba4\u0bcb\u0bb2\u0bcd\u0bb5\u0bbf\u0baf\u0bc1\u0bb1\u0bcd\u0bb1\u0ba4\u0bc1: {0}", "Failed to load plugin: {0} from url {1}": "\u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bbf \u0b8f\u0bb1\u0bcd\u0bb1\u0bc1\u0ba4\u0bb2\u0bcd \u0ba4\u0bcb\u0bb2\u0bcd\u0bb5\u0bbf\u0baf\u0bc1\u0bb1\u0bcd\u0bb1\u0ba4\u0bc1: {0} - {1} \u0b87\u0ba3\u0bc8\u0baf\u0bae\u0bc1\u0b95\u0bb5\u0bb0\u0bbf\u0baf\u0bbf\u0bb2\u0bbf\u0bb0\u0bc1\u0ba8\u0bcd\u0ba4\u0bc1", "Failed to load plugin url: {0}": "\u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bbf \u0b87\u0ba3\u0bc8\u0baf\u0bae\u0bc1\u0b95\u0bb5\u0bb0\u0bbf \u0b8f\u0bb1\u0bcd\u0bb1\u0bc1\u0ba4\u0bb2\u0bcd \u0ba4\u0bcb\u0bb2\u0bcd\u0bb5\u0bbf\u0baf\u0bc1\u0bb1\u0bcd\u0bb1\u0ba4\u0bc1: {0}", "Failed to initialize plugin: {0}": "\u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bbf \u0ba4\u0bc1\u0bb5\u0b99\u0bcd\u0b95\u0bc1\u0ba4\u0bb2\u0bcd \u0ba4\u0bcb\u0bb2\u0bcd\u0bb5\u0bbf\u0baf\u0bc1\u0bb1\u0bcd\u0bb1\u0ba4\u0bc1: {0}", "example": "\u0b89\u0ba4\u0bbe\u0bb0\u0ba3\u0bae\u0bcd", "Search": "\u0ba4\u0bc7\u0b9f\u0bc1\u0b95", "All": "\u0b85\u0ba9\u0bc8\u0ba4\u0bcd\u0ba4\u0bc1\u0bae\u0bcd", "Currency": "\u0b9a\u0bc6\u0bb2\u0bbe\u0bb5\u0ba3\u0bbf (Currency)", "Text": "\u0b89\u0bb0\u0bc8", "Quotations": "\u0bae\u0bc7\u0bb1\u0bcd\u0b95\u0bc7\u0bbe\u0bb3\u0bcd\u0b95\u0bb3\u0bcd", "Mathematical": "\u0b95\u0ba3\u0b95\u0bcd\u0b95\u0bbf\u0baf\u0bb2\u0bcd", "Extended Latin": "\u0ba8\u0bc0\u0b9f\u0bcd\u0b9f\u0bbf\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f \u0b87\u0bb2\u0ba4\u0bcd\u0ba4\u0bc0\u0ba9\u0bcd", "Symbols": "\u0b87\u0b9f\u0bc1\u0b95\u0bc1\u0bb1\u0bbf\u0b95\u0bb3\u0bcd", "Arrows": "\u0b85\u0bae\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bcd", "User Defined": "\u0baa\u0baf\u0ba9\u0bb0\u0bcd \u0bb5\u0bb0\u0bc8\u0baf\u0bb1\u0bc1\u0ba4\u0bcd\u0ba4", "dollar sign": "dollar \u0b95\u0bc1\u0bb1\u0bbf", "currency sign": "\u0b9a\u0bc6\u0bb2\u0bbe\u0bb5\u0ba3\u0bbf\u0b95\u0bcd \u0b95\u0bc1\u0bb1\u0bbf", "euro-currency sign": "euro-currency \u0b95\u0bc1\u0bb1\u0bbf", "colon sign": "colon \u0b95\u0bc1\u0bb1\u0bbf", "cruzeiro sign": "cruzeiro \u0b95\u0bc1\u0bb1\u0bbf", "french franc sign": "french franc \u0b95\u0bc1\u0bb1\u0bbf", "lira sign": "lira \u0b95\u0bc1\u0bb1\u0bbf", "mill sign": "mill \u0b95\u0bc1\u0bb1\u0bbf", "naira sign": "naira \u0b95\u0bc1\u0bb1\u0bbf", "peseta sign": "peseta \u0b95\u0bc1\u0bb1\u0bbf", "rupee sign": "rupee \u0b95\u0bc1\u0bb1\u0bbf", "won sign": "won \u0b95\u0bc1\u0bb1\u0bbf", "new sheqel sign": "new sheqel \u0b95\u0bc1\u0bb1\u0bbf", "dong sign": "dong \u0b95\u0bc1\u0bb1\u0bbf", "kip sign": "kip \u0b95\u0bc1\u0bb1\u0bbf", "tugrik sign": "tugrik \u0b95\u0bc1\u0bb1\u0bbf", "drachma sign": "drachma \u0b95\u0bc1\u0bb1\u0bbf", "german penny symbol": "german penny \u0b87\u0b9f\u0bc1\u0b95\u0bc1\u0bb1\u0bbf", "peso sign": "peso \u0b95\u0bc1\u0bb1\u0bbf", "guarani sign": "guarani \u0b95\u0bc1\u0bb1\u0bbf", "austral sign": "austral \u0b95\u0bc1\u0bb1\u0bbf", "hryvnia sign": "hryvnia \u0b95\u0bc1\u0bb1\u0bbf", "cedi sign": "cedi \u0b95\u0bc1\u0bb1\u0bbf", "livre tournois sign": "livre tournois \u0b95\u0bc1\u0bb1\u0bbf", "spesmilo sign": "spesmilo \u0b95\u0bc1\u0bb1\u0bbf", "tenge sign": "tenge \u0b95\u0bc1\u0bb1\u0bbf", "indian rupee sign": "indian rupee \u0b95\u0bc1\u0bb1\u0bbf", "turkish lira sign": "turkish lira \u0b95\u0bc1\u0bb1\u0bbf", "nordic mark sign": "nordic mark \u0b95\u0bc1\u0bb1\u0bbf", "manat sign": "manat \u0b95\u0bc1\u0bb1\u0bbf", "ruble sign": "ruble \u0b95\u0bc1\u0bb1\u0bbf", "yen character": "yen \u0b89\u0bb0\u0bc1", "yuan character": "yuan \u0b89\u0bb0\u0bc1", "yuan character, in hong kong and taiwan": "yuan \u0b89\u0bb0\u0bc1, \u0bb9\u0bbe\u0b99\u0bcd\u0b95\u0bbe\u0b99\u0bcd \u0bae\u0bb1\u0bcd\u0bb1\u0bc1\u0bae\u0bcd \u0ba4\u0bbe\u0baf\u0bcd\u0bb5\u0bbe\u0ba9\u0bcd \u0b87\u0bb2\u0bcd", "yen\/yuan character variant one": "yen\/yuan \u0b89\u0bb0\u0bc1 \u0bae\u0bbe\u0bb1\u0bc1\u0baa\u0bbe\u0b9f\u0bc1", "Loading emoticons...": "\u0b89\u0ba3\u0bb0\u0bcd\u0b9a\u0bcd\u0b9a\u0bbf\u0baa\u0bcd\u0baa\u0b9f\u0bbf\u0bae\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b8f\u0bb1\u0bcd\u0bb1\u0baa\u0bcd\u0baa\u0b9f\u0bc1\u0b95\u0bbf\u0ba9\u0bcd\u0bb1\u0ba9...", "Could not load emoticons": "\u0b89\u0ba3\u0bb0\u0bcd\u0b9a\u0bcd\u0b9a\u0bbf\u0baa\u0bcd\u0baa\u0b9f\u0bbf\u0bae\u0b99\u0bcd\u0b95\u0bb3\u0bc8 \u0b8f\u0bb1\u0bcd\u0bb1 \u0bae\u0bc1\u0b9f\u0bbf\u0baf\u0bb5\u0bbf\u0bb2\u0bcd\u0bb2\u0bc8", "People": "\u0bae\u0b95\u0bcd\u0b95\u0bb3\u0bcd", "Animals and Nature": "\u0bae\u0bbf\u0bb0\u0bc1\u0b95\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0bae\u0bb1\u0bcd\u0bb1\u0bc1\u0bae\u0bcd \u0b87\u0baf\u0bb1\u0bcd\u0b95\u0bc8", "Food and Drink": "\u0b89\u0ba3\u0bb5\u0bc1 \u0bae\u0bb1\u0bcd\u0bb1\u0bc1\u0bae\u0bcd \u0baa\u0bbe\u0ba9\u0bae\u0bcd", "Activity": "\u0b9a\u0bc6\u0baf\u0bb1\u0bcd\u0baa\u0bbe\u0b9f\u0bc1", "Travel and Places": "\u0baa\u0baf\u0ba3\u0bae\u0bcd \u0bae\u0bb1\u0bcd\u0bb1\u0bc1\u0bae\u0bcd \u0b87\u0b9f\u0b99\u0bcd\u0b95\u0bb3\u0bcd", "Objects": "\u0baa\u0bca\u0bb0\u0bc1\u0b9f\u0bcd\u0b95\u0bb3\u0bcd", "Flags": "\u0b95\u0bca\u0b9f\u0bbf\u0b95\u0bb3\u0bcd", "Characters": "\u0b89\u0bb0\u0bc1\u0b95\u0bcd\u0b95\u0bb3\u0bcd", "Characters (no spaces)": "\u0b89\u0bb0\u0bc1\u0b95\u0bcd\u0b95\u0bb3\u0bcd (\u0b87\u0b9f\u0bc8\u0bb5\u0bc6\u0bb3\u0bbf\u0b95\u0bb3\u0bcd \u0b87\u0bb2\u0bcd\u0bb2\u0bc8)", "{0} characters": "{0} \u0b89\u0bb0\u0bc1\u0b95\u0bcd\u0b95\u0bb3\u0bcd", "Error: Form submit field collision.": "\u0baa\u0bbf\u0bb4\u0bc8: \u0baa\u0b9f\u0bbf\u0bb5\u0bae\u0bcd \u0b9a\u0bae\u0bb0\u0bcd\u0baa\u0bcd\u0baa\u0bbf\u0ba4\u0bcd\u0ba4\u0bb2\u0bcd \u0baa\u0bc1\u0bb2\u0bae\u0bcd \u0bae\u0bcb\u0ba4\u0bb2\u0bcd.", "Error: No form element found.": "\u0baa\u0bbf\u0bb4\u0bc8: \u0baa\u0bc1\u0bb2\u0bae\u0bcd \u0bae\u0bc2\u0bb2\u0b95\u0bae\u0bcd \u0b8e\u0ba4\u0bc1\u0bb5\u0bc1\u0bae\u0bcd \u0b95\u0bbe\u0ba3\u0bb5\u0bbf\u0bb2\u0bcd\u0bb2\u0bc8.", "Update": "\u0baa\u0bc1\u0ba4\u0bc1\u0baa\u0bcd\u0baa\u0bbf\u0b95\u0bcd\u0b95", "Color swatch": "\u0ba8\u0bbf\u0bb1\u0b9a\u0bcd \u0b9a\u0bcb\u0ba4\u0ba9\u0bc8\u0b95\u0bcd\u0b95\u0bb2\u0bb5\u0bc8", "Turquoise": "\u0ba8\u0bc0\u0bb2\u0baa\u0bcd\u0baa\u0b9a\u0bcd\u0b9a\u0bc8", "Green": "\u0baa\u0b9a\u0bcd\u0b9a\u0bc8", "Blue": "\u0ba8\u0bc0\u0bb2\u0bae\u0bcd", "Purple": "\u0b8a\u0ba4\u0bbe", "Navy Blue": "\u0b95\u0b9f\u0bb1\u0bcd\u0baa\u0b9f\u0bc8 \u0ba8\u0bc0\u0bb2\u0bae\u0bcd", "Dark Turquoise": "\u0b85\u0b9f\u0bb0\u0bcd \u0ba8\u0bc0\u0bb2\u0baa\u0bcd\u0baa\u0b9a\u0bcd\u0b9a\u0bc8", "Dark Green": "\u0b85\u0b9f\u0bb0\u0bcd \u0baa\u0b9a\u0bcd\u0b9a\u0bc8", "Medium Blue": "\u0ba8\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0bb0 \u0ba8\u0bc0\u0bb2\u0bae\u0bcd", "Medium Purple": "\u0ba8\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0bb0 \u0b8a\u0ba4\u0bbe", "Midnight Blue": "\u0ba8\u0bb3\u0bcd\u0bb3\u0bbf\u0bb0\u0bb5\u0bc1 \u0ba8\u0bc0\u0bb2\u0bae\u0bcd", "Yellow": "\u0bae\u0b9e\u0bcd\u0b9a\u0bb3\u0bcd", "Orange": "\u0b9a\u0bbf\u0bb5\u0ba8\u0bcd\u0ba4 \u0bae\u0b9e\u0bcd\u0b9a\u0bb3\u0bcd", "Red": "\u0b9a\u0bbf\u0bb5\u0baa\u0bcd\u0baa\u0bc1", "Light Gray": "\u0bb5\u0bc6\u0bb3\u0bbf\u0bb0\u0bcd \u0b9a\u0bbe\u0bae\u0bcd\u0baa\u0bb2\u0bcd", "Gray": "\u0b9a\u0bbe\u0bae\u0bcd\u0baa\u0bb2\u0bcd", "Dark Yellow": "\u0b85\u0b9f\u0bb0\u0bcd \u0bae\u0b9e\u0bcd\u0b9a\u0bb3\u0bcd", "Dark Orange": "\u0b85\u0b9f\u0bb0\u0bcd \u0b9a\u0bbf\u0bb5\u0ba8\u0bcd\u0ba4 \u0bae\u0b9e\u0bcd\u0b9a\u0bb3\u0bcd", "Dark Red": "\u0b85\u0b9f\u0bb0\u0bcd \u0b9a\u0bbf\u0bb5\u0baa\u0bcd\u0baa\u0bc1", "Medium Gray": "\u0ba8\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0bb0 \u0b9a\u0bbe\u0bae\u0bcd\u0baa\u0bb2\u0bcd", "Dark Gray": "\u0b85\u0b9f\u0bb0\u0bcd \u0b9a\u0bbe\u0bae\u0bcd\u0baa\u0bb2\u0bcd", "Light Green": "\u0bb5\u0bc6\u0bb3\u0bbf\u0bb0\u0bcd \u0baa\u0b9a\u0bcd\u0b9a\u0bc8", "Light Yellow": "\u0bb5\u0bc6\u0bb3\u0bbf\u0bb0\u0bcd \u0bae\u0b9e\u0bcd\u0b9a\u0bb3\u0bcd", "Light Red": "\u0bb5\u0bc6\u0bb3\u0bbf\u0bb0\u0bcd\u00a0\u0b9a\u0bbf\u0bb5\u0baa\u0bcd\u0baa\u0bc1", "Light Purple": "\u0bb5\u0bc6\u0bb3\u0bbf\u0bb0\u0bcd \u0b8a\u0ba4\u0bbe", "Light Blue": "\u0bb5\u0bc6\u0bb3\u0bbf\u0bb0\u0bcd \u0ba8\u0bc0\u0bb2\u0bae\u0bcd", "Dark Purple": "\u0b85\u0b9f\u0bb0\u0bcd \u0b8a\u0ba4\u0bbe", "Dark Blue": "\u0b85\u0b9f\u0bb0\u0bcd \u0ba8\u0bc0\u0bb2\u0bae\u0bcd", "Black": "\u0b95\u0bb0\u0bc1\u0baa\u0bcd\u0baa\u0bc1", "White": "\u0bb5\u0bc6\u0bb3\u0bcd\u0bb3\u0bc8", "Switch to or from fullscreen mode": "\u0bae\u0bc1\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bbf\u0bb0\u0bc8 \u0bae\u0bc1\u0bb1\u0bc8\u0bae\u0bc8\u0b95\u0bcd\u0b95\u0bc1\/\u0bae\u0bc1\u0bb1\u0bc8\u0bae\u0bc8\u0baf\u0bbf\u0bb2\u0bbf\u0bb0\u0bc1\u0ba8\u0bcd\u0ba4\u0bc1 \u0bae\u0bbe\u0bb1\u0bc1\u0b95", "Open help dialog": "\u0b89\u0ba4\u0bb5\u0bbf \u0b89\u0bb0\u0bc8\u0baf\u0bbe\u0b9f\u0bb2\u0bcd \u0ba4\u0bbf\u0bb1\u0b95\u0bcd\u0b95", "history": "\u0bb5\u0bb0\u0bb2\u0bbe\u0bb1\u0bc1", "styles": "\u0baa\u0bbe\u0ba3\u0bbf\u0b95\u0bb3\u0bcd", "formatting": "\u0bb5\u0b9f\u0bbf\u0bb5\u0bae\u0bc8\u0ba4\u0bcd\u0ba4\u0bb2\u0bcd", "alignment": "\u0b9a\u0bc0\u0bb0\u0bae\u0bc8\u0bb5\u0bc1", "indentation": "\u0b89\u0bb3\u0bcd\u0ba4\u0bb3\u0bcd\u0bb3\u0bc1\u0ba4\u0bb2\u0bcd", "permanent pen": "\u0ba8\u0bbf\u0bb0\u0ba8\u0bcd\u0ba4\u0bb0\u0baa\u0bcd \u0baa\u0bc7\u0ba9\u0bbe", "comments": "\u0b95\u0bb0\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0b95\u0bb3\u0bcd", "Format Painter": "\u0bb5\u0b9f\u0bbf\u0bb5\u0bae\u0bc8\u0baa\u0bcd\u0baa\u0bc1 \u0baa\u0bc2\u0b9a\u0bbe\u0bb3\u0ba9\u0bcd", "Insert\/edit iframe": "iframe \u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95\/\u0ba4\u0bca\u0b95\u0bc1\u0b95\u0bcd\u0b95", "Capitalization": "\u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bbe\u0b95\u0bcd\u0b95\u0bae\u0bcd", "lowercase": "\u0b9a\u0bbf\u0bb1\u0bcd\u0bb1\u0bc6\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1", "UPPERCASE": "\u0baa\u0bc7\u0bb0\u0bc6\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1", "Title Case": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 \u0bb5\u0b9f\u0bbf\u0bb5\u0bae\u0bcd", "Permanent Pen Properties": "\u0ba8\u0bbf\u0bb0\u0ba8\u0bcd\u0ba4\u0bb0\u0baa\u0bcd \u0baa\u0bc7\u0ba9\u0bbe \u0baa\u0ba3\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bcd", "Permanent pen properties...": "\u0ba8\u0bbf\u0bb0\u0ba8\u0bcd\u0ba4\u0bb0\u0baa\u0bcd \u0baa\u0bc7\u0ba9\u0bbe \u0baa\u0ba3\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bcd...", "Font": "\u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0bb0\u0bc1", "Size": "\u0b85\u0bb3\u0bb5\u0bc1", "More...": "\u0bae\u0bc7\u0bb2\u0bc1\u0bae\u0bcd...", "Spellcheck Language": "\u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0baa\u0bcd\u0baa\u0bbf\u0bb4\u0bc8 \u0b9a\u0bb0\u0bbf\u0baa\u0bbe\u0bb0\u0bcd\u0baa\u0bcd\u0baa\u0bc1 \u0bae\u0bca\u0bb4\u0bbf", "Select...": "\u0ba4\u0bc7\u0bb0\u0bcd\u0bb5\u0bc1 \u0b9a\u0bc6\u0baf\u0bcd\u0b95...", "Preferences": "\u0bb5\u0bbf\u0bb0\u0bc1\u0baa\u0bcd\u0baa\u0b99\u0bcd\u0b95\u0bb3\u0bcd", "Yes": "\u0b86\u0bae\u0bcd", "No": "\u0b87\u0bb2\u0bcd\u0bb2\u0bc8", "Keyboard Navigation": "\u0bb5\u0bbf\u0b9a\u0bc8\u0baa\u0bcd\u0baa\u0bb2\u0b95\u0bc8 \u0bb5\u0bb4\u0bbf\u0b9a\u0bcd\u0b9a\u0bc6\u0bb2\u0bc1\u0ba4\u0bcd\u0ba4\u0bb2\u0bcd", "Version": "\u0baa\u0ba4\u0bbf\u0baa\u0bcd\u0baa\u0bc1", "Anchor": "\u0ba8\u0b99\u0bcd\u0b95\u0bc2\u0bb0\u0bae\u0bcd", "Special character": "\u0b9a\u0bbf\u0bb1\u0baa\u0bcd\u0baa\u0bc1 \u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0bb0\u0bc1", "Code sample": "\u0b95\u0bc1\u0bb1\u0bbf\u0baf\u0bc0\u0b9f\u0bc1 \u0bae\u0bbe\u0ba4\u0bbf\u0bb0\u0bbf", "Color": "\u0ba8\u0bbf\u0bb1\u0bae\u0bcd", "Emoticons": "\u0b89\u0ba3\u0bb0\u0bcd\u0b9a\u0bcd\u0b9a\u0bbf\u0baa\u0bcd\u0baa\u0b9f\u0bbf\u0bae\u0b99\u0bcd\u0b95\u0bb3\u0bcd", "Document properties": "\u0b86\u0bb5\u0ba3\u0ba4\u0bcd\u0ba4\u0bbf\u0ba9\u0bcd \u0baa\u0ba3\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bcd", "Image": "\u0baa\u0b9f\u0bae\u0bcd", "Insert link": "\u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc1 \u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95", "Target": "\u0b87\u0bb2\u0b95\u0bcd\u0b95\u0bc1", "Link": "\u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc1", "Poster": "\u0b9a\u0bc1\u0bb5\u0bb0\u0bca\u0b9f\u0bcd\u0b9f\u0bbf", "Media": "\u0b8a\u0b9f\u0b95\u0bae\u0bcd", "Print": "\u0b85\u0b9a\u0bcd\u0b9a\u0bbf\u0b9f\u0bc1\u0b95", "Prev": "\u0bae\u0bc1\u0ba8\u0bcd\u0ba4\u0bc8\u0baf", "Find and replace": "\u0b95\u0ba3\u0bcd\u0b9f\u0bc1\u0baa\u0bbf\u0b9f\u0bbf\u0ba4\u0bcd\u0ba4\u0bc1 \u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bc1\u0b95", "Whole words": "\u0bae\u0bc1\u0bb4\u0bc1 \u0b9a\u0bca\u0bb1\u0bcd\u0b95\u0bb3\u0bcd", "Spellcheck": "\u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0baa\u0bcd\u0baa\u0bbf\u0bb4\u0bc8\u0baf\u0bc8 \u0b9a\u0bb0\u0bbf\u0baa\u0bbe\u0bb0\u0bcd\u0b95\u0bcd\u0b95", "Caption": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1", "Insert template": "\u0bb5\u0bbe\u0bb0\u0bcd\u0baa\u0bcd\u0baa\u0bc1\u0bb0\u0bc1 \u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95" }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/tinymce/langs/ta_IN.js ================================================ tinymce.addI18n('ta_IN',{ "Redo": "\u0bae\u0bc0\u0ba3\u0bcd\u0b9f\u0bc1\u0bae\u0bcd \u0b9a\u0bc6\u0baf\u0bcd\u0b95", "Undo": "\u0b9a\u0bc6\u0baf\u0bb2\u0bcd\u0ba4\u0bb5\u0bbf\u0bb0\u0bcd\u0b95\u0bcd\u0b95", "Cut": "\u0bb5\u0bc6\u0b9f\u0bcd\u0b9f\u0bc1\u0b95", "Copy": "\u0ba8\u0b95\u0bb2\u0bc6\u0b9f\u0bc1\u0b95\u0bcd\u0b95", "Paste": "\u0b92\u0b9f\u0bcd\u0b9f\u0bc1\u0b95", "Select all": "\u0b85\u0ba9\u0bc8\u0ba4\u0bcd\u0ba4\u0bc8\u0baf\u0bc1\u0bae\u0bcd \u0ba4\u0bc7\u0bb0\u0bcd\u0bb5\u0bc1 \u0b9a\u0bc6\u0baf\u0bcd\u0b95", "New document": "\u0baa\u0bc1\u0ba4\u0bbf\u0baf \u0b86\u0bb5\u0ba3\u0bae\u0bcd", "Ok": "\u0b9a\u0bb0\u0bbf", "Cancel": "\u0bb0\u0ba4\u0bcd\u0ba4\u0bc1 \u0b9a\u0bc6\u0baf\u0bcd\u0b95", "Visual aids": "\u0b95\u0bbe\u0b9f\u0bcd\u0b9a\u0bbf\u0ba4\u0bcd \u0ba4\u0bc1\u0ba3\u0bc8\u0baf\u0ba9\u0bcd\u0b95\u0bb3\u0bcd", "Bold": "\u0ba4\u0b9f\u0bbf\u0baa\u0bcd\u0baa\u0bc1", "Italic": "\u0b9a\u0bbe\u0baf\u0bcd\u0bb5\u0bc1", "Underline": "\u0b85\u0b9f\u0bbf\u0b95\u0bcd\u0b95\u0bcb\u0b9f\u0bc1", "Strikethrough": "\u0ba8\u0b9f\u0bc1\u0b95\u0bcd\u0b95\u0bcb\u0b9f\u0bc1", "Superscript": "\u0bae\u0bc7\u0bb2\u0bcd\u0b92\u0b9f\u0bcd\u0b9f\u0bc1", "Subscript": "\u0b95\u0bc0\u0bb4\u0bcd\u0b92\u0b9f\u0bcd\u0b9f\u0bc1", "Clear formatting": "\u0bb5\u0b9f\u0bbf\u0bb5\u0bae\u0bc8\u0baa\u0bcd\u0baa\u0bc1 \u0b85\u0bb4\u0bbf\u0b95\u0bcd\u0b95", "Align left": "\u0b87\u0b9f\u0ba4\u0bc1 \u0b9a\u0bc0\u0bb0\u0bae\u0bc8", "Align center": "\u0bae\u0bc8\u0baf \u0b9a\u0bc0\u0bb0\u0bae\u0bc8", "Align right": "\u0bb5\u0bb2\u0ba4\u0bc1 \u0b9a\u0bc0\u0bb0\u0bae\u0bc8", "Justify": "\u0ba8\u0bc7\u0bb0\u0bcd\u0ba4\u0bcd\u0ba4\u0bbf \u0b9a\u0bc6\u0baf\u0bcd\u0b95", "Bullet list": "\u0baa\u0bca\u0b9f\u0bcd\u0b9f\u0bbf\u0b9f\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f \u0baa\u0b9f\u0bcd\u0b9f\u0bbf\u0baf\u0bb2\u0bcd", "Numbered list": "\u0b8e\u0ba3\u0bcd\u0ba3\u0bbf\u0b9f\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f \u0baa\u0b9f\u0bcd\u0b9f\u0bbf\u0baf\u0bb2\u0bcd", "Decrease indent": "\u0b89\u0bb3\u0bcd\u0ba4\u0bb3\u0bcd\u0bb3\u0bc1\u0ba4\u0bb2\u0bc8 \u0b95\u0bc1\u0bb1\u0bc8\u0b95\u0bcd\u0b95", "Increase indent": "\u0b89\u0bb3\u0bcd\u0ba4\u0bb3\u0bcd\u0bb3\u0bc1\u0ba4\u0bb2\u0bc8 \u0b85\u0ba4\u0bbf\u0b95\u0bb0\u0bbf\u0b95\u0bcd\u0b95", "Close": "\u0bae\u0bc2\u0b9f\u0bc1\u0b95", "Formats": "\u0bb5\u0b9f\u0bbf\u0bb5\u0bae\u0bc8\u0baa\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bcd", "Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u0ba8\u0b95\u0bb2\u0b95\u0ba4\u0bcd\u0ba4\u0bbf\u0bb1\u0bcd\u0b95\u0bc1 \u0ba8\u0bc7\u0bb0\u0b9f\u0bbf \u0b85\u0ba3\u0bc1\u0b95\u0bb2\u0bc8 \u0ba4\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b89\u0bb2\u0bbe\u0bb5\u0bbf \u0b86\u0ba4\u0bb0\u0bbf\u0b95\u0bcd\u0b95\u0bb5\u0bbf\u0bb2\u0bcd\u0bb2\u0bc8. \u0b86\u0b95\u0bb5\u0bc7 \u0bb5\u0bbf\u0b9a\u0bc8\u0baa\u0bcd\u0baa\u0bb2\u0b95\u0bc8 \u0b95\u0bc1\u0bb1\u0bc1\u0b95\u0bcd\u0b95\u0bc1\u0bb5\u0bb4\u0bbf\u0b95\u0bb3\u0bbe\u0ba9 Ctrl+X\/C\/V \u0b87\u0bb5\u0bb1\u0bcd\u0bb1\u0bc8 \u0ba4\u0baf\u0bb5\u0bc1 \u0b9a\u0bc6\u0baf\u0bcd\u0ba4\u0bc1 \u0baa\u0baf\u0ba9\u0bcd\u0baa\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0b95.", "Headers": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bcd", "Header 1": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 1", "Header 2": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 2", "Header 3": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 3", "Header 4": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 4", "Header 5": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 5", "Header 6": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 6", "Headings": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bcd", "Heading 1": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 1", "Heading 2": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 2", "Heading 3": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 3", "Heading 4": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 4", "Heading 5": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 5", "Heading 6": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 6", "Preformatted": "\u0bae\u0bc1\u0ba9\u0bcd\u0bb5\u0b9f\u0bbf\u0bb5\u0bae\u0bc8\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0ba4\u0bc1", "Div": "\u0baa\u0bbf\u0bb0\u0bbf\u0bb5\u0bc1 (Div)", "Pre": "\u0bae\u0bc1\u0ba9\u0bcd \u0bb5\u0b9f\u0bbf\u0bb5\u0bae\u0bc8\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0ba4\u0bc1 (Pre)", "Code": "\u0b95\u0bc1\u0bb1\u0bbf\u0baf\u0bc0\u0b9f\u0bc1", "Paragraph": "\u0baa\u0ba4\u0bcd\u0ba4\u0bbf", "Blockquote": "\u0ba4\u0bca\u0b95\u0bc1\u0ba4\u0bbf \u0bae\u0bc7\u0bb1\u0bcd\u0b95\u0bcb\u0bb3\u0bcd", "Inline": "\u0b89\u0bb3\u0bcd\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8", "Blocks": "\u0ba4\u0bca\u0b95\u0bc1\u0ba4\u0bbf\u0b95\u0bb3\u0bcd", "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u0b87\u0baf\u0bb2\u0bcd\u0baa\u0bc1 \u0b89\u0bb0\u0bc8 \u0bae\u0bc1\u0bb1\u0bc8\u0bae\u0bc8\u0baf\u0bbf\u0bb2\u0bcd \u0ba4\u0bb1\u0bcd\u0baa\u0bcb\u0ba4\u0bc1 \u0b92\u0b9f\u0bcd\u0b9f\u0bc1\u0ba4\u0bb2\u0bcd \u0b89\u0bb3\u0bcd\u0bb3\u0ba4\u0bc1. \u0ba4\u0bbe\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b87\u0ba8\u0bcd\u0ba4 \u0bb5\u0bbf\u0bb0\u0bc1\u0baa\u0bcd\u0baa\u0bc8 \u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bc1\u0bae\u0bcd \u0bb5\u0bb0\u0bc8 \u0b89\u0bb3\u0bcd\u0bb3\u0b9f\u0b95\u0bcd\u0b95\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b87\u0baf\u0bb2\u0bcd\u0baa\u0bc1 \u0b89\u0bb0\u0bc8\u0baf\u0bbe\u0b95 \u0b92\u0b9f\u0bcd\u0b9f\u0baa\u0bcd\u0baa\u0b9f\u0bc1\u0bae\u0bcd.", "Fonts": "\u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0bb0\u0bc1\u0b95\u0bcd\u0b95\u0bb3\u0bcd", "Font Sizes": "\u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0bb0\u0bc1 \u0b85\u0bb3\u0bb5\u0bc1\u0b95\u0bb3\u0bcd", "Class": "Class", "Browse for an image": "\u0b92\u0bb0\u0bc1 \u0baa\u0b9f\u0ba4\u0bcd\u0ba4\u0bc1\u0b95\u0bcd\u0b95\u0bc1 \u0b89\u0bb2\u0bbe\u0bb5\u0bc1\u0b95", "OR": "\u0b85\u0bb2\u0bcd\u0bb2\u0ba4\u0bc1", "Drop an image here": "\u0b92\u0bb0\u0bc1 \u0baa\u0b9f\u0ba4\u0bcd\u0ba4\u0bc8 \u0b87\u0b99\u0bcd\u0b95\u0bc1 \u0b87\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0baa\u0bcd \u0baa\u0bcb\u0b9f\u0bb5\u0bc1\u0bae\u0bcd", "Upload": "\u0baa\u0ba4\u0bbf\u0bb5\u0bc7\u0bb1\u0bcd\u0bb1\u0bc1\u0b95", "Block": "\u0ba4\u0bca\u0b95\u0bc1\u0ba4\u0bbf", "Align": "\u0b9a\u0bc0\u0bb0\u0bae\u0bc8", "Default": "\u0b89\u0bb3\u0bcd\u0bb3\u0bbf\u0bb0\u0bc1\u0baa\u0bcd\u0baa\u0bc1", "Circle": "\u0bb5\u0b9f\u0bcd\u0b9f\u0bae\u0bcd", "Disc": "\u0bb5\u0b9f\u0bcd\u0b9f\u0bc1", "Square": "\u0b9a\u0ba4\u0bc1\u0bb0\u0bae\u0bcd", "Lower Alpha": "\u0b95\u0bc0\u0bb4\u0bcd \u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1", "Lower Greek": "\u0b95\u0bc0\u0bb4\u0bcd \u0b95\u0bbf\u0bb0\u0bc7\u0b95\u0bcd\u0b95\u0bae\u0bcd", "Lower Roman": "\u0b95\u0bc0\u0bb4\u0bcd \u0bb0\u0bcb\u0bae\u0bbe\u0ba9\u0bbf\u0baf\u0bae\u0bcd", "Upper Alpha": "\u0bae\u0bc7\u0bb2\u0bcd \u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1", "Upper Roman": "\u0bae\u0bc7\u0bb2\u0bcd \u0bb0\u0bcb\u0bae\u0bbe\u0ba9\u0bbf\u0baf\u0bae\u0bcd", "Anchor...": "\u0ba8\u0b99\u0bcd\u0b95\u0bc2\u0bb0\u0bae\u0bcd...", "Name": "\u0baa\u0bc6\u0baf\u0bb0\u0bcd", "Id": "Id", "Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Id \u0b86\u0ba9\u0ba4\u0bc1 \u0b92\u0bb0\u0bc1 \u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bbf\u0bb2\u0bcd \u0ba4\u0bca\u0b9f\u0b99\u0bcd\u0b95 \u0bb5\u0bc7\u0ba3\u0bcd\u0b9f\u0bc1\u0bae\u0bcd; \u0b87\u0ba4\u0ba9\u0bc8\u0ba4\u0bcd \u0ba4\u0bca\u0b9f\u0bb0\u0bcd\u0ba8\u0bcd\u0ba4\u0bc1 \u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0b95\u0bcd\u0b95\u0bb3\u0bcd, \u0b8e\u0ba3\u0bcd\u0b95\u0bb3\u0bcd, \u0b87\u0b9f\u0bc8\u0b95\u0bcd\u0b95\u0bc7\u0bbe\u0b9f\u0bc1\u0b95\u0bb3\u0bcd (-), \u0baa\u0bc1\u0bb3\u0bcd\u0bb3\u0bbf\u0b95\u0bb3\u0bcd (.), \u0bae\u0bc1\u0b95\u0bcd\u0b95\u0bbe\u0bb1\u0bcd\u0baa\u0bc1\u0bb3\u0bcd\u0bb3\u0bbf\u0b95\u0bb3\u0bcd (:) \u0bae\u0bb1\u0bcd\u0bb1\u0bc1\u0bae\u0bcd \u0b85\u0b9f\u0bbf\u0b95\u0bcd\u0b95\u0bc7\u0bbe\u0b9f\u0bc1\u0b95\u0bb3\u0bcd (_) \u0bae\u0b9f\u0bcd\u0b9f\u0bc1\u0bae\u0bc7 \u0b87\u0bb0\u0bc1\u0ba4\u0bcd\u0ba4\u0bb2\u0bcd \u0bb5\u0bc7\u0ba3\u0bcd\u0b9f\u0bc1\u0bae\u0bcd.", "You have unsaved changes are you sure you want to navigate away?": "\u0b9a\u0bc7\u0bae\u0bbf\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bbe\u0ba4 \u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b89\u0bb3\u0bcd\u0bb3\u0ba9; \u0ba4\u0bbe\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b89\u0bb1\u0bc1\u0ba4\u0bbf\u0baf\u0bbe\u0b95 \u0bb5\u0bc6\u0bb3\u0bbf\u0baf\u0bc7\u0bb1 \u0bb5\u0bbf\u0bb0\u0bc1\u0bae\u0bcd\u0baa\u0bc1\u0b95\u0bbf\u0bb1\u0bc0\u0bb0\u0bcd\u0b95\u0bbe\u0bb3\u0bbe?", "Restore last draft": "\u0b95\u0b9f\u0ba8\u0bcd\u0ba4 \u0bb5\u0bb0\u0bc8\u0bb5\u0bc8 \u0bae\u0bc0\u0b9f\u0bcd\u0b9f\u0bc6\u0b9f\u0bc1\u0b95\u0bcd\u0b95", "Special character...": "\u0b9a\u0bbf\u0bb1\u0baa\u0bcd\u0baa\u0bc1 \u0b89\u0bb0\u0bc1...", "Source code": "\u0bae\u0bc2\u0bb2 \u0b95\u0bc1\u0bb1\u0bbf\u0baf\u0bc0\u0b9f\u0bc1", "Insert\/Edit code sample": "\u0b95\u0bc1\u0bb1\u0bbf\u0baf\u0bc0\u0b9f\u0bc1 \u0bae\u0bbe\u0ba4\u0bbf\u0bb0\u0bbf \u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bc1\u0b95\/\u0ba4\u0bca\u0b95\u0bc1\u0b95\u0bcd\u0b95", "Language": "\u0bae\u0bca\u0bb4\u0bbf", "Code sample...": "\u0b95\u0bc1\u0bb1\u0bbf\u0baf\u0bc0\u0b9f\u0bc1 \u0bae\u0bbe\u0ba4\u0bbf\u0bb0\u0bbf...", "Color Picker": "\u0ba8\u0bbf\u0bb1\u0ba4\u0bcd \u0ba4\u0bc6\u0bb0\u0bbf\u0bb5\u0bc1", "R": "R", "G": "G", "B": "B", "Left to right": "\u0b87\u0b9f\u0bae\u0bbf\u0bb0\u0bc1\u0ba8\u0bcd\u0ba4\u0bc1 \u0bb5\u0bb2\u0bae\u0bcd", "Right to left": "\u0bb5\u0bb2\u0bae\u0bbf\u0bb0\u0bc1\u0ba8\u0bcd\u0ba4\u0bc1 \u0b87\u0b9f\u0bae\u0bcd", "Emoticons...": "\u0b89\u0ba3\u0bb0\u0bcd\u0b9a\u0bcd\u0b9a\u0bbf\u0baa\u0bcd\u0baa\u0b9f\u0bbf\u0bae\u0b99\u0bcd\u0b95\u0bb3\u0bcd", "Metadata and Document Properties": "\u0bae\u0bc0\u0ba4\u0bcd\u0ba4\u0bb0\u0bb5\u0bc1 \u0bae\u0bb1\u0bcd\u0bb1\u0bc1\u0bae\u0bcd \u0b86\u0bb5\u0ba3\u0baa\u0bcd \u0baa\u0ba3\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bcd", "Title": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1", "Keywords": "\u0bae\u0bc1\u0ba4\u0ba9\u0bcd\u0bae\u0bc8\u0b9a\u0bcd\u0b9a\u0bca\u0bb1\u0bcd\u0b95\u0bb3\u0bcd", "Description": "\u0bb5\u0bbf\u0bb5\u0bb0\u0bae\u0bcd", "Robots": "\u0baa\u0bca\u0bb1\u0bbf\u0baf\u0ba9\u0bcd\u0b95\u0bb3\u0bcd (Robots)", "Author": "\u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bbe\u0bb3\u0bb0\u0bcd", "Encoding": "\u0b95\u0bc1\u0bb1\u0bbf\u0baf\u0bc0\u0b9f\u0bbe\u0b95\u0bcd\u0b95\u0bae\u0bcd", "Fullscreen": "\u0bae\u0bc1\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bbf\u0bb0\u0bc8", "Action": "\u0b9a\u0bc6\u0baf\u0bb2\u0bcd", "Shortcut": "\u0b95\u0bc1\u0bb1\u0bc1\u0b95\u0bcd\u0b95\u0bc1\u0bb5\u0bb4\u0bbf", "Help": "\u0b89\u0ba4\u0bb5\u0bbf", "Address": "\u0bae\u0bc1\u0b95\u0bb5\u0bb0\u0bbf", "Focus to menubar": "\u0baa\u0b9f\u0bcd\u0b9f\u0bbf\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0bc8\u0baf\u0bbf\u0bb2\u0bcd \u0b95\u0bb5\u0ba9\u0bae\u0bcd \u0b9a\u0bc6\u0bb2\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0b95", "Focus to toolbar": "\u0b95\u0bb0\u0bc1\u0bb5\u0bbf\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0bc8\u0baf\u0bbf\u0bb2\u0bcd \u0b95\u0bb5\u0ba9\u0bae\u0bcd \u0b9a\u0bc6\u0bb2\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0b95", "Focus to element path": "\u0bae\u0bc2\u0bb2\u0b95\u0baa\u0bcd \u0baa\u0bbe\u0ba4\u0bc8\u0baf\u0bbf\u0bb2\u0bcd \u0b95\u0bb5\u0ba9\u0bae\u0bcd \u0b9a\u0bc6\u0bb2\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0b95", "Focus to contextual toolbar": "\u0b9a\u0bc2\u0bb4\u0bcd\u0ba8\u0bbf\u0bb2\u0bc8 \u0b95\u0bb0\u0bc1\u0bb5\u0bbf\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0bc8\u0baf\u0bbf\u0bb2\u0bcd \u0b95\u0bb5\u0ba9\u0bae\u0bcd \u0b9a\u0bc6\u0bb2\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0b95", "Insert link (if link plugin activated)": "\u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc1 \u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95 (\u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc1 \u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bbf \u0b9a\u0bc6\u0baf\u0bb2\u0bbe\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0bbf\u0baf\u0bbf\u0bb0\u0bc1\u0ba8\u0bcd\u0ba4\u0bbe\u0bb2\u0bcd)", "Save (if save plugin activated)": "\u0b9a\u0bc7\u0bae\u0bbf\u0b95\u0bcd\u0b95 (\u0b9a\u0bc7\u0bae\u0bbf\u0baa\u0bcd\u0baa\u0bc1 \u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bbf \u0b9a\u0bc6\u0baf\u0bb2\u0bbe\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0bbf\u0baf\u0bbf\u0bb0\u0bc1\u0ba8\u0bcd\u0ba4\u0bbe\u0bb2\u0bcd)", "Find (if searchreplace plugin activated)": "\u0b95\u0ba3\u0bcd\u0b9f\u0bc1\u0baa\u0bbf\u0b9f\u0bbf\u0b95\u0bcd\u0b95 (\u0ba4\u0bc7\u0b9f\u0bbf\u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bb2\u0bcd \u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bbf \u0b9a\u0bc6\u0baf\u0bb2\u0bbe\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0bbf\u0baf\u0bbf\u0bb0\u0bc1\u0ba8\u0bcd\u0ba4\u0bbe\u0bb2\u0bcd)", "Plugins installed ({0}):": "\u0ba8\u0bbf\u0bb1\u0bc1\u0bb5\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0bc1\u0bb3\u0bcd\u0bb3 \u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bbf\u0b95\u0bb3\u0bcd ({0}):", "Premium plugins:": "\u0b89\u0baf\u0bb0\u0bcd\u0bae\u0ba4\u0bbf\u0baa\u0bcd\u0baa\u0bc1 \u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bbf\u0b95\u0bb3\u0bcd:", "Learn more...": "\u0bae\u0bc7\u0bb2\u0bc1\u0bae\u0bcd \u0b85\u0bb1\u0bbf\u0b95...", "You are using {0}": "\u0ba4\u0bbe\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0baa\u0baf\u0ba9\u0bcd\u0baa\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0bb5\u0ba4\u0bc1 {0}", "Plugins": "\u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bbf\u0b95\u0bb3\u0bcd", "Handy Shortcuts": "\u0b8e\u0bb3\u0bbf\u0ba4\u0bbf\u0bb2\u0bcd \u0b95\u0bc8\u0baf\u0bbe\u0bb3\u0b95\u0bcd\u0b95\u0bc2\u0b9f\u0bbf\u0baf \u0b95\u0bc1\u0bb1\u0bc1\u0b95\u0bcd\u0b95\u0bc1\u0bb5\u0bb4\u0bbf\u0b95\u0bb3\u0bcd", "Horizontal line": "\u0b95\u0bbf\u0b9f\u0bc8 \u0b95\u0bcb\u0b9f\u0bc1", "Insert\/edit image": "\u0baa\u0b9f\u0bae\u0bcd \u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bc1\u0b95\/\u0ba4\u0bca\u0b95\u0bc1\u0b95\u0bcd\u0b95", "Image description": "\u0baa\u0b9f \u0bb5\u0bbf\u0bb5\u0bb0\u0bae\u0bcd", "Source": "\u0bae\u0bc2\u0bb2\u0bae\u0bcd", "Dimensions": "\u0baa\u0bb0\u0bbf\u0bae\u0bbe\u0ba3\u0b99\u0bcd\u0b95\u0bb3\u0bcd", "Constrain proportions": "\u0bb5\u0bbf\u0b95\u0bbf\u0ba4\u0bbe\u0b9a\u0bcd\u0b9a\u0bbe\u0bb0\u0ba4\u0bcd\u0ba4\u0bbf\u0bb2\u0bcd \u0b95\u0b9f\u0bcd\u0b9f\u0bc1\u0baa\u0bcd\u0baa\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0b95", "General": "\u0baa\u0bca\u0ba4\u0bc1", "Advanced": "\u0bae\u0bc7\u0bae\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0ba4\u0bc1", "Style": "\u0baa\u0bbe\u0ba3\u0bbf", "Vertical space": "\u0ba8\u0bc6\u0b9f\u0bc1\u0ba4\u0bb3 \u0b87\u0b9f\u0bc8\u0bb5\u0bc6\u0bb3\u0bbf", "Horizontal space": "\u0b95\u0bbf\u0b9f\u0bc8\u0bae\u0b9f\u0bcd\u0b9f \u0b87\u0b9f\u0bc8\u0bb5\u0bc6\u0bb3\u0bbf", "Border": "\u0b95\u0bb0\u0bc8", "Insert image": "\u0baa\u0b9f\u0bae\u0bcd \u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bc1\u0b95", "Image...": "\u0baa\u0b9f\u0bae\u0bcd...", "Image list": "\u0baa\u0b9f\u0baa\u0bcd \u0baa\u0b9f\u0bcd\u0b9f\u0bbf\u0baf\u0bb2\u0bcd", "Rotate counterclockwise": "\u0b95\u0b9f\u0bbf\u0b95\u0bbe\u0bb0 \u0b8e\u0ba4\u0bbf\u0bb0\u0bcd\u0ba4\u0bbf\u0b9a\u0bc8\u0baf\u0bbf\u0bb2\u0bcd \u0b9a\u0bc1\u0bb4\u0bb1\u0bcd\u0bb1\u0bc1", "Rotate clockwise": "\u0b95\u0b9f\u0bbf\u0b95\u0bbe\u0bb0\u0ba4\u0bcd\u0ba4\u0bbf\u0b9a\u0bc8\u0baf\u0bbf\u0bb2\u0bcd \u0b9a\u0bc1\u0bb4\u0bb1\u0bcd\u0bb1\u0bc1", "Flip vertically": "\u0b9a\u0bc6\u0b99\u0bcd\u0b95\u0bc1\u0ba4\u0bcd\u0ba4\u0bbe\u0b95 \u0baa\u0bc1\u0bb0\u0b9f\u0bcd\u0b9f\u0bc1", "Flip horizontally": "\u0b95\u0bbf\u0b9f\u0bc8\u0bae\u0b9f\u0bcd\u0b9f\u0bae\u0bbe\u0b95 \u0baa\u0bc1\u0bb0\u0b9f\u0bcd\u0b9f\u0bc1", "Edit image": "\u0baa\u0b9f\u0ba4\u0bcd\u0ba4\u0bc8 \u0ba4\u0bca\u0b95\u0bc1", "Image options": "\u0baa\u0b9f \u0bb5\u0bbf\u0bb0\u0bc1\u0baa\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bcd", "Zoom in": "\u0baa\u0bc6\u0bb0\u0bbf\u0ba4\u0bbe\u0b95\u0bcd\u0b95\u0bc1", "Zoom out": "\u0b9a\u0bbf\u0bb1\u0bbf\u0ba4\u0bbe\u0b95\u0bcd\u0b95\u0bc1", "Crop": "\u0b9a\u0bc6\u0ba4\u0bc1\u0b95\u0bcd\u0b95\u0bc1", "Resize": "\u0bae\u0bb1\u0bc1\u0b85\u0bb3\u0bb5\u0bbf\u0b9f\u0bc1", "Orientation": "\u0ba4\u0bbf\u0b9a\u0bc8\u0baf\u0bae\u0bc8\u0bb5\u0bc1", "Brightness": "\u0b92\u0bb3\u0bbf\u0bb0\u0bcd\u0bb5\u0bc1", "Sharpen": "\u0b95\u0bc2\u0bb0\u0bcd\u0bae\u0bc8\u0baf\u0bbe\u0b95\u0bcd\u0b95\u0bc1", "Contrast": "\u0ba8\u0bbf\u0bb1\u0bae\u0bbe\u0bb1\u0bc1\u0baa\u0bbe\u0b9f\u0bc1", "Color levels": "\u0bb5\u0ba3\u0bcd\u0ba3 \u0ba8\u0bbf\u0bb2\u0bc8\u0b95\u0bb3\u0bcd", "Gamma": "Gamma", "Invert": "\u0ba8\u0bc7\u0bb0\u0bcd\u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bc1", "Apply": "\u0baa\u0baf\u0ba9\u0bcd\u0baa\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1", "Back": "\u0baa\u0bbf\u0ba9\u0bcd", "Insert date\/time": "\u0ba4\u0bc7\u0ba4\u0bbf\/\u0ba8\u0bc7\u0bb0\u0bae\u0bcd \u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bc1\u0b95", "Date\/time": "\u0ba4\u0bc7\u0ba4\u0bbf\/\u0ba8\u0bc7\u0bb0\u0bae\u0bcd", "Insert\/Edit Link": "\u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc1 \u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95\/\u0ba4\u0bca\u0b95\u0bc1\u0b95\u0bcd\u0b95", "Insert\/edit link": "\u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc1 \u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bc1\u0b95\/\u0ba4\u0bca\u0b95\u0bc1\u0b95\u0bcd\u0b95", "Text to display": "\u0b95\u0bbe\u0b9f\u0bcd\u0b9a\u0bbf\u0baa\u0bcd\u0baa\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4 \u0bb5\u0bc7\u0ba3\u0bcd\u0b9f\u0bbf\u0baf \u0b89\u0bb0\u0bc8", "Url": "\u0b87\u0ba3\u0bc8\u0baf\u0bae\u0bc1\u0b95\u0bb5\u0bb0\u0bbf", "Open link in...": "\u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc8 \u0b87\u0ba4\u0bbf\u0bb2\u0bcd \u0ba4\u0bbf\u0bb1\u0b95\u0bcd\u0b95...", "Current window": "\u0ba4\u0bb1\u0bcd\u0baa\u0bcb\u0ba4\u0bc8\u0baf \u0b9a\u0bbe\u0bb3\u0bb0\u0bae\u0bcd", "None": "\u0b8f\u0ba4\u0bc1\u0bae\u0bbf\u0bb2\u0bcd\u0bb2\u0bc8", "New window": "\u0baa\u0bc1\u0ba4\u0bbf\u0baf \u0b9a\u0bbe\u0bb3\u0bb0\u0bae\u0bcd", "Remove link": "\u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc8 \u0b85\u0b95\u0bb1\u0bcd\u0bb1\u0bc1\u0b95", "Anchors": "\u0ba8\u0b99\u0bcd\u0b95\u0bc2\u0bb0\u0b99\u0bcd\u0b95\u0bb3\u0bcd", "Link...": "\u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc1...", "Paste or type a link": "\u0b92\u0bb0\u0bc1 \u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc1 \u0b92\u0b9f\u0bcd\u0b9f\u0bc1\u0b95 \u0b85\u0bb2\u0bcd\u0bb2\u0ba4\u0bc1 \u0ba4\u0b9f\u0bcd\u0b9f\u0b9a\u0bcd\u0b9a\u0bbf\u0b9f\u0bc1\u0b95", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u0ba4\u0bbe\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b89\u0bb3\u0bcd\u0bb3\u0bbf\u0b9f\u0bcd\u0b9f \u0b87\u0ba3\u0bc8\u0baf\u0bae\u0bc1\u0b95\u0bb5\u0bb0\u0bbf (URL) \u0b92\u0bb0\u0bc1 \u0bae\u0bbf\u0ba9\u0bcd-\u0b85\u0b9e\u0bcd\u0b9a\u0bb2\u0bcd \u0bae\u0bc1\u0b95\u0bb5\u0bb0\u0bbf \u0baa\u0bcb\u0bb2\u0bcd \u0ba4\u0bcb\u0ba9\u0bcd\u0bb1\u0bc1\u0b95\u0bbf\u0bb1\u0ba4\u0bc1. \u0ba4\u0bc7\u0bb5\u0bc8\u0baf\u0bbe\u0ba9 mailto: \u0bae\u0bc1\u0ba9\u0bcd-\u0b92\u0b9f\u0bcd\u0b9f\u0bc8\u0ba4\u0bcd (prefix) \u0ba4\u0bbe\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b9a\u0bc7\u0bb0\u0bcd\u0b95\u0bcd\u0b95 \u0bb5\u0bc7\u0ba3\u0bcd\u0b9f\u0bc1\u0bae\u0bbe?", "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\u0ba4\u0bbe\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b89\u0bb3\u0bcd\u0bb3\u0bbf\u0b9f\u0bcd\u0b9f \u0b87\u0ba3\u0bc8\u0baf\u0bae\u0bc1\u0b95\u0bb5\u0bb0\u0bbf (URL) \u0b92\u0bb0\u0bc1 \u0bb5\u0bc6\u0bb3\u0bbf\u0baa\u0bcd\u0baa\u0bc1\u0bb1 \u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc1 (external link) \u0baa\u0bcb\u0bb2\u0bcd \u0ba4\u0bcb\u0ba9\u0bcd\u0bb1\u0bc1\u0b95\u0bbf\u0bb1\u0ba4\u0bc1. \u0ba4\u0bc7\u0bb5\u0bc8\u0baf\u0bbe\u0ba9 http:\/\/ \u0bae\u0bc1\u0ba9\u0bcd-\u0b92\u0b9f\u0bcd\u0b9f\u0bc8\u0ba4\u0bcd (prefix) \u0ba4\u0bbe\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b9a\u0bc7\u0bb0\u0bcd\u0b95\u0bcd\u0b95 \u0bb5\u0bc7\u0ba3\u0bcd\u0b9f\u0bc1\u0bae\u0bbe?", "Link list": "\u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc1\u0baa\u0bcd \u0baa\u0b9f\u0bcd\u0b9f\u0bbf\u0baf\u0bb2\u0bcd", "Insert video": "\u0b95\u0bbe\u0ba3\u0bca\u0bb3\u0bbf \u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bc1\u0b95", "Insert\/edit video": "\u0b95\u0bbe\u0ba3\u0bca\u0bb3\u0bbf \u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bc1\u0b95\/\u0ba4\u0bca\u0b95\u0bc1\u0b95\u0bcd\u0b95", "Insert\/edit media": "\u0b8a\u0b9f\u0b95\u0bae\u0bcd \u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bc1\u0b95\/\u0ba4\u0bca\u0b95\u0bc1\u0b95\u0bcd\u0b95", "Alternative source": "\u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bc1 \u0bae\u0bc2\u0bb2\u0bae\u0bcd", "Alternative source URL": "\u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bc1 \u0bae\u0bc2\u0bb2 \u0b87\u0ba3\u0bc8\u0baf\u0bae\u0bc1\u0b95\u0bb5\u0bb0\u0bbf", "Media poster (Image URL)": "\u0b8a\u0b9f\u0b95 \u0b9a\u0bc1\u0bb5\u0bb0\u0bca\u0b9f\u0bcd\u0b9f\u0bbf (\u0b89\u0b9f \u0b87\u0ba3\u0bc8\u0baf\u0bae\u0bc1\u0b95\u0bb5\u0bb0\u0bbf)", "Paste your embed code below:": "\u0ba4\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b89\u0b9f\u0bcd\u0baa\u0bc6\u0bbe\u0ba4\u0bbf \u0b95\u0bc1\u0bb1\u0bbf\u0baf\u0bc0\u0b9f\u0bcd\u0b9f\u0bc8 \u0b95\u0bc0\u0bb4\u0bc7 \u0b92\u0b9f\u0bcd\u0b9f\u0bb5\u0bc1\u0bae\u0bcd:", "Embed": "\u0b89\u0b9f\u0bcd\u0baa\u0bca\u0ba4\u0bbf", "Media...": "\u0b8a\u0b9f\u0b95\u0bae\u0bcd...", "Nonbreaking space": "\u0baa\u0bbf\u0bb0\u0bbf\u0baf\u0bbe\u0ba4 \u0b87\u0b9f\u0bc8\u0bb5\u0bc6\u0bb3\u0bbf", "Page break": "\u0baa\u0b95\u0bcd\u0b95 \u0baa\u0bbf\u0bb0\u0bbf\u0baa\u0bcd\u0baa\u0bc1", "Paste as text": "\u0b89\u0bb0\u0bc8\u0baf\u0bbe\u0b95 \u0b92\u0b9f\u0bcd\u0b9f\u0bc1\u0b95", "Preview": "\u0bae\u0bc1\u0ba9\u0bcd\u0ba8\u0bcb\u0b95\u0bcd\u0b95\u0bc1", "Print...": "\u0b85\u0b9a\u0bcd\u0b9a\u0bbf\u0b9f\u0bc1\u0b95...", "Save": "\u0b9a\u0bc7\u0bae\u0bbf\u0b95\u0bcd\u0b95", "Find": "\u0b95\u0ba3\u0bcd\u0b9f\u0bc1\u0baa\u0bbf\u0b9f\u0bbf\u0b95\u0bcd\u0b95", "Replace with": "\u0b87\u0ba4\u0ba9\u0bc1\u0b9f\u0ba9\u0bcd \u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bc1\u0b95", "Replace": "\u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bc1\u0b95", "Replace all": "\u0b85\u0ba9\u0bc8\u0ba4\u0bcd\u0ba4\u0bc8\u0baf\u0bc1\u0bae\u0bcd \u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bc1\u0b95", "Previous": "\u0bae\u0bc1\u0ba8\u0bcd\u0ba4\u0bc8\u0baf", "Next": "\u0b85\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4", "Find and replace...": "\u0b95\u0ba3\u0bcd\u0b9f\u0bc1\u0baa\u0bbf\u0b9f\u0bbf\u0ba4\u0bcd\u0ba4\u0bc1 \u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bc1\u0b95...", "Could not find the specified string.": "\u0b95\u0bc1\u0bb1\u0bbf\u0baa\u0bcd\u0baa\u0bbf\u0b9f\u0bcd\u0b9f \u0b9a\u0bb0\u0bae\u0bcd \u0b95\u0ba3\u0bcd\u0b9f\u0bc1\u0baa\u0bbf\u0b9f\u0bbf\u0b95\u0bcd\u0b95 \u0bae\u0bc1\u0b9f\u0bbf\u0baf\u0bb5\u0bbf\u0bb2\u0bcd\u0bb2\u0bc8", "Match case": "\u0bb5\u0b9f\u0bbf\u0bb5\u0ba4\u0bcd\u0ba4\u0bc8 \u0baa\u0bca\u0bb0\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0b95", "Find whole words only": "\u0bae\u0bc1\u0bb4\u0bc1 \u0b9a\u0bca\u0bb1\u0bcd\u0b95\u0bb3\u0bcd \u0bae\u0b9f\u0bcd\u0b9f\u0bc1\u0bae\u0bcd \u0b95\u0ba3\u0bcd\u0b9f\u0bc1\u0baa\u0bbf\u0b9f\u0bbf\u0b95\u0bcd\u0b95", "Spell check": "\u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0baa\u0bcd\u0baa\u0bbf\u0bb4\u0bc8 \u0b9a\u0bb0\u0bbf\u0baa\u0bbe\u0bb0\u0bcd\u0baa\u0bcd\u0baa\u0bc1", "Ignore": "\u0baa\u0bc1\u0bb1\u0b95\u0bcd\u0b95\u0ba3\u0bbf\u0b95\u0bcd\u0b95", "Ignore all": "\u0b85\u0ba9\u0bc8\u0ba4\u0bcd\u0ba4\u0bc8\u0baf\u0bc1\u0bae\u0bcd \u0baa\u0bc1\u0bb1\u0b95\u0bcd\u0b95\u0ba3\u0bbf\u0b95\u0bcd\u0b95", "Finish": "\u0bae\u0bc1\u0b9f\u0bbf\u0b95\u0bcd\u0b95", "Add to Dictionary": "\u0b85\u0b95\u0bb0\u0bbe\u0ba4\u0bbf\u0baf\u0bbf\u0bb2\u0bcd \u0b9a\u0bc7\u0bb0\u0bcd\u0b95\u0bcd\u0b95", "Insert table": "\u0b85\u0b9f\u0bcd\u0b9f\u0bb5\u0ba3\u0bc8 \u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bc1\u0b95", "Table properties": "\u0b85\u0b9f\u0bcd\u0b9f\u0bb5\u0ba3\u0bc8 \u0baa\u0ba3\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bcd", "Delete table": "\u0b85\u0b9f\u0bcd\u0b9f\u0bb5\u0ba3\u0bc8 \u0ba8\u0bc0\u0b95\u0bcd\u0b95\u0bc1\u0b95", "Cell": "\u0b9a\u0bbf\u0bb1\u0bcd\u0bb1\u0bb1\u0bc8", "Row": "\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8", "Column": "\u0ba8\u0bc6\u0b9f\u0bc1\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8", "Cell properties": "\u0b9a\u0bbf\u0bb1\u0bcd\u0bb1\u0bb1\u0bc8 \u0baa\u0ba3\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bcd", "Merge cells": "\u0b9a\u0bbf\u0bb1\u0bcd\u0bb1\u0bb1\u0bc8\u0b95\u0bb3\u0bcd \u0b9a\u0bc7\u0bb0\u0bcd\u0b95\u0bcd\u0b95", "Split cell": "\u0b9a\u0bbf\u0bb1\u0bcd\u0bb1\u0bb1\u0bc8 \u0baa\u0bbf\u0bb0\u0bbf\u0b95\u0bcd\u0b95", "Insert row before": "\u0b87\u0ba4\u0bb1\u0bcd\u0b95\u0bc1 \u0bae\u0bc1\u0ba9\u0bcd \u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bc1\u0b95", "Insert row after": "\u0b87\u0ba4\u0bb1\u0bcd\u0b95\u0bc1 \u0baa\u0bbf\u0ba9\u0bcd \u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bc1\u0b95", "Delete row": "\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0ba8\u0bc0\u0b95\u0bcd\u0b95\u0bc1\u0b95", "Row properties": "\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0baa\u0ba3\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bcd", "Cut row": "\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0bb5\u0bc6\u0b9f\u0bcd\u0b9f\u0bc1\u0b95", "Copy row": "\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0ba8\u0b95\u0bb2\u0bc6\u0b9f\u0bc1\u0b95\u0bcd\u0b95", "Paste row before": "\u0b87\u0ba4\u0bb1\u0bcd\u0b95\u0bc1 \u0bae\u0bc1\u0ba9\u0bcd \u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0b92\u0b9f\u0bcd\u0b9f\u0bc1\u0b95", "Paste row after": "\u0b87\u0ba4\u0bb1\u0bcd\u0b95\u0bc1 \u0baa\u0bbf\u0ba9\u0bcd \u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0b92\u0b9f\u0bcd\u0b9f\u0bc1\u0b95", "Insert column before": "\u0b87\u0ba4\u0bb1\u0bcd\u0b95\u0bc1 \u0bae\u0bc1\u0ba9\u0bcd \u0ba8\u0bc6\u0b9f\u0bc1\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bc1\u0b95", "Insert column after": "\u0b87\u0ba4\u0bb1\u0bcd\u0b95\u0bc1 \u0baa\u0bbf\u0ba9\u0bcd \u0ba8\u0bc6\u0b9f\u0bc1\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bc1\u0b95", "Delete column": "\u0ba8\u0bc6\u0b9f\u0bc1\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0ba8\u0bc0\u0b95\u0bcd\u0b95\u0bc1\u0b95", "Cols": "\u0ba8\u0bc6\u0b9f\u0bc1\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8\u0b95\u0bb3\u0bcd", "Rows": "\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8\u0b95\u0bb3\u0bcd", "Width": "\u0b85\u0b95\u0bb2\u0bae\u0bcd", "Height": "\u0b89\u0baf\u0bb0\u0bae\u0bcd", "Cell spacing": "\u0b9a\u0bbf\u0bb1\u0bcd\u0bb1\u0bb1\u0bc8 \u0b87\u0b9f\u0bc8\u0bb5\u0bc6\u0bb3\u0bbf", "Cell padding": "\u0b9a\u0bbf\u0bb1\u0bcd\u0bb1\u0bb1\u0bc8 \u0ba8\u0bbf\u0bb0\u0baa\u0bcd\u0baa\u0bb2\u0bcd", "Show caption": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 \u0b95\u0bbe\u0b9f\u0bcd\u0b9f\u0bc1\u0b95", "Left": "\u0b87\u0b9f\u0bae\u0bcd", "Center": "\u0bae\u0bc8\u0baf\u0bae\u0bcd", "Right": "\u0bb5\u0bb2\u0bae\u0bcd", "Cell type": "\u0b9a\u0bbf\u0bb1\u0bcd\u0bb1\u0bb1\u0bc8 \u0bb5\u0b95\u0bc8", "Scope": "\u0bb5\u0bb0\u0bc8\u0baf\u0bc6\u0bb2\u0bcd\u0bb2\u0bc8", "Alignment": "\u0b9a\u0bc0\u0bb0\u0bae\u0bc8\u0bb5\u0bc1", "H Align": "\u0b95\u0bbf (H) \u0b87\u0b9a\u0bc8\u0bb5\u0bc1", "V Align": "\u0b9a\u0bc6 (V) \u0b87\u0b9a\u0bc8\u0bb5\u0bc1", "Top": "\u0bae\u0bc7\u0bb2\u0bcd", "Middle": "\u0ba8\u0b9f\u0bc1", "Bottom": "\u0bae\u0bc7\u0bb2\u0bcd", "Header cell": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 \u0b9a\u0bbf\u0bb1\u0bcd\u0bb1\u0bb1\u0bc8", "Row group": "\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0b95\u0bc1\u0bb4\u0bc1", "Column group": "\u0ba8\u0bc6\u0b9f\u0bc1\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0b95\u0bc1\u0bb4\u0bc1", "Row type": "\u0bb5\u0bb0\u0bbf\u0b9a\u0bc8 \u0bb5\u0b95\u0bc8", "Header": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1", "Body": "\u0b89\u0b9f\u0bb2\u0bcd", "Footer": "\u0b85\u0b9f\u0bbf\u0b95\u0bcd\u0b95\u0bc1\u0bb1\u0bbf\u0baa\u0bcd\u0baa\u0bc1", "Border color": "\u0b95\u0bb0\u0bc8\u0baf\u0bbf\u0ba9\u0bcd \u0ba8\u0bbf\u0bb1\u0bae\u0bcd", "Insert template...": "\u0bb5\u0bbe\u0bb0\u0bcd\u0baa\u0bcd\u0baa\u0bc1\u0bb0\u0bc1 \u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95...", "Templates": "\u0bb5\u0bbe\u0bb0\u0bcd\u0baa\u0bcd\u0baa\u0bc1\u0bb0\u0bc1\u0b95\u0bcd\u0b95\u0bb3\u0bcd", "Template": "\u0bb5\u0bbe\u0bb0\u0bcd\u0baa\u0bcd\u0baa\u0bc1\u0bb0\u0bc1", "Text color": "\u0b89\u0bb0\u0bc8\u0baf\u0bbf\u0ba9\u0bcd \u0ba8\u0bbf\u0bb1\u0bae\u0bcd", "Background color": "\u0baa\u0bbf\u0ba9\u0bcd\u0ba9\u0ba3\u0bbf \u0ba8\u0bbf\u0bb1\u0bae\u0bcd", "Custom...": "\u0ba4\u0ba9\u0bbf\u0baa\u0bcd\u0baa\u0baf\u0ba9\u0bcd...", "Custom color": "\u0ba4\u0ba9\u0bbf\u0baa\u0bcd\u0baa\u0baf\u0ba9\u0bcd \u0ba8\u0bbf\u0bb1\u0bae\u0bcd", "No color": "\u0ba8\u0bbf\u0bb1\u0bae\u0bcd \u0b87\u0bb2\u0bcd\u0bb2\u0bc8", "Remove color": "\u0ba8\u0bbf\u0bb1\u0bae\u0bcd \u0b85\u0b95\u0bb1\u0bcd\u0bb1\u0bc1\u0b95", "Table of Contents": "\u0baa\u0bca\u0bb0\u0bc1\u0bb3\u0b9f\u0b95\u0bcd\u0b95\u0bae\u0bcd", "Show blocks": "\u0ba4\u0bca\u0b95\u0bc1\u0ba4\u0bbf\u0b95\u0bb3\u0bc8 \u0b95\u0bbe\u0b9f\u0bcd\u0b9f\u0bc1\u0b95", "Show invisible characters": "\u0b95\u0ba3\u0bcd\u0ba3\u0bc1\u0b95\u0bcd\u0b95\u0bc1\u0ba4\u0bcd \u0ba4\u0bc6\u0bb0\u0bbf\u0baf\u0bbe\u0ba4 \u0b89\u0bb0\u0bc1\u0b95\u0bcd\u0b95\u0bb3\u0bc8 \u0b95\u0bbe\u0b9f\u0bcd\u0b9f\u0bc1\u0b95", "Word count": "\u0b9a\u0bca\u0bb2\u0bcd \u0b8e\u0ba3\u0bcd\u0ba3\u0bbf\u0b95\u0bcd\u0b95\u0bc8", "Count": "\u0b8e\u0ba3\u0bcd\u0ba3\u0bbf\u0b95\u0bcd\u0b95\u0bc8", "Document": "\u0b86\u0bb5\u0ba3\u0bae\u0bcd", "Selection": "\u0ba4\u0bc7\u0bb0\u0bcd\u0bb5\u0bc1", "Words": "\u0b9a\u0bca\u0bb1\u0bcd\u0b95\u0bb3\u0bcd", "Words: {0}": "\u0b9a\u0bca\u0bb1\u0bcd\u0b95\u0bb3\u0bcd: {0}", "{0} words": "{0} \u0b9a\u0bca\u0bb1\u0bcd\u0b95\u0bb3\u0bcd", "File": "\u0b95\u0bcb\u0baa\u0bcd\u0baa\u0bc1", "Edit": "\u0ba4\u0bca\u0b95\u0bc1\u0b95\u0bcd\u0b95", "Insert": "\u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bc1\u0b95", "View": "\u0ba8\u0bcb\u0b95\u0bcd\u0b95\u0bc1\u0b95", "Format": "\u0bb5\u0b9f\u0bbf\u0bb5\u0bae\u0bc8\u0baa\u0bcd\u0baa\u0bc1", "Table": "\u0b85\u0b9f\u0bcd\u0b9f\u0bb5\u0ba3\u0bc8", "Tools": "\u0b95\u0bb0\u0bc1\u0bb5\u0bbf\u0b95\u0bb3\u0bcd", "Powered by {0}": "\u0bb5\u0bb2\u0bc1\u0bb5\u0bb3\u0bbf\u0baa\u0bcd\u0baa\u0ba4\u0bc1 {0}", "Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u0b89\u0baf\u0bb0\u0bcd \u0b89\u0bb0\u0bc8 \u0baa\u0b95\u0bc1\u0ba4\u0bbf. \u0baa\u0b9f\u0bcd\u0b9f\u0bbf\u0b95\u0bcd\u0b95\u0bc1 ALT-F9 , \u0b95\u0bb0\u0bc1\u0bb5\u0bbf\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f\u0bc8\u0b95\u0bcd\u0b95\u0bc1 ALT-F10 , \u0b89\u0ba4\u0bb5\u0bbf\u0b95\u0bcd\u0b95\u0bc1 ALT-0", "Image title": "\u0baa\u0b9f\u0ba4\u0bcd \u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1", "Border width": "\u0b95\u0bb0\u0bc8 \u0b85\u0b95\u0bb2\u0bae\u0bcd", "Border style": "\u0b95\u0bb0\u0bc8 \u0baa\u0bbe\u0ba3\u0bbf", "Error": "\u0baa\u0bbf\u0bb4\u0bc8", "Warn": "\u0b8e\u0b9a\u0bcd\u0b9a\u0bb0\u0bbf\u0b95\u0bcd\u0b95", "Valid": "\u0b9a\u0bc6\u0bb2\u0bcd\u0bb2\u0ba4\u0bcd\u0ba4\u0b95\u0bcd\u0b95\u0ba4\u0bc1", "To open the popup, press Shift+Enter": "\u0bae\u0bc7\u0bb2\u0bcd\u0ba4\u0bcb\u0ba9\u0bcd\u0bb1\u0bc1-\u0bb5\u0bc8\u0ba4\u0bcd \u0ba4\u0bbf\u0bb1\u0b95\u0bcd\u0b95 Shift+Enter", "Rich Text Area. Press ALT-0 for help.": "\u0b89\u0baf\u0bb0\u0bcd \u0b89\u0bb0\u0bc8 \u0baa\u0b95\u0bc1\u0ba4\u0bbf. \u0b89\u0ba4\u0bb5\u0bbf\u0b95\u0bcd\u0b95\u0bc1 ALT-0", "System Font": "\u0ba4\u0bca\u0b95\u0bc1\u0ba4\u0bbf \u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0bb0\u0bc1", "Failed to upload image: {0}": "\u0baa\u0b9f\u0bae\u0bcd \u0baa\u0ba4\u0bbf\u0bb5\u0bc7\u0bb1\u0bcd\u0bb1\u0bb2\u0bcd \u0ba4\u0bcb\u0bb2\u0bcd\u0bb5\u0bbf\u0baf\u0bc1\u0bb1\u0bcd\u0bb1\u0ba4\u0bc1: {0}", "Failed to load plugin: {0} from url {1}": "\u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bbf \u0b8f\u0bb1\u0bcd\u0bb1\u0bc1\u0ba4\u0bb2\u0bcd \u0ba4\u0bcb\u0bb2\u0bcd\u0bb5\u0bbf\u0baf\u0bc1\u0bb1\u0bcd\u0bb1\u0ba4\u0bc1: {0} - {1} \u0b87\u0ba3\u0bc8\u0baf\u0bae\u0bc1\u0b95\u0bb5\u0bb0\u0bbf\u0baf\u0bbf\u0bb2\u0bbf\u0bb0\u0bc1\u0ba8\u0bcd\u0ba4\u0bc1", "Failed to load plugin url: {0}": "\u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bbf \u0b87\u0ba3\u0bc8\u0baf\u0bae\u0bc1\u0b95\u0bb5\u0bb0\u0bbf \u0b8f\u0bb1\u0bcd\u0bb1\u0bc1\u0ba4\u0bb2\u0bcd \u0ba4\u0bcb\u0bb2\u0bcd\u0bb5\u0bbf\u0baf\u0bc1\u0bb1\u0bcd\u0bb1\u0ba4\u0bc1: {0}", "Failed to initialize plugin: {0}": "\u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bbf \u0ba4\u0bc1\u0bb5\u0b99\u0bcd\u0b95\u0bc1\u0ba4\u0bb2\u0bcd \u0ba4\u0bcb\u0bb2\u0bcd\u0bb5\u0bbf\u0baf\u0bc1\u0bb1\u0bcd\u0bb1\u0ba4\u0bc1: {0}", "example": "\u0b89\u0ba4\u0bbe\u0bb0\u0ba3\u0bae\u0bcd", "Search": "\u0ba4\u0bc7\u0b9f\u0bc1\u0b95", "All": "\u0b85\u0ba9\u0bc8\u0ba4\u0bcd\u0ba4\u0bc1\u0bae\u0bcd", "Currency": "\u0b9a\u0bc6\u0bb2\u0bbe\u0bb5\u0ba3\u0bbf (Currency)", "Text": "\u0b89\u0bb0\u0bc8", "Quotations": "\u0bae\u0bc7\u0bb1\u0bcd\u0b95\u0bc7\u0bbe\u0bb3\u0bcd\u0b95\u0bb3\u0bcd", "Mathematical": "\u0b95\u0ba3\u0b95\u0bcd\u0b95\u0bbf\u0baf\u0bb2\u0bcd", "Extended Latin": "\u0ba8\u0bc0\u0b9f\u0bcd\u0b9f\u0bbf\u0b95\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0b9f\u0bcd\u0b9f \u0b87\u0bb2\u0ba4\u0bcd\u0ba4\u0bc0\u0ba9\u0bcd", "Symbols": "\u0b87\u0b9f\u0bc1\u0b95\u0bc1\u0bb1\u0bbf\u0b95\u0bb3\u0bcd", "Arrows": "\u0b85\u0bae\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bcd", "User Defined": "\u0baa\u0baf\u0ba9\u0bb0\u0bcd \u0bb5\u0bb0\u0bc8\u0baf\u0bb1\u0bc1\u0ba4\u0bcd\u0ba4", "dollar sign": "dollar \u0b95\u0bc1\u0bb1\u0bbf", "currency sign": "\u0b9a\u0bc6\u0bb2\u0bbe\u0bb5\u0ba3\u0bbf\u0b95\u0bcd \u0b95\u0bc1\u0bb1\u0bbf", "euro-currency sign": "euro-currency \u0b95\u0bc1\u0bb1\u0bbf", "colon sign": "colon \u0b95\u0bc1\u0bb1\u0bbf", "cruzeiro sign": "cruzeiro \u0b95\u0bc1\u0bb1\u0bbf", "french franc sign": "french franc \u0b95\u0bc1\u0bb1\u0bbf", "lira sign": "lira \u0b95\u0bc1\u0bb1\u0bbf", "mill sign": "mill \u0b95\u0bc1\u0bb1\u0bbf", "naira sign": "naira \u0b95\u0bc1\u0bb1\u0bbf", "peseta sign": "peseta \u0b95\u0bc1\u0bb1\u0bbf", "rupee sign": "rupee \u0b95\u0bc1\u0bb1\u0bbf", "won sign": "won \u0b95\u0bc1\u0bb1\u0bbf", "new sheqel sign": "new sheqel \u0b95\u0bc1\u0bb1\u0bbf", "dong sign": "dong \u0b95\u0bc1\u0bb1\u0bbf", "kip sign": "kip \u0b95\u0bc1\u0bb1\u0bbf", "tugrik sign": "tugrik \u0b95\u0bc1\u0bb1\u0bbf", "drachma sign": "drachma \u0b95\u0bc1\u0bb1\u0bbf", "german penny symbol": "german penny \u0b87\u0b9f\u0bc1\u0b95\u0bc1\u0bb1\u0bbf", "peso sign": "peso \u0b95\u0bc1\u0bb1\u0bbf", "guarani sign": "guarani \u0b95\u0bc1\u0bb1\u0bbf", "austral sign": "austral \u0b95\u0bc1\u0bb1\u0bbf", "hryvnia sign": "hryvnia \u0b95\u0bc1\u0bb1\u0bbf", "cedi sign": "cedi \u0b95\u0bc1\u0bb1\u0bbf", "livre tournois sign": "livre tournois \u0b95\u0bc1\u0bb1\u0bbf", "spesmilo sign": "spesmilo \u0b95\u0bc1\u0bb1\u0bbf", "tenge sign": "tenge \u0b95\u0bc1\u0bb1\u0bbf", "indian rupee sign": "indian rupee \u0b95\u0bc1\u0bb1\u0bbf", "turkish lira sign": "turkish lira \u0b95\u0bc1\u0bb1\u0bbf", "nordic mark sign": "nordic mark \u0b95\u0bc1\u0bb1\u0bbf", "manat sign": "manat \u0b95\u0bc1\u0bb1\u0bbf", "ruble sign": "ruble \u0b95\u0bc1\u0bb1\u0bbf", "yen character": "yen \u0b89\u0bb0\u0bc1", "yuan character": "yuan \u0b89\u0bb0\u0bc1", "yuan character, in hong kong and taiwan": "yuan \u0b89\u0bb0\u0bc1, \u0bb9\u0bbe\u0b99\u0bcd\u0b95\u0bbe\u0b99\u0bcd \u0bae\u0bb1\u0bcd\u0bb1\u0bc1\u0bae\u0bcd \u0ba4\u0bbe\u0baf\u0bcd\u0bb5\u0bbe\u0ba9\u0bcd \u0b87\u0bb2\u0bcd", "yen\/yuan character variant one": "yen\/yuan \u0b89\u0bb0\u0bc1 \u0bae\u0bbe\u0bb1\u0bc1\u0baa\u0bbe\u0b9f\u0bc1", "Loading emoticons...": "\u0b89\u0ba3\u0bb0\u0bcd\u0b9a\u0bcd\u0b9a\u0bbf\u0baa\u0bcd\u0baa\u0b9f\u0bbf\u0bae\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b8f\u0bb1\u0bcd\u0bb1\u0baa\u0bcd\u0baa\u0b9f\u0bc1\u0b95\u0bbf\u0ba9\u0bcd\u0bb1\u0ba9...", "Could not load emoticons": "\u0b89\u0ba3\u0bb0\u0bcd\u0b9a\u0bcd\u0b9a\u0bbf\u0baa\u0bcd\u0baa\u0b9f\u0bbf\u0bae\u0b99\u0bcd\u0b95\u0bb3\u0bc8 \u0b8f\u0bb1\u0bcd\u0bb1 \u0bae\u0bc1\u0b9f\u0bbf\u0baf\u0bb5\u0bbf\u0bb2\u0bcd\u0bb2\u0bc8", "People": "\u0bae\u0b95\u0bcd\u0b95\u0bb3\u0bcd", "Animals and Nature": "\u0bae\u0bbf\u0bb0\u0bc1\u0b95\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0bae\u0bb1\u0bcd\u0bb1\u0bc1\u0bae\u0bcd \u0b87\u0baf\u0bb1\u0bcd\u0b95\u0bc8", "Food and Drink": "\u0b89\u0ba3\u0bb5\u0bc1 \u0bae\u0bb1\u0bcd\u0bb1\u0bc1\u0bae\u0bcd \u0baa\u0bbe\u0ba9\u0bae\u0bcd", "Activity": "\u0b9a\u0bc6\u0baf\u0bb1\u0bcd\u0baa\u0bbe\u0b9f\u0bc1", "Travel and Places": "\u0baa\u0baf\u0ba3\u0bae\u0bcd \u0bae\u0bb1\u0bcd\u0bb1\u0bc1\u0bae\u0bcd \u0b87\u0b9f\u0b99\u0bcd\u0b95\u0bb3\u0bcd", "Objects": "\u0baa\u0bca\u0bb0\u0bc1\u0b9f\u0bcd\u0b95\u0bb3\u0bcd", "Flags": "\u0b95\u0bca\u0b9f\u0bbf\u0b95\u0bb3\u0bcd", "Characters": "\u0b89\u0bb0\u0bc1\u0b95\u0bcd\u0b95\u0bb3\u0bcd", "Characters (no spaces)": "\u0b89\u0bb0\u0bc1\u0b95\u0bcd\u0b95\u0bb3\u0bcd (\u0b87\u0b9f\u0bc8\u0bb5\u0bc6\u0bb3\u0bbf\u0b95\u0bb3\u0bcd \u0b87\u0bb2\u0bcd\u0bb2\u0bc8)", "{0} characters": "{0} \u0b89\u0bb0\u0bc1\u0b95\u0bcd\u0b95\u0bb3\u0bcd", "Error: Form submit field collision.": "\u0baa\u0bbf\u0bb4\u0bc8: \u0baa\u0b9f\u0bbf\u0bb5\u0bae\u0bcd \u0b9a\u0bae\u0bb0\u0bcd\u0baa\u0bcd\u0baa\u0bbf\u0ba4\u0bcd\u0ba4\u0bb2\u0bcd \u0baa\u0bc1\u0bb2\u0bae\u0bcd \u0bae\u0bcb\u0ba4\u0bb2\u0bcd.", "Error: No form element found.": "\u0baa\u0bbf\u0bb4\u0bc8: \u0baa\u0bc1\u0bb2\u0bae\u0bcd \u0bae\u0bc2\u0bb2\u0b95\u0bae\u0bcd \u0b8e\u0ba4\u0bc1\u0bb5\u0bc1\u0bae\u0bcd \u0b95\u0bbe\u0ba3\u0bb5\u0bbf\u0bb2\u0bcd\u0bb2\u0bc8.", "Update": "\u0baa\u0bc1\u0ba4\u0bc1\u0baa\u0bcd\u0baa\u0bbf\u0b95\u0bcd\u0b95", "Color swatch": "\u0ba8\u0bbf\u0bb1\u0b9a\u0bcd \u0b9a\u0bcb\u0ba4\u0ba9\u0bc8\u0b95\u0bcd\u0b95\u0bb2\u0bb5\u0bc8", "Turquoise": "\u0ba8\u0bc0\u0bb2\u0baa\u0bcd\u0baa\u0b9a\u0bcd\u0b9a\u0bc8", "Green": "\u0baa\u0b9a\u0bcd\u0b9a\u0bc8", "Blue": "\u0ba8\u0bc0\u0bb2\u0bae\u0bcd", "Purple": "\u0b8a\u0ba4\u0bbe", "Navy Blue": "\u0b95\u0b9f\u0bb1\u0bcd\u0baa\u0b9f\u0bc8 \u0ba8\u0bc0\u0bb2\u0bae\u0bcd", "Dark Turquoise": "\u0b85\u0b9f\u0bb0\u0bcd \u0ba8\u0bc0\u0bb2\u0baa\u0bcd\u0baa\u0b9a\u0bcd\u0b9a\u0bc8", "Dark Green": "\u0b85\u0b9f\u0bb0\u0bcd \u0baa\u0b9a\u0bcd\u0b9a\u0bc8", "Medium Blue": "\u0ba8\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0bb0 \u0ba8\u0bc0\u0bb2\u0bae\u0bcd", "Medium Purple": "\u0ba8\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0bb0 \u0b8a\u0ba4\u0bbe", "Midnight Blue": "\u0ba8\u0bb3\u0bcd\u0bb3\u0bbf\u0bb0\u0bb5\u0bc1 \u0ba8\u0bc0\u0bb2\u0bae\u0bcd", "Yellow": "\u0bae\u0b9e\u0bcd\u0b9a\u0bb3\u0bcd", "Orange": "\u0b9a\u0bbf\u0bb5\u0ba8\u0bcd\u0ba4 \u0bae\u0b9e\u0bcd\u0b9a\u0bb3\u0bcd", "Red": "\u0b9a\u0bbf\u0bb5\u0baa\u0bcd\u0baa\u0bc1", "Light Gray": "\u0bb5\u0bc6\u0bb3\u0bbf\u0bb0\u0bcd \u0b9a\u0bbe\u0bae\u0bcd\u0baa\u0bb2\u0bcd", "Gray": "\u0b9a\u0bbe\u0bae\u0bcd\u0baa\u0bb2\u0bcd", "Dark Yellow": "\u0b85\u0b9f\u0bb0\u0bcd \u0bae\u0b9e\u0bcd\u0b9a\u0bb3\u0bcd", "Dark Orange": "\u0b85\u0b9f\u0bb0\u0bcd \u0b9a\u0bbf\u0bb5\u0ba8\u0bcd\u0ba4 \u0bae\u0b9e\u0bcd\u0b9a\u0bb3\u0bcd", "Dark Red": "\u0b85\u0b9f\u0bb0\u0bcd \u0b9a\u0bbf\u0bb5\u0baa\u0bcd\u0baa\u0bc1", "Medium Gray": "\u0ba8\u0b9f\u0bc1\u0ba4\u0bcd\u0ba4\u0bb0 \u0b9a\u0bbe\u0bae\u0bcd\u0baa\u0bb2\u0bcd", "Dark Gray": "\u0b85\u0b9f\u0bb0\u0bcd \u0b9a\u0bbe\u0bae\u0bcd\u0baa\u0bb2\u0bcd", "Light Green": "\u0bb5\u0bc6\u0bb3\u0bbf\u0bb0\u0bcd \u0baa\u0b9a\u0bcd\u0b9a\u0bc8", "Light Yellow": "\u0bb5\u0bc6\u0bb3\u0bbf\u0bb0\u0bcd \u0bae\u0b9e\u0bcd\u0b9a\u0bb3\u0bcd", "Light Red": "\u0bb5\u0bc6\u0bb3\u0bbf\u0bb0\u0bcd\u00a0\u0b9a\u0bbf\u0bb5\u0baa\u0bcd\u0baa\u0bc1", "Light Purple": "\u0bb5\u0bc6\u0bb3\u0bbf\u0bb0\u0bcd \u0b8a\u0ba4\u0bbe", "Light Blue": "\u0bb5\u0bc6\u0bb3\u0bbf\u0bb0\u0bcd \u0ba8\u0bc0\u0bb2\u0bae\u0bcd", "Dark Purple": "\u0b85\u0b9f\u0bb0\u0bcd \u0b8a\u0ba4\u0bbe", "Dark Blue": "\u0b85\u0b9f\u0bb0\u0bcd \u0ba8\u0bc0\u0bb2\u0bae\u0bcd", "Black": "\u0b95\u0bb0\u0bc1\u0baa\u0bcd\u0baa\u0bc1", "White": "\u0bb5\u0bc6\u0bb3\u0bcd\u0bb3\u0bc8", "Switch to or from fullscreen mode": "\u0bae\u0bc1\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bbf\u0bb0\u0bc8 \u0bae\u0bc1\u0bb1\u0bc8\u0bae\u0bc8\u0b95\u0bcd\u0b95\u0bc1\/\u0bae\u0bc1\u0bb1\u0bc8\u0bae\u0bc8\u0baf\u0bbf\u0bb2\u0bbf\u0bb0\u0bc1\u0ba8\u0bcd\u0ba4\u0bc1 \u0bae\u0bbe\u0bb1\u0bc1\u0b95", "Open help dialog": "\u0b89\u0ba4\u0bb5\u0bbf \u0b89\u0bb0\u0bc8\u0baf\u0bbe\u0b9f\u0bb2\u0bcd \u0ba4\u0bbf\u0bb1\u0b95\u0bcd\u0b95", "history": "\u0bb5\u0bb0\u0bb2\u0bbe\u0bb1\u0bc1", "styles": "\u0baa\u0bbe\u0ba3\u0bbf\u0b95\u0bb3\u0bcd", "formatting": "\u0bb5\u0b9f\u0bbf\u0bb5\u0bae\u0bc8\u0ba4\u0bcd\u0ba4\u0bb2\u0bcd", "alignment": "\u0b9a\u0bc0\u0bb0\u0bae\u0bc8\u0bb5\u0bc1", "indentation": "\u0b89\u0bb3\u0bcd\u0ba4\u0bb3\u0bcd\u0bb3\u0bc1\u0ba4\u0bb2\u0bcd", "permanent pen": "\u0ba8\u0bbf\u0bb0\u0ba8\u0bcd\u0ba4\u0bb0\u0baa\u0bcd \u0baa\u0bc7\u0ba9\u0bbe", "comments": "\u0b95\u0bb0\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0b95\u0bb3\u0bcd", "Format Painter": "\u0bb5\u0b9f\u0bbf\u0bb5\u0bae\u0bc8\u0baa\u0bcd\u0baa\u0bc1 \u0baa\u0bc2\u0b9a\u0bbe\u0bb3\u0ba9\u0bcd", "Insert\/edit iframe": "iframe \u0b9a\u0bc6\u0bb0\u0bc1\u0b95\u0bc1\u0b95\/\u0ba4\u0bca\u0b95\u0bc1\u0b95\u0bcd\u0b95", "Capitalization": "\u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bbe\u0b95\u0bcd\u0b95\u0bae\u0bcd", "lowercase": "\u0b9a\u0bbf\u0bb1\u0bcd\u0bb1\u0bc6\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1", "UPPERCASE": "\u0baa\u0bc7\u0bb0\u0bc6\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1", "Title Case": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1 \u0bb5\u0b9f\u0bbf\u0bb5\u0bae\u0bcd", "Permanent Pen Properties": "\u0ba8\u0bbf\u0bb0\u0ba8\u0bcd\u0ba4\u0bb0\u0baa\u0bcd \u0baa\u0bc7\u0ba9\u0bbe \u0baa\u0ba3\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bcd", "Permanent pen properties...": "\u0ba8\u0bbf\u0bb0\u0ba8\u0bcd\u0ba4\u0bb0\u0baa\u0bcd \u0baa\u0bc7\u0ba9\u0bbe \u0baa\u0ba3\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bcd...", "Font": "\u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0bb0\u0bc1", "Size": "\u0b85\u0bb3\u0bb5\u0bc1", "More...": "\u0bae\u0bc7\u0bb2\u0bc1\u0bae\u0bcd...", "Spellcheck Language": "\u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0baa\u0bcd\u0baa\u0bbf\u0bb4\u0bc8 \u0b9a\u0bb0\u0bbf\u0baa\u0bbe\u0bb0\u0bcd\u0baa\u0bcd\u0baa\u0bc1 \u0bae\u0bca\u0bb4\u0bbf", "Select...": "\u0ba4\u0bc7\u0bb0\u0bcd\u0bb5\u0bc1 \u0b9a\u0bc6\u0baf\u0bcd\u0b95...", "Preferences": "\u0bb5\u0bbf\u0bb0\u0bc1\u0baa\u0bcd\u0baa\u0b99\u0bcd\u0b95\u0bb3\u0bcd", "Yes": "\u0b86\u0bae\u0bcd", "No": "\u0b87\u0bb2\u0bcd\u0bb2\u0bc8", "Keyboard Navigation": "\u0bb5\u0bbf\u0b9a\u0bc8\u0baa\u0bcd\u0baa\u0bb2\u0b95\u0bc8 \u0bb5\u0bb4\u0bbf\u0b9a\u0bcd\u0b9a\u0bc6\u0bb2\u0bc1\u0ba4\u0bcd\u0ba4\u0bb2\u0bcd", "Version": "\u0baa\u0ba4\u0bbf\u0baa\u0bcd\u0baa\u0bc1", "Anchor": "\u0ba8\u0b99\u0bcd\u0b95\u0bc2\u0bb0\u0bae\u0bcd", "Special character": "\u0b9a\u0bbf\u0bb1\u0baa\u0bcd\u0baa\u0bc1 \u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0bb0\u0bc1", "Code sample": "\u0b95\u0bc1\u0bb1\u0bbf\u0baf\u0bc0\u0b9f\u0bc1 \u0bae\u0bbe\u0ba4\u0bbf\u0bb0\u0bbf", "Color": "\u0ba8\u0bbf\u0bb1\u0bae\u0bcd", "Emoticons": "\u0b89\u0ba3\u0bb0\u0bcd\u0b9a\u0bcd\u0b9a\u0bbf\u0baa\u0bcd\u0baa\u0b9f\u0bbf\u0bae\u0b99\u0bcd\u0b95\u0bb3\u0bcd", "Document properties": "\u0b86\u0bb5\u0ba3\u0ba4\u0bcd\u0ba4\u0bbf\u0ba9\u0bcd \u0baa\u0ba3\u0bcd\u0baa\u0bc1\u0b95\u0bb3\u0bcd", "Image": "\u0baa\u0b9f\u0bae\u0bcd", "Insert link": "\u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc1 \u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bc1\u0b95", "Target": "\u0b87\u0bb2\u0b95\u0bcd\u0b95\u0bc1", "Link": "\u0b87\u0ba3\u0bc8\u0baa\u0bcd\u0baa\u0bc1", "Poster": "\u0b9a\u0bc1\u0bb5\u0bb0\u0bca\u0b9f\u0bcd\u0b9f\u0bbf", "Media": "\u0b8a\u0b9f\u0b95\u0bae\u0bcd", "Print": "\u0b85\u0b9a\u0bcd\u0b9a\u0bbf\u0b9f\u0bc1\u0b95", "Prev": "\u0bae\u0bc1\u0ba8\u0bcd\u0ba4\u0bc8\u0baf", "Find and replace": "\u0b95\u0ba3\u0bcd\u0b9f\u0bc1\u0baa\u0bbf\u0b9f\u0bbf\u0ba4\u0bcd\u0ba4\u0bc1 \u0bae\u0bbe\u0bb1\u0bcd\u0bb1\u0bc1\u0b95", "Whole words": "\u0bae\u0bc1\u0bb4\u0bc1 \u0b9a\u0bca\u0bb1\u0bcd\u0b95\u0bb3\u0bcd", "Spellcheck": "\u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0baa\u0bcd\u0baa\u0bbf\u0bb4\u0bc8\u0baf\u0bc8 \u0b9a\u0bb0\u0bbf\u0baa\u0bbe\u0bb0\u0bcd\u0b95\u0bcd\u0b95", "Caption": "\u0ba4\u0bb2\u0bc8\u0baa\u0bcd\u0baa\u0bc1", "Insert template": "\u0bb5\u0bbe\u0bb0\u0bcd\u0baa\u0bcd\u0baa\u0bc1\u0bb0\u0bc1 \u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bc1\u0b95" }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/tinymce/langs/th_TH.js ================================================ tinymce.addI18n('th_TH',{ "Redo": "\u0e17\u0e33\u0e43\u0e2b\u0e21\u0e48\u0e2d\u0e35\u0e01", "Undo": "\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19\u0e01\u0e25\u0e31\u0e1a\u0e04\u0e37\u0e19", "Cut": "\u0e15\u0e31\u0e14", "Copy": "\u0e04\u0e31\u0e14\u0e25\u0e2d\u0e01", "Paste": "\u0e27\u0e32\u0e07", "Select all": "\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14", "New document": "\u0e40\u0e2d\u0e01\u0e2a\u0e32\u0e23\u0e43\u0e2b\u0e21\u0e48", "Ok": "\u0e15\u0e01\u0e25\u0e07", "Cancel": "\u0e22\u0e01\u0e40\u0e25\u0e34\u0e01", "Visual aids": "\u0e17\u0e31\u0e28\u0e19\u0e39\u0e1b\u0e01\u0e23\u0e13\u0e4c", "Bold": "\u0e15\u0e31\u0e27\u0e2b\u0e19\u0e32", "Italic": "\u0e15\u0e31\u0e27\u0e40\u0e2d\u0e35\u0e22\u0e07", "Underline": "\u0e02\u0e35\u0e14\u0e40\u0e2a\u0e49\u0e19\u0e43\u0e15\u0e49", "Strikethrough": "\u0e02\u0e35\u0e14\u0e04\u0e23\u0e48\u0e2d\u0e21", "Superscript": "\u0e15\u0e31\u0e27\u0e22\u0e01", "Subscript": "\u0e15\u0e31\u0e27\u0e2b\u0e49\u0e2d\u0e22", "Clear formatting": "\u0e25\u0e49\u0e32\u0e07\u0e01\u0e32\u0e23\u0e08\u0e31\u0e14\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a", "Align left": "\u0e08\u0e31\u0e14\u0e0a\u0e34\u0e14\u0e0b\u0e49\u0e32\u0e22", "Align center": "\u0e08\u0e31\u0e14\u0e01\u0e36\u0e48\u0e07\u0e01\u0e25\u0e32\u0e07", "Align right": "\u0e08\u0e31\u0e14\u0e0a\u0e34\u0e14\u0e02\u0e27\u0e32", "Justify": "\u0e40\u0e15\u0e47\u0e21\u0e41\u0e19\u0e27", "Bullet list": "\u0e23\u0e32\u0e22\u0e01\u0e32\u0e23\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2b\u0e31\u0e27\u0e02\u0e49\u0e2d\u0e22\u0e48\u0e2d\u0e22", "Numbered list": "\u0e23\u0e32\u0e22\u0e01\u0e32\u0e23\u0e25\u0e33\u0e14\u0e31\u0e1a\u0e40\u0e25\u0e02", "Decrease indent": "\u0e25\u0e14\u0e01\u0e32\u0e23\u0e40\u0e22\u0e37\u0e49\u0e2d\u0e07", "Increase indent": "\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e01\u0e32\u0e23\u0e40\u0e22\u0e37\u0e49\u0e2d\u0e07", "Close": "\u0e1b\u0e34\u0e14", "Formats": "\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a", "Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u0e40\u0e1a\u0e23\u0e32\u0e27\u0e4c\u0e40\u0e0b\u0e2d\u0e23\u0e4c\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13\u0e44\u0e21\u0e48\u0e2a\u0e19\u0e31\u0e1a\u0e2a\u0e19\u0e38\u0e19\u0e01\u0e32\u0e23\u0e40\u0e02\u0e49\u0e32\u0e16\u0e36\u0e07\u0e42\u0e14\u0e22\u0e15\u0e23\u0e07\u0e44\u0e1b\u0e22\u0e31\u0e07\u0e04\u0e25\u0e34\u0e1b\u0e1a\u0e2d\u0e23\u0e4c\u0e14 \u0e01\u0e23\u0e38\u0e13\u0e32\u0e43\u0e0a\u0e49\u0e41\u0e1b\u0e49\u0e19\u0e1e\u0e34\u0e21\u0e1e\u0e4c\u0e25\u0e31\u0e14 Ctrl+X\/C\/V \u0e41\u0e17\u0e19", "Headers": "\u0e2a\u0e48\u0e27\u0e19\u0e2b\u0e31\u0e27", "Header 1": "\u0e2a\u0e48\u0e27\u0e19\u0e2b\u0e31\u0e27 1", "Header 2": "\u0e2a\u0e48\u0e27\u0e19\u0e2b\u0e31\u0e27 2", "Header 3": "\u0e2a\u0e48\u0e27\u0e19\u0e2b\u0e31\u0e27 3", "Header 4": "\u0e2a\u0e48\u0e27\u0e19\u0e2b\u0e31\u0e27 4", "Header 5": "\u0e2a\u0e48\u0e27\u0e19\u0e2b\u0e31\u0e27 5", "Header 6": "\u0e2a\u0e48\u0e27\u0e19\u0e2b\u0e31\u0e27 6", "Headings": "\u0e2b\u0e31\u0e27\u0e40\u0e23\u0e37\u0e48\u0e2d\u0e07", "Heading 1": "\u0e2b\u0e31\u0e27\u0e40\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e17\u0e35\u0e48 1", "Heading 2": "\u0e2b\u0e31\u0e27\u0e40\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e17\u0e35\u0e48 2", "Heading 3": "\u0e2b\u0e31\u0e27\u0e40\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e17\u0e35\u0e48 3", "Heading 4": "\u0e2b\u0e31\u0e27\u0e40\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e17\u0e35\u0e48 4", "Heading 5": "\u0e2b\u0e31\u0e27\u0e40\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e17\u0e35\u0e48 5", "Heading 6": "\u0e2b\u0e31\u0e27\u0e40\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e17\u0e35\u0e48 6", "Preformatted": "\u0e1f\u0e2d\u0e23\u0e4c\u0e41\u0e21\u0e15\u0e44\u0e27\u0e49\u0e01\u0e48\u0e2d\u0e19", "Div": "Div", "Pre": "Pre", "Code": "\u0e23\u0e2b\u0e31\u0e2a", "Paragraph": "\u0e22\u0e48\u0e2d\u0e2b\u0e19\u0e49\u0e32", "Blockquote": "Blockquote", "Inline": "\u0e41\u0e1a\u0e1a\u0e2d\u0e34\u0e19\u0e44\u0e25\u0e19\u0e4c", "Blocks": "\u0e1a\u0e25\u0e4a\u0e2d\u0e04", "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u0e01\u0e32\u0e23\u0e27\u0e32\u0e07\u0e15\u0e2d\u0e19\u0e19\u0e35\u0e49\u0e2d\u0e22\u0e39\u0e48\u0e43\u0e19\u0e42\u0e2b\u0e21\u0e14\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21\u0e18\u0e23\u0e23\u0e21\u0e14\u0e32 \u0e40\u0e19\u0e37\u0e49\u0e2d\u0e2b\u0e32\u0e08\u0e30\u0e16\u0e39\u0e01\u0e27\u0e32\u0e07\u0e40\u0e1b\u0e47\u0e19\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21\u0e18\u0e23\u0e23\u0e21\u0e14\u0e32\u0e08\u0e19\u0e01\u0e27\u0e48\u0e32\u0e04\u0e38\u0e13\u0e08\u0e30\u0e1b\u0e34\u0e14\u0e15\u0e31\u0e27\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e19\u0e35\u0e49", "Fonts": "\u0e41\u0e1a\u0e1a\u0e2d\u0e31\u0e01\u0e29\u0e23", "Font Sizes": "\u0e02\u0e19\u0e32\u0e14\u0e41\u0e1a\u0e1a\u0e2d\u0e31\u0e01\u0e29\u0e23", "Class": "\u0e0a\u0e31\u0e49\u0e19", "Browse for an image": "\u0e40\u0e23\u0e35\u0e22\u0e01\u0e14\u0e39\u0e23\u0e39\u0e1b\u0e20\u0e32\u0e1e", "OR": "OR", "Drop an image here": "\u0e27\u0e32\u0e07\u0e23\u0e39\u0e1b\u0e20\u0e32\u0e1e\u0e17\u0e35\u0e48\u0e19\u0e35\u0e48", "Upload": "\u0e2d\u0e31\u0e1b\u0e42\u0e2b\u0e25\u0e14", "Block": "\u0e1a\u0e25\u0e47\u0e2d\u0e01", "Align": "Align", "Default": "\u0e04\u0e48\u0e32\u0e40\u0e23\u0e34\u0e48\u0e21\u0e15\u0e49\u0e19", "Circle": "\u0e27\u0e07\u0e01\u0e25\u0e21", "Disc": "\u0e14\u0e34\u0e2a\u0e01\u0e4c", "Square": "\u0e08\u0e31\u0e15\u0e38\u0e23\u0e31\u0e2a", "Lower Alpha": "\u0e2d\u0e31\u0e25\u0e1f\u0e32\u0e17\u0e35\u0e48\u0e15\u0e48\u0e33\u0e01\u0e27\u0e48\u0e32", "Lower Greek": "\u0e01\u0e23\u0e35\u0e01\u0e17\u0e35\u0e48\u0e15\u0e48\u0e33\u0e01\u0e27\u0e48\u0e32", "Lower Roman": "\u0e42\u0e23\u0e21\u0e31\u0e19\u0e17\u0e35\u0e48\u0e15\u0e48\u0e33\u0e01\u0e27\u0e48\u0e32", "Upper Alpha": "\u0e2d\u0e31\u0e25\u0e1f\u0e32\u0e17\u0e35\u0e48\u0e2a\u0e39\u0e07\u0e01\u0e27\u0e48\u0e32", "Upper Roman": "\u0e42\u0e23\u0e21\u0e31\u0e19\u0e17\u0e35\u0e48\u0e2a\u0e39\u0e07\u0e01\u0e27\u0e48\u0e32", "Anchor...": "\u0e08\u0e38\u0e14\u0e22\u0e36\u0e14...", "Name": "\u0e0a\u0e37\u0e48\u0e2d", "Id": "Id", "Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Id \u0e04\u0e27\u0e23\u0e08\u0e30\u0e02\u0e36\u0e49\u0e19\u0e15\u0e49\u0e19\u0e14\u0e49\u0e27\u0e22\u0e15\u0e31\u0e27\u0e2d\u0e31\u0e01\u0e29\u0e23 \u0e15\u0e32\u0e21\u0e14\u0e49\u0e27\u0e22\u0e15\u0e31\u0e27\u0e2d\u0e31\u0e01\u0e29\u0e23 \u0e15\u0e31\u0e27\u0e40\u0e25\u0e02 \u0e02\u0e35\u0e14\u0e01\u0e25\u0e32\u0e07 \u0e08\u0e38\u0e14 \u0e2d\u0e31\u0e12\u0e20\u0e32\u0e04 \u0e2b\u0e23\u0e37\u0e2d \u0e02\u0e35\u0e14\u0e25\u0e48\u0e32\u0e07", "You have unsaved changes are you sure you want to navigate away?": "\u0e04\u0e38\u0e13\u0e21\u0e35\u0e01\u0e32\u0e23\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19\u0e41\u0e1b\u0e25\u0e07\u0e17\u0e35\u0e48\u0e44\u0e21\u0e48\u0e44\u0e14\u0e49\u0e1a\u0e31\u0e19\u0e17\u0e36\u0e01 \u0e04\u0e38\u0e13\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e17\u0e35\u0e48\u0e08\u0e30\u0e2d\u0e2d\u0e01\u0e2b\u0e23\u0e37\u0e2d\u0e44\u0e21\u0e48?", "Restore last draft": "\u0e04\u0e37\u0e19\u0e04\u0e48\u0e32\u0e41\u0e1a\u0e1a\u0e23\u0e48\u0e32\u0e07\u0e25\u0e48\u0e32\u0e2a\u0e38\u0e14", "Special character...": "\u0e2d\u0e31\u0e01\u0e02\u0e23\u0e30\u0e1e\u0e34\u0e40\u0e28\u0e29...", "Source code": "\u0e42\u0e04\u0e49\u0e14\u0e15\u0e49\u0e19\u0e09\u0e1a\u0e31\u0e1a", "Insert\/Edit code sample": "\u0e41\u0e17\u0e23\u0e01\/\u0e41\u0e01\u0e49\u0e44\u0e02\u0e15\u0e31\u0e27\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e42\u0e04\u0e49\u0e14", "Language": "\u0e20\u0e32\u0e29\u0e32", "Code sample...": "\u0e15\u0e31\u0e27\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e42\u0e04\u0e49\u0e14...", "Color Picker": "\u0e15\u0e31\u0e27\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e2a\u0e35", "R": "\u0e41\u0e14\u0e07", "G": "\u0e40\u0e02\u0e35\u0e22\u0e27", "B": "\u0e19\u0e49\u0e33\u0e40\u0e07\u0e34\u0e19", "Left to right": "\u0e0b\u0e49\u0e32\u0e22\u0e44\u0e1b\u0e02\u0e27\u0e32", "Right to left": "\u0e02\u0e27\u0e32\u0e44\u0e1b\u0e0b\u0e49\u0e32\u0e22", "Emoticons...": "\u0e2d\u0e35\u0e42\u0e21\u0e15\u0e34\u0e04\u0e2d\u0e19...", "Metadata and Document Properties": "\u0e40\u0e21\u0e15\u0e32\u0e14\u0e32\u0e15\u0e49\u0e32\u0e41\u0e25\u0e30\u0e04\u0e38\u0e13\u0e2a\u0e21\u0e1a\u0e31\u0e15\u0e34\u0e02\u0e2d\u0e07\u0e40\u0e2d\u0e01\u0e2a\u0e32\u0e23", "Title": "\u0e0a\u0e37\u0e48\u0e2d\u0e40\u0e23\u0e37\u0e48\u0e2d\u0e07", "Keywords": "\u0e04\u0e33\u0e2a\u0e33\u0e04\u0e31\u0e0d", "Description": "\u0e04\u0e33\u0e2d\u0e18\u0e34\u0e1a\u0e32\u0e22", "Robots": "\u0e2b\u0e38\u0e48\u0e19\u0e22\u0e19\u0e15\u0e4c", "Author": "\u0e1c\u0e39\u0e49\u0e40\u0e02\u0e35\u0e22\u0e19", "Encoding": "\u0e01\u0e32\u0e23\u0e40\u0e02\u0e49\u0e32\u0e23\u0e2b\u0e31\u0e2a", "Fullscreen": "\u0e40\u0e15\u0e47\u0e21\u0e08\u0e2d", "Action": "\u0e01\u0e32\u0e23\u0e01\u0e23\u0e30\u0e17\u0e33", "Shortcut": "\u0e17\u0e32\u0e07\u0e25\u0e31\u0e14", "Help": "\u0e0a\u0e48\u0e27\u0e22\u0e40\u0e2b\u0e25\u0e37\u0e2d", "Address": "\u0e17\u0e35\u0e48\u0e2d\u0e22\u0e39\u0e48", "Focus to menubar": "\u0e42\u0e1f\u0e01\u0e31\u0e2a\u0e44\u0e1b\u0e17\u0e35\u0e48\u0e40\u0e21\u0e19\u0e39\u0e1a\u0e32\u0e23\u0e4c", "Focus to toolbar": "\u0e42\u0e1f\u0e01\u0e31\u0e2a\u0e44\u0e1b\u0e17\u0e35\u0e48\u0e41\u0e16\u0e1a\u0e40\u0e04\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e21\u0e37\u0e2d", "Focus to element path": "\u0e42\u0e1f\u0e01\u0e31\u0e2a\u0e44\u0e1b\u0e17\u0e35\u0e48\u0e40\u0e2a\u0e49\u0e19\u0e17\u0e32\u0e07\u0e02\u0e2d\u0e07\u0e2d\u0e07\u0e04\u0e4c\u0e1b\u0e23\u0e30\u0e01\u0e2d\u0e1a", "Focus to contextual toolbar": "\u0e42\u0e1f\u0e01\u0e31\u0e2a\u0e44\u0e1b\u0e17\u0e35\u0e48\u0e41\u0e16\u0e1a\u0e40\u0e04\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e21\u0e37\u0e2d\u0e15\u0e32\u0e21\u0e1a\u0e23\u0e34\u0e1a\u0e17", "Insert link (if link plugin activated)": "\u0e41\u0e17\u0e23\u0e01\u0e25\u0e34\u0e07\u0e01\u0e4c (\u0e2b\u0e32\u0e01\u0e40\u0e1b\u0e34\u0e14\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e1b\u0e25\u0e31\u0e4a\u0e01\u0e2d\u0e34\u0e19\u0e25\u0e34\u0e07\u0e01\u0e4c)", "Save (if save plugin activated)": "\u0e1a\u0e31\u0e19\u0e17\u0e36\u0e01 (\u0e2b\u0e32\u0e01\u0e40\u0e1b\u0e34\u0e14\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e1b\u0e25\u0e31\u0e4a\u0e01\u0e2d\u0e34\u0e19\u0e1a\u0e31\u0e19\u0e17\u0e36\u0e01)", "Find (if searchreplace plugin activated)": "\u0e04\u0e49\u0e19\u0e2b\u0e32 (\u0e2b\u0e32\u0e01\u0e40\u0e1b\u0e34\u0e14\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e1b\u0e25\u0e31\u0e4a\u0e01\u0e2d\u0e34\u0e19 searchreplace)", "Plugins installed ({0}):": "\u0e1b\u0e25\u0e31\u0e4a\u0e01\u0e2d\u0e34\u0e19\u0e17\u0e35\u0e48\u0e15\u0e34\u0e14\u0e15\u0e31\u0e49\u0e07\u0e41\u0e25\u0e49\u0e27 ({0}):", "Premium plugins:": "\u0e1b\u0e25\u0e31\u0e4a\u0e01\u0e2d\u0e34\u0e19\u0e1e\u0e23\u0e35\u0e40\u0e21\u0e35\u0e22\u0e21:", "Learn more...": "\u0e40\u0e23\u0e35\u0e22\u0e19\u0e23\u0e39\u0e49\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e40\u0e15\u0e34\u0e21...", "You are using {0}": "\u0e04\u0e38\u0e13\u0e01\u0e33\u0e25\u0e31\u0e07\u0e43\u0e0a\u0e49 {0}", "Plugins": "\u0e1b\u0e25\u0e31\u0e4a\u0e01\u0e2d\u0e34\u0e19", "Handy Shortcuts": "\u0e17\u0e32\u0e07\u0e25\u0e31\u0e14\u0e14\u0e49\u0e27\u0e22\u0e21\u0e37\u0e2d", "Horizontal line": "\u0e40\u0e2a\u0e49\u0e19\u0e41\u0e19\u0e27\u0e19\u0e2d\u0e19", "Insert\/edit image": "\u0e41\u0e17\u0e23\u0e01\/\u0e41\u0e01\u0e49\u0e44\u0e02\u0e23\u0e39\u0e1b", "Image description": "\u0e04\u0e33\u0e2d\u0e18\u0e34\u0e1a\u0e32\u0e22\u0e23\u0e39\u0e1b", "Source": "\u0e41\u0e2b\u0e25\u0e48\u0e07\u0e17\u0e35\u0e48\u0e21\u0e32", "Dimensions": "\u0e02\u0e19\u0e32\u0e14", "Constrain proportions": "\u0e08\u0e33\u0e01\u0e31\u0e14\u0e2a\u0e31\u0e14\u0e2a\u0e48\u0e27\u0e19", "General": "\u0e17\u0e31\u0e48\u0e27\u0e44\u0e1b", "Advanced": "\u0e02\u0e31\u0e49\u0e19\u0e2a\u0e39\u0e07", "Style": "\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a", "Vertical space": "\u0e0a\u0e48\u0e2d\u0e07\u0e27\u0e48\u0e32\u0e07\u0e41\u0e19\u0e27\u0e15\u0e31\u0e49\u0e07", "Horizontal space": "\u0e0a\u0e48\u0e2d\u0e07\u0e27\u0e48\u0e32\u0e07\u0e41\u0e19\u0e27\u0e19\u0e2d\u0e19", "Border": "\u0e40\u0e2a\u0e49\u0e19\u0e02\u0e2d\u0e1a", "Insert image": "\u0e41\u0e17\u0e23\u0e01\u0e23\u0e39\u0e1b\u0e20\u0e32\u0e1e", "Image...": "\u0e23\u0e39\u0e1b\u0e20\u0e32\u0e1e...", "Image list": "\u0e23\u0e32\u0e22\u0e01\u0e32\u0e23\u0e23\u0e39\u0e1b\u0e20\u0e32\u0e1e", "Rotate counterclockwise": "\u0e2b\u0e21\u0e38\u0e19\u0e17\u0e27\u0e19\u0e40\u0e02\u0e47\u0e21\u0e19\u0e32\u0e2c\u0e34\u0e01\u0e32", "Rotate clockwise": "\u0e2b\u0e21\u0e38\u0e19\u0e15\u0e32\u0e21\u0e40\u0e02\u0e47\u0e21\u0e19\u0e32\u0e2c\u0e34\u0e01\u0e32", "Flip vertically": "\u0e1e\u0e25\u0e34\u0e01\u0e15\u0e32\u0e21\u0e41\u0e19\u0e27\u0e15\u0e31\u0e49\u0e07", "Flip horizontally": "\u0e1e\u0e25\u0e34\u0e01\u0e15\u0e32\u0e21\u0e41\u0e19\u0e27\u0e19\u0e2d\u0e19", "Edit image": "\u0e41\u0e01\u0e49\u0e44\u0e02\u0e23\u0e39\u0e1b", "Image options": "\u0e15\u0e31\u0e27\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e23\u0e39\u0e1b\u0e20\u0e32\u0e1e", "Zoom in": "\u0e02\u0e22\u0e32\u0e22\u0e40\u0e02\u0e49\u0e32", "Zoom out": "\u0e22\u0e48\u0e2d\u0e2d\u0e2d\u0e01", "Crop": "\u0e04\u0e23\u0e2d\u0e1b\u0e15\u0e31\u0e14", "Resize": "\u0e1b\u0e23\u0e31\u0e1a\u0e02\u0e19\u0e32\u0e14", "Orientation": "\u0e01\u0e32\u0e23\u0e08\u0e31\u0e14\u0e27\u0e32\u0e07", "Brightness": "\u0e04\u0e27\u0e32\u0e21\u0e2a\u0e27\u0e48\u0e32\u0e07", "Sharpen": "\u0e04\u0e27\u0e32\u0e21\u0e04\u0e21", "Contrast": "\u0e04\u0e27\u0e32\u0e21\u0e40\u0e1b\u0e23\u0e35\u0e22\u0e1a\u0e15\u0e48\u0e32\u0e07", "Color levels": "\u0e23\u0e30\u0e14\u0e31\u0e1a\u0e2a\u0e35", "Gamma": "\u0e41\u0e01\u0e21\u0e21\u0e32", "Invert": "\u0e22\u0e49\u0e2d\u0e19\u0e01\u0e25\u0e31\u0e1a", "Apply": "\u0e19\u0e33\u0e44\u0e1b\u0e43\u0e0a\u0e49", "Back": "\u0e01\u0e25\u0e31\u0e1a", "Insert date\/time": "\u0e41\u0e17\u0e23\u0e01\u0e27\u0e31\u0e19\u0e17\u0e35\u0e48\/\u0e40\u0e27\u0e25\u0e32", "Date\/time": "\u0e27\u0e31\u0e19\u0e17\u0e35\u0e48\/\u0e40\u0e27\u0e25\u0e32", "Insert\/Edit Link": "\u0e41\u0e17\u0e23\u0e01\/\u0e41\u0e01\u0e49\u0e44\u0e02\u0e25\u0e34\u0e07\u0e01\u0e4c", "Insert\/edit link": "\u0e41\u0e17\u0e23\u0e01\/\u0e41\u0e01\u0e49\u0e44\u0e02\u0e25\u0e34\u0e07\u0e01\u0e4c", "Text to display": "\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21\u0e17\u0e35\u0e48\u0e08\u0e30\u0e41\u0e2a\u0e14\u0e07", "Url": "URL", "Open link in...": "\u0e40\u0e1b\u0e34\u0e14\u0e25\u0e34\u0e07\u0e01\u0e4c\u0e43\u0e19...", "Current window": "\u0e2b\u0e19\u0e49\u0e32\u0e15\u0e48\u0e32\u0e07\u0e1b\u0e31\u0e08\u0e08\u0e38\u0e1a\u0e31\u0e19", "None": "\u0e44\u0e21\u0e48\u0e21\u0e35", "New window": "\u0e40\u0e1b\u0e34\u0e14\u0e2b\u0e19\u0e49\u0e32\u0e15\u0e48\u0e32\u0e07\u0e43\u0e2b\u0e21\u0e48", "Remove link": "\u0e40\u0e2d\u0e32\u0e25\u0e34\u0e07\u0e01\u0e4c\u0e2d\u0e2d\u0e01", "Anchors": "\u0e08\u0e38\u0e14\u0e22\u0e36\u0e14", "Link...": "\u0e25\u0e34\u0e07\u0e01\u0e4c...", "Paste or type a link": "\u0e27\u0e32\u0e07\u0e2b\u0e23\u0e37\u0e2d\u0e1b\u0e49\u0e2d\u0e19\u0e25\u0e34\u0e07\u0e01\u0e4c", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "URL \u0e17\u0e35\u0e48\u0e04\u0e38\u0e13\u0e23\u0e30\u0e1a\u0e38\u0e14\u0e39\u0e40\u0e2b\u0e21\u0e37\u0e2d\u0e19\u0e27\u0e48\u0e32\u0e40\u0e1b\u0e47\u0e19\u0e2d\u0e35\u0e40\u0e21\u0e25\u0e41\u0e2d\u0e14\u0e40\u0e14\u0e23\u0e2a \u0e04\u0e38\u0e13\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e43\u0e2a\u0e48 mailto: \u0e19\u0e33\u0e2b\u0e19\u0e49\u0e32\u0e2b\u0e23\u0e37\u0e2d\u0e44\u0e21\u0e48", "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "URL \u0e17\u0e35\u0e48\u0e04\u0e38\u0e13\u0e23\u0e30\u0e1a\u0e38\u0e14\u0e39\u0e40\u0e2b\u0e21\u0e37\u0e2d\u0e19\u0e27\u0e48\u0e32\u0e40\u0e1b\u0e47\u0e19\u0e25\u0e34\u0e07\u0e01\u0e4c\u0e20\u0e32\u0e22\u0e19\u0e2d\u0e01 \u0e04\u0e38\u0e13\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e43\u0e2a\u0e48 http:\/\/ \u0e19\u0e33\u0e2b\u0e19\u0e49\u0e32\u0e2b\u0e23\u0e37\u0e2d\u0e44\u0e21\u0e48", "Link list": "\u0e23\u0e32\u0e22\u0e01\u0e32\u0e23\u0e25\u0e34\u0e07\u0e01\u0e4c", "Insert video": "\u0e41\u0e17\u0e23\u0e01\u0e27\u0e34\u0e14\u0e35\u0e42\u0e2d", "Insert\/edit video": "\u0e41\u0e17\u0e23\u0e01\/\u0e41\u0e01\u0e49\u0e44\u0e02\u0e27\u0e34\u0e14\u0e35\u0e42\u0e2d", "Insert\/edit media": "\u0e41\u0e17\u0e23\u0e01\/\u0e41\u0e01\u0e49\u0e44\u0e02\u0e2a\u0e37\u0e48\u0e2d", "Alternative source": "\u0e41\u0e2b\u0e25\u0e48\u0e07\u0e17\u0e35\u0e48\u0e21\u0e32\u0e2a\u0e33\u0e23\u0e2d\u0e07", "Alternative source URL": "URL \u0e41\u0e2b\u0e25\u0e48\u0e07\u0e17\u0e35\u0e48\u0e21\u0e32\u0e2a\u0e33\u0e23\u0e2d\u0e07", "Media poster (Image URL)": "\u0e42\u0e1b\u0e2a\u0e40\u0e15\u0e2d\u0e23\u0e4c\u0e21\u0e35\u0e40\u0e14\u0e35\u0e22 (URL \u0e23\u0e39\u0e1b\u0e20\u0e32\u0e1e)", "Paste your embed code below:": "\u0e27\u0e32\u0e07\u0e42\u0e04\u0e49\u0e14\u0e1d\u0e31\u0e07\u0e15\u0e31\u0e27\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13\u0e14\u0e49\u0e32\u0e19\u0e25\u0e48\u0e32\u0e07:", "Embed": "\u0e1d\u0e31\u0e07", "Media...": "\u0e21\u0e35\u0e40\u0e14\u0e35\u0e22...", "Nonbreaking space": "\u0e0a\u0e48\u0e2d\u0e07\u0e27\u0e48\u0e32\u0e07\u0e44\u0e21\u0e48\u0e41\u0e22\u0e01", "Page break": "\u0e15\u0e31\u0e27\u0e41\u0e1a\u0e48\u0e07\u0e2b\u0e19\u0e49\u0e32", "Paste as text": "\u0e27\u0e32\u0e07\u0e40\u0e1b\u0e47\u0e19\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21", "Preview": "\u0e41\u0e2a\u0e14\u0e07\u0e15\u0e31\u0e27\u0e2d\u0e22\u0e48\u0e32\u0e07", "Print...": "\u0e1e\u0e34\u0e21\u0e1e\u0e4c...", "Save": "\u0e1a\u0e31\u0e19\u0e17\u0e36\u0e01", "Find": "\u0e04\u0e49\u0e19\u0e2b\u0e32", "Replace with": "\u0e41\u0e17\u0e19\u0e17\u0e35\u0e48\u0e14\u0e49\u0e27\u0e22", "Replace": "\u0e41\u0e17\u0e19\u0e17\u0e35\u0e48", "Replace all": "\u0e41\u0e17\u0e19\u0e17\u0e35\u0e48\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14", "Previous": "\u0e01\u0e48\u0e2d\u0e19\u0e2b\u0e19\u0e49\u0e32\u0e19\u0e35\u0e49", "Next": "\u0e16\u0e31\u0e14\u0e44\u0e1b", "Find and replace...": "\u0e04\u0e49\u0e19\u0e2b\u0e32\u0e41\u0e25\u0e30\u0e41\u0e17\u0e19\u0e17\u0e35\u0e48...", "Could not find the specified string.": "\u0e44\u0e21\u0e48\u0e1e\u0e1a\u0e2a\u0e15\u0e23\u0e34\u0e07\u0e17\u0e35\u0e48\u0e23\u0e30\u0e1a\u0e38", "Match case": "\u0e15\u0e23\u0e07\u0e15\u0e32\u0e21\u0e15\u0e31\u0e27\u0e1e\u0e34\u0e21\u0e1e\u0e4c\u0e43\u0e2b\u0e0d\u0e48-\u0e40\u0e25\u0e47\u0e01", "Find whole words only": "\u0e04\u0e49\u0e19\u0e2b\u0e32\u0e17\u0e31\u0e49\u0e07\u0e04\u0e33\u0e40\u0e17\u0e48\u0e32\u0e19\u0e31\u0e49\u0e19", "Spell check": "\u0e15\u0e23\u0e27\u0e08\u0e2a\u0e2d\u0e1a\u0e04\u0e33\u0e1c\u0e34\u0e14", "Ignore": "\u0e25\u0e30\u0e40\u0e27\u0e49\u0e19", "Ignore all": "\u0e25\u0e30\u0e40\u0e27\u0e49\u0e19\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14", "Finish": "\u0e40\u0e2a\u0e23\u0e47\u0e08\u0e2a\u0e34\u0e49\u0e19", "Add to Dictionary": "\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e43\u0e19\u0e1e\u0e08\u0e19\u0e32\u0e19\u0e38\u0e01\u0e23\u0e21", "Insert table": "\u0e41\u0e17\u0e23\u0e01\u0e15\u0e32\u0e23\u0e32\u0e07", "Table properties": "\u0e04\u0e38\u0e13\u0e2a\u0e21\u0e1a\u0e31\u0e15\u0e34\u0e02\u0e2d\u0e07\u0e15\u0e32\u0e23\u0e32\u0e07", "Delete table": "\u0e25\u0e1a\u0e15\u0e32\u0e23\u0e32\u0e07", "Cell": "\u0e40\u0e0b\u0e25\u0e25\u0e4c", "Row": "\u0e41\u0e16\u0e27", "Column": "\u0e04\u0e2d\u0e25\u0e31\u0e21\u0e19\u0e4c", "Cell properties": "\u0e04\u0e38\u0e13\u0e2a\u0e21\u0e1a\u0e31\u0e15\u0e34\u0e02\u0e2d\u0e07\u0e40\u0e0b\u0e25\u0e25\u0e4c", "Merge cells": "\u0e1c\u0e2a\u0e32\u0e19\u0e40\u0e0b\u0e25\u0e25\u0e4c", "Split cell": "\u0e41\u0e22\u0e01\u0e40\u0e0b\u0e25\u0e25\u0e4c", "Insert row before": "\u0e41\u0e17\u0e23\u0e01\u0e41\u0e16\u0e27\u0e14\u0e49\u0e32\u0e19\u0e1a\u0e19", "Insert row after": "\u0e41\u0e17\u0e23\u0e01\u0e41\u0e16\u0e27\u0e14\u0e49\u0e32\u0e19\u0e25\u0e48\u0e32\u0e07", "Delete row": "\u0e25\u0e1a\u0e41\u0e16\u0e27", "Row properties": "\u0e04\u0e38\u0e13\u0e2a\u0e21\u0e1a\u0e31\u0e15\u0e34\u0e02\u0e2d\u0e07\u0e41\u0e16\u0e27", "Cut row": "\u0e15\u0e31\u0e14\u0e41\u0e16\u0e27", "Copy row": "\u0e04\u0e31\u0e14\u0e25\u0e2d\u0e01\u0e41\u0e16\u0e27", "Paste row before": "\u0e27\u0e32\u0e07\u0e41\u0e16\u0e27\u0e14\u0e49\u0e32\u0e19\u0e1a\u0e19", "Paste row after": "\u0e27\u0e32\u0e07\u0e41\u0e16\u0e27\u0e14\u0e49\u0e32\u0e19\u0e25\u0e48\u0e32\u0e07", "Insert column before": "\u0e41\u0e17\u0e23\u0e01\u0e04\u0e2d\u0e25\u0e31\u0e21\u0e19\u0e4c\u0e02\u0e49\u0e32\u0e07\u0e2b\u0e19\u0e49\u0e32", "Insert column after": "\u0e41\u0e17\u0e23\u0e01\u0e04\u0e2d\u0e25\u0e31\u0e21\u0e19\u0e4c\u0e02\u0e49\u0e32\u0e07\u0e2b\u0e25\u0e31\u0e07", "Delete column": "\u0e25\u0e1a\u0e04\u0e2d\u0e25\u0e31\u0e21\u0e19\u0e4c", "Cols": "\u0e04\u0e2d\u0e25\u0e31\u0e21\u0e19\u0e4c", "Rows": "\u0e41\u0e16\u0e27", "Width": "\u0e04\u0e27\u0e32\u0e21\u0e01\u0e27\u0e49\u0e32\u0e07", "Height": "\u0e04\u0e27\u0e32\u0e21\u0e2a\u0e39\u0e07", "Cell spacing": "\u0e0a\u0e48\u0e2d\u0e07\u0e27\u0e48\u0e32\u0e07\u0e23\u0e30\u0e2b\u0e27\u0e48\u0e32\u0e07\u0e40\u0e0b\u0e25\u0e25\u0e4c", "Cell padding": "\u0e0a\u0e48\u0e2d\u0e07\u0e27\u0e48\u0e32\u0e07\u0e20\u0e32\u0e22\u0e43\u0e19\u0e40\u0e0b\u0e25\u0e25\u0e4c", "Show caption": "\u0e41\u0e2a\u0e14\u0e07\u0e04\u0e33\u0e1a\u0e23\u0e23\u0e22\u0e32\u0e22", "Left": "\u0e0b\u0e49\u0e32\u0e22", "Center": "\u0e01\u0e36\u0e48\u0e07\u0e01\u0e25\u0e32\u0e07", "Right": "\u0e02\u0e27\u0e32", "Cell type": "\u0e0a\u0e19\u0e34\u0e14\u0e02\u0e2d\u0e07\u0e40\u0e0b\u0e25\u0e25\u0e4c", "Scope": "\u0e02\u0e2d\u0e1a\u0e40\u0e02\u0e15", "Alignment": "\u0e01\u0e32\u0e23\u0e08\u0e31\u0e14\u0e41\u0e19\u0e27", "H Align": "\u0e01\u0e32\u0e23\u0e40\u0e23\u0e35\u0e22\u0e07\u0e43\u0e19\u0e41\u0e19\u0e27\u0e19\u0e2d\u0e19", "V Align": "\u0e01\u0e32\u0e23\u0e40\u0e23\u0e35\u0e22\u0e07\u0e43\u0e19\u0e41\u0e19\u0e27\u0e15\u0e31\u0e49\u0e07", "Top": "\u0e1a\u0e19", "Middle": "\u0e01\u0e25\u0e32\u0e07", "Bottom": "\u0e25\u0e48\u0e32\u0e07", "Header cell": "\u0e40\u0e0b\u0e25\u0e25\u0e4c\u0e2a\u0e48\u0e27\u0e19\u0e2b\u0e31\u0e27", "Row group": "\u0e01\u0e25\u0e38\u0e48\u0e21\u0e41\u0e16\u0e27", "Column group": "\u0e01\u0e25\u0e38\u0e48\u0e21\u0e04\u0e2d\u0e25\u0e31\u0e21\u0e19\u0e4c", "Row type": "\u0e0a\u0e19\u0e34\u0e14\u0e02\u0e2d\u0e07\u0e41\u0e16\u0e27", "Header": "\u0e2a\u0e48\u0e27\u0e19\u0e2b\u0e31\u0e27", "Body": "\u0e40\u0e19\u0e37\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21", "Footer": "\u0e2a\u0e48\u0e27\u0e19\u0e17\u0e49\u0e32\u0e22", "Border color": "\u0e2a\u0e35\u0e02\u0e2d\u0e1a", "Insert template...": "\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e41\u0e21\u0e48\u0e41\u0e1a\u0e1a...", "Templates": "\u0e41\u0e21\u0e48\u0e41\u0e1a\u0e1a", "Template": "\u0e41\u0e21\u0e48\u0e41\u0e1a\u0e1a", "Text color": "\u0e2a\u0e35\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21", "Background color": "\u0e2a\u0e35\u0e1e\u0e37\u0e49\u0e19\u0e2b\u0e25\u0e31\u0e07", "Custom...": "\u0e01\u0e33\u0e2b\u0e19\u0e14\u0e40\u0e2d\u0e07", "Custom color": "\u0e2a\u0e35\u0e17\u0e35\u0e48\u0e01\u0e33\u0e2b\u0e19\u0e14\u0e40\u0e2d\u0e07", "No color": "\u0e44\u0e21\u0e48\u0e21\u0e35\u0e2a\u0e35", "Remove color": "\u0e25\u0e1a\u0e2a\u0e35", "Table of Contents": "\u0e2a\u0e32\u0e23\u0e1a\u0e31\u0e0d", "Show blocks": "\u0e41\u0e2a\u0e14\u0e07\u0e1a\u0e25\u0e47\u0e2d\u0e01", "Show invisible characters": "\u0e41\u0e2a\u0e14\u0e07\u0e15\u0e31\u0e27\u0e2d\u0e31\u0e01\u0e29\u0e23\u0e17\u0e35\u0e48\u0e21\u0e2d\u0e07\u0e44\u0e21\u0e48\u0e40\u0e2b\u0e47\u0e19", "Word count": "\u0e19\u0e31\u0e1a\u0e08\u0e33\u0e19\u0e27\u0e19\u0e04\u0e33", "Count": "\u0e19\u0e31\u0e1a", "Document": "\u0e40\u0e2d\u0e01\u0e2a\u0e32\u0e23", "Selection": "\u0e01\u0e32\u0e23\u0e40\u0e25\u0e37\u0e2d\u0e01", "Words": "\u0e04\u0e33", "Words: {0}": "\u0e04\u0e33: {0}", "{0} words": "{0} \u0e04\u0e33", "File": "\u0e44\u0e1f\u0e25\u0e4c", "Edit": "\u0e41\u0e01\u0e49\u0e44\u0e02", "Insert": "\u0e41\u0e17\u0e23\u0e01", "View": "\u0e21\u0e38\u0e21\u0e21\u0e2d\u0e07", "Format": "\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a", "Table": "\u0e15\u0e32\u0e23\u0e32\u0e07", "Tools": "\u0e40\u0e04\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e21\u0e37\u0e2d", "Powered by {0}": "\u0e02\u0e31\u0e1a\u0e40\u0e04\u0e25\u0e37\u0e48\u0e2d\u0e19\u0e42\u0e14\u0e22 {0}", "Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u0e1e\u0e37\u0e49\u0e19\u0e17\u0e35\u0e48 Rich Text \u0e01\u0e14 ALT-F9 \u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e40\u0e21\u0e19\u0e39 \u0e01\u0e14 ALT-F10 \u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e41\u0e16\u0e1a\u0e40\u0e04\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e21\u0e37\u0e2d \u0e01\u0e14 ALT-0 \u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e04\u0e27\u0e32\u0e21\u0e0a\u0e48\u0e27\u0e22\u0e40\u0e2b\u0e25\u0e37\u0e2d", "Image title": "\u0e0a\u0e37\u0e48\u0e2d\u0e23\u0e39\u0e1b\u0e20\u0e32\u0e1e", "Border width": "\u0e04\u0e27\u0e32\u0e21\u0e01\u0e27\u0e49\u0e32\u0e07\u0e40\u0e2a\u0e49\u0e19\u0e02\u0e2d\u0e1a", "Border style": "\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a\u0e40\u0e2a\u0e49\u0e19\u0e02\u0e2d\u0e1a", "Error": "\u0e04\u0e27\u0e32\u0e21\u0e1c\u0e34\u0e14\u0e1e\u0e25\u0e32\u0e14", "Warn": "\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21\u0e40\u0e15\u0e37\u0e2d\u0e19", "Valid": "\u0e16\u0e39\u0e01\u0e15\u0e49\u0e2d\u0e07", "To open the popup, press Shift+Enter": "\u0e01\u0e14 Shift+Enter \u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e40\u0e1b\u0e34\u0e14\u0e1b\u0e4a\u0e2d\u0e1a\u0e2d\u0e31\u0e1e", "Rich Text Area. Press ALT-0 for help.": "\u0e1e\u0e37\u0e49\u0e19\u0e17\u0e35\u0e48 Rich Text \u0e01\u0e14 ALT-0 \u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e04\u0e27\u0e32\u0e21\u0e0a\u0e48\u0e27\u0e22\u0e40\u0e2b\u0e25\u0e37\u0e2d", "System Font": "\u0e41\u0e1a\u0e1a\u0e2d\u0e31\u0e01\u0e29\u0e23\u0e02\u0e2d\u0e07\u0e23\u0e30\u0e1a\u0e1a", "Failed to upload image: {0}": "\u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e2d\u0e31\u0e1b\u0e42\u0e2b\u0e25\u0e14\u0e23\u0e39\u0e1b\u0e20\u0e32\u0e1e: {0}", "Failed to load plugin: {0} from url {1}": "\u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e42\u0e2b\u0e25\u0e14\u0e1b\u0e25\u0e31\u0e4a\u0e01\u0e2d\u0e34\u0e19: {0} \u0e08\u0e32\u0e01 url {1}", "Failed to load plugin url: {0}": "\u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e42\u0e2b\u0e25\u0e14 url \u0e02\u0e2d\u0e07\u0e1b\u0e25\u0e31\u0e4a\u0e01\u0e2d\u0e34\u0e19: {0}", "Failed to initialize plugin: {0}": "\u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e40\u0e23\u0e34\u0e48\u0e21\u0e15\u0e49\u0e19\u0e1b\u0e25\u0e31\u0e4a\u0e01\u0e2d\u0e34\u0e19: {0}", "example": "\u0e15\u0e31\u0e27\u0e2d\u0e22\u0e48\u0e32\u0e07", "Search": "\u0e04\u0e49\u0e19\u0e2b\u0e32", "All": "\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14", "Currency": "\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19", "Text": "\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21", "Quotations": "\u0e43\u0e1a\u0e40\u0e2a\u0e19\u0e2d\u0e23\u0e32\u0e04\u0e32", "Mathematical": "\u0e40\u0e01\u0e35\u0e48\u0e22\u0e27\u0e01\u0e31\u0e1a\u0e04\u0e13\u0e34\u0e15\u0e28\u0e32\u0e2a\u0e15\u0e23\u0e4c", "Extended Latin": "\u0e20\u0e32\u0e29\u0e32\u0e25\u0e32\u0e15\u0e34\u0e19\u0e2a\u0e48\u0e27\u0e19\u0e02\u0e22\u0e32\u0e22", "Symbols": "\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c", "Arrows": "\u0e25\u0e39\u0e01\u0e28\u0e23", "User Defined": "\u0e1c\u0e39\u0e49\u0e43\u0e0a\u0e49\u0e01\u0e33\u0e2b\u0e19\u0e14\u0e40\u0e2d\u0e07", "dollar sign": "\u0e40\u0e04\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e2b\u0e21\u0e32\u0e22\u0e14\u0e2d\u0e25\u0e25\u0e48\u0e32\u0e23\u0e4c", "currency sign": "\u0e40\u0e04\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e2b\u0e21\u0e32\u0e22\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19", "euro-currency sign": "\u0e40\u0e04\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e2b\u0e21\u0e32\u0e22\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e22\u0e39\u0e42\u0e23", "colon sign": "\u0e40\u0e04\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e2b\u0e21\u0e32\u0e22\u0e08\u0e38\u0e14\u0e04\u0e39\u0e48", "cruzeiro sign": "\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e04\u0e23\u0e39\u0e40\u0e0b\u0e42\u0e35\u0e23", "french franc sign": "\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e1f\u0e23\u0e31\u0e07\u0e01\u0e4c\u0e1d\u0e23\u0e31\u0e48\u0e07\u0e40\u0e28\u0e2a", "lira sign": "\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e25\u0e35\u0e23\u0e32", "mill sign": "\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e21\u0e34\u0e25\u0e25\u0e4c", "naira sign": "\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e44\u0e19\u0e23\u0e32", "peseta sign": "\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e40\u0e1b\u0e40\u0e0b\u0e15\u0e32", "rupee sign": "\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e23\u0e39\u0e1b\u0e35", "won sign": "\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e27\u0e2d\u0e19", "new sheqel sign": "\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e19\u0e34\u0e27\u0e40\u0e0a\u0e40\u0e01\u0e25", "dong sign": "\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e14\u0e2d\u0e07", "kip sign": "\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e01\u0e35\u0e1a", "tugrik sign": "\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e17\u0e39\u0e01\u0e23\u0e34\u0e01", "drachma sign": "\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e14\u0e23\u0e31\u0e04\u0e21\u0e32", "german penny symbol": "\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e40\u0e1e\u0e19\u0e19\u0e35\u0e40\u0e22\u0e2d\u0e23\u0e21\u0e31\u0e19", "peso sign": "\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e40\u0e1b\u0e42\u0e0b", "guarani sign": "\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e01\u0e27\u0e32\u0e23\u0e32\u0e19\u0e35", "austral sign": "\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e2d\u0e2d\u0e2a\u0e15\u0e23\u0e31\u0e25", "hryvnia sign": "\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e2e\u0e23\u0e34\u0e1f\u0e40\u0e19\u0e35\u0e22", "cedi sign": "\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e40\u0e0b\u0e14\u0e35", "livre tournois sign": "\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e1b\u0e2d\u0e19\u0e14\u0e4c\u0e15\u0e39\u0e23\u0e4c", "spesmilo sign": "\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e2a\u0e40\u0e1b\u0e2a\u0e21\u0e34\u0e42\u0e25", "tenge sign": "\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e40\u0e17\u0e07\u0e40\u0e08", "indian rupee sign": "\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e23\u0e39\u0e1b\u0e35\u0e2d\u0e34\u0e19\u0e40\u0e14\u0e35\u0e22", "turkish lira sign": "\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e25\u0e35\u0e23\u0e32\u0e15\u0e38\u0e23\u0e01\u0e35", "nordic mark sign": "\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e21\u0e32\u0e23\u0e4c\u0e04\u0e19\u0e2d\u0e23\u0e4c\u0e14\u0e34\u0e01", "manat sign": "\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e21\u0e32\u0e19\u0e31\u0e15", "ruble sign": "\u0e2a\u0e31\u0e0d\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c\u0e2a\u0e01\u0e38\u0e25\u0e40\u0e07\u0e34\u0e19\u0e23\u0e39\u0e40\u0e1a\u0e34\u0e25", "yen character": "\u0e2d\u0e31\u0e01\u0e02\u0e23\u0e30\u0e40\u0e07\u0e34\u0e19\u0e40\u0e22\u0e19", "yuan character": "\u0e2d\u0e31\u0e01\u0e02\u0e23\u0e30\u0e40\u0e07\u0e34\u0e19\u0e2b\u0e22\u0e27\u0e19", "yuan character, in hong kong and taiwan": "\u0e2d\u0e31\u0e01\u0e02\u0e23\u0e30\u0e40\u0e07\u0e34\u0e19\u0e2b\u0e22\u0e27\u0e19 \u0e43\u0e19\u0e2e\u0e48\u0e2d\u0e07\u0e01\u0e07\u0e41\u0e25\u0e30\u0e44\u0e15\u0e49\u0e2b\u0e27\u0e31\u0e19", "yen\/yuan character variant one": "\u0e2d\u0e31\u0e01\u0e02\u0e23\u0e30\u0e40\u0e07\u0e34\u0e19\u0e40\u0e22\u0e19\/\u0e2b\u0e22\u0e27\u0e19 \u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a\u0e17\u0e35\u0e48 1", "Loading emoticons...": "\u0e01\u0e33\u0e25\u0e31\u0e07\u0e42\u0e2b\u0e25\u0e14\u0e40\u0e04\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e2b\u0e21\u0e32\u0e22\u0e41\u0e2a\u0e14\u0e07\u0e2d\u0e32\u0e23\u0e21\u0e13\u0e4c...", "Could not load emoticons": "\u0e44\u0e21\u0e48\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e42\u0e2b\u0e25\u0e14\u0e40\u0e04\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e2b\u0e21\u0e32\u0e22\u0e41\u0e2a\u0e14\u0e07\u0e2d\u0e32\u0e23\u0e21\u0e13\u0e4c\u0e44\u0e14\u0e49", "People": "\u0e1c\u0e39\u0e49\u0e04\u0e19", "Animals and Nature": "\u0e2a\u0e31\u0e15\u0e27\u0e4c\u0e41\u0e25\u0e30\u0e18\u0e23\u0e23\u0e21\u0e0a\u0e32\u0e15\u0e34", "Food and Drink": "\u0e2d\u0e32\u0e2b\u0e32\u0e23\u0e41\u0e25\u0e30\u0e40\u0e04\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e14\u0e37\u0e48\u0e21", "Activity": "\u0e01\u0e34\u0e08\u0e01\u0e23\u0e23\u0e21", "Travel and Places": "\u0e01\u0e32\u0e23\u0e17\u0e48\u0e2d\u0e07\u0e40\u0e17\u0e35\u0e48\u0e22\u0e27\u0e41\u0e25\u0e30\u0e2a\u0e16\u0e32\u0e19\u0e17\u0e35\u0e48", "Objects": "\u0e27\u0e31\u0e15\u0e16\u0e38", "Flags": "\u0e40\u0e04\u0e23\u0e37\u0e48\u0e2d\u0e07\u0e2b\u0e21\u0e32\u0e22", "Characters": "\u0e15\u0e31\u0e27\u0e2d\u0e31\u0e01\u0e29\u0e23", "Characters (no spaces)": "\u0e15\u0e31\u0e27\u0e2d\u0e31\u0e01\u0e29\u0e23 (\u0e44\u0e21\u0e48\u0e21\u0e35\u0e0a\u0e48\u0e2d\u0e07\u0e27\u0e48\u0e32\u0e07)", "{0} characters": "{0} \u0e2d\u0e31\u0e01\u0e02\u0e23\u0e30", "Error: Form submit field collision.": "\u0e02\u0e49\u0e2d\u0e1c\u0e34\u0e14\u0e1e\u0e25\u0e32\u0e14: \u0e0a\u0e48\u0e2d\u0e07\u0e2a\u0e48\u0e07\u0e41\u0e1a\u0e1a\u0e1f\u0e2d\u0e23\u0e4c\u0e21\u0e02\u0e31\u0e14\u0e41\u0e22\u0e49\u0e07\u0e01\u0e31\u0e19", "Error: No form element found.": "\u0e02\u0e49\u0e2d\u0e1c\u0e34\u0e14\u0e1e\u0e25\u0e32\u0e14: \u0e44\u0e21\u0e48\u0e1e\u0e1a\u0e2d\u0e07\u0e04\u0e4c\u0e1b\u0e23\u0e30\u0e01\u0e2d\u0e1a\u0e02\u0e2d\u0e07\u0e1f\u0e2d\u0e23\u0e4c\u0e21", "Update": "\u0e1b\u0e23\u0e31\u0e1a\u0e1b\u0e23\u0e38\u0e07\u0e43\u0e2b\u0e49\u0e17\u0e31\u0e19\u0e2a\u0e21\u0e31\u0e22", "Color swatch": "\u0e41\u0e16\u0e1a\u0e2a\u0e35", "Turquoise": "\u0e19\u0e49\u0e33\u0e40\u0e07\u0e34\u0e19\u0e2d\u0e21\u0e40\u0e02\u0e35\u0e22\u0e27", "Green": "\u0e40\u0e02\u0e35\u0e22\u0e27", "Blue": "\u0e19\u0e49\u0e33\u0e40\u0e07\u0e34\u0e19", "Purple": "\u0e21\u0e48\u0e27\u0e07", "Navy Blue": "\u0e19\u0e49\u0e33\u0e40\u0e07\u0e34\u0e19\u0e40\u0e02\u0e49\u0e21", "Dark Turquoise": "\u0e2a\u0e35\u0e1f\u0e49\u0e32\u0e04\u0e23\u0e32\u0e21\u0e40\u0e02\u0e49\u0e21", "Dark Green": "\u0e40\u0e02\u0e35\u0e22\u0e27\u0e40\u0e02\u0e49\u0e21", "Medium Blue": "\u0e19\u0e49\u0e33\u0e40\u0e07\u0e34\u0e19\u0e1b\u0e32\u0e19\u0e01\u0e25\u0e32\u0e07", "Medium Purple": "\u0e2a\u0e35\u0e21\u0e48\u0e27\u0e07\u0e01\u0e25\u0e32\u0e07\u0e46", "Midnight Blue": "\u0e2a\u0e35\u0e1f\u0e49\u0e32\u0e40\u0e02\u0e49\u0e21", "Yellow": "\u0e40\u0e2b\u0e25\u0e37\u0e2d\u0e07", "Orange": "\u0e2a\u0e49\u0e21", "Red": "\u0e41\u0e14\u0e07", "Light Gray": "\u0e2a\u0e35\u0e40\u0e17\u0e32\u0e2d\u0e48\u0e2d\u0e19", "Gray": "\u0e40\u0e17\u0e32", "Dark Yellow": "\u0e2a\u0e35\u0e40\u0e2b\u0e25\u0e37\u0e2d\u0e07\u0e40\u0e02\u0e49\u0e21", "Dark Orange": "\u0e2a\u0e49\u0e21\u0e40\u0e02\u0e49\u0e21", "Dark Red": "\u0e41\u0e14\u0e07\u0e40\u0e02\u0e49\u0e21", "Medium Gray": "\u0e2a\u0e35\u0e40\u0e17\u0e32\u0e01\u0e25\u0e32\u0e07\u0e46", "Dark Gray": "\u0e2a\u0e35\u0e40\u0e17\u0e32\u0e40\u0e02\u0e49\u0e21", "Light Green": "\u0e40\u0e02\u0e35\u0e22\u0e27\u0e2d\u0e48\u0e2d\u0e19", "Light Yellow": "\u0e40\u0e2b\u0e25\u0e37\u0e2d\u0e07\u0e2d\u0e48\u0e2d\u0e19", "Light Red": "\u0e41\u0e14\u0e07\u0e2d\u0e48\u0e2d\u0e19", "Light Purple": "\u0e21\u0e48\u0e27\u0e07\u0e2d\u0e48\u0e2d\u0e19", "Light Blue": "\u0e19\u0e49\u0e33\u0e40\u0e07\u0e34\u0e19\u0e2d\u0e48\u0e2d\u0e19", "Dark Purple": "\u0e21\u0e48\u0e27\u0e07\u0e40\u0e02\u0e49\u0e21", "Dark Blue": "\u0e19\u0e49\u0e33\u0e40\u0e07\u0e34\u0e19\u0e40\u0e02\u0e49\u0e21", "Black": "\u0e14\u0e33", "White": "\u0e02\u0e32\u0e27", "Switch to or from fullscreen mode": "\u0e2a\u0e25\u0e31\u0e1a\u0e44\u0e1b\u0e22\u0e31\u0e07\u0e2b\u0e23\u0e37\u0e2d\u0e08\u0e32\u0e01\u0e42\u0e2b\u0e21\u0e14\u0e40\u0e15\u0e47\u0e21\u0e2b\u0e19\u0e49\u0e32\u0e08\u0e2d", "Open help dialog": "\u0e40\u0e1b\u0e34\u0e14\u0e2b\u0e19\u0e49\u0e32\u0e01\u0e32\u0e23\u0e0a\u0e48\u0e27\u0e22\u0e40\u0e2b\u0e25\u0e37\u0e2d", "history": "\u0e1b\u0e23\u0e30\u0e27\u0e31\u0e15\u0e34", "styles": "\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a", "formatting": "\u0e01\u0e32\u0e23\u0e08\u0e31\u0e14\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a", "alignment": "\u0e01\u0e32\u0e23\u0e08\u0e31\u0e14\u0e41\u0e19\u0e27", "indentation": "\u0e01\u0e32\u0e23\u0e08\u0e31\u0e14\u0e22\u0e48\u0e2d\u0e2b\u0e19\u0e49\u0e32", "permanent pen": "\u0e1b\u0e32\u0e01\u0e01\u0e32\u0e40\u0e04\u0e21\u0e35\u0e0a\u0e19\u0e34\u0e14\u0e25\u0e1a\u0e44\u0e21\u0e48\u0e44\u0e14\u0e49", "comments": "\u0e02\u0e49\u0e2d\u0e04\u0e34\u0e14\u0e40\u0e2b\u0e47\u0e19", "Format Painter": "\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a\u0e40\u0e1e\u0e19\u0e40\u0e15\u0e2d\u0e23\u0e4c", "Insert\/edit iframe": "\u0e41\u0e17\u0e23\u0e01\/\u0e41\u0e01\u0e49\u0e44\u0e02 iframe", "Capitalization": "\u0e01\u0e32\u0e23\u0e43\u0e0a\u0e49\u0e15\u0e31\u0e27\u0e2d\u0e31\u0e01\u0e29\u0e23\u0e15\u0e31\u0e27\u0e1e\u0e34\u0e21\u0e1e\u0e4c\u0e43\u0e2b\u0e0d\u0e48", "lowercase": "\u0e15\u0e31\u0e27\u0e1e\u0e34\u0e21\u0e1e\u0e4c\u0e40\u0e25\u0e47\u0e01", "UPPERCASE": "\u0e15\u0e31\u0e27\u0e1e\u0e34\u0e21\u0e1e\u0e4c\u0e43\u0e2b\u0e0d\u0e48", "Title Case": "\u0e15\u0e31\u0e27\u0e1e\u0e34\u0e21\u0e1e\u0e4c\u0e02\u0e2d\u0e07\u0e2b\u0e31\u0e27\u0e02\u0e49\u0e2d", "Permanent Pen Properties": "\u0e04\u0e38\u0e13\u0e2a\u0e21\u0e1a\u0e31\u0e15\u0e34\u0e1b\u0e32\u0e01\u0e01\u0e32\u0e21\u0e32\u0e23\u0e4c\u0e04\u0e40\u0e01\u0e2d\u0e23\u0e4c", "Permanent pen properties...": "\u0e04\u0e38\u0e13\u0e2a\u0e21\u0e1a\u0e31\u0e15\u0e34\u0e1b\u0e32\u0e01\u0e01\u0e32\u0e21\u0e32\u0e23\u0e4c\u0e04\u0e40\u0e01\u0e2d\u0e23\u0e4c...", "Font": "\u0e15\u0e31\u0e27\u0e2d\u0e31\u0e01\u0e29\u0e23", "Size": "\u0e02\u0e19\u0e32\u0e14", "More...": "\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e40\u0e15\u0e34\u0e21...", "Spellcheck Language": "\u0e20\u0e32\u0e29\u0e32\u0e43\u0e19\u0e01\u0e32\u0e23\u0e15\u0e23\u0e27\u0e08\u0e01\u0e32\u0e23\u0e2a\u0e30\u0e01\u0e14", "Select...": "\u0e40\u0e25\u0e37\u0e2d\u0e01...", "Preferences": "\u0e04\u0e48\u0e32\u0e01\u0e33\u0e2b\u0e19\u0e14", "Yes": "\u0e43\u0e0a\u0e48", "No": "\u0e44\u0e21\u0e48\u0e43\u0e0a\u0e48", "Keyboard Navigation": "\u0e01\u0e32\u0e23\u0e19\u0e33\u0e17\u0e32\u0e07\u0e14\u0e49\u0e27\u0e22\u0e41\u0e1b\u0e49\u0e19\u0e1e\u0e34\u0e21\u0e1e\u0e4c", "Version": "\u0e23\u0e38\u0e48\u0e19", "Anchor": "\u0e08\u0e38\u0e14\u0e22\u0e36\u0e14", "Special character": "\u0e2d\u0e31\u0e01\u0e02\u0e23\u0e30\u0e1e\u0e34\u0e40\u0e28\u0e29", "Code sample": "\u0e15\u0e31\u0e27\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e42\u0e04\u0e49\u0e14", "Color": "\u0e2a\u0e35", "Emoticons": "\u0e2d\u0e34\u0e42\u0e21\u0e15\u0e34\u0e04\u0e2d\u0e19", "Document properties": "\u0e04\u0e38\u0e13\u0e2a\u0e21\u0e1a\u0e31\u0e15\u0e34\u0e02\u0e2d\u0e07\u0e40\u0e2d\u0e01\u0e2a\u0e32\u0e23", "Image": "\u0e23\u0e39\u0e1b\u0e20\u0e32\u0e1e", "Insert link": "\u0e41\u0e17\u0e23\u0e01\u0e25\u0e34\u0e07\u0e01\u0e4c", "Target": "\u0e40\u0e1b\u0e49\u0e32\u0e2b\u0e21\u0e32\u0e22", "Link": "\u0e25\u0e34\u0e07\u0e01\u0e4c", "Poster": "\u0e42\u0e1b\u0e2a\u0e40\u0e15\u0e2d\u0e23\u0e4c", "Media": "\u0e2a\u0e37\u0e48\u0e2d", "Print": "\u0e1e\u0e34\u0e21\u0e1e\u0e4c", "Prev": "\u0e01\u0e48\u0e2d\u0e19\u0e2b\u0e19\u0e49\u0e32", "Find and replace": "\u0e04\u0e49\u0e19\u0e2b\u0e32\u0e41\u0e25\u0e30\u0e41\u0e17\u0e19\u0e17\u0e35\u0e48", "Whole words": "\u0e17\u0e31\u0e49\u0e07\u0e04\u0e33", "Spellcheck": "\u0e15\u0e23\u0e27\u0e08\u0e01\u0e32\u0e23\u0e2a\u0e30\u0e01\u0e14", "Caption": "\u0e1b\u0e49\u0e32\u0e22\u0e04\u0e33\u0e2d\u0e18\u0e34\u0e1a\u0e32\u0e22", "Insert template": "\u0e41\u0e17\u0e23\u0e01\u0e41\u0e21\u0e48\u0e41\u0e1a\u0e1a" }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/tinymce/langs/tr.js ================================================ tinymce.addI18n('tr',{ "Redo": "Yinele", "Undo": "Geri al", "Cut": "Kes", "Copy": "Kopyala", "Paste": "Yap\u0131\u015ft\u0131r", "Select all": "T\u00fcm\u00fcn\u00fc se\u00e7", "New document": "Yeni dok\u00fcman", "Ok": "Tamam", "Cancel": "\u0130ptal", "Visual aids": "G\u00f6rsel ara\u00e7lar", "Bold": "Kal\u0131n", "Italic": "\u0130talik", "Underline": "Alt\u0131 \u00e7izili", "Strikethrough": "\u00dcst\u00fc \u00e7izgili", "Superscript": "\u00dcst simge", "Subscript": "Alt simge", "Clear formatting": "Bi\u00e7imi temizle", "Align left": "Sola hizala", "Align center": "Ortala", "Align right": "Sa\u011fa hizala", "Justify": "\u0130ki yana yasla", "Bullet list": "S\u0131ras\u0131z liste", "Numbered list": "S\u0131ral\u0131 liste", "Decrease indent": "Girintiyi azalt", "Increase indent": "Girintiyi art\u0131r", "Close": "Kapat", "Formats": "Bi\u00e7imler", "Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Taray\u0131c\u0131n\u0131z panoya direk eri\u015fimi desteklemiyor. L\u00fctfen Ctrl+X\/C\/V klavye k\u0131sayollar\u0131n\u0131 kullan\u0131n.", "Headers": "Ba\u015fl\u0131klar", "Header 1": "Ba\u015fl\u0131k 1", "Header 2": "Ba\u015fl\u0131k 2", "Header 3": "Ba\u015fl\u0131k 3", "Header 4": "Ba\u015fl\u0131k 4", "Header 5": "Ba\u015fl\u0131k 5", "Header 6": "Ba\u015fl\u0131k 6", "Headings": "Ba\u015fl\u0131klar", "Heading 1": "Ba\u015fl\u0131k 1", "Heading 2": "Ba\u015fl\u0131k 2", "Heading 3": "Ba\u015fl\u0131k 3", "Heading 4": "Ba\u015fl\u0131k 4", "Heading 5": "Ba\u015fl\u0131k 5", "Heading 6": "Ba\u015fl\u0131k 6", "Preformatted": "\u00d6nceden bi\u00e7imlendirilmi\u015f", "Div": "Div", "Pre": "Pre", "Code": "Kod", "Paragraph": "Paragraf", "Blockquote": "Blockquote", "Inline": "Sat\u0131r i\u00e7i", "Blocks": "Bloklar", "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "D\u00fcz metin modunda yap\u0131\u015ft\u0131r. Bu se\u00e7ene\u011fi kapatana kadar i\u00e7erikler d\u00fcz metin olarak yap\u0131\u015ft\u0131r\u0131l\u0131r.", "Fonts": "Yaz\u0131 Tipleri", "Font Sizes": "Yaz\u0131tipi B\u00fcy\u00fckl\u00fc\u011f\u00fc", "Class": "S\u0131n\u0131f", "Browse for an image": "Bir resim aray\u0131n", "OR": "VEYA", "Drop an image here": "Buraya bir resim koyun", "Upload": "Y\u00fckle", "Block": "Blok", "Align": "Hizala", "Default": "Varsay\u0131lan", "Circle": "Daire", "Disc": "Disk", "Square": "Kare", "Lower Alpha": "K\u00fc\u00e7\u00fck Harf", "Lower Greek": "K\u00fc\u00e7\u00fck Yunan Harfleri", "Lower Roman": "K\u00fc\u00e7\u00fck Roman Harfleri ", "Upper Alpha": "B\u00fcy\u00fck Harf", "Upper Roman": "B\u00fcy\u00fck Roman Harfleri ", "Anchor...": "\u00c7apa...", "Name": "\u0130sim", "Id": "Kimlik", "Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Id bir harf ile ba\u015flamal\u0131d\u0131r ve harf, rakam, \u00e7izgi, nokta, iki nokta \u00fcst\u00fcste veya alt \u00e7izgi kullan\u0131labilir.", "You have unsaved changes are you sure you want to navigate away?": "Kaydedilmemi\u015f de\u011fi\u015fiklikler var, sayfadan ayr\u0131lmak istedi\u011finize emin misiniz?", "Restore last draft": "Son tasla\u011f\u0131 geri y\u00fckle", "Special character...": "\u00d6zel karakter...", "Source code": "Kaynak kodu", "Insert\/Edit code sample": "\u00d6rnek kod ekle\/d\u00fczenle", "Language": "Dil", "Code sample...": "Kod \u00f6rne\u011fi...", "Color Picker": "Renk Se\u00e7ici", "R": "R", "G": "G", "B": "B", "Left to right": "Soldan sa\u011fa", "Right to left": "Sa\u011fdan sola", "Emoticons...": "\u0130fadeler...", "Metadata and Document Properties": "\u00d6nbilgi ve Belge \u00d6zellikleri", "Title": "Ba\u015fl\u0131k", "Keywords": "Anahtar kelimeler", "Description": "A\u00e7\u0131klama", "Robots": "Robotlar", "Author": "Yazar", "Encoding": "Kodlama", "Fullscreen": "Tam ekran", "Action": "Eylem", "Shortcut": "K\u0131sayol", "Help": "Yard\u0131m", "Address": "Adres", "Focus to menubar": "Men\u00fcye odaklan", "Focus to toolbar": "Ara\u00e7 tak\u0131m\u0131na odaklan", "Focus to element path": "\u00d6\u011fe yoluna odaklan", "Focus to contextual toolbar": "Ba\u011flamsal ara\u00e7 tak\u0131m\u0131na odaklan", "Insert link (if link plugin activated)": "Ba\u011flant\u0131 ekle (Ba\u011flant\u0131 eklentisi aktif ise)", "Save (if save plugin activated)": "Kaydet (Kay\u0131t eklentisi aktif ise)", "Find (if searchreplace plugin activated)": "Bul (Bul\/De\u011fi\u015ftir eklentisi aktif ise)", "Plugins installed ({0}):": "Eklentiler y\u00fcklendi ({0}):", "Premium plugins:": "Premium eklentiler:", "Learn more...": "Detayl\u0131 bilgi...", "You are using {0}": "\u015eu an {0} kullan\u0131yorsunuz", "Plugins": "Plugins", "Handy Shortcuts": "Handy Shortcuts", "Horizontal line": "Yatay \u00e7izgi", "Insert\/edit image": "Resim ekle\/d\u00fczenle", "Image description": "Resim a\u00e7\u0131klamas\u0131", "Source": "Kaynak", "Dimensions": "Boyutlar", "Constrain proportions": "Oranlar\u0131 koru", "General": "Genel", "Advanced": "Geli\u015fmi\u015f", "Style": "Stil", "Vertical space": "Dikey bo\u015fluk", "Horizontal space": "Yatay bo\u015fluk", "Border": "Kenarl\u0131k", "Insert image": "Resim ekle", "Image...": "Resim...", "Image list": "G\u00f6rsel listesi", "Rotate counterclockwise": "Saatin tersi y\u00f6n\u00fcnde d\u00f6nd\u00fcr", "Rotate clockwise": "Saat y\u00f6n\u00fcnde d\u00f6nd\u00fcr", "Flip vertically": "Dikine \u00e7evir", "Flip horizontally": "Enine \u00e7evir", "Edit image": "Resmi d\u00fczenle", "Image options": "Resim ayarlar\u0131", "Zoom in": "Yak\u0131nla\u015ft\u0131r", "Zoom out": "Uzakla\u015ft\u0131r", "Crop": "K\u0131rp", "Resize": "Yeniden Boyutland\u0131r", "Orientation": "Oryantasyon", "Brightness": "Parlakl\u0131k", "Sharpen": "Keskinle\u015ftir", "Contrast": "Kontrast", "Color levels": "Renk d\u00fczeyleri", "Gamma": "Gama", "Invert": "Ters \u00c7evir", "Apply": "Uygula", "Back": "Geri", "Insert date\/time": "Tarih\/saat ekle", "Date\/time": "Tarih\/saat", "Insert\/Edit Link": "Ba\u011flant\u0131 Ekle\/D\u00fczenle", "Insert\/edit link": "Ba\u011flant\u0131 ekle\/d\u00fczenle", "Text to display": "Yaz\u0131y\u0131 g\u00f6r\u00fcnt\u00fcle", "Url": "Url", "Open link in...": "Ba\u011flant\u0131y\u0131 a\u00e7...", "Current window": "Mevcut pencere", "None": "Hi\u00e7biri", "New window": "Yeni pencere", "Remove link": "Ba\u011flant\u0131y\u0131 kald\u0131r", "Anchors": "\u00c7apalar", "Link...": "Ba\u011flant\u0131...", "Paste or type a link": "Bir ba\u011flant\u0131 yaz\u0131n yada yap\u0131\u015ft\u0131r\u0131n", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "Girdi\u011finiz URL bir e-posta adresi gibi g\u00f6r\u00fcn\u00fcyor. Gerekli olan mailto: \u00f6nekini eklemek ister misiniz?", "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "Girdi\u011finiz URL bir d\u0131\u015f ba\u011flant\u0131 gibi g\u00f6r\u00fcn\u00fcyor. Gerekli olan http:\/\/ \u00f6nekini eklemek ister misiniz?", "Link list": "Ba\u011flant\u0131 listesi", "Insert video": "Video ekle", "Insert\/edit video": "Video ekle\/d\u00fczenle", "Insert\/edit media": "Medya ekle\/d\u00fczenle", "Alternative source": "Alternatif kaynak", "Alternative source URL": "Alternatif kaynak URL", "Media poster (Image URL)": "Medya posteri (Resim URL)", "Paste your embed code below:": "Video g\u00f6mme kodunu a\u015fa\u011f\u0131ya yap\u0131\u015ft\u0131r\u0131n\u0131z:", "Embed": "G\u00f6mme", "Media...": "Medya...", "Nonbreaking space": "B\u00f6l\u00fcnemez bo\u015fluk", "Page break": "Sayfa sonu", "Paste as text": "Metin olarak yap\u0131\u015ft\u0131r", "Preview": "\u00d6nizleme", "Print...": "Yazd\u0131r...", "Save": "Kaydet", "Find": "Bul", "Replace with": "Bununla de\u011fi\u015ftir", "Replace": "De\u011fi\u015ftir", "Replace all": "T\u00fcm\u00fcn\u00fc de\u011fi\u015ftir", "Previous": "Geri", "Next": "Sonraki", "Find and replace...": "Bul ve de\u011fi\u015ftir...", "Could not find the specified string.": "Herhangi bir sonu\u00e7 bulunamad\u0131.", "Match case": "B\u00fcy\u00fck\/k\u00fc\u00e7\u00fck harf duyarl\u0131", "Find whole words only": "Sadece t\u00fcm kelimeyi ara", "Spell check": "Yaz\u0131m denetimi", "Ignore": "Yoksay", "Ignore all": "T\u00fcm\u00fcn\u00fc yoksay", "Finish": "Bitir", "Add to Dictionary": "S\u00f6zl\u00fc\u011fe Ekle", "Insert table": "Tablo ekle", "Table properties": "Tablo \u00f6zellikleri", "Delete table": "Tablo sil", "Cell": "H\u00fccre", "Row": "Sat\u0131r", "Column": "S\u00fctun", "Cell properties": "H\u00fccre \u00f6zellikleri", "Merge cells": "H\u00fccreleri birle\u015ftir", "Split cell": "H\u00fccre b\u00f6l", "Insert row before": "\u00dcste sat\u0131r ekle", "Insert row after": "Alta sat\u0131r ekle ", "Delete row": "Sat\u0131r sil", "Row properties": "Sat\u0131r \u00f6zellikleri", "Cut row": "Sat\u0131r\u0131 kes", "Copy row": "Sat\u0131r\u0131 kopyala", "Paste row before": "\u00dcste sat\u0131r yap\u0131\u015ft\u0131r", "Paste row after": "Alta sat\u0131r yap\u0131\u015ft\u0131r", "Insert column before": "Sola s\u00fctun ekle", "Insert column after": "Sa\u011fa s\u00fctun ekle", "Delete column": "S\u00fctun sil", "Cols": "S\u00fctunlar", "Rows": "Sat\u0131rlar", "Width": "Geni\u015flik", "Height": "Y\u00fckseklik", "Cell spacing": "H\u00fccre aral\u0131\u011f\u0131", "Cell padding": "H\u00fccre dolgusu", "Show caption": "Ba\u015fl\u0131\u011f\u0131 g\u00f6ster", "Left": "Sol", "Center": "Orta", "Right": "Sa\u011f", "Cell type": "H\u00fccre tipi", "Scope": "Kapsam", "Alignment": "Hizalama", "H Align": "Yatay Hizalama", "V Align": "Dikey Hizalama", "Top": "\u00dcst", "Middle": "Orta", "Bottom": "Alt", "Header cell": "Ba\u015fl\u0131k h\u00fccresi", "Row group": "Sat\u0131r grubu", "Column group": "S\u00fctun grubu", "Row type": "Sat\u0131r tipi", "Header": "Ba\u015fl\u0131k", "Body": "G\u00f6vde", "Footer": "Alt", "Border color": "Kenarl\u0131k rengi", "Insert template...": "\u015eablon ekle...", "Templates": "\u015eablonlar", "Template": "Taslak", "Text color": "Yaz\u0131 rengi", "Background color": "Arka plan rengi", "Custom...": "\u00d6zel...", "Custom color": "\u00d6zel renk", "No color": "Renk yok", "Remove color": "Rengi kald\u0131r", "Table of Contents": "\u0130\u00e7erik tablosu", "Show blocks": "Bloklar\u0131 g\u00f6ster", "Show invisible characters": "G\u00f6r\u00fcnmez karakterleri g\u00f6ster", "Word count": "Kelime say\u0131s\u0131", "Count": "Say\u0131m", "Document": "Belge", "Selection": "Se\u00e7im", "Words": "S\u00f6zc\u00fck", "Words: {0}": "Kelime: {0}", "{0} words": "{0} words", "File": "Dosya", "Edit": "D\u00fczenle", "Insert": "Ekle", "View": "G\u00f6r\u00fcn\u00fcm", "Format": "Bi\u00e7im", "Table": "Tablo", "Tools": "Ara\u00e7lar", "Powered by {0}": "Powered by {0}", "Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Zengin Metin Alan\u0131. Men\u00fc i\u00e7in ALT-F9 tu\u015funa bas\u0131n\u0131z. Ara\u00e7 \u00e7ubu\u011fu i\u00e7in ALT-F10 tu\u015funa bas\u0131n\u0131z. Yard\u0131m i\u00e7in ALT-0 tu\u015funa bas\u0131n\u0131z.", "Image title": "Resim ba\u015fl\u0131\u011f\u0131", "Border width": "Kenar geni\u015fli\u011fi", "Border style": "Kenar sitili", "Error": "Hata", "Warn": "Uyar\u0131", "Valid": "Ge\u00e7erli", "To open the popup, press Shift+Enter": "Popup'\u0131 a\u00e7mak i\u00e7in Shift+Enter'a bas\u0131n", "Rich Text Area. Press ALT-0 for help.": "Zengin Metin Alan\u0131. Yard\u0131m i\u00e7in Alt-0'a bas\u0131n.", "System Font": "Sistem Yaz\u0131 Tipi", "Failed to upload image: {0}": "Resim y\u00fcklenemedi: {0}", "Failed to load plugin: {0} from url {1}": "Eklenti y\u00fcklenemedi: {1} url\u2019sinden {0}", "Failed to load plugin url: {0}": "Url eklentisi y\u00fcklenemedi: {0}", "Failed to initialize plugin: {0}": "Eklenti ba\u015flat\u0131lamad\u0131: {0}", "example": "\u00f6rnek", "Search": "Ara", "All": "T\u00fcm\u00fc", "Currency": "Para birimi", "Text": "Metin", "Quotations": "Al\u0131nt\u0131", "Mathematical": "Matematik", "Extended Latin": "Uzat\u0131lm\u0131\u015f Latin", "Symbols": "Semboller", "Arrows": "Oklar", "User Defined": "Kullan\u0131c\u0131 Tan\u0131ml\u0131", "dollar sign": "dolar i\u015fareti", "currency sign": "para birimi i\u015fareti", "euro-currency sign": "euro para birimi i\u015fareti", "colon sign": "colon i\u015fareti", "cruzeiro sign": "cruzeiro i\u015fareti", "french franc sign": "frans\u0131z frang\u0131 i\u015fareti", "lira sign": "lira i\u015fareti", "mill sign": "mill i\u015fareti", "naira sign": "naira i\u015fareti", "peseta sign": "peseta i\u015fareti", "rupee sign": "rupi i\u015fareti", "won sign": "won i\u015fareti", "new sheqel sign": "yeni \u015fekel i\u015fareti", "dong sign": "dong i\u015fareti", "kip sign": "kip i\u015fareti", "tugrik sign": "tugrik i\u015fareti", "drachma sign": "drahma i\u015fareti", "german penny symbol": "alman kuru\u015f sembol\u00fc", "peso sign": "peso i\u015fareti", "guarani sign": "guarani i\u015fareti", "austral sign": "austral i\u015fareti", "hryvnia sign": "hrivniya i\u015fareti", "cedi sign": "cedi i\u015fareti", "livre tournois sign": "livre tournois i\u015fareti", "spesmilo sign": "spesmilo i\u015fareti", "tenge sign": "tenge i\u015fareti", "indian rupee sign": "hindistan rupisi i\u015fareti", "turkish lira sign": "t\u00fcrk liras\u0131 i\u015fareti", "nordic mark sign": "nordic i\u015fareti", "manat sign": "manat i\u015fareti", "ruble sign": "ruble i\u015fareti", "yen character": "yen karakteri", "yuan character": "yuan karakteri", "yuan character, in hong kong and taiwan": "yuan karakteri, hong kong ve tayvan'da kullan\u0131lan", "yen\/yuan character variant one": "yen\/yuan karakter de\u011fi\u015fkeni", "Loading emoticons...": "\u0130fadeler y\u00fckleniyor...", "Could not load emoticons": "\u0130fadeler y\u00fcklenemedi", "People": "\u0130nsan", "Animals and Nature": "Hayvanlar ve Do\u011fa", "Food and Drink": "Yiyecek ve \u0130\u00e7ecek", "Activity": "Etkinlik", "Travel and Places": "Gezi ve Yerler", "Objects": "Nesneler", "Flags": "Bayraklar", "Characters": "Karakter", "Characters (no spaces)": "Karakter (bo\u015fluksuz)", "{0} characters": "{0} karakter", "Error: Form submit field collision.": "Hata: Form g\u00f6nderme alan\u0131 \u00e7at\u0131\u015fmas\u0131.", "Error: No form element found.": "Hata: Form eleman\u0131 bulunamad\u0131.", "Update": "G\u00fcncelle\u015ftir", "Color swatch": "Renk \u00f6rne\u011fi", "Turquoise": "Turkuaz", "Green": "Ye\u015fil", "Blue": "Mavi", "Purple": "Mor", "Navy Blue": "Lacivert", "Dark Turquoise": "Koyu Turkuaz", "Dark Green": "Koyu Ye\u015fil", "Medium Blue": "Donuk Mavi", "Medium Purple": "Orta Mor", "Midnight Blue": "Gece Yar\u0131s\u0131 Mavisi", "Yellow": "Sar\u0131", "Orange": "Turuncu", "Red": "K\u0131rm\u0131z\u0131", "Light Gray": "A\u00e7\u0131k Gri", "Gray": "Gri", "Dark Yellow": "Koyu Sar\u0131", "Dark Orange": "Koyu Turuncu", "Dark Red": "Koyu K\u0131rm\u0131z\u0131", "Medium Gray": "Orta Gri", "Dark Gray": "Koyu Gri", "Light Green": "A\u00e7\u0131k Ye\u015fil", "Light Yellow": "A\u00e7\u0131k Sar\u0131", "Light Red": "A\u00e7\u0131k K\u0131rm\u0131z\u0131", "Light Purple": "A\u00e7\u0131k Mor", "Light Blue": "A\u00e7\u0131k Mavi", "Dark Purple": "Koyu Mor", "Dark Blue": "Lacivert", "Black": "Siyah", "White": "Beyaz", "Switch to or from fullscreen mode": "Tam ekran moduna ge\u00e7 veya \u00e7\u0131k", "Open help dialog": "Yard\u0131m penceresini a\u00e7", "history": "ge\u00e7mi\u015f", "styles": "stiller", "formatting": "bi\u00e7imlendirme", "alignment": "hizalanma", "indentation": "girinti", "permanent pen": "kal\u0131c\u0131 kalem", "comments": "yorumlar", "Format Painter": "Bi\u00e7im Boyac\u0131s\u0131", "Insert\/edit iframe": "\u0130frame ekle\/d\u00fczenle", "Capitalization": "B\u00fcy\u00fck Harfle Yaz\u0131m", "lowercase": "k\u00fc\u00e7\u00fck harf", "UPPERCASE": "B\u00dcY\u00dcK HARF", "Title Case": "\u0130lk Harfler B\u00fcy\u00fck", "Permanent Pen Properties": "Kal\u0131c\u0131 Kalem \u00d6zellikleri", "Permanent pen properties...": "Kal\u0131c\u0131 kalem \u00f6zellikleri...", "Font": "Yaz\u0131 Tipi", "Size": "Boyut", "More...": "Devam\u0131...", "Spellcheck Language": "Yaz\u0131m Denetimi Dili", "Select...": "Se\u00e7...", "Preferences": "Tercihler", "Yes": "Evet", "No": "Hay\u0131r", "Keyboard Navigation": "Klavye Tu\u015flar\u0131", "Version": "S\u00fcr\u00fcm", "Anchor": "\u00c7apa", "Special character": "\u00d6zel karakter", "Code sample": "Code sample", "Color": "Renk", "Emoticons": "\u0130fadeler", "Document properties": "Dok\u00fcman \u00f6zellikleri", "Image": "Resim", "Insert link": "Ba\u011flant\u0131 ekle", "Target": "Hedef", "Link": "Ba\u011flant\u0131", "Poster": "Poster", "Media": "Medya", "Print": "Yazd\u0131r", "Prev": "\u00d6nceki", "Find and replace": "Bul ve de\u011fi\u015ftir", "Whole words": "Tam kelimeler", "Spellcheck": "Yaz\u0131m denetimi", "Caption": "Ba\u015fl\u0131k", "Insert template": "\u015eablon ekle" }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/tinymce/langs/tr_TR.js ================================================ tinymce.addI18n('tr_TR',{ "Redo": "Yinele", "Undo": "Geri al", "Cut": "Kes", "Copy": "Kopyala", "Paste": "Yap\u0131\u015ft\u0131r", "Select all": "T\u00fcm\u00fcn\u00fc se\u00e7", "New document": "Yeni dok\u00fcman", "Ok": "Tamam", "Cancel": "\u0130ptal", "Visual aids": "G\u00f6rsel ara\u00e7lar", "Bold": "Kal\u0131n", "Italic": "\u0130talik", "Underline": "Alt\u0131 \u00e7izili", "Strikethrough": "\u00dcst\u00fc \u00e7izgili", "Superscript": "\u00dcst simge", "Subscript": "Alt simge", "Clear formatting": "Bi\u00e7imi temizle", "Align left": "Sola hizala", "Align center": "Ortala", "Align right": "Sa\u011fa hizala", "Justify": "\u0130ki yana yasla", "Bullet list": "S\u0131ras\u0131z liste", "Numbered list": "S\u0131ral\u0131 liste", "Decrease indent": "Girintiyi azalt", "Increase indent": "Girintiyi art\u0131r", "Close": "Kapat", "Formats": "Bi\u00e7imler", "Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Taray\u0131c\u0131n\u0131z panoya direk eri\u015fimi desteklemiyor. L\u00fctfen Ctrl+X\/C\/V klavye k\u0131sayollar\u0131n\u0131 kullan\u0131n.", "Headers": "Ba\u015fl\u0131klar", "Header 1": "Ba\u015fl\u0131k 1", "Header 2": "Ba\u015fl\u0131k 2", "Header 3": "Ba\u015fl\u0131k 3", "Header 4": "Ba\u015fl\u0131k 4", "Header 5": "Ba\u015fl\u0131k 5", "Header 6": "Ba\u015fl\u0131k 6", "Headings": "Ba\u015fl\u0131klar", "Heading 1": "Ba\u015fl\u0131k 1", "Heading 2": "Ba\u015fl\u0131k 2", "Heading 3": "Ba\u015fl\u0131k 3", "Heading 4": "Ba\u015fl\u0131k 4", "Heading 5": "Ba\u015fl\u0131k 5", "Heading 6": "Ba\u015fl\u0131k 6", "Preformatted": "\u00d6nceden bi\u00e7imlendirilmi\u015f", "Div": "Div", "Pre": "Pre", "Code": "Kod", "Paragraph": "Paragraf", "Blockquote": "Blockquote", "Inline": "Sat\u0131r i\u00e7i", "Blocks": "Bloklar", "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "D\u00fcz metin modunda yap\u0131\u015ft\u0131r. Bu se\u00e7ene\u011fi kapatana kadar i\u00e7erikler d\u00fcz metin olarak yap\u0131\u015ft\u0131r\u0131l\u0131r.", "Fonts": "Yaz\u0131 Tipleri", "Font Sizes": "Yaz\u0131tipi B\u00fcy\u00fckl\u00fc\u011f\u00fc", "Class": "S\u0131n\u0131f", "Browse for an image": "Bir resim aray\u0131n", "OR": "ya da", "Drop an image here": "Buraya bir resim koyun", "Upload": "Y\u00fckle", "Block": "Blok", "Align": "Hizala", "Default": "Varsay\u0131lan", "Circle": "Daire", "Disc": "Disk", "Square": "Kare", "Lower Alpha": "K\u00fc\u00e7\u00fck ABC", "Lower Greek": "K\u00fc\u00e7\u00fck Yunan alfabesi", "Lower Roman": "K\u00fc\u00e7\u00fck Roman alfabesi", "Upper Alpha": "B\u00fcy\u00fck ABC", "Upper Roman": "B\u00fcy\u00fck Roman alfabesi", "Anchor...": "\u00c7apa...", "Name": "\u0130sim", "Id": "Id", "Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Id bir harf ile ba\u015flamal\u0131d\u0131r ve sadece harfleri, rakamlar\u0131, \u00e7izgileri, noktalar\u0131, virg\u00fclleri veya alt \u00e7izgileri i\u00e7ermelidir.", "You have unsaved changes are you sure you want to navigate away?": "Kaydedilmemi\u015f de\u011fi\u015fiklikler var, sayfadan ayr\u0131lmak istedi\u011finize emin misiniz?", "Restore last draft": "Son tasla\u011f\u0131 kurtar", "Special characters...": "\u00d6zel karakterler...", "Source code": "Kaynak kodu", "Insert\/Edit code sample": "Kod \u00f6rne\u011fini Kaydet\/D\u00fczenle", "Language": "Dil", "Code sample...": "Kod \u00f6rne\u011fi...", "Color Picker": "Renk Se\u00e7ici", "R": "R", "G": "G", "B": "B", "Left to right": "Soldan sa\u011fa", "Right to left": "Sa\u011fdan sola", "Emoticons...": "\u0130fadeler...", "Metadata and Document Properties": "\u00d6nbilgi ve Belge \u00d6zellikleri", "Title": "Ba\u015fl\u0131k", "Keywords": "Anahtar kelimeler", "Description": "A\u00e7\u0131klama", "Robots": "Robotlar", "Author": "Yazar", "Encoding": "Kodlama", "Fullscreen": "Tam ekran", "Action": "Eylem", "Shortcut": "K\u0131sayol", "Help": "Yard\u0131m", "Address": "Adres", "Focus to menubar": "Men\u00fc \u00e7ubu\u011funa odaklan.", "Focus to toolbar": "Ara\u00e7 \u00e7ubu\u011funa odaklan.", "Focus to element path": "Eleman yoluna odaklan", "Focus to contextual toolbar": "Ba\u011flamsal ara\u00e7 \u00e7ubu\u011funa odaklan", "Insert link (if link plugin activated)": "Link ekle (Link eklentisi aktif ise)", "Save (if save plugin activated)": "Kaydet (Kay\u0131t eklentisi aktif ise)", "Find (if searchreplace plugin activated)": "Bul (SearchReplace eklentisi aktif ise)", "Plugins installed ({0}):": "Y\u00fckl\u00fc eklenti say\u0131s\u0131 : ({0}):", "Premium plugins:": "Premium eklentileri", "Learn more...": "Daha fazla bilgi edinin.", "You are using {0}": "{0} kullan\u0131yorsun.", "Plugins": "Eklentiler", "Handy Shortcuts": "Kullan\u0131\u015fl\u0131 K\u0131sayollar", "Horizontal line": "Yatay \u00e7izgi", "Insert\/edit image": "Resim ekle\/d\u00fczenle", "Image description": "Resim a\u00e7\u0131klamas\u0131", "Source": "Kaynak", "Dimensions": "Boyutlar", "Constrain proportions": "En - Boy oran\u0131n\u0131 koru", "General": "Genel", "Advanced": "Geli\u015fmi\u015f", "Style": "Stil", "Vertical space": "Dikey bo\u015fluk", "Horizontal space": "Yatay bo\u015fluk", "Border": "\u00c7er\u00e7eve", "Insert image": "Resim ekle", "Image...": "Resim...", "Image list": "Resim listesi", "Rotate counterclockwise": "Saat y\u00f6n\u00fcn\u00fcn tersine d\u00f6nd\u00fcr", "Rotate clockwise": "Saat y\u00f6n\u00fcnde d\u00f6nd\u00fcr", "Flip vertically": "Dikey \u00e7evir", "Flip horizontally": "Yatay \u00e7evir", "Edit image": "G\u00f6r\u00fcnt\u00fcy\u00fc d\u00fczenle", "Image options": "G\u00f6r\u00fcnt\u00fc se\u00e7enekleri", "Zoom in": "Yak\u0131nla\u015ft\u0131r", "Zoom out": "Uzakla\u015ft\u0131r", "Crop": "Kes", "Resize": "Yeniden Boyutland\u0131r", "Orientation": "Y\u00f6n\u00fcn\u00fc Belirle", "Brightness": "Parlakl\u0131k", "Sharpen": "Keskinle\u015ftir", "Contrast": "Kontrast", "Color levels": "Renk seviyesi", "Gamma": "Gama", "Invert": "Tersine \u00e7evir", "Apply": "Uygula", "Back": "Geri", "Insert date\/time": "Tarih \/ Zaman ekle", "Date\/time": "Tarih\/zaman", "Insert\/Edit Link": "Ba\u011flant\u0131 Ekle\/D\u00fczenle", "Insert\/edit link": "Ba\u011flant\u0131 ekle\/d\u00fczenle", "Text to display": "G\u00f6r\u00fcnen yaz\u0131", "Url": "Url", "Open link in...": "Ba\u011flant\u0131y\u0131 a\u00e7...", "Current window": "Mevcut pencere", "None": "Hi\u00e7biri", "New window": "Yeni pencere", "Remove link": "Ba\u011flant\u0131y\u0131 kald\u0131r", "Anchors": "\u00c7apalar", "Link...": "Ba\u011flant\u0131...", "Paste or type a link": "Bir ba\u011flant\u0131 yap\u0131\u015ft\u0131r\u0131n yada yaz\u0131n.", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "Girdi\u011finiz URL bir eposta adresi gibi g\u00f6z\u00fck\u00fcyor. Gerekli olan mailto: \u00f6nekini eklemek ister misiniz?", "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "Girdi\u011finiz URL bir d\u0131\u015f ba\u011flant\u0131 gibi g\u00f6z\u00fck\u00fcyor. Gerekli olan http:\/\/ \u00f6nekini eklemek ister misiniz?", "Link list": "Link listesi", "Insert video": "Video ekle", "Insert\/edit video": "Video ekle\/d\u00fczenle", "Insert\/edit media": "Medya ekle\/d\u00fczenle", "Alternative source": "Alternatif kaynak", "Alternative source URL": "Alternatif kaynak URL", "Media poster (Image URL)": "Medya posteri (Resim URL)", "Paste your embed code below:": "Medya g\u00f6mme kodunu buraya yap\u0131\u015ft\u0131r:", "Embed": "G\u00f6mme", "Media...": "Medya...", "Nonbreaking space": "B\u00f6l\u00fcnemez bo\u015fluk", "Page break": "Sayfa sonu", "Paste as text": "Metin olarak yap\u0131\u015ft\u0131r", "Preview": "\u00d6nizleme", "Print...": "Yazd\u0131r...", "Save": "Kaydet", "Find": "Bul", "Replace with": "Bununla de\u011fi\u015ftir", "Replace": "De\u011fi\u015ftir", "Replace all": "T\u00fcm\u00fcn\u00fc de\u011fi\u015ftir", "Previous": "Geri", "Next": "Sonraki", "Find and replace...": "Bul ve de\u011fi\u015ftir...", "Could not find the specified string.": "Herhangi bir sonu\u00e7 bulunamad\u0131.", "Match case": "B\u00fcy\u00fck \/ K\u00fc\u00e7\u00fck harfe duyarl\u0131", "Find whole words only": "Sadece t\u00fcm kelimeyi ara", "Spell check": "Yaz\u0131m denetimi", "Ignore": "Yoksay", "Ignore all": "T\u00fcm\u00fcn\u00fc yoksay", "Finish": "Bitir", "Add to Dictionary": "S\u00f6zl\u00fc\u011fe ekle", "Insert table": "Tablo ekle", "Table properties": "Tablo \u00f6zellikleri", "Delete table": "Tabloyu sil", "Cell": "H\u00fccre", "Row": "Sat\u0131r", "Column": "S\u00fctun", "Cell properties": "H\u00fccre \u00f6zellikleri", "Merge cells": "H\u00fccreleri birle\u015ftir", "Split cell": "H\u00fccreleri ay\u0131r", "Insert row before": "\u00d6ncesine yeni sat\u0131r ekle", "Insert row after": "Sonras\u0131na yeni sat\u0131r ekle", "Delete row": "Sat\u0131r\u0131 sil", "Row properties": "Sat\u0131r \u00f6zellikleri", "Cut row": "Sat\u0131r\u0131 kes", "Copy row": "Sat\u0131r\u0131 kopyala", "Paste row before": "\u00d6ncesine sat\u0131r yap\u0131\u015ft\u0131r", "Paste row after": "Sonras\u0131na sat\u0131r yap\u0131\u015ft\u0131r", "Insert column before": "\u00d6ncesine yeni s\u00fctun ekle", "Insert column after": "Sonras\u0131na yeni s\u00fctun ekle", "Delete column": "S\u00fctunu sil", "Cols": "S\u00fctunlar", "Rows": "Sat\u0131rlar", "Width": "Geni\u015flik", "Height": "Y\u00fckseklik", "Cell spacing": "H\u00fccre aral\u0131\u011f\u0131", "Cell padding": "H\u00fccre i\u00e7 bo\u015flu\u011fu", "Show caption": "Ba\u015fl\u0131\u011f\u0131 g\u00f6ster", "Left": "Sol", "Center": "Orta", "Right": "Sa\u011f", "Cell type": "H\u00fccre tipi", "Scope": "Kapsam", "Alignment": "Hizalama", "H Align": "Yatay Hizalama", "V Align": "Dikey Hizalama", "Top": "\u00dcst", "Middle": "Orta", "Bottom": "Alt", "Header cell": "Ba\u015fl\u0131k h\u00fccresi", "Row group": "Sat\u0131r grubu", "Column group": "S\u00fctun grubu", "Row type": "Sat\u0131r tipi", "Header": "Ba\u015fl\u0131k", "Body": "G\u00f6vde", "Footer": "Alt", "Border color": "Kenarl\u0131k Rengi", "Insert template...": "\u015eablon ekle...", "Templates": "\u015eablonlar", "Template": "Tema", "Text color": "Yaz\u0131 rengi", "Background color": "Arkaplan rengi", "Custom...": "\u00d6zel", "Custom color": "\u00d6zel Renk", "No color": "Renk Yok", "Remove color": "Rengi kald\u0131r", "Table of Contents": "\u0130\u00e7indekiler", "Show blocks": "Bloklar\u0131 g\u00f6r\u00fcnt\u00fcle", "Show invisible characters": "G\u00f6r\u00fcnmez karakterleri g\u00f6ster", "Word count": "Kelime say\u0131s\u0131", "Words: {0}": "Kelime: {0}", "{0} words": "{0} kelime", "File": "Dosya", "Edit": "D\u00fczenle", "Insert": "Ekle", "View": "G\u00f6r\u00fcnt\u00fcle", "Format": "Bi\u00e7im", "Table": "Tablo", "Tools": "Ara\u00e7lar", "Powered by {0}": "{0} taraf\u0131ndan yap\u0131lm\u0131\u015ft\u0131r ", "Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Zengin Metin Alan\u0131. Men\u00fc i\u00e7in ALT-F9 k\u0131sayolunu kullan\u0131n. Ara\u00e7 \u00e7ubu\u011fu i\u00e7in ALT-F10 k\u0131sayolunu kullan\u0131n. Yard\u0131m i\u00e7in ALT-0 k\u0131sayolunu kullan\u0131n.", "Image title": "Resim ba\u015fl\u0131\u011f\u0131", "Border width": "Kenar geni\u015fli\u011fi", "Border style": "Kenar sitili", "Error": "Hata", "Warn": "Uyar\u0131", "Valid": "Ge\u00e7erli", "To open the popup, press Shift+Enter": "Popup'\u0131 a\u00e7mak i\u00e7in Shift+Enter'a bas\u0131n", "Rich Text Area. Press ALT-0 for help.": "Zengin Metin Alan\u0131. Yard\u0131m i\u00e7in Alt-0'a bas\u0131n.", "System Font": "Sistem Yaz\u0131 Tipi", "Failed to upload image: {0}": "Resim y\u00fcklenemedi: {0}", "Failed to load plugin: {0} from url {1}": "Eklenti y\u00fcklenemedi: {1} url\u2019sinden {0} ", "Failed to load plugin url: {0}": "Url eklentisi y\u00fcklenemedi: {0}", "Failed to initialize plugin: {0}": "Eklenti ba\u015flat\u0131lamad\u0131: {0}", "example": "\u00f6rnek", "Search": "Ara", "All": "T\u00fcm\u00fc", "Currency": "Para birimi", "Text": "Metin", "Quotations": "Al\u0131nt\u0131", "Mathematical": "Matematik", "Extended Latin": "Uzat\u0131lm\u0131\u015f Latin", "Symbols": "Semboller", "Arrows": "Oklar", "User Defined": "Kullan\u0131c\u0131 Tan\u0131ml\u0131", "dollar sign": "dolar i\u015fareti", "currency sign": "para birimi i\u015fareti", "euro-currency sign": "euro para birimi i\u015fareti", "colon sign": "colon i\u015fareti", "cruzeiro sign": "cruzeiro i\u015fareti", "french franc sign": "frans\u0131z frang\u0131 i\u015fareti", "lira sign": "lira i\u015fareti", "mill sign": "mill i\u015fareti", "naira sign": "naira i\u015fareti", "peseta sign": "peseta i\u015fareti", "rupee sign": "rupi i\u015fareti", "won sign": "won i\u015fareti", "new sheqel sign": "yeni \u015fekel i\u015fareti", "dong sign": "dong i\u015fareti", "kip sign": "kip i\u015fareti", "tugrik sign": "tugrik i\u015fareti", "drachma sign": "drahma i\u015fareti", "german penny symbol": "alman kuru\u015f sembol\u00fc", "peso sign": "peso i\u015fareti", "guarani sign": "guarani i\u015fareti", "austral sign": "austral i\u015fareti", "hryvnia sign": "hrivniya i\u015fareti", "cedi sign": "cedi i\u015fareti", "livre tournois sign": "livre tournois i\u015fareti", "spesmilo sign": "spesmilo i\u015fareti", "tenge sign": "tenge i\u015fareti", "indian rupee sign": "hindistan rupisi i\u015fareti", "turkish lira sign": "t\u00fcrk liras\u0131 i\u015fareti", "nordic mark sign": "nordic i\u015fareti", "manat sign": "manat i\u015fareti", "ruble sign": "ruble i\u015fareti", "yen character": "yen karakteri", "yuan character": "yuan karakteri", "yuan character, in hong kong and taiwan": "yuan karakteri, hong kong ve tayvan'da kullan\u0131lan", "yen\/yuan character variant one": "yen\/yuan karakter de\u011fi\u015fkeni", "Loading emoticons...": "\u0130fadeler y\u00fckleniyor...", "Could not load emoticons": "\u0130fadeler y\u00fcklenemedi", "People": "\u0130nsan", "Animals and Nature": "Hayvanlar ve Do\u011fa", "Food and Drink": "Yiyecek ve \u0130\u00e7ecek", "Activity": "Etkinlik", "Travel and Places": "Gezi ve Yerler", "Objects": "Nesneler", "Flags": "Bayraklar", "Characters": "Karakter", "Characters (no spaces)": "Karakter (bo\u015fluksuz)", "Error: Form submit field collision.": "Hata: Form g\u00f6nderme alan\u0131 \u00e7at\u0131\u015fmas\u0131.", "Error: No form element found.": "Hata: Form eleman\u0131 bulunamad\u0131.", "Update": "G\u00fcncelle\u015ftir", "Color swatch": "Renk \u00f6rne\u011fi", "Turquoise": "Turkuaz", "Green": "Ye\u015fil", "Blue": "Mavi", "Purple": "Mor", "Navy Blue": "Lacivert", "Dark Turquoise": "Koyu Turkuaz", "Dark Green": "Koyu Ye\u015fil", "Medium Blue": "Donuk Mavi", "Medium Purple": "Orta Mor", "Midnight Blue": "Gece Yar\u0131s\u0131 Mavisi", "Yellow": "Sar\u0131", "Orange": "Turuncu", "Red": "K\u0131rm\u0131z\u0131", "Light Gray": "A\u00e7\u0131k Gri", "Gray": "Gri", "Dark Yellow": "Koyu Sar\u0131", "Dark Orange": "Koyu Turuncu", "Dark Red": "Koyu K\u0131rm\u0131z\u0131", "Medium Gray": "Orta Gri", "Dark Gray": "Koyu Gri", "Black": "Siyah", "White": "Beyaz", "Switch to or from fullscreen mode": "Tam ekran moduna ge\u00e7 veya \u00e7\u0131k", "Open help dialog": "Yard\u0131m penceresini a\u00e7", "history": "ge\u00e7mi\u015f", "styles": "stiller", "formatting": "bi\u00e7imlendirme", "alignment": "hizalanma", "indentation": "girinti", "permanent pen": "kal\u0131c\u0131 kalem", "comments": "yorumlar", "Anchor": "\u00c7apa", "Special character": "\u00d6zel karakter", "Code sample": "Kod \u00f6rne\u011fi", "Color": "Renk", "Emoticons": "G\u00fcl\u00fcc\u00fckler", "Document properties": "Dok\u00fcman \u00f6zellikleri", "Image": "Resim", "Insert link": "Ba\u011flant\u0131 ekle", "Target": "Hedef", "Link": "Ba\u011flant\u0131", "Poster": "Poster", "Media": "Medya", "Print": "Yazd\u0131r", "Prev": "\u00d6nceki", "Find and replace": "Bul ve de\u011fi\u015ftir", "Whole words": "Tam s\u00f6zc\u00fckler", "Spellcheck": "Yaz\u0131m denetimi", "Caption": "Ba\u015fl\u0131k", "Insert template": "\u015eablon ekle" }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/tinymce/langs/uk.js ================================================ tinymce.addI18n('uk',{ "Redo": "\u041f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0438", "Undo": "\u0421\u043a\u0430\u0441\u0443\u0432\u0430\u0442\u0438", "Cut": "\u0412\u0438\u0440\u0456\u0437\u0430\u0442\u0438", "Copy": "\u041a\u043e\u043f\u0456\u044e\u0432\u0430\u0442\u0438", "Paste": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438", "Select all": "\u0412\u0438\u0434\u0456\u043b\u0438\u0442\u0438 \u0432\u0441\u0435", "New document": "\u0421\u0442\u0432\u043e\u0440\u0438\u0442\u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442", "Ok": "\u0413\u0430\u0440\u0430\u0437\u0434", "Cancel": "\u0421\u043a\u0430\u0441\u0443\u0432\u0430\u0442\u0438", "Visual aids": "\u041d\u0430\u043e\u0447\u043d\u0456 \u043f\u0440\u0438\u043b\u0430\u0434\u0434\u044f", "Bold": "\u0416\u0438\u0440\u043d\u0438\u0439", "Italic": "\u041a\u0443\u0440\u0441\u0438\u0432", "Underline": "\u041f\u0456\u0434\u043a\u0440\u0435\u0441\u043b\u0435\u043d\u043d\u044f", "Strikethrough": "\u041f\u0435\u0440\u0435\u043a\u0440\u0435\u0441\u043b\u0435\u043d\u043d\u044f", "Superscript": "\u041d\u0430\u0434\u0440\u044f\u0434\u043a\u043e\u0432\u0438\u0439 \u0441\u0438\u043c\u0432\u043e\u043b", "Subscript": "\u041f\u0456\u0434\u0440\u044f\u0434\u043a\u043e\u0432\u0438\u0439 \u0441\u0438\u043c\u0432\u043e\u043b", "Clear formatting": "\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u0438 \u0444\u043e\u0440\u043c\u0430\u0442\u0443\u0432\u0430\u043d\u043d\u044f", "Align left": "\u041f\u043e \u043b\u0456\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e", "Align center": "\u0412\u0438\u0440\u0456\u0432\u043d\u044f\u0442\u0438 \u043f\u043e \u0446\u0435\u043d\u0442\u0440\u0443", "Align right": "\u0412\u0438\u0440\u0456\u0432\u043d\u044f\u0442\u0438 \u0437\u0430 \u043f\u0440\u0430\u0432\u0438\u043c \u043a\u0440\u0430\u0454\u043c", "Justify": "\u0412\u0438\u0440\u0456\u0432\u043d\u044e\u0432\u0430\u043d\u043d\u044f", "Bullet list": "\u041d\u0435\u043d\u0443\u043c\u0435\u0440\u043e\u0432\u0430\u043d\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a", "Numbered list": "\u041d\u0443\u043c\u0435\u0440\u043e\u0432\u0430\u043d\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a", "Decrease indent": "\u0417\u043c\u0435\u043d\u0448\u0438\u0442\u0438 \u0432\u0456\u0434\u0441\u0442\u0443\u043f", "Increase indent": "\u0417\u0431\u0456\u043b\u044c\u0448\u0438\u0442\u0438 \u0432\u0456\u0434\u0441\u0442\u0443\u043f", "Close": "\u0417\u0430\u043a\u0440\u0438\u0442\u0438", "Formats": "\u0424\u043e\u0440\u043c\u0430\u0442\u0438", "Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u0412\u0430\u0448 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u043d\u0435 \u043f\u0456\u0434\u0442\u0440\u0438\u043c\u0443\u0454 \u043f\u0440\u044f\u043c\u0438\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u0434\u043e \u0431\u0443\u0444\u0435\u0440\u0430 \u043e\u0431\u043c\u0456\u043d\u0443. \u0412\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0439\u0442\u0435 \u043d\u0430\u0442\u043e\u043c\u0456\u0441\u0442\u044c \u0441\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044f \u043a\u043b\u0430\u0432\u0456\u0448 Ctrl\u00a0+\u00a0C\/V\/X.", "Headers": "\u041a\u043e\u043b\u043e\u043d\u0442\u0438\u0442\u0443\u043b\u0438", "Header 1": "\u041a\u043e\u043b\u043e\u043d\u0442\u0438\u0442\u0443\u043b 1", "Header 2": "\u041a\u043e\u043b\u043e\u043d\u0442\u0438\u0442\u0443\u043b 2", "Header 3": "\u041a\u043e\u043b\u043e\u043d\u0442\u0438\u0442\u0443\u043b 3", "Header 4": "\u041a\u043e\u043b\u043e\u043d\u0442\u0438\u0442\u0443\u043b 4", "Header 5": "\u041a\u043e\u043b\u043e\u043d\u0442\u0438\u0442\u0443\u043b 5", "Header 6": "\u041a\u043e\u043b\u043e\u043d\u0442\u0438\u0442\u0443\u043b 6", "Headings": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438", "Heading 1": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 1", "Heading 2": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 2", "Heading 3": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 3", "Heading 4": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 4", "Heading 5": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 5", "Heading 6": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 6", "Preformatted": "\u0424\u043e\u0440\u043c\u0430\u0442\u043e\u0432\u0430\u043d\u0438\u0439", "Div": "\u0420\u043e\u0437\u0434\u0456\u043b", "Pre": "\u041f\u043e\u043f\u0435\u0440\u0435\u0434\u043d\u0454 \u0444\u043e\u0440\u043c\u0430\u0442\u0443\u0432\u0430\u043d\u043d\u044f", "Code": "\u041a\u043e\u0434", "Paragraph": "\u0410\u0431\u0437\u0430\u0446", "Blockquote": "\u0411\u043b\u043e\u043a \u0446\u0438\u0442\u0443\u0432\u0430\u043d\u043d\u044f", "Inline": "\u0420\u044f\u0434\u043a\u043e\u0432\u0438\u0439", "Blocks": "\u0411\u043b\u043e\u043a\u0438", "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u0412\u0441\u0442\u0430\u0432\u043a\u0430 \u0437\u0434\u0456\u0439\u0441\u043d\u044e\u0454\u0442\u044c\u0441\u044f \u0443 \u0432\u0438\u0433\u043b\u044f\u0434\u0456 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0443, \u043f\u043e\u043a\u0438 \u043d\u0435 \u0432\u0456\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u0438 \u0434\u0430\u043d\u0443 \u043e\u043f\u0446\u0456\u044e.", "Fonts": "\u0428\u0440\u0438\u0444\u0442\u0438", "Font Sizes": "\u0420\u043e\u0437\u043c\u0456\u0440\u0438 \u0448\u0440\u0438\u0444\u0442\u0443", "Class": "\u041a\u043b\u0430\u0441", "Browse for an image": "\u0412\u0438\u0431\u0435\u0440\u0456\u0442\u044c \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f", "OR": "\u0410\u0411\u041e", "Drop an image here": "\u041f\u0435\u0440\u0435\u043c\u0456\u0441\u0442\u0456\u0442\u044c \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f \u0441\u044e\u0434\u0438", "Upload": "\u0417\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0438\u0442\u0438", "Block": "\u0411\u043b\u043e\u043a", "Align": "\u0412\u0438\u0440\u0456\u0432\u043d\u044e\u0432\u0430\u043d\u043d\u044f", "Default": "\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0438\u0439", "Circle": "\u041e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u0456", "Disc": "\u041a\u0440\u0443\u0433\u0438", "Square": "\u041a\u0432\u0430\u0434\u0440\u0430\u0442\u0438", "Lower Alpha": "\u041c\u0430\u043b\u0456 \u043b\u0430\u0442\u0438\u043d\u0441\u044c\u043a\u0456 \u0431\u0443\u043a\u0432\u0438", "Lower Greek": "\u041c\u0430\u043b\u0456 \u0433\u0440\u0435\u0446\u044c\u043a\u0456 \u0431\u0443\u043a\u0432\u0438", "Lower Roman": "\u041c\u0430\u043b\u0456 \u0440\u0438\u043c\u0441\u044c\u043a\u0456 \u0446\u0438\u0444\u0440\u0438", "Upper Alpha": "\u0412\u0435\u043b\u0438\u043a\u0456 \u043b\u0430\u0442\u0438\u043d\u0441\u044c\u043a\u0456 \u0431\u0443\u043a\u0432\u0438", "Upper Roman": "\u0420\u0438\u043c\u0441\u044c\u043a\u0456 \u0446\u0438\u0444\u0440\u0438", "Anchor...": "\u042f\u043a\u0456\u0440\u2026", "Name": "\u041d\u0430\u0437\u0432\u0430", "Id": "\u041a\u043e\u0434", "Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "\u041a\u043e\u0434 \u043c\u0430\u0454 \u043f\u043e\u0447\u0438\u043d\u0430\u0442\u0438\u0441\u044f \u0437 \u043b\u0456\u0442\u0435\u0440\u0438 \u0456 \u043c\u043e\u0436\u0435 \u043c\u0456\u0441\u0442\u0438\u0442\u0438 \u043b\u0438\u0448\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u0438 \u043b\u0456\u0442\u0435\u0440, \u0446\u0438\u0444\u0440, \u0434\u0435\u0444\u0456\u0441\u0443, \u043a\u0440\u0430\u043f\u043a\u0438, \u043a\u043e\u043c\u0438 \u0430\u0431\u043e \u043d\u0438\u0436\u043d\u044c\u043e\u0433\u043e \u043f\u0456\u0434\u043a\u0440\u0435\u0441\u043b\u0435\u043d\u043d\u044f.", "You have unsaved changes are you sure you want to navigate away?": "\u0423 \u0412\u0430\u0441 \u0454 \u043d\u0435\u0437\u0431\u0435\u0440\u0435\u0436\u0435\u043d\u0456 \u0437\u043c\u0456\u043d\u0438. \u0412\u0438 \u0432\u043f\u0435\u0432\u043d\u0435\u043d\u0456, \u0449\u043e \u0445\u043e\u0447\u0435\u0442\u0435 \u043f\u0456\u0442\u0438?", "Restore last draft": "\u0412\u0456\u0434\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044f \u043e\u0441\u0442\u0430\u043d\u043d\u044c\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0443", "Special character...": "\u0421\u043f\u0435\u0446\u0456\u0430\u043b\u044c\u043d\u0438\u0439 \u0441\u0438\u043c\u0432\u043e\u043b\u2026", "Source code": "\u0412\u0438\u0445\u0456\u0434\u043d\u0438\u0439 \u043a\u043e\u0434", "Insert\/Edit code sample": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438\/\u0437\u043c\u0456\u043d\u0438\u0442\u0438 \u043f\u0440\u0438\u043a\u043b\u0430\u0434 \u043a\u043e\u0434\u0443", "Language": "\u041c\u043e\u0432\u0430", "Code sample...": "\u041f\u0440\u0438\u043a\u043b\u0430\u0434 \u043a\u043e\u0434\u0443\u2026", "Color Picker": "\u041f\u0456\u043f\u0435\u0442\u043a\u0430 \u043a\u043e\u043b\u044c\u043e\u0440\u0443", "R": "\u0427", "G": "\u0417", "B": "\u0411", "Left to right": "\u0417\u043b\u0456\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043e", "Right to left": "\u0421\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u043b\u0456\u0432\u043e", "Emoticons...": "\u0421\u043c\u0430\u0439\u043b\u0438\u043a\u0438\u2026", "Metadata and Document Properties": "\u041c\u0435\u0442\u0430\u0434\u0430\u043d\u0456 \u0456 \u0432\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430", "Title": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a", "Keywords": "\u041a\u043b\u044e\u0447\u043e\u0432\u0456 \u0441\u043b\u043e\u0432\u0430", "Description": "\u041e\u043f\u0438\u0441", "Robots": "\u0420\u043e\u0431\u043e\u0442\u0438", "Author": "\u0410\u0432\u0442\u043e\u0440", "Encoding": "\u041a\u043e\u0434\u0443\u0432\u0430\u043d\u043d\u044f", "Fullscreen": "\u041f\u043e\u0432\u043d\u043e\u0435\u043a\u0440\u0430\u043d\u043d\u0438\u0439 \u0440\u0435\u0436\u0438\u043c", "Action": "\u0414\u0456\u044f", "Shortcut": "\u042f\u0440\u043b\u0438\u043a", "Help": "\u0414\u043e\u043f\u043e\u043c\u043e\u0433\u0430", "Address": "\u0410\u0434\u0440\u0435\u0441\u0430", "Focus to menubar": "\u0424\u043e\u043a\u0443\u0441 \u043d\u0430 \u043c\u0435\u043d\u044e", "Focus to toolbar": "\u0424\u043e\u043a\u0443\u0441 \u043d\u0430 \u0456\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0445", "Focus to element path": "\u0424\u043e\u043a\u0443\u0441 \u043d\u0430 \u0448\u043b\u044f\u0445\u0443", "Focus to contextual toolbar": "\u0424\u043e\u043a\u0443\u0441 \u043d\u0430 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0456", "Insert link (if link plugin activated)": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f (\u044f\u043a\u0449\u043e \u043f\u043b\u0430\u0433\u0456\u043d \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u044c \u0430\u043a\u0442\u0438\u0432\u043e\u0432\u0430\u043d\u0438\u0439)", "Save (if save plugin activated)": "\u0417\u0431\u0435\u0440\u0435\u0433\u0442\u0438 (\u044f\u043a\u0449\u043e \u043f\u043b\u0430\u0433\u0456\u043d \u0437\u0431\u0435\u0440\u0435\u0436\u0435\u043d\u043d\u044f \u0430\u043a\u0442\u0438\u0432\u043e\u0432\u0430\u043d\u043e)", "Find (if searchreplace plugin activated)": "\u0417\u043d\u0430\u0439\u0442\u0438 (\u044f\u043a\u0449\u043e \u043f\u043b\u0430\u0433\u0456\u043d \u043f\u043e\u0448\u0443\u043a\u0443 \u0430\u043a\u0442\u0438\u0432\u043e\u0432\u0430\u043d\u043e)", "Plugins installed ({0}):": "\u0412\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0456 \u043f\u043b\u0430\u0433\u0456\u043d\u0438 ({0}):", "Premium plugins:": "\u041f\u0440\u0435\u043c\u0456\u0443\u043c \u043f\u043b\u0430\u0433\u0456\u043d\u0438:", "Learn more...": "\u0414\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u043e...", "You are using {0}": "\u0423 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u0430\u043d\u043d\u0456 {0}", "Plugins": "\u041f\u043b\u0430\u0433\u0456\u043d\u0438", "Handy Shortcuts": "\u041a\u043b\u0430\u0432\u0456\u0430\u0442\u0443\u0440\u043d\u0456 \u0441\u043a\u043e\u0440\u043e\u0447\u0435\u043d\u043d\u044f", "Horizontal line": "\u0413\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u0430 \u043b\u0456\u043d\u0456\u044f", "Insert\/edit image": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438\/\u0437\u043c\u0456\u043d\u0438\u0442\u0438 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f", "Image description": "\u041e\u043f\u0438\u0441 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f", "Source": "\u0414\u0436\u0435\u0440\u0435\u043b\u043e", "Dimensions": "\u0420\u043e\u0437\u043c\u0456\u0440", "Constrain proportions": "\u0417\u0431\u0435\u0440\u0456\u0433\u0430\u0442\u0438 \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0456\u0457", "General": "\u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0456", "Advanced": "\u0420\u043e\u0437\u0448\u0438\u0440\u0435\u043d\u0456", "Style": "\u0421\u0442\u0438\u043b\u044c", "Vertical space": "\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u0438\u0439 \u0456\u043d\u0442\u0435\u0440\u0432\u0430\u043b", "Horizontal space": "\u0413\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u0438\u0439 \u0456\u043d\u0442\u0435\u0440\u0432\u0430\u043b", "Border": "\u041c\u0435\u0436\u0430", "Insert image": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f", "Image...": "\u0417\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f\u2026", "Image list": "\u041f\u0435\u0440\u0435\u043b\u0456\u043a \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u044c", "Rotate counterclockwise": "\u041f\u043e\u0432\u0435\u0440\u043d\u0443\u0442\u0438 \u043f\u0440\u043e\u0442\u0438 \u0433\u043e\u0434\u0438\u043d\u043d\u0438\u043a\u043e\u0432\u043e\u0457 \u0441\u0442\u0440\u0456\u043b\u043a\u0438", "Rotate clockwise": "\u041f\u043e\u0432\u0435\u0440\u043d\u0443\u0442\u0438 \u0437\u0430 \u0433\u043e\u0434\u0438\u043d\u043d\u0438\u043a\u043e\u0432\u043e\u044e \u0441\u0442\u0440\u0456\u043b\u043a\u043e\u044e", "Flip vertically": "\u0412\u0456\u0434\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u0438 \u043f\u043e \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u0456", "Flip horizontally": "\u0412\u0456\u0434\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u0438 \u043f\u043e \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u0456", "Edit image": "\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f", "Image options": "\u041d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u043d\u043d\u044f \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f", "Zoom in": "\u041d\u0430\u0431\u043b\u0438\u0437\u0438\u0442\u0438", "Zoom out": "\u0412\u0456\u0434\u0434\u0430\u043b\u0438\u0442\u0438", "Crop": "\u041e\u0431\u0440\u0456\u0437\u0430\u0442\u0438", "Resize": "\u0417\u043c\u0456\u043d\u0438\u0442\u0438 \u0440\u043e\u0437\u043c\u0456\u0440", "Orientation": "\u041e\u0440\u0456\u0454\u043d\u0442\u0430\u0446\u0456\u044f", "Brightness": "\u042f\u0441\u043a\u0440\u0430\u0432\u0456\u0441\u0442\u044c", "Sharpen": "\u0427\u0456\u0442\u043a\u0456\u0441\u0442\u044c", "Contrast": "\u041a\u043e\u043d\u0442\u0440\u0430\u0441\u0442", "Color levels": "\u0420\u0456\u0432\u043d\u0456 \u043a\u043e\u043b\u044c\u043e\u0440\u0456\u0432", "Gamma": "\u0413\u0430\u043c\u043c\u0430", "Invert": "\u0406\u043d\u0432\u0435\u0440\u0441\u0456\u044f", "Apply": "\u0417\u0430\u0441\u0442\u043e\u0441\u0443\u0432\u0430\u0442\u0438", "Back": "\u041f\u043e\u0432\u0435\u0440\u043d\u0443\u0442\u0438\u0441\u044f", "Insert date\/time": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0434\u0430\u0442\u0443\/\u0447\u0430\u0441", "Date\/time": "\u0414\u0430\u0442\u0430\/\u0447\u0430\u0441", "Insert\/Edit Link": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438\/\u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f", "Insert\/edit link": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438\/\u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f", "Text to display": "\u0422\u0435\u043a\u0441\u0442 \u0434\u043b\u044f \u0432\u0456\u0434\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f", "Url": "\u0410\u0434\u0440\u0435\u0441\u0430 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f", "Open link in...": "\u0412\u0456\u0434\u043a\u0440\u0438\u0442\u0438 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u0432\u2026", "Current window": "\u0423 \u043f\u043e\u0442\u043e\u0447\u043d\u043e\u043c\u0443 \u0432\u0456\u043a\u043d\u0456", "None": "\u041d\u0456", "New window": "\u0423 \u043d\u043e\u0432\u043e\u043c\u0443 \u0432\u0456\u043a\u043d\u0456", "Remove link": "\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f", "Anchors": "\u042f\u043a\u043e\u0440\u0456", "Link...": "\u041f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f\u2026", "Paste or type a link": "\u041d\u0430\u043f\u0438\u0441\u0430\u0442\u0438 \u0430\u0431\u043e \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u0421\u0445\u043e\u0436\u0435, \u0449\u043e \u0432\u0438 \u0432\u0432\u0435\u043b\u0438 \u0430\u0434\u0440\u0435\u0441\u0443 \u0435\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0457 \u043f\u043e\u0448\u0442\u0438. \u0412\u0438 \u0431\u0430\u0436\u0430\u0454\u0442\u0435 \u0434\u043e\u0434\u0430\u0442\u0438 mailto: \u043f\u0440\u0435\u0444\u0456\u043a\u0441?", "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\u0421\u0445\u043e\u0436\u0435, \u0449\u043e \u0432\u0438 \u0432\u0432\u0435\u043b\u0438 \u0437\u043e\u0432\u043d\u0456\u0448\u043d\u0454 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f. \u0412\u0438 \u0431\u0430\u0436\u0430\u0454\u0442\u0435 \u0434\u043e\u0434\u0430\u0442\u0438 http:\/\/ \u043f\u0440\u0435\u0444\u0456\u043a\u0441?", "Link list": "\u041f\u0435\u0440\u0435\u043b\u0456\u043a \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u044c", "Insert video": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0432\u0456\u0434\u0435\u043e", "Insert\/edit video": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438\/\u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 \u0432\u0456\u0434\u0435\u043e", "Insert\/edit media": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438\/\u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 \u0430\u0443\u0434\u0456\u043e", "Alternative source": "\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u0435 \u0434\u0436\u0435\u0440\u0435\u043b\u043e", "Alternative source URL": "\u041f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u043d\u0430 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u0435 \u0434\u0436\u0435\u0440\u0435\u043b\u043e", "Media poster (Image URL)": "\u0421\u0432\u0456\u0442\u043b\u0438\u043d\u0430 \u043c\u0435\u0434\u0456\u0430 (\u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u043d\u0430 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f)", "Paste your embed code below:": "\u0412\u0441\u0442\u0430\u0432\u0442\u0435 \u0432\u0430\u0448 \u043a\u043e\u0434 \u043d\u0438\u0436\u0447\u0435:", "Embed": "\u041a\u043e\u0434 \u0434\u043b\u044f \u0432\u0441\u0442\u0430\u0432\u043a\u0438", "Media...": "\u041c\u0435\u0434\u0456\u0430\u2026", "Nonbreaking space": "\u041d\u0435\u0440\u043e\u0437\u0440\u0438\u0432\u043d\u0438\u0439 \u043f\u0440\u043e\u0431\u0456\u043b", "Page break": "\u0420\u043e\u0437\u0440\u0438\u0432 \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0438", "Paste as text": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u044f\u043a \u0442\u0435\u043a\u0441\u0442", "Preview": "\u041f\u043e\u043f\u0435\u0440\u0435\u0434\u043d\u0456\u0439 \u043f\u0435\u0440\u0435\u0433\u043b\u044f\u0434", "Print...": "\u0414\u0440\u0443\u043a\u0443\u0432\u0430\u0442\u0438\u2026", "Save": "\u0417\u0431\u0435\u0440\u0435\u0433\u0442\u0438", "Find": "\u0417\u043d\u0430\u0439\u0442\u0438", "Replace with": "\u0417\u0430\u043c\u0456\u043d\u0438\u0442\u0438 \u043d\u0430", "Replace": "\u0417\u0430\u043c\u0456\u043d\u0438\u0442\u0438", "Replace all": "\u0417\u0430\u043c\u0456\u043d\u0438\u0442\u0438 \u0432\u0441\u0435", "Previous": "\u041f\u043e\u043f\u0435\u0440\u0435\u0434\u043d\u0456\u0439", "Next": "\u0412\u043d\u0438\u0437", "Find and replace...": "\u041f\u043e\u0448\u0443\u043a \u0456 \u0437\u0430\u043c\u0456\u043d\u0430\u2026", "Could not find the specified string.": "\u0412\u043a\u0430\u0437\u0430\u043d\u0438\u0439 \u0440\u044f\u0434\u043e\u043a \u043d\u0435 \u0437\u043d\u0430\u0439\u0434\u0435\u043d\u043e", "Match case": "\u0412\u0440\u0430\u0445\u043e\u0432\u0443\u0432\u0430\u0442\u0438 \u0440\u0435\u0433\u0456\u0441\u0442\u0440", "Find whole words only": "\u0428\u0443\u043a\u0430\u0442\u0438 \u0442\u0456\u043b\u044c\u043a\u0438 \u0446\u0456\u043b\u0456 \u0441\u043b\u043e\u0432\u0430", "Spell check": "\u041f\u0435\u0440\u0435\u0432\u0456\u0440\u043a\u0430 \u043f\u0440\u0430\u0432\u043e\u043f\u0438\u0441\u0443", "Ignore": "\u0406\u0433\u043d\u043e\u0440\u0443\u0432\u0430\u0442\u0438", "Ignore all": "\u0406\u0433\u043d\u043e\u0440\u0443\u0432\u0430\u0442\u0438 \u0432\u0441\u0435", "Finish": "\u0417\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u0438", "Add to Dictionary": "\u0414\u043e\u0434\u0430\u0442\u0438 \u0434\u043e \u0421\u043b\u043e\u0432\u043d\u0438\u043a\u0430", "Insert table": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044e", "Table properties": "\u0412\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456 \u0442\u0430\u0431\u043b\u0438\u0446\u0456", "Delete table": "\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044e", "Cell": "\u041a\u043e\u043c\u0456\u0440\u043a\u0430", "Row": "\u0420\u044f\u0434\u043e\u043a", "Column": "\u0421\u0442\u043e\u0432\u043f\u0435\u0446\u044c", "Cell properties": "\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438 \u043a\u043e\u043c\u0456\u0440\u043a\u0438", "Merge cells": "\u041e\u0431'\u0454\u0434\u043d\u0430\u0442\u0438 \u043a\u043e\u043c\u0456\u0440\u043a\u0438", "Split cell": "\u0420\u043e\u0437\u0431\u0438\u0442\u0438 \u043a\u043e\u043c\u0456\u0440\u043a\u0443", "Insert row before": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u043f\u043e\u0440\u043e\u0436\u043d\u0456\u0439 \u0440\u044f\u0434\u043e\u043a \u0437\u0432\u0435\u0440\u0445\u0443", "Insert row after": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u043f\u043e\u0440\u043e\u0436\u043d\u0456\u0439 \u0440\u044f\u0434\u043e\u043a \u0437\u043d\u0438\u0437\u0443", "Delete row": "\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0440\u044f\u0434\u043e\u043a", "Row properties": "\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438 \u0440\u044f\u0434\u043a\u0430", "Cut row": "\u0412\u0438\u0440\u0456\u0437\u0430\u0442\u0438 \u0440\u044f\u0434\u043e\u043a", "Copy row": "\u041a\u043e\u043f\u0456\u044e\u0432\u0430\u0442\u0438 \u0440\u044f\u0434\u043e\u043a", "Paste row before": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0440\u044f\u0434\u043e\u043a \u0437\u0432\u0435\u0440\u0445\u0443", "Paste row after": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0440\u044f\u0434\u043e\u043a \u0437\u043d\u0438\u0437\u0443", "Insert column before": "\u0414\u043e\u0434\u0430\u0442\u0438 \u0441\u0442\u043e\u0432\u043f\u0435\u0446\u044c \u043b\u0456\u0432\u043e\u0440\u0443\u0447", "Insert column after": "\u0414\u043e\u0434\u0430\u0442\u0438 \u0441\u0442\u043e\u0432\u043f\u0435\u0446\u044c \u043f\u0440\u0430\u0432\u043e\u0440\u0443\u0447", "Delete column": "\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0441\u0442\u043e\u0432\u043f\u0435\u0446\u044c", "Cols": "\u0421\u0442\u043e\u0432\u043f\u0446\u0456", "Rows": "\u0420\u044f\u0434\u043a\u0438", "Width": "\u0428\u0438\u0440\u0438\u043d\u0430", "Height": "\u0412\u0438\u0441\u043e\u0442\u0430", "Cell spacing": "\u0412\u0456\u0434\u0441\u0442\u0430\u043d\u044c \u043c\u0456\u0436 \u043a\u043e\u043c\u0456\u0440\u043a\u0430\u043c\u0438", "Cell padding": "\u041f\u043e\u043b\u044f \u043a\u043e\u043c\u0456\u0440\u043e\u043a", "Show caption": "\u041f\u043e\u043a\u0430\u0437\u0443\u0432\u0430\u0442\u0438 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a", "Left": "\u041f\u043e \u043b\u0456\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e", "Center": "\u041f\u043e \u0446\u0435\u043d\u0442\u0440\u0443", "Right": "\u041f\u043e \u043f\u0440\u0430\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e", "Cell type": "\u0422\u0438\u043f \u043a\u043e\u043c\u0456\u0440\u043a\u0438", "Scope": "\u0421\u0444\u0435\u0440\u0430", "Alignment": "\u0412\u0438\u0440\u0456\u0432\u043d\u044e\u0432\u0430\u043d\u043d\u044f", "H Align": "\u0413\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u0435 \u0432\u0438\u0440\u0456\u0432\u043d\u044e\u0432\u0430\u043d\u043d\u044f", "V Align": "\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u0435 \u0432\u0438\u0440\u0456\u0432\u043d\u044e\u0432\u0430\u043d\u043d\u044f", "Top": "\u041f\u043e \u0432\u0435\u0440\u0445\u043d\u044c\u043e\u043c\u0443 \u043a\u0440\u0430\u044e", "Middle": "\u041f\u043e \u0446\u0435\u043d\u0442\u0440\u0443", "Bottom": "\u041f\u043e \u043d\u0438\u0436\u043d\u044c\u043e\u043c\u0443 \u043a\u0440\u0430\u044e", "Header cell": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a", "Row group": "\u0413\u0440\u0443\u043f\u0430 \u0440\u044f\u0434\u043a\u0456\u0432", "Column group": "\u0413\u0440\u0443\u043f\u0430 \u0441\u0442\u043e\u0432\u043f\u0446\u0456\u0432", "Row type": "\u0422\u0438\u043f \u0440\u044f\u0434\u043a\u0430", "Header": "\u0412\u0435\u0440\u0445\u043d\u0456\u0439 \u043a\u043e\u043b\u043e\u043d\u0442\u0438\u0442\u0443\u043b", "Body": "\u0422\u0456\u043b\u043e", "Footer": "\u041d\u0438\u0436\u043d\u0456\u0439 \u043a\u043e\u043b\u043e\u043d\u0442\u0438\u0442\u0443\u043b", "Border color": "\u043a\u043e\u043b\u0456\u0440 \u0440\u0430\u043c\u043a\u0438", "Insert template...": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u2026", "Templates": "\u0428\u0430\u0431\u043b\u043e\u043d\u0438", "Template": "\u0428\u0430\u0431\u043b\u043e\u043d", "Text color": "\u041a\u043e\u043b\u0456\u0440 \u0442\u0435\u043a\u0441\u0442\u0443", "Background color": "\u041a\u043e\u043b\u0456\u0440 \u0444\u043e\u043d\u0443", "Custom...": "\u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0446\u044c\u043a\u0438\u0439", "Custom color": "\u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0446\u044c\u043a\u0438\u0439 \u043a\u043e\u043b\u0456\u0440", "No color": "\u0431\u0435\u0437 \u043a\u043e\u043b\u044c\u043e\u0440\u0443", "Remove color": "\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u043a\u043e\u043b\u0456\u0440", "Table of Contents": "\u0417\u043c\u0456\u0441\u0442", "Show blocks": "\u041f\u043e\u043a\u0430\u0437\u0443\u0432\u0430\u0442\u0438 \u0431\u043b\u043e\u043a\u0438", "Show invisible characters": "\u041f\u043e\u043a\u0430\u0437\u0443\u0432\u0430\u0442\u0438 \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u0456 \u0441\u0438\u043c\u0432\u043e\u043b\u0438", "Word count": "\u041a\u0456\u043b\u044c\u043a\u0456\u0441\u0442\u044c \u0441\u043b\u0456\u0432", "Count": "\u041b\u0456\u0447\u0438\u043b\u044c\u043d\u0438\u043a", "Document": "\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442", "Selection": "\u0412\u0438\u0434\u0456\u043b\u0435\u043d\u043d\u044f", "Words": "\u0421\u043b\u043e\u0432\u0430", "Words: {0}": "\u041a\u0456\u043b\u044c\u043a\u0456\u0441\u0442\u044c \u0441\u043b\u0456\u0432: {0}", "{0} words": "{0} \u0441\u043b\u0456\u0432", "File": "\u0424\u0430\u0439\u043b", "Edit": "\u0417\u043c\u0456\u043d\u0438\u0442\u0438", "Insert": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438", "View": "\u0412\u0438\u0433\u043b\u044f\u0434", "Format": "\u0424\u043e\u0440\u043c\u0430\u0442", "Table": "\u0422\u0430\u0431\u043b\u0438\u0446\u044f", "Tools": "\u0406\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0438", "Powered by {0}": "\u041f\u0440\u0430\u0446\u044e\u0454 \u043d\u0430 {0}", "Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u0422\u0435\u043a\u0441\u0442\u043e\u0432\u0435 \u043f\u043e\u043b\u0435. \u041d\u0430\u0442\u0438\u0441\u043d\u0456\u0442\u044c ALT-F9 \u0449\u043e\u0431 \u0432\u0438\u043a\u043b\u0438\u043a\u0430\u0442\u0438 \u043c\u0435\u043d\u044e, ALT-F10 \u043f\u0430\u043d\u0435\u043b\u044c \u0456\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0456\u0432, ALT-0 \u0434\u043b\u044f \u0432\u0438\u043a\u043b\u0438\u043a\u0443 \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u0438.", "Image title": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f", "Border width": "\u0428\u0438\u0440\u0438\u043d\u0430 \u043c\u0435\u0436\u0456", "Border style": "\u0421\u0442\u0438\u043b\u044c \u043c\u0435\u0436\u0456", "Error": "\u041f\u043e\u043c\u0438\u043b\u043a\u0430", "Warn": "\u041f\u043e\u043f\u0435\u0440\u0435\u0434\u0436\u0435\u043d\u043d\u044f", "Valid": "\u0412\u0456\u0440\u043d\u0438\u0439", "To open the popup, press Shift+Enter": "\u0429\u043e\u0431 \u0432\u0456\u0434\u043a\u0440\u0438\u0442\u0438 \u0441\u043f\u043b\u0438\u0432\u043d\u0435 \u0432\u0456\u043a\u043d\u043e, \u043d\u0430\u0442\u0438\u0441\u043d\u0456\u0442\u044c Shift\u00a0+\u00a0Enter", "Rich Text Area. Press ALT-0 for help.": "\u041e\u0431\u043b\u0430\u0441\u0442\u044c \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0432\u0430\u043d\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0443. \u041d\u0430\u0442\u0438\u0441\u043d\u0456\u0442\u044c ALT\u00a0+\u00a00, \u0449\u043e\u0431 \u0432\u0456\u0434\u043a\u0440\u0438\u0442\u0438 \u0434\u043e\u0432\u0456\u0434\u043a\u0443.", "System Font": "\u0421\u0438\u0441\u0442\u0435\u043c\u043d\u0438\u0439 \u0448\u0440\u0438\u0444\u0442", "Failed to upload image: {0}": "\u041d\u0435 \u0432\u0434\u0430\u043b\u043e\u0441\u044f \u0432\u0456\u0434\u0432\u0430\u043d\u0442\u0430\u0436\u0438\u0442\u0438 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f: {0}", "Failed to load plugin: {0} from url {1}": "\u041d\u0435 \u0432\u0434\u0430\u043b\u043e\u0441\u044f \u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0438\u0442\u0438 \u043f\u043b\u0430\u0491\u0456\u043d: {0} \u0437\u0430 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f\u043c {1}", "Failed to load plugin url: {0}": "\u041d\u0435 \u0432\u0434\u0430\u043b\u043e\u0441\u044f \u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0438\u0442\u0438 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u043d\u0430 \u043f\u043b\u0430\u0491\u0456\u043d: {0}", "Failed to initialize plugin: {0}": "\u041d\u0435 \u0432\u0434\u0430\u043b\u043e\u0441\u044f \u0456\u043d\u0456\u0446\u0456\u0430\u043b\u0456\u0437\u0443\u0432\u0430\u0442\u0438 \u043f\u043b\u0430\u0491\u0456\u043d: {0}", "example": "\u043f\u0440\u0438\u043a\u043b\u0430\u0434", "Search": "\u041f\u043e\u0448\u0443\u043a", "All": "\u0412\u0441\u0435", "Currency": "\u0412\u0430\u043b\u044e\u0442\u0430", "Text": "\u0422\u0435\u043a\u0441\u0442", "Quotations": "\u0426\u0438\u0442\u0443\u0432\u0430\u043d\u043d\u044f", "Mathematical": "\u041c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u043d\u0456 \u0441\u0438\u043c\u0432\u043e\u043b\u0438", "Extended Latin": "\u0420\u043e\u0437\u0448\u0438\u0440\u0435\u043d\u0430 \u043b\u0430\u0442\u0438\u043d\u0438\u0446\u044f", "Symbols": "\u0421\u0438\u043c\u0432\u043e\u043b\u0438", "Arrows": "\u0421\u0442\u0440\u0456\u043b\u043a\u0438", "User Defined": "\u0412\u0438\u0437\u043d\u0430\u0447\u0435\u043d\u0456 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0435\u043c", "dollar sign": "\u0437\u043d\u0430\u043a \u0434\u043e\u043b\u0430\u0440\u0430", "currency sign": "\u0437\u043d\u0430\u043a \u0432\u0430\u043b\u044e\u0442\u0438", "euro-currency sign": "\u0437\u043d\u0430\u043a \u0454\u0432\u0440\u043e", "colon sign": "\u0437\u043d\u0430\u043a \u0434\u0432\u043e\u043a\u0440\u0430\u043f\u043a\u0438", "cruzeiro sign": "\u0437\u043d\u0430\u043a \u043a\u0440\u0443\u0437\u0435\u0439\u0440\u043e", "french franc sign": "\u0437\u043d\u0430\u043a \u0444\u0440\u0430\u043d\u0446\u0443\u0437\u044c\u043a\u043e\u0433\u043e \u0444\u0440\u0430\u043d\u043a\u0443", "lira sign": "\u0437\u043d\u0430\u043a \u043b\u0456\u0440\u0438", "mill sign": "\u0437\u043d\u0430\u043a \u043c\u0456\u043b\u044e", "naira sign": "\u0437\u043d\u0430\u043a \u043d\u0430\u0439\u0440\u0438", "peseta sign": "\u0437\u043d\u0430\u043a \u043f\u0435\u0441\u0435\u0442\u0438", "rupee sign": "\u0437\u043d\u0430\u043a \u0440\u0443\u043f\u0456\u0457", "won sign": "\u0437\u043d\u0430\u043a \u0432\u043e\u043d\u0438", "new sheqel sign": "\u0437\u043d\u0430\u043a \u043d\u043e\u0432\u043e\u0433\u043e \u0448\u0435\u043a\u0435\u043b\u044f", "dong sign": "\u0437\u043d\u0430\u043a \u0434\u043e\u043d\u0433\u0443", "kip sign": "\u0437\u043d\u0430\u043a \u043a\u0456\u043f\u0443", "tugrik sign": "\u0437\u043d\u0430\u043a \u0442\u0443\u0433\u0440\u0438\u043a\u0430", "drachma sign": "\u0437\u043d\u0430\u043a \u0434\u0440\u0430\u0445\u043c\u0438", "german penny symbol": "\u0437\u043d\u0430\u043a \u043f\u0444\u0435\u043d\u0456\u0433\u0430", "peso sign": "\u0437\u043d\u0430\u043a \u043f\u0435\u0441\u043e", "guarani sign": "\u0437\u043d\u0430\u043a \u0433\u0443\u0430\u0440\u0430\u043d\u0456", "austral sign": "\u0437\u043d\u0430\u043a \u0430\u0443\u0441\u0442\u0440\u0430\u043b\u044e", "hryvnia sign": "\u0437\u043d\u0430\u043a \u0433\u0440\u0438\u0432\u043d\u0456", "cedi sign": "\u0437\u043d\u0430\u043a \u0441\u0435\u0434\u0456", "livre tournois sign": "\u0437\u043d\u0430\u043a \u0442\u0443\u0440\u0441\u044c\u043a\u043e\u0433\u043e \u043b\u0456\u0432\u0440\u0443", "spesmilo sign": "\u0437\u043d\u0430\u043a \u0441\u043f\u0435\u0441\u043c\u0456\u043b\u043e", "tenge sign": "\u0437\u043d\u0430\u043a \u0442\u0435\u043d\u0433\u0435", "indian rupee sign": "\u0437\u043d\u0430\u043a \u0456\u043d\u0434\u0456\u0439\u0441\u044c\u043a\u043e\u0457 \u0440\u0443\u043f\u0456\u0457", "turkish lira sign": "\u0437\u043d\u0430\u043a \u0442\u0443\u0440\u0435\u0446\u044c\u043a\u043e\u0457 \u043b\u0456\u0440\u0438", "nordic mark sign": "\u0437\u043d\u0430\u043a \u043f\u0456\u0432\u043d\u0456\u0447\u043d\u043e\u0457 \u043c\u0430\u0440\u043a\u0438", "manat sign": "\u0437\u043d\u0430\u043a \u043c\u0430\u043d\u0430\u0442\u0443", "ruble sign": "\u0437\u043d\u0430\u043a \u0440\u0443\u0431\u043b\u044f", "yen character": "\u0441\u0438\u043c\u0432\u043e\u043b \u0454\u043d\u0438", "yuan character": "\u0441\u0438\u043c\u0432\u043e\u043b \u044e\u0430\u043d\u044e", "yuan character, in hong kong and taiwan": "\u0441\u0438\u043c\u0432\u043e\u043b \u044e\u0430\u043d\u044e \u0432 \u0413\u043e\u043d\u043a\u043e\u043d\u0437\u0456 \u0456 \u0422\u0430\u0439\u0432\u0430\u043d\u0456", "yen\/yuan character variant one": "\u0441\u0438\u043c\u0432\u043e\u043b \u0454\u043d\u0438\/\u044e\u0430\u043d\u044e, \u043f\u0435\u0440\u0448\u0438\u0439 \u0432\u0430\u0440\u0456\u0430\u043d\u0442", "Loading emoticons...": "\u0417\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u043d\u044f \u0441\u043c\u0430\u0439\u043b\u0438\u043a\u0456\u0432\u2026", "Could not load emoticons": "\u041d\u0435 \u0432\u0434\u0430\u043b\u043e\u0441\u044f \u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0438\u0442\u0438 \u0441\u043c\u0430\u0439\u043b\u0438\u043a\u0438", "People": "\u041b\u044e\u0434\u0438", "Animals and Nature": "\u0422\u0432\u0430\u0440\u0438\u043d\u0438 \u0442\u0430 \u043f\u0440\u0438\u0440\u043e\u0434\u0430", "Food and Drink": "\u0407\u0436\u0430 \u0442\u0430 \u043d\u0430\u043f\u043e\u0457", "Activity": "\u0410\u043a\u0442\u0438\u0432\u043d\u0456\u0441\u0442\u044c", "Travel and Places": "\u041f\u043e\u0434\u043e\u0440\u043e\u0436\u0456 \u0456 \u043c\u0456\u0441\u0446\u044f", "Objects": "\u041e\u0431\u2019\u0454\u043a\u0442\u0438", "Flags": "\u041f\u0440\u0430\u043f\u043e\u0440\u0438", "Characters": "\u0421\u0438\u043c\u0432\u043e\u043b\u0438", "Characters (no spaces)": "\u0421\u0438\u043c\u0432\u043e\u043b\u0438 (\u0431\u0435\u0437 \u043f\u0440\u043e\u0431\u0456\u043b\u0456\u0432)", "{0} characters": "\u041a\u0456\u043b\u044c\u043a\u0456\u0441\u0442\u044c \u0441\u0438\u043c\u0432\u043e\u043b\u0456\u0432: {0}", "Error: Form submit field collision.": "\u041f\u043e\u043c\u0438\u043b\u043a\u0430: \u043a\u043e\u043b\u0456\u0437\u0456\u044f \u043f\u043e\u043b\u044f \u0432\u0456\u0434\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044f \u0444\u043e\u0440\u043c\u0438.", "Error: No form element found.": "\u041f\u043e\u043c\u0438\u043b\u043a\u0430: \u043d\u0435 \u0437\u043d\u0430\u0439\u0434\u0435\u043d\u043e \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0444\u043e\u0440\u043c\u0438.", "Update": "\u041e\u043d\u043e\u0432\u0438\u0442\u0438", "Color swatch": "\u0417\u0440\u0430\u0437\u043e\u043a \u043a\u043e\u043b\u044c\u043e\u0440\u0443", "Turquoise": "\u0411\u0456\u0440\u044e\u0437\u043e\u0432\u0438\u0439", "Green": "\u0417\u0435\u043b\u0435\u043d\u0438\u0439", "Blue": "\u0421\u0438\u043d\u0456\u0439", "Purple": "\u0424\u0456\u043e\u043b\u0435\u0442\u043e\u0432\u0438\u0439", "Navy Blue": "\u0422\u0435\u043c\u043d\u043e-\u0441\u0438\u043d\u0456\u0439", "Dark Turquoise": "\u0422\u0435\u043c\u043d\u043e-\u0431\u0456\u0440\u044e\u0437\u043e\u0432\u0438\u0439", "Dark Green": "\u0422\u0435\u043c\u043d\u043e-\u0437\u0435\u043b\u0435\u043d\u0438\u0439", "Medium Blue": "\u0421\u0435\u0440\u0435\u0434\u043d\u044c\u043e-\u0441\u0438\u043d\u0456\u0439", "Medium Purple": "\u0421\u0435\u0440\u0435\u0434\u043d\u044c\u043e-\u0444\u0456\u043e\u043b\u0435\u0442\u043e\u0432\u0438\u0439", "Midnight Blue": "\u041e\u043f\u0456\u0432\u043d\u0456\u0447\u043d\u0430 \u0431\u043b\u0430\u043a\u0438\u0442\u044c", "Yellow": "\u0416\u043e\u0432\u0442\u0438\u0439", "Orange": "\u041f\u043e\u043c\u0430\u0440\u0430\u043d\u0447\u0435\u0432\u0438\u0439", "Red": "\u0427\u0435\u0440\u0432\u043e\u043d\u0438\u0439", "Light Gray": "\u0421\u0432\u0456\u0442\u043b\u043e-\u0441\u0456\u0440\u0438\u0439", "Gray": "\u0421\u0456\u0440\u0438\u0439", "Dark Yellow": "\u0422\u0435\u043c\u043d\u043e-\u0436\u043e\u0432\u0442\u0438\u0439", "Dark Orange": "\u0422\u0435\u043c\u043d\u043e-\u043f\u043e\u043c\u0430\u0440\u0430\u043d\u0447\u0435\u0432\u0438\u0439", "Dark Red": "\u0422\u0435\u043c\u043d\u043e-\u0447\u0435\u0440\u0432\u043e\u043d\u0438\u0439", "Medium Gray": "\u0421\u0435\u0440\u0435\u0434\u043d\u044c\u043e-\u0441\u0456\u0440\u0438\u0439", "Dark Gray": "\u0422\u0435\u043c\u043d\u043e-\u0441\u0456\u0440\u0438\u0439", "Light Green": "\u0421\u0432\u0456\u0442\u043b\u043e-\u0437\u0435\u043b\u0435\u043d\u0438\u0439", "Light Yellow": "\u0421\u0432\u0456\u0442\u043b\u043e-\u0436\u043e\u0432\u0442\u0438\u0439", "Light Red": "\u0421\u0432\u0456\u0442\u043b\u043e-\u0447\u0435\u0440\u0432\u043e\u043d\u0438\u0439", "Light Purple": "\u0421\u0432\u0456\u0442\u043b\u043e-\u0444\u0456\u043e\u043b\u0435\u0442\u043e\u0432\u0438\u0439", "Light Blue": "\u0421\u0432\u0456\u0442\u043b\u043e-\u0441\u0438\u043d\u0456\u0439", "Dark Purple": "\u0422\u0435\u043c\u043d\u043e-\u0444\u0456\u043e\u043b\u0435\u0442\u043e\u0432\u0438\u0439", "Dark Blue": "\u0422\u0435\u043c\u043d\u043e-\u0433\u043e\u043b\u0443\u0431\u0438\u0439", "Black": "\u0427\u043e\u0440\u043d\u0438\u0439", "White": "\u0411\u0456\u043b\u0438\u0439", "Switch to or from fullscreen mode": "\u041f\u0435\u0440\u0435\u043c\u0438\u043a\u0430\u043d\u043d\u044f \u043f\u043e\u0432\u043d\u043e\u0435\u043a\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0436\u0438\u043c\u0443", "Open help dialog": "\u0412\u0456\u0434\u043a\u0440\u0438\u0442\u0438 \u0432\u0456\u043a\u043d\u043e \u0434\u043e\u0432\u0456\u0434\u043a\u0438", "history": "\u0456\u0441\u0442\u043e\u0440\u0456\u044f", "styles": "\u0441\u0442\u0438\u043b\u0456", "formatting": "\u0444\u043e\u0440\u043c\u0430\u0442\u0443\u0432\u0430\u043d\u043d\u044f", "alignment": "\u0432\u0438\u0440\u0456\u0432\u043d\u044e\u0432\u0430\u043d\u043d\u044f", "indentation": "\u0432\u0456\u0434\u0441\u0442\u0443\u043f", "permanent pen": "\u043c\u0430\u0440\u043a\u0435\u0440", "comments": "\u043a\u043e\u043c\u0435\u043d\u0442\u0430\u0440\u0456", "Format Painter": "\u0424\u043e\u0440\u043c\u0430\u0442 \u0437\u0430 \u0437\u0440\u0430\u0437\u043a\u043e\u043c", "Insert\/edit iframe": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438\/\u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 iframe", "Capitalization": "\u0412\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u0430\u043d\u043d\u044f \u0432\u0435\u043b\u0438\u043a\u0438\u0445 \u043b\u0456\u0442\u0435\u0440", "lowercase": "\u043d\u0438\u0436\u043d\u0456\u0439 \u0440\u0435\u0433\u0456\u0441\u0442\u0440", "UPPERCASE": "\u0412\u0415\u0420\u0425\u041d\u0406\u0419 \u0420\u0415\u0413\u0406\u0421\u0422\u0420", "Title Case": "\u0420\u0435\u0433\u0456\u0441\u0442\u0440 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430", "Permanent Pen Properties": "\u0412\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456 \u043c\u0430\u0440\u043a\u0435\u0440\u0430", "Permanent pen properties...": "\u0412\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456 \u043c\u0430\u0440\u043a\u0435\u0440\u0430\u2026", "Font": "\u0428\u0440\u0438\u0444\u0442", "Size": "\u0420\u043e\u0437\u043c\u0456\u0440", "More...": "\u0411\u0456\u043b\u044c\u0448\u0435\u2026", "Spellcheck Language": "\u041c\u043e\u0432\u0430 \u043f\u0435\u0440\u0435\u0432\u0456\u0440\u043a\u0438 \u043e\u0440\u0444\u043e\u0433\u0440\u0430\u0444\u0456\u0457", "Select...": "\u0412\u0438\u0431\u0440\u0430\u0442\u0438\u2026", "Preferences": "\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438", "Yes": "\u0422\u0430\u043a", "No": "\u041d\u0456", "Keyboard Navigation": "\u041a\u0435\u0440\u0443\u0432\u0430\u043d\u043d\u044f \u0437\u0430 \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u043e\u044e \u043a\u043b\u0430\u0432\u0456\u0430\u0442\u0443\u0440\u0438", "Version": "\u0412\u0435\u0440\u0441\u0456\u044f", "Anchor": "\u042f\u043a\u0456\u0440", "Special character": "\u0421\u043f\u0435\u0446\u0456\u0430\u043b\u044c\u043d\u0456 \u0441\u0438\u043c\u0432\u043e\u043b\u0438", "Code sample": "\u041f\u0440\u0438\u043a\u043b\u0430\u0434 \u043a\u043e\u0434\u0443", "Color": "\u043a\u043e\u043b\u0456\u0440", "Emoticons": "\u0415\u043c\u043e\u0446\u0456\u0457", "Document properties": "\u0412\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430", "Image": "\u0417\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f", "Insert link": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f", "Target": "\u0412\u0456\u0434\u043a\u0440\u0438\u0432\u0430\u0442\u0438 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f", "Link": "\u041f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f", "Poster": "\u0417\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f", "Media": "\u041c\u0435\u0434\u0456\u0430\u0434\u0430\u043d\u0456", "Print": "\u0414\u0440\u0443\u043a\u0443\u0432\u0430\u0442\u0438", "Prev": "\u0412\u0433\u043e\u0440\u0443", "Find and replace": "\u041f\u043e\u0448\u0443\u043a \u0456 \u0437\u0430\u043c\u0456\u043d\u0430", "Whole words": "\u0426\u0456\u043b\u0456 \u0441\u043b\u043e\u0432\u0430", "Spellcheck": "\u041f\u0435\u0440\u0435\u0432\u0456\u0440\u043a\u0430 \u043e\u0440\u0444\u043e\u0433\u0440\u0430\u0444\u0456\u0457", "Caption": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a", "Insert template": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0448\u0430\u0431\u043b\u043e\u043d" }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/tinymce/langs/vi.js ================================================ tinymce.addI18n('vi',{ "Redo": "L\u00e0m l\u1ea1i", "Undo": "H\u1ee7y thao t\u00e1c", "Cut": "C\u1eaft", "Copy": "Sao ch\u00e9p", "Paste": "D\u00e1n", "Select all": "Ch\u1ecdn t\u1ea5t c\u1ea3", "New document": "T\u1ea1o t\u00e0i li\u1ec7u m\u1edbi", "Ok": "\u0110\u1ed3ng \u00dd", "Cancel": "Hu\u1ef7 B\u1ecf", "Visual aids": "M\u1edf khung so\u1ea1n th\u1ea3o", "Bold": "In \u0111\u1eadm", "Italic": "In nghi\u00eang", "Underline": "G\u1ea1ch d\u01b0\u1edbi", "Strikethrough": "G\u1ea1ch ngang", "Superscript": "K\u00fd t\u1ef1 m\u0169", "Subscript": "K\u00fd t\u1ef1 th\u1ea5p", "Clear formatting": "L\u01b0\u1ee3c b\u1ecf ph\u1ea7n hi\u1ec7u \u1ee9ng", "Align left": "Canh tr\u00e1i", "Align center": "Canh gi\u1eefa", "Align right": "Canh ph\u1ea3i", "Justify": "Canh \u0111\u1ec1u hai b\u00ean", "Bullet list": "Danh s\u00e1ch d\u1ea1ng bi\u1ec3u t\u01b0\u1ee3ng", "Numbered list": "Danh s\u00e1ch d\u1ea1ng s\u1ed1", "Decrease indent": "Th\u1ee5t l\u00f9i d\u00f2ng", "Increase indent": "T\u0103ng kho\u1ea3ng c\u00e1ch d\u00f2ng", "Close": "\u0110\u00f3ng L\u1ea1i", "Formats": "\u0110\u1ecbnh d\u1ea1ng", "Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Tr\u00ecnh duy\u1ec7t c\u1ee7a b\u1ea1n kh\u00f4ng h\u1ed7 tr\u1ee3 truy c\u1eadp truy c\u1eadp b\u1ed9 nh\u1edb \u1ea3o, vui l\u00f2ng s\u1eed d\u1ee5ng c\u00e1c t\u1ed5 h\u1ee3p ph\u00edm Ctrl + X, C, V.", "Headers": "\u0110\u1ea7u trang", "Header 1": "Ti\u00eau \u0111\u1ec1 1", "Header 2": "Ti\u00eau \u0111\u1ec1 2", "Header 3": "Ti\u00eau \u0111\u1ec1 3", "Header 4": "Ti\u00eau \u0111\u1ec1 4", "Header 5": "Ti\u00eau \u0111\u1ec1 5", "Header 6": "Ti\u00eau \u0111\u1ec1 6", "Headings": "Ph\u1ea7n \u0111\u1ea7u", "Heading 1": "H1", "Heading 2": "H2", "Heading 3": "H3", "Heading 4": "H4", "Heading 5": "H5", "Heading 6": "G6", "Preformatted": "\u0110\u1ecbnh d\u1ea1ng s\u1eb5n", "Div": "Khung", "Pre": "\u0110\u1ecbnh d\u1ea1ng", "Code": "M\u00e3", "Paragraph": "\u0110o\u1ea1n v\u0103n", "Blockquote": "\u0110o\u1ea1n Tr\u00edch D\u1eabn", "Inline": "C\u00f9ng d\u00f2ng", "Blocks": "Bao", "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Ch\u1ee9c n\u0103ng D\u00e1n \u0111ang trong tr\u1ea1ng th\u00e1i v\u0103n b\u1ea3n \u0111\u01a1n gi\u1ea3n. N\u1ed9i dung s\u1ebd \u0111\u01b0\u1ee3c d\u00e1n d\u01b0\u1edbi d\u1ea1ng v\u0103n b\u1ea3n thu\u1ea7n, kh\u00f4ng c\u00f3 \u0111\u1ecbnh d\u1ea1ng.", "Font Family": "Ki\u1ec3u ch\u1eef", "Font Sizes": "C\u1ee1 ch\u1eef", "Class": "L\u1edbp", "Browse for an image": "Ch\u00e8n m\u1ed9t h\u00ecnh \u1ea3nh", "OR": "HO\u1eb6C", "Drop an image here": "Th\u1ea3 h\u00ecnh \u1ea3nh v\u00e0o \u0111\u00e2y", "Upload": "T\u1ea3i l\u00ean", "Block": "Kh\u1ed1i", "Align": "Canh l\u1ec1", "Default": "M\u1eb7c \u0111\u1ecbnh", "Circle": "H\u00ecnh tr\u00f2n", "Disc": "H\u00ecnh tr\u00f2n d\u1ea1ng m\u1ecfng", "Square": "\u00d4 vu\u00f4ng", "Lower Alpha": "K\u00fd t\u1ef1 th\u01b0\u1eddng", "Lower Greek": "S\u1ed1 hy l\u1ea1p th\u01b0\u1eddng", "Lower Roman": "S\u1ed1 la m\u00e3 th\u01b0\u1eddng", "Upper Alpha": "K\u00fd t\u1ef1 hoa", "Upper Roman": "S\u1ed1 la m\u00e3 hoa", "Anchor": "Neo", "Name": "T\u00ean", "Id": "Id", "Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.", "You have unsaved changes are you sure you want to navigate away?": "B\u1ea1n ch\u01b0a l\u01b0u thay \u0111\u1ed5i b\u1ea1n c\u00f3 ch\u1eafc b\u1ea1n mu\u1ed1n di chuy\u1ec3n \u0111i?", "Restore last draft": "Kh\u00f4i ph\u1ee5c b\u1ea3n g\u1ea7n nh\u1ea5t", "Special character": "K\u00fd t\u1ef1 \u0111\u1eb7c bi\u1ec7t", "Source code": "M\u00e3 ngu\u1ed3n", "Insert\/Edit code sample": "Ch\u00e8n\/S\u1eeda m\u00e3 m\u1eabu", "Language": "Ng\u00f4n ng\u1eef", "Code sample": "M\u00e3 m\u1eabu", "Color": "M\u00e0u s\u1eafc", "R": "M\u00e0u \u0111\u1ecf", "G": "M\u00e0u xanh l\u00e1 c\u00e2y", "B": "M\u00e0u xanh da tr\u1eddi", "Left to right": "Tr\u00e1i sang ph\u1ea3i", "Right to left": "Ph\u1ea3i sang tr\u00e1i", "Emoticons": "Bi\u1ec3u t\u01b0\u1ee3ng c\u1ea3m x\u00fac", "Document properties": "Thu\u1ed9c t\u00ednh t\u00e0i li\u1ec7u", "Title": "Ti\u00eau \u0111\u1ec1", "Keywords": "T\u1eeb kh\u00f3a", "Description": "M\u00f4 t\u1ea3", "Robots": "Robots", "Author": "T\u00e1c gi\u1ea3", "Encoding": "M\u00e3 h\u00f3a", "Fullscreen": "To\u00e0n m\u00e0n h\u00ecnh", "Action": "H\u00e0nh \u0111\u1ed9ng", "Shortcut": "L\u1ed1i t\u1eaft", "Help": "Tr\u1ee3 gi\u00fap", "Address": "\u0110\u1ecba ch\u1ec9", "Focus to menubar": "Focus to menubar", "Focus to toolbar": "Focus to toolbar", "Focus to element path": "Focus to element path", "Focus to contextual toolbar": "Focus to contextual toolbar", "Insert link (if link plugin activated)": "Ch\u00e8n \u0111\u01b0\u1eddng d\u1eabn", "Save (if save plugin activated)": "L\u01b0u", "Find (if searchreplace plugin activated)": "T\u00ecm ki\u1ebfm", "Plugins installed ({0}):": "Plugins installed ({0}):", "Premium plugins:": "Premium plugins:", "Learn more...": "Learn more...", "You are using {0}": "You are using {0}", "Plugins": "Plugins", "Handy Shortcuts": "Handy Shortcuts", "Horizontal line": "K\u1ebb ngang", "Insert\/edit image": "Ch\u00e8n\/s\u1eeda \u1ea3nh", "Image description": "M\u00f4 t\u1ea3 \u1ea3nh", "Source": "Ngu\u1ed3n", "Dimensions": "K\u00edch th\u01b0\u1edbc", "Constrain proportions": "T\u1ef7 l\u1ec7 h\u1ea1n ch\u1ebf", "General": "Chung", "Advanced": "N\u00e2ng cao", "Style": "Ki\u1ec3u", "Vertical space": "N\u1eb1m d\u1ecdc", "Horizontal space": "N\u1eb1m ngang", "Border": "\u0110\u01b0\u1eddng vi\u1ec1n", "Insert image": "Ch\u00e8n \u1ea3nh", "Image": "Image", "Image list": "Image list", "Rotate counterclockwise": "Xoay tr\u00e1i", "Rotate clockwise": "Xoay ph\u1ea3i", "Flip vertically": "L\u1eadt d\u1ecdc", "Flip horizontally": "L\u1eadt ngang", "Edit image": "Ch\u1ec9nh s\u1eeda \u1ea3nh", "Image options": "T\u00f9y ch\u1ecdn \u1ea3nh", "Zoom in": "Thu nh\u1ecf", "Zoom out": "Ph\u00f3ng to", "Crop": "C\u1eaft \u1ea3nh", "Resize": "Thay \u0111\u1ed5i k\u00edch th\u01b0\u1edbc", "Orientation": "\u0110\u1ecbnh h\u01b0\u1edbng", "Brightness": "\u0110\u1ed9 s\u00e1ng", "Sharpen": "L\u00e0m s\u1eafc n\u00e9t", "Contrast": "\u0110\u1ed9 t\u01b0\u01a1ng ph\u1ea3n", "Color levels": "M\u1ee9c \u0111\u1ed9 m\u00e0u", "Gamma": "M\u00e0u Gamma", "Invert": "\u0110\u1ea3o ng\u01b0\u1ee3c", "Apply": "\u00c1p d\u1ee5ng", "Back": "Quay l\u1ea1i", "Insert date\/time": "Ch\u00e8n ng\u00e0y\/th\u00e1ng", "Date\/time": "Date\/time", "Insert link": "Ch\u00e8n li\u00ean k\u1ebft", "Insert\/edit link": "Ch\u00e8n\/s\u1eeda li\u00ean k\u1ebft", "Text to display": "N\u1ed9i dung hi\u1ec3n th\u1ecb", "Url": "Url", "Target": "\u0110\u00edch", "None": "Kh\u00f4ng", "New window": "C\u1eeda s\u1ed5 m\u1edbi", "Remove link": "B\u1ecf li\u00ean k\u1ebft", "Anchors": "Neo", "Link": "Link", "Paste or type a link": "Paste or type a link", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u0110\u1ecba ch\u1ec9 URL b\u1ea1n v\u1eeba nh\u1eadp gi\u1ed1ng nh\u01b0 m\u1ed9t \u0111\u1ecba ch\u1ec9 email. B\u1ea1n c\u00f3 mu\u1ed1n th\u00eam ti\u1ec1n t\u1ed1 mailto: kh\u00f4ng?", "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\u0110\u1ecba ch\u1ec9 URL b\u1ea1n v\u1eeba nh\u1eadp gi\u1ed1ng nh\u01b0 m\u1ed9t li\u00ean k\u1ebft. B\u1ea1n c\u00f3 mu\u1ed1n th\u00eam ti\u1ec1n t\u1ed1 http:\/\/ kh\u00f4ng?", "Link list": "Link list", "Insert video": "Ch\u00e8n video", "Insert\/edit video": "Ch\u00e8n\/s\u1eeda video", "Insert\/edit media": "Insert\/edit media", "Alternative source": "Ngu\u1ed3n thay th\u1ebf", "Poster": "Ng\u01b0\u1eddi g\u1eedi", "Paste your embed code below:": "D\u00e1n m\u00e3 nh\u00fang c\u1ee7a b\u1ea1n d\u01b0\u1edbi \u0111\u00e2y:", "Embed": "Nh\u00fang", "Media": "Media", "Nonbreaking space": "Kh\u00f4ng xu\u1ed1ng h\u00e0ng", "Page break": "Ng\u1eaft trang", "Paste as text": "D\u00e1n \u0111o\u1ea1n v\u0103n b\u1ea3n", "Preview": "Xem th\u1eed", "Print": "In", "Save": "L\u01b0u", "Find": "T\u00ecm ki\u1ebfm", "Replace with": "Thay th\u1ebf b\u1edfi", "Replace": "Thay th\u1ebf", "Replace all": "Thay t\u1ea5t c\u1ea3", "Prev": "Tr\u01b0\u1edbc", "Next": "K\u1ebf ti\u1ebfp", "Find and replace": "T\u00ecm v\u00e0 thay th\u1ebf", "Could not find the specified string.": "Kh\u00f4ng t\u00ecm th\u1ea5y chu\u1ed7i qui \u0111\u1ecbnh", "Match case": "Tr\u01b0\u1eddng h\u1ee3p xem", "Whole words": "To\u00e0n b\u1ed9 t\u1eeb", "Spellcheck": "Ki\u1ec3m tra ch\u00ednh t\u1ea3", "Ignore": "B\u1ecf qua", "Ignore all": "B\u1ecf qua t\u1ea5t", "Finish": "Ho\u00e0n t\u1ea5t", "Add to Dictionary": "Th\u00eam v\u00e0o t\u1eeb \u0111i\u1ec3n", "Insert table": "Th\u00eam b\u1ea3ng", "Table properties": "Thu\u1ed9c t\u00ednh b\u1ea3ng", "Delete table": "Xo\u00e1 b\u1ea3ng", "Cell": "\u00d4", "Row": "D\u00f2ng", "Column": "C\u1ed9t", "Cell properties": "Thu\u1ed9c t\u00ednh \u00f4", "Merge cells": "Tr\u1ed9n \u00f4", "Split cell": "Chia c\u1eaft \u00f4", "Insert row before": "Th\u00eam d\u00f2ng ph\u00eda tr\u00ean", "Insert row after": "Th\u00eam d\u00f2ng ph\u00eda d\u01b0\u1edbi", "Delete row": "Xo\u00e1 d\u00f2ng", "Row properties": "Thu\u1ed9c t\u00ednh d\u00f2ng", "Cut row": "C\u1eaft d\u00f2ng", "Copy row": "Sao ch\u00e9p d\u00f2ng", "Paste row before": "D\u00e1n v\u00e0o ph\u00eda tr\u01b0\u1edbc, tr\u00ean", "Paste row after": "D\u00e1n v\u00e0o ph\u00eda sau, d\u01b0\u1edbi", "Insert column before": "Th\u00eam c\u1ed9t b\u00ean tr\u00e1i", "Insert column after": "Th\u00eam c\u1ed9t b\u00ean ph\u1ea3i", "Delete column": "Xo\u00e1 c\u1ed9t", "Cols": "C\u1ed9t", "Rows": "D\u00f2ng", "Width": "\u0110\u1ed9 R\u1ed9ng", "Height": "\u0110\u1ed9 Cao", "Cell spacing": "Kho\u1ea3ng c\u00e1ch \u00f4", "Cell padding": "Kho\u1ea3ng c\u00e1ch trong \u00f4", "Caption": "Ti\u00eau \u0111\u1ec1", "Left": "Tr\u00e1i", "Center": "Gi\u1eefa", "Right": "Ph\u1ea3i", "Cell type": "Lo\u1ea1i \u00f4", "Scope": "Quy\u1ec1n", "Alignment": "Canh ch\u1ec9nh", "H Align": "L\u1ec1 ngang", "V Align": "L\u1ec1 d\u1ecdc", "Top": "Tr\u00ean", "Middle": "Kho\u1ea3ng gi\u1eefa", "Bottom": "D\u01b0\u1edbi", "Header cell": "Ti\u00eau \u0111\u1ec1 \u00f4", "Row group": "Gom nh\u00f3m d\u00f2ng", "Column group": "Gom nh\u00f3m c\u1ed9t", "Row type": "Th\u1ec3 lo\u1ea1i d\u00f2ng", "Header": "Ti\u00eau \u0111\u1ec1", "Body": "N\u1ed9i dung", "Footer": "Ch\u00e2n", "Border color": "M\u00e0u vi\u1ec1n", "Insert template": "Th\u00eam m\u1eabu", "Templates": "M\u1eabu", "Template": "Template", "Text color": "M\u00e0u v\u0103n b\u1ea3n", "Background color": "M\u00e0u n\u1ec1n", "Custom...": "Tu\u1ef3 ch\u1ec9nh...", "Custom color": "Tu\u1ef3 ch\u1ec9nh m\u00e0u", "No color": "Kh\u00f4ng c\u00f3 m\u00e0u", "Table of Contents": "Table of Contents", "Show blocks": "Hi\u1ec3n th\u1ecb kh\u1ed1i", "Show invisible characters": "Hi\u1ec3n th\u1ecb k\u00fd t\u1ef1 \u1ea9n", "Words: {0}": "T\u1eeb: {0}", "{0} words": "{0} words", "File": "T\u1eadp tin", "Edit": "S\u1eeda", "Insert": "Ch\u00e8n", "View": "Xem", "Format": "\u0110\u1ecbnh d\u1ea1ng", "Table": "B\u1ea3ng", "Tools": "C\u00f4ng c\u1ee5", "Powered by {0}": "Powered by {0}", "Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Rich Text Area. B\u1ea5m ALT-F9 m\u1edf menu. B\u1ea5m ALT-F10 m\u1edf thanh c\u00f4ng c\u1ee5. B\u1ea5m ALT-0 m\u1edf tr\u1ee3 gi\u00fap" }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/tinymce/langs/zh_CN.js ================================================ tinymce.addI18n('zh_CN',{ "Redo": "\u91cd\u505a", "Undo": "\u64a4\u9500", "Cut": "\u526a\u5207", "Copy": "\u590d\u5236", "Paste": "\u7c98\u8d34", "Select all": "\u5168\u9009", "New document": "\u65b0\u6587\u4ef6", "Ok": "\u786e\u5b9a", "Cancel": "\u53d6\u6d88", "Visual aids": "\u7f51\u683c\u7ebf", "Bold": "\u7c97\u4f53", "Italic": "\u659c\u4f53", "Underline": "\u4e0b\u5212\u7ebf", "Strikethrough": "\u5220\u9664\u7ebf", "Superscript": "\u4e0a\u6807", "Subscript": "\u4e0b\u6807", "Clear formatting": "\u6e05\u9664\u683c\u5f0f", "Align left": "\u5de6\u8fb9\u5bf9\u9f50", "Align center": "\u4e2d\u95f4\u5bf9\u9f50", "Align right": "\u53f3\u8fb9\u5bf9\u9f50", "Justify": "\u4e24\u7aef\u5bf9\u9f50", "Bullet list": "\u9879\u76ee\u7b26\u53f7", "Numbered list": "\u7f16\u53f7\u5217\u8868", "Decrease indent": "\u51cf\u5c11\u7f29\u8fdb", "Increase indent": "\u589e\u52a0\u7f29\u8fdb", "Close": "\u5173\u95ed", "Formats": "\u683c\u5f0f", "Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u4f60\u7684\u6d4f\u89c8\u5668\u4e0d\u652f\u6301\u6253\u5f00\u526a\u8d34\u677f\uff0c\u8bf7\u4f7f\u7528Ctrl+X\/C\/V\u7b49\u5feb\u6377\u952e\u3002", "Headers": "\u6807\u9898", "Header 1": "\u6807\u98981", "Header 2": "\u6807\u98982", "Header 3": "\u6807\u98983", "Header 4": "\u6807\u98984", "Header 5": "\u6807\u98985", "Header 6": "\u6807\u98986", "Headings": "\u6807\u9898", "Heading 1": "\u6807\u98981", "Heading 2": "\u6807\u98982", "Heading 3": "\u6807\u98983", "Heading 4": "\u6807\u98984", "Heading 5": "\u6807\u98985", "Heading 6": "\u6807\u98986", "Preformatted": "\u9884\u5148\u683c\u5f0f\u5316\u7684", "Div": "Div", "Pre": "Pre", "Code": "\u4ee3\u7801", "Paragraph": "\u6bb5\u843d", "Blockquote": "\u5f15\u6587\u533a\u5757", "Inline": "\u6587\u672c", "Blocks": "\u57fa\u5757", "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u5f53\u524d\u4e3a\u7eaf\u6587\u672c\u7c98\u8d34\u6a21\u5f0f\uff0c\u518d\u6b21\u70b9\u51fb\u53ef\u4ee5\u56de\u5230\u666e\u901a\u7c98\u8d34\u6a21\u5f0f\u3002", "Fonts": "\u5b57\u4f53", "Font Sizes": "\u5b57\u53f7", "Class": "\u7c7b\u578b", "Browse for an image": "\u6d4f\u89c8\u56fe\u50cf", "OR": "\u6216", "Drop an image here": "\u62d6\u653e\u4e00\u5f20\u56fe\u50cf\u81f3\u6b64", "Upload": "\u4e0a\u4f20", "Block": "\u5757", "Align": "\u5bf9\u9f50", "Default": "\u9ed8\u8ba4", "Circle": "\u7a7a\u5fc3\u5706", "Disc": "\u5b9e\u5fc3\u5706", "Square": "\u65b9\u5757", "Lower Alpha": "\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd", "Lower Greek": "\u5c0f\u5199\u5e0c\u814a\u5b57\u6bcd", "Lower Roman": "\u5c0f\u5199\u7f57\u9a6c\u5b57\u6bcd", "Upper Alpha": "\u5927\u5199\u82f1\u6587\u5b57\u6bcd", "Upper Roman": "\u5927\u5199\u7f57\u9a6c\u5b57\u6bcd", "Anchor...": "\u951a\u70b9...", "Name": "\u540d\u79f0", "Id": "\u6807\u8bc6\u7b26", "Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "\u6807\u8bc6\u7b26\u5e94\u8be5\u4ee5\u5b57\u6bcd\u5f00\u5934\uff0c\u540e\u8ddf\u5b57\u6bcd\u3001\u6570\u5b57\u3001\u7834\u6298\u53f7\u3001\u70b9\u3001\u5192\u53f7\u6216\u4e0b\u5212\u7ebf\u3002", "You have unsaved changes are you sure you want to navigate away?": "\u4f60\u8fd8\u6709\u6587\u6863\u5c1a\u672a\u4fdd\u5b58\uff0c\u786e\u5b9a\u8981\u79bb\u5f00\uff1f", "Restore last draft": "\u6062\u590d\u4e0a\u6b21\u7684\u8349\u7a3f", "Special character...": "\u7279\u6b8a\u5b57\u7b26...", "Source code": "\u6e90\u4ee3\u7801", "Insert\/Edit code sample": "\u63d2\u5165\/\u7f16\u8f91\u4ee3\u7801\u793a\u4f8b", "Language": "\u8bed\u8a00", "Code sample...": "\u793a\u4f8b\u4ee3\u7801...", "Color Picker": "\u9009\u8272\u5668", "R": "R", "G": "G", "B": "B", "Left to right": "\u4ece\u5de6\u5230\u53f3", "Right to left": "\u4ece\u53f3\u5230\u5de6", "Emoticons...": "\u8868\u60c5\u7b26\u53f7...", "Metadata and Document Properties": "\u5143\u6570\u636e\u548c\u6587\u6863\u5c5e\u6027", "Title": "\u6807\u9898", "Keywords": "\u5173\u952e\u8bcd", "Description": "\u63cf\u8ff0", "Robots": "\u673a\u5668\u4eba", "Author": "\u4f5c\u8005", "Encoding": "\u7f16\u7801", "Fullscreen": "\u5168\u5c4f", "Action": "\u64cd\u4f5c", "Shortcut": "\u5feb\u6377\u952e", "Help": "\u5e2e\u52a9", "Address": "\u5730\u5740", "Focus to menubar": "\u79fb\u52a8\u7126\u70b9\u5230\u83dc\u5355\u680f", "Focus to toolbar": "\u79fb\u52a8\u7126\u70b9\u5230\u5de5\u5177\u680f", "Focus to element path": "\u79fb\u52a8\u7126\u70b9\u5230\u5143\u7d20\u8def\u5f84", "Focus to contextual toolbar": "\u79fb\u52a8\u7126\u70b9\u5230\u4e0a\u4e0b\u6587\u83dc\u5355", "Insert link (if link plugin activated)": "\u63d2\u5165\u94fe\u63a5 (\u5982\u679c\u94fe\u63a5\u63d2\u4ef6\u5df2\u6fc0\u6d3b)", "Save (if save plugin activated)": "\u4fdd\u5b58(\u5982\u679c\u4fdd\u5b58\u63d2\u4ef6\u5df2\u6fc0\u6d3b)", "Find (if searchreplace plugin activated)": "\u67e5\u627e(\u5982\u679c\u67e5\u627e\u66ff\u6362\u63d2\u4ef6\u5df2\u6fc0\u6d3b)", "Plugins installed ({0}):": "\u5df2\u5b89\u88c5\u63d2\u4ef6 ({0}):", "Premium plugins:": "\u4f18\u79c0\u63d2\u4ef6\uff1a", "Learn more...": "\u4e86\u89e3\u66f4\u591a...", "You are using {0}": "\u4f60\u6b63\u5728\u4f7f\u7528 {0}", "Plugins": "\u63d2\u4ef6", "Handy Shortcuts": "\u5feb\u6377\u952e", "Horizontal line": "\u6c34\u5e73\u5206\u5272\u7ebf", "Insert\/edit image": "\u63d2\u5165\/\u7f16\u8f91\u56fe\u7247", "Image description": "\u56fe\u7247\u63cf\u8ff0", "Source": "\u5730\u5740", "Dimensions": "\u5927\u5c0f", "Constrain proportions": "\u4fdd\u6301\u7eb5\u6a2a\u6bd4", "General": "\u666e\u901a", "Advanced": "\u9ad8\u7ea7", "Style": "\u6837\u5f0f", "Vertical space": "\u5782\u76f4\u8fb9\u8ddd", "Horizontal space": "\u6c34\u5e73\u8fb9\u8ddd", "Border": "\u8fb9\u6846", "Insert image": "\u63d2\u5165\u56fe\u7247", "Image...": "\u56fe\u7247...", "Image list": "\u56fe\u7247\u5217\u8868", "Rotate counterclockwise": "\u9006\u65f6\u9488\u65cb\u8f6c", "Rotate clockwise": "\u987a\u65f6\u9488\u65cb\u8f6c", "Flip vertically": "\u5782\u76f4\u7ffb\u8f6c", "Flip horizontally": "\u6c34\u5e73\u7ffb\u8f6c", "Edit image": "\u7f16\u8f91\u56fe\u7247", "Image options": "\u56fe\u7247\u9009\u9879", "Zoom in": "\u653e\u5927", "Zoom out": "\u7f29\u5c0f", "Crop": "\u88c1\u526a", "Resize": "\u8c03\u6574\u5927\u5c0f", "Orientation": "\u65b9\u5411", "Brightness": "\u4eae\u5ea6", "Sharpen": "\u9510\u5316", "Contrast": "\u5bf9\u6bd4\u5ea6", "Color levels": "\u989c\u8272\u5c42\u6b21", "Gamma": "\u4f3d\u9a6c\u503c", "Invert": "\u53cd\u8f6c", "Apply": "\u5e94\u7528", "Back": "\u540e\u9000", "Insert date\/time": "\u63d2\u5165\u65e5\u671f\/\u65f6\u95f4", "Date\/time": "\u65e5\u671f\/\u65f6\u95f4", "Insert\/Edit Link": "\u63d2\u5165\/\u7f16\u8f91\u94fe\u63a5", "Insert\/edit link": "\u63d2\u5165\/\u7f16\u8f91\u94fe\u63a5", "Text to display": "\u663e\u793a\u6587\u5b57", "Url": "\u5730\u5740", "Open link in...": "\u94fe\u63a5\u6253\u5f00\u4f4d\u7f6e...", "Current window": "\u5f53\u524d\u7a97\u53e3", "None": "\u65e0", "New window": "\u5728\u65b0\u7a97\u53e3\u6253\u5f00", "Remove link": "\u5220\u9664\u94fe\u63a5", "Anchors": "\u951a\u70b9", "Link...": "\u94fe\u63a5...", "Paste or type a link": "\u7c98\u8d34\u6216\u8f93\u5165\u94fe\u63a5", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u4f60\u6240\u586b\u5199\u7684URL\u5730\u5740\u4e3a\u90ae\u4ef6\u5730\u5740\uff0c\u9700\u8981\u52a0\u4e0amailto:\u524d\u7f00\u5417\uff1f", "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\u4f60\u6240\u586b\u5199\u7684URL\u5730\u5740\u5c5e\u4e8e\u5916\u90e8\u94fe\u63a5\uff0c\u9700\u8981\u52a0\u4e0ahttp:\/\/:\u524d\u7f00\u5417\uff1f", "Link list": "\u94fe\u63a5\u5217\u8868", "Insert video": "\u63d2\u5165\u89c6\u9891", "Insert\/edit video": "\u63d2\u5165\/\u7f16\u8f91\u89c6\u9891", "Insert\/edit media": "\u63d2\u5165\/\u7f16\u8f91\u5a92\u4f53", "Alternative source": "\u955c\u50cf", "Alternative source URL": "\u66ff\u4ee3\u6765\u6e90\u7f51\u5740", "Media poster (Image URL)": "\u5c01\u9762(\u56fe\u7247\u5730\u5740)", "Paste your embed code below:": "\u5c06\u5185\u5d4c\u4ee3\u7801\u7c98\u8d34\u5728\u4e0b\u9762:", "Embed": "\u5185\u5d4c", "Media...": "\u591a\u5a92\u4f53...", "Nonbreaking space": "\u4e0d\u95f4\u65ad\u7a7a\u683c", "Page break": "\u5206\u9875\u7b26", "Paste as text": "\u7c98\u8d34\u4e3a\u6587\u672c", "Preview": "\u9884\u89c8", "Print...": "\u6253\u5370...", "Save": "\u4fdd\u5b58", "Find": "\u67e5\u627e", "Replace with": "\u66ff\u6362\u4e3a", "Replace": "\u66ff\u6362", "Replace all": "\u5168\u90e8\u66ff\u6362", "Previous": "\u4e0a\u4e00\u4e2a", "Next": "\u4e0b\u4e00\u4e2a", "Find and replace...": "\u67e5\u627e\u5e76\u66ff\u6362...", "Could not find the specified string.": "\u672a\u627e\u5230\u641c\u7d22\u5185\u5bb9.", "Match case": "\u533a\u5206\u5927\u5c0f\u5199", "Find whole words only": "\u5168\u5b57\u5339\u914d", "Spell check": "\u62fc\u5199\u68c0\u67e5", "Ignore": "\u5ffd\u7565", "Ignore all": "\u5168\u90e8\u5ffd\u7565", "Finish": "\u5b8c\u6210", "Add to Dictionary": "\u6dfb\u52a0\u5230\u5b57\u5178", "Insert table": "\u63d2\u5165\u8868\u683c", "Table properties": "\u8868\u683c\u5c5e\u6027", "Delete table": "\u5220\u9664\u8868\u683c", "Cell": "\u5355\u5143\u683c", "Row": "\u884c", "Column": "\u5217", "Cell properties": "\u5355\u5143\u683c\u5c5e\u6027", "Merge cells": "\u5408\u5e76\u5355\u5143\u683c", "Split cell": "\u62c6\u5206\u5355\u5143\u683c", "Insert row before": "\u5728\u4e0a\u65b9\u63d2\u5165", "Insert row after": "\u5728\u4e0b\u65b9\u63d2\u5165", "Delete row": "\u5220\u9664\u884c", "Row properties": "\u884c\u5c5e\u6027", "Cut row": "\u526a\u5207\u884c", "Copy row": "\u590d\u5236\u884c", "Paste row before": "\u7c98\u8d34\u5230\u4e0a\u65b9", "Paste row after": "\u7c98\u8d34\u5230\u4e0b\u65b9", "Insert column before": "\u5728\u5de6\u4fa7\u63d2\u5165", "Insert column after": "\u5728\u53f3\u4fa7\u63d2\u5165", "Delete column": "\u5220\u9664\u5217", "Cols": "\u5217", "Rows": "\u884c", "Width": "\u5bbd", "Height": "\u9ad8", "Cell spacing": "\u5355\u5143\u683c\u5916\u95f4\u8ddd", "Cell padding": "\u5355\u5143\u683c\u5185\u8fb9\u8ddd", "Show caption": "\u663e\u793a\u6807\u9898", "Left": "\u5de6\u5bf9\u9f50", "Center": "\u5c45\u4e2d", "Right": "\u53f3\u5bf9\u9f50", "Cell type": "\u5355\u5143\u683c\u7c7b\u578b", "Scope": "\u8303\u56f4", "Alignment": "\u5bf9\u9f50\u65b9\u5f0f", "H Align": "\u6c34\u5e73\u5bf9\u9f50", "V Align": "\u5782\u76f4\u5bf9\u9f50", "Top": "\u9876\u90e8\u5bf9\u9f50", "Middle": "\u5782\u76f4\u5c45\u4e2d", "Bottom": "\u5e95\u90e8\u5bf9\u9f50", "Header cell": "\u8868\u5934\u5355\u5143\u683c", "Row group": "\u884c\u7ec4", "Column group": "\u5217\u7ec4", "Row type": "\u884c\u7c7b\u578b", "Header": "\u8868\u5934", "Body": "\u8868\u4f53", "Footer": "\u8868\u5c3e", "Border color": "\u8fb9\u6846\u989c\u8272", "Insert template...": "\u63d2\u5165\u6a21\u677f...", "Templates": "\u6a21\u677f", "Template": "\u6a21\u677f", "Text color": "\u6587\u5b57\u989c\u8272", "Background color": "\u80cc\u666f\u8272", "Custom...": "\u81ea\u5b9a\u4e49...", "Custom color": "\u81ea\u5b9a\u4e49\u989c\u8272", "No color": "\u65e0", "Remove color": "\u79fb\u9664\u989c\u8272", "Table of Contents": "\u5185\u5bb9\u5217\u8868", "Show blocks": "\u663e\u793a\u533a\u5757\u8fb9\u6846", "Show invisible characters": "\u663e\u793a\u4e0d\u53ef\u89c1\u5b57\u7b26", "Word count": "\u5b57\u6570", "Count": "\u8ba1\u6570", "Document": "\u6587\u6863", "Selection": "\u9009\u62e9", "Words": "\u5355\u8bcd", "Words: {0}": "\u5b57\u6570\uff1a{0}", "{0} words": "{0} \u5b57", "File": "\u6587\u4ef6", "Edit": "\u7f16\u8f91", "Insert": "\u63d2\u5165", "View": "\u89c6\u56fe", "Format": "\u683c\u5f0f", "Table": "\u8868\u683c", "Tools": "\u5de5\u5177", "Powered by {0}": "\u7531{0}\u9a71\u52a8", "Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u5728\u7f16\u8f91\u533a\u6309ALT-F9\u6253\u5f00\u83dc\u5355\uff0c\u6309ALT-F10\u6253\u5f00\u5de5\u5177\u680f\uff0c\u6309ALT-0\u67e5\u770b\u5e2e\u52a9", "Image title": "\u56fe\u7247\u6807\u9898", "Border width": "\u8fb9\u6846\u5bbd\u5ea6", "Border style": "\u8fb9\u6846\u6837\u5f0f", "Error": "\u9519\u8bef", "Warn": "\u8b66\u544a", "Valid": "\u6709\u6548", "To open the popup, press Shift+Enter": "\u6309Shitf+Enter\u952e\u6253\u5f00\u5bf9\u8bdd\u6846", "Rich Text Area. Press ALT-0 for help.": "\u7f16\u8f91\u533a\u3002\u6309Alt+0\u952e\u6253\u5f00\u5e2e\u52a9\u3002", "System Font": "\u7cfb\u7edf\u5b57\u4f53", "Failed to upload image: {0}": "\u56fe\u7247\u4e0a\u4f20\u5931\u8d25: {0}", "Failed to load plugin: {0} from url {1}": "\u63d2\u4ef6\u52a0\u8f7d\u5931\u8d25: {0} \u6765\u81ea\u94fe\u63a5 {1}", "Failed to load plugin url: {0}": "\u63d2\u4ef6\u52a0\u8f7d\u5931\u8d25 \u94fe\u63a5: {0}", "Failed to initialize plugin: {0}": "\u63d2\u4ef6\u521d\u59cb\u5316\u5931\u8d25: {0}", "example": "\u793a\u4f8b", "Search": "\u641c\u7d22", "All": "\u5168\u90e8", "Currency": "\u8d27\u5e01", "Text": "\u6587\u5b57", "Quotations": "\u5f15\u7528", "Mathematical": "\u6570\u5b66", "Extended Latin": "\u62c9\u4e01\u8bed\u6269\u5145", "Symbols": "\u7b26\u53f7", "Arrows": "\u7bad\u5934", "User Defined": "\u81ea\u5b9a\u4e49", "dollar sign": "\u7f8e\u5143\u7b26\u53f7", "currency sign": "\u8d27\u5e01\u7b26\u53f7", "euro-currency sign": "\u6b27\u5143\u7b26\u53f7", "colon sign": "\u5192\u53f7", "cruzeiro sign": "\u514b\u9c81\u8d5b\u7f57\u5e01\u7b26\u53f7", "french franc sign": "\u6cd5\u90ce\u7b26\u53f7", "lira sign": "\u91cc\u62c9\u7b26\u53f7", "mill sign": "\u5bc6\u5c14\u7b26\u53f7", "naira sign": "\u5948\u62c9\u7b26\u53f7", "peseta sign": "\u6bd4\u585e\u5854\u7b26\u53f7", "rupee sign": "\u5362\u6bd4\u7b26\u53f7", "won sign": "\u97e9\u5143\u7b26\u53f7", "new sheqel sign": "\u65b0\u8c22\u514b\u5c14\u7b26\u53f7", "dong sign": "\u8d8a\u5357\u76fe\u7b26\u53f7", "kip sign": "\u8001\u631d\u57fa\u666e\u7b26\u53f7", "tugrik sign": "\u56fe\u683c\u91cc\u514b\u7b26\u53f7", "drachma sign": "\u5fb7\u62c9\u514b\u9a6c\u7b26\u53f7", "german penny symbol": "\u5fb7\u56fd\u4fbf\u58eb\u7b26\u53f7", "peso sign": "\u6bd4\u7d22\u7b26\u53f7", "guarani sign": "\u74dc\u62c9\u5c3c\u7b26\u53f7", "austral sign": "\u6fb3\u5143\u7b26\u53f7", "hryvnia sign": "\u683c\u91cc\u592b\u5c3c\u4e9a\u7b26\u53f7", "cedi sign": "\u585e\u5730\u7b26\u53f7", "livre tournois sign": "\u91cc\u5f17\u5f17\u5c14\u7b26\u53f7", "spesmilo sign": "spesmilo\u7b26\u53f7", "tenge sign": "\u575a\u6208\u7b26\u53f7", "indian rupee sign": "\u5370\u5ea6\u5362\u6bd4", "turkish lira sign": "\u571f\u8033\u5176\u91cc\u62c9", "nordic mark sign": "\u5317\u6b27\u9a6c\u514b", "manat sign": "\u9a6c\u7eb3\u7279\u7b26\u53f7", "ruble sign": "\u5362\u5e03\u7b26\u53f7", "yen character": "\u65e5\u5143\u5b57\u6837", "yuan character": "\u4eba\u6c11\u5e01\u5143\u5b57\u6837", "yuan character, in hong kong and taiwan": "\u5143\u5b57\u6837\uff08\u6e2f\u53f0\u5730\u533a\uff09", "yen\/yuan character variant one": "\u5143\u5b57\u6837\uff08\u5927\u5199\uff09", "Loading emoticons...": "\u52a0\u8f7d\u8868\u60c5\u7b26\u53f7...", "Could not load emoticons": "\u4e0d\u80fd\u52a0\u8f7d\u8868\u60c5\u7b26\u53f7", "People": "\u4eba\u7c7b", "Animals and Nature": "\u52a8\u7269\u548c\u81ea\u7136", "Food and Drink": "\u98df\u7269\u548c\u996e\u54c1", "Activity": "\u6d3b\u52a8", "Travel and Places": "\u65c5\u6e38\u548c\u5730\u70b9", "Objects": "\u7269\u4ef6", "Flags": "\u65d7\u5e1c", "Characters": "\u5b57\u7b26", "Characters (no spaces)": "\u5b57\u7b26(\u65e0\u7a7a\u683c)", "{0} characters": "{0} \u4e2a\u5b57\u7b26", "Error: Form submit field collision.": "\u9519\u8bef: \u8868\u5355\u63d0\u4ea4\u5b57\u6bb5\u51b2\u7a81\u3002", "Error: No form element found.": "\u9519\u8bef: \u6ca1\u6709\u8868\u5355\u63a7\u4ef6\u3002", "Update": "\u66f4\u65b0", "Color swatch": "\u989c\u8272\u6837\u672c", "Turquoise": "\u9752\u7eff\u8272", "Green": "\u7eff\u8272", "Blue": "\u84dd\u8272", "Purple": "\u7d2b\u8272", "Navy Blue": "\u6d77\u519b\u84dd", "Dark Turquoise": "\u6df1\u84dd\u7eff\u8272", "Dark Green": "\u6df1\u7eff\u8272", "Medium Blue": "\u4e2d\u84dd\u8272", "Medium Purple": "\u4e2d\u7d2b\u8272", "Midnight Blue": "\u6df1\u84dd\u8272", "Yellow": "\u9ec4\u8272", "Orange": "\u6a59\u8272", "Red": "\u7ea2\u8272", "Light Gray": "\u6d45\u7070\u8272", "Gray": "\u7070\u8272", "Dark Yellow": "\u6697\u9ec4\u8272", "Dark Orange": "\u6df1\u6a59\u8272", "Dark Red": "\u6df1\u7ea2\u8272", "Medium Gray": "\u4e2d\u7070\u8272", "Dark Gray": "\u6df1\u7070\u8272", "Light Green": "\u6d45\u7eff\u8272", "Light Yellow": "\u6d45\u9ec4\u8272", "Light Red": "\u6d45\u7ea2\u8272", "Light Purple": "\u6d45\u7d2b\u8272", "Light Blue": "\u6d45\u84dd\u8272", "Dark Purple": "\u6df1\u7d2b\u8272", "Dark Blue": "\u6df1\u84dd\u8272", "Black": "\u9ed1\u8272", "White": "\u767d\u8272", "Switch to or from fullscreen mode": "\u5207\u6362\u5168\u5c4f\u6a21\u5f0f", "Open help dialog": "\u6253\u5f00\u5e2e\u52a9\u5bf9\u8bdd\u6846", "history": "\u5386\u53f2", "styles": "\u6837\u5f0f", "formatting": "\u683c\u5f0f\u5316", "alignment": "\u5bf9\u9f50", "indentation": "\u7f29\u8fdb", "permanent pen": "\u8bb0\u53f7\u7b14", "comments": "\u5907\u6ce8", "Format Painter": "\u683c\u5f0f\u5237", "Insert\/edit iframe": "\u63d2\u5165\/\u7f16\u8f91\u6846\u67b6", "Capitalization": "\u5927\u5199", "lowercase": "\u5c0f\u5199", "UPPERCASE": "\u5927\u5199", "Title Case": "\u9996\u5b57\u6bcd\u5927\u5199", "Permanent Pen Properties": "\u6c38\u4e45\u7b14\u5c5e\u6027", "Permanent pen properties...": "\u6c38\u4e45\u7b14\u5c5e\u6027...", "Font": "\u5b57\u4f53", "Size": "\u5b57\u53f7", "More...": "\u66f4\u591a...", "Spellcheck Language": "\u62fc\u5199\u68c0\u67e5\u8bed\u8a00", "Select...": "\u9009\u62e9...", "Preferences": "\u9996\u9009\u9879", "Yes": "\u662f", "No": "\u5426", "Keyboard Navigation": "\u952e\u76d8\u6307\u5f15", "Version": "\u7248\u672c", "Anchor": "\u951a\u70b9", "Special character": "\u7279\u6b8a\u7b26\u53f7", "Code sample": "\u4ee3\u7801\u793a\u4f8b", "Color": "\u989c\u8272", "Emoticons": "\u8868\u60c5", "Document properties": "\u6587\u6863\u5c5e\u6027", "Image": "\u56fe\u7247", "Insert link": "\u63d2\u5165\u94fe\u63a5", "Target": "\u6253\u5f00\u65b9\u5f0f", "Link": "\u94fe\u63a5", "Poster": "\u5c01\u9762", "Media": "\u5a92\u4f53", "Print": "\u6253\u5370", "Prev": "\u4e0a\u4e00\u4e2a", "Find and replace": "\u67e5\u627e\u548c\u66ff\u6362", "Whole words": "\u5168\u5b57\u5339\u914d", "Spellcheck": "\u62fc\u5199\u68c0\u67e5", "Caption": "\u6807\u9898", "Insert template": "\u63d2\u5165\u6a21\u677f" }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/tinymce/langs/zh_TW.js ================================================ tinymce.addI18n('zh_TW',{ "Redo": "\u91cd\u505a", "Undo": "\u64a4\u92b7", "Cut": "\u526a\u4e0b", "Copy": "\u8907\u88fd", "Paste": "\u8cbc\u4e0a", "Select all": "\u5168\u9078", "New document": "\u65b0\u6587\u4ef6", "Ok": "\u78ba\u5b9a", "Cancel": "\u53d6\u6d88", "Visual aids": "\u5c0f\u5e6b\u624b", "Bold": "\u7c97\u9ad4", "Italic": "\u659c\u9ad4", "Underline": "\u4e0b\u5283\u7dda", "Strikethrough": "\u522a\u9664\u7dda", "Superscript": "\u4e0a\u6a19", "Subscript": "\u4e0b\u6a19", "Clear formatting": "\u6e05\u9664\u683c\u5f0f", "Align left": "\u5de6\u908a\u5c0d\u9f4a", "Align center": "\u4e2d\u9593\u5c0d\u9f4a", "Align right": "\u53f3\u908a\u5c0d\u9f4a", "Justify": "\u5de6\u53f3\u5c0d\u9f4a", "Bullet list": "\u9805\u76ee\u6e05\u55ae", "Numbered list": "\u6578\u5b57\u6e05\u55ae", "Decrease indent": "\u6e1b\u5c11\u7e2e\u6392", "Increase indent": "\u589e\u52a0\u7e2e\u6392", "Close": "\u95dc\u9589", "Formats": "\u683c\u5f0f", "Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u60a8\u7684\u700f\u89bd\u5668\u4e0d\u652f\u63f4\u5b58\u53d6\u526a\u8cbc\u7c3f\uff0c\u53ef\u4ee5\u4f7f\u7528\u5feb\u901f\u9375 Ctrl + X\/C\/V \u4ee3\u66ff\u526a\u4e0b\u3001\u8907\u88fd\u8207\u8cbc\u4e0a\u3002", "Headers": "\u6a19\u984c", "Header 1": "\u6a19\u984c 1", "Header 2": "\u6a19\u984c 2", "Header 3": "\u6a19\u984c 3", "Header 4": "\u6a19\u984c 4", "Header 5": "\u6a19\u984c 5", "Header 6": "\u6a19\u984c 6", "Headings": "\u6a19\u984c", "Heading 1": "\u6a19\u984c1", "Heading 2": "\u6a19\u984c2", "Heading 3": "\u6a19\u984c3", "Heading 4": "\u6a19\u984c4", "Heading 5": "\u6a19\u984c5", "Heading 6": "\u6a19\u984c6", "Preformatted": "\u9810\u5148\u683c\u5f0f\u5316\u7684", "Div": "Div", "Pre": "Pre", "Code": "\u4ee3\u78bc", "Paragraph": "\u6bb5\u843d", "Blockquote": "\u5f15\u6587\u5340\u584a", "Inline": "\u5167\u806f", "Blocks": "\u57fa\u584a", "Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u76ee\u524d\u5c07\u4ee5\u7d14\u6587\u5b57\u7684\u6a21\u5f0f\u8cbc\u4e0a\uff0c\u60a8\u53ef\u4ee5\u518d\u9ede\u9078\u4e00\u6b21\u53d6\u6d88\u3002", "Fonts": "\u5b57\u578b", "Font Sizes": "\u5b57\u578b\u5927\u5c0f", "Class": "\u985e\u578b", "Browse for an image": "\u5f9e\u5716\u7247\u4e2d\u700f\u89bd", "OR": "\u6216", "Drop an image here": "\u62d6\u66f3\u5716\u7247\u81f3\u6b64", "Upload": "\u4e0a\u50b3", "Block": "\u5340\u584a", "Align": "\u5c0d\u9f4a", "Default": "\u9810\u8a2d", "Circle": "\u7a7a\u5fc3\u5713", "Disc": "\u5be6\u5fc3\u5713", "Square": "\u6b63\u65b9\u5f62", "Lower Alpha": "\u5c0f\u5beb\u82f1\u6587\u5b57\u6bcd", "Lower Greek": "\u5e0c\u81d8\u5b57\u6bcd", "Lower Roman": "\u5c0f\u5beb\u7f85\u99ac\u6578\u5b57", "Upper Alpha": "\u5927\u5beb\u82f1\u6587\u5b57\u6bcd", "Upper Roman": "\u5927\u5beb\u7f85\u99ac\u6578\u5b57", "Anchor...": "\u9328\u9ede...", "Name": "\u540d\u7a31", "Id": "Id", "Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Id\u61c9\u4ee5\u5b57\u6bcd\u958b\u982d\uff0c\u5f8c\u9762\u63a5\u8457\u5b57\u6bcd\uff0c\u6578\u5b57\uff0c\u7834\u6298\u865f\uff0c\u9ede\u6578\uff0c\u5192\u865f\u6216\u4e0b\u5283\u7dda\u3002", "You have unsaved changes are you sure you want to navigate away?": "\u7de8\u8f2f\u5c1a\u672a\u88ab\u5132\u5b58\uff0c\u4f60\u78ba\u5b9a\u8981\u96e2\u958b\uff1f", "Restore last draft": "\u8f09\u5165\u4e0a\u4e00\u6b21\u7de8\u8f2f\u7684\u8349\u7a3f", "Special character...": "\u7279\u6b8a\u5b57\u5143......", "Source code": "\u539f\u59cb\u78bc", "Insert\/Edit code sample": "\u63d2\u5165\/\u7de8\u8f2f \u7a0b\u5f0f\u78bc\u7bc4\u4f8b", "Language": "\u8a9e\u8a00", "Code sample...": "\u7a0b\u5f0f\u78bc\u7bc4\u4f8b...", "Color Picker": "\u9078\u8272\u5668", "R": "\u7d05", "G": "\u7da0", "B": "\u85cd", "Left to right": "\u5f9e\u5de6\u5230\u53f3", "Right to left": "\u5f9e\u53f3\u5230\u5de6", "Emoticons...": "\u8868\u60c5\u7b26\u865f\u2026", "Metadata and Document Properties": "\u5f8c\u8a2d\u8cc7\u6599\u8207\u6587\u4ef6\u5c6c\u6027", "Title": "\u6a19\u984c", "Keywords": "\u95dc\u9375\u5b57", "Description": "\u63cf\u8ff0", "Robots": "\u6a5f\u5668\u4eba", "Author": "\u4f5c\u8005", "Encoding": "\u7de8\u78bc", "Fullscreen": "\u5168\u87a2\u5e55", "Action": "\u52d5\u4f5c", "Shortcut": "\u5feb\u901f\u9375", "Help": "\u5e6b\u52a9", "Address": "\u5730\u5740", "Focus to menubar": "\u8df3\u81f3\u9078\u55ae\u5217", "Focus to toolbar": "\u8df3\u81f3\u5de5\u5177\u5217", "Focus to element path": "\u8df3\u81f3HTML\u5143\u7d20\u5217", "Focus to contextual toolbar": "\u8df3\u81f3\u5feb\u6377\u9078\u55ae", "Insert link (if link plugin activated)": "\u65b0\u589e\u6377\u5f91 (\u6377\u5f91\u5916\u639b\u555f\u7528\u6642)", "Save (if save plugin activated)": "\u5132\u5b58 (\u5132\u5b58\u5916\u639b\u555f\u7528\u6642)", "Find (if searchreplace plugin activated)": "\u5c0b\u627e (\u5c0b\u627e\u53d6\u4ee3\u5916\u639b\u555f\u7528\u6642)", "Plugins installed ({0}):": "({0}) \u500b\u5916\u639b\u5df2\u5b89\u88dd\uff1a", "Premium plugins:": "\u52a0\u503c\u5916\u639b\uff1a", "Learn more...": "\u4e86\u89e3\u66f4\u591a...", "You are using {0}": "\u60a8\u6b63\u5728\u4f7f\u7528 {0}", "Plugins": "\u5916\u639b", "Handy Shortcuts": "\u5feb\u901f\u9375", "Horizontal line": "\u6c34\u5e73\u7dda", "Insert\/edit image": "\u63d2\u5165\/\u7de8\u8f2f \u5716\u7247", "Image description": "\u5716\u7247\u63cf\u8ff0", "Source": "\u5716\u7247\u7db2\u5740", "Dimensions": "\u5c3a\u5bf8", "Constrain proportions": "\u7b49\u6bd4\u4f8b\u7e2e\u653e", "General": "\u4e00\u822c", "Advanced": "\u9032\u968e", "Style": "\u6a23\u5f0f", "Vertical space": "\u9ad8\u5ea6", "Horizontal space": "\u5bec\u5ea6", "Border": "\u908a\u6846", "Insert image": "\u63d2\u5165\u5716\u7247", "Image...": "\u5716\u7247......", "Image list": "\u5716\u7247\u6e05\u55ae", "Rotate counterclockwise": "\u9006\u6642\u91dd\u65cb\u8f49", "Rotate clockwise": "\u9806\u6642\u91dd\u65cb\u8f49", "Flip vertically": "\u5782\u76f4\u7ffb\u8f49", "Flip horizontally": "\u6c34\u5e73\u7ffb\u8f49", "Edit image": "\u7de8\u8f2f\u5716\u7247", "Image options": "\u5716\u7247\u9078\u9805", "Zoom in": "\u653e\u5927", "Zoom out": "\u7e2e\u5c0f", "Crop": "\u88c1\u526a", "Resize": "\u8abf\u6574\u5927\u5c0f", "Orientation": "\u65b9\u5411", "Brightness": "\u4eae\u5ea6", "Sharpen": "\u92b3\u5316", "Contrast": "\u5c0d\u6bd4", "Color levels": "\u984f\u8272\u5c64\u6b21", "Gamma": "\u4f3d\u99ac\u503c", "Invert": "\u53cd\u8f49", "Apply": "\u61c9\u7528", "Back": "\u5f8c\u9000", "Insert date\/time": "\u63d2\u5165 \u65e5\u671f\/\u6642\u9593", "Date\/time": "\u65e5\u671f\/\u6642\u9593", "Insert\/Edit Link": "\u63d2\u5165\/\u7de8\u8f2f\u9023\u7d50", "Insert\/edit link": "\u63d2\u5165\/\u7de8\u8f2f\u9023\u7d50", "Text to display": "\u986f\u793a\u6587\u5b57", "Url": "\u7db2\u5740", "Open link in...": "\u958b\u555f\u9023\u7d50\u65bc...", "Current window": "\u76ee\u524d\u8996\u7a97", "None": "\u7121", "New window": "\u53e6\u958b\u8996\u7a97", "Remove link": "\u79fb\u9664\u9023\u7d50", "Anchors": "\u52a0\u5165\u9328\u9ede", "Link...": "\u9023\u7d50...", "Paste or type a link": "\u8cbc\u4e0a\u6216\u8f38\u5165\u9023\u7d50", "The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u4f60\u6240\u586b\u5beb\u7684URL\u70ba\u96fb\u5b50\u90f5\u4ef6\uff0c\u9700\u8981\u52a0\u4e0amailto:\u524d\u7db4\u55ce\uff1f", "The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\u4f60\u6240\u586b\u5beb\u7684URL\u5c6c\u65bc\u5916\u90e8\u93c8\u63a5\uff0c\u9700\u8981\u52a0\u4e0ahttp:\/\/:\u524d\u7db4\u55ce\uff1f", "Link list": "\u9023\u7d50\u6e05\u55ae", "Insert video": "\u63d2\u5165\u5f71\u97f3", "Insert\/edit video": "\u63d2\u4ef6\/\u7de8\u8f2f \u5f71\u97f3", "Insert\/edit media": "\u63d2\u5165\/\u7de8\u8f2f \u5a92\u9ad4", "Alternative source": "\u66ff\u4ee3\u5f71\u97f3", "Alternative source URL": "\u66ff\u4ee3\u4f86\u6e90URL", "Media poster (Image URL)": "\u5a92\u9ad4\u6d77\u5831\uff08\u5f71\u50cfImage URL\uff09", "Paste your embed code below:": "\u8acb\u5c07\u60a8\u7684\u5d4c\u5165\u5f0f\u7a0b\u5f0f\u78bc\u8cbc\u5728\u4e0b\u9762:", "Embed": "\u5d4c\u5165\u78bc", "Media...": "\u5a92\u9ad4...", "Nonbreaking space": "\u4e0d\u5206\u884c\u7684\u7a7a\u683c", "Page break": "\u5206\u9801", "Paste as text": "\u4ee5\u7d14\u6587\u5b57\u8cbc\u4e0a", "Preview": "\u9810\u89bd", "Print...": "\u5217\u5370...", "Save": "\u5132\u5b58", "Find": "\u641c\u5c0b", "Replace with": "\u66f4\u63db", "Replace": "\u66ff\u63db", "Replace all": "\u66ff\u63db\u5168\u90e8", "Previous": "\u4e0a\u4e00\u500b", "Next": "\u4e0b\u4e00\u500b", "Find and replace...": "\u5c0b\u627e\u53ca\u53d6\u4ee3...", "Could not find the specified string.": "\u7121\u6cd5\u67e5\u8a62\u5230\u6b64\u7279\u5b9a\u5b57\u4e32", "Match case": "\u76f8\u5339\u914d\u6848\u4ef6", "Find whole words only": "\u50c5\u627e\u51fa\u5b8c\u6574\u5b57\u532f", "Spell check": "\u62fc\u5beb\u6aa2\u67e5", "Ignore": "\u5ffd\u7565", "Ignore all": "\u5ffd\u7565\u6240\u6709", "Finish": "\u5b8c\u6210", "Add to Dictionary": "\u52a0\u5165\u5b57\u5178\u4e2d", "Insert table": "\u63d2\u5165\u8868\u683c", "Table properties": "\u8868\u683c\u5c6c\u6027", "Delete table": "\u522a\u9664\u8868\u683c", "Cell": "\u5132\u5b58\u683c", "Row": "\u5217", "Column": "\u884c", "Cell properties": "\u5132\u5b58\u683c\u5c6c\u6027", "Merge cells": "\u5408\u4f75\u5132\u5b58\u683c", "Split cell": "\u5206\u5272\u5132\u5b58\u683c", "Insert row before": "\u63d2\u5165\u5217\u5728...\u4e4b\u524d", "Insert row after": "\u63d2\u5165\u5217\u5728...\u4e4b\u5f8c", "Delete row": "\u522a\u9664\u5217", "Row properties": "\u5217\u5c6c\u6027", "Cut row": "\u526a\u4e0b\u5217", "Copy row": "\u8907\u88fd\u5217", "Paste row before": "\u8cbc\u4e0a\u5217\u5728...\u4e4b\u524d", "Paste row after": "\u8cbc\u4e0a\u5217\u5728...\u4e4b\u5f8c", "Insert column before": "\u63d2\u5165\u6b04\u4f4d\u5728...\u4e4b\u524d", "Insert column after": "\u63d2\u5165\u6b04\u4f4d\u5728...\u4e4b\u5f8c", "Delete column": "\u522a\u9664\u884c", "Cols": "\u6b04\u4f4d\u6bb5", "Rows": "\u5217", "Width": "\u5bec\u5ea6", "Height": "\u9ad8\u5ea6", "Cell spacing": "\u5132\u5b58\u683c\u5f97\u9593\u8ddd", "Cell padding": "\u5132\u5b58\u683c\u7684\u908a\u8ddd", "Show caption": "\u986f\u793a\u6a19\u984c", "Left": "\u5de6\u908a", "Center": "\u4e2d\u9593", "Right": "\u53f3\u908a", "Cell type": "\u5132\u5b58\u683c\u7684\u985e\u578b", "Scope": "\u7bc4\u570d", "Alignment": "\u5c0d\u9f4a", "H Align": "\u6c34\u5e73\u4f4d\u7f6e", "V Align": "\u5782\u76f4\u4f4d\u7f6e", "Top": "\u7f6e\u9802", "Middle": "\u7f6e\u4e2d", "Bottom": "\u7f6e\u5e95", "Header cell": "\u6a19\u982d\u5132\u5b58\u683c", "Row group": "\u5217\u7fa4\u7d44", "Column group": "\u6b04\u4f4d\u7fa4\u7d44", "Row type": "\u884c\u7684\u985e\u578b", "Header": "\u6a19\u982d", "Body": "\u4e3b\u9ad4", "Footer": "\u9801\u5c3e", "Border color": "\u908a\u6846\u984f\u8272", "Insert template...": "\u63d2\u5165\u6a23\u7248...", "Templates": "\u6a23\u7248", "Template": "\u6a23\u677f", "Text color": "\u6587\u5b57\u984f\u8272", "Background color": "\u80cc\u666f\u984f\u8272", "Custom...": "\u81ea\u8a02", "Custom color": "\u81ea\u8a02\u984f\u8272", "No color": "No color", "Remove color": "\u79fb\u9664\u984f\u8272", "Table of Contents": "\u76ee\u9304", "Show blocks": "\u986f\u793a\u5340\u584a\u8cc7\u8a0a", "Show invisible characters": "\u986f\u793a\u96b1\u85cf\u5b57\u5143", "Word count": "\u8a08\u7b97\u5b57\u6578", "Count": "\u8a08\u7b97", "Document": "\u6587\u4ef6", "Selection": "\u9078\u9805", "Words": "\u5b57\u6578", "Words: {0}": "\u5b57\u6578\uff1a{0}", "{0} words": "{0} \u5b57\u5143", "File": "\u6a94\u6848", "Edit": "\u7de8\u8f2f", "Insert": "\u63d2\u5165", "View": "\u6aa2\u8996", "Format": "\u683c\u5f0f", "Table": "\u8868\u683c", "Tools": "\u5de5\u5177", "Powered by {0}": "\u7531 {0} \u63d0\u4f9b", "Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u8c50\u5bcc\u7684\u6587\u672c\u5340\u57df\u3002\u6309ALT-F9\u524d\u5f80\u4e3b\u9078\u55ae\u3002\u6309ALT-F10\u547c\u53eb\u5de5\u5177\u6b04\u3002\u6309ALT-0\u5c0b\u6c42\u5e6b\u52a9", "Image title": "\u5716\u7247\u6a19\u984c", "Border width": "\u6846\u7dda\u5bec\u5ea6", "Border style": "\u6846\u7dda\u6a23\u5f0f", "Error": "\u932f\u8aa4", "Warn": "\u8b66\u544a", "Valid": "\u6709\u6548", "To open the popup, press Shift+Enter": "\u8981\u958b\u555f\u5f48\u51fa\u8996\u7a97\uff0c\u8acb\u6309Shift+Enter", "Rich Text Area. Press ALT-0 for help.": "\u5bcc\u6587\u672c\u5340\u57df\u3002\u8acb\u6309ALT-0\u5c0b\u6c42\u5354\u52a9\u3002", "System Font": "\u7cfb\u7d71\u5b57\u578b", "Failed to upload image: {0}": "\u7121\u6cd5\u4e0a\u50b3\u5f71\u50cf\uff1a{0}", "Failed to load plugin: {0} from url {1}": "\u7121\u6cd5\u4e0a\u50b3\u63d2\u4ef6\uff1a{0}\u81eaurl{1}", "Failed to load plugin url: {0}": "\u7121\u6cd5\u4e0a\u50b3\u63d2\u4ef6\uff1a{0}", "Failed to initialize plugin: {0}": "\u7121\u6cd5\u555f\u52d5\u63d2\u4ef6\uff1a{0}", "example": "\u7bc4\u4f8b", "Search": "\u641c\u7d22", "All": "\u5168\u90e8", "Currency": "\u8ca8\u5e63", "Text": "\u6587\u672c", "Quotations": "\u5f15\u7528", "Mathematical": "\u6578\u5b78", "Extended Latin": "\u62c9\u4e01\u5b57\u6bcd\u64f4\u5145", "Symbols": "\u7b26\u865f", "Arrows": "\u7bad\u982d", "User Defined": "\u4f7f\u7528\u8005\u5df2\u5b9a\u7fa9", "dollar sign": "\u7f8e\u5143\u7b26\u865f", "currency sign": "\u8ca8\u5e63\u7b26\u865f", "euro-currency sign": "\u6b50\u5143\u7b26\u865f", "colon sign": "\u79d1\u6717\u7b26\u865f", "cruzeiro sign": "\u514b\u9b6f\u8cfd\u7f85\u7b26\u865f", "french franc sign": "\u6cd5\u6717\u7b26\u865f", "lira sign": "\u91cc\u62c9\u7b26\u865f", "mill sign": "\u6587\u7b26\u865f", "naira sign": "\u5948\u62c9\u7b26\u865f", "peseta sign": "\u6bd4\u585e\u5854\u7b26\u865f", "rupee sign": "\u76e7\u6bd4\u7b26\u865f", "won sign": "\u97d3\u571c\u7b26\u865f", "new sheqel sign": "\u65b0\u8b1d\u514b\u723e\u7b26\u865f", "dong sign": "\u8d8a\u5357\u76fe\u7b26\u865f", "kip sign": "\u8001\u64be\u5e63\u7b26\u865f", "tugrik sign": "\u8499\u53e4\u5e63\u7b26\u865f", "drachma sign": "\u5fb7\u514b\u62c9\u99ac\u7b26\u865f", "german penny symbol": "\u5fb7\u570b\u5206\u7b26\u865f", "peso sign": "\u62ab\u7d22\u7b26\u865f", "guarani sign": "\u5df4\u62c9\u572d\u5e63\u7b26\u865f", "austral sign": "\u963f\u6839\u5ef7\u5e63\u7b26\u865f", "hryvnia sign": "\u70cf\u514b\u862d\u5e63\u7b26\u865f", "cedi sign": "\u8fe6\u7d0d\u5e63\u7b26\u865f", "livre tournois sign": "\u91cc\u5f17\u723e\u7b26\u865f", "spesmilo sign": "\u570b\u969b\u5e63\u7b26\u865f", "tenge sign": "\u54c8\u85a9\u514b\u5e63\u7b26\u865f", "indian rupee sign": "\u5370\u5ea6\u76e7\u6bd4\u7b26\u865f", "turkish lira sign": "\u571f\u8033\u5176\u91cc\u62c9\u7b26\u865f", "nordic mark sign": "\u5317\u6b50\u99ac\u514b\u7b26\u865f", "manat sign": "\u4e9e\u585e\u62dc\u7136\u5e63\u7b26\u865f", "ruble sign": "\u76e7\u5e03\u7b26\u865f", "yen character": "\u65e5\u5713\u7b26\u865f", "yuan character": "\u4eba\u6c11\u5e63\u7b26\u865f", "yuan character, in hong kong and taiwan": "\u6e2f\u5143\u8207\u53f0\u5e63\u7b26\u865f", "yen\/yuan character variant one": "\u65e5\u5713\/\u4eba\u6c11\u5e63\u7b26\u865f\u8b8a\u5316\u578b", "Loading emoticons...": "\u8f09\u5165\u8868\u60c5\u7b26\u865f\u2026", "Could not load emoticons": "\u7121\u6cd5\u8f09\u5165\u8868\u60c5\u7b26\u865f", "People": "\u4eba", "Animals and Nature": "\u52d5\u7269\u8207\u81ea\u7136", "Food and Drink": "\u98f2\u98df", "Activity": "\u6d3b\u52d5", "Travel and Places": "\u65c5\u884c\u8207\u5730\u9ede", "Objects": "\u7269\u4ef6", "Flags": "\u65d7\u6a19", "Characters": "\u5b57\u5143", "Characters (no spaces)": "\u5b57\u5143\uff08\u7121\u7a7a\u683c\uff09", "{0} characters": "{0}\u5b57\u5143", "Error: Form submit field collision.": "\u932f\u8aa4\uff1a\u8868\u683c\u905e\u4ea4\u6b04\u4f4d\u885d\u7a81\u3002", "Error: No form element found.": "\u932f\u8aa4\uff1a\u627e\u4e0d\u5230\u8868\u683c\u5143\u7d20\u3002", "Update": "\u66f4\u65b0", "Color swatch": "\u8272\u5f69\u6a23\u672c", "Turquoise": "\u571f\u8033\u5176\u85cd", "Green": "\u7da0\u8272", "Blue": "\u85cd\u8272", "Purple": "\u7d2b\u8272", "Navy Blue": "\u6df1\u85cd\u8272", "Dark Turquoise": "\u6df1\u571f\u8033\u5176\u85cd", "Dark Green": "\u6df1\u7da0\u8272", "Medium Blue": "\u4e2d\u85cd\u8272", "Medium Purple": "\u4e2d\u7d2b\u8272", "Midnight Blue": "\u9ed1\u85cd\u8272", "Yellow": "\u9ec3\u8272", "Orange": "\u6a59\u8272", "Red": "\u7d05\u8272", "Light Gray": "\u6dfa\u7070\u8272", "Gray": "\u7070\u8272", "Dark Yellow": "\u6df1\u9ec3\u8272", "Dark Orange": "\u6df1\u6a59\u8272", "Dark Red": "\u6697\u7d05\u8272", "Medium Gray": "\u4e2d\u7070\u8272", "Dark Gray": "\u6df1\u7070\u8272", "Light Green": "\u6de1\u7da0\u8272", "Light Yellow": "\u6dfa\u9ec3\u8272", "Light Red": "\u6dfa\u7d05\u8272", "Light Purple": "\u6dfa\u7d2b\u8272", "Light Blue": "\u6dfa\u85cd\u8272", "Dark Purple": "\u6df1\u7d2b\u8272", "Dark Blue": "\u6df1\u85cd\u8272", "Black": "\u9ed1\u8272", "White": "\u767d\u8272", "Switch to or from fullscreen mode": "\u8f49\u63db\u81ea\/\u81f3\u5168\u87a2\u5e55\u6a21\u5f0f", "Open help dialog": "\u958b\u555f\u5354\u52a9\u5c0d\u8a71", "history": "\u6b77\u53f2", "styles": "\u6a23\u5f0f", "formatting": "\u683c\u5f0f", "alignment": "\u5c0d\u9f4a", "indentation": "\u7e2e\u6392", "permanent pen": "\u6c38\u4e45\u6027\u7b46", "comments": "\u8a3b\u89e3", "Format Painter": "\u8907\u88fd\u683c\u5f0f", "Insert\/edit iframe": "\u63d2\u5165\/\u7de8\u8f2fiframe", "Capitalization": "\u5927\u5beb", "lowercase": "\u5c0f\u5beb", "UPPERCASE": "\u5927\u5beb", "Title Case": "\u5b57\u9996\u5927\u5beb", "Permanent Pen Properties": "\u6c38\u4e45\u6a19\u8a18\u5c6c\u6027", "Permanent pen properties...": "\u6c38\u4e45\u6a19\u8a18\u5c6c\u6027......", "Font": "\u5b57\u578b", "Size": "\u5b57\u5f62\u5927\u5c0f", "More...": "\u66f4\u591a\u8cc7\u8a0a......", "Spellcheck Language": "\u62fc\u5beb\u8a9e\u8a00", "Select...": "\u9078\u64c7......", "Preferences": "\u9996\u9078\u9805", "Yes": "\u662f", "No": "\u5426", "Keyboard Navigation": "\u9375\u76e4\u5c0e\u822a", "Version": "\u7248\u672c", "Anchor": "\u52a0\u5165\u9328\u9ede", "Special character": "\u7279\u6b8a\u5b57\u5143", "Code sample": "\u7a0b\u5f0f\u78bc\u7bc4\u4f8b", "Color": "\u984f\u8272", "Emoticons": "\u8868\u60c5", "Document properties": "\u6587\u4ef6\u7684\u5c6c\u6027", "Image": "\u5716\u7247", "Insert link": "\u63d2\u5165\u9023\u7d50", "Target": "\u958b\u555f\u65b9\u5f0f", "Link": "\u9023\u7d50", "Poster": "\u9810\u89bd\u5716\u7247", "Media": "\u5a92\u9ad4", "Print": "\u5217\u5370", "Prev": "\u4e0a\u4e00\u500b", "Find and replace": "\u5c0b\u627e\u53ca\u53d6\u4ee3", "Whole words": "\u6574\u500b\u55ae\u5b57", "Spellcheck": "\u62fc\u5b57\u6aa2\u67e5", "Caption": "\u8868\u683c\u6a19\u984c", "Insert template": "\u63d2\u5165\u6a23\u7248" }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/tinymce/license.txt ================================================ GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. <one line to give the library's name and a brief idea of what it does.> Copyright (C) <year> <name of author> This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. <signature of Ty Coon>, 1 April 1990 Ty Coon, President of Vice That's all there is to it! ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/tinymce/plugins/emoticons/js/emojis.js ================================================ // NOTE: Source: npm package: emojilib, file:emojis.json window.tinymce.Resource.add("tinymce.plugins.emoticons", { grinning: { keywords: [ "face", "smile", "happy", "joy", ":D", "grin" ], "char": "\ud83d\ude00", fitzpatrick_scale: false, category: "people" }, grimacing: { keywords: [ "face", "grimace", "teeth" ], "char": "\ud83d\ude2c", fitzpatrick_scale: false, category: "people" }, grin: { keywords: [ "face", "happy", "smile", "joy", "kawaii" ], "char": "\ud83d\ude01", fitzpatrick_scale: false, category: "people" }, joy: { keywords: [ "face", "cry", "tears", "weep", "happy", "happytears", "haha" ], "char": "\ud83d\ude02", fitzpatrick_scale: false, category: "people" }, rofl: { keywords: [ "face", "rolling", "floor", "laughing", "lol", "haha" ], "char": "\ud83e\udd23", fitzpatrick_scale: false, category: "people" }, smiley: { keywords: [ "face", "happy", "joy", "haha", ":D", ":)", "smile", "funny" ], "char": "\ud83d\ude03", fitzpatrick_scale: false, category: "people" }, smile: { keywords: [ "face", "happy", "joy", "funny", "haha", "laugh", "like", ":D", ":)" ], "char": "\ud83d\ude04", fitzpatrick_scale: false, category: "people" }, sweat_smile: { keywords: [ "face", "hot", "happy", "laugh", "sweat", "smile", "relief" ], "char": "\ud83d\ude05", fitzpatrick_scale: false, category: "people" }, laughing: { keywords: [ "happy", "joy", "lol", "satisfied", "haha", "face", "glad", "XD", "laugh" ], "char": "\ud83d\ude06", fitzpatrick_scale: false, category: "people" }, innocent: { keywords: [ "face", "angel", "heaven", "halo" ], "char": "\ud83d\ude07", fitzpatrick_scale: false, category: "people" }, wink: { keywords: [ "face", "happy", "mischievous", "secret", ";)", "smile", "eye" ], "char": "\ud83d\ude09", fitzpatrick_scale: false, category: "people" }, blush: { keywords: [ "face", "smile", "happy", "flushed", "crush", "embarrassed", "shy", "joy" ], "char": "\ud83d\ude0a", fitzpatrick_scale: false, category: "people" }, slightly_smiling_face: { keywords: [ "face", "smile" ], "char": "\ud83d\ude42", fitzpatrick_scale: false, category: "people" }, upside_down_face: { keywords: [ "face", "flipped", "silly", "smile" ], "char": "\ud83d\ude43", fitzpatrick_scale: false, category: "people" }, relaxed: { keywords: [ "face", "blush", "massage", "happiness" ], "char": "\u263a\ufe0f", fitzpatrick_scale: false, category: "people" }, yum: { keywords: [ "happy", "joy", "tongue", "smile", "face", "silly", "yummy", "nom", "delicious", "savouring" ], "char": "\ud83d\ude0b", fitzpatrick_scale: false, category: "people" }, relieved: { keywords: [ "face", "relaxed", "phew", "massage", "happiness" ], "char": "\ud83d\ude0c", fitzpatrick_scale: false, category: "people" }, heart_eyes: { keywords: [ "face", "love", "like", "affection", "valentines", "infatuation", "crush", "heart" ], "char": "\ud83d\ude0d", fitzpatrick_scale: false, category: "people" }, kissing_heart: { keywords: [ "face", "love", "like", "affection", "valentines", "infatuation", "kiss" ], "char": "\ud83d\ude18", fitzpatrick_scale: false, category: "people" }, kissing: { keywords: [ "love", "like", "face", "3", "valentines", "infatuation", "kiss" ], "char": "\ud83d\ude17", fitzpatrick_scale: false, category: "people" }, kissing_smiling_eyes: { keywords: [ "face", "affection", "valentines", "infatuation", "kiss" ], "char": "\ud83d\ude19", fitzpatrick_scale: false, category: "people" }, kissing_closed_eyes: { keywords: [ "face", "love", "like", "affection", "valentines", "infatuation", "kiss" ], "char": "\ud83d\ude1a", fitzpatrick_scale: false, category: "people" }, stuck_out_tongue_winking_eye: { keywords: [ "face", "prank", "childish", "playful", "mischievous", "smile", "wink", "tongue" ], "char": "\ud83d\ude1c", fitzpatrick_scale: false, category: "people" }, zany: { keywords: [ "face", "goofy", "crazy" ], "char": "\ud83e\udd2a", fitzpatrick_scale: false, category: "people" }, raised_eyebrow: { keywords: [ "face", "distrust", "scepticism", "disapproval", "disbelief", "surprise" ], "char": "\ud83e\udd28", fitzpatrick_scale: false, category: "people" }, monocle: { keywords: [ "face", "stuffy", "wealthy" ], "char": "\ud83e\uddd0", fitzpatrick_scale: false, category: "people" }, stuck_out_tongue_closed_eyes: { keywords: [ "face", "prank", "playful", "mischievous", "smile", "tongue" ], "char": "\ud83d\ude1d", fitzpatrick_scale: false, category: "people" }, stuck_out_tongue: { keywords: [ "face", "prank", "childish", "playful", "mischievous", "smile", "tongue" ], "char": "\ud83d\ude1b", fitzpatrick_scale: false, category: "people" }, money_mouth_face: { keywords: [ "face", "rich", "dollar", "money" ], "char": "\ud83e\udd11", fitzpatrick_scale: false, category: "people" }, nerd_face: { keywords: [ "face", "nerdy", "geek", "dork" ], "char": "\ud83e\udd13", fitzpatrick_scale: false, category: "people" }, sunglasses: { keywords: [ "face", "cool", "smile", "summer", "beach", "sunglass" ], "char": "\ud83d\ude0e", fitzpatrick_scale: false, category: "people" }, star_struck: { keywords: [ "face", "smile", "starry", "eyes", "grinning" ], "char": "\ud83e\udd29", fitzpatrick_scale: false, category: "people" }, clown_face: { keywords: [ "face" ], "char": "\ud83e\udd21", fitzpatrick_scale: false, category: "people" }, cowboy_hat_face: { keywords: [ "face", "cowgirl", "hat" ], "char": "\ud83e\udd20", fitzpatrick_scale: false, category: "people" }, hugs: { keywords: [ "face", "smile", "hug" ], "char": "\ud83e\udd17", fitzpatrick_scale: false, category: "people" }, smirk: { keywords: [ "face", "smile", "mean", "prank", "smug", "sarcasm" ], "char": "\ud83d\ude0f", fitzpatrick_scale: false, category: "people" }, no_mouth: { keywords: [ "face", "hellokitty" ], "char": "\ud83d\ude36", fitzpatrick_scale: false, category: "people" }, neutral_face: { keywords: [ "indifference", "meh", ":|", "neutral" ], "char": "\ud83d\ude10", fitzpatrick_scale: false, category: "people" }, expressionless: { keywords: [ "face", "indifferent", "-_-", "meh", "deadpan" ], "char": "\ud83d\ude11", fitzpatrick_scale: false, category: "people" }, unamused: { keywords: [ "indifference", "bored", "straight face", "serious", "sarcasm", "unimpressed", "skeptical", "dubious", "side_eye" ], "char": "\ud83d\ude12", fitzpatrick_scale: false, category: "people" }, roll_eyes: { keywords: [ "face", "eyeroll", "frustrated" ], "char": "\ud83d\ude44", fitzpatrick_scale: false, category: "people" }, thinking: { keywords: [ "face", "hmmm", "think", "consider" ], "char": "\ud83e\udd14", fitzpatrick_scale: false, category: "people" }, lying_face: { keywords: [ "face", "lie", "pinocchio" ], "char": "\ud83e\udd25", fitzpatrick_scale: false, category: "people" }, hand_over_mouth: { keywords: [ "face", "whoops", "shock", "surprise" ], "char": "\ud83e\udd2d", fitzpatrick_scale: false, category: "people" }, shushing: { keywords: [ "face", "quiet", "shhh" ], "char": "\ud83e\udd2b", fitzpatrick_scale: false, category: "people" }, symbols_over_mouth: { keywords: [ "face", "swearing", "cursing", "cussing", "profanity", "expletive" ], "char": "\ud83e\udd2c", fitzpatrick_scale: false, category: "people" }, exploding_head: { keywords: [ "face", "shocked", "mind", "blown" ], "char": "\ud83e\udd2f", fitzpatrick_scale: false, category: "people" }, flushed: { keywords: [ "face", "blush", "shy", "flattered" ], "char": "\ud83d\ude33", fitzpatrick_scale: false, category: "people" }, disappointed: { keywords: [ "face", "sad", "upset", "depressed", ":(" ], "char": "\ud83d\ude1e", fitzpatrick_scale: false, category: "people" }, worried: { keywords: [ "face", "concern", "nervous", ":(" ], "char": "\ud83d\ude1f", fitzpatrick_scale: false, category: "people" }, angry: { keywords: [ "mad", "face", "annoyed", "frustrated" ], "char": "\ud83d\ude20", fitzpatrick_scale: false, category: "people" }, rage: { keywords: [ "angry", "mad", "hate", "despise" ], "char": "\ud83d\ude21", fitzpatrick_scale: false, category: "people" }, pensive: { keywords: [ "face", "sad", "depressed", "upset" ], "char": "\ud83d\ude14", fitzpatrick_scale: false, category: "people" }, confused: { keywords: [ "face", "indifference", "huh", "weird", "hmmm", ":/" ], "char": "\ud83d\ude15", fitzpatrick_scale: false, category: "people" }, slightly_frowning_face: { keywords: [ "face", "frowning", "disappointed", "sad", "upset" ], "char": "\ud83d\ude41", fitzpatrick_scale: false, category: "people" }, frowning_face: { keywords: [ "face", "sad", "upset", "frown" ], "char": "\u2639", fitzpatrick_scale: false, category: "people" }, persevere: { keywords: [ "face", "sick", "no", "upset", "oops" ], "char": "\ud83d\ude23", fitzpatrick_scale: false, category: "people" }, confounded: { keywords: [ "face", "confused", "sick", "unwell", "oops", ":S" ], "char": "\ud83d\ude16", fitzpatrick_scale: false, category: "people" }, tired_face: { keywords: [ "sick", "whine", "upset", "frustrated" ], "char": "\ud83d\ude2b", fitzpatrick_scale: false, category: "people" }, weary: { keywords: [ "face", "tired", "sleepy", "sad", "frustrated", "upset" ], "char": "\ud83d\ude29", fitzpatrick_scale: false, category: "people" }, triumph: { keywords: [ "face", "gas", "phew", "proud", "pride" ], "char": "\ud83d\ude24", fitzpatrick_scale: false, category: "people" }, open_mouth: { keywords: [ "face", "surprise", "impressed", "wow", "whoa", ":O" ], "char": "\ud83d\ude2e", fitzpatrick_scale: false, category: "people" }, scream: { keywords: [ "face", "munch", "scared", "omg" ], "char": "\ud83d\ude31", fitzpatrick_scale: false, category: "people" }, fearful: { keywords: [ "face", "scared", "terrified", "nervous", "oops", "huh" ], "char": "\ud83d\ude28", fitzpatrick_scale: false, category: "people" }, cold_sweat: { keywords: [ "face", "nervous", "sweat" ], "char": "\ud83d\ude30", fitzpatrick_scale: false, category: "people" }, hushed: { keywords: [ "face", "woo", "shh" ], "char": "\ud83d\ude2f", fitzpatrick_scale: false, category: "people" }, frowning: { keywords: [ "face", "aw", "what" ], "char": "\ud83d\ude26", fitzpatrick_scale: false, category: "people" }, anguished: { keywords: [ "face", "stunned", "nervous" ], "char": "\ud83d\ude27", fitzpatrick_scale: false, category: "people" }, cry: { keywords: [ "face", "tears", "sad", "depressed", "upset", ":'(" ], "char": "\ud83d\ude22", fitzpatrick_scale: false, category: "people" }, disappointed_relieved: { keywords: [ "face", "phew", "sweat", "nervous" ], "char": "\ud83d\ude25", fitzpatrick_scale: false, category: "people" }, drooling_face: { keywords: [ "face" ], "char": "\ud83e\udd24", fitzpatrick_scale: false, category: "people" }, sleepy: { keywords: [ "face", "tired", "rest", "nap" ], "char": "\ud83d\ude2a", fitzpatrick_scale: false, category: "people" }, sweat: { keywords: [ "face", "hot", "sad", "tired", "exercise" ], "char": "\ud83d\ude13", fitzpatrick_scale: false, category: "people" }, sob: { keywords: [ "face", "cry", "tears", "sad", "upset", "depressed" ], "char": "\ud83d\ude2d", fitzpatrick_scale: false, category: "people" }, dizzy_face: { keywords: [ "spent", "unconscious", "xox", "dizzy" ], "char": "\ud83d\ude35", fitzpatrick_scale: false, category: "people" }, astonished: { keywords: [ "face", "xox", "surprised", "poisoned" ], "char": "\ud83d\ude32", fitzpatrick_scale: false, category: "people" }, zipper_mouth_face: { keywords: [ "face", "sealed", "zipper", "secret" ], "char": "\ud83e\udd10", fitzpatrick_scale: false, category: "people" }, nauseated_face: { keywords: [ "face", "vomit", "gross", "green", "sick", "throw up", "ill" ], "char": "\ud83e\udd22", fitzpatrick_scale: false, category: "people" }, sneezing_face: { keywords: [ "face", "gesundheit", "sneeze", "sick", "allergy" ], "char": "\ud83e\udd27", fitzpatrick_scale: false, category: "people" }, vomiting: { keywords: [ "face", "sick" ], "char": "\ud83e\udd2e", fitzpatrick_scale: false, category: "people" }, mask: { keywords: [ "face", "sick", "ill", "disease" ], "char": "\ud83d\ude37", fitzpatrick_scale: false, category: "people" }, face_with_thermometer: { keywords: [ "sick", "temperature", "thermometer", "cold", "fever" ], "char": "\ud83e\udd12", fitzpatrick_scale: false, category: "people" }, face_with_head_bandage: { keywords: [ "injured", "clumsy", "bandage", "hurt" ], "char": "\ud83e\udd15", fitzpatrick_scale: false, category: "people" }, sleeping: { keywords: [ "face", "tired", "sleepy", "night", "zzz" ], "char": "\ud83d\ude34", fitzpatrick_scale: false, category: "people" }, zzz: { keywords: [ "sleepy", "tired", "dream" ], "char": "\ud83d\udca4", fitzpatrick_scale: false, category: "people" }, poop: { keywords: [ "hankey", "shitface", "fail", "turd", "shit" ], "char": "\ud83d\udca9", fitzpatrick_scale: false, category: "people" }, smiling_imp: { keywords: [ "devil", "horns" ], "char": "\ud83d\ude08", fitzpatrick_scale: false, category: "people" }, imp: { keywords: [ "devil", "angry", "horns" ], "char": "\ud83d\udc7f", fitzpatrick_scale: false, category: "people" }, japanese_ogre: { keywords: [ "monster", "red", "mask", "halloween", "scary", "creepy", "devil", "demon", "japanese", "ogre" ], "char": "\ud83d\udc79", fitzpatrick_scale: false, category: "people" }, japanese_goblin: { keywords: [ "red", "evil", "mask", "monster", "scary", "creepy", "japanese", "goblin" ], "char": "\ud83d\udc7a", fitzpatrick_scale: false, category: "people" }, skull: { keywords: [ "dead", "skeleton", "creepy", "death" ], "char": "\ud83d\udc80", fitzpatrick_scale: false, category: "people" }, ghost: { keywords: [ "halloween", "spooky", "scary" ], "char": "\ud83d\udc7b", fitzpatrick_scale: false, category: "people" }, alien: { keywords: [ "UFO", "paul", "weird", "outer_space" ], "char": "\ud83d\udc7d", fitzpatrick_scale: false, category: "people" }, robot: { keywords: [ "computer", "machine", "bot" ], "char": "\ud83e\udd16", fitzpatrick_scale: false, category: "people" }, smiley_cat: { keywords: [ "animal", "cats", "happy", "smile" ], "char": "\ud83d\ude3a", fitzpatrick_scale: false, category: "people" }, smile_cat: { keywords: [ "animal", "cats", "smile" ], "char": "\ud83d\ude38", fitzpatrick_scale: false, category: "people" }, joy_cat: { keywords: [ "animal", "cats", "haha", "happy", "tears" ], "char": "\ud83d\ude39", fitzpatrick_scale: false, category: "people" }, heart_eyes_cat: { keywords: [ "animal", "love", "like", "affection", "cats", "valentines", "heart" ], "char": "\ud83d\ude3b", fitzpatrick_scale: false, category: "people" }, smirk_cat: { keywords: [ "animal", "cats", "smirk" ], "char": "\ud83d\ude3c", fitzpatrick_scale: false, category: "people" }, kissing_cat: { keywords: [ "animal", "cats", "kiss" ], "char": "\ud83d\ude3d", fitzpatrick_scale: false, category: "people" }, scream_cat: { keywords: [ "animal", "cats", "munch", "scared", "scream" ], "char": "\ud83d\ude40", fitzpatrick_scale: false, category: "people" }, crying_cat_face: { keywords: [ "animal", "tears", "weep", "sad", "cats", "upset", "cry" ], "char": "\ud83d\ude3f", fitzpatrick_scale: false, category: "people" }, pouting_cat: { keywords: [ "animal", "cats" ], "char": "\ud83d\ude3e", fitzpatrick_scale: false, category: "people" }, palms_up: { keywords: [ "hands", "gesture", "cupped", "prayer" ], "char": "\ud83e\udd32", fitzpatrick_scale: true, category: "people" }, raised_hands: { keywords: [ "gesture", "hooray", "yea", "celebration", "hands" ], "char": "\ud83d\ude4c", fitzpatrick_scale: true, category: "people" }, clap: { keywords: [ "hands", "praise", "applause", "congrats", "yay" ], "char": "\ud83d\udc4f", fitzpatrick_scale: true, category: "people" }, wave: { keywords: [ "hands", "gesture", "goodbye", "solong", "farewell", "hello", "hi", "palm" ], "char": "\ud83d\udc4b", fitzpatrick_scale: true, category: "people" }, call_me_hand: { keywords: [ "hands", "gesture" ], "char": "\ud83e\udd19", fitzpatrick_scale: true, category: "people" }, "+1": { keywords: [ "thumbsup", "yes", "awesome", "good", "agree", "accept", "cool", "hand", "like" ], "char": "\ud83d\udc4d", fitzpatrick_scale: true, category: "people" }, "-1": { keywords: [ "thumbsdown", "no", "dislike", "hand" ], "char": "\ud83d\udc4e", fitzpatrick_scale: true, category: "people" }, facepunch: { keywords: [ "angry", "violence", "fist", "hit", "attack", "hand" ], "char": "\ud83d\udc4a", fitzpatrick_scale: true, category: "people" }, fist: { keywords: [ "fingers", "hand", "grasp" ], "char": "\u270a", fitzpatrick_scale: true, category: "people" }, fist_left: { keywords: [ "hand", "fistbump" ], "char": "\ud83e\udd1b", fitzpatrick_scale: true, category: "people" }, fist_right: { keywords: [ "hand", "fistbump" ], "char": "\ud83e\udd1c", fitzpatrick_scale: true, category: "people" }, v: { keywords: [ "fingers", "ohyeah", "hand", "peace", "victory", "two" ], "char": "\u270c", fitzpatrick_scale: true, category: "people" }, ok_hand: { keywords: [ "fingers", "limbs", "perfect", "ok", "okay" ], "char": "\ud83d\udc4c", fitzpatrick_scale: true, category: "people" }, raised_hand: { keywords: [ "fingers", "stop", "highfive", "palm", "ban" ], "char": "\u270b", fitzpatrick_scale: true, category: "people" }, raised_back_of_hand: { keywords: [ "fingers", "raised", "backhand" ], "char": "\ud83e\udd1a", fitzpatrick_scale: true, category: "people" }, open_hands: { keywords: [ "fingers", "butterfly", "hands", "open" ], "char": "\ud83d\udc50", fitzpatrick_scale: true, category: "people" }, muscle: { keywords: [ "arm", "flex", "hand", "summer", "strong", "biceps" ], "char": "\ud83d\udcaa", fitzpatrick_scale: true, category: "people" }, pray: { keywords: [ "please", "hope", "wish", "namaste", "highfive" ], "char": "\ud83d\ude4f", fitzpatrick_scale: true, category: "people" }, handshake: { keywords: [ "agreement", "shake" ], "char": "\ud83e\udd1d", fitzpatrick_scale: false, category: "people" }, point_up: { keywords: [ "hand", "fingers", "direction", "up" ], "char": "\u261d", fitzpatrick_scale: true, category: "people" }, point_up_2: { keywords: [ "fingers", "hand", "direction", "up" ], "char": "\ud83d\udc46", fitzpatrick_scale: true, category: "people" }, point_down: { keywords: [ "fingers", "hand", "direction", "down" ], "char": "\ud83d\udc47", fitzpatrick_scale: true, category: "people" }, point_left: { keywords: [ "direction", "fingers", "hand", "left" ], "char": "\ud83d\udc48", fitzpatrick_scale: true, category: "people" }, point_right: { keywords: [ "fingers", "hand", "direction", "right" ], "char": "\ud83d\udc49", fitzpatrick_scale: true, category: "people" }, fu: { keywords: [ "hand", "fingers", "rude", "middle", "flipping" ], "char": "\ud83d\udd95", fitzpatrick_scale: true, category: "people" }, raised_hand_with_fingers_splayed: { keywords: [ "hand", "fingers", "palm" ], "char": "\ud83d\udd90", fitzpatrick_scale: true, category: "people" }, love_you: { keywords: [ "hand", "fingers", "gesture" ], "char": "\ud83e\udd1f", fitzpatrick_scale: true, category: "people" }, metal: { keywords: [ "hand", "fingers", "evil_eye", "sign_of_horns", "rock_on" ], "char": "\ud83e\udd18", fitzpatrick_scale: true, category: "people" }, crossed_fingers: { keywords: [ "good", "lucky" ], "char": "\ud83e\udd1e", fitzpatrick_scale: true, category: "people" }, vulcan_salute: { keywords: [ "hand", "fingers", "spock", "star trek" ], "char": "\ud83d\udd96", fitzpatrick_scale: true, category: "people" }, writing_hand: { keywords: [ "lower_left_ballpoint_pen", "stationery", "write", "compose" ], "char": "\u270d", fitzpatrick_scale: true, category: "people" }, selfie: { keywords: [ "camera", "phone" ], "char": "\ud83e\udd33", fitzpatrick_scale: true, category: "people" }, nail_care: { keywords: [ "beauty", "manicure", "finger", "fashion", "nail" ], "char": "\ud83d\udc85", fitzpatrick_scale: true, category: "people" }, lips: { keywords: [ "mouth", "kiss" ], "char": "\ud83d\udc44", fitzpatrick_scale: false, category: "people" }, tongue: { keywords: [ "mouth", "playful" ], "char": "\ud83d\udc45", fitzpatrick_scale: false, category: "people" }, ear: { keywords: [ "face", "hear", "sound", "listen" ], "char": "\ud83d\udc42", fitzpatrick_scale: true, category: "people" }, nose: { keywords: [ "smell", "sniff" ], "char": "\ud83d\udc43", fitzpatrick_scale: true, category: "people" }, eye: { keywords: [ "face", "look", "see", "watch", "stare" ], "char": "\ud83d\udc41", fitzpatrick_scale: false, category: "people" }, eyes: { keywords: [ "look", "watch", "stalk", "peek", "see" ], "char": "\ud83d\udc40", fitzpatrick_scale: false, category: "people" }, brain: { keywords: [ "smart", "intelligent" ], "char": "\ud83e\udde0", fitzpatrick_scale: false, category: "people" }, bust_in_silhouette: { keywords: [ "user", "person", "human" ], "char": "\ud83d\udc64", fitzpatrick_scale: false, category: "people" }, busts_in_silhouette: { keywords: [ "user", "person", "human", "group", "team" ], "char": "\ud83d\udc65", fitzpatrick_scale: false, category: "people" }, speaking_head: { keywords: [ "user", "person", "human", "sing", "say", "talk" ], "char": "\ud83d\udde3", fitzpatrick_scale: false, category: "people" }, baby: { keywords: [ "child", "boy", "girl", "toddler" ], "char": "\ud83d\udc76", fitzpatrick_scale: true, category: "people" }, child: { keywords: [ "gender-neutral", "young" ], "char": "\ud83e\uddd2", fitzpatrick_scale: true, category: "people" }, boy: { keywords: [ "man", "male", "guy", "teenager" ], "char": "\ud83d\udc66", fitzpatrick_scale: true, category: "people" }, girl: { keywords: [ "female", "woman", "teenager" ], "char": "\ud83d\udc67", fitzpatrick_scale: true, category: "people" }, adult: { keywords: [ "gender-neutral", "person" ], "char": "\ud83e\uddd1", fitzpatrick_scale: true, category: "people" }, man: { keywords: [ "mustache", "father", "dad", "guy", "classy", "sir", "moustache" ], "char": "\ud83d\udc68", fitzpatrick_scale: true, category: "people" }, woman: { keywords: [ "female", "girls", "lady" ], "char": "\ud83d\udc69", fitzpatrick_scale: true, category: "people" }, blonde_woman: { keywords: [ "woman", "female", "girl", "blonde", "person" ], "char": "\ud83d\udc71\u200d\u2640\ufe0f", fitzpatrick_scale: true, category: "people" }, blonde_man: { keywords: [ "man", "male", "boy", "blonde", "guy", "person" ], "char": "\ud83d\udc71", fitzpatrick_scale: true, category: "people" }, bearded_person: { keywords: [ "person", "bewhiskered" ], "char": "\ud83e\uddd4", fitzpatrick_scale: true, category: "people" }, older_adult: { keywords: [ "human", "elder", "senior", "gender-neutral" ], "char": "\ud83e\uddd3", fitzpatrick_scale: true, category: "people" }, older_man: { keywords: [ "human", "male", "men", "old", "elder", "senior" ], "char": "\ud83d\udc74", fitzpatrick_scale: true, category: "people" }, older_woman: { keywords: [ "human", "female", "women", "lady", "old", "elder", "senior" ], "char": "\ud83d\udc75", fitzpatrick_scale: true, category: "people" }, man_with_gua_pi_mao: { keywords: [ "male", "boy", "chinese" ], "char": "\ud83d\udc72", fitzpatrick_scale: true, category: "people" }, woman_with_headscarf: { keywords: [ "female", "hijab", "mantilla", "tichel" ], "char": "\ud83e\uddd5", fitzpatrick_scale: true, category: "people" }, woman_with_turban: { keywords: [ "female", "indian", "hinduism", "arabs", "woman" ], "char": "\ud83d\udc73\u200d\u2640\ufe0f", fitzpatrick_scale: true, category: "people" }, man_with_turban: { keywords: [ "male", "indian", "hinduism", "arabs" ], "char": "\ud83d\udc73", fitzpatrick_scale: true, category: "people" }, policewoman: { keywords: [ "woman", "police", "law", "legal", "enforcement", "arrest", "911", "female" ], "char": "\ud83d\udc6e\u200d\u2640\ufe0f", fitzpatrick_scale: true, category: "people" }, policeman: { keywords: [ "man", "police", "law", "legal", "enforcement", "arrest", "911" ], "char": "\ud83d\udc6e", fitzpatrick_scale: true, category: "people" }, construction_worker_woman: { keywords: [ "female", "human", "wip", "build", "construction", "worker", "labor", "woman" ], "char": "\ud83d\udc77\u200d\u2640\ufe0f", fitzpatrick_scale: true, category: "people" }, construction_worker_man: { keywords: [ "male", "human", "wip", "guy", "build", "construction", "worker", "labor" ], "char": "\ud83d\udc77", fitzpatrick_scale: true, category: "people" }, guardswoman: { keywords: [ "uk", "gb", "british", "female", "royal", "woman" ], "char": "\ud83d\udc82\u200d\u2640\ufe0f", fitzpatrick_scale: true, category: "people" }, guardsman: { keywords: [ "uk", "gb", "british", "male", "guy", "royal" ], "char": "\ud83d\udc82", fitzpatrick_scale: true, category: "people" }, female_detective: { keywords: [ "human", "spy", "detective", "female", "woman" ], "char": "\ud83d\udd75\ufe0f\u200d\u2640\ufe0f", fitzpatrick_scale: true, category: "people" }, male_detective: { keywords: [ "human", "spy", "detective" ], "char": "\ud83d\udd75", fitzpatrick_scale: true, category: "people" }, woman_health_worker: { keywords: [ "doctor", "nurse", "therapist", "healthcare", "woman", "human" ], "char": "\ud83d\udc69\u200d\u2695\ufe0f", fitzpatrick_scale: true, category: "people" }, man_health_worker: { keywords: [ "doctor", "nurse", "therapist", "healthcare", "man", "human" ], "char": "\ud83d\udc68\u200d\u2695\ufe0f", fitzpatrick_scale: true, category: "people" }, woman_farmer: { keywords: [ "rancher", "gardener", "woman", "human" ], "char": "\ud83d\udc69\u200d\ud83c\udf3e", fitzpatrick_scale: true, category: "people" }, man_farmer: { keywords: [ "rancher", "gardener", "man", "human" ], "char": "\ud83d\udc68\u200d\ud83c\udf3e", fitzpatrick_scale: true, category: "people" }, woman_cook: { keywords: [ "chef", "woman", "human" ], "char": "\ud83d\udc69\u200d\ud83c\udf73", fitzpatrick_scale: true, category: "people" }, man_cook: { keywords: [ "chef", "man", "human" ], "char": "\ud83d\udc68\u200d\ud83c\udf73", fitzpatrick_scale: true, category: "people" }, woman_student: { keywords: [ "graduate", "woman", "human" ], "char": "\ud83d\udc69\u200d\ud83c\udf93", fitzpatrick_scale: true, category: "people" }, man_student: { keywords: [ "graduate", "man", "human" ], "char": "\ud83d\udc68\u200d\ud83c\udf93", fitzpatrick_scale: true, category: "people" }, woman_singer: { keywords: [ "rockstar", "entertainer", "woman", "human" ], "char": "\ud83d\udc69\u200d\ud83c\udfa4", fitzpatrick_scale: true, category: "people" }, man_singer: { keywords: [ "rockstar", "entertainer", "man", "human" ], "char": "\ud83d\udc68\u200d\ud83c\udfa4", fitzpatrick_scale: true, category: "people" }, woman_teacher: { keywords: [ "instructor", "professor", "woman", "human" ], "char": "\ud83d\udc69\u200d\ud83c\udfeb", fitzpatrick_scale: true, category: "people" }, man_teacher: { keywords: [ "instructor", "professor", "man", "human" ], "char": "\ud83d\udc68\u200d\ud83c\udfeb", fitzpatrick_scale: true, category: "people" }, woman_factory_worker: { keywords: [ "assembly", "industrial", "woman", "human" ], "char": "\ud83d\udc69\u200d\ud83c\udfed", fitzpatrick_scale: true, category: "people" }, man_factory_worker: { keywords: [ "assembly", "industrial", "man", "human" ], "char": "\ud83d\udc68\u200d\ud83c\udfed", fitzpatrick_scale: true, category: "people" }, woman_technologist: { keywords: [ "coder", "developer", "engineer", "programmer", "software", "woman", "human", "laptop", "computer" ], "char": "\ud83d\udc69\u200d\ud83d\udcbb", fitzpatrick_scale: true, category: "people" }, man_technologist: { keywords: [ "coder", "developer", "engineer", "programmer", "software", "man", "human", "laptop", "computer" ], "char": "\ud83d\udc68\u200d\ud83d\udcbb", fitzpatrick_scale: true, category: "people" }, woman_office_worker: { keywords: [ "business", "manager", "woman", "human" ], "char": "\ud83d\udc69\u200d\ud83d\udcbc", fitzpatrick_scale: true, category: "people" }, man_office_worker: { keywords: [ "business", "manager", "man", "human" ], "char": "\ud83d\udc68\u200d\ud83d\udcbc", fitzpatrick_scale: true, category: "people" }, woman_mechanic: { keywords: [ "plumber", "woman", "human", "wrench" ], "char": "\ud83d\udc69\u200d\ud83d\udd27", fitzpatrick_scale: true, category: "people" }, man_mechanic: { keywords: [ "plumber", "man", "human", "wrench" ], "char": "\ud83d\udc68\u200d\ud83d\udd27", fitzpatrick_scale: true, category: "people" }, woman_scientist: { keywords: [ "biologist", "chemist", "engineer", "physicist", "woman", "human" ], "char": "\ud83d\udc69\u200d\ud83d\udd2c", fitzpatrick_scale: true, category: "people" }, man_scientist: { keywords: [ "biologist", "chemist", "engineer", "physicist", "man", "human" ], "char": "\ud83d\udc68\u200d\ud83d\udd2c", fitzpatrick_scale: true, category: "people" }, woman_artist: { keywords: [ "painter", "woman", "human" ], "char": "\ud83d\udc69\u200d\ud83c\udfa8", fitzpatrick_scale: true, category: "people" }, man_artist: { keywords: [ "painter", "man", "human" ], "char": "\ud83d\udc68\u200d\ud83c\udfa8", fitzpatrick_scale: true, category: "people" }, woman_firefighter: { keywords: [ "fireman", "woman", "human" ], "char": "\ud83d\udc69\u200d\ud83d\ude92", fitzpatrick_scale: true, category: "people" }, man_firefighter: { keywords: [ "fireman", "man", "human" ], "char": "\ud83d\udc68\u200d\ud83d\ude92", fitzpatrick_scale: true, category: "people" }, woman_pilot: { keywords: [ "aviator", "plane", "woman", "human" ], "char": "\ud83d\udc69\u200d\u2708\ufe0f", fitzpatrick_scale: true, category: "people" }, man_pilot: { keywords: [ "aviator", "plane", "man", "human" ], "char": "\ud83d\udc68\u200d\u2708\ufe0f", fitzpatrick_scale: true, category: "people" }, woman_astronaut: { keywords: [ "space", "rocket", "woman", "human" ], "char": "\ud83d\udc69\u200d\ud83d\ude80", fitzpatrick_scale: true, category: "people" }, man_astronaut: { keywords: [ "space", "rocket", "man", "human" ], "char": "\ud83d\udc68\u200d\ud83d\ude80", fitzpatrick_scale: true, category: "people" }, woman_judge: { keywords: [ "justice", "court", "woman", "human" ], "char": "\ud83d\udc69\u200d\u2696\ufe0f", fitzpatrick_scale: true, category: "people" }, man_judge: { keywords: [ "justice", "court", "man", "human" ], "char": "\ud83d\udc68\u200d\u2696\ufe0f", fitzpatrick_scale: true, category: "people" }, mrs_claus: { keywords: [ "woman", "female", "xmas", "mother christmas" ], "char": "\ud83e\udd36", fitzpatrick_scale: true, category: "people" }, santa: { keywords: [ "festival", "man", "male", "xmas", "father christmas" ], "char": "\ud83c\udf85", fitzpatrick_scale: true, category: "people" }, sorceress: { keywords: [ "woman", "female", "mage", "witch" ], "char": "\ud83e\uddd9\u200d\u2640\ufe0f", fitzpatrick_scale: true, category: "people" }, wizard: { keywords: [ "man", "male", "mage", "sorcerer" ], "char": "\ud83e\uddd9\u200d\u2642\ufe0f", fitzpatrick_scale: true, category: "people" }, woman_elf: { keywords: [ "woman", "female" ], "char": "\ud83e\udddd\u200d\u2640\ufe0f", fitzpatrick_scale: true, category: "people" }, man_elf: { keywords: [ "man", "male" ], "char": "\ud83e\udddd\u200d\u2642\ufe0f", fitzpatrick_scale: true, category: "people" }, woman_vampire: { keywords: [ "woman", "female" ], "char": "\ud83e\udddb\u200d\u2640\ufe0f", fitzpatrick_scale: true, category: "people" }, man_vampire: { keywords: [ "man", "male", "dracula" ], "char": "\ud83e\udddb\u200d\u2642\ufe0f", fitzpatrick_scale: true, category: "people" }, woman_zombie: { keywords: [ "woman", "female", "undead", "walking dead" ], "char": "\ud83e\udddf\u200d\u2640\ufe0f", fitzpatrick_scale: false, category: "people" }, man_zombie: { keywords: [ "man", "male", "dracula", "undead", "walking dead" ], "char": "\ud83e\udddf\u200d\u2642\ufe0f", fitzpatrick_scale: false, category: "people" }, woman_genie: { keywords: [ "woman", "female" ], "char": "\ud83e\uddde\u200d\u2640\ufe0f", fitzpatrick_scale: false, category: "people" }, man_genie: { keywords: [ "man", "male" ], "char": "\ud83e\uddde\u200d\u2642\ufe0f", fitzpatrick_scale: false, category: "people" }, mermaid: { keywords: [ "woman", "female", "merwoman", "ariel" ], "char": "\ud83e\udddc\u200d\u2640\ufe0f", fitzpatrick_scale: true, category: "people" }, merman: { keywords: [ "man", "male", "triton" ], "char": "\ud83e\udddc\u200d\u2642\ufe0f", fitzpatrick_scale: true, category: "people" }, woman_fairy: { keywords: [ "woman", "female" ], "char": "\ud83e\uddda\u200d\u2640\ufe0f", fitzpatrick_scale: true, category: "people" }, man_fairy: { keywords: [ "man", "male" ], "char": "\ud83e\uddda\u200d\u2642\ufe0f", fitzpatrick_scale: true, category: "people" }, angel: { keywords: [ "heaven", "wings", "halo" ], "char": "\ud83d\udc7c", fitzpatrick_scale: true, category: "people" }, pregnant_woman: { keywords: [ "baby" ], "char": "\ud83e\udd30", fitzpatrick_scale: true, category: "people" }, breastfeeding: { keywords: [ "nursing", "baby" ], "char": "\ud83e\udd31", fitzpatrick_scale: true, category: "people" }, princess: { keywords: [ "girl", "woman", "female", "blond", "crown", "royal", "queen" ], "char": "\ud83d\udc78", fitzpatrick_scale: true, category: "people" }, prince: { keywords: [ "boy", "man", "male", "crown", "royal", "king" ], "char": "\ud83e\udd34", fitzpatrick_scale: true, category: "people" }, bride_with_veil: { keywords: [ "couple", "marriage", "wedding", "woman", "bride" ], "char": "\ud83d\udc70", fitzpatrick_scale: true, category: "people" }, man_in_tuxedo: { keywords: [ "couple", "marriage", "wedding", "groom" ], "char": "\ud83e\udd35", fitzpatrick_scale: true, category: "people" }, running_woman: { keywords: [ "woman", "walking", "exercise", "race", "running", "female" ], "char": "\ud83c\udfc3\u200d\u2640\ufe0f", fitzpatrick_scale: true, category: "people" }, running_man: { keywords: [ "man", "walking", "exercise", "race", "running" ], "char": "\ud83c\udfc3", fitzpatrick_scale: true, category: "people" }, walking_woman: { keywords: [ "human", "feet", "steps", "woman", "female" ], "char": "\ud83d\udeb6\u200d\u2640\ufe0f", fitzpatrick_scale: true, category: "people" }, walking_man: { keywords: [ "human", "feet", "steps" ], "char": "\ud83d\udeb6", fitzpatrick_scale: true, category: "people" }, dancer: { keywords: [ "female", "girl", "woman", "fun" ], "char": "\ud83d\udc83", fitzpatrick_scale: true, category: "people" }, man_dancing: { keywords: [ "male", "boy", "fun", "dancer" ], "char": "\ud83d\udd7a", fitzpatrick_scale: true, category: "people" }, dancing_women: { keywords: [ "female", "bunny", "women", "girls" ], "char": "\ud83d\udc6f", fitzpatrick_scale: false, category: "people" }, dancing_men: { keywords: [ "male", "bunny", "men", "boys" ], "char": "\ud83d\udc6f\u200d\u2642\ufe0f", fitzpatrick_scale: false, category: "people" }, couple: { keywords: [ "pair", "people", "human", "love", "date", "dating", "like", "affection", "valentines", "marriage" ], "char": "\ud83d\udc6b", fitzpatrick_scale: false, category: "people" }, two_men_holding_hands: { keywords: [ "pair", "couple", "love", "like", "bromance", "friendship", "people", "human" ], "char": "\ud83d\udc6c", fitzpatrick_scale: false, category: "people" }, two_women_holding_hands: { keywords: [ "pair", "friendship", "couple", "love", "like", "female", "people", "human" ], "char": "\ud83d\udc6d", fitzpatrick_scale: false, category: "people" }, bowing_woman: { keywords: [ "woman", "female", "girl" ], "char": "\ud83d\ude47\u200d\u2640\ufe0f", fitzpatrick_scale: true, category: "people" }, bowing_man: { keywords: [ "man", "male", "boy" ], "char": "\ud83d\ude47", fitzpatrick_scale: true, category: "people" }, man_facepalming: { keywords: [ "man", "male", "boy", "disbelief" ], "char": "\ud83e\udd26", fitzpatrick_scale: true, category: "people" }, woman_facepalming: { keywords: [ "woman", "female", "girl", "disbelief" ], "char": "\ud83e\udd26\u200d\u2640\ufe0f", fitzpatrick_scale: true, category: "people" }, woman_shrugging: { keywords: [ "woman", "female", "girl", "confused", "indifferent", "doubt" ], "char": "\ud83e\udd37", fitzpatrick_scale: true, category: "people" }, man_shrugging: { keywords: [ "man", "male", "boy", "confused", "indifferent", "doubt" ], "char": "\ud83e\udd37\u200d\u2642\ufe0f", fitzpatrick_scale: true, category: "people" }, tipping_hand_woman: { keywords: [ "female", "girl", "woman", "human", "information" ], "char": "\ud83d\udc81", fitzpatrick_scale: true, category: "people" }, tipping_hand_man: { keywords: [ "male", "boy", "man", "human", "information" ], "char": "\ud83d\udc81\u200d\u2642\ufe0f", fitzpatrick_scale: true, category: "people" }, no_good_woman: { keywords: [ "female", "girl", "woman", "nope" ], "char": "\ud83d\ude45", fitzpatrick_scale: true, category: "people" }, no_good_man: { keywords: [ "male", "boy", "man", "nope" ], "char": "\ud83d\ude45\u200d\u2642\ufe0f", fitzpatrick_scale: true, category: "people" }, ok_woman: { keywords: [ "women", "girl", "female", "pink", "human", "woman" ], "char": "\ud83d\ude46", fitzpatrick_scale: true, category: "people" }, ok_man: { keywords: [ "men", "boy", "male", "blue", "human", "man" ], "char": "\ud83d\ude46\u200d\u2642\ufe0f", fitzpatrick_scale: true, category: "people" }, raising_hand_woman: { keywords: [ "female", "girl", "woman" ], "char": "\ud83d\ude4b", fitzpatrick_scale: true, category: "people" }, raising_hand_man: { keywords: [ "male", "boy", "man" ], "char": "\ud83d\ude4b\u200d\u2642\ufe0f", fitzpatrick_scale: true, category: "people" }, pouting_woman: { keywords: [ "female", "girl", "woman" ], "char": "\ud83d\ude4e", fitzpatrick_scale: true, category: "people" }, pouting_man: { keywords: [ "male", "boy", "man" ], "char": "\ud83d\ude4e\u200d\u2642\ufe0f", fitzpatrick_scale: true, category: "people" }, frowning_woman: { keywords: [ "female", "girl", "woman", "sad", "depressed", "discouraged", "unhappy" ], "char": "\ud83d\ude4d", fitzpatrick_scale: true, category: "people" }, frowning_man: { keywords: [ "male", "boy", "man", "sad", "depressed", "discouraged", "unhappy" ], "char": "\ud83d\ude4d\u200d\u2642\ufe0f", fitzpatrick_scale: true, category: "people" }, haircut_woman: { keywords: [ "female", "girl", "woman" ], "char": "\ud83d\udc87", fitzpatrick_scale: true, category: "people" }, haircut_man: { keywords: [ "male", "boy", "man" ], "char": "\ud83d\udc87\u200d\u2642\ufe0f", fitzpatrick_scale: true, category: "people" }, massage_woman: { keywords: [ "female", "girl", "woman", "head" ], "char": "\ud83d\udc86", fitzpatrick_scale: true, category: "people" }, massage_man: { keywords: [ "male", "boy", "man", "head" ], "char": "\ud83d\udc86\u200d\u2642\ufe0f", fitzpatrick_scale: true, category: "people" }, woman_in_steamy_room: { keywords: [ "female", "woman", "spa", "steamroom", "sauna" ], "char": "\ud83e\uddd6\u200d\u2640\ufe0f", fitzpatrick_scale: true, category: "people" }, man_in_steamy_room: { keywords: [ "male", "man", "spa", "steamroom", "sauna" ], "char": "\ud83e\uddd6\u200d\u2642\ufe0f", fitzpatrick_scale: true, category: "people" }, couple_with_heart_woman_man: { keywords: [ "pair", "love", "like", "affection", "human", "dating", "valentines", "marriage" ], "char": "\ud83d\udc91", fitzpatrick_scale: false, category: "people" }, couple_with_heart_woman_woman: { keywords: [ "pair", "love", "like", "affection", "human", "dating", "valentines", "marriage" ], "char": "\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc69", fitzpatrick_scale: false, category: "people" }, couple_with_heart_man_man: { keywords: [ "pair", "love", "like", "affection", "human", "dating", "valentines", "marriage" ], "char": "\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc68", fitzpatrick_scale: false, category: "people" }, couplekiss_man_woman: { keywords: [ "pair", "valentines", "love", "like", "dating", "marriage" ], "char": "\ud83d\udc8f", fitzpatrick_scale: false, category: "people" }, couplekiss_woman_woman: { keywords: [ "pair", "valentines", "love", "like", "dating", "marriage" ], "char": "\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69", fitzpatrick_scale: false, category: "people" }, couplekiss_man_man: { keywords: [ "pair", "valentines", "love", "like", "dating", "marriage" ], "char": "\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68", fitzpatrick_scale: false, category: "people" }, family_man_woman_boy: { keywords: [ "home", "parents", "child", "mom", "dad", "father", "mother", "people", "human" ], "char": "\ud83d\udc6a", fitzpatrick_scale: false, category: "people" }, family_man_woman_girl: { keywords: [ "home", "parents", "people", "human", "child" ], "char": "\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67", fitzpatrick_scale: false, category: "people" }, family_man_woman_girl_boy: { keywords: [ "home", "parents", "people", "human", "children" ], "char": "\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66", fitzpatrick_scale: false, category: "people" }, family_man_woman_boy_boy: { keywords: [ "home", "parents", "people", "human", "children" ], "char": "\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66", fitzpatrick_scale: false, category: "people" }, family_man_woman_girl_girl: { keywords: [ "home", "parents", "people", "human", "children" ], "char": "\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc67", fitzpatrick_scale: false, category: "people" }, family_woman_woman_boy: { keywords: [ "home", "parents", "people", "human", "children" ], "char": "\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66", fitzpatrick_scale: false, category: "people" }, family_woman_woman_girl: { keywords: [ "home", "parents", "people", "human", "children" ], "char": "\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67", fitzpatrick_scale: false, category: "people" }, family_woman_woman_girl_boy: { keywords: [ "home", "parents", "people", "human", "children" ], "char": "\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66", fitzpatrick_scale: false, category: "people" }, family_woman_woman_boy_boy: { keywords: [ "home", "parents", "people", "human", "children" ], "char": "\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66", fitzpatrick_scale: false, category: "people" }, family_woman_woman_girl_girl: { keywords: [ "home", "parents", "people", "human", "children" ], "char": "\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc67", fitzpatrick_scale: false, category: "people" }, family_man_man_boy: { keywords: [ "home", "parents", "people", "human", "children" ], "char": "\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66", fitzpatrick_scale: false, category: "people" }, family_man_man_girl: { keywords: [ "home", "parents", "people", "human", "children" ], "char": "\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67", fitzpatrick_scale: false, category: "people" }, family_man_man_girl_boy: { keywords: [ "home", "parents", "people", "human", "children" ], "char": "\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc66", fitzpatrick_scale: false, category: "people" }, family_man_man_boy_boy: { keywords: [ "home", "parents", "people", "human", "children" ], "char": "\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66", fitzpatrick_scale: false, category: "people" }, family_man_man_girl_girl: { keywords: [ "home", "parents", "people", "human", "children" ], "char": "\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc67", fitzpatrick_scale: false, category: "people" }, family_woman_boy: { keywords: [ "home", "parent", "people", "human", "child" ], "char": "\ud83d\udc69\u200d\ud83d\udc66", fitzpatrick_scale: false, category: "people" }, family_woman_girl: { keywords: [ "home", "parent", "people", "human", "child" ], "char": "\ud83d\udc69\u200d\ud83d\udc67", fitzpatrick_scale: false, category: "people" }, family_woman_girl_boy: { keywords: [ "home", "parent", "people", "human", "children" ], "char": "\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66", fitzpatrick_scale: false, category: "people" }, family_woman_boy_boy: { keywords: [ "home", "parent", "people", "human", "children" ], "char": "\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66", fitzpatrick_scale: false, category: "people" }, family_woman_girl_girl: { keywords: [ "home", "parent", "people", "human", "children" ], "char": "\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc67", fitzpatrick_scale: false, category: "people" }, family_man_boy: { keywords: [ "home", "parent", "people", "human", "child" ], "char": "\ud83d\udc68\u200d\ud83d\udc66", fitzpatrick_scale: false, category: "people" }, family_man_girl: { keywords: [ "home", "parent", "people", "human", "child" ], "char": "\ud83d\udc68\u200d\ud83d\udc67", fitzpatrick_scale: false, category: "people" }, family_man_girl_boy: { keywords: [ "home", "parent", "people", "human", "children" ], "char": "\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc66", fitzpatrick_scale: false, category: "people" }, family_man_boy_boy: { keywords: [ "home", "parent", "people", "human", "children" ], "char": "\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66", fitzpatrick_scale: false, category: "people" }, family_man_girl_girl: { keywords: [ "home", "parent", "people", "human", "children" ], "char": "\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d\udc67", fitzpatrick_scale: false, category: "people" }, coat: { keywords: [ "jacket" ], "char": "\ud83e\udde5", fitzpatrick_scale: false, category: "people" }, womans_clothes: { keywords: [ "fashion", "shopping_bags", "female" ], "char": "\ud83d\udc5a", fitzpatrick_scale: false, category: "people" }, tshirt: { keywords: [ "fashion", "cloth", "casual", "shirt", "tee" ], "char": "\ud83d\udc55", fitzpatrick_scale: false, category: "people" }, jeans: { keywords: [ "fashion", "shopping" ], "char": "\ud83d\udc56", fitzpatrick_scale: false, category: "people" }, necktie: { keywords: [ "shirt", "suitup", "formal", "fashion", "cloth", "business" ], "char": "\ud83d\udc54", fitzpatrick_scale: false, category: "people" }, dress: { keywords: [ "clothes", "fashion", "shopping" ], "char": "\ud83d\udc57", fitzpatrick_scale: false, category: "people" }, bikini: { keywords: [ "swimming", "female", "woman", "girl", "fashion", "beach", "summer" ], "char": "\ud83d\udc59", fitzpatrick_scale: false, category: "people" }, kimono: { keywords: [ "dress", "fashion", "women", "female", "japanese" ], "char": "\ud83d\udc58", fitzpatrick_scale: false, category: "people" }, lipstick: { keywords: [ "female", "girl", "fashion", "woman" ], "char": "\ud83d\udc84", fitzpatrick_scale: false, category: "people" }, kiss: { keywords: [ "face", "lips", "love", "like", "affection", "valentines" ], "char": "\ud83d\udc8b", fitzpatrick_scale: false, category: "people" }, footprints: { keywords: [ "feet", "tracking", "walking", "beach" ], "char": "\ud83d\udc63", fitzpatrick_scale: false, category: "people" }, high_heel: { keywords: [ "fashion", "shoes", "female", "pumps", "stiletto" ], "char": "\ud83d\udc60", fitzpatrick_scale: false, category: "people" }, sandal: { keywords: [ "shoes", "fashion", "flip flops" ], "char": "\ud83d\udc61", fitzpatrick_scale: false, category: "people" }, boot: { keywords: [ "shoes", "fashion" ], "char": "\ud83d\udc62", fitzpatrick_scale: false, category: "people" }, mans_shoe: { keywords: [ "fashion", "male" ], "char": "\ud83d\udc5e", fitzpatrick_scale: false, category: "people" }, athletic_shoe: { keywords: [ "shoes", "sports", "sneakers" ], "char": "\ud83d\udc5f", fitzpatrick_scale: false, category: "people" }, socks: { keywords: [ "stockings", "clothes" ], "char": "\ud83e\udde6", fitzpatrick_scale: false, category: "people" }, gloves: { keywords: [ "hands", "winter", "clothes" ], "char": "\ud83e\udde4", fitzpatrick_scale: false, category: "people" }, scarf: { keywords: [ "neck", "winter", "clothes" ], "char": "\ud83e\udde3", fitzpatrick_scale: false, category: "people" }, womans_hat: { keywords: [ "fashion", "accessories", "female", "lady", "spring" ], "char": "\ud83d\udc52", fitzpatrick_scale: false, category: "people" }, tophat: { keywords: [ "magic", "gentleman", "classy", "circus" ], "char": "\ud83c\udfa9", fitzpatrick_scale: false, category: "people" }, billed_hat: { keywords: [ "cap", "baseball" ], "char": "\ud83e\udde2", fitzpatrick_scale: false, category: "people" }, rescue_worker_helmet: { keywords: [ "construction", "build" ], "char": "\u26d1", fitzpatrick_scale: false, category: "people" }, mortar_board: { keywords: [ "school", "college", "degree", "university", "graduation", "cap", "hat", "legal", "learn", "education" ], "char": "\ud83c\udf93", fitzpatrick_scale: false, category: "people" }, crown: { keywords: [ "king", "kod", "leader", "royalty", "lord" ], "char": "\ud83d\udc51", fitzpatrick_scale: false, category: "people" }, school_satchel: { keywords: [ "student", "education", "bag", "backpack" ], "char": "\ud83c\udf92", fitzpatrick_scale: false, category: "people" }, pouch: { keywords: [ "bag", "accessories", "shopping" ], "char": "\ud83d\udc5d", fitzpatrick_scale: false, category: "people" }, purse: { keywords: [ "fashion", "accessories", "money", "sales", "shopping" ], "char": "\ud83d\udc5b", fitzpatrick_scale: false, category: "people" }, handbag: { keywords: [ "fashion", "accessory", "accessories", "shopping" ], "char": "\ud83d\udc5c", fitzpatrick_scale: false, category: "people" }, briefcase: { keywords: [ "business", "documents", "work", "law", "legal", "job", "career" ], "char": "\ud83d\udcbc", fitzpatrick_scale: false, category: "people" }, eyeglasses: { keywords: [ "fashion", "accessories", "eyesight", "nerdy", "dork", "geek" ], "char": "\ud83d\udc53", fitzpatrick_scale: false, category: "people" }, dark_sunglasses: { keywords: [ "face", "cool", "accessories" ], "char": "\ud83d\udd76", fitzpatrick_scale: false, category: "people" }, ring: { keywords: [ "wedding", "propose", "marriage", "valentines", "diamond", "fashion", "jewelry", "gem", "engagement" ], "char": "\ud83d\udc8d", fitzpatrick_scale: false, category: "people" }, closed_umbrella: { keywords: [ "weather", "rain", "drizzle" ], "char": "\ud83c\udf02", fitzpatrick_scale: false, category: "people" }, dog: { keywords: [ "animal", "friend", "nature", "woof", "puppy", "pet", "faithful" ], "char": "\ud83d\udc36", fitzpatrick_scale: false, category: "animals_and_nature" }, cat: { keywords: [ "animal", "meow", "nature", "pet", "kitten" ], "char": "\ud83d\udc31", fitzpatrick_scale: false, category: "animals_and_nature" }, mouse: { keywords: [ "animal", "nature", "cheese_wedge", "rodent" ], "char": "\ud83d\udc2d", fitzpatrick_scale: false, category: "animals_and_nature" }, hamster: { keywords: [ "animal", "nature" ], "char": "\ud83d\udc39", fitzpatrick_scale: false, category: "animals_and_nature" }, rabbit: { keywords: [ "animal", "nature", "pet", "spring", "magic", "bunny" ], "char": "\ud83d\udc30", fitzpatrick_scale: false, category: "animals_and_nature" }, fox_face: { keywords: [ "animal", "nature", "face" ], "char": "\ud83e\udd8a", fitzpatrick_scale: false, category: "animals_and_nature" }, bear: { keywords: [ "animal", "nature", "wild" ], "char": "\ud83d\udc3b", fitzpatrick_scale: false, category: "animals_and_nature" }, panda_face: { keywords: [ "animal", "nature", "panda" ], "char": "\ud83d\udc3c", fitzpatrick_scale: false, category: "animals_and_nature" }, koala: { keywords: [ "animal", "nature" ], "char": "\ud83d\udc28", fitzpatrick_scale: false, category: "animals_and_nature" }, tiger: { keywords: [ "animal", "cat", "danger", "wild", "nature", "roar" ], "char": "\ud83d\udc2f", fitzpatrick_scale: false, category: "animals_and_nature" }, lion: { keywords: [ "animal", "nature" ], "char": "\ud83e\udd81", fitzpatrick_scale: false, category: "animals_and_nature" }, cow: { keywords: [ "beef", "ox", "animal", "nature", "moo", "milk" ], "char": "\ud83d\udc2e", fitzpatrick_scale: false, category: "animals_and_nature" }, pig: { keywords: [ "animal", "oink", "nature" ], "char": "\ud83d\udc37", fitzpatrick_scale: false, category: "animals_and_nature" }, pig_nose: { keywords: [ "animal", "oink" ], "char": "\ud83d\udc3d", fitzpatrick_scale: false, category: "animals_and_nature" }, frog: { keywords: [ "animal", "nature", "croak", "toad" ], "char": "\ud83d\udc38", fitzpatrick_scale: false, category: "animals_and_nature" }, squid: { keywords: [ "animal", "nature", "ocean", "sea" ], "char": "\ud83e\udd91", fitzpatrick_scale: false, category: "animals_and_nature" }, octopus: { keywords: [ "animal", "creature", "ocean", "sea", "nature", "beach" ], "char": "\ud83d\udc19", fitzpatrick_scale: false, category: "animals_and_nature" }, shrimp: { keywords: [ "animal", "ocean", "nature", "seafood" ], "char": "\ud83e\udd90", fitzpatrick_scale: false, category: "animals_and_nature" }, monkey_face: { keywords: [ "animal", "nature", "circus" ], "char": "\ud83d\udc35", fitzpatrick_scale: false, category: "animals_and_nature" }, gorilla: { keywords: [ "animal", "nature", "circus" ], "char": "\ud83e\udd8d", fitzpatrick_scale: false, category: "animals_and_nature" }, see_no_evil: { keywords: [ "monkey", "animal", "nature", "haha" ], "char": "\ud83d\ude48", fitzpatrick_scale: false, category: "animals_and_nature" }, hear_no_evil: { keywords: [ "animal", "monkey", "nature" ], "char": "\ud83d\ude49", fitzpatrick_scale: false, category: "animals_and_nature" }, speak_no_evil: { keywords: [ "monkey", "animal", "nature", "omg" ], "char": "\ud83d\ude4a", fitzpatrick_scale: false, category: "animals_and_nature" }, monkey: { keywords: [ "animal", "nature", "banana", "circus" ], "char": "\ud83d\udc12", fitzpatrick_scale: false, category: "animals_and_nature" }, chicken: { keywords: [ "animal", "cluck", "nature", "bird" ], "char": "\ud83d\udc14", fitzpatrick_scale: false, category: "animals_and_nature" }, penguin: { keywords: [ "animal", "nature" ], "char": "\ud83d\udc27", fitzpatrick_scale: false, category: "animals_and_nature" }, bird: { keywords: [ "animal", "nature", "fly", "tweet", "spring" ], "char": "\ud83d\udc26", fitzpatrick_scale: false, category: "animals_and_nature" }, baby_chick: { keywords: [ "animal", "chicken", "bird" ], "char": "\ud83d\udc24", fitzpatrick_scale: false, category: "animals_and_nature" }, hatching_chick: { keywords: [ "animal", "chicken", "egg", "born", "baby", "bird" ], "char": "\ud83d\udc23", fitzpatrick_scale: false, category: "animals_and_nature" }, hatched_chick: { keywords: [ "animal", "chicken", "baby", "bird" ], "char": "\ud83d\udc25", fitzpatrick_scale: false, category: "animals_and_nature" }, duck: { keywords: [ "animal", "nature", "bird", "mallard" ], "char": "\ud83e\udd86", fitzpatrick_scale: false, category: "animals_and_nature" }, eagle: { keywords: [ "animal", "nature", "bird" ], "char": "\ud83e\udd85", fitzpatrick_scale: false, category: "animals_and_nature" }, owl: { keywords: [ "animal", "nature", "bird", "hoot" ], "char": "\ud83e\udd89", fitzpatrick_scale: false, category: "animals_and_nature" }, bat: { keywords: [ "animal", "nature", "blind", "vampire" ], "char": "\ud83e\udd87", fitzpatrick_scale: false, category: "animals_and_nature" }, wolf: { keywords: [ "animal", "nature", "wild" ], "char": "\ud83d\udc3a", fitzpatrick_scale: false, category: "animals_and_nature" }, boar: { keywords: [ "animal", "nature" ], "char": "\ud83d\udc17", fitzpatrick_scale: false, category: "animals_and_nature" }, horse: { keywords: [ "animal", "brown", "nature" ], "char": "\ud83d\udc34", fitzpatrick_scale: false, category: "animals_and_nature" }, unicorn: { keywords: [ "animal", "nature", "mystical" ], "char": "\ud83e\udd84", fitzpatrick_scale: false, category: "animals_and_nature" }, honeybee: { keywords: [ "animal", "insect", "nature", "bug", "spring", "honey" ], "char": "\ud83d\udc1d", fitzpatrick_scale: false, category: "animals_and_nature" }, bug: { keywords: [ "animal", "insect", "nature", "worm" ], "char": "\ud83d\udc1b", fitzpatrick_scale: false, category: "animals_and_nature" }, butterfly: { keywords: [ "animal", "insect", "nature", "caterpillar" ], "char": "\ud83e\udd8b", fitzpatrick_scale: false, category: "animals_and_nature" }, snail: { keywords: [ "slow", "animal", "shell" ], "char": "\ud83d\udc0c", fitzpatrick_scale: false, category: "animals_and_nature" }, beetle: { keywords: [ "animal", "insect", "nature", "ladybug" ], "char": "\ud83d\udc1e", fitzpatrick_scale: false, category: "animals_and_nature" }, ant: { keywords: [ "animal", "insect", "nature", "bug" ], "char": "\ud83d\udc1c", fitzpatrick_scale: false, category: "animals_and_nature" }, grasshopper: { keywords: [ "animal", "cricket", "chirp" ], "char": "\ud83e\udd97", fitzpatrick_scale: false, category: "animals_and_nature" }, spider: { keywords: [ "animal", "arachnid" ], "char": "\ud83d\udd77", fitzpatrick_scale: false, category: "animals_and_nature" }, scorpion: { keywords: [ "animal", "arachnid" ], "char": "\ud83e\udd82", fitzpatrick_scale: false, category: "animals_and_nature" }, crab: { keywords: [ "animal", "crustacean" ], "char": "\ud83e\udd80", fitzpatrick_scale: false, category: "animals_and_nature" }, snake: { keywords: [ "animal", "evil", "nature", "hiss", "python" ], "char": "\ud83d\udc0d", fitzpatrick_scale: false, category: "animals_and_nature" }, lizard: { keywords: [ "animal", "nature", "reptile" ], "char": "\ud83e\udd8e", fitzpatrick_scale: false, category: "animals_and_nature" }, "t-rex": { keywords: [ "animal", "nature", "dinosaur", "tyrannosaurus", "extinct" ], "char": "\ud83e\udd96", fitzpatrick_scale: false, category: "animals_and_nature" }, sauropod: { keywords: [ "animal", "nature", "dinosaur", "brachiosaurus", "brontosaurus", "diplodocus", "extinct" ], "char": "\ud83e\udd95", fitzpatrick_scale: false, category: "animals_and_nature" }, turtle: { keywords: [ "animal", "slow", "nature", "tortoise" ], "char": "\ud83d\udc22", fitzpatrick_scale: false, category: "animals_and_nature" }, tropical_fish: { keywords: [ "animal", "swim", "ocean", "beach", "nemo" ], "char": "\ud83d\udc20", fitzpatrick_scale: false, category: "animals_and_nature" }, fish: { keywords: [ "animal", "food", "nature" ], "char": "\ud83d\udc1f", fitzpatrick_scale: false, category: "animals_and_nature" }, blowfish: { keywords: [ "animal", "nature", "food", "sea", "ocean" ], "char": "\ud83d\udc21", fitzpatrick_scale: false, category: "animals_and_nature" }, dolphin: { keywords: [ "animal", "nature", "fish", "sea", "ocean", "flipper", "fins", "beach" ], "char": "\ud83d\udc2c", fitzpatrick_scale: false, category: "animals_and_nature" }, shark: { keywords: [ "animal", "nature", "fish", "sea", "ocean", "jaws", "fins", "beach" ], "char": "\ud83e\udd88", fitzpatrick_scale: false, category: "animals_and_nature" }, whale: { keywords: [ "animal", "nature", "sea", "ocean" ], "char": "\ud83d\udc33", fitzpatrick_scale: false, category: "animals_and_nature" }, whale2: { keywords: [ "animal", "nature", "sea", "ocean" ], "char": "\ud83d\udc0b", fitzpatrick_scale: false, category: "animals_and_nature" }, crocodile: { keywords: [ "animal", "nature", "reptile", "lizard", "alligator" ], "char": "\ud83d\udc0a", fitzpatrick_scale: false, category: "animals_and_nature" }, leopard: { keywords: [ "animal", "nature" ], "char": "\ud83d\udc06", fitzpatrick_scale: false, category: "animals_and_nature" }, zebra: { keywords: [ "animal", "nature", "stripes", "safari" ], "char": "\ud83e\udd93", fitzpatrick_scale: false, category: "animals_and_nature" }, tiger2: { keywords: [ "animal", "nature", "roar" ], "char": "\ud83d\udc05", fitzpatrick_scale: false, category: "animals_and_nature" }, water_buffalo: { keywords: [ "animal", "nature", "ox", "cow" ], "char": "\ud83d\udc03", fitzpatrick_scale: false, category: "animals_and_nature" }, ox: { keywords: [ "animal", "cow", "beef" ], "char": "\ud83d\udc02", fitzpatrick_scale: false, category: "animals_and_nature" }, cow2: { keywords: [ "beef", "ox", "animal", "nature", "moo", "milk" ], "char": "\ud83d\udc04", fitzpatrick_scale: false, category: "animals_and_nature" }, deer: { keywords: [ "animal", "nature", "horns", "venison" ], "char": "\ud83e\udd8c", fitzpatrick_scale: false, category: "animals_and_nature" }, dromedary_camel: { keywords: [ "animal", "hot", "desert", "hump" ], "char": "\ud83d\udc2a", fitzpatrick_scale: false, category: "animals_and_nature" }, camel: { keywords: [ "animal", "nature", "hot", "desert", "hump" ], "char": "\ud83d\udc2b", fitzpatrick_scale: false, category: "animals_and_nature" }, giraffe: { keywords: [ "animal", "nature", "spots", "safari" ], "char": "\ud83e\udd92", fitzpatrick_scale: false, category: "animals_and_nature" }, elephant: { keywords: [ "animal", "nature", "nose", "th", "circus" ], "char": "\ud83d\udc18", fitzpatrick_scale: false, category: "animals_and_nature" }, rhinoceros: { keywords: [ "animal", "nature", "horn" ], "char": "\ud83e\udd8f", fitzpatrick_scale: false, category: "animals_and_nature" }, goat: { keywords: [ "animal", "nature" ], "char": "\ud83d\udc10", fitzpatrick_scale: false, category: "animals_and_nature" }, ram: { keywords: [ "animal", "sheep", "nature" ], "char": "\ud83d\udc0f", fitzpatrick_scale: false, category: "animals_and_nature" }, sheep: { keywords: [ "animal", "nature", "wool", "shipit" ], "char": "\ud83d\udc11", fitzpatrick_scale: false, category: "animals_and_nature" }, racehorse: { keywords: [ "animal", "gamble", "luck" ], "char": "\ud83d\udc0e", fitzpatrick_scale: false, category: "animals_and_nature" }, pig2: { keywords: [ "animal", "nature" ], "char": "\ud83d\udc16", fitzpatrick_scale: false, category: "animals_and_nature" }, rat: { keywords: [ "animal", "mouse", "rodent" ], "char": "\ud83d\udc00", fitzpatrick_scale: false, category: "animals_and_nature" }, mouse2: { keywords: [ "animal", "nature", "rodent" ], "char": "\ud83d\udc01", fitzpatrick_scale: false, category: "animals_and_nature" }, rooster: { keywords: [ "animal", "nature", "chicken" ], "char": "\ud83d\udc13", fitzpatrick_scale: false, category: "animals_and_nature" }, turkey: { keywords: [ "animal", "bird" ], "char": "\ud83e\udd83", fitzpatrick_scale: false, category: "animals_and_nature" }, dove: { keywords: [ "animal", "bird" ], "char": "\ud83d\udd4a", fitzpatrick_scale: false, category: "animals_and_nature" }, dog2: { keywords: [ "animal", "nature", "friend", "doge", "pet", "faithful" ], "char": "\ud83d\udc15", fitzpatrick_scale: false, category: "animals_and_nature" }, poodle: { keywords: [ "dog", "animal", "101", "nature", "pet" ], "char": "\ud83d\udc29", fitzpatrick_scale: false, category: "animals_and_nature" }, cat2: { keywords: [ "animal", "meow", "pet", "cats" ], "char": "\ud83d\udc08", fitzpatrick_scale: false, category: "animals_and_nature" }, rabbit2: { keywords: [ "animal", "nature", "pet", "magic", "spring" ], "char": "\ud83d\udc07", fitzpatrick_scale: false, category: "animals_and_nature" }, chipmunk: { keywords: [ "animal", "nature", "rodent", "squirrel" ], "char": "\ud83d\udc3f", fitzpatrick_scale: false, category: "animals_and_nature" }, hedgehog: { keywords: [ "animal", "nature", "spiny" ], "char": "\ud83e\udd94", fitzpatrick_scale: false, category: "animals_and_nature" }, paw_prints: { keywords: [ "animal", "tracking", "footprints", "dog", "cat", "pet", "feet" ], "char": "\ud83d\udc3e", fitzpatrick_scale: false, category: "animals_and_nature" }, dragon: { keywords: [ "animal", "myth", "nature", "chinese", "green" ], "char": "\ud83d\udc09", fitzpatrick_scale: false, category: "animals_and_nature" }, dragon_face: { keywords: [ "animal", "myth", "nature", "chinese", "green" ], "char": "\ud83d\udc32", fitzpatrick_scale: false, category: "animals_and_nature" }, cactus: { keywords: [ "vegetable", "plant", "nature" ], "char": "\ud83c\udf35", fitzpatrick_scale: false, category: "animals_and_nature" }, christmas_tree: { keywords: [ "festival", "vacation", "december", "xmas", "celebration" ], "char": "\ud83c\udf84", fitzpatrick_scale: false, category: "animals_and_nature" }, evergreen_tree: { keywords: [ "plant", "nature" ], "char": "\ud83c\udf32", fitzpatrick_scale: false, category: "animals_and_nature" }, deciduous_tree: { keywords: [ "plant", "nature" ], "char": "\ud83c\udf33", fitzpatrick_scale: false, category: "animals_and_nature" }, palm_tree: { keywords: [ "plant", "vegetable", "nature", "summer", "beach", "mojito", "tropical" ], "char": "\ud83c\udf34", fitzpatrick_scale: false, category: "animals_and_nature" }, seedling: { keywords: [ "plant", "nature", "grass", "lawn", "spring" ], "char": "\ud83c\udf31", fitzpatrick_scale: false, category: "animals_and_nature" }, herb: { keywords: [ "vegetable", "plant", "medicine", "weed", "grass", "lawn" ], "char": "\ud83c\udf3f", fitzpatrick_scale: false, category: "animals_and_nature" }, shamrock: { keywords: [ "vegetable", "plant", "nature", "irish", "clover" ], "char": "\u2618", fitzpatrick_scale: false, category: "animals_and_nature" }, four_leaf_clover: { keywords: [ "vegetable", "plant", "nature", "lucky", "irish" ], "char": "\ud83c\udf40", fitzpatrick_scale: false, category: "animals_and_nature" }, bamboo: { keywords: [ "plant", "nature", "vegetable", "panda", "pine_decoration" ], "char": "\ud83c\udf8d", fitzpatrick_scale: false, category: "animals_and_nature" }, tanabata_tree: { keywords: [ "plant", "nature", "branch", "summer" ], "char": "\ud83c\udf8b", fitzpatrick_scale: false, category: "animals_and_nature" }, leaves: { keywords: [ "nature", "plant", "tree", "vegetable", "grass", "lawn", "spring" ], "char": "\ud83c\udf43", fitzpatrick_scale: false, category: "animals_and_nature" }, fallen_leaf: { keywords: [ "nature", "plant", "vegetable", "leaves" ], "char": "\ud83c\udf42", fitzpatrick_scale: false, category: "animals_and_nature" }, maple_leaf: { keywords: [ "nature", "plant", "vegetable", "ca", "fall" ], "char": "\ud83c\udf41", fitzpatrick_scale: false, category: "animals_and_nature" }, ear_of_rice: { keywords: [ "nature", "plant" ], "char": "\ud83c\udf3e", fitzpatrick_scale: false, category: "animals_and_nature" }, hibiscus: { keywords: [ "plant", "vegetable", "flowers", "beach" ], "char": "\ud83c\udf3a", fitzpatrick_scale: false, category: "animals_and_nature" }, sunflower: { keywords: [ "nature", "plant", "fall" ], "char": "\ud83c\udf3b", fitzpatrick_scale: false, category: "animals_and_nature" }, rose: { keywords: [ "flowers", "valentines", "love", "spring" ], "char": "\ud83c\udf39", fitzpatrick_scale: false, category: "animals_and_nature" }, wilted_flower: { keywords: [ "plant", "nature", "flower" ], "char": "\ud83e\udd40", fitzpatrick_scale: false, category: "animals_and_nature" }, tulip: { keywords: [ "flowers", "plant", "nature", "summer", "spring" ], "char": "\ud83c\udf37", fitzpatrick_scale: false, category: "animals_and_nature" }, blossom: { keywords: [ "nature", "flowers", "yellow" ], "char": "\ud83c\udf3c", fitzpatrick_scale: false, category: "animals_and_nature" }, cherry_blossom: { keywords: [ "nature", "plant", "spring", "flower" ], "char": "\ud83c\udf38", fitzpatrick_scale: false, category: "animals_and_nature" }, bouquet: { keywords: [ "flowers", "nature", "spring" ], "char": "\ud83d\udc90", fitzpatrick_scale: false, category: "animals_and_nature" }, mushroom: { keywords: [ "plant", "vegetable" ], "char": "\ud83c\udf44", fitzpatrick_scale: false, category: "animals_and_nature" }, chestnut: { keywords: [ "food", "squirrel" ], "char": "\ud83c\udf30", fitzpatrick_scale: false, category: "animals_and_nature" }, jack_o_lantern: { keywords: [ "halloween", "light", "pumpkin", "creepy", "fall" ], "char": "\ud83c\udf83", fitzpatrick_scale: false, category: "animals_and_nature" }, shell: { keywords: [ "nature", "sea", "beach" ], "char": "\ud83d\udc1a", fitzpatrick_scale: false, category: "animals_and_nature" }, spider_web: { keywords: [ "animal", "insect", "arachnid", "silk" ], "char": "\ud83d\udd78", fitzpatrick_scale: false, category: "animals_and_nature" }, earth_americas: { keywords: [ "globe", "world", "USA", "international" ], "char": "\ud83c\udf0e", fitzpatrick_scale: false, category: "animals_and_nature" }, earth_africa: { keywords: [ "globe", "world", "international" ], "char": "\ud83c\udf0d", fitzpatrick_scale: false, category: "animals_and_nature" }, earth_asia: { keywords: [ "globe", "world", "east", "international" ], "char": "\ud83c\udf0f", fitzpatrick_scale: false, category: "animals_and_nature" }, full_moon: { keywords: [ "nature", "yellow", "twilight", "planet", "space", "night", "evening", "sleep" ], "char": "\ud83c\udf15", fitzpatrick_scale: false, category: "animals_and_nature" }, waning_gibbous_moon: { keywords: [ "nature", "twilight", "planet", "space", "night", "evening", "sleep", "waxing_gibbous_moon" ], "char": "\ud83c\udf16", fitzpatrick_scale: false, category: "animals_and_nature" }, last_quarter_moon: { keywords: [ "nature", "twilight", "planet", "space", "night", "evening", "sleep" ], "char": "\ud83c\udf17", fitzpatrick_scale: false, category: "animals_and_nature" }, waning_crescent_moon: { keywords: [ "nature", "twilight", "planet", "space", "night", "evening", "sleep" ], "char": "\ud83c\udf18", fitzpatrick_scale: false, category: "animals_and_nature" }, new_moon: { keywords: [ "nature", "twilight", "planet", "space", "night", "evening", "sleep" ], "char": "\ud83c\udf11", fitzpatrick_scale: false, category: "animals_and_nature" }, waxing_crescent_moon: { keywords: [ "nature", "twilight", "planet", "space", "night", "evening", "sleep" ], "char": "\ud83c\udf12", fitzpatrick_scale: false, category: "animals_and_nature" }, first_quarter_moon: { keywords: [ "nature", "twilight", "planet", "space", "night", "evening", "sleep" ], "char": "\ud83c\udf13", fitzpatrick_scale: false, category: "animals_and_nature" }, waxing_gibbous_moon: { keywords: [ "nature", "night", "sky", "gray", "twilight", "planet", "space", "evening", "sleep" ], "char": "\ud83c\udf14", fitzpatrick_scale: false, category: "animals_and_nature" }, new_moon_with_face: { keywords: [ "nature", "twilight", "planet", "space", "night", "evening", "sleep" ], "char": "\ud83c\udf1a", fitzpatrick_scale: false, category: "animals_and_nature" }, full_moon_with_face: { keywords: [ "nature", "twilight", "planet", "space", "night", "evening", "sleep" ], "char": "\ud83c\udf1d", fitzpatrick_scale: false, category: "animals_and_nature" }, first_quarter_moon_with_face: { keywords: [ "nature", "twilight", "planet", "space", "night", "evening", "sleep" ], "char": "\ud83c\udf1b", fitzpatrick_scale: false, category: "animals_and_nature" }, last_quarter_moon_with_face: { keywords: [ "nature", "twilight", "planet", "space", "night", "evening", "sleep" ], "char": "\ud83c\udf1c", fitzpatrick_scale: false, category: "animals_and_nature" }, sun_with_face: { keywords: [ "nature", "morning", "sky" ], "char": "\ud83c\udf1e", fitzpatrick_scale: false, category: "animals_and_nature" }, crescent_moon: { keywords: [ "night", "sleep", "sky", "evening", "magic" ], "char": "\ud83c\udf19", fitzpatrick_scale: false, category: "animals_and_nature" }, star: { keywords: [ "night", "yellow" ], "char": "\u2b50", fitzpatrick_scale: false, category: "animals_and_nature" }, star2: { keywords: [ "night", "sparkle", "awesome", "good", "magic" ], "char": "\ud83c\udf1f", fitzpatrick_scale: false, category: "animals_and_nature" }, dizzy: { keywords: [ "star", "sparkle", "shoot", "magic" ], "char": "\ud83d\udcab", fitzpatrick_scale: false, category: "animals_and_nature" }, sparkles: { keywords: [ "stars", "shine", "shiny", "cool", "awesome", "good", "magic" ], "char": "\u2728", fitzpatrick_scale: false, category: "animals_and_nature" }, comet: { keywords: [ "space" ], "char": "\u2604", fitzpatrick_scale: false, category: "animals_and_nature" }, sunny: { keywords: [ "weather", "nature", "brightness", "summer", "beach", "spring" ], "char": "\u2600\ufe0f", fitzpatrick_scale: false, category: "animals_and_nature" }, sun_behind_small_cloud: { keywords: [ "weather" ], "char": "\ud83c\udf24", fitzpatrick_scale: false, category: "animals_and_nature" }, partly_sunny: { keywords: [ "weather", "nature", "cloudy", "morning", "fall", "spring" ], "char": "\u26c5", fitzpatrick_scale: false, category: "animals_and_nature" }, sun_behind_large_cloud: { keywords: [ "weather" ], "char": "\ud83c\udf25", fitzpatrick_scale: false, category: "animals_and_nature" }, sun_behind_rain_cloud: { keywords: [ "weather" ], "char": "\ud83c\udf26", fitzpatrick_scale: false, category: "animals_and_nature" }, cloud: { keywords: [ "weather", "sky" ], "char": "\u2601\ufe0f", fitzpatrick_scale: false, category: "animals_and_nature" }, cloud_with_rain: { keywords: [ "weather" ], "char": "\ud83c\udf27", fitzpatrick_scale: false, category: "animals_and_nature" }, cloud_with_lightning_and_rain: { keywords: [ "weather", "lightning" ], "char": "\u26c8", fitzpatrick_scale: false, category: "animals_and_nature" }, cloud_with_lightning: { keywords: [ "weather", "thunder" ], "char": "\ud83c\udf29", fitzpatrick_scale: false, category: "animals_and_nature" }, zap: { keywords: [ "thunder", "weather", "lightning bolt", "fast" ], "char": "\u26a1", fitzpatrick_scale: false, category: "animals_and_nature" }, fire: { keywords: [ "hot", "cook", "flame" ], "char": "\ud83d\udd25", fitzpatrick_scale: false, category: "animals_and_nature" }, boom: { keywords: [ "bomb", "explode", "explosion", "collision", "blown" ], "char": "\ud83d\udca5", fitzpatrick_scale: false, category: "animals_and_nature" }, snowflake: { keywords: [ "winter", "season", "cold", "weather", "christmas", "xmas" ], "char": "\u2744\ufe0f", fitzpatrick_scale: false, category: "animals_and_nature" }, cloud_with_snow: { keywords: [ "weather" ], "char": "\ud83c\udf28", fitzpatrick_scale: false, category: "animals_and_nature" }, snowman: { keywords: [ "winter", "season", "cold", "weather", "christmas", "xmas", "frozen", "without_snow" ], "char": "\u26c4", fitzpatrick_scale: false, category: "animals_and_nature" }, snowman_with_snow: { keywords: [ "winter", "season", "cold", "weather", "christmas", "xmas", "frozen" ], "char": "\u2603", fitzpatrick_scale: false, category: "animals_and_nature" }, wind_face: { keywords: [ "gust", "air" ], "char": "\ud83c\udf2c", fitzpatrick_scale: false, category: "animals_and_nature" }, dash: { keywords: [ "wind", "air", "fast", "shoo", "fart", "smoke", "puff" ], "char": "\ud83d\udca8", fitzpatrick_scale: false, category: "animals_and_nature" }, tornado: { keywords: [ "weather", "cyclone", "twister" ], "char": "\ud83c\udf2a", fitzpatrick_scale: false, category: "animals_and_nature" }, fog: { keywords: [ "weather" ], "char": "\ud83c\udf2b", fitzpatrick_scale: false, category: "animals_and_nature" }, open_umbrella: { keywords: [ "weather", "spring" ], "char": "\u2602", fitzpatrick_scale: false, category: "animals_and_nature" }, umbrella: { keywords: [ "rainy", "weather", "spring" ], "char": "\u2614", fitzpatrick_scale: false, category: "animals_and_nature" }, droplet: { keywords: [ "water", "drip", "faucet", "spring" ], "char": "\ud83d\udca7", fitzpatrick_scale: false, category: "animals_and_nature" }, sweat_drops: { keywords: [ "water", "drip", "oops" ], "char": "\ud83d\udca6", fitzpatrick_scale: false, category: "animals_and_nature" }, ocean: { keywords: [ "sea", "water", "wave", "nature", "tsunami", "disaster" ], "char": "\ud83c\udf0a", fitzpatrick_scale: false, category: "animals_and_nature" }, green_apple: { keywords: [ "fruit", "nature" ], "char": "\ud83c\udf4f", fitzpatrick_scale: false, category: "food_and_drink" }, apple: { keywords: [ "fruit", "mac", "school" ], "char": "\ud83c\udf4e", fitzpatrick_scale: false, category: "food_and_drink" }, pear: { keywords: [ "fruit", "nature", "food" ], "char": "\ud83c\udf50", fitzpatrick_scale: false, category: "food_and_drink" }, tangerine: { keywords: [ "food", "fruit", "nature", "orange" ], "char": "\ud83c\udf4a", fitzpatrick_scale: false, category: "food_and_drink" }, lemon: { keywords: [ "fruit", "nature" ], "char": "\ud83c\udf4b", fitzpatrick_scale: false, category: "food_and_drink" }, banana: { keywords: [ "fruit", "food", "monkey" ], "char": "\ud83c\udf4c", fitzpatrick_scale: false, category: "food_and_drink" }, watermelon: { keywords: [ "fruit", "food", "picnic", "summer" ], "char": "\ud83c\udf49", fitzpatrick_scale: false, category: "food_and_drink" }, grapes: { keywords: [ "fruit", "food", "wine" ], "char": "\ud83c\udf47", fitzpatrick_scale: false, category: "food_and_drink" }, strawberry: { keywords: [ "fruit", "food", "nature" ], "char": "\ud83c\udf53", fitzpatrick_scale: false, category: "food_and_drink" }, melon: { keywords: [ "fruit", "nature", "food" ], "char": "\ud83c\udf48", fitzpatrick_scale: false, category: "food_and_drink" }, cherries: { keywords: [ "food", "fruit" ], "char": "\ud83c\udf52", fitzpatrick_scale: false, category: "food_and_drink" }, peach: { keywords: [ "fruit", "nature", "food" ], "char": "\ud83c\udf51", fitzpatrick_scale: false, category: "food_and_drink" }, pineapple: { keywords: [ "fruit", "nature", "food" ], "char": "\ud83c\udf4d", fitzpatrick_scale: false, category: "food_and_drink" }, coconut: { keywords: [ "fruit", "nature", "food", "palm" ], "char": "\ud83e\udd65", fitzpatrick_scale: false, category: "food_and_drink" }, kiwi_fruit: { keywords: [ "fruit", "food" ], "char": "\ud83e\udd5d", fitzpatrick_scale: false, category: "food_and_drink" }, avocado: { keywords: [ "fruit", "food" ], "char": "\ud83e\udd51", fitzpatrick_scale: false, category: "food_and_drink" }, broccoli: { keywords: [ "fruit", "food", "vegetable" ], "char": "\ud83e\udd66", fitzpatrick_scale: false, category: "food_and_drink" }, tomato: { keywords: [ "fruit", "vegetable", "nature", "food" ], "char": "\ud83c\udf45", fitzpatrick_scale: false, category: "food_and_drink" }, eggplant: { keywords: [ "vegetable", "nature", "food", "aubergine" ], "char": "\ud83c\udf46", fitzpatrick_scale: false, category: "food_and_drink" }, cucumber: { keywords: [ "fruit", "food", "pickle" ], "char": "\ud83e\udd52", fitzpatrick_scale: false, category: "food_and_drink" }, carrot: { keywords: [ "vegetable", "food", "orange" ], "char": "\ud83e\udd55", fitzpatrick_scale: false, category: "food_and_drink" }, hot_pepper: { keywords: [ "food", "spicy", "chilli", "chili" ], "char": "\ud83c\udf36", fitzpatrick_scale: false, category: "food_and_drink" }, potato: { keywords: [ "food", "tuber", "vegatable", "starch" ], "char": "\ud83e\udd54", fitzpatrick_scale: false, category: "food_and_drink" }, corn: { keywords: [ "food", "vegetable", "plant" ], "char": "\ud83c\udf3d", fitzpatrick_scale: false, category: "food_and_drink" }, sweet_potato: { keywords: [ "food", "nature" ], "char": "\ud83c\udf60", fitzpatrick_scale: false, category: "food_and_drink" }, peanuts: { keywords: [ "food", "nut" ], "char": "\ud83e\udd5c", fitzpatrick_scale: false, category: "food_and_drink" }, honey_pot: { keywords: [ "bees", "sweet", "kitchen" ], "char": "\ud83c\udf6f", fitzpatrick_scale: false, category: "food_and_drink" }, croissant: { keywords: [ "food", "bread", "french" ], "char": "\ud83e\udd50", fitzpatrick_scale: false, category: "food_and_drink" }, bread: { keywords: [ "food", "wheat", "breakfast", "toast" ], "char": "\ud83c\udf5e", fitzpatrick_scale: false, category: "food_and_drink" }, baguette_bread: { keywords: [ "food", "bread", "french" ], "char": "\ud83e\udd56", fitzpatrick_scale: false, category: "food_and_drink" }, pretzel: { keywords: [ "food", "bread", "twisted" ], "char": "\ud83e\udd68", fitzpatrick_scale: false, category: "food_and_drink" }, cheese: { keywords: [ "food", "chadder" ], "char": "\ud83e\uddc0", fitzpatrick_scale: false, category: "food_and_drink" }, egg: { keywords: [ "food", "chicken", "breakfast" ], "char": "\ud83e\udd5a", fitzpatrick_scale: false, category: "food_and_drink" }, bacon: { keywords: [ "food", "breakfast", "pork", "pig", "meat" ], "char": "\ud83e\udd53", fitzpatrick_scale: false, category: "food_and_drink" }, steak: { keywords: [ "food", "cow", "meat", "cut", "chop", "lambchop", "porkchop" ], "char": "\ud83e\udd69", fitzpatrick_scale: false, category: "food_and_drink" }, pancakes: { keywords: [ "food", "breakfast", "flapjacks", "hotcakes" ], "char": "\ud83e\udd5e", fitzpatrick_scale: false, category: "food_and_drink" }, poultry_leg: { keywords: [ "food", "meat", "drumstick", "bird", "chicken", "turkey" ], "char": "\ud83c\udf57", fitzpatrick_scale: false, category: "food_and_drink" }, meat_on_bone: { keywords: [ "good", "food", "drumstick" ], "char": "\ud83c\udf56", fitzpatrick_scale: false, category: "food_and_drink" }, fried_shrimp: { keywords: [ "food", "animal", "appetizer", "summer" ], "char": "\ud83c\udf64", fitzpatrick_scale: false, category: "food_and_drink" }, fried_egg: { keywords: [ "food", "breakfast", "kitchen", "egg" ], "char": "\ud83c\udf73", fitzpatrick_scale: false, category: "food_and_drink" }, hamburger: { keywords: [ "meat", "fast food", "beef", "cheeseburger", "mcdonalds", "burger king" ], "char": "\ud83c\udf54", fitzpatrick_scale: false, category: "food_and_drink" }, fries: { keywords: [ "chips", "snack", "fast food" ], "char": "\ud83c\udf5f", fitzpatrick_scale: false, category: "food_and_drink" }, stuffed_flatbread: { keywords: [ "food", "flatbread", "stuffed", "gyro" ], "char": "\ud83e\udd59", fitzpatrick_scale: false, category: "food_and_drink" }, hotdog: { keywords: [ "food", "frankfurter" ], "char": "\ud83c\udf2d", fitzpatrick_scale: false, category: "food_and_drink" }, pizza: { keywords: [ "food", "party" ], "char": "\ud83c\udf55", fitzpatrick_scale: false, category: "food_and_drink" }, sandwich: { keywords: [ "food", "lunch", "bread" ], "char": "\ud83e\udd6a", fitzpatrick_scale: false, category: "food_and_drink" }, canned_food: { keywords: [ "food", "soup" ], "char": "\ud83e\udd6b", fitzpatrick_scale: false, category: "food_and_drink" }, spaghetti: { keywords: [ "food", "italian", "noodle" ], "char": "\ud83c\udf5d", fitzpatrick_scale: false, category: "food_and_drink" }, taco: { keywords: [ "food", "mexican" ], "char": "\ud83c\udf2e", fitzpatrick_scale: false, category: "food_and_drink" }, burrito: { keywords: [ "food", "mexican" ], "char": "\ud83c\udf2f", fitzpatrick_scale: false, category: "food_and_drink" }, green_salad: { keywords: [ "food", "healthy", "lettuce" ], "char": "\ud83e\udd57", fitzpatrick_scale: false, category: "food_and_drink" }, shallow_pan_of_food: { keywords: [ "food", "cooking", "casserole", "paella" ], "char": "\ud83e\udd58", fitzpatrick_scale: false, category: "food_and_drink" }, ramen: { keywords: [ "food", "japanese", "noodle", "chopsticks" ], "char": "\ud83c\udf5c", fitzpatrick_scale: false, category: "food_and_drink" }, stew: { keywords: [ "food", "meat", "soup" ], "char": "\ud83c\udf72", fitzpatrick_scale: false, category: "food_and_drink" }, fish_cake: { keywords: [ "food", "japan", "sea", "beach", "narutomaki", "pink", "swirl", "kamaboko", "surimi", "ramen" ], "char": "\ud83c\udf65", fitzpatrick_scale: false, category: "food_and_drink" }, fortune_cookie: { keywords: [ "food", "prophecy" ], "char": "\ud83e\udd60", fitzpatrick_scale: false, category: "food_and_drink" }, sushi: { keywords: [ "food", "fish", "japanese", "rice" ], "char": "\ud83c\udf63", fitzpatrick_scale: false, category: "food_and_drink" }, bento: { keywords: [ "food", "japanese", "box" ], "char": "\ud83c\udf71", fitzpatrick_scale: false, category: "food_and_drink" }, curry: { keywords: [ "food", "spicy", "hot", "indian" ], "char": "\ud83c\udf5b", fitzpatrick_scale: false, category: "food_and_drink" }, rice_ball: { keywords: [ "food", "japanese" ], "char": "\ud83c\udf59", fitzpatrick_scale: false, category: "food_and_drink" }, rice: { keywords: [ "food", "china", "asian" ], "char": "\ud83c\udf5a", fitzpatrick_scale: false, category: "food_and_drink" }, rice_cracker: { keywords: [ "food", "japanese" ], "char": "\ud83c\udf58", fitzpatrick_scale: false, category: "food_and_drink" }, oden: { keywords: [ "food", "japanese" ], "char": "\ud83c\udf62", fitzpatrick_scale: false, category: "food_and_drink" }, dango: { keywords: [ "food", "dessert", "sweet", "japanese", "barbecue", "meat" ], "char": "\ud83c\udf61", fitzpatrick_scale: false, category: "food_and_drink" }, shaved_ice: { keywords: [ "hot", "dessert", "summer" ], "char": "\ud83c\udf67", fitzpatrick_scale: false, category: "food_and_drink" }, ice_cream: { keywords: [ "food", "hot", "dessert" ], "char": "\ud83c\udf68", fitzpatrick_scale: false, category: "food_and_drink" }, icecream: { keywords: [ "food", "hot", "dessert", "summer" ], "char": "\ud83c\udf66", fitzpatrick_scale: false, category: "food_and_drink" }, pie: { keywords: [ "food", "dessert", "pastry" ], "char": "\ud83e\udd67", fitzpatrick_scale: false, category: "food_and_drink" }, cake: { keywords: [ "food", "dessert" ], "char": "\ud83c\udf70", fitzpatrick_scale: false, category: "food_and_drink" }, birthday: { keywords: [ "food", "dessert", "cake" ], "char": "\ud83c\udf82", fitzpatrick_scale: false, category: "food_and_drink" }, custard: { keywords: [ "dessert", "food" ], "char": "\ud83c\udf6e", fitzpatrick_scale: false, category: "food_and_drink" }, candy: { keywords: [ "snack", "dessert", "sweet", "lolly" ], "char": "\ud83c\udf6c", fitzpatrick_scale: false, category: "food_and_drink" }, lollipop: { keywords: [ "food", "snack", "candy", "sweet" ], "char": "\ud83c\udf6d", fitzpatrick_scale: false, category: "food_and_drink" }, chocolate_bar: { keywords: [ "food", "snack", "dessert", "sweet" ], "char": "\ud83c\udf6b", fitzpatrick_scale: false, category: "food_and_drink" }, popcorn: { keywords: [ "food", "movie theater", "films", "snack" ], "char": "\ud83c\udf7f", fitzpatrick_scale: false, category: "food_and_drink" }, dumpling: { keywords: [ "food", "empanada", "pierogi", "potsticker" ], "char": "\ud83e\udd5f", fitzpatrick_scale: false, category: "food_and_drink" }, doughnut: { keywords: [ "food", "dessert", "snack", "sweet", "donut" ], "char": "\ud83c\udf69", fitzpatrick_scale: false, category: "food_and_drink" }, cookie: { keywords: [ "food", "snack", "oreo", "chocolate", "sweet", "dessert" ], "char": "\ud83c\udf6a", fitzpatrick_scale: false, category: "food_and_drink" }, milk_glass: { keywords: [ "beverage", "drink", "cow" ], "char": "\ud83e\udd5b", fitzpatrick_scale: false, category: "food_and_drink" }, beer: { keywords: [ "relax", "beverage", "drink", "drunk", "party", "pub", "summer", "alcohol", "booze" ], "char": "\ud83c\udf7a", fitzpatrick_scale: false, category: "food_and_drink" }, beers: { keywords: [ "relax", "beverage", "drink", "drunk", "party", "pub", "summer", "alcohol", "booze" ], "char": "\ud83c\udf7b", fitzpatrick_scale: false, category: "food_and_drink" }, clinking_glasses: { keywords: [ "beverage", "drink", "party", "alcohol", "celebrate", "cheers", "wine", "champagne", "toast" ], "char": "\ud83e\udd42", fitzpatrick_scale: false, category: "food_and_drink" }, wine_glass: { keywords: [ "drink", "beverage", "drunk", "alcohol", "booze" ], "char": "\ud83c\udf77", fitzpatrick_scale: false, category: "food_and_drink" }, tumbler_glass: { keywords: [ "drink", "beverage", "drunk", "alcohol", "liquor", "booze", "bourbon", "scotch", "whisky", "glass", "shot" ], "char": "\ud83e\udd43", fitzpatrick_scale: false, category: "food_and_drink" }, cocktail: { keywords: [ "drink", "drunk", "alcohol", "beverage", "booze", "mojito" ], "char": "\ud83c\udf78", fitzpatrick_scale: false, category: "food_and_drink" }, tropical_drink: { keywords: [ "beverage", "cocktail", "summer", "beach", "alcohol", "booze", "mojito" ], "char": "\ud83c\udf79", fitzpatrick_scale: false, category: "food_and_drink" }, champagne: { keywords: [ "drink", "wine", "bottle", "celebration" ], "char": "\ud83c\udf7e", fitzpatrick_scale: false, category: "food_and_drink" }, sake: { keywords: [ "wine", "drink", "drunk", "beverage", "japanese", "alcohol", "booze" ], "char": "\ud83c\udf76", fitzpatrick_scale: false, category: "food_and_drink" }, tea: { keywords: [ "drink", "bowl", "breakfast", "green", "british" ], "char": "\ud83c\udf75", fitzpatrick_scale: false, category: "food_and_drink" }, cup_with_straw: { keywords: [ "drink", "soda" ], "char": "\ud83e\udd64", fitzpatrick_scale: false, category: "food_and_drink" }, coffee: { keywords: [ "beverage", "caffeine", "latte", "espresso" ], "char": "\u2615", fitzpatrick_scale: false, category: "food_and_drink" }, baby_bottle: { keywords: [ "food", "container", "milk" ], "char": "\ud83c\udf7c", fitzpatrick_scale: false, category: "food_and_drink" }, spoon: { keywords: [ "cutlery", "kitchen", "tableware" ], "char": "\ud83e\udd44", fitzpatrick_scale: false, category: "food_and_drink" }, fork_and_knife: { keywords: [ "cutlery", "kitchen" ], "char": "\ud83c\udf74", fitzpatrick_scale: false, category: "food_and_drink" }, plate_with_cutlery: { keywords: [ "food", "eat", "meal", "lunch", "dinner", "restaurant" ], "char": "\ud83c\udf7d", fitzpatrick_scale: false, category: "food_and_drink" }, bowl_with_spoon: { keywords: [ "food", "breakfast", "cereal", "oatmeal", "porridge" ], "char": "\ud83e\udd63", fitzpatrick_scale: false, category: "food_and_drink" }, takeout_box: { keywords: [ "food", "leftovers" ], "char": "\ud83e\udd61", fitzpatrick_scale: false, category: "food_and_drink" }, chopsticks: { keywords: [ "food" ], "char": "\ud83e\udd62", fitzpatrick_scale: false, category: "food_and_drink" }, soccer: { keywords: [ "sports", "football" ], "char": "\u26bd", fitzpatrick_scale: false, category: "activity" }, basketball: { keywords: [ "sports", "balls", "NBA" ], "char": "\ud83c\udfc0", fitzpatrick_scale: false, category: "activity" }, football: { keywords: [ "sports", "balls", "NFL" ], "char": "\ud83c\udfc8", fitzpatrick_scale: false, category: "activity" }, baseball: { keywords: [ "sports", "balls" ], "char": "\u26be", fitzpatrick_scale: false, category: "activity" }, tennis: { keywords: [ "sports", "balls", "green" ], "char": "\ud83c\udfbe", fitzpatrick_scale: false, category: "activity" }, volleyball: { keywords: [ "sports", "balls" ], "char": "\ud83c\udfd0", fitzpatrick_scale: false, category: "activity" }, rugby_football: { keywords: [ "sports", "team" ], "char": "\ud83c\udfc9", fitzpatrick_scale: false, category: "activity" }, "8ball": { keywords: [ "pool", "hobby", "game", "luck", "magic" ], "char": "\ud83c\udfb1", fitzpatrick_scale: false, category: "activity" }, golf: { keywords: [ "sports", "business", "flag", "hole", "summer" ], "char": "\u26f3", fitzpatrick_scale: false, category: "activity" }, golfing_woman: { keywords: [ "sports", "business", "woman", "female" ], "char": "\ud83c\udfcc\ufe0f\u200d\u2640\ufe0f", fitzpatrick_scale: false, category: "activity" }, golfing_man: { keywords: [ "sports", "business" ], "char": "\ud83c\udfcc", fitzpatrick_scale: true, category: "activity" }, ping_pong: { keywords: [ "sports", "pingpong" ], "char": "\ud83c\udfd3", fitzpatrick_scale: false, category: "activity" }, badminton: { keywords: [ "sports" ], "char": "\ud83c\udff8", fitzpatrick_scale: false, category: "activity" }, goal_net: { keywords: [ "sports" ], "char": "\ud83e\udd45", fitzpatrick_scale: false, category: "activity" }, ice_hockey: { keywords: [ "sports" ], "char": "\ud83c\udfd2", fitzpatrick_scale: false, category: "activity" }, field_hockey: { keywords: [ "sports" ], "char": "\ud83c\udfd1", fitzpatrick_scale: false, category: "activity" }, cricket: { keywords: [ "sports" ], "char": "\ud83c\udfcf", fitzpatrick_scale: false, category: "activity" }, ski: { keywords: [ "sports", "winter", "cold", "snow" ], "char": "\ud83c\udfbf", fitzpatrick_scale: false, category: "activity" }, skier: { keywords: [ "sports", "winter", "snow" ], "char": "\u26f7", fitzpatrick_scale: false, category: "activity" }, snowboarder: { keywords: [ "sports", "winter" ], "char": "\ud83c\udfc2", fitzpatrick_scale: true, category: "activity" }, person_fencing: { keywords: [ "sports", "fencing", "sword" ], "char": "\ud83e\udd3a", fitzpatrick_scale: false, category: "activity" }, women_wrestling: { keywords: [ "sports", "wrestlers" ], "char": "\ud83e\udd3c\u200d\u2640\ufe0f", fitzpatrick_scale: false, category: "activity" }, men_wrestling: { keywords: [ "sports", "wrestlers" ], "char": "\ud83e\udd3c\u200d\u2642\ufe0f", fitzpatrick_scale: false, category: "activity" }, woman_cartwheeling: { keywords: [ "gymnastics" ], "char": "\ud83e\udd38\u200d\u2640\ufe0f", fitzpatrick_scale: true, category: "activity" }, man_cartwheeling: { keywords: [ "gymnastics" ], "char": "\ud83e\udd38\u200d\u2642\ufe0f", fitzpatrick_scale: true, category: "activity" }, woman_playing_handball: { keywords: [ "sports" ], "char": "\ud83e\udd3e\u200d\u2640\ufe0f", fitzpatrick_scale: true, category: "activity" }, man_playing_handball: { keywords: [ "sports" ], "char": "\ud83e\udd3e\u200d\u2642\ufe0f", fitzpatrick_scale: true, category: "activity" }, ice_skate: { keywords: [ "sports" ], "char": "\u26f8", fitzpatrick_scale: false, category: "activity" }, curling_stone: { keywords: [ "sports" ], "char": "\ud83e\udd4c", fitzpatrick_scale: false, category: "activity" }, sled: { keywords: [ "sleigh", "luge", "toboggan" ], "char": "\ud83d\udef7", fitzpatrick_scale: false, category: "activity" }, bow_and_arrow: { keywords: [ "sports" ], "char": "\ud83c\udff9", fitzpatrick_scale: false, category: "activity" }, fishing_pole_and_fish: { keywords: [ "food", "hobby", "summer" ], "char": "\ud83c\udfa3", fitzpatrick_scale: false, category: "activity" }, boxing_glove: { keywords: [ "sports", "fighting" ], "char": "\ud83e\udd4a", fitzpatrick_scale: false, category: "activity" }, martial_arts_uniform: { keywords: [ "judo", "karate", "taekwondo" ], "char": "\ud83e\udd4b", fitzpatrick_scale: false, category: "activity" }, rowing_woman: { keywords: [ "sports", "hobby", "water", "ship", "woman", "female" ], "char": "\ud83d\udea3\u200d\u2640\ufe0f", fitzpatrick_scale: true, category: "activity" }, rowing_man: { keywords: [ "sports", "hobby", "water", "ship" ], "char": "\ud83d\udea3", fitzpatrick_scale: true, category: "activity" }, climbing_woman: { keywords: [ "sports", "hobby", "woman", "female", "rock" ], "char": "\ud83e\uddd7\u200d\u2640\ufe0f", fitzpatrick_scale: true, category: "activity" }, climbing_man: { keywords: [ "sports", "hobby", "man", "male", "rock" ], "char": "\ud83e\uddd7\u200d\u2642\ufe0f", fitzpatrick_scale: true, category: "activity" }, swimming_woman: { keywords: [ "sports", "exercise", "human", "athlete", "water", "summer", "woman", "female" ], "char": "\ud83c\udfca\u200d\u2640\ufe0f", fitzpatrick_scale: true, category: "activity" }, swimming_man: { keywords: [ "sports", "exercise", "human", "athlete", "water", "summer" ], "char": "\ud83c\udfca", fitzpatrick_scale: true, category: "activity" }, woman_playing_water_polo: { keywords: [ "sports", "pool" ], "char": "\ud83e\udd3d\u200d\u2640\ufe0f", fitzpatrick_scale: true, category: "activity" }, man_playing_water_polo: { keywords: [ "sports", "pool" ], "char": "\ud83e\udd3d\u200d\u2642\ufe0f", fitzpatrick_scale: true, category: "activity" }, woman_in_lotus_position: { keywords: [ "woman", "female", "meditation", "yoga", "serenity", "zen", "mindfulness" ], "char": "\ud83e\uddd8\u200d\u2640\ufe0f", fitzpatrick_scale: true, category: "activity" }, man_in_lotus_position: { keywords: [ "man", "male", "meditation", "yoga", "serenity", "zen", "mindfulness" ], "char": "\ud83e\uddd8\u200d\u2642\ufe0f", fitzpatrick_scale: true, category: "activity" }, surfing_woman: { keywords: [ "sports", "ocean", "sea", "summer", "beach", "woman", "female" ], "char": "\ud83c\udfc4\u200d\u2640\ufe0f", fitzpatrick_scale: true, category: "activity" }, surfing_man: { keywords: [ "sports", "ocean", "sea", "summer", "beach" ], "char": "\ud83c\udfc4", fitzpatrick_scale: true, category: "activity" }, bath: { keywords: [ "clean", "shower", "bathroom" ], "char": "\ud83d\udec0", fitzpatrick_scale: true, category: "activity" }, basketball_woman: { keywords: [ "sports", "human", "woman", "female" ], "char": "\u26f9\ufe0f\u200d\u2640\ufe0f", fitzpatrick_scale: true, category: "activity" }, basketball_man: { keywords: [ "sports", "human" ], "char": "\u26f9", fitzpatrick_scale: true, category: "activity" }, weight_lifting_woman: { keywords: [ "sports", "training", "exercise", "woman", "female" ], "char": "\ud83c\udfcb\ufe0f\u200d\u2640\ufe0f", fitzpatrick_scale: true, category: "activity" }, weight_lifting_man: { keywords: [ "sports", "training", "exercise" ], "char": "\ud83c\udfcb", fitzpatrick_scale: true, category: "activity" }, biking_woman: { keywords: [ "sports", "bike", "exercise", "hipster", "woman", "female" ], "char": "\ud83d\udeb4\u200d\u2640\ufe0f", fitzpatrick_scale: true, category: "activity" }, biking_man: { keywords: [ "sports", "bike", "exercise", "hipster" ], "char": "\ud83d\udeb4", fitzpatrick_scale: true, category: "activity" }, mountain_biking_woman: { keywords: [ "transportation", "sports", "human", "race", "bike", "woman", "female" ], "char": "\ud83d\udeb5\u200d\u2640\ufe0f", fitzpatrick_scale: true, category: "activity" }, mountain_biking_man: { keywords: [ "transportation", "sports", "human", "race", "bike" ], "char": "\ud83d\udeb5", fitzpatrick_scale: true, category: "activity" }, horse_racing: { keywords: [ "animal", "betting", "competition", "gambling", "luck" ], "char": "\ud83c\udfc7", fitzpatrick_scale: true, category: "activity" }, business_suit_levitating: { keywords: [ "suit", "business", "levitate", "hover", "jump" ], "char": "\ud83d\udd74", fitzpatrick_scale: true, category: "activity" }, trophy: { keywords: [ "win", "award", "contest", "place", "ftw", "ceremony" ], "char": "\ud83c\udfc6", fitzpatrick_scale: false, category: "activity" }, running_shirt_with_sash: { keywords: [ "play", "pageant" ], "char": "\ud83c\udfbd", fitzpatrick_scale: false, category: "activity" }, medal_sports: { keywords: [ "award", "winning" ], "char": "\ud83c\udfc5", fitzpatrick_scale: false, category: "activity" }, medal_military: { keywords: [ "award", "winning", "army" ], "char": "\ud83c\udf96", fitzpatrick_scale: false, category: "activity" }, "1st_place_medal": { keywords: [ "award", "winning", "first" ], "char": "\ud83e\udd47", fitzpatrick_scale: false, category: "activity" }, "2nd_place_medal": { keywords: [ "award", "second" ], "char": "\ud83e\udd48", fitzpatrick_scale: false, category: "activity" }, "3rd_place_medal": { keywords: [ "award", "third" ], "char": "\ud83e\udd49", fitzpatrick_scale: false, category: "activity" }, reminder_ribbon: { keywords: [ "sports", "cause", "support", "awareness" ], "char": "\ud83c\udf97", fitzpatrick_scale: false, category: "activity" }, rosette: { keywords: [ "flower", "decoration", "military" ], "char": "\ud83c\udff5", fitzpatrick_scale: false, category: "activity" }, ticket: { keywords: [ "event", "concert", "pass" ], "char": "\ud83c\udfab", fitzpatrick_scale: false, category: "activity" }, tickets: { keywords: [ "sports", "concert", "entrance" ], "char": "\ud83c\udf9f", fitzpatrick_scale: false, category: "activity" }, performing_arts: { keywords: [ "acting", "theater", "drama" ], "char": "\ud83c\udfad", fitzpatrick_scale: false, category: "activity" }, art: { keywords: [ "design", "paint", "draw", "colors" ], "char": "\ud83c\udfa8", fitzpatrick_scale: false, category: "activity" }, circus_tent: { keywords: [ "festival", "carnival", "party" ], "char": "\ud83c\udfaa", fitzpatrick_scale: false, category: "activity" }, woman_juggling: { keywords: [ "juggle", "balance", "skill", "multitask" ], "char": "\ud83e\udd39\u200d\u2640\ufe0f", fitzpatrick_scale: true, category: "activity" }, man_juggling: { keywords: [ "juggle", "balance", "skill", "multitask" ], "char": "\ud83e\udd39\u200d\u2642\ufe0f", fitzpatrick_scale: true, category: "activity" }, microphone: { keywords: [ "sound", "music", "PA", "sing", "talkshow" ], "char": "\ud83c\udfa4", fitzpatrick_scale: false, category: "activity" }, headphones: { keywords: [ "music", "score", "gadgets" ], "char": "\ud83c\udfa7", fitzpatrick_scale: false, category: "activity" }, musical_score: { keywords: [ "treble", "clef", "compose" ], "char": "\ud83c\udfbc", fitzpatrick_scale: false, category: "activity" }, musical_keyboard: { keywords: [ "piano", "instrument", "compose" ], "char": "\ud83c\udfb9", fitzpatrick_scale: false, category: "activity" }, drum: { keywords: [ "music", "instrument", "drumsticks", "snare" ], "char": "\ud83e\udd41", fitzpatrick_scale: false, category: "activity" }, saxophone: { keywords: [ "music", "instrument", "jazz", "blues" ], "char": "\ud83c\udfb7", fitzpatrick_scale: false, category: "activity" }, trumpet: { keywords: [ "music", "brass" ], "char": "\ud83c\udfba", fitzpatrick_scale: false, category: "activity" }, guitar: { keywords: [ "music", "instrument" ], "char": "\ud83c\udfb8", fitzpatrick_scale: false, category: "activity" }, violin: { keywords: [ "music", "instrument", "orchestra", "symphony" ], "char": "\ud83c\udfbb", fitzpatrick_scale: false, category: "activity" }, clapper: { keywords: [ "movie", "film", "record" ], "char": "\ud83c\udfac", fitzpatrick_scale: false, category: "activity" }, video_game: { keywords: [ "play", "console", "PS4", "controller" ], "char": "\ud83c\udfae", fitzpatrick_scale: false, category: "activity" }, space_invader: { keywords: [ "game", "arcade", "play" ], "char": "\ud83d\udc7e", fitzpatrick_scale: false, category: "activity" }, dart: { keywords: [ "game", "play", "bar", "target", "bullseye" ], "char": "\ud83c\udfaf", fitzpatrick_scale: false, category: "activity" }, game_die: { keywords: [ "dice", "random", "tabletop", "play", "luck" ], "char": "\ud83c\udfb2", fitzpatrick_scale: false, category: "activity" }, slot_machine: { keywords: [ "bet", "gamble", "vegas", "fruit machine", "luck", "casino" ], "char": "\ud83c\udfb0", fitzpatrick_scale: false, category: "activity" }, bowling: { keywords: [ "sports", "fun", "play" ], "char": "\ud83c\udfb3", fitzpatrick_scale: false, category: "activity" }, red_car: { keywords: [ "red", "transportation", "vehicle" ], "char": "\ud83d\ude97", fitzpatrick_scale: false, category: "travel_and_places" }, taxi: { keywords: [ "uber", "vehicle", "cars", "transportation" ], "char": "\ud83d\ude95", fitzpatrick_scale: false, category: "travel_and_places" }, blue_car: { keywords: [ "transportation", "vehicle" ], "char": "\ud83d\ude99", fitzpatrick_scale: false, category: "travel_and_places" }, bus: { keywords: [ "car", "vehicle", "transportation" ], "char": "\ud83d\ude8c", fitzpatrick_scale: false, category: "travel_and_places" }, trolleybus: { keywords: [ "bart", "transportation", "vehicle" ], "char": "\ud83d\ude8e", fitzpatrick_scale: false, category: "travel_and_places" }, racing_car: { keywords: [ "sports", "race", "fast", "formula", "f1" ], "char": "\ud83c\udfce", fitzpatrick_scale: false, category: "travel_and_places" }, police_car: { keywords: [ "vehicle", "cars", "transportation", "law", "legal", "enforcement" ], "char": "\ud83d\ude93", fitzpatrick_scale: false, category: "travel_and_places" }, ambulance: { keywords: [ "health", "911", "hospital" ], "char": "\ud83d\ude91", fitzpatrick_scale: false, category: "travel_and_places" }, fire_engine: { keywords: [ "transportation", "cars", "vehicle" ], "char": "\ud83d\ude92", fitzpatrick_scale: false, category: "travel_and_places" }, minibus: { keywords: [ "vehicle", "car", "transportation" ], "char": "\ud83d\ude90", fitzpatrick_scale: false, category: "travel_and_places" }, truck: { keywords: [ "cars", "transportation" ], "char": "\ud83d\ude9a", fitzpatrick_scale: false, category: "travel_and_places" }, articulated_lorry: { keywords: [ "vehicle", "cars", "transportation", "express" ], "char": "\ud83d\ude9b", fitzpatrick_scale: false, category: "travel_and_places" }, tractor: { keywords: [ "vehicle", "car", "farming", "agriculture" ], "char": "\ud83d\ude9c", fitzpatrick_scale: false, category: "travel_and_places" }, kick_scooter: { keywords: [ "vehicle", "kick", "razor" ], "char": "\ud83d\udef4", fitzpatrick_scale: false, category: "travel_and_places" }, motorcycle: { keywords: [ "race", "sports", "fast" ], "char": "\ud83c\udfcd", fitzpatrick_scale: false, category: "travel_and_places" }, bike: { keywords: [ "sports", "bicycle", "exercise", "hipster" ], "char": "\ud83d\udeb2", fitzpatrick_scale: false, category: "travel_and_places" }, motor_scooter: { keywords: [ "vehicle", "vespa", "sasha" ], "char": "\ud83d\udef5", fitzpatrick_scale: false, category: "travel_and_places" }, rotating_light: { keywords: [ "police", "ambulance", "911", "emergency", "alert", "error", "pinged", "law", "legal" ], "char": "\ud83d\udea8", fitzpatrick_scale: false, category: "travel_and_places" }, oncoming_police_car: { keywords: [ "vehicle", "law", "legal", "enforcement", "911" ], "char": "\ud83d\ude94", fitzpatrick_scale: false, category: "travel_and_places" }, oncoming_bus: { keywords: [ "vehicle", "transportation" ], "char": "\ud83d\ude8d", fitzpatrick_scale: false, category: "travel_and_places" }, oncoming_automobile: { keywords: [ "car", "vehicle", "transportation" ], "char": "\ud83d\ude98", fitzpatrick_scale: false, category: "travel_and_places" }, oncoming_taxi: { keywords: [ "vehicle", "cars", "uber" ], "char": "\ud83d\ude96", fitzpatrick_scale: false, category: "travel_and_places" }, aerial_tramway: { keywords: [ "transportation", "vehicle", "ski" ], "char": "\ud83d\udea1", fitzpatrick_scale: false, category: "travel_and_places" }, mountain_cableway: { keywords: [ "transportation", "vehicle", "ski" ], "char": "\ud83d\udea0", fitzpatrick_scale: false, category: "travel_and_places" }, suspension_railway: { keywords: [ "vehicle", "transportation" ], "char": "\ud83d\ude9f", fitzpatrick_scale: false, category: "travel_and_places" }, railway_car: { keywords: [ "transportation", "vehicle" ], "char": "\ud83d\ude83", fitzpatrick_scale: false, category: "travel_and_places" }, train: { keywords: [ "transportation", "vehicle", "carriage", "public", "travel" ], "char": "\ud83d\ude8b", fitzpatrick_scale: false, category: "travel_and_places" }, monorail: { keywords: [ "transportation", "vehicle" ], "char": "\ud83d\ude9d", fitzpatrick_scale: false, category: "travel_and_places" }, bullettrain_side: { keywords: [ "transportation", "vehicle" ], "char": "\ud83d\ude84", fitzpatrick_scale: false, category: "travel_and_places" }, bullettrain_front: { keywords: [ "transportation", "vehicle", "speed", "fast", "public", "travel" ], "char": "\ud83d\ude85", fitzpatrick_scale: false, category: "travel_and_places" }, light_rail: { keywords: [ "transportation", "vehicle" ], "char": "\ud83d\ude88", fitzpatrick_scale: false, category: "travel_and_places" }, mountain_railway: { keywords: [ "transportation", "vehicle" ], "char": "\ud83d\ude9e", fitzpatrick_scale: false, category: "travel_and_places" }, steam_locomotive: { keywords: [ "transportation", "vehicle", "train" ], "char": "\ud83d\ude82", fitzpatrick_scale: false, category: "travel_and_places" }, train2: { keywords: [ "transportation", "vehicle" ], "char": "\ud83d\ude86", fitzpatrick_scale: false, category: "travel_and_places" }, metro: { keywords: [ "transportation", "blue-square", "mrt", "underground", "tube" ], "char": "\ud83d\ude87", fitzpatrick_scale: false, category: "travel_and_places" }, tram: { keywords: [ "transportation", "vehicle" ], "char": "\ud83d\ude8a", fitzpatrick_scale: false, category: "travel_and_places" }, station: { keywords: [ "transportation", "vehicle", "public" ], "char": "\ud83d\ude89", fitzpatrick_scale: false, category: "travel_and_places" }, flying_saucer: { keywords: [ "transportation", "vehicle", "ufo" ], "char": "\ud83d\udef8", fitzpatrick_scale: false, category: "travel_and_places" }, helicopter: { keywords: [ "transportation", "vehicle", "fly" ], "char": "\ud83d\ude81", fitzpatrick_scale: false, category: "travel_and_places" }, small_airplane: { keywords: [ "flight", "transportation", "fly", "vehicle" ], "char": "\ud83d\udee9", fitzpatrick_scale: false, category: "travel_and_places" }, airplane: { keywords: [ "vehicle", "transportation", "flight", "fly" ], "char": "\u2708\ufe0f", fitzpatrick_scale: false, category: "travel_and_places" }, flight_departure: { keywords: [ "airport", "flight", "landing" ], "char": "\ud83d\udeeb", fitzpatrick_scale: false, category: "travel_and_places" }, flight_arrival: { keywords: [ "airport", "flight", "boarding" ], "char": "\ud83d\udeec", fitzpatrick_scale: false, category: "travel_and_places" }, sailboat: { keywords: [ "ship", "summer", "transportation", "water", "sailing" ], "char": "\u26f5", fitzpatrick_scale: false, category: "travel_and_places" }, motor_boat: { keywords: [ "ship" ], "char": "\ud83d\udee5", fitzpatrick_scale: false, category: "travel_and_places" }, speedboat: { keywords: [ "ship", "transportation", "vehicle", "summer" ], "char": "\ud83d\udea4", fitzpatrick_scale: false, category: "travel_and_places" }, ferry: { keywords: [ "boat", "ship", "yacht" ], "char": "\u26f4", fitzpatrick_scale: false, category: "travel_and_places" }, passenger_ship: { keywords: [ "yacht", "cruise", "ferry" ], "char": "\ud83d\udef3", fitzpatrick_scale: false, category: "travel_and_places" }, rocket: { keywords: [ "launch", "ship", "staffmode", "NASA", "outer space", "outer_space", "fly" ], "char": "\ud83d\ude80", fitzpatrick_scale: false, category: "travel_and_places" }, artificial_satellite: { keywords: [ "communication", "gps", "orbit", "spaceflight", "NASA", "ISS" ], "char": "\ud83d\udef0", fitzpatrick_scale: false, category: "travel_and_places" }, seat: { keywords: [ "sit", "airplane", "transport", "bus", "flight", "fly" ], "char": "\ud83d\udcba", fitzpatrick_scale: false, category: "travel_and_places" }, canoe: { keywords: [ "boat", "paddle", "water", "ship" ], "char": "\ud83d\udef6", fitzpatrick_scale: false, category: "travel_and_places" }, anchor: { keywords: [ "ship", "ferry", "sea", "boat" ], "char": "\u2693", fitzpatrick_scale: false, category: "travel_and_places" }, construction: { keywords: [ "wip", "progress", "caution", "warning" ], "char": "\ud83d\udea7", fitzpatrick_scale: false, category: "travel_and_places" }, fuelpump: { keywords: [ "gas station", "petroleum" ], "char": "\u26fd", fitzpatrick_scale: false, category: "travel_and_places" }, busstop: { keywords: [ "transportation", "wait" ], "char": "\ud83d\ude8f", fitzpatrick_scale: false, category: "travel_and_places" }, vertical_traffic_light: { keywords: [ "transportation", "driving" ], "char": "\ud83d\udea6", fitzpatrick_scale: false, category: "travel_and_places" }, traffic_light: { keywords: [ "transportation", "signal" ], "char": "\ud83d\udea5", fitzpatrick_scale: false, category: "travel_and_places" }, checkered_flag: { keywords: [ "contest", "finishline", "race", "gokart" ], "char": "\ud83c\udfc1", fitzpatrick_scale: false, category: "travel_and_places" }, ship: { keywords: [ "transportation", "titanic", "deploy" ], "char": "\ud83d\udea2", fitzpatrick_scale: false, category: "travel_and_places" }, ferris_wheel: { keywords: [ "photo", "carnival", "londoneye" ], "char": "\ud83c\udfa1", fitzpatrick_scale: false, category: "travel_and_places" }, roller_coaster: { keywords: [ "carnival", "playground", "photo", "fun" ], "char": "\ud83c\udfa2", fitzpatrick_scale: false, category: "travel_and_places" }, carousel_horse: { keywords: [ "photo", "carnival" ], "char": "\ud83c\udfa0", fitzpatrick_scale: false, category: "travel_and_places" }, building_construction: { keywords: [ "wip", "working", "progress" ], "char": "\ud83c\udfd7", fitzpatrick_scale: false, category: "travel_and_places" }, foggy: { keywords: [ "photo", "mountain" ], "char": "\ud83c\udf01", fitzpatrick_scale: false, category: "travel_and_places" }, tokyo_tower: { keywords: [ "photo", "japanese" ], "char": "\ud83d\uddfc", fitzpatrick_scale: false, category: "travel_and_places" }, factory: { keywords: [ "building", "industry", "pollution", "smoke" ], "char": "\ud83c\udfed", fitzpatrick_scale: false, category: "travel_and_places" }, fountain: { keywords: [ "photo", "summer", "water", "fresh" ], "char": "\u26f2", fitzpatrick_scale: false, category: "travel_and_places" }, rice_scene: { keywords: [ "photo", "japan", "asia", "tsukimi" ], "char": "\ud83c\udf91", fitzpatrick_scale: false, category: "travel_and_places" }, mountain: { keywords: [ "photo", "nature", "environment" ], "char": "\u26f0", fitzpatrick_scale: false, category: "travel_and_places" }, mountain_snow: { keywords: [ "photo", "nature", "environment", "winter", "cold" ], "char": "\ud83c\udfd4", fitzpatrick_scale: false, category: "travel_and_places" }, mount_fuji: { keywords: [ "photo", "mountain", "nature", "japanese" ], "char": "\ud83d\uddfb", fitzpatrick_scale: false, category: "travel_and_places" }, volcano: { keywords: [ "photo", "nature", "disaster" ], "char": "\ud83c\udf0b", fitzpatrick_scale: false, category: "travel_and_places" }, japan: { keywords: [ "nation", "country", "japanese", "asia" ], "char": "\ud83d\uddfe", fitzpatrick_scale: false, category: "travel_and_places" }, camping: { keywords: [ "photo", "outdoors", "tent" ], "char": "\ud83c\udfd5", fitzpatrick_scale: false, category: "travel_and_places" }, tent: { keywords: [ "photo", "camping", "outdoors" ], "char": "\u26fa", fitzpatrick_scale: false, category: "travel_and_places" }, national_park: { keywords: [ "photo", "environment", "nature" ], "char": "\ud83c\udfde", fitzpatrick_scale: false, category: "travel_and_places" }, motorway: { keywords: [ "road", "cupertino", "interstate", "highway" ], "char": "\ud83d\udee3", fitzpatrick_scale: false, category: "travel_and_places" }, railway_track: { keywords: [ "train", "transportation" ], "char": "\ud83d\udee4", fitzpatrick_scale: false, category: "travel_and_places" }, sunrise: { keywords: [ "morning", "view", "vacation", "photo" ], "char": "\ud83c\udf05", fitzpatrick_scale: false, category: "travel_and_places" }, sunrise_over_mountains: { keywords: [ "view", "vacation", "photo" ], "char": "\ud83c\udf04", fitzpatrick_scale: false, category: "travel_and_places" }, desert: { keywords: [ "photo", "warm", "saharah" ], "char": "\ud83c\udfdc", fitzpatrick_scale: false, category: "travel_and_places" }, beach_umbrella: { keywords: [ "weather", "summer", "sunny", "sand", "mojito" ], "char": "\ud83c\udfd6", fitzpatrick_scale: false, category: "travel_and_places" }, desert_island: { keywords: [ "photo", "tropical", "mojito" ], "char": "\ud83c\udfdd", fitzpatrick_scale: false, category: "travel_and_places" }, city_sunrise: { keywords: [ "photo", "good morning", "dawn" ], "char": "\ud83c\udf07", fitzpatrick_scale: false, category: "travel_and_places" }, city_sunset: { keywords: [ "photo", "evening", "sky", "buildings" ], "char": "\ud83c\udf06", fitzpatrick_scale: false, category: "travel_and_places" }, cityscape: { keywords: [ "photo", "night life", "urban" ], "char": "\ud83c\udfd9", fitzpatrick_scale: false, category: "travel_and_places" }, night_with_stars: { keywords: [ "evening", "city", "downtown" ], "char": "\ud83c\udf03", fitzpatrick_scale: false, category: "travel_and_places" }, bridge_at_night: { keywords: [ "photo", "sanfrancisco" ], "char": "\ud83c\udf09", fitzpatrick_scale: false, category: "travel_and_places" }, milky_way: { keywords: [ "photo", "space", "stars" ], "char": "\ud83c\udf0c", fitzpatrick_scale: false, category: "travel_and_places" }, stars: { keywords: [ "night", "photo" ], "char": "\ud83c\udf20", fitzpatrick_scale: false, category: "travel_and_places" }, sparkler: { keywords: [ "stars", "night", "shine" ], "char": "\ud83c\udf87", fitzpatrick_scale: false, category: "travel_and_places" }, fireworks: { keywords: [ "photo", "festival", "carnival", "congratulations" ], "char": "\ud83c\udf86", fitzpatrick_scale: false, category: "travel_and_places" }, rainbow: { keywords: [ "nature", "happy", "unicorn_face", "photo", "sky", "spring" ], "char": "\ud83c\udf08", fitzpatrick_scale: false, category: "travel_and_places" }, houses: { keywords: [ "buildings", "photo" ], "char": "\ud83c\udfd8", fitzpatrick_scale: false, category: "travel_and_places" }, european_castle: { keywords: [ "building", "royalty", "history" ], "char": "\ud83c\udff0", fitzpatrick_scale: false, category: "travel_and_places" }, japanese_castle: { keywords: [ "photo", "building" ], "char": "\ud83c\udfef", fitzpatrick_scale: false, category: "travel_and_places" }, stadium: { keywords: [ "photo", "place", "sports", "concert", "venue" ], "char": "\ud83c\udfdf", fitzpatrick_scale: false, category: "travel_and_places" }, statue_of_liberty: { keywords: [ "american", "newyork" ], "char": "\ud83d\uddfd", fitzpatrick_scale: false, category: "travel_and_places" }, house: { keywords: [ "building", "home" ], "char": "\ud83c\udfe0", fitzpatrick_scale: false, category: "travel_and_places" }, house_with_garden: { keywords: [ "home", "plant", "nature" ], "char": "\ud83c\udfe1", fitzpatrick_scale: false, category: "travel_and_places" }, derelict_house: { keywords: [ "abandon", "evict", "broken", "building" ], "char": "\ud83c\udfda", fitzpatrick_scale: false, category: "travel_and_places" }, office: { keywords: [ "building", "bureau", "work" ], "char": "\ud83c\udfe2", fitzpatrick_scale: false, category: "travel_and_places" }, department_store: { keywords: [ "building", "shopping", "mall" ], "char": "\ud83c\udfec", fitzpatrick_scale: false, category: "travel_and_places" }, post_office: { keywords: [ "building", "envelope", "communication" ], "char": "\ud83c\udfe3", fitzpatrick_scale: false, category: "travel_and_places" }, european_post_office: { keywords: [ "building", "email" ], "char": "\ud83c\udfe4", fitzpatrick_scale: false, category: "travel_and_places" }, hospital: { keywords: [ "building", "health", "surgery", "doctor" ], "char": "\ud83c\udfe5", fitzpatrick_scale: false, category: "travel_and_places" }, bank: { keywords: [ "building", "money", "sales", "cash", "business", "enterprise" ], "char": "\ud83c\udfe6", fitzpatrick_scale: false, category: "travel_and_places" }, hotel: { keywords: [ "building", "accomodation", "checkin" ], "char": "\ud83c\udfe8", fitzpatrick_scale: false, category: "travel_and_places" }, convenience_store: { keywords: [ "building", "shopping", "groceries" ], "char": "\ud83c\udfea", fitzpatrick_scale: false, category: "travel_and_places" }, school: { keywords: [ "building", "student", "education", "learn", "teach" ], "char": "\ud83c\udfeb", fitzpatrick_scale: false, category: "travel_and_places" }, love_hotel: { keywords: [ "like", "affection", "dating" ], "char": "\ud83c\udfe9", fitzpatrick_scale: false, category: "travel_and_places" }, wedding: { keywords: [ "love", "like", "affection", "couple", "marriage", "bride", "groom" ], "char": "\ud83d\udc92", fitzpatrick_scale: false, category: "travel_and_places" }, classical_building: { keywords: [ "art", "culture", "history" ], "char": "\ud83c\udfdb", fitzpatrick_scale: false, category: "travel_and_places" }, church: { keywords: [ "building", "religion", "christ" ], "char": "\u26ea", fitzpatrick_scale: false, category: "travel_and_places" }, mosque: { keywords: [ "islam", "worship", "minaret" ], "char": "\ud83d\udd4c", fitzpatrick_scale: false, category: "travel_and_places" }, synagogue: { keywords: [ "judaism", "worship", "temple", "jewish" ], "char": "\ud83d\udd4d", fitzpatrick_scale: false, category: "travel_and_places" }, kaaba: { keywords: [ "mecca", "mosque", "islam" ], "char": "\ud83d\udd4b", fitzpatrick_scale: false, category: "travel_and_places" }, shinto_shrine: { keywords: [ "temple", "japan", "kyoto" ], "char": "\u26e9", fitzpatrick_scale: false, category: "travel_and_places" }, watch: { keywords: [ "time", "accessories" ], "char": "\u231a", fitzpatrick_scale: false, category: "objects" }, iphone: { keywords: [ "technology", "apple", "gadgets", "dial" ], "char": "\ud83d\udcf1", fitzpatrick_scale: false, category: "objects" }, calling: { keywords: [ "iphone", "incoming" ], "char": "\ud83d\udcf2", fitzpatrick_scale: false, category: "objects" }, computer: { keywords: [ "technology", "laptop", "screen", "display", "monitor" ], "char": "\ud83d\udcbb", fitzpatrick_scale: false, category: "objects" }, keyboard: { keywords: [ "technology", "computer", "type", "input", "text" ], "char": "\u2328", fitzpatrick_scale: false, category: "objects" }, desktop_computer: { keywords: [ "technology", "computing", "screen" ], "char": "\ud83d\udda5", fitzpatrick_scale: false, category: "objects" }, printer: { keywords: [ "paper", "ink" ], "char": "\ud83d\udda8", fitzpatrick_scale: false, category: "objects" }, computer_mouse: { keywords: [ "click" ], "char": "\ud83d\uddb1", fitzpatrick_scale: false, category: "objects" }, trackball: { keywords: [ "technology", "trackpad" ], "char": "\ud83d\uddb2", fitzpatrick_scale: false, category: "objects" }, joystick: { keywords: [ "game", "play" ], "char": "\ud83d\udd79", fitzpatrick_scale: false, category: "objects" }, clamp: { keywords: [ "tool" ], "char": "\ud83d\udddc", fitzpatrick_scale: false, category: "objects" }, minidisc: { keywords: [ "technology", "record", "data", "disk", "90s" ], "char": "\ud83d\udcbd", fitzpatrick_scale: false, category: "objects" }, floppy_disk: { keywords: [ "oldschool", "technology", "save", "90s", "80s" ], "char": "\ud83d\udcbe", fitzpatrick_scale: false, category: "objects" }, cd: { keywords: [ "technology", "dvd", "disk", "disc", "90s" ], "char": "\ud83d\udcbf", fitzpatrick_scale: false, category: "objects" }, dvd: { keywords: [ "cd", "disk", "disc" ], "char": "\ud83d\udcc0", fitzpatrick_scale: false, category: "objects" }, vhs: { keywords: [ "record", "video", "oldschool", "90s", "80s" ], "char": "\ud83d\udcfc", fitzpatrick_scale: false, category: "objects" }, camera: { keywords: [ "gadgets", "photography" ], "char": "\ud83d\udcf7", fitzpatrick_scale: false, category: "objects" }, camera_flash: { keywords: [ "photography", "gadgets" ], "char": "\ud83d\udcf8", fitzpatrick_scale: false, category: "objects" }, video_camera: { keywords: [ "film", "record" ], "char": "\ud83d\udcf9", fitzpatrick_scale: false, category: "objects" }, movie_camera: { keywords: [ "film", "record" ], "char": "\ud83c\udfa5", fitzpatrick_scale: false, category: "objects" }, film_projector: { keywords: [ "video", "tape", "record", "movie" ], "char": "\ud83d\udcfd", fitzpatrick_scale: false, category: "objects" }, film_strip: { keywords: [ "movie" ], "char": "\ud83c\udf9e", fitzpatrick_scale: false, category: "objects" }, telephone_receiver: { keywords: [ "technology", "communication", "dial" ], "char": "\ud83d\udcde", fitzpatrick_scale: false, category: "objects" }, phone: { keywords: [ "technology", "communication", "dial", "telephone" ], "char": "\u260e\ufe0f", fitzpatrick_scale: false, category: "objects" }, pager: { keywords: [ "bbcall", "oldschool", "90s" ], "char": "\ud83d\udcdf", fitzpatrick_scale: false, category: "objects" }, fax: { keywords: [ "communication", "technology" ], "char": "\ud83d\udce0", fitzpatrick_scale: false, category: "objects" }, tv: { keywords: [ "technology", "program", "oldschool", "show", "television" ], "char": "\ud83d\udcfa", fitzpatrick_scale: false, category: "objects" }, radio: { keywords: [ "communication", "music", "podcast", "program" ], "char": "\ud83d\udcfb", fitzpatrick_scale: false, category: "objects" }, studio_microphone: { keywords: [ "sing", "recording", "artist", "talkshow" ], "char": "\ud83c\udf99", fitzpatrick_scale: false, category: "objects" }, level_slider: { keywords: [ "scale" ], "char": "\ud83c\udf9a", fitzpatrick_scale: false, category: "objects" }, control_knobs: { keywords: [ "dial" ], "char": "\ud83c\udf9b", fitzpatrick_scale: false, category: "objects" }, stopwatch: { keywords: [ "time", "deadline" ], "char": "\u23f1", fitzpatrick_scale: false, category: "objects" }, timer_clock: { keywords: [ "alarm" ], "char": "\u23f2", fitzpatrick_scale: false, category: "objects" }, alarm_clock: { keywords: [ "time", "wake" ], "char": "\u23f0", fitzpatrick_scale: false, category: "objects" }, mantelpiece_clock: { keywords: [ "time" ], "char": "\ud83d\udd70", fitzpatrick_scale: false, category: "objects" }, hourglass_flowing_sand: { keywords: [ "oldschool", "time", "countdown" ], "char": "\u23f3", fitzpatrick_scale: false, category: "objects" }, hourglass: { keywords: [ "time", "clock", "oldschool", "limit", "exam", "quiz", "test" ], "char": "\u231b", fitzpatrick_scale: false, category: "objects" }, satellite: { keywords: [ "communication", "future", "radio", "space" ], "char": "\ud83d\udce1", fitzpatrick_scale: false, category: "objects" }, battery: { keywords: [ "power", "energy", "sustain" ], "char": "\ud83d\udd0b", fitzpatrick_scale: false, category: "objects" }, electric_plug: { keywords: [ "charger", "power" ], "char": "\ud83d\udd0c", fitzpatrick_scale: false, category: "objects" }, bulb: { keywords: [ "light", "electricity", "idea" ], "char": "\ud83d\udca1", fitzpatrick_scale: false, category: "objects" }, flashlight: { keywords: [ "dark", "camping", "sight", "night" ], "char": "\ud83d\udd26", fitzpatrick_scale: false, category: "objects" }, candle: { keywords: [ "fire", "wax" ], "char": "\ud83d\udd6f", fitzpatrick_scale: false, category: "objects" }, wastebasket: { keywords: [ "bin", "trash", "rubbish", "garbage", "toss" ], "char": "\ud83d\uddd1", fitzpatrick_scale: false, category: "objects" }, oil_drum: { keywords: [ "barrell" ], "char": "\ud83d\udee2", fitzpatrick_scale: false, category: "objects" }, money_with_wings: { keywords: [ "dollar", "bills", "payment", "sale" ], "char": "\ud83d\udcb8", fitzpatrick_scale: false, category: "objects" }, dollar: { keywords: [ "money", "sales", "bill", "currency" ], "char": "\ud83d\udcb5", fitzpatrick_scale: false, category: "objects" }, yen: { keywords: [ "money", "sales", "japanese", "dollar", "currency" ], "char": "\ud83d\udcb4", fitzpatrick_scale: false, category: "objects" }, euro: { keywords: [ "money", "sales", "dollar", "currency" ], "char": "\ud83d\udcb6", fitzpatrick_scale: false, category: "objects" }, pound: { keywords: [ "british", "sterling", "money", "sales", "bills", "uk", "england", "currency" ], "char": "\ud83d\udcb7", fitzpatrick_scale: false, category: "objects" }, moneybag: { keywords: [ "dollar", "payment", "coins", "sale" ], "char": "\ud83d\udcb0", fitzpatrick_scale: false, category: "objects" }, credit_card: { keywords: [ "money", "sales", "dollar", "bill", "payment", "shopping" ], "char": "\ud83d\udcb3", fitzpatrick_scale: false, category: "objects" }, gem: { keywords: [ "blue", "ruby", "diamond", "jewelry" ], "char": "\ud83d\udc8e", fitzpatrick_scale: false, category: "objects" }, balance_scale: { keywords: [ "law", "fairness", "weight" ], "char": "\u2696", fitzpatrick_scale: false, category: "objects" }, wrench: { keywords: [ "tools", "diy", "ikea", "fix", "maintainer" ], "char": "\ud83d\udd27", fitzpatrick_scale: false, category: "objects" }, hammer: { keywords: [ "tools", "build", "create" ], "char": "\ud83d\udd28", fitzpatrick_scale: false, category: "objects" }, hammer_and_pick: { keywords: [ "tools", "build", "create" ], "char": "\u2692", fitzpatrick_scale: false, category: "objects" }, hammer_and_wrench: { keywords: [ "tools", "build", "create" ], "char": "\ud83d\udee0", fitzpatrick_scale: false, category: "objects" }, pick: { keywords: [ "tools", "dig" ], "char": "\u26cf", fitzpatrick_scale: false, category: "objects" }, nut_and_bolt: { keywords: [ "handy", "tools", "fix" ], "char": "\ud83d\udd29", fitzpatrick_scale: false, category: "objects" }, gear: { keywords: [ "cog" ], "char": "\u2699", fitzpatrick_scale: false, category: "objects" }, chains: { keywords: [ "lock", "arrest" ], "char": "\u26d3", fitzpatrick_scale: false, category: "objects" }, gun: { keywords: [ "violence", "weapon", "pistol", "revolver" ], "char": "\ud83d\udd2b", fitzpatrick_scale: false, category: "objects" }, bomb: { keywords: [ "boom", "explode", "explosion", "terrorism" ], "char": "\ud83d\udca3", fitzpatrick_scale: false, category: "objects" }, hocho: { keywords: [ "knife", "blade", "cutlery", "kitchen", "weapon" ], "char": "\ud83d\udd2a", fitzpatrick_scale: false, category: "objects" }, dagger: { keywords: [ "weapon" ], "char": "\ud83d\udde1", fitzpatrick_scale: false, category: "objects" }, crossed_swords: { keywords: [ "weapon" ], "char": "\u2694", fitzpatrick_scale: false, category: "objects" }, shield: { keywords: [ "protection", "security" ], "char": "\ud83d\udee1", fitzpatrick_scale: false, category: "objects" }, smoking: { keywords: [ "kills", "tobacco", "cigarette", "joint", "smoke" ], "char": "\ud83d\udeac", fitzpatrick_scale: false, category: "objects" }, skull_and_crossbones: { keywords: [ "poison", "danger", "deadly", "scary", "death", "pirate", "evil" ], "char": "\u2620", fitzpatrick_scale: false, category: "objects" }, coffin: { keywords: [ "vampire", "dead", "die", "death", "rip", "graveyard", "cemetery", "casket", "funeral", "box" ], "char": "\u26b0", fitzpatrick_scale: false, category: "objects" }, funeral_urn: { keywords: [ "dead", "die", "death", "rip", "ashes" ], "char": "\u26b1", fitzpatrick_scale: false, category: "objects" }, amphora: { keywords: [ "vase", "jar" ], "char": "\ud83c\udffa", fitzpatrick_scale: false, category: "objects" }, crystal_ball: { keywords: [ "disco", "party", "magic", "circus", "fortune_teller" ], "char": "\ud83d\udd2e", fitzpatrick_scale: false, category: "objects" }, prayer_beads: { keywords: [ "dhikr", "religious" ], "char": "\ud83d\udcff", fitzpatrick_scale: false, category: "objects" }, barber: { keywords: [ "hair", "salon", "style" ], "char": "\ud83d\udc88", fitzpatrick_scale: false, category: "objects" }, alembic: { keywords: [ "distilling", "science", "experiment", "chemistry" ], "char": "\u2697", fitzpatrick_scale: false, category: "objects" }, telescope: { keywords: [ "stars", "space", "zoom", "science", "astronomy" ], "char": "\ud83d\udd2d", fitzpatrick_scale: false, category: "objects" }, microscope: { keywords: [ "laboratory", "experiment", "zoomin", "science", "study" ], "char": "\ud83d\udd2c", fitzpatrick_scale: false, category: "objects" }, hole: { keywords: [ "embarrassing" ], "char": "\ud83d\udd73", fitzpatrick_scale: false, category: "objects" }, pill: { keywords: [ "health", "medicine", "doctor", "pharmacy", "drug" ], "char": "\ud83d\udc8a", fitzpatrick_scale: false, category: "objects" }, syringe: { keywords: [ "health", "hospital", "drugs", "blood", "medicine", "needle", "doctor", "nurse" ], "char": "\ud83d\udc89", fitzpatrick_scale: false, category: "objects" }, thermometer: { keywords: [ "weather", "temperature", "hot", "cold" ], "char": "\ud83c\udf21", fitzpatrick_scale: false, category: "objects" }, label: { keywords: [ "sale", "tag" ], "char": "\ud83c\udff7", fitzpatrick_scale: false, category: "objects" }, bookmark: { keywords: [ "favorite", "label", "save" ], "char": "\ud83d\udd16", fitzpatrick_scale: false, category: "objects" }, toilet: { keywords: [ "restroom", "wc", "washroom", "bathroom", "potty" ], "char": "\ud83d\udebd", fitzpatrick_scale: false, category: "objects" }, shower: { keywords: [ "clean", "water", "bathroom" ], "char": "\ud83d\udebf", fitzpatrick_scale: false, category: "objects" }, bathtub: { keywords: [ "clean", "shower", "bathroom" ], "char": "\ud83d\udec1", fitzpatrick_scale: false, category: "objects" }, key: { keywords: [ "lock", "door", "password" ], "char": "\ud83d\udd11", fitzpatrick_scale: false, category: "objects" }, old_key: { keywords: [ "lock", "door", "password" ], "char": "\ud83d\udddd", fitzpatrick_scale: false, category: "objects" }, couch_and_lamp: { keywords: [ "read", "chill" ], "char": "\ud83d\udecb", fitzpatrick_scale: false, category: "objects" }, sleeping_bed: { keywords: [ "bed", "rest" ], "char": "\ud83d\udecc", fitzpatrick_scale: true, category: "objects" }, bed: { keywords: [ "sleep", "rest" ], "char": "\ud83d\udecf", fitzpatrick_scale: false, category: "objects" }, door: { keywords: [ "house", "entry", "exit" ], "char": "\ud83d\udeaa", fitzpatrick_scale: false, category: "objects" }, bellhop_bell: { keywords: [ "service" ], "char": "\ud83d\udece", fitzpatrick_scale: false, category: "objects" }, framed_picture: { keywords: [ "photography" ], "char": "\ud83d\uddbc", fitzpatrick_scale: false, category: "objects" }, world_map: { keywords: [ "location", "direction" ], "char": "\ud83d\uddfa", fitzpatrick_scale: false, category: "objects" }, parasol_on_ground: { keywords: [ "weather", "summer" ], "char": "\u26f1", fitzpatrick_scale: false, category: "objects" }, moyai: { keywords: [ "rock", "easter island", "moai" ], "char": "\ud83d\uddff", fitzpatrick_scale: false, category: "objects" }, shopping: { keywords: [ "mall", "buy", "purchase" ], "char": "\ud83d\udecd", fitzpatrick_scale: false, category: "objects" }, shopping_cart: { keywords: [ "trolley" ], "char": "\ud83d\uded2", fitzpatrick_scale: false, category: "objects" }, balloon: { keywords: [ "party", "celebration", "birthday", "circus" ], "char": "\ud83c\udf88", fitzpatrick_scale: false, category: "objects" }, flags: { keywords: [ "fish", "japanese", "koinobori", "carp", "banner" ], "char": "\ud83c\udf8f", fitzpatrick_scale: false, category: "objects" }, ribbon: { keywords: [ "decoration", "pink", "girl", "bowtie" ], "char": "\ud83c\udf80", fitzpatrick_scale: false, category: "objects" }, gift: { keywords: [ "present", "birthday", "christmas", "xmas" ], "char": "\ud83c\udf81", fitzpatrick_scale: false, category: "objects" }, confetti_ball: { keywords: [ "festival", "party", "birthday", "circus" ], "char": "\ud83c\udf8a", fitzpatrick_scale: false, category: "objects" }, tada: { keywords: [ "party", "congratulations", "birthday", "magic", "circus", "celebration" ], "char": "\ud83c\udf89", fitzpatrick_scale: false, category: "objects" }, dolls: { keywords: [ "japanese", "toy", "kimono" ], "char": "\ud83c\udf8e", fitzpatrick_scale: false, category: "objects" }, wind_chime: { keywords: [ "nature", "ding", "spring", "bell" ], "char": "\ud83c\udf90", fitzpatrick_scale: false, category: "objects" }, crossed_flags: { keywords: [ "japanese", "nation", "country", "border" ], "char": "\ud83c\udf8c", fitzpatrick_scale: false, category: "objects" }, izakaya_lantern: { keywords: [ "light", "paper", "halloween", "spooky" ], "char": "\ud83c\udfee", fitzpatrick_scale: false, category: "objects" }, email: { keywords: [ "letter", "postal", "inbox", "communication" ], "char": "\u2709\ufe0f", fitzpatrick_scale: false, category: "objects" }, envelope_with_arrow: { keywords: [ "email", "communication" ], "char": "\ud83d\udce9", fitzpatrick_scale: false, category: "objects" }, incoming_envelope: { keywords: [ "email", "inbox" ], "char": "\ud83d\udce8", fitzpatrick_scale: false, category: "objects" }, "e-mail": { keywords: [ "communication", "inbox" ], "char": "\ud83d\udce7", fitzpatrick_scale: false, category: "objects" }, love_letter: { keywords: [ "email", "like", "affection", "envelope", "valentines" ], "char": "\ud83d\udc8c", fitzpatrick_scale: false, category: "objects" }, postbox: { keywords: [ "email", "letter", "envelope" ], "char": "\ud83d\udcee", fitzpatrick_scale: false, category: "objects" }, mailbox_closed: { keywords: [ "email", "communication", "inbox" ], "char": "\ud83d\udcea", fitzpatrick_scale: false, category: "objects" }, mailbox: { keywords: [ "email", "inbox", "communication" ], "char": "\ud83d\udceb", fitzpatrick_scale: false, category: "objects" }, mailbox_with_mail: { keywords: [ "email", "inbox", "communication" ], "char": "\ud83d\udcec", fitzpatrick_scale: false, category: "objects" }, mailbox_with_no_mail: { keywords: [ "email", "inbox" ], "char": "\ud83d\udced", fitzpatrick_scale: false, category: "objects" }, "package": { keywords: [ "mail", "gift", "cardboard", "box", "moving" ], "char": "\ud83d\udce6", fitzpatrick_scale: false, category: "objects" }, postal_horn: { keywords: [ "instrument", "music" ], "char": "\ud83d\udcef", fitzpatrick_scale: false, category: "objects" }, inbox_tray: { keywords: [ "email", "documents" ], "char": "\ud83d\udce5", fitzpatrick_scale: false, category: "objects" }, outbox_tray: { keywords: [ "inbox", "email" ], "char": "\ud83d\udce4", fitzpatrick_scale: false, category: "objects" }, scroll: { keywords: [ "documents", "ancient", "history", "paper" ], "char": "\ud83d\udcdc", fitzpatrick_scale: false, category: "objects" }, page_with_curl: { keywords: [ "documents", "office", "paper" ], "char": "\ud83d\udcc3", fitzpatrick_scale: false, category: "objects" }, bookmark_tabs: { keywords: [ "favorite", "save", "order", "tidy" ], "char": "\ud83d\udcd1", fitzpatrick_scale: false, category: "objects" }, bar_chart: { keywords: [ "graph", "presentation", "stats" ], "char": "\ud83d\udcca", fitzpatrick_scale: false, category: "objects" }, chart_with_upwards_trend: { keywords: [ "graph", "presentation", "stats", "recovery", "business", "economics", "money", "sales", "good", "success" ], "char": "\ud83d\udcc8", fitzpatrick_scale: false, category: "objects" }, chart_with_downwards_trend: { keywords: [ "graph", "presentation", "stats", "recession", "business", "economics", "money", "sales", "bad", "failure" ], "char": "\ud83d\udcc9", fitzpatrick_scale: false, category: "objects" }, page_facing_up: { keywords: [ "documents", "office", "paper", "information" ], "char": "\ud83d\udcc4", fitzpatrick_scale: false, category: "objects" }, date: { keywords: [ "calendar", "schedule" ], "char": "\ud83d\udcc5", fitzpatrick_scale: false, category: "objects" }, calendar: { keywords: [ "schedule", "date", "planning" ], "char": "\ud83d\udcc6", fitzpatrick_scale: false, category: "objects" }, spiral_calendar: { keywords: [ "date", "schedule", "planning" ], "char": "\ud83d\uddd3", fitzpatrick_scale: false, category: "objects" }, card_index: { keywords: [ "business", "stationery" ], "char": "\ud83d\udcc7", fitzpatrick_scale: false, category: "objects" }, card_file_box: { keywords: [ "business", "stationery" ], "char": "\ud83d\uddc3", fitzpatrick_scale: false, category: "objects" }, ballot_box: { keywords: [ "election", "vote" ], "char": "\ud83d\uddf3", fitzpatrick_scale: false, category: "objects" }, file_cabinet: { keywords: [ "filing", "organizing" ], "char": "\ud83d\uddc4", fitzpatrick_scale: false, category: "objects" }, clipboard: { keywords: [ "stationery", "documents" ], "char": "\ud83d\udccb", fitzpatrick_scale: false, category: "objects" }, spiral_notepad: { keywords: [ "memo", "stationery" ], "char": "\ud83d\uddd2", fitzpatrick_scale: false, category: "objects" }, file_folder: { keywords: [ "documents", "business", "office" ], "char": "\ud83d\udcc1", fitzpatrick_scale: false, category: "objects" }, open_file_folder: { keywords: [ "documents", "load" ], "char": "\ud83d\udcc2", fitzpatrick_scale: false, category: "objects" }, card_index_dividers: { keywords: [ "organizing", "business", "stationery" ], "char": "\ud83d\uddc2", fitzpatrick_scale: false, category: "objects" }, newspaper_roll: { keywords: [ "press", "headline" ], "char": "\ud83d\uddde", fitzpatrick_scale: false, category: "objects" }, newspaper: { keywords: [ "press", "headline" ], "char": "\ud83d\udcf0", fitzpatrick_scale: false, category: "objects" }, notebook: { keywords: [ "stationery", "record", "notes", "paper", "study" ], "char": "\ud83d\udcd3", fitzpatrick_scale: false, category: "objects" }, closed_book: { keywords: [ "read", "library", "knowledge", "textbook", "learn" ], "char": "\ud83d\udcd5", fitzpatrick_scale: false, category: "objects" }, green_book: { keywords: [ "read", "library", "knowledge", "study" ], "char": "\ud83d\udcd7", fitzpatrick_scale: false, category: "objects" }, blue_book: { keywords: [ "read", "library", "knowledge", "learn", "study" ], "char": "\ud83d\udcd8", fitzpatrick_scale: false, category: "objects" }, orange_book: { keywords: [ "read", "library", "knowledge", "textbook", "study" ], "char": "\ud83d\udcd9", fitzpatrick_scale: false, category: "objects" }, notebook_with_decorative_cover: { keywords: [ "classroom", "notes", "record", "paper", "study" ], "char": "\ud83d\udcd4", fitzpatrick_scale: false, category: "objects" }, ledger: { keywords: [ "notes", "paper" ], "char": "\ud83d\udcd2", fitzpatrick_scale: false, category: "objects" }, books: { keywords: [ "literature", "library", "study" ], "char": "\ud83d\udcda", fitzpatrick_scale: false, category: "objects" }, open_book: { keywords: [ "book", "read", "library", "knowledge", "literature", "learn", "study" ], "char": "\ud83d\udcd6", fitzpatrick_scale: false, category: "objects" }, link: { keywords: [ "rings", "url" ], "char": "\ud83d\udd17", fitzpatrick_scale: false, category: "objects" }, paperclip: { keywords: [ "documents", "stationery" ], "char": "\ud83d\udcce", fitzpatrick_scale: false, category: "objects" }, paperclips: { keywords: [ "documents", "stationery" ], "char": "\ud83d\udd87", fitzpatrick_scale: false, category: "objects" }, scissors: { keywords: [ "stationery", "cut" ], "char": "\u2702\ufe0f", fitzpatrick_scale: false, category: "objects" }, triangular_ruler: { keywords: [ "stationery", "math", "architect", "sketch" ], "char": "\ud83d\udcd0", fitzpatrick_scale: false, category: "objects" }, straight_ruler: { keywords: [ "stationery", "calculate", "length", "math", "school", "drawing", "architect", "sketch" ], "char": "\ud83d\udccf", fitzpatrick_scale: false, category: "objects" }, pushpin: { keywords: [ "stationery", "mark", "here" ], "char": "\ud83d\udccc", fitzpatrick_scale: false, category: "objects" }, round_pushpin: { keywords: [ "stationery", "location", "map", "here" ], "char": "\ud83d\udccd", fitzpatrick_scale: false, category: "objects" }, triangular_flag_on_post: { keywords: [ "mark", "milestone", "place" ], "char": "\ud83d\udea9", fitzpatrick_scale: false, category: "objects" }, white_flag: { keywords: [ "losing", "loser", "lost", "surrender", "give up", "fail" ], "char": "\ud83c\udff3", fitzpatrick_scale: false, category: "objects" }, black_flag: { keywords: [ "pirate" ], "char": "\ud83c\udff4", fitzpatrick_scale: false, category: "objects" }, rainbow_flag: { keywords: [ "flag", "rainbow", "pride", "gay", "lgbt", "glbt", "queer", "homosexual", "lesbian", "bisexual", "transgender" ], "char": "\ud83c\udff3\ufe0f\u200d\ud83c\udf08", fitzpatrick_scale: false, category: "objects" }, closed_lock_with_key: { keywords: [ "security", "privacy" ], "char": "\ud83d\udd10", fitzpatrick_scale: false, category: "objects" }, lock: { keywords: [ "security", "password", "padlock" ], "char": "\ud83d\udd12", fitzpatrick_scale: false, category: "objects" }, unlock: { keywords: [ "privacy", "security" ], "char": "\ud83d\udd13", fitzpatrick_scale: false, category: "objects" }, lock_with_ink_pen: { keywords: [ "security", "secret" ], "char": "\ud83d\udd0f", fitzpatrick_scale: false, category: "objects" }, pen: { keywords: [ "stationery", "writing", "write" ], "char": "\ud83d\udd8a", fitzpatrick_scale: false, category: "objects" }, fountain_pen: { keywords: [ "stationery", "writing", "write" ], "char": "\ud83d\udd8b", fitzpatrick_scale: false, category: "objects" }, black_nib: { keywords: [ "pen", "stationery", "writing", "write" ], "char": "\u2712\ufe0f", fitzpatrick_scale: false, category: "objects" }, memo: { keywords: [ "write", "documents", "stationery", "pencil", "paper", "writing", "legal", "exam", "quiz", "test", "study", "compose" ], "char": "\ud83d\udcdd", fitzpatrick_scale: false, category: "objects" }, pencil2: { keywords: [ "stationery", "write", "paper", "writing", "school", "study" ], "char": "\u270f\ufe0f", fitzpatrick_scale: false, category: "objects" }, crayon: { keywords: [ "drawing", "creativity" ], "char": "\ud83d\udd8d", fitzpatrick_scale: false, category: "objects" }, paintbrush: { keywords: [ "drawing", "creativity", "art" ], "char": "\ud83d\udd8c", fitzpatrick_scale: false, category: "objects" }, mag: { keywords: [ "search", "zoom", "find", "detective" ], "char": "\ud83d\udd0d", fitzpatrick_scale: false, category: "objects" }, mag_right: { keywords: [ "search", "zoom", "find", "detective" ], "char": "\ud83d\udd0e", fitzpatrick_scale: false, category: "objects" }, heart: { keywords: [ "love", "like", "valentines" ], "char": "\u2764\ufe0f", fitzpatrick_scale: false, category: "symbols" }, orange_heart: { keywords: [ "love", "like", "affection", "valentines" ], "char": "\ud83e\udde1", fitzpatrick_scale: false, category: "symbols" }, yellow_heart: { keywords: [ "love", "like", "affection", "valentines" ], "char": "\ud83d\udc9b", fitzpatrick_scale: false, category: "symbols" }, green_heart: { keywords: [ "love", "like", "affection", "valentines" ], "char": "\ud83d\udc9a", fitzpatrick_scale: false, category: "symbols" }, blue_heart: { keywords: [ "love", "like", "affection", "valentines" ], "char": "\ud83d\udc99", fitzpatrick_scale: false, category: "symbols" }, purple_heart: { keywords: [ "love", "like", "affection", "valentines" ], "char": "\ud83d\udc9c", fitzpatrick_scale: false, category: "symbols" }, black_heart: { keywords: [ "evil" ], "char": "\ud83d\udda4", fitzpatrick_scale: false, category: "symbols" }, broken_heart: { keywords: [ "sad", "sorry", "break", "heart", "heartbreak" ], "char": "\ud83d\udc94", fitzpatrick_scale: false, category: "symbols" }, heavy_heart_exclamation: { keywords: [ "decoration", "love" ], "char": "\u2763", fitzpatrick_scale: false, category: "symbols" }, two_hearts: { keywords: [ "love", "like", "affection", "valentines", "heart" ], "char": "\ud83d\udc95", fitzpatrick_scale: false, category: "symbols" }, revolving_hearts: { keywords: [ "love", "like", "affection", "valentines" ], "char": "\ud83d\udc9e", fitzpatrick_scale: false, category: "symbols" }, heartbeat: { keywords: [ "love", "like", "affection", "valentines", "pink", "heart" ], "char": "\ud83d\udc93", fitzpatrick_scale: false, category: "symbols" }, heartpulse: { keywords: [ "like", "love", "affection", "valentines", "pink" ], "char": "\ud83d\udc97", fitzpatrick_scale: false, category: "symbols" }, sparkling_heart: { keywords: [ "love", "like", "affection", "valentines" ], "char": "\ud83d\udc96", fitzpatrick_scale: false, category: "symbols" }, cupid: { keywords: [ "love", "like", "heart", "affection", "valentines" ], "char": "\ud83d\udc98", fitzpatrick_scale: false, category: "symbols" }, gift_heart: { keywords: [ "love", "valentines" ], "char": "\ud83d\udc9d", fitzpatrick_scale: false, category: "symbols" }, heart_decoration: { keywords: [ "purple-square", "love", "like" ], "char": "\ud83d\udc9f", fitzpatrick_scale: false, category: "symbols" }, peace_symbol: { keywords: [ "hippie" ], "char": "\u262e", fitzpatrick_scale: false, category: "symbols" }, latin_cross: { keywords: [ "christianity" ], "char": "\u271d", fitzpatrick_scale: false, category: "symbols" }, star_and_crescent: { keywords: [ "islam" ], "char": "\u262a", fitzpatrick_scale: false, category: "symbols" }, om: { keywords: [ "hinduism", "buddhism", "sikhism", "jainism" ], "char": "\ud83d\udd49", fitzpatrick_scale: false, category: "symbols" }, wheel_of_dharma: { keywords: [ "hinduism", "buddhism", "sikhism", "jainism" ], "char": "\u2638", fitzpatrick_scale: false, category: "symbols" }, star_of_david: { keywords: [ "judaism" ], "char": "\u2721", fitzpatrick_scale: false, category: "symbols" }, six_pointed_star: { keywords: [ "purple-square", "religion", "jewish", "hexagram" ], "char": "\ud83d\udd2f", fitzpatrick_scale: false, category: "symbols" }, menorah: { keywords: [ "hanukkah", "candles", "jewish" ], "char": "\ud83d\udd4e", fitzpatrick_scale: false, category: "symbols" }, yin_yang: { keywords: [ "balance" ], "char": "\u262f", fitzpatrick_scale: false, category: "symbols" }, orthodox_cross: { keywords: [ "suppedaneum", "religion" ], "char": "\u2626", fitzpatrick_scale: false, category: "symbols" }, place_of_worship: { keywords: [ "religion", "church", "temple", "prayer" ], "char": "\ud83d\uded0", fitzpatrick_scale: false, category: "symbols" }, ophiuchus: { keywords: [ "sign", "purple-square", "constellation", "astrology" ], "char": "\u26ce", fitzpatrick_scale: false, category: "symbols" }, aries: { keywords: [ "sign", "purple-square", "zodiac", "astrology" ], "char": "\u2648", fitzpatrick_scale: false, category: "symbols" }, taurus: { keywords: [ "purple-square", "sign", "zodiac", "astrology" ], "char": "\u2649", fitzpatrick_scale: false, category: "symbols" }, gemini: { keywords: [ "sign", "zodiac", "purple-square", "astrology" ], "char": "\u264a", fitzpatrick_scale: false, category: "symbols" }, cancer: { keywords: [ "sign", "zodiac", "purple-square", "astrology" ], "char": "\u264b", fitzpatrick_scale: false, category: "symbols" }, leo: { keywords: [ "sign", "purple-square", "zodiac", "astrology" ], "char": "\u264c", fitzpatrick_scale: false, category: "symbols" }, virgo: { keywords: [ "sign", "zodiac", "purple-square", "astrology" ], "char": "\u264d", fitzpatrick_scale: false, category: "symbols" }, libra: { keywords: [ "sign", "purple-square", "zodiac", "astrology" ], "char": "\u264e", fitzpatrick_scale: false, category: "symbols" }, scorpius: { keywords: [ "sign", "zodiac", "purple-square", "astrology", "scorpio" ], "char": "\u264f", fitzpatrick_scale: false, category: "symbols" }, sagittarius: { keywords: [ "sign", "zodiac", "purple-square", "astrology" ], "char": "\u2650", fitzpatrick_scale: false, category: "symbols" }, capricorn: { keywords: [ "sign", "zodiac", "purple-square", "astrology" ], "char": "\u2651", fitzpatrick_scale: false, category: "symbols" }, aquarius: { keywords: [ "sign", "purple-square", "zodiac", "astrology" ], "char": "\u2652", fitzpatrick_scale: false, category: "symbols" }, pisces: { keywords: [ "purple-square", "sign", "zodiac", "astrology" ], "char": "\u2653", fitzpatrick_scale: false, category: "symbols" }, id: { keywords: [ "purple-square", "words" ], "char": "\ud83c\udd94", fitzpatrick_scale: false, category: "symbols" }, atom_symbol: { keywords: [ "science", "physics", "chemistry" ], "char": "\u269b", fitzpatrick_scale: false, category: "symbols" }, u7a7a: { keywords: [ "kanji", "japanese", "chinese", "empty", "sky", "blue-square" ], "char": "\ud83c\ude33", fitzpatrick_scale: false, category: "symbols" }, u5272: { keywords: [ "cut", "divide", "chinese", "kanji", "pink-square" ], "char": "\ud83c\ude39", fitzpatrick_scale: false, category: "symbols" }, radioactive: { keywords: [ "nuclear", "danger" ], "char": "\u2622", fitzpatrick_scale: false, category: "symbols" }, biohazard: { keywords: [ "danger" ], "char": "\u2623", fitzpatrick_scale: false, category: "symbols" }, mobile_phone_off: { keywords: [ "mute", "orange-square", "silence", "quiet" ], "char": "\ud83d\udcf4", fitzpatrick_scale: false, category: "symbols" }, vibration_mode: { keywords: [ "orange-square", "phone" ], "char": "\ud83d\udcf3", fitzpatrick_scale: false, category: "symbols" }, u6709: { keywords: [ "orange-square", "chinese", "have", "kanji" ], "char": "\ud83c\ude36", fitzpatrick_scale: false, category: "symbols" }, u7121: { keywords: [ "nothing", "chinese", "kanji", "japanese", "orange-square" ], "char": "\ud83c\ude1a", fitzpatrick_scale: false, category: "symbols" }, u7533: { keywords: [ "chinese", "japanese", "kanji", "orange-square" ], "char": "\ud83c\ude38", fitzpatrick_scale: false, category: "symbols" }, u55b6: { keywords: [ "japanese", "opening hours", "orange-square" ], "char": "\ud83c\ude3a", fitzpatrick_scale: false, category: "symbols" }, u6708: { keywords: [ "chinese", "month", "moon", "japanese", "orange-square", "kanji" ], "char": "\ud83c\ude37\ufe0f", fitzpatrick_scale: false, category: "symbols" }, eight_pointed_black_star: { keywords: [ "orange-square", "shape", "polygon" ], "char": "\u2734\ufe0f", fitzpatrick_scale: false, category: "symbols" }, vs: { keywords: [ "words", "orange-square" ], "char": "\ud83c\udd9a", fitzpatrick_scale: false, category: "symbols" }, accept: { keywords: [ "ok", "good", "chinese", "kanji", "agree", "yes", "orange-circle" ], "char": "\ud83c\ude51", fitzpatrick_scale: false, category: "symbols" }, white_flower: { keywords: [ "japanese", "spring" ], "char": "\ud83d\udcae", fitzpatrick_scale: false, category: "symbols" }, ideograph_advantage: { keywords: [ "chinese", "kanji", "obtain", "get", "circle" ], "char": "\ud83c\ude50", fitzpatrick_scale: false, category: "symbols" }, secret: { keywords: [ "privacy", "chinese", "sshh", "kanji", "red-circle" ], "char": "\u3299\ufe0f", fitzpatrick_scale: false, category: "symbols" }, congratulations: { keywords: [ "chinese", "kanji", "japanese", "red-circle" ], "char": "\u3297\ufe0f", fitzpatrick_scale: false, category: "symbols" }, u5408: { keywords: [ "japanese", "chinese", "join", "kanji", "red-square" ], "char": "\ud83c\ude34", fitzpatrick_scale: false, category: "symbols" }, u6e80: { keywords: [ "full", "chinese", "japanese", "red-square", "kanji" ], "char": "\ud83c\ude35", fitzpatrick_scale: false, category: "symbols" }, u7981: { keywords: [ "kanji", "japanese", "chinese", "forbidden", "limit", "restricted", "red-square" ], "char": "\ud83c\ude32", fitzpatrick_scale: false, category: "symbols" }, a: { keywords: [ "red-square", "alphabet", "letter" ], "char": "\ud83c\udd70\ufe0f", fitzpatrick_scale: false, category: "symbols" }, b: { keywords: [ "red-square", "alphabet", "letter" ], "char": "\ud83c\udd71\ufe0f", fitzpatrick_scale: false, category: "symbols" }, ab: { keywords: [ "red-square", "alphabet" ], "char": "\ud83c\udd8e", fitzpatrick_scale: false, category: "symbols" }, cl: { keywords: [ "alphabet", "words", "red-square" ], "char": "\ud83c\udd91", fitzpatrick_scale: false, category: "symbols" }, o2: { keywords: [ "alphabet", "red-square", "letter" ], "char": "\ud83c\udd7e\ufe0f", fitzpatrick_scale: false, category: "symbols" }, sos: { keywords: [ "help", "red-square", "words", "emergency", "911" ], "char": "\ud83c\udd98", fitzpatrick_scale: false, category: "symbols" }, no_entry: { keywords: [ "limit", "security", "privacy", "bad", "denied", "stop", "circle" ], "char": "\u26d4", fitzpatrick_scale: false, category: "symbols" }, name_badge: { keywords: [ "fire", "forbid" ], "char": "\ud83d\udcdb", fitzpatrick_scale: false, category: "symbols" }, no_entry_sign: { keywords: [ "forbid", "stop", "limit", "denied", "disallow", "circle" ], "char": "\ud83d\udeab", fitzpatrick_scale: false, category: "symbols" }, x: { keywords: [ "no", "delete", "remove", "cancel" ], "char": "\u274c", fitzpatrick_scale: false, category: "symbols" }, o: { keywords: [ "circle", "round" ], "char": "\u2b55", fitzpatrick_scale: false, category: "symbols" }, stop_sign: { keywords: [ "stop" ], "char": "\ud83d\uded1", fitzpatrick_scale: false, category: "symbols" }, anger: { keywords: [ "angry", "mad" ], "char": "\ud83d\udca2", fitzpatrick_scale: false, category: "symbols" }, hotsprings: { keywords: [ "bath", "warm", "relax" ], "char": "\u2668\ufe0f", fitzpatrick_scale: false, category: "symbols" }, no_pedestrians: { keywords: [ "rules", "crossing", "walking", "circle" ], "char": "\ud83d\udeb7", fitzpatrick_scale: false, category: "symbols" }, do_not_litter: { keywords: [ "trash", "bin", "garbage", "circle" ], "char": "\ud83d\udeaf", fitzpatrick_scale: false, category: "symbols" }, no_bicycles: { keywords: [ "cyclist", "prohibited", "circle" ], "char": "\ud83d\udeb3", fitzpatrick_scale: false, category: "symbols" }, "non-potable_water": { keywords: [ "drink", "faucet", "tap", "circle" ], "char": "\ud83d\udeb1", fitzpatrick_scale: false, category: "symbols" }, underage: { keywords: [ "18", "drink", "pub", "night", "minor", "circle" ], "char": "\ud83d\udd1e", fitzpatrick_scale: false, category: "symbols" }, no_mobile_phones: { keywords: [ "iphone", "mute", "circle" ], "char": "\ud83d\udcf5", fitzpatrick_scale: false, category: "symbols" }, exclamation: { keywords: [ "heavy_exclamation_mark", "danger", "surprise", "punctuation", "wow", "warning" ], "char": "\u2757", fitzpatrick_scale: false, category: "symbols" }, grey_exclamation: { keywords: [ "surprise", "punctuation", "gray", "wow", "warning" ], "char": "\u2755", fitzpatrick_scale: false, category: "symbols" }, question: { keywords: [ "doubt", "confused" ], "char": "\u2753", fitzpatrick_scale: false, category: "symbols" }, grey_question: { keywords: [ "doubts", "gray", "huh", "confused" ], "char": "\u2754", fitzpatrick_scale: false, category: "symbols" }, bangbang: { keywords: [ "exclamation", "surprise" ], "char": "\u203c\ufe0f", fitzpatrick_scale: false, category: "symbols" }, interrobang: { keywords: [ "wat", "punctuation", "surprise" ], "char": "\u2049\ufe0f", fitzpatrick_scale: false, category: "symbols" }, 100: { keywords: [ "score", "perfect", "numbers", "century", "exam", "quiz", "test", "pass", "hundred" ], "char": "\ud83d\udcaf", fitzpatrick_scale: false, category: "symbols" }, low_brightness: { keywords: [ "sun", "afternoon", "warm", "summer" ], "char": "\ud83d\udd05", fitzpatrick_scale: false, category: "symbols" }, high_brightness: { keywords: [ "sun", "light" ], "char": "\ud83d\udd06", fitzpatrick_scale: false, category: "symbols" }, trident: { keywords: [ "weapon", "spear" ], "char": "\ud83d\udd31", fitzpatrick_scale: false, category: "symbols" }, fleur_de_lis: { keywords: [ "decorative", "scout" ], "char": "\u269c", fitzpatrick_scale: false, category: "symbols" }, part_alternation_mark: { keywords: [ "graph", "presentation", "stats", "business", "economics", "bad" ], "char": "\u303d\ufe0f", fitzpatrick_scale: false, category: "symbols" }, warning: { keywords: [ "exclamation", "wip", "alert", "error", "problem", "issue" ], "char": "\u26a0\ufe0f", fitzpatrick_scale: false, category: "symbols" }, children_crossing: { keywords: [ "school", "warning", "danger", "sign", "driving", "yellow-diamond" ], "char": "\ud83d\udeb8", fitzpatrick_scale: false, category: "symbols" }, beginner: { keywords: [ "badge", "shield" ], "char": "\ud83d\udd30", fitzpatrick_scale: false, category: "symbols" }, recycle: { keywords: [ "arrow", "environment", "garbage", "trash" ], "char": "\u267b\ufe0f", fitzpatrick_scale: false, category: "symbols" }, u6307: { keywords: [ "chinese", "point", "green-square", "kanji" ], "char": "\ud83c\ude2f", fitzpatrick_scale: false, category: "symbols" }, chart: { keywords: [ "green-square", "graph", "presentation", "stats" ], "char": "\ud83d\udcb9", fitzpatrick_scale: false, category: "symbols" }, sparkle: { keywords: [ "stars", "green-square", "awesome", "good", "fireworks" ], "char": "\u2747\ufe0f", fitzpatrick_scale: false, category: "symbols" }, eight_spoked_asterisk: { keywords: [ "star", "sparkle", "green-square" ], "char": "\u2733\ufe0f", fitzpatrick_scale: false, category: "symbols" }, negative_squared_cross_mark: { keywords: [ "x", "green-square", "no", "deny" ], "char": "\u274e", fitzpatrick_scale: false, category: "symbols" }, white_check_mark: { keywords: [ "green-square", "ok", "agree", "vote", "election", "answer", "tick" ], "char": "\u2705", fitzpatrick_scale: false, category: "symbols" }, diamond_shape_with_a_dot_inside: { keywords: [ "jewel", "blue", "gem", "crystal", "fancy" ], "char": "\ud83d\udca0", fitzpatrick_scale: false, category: "symbols" }, cyclone: { keywords: [ "weather", "swirl", "blue", "cloud", "vortex", "spiral", "whirlpool", "spin", "tornado", "hurricane", "typhoon" ], "char": "\ud83c\udf00", fitzpatrick_scale: false, category: "symbols" }, loop: { keywords: [ "tape", "cassette" ], "char": "\u27bf", fitzpatrick_scale: false, category: "symbols" }, globe_with_meridians: { keywords: [ "earth", "international", "world", "internet", "interweb", "i18n" ], "char": "\ud83c\udf10", fitzpatrick_scale: false, category: "symbols" }, m: { keywords: [ "alphabet", "blue-circle", "letter" ], "char": "\u24c2\ufe0f", fitzpatrick_scale: false, category: "symbols" }, atm: { keywords: [ "money", "sales", "cash", "blue-square", "payment", "bank" ], "char": "\ud83c\udfe7", fitzpatrick_scale: false, category: "symbols" }, sa: { keywords: [ "japanese", "blue-square", "katakana" ], "char": "\ud83c\ude02\ufe0f", fitzpatrick_scale: false, category: "symbols" }, passport_control: { keywords: [ "custom", "blue-square" ], "char": "\ud83d\udec2", fitzpatrick_scale: false, category: "symbols" }, customs: { keywords: [ "passport", "border", "blue-square" ], "char": "\ud83d\udec3", fitzpatrick_scale: false, category: "symbols" }, baggage_claim: { keywords: [ "blue-square", "airport", "transport" ], "char": "\ud83d\udec4", fitzpatrick_scale: false, category: "symbols" }, left_luggage: { keywords: [ "blue-square", "travel" ], "char": "\ud83d\udec5", fitzpatrick_scale: false, category: "symbols" }, wheelchair: { keywords: [ "blue-square", "disabled", "a11y", "accessibility" ], "char": "\u267f", fitzpatrick_scale: false, category: "symbols" }, no_smoking: { keywords: [ "cigarette", "blue-square", "smell", "smoke" ], "char": "\ud83d\udead", fitzpatrick_scale: false, category: "symbols" }, wc: { keywords: [ "toilet", "restroom", "blue-square" ], "char": "\ud83d\udebe", fitzpatrick_scale: false, category: "symbols" }, parking: { keywords: [ "cars", "blue-square", "alphabet", "letter" ], "char": "\ud83c\udd7f\ufe0f", fitzpatrick_scale: false, category: "symbols" }, potable_water: { keywords: [ "blue-square", "liquid", "restroom", "cleaning", "faucet" ], "char": "\ud83d\udeb0", fitzpatrick_scale: false, category: "symbols" }, mens: { keywords: [ "toilet", "restroom", "wc", "blue-square", "gender", "male" ], "char": "\ud83d\udeb9", fitzpatrick_scale: false, category: "symbols" }, womens: { keywords: [ "purple-square", "woman", "female", "toilet", "loo", "restroom", "gender" ], "char": "\ud83d\udeba", fitzpatrick_scale: false, category: "symbols" }, baby_symbol: { keywords: [ "orange-square", "child" ], "char": "\ud83d\udebc", fitzpatrick_scale: false, category: "symbols" }, restroom: { keywords: [ "blue-square", "toilet", "refresh", "wc", "gender" ], "char": "\ud83d\udebb", fitzpatrick_scale: false, category: "symbols" }, put_litter_in_its_place: { keywords: [ "blue-square", "sign", "human", "info" ], "char": "\ud83d\udeae", fitzpatrick_scale: false, category: "symbols" }, cinema: { keywords: [ "blue-square", "record", "film", "movie", "curtain", "stage", "theater" ], "char": "\ud83c\udfa6", fitzpatrick_scale: false, category: "symbols" }, signal_strength: { keywords: [ "blue-square", "reception", "phone", "internet", "connection", "wifi", "bluetooth", "bars" ], "char": "\ud83d\udcf6", fitzpatrick_scale: false, category: "symbols" }, koko: { keywords: [ "blue-square", "here", "katakana", "japanese", "destination" ], "char": "\ud83c\ude01", fitzpatrick_scale: false, category: "symbols" }, ng: { keywords: [ "blue-square", "words", "shape", "icon" ], "char": "\ud83c\udd96", fitzpatrick_scale: false, category: "symbols" }, ok: { keywords: [ "good", "agree", "yes", "blue-square" ], "char": "\ud83c\udd97", fitzpatrick_scale: false, category: "symbols" }, up: { keywords: [ "blue-square", "above", "high" ], "char": "\ud83c\udd99", fitzpatrick_scale: false, category: "symbols" }, cool: { keywords: [ "words", "blue-square" ], "char": "\ud83c\udd92", fitzpatrick_scale: false, category: "symbols" }, "new": { keywords: [ "blue-square", "words", "start" ], "char": "\ud83c\udd95", fitzpatrick_scale: false, category: "symbols" }, free: { keywords: [ "blue-square", "words" ], "char": "\ud83c\udd93", fitzpatrick_scale: false, category: "symbols" }, zero: { keywords: [ "0", "numbers", "blue-square", "null" ], "char": "0\ufe0f\u20e3", fitzpatrick_scale: false, category: "symbols" }, one: { keywords: [ "blue-square", "numbers", "1" ], "char": "1\ufe0f\u20e3", fitzpatrick_scale: false, category: "symbols" }, two: { keywords: [ "numbers", "2", "prime", "blue-square" ], "char": "2\ufe0f\u20e3", fitzpatrick_scale: false, category: "symbols" }, three: { keywords: [ "3", "numbers", "prime", "blue-square" ], "char": "3\ufe0f\u20e3", fitzpatrick_scale: false, category: "symbols" }, four: { keywords: [ "4", "numbers", "blue-square" ], "char": "4\ufe0f\u20e3", fitzpatrick_scale: false, category: "symbols" }, five: { keywords: [ "5", "numbers", "blue-square", "prime" ], "char": "5\ufe0f\u20e3", fitzpatrick_scale: false, category: "symbols" }, six: { keywords: [ "6", "numbers", "blue-square" ], "char": "6\ufe0f\u20e3", fitzpatrick_scale: false, category: "symbols" }, seven: { keywords: [ "7", "numbers", "blue-square", "prime" ], "char": "7\ufe0f\u20e3", fitzpatrick_scale: false, category: "symbols" }, eight: { keywords: [ "8", "blue-square", "numbers" ], "char": "8\ufe0f\u20e3", fitzpatrick_scale: false, category: "symbols" }, nine: { keywords: [ "blue-square", "numbers", "9" ], "char": "9\ufe0f\u20e3", fitzpatrick_scale: false, category: "symbols" }, keycap_ten: { keywords: [ "numbers", "10", "blue-square" ], "char": "\ud83d\udd1f", fitzpatrick_scale: false, category: "symbols" }, asterisk: { keywords: [ "star", "keycap" ], "char": "*\u20e3", fitzpatrick_scale: false, category: "symbols" }, 1234: { keywords: [ "numbers", "blue-square" ], "char": "\ud83d\udd22", fitzpatrick_scale: false, category: "symbols" }, eject_button: { keywords: [ "blue-square" ], "char": "\u23cf\ufe0f", fitzpatrick_scale: false, category: "symbols" }, arrow_forward: { keywords: [ "blue-square", "right", "direction", "play" ], "char": "\u25b6\ufe0f", fitzpatrick_scale: false, category: "symbols" }, pause_button: { keywords: [ "pause", "blue-square" ], "char": "\u23f8", fitzpatrick_scale: false, category: "symbols" }, next_track_button: { keywords: [ "forward", "next", "blue-square" ], "char": "\u23ed", fitzpatrick_scale: false, category: "symbols" }, stop_button: { keywords: [ "blue-square" ], "char": "\u23f9", fitzpatrick_scale: false, category: "symbols" }, record_button: { keywords: [ "blue-square" ], "char": "\u23fa", fitzpatrick_scale: false, category: "symbols" }, play_or_pause_button: { keywords: [ "blue-square", "play", "pause" ], "char": "\u23ef", fitzpatrick_scale: false, category: "symbols" }, previous_track_button: { keywords: [ "backward" ], "char": "\u23ee", fitzpatrick_scale: false, category: "symbols" }, fast_forward: { keywords: [ "blue-square", "play", "speed", "continue" ], "char": "\u23e9", fitzpatrick_scale: false, category: "symbols" }, rewind: { keywords: [ "play", "blue-square" ], "char": "\u23ea", fitzpatrick_scale: false, category: "symbols" }, twisted_rightwards_arrows: { keywords: [ "blue-square", "shuffle", "music", "random" ], "char": "\ud83d\udd00", fitzpatrick_scale: false, category: "symbols" }, repeat: { keywords: [ "loop", "record" ], "char": "\ud83d\udd01", fitzpatrick_scale: false, category: "symbols" }, repeat_one: { keywords: [ "blue-square", "loop" ], "char": "\ud83d\udd02", fitzpatrick_scale: false, category: "symbols" }, arrow_backward: { keywords: [ "blue-square", "left", "direction" ], "char": "\u25c0\ufe0f", fitzpatrick_scale: false, category: "symbols" }, arrow_up_small: { keywords: [ "blue-square", "triangle", "direction", "point", "forward", "top" ], "char": "\ud83d\udd3c", fitzpatrick_scale: false, category: "symbols" }, arrow_down_small: { keywords: [ "blue-square", "direction", "bottom" ], "char": "\ud83d\udd3d", fitzpatrick_scale: false, category: "symbols" }, arrow_double_up: { keywords: [ "blue-square", "direction", "top" ], "char": "\u23eb", fitzpatrick_scale: false, category: "symbols" }, arrow_double_down: { keywords: [ "blue-square", "direction", "bottom" ], "char": "\u23ec", fitzpatrick_scale: false, category: "symbols" }, arrow_right: { keywords: [ "blue-square", "next" ], "char": "\u27a1\ufe0f", fitzpatrick_scale: false, category: "symbols" }, arrow_left: { keywords: [ "blue-square", "previous", "back" ], "char": "\u2b05\ufe0f", fitzpatrick_scale: false, category: "symbols" }, arrow_up: { keywords: [ "blue-square", "continue", "top", "direction" ], "char": "\u2b06\ufe0f", fitzpatrick_scale: false, category: "symbols" }, arrow_down: { keywords: [ "blue-square", "direction", "bottom" ], "char": "\u2b07\ufe0f", fitzpatrick_scale: false, category: "symbols" }, arrow_upper_right: { keywords: [ "blue-square", "point", "direction", "diagonal", "northeast" ], "char": "\u2197\ufe0f", fitzpatrick_scale: false, category: "symbols" }, arrow_lower_right: { keywords: [ "blue-square", "direction", "diagonal", "southeast" ], "char": "\u2198\ufe0f", fitzpatrick_scale: false, category: "symbols" }, arrow_lower_left: { keywords: [ "blue-square", "direction", "diagonal", "southwest" ], "char": "\u2199\ufe0f", fitzpatrick_scale: false, category: "symbols" }, arrow_upper_left: { keywords: [ "blue-square", "point", "direction", "diagonal", "northwest" ], "char": "\u2196\ufe0f", fitzpatrick_scale: false, category: "symbols" }, arrow_up_down: { keywords: [ "blue-square", "direction", "way", "vertical" ], "char": "\u2195\ufe0f", fitzpatrick_scale: false, category: "symbols" }, left_right_arrow: { keywords: [ "shape", "direction", "horizontal", "sideways" ], "char": "\u2194\ufe0f", fitzpatrick_scale: false, category: "symbols" }, arrows_counterclockwise: { keywords: [ "blue-square", "sync", "cycle" ], "char": "\ud83d\udd04", fitzpatrick_scale: false, category: "symbols" }, arrow_right_hook: { keywords: [ "blue-square", "return", "rotate", "direction" ], "char": "\u21aa\ufe0f", fitzpatrick_scale: false, category: "symbols" }, leftwards_arrow_with_hook: { keywords: [ "back", "return", "blue-square", "undo", "enter" ], "char": "\u21a9\ufe0f", fitzpatrick_scale: false, category: "symbols" }, arrow_heading_up: { keywords: [ "blue-square", "direction", "top" ], "char": "\u2934\ufe0f", fitzpatrick_scale: false, category: "symbols" }, arrow_heading_down: { keywords: [ "blue-square", "direction", "bottom" ], "char": "\u2935\ufe0f", fitzpatrick_scale: false, category: "symbols" }, hash: { keywords: [ "symbol", "blue-square", "twitter" ], "char": "#\ufe0f\u20e3", fitzpatrick_scale: false, category: "symbols" }, information_source: { keywords: [ "blue-square", "alphabet", "letter" ], "char": "\u2139\ufe0f", fitzpatrick_scale: false, category: "symbols" }, abc: { keywords: [ "blue-square", "alphabet" ], "char": "\ud83d\udd24", fitzpatrick_scale: false, category: "symbols" }, abcd: { keywords: [ "blue-square", "alphabet" ], "char": "\ud83d\udd21", fitzpatrick_scale: false, category: "symbols" }, capital_abcd: { keywords: [ "alphabet", "words", "blue-square" ], "char": "\ud83d\udd20", fitzpatrick_scale: false, category: "symbols" }, symbols: { keywords: [ "blue-square", "music", "note", "ampersand", "percent", "glyphs", "characters" ], "char": "\ud83d\udd23", fitzpatrick_scale: false, category: "symbols" }, musical_note: { keywords: [ "score", "tone", "sound" ], "char": "\ud83c\udfb5", fitzpatrick_scale: false, category: "symbols" }, notes: { keywords: [ "music", "score" ], "char": "\ud83c\udfb6", fitzpatrick_scale: false, category: "symbols" }, wavy_dash: { keywords: [ "draw", "line", "moustache", "mustache", "squiggle", "scribble" ], "char": "\u3030\ufe0f", fitzpatrick_scale: false, category: "symbols" }, curly_loop: { keywords: [ "scribble", "draw", "shape", "squiggle" ], "char": "\u27b0", fitzpatrick_scale: false, category: "symbols" }, heavy_check_mark: { keywords: [ "ok", "nike", "answer", "yes", "tick" ], "char": "\u2714\ufe0f", fitzpatrick_scale: false, category: "symbols" }, arrows_clockwise: { keywords: [ "sync", "cycle", "round", "repeat" ], "char": "\ud83d\udd03", fitzpatrick_scale: false, category: "symbols" }, heavy_plus_sign: { keywords: [ "math", "calculation", "addition", "more", "increase" ], "char": "\u2795", fitzpatrick_scale: false, category: "symbols" }, heavy_minus_sign: { keywords: [ "math", "calculation", "subtract", "less" ], "char": "\u2796", fitzpatrick_scale: false, category: "symbols" }, heavy_division_sign: { keywords: [ "divide", "math", "calculation" ], "char": "\u2797", fitzpatrick_scale: false, category: "symbols" }, heavy_multiplication_x: { keywords: [ "math", "calculation" ], "char": "\u2716\ufe0f", fitzpatrick_scale: false, category: "symbols" }, heavy_dollar_sign: { keywords: [ "money", "sales", "payment", "currency", "buck" ], "char": "\ud83d\udcb2", fitzpatrick_scale: false, category: "symbols" }, currency_exchange: { keywords: [ "money", "sales", "dollar", "travel" ], "char": "\ud83d\udcb1", fitzpatrick_scale: false, category: "symbols" }, copyright: { keywords: [ "ip", "license", "circle", "law", "legal" ], "char": "\xa9\ufe0f", fitzpatrick_scale: false, category: "symbols" }, registered: { keywords: [ "alphabet", "circle" ], "char": "\xae\ufe0f", fitzpatrick_scale: false, category: "symbols" }, tm: { keywords: [ "trademark", "brand", "law", "legal" ], "char": "\u2122\ufe0f", fitzpatrick_scale: false, category: "symbols" }, end: { keywords: [ "words", "arrow" ], "char": "\ud83d\udd1a", fitzpatrick_scale: false, category: "symbols" }, back: { keywords: [ "arrow", "words", "return" ], "char": "\ud83d\udd19", fitzpatrick_scale: false, category: "symbols" }, on: { keywords: [ "arrow", "words" ], "char": "\ud83d\udd1b", fitzpatrick_scale: false, category: "symbols" }, top: { keywords: [ "words", "blue-square" ], "char": "\ud83d\udd1d", fitzpatrick_scale: false, category: "symbols" }, soon: { keywords: [ "arrow", "words" ], "char": "\ud83d\udd1c", fitzpatrick_scale: false, category: "symbols" }, ballot_box_with_check: { keywords: [ "ok", "agree", "confirm", "black-square", "vote", "election", "yes", "tick" ], "char": "\u2611\ufe0f", fitzpatrick_scale: false, category: "symbols" }, radio_button: { keywords: [ "input", "old", "music", "circle" ], "char": "\ud83d\udd18", fitzpatrick_scale: false, category: "symbols" }, white_circle: { keywords: [ "shape", "round" ], "char": "\u26aa", fitzpatrick_scale: false, category: "symbols" }, black_circle: { keywords: [ "shape", "button", "round" ], "char": "\u26ab", fitzpatrick_scale: false, category: "symbols" }, red_circle: { keywords: [ "shape", "error", "danger" ], "char": "\ud83d\udd34", fitzpatrick_scale: false, category: "symbols" }, large_blue_circle: { keywords: [ "shape", "icon", "button" ], "char": "\ud83d\udd35", fitzpatrick_scale: false, category: "symbols" }, small_orange_diamond: { keywords: [ "shape", "jewel", "gem" ], "char": "\ud83d\udd38", fitzpatrick_scale: false, category: "symbols" }, small_blue_diamond: { keywords: [ "shape", "jewel", "gem" ], "char": "\ud83d\udd39", fitzpatrick_scale: false, category: "symbols" }, large_orange_diamond: { keywords: [ "shape", "jewel", "gem" ], "char": "\ud83d\udd36", fitzpatrick_scale: false, category: "symbols" }, large_blue_diamond: { keywords: [ "shape", "jewel", "gem" ], "char": "\ud83d\udd37", fitzpatrick_scale: false, category: "symbols" }, small_red_triangle: { keywords: [ "shape", "direction", "up", "top" ], "char": "\ud83d\udd3a", fitzpatrick_scale: false, category: "symbols" }, black_small_square: { keywords: [ "shape", "icon" ], "char": "\u25aa\ufe0f", fitzpatrick_scale: false, category: "symbols" }, white_small_square: { keywords: [ "shape", "icon" ], "char": "\u25ab\ufe0f", fitzpatrick_scale: false, category: "symbols" }, black_large_square: { keywords: [ "shape", "icon", "button" ], "char": "\u2b1b", fitzpatrick_scale: false, category: "symbols" }, white_large_square: { keywords: [ "shape", "icon", "stone", "button" ], "char": "\u2b1c", fitzpatrick_scale: false, category: "symbols" }, small_red_triangle_down: { keywords: [ "shape", "direction", "bottom" ], "char": "\ud83d\udd3b", fitzpatrick_scale: false, category: "symbols" }, black_medium_square: { keywords: [ "shape", "button", "icon" ], "char": "\u25fc\ufe0f", fitzpatrick_scale: false, category: "symbols" }, white_medium_square: { keywords: [ "shape", "stone", "icon" ], "char": "\u25fb\ufe0f", fitzpatrick_scale: false, category: "symbols" }, black_medium_small_square: { keywords: [ "icon", "shape", "button" ], "char": "\u25fe", fitzpatrick_scale: false, category: "symbols" }, white_medium_small_square: { keywords: [ "shape", "stone", "icon", "button" ], "char": "\u25fd", fitzpatrick_scale: false, category: "symbols" }, black_square_button: { keywords: [ "shape", "input", "frame" ], "char": "\ud83d\udd32", fitzpatrick_scale: false, category: "symbols" }, white_square_button: { keywords: [ "shape", "input" ], "char": "\ud83d\udd33", fitzpatrick_scale: false, category: "symbols" }, speaker: { keywords: [ "sound", "volume", "silence", "broadcast" ], "char": "\ud83d\udd08", fitzpatrick_scale: false, category: "symbols" }, sound: { keywords: [ "volume", "speaker", "broadcast" ], "char": "\ud83d\udd09", fitzpatrick_scale: false, category: "symbols" }, loud_sound: { keywords: [ "volume", "noise", "noisy", "speaker", "broadcast" ], "char": "\ud83d\udd0a", fitzpatrick_scale: false, category: "symbols" }, mute: { keywords: [ "sound", "volume", "silence", "quiet" ], "char": "\ud83d\udd07", fitzpatrick_scale: false, category: "symbols" }, mega: { keywords: [ "sound", "speaker", "volume" ], "char": "\ud83d\udce3", fitzpatrick_scale: false, category: "symbols" }, loudspeaker: { keywords: [ "volume", "sound" ], "char": "\ud83d\udce2", fitzpatrick_scale: false, category: "symbols" }, bell: { keywords: [ "sound", "notification", "christmas", "xmas", "chime" ], "char": "\ud83d\udd14", fitzpatrick_scale: false, category: "symbols" }, no_bell: { keywords: [ "sound", "volume", "mute", "quiet", "silent" ], "char": "\ud83d\udd15", fitzpatrick_scale: false, category: "symbols" }, black_joker: { keywords: [ "poker", "cards", "game", "play", "magic" ], "char": "\ud83c\udccf", fitzpatrick_scale: false, category: "symbols" }, mahjong: { keywords: [ "game", "play", "chinese", "kanji" ], "char": "\ud83c\udc04", fitzpatrick_scale: false, category: "symbols" }, spades: { keywords: [ "poker", "cards", "suits", "magic" ], "char": "\u2660\ufe0f", fitzpatrick_scale: false, category: "symbols" }, clubs: { keywords: [ "poker", "cards", "magic", "suits" ], "char": "\u2663\ufe0f", fitzpatrick_scale: false, category: "symbols" }, hearts: { keywords: [ "poker", "cards", "magic", "suits" ], "char": "\u2665\ufe0f", fitzpatrick_scale: false, category: "symbols" }, diamonds: { keywords: [ "poker", "cards", "magic", "suits" ], "char": "\u2666\ufe0f", fitzpatrick_scale: false, category: "symbols" }, flower_playing_cards: { keywords: [ "game", "sunset", "red" ], "char": "\ud83c\udfb4", fitzpatrick_scale: false, category: "symbols" }, thought_balloon: { keywords: [ "bubble", "cloud", "speech", "thinking", "dream" ], "char": "\ud83d\udcad", fitzpatrick_scale: false, category: "symbols" }, right_anger_bubble: { keywords: [ "caption", "speech", "thinking", "mad" ], "char": "\ud83d\uddef", fitzpatrick_scale: false, category: "symbols" }, speech_balloon: { keywords: [ "bubble", "words", "message", "talk", "chatting" ], "char": "\ud83d\udcac", fitzpatrick_scale: false, category: "symbols" }, left_speech_bubble: { keywords: [ "words", "message", "talk", "chatting" ], "char": "\ud83d\udde8", fitzpatrick_scale: false, category: "symbols" }, clock1: { keywords: [ "time", "late", "early", "schedule" ], "char": "\ud83d\udd50", fitzpatrick_scale: false, category: "symbols" }, clock2: { keywords: [ "time", "late", "early", "schedule" ], "char": "\ud83d\udd51", fitzpatrick_scale: false, category: "symbols" }, clock3: { keywords: [ "time", "late", "early", "schedule" ], "char": "\ud83d\udd52", fitzpatrick_scale: false, category: "symbols" }, clock4: { keywords: [ "time", "late", "early", "schedule" ], "char": "\ud83d\udd53", fitzpatrick_scale: false, category: "symbols" }, clock5: { keywords: [ "time", "late", "early", "schedule" ], "char": "\ud83d\udd54", fitzpatrick_scale: false, category: "symbols" }, clock6: { keywords: [ "time", "late", "early", "schedule", "dawn", "dusk" ], "char": "\ud83d\udd55", fitzpatrick_scale: false, category: "symbols" }, clock7: { keywords: [ "time", "late", "early", "schedule" ], "char": "\ud83d\udd56", fitzpatrick_scale: false, category: "symbols" }, clock8: { keywords: [ "time", "late", "early", "schedule" ], "char": "\ud83d\udd57", fitzpatrick_scale: false, category: "symbols" }, clock9: { keywords: [ "time", "late", "early", "schedule" ], "char": "\ud83d\udd58", fitzpatrick_scale: false, category: "symbols" }, clock10: { keywords: [ "time", "late", "early", "schedule" ], "char": "\ud83d\udd59", fitzpatrick_scale: false, category: "symbols" }, clock11: { keywords: [ "time", "late", "early", "schedule" ], "char": "\ud83d\udd5a", fitzpatrick_scale: false, category: "symbols" }, clock12: { keywords: [ "time", "noon", "midnight", "midday", "late", "early", "schedule" ], "char": "\ud83d\udd5b", fitzpatrick_scale: false, category: "symbols" }, clock130: { keywords: [ "time", "late", "early", "schedule" ], "char": "\ud83d\udd5c", fitzpatrick_scale: false, category: "symbols" }, clock230: { keywords: [ "time", "late", "early", "schedule" ], "char": "\ud83d\udd5d", fitzpatrick_scale: false, category: "symbols" }, clock330: { keywords: [ "time", "late", "early", "schedule" ], "char": "\ud83d\udd5e", fitzpatrick_scale: false, category: "symbols" }, clock430: { keywords: [ "time", "late", "early", "schedule" ], "char": "\ud83d\udd5f", fitzpatrick_scale: false, category: "symbols" }, clock530: { keywords: [ "time", "late", "early", "schedule" ], "char": "\ud83d\udd60", fitzpatrick_scale: false, category: "symbols" }, clock630: { keywords: [ "time", "late", "early", "schedule" ], "char": "\ud83d\udd61", fitzpatrick_scale: false, category: "symbols" }, clock730: { keywords: [ "time", "late", "early", "schedule" ], "char": "\ud83d\udd62", fitzpatrick_scale: false, category: "symbols" }, clock830: { keywords: [ "time", "late", "early", "schedule" ], "char": "\ud83d\udd63", fitzpatrick_scale: false, category: "symbols" }, clock930: { keywords: [ "time", "late", "early", "schedule" ], "char": "\ud83d\udd64", fitzpatrick_scale: false, category: "symbols" }, clock1030: { keywords: [ "time", "late", "early", "schedule" ], "char": "\ud83d\udd65", fitzpatrick_scale: false, category: "symbols" }, clock1130: { keywords: [ "time", "late", "early", "schedule" ], "char": "\ud83d\udd66", fitzpatrick_scale: false, category: "symbols" }, clock1230: { keywords: [ "time", "late", "early", "schedule" ], "char": "\ud83d\udd67", fitzpatrick_scale: false, category: "symbols" }, afghanistan: { keywords: [ "af", "flag", "nation", "country", "banner" ], "char": "\ud83c\udde6\ud83c\uddeb", fitzpatrick_scale: false, category: "flags" }, aland_islands: { keywords: [ "\xc5land", "islands", "flag", "nation", "country", "banner" ], "char": "\ud83c\udde6\ud83c\uddfd", fitzpatrick_scale: false, category: "flags" }, albania: { keywords: [ "al", "flag", "nation", "country", "banner" ], "char": "\ud83c\udde6\ud83c\uddf1", fitzpatrick_scale: false, category: "flags" }, algeria: { keywords: [ "dz", "flag", "nation", "country", "banner" ], "char": "\ud83c\udde9\ud83c\uddff", fitzpatrick_scale: false, category: "flags" }, american_samoa: { keywords: [ "american", "ws", "flag", "nation", "country", "banner" ], "char": "\ud83c\udde6\ud83c\uddf8", fitzpatrick_scale: false, category: "flags" }, andorra: { keywords: [ "ad", "flag", "nation", "country", "banner" ], "char": "\ud83c\udde6\ud83c\udde9", fitzpatrick_scale: false, category: "flags" }, angola: { keywords: [ "ao", "flag", "nation", "country", "banner" ], "char": "\ud83c\udde6\ud83c\uddf4", fitzpatrick_scale: false, category: "flags" }, anguilla: { keywords: [ "ai", "flag", "nation", "country", "banner" ], "char": "\ud83c\udde6\ud83c\uddee", fitzpatrick_scale: false, category: "flags" }, antarctica: { keywords: [ "aq", "flag", "nation", "country", "banner" ], "char": "\ud83c\udde6\ud83c\uddf6", fitzpatrick_scale: false, category: "flags" }, antigua_barbuda: { keywords: [ "antigua", "barbuda", "flag", "nation", "country", "banner" ], "char": "\ud83c\udde6\ud83c\uddec", fitzpatrick_scale: false, category: "flags" }, argentina: { keywords: [ "ar", "flag", "nation", "country", "banner" ], "char": "\ud83c\udde6\ud83c\uddf7", fitzpatrick_scale: false, category: "flags" }, armenia: { keywords: [ "am", "flag", "nation", "country", "banner" ], "char": "\ud83c\udde6\ud83c\uddf2", fitzpatrick_scale: false, category: "flags" }, aruba: { keywords: [ "aw", "flag", "nation", "country", "banner" ], "char": "\ud83c\udde6\ud83c\uddfc", fitzpatrick_scale: false, category: "flags" }, australia: { keywords: [ "au", "flag", "nation", "country", "banner" ], "char": "\ud83c\udde6\ud83c\uddfa", fitzpatrick_scale: false, category: "flags" }, austria: { keywords: [ "at", "flag", "nation", "country", "banner" ], "char": "\ud83c\udde6\ud83c\uddf9", fitzpatrick_scale: false, category: "flags" }, azerbaijan: { keywords: [ "az", "flag", "nation", "country", "banner" ], "char": "\ud83c\udde6\ud83c\uddff", fitzpatrick_scale: false, category: "flags" }, bahamas: { keywords: [ "bs", "flag", "nation", "country", "banner" ], "char": "\ud83c\udde7\ud83c\uddf8", fitzpatrick_scale: false, category: "flags" }, bahrain: { keywords: [ "bh", "flag", "nation", "country", "banner" ], "char": "\ud83c\udde7\ud83c\udded", fitzpatrick_scale: false, category: "flags" }, bangladesh: { keywords: [ "bd", "flag", "nation", "country", "banner" ], "char": "\ud83c\udde7\ud83c\udde9", fitzpatrick_scale: false, category: "flags" }, barbados: { keywords: [ "bb", "flag", "nation", "country", "banner" ], "char": "\ud83c\udde7\ud83c\udde7", fitzpatrick_scale: false, category: "flags" }, belarus: { keywords: [ "by", "flag", "nation", "country", "banner" ], "char": "\ud83c\udde7\ud83c\uddfe", fitzpatrick_scale: false, category: "flags" }, belgium: { keywords: [ "be", "flag", "nation", "country", "banner" ], "char": "\ud83c\udde7\ud83c\uddea", fitzpatrick_scale: false, category: "flags" }, belize: { keywords: [ "bz", "flag", "nation", "country", "banner" ], "char": "\ud83c\udde7\ud83c\uddff", fitzpatrick_scale: false, category: "flags" }, benin: { keywords: [ "bj", "flag", "nation", "country", "banner" ], "char": "\ud83c\udde7\ud83c\uddef", fitzpatrick_scale: false, category: "flags" }, bermuda: { keywords: [ "bm", "flag", "nation", "country", "banner" ], "char": "\ud83c\udde7\ud83c\uddf2", fitzpatrick_scale: false, category: "flags" }, bhutan: { keywords: [ "bt", "flag", "nation", "country", "banner" ], "char": "\ud83c\udde7\ud83c\uddf9", fitzpatrick_scale: false, category: "flags" }, bolivia: { keywords: [ "bo", "flag", "nation", "country", "banner" ], "char": "\ud83c\udde7\ud83c\uddf4", fitzpatrick_scale: false, category: "flags" }, caribbean_netherlands: { keywords: [ "bonaire", "flag", "nation", "country", "banner" ], "char": "\ud83c\udde7\ud83c\uddf6", fitzpatrick_scale: false, category: "flags" }, bosnia_herzegovina: { keywords: [ "bosnia", "herzegovina", "flag", "nation", "country", "banner" ], "char": "\ud83c\udde7\ud83c\udde6", fitzpatrick_scale: false, category: "flags" }, botswana: { keywords: [ "bw", "flag", "nation", "country", "banner" ], "char": "\ud83c\udde7\ud83c\uddfc", fitzpatrick_scale: false, category: "flags" }, brazil: { keywords: [ "br", "flag", "nation", "country", "banner" ], "char": "\ud83c\udde7\ud83c\uddf7", fitzpatrick_scale: false, category: "flags" }, british_indian_ocean_territory: { keywords: [ "british", "indian", "ocean", "territory", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddee\ud83c\uddf4", fitzpatrick_scale: false, category: "flags" }, british_virgin_islands: { keywords: [ "british", "virgin", "islands", "bvi", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddfb\ud83c\uddec", fitzpatrick_scale: false, category: "flags" }, brunei: { keywords: [ "bn", "darussalam", "flag", "nation", "country", "banner" ], "char": "\ud83c\udde7\ud83c\uddf3", fitzpatrick_scale: false, category: "flags" }, bulgaria: { keywords: [ "bg", "flag", "nation", "country", "banner" ], "char": "\ud83c\udde7\ud83c\uddec", fitzpatrick_scale: false, category: "flags" }, burkina_faso: { keywords: [ "burkina", "faso", "flag", "nation", "country", "banner" ], "char": "\ud83c\udde7\ud83c\uddeb", fitzpatrick_scale: false, category: "flags" }, burundi: { keywords: [ "bi", "flag", "nation", "country", "banner" ], "char": "\ud83c\udde7\ud83c\uddee", fitzpatrick_scale: false, category: "flags" }, cape_verde: { keywords: [ "cabo", "verde", "flag", "nation", "country", "banner" ], "char": "\ud83c\udde8\ud83c\uddfb", fitzpatrick_scale: false, category: "flags" }, cambodia: { keywords: [ "kh", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf0\ud83c\udded", fitzpatrick_scale: false, category: "flags" }, cameroon: { keywords: [ "cm", "flag", "nation", "country", "banner" ], "char": "\ud83c\udde8\ud83c\uddf2", fitzpatrick_scale: false, category: "flags" }, canada: { keywords: [ "ca", "flag", "nation", "country", "banner" ], "char": "\ud83c\udde8\ud83c\udde6", fitzpatrick_scale: false, category: "flags" }, canary_islands: { keywords: [ "canary", "islands", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddee\ud83c\udde8", fitzpatrick_scale: false, category: "flags" }, cayman_islands: { keywords: [ "cayman", "islands", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf0\ud83c\uddfe", fitzpatrick_scale: false, category: "flags" }, central_african_republic: { keywords: [ "central", "african", "republic", "flag", "nation", "country", "banner" ], "char": "\ud83c\udde8\ud83c\uddeb", fitzpatrick_scale: false, category: "flags" }, chad: { keywords: [ "td", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf9\ud83c\udde9", fitzpatrick_scale: false, category: "flags" }, chile: { keywords: [ "flag", "nation", "country", "banner" ], "char": "\ud83c\udde8\ud83c\uddf1", fitzpatrick_scale: false, category: "flags" }, cn: { keywords: [ "china", "chinese", "prc", "flag", "country", "nation", "banner" ], "char": "\ud83c\udde8\ud83c\uddf3", fitzpatrick_scale: false, category: "flags" }, christmas_island: { keywords: [ "christmas", "island", "flag", "nation", "country", "banner" ], "char": "\ud83c\udde8\ud83c\uddfd", fitzpatrick_scale: false, category: "flags" }, cocos_islands: { keywords: [ "cocos", "keeling", "islands", "flag", "nation", "country", "banner" ], "char": "\ud83c\udde8\ud83c\udde8", fitzpatrick_scale: false, category: "flags" }, colombia: { keywords: [ "co", "flag", "nation", "country", "banner" ], "char": "\ud83c\udde8\ud83c\uddf4", fitzpatrick_scale: false, category: "flags" }, comoros: { keywords: [ "km", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf0\ud83c\uddf2", fitzpatrick_scale: false, category: "flags" }, congo_brazzaville: { keywords: [ "congo", "flag", "nation", "country", "banner" ], "char": "\ud83c\udde8\ud83c\uddec", fitzpatrick_scale: false, category: "flags" }, congo_kinshasa: { keywords: [ "congo", "democratic", "republic", "flag", "nation", "country", "banner" ], "char": "\ud83c\udde8\ud83c\udde9", fitzpatrick_scale: false, category: "flags" }, cook_islands: { keywords: [ "cook", "islands", "flag", "nation", "country", "banner" ], "char": "\ud83c\udde8\ud83c\uddf0", fitzpatrick_scale: false, category: "flags" }, costa_rica: { keywords: [ "costa", "rica", "flag", "nation", "country", "banner" ], "char": "\ud83c\udde8\ud83c\uddf7", fitzpatrick_scale: false, category: "flags" }, croatia: { keywords: [ "hr", "flag", "nation", "country", "banner" ], "char": "\ud83c\udded\ud83c\uddf7", fitzpatrick_scale: false, category: "flags" }, cuba: { keywords: [ "cu", "flag", "nation", "country", "banner" ], "char": "\ud83c\udde8\ud83c\uddfa", fitzpatrick_scale: false, category: "flags" }, curacao: { keywords: [ "cura\xe7ao", "flag", "nation", "country", "banner" ], "char": "\ud83c\udde8\ud83c\uddfc", fitzpatrick_scale: false, category: "flags" }, cyprus: { keywords: [ "cy", "flag", "nation", "country", "banner" ], "char": "\ud83c\udde8\ud83c\uddfe", fitzpatrick_scale: false, category: "flags" }, czech_republic: { keywords: [ "cz", "flag", "nation", "country", "banner" ], "char": "\ud83c\udde8\ud83c\uddff", fitzpatrick_scale: false, category: "flags" }, denmark: { keywords: [ "dk", "flag", "nation", "country", "banner" ], "char": "\ud83c\udde9\ud83c\uddf0", fitzpatrick_scale: false, category: "flags" }, djibouti: { keywords: [ "dj", "flag", "nation", "country", "banner" ], "char": "\ud83c\udde9\ud83c\uddef", fitzpatrick_scale: false, category: "flags" }, dominica: { keywords: [ "dm", "flag", "nation", "country", "banner" ], "char": "\ud83c\udde9\ud83c\uddf2", fitzpatrick_scale: false, category: "flags" }, dominican_republic: { keywords: [ "dominican", "republic", "flag", "nation", "country", "banner" ], "char": "\ud83c\udde9\ud83c\uddf4", fitzpatrick_scale: false, category: "flags" }, ecuador: { keywords: [ "ec", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddea\ud83c\udde8", fitzpatrick_scale: false, category: "flags" }, egypt: { keywords: [ "eg", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddea\ud83c\uddec", fitzpatrick_scale: false, category: "flags" }, el_salvador: { keywords: [ "el", "salvador", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf8\ud83c\uddfb", fitzpatrick_scale: false, category: "flags" }, equatorial_guinea: { keywords: [ "equatorial", "gn", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddec\ud83c\uddf6", fitzpatrick_scale: false, category: "flags" }, eritrea: { keywords: [ "er", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddea\ud83c\uddf7", fitzpatrick_scale: false, category: "flags" }, estonia: { keywords: [ "ee", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddea\ud83c\uddea", fitzpatrick_scale: false, category: "flags" }, ethiopia: { keywords: [ "et", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddea\ud83c\uddf9", fitzpatrick_scale: false, category: "flags" }, eu: { keywords: [ "european", "union", "flag", "banner" ], "char": "\ud83c\uddea\ud83c\uddfa", fitzpatrick_scale: false, category: "flags" }, falkland_islands: { keywords: [ "falkland", "islands", "malvinas", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddeb\ud83c\uddf0", fitzpatrick_scale: false, category: "flags" }, faroe_islands: { keywords: [ "faroe", "islands", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddeb\ud83c\uddf4", fitzpatrick_scale: false, category: "flags" }, fiji: { keywords: [ "fj", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddeb\ud83c\uddef", fitzpatrick_scale: false, category: "flags" }, finland: { keywords: [ "fi", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddeb\ud83c\uddee", fitzpatrick_scale: false, category: "flags" }, fr: { keywords: [ "banner", "flag", "nation", "france", "french", "country" ], "char": "\ud83c\uddeb\ud83c\uddf7", fitzpatrick_scale: false, category: "flags" }, french_guiana: { keywords: [ "french", "guiana", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddec\ud83c\uddeb", fitzpatrick_scale: false, category: "flags" }, french_polynesia: { keywords: [ "french", "polynesia", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf5\ud83c\uddeb", fitzpatrick_scale: false, category: "flags" }, french_southern_territories: { keywords: [ "french", "southern", "territories", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf9\ud83c\uddeb", fitzpatrick_scale: false, category: "flags" }, gabon: { keywords: [ "ga", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddec\ud83c\udde6", fitzpatrick_scale: false, category: "flags" }, gambia: { keywords: [ "gm", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddec\ud83c\uddf2", fitzpatrick_scale: false, category: "flags" }, georgia: { keywords: [ "ge", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddec\ud83c\uddea", fitzpatrick_scale: false, category: "flags" }, de: { keywords: [ "german", "nation", "flag", "country", "banner" ], "char": "\ud83c\udde9\ud83c\uddea", fitzpatrick_scale: false, category: "flags" }, ghana: { keywords: [ "gh", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddec\ud83c\udded", fitzpatrick_scale: false, category: "flags" }, gibraltar: { keywords: [ "gi", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddec\ud83c\uddee", fitzpatrick_scale: false, category: "flags" }, greece: { keywords: [ "gr", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddec\ud83c\uddf7", fitzpatrick_scale: false, category: "flags" }, greenland: { keywords: [ "gl", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddec\ud83c\uddf1", fitzpatrick_scale: false, category: "flags" }, grenada: { keywords: [ "gd", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddec\ud83c\udde9", fitzpatrick_scale: false, category: "flags" }, guadeloupe: { keywords: [ "gp", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddec\ud83c\uddf5", fitzpatrick_scale: false, category: "flags" }, guam: { keywords: [ "gu", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddec\ud83c\uddfa", fitzpatrick_scale: false, category: "flags" }, guatemala: { keywords: [ "gt", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddec\ud83c\uddf9", fitzpatrick_scale: false, category: "flags" }, guernsey: { keywords: [ "gg", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddec\ud83c\uddec", fitzpatrick_scale: false, category: "flags" }, guinea: { keywords: [ "gn", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddec\ud83c\uddf3", fitzpatrick_scale: false, category: "flags" }, guinea_bissau: { keywords: [ "gw", "bissau", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddec\ud83c\uddfc", fitzpatrick_scale: false, category: "flags" }, guyana: { keywords: [ "gy", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddec\ud83c\uddfe", fitzpatrick_scale: false, category: "flags" }, haiti: { keywords: [ "ht", "flag", "nation", "country", "banner" ], "char": "\ud83c\udded\ud83c\uddf9", fitzpatrick_scale: false, category: "flags" }, honduras: { keywords: [ "hn", "flag", "nation", "country", "banner" ], "char": "\ud83c\udded\ud83c\uddf3", fitzpatrick_scale: false, category: "flags" }, hong_kong: { keywords: [ "hong", "kong", "flag", "nation", "country", "banner" ], "char": "\ud83c\udded\ud83c\uddf0", fitzpatrick_scale: false, category: "flags" }, hungary: { keywords: [ "hu", "flag", "nation", "country", "banner" ], "char": "\ud83c\udded\ud83c\uddfa", fitzpatrick_scale: false, category: "flags" }, iceland: { keywords: [ "is", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddee\ud83c\uddf8", fitzpatrick_scale: false, category: "flags" }, india: { keywords: [ "in", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddee\ud83c\uddf3", fitzpatrick_scale: false, category: "flags" }, indonesia: { keywords: [ "flag", "nation", "country", "banner" ], "char": "\ud83c\uddee\ud83c\udde9", fitzpatrick_scale: false, category: "flags" }, iran: { keywords: [ "iran,", "islamic", "republic", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddee\ud83c\uddf7", fitzpatrick_scale: false, category: "flags" }, iraq: { keywords: [ "iq", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddee\ud83c\uddf6", fitzpatrick_scale: false, category: "flags" }, ireland: { keywords: [ "ie", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddee\ud83c\uddea", fitzpatrick_scale: false, category: "flags" }, isle_of_man: { keywords: [ "isle", "man", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddee\ud83c\uddf2", fitzpatrick_scale: false, category: "flags" }, israel: { keywords: [ "il", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddee\ud83c\uddf1", fitzpatrick_scale: false, category: "flags" }, it: { keywords: [ "italy", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddee\ud83c\uddf9", fitzpatrick_scale: false, category: "flags" }, cote_divoire: { keywords: [ "ivory", "coast", "flag", "nation", "country", "banner" ], "char": "\ud83c\udde8\ud83c\uddee", fitzpatrick_scale: false, category: "flags" }, jamaica: { keywords: [ "jm", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddef\ud83c\uddf2", fitzpatrick_scale: false, category: "flags" }, jp: { keywords: [ "japanese", "nation", "flag", "country", "banner" ], "char": "\ud83c\uddef\ud83c\uddf5", fitzpatrick_scale: false, category: "flags" }, jersey: { keywords: [ "je", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddef\ud83c\uddea", fitzpatrick_scale: false, category: "flags" }, jordan: { keywords: [ "jo", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddef\ud83c\uddf4", fitzpatrick_scale: false, category: "flags" }, kazakhstan: { keywords: [ "kz", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf0\ud83c\uddff", fitzpatrick_scale: false, category: "flags" }, kenya: { keywords: [ "ke", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf0\ud83c\uddea", fitzpatrick_scale: false, category: "flags" }, kiribati: { keywords: [ "ki", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf0\ud83c\uddee", fitzpatrick_scale: false, category: "flags" }, kosovo: { keywords: [ "xk", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddfd\ud83c\uddf0", fitzpatrick_scale: false, category: "flags" }, kuwait: { keywords: [ "kw", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf0\ud83c\uddfc", fitzpatrick_scale: false, category: "flags" }, kyrgyzstan: { keywords: [ "kg", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf0\ud83c\uddec", fitzpatrick_scale: false, category: "flags" }, laos: { keywords: [ "lao", "democratic", "republic", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf1\ud83c\udde6", fitzpatrick_scale: false, category: "flags" }, latvia: { keywords: [ "lv", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf1\ud83c\uddfb", fitzpatrick_scale: false, category: "flags" }, lebanon: { keywords: [ "lb", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf1\ud83c\udde7", fitzpatrick_scale: false, category: "flags" }, lesotho: { keywords: [ "ls", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf1\ud83c\uddf8", fitzpatrick_scale: false, category: "flags" }, liberia: { keywords: [ "lr", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf1\ud83c\uddf7", fitzpatrick_scale: false, category: "flags" }, libya: { keywords: [ "ly", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf1\ud83c\uddfe", fitzpatrick_scale: false, category: "flags" }, liechtenstein: { keywords: [ "li", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf1\ud83c\uddee", fitzpatrick_scale: false, category: "flags" }, lithuania: { keywords: [ "lt", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf1\ud83c\uddf9", fitzpatrick_scale: false, category: "flags" }, luxembourg: { keywords: [ "lu", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf1\ud83c\uddfa", fitzpatrick_scale: false, category: "flags" }, macau: { keywords: [ "macao", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf2\ud83c\uddf4", fitzpatrick_scale: false, category: "flags" }, macedonia: { keywords: [ "macedonia,", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf2\ud83c\uddf0", fitzpatrick_scale: false, category: "flags" }, madagascar: { keywords: [ "mg", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf2\ud83c\uddec", fitzpatrick_scale: false, category: "flags" }, malawi: { keywords: [ "mw", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf2\ud83c\uddfc", fitzpatrick_scale: false, category: "flags" }, malaysia: { keywords: [ "my", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf2\ud83c\uddfe", fitzpatrick_scale: false, category: "flags" }, maldives: { keywords: [ "mv", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf2\ud83c\uddfb", fitzpatrick_scale: false, category: "flags" }, mali: { keywords: [ "ml", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf2\ud83c\uddf1", fitzpatrick_scale: false, category: "flags" }, malta: { keywords: [ "mt", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf2\ud83c\uddf9", fitzpatrick_scale: false, category: "flags" }, marshall_islands: { keywords: [ "marshall", "islands", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf2\ud83c\udded", fitzpatrick_scale: false, category: "flags" }, martinique: { keywords: [ "mq", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf2\ud83c\uddf6", fitzpatrick_scale: false, category: "flags" }, mauritania: { keywords: [ "mr", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf2\ud83c\uddf7", fitzpatrick_scale: false, category: "flags" }, mauritius: { keywords: [ "mu", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf2\ud83c\uddfa", fitzpatrick_scale: false, category: "flags" }, mayotte: { keywords: [ "yt", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddfe\ud83c\uddf9", fitzpatrick_scale: false, category: "flags" }, mexico: { keywords: [ "mx", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf2\ud83c\uddfd", fitzpatrick_scale: false, category: "flags" }, micronesia: { keywords: [ "micronesia,", "federated", "states", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddeb\ud83c\uddf2", fitzpatrick_scale: false, category: "flags" }, moldova: { keywords: [ "moldova,", "republic", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf2\ud83c\udde9", fitzpatrick_scale: false, category: "flags" }, monaco: { keywords: [ "mc", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf2\ud83c\udde8", fitzpatrick_scale: false, category: "flags" }, mongolia: { keywords: [ "mn", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf2\ud83c\uddf3", fitzpatrick_scale: false, category: "flags" }, montenegro: { keywords: [ "me", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf2\ud83c\uddea", fitzpatrick_scale: false, category: "flags" }, montserrat: { keywords: [ "ms", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf2\ud83c\uddf8", fitzpatrick_scale: false, category: "flags" }, morocco: { keywords: [ "ma", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf2\ud83c\udde6", fitzpatrick_scale: false, category: "flags" }, mozambique: { keywords: [ "mz", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf2\ud83c\uddff", fitzpatrick_scale: false, category: "flags" }, myanmar: { keywords: [ "mm", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf2\ud83c\uddf2", fitzpatrick_scale: false, category: "flags" }, namibia: { keywords: [ "na", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf3\ud83c\udde6", fitzpatrick_scale: false, category: "flags" }, nauru: { keywords: [ "nr", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf3\ud83c\uddf7", fitzpatrick_scale: false, category: "flags" }, nepal: { keywords: [ "np", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf3\ud83c\uddf5", fitzpatrick_scale: false, category: "flags" }, netherlands: { keywords: [ "nl", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf3\ud83c\uddf1", fitzpatrick_scale: false, category: "flags" }, new_caledonia: { keywords: [ "new", "caledonia", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf3\ud83c\udde8", fitzpatrick_scale: false, category: "flags" }, new_zealand: { keywords: [ "new", "zealand", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf3\ud83c\uddff", fitzpatrick_scale: false, category: "flags" }, nicaragua: { keywords: [ "ni", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf3\ud83c\uddee", fitzpatrick_scale: false, category: "flags" }, niger: { keywords: [ "ne", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf3\ud83c\uddea", fitzpatrick_scale: false, category: "flags" }, nigeria: { keywords: [ "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf3\ud83c\uddec", fitzpatrick_scale: false, category: "flags" }, niue: { keywords: [ "nu", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf3\ud83c\uddfa", fitzpatrick_scale: false, category: "flags" }, norfolk_island: { keywords: [ "norfolk", "island", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf3\ud83c\uddeb", fitzpatrick_scale: false, category: "flags" }, northern_mariana_islands: { keywords: [ "northern", "mariana", "islands", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf2\ud83c\uddf5", fitzpatrick_scale: false, category: "flags" }, north_korea: { keywords: [ "north", "korea", "nation", "flag", "country", "banner" ], "char": "\ud83c\uddf0\ud83c\uddf5", fitzpatrick_scale: false, category: "flags" }, norway: { keywords: [ "no", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf3\ud83c\uddf4", fitzpatrick_scale: false, category: "flags" }, oman: { keywords: [ "om_symbol", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf4\ud83c\uddf2", fitzpatrick_scale: false, category: "flags" }, pakistan: { keywords: [ "pk", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf5\ud83c\uddf0", fitzpatrick_scale: false, category: "flags" }, palau: { keywords: [ "pw", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf5\ud83c\uddfc", fitzpatrick_scale: false, category: "flags" }, palestinian_territories: { keywords: [ "palestine", "palestinian", "territories", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf5\ud83c\uddf8", fitzpatrick_scale: false, category: "flags" }, panama: { keywords: [ "pa", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf5\ud83c\udde6", fitzpatrick_scale: false, category: "flags" }, papua_new_guinea: { keywords: [ "papua", "new", "guinea", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf5\ud83c\uddec", fitzpatrick_scale: false, category: "flags" }, paraguay: { keywords: [ "py", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf5\ud83c\uddfe", fitzpatrick_scale: false, category: "flags" }, peru: { keywords: [ "pe", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf5\ud83c\uddea", fitzpatrick_scale: false, category: "flags" }, philippines: { keywords: [ "ph", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf5\ud83c\udded", fitzpatrick_scale: false, category: "flags" }, pitcairn_islands: { keywords: [ "pitcairn", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf5\ud83c\uddf3", fitzpatrick_scale: false, category: "flags" }, poland: { keywords: [ "pl", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf5\ud83c\uddf1", fitzpatrick_scale: false, category: "flags" }, portugal: { keywords: [ "pt", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf5\ud83c\uddf9", fitzpatrick_scale: false, category: "flags" }, puerto_rico: { keywords: [ "puerto", "rico", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf5\ud83c\uddf7", fitzpatrick_scale: false, category: "flags" }, qatar: { keywords: [ "qa", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf6\ud83c\udde6", fitzpatrick_scale: false, category: "flags" }, reunion: { keywords: [ "r\xe9union", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf7\ud83c\uddea", fitzpatrick_scale: false, category: "flags" }, romania: { keywords: [ "ro", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf7\ud83c\uddf4", fitzpatrick_scale: false, category: "flags" }, ru: { keywords: [ "russian", "federation", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf7\ud83c\uddfa", fitzpatrick_scale: false, category: "flags" }, rwanda: { keywords: [ "rw", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf7\ud83c\uddfc", fitzpatrick_scale: false, category: "flags" }, st_barthelemy: { keywords: [ "saint", "barth\xe9lemy", "flag", "nation", "country", "banner" ], "char": "\ud83c\udde7\ud83c\uddf1", fitzpatrick_scale: false, category: "flags" }, st_helena: { keywords: [ "saint", "helena", "ascension", "tristan", "cunha", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf8\ud83c\udded", fitzpatrick_scale: false, category: "flags" }, st_kitts_nevis: { keywords: [ "saint", "kitts", "nevis", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf0\ud83c\uddf3", fitzpatrick_scale: false, category: "flags" }, st_lucia: { keywords: [ "saint", "lucia", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf1\ud83c\udde8", fitzpatrick_scale: false, category: "flags" }, st_pierre_miquelon: { keywords: [ "saint", "pierre", "miquelon", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf5\ud83c\uddf2", fitzpatrick_scale: false, category: "flags" }, st_vincent_grenadines: { keywords: [ "saint", "vincent", "grenadines", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddfb\ud83c\udde8", fitzpatrick_scale: false, category: "flags" }, samoa: { keywords: [ "ws", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddfc\ud83c\uddf8", fitzpatrick_scale: false, category: "flags" }, san_marino: { keywords: [ "san", "marino", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf8\ud83c\uddf2", fitzpatrick_scale: false, category: "flags" }, sao_tome_principe: { keywords: [ "sao", "tome", "principe", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf8\ud83c\uddf9", fitzpatrick_scale: false, category: "flags" }, saudi_arabia: { keywords: [ "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf8\ud83c\udde6", fitzpatrick_scale: false, category: "flags" }, senegal: { keywords: [ "sn", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf8\ud83c\uddf3", fitzpatrick_scale: false, category: "flags" }, serbia: { keywords: [ "rs", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf7\ud83c\uddf8", fitzpatrick_scale: false, category: "flags" }, seychelles: { keywords: [ "sc", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf8\ud83c\udde8", fitzpatrick_scale: false, category: "flags" }, sierra_leone: { keywords: [ "sierra", "leone", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf8\ud83c\uddf1", fitzpatrick_scale: false, category: "flags" }, singapore: { keywords: [ "sg", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf8\ud83c\uddec", fitzpatrick_scale: false, category: "flags" }, sint_maarten: { keywords: [ "sint", "maarten", "dutch", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf8\ud83c\uddfd", fitzpatrick_scale: false, category: "flags" }, slovakia: { keywords: [ "sk", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf8\ud83c\uddf0", fitzpatrick_scale: false, category: "flags" }, slovenia: { keywords: [ "si", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf8\ud83c\uddee", fitzpatrick_scale: false, category: "flags" }, solomon_islands: { keywords: [ "solomon", "islands", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf8\ud83c\udde7", fitzpatrick_scale: false, category: "flags" }, somalia: { keywords: [ "so", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf8\ud83c\uddf4", fitzpatrick_scale: false, category: "flags" }, south_africa: { keywords: [ "south", "africa", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddff\ud83c\udde6", fitzpatrick_scale: false, category: "flags" }, south_georgia_south_sandwich_islands: { keywords: [ "south", "georgia", "sandwich", "islands", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddec\ud83c\uddf8", fitzpatrick_scale: false, category: "flags" }, kr: { keywords: [ "south", "korea", "nation", "flag", "country", "banner" ], "char": "\ud83c\uddf0\ud83c\uddf7", fitzpatrick_scale: false, category: "flags" }, south_sudan: { keywords: [ "south", "sd", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf8\ud83c\uddf8", fitzpatrick_scale: false, category: "flags" }, es: { keywords: [ "spain", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddea\ud83c\uddf8", fitzpatrick_scale: false, category: "flags" }, sri_lanka: { keywords: [ "sri", "lanka", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf1\ud83c\uddf0", fitzpatrick_scale: false, category: "flags" }, sudan: { keywords: [ "sd", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf8\ud83c\udde9", fitzpatrick_scale: false, category: "flags" }, suriname: { keywords: [ "sr", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf8\ud83c\uddf7", fitzpatrick_scale: false, category: "flags" }, swaziland: { keywords: [ "sz", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf8\ud83c\uddff", fitzpatrick_scale: false, category: "flags" }, sweden: { keywords: [ "se", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf8\ud83c\uddea", fitzpatrick_scale: false, category: "flags" }, switzerland: { keywords: [ "ch", "flag", "nation", "country", "banner" ], "char": "\ud83c\udde8\ud83c\udded", fitzpatrick_scale: false, category: "flags" }, syria: { keywords: [ "syrian", "arab", "republic", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf8\ud83c\uddfe", fitzpatrick_scale: false, category: "flags" }, taiwan: { keywords: [ "tw", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf9\ud83c\uddfc", fitzpatrick_scale: false, category: "flags" }, tajikistan: { keywords: [ "tj", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf9\ud83c\uddef", fitzpatrick_scale: false, category: "flags" }, tanzania: { keywords: [ "tanzania,", "united", "republic", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf9\ud83c\uddff", fitzpatrick_scale: false, category: "flags" }, thailand: { keywords: [ "th", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf9\ud83c\udded", fitzpatrick_scale: false, category: "flags" }, timor_leste: { keywords: [ "timor", "leste", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf9\ud83c\uddf1", fitzpatrick_scale: false, category: "flags" }, togo: { keywords: [ "tg", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf9\ud83c\uddec", fitzpatrick_scale: false, category: "flags" }, tokelau: { keywords: [ "tk", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf9\ud83c\uddf0", fitzpatrick_scale: false, category: "flags" }, tonga: { keywords: [ "to", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf9\ud83c\uddf4", fitzpatrick_scale: false, category: "flags" }, trinidad_tobago: { keywords: [ "trinidad", "tobago", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf9\ud83c\uddf9", fitzpatrick_scale: false, category: "flags" }, tunisia: { keywords: [ "tn", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf9\ud83c\uddf3", fitzpatrick_scale: false, category: "flags" }, tr: { keywords: [ "turkey", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf9\ud83c\uddf7", fitzpatrick_scale: false, category: "flags" }, turkmenistan: { keywords: [ "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf9\ud83c\uddf2", fitzpatrick_scale: false, category: "flags" }, turks_caicos_islands: { keywords: [ "turks", "caicos", "islands", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf9\ud83c\udde8", fitzpatrick_scale: false, category: "flags" }, tuvalu: { keywords: [ "flag", "nation", "country", "banner" ], "char": "\ud83c\uddf9\ud83c\uddfb", fitzpatrick_scale: false, category: "flags" }, uganda: { keywords: [ "ug", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddfa\ud83c\uddec", fitzpatrick_scale: false, category: "flags" }, ukraine: { keywords: [ "ua", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddfa\ud83c\udde6", fitzpatrick_scale: false, category: "flags" }, united_arab_emirates: { keywords: [ "united", "arab", "emirates", "flag", "nation", "country", "banner" ], "char": "\ud83c\udde6\ud83c\uddea", fitzpatrick_scale: false, category: "flags" }, uk: { keywords: [ "united", "kingdom", "great", "britain", "northern", "ireland", "flag", "nation", "country", "banner", "british", "UK", "english", "england", "union jack" ], "char": "\ud83c\uddec\ud83c\udde7", fitzpatrick_scale: false, category: "flags" }, england: { keywords: [ "flag", "english" ], "char": "\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f", fitzpatrick_scale: false, category: "flags" }, scotland: { keywords: [ "flag", "scottish" ], "char": "\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc73\udb40\udc63\udb40\udc74\udb40\udc7f", fitzpatrick_scale: false, category: "flags" }, wales: { keywords: [ "flag", "welsh" ], "char": "\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc77\udb40\udc6c\udb40\udc73\udb40\udc7f", fitzpatrick_scale: false, category: "flags" }, us: { keywords: [ "united", "states", "america", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddfa\ud83c\uddf8", fitzpatrick_scale: false, category: "flags" }, us_virgin_islands: { keywords: [ "virgin", "islands", "us", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddfb\ud83c\uddee", fitzpatrick_scale: false, category: "flags" }, uruguay: { keywords: [ "uy", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddfa\ud83c\uddfe", fitzpatrick_scale: false, category: "flags" }, uzbekistan: { keywords: [ "uz", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddfa\ud83c\uddff", fitzpatrick_scale: false, category: "flags" }, vanuatu: { keywords: [ "vu", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddfb\ud83c\uddfa", fitzpatrick_scale: false, category: "flags" }, vatican_city: { keywords: [ "vatican", "city", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddfb\ud83c\udde6", fitzpatrick_scale: false, category: "flags" }, venezuela: { keywords: [ "ve", "bolivarian", "republic", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddfb\ud83c\uddea", fitzpatrick_scale: false, category: "flags" }, vietnam: { keywords: [ "viet", "nam", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddfb\ud83c\uddf3", fitzpatrick_scale: false, category: "flags" }, wallis_futuna: { keywords: [ "wallis", "futuna", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddfc\ud83c\uddeb", fitzpatrick_scale: false, category: "flags" }, western_sahara: { keywords: [ "western", "sahara", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddea\ud83c\udded", fitzpatrick_scale: false, category: "flags" }, yemen: { keywords: [ "ye", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddfe\ud83c\uddea", fitzpatrick_scale: false, category: "flags" }, zambia: { keywords: [ "zm", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddff\ud83c\uddf2", fitzpatrick_scale: false, category: "flags" }, zimbabwe: { keywords: [ "zw", "flag", "nation", "country", "banner" ], "char": "\ud83c\uddff\ud83c\uddfc", fitzpatrick_scale: false, category: "flags" } }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/webuploader/README.md ================================================ 目录说明 ======================== ```bash ├── Uploader.swf # SWF文件,当使用Flash运行时需要引入。 ├ ├── webuploader.js # 完全版本。 ├── webuploader.min.js # min版本 ├ ├── webuploader.flashonly.js # 只有Flash实现的版本。 ├── webuploader.flashonly.min.js # min版本 ├ ├── webuploader.html5only.js # 只有Html5实现的版本。 ├── webuploader.html5only.min.js # min版本 ├ ├── webuploader.noimage.js # 去除图片处理的版本,包括HTML5和FLASH. ├── webuploader.noimage.min.js # min版本 ├ ├── webuploader.custom.js # 自定义打包方案,请查看 Gruntfile.js,满足移动端使用。 └── webuploader.custom.min.js # min版本 ``` ## 示例 请把整个 Git 包下载下来放在 php 服务器下,因为默认提供的文件接受是用 php 编写的,打开 examples 页面便能查看示例效果。 ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/webuploader/webuploader.css ================================================ .webuploader-container { position: relative } .webuploader-element-invisible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px, 1px, 1px, 1px) } .webuploader-pick { border-radius: 1px; will-change: box-shadow !important; box-shadow: 0 3px 1px -2px rgba(0, 0, 0, .15), 0 2px 2px 0 rgba(0, 0, 0, .15), 0 1px 5px 0 rgba(0, 0, 0, .15); border: 1px solid transparent; display: inline-block; padding: 6px 12px; margin-bottom: 0; font-size: 14px; font-weight: 400; line-height: 1.42857143; text-align: center; white-space: nowrap; vertical-align: middle; -ms-touch-action: manipulation; touch-action: manipulation; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; background-image: none; color: #fff; background-color: #4099df } .webuploader-pick-hover { opacity: .9 } .webuploader-pick-disable { opacity: .6; pointer-events: none } .web-uploader { border: 0; color: #838383; font-size: 12px; margin-top: 10px; background-color: transparent } .web-uploader.disabled { background-color: #eee; min-height: 34px; cursor: not-allowed } .web-uploader._files { border: 0 } .web-uploader .queueList { } .web-uploader._files .queueList { } .element-invisible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px, 1px, 1px, 1px) } .web-uploader .placeholder { /*padding-top: 85px;*/ /*background: url(./image.png) center 15px no-repeat;*/ border: 3px dashed #e6e6e6; padding-top: 5px; text-align: center; color: #ccc; font-size: 16px; position: relative; } .web-uploader .placeholder .webuploader-pick { background: #4099df; border-radius: 3px; line-height: 34px; padding: 0 25px; color: #fff; display: inline-block; margin: 0 auto 20px; cursor: pointer } .web-uploader .placeholder .webuploader-pick-hover { opacity: .9 } .web-uploader .placeholder p { margin: 0 0 20px; } .web-uploader .placeholder .flashTip { color: #666; font-size: 12px; position: absolute; width: 100%; text-align: center; bottom: 20px } .web-uploader .placeholder .flashTip a { color: #4099df; text-decoration: none } .web-uploader .placeholder .flashTip a:hover { text-decoration: underline } .web-uploader .placeholder.webuploader-dnd-over { border-color: #999 } .web-uploader .placeholder.webuploader-dnd-over.webuploader-dnd-denied { border-color: #ff5b5b } .web-uploader .filelist { list-style: none; margin: 0; padding: 0 } .web-uploader .filelist:after { content: ''; display: block; width: 0; height: 0; overflow: hidden; clear: both } .web-uploader .filelist li { width: 120px; text-align: center; position: relative; float: left; overflow: hidden; border-radius: 2px; font-size: 12px; box-shadow: 1px 1px 5px 0 #a2958a; -webkit-box-shadow: 1px 1px 5px 0 #a2958a; color: #333; background: #fff; display: table; margin: 8px; height: 160px; padding: 6px; vertical-align: middle } .web-uploader._files .filelist li { width: 100%; height: 40px; background: var(--primary-light); margin: 0 8px 10px 0; box-shadow: none; -webkit-box-shadow: none; border-radius: 5px; border: 0; padding: 0 } .web-uploader._files .filelist li ._act { float: right; margin: 16px 10px 0; cursor: pointer; font-size: 15px; position: absolute; right: 0 } .web-uploader .filelist li p.log { position: relative; top: -45px } .web-uploader .filelist li p.title { left: 0; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; top: 35px; text-indent: 5px; width: 160px; text-align: center; padding-top: 4px; font-size: 11px; color: #777; margin: 3px auto } .web-uploader._files .filelist li p.title { font-weight: 600; font-size: 15px; vertical-align: middle; height: 42px; line-height: 35px; padding-left: 8px; float: left; text-align: left; color: #333; width: 450px } .web-uploader .filelist .file-type { display: none; font-size: 18px; font-weight: bold; text-shadow: 0 1px 2px rgba(0, 0, 0, .2); margin: 20px 0 5px; height: 105px } .web-uploader .filelist li p.upload-progress { position: absolute; width: 100%; bottom: 0; left: 0; height: 8px; overflow: hidden; z-index: 50 } .web-uploader .filelist li p.upload-progress span { display: none; overflow: hidden; width: 0; height: 100%; background: #4099df url(./progress.png) repeat-x; -webit-transition: width 200ms linear; -moz-transition: width 200ms linear; -o-transition: width 200ms linear; -ms-transition: width 200ms linear; transition: width 200ms linear; -webkit-animation: progressmove 2s linear infinite; -moz-animation: progressmove 2s linear infinite; -o-animation: progressmove 2s linear infinite; -ms-animation: progressmove 2s linear infinite; animation: progressmove 2s linear infinite; -webkit-transform: translateZ(0) } @-webkit-keyframes progressmove { 0% { background-position: 0 0 } 100% { background-position: 17px 0 } } @-moz-keyframes progressmove { 0% { background-position: 0 0 } 100% { background-position: 17px 0 } } @keyframes progressmove { 0% { background-position: 0 0 } 100% { background-position: 17px 0 } } .web-uploader .filelist li .imgWrap { position: relative; z-index: 2; line-height: 100%; vertical-align: middle; overflow: hidden; width: 100%; height: 120px; -webkit-transform-origin: 50% 50%; -moz-transform-origin: 50% 50%; -o-transform-origin: 50% 50%; -ms-transform-origin: 50% 50%; transform-origin: 50% 50%; -webit-transition: 200ms ease-out; -moz-transition: 200ms ease-out; -o-transition: 200ms ease-out; -ms-transition: 200ms ease-out; transition: 200ms ease-out; margin-bottom: 0; } .web-uploader .filelist li img { width: auto; height: 120px } .web-uploader .filelist li p.error { background: var(--danger); color: #fff; position: absolute; bottom: 0; left: 0; height: 28px; line-height: 28px; width: 100%; z-index: 100 } .web-uploader._files .filelist li p.error { background: var(--danger); color: #fff; font-weight: 500; padding: 0 20px; width: auto; margin-left: 40%; top: 0 } .web-uploader .filelist li .success { display: block; position: absolute; left: 0; bottom: 0; height: 40px; width: 100%; z-index: 200 } .web-uploader .filelist li .success em { position: absolute; right: 0; border-color: transparent; border-style: solid; border-width: 0 0 33px 40px; border-bottom-color: var(--success); bottom: -1px } .web-uploader li .success i { position: absolute; bottom: 5px; right: 0; color: #fff; background: none; border: none; font-weight: bold; outline: none; text-align: center; width: 20px } .web-uploader .filelist div.file-panel { position: absolute; height: 32px; width: 100%; bottom: 0; left: 0; overflow: hidden; z-index: 10 } .web-uploader .filelist div.file-panel span { display: inline; float: left; width: 24px; height: 24px; line-height: 26px; overflow: hidden; margin: 5px 3px 5px; font-weight: bold; cursor: pointer; color: #fff; border-radius: 1px; font-size: 14px } .web-uploader .filelist div.file-panel a { float: left; margin-left: 3px } .web-uploader .statusBar { height: 53px; line-height: 53px; vertical-align: middle; position: relative } .web-uploader._files .statusBar { border-top: 0; padding: 0 } .web-uploader .statusBar .upload-progress { border: 0; width: 198px; height: 18px; display: inline-block; text-align: center; line-height: 45px; color: #fff; margin-top: 20px; position: relative; margin-right: 10px; border-radius: 2px } .web-uploader .statusBar .upload-progress span.percentage { width: 0; height: 100%; left: 0; top: 0; background: #4099df; position: absolute } .web-uploader .statusBar .upload-progress span.text { position: relative; z-index: 10 } .web-uploader .statusBar .info { display: inline-block; font-size: 14px; color: #666!important; } .web-uploader .statusBar .btns { margin-top: 4px; right: 20px; line-height: 40px; float: right } .web-uploader._files .statusBar .btns { right: 0 } .add-file-button { display: inline-block; float: left } .web-uploader .placeholder:before { font-size: 80px; font-family: feather; content: "\e8e3"; } ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/webuploader/webuploader.custom.js ================================================ /*! WebUploader 0.1.5 */ /** * @fileOverview 让内部各个部件的代码可以用[amd](https://github.com/amdjs/amdjs-api/wiki/AMD)模块定义方式组织起来。 * * AMD API 内部的简单不完全实现,请忽略。只有当WebUploader被合并成一个文件的时候才会引入。 */ (function( root, factory ) { var modules = {}, // 内部require, 简单不完全实现。 // https://github.com/amdjs/amdjs-api/wiki/require _require = function( deps, callback ) { var args, len, i; // 如果deps不是数组,则直接返回指定module if ( typeof deps === 'string' ) { return getModule( deps ); } else { args = []; for( len = deps.length, i = 0; i < len; i++ ) { args.push( getModule( deps[ i ] ) ); } return callback.apply( null, args ); } }, // 内部define,暂时不支持不指定id. _define = function( id, deps, factory ) { if ( arguments.length === 2 ) { factory = deps; deps = null; } _require( deps || [], function() { setModule( id, factory, arguments ); }); }, // 设置module, 兼容CommonJs写法。 setModule = function( id, factory, args ) { var module = { exports: factory }, returned; if ( typeof factory === 'function' ) { args.length || (args = [ _require, module.exports, module ]); returned = factory.apply( null, args ); returned !== undefined && (module.exports = returned); } modules[ id ] = module.exports; }, // 根据id获取module getModule = function( id ) { var module = modules[ id ] || root[ id ]; if ( !module ) { throw new Error( '`' + id + '` is undefined' ); } return module; }, // 将所有modules,将路径ids装换成对象。 exportsTo = function( obj ) { var key, host, parts, part, last, ucFirst; // make the first character upper case. ucFirst = function( str ) { return str && (str.charAt( 0 ).toUpperCase() + str.substr( 1 )); }; for ( key in modules ) { host = obj; if ( !modules.hasOwnProperty( key ) ) { continue; } parts = key.split('/'); last = ucFirst( parts.pop() ); while( (part = ucFirst( parts.shift() )) ) { host[ part ] = host[ part ] || {}; host = host[ part ]; } host[ last ] = modules[ key ]; } return obj; }, makeExport = function( dollar ) { root.__dollar = dollar; // exports every module. return exportsTo( factory( root, _define, _require ) ); }, origin; if ( typeof module === 'object' && typeof module.exports === 'object' ) { // For CommonJS and CommonJS-like environments where a proper window is present, module.exports = makeExport(); } else if ( typeof define === 'function' && define.amd ) { // Allow using this built library as an AMD module // in another project. That other project will only // see this AMD call, not the internal modules in // the closure below. define([ 'jquery' ], makeExport ); } else { // Browser globals case. Just assign the // result to a property on the global. origin = root.WebUploader; root.WebUploader = makeExport(); root.WebUploader.noConflict = function() { root.WebUploader = origin; }; } })( window, function( window, define, require ) { /** * @fileOverview jQuery or Zepto */ define('dollar-third',[],function() { var $ = window.__dollar || window.jQuery || window.Zepto; if ( !$ ) { throw new Error('jQuery or Zepto not found!'); } return $; }); /** * @fileOverview Dom 操作相关 */ define('dollar',[ 'dollar-third' ], function( _ ) { return _; }); /** * 直接来源于jquery的代码。 * @fileOverview Promise/A+ * @beta */ define('promise-builtin',[ 'dollar' ], function( $ ) { var api; // 简单版Callbacks, 默认memory,可选once. function Callbacks( once ) { var list = [], stack = !once && [], fire = function( data ) { memory = data; fired = true; firingIndex = firingStart || 0; firingStart = 0; firingLength = list.length; firing = true; for ( ; list && firingIndex < firingLength; firingIndex++ ) { list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ); } firing = false; if ( list ) { if ( stack ) { stack.length && fire( stack.shift() ); } else { list = []; } } }, self = { add: function() { if ( list ) { var start = list.length; (function add ( args ) { $.each( args, function( _, arg ) { var type = $.type( arg ); if ( type === 'function' ) { list.push( arg ); } else if ( arg && arg.length && type !== 'string' ) { add( arg ); } }); })( arguments ); if ( firing ) { firingLength = list.length; } else if ( memory ) { firingStart = start; fire( memory ); } } return this; }, disable: function() { list = stack = memory = undefined; return this; }, // Lock the list in its current state lock: function() { stack = undefined; if ( !memory ) { self.disable(); } return this; }, fireWith: function( context, args ) { if ( list && (!fired || stack) ) { args = args || []; args = [ context, args.slice ? args.slice() : args ]; if ( firing ) { stack.push( args ); } else { fire( args ); } } return this; }, fire: function() { self.fireWith( this, arguments ); return this; } }, fired, firing, firingStart, firingLength, firingIndex, memory; return self; } function Deferred( func ) { var tuples = [ // action, add listener, listener list, final state [ 'resolve', 'done', Callbacks( true ), 'resolved' ], [ 'reject', 'fail', Callbacks( true ), 'rejected' ], [ 'notify', 'progress', Callbacks() ] ], state = 'pending', promise = { state: function() { return state; }, always: function() { deferred.done( arguments ).fail( arguments ); return this; }, then: function( /* fnDone, fnFail, fnProgress */ ) { var fns = arguments; return Deferred(function( newDefer ) { $.each( tuples, function( i, tuple ) { var action = tuple[ 0 ], fn = $.isFunction( fns[ i ] ) && fns[ i ]; // deferred[ done | fail | progress ] for // forwarding actions to newDefer deferred[ tuple[ 1 ] ](function() { var returned; returned = fn && fn.apply( this, arguments ); if ( returned && $.isFunction( returned.promise ) ) { returned.promise() .done( newDefer.resolve ) .fail( newDefer.reject ) .progress( newDefer.notify ); } else { newDefer[ action + 'With' ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments ); } }); }); fns = null; }).promise(); }, // Get a promise for this deferred // If obj is provided, the promise aspect is added to the object promise: function( obj ) { return obj != null ? $.extend( obj, promise ) : promise; } }, deferred = {}; // Keep pipe for back-compat promise.pipe = promise.then; // Add list-specific methods $.each( tuples, function( i, tuple ) { var list = tuple[ 2 ], stateString = tuple[ 3 ]; // promise[ done | fail | progress ] = list.add promise[ tuple[ 1 ] ] = list.add; // Handle state if ( stateString ) { list.add(function() { // state = [ resolved | rejected ] state = stateString; // [ reject_list | resolve_list ].disable; progress_list.lock }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); } // deferred[ resolve | reject | notify ] deferred[ tuple[ 0 ] ] = function() { deferred[ tuple[ 0 ] + 'With' ]( this === deferred ? promise : this, arguments ); return this; }; deferred[ tuple[ 0 ] + 'With' ] = list.fireWith; }); // Make the deferred a promise promise.promise( deferred ); // Call given func if any if ( func ) { func.call( deferred, deferred ); } // All done! return deferred; } api = { /** * 创建一个[Deferred](http://api.jquery.com/category/deferred-object/)对象。 * 详细的Deferred用法说明,请参照jQuery的API文档。 * * Deferred对象在钩子回掉函数中经常要用到,用来处理需要等待的异步操作。 * * @for Base * @method Deferred * @grammar Base.Deferred() => Deferred * @example * // 在文件开始发送前做些异步操作。 * // WebUploader会等待此异步操作完成后,开始发送文件。 * Uploader.register({ * 'before-send-file': 'doSomthingAsync' * }, { * * doSomthingAsync: function() { * var deferred = Base.Deferred(); * * // 模拟一次异步操作。 * setTimeout(deferred.resolve, 2000); * * return deferred.promise(); * } * }); */ Deferred: Deferred, /** * 判断传入的参数是否为一个promise对象。 * @method isPromise * @grammar Base.isPromise( anything ) => Boolean * @param {*} anything 检测对象。 * @return {Boolean} * @for Base * @example * console.log( Base.isPromise() ); // => false * console.log( Base.isPromise({ key: '123' }) ); // => false * console.log( Base.isPromise( Base.Deferred().promise() ) ); // => true * * // Deferred也是一个Promise * console.log( Base.isPromise( Base.Deferred() ) ); // => true */ isPromise: function( anything ) { return anything && typeof anything.then === 'function'; }, /** * 返回一个promise,此promise在所有传入的promise都完成了后完成。 * 详细请查看[这里](http://api.jquery.com/jQuery.when/)。 * * @method when * @for Base * @grammar Base.when( promise1[, promise2[, promise3...]] ) => Promise */ when: function( subordinate /* , ..., subordinateN */ ) { var i = 0, slice = [].slice, resolveValues = slice.call( arguments ), length = resolveValues.length, // the count of uncompleted subordinates remaining = length !== 1 || (subordinate && $.isFunction( subordinate.promise )) ? length : 0, // the master Deferred. If resolveValues consist of // only a single Deferred, just use that. deferred = remaining === 1 ? subordinate : Deferred(), // Update function for both resolve and progress values updateFunc = function( i, contexts, values ) { return function( value ) { contexts[ i ] = this; values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; if ( values === progressValues ) { deferred.notifyWith( contexts, values ); } else if ( !(--remaining) ) { deferred.resolveWith( contexts, values ); } }; }, progressValues, progressContexts, resolveContexts; // add listeners to Deferred subordinates; treat others as resolved if ( length > 1 ) { progressValues = new Array( length ); progressContexts = new Array( length ); resolveContexts = new Array( length ); for ( ; i < length; i++ ) { if ( resolveValues[ i ] && $.isFunction( resolveValues[ i ].promise ) ) { resolveValues[ i ].promise() .done( updateFunc( i, resolveContexts, resolveValues ) ) .fail( deferred.reject ) .progress( updateFunc( i, progressContexts, progressValues ) ); } else { --remaining; } } } // if we're not waiting on anything, resolve the master if ( !remaining ) { deferred.resolveWith( resolveContexts, resolveValues ); } return deferred.promise(); } }; return api; }); define('promise',[ 'promise-builtin' ], function( $ ) { return $; }); /** * @fileOverview 基础类方法。 */ /** * Web Uploader内部类的详细说明,以下提及的功能类,都可以在`WebUploader`这个变量中访问到。 * * As you know, Web Uploader的每个文件都是用过[AMD](https://github.com/amdjs/amdjs-api/wiki/AMD)规范中的`define`组织起来的, 每个Module都会有个module id. * 默认module id为该文件的路径,而此路径将会转化成名字空间存放在WebUploader中。如: * * * module `base`:WebUploader.Base * * module `file`: WebUploader.File * * module `lib/dnd`: WebUploader.Lib.Dnd * * module `runtime/html5/dnd`: WebUploader.Runtime.Html5.Dnd * * * 以下文档中对类的使用可能省略掉了`WebUploader`前缀。 * @module WebUploader * @title WebUploader API文档 */ define('base',[ 'dollar', 'promise' ], function( $, promise ) { var noop = function() {}, call = Function.call; // http://jsperf.com/uncurrythis // 反科里化 function uncurryThis( fn ) { return function() { return call.apply( fn, arguments ); }; } function bindFn( fn, context ) { return function() { return fn.apply( context, arguments ); }; } function createObject( proto ) { var f; if ( Object.create ) { return Object.create( proto ); } else { f = function() {}; f.prototype = proto; return new f(); } } /** * 基础类,提供一些简单常用的方法。 * @class Base */ return { /** * @property {String} version 当前版本号。 */ version: '0.1.5', /** * @property {jQuery|Zepto} $ 引用依赖的jQuery或者Zepto对象。 */ $: $, Deferred: promise.Deferred, isPromise: promise.isPromise, when: promise.when, /** * @description 简单的浏览器检查结果。 * * * `webkit` webkit版本号,如果浏览器为非webkit内核,此属性为`undefined`。 * * `chrome` chrome浏览器版本号,如果浏览器为chrome,此属性为`undefined`。 * * `ie` ie浏览器版本号,如果浏览器为非ie,此属性为`undefined`。**暂不支持ie10+** * * `firefox` firefox浏览器版本号,如果浏览器为非firefox,此属性为`undefined`。 * * `safari` safari浏览器版本号,如果浏览器为非safari,此属性为`undefined`。 * * `opera` opera浏览器版本号,如果浏览器为非opera,此属性为`undefined`。 * * @property {Object} [browser] */ browser: (function( ua ) { var ret = {}, webkit = ua.match( /WebKit\/([\d.]+)/ ), chrome = ua.match( /Chrome\/([\d.]+)/ ) || ua.match( /CriOS\/([\d.]+)/ ), ie = ua.match( /MSIE\s([\d\.]+)/ ) || ua.match( /(?:trident)(?:.*rv:([\w.]+))?/i ), firefox = ua.match( /Firefox\/([\d.]+)/ ), safari = ua.match( /Safari\/([\d.]+)/ ), opera = ua.match( /OPR\/([\d.]+)/ ); webkit && (ret.webkit = parseFloat( webkit[ 1 ] )); chrome && (ret.chrome = parseFloat( chrome[ 1 ] )); ie && (ret.ie = parseFloat( ie[ 1 ] )); firefox && (ret.firefox = parseFloat( firefox[ 1 ] )); safari && (ret.safari = parseFloat( safari[ 1 ] )); opera && (ret.opera = parseFloat( opera[ 1 ] )); return ret; })( navigator.userAgent ), /** * @description 操作系统检查结果。 * * * `android` 如果在android浏览器环境下,此值为对应的android版本号,否则为`undefined`。 * * `ios` 如果在ios浏览器环境下,此值为对应的ios版本号,否则为`undefined`。 * @property {Object} [os] */ os: (function( ua ) { var ret = {}, // osx = !!ua.match( /\(Macintosh\; Intel / ), android = ua.match( /(?:Android);?[\s\/]+([\d.]+)?/ ), ios = ua.match( /(?:iPad|iPod|iPhone).*OS\s([\d_]+)/ ); // osx && (ret.osx = true); android && (ret.android = parseFloat( android[ 1 ] )); ios && (ret.ios = parseFloat( ios[ 1 ].replace( /_/g, '.' ) )); return ret; })( navigator.userAgent ), /** * 实现类与类之间的继承。 * @method inherits * @grammar Base.inherits( super ) => child * @grammar Base.inherits( super, protos ) => child * @grammar Base.inherits( super, protos, statics ) => child * @param {Class} super 父类 * @param {Object | Function} [protos] 子类或者对象。如果对象中包含constructor,子类将是用此属性值。 * @param {Function} [protos.constructor] 子类构造器,不指定的话将创建个临时的直接执行父类构造器的方法。 * @param {Object} [statics] 静态属性或方法。 * @return {Class} 返回子类。 * @example * function Person() { * console.log( 'Super' ); * } * Person.prototype.hello = function() { * console.log( 'hello' ); * }; * * var Manager = Base.inherits( Person, { * world: function() { * console.log( 'World' ); * } * }); * * // 因为没有指定构造器,父类的构造器将会执行。 * var instance = new Manager(); // => Super * * // 继承子父类的方法 * instance.hello(); // => hello * instance.world(); // => World * * // 子类的__super__属性指向父类 * console.log( Manager.__super__ === Person ); // => true */ inherits: function( Super, protos, staticProtos ) { var child; if ( typeof protos === 'function' ) { child = protos; protos = null; } else if ( protos && protos.hasOwnProperty('constructor') ) { child = protos.constructor; } else { child = function() { return Super.apply( this, arguments ); }; } // 复制静态方法 $.extend( true, child, Super, staticProtos || {} ); /* jshint camelcase: false */ // 让子类的__super__属性指向父类。 child.__super__ = Super.prototype; // 构建原型,添加原型方法或属性。 // 暂时用Object.create实现。 child.prototype = createObject( Super.prototype ); protos && $.extend( true, child.prototype, protos ); return child; }, /** * 一个不做任何事情的方法。可以用来赋值给默认的callback. * @method noop */ noop: noop, /** * 返回一个新的方法,此方法将已指定的`context`来执行。 * @grammar Base.bindFn( fn, context ) => Function * @method bindFn * @example * var doSomething = function() { * console.log( this.name ); * }, * obj = { * name: 'Object Name' * }, * aliasFn = Base.bind( doSomething, obj ); * * aliasFn(); // => Object Name * */ bindFn: bindFn, /** * 引用Console.log如果存在的话,否则引用一个[空函数noop](#WebUploader:Base.noop)。 * @grammar Base.log( args... ) => undefined * @method log */ log: (function() { if ( window.console ) { return bindFn( console.log, console ); } return noop; })(), nextTick: (function() { return function( cb ) { setTimeout( cb, 1 ); }; // @bug 当浏览器不在当前窗口时就停了。 // var next = window.requestAnimationFrame || // window.webkitRequestAnimationFrame || // window.mozRequestAnimationFrame || // function( cb ) { // window.setTimeout( cb, 1000 / 60 ); // }; // // fix: Uncaught TypeError: Illegal invocation // return bindFn( next, window ); })(), /** * 被[uncurrythis](http://www.2ality.com/2011/11/uncurrying-this.html)的数组slice方法。 * 将用来将非数组对象转化成数组对象。 * @grammar Base.slice( target, start[, end] ) => Array * @method slice * @example * function doSomthing() { * var args = Base.slice( arguments, 1 ); * console.log( args ); * } * * doSomthing( 'ignored', 'arg2', 'arg3' ); // => Array ["arg2", "arg3"] */ slice: uncurryThis( [].slice ), /** * 生成唯一的ID * @method guid * @grammar Base.guid() => String * @grammar Base.guid( prefx ) => String */ guid: (function() { var counter = 0; return function( prefix ) { var guid = (+new Date()).toString( 32 ), i = 0; for ( ; i < 5; i++ ) { guid += Math.floor( Math.random() * 65535 ).toString( 32 ); } return (prefix || 'wu_') + guid + (counter++).toString( 32 ); }; })(), /** * 格式化文件大小, 输出成带单位的字符串 * @method formatSize * @grammar Base.formatSize( size ) => String * @grammar Base.formatSize( size, pointLength ) => String * @grammar Base.formatSize( size, pointLength, units ) => String * @param {Number} size 文件大小 * @param {Number} [pointLength=2] 精确到的小数点数。 * @param {Array} [units=[ 'B', 'K', 'M', 'G', 'TB' ]] 单位数组。从字节,到千字节,一直往上指定。如果单位数组里面只指定了到了K(千字节),同时文件大小大于M, 此方法的输出将还是显示成多少K. * @example * console.log( Base.formatSize( 100 ) ); // => 100B * console.log( Base.formatSize( 1024 ) ); // => 1.00K * console.log( Base.formatSize( 1024, 0 ) ); // => 1K * console.log( Base.formatSize( 1024 * 1024 ) ); // => 1.00M * console.log( Base.formatSize( 1024 * 1024 * 1024 ) ); // => 1.00G * console.log( Base.formatSize( 1024 * 1024 * 1024, 0, ['B', 'KB', 'MB'] ) ); // => 1024MB */ formatSize: function( size, pointLength, units ) { var unit; units = units || [ 'B', 'K', 'M', 'G', 'TB' ]; while ( (unit = units.shift()) && size > 1024 ) { size = size / 1024; } return (unit === 'B' ? size : size.toFixed( pointLength || 2 )) + unit; } }; }); /** * 事件处理类,可以独立使用,也可以扩展给对象使用。 * @fileOverview Mediator */ define('mediator',[ 'base' ], function( Base ) { var $ = Base.$, slice = [].slice, separator = /\s+/, protos; // 根据条件过滤出事件handlers. function findHandlers( arr, name, callback, context ) { return $.grep( arr, function( handler ) { return handler && (!name || handler.e === name) && (!callback || handler.cb === callback || handler.cb._cb === callback) && (!context || handler.ctx === context); }); } function eachEvent( events, callback, iterator ) { // 不支持对象,只支持多个event用空格隔开 $.each( (events || '').split( separator ), function( _, key ) { iterator( key, callback ); }); } function triggerHanders( events, args ) { var stoped = false, i = -1, len = events.length, handler; while ( ++i < len ) { handler = events[ i ]; if ( handler.cb.apply( handler.ctx2, args ) === false ) { stoped = true; break; } } return !stoped; } protos = { /** * 绑定事件。 * * `callback`方法在执行时,arguments将会来源于trigger的时候携带的参数。如 * ```javascript * var obj = {}; * * // 使得obj有事件行为 * Mediator.installTo( obj ); * * obj.on( 'testa', function( arg1, arg2 ) { * console.log( arg1, arg2 ); // => 'arg1', 'arg2' * }); * * obj.trigger( 'testa', 'arg1', 'arg2' ); * ``` * * 如果`callback`中,某一个方法`return false`了,则后续的其他`callback`都不会被执行到。 * 切会影响到`trigger`方法的返回值,为`false`。 * * `on`还可以用来添加一个特殊事件`all`, 这样所有的事件触发都会响应到。同时此类`callback`中的arguments有一个不同处, * 就是第一个参数为`type`,记录当前是什么事件在触发。此类`callback`的优先级比脚低,会再正常`callback`执行完后触发。 * ```javascript * obj.on( 'all', function( type, arg1, arg2 ) { * console.log( type, arg1, arg2 ); // => 'testa', 'arg1', 'arg2' * }); * ``` * * @method on * @grammar on( name, callback[, context] ) => self * @param {String} name 事件名,支持多个事件用空格隔开 * @param {Function} callback 事件处理器 * @param {Object} [context] 事件处理器的上下文。 * @return {self} 返回自身,方便链式 * @chainable * @class Mediator */ on: function( name, callback, context ) { var me = this, set; if ( !callback ) { return this; } set = this._events || (this._events = []); eachEvent( name, callback, function( name, callback ) { var handler = { e: name }; handler.cb = callback; handler.ctx = context; handler.ctx2 = context || me; handler.id = set.length; set.push( handler ); }); return this; }, /** * 绑定事件,且当handler执行完后,自动解除绑定。 * @method once * @grammar once( name, callback[, context] ) => self * @param {String} name 事件名 * @param {Function} callback 事件处理器 * @param {Object} [context] 事件处理器的上下文。 * @return {self} 返回自身,方便链式 * @chainable */ once: function( name, callback, context ) { var me = this; if ( !callback ) { return me; } eachEvent( name, callback, function( name, callback ) { var once = function() { me.off( name, once ); return callback.apply( context || me, arguments ); }; once._cb = callback; me.on( name, once, context ); }); return me; }, /** * 解除事件绑定 * @method off * @grammar off( [name[, callback[, context] ] ] ) => self * @param {String} [name] 事件名 * @param {Function} [callback] 事件处理器 * @param {Object} [context] 事件处理器的上下文。 * @return {self} 返回自身,方便链式 * @chainable */ off: function( name, cb, ctx ) { var events = this._events; if ( !events ) { return this; } if ( !name && !cb && !ctx ) { this._events = []; return this; } eachEvent( name, cb, function( name, cb ) { $.each( findHandlers( events, name, cb, ctx ), function() { delete events[ this.id ]; }); }); return this; }, /** * 触发事件 * @method trigger * @grammar trigger( name[, args...] ) => self * @param {String} type 事件名 * @param {*} [...] 任意参数 * @return {Boolean} 如果handler中return false了,则返回false, 否则返回true */ trigger: function( type ) { var args, events, allEvents; if ( !this._events || !type ) { return this; } args = slice.call( arguments, 1 ); events = findHandlers( this._events, type ); allEvents = findHandlers( this._events, 'all' ); return triggerHanders( events, args ) && triggerHanders( allEvents, arguments ); } }; /** * 中介者,它本身是个单例,但可以通过[installTo](#WebUploader:Mediator:installTo)方法,使任何对象具备事件行为。 * 主要目的是负责模块与模块之间的合作,降低耦合度。 * * @class Mediator */ return $.extend({ /** * 可以通过这个接口,使任何对象具备事件功能。 * @method installTo * @param {Object} obj 需要具备事件行为的对象。 * @return {Object} 返回obj. */ installTo: function( obj ) { return $.extend( obj, protos ); } }, protos ); }); /** * @fileOverview Uploader上传类 */ define('uploader',[ 'base', 'mediator' ], function( Base, Mediator ) { var $ = Base.$; /** * 上传入口类。 * @class Uploader * @constructor * @grammar new Uploader( opts ) => Uploader * @example * var uploader = WebUploader.Uploader({ * swf: 'path_of_swf/Uploader.swf', * * // 开起分片上传。 * chunked: true * }); */ function Uploader( opts ) { this.options = $.extend( true, {}, Uploader.options, opts ); this._init( this.options ); } // default Options // widgets中有相应扩展 Uploader.options = {}; Mediator.installTo( Uploader.prototype ); // 批量添加纯命令式方法。 $.each({ upload: 'start-upload', stop: 'stop-upload', getFile: 'get-file', getFiles: 'get-files', addFile: 'add-file', addFiles: 'add-file', sort: 'sort-files', removeFile: 'remove-file', cancelFile: 'cancel-file', skipFile: 'skip-file', retry: 'retry', isInProgress: 'is-in-progress', makeThumb: 'make-thumb', md5File: 'md5-file', getDimension: 'get-dimension', addButton: 'add-btn', predictRuntimeType: 'predict-runtime-type', refresh: 'refresh', disable: 'disable', enable: 'enable', reset: 'reset' }, function( fn, command ) { Uploader.prototype[ fn ] = function() { return this.request( command, arguments ); }; }); $.extend( Uploader.prototype, { state: 'pending', _init: function( opts ) { var me = this; me.request( 'init', opts, function() { me.state = 'ready'; me.trigger('ready'); }); }, /** * 获取或者设置Uploader配置项。 * @method option * @grammar option( key ) => * * @grammar option( key, val ) => self * @example * * // 初始状态图片上传前不会压缩 * var uploader = new WebUploader.Uploader({ * compress: null; * }); * * // 修改后图片上传前,尝试将图片压缩到1600 * 1600 * uploader.option( 'compress', { * width: 1600, * height: 1600 * }); */ option: function( key, val ) { var opts = this.options; // setter if ( arguments.length > 1 ) { if ( $.isPlainObject( val ) && $.isPlainObject( opts[ key ] ) ) { $.extend( opts[ key ], val ); } else { opts[ key ] = val; } } else { // getter return key ? opts[ key ] : opts; } }, /** * 获取文件统计信息。返回一个包含一下信息的对象。 * * `successNum` 上传成功的文件数 * * `progressNum` 上传中的文件数 * * `cancelNum` 被删除的文件数 * * `invalidNum` 无效的文件数 * * `uploadFailNum` 上传失败的文件数 * * `queueNum` 还在队列中的文件数 * * `interruptNum` 被暂停的文件数 * @method getStats * @grammar getStats() => Object */ getStats: function() { // return this._mgr.getStats.apply( this._mgr, arguments ); var stats = this.request('get-stats'); return stats ? { successNum: stats.numOfSuccess, progressNum: stats.numOfProgress, // who care? // queueFailNum: 0, cancelNum: stats.numOfCancel, invalidNum: stats.numOfInvalid, uploadFailNum: stats.numOfUploadFailed, queueNum: stats.numOfQueue, interruptNum: stats.numofInterrupt } : {}; }, // 需要重写此方法来来支持opts.onEvent和instance.onEvent的处理器 trigger: function( type/*, args...*/ ) { var args = [].slice.call( arguments, 1 ), opts = this.options, name = 'on' + type.substring( 0, 1 ).toUpperCase() + type.substring( 1 ); if ( // 调用通过on方法注册的handler. Mediator.trigger.apply( this, arguments ) === false || // 调用opts.onEvent $.isFunction( opts[ name ] ) && opts[ name ].apply( this, args ) === false || // 调用this.onEvent $.isFunction( this[ name ] ) && this[ name ].apply( this, args ) === false || // 广播所有uploader的事件。 Mediator.trigger.apply( Mediator, [ this, type ].concat( args ) ) === false ) { return false; } return true; }, /** * 销毁 webuploader 实例 * @method destroy * @grammar destroy() => undefined */ destroy: function() { this.request( 'destroy', arguments ); this.off(); }, // widgets/widget.js将补充此方法的详细文档。 request: Base.noop }); /** * 创建Uploader实例,等同于new Uploader( opts ); * @method create * @class Base * @static * @grammar Base.create( opts ) => Uploader */ Base.create = Uploader.create = function( opts ) { return new Uploader( opts ); }; // 暴露Uploader,可以通过它来扩展业务逻辑。 Base.Uploader = Uploader; return Uploader; }); /** * @fileOverview Runtime管理器,负责Runtime的选择, 连接 */ define('runtime/runtime',[ 'base', 'mediator' ], function( Base, Mediator ) { var $ = Base.$, factories = {}, // 获取对象的第一个key getFirstKey = function( obj ) { for ( var key in obj ) { if ( obj.hasOwnProperty( key ) ) { return key; } } return null; }; // 接口类。 function Runtime( options ) { this.options = $.extend({ container: document.body }, options ); this.uid = Base.guid('rt_'); } $.extend( Runtime.prototype, { getContainer: function() { var opts = this.options, parent, container; if ( this._container ) { return this._container; } parent = $( opts.container || document.body ); container = $( document.createElement('div') ); container.attr( 'id', 'rt_' + this.uid ); container.css({ position: 'absolute', top: '0px', left: '0px', width: '1px', height: '1px', overflow: 'hidden' }); parent.append( container ); parent.addClass('webuploader-container'); this._container = container; this._parent = parent; return container; }, init: Base.noop, exec: Base.noop, destroy: function() { this._container && this._container.remove(); this._parent && this._parent.removeClass('webuploader-container'); this.off(); } }); Runtime.orders = 'html5,flash'; /** * 添加Runtime实现。 * @param {String} type 类型 * @param {Runtime} factory 具体Runtime实现。 */ Runtime.addRuntime = function( type, factory ) { factories[ type ] = factory; }; Runtime.hasRuntime = function( type ) { return !!(type ? factories[ type ] : getFirstKey( factories )); }; Runtime.create = function( opts, orders ) { var type, runtime; orders = orders || Runtime.orders; $.each( orders.split( /\s*,\s*/g ), function() { if ( factories[ this ] ) { type = this; return false; } }); type = type || getFirstKey( factories ); if ( !type ) { throw new Error('Runtime Error'); } runtime = new factories[ type ]( opts ); return runtime; }; Mediator.installTo( Runtime.prototype ); return Runtime; }); /** * @fileOverview Runtime管理器,负责Runtime的选择, 连接 */ define('runtime/client',[ 'base', 'mediator', 'runtime/runtime' ], function( Base, Mediator, Runtime ) { var cache; cache = (function() { var obj = {}; return { add: function( runtime ) { obj[ runtime.uid ] = runtime; }, get: function( ruid, standalone ) { var i; if ( ruid ) { return obj[ ruid ]; } for ( i in obj ) { // 有些类型不能重用,比如filepicker. if ( standalone && obj[ i ].__standalone ) { continue; } return obj[ i ]; } return null; }, remove: function( runtime ) { delete obj[ runtime.uid ]; } }; })(); function RuntimeClient( component, standalone ) { var deferred = Base.Deferred(), runtime; this.uid = Base.guid('client_'); // 允许runtime没有初始化之前,注册一些方法在初始化后执行。 this.runtimeReady = function( cb ) { return deferred.done( cb ); }; this.connectRuntime = function( opts, cb ) { // already connected. if ( runtime ) { throw new Error('already connected!'); } deferred.done( cb ); if ( typeof opts === 'string' && cache.get( opts ) ) { runtime = cache.get( opts ); } // 像filePicker只能独立存在,不能公用。 runtime = runtime || cache.get( null, standalone ); // 需要创建 if ( !runtime ) { runtime = Runtime.create( opts, opts.runtimeOrder ); runtime.__promise = deferred.promise(); runtime.once( 'ready', deferred.resolve ); runtime.init(); cache.add( runtime ); runtime.__client = 1; } else { // 来自cache Base.$.extend( runtime.options, opts ); runtime.__promise.then( deferred.resolve ); runtime.__client++; } standalone && (runtime.__standalone = standalone); return runtime; }; this.getRuntime = function() { return runtime; }; this.disconnectRuntime = function() { if ( !runtime ) { return; } runtime.__client--; if ( runtime.__client <= 0 ) { cache.remove( runtime ); delete runtime.__promise; runtime.destroy(); } runtime = null; }; this.exec = function() { if ( !runtime ) { return; } var args = Base.slice( arguments ); component && args.unshift( component ); return runtime.exec.apply( this, args ); }; this.getRuid = function() { return runtime && runtime.uid; }; this.destroy = (function( destroy ) { return function() { destroy && destroy.apply( this, arguments ); this.trigger('destroy'); this.off(); this.exec('destroy'); this.disconnectRuntime(); }; })( this.destroy ); } Mediator.installTo( RuntimeClient.prototype ); return RuntimeClient; }); /** * @fileOverview Blob */ define('lib/blob',[ 'base', 'runtime/client' ], function( Base, RuntimeClient ) { function Blob( ruid, source ) { var me = this; me.source = source; me.ruid = ruid; this.size = source.size || 0; // 如果没有指定 mimetype, 但是知道文件后缀。 if ( !source.type && this.ext && ~'jpg,jpeg,png,gif,bmp'.indexOf( this.ext ) ) { this.type = 'image/' + (this.ext === 'jpg' ? 'jpeg' : this.ext); } else { this.type = source.type || 'application/octet-stream'; } RuntimeClient.call( me, 'Blob' ); this.uid = source.uid || this.uid; if ( ruid ) { me.connectRuntime( ruid ); } } Base.inherits( RuntimeClient, { constructor: Blob, slice: function( start, end ) { return this.exec( 'slice', start, end ); }, getSource: function() { return this.source; } }); return Blob; }); /** * 为了统一化Flash的File和HTML5的File而存在。 * 以至于要调用Flash里面的File,也可以像调用HTML5版本的File一下。 * @fileOverview File */ define('lib/file',[ 'base', 'lib/blob' ], function( Base, Blob ) { var uid = 1, rExt = /\.([^.]+)$/; function File( ruid, file ) { var ext; this.name = file.name || ('untitled' + uid++); ext = rExt.exec( file.name ) ? RegExp.$1.toLowerCase() : ''; // todo 支持其他类型文件的转换。 // 如果有 mimetype, 但是文件名里面没有找出后缀规律 if ( !ext && file.type ) { ext = /\/(jpg|jpeg|png|gif|bmp)$/i.exec( file.type ) ? RegExp.$1.toLowerCase() : ''; this.name += '.' + ext; } this.ext = ext; this.lastModifiedDate = file.lastModifiedDate || (new Date()).toLocaleString(); Blob.apply( this, arguments ); } return Base.inherits( Blob, File ); }); /** * @fileOverview 错误信息 */ define('lib/filepicker',[ 'base', 'runtime/client', 'lib/file' ], function( Base, RuntimeClent, File ) { var $ = Base.$; function FilePicker( opts ) { opts = this.options = $.extend({}, FilePicker.options, opts ); opts.container = $( opts.id ); if ( !opts.container.length ) { throw new Error('按钮指定错误'); } opts.innerHTML = opts.innerHTML || opts.label || opts.container.html() || ''; opts.button = $( opts.button || document.createElement('div') ); opts.button.html( opts.innerHTML ); opts.container.html( opts.button ); RuntimeClent.call( this, 'FilePicker', true ); } FilePicker.options = { button: null, container: null, label: null, innerHTML: null, multiple: true, accept: null, name: 'file' }; Base.inherits( RuntimeClent, { constructor: FilePicker, init: function() { var me = this, opts = me.options, button = opts.button; button.addClass('webuploader-pick'); me.on( 'all', function( type ) { var files; switch ( type ) { case 'mouseenter': button.addClass('webuploader-pick-hover'); break; case 'mouseleave': button.removeClass('webuploader-pick-hover'); break; case 'change': files = me.exec('getFiles'); me.trigger( 'select', $.map( files, function( file ) { file = new File( me.getRuid(), file ); // 记录来源。 file._refer = opts.container; return file; }), opts.container ); break; } }); me.connectRuntime( opts, function() { me.refresh(); me.exec( 'init', opts ); me.trigger('ready'); }); this._resizeHandler = Base.bindFn( this.refresh, this ); $( window ).on( 'resize', this._resizeHandler ); }, refresh: function() { var shimContainer = this.getRuntime().getContainer(), button = this.options.button, width = button.outerWidth ? button.outerWidth() : button.width(), height = button.outerHeight ? button.outerHeight() : button.height(), pos = button.offset(); width && height && shimContainer.css({ bottom: 'auto', right: 'auto', width: width + 'px', height: height + 'px' }).offset( pos ); }, enable: function() { var btn = this.options.button; btn.removeClass('webuploader-pick-disable'); this.refresh(); }, disable: function() { var btn = this.options.button; this.getRuntime().getContainer().css({ top: '-99999px' }); btn.addClass('webuploader-pick-disable'); }, destroy: function() { var btn = this.options.button; $( window ).off( 'resize', this._resizeHandler ); btn.removeClass('webuploader-pick-disable webuploader-pick-hover ' + 'webuploader-pick'); } }); return FilePicker; }); /** * @fileOverview 组件基类。 */ define('widgets/widget',[ 'base', 'uploader' ], function( Base, Uploader ) { var $ = Base.$, _init = Uploader.prototype._init, _destroy = Uploader.prototype.destroy, IGNORE = {}, widgetClass = []; function isArrayLike( obj ) { if ( !obj ) { return false; } var length = obj.length, type = $.type( obj ); if ( obj.nodeType === 1 && length ) { return true; } return type === 'array' || type !== 'function' && type !== 'string' && (length === 0 || typeof length === 'number' && length > 0 && (length - 1) in obj); } function Widget( uploader ) { this.owner = uploader; this.options = uploader.options; } $.extend( Widget.prototype, { init: Base.noop, // 类Backbone的事件监听声明,监听uploader实例上的事件 // widget直接无法监听事件,事件只能通过uploader来传递 invoke: function( apiName, args ) { /* { 'make-thumb': 'makeThumb' } */ var map = this.responseMap; // 如果无API响应声明则忽略 if ( !map || !(apiName in map) || !(map[ apiName ] in this) || !$.isFunction( this[ map[ apiName ] ] ) ) { return IGNORE; } return this[ map[ apiName ] ].apply( this, args ); }, /** * 发送命令。当传入`callback`或者`handler`中返回`promise`时。返回一个当所有`handler`中的promise都完成后完成的新`promise`。 * @method request * @grammar request( command, args ) => * | Promise * @grammar request( command, args, callback ) => Promise * @for Uploader */ request: function() { return this.owner.request.apply( this.owner, arguments ); } }); // 扩展Uploader. $.extend( Uploader.prototype, { /** * @property {String | Array} [disableWidgets=undefined] * @namespace options * @for Uploader * @description 默认所有 Uploader.register 了的 widget 都会被加载,如果禁用某一部分,请通过此 option 指定黑名单。 */ // 覆写_init用来初始化widgets _init: function() { var me = this, widgets = me._widgets = [], deactives = me.options.disableWidgets || ''; $.each( widgetClass, function( _, klass ) { (!deactives || !~deactives.indexOf( klass._name )) && widgets.push( new klass( me ) ); }); return _init.apply( me, arguments ); }, request: function( apiName, args, callback ) { var i = 0, widgets = this._widgets, len = widgets && widgets.length, rlts = [], dfds = [], widget, rlt, promise, key; args = isArrayLike( args ) ? args : [ args ]; for ( ; i < len; i++ ) { widget = widgets[ i ]; rlt = widget.invoke( apiName, args ); if ( rlt !== IGNORE ) { // Deferred对象 if ( Base.isPromise( rlt ) ) { dfds.push( rlt ); } else { rlts.push( rlt ); } } } // 如果有callback,则用异步方式。 if ( callback || dfds.length ) { promise = Base.when.apply( Base, dfds ); key = promise.pipe ? 'pipe' : 'then'; // 很重要不能删除。删除了会死循环。 // 保证执行顺序。让callback总是在下一个 tick 中执行。 return promise[ key ](function() { var deferred = Base.Deferred(), args = arguments; if ( args.length === 1 ) { args = args[ 0 ]; } setTimeout(function() { deferred.resolve( args ); }, 1 ); return deferred.promise(); })[ callback ? key : 'done' ]( callback || Base.noop ); } else { return rlts[ 0 ]; } }, destroy: function() { _destroy.apply( this, arguments ); this._widgets = null; } }); /** * 添加组件 * @grammar Uploader.register(proto); * @grammar Uploader.register(map, proto); * @param {object} responseMap API 名称与函数实现的映射 * @param {object} proto 组件原型,构造函数通过 constructor 属性定义 * @method Uploader.register * @for Uploader * @example * Uploader.register({ * 'make-thumb': 'makeThumb' * }, { * init: function( options ) {}, * makeThumb: function() {} * }); * * Uploader.register({ * 'make-thumb': function() { * * } * }); */ Uploader.register = Widget.register = function( responseMap, widgetProto ) { var map = { init: 'init', destroy: 'destroy', name: 'anonymous' }, klass; if ( arguments.length === 1 ) { widgetProto = responseMap; // 自动生成 map 表。 $.each(widgetProto, function(key) { if ( key[0] === '_' || key === 'name' ) { key === 'name' && (map.name = widgetProto.name); return; } map[key.replace(/[A-Z]/g, '-$&').toLowerCase()] = key; }); } else { map = $.extend( map, responseMap ); } widgetProto.responseMap = map; klass = Base.inherits( Widget, widgetProto ); klass._name = map.name; widgetClass.push( klass ); return klass; }; /** * 删除插件,只有在注册时指定了名字的才能被删除。 * @grammar Uploader.unRegister(name); * @param {string} name 组件名字 * @method Uploader.unRegister * @for Uploader * @example * * Uploader.register({ * name: 'custom', * * 'make-thumb': function() { * * } * }); * * Uploader.unRegister('custom'); */ Uploader.unRegister = Widget.unRegister = function( name ) { if ( !name || name === 'anonymous' ) { return; } // 删除指定的插件。 for ( var i = widgetClass.length; i--; ) { if ( widgetClass[i]._name === name ) { widgetClass.splice(i, 1) } } }; return Widget; }); /** * @fileOverview 文件选择相关 */ define('widgets/filepicker',[ 'base', 'uploader', 'lib/filepicker', 'widgets/widget' ], function( Base, Uploader, FilePicker ) { var $ = Base.$; $.extend( Uploader.options, { /** * @property {Selector | Object} [pick=undefined] * @namespace options * @for Uploader * @description 指定选择文件的按钮容器,不指定则不创建按钮。 * * * `id` {Seletor|dom} 指定选择文件的按钮容器,不指定则不创建按钮。**注意** 这里虽然写的是 id, 但是不是只支持 id, 还支持 class, 或者 dom 节点。 * * `label` {String} 请采用 `innerHTML` 代替 * * `innerHTML` {String} 指定按钮文字。不指定时优先从指定的容器中看是否自带文字。 * * `multiple` {Boolean} 是否开起同时选择多个文件能力。 */ pick: null, /** * @property {Arroy} [accept=null] * @namespace options * @for Uploader * @description 指定接受哪些类型的文件。 由于目前还有ext转mimeType表,所以这里需要分开指定。 * * * `title` {String} 文字描述 * * `extensions` {String} 允许的文件后缀,不带点,多个用逗号分割。 * * `mimeTypes` {String} 多个用逗号分割。 * * 如: * * ``` * { * title: 'Images', * extensions: 'gif,jpg,jpeg,bmp,png', * mimeTypes: 'image/*' * } * ``` */ accept: null/*{ title: 'Images', extensions: 'gif,jpg,jpeg,bmp,png', mimeTypes: 'image/*' }*/ }); return Uploader.register({ name: 'picker', init: function( opts ) { this.pickers = []; return opts.pick && this.addBtn( opts.pick ); }, refresh: function() { $.each( this.pickers, function() { this.refresh(); }); }, /** * @method addButton * @for Uploader * @grammar addButton( pick ) => Promise * @description * 添加文件选择按钮,如果一个按钮不够,需要调用此方法来添加。参数跟[options.pick](#WebUploader:Uploader:options)一致。 * @example * uploader.addButton({ * id: '#btnContainer', * innerHTML: '选择文件' * }); */ addBtn: function( pick ) { var me = this, opts = me.options, accept = opts.accept, promises = []; if ( !pick ) { return; } $.isPlainObject( pick ) || (pick = { id: pick }); $( pick.id ).each(function() { var options, picker, deferred; deferred = Base.Deferred(); options = $.extend({}, pick, { accept: $.isPlainObject( accept ) ? [ accept ] : accept, swf: opts.swf, runtimeOrder: opts.runtimeOrder, id: this }); picker = new FilePicker( options ); picker.once( 'ready', deferred.resolve ); picker.on( 'select', function( files ) { me.owner.request( 'add-file', [ files ]); }); picker.init(); me.pickers.push( picker ); promises.push( deferred.promise() ); }); return Base.when.apply( Base, promises ); }, disable: function() { $.each( this.pickers, function() { this.disable(); }); }, enable: function() { $.each( this.pickers, function() { this.enable(); }); }, destroy: function() { $.each( this.pickers, function() { this.destroy(); }); this.pickers = null; } }); }); /** * @fileOverview Image */ define('lib/image',[ 'base', 'runtime/client', 'lib/blob' ], function( Base, RuntimeClient, Blob ) { var $ = Base.$; // 构造器。 function Image( opts ) { this.options = $.extend({}, Image.options, opts ); RuntimeClient.call( this, 'Image' ); this.on( 'load', function() { this._info = this.exec('info'); this._meta = this.exec('meta'); }); } // 默认选项。 Image.options = { // 默认的图片处理质量 quality: 90, // 是否裁剪 crop: false, // 是否保留头部信息 preserveHeaders: false, // 是否允许放大。 allowMagnify: false }; // 继承RuntimeClient. Base.inherits( RuntimeClient, { constructor: Image, info: function( val ) { // setter if ( val ) { this._info = val; return this; } // getter return this._info; }, meta: function( val ) { // setter if ( val ) { this._meta = val; return this; } // getter return this._meta; }, loadFromBlob: function( blob ) { var me = this, ruid = blob.getRuid(); this.connectRuntime( ruid, function() { me.exec( 'init', me.options ); me.exec( 'loadFromBlob', blob ); }); }, resize: function() { var args = Base.slice( arguments ); return this.exec.apply( this, [ 'resize' ].concat( args ) ); }, crop: function() { var args = Base.slice( arguments ); return this.exec.apply( this, [ 'crop' ].concat( args ) ); }, getAsDataUrl: function( type ) { return this.exec( 'getAsDataUrl', type ); }, getAsBlob: function( type ) { var blob = this.exec( 'getAsBlob', type ); return new Blob( this.getRuid(), blob ); } }); return Image; }); /** * @fileOverview 图片操作, 负责预览图片和上传前压缩图片 */ define('widgets/image',[ 'base', 'uploader', 'lib/image', 'widgets/widget' ], function( Base, Uploader, Image ) { var $ = Base.$, throttle; // 根据要处理的文件大小来节流,一次不能处理太多,会卡。 throttle = (function( max ) { var occupied = 0, waiting = [], tick = function() { var item; while ( waiting.length && occupied < max ) { item = waiting.shift(); occupied += item[ 0 ]; item[ 1 ](); } }; return function( emiter, size, cb ) { waiting.push([ size, cb ]); emiter.once( 'destroy', function() { occupied -= size; setTimeout( tick, 1 ); }); setTimeout( tick, 1 ); }; })( 5 * 1024 * 1024 ); $.extend( Uploader.options, { /** * @property {Object} [thumb] * @namespace options * @for Uploader * @description 配置生成缩略图的选项。 * * 默认为: * * ```javascript * { * width: 110, * height: 110, * * // 图片质量,只有type为`image/jpeg`的时候才有效。 * quality: 70, * * // 是否允许放大,如果想要生成小图的时候不失真,此选项应该设置为false. * allowMagnify: true, * * // 是否允许裁剪。 * crop: true, * * // 为空的话则保留原有图片格式。 * // 否则强制转换成指定的类型。 * type: 'image/jpeg' * } * ``` */ thumb: { width: 110, height: 110, quality: 70, allowMagnify: true, crop: true, preserveHeaders: false, // 为空的话则保留原有图片格式。 // 否则强制转换成指定的类型。 // IE 8下面 base64 大小不能超过 32K 否则预览失败,而非 jpeg 编码的图片很可 // 能会超过 32k, 所以这里设置成预览的时候都是 image/jpeg type: 'image/jpeg' }, /** * @property {Object} [compress] * @namespace options * @for Uploader * @description 配置压缩的图片的选项。如果此选项为`false`, 则图片在上传前不进行压缩。 * * 默认为: * * ```javascript * { * width: 1600, * height: 1600, * * // 图片质量,只有type为`image/jpeg`的时候才有效。 * quality: 90, * * // 是否允许放大,如果想要生成小图的时候不失真,此选项应该设置为false. * allowMagnify: false, * * // 是否允许裁剪。 * crop: false, * * // 是否保留头部meta信息。 * preserveHeaders: true, * * // 如果发现压缩后文件大小比原来还大,则使用原来图片 * // 此属性可能会影响图片自动纠正功能 * noCompressIfLarger: false, * * // 单位字节,如果图片大小小于此值,不会采用压缩。 * compressSize: 0 * } * ``` */ compress: { width: 1600, height: 1600, quality: 90, allowMagnify: false, crop: false, preserveHeaders: true } }); return Uploader.register({ name: 'image', /** * 生成缩略图,此过程为异步,所以需要传入`callback`。 * 通常情况在图片加入队里后调用此方法来生成预览图以增强交互效果。 * * 当 width 或者 height 的值介于 0 - 1 时,被当成百分比使用。 * * `callback`中可以接收到两个参数。 * * 第一个为error,如果生成缩略图有错误,此error将为真。 * * 第二个为ret, 缩略图的Data URL值。 * * **注意** * Date URL在IE6/7中不支持,所以不用调用此方法了,直接显示一张暂不支持预览图片好了。 * 也可以借助服务端,将 base64 数据传给服务端,生成一个临时文件供预览。 * * @method makeThumb * @grammar makeThumb( file, callback ) => undefined * @grammar makeThumb( file, callback, width, height ) => undefined * @for Uploader * @example * * uploader.on( 'fileQueued', function( file ) { * var $li = ...; * * uploader.makeThumb( file, function( error, ret ) { * if ( error ) { * $li.text('预览错误'); * } else { * $li.append('<img alt="" src="' + ret + '" />'); * } * }); * * }); */ makeThumb: function( file, cb, width, height ) { var opts, image; file = this.request( 'get-file', file ); // 只预览图片格式。 if ( !file.type.match( /^image/ ) ) { cb( true ); return; } opts = $.extend({}, this.options.thumb ); // 如果传入的是object. if ( $.isPlainObject( width ) ) { opts = $.extend( opts, width ); width = null; } width = width || opts.width; height = height || opts.height; image = new Image( opts ); image.once( 'load', function() { file._info = file._info || image.info(); file._meta = file._meta || image.meta(); // 如果 width 的值介于 0 - 1 // 说明设置的是百分比。 if ( width <= 1 && width > 0 ) { width = file._info.width * width; } // 同样的规则应用于 height if ( height <= 1 && height > 0 ) { height = file._info.height * height; } image.resize( width, height ); }); // 当 resize 完后 image.once( 'complete', function() { cb( false, image.getAsDataUrl( opts.type ) ); image.destroy(); }); image.once( 'error', function( reason ) { cb( reason || true ); image.destroy(); }); throttle( image, file.source.size, function() { file._info && image.info( file._info ); file._meta && image.meta( file._meta ); image.loadFromBlob( file.source ); }); }, beforeSendFile: function( file ) { var opts = this.options.compress || this.options.resize, compressSize = opts && opts.compressSize || 0, noCompressIfLarger = opts && opts.noCompressIfLarger || false, image, deferred; file = this.request( 'get-file', file ); // 只压缩 jpeg 图片格式。 // gif 可能会丢失针 // bmp png 基本上尺寸都不大,且压缩比比较小。 if ( !opts || !~'image/jpeg,image/jpg'.indexOf( file.type ) || file.size < compressSize || file._compressed ) { return; } opts = $.extend({}, opts ); deferred = Base.Deferred(); image = new Image( opts ); deferred.always(function() { image.destroy(); image = null; }); image.once( 'error', deferred.reject ); image.once( 'load', function() { var width = opts.width, height = opts.height; file._info = file._info || image.info(); file._meta = file._meta || image.meta(); // 如果 width 的值介于 0 - 1 // 说明设置的是百分比。 if ( width <= 1 && width > 0 ) { width = file._info.width * width; } // 同样的规则应用于 height if ( height <= 1 && height > 0 ) { height = file._info.height * height; } image.resize( width, height ); }); image.once( 'complete', function() { var blob, size; // 移动端 UC / qq 浏览器的无图模式下 // ctx.getImageData 处理大图的时候会报 Exception // INDEX_SIZE_ERR: DOM Exception 1 try { blob = image.getAsBlob( opts.type ); size = file.size; // 如果压缩后,比原来还大则不用压缩后的。 if ( !noCompressIfLarger || blob.size < size ) { // file.source.destroy && file.source.destroy(); file.source = blob; file.size = blob.size; file.trigger( 'resize', blob.size, size ); } // 标记,避免重复压缩。 file._compressed = true; deferred.resolve(); } catch ( e ) { // 出错了直接继续,让其上传原始图片 deferred.resolve(); } }); file._info && image.info( file._info ); file._meta && image.meta( file._meta ); image.loadFromBlob( file.source ); return deferred.promise(); } }); }); /** * @fileOverview 文件属性封装 */ define('file',[ 'base', 'mediator' ], function( Base, Mediator ) { var $ = Base.$, idPrefix = 'WU_FILE_', idSuffix = 0, rExt = /\.([^.]+)$/, statusMap = {}; function gid() { return idPrefix + idSuffix++; } /** * 文件类 * @class File * @constructor 构造函数 * @grammar new File( source ) => File * @param {Lib.File} source [lib.File](#Lib.File)实例, 此source对象是带有Runtime信息的。 */ function WUFile( source ) { /** * 文件名,包括扩展名(后缀) * @property name * @type {string} */ this.name = source.name || 'Untitled'; /** * 文件体积(字节) * @property size * @type {uint} * @default 0 */ this.size = source.size || 0; /** * 文件MIMETYPE类型,与文件类型的对应关系请参考[http://t.cn/z8ZnFny](http://t.cn/z8ZnFny) * @property type * @type {string} * @default 'application/octet-stream' */ this.type = source.type || 'application/octet-stream'; /** * 文件最后修改日期 * @property lastModifiedDate * @type {int} * @default 当前时间戳 */ this.lastModifiedDate = source.lastModifiedDate || (new Date() * 1); /** * 文件ID,每个对象具有唯一ID,与文件名无关 * @property id * @type {string} */ this.id = gid(); /** * 文件扩展名,通过文件名获取,例如test.png的扩展名为png * @property ext * @type {string} */ this.ext = rExt.exec( this.name ) ? RegExp.$1 : ''; /** * 状态文字说明。在不同的status语境下有不同的用途。 * @property statusText * @type {string} */ this.statusText = ''; // 存储文件状态,防止通过属性直接修改 statusMap[ this.id ] = WUFile.Status.INITED; this.source = source; this.loaded = 0; this.on( 'error', function( msg ) { this.setStatus( WUFile.Status.ERROR, msg ); }); } $.extend( WUFile.prototype, { /** * 设置状态,状态变化时会触发`change`事件。 * @method setStatus * @grammar setStatus( status[, statusText] ); * @param {File.Status|String} status [文件状态值](#WebUploader:File:File.Status) * @param {String} [statusText=''] 状态说明,常在error时使用,用http, abort,server等来标记是由于什么原因导致文件错误。 */ setStatus: function( status, text ) { var prevStatus = statusMap[ this.id ]; typeof text !== 'undefined' && (this.statusText = text); if ( status !== prevStatus ) { statusMap[ this.id ] = status; /** * 文件状态变化 * @event statuschange */ this.trigger( 'statuschange', status, prevStatus ); } }, /** * 获取文件状态 * @return {File.Status} * @example 文件状态具体包括以下几种类型: { // 初始化 INITED: 0, // 已入队列 QUEUED: 1, // 正在上传 PROGRESS: 2, // 上传出错 ERROR: 3, // 上传成功 COMPLETE: 4, // 上传取消 CANCELLED: 5 } */ getStatus: function() { return statusMap[ this.id ]; }, /** * 获取文件原始信息。 * @return {*} */ getSource: function() { return this.source; }, destroy: function() { this.off(); delete statusMap[ this.id ]; } }); Mediator.installTo( WUFile.prototype ); /** * 文件状态值,具体包括以下几种类型: * * `inited` 初始状态 * * `queued` 已经进入队列, 等待上传 * * `progress` 上传中 * * `complete` 上传完成。 * * `error` 上传出错,可重试 * * `interrupt` 上传中断,可续传。 * * `invalid` 文件不合格,不能重试上传。会自动从队列中移除。 * * `cancelled` 文件被移除。 * @property {Object} Status * @namespace File * @class File * @static */ WUFile.Status = { INITED: 'inited', // 初始状态 QUEUED: 'queued', // 已经进入队列, 等待上传 PROGRESS: 'progress', // 上传中 ERROR: 'error', // 上传出错,可重试 COMPLETE: 'complete', // 上传完成。 CANCELLED: 'cancelled', // 上传取消。 INTERRUPT: 'interrupt', // 上传中断,可续传。 INVALID: 'invalid' // 文件不合格,不能重试上传。 }; return WUFile; }); /** * @fileOverview 文件队列 */ define('queue',[ 'base', 'mediator', 'file' ], function( Base, Mediator, WUFile ) { var $ = Base.$, STATUS = WUFile.Status; /** * 文件队列, 用来存储各个状态中的文件。 * @class Queue * @extends Mediator */ function Queue() { /** * 统计文件数。 * * `numOfQueue` 队列中的文件数。 * * `numOfSuccess` 上传成功的文件数 * * `numOfCancel` 被取消的文件数 * * `numOfProgress` 正在上传中的文件数 * * `numOfUploadFailed` 上传错误的文件数。 * * `numOfInvalid` 无效的文件数。 * * `numofDeleted` 被移除的文件数。 * @property {Object} stats */ this.stats = { numOfQueue: 0, numOfSuccess: 0, numOfCancel: 0, numOfProgress: 0, numOfUploadFailed: 0, numOfInvalid: 0, numofDeleted: 0, numofInterrupt: 0 }; // 上传队列,仅包括等待上传的文件 this._queue = []; // 存储所有文件 this._map = {}; } $.extend( Queue.prototype, { /** * 将新文件加入对队列尾部 * * @method append * @param {File} file 文件对象 */ append: function( file ) { this._queue.push( file ); this._fileAdded( file ); return this; }, /** * 将新文件加入对队列头部 * * @method prepend * @param {File} file 文件对象 */ prepend: function( file ) { this._queue.unshift( file ); this._fileAdded( file ); return this; }, /** * 获取文件对象 * * @method getFile * @param {String} fileId 文件ID * @return {File} */ getFile: function( fileId ) { if ( typeof fileId !== 'string' ) { return fileId; } return this._map[ fileId ]; }, /** * 从队列中取出一个指定状态的文件。 * @grammar fetch( status ) => File * @method fetch * @param {String} status [文件状态值](#WebUploader:File:File.Status) * @return {File} [File](#WebUploader:File) */ fetch: function( status ) { var len = this._queue.length, i, file; status = status || STATUS.QUEUED; for ( i = 0; i < len; i++ ) { file = this._queue[ i ]; if ( status === file.getStatus() ) { return file; } } return null; }, /** * 对队列进行排序,能够控制文件上传顺序。 * @grammar sort( fn ) => undefined * @method sort * @param {Function} fn 排序方法 */ sort: function( fn ) { if ( typeof fn === 'function' ) { this._queue.sort( fn ); } }, /** * 获取指定类型的文件列表, 列表中每一个成员为[File](#WebUploader:File)对象。 * @grammar getFiles( [status1[, status2 ...]] ) => Array * @method getFiles * @param {String} [status] [文件状态值](#WebUploader:File:File.Status) */ getFiles: function() { var sts = [].slice.call( arguments, 0 ), ret = [], i = 0, len = this._queue.length, file; for ( ; i < len; i++ ) { file = this._queue[ i ]; if ( sts.length && !~$.inArray( file.getStatus(), sts ) ) { continue; } ret.push( file ); } return ret; }, /** * 在队列中删除文件。 * @grammar removeFile( file ) => Array * @method removeFile * @param {File} 文件对象。 */ removeFile: function( file ) { var me = this, existing = this._map[ file.id ]; if ( existing ) { delete this._map[ file.id ]; file.destroy(); this.stats.numofDeleted++; } }, _fileAdded: function( file ) { var me = this, existing = this._map[ file.id ]; if ( !existing ) { this._map[ file.id ] = file; file.on( 'statuschange', function( cur, pre ) { me._onFileStatusChange( cur, pre ); }); } }, _onFileStatusChange: function( curStatus, preStatus ) { var stats = this.stats; switch ( preStatus ) { case STATUS.PROGRESS: stats.numOfProgress--; break; case STATUS.QUEUED: stats.numOfQueue --; break; case STATUS.ERROR: stats.numOfUploadFailed--; break; case STATUS.INVALID: stats.numOfInvalid--; break; case STATUS.INTERRUPT: stats.numofInterrupt--; break; } switch ( curStatus ) { case STATUS.QUEUED: stats.numOfQueue++; break; case STATUS.PROGRESS: stats.numOfProgress++; break; case STATUS.ERROR: stats.numOfUploadFailed++; break; case STATUS.COMPLETE: stats.numOfSuccess++; break; case STATUS.CANCELLED: stats.numOfCancel++; break; case STATUS.INVALID: stats.numOfInvalid++; break; case STATUS.INTERRUPT: stats.numofInterrupt++; break; } } }); Mediator.installTo( Queue.prototype ); return Queue; }); /** * @fileOverview 队列 */ define('widgets/queue',[ 'base', 'uploader', 'queue', 'file', 'lib/file', 'runtime/client', 'widgets/widget' ], function( Base, Uploader, Queue, WUFile, File, RuntimeClient ) { var $ = Base.$, rExt = /\.\w+$/, Status = WUFile.Status; return Uploader.register({ name: 'queue', init: function( opts ) { var me = this, deferred, len, i, item, arr, accept, runtime; if ( $.isPlainObject( opts.accept ) ) { opts.accept = [ opts.accept ]; } // accept中的中生成匹配正则。 if ( opts.accept ) { arr = []; for ( i = 0, len = opts.accept.length; i < len; i++ ) { item = opts.accept[ i ].extensions; item && arr.push( item ); } if ( arr.length ) { accept = '\\.' + arr.join(',') .replace( /,/g, '$|\\.' ) .replace( /\*/g, '.*' ) + '$'; } me.accept = new RegExp( accept, 'i' ); } me.queue = new Queue(); me.stats = me.queue.stats; // 如果当前不是html5运行时,那就算了。 // 不执行后续操作 if ( this.request('predict-runtime-type') !== 'html5' ) { return; } // 创建一个 html5 运行时的 placeholder // 以至于外部添加原生 File 对象的时候能正确包裹一下供 webuploader 使用。 deferred = Base.Deferred(); this.placeholder = runtime = new RuntimeClient('Placeholder'); runtime.connectRuntime({ runtimeOrder: 'html5' }, function() { me._ruid = runtime.getRuid(); deferred.resolve(); }); return deferred.promise(); }, // 为了支持外部直接添加一个原生File对象。 _wrapFile: function( file ) { if ( !(file instanceof WUFile) ) { if ( !(file instanceof File) ) { if ( !this._ruid ) { throw new Error('Can\'t add external files.'); } file = new File( this._ruid, file ); } file = new WUFile( file ); } return file; }, // 判断文件是否可以被加入队列 acceptFile: function( file ) { var invalid = !file || !file.size || this.accept && // 如果名字中有后缀,才做后缀白名单处理。 rExt.exec( file.name ) && !this.accept.test( file.name ); return !invalid; }, /** * @event beforeFileQueued * @param {File} file File对象 * @description 当文件被加入队列之前触发,此事件的handler返回值为`false`,则此文件不会被添加进入队列。 * @for Uploader */ /** * @event fileQueued * @param {File} file File对象 * @description 当文件被加入队列以后触发。 * @for Uploader */ _addFile: function( file ) { var me = this; file = me._wrapFile( file ); // 不过类型判断允许不允许,先派送 `beforeFileQueued` if ( !me.owner.trigger( 'beforeFileQueued', file ) ) { return; } // 类型不匹配,则派送错误事件,并返回。 if ( !me.acceptFile( file ) ) { me.owner.trigger( 'error', 'Q_TYPE_DENIED', file ); return; } me.queue.append( file ); me.owner.trigger( 'fileQueued', file ); return file; }, getFile: function( fileId ) { return this.queue.getFile( fileId ); }, /** * @event filesQueued * @param {File} files 数组,内容为原始File(lib/File)对象。 * @description 当一批文件添加进队列以后触发。 * @for Uploader */ /** * @property {Boolean} [auto=false] * @namespace options * @for Uploader * @description 设置为 true 后,不需要手动调用上传,有文件选择即开始上传。 * */ /** * @method addFiles * @grammar addFiles( file ) => undefined * @grammar addFiles( [file1, file2 ...] ) => undefined * @param {Array of File or File} [files] Files 对象 数组 * @description 添加文件到队列 * @for Uploader */ addFile: function( files ) { var me = this; if ( !files.length ) { files = [ files ]; } files = $.map( files, function( file ) { return me._addFile( file ); }); me.owner.trigger( 'filesQueued', files ); if ( me.options.auto ) { setTimeout(function() { me.request('start-upload'); }, 20 ); } }, getStats: function() { return this.stats; }, /** * @event fileDequeued * @param {File} file File对象 * @description 当文件被移除队列后触发。 * @for Uploader */ /** * @method removeFile * @grammar removeFile( file ) => undefined * @grammar removeFile( id ) => undefined * @grammar removeFile( file, true ) => undefined * @grammar removeFile( id, true ) => undefined * @param {File|id} file File对象或这File对象的id * @description 移除某一文件, 默认只会标记文件状态为已取消,如果第二个参数为 `true` 则会从 queue 中移除。 * @for Uploader * @example * * $li.on('click', '.remove-this', function() { * uploader.removeFile( file ); * }) */ removeFile: function( file, remove ) { var me = this; file = file.id ? file : me.queue.getFile( file ); this.request( 'cancel-file', file ); if ( remove ) { this.queue.removeFile( file ); } }, /** * @method getFiles * @grammar getFiles() => Array * @grammar getFiles( status1, status2, status... ) => Array * @description 返回指定状态的文件集合,不传参数将返回所有状态的文件。 * @for Uploader * @example * console.log( uploader.getFiles() ); // => all files * console.log( uploader.getFiles('error') ) // => all error files. */ getFiles: function() { return this.queue.getFiles.apply( this.queue, arguments ); }, fetchFile: function() { return this.queue.fetch.apply( this.queue, arguments ); }, /** * @method retry * @grammar retry() => undefined * @grammar retry( file ) => undefined * @description 重试上传,重试指定文件,或者从出错的文件开始重新上传。 * @for Uploader * @example * function retry() { * uploader.retry(); * } */ retry: function( file, noForceStart ) { var me = this, files, i, len; if ( file ) { file = file.id ? file : me.queue.getFile( file ); file.setStatus( Status.QUEUED ); noForceStart || me.request('start-upload'); return; } files = me.queue.getFiles( Status.ERROR ); i = 0; len = files.length; for ( ; i < len; i++ ) { file = files[ i ]; file.setStatus( Status.QUEUED ); } me.request('start-upload'); }, /** * @method sort * @grammar sort( fn ) => undefined * @description 排序队列中的文件,在上传之前调整可以控制上传顺序。 * @for Uploader */ sortFiles: function() { return this.queue.sort.apply( this.queue, arguments ); }, /** * @event reset * @description 当 uploader 被重置的时候触发。 * @for Uploader */ /** * @method reset * @grammar reset() => undefined * @description 重置uploader。目前只重置了队列。 * @for Uploader * @example * uploader.reset(); */ reset: function() { this.owner.trigger('reset'); this.queue = new Queue(); this.stats = this.queue.stats; }, destroy: function() { this.reset(); this.placeholder && this.placeholder.destroy(); } }); }); /** * @fileOverview 添加获取Runtime相关信息的方法。 */ define('widgets/runtime',[ 'uploader', 'runtime/runtime', 'widgets/widget' ], function( Uploader, Runtime ) { Uploader.support = function() { return Runtime.hasRuntime.apply( Runtime, arguments ); }; /** * @property {Object} [runtimeOrder=html5,flash] * @namespace options * @for Uploader * @description 指定运行时启动顺序。默认会想尝试 html5 是否支持,如果支持则使用 html5, 否则则使用 flash. * * 可以将此值设置成 `flash`,来强制使用 flash 运行时。 */ return Uploader.register({ name: 'runtime', init: function() { if ( !this.predictRuntimeType() ) { throw Error('Runtime Error'); } }, /** * 预测Uploader将采用哪个`Runtime` * @grammar predictRuntimeType() => String * @method predictRuntimeType * @for Uploader */ predictRuntimeType: function() { var orders = this.options.runtimeOrder || Runtime.orders, type = this.type, i, len; if ( !type ) { orders = orders.split( /\s*,\s*/g ); for ( i = 0, len = orders.length; i < len; i++ ) { if ( Runtime.hasRuntime( orders[ i ] ) ) { this.type = type = orders[ i ]; break; } } } return type; } }); }); /** * @fileOverview Transport */ define('lib/transport',[ 'base', 'runtime/client', 'mediator' ], function( Base, RuntimeClient, Mediator ) { var $ = Base.$; function Transport( opts ) { var me = this; opts = me.options = $.extend( true, {}, Transport.options, opts || {} ); RuntimeClient.call( this, 'Transport' ); this._blob = null; this._formData = opts.formData || {}; this._headers = opts.headers || {}; this.on( 'progress', this._timeout ); this.on( 'load error', function() { me.trigger( 'progress', 1 ); clearTimeout( me._timer ); }); } Transport.options = { server: '', method: 'POST', // 跨域时,是否允许携带cookie, 只有html5 runtime才有效 withCredentials: false, fileVal: 'file', timeout: 2 * 60 * 1000, // 2分钟 formData: {}, headers: {}, sendAsBinary: false }; $.extend( Transport.prototype, { // 添加Blob, 只能添加一次,最后一次有效。 appendBlob: function( key, blob, filename ) { var me = this, opts = me.options; if ( me.getRuid() ) { me.disconnectRuntime(); } // 连接到blob归属的同一个runtime. me.connectRuntime( blob.ruid, function() { me.exec('init'); }); me._blob = blob; opts.fileVal = key || opts.fileVal; opts.filename = filename || opts.filename; }, // 添加其他字段 append: function( key, value ) { if ( typeof key === 'object' ) { $.extend( this._formData, key ); } else { this._formData[ key ] = value; } }, setRequestHeader: function( key, value ) { if ( typeof key === 'object' ) { $.extend( this._headers, key ); } else { this._headers[ key ] = value; } }, send: function( method ) { this.exec( 'send', method ); this._timeout(); }, abort: function() { clearTimeout( this._timer ); return this.exec('abort'); }, destroy: function() { this.trigger('destroy'); this.off(); this.exec('destroy'); this.disconnectRuntime(); }, getResponse: function() { return this.exec('getResponse'); }, getResponseAsJson: function() { return this.exec('getResponseAsJson'); }, getStatus: function() { return this.exec('getStatus'); }, _timeout: function() { var me = this, duration = me.options.timeout; if ( !duration ) { return; } clearTimeout( me._timer ); me._timer = setTimeout(function() { me.abort(); me.trigger( 'error', 'timeout' ); }, duration ); } }); // 让Transport具备事件功能。 Mediator.installTo( Transport.prototype ); return Transport; }); /** * @fileOverview 负责文件上传相关。 */ define('widgets/upload',[ 'base', 'uploader', 'file', 'lib/transport', 'widgets/widget' ], function( Base, Uploader, WUFile, Transport ) { var $ = Base.$, isPromise = Base.isPromise, Status = WUFile.Status; // 添加默认配置项 $.extend( Uploader.options, { /** * @property {Boolean} [prepareNextFile=false] * @namespace options * @for Uploader * @description 是否允许在文件传输时提前把下一个文件准备好。 * 对于一个文件的准备工作比较耗时,比如图片压缩,md5序列化。 * 如果能提前在当前文件传输期处理,可以节省总体耗时。 */ prepareNextFile: false, /** * @property {Boolean} [chunked=false] * @namespace options * @for Uploader * @description 是否要分片处理大文件上传。 */ chunked: false, /** * @property {Boolean} [chunkSize=5242880] * @namespace options * @for Uploader * @description 如果要分片,分多大一片? 默认大小为5M. */ chunkSize: 5 * 1024 * 1024, /** * @property {Boolean} [chunkRetry=2] * @namespace options * @for Uploader * @description 如果某个分片由于网络问题出错,允许自动重传多少次? */ chunkRetry: 2, /** * @property {Boolean} [threads=3] * @namespace options * @for Uploader * @description 上传并发数。允许同时最大上传进程数。 */ threads: 3, /** * @property {Object} [formData={}] * @namespace options * @for Uploader * @description 文件上传请求的参数表,每次发送都会发送此对象中的参数。 */ formData: {} /** * @property {Object} [fileVal='file'] * @namespace options * @for Uploader * @description 设置文件上传域的name。 */ /** * @property {Object} [method='POST'] * @namespace options * @for Uploader * @description 文件上传方式,`POST`或者`GET`。 */ /** * @property {Object} [sendAsBinary=false] * @namespace options * @for Uploader * @description 是否已二进制的流的方式发送文件,这样整个上传内容`php://input`都为文件内容, * 其他参数在$_GET数组中。 */ }); // 负责将文件切片。 function CuteFile( file, chunkSize ) { var pending = [], blob = file.source, total = blob.size, chunks = chunkSize ? Math.ceil( total / chunkSize ) : 1, start = 0, index = 0, len, api; api = { file: file, has: function() { return !!pending.length; }, shift: function() { return pending.shift(); }, unshift: function( block ) { pending.unshift( block ); } }; while ( index < chunks ) { len = Math.min( chunkSize, total - start ); pending.push({ file: file, start: start, end: chunkSize ? (start + len) : total, total: total, chunks: chunks, chunk: index++, cuted: api }); start += len; } file.blocks = pending.concat(); file.remaning = pending.length; return api; } Uploader.register({ name: 'upload', init: function() { var owner = this.owner, me = this; this.runing = false; this.progress = false; owner .on( 'startUpload', function() { me.progress = true; }) .on( 'uploadFinished', function() { me.progress = false; }); // 记录当前正在传的数据,跟threads相关 this.pool = []; // 缓存分好片的文件。 this.stack = []; // 缓存即将上传的文件。 this.pending = []; // 跟踪还有多少分片在上传中但是没有完成上传。 this.remaning = 0; this.__tick = Base.bindFn( this._tick, this ); owner.on( 'uploadComplete', function( file ) { // 把其他块取消了。 file.blocks && $.each( file.blocks, function( _, v ) { v.transport && (v.transport.abort(), v.transport.destroy()); delete v.transport; }); delete file.blocks; delete file.remaning; }); }, reset: function() { this.request( 'stop-upload', true ); this.runing = false; this.pool = []; this.stack = []; this.pending = []; this.remaning = 0; this._trigged = false; this._promise = null; }, /** * @event startUpload * @description 当开始上传流程时触发。 * @for Uploader */ /** * 开始上传。此方法可以从初始状态调用开始上传流程,也可以从暂停状态调用,继续上传流程。 * * 可以指定开始某一个文件。 * @grammar upload() => undefined * @grammar upload( file | fileId) => undefined * @method upload * @for Uploader */ startUpload: function(file) { var me = this; // 移出invalid的文件 $.each( me.request( 'get-files', Status.INVALID ), function() { me.request( 'remove-file', this ); }); // 如果指定了开始某个文件,则只开始指定文件。 if ( file ) { file = file.id ? file : me.request( 'get-file', file ); if (file.getStatus() === Status.INTERRUPT) { $.each( me.pool, function( _, v ) { // 之前暂停过。 if (v.file !== file) { return; } v.transport && v.transport.send(); }); file.setStatus( Status.QUEUED ); } else if (file.getStatus() === Status.PROGRESS) { return; } else { file.setStatus( Status.QUEUED ); } } else { $.each( me.request( 'get-files', [ Status.INITED ] ), function() { this.setStatus( Status.QUEUED ); }); } if ( me.runing ) { return; } me.runing = true; var files = []; // 如果有暂停的,则续传 $.each( me.pool, function( _, v ) { var file = v.file; if ( file.getStatus() === Status.INTERRUPT ) { files.push(file); me._trigged = false; v.transport && v.transport.send(); } }); var file; while ( (file = files.shift()) ) { file.setStatus( Status.PROGRESS ); } file || $.each( me.request( 'get-files', Status.INTERRUPT ), function() { this.setStatus( Status.PROGRESS ); }); me._trigged = false; Base.nextTick( me.__tick ); me.owner.trigger('startUpload'); }, /** * @event stopUpload * @description 当开始上传流程暂停时触发。 * @for Uploader */ /** * 暂停上传。第一个参数为是否中断上传当前正在上传的文件。 * * 如果第一个参数是文件,则只暂停指定文件。 * @grammar stop() => undefined * @grammar stop( true ) => undefined * @grammar stop( file ) => undefined * @method stop * @for Uploader */ stopUpload: function( file, interrupt ) { var me = this; if (file === true) { interrupt = file; file = null; } if ( me.runing === false ) { return; } // 如果只是暂停某个文件。 if ( file ) { file = file.id ? file : me.request( 'get-file', file ); if ( file.getStatus() !== Status.PROGRESS && file.getStatus() !== Status.QUEUED ) { return; } file.setStatus( Status.INTERRUPT ); $.each( me.pool, function( _, v ) { // 只 abort 指定的文件。 if (v.file !== file) { return; } v.transport && v.transport.abort(); me._putback(v); me._popBlock(v); }); return Base.nextTick( me.__tick ); } me.runing = false; if (this._promise && this._promise.file) { this._promise.file.setStatus( Status.INTERRUPT ); } interrupt && $.each( me.pool, function( _, v ) { v.transport && v.transport.abort(); v.file.setStatus( Status.INTERRUPT ); }); me.owner.trigger('stopUpload'); }, /** * @method cancelFile * @grammar cancelFile( file ) => undefined * @grammar cancelFile( id ) => undefined * @param {File|id} file File对象或这File对象的id * @description 标记文件状态为已取消, 同时将中断文件传输。 * @for Uploader * @example * * $li.on('click', '.remove-this', function() { * uploader.cancelFile( file ); * }) */ cancelFile: function( file ) { file = file.id ? file : this.request( 'get-file', file ); // 如果正在上传。 file.blocks && $.each( file.blocks, function( _, v ) { var _tr = v.transport; if ( _tr ) { _tr.abort(); _tr.destroy(); delete v.transport; } }); file.setStatus( Status.CANCELLED ); this.owner.trigger( 'fileDequeued', file ); }, /** * 判断`Uplaode`r是否正在上传中。 * @grammar isInProgress() => Boolean * @method isInProgress * @for Uploader */ isInProgress: function() { return !!this.progress; }, _getStats: function() { return this.request('get-stats'); }, /** * 掉过一个文件上传,直接标记指定文件为已上传状态。 * @grammar skipFile( file ) => undefined * @method skipFile * @for Uploader */ skipFile: function( file, status ) { file = file.id ? file : this.request( 'get-file', file ); file.setStatus( status || Status.COMPLETE ); file.skipped = true; // 如果正在上传。 file.blocks && $.each( file.blocks, function( _, v ) { var _tr = v.transport; if ( _tr ) { _tr.abort(); _tr.destroy(); delete v.transport; } }); this.owner.trigger( 'uploadSkip', file ); }, /** * @event uploadFinished * @description 当所有文件上传结束时触发。 * @for Uploader */ _tick: function() { var me = this, opts = me.options, fn, val; // 上一个promise还没有结束,则等待完成后再执行。 if ( me._promise ) { return me._promise.always( me.__tick ); } // 还有位置,且还有文件要处理的话。 if ( me.pool.length < opts.threads && (val = me._nextBlock()) ) { me._trigged = false; fn = function( val ) { me._promise = null; // 有可能是reject过来的,所以要检测val的类型。 val && val.file && me._startSend( val ); Base.nextTick( me.__tick ); }; me._promise = isPromise( val ) ? val.always( fn ) : fn( val ); // 没有要上传的了,且没有正在传输的了。 } else if ( !me.remaning && !me._getStats().numOfQueue && !me._getStats().numofInterrupt ) { me.runing = false; me._trigged || Base.nextTick(function() { me.owner.trigger('uploadFinished'); }); me._trigged = true; } }, _putback: function(block) { var idx; block.cuted.unshift(block); idx = this.stack.indexOf(block.cuted); if (!~idx) { this.stack.unshift(block.cuted); } }, _getStack: function() { var i = 0, act; while ( (act = this.stack[ i++ ]) ) { if ( act.has() && act.file.getStatus() === Status.PROGRESS ) { return act; } else if (!act.has() || act.file.getStatus() !== Status.PROGRESS && act.file.getStatus() !== Status.INTERRUPT ) { // 把已经处理完了的,或者,状态为非 progress(上传中)、 // interupt(暂停中) 的移除。 this.stack.splice( --i, 1 ); } } return null; }, _nextBlock: function() { var me = this, opts = me.options, act, next, done, preparing; // 如果当前文件还有没有需要传输的,则直接返回剩下的。 if ( (act = this._getStack()) ) { // 是否提前准备下一个文件 if ( opts.prepareNextFile && !me.pending.length ) { me._prepareNextFile(); } return act.shift(); // 否则,如果正在运行,则准备下一个文件,并等待完成后返回下个分片。 } else if ( me.runing ) { // 如果缓存中有,则直接在缓存中取,没有则去queue中取。 if ( !me.pending.length && me._getStats().numOfQueue ) { me._prepareNextFile(); } next = me.pending.shift(); done = function( file ) { if ( !file ) { return null; } act = CuteFile( file, opts.chunked ? opts.chunkSize : 0 ); me.stack.push(act); return act.shift(); }; // 文件可能还在prepare中,也有可能已经完全准备好了。 if ( isPromise( next) ) { preparing = next.file; next = next[ next.pipe ? 'pipe' : 'then' ]( done ); next.file = preparing; return next; } return done( next ); } }, /** * @event uploadStart * @param {File} file File对象 * @description 某个文件开始上传前触发,一个文件只会触发一次。 * @for Uploader */ _prepareNextFile: function() { var me = this, file = me.request('fetch-file'), pending = me.pending, promise; if ( file ) { promise = me.request( 'before-send-file', file, function() { // 有可能文件被skip掉了。文件被skip掉后,状态坑定不是Queued. if ( file.getStatus() === Status.PROGRESS || file.getStatus() === Status.INTERRUPT ) { return file; } return me._finishFile( file ); }); me.owner.trigger( 'uploadStart', file ); file.setStatus( Status.PROGRESS ); promise.file = file; // 如果还在pending中,则替换成文件本身。 promise.done(function() { var idx = $.inArray( promise, pending ); ~idx && pending.splice( idx, 1, file ); }); // befeore-send-file的钩子就有错误发生。 promise.fail(function( reason ) { file.setStatus( Status.ERROR, reason ); me.owner.trigger( 'uploadError', file, reason ); me.owner.trigger( 'uploadComplete', file ); }); pending.push( promise ); } }, // 让出位置了,可以让其他分片开始上传 _popBlock: function( block ) { var idx = $.inArray( block, this.pool ); this.pool.splice( idx, 1 ); block.file.remaning--; this.remaning--; }, // 开始上传,可以被掉过。如果promise被reject了,则表示跳过此分片。 _startSend: function( block ) { var me = this, file = block.file, promise; // 有可能在 before-send-file 的 promise 期间改变了文件状态。 // 如:暂停,取消 // 我们不能中断 promise, 但是可以在 promise 完后,不做上传操作。 if ( file.getStatus() !== Status.PROGRESS ) { // 如果是中断,则还需要放回去。 if (file.getStatus() === Status.INTERRUPT) { me._putback(block); } return; } me.pool.push( block ); me.remaning++; // 如果没有分片,则直接使用原始的。 // 不会丢失content-type信息。 block.blob = block.chunks === 1 ? file.source : file.source.slice( block.start, block.end ); // hook, 每个分片发送之前可能要做些异步的事情。 promise = me.request( 'before-send', block, function() { // 有可能文件已经上传出错了,所以不需要再传输了。 if ( file.getStatus() === Status.PROGRESS ) { me._doSend( block ); } else { me._popBlock( block ); Base.nextTick( me.__tick ); } }); // 如果为fail了,则跳过此分片。 promise.fail(function() { if ( file.remaning === 1 ) { me._finishFile( file ).always(function() { block.percentage = 1; me._popBlock( block ); me.owner.trigger( 'uploadComplete', file ); Base.nextTick( me.__tick ); }); } else { block.percentage = 1; me.updateFileProgress( file ); me._popBlock( block ); Base.nextTick( me.__tick ); } }); }, /** * @event uploadBeforeSend * @param {Object} object * @param {Object} data 默认的上传参数,可以扩展此对象来控制上传参数。 * @param {Object} headers 可以扩展此对象来控制上传头部。 * @description 当某个文件的分块在发送前触发,主要用来询问是否要添加附带参数,大文件在开起分片上传的前提下此事件可能会触发多次。 * @for Uploader */ /** * @event uploadAccept * @param {Object} object * @param {Object} ret 服务端的返回数据,json格式,如果服务端不是json格式,从ret._raw中取数据,自行解析。 * @description 当某个文件上传到服务端响应后,会派送此事件来询问服务端响应是否有效。如果此事件handler返回值为`false`, 则此文件将派送`server`类型的`uploadError`事件。 * @for Uploader */ /** * @event uploadProgress * @param {File} file File对象 * @param {Number} percentage 上传进度 * @description 上传过程中触发,携带上传进度。 * @for Uploader */ /** * @event uploadError * @param {File} file File对象 * @param {String} reason 出错的code * @description 当文件上传出错时触发。 * @for Uploader */ /** * @event uploadSuccess * @param {File} file File对象 * @param {Object} response 服务端返回的数据 * @description 当文件上传成功时触发。 * @for Uploader */ /** * @event uploadComplete * @param {File} [file] File对象 * @description 不管成功或者失败,文件上传完成时触发。 * @for Uploader */ // 做上传操作。 _doSend: function( block ) { var me = this, owner = me.owner, opts = me.options, file = block.file, tr = new Transport( opts ), data = $.extend({}, opts.formData ), headers = $.extend({}, opts.headers ), requestAccept, ret; block.transport = tr; tr.on( 'destroy', function() { delete block.transport; me._popBlock( block ); Base.nextTick( me.__tick ); }); // 广播上传进度。以文件为单位。 tr.on( 'progress', function( percentage ) { block.percentage = percentage; me.updateFileProgress( file ); }); // 用来询问,是否返回的结果是有错误的。 requestAccept = function( reject ) { var fn; ret = tr.getResponseAsJson() || {}; ret._raw = tr.getResponse(); fn = function( value ) { reject = value; }; // 服务端响应了,不代表成功了,询问是否响应正确。 if ( !owner.trigger( 'uploadAccept', block, ret, fn ) ) { reject = reject || 'server'; } return reject; }; // 尝试重试,然后广播文件上传出错。 tr.on( 'error', function( type, flag ) { block.retried = block.retried || 0; // 自动重试 if ( block.chunks > 1 && ~'http,abort'.indexOf( type ) && block.retried < opts.chunkRetry ) { block.retried++; tr.send(); } else { // http status 500 ~ 600 if ( !flag && type === 'server' ) { type = requestAccept( type ); } file.setStatus( Status.ERROR, type ); owner.trigger( 'uploadError', file, type ); owner.trigger( 'uploadComplete', file ); } }); // 上传成功 tr.on( 'load', function() { var reason; // 如果非预期,转向上传出错。 if ( (reason = requestAccept()) ) { tr.trigger( 'error', reason, true ); return; } // 全部上传完成。 if ( file.remaning === 1 ) { me._finishFile( file, ret ); } else { tr.destroy(); } }); // 配置默认的上传字段。 data = $.extend( data, { id: file.id, name: file.name, type: file.type, lastModifiedDate: file.lastModifiedDate, size: file.size }); block.chunks > 1 && $.extend( data, { chunks: block.chunks, chunk: block.chunk }); // 在发送之间可以添加字段什么的。。。 // 如果默认的字段不够使用,可以通过监听此事件来扩展 owner.trigger( 'uploadBeforeSend', block, data, headers ); // 开始发送。 tr.appendBlob( opts.fileVal, block.blob, file.name ); tr.append( data ); tr.setRequestHeader( headers ); tr.send(); }, // 完成上传。 _finishFile: function( file, ret, hds ) { var owner = this.owner; return owner .request( 'after-send-file', arguments, function() { file.setStatus( Status.COMPLETE ); owner.trigger( 'uploadSuccess', file, ret, hds ); }) .fail(function( reason ) { // 如果外部已经标记为invalid什么的,不再改状态。 if ( file.getStatus() === Status.PROGRESS ) { file.setStatus( Status.ERROR, reason ); } owner.trigger( 'uploadError', file, reason ); }) .always(function() { owner.trigger( 'uploadComplete', file ); }); }, updateFileProgress: function(file) { var totalPercent = 0, uploaded = 0; if (!file.blocks) { return; } $.each( file.blocks, function( _, v ) { uploaded += (v.percentage || 0) * (v.end - v.start); }); totalPercent = uploaded / file.size; this.owner.trigger( 'uploadProgress', file, totalPercent || 0 ); } }); }); /** * @fileOverview 日志组件,主要用来收集错误信息,可以帮助 webuploader 更好的定位问题和发展。 * * 如果您不想要启用此功能,请在打包的时候去掉 log 模块。 * * 或者可以在初始化的时候通过 options.disableWidgets 属性禁用。 * * 如: * WebUploader.create({ * ... * * disableWidgets: 'log', * * ... * }) */ define('widgets/log',[ 'base', 'uploader', 'widgets/widget' ], function( Base, Uploader ) { var $ = Base.$, logUrl = ' http://static.tieba.baidu.com/tb/pms/img/st.gif??', product = (location.hostname || location.host || 'protected').toLowerCase(), // 只针对 baidu 内部产品用户做统计功能。 enable = product && /baidu/i.exec(product), base; if (!enable) { return; } base = { dv: 3, master: 'webuploader', online: /test/.exec(product) ? 0 : 1, module: '', product: product, type: 0 }; function send(data) { var obj = $.extend({}, base, data), url = logUrl.replace(/^(.*)\?/, '$1' + $.param( obj )), image = new Image(); image.src = url; } return Uploader.register({ name: 'log', init: function() { var owner = this.owner, count = 0, size = 0; owner .on('error', function(code) { send({ type: 2, c_error_code: code }); }) .on('uploadError', function(file, reason) { send({ type: 2, c_error_code: 'UPLOAD_ERROR', c_reason: '' + reason }); }) .on('uploadComplete', function(file) { count++; size += file.size; }). on('uploadFinished', function() { send({ c_count: count, c_size: size }); count = size = 0; }); send({ c_usage: 1 }); } }); }); /** * @fileOverview Runtime管理器,负责Runtime的选择, 连接 */ define('runtime/compbase',[],function() { function CompBase( owner, runtime ) { this.owner = owner; this.options = owner.options; this.getRuntime = function() { return runtime; }; this.getRuid = function() { return runtime.uid; }; this.trigger = function() { return owner.trigger.apply( owner, arguments ); }; } return CompBase; }); /** * @fileOverview Html5Runtime */ define('runtime/html5/runtime',[ 'base', 'runtime/runtime', 'runtime/compbase' ], function( Base, Runtime, CompBase ) { var type = 'html5', components = {}; function Html5Runtime() { var pool = {}, me = this, destroy = this.destroy; Runtime.apply( me, arguments ); me.type = type; // 这个方法的调用者,实际上是RuntimeClient me.exec = function( comp, fn/*, args...*/) { var client = this, uid = client.uid, args = Base.slice( arguments, 2 ), instance; if ( components[ comp ] ) { instance = pool[ uid ] = pool[ uid ] || new components[ comp ]( client, me ); if ( instance[ fn ] ) { return instance[ fn ].apply( instance, args ); } } }; me.destroy = function() { // @todo 删除池子中的所有实例 return destroy && destroy.apply( this, arguments ); }; } Base.inherits( Runtime, { constructor: Html5Runtime, // 不需要连接其他程序,直接执行callback init: function() { var me = this; setTimeout(function() { me.trigger('ready'); }, 1 ); } }); // 注册Components Html5Runtime.register = function( name, component ) { var klass = components[ name ] = Base.inherits( CompBase, component ); return klass; }; // 注册html5运行时。 // 只有在支持的前提下注册。 if ( window.Blob && window.FileReader && window.DataView ) { Runtime.addRuntime( type, Html5Runtime ); } return Html5Runtime; }); /** * @fileOverview Blob Html实现 */ define('runtime/html5/blob',[ 'runtime/html5/runtime', 'lib/blob' ], function( Html5Runtime, Blob ) { return Html5Runtime.register( 'Blob', { slice: function( start, end ) { var blob = this.owner.source, slice = blob.slice || blob.webkitSlice || blob.mozSlice; blob = slice.call( blob, start, end ); return new Blob( this.getRuid(), blob ); } }); }); /** * @fileOverview FilePicker */ define('runtime/html5/filepicker',[ 'base', 'runtime/html5/runtime' ], function( Base, Html5Runtime ) { var $ = Base.$; return Html5Runtime.register( 'FilePicker', { init: function() { var container = this.getRuntime().getContainer(), me = this, owner = me.owner, opts = me.options, label = this.label = $( document.createElement('label') ), input = this.input = $( document.createElement('input') ), arr, i, len, mouseHandler; input.attr( 'type', 'file' ); input.attr( 'name', opts.name ); input.addClass('webuploader-element-invisible'); label.on( 'click', function() { input.trigger('click'); }); label.css({ opacity: 0, width: '100%', height: '100%', display: 'block', cursor: 'pointer', background: '#ffffff' }); if ( opts.multiple ) { input.attr( 'multiple', 'multiple' ); } // @todo Firefox不支持单独指定后缀 if ( opts.accept && opts.accept.length > 0 ) { arr = []; for ( i = 0, len = opts.accept.length; i < len; i++ ) { arr.push( opts.accept[ i ].mimeTypes ); } input.attr( 'accept', arr.join(',') ); } container.append( input ); container.append( label ); mouseHandler = function( e ) { owner.trigger( e.type ); }; input.on( 'change', function( e ) { var fn = arguments.callee, clone; me.files = e.target.files; // reset input clone = this.cloneNode( true ); clone.value = null; this.parentNode.replaceChild( clone, this ); input.off(); input = $( clone ).on( 'change', fn ) .on( 'mouseenter mouseleave', mouseHandler ); owner.trigger('change'); }); label.on( 'mouseenter mouseleave', mouseHandler ); }, getFiles: function() { return this.files; }, destroy: function() { this.input.off(); this.label.off(); } }); }); /** * Terms: * * Uint8Array, FileReader, BlobBuilder, atob, ArrayBuffer * @fileOverview Image控件 */ define('runtime/html5/util',[ 'base' ], function( Base ) { var urlAPI = window.createObjectURL && window || window.URL && URL.revokeObjectURL && URL || window.webkitURL, createObjectURL = Base.noop, revokeObjectURL = createObjectURL; if ( urlAPI ) { // 更安全的方式调用,比如android里面就能把context改成其他的对象。 createObjectURL = function() { return urlAPI.createObjectURL.apply( urlAPI, arguments ); }; revokeObjectURL = function() { return urlAPI.revokeObjectURL.apply( urlAPI, arguments ); }; } return { createObjectURL: createObjectURL, revokeObjectURL: revokeObjectURL, dataURL2Blob: function( dataURI ) { var byteStr, intArray, ab, i, mimetype, parts; parts = dataURI.split(','); if ( ~parts[ 0 ].indexOf('base64') ) { byteStr = atob( parts[ 1 ] ); } else { byteStr = decodeURIComponent( parts[ 1 ] ); } ab = new ArrayBuffer( byteStr.length ); intArray = new Uint8Array( ab ); for ( i = 0; i < byteStr.length; i++ ) { intArray[ i ] = byteStr.charCodeAt( i ); } mimetype = parts[ 0 ].split(':')[ 1 ].split(';')[ 0 ]; return this.arrayBufferToBlob( ab, mimetype ); }, dataURL2ArrayBuffer: function( dataURI ) { var byteStr, intArray, i, parts; parts = dataURI.split(','); if ( ~parts[ 0 ].indexOf('base64') ) { byteStr = atob( parts[ 1 ] ); } else { byteStr = decodeURIComponent( parts[ 1 ] ); } intArray = new Uint8Array( byteStr.length ); for ( i = 0; i < byteStr.length; i++ ) { intArray[ i ] = byteStr.charCodeAt( i ); } return intArray.buffer; }, arrayBufferToBlob: function( buffer, type ) { var builder = window.BlobBuilder || window.WebKitBlobBuilder, bb; // android不支持直接new Blob, 只能借助blobbuilder. if ( builder ) { bb = new builder(); bb.append( buffer ); return bb.getBlob( type ); } return new Blob([ buffer ], type ? { type: type } : {} ); }, // 抽出来主要是为了解决android下面canvas.toDataUrl不支持jpeg. // 你得到的结果是png. canvasToDataUrl: function( canvas, type, quality ) { return canvas.toDataURL( type, quality / 100 ); }, // imagemeat会复写这个方法,如果用户选择加载那个文件了的话。 parseMeta: function( blob, callback ) { callback( false, {}); }, // imagemeat会复写这个方法,如果用户选择加载那个文件了的话。 updateImageHead: function( data ) { return data; } }; }); /** * Terms: * * Uint8Array, FileReader, BlobBuilder, atob, ArrayBuffer * @fileOverview Image控件 */ define('runtime/html5/imagemeta',[ 'runtime/html5/util' ], function( Util ) { var api; api = { parsers: { 0xffe1: [] }, maxMetaDataSize: 262144, parse: function( blob, cb ) { var me = this, fr = new FileReader(); fr.onload = function() { cb( false, me._parse( this.result ) ); fr = fr.onload = fr.onerror = null; }; fr.onerror = function( e ) { cb( e.message ); fr = fr.onload = fr.onerror = null; }; blob = blob.slice( 0, me.maxMetaDataSize ); fr.readAsArrayBuffer( blob.getSource() ); }, _parse: function( buffer, noParse ) { if ( buffer.byteLength < 6 ) { return; } var dataview = new DataView( buffer ), offset = 2, maxOffset = dataview.byteLength - 4, headLength = offset, ret = {}, markerBytes, markerLength, parsers, i; if ( dataview.getUint16( 0 ) === 0xffd8 ) { while ( offset < maxOffset ) { markerBytes = dataview.getUint16( offset ); if ( markerBytes >= 0xffe0 && markerBytes <= 0xffef || markerBytes === 0xfffe ) { markerLength = dataview.getUint16( offset + 2 ) + 2; if ( offset + markerLength > dataview.byteLength ) { break; } parsers = api.parsers[ markerBytes ]; if ( !noParse && parsers ) { for ( i = 0; i < parsers.length; i += 1 ) { parsers[ i ].call( api, dataview, offset, markerLength, ret ); } } offset += markerLength; headLength = offset; } else { break; } } if ( headLength > 6 ) { if ( buffer.slice ) { ret.imageHead = buffer.slice( 2, headLength ); } else { // Workaround for IE10, which does not yet // support ArrayBuffer.slice: ret.imageHead = new Uint8Array( buffer ) .subarray( 2, headLength ); } } } return ret; }, updateImageHead: function( buffer, head ) { var data = this._parse( buffer, true ), buf1, buf2, bodyoffset; bodyoffset = 2; if ( data.imageHead ) { bodyoffset = 2 + data.imageHead.byteLength; } if ( buffer.slice ) { buf2 = buffer.slice( bodyoffset ); } else { buf2 = new Uint8Array( buffer ).subarray( bodyoffset ); } buf1 = new Uint8Array( head.byteLength + 2 + buf2.byteLength ); buf1[ 0 ] = 0xFF; buf1[ 1 ] = 0xD8; buf1.set( new Uint8Array( head ), 2 ); buf1.set( new Uint8Array( buf2 ), head.byteLength + 2 ); return buf1.buffer; } }; Util.parseMeta = function() { return api.parse.apply( api, arguments ); }; Util.updateImageHead = function() { return api.updateImageHead.apply( api, arguments ); }; return api; }); /** * 代码来自于:https://github.com/blueimp/JavaScript-Load-Image * 暂时项目中只用了orientation. * * 去除了 Exif Sub IFD Pointer, GPS Info IFD Pointer, Exif Thumbnail. * @fileOverview EXIF解析 */ // Sample // ==================================== // Make : Apple // Model : iPhone 4S // Orientation : 1 // XResolution : 72 [72/1] // YResolution : 72 [72/1] // ResolutionUnit : 2 // Software : QuickTime 7.7.1 // DateTime : 2013:09:01 22:53:55 // ExifIFDPointer : 190 // ExposureTime : 0.058823529411764705 [1/17] // FNumber : 2.4 [12/5] // ExposureProgram : Normal program // ISOSpeedRatings : 800 // ExifVersion : 0220 // DateTimeOriginal : 2013:09:01 22:52:51 // DateTimeDigitized : 2013:09:01 22:52:51 // ComponentsConfiguration : YCbCr // ShutterSpeedValue : 4.058893515764426 // ApertureValue : 2.5260688216892597 [4845/1918] // BrightnessValue : -0.3126686601998395 // MeteringMode : Pattern // Flash : Flash did not fire, compulsory flash mode // FocalLength : 4.28 [107/25] // SubjectArea : [4 values] // FlashpixVersion : 0100 // ColorSpace : 1 // PixelXDimension : 2448 // PixelYDimension : 3264 // SensingMethod : One-chip color area sensor // ExposureMode : 0 // WhiteBalance : Auto white balance // FocalLengthIn35mmFilm : 35 // SceneCaptureType : Standard define('runtime/html5/imagemeta/exif',[ 'base', 'runtime/html5/imagemeta' ], function( Base, ImageMeta ) { var EXIF = {}; EXIF.ExifMap = function() { return this; }; EXIF.ExifMap.prototype.map = { 'Orientation': 0x0112 }; EXIF.ExifMap.prototype.get = function( id ) { return this[ id ] || this[ this.map[ id ] ]; }; EXIF.exifTagTypes = { // byte, 8-bit unsigned int: 1: { getValue: function( dataView, dataOffset ) { return dataView.getUint8( dataOffset ); }, size: 1 }, // ascii, 8-bit byte: 2: { getValue: function( dataView, dataOffset ) { return String.fromCharCode( dataView.getUint8( dataOffset ) ); }, size: 1, ascii: true }, // short, 16 bit int: 3: { getValue: function( dataView, dataOffset, littleEndian ) { return dataView.getUint16( dataOffset, littleEndian ); }, size: 2 }, // long, 32 bit int: 4: { getValue: function( dataView, dataOffset, littleEndian ) { return dataView.getUint32( dataOffset, littleEndian ); }, size: 4 }, // rational = two long values, // first is numerator, second is denominator: 5: { getValue: function( dataView, dataOffset, littleEndian ) { return dataView.getUint32( dataOffset, littleEndian ) / dataView.getUint32( dataOffset + 4, littleEndian ); }, size: 8 }, // slong, 32 bit signed int: 9: { getValue: function( dataView, dataOffset, littleEndian ) { return dataView.getInt32( dataOffset, littleEndian ); }, size: 4 }, // srational, two slongs, first is numerator, second is denominator: 10: { getValue: function( dataView, dataOffset, littleEndian ) { return dataView.getInt32( dataOffset, littleEndian ) / dataView.getInt32( dataOffset + 4, littleEndian ); }, size: 8 } }; // undefined, 8-bit byte, value depending on field: EXIF.exifTagTypes[ 7 ] = EXIF.exifTagTypes[ 1 ]; EXIF.getExifValue = function( dataView, tiffOffset, offset, type, length, littleEndian ) { var tagType = EXIF.exifTagTypes[ type ], tagSize, dataOffset, values, i, str, c; if ( !tagType ) { Base.log('Invalid Exif data: Invalid tag type.'); return; } tagSize = tagType.size * length; // Determine if the value is contained in the dataOffset bytes, // or if the value at the dataOffset is a pointer to the actual data: dataOffset = tagSize > 4 ? tiffOffset + dataView.getUint32( offset + 8, littleEndian ) : (offset + 8); if ( dataOffset + tagSize > dataView.byteLength ) { Base.log('Invalid Exif data: Invalid data offset.'); return; } if ( length === 1 ) { return tagType.getValue( dataView, dataOffset, littleEndian ); } values = []; for ( i = 0; i < length; i += 1 ) { values[ i ] = tagType.getValue( dataView, dataOffset + i * tagType.size, littleEndian ); } if ( tagType.ascii ) { str = ''; // Concatenate the chars: for ( i = 0; i < values.length; i += 1 ) { c = values[ i ]; // Ignore the terminating NULL byte(s): if ( c === '\u0000' ) { break; } str += c; } return str; } return values; }; EXIF.parseExifTag = function( dataView, tiffOffset, offset, littleEndian, data ) { var tag = dataView.getUint16( offset, littleEndian ); data.exif[ tag ] = EXIF.getExifValue( dataView, tiffOffset, offset, dataView.getUint16( offset + 2, littleEndian ), // tag type dataView.getUint32( offset + 4, littleEndian ), // tag length littleEndian ); }; EXIF.parseExifTags = function( dataView, tiffOffset, dirOffset, littleEndian, data ) { var tagsNumber, dirEndOffset, i; if ( dirOffset + 6 > dataView.byteLength ) { Base.log('Invalid Exif data: Invalid directory offset.'); return; } tagsNumber = dataView.getUint16( dirOffset, littleEndian ); dirEndOffset = dirOffset + 2 + 12 * tagsNumber; if ( dirEndOffset + 4 > dataView.byteLength ) { Base.log('Invalid Exif data: Invalid directory size.'); return; } for ( i = 0; i < tagsNumber; i += 1 ) { this.parseExifTag( dataView, tiffOffset, dirOffset + 2 + 12 * i, // tag offset littleEndian, data ); } // Return the offset to the next directory: return dataView.getUint32( dirEndOffset, littleEndian ); }; // EXIF.getExifThumbnail = function(dataView, offset, length) { // var hexData, // i, // b; // if (!length || offset + length > dataView.byteLength) { // Base.log('Invalid Exif data: Invalid thumbnail data.'); // return; // } // hexData = []; // for (i = 0; i < length; i += 1) { // b = dataView.getUint8(offset + i); // hexData.push((b < 16 ? '0' : '') + b.toString(16)); // } // return 'data:image/jpeg,%' + hexData.join('%'); // }; EXIF.parseExifData = function( dataView, offset, length, data ) { var tiffOffset = offset + 10, littleEndian, dirOffset; // Check for the ASCII code for "Exif" (0x45786966): if ( dataView.getUint32( offset + 4 ) !== 0x45786966 ) { // No Exif data, might be XMP data instead return; } if ( tiffOffset + 8 > dataView.byteLength ) { Base.log('Invalid Exif data: Invalid segment size.'); return; } // Check for the two null bytes: if ( dataView.getUint16( offset + 8 ) !== 0x0000 ) { Base.log('Invalid Exif data: Missing byte alignment offset.'); return; } // Check the byte alignment: switch ( dataView.getUint16( tiffOffset ) ) { case 0x4949: littleEndian = true; break; case 0x4D4D: littleEndian = false; break; default: Base.log('Invalid Exif data: Invalid byte alignment marker.'); return; } // Check for the TIFF tag marker (0x002A): if ( dataView.getUint16( tiffOffset + 2, littleEndian ) !== 0x002A ) { Base.log('Invalid Exif data: Missing TIFF marker.'); return; } // Retrieve the directory offset bytes, usually 0x00000008 or 8 decimal: dirOffset = dataView.getUint32( tiffOffset + 4, littleEndian ); // Create the exif object to store the tags: data.exif = new EXIF.ExifMap(); // Parse the tags of the main image directory and retrieve the // offset to the next directory, usually the thumbnail directory: dirOffset = EXIF.parseExifTags( dataView, tiffOffset, tiffOffset + dirOffset, littleEndian, data ); // 尝试读取缩略图 // if ( dirOffset ) { // thumbnailData = {exif: {}}; // dirOffset = EXIF.parseExifTags( // dataView, // tiffOffset, // tiffOffset + dirOffset, // littleEndian, // thumbnailData // ); // // Check for JPEG Thumbnail offset: // if (thumbnailData.exif[0x0201]) { // data.exif.Thumbnail = EXIF.getExifThumbnail( // dataView, // tiffOffset + thumbnailData.exif[0x0201], // thumbnailData.exif[0x0202] // Thumbnail data length // ); // } // } }; ImageMeta.parsers[ 0xffe1 ].push( EXIF.parseExifData ); return EXIF; }); /** * @fileOverview Image */ define('runtime/html5/image',[ 'base', 'runtime/html5/runtime', 'runtime/html5/util' ], function( Base, Html5Runtime, Util ) { var BLANK = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs%3D'; return Html5Runtime.register( 'Image', { // flag: 标记是否被修改过。 modified: false, init: function() { var me = this, img = new Image(); img.onload = function() { me._info = { type: me.type, width: this.width, height: this.height }; // 读取meta信息。 if ( !me._metas && 'image/jpeg' === me.type ) { Util.parseMeta( me._blob, function( error, ret ) { me._metas = ret; me.owner.trigger('load'); }); } else { me.owner.trigger('load'); } }; img.onerror = function() { me.owner.trigger('error'); }; me._img = img; }, loadFromBlob: function( blob ) { var me = this, img = me._img; me._blob = blob; me.type = blob.type; img.src = Util.createObjectURL( blob.getSource() ); me.owner.once( 'load', function() { Util.revokeObjectURL( img.src ); }); }, resize: function( width, height ) { var canvas = this._canvas || (this._canvas = document.createElement('canvas')); this._resize( this._img, canvas, width, height ); this._blob = null; // 没用了,可以删掉了。 this.modified = true; this.owner.trigger( 'complete', 'resize' ); }, crop: function( x, y, w, h, s ) { var cvs = this._canvas || (this._canvas = document.createElement('canvas')), opts = this.options, img = this._img, iw = img.naturalWidth, ih = img.naturalHeight, orientation = this.getOrientation(); s = s || 1; // todo 解决 orientation 的问题。 // values that require 90 degree rotation // if ( ~[ 5, 6, 7, 8 ].indexOf( orientation ) ) { // switch ( orientation ) { // case 6: // tmp = x; // x = y; // y = iw * s - tmp - w; // console.log(ih * s, tmp, w) // break; // } // (w ^= h, h ^= w, w ^= h); // } cvs.width = w; cvs.height = h; opts.preserveHeaders || this._rotate2Orientaion( cvs, orientation ); this._renderImageToCanvas( cvs, img, -x, -y, iw * s, ih * s ); this._blob = null; // 没用了,可以删掉了。 this.modified = true; this.owner.trigger( 'complete', 'crop' ); }, getAsBlob: function( type ) { var blob = this._blob, opts = this.options, canvas; type = type || this.type; // blob需要重新生成。 if ( this.modified || this.type !== type ) { canvas = this._canvas; if ( type === 'image/jpeg' ) { blob = Util.canvasToDataUrl( canvas, type, opts.quality ); if ( opts.preserveHeaders && this._metas && this._metas.imageHead ) { blob = Util.dataURL2ArrayBuffer( blob ); blob = Util.updateImageHead( blob, this._metas.imageHead ); blob = Util.arrayBufferToBlob( blob, type ); return blob; } } else { blob = Util.canvasToDataUrl( canvas, type ); } blob = Util.dataURL2Blob( blob ); } return blob; }, getAsDataUrl: function( type ) { var opts = this.options; type = type || this.type; if ( type === 'image/jpeg' ) { return Util.canvasToDataUrl( this._canvas, type, opts.quality ); } else { return this._canvas.toDataURL( type ); } }, getOrientation: function() { return this._metas && this._metas.exif && this._metas.exif.get('Orientation') || 1; }, info: function( val ) { // setter if ( val ) { this._info = val; return this; } // getter return this._info; }, meta: function( val ) { // setter if ( val ) { this._meta = val; return this; } // getter return this._meta; }, destroy: function() { var canvas = this._canvas; this._img.onload = null; if ( canvas ) { canvas.getContext('2d') .clearRect( 0, 0, canvas.width, canvas.height ); canvas.width = canvas.height = 0; this._canvas = null; } // 释放内存。非常重要,否则释放不了image的内存。 this._img.src = BLANK; this._img = this._blob = null; }, _resize: function( img, cvs, width, height ) { var opts = this.options, naturalWidth = img.width, naturalHeight = img.height, orientation = this.getOrientation(), scale, w, h, x, y; // values that require 90 degree rotation if ( ~[ 5, 6, 7, 8 ].indexOf( orientation ) ) { // 交换width, height的值。 width ^= height; height ^= width; width ^= height; } scale = Math[ opts.crop ? 'max' : 'min' ]( width / naturalWidth, height / naturalHeight ); // 不允许放大。 opts.allowMagnify || (scale = Math.min( 1, scale )); w = naturalWidth * scale; h = naturalHeight * scale; if ( opts.crop ) { cvs.width = width; cvs.height = height; } else { cvs.width = w; cvs.height = h; } x = (cvs.width - w) / 2; y = (cvs.height - h) / 2; opts.preserveHeaders || this._rotate2Orientaion( cvs, orientation ); this._renderImageToCanvas( cvs, img, x, y, w, h ); }, _rotate2Orientaion: function( canvas, orientation ) { var width = canvas.width, height = canvas.height, ctx = canvas.getContext('2d'); switch ( orientation ) { case 5: case 6: case 7: case 8: canvas.width = height; canvas.height = width; break; } switch ( orientation ) { case 2: // horizontal flip ctx.translate( width, 0 ); ctx.scale( -1, 1 ); break; case 3: // 180 rotate left ctx.translate( width, height ); ctx.rotate( Math.PI ); break; case 4: // vertical flip ctx.translate( 0, height ); ctx.scale( 1, -1 ); break; case 5: // vertical flip + 90 rotate right ctx.rotate( 0.5 * Math.PI ); ctx.scale( 1, -1 ); break; case 6: // 90 rotate right ctx.rotate( 0.5 * Math.PI ); ctx.translate( 0, -height ); break; case 7: // horizontal flip + 90 rotate right ctx.rotate( 0.5 * Math.PI ); ctx.translate( width, -height ); ctx.scale( -1, 1 ); break; case 8: // 90 rotate left ctx.rotate( -0.5 * Math.PI ); ctx.translate( -width, 0 ); break; } }, // https://github.com/stomita/ios-imagefile-megapixel/ // blob/master/src/megapix-image.js _renderImageToCanvas: (function() { // 如果不是ios, 不需要这么复杂! if ( !Base.os.ios ) { return function( canvas ) { var args = Base.slice( arguments, 1 ), ctx = canvas.getContext('2d'); ctx.drawImage.apply( ctx, args ); }; } /** * Detecting vertical squash in loaded image. * Fixes a bug which squash image vertically while drawing into * canvas for some images. */ function detectVerticalSquash( img, iw, ih ) { var canvas = document.createElement('canvas'), ctx = canvas.getContext('2d'), sy = 0, ey = ih, py = ih, data, alpha, ratio; canvas.width = 1; canvas.height = ih; ctx.drawImage( img, 0, 0 ); data = ctx.getImageData( 0, 0, 1, ih ).data; // search image edge pixel position in case // it is squashed vertically. while ( py > sy ) { alpha = data[ (py - 1) * 4 + 3 ]; if ( alpha === 0 ) { ey = py; } else { sy = py; } py = (ey + sy) >> 1; } ratio = (py / ih); return (ratio === 0) ? 1 : ratio; } // fix ie7 bug // http://stackoverflow.com/questions/11929099/ // html5-canvas-drawimage-ratio-bug-ios if ( Base.os.ios >= 7 ) { return function( canvas, img, x, y, w, h ) { var iw = img.naturalWidth, ih = img.naturalHeight, vertSquashRatio = detectVerticalSquash( img, iw, ih ); return canvas.getContext('2d').drawImage( img, 0, 0, iw * vertSquashRatio, ih * vertSquashRatio, x, y, w, h ); }; } /** * Detect subsampling in loaded image. * In iOS, larger images than 2M pixels may be * subsampled in rendering. */ function detectSubsampling( img ) { var iw = img.naturalWidth, ih = img.naturalHeight, canvas, ctx; // subsampling may happen overmegapixel image if ( iw * ih > 1024 * 1024 ) { canvas = document.createElement('canvas'); canvas.width = canvas.height = 1; ctx = canvas.getContext('2d'); ctx.drawImage( img, -iw + 1, 0 ); // subsampled image becomes half smaller in rendering size. // check alpha channel value to confirm image is covering // edge pixel or not. if alpha value is 0 // image is not covering, hence subsampled. return ctx.getImageData( 0, 0, 1, 1 ).data[ 3 ] === 0; } else { return false; } } return function( canvas, img, x, y, width, height ) { var iw = img.naturalWidth, ih = img.naturalHeight, ctx = canvas.getContext('2d'), subsampled = detectSubsampling( img ), doSquash = this.type === 'image/jpeg', d = 1024, sy = 0, dy = 0, tmpCanvas, tmpCtx, vertSquashRatio, dw, dh, sx, dx; if ( subsampled ) { iw /= 2; ih /= 2; } ctx.save(); tmpCanvas = document.createElement('canvas'); tmpCanvas.width = tmpCanvas.height = d; tmpCtx = tmpCanvas.getContext('2d'); vertSquashRatio = doSquash ? detectVerticalSquash( img, iw, ih ) : 1; dw = Math.ceil( d * width / iw ); dh = Math.ceil( d * height / ih / vertSquashRatio ); while ( sy < ih ) { sx = 0; dx = 0; while ( sx < iw ) { tmpCtx.clearRect( 0, 0, d, d ); tmpCtx.drawImage( img, -sx, -sy ); ctx.drawImage( tmpCanvas, 0, 0, d, d, x + dx, y + dy, dw, dh ); sx += d; dx += dw; } sy += d; dy += dh; } ctx.restore(); tmpCanvas = tmpCtx = null; }; })() }); }); /** * 这个方式性能不行,但是可以解决android里面的toDataUrl的bug * android里面toDataUrl('image/jpege')得到的结果却是png. * * 所以这里没辙,只能借助这个工具 * @fileOverview jpeg encoder */ define('runtime/html5/jpegencoder',[], function( require, exports, module ) { /* Copyright (c) 2008, Adobe Systems Incorporated All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of Adobe Systems Incorporated nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* JPEG encoder ported to JavaScript and optimized by Andreas Ritter, www.bytestrom.eu, 11/2009 Basic GUI blocking jpeg encoder */ function JPEGEncoder(quality) { var self = this; var fround = Math.round; var ffloor = Math.floor; var YTable = new Array(64); var UVTable = new Array(64); var fdtbl_Y = new Array(64); var fdtbl_UV = new Array(64); var YDC_HT; var UVDC_HT; var YAC_HT; var UVAC_HT; var bitcode = new Array(65535); var category = new Array(65535); var outputfDCTQuant = new Array(64); var DU = new Array(64); var byteout = []; var bytenew = 0; var bytepos = 7; var YDU = new Array(64); var UDU = new Array(64); var VDU = new Array(64); var clt = new Array(256); var RGB_YUV_TABLE = new Array(2048); var currentQuality; var ZigZag = [ 0, 1, 5, 6,14,15,27,28, 2, 4, 7,13,16,26,29,42, 3, 8,12,17,25,30,41,43, 9,11,18,24,31,40,44,53, 10,19,23,32,39,45,52,54, 20,22,33,38,46,51,55,60, 21,34,37,47,50,56,59,61, 35,36,48,49,57,58,62,63 ]; var std_dc_luminance_nrcodes = [0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0]; var std_dc_luminance_values = [0,1,2,3,4,5,6,7,8,9,10,11]; var std_ac_luminance_nrcodes = [0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,0x7d]; var std_ac_luminance_values = [ 0x01,0x02,0x03,0x00,0x04,0x11,0x05,0x12, 0x21,0x31,0x41,0x06,0x13,0x51,0x61,0x07, 0x22,0x71,0x14,0x32,0x81,0x91,0xa1,0x08, 0x23,0x42,0xb1,0xc1,0x15,0x52,0xd1,0xf0, 0x24,0x33,0x62,0x72,0x82,0x09,0x0a,0x16, 0x17,0x18,0x19,0x1a,0x25,0x26,0x27,0x28, 0x29,0x2a,0x34,0x35,0x36,0x37,0x38,0x39, 0x3a,0x43,0x44,0x45,0x46,0x47,0x48,0x49, 0x4a,0x53,0x54,0x55,0x56,0x57,0x58,0x59, 0x5a,0x63,0x64,0x65,0x66,0x67,0x68,0x69, 0x6a,0x73,0x74,0x75,0x76,0x77,0x78,0x79, 0x7a,0x83,0x84,0x85,0x86,0x87,0x88,0x89, 0x8a,0x92,0x93,0x94,0x95,0x96,0x97,0x98, 0x99,0x9a,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7, 0xa8,0xa9,0xaa,0xb2,0xb3,0xb4,0xb5,0xb6, 0xb7,0xb8,0xb9,0xba,0xc2,0xc3,0xc4,0xc5, 0xc6,0xc7,0xc8,0xc9,0xca,0xd2,0xd3,0xd4, 0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xe1,0xe2, 0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea, 0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8, 0xf9,0xfa ]; var std_dc_chrominance_nrcodes = [0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0]; var std_dc_chrominance_values = [0,1,2,3,4,5,6,7,8,9,10,11]; var std_ac_chrominance_nrcodes = [0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,0x77]; var std_ac_chrominance_values = [ 0x00,0x01,0x02,0x03,0x11,0x04,0x05,0x21, 0x31,0x06,0x12,0x41,0x51,0x07,0x61,0x71, 0x13,0x22,0x32,0x81,0x08,0x14,0x42,0x91, 0xa1,0xb1,0xc1,0x09,0x23,0x33,0x52,0xf0, 0x15,0x62,0x72,0xd1,0x0a,0x16,0x24,0x34, 0xe1,0x25,0xf1,0x17,0x18,0x19,0x1a,0x26, 0x27,0x28,0x29,0x2a,0x35,0x36,0x37,0x38, 0x39,0x3a,0x43,0x44,0x45,0x46,0x47,0x48, 0x49,0x4a,0x53,0x54,0x55,0x56,0x57,0x58, 0x59,0x5a,0x63,0x64,0x65,0x66,0x67,0x68, 0x69,0x6a,0x73,0x74,0x75,0x76,0x77,0x78, 0x79,0x7a,0x82,0x83,0x84,0x85,0x86,0x87, 0x88,0x89,0x8a,0x92,0x93,0x94,0x95,0x96, 0x97,0x98,0x99,0x9a,0xa2,0xa3,0xa4,0xa5, 0xa6,0xa7,0xa8,0xa9,0xaa,0xb2,0xb3,0xb4, 0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xc2,0xc3, 0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xd2, 0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda, 0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9, 0xea,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8, 0xf9,0xfa ]; function initQuantTables(sf){ var YQT = [ 16, 11, 10, 16, 24, 40, 51, 61, 12, 12, 14, 19, 26, 58, 60, 55, 14, 13, 16, 24, 40, 57, 69, 56, 14, 17, 22, 29, 51, 87, 80, 62, 18, 22, 37, 56, 68,109,103, 77, 24, 35, 55, 64, 81,104,113, 92, 49, 64, 78, 87,103,121,120,101, 72, 92, 95, 98,112,100,103, 99 ]; for (var i = 0; i < 64; i++) { var t = ffloor((YQT[i]*sf+50)/100); if (t < 1) { t = 1; } else if (t > 255) { t = 255; } YTable[ZigZag[i]] = t; } var UVQT = [ 17, 18, 24, 47, 99, 99, 99, 99, 18, 21, 26, 66, 99, 99, 99, 99, 24, 26, 56, 99, 99, 99, 99, 99, 47, 66, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99 ]; for (var j = 0; j < 64; j++) { var u = ffloor((UVQT[j]*sf+50)/100); if (u < 1) { u = 1; } else if (u > 255) { u = 255; } UVTable[ZigZag[j]] = u; } var aasf = [ 1.0, 1.387039845, 1.306562965, 1.175875602, 1.0, 0.785694958, 0.541196100, 0.275899379 ]; var k = 0; for (var row = 0; row < 8; row++) { for (var col = 0; col < 8; col++) { fdtbl_Y[k] = (1.0 / (YTable [ZigZag[k]] * aasf[row] * aasf[col] * 8.0)); fdtbl_UV[k] = (1.0 / (UVTable[ZigZag[k]] * aasf[row] * aasf[col] * 8.0)); k++; } } } function computeHuffmanTbl(nrcodes, std_table){ var codevalue = 0; var pos_in_table = 0; var HT = new Array(); for (var k = 1; k <= 16; k++) { for (var j = 1; j <= nrcodes[k]; j++) { HT[std_table[pos_in_table]] = []; HT[std_table[pos_in_table]][0] = codevalue; HT[std_table[pos_in_table]][1] = k; pos_in_table++; codevalue++; } codevalue*=2; } return HT; } function initHuffmanTbl() { YDC_HT = computeHuffmanTbl(std_dc_luminance_nrcodes,std_dc_luminance_values); UVDC_HT = computeHuffmanTbl(std_dc_chrominance_nrcodes,std_dc_chrominance_values); YAC_HT = computeHuffmanTbl(std_ac_luminance_nrcodes,std_ac_luminance_values); UVAC_HT = computeHuffmanTbl(std_ac_chrominance_nrcodes,std_ac_chrominance_values); } function initCategoryNumber() { var nrlower = 1; var nrupper = 2; for (var cat = 1; cat <= 15; cat++) { //Positive numbers for (var nr = nrlower; nr<nrupper; nr++) { category[32767+nr] = cat; bitcode[32767+nr] = []; bitcode[32767+nr][1] = cat; bitcode[32767+nr][0] = nr; } //Negative numbers for (var nrneg =-(nrupper-1); nrneg<=-nrlower; nrneg++) { category[32767+nrneg] = cat; bitcode[32767+nrneg] = []; bitcode[32767+nrneg][1] = cat; bitcode[32767+nrneg][0] = nrupper-1+nrneg; } nrlower <<= 1; nrupper <<= 1; } } function initRGBYUVTable() { for(var i = 0; i < 256;i++) { RGB_YUV_TABLE[i] = 19595 * i; RGB_YUV_TABLE[(i+ 256)>>0] = 38470 * i; RGB_YUV_TABLE[(i+ 512)>>0] = 7471 * i + 0x8000; RGB_YUV_TABLE[(i+ 768)>>0] = -11059 * i; RGB_YUV_TABLE[(i+1024)>>0] = -21709 * i; RGB_YUV_TABLE[(i+1280)>>0] = 32768 * i + 0x807FFF; RGB_YUV_TABLE[(i+1536)>>0] = -27439 * i; RGB_YUV_TABLE[(i+1792)>>0] = - 5329 * i; } } // IO functions function writeBits(bs) { var value = bs[0]; var posval = bs[1]-1; while ( posval >= 0 ) { if (value & (1 << posval) ) { bytenew |= (1 << bytepos); } posval--; bytepos--; if (bytepos < 0) { if (bytenew == 0xFF) { writeByte(0xFF); writeByte(0); } else { writeByte(bytenew); } bytepos=7; bytenew=0; } } } function writeByte(value) { byteout.push(clt[value]); // write char directly instead of converting later } function writeWord(value) { writeByte((value>>8)&0xFF); writeByte((value )&0xFF); } // DCT & quantization core function fDCTQuant(data, fdtbl) { var d0, d1, d2, d3, d4, d5, d6, d7; /* Pass 1: process rows. */ var dataOff=0; var i; var I8 = 8; var I64 = 64; for (i=0; i<I8; ++i) { d0 = data[dataOff]; d1 = data[dataOff+1]; d2 = data[dataOff+2]; d3 = data[dataOff+3]; d4 = data[dataOff+4]; d5 = data[dataOff+5]; d6 = data[dataOff+6]; d7 = data[dataOff+7]; var tmp0 = d0 + d7; var tmp7 = d0 - d7; var tmp1 = d1 + d6; var tmp6 = d1 - d6; var tmp2 = d2 + d5; var tmp5 = d2 - d5; var tmp3 = d3 + d4; var tmp4 = d3 - d4; /* Even part */ var tmp10 = tmp0 + tmp3; /* phase 2 */ var tmp13 = tmp0 - tmp3; var tmp11 = tmp1 + tmp2; var tmp12 = tmp1 - tmp2; data[dataOff] = tmp10 + tmp11; /* phase 3 */ data[dataOff+4] = tmp10 - tmp11; var z1 = (tmp12 + tmp13) * 0.707106781; /* c4 */ data[dataOff+2] = tmp13 + z1; /* phase 5 */ data[dataOff+6] = tmp13 - z1; /* Odd part */ tmp10 = tmp4 + tmp5; /* phase 2 */ tmp11 = tmp5 + tmp6; tmp12 = tmp6 + tmp7; /* The rotator is modified from fig 4-8 to avoid extra negations. */ var z5 = (tmp10 - tmp12) * 0.382683433; /* c6 */ var z2 = 0.541196100 * tmp10 + z5; /* c2-c6 */ var z4 = 1.306562965 * tmp12 + z5; /* c2+c6 */ var z3 = tmp11 * 0.707106781; /* c4 */ var z11 = tmp7 + z3; /* phase 5 */ var z13 = tmp7 - z3; data[dataOff+5] = z13 + z2; /* phase 6 */ data[dataOff+3] = z13 - z2; data[dataOff+1] = z11 + z4; data[dataOff+7] = z11 - z4; dataOff += 8; /* advance pointer to next row */ } /* Pass 2: process columns. */ dataOff = 0; for (i=0; i<I8; ++i) { d0 = data[dataOff]; d1 = data[dataOff + 8]; d2 = data[dataOff + 16]; d3 = data[dataOff + 24]; d4 = data[dataOff + 32]; d5 = data[dataOff + 40]; d6 = data[dataOff + 48]; d7 = data[dataOff + 56]; var tmp0p2 = d0 + d7; var tmp7p2 = d0 - d7; var tmp1p2 = d1 + d6; var tmp6p2 = d1 - d6; var tmp2p2 = d2 + d5; var tmp5p2 = d2 - d5; var tmp3p2 = d3 + d4; var tmp4p2 = d3 - d4; /* Even part */ var tmp10p2 = tmp0p2 + tmp3p2; /* phase 2 */ var tmp13p2 = tmp0p2 - tmp3p2; var tmp11p2 = tmp1p2 + tmp2p2; var tmp12p2 = tmp1p2 - tmp2p2; data[dataOff] = tmp10p2 + tmp11p2; /* phase 3 */ data[dataOff+32] = tmp10p2 - tmp11p2; var z1p2 = (tmp12p2 + tmp13p2) * 0.707106781; /* c4 */ data[dataOff+16] = tmp13p2 + z1p2; /* phase 5 */ data[dataOff+48] = tmp13p2 - z1p2; /* Odd part */ tmp10p2 = tmp4p2 + tmp5p2; /* phase 2 */ tmp11p2 = tmp5p2 + tmp6p2; tmp12p2 = tmp6p2 + tmp7p2; /* The rotator is modified from fig 4-8 to avoid extra negations. */ var z5p2 = (tmp10p2 - tmp12p2) * 0.382683433; /* c6 */ var z2p2 = 0.541196100 * tmp10p2 + z5p2; /* c2-c6 */ var z4p2 = 1.306562965 * tmp12p2 + z5p2; /* c2+c6 */ var z3p2 = tmp11p2 * 0.707106781; /* c4 */ var z11p2 = tmp7p2 + z3p2; /* phase 5 */ var z13p2 = tmp7p2 - z3p2; data[dataOff+40] = z13p2 + z2p2; /* phase 6 */ data[dataOff+24] = z13p2 - z2p2; data[dataOff+ 8] = z11p2 + z4p2; data[dataOff+56] = z11p2 - z4p2; dataOff++; /* advance pointer to next column */ } // Quantize/descale the coefficients var fDCTQuant; for (i=0; i<I64; ++i) { // Apply the quantization and scaling factor & Round to nearest integer fDCTQuant = data[i]*fdtbl[i]; outputfDCTQuant[i] = (fDCTQuant > 0.0) ? ((fDCTQuant + 0.5)|0) : ((fDCTQuant - 0.5)|0); //outputfDCTQuant[i] = fround(fDCTQuant); } return outputfDCTQuant; } function writeAPP0() { writeWord(0xFFE0); // marker writeWord(16); // length writeByte(0x4A); // J writeByte(0x46); // F writeByte(0x49); // I writeByte(0x46); // F writeByte(0); // = "JFIF",'\0' writeByte(1); // versionhi writeByte(1); // versionlo writeByte(0); // xyunits writeWord(1); // xdensity writeWord(1); // ydensity writeByte(0); // thumbnwidth writeByte(0); // thumbnheight } function writeSOF0(width, height) { writeWord(0xFFC0); // marker writeWord(17); // length, truecolor YUV JPG writeByte(8); // precision writeWord(height); writeWord(width); writeByte(3); // nrofcomponents writeByte(1); // IdY writeByte(0x11); // HVY writeByte(0); // QTY writeByte(2); // IdU writeByte(0x11); // HVU writeByte(1); // QTU writeByte(3); // IdV writeByte(0x11); // HVV writeByte(1); // QTV } function writeDQT() { writeWord(0xFFDB); // marker writeWord(132); // length writeByte(0); for (var i=0; i<64; i++) { writeByte(YTable[i]); } writeByte(1); for (var j=0; j<64; j++) { writeByte(UVTable[j]); } } function writeDHT() { writeWord(0xFFC4); // marker writeWord(0x01A2); // length writeByte(0); // HTYDCinfo for (var i=0; i<16; i++) { writeByte(std_dc_luminance_nrcodes[i+1]); } for (var j=0; j<=11; j++) { writeByte(std_dc_luminance_values[j]); } writeByte(0x10); // HTYACinfo for (var k=0; k<16; k++) { writeByte(std_ac_luminance_nrcodes[k+1]); } for (var l=0; l<=161; l++) { writeByte(std_ac_luminance_values[l]); } writeByte(1); // HTUDCinfo for (var m=0; m<16; m++) { writeByte(std_dc_chrominance_nrcodes[m+1]); } for (var n=0; n<=11; n++) { writeByte(std_dc_chrominance_values[n]); } writeByte(0x11); // HTUACinfo for (var o=0; o<16; o++) { writeByte(std_ac_chrominance_nrcodes[o+1]); } for (var p=0; p<=161; p++) { writeByte(std_ac_chrominance_values[p]); } } function writeSOS() { writeWord(0xFFDA); // marker writeWord(12); // length writeByte(3); // nrofcomponents writeByte(1); // IdY writeByte(0); // HTY writeByte(2); // IdU writeByte(0x11); // HTU writeByte(3); // IdV writeByte(0x11); // HTV writeByte(0); // Ss writeByte(0x3f); // Se writeByte(0); // Bf } function processDU(CDU, fdtbl, DC, HTDC, HTAC){ var EOB = HTAC[0x00]; var M16zeroes = HTAC[0xF0]; var pos; var I16 = 16; var I63 = 63; var I64 = 64; var DU_DCT = fDCTQuant(CDU, fdtbl); //ZigZag reorder for (var j=0;j<I64;++j) { DU[ZigZag[j]]=DU_DCT[j]; } var Diff = DU[0] - DC; DC = DU[0]; //Encode DC if (Diff==0) { writeBits(HTDC[0]); // Diff might be 0 } else { pos = 32767+Diff; writeBits(HTDC[category[pos]]); writeBits(bitcode[pos]); } //Encode ACs var end0pos = 63; // was const... which is crazy for (; (end0pos>0)&&(DU[end0pos]==0); end0pos--) {}; //end0pos = first element in reverse order !=0 if ( end0pos == 0) { writeBits(EOB); return DC; } var i = 1; var lng; while ( i <= end0pos ) { var startpos = i; for (; (DU[i]==0) && (i<=end0pos); ++i) {} var nrzeroes = i-startpos; if ( nrzeroes >= I16 ) { lng = nrzeroes>>4; for (var nrmarker=1; nrmarker <= lng; ++nrmarker) writeBits(M16zeroes); nrzeroes = nrzeroes&0xF; } pos = 32767+DU[i]; writeBits(HTAC[(nrzeroes<<4)+category[pos]]); writeBits(bitcode[pos]); i++; } if ( end0pos != I63 ) { writeBits(EOB); } return DC; } function initCharLookupTable(){ var sfcc = String.fromCharCode; for(var i=0; i < 256; i++){ ///// ACHTUNG // 255 clt[i] = sfcc(i); } } this.encode = function(image,quality) // image data object { // var time_start = new Date().getTime(); if(quality) setQuality(quality); // Initialize bit writer byteout = new Array(); bytenew=0; bytepos=7; // Add JPEG headers writeWord(0xFFD8); // SOI writeAPP0(); writeDQT(); writeSOF0(image.width,image.height); writeDHT(); writeSOS(); // Encode 8x8 macroblocks var DCY=0; var DCU=0; var DCV=0; bytenew=0; bytepos=7; this.encode.displayName = "_encode_"; var imageData = image.data; var width = image.width; var height = image.height; var quadWidth = width*4; var tripleWidth = width*3; var x, y = 0; var r, g, b; var start,p, col,row,pos; while(y < height){ x = 0; while(x < quadWidth){ start = quadWidth * y + x; p = start; col = -1; row = 0; for(pos=0; pos < 64; pos++){ row = pos >> 3;// /8 col = ( pos & 7 ) * 4; // %8 p = start + ( row * quadWidth ) + col; if(y+row >= height){ // padding bottom p-= (quadWidth*(y+1+row-height)); } if(x+col >= quadWidth){ // padding right p-= ((x+col) - quadWidth +4) } r = imageData[ p++ ]; g = imageData[ p++ ]; b = imageData[ p++ ]; /* // calculate YUV values dynamically YDU[pos]=((( 0.29900)*r+( 0.58700)*g+( 0.11400)*b))-128; //-0x80 UDU[pos]=(((-0.16874)*r+(-0.33126)*g+( 0.50000)*b)); VDU[pos]=((( 0.50000)*r+(-0.41869)*g+(-0.08131)*b)); */ // use lookup table (slightly faster) YDU[pos] = ((RGB_YUV_TABLE[r] + RGB_YUV_TABLE[(g + 256)>>0] + RGB_YUV_TABLE[(b + 512)>>0]) >> 16)-128; UDU[pos] = ((RGB_YUV_TABLE[(r + 768)>>0] + RGB_YUV_TABLE[(g + 1024)>>0] + RGB_YUV_TABLE[(b + 1280)>>0]) >> 16)-128; VDU[pos] = ((RGB_YUV_TABLE[(r + 1280)>>0] + RGB_YUV_TABLE[(g + 1536)>>0] + RGB_YUV_TABLE[(b + 1792)>>0]) >> 16)-128; } DCY = processDU(YDU, fdtbl_Y, DCY, YDC_HT, YAC_HT); DCU = processDU(UDU, fdtbl_UV, DCU, UVDC_HT, UVAC_HT); DCV = processDU(VDU, fdtbl_UV, DCV, UVDC_HT, UVAC_HT); x+=32; } y+=8; } //////////////////////////////////////////////////////////////// // Do the bit alignment of the EOI marker if ( bytepos >= 0 ) { var fillbits = []; fillbits[1] = bytepos+1; fillbits[0] = (1<<(bytepos+1))-1; writeBits(fillbits); } writeWord(0xFFD9); //EOI var jpegDataUri = 'data:image/jpeg;base64,' + btoa(byteout.join('')); byteout = []; // benchmarking // var duration = new Date().getTime() - time_start; // console.log('Encoding time: '+ currentQuality + 'ms'); // return jpegDataUri } function setQuality(quality){ if (quality <= 0) { quality = 1; } if (quality > 100) { quality = 100; } if(currentQuality == quality) return // don't recalc if unchanged var sf = 0; if (quality < 50) { sf = Math.floor(5000 / quality); } else { sf = Math.floor(200 - quality*2); } initQuantTables(sf); currentQuality = quality; // console.log('Quality set to: '+quality +'%'); } function init(){ // var time_start = new Date().getTime(); if(!quality) quality = 50; // Create tables initCharLookupTable() initHuffmanTbl(); initCategoryNumber(); initRGBYUVTable(); setQuality(quality); // var duration = new Date().getTime() - time_start; // console.log('Initialization '+ duration + 'ms'); } init(); }; JPEGEncoder.encode = function( data, quality ) { var encoder = new JPEGEncoder( quality ); return encoder.encode( data ); } return JPEGEncoder; }); /** * @fileOverview Fix android canvas.toDataUrl bug. */ define('runtime/html5/androidpatch',[ 'runtime/html5/util', 'runtime/html5/jpegencoder', 'base' ], function( Util, encoder, Base ) { var origin = Util.canvasToDataUrl, supportJpeg; Util.canvasToDataUrl = function( canvas, type, quality ) { var ctx, w, h, fragement, parts; // 非android手机直接跳过。 if ( !Base.os.android ) { return origin.apply( null, arguments ); } // 检测是否canvas支持jpeg导出,根据数据格式来判断。 // JPEG 前两位分别是:255, 216 if ( type === 'image/jpeg' && typeof supportJpeg === 'undefined' ) { fragement = origin.apply( null, arguments ); parts = fragement.split(','); if ( ~parts[ 0 ].indexOf('base64') ) { fragement = atob( parts[ 1 ] ); } else { fragement = decodeURIComponent( parts[ 1 ] ); } fragement = fragement.substring( 0, 2 ); supportJpeg = fragement.charCodeAt( 0 ) === 255 && fragement.charCodeAt( 1 ) === 216; } // 只有在android环境下才修复 if ( type === 'image/jpeg' && !supportJpeg ) { w = canvas.width; h = canvas.height; ctx = canvas.getContext('2d'); return encoder.encode( ctx.getImageData( 0, 0, w, h ), quality ); } return origin.apply( null, arguments ); }; }); /** * @fileOverview Transport * @todo 支持chunked传输,优势: * 可以将大文件分成小块,挨个传输,可以提高大文件成功率,当失败的时候,也只需要重传那小部分, * 而不需要重头再传一次。另外断点续传也需要用chunked方式。 */ define('runtime/html5/transport',[ 'base', 'runtime/html5/runtime' ], function( Base, Html5Runtime ) { var noop = Base.noop, $ = Base.$; return Html5Runtime.register( 'Transport', { init: function() { this._status = 0; this._response = null; }, send: function() { var owner = this.owner, opts = this.options, xhr = this._initAjax(), blob = owner._blob, server = opts.server, formData, binary, fr; if ( opts.sendAsBinary ) { server += (/\?/.test( server ) ? '&' : '?') + $.param( owner._formData ); binary = blob.getSource(); } else { formData = new FormData(); $.each( owner._formData, function( k, v ) { formData.append( k, v ); }); formData.append( opts.fileVal, blob.getSource(), opts.filename || owner._formData.name || '' ); } if ( opts.withCredentials && 'withCredentials' in xhr ) { xhr.open( opts.method, server, true ); xhr.withCredentials = true; } else { xhr.open( opts.method, server ); } this._setRequestHeader( xhr, opts.headers ); if ( binary ) { // 强制设置成 content-type 为文件流。 xhr.overrideMimeType && xhr.overrideMimeType('application/octet-stream'); // android直接发送blob会导致服务端接收到的是空文件。 // bug详情。 // https://code.google.com/p/android/issues/detail?id=39882 // 所以先用fileReader读取出来再通过arraybuffer的方式发送。 if ( Base.os.android ) { fr = new FileReader(); fr.onload = function() { xhr.send( this.result ); fr = fr.onload = null; }; fr.readAsArrayBuffer( binary ); } else { xhr.send( binary ); } } else { xhr.send( formData ); } }, getResponse: function() { return this._response; }, getResponseAsJson: function() { return this._parseJson( this._response ); }, getStatus: function() { return this._status; }, abort: function() { var xhr = this._xhr; if ( xhr ) { xhr.upload.onprogress = noop; xhr.onreadystatechange = noop; xhr.abort(); this._xhr = xhr = null; } }, destroy: function() { this.abort(); }, _initAjax: function() { var me = this, xhr = new XMLHttpRequest(), opts = this.options; if ( opts.withCredentials && !('withCredentials' in xhr) && typeof XDomainRequest !== 'undefined' ) { xhr = new XDomainRequest(); } xhr.upload.onprogress = function( e ) { var percentage = 0; if ( e.lengthComputable ) { percentage = e.loaded / e.total; } return me.trigger( 'progress', percentage ); }; xhr.onreadystatechange = function() { if ( xhr.readyState !== 4 ) { return; } xhr.upload.onprogress = noop; xhr.onreadystatechange = noop; me._xhr = null; me._status = xhr.status; if ( xhr.status >= 200 && xhr.status < 300 ) { me._response = xhr.responseText; return me.trigger('load'); } else if ( xhr.status >= 500 && xhr.status < 600 ) { me._response = xhr.responseText; return me.trigger( 'error', 'server' ); } return me.trigger( 'error', me._status ? 'http' : 'abort' ); }; me._xhr = xhr; return xhr; }, _setRequestHeader: function( xhr, headers ) { $.each( headers, function( key, val ) { xhr.setRequestHeader( key, val ); }); }, _parseJson: function( str ) { var json; try { json = JSON.parse( str ); } catch ( ex ) { json = {}; } return json; } }); }); define('webuploader',[ 'base', 'widgets/filepicker', 'widgets/image', 'widgets/queue', 'widgets/runtime', 'widgets/upload', 'widgets/log', 'runtime/html5/blob', 'runtime/html5/filepicker', 'runtime/html5/imagemeta/exif', 'runtime/html5/image', 'runtime/html5/androidpatch', 'runtime/html5/transport' ], function( Base ) { return Base; }); return require('webuploader'); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/webuploader/webuploader.fis.js ================================================ /*! WebUploader 0.1.5 */ var jQuery = require('example:widget/ui/jquery/jquery.js') return (function( root, factory ) { var modules = {}, // 内部require, 简单不完全实现。 // https://github.com/amdjs/amdjs-api/wiki/require _require = function( deps, callback ) { var args, len, i; // 如果deps不是数组,则直接返回指定module if ( typeof deps === 'string' ) { return getModule( deps ); } else { args = []; for( len = deps.length, i = 0; i < len; i++ ) { args.push( getModule( deps[ i ] ) ); } return callback.apply( null, args ); } }, // 内部define,暂时不支持不指定id. _define = function( id, deps, factory ) { if ( arguments.length === 2 ) { factory = deps; deps = null; } _require( deps || [], function() { setModule( id, factory, arguments ); }); }, // 设置module, 兼容CommonJs写法。 setModule = function( id, factory, args ) { var module = { exports: factory }, returned; if ( typeof factory === 'function' ) { args.length || (args = [ _require, module.exports, module ]); returned = factory.apply( null, args ); returned !== undefined && (module.exports = returned); } modules[ id ] = module.exports; }, // 根据id获取module getModule = function( id ) { var module = modules[ id ] || root[ id ]; if ( !module ) { throw new Error( '`' + id + '` is undefined' ); } return module; }, // 将所有modules,将路径ids装换成对象。 exportsTo = function( obj ) { var key, host, parts, part, last, ucFirst; // make the first character upper case. ucFirst = function( str ) { return str && (str.charAt( 0 ).toUpperCase() + str.substr( 1 )); }; for ( key in modules ) { host = obj; if ( !modules.hasOwnProperty( key ) ) { continue; } parts = key.split('/'); last = ucFirst( parts.pop() ); while( (part = ucFirst( parts.shift() )) ) { host[ part ] = host[ part ] || {}; host = host[ part ]; } host[ last ] = modules[ key ]; } return obj; }, makeExport = function( dollar ) { root.__dollar = dollar; // exports every module. return exportsTo( factory( root, _define, _require ) ); }; return makeExport( jQuery ); })( window, function( window, define, require ) { /** * @fileOverview jQuery or Zepto */ define('dollar-third',[],function() { var $ = window.__dollar || window.jQuery || window.Zepto; if ( !$ ) { throw new Error('jQuery or Zepto not found!'); } return $; }); /** * @fileOverview Dom 操作相关 */ define('dollar',[ 'dollar-third' ], function( _ ) { return _; }); /** * @fileOverview 使用jQuery的Promise */ define('promise-third',[ 'dollar' ], function( $ ) { return { Deferred: $.Deferred, when: $.when, isPromise: function( anything ) { return anything && typeof anything.then === 'function'; } }; }); /** * @fileOverview Promise/A+ */ define('promise',[ 'promise-third' ], function( _ ) { return _; }); /** * @fileOverview 基础类方法。 */ /** * Web Uploader内部类的详细说明,以下提及的功能类,都可以在`WebUploader`这个变量中访问到。 * * As you know, Web Uploader的每个文件都是用过[AMD](https://github.com/amdjs/amdjs-api/wiki/AMD)规范中的`define`组织起来的, 每个Module都会有个module id. * 默认module id为该文件的路径,而此路径将会转化成名字空间存放在WebUploader中。如: * * * module `base`:WebUploader.Base * * module `file`: WebUploader.File * * module `lib/dnd`: WebUploader.Lib.Dnd * * module `runtime/html5/dnd`: WebUploader.Runtime.Html5.Dnd * * * 以下文档中对类的使用可能省略掉了`WebUploader`前缀。 * @module WebUploader * @title WebUploader API文档 */ define('base',[ 'dollar', 'promise' ], function( $, promise ) { var noop = function() {}, call = Function.call; // http://jsperf.com/uncurrythis // 反科里化 function uncurryThis( fn ) { return function() { return call.apply( fn, arguments ); }; } function bindFn( fn, context ) { return function() { return fn.apply( context, arguments ); }; } function createObject( proto ) { var f; if ( Object.create ) { return Object.create( proto ); } else { f = function() {}; f.prototype = proto; return new f(); } } /** * 基础类,提供一些简单常用的方法。 * @class Base */ return { /** * @property {String} version 当前版本号。 */ version: '0.1.5', /** * @property {jQuery|Zepto} $ 引用依赖的jQuery或者Zepto对象。 */ $: $, Deferred: promise.Deferred, isPromise: promise.isPromise, when: promise.when, /** * @description 简单的浏览器检查结果。 * * * `webkit` webkit版本号,如果浏览器为非webkit内核,此属性为`undefined`。 * * `chrome` chrome浏览器版本号,如果浏览器为chrome,此属性为`undefined`。 * * `ie` ie浏览器版本号,如果浏览器为非ie,此属性为`undefined`。**暂不支持ie10+** * * `firefox` firefox浏览器版本号,如果浏览器为非firefox,此属性为`undefined`。 * * `safari` safari浏览器版本号,如果浏览器为非safari,此属性为`undefined`。 * * `opera` opera浏览器版本号,如果浏览器为非opera,此属性为`undefined`。 * * @property {Object} [browser] */ browser: (function( ua ) { var ret = {}, webkit = ua.match( /WebKit\/([\d.]+)/ ), chrome = ua.match( /Chrome\/([\d.]+)/ ) || ua.match( /CriOS\/([\d.]+)/ ), ie = ua.match( /MSIE\s([\d\.]+)/ ) || ua.match( /(?:trident)(?:.*rv:([\w.]+))?/i ), firefox = ua.match( /Firefox\/([\d.]+)/ ), safari = ua.match( /Safari\/([\d.]+)/ ), opera = ua.match( /OPR\/([\d.]+)/ ); webkit && (ret.webkit = parseFloat( webkit[ 1 ] )); chrome && (ret.chrome = parseFloat( chrome[ 1 ] )); ie && (ret.ie = parseFloat( ie[ 1 ] )); firefox && (ret.firefox = parseFloat( firefox[ 1 ] )); safari && (ret.safari = parseFloat( safari[ 1 ] )); opera && (ret.opera = parseFloat( opera[ 1 ] )); return ret; })( navigator.userAgent ), /** * @description 操作系统检查结果。 * * * `android` 如果在android浏览器环境下,此值为对应的android版本号,否则为`undefined`。 * * `ios` 如果在ios浏览器环境下,此值为对应的ios版本号,否则为`undefined`。 * @property {Object} [os] */ os: (function( ua ) { var ret = {}, // osx = !!ua.match( /\(Macintosh\; Intel / ), android = ua.match( /(?:Android);?[\s\/]+([\d.]+)?/ ), ios = ua.match( /(?:iPad|iPod|iPhone).*OS\s([\d_]+)/ ); // osx && (ret.osx = true); android && (ret.android = parseFloat( android[ 1 ] )); ios && (ret.ios = parseFloat( ios[ 1 ].replace( /_/g, '.' ) )); return ret; })( navigator.userAgent ), /** * 实现类与类之间的继承。 * @method inherits * @grammar Base.inherits( super ) => child * @grammar Base.inherits( super, protos ) => child * @grammar Base.inherits( super, protos, statics ) => child * @param {Class} super 父类 * @param {Object | Function} [protos] 子类或者对象。如果对象中包含constructor,子类将是用此属性值。 * @param {Function} [protos.constructor] 子类构造器,不指定的话将创建个临时的直接执行父类构造器的方法。 * @param {Object} [statics] 静态属性或方法。 * @return {Class} 返回子类。 * @example * function Person() { * console.log( 'Super' ); * } * Person.prototype.hello = function() { * console.log( 'hello' ); * }; * * var Manager = Base.inherits( Person, { * world: function() { * console.log( 'World' ); * } * }); * * // 因为没有指定构造器,父类的构造器将会执行。 * var instance = new Manager(); // => Super * * // 继承子父类的方法 * instance.hello(); // => hello * instance.world(); // => World * * // 子类的__super__属性指向父类 * console.log( Manager.__super__ === Person ); // => true */ inherits: function( Super, protos, staticProtos ) { var child; if ( typeof protos === 'function' ) { child = protos; protos = null; } else if ( protos && protos.hasOwnProperty('constructor') ) { child = protos.constructor; } else { child = function() { return Super.apply( this, arguments ); }; } // 复制静态方法 $.extend( true, child, Super, staticProtos || {} ); /* jshint camelcase: false */ // 让子类的__super__属性指向父类。 child.__super__ = Super.prototype; // 构建原型,添加原型方法或属性。 // 暂时用Object.create实现。 child.prototype = createObject( Super.prototype ); protos && $.extend( true, child.prototype, protos ); return child; }, /** * 一个不做任何事情的方法。可以用来赋值给默认的callback. * @method noop */ noop: noop, /** * 返回一个新的方法,此方法将已指定的`context`来执行。 * @grammar Base.bindFn( fn, context ) => Function * @method bindFn * @example * var doSomething = function() { * console.log( this.name ); * }, * obj = { * name: 'Object Name' * }, * aliasFn = Base.bind( doSomething, obj ); * * aliasFn(); // => Object Name * */ bindFn: bindFn, /** * 引用Console.log如果存在的话,否则引用一个[空函数noop](#WebUploader:Base.noop)。 * @grammar Base.log( args... ) => undefined * @method log */ log: (function() { if ( window.console ) { return bindFn( console.log, console ); } return noop; })(), nextTick: (function() { return function( cb ) { setTimeout( cb, 1 ); }; // @bug 当浏览器不在当前窗口时就停了。 // var next = window.requestAnimationFrame || // window.webkitRequestAnimationFrame || // window.mozRequestAnimationFrame || // function( cb ) { // window.setTimeout( cb, 1000 / 60 ); // }; // // fix: Uncaught TypeError: Illegal invocation // return bindFn( next, window ); })(), /** * 被[uncurrythis](http://www.2ality.com/2011/11/uncurrying-this.html)的数组slice方法。 * 将用来将非数组对象转化成数组对象。 * @grammar Base.slice( target, start[, end] ) => Array * @method slice * @example * function doSomthing() { * var args = Base.slice( arguments, 1 ); * console.log( args ); * } * * doSomthing( 'ignored', 'arg2', 'arg3' ); // => Array ["arg2", "arg3"] */ slice: uncurryThis( [].slice ), /** * 生成唯一的ID * @method guid * @grammar Base.guid() => String * @grammar Base.guid( prefx ) => String */ guid: (function() { var counter = 0; return function( prefix ) { var guid = (+new Date()).toString( 32 ), i = 0; for ( ; i < 5; i++ ) { guid += Math.floor( Math.random() * 65535 ).toString( 32 ); } return (prefix || 'wu_') + guid + (counter++).toString( 32 ); }; })(), /** * 格式化文件大小, 输出成带单位的字符串 * @method formatSize * @grammar Base.formatSize( size ) => String * @grammar Base.formatSize( size, pointLength ) => String * @grammar Base.formatSize( size, pointLength, units ) => String * @param {Number} size 文件大小 * @param {Number} [pointLength=2] 精确到的小数点数。 * @param {Array} [units=[ 'B', 'K', 'M', 'G', 'TB' ]] 单位数组。从字节,到千字节,一直往上指定。如果单位数组里面只指定了到了K(千字节),同时文件大小大于M, 此方法的输出将还是显示成多少K. * @example * console.log( Base.formatSize( 100 ) ); // => 100B * console.log( Base.formatSize( 1024 ) ); // => 1.00K * console.log( Base.formatSize( 1024, 0 ) ); // => 1K * console.log( Base.formatSize( 1024 * 1024 ) ); // => 1.00M * console.log( Base.formatSize( 1024 * 1024 * 1024 ) ); // => 1.00G * console.log( Base.formatSize( 1024 * 1024 * 1024, 0, ['B', 'KB', 'MB'] ) ); // => 1024MB */ formatSize: function( size, pointLength, units ) { var unit; units = units || [ 'B', 'K', 'M', 'G', 'TB' ]; while ( (unit = units.shift()) && size > 1024 ) { size = size / 1024; } return (unit === 'B' ? size : size.toFixed( pointLength || 2 )) + unit; } }; }); /** * 事件处理类,可以独立使用,也可以扩展给对象使用。 * @fileOverview Mediator */ define('mediator',[ 'base' ], function( Base ) { var $ = Base.$, slice = [].slice, separator = /\s+/, protos; // 根据条件过滤出事件handlers. function findHandlers( arr, name, callback, context ) { return $.grep( arr, function( handler ) { return handler && (!name || handler.e === name) && (!callback || handler.cb === callback || handler.cb._cb === callback) && (!context || handler.ctx === context); }); } function eachEvent( events, callback, iterator ) { // 不支持对象,只支持多个event用空格隔开 $.each( (events || '').split( separator ), function( _, key ) { iterator( key, callback ); }); } function triggerHanders( events, args ) { var stoped = false, i = -1, len = events.length, handler; while ( ++i < len ) { handler = events[ i ]; if ( handler.cb.apply( handler.ctx2, args ) === false ) { stoped = true; break; } } return !stoped; } protos = { /** * 绑定事件。 * * `callback`方法在执行时,arguments将会来源于trigger的时候携带的参数。如 * ```javascript * var obj = {}; * * // 使得obj有事件行为 * Mediator.installTo( obj ); * * obj.on( 'testa', function( arg1, arg2 ) { * console.log( arg1, arg2 ); // => 'arg1', 'arg2' * }); * * obj.trigger( 'testa', 'arg1', 'arg2' ); * ``` * * 如果`callback`中,某一个方法`return false`了,则后续的其他`callback`都不会被执行到。 * 切会影响到`trigger`方法的返回值,为`false`。 * * `on`还可以用来添加一个特殊事件`all`, 这样所有的事件触发都会响应到。同时此类`callback`中的arguments有一个不同处, * 就是第一个参数为`type`,记录当前是什么事件在触发。此类`callback`的优先级比脚低,会再正常`callback`执行完后触发。 * ```javascript * obj.on( 'all', function( type, arg1, arg2 ) { * console.log( type, arg1, arg2 ); // => 'testa', 'arg1', 'arg2' * }); * ``` * * @method on * @grammar on( name, callback[, context] ) => self * @param {String} name 事件名,支持多个事件用空格隔开 * @param {Function} callback 事件处理器 * @param {Object} [context] 事件处理器的上下文。 * @return {self} 返回自身,方便链式 * @chainable * @class Mediator */ on: function( name, callback, context ) { var me = this, set; if ( !callback ) { return this; } set = this._events || (this._events = []); eachEvent( name, callback, function( name, callback ) { var handler = { e: name }; handler.cb = callback; handler.ctx = context; handler.ctx2 = context || me; handler.id = set.length; set.push( handler ); }); return this; }, /** * 绑定事件,且当handler执行完后,自动解除绑定。 * @method once * @grammar once( name, callback[, context] ) => self * @param {String} name 事件名 * @param {Function} callback 事件处理器 * @param {Object} [context] 事件处理器的上下文。 * @return {self} 返回自身,方便链式 * @chainable */ once: function( name, callback, context ) { var me = this; if ( !callback ) { return me; } eachEvent( name, callback, function( name, callback ) { var once = function() { me.off( name, once ); return callback.apply( context || me, arguments ); }; once._cb = callback; me.on( name, once, context ); }); return me; }, /** * 解除事件绑定 * @method off * @grammar off( [name[, callback[, context] ] ] ) => self * @param {String} [name] 事件名 * @param {Function} [callback] 事件处理器 * @param {Object} [context] 事件处理器的上下文。 * @return {self} 返回自身,方便链式 * @chainable */ off: function( name, cb, ctx ) { var events = this._events; if ( !events ) { return this; } if ( !name && !cb && !ctx ) { this._events = []; return this; } eachEvent( name, cb, function( name, cb ) { $.each( findHandlers( events, name, cb, ctx ), function() { delete events[ this.id ]; }); }); return this; }, /** * 触发事件 * @method trigger * @grammar trigger( name[, args...] ) => self * @param {String} type 事件名 * @param {*} [...] 任意参数 * @return {Boolean} 如果handler中return false了,则返回false, 否则返回true */ trigger: function( type ) { var args, events, allEvents; if ( !this._events || !type ) { return this; } args = slice.call( arguments, 1 ); events = findHandlers( this._events, type ); allEvents = findHandlers( this._events, 'all' ); return triggerHanders( events, args ) && triggerHanders( allEvents, arguments ); } }; /** * 中介者,它本身是个单例,但可以通过[installTo](#WebUploader:Mediator:installTo)方法,使任何对象具备事件行为。 * 主要目的是负责模块与模块之间的合作,降低耦合度。 * * @class Mediator */ return $.extend({ /** * 可以通过这个接口,使任何对象具备事件功能。 * @method installTo * @param {Object} obj 需要具备事件行为的对象。 * @return {Object} 返回obj. */ installTo: function( obj ) { return $.extend( obj, protos ); } }, protos ); }); /** * @fileOverview Uploader上传类 */ define('uploader',[ 'base', 'mediator' ], function( Base, Mediator ) { var $ = Base.$; /** * 上传入口类。 * @class Uploader * @constructor * @grammar new Uploader( opts ) => Uploader * @example * var uploader = WebUploader.Uploader({ * swf: 'path_of_swf/Uploader.swf', * * // 开起分片上传。 * chunked: true * }); */ function Uploader( opts ) { this.options = $.extend( true, {}, Uploader.options, opts ); this._init( this.options ); } // default Options // widgets中有相应扩展 Uploader.options = {}; Mediator.installTo( Uploader.prototype ); // 批量添加纯命令式方法。 $.each({ upload: 'start-upload', stop: 'stop-upload', getFile: 'get-file', getFiles: 'get-files', addFile: 'add-file', addFiles: 'add-file', sort: 'sort-files', removeFile: 'remove-file', cancelFile: 'cancel-file', skipFile: 'skip-file', retry: 'retry', isInProgress: 'is-in-progress', makeThumb: 'make-thumb', md5File: 'md5-file', getDimension: 'get-dimension', addButton: 'add-btn', predictRuntimeType: 'predict-runtime-type', refresh: 'refresh', disable: 'disable', enable: 'enable', reset: 'reset' }, function( fn, command ) { Uploader.prototype[ fn ] = function() { return this.request( command, arguments ); }; }); $.extend( Uploader.prototype, { state: 'pending', _init: function( opts ) { var me = this; me.request( 'init', opts, function() { me.state = 'ready'; me.trigger('ready'); }); }, /** * 获取或者设置Uploader配置项。 * @method option * @grammar option( key ) => * * @grammar option( key, val ) => self * @example * * // 初始状态图片上传前不会压缩 * var uploader = new WebUploader.Uploader({ * compress: null; * }); * * // 修改后图片上传前,尝试将图片压缩到1600 * 1600 * uploader.option( 'compress', { * width: 1600, * height: 1600 * }); */ option: function( key, val ) { var opts = this.options; // setter if ( arguments.length > 1 ) { if ( $.isPlainObject( val ) && $.isPlainObject( opts[ key ] ) ) { $.extend( opts[ key ], val ); } else { opts[ key ] = val; } } else { // getter return key ? opts[ key ] : opts; } }, /** * 获取文件统计信息。返回一个包含一下信息的对象。 * * `successNum` 上传成功的文件数 * * `progressNum` 上传中的文件数 * * `cancelNum` 被删除的文件数 * * `invalidNum` 无效的文件数 * * `uploadFailNum` 上传失败的文件数 * * `queueNum` 还在队列中的文件数 * * `interruptNum` 被暂停的文件数 * @method getStats * @grammar getStats() => Object */ getStats: function() { // return this._mgr.getStats.apply( this._mgr, arguments ); var stats = this.request('get-stats'); return stats ? { successNum: stats.numOfSuccess, progressNum: stats.numOfProgress, // who care? // queueFailNum: 0, cancelNum: stats.numOfCancel, invalidNum: stats.numOfInvalid, uploadFailNum: stats.numOfUploadFailed, queueNum: stats.numOfQueue, interruptNum: stats.numofInterrupt } : {}; }, // 需要重写此方法来来支持opts.onEvent和instance.onEvent的处理器 trigger: function( type/*, args...*/ ) { var args = [].slice.call( arguments, 1 ), opts = this.options, name = 'on' + type.substring( 0, 1 ).toUpperCase() + type.substring( 1 ); if ( // 调用通过on方法注册的handler. Mediator.trigger.apply( this, arguments ) === false || // 调用opts.onEvent $.isFunction( opts[ name ] ) && opts[ name ].apply( this, args ) === false || // 调用this.onEvent $.isFunction( this[ name ] ) && this[ name ].apply( this, args ) === false || // 广播所有uploader的事件。 Mediator.trigger.apply( Mediator, [ this, type ].concat( args ) ) === false ) { return false; } return true; }, /** * 销毁 webuploader 实例 * @method destroy * @grammar destroy() => undefined */ destroy: function() { this.request( 'destroy', arguments ); this.off(); }, // widgets/widget.js将补充此方法的详细文档。 request: Base.noop }); /** * 创建Uploader实例,等同于new Uploader( opts ); * @method create * @class Base * @static * @grammar Base.create( opts ) => Uploader */ Base.create = Uploader.create = function( opts ) { return new Uploader( opts ); }; // 暴露Uploader,可以通过它来扩展业务逻辑。 Base.Uploader = Uploader; return Uploader; }); /** * @fileOverview Runtime管理器,负责Runtime的选择, 连接 */ define('runtime/runtime',[ 'base', 'mediator' ], function( Base, Mediator ) { var $ = Base.$, factories = {}, // 获取对象的第一个key getFirstKey = function( obj ) { for ( var key in obj ) { if ( obj.hasOwnProperty( key ) ) { return key; } } return null; }; // 接口类。 function Runtime( options ) { this.options = $.extend({ container: document.body }, options ); this.uid = Base.guid('rt_'); } $.extend( Runtime.prototype, { getContainer: function() { var opts = this.options, parent, container; if ( this._container ) { return this._container; } parent = $( opts.container || document.body ); container = $( document.createElement('div') ); container.attr( 'id', 'rt_' + this.uid ); container.css({ position: 'absolute', top: '0px', left: '0px', width: '1px', height: '1px', overflow: 'hidden' }); parent.append( container ); parent.addClass('webuploader-container'); this._container = container; this._parent = parent; return container; }, init: Base.noop, exec: Base.noop, destroy: function() { this._container && this._container.remove(); this._parent && this._parent.removeClass('webuploader-container'); this.off(); } }); Runtime.orders = 'html5,flash'; /** * 添加Runtime实现。 * @param {String} type 类型 * @param {Runtime} factory 具体Runtime实现。 */ Runtime.addRuntime = function( type, factory ) { factories[ type ] = factory; }; Runtime.hasRuntime = function( type ) { return !!(type ? factories[ type ] : getFirstKey( factories )); }; Runtime.create = function( opts, orders ) { var type, runtime; orders = orders || Runtime.orders; $.each( orders.split( /\s*,\s*/g ), function() { if ( factories[ this ] ) { type = this; return false; } }); type = type || getFirstKey( factories ); if ( !type ) { throw new Error('Runtime Error'); } runtime = new factories[ type ]( opts ); return runtime; }; Mediator.installTo( Runtime.prototype ); return Runtime; }); /** * @fileOverview Runtime管理器,负责Runtime的选择, 连接 */ define('runtime/client',[ 'base', 'mediator', 'runtime/runtime' ], function( Base, Mediator, Runtime ) { var cache; cache = (function() { var obj = {}; return { add: function( runtime ) { obj[ runtime.uid ] = runtime; }, get: function( ruid, standalone ) { var i; if ( ruid ) { return obj[ ruid ]; } for ( i in obj ) { // 有些类型不能重用,比如filepicker. if ( standalone && obj[ i ].__standalone ) { continue; } return obj[ i ]; } return null; }, remove: function( runtime ) { delete obj[ runtime.uid ]; } }; })(); function RuntimeClient( component, standalone ) { var deferred = Base.Deferred(), runtime; this.uid = Base.guid('client_'); // 允许runtime没有初始化之前,注册一些方法在初始化后执行。 this.runtimeReady = function( cb ) { return deferred.done( cb ); }; this.connectRuntime = function( opts, cb ) { // already connected. if ( runtime ) { throw new Error('already connected!'); } deferred.done( cb ); if ( typeof opts === 'string' && cache.get( opts ) ) { runtime = cache.get( opts ); } // 像filePicker只能独立存在,不能公用。 runtime = runtime || cache.get( null, standalone ); // 需要创建 if ( !runtime ) { runtime = Runtime.create( opts, opts.runtimeOrder ); runtime.__promise = deferred.promise(); runtime.once( 'ready', deferred.resolve ); runtime.init(); cache.add( runtime ); runtime.__client = 1; } else { // 来自cache Base.$.extend( runtime.options, opts ); runtime.__promise.then( deferred.resolve ); runtime.__client++; } standalone && (runtime.__standalone = standalone); return runtime; }; this.getRuntime = function() { return runtime; }; this.disconnectRuntime = function() { if ( !runtime ) { return; } runtime.__client--; if ( runtime.__client <= 0 ) { cache.remove( runtime ); delete runtime.__promise; runtime.destroy(); } runtime = null; }; this.exec = function() { if ( !runtime ) { return; } var args = Base.slice( arguments ); component && args.unshift( component ); return runtime.exec.apply( this, args ); }; this.getRuid = function() { return runtime && runtime.uid; }; this.destroy = (function( destroy ) { return function() { destroy && destroy.apply( this, arguments ); this.trigger('destroy'); this.off(); this.exec('destroy'); this.disconnectRuntime(); }; })( this.destroy ); } Mediator.installTo( RuntimeClient.prototype ); return RuntimeClient; }); /** * @fileOverview 错误信息 */ define('lib/dnd',[ 'base', 'mediator', 'runtime/client' ], function( Base, Mediator, RuntimeClent ) { var $ = Base.$; function DragAndDrop( opts ) { opts = this.options = $.extend({}, DragAndDrop.options, opts ); opts.container = $( opts.container ); if ( !opts.container.length ) { return; } RuntimeClent.call( this, 'DragAndDrop' ); } DragAndDrop.options = { accept: null, disableGlobalDnd: false }; Base.inherits( RuntimeClent, { constructor: DragAndDrop, init: function() { var me = this; me.connectRuntime( me.options, function() { me.exec('init'); me.trigger('ready'); }); } }); Mediator.installTo( DragAndDrop.prototype ); return DragAndDrop; }); /** * @fileOverview 组件基类。 */ define('widgets/widget',[ 'base', 'uploader' ], function( Base, Uploader ) { var $ = Base.$, _init = Uploader.prototype._init, _destroy = Uploader.prototype.destroy, IGNORE = {}, widgetClass = []; function isArrayLike( obj ) { if ( !obj ) { return false; } var length = obj.length, type = $.type( obj ); if ( obj.nodeType === 1 && length ) { return true; } return type === 'array' || type !== 'function' && type !== 'string' && (length === 0 || typeof length === 'number' && length > 0 && (length - 1) in obj); } function Widget( uploader ) { this.owner = uploader; this.options = uploader.options; } $.extend( Widget.prototype, { init: Base.noop, // 类Backbone的事件监听声明,监听uploader实例上的事件 // widget直接无法监听事件,事件只能通过uploader来传递 invoke: function( apiName, args ) { /* { 'make-thumb': 'makeThumb' } */ var map = this.responseMap; // 如果无API响应声明则忽略 if ( !map || !(apiName in map) || !(map[ apiName ] in this) || !$.isFunction( this[ map[ apiName ] ] ) ) { return IGNORE; } return this[ map[ apiName ] ].apply( this, args ); }, /** * 发送命令。当传入`callback`或者`handler`中返回`promise`时。返回一个当所有`handler`中的promise都完成后完成的新`promise`。 * @method request * @grammar request( command, args ) => * | Promise * @grammar request( command, args, callback ) => Promise * @for Uploader */ request: function() { return this.owner.request.apply( this.owner, arguments ); } }); // 扩展Uploader. $.extend( Uploader.prototype, { /** * @property {String | Array} [disableWidgets=undefined] * @namespace options * @for Uploader * @description 默认所有 Uploader.register 了的 widget 都会被加载,如果禁用某一部分,请通过此 option 指定黑名单。 */ // 覆写_init用来初始化widgets _init: function() { var me = this, widgets = me._widgets = [], deactives = me.options.disableWidgets || ''; $.each( widgetClass, function( _, klass ) { (!deactives || !~deactives.indexOf( klass._name )) && widgets.push( new klass( me ) ); }); return _init.apply( me, arguments ); }, request: function( apiName, args, callback ) { var i = 0, widgets = this._widgets, len = widgets && widgets.length, rlts = [], dfds = [], widget, rlt, promise, key; args = isArrayLike( args ) ? args : [ args ]; for ( ; i < len; i++ ) { widget = widgets[ i ]; rlt = widget.invoke( apiName, args ); if ( rlt !== IGNORE ) { // Deferred对象 if ( Base.isPromise( rlt ) ) { dfds.push( rlt ); } else { rlts.push( rlt ); } } } // 如果有callback,则用异步方式。 if ( callback || dfds.length ) { promise = Base.when.apply( Base, dfds ); key = promise.pipe ? 'pipe' : 'then'; // 很重要不能删除。删除了会死循环。 // 保证执行顺序。让callback总是在下一个 tick 中执行。 return promise[ key ](function() { var deferred = Base.Deferred(), args = arguments; if ( args.length === 1 ) { args = args[ 0 ]; } setTimeout(function() { deferred.resolve( args ); }, 1 ); return deferred.promise(); })[ callback ? key : 'done' ]( callback || Base.noop ); } else { return rlts[ 0 ]; } }, destroy: function() { _destroy.apply( this, arguments ); this._widgets = null; } }); /** * 添加组件 * @grammar Uploader.register(proto); * @grammar Uploader.register(map, proto); * @param {object} responseMap API 名称与函数实现的映射 * @param {object} proto 组件原型,构造函数通过 constructor 属性定义 * @method Uploader.register * @for Uploader * @example * Uploader.register({ * 'make-thumb': 'makeThumb' * }, { * init: function( options ) {}, * makeThumb: function() {} * }); * * Uploader.register({ * 'make-thumb': function() { * * } * }); */ Uploader.register = Widget.register = function( responseMap, widgetProto ) { var map = { init: 'init', destroy: 'destroy', name: 'anonymous' }, klass; if ( arguments.length === 1 ) { widgetProto = responseMap; // 自动生成 map 表。 $.each(widgetProto, function(key) { if ( key[0] === '_' || key === 'name' ) { key === 'name' && (map.name = widgetProto.name); return; } map[key.replace(/[A-Z]/g, '-$&').toLowerCase()] = key; }); } else { map = $.extend( map, responseMap ); } widgetProto.responseMap = map; klass = Base.inherits( Widget, widgetProto ); klass._name = map.name; widgetClass.push( klass ); return klass; }; /** * 删除插件,只有在注册时指定了名字的才能被删除。 * @grammar Uploader.unRegister(name); * @param {string} name 组件名字 * @method Uploader.unRegister * @for Uploader * @example * * Uploader.register({ * name: 'custom', * * 'make-thumb': function() { * * } * }); * * Uploader.unRegister('custom'); */ Uploader.unRegister = Widget.unRegister = function( name ) { if ( !name || name === 'anonymous' ) { return; } // 删除指定的插件。 for ( var i = widgetClass.length; i--; ) { if ( widgetClass[i]._name === name ) { widgetClass.splice(i, 1) } } }; return Widget; }); /** * @fileOverview DragAndDrop Widget。 */ define('widgets/filednd',[ 'base', 'uploader', 'lib/dnd', 'widgets/widget' ], function( Base, Uploader, Dnd ) { var $ = Base.$; Uploader.options.dnd = ''; /** * @property {Selector} [dnd=undefined] 指定Drag And Drop拖拽的容器,如果不指定,则不启动。 * @namespace options * @for Uploader */ /** * @property {Selector} [disableGlobalDnd=false] 是否禁掉整个页面的拖拽功能,如果不禁用,图片拖进来的时候会默认被浏览器打开。 * @namespace options * @for Uploader */ /** * @event dndAccept * @param {DataTransferItemList} items DataTransferItem * @description 阻止此事件可以拒绝某些类型的文件拖入进来。目前只有 chrome 提供这样的 API,且只能通过 mime-type 验证。 * @for Uploader */ return Uploader.register({ name: 'dnd', init: function( opts ) { if ( !opts.dnd || this.request('predict-runtime-type') !== 'html5' ) { return; } var me = this, deferred = Base.Deferred(), options = $.extend({}, { disableGlobalDnd: opts.disableGlobalDnd, container: opts.dnd, accept: opts.accept }), dnd; this.dnd = dnd = new Dnd( options ); dnd.once( 'ready', deferred.resolve ); dnd.on( 'drop', function( files ) { me.request( 'add-file', [ files ]); }); // 检测文件是否全部允许添加。 dnd.on( 'accept', function( items ) { return me.owner.trigger( 'dndAccept', items ); }); dnd.init(); return deferred.promise(); }, destroy: function() { this.dnd && this.dnd.destroy(); } }); }); /** * @fileOverview 错误信息 */ define('lib/filepaste',[ 'base', 'mediator', 'runtime/client' ], function( Base, Mediator, RuntimeClent ) { var $ = Base.$; function FilePaste( opts ) { opts = this.options = $.extend({}, opts ); opts.container = $( opts.container || document.body ); RuntimeClent.call( this, 'FilePaste' ); } Base.inherits( RuntimeClent, { constructor: FilePaste, init: function() { var me = this; me.connectRuntime( me.options, function() { me.exec('init'); me.trigger('ready'); }); } }); Mediator.installTo( FilePaste.prototype ); return FilePaste; }); /** * @fileOverview 组件基类。 */ define('widgets/filepaste',[ 'base', 'uploader', 'lib/filepaste', 'widgets/widget' ], function( Base, Uploader, FilePaste ) { var $ = Base.$; /** * @property {Selector} [paste=undefined] 指定监听paste事件的容器,如果不指定,不启用此功能。此功能为通过粘贴来添加截屏的图片。建议设置为`document.body`. * @namespace options * @for Uploader */ return Uploader.register({ name: 'paste', init: function( opts ) { if ( !opts.paste || this.request('predict-runtime-type') !== 'html5' ) { return; } var me = this, deferred = Base.Deferred(), options = $.extend({}, { container: opts.paste, accept: opts.accept }), paste; this.paste = paste = new FilePaste( options ); paste.once( 'ready', deferred.resolve ); paste.on( 'paste', function( files ) { me.owner.request( 'add-file', [ files ]); }); paste.init(); return deferred.promise(); }, destroy: function() { this.paste && this.paste.destroy(); } }); }); /** * @fileOverview Blob */ define('lib/blob',[ 'base', 'runtime/client' ], function( Base, RuntimeClient ) { function Blob( ruid, source ) { var me = this; me.source = source; me.ruid = ruid; this.size = source.size || 0; // 如果没有指定 mimetype, 但是知道文件后缀。 if ( !source.type && this.ext && ~'jpg,jpeg,png,gif,bmp'.indexOf( this.ext ) ) { this.type = 'image/' + (this.ext === 'jpg' ? 'jpeg' : this.ext); } else { this.type = source.type || 'application/octet-stream'; } RuntimeClient.call( me, 'Blob' ); this.uid = source.uid || this.uid; if ( ruid ) { me.connectRuntime( ruid ); } } Base.inherits( RuntimeClient, { constructor: Blob, slice: function( start, end ) { return this.exec( 'slice', start, end ); }, getSource: function() { return this.source; } }); return Blob; }); /** * 为了统一化Flash的File和HTML5的File而存在。 * 以至于要调用Flash里面的File,也可以像调用HTML5版本的File一下。 * @fileOverview File */ define('lib/file',[ 'base', 'lib/blob' ], function( Base, Blob ) { var uid = 1, rExt = /\.([^.]+)$/; function File( ruid, file ) { var ext; this.name = file.name || ('untitled' + uid++); ext = rExt.exec( file.name ) ? RegExp.$1.toLowerCase() : ''; // todo 支持其他类型文件的转换。 // 如果有 mimetype, 但是文件名里面没有找出后缀规律 if ( !ext && file.type ) { ext = /\/(jpg|jpeg|png|gif|bmp)$/i.exec( file.type ) ? RegExp.$1.toLowerCase() : ''; this.name += '.' + ext; } this.ext = ext; this.lastModifiedDate = file.lastModifiedDate || (new Date()).toLocaleString(); Blob.apply( this, arguments ); } return Base.inherits( Blob, File ); }); /** * @fileOverview 错误信息 */ define('lib/filepicker',[ 'base', 'runtime/client', 'lib/file' ], function( Base, RuntimeClent, File ) { var $ = Base.$; function FilePicker( opts ) { opts = this.options = $.extend({}, FilePicker.options, opts ); opts.container = $( opts.id ); if ( !opts.container.length ) { throw new Error('按钮指定错误'); } opts.innerHTML = opts.innerHTML || opts.label || opts.container.html() || ''; opts.button = $( opts.button || document.createElement('div') ); opts.button.html( opts.innerHTML ); opts.container.html( opts.button ); RuntimeClent.call( this, 'FilePicker', true ); } FilePicker.options = { button: null, container: null, label: null, innerHTML: null, multiple: true, accept: null, name: 'file' }; Base.inherits( RuntimeClent, { constructor: FilePicker, init: function() { var me = this, opts = me.options, button = opts.button; button.addClass('webuploader-pick'); me.on( 'all', function( type ) { var files; switch ( type ) { case 'mouseenter': button.addClass('webuploader-pick-hover'); break; case 'mouseleave': button.removeClass('webuploader-pick-hover'); break; case 'change': files = me.exec('getFiles'); me.trigger( 'select', $.map( files, function( file ) { file = new File( me.getRuid(), file ); // 记录来源。 file._refer = opts.container; return file; }), opts.container ); break; } }); me.connectRuntime( opts, function() { me.refresh(); me.exec( 'init', opts ); me.trigger('ready'); }); this._resizeHandler = Base.bindFn( this.refresh, this ); $( window ).on( 'resize', this._resizeHandler ); }, refresh: function() { var shimContainer = this.getRuntime().getContainer(), button = this.options.button, width = button.outerWidth ? button.outerWidth() : button.width(), height = button.outerHeight ? button.outerHeight() : button.height(), pos = button.offset(); width && height && shimContainer.css({ bottom: 'auto', right: 'auto', width: width + 'px', height: height + 'px' }).offset( pos ); }, enable: function() { var btn = this.options.button; btn.removeClass('webuploader-pick-disable'); this.refresh(); }, disable: function() { var btn = this.options.button; this.getRuntime().getContainer().css({ top: '-99999px' }); btn.addClass('webuploader-pick-disable'); }, destroy: function() { var btn = this.options.button; $( window ).off( 'resize', this._resizeHandler ); btn.removeClass('webuploader-pick-disable webuploader-pick-hover ' + 'webuploader-pick'); } }); return FilePicker; }); /** * @fileOverview 文件选择相关 */ define('widgets/filepicker',[ 'base', 'uploader', 'lib/filepicker', 'widgets/widget' ], function( Base, Uploader, FilePicker ) { var $ = Base.$; $.extend( Uploader.options, { /** * @property {Selector | Object} [pick=undefined] * @namespace options * @for Uploader * @description 指定选择文件的按钮容器,不指定则不创建按钮。 * * * `id` {Seletor|dom} 指定选择文件的按钮容器,不指定则不创建按钮。**注意** 这里虽然写的是 id, 但是不是只支持 id, 还支持 class, 或者 dom 节点。 * * `label` {String} 请采用 `innerHTML` 代替 * * `innerHTML` {String} 指定按钮文字。不指定时优先从指定的容器中看是否自带文字。 * * `multiple` {Boolean} 是否开起同时选择多个文件能力。 */ pick: null, /** * @property {Arroy} [accept=null] * @namespace options * @for Uploader * @description 指定接受哪些类型的文件。 由于目前还有ext转mimeType表,所以这里需要分开指定。 * * * `title` {String} 文字描述 * * `extensions` {String} 允许的文件后缀,不带点,多个用逗号分割。 * * `mimeTypes` {String} 多个用逗号分割。 * * 如: * * ``` * { * title: 'Images', * extensions: 'gif,jpg,jpeg,bmp,png', * mimeTypes: 'image/*' * } * ``` */ accept: null/*{ title: 'Images', extensions: 'gif,jpg,jpeg,bmp,png', mimeTypes: 'image/*' }*/ }); return Uploader.register({ name: 'picker', init: function( opts ) { this.pickers = []; return opts.pick && this.addBtn( opts.pick ); }, refresh: function() { $.each( this.pickers, function() { this.refresh(); }); }, /** * @method addButton * @for Uploader * @grammar addButton( pick ) => Promise * @description * 添加文件选择按钮,如果一个按钮不够,需要调用此方法来添加。参数跟[options.pick](#WebUploader:Uploader:options)一致。 * @example * uploader.addButton({ * id: '#btnContainer', * innerHTML: '选择文件' * }); */ addBtn: function( pick ) { var me = this, opts = me.options, accept = opts.accept, promises = []; if ( !pick ) { return; } $.isPlainObject( pick ) || (pick = { id: pick }); $( pick.id ).each(function() { var options, picker, deferred; deferred = Base.Deferred(); options = $.extend({}, pick, { accept: $.isPlainObject( accept ) ? [ accept ] : accept, swf: opts.swf, runtimeOrder: opts.runtimeOrder, id: this }); picker = new FilePicker( options ); picker.once( 'ready', deferred.resolve ); picker.on( 'select', function( files ) { me.owner.request( 'add-file', [ files ]); }); picker.init(); me.pickers.push( picker ); promises.push( deferred.promise() ); }); return Base.when.apply( Base, promises ); }, disable: function() { $.each( this.pickers, function() { this.disable(); }); }, enable: function() { $.each( this.pickers, function() { this.enable(); }); }, destroy: function() { $.each( this.pickers, function() { this.destroy(); }); this.pickers = null; } }); }); /** * @fileOverview Image */ define('lib/image',[ 'base', 'runtime/client', 'lib/blob' ], function( Base, RuntimeClient, Blob ) { var $ = Base.$; // 构造器。 function Image( opts ) { this.options = $.extend({}, Image.options, opts ); RuntimeClient.call( this, 'Image' ); this.on( 'load', function() { this._info = this.exec('info'); this._meta = this.exec('meta'); }); } // 默认选项。 Image.options = { // 默认的图片处理质量 quality: 90, // 是否裁剪 crop: false, // 是否保留头部信息 preserveHeaders: false, // 是否允许放大。 allowMagnify: false }; // 继承RuntimeClient. Base.inherits( RuntimeClient, { constructor: Image, info: function( val ) { // setter if ( val ) { this._info = val; return this; } // getter return this._info; }, meta: function( val ) { // setter if ( val ) { this._meta = val; return this; } // getter return this._meta; }, loadFromBlob: function( blob ) { var me = this, ruid = blob.getRuid(); this.connectRuntime( ruid, function() { me.exec( 'init', me.options ); me.exec( 'loadFromBlob', blob ); }); }, resize: function() { var args = Base.slice( arguments ); return this.exec.apply( this, [ 'resize' ].concat( args ) ); }, crop: function() { var args = Base.slice( arguments ); return this.exec.apply( this, [ 'crop' ].concat( args ) ); }, getAsDataUrl: function( type ) { return this.exec( 'getAsDataUrl', type ); }, getAsBlob: function( type ) { var blob = this.exec( 'getAsBlob', type ); return new Blob( this.getRuid(), blob ); } }); return Image; }); /** * @fileOverview 图片操作, 负责预览图片和上传前压缩图片 */ define('widgets/image',[ 'base', 'uploader', 'lib/image', 'widgets/widget' ], function( Base, Uploader, Image ) { var $ = Base.$, throttle; // 根据要处理的文件大小来节流,一次不能处理太多,会卡。 throttle = (function( max ) { var occupied = 0, waiting = [], tick = function() { var item; while ( waiting.length && occupied < max ) { item = waiting.shift(); occupied += item[ 0 ]; item[ 1 ](); } }; return function( emiter, size, cb ) { waiting.push([ size, cb ]); emiter.once( 'destroy', function() { occupied -= size; setTimeout( tick, 1 ); }); setTimeout( tick, 1 ); }; })( 5 * 1024 * 1024 ); $.extend( Uploader.options, { /** * @property {Object} [thumb] * @namespace options * @for Uploader * @description 配置生成缩略图的选项。 * * 默认为: * * ```javascript * { * width: 110, * height: 110, * * // 图片质量,只有type为`image/jpeg`的时候才有效。 * quality: 70, * * // 是否允许放大,如果想要生成小图的时候不失真,此选项应该设置为false. * allowMagnify: true, * * // 是否允许裁剪。 * crop: true, * * // 为空的话则保留原有图片格式。 * // 否则强制转换成指定的类型。 * type: 'image/jpeg' * } * ``` */ thumb: { width: 110, height: 110, quality: 70, allowMagnify: true, crop: true, preserveHeaders: false, // 为空的话则保留原有图片格式。 // 否则强制转换成指定的类型。 // IE 8下面 base64 大小不能超过 32K 否则预览失败,而非 jpeg 编码的图片很可 // 能会超过 32k, 所以这里设置成预览的时候都是 image/jpeg type: 'image/jpeg' }, /** * @property {Object} [compress] * @namespace options * @for Uploader * @description 配置压缩的图片的选项。如果此选项为`false`, 则图片在上传前不进行压缩。 * * 默认为: * * ```javascript * { * width: 1600, * height: 1600, * * // 图片质量,只有type为`image/jpeg`的时候才有效。 * quality: 90, * * // 是否允许放大,如果想要生成小图的时候不失真,此选项应该设置为false. * allowMagnify: false, * * // 是否允许裁剪。 * crop: false, * * // 是否保留头部meta信息。 * preserveHeaders: true, * * // 如果发现压缩后文件大小比原来还大,则使用原来图片 * // 此属性可能会影响图片自动纠正功能 * noCompressIfLarger: false, * * // 单位字节,如果图片大小小于此值,不会采用压缩。 * compressSize: 0 * } * ``` */ compress: { width: 1600, height: 1600, quality: 90, allowMagnify: false, crop: false, preserveHeaders: true } }); return Uploader.register({ name: 'image', /** * 生成缩略图,此过程为异步,所以需要传入`callback`。 * 通常情况在图片加入队里后调用此方法来生成预览图以增强交互效果。 * * 当 width 或者 height 的值介于 0 - 1 时,被当成百分比使用。 * * `callback`中可以接收到两个参数。 * * 第一个为error,如果生成缩略图有错误,此error将为真。 * * 第二个为ret, 缩略图的Data URL值。 * * **注意** * Date URL在IE6/7中不支持,所以不用调用此方法了,直接显示一张暂不支持预览图片好了。 * 也可以借助服务端,将 base64 数据传给服务端,生成一个临时文件供预览。 * * @method makeThumb * @grammar makeThumb( file, callback ) => undefined * @grammar makeThumb( file, callback, width, height ) => undefined * @for Uploader * @example * * uploader.on( 'fileQueued', function( file ) { * var $li = ...; * * uploader.makeThumb( file, function( error, ret ) { * if ( error ) { * $li.text('预览错误'); * } else { * $li.append('<img alt="" src="' + ret + '" />'); * } * }); * * }); */ makeThumb: function( file, cb, width, height ) { var opts, image; file = this.request( 'get-file', file ); // 只预览图片格式。 if ( !file.type.match( /^image/ ) ) { cb( true ); return; } opts = $.extend({}, this.options.thumb ); // 如果传入的是object. if ( $.isPlainObject( width ) ) { opts = $.extend( opts, width ); width = null; } width = width || opts.width; height = height || opts.height; image = new Image( opts ); image.once( 'load', function() { file._info = file._info || image.info(); file._meta = file._meta || image.meta(); // 如果 width 的值介于 0 - 1 // 说明设置的是百分比。 if ( width <= 1 && width > 0 ) { width = file._info.width * width; } // 同样的规则应用于 height if ( height <= 1 && height > 0 ) { height = file._info.height * height; } image.resize( width, height ); }); // 当 resize 完后 image.once( 'complete', function() { cb( false, image.getAsDataUrl( opts.type ) ); image.destroy(); }); image.once( 'error', function( reason ) { cb( reason || true ); image.destroy(); }); throttle( image, file.source.size, function() { file._info && image.info( file._info ); file._meta && image.meta( file._meta ); image.loadFromBlob( file.source ); }); }, beforeSendFile: function( file ) { var opts = this.options.compress || this.options.resize, compressSize = opts && opts.compressSize || 0, noCompressIfLarger = opts && opts.noCompressIfLarger || false, image, deferred; file = this.request( 'get-file', file ); // 只压缩 jpeg 图片格式。 // gif 可能会丢失针 // bmp png 基本上尺寸都不大,且压缩比比较小。 if ( !opts || !~'image/jpeg,image/jpg'.indexOf( file.type ) || file.size < compressSize || file._compressed ) { return; } opts = $.extend({}, opts ); deferred = Base.Deferred(); image = new Image( opts ); deferred.always(function() { image.destroy(); image = null; }); image.once( 'error', deferred.reject ); image.once( 'load', function() { var width = opts.width, height = opts.height; file._info = file._info || image.info(); file._meta = file._meta || image.meta(); // 如果 width 的值介于 0 - 1 // 说明设置的是百分比。 if ( width <= 1 && width > 0 ) { width = file._info.width * width; } // 同样的规则应用于 height if ( height <= 1 && height > 0 ) { height = file._info.height * height; } image.resize( width, height ); }); image.once( 'complete', function() { var blob, size; // 移动端 UC / qq 浏览器的无图模式下 // ctx.getImageData 处理大图的时候会报 Exception // INDEX_SIZE_ERR: DOM Exception 1 try { blob = image.getAsBlob( opts.type ); size = file.size; // 如果压缩后,比原来还大则不用压缩后的。 if ( !noCompressIfLarger || blob.size < size ) { // file.source.destroy && file.source.destroy(); file.source = blob; file.size = blob.size; file.trigger( 'resize', blob.size, size ); } // 标记,避免重复压缩。 file._compressed = true; deferred.resolve(); } catch ( e ) { // 出错了直接继续,让其上传原始图片 deferred.resolve(); } }); file._info && image.info( file._info ); file._meta && image.meta( file._meta ); image.loadFromBlob( file.source ); return deferred.promise(); } }); }); /** * @fileOverview 文件属性封装 */ define('file',[ 'base', 'mediator' ], function( Base, Mediator ) { var $ = Base.$, idPrefix = 'WU_FILE_', idSuffix = 0, rExt = /\.([^.]+)$/, statusMap = {}; function gid() { return idPrefix + idSuffix++; } /** * 文件类 * @class File * @constructor 构造函数 * @grammar new File( source ) => File * @param {Lib.File} source [lib.File](#Lib.File)实例, 此source对象是带有Runtime信息的。 */ function WUFile( source ) { /** * 文件名,包括扩展名(后缀) * @property name * @type {string} */ this.name = source.name || 'Untitled'; /** * 文件体积(字节) * @property size * @type {uint} * @default 0 */ this.size = source.size || 0; /** * 文件MIMETYPE类型,与文件类型的对应关系请参考[http://t.cn/z8ZnFny](http://t.cn/z8ZnFny) * @property type * @type {string} * @default 'application/octet-stream' */ this.type = source.type || 'application/octet-stream'; /** * 文件最后修改日期 * @property lastModifiedDate * @type {int} * @default 当前时间戳 */ this.lastModifiedDate = source.lastModifiedDate || (new Date() * 1); /** * 文件ID,每个对象具有唯一ID,与文件名无关 * @property id * @type {string} */ this.id = gid(); /** * 文件扩展名,通过文件名获取,例如test.png的扩展名为png * @property ext * @type {string} */ this.ext = rExt.exec( this.name ) ? RegExp.$1 : ''; /** * 状态文字说明。在不同的status语境下有不同的用途。 * @property statusText * @type {string} */ this.statusText = ''; // 存储文件状态,防止通过属性直接修改 statusMap[ this.id ] = WUFile.Status.INITED; this.source = source; this.loaded = 0; this.on( 'error', function( msg ) { this.setStatus( WUFile.Status.ERROR, msg ); }); } $.extend( WUFile.prototype, { /** * 设置状态,状态变化时会触发`change`事件。 * @method setStatus * @grammar setStatus( status[, statusText] ); * @param {File.Status|String} status [文件状态值](#WebUploader:File:File.Status) * @param {String} [statusText=''] 状态说明,常在error时使用,用http, abort,server等来标记是由于什么原因导致文件错误。 */ setStatus: function( status, text ) { var prevStatus = statusMap[ this.id ]; typeof text !== 'undefined' && (this.statusText = text); if ( status !== prevStatus ) { statusMap[ this.id ] = status; /** * 文件状态变化 * @event statuschange */ this.trigger( 'statuschange', status, prevStatus ); } }, /** * 获取文件状态 * @return {File.Status} * @example 文件状态具体包括以下几种类型: { // 初始化 INITED: 0, // 已入队列 QUEUED: 1, // 正在上传 PROGRESS: 2, // 上传出错 ERROR: 3, // 上传成功 COMPLETE: 4, // 上传取消 CANCELLED: 5 } */ getStatus: function() { return statusMap[ this.id ]; }, /** * 获取文件原始信息。 * @return {*} */ getSource: function() { return this.source; }, destroy: function() { this.off(); delete statusMap[ this.id ]; } }); Mediator.installTo( WUFile.prototype ); /** * 文件状态值,具体包括以下几种类型: * * `inited` 初始状态 * * `queued` 已经进入队列, 等待上传 * * `progress` 上传中 * * `complete` 上传完成。 * * `error` 上传出错,可重试 * * `interrupt` 上传中断,可续传。 * * `invalid` 文件不合格,不能重试上传。会自动从队列中移除。 * * `cancelled` 文件被移除。 * @property {Object} Status * @namespace File * @class File * @static */ WUFile.Status = { INITED: 'inited', // 初始状态 QUEUED: 'queued', // 已经进入队列, 等待上传 PROGRESS: 'progress', // 上传中 ERROR: 'error', // 上传出错,可重试 COMPLETE: 'complete', // 上传完成。 CANCELLED: 'cancelled', // 上传取消。 INTERRUPT: 'interrupt', // 上传中断,可续传。 INVALID: 'invalid' // 文件不合格,不能重试上传。 }; return WUFile; }); /** * @fileOverview 文件队列 */ define('queue',[ 'base', 'mediator', 'file' ], function( Base, Mediator, WUFile ) { var $ = Base.$, STATUS = WUFile.Status; /** * 文件队列, 用来存储各个状态中的文件。 * @class Queue * @extends Mediator */ function Queue() { /** * 统计文件数。 * * `numOfQueue` 队列中的文件数。 * * `numOfSuccess` 上传成功的文件数 * * `numOfCancel` 被取消的文件数 * * `numOfProgress` 正在上传中的文件数 * * `numOfUploadFailed` 上传错误的文件数。 * * `numOfInvalid` 无效的文件数。 * * `numofDeleted` 被移除的文件数。 * @property {Object} stats */ this.stats = { numOfQueue: 0, numOfSuccess: 0, numOfCancel: 0, numOfProgress: 0, numOfUploadFailed: 0, numOfInvalid: 0, numofDeleted: 0, numofInterrupt: 0 }; // 上传队列,仅包括等待上传的文件 this._queue = []; // 存储所有文件 this._map = {}; } $.extend( Queue.prototype, { /** * 将新文件加入对队列尾部 * * @method append * @param {File} file 文件对象 */ append: function( file ) { this._queue.push( file ); this._fileAdded( file ); return this; }, /** * 将新文件加入对队列头部 * * @method prepend * @param {File} file 文件对象 */ prepend: function( file ) { this._queue.unshift( file ); this._fileAdded( file ); return this; }, /** * 获取文件对象 * * @method getFile * @param {String} fileId 文件ID * @return {File} */ getFile: function( fileId ) { if ( typeof fileId !== 'string' ) { return fileId; } return this._map[ fileId ]; }, /** * 从队列中取出一个指定状态的文件。 * @grammar fetch( status ) => File * @method fetch * @param {String} status [文件状态值](#WebUploader:File:File.Status) * @return {File} [File](#WebUploader:File) */ fetch: function( status ) { var len = this._queue.length, i, file; status = status || STATUS.QUEUED; for ( i = 0; i < len; i++ ) { file = this._queue[ i ]; if ( status === file.getStatus() ) { return file; } } return null; }, /** * 对队列进行排序,能够控制文件上传顺序。 * @grammar sort( fn ) => undefined * @method sort * @param {Function} fn 排序方法 */ sort: function( fn ) { if ( typeof fn === 'function' ) { this._queue.sort( fn ); } }, /** * 获取指定类型的文件列表, 列表中每一个成员为[File](#WebUploader:File)对象。 * @grammar getFiles( [status1[, status2 ...]] ) => Array * @method getFiles * @param {String} [status] [文件状态值](#WebUploader:File:File.Status) */ getFiles: function() { var sts = [].slice.call( arguments, 0 ), ret = [], i = 0, len = this._queue.length, file; for ( ; i < len; i++ ) { file = this._queue[ i ]; if ( sts.length && !~$.inArray( file.getStatus(), sts ) ) { continue; } ret.push( file ); } return ret; }, /** * 在队列中删除文件。 * @grammar removeFile( file ) => Array * @method removeFile * @param {File} 文件对象。 */ removeFile: function( file ) { var me = this, existing = this._map[ file.id ]; if ( existing ) { delete this._map[ file.id ]; file.destroy(); this.stats.numofDeleted++; } }, _fileAdded: function( file ) { var me = this, existing = this._map[ file.id ]; if ( !existing ) { this._map[ file.id ] = file; file.on( 'statuschange', function( cur, pre ) { me._onFileStatusChange( cur, pre ); }); } }, _onFileStatusChange: function( curStatus, preStatus ) { var stats = this.stats; switch ( preStatus ) { case STATUS.PROGRESS: stats.numOfProgress--; break; case STATUS.QUEUED: stats.numOfQueue --; break; case STATUS.ERROR: stats.numOfUploadFailed--; break; case STATUS.INVALID: stats.numOfInvalid--; break; case STATUS.INTERRUPT: stats.numofInterrupt--; break; } switch ( curStatus ) { case STATUS.QUEUED: stats.numOfQueue++; break; case STATUS.PROGRESS: stats.numOfProgress++; break; case STATUS.ERROR: stats.numOfUploadFailed++; break; case STATUS.COMPLETE: stats.numOfSuccess++; break; case STATUS.CANCELLED: stats.numOfCancel++; break; case STATUS.INVALID: stats.numOfInvalid++; break; case STATUS.INTERRUPT: stats.numofInterrupt++; break; } } }); Mediator.installTo( Queue.prototype ); return Queue; }); /** * @fileOverview 队列 */ define('widgets/queue',[ 'base', 'uploader', 'queue', 'file', 'lib/file', 'runtime/client', 'widgets/widget' ], function( Base, Uploader, Queue, WUFile, File, RuntimeClient ) { var $ = Base.$, rExt = /\.\w+$/, Status = WUFile.Status; return Uploader.register({ name: 'queue', init: function( opts ) { var me = this, deferred, len, i, item, arr, accept, runtime; if ( $.isPlainObject( opts.accept ) ) { opts.accept = [ opts.accept ]; } // accept中的中生成匹配正则。 if ( opts.accept ) { arr = []; for ( i = 0, len = opts.accept.length; i < len; i++ ) { item = opts.accept[ i ].extensions; item && arr.push( item ); } if ( arr.length ) { accept = '\\.' + arr.join(',') .replace( /,/g, '$|\\.' ) .replace( /\*/g, '.*' ) + '$'; } me.accept = new RegExp( accept, 'i' ); } me.queue = new Queue(); me.stats = me.queue.stats; // 如果当前不是html5运行时,那就算了。 // 不执行后续操作 if ( this.request('predict-runtime-type') !== 'html5' ) { return; } // 创建一个 html5 运行时的 placeholder // 以至于外部添加原生 File 对象的时候能正确包裹一下供 webuploader 使用。 deferred = Base.Deferred(); this.placeholder = runtime = new RuntimeClient('Placeholder'); runtime.connectRuntime({ runtimeOrder: 'html5' }, function() { me._ruid = runtime.getRuid(); deferred.resolve(); }); return deferred.promise(); }, // 为了支持外部直接添加一个原生File对象。 _wrapFile: function( file ) { if ( !(file instanceof WUFile) ) { if ( !(file instanceof File) ) { if ( !this._ruid ) { throw new Error('Can\'t add external files.'); } file = new File( this._ruid, file ); } file = new WUFile( file ); } return file; }, // 判断文件是否可以被加入队列 acceptFile: function( file ) { var invalid = !file || !file.size || this.accept && // 如果名字中有后缀,才做后缀白名单处理。 rExt.exec( file.name ) && !this.accept.test( file.name ); return !invalid; }, /** * @event beforeFileQueued * @param {File} file File对象 * @description 当文件被加入队列之前触发,此事件的handler返回值为`false`,则此文件不会被添加进入队列。 * @for Uploader */ /** * @event fileQueued * @param {File} file File对象 * @description 当文件被加入队列以后触发。 * @for Uploader */ _addFile: function( file ) { var me = this; file = me._wrapFile( file ); // 不过类型判断允许不允许,先派送 `beforeFileQueued` if ( !me.owner.trigger( 'beforeFileQueued', file ) ) { return; } // 类型不匹配,则派送错误事件,并返回。 if ( !me.acceptFile( file ) ) { me.owner.trigger( 'error', 'Q_TYPE_DENIED', file ); return; } me.queue.append( file ); me.owner.trigger( 'fileQueued', file ); return file; }, getFile: function( fileId ) { return this.queue.getFile( fileId ); }, /** * @event filesQueued * @param {File} files 数组,内容为原始File(lib/File)对象。 * @description 当一批文件添加进队列以后触发。 * @for Uploader */ /** * @property {Boolean} [auto=false] * @namespace options * @for Uploader * @description 设置为 true 后,不需要手动调用上传,有文件选择即开始上传。 * */ /** * @method addFiles * @grammar addFiles( file ) => undefined * @grammar addFiles( [file1, file2 ...] ) => undefined * @param {Array of File or File} [files] Files 对象 数组 * @description 添加文件到队列 * @for Uploader */ addFile: function( files ) { var me = this; if ( !files.length ) { files = [ files ]; } files = $.map( files, function( file ) { return me._addFile( file ); }); me.owner.trigger( 'filesQueued', files ); if ( me.options.auto ) { setTimeout(function() { me.request('start-upload'); }, 20 ); } }, getStats: function() { return this.stats; }, /** * @event fileDequeued * @param {File} file File对象 * @description 当文件被移除队列后触发。 * @for Uploader */ /** * @method removeFile * @grammar removeFile( file ) => undefined * @grammar removeFile( id ) => undefined * @grammar removeFile( file, true ) => undefined * @grammar removeFile( id, true ) => undefined * @param {File|id} file File对象或这File对象的id * @description 移除某一文件, 默认只会标记文件状态为已取消,如果第二个参数为 `true` 则会从 queue 中移除。 * @for Uploader * @example * * $li.on('click', '.remove-this', function() { * uploader.removeFile( file ); * }) */ removeFile: function( file, remove ) { var me = this; file = file.id ? file : me.queue.getFile( file ); this.request( 'cancel-file', file ); if ( remove ) { this.queue.removeFile( file ); } }, /** * @method getFiles * @grammar getFiles() => Array * @grammar getFiles( status1, status2, status... ) => Array * @description 返回指定状态的文件集合,不传参数将返回所有状态的文件。 * @for Uploader * @example * console.log( uploader.getFiles() ); // => all files * console.log( uploader.getFiles('error') ) // => all error files. */ getFiles: function() { return this.queue.getFiles.apply( this.queue, arguments ); }, fetchFile: function() { return this.queue.fetch.apply( this.queue, arguments ); }, /** * @method retry * @grammar retry() => undefined * @grammar retry( file ) => undefined * @description 重试上传,重试指定文件,或者从出错的文件开始重新上传。 * @for Uploader * @example * function retry() { * uploader.retry(); * } */ retry: function( file, noForceStart ) { var me = this, files, i, len; if ( file ) { file = file.id ? file : me.queue.getFile( file ); file.setStatus( Status.QUEUED ); noForceStart || me.request('start-upload'); return; } files = me.queue.getFiles( Status.ERROR ); i = 0; len = files.length; for ( ; i < len; i++ ) { file = files[ i ]; file.setStatus( Status.QUEUED ); } me.request('start-upload'); }, /** * @method sort * @grammar sort( fn ) => undefined * @description 排序队列中的文件,在上传之前调整可以控制上传顺序。 * @for Uploader */ sortFiles: function() { return this.queue.sort.apply( this.queue, arguments ); }, /** * @event reset * @description 当 uploader 被重置的时候触发。 * @for Uploader */ /** * @method reset * @grammar reset() => undefined * @description 重置uploader。目前只重置了队列。 * @for Uploader * @example * uploader.reset(); */ reset: function() { this.owner.trigger('reset'); this.queue = new Queue(); this.stats = this.queue.stats; }, destroy: function() { this.reset(); this.placeholder && this.placeholder.destroy(); } }); }); /** * @fileOverview 添加获取Runtime相关信息的方法。 */ define('widgets/runtime',[ 'uploader', 'runtime/runtime', 'widgets/widget' ], function( Uploader, Runtime ) { Uploader.support = function() { return Runtime.hasRuntime.apply( Runtime, arguments ); }; /** * @property {Object} [runtimeOrder=html5,flash] * @namespace options * @for Uploader * @description 指定运行时启动顺序。默认会想尝试 html5 是否支持,如果支持则使用 html5, 否则则使用 flash. * * 可以将此值设置成 `flash`,来强制使用 flash 运行时。 */ return Uploader.register({ name: 'runtime', init: function() { if ( !this.predictRuntimeType() ) { throw Error('Runtime Error'); } }, /** * 预测Uploader将采用哪个`Runtime` * @grammar predictRuntimeType() => String * @method predictRuntimeType * @for Uploader */ predictRuntimeType: function() { var orders = this.options.runtimeOrder || Runtime.orders, type = this.type, i, len; if ( !type ) { orders = orders.split( /\s*,\s*/g ); for ( i = 0, len = orders.length; i < len; i++ ) { if ( Runtime.hasRuntime( orders[ i ] ) ) { this.type = type = orders[ i ]; break; } } } return type; } }); }); /** * @fileOverview Transport */ define('lib/transport',[ 'base', 'runtime/client', 'mediator' ], function( Base, RuntimeClient, Mediator ) { var $ = Base.$; function Transport( opts ) { var me = this; opts = me.options = $.extend( true, {}, Transport.options, opts || {} ); RuntimeClient.call( this, 'Transport' ); this._blob = null; this._formData = opts.formData || {}; this._headers = opts.headers || {}; this.on( 'progress', this._timeout ); this.on( 'load error', function() { me.trigger( 'progress', 1 ); clearTimeout( me._timer ); }); } Transport.options = { server: '', method: 'POST', // 跨域时,是否允许携带cookie, 只有html5 runtime才有效 withCredentials: false, fileVal: 'file', timeout: 2 * 60 * 1000, // 2分钟 formData: {}, headers: {}, sendAsBinary: false }; $.extend( Transport.prototype, { // 添加Blob, 只能添加一次,最后一次有效。 appendBlob: function( key, blob, filename ) { var me = this, opts = me.options; if ( me.getRuid() ) { me.disconnectRuntime(); } // 连接到blob归属的同一个runtime. me.connectRuntime( blob.ruid, function() { me.exec('init'); }); me._blob = blob; opts.fileVal = key || opts.fileVal; opts.filename = filename || opts.filename; }, // 添加其他字段 append: function( key, value ) { if ( typeof key === 'object' ) { $.extend( this._formData, key ); } else { this._formData[ key ] = value; } }, setRequestHeader: function( key, value ) { if ( typeof key === 'object' ) { $.extend( this._headers, key ); } else { this._headers[ key ] = value; } }, send: function( method ) { this.exec( 'send', method ); this._timeout(); }, abort: function() { clearTimeout( this._timer ); return this.exec('abort'); }, destroy: function() { this.trigger('destroy'); this.off(); this.exec('destroy'); this.disconnectRuntime(); }, getResponse: function() { return this.exec('getResponse'); }, getResponseAsJson: function() { return this.exec('getResponseAsJson'); }, getStatus: function() { return this.exec('getStatus'); }, _timeout: function() { var me = this, duration = me.options.timeout; if ( !duration ) { return; } clearTimeout( me._timer ); me._timer = setTimeout(function() { me.abort(); me.trigger( 'error', 'timeout' ); }, duration ); } }); // 让Transport具备事件功能。 Mediator.installTo( Transport.prototype ); return Transport; }); /** * @fileOverview 负责文件上传相关。 */ define('widgets/upload',[ 'base', 'uploader', 'file', 'lib/transport', 'widgets/widget' ], function( Base, Uploader, WUFile, Transport ) { var $ = Base.$, isPromise = Base.isPromise, Status = WUFile.Status; // 添加默认配置项 $.extend( Uploader.options, { /** * @property {Boolean} [prepareNextFile=false] * @namespace options * @for Uploader * @description 是否允许在文件传输时提前把下一个文件准备好。 * 对于一个文件的准备工作比较耗时,比如图片压缩,md5序列化。 * 如果能提前在当前文件传输期处理,可以节省总体耗时。 */ prepareNextFile: false, /** * @property {Boolean} [chunked=false] * @namespace options * @for Uploader * @description 是否要分片处理大文件上传。 */ chunked: false, /** * @property {Boolean} [chunkSize=5242880] * @namespace options * @for Uploader * @description 如果要分片,分多大一片? 默认大小为5M. */ chunkSize: 5 * 1024 * 1024, /** * @property {Boolean} [chunkRetry=2] * @namespace options * @for Uploader * @description 如果某个分片由于网络问题出错,允许自动重传多少次? */ chunkRetry: 2, /** * @property {Boolean} [threads=3] * @namespace options * @for Uploader * @description 上传并发数。允许同时最大上传进程数。 */ threads: 3, /** * @property {Object} [formData={}] * @namespace options * @for Uploader * @description 文件上传请求的参数表,每次发送都会发送此对象中的参数。 */ formData: {} /** * @property {Object} [fileVal='file'] * @namespace options * @for Uploader * @description 设置文件上传域的name。 */ /** * @property {Object} [method='POST'] * @namespace options * @for Uploader * @description 文件上传方式,`POST`或者`GET`。 */ /** * @property {Object} [sendAsBinary=false] * @namespace options * @for Uploader * @description 是否已二进制的流的方式发送文件,这样整个上传内容`php://input`都为文件内容, * 其他参数在$_GET数组中。 */ }); // 负责将文件切片。 function CuteFile( file, chunkSize ) { var pending = [], blob = file.source, total = blob.size, chunks = chunkSize ? Math.ceil( total / chunkSize ) : 1, start = 0, index = 0, len, api; api = { file: file, has: function() { return !!pending.length; }, shift: function() { return pending.shift(); }, unshift: function( block ) { pending.unshift( block ); } }; while ( index < chunks ) { len = Math.min( chunkSize, total - start ); pending.push({ file: file, start: start, end: chunkSize ? (start + len) : total, total: total, chunks: chunks, chunk: index++, cuted: api }); start += len; } file.blocks = pending.concat(); file.remaning = pending.length; return api; } Uploader.register({ name: 'upload', init: function() { var owner = this.owner, me = this; this.runing = false; this.progress = false; owner .on( 'startUpload', function() { me.progress = true; }) .on( 'uploadFinished', function() { me.progress = false; }); // 记录当前正在传的数据,跟threads相关 this.pool = []; // 缓存分好片的文件。 this.stack = []; // 缓存即将上传的文件。 this.pending = []; // 跟踪还有多少分片在上传中但是没有完成上传。 this.remaning = 0; this.__tick = Base.bindFn( this._tick, this ); owner.on( 'uploadComplete', function( file ) { // 把其他块取消了。 file.blocks && $.each( file.blocks, function( _, v ) { v.transport && (v.transport.abort(), v.transport.destroy()); delete v.transport; }); delete file.blocks; delete file.remaning; }); }, reset: function() { this.request( 'stop-upload', true ); this.runing = false; this.pool = []; this.stack = []; this.pending = []; this.remaning = 0; this._trigged = false; this._promise = null; }, /** * @event startUpload * @description 当开始上传流程时触发。 * @for Uploader */ /** * 开始上传。此方法可以从初始状态调用开始上传流程,也可以从暂停状态调用,继续上传流程。 * * 可以指定开始某一个文件。 * @grammar upload() => undefined * @grammar upload( file | fileId) => undefined * @method upload * @for Uploader */ startUpload: function(file) { var me = this; // 移出invalid的文件 $.each( me.request( 'get-files', Status.INVALID ), function() { me.request( 'remove-file', this ); }); // 如果指定了开始某个文件,则只开始指定文件。 if ( file ) { file = file.id ? file : me.request( 'get-file', file ); if (file.getStatus() === Status.INTERRUPT) { $.each( me.pool, function( _, v ) { // 之前暂停过。 if (v.file !== file) { return; } v.transport && v.transport.send(); }); file.setStatus( Status.QUEUED ); } else if (file.getStatus() === Status.PROGRESS) { return; } else { file.setStatus( Status.QUEUED ); } } else { $.each( me.request( 'get-files', [ Status.INITED ] ), function() { this.setStatus( Status.QUEUED ); }); } if ( me.runing ) { return; } me.runing = true; var files = []; // 如果有暂停的,则续传 $.each( me.pool, function( _, v ) { var file = v.file; if ( file.getStatus() === Status.INTERRUPT ) { files.push(file); me._trigged = false; v.transport && v.transport.send(); } }); var file; while ( (file = files.shift()) ) { file.setStatus( Status.PROGRESS ); } file || $.each( me.request( 'get-files', Status.INTERRUPT ), function() { this.setStatus( Status.PROGRESS ); }); me._trigged = false; Base.nextTick( me.__tick ); me.owner.trigger('startUpload'); }, /** * @event stopUpload * @description 当开始上传流程暂停时触发。 * @for Uploader */ /** * 暂停上传。第一个参数为是否中断上传当前正在上传的文件。 * * 如果第一个参数是文件,则只暂停指定文件。 * @grammar stop() => undefined * @grammar stop( true ) => undefined * @grammar stop( file ) => undefined * @method stop * @for Uploader */ stopUpload: function( file, interrupt ) { var me = this; if (file === true) { interrupt = file; file = null; } if ( me.runing === false ) { return; } // 如果只是暂停某个文件。 if ( file ) { file = file.id ? file : me.request( 'get-file', file ); if ( file.getStatus() !== Status.PROGRESS && file.getStatus() !== Status.QUEUED ) { return; } file.setStatus( Status.INTERRUPT ); $.each( me.pool, function( _, v ) { // 只 abort 指定的文件。 if (v.file !== file) { return; } v.transport && v.transport.abort(); me._putback(v); me._popBlock(v); }); return Base.nextTick( me.__tick ); } me.runing = false; if (this._promise && this._promise.file) { this._promise.file.setStatus( Status.INTERRUPT ); } interrupt && $.each( me.pool, function( _, v ) { v.transport && v.transport.abort(); v.file.setStatus( Status.INTERRUPT ); }); me.owner.trigger('stopUpload'); }, /** * @method cancelFile * @grammar cancelFile( file ) => undefined * @grammar cancelFile( id ) => undefined * @param {File|id} file File对象或这File对象的id * @description 标记文件状态为已取消, 同时将中断文件传输。 * @for Uploader * @example * * $li.on('click', '.remove-this', function() { * uploader.cancelFile( file ); * }) */ cancelFile: function( file ) { file = file.id ? file : this.request( 'get-file', file ); // 如果正在上传。 file.blocks && $.each( file.blocks, function( _, v ) { var _tr = v.transport; if ( _tr ) { _tr.abort(); _tr.destroy(); delete v.transport; } }); file.setStatus( Status.CANCELLED ); this.owner.trigger( 'fileDequeued', file ); }, /** * 判断`Uplaode`r是否正在上传中。 * @grammar isInProgress() => Boolean * @method isInProgress * @for Uploader */ isInProgress: function() { return !!this.progress; }, _getStats: function() { return this.request('get-stats'); }, /** * 掉过一个文件上传,直接标记指定文件为已上传状态。 * @grammar skipFile( file ) => undefined * @method skipFile * @for Uploader */ skipFile: function( file, status ) { file = file.id ? file : this.request( 'get-file', file ); file.setStatus( status || Status.COMPLETE ); file.skipped = true; // 如果正在上传。 file.blocks && $.each( file.blocks, function( _, v ) { var _tr = v.transport; if ( _tr ) { _tr.abort(); _tr.destroy(); delete v.transport; } }); this.owner.trigger( 'uploadSkip', file ); }, /** * @event uploadFinished * @description 当所有文件上传结束时触发。 * @for Uploader */ _tick: function() { var me = this, opts = me.options, fn, val; // 上一个promise还没有结束,则等待完成后再执行。 if ( me._promise ) { return me._promise.always( me.__tick ); } // 还有位置,且还有文件要处理的话。 if ( me.pool.length < opts.threads && (val = me._nextBlock()) ) { me._trigged = false; fn = function( val ) { me._promise = null; // 有可能是reject过来的,所以要检测val的类型。 val && val.file && me._startSend( val ); Base.nextTick( me.__tick ); }; me._promise = isPromise( val ) ? val.always( fn ) : fn( val ); // 没有要上传的了,且没有正在传输的了。 } else if ( !me.remaning && !me._getStats().numOfQueue && !me._getStats().numofInterrupt ) { me.runing = false; me._trigged || Base.nextTick(function() { me.owner.trigger('uploadFinished'); }); me._trigged = true; } }, _putback: function(block) { var idx; block.cuted.unshift(block); idx = this.stack.indexOf(block.cuted); if (!~idx) { this.stack.unshift(block.cuted); } }, _getStack: function() { var i = 0, act; while ( (act = this.stack[ i++ ]) ) { if ( act.has() && act.file.getStatus() === Status.PROGRESS ) { return act; } else if (!act.has() || act.file.getStatus() !== Status.PROGRESS && act.file.getStatus() !== Status.INTERRUPT ) { // 把已经处理完了的,或者,状态为非 progress(上传中)、 // interupt(暂停中) 的移除。 this.stack.splice( --i, 1 ); } } return null; }, _nextBlock: function() { var me = this, opts = me.options, act, next, done, preparing; // 如果当前文件还有没有需要传输的,则直接返回剩下的。 if ( (act = this._getStack()) ) { // 是否提前准备下一个文件 if ( opts.prepareNextFile && !me.pending.length ) { me._prepareNextFile(); } return act.shift(); // 否则,如果正在运行,则准备下一个文件,并等待完成后返回下个分片。 } else if ( me.runing ) { // 如果缓存中有,则直接在缓存中取,没有则去queue中取。 if ( !me.pending.length && me._getStats().numOfQueue ) { me._prepareNextFile(); } next = me.pending.shift(); done = function( file ) { if ( !file ) { return null; } act = CuteFile( file, opts.chunked ? opts.chunkSize : 0 ); me.stack.push(act); return act.shift(); }; // 文件可能还在prepare中,也有可能已经完全准备好了。 if ( isPromise( next) ) { preparing = next.file; next = next[ next.pipe ? 'pipe' : 'then' ]( done ); next.file = preparing; return next; } return done( next ); } }, /** * @event uploadStart * @param {File} file File对象 * @description 某个文件开始上传前触发,一个文件只会触发一次。 * @for Uploader */ _prepareNextFile: function() { var me = this, file = me.request('fetch-file'), pending = me.pending, promise; if ( file ) { promise = me.request( 'before-send-file', file, function() { // 有可能文件被skip掉了。文件被skip掉后,状态坑定不是Queued. if ( file.getStatus() === Status.PROGRESS || file.getStatus() === Status.INTERRUPT ) { return file; } return me._finishFile( file ); }); me.owner.trigger( 'uploadStart', file ); file.setStatus( Status.PROGRESS ); promise.file = file; // 如果还在pending中,则替换成文件本身。 promise.done(function() { var idx = $.inArray( promise, pending ); ~idx && pending.splice( idx, 1, file ); }); // befeore-send-file的钩子就有错误发生。 promise.fail(function( reason ) { file.setStatus( Status.ERROR, reason ); me.owner.trigger( 'uploadError', file, reason ); me.owner.trigger( 'uploadComplete', file ); }); pending.push( promise ); } }, // 让出位置了,可以让其他分片开始上传 _popBlock: function( block ) { var idx = $.inArray( block, this.pool ); this.pool.splice( idx, 1 ); block.file.remaning--; this.remaning--; }, // 开始上传,可以被掉过。如果promise被reject了,则表示跳过此分片。 _startSend: function( block ) { var me = this, file = block.file, promise; // 有可能在 before-send-file 的 promise 期间改变了文件状态。 // 如:暂停,取消 // 我们不能中断 promise, 但是可以在 promise 完后,不做上传操作。 if ( file.getStatus() !== Status.PROGRESS ) { // 如果是中断,则还需要放回去。 if (file.getStatus() === Status.INTERRUPT) { me._putback(block); } return; } me.pool.push( block ); me.remaning++; // 如果没有分片,则直接使用原始的。 // 不会丢失content-type信息。 block.blob = block.chunks === 1 ? file.source : file.source.slice( block.start, block.end ); // hook, 每个分片发送之前可能要做些异步的事情。 promise = me.request( 'before-send', block, function() { // 有可能文件已经上传出错了,所以不需要再传输了。 if ( file.getStatus() === Status.PROGRESS ) { me._doSend( block ); } else { me._popBlock( block ); Base.nextTick( me.__tick ); } }); // 如果为fail了,则跳过此分片。 promise.fail(function() { if ( file.remaning === 1 ) { me._finishFile( file ).always(function() { block.percentage = 1; me._popBlock( block ); me.owner.trigger( 'uploadComplete', file ); Base.nextTick( me.__tick ); }); } else { block.percentage = 1; me.updateFileProgress( file ); me._popBlock( block ); Base.nextTick( me.__tick ); } }); }, /** * @event uploadBeforeSend * @param {Object} object * @param {Object} data 默认的上传参数,可以扩展此对象来控制上传参数。 * @param {Object} headers 可以扩展此对象来控制上传头部。 * @description 当某个文件的分块在发送前触发,主要用来询问是否要添加附带参数,大文件在开起分片上传的前提下此事件可能会触发多次。 * @for Uploader */ /** * @event uploadAccept * @param {Object} object * @param {Object} ret 服务端的返回数据,json格式,如果服务端不是json格式,从ret._raw中取数据,自行解析。 * @description 当某个文件上传到服务端响应后,会派送此事件来询问服务端响应是否有效。如果此事件handler返回值为`false`, 则此文件将派送`server`类型的`uploadError`事件。 * @for Uploader */ /** * @event uploadProgress * @param {File} file File对象 * @param {Number} percentage 上传进度 * @description 上传过程中触发,携带上传进度。 * @for Uploader */ /** * @event uploadError * @param {File} file File对象 * @param {String} reason 出错的code * @description 当文件上传出错时触发。 * @for Uploader */ /** * @event uploadSuccess * @param {File} file File对象 * @param {Object} response 服务端返回的数据 * @description 当文件上传成功时触发。 * @for Uploader */ /** * @event uploadComplete * @param {File} [file] File对象 * @description 不管成功或者失败,文件上传完成时触发。 * @for Uploader */ // 做上传操作。 _doSend: function( block ) { var me = this, owner = me.owner, opts = me.options, file = block.file, tr = new Transport( opts ), data = $.extend({}, opts.formData ), headers = $.extend({}, opts.headers ), requestAccept, ret; block.transport = tr; tr.on( 'destroy', function() { delete block.transport; me._popBlock( block ); Base.nextTick( me.__tick ); }); // 广播上传进度。以文件为单位。 tr.on( 'progress', function( percentage ) { block.percentage = percentage; me.updateFileProgress( file ); }); // 用来询问,是否返回的结果是有错误的。 requestAccept = function( reject ) { var fn; ret = tr.getResponseAsJson() || {}; ret._raw = tr.getResponse(); fn = function( value ) { reject = value; }; // 服务端响应了,不代表成功了,询问是否响应正确。 if ( !owner.trigger( 'uploadAccept', block, ret, fn ) ) { reject = reject || 'server'; } return reject; }; // 尝试重试,然后广播文件上传出错。 tr.on( 'error', function( type, flag ) { block.retried = block.retried || 0; // 自动重试 if ( block.chunks > 1 && ~'http,abort'.indexOf( type ) && block.retried < opts.chunkRetry ) { block.retried++; tr.send(); } else { // http status 500 ~ 600 if ( !flag && type === 'server' ) { type = requestAccept( type ); } file.setStatus( Status.ERROR, type ); owner.trigger( 'uploadError', file, type ); owner.trigger( 'uploadComplete', file ); } }); // 上传成功 tr.on( 'load', function() { var reason; // 如果非预期,转向上传出错。 if ( (reason = requestAccept()) ) { tr.trigger( 'error', reason, true ); return; } // 全部上传完成。 if ( file.remaning === 1 ) { me._finishFile( file, ret ); } else { tr.destroy(); } }); // 配置默认的上传字段。 data = $.extend( data, { id: file.id, name: file.name, type: file.type, lastModifiedDate: file.lastModifiedDate, size: file.size }); block.chunks > 1 && $.extend( data, { chunks: block.chunks, chunk: block.chunk }); // 在发送之间可以添加字段什么的。。。 // 如果默认的字段不够使用,可以通过监听此事件来扩展 owner.trigger( 'uploadBeforeSend', block, data, headers ); // 开始发送。 tr.appendBlob( opts.fileVal, block.blob, file.name ); tr.append( data ); tr.setRequestHeader( headers ); tr.send(); }, // 完成上传。 _finishFile: function( file, ret, hds ) { var owner = this.owner; return owner .request( 'after-send-file', arguments, function() { file.setStatus( Status.COMPLETE ); owner.trigger( 'uploadSuccess', file, ret, hds ); }) .fail(function( reason ) { // 如果外部已经标记为invalid什么的,不再改状态。 if ( file.getStatus() === Status.PROGRESS ) { file.setStatus( Status.ERROR, reason ); } owner.trigger( 'uploadError', file, reason ); }) .always(function() { owner.trigger( 'uploadComplete', file ); }); }, updateFileProgress: function(file) { var totalPercent = 0, uploaded = 0; if (!file.blocks) { return; } $.each( file.blocks, function( _, v ) { uploaded += (v.percentage || 0) * (v.end - v.start); }); totalPercent = uploaded / file.size; this.owner.trigger( 'uploadProgress', file, totalPercent || 0 ); } }); }); /** * @fileOverview 各种验证,包括文件总大小是否超出、单文件是否超出和文件是否重复。 */ define('widgets/validator',[ 'base', 'uploader', 'file', 'widgets/widget' ], function( Base, Uploader, WUFile ) { var $ = Base.$, validators = {}, api; /** * @event error * @param {String} type 错误类型。 * @description 当validate不通过时,会以派送错误事件的形式通知调用者。通过`upload.on('error', handler)`可以捕获到此类错误,目前有以下错误会在特定的情况下派送错来。 * * * `Q_EXCEED_NUM_LIMIT` 在设置了`fileNumLimit`且尝试给`uploader`添加的文件数量超出这个值时派送。 * * `Q_EXCEED_SIZE_LIMIT` 在设置了`Q_EXCEED_SIZE_LIMIT`且尝试给`uploader`添加的文件总大小超出这个值时派送。 * * `Q_TYPE_DENIED` 当文件类型不满足时触发。。 * @for Uploader */ // 暴露给外面的api api = { // 添加验证器 addValidator: function( type, cb ) { validators[ type ] = cb; }, // 移除验证器 removeValidator: function( type ) { delete validators[ type ]; } }; // 在Uploader初始化的时候启动Validators的初始化 Uploader.register({ name: 'validator', init: function() { var me = this; Base.nextTick(function() { $.each( validators, function() { this.call( me.owner ); }); }); } }); /** * @property {int} [fileNumLimit=undefined] * @namespace options * @for Uploader * @description 验证文件总数量, 超出则不允许加入队列。 */ api.addValidator( 'fileNumLimit', function() { var uploader = this, opts = uploader.options, count = 0, max = parseInt( opts.fileNumLimit, 10 ), flag = true; if ( !max ) { return; } uploader.on( 'beforeFileQueued', function( file ) { if ( count >= max && flag ) { flag = false; this.trigger( 'error', 'Q_EXCEED_NUM_LIMIT', max, file ); setTimeout(function() { flag = true; }, 1 ); } return count >= max ? false : true; }); uploader.on( 'fileQueued', function() { count++; }); uploader.on( 'fileDequeued', function() { count--; }); uploader.on( 'reset', function() { count = 0; }); }); /** * @property {int} [fileSizeLimit=undefined] * @namespace options * @for Uploader * @description 验证文件总大小是否超出限制, 超出则不允许加入队列。 */ api.addValidator( 'fileSizeLimit', function() { var uploader = this, opts = uploader.options, count = 0, max = parseInt( opts.fileSizeLimit, 10 ), flag = true; if ( !max ) { return; } uploader.on( 'beforeFileQueued', function( file ) { var invalid = count + file.size > max; if ( invalid && flag ) { flag = false; this.trigger( 'error', 'Q_EXCEED_SIZE_LIMIT', max, file ); setTimeout(function() { flag = true; }, 1 ); } return invalid ? false : true; }); uploader.on( 'fileQueued', function( file ) { count += file.size; }); uploader.on( 'fileDequeued', function( file ) { count -= file.size; }); uploader.on( 'reset', function() { count = 0; }); }); /** * @property {int} [fileSingleSizeLimit=undefined] * @namespace options * @for Uploader * @description 验证单个文件大小是否超出限制, 超出则不允许加入队列。 */ api.addValidator( 'fileSingleSizeLimit', function() { var uploader = this, opts = uploader.options, max = opts.fileSingleSizeLimit; if ( !max ) { return; } uploader.on( 'beforeFileQueued', function( file ) { if ( file.size > max ) { file.setStatus( WUFile.Status.INVALID, 'exceed_size' ); this.trigger( 'error', 'F_EXCEED_SIZE', max, file ); return false; } }); }); /** * @property {Boolean} [duplicate=undefined] * @namespace options * @for Uploader * @description 去重, 根据文件名字、文件大小和最后修改时间来生成hash Key. */ api.addValidator( 'duplicate', function() { var uploader = this, opts = uploader.options, mapping = {}; if ( opts.duplicate ) { return; } function hashString( str ) { var hash = 0, i = 0, len = str.length, _char; for ( ; i < len; i++ ) { _char = str.charCodeAt( i ); hash = _char + (hash << 6) + (hash << 16) - hash; } return hash; } uploader.on( 'beforeFileQueued', function( file ) { var hash = file.__hash || (file.__hash = hashString( file.name + file.size + file.lastModifiedDate )); // 已经重复了 if ( mapping[ hash ] ) { this.trigger( 'error', 'F_DUPLICATE', file ); return false; } }); uploader.on( 'fileQueued', function( file ) { var hash = file.__hash; hash && (mapping[ hash ] = true); }); uploader.on( 'fileDequeued', function( file ) { var hash = file.__hash; hash && (delete mapping[ hash ]); }); uploader.on( 'reset', function() { mapping = {}; }); }); return api; }); /** * @fileOverview Md5 */ define('lib/md5',[ 'runtime/client', 'mediator' ], function( RuntimeClient, Mediator ) { function Md5() { RuntimeClient.call( this, 'Md5' ); } // 让 Md5 具备事件功能。 Mediator.installTo( Md5.prototype ); Md5.prototype.loadFromBlob = function( blob ) { var me = this; if ( me.getRuid() ) { me.disconnectRuntime(); } // 连接到blob归属的同一个runtime. me.connectRuntime( blob.ruid, function() { me.exec('init'); me.exec( 'loadFromBlob', blob ); }); }; Md5.prototype.getResult = function() { return this.exec('getResult'); }; return Md5; }); /** * @fileOverview 图片操作, 负责预览图片和上传前压缩图片 */ define('widgets/md5',[ 'base', 'uploader', 'lib/md5', 'lib/blob', 'widgets/widget' ], function( Base, Uploader, Md5, Blob ) { return Uploader.register({ name: 'md5', /** * 计算文件 md5 值,返回一个 promise 对象,可以监听 progress 进度。 * * * @method md5File * @grammar md5File( file[, start[, end]] ) => promise * @for Uploader * @example * * uploader.on( 'fileQueued', function( file ) { * var $li = ...; * * uploader.md5File( file ) * * // 及时显示进度 * .progress(function(percentage) { * console.log('Percentage:', percentage); * }) * * // 完成 * .then(function(val) { * console.log('md5 result:', val); * }); * * }); */ md5File: function( file, start, end ) { var md5 = new Md5(), deferred = Base.Deferred(), blob = (file instanceof Blob) ? file : this.request( 'get-file', file ).source; md5.on( 'progress load', function( e ) { e = e || {}; deferred.notify( e.total ? e.loaded / e.total : 1 ); }); md5.on( 'complete', function() { deferred.resolve( md5.getResult() ); }); md5.on( 'error', function( reason ) { deferred.reject( reason ); }); if ( arguments.length > 1 ) { start = start || 0; end = end || 0; start < 0 && (start = blob.size + start); end < 0 && (end = blob.size + end); end = Math.min( end, blob.size ); blob = blob.slice( start, end ); } md5.loadFromBlob( blob ); return deferred.promise(); } }); }); /** * @fileOverview Runtime管理器,负责Runtime的选择, 连接 */ define('runtime/compbase',[],function() { function CompBase( owner, runtime ) { this.owner = owner; this.options = owner.options; this.getRuntime = function() { return runtime; }; this.getRuid = function() { return runtime.uid; }; this.trigger = function() { return owner.trigger.apply( owner, arguments ); }; } return CompBase; }); /** * @fileOverview Html5Runtime */ define('runtime/html5/runtime',[ 'base', 'runtime/runtime', 'runtime/compbase' ], function( Base, Runtime, CompBase ) { var type = 'html5', components = {}; function Html5Runtime() { var pool = {}, me = this, destroy = this.destroy; Runtime.apply( me, arguments ); me.type = type; // 这个方法的调用者,实际上是RuntimeClient me.exec = function( comp, fn/*, args...*/) { var client = this, uid = client.uid, args = Base.slice( arguments, 2 ), instance; if ( components[ comp ] ) { instance = pool[ uid ] = pool[ uid ] || new components[ comp ]( client, me ); if ( instance[ fn ] ) { return instance[ fn ].apply( instance, args ); } } }; me.destroy = function() { // @todo 删除池子中的所有实例 return destroy && destroy.apply( this, arguments ); }; } Base.inherits( Runtime, { constructor: Html5Runtime, // 不需要连接其他程序,直接执行callback init: function() { var me = this; setTimeout(function() { me.trigger('ready'); }, 1 ); } }); // 注册Components Html5Runtime.register = function( name, component ) { var klass = components[ name ] = Base.inherits( CompBase, component ); return klass; }; // 注册html5运行时。 // 只有在支持的前提下注册。 if ( window.Blob && window.FileReader && window.DataView ) { Runtime.addRuntime( type, Html5Runtime ); } return Html5Runtime; }); /** * @fileOverview Blob Html实现 */ define('runtime/html5/blob',[ 'runtime/html5/runtime', 'lib/blob' ], function( Html5Runtime, Blob ) { return Html5Runtime.register( 'Blob', { slice: function( start, end ) { var blob = this.owner.source, slice = blob.slice || blob.webkitSlice || blob.mozSlice; blob = slice.call( blob, start, end ); return new Blob( this.getRuid(), blob ); } }); }); /** * @fileOverview FilePaste */ define('runtime/html5/dnd',[ 'base', 'runtime/html5/runtime', 'lib/file' ], function( Base, Html5Runtime, File ) { var $ = Base.$, prefix = 'webuploader-dnd-'; return Html5Runtime.register( 'DragAndDrop', { init: function() { var elem = this.elem = this.options.container; this.dragEnterHandler = Base.bindFn( this._dragEnterHandler, this ); this.dragOverHandler = Base.bindFn( this._dragOverHandler, this ); this.dragLeaveHandler = Base.bindFn( this._dragLeaveHandler, this ); this.dropHandler = Base.bindFn( this._dropHandler, this ); this.dndOver = false; elem.on( 'dragenter', this.dragEnterHandler ); elem.on( 'dragover', this.dragOverHandler ); elem.on( 'dragleave', this.dragLeaveHandler ); elem.on( 'drop', this.dropHandler ); if ( this.options.disableGlobalDnd ) { $( document ).on( 'dragover', this.dragOverHandler ); $( document ).on( 'drop', this.dropHandler ); } }, _dragEnterHandler: function( e ) { var me = this, denied = me._denied || false, items; e = e.originalEvent || e; if ( !me.dndOver ) { me.dndOver = true; // 注意只有 chrome 支持。 items = e.dataTransfer.items; if ( items && items.length ) { me._denied = denied = !me.trigger( 'accept', items ); } me.elem.addClass( prefix + 'over' ); me.elem[ denied ? 'addClass' : 'removeClass' ]( prefix + 'denied' ); } e.dataTransfer.dropEffect = denied ? 'none' : 'copy'; return false; }, _dragOverHandler: function( e ) { // 只处理框内的。 var parentElem = this.elem.parent().get( 0 ); if ( parentElem && !$.contains( parentElem, e.currentTarget ) ) { return false; } clearTimeout( this._leaveTimer ); this._dragEnterHandler.call( this, e ); return false; }, _dragLeaveHandler: function() { var me = this, handler; handler = function() { me.dndOver = false; me.elem.removeClass( prefix + 'over ' + prefix + 'denied' ); }; clearTimeout( me._leaveTimer ); me._leaveTimer = setTimeout( handler, 100 ); return false; }, _dropHandler: function( e ) { var me = this, ruid = me.getRuid(), parentElem = me.elem.parent().get( 0 ), dataTransfer, data; // 只处理框内的。 if ( parentElem && !$.contains( parentElem, e.currentTarget ) ) { return false; } e = e.originalEvent || e; dataTransfer = e.dataTransfer; // 如果是页面内拖拽,还不能处理,不阻止事件。 // 此处 ie11 下会报参数错误, try { data = dataTransfer.getData('text/html'); } catch( err ) { } if ( data ) { return; } me._getTansferFiles( dataTransfer, function( results ) { me.trigger( 'drop', $.map( results, function( file ) { return new File( ruid, file ); }) ); }); me.dndOver = false; me.elem.removeClass( prefix + 'over' ); return false; }, // 如果传入 callback 则去查看文件夹,否则只管当前文件夹。 _getTansferFiles: function( dataTransfer, callback ) { var results = [], promises = [], items, files, file, item, i, len, canAccessFolder; items = dataTransfer.items; files = dataTransfer.files; canAccessFolder = !!(items && items[ 0 ].webkitGetAsEntry); for ( i = 0, len = files.length; i < len; i++ ) { file = files[ i ]; item = items && items[ i ]; if ( canAccessFolder && item.webkitGetAsEntry().isDirectory ) { promises.push( this._traverseDirectoryTree( item.webkitGetAsEntry(), results ) ); } else { results.push( file ); } } Base.when.apply( Base, promises ).done(function() { if ( !results.length ) { return; } callback( results ); }); }, _traverseDirectoryTree: function( entry, results ) { var deferred = Base.Deferred(), me = this; if ( entry.isFile ) { entry.file(function( file ) { results.push( file ); deferred.resolve(); }); } else if ( entry.isDirectory ) { entry.createReader().readEntries(function( entries ) { var len = entries.length, promises = [], arr = [], // 为了保证顺序。 i; for ( i = 0; i < len; i++ ) { promises.push( me._traverseDirectoryTree( entries[ i ], arr ) ); } Base.when.apply( Base, promises ).then(function() { results.push.apply( results, arr ); deferred.resolve(); }, deferred.reject ); }); } return deferred.promise(); }, destroy: function() { var elem = this.elem; // 还没 init 就调用 destroy if (!elem) { return; } elem.off( 'dragenter', this.dragEnterHandler ); elem.off( 'dragover', this.dragOverHandler ); elem.off( 'dragleave', this.dragLeaveHandler ); elem.off( 'drop', this.dropHandler ); if ( this.options.disableGlobalDnd ) { $( document ).off( 'dragover', this.dragOverHandler ); $( document ).off( 'drop', this.dropHandler ); } } }); }); /** * @fileOverview FilePaste */ define('runtime/html5/filepaste',[ 'base', 'runtime/html5/runtime', 'lib/file' ], function( Base, Html5Runtime, File ) { return Html5Runtime.register( 'FilePaste', { init: function() { var opts = this.options, elem = this.elem = opts.container, accept = '.*', arr, i, len, item; // accetp的mimeTypes中生成匹配正则。 if ( opts.accept ) { arr = []; for ( i = 0, len = opts.accept.length; i < len; i++ ) { item = opts.accept[ i ].mimeTypes; item && arr.push( item ); } if ( arr.length ) { accept = arr.join(','); accept = accept.replace( /,/g, '|' ).replace( /\*/g, '.*' ); } } this.accept = accept = new RegExp( accept, 'i' ); this.hander = Base.bindFn( this._pasteHander, this ); elem.on( 'paste', this.hander ); }, _pasteHander: function( e ) { var allowed = [], ruid = this.getRuid(), items, item, blob, i, len; e = e.originalEvent || e; items = e.clipboardData.items; for ( i = 0, len = items.length; i < len; i++ ) { item = items[ i ]; if ( item.kind !== 'file' || !(blob = item.getAsFile()) ) { continue; } allowed.push( new File( ruid, blob ) ); } if ( allowed.length ) { // 不阻止非文件粘贴(文字粘贴)的事件冒泡 e.preventDefault(); e.stopPropagation(); this.trigger( 'paste', allowed ); } }, destroy: function() { this.elem.off( 'paste', this.hander ); } }); }); /** * @fileOverview FilePicker */ define('runtime/html5/filepicker',[ 'base', 'runtime/html5/runtime' ], function( Base, Html5Runtime ) { var $ = Base.$; return Html5Runtime.register( 'FilePicker', { init: function() { var container = this.getRuntime().getContainer(), me = this, owner = me.owner, opts = me.options, label = this.label = $( document.createElement('label') ), input = this.input = $( document.createElement('input') ), arr, i, len, mouseHandler; input.attr( 'type', 'file' ); input.attr( 'name', opts.name ); input.addClass('webuploader-element-invisible'); label.on( 'click', function() { input.trigger('click'); }); label.css({ opacity: 0, width: '100%', height: '100%', display: 'block', cursor: 'pointer', background: '#ffffff' }); if ( opts.multiple ) { input.attr( 'multiple', 'multiple' ); } // @todo Firefox不支持单独指定后缀 if ( opts.accept && opts.accept.length > 0 ) { arr = []; for ( i = 0, len = opts.accept.length; i < len; i++ ) { arr.push( opts.accept[ i ].mimeTypes ); } input.attr( 'accept', arr.join(',') ); } container.append( input ); container.append( label ); mouseHandler = function( e ) { owner.trigger( e.type ); }; input.on( 'change', function( e ) { var fn = arguments.callee, clone; me.files = e.target.files; // reset input clone = this.cloneNode( true ); clone.value = null; this.parentNode.replaceChild( clone, this ); input.off(); input = $( clone ).on( 'change', fn ) .on( 'mouseenter mouseleave', mouseHandler ); owner.trigger('change'); }); label.on( 'mouseenter mouseleave', mouseHandler ); }, getFiles: function() { return this.files; }, destroy: function() { this.input.off(); this.label.off(); } }); }); /** * Terms: * * Uint8Array, FileReader, BlobBuilder, atob, ArrayBuffer * @fileOverview Image控件 */ define('runtime/html5/util',[ 'base' ], function( Base ) { var urlAPI = window.createObjectURL && window || window.URL && URL.revokeObjectURL && URL || window.webkitURL, createObjectURL = Base.noop, revokeObjectURL = createObjectURL; if ( urlAPI ) { // 更安全的方式调用,比如android里面就能把context改成其他的对象。 createObjectURL = function() { return urlAPI.createObjectURL.apply( urlAPI, arguments ); }; revokeObjectURL = function() { return urlAPI.revokeObjectURL.apply( urlAPI, arguments ); }; } return { createObjectURL: createObjectURL, revokeObjectURL: revokeObjectURL, dataURL2Blob: function( dataURI ) { var byteStr, intArray, ab, i, mimetype, parts; parts = dataURI.split(','); if ( ~parts[ 0 ].indexOf('base64') ) { byteStr = atob( parts[ 1 ] ); } else { byteStr = decodeURIComponent( parts[ 1 ] ); } ab = new ArrayBuffer( byteStr.length ); intArray = new Uint8Array( ab ); for ( i = 0; i < byteStr.length; i++ ) { intArray[ i ] = byteStr.charCodeAt( i ); } mimetype = parts[ 0 ].split(':')[ 1 ].split(';')[ 0 ]; return this.arrayBufferToBlob( ab, mimetype ); }, dataURL2ArrayBuffer: function( dataURI ) { var byteStr, intArray, i, parts; parts = dataURI.split(','); if ( ~parts[ 0 ].indexOf('base64') ) { byteStr = atob( parts[ 1 ] ); } else { byteStr = decodeURIComponent( parts[ 1 ] ); } intArray = new Uint8Array( byteStr.length ); for ( i = 0; i < byteStr.length; i++ ) { intArray[ i ] = byteStr.charCodeAt( i ); } return intArray.buffer; }, arrayBufferToBlob: function( buffer, type ) { var builder = window.BlobBuilder || window.WebKitBlobBuilder, bb; // android不支持直接new Blob, 只能借助blobbuilder. if ( builder ) { bb = new builder(); bb.append( buffer ); return bb.getBlob( type ); } return new Blob([ buffer ], type ? { type: type } : {} ); }, // 抽出来主要是为了解决android下面canvas.toDataUrl不支持jpeg. // 你得到的结果是png. canvasToDataUrl: function( canvas, type, quality ) { return canvas.toDataURL( type, quality / 100 ); }, // imagemeat会复写这个方法,如果用户选择加载那个文件了的话。 parseMeta: function( blob, callback ) { callback( false, {}); }, // imagemeat会复写这个方法,如果用户选择加载那个文件了的话。 updateImageHead: function( data ) { return data; } }; }); /** * Terms: * * Uint8Array, FileReader, BlobBuilder, atob, ArrayBuffer * @fileOverview Image控件 */ define('runtime/html5/imagemeta',[ 'runtime/html5/util' ], function( Util ) { var api; api = { parsers: { 0xffe1: [] }, maxMetaDataSize: 262144, parse: function( blob, cb ) { var me = this, fr = new FileReader(); fr.onload = function() { cb( false, me._parse( this.result ) ); fr = fr.onload = fr.onerror = null; }; fr.onerror = function( e ) { cb( e.message ); fr = fr.onload = fr.onerror = null; }; blob = blob.slice( 0, me.maxMetaDataSize ); fr.readAsArrayBuffer( blob.getSource() ); }, _parse: function( buffer, noParse ) { if ( buffer.byteLength < 6 ) { return; } var dataview = new DataView( buffer ), offset = 2, maxOffset = dataview.byteLength - 4, headLength = offset, ret = {}, markerBytes, markerLength, parsers, i; if ( dataview.getUint16( 0 ) === 0xffd8 ) { while ( offset < maxOffset ) { markerBytes = dataview.getUint16( offset ); if ( markerBytes >= 0xffe0 && markerBytes <= 0xffef || markerBytes === 0xfffe ) { markerLength = dataview.getUint16( offset + 2 ) + 2; if ( offset + markerLength > dataview.byteLength ) { break; } parsers = api.parsers[ markerBytes ]; if ( !noParse && parsers ) { for ( i = 0; i < parsers.length; i += 1 ) { parsers[ i ].call( api, dataview, offset, markerLength, ret ); } } offset += markerLength; headLength = offset; } else { break; } } if ( headLength > 6 ) { if ( buffer.slice ) { ret.imageHead = buffer.slice( 2, headLength ); } else { // Workaround for IE10, which does not yet // support ArrayBuffer.slice: ret.imageHead = new Uint8Array( buffer ) .subarray( 2, headLength ); } } } return ret; }, updateImageHead: function( buffer, head ) { var data = this._parse( buffer, true ), buf1, buf2, bodyoffset; bodyoffset = 2; if ( data.imageHead ) { bodyoffset = 2 + data.imageHead.byteLength; } if ( buffer.slice ) { buf2 = buffer.slice( bodyoffset ); } else { buf2 = new Uint8Array( buffer ).subarray( bodyoffset ); } buf1 = new Uint8Array( head.byteLength + 2 + buf2.byteLength ); buf1[ 0 ] = 0xFF; buf1[ 1 ] = 0xD8; buf1.set( new Uint8Array( head ), 2 ); buf1.set( new Uint8Array( buf2 ), head.byteLength + 2 ); return buf1.buffer; } }; Util.parseMeta = function() { return api.parse.apply( api, arguments ); }; Util.updateImageHead = function() { return api.updateImageHead.apply( api, arguments ); }; return api; }); /** * 代码来自于:https://github.com/blueimp/JavaScript-Load-Image * 暂时项目中只用了orientation. * * 去除了 Exif Sub IFD Pointer, GPS Info IFD Pointer, Exif Thumbnail. * @fileOverview EXIF解析 */ // Sample // ==================================== // Make : Apple // Model : iPhone 4S // Orientation : 1 // XResolution : 72 [72/1] // YResolution : 72 [72/1] // ResolutionUnit : 2 // Software : QuickTime 7.7.1 // DateTime : 2013:09:01 22:53:55 // ExifIFDPointer : 190 // ExposureTime : 0.058823529411764705 [1/17] // FNumber : 2.4 [12/5] // ExposureProgram : Normal program // ISOSpeedRatings : 800 // ExifVersion : 0220 // DateTimeOriginal : 2013:09:01 22:52:51 // DateTimeDigitized : 2013:09:01 22:52:51 // ComponentsConfiguration : YCbCr // ShutterSpeedValue : 4.058893515764426 // ApertureValue : 2.5260688216892597 [4845/1918] // BrightnessValue : -0.3126686601998395 // MeteringMode : Pattern // Flash : Flash did not fire, compulsory flash mode // FocalLength : 4.28 [107/25] // SubjectArea : [4 values] // FlashpixVersion : 0100 // ColorSpace : 1 // PixelXDimension : 2448 // PixelYDimension : 3264 // SensingMethod : One-chip color area sensor // ExposureMode : 0 // WhiteBalance : Auto white balance // FocalLengthIn35mmFilm : 35 // SceneCaptureType : Standard define('runtime/html5/imagemeta/exif',[ 'base', 'runtime/html5/imagemeta' ], function( Base, ImageMeta ) { var EXIF = {}; EXIF.ExifMap = function() { return this; }; EXIF.ExifMap.prototype.map = { 'Orientation': 0x0112 }; EXIF.ExifMap.prototype.get = function( id ) { return this[ id ] || this[ this.map[ id ] ]; }; EXIF.exifTagTypes = { // byte, 8-bit unsigned int: 1: { getValue: function( dataView, dataOffset ) { return dataView.getUint8( dataOffset ); }, size: 1 }, // ascii, 8-bit byte: 2: { getValue: function( dataView, dataOffset ) { return String.fromCharCode( dataView.getUint8( dataOffset ) ); }, size: 1, ascii: true }, // short, 16 bit int: 3: { getValue: function( dataView, dataOffset, littleEndian ) { return dataView.getUint16( dataOffset, littleEndian ); }, size: 2 }, // long, 32 bit int: 4: { getValue: function( dataView, dataOffset, littleEndian ) { return dataView.getUint32( dataOffset, littleEndian ); }, size: 4 }, // rational = two long values, // first is numerator, second is denominator: 5: { getValue: function( dataView, dataOffset, littleEndian ) { return dataView.getUint32( dataOffset, littleEndian ) / dataView.getUint32( dataOffset + 4, littleEndian ); }, size: 8 }, // slong, 32 bit signed int: 9: { getValue: function( dataView, dataOffset, littleEndian ) { return dataView.getInt32( dataOffset, littleEndian ); }, size: 4 }, // srational, two slongs, first is numerator, second is denominator: 10: { getValue: function( dataView, dataOffset, littleEndian ) { return dataView.getInt32( dataOffset, littleEndian ) / dataView.getInt32( dataOffset + 4, littleEndian ); }, size: 8 } }; // undefined, 8-bit byte, value depending on field: EXIF.exifTagTypes[ 7 ] = EXIF.exifTagTypes[ 1 ]; EXIF.getExifValue = function( dataView, tiffOffset, offset, type, length, littleEndian ) { var tagType = EXIF.exifTagTypes[ type ], tagSize, dataOffset, values, i, str, c; if ( !tagType ) { Base.log('Invalid Exif data: Invalid tag type.'); return; } tagSize = tagType.size * length; // Determine if the value is contained in the dataOffset bytes, // or if the value at the dataOffset is a pointer to the actual data: dataOffset = tagSize > 4 ? tiffOffset + dataView.getUint32( offset + 8, littleEndian ) : (offset + 8); if ( dataOffset + tagSize > dataView.byteLength ) { Base.log('Invalid Exif data: Invalid data offset.'); return; } if ( length === 1 ) { return tagType.getValue( dataView, dataOffset, littleEndian ); } values = []; for ( i = 0; i < length; i += 1 ) { values[ i ] = tagType.getValue( dataView, dataOffset + i * tagType.size, littleEndian ); } if ( tagType.ascii ) { str = ''; // Concatenate the chars: for ( i = 0; i < values.length; i += 1 ) { c = values[ i ]; // Ignore the terminating NULL byte(s): if ( c === '\u0000' ) { break; } str += c; } return str; } return values; }; EXIF.parseExifTag = function( dataView, tiffOffset, offset, littleEndian, data ) { var tag = dataView.getUint16( offset, littleEndian ); data.exif[ tag ] = EXIF.getExifValue( dataView, tiffOffset, offset, dataView.getUint16( offset + 2, littleEndian ), // tag type dataView.getUint32( offset + 4, littleEndian ), // tag length littleEndian ); }; EXIF.parseExifTags = function( dataView, tiffOffset, dirOffset, littleEndian, data ) { var tagsNumber, dirEndOffset, i; if ( dirOffset + 6 > dataView.byteLength ) { Base.log('Invalid Exif data: Invalid directory offset.'); return; } tagsNumber = dataView.getUint16( dirOffset, littleEndian ); dirEndOffset = dirOffset + 2 + 12 * tagsNumber; if ( dirEndOffset + 4 > dataView.byteLength ) { Base.log('Invalid Exif data: Invalid directory size.'); return; } for ( i = 0; i < tagsNumber; i += 1 ) { this.parseExifTag( dataView, tiffOffset, dirOffset + 2 + 12 * i, // tag offset littleEndian, data ); } // Return the offset to the next directory: return dataView.getUint32( dirEndOffset, littleEndian ); }; // EXIF.getExifThumbnail = function(dataView, offset, length) { // var hexData, // i, // b; // if (!length || offset + length > dataView.byteLength) { // Base.log('Invalid Exif data: Invalid thumbnail data.'); // return; // } // hexData = []; // for (i = 0; i < length; i += 1) { // b = dataView.getUint8(offset + i); // hexData.push((b < 16 ? '0' : '') + b.toString(16)); // } // return 'data:image/jpeg,%' + hexData.join('%'); // }; EXIF.parseExifData = function( dataView, offset, length, data ) { var tiffOffset = offset + 10, littleEndian, dirOffset; // Check for the ASCII code for "Exif" (0x45786966): if ( dataView.getUint32( offset + 4 ) !== 0x45786966 ) { // No Exif data, might be XMP data instead return; } if ( tiffOffset + 8 > dataView.byteLength ) { Base.log('Invalid Exif data: Invalid segment size.'); return; } // Check for the two null bytes: if ( dataView.getUint16( offset + 8 ) !== 0x0000 ) { Base.log('Invalid Exif data: Missing byte alignment offset.'); return; } // Check the byte alignment: switch ( dataView.getUint16( tiffOffset ) ) { case 0x4949: littleEndian = true; break; case 0x4D4D: littleEndian = false; break; default: Base.log('Invalid Exif data: Invalid byte alignment marker.'); return; } // Check for the TIFF tag marker (0x002A): if ( dataView.getUint16( tiffOffset + 2, littleEndian ) !== 0x002A ) { Base.log('Invalid Exif data: Missing TIFF marker.'); return; } // Retrieve the directory offset bytes, usually 0x00000008 or 8 decimal: dirOffset = dataView.getUint32( tiffOffset + 4, littleEndian ); // Create the exif object to store the tags: data.exif = new EXIF.ExifMap(); // Parse the tags of the main image directory and retrieve the // offset to the next directory, usually the thumbnail directory: dirOffset = EXIF.parseExifTags( dataView, tiffOffset, tiffOffset + dirOffset, littleEndian, data ); // 尝试读取缩略图 // if ( dirOffset ) { // thumbnailData = {exif: {}}; // dirOffset = EXIF.parseExifTags( // dataView, // tiffOffset, // tiffOffset + dirOffset, // littleEndian, // thumbnailData // ); // // Check for JPEG Thumbnail offset: // if (thumbnailData.exif[0x0201]) { // data.exif.Thumbnail = EXIF.getExifThumbnail( // dataView, // tiffOffset + thumbnailData.exif[0x0201], // thumbnailData.exif[0x0202] // Thumbnail data length // ); // } // } }; ImageMeta.parsers[ 0xffe1 ].push( EXIF.parseExifData ); return EXIF; }); /** * 这个方式性能不行,但是可以解决android里面的toDataUrl的bug * android里面toDataUrl('image/jpege')得到的结果却是png. * * 所以这里没辙,只能借助这个工具 * @fileOverview jpeg encoder */ define('runtime/html5/jpegencoder',[], function( require, exports, module ) { /* Copyright (c) 2008, Adobe Systems Incorporated All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of Adobe Systems Incorporated nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* JPEG encoder ported to JavaScript and optimized by Andreas Ritter, www.bytestrom.eu, 11/2009 Basic GUI blocking jpeg encoder */ function JPEGEncoder(quality) { var self = this; var fround = Math.round; var ffloor = Math.floor; var YTable = new Array(64); var UVTable = new Array(64); var fdtbl_Y = new Array(64); var fdtbl_UV = new Array(64); var YDC_HT; var UVDC_HT; var YAC_HT; var UVAC_HT; var bitcode = new Array(65535); var category = new Array(65535); var outputfDCTQuant = new Array(64); var DU = new Array(64); var byteout = []; var bytenew = 0; var bytepos = 7; var YDU = new Array(64); var UDU = new Array(64); var VDU = new Array(64); var clt = new Array(256); var RGB_YUV_TABLE = new Array(2048); var currentQuality; var ZigZag = [ 0, 1, 5, 6,14,15,27,28, 2, 4, 7,13,16,26,29,42, 3, 8,12,17,25,30,41,43, 9,11,18,24,31,40,44,53, 10,19,23,32,39,45,52,54, 20,22,33,38,46,51,55,60, 21,34,37,47,50,56,59,61, 35,36,48,49,57,58,62,63 ]; var std_dc_luminance_nrcodes = [0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0]; var std_dc_luminance_values = [0,1,2,3,4,5,6,7,8,9,10,11]; var std_ac_luminance_nrcodes = [0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,0x7d]; var std_ac_luminance_values = [ 0x01,0x02,0x03,0x00,0x04,0x11,0x05,0x12, 0x21,0x31,0x41,0x06,0x13,0x51,0x61,0x07, 0x22,0x71,0x14,0x32,0x81,0x91,0xa1,0x08, 0x23,0x42,0xb1,0xc1,0x15,0x52,0xd1,0xf0, 0x24,0x33,0x62,0x72,0x82,0x09,0x0a,0x16, 0x17,0x18,0x19,0x1a,0x25,0x26,0x27,0x28, 0x29,0x2a,0x34,0x35,0x36,0x37,0x38,0x39, 0x3a,0x43,0x44,0x45,0x46,0x47,0x48,0x49, 0x4a,0x53,0x54,0x55,0x56,0x57,0x58,0x59, 0x5a,0x63,0x64,0x65,0x66,0x67,0x68,0x69, 0x6a,0x73,0x74,0x75,0x76,0x77,0x78,0x79, 0x7a,0x83,0x84,0x85,0x86,0x87,0x88,0x89, 0x8a,0x92,0x93,0x94,0x95,0x96,0x97,0x98, 0x99,0x9a,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7, 0xa8,0xa9,0xaa,0xb2,0xb3,0xb4,0xb5,0xb6, 0xb7,0xb8,0xb9,0xba,0xc2,0xc3,0xc4,0xc5, 0xc6,0xc7,0xc8,0xc9,0xca,0xd2,0xd3,0xd4, 0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xe1,0xe2, 0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea, 0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8, 0xf9,0xfa ]; var std_dc_chrominance_nrcodes = [0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0]; var std_dc_chrominance_values = [0,1,2,3,4,5,6,7,8,9,10,11]; var std_ac_chrominance_nrcodes = [0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,0x77]; var std_ac_chrominance_values = [ 0x00,0x01,0x02,0x03,0x11,0x04,0x05,0x21, 0x31,0x06,0x12,0x41,0x51,0x07,0x61,0x71, 0x13,0x22,0x32,0x81,0x08,0x14,0x42,0x91, 0xa1,0xb1,0xc1,0x09,0x23,0x33,0x52,0xf0, 0x15,0x62,0x72,0xd1,0x0a,0x16,0x24,0x34, 0xe1,0x25,0xf1,0x17,0x18,0x19,0x1a,0x26, 0x27,0x28,0x29,0x2a,0x35,0x36,0x37,0x38, 0x39,0x3a,0x43,0x44,0x45,0x46,0x47,0x48, 0x49,0x4a,0x53,0x54,0x55,0x56,0x57,0x58, 0x59,0x5a,0x63,0x64,0x65,0x66,0x67,0x68, 0x69,0x6a,0x73,0x74,0x75,0x76,0x77,0x78, 0x79,0x7a,0x82,0x83,0x84,0x85,0x86,0x87, 0x88,0x89,0x8a,0x92,0x93,0x94,0x95,0x96, 0x97,0x98,0x99,0x9a,0xa2,0xa3,0xa4,0xa5, 0xa6,0xa7,0xa8,0xa9,0xaa,0xb2,0xb3,0xb4, 0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xc2,0xc3, 0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xd2, 0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda, 0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9, 0xea,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8, 0xf9,0xfa ]; function initQuantTables(sf){ var YQT = [ 16, 11, 10, 16, 24, 40, 51, 61, 12, 12, 14, 19, 26, 58, 60, 55, 14, 13, 16, 24, 40, 57, 69, 56, 14, 17, 22, 29, 51, 87, 80, 62, 18, 22, 37, 56, 68,109,103, 77, 24, 35, 55, 64, 81,104,113, 92, 49, 64, 78, 87,103,121,120,101, 72, 92, 95, 98,112,100,103, 99 ]; for (var i = 0; i < 64; i++) { var t = ffloor((YQT[i]*sf+50)/100); if (t < 1) { t = 1; } else if (t > 255) { t = 255; } YTable[ZigZag[i]] = t; } var UVQT = [ 17, 18, 24, 47, 99, 99, 99, 99, 18, 21, 26, 66, 99, 99, 99, 99, 24, 26, 56, 99, 99, 99, 99, 99, 47, 66, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99 ]; for (var j = 0; j < 64; j++) { var u = ffloor((UVQT[j]*sf+50)/100); if (u < 1) { u = 1; } else if (u > 255) { u = 255; } UVTable[ZigZag[j]] = u; } var aasf = [ 1.0, 1.387039845, 1.306562965, 1.175875602, 1.0, 0.785694958, 0.541196100, 0.275899379 ]; var k = 0; for (var row = 0; row < 8; row++) { for (var col = 0; col < 8; col++) { fdtbl_Y[k] = (1.0 / (YTable [ZigZag[k]] * aasf[row] * aasf[col] * 8.0)); fdtbl_UV[k] = (1.0 / (UVTable[ZigZag[k]] * aasf[row] * aasf[col] * 8.0)); k++; } } } function computeHuffmanTbl(nrcodes, std_table){ var codevalue = 0; var pos_in_table = 0; var HT = new Array(); for (var k = 1; k <= 16; k++) { for (var j = 1; j <= nrcodes[k]; j++) { HT[std_table[pos_in_table]] = []; HT[std_table[pos_in_table]][0] = codevalue; HT[std_table[pos_in_table]][1] = k; pos_in_table++; codevalue++; } codevalue*=2; } return HT; } function initHuffmanTbl() { YDC_HT = computeHuffmanTbl(std_dc_luminance_nrcodes,std_dc_luminance_values); UVDC_HT = computeHuffmanTbl(std_dc_chrominance_nrcodes,std_dc_chrominance_values); YAC_HT = computeHuffmanTbl(std_ac_luminance_nrcodes,std_ac_luminance_values); UVAC_HT = computeHuffmanTbl(std_ac_chrominance_nrcodes,std_ac_chrominance_values); } function initCategoryNumber() { var nrlower = 1; var nrupper = 2; for (var cat = 1; cat <= 15; cat++) { //Positive numbers for (var nr = nrlower; nr<nrupper; nr++) { category[32767+nr] = cat; bitcode[32767+nr] = []; bitcode[32767+nr][1] = cat; bitcode[32767+nr][0] = nr; } //Negative numbers for (var nrneg =-(nrupper-1); nrneg<=-nrlower; nrneg++) { category[32767+nrneg] = cat; bitcode[32767+nrneg] = []; bitcode[32767+nrneg][1] = cat; bitcode[32767+nrneg][0] = nrupper-1+nrneg; } nrlower <<= 1; nrupper <<= 1; } } function initRGBYUVTable() { for(var i = 0; i < 256;i++) { RGB_YUV_TABLE[i] = 19595 * i; RGB_YUV_TABLE[(i+ 256)>>0] = 38470 * i; RGB_YUV_TABLE[(i+ 512)>>0] = 7471 * i + 0x8000; RGB_YUV_TABLE[(i+ 768)>>0] = -11059 * i; RGB_YUV_TABLE[(i+1024)>>0] = -21709 * i; RGB_YUV_TABLE[(i+1280)>>0] = 32768 * i + 0x807FFF; RGB_YUV_TABLE[(i+1536)>>0] = -27439 * i; RGB_YUV_TABLE[(i+1792)>>0] = - 5329 * i; } } // IO functions function writeBits(bs) { var value = bs[0]; var posval = bs[1]-1; while ( posval >= 0 ) { if (value & (1 << posval) ) { bytenew |= (1 << bytepos); } posval--; bytepos--; if (bytepos < 0) { if (bytenew == 0xFF) { writeByte(0xFF); writeByte(0); } else { writeByte(bytenew); } bytepos=7; bytenew=0; } } } function writeByte(value) { byteout.push(clt[value]); // write char directly instead of converting later } function writeWord(value) { writeByte((value>>8)&0xFF); writeByte((value )&0xFF); } // DCT & quantization core function fDCTQuant(data, fdtbl) { var d0, d1, d2, d3, d4, d5, d6, d7; /* Pass 1: process rows. */ var dataOff=0; var i; var I8 = 8; var I64 = 64; for (i=0; i<I8; ++i) { d0 = data[dataOff]; d1 = data[dataOff+1]; d2 = data[dataOff+2]; d3 = data[dataOff+3]; d4 = data[dataOff+4]; d5 = data[dataOff+5]; d6 = data[dataOff+6]; d7 = data[dataOff+7]; var tmp0 = d0 + d7; var tmp7 = d0 - d7; var tmp1 = d1 + d6; var tmp6 = d1 - d6; var tmp2 = d2 + d5; var tmp5 = d2 - d5; var tmp3 = d3 + d4; var tmp4 = d3 - d4; /* Even part */ var tmp10 = tmp0 + tmp3; /* phase 2 */ var tmp13 = tmp0 - tmp3; var tmp11 = tmp1 + tmp2; var tmp12 = tmp1 - tmp2; data[dataOff] = tmp10 + tmp11; /* phase 3 */ data[dataOff+4] = tmp10 - tmp11; var z1 = (tmp12 + tmp13) * 0.707106781; /* c4 */ data[dataOff+2] = tmp13 + z1; /* phase 5 */ data[dataOff+6] = tmp13 - z1; /* Odd part */ tmp10 = tmp4 + tmp5; /* phase 2 */ tmp11 = tmp5 + tmp6; tmp12 = tmp6 + tmp7; /* The rotator is modified from fig 4-8 to avoid extra negations. */ var z5 = (tmp10 - tmp12) * 0.382683433; /* c6 */ var z2 = 0.541196100 * tmp10 + z5; /* c2-c6 */ var z4 = 1.306562965 * tmp12 + z5; /* c2+c6 */ var z3 = tmp11 * 0.707106781; /* c4 */ var z11 = tmp7 + z3; /* phase 5 */ var z13 = tmp7 - z3; data[dataOff+5] = z13 + z2; /* phase 6 */ data[dataOff+3] = z13 - z2; data[dataOff+1] = z11 + z4; data[dataOff+7] = z11 - z4; dataOff += 8; /* advance pointer to next row */ } /* Pass 2: process columns. */ dataOff = 0; for (i=0; i<I8; ++i) { d0 = data[dataOff]; d1 = data[dataOff + 8]; d2 = data[dataOff + 16]; d3 = data[dataOff + 24]; d4 = data[dataOff + 32]; d5 = data[dataOff + 40]; d6 = data[dataOff + 48]; d7 = data[dataOff + 56]; var tmp0p2 = d0 + d7; var tmp7p2 = d0 - d7; var tmp1p2 = d1 + d6; var tmp6p2 = d1 - d6; var tmp2p2 = d2 + d5; var tmp5p2 = d2 - d5; var tmp3p2 = d3 + d4; var tmp4p2 = d3 - d4; /* Even part */ var tmp10p2 = tmp0p2 + tmp3p2; /* phase 2 */ var tmp13p2 = tmp0p2 - tmp3p2; var tmp11p2 = tmp1p2 + tmp2p2; var tmp12p2 = tmp1p2 - tmp2p2; data[dataOff] = tmp10p2 + tmp11p2; /* phase 3 */ data[dataOff+32] = tmp10p2 - tmp11p2; var z1p2 = (tmp12p2 + tmp13p2) * 0.707106781; /* c4 */ data[dataOff+16] = tmp13p2 + z1p2; /* phase 5 */ data[dataOff+48] = tmp13p2 - z1p2; /* Odd part */ tmp10p2 = tmp4p2 + tmp5p2; /* phase 2 */ tmp11p2 = tmp5p2 + tmp6p2; tmp12p2 = tmp6p2 + tmp7p2; /* The rotator is modified from fig 4-8 to avoid extra negations. */ var z5p2 = (tmp10p2 - tmp12p2) * 0.382683433; /* c6 */ var z2p2 = 0.541196100 * tmp10p2 + z5p2; /* c2-c6 */ var z4p2 = 1.306562965 * tmp12p2 + z5p2; /* c2+c6 */ var z3p2 = tmp11p2 * 0.707106781; /* c4 */ var z11p2 = tmp7p2 + z3p2; /* phase 5 */ var z13p2 = tmp7p2 - z3p2; data[dataOff+40] = z13p2 + z2p2; /* phase 6 */ data[dataOff+24] = z13p2 - z2p2; data[dataOff+ 8] = z11p2 + z4p2; data[dataOff+56] = z11p2 - z4p2; dataOff++; /* advance pointer to next column */ } // Quantize/descale the coefficients var fDCTQuant; for (i=0; i<I64; ++i) { // Apply the quantization and scaling factor & Round to nearest integer fDCTQuant = data[i]*fdtbl[i]; outputfDCTQuant[i] = (fDCTQuant > 0.0) ? ((fDCTQuant + 0.5)|0) : ((fDCTQuant - 0.5)|0); //outputfDCTQuant[i] = fround(fDCTQuant); } return outputfDCTQuant; } function writeAPP0() { writeWord(0xFFE0); // marker writeWord(16); // length writeByte(0x4A); // J writeByte(0x46); // F writeByte(0x49); // I writeByte(0x46); // F writeByte(0); // = "JFIF",'\0' writeByte(1); // versionhi writeByte(1); // versionlo writeByte(0); // xyunits writeWord(1); // xdensity writeWord(1); // ydensity writeByte(0); // thumbnwidth writeByte(0); // thumbnheight } function writeSOF0(width, height) { writeWord(0xFFC0); // marker writeWord(17); // length, truecolor YUV JPG writeByte(8); // precision writeWord(height); writeWord(width); writeByte(3); // nrofcomponents writeByte(1); // IdY writeByte(0x11); // HVY writeByte(0); // QTY writeByte(2); // IdU writeByte(0x11); // HVU writeByte(1); // QTU writeByte(3); // IdV writeByte(0x11); // HVV writeByte(1); // QTV } function writeDQT() { writeWord(0xFFDB); // marker writeWord(132); // length writeByte(0); for (var i=0; i<64; i++) { writeByte(YTable[i]); } writeByte(1); for (var j=0; j<64; j++) { writeByte(UVTable[j]); } } function writeDHT() { writeWord(0xFFC4); // marker writeWord(0x01A2); // length writeByte(0); // HTYDCinfo for (var i=0; i<16; i++) { writeByte(std_dc_luminance_nrcodes[i+1]); } for (var j=0; j<=11; j++) { writeByte(std_dc_luminance_values[j]); } writeByte(0x10); // HTYACinfo for (var k=0; k<16; k++) { writeByte(std_ac_luminance_nrcodes[k+1]); } for (var l=0; l<=161; l++) { writeByte(std_ac_luminance_values[l]); } writeByte(1); // HTUDCinfo for (var m=0; m<16; m++) { writeByte(std_dc_chrominance_nrcodes[m+1]); } for (var n=0; n<=11; n++) { writeByte(std_dc_chrominance_values[n]); } writeByte(0x11); // HTUACinfo for (var o=0; o<16; o++) { writeByte(std_ac_chrominance_nrcodes[o+1]); } for (var p=0; p<=161; p++) { writeByte(std_ac_chrominance_values[p]); } } function writeSOS() { writeWord(0xFFDA); // marker writeWord(12); // length writeByte(3); // nrofcomponents writeByte(1); // IdY writeByte(0); // HTY writeByte(2); // IdU writeByte(0x11); // HTU writeByte(3); // IdV writeByte(0x11); // HTV writeByte(0); // Ss writeByte(0x3f); // Se writeByte(0); // Bf } function processDU(CDU, fdtbl, DC, HTDC, HTAC){ var EOB = HTAC[0x00]; var M16zeroes = HTAC[0xF0]; var pos; var I16 = 16; var I63 = 63; var I64 = 64; var DU_DCT = fDCTQuant(CDU, fdtbl); //ZigZag reorder for (var j=0;j<I64;++j) { DU[ZigZag[j]]=DU_DCT[j]; } var Diff = DU[0] - DC; DC = DU[0]; //Encode DC if (Diff==0) { writeBits(HTDC[0]); // Diff might be 0 } else { pos = 32767+Diff; writeBits(HTDC[category[pos]]); writeBits(bitcode[pos]); } //Encode ACs var end0pos = 63; // was const... which is crazy for (; (end0pos>0)&&(DU[end0pos]==0); end0pos--) {}; //end0pos = first element in reverse order !=0 if ( end0pos == 0) { writeBits(EOB); return DC; } var i = 1; var lng; while ( i <= end0pos ) { var startpos = i; for (; (DU[i]==0) && (i<=end0pos); ++i) {} var nrzeroes = i-startpos; if ( nrzeroes >= I16 ) { lng = nrzeroes>>4; for (var nrmarker=1; nrmarker <= lng; ++nrmarker) writeBits(M16zeroes); nrzeroes = nrzeroes&0xF; } pos = 32767+DU[i]; writeBits(HTAC[(nrzeroes<<4)+category[pos]]); writeBits(bitcode[pos]); i++; } if ( end0pos != I63 ) { writeBits(EOB); } return DC; } function initCharLookupTable(){ var sfcc = String.fromCharCode; for(var i=0; i < 256; i++){ ///// ACHTUNG // 255 clt[i] = sfcc(i); } } this.encode = function(image,quality) // image data object { // var time_start = new Date().getTime(); if(quality) setQuality(quality); // Initialize bit writer byteout = new Array(); bytenew=0; bytepos=7; // Add JPEG headers writeWord(0xFFD8); // SOI writeAPP0(); writeDQT(); writeSOF0(image.width,image.height); writeDHT(); writeSOS(); // Encode 8x8 macroblocks var DCY=0; var DCU=0; var DCV=0; bytenew=0; bytepos=7; this.encode.displayName = "_encode_"; var imageData = image.data; var width = image.width; var height = image.height; var quadWidth = width*4; var tripleWidth = width*3; var x, y = 0; var r, g, b; var start,p, col,row,pos; while(y < height){ x = 0; while(x < quadWidth){ start = quadWidth * y + x; p = start; col = -1; row = 0; for(pos=0; pos < 64; pos++){ row = pos >> 3;// /8 col = ( pos & 7 ) * 4; // %8 p = start + ( row * quadWidth ) + col; if(y+row >= height){ // padding bottom p-= (quadWidth*(y+1+row-height)); } if(x+col >= quadWidth){ // padding right p-= ((x+col) - quadWidth +4) } r = imageData[ p++ ]; g = imageData[ p++ ]; b = imageData[ p++ ]; /* // calculate YUV values dynamically YDU[pos]=((( 0.29900)*r+( 0.58700)*g+( 0.11400)*b))-128; //-0x80 UDU[pos]=(((-0.16874)*r+(-0.33126)*g+( 0.50000)*b)); VDU[pos]=((( 0.50000)*r+(-0.41869)*g+(-0.08131)*b)); */ // use lookup table (slightly faster) YDU[pos] = ((RGB_YUV_TABLE[r] + RGB_YUV_TABLE[(g + 256)>>0] + RGB_YUV_TABLE[(b + 512)>>0]) >> 16)-128; UDU[pos] = ((RGB_YUV_TABLE[(r + 768)>>0] + RGB_YUV_TABLE[(g + 1024)>>0] + RGB_YUV_TABLE[(b + 1280)>>0]) >> 16)-128; VDU[pos] = ((RGB_YUV_TABLE[(r + 1280)>>0] + RGB_YUV_TABLE[(g + 1536)>>0] + RGB_YUV_TABLE[(b + 1792)>>0]) >> 16)-128; } DCY = processDU(YDU, fdtbl_Y, DCY, YDC_HT, YAC_HT); DCU = processDU(UDU, fdtbl_UV, DCU, UVDC_HT, UVAC_HT); DCV = processDU(VDU, fdtbl_UV, DCV, UVDC_HT, UVAC_HT); x+=32; } y+=8; } //////////////////////////////////////////////////////////////// // Do the bit alignment of the EOI marker if ( bytepos >= 0 ) { var fillbits = []; fillbits[1] = bytepos+1; fillbits[0] = (1<<(bytepos+1))-1; writeBits(fillbits); } writeWord(0xFFD9); //EOI var jpegDataUri = 'data:image/jpeg;base64,' + btoa(byteout.join('')); byteout = []; // benchmarking // var duration = new Date().getTime() - time_start; // console.log('Encoding time: '+ currentQuality + 'ms'); // return jpegDataUri } function setQuality(quality){ if (quality <= 0) { quality = 1; } if (quality > 100) { quality = 100; } if(currentQuality == quality) return // don't recalc if unchanged var sf = 0; if (quality < 50) { sf = Math.floor(5000 / quality); } else { sf = Math.floor(200 - quality*2); } initQuantTables(sf); currentQuality = quality; // console.log('Quality set to: '+quality +'%'); } function init(){ // var time_start = new Date().getTime(); if(!quality) quality = 50; // Create tables initCharLookupTable() initHuffmanTbl(); initCategoryNumber(); initRGBYUVTable(); setQuality(quality); // var duration = new Date().getTime() - time_start; // console.log('Initialization '+ duration + 'ms'); } init(); }; JPEGEncoder.encode = function( data, quality ) { var encoder = new JPEGEncoder( quality ); return encoder.encode( data ); } return JPEGEncoder; }); /** * @fileOverview Fix android canvas.toDataUrl bug. */ define('runtime/html5/androidpatch',[ 'runtime/html5/util', 'runtime/html5/jpegencoder', 'base' ], function( Util, encoder, Base ) { var origin = Util.canvasToDataUrl, supportJpeg; Util.canvasToDataUrl = function( canvas, type, quality ) { var ctx, w, h, fragement, parts; // 非android手机直接跳过。 if ( !Base.os.android ) { return origin.apply( null, arguments ); } // 检测是否canvas支持jpeg导出,根据数据格式来判断。 // JPEG 前两位分别是:255, 216 if ( type === 'image/jpeg' && typeof supportJpeg === 'undefined' ) { fragement = origin.apply( null, arguments ); parts = fragement.split(','); if ( ~parts[ 0 ].indexOf('base64') ) { fragement = atob( parts[ 1 ] ); } else { fragement = decodeURIComponent( parts[ 1 ] ); } fragement = fragement.substring( 0, 2 ); supportJpeg = fragement.charCodeAt( 0 ) === 255 && fragement.charCodeAt( 1 ) === 216; } // 只有在android环境下才修复 if ( type === 'image/jpeg' && !supportJpeg ) { w = canvas.width; h = canvas.height; ctx = canvas.getContext('2d'); return encoder.encode( ctx.getImageData( 0, 0, w, h ), quality ); } return origin.apply( null, arguments ); }; }); /** * @fileOverview Image */ define('runtime/html5/image',[ 'base', 'runtime/html5/runtime', 'runtime/html5/util' ], function( Base, Html5Runtime, Util ) { var BLANK = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs%3D'; return Html5Runtime.register( 'Image', { // flag: 标记是否被修改过。 modified: false, init: function() { var me = this, img = new Image(); img.onload = function() { me._info = { type: me.type, width: this.width, height: this.height }; // 读取meta信息。 if ( !me._metas && 'image/jpeg' === me.type ) { Util.parseMeta( me._blob, function( error, ret ) { me._metas = ret; me.owner.trigger('load'); }); } else { me.owner.trigger('load'); } }; img.onerror = function() { me.owner.trigger('error'); }; me._img = img; }, loadFromBlob: function( blob ) { var me = this, img = me._img; me._blob = blob; me.type = blob.type; img.src = Util.createObjectURL( blob.getSource() ); me.owner.once( 'load', function() { Util.revokeObjectURL( img.src ); }); }, resize: function( width, height ) { var canvas = this._canvas || (this._canvas = document.createElement('canvas')); this._resize( this._img, canvas, width, height ); this._blob = null; // 没用了,可以删掉了。 this.modified = true; this.owner.trigger( 'complete', 'resize' ); }, crop: function( x, y, w, h, s ) { var cvs = this._canvas || (this._canvas = document.createElement('canvas')), opts = this.options, img = this._img, iw = img.naturalWidth, ih = img.naturalHeight, orientation = this.getOrientation(); s = s || 1; // todo 解决 orientation 的问题。 // values that require 90 degree rotation // if ( ~[ 5, 6, 7, 8 ].indexOf( orientation ) ) { // switch ( orientation ) { // case 6: // tmp = x; // x = y; // y = iw * s - tmp - w; // console.log(ih * s, tmp, w) // break; // } // (w ^= h, h ^= w, w ^= h); // } cvs.width = w; cvs.height = h; opts.preserveHeaders || this._rotate2Orientaion( cvs, orientation ); this._renderImageToCanvas( cvs, img, -x, -y, iw * s, ih * s ); this._blob = null; // 没用了,可以删掉了。 this.modified = true; this.owner.trigger( 'complete', 'crop' ); }, getAsBlob: function( type ) { var blob = this._blob, opts = this.options, canvas; type = type || this.type; // blob需要重新生成。 if ( this.modified || this.type !== type ) { canvas = this._canvas; if ( type === 'image/jpeg' ) { blob = Util.canvasToDataUrl( canvas, type, opts.quality ); if ( opts.preserveHeaders && this._metas && this._metas.imageHead ) { blob = Util.dataURL2ArrayBuffer( blob ); blob = Util.updateImageHead( blob, this._metas.imageHead ); blob = Util.arrayBufferToBlob( blob, type ); return blob; } } else { blob = Util.canvasToDataUrl( canvas, type ); } blob = Util.dataURL2Blob( blob ); } return blob; }, getAsDataUrl: function( type ) { var opts = this.options; type = type || this.type; if ( type === 'image/jpeg' ) { return Util.canvasToDataUrl( this._canvas, type, opts.quality ); } else { return this._canvas.toDataURL( type ); } }, getOrientation: function() { return this._metas && this._metas.exif && this._metas.exif.get('Orientation') || 1; }, info: function( val ) { // setter if ( val ) { this._info = val; return this; } // getter return this._info; }, meta: function( val ) { // setter if ( val ) { this._meta = val; return this; } // getter return this._meta; }, destroy: function() { var canvas = this._canvas; this._img.onload = null; if ( canvas ) { canvas.getContext('2d') .clearRect( 0, 0, canvas.width, canvas.height ); canvas.width = canvas.height = 0; this._canvas = null; } // 释放内存。非常重要,否则释放不了image的内存。 this._img.src = BLANK; this._img = this._blob = null; }, _resize: function( img, cvs, width, height ) { var opts = this.options, naturalWidth = img.width, naturalHeight = img.height, orientation = this.getOrientation(), scale, w, h, x, y; // values that require 90 degree rotation if ( ~[ 5, 6, 7, 8 ].indexOf( orientation ) ) { // 交换width, height的值。 width ^= height; height ^= width; width ^= height; } scale = Math[ opts.crop ? 'max' : 'min' ]( width / naturalWidth, height / naturalHeight ); // 不允许放大。 opts.allowMagnify || (scale = Math.min( 1, scale )); w = naturalWidth * scale; h = naturalHeight * scale; if ( opts.crop ) { cvs.width = width; cvs.height = height; } else { cvs.width = w; cvs.height = h; } x = (cvs.width - w) / 2; y = (cvs.height - h) / 2; opts.preserveHeaders || this._rotate2Orientaion( cvs, orientation ); this._renderImageToCanvas( cvs, img, x, y, w, h ); }, _rotate2Orientaion: function( canvas, orientation ) { var width = canvas.width, height = canvas.height, ctx = canvas.getContext('2d'); switch ( orientation ) { case 5: case 6: case 7: case 8: canvas.width = height; canvas.height = width; break; } switch ( orientation ) { case 2: // horizontal flip ctx.translate( width, 0 ); ctx.scale( -1, 1 ); break; case 3: // 180 rotate left ctx.translate( width, height ); ctx.rotate( Math.PI ); break; case 4: // vertical flip ctx.translate( 0, height ); ctx.scale( 1, -1 ); break; case 5: // vertical flip + 90 rotate right ctx.rotate( 0.5 * Math.PI ); ctx.scale( 1, -1 ); break; case 6: // 90 rotate right ctx.rotate( 0.5 * Math.PI ); ctx.translate( 0, -height ); break; case 7: // horizontal flip + 90 rotate right ctx.rotate( 0.5 * Math.PI ); ctx.translate( width, -height ); ctx.scale( -1, 1 ); break; case 8: // 90 rotate left ctx.rotate( -0.5 * Math.PI ); ctx.translate( -width, 0 ); break; } }, // https://github.com/stomita/ios-imagefile-megapixel/ // blob/master/src/megapix-image.js _renderImageToCanvas: (function() { // 如果不是ios, 不需要这么复杂! if ( !Base.os.ios ) { return function( canvas ) { var args = Base.slice( arguments, 1 ), ctx = canvas.getContext('2d'); ctx.drawImage.apply( ctx, args ); }; } /** * Detecting vertical squash in loaded image. * Fixes a bug which squash image vertically while drawing into * canvas for some images. */ function detectVerticalSquash( img, iw, ih ) { var canvas = document.createElement('canvas'), ctx = canvas.getContext('2d'), sy = 0, ey = ih, py = ih, data, alpha, ratio; canvas.width = 1; canvas.height = ih; ctx.drawImage( img, 0, 0 ); data = ctx.getImageData( 0, 0, 1, ih ).data; // search image edge pixel position in case // it is squashed vertically. while ( py > sy ) { alpha = data[ (py - 1) * 4 + 3 ]; if ( alpha === 0 ) { ey = py; } else { sy = py; } py = (ey + sy) >> 1; } ratio = (py / ih); return (ratio === 0) ? 1 : ratio; } // fix ie7 bug // http://stackoverflow.com/questions/11929099/ // html5-canvas-drawimage-ratio-bug-ios if ( Base.os.ios >= 7 ) { return function( canvas, img, x, y, w, h ) { var iw = img.naturalWidth, ih = img.naturalHeight, vertSquashRatio = detectVerticalSquash( img, iw, ih ); return canvas.getContext('2d').drawImage( img, 0, 0, iw * vertSquashRatio, ih * vertSquashRatio, x, y, w, h ); }; } /** * Detect subsampling in loaded image. * In iOS, larger images than 2M pixels may be * subsampled in rendering. */ function detectSubsampling( img ) { var iw = img.naturalWidth, ih = img.naturalHeight, canvas, ctx; // subsampling may happen overmegapixel image if ( iw * ih > 1024 * 1024 ) { canvas = document.createElement('canvas'); canvas.width = canvas.height = 1; ctx = canvas.getContext('2d'); ctx.drawImage( img, -iw + 1, 0 ); // subsampled image becomes half smaller in rendering size. // check alpha channel value to confirm image is covering // edge pixel or not. if alpha value is 0 // image is not covering, hence subsampled. return ctx.getImageData( 0, 0, 1, 1 ).data[ 3 ] === 0; } else { return false; } } return function( canvas, img, x, y, width, height ) { var iw = img.naturalWidth, ih = img.naturalHeight, ctx = canvas.getContext('2d'), subsampled = detectSubsampling( img ), doSquash = this.type === 'image/jpeg', d = 1024, sy = 0, dy = 0, tmpCanvas, tmpCtx, vertSquashRatio, dw, dh, sx, dx; if ( subsampled ) { iw /= 2; ih /= 2; } ctx.save(); tmpCanvas = document.createElement('canvas'); tmpCanvas.width = tmpCanvas.height = d; tmpCtx = tmpCanvas.getContext('2d'); vertSquashRatio = doSquash ? detectVerticalSquash( img, iw, ih ) : 1; dw = Math.ceil( d * width / iw ); dh = Math.ceil( d * height / ih / vertSquashRatio ); while ( sy < ih ) { sx = 0; dx = 0; while ( sx < iw ) { tmpCtx.clearRect( 0, 0, d, d ); tmpCtx.drawImage( img, -sx, -sy ); ctx.drawImage( tmpCanvas, 0, 0, d, d, x + dx, y + dy, dw, dh ); sx += d; dx += dw; } sy += d; dy += dh; } ctx.restore(); tmpCanvas = tmpCtx = null; }; })() }); }); /** * @fileOverview Transport * @todo 支持chunked传输,优势: * 可以将大文件分成小块,挨个传输,可以提高大文件成功率,当失败的时候,也只需要重传那小部分, * 而不需要重头再传一次。另外断点续传也需要用chunked方式。 */ define('runtime/html5/transport',[ 'base', 'runtime/html5/runtime' ], function( Base, Html5Runtime ) { var noop = Base.noop, $ = Base.$; return Html5Runtime.register( 'Transport', { init: function() { this._status = 0; this._response = null; }, send: function() { var owner = this.owner, opts = this.options, xhr = this._initAjax(), blob = owner._blob, server = opts.server, formData, binary, fr; if ( opts.sendAsBinary ) { server += (/\?/.test( server ) ? '&' : '?') + $.param( owner._formData ); binary = blob.getSource(); } else { formData = new FormData(); $.each( owner._formData, function( k, v ) { formData.append( k, v ); }); formData.append( opts.fileVal, blob.getSource(), opts.filename || owner._formData.name || '' ); } if ( opts.withCredentials && 'withCredentials' in xhr ) { xhr.open( opts.method, server, true ); xhr.withCredentials = true; } else { xhr.open( opts.method, server ); } this._setRequestHeader( xhr, opts.headers ); if ( binary ) { // 强制设置成 content-type 为文件流。 xhr.overrideMimeType && xhr.overrideMimeType('application/octet-stream'); // android直接发送blob会导致服务端接收到的是空文件。 // bug详情。 // https://code.google.com/p/android/issues/detail?id=39882 // 所以先用fileReader读取出来再通过arraybuffer的方式发送。 if ( Base.os.android ) { fr = new FileReader(); fr.onload = function() { xhr.send( this.result ); fr = fr.onload = null; }; fr.readAsArrayBuffer( binary ); } else { xhr.send( binary ); } } else { xhr.send( formData ); } }, getResponse: function() { return this._response; }, getResponseAsJson: function() { return this._parseJson( this._response ); }, getStatus: function() { return this._status; }, abort: function() { var xhr = this._xhr; if ( xhr ) { xhr.upload.onprogress = noop; xhr.onreadystatechange = noop; xhr.abort(); this._xhr = xhr = null; } }, destroy: function() { this.abort(); }, _initAjax: function() { var me = this, xhr = new XMLHttpRequest(), opts = this.options; if ( opts.withCredentials && !('withCredentials' in xhr) && typeof XDomainRequest !== 'undefined' ) { xhr = new XDomainRequest(); } xhr.upload.onprogress = function( e ) { var percentage = 0; if ( e.lengthComputable ) { percentage = e.loaded / e.total; } return me.trigger( 'progress', percentage ); }; xhr.onreadystatechange = function() { if ( xhr.readyState !== 4 ) { return; } xhr.upload.onprogress = noop; xhr.onreadystatechange = noop; me._xhr = null; me._status = xhr.status; if ( xhr.status >= 200 && xhr.status < 300 ) { me._response = xhr.responseText; return me.trigger('load'); } else if ( xhr.status >= 500 && xhr.status < 600 ) { me._response = xhr.responseText; return me.trigger( 'error', 'server' ); } return me.trigger( 'error', me._status ? 'http' : 'abort' ); }; me._xhr = xhr; return xhr; }, _setRequestHeader: function( xhr, headers ) { $.each( headers, function( key, val ) { xhr.setRequestHeader( key, val ); }); }, _parseJson: function( str ) { var json; try { json = JSON.parse( str ); } catch ( ex ) { json = {}; } return json; } }); }); /** * @fileOverview Transport flash实现 */ define('runtime/html5/md5',[ 'runtime/html5/runtime' ], function( FlashRuntime ) { /* * Fastest md5 implementation around (JKM md5) * Credits: Joseph Myers * * @see http://www.myersdaily.org/joseph/javascript/md5-text.html * @see http://jsperf.com/md5-shootout/7 */ /* this function is much faster, so if possible we use it. Some IEs are the only ones I know of that need the idiotic second function, generated by an if clause. */ var add32 = function (a, b) { return (a + b) & 0xFFFFFFFF; }, cmn = function (q, a, b, x, s, t) { a = add32(add32(a, q), add32(x, t)); return add32((a << s) | (a >>> (32 - s)), b); }, ff = function (a, b, c, d, x, s, t) { return cmn((b & c) | ((~b) & d), a, b, x, s, t); }, gg = function (a, b, c, d, x, s, t) { return cmn((b & d) | (c & (~d)), a, b, x, s, t); }, hh = function (a, b, c, d, x, s, t) { return cmn(b ^ c ^ d, a, b, x, s, t); }, ii = function (a, b, c, d, x, s, t) { return cmn(c ^ (b | (~d)), a, b, x, s, t); }, md5cycle = function (x, k) { var a = x[0], b = x[1], c = x[2], d = x[3]; a = ff(a, b, c, d, k[0], 7, -680876936); d = ff(d, a, b, c, k[1], 12, -389564586); c = ff(c, d, a, b, k[2], 17, 606105819); b = ff(b, c, d, a, k[3], 22, -1044525330); a = ff(a, b, c, d, k[4], 7, -176418897); d = ff(d, a, b, c, k[5], 12, 1200080426); c = ff(c, d, a, b, k[6], 17, -1473231341); b = ff(b, c, d, a, k[7], 22, -45705983); a = ff(a, b, c, d, k[8], 7, 1770035416); d = ff(d, a, b, c, k[9], 12, -1958414417); c = ff(c, d, a, b, k[10], 17, -42063); b = ff(b, c, d, a, k[11], 22, -1990404162); a = ff(a, b, c, d, k[12], 7, 1804603682); d = ff(d, a, b, c, k[13], 12, -40341101); c = ff(c, d, a, b, k[14], 17, -1502002290); b = ff(b, c, d, a, k[15], 22, 1236535329); a = gg(a, b, c, d, k[1], 5, -165796510); d = gg(d, a, b, c, k[6], 9, -1069501632); c = gg(c, d, a, b, k[11], 14, 643717713); b = gg(b, c, d, a, k[0], 20, -373897302); a = gg(a, b, c, d, k[5], 5, -701558691); d = gg(d, a, b, c, k[10], 9, 38016083); c = gg(c, d, a, b, k[15], 14, -660478335); b = gg(b, c, d, a, k[4], 20, -405537848); a = gg(a, b, c, d, k[9], 5, 568446438); d = gg(d, a, b, c, k[14], 9, -1019803690); c = gg(c, d, a, b, k[3], 14, -187363961); b = gg(b, c, d, a, k[8], 20, 1163531501); a = gg(a, b, c, d, k[13], 5, -1444681467); d = gg(d, a, b, c, k[2], 9, -51403784); c = gg(c, d, a, b, k[7], 14, 1735328473); b = gg(b, c, d, a, k[12], 20, -1926607734); a = hh(a, b, c, d, k[5], 4, -378558); d = hh(d, a, b, c, k[8], 11, -2022574463); c = hh(c, d, a, b, k[11], 16, 1839030562); b = hh(b, c, d, a, k[14], 23, -35309556); a = hh(a, b, c, d, k[1], 4, -1530992060); d = hh(d, a, b, c, k[4], 11, 1272893353); c = hh(c, d, a, b, k[7], 16, -155497632); b = hh(b, c, d, a, k[10], 23, -1094730640); a = hh(a, b, c, d, k[13], 4, 681279174); d = hh(d, a, b, c, k[0], 11, -358537222); c = hh(c, d, a, b, k[3], 16, -722521979); b = hh(b, c, d, a, k[6], 23, 76029189); a = hh(a, b, c, d, k[9], 4, -640364487); d = hh(d, a, b, c, k[12], 11, -421815835); c = hh(c, d, a, b, k[15], 16, 530742520); b = hh(b, c, d, a, k[2], 23, -995338651); a = ii(a, b, c, d, k[0], 6, -198630844); d = ii(d, a, b, c, k[7], 10, 1126891415); c = ii(c, d, a, b, k[14], 15, -1416354905); b = ii(b, c, d, a, k[5], 21, -57434055); a = ii(a, b, c, d, k[12], 6, 1700485571); d = ii(d, a, b, c, k[3], 10, -1894986606); c = ii(c, d, a, b, k[10], 15, -1051523); b = ii(b, c, d, a, k[1], 21, -2054922799); a = ii(a, b, c, d, k[8], 6, 1873313359); d = ii(d, a, b, c, k[15], 10, -30611744); c = ii(c, d, a, b, k[6], 15, -1560198380); b = ii(b, c, d, a, k[13], 21, 1309151649); a = ii(a, b, c, d, k[4], 6, -145523070); d = ii(d, a, b, c, k[11], 10, -1120210379); c = ii(c, d, a, b, k[2], 15, 718787259); b = ii(b, c, d, a, k[9], 21, -343485551); x[0] = add32(a, x[0]); x[1] = add32(b, x[1]); x[2] = add32(c, x[2]); x[3] = add32(d, x[3]); }, /* there needs to be support for Unicode here, * unless we pretend that we can redefine the MD-5 * algorithm for multi-byte characters (perhaps * by adding every four 16-bit characters and * shortening the sum to 32 bits). Otherwise * I suggest performing MD-5 as if every character * was two bytes--e.g., 0040 0025 = @%--but then * how will an ordinary MD-5 sum be matched? * There is no way to standardize text to something * like UTF-8 before transformation; speed cost is * utterly prohibitive. The JavaScript standard * itself needs to look at this: it should start * providing access to strings as preformed UTF-8 * 8-bit unsigned value arrays. */ md5blk = function (s) { var md5blks = [], i; /* Andy King said do it this way. */ for (i = 0; i < 64; i += 4) { md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24); } return md5blks; }, md5blk_array = function (a) { var md5blks = [], i; /* Andy King said do it this way. */ for (i = 0; i < 64; i += 4) { md5blks[i >> 2] = a[i] + (a[i + 1] << 8) + (a[i + 2] << 16) + (a[i + 3] << 24); } return md5blks; }, md51 = function (s) { var n = s.length, state = [1732584193, -271733879, -1732584194, 271733878], i, length, tail, tmp, lo, hi; for (i = 64; i <= n; i += 64) { md5cycle(state, md5blk(s.substring(i - 64, i))); } s = s.substring(i - 64); length = s.length; tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; for (i = 0; i < length; i += 1) { tail[i >> 2] |= s.charCodeAt(i) << ((i % 4) << 3); } tail[i >> 2] |= 0x80 << ((i % 4) << 3); if (i > 55) { md5cycle(state, tail); for (i = 0; i < 16; i += 1) { tail[i] = 0; } } // Beware that the final length might not fit in 32 bits so we take care of that tmp = n * 8; tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/); lo = parseInt(tmp[2], 16); hi = parseInt(tmp[1], 16) || 0; tail[14] = lo; tail[15] = hi; md5cycle(state, tail); return state; }, md51_array = function (a) { var n = a.length, state = [1732584193, -271733879, -1732584194, 271733878], i, length, tail, tmp, lo, hi; for (i = 64; i <= n; i += 64) { md5cycle(state, md5blk_array(a.subarray(i - 64, i))); } // Not sure if it is a bug, however IE10 will always produce a sub array of length 1 // containing the last element of the parent array if the sub array specified starts // beyond the length of the parent array - weird. // https://connect.microsoft.com/IE/feedback/details/771452/typed-array-subarray-issue a = (i - 64) < n ? a.subarray(i - 64) : new Uint8Array(0); length = a.length; tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; for (i = 0; i < length; i += 1) { tail[i >> 2] |= a[i] << ((i % 4) << 3); } tail[i >> 2] |= 0x80 << ((i % 4) << 3); if (i > 55) { md5cycle(state, tail); for (i = 0; i < 16; i += 1) { tail[i] = 0; } } // Beware that the final length might not fit in 32 bits so we take care of that tmp = n * 8; tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/); lo = parseInt(tmp[2], 16); hi = parseInt(tmp[1], 16) || 0; tail[14] = lo; tail[15] = hi; md5cycle(state, tail); return state; }, hex_chr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'], rhex = function (n) { var s = '', j; for (j = 0; j < 4; j += 1) { s += hex_chr[(n >> (j * 8 + 4)) & 0x0F] + hex_chr[(n >> (j * 8)) & 0x0F]; } return s; }, hex = function (x) { var i; for (i = 0; i < x.length; i += 1) { x[i] = rhex(x[i]); } return x.join(''); }, md5 = function (s) { return hex(md51(s)); }, //////////////////////////////////////////////////////////////////////////// /** * SparkMD5 OOP implementation. * * Use this class to perform an incremental md5, otherwise use the * static methods instead. */ SparkMD5 = function () { // call reset to init the instance this.reset(); }; // In some cases the fast add32 function cannot be used.. if (md5('hello') !== '5d41402abc4b2a76b9719d911017c592') { add32 = function (x, y) { var lsw = (x & 0xFFFF) + (y & 0xFFFF), msw = (x >> 16) + (y >> 16) + (lsw >> 16); return (msw << 16) | (lsw & 0xFFFF); }; } /** * Appends a string. * A conversion will be applied if an utf8 string is detected. * * @param {String} str The string to be appended * * @return {SparkMD5} The instance itself */ SparkMD5.prototype.append = function (str) { // converts the string to utf8 bytes if necessary if (/[\u0080-\uFFFF]/.test(str)) { str = unescape(encodeURIComponent(str)); } // then append as binary this.appendBinary(str); return this; }; /** * Appends a binary string. * * @param {String} contents The binary string to be appended * * @return {SparkMD5} The instance itself */ SparkMD5.prototype.appendBinary = function (contents) { this._buff += contents; this._length += contents.length; var length = this._buff.length, i; for (i = 64; i <= length; i += 64) { md5cycle(this._state, md5blk(this._buff.substring(i - 64, i))); } this._buff = this._buff.substr(i - 64); return this; }; /** * Finishes the incremental computation, reseting the internal state and * returning the result. * Use the raw parameter to obtain the raw result instead of the hex one. * * @param {Boolean} raw True to get the raw result, false to get the hex result * * @return {String|Array} The result */ SparkMD5.prototype.end = function (raw) { var buff = this._buff, length = buff.length, i, tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], ret; for (i = 0; i < length; i += 1) { tail[i >> 2] |= buff.charCodeAt(i) << ((i % 4) << 3); } this._finish(tail, length); ret = !!raw ? this._state : hex(this._state); this.reset(); return ret; }; /** * Finish the final calculation based on the tail. * * @param {Array} tail The tail (will be modified) * @param {Number} length The length of the remaining buffer */ SparkMD5.prototype._finish = function (tail, length) { var i = length, tmp, lo, hi; tail[i >> 2] |= 0x80 << ((i % 4) << 3); if (i > 55) { md5cycle(this._state, tail); for (i = 0; i < 16; i += 1) { tail[i] = 0; } } // Do the final computation based on the tail and length // Beware that the final length may not fit in 32 bits so we take care of that tmp = this._length * 8; tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/); lo = parseInt(tmp[2], 16); hi = parseInt(tmp[1], 16) || 0; tail[14] = lo; tail[15] = hi; md5cycle(this._state, tail); }; /** * Resets the internal state of the computation. * * @return {SparkMD5} The instance itself */ SparkMD5.prototype.reset = function () { this._buff = ""; this._length = 0; this._state = [1732584193, -271733879, -1732584194, 271733878]; return this; }; /** * Releases memory used by the incremental buffer and other aditional * resources. If you plan to use the instance again, use reset instead. */ SparkMD5.prototype.destroy = function () { delete this._state; delete this._buff; delete this._length; }; /** * Performs the md5 hash on a string. * A conversion will be applied if utf8 string is detected. * * @param {String} str The string * @param {Boolean} raw True to get the raw result, false to get the hex result * * @return {String|Array} The result */ SparkMD5.hash = function (str, raw) { // converts the string to utf8 bytes if necessary if (/[\u0080-\uFFFF]/.test(str)) { str = unescape(encodeURIComponent(str)); } var hash = md51(str); return !!raw ? hash : hex(hash); }; /** * Performs the md5 hash on a binary string. * * @param {String} content The binary string * @param {Boolean} raw True to get the raw result, false to get the hex result * * @return {String|Array} The result */ SparkMD5.hashBinary = function (content, raw) { var hash = md51(content); return !!raw ? hash : hex(hash); }; /** * SparkMD5 OOP implementation for array buffers. * * Use this class to perform an incremental md5 ONLY for array buffers. */ SparkMD5.ArrayBuffer = function () { // call reset to init the instance this.reset(); }; //////////////////////////////////////////////////////////////////////////// /** * Appends an array buffer. * * @param {ArrayBuffer} arr The array to be appended * * @return {SparkMD5.ArrayBuffer} The instance itself */ SparkMD5.ArrayBuffer.prototype.append = function (arr) { // TODO: we could avoid the concatenation here but the algorithm would be more complex // if you find yourself needing extra performance, please make a PR. var buff = this._concatArrayBuffer(this._buff, arr), length = buff.length, i; this._length += arr.byteLength; for (i = 64; i <= length; i += 64) { md5cycle(this._state, md5blk_array(buff.subarray(i - 64, i))); } // Avoids IE10 weirdness (documented above) this._buff = (i - 64) < length ? buff.subarray(i - 64) : new Uint8Array(0); return this; }; /** * Finishes the incremental computation, reseting the internal state and * returning the result. * Use the raw parameter to obtain the raw result instead of the hex one. * * @param {Boolean} raw True to get the raw result, false to get the hex result * * @return {String|Array} The result */ SparkMD5.ArrayBuffer.prototype.end = function (raw) { var buff = this._buff, length = buff.length, tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], i, ret; for (i = 0; i < length; i += 1) { tail[i >> 2] |= buff[i] << ((i % 4) << 3); } this._finish(tail, length); ret = !!raw ? this._state : hex(this._state); this.reset(); return ret; }; SparkMD5.ArrayBuffer.prototype._finish = SparkMD5.prototype._finish; /** * Resets the internal state of the computation. * * @return {SparkMD5.ArrayBuffer} The instance itself */ SparkMD5.ArrayBuffer.prototype.reset = function () { this._buff = new Uint8Array(0); this._length = 0; this._state = [1732584193, -271733879, -1732584194, 271733878]; return this; }; /** * Releases memory used by the incremental buffer and other aditional * resources. If you plan to use the instance again, use reset instead. */ SparkMD5.ArrayBuffer.prototype.destroy = SparkMD5.prototype.destroy; /** * Concats two array buffers, returning a new one. * * @param {ArrayBuffer} first The first array buffer * @param {ArrayBuffer} second The second array buffer * * @return {ArrayBuffer} The new array buffer */ SparkMD5.ArrayBuffer.prototype._concatArrayBuffer = function (first, second) { var firstLength = first.length, result = new Uint8Array(firstLength + second.byteLength); result.set(first); result.set(new Uint8Array(second), firstLength); return result; }; /** * Performs the md5 hash on an array buffer. * * @param {ArrayBuffer} arr The array buffer * @param {Boolean} raw True to get the raw result, false to get the hex result * * @return {String|Array} The result */ SparkMD5.ArrayBuffer.hash = function (arr, raw) { var hash = md51_array(new Uint8Array(arr)); return !!raw ? hash : hex(hash); }; return FlashRuntime.register( 'Md5', { init: function() { // do nothing. }, loadFromBlob: function( file ) { var blob = file.getSource(), chunkSize = 2 * 1024 * 1024, chunks = Math.ceil( blob.size / chunkSize ), chunk = 0, owner = this.owner, spark = new SparkMD5.ArrayBuffer(), me = this, blobSlice = blob.mozSlice || blob.webkitSlice || blob.slice, loadNext, fr; fr = new FileReader(); loadNext = function() { var start, end; start = chunk * chunkSize; end = Math.min( start + chunkSize, blob.size ); fr.onload = function( e ) { spark.append( e.target.result ); owner.trigger( 'progress', { total: file.size, loaded: end }); }; fr.onloadend = function() { fr.onloadend = fr.onload = null; if ( ++chunk < chunks ) { setTimeout( loadNext, 1 ); } else { setTimeout(function(){ owner.trigger('load'); me.result = spark.end(); loadNext = file = blob = spark = null; owner.trigger('complete'); }, 50 ); } }; fr.readAsArrayBuffer( blobSlice.call( blob, start, end ) ); }; loadNext(); }, getResult: function() { return this.result; } }); }); /** * @fileOverview FlashRuntime */ define('runtime/flash/runtime',[ 'base', 'runtime/runtime', 'runtime/compbase' ], function( Base, Runtime, CompBase ) { var $ = Base.$, type = 'flash', components = {}; function getFlashVersion() { var version; try { version = navigator.plugins[ 'Shockwave Flash' ]; version = version.description; } catch ( ex ) { try { version = new ActiveXObject('ShockwaveFlash.ShockwaveFlash') .GetVariable('$version'); } catch ( ex2 ) { version = '0.0'; } } version = version.match( /\d+/g ); return parseFloat( version[ 0 ] + '.' + version[ 1 ], 10 ); } function FlashRuntime() { var pool = {}, clients = {}, destroy = this.destroy, me = this, jsreciver = Base.guid('webuploader_'); Runtime.apply( me, arguments ); me.type = type; // 这个方法的调用者,实际上是RuntimeClient me.exec = function( comp, fn/*, args...*/ ) { var client = this, uid = client.uid, args = Base.slice( arguments, 2 ), instance; clients[ uid ] = client; if ( components[ comp ] ) { if ( !pool[ uid ] ) { pool[ uid ] = new components[ comp ]( client, me ); } instance = pool[ uid ]; if ( instance[ fn ] ) { return instance[ fn ].apply( instance, args ); } } return me.flashExec.apply( client, arguments ); }; function handler( evt, obj ) { var type = evt.type || evt, parts, uid; parts = type.split('::'); uid = parts[ 0 ]; type = parts[ 1 ]; // console.log.apply( console, arguments ); if ( type === 'Ready' && uid === me.uid ) { me.trigger('ready'); } else if ( clients[ uid ] ) { clients[ uid ].trigger( type.toLowerCase(), evt, obj ); } // Base.log( evt, obj ); } // flash的接受器。 window[ jsreciver ] = function() { var args = arguments; // 为了能捕获得到。 setTimeout(function() { handler.apply( null, args ); }, 1 ); }; this.jsreciver = jsreciver; this.destroy = function() { // @todo 删除池子中的所有实例 return destroy && destroy.apply( this, arguments ); }; this.flashExec = function( comp, fn ) { var flash = me.getFlash(), args = Base.slice( arguments, 2 ); return flash.exec( this.uid, comp, fn, args ); }; // @todo } Base.inherits( Runtime, { constructor: FlashRuntime, init: function() { var container = this.getContainer(), opts = this.options, html; // if not the minimal height, shims are not initialized // in older browsers (e.g FF3.6, IE6,7,8, Safari 4.0,5.0, etc) container.css({ position: 'absolute', top: '-8px', left: '-8px', width: '9px', height: '9px', overflow: 'hidden' }); // insert flash object html = '<object id="' + this.uid + '" type="application/' + 'x-shockwave-flash" data="' + opts.swf + '" '; if ( Base.browser.ie ) { html += 'classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" '; } html += 'width="100%" height="100%" style="outline:0">' + '<param name="movie" value="' + opts.swf + '" />' + '<param name="flashvars" value="uid=' + this.uid + '&jsreciver=' + this.jsreciver + '" />' + '<param name="wmode" value="transparent" />' + '<param name="allowscriptaccess" value="always" />' + '</object>'; container.html( html ); }, getFlash: function() { if ( this._flash ) { return this._flash; } this._flash = $( '#' + this.uid ).get( 0 ); return this._flash; } }); FlashRuntime.register = function( name, component ) { component = components[ name ] = Base.inherits( CompBase, $.extend({ // @todo fix this later flashExec: function() { var owner = this.owner, runtime = this.getRuntime(); return runtime.flashExec.apply( owner, arguments ); } }, component ) ); return component; }; if ( getFlashVersion() >= 11.4 ) { Runtime.addRuntime( type, FlashRuntime ); } return FlashRuntime; }); /** * @fileOverview FilePicker */ define('runtime/flash/filepicker',[ 'base', 'runtime/flash/runtime' ], function( Base, FlashRuntime ) { var $ = Base.$; return FlashRuntime.register( 'FilePicker', { init: function( opts ) { var copy = $.extend({}, opts ), len, i; // 修复Flash再没有设置title的情况下无法弹出flash文件选择框的bug. len = copy.accept && copy.accept.length; for ( i = 0; i < len; i++ ) { if ( !copy.accept[ i ].title ) { copy.accept[ i ].title = 'Files'; } } delete copy.button; delete copy.id; delete copy.container; this.flashExec( 'FilePicker', 'init', copy ); }, destroy: function() { this.flashExec( 'FilePicker', 'destroy' ); } }); }); /** * @fileOverview 图片压缩 */ define('runtime/flash/image',[ 'runtime/flash/runtime' ], function( FlashRuntime ) { return FlashRuntime.register( 'Image', { // init: function( options ) { // var owner = this.owner; // this.flashExec( 'Image', 'init', options ); // owner.on( 'load', function() { // debugger; // }); // }, loadFromBlob: function( blob ) { var owner = this.owner; owner.info() && this.flashExec( 'Image', 'info', owner.info() ); owner.meta() && this.flashExec( 'Image', 'meta', owner.meta() ); this.flashExec( 'Image', 'loadFromBlob', blob.uid ); } }); }); /** * @fileOverview Transport flash实现 */ define('runtime/flash/transport',[ 'base', 'runtime/flash/runtime', 'runtime/client' ], function( Base, FlashRuntime, RuntimeClient ) { var $ = Base.$; return FlashRuntime.register( 'Transport', { init: function() { this._status = 0; this._response = null; this._responseJson = null; }, send: function() { var owner = this.owner, opts = this.options, xhr = this._initAjax(), blob = owner._blob, server = opts.server, binary; xhr.connectRuntime( blob.ruid ); if ( opts.sendAsBinary ) { server += (/\?/.test( server ) ? '&' : '?') + $.param( owner._formData ); binary = blob.uid; } else { $.each( owner._formData, function( k, v ) { xhr.exec( 'append', k, v ); }); xhr.exec( 'appendBlob', opts.fileVal, blob.uid, opts.filename || owner._formData.name || '' ); } this._setRequestHeader( xhr, opts.headers ); xhr.exec( 'send', { method: opts.method, url: server, forceURLStream: opts.forceURLStream, mimeType: 'application/octet-stream' }, binary ); }, getStatus: function() { return this._status; }, getResponse: function() { return this._response || ''; }, getResponseAsJson: function() { return this._responseJson; }, abort: function() { var xhr = this._xhr; if ( xhr ) { xhr.exec('abort'); xhr.destroy(); this._xhr = xhr = null; } }, destroy: function() { this.abort(); }, _initAjax: function() { var me = this, xhr = new RuntimeClient('XMLHttpRequest'); xhr.on( 'uploadprogress progress', function( e ) { var percent = e.loaded / e.total; percent = Math.min( 1, Math.max( 0, percent ) ); return me.trigger( 'progress', percent ); }); xhr.on( 'load', function() { var status = xhr.exec('getStatus'), readBody = false, err = '', p; xhr.off(); me._xhr = null; if ( status >= 200 && status < 300 ) { readBody = true; } else if ( status >= 500 && status < 600 ) { readBody = true; err = 'server'; } else { err = 'http'; } if ( readBody ) { me._response = xhr.exec('getResponse'); me._response = decodeURIComponent( me._response ); // flash 处理可能存在 bug, 没辙只能靠 js 了 // try { // me._responseJson = xhr.exec('getResponseAsJson'); // } catch ( error ) { p = window.JSON && window.JSON.parse || function( s ) { try { return new Function('return ' + s).call(); } catch ( err ) { return {}; } }; me._responseJson = me._response ? p(me._response) : {}; // } } xhr.destroy(); xhr = null; return err ? me.trigger( 'error', err ) : me.trigger('load'); }); xhr.on( 'error', function() { xhr.off(); me._xhr = null; me.trigger( 'error', 'http' ); }); me._xhr = xhr; return xhr; }, _setRequestHeader: function( xhr, headers ) { $.each( headers, function( key, val ) { xhr.exec( 'setRequestHeader', key, val ); }); } }); }); /** * @fileOverview Blob Html实现 */ define('runtime/flash/blob',[ 'runtime/flash/runtime', 'lib/blob' ], function( FlashRuntime, Blob ) { return FlashRuntime.register( 'Blob', { slice: function( start, end ) { var blob = this.flashExec( 'Blob', 'slice', start, end ); return new Blob( blob.uid, blob ); } }); }); /** * @fileOverview Md5 flash实现 */ define('runtime/flash/md5',[ 'runtime/flash/runtime' ], function( FlashRuntime ) { return FlashRuntime.register( 'Md5', { init: function() { // do nothing. }, loadFromBlob: function( blob ) { return this.flashExec( 'Md5', 'loadFromBlob', blob.uid ); } }); }); /** * @fileOverview 完全版本。 */ define('preset/all',[ 'base', // widgets 'widgets/filednd', 'widgets/filepaste', 'widgets/filepicker', 'widgets/image', 'widgets/queue', 'widgets/runtime', 'widgets/upload', 'widgets/validator', 'widgets/md5', // runtimes // html5 'runtime/html5/blob', 'runtime/html5/dnd', 'runtime/html5/filepaste', 'runtime/html5/filepicker', 'runtime/html5/imagemeta/exif', 'runtime/html5/androidpatch', 'runtime/html5/image', 'runtime/html5/transport', 'runtime/html5/md5', // flash 'runtime/flash/filepicker', 'runtime/flash/image', 'runtime/flash/transport', 'runtime/flash/blob', 'runtime/flash/md5' ], function( Base ) { return Base; }); /** * @fileOverview 日志组件,主要用来收集错误信息,可以帮助 webuploader 更好的定位问题和发展。 * * 如果您不想要启用此功能,请在打包的时候去掉 log 模块。 * * 或者可以在初始化的时候通过 options.disableWidgets 属性禁用。 * * 如: * WebUploader.create({ * ... * * disableWidgets: 'log', * * ... * }) */ define('widgets/log',[ 'base', 'uploader', 'widgets/widget' ], function( Base, Uploader ) { var $ = Base.$, logUrl = ' http://static.tieba.baidu.com/tb/pms/img/st.gif??', product = (location.hostname || location.host || 'protected').toLowerCase(), // 只针对 baidu 内部产品用户做统计功能。 enable = product && /baidu/i.exec(product), base; if (!enable) { return; } base = { dv: 3, master: 'webuploader', online: /test/.exec(product) ? 0 : 1, module: '', product: product, type: 0 }; function send(data) { var obj = $.extend({}, base, data), url = logUrl.replace(/^(.*)\?/, '$1' + $.param( obj )), image = new Image(); image.src = url; } return Uploader.register({ name: 'log', init: function() { var owner = this.owner, count = 0, size = 0; owner .on('error', function(code) { send({ type: 2, c_error_code: code }); }) .on('uploadError', function(file, reason) { send({ type: 2, c_error_code: 'UPLOAD_ERROR', c_reason: '' + reason }); }) .on('uploadComplete', function(file) { count++; size += file.size; }). on('uploadFinished', function() { send({ c_count: count, c_size: size }); count = size = 0; }); send({ c_usage: 1 }); } }); }); /** * @fileOverview Uploader上传类 */ define('webuploader',[ 'preset/all', 'widgets/log' ], function( preset ) { return preset; }); var _require = require; return _require('webuploader'); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/webuploader/webuploader.flashonly.js ================================================ /*! WebUploader 0.1.5 */ /** * @fileOverview 让内部各个部件的代码可以用[amd](https://github.com/amdjs/amdjs-api/wiki/AMD)模块定义方式组织起来。 * * AMD API 内部的简单不完全实现,请忽略。只有当WebUploader被合并成一个文件的时候才会引入。 */ (function( root, factory ) { var modules = {}, // 内部require, 简单不完全实现。 // https://github.com/amdjs/amdjs-api/wiki/require _require = function( deps, callback ) { var args, len, i; // 如果deps不是数组,则直接返回指定module if ( typeof deps === 'string' ) { return getModule( deps ); } else { args = []; for( len = deps.length, i = 0; i < len; i++ ) { args.push( getModule( deps[ i ] ) ); } return callback.apply( null, args ); } }, // 内部define,暂时不支持不指定id. _define = function( id, deps, factory ) { if ( arguments.length === 2 ) { factory = deps; deps = null; } _require( deps || [], function() { setModule( id, factory, arguments ); }); }, // 设置module, 兼容CommonJs写法。 setModule = function( id, factory, args ) { var module = { exports: factory }, returned; if ( typeof factory === 'function' ) { args.length || (args = [ _require, module.exports, module ]); returned = factory.apply( null, args ); returned !== undefined && (module.exports = returned); } modules[ id ] = module.exports; }, // 根据id获取module getModule = function( id ) { var module = modules[ id ] || root[ id ]; if ( !module ) { throw new Error( '`' + id + '` is undefined' ); } return module; }, // 将所有modules,将路径ids装换成对象。 exportsTo = function( obj ) { var key, host, parts, part, last, ucFirst; // make the first character upper case. ucFirst = function( str ) { return str && (str.charAt( 0 ).toUpperCase() + str.substr( 1 )); }; for ( key in modules ) { host = obj; if ( !modules.hasOwnProperty( key ) ) { continue; } parts = key.split('/'); last = ucFirst( parts.pop() ); while( (part = ucFirst( parts.shift() )) ) { host[ part ] = host[ part ] || {}; host = host[ part ]; } host[ last ] = modules[ key ]; } return obj; }, makeExport = function( dollar ) { root.__dollar = dollar; // exports every module. return exportsTo( factory( root, _define, _require ) ); }, origin; if ( typeof module === 'object' && typeof module.exports === 'object' ) { // For CommonJS and CommonJS-like environments where a proper window is present, module.exports = makeExport(); } else if ( typeof define === 'function' && define.amd ) { // Allow using this built library as an AMD module // in another project. That other project will only // see this AMD call, not the internal modules in // the closure below. define([ 'jquery' ], makeExport ); } else { // Browser globals case. Just assign the // result to a property on the global. origin = root.WebUploader; root.WebUploader = makeExport(); root.WebUploader.noConflict = function() { root.WebUploader = origin; }; } })( window, function( window, define, require ) { /** * @fileOverview jQuery or Zepto */ define('dollar-third',[],function() { var $ = window.__dollar || window.jQuery || window.Zepto; if ( !$ ) { throw new Error('jQuery or Zepto not found!'); } return $; }); /** * @fileOverview Dom 操作相关 */ define('dollar',[ 'dollar-third' ], function( _ ) { return _; }); /** * @fileOverview 使用jQuery的Promise */ define('promise-third',[ 'dollar' ], function( $ ) { return { Deferred: $.Deferred, when: $.when, isPromise: function( anything ) { return anything && typeof anything.then === 'function'; } }; }); /** * @fileOverview Promise/A+ */ define('promise',[ 'promise-third' ], function( _ ) { return _; }); /** * @fileOverview 基础类方法。 */ /** * Web Uploader内部类的详细说明,以下提及的功能类,都可以在`WebUploader`这个变量中访问到。 * * As you know, Web Uploader的每个文件都是用过[AMD](https://github.com/amdjs/amdjs-api/wiki/AMD)规范中的`define`组织起来的, 每个Module都会有个module id. * 默认module id为该文件的路径,而此路径将会转化成名字空间存放在WebUploader中。如: * * * module `base`:WebUploader.Base * * module `file`: WebUploader.File * * module `lib/dnd`: WebUploader.Lib.Dnd * * module `runtime/html5/dnd`: WebUploader.Runtime.Html5.Dnd * * * 以下文档中对类的使用可能省略掉了`WebUploader`前缀。 * @module WebUploader * @title WebUploader API文档 */ define('base',[ 'dollar', 'promise' ], function( $, promise ) { var noop = function() {}, call = Function.call; // http://jsperf.com/uncurrythis // 反科里化 function uncurryThis( fn ) { return function() { return call.apply( fn, arguments ); }; } function bindFn( fn, context ) { return function() { return fn.apply( context, arguments ); }; } function createObject( proto ) { var f; if ( Object.create ) { return Object.create( proto ); } else { f = function() {}; f.prototype = proto; return new f(); } } /** * 基础类,提供一些简单常用的方法。 * @class Base */ return { /** * @property {String} version 当前版本号。 */ version: '0.1.5', /** * @property {jQuery|Zepto} $ 引用依赖的jQuery或者Zepto对象。 */ $: $, Deferred: promise.Deferred, isPromise: promise.isPromise, when: promise.when, /** * @description 简单的浏览器检查结果。 * * * `webkit` webkit版本号,如果浏览器为非webkit内核,此属性为`undefined`。 * * `chrome` chrome浏览器版本号,如果浏览器为chrome,此属性为`undefined`。 * * `ie` ie浏览器版本号,如果浏览器为非ie,此属性为`undefined`。**暂不支持ie10+** * * `firefox` firefox浏览器版本号,如果浏览器为非firefox,此属性为`undefined`。 * * `safari` safari浏览器版本号,如果浏览器为非safari,此属性为`undefined`。 * * `opera` opera浏览器版本号,如果浏览器为非opera,此属性为`undefined`。 * * @property {Object} [browser] */ browser: (function( ua ) { var ret = {}, webkit = ua.match( /WebKit\/([\d.]+)/ ), chrome = ua.match( /Chrome\/([\d.]+)/ ) || ua.match( /CriOS\/([\d.]+)/ ), ie = ua.match( /MSIE\s([\d\.]+)/ ) || ua.match( /(?:trident)(?:.*rv:([\w.]+))?/i ), firefox = ua.match( /Firefox\/([\d.]+)/ ), safari = ua.match( /Safari\/([\d.]+)/ ), opera = ua.match( /OPR\/([\d.]+)/ ); webkit && (ret.webkit = parseFloat( webkit[ 1 ] )); chrome && (ret.chrome = parseFloat( chrome[ 1 ] )); ie && (ret.ie = parseFloat( ie[ 1 ] )); firefox && (ret.firefox = parseFloat( firefox[ 1 ] )); safari && (ret.safari = parseFloat( safari[ 1 ] )); opera && (ret.opera = parseFloat( opera[ 1 ] )); return ret; })( navigator.userAgent ), /** * @description 操作系统检查结果。 * * * `android` 如果在android浏览器环境下,此值为对应的android版本号,否则为`undefined`。 * * `ios` 如果在ios浏览器环境下,此值为对应的ios版本号,否则为`undefined`。 * @property {Object} [os] */ os: (function( ua ) { var ret = {}, // osx = !!ua.match( /\(Macintosh\; Intel / ), android = ua.match( /(?:Android);?[\s\/]+([\d.]+)?/ ), ios = ua.match( /(?:iPad|iPod|iPhone).*OS\s([\d_]+)/ ); // osx && (ret.osx = true); android && (ret.android = parseFloat( android[ 1 ] )); ios && (ret.ios = parseFloat( ios[ 1 ].replace( /_/g, '.' ) )); return ret; })( navigator.userAgent ), /** * 实现类与类之间的继承。 * @method inherits * @grammar Base.inherits( super ) => child * @grammar Base.inherits( super, protos ) => child * @grammar Base.inherits( super, protos, statics ) => child * @param {Class} super 父类 * @param {Object | Function} [protos] 子类或者对象。如果对象中包含constructor,子类将是用此属性值。 * @param {Function} [protos.constructor] 子类构造器,不指定的话将创建个临时的直接执行父类构造器的方法。 * @param {Object} [statics] 静态属性或方法。 * @return {Class} 返回子类。 * @example * function Person() { * console.log( 'Super' ); * } * Person.prototype.hello = function() { * console.log( 'hello' ); * }; * * var Manager = Base.inherits( Person, { * world: function() { * console.log( 'World' ); * } * }); * * // 因为没有指定构造器,父类的构造器将会执行。 * var instance = new Manager(); // => Super * * // 继承子父类的方法 * instance.hello(); // => hello * instance.world(); // => World * * // 子类的__super__属性指向父类 * console.log( Manager.__super__ === Person ); // => true */ inherits: function( Super, protos, staticProtos ) { var child; if ( typeof protos === 'function' ) { child = protos; protos = null; } else if ( protos && protos.hasOwnProperty('constructor') ) { child = protos.constructor; } else { child = function() { return Super.apply( this, arguments ); }; } // 复制静态方法 $.extend( true, child, Super, staticProtos || {} ); /* jshint camelcase: false */ // 让子类的__super__属性指向父类。 child.__super__ = Super.prototype; // 构建原型,添加原型方法或属性。 // 暂时用Object.create实现。 child.prototype = createObject( Super.prototype ); protos && $.extend( true, child.prototype, protos ); return child; }, /** * 一个不做任何事情的方法。可以用来赋值给默认的callback. * @method noop */ noop: noop, /** * 返回一个新的方法,此方法将已指定的`context`来执行。 * @grammar Base.bindFn( fn, context ) => Function * @method bindFn * @example * var doSomething = function() { * console.log( this.name ); * }, * obj = { * name: 'Object Name' * }, * aliasFn = Base.bind( doSomething, obj ); * * aliasFn(); // => Object Name * */ bindFn: bindFn, /** * 引用Console.log如果存在的话,否则引用一个[空函数noop](#WebUploader:Base.noop)。 * @grammar Base.log( args... ) => undefined * @method log */ log: (function() { if ( window.console ) { return bindFn( console.log, console ); } return noop; })(), nextTick: (function() { return function( cb ) { setTimeout( cb, 1 ); }; // @bug 当浏览器不在当前窗口时就停了。 // var next = window.requestAnimationFrame || // window.webkitRequestAnimationFrame || // window.mozRequestAnimationFrame || // function( cb ) { // window.setTimeout( cb, 1000 / 60 ); // }; // // fix: Uncaught TypeError: Illegal invocation // return bindFn( next, window ); })(), /** * 被[uncurrythis](http://www.2ality.com/2011/11/uncurrying-this.html)的数组slice方法。 * 将用来将非数组对象转化成数组对象。 * @grammar Base.slice( target, start[, end] ) => Array * @method slice * @example * function doSomthing() { * var args = Base.slice( arguments, 1 ); * console.log( args ); * } * * doSomthing( 'ignored', 'arg2', 'arg3' ); // => Array ["arg2", "arg3"] */ slice: uncurryThis( [].slice ), /** * 生成唯一的ID * @method guid * @grammar Base.guid() => String * @grammar Base.guid( prefx ) => String */ guid: (function() { var counter = 0; return function( prefix ) { var guid = (+new Date()).toString( 32 ), i = 0; for ( ; i < 5; i++ ) { guid += Math.floor( Math.random() * 65535 ).toString( 32 ); } return (prefix || 'wu_') + guid + (counter++).toString( 32 ); }; })(), /** * 格式化文件大小, 输出成带单位的字符串 * @method formatSize * @grammar Base.formatSize( size ) => String * @grammar Base.formatSize( size, pointLength ) => String * @grammar Base.formatSize( size, pointLength, units ) => String * @param {Number} size 文件大小 * @param {Number} [pointLength=2] 精确到的小数点数。 * @param {Array} [units=[ 'B', 'K', 'M', 'G', 'TB' ]] 单位数组。从字节,到千字节,一直往上指定。如果单位数组里面只指定了到了K(千字节),同时文件大小大于M, 此方法的输出将还是显示成多少K. * @example * console.log( Base.formatSize( 100 ) ); // => 100B * console.log( Base.formatSize( 1024 ) ); // => 1.00K * console.log( Base.formatSize( 1024, 0 ) ); // => 1K * console.log( Base.formatSize( 1024 * 1024 ) ); // => 1.00M * console.log( Base.formatSize( 1024 * 1024 * 1024 ) ); // => 1.00G * console.log( Base.formatSize( 1024 * 1024 * 1024, 0, ['B', 'KB', 'MB'] ) ); // => 1024MB */ formatSize: function( size, pointLength, units ) { var unit; units = units || [ 'B', 'K', 'M', 'G', 'TB' ]; while ( (unit = units.shift()) && size > 1024 ) { size = size / 1024; } return (unit === 'B' ? size : size.toFixed( pointLength || 2 )) + unit; } }; }); /** * 事件处理类,可以独立使用,也可以扩展给对象使用。 * @fileOverview Mediator */ define('mediator',[ 'base' ], function( Base ) { var $ = Base.$, slice = [].slice, separator = /\s+/, protos; // 根据条件过滤出事件handlers. function findHandlers( arr, name, callback, context ) { return $.grep( arr, function( handler ) { return handler && (!name || handler.e === name) && (!callback || handler.cb === callback || handler.cb._cb === callback) && (!context || handler.ctx === context); }); } function eachEvent( events, callback, iterator ) { // 不支持对象,只支持多个event用空格隔开 $.each( (events || '').split( separator ), function( _, key ) { iterator( key, callback ); }); } function triggerHanders( events, args ) { var stoped = false, i = -1, len = events.length, handler; while ( ++i < len ) { handler = events[ i ]; if ( handler.cb.apply( handler.ctx2, args ) === false ) { stoped = true; break; } } return !stoped; } protos = { /** * 绑定事件。 * * `callback`方法在执行时,arguments将会来源于trigger的时候携带的参数。如 * ```javascript * var obj = {}; * * // 使得obj有事件行为 * Mediator.installTo( obj ); * * obj.on( 'testa', function( arg1, arg2 ) { * console.log( arg1, arg2 ); // => 'arg1', 'arg2' * }); * * obj.trigger( 'testa', 'arg1', 'arg2' ); * ``` * * 如果`callback`中,某一个方法`return false`了,则后续的其他`callback`都不会被执行到。 * 切会影响到`trigger`方法的返回值,为`false`。 * * `on`还可以用来添加一个特殊事件`all`, 这样所有的事件触发都会响应到。同时此类`callback`中的arguments有一个不同处, * 就是第一个参数为`type`,记录当前是什么事件在触发。此类`callback`的优先级比脚低,会再正常`callback`执行完后触发。 * ```javascript * obj.on( 'all', function( type, arg1, arg2 ) { * console.log( type, arg1, arg2 ); // => 'testa', 'arg1', 'arg2' * }); * ``` * * @method on * @grammar on( name, callback[, context] ) => self * @param {String} name 事件名,支持多个事件用空格隔开 * @param {Function} callback 事件处理器 * @param {Object} [context] 事件处理器的上下文。 * @return {self} 返回自身,方便链式 * @chainable * @class Mediator */ on: function( name, callback, context ) { var me = this, set; if ( !callback ) { return this; } set = this._events || (this._events = []); eachEvent( name, callback, function( name, callback ) { var handler = { e: name }; handler.cb = callback; handler.ctx = context; handler.ctx2 = context || me; handler.id = set.length; set.push( handler ); }); return this; }, /** * 绑定事件,且当handler执行完后,自动解除绑定。 * @method once * @grammar once( name, callback[, context] ) => self * @param {String} name 事件名 * @param {Function} callback 事件处理器 * @param {Object} [context] 事件处理器的上下文。 * @return {self} 返回自身,方便链式 * @chainable */ once: function( name, callback, context ) { var me = this; if ( !callback ) { return me; } eachEvent( name, callback, function( name, callback ) { var once = function() { me.off( name, once ); return callback.apply( context || me, arguments ); }; once._cb = callback; me.on( name, once, context ); }); return me; }, /** * 解除事件绑定 * @method off * @grammar off( [name[, callback[, context] ] ] ) => self * @param {String} [name] 事件名 * @param {Function} [callback] 事件处理器 * @param {Object} [context] 事件处理器的上下文。 * @return {self} 返回自身,方便链式 * @chainable */ off: function( name, cb, ctx ) { var events = this._events; if ( !events ) { return this; } if ( !name && !cb && !ctx ) { this._events = []; return this; } eachEvent( name, cb, function( name, cb ) { $.each( findHandlers( events, name, cb, ctx ), function() { delete events[ this.id ]; }); }); return this; }, /** * 触发事件 * @method trigger * @grammar trigger( name[, args...] ) => self * @param {String} type 事件名 * @param {*} [...] 任意参数 * @return {Boolean} 如果handler中return false了,则返回false, 否则返回true */ trigger: function( type ) { var args, events, allEvents; if ( !this._events || !type ) { return this; } args = slice.call( arguments, 1 ); events = findHandlers( this._events, type ); allEvents = findHandlers( this._events, 'all' ); return triggerHanders( events, args ) && triggerHanders( allEvents, arguments ); } }; /** * 中介者,它本身是个单例,但可以通过[installTo](#WebUploader:Mediator:installTo)方法,使任何对象具备事件行为。 * 主要目的是负责模块与模块之间的合作,降低耦合度。 * * @class Mediator */ return $.extend({ /** * 可以通过这个接口,使任何对象具备事件功能。 * @method installTo * @param {Object} obj 需要具备事件行为的对象。 * @return {Object} 返回obj. */ installTo: function( obj ) { return $.extend( obj, protos ); } }, protos ); }); /** * @fileOverview Uploader上传类 */ define('uploader',[ 'base', 'mediator' ], function( Base, Mediator ) { var $ = Base.$; /** * 上传入口类。 * @class Uploader * @constructor * @grammar new Uploader( opts ) => Uploader * @example * var uploader = WebUploader.Uploader({ * swf: 'path_of_swf/Uploader.swf', * * // 开起分片上传。 * chunked: true * }); */ function Uploader( opts ) { this.options = $.extend( true, {}, Uploader.options, opts ); this._init( this.options ); } // default Options // widgets中有相应扩展 Uploader.options = {}; Mediator.installTo( Uploader.prototype ); // 批量添加纯命令式方法。 $.each({ upload: 'start-upload', stop: 'stop-upload', getFile: 'get-file', getFiles: 'get-files', addFile: 'add-file', addFiles: 'add-file', sort: 'sort-files', removeFile: 'remove-file', cancelFile: 'cancel-file', skipFile: 'skip-file', retry: 'retry', isInProgress: 'is-in-progress', makeThumb: 'make-thumb', md5File: 'md5-file', getDimension: 'get-dimension', addButton: 'add-btn', predictRuntimeType: 'predict-runtime-type', refresh: 'refresh', disable: 'disable', enable: 'enable', reset: 'reset' }, function( fn, command ) { Uploader.prototype[ fn ] = function() { return this.request( command, arguments ); }; }); $.extend( Uploader.prototype, { state: 'pending', _init: function( opts ) { var me = this; me.request( 'init', opts, function() { me.state = 'ready'; me.trigger('ready'); }); }, /** * 获取或者设置Uploader配置项。 * @method option * @grammar option( key ) => * * @grammar option( key, val ) => self * @example * * // 初始状态图片上传前不会压缩 * var uploader = new WebUploader.Uploader({ * compress: null; * }); * * // 修改后图片上传前,尝试将图片压缩到1600 * 1600 * uploader.option( 'compress', { * width: 1600, * height: 1600 * }); */ option: function( key, val ) { var opts = this.options; // setter if ( arguments.length > 1 ) { if ( $.isPlainObject( val ) && $.isPlainObject( opts[ key ] ) ) { $.extend( opts[ key ], val ); } else { opts[ key ] = val; } } else { // getter return key ? opts[ key ] : opts; } }, /** * 获取文件统计信息。返回一个包含一下信息的对象。 * * `successNum` 上传成功的文件数 * * `progressNum` 上传中的文件数 * * `cancelNum` 被删除的文件数 * * `invalidNum` 无效的文件数 * * `uploadFailNum` 上传失败的文件数 * * `queueNum` 还在队列中的文件数 * * `interruptNum` 被暂停的文件数 * @method getStats * @grammar getStats() => Object */ getStats: function() { // return this._mgr.getStats.apply( this._mgr, arguments ); var stats = this.request('get-stats'); return stats ? { successNum: stats.numOfSuccess, progressNum: stats.numOfProgress, // who care? // queueFailNum: 0, cancelNum: stats.numOfCancel, invalidNum: stats.numOfInvalid, uploadFailNum: stats.numOfUploadFailed, queueNum: stats.numOfQueue, interruptNum: stats.numofInterrupt } : {}; }, // 需要重写此方法来来支持opts.onEvent和instance.onEvent的处理器 trigger: function( type/*, args...*/ ) { var args = [].slice.call( arguments, 1 ), opts = this.options, name = 'on' + type.substring( 0, 1 ).toUpperCase() + type.substring( 1 ); if ( // 调用通过on方法注册的handler. Mediator.trigger.apply( this, arguments ) === false || // 调用opts.onEvent $.isFunction( opts[ name ] ) && opts[ name ].apply( this, args ) === false || // 调用this.onEvent $.isFunction( this[ name ] ) && this[ name ].apply( this, args ) === false || // 广播所有uploader的事件。 Mediator.trigger.apply( Mediator, [ this, type ].concat( args ) ) === false ) { return false; } return true; }, /** * 销毁 webuploader 实例 * @method destroy * @grammar destroy() => undefined */ destroy: function() { this.request( 'destroy', arguments ); this.off(); }, // widgets/widget.js将补充此方法的详细文档。 request: Base.noop }); /** * 创建Uploader实例,等同于new Uploader( opts ); * @method create * @class Base * @static * @grammar Base.create( opts ) => Uploader */ Base.create = Uploader.create = function( opts ) { return new Uploader( opts ); }; // 暴露Uploader,可以通过它来扩展业务逻辑。 Base.Uploader = Uploader; return Uploader; }); /** * @fileOverview Runtime管理器,负责Runtime的选择, 连接 */ define('runtime/runtime',[ 'base', 'mediator' ], function( Base, Mediator ) { var $ = Base.$, factories = {}, // 获取对象的第一个key getFirstKey = function( obj ) { for ( var key in obj ) { if ( obj.hasOwnProperty( key ) ) { return key; } } return null; }; // 接口类。 function Runtime( options ) { this.options = $.extend({ container: document.body }, options ); this.uid = Base.guid('rt_'); } $.extend( Runtime.prototype, { getContainer: function() { var opts = this.options, parent, container; if ( this._container ) { return this._container; } parent = $( opts.container || document.body ); container = $( document.createElement('div') ); container.attr( 'id', 'rt_' + this.uid ); container.css({ position: 'absolute', top: '0px', left: '0px', width: '1px', height: '1px', overflow: 'hidden' }); parent.append( container ); parent.addClass('webuploader-container'); this._container = container; this._parent = parent; return container; }, init: Base.noop, exec: Base.noop, destroy: function() { this._container && this._container.remove(); this._parent && this._parent.removeClass('webuploader-container'); this.off(); } }); Runtime.orders = 'html5,flash'; /** * 添加Runtime实现。 * @param {String} type 类型 * @param {Runtime} factory 具体Runtime实现。 */ Runtime.addRuntime = function( type, factory ) { factories[ type ] = factory; }; Runtime.hasRuntime = function( type ) { return !!(type ? factories[ type ] : getFirstKey( factories )); }; Runtime.create = function( opts, orders ) { var type, runtime; orders = orders || Runtime.orders; $.each( orders.split( /\s*,\s*/g ), function() { if ( factories[ this ] ) { type = this; return false; } }); type = type || getFirstKey( factories ); if ( !type ) { throw new Error('Runtime Error'); } runtime = new factories[ type ]( opts ); return runtime; }; Mediator.installTo( Runtime.prototype ); return Runtime; }); /** * @fileOverview Runtime管理器,负责Runtime的选择, 连接 */ define('runtime/client',[ 'base', 'mediator', 'runtime/runtime' ], function( Base, Mediator, Runtime ) { var cache; cache = (function() { var obj = {}; return { add: function( runtime ) { obj[ runtime.uid ] = runtime; }, get: function( ruid, standalone ) { var i; if ( ruid ) { return obj[ ruid ]; } for ( i in obj ) { // 有些类型不能重用,比如filepicker. if ( standalone && obj[ i ].__standalone ) { continue; } return obj[ i ]; } return null; }, remove: function( runtime ) { delete obj[ runtime.uid ]; } }; })(); function RuntimeClient( component, standalone ) { var deferred = Base.Deferred(), runtime; this.uid = Base.guid('client_'); // 允许runtime没有初始化之前,注册一些方法在初始化后执行。 this.runtimeReady = function( cb ) { return deferred.done( cb ); }; this.connectRuntime = function( opts, cb ) { // already connected. if ( runtime ) { throw new Error('already connected!'); } deferred.done( cb ); if ( typeof opts === 'string' && cache.get( opts ) ) { runtime = cache.get( opts ); } // 像filePicker只能独立存在,不能公用。 runtime = runtime || cache.get( null, standalone ); // 需要创建 if ( !runtime ) { runtime = Runtime.create( opts, opts.runtimeOrder ); runtime.__promise = deferred.promise(); runtime.once( 'ready', deferred.resolve ); runtime.init(); cache.add( runtime ); runtime.__client = 1; } else { // 来自cache Base.$.extend( runtime.options, opts ); runtime.__promise.then( deferred.resolve ); runtime.__client++; } standalone && (runtime.__standalone = standalone); return runtime; }; this.getRuntime = function() { return runtime; }; this.disconnectRuntime = function() { if ( !runtime ) { return; } runtime.__client--; if ( runtime.__client <= 0 ) { cache.remove( runtime ); delete runtime.__promise; runtime.destroy(); } runtime = null; }; this.exec = function() { if ( !runtime ) { return; } var args = Base.slice( arguments ); component && args.unshift( component ); return runtime.exec.apply( this, args ); }; this.getRuid = function() { return runtime && runtime.uid; }; this.destroy = (function( destroy ) { return function() { destroy && destroy.apply( this, arguments ); this.trigger('destroy'); this.off(); this.exec('destroy'); this.disconnectRuntime(); }; })( this.destroy ); } Mediator.installTo( RuntimeClient.prototype ); return RuntimeClient; }); /** * @fileOverview Blob */ define('lib/blob',[ 'base', 'runtime/client' ], function( Base, RuntimeClient ) { function Blob( ruid, source ) { var me = this; me.source = source; me.ruid = ruid; this.size = source.size || 0; // 如果没有指定 mimetype, 但是知道文件后缀。 if ( !source.type && this.ext && ~'jpg,jpeg,png,gif,bmp'.indexOf( this.ext ) ) { this.type = 'image/' + (this.ext === 'jpg' ? 'jpeg' : this.ext); } else { this.type = source.type || 'application/octet-stream'; } RuntimeClient.call( me, 'Blob' ); this.uid = source.uid || this.uid; if ( ruid ) { me.connectRuntime( ruid ); } } Base.inherits( RuntimeClient, { constructor: Blob, slice: function( start, end ) { return this.exec( 'slice', start, end ); }, getSource: function() { return this.source; } }); return Blob; }); /** * 为了统一化Flash的File和HTML5的File而存在。 * 以至于要调用Flash里面的File,也可以像调用HTML5版本的File一下。 * @fileOverview File */ define('lib/file',[ 'base', 'lib/blob' ], function( Base, Blob ) { var uid = 1, rExt = /\.([^.]+)$/; function File( ruid, file ) { var ext; this.name = file.name || ('untitled' + uid++); ext = rExt.exec( file.name ) ? RegExp.$1.toLowerCase() : ''; // todo 支持其他类型文件的转换。 // 如果有 mimetype, 但是文件名里面没有找出后缀规律 if ( !ext && file.type ) { ext = /\/(jpg|jpeg|png|gif|bmp)$/i.exec( file.type ) ? RegExp.$1.toLowerCase() : ''; this.name += '.' + ext; } this.ext = ext; this.lastModifiedDate = file.lastModifiedDate || (new Date()).toLocaleString(); Blob.apply( this, arguments ); } return Base.inherits( Blob, File ); }); /** * @fileOverview 错误信息 */ define('lib/filepicker',[ 'base', 'runtime/client', 'lib/file' ], function( Base, RuntimeClent, File ) { var $ = Base.$; function FilePicker( opts ) { opts = this.options = $.extend({}, FilePicker.options, opts ); opts.container = $( opts.id ); if ( !opts.container.length ) { throw new Error('按钮指定错误'); } opts.innerHTML = opts.innerHTML || opts.label || opts.container.html() || ''; opts.button = $( opts.button || document.createElement('div') ); opts.button.html( opts.innerHTML ); opts.container.html( opts.button ); RuntimeClent.call( this, 'FilePicker', true ); } FilePicker.options = { button: null, container: null, label: null, innerHTML: null, multiple: true, accept: null, name: 'file' }; Base.inherits( RuntimeClent, { constructor: FilePicker, init: function() { var me = this, opts = me.options, button = opts.button; button.addClass('webuploader-pick'); me.on( 'all', function( type ) { var files; switch ( type ) { case 'mouseenter': button.addClass('webuploader-pick-hover'); break; case 'mouseleave': button.removeClass('webuploader-pick-hover'); break; case 'change': files = me.exec('getFiles'); me.trigger( 'select', $.map( files, function( file ) { file = new File( me.getRuid(), file ); // 记录来源。 file._refer = opts.container; return file; }), opts.container ); break; } }); me.connectRuntime( opts, function() { me.refresh(); me.exec( 'init', opts ); me.trigger('ready'); }); this._resizeHandler = Base.bindFn( this.refresh, this ); $( window ).on( 'resize', this._resizeHandler ); }, refresh: function() { var shimContainer = this.getRuntime().getContainer(), button = this.options.button, width = button.outerWidth ? button.outerWidth() : button.width(), height = button.outerHeight ? button.outerHeight() : button.height(), pos = button.offset(); width && height && shimContainer.css({ bottom: 'auto', right: 'auto', width: width + 'px', height: height + 'px' }).offset( pos ); }, enable: function() { var btn = this.options.button; btn.removeClass('webuploader-pick-disable'); this.refresh(); }, disable: function() { var btn = this.options.button; this.getRuntime().getContainer().css({ top: '-99999px' }); btn.addClass('webuploader-pick-disable'); }, destroy: function() { var btn = this.options.button; $( window ).off( 'resize', this._resizeHandler ); btn.removeClass('webuploader-pick-disable webuploader-pick-hover ' + 'webuploader-pick'); } }); return FilePicker; }); /** * @fileOverview 组件基类。 */ define('widgets/widget',[ 'base', 'uploader' ], function( Base, Uploader ) { var $ = Base.$, _init = Uploader.prototype._init, _destroy = Uploader.prototype.destroy, IGNORE = {}, widgetClass = []; function isArrayLike( obj ) { if ( !obj ) { return false; } var length = obj.length, type = $.type( obj ); if ( obj.nodeType === 1 && length ) { return true; } return type === 'array' || type !== 'function' && type !== 'string' && (length === 0 || typeof length === 'number' && length > 0 && (length - 1) in obj); } function Widget( uploader ) { this.owner = uploader; this.options = uploader.options; } $.extend( Widget.prototype, { init: Base.noop, // 类Backbone的事件监听声明,监听uploader实例上的事件 // widget直接无法监听事件,事件只能通过uploader来传递 invoke: function( apiName, args ) { /* { 'make-thumb': 'makeThumb' } */ var map = this.responseMap; // 如果无API响应声明则忽略 if ( !map || !(apiName in map) || !(map[ apiName ] in this) || !$.isFunction( this[ map[ apiName ] ] ) ) { return IGNORE; } return this[ map[ apiName ] ].apply( this, args ); }, /** * 发送命令。当传入`callback`或者`handler`中返回`promise`时。返回一个当所有`handler`中的promise都完成后完成的新`promise`。 * @method request * @grammar request( command, args ) => * | Promise * @grammar request( command, args, callback ) => Promise * @for Uploader */ request: function() { return this.owner.request.apply( this.owner, arguments ); } }); // 扩展Uploader. $.extend( Uploader.prototype, { /** * @property {String | Array} [disableWidgets=undefined] * @namespace options * @for Uploader * @description 默认所有 Uploader.register 了的 widget 都会被加载,如果禁用某一部分,请通过此 option 指定黑名单。 */ // 覆写_init用来初始化widgets _init: function() { var me = this, widgets = me._widgets = [], deactives = me.options.disableWidgets || ''; $.each( widgetClass, function( _, klass ) { (!deactives || !~deactives.indexOf( klass._name )) && widgets.push( new klass( me ) ); }); return _init.apply( me, arguments ); }, request: function( apiName, args, callback ) { var i = 0, widgets = this._widgets, len = widgets && widgets.length, rlts = [], dfds = [], widget, rlt, promise, key; args = isArrayLike( args ) ? args : [ args ]; for ( ; i < len; i++ ) { widget = widgets[ i ]; rlt = widget.invoke( apiName, args ); if ( rlt !== IGNORE ) { // Deferred对象 if ( Base.isPromise( rlt ) ) { dfds.push( rlt ); } else { rlts.push( rlt ); } } } // 如果有callback,则用异步方式。 if ( callback || dfds.length ) { promise = Base.when.apply( Base, dfds ); key = promise.pipe ? 'pipe' : 'then'; // 很重要不能删除。删除了会死循环。 // 保证执行顺序。让callback总是在下一个 tick 中执行。 return promise[ key ](function() { var deferred = Base.Deferred(), args = arguments; if ( args.length === 1 ) { args = args[ 0 ]; } setTimeout(function() { deferred.resolve( args ); }, 1 ); return deferred.promise(); })[ callback ? key : 'done' ]( callback || Base.noop ); } else { return rlts[ 0 ]; } }, destroy: function() { _destroy.apply( this, arguments ); this._widgets = null; } }); /** * 添加组件 * @grammar Uploader.register(proto); * @grammar Uploader.register(map, proto); * @param {object} responseMap API 名称与函数实现的映射 * @param {object} proto 组件原型,构造函数通过 constructor 属性定义 * @method Uploader.register * @for Uploader * @example * Uploader.register({ * 'make-thumb': 'makeThumb' * }, { * init: function( options ) {}, * makeThumb: function() {} * }); * * Uploader.register({ * 'make-thumb': function() { * * } * }); */ Uploader.register = Widget.register = function( responseMap, widgetProto ) { var map = { init: 'init', destroy: 'destroy', name: 'anonymous' }, klass; if ( arguments.length === 1 ) { widgetProto = responseMap; // 自动生成 map 表。 $.each(widgetProto, function(key) { if ( key[0] === '_' || key === 'name' ) { key === 'name' && (map.name = widgetProto.name); return; } map[key.replace(/[A-Z]/g, '-$&').toLowerCase()] = key; }); } else { map = $.extend( map, responseMap ); } widgetProto.responseMap = map; klass = Base.inherits( Widget, widgetProto ); klass._name = map.name; widgetClass.push( klass ); return klass; }; /** * 删除插件,只有在注册时指定了名字的才能被删除。 * @grammar Uploader.unRegister(name); * @param {string} name 组件名字 * @method Uploader.unRegister * @for Uploader * @example * * Uploader.register({ * name: 'custom', * * 'make-thumb': function() { * * } * }); * * Uploader.unRegister('custom'); */ Uploader.unRegister = Widget.unRegister = function( name ) { if ( !name || name === 'anonymous' ) { return; } // 删除指定的插件。 for ( var i = widgetClass.length; i--; ) { if ( widgetClass[i]._name === name ) { widgetClass.splice(i, 1) } } }; return Widget; }); /** * @fileOverview 文件选择相关 */ define('widgets/filepicker',[ 'base', 'uploader', 'lib/filepicker', 'widgets/widget' ], function( Base, Uploader, FilePicker ) { var $ = Base.$; $.extend( Uploader.options, { /** * @property {Selector | Object} [pick=undefined] * @namespace options * @for Uploader * @description 指定选择文件的按钮容器,不指定则不创建按钮。 * * * `id` {Seletor|dom} 指定选择文件的按钮容器,不指定则不创建按钮。**注意** 这里虽然写的是 id, 但是不是只支持 id, 还支持 class, 或者 dom 节点。 * * `label` {String} 请采用 `innerHTML` 代替 * * `innerHTML` {String} 指定按钮文字。不指定时优先从指定的容器中看是否自带文字。 * * `multiple` {Boolean} 是否开起同时选择多个文件能力。 */ pick: null, /** * @property {Arroy} [accept=null] * @namespace options * @for Uploader * @description 指定接受哪些类型的文件。 由于目前还有ext转mimeType表,所以这里需要分开指定。 * * * `title` {String} 文字描述 * * `extensions` {String} 允许的文件后缀,不带点,多个用逗号分割。 * * `mimeTypes` {String} 多个用逗号分割。 * * 如: * * ``` * { * title: 'Images', * extensions: 'gif,jpg,jpeg,bmp,png', * mimeTypes: 'image/*' * } * ``` */ accept: null/*{ title: 'Images', extensions: 'gif,jpg,jpeg,bmp,png', mimeTypes: 'image/*' }*/ }); return Uploader.register({ name: 'picker', init: function( opts ) { this.pickers = []; return opts.pick && this.addBtn( opts.pick ); }, refresh: function() { $.each( this.pickers, function() { this.refresh(); }); }, /** * @method addButton * @for Uploader * @grammar addButton( pick ) => Promise * @description * 添加文件选择按钮,如果一个按钮不够,需要调用此方法来添加。参数跟[options.pick](#WebUploader:Uploader:options)一致。 * @example * uploader.addButton({ * id: '#btnContainer', * innerHTML: '选择文件' * }); */ addBtn: function( pick ) { var me = this, opts = me.options, accept = opts.accept, promises = []; if ( !pick ) { return; } $.isPlainObject( pick ) || (pick = { id: pick }); $( pick.id ).each(function() { var options, picker, deferred; deferred = Base.Deferred(); options = $.extend({}, pick, { accept: $.isPlainObject( accept ) ? [ accept ] : accept, swf: opts.swf, runtimeOrder: opts.runtimeOrder, id: this }); picker = new FilePicker( options ); picker.once( 'ready', deferred.resolve ); picker.on( 'select', function( files ) { me.owner.request( 'add-file', [ files ]); }); picker.init(); me.pickers.push( picker ); promises.push( deferred.promise() ); }); return Base.when.apply( Base, promises ); }, disable: function() { $.each( this.pickers, function() { this.disable(); }); }, enable: function() { $.each( this.pickers, function() { this.enable(); }); }, destroy: function() { $.each( this.pickers, function() { this.destroy(); }); this.pickers = null; } }); }); /** * @fileOverview Image */ define('lib/image',[ 'base', 'runtime/client', 'lib/blob' ], function( Base, RuntimeClient, Blob ) { var $ = Base.$; // 构造器。 function Image( opts ) { this.options = $.extend({}, Image.options, opts ); RuntimeClient.call( this, 'Image' ); this.on( 'load', function() { this._info = this.exec('info'); this._meta = this.exec('meta'); }); } // 默认选项。 Image.options = { // 默认的图片处理质量 quality: 90, // 是否裁剪 crop: false, // 是否保留头部信息 preserveHeaders: false, // 是否允许放大。 allowMagnify: false }; // 继承RuntimeClient. Base.inherits( RuntimeClient, { constructor: Image, info: function( val ) { // setter if ( val ) { this._info = val; return this; } // getter return this._info; }, meta: function( val ) { // setter if ( val ) { this._meta = val; return this; } // getter return this._meta; }, loadFromBlob: function( blob ) { var me = this, ruid = blob.getRuid(); this.connectRuntime( ruid, function() { me.exec( 'init', me.options ); me.exec( 'loadFromBlob', blob ); }); }, resize: function() { var args = Base.slice( arguments ); return this.exec.apply( this, [ 'resize' ].concat( args ) ); }, crop: function() { var args = Base.slice( arguments ); return this.exec.apply( this, [ 'crop' ].concat( args ) ); }, getAsDataUrl: function( type ) { return this.exec( 'getAsDataUrl', type ); }, getAsBlob: function( type ) { var blob = this.exec( 'getAsBlob', type ); return new Blob( this.getRuid(), blob ); } }); return Image; }); /** * @fileOverview 图片操作, 负责预览图片和上传前压缩图片 */ define('widgets/image',[ 'base', 'uploader', 'lib/image', 'widgets/widget' ], function( Base, Uploader, Image ) { var $ = Base.$, throttle; // 根据要处理的文件大小来节流,一次不能处理太多,会卡。 throttle = (function( max ) { var occupied = 0, waiting = [], tick = function() { var item; while ( waiting.length && occupied < max ) { item = waiting.shift(); occupied += item[ 0 ]; item[ 1 ](); } }; return function( emiter, size, cb ) { waiting.push([ size, cb ]); emiter.once( 'destroy', function() { occupied -= size; setTimeout( tick, 1 ); }); setTimeout( tick, 1 ); }; })( 5 * 1024 * 1024 ); $.extend( Uploader.options, { /** * @property {Object} [thumb] * @namespace options * @for Uploader * @description 配置生成缩略图的选项。 * * 默认为: * * ```javascript * { * width: 110, * height: 110, * * // 图片质量,只有type为`image/jpeg`的时候才有效。 * quality: 70, * * // 是否允许放大,如果想要生成小图的时候不失真,此选项应该设置为false. * allowMagnify: true, * * // 是否允许裁剪。 * crop: true, * * // 为空的话则保留原有图片格式。 * // 否则强制转换成指定的类型。 * type: 'image/jpeg' * } * ``` */ thumb: { width: 110, height: 110, quality: 70, allowMagnify: true, crop: true, preserveHeaders: false, // 为空的话则保留原有图片格式。 // 否则强制转换成指定的类型。 // IE 8下面 base64 大小不能超过 32K 否则预览失败,而非 jpeg 编码的图片很可 // 能会超过 32k, 所以这里设置成预览的时候都是 image/jpeg type: 'image/jpeg' }, /** * @property {Object} [compress] * @namespace options * @for Uploader * @description 配置压缩的图片的选项。如果此选项为`false`, 则图片在上传前不进行压缩。 * * 默认为: * * ```javascript * { * width: 1600, * height: 1600, * * // 图片质量,只有type为`image/jpeg`的时候才有效。 * quality: 90, * * // 是否允许放大,如果想要生成小图的时候不失真,此选项应该设置为false. * allowMagnify: false, * * // 是否允许裁剪。 * crop: false, * * // 是否保留头部meta信息。 * preserveHeaders: true, * * // 如果发现压缩后文件大小比原来还大,则使用原来图片 * // 此属性可能会影响图片自动纠正功能 * noCompressIfLarger: false, * * // 单位字节,如果图片大小小于此值,不会采用压缩。 * compressSize: 0 * } * ``` */ compress: { width: 1600, height: 1600, quality: 90, allowMagnify: false, crop: false, preserveHeaders: true } }); return Uploader.register({ name: 'image', /** * 生成缩略图,此过程为异步,所以需要传入`callback`。 * 通常情况在图片加入队里后调用此方法来生成预览图以增强交互效果。 * * 当 width 或者 height 的值介于 0 - 1 时,被当成百分比使用。 * * `callback`中可以接收到两个参数。 * * 第一个为error,如果生成缩略图有错误,此error将为真。 * * 第二个为ret, 缩略图的Data URL值。 * * **注意** * Date URL在IE6/7中不支持,所以不用调用此方法了,直接显示一张暂不支持预览图片好了。 * 也可以借助服务端,将 base64 数据传给服务端,生成一个临时文件供预览。 * * @method makeThumb * @grammar makeThumb( file, callback ) => undefined * @grammar makeThumb( file, callback, width, height ) => undefined * @for Uploader * @example * * uploader.on( 'fileQueued', function( file ) { * var $li = ...; * * uploader.makeThumb( file, function( error, ret ) { * if ( error ) { * $li.text('预览错误'); * } else { * $li.append('<img alt="" src="' + ret + '" />'); * } * }); * * }); */ makeThumb: function( file, cb, width, height ) { var opts, image; file = this.request( 'get-file', file ); // 只预览图片格式。 if ( !file.type.match( /^image/ ) ) { cb( true ); return; } opts = $.extend({}, this.options.thumb ); // 如果传入的是object. if ( $.isPlainObject( width ) ) { opts = $.extend( opts, width ); width = null; } width = width || opts.width; height = height || opts.height; image = new Image( opts ); image.once( 'load', function() { file._info = file._info || image.info(); file._meta = file._meta || image.meta(); // 如果 width 的值介于 0 - 1 // 说明设置的是百分比。 if ( width <= 1 && width > 0 ) { width = file._info.width * width; } // 同样的规则应用于 height if ( height <= 1 && height > 0 ) { height = file._info.height * height; } image.resize( width, height ); }); // 当 resize 完后 image.once( 'complete', function() { cb( false, image.getAsDataUrl( opts.type ) ); image.destroy(); }); image.once( 'error', function( reason ) { cb( reason || true ); image.destroy(); }); throttle( image, file.source.size, function() { file._info && image.info( file._info ); file._meta && image.meta( file._meta ); image.loadFromBlob( file.source ); }); }, beforeSendFile: function( file ) { var opts = this.options.compress || this.options.resize, compressSize = opts && opts.compressSize || 0, noCompressIfLarger = opts && opts.noCompressIfLarger || false, image, deferred; file = this.request( 'get-file', file ); // 只压缩 jpeg 图片格式。 // gif 可能会丢失针 // bmp png 基本上尺寸都不大,且压缩比比较小。 if ( !opts || !~'image/jpeg,image/jpg'.indexOf( file.type ) || file.size < compressSize || file._compressed ) { return; } opts = $.extend({}, opts ); deferred = Base.Deferred(); image = new Image( opts ); deferred.always(function() { image.destroy(); image = null; }); image.once( 'error', deferred.reject ); image.once( 'load', function() { var width = opts.width, height = opts.height; file._info = file._info || image.info(); file._meta = file._meta || image.meta(); // 如果 width 的值介于 0 - 1 // 说明设置的是百分比。 if ( width <= 1 && width > 0 ) { width = file._info.width * width; } // 同样的规则应用于 height if ( height <= 1 && height > 0 ) { height = file._info.height * height; } image.resize( width, height ); }); image.once( 'complete', function() { var blob, size; // 移动端 UC / qq 浏览器的无图模式下 // ctx.getImageData 处理大图的时候会报 Exception // INDEX_SIZE_ERR: DOM Exception 1 try { blob = image.getAsBlob( opts.type ); size = file.size; // 如果压缩后,比原来还大则不用压缩后的。 if ( !noCompressIfLarger || blob.size < size ) { // file.source.destroy && file.source.destroy(); file.source = blob; file.size = blob.size; file.trigger( 'resize', blob.size, size ); } // 标记,避免重复压缩。 file._compressed = true; deferred.resolve(); } catch ( e ) { // 出错了直接继续,让其上传原始图片 deferred.resolve(); } }); file._info && image.info( file._info ); file._meta && image.meta( file._meta ); image.loadFromBlob( file.source ); return deferred.promise(); } }); }); /** * @fileOverview 文件属性封装 */ define('file',[ 'base', 'mediator' ], function( Base, Mediator ) { var $ = Base.$, idPrefix = 'WU_FILE_', idSuffix = 0, rExt = /\.([^.]+)$/, statusMap = {}; function gid() { return idPrefix + idSuffix++; } /** * 文件类 * @class File * @constructor 构造函数 * @grammar new File( source ) => File * @param {Lib.File} source [lib.File](#Lib.File)实例, 此source对象是带有Runtime信息的。 */ function WUFile( source ) { /** * 文件名,包括扩展名(后缀) * @property name * @type {string} */ this.name = source.name || 'Untitled'; /** * 文件体积(字节) * @property size * @type {uint} * @default 0 */ this.size = source.size || 0; /** * 文件MIMETYPE类型,与文件类型的对应关系请参考[http://t.cn/z8ZnFny](http://t.cn/z8ZnFny) * @property type * @type {string} * @default 'application/octet-stream' */ this.type = source.type || 'application/octet-stream'; /** * 文件最后修改日期 * @property lastModifiedDate * @type {int} * @default 当前时间戳 */ this.lastModifiedDate = source.lastModifiedDate || (new Date() * 1); /** * 文件ID,每个对象具有唯一ID,与文件名无关 * @property id * @type {string} */ this.id = gid(); /** * 文件扩展名,通过文件名获取,例如test.png的扩展名为png * @property ext * @type {string} */ this.ext = rExt.exec( this.name ) ? RegExp.$1 : ''; /** * 状态文字说明。在不同的status语境下有不同的用途。 * @property statusText * @type {string} */ this.statusText = ''; // 存储文件状态,防止通过属性直接修改 statusMap[ this.id ] = WUFile.Status.INITED; this.source = source; this.loaded = 0; this.on( 'error', function( msg ) { this.setStatus( WUFile.Status.ERROR, msg ); }); } $.extend( WUFile.prototype, { /** * 设置状态,状态变化时会触发`change`事件。 * @method setStatus * @grammar setStatus( status[, statusText] ); * @param {File.Status|String} status [文件状态值](#WebUploader:File:File.Status) * @param {String} [statusText=''] 状态说明,常在error时使用,用http, abort,server等来标记是由于什么原因导致文件错误。 */ setStatus: function( status, text ) { var prevStatus = statusMap[ this.id ]; typeof text !== 'undefined' && (this.statusText = text); if ( status !== prevStatus ) { statusMap[ this.id ] = status; /** * 文件状态变化 * @event statuschange */ this.trigger( 'statuschange', status, prevStatus ); } }, /** * 获取文件状态 * @return {File.Status} * @example 文件状态具体包括以下几种类型: { // 初始化 INITED: 0, // 已入队列 QUEUED: 1, // 正在上传 PROGRESS: 2, // 上传出错 ERROR: 3, // 上传成功 COMPLETE: 4, // 上传取消 CANCELLED: 5 } */ getStatus: function() { return statusMap[ this.id ]; }, /** * 获取文件原始信息。 * @return {*} */ getSource: function() { return this.source; }, destroy: function() { this.off(); delete statusMap[ this.id ]; } }); Mediator.installTo( WUFile.prototype ); /** * 文件状态值,具体包括以下几种类型: * * `inited` 初始状态 * * `queued` 已经进入队列, 等待上传 * * `progress` 上传中 * * `complete` 上传完成。 * * `error` 上传出错,可重试 * * `interrupt` 上传中断,可续传。 * * `invalid` 文件不合格,不能重试上传。会自动从队列中移除。 * * `cancelled` 文件被移除。 * @property {Object} Status * @namespace File * @class File * @static */ WUFile.Status = { INITED: 'inited', // 初始状态 QUEUED: 'queued', // 已经进入队列, 等待上传 PROGRESS: 'progress', // 上传中 ERROR: 'error', // 上传出错,可重试 COMPLETE: 'complete', // 上传完成。 CANCELLED: 'cancelled', // 上传取消。 INTERRUPT: 'interrupt', // 上传中断,可续传。 INVALID: 'invalid' // 文件不合格,不能重试上传。 }; return WUFile; }); /** * @fileOverview 文件队列 */ define('queue',[ 'base', 'mediator', 'file' ], function( Base, Mediator, WUFile ) { var $ = Base.$, STATUS = WUFile.Status; /** * 文件队列, 用来存储各个状态中的文件。 * @class Queue * @extends Mediator */ function Queue() { /** * 统计文件数。 * * `numOfQueue` 队列中的文件数。 * * `numOfSuccess` 上传成功的文件数 * * `numOfCancel` 被取消的文件数 * * `numOfProgress` 正在上传中的文件数 * * `numOfUploadFailed` 上传错误的文件数。 * * `numOfInvalid` 无效的文件数。 * * `numofDeleted` 被移除的文件数。 * @property {Object} stats */ this.stats = { numOfQueue: 0, numOfSuccess: 0, numOfCancel: 0, numOfProgress: 0, numOfUploadFailed: 0, numOfInvalid: 0, numofDeleted: 0, numofInterrupt: 0 }; // 上传队列,仅包括等待上传的文件 this._queue = []; // 存储所有文件 this._map = {}; } $.extend( Queue.prototype, { /** * 将新文件加入对队列尾部 * * @method append * @param {File} file 文件对象 */ append: function( file ) { this._queue.push( file ); this._fileAdded( file ); return this; }, /** * 将新文件加入对队列头部 * * @method prepend * @param {File} file 文件对象 */ prepend: function( file ) { this._queue.unshift( file ); this._fileAdded( file ); return this; }, /** * 获取文件对象 * * @method getFile * @param {String} fileId 文件ID * @return {File} */ getFile: function( fileId ) { if ( typeof fileId !== 'string' ) { return fileId; } return this._map[ fileId ]; }, /** * 从队列中取出一个指定状态的文件。 * @grammar fetch( status ) => File * @method fetch * @param {String} status [文件状态值](#WebUploader:File:File.Status) * @return {File} [File](#WebUploader:File) */ fetch: function( status ) { var len = this._queue.length, i, file; status = status || STATUS.QUEUED; for ( i = 0; i < len; i++ ) { file = this._queue[ i ]; if ( status === file.getStatus() ) { return file; } } return null; }, /** * 对队列进行排序,能够控制文件上传顺序。 * @grammar sort( fn ) => undefined * @method sort * @param {Function} fn 排序方法 */ sort: function( fn ) { if ( typeof fn === 'function' ) { this._queue.sort( fn ); } }, /** * 获取指定类型的文件列表, 列表中每一个成员为[File](#WebUploader:File)对象。 * @grammar getFiles( [status1[, status2 ...]] ) => Array * @method getFiles * @param {String} [status] [文件状态值](#WebUploader:File:File.Status) */ getFiles: function() { var sts = [].slice.call( arguments, 0 ), ret = [], i = 0, len = this._queue.length, file; for ( ; i < len; i++ ) { file = this._queue[ i ]; if ( sts.length && !~$.inArray( file.getStatus(), sts ) ) { continue; } ret.push( file ); } return ret; }, /** * 在队列中删除文件。 * @grammar removeFile( file ) => Array * @method removeFile * @param {File} 文件对象。 */ removeFile: function( file ) { var me = this, existing = this._map[ file.id ]; if ( existing ) { delete this._map[ file.id ]; file.destroy(); this.stats.numofDeleted++; } }, _fileAdded: function( file ) { var me = this, existing = this._map[ file.id ]; if ( !existing ) { this._map[ file.id ] = file; file.on( 'statuschange', function( cur, pre ) { me._onFileStatusChange( cur, pre ); }); } }, _onFileStatusChange: function( curStatus, preStatus ) { var stats = this.stats; switch ( preStatus ) { case STATUS.PROGRESS: stats.numOfProgress--; break; case STATUS.QUEUED: stats.numOfQueue --; break; case STATUS.ERROR: stats.numOfUploadFailed--; break; case STATUS.INVALID: stats.numOfInvalid--; break; case STATUS.INTERRUPT: stats.numofInterrupt--; break; } switch ( curStatus ) { case STATUS.QUEUED: stats.numOfQueue++; break; case STATUS.PROGRESS: stats.numOfProgress++; break; case STATUS.ERROR: stats.numOfUploadFailed++; break; case STATUS.COMPLETE: stats.numOfSuccess++; break; case STATUS.CANCELLED: stats.numOfCancel++; break; case STATUS.INVALID: stats.numOfInvalid++; break; case STATUS.INTERRUPT: stats.numofInterrupt++; break; } } }); Mediator.installTo( Queue.prototype ); return Queue; }); /** * @fileOverview 队列 */ define('widgets/queue',[ 'base', 'uploader', 'queue', 'file', 'lib/file', 'runtime/client', 'widgets/widget' ], function( Base, Uploader, Queue, WUFile, File, RuntimeClient ) { var $ = Base.$, rExt = /\.\w+$/, Status = WUFile.Status; return Uploader.register({ name: 'queue', init: function( opts ) { var me = this, deferred, len, i, item, arr, accept, runtime; if ( $.isPlainObject( opts.accept ) ) { opts.accept = [ opts.accept ]; } // accept中的中生成匹配正则。 if ( opts.accept ) { arr = []; for ( i = 0, len = opts.accept.length; i < len; i++ ) { item = opts.accept[ i ].extensions; item && arr.push( item ); } if ( arr.length ) { accept = '\\.' + arr.join(',') .replace( /,/g, '$|\\.' ) .replace( /\*/g, '.*' ) + '$'; } me.accept = new RegExp( accept, 'i' ); } me.queue = new Queue(); me.stats = me.queue.stats; // 如果当前不是html5运行时,那就算了。 // 不执行后续操作 if ( this.request('predict-runtime-type') !== 'html5' ) { return; } // 创建一个 html5 运行时的 placeholder // 以至于外部添加原生 File 对象的时候能正确包裹一下供 webuploader 使用。 deferred = Base.Deferred(); this.placeholder = runtime = new RuntimeClient('Placeholder'); runtime.connectRuntime({ runtimeOrder: 'html5' }, function() { me._ruid = runtime.getRuid(); deferred.resolve(); }); return deferred.promise(); }, // 为了支持外部直接添加一个原生File对象。 _wrapFile: function( file ) { if ( !(file instanceof WUFile) ) { if ( !(file instanceof File) ) { if ( !this._ruid ) { throw new Error('Can\'t add external files.'); } file = new File( this._ruid, file ); } file = new WUFile( file ); } return file; }, // 判断文件是否可以被加入队列 acceptFile: function( file ) { var invalid = !file || !file.size || this.accept && // 如果名字中有后缀,才做后缀白名单处理。 rExt.exec( file.name ) && !this.accept.test( file.name ); return !invalid; }, /** * @event beforeFileQueued * @param {File} file File对象 * @description 当文件被加入队列之前触发,此事件的handler返回值为`false`,则此文件不会被添加进入队列。 * @for Uploader */ /** * @event fileQueued * @param {File} file File对象 * @description 当文件被加入队列以后触发。 * @for Uploader */ _addFile: function( file ) { var me = this; file = me._wrapFile( file ); // 不过类型判断允许不允许,先派送 `beforeFileQueued` if ( !me.owner.trigger( 'beforeFileQueued', file ) ) { return; } // 类型不匹配,则派送错误事件,并返回。 if ( !me.acceptFile( file ) ) { me.owner.trigger( 'error', 'Q_TYPE_DENIED', file ); return; } me.queue.append( file ); me.owner.trigger( 'fileQueued', file ); return file; }, getFile: function( fileId ) { return this.queue.getFile( fileId ); }, /** * @event filesQueued * @param {File} files 数组,内容为原始File(lib/File)对象。 * @description 当一批文件添加进队列以后触发。 * @for Uploader */ /** * @property {Boolean} [auto=false] * @namespace options * @for Uploader * @description 设置为 true 后,不需要手动调用上传,有文件选择即开始上传。 * */ /** * @method addFiles * @grammar addFiles( file ) => undefined * @grammar addFiles( [file1, file2 ...] ) => undefined * @param {Array of File or File} [files] Files 对象 数组 * @description 添加文件到队列 * @for Uploader */ addFile: function( files ) { var me = this; if ( !files.length ) { files = [ files ]; } files = $.map( files, function( file ) { return me._addFile( file ); }); me.owner.trigger( 'filesQueued', files ); if ( me.options.auto ) { setTimeout(function() { me.request('start-upload'); }, 20 ); } }, getStats: function() { return this.stats; }, /** * @event fileDequeued * @param {File} file File对象 * @description 当文件被移除队列后触发。 * @for Uploader */ /** * @method removeFile * @grammar removeFile( file ) => undefined * @grammar removeFile( id ) => undefined * @grammar removeFile( file, true ) => undefined * @grammar removeFile( id, true ) => undefined * @param {File|id} file File对象或这File对象的id * @description 移除某一文件, 默认只会标记文件状态为已取消,如果第二个参数为 `true` 则会从 queue 中移除。 * @for Uploader * @example * * $li.on('click', '.remove-this', function() { * uploader.removeFile( file ); * }) */ removeFile: function( file, remove ) { var me = this; file = file.id ? file : me.queue.getFile( file ); this.request( 'cancel-file', file ); if ( remove ) { this.queue.removeFile( file ); } }, /** * @method getFiles * @grammar getFiles() => Array * @grammar getFiles( status1, status2, status... ) => Array * @description 返回指定状态的文件集合,不传参数将返回所有状态的文件。 * @for Uploader * @example * console.log( uploader.getFiles() ); // => all files * console.log( uploader.getFiles('error') ) // => all error files. */ getFiles: function() { return this.queue.getFiles.apply( this.queue, arguments ); }, fetchFile: function() { return this.queue.fetch.apply( this.queue, arguments ); }, /** * @method retry * @grammar retry() => undefined * @grammar retry( file ) => undefined * @description 重试上传,重试指定文件,或者从出错的文件开始重新上传。 * @for Uploader * @example * function retry() { * uploader.retry(); * } */ retry: function( file, noForceStart ) { var me = this, files, i, len; if ( file ) { file = file.id ? file : me.queue.getFile( file ); file.setStatus( Status.QUEUED ); noForceStart || me.request('start-upload'); return; } files = me.queue.getFiles( Status.ERROR ); i = 0; len = files.length; for ( ; i < len; i++ ) { file = files[ i ]; file.setStatus( Status.QUEUED ); } me.request('start-upload'); }, /** * @method sort * @grammar sort( fn ) => undefined * @description 排序队列中的文件,在上传之前调整可以控制上传顺序。 * @for Uploader */ sortFiles: function() { return this.queue.sort.apply( this.queue, arguments ); }, /** * @event reset * @description 当 uploader 被重置的时候触发。 * @for Uploader */ /** * @method reset * @grammar reset() => undefined * @description 重置uploader。目前只重置了队列。 * @for Uploader * @example * uploader.reset(); */ reset: function() { this.owner.trigger('reset'); this.queue = new Queue(); this.stats = this.queue.stats; }, destroy: function() { this.reset(); this.placeholder && this.placeholder.destroy(); } }); }); /** * @fileOverview 添加获取Runtime相关信息的方法。 */ define('widgets/runtime',[ 'uploader', 'runtime/runtime', 'widgets/widget' ], function( Uploader, Runtime ) { Uploader.support = function() { return Runtime.hasRuntime.apply( Runtime, arguments ); }; /** * @property {Object} [runtimeOrder=html5,flash] * @namespace options * @for Uploader * @description 指定运行时启动顺序。默认会想尝试 html5 是否支持,如果支持则使用 html5, 否则则使用 flash. * * 可以将此值设置成 `flash`,来强制使用 flash 运行时。 */ return Uploader.register({ name: 'runtime', init: function() { if ( !this.predictRuntimeType() ) { throw Error('Runtime Error'); } }, /** * 预测Uploader将采用哪个`Runtime` * @grammar predictRuntimeType() => String * @method predictRuntimeType * @for Uploader */ predictRuntimeType: function() { var orders = this.options.runtimeOrder || Runtime.orders, type = this.type, i, len; if ( !type ) { orders = orders.split( /\s*,\s*/g ); for ( i = 0, len = orders.length; i < len; i++ ) { if ( Runtime.hasRuntime( orders[ i ] ) ) { this.type = type = orders[ i ]; break; } } } return type; } }); }); /** * @fileOverview Transport */ define('lib/transport',[ 'base', 'runtime/client', 'mediator' ], function( Base, RuntimeClient, Mediator ) { var $ = Base.$; function Transport( opts ) { var me = this; opts = me.options = $.extend( true, {}, Transport.options, opts || {} ); RuntimeClient.call( this, 'Transport' ); this._blob = null; this._formData = opts.formData || {}; this._headers = opts.headers || {}; this.on( 'progress', this._timeout ); this.on( 'load error', function() { me.trigger( 'progress', 1 ); clearTimeout( me._timer ); }); } Transport.options = { server: '', method: 'POST', // 跨域时,是否允许携带cookie, 只有html5 runtime才有效 withCredentials: false, fileVal: 'file', timeout: 2 * 60 * 1000, // 2分钟 formData: {}, headers: {}, sendAsBinary: false }; $.extend( Transport.prototype, { // 添加Blob, 只能添加一次,最后一次有效。 appendBlob: function( key, blob, filename ) { var me = this, opts = me.options; if ( me.getRuid() ) { me.disconnectRuntime(); } // 连接到blob归属的同一个runtime. me.connectRuntime( blob.ruid, function() { me.exec('init'); }); me._blob = blob; opts.fileVal = key || opts.fileVal; opts.filename = filename || opts.filename; }, // 添加其他字段 append: function( key, value ) { if ( typeof key === 'object' ) { $.extend( this._formData, key ); } else { this._formData[ key ] = value; } }, setRequestHeader: function( key, value ) { if ( typeof key === 'object' ) { $.extend( this._headers, key ); } else { this._headers[ key ] = value; } }, send: function( method ) { this.exec( 'send', method ); this._timeout(); }, abort: function() { clearTimeout( this._timer ); return this.exec('abort'); }, destroy: function() { this.trigger('destroy'); this.off(); this.exec('destroy'); this.disconnectRuntime(); }, getResponse: function() { return this.exec('getResponse'); }, getResponseAsJson: function() { return this.exec('getResponseAsJson'); }, getStatus: function() { return this.exec('getStatus'); }, _timeout: function() { var me = this, duration = me.options.timeout; if ( !duration ) { return; } clearTimeout( me._timer ); me._timer = setTimeout(function() { me.abort(); me.trigger( 'error', 'timeout' ); }, duration ); } }); // 让Transport具备事件功能。 Mediator.installTo( Transport.prototype ); return Transport; }); /** * @fileOverview 负责文件上传相关。 */ define('widgets/upload',[ 'base', 'uploader', 'file', 'lib/transport', 'widgets/widget' ], function( Base, Uploader, WUFile, Transport ) { var $ = Base.$, isPromise = Base.isPromise, Status = WUFile.Status; // 添加默认配置项 $.extend( Uploader.options, { /** * @property {Boolean} [prepareNextFile=false] * @namespace options * @for Uploader * @description 是否允许在文件传输时提前把下一个文件准备好。 * 对于一个文件的准备工作比较耗时,比如图片压缩,md5序列化。 * 如果能提前在当前文件传输期处理,可以节省总体耗时。 */ prepareNextFile: false, /** * @property {Boolean} [chunked=false] * @namespace options * @for Uploader * @description 是否要分片处理大文件上传。 */ chunked: false, /** * @property {Boolean} [chunkSize=5242880] * @namespace options * @for Uploader * @description 如果要分片,分多大一片? 默认大小为5M. */ chunkSize: 5 * 1024 * 1024, /** * @property {Boolean} [chunkRetry=2] * @namespace options * @for Uploader * @description 如果某个分片由于网络问题出错,允许自动重传多少次? */ chunkRetry: 2, /** * @property {Boolean} [threads=3] * @namespace options * @for Uploader * @description 上传并发数。允许同时最大上传进程数。 */ threads: 3, /** * @property {Object} [formData={}] * @namespace options * @for Uploader * @description 文件上传请求的参数表,每次发送都会发送此对象中的参数。 */ formData: {} /** * @property {Object} [fileVal='file'] * @namespace options * @for Uploader * @description 设置文件上传域的name。 */ /** * @property {Object} [method='POST'] * @namespace options * @for Uploader * @description 文件上传方式,`POST`或者`GET`。 */ /** * @property {Object} [sendAsBinary=false] * @namespace options * @for Uploader * @description 是否已二进制的流的方式发送文件,这样整个上传内容`php://input`都为文件内容, * 其他参数在$_GET数组中。 */ }); // 负责将文件切片。 function CuteFile( file, chunkSize ) { var pending = [], blob = file.source, total = blob.size, chunks = chunkSize ? Math.ceil( total / chunkSize ) : 1, start = 0, index = 0, len, api; api = { file: file, has: function() { return !!pending.length; }, shift: function() { return pending.shift(); }, unshift: function( block ) { pending.unshift( block ); } }; while ( index < chunks ) { len = Math.min( chunkSize, total - start ); pending.push({ file: file, start: start, end: chunkSize ? (start + len) : total, total: total, chunks: chunks, chunk: index++, cuted: api }); start += len; } file.blocks = pending.concat(); file.remaning = pending.length; return api; } Uploader.register({ name: 'upload', init: function() { var owner = this.owner, me = this; this.runing = false; this.progress = false; owner .on( 'startUpload', function() { me.progress = true; }) .on( 'uploadFinished', function() { me.progress = false; }); // 记录当前正在传的数据,跟threads相关 this.pool = []; // 缓存分好片的文件。 this.stack = []; // 缓存即将上传的文件。 this.pending = []; // 跟踪还有多少分片在上传中但是没有完成上传。 this.remaning = 0; this.__tick = Base.bindFn( this._tick, this ); owner.on( 'uploadComplete', function( file ) { // 把其他块取消了。 file.blocks && $.each( file.blocks, function( _, v ) { v.transport && (v.transport.abort(), v.transport.destroy()); delete v.transport; }); delete file.blocks; delete file.remaning; }); }, reset: function() { this.request( 'stop-upload', true ); this.runing = false; this.pool = []; this.stack = []; this.pending = []; this.remaning = 0; this._trigged = false; this._promise = null; }, /** * @event startUpload * @description 当开始上传流程时触发。 * @for Uploader */ /** * 开始上传。此方法可以从初始状态调用开始上传流程,也可以从暂停状态调用,继续上传流程。 * * 可以指定开始某一个文件。 * @grammar upload() => undefined * @grammar upload( file | fileId) => undefined * @method upload * @for Uploader */ startUpload: function(file) { var me = this; // 移出invalid的文件 $.each( me.request( 'get-files', Status.INVALID ), function() { me.request( 'remove-file', this ); }); // 如果指定了开始某个文件,则只开始指定文件。 if ( file ) { file = file.id ? file : me.request( 'get-file', file ); if (file.getStatus() === Status.INTERRUPT) { $.each( me.pool, function( _, v ) { // 之前暂停过。 if (v.file !== file) { return; } v.transport && v.transport.send(); }); file.setStatus( Status.QUEUED ); } else if (file.getStatus() === Status.PROGRESS) { return; } else { file.setStatus( Status.QUEUED ); } } else { $.each( me.request( 'get-files', [ Status.INITED ] ), function() { this.setStatus( Status.QUEUED ); }); } if ( me.runing ) { return; } me.runing = true; var files = []; // 如果有暂停的,则续传 $.each( me.pool, function( _, v ) { var file = v.file; if ( file.getStatus() === Status.INTERRUPT ) { files.push(file); me._trigged = false; v.transport && v.transport.send(); } }); var file; while ( (file = files.shift()) ) { file.setStatus( Status.PROGRESS ); } file || $.each( me.request( 'get-files', Status.INTERRUPT ), function() { this.setStatus( Status.PROGRESS ); }); me._trigged = false; Base.nextTick( me.__tick ); me.owner.trigger('startUpload'); }, /** * @event stopUpload * @description 当开始上传流程暂停时触发。 * @for Uploader */ /** * 暂停上传。第一个参数为是否中断上传当前正在上传的文件。 * * 如果第一个参数是文件,则只暂停指定文件。 * @grammar stop() => undefined * @grammar stop( true ) => undefined * @grammar stop( file ) => undefined * @method stop * @for Uploader */ stopUpload: function( file, interrupt ) { var me = this; if (file === true) { interrupt = file; file = null; } if ( me.runing === false ) { return; } // 如果只是暂停某个文件。 if ( file ) { file = file.id ? file : me.request( 'get-file', file ); if ( file.getStatus() !== Status.PROGRESS && file.getStatus() !== Status.QUEUED ) { return; } file.setStatus( Status.INTERRUPT ); $.each( me.pool, function( _, v ) { // 只 abort 指定的文件。 if (v.file !== file) { return; } v.transport && v.transport.abort(); me._putback(v); me._popBlock(v); }); return Base.nextTick( me.__tick ); } me.runing = false; if (this._promise && this._promise.file) { this._promise.file.setStatus( Status.INTERRUPT ); } interrupt && $.each( me.pool, function( _, v ) { v.transport && v.transport.abort(); v.file.setStatus( Status.INTERRUPT ); }); me.owner.trigger('stopUpload'); }, /** * @method cancelFile * @grammar cancelFile( file ) => undefined * @grammar cancelFile( id ) => undefined * @param {File|id} file File对象或这File对象的id * @description 标记文件状态为已取消, 同时将中断文件传输。 * @for Uploader * @example * * $li.on('click', '.remove-this', function() { * uploader.cancelFile( file ); * }) */ cancelFile: function( file ) { file = file.id ? file : this.request( 'get-file', file ); // 如果正在上传。 file.blocks && $.each( file.blocks, function( _, v ) { var _tr = v.transport; if ( _tr ) { _tr.abort(); _tr.destroy(); delete v.transport; } }); file.setStatus( Status.CANCELLED ); this.owner.trigger( 'fileDequeued', file ); }, /** * 判断`Uplaode`r是否正在上传中。 * @grammar isInProgress() => Boolean * @method isInProgress * @for Uploader */ isInProgress: function() { return !!this.progress; }, _getStats: function() { return this.request('get-stats'); }, /** * 掉过一个文件上传,直接标记指定文件为已上传状态。 * @grammar skipFile( file ) => undefined * @method skipFile * @for Uploader */ skipFile: function( file, status ) { file = file.id ? file : this.request( 'get-file', file ); file.setStatus( status || Status.COMPLETE ); file.skipped = true; // 如果正在上传。 file.blocks && $.each( file.blocks, function( _, v ) { var _tr = v.transport; if ( _tr ) { _tr.abort(); _tr.destroy(); delete v.transport; } }); this.owner.trigger( 'uploadSkip', file ); }, /** * @event uploadFinished * @description 当所有文件上传结束时触发。 * @for Uploader */ _tick: function() { var me = this, opts = me.options, fn, val; // 上一个promise还没有结束,则等待完成后再执行。 if ( me._promise ) { return me._promise.always( me.__tick ); } // 还有位置,且还有文件要处理的话。 if ( me.pool.length < opts.threads && (val = me._nextBlock()) ) { me._trigged = false; fn = function( val ) { me._promise = null; // 有可能是reject过来的,所以要检测val的类型。 val && val.file && me._startSend( val ); Base.nextTick( me.__tick ); }; me._promise = isPromise( val ) ? val.always( fn ) : fn( val ); // 没有要上传的了,且没有正在传输的了。 } else if ( !me.remaning && !me._getStats().numOfQueue && !me._getStats().numofInterrupt ) { me.runing = false; me._trigged || Base.nextTick(function() { me.owner.trigger('uploadFinished'); }); me._trigged = true; } }, _putback: function(block) { var idx; block.cuted.unshift(block); idx = this.stack.indexOf(block.cuted); if (!~idx) { this.stack.unshift(block.cuted); } }, _getStack: function() { var i = 0, act; while ( (act = this.stack[ i++ ]) ) { if ( act.has() && act.file.getStatus() === Status.PROGRESS ) { return act; } else if (!act.has() || act.file.getStatus() !== Status.PROGRESS && act.file.getStatus() !== Status.INTERRUPT ) { // 把已经处理完了的,或者,状态为非 progress(上传中)、 // interupt(暂停中) 的移除。 this.stack.splice( --i, 1 ); } } return null; }, _nextBlock: function() { var me = this, opts = me.options, act, next, done, preparing; // 如果当前文件还有没有需要传输的,则直接返回剩下的。 if ( (act = this._getStack()) ) { // 是否提前准备下一个文件 if ( opts.prepareNextFile && !me.pending.length ) { me._prepareNextFile(); } return act.shift(); // 否则,如果正在运行,则准备下一个文件,并等待完成后返回下个分片。 } else if ( me.runing ) { // 如果缓存中有,则直接在缓存中取,没有则去queue中取。 if ( !me.pending.length && me._getStats().numOfQueue ) { me._prepareNextFile(); } next = me.pending.shift(); done = function( file ) { if ( !file ) { return null; } act = CuteFile( file, opts.chunked ? opts.chunkSize : 0 ); me.stack.push(act); return act.shift(); }; // 文件可能还在prepare中,也有可能已经完全准备好了。 if ( isPromise( next) ) { preparing = next.file; next = next[ next.pipe ? 'pipe' : 'then' ]( done ); next.file = preparing; return next; } return done( next ); } }, /** * @event uploadStart * @param {File} file File对象 * @description 某个文件开始上传前触发,一个文件只会触发一次。 * @for Uploader */ _prepareNextFile: function() { var me = this, file = me.request('fetch-file'), pending = me.pending, promise; if ( file ) { promise = me.request( 'before-send-file', file, function() { // 有可能文件被skip掉了。文件被skip掉后,状态坑定不是Queued. if ( file.getStatus() === Status.PROGRESS || file.getStatus() === Status.INTERRUPT ) { return file; } return me._finishFile( file ); }); me.owner.trigger( 'uploadStart', file ); file.setStatus( Status.PROGRESS ); promise.file = file; // 如果还在pending中,则替换成文件本身。 promise.done(function() { var idx = $.inArray( promise, pending ); ~idx && pending.splice( idx, 1, file ); }); // befeore-send-file的钩子就有错误发生。 promise.fail(function( reason ) { file.setStatus( Status.ERROR, reason ); me.owner.trigger( 'uploadError', file, reason ); me.owner.trigger( 'uploadComplete', file ); }); pending.push( promise ); } }, // 让出位置了,可以让其他分片开始上传 _popBlock: function( block ) { var idx = $.inArray( block, this.pool ); this.pool.splice( idx, 1 ); block.file.remaning--; this.remaning--; }, // 开始上传,可以被掉过。如果promise被reject了,则表示跳过此分片。 _startSend: function( block ) { var me = this, file = block.file, promise; // 有可能在 before-send-file 的 promise 期间改变了文件状态。 // 如:暂停,取消 // 我们不能中断 promise, 但是可以在 promise 完后,不做上传操作。 if ( file.getStatus() !== Status.PROGRESS ) { // 如果是中断,则还需要放回去。 if (file.getStatus() === Status.INTERRUPT) { me._putback(block); } return; } me.pool.push( block ); me.remaning++; // 如果没有分片,则直接使用原始的。 // 不会丢失content-type信息。 block.blob = block.chunks === 1 ? file.source : file.source.slice( block.start, block.end ); // hook, 每个分片发送之前可能要做些异步的事情。 promise = me.request( 'before-send', block, function() { // 有可能文件已经上传出错了,所以不需要再传输了。 if ( file.getStatus() === Status.PROGRESS ) { me._doSend( block ); } else { me._popBlock( block ); Base.nextTick( me.__tick ); } }); // 如果为fail了,则跳过此分片。 promise.fail(function() { if ( file.remaning === 1 ) { me._finishFile( file ).always(function() { block.percentage = 1; me._popBlock( block ); me.owner.trigger( 'uploadComplete', file ); Base.nextTick( me.__tick ); }); } else { block.percentage = 1; me.updateFileProgress( file ); me._popBlock( block ); Base.nextTick( me.__tick ); } }); }, /** * @event uploadBeforeSend * @param {Object} object * @param {Object} data 默认的上传参数,可以扩展此对象来控制上传参数。 * @param {Object} headers 可以扩展此对象来控制上传头部。 * @description 当某个文件的分块在发送前触发,主要用来询问是否要添加附带参数,大文件在开起分片上传的前提下此事件可能会触发多次。 * @for Uploader */ /** * @event uploadAccept * @param {Object} object * @param {Object} ret 服务端的返回数据,json格式,如果服务端不是json格式,从ret._raw中取数据,自行解析。 * @description 当某个文件上传到服务端响应后,会派送此事件来询问服务端响应是否有效。如果此事件handler返回值为`false`, 则此文件将派送`server`类型的`uploadError`事件。 * @for Uploader */ /** * @event uploadProgress * @param {File} file File对象 * @param {Number} percentage 上传进度 * @description 上传过程中触发,携带上传进度。 * @for Uploader */ /** * @event uploadError * @param {File} file File对象 * @param {String} reason 出错的code * @description 当文件上传出错时触发。 * @for Uploader */ /** * @event uploadSuccess * @param {File} file File对象 * @param {Object} response 服务端返回的数据 * @description 当文件上传成功时触发。 * @for Uploader */ /** * @event uploadComplete * @param {File} [file] File对象 * @description 不管成功或者失败,文件上传完成时触发。 * @for Uploader */ // 做上传操作。 _doSend: function( block ) { var me = this, owner = me.owner, opts = me.options, file = block.file, tr = new Transport( opts ), data = $.extend({}, opts.formData ), headers = $.extend({}, opts.headers ), requestAccept, ret; block.transport = tr; tr.on( 'destroy', function() { delete block.transport; me._popBlock( block ); Base.nextTick( me.__tick ); }); // 广播上传进度。以文件为单位。 tr.on( 'progress', function( percentage ) { block.percentage = percentage; me.updateFileProgress( file ); }); // 用来询问,是否返回的结果是有错误的。 requestAccept = function( reject ) { var fn; ret = tr.getResponseAsJson() || {}; ret._raw = tr.getResponse(); fn = function( value ) { reject = value; }; // 服务端响应了,不代表成功了,询问是否响应正确。 if ( !owner.trigger( 'uploadAccept', block, ret, fn ) ) { reject = reject || 'server'; } return reject; }; // 尝试重试,然后广播文件上传出错。 tr.on( 'error', function( type, flag ) { block.retried = block.retried || 0; // 自动重试 if ( block.chunks > 1 && ~'http,abort'.indexOf( type ) && block.retried < opts.chunkRetry ) { block.retried++; tr.send(); } else { // http status 500 ~ 600 if ( !flag && type === 'server' ) { type = requestAccept( type ); } file.setStatus( Status.ERROR, type ); owner.trigger( 'uploadError', file, type ); owner.trigger( 'uploadComplete', file ); } }); // 上传成功 tr.on( 'load', function() { var reason; // 如果非预期,转向上传出错。 if ( (reason = requestAccept()) ) { tr.trigger( 'error', reason, true ); return; } // 全部上传完成。 if ( file.remaning === 1 ) { me._finishFile( file, ret ); } else { tr.destroy(); } }); // 配置默认的上传字段。 data = $.extend( data, { id: file.id, name: file.name, type: file.type, lastModifiedDate: file.lastModifiedDate, size: file.size }); block.chunks > 1 && $.extend( data, { chunks: block.chunks, chunk: block.chunk }); // 在发送之间可以添加字段什么的。。。 // 如果默认的字段不够使用,可以通过监听此事件来扩展 owner.trigger( 'uploadBeforeSend', block, data, headers ); // 开始发送。 tr.appendBlob( opts.fileVal, block.blob, file.name ); tr.append( data ); tr.setRequestHeader( headers ); tr.send(); }, // 完成上传。 _finishFile: function( file, ret, hds ) { var owner = this.owner; return owner .request( 'after-send-file', arguments, function() { file.setStatus( Status.COMPLETE ); owner.trigger( 'uploadSuccess', file, ret, hds ); }) .fail(function( reason ) { // 如果外部已经标记为invalid什么的,不再改状态。 if ( file.getStatus() === Status.PROGRESS ) { file.setStatus( Status.ERROR, reason ); } owner.trigger( 'uploadError', file, reason ); }) .always(function() { owner.trigger( 'uploadComplete', file ); }); }, updateFileProgress: function(file) { var totalPercent = 0, uploaded = 0; if (!file.blocks) { return; } $.each( file.blocks, function( _, v ) { uploaded += (v.percentage || 0) * (v.end - v.start); }); totalPercent = uploaded / file.size; this.owner.trigger( 'uploadProgress', file, totalPercent || 0 ); } }); }); /** * @fileOverview 各种验证,包括文件总大小是否超出、单文件是否超出和文件是否重复。 */ define('widgets/validator',[ 'base', 'uploader', 'file', 'widgets/widget' ], function( Base, Uploader, WUFile ) { var $ = Base.$, validators = {}, api; /** * @event error * @param {String} type 错误类型。 * @description 当validate不通过时,会以派送错误事件的形式通知调用者。通过`upload.on('error', handler)`可以捕获到此类错误,目前有以下错误会在特定的情况下派送错来。 * * * `Q_EXCEED_NUM_LIMIT` 在设置了`fileNumLimit`且尝试给`uploader`添加的文件数量超出这个值时派送。 * * `Q_EXCEED_SIZE_LIMIT` 在设置了`Q_EXCEED_SIZE_LIMIT`且尝试给`uploader`添加的文件总大小超出这个值时派送。 * * `Q_TYPE_DENIED` 当文件类型不满足时触发。。 * @for Uploader */ // 暴露给外面的api api = { // 添加验证器 addValidator: function( type, cb ) { validators[ type ] = cb; }, // 移除验证器 removeValidator: function( type ) { delete validators[ type ]; } }; // 在Uploader初始化的时候启动Validators的初始化 Uploader.register({ name: 'validator', init: function() { var me = this; Base.nextTick(function() { $.each( validators, function() { this.call( me.owner ); }); }); } }); /** * @property {int} [fileNumLimit=undefined] * @namespace options * @for Uploader * @description 验证文件总数量, 超出则不允许加入队列。 */ api.addValidator( 'fileNumLimit', function() { var uploader = this, opts = uploader.options, count = 0, max = parseInt( opts.fileNumLimit, 10 ), flag = true; if ( !max ) { return; } uploader.on( 'beforeFileQueued', function( file ) { if ( count >= max && flag ) { flag = false; this.trigger( 'error', 'Q_EXCEED_NUM_LIMIT', max, file ); setTimeout(function() { flag = true; }, 1 ); } return count >= max ? false : true; }); uploader.on( 'fileQueued', function() { count++; }); uploader.on( 'fileDequeued', function() { count--; }); uploader.on( 'reset', function() { count = 0; }); }); /** * @property {int} [fileSizeLimit=undefined] * @namespace options * @for Uploader * @description 验证文件总大小是否超出限制, 超出则不允许加入队列。 */ api.addValidator( 'fileSizeLimit', function() { var uploader = this, opts = uploader.options, count = 0, max = parseInt( opts.fileSizeLimit, 10 ), flag = true; if ( !max ) { return; } uploader.on( 'beforeFileQueued', function( file ) { var invalid = count + file.size > max; if ( invalid && flag ) { flag = false; this.trigger( 'error', 'Q_EXCEED_SIZE_LIMIT', max, file ); setTimeout(function() { flag = true; }, 1 ); } return invalid ? false : true; }); uploader.on( 'fileQueued', function( file ) { count += file.size; }); uploader.on( 'fileDequeued', function( file ) { count -= file.size; }); uploader.on( 'reset', function() { count = 0; }); }); /** * @property {int} [fileSingleSizeLimit=undefined] * @namespace options * @for Uploader * @description 验证单个文件大小是否超出限制, 超出则不允许加入队列。 */ api.addValidator( 'fileSingleSizeLimit', function() { var uploader = this, opts = uploader.options, max = opts.fileSingleSizeLimit; if ( !max ) { return; } uploader.on( 'beforeFileQueued', function( file ) { if ( file.size > max ) { file.setStatus( WUFile.Status.INVALID, 'exceed_size' ); this.trigger( 'error', 'F_EXCEED_SIZE', max, file ); return false; } }); }); /** * @property {Boolean} [duplicate=undefined] * @namespace options * @for Uploader * @description 去重, 根据文件名字、文件大小和最后修改时间来生成hash Key. */ api.addValidator( 'duplicate', function() { var uploader = this, opts = uploader.options, mapping = {}; if ( opts.duplicate ) { return; } function hashString( str ) { var hash = 0, i = 0, len = str.length, _char; for ( ; i < len; i++ ) { _char = str.charCodeAt( i ); hash = _char + (hash << 6) + (hash << 16) - hash; } return hash; } uploader.on( 'beforeFileQueued', function( file ) { var hash = file.__hash || (file.__hash = hashString( file.name + file.size + file.lastModifiedDate )); // 已经重复了 if ( mapping[ hash ] ) { this.trigger( 'error', 'F_DUPLICATE', file ); return false; } }); uploader.on( 'fileQueued', function( file ) { var hash = file.__hash; hash && (mapping[ hash ] = true); }); uploader.on( 'fileDequeued', function( file ) { var hash = file.__hash; hash && (delete mapping[ hash ]); }); uploader.on( 'reset', function() { mapping = {}; }); }); return api; }); /** * @fileOverview Runtime管理器,负责Runtime的选择, 连接 */ define('runtime/compbase',[],function() { function CompBase( owner, runtime ) { this.owner = owner; this.options = owner.options; this.getRuntime = function() { return runtime; }; this.getRuid = function() { return runtime.uid; }; this.trigger = function() { return owner.trigger.apply( owner, arguments ); }; } return CompBase; }); /** * @fileOverview FlashRuntime */ define('runtime/flash/runtime',[ 'base', 'runtime/runtime', 'runtime/compbase' ], function( Base, Runtime, CompBase ) { var $ = Base.$, type = 'flash', components = {}; function getFlashVersion() { var version; try { version = navigator.plugins[ 'Shockwave Flash' ]; version = version.description; } catch ( ex ) { try { version = new ActiveXObject('ShockwaveFlash.ShockwaveFlash') .GetVariable('$version'); } catch ( ex2 ) { version = '0.0'; } } version = version.match( /\d+/g ); return parseFloat( version[ 0 ] + '.' + version[ 1 ], 10 ); } function FlashRuntime() { var pool = {}, clients = {}, destroy = this.destroy, me = this, jsreciver = Base.guid('webuploader_'); Runtime.apply( me, arguments ); me.type = type; // 这个方法的调用者,实际上是RuntimeClient me.exec = function( comp, fn/*, args...*/ ) { var client = this, uid = client.uid, args = Base.slice( arguments, 2 ), instance; clients[ uid ] = client; if ( components[ comp ] ) { if ( !pool[ uid ] ) { pool[ uid ] = new components[ comp ]( client, me ); } instance = pool[ uid ]; if ( instance[ fn ] ) { return instance[ fn ].apply( instance, args ); } } return me.flashExec.apply( client, arguments ); }; function handler( evt, obj ) { var type = evt.type || evt, parts, uid; parts = type.split('::'); uid = parts[ 0 ]; type = parts[ 1 ]; // console.log.apply( console, arguments ); if ( type === 'Ready' && uid === me.uid ) { me.trigger('ready'); } else if ( clients[ uid ] ) { clients[ uid ].trigger( type.toLowerCase(), evt, obj ); } // Base.log( evt, obj ); } // flash的接受器。 window[ jsreciver ] = function() { var args = arguments; // 为了能捕获得到。 setTimeout(function() { handler.apply( null, args ); }, 1 ); }; this.jsreciver = jsreciver; this.destroy = function() { // @todo 删除池子中的所有实例 return destroy && destroy.apply( this, arguments ); }; this.flashExec = function( comp, fn ) { var flash = me.getFlash(), args = Base.slice( arguments, 2 ); return flash.exec( this.uid, comp, fn, args ); }; // @todo } Base.inherits( Runtime, { constructor: FlashRuntime, init: function() { var container = this.getContainer(), opts = this.options, html; // if not the minimal height, shims are not initialized // in older browsers (e.g FF3.6, IE6,7,8, Safari 4.0,5.0, etc) container.css({ position: 'absolute', top: '-8px', left: '-8px', width: '9px', height: '9px', overflow: 'hidden' }); // insert flash object html = '<object id="' + this.uid + '" type="application/' + 'x-shockwave-flash" data="' + opts.swf + '" '; if ( Base.browser.ie ) { html += 'classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" '; } html += 'width="100%" height="100%" style="outline:0">' + '<param name="movie" value="' + opts.swf + '" />' + '<param name="flashvars" value="uid=' + this.uid + '&jsreciver=' + this.jsreciver + '" />' + '<param name="wmode" value="transparent" />' + '<param name="allowscriptaccess" value="always" />' + '</object>'; container.html( html ); }, getFlash: function() { if ( this._flash ) { return this._flash; } this._flash = $( '#' + this.uid ).get( 0 ); return this._flash; } }); FlashRuntime.register = function( name, component ) { component = components[ name ] = Base.inherits( CompBase, $.extend({ // @todo fix this later flashExec: function() { var owner = this.owner, runtime = this.getRuntime(); return runtime.flashExec.apply( owner, arguments ); } }, component ) ); return component; }; if ( getFlashVersion() >= 11.4 ) { Runtime.addRuntime( type, FlashRuntime ); } return FlashRuntime; }); /** * @fileOverview FilePicker */ define('runtime/flash/filepicker',[ 'base', 'runtime/flash/runtime' ], function( Base, FlashRuntime ) { var $ = Base.$; return FlashRuntime.register( 'FilePicker', { init: function( opts ) { var copy = $.extend({}, opts ), len, i; // 修复Flash再没有设置title的情况下无法弹出flash文件选择框的bug. len = copy.accept && copy.accept.length; for ( i = 0; i < len; i++ ) { if ( !copy.accept[ i ].title ) { copy.accept[ i ].title = 'Files'; } } delete copy.button; delete copy.id; delete copy.container; this.flashExec( 'FilePicker', 'init', copy ); }, destroy: function() { this.flashExec( 'FilePicker', 'destroy' ); } }); }); /** * @fileOverview 图片压缩 */ define('runtime/flash/image',[ 'runtime/flash/runtime' ], function( FlashRuntime ) { return FlashRuntime.register( 'Image', { // init: function( options ) { // var owner = this.owner; // this.flashExec( 'Image', 'init', options ); // owner.on( 'load', function() { // debugger; // }); // }, loadFromBlob: function( blob ) { var owner = this.owner; owner.info() && this.flashExec( 'Image', 'info', owner.info() ); owner.meta() && this.flashExec( 'Image', 'meta', owner.meta() ); this.flashExec( 'Image', 'loadFromBlob', blob.uid ); } }); }); /** * @fileOverview Blob Html实现 */ define('runtime/flash/blob',[ 'runtime/flash/runtime', 'lib/blob' ], function( FlashRuntime, Blob ) { return FlashRuntime.register( 'Blob', { slice: function( start, end ) { var blob = this.flashExec( 'Blob', 'slice', start, end ); return new Blob( blob.uid, blob ); } }); }); /** * @fileOverview Transport flash实现 */ define('runtime/flash/transport',[ 'base', 'runtime/flash/runtime', 'runtime/client' ], function( Base, FlashRuntime, RuntimeClient ) { var $ = Base.$; return FlashRuntime.register( 'Transport', { init: function() { this._status = 0; this._response = null; this._responseJson = null; }, send: function() { var owner = this.owner, opts = this.options, xhr = this._initAjax(), blob = owner._blob, server = opts.server, binary; xhr.connectRuntime( blob.ruid ); if ( opts.sendAsBinary ) { server += (/\?/.test( server ) ? '&' : '?') + $.param( owner._formData ); binary = blob.uid; } else { $.each( owner._formData, function( k, v ) { xhr.exec( 'append', k, v ); }); xhr.exec( 'appendBlob', opts.fileVal, blob.uid, opts.filename || owner._formData.name || '' ); } this._setRequestHeader( xhr, opts.headers ); xhr.exec( 'send', { method: opts.method, url: server, forceURLStream: opts.forceURLStream, mimeType: 'application/octet-stream' }, binary ); }, getStatus: function() { return this._status; }, getResponse: function() { return this._response || ''; }, getResponseAsJson: function() { return this._responseJson; }, abort: function() { var xhr = this._xhr; if ( xhr ) { xhr.exec('abort'); xhr.destroy(); this._xhr = xhr = null; } }, destroy: function() { this.abort(); }, _initAjax: function() { var me = this, xhr = new RuntimeClient('XMLHttpRequest'); xhr.on( 'uploadprogress progress', function( e ) { var percent = e.loaded / e.total; percent = Math.min( 1, Math.max( 0, percent ) ); return me.trigger( 'progress', percent ); }); xhr.on( 'load', function() { var status = xhr.exec('getStatus'), readBody = false, err = '', p; xhr.off(); me._xhr = null; if ( status >= 200 && status < 300 ) { readBody = true; } else if ( status >= 500 && status < 600 ) { readBody = true; err = 'server'; } else { err = 'http'; } if ( readBody ) { me._response = xhr.exec('getResponse'); me._response = decodeURIComponent( me._response ); // flash 处理可能存在 bug, 没辙只能靠 js 了 // try { // me._responseJson = xhr.exec('getResponseAsJson'); // } catch ( error ) { p = window.JSON && window.JSON.parse || function( s ) { try { return new Function('return ' + s).call(); } catch ( err ) { return {}; } }; me._responseJson = me._response ? p(me._response) : {}; // } } xhr.destroy(); xhr = null; return err ? me.trigger( 'error', err ) : me.trigger('load'); }); xhr.on( 'error', function() { xhr.off(); me._xhr = null; me.trigger( 'error', 'http' ); }); me._xhr = xhr; return xhr; }, _setRequestHeader: function( xhr, headers ) { $.each( headers, function( key, val ) { xhr.exec( 'setRequestHeader', key, val ); }); } }); }); /** * @fileOverview 只有flash实现的文件版本。 */ define('preset/flashonly',[ 'base', // widgets 'widgets/filepicker', 'widgets/image', 'widgets/queue', 'widgets/runtime', 'widgets/upload', 'widgets/validator', // runtimes // flash 'runtime/flash/filepicker', 'runtime/flash/image', 'runtime/flash/blob', 'runtime/flash/transport' ], function( Base ) { return Base; }); define('webuploader',[ 'preset/flashonly' ], function( preset ) { return preset; }); return require('webuploader'); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/webuploader/webuploader.html5only.js ================================================ /*! WebUploader 0.1.5 */ /** * @fileOverview 让内部各个部件的代码可以用[amd](https://github.com/amdjs/amdjs-api/wiki/AMD)模块定义方式组织起来。 * * AMD API 内部的简单不完全实现,请忽略。只有当WebUploader被合并成一个文件的时候才会引入。 */ (function( root, factory ) { var modules = {}, // 内部require, 简单不完全实现。 // https://github.com/amdjs/amdjs-api/wiki/require _require = function( deps, callback ) { var args, len, i; // 如果deps不是数组,则直接返回指定module if ( typeof deps === 'string' ) { return getModule( deps ); } else { args = []; for( len = deps.length, i = 0; i < len; i++ ) { args.push( getModule( deps[ i ] ) ); } return callback.apply( null, args ); } }, // 内部define,暂时不支持不指定id. _define = function( id, deps, factory ) { if ( arguments.length === 2 ) { factory = deps; deps = null; } _require( deps || [], function() { setModule( id, factory, arguments ); }); }, // 设置module, 兼容CommonJs写法。 setModule = function( id, factory, args ) { var module = { exports: factory }, returned; if ( typeof factory === 'function' ) { args.length || (args = [ _require, module.exports, module ]); returned = factory.apply( null, args ); returned !== undefined && (module.exports = returned); } modules[ id ] = module.exports; }, // 根据id获取module getModule = function( id ) { var module = modules[ id ] || root[ id ]; if ( !module ) { throw new Error( '`' + id + '` is undefined' ); } return module; }, // 将所有modules,将路径ids装换成对象。 exportsTo = function( obj ) { var key, host, parts, part, last, ucFirst; // make the first character upper case. ucFirst = function( str ) { return str && (str.charAt( 0 ).toUpperCase() + str.substr( 1 )); }; for ( key in modules ) { host = obj; if ( !modules.hasOwnProperty( key ) ) { continue; } parts = key.split('/'); last = ucFirst( parts.pop() ); while( (part = ucFirst( parts.shift() )) ) { host[ part ] = host[ part ] || {}; host = host[ part ]; } host[ last ] = modules[ key ]; } return obj; }, makeExport = function( dollar ) { root.__dollar = dollar; // exports every module. return exportsTo( factory( root, _define, _require ) ); }, origin; if ( typeof module === 'object' && typeof module.exports === 'object' ) { // For CommonJS and CommonJS-like environments where a proper window is present, module.exports = makeExport(); } else if ( typeof define === 'function' && define.amd ) { // Allow using this built library as an AMD module // in another project. That other project will only // see this AMD call, not the internal modules in // the closure below. define([ 'jquery' ], makeExport ); } else { // Browser globals case. Just assign the // result to a property on the global. origin = root.WebUploader; root.WebUploader = makeExport(); root.WebUploader.noConflict = function() { root.WebUploader = origin; }; } })( window, function( window, define, require ) { /** * @fileOverview jQuery or Zepto */ define('dollar-third',[],function() { var $ = window.__dollar || window.jQuery || window.Zepto; if ( !$ ) { throw new Error('jQuery or Zepto not found!'); } return $; }); /** * @fileOverview Dom 操作相关 */ define('dollar',[ 'dollar-third' ], function( _ ) { return _; }); /** * @fileOverview 使用jQuery的Promise */ define('promise-third',[ 'dollar' ], function( $ ) { return { Deferred: $.Deferred, when: $.when, isPromise: function( anything ) { return anything && typeof anything.then === 'function'; } }; }); /** * @fileOverview Promise/A+ */ define('promise',[ 'promise-third' ], function( _ ) { return _; }); /** * @fileOverview 基础类方法。 */ /** * Web Uploader内部类的详细说明,以下提及的功能类,都可以在`WebUploader`这个变量中访问到。 * * As you know, Web Uploader的每个文件都是用过[AMD](https://github.com/amdjs/amdjs-api/wiki/AMD)规范中的`define`组织起来的, 每个Module都会有个module id. * 默认module id为该文件的路径,而此路径将会转化成名字空间存放在WebUploader中。如: * * * module `base`:WebUploader.Base * * module `file`: WebUploader.File * * module `lib/dnd`: WebUploader.Lib.Dnd * * module `runtime/html5/dnd`: WebUploader.Runtime.Html5.Dnd * * * 以下文档中对类的使用可能省略掉了`WebUploader`前缀。 * @module WebUploader * @title WebUploader API文档 */ define('base',[ 'dollar', 'promise' ], function( $, promise ) { var noop = function() {}, call = Function.call; // http://jsperf.com/uncurrythis // 反科里化 function uncurryThis( fn ) { return function() { return call.apply( fn, arguments ); }; } function bindFn( fn, context ) { return function() { return fn.apply( context, arguments ); }; } function createObject( proto ) { var f; if ( Object.create ) { return Object.create( proto ); } else { f = function() {}; f.prototype = proto; return new f(); } } /** * 基础类,提供一些简单常用的方法。 * @class Base */ return { /** * @property {String} version 当前版本号。 */ version: '0.1.5', /** * @property {jQuery|Zepto} $ 引用依赖的jQuery或者Zepto对象。 */ $: $, Deferred: promise.Deferred, isPromise: promise.isPromise, when: promise.when, /** * @description 简单的浏览器检查结果。 * * * `webkit` webkit版本号,如果浏览器为非webkit内核,此属性为`undefined`。 * * `chrome` chrome浏览器版本号,如果浏览器为chrome,此属性为`undefined`。 * * `ie` ie浏览器版本号,如果浏览器为非ie,此属性为`undefined`。**暂不支持ie10+** * * `firefox` firefox浏览器版本号,如果浏览器为非firefox,此属性为`undefined`。 * * `safari` safari浏览器版本号,如果浏览器为非safari,此属性为`undefined`。 * * `opera` opera浏览器版本号,如果浏览器为非opera,此属性为`undefined`。 * * @property {Object} [browser] */ browser: (function( ua ) { var ret = {}, webkit = ua.match( /WebKit\/([\d.]+)/ ), chrome = ua.match( /Chrome\/([\d.]+)/ ) || ua.match( /CriOS\/([\d.]+)/ ), ie = ua.match( /MSIE\s([\d\.]+)/ ) || ua.match( /(?:trident)(?:.*rv:([\w.]+))?/i ), firefox = ua.match( /Firefox\/([\d.]+)/ ), safari = ua.match( /Safari\/([\d.]+)/ ), opera = ua.match( /OPR\/([\d.]+)/ ); webkit && (ret.webkit = parseFloat( webkit[ 1 ] )); chrome && (ret.chrome = parseFloat( chrome[ 1 ] )); ie && (ret.ie = parseFloat( ie[ 1 ] )); firefox && (ret.firefox = parseFloat( firefox[ 1 ] )); safari && (ret.safari = parseFloat( safari[ 1 ] )); opera && (ret.opera = parseFloat( opera[ 1 ] )); return ret; })( navigator.userAgent ), /** * @description 操作系统检查结果。 * * * `android` 如果在android浏览器环境下,此值为对应的android版本号,否则为`undefined`。 * * `ios` 如果在ios浏览器环境下,此值为对应的ios版本号,否则为`undefined`。 * @property {Object} [os] */ os: (function( ua ) { var ret = {}, // osx = !!ua.match( /\(Macintosh\; Intel / ), android = ua.match( /(?:Android);?[\s\/]+([\d.]+)?/ ), ios = ua.match( /(?:iPad|iPod|iPhone).*OS\s([\d_]+)/ ); // osx && (ret.osx = true); android && (ret.android = parseFloat( android[ 1 ] )); ios && (ret.ios = parseFloat( ios[ 1 ].replace( /_/g, '.' ) )); return ret; })( navigator.userAgent ), /** * 实现类与类之间的继承。 * @method inherits * @grammar Base.inherits( super ) => child * @grammar Base.inherits( super, protos ) => child * @grammar Base.inherits( super, protos, statics ) => child * @param {Class} super 父类 * @param {Object | Function} [protos] 子类或者对象。如果对象中包含constructor,子类将是用此属性值。 * @param {Function} [protos.constructor] 子类构造器,不指定的话将创建个临时的直接执行父类构造器的方法。 * @param {Object} [statics] 静态属性或方法。 * @return {Class} 返回子类。 * @example * function Person() { * console.log( 'Super' ); * } * Person.prototype.hello = function() { * console.log( 'hello' ); * }; * * var Manager = Base.inherits( Person, { * world: function() { * console.log( 'World' ); * } * }); * * // 因为没有指定构造器,父类的构造器将会执行。 * var instance = new Manager(); // => Super * * // 继承子父类的方法 * instance.hello(); // => hello * instance.world(); // => World * * // 子类的__super__属性指向父类 * console.log( Manager.__super__ === Person ); // => true */ inherits: function( Super, protos, staticProtos ) { var child; if ( typeof protos === 'function' ) { child = protos; protos = null; } else if ( protos && protos.hasOwnProperty('constructor') ) { child = protos.constructor; } else { child = function() { return Super.apply( this, arguments ); }; } // 复制静态方法 $.extend( true, child, Super, staticProtos || {} ); /* jshint camelcase: false */ // 让子类的__super__属性指向父类。 child.__super__ = Super.prototype; // 构建原型,添加原型方法或属性。 // 暂时用Object.create实现。 child.prototype = createObject( Super.prototype ); protos && $.extend( true, child.prototype, protos ); return child; }, /** * 一个不做任何事情的方法。可以用来赋值给默认的callback. * @method noop */ noop: noop, /** * 返回一个新的方法,此方法将已指定的`context`来执行。 * @grammar Base.bindFn( fn, context ) => Function * @method bindFn * @example * var doSomething = function() { * console.log( this.name ); * }, * obj = { * name: 'Object Name' * }, * aliasFn = Base.bind( doSomething, obj ); * * aliasFn(); // => Object Name * */ bindFn: bindFn, /** * 引用Console.log如果存在的话,否则引用一个[空函数noop](#WebUploader:Base.noop)。 * @grammar Base.log( args... ) => undefined * @method log */ log: (function() { if ( window.console ) { return bindFn( console.log, console ); } return noop; })(), nextTick: (function() { return function( cb ) { setTimeout( cb, 1 ); }; // @bug 当浏览器不在当前窗口时就停了。 // var next = window.requestAnimationFrame || // window.webkitRequestAnimationFrame || // window.mozRequestAnimationFrame || // function( cb ) { // window.setTimeout( cb, 1000 / 60 ); // }; // // fix: Uncaught TypeError: Illegal invocation // return bindFn( next, window ); })(), /** * 被[uncurrythis](http://www.2ality.com/2011/11/uncurrying-this.html)的数组slice方法。 * 将用来将非数组对象转化成数组对象。 * @grammar Base.slice( target, start[, end] ) => Array * @method slice * @example * function doSomthing() { * var args = Base.slice( arguments, 1 ); * console.log( args ); * } * * doSomthing( 'ignored', 'arg2', 'arg3' ); // => Array ["arg2", "arg3"] */ slice: uncurryThis( [].slice ), /** * 生成唯一的ID * @method guid * @grammar Base.guid() => String * @grammar Base.guid( prefx ) => String */ guid: (function() { var counter = 0; return function( prefix ) { var guid = (+new Date()).toString( 32 ), i = 0; for ( ; i < 5; i++ ) { guid += Math.floor( Math.random() * 65535 ).toString( 32 ); } return (prefix || 'wu_') + guid + (counter++).toString( 32 ); }; })(), /** * 格式化文件大小, 输出成带单位的字符串 * @method formatSize * @grammar Base.formatSize( size ) => String * @grammar Base.formatSize( size, pointLength ) => String * @grammar Base.formatSize( size, pointLength, units ) => String * @param {Number} size 文件大小 * @param {Number} [pointLength=2] 精确到的小数点数。 * @param {Array} [units=[ 'B', 'K', 'M', 'G', 'TB' ]] 单位数组。从字节,到千字节,一直往上指定。如果单位数组里面只指定了到了K(千字节),同时文件大小大于M, 此方法的输出将还是显示成多少K. * @example * console.log( Base.formatSize( 100 ) ); // => 100B * console.log( Base.formatSize( 1024 ) ); // => 1.00K * console.log( Base.formatSize( 1024, 0 ) ); // => 1K * console.log( Base.formatSize( 1024 * 1024 ) ); // => 1.00M * console.log( Base.formatSize( 1024 * 1024 * 1024 ) ); // => 1.00G * console.log( Base.formatSize( 1024 * 1024 * 1024, 0, ['B', 'KB', 'MB'] ) ); // => 1024MB */ formatSize: function( size, pointLength, units ) { var unit; units = units || [ 'B', 'K', 'M', 'G', 'TB' ]; while ( (unit = units.shift()) && size > 1024 ) { size = size / 1024; } return (unit === 'B' ? size : size.toFixed( pointLength || 2 )) + unit; } }; }); /** * 事件处理类,可以独立使用,也可以扩展给对象使用。 * @fileOverview Mediator */ define('mediator',[ 'base' ], function( Base ) { var $ = Base.$, slice = [].slice, separator = /\s+/, protos; // 根据条件过滤出事件handlers. function findHandlers( arr, name, callback, context ) { return $.grep( arr, function( handler ) { return handler && (!name || handler.e === name) && (!callback || handler.cb === callback || handler.cb._cb === callback) && (!context || handler.ctx === context); }); } function eachEvent( events, callback, iterator ) { // 不支持对象,只支持多个event用空格隔开 $.each( (events || '').split( separator ), function( _, key ) { iterator( key, callback ); }); } function triggerHanders( events, args ) { var stoped = false, i = -1, len = events.length, handler; while ( ++i < len ) { handler = events[ i ]; if ( handler.cb.apply( handler.ctx2, args ) === false ) { stoped = true; break; } } return !stoped; } protos = { /** * 绑定事件。 * * `callback`方法在执行时,arguments将会来源于trigger的时候携带的参数。如 * ```javascript * var obj = {}; * * // 使得obj有事件行为 * Mediator.installTo( obj ); * * obj.on( 'testa', function( arg1, arg2 ) { * console.log( arg1, arg2 ); // => 'arg1', 'arg2' * }); * * obj.trigger( 'testa', 'arg1', 'arg2' ); * ``` * * 如果`callback`中,某一个方法`return false`了,则后续的其他`callback`都不会被执行到。 * 切会影响到`trigger`方法的返回值,为`false`。 * * `on`还可以用来添加一个特殊事件`all`, 这样所有的事件触发都会响应到。同时此类`callback`中的arguments有一个不同处, * 就是第一个参数为`type`,记录当前是什么事件在触发。此类`callback`的优先级比脚低,会再正常`callback`执行完后触发。 * ```javascript * obj.on( 'all', function( type, arg1, arg2 ) { * console.log( type, arg1, arg2 ); // => 'testa', 'arg1', 'arg2' * }); * ``` * * @method on * @grammar on( name, callback[, context] ) => self * @param {String} name 事件名,支持多个事件用空格隔开 * @param {Function} callback 事件处理器 * @param {Object} [context] 事件处理器的上下文。 * @return {self} 返回自身,方便链式 * @chainable * @class Mediator */ on: function( name, callback, context ) { var me = this, set; if ( !callback ) { return this; } set = this._events || (this._events = []); eachEvent( name, callback, function( name, callback ) { var handler = { e: name }; handler.cb = callback; handler.ctx = context; handler.ctx2 = context || me; handler.id = set.length; set.push( handler ); }); return this; }, /** * 绑定事件,且当handler执行完后,自动解除绑定。 * @method once * @grammar once( name, callback[, context] ) => self * @param {String} name 事件名 * @param {Function} callback 事件处理器 * @param {Object} [context] 事件处理器的上下文。 * @return {self} 返回自身,方便链式 * @chainable */ once: function( name, callback, context ) { var me = this; if ( !callback ) { return me; } eachEvent( name, callback, function( name, callback ) { var once = function() { me.off( name, once ); return callback.apply( context || me, arguments ); }; once._cb = callback; me.on( name, once, context ); }); return me; }, /** * 解除事件绑定 * @method off * @grammar off( [name[, callback[, context] ] ] ) => self * @param {String} [name] 事件名 * @param {Function} [callback] 事件处理器 * @param {Object} [context] 事件处理器的上下文。 * @return {self} 返回自身,方便链式 * @chainable */ off: function( name, cb, ctx ) { var events = this._events; if ( !events ) { return this; } if ( !name && !cb && !ctx ) { this._events = []; return this; } eachEvent( name, cb, function( name, cb ) { $.each( findHandlers( events, name, cb, ctx ), function() { delete events[ this.id ]; }); }); return this; }, /** * 触发事件 * @method trigger * @grammar trigger( name[, args...] ) => self * @param {String} type 事件名 * @param {*} [...] 任意参数 * @return {Boolean} 如果handler中return false了,则返回false, 否则返回true */ trigger: function( type ) { var args, events, allEvents; if ( !this._events || !type ) { return this; } args = slice.call( arguments, 1 ); events = findHandlers( this._events, type ); allEvents = findHandlers( this._events, 'all' ); return triggerHanders( events, args ) && triggerHanders( allEvents, arguments ); } }; /** * 中介者,它本身是个单例,但可以通过[installTo](#WebUploader:Mediator:installTo)方法,使任何对象具备事件行为。 * 主要目的是负责模块与模块之间的合作,降低耦合度。 * * @class Mediator */ return $.extend({ /** * 可以通过这个接口,使任何对象具备事件功能。 * @method installTo * @param {Object} obj 需要具备事件行为的对象。 * @return {Object} 返回obj. */ installTo: function( obj ) { return $.extend( obj, protos ); } }, protos ); }); /** * @fileOverview Uploader上传类 */ define('uploader',[ 'base', 'mediator' ], function( Base, Mediator ) { var $ = Base.$; /** * 上传入口类。 * @class Uploader * @constructor * @grammar new Uploader( opts ) => Uploader * @example * var uploader = WebUploader.Uploader({ * swf: 'path_of_swf/Uploader.swf', * * // 开起分片上传。 * chunked: true * }); */ function Uploader( opts ) { this.options = $.extend( true, {}, Uploader.options, opts ); this._init( this.options ); } // default Options // widgets中有相应扩展 Uploader.options = {}; Mediator.installTo( Uploader.prototype ); // 批量添加纯命令式方法。 $.each({ upload: 'start-upload', stop: 'stop-upload', getFile: 'get-file', getFiles: 'get-files', addFile: 'add-file', addFiles: 'add-file', sort: 'sort-files', removeFile: 'remove-file', cancelFile: 'cancel-file', skipFile: 'skip-file', retry: 'retry', isInProgress: 'is-in-progress', makeThumb: 'make-thumb', md5File: 'md5-file', getDimension: 'get-dimension', addButton: 'add-btn', predictRuntimeType: 'predict-runtime-type', refresh: 'refresh', disable: 'disable', enable: 'enable', reset: 'reset' }, function( fn, command ) { Uploader.prototype[ fn ] = function() { return this.request( command, arguments ); }; }); $.extend( Uploader.prototype, { state: 'pending', _init: function( opts ) { var me = this; me.request( 'init', opts, function() { me.state = 'ready'; me.trigger('ready'); }); }, /** * 获取或者设置Uploader配置项。 * @method option * @grammar option( key ) => * * @grammar option( key, val ) => self * @example * * // 初始状态图片上传前不会压缩 * var uploader = new WebUploader.Uploader({ * compress: null; * }); * * // 修改后图片上传前,尝试将图片压缩到1600 * 1600 * uploader.option( 'compress', { * width: 1600, * height: 1600 * }); */ option: function( key, val ) { var opts = this.options; // setter if ( arguments.length > 1 ) { if ( $.isPlainObject( val ) && $.isPlainObject( opts[ key ] ) ) { $.extend( opts[ key ], val ); } else { opts[ key ] = val; } } else { // getter return key ? opts[ key ] : opts; } }, /** * 获取文件统计信息。返回一个包含一下信息的对象。 * * `successNum` 上传成功的文件数 * * `progressNum` 上传中的文件数 * * `cancelNum` 被删除的文件数 * * `invalidNum` 无效的文件数 * * `uploadFailNum` 上传失败的文件数 * * `queueNum` 还在队列中的文件数 * * `interruptNum` 被暂停的文件数 * @method getStats * @grammar getStats() => Object */ getStats: function() { // return this._mgr.getStats.apply( this._mgr, arguments ); var stats = this.request('get-stats'); return stats ? { successNum: stats.numOfSuccess, progressNum: stats.numOfProgress, // who care? // queueFailNum: 0, cancelNum: stats.numOfCancel, invalidNum: stats.numOfInvalid, uploadFailNum: stats.numOfUploadFailed, queueNum: stats.numOfQueue, interruptNum: stats.numofInterrupt } : {}; }, // 需要重写此方法来来支持opts.onEvent和instance.onEvent的处理器 trigger: function( type/*, args...*/ ) { var args = [].slice.call( arguments, 1 ), opts = this.options, name = 'on' + type.substring( 0, 1 ).toUpperCase() + type.substring( 1 ); if ( // 调用通过on方法注册的handler. Mediator.trigger.apply( this, arguments ) === false || // 调用opts.onEvent $.isFunction( opts[ name ] ) && opts[ name ].apply( this, args ) === false || // 调用this.onEvent $.isFunction( this[ name ] ) && this[ name ].apply( this, args ) === false || // 广播所有uploader的事件。 Mediator.trigger.apply( Mediator, [ this, type ].concat( args ) ) === false ) { return false; } return true; }, /** * 销毁 webuploader 实例 * @method destroy * @grammar destroy() => undefined */ destroy: function() { this.request( 'destroy', arguments ); this.off(); }, // widgets/widget.js将补充此方法的详细文档。 request: Base.noop }); /** * 创建Uploader实例,等同于new Uploader( opts ); * @method create * @class Base * @static * @grammar Base.create( opts ) => Uploader */ Base.create = Uploader.create = function( opts ) { return new Uploader( opts ); }; // 暴露Uploader,可以通过它来扩展业务逻辑。 Base.Uploader = Uploader; return Uploader; }); /** * @fileOverview Runtime管理器,负责Runtime的选择, 连接 */ define('runtime/runtime',[ 'base', 'mediator' ], function( Base, Mediator ) { var $ = Base.$, factories = {}, // 获取对象的第一个key getFirstKey = function( obj ) { for ( var key in obj ) { if ( obj.hasOwnProperty( key ) ) { return key; } } return null; }; // 接口类。 function Runtime( options ) { this.options = $.extend({ container: document.body }, options ); this.uid = Base.guid('rt_'); } $.extend( Runtime.prototype, { getContainer: function() { var opts = this.options, parent, container; if ( this._container ) { return this._container; } parent = $( opts.container || document.body ); container = $( document.createElement('div') ); container.attr( 'id', 'rt_' + this.uid ); container.css({ position: 'absolute', top: '0px', left: '0px', width: '1px', height: '1px', overflow: 'hidden' }); parent.append( container ); parent.addClass('webuploader-container'); this._container = container; this._parent = parent; return container; }, init: Base.noop, exec: Base.noop, destroy: function() { this._container && this._container.remove(); this._parent && this._parent.removeClass('webuploader-container'); this.off(); } }); Runtime.orders = 'html5,flash'; /** * 添加Runtime实现。 * @param {String} type 类型 * @param {Runtime} factory 具体Runtime实现。 */ Runtime.addRuntime = function( type, factory ) { factories[ type ] = factory; }; Runtime.hasRuntime = function( type ) { return !!(type ? factories[ type ] : getFirstKey( factories )); }; Runtime.create = function( opts, orders ) { var type, runtime; orders = orders || Runtime.orders; $.each( orders.split( /\s*,\s*/g ), function() { if ( factories[ this ] ) { type = this; return false; } }); type = type || getFirstKey( factories ); if ( !type ) { throw new Error('Runtime Error'); } runtime = new factories[ type ]( opts ); return runtime; }; Mediator.installTo( Runtime.prototype ); return Runtime; }); /** * @fileOverview Runtime管理器,负责Runtime的选择, 连接 */ define('runtime/client',[ 'base', 'mediator', 'runtime/runtime' ], function( Base, Mediator, Runtime ) { var cache; cache = (function() { var obj = {}; return { add: function( runtime ) { obj[ runtime.uid ] = runtime; }, get: function( ruid, standalone ) { var i; if ( ruid ) { return obj[ ruid ]; } for ( i in obj ) { // 有些类型不能重用,比如filepicker. if ( standalone && obj[ i ].__standalone ) { continue; } return obj[ i ]; } return null; }, remove: function( runtime ) { delete obj[ runtime.uid ]; } }; })(); function RuntimeClient( component, standalone ) { var deferred = Base.Deferred(), runtime; this.uid = Base.guid('client_'); // 允许runtime没有初始化之前,注册一些方法在初始化后执行。 this.runtimeReady = function( cb ) { return deferred.done( cb ); }; this.connectRuntime = function( opts, cb ) { // already connected. if ( runtime ) { throw new Error('already connected!'); } deferred.done( cb ); if ( typeof opts === 'string' && cache.get( opts ) ) { runtime = cache.get( opts ); } // 像filePicker只能独立存在,不能公用。 runtime = runtime || cache.get( null, standalone ); // 需要创建 if ( !runtime ) { runtime = Runtime.create( opts, opts.runtimeOrder ); runtime.__promise = deferred.promise(); runtime.once( 'ready', deferred.resolve ); runtime.init(); cache.add( runtime ); runtime.__client = 1; } else { // 来自cache Base.$.extend( runtime.options, opts ); runtime.__promise.then( deferred.resolve ); runtime.__client++; } standalone && (runtime.__standalone = standalone); return runtime; }; this.getRuntime = function() { return runtime; }; this.disconnectRuntime = function() { if ( !runtime ) { return; } runtime.__client--; if ( runtime.__client <= 0 ) { cache.remove( runtime ); delete runtime.__promise; runtime.destroy(); } runtime = null; }; this.exec = function() { if ( !runtime ) { return; } var args = Base.slice( arguments ); component && args.unshift( component ); return runtime.exec.apply( this, args ); }; this.getRuid = function() { return runtime && runtime.uid; }; this.destroy = (function( destroy ) { return function() { destroy && destroy.apply( this, arguments ); this.trigger('destroy'); this.off(); this.exec('destroy'); this.disconnectRuntime(); }; })( this.destroy ); } Mediator.installTo( RuntimeClient.prototype ); return RuntimeClient; }); /** * @fileOverview 错误信息 */ define('lib/dnd',[ 'base', 'mediator', 'runtime/client' ], function( Base, Mediator, RuntimeClent ) { var $ = Base.$; function DragAndDrop( opts ) { opts = this.options = $.extend({}, DragAndDrop.options, opts ); opts.container = $( opts.container ); if ( !opts.container.length ) { return; } RuntimeClent.call( this, 'DragAndDrop' ); } DragAndDrop.options = { accept: null, disableGlobalDnd: false }; Base.inherits( RuntimeClent, { constructor: DragAndDrop, init: function() { var me = this; me.connectRuntime( me.options, function() { me.exec('init'); me.trigger('ready'); }); } }); Mediator.installTo( DragAndDrop.prototype ); return DragAndDrop; }); /** * @fileOverview 组件基类。 */ define('widgets/widget',[ 'base', 'uploader' ], function( Base, Uploader ) { var $ = Base.$, _init = Uploader.prototype._init, _destroy = Uploader.prototype.destroy, IGNORE = {}, widgetClass = []; function isArrayLike( obj ) { if ( !obj ) { return false; } var length = obj.length, type = $.type( obj ); if ( obj.nodeType === 1 && length ) { return true; } return type === 'array' || type !== 'function' && type !== 'string' && (length === 0 || typeof length === 'number' && length > 0 && (length - 1) in obj); } function Widget( uploader ) { this.owner = uploader; this.options = uploader.options; } $.extend( Widget.prototype, { init: Base.noop, // 类Backbone的事件监听声明,监听uploader实例上的事件 // widget直接无法监听事件,事件只能通过uploader来传递 invoke: function( apiName, args ) { /* { 'make-thumb': 'makeThumb' } */ var map = this.responseMap; // 如果无API响应声明则忽略 if ( !map || !(apiName in map) || !(map[ apiName ] in this) || !$.isFunction( this[ map[ apiName ] ] ) ) { return IGNORE; } return this[ map[ apiName ] ].apply( this, args ); }, /** * 发送命令。当传入`callback`或者`handler`中返回`promise`时。返回一个当所有`handler`中的promise都完成后完成的新`promise`。 * @method request * @grammar request( command, args ) => * | Promise * @grammar request( command, args, callback ) => Promise * @for Uploader */ request: function() { return this.owner.request.apply( this.owner, arguments ); } }); // 扩展Uploader. $.extend( Uploader.prototype, { /** * @property {String | Array} [disableWidgets=undefined] * @namespace options * @for Uploader * @description 默认所有 Uploader.register 了的 widget 都会被加载,如果禁用某一部分,请通过此 option 指定黑名单。 */ // 覆写_init用来初始化widgets _init: function() { var me = this, widgets = me._widgets = [], deactives = me.options.disableWidgets || ''; $.each( widgetClass, function( _, klass ) { (!deactives || !~deactives.indexOf( klass._name )) && widgets.push( new klass( me ) ); }); return _init.apply( me, arguments ); }, request: function( apiName, args, callback ) { var i = 0, widgets = this._widgets, len = widgets && widgets.length, rlts = [], dfds = [], widget, rlt, promise, key; args = isArrayLike( args ) ? args : [ args ]; for ( ; i < len; i++ ) { widget = widgets[ i ]; rlt = widget.invoke( apiName, args ); if ( rlt !== IGNORE ) { // Deferred对象 if ( Base.isPromise( rlt ) ) { dfds.push( rlt ); } else { rlts.push( rlt ); } } } // 如果有callback,则用异步方式。 if ( callback || dfds.length ) { promise = Base.when.apply( Base, dfds ); key = promise.pipe ? 'pipe' : 'then'; // 很重要不能删除。删除了会死循环。 // 保证执行顺序。让callback总是在下一个 tick 中执行。 return promise[ key ](function() { var deferred = Base.Deferred(), args = arguments; if ( args.length === 1 ) { args = args[ 0 ]; } setTimeout(function() { deferred.resolve( args ); }, 1 ); return deferred.promise(); })[ callback ? key : 'done' ]( callback || Base.noop ); } else { return rlts[ 0 ]; } }, destroy: function() { _destroy.apply( this, arguments ); this._widgets = null; } }); /** * 添加组件 * @grammar Uploader.register(proto); * @grammar Uploader.register(map, proto); * @param {object} responseMap API 名称与函数实现的映射 * @param {object} proto 组件原型,构造函数通过 constructor 属性定义 * @method Uploader.register * @for Uploader * @example * Uploader.register({ * 'make-thumb': 'makeThumb' * }, { * init: function( options ) {}, * makeThumb: function() {} * }); * * Uploader.register({ * 'make-thumb': function() { * * } * }); */ Uploader.register = Widget.register = function( responseMap, widgetProto ) { var map = { init: 'init', destroy: 'destroy', name: 'anonymous' }, klass; if ( arguments.length === 1 ) { widgetProto = responseMap; // 自动生成 map 表。 $.each(widgetProto, function(key) { if ( key[0] === '_' || key === 'name' ) { key === 'name' && (map.name = widgetProto.name); return; } map[key.replace(/[A-Z]/g, '-$&').toLowerCase()] = key; }); } else { map = $.extend( map, responseMap ); } widgetProto.responseMap = map; klass = Base.inherits( Widget, widgetProto ); klass._name = map.name; widgetClass.push( klass ); return klass; }; /** * 删除插件,只有在注册时指定了名字的才能被删除。 * @grammar Uploader.unRegister(name); * @param {string} name 组件名字 * @method Uploader.unRegister * @for Uploader * @example * * Uploader.register({ * name: 'custom', * * 'make-thumb': function() { * * } * }); * * Uploader.unRegister('custom'); */ Uploader.unRegister = Widget.unRegister = function( name ) { if ( !name || name === 'anonymous' ) { return; } // 删除指定的插件。 for ( var i = widgetClass.length; i--; ) { if ( widgetClass[i]._name === name ) { widgetClass.splice(i, 1) } } }; return Widget; }); /** * @fileOverview DragAndDrop Widget。 */ define('widgets/filednd',[ 'base', 'uploader', 'lib/dnd', 'widgets/widget' ], function( Base, Uploader, Dnd ) { var $ = Base.$; Uploader.options.dnd = ''; /** * @property {Selector} [dnd=undefined] 指定Drag And Drop拖拽的容器,如果不指定,则不启动。 * @namespace options * @for Uploader */ /** * @property {Selector} [disableGlobalDnd=false] 是否禁掉整个页面的拖拽功能,如果不禁用,图片拖进来的时候会默认被浏览器打开。 * @namespace options * @for Uploader */ /** * @event dndAccept * @param {DataTransferItemList} items DataTransferItem * @description 阻止此事件可以拒绝某些类型的文件拖入进来。目前只有 chrome 提供这样的 API,且只能通过 mime-type 验证。 * @for Uploader */ return Uploader.register({ name: 'dnd', init: function( opts ) { if ( !opts.dnd || this.request('predict-runtime-type') !== 'html5' ) { return; } var me = this, deferred = Base.Deferred(), options = $.extend({}, { disableGlobalDnd: opts.disableGlobalDnd, container: opts.dnd, accept: opts.accept }), dnd; this.dnd = dnd = new Dnd( options ); dnd.once( 'ready', deferred.resolve ); dnd.on( 'drop', function( files ) { me.request( 'add-file', [ files ]); }); // 检测文件是否全部允许添加。 dnd.on( 'accept', function( items ) { return me.owner.trigger( 'dndAccept', items ); }); dnd.init(); return deferred.promise(); }, destroy: function() { this.dnd && this.dnd.destroy(); } }); }); /** * @fileOverview 错误信息 */ define('lib/filepaste',[ 'base', 'mediator', 'runtime/client' ], function( Base, Mediator, RuntimeClent ) { var $ = Base.$; function FilePaste( opts ) { opts = this.options = $.extend({}, opts ); opts.container = $( opts.container || document.body ); RuntimeClent.call( this, 'FilePaste' ); } Base.inherits( RuntimeClent, { constructor: FilePaste, init: function() { var me = this; me.connectRuntime( me.options, function() { me.exec('init'); me.trigger('ready'); }); } }); Mediator.installTo( FilePaste.prototype ); return FilePaste; }); /** * @fileOverview 组件基类。 */ define('widgets/filepaste',[ 'base', 'uploader', 'lib/filepaste', 'widgets/widget' ], function( Base, Uploader, FilePaste ) { var $ = Base.$; /** * @property {Selector} [paste=undefined] 指定监听paste事件的容器,如果不指定,不启用此功能。此功能为通过粘贴来添加截屏的图片。建议设置为`document.body`. * @namespace options * @for Uploader */ return Uploader.register({ name: 'paste', init: function( opts ) { if ( !opts.paste || this.request('predict-runtime-type') !== 'html5' ) { return; } var me = this, deferred = Base.Deferred(), options = $.extend({}, { container: opts.paste, accept: opts.accept }), paste; this.paste = paste = new FilePaste( options ); paste.once( 'ready', deferred.resolve ); paste.on( 'paste', function( files ) { me.owner.request( 'add-file', [ files ]); }); paste.init(); return deferred.promise(); }, destroy: function() { this.paste && this.paste.destroy(); } }); }); /** * @fileOverview Blob */ define('lib/blob',[ 'base', 'runtime/client' ], function( Base, RuntimeClient ) { function Blob( ruid, source ) { var me = this; me.source = source; me.ruid = ruid; this.size = source.size || 0; // 如果没有指定 mimetype, 但是知道文件后缀。 if ( !source.type && this.ext && ~'jpg,jpeg,png,gif,bmp'.indexOf( this.ext ) ) { this.type = 'image/' + (this.ext === 'jpg' ? 'jpeg' : this.ext); } else { this.type = source.type || 'application/octet-stream'; } RuntimeClient.call( me, 'Blob' ); this.uid = source.uid || this.uid; if ( ruid ) { me.connectRuntime( ruid ); } } Base.inherits( RuntimeClient, { constructor: Blob, slice: function( start, end ) { return this.exec( 'slice', start, end ); }, getSource: function() { return this.source; } }); return Blob; }); /** * 为了统一化Flash的File和HTML5的File而存在。 * 以至于要调用Flash里面的File,也可以像调用HTML5版本的File一下。 * @fileOverview File */ define('lib/file',[ 'base', 'lib/blob' ], function( Base, Blob ) { var uid = 1, rExt = /\.([^.]+)$/; function File( ruid, file ) { var ext; this.name = file.name || ('untitled' + uid++); ext = rExt.exec( file.name ) ? RegExp.$1.toLowerCase() : ''; // todo 支持其他类型文件的转换。 // 如果有 mimetype, 但是文件名里面没有找出后缀规律 if ( !ext && file.type ) { ext = /\/(jpg|jpeg|png|gif|bmp)$/i.exec( file.type ) ? RegExp.$1.toLowerCase() : ''; this.name += '.' + ext; } this.ext = ext; this.lastModifiedDate = file.lastModifiedDate || (new Date()).toLocaleString(); Blob.apply( this, arguments ); } return Base.inherits( Blob, File ); }); /** * @fileOverview 错误信息 */ define('lib/filepicker',[ 'base', 'runtime/client', 'lib/file' ], function( Base, RuntimeClent, File ) { var $ = Base.$; function FilePicker( opts ) { opts = this.options = $.extend({}, FilePicker.options, opts ); opts.container = $( opts.id ); if ( !opts.container.length ) { throw new Error('按钮指定错误'); } opts.innerHTML = opts.innerHTML || opts.label || opts.container.html() || ''; opts.button = $( opts.button || document.createElement('div') ); opts.button.html( opts.innerHTML ); opts.container.html( opts.button ); RuntimeClent.call( this, 'FilePicker', true ); } FilePicker.options = { button: null, container: null, label: null, innerHTML: null, multiple: true, accept: null, name: 'file' }; Base.inherits( RuntimeClent, { constructor: FilePicker, init: function() { var me = this, opts = me.options, button = opts.button; button.addClass('webuploader-pick'); me.on( 'all', function( type ) { var files; switch ( type ) { case 'mouseenter': button.addClass('webuploader-pick-hover'); break; case 'mouseleave': button.removeClass('webuploader-pick-hover'); break; case 'change': files = me.exec('getFiles'); me.trigger( 'select', $.map( files, function( file ) { file = new File( me.getRuid(), file ); // 记录来源。 file._refer = opts.container; return file; }), opts.container ); break; } }); me.connectRuntime( opts, function() { me.refresh(); me.exec( 'init', opts ); me.trigger('ready'); }); this._resizeHandler = Base.bindFn( this.refresh, this ); $( window ).on( 'resize', this._resizeHandler ); }, refresh: function() { var shimContainer = this.getRuntime().getContainer(), button = this.options.button, width = button.outerWidth ? button.outerWidth() : button.width(), height = button.outerHeight ? button.outerHeight() : button.height(), pos = button.offset(); width && height && shimContainer.css({ bottom: 'auto', right: 'auto', width: width + 'px', height: height + 'px' }).offset( pos ); }, enable: function() { var btn = this.options.button; btn.removeClass('webuploader-pick-disable'); this.refresh(); }, disable: function() { var btn = this.options.button; this.getRuntime().getContainer().css({ top: '-99999px' }); btn.addClass('webuploader-pick-disable'); }, destroy: function() { var btn = this.options.button; $( window ).off( 'resize', this._resizeHandler ); btn.removeClass('webuploader-pick-disable webuploader-pick-hover ' + 'webuploader-pick'); } }); return FilePicker; }); /** * @fileOverview 文件选择相关 */ define('widgets/filepicker',[ 'base', 'uploader', 'lib/filepicker', 'widgets/widget' ], function( Base, Uploader, FilePicker ) { var $ = Base.$; $.extend( Uploader.options, { /** * @property {Selector | Object} [pick=undefined] * @namespace options * @for Uploader * @description 指定选择文件的按钮容器,不指定则不创建按钮。 * * * `id` {Seletor|dom} 指定选择文件的按钮容器,不指定则不创建按钮。**注意** 这里虽然写的是 id, 但是不是只支持 id, 还支持 class, 或者 dom 节点。 * * `label` {String} 请采用 `innerHTML` 代替 * * `innerHTML` {String} 指定按钮文字。不指定时优先从指定的容器中看是否自带文字。 * * `multiple` {Boolean} 是否开起同时选择多个文件能力。 */ pick: null, /** * @property {Arroy} [accept=null] * @namespace options * @for Uploader * @description 指定接受哪些类型的文件。 由于目前还有ext转mimeType表,所以这里需要分开指定。 * * * `title` {String} 文字描述 * * `extensions` {String} 允许的文件后缀,不带点,多个用逗号分割。 * * `mimeTypes` {String} 多个用逗号分割。 * * 如: * * ``` * { * title: 'Images', * extensions: 'gif,jpg,jpeg,bmp,png', * mimeTypes: 'image/*' * } * ``` */ accept: null/*{ title: 'Images', extensions: 'gif,jpg,jpeg,bmp,png', mimeTypes: 'image/*' }*/ }); return Uploader.register({ name: 'picker', init: function( opts ) { this.pickers = []; return opts.pick && this.addBtn( opts.pick ); }, refresh: function() { $.each( this.pickers, function() { this.refresh(); }); }, /** * @method addButton * @for Uploader * @grammar addButton( pick ) => Promise * @description * 添加文件选择按钮,如果一个按钮不够,需要调用此方法来添加。参数跟[options.pick](#WebUploader:Uploader:options)一致。 * @example * uploader.addButton({ * id: '#btnContainer', * innerHTML: '选择文件' * }); */ addBtn: function( pick ) { var me = this, opts = me.options, accept = opts.accept, promises = []; if ( !pick ) { return; } $.isPlainObject( pick ) || (pick = { id: pick }); $( pick.id ).each(function() { var options, picker, deferred; deferred = Base.Deferred(); options = $.extend({}, pick, { accept: $.isPlainObject( accept ) ? [ accept ] : accept, swf: opts.swf, runtimeOrder: opts.runtimeOrder, id: this }); picker = new FilePicker( options ); picker.once( 'ready', deferred.resolve ); picker.on( 'select', function( files ) { me.owner.request( 'add-file', [ files ]); }); picker.init(); me.pickers.push( picker ); promises.push( deferred.promise() ); }); return Base.when.apply( Base, promises ); }, disable: function() { $.each( this.pickers, function() { this.disable(); }); }, enable: function() { $.each( this.pickers, function() { this.enable(); }); }, destroy: function() { $.each( this.pickers, function() { this.destroy(); }); this.pickers = null; } }); }); /** * @fileOverview Image */ define('lib/image',[ 'base', 'runtime/client', 'lib/blob' ], function( Base, RuntimeClient, Blob ) { var $ = Base.$; // 构造器。 function Image( opts ) { this.options = $.extend({}, Image.options, opts ); RuntimeClient.call( this, 'Image' ); this.on( 'load', function() { this._info = this.exec('info'); this._meta = this.exec('meta'); }); } // 默认选项。 Image.options = { // 默认的图片处理质量 quality: 90, // 是否裁剪 crop: false, // 是否保留头部信息 preserveHeaders: false, // 是否允许放大。 allowMagnify: false }; // 继承RuntimeClient. Base.inherits( RuntimeClient, { constructor: Image, info: function( val ) { // setter if ( val ) { this._info = val; return this; } // getter return this._info; }, meta: function( val ) { // setter if ( val ) { this._meta = val; return this; } // getter return this._meta; }, loadFromBlob: function( blob ) { var me = this, ruid = blob.getRuid(); this.connectRuntime( ruid, function() { me.exec( 'init', me.options ); me.exec( 'loadFromBlob', blob ); }); }, resize: function() { var args = Base.slice( arguments ); return this.exec.apply( this, [ 'resize' ].concat( args ) ); }, crop: function() { var args = Base.slice( arguments ); return this.exec.apply( this, [ 'crop' ].concat( args ) ); }, getAsDataUrl: function( type ) { return this.exec( 'getAsDataUrl', type ); }, getAsBlob: function( type ) { var blob = this.exec( 'getAsBlob', type ); return new Blob( this.getRuid(), blob ); } }); return Image; }); /** * @fileOverview 图片操作, 负责预览图片和上传前压缩图片 */ define('widgets/image',[ 'base', 'uploader', 'lib/image', 'widgets/widget' ], function( Base, Uploader, Image ) { var $ = Base.$, throttle; // 根据要处理的文件大小来节流,一次不能处理太多,会卡。 throttle = (function( max ) { var occupied = 0, waiting = [], tick = function() { var item; while ( waiting.length && occupied < max ) { item = waiting.shift(); occupied += item[ 0 ]; item[ 1 ](); } }; return function( emiter, size, cb ) { waiting.push([ size, cb ]); emiter.once( 'destroy', function() { occupied -= size; setTimeout( tick, 1 ); }); setTimeout( tick, 1 ); }; })( 5 * 1024 * 1024 ); $.extend( Uploader.options, { /** * @property {Object} [thumb] * @namespace options * @for Uploader * @description 配置生成缩略图的选项。 * * 默认为: * * ```javascript * { * width: 110, * height: 110, * * // 图片质量,只有type为`image/jpeg`的时候才有效。 * quality: 70, * * // 是否允许放大,如果想要生成小图的时候不失真,此选项应该设置为false. * allowMagnify: true, * * // 是否允许裁剪。 * crop: true, * * // 为空的话则保留原有图片格式。 * // 否则强制转换成指定的类型。 * type: 'image/jpeg' * } * ``` */ thumb: { width: 110, height: 110, quality: 70, allowMagnify: true, crop: true, preserveHeaders: false, // 为空的话则保留原有图片格式。 // 否则强制转换成指定的类型。 // IE 8下面 base64 大小不能超过 32K 否则预览失败,而非 jpeg 编码的图片很可 // 能会超过 32k, 所以这里设置成预览的时候都是 image/jpeg type: 'image/jpeg' }, /** * @property {Object} [compress] * @namespace options * @for Uploader * @description 配置压缩的图片的选项。如果此选项为`false`, 则图片在上传前不进行压缩。 * * 默认为: * * ```javascript * { * width: 1600, * height: 1600, * * // 图片质量,只有type为`image/jpeg`的时候才有效。 * quality: 90, * * // 是否允许放大,如果想要生成小图的时候不失真,此选项应该设置为false. * allowMagnify: false, * * // 是否允许裁剪。 * crop: false, * * // 是否保留头部meta信息。 * preserveHeaders: true, * * // 如果发现压缩后文件大小比原来还大,则使用原来图片 * // 此属性可能会影响图片自动纠正功能 * noCompressIfLarger: false, * * // 单位字节,如果图片大小小于此值,不会采用压缩。 * compressSize: 0 * } * ``` */ compress: { width: 1600, height: 1600, quality: 90, allowMagnify: false, crop: false, preserveHeaders: true } }); return Uploader.register({ name: 'image', /** * 生成缩略图,此过程为异步,所以需要传入`callback`。 * 通常情况在图片加入队里后调用此方法来生成预览图以增强交互效果。 * * 当 width 或者 height 的值介于 0 - 1 时,被当成百分比使用。 * * `callback`中可以接收到两个参数。 * * 第一个为error,如果生成缩略图有错误,此error将为真。 * * 第二个为ret, 缩略图的Data URL值。 * * **注意** * Date URL在IE6/7中不支持,所以不用调用此方法了,直接显示一张暂不支持预览图片好了。 * 也可以借助服务端,将 base64 数据传给服务端,生成一个临时文件供预览。 * * @method makeThumb * @grammar makeThumb( file, callback ) => undefined * @grammar makeThumb( file, callback, width, height ) => undefined * @for Uploader * @example * * uploader.on( 'fileQueued', function( file ) { * var $li = ...; * * uploader.makeThumb( file, function( error, ret ) { * if ( error ) { * $li.text('预览错误'); * } else { * $li.append('<img alt="" src="' + ret + '" />'); * } * }); * * }); */ makeThumb: function( file, cb, width, height ) { var opts, image; file = this.request( 'get-file', file ); // 只预览图片格式。 if ( !file.type.match( /^image/ ) ) { cb( true ); return; } opts = $.extend({}, this.options.thumb ); // 如果传入的是object. if ( $.isPlainObject( width ) ) { opts = $.extend( opts, width ); width = null; } width = width || opts.width; height = height || opts.height; image = new Image( opts ); image.once( 'load', function() { file._info = file._info || image.info(); file._meta = file._meta || image.meta(); // 如果 width 的值介于 0 - 1 // 说明设置的是百分比。 if ( width <= 1 && width > 0 ) { width = file._info.width * width; } // 同样的规则应用于 height if ( height <= 1 && height > 0 ) { height = file._info.height * height; } image.resize( width, height ); }); // 当 resize 完后 image.once( 'complete', function() { cb( false, image.getAsDataUrl( opts.type ) ); image.destroy(); }); image.once( 'error', function( reason ) { cb( reason || true ); image.destroy(); }); throttle( image, file.source.size, function() { file._info && image.info( file._info ); file._meta && image.meta( file._meta ); image.loadFromBlob( file.source ); }); }, beforeSendFile: function( file ) { var opts = this.options.compress || this.options.resize, compressSize = opts && opts.compressSize || 0, noCompressIfLarger = opts && opts.noCompressIfLarger || false, image, deferred; file = this.request( 'get-file', file ); // 只压缩 jpeg 图片格式。 // gif 可能会丢失针 // bmp png 基本上尺寸都不大,且压缩比比较小。 if ( !opts || !~'image/jpeg,image/jpg'.indexOf( file.type ) || file.size < compressSize || file._compressed ) { return; } opts = $.extend({}, opts ); deferred = Base.Deferred(); image = new Image( opts ); deferred.always(function() { image.destroy(); image = null; }); image.once( 'error', deferred.reject ); image.once( 'load', function() { var width = opts.width, height = opts.height; file._info = file._info || image.info(); file._meta = file._meta || image.meta(); // 如果 width 的值介于 0 - 1 // 说明设置的是百分比。 if ( width <= 1 && width > 0 ) { width = file._info.width * width; } // 同样的规则应用于 height if ( height <= 1 && height > 0 ) { height = file._info.height * height; } image.resize( width, height ); }); image.once( 'complete', function() { var blob, size; // 移动端 UC / qq 浏览器的无图模式下 // ctx.getImageData 处理大图的时候会报 Exception // INDEX_SIZE_ERR: DOM Exception 1 try { blob = image.getAsBlob( opts.type ); size = file.size; // 如果压缩后,比原来还大则不用压缩后的。 if ( !noCompressIfLarger || blob.size < size ) { // file.source.destroy && file.source.destroy(); file.source = blob; file.size = blob.size; file.trigger( 'resize', blob.size, size ); } // 标记,避免重复压缩。 file._compressed = true; deferred.resolve(); } catch ( e ) { // 出错了直接继续,让其上传原始图片 deferred.resolve(); } }); file._info && image.info( file._info ); file._meta && image.meta( file._meta ); image.loadFromBlob( file.source ); return deferred.promise(); } }); }); /** * @fileOverview 文件属性封装 */ define('file',[ 'base', 'mediator' ], function( Base, Mediator ) { var $ = Base.$, idPrefix = 'WU_FILE_', idSuffix = 0, rExt = /\.([^.]+)$/, statusMap = {}; function gid() { return idPrefix + idSuffix++; } /** * 文件类 * @class File * @constructor 构造函数 * @grammar new File( source ) => File * @param {Lib.File} source [lib.File](#Lib.File)实例, 此source对象是带有Runtime信息的。 */ function WUFile( source ) { /** * 文件名,包括扩展名(后缀) * @property name * @type {string} */ this.name = source.name || 'Untitled'; /** * 文件体积(字节) * @property size * @type {uint} * @default 0 */ this.size = source.size || 0; /** * 文件MIMETYPE类型,与文件类型的对应关系请参考[http://t.cn/z8ZnFny](http://t.cn/z8ZnFny) * @property type * @type {string} * @default 'application/octet-stream' */ this.type = source.type || 'application/octet-stream'; /** * 文件最后修改日期 * @property lastModifiedDate * @type {int} * @default 当前时间戳 */ this.lastModifiedDate = source.lastModifiedDate || (new Date() * 1); /** * 文件ID,每个对象具有唯一ID,与文件名无关 * @property id * @type {string} */ this.id = gid(); /** * 文件扩展名,通过文件名获取,例如test.png的扩展名为png * @property ext * @type {string} */ this.ext = rExt.exec( this.name ) ? RegExp.$1 : ''; /** * 状态文字说明。在不同的status语境下有不同的用途。 * @property statusText * @type {string} */ this.statusText = ''; // 存储文件状态,防止通过属性直接修改 statusMap[ this.id ] = WUFile.Status.INITED; this.source = source; this.loaded = 0; this.on( 'error', function( msg ) { this.setStatus( WUFile.Status.ERROR, msg ); }); } $.extend( WUFile.prototype, { /** * 设置状态,状态变化时会触发`change`事件。 * @method setStatus * @grammar setStatus( status[, statusText] ); * @param {File.Status|String} status [文件状态值](#WebUploader:File:File.Status) * @param {String} [statusText=''] 状态说明,常在error时使用,用http, abort,server等来标记是由于什么原因导致文件错误。 */ setStatus: function( status, text ) { var prevStatus = statusMap[ this.id ]; typeof text !== 'undefined' && (this.statusText = text); if ( status !== prevStatus ) { statusMap[ this.id ] = status; /** * 文件状态变化 * @event statuschange */ this.trigger( 'statuschange', status, prevStatus ); } }, /** * 获取文件状态 * @return {File.Status} * @example 文件状态具体包括以下几种类型: { // 初始化 INITED: 0, // 已入队列 QUEUED: 1, // 正在上传 PROGRESS: 2, // 上传出错 ERROR: 3, // 上传成功 COMPLETE: 4, // 上传取消 CANCELLED: 5 } */ getStatus: function() { return statusMap[ this.id ]; }, /** * 获取文件原始信息。 * @return {*} */ getSource: function() { return this.source; }, destroy: function() { this.off(); delete statusMap[ this.id ]; } }); Mediator.installTo( WUFile.prototype ); /** * 文件状态值,具体包括以下几种类型: * * `inited` 初始状态 * * `queued` 已经进入队列, 等待上传 * * `progress` 上传中 * * `complete` 上传完成。 * * `error` 上传出错,可重试 * * `interrupt` 上传中断,可续传。 * * `invalid` 文件不合格,不能重试上传。会自动从队列中移除。 * * `cancelled` 文件被移除。 * @property {Object} Status * @namespace File * @class File * @static */ WUFile.Status = { INITED: 'inited', // 初始状态 QUEUED: 'queued', // 已经进入队列, 等待上传 PROGRESS: 'progress', // 上传中 ERROR: 'error', // 上传出错,可重试 COMPLETE: 'complete', // 上传完成。 CANCELLED: 'cancelled', // 上传取消。 INTERRUPT: 'interrupt', // 上传中断,可续传。 INVALID: 'invalid' // 文件不合格,不能重试上传。 }; return WUFile; }); /** * @fileOverview 文件队列 */ define('queue',[ 'base', 'mediator', 'file' ], function( Base, Mediator, WUFile ) { var $ = Base.$, STATUS = WUFile.Status; /** * 文件队列, 用来存储各个状态中的文件。 * @class Queue * @extends Mediator */ function Queue() { /** * 统计文件数。 * * `numOfQueue` 队列中的文件数。 * * `numOfSuccess` 上传成功的文件数 * * `numOfCancel` 被取消的文件数 * * `numOfProgress` 正在上传中的文件数 * * `numOfUploadFailed` 上传错误的文件数。 * * `numOfInvalid` 无效的文件数。 * * `numofDeleted` 被移除的文件数。 * @property {Object} stats */ this.stats = { numOfQueue: 0, numOfSuccess: 0, numOfCancel: 0, numOfProgress: 0, numOfUploadFailed: 0, numOfInvalid: 0, numofDeleted: 0, numofInterrupt: 0 }; // 上传队列,仅包括等待上传的文件 this._queue = []; // 存储所有文件 this._map = {}; } $.extend( Queue.prototype, { /** * 将新文件加入对队列尾部 * * @method append * @param {File} file 文件对象 */ append: function( file ) { this._queue.push( file ); this._fileAdded( file ); return this; }, /** * 将新文件加入对队列头部 * * @method prepend * @param {File} file 文件对象 */ prepend: function( file ) { this._queue.unshift( file ); this._fileAdded( file ); return this; }, /** * 获取文件对象 * * @method getFile * @param {String} fileId 文件ID * @return {File} */ getFile: function( fileId ) { if ( typeof fileId !== 'string' ) { return fileId; } return this._map[ fileId ]; }, /** * 从队列中取出一个指定状态的文件。 * @grammar fetch( status ) => File * @method fetch * @param {String} status [文件状态值](#WebUploader:File:File.Status) * @return {File} [File](#WebUploader:File) */ fetch: function( status ) { var len = this._queue.length, i, file; status = status || STATUS.QUEUED; for ( i = 0; i < len; i++ ) { file = this._queue[ i ]; if ( status === file.getStatus() ) { return file; } } return null; }, /** * 对队列进行排序,能够控制文件上传顺序。 * @grammar sort( fn ) => undefined * @method sort * @param {Function} fn 排序方法 */ sort: function( fn ) { if ( typeof fn === 'function' ) { this._queue.sort( fn ); } }, /** * 获取指定类型的文件列表, 列表中每一个成员为[File](#WebUploader:File)对象。 * @grammar getFiles( [status1[, status2 ...]] ) => Array * @method getFiles * @param {String} [status] [文件状态值](#WebUploader:File:File.Status) */ getFiles: function() { var sts = [].slice.call( arguments, 0 ), ret = [], i = 0, len = this._queue.length, file; for ( ; i < len; i++ ) { file = this._queue[ i ]; if ( sts.length && !~$.inArray( file.getStatus(), sts ) ) { continue; } ret.push( file ); } return ret; }, /** * 在队列中删除文件。 * @grammar removeFile( file ) => Array * @method removeFile * @param {File} 文件对象。 */ removeFile: function( file ) { var me = this, existing = this._map[ file.id ]; if ( existing ) { delete this._map[ file.id ]; file.destroy(); this.stats.numofDeleted++; } }, _fileAdded: function( file ) { var me = this, existing = this._map[ file.id ]; if ( !existing ) { this._map[ file.id ] = file; file.on( 'statuschange', function( cur, pre ) { me._onFileStatusChange( cur, pre ); }); } }, _onFileStatusChange: function( curStatus, preStatus ) { var stats = this.stats; switch ( preStatus ) { case STATUS.PROGRESS: stats.numOfProgress--; break; case STATUS.QUEUED: stats.numOfQueue --; break; case STATUS.ERROR: stats.numOfUploadFailed--; break; case STATUS.INVALID: stats.numOfInvalid--; break; case STATUS.INTERRUPT: stats.numofInterrupt--; break; } switch ( curStatus ) { case STATUS.QUEUED: stats.numOfQueue++; break; case STATUS.PROGRESS: stats.numOfProgress++; break; case STATUS.ERROR: stats.numOfUploadFailed++; break; case STATUS.COMPLETE: stats.numOfSuccess++; break; case STATUS.CANCELLED: stats.numOfCancel++; break; case STATUS.INVALID: stats.numOfInvalid++; break; case STATUS.INTERRUPT: stats.numofInterrupt++; break; } } }); Mediator.installTo( Queue.prototype ); return Queue; }); /** * @fileOverview 队列 */ define('widgets/queue',[ 'base', 'uploader', 'queue', 'file', 'lib/file', 'runtime/client', 'widgets/widget' ], function( Base, Uploader, Queue, WUFile, File, RuntimeClient ) { var $ = Base.$, rExt = /\.\w+$/, Status = WUFile.Status; return Uploader.register({ name: 'queue', init: function( opts ) { var me = this, deferred, len, i, item, arr, accept, runtime; if ( $.isPlainObject( opts.accept ) ) { opts.accept = [ opts.accept ]; } // accept中的中生成匹配正则。 if ( opts.accept ) { arr = []; for ( i = 0, len = opts.accept.length; i < len; i++ ) { item = opts.accept[ i ].extensions; item && arr.push( item ); } if ( arr.length ) { accept = '\\.' + arr.join(',') .replace( /,/g, '$|\\.' ) .replace( /\*/g, '.*' ) + '$'; } me.accept = new RegExp( accept, 'i' ); } me.queue = new Queue(); me.stats = me.queue.stats; // 如果当前不是html5运行时,那就算了。 // 不执行后续操作 if ( this.request('predict-runtime-type') !== 'html5' ) { return; } // 创建一个 html5 运行时的 placeholder // 以至于外部添加原生 File 对象的时候能正确包裹一下供 webuploader 使用。 deferred = Base.Deferred(); this.placeholder = runtime = new RuntimeClient('Placeholder'); runtime.connectRuntime({ runtimeOrder: 'html5' }, function() { me._ruid = runtime.getRuid(); deferred.resolve(); }); return deferred.promise(); }, // 为了支持外部直接添加一个原生File对象。 _wrapFile: function( file ) { if ( !(file instanceof WUFile) ) { if ( !(file instanceof File) ) { if ( !this._ruid ) { throw new Error('Can\'t add external files.'); } file = new File( this._ruid, file ); } file = new WUFile( file ); } return file; }, // 判断文件是否可以被加入队列 acceptFile: function( file ) { var invalid = !file || !file.size || this.accept && // 如果名字中有后缀,才做后缀白名单处理。 rExt.exec( file.name ) && !this.accept.test( file.name ); return !invalid; }, /** * @event beforeFileQueued * @param {File} file File对象 * @description 当文件被加入队列之前触发,此事件的handler返回值为`false`,则此文件不会被添加进入队列。 * @for Uploader */ /** * @event fileQueued * @param {File} file File对象 * @description 当文件被加入队列以后触发。 * @for Uploader */ _addFile: function( file ) { var me = this; file = me._wrapFile( file ); // 不过类型判断允许不允许,先派送 `beforeFileQueued` if ( !me.owner.trigger( 'beforeFileQueued', file ) ) { return; } // 类型不匹配,则派送错误事件,并返回。 if ( !me.acceptFile( file ) ) { me.owner.trigger( 'error', 'Q_TYPE_DENIED', file ); return; } me.queue.append( file ); me.owner.trigger( 'fileQueued', file ); return file; }, getFile: function( fileId ) { return this.queue.getFile( fileId ); }, /** * @event filesQueued * @param {File} files 数组,内容为原始File(lib/File)对象。 * @description 当一批文件添加进队列以后触发。 * @for Uploader */ /** * @property {Boolean} [auto=false] * @namespace options * @for Uploader * @description 设置为 true 后,不需要手动调用上传,有文件选择即开始上传。 * */ /** * @method addFiles * @grammar addFiles( file ) => undefined * @grammar addFiles( [file1, file2 ...] ) => undefined * @param {Array of File or File} [files] Files 对象 数组 * @description 添加文件到队列 * @for Uploader */ addFile: function( files ) { var me = this; if ( !files.length ) { files = [ files ]; } files = $.map( files, function( file ) { return me._addFile( file ); }); me.owner.trigger( 'filesQueued', files ); if ( me.options.auto ) { setTimeout(function() { me.request('start-upload'); }, 20 ); } }, getStats: function() { return this.stats; }, /** * @event fileDequeued * @param {File} file File对象 * @description 当文件被移除队列后触发。 * @for Uploader */ /** * @method removeFile * @grammar removeFile( file ) => undefined * @grammar removeFile( id ) => undefined * @grammar removeFile( file, true ) => undefined * @grammar removeFile( id, true ) => undefined * @param {File|id} file File对象或这File对象的id * @description 移除某一文件, 默认只会标记文件状态为已取消,如果第二个参数为 `true` 则会从 queue 中移除。 * @for Uploader * @example * * $li.on('click', '.remove-this', function() { * uploader.removeFile( file ); * }) */ removeFile: function( file, remove ) { var me = this; file = file.id ? file : me.queue.getFile( file ); this.request( 'cancel-file', file ); if ( remove ) { this.queue.removeFile( file ); } }, /** * @method getFiles * @grammar getFiles() => Array * @grammar getFiles( status1, status2, status... ) => Array * @description 返回指定状态的文件集合,不传参数将返回所有状态的文件。 * @for Uploader * @example * console.log( uploader.getFiles() ); // => all files * console.log( uploader.getFiles('error') ) // => all error files. */ getFiles: function() { return this.queue.getFiles.apply( this.queue, arguments ); }, fetchFile: function() { return this.queue.fetch.apply( this.queue, arguments ); }, /** * @method retry * @grammar retry() => undefined * @grammar retry( file ) => undefined * @description 重试上传,重试指定文件,或者从出错的文件开始重新上传。 * @for Uploader * @example * function retry() { * uploader.retry(); * } */ retry: function( file, noForceStart ) { var me = this, files, i, len; if ( file ) { file = file.id ? file : me.queue.getFile( file ); file.setStatus( Status.QUEUED ); noForceStart || me.request('start-upload'); return; } files = me.queue.getFiles( Status.ERROR ); i = 0; len = files.length; for ( ; i < len; i++ ) { file = files[ i ]; file.setStatus( Status.QUEUED ); } me.request('start-upload'); }, /** * @method sort * @grammar sort( fn ) => undefined * @description 排序队列中的文件,在上传之前调整可以控制上传顺序。 * @for Uploader */ sortFiles: function() { return this.queue.sort.apply( this.queue, arguments ); }, /** * @event reset * @description 当 uploader 被重置的时候触发。 * @for Uploader */ /** * @method reset * @grammar reset() => undefined * @description 重置uploader。目前只重置了队列。 * @for Uploader * @example * uploader.reset(); */ reset: function() { this.owner.trigger('reset'); this.queue = new Queue(); this.stats = this.queue.stats; }, destroy: function() { this.reset(); this.placeholder && this.placeholder.destroy(); } }); }); /** * @fileOverview 添加获取Runtime相关信息的方法。 */ define('widgets/runtime',[ 'uploader', 'runtime/runtime', 'widgets/widget' ], function( Uploader, Runtime ) { Uploader.support = function() { return Runtime.hasRuntime.apply( Runtime, arguments ); }; /** * @property {Object} [runtimeOrder=html5,flash] * @namespace options * @for Uploader * @description 指定运行时启动顺序。默认会想尝试 html5 是否支持,如果支持则使用 html5, 否则则使用 flash. * * 可以将此值设置成 `flash`,来强制使用 flash 运行时。 */ return Uploader.register({ name: 'runtime', init: function() { if ( !this.predictRuntimeType() ) { throw Error('Runtime Error'); } }, /** * 预测Uploader将采用哪个`Runtime` * @grammar predictRuntimeType() => String * @method predictRuntimeType * @for Uploader */ predictRuntimeType: function() { var orders = this.options.runtimeOrder || Runtime.orders, type = this.type, i, len; if ( !type ) { orders = orders.split( /\s*,\s*/g ); for ( i = 0, len = orders.length; i < len; i++ ) { if ( Runtime.hasRuntime( orders[ i ] ) ) { this.type = type = orders[ i ]; break; } } } return type; } }); }); /** * @fileOverview Transport */ define('lib/transport',[ 'base', 'runtime/client', 'mediator' ], function( Base, RuntimeClient, Mediator ) { var $ = Base.$; function Transport( opts ) { var me = this; opts = me.options = $.extend( true, {}, Transport.options, opts || {} ); RuntimeClient.call( this, 'Transport' ); this._blob = null; this._formData = opts.formData || {}; this._headers = opts.headers || {}; this.on( 'progress', this._timeout ); this.on( 'load error', function() { me.trigger( 'progress', 1 ); clearTimeout( me._timer ); }); } Transport.options = { server: '', method: 'POST', // 跨域时,是否允许携带cookie, 只有html5 runtime才有效 withCredentials: false, fileVal: 'file', timeout: 2 * 60 * 1000, // 2分钟 formData: {}, headers: {}, sendAsBinary: false }; $.extend( Transport.prototype, { // 添加Blob, 只能添加一次,最后一次有效。 appendBlob: function( key, blob, filename ) { var me = this, opts = me.options; if ( me.getRuid() ) { me.disconnectRuntime(); } // 连接到blob归属的同一个runtime. me.connectRuntime( blob.ruid, function() { me.exec('init'); }); me._blob = blob; opts.fileVal = key || opts.fileVal; opts.filename = filename || opts.filename; }, // 添加其他字段 append: function( key, value ) { if ( typeof key === 'object' ) { $.extend( this._formData, key ); } else { this._formData[ key ] = value; } }, setRequestHeader: function( key, value ) { if ( typeof key === 'object' ) { $.extend( this._headers, key ); } else { this._headers[ key ] = value; } }, send: function( method ) { this.exec( 'send', method ); this._timeout(); }, abort: function() { clearTimeout( this._timer ); return this.exec('abort'); }, destroy: function() { this.trigger('destroy'); this.off(); this.exec('destroy'); this.disconnectRuntime(); }, getResponse: function() { return this.exec('getResponse'); }, getResponseAsJson: function() { return this.exec('getResponseAsJson'); }, getStatus: function() { return this.exec('getStatus'); }, _timeout: function() { var me = this, duration = me.options.timeout; if ( !duration ) { return; } clearTimeout( me._timer ); me._timer = setTimeout(function() { me.abort(); me.trigger( 'error', 'timeout' ); }, duration ); } }); // 让Transport具备事件功能。 Mediator.installTo( Transport.prototype ); return Transport; }); /** * @fileOverview 负责文件上传相关。 */ define('widgets/upload',[ 'base', 'uploader', 'file', 'lib/transport', 'widgets/widget' ], function( Base, Uploader, WUFile, Transport ) { var $ = Base.$, isPromise = Base.isPromise, Status = WUFile.Status; // 添加默认配置项 $.extend( Uploader.options, { /** * @property {Boolean} [prepareNextFile=false] * @namespace options * @for Uploader * @description 是否允许在文件传输时提前把下一个文件准备好。 * 对于一个文件的准备工作比较耗时,比如图片压缩,md5序列化。 * 如果能提前在当前文件传输期处理,可以节省总体耗时。 */ prepareNextFile: false, /** * @property {Boolean} [chunked=false] * @namespace options * @for Uploader * @description 是否要分片处理大文件上传。 */ chunked: false, /** * @property {Boolean} [chunkSize=5242880] * @namespace options * @for Uploader * @description 如果要分片,分多大一片? 默认大小为5M. */ chunkSize: 5 * 1024 * 1024, /** * @property {Boolean} [chunkRetry=2] * @namespace options * @for Uploader * @description 如果某个分片由于网络问题出错,允许自动重传多少次? */ chunkRetry: 2, /** * @property {Boolean} [threads=3] * @namespace options * @for Uploader * @description 上传并发数。允许同时最大上传进程数。 */ threads: 3, /** * @property {Object} [formData={}] * @namespace options * @for Uploader * @description 文件上传请求的参数表,每次发送都会发送此对象中的参数。 */ formData: {} /** * @property {Object} [fileVal='file'] * @namespace options * @for Uploader * @description 设置文件上传域的name。 */ /** * @property {Object} [method='POST'] * @namespace options * @for Uploader * @description 文件上传方式,`POST`或者`GET`。 */ /** * @property {Object} [sendAsBinary=false] * @namespace options * @for Uploader * @description 是否已二进制的流的方式发送文件,这样整个上传内容`php://input`都为文件内容, * 其他参数在$_GET数组中。 */ }); // 负责将文件切片。 function CuteFile( file, chunkSize ) { var pending = [], blob = file.source, total = blob.size, chunks = chunkSize ? Math.ceil( total / chunkSize ) : 1, start = 0, index = 0, len, api; api = { file: file, has: function() { return !!pending.length; }, shift: function() { return pending.shift(); }, unshift: function( block ) { pending.unshift( block ); } }; while ( index < chunks ) { len = Math.min( chunkSize, total - start ); pending.push({ file: file, start: start, end: chunkSize ? (start + len) : total, total: total, chunks: chunks, chunk: index++, cuted: api }); start += len; } file.blocks = pending.concat(); file.remaning = pending.length; return api; } Uploader.register({ name: 'upload', init: function() { var owner = this.owner, me = this; this.runing = false; this.progress = false; owner .on( 'startUpload', function() { me.progress = true; }) .on( 'uploadFinished', function() { me.progress = false; }); // 记录当前正在传的数据,跟threads相关 this.pool = []; // 缓存分好片的文件。 this.stack = []; // 缓存即将上传的文件。 this.pending = []; // 跟踪还有多少分片在上传中但是没有完成上传。 this.remaning = 0; this.__tick = Base.bindFn( this._tick, this ); owner.on( 'uploadComplete', function( file ) { // 把其他块取消了。 file.blocks && $.each( file.blocks, function( _, v ) { v.transport && (v.transport.abort(), v.transport.destroy()); delete v.transport; }); delete file.blocks; delete file.remaning; }); }, reset: function() { this.request( 'stop-upload', true ); this.runing = false; this.pool = []; this.stack = []; this.pending = []; this.remaning = 0; this._trigged = false; this._promise = null; }, /** * @event startUpload * @description 当开始上传流程时触发。 * @for Uploader */ /** * 开始上传。此方法可以从初始状态调用开始上传流程,也可以从暂停状态调用,继续上传流程。 * * 可以指定开始某一个文件。 * @grammar upload() => undefined * @grammar upload( file | fileId) => undefined * @method upload * @for Uploader */ startUpload: function(file) { var me = this; // 移出invalid的文件 $.each( me.request( 'get-files', Status.INVALID ), function() { me.request( 'remove-file', this ); }); // 如果指定了开始某个文件,则只开始指定文件。 if ( file ) { file = file.id ? file : me.request( 'get-file', file ); if (file.getStatus() === Status.INTERRUPT) { $.each( me.pool, function( _, v ) { // 之前暂停过。 if (v.file !== file) { return; } v.transport && v.transport.send(); }); file.setStatus( Status.QUEUED ); } else if (file.getStatus() === Status.PROGRESS) { return; } else { file.setStatus( Status.QUEUED ); } } else { $.each( me.request( 'get-files', [ Status.INITED ] ), function() { this.setStatus( Status.QUEUED ); }); } if ( me.runing ) { return; } me.runing = true; var files = []; // 如果有暂停的,则续传 $.each( me.pool, function( _, v ) { var file = v.file; if ( file.getStatus() === Status.INTERRUPT ) { files.push(file); me._trigged = false; v.transport && v.transport.send(); } }); var file; while ( (file = files.shift()) ) { file.setStatus( Status.PROGRESS ); } file || $.each( me.request( 'get-files', Status.INTERRUPT ), function() { this.setStatus( Status.PROGRESS ); }); me._trigged = false; Base.nextTick( me.__tick ); me.owner.trigger('startUpload'); }, /** * @event stopUpload * @description 当开始上传流程暂停时触发。 * @for Uploader */ /** * 暂停上传。第一个参数为是否中断上传当前正在上传的文件。 * * 如果第一个参数是文件,则只暂停指定文件。 * @grammar stop() => undefined * @grammar stop( true ) => undefined * @grammar stop( file ) => undefined * @method stop * @for Uploader */ stopUpload: function( file, interrupt ) { var me = this; if (file === true) { interrupt = file; file = null; } if ( me.runing === false ) { return; } // 如果只是暂停某个文件。 if ( file ) { file = file.id ? file : me.request( 'get-file', file ); if ( file.getStatus() !== Status.PROGRESS && file.getStatus() !== Status.QUEUED ) { return; } file.setStatus( Status.INTERRUPT ); $.each( me.pool, function( _, v ) { // 只 abort 指定的文件。 if (v.file !== file) { return; } v.transport && v.transport.abort(); me._putback(v); me._popBlock(v); }); return Base.nextTick( me.__tick ); } me.runing = false; if (this._promise && this._promise.file) { this._promise.file.setStatus( Status.INTERRUPT ); } interrupt && $.each( me.pool, function( _, v ) { v.transport && v.transport.abort(); v.file.setStatus( Status.INTERRUPT ); }); me.owner.trigger('stopUpload'); }, /** * @method cancelFile * @grammar cancelFile( file ) => undefined * @grammar cancelFile( id ) => undefined * @param {File|id} file File对象或这File对象的id * @description 标记文件状态为已取消, 同时将中断文件传输。 * @for Uploader * @example * * $li.on('click', '.remove-this', function() { * uploader.cancelFile( file ); * }) */ cancelFile: function( file ) { file = file.id ? file : this.request( 'get-file', file ); // 如果正在上传。 file.blocks && $.each( file.blocks, function( _, v ) { var _tr = v.transport; if ( _tr ) { _tr.abort(); _tr.destroy(); delete v.transport; } }); file.setStatus( Status.CANCELLED ); this.owner.trigger( 'fileDequeued', file ); }, /** * 判断`Uplaode`r是否正在上传中。 * @grammar isInProgress() => Boolean * @method isInProgress * @for Uploader */ isInProgress: function() { return !!this.progress; }, _getStats: function() { return this.request('get-stats'); }, /** * 掉过一个文件上传,直接标记指定文件为已上传状态。 * @grammar skipFile( file ) => undefined * @method skipFile * @for Uploader */ skipFile: function( file, status ) { file = file.id ? file : this.request( 'get-file', file ); file.setStatus( status || Status.COMPLETE ); file.skipped = true; // 如果正在上传。 file.blocks && $.each( file.blocks, function( _, v ) { var _tr = v.transport; if ( _tr ) { _tr.abort(); _tr.destroy(); delete v.transport; } }); this.owner.trigger( 'uploadSkip', file ); }, /** * @event uploadFinished * @description 当所有文件上传结束时触发。 * @for Uploader */ _tick: function() { var me = this, opts = me.options, fn, val; // 上一个promise还没有结束,则等待完成后再执行。 if ( me._promise ) { return me._promise.always( me.__tick ); } // 还有位置,且还有文件要处理的话。 if ( me.pool.length < opts.threads && (val = me._nextBlock()) ) { me._trigged = false; fn = function( val ) { me._promise = null; // 有可能是reject过来的,所以要检测val的类型。 val && val.file && me._startSend( val ); Base.nextTick( me.__tick ); }; me._promise = isPromise( val ) ? val.always( fn ) : fn( val ); // 没有要上传的了,且没有正在传输的了。 } else if ( !me.remaning && !me._getStats().numOfQueue && !me._getStats().numofInterrupt ) { me.runing = false; me._trigged || Base.nextTick(function() { me.owner.trigger('uploadFinished'); }); me._trigged = true; } }, _putback: function(block) { var idx; block.cuted.unshift(block); idx = this.stack.indexOf(block.cuted); if (!~idx) { this.stack.unshift(block.cuted); } }, _getStack: function() { var i = 0, act; while ( (act = this.stack[ i++ ]) ) { if ( act.has() && act.file.getStatus() === Status.PROGRESS ) { return act; } else if (!act.has() || act.file.getStatus() !== Status.PROGRESS && act.file.getStatus() !== Status.INTERRUPT ) { // 把已经处理完了的,或者,状态为非 progress(上传中)、 // interupt(暂停中) 的移除。 this.stack.splice( --i, 1 ); } } return null; }, _nextBlock: function() { var me = this, opts = me.options, act, next, done, preparing; // 如果当前文件还有没有需要传输的,则直接返回剩下的。 if ( (act = this._getStack()) ) { // 是否提前准备下一个文件 if ( opts.prepareNextFile && !me.pending.length ) { me._prepareNextFile(); } return act.shift(); // 否则,如果正在运行,则准备下一个文件,并等待完成后返回下个分片。 } else if ( me.runing ) { // 如果缓存中有,则直接在缓存中取,没有则去queue中取。 if ( !me.pending.length && me._getStats().numOfQueue ) { me._prepareNextFile(); } next = me.pending.shift(); done = function( file ) { if ( !file ) { return null; } act = CuteFile( file, opts.chunked ? opts.chunkSize : 0 ); me.stack.push(act); return act.shift(); }; // 文件可能还在prepare中,也有可能已经完全准备好了。 if ( isPromise( next) ) { preparing = next.file; next = next[ next.pipe ? 'pipe' : 'then' ]( done ); next.file = preparing; return next; } return done( next ); } }, /** * @event uploadStart * @param {File} file File对象 * @description 某个文件开始上传前触发,一个文件只会触发一次。 * @for Uploader */ _prepareNextFile: function() { var me = this, file = me.request('fetch-file'), pending = me.pending, promise; if ( file ) { promise = me.request( 'before-send-file', file, function() { // 有可能文件被skip掉了。文件被skip掉后,状态坑定不是Queued. if ( file.getStatus() === Status.PROGRESS || file.getStatus() === Status.INTERRUPT ) { return file; } return me._finishFile( file ); }); me.owner.trigger( 'uploadStart', file ); file.setStatus( Status.PROGRESS ); promise.file = file; // 如果还在pending中,则替换成文件本身。 promise.done(function() { var idx = $.inArray( promise, pending ); ~idx && pending.splice( idx, 1, file ); }); // befeore-send-file的钩子就有错误发生。 promise.fail(function( reason ) { file.setStatus( Status.ERROR, reason ); me.owner.trigger( 'uploadError', file, reason ); me.owner.trigger( 'uploadComplete', file ); }); pending.push( promise ); } }, // 让出位置了,可以让其他分片开始上传 _popBlock: function( block ) { var idx = $.inArray( block, this.pool ); this.pool.splice( idx, 1 ); block.file.remaning--; this.remaning--; }, // 开始上传,可以被掉过。如果promise被reject了,则表示跳过此分片。 _startSend: function( block ) { var me = this, file = block.file, promise; // 有可能在 before-send-file 的 promise 期间改变了文件状态。 // 如:暂停,取消 // 我们不能中断 promise, 但是可以在 promise 完后,不做上传操作。 if ( file.getStatus() !== Status.PROGRESS ) { // 如果是中断,则还需要放回去。 if (file.getStatus() === Status.INTERRUPT) { me._putback(block); } return; } me.pool.push( block ); me.remaning++; // 如果没有分片,则直接使用原始的。 // 不会丢失content-type信息。 block.blob = block.chunks === 1 ? file.source : file.source.slice( block.start, block.end ); // hook, 每个分片发送之前可能要做些异步的事情。 promise = me.request( 'before-send', block, function() { // 有可能文件已经上传出错了,所以不需要再传输了。 if ( file.getStatus() === Status.PROGRESS ) { me._doSend( block ); } else { me._popBlock( block ); Base.nextTick( me.__tick ); } }); // 如果为fail了,则跳过此分片。 promise.fail(function() { if ( file.remaning === 1 ) { me._finishFile( file ).always(function() { block.percentage = 1; me._popBlock( block ); me.owner.trigger( 'uploadComplete', file ); Base.nextTick( me.__tick ); }); } else { block.percentage = 1; me.updateFileProgress( file ); me._popBlock( block ); Base.nextTick( me.__tick ); } }); }, /** * @event uploadBeforeSend * @param {Object} object * @param {Object} data 默认的上传参数,可以扩展此对象来控制上传参数。 * @param {Object} headers 可以扩展此对象来控制上传头部。 * @description 当某个文件的分块在发送前触发,主要用来询问是否要添加附带参数,大文件在开起分片上传的前提下此事件可能会触发多次。 * @for Uploader */ /** * @event uploadAccept * @param {Object} object * @param {Object} ret 服务端的返回数据,json格式,如果服务端不是json格式,从ret._raw中取数据,自行解析。 * @description 当某个文件上传到服务端响应后,会派送此事件来询问服务端响应是否有效。如果此事件handler返回值为`false`, 则此文件将派送`server`类型的`uploadError`事件。 * @for Uploader */ /** * @event uploadProgress * @param {File} file File对象 * @param {Number} percentage 上传进度 * @description 上传过程中触发,携带上传进度。 * @for Uploader */ /** * @event uploadError * @param {File} file File对象 * @param {String} reason 出错的code * @description 当文件上传出错时触发。 * @for Uploader */ /** * @event uploadSuccess * @param {File} file File对象 * @param {Object} response 服务端返回的数据 * @description 当文件上传成功时触发。 * @for Uploader */ /** * @event uploadComplete * @param {File} [file] File对象 * @description 不管成功或者失败,文件上传完成时触发。 * @for Uploader */ // 做上传操作。 _doSend: function( block ) { var me = this, owner = me.owner, opts = me.options, file = block.file, tr = new Transport( opts ), data = $.extend({}, opts.formData ), headers = $.extend({}, opts.headers ), requestAccept, ret; block.transport = tr; tr.on( 'destroy', function() { delete block.transport; me._popBlock( block ); Base.nextTick( me.__tick ); }); // 广播上传进度。以文件为单位。 tr.on( 'progress', function( percentage ) { block.percentage = percentage; me.updateFileProgress( file ); }); // 用来询问,是否返回的结果是有错误的。 requestAccept = function( reject ) { var fn; ret = tr.getResponseAsJson() || {}; ret._raw = tr.getResponse(); fn = function( value ) { reject = value; }; // 服务端响应了,不代表成功了,询问是否响应正确。 if ( !owner.trigger( 'uploadAccept', block, ret, fn ) ) { reject = reject || 'server'; } return reject; }; // 尝试重试,然后广播文件上传出错。 tr.on( 'error', function( type, flag ) { block.retried = block.retried || 0; // 自动重试 if ( block.chunks > 1 && ~'http,abort'.indexOf( type ) && block.retried < opts.chunkRetry ) { block.retried++; tr.send(); } else { // http status 500 ~ 600 if ( !flag && type === 'server' ) { type = requestAccept( type ); } file.setStatus( Status.ERROR, type ); owner.trigger( 'uploadError', file, type ); owner.trigger( 'uploadComplete', file ); } }); // 上传成功 tr.on( 'load', function() { var reason; // 如果非预期,转向上传出错。 if ( (reason = requestAccept()) ) { tr.trigger( 'error', reason, true ); return; } // 全部上传完成。 if ( file.remaning === 1 ) { me._finishFile( file, ret ); } else { tr.destroy(); } }); // 配置默认的上传字段。 data = $.extend( data, { id: file.id, name: file.name, type: file.type, lastModifiedDate: file.lastModifiedDate, size: file.size }); block.chunks > 1 && $.extend( data, { chunks: block.chunks, chunk: block.chunk }); // 在发送之间可以添加字段什么的。。。 // 如果默认的字段不够使用,可以通过监听此事件来扩展 owner.trigger( 'uploadBeforeSend', block, data, headers ); // 开始发送。 tr.appendBlob( opts.fileVal, block.blob, file.name ); tr.append( data ); tr.setRequestHeader( headers ); tr.send(); }, // 完成上传。 _finishFile: function( file, ret, hds ) { var owner = this.owner; return owner .request( 'after-send-file', arguments, function() { file.setStatus( Status.COMPLETE ); owner.trigger( 'uploadSuccess', file, ret, hds ); }) .fail(function( reason ) { // 如果外部已经标记为invalid什么的,不再改状态。 if ( file.getStatus() === Status.PROGRESS ) { file.setStatus( Status.ERROR, reason ); } owner.trigger( 'uploadError', file, reason ); }) .always(function() { owner.trigger( 'uploadComplete', file ); }); }, updateFileProgress: function(file) { var totalPercent = 0, uploaded = 0; if (!file.blocks) { return; } $.each( file.blocks, function( _, v ) { uploaded += (v.percentage || 0) * (v.end - v.start); }); totalPercent = uploaded / file.size; this.owner.trigger( 'uploadProgress', file, totalPercent || 0 ); } }); }); /** * @fileOverview 各种验证,包括文件总大小是否超出、单文件是否超出和文件是否重复。 */ define('widgets/validator',[ 'base', 'uploader', 'file', 'widgets/widget' ], function( Base, Uploader, WUFile ) { var $ = Base.$, validators = {}, api; /** * @event error * @param {String} type 错误类型。 * @description 当validate不通过时,会以派送错误事件的形式通知调用者。通过`upload.on('error', handler)`可以捕获到此类错误,目前有以下错误会在特定的情况下派送错来。 * * * `Q_EXCEED_NUM_LIMIT` 在设置了`fileNumLimit`且尝试给`uploader`添加的文件数量超出这个值时派送。 * * `Q_EXCEED_SIZE_LIMIT` 在设置了`Q_EXCEED_SIZE_LIMIT`且尝试给`uploader`添加的文件总大小超出这个值时派送。 * * `Q_TYPE_DENIED` 当文件类型不满足时触发。。 * @for Uploader */ // 暴露给外面的api api = { // 添加验证器 addValidator: function( type, cb ) { validators[ type ] = cb; }, // 移除验证器 removeValidator: function( type ) { delete validators[ type ]; } }; // 在Uploader初始化的时候启动Validators的初始化 Uploader.register({ name: 'validator', init: function() { var me = this; Base.nextTick(function() { $.each( validators, function() { this.call( me.owner ); }); }); } }); /** * @property {int} [fileNumLimit=undefined] * @namespace options * @for Uploader * @description 验证文件总数量, 超出则不允许加入队列。 */ api.addValidator( 'fileNumLimit', function() { var uploader = this, opts = uploader.options, count = 0, max = parseInt( opts.fileNumLimit, 10 ), flag = true; if ( !max ) { return; } uploader.on( 'beforeFileQueued', function( file ) { if ( count >= max && flag ) { flag = false; this.trigger( 'error', 'Q_EXCEED_NUM_LIMIT', max, file ); setTimeout(function() { flag = true; }, 1 ); } return count >= max ? false : true; }); uploader.on( 'fileQueued', function() { count++; }); uploader.on( 'fileDequeued', function() { count--; }); uploader.on( 'reset', function() { count = 0; }); }); /** * @property {int} [fileSizeLimit=undefined] * @namespace options * @for Uploader * @description 验证文件总大小是否超出限制, 超出则不允许加入队列。 */ api.addValidator( 'fileSizeLimit', function() { var uploader = this, opts = uploader.options, count = 0, max = parseInt( opts.fileSizeLimit, 10 ), flag = true; if ( !max ) { return; } uploader.on( 'beforeFileQueued', function( file ) { var invalid = count + file.size > max; if ( invalid && flag ) { flag = false; this.trigger( 'error', 'Q_EXCEED_SIZE_LIMIT', max, file ); setTimeout(function() { flag = true; }, 1 ); } return invalid ? false : true; }); uploader.on( 'fileQueued', function( file ) { count += file.size; }); uploader.on( 'fileDequeued', function( file ) { count -= file.size; }); uploader.on( 'reset', function() { count = 0; }); }); /** * @property {int} [fileSingleSizeLimit=undefined] * @namespace options * @for Uploader * @description 验证单个文件大小是否超出限制, 超出则不允许加入队列。 */ api.addValidator( 'fileSingleSizeLimit', function() { var uploader = this, opts = uploader.options, max = opts.fileSingleSizeLimit; if ( !max ) { return; } uploader.on( 'beforeFileQueued', function( file ) { if ( file.size > max ) { file.setStatus( WUFile.Status.INVALID, 'exceed_size' ); this.trigger( 'error', 'F_EXCEED_SIZE', max, file ); return false; } }); }); /** * @property {Boolean} [duplicate=undefined] * @namespace options * @for Uploader * @description 去重, 根据文件名字、文件大小和最后修改时间来生成hash Key. */ api.addValidator( 'duplicate', function() { var uploader = this, opts = uploader.options, mapping = {}; if ( opts.duplicate ) { return; } function hashString( str ) { var hash = 0, i = 0, len = str.length, _char; for ( ; i < len; i++ ) { _char = str.charCodeAt( i ); hash = _char + (hash << 6) + (hash << 16) - hash; } return hash; } uploader.on( 'beforeFileQueued', function( file ) { var hash = file.__hash || (file.__hash = hashString( file.name + file.size + file.lastModifiedDate )); // 已经重复了 if ( mapping[ hash ] ) { this.trigger( 'error', 'F_DUPLICATE', file ); return false; } }); uploader.on( 'fileQueued', function( file ) { var hash = file.__hash; hash && (mapping[ hash ] = true); }); uploader.on( 'fileDequeued', function( file ) { var hash = file.__hash; hash && (delete mapping[ hash ]); }); uploader.on( 'reset', function() { mapping = {}; }); }); return api; }); /** * @fileOverview Runtime管理器,负责Runtime的选择, 连接 */ define('runtime/compbase',[],function() { function CompBase( owner, runtime ) { this.owner = owner; this.options = owner.options; this.getRuntime = function() { return runtime; }; this.getRuid = function() { return runtime.uid; }; this.trigger = function() { return owner.trigger.apply( owner, arguments ); }; } return CompBase; }); /** * @fileOverview Html5Runtime */ define('runtime/html5/runtime',[ 'base', 'runtime/runtime', 'runtime/compbase' ], function( Base, Runtime, CompBase ) { var type = 'html5', components = {}; function Html5Runtime() { var pool = {}, me = this, destroy = this.destroy; Runtime.apply( me, arguments ); me.type = type; // 这个方法的调用者,实际上是RuntimeClient me.exec = function( comp, fn/*, args...*/) { var client = this, uid = client.uid, args = Base.slice( arguments, 2 ), instance; if ( components[ comp ] ) { instance = pool[ uid ] = pool[ uid ] || new components[ comp ]( client, me ); if ( instance[ fn ] ) { return instance[ fn ].apply( instance, args ); } } }; me.destroy = function() { // @todo 删除池子中的所有实例 return destroy && destroy.apply( this, arguments ); }; } Base.inherits( Runtime, { constructor: Html5Runtime, // 不需要连接其他程序,直接执行callback init: function() { var me = this; setTimeout(function() { me.trigger('ready'); }, 1 ); } }); // 注册Components Html5Runtime.register = function( name, component ) { var klass = components[ name ] = Base.inherits( CompBase, component ); return klass; }; // 注册html5运行时。 // 只有在支持的前提下注册。 if ( window.Blob && window.FileReader && window.DataView ) { Runtime.addRuntime( type, Html5Runtime ); } return Html5Runtime; }); /** * @fileOverview Blob Html实现 */ define('runtime/html5/blob',[ 'runtime/html5/runtime', 'lib/blob' ], function( Html5Runtime, Blob ) { return Html5Runtime.register( 'Blob', { slice: function( start, end ) { var blob = this.owner.source, slice = blob.slice || blob.webkitSlice || blob.mozSlice; blob = slice.call( blob, start, end ); return new Blob( this.getRuid(), blob ); } }); }); /** * @fileOverview FilePaste */ define('runtime/html5/dnd',[ 'base', 'runtime/html5/runtime', 'lib/file' ], function( Base, Html5Runtime, File ) { var $ = Base.$, prefix = 'webuploader-dnd-'; return Html5Runtime.register( 'DragAndDrop', { init: function() { var elem = this.elem = this.options.container; this.dragEnterHandler = Base.bindFn( this._dragEnterHandler, this ); this.dragOverHandler = Base.bindFn( this._dragOverHandler, this ); this.dragLeaveHandler = Base.bindFn( this._dragLeaveHandler, this ); this.dropHandler = Base.bindFn( this._dropHandler, this ); this.dndOver = false; elem.on( 'dragenter', this.dragEnterHandler ); elem.on( 'dragover', this.dragOverHandler ); elem.on( 'dragleave', this.dragLeaveHandler ); elem.on( 'drop', this.dropHandler ); if ( this.options.disableGlobalDnd ) { $( document ).on( 'dragover', this.dragOverHandler ); $( document ).on( 'drop', this.dropHandler ); } }, _dragEnterHandler: function( e ) { var me = this, denied = me._denied || false, items; e = e.originalEvent || e; if ( !me.dndOver ) { me.dndOver = true; // 注意只有 chrome 支持。 items = e.dataTransfer.items; if ( items && items.length ) { me._denied = denied = !me.trigger( 'accept', items ); } me.elem.addClass( prefix + 'over' ); me.elem[ denied ? 'addClass' : 'removeClass' ]( prefix + 'denied' ); } e.dataTransfer.dropEffect = denied ? 'none' : 'copy'; return false; }, _dragOverHandler: function( e ) { // 只处理框内的。 var parentElem = this.elem.parent().get( 0 ); if ( parentElem && !$.contains( parentElem, e.currentTarget ) ) { return false; } clearTimeout( this._leaveTimer ); this._dragEnterHandler.call( this, e ); return false; }, _dragLeaveHandler: function() { var me = this, handler; handler = function() { me.dndOver = false; me.elem.removeClass( prefix + 'over ' + prefix + 'denied' ); }; clearTimeout( me._leaveTimer ); me._leaveTimer = setTimeout( handler, 100 ); return false; }, _dropHandler: function( e ) { var me = this, ruid = me.getRuid(), parentElem = me.elem.parent().get( 0 ), dataTransfer, data; // 只处理框内的。 if ( parentElem && !$.contains( parentElem, e.currentTarget ) ) { return false; } e = e.originalEvent || e; dataTransfer = e.dataTransfer; // 如果是页面内拖拽,还不能处理,不阻止事件。 // 此处 ie11 下会报参数错误, try { data = dataTransfer.getData('text/html'); } catch( err ) { } if ( data ) { return; } me._getTansferFiles( dataTransfer, function( results ) { me.trigger( 'drop', $.map( results, function( file ) { return new File( ruid, file ); }) ); }); me.dndOver = false; me.elem.removeClass( prefix + 'over' ); return false; }, // 如果传入 callback 则去查看文件夹,否则只管当前文件夹。 _getTansferFiles: function( dataTransfer, callback ) { var results = [], promises = [], items, files, file, item, i, len, canAccessFolder; items = dataTransfer.items; files = dataTransfer.files; canAccessFolder = !!(items && items[ 0 ].webkitGetAsEntry); for ( i = 0, len = files.length; i < len; i++ ) { file = files[ i ]; item = items && items[ i ]; if ( canAccessFolder && item.webkitGetAsEntry().isDirectory ) { promises.push( this._traverseDirectoryTree( item.webkitGetAsEntry(), results ) ); } else { results.push( file ); } } Base.when.apply( Base, promises ).done(function() { if ( !results.length ) { return; } callback( results ); }); }, _traverseDirectoryTree: function( entry, results ) { var deferred = Base.Deferred(), me = this; if ( entry.isFile ) { entry.file(function( file ) { results.push( file ); deferred.resolve(); }); } else if ( entry.isDirectory ) { entry.createReader().readEntries(function( entries ) { var len = entries.length, promises = [], arr = [], // 为了保证顺序。 i; for ( i = 0; i < len; i++ ) { promises.push( me._traverseDirectoryTree( entries[ i ], arr ) ); } Base.when.apply( Base, promises ).then(function() { results.push.apply( results, arr ); deferred.resolve(); }, deferred.reject ); }); } return deferred.promise(); }, destroy: function() { var elem = this.elem; // 还没 init 就调用 destroy if (!elem) { return; } elem.off( 'dragenter', this.dragEnterHandler ); elem.off( 'dragover', this.dragOverHandler ); elem.off( 'dragleave', this.dragLeaveHandler ); elem.off( 'drop', this.dropHandler ); if ( this.options.disableGlobalDnd ) { $( document ).off( 'dragover', this.dragOverHandler ); $( document ).off( 'drop', this.dropHandler ); } } }); }); /** * @fileOverview FilePaste */ define('runtime/html5/filepaste',[ 'base', 'runtime/html5/runtime', 'lib/file' ], function( Base, Html5Runtime, File ) { return Html5Runtime.register( 'FilePaste', { init: function() { var opts = this.options, elem = this.elem = opts.container, accept = '.*', arr, i, len, item; // accetp的mimeTypes中生成匹配正则。 if ( opts.accept ) { arr = []; for ( i = 0, len = opts.accept.length; i < len; i++ ) { item = opts.accept[ i ].mimeTypes; item && arr.push( item ); } if ( arr.length ) { accept = arr.join(','); accept = accept.replace( /,/g, '|' ).replace( /\*/g, '.*' ); } } this.accept = accept = new RegExp( accept, 'i' ); this.hander = Base.bindFn( this._pasteHander, this ); elem.on( 'paste', this.hander ); }, _pasteHander: function( e ) { var allowed = [], ruid = this.getRuid(), items, item, blob, i, len; e = e.originalEvent || e; items = e.clipboardData.items; for ( i = 0, len = items.length; i < len; i++ ) { item = items[ i ]; if ( item.kind !== 'file' || !(blob = item.getAsFile()) ) { continue; } allowed.push( new File( ruid, blob ) ); } if ( allowed.length ) { // 不阻止非文件粘贴(文字粘贴)的事件冒泡 e.preventDefault(); e.stopPropagation(); this.trigger( 'paste', allowed ); } }, destroy: function() { this.elem.off( 'paste', this.hander ); } }); }); /** * @fileOverview FilePicker */ define('runtime/html5/filepicker',[ 'base', 'runtime/html5/runtime' ], function( Base, Html5Runtime ) { var $ = Base.$; return Html5Runtime.register( 'FilePicker', { init: function() { var container = this.getRuntime().getContainer(), me = this, owner = me.owner, opts = me.options, label = this.label = $( document.createElement('label') ), input = this.input = $( document.createElement('input') ), arr, i, len, mouseHandler; input.attr( 'type', 'file' ); input.attr( 'name', opts.name ); input.addClass('webuploader-element-invisible'); label.on( 'click', function() { input.trigger('click'); }); label.css({ opacity: 0, width: '100%', height: '100%', display: 'block', cursor: 'pointer', background: '#ffffff' }); if ( opts.multiple ) { input.attr( 'multiple', 'multiple' ); } // @todo Firefox不支持单独指定后缀 if ( opts.accept && opts.accept.length > 0 ) { arr = []; for ( i = 0, len = opts.accept.length; i < len; i++ ) { arr.push( opts.accept[ i ].mimeTypes ); } input.attr( 'accept', arr.join(',') ); } container.append( input ); container.append( label ); mouseHandler = function( e ) { owner.trigger( e.type ); }; input.on( 'change', function( e ) { var fn = arguments.callee, clone; me.files = e.target.files; // reset input clone = this.cloneNode( true ); clone.value = null; this.parentNode.replaceChild( clone, this ); input.off(); input = $( clone ).on( 'change', fn ) .on( 'mouseenter mouseleave', mouseHandler ); owner.trigger('change'); }); label.on( 'mouseenter mouseleave', mouseHandler ); }, getFiles: function() { return this.files; }, destroy: function() { this.input.off(); this.label.off(); } }); }); /** * Terms: * * Uint8Array, FileReader, BlobBuilder, atob, ArrayBuffer * @fileOverview Image控件 */ define('runtime/html5/util',[ 'base' ], function( Base ) { var urlAPI = window.createObjectURL && window || window.URL && URL.revokeObjectURL && URL || window.webkitURL, createObjectURL = Base.noop, revokeObjectURL = createObjectURL; if ( urlAPI ) { // 更安全的方式调用,比如android里面就能把context改成其他的对象。 createObjectURL = function() { return urlAPI.createObjectURL.apply( urlAPI, arguments ); }; revokeObjectURL = function() { return urlAPI.revokeObjectURL.apply( urlAPI, arguments ); }; } return { createObjectURL: createObjectURL, revokeObjectURL: revokeObjectURL, dataURL2Blob: function( dataURI ) { var byteStr, intArray, ab, i, mimetype, parts; parts = dataURI.split(','); if ( ~parts[ 0 ].indexOf('base64') ) { byteStr = atob( parts[ 1 ] ); } else { byteStr = decodeURIComponent( parts[ 1 ] ); } ab = new ArrayBuffer( byteStr.length ); intArray = new Uint8Array( ab ); for ( i = 0; i < byteStr.length; i++ ) { intArray[ i ] = byteStr.charCodeAt( i ); } mimetype = parts[ 0 ].split(':')[ 1 ].split(';')[ 0 ]; return this.arrayBufferToBlob( ab, mimetype ); }, dataURL2ArrayBuffer: function( dataURI ) { var byteStr, intArray, i, parts; parts = dataURI.split(','); if ( ~parts[ 0 ].indexOf('base64') ) { byteStr = atob( parts[ 1 ] ); } else { byteStr = decodeURIComponent( parts[ 1 ] ); } intArray = new Uint8Array( byteStr.length ); for ( i = 0; i < byteStr.length; i++ ) { intArray[ i ] = byteStr.charCodeAt( i ); } return intArray.buffer; }, arrayBufferToBlob: function( buffer, type ) { var builder = window.BlobBuilder || window.WebKitBlobBuilder, bb; // android不支持直接new Blob, 只能借助blobbuilder. if ( builder ) { bb = new builder(); bb.append( buffer ); return bb.getBlob( type ); } return new Blob([ buffer ], type ? { type: type } : {} ); }, // 抽出来主要是为了解决android下面canvas.toDataUrl不支持jpeg. // 你得到的结果是png. canvasToDataUrl: function( canvas, type, quality ) { return canvas.toDataURL( type, quality / 100 ); }, // imagemeat会复写这个方法,如果用户选择加载那个文件了的话。 parseMeta: function( blob, callback ) { callback( false, {}); }, // imagemeat会复写这个方法,如果用户选择加载那个文件了的话。 updateImageHead: function( data ) { return data; } }; }); /** * Terms: * * Uint8Array, FileReader, BlobBuilder, atob, ArrayBuffer * @fileOverview Image控件 */ define('runtime/html5/imagemeta',[ 'runtime/html5/util' ], function( Util ) { var api; api = { parsers: { 0xffe1: [] }, maxMetaDataSize: 262144, parse: function( blob, cb ) { var me = this, fr = new FileReader(); fr.onload = function() { cb( false, me._parse( this.result ) ); fr = fr.onload = fr.onerror = null; }; fr.onerror = function( e ) { cb( e.message ); fr = fr.onload = fr.onerror = null; }; blob = blob.slice( 0, me.maxMetaDataSize ); fr.readAsArrayBuffer( blob.getSource() ); }, _parse: function( buffer, noParse ) { if ( buffer.byteLength < 6 ) { return; } var dataview = new DataView( buffer ), offset = 2, maxOffset = dataview.byteLength - 4, headLength = offset, ret = {}, markerBytes, markerLength, parsers, i; if ( dataview.getUint16( 0 ) === 0xffd8 ) { while ( offset < maxOffset ) { markerBytes = dataview.getUint16( offset ); if ( markerBytes >= 0xffe0 && markerBytes <= 0xffef || markerBytes === 0xfffe ) { markerLength = dataview.getUint16( offset + 2 ) + 2; if ( offset + markerLength > dataview.byteLength ) { break; } parsers = api.parsers[ markerBytes ]; if ( !noParse && parsers ) { for ( i = 0; i < parsers.length; i += 1 ) { parsers[ i ].call( api, dataview, offset, markerLength, ret ); } } offset += markerLength; headLength = offset; } else { break; } } if ( headLength > 6 ) { if ( buffer.slice ) { ret.imageHead = buffer.slice( 2, headLength ); } else { // Workaround for IE10, which does not yet // support ArrayBuffer.slice: ret.imageHead = new Uint8Array( buffer ) .subarray( 2, headLength ); } } } return ret; }, updateImageHead: function( buffer, head ) { var data = this._parse( buffer, true ), buf1, buf2, bodyoffset; bodyoffset = 2; if ( data.imageHead ) { bodyoffset = 2 + data.imageHead.byteLength; } if ( buffer.slice ) { buf2 = buffer.slice( bodyoffset ); } else { buf2 = new Uint8Array( buffer ).subarray( bodyoffset ); } buf1 = new Uint8Array( head.byteLength + 2 + buf2.byteLength ); buf1[ 0 ] = 0xFF; buf1[ 1 ] = 0xD8; buf1.set( new Uint8Array( head ), 2 ); buf1.set( new Uint8Array( buf2 ), head.byteLength + 2 ); return buf1.buffer; } }; Util.parseMeta = function() { return api.parse.apply( api, arguments ); }; Util.updateImageHead = function() { return api.updateImageHead.apply( api, arguments ); }; return api; }); /** * 代码来自于:https://github.com/blueimp/JavaScript-Load-Image * 暂时项目中只用了orientation. * * 去除了 Exif Sub IFD Pointer, GPS Info IFD Pointer, Exif Thumbnail. * @fileOverview EXIF解析 */ // Sample // ==================================== // Make : Apple // Model : iPhone 4S // Orientation : 1 // XResolution : 72 [72/1] // YResolution : 72 [72/1] // ResolutionUnit : 2 // Software : QuickTime 7.7.1 // DateTime : 2013:09:01 22:53:55 // ExifIFDPointer : 190 // ExposureTime : 0.058823529411764705 [1/17] // FNumber : 2.4 [12/5] // ExposureProgram : Normal program // ISOSpeedRatings : 800 // ExifVersion : 0220 // DateTimeOriginal : 2013:09:01 22:52:51 // DateTimeDigitized : 2013:09:01 22:52:51 // ComponentsConfiguration : YCbCr // ShutterSpeedValue : 4.058893515764426 // ApertureValue : 2.5260688216892597 [4845/1918] // BrightnessValue : -0.3126686601998395 // MeteringMode : Pattern // Flash : Flash did not fire, compulsory flash mode // FocalLength : 4.28 [107/25] // SubjectArea : [4 values] // FlashpixVersion : 0100 // ColorSpace : 1 // PixelXDimension : 2448 // PixelYDimension : 3264 // SensingMethod : One-chip color area sensor // ExposureMode : 0 // WhiteBalance : Auto white balance // FocalLengthIn35mmFilm : 35 // SceneCaptureType : Standard define('runtime/html5/imagemeta/exif',[ 'base', 'runtime/html5/imagemeta' ], function( Base, ImageMeta ) { var EXIF = {}; EXIF.ExifMap = function() { return this; }; EXIF.ExifMap.prototype.map = { 'Orientation': 0x0112 }; EXIF.ExifMap.prototype.get = function( id ) { return this[ id ] || this[ this.map[ id ] ]; }; EXIF.exifTagTypes = { // byte, 8-bit unsigned int: 1: { getValue: function( dataView, dataOffset ) { return dataView.getUint8( dataOffset ); }, size: 1 }, // ascii, 8-bit byte: 2: { getValue: function( dataView, dataOffset ) { return String.fromCharCode( dataView.getUint8( dataOffset ) ); }, size: 1, ascii: true }, // short, 16 bit int: 3: { getValue: function( dataView, dataOffset, littleEndian ) { return dataView.getUint16( dataOffset, littleEndian ); }, size: 2 }, // long, 32 bit int: 4: { getValue: function( dataView, dataOffset, littleEndian ) { return dataView.getUint32( dataOffset, littleEndian ); }, size: 4 }, // rational = two long values, // first is numerator, second is denominator: 5: { getValue: function( dataView, dataOffset, littleEndian ) { return dataView.getUint32( dataOffset, littleEndian ) / dataView.getUint32( dataOffset + 4, littleEndian ); }, size: 8 }, // slong, 32 bit signed int: 9: { getValue: function( dataView, dataOffset, littleEndian ) { return dataView.getInt32( dataOffset, littleEndian ); }, size: 4 }, // srational, two slongs, first is numerator, second is denominator: 10: { getValue: function( dataView, dataOffset, littleEndian ) { return dataView.getInt32( dataOffset, littleEndian ) / dataView.getInt32( dataOffset + 4, littleEndian ); }, size: 8 } }; // undefined, 8-bit byte, value depending on field: EXIF.exifTagTypes[ 7 ] = EXIF.exifTagTypes[ 1 ]; EXIF.getExifValue = function( dataView, tiffOffset, offset, type, length, littleEndian ) { var tagType = EXIF.exifTagTypes[ type ], tagSize, dataOffset, values, i, str, c; if ( !tagType ) { Base.log('Invalid Exif data: Invalid tag type.'); return; } tagSize = tagType.size * length; // Determine if the value is contained in the dataOffset bytes, // or if the value at the dataOffset is a pointer to the actual data: dataOffset = tagSize > 4 ? tiffOffset + dataView.getUint32( offset + 8, littleEndian ) : (offset + 8); if ( dataOffset + tagSize > dataView.byteLength ) { Base.log('Invalid Exif data: Invalid data offset.'); return; } if ( length === 1 ) { return tagType.getValue( dataView, dataOffset, littleEndian ); } values = []; for ( i = 0; i < length; i += 1 ) { values[ i ] = tagType.getValue( dataView, dataOffset + i * tagType.size, littleEndian ); } if ( tagType.ascii ) { str = ''; // Concatenate the chars: for ( i = 0; i < values.length; i += 1 ) { c = values[ i ]; // Ignore the terminating NULL byte(s): if ( c === '\u0000' ) { break; } str += c; } return str; } return values; }; EXIF.parseExifTag = function( dataView, tiffOffset, offset, littleEndian, data ) { var tag = dataView.getUint16( offset, littleEndian ); data.exif[ tag ] = EXIF.getExifValue( dataView, tiffOffset, offset, dataView.getUint16( offset + 2, littleEndian ), // tag type dataView.getUint32( offset + 4, littleEndian ), // tag length littleEndian ); }; EXIF.parseExifTags = function( dataView, tiffOffset, dirOffset, littleEndian, data ) { var tagsNumber, dirEndOffset, i; if ( dirOffset + 6 > dataView.byteLength ) { Base.log('Invalid Exif data: Invalid directory offset.'); return; } tagsNumber = dataView.getUint16( dirOffset, littleEndian ); dirEndOffset = dirOffset + 2 + 12 * tagsNumber; if ( dirEndOffset + 4 > dataView.byteLength ) { Base.log('Invalid Exif data: Invalid directory size.'); return; } for ( i = 0; i < tagsNumber; i += 1 ) { this.parseExifTag( dataView, tiffOffset, dirOffset + 2 + 12 * i, // tag offset littleEndian, data ); } // Return the offset to the next directory: return dataView.getUint32( dirEndOffset, littleEndian ); }; // EXIF.getExifThumbnail = function(dataView, offset, length) { // var hexData, // i, // b; // if (!length || offset + length > dataView.byteLength) { // Base.log('Invalid Exif data: Invalid thumbnail data.'); // return; // } // hexData = []; // for (i = 0; i < length; i += 1) { // b = dataView.getUint8(offset + i); // hexData.push((b < 16 ? '0' : '') + b.toString(16)); // } // return 'data:image/jpeg,%' + hexData.join('%'); // }; EXIF.parseExifData = function( dataView, offset, length, data ) { var tiffOffset = offset + 10, littleEndian, dirOffset; // Check for the ASCII code for "Exif" (0x45786966): if ( dataView.getUint32( offset + 4 ) !== 0x45786966 ) { // No Exif data, might be XMP data instead return; } if ( tiffOffset + 8 > dataView.byteLength ) { Base.log('Invalid Exif data: Invalid segment size.'); return; } // Check for the two null bytes: if ( dataView.getUint16( offset + 8 ) !== 0x0000 ) { Base.log('Invalid Exif data: Missing byte alignment offset.'); return; } // Check the byte alignment: switch ( dataView.getUint16( tiffOffset ) ) { case 0x4949: littleEndian = true; break; case 0x4D4D: littleEndian = false; break; default: Base.log('Invalid Exif data: Invalid byte alignment marker.'); return; } // Check for the TIFF tag marker (0x002A): if ( dataView.getUint16( tiffOffset + 2, littleEndian ) !== 0x002A ) { Base.log('Invalid Exif data: Missing TIFF marker.'); return; } // Retrieve the directory offset bytes, usually 0x00000008 or 8 decimal: dirOffset = dataView.getUint32( tiffOffset + 4, littleEndian ); // Create the exif object to store the tags: data.exif = new EXIF.ExifMap(); // Parse the tags of the main image directory and retrieve the // offset to the next directory, usually the thumbnail directory: dirOffset = EXIF.parseExifTags( dataView, tiffOffset, tiffOffset + dirOffset, littleEndian, data ); // 尝试读取缩略图 // if ( dirOffset ) { // thumbnailData = {exif: {}}; // dirOffset = EXIF.parseExifTags( // dataView, // tiffOffset, // tiffOffset + dirOffset, // littleEndian, // thumbnailData // ); // // Check for JPEG Thumbnail offset: // if (thumbnailData.exif[0x0201]) { // data.exif.Thumbnail = EXIF.getExifThumbnail( // dataView, // tiffOffset + thumbnailData.exif[0x0201], // thumbnailData.exif[0x0202] // Thumbnail data length // ); // } // } }; ImageMeta.parsers[ 0xffe1 ].push( EXIF.parseExifData ); return EXIF; }); /** * @fileOverview Image */ define('runtime/html5/image',[ 'base', 'runtime/html5/runtime', 'runtime/html5/util' ], function( Base, Html5Runtime, Util ) { var BLANK = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs%3D'; return Html5Runtime.register( 'Image', { // flag: 标记是否被修改过。 modified: false, init: function() { var me = this, img = new Image(); img.onload = function() { me._info = { type: me.type, width: this.width, height: this.height }; // 读取meta信息。 if ( !me._metas && 'image/jpeg' === me.type ) { Util.parseMeta( me._blob, function( error, ret ) { me._metas = ret; me.owner.trigger('load'); }); } else { me.owner.trigger('load'); } }; img.onerror = function() { me.owner.trigger('error'); }; me._img = img; }, loadFromBlob: function( blob ) { var me = this, img = me._img; me._blob = blob; me.type = blob.type; img.src = Util.createObjectURL( blob.getSource() ); me.owner.once( 'load', function() { Util.revokeObjectURL( img.src ); }); }, resize: function( width, height ) { var canvas = this._canvas || (this._canvas = document.createElement('canvas')); this._resize( this._img, canvas, width, height ); this._blob = null; // 没用了,可以删掉了。 this.modified = true; this.owner.trigger( 'complete', 'resize' ); }, crop: function( x, y, w, h, s ) { var cvs = this._canvas || (this._canvas = document.createElement('canvas')), opts = this.options, img = this._img, iw = img.naturalWidth, ih = img.naturalHeight, orientation = this.getOrientation(); s = s || 1; // todo 解决 orientation 的问题。 // values that require 90 degree rotation // if ( ~[ 5, 6, 7, 8 ].indexOf( orientation ) ) { // switch ( orientation ) { // case 6: // tmp = x; // x = y; // y = iw * s - tmp - w; // console.log(ih * s, tmp, w) // break; // } // (w ^= h, h ^= w, w ^= h); // } cvs.width = w; cvs.height = h; opts.preserveHeaders || this._rotate2Orientaion( cvs, orientation ); this._renderImageToCanvas( cvs, img, -x, -y, iw * s, ih * s ); this._blob = null; // 没用了,可以删掉了。 this.modified = true; this.owner.trigger( 'complete', 'crop' ); }, getAsBlob: function( type ) { var blob = this._blob, opts = this.options, canvas; type = type || this.type; // blob需要重新生成。 if ( this.modified || this.type !== type ) { canvas = this._canvas; if ( type === 'image/jpeg' ) { blob = Util.canvasToDataUrl( canvas, type, opts.quality ); if ( opts.preserveHeaders && this._metas && this._metas.imageHead ) { blob = Util.dataURL2ArrayBuffer( blob ); blob = Util.updateImageHead( blob, this._metas.imageHead ); blob = Util.arrayBufferToBlob( blob, type ); return blob; } } else { blob = Util.canvasToDataUrl( canvas, type ); } blob = Util.dataURL2Blob( blob ); } return blob; }, getAsDataUrl: function( type ) { var opts = this.options; type = type || this.type; if ( type === 'image/jpeg' ) { return Util.canvasToDataUrl( this._canvas, type, opts.quality ); } else { return this._canvas.toDataURL( type ); } }, getOrientation: function() { return this._metas && this._metas.exif && this._metas.exif.get('Orientation') || 1; }, info: function( val ) { // setter if ( val ) { this._info = val; return this; } // getter return this._info; }, meta: function( val ) { // setter if ( val ) { this._meta = val; return this; } // getter return this._meta; }, destroy: function() { var canvas = this._canvas; this._img.onload = null; if ( canvas ) { canvas.getContext('2d') .clearRect( 0, 0, canvas.width, canvas.height ); canvas.width = canvas.height = 0; this._canvas = null; } // 释放内存。非常重要,否则释放不了image的内存。 this._img.src = BLANK; this._img = this._blob = null; }, _resize: function( img, cvs, width, height ) { var opts = this.options, naturalWidth = img.width, naturalHeight = img.height, orientation = this.getOrientation(), scale, w, h, x, y; // values that require 90 degree rotation if ( ~[ 5, 6, 7, 8 ].indexOf( orientation ) ) { // 交换width, height的值。 width ^= height; height ^= width; width ^= height; } scale = Math[ opts.crop ? 'max' : 'min' ]( width / naturalWidth, height / naturalHeight ); // 不允许放大。 opts.allowMagnify || (scale = Math.min( 1, scale )); w = naturalWidth * scale; h = naturalHeight * scale; if ( opts.crop ) { cvs.width = width; cvs.height = height; } else { cvs.width = w; cvs.height = h; } x = (cvs.width - w) / 2; y = (cvs.height - h) / 2; opts.preserveHeaders || this._rotate2Orientaion( cvs, orientation ); this._renderImageToCanvas( cvs, img, x, y, w, h ); }, _rotate2Orientaion: function( canvas, orientation ) { var width = canvas.width, height = canvas.height, ctx = canvas.getContext('2d'); switch ( orientation ) { case 5: case 6: case 7: case 8: canvas.width = height; canvas.height = width; break; } switch ( orientation ) { case 2: // horizontal flip ctx.translate( width, 0 ); ctx.scale( -1, 1 ); break; case 3: // 180 rotate left ctx.translate( width, height ); ctx.rotate( Math.PI ); break; case 4: // vertical flip ctx.translate( 0, height ); ctx.scale( 1, -1 ); break; case 5: // vertical flip + 90 rotate right ctx.rotate( 0.5 * Math.PI ); ctx.scale( 1, -1 ); break; case 6: // 90 rotate right ctx.rotate( 0.5 * Math.PI ); ctx.translate( 0, -height ); break; case 7: // horizontal flip + 90 rotate right ctx.rotate( 0.5 * Math.PI ); ctx.translate( width, -height ); ctx.scale( -1, 1 ); break; case 8: // 90 rotate left ctx.rotate( -0.5 * Math.PI ); ctx.translate( -width, 0 ); break; } }, // https://github.com/stomita/ios-imagefile-megapixel/ // blob/master/src/megapix-image.js _renderImageToCanvas: (function() { // 如果不是ios, 不需要这么复杂! if ( !Base.os.ios ) { return function( canvas ) { var args = Base.slice( arguments, 1 ), ctx = canvas.getContext('2d'); ctx.drawImage.apply( ctx, args ); }; } /** * Detecting vertical squash in loaded image. * Fixes a bug which squash image vertically while drawing into * canvas for some images. */ function detectVerticalSquash( img, iw, ih ) { var canvas = document.createElement('canvas'), ctx = canvas.getContext('2d'), sy = 0, ey = ih, py = ih, data, alpha, ratio; canvas.width = 1; canvas.height = ih; ctx.drawImage( img, 0, 0 ); data = ctx.getImageData( 0, 0, 1, ih ).data; // search image edge pixel position in case // it is squashed vertically. while ( py > sy ) { alpha = data[ (py - 1) * 4 + 3 ]; if ( alpha === 0 ) { ey = py; } else { sy = py; } py = (ey + sy) >> 1; } ratio = (py / ih); return (ratio === 0) ? 1 : ratio; } // fix ie7 bug // http://stackoverflow.com/questions/11929099/ // html5-canvas-drawimage-ratio-bug-ios if ( Base.os.ios >= 7 ) { return function( canvas, img, x, y, w, h ) { var iw = img.naturalWidth, ih = img.naturalHeight, vertSquashRatio = detectVerticalSquash( img, iw, ih ); return canvas.getContext('2d').drawImage( img, 0, 0, iw * vertSquashRatio, ih * vertSquashRatio, x, y, w, h ); }; } /** * Detect subsampling in loaded image. * In iOS, larger images than 2M pixels may be * subsampled in rendering. */ function detectSubsampling( img ) { var iw = img.naturalWidth, ih = img.naturalHeight, canvas, ctx; // subsampling may happen overmegapixel image if ( iw * ih > 1024 * 1024 ) { canvas = document.createElement('canvas'); canvas.width = canvas.height = 1; ctx = canvas.getContext('2d'); ctx.drawImage( img, -iw + 1, 0 ); // subsampled image becomes half smaller in rendering size. // check alpha channel value to confirm image is covering // edge pixel or not. if alpha value is 0 // image is not covering, hence subsampled. return ctx.getImageData( 0, 0, 1, 1 ).data[ 3 ] === 0; } else { return false; } } return function( canvas, img, x, y, width, height ) { var iw = img.naturalWidth, ih = img.naturalHeight, ctx = canvas.getContext('2d'), subsampled = detectSubsampling( img ), doSquash = this.type === 'image/jpeg', d = 1024, sy = 0, dy = 0, tmpCanvas, tmpCtx, vertSquashRatio, dw, dh, sx, dx; if ( subsampled ) { iw /= 2; ih /= 2; } ctx.save(); tmpCanvas = document.createElement('canvas'); tmpCanvas.width = tmpCanvas.height = d; tmpCtx = tmpCanvas.getContext('2d'); vertSquashRatio = doSquash ? detectVerticalSquash( img, iw, ih ) : 1; dw = Math.ceil( d * width / iw ); dh = Math.ceil( d * height / ih / vertSquashRatio ); while ( sy < ih ) { sx = 0; dx = 0; while ( sx < iw ) { tmpCtx.clearRect( 0, 0, d, d ); tmpCtx.drawImage( img, -sx, -sy ); ctx.drawImage( tmpCanvas, 0, 0, d, d, x + dx, y + dy, dw, dh ); sx += d; dx += dw; } sy += d; dy += dh; } ctx.restore(); tmpCanvas = tmpCtx = null; }; })() }); }); /** * @fileOverview Transport * @todo 支持chunked传输,优势: * 可以将大文件分成小块,挨个传输,可以提高大文件成功率,当失败的时候,也只需要重传那小部分, * 而不需要重头再传一次。另外断点续传也需要用chunked方式。 */ define('runtime/html5/transport',[ 'base', 'runtime/html5/runtime' ], function( Base, Html5Runtime ) { var noop = Base.noop, $ = Base.$; return Html5Runtime.register( 'Transport', { init: function() { this._status = 0; this._response = null; }, send: function() { var owner = this.owner, opts = this.options, xhr = this._initAjax(), blob = owner._blob, server = opts.server, formData, binary, fr; if ( opts.sendAsBinary ) { server += (/\?/.test( server ) ? '&' : '?') + $.param( owner._formData ); binary = blob.getSource(); } else { formData = new FormData(); $.each( owner._formData, function( k, v ) { formData.append( k, v ); }); formData.append( opts.fileVal, blob.getSource(), opts.filename || owner._formData.name || '' ); } if ( opts.withCredentials && 'withCredentials' in xhr ) { xhr.open( opts.method, server, true ); xhr.withCredentials = true; } else { xhr.open( opts.method, server ); } this._setRequestHeader( xhr, opts.headers ); if ( binary ) { // 强制设置成 content-type 为文件流。 xhr.overrideMimeType && xhr.overrideMimeType('application/octet-stream'); // android直接发送blob会导致服务端接收到的是空文件。 // bug详情。 // https://code.google.com/p/android/issues/detail?id=39882 // 所以先用fileReader读取出来再通过arraybuffer的方式发送。 if ( Base.os.android ) { fr = new FileReader(); fr.onload = function() { xhr.send( this.result ); fr = fr.onload = null; }; fr.readAsArrayBuffer( binary ); } else { xhr.send( binary ); } } else { xhr.send( formData ); } }, getResponse: function() { return this._response; }, getResponseAsJson: function() { return this._parseJson( this._response ); }, getStatus: function() { return this._status; }, abort: function() { var xhr = this._xhr; if ( xhr ) { xhr.upload.onprogress = noop; xhr.onreadystatechange = noop; xhr.abort(); this._xhr = xhr = null; } }, destroy: function() { this.abort(); }, _initAjax: function() { var me = this, xhr = new XMLHttpRequest(), opts = this.options; if ( opts.withCredentials && !('withCredentials' in xhr) && typeof XDomainRequest !== 'undefined' ) { xhr = new XDomainRequest(); } xhr.upload.onprogress = function( e ) { var percentage = 0; if ( e.lengthComputable ) { percentage = e.loaded / e.total; } return me.trigger( 'progress', percentage ); }; xhr.onreadystatechange = function() { if ( xhr.readyState !== 4 ) { return; } xhr.upload.onprogress = noop; xhr.onreadystatechange = noop; me._xhr = null; me._status = xhr.status; if ( xhr.status >= 200 && xhr.status < 300 ) { me._response = xhr.responseText; return me.trigger('load'); } else if ( xhr.status >= 500 && xhr.status < 600 ) { me._response = xhr.responseText; return me.trigger( 'error', 'server' ); } return me.trigger( 'error', me._status ? 'http' : 'abort' ); }; me._xhr = xhr; return xhr; }, _setRequestHeader: function( xhr, headers ) { $.each( headers, function( key, val ) { xhr.setRequestHeader( key, val ); }); }, _parseJson: function( str ) { var json; try { json = JSON.parse( str ); } catch ( ex ) { json = {}; } return json; } }); }); /** * @fileOverview 只有html5实现的文件版本。 */ define('preset/html5only',[ 'base', // widgets 'widgets/filednd', 'widgets/filepaste', 'widgets/filepicker', 'widgets/image', 'widgets/queue', 'widgets/runtime', 'widgets/upload', 'widgets/validator', // runtimes // html5 'runtime/html5/blob', 'runtime/html5/dnd', 'runtime/html5/filepaste', 'runtime/html5/filepicker', 'runtime/html5/imagemeta/exif', 'runtime/html5/image', 'runtime/html5/transport' ], function( Base ) { return Base; }); define('webuploader',[ 'preset/html5only' ], function( preset ) { return preset; }); return require('webuploader'); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/webuploader/webuploader.js ================================================ /*! WebUploader 0.1.5 */ /** * @fileOverview 让内部各个部件的代码可以用[amd](https://github.com/amdjs/amdjs-api/wiki/AMD)模块定义方式组织起来。 * * AMD API 内部的简单不完全实现,请忽略。只有当WebUploader被合并成一个文件的时候才会引入。 */ (function( root, factory ) { var modules = {}, // 内部require, 简单不完全实现。 // https://github.com/amdjs/amdjs-api/wiki/require _require = function( deps, callback ) { var args, len, i; // 如果deps不是数组,则直接返回指定module if ( typeof deps === 'string' ) { return getModule( deps ); } else { args = []; for( len = deps.length, i = 0; i < len; i++ ) { args.push( getModule( deps[ i ] ) ); } return callback.apply( null, args ); } }, // 内部define,暂时不支持不指定id. _define = function( id, deps, factory ) { if ( arguments.length === 2 ) { factory = deps; deps = null; } _require( deps || [], function() { setModule( id, factory, arguments ); }); }, // 设置module, 兼容CommonJs写法。 setModule = function( id, factory, args ) { var module = { exports: factory }, returned; if ( typeof factory === 'function' ) { args.length || (args = [ _require, module.exports, module ]); returned = factory.apply( null, args ); returned !== undefined && (module.exports = returned); } modules[ id ] = module.exports; }, // 根据id获取module getModule = function( id ) { var module = modules[ id ] || root[ id ]; if ( !module ) { throw new Error( '`' + id + '` is undefined' ); } return module; }, // 将所有modules,将路径ids装换成对象。 exportsTo = function( obj ) { var key, host, parts, part, last, ucFirst; // make the first character upper case. ucFirst = function( str ) { return str && (str.charAt( 0 ).toUpperCase() + str.substr( 1 )); }; for ( key in modules ) { host = obj; if ( !modules.hasOwnProperty( key ) ) { continue; } parts = key.split('/'); last = ucFirst( parts.pop() ); while( (part = ucFirst( parts.shift() )) ) { host[ part ] = host[ part ] || {}; host = host[ part ]; } host[ last ] = modules[ key ]; } return obj; }, makeExport = function( dollar ) { root.__dollar = dollar; // exports every module. return exportsTo( factory( root, _define, _require ) ); }, origin; if ( typeof module === 'object' && typeof module.exports === 'object' ) { // For CommonJS and CommonJS-like environments where a proper window is present, module.exports = makeExport(); } else if ( typeof define === 'function' && define.amd ) { // Allow using this built library as an AMD module // in another project. That other project will only // see this AMD call, not the internal modules in // the closure below. define([ 'jquery' ], makeExport ); } else { // Browser globals case. Just assign the // result to a property on the global. origin = root.WebUploader; root.WebUploader = makeExport(); root.WebUploader.noConflict = function() { root.WebUploader = origin; }; } })( window, function( window, define, require ) { /** * @fileOverview jQuery or Zepto */ define('dollar-third',[],function() { var $ = window.__dollar || window.jQuery || window.Zepto; if ( !$ ) { throw new Error('jQuery or Zepto not found!'); } return $; }); /** * @fileOverview Dom 操作相关 */ define('dollar',[ 'dollar-third' ], function( _ ) { return _; }); /** * @fileOverview 使用jQuery的Promise */ define('promise-third',[ 'dollar' ], function( $ ) { return { Deferred: $.Deferred, when: $.when, isPromise: function( anything ) { return anything && typeof anything.then === 'function'; } }; }); /** * @fileOverview Promise/A+ */ define('promise',[ 'promise-third' ], function( _ ) { return _; }); /** * @fileOverview 基础类方法。 */ /** * Web Uploader内部类的详细说明,以下提及的功能类,都可以在`WebUploader`这个变量中访问到。 * * As you know, Web Uploader的每个文件都是用过[AMD](https://github.com/amdjs/amdjs-api/wiki/AMD)规范中的`define`组织起来的, 每个Module都会有个module id. * 默认module id为该文件的路径,而此路径将会转化成名字空间存放在WebUploader中。如: * * * module `base`:WebUploader.Base * * module `file`: WebUploader.File * * module `lib/dnd`: WebUploader.Lib.Dnd * * module `runtime/html5/dnd`: WebUploader.Runtime.Html5.Dnd * * * 以下文档中对类的使用可能省略掉了`WebUploader`前缀。 * @module WebUploader * @title WebUploader API文档 */ define('base',[ 'dollar', 'promise' ], function( $, promise ) { var noop = function() {}, call = Function.call; // http://jsperf.com/uncurrythis // 反科里化 function uncurryThis( fn ) { return function() { return call.apply( fn, arguments ); }; } function bindFn( fn, context ) { return function() { return fn.apply( context, arguments ); }; } function createObject( proto ) { var f; if ( Object.create ) { return Object.create( proto ); } else { f = function() {}; f.prototype = proto; return new f(); } } /** * 基础类,提供一些简单常用的方法。 * @class Base */ return { /** * @property {String} version 当前版本号。 */ version: '0.1.5', /** * @property {jQuery|Zepto} $ 引用依赖的jQuery或者Zepto对象。 */ $: $, Deferred: promise.Deferred, isPromise: promise.isPromise, when: promise.when, /** * @description 简单的浏览器检查结果。 * * * `webkit` webkit版本号,如果浏览器为非webkit内核,此属性为`undefined`。 * * `chrome` chrome浏览器版本号,如果浏览器为chrome,此属性为`undefined`。 * * `ie` ie浏览器版本号,如果浏览器为非ie,此属性为`undefined`。**暂不支持ie10+** * * `firefox` firefox浏览器版本号,如果浏览器为非firefox,此属性为`undefined`。 * * `safari` safari浏览器版本号,如果浏览器为非safari,此属性为`undefined`。 * * `opera` opera浏览器版本号,如果浏览器为非opera,此属性为`undefined`。 * * @property {Object} [browser] */ browser: (function( ua ) { var ret = {}, webkit = ua.match( /WebKit\/([\d.]+)/ ), chrome = ua.match( /Chrome\/([\d.]+)/ ) || ua.match( /CriOS\/([\d.]+)/ ), ie = ua.match( /MSIE\s([\d\.]+)/ ) || ua.match( /(?:trident)(?:.*rv:([\w.]+))?/i ), firefox = ua.match( /Firefox\/([\d.]+)/ ), safari = ua.match( /Safari\/([\d.]+)/ ), opera = ua.match( /OPR\/([\d.]+)/ ); webkit && (ret.webkit = parseFloat( webkit[ 1 ] )); chrome && (ret.chrome = parseFloat( chrome[ 1 ] )); ie && (ret.ie = parseFloat( ie[ 1 ] )); firefox && (ret.firefox = parseFloat( firefox[ 1 ] )); safari && (ret.safari = parseFloat( safari[ 1 ] )); opera && (ret.opera = parseFloat( opera[ 1 ] )); return ret; })( navigator.userAgent ), /** * @description 操作系统检查结果。 * * * `android` 如果在android浏览器环境下,此值为对应的android版本号,否则为`undefined`。 * * `ios` 如果在ios浏览器环境下,此值为对应的ios版本号,否则为`undefined`。 * @property {Object} [os] */ os: (function( ua ) { var ret = {}, // osx = !!ua.match( /\(Macintosh\; Intel / ), android = ua.match( /(?:Android);?[\s\/]+([\d.]+)?/ ), ios = ua.match( /(?:iPad|iPod|iPhone).*OS\s([\d_]+)/ ); // osx && (ret.osx = true); android && (ret.android = parseFloat( android[ 1 ] )); ios && (ret.ios = parseFloat( ios[ 1 ].replace( /_/g, '.' ) )); return ret; })( navigator.userAgent ), /** * 实现类与类之间的继承。 * @method inherits * @grammar Base.inherits( super ) => child * @grammar Base.inherits( super, protos ) => child * @grammar Base.inherits( super, protos, statics ) => child * @param {Class} super 父类 * @param {Object | Function} [protos] 子类或者对象。如果对象中包含constructor,子类将是用此属性值。 * @param {Function} [protos.constructor] 子类构造器,不指定的话将创建个临时的直接执行父类构造器的方法。 * @param {Object} [statics] 静态属性或方法。 * @return {Class} 返回子类。 * @example * function Person() { * console.log( 'Super' ); * } * Person.prototype.hello = function() { * console.log( 'hello' ); * }; * * var Manager = Base.inherits( Person, { * world: function() { * console.log( 'World' ); * } * }); * * // 因为没有指定构造器,父类的构造器将会执行。 * var instance = new Manager(); // => Super * * // 继承子父类的方法 * instance.hello(); // => hello * instance.world(); // => World * * // 子类的__super__属性指向父类 * console.log( Manager.__super__ === Person ); // => true */ inherits: function( Super, protos, staticProtos ) { var child; if ( typeof protos === 'function' ) { child = protos; protos = null; } else if ( protos && protos.hasOwnProperty('constructor') ) { child = protos.constructor; } else { child = function() { return Super.apply( this, arguments ); }; } // 复制静态方法 $.extend( true, child, Super, staticProtos || {} ); /* jshint camelcase: false */ // 让子类的__super__属性指向父类。 child.__super__ = Super.prototype; // 构建原型,添加原型方法或属性。 // 暂时用Object.create实现。 child.prototype = createObject( Super.prototype ); protos && $.extend( true, child.prototype, protos ); return child; }, /** * 一个不做任何事情的方法。可以用来赋值给默认的callback. * @method noop */ noop: noop, /** * 返回一个新的方法,此方法将已指定的`context`来执行。 * @grammar Base.bindFn( fn, context ) => Function * @method bindFn * @example * var doSomething = function() { * console.log( this.name ); * }, * obj = { * name: 'Object Name' * }, * aliasFn = Base.bind( doSomething, obj ); * * aliasFn(); // => Object Name * */ bindFn: bindFn, /** * 引用Console.log如果存在的话,否则引用一个[空函数noop](#WebUploader:Base.noop)。 * @grammar Base.log( args... ) => undefined * @method log */ log: (function() { if ( window.console ) { return bindFn( console.log, console ); } return noop; })(), nextTick: (function() { return function( cb ) { setTimeout( cb, 1 ); }; // @bug 当浏览器不在当前窗口时就停了。 // var next = window.requestAnimationFrame || // window.webkitRequestAnimationFrame || // window.mozRequestAnimationFrame || // function( cb ) { // window.setTimeout( cb, 1000 / 60 ); // }; // // fix: Uncaught TypeError: Illegal invocation // return bindFn( next, window ); })(), /** * 被[uncurrythis](http://www.2ality.com/2011/11/uncurrying-this.html)的数组slice方法。 * 将用来将非数组对象转化成数组对象。 * @grammar Base.slice( target, start[, end] ) => Array * @method slice * @example * function doSomthing() { * var args = Base.slice( arguments, 1 ); * console.log( args ); * } * * doSomthing( 'ignored', 'arg2', 'arg3' ); // => Array ["arg2", "arg3"] */ slice: uncurryThis( [].slice ), /** * 生成唯一的ID * @method guid * @grammar Base.guid() => String * @grammar Base.guid( prefx ) => String */ guid: (function() { var counter = 0; return function( prefix ) { var guid = (+new Date()).toString( 32 ), i = 0; for ( ; i < 5; i++ ) { guid += Math.floor( Math.random() * 65535 ).toString( 32 ); } return (prefix || 'wu_') + guid + (counter++).toString( 32 ); }; })(), /** * 格式化文件大小, 输出成带单位的字符串 * @method formatSize * @grammar Base.formatSize( size ) => String * @grammar Base.formatSize( size, pointLength ) => String * @grammar Base.formatSize( size, pointLength, units ) => String * @param {Number} size 文件大小 * @param {Number} [pointLength=2] 精确到的小数点数。 * @param {Array} [units=[ 'B', 'K', 'M', 'G', 'TB' ]] 单位数组。从字节,到千字节,一直往上指定。如果单位数组里面只指定了到了K(千字节),同时文件大小大于M, 此方法的输出将还是显示成多少K. * @example * console.log( Base.formatSize( 100 ) ); // => 100B * console.log( Base.formatSize( 1024 ) ); // => 1.00K * console.log( Base.formatSize( 1024, 0 ) ); // => 1K * console.log( Base.formatSize( 1024 * 1024 ) ); // => 1.00M * console.log( Base.formatSize( 1024 * 1024 * 1024 ) ); // => 1.00G * console.log( Base.formatSize( 1024 * 1024 * 1024, 0, ['B', 'KB', 'MB'] ) ); // => 1024MB */ formatSize: function( size, pointLength, units ) { var unit; units = units || [ 'B', 'K', 'M', 'G', 'TB' ]; while ( (unit = units.shift()) && size > 1024 ) { size = size / 1024; } return (unit === 'B' ? size : size.toFixed( pointLength || 2 )) + unit; } }; }); /** * 事件处理类,可以独立使用,也可以扩展给对象使用。 * @fileOverview Mediator */ define('mediator',[ 'base' ], function( Base ) { var $ = Base.$, slice = [].slice, separator = /\s+/, protos; // 根据条件过滤出事件handlers. function findHandlers( arr, name, callback, context ) { return $.grep( arr, function( handler ) { return handler && (!name || handler.e === name) && (!callback || handler.cb === callback || handler.cb._cb === callback) && (!context || handler.ctx === context); }); } function eachEvent( events, callback, iterator ) { // 不支持对象,只支持多个event用空格隔开 $.each( (events || '').split( separator ), function( _, key ) { iterator( key, callback ); }); } function triggerHanders( events, args ) { var stoped = false, i = -1, len = events.length, handler; while ( ++i < len ) { handler = events[ i ]; if ( handler.cb.apply( handler.ctx2, args ) === false ) { stoped = true; break; } } return !stoped; } protos = { /** * 绑定事件。 * * `callback`方法在执行时,arguments将会来源于trigger的时候携带的参数。如 * ```javascript * var obj = {}; * * // 使得obj有事件行为 * Mediator.installTo( obj ); * * obj.on( 'testa', function( arg1, arg2 ) { * console.log( arg1, arg2 ); // => 'arg1', 'arg2' * }); * * obj.trigger( 'testa', 'arg1', 'arg2' ); * ``` * * 如果`callback`中,某一个方法`return false`了,则后续的其他`callback`都不会被执行到。 * 切会影响到`trigger`方法的返回值,为`false`。 * * `on`还可以用来添加一个特殊事件`all`, 这样所有的事件触发都会响应到。同时此类`callback`中的arguments有一个不同处, * 就是第一个参数为`type`,记录当前是什么事件在触发。此类`callback`的优先级比脚低,会再正常`callback`执行完后触发。 * ```javascript * obj.on( 'all', function( type, arg1, arg2 ) { * console.log( type, arg1, arg2 ); // => 'testa', 'arg1', 'arg2' * }); * ``` * * @method on * @grammar on( name, callback[, context] ) => self * @param {String} name 事件名,支持多个事件用空格隔开 * @param {Function} callback 事件处理器 * @param {Object} [context] 事件处理器的上下文。 * @return {self} 返回自身,方便链式 * @chainable * @class Mediator */ on: function( name, callback, context ) { var me = this, set; if ( !callback ) { return this; } set = this._events || (this._events = []); eachEvent( name, callback, function( name, callback ) { var handler = { e: name }; handler.cb = callback; handler.ctx = context; handler.ctx2 = context || me; handler.id = set.length; set.push( handler ); }); return this; }, /** * 绑定事件,且当handler执行完后,自动解除绑定。 * @method once * @grammar once( name, callback[, context] ) => self * @param {String} name 事件名 * @param {Function} callback 事件处理器 * @param {Object} [context] 事件处理器的上下文。 * @return {self} 返回自身,方便链式 * @chainable */ once: function( name, callback, context ) { var me = this; if ( !callback ) { return me; } eachEvent( name, callback, function( name, callback ) { var once = function() { me.off( name, once ); return callback.apply( context || me, arguments ); }; once._cb = callback; me.on( name, once, context ); }); return me; }, /** * 解除事件绑定 * @method off * @grammar off( [name[, callback[, context] ] ] ) => self * @param {String} [name] 事件名 * @param {Function} [callback] 事件处理器 * @param {Object} [context] 事件处理器的上下文。 * @return {self} 返回自身,方便链式 * @chainable */ off: function( name, cb, ctx ) { var events = this._events; if ( !events ) { return this; } if ( !name && !cb && !ctx ) { this._events = []; return this; } eachEvent( name, cb, function( name, cb ) { $.each( findHandlers( events, name, cb, ctx ), function() { delete events[ this.id ]; }); }); return this; }, /** * 触发事件 * @method trigger * @grammar trigger( name[, args...] ) => self * @param {String} type 事件名 * @param {*} [...] 任意参数 * @return {Boolean} 如果handler中return false了,则返回false, 否则返回true */ trigger: function( type ) { var args, events, allEvents; if ( !this._events || !type ) { return this; } args = slice.call( arguments, 1 ); events = findHandlers( this._events, type ); allEvents = findHandlers( this._events, 'all' ); return triggerHanders( events, args ) && triggerHanders( allEvents, arguments ); } }; /** * 中介者,它本身是个单例,但可以通过[installTo](#WebUploader:Mediator:installTo)方法,使任何对象具备事件行为。 * 主要目的是负责模块与模块之间的合作,降低耦合度。 * * @class Mediator */ return $.extend({ /** * 可以通过这个接口,使任何对象具备事件功能。 * @method installTo * @param {Object} obj 需要具备事件行为的对象。 * @return {Object} 返回obj. */ installTo: function( obj ) { return $.extend( obj, protos ); } }, protos ); }); /** * @fileOverview Uploader上传类 */ define('uploader',[ 'base', 'mediator' ], function( Base, Mediator ) { var $ = Base.$; /** * 上传入口类。 * @class Uploader * @constructor * @grammar new Uploader( opts ) => Uploader * @example * var uploader = WebUploader.Uploader({ * swf: 'path_of_swf/Uploader.swf', * * // 开起分片上传。 * chunked: true * }); */ function Uploader( opts ) { this.options = $.extend( true, {}, Uploader.options, opts ); this._init( this.options ); } // default Options // widgets中有相应扩展 Uploader.options = {}; Mediator.installTo( Uploader.prototype ); // 批量添加纯命令式方法。 $.each({ upload: 'start-upload', stop: 'stop-upload', getFile: 'get-file', getFiles: 'get-files', addFile: 'add-file', addFiles: 'add-file', sort: 'sort-files', removeFile: 'remove-file', cancelFile: 'cancel-file', skipFile: 'skip-file', retry: 'retry', isInProgress: 'is-in-progress', makeThumb: 'make-thumb', md5File: 'md5-file', getDimension: 'get-dimension', addButton: 'add-btn', predictRuntimeType: 'predict-runtime-type', refresh: 'refresh', disable: 'disable', enable: 'enable', reset: 'reset' }, function( fn, command ) { Uploader.prototype[ fn ] = function() { return this.request( command, arguments ); }; }); $.extend( Uploader.prototype, { state: 'pending', _init: function( opts ) { var me = this; me.request( 'init', opts, function() { me.state = 'ready'; me.trigger('ready'); }); }, /** * 获取或者设置Uploader配置项。 * @method option * @grammar option( key ) => * * @grammar option( key, val ) => self * @example * * // 初始状态图片上传前不会压缩 * var uploader = new WebUploader.Uploader({ * compress: null; * }); * * // 修改后图片上传前,尝试将图片压缩到1600 * 1600 * uploader.option( 'compress', { * width: 1600, * height: 1600 * }); */ option: function( key, val ) { var opts = this.options; // setter if ( arguments.length > 1 ) { if ( $.isPlainObject( val ) && $.isPlainObject( opts[ key ] ) ) { $.extend( opts[ key ], val ); } else { opts[ key ] = val; } } else { // getter return key ? opts[ key ] : opts; } }, /** * 获取文件统计信息。返回一个包含一下信息的对象。 * * `successNum` 上传成功的文件数 * * `progressNum` 上传中的文件数 * * `cancelNum` 被删除的文件数 * * `invalidNum` 无效的文件数 * * `uploadFailNum` 上传失败的文件数 * * `queueNum` 还在队列中的文件数 * * `interruptNum` 被暂停的文件数 * @method getStats * @grammar getStats() => Object */ getStats: function() { // return this._mgr.getStats.apply( this._mgr, arguments ); var stats = this.request('get-stats'); return stats ? { successNum: stats.numOfSuccess, progressNum: stats.numOfProgress, // who care? // queueFailNum: 0, cancelNum: stats.numOfCancel, invalidNum: stats.numOfInvalid, uploadFailNum: stats.numOfUploadFailed, queueNum: stats.numOfQueue, interruptNum: stats.numofInterrupt } : {}; }, // 需要重写此方法来来支持opts.onEvent和instance.onEvent的处理器 trigger: function( type/*, args...*/ ) { var args = [].slice.call( arguments, 1 ), opts = this.options, name = 'on' + type.substring( 0, 1 ).toUpperCase() + type.substring( 1 ); if ( // 调用通过on方法注册的handler. Mediator.trigger.apply( this, arguments ) === false || // 调用opts.onEvent $.isFunction( opts[ name ] ) && opts[ name ].apply( this, args ) === false || // 调用this.onEvent $.isFunction( this[ name ] ) && this[ name ].apply( this, args ) === false || // 广播所有uploader的事件。 Mediator.trigger.apply( Mediator, [ this, type ].concat( args ) ) === false ) { return false; } return true; }, /** * 销毁 webuploader 实例 * @method destroy * @grammar destroy() => undefined */ destroy: function() { this.request( 'destroy', arguments ); this.off(); }, // widgets/widget.js将补充此方法的详细文档。 request: Base.noop }); /** * 创建Uploader实例,等同于new Uploader( opts ); * @method create * @class Base * @static * @grammar Base.create( opts ) => Uploader */ Base.create = Uploader.create = function( opts ) { return new Uploader( opts ); }; // 暴露Uploader,可以通过它来扩展业务逻辑。 Base.Uploader = Uploader; return Uploader; }); /** * @fileOverview Runtime管理器,负责Runtime的选择, 连接 */ define('runtime/runtime',[ 'base', 'mediator' ], function( Base, Mediator ) { var $ = Base.$, factories = {}, // 获取对象的第一个key getFirstKey = function( obj ) { for ( var key in obj ) { if ( obj.hasOwnProperty( key ) ) { return key; } } return null; }; // 接口类。 function Runtime( options ) { this.options = $.extend({ container: document.body }, options ); this.uid = Base.guid('rt_'); } $.extend( Runtime.prototype, { getContainer: function() { var opts = this.options, parent, container; if ( this._container ) { return this._container; } parent = $( opts.container || document.body ); container = $( document.createElement('div') ); container.attr( 'id', 'rt_' + this.uid ); container.css({ position: 'absolute', top: '0px', left: '0px', width: '1px', height: '1px', overflow: 'hidden' }); parent.append( container ); parent.addClass('webuploader-container'); this._container = container; this._parent = parent; return container; }, init: Base.noop, exec: Base.noop, destroy: function() { this._container && this._container.remove(); this._parent && this._parent.removeClass('webuploader-container'); this.off(); } }); Runtime.orders = 'html5,flash'; /** * 添加Runtime实现。 * @param {String} type 类型 * @param {Runtime} factory 具体Runtime实现。 */ Runtime.addRuntime = function( type, factory ) { factories[ type ] = factory; }; Runtime.hasRuntime = function( type ) { return !!(type ? factories[ type ] : getFirstKey( factories )); }; Runtime.create = function( opts, orders ) { var type, runtime; orders = orders || Runtime.orders; $.each( orders.split( /\s*,\s*/g ), function() { if ( factories[ this ] ) { type = this; return false; } }); type = type || getFirstKey( factories ); if ( !type ) { throw new Error('Runtime Error'); } runtime = new factories[ type ]( opts ); return runtime; }; Mediator.installTo( Runtime.prototype ); return Runtime; }); /** * @fileOverview Runtime管理器,负责Runtime的选择, 连接 */ define('runtime/client',[ 'base', 'mediator', 'runtime/runtime' ], function( Base, Mediator, Runtime ) { var cache; cache = (function() { var obj = {}; return { add: function( runtime ) { obj[ runtime.uid ] = runtime; }, get: function( ruid, standalone ) { var i; if ( ruid ) { return obj[ ruid ]; } for ( i in obj ) { // 有些类型不能重用,比如filepicker. if ( standalone && obj[ i ].__standalone ) { continue; } return obj[ i ]; } return null; }, remove: function( runtime ) { delete obj[ runtime.uid ]; } }; })(); function RuntimeClient( component, standalone ) { var deferred = Base.Deferred(), runtime; this.uid = Base.guid('client_'); // 允许runtime没有初始化之前,注册一些方法在初始化后执行。 this.runtimeReady = function( cb ) { return deferred.done( cb ); }; this.connectRuntime = function( opts, cb ) { // already connected. if ( runtime ) { throw new Error('already connected!'); } deferred.done( cb ); if ( typeof opts === 'string' && cache.get( opts ) ) { runtime = cache.get( opts ); } // 像filePicker只能独立存在,不能公用。 runtime = runtime || cache.get( null, standalone ); // 需要创建 if ( !runtime ) { runtime = Runtime.create( opts, opts.runtimeOrder ); runtime.__promise = deferred.promise(); runtime.once( 'ready', deferred.resolve ); runtime.init(); cache.add( runtime ); runtime.__client = 1; } else { // 来自cache Base.$.extend( runtime.options, opts ); runtime.__promise.then( deferred.resolve ); runtime.__client++; } standalone && (runtime.__standalone = standalone); return runtime; }; this.getRuntime = function() { return runtime; }; this.disconnectRuntime = function() { if ( !runtime ) { return; } runtime.__client--; if ( runtime.__client <= 0 ) { cache.remove( runtime ); delete runtime.__promise; runtime.destroy(); } runtime = null; }; this.exec = function() { if ( !runtime ) { return; } var args = Base.slice( arguments ); component && args.unshift( component ); return runtime.exec.apply( this, args ); }; this.getRuid = function() { return runtime && runtime.uid; }; this.destroy = (function( destroy ) { return function() { destroy && destroy.apply( this, arguments ); this.trigger('destroy'); this.off(); this.exec('destroy'); this.disconnectRuntime(); }; })( this.destroy ); } Mediator.installTo( RuntimeClient.prototype ); return RuntimeClient; }); /** * @fileOverview 错误信息 */ define('lib/dnd',[ 'base', 'mediator', 'runtime/client' ], function( Base, Mediator, RuntimeClent ) { var $ = Base.$; function DragAndDrop( opts ) { opts = this.options = $.extend({}, DragAndDrop.options, opts ); opts.container = $( opts.container ); if ( !opts.container.length ) { return; } RuntimeClent.call( this, 'DragAndDrop' ); } DragAndDrop.options = { accept: null, disableGlobalDnd: false }; Base.inherits( RuntimeClent, { constructor: DragAndDrop, init: function() { var me = this; me.connectRuntime( me.options, function() { me.exec('init'); me.trigger('ready'); }); } }); Mediator.installTo( DragAndDrop.prototype ); return DragAndDrop; }); /** * @fileOverview 组件基类。 */ define('widgets/widget',[ 'base', 'uploader' ], function( Base, Uploader ) { var $ = Base.$, _init = Uploader.prototype._init, _destroy = Uploader.prototype.destroy, IGNORE = {}, widgetClass = []; function isArrayLike( obj ) { if ( !obj ) { return false; } var length = obj.length, type = $.type( obj ); if ( obj.nodeType === 1 && length ) { return true; } return type === 'array' || type !== 'function' && type !== 'string' && (length === 0 || typeof length === 'number' && length > 0 && (length - 1) in obj); } function Widget( uploader ) { this.owner = uploader; this.options = uploader.options; } $.extend( Widget.prototype, { init: Base.noop, // 类Backbone的事件监听声明,监听uploader实例上的事件 // widget直接无法监听事件,事件只能通过uploader来传递 invoke: function( apiName, args ) { /* { 'make-thumb': 'makeThumb' } */ var map = this.responseMap; // 如果无API响应声明则忽略 if ( !map || !(apiName in map) || !(map[ apiName ] in this) || !$.isFunction( this[ map[ apiName ] ] ) ) { return IGNORE; } return this[ map[ apiName ] ].apply( this, args ); }, /** * 发送命令。当传入`callback`或者`handler`中返回`promise`时。返回一个当所有`handler`中的promise都完成后完成的新`promise`。 * @method request * @grammar request( command, args ) => * | Promise * @grammar request( command, args, callback ) => Promise * @for Uploader */ request: function() { return this.owner.request.apply( this.owner, arguments ); } }); // 扩展Uploader. $.extend( Uploader.prototype, { /** * @property {String | Array} [disableWidgets=undefined] * @namespace options * @for Uploader * @description 默认所有 Uploader.register 了的 widget 都会被加载,如果禁用某一部分,请通过此 option 指定黑名单。 */ // 覆写_init用来初始化widgets _init: function() { var me = this, widgets = me._widgets = [], deactives = me.options.disableWidgets || ''; $.each( widgetClass, function( _, klass ) { (!deactives || !~deactives.indexOf( klass._name )) && widgets.push( new klass( me ) ); }); return _init.apply( me, arguments ); }, request: function( apiName, args, callback ) { var i = 0, widgets = this._widgets, len = widgets && widgets.length, rlts = [], dfds = [], widget, rlt, promise, key; args = isArrayLike( args ) ? args : [ args ]; for ( ; i < len; i++ ) { widget = widgets[ i ]; rlt = widget.invoke( apiName, args ); if ( rlt !== IGNORE ) { // Deferred对象 if ( Base.isPromise( rlt ) ) { dfds.push( rlt ); } else { rlts.push( rlt ); } } } // 如果有callback,则用异步方式。 if ( callback || dfds.length ) { promise = Base.when.apply( Base, dfds ); key = promise.pipe ? 'pipe' : 'then'; // 很重要不能删除。删除了会死循环。 // 保证执行顺序。让callback总是在下一个 tick 中执行。 return promise[ key ](function() { var deferred = Base.Deferred(), args = arguments; if ( args.length === 1 ) { args = args[ 0 ]; } setTimeout(function() { deferred.resolve( args ); }, 1 ); return deferred.promise(); })[ callback ? key : 'done' ]( callback || Base.noop ); } else { return rlts[ 0 ]; } }, destroy: function() { _destroy.apply( this, arguments ); this._widgets = null; } }); /** * 添加组件 * @grammar Uploader.register(proto); * @grammar Uploader.register(map, proto); * @param {object} responseMap API 名称与函数实现的映射 * @param {object} proto 组件原型,构造函数通过 constructor 属性定义 * @method Uploader.register * @for Uploader * @example * Uploader.register({ * 'make-thumb': 'makeThumb' * }, { * init: function( options ) {}, * makeThumb: function() {} * }); * * Uploader.register({ * 'make-thumb': function() { * * } * }); */ Uploader.register = Widget.register = function( responseMap, widgetProto ) { var map = { init: 'init', destroy: 'destroy', name: 'anonymous' }, klass; if ( arguments.length === 1 ) { widgetProto = responseMap; // 自动生成 map 表。 $.each(widgetProto, function(key) { if ( key[0] === '_' || key === 'name' ) { key === 'name' && (map.name = widgetProto.name); return; } map[key.replace(/[A-Z]/g, '-$&').toLowerCase()] = key; }); } else { map = $.extend( map, responseMap ); } widgetProto.responseMap = map; klass = Base.inherits( Widget, widgetProto ); klass._name = map.name; widgetClass.push( klass ); return klass; }; /** * 删除插件,只有在注册时指定了名字的才能被删除。 * @grammar Uploader.unRegister(name); * @param {string} name 组件名字 * @method Uploader.unRegister * @for Uploader * @example * * Uploader.register({ * name: 'custom', * * 'make-thumb': function() { * * } * }); * * Uploader.unRegister('custom'); */ Uploader.unRegister = Widget.unRegister = function( name ) { if ( !name || name === 'anonymous' ) { return; } // 删除指定的插件。 for ( var i = widgetClass.length; i--; ) { if ( widgetClass[i]._name === name ) { widgetClass.splice(i, 1) } } }; return Widget; }); /** * @fileOverview DragAndDrop Widget。 */ define('widgets/filednd',[ 'base', 'uploader', 'lib/dnd', 'widgets/widget' ], function( Base, Uploader, Dnd ) { var $ = Base.$; Uploader.options.dnd = ''; /** * @property {Selector} [dnd=undefined] 指定Drag And Drop拖拽的容器,如果不指定,则不启动。 * @namespace options * @for Uploader */ /** * @property {Selector} [disableGlobalDnd=false] 是否禁掉整个页面的拖拽功能,如果不禁用,图片拖进来的时候会默认被浏览器打开。 * @namespace options * @for Uploader */ /** * @event dndAccept * @param {DataTransferItemList} items DataTransferItem * @description 阻止此事件可以拒绝某些类型的文件拖入进来。目前只有 chrome 提供这样的 API,且只能通过 mime-type 验证。 * @for Uploader */ return Uploader.register({ name: 'dnd', init: function( opts ) { if ( !opts.dnd || this.request('predict-runtime-type') !== 'html5' ) { return; } var me = this, deferred = Base.Deferred(), options = $.extend({}, { disableGlobalDnd: opts.disableGlobalDnd, container: opts.dnd, accept: opts.accept }), dnd; this.dnd = dnd = new Dnd( options ); dnd.once( 'ready', deferred.resolve ); dnd.on( 'drop', function( files ) { me.request( 'add-file', [ files ]); }); // 检测文件是否全部允许添加。 dnd.on( 'accept', function( items ) { return me.owner.trigger( 'dndAccept', items ); }); dnd.init(); return deferred.promise(); }, destroy: function() { this.dnd && this.dnd.destroy(); } }); }); /** * @fileOverview 错误信息 */ define('lib/filepaste',[ 'base', 'mediator', 'runtime/client' ], function( Base, Mediator, RuntimeClent ) { var $ = Base.$; function FilePaste( opts ) { opts = this.options = $.extend({}, opts ); opts.container = $( opts.container || document.body ); RuntimeClent.call( this, 'FilePaste' ); } Base.inherits( RuntimeClent, { constructor: FilePaste, init: function() { var me = this; me.connectRuntime( me.options, function() { me.exec('init'); me.trigger('ready'); }); } }); Mediator.installTo( FilePaste.prototype ); return FilePaste; }); /** * @fileOverview 组件基类。 */ define('widgets/filepaste',[ 'base', 'uploader', 'lib/filepaste', 'widgets/widget' ], function( Base, Uploader, FilePaste ) { var $ = Base.$; /** * @property {Selector} [paste=undefined] 指定监听paste事件的容器,如果不指定,不启用此功能。此功能为通过粘贴来添加截屏的图片。建议设置为`document.body`. * @namespace options * @for Uploader */ return Uploader.register({ name: 'paste', init: function( opts ) { if ( !opts.paste || this.request('predict-runtime-type') !== 'html5' ) { return; } var me = this, deferred = Base.Deferred(), options = $.extend({}, { container: opts.paste, accept: opts.accept }), paste; this.paste = paste = new FilePaste( options ); paste.once( 'ready', deferred.resolve ); paste.on( 'paste', function( files ) { me.owner.request( 'add-file', [ files ]); }); paste.init(); return deferred.promise(); }, destroy: function() { this.paste && this.paste.destroy(); } }); }); /** * @fileOverview Blob */ define('lib/blob',[ 'base', 'runtime/client' ], function( Base, RuntimeClient ) { function Blob( ruid, source ) { var me = this; me.source = source; me.ruid = ruid; this.size = source.size || 0; // 如果没有指定 mimetype, 但是知道文件后缀。 if ( !source.type && this.ext && ~'jpg,jpeg,png,gif,bmp'.indexOf( this.ext ) ) { this.type = 'image/' + (this.ext === 'jpg' ? 'jpeg' : this.ext); } else { this.type = source.type || 'application/octet-stream'; } RuntimeClient.call( me, 'Blob' ); this.uid = source.uid || this.uid; if ( ruid ) { me.connectRuntime( ruid ); } } Base.inherits( RuntimeClient, { constructor: Blob, slice: function( start, end ) { return this.exec( 'slice', start, end ); }, getSource: function() { return this.source; } }); return Blob; }); /** * 为了统一化Flash的File和HTML5的File而存在。 * 以至于要调用Flash里面的File,也可以像调用HTML5版本的File一下。 * @fileOverview File */ define('lib/file',[ 'base', 'lib/blob' ], function( Base, Blob ) { var uid = 1, rExt = /\.([^.]+)$/; function File( ruid, file ) { var ext; this.name = file.name || ('untitled' + uid++); ext = rExt.exec( file.name ) ? RegExp.$1.toLowerCase() : ''; // todo 支持其他类型文件的转换。 // 如果有 mimetype, 但是文件名里面没有找出后缀规律 if ( !ext && file.type ) { ext = /\/(jpg|jpeg|png|gif|bmp)$/i.exec( file.type ) ? RegExp.$1.toLowerCase() : ''; this.name += '.' + ext; } this.ext = ext; this.lastModifiedDate = file.lastModifiedDate || (new Date()).toLocaleString(); Blob.apply( this, arguments ); } return Base.inherits( Blob, File ); }); /** * @fileOverview 错误信息 */ define('lib/filepicker',[ 'base', 'runtime/client', 'lib/file' ], function( Base, RuntimeClent, File ) { var $ = Base.$; function FilePicker( opts ) { opts = this.options = $.extend({}, FilePicker.options, opts ); opts.container = $( opts.id ); if ( !opts.container.length ) { throw new Error('按钮指定错误'); } opts.innerHTML = opts.innerHTML || opts.label || opts.container.html() || ''; opts.button = $( opts.button || document.createElement('div') ); opts.button.html( opts.innerHTML ); opts.container.html( opts.button ); RuntimeClent.call( this, 'FilePicker', true ); } FilePicker.options = { button: null, container: null, label: null, innerHTML: null, multiple: true, accept: null, name: 'file' }; Base.inherits( RuntimeClent, { constructor: FilePicker, init: function() { var me = this, opts = me.options, button = opts.button; button.addClass('webuploader-pick'); me.on( 'all', function( type ) { var files; switch ( type ) { case 'mouseenter': button.addClass('webuploader-pick-hover'); break; case 'mouseleave': button.removeClass('webuploader-pick-hover'); break; case 'change': files = me.exec('getFiles'); me.trigger( 'select', $.map( files, function( file ) { file = new File( me.getRuid(), file ); // 记录来源。 file._refer = opts.container; return file; }), opts.container ); break; } }); me.connectRuntime( opts, function() { me.refresh(); me.exec( 'init', opts ); me.trigger('ready'); }); this._resizeHandler = Base.bindFn( this.refresh, this ); $( window ).on( 'resize', this._resizeHandler ); }, refresh: function() { var shimContainer = this.getRuntime().getContainer(), button = this.options.button, width = button.outerWidth ? button.outerWidth() : button.width(), height = button.outerHeight ? button.outerHeight() : button.height(), pos = button.offset(); width && height && shimContainer.css({ bottom: 'auto', right: 'auto', width: width + 'px', height: height + 'px' }).offset(pos); shimContainer.offset(button.offset()); }, enable: function() { var btn = this.options.button; btn.removeClass('webuploader-pick-disable'); this.refresh(); }, disable: function() { var btn = this.options.button; this.getRuntime().getContainer().css({ top: '-99999px' }); btn.addClass('webuploader-pick-disable'); }, destroy: function() { var btn = this.options.button; $( window ).off( 'resize', this._resizeHandler ); btn.removeClass('webuploader-pick-disable webuploader-pick-hover ' + 'webuploader-pick'); } }); return FilePicker; }); /** * @fileOverview 文件选择相关 */ define('widgets/filepicker',[ 'base', 'uploader', 'lib/filepicker', 'widgets/widget' ], function( Base, Uploader, FilePicker ) { var $ = Base.$; $.extend( Uploader.options, { /** * @property {Selector | Object} [pick=undefined] * @namespace options * @for Uploader * @description 指定选择文件的按钮容器,不指定则不创建按钮。 * * * `id` {Seletor|dom} 指定选择文件的按钮容器,不指定则不创建按钮。**注意** 这里虽然写的是 id, 但是不是只支持 id, 还支持 class, 或者 dom 节点。 * * `label` {String} 请采用 `innerHTML` 代替 * * `innerHTML` {String} 指定按钮文字。不指定时优先从指定的容器中看是否自带文字。 * * `multiple` {Boolean} 是否开起同时选择多个文件能力。 */ pick: null, /** * @property {Arroy} [accept=null] * @namespace options * @for Uploader * @description 指定接受哪些类型的文件。 由于目前还有ext转mimeType表,所以这里需要分开指定。 * * * `title` {String} 文字描述 * * `extensions` {String} 允许的文件后缀,不带点,多个用逗号分割。 * * `mimeTypes` {String} 多个用逗号分割。 * * 如: * * ``` * { * title: 'Images', * extensions: 'gif,jpg,jpeg,bmp,png', * mimeTypes: 'image/*' * } * ``` */ accept: null/*{ title: 'Images', extensions: 'gif,jpg,jpeg,bmp,png', mimeTypes: 'image/*' }*/ }); return Uploader.register({ name: 'picker', init: function( opts ) { this.pickers = []; return opts.pick && this.addBtn( opts.pick ); }, refresh: function() { $.each( this.pickers, function() { this.refresh(); }); }, /** * @method addButton * @for Uploader * @grammar addButton( pick ) => Promise * @description * 添加文件选择按钮,如果一个按钮不够,需要调用此方法来添加。参数跟[options.pick](#WebUploader:Uploader:options)一致。 * @example * uploader.addButton({ * id: '#btnContainer', * innerHTML: '选择文件' * }); */ addBtn: function( pick ) { var me = this, opts = me.options, accept = opts.accept, promises = []; if ( !pick ) { return; } $.isPlainObject( pick ) || (pick = { id: pick }); $( pick.id ).each(function() { var options, picker, deferred; deferred = Base.Deferred(); options = $.extend({}, pick, { accept: $.isPlainObject( accept ) ? [ accept ] : accept, swf: opts.swf, runtimeOrder: opts.runtimeOrder, id: this }); picker = new FilePicker( options ); picker.once( 'ready', deferred.resolve ); picker.on( 'select', function( files ) { me.owner.request( 'add-file', [ files ]); }); picker.init(); me.pickers.push( picker ); promises.push( deferred.promise() ); }); return Base.when.apply( Base, promises ); }, disable: function() { $.each( this.pickers, function() { this.disable(); }); }, enable: function() { $.each( this.pickers, function() { this.enable(); }); }, destroy: function() { $.each( this.pickers, function() { this.destroy(); }); this.pickers = null; } }); }); /** * @fileOverview Image */ define('lib/image',[ 'base', 'runtime/client', 'lib/blob' ], function( Base, RuntimeClient, Blob ) { var $ = Base.$; // 构造器。 function Image( opts ) { this.options = $.extend({}, Image.options, opts ); RuntimeClient.call( this, 'Image' ); this.on( 'load', function() { this._info = this.exec('info'); this._meta = this.exec('meta'); }); } // 默认选项。 Image.options = { // 默认的图片处理质量 quality: 90, // 是否裁剪 crop: false, // 是否保留头部信息 preserveHeaders: false, // 是否允许放大。 allowMagnify: false }; // 继承RuntimeClient. Base.inherits( RuntimeClient, { constructor: Image, info: function( val ) { // setter if ( val ) { this._info = val; return this; } // getter return this._info; }, meta: function( val ) { // setter if ( val ) { this._meta = val; return this; } // getter return this._meta; }, loadFromBlob: function( blob ) { var me = this, ruid = blob.getRuid(); this.connectRuntime( ruid, function() { me.exec( 'init', me.options ); me.exec( 'loadFromBlob', blob ); }); }, resize: function() { var args = Base.slice( arguments ); return this.exec.apply( this, [ 'resize' ].concat( args ) ); }, crop: function() { var args = Base.slice( arguments ); return this.exec.apply( this, [ 'crop' ].concat( args ) ); }, getAsDataUrl: function( type ) { return this.exec( 'getAsDataUrl', type ); }, getAsBlob: function( type ) { var blob = this.exec( 'getAsBlob', type ); return new Blob( this.getRuid(), blob ); } }); return Image; }); /** * @fileOverview 图片操作, 负责预览图片和上传前压缩图片 */ define('widgets/image',[ 'base', 'uploader', 'lib/image', 'widgets/widget' ], function( Base, Uploader, Image ) { var $ = Base.$, throttle; // 根据要处理的文件大小来节流,一次不能处理太多,会卡。 throttle = (function( max ) { var occupied = 0, waiting = [], tick = function() { var item; while ( waiting.length && occupied < max ) { item = waiting.shift(); occupied += item[ 0 ]; item[ 1 ](); } }; return function( emiter, size, cb ) { waiting.push([ size, cb ]); emiter.once( 'destroy', function() { occupied -= size; setTimeout( tick, 1 ); }); setTimeout( tick, 1 ); }; })( 5 * 1024 * 1024 ); $.extend( Uploader.options, { /** * @property {Object} [thumb] * @namespace options * @for Uploader * @description 配置生成缩略图的选项。 * * 默认为: * * ```javascript * { * width: 110, * height: 110, * * // 图片质量,只有type为`image/jpeg`的时候才有效。 * quality: 70, * * // 是否允许放大,如果想要生成小图的时候不失真,此选项应该设置为false. * allowMagnify: true, * * // 是否允许裁剪。 * crop: true, * * // 为空的话则保留原有图片格式。 * // 否则强制转换成指定的类型。 * type: 'image/jpeg' * } * ``` */ thumb: { width: 110, height: 110, quality: 70, allowMagnify: true, crop: true, preserveHeaders: false, // 为空的话则保留原有图片格式。 // 否则强制转换成指定的类型。 // IE 8下面 base64 大小不能超过 32K 否则预览失败,而非 jpeg 编码的图片很可 // 能会超过 32k, 所以这里设置成预览的时候都是 image/jpeg type: 'image/jpeg' }, /** * @property {Object} [compress] * @namespace options * @for Uploader * @description 配置压缩的图片的选项。如果此选项为`false`, 则图片在上传前不进行压缩。 * * 默认为: * * ```javascript * { * width: 1600, * height: 1600, * * // 图片质量,只有type为`image/jpeg`的时候才有效。 * quality: 90, * * // 是否允许放大,如果想要生成小图的时候不失真,此选项应该设置为false. * allowMagnify: false, * * // 是否允许裁剪。 * crop: false, * * // 是否保留头部meta信息。 * preserveHeaders: true, * * // 如果发现压缩后文件大小比原来还大,则使用原来图片 * // 此属性可能会影响图片自动纠正功能 * noCompressIfLarger: false, * * // 单位字节,如果图片大小小于此值,不会采用压缩。 * compressSize: 0 * } * ``` */ compress: { width: 1600, height: 1600, quality: 90, allowMagnify: false, crop: false, preserveHeaders: true } }); return Uploader.register({ name: 'image', /** * 生成缩略图,此过程为异步,所以需要传入`callback`。 * 通常情况在图片加入队里后调用此方法来生成预览图以增强交互效果。 * * 当 width 或者 height 的值介于 0 - 1 时,被当成百分比使用。 * * `callback`中可以接收到两个参数。 * * 第一个为error,如果生成缩略图有错误,此error将为真。 * * 第二个为ret, 缩略图的Data URL值。 * * **注意** * Date URL在IE6/7中不支持,所以不用调用此方法了,直接显示一张暂不支持预览图片好了。 * 也可以借助服务端,将 base64 数据传给服务端,生成一个临时文件供预览。 * * @method makeThumb * @grammar makeThumb( file, callback ) => undefined * @grammar makeThumb( file, callback, width, height ) => undefined * @for Uploader * @example * * uploader.on( 'fileQueued', function( file ) { * var $li = ...; * * uploader.makeThumb( file, function( error, ret ) { * if ( error ) { * $li.text('预览错误'); * } else { * $li.append('<img alt="" src="' + ret + '" />'); * } * }); * * }); */ makeThumb: function( file, cb, width, height ) { var opts, image; file = this.request( 'get-file', file ); // 只预览图片格式。 if ( !file.type.match( /^image/ ) ) { cb( true ); return; } opts = $.extend({}, this.options.thumb ); // 如果传入的是object. if ( $.isPlainObject( width ) ) { opts = $.extend( opts, width ); width = null; } width = width || opts.width; height = height || opts.height; image = new Image( opts ); // 当 resize 完后 image.once( 'complete', function() { cb( false, image.getAsDataUrl( opts.type ) ); image.destroy(); }); image.once( 'error', function( reason ) { cb( reason || true ); image.destroy(); }); throttle( image, file.source.size, function() { file._info && image.info( file._info ); file._meta && image.meta( file._meta ); image.loadFromBlob( file.source ); }); return image; }, beforeSendFile: function( file ) { var opts = this.options.compress || this.options.resize, compressSize = opts && opts.compressSize || 0, noCompressIfLarger = opts && opts.noCompressIfLarger || false, image, deferred; file = this.request( 'get-file', file ); // 只压缩 jpeg 图片格式。 // gif 可能会丢失针 // bmp png 基本上尺寸都不大,且压缩比比较小。 if ( !opts || !~'image/jpeg,image/jpg'.indexOf( file.type ) || file.size < compressSize || file._compressed ) { return; } opts = $.extend({}, opts ); deferred = Base.Deferred(); image = new Image( opts ); deferred.always(function() { image.destroy(); image = null; }); image.once( 'error', deferred.reject ); image.once( 'load', function() { var width = opts.width, height = opts.height; file._info = file._info || image.info(); file._meta = file._meta || image.meta(); // 如果 width 的值介于 0 - 1 // 说明设置的是百分比。 if ( width <= 1 && width > 0 ) { width = file._info.width * width; } // 同样的规则应用于 height if ( height <= 1 && height > 0 ) { height = file._info.height * height; } image.resize( width, height ); }); image.once( 'complete', function() { var blob, size; // 移动端 UC / qq 浏览器的无图模式下 // ctx.getImageData 处理大图的时候会报 Exception // INDEX_SIZE_ERR: DOM Exception 1 try { blob = image.getAsBlob( opts.type ); size = file.size; // 如果压缩后,比原来还大则不用压缩后的。 if ( !noCompressIfLarger || blob.size < size ) { // file.source.destroy && file.source.destroy(); file.source = blob; file.size = blob.size; file.trigger( 'resize', blob.size, size ); } // 标记,避免重复压缩。 file._compressed = true; deferred.resolve(); } catch ( e ) { // 出错了直接继续,让其上传原始图片 deferred.resolve(); } }); file._info && image.info( file._info ); file._meta && image.meta( file._meta ); image.loadFromBlob( file.source ); return deferred.promise(); } }); }); /** * @fileOverview 文件属性封装 */ define('file',[ 'base', 'mediator' ], function( Base, Mediator ) { var $ = Base.$, idPrefix = 'WU_FILE_', idSuffix = 0, rExt = /\.([^.]+)$/, statusMap = {}; function gid() { return idPrefix + idSuffix++; } /** * 文件类 * @class File * @constructor 构造函数 * @grammar new File( source ) => File * @param {Lib.File} source [lib.File](#Lib.File)实例, 此source对象是带有Runtime信息的。 */ function WUFile( source ) { /** * 文件名,包括扩展名(后缀) * @property name * @type {string} */ this.name = source.name || 'Untitled'; /** * 文件体积(字节) * @property size * @type {uint} * @default 0 */ this.size = source.size || 0; /** * 文件MIMETYPE类型,与文件类型的对应关系请参考[http://t.cn/z8ZnFny](http://t.cn/z8ZnFny) * @property type * @type {string} * @default 'application/octet-stream' */ this.type = source.type || 'application/octet-stream'; /** * 文件最后修改日期 * @property lastModifiedDate * @type {int} * @default 当前时间戳 */ this.lastModifiedDate = source.lastModifiedDate || (new Date() * 1); /** * 文件ID,每个对象具有唯一ID,与文件名无关 * @property id * @type {string} */ this.id = gid(); /** * 文件扩展名,通过文件名获取,例如test.png的扩展名为png * @property ext * @type {string} */ this.ext = rExt.exec( this.name ) ? RegExp.$1 : ''; /** * 状态文字说明。在不同的status语境下有不同的用途。 * @property statusText * @type {string} */ this.statusText = ''; // 存储文件状态,防止通过属性直接修改 statusMap[ this.id ] = WUFile.Status.INITED; this.source = source; this.loaded = 0; this.on( 'error', function( msg ) { this.setStatus( WUFile.Status.ERROR, msg ); }); } $.extend( WUFile.prototype, { /** * 设置状态,状态变化时会触发`change`事件。 * @method setStatus * @grammar setStatus( status[, statusText] ); * @param {File.Status|String} status [文件状态值](#WebUploader:File:File.Status) * @param {String} [statusText=''] 状态说明,常在error时使用,用http, abort,server等来标记是由于什么原因导致文件错误。 */ setStatus: function( status, text ) { var prevStatus = statusMap[ this.id ]; typeof text !== 'undefined' && (this.statusText = text); if ( status !== prevStatus ) { statusMap[ this.id ] = status; /** * 文件状态变化 * @event statuschange */ this.trigger( 'statuschange', status, prevStatus ); } }, /** * 获取文件状态 * @return {File.Status} * @example 文件状态具体包括以下几种类型: { // 初始化 INITED: 0, // 已入队列 QUEUED: 1, // 正在上传 PROGRESS: 2, // 上传出错 ERROR: 3, // 上传成功 COMPLETE: 4, // 上传取消 CANCELLED: 5 } */ getStatus: function() { return statusMap[ this.id ]; }, /** * 获取文件原始信息。 * @return {*} */ getSource: function() { return this.source; }, destroy: function() { this.off(); delete statusMap[ this.id ]; } }); Mediator.installTo( WUFile.prototype ); /** * 文件状态值,具体包括以下几种类型: * * `inited` 初始状态 * * `queued` 已经进入队列, 等待上传 * * `progress` 上传中 * * `complete` 上传完成。 * * `error` 上传出错,可重试 * * `interrupt` 上传中断,可续传。 * * `invalid` 文件不合格,不能重试上传。会自动从队列中移除。 * * `cancelled` 文件被移除。 * @property {Object} Status * @namespace File * @class File * @static */ WUFile.Status = { INITED: 'inited', // 初始状态 QUEUED: 'queued', // 已经进入队列, 等待上传 PROGRESS: 'progress', // 上传中 ERROR: 'error', // 上传出错,可重试 COMPLETE: 'complete', // 上传完成。 CANCELLED: 'cancelled', // 上传取消。 INTERRUPT: 'interrupt', // 上传中断,可续传。 INVALID: 'invalid' // 文件不合格,不能重试上传。 }; return WUFile; }); /** * @fileOverview 文件队列 */ define('queue',[ 'base', 'mediator', 'file' ], function( Base, Mediator, WUFile ) { var $ = Base.$, STATUS = WUFile.Status; /** * 文件队列, 用来存储各个状态中的文件。 * @class Queue * @extends Mediator */ function Queue() { /** * 统计文件数。 * * `numOfQueue` 队列中的文件数。 * * `numOfSuccess` 上传成功的文件数 * * `numOfCancel` 被取消的文件数 * * `numOfProgress` 正在上传中的文件数 * * `numOfUploadFailed` 上传错误的文件数。 * * `numOfInvalid` 无效的文件数。 * * `numofDeleted` 被移除的文件数。 * @property {Object} stats */ this.stats = { numOfQueue: 0, numOfSuccess: 0, numOfCancel: 0, numOfProgress: 0, numOfUploadFailed: 0, numOfInvalid: 0, numofDeleted: 0, numofInterrupt: 0 }; // 上传队列,仅包括等待上传的文件 this._queue = []; // 存储所有文件 this._map = {}; } $.extend( Queue.prototype, { /** * 将新文件加入对队列尾部 * * @method append * @param {File} file 文件对象 */ append: function( file ) { this._queue.push( file ); this._fileAdded( file ); return this; }, /** * 将新文件加入对队列头部 * * @method prepend * @param {File} file 文件对象 */ prepend: function( file ) { this._queue.unshift( file ); this._fileAdded( file ); return this; }, /** * 获取文件对象 * * @method getFile * @param {String} fileId 文件ID * @return {File} */ getFile: function( fileId ) { if ( typeof fileId !== 'string' ) { return fileId; } return this._map[ fileId ]; }, /** * 从队列中取出一个指定状态的文件。 * @grammar fetch( status ) => File * @method fetch * @param {String} status [文件状态值](#WebUploader:File:File.Status) * @return {File} [File](#WebUploader:File) */ fetch: function( status ) { var len = this._queue.length, i, file; status = status || STATUS.QUEUED; for ( i = 0; i < len; i++ ) { file = this._queue[ i ]; if ( status === file.getStatus() ) { return file; } } return null; }, /** * 对队列进行排序,能够控制文件上传顺序。 * @grammar sort( fn ) => undefined * @method sort * @param {Function} fn 排序方法 */ sort: function( fn ) { if ( typeof fn === 'function' ) { this._queue.sort( fn ); } }, /** * 获取指定类型的文件列表, 列表中每一个成员为[File](#WebUploader:File)对象。 * @grammar getFiles( [status1[, status2 ...]] ) => Array * @method getFiles * @param {String} [status] [文件状态值](#WebUploader:File:File.Status) */ getFiles: function() { var sts = [].slice.call( arguments, 0 ), ret = [], i = 0, len = this._queue.length, file; for ( ; i < len; i++ ) { file = this._queue[ i ]; if ( sts.length && !~$.inArray( file.getStatus(), sts ) ) { continue; } ret.push( file ); } return ret; }, /** * 在队列中删除文件。 * @grammar removeFile( file ) => Array * @method removeFile * @param {File} 文件对象。 */ removeFile: function( file ) { var me = this, existing = this._map[ file.id ]; if ( existing ) { delete this._map[ file.id ]; file.destroy(); this.stats.numofDeleted++; } }, _fileAdded: function( file ) { var me = this, existing = this._map[ file.id ]; if ( !existing ) { this._map[ file.id ] = file; file.on( 'statuschange', function( cur, pre ) { me._onFileStatusChange( cur, pre ); }); } }, _onFileStatusChange: function( curStatus, preStatus ) { var stats = this.stats; switch ( preStatus ) { case STATUS.PROGRESS: stats.numOfProgress--; break; case STATUS.QUEUED: stats.numOfQueue --; break; case STATUS.ERROR: stats.numOfUploadFailed--; break; case STATUS.INVALID: stats.numOfInvalid--; break; case STATUS.INTERRUPT: stats.numofInterrupt--; break; } switch ( curStatus ) { case STATUS.QUEUED: stats.numOfQueue++; break; case STATUS.PROGRESS: stats.numOfProgress++; break; case STATUS.ERROR: stats.numOfUploadFailed++; break; case STATUS.COMPLETE: stats.numOfSuccess++; break; case STATUS.CANCELLED: stats.numOfCancel++; break; case STATUS.INVALID: stats.numOfInvalid++; break; case STATUS.INTERRUPT: stats.numofInterrupt++; break; } } }); Mediator.installTo( Queue.prototype ); return Queue; }); /** * @fileOverview 队列 */ define('widgets/queue',[ 'base', 'uploader', 'queue', 'file', 'lib/file', 'runtime/client', 'widgets/widget' ], function( Base, Uploader, Queue, WUFile, File, RuntimeClient ) { var $ = Base.$, rExt = /\.\w+$/, Status = WUFile.Status; return Uploader.register({ name: 'queue', init: function( opts ) { var me = this, deferred, len, i, item, arr, accept, runtime; if ( $.isPlainObject( opts.accept ) ) { opts.accept = [ opts.accept ]; } // accept中的中生成匹配正则。 if ( opts.accept ) { arr = []; for ( i = 0, len = opts.accept.length; i < len; i++ ) { item = opts.accept[ i ].extensions; item && arr.push( item ); } if ( arr.length ) { accept = '\\.' + arr.join(',') .replace( /,/g, '$|\\.' ) .replace( /\*/g, '.*' ) + '$'; } me.accept = new RegExp( accept, 'i' ); } me.queue = new Queue(); me.stats = me.queue.stats; // 如果当前不是html5运行时,那就算了。 // 不执行后续操作 if ( this.request('predict-runtime-type') !== 'html5' ) { return; } // 创建一个 html5 运行时的 placeholder // 以至于外部添加原生 File 对象的时候能正确包裹一下供 webuploader 使用。 deferred = Base.Deferred(); this.placeholder = runtime = new RuntimeClient('Placeholder'); runtime.connectRuntime({ runtimeOrder: 'html5' }, function() { me._ruid = runtime.getRuid(); deferred.resolve(); }); return deferred.promise(); }, // 为了支持外部直接添加一个原生File对象。 _wrapFile: function( file ) { if ( !(file instanceof WUFile) ) { if ( !(file instanceof File) ) { if ( !this._ruid ) { throw new Error('Can\'t add external files.'); } file = new File( this._ruid, file ); } file = new WUFile( file ); } return file; }, // 判断文件是否可以被加入队列 acceptFile: function( file ) { var invalid = !file || !file.size || this.accept && // 如果名字中有后缀,才做后缀白名单处理。 rExt.exec( file.name ) && !this.accept.test( file.name ); return !invalid; }, /** * @event beforeFileQueued * @param {File} file File对象 * @description 当文件被加入队列之前触发,此事件的handler返回值为`false`,则此文件不会被添加进入队列。 * @for Uploader */ /** * @event fileQueued * @param {File} file File对象 * @description 当文件被加入队列以后触发。 * @for Uploader */ _addFile: function( file ) { var me = this; file = me._wrapFile( file ); // 不过类型判断允许不允许,先派送 `beforeFileQueued` if ( !me.owner.trigger( 'beforeFileQueued', file ) ) { return; } // 类型不匹配,则派送错误事件,并返回。 if ( !me.acceptFile( file ) ) { me.owner.trigger( 'error', 'Q_TYPE_DENIED', file ); return; } me.queue.append( file ); me.owner.trigger( 'fileQueued', file ); return file; }, getFile: function( fileId ) { return this.queue.getFile( fileId ); }, /** * @event filesQueued * @param {File} files 数组,内容为原始File(lib/File)对象。 * @description 当一批文件添加进队列以后触发。 * @for Uploader */ /** * @property {Boolean} [auto=false] * @namespace options * @for Uploader * @description 设置为 true 后,不需要手动调用上传,有文件选择即开始上传。 * */ /** * @method addFiles * @grammar addFiles( file ) => undefined * @grammar addFiles( [file1, file2 ...] ) => undefined * @param {Array of File or File} [files] Files 对象 数组 * @description 添加文件到队列 * @for Uploader */ addFile: function( files ) { var me = this; if ( !files.length ) { files = [ files ]; } files = $.map( files, function( file ) { return me._addFile( file ); }); me.owner.trigger( 'filesQueued', files ); if ( me.options.auto ) { setTimeout(function() { me.request('start-upload'); }, 20 ); } }, getStats: function() { return this.stats; }, /** * @event fileDequeued * @param {File} file File对象 * @description 当文件被移除队列后触发。 * @for Uploader */ /** * @method removeFile * @grammar removeFile( file ) => undefined * @grammar removeFile( id ) => undefined * @grammar removeFile( file, true ) => undefined * @grammar removeFile( id, true ) => undefined * @param {File|id} file File对象或这File对象的id * @description 移除某一文件, 默认只会标记文件状态为已取消,如果第二个参数为 `true` 则会从 queue 中移除。 * @for Uploader * @example * * $li.on('click', '.remove-this', function() { * uploader.removeFile( file ); * }) */ removeFile: function( file, remove ) { var me = this; file = file.id ? file : me.queue.getFile( file ); this.request( 'cancel-file', file ); if ( remove ) { this.queue.removeFile( file ); } }, /** * @method getFiles * @grammar getFiles() => Array * @grammar getFiles( status1, status2, status... ) => Array * @description 返回指定状态的文件集合,不传参数将返回所有状态的文件。 * @for Uploader * @example * console.log( uploader.getFiles() ); // => all files * console.log( uploader.getFiles('error') ) // => all error files. */ getFiles: function() { return this.queue.getFiles.apply( this.queue, arguments ); }, fetchFile: function() { return this.queue.fetch.apply( this.queue, arguments ); }, /** * @method retry * @grammar retry() => undefined * @grammar retry( file ) => undefined * @description 重试上传,重试指定文件,或者从出错的文件开始重新上传。 * @for Uploader * @example * function retry() { * uploader.retry(); * } */ retry: function( file, noForceStart ) { var me = this, files, i, len; if ( file ) { file = file.id ? file : me.queue.getFile( file ); file.setStatus( Status.QUEUED ); noForceStart || me.request('start-upload'); return; } files = me.queue.getFiles( Status.ERROR ); i = 0; len = files.length; for ( ; i < len; i++ ) { file = files[ i ]; file.setStatus( Status.QUEUED ); } me.request('start-upload'); }, /** * @method sort * @grammar sort( fn ) => undefined * @description 排序队列中的文件,在上传之前调整可以控制上传顺序。 * @for Uploader */ sortFiles: function() { return this.queue.sort.apply( this.queue, arguments ); }, /** * @event reset * @description 当 uploader 被重置的时候触发。 * @for Uploader */ /** * @method reset * @grammar reset() => undefined * @description 重置uploader。目前只重置了队列。 * @for Uploader * @example * uploader.reset(); */ reset: function() { this.owner.trigger('reset'); this.queue = new Queue(); this.stats = this.queue.stats; }, destroy: function() { this.reset(); this.placeholder && this.placeholder.destroy(); } }); }); /** * @fileOverview 添加获取Runtime相关信息的方法。 */ define('widgets/runtime',[ 'uploader', 'runtime/runtime', 'widgets/widget' ], function( Uploader, Runtime ) { Uploader.support = function() { return Runtime.hasRuntime.apply( Runtime, arguments ); }; /** * @property {Object} [runtimeOrder=html5,flash] * @namespace options * @for Uploader * @description 指定运行时启动顺序。默认会想尝试 html5 是否支持,如果支持则使用 html5, 否则则使用 flash. * * 可以将此值设置成 `flash`,来强制使用 flash 运行时。 */ return Uploader.register({ name: 'runtime', init: function() { if ( !this.predictRuntimeType() ) { throw Error('Runtime Error'); } }, /** * 预测Uploader将采用哪个`Runtime` * @grammar predictRuntimeType() => String * @method predictRuntimeType * @for Uploader */ predictRuntimeType: function() { var orders = this.options.runtimeOrder || Runtime.orders, type = this.type, i, len; if ( !type ) { orders = orders.split( /\s*,\s*/g ); for ( i = 0, len = orders.length; i < len; i++ ) { if ( Runtime.hasRuntime( orders[ i ] ) ) { this.type = type = orders[ i ]; break; } } } return type; } }); }); /** * @fileOverview Transport */ define('lib/transport',[ 'base', 'runtime/client', 'mediator' ], function( Base, RuntimeClient, Mediator ) { var $ = Base.$; function Transport( opts ) { var me = this; opts = me.options = $.extend( true, {}, Transport.options, opts || {} ); RuntimeClient.call( this, 'Transport' ); this._blob = null; this._formData = opts.formData || {}; this._headers = opts.headers || {}; this.on( 'progress', this._timeout ); this.on( 'load error', function() { me.trigger( 'progress', 1 ); clearTimeout( me._timer ); }); } Transport.options = { server: '', method: 'POST', // 跨域时,是否允许携带cookie, 只有html5 runtime才有效 withCredentials: false, fileVal: 'file', timeout: 2 * 60 * 1000, // 2分钟 formData: {}, headers: {}, sendAsBinary: false }; $.extend( Transport.prototype, { // 添加Blob, 只能添加一次,最后一次有效。 appendBlob: function( key, blob, filename ) { var me = this, opts = me.options; if ( me.getRuid() ) { me.disconnectRuntime(); } // 连接到blob归属的同一个runtime. me.connectRuntime( blob.ruid, function() { me.exec('init'); }); me._blob = blob; opts.fileVal = key || opts.fileVal; opts.filename = filename || opts.filename; }, // 添加其他字段 append: function( key, value ) { if ( typeof key === 'object' ) { $.extend( this._formData, key ); } else { this._formData[ key ] = value; } }, setRequestHeader: function( key, value ) { if ( typeof key === 'object' ) { $.extend( this._headers, key ); } else { this._headers[ key ] = value; } }, send: function( method ) { this.exec( 'send', method ); this._timeout(); }, abort: function() { clearTimeout( this._timer ); return this.exec('abort'); }, destroy: function() { this.trigger('destroy'); this.off(); this.exec('destroy'); this.disconnectRuntime(); }, getResponse: function() { return this.exec('getResponse'); }, getResponseAsJson: function() { return this.exec('getResponseAsJson'); }, getStatus: function() { return this.exec('getStatus'); }, _timeout: function() { var me = this, duration = me.options.timeout; if ( !duration ) { return; } clearTimeout( me._timer ); me._timer = setTimeout(function() { me.abort(); me.trigger( 'error', 'timeout' ); }, duration ); } }); // 让Transport具备事件功能。 Mediator.installTo( Transport.prototype ); return Transport; }); /** * @fileOverview 负责文件上传相关。 */ define('widgets/upload',[ 'base', 'uploader', 'file', 'lib/transport', 'widgets/widget' ], function( Base, Uploader, WUFile, Transport ) { var $ = Base.$, isPromise = Base.isPromise, Status = WUFile.Status; // 添加默认配置项 $.extend( Uploader.options, { /** * @property {Boolean} [prepareNextFile=false] * @namespace options * @for Uploader * @description 是否允许在文件传输时提前把下一个文件准备好。 * 对于一个文件的准备工作比较耗时,比如图片压缩,md5序列化。 * 如果能提前在当前文件传输期处理,可以节省总体耗时。 */ prepareNextFile: false, /** * @property {Boolean} [chunked=false] * @namespace options * @for Uploader * @description 是否要分片处理大文件上传。 */ chunked: false, /** * @property {Boolean} [chunkSize=5242880] * @namespace options * @for Uploader * @description 如果要分片,分多大一片? 默认大小为5M. */ chunkSize: 5 * 1024 * 1024, /** * @property {Boolean} [chunkRetry=2] * @namespace options * @for Uploader * @description 如果某个分片由于网络问题出错,允许自动重传多少次? */ chunkRetry: 2, /** * @property {Boolean} [threads=3] * @namespace options * @for Uploader * @description 上传并发数。允许同时最大上传进程数。 */ threads: 3, /** * @property {Object} [formData={}] * @namespace options * @for Uploader * @description 文件上传请求的参数表,每次发送都会发送此对象中的参数。 */ formData: {} /** * @property {Object} [fileVal='file'] * @namespace options * @for Uploader * @description 设置文件上传域的name。 */ /** * @property {Object} [method='POST'] * @namespace options * @for Uploader * @description 文件上传方式,`POST`或者`GET`。 */ /** * @property {Object} [sendAsBinary=false] * @namespace options * @for Uploader * @description 是否已二进制的流的方式发送文件,这样整个上传内容`php://input`都为文件内容, * 其他参数在$_GET数组中。 */ }); // 负责将文件切片。 function CuteFile( file, chunkSize ) { var pending = [], blob = file.source, total = blob.size, chunks = chunkSize ? Math.ceil( total / chunkSize ) : 1, start = 0, index = 0, len, api; api = { file: file, has: function() { return !!pending.length; }, shift: function() { return pending.shift(); }, unshift: function( block ) { pending.unshift( block ); } }; while ( index < chunks ) { len = Math.min( chunkSize, total - start ); pending.push({ file: file, start: start, end: chunkSize ? (start + len) : total, total: total, chunks: chunks, chunk: index++, cuted: api }); start += len; } file.blocks = pending.concat(); file.remaning = pending.length; return api; } Uploader.register({ name: 'upload', init: function() { var owner = this.owner, me = this; this.runing = false; this.progress = false; owner .on( 'startUpload', function() { me.progress = true; }) .on( 'uploadFinished', function() { me.progress = false; }); // 记录当前正在传的数据,跟threads相关 this.pool = []; // 缓存分好片的文件。 this.stack = []; // 缓存即将上传的文件。 this.pending = []; // 跟踪还有多少分片在上传中但是没有完成上传。 this.remaning = 0; this.__tick = Base.bindFn( this._tick, this ); owner.on( 'uploadComplete', function( file ) { // 把其他块取消了。 file.blocks && $.each( file.blocks, function( _, v ) { v.transport && (v.transport.abort(), v.transport.destroy()); delete v.transport; }); delete file.blocks; delete file.remaning; }); }, reset: function() { this.request( 'stop-upload', true ); this.runing = false; this.pool = []; this.stack = []; this.pending = []; this.remaning = 0; this._trigged = false; this._promise = null; }, /** * @event startUpload * @description 当开始上传流程时触发。 * @for Uploader */ /** * 开始上传。此方法可以从初始状态调用开始上传流程,也可以从暂停状态调用,继续上传流程。 * * 可以指定开始某一个文件。 * @grammar upload() => undefined * @grammar upload( file | fileId) => undefined * @method upload * @for Uploader */ startUpload: function(file) { var me = this; // 移出invalid的文件 $.each( me.request( 'get-files', Status.INVALID ), function() { me.request( 'remove-file', this ); }); // 如果指定了开始某个文件,则只开始指定文件。 if ( file ) { file = file.id ? file : me.request( 'get-file', file ); if (file.getStatus() === Status.INTERRUPT) { $.each( me.pool, function( _, v ) { // 之前暂停过。 if (v.file !== file) { return; } v.transport && v.transport.send(); }); file.setStatus( Status.QUEUED ); } else if (file.getStatus() === Status.PROGRESS) { return; } else { file.setStatus( Status.QUEUED ); } } else { $.each( me.request( 'get-files', [ Status.INITED ] ), function() { this.setStatus( Status.QUEUED ); }); } if ( me.runing ) { return; } me.runing = true; var files = []; // 如果有暂停的,则续传 $.each( me.pool, function( _, v ) { var file = v.file; if ( file.getStatus() === Status.INTERRUPT ) { files.push(file); me._trigged = false; v.transport && v.transport.send(); } }); var file; while ( (file = files.shift()) ) { file.setStatus( Status.PROGRESS ); } file || $.each( me.request( 'get-files', Status.INTERRUPT ), function() { this.setStatus( Status.PROGRESS ); }); me._trigged = false; Base.nextTick( me.__tick ); me.owner.trigger('startUpload'); }, /** * @event stopUpload * @description 当开始上传流程暂停时触发。 * @for Uploader */ /** * 暂停上传。第一个参数为是否中断上传当前正在上传的文件。 * * 如果第一个参数是文件,则只暂停指定文件。 * @grammar stop() => undefined * @grammar stop( true ) => undefined * @grammar stop( file ) => undefined * @method stop * @for Uploader */ stopUpload: function( file, interrupt ) { var me = this; if (file === true) { interrupt = file; file = null; } if ( me.runing === false ) { return; } // 如果只是暂停某个文件。 if ( file ) { file = file.id ? file : me.request( 'get-file', file ); if ( file.getStatus() !== Status.PROGRESS && file.getStatus() !== Status.QUEUED ) { return; } file.setStatus( Status.INTERRUPT ); $.each( me.pool, function( _, v ) { // 只 abort 指定的文件。 if (v.file !== file) { return; } v.transport && v.transport.abort(); me._putback(v); me._popBlock(v); }); return Base.nextTick( me.__tick ); } me.runing = false; if (this._promise && this._promise.file) { this._promise.file.setStatus( Status.INTERRUPT ); } interrupt && $.each( me.pool, function( _, v ) { v.transport && v.transport.abort(); v.file.setStatus( Status.INTERRUPT ); }); me.owner.trigger('stopUpload'); }, /** * @method cancelFile * @grammar cancelFile( file ) => undefined * @grammar cancelFile( id ) => undefined * @param {File|id} file File对象或这File对象的id * @description 标记文件状态为已取消, 同时将中断文件传输。 * @for Uploader * @example * * $li.on('click', '.remove-this', function() { * uploader.cancelFile( file ); * }) */ cancelFile: function( file ) { file = file.id ? file : this.request( 'get-file', file ); // 如果正在上传。 file.blocks && $.each( file.blocks, function( _, v ) { var _tr = v.transport; if ( _tr ) { _tr.abort(); _tr.destroy(); delete v.transport; } }); file.setStatus( Status.CANCELLED ); this.owner.trigger( 'fileDequeued', file ); }, /** * 判断`Uplaode`r是否正在上传中。 * @grammar isInProgress() => Boolean * @method isInProgress * @for Uploader */ isInProgress: function() { return !!this.progress; }, _getStats: function() { return this.request('get-stats'); }, /** * 掉过一个文件上传,直接标记指定文件为已上传状态。 * @grammar skipFile( file ) => undefined * @method skipFile * @for Uploader */ skipFile: function( file, status ) { file = file.id ? file : this.request( 'get-file', file ); file.setStatus( status || Status.COMPLETE ); file.skipped = true; // 如果正在上传。 file.blocks && $.each( file.blocks, function( _, v ) { var _tr = v.transport; if ( _tr ) { _tr.abort(); _tr.destroy(); delete v.transport; } }); this.owner.trigger( 'uploadSkip', file ); }, /** * @event uploadFinished * @description 当所有文件上传结束时触发。 * @for Uploader */ _tick: function() { var me = this, opts = me.options, fn, val; // 上一个promise还没有结束,则等待完成后再执行。 if ( me._promise ) { return me._promise.always( me.__tick ); } // 还有位置,且还有文件要处理的话。 if ( me.pool.length < opts.threads && (val = me._nextBlock()) ) { me._trigged = false; fn = function( val ) { me._promise = null; // 有可能是reject过来的,所以要检测val的类型。 val && val.file && me._startSend( val ); Base.nextTick( me.__tick ); }; me._promise = isPromise( val ) ? val.always( fn ) : fn( val ); // 没有要上传的了,且没有正在传输的了。 } else if ( !me.remaning && !me._getStats().numOfQueue && !me._getStats().numofInterrupt ) { me.runing = false; me._trigged || Base.nextTick(function() { me.owner.trigger('uploadFinished'); }); me._trigged = true; } }, _putback: function(block) { var idx; block.cuted.unshift(block); idx = this.stack.indexOf(block.cuted); if (!~idx) { this.stack.unshift(block.cuted); } }, _getStack: function() { var i = 0, act; while ( (act = this.stack[ i++ ]) ) { if ( act.has() && act.file.getStatus() === Status.PROGRESS ) { return act; } else if (!act.has() || act.file.getStatus() !== Status.PROGRESS && act.file.getStatus() !== Status.INTERRUPT ) { // 把已经处理完了的,或者,状态为非 progress(上传中)、 // interupt(暂停中) 的移除。 this.stack.splice( --i, 1 ); } } return null; }, _nextBlock: function() { var me = this, opts = me.options, act, next, done, preparing; // 如果当前文件还有没有需要传输的,则直接返回剩下的。 if ( (act = this._getStack()) ) { // 是否提前准备下一个文件 if ( opts.prepareNextFile && !me.pending.length ) { me._prepareNextFile(); } return act.shift(); // 否则,如果正在运行,则准备下一个文件,并等待完成后返回下个分片。 } else if ( me.runing ) { // 如果缓存中有,则直接在缓存中取,没有则去queue中取。 if ( !me.pending.length && me._getStats().numOfQueue ) { me._prepareNextFile(); } next = me.pending.shift(); done = function( file ) { if ( !file ) { return null; } act = CuteFile( file, opts.chunked ? opts.chunkSize : 0 ); me.stack.push(act); return act.shift(); }; // 文件可能还在prepare中,也有可能已经完全准备好了。 if ( isPromise( next) ) { preparing = next.file; next = next[ next.pipe ? 'pipe' : 'then' ]( done ); next.file = preparing; return next; } return done( next ); } }, /** * @event uploadStart * @param {File} file File对象 * @description 某个文件开始上传前触发,一个文件只会触发一次。 * @for Uploader */ _prepareNextFile: function() { var me = this, file = me.request('fetch-file'), pending = me.pending, promise; if ( file ) { promise = me.request( 'before-send-file', file, function() { // 有可能文件被skip掉了。文件被skip掉后,状态坑定不是Queued. if ( file.getStatus() === Status.PROGRESS || file.getStatus() === Status.INTERRUPT ) { return file; } return me._finishFile( file ); }); me.owner.trigger( 'uploadStart', file ); file.setStatus( Status.PROGRESS ); promise.file = file; // 如果还在pending中,则替换成文件本身。 promise.done(function() { var idx = $.inArray( promise, pending ); ~idx && pending.splice( idx, 1, file ); }); // befeore-send-file的钩子就有错误发生。 promise.fail(function( reason ) { file.setStatus( Status.ERROR, reason ); me.owner.trigger( 'uploadError', file, reason ); me.owner.trigger( 'uploadComplete', file ); }); pending.push( promise ); } }, // 让出位置了,可以让其他分片开始上传 _popBlock: function( block ) { var idx = $.inArray( block, this.pool ); this.pool.splice( idx, 1 ); block.file.remaning--; this.remaning--; }, // 开始上传,可以被掉过。如果promise被reject了,则表示跳过此分片。 _startSend: function( block ) { var me = this, file = block.file, promise; // 有可能在 before-send-file 的 promise 期间改变了文件状态。 // 如:暂停,取消 // 我们不能中断 promise, 但是可以在 promise 完后,不做上传操作。 if ( file.getStatus() !== Status.PROGRESS ) { // 如果是中断,则还需要放回去。 if (file.getStatus() === Status.INTERRUPT) { me._putback(block); } return; } me.pool.push( block ); me.remaning++; // 如果没有分片,则直接使用原始的。 // 不会丢失content-type信息。 block.blob = block.chunks === 1 ? file.source : file.source.slice( block.start, block.end ); // hook, 每个分片发送之前可能要做些异步的事情。 promise = me.request( 'before-send', block, function() { // 有可能文件已经上传出错了,所以不需要再传输了。 if ( file.getStatus() === Status.PROGRESS ) { me._doSend( block ); } else { me._popBlock( block ); Base.nextTick( me.__tick ); } }); // 如果为fail了,则跳过此分片。 promise.fail(function() { if ( file.remaning === 1 ) { me._finishFile( file ).always(function() { block.percentage = 1; me._popBlock( block ); me.owner.trigger( 'uploadComplete', file ); Base.nextTick( me.__tick ); }); } else { block.percentage = 1; me.updateFileProgress( file ); me._popBlock( block ); Base.nextTick( me.__tick ); } }); }, /** * @event uploadBeforeSend * @param {Object} object * @param {Object} data 默认的上传参数,可以扩展此对象来控制上传参数。 * @param {Object} headers 可以扩展此对象来控制上传头部。 * @description 当某个文件的分块在发送前触发,主要用来询问是否要添加附带参数,大文件在开起分片上传的前提下此事件可能会触发多次。 * @for Uploader */ /** * @event uploadAccept * @param {Object} object * @param {Object} ret 服务端的返回数据,json格式,如果服务端不是json格式,从ret._raw中取数据,自行解析。 * @description 当某个文件上传到服务端响应后,会派送此事件来询问服务端响应是否有效。如果此事件handler返回值为`false`, 则此文件将派送`server`类型的`uploadError`事件。 * @for Uploader */ /** * @event uploadProgress * @param {File} file File对象 * @param {Number} percentage 上传进度 * @description 上传过程中触发,携带上传进度。 * @for Uploader */ /** * @event uploadError * @param {File} file File对象 * @param {String} reason 出错的code * @description 当文件上传出错时触发。 * @for Uploader */ /** * @event uploadSuccess * @param {File} file File对象 * @param {Object} response 服务端返回的数据 * @description 当文件上传成功时触发。 * @for Uploader */ /** * @event uploadComplete * @param {File} [file] File对象 * @description 不管成功或者失败,文件上传完成时触发。 * @for Uploader */ // 做上传操作。 _doSend: function( block ) { var me = this, owner = me.owner, opts = me.options, file = block.file, tr = new Transport( opts ), data = $.extend({}, opts.formData ), headers = $.extend({}, opts.headers ), requestAccept, ret; block.transport = tr; tr.on( 'destroy', function() { delete block.transport; me._popBlock( block ); Base.nextTick( me.__tick ); }); // 广播上传进度。以文件为单位。 tr.on( 'progress', function( percentage ) { block.percentage = percentage; me.updateFileProgress( file ); }); // 用来询问,是否返回的结果是有错误的。 requestAccept = function( reject ) { var fn; ret = tr.getResponseAsJson() || {}; ret._raw = tr.getResponse(); fn = function( value ) { reject = value; }; // 服务端响应了,不代表成功了,询问是否响应正确。 if ( !owner.trigger( 'uploadAccept', block, ret, fn ) ) { reject = reject || 'server'; } return reject; }; // 尝试重试,然后广播文件上传出错。 tr.on( 'error', function( type, flag ) { block.retried = block.retried || 0; // 自动重试 if ( block.chunks > 1 && ~'http,abort'.indexOf( type ) && block.retried < opts.chunkRetry ) { block.retried++; tr.send(); } else { // http status 500 ~ 600 if ( !flag && type === 'server' ) { type = requestAccept( type ); } file.setStatus( Status.ERROR, type ); owner.trigger( 'uploadError', file, type ); owner.trigger( 'uploadComplete', file ); } }); // 上传成功 tr.on( 'load', function() { var reason; // 如果非预期,转向上传出错。 if ( (reason = requestAccept()) ) { tr.trigger( 'error', reason, true ); return; } // 全部上传完成。 if ( file.remaning === 1 ) { me._finishFile( file, ret ); } else { tr.destroy(); } }); // 配置默认的上传字段。 data = $.extend( data, { id: file.id, name: file.name, type: file.type, lastModifiedDate: file.lastModifiedDate, size: file.size }); block.chunks > 1 && $.extend( data, { chunks: block.chunks, chunk: block.chunk }); // 在发送之间可以添加字段什么的。。。 // 如果默认的字段不够使用,可以通过监听此事件来扩展 owner.trigger( 'uploadBeforeSend', block, data, headers ); // 开始发送。 tr.appendBlob( opts.fileVal, block.blob, file.name ); tr.append( data ); tr.setRequestHeader( headers ); tr.send(); }, // 完成上传。 _finishFile: function( file, ret, hds ) { var owner = this.owner; return owner .request( 'after-send-file', arguments, function() { file.setStatus( Status.COMPLETE ); owner.trigger( 'uploadSuccess', file, ret, hds ); }) .fail(function( reason ) { // 如果外部已经标记为invalid什么的,不再改状态。 if ( file.getStatus() === Status.PROGRESS ) { file.setStatus( Status.ERROR, reason ); } owner.trigger( 'uploadError', file, reason ); }) .always(function() { owner.trigger( 'uploadComplete', file ); }); }, updateFileProgress: function(file) { var totalPercent = 0, uploaded = 0; if (!file.blocks) { return; } $.each( file.blocks, function( _, v ) { uploaded += (v.percentage || 0) * (v.end - v.start); }); totalPercent = uploaded / file.size; this.owner.trigger( 'uploadProgress', file, totalPercent || 0 ); } }); }); /** * @fileOverview 各种验证,包括文件总大小是否超出、单文件是否超出和文件是否重复。 */ define('widgets/validator',[ 'base', 'uploader', 'file', 'widgets/widget' ], function( Base, Uploader, WUFile ) { var $ = Base.$, validators = {}, api; /** * @event error * @param {String} type 错误类型。 * @description 当validate不通过时,会以派送错误事件的形式通知调用者。通过`upload.on('error', handler)`可以捕获到此类错误,目前有以下错误会在特定的情况下派送错来。 * * * `Q_EXCEED_NUM_LIMIT` 在设置了`fileNumLimit`且尝试给`uploader`添加的文件数量超出这个值时派送。 * * `Q_EXCEED_SIZE_LIMIT` 在设置了`Q_EXCEED_SIZE_LIMIT`且尝试给`uploader`添加的文件总大小超出这个值时派送。 * * `Q_TYPE_DENIED` 当文件类型不满足时触发。。 * @for Uploader */ // 暴露给外面的api api = { // 添加验证器 addValidator: function( type, cb ) { validators[ type ] = cb; }, // 移除验证器 removeValidator: function( type ) { delete validators[ type ]; } }; // 在Uploader初始化的时候启动Validators的初始化 Uploader.register({ name: 'validator', init: function() { var me = this; Base.nextTick(function() { $.each( validators, function() { this.call( me.owner ); }); }); } }); /** * @property {int} [fileNumLimit=undefined] * @namespace options * @for Uploader * @description 验证文件总数量, 超出则不允许加入队列。 */ api.addValidator( 'fileNumLimit', function() { var uploader = this, opts = uploader.options, max = parseInt( opts.fileNumLimit ), count = 0, flag = true; if ( !max ) { return true; } uploader.on( 'beforeFileQueued', function( file ) { max = parseInt( opts.fileNumLimit ); if ( count >= max && flag ) { flag = false; this.trigger( 'error', 'Q_EXCEED_NUM_LIMIT', max, file ); setTimeout(function() { flag = true; }, 1 ); } return count >= max ? false : true; }); uploader.on( 'fileQueued', function() { count++; }); uploader.on( 'fileDequeued', function() { count--; }); uploader.on( 'reset', function() { count = 0; }); }); /** * @property {int} [fileSizeLimit=undefined] * @namespace options * @for Uploader * @description 验证文件总大小是否超出限制, 超出则不允许加入队列。 */ api.addValidator( 'fileSizeLimit', function() { var uploader = this, opts = uploader.options, count = 0, max = parseInt( opts.fileSizeLimit, 10 ), flag = true; if ( !max ) { return; } uploader.on( 'beforeFileQueued', function( file ) { var invalid = count + file.size > max; if ( invalid && flag ) { flag = false; this.trigger( 'error', 'Q_EXCEED_SIZE_LIMIT', max, file ); setTimeout(function() { flag = true; }, 1 ); } return invalid ? false : true; }); uploader.on( 'fileQueued', function( file ) { count += file.size; }); uploader.on( 'fileDequeued', function( file ) { count -= file.size; }); uploader.on( 'reset', function() { count = 0; }); }); /** * @property {int} [fileSingleSizeLimit=undefined] * @namespace options * @for Uploader * @description 验证单个文件大小是否超出限制, 超出则不允许加入队列。 */ api.addValidator( 'fileSingleSizeLimit', function() { var uploader = this, opts = uploader.options, max = opts.fileSingleSizeLimit; if ( !max ) { return; } uploader.on( 'beforeFileQueued', function( file ) { if ( file.size > max ) { file.setStatus( WUFile.Status.INVALID, 'exceed_size' ); this.trigger( 'error', 'F_EXCEED_SIZE', max, file ); return false; } }); }); /** * @property {Boolean} [duplicate=undefined] * @namespace options * @for Uploader * @description 去重, 根据文件名字、文件大小和最后修改时间来生成hash Key. */ api.addValidator( 'duplicate', function() { var uploader = this, opts = uploader.options, mapping = {}; if ( opts.duplicate ) { return; } function hashString( str ) { var hash = 0, i = 0, len = str.length, _char; for ( ; i < len; i++ ) { _char = str.charCodeAt( i ); hash = _char + (hash << 6) + (hash << 16) - hash; } return hash; } uploader.on( 'beforeFileQueued', function( file ) { var hash = file.__hash || (file.__hash = hashString( file.name + file.size + file.lastModifiedDate )); // 已经重复了 if ( mapping[ hash ] ) { this.trigger( 'error', 'F_DUPLICATE', file ); return false; } }); uploader.on( 'fileQueued', function( file ) { var hash = file.__hash; hash && (mapping[ hash ] = true); }); uploader.on( 'fileDequeued', function( file ) { var hash = file.__hash; hash && (delete mapping[ hash ]); }); uploader.on( 'reset', function() { mapping = {}; }); }); return api; }); /** * @fileOverview Md5 */ define('lib/md5',[ 'runtime/client', 'mediator' ], function( RuntimeClient, Mediator ) { function Md5() { RuntimeClient.call( this, 'Md5' ); } // 让 Md5 具备事件功能。 Mediator.installTo( Md5.prototype ); Md5.prototype.loadFromBlob = function( blob ) { var me = this; if ( me.getRuid() ) { me.disconnectRuntime(); } // 连接到blob归属的同一个runtime. me.connectRuntime( blob.ruid, function() { me.exec('init'); me.exec( 'loadFromBlob', blob ); }); }; Md5.prototype.getResult = function() { return this.exec('getResult'); }; return Md5; }); /** * @fileOverview 图片操作, 负责预览图片和上传前压缩图片 */ define('widgets/md5',[ 'base', 'uploader', 'lib/md5', 'lib/blob', 'widgets/widget' ], function( Base, Uploader, Md5, Blob ) { return Uploader.register({ name: 'md5', /** * 计算文件 md5 值,返回一个 promise 对象,可以监听 progress 进度。 * * * @method md5File * @grammar md5File( file[, start[, end]] ) => promise * @for Uploader * @example * * uploader.on( 'fileQueued', function( file ) { * var $li = ...; * * uploader.md5File( file ) * * // 及时显示进度 * .progress(function(percentage) { * console.log('Percentage:', percentage); * }) * * // 完成 * .then(function(val) { * console.log('md5 result:', val); * }); * * }); */ md5File: function( file, start, end ) { var md5 = new Md5(), deferred = Base.Deferred(), blob = (file instanceof Blob) ? file : this.request( 'get-file', file ).source; md5.on( 'progress load', function( e ) { e = e || {}; deferred.notify( e.total ? e.loaded / e.total : 1 ); }); md5.on( 'complete', function() { deferred.resolve( md5.getResult() ); }); md5.on( 'error', function( reason ) { deferred.reject( reason ); }); if ( arguments.length > 1 ) { start = start || 0; end = end || 0; start < 0 && (start = blob.size + start); end < 0 && (end = blob.size + end); end = Math.min( end, blob.size ); blob = blob.slice( start, end ); } md5.loadFromBlob( blob ); return deferred.promise(); } }); }); /** * @fileOverview Runtime管理器,负责Runtime的选择, 连接 */ define('runtime/compbase',[],function() { function CompBase( owner, runtime ) { this.owner = owner; this.options = owner.options; this.getRuntime = function() { return runtime; }; this.getRuid = function() { return runtime.uid; }; this.trigger = function() { return owner.trigger.apply( owner, arguments ); }; } return CompBase; }); /** * @fileOverview Html5Runtime */ define('runtime/html5/runtime',[ 'base', 'runtime/runtime', 'runtime/compbase' ], function( Base, Runtime, CompBase ) { var type = 'html5', components = {}; function Html5Runtime() { var pool = {}, me = this, destroy = this.destroy; Runtime.apply( me, arguments ); me.type = type; // 这个方法的调用者,实际上是RuntimeClient me.exec = function( comp, fn/*, args...*/) { var client = this, uid = client.uid, args = Base.slice( arguments, 2 ), instance; if ( components[ comp ] ) { instance = pool[ uid ] = pool[ uid ] || new components[ comp ]( client, me ); if ( instance[ fn ] ) { return instance[ fn ].apply( instance, args ); } } }; me.destroy = function() { // @todo 删除池子中的所有实例 return destroy && destroy.apply( this, arguments ); }; } Base.inherits( Runtime, { constructor: Html5Runtime, // 不需要连接其他程序,直接执行callback init: function() { var me = this; setTimeout(function() { me.trigger('ready'); }, 1 ); } }); // 注册Components Html5Runtime.register = function( name, component ) { var klass = components[ name ] = Base.inherits( CompBase, component ); return klass; }; // 注册html5运行时。 // 只有在支持的前提下注册。 if ( window.Blob && window.FileReader && window.DataView ) { Runtime.addRuntime( type, Html5Runtime ); } return Html5Runtime; }); /** * @fileOverview Blob Html实现 */ define('runtime/html5/blob',[ 'runtime/html5/runtime', 'lib/blob' ], function( Html5Runtime, Blob ) { return Html5Runtime.register( 'Blob', { slice: function( start, end ) { var blob = this.owner.source, slice = blob.slice || blob.webkitSlice || blob.mozSlice; blob = slice.call( blob, start, end ); return new Blob( this.getRuid(), blob ); } }); }); /** * @fileOverview FilePaste */ define('runtime/html5/dnd',[ 'base', 'runtime/html5/runtime', 'lib/file' ], function( Base, Html5Runtime, File ) { var $ = Base.$, prefix = 'webuploader-dnd-'; return Html5Runtime.register( 'DragAndDrop', { init: function() { var elem = this.elem = this.options.container; this.dragEnterHandler = Base.bindFn( this._dragEnterHandler, this ); this.dragOverHandler = Base.bindFn( this._dragOverHandler, this ); this.dragLeaveHandler = Base.bindFn( this._dragLeaveHandler, this ); this.dropHandler = Base.bindFn( this._dropHandler, this ); this.dndOver = false; elem.on( 'dragenter', this.dragEnterHandler ); elem.on( 'dragover', this.dragOverHandler ); elem.on( 'dragleave', this.dragLeaveHandler ); elem.on( 'drop', this.dropHandler ); if ( this.options.disableGlobalDnd ) { $( document ).on( 'dragover', this.dragOverHandler ); $( document ).on( 'drop', this.dropHandler ); } }, _dragEnterHandler: function( e ) { var me = this, denied = me._denied || false, items; e = e.originalEvent || e; if ( !me.dndOver ) { me.dndOver = true; // 注意只有 chrome 支持。 items = e.dataTransfer.items; if ( items && items.length ) { me._denied = denied = !me.trigger( 'accept', items ); } me.elem.addClass( prefix + 'over' ); me.elem[ denied ? 'addClass' : 'removeClass' ]( prefix + 'denied' ); } e.dataTransfer.dropEffect = denied ? 'none' : 'copy'; return false; }, _dragOverHandler: function( e ) { // 只处理框内的。 var parentElem = this.elem.parent().get( 0 ); if ( parentElem && !$.contains( parentElem, e.currentTarget ) ) { return false; } clearTimeout( this._leaveTimer ); this._dragEnterHandler.call( this, e ); return false; }, _dragLeaveHandler: function() { var me = this, handler; handler = function() { me.dndOver = false; me.elem.removeClass( prefix + 'over ' + prefix + 'denied' ); }; clearTimeout( me._leaveTimer ); me._leaveTimer = setTimeout( handler, 100 ); return false; }, _dropHandler: function( e ) { var me = this, ruid = me.getRuid(), parentElem = me.elem.parent().get( 0 ), dataTransfer, data; // 只处理框内的。 if ( parentElem && !$.contains( parentElem, e.currentTarget ) ) { return false; } e = e.originalEvent || e; dataTransfer = e.dataTransfer; // 如果是页面内拖拽,还不能处理,不阻止事件。 // 此处 ie11 下会报参数错误, try { data = dataTransfer.getData('text/html'); } catch( err ) { } if ( data ) { return; } me._getTansferFiles( dataTransfer, function( results ) { me.trigger( 'drop', $.map( results, function( file ) { return new File( ruid, file ); }) ); }); me.dndOver = false; me.elem.removeClass( prefix + 'over' ); return false; }, // 如果传入 callback 则去查看文件夹,否则只管当前文件夹。 _getTansferFiles: function( dataTransfer, callback ) { var results = [], promises = [], items, files, file, item, i, len, canAccessFolder; items = dataTransfer.items; files = dataTransfer.files; canAccessFolder = !!(items && items[ 0 ].webkitGetAsEntry); for ( i = 0, len = files.length; i < len; i++ ) { file = files[ i ]; item = items && items[ i ]; if ( canAccessFolder && item.webkitGetAsEntry().isDirectory ) { promises.push( this._traverseDirectoryTree( item.webkitGetAsEntry(), results ) ); } else { results.push( file ); } } Base.when.apply( Base, promises ).done(function() { if ( !results.length ) { return; } callback( results ); }); }, _traverseDirectoryTree: function( entry, results ) { var deferred = Base.Deferred(), me = this; if ( entry.isFile ) { entry.file(function( file ) { results.push( file ); deferred.resolve(); }); } else if ( entry.isDirectory ) { entry.createReader().readEntries(function( entries ) { var len = entries.length, promises = [], arr = [], // 为了保证顺序。 i; for ( i = 0; i < len; i++ ) { promises.push( me._traverseDirectoryTree( entries[ i ], arr ) ); } Base.when.apply( Base, promises ).then(function() { results.push.apply( results, arr ); deferred.resolve(); }, deferred.reject ); }); } return deferred.promise(); }, destroy: function() { var elem = this.elem; // 还没 init 就调用 destroy if (!elem) { return; } elem.off( 'dragenter', this.dragEnterHandler ); elem.off( 'dragover', this.dragOverHandler ); elem.off( 'dragleave', this.dragLeaveHandler ); elem.off( 'drop', this.dropHandler ); if ( this.options.disableGlobalDnd ) { $( document ).off( 'dragover', this.dragOverHandler ); $( document ).off( 'drop', this.dropHandler ); } } }); }); /** * @fileOverview FilePaste */ define('runtime/html5/filepaste',[ 'base', 'runtime/html5/runtime', 'lib/file' ], function( Base, Html5Runtime, File ) { return Html5Runtime.register( 'FilePaste', { init: function() { var opts = this.options, elem = this.elem = opts.container, accept = '.*', arr, i, len, item; // accetp的mimeTypes中生成匹配正则。 if ( opts.accept ) { arr = []; for ( i = 0, len = opts.accept.length; i < len; i++ ) { item = opts.accept[ i ].mimeTypes; item && arr.push( item ); } if ( arr.length ) { accept = arr.join(','); accept = accept.replace( /,/g, '|' ).replace( /\*/g, '.*' ); } } this.accept = accept = new RegExp( accept, 'i' ); this.hander = Base.bindFn( this._pasteHander, this ); elem.on( 'paste', this.hander ); }, _pasteHander: function( e ) { var allowed = [], ruid = this.getRuid(), items, item, blob, i, len; e = e.originalEvent || e; items = e.clipboardData.items; for ( i = 0, len = items.length; i < len; i++ ) { item = items[ i ]; if ( item.kind !== 'file' || !(blob = item.getAsFile()) ) { continue; } allowed.push( new File( ruid, blob ) ); } if ( allowed.length ) { // 不阻止非文件粘贴(文字粘贴)的事件冒泡 e.preventDefault(); e.stopPropagation(); this.trigger( 'paste', allowed ); } }, destroy: function() { this.elem.off( 'paste', this.hander ); } }); }); /** * @fileOverview FilePicker */ define('runtime/html5/filepicker',[ 'base', 'runtime/html5/runtime' ], function( Base, Html5Runtime ) { var $ = Base.$; return Html5Runtime.register( 'FilePicker', { init: function() { var container = this.getRuntime().getContainer(), me = this, owner = me.owner, opts = me.options, label = this.label = $( document.createElement('label') ), input = this.input = $( document.createElement('input') ), arr, i, len, mouseHandler; input.attr( 'type', 'file' ); input.attr( 'name', opts.name ); input.addClass('webuploader-element-invisible'); label.on( 'click', function() { input.trigger('click'); }); label.css({ opacity: 0, width: '100%', height: '100%', display: 'block', cursor: 'pointer', background: '#ffffff' }); if ( opts.multiple ) { input.attr( 'multiple', 'multiple' ); } // @todo Firefox不支持单独指定后缀 if ( opts.accept && opts.accept.length > 0 ) { arr = []; for ( i = 0, len = opts.accept.length; i < len; i++ ) { arr.push( opts.accept[ i ].mimeTypes ); } input.attr( 'accept', arr.join(',') ); } container.append( input ); container.append( label ); mouseHandler = function( e ) { owner.trigger( e.type ); }; input.on( 'change', function( e ) { var fn = arguments.callee, clone; me.files = e.target.files; // reset input clone = this.cloneNode( true ); clone.value = null; this.parentNode.replaceChild( clone, this ); input.off(); input = $( clone ).on( 'change', fn ) .on( 'mouseenter mouseleave', mouseHandler ); owner.trigger('change'); }); label.on( 'mouseenter mouseleave', mouseHandler ); }, getFiles: function() { return this.files; }, destroy: function() { this.input.off(); this.label.off(); } }); }); /** * Terms: * * Uint8Array, FileReader, BlobBuilder, atob, ArrayBuffer * @fileOverview Image控件 */ define('runtime/html5/util',[ 'base' ], function( Base ) { var urlAPI = window.createObjectURL && window || window.URL && URL.revokeObjectURL && URL || window.webkitURL, createObjectURL = Base.noop, revokeObjectURL = createObjectURL; if ( urlAPI ) { // 更安全的方式调用,比如android里面就能把context改成其他的对象。 createObjectURL = function() { return urlAPI.createObjectURL.apply( urlAPI, arguments ); }; revokeObjectURL = function() { return urlAPI.revokeObjectURL.apply( urlAPI, arguments ); }; } return { createObjectURL: createObjectURL, revokeObjectURL: revokeObjectURL, dataURL2Blob: function( dataURI ) { var byteStr, intArray, ab, i, mimetype, parts; parts = dataURI.split(','); if ( ~parts[ 0 ].indexOf('base64') ) { byteStr = atob( parts[ 1 ] ); } else { byteStr = decodeURIComponent( parts[ 1 ] ); } ab = new ArrayBuffer( byteStr.length ); intArray = new Uint8Array( ab ); for ( i = 0; i < byteStr.length; i++ ) { intArray[ i ] = byteStr.charCodeAt( i ); } mimetype = parts[ 0 ].split(':')[ 1 ].split(';')[ 0 ]; return this.arrayBufferToBlob( ab, mimetype ); }, dataURL2ArrayBuffer: function( dataURI ) { var byteStr, intArray, i, parts; parts = dataURI.split(','); if ( ~parts[ 0 ].indexOf('base64') ) { byteStr = atob( parts[ 1 ] ); } else { byteStr = decodeURIComponent( parts[ 1 ] ); } intArray = new Uint8Array( byteStr.length ); for ( i = 0; i < byteStr.length; i++ ) { intArray[ i ] = byteStr.charCodeAt( i ); } return intArray.buffer; }, arrayBufferToBlob: function( buffer, type ) { var builder = window.BlobBuilder || window.WebKitBlobBuilder, bb; // android不支持直接new Blob, 只能借助blobbuilder. if ( builder ) { bb = new builder(); bb.append( buffer ); return bb.getBlob( type ); } return new Blob([ buffer ], type ? { type: type } : {} ); }, // 抽出来主要是为了解决android下面canvas.toDataUrl不支持jpeg. // 你得到的结果是png. canvasToDataUrl: function( canvas, type, quality ) { return canvas.toDataURL( type, quality / 100 ); }, // imagemeat会复写这个方法,如果用户选择加载那个文件了的话。 parseMeta: function( blob, callback ) { callback( false, {}); }, // imagemeat会复写这个方法,如果用户选择加载那个文件了的话。 updateImageHead: function( data ) { return data; } }; }); /** * Terms: * * Uint8Array, FileReader, BlobBuilder, atob, ArrayBuffer * @fileOverview Image控件 */ define('runtime/html5/imagemeta',[ 'runtime/html5/util' ], function( Util ) { var api; api = { parsers: { 0xffe1: [] }, maxMetaDataSize: 262144, parse: function( blob, cb ) { var me = this, fr = new FileReader(); fr.onload = function() { cb( false, me._parse( this.result ) ); fr = fr.onload = fr.onerror = null; }; fr.onerror = function( e ) { cb( e.message ); fr = fr.onload = fr.onerror = null; }; blob = blob.slice( 0, me.maxMetaDataSize ); fr.readAsArrayBuffer( blob.getSource() ); }, _parse: function( buffer, noParse ) { if ( buffer.byteLength < 6 ) { return; } var dataview = new DataView( buffer ), offset = 2, maxOffset = dataview.byteLength - 4, headLength = offset, ret = {}, markerBytes, markerLength, parsers, i; if ( dataview.getUint16( 0 ) === 0xffd8 ) { while ( offset < maxOffset ) { markerBytes = dataview.getUint16( offset ); if ( markerBytes >= 0xffe0 && markerBytes <= 0xffef || markerBytes === 0xfffe ) { markerLength = dataview.getUint16( offset + 2 ) + 2; if ( offset + markerLength > dataview.byteLength ) { break; } parsers = api.parsers[ markerBytes ]; if ( !noParse && parsers ) { for ( i = 0; i < parsers.length; i += 1 ) { parsers[ i ].call( api, dataview, offset, markerLength, ret ); } } offset += markerLength; headLength = offset; } else { break; } } if ( headLength > 6 ) { if ( buffer.slice ) { ret.imageHead = buffer.slice( 2, headLength ); } else { // Workaround for IE10, which does not yet // support ArrayBuffer.slice: ret.imageHead = new Uint8Array( buffer ) .subarray( 2, headLength ); } } } return ret; }, updateImageHead: function( buffer, head ) { var data = this._parse( buffer, true ), buf1, buf2, bodyoffset; bodyoffset = 2; if ( data.imageHead ) { bodyoffset = 2 + data.imageHead.byteLength; } if ( buffer.slice ) { buf2 = buffer.slice( bodyoffset ); } else { buf2 = new Uint8Array( buffer ).subarray( bodyoffset ); } buf1 = new Uint8Array( head.byteLength + 2 + buf2.byteLength ); buf1[ 0 ] = 0xFF; buf1[ 1 ] = 0xD8; buf1.set( new Uint8Array( head ), 2 ); buf1.set( new Uint8Array( buf2 ), head.byteLength + 2 ); return buf1.buffer; } }; Util.parseMeta = function() { return api.parse.apply( api, arguments ); }; Util.updateImageHead = function() { return api.updateImageHead.apply( api, arguments ); }; return api; }); /** * 代码来自于:https://github.com/blueimp/JavaScript-Load-Image * 暂时项目中只用了orientation. * * 去除了 Exif Sub IFD Pointer, GPS Info IFD Pointer, Exif Thumbnail. * @fileOverview EXIF解析 */ // Sample // ==================================== // Make : Apple // Model : iPhone 4S // Orientation : 1 // XResolution : 72 [72/1] // YResolution : 72 [72/1] // ResolutionUnit : 2 // Software : QuickTime 7.7.1 // DateTime : 2013:09:01 22:53:55 // ExifIFDPointer : 190 // ExposureTime : 0.058823529411764705 [1/17] // FNumber : 2.4 [12/5] // ExposureProgram : Normal program // ISOSpeedRatings : 800 // ExifVersion : 0220 // DateTimeOriginal : 2013:09:01 22:52:51 // DateTimeDigitized : 2013:09:01 22:52:51 // ComponentsConfiguration : YCbCr // ShutterSpeedValue : 4.058893515764426 // ApertureValue : 2.5260688216892597 [4845/1918] // BrightnessValue : -0.3126686601998395 // MeteringMode : Pattern // Flash : Flash did not fire, compulsory flash mode // FocalLength : 4.28 [107/25] // SubjectArea : [4 values] // FlashpixVersion : 0100 // ColorSpace : 1 // PixelXDimension : 2448 // PixelYDimension : 3264 // SensingMethod : One-chip color area sensor // ExposureMode : 0 // WhiteBalance : Auto white balance // FocalLengthIn35mmFilm : 35 // SceneCaptureType : Standard define('runtime/html5/imagemeta/exif',[ 'base', 'runtime/html5/imagemeta' ], function( Base, ImageMeta ) { var EXIF = {}; EXIF.ExifMap = function() { return this; }; EXIF.ExifMap.prototype.map = { 'Orientation': 0x0112 }; EXIF.ExifMap.prototype.get = function( id ) { return this[ id ] || this[ this.map[ id ] ]; }; EXIF.exifTagTypes = { // byte, 8-bit unsigned int: 1: { getValue: function( dataView, dataOffset ) { return dataView.getUint8( dataOffset ); }, size: 1 }, // ascii, 8-bit byte: 2: { getValue: function( dataView, dataOffset ) { return String.fromCharCode( dataView.getUint8( dataOffset ) ); }, size: 1, ascii: true }, // short, 16 bit int: 3: { getValue: function( dataView, dataOffset, littleEndian ) { return dataView.getUint16( dataOffset, littleEndian ); }, size: 2 }, // long, 32 bit int: 4: { getValue: function( dataView, dataOffset, littleEndian ) { return dataView.getUint32( dataOffset, littleEndian ); }, size: 4 }, // rational = two long values, // first is numerator, second is denominator: 5: { getValue: function( dataView, dataOffset, littleEndian ) { return dataView.getUint32( dataOffset, littleEndian ) / dataView.getUint32( dataOffset + 4, littleEndian ); }, size: 8 }, // slong, 32 bit signed int: 9: { getValue: function( dataView, dataOffset, littleEndian ) { return dataView.getInt32( dataOffset, littleEndian ); }, size: 4 }, // srational, two slongs, first is numerator, second is denominator: 10: { getValue: function( dataView, dataOffset, littleEndian ) { return dataView.getInt32( dataOffset, littleEndian ) / dataView.getInt32( dataOffset + 4, littleEndian ); }, size: 8 } }; // undefined, 8-bit byte, value depending on field: EXIF.exifTagTypes[ 7 ] = EXIF.exifTagTypes[ 1 ]; EXIF.getExifValue = function( dataView, tiffOffset, offset, type, length, littleEndian ) { var tagType = EXIF.exifTagTypes[ type ], tagSize, dataOffset, values, i, str, c; if ( !tagType ) { Base.log('Invalid Exif data: Invalid tag type.'); return; } tagSize = tagType.size * length; // Determine if the value is contained in the dataOffset bytes, // or if the value at the dataOffset is a pointer to the actual data: dataOffset = tagSize > 4 ? tiffOffset + dataView.getUint32( offset + 8, littleEndian ) : (offset + 8); if ( dataOffset + tagSize > dataView.byteLength ) { Base.log('Invalid Exif data: Invalid data offset.'); return; } if ( length === 1 ) { return tagType.getValue( dataView, dataOffset, littleEndian ); } values = []; for ( i = 0; i < length; i += 1 ) { values[ i ] = tagType.getValue( dataView, dataOffset + i * tagType.size, littleEndian ); } if ( tagType.ascii ) { str = ''; // Concatenate the chars: for ( i = 0; i < values.length; i += 1 ) { c = values[ i ]; // Ignore the terminating NULL byte(s): if ( c === '\u0000' ) { break; } str += c; } return str; } return values; }; EXIF.parseExifTag = function( dataView, tiffOffset, offset, littleEndian, data ) { var tag = dataView.getUint16( offset, littleEndian ); data.exif[ tag ] = EXIF.getExifValue( dataView, tiffOffset, offset, dataView.getUint16( offset + 2, littleEndian ), // tag type dataView.getUint32( offset + 4, littleEndian ), // tag length littleEndian ); }; EXIF.parseExifTags = function( dataView, tiffOffset, dirOffset, littleEndian, data ) { var tagsNumber, dirEndOffset, i; if ( dirOffset + 6 > dataView.byteLength ) { Base.log('Invalid Exif data: Invalid directory offset.'); return; } tagsNumber = dataView.getUint16( dirOffset, littleEndian ); dirEndOffset = dirOffset + 2 + 12 * tagsNumber; if ( dirEndOffset + 4 > dataView.byteLength ) { Base.log('Invalid Exif data: Invalid directory size.'); return; } for ( i = 0; i < tagsNumber; i += 1 ) { this.parseExifTag( dataView, tiffOffset, dirOffset + 2 + 12 * i, // tag offset littleEndian, data ); } // Return the offset to the next directory: return dataView.getUint32( dirEndOffset, littleEndian ); }; // EXIF.getExifThumbnail = function(dataView, offset, length) { // var hexData, // i, // b; // if (!length || offset + length > dataView.byteLength) { // Base.log('Invalid Exif data: Invalid thumbnail data.'); // return; // } // hexData = []; // for (i = 0; i < length; i += 1) { // b = dataView.getUint8(offset + i); // hexData.push((b < 16 ? '0' : '') + b.toString(16)); // } // return 'data:image/jpeg,%' + hexData.join('%'); // }; EXIF.parseExifData = function( dataView, offset, length, data ) { var tiffOffset = offset + 10, littleEndian, dirOffset; // Check for the ASCII code for "Exif" (0x45786966): if ( dataView.getUint32( offset + 4 ) !== 0x45786966 ) { // No Exif data, might be XMP data instead return; } if ( tiffOffset + 8 > dataView.byteLength ) { Base.log('Invalid Exif data: Invalid segment size.'); return; } // Check for the two null bytes: if ( dataView.getUint16( offset + 8 ) !== 0x0000 ) { Base.log('Invalid Exif data: Missing byte alignment offset.'); return; } // Check the byte alignment: switch ( dataView.getUint16( tiffOffset ) ) { case 0x4949: littleEndian = true; break; case 0x4D4D: littleEndian = false; break; default: Base.log('Invalid Exif data: Invalid byte alignment marker.'); return; } // Check for the TIFF tag marker (0x002A): if ( dataView.getUint16( tiffOffset + 2, littleEndian ) !== 0x002A ) { Base.log('Invalid Exif data: Missing TIFF marker.'); return; } // Retrieve the directory offset bytes, usually 0x00000008 or 8 decimal: dirOffset = dataView.getUint32( tiffOffset + 4, littleEndian ); // Create the exif object to store the tags: data.exif = new EXIF.ExifMap(); // Parse the tags of the main image directory and retrieve the // offset to the next directory, usually the thumbnail directory: dirOffset = EXIF.parseExifTags( dataView, tiffOffset, tiffOffset + dirOffset, littleEndian, data ); // 尝试读取缩略图 // if ( dirOffset ) { // thumbnailData = {exif: {}}; // dirOffset = EXIF.parseExifTags( // dataView, // tiffOffset, // tiffOffset + dirOffset, // littleEndian, // thumbnailData // ); // // Check for JPEG Thumbnail offset: // if (thumbnailData.exif[0x0201]) { // data.exif.Thumbnail = EXIF.getExifThumbnail( // dataView, // tiffOffset + thumbnailData.exif[0x0201], // thumbnailData.exif[0x0202] // Thumbnail data length // ); // } // } }; ImageMeta.parsers[ 0xffe1 ].push( EXIF.parseExifData ); return EXIF; }); /** * 这个方式性能不行,但是可以解决android里面的toDataUrl的bug * android里面toDataUrl('image/jpege')得到的结果却是png. * * 所以这里没辙,只能借助这个工具 * @fileOverview jpeg encoder */ define('runtime/html5/jpegencoder',[], function( require, exports, module ) { /* Copyright (c) 2008, Adobe Systems Incorporated All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of Adobe Systems Incorporated nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* JPEG encoder ported to JavaScript and optimized by Andreas Ritter, www.bytestrom.eu, 11/2009 Basic GUI blocking jpeg encoder */ function JPEGEncoder(quality) { var self = this; var fround = Math.round; var ffloor = Math.floor; var YTable = new Array(64); var UVTable = new Array(64); var fdtbl_Y = new Array(64); var fdtbl_UV = new Array(64); var YDC_HT; var UVDC_HT; var YAC_HT; var UVAC_HT; var bitcode = new Array(65535); var category = new Array(65535); var outputfDCTQuant = new Array(64); var DU = new Array(64); var byteout = []; var bytenew = 0; var bytepos = 7; var YDU = new Array(64); var UDU = new Array(64); var VDU = new Array(64); var clt = new Array(256); var RGB_YUV_TABLE = new Array(2048); var currentQuality; var ZigZag = [ 0, 1, 5, 6,14,15,27,28, 2, 4, 7,13,16,26,29,42, 3, 8,12,17,25,30,41,43, 9,11,18,24,31,40,44,53, 10,19,23,32,39,45,52,54, 20,22,33,38,46,51,55,60, 21,34,37,47,50,56,59,61, 35,36,48,49,57,58,62,63 ]; var std_dc_luminance_nrcodes = [0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0]; var std_dc_luminance_values = [0,1,2,3,4,5,6,7,8,9,10,11]; var std_ac_luminance_nrcodes = [0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,0x7d]; var std_ac_luminance_values = [ 0x01,0x02,0x03,0x00,0x04,0x11,0x05,0x12, 0x21,0x31,0x41,0x06,0x13,0x51,0x61,0x07, 0x22,0x71,0x14,0x32,0x81,0x91,0xa1,0x08, 0x23,0x42,0xb1,0xc1,0x15,0x52,0xd1,0xf0, 0x24,0x33,0x62,0x72,0x82,0x09,0x0a,0x16, 0x17,0x18,0x19,0x1a,0x25,0x26,0x27,0x28, 0x29,0x2a,0x34,0x35,0x36,0x37,0x38,0x39, 0x3a,0x43,0x44,0x45,0x46,0x47,0x48,0x49, 0x4a,0x53,0x54,0x55,0x56,0x57,0x58,0x59, 0x5a,0x63,0x64,0x65,0x66,0x67,0x68,0x69, 0x6a,0x73,0x74,0x75,0x76,0x77,0x78,0x79, 0x7a,0x83,0x84,0x85,0x86,0x87,0x88,0x89, 0x8a,0x92,0x93,0x94,0x95,0x96,0x97,0x98, 0x99,0x9a,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7, 0xa8,0xa9,0xaa,0xb2,0xb3,0xb4,0xb5,0xb6, 0xb7,0xb8,0xb9,0xba,0xc2,0xc3,0xc4,0xc5, 0xc6,0xc7,0xc8,0xc9,0xca,0xd2,0xd3,0xd4, 0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xe1,0xe2, 0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea, 0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8, 0xf9,0xfa ]; var std_dc_chrominance_nrcodes = [0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0]; var std_dc_chrominance_values = [0,1,2,3,4,5,6,7,8,9,10,11]; var std_ac_chrominance_nrcodes = [0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,0x77]; var std_ac_chrominance_values = [ 0x00,0x01,0x02,0x03,0x11,0x04,0x05,0x21, 0x31,0x06,0x12,0x41,0x51,0x07,0x61,0x71, 0x13,0x22,0x32,0x81,0x08,0x14,0x42,0x91, 0xa1,0xb1,0xc1,0x09,0x23,0x33,0x52,0xf0, 0x15,0x62,0x72,0xd1,0x0a,0x16,0x24,0x34, 0xe1,0x25,0xf1,0x17,0x18,0x19,0x1a,0x26, 0x27,0x28,0x29,0x2a,0x35,0x36,0x37,0x38, 0x39,0x3a,0x43,0x44,0x45,0x46,0x47,0x48, 0x49,0x4a,0x53,0x54,0x55,0x56,0x57,0x58, 0x59,0x5a,0x63,0x64,0x65,0x66,0x67,0x68, 0x69,0x6a,0x73,0x74,0x75,0x76,0x77,0x78, 0x79,0x7a,0x82,0x83,0x84,0x85,0x86,0x87, 0x88,0x89,0x8a,0x92,0x93,0x94,0x95,0x96, 0x97,0x98,0x99,0x9a,0xa2,0xa3,0xa4,0xa5, 0xa6,0xa7,0xa8,0xa9,0xaa,0xb2,0xb3,0xb4, 0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xc2,0xc3, 0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xd2, 0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda, 0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9, 0xea,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8, 0xf9,0xfa ]; function initQuantTables(sf){ var YQT = [ 16, 11, 10, 16, 24, 40, 51, 61, 12, 12, 14, 19, 26, 58, 60, 55, 14, 13, 16, 24, 40, 57, 69, 56, 14, 17, 22, 29, 51, 87, 80, 62, 18, 22, 37, 56, 68,109,103, 77, 24, 35, 55, 64, 81,104,113, 92, 49, 64, 78, 87,103,121,120,101, 72, 92, 95, 98,112,100,103, 99 ]; for (var i = 0; i < 64; i++) { var t = ffloor((YQT[i]*sf+50)/100); if (t < 1) { t = 1; } else if (t > 255) { t = 255; } YTable[ZigZag[i]] = t; } var UVQT = [ 17, 18, 24, 47, 99, 99, 99, 99, 18, 21, 26, 66, 99, 99, 99, 99, 24, 26, 56, 99, 99, 99, 99, 99, 47, 66, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99 ]; for (var j = 0; j < 64; j++) { var u = ffloor((UVQT[j]*sf+50)/100); if (u < 1) { u = 1; } else if (u > 255) { u = 255; } UVTable[ZigZag[j]] = u; } var aasf = [ 1.0, 1.387039845, 1.306562965, 1.175875602, 1.0, 0.785694958, 0.541196100, 0.275899379 ]; var k = 0; for (var row = 0; row < 8; row++) { for (var col = 0; col < 8; col++) { fdtbl_Y[k] = (1.0 / (YTable [ZigZag[k]] * aasf[row] * aasf[col] * 8.0)); fdtbl_UV[k] = (1.0 / (UVTable[ZigZag[k]] * aasf[row] * aasf[col] * 8.0)); k++; } } } function computeHuffmanTbl(nrcodes, std_table){ var codevalue = 0; var pos_in_table = 0; var HT = new Array(); for (var k = 1; k <= 16; k++) { for (var j = 1; j <= nrcodes[k]; j++) { HT[std_table[pos_in_table]] = []; HT[std_table[pos_in_table]][0] = codevalue; HT[std_table[pos_in_table]][1] = k; pos_in_table++; codevalue++; } codevalue*=2; } return HT; } function initHuffmanTbl() { YDC_HT = computeHuffmanTbl(std_dc_luminance_nrcodes,std_dc_luminance_values); UVDC_HT = computeHuffmanTbl(std_dc_chrominance_nrcodes,std_dc_chrominance_values); YAC_HT = computeHuffmanTbl(std_ac_luminance_nrcodes,std_ac_luminance_values); UVAC_HT = computeHuffmanTbl(std_ac_chrominance_nrcodes,std_ac_chrominance_values); } function initCategoryNumber() { var nrlower = 1; var nrupper = 2; for (var cat = 1; cat <= 15; cat++) { //Positive numbers for (var nr = nrlower; nr<nrupper; nr++) { category[32767+nr] = cat; bitcode[32767+nr] = []; bitcode[32767+nr][1] = cat; bitcode[32767+nr][0] = nr; } //Negative numbers for (var nrneg =-(nrupper-1); nrneg<=-nrlower; nrneg++) { category[32767+nrneg] = cat; bitcode[32767+nrneg] = []; bitcode[32767+nrneg][1] = cat; bitcode[32767+nrneg][0] = nrupper-1+nrneg; } nrlower <<= 1; nrupper <<= 1; } } function initRGBYUVTable() { for(var i = 0; i < 256;i++) { RGB_YUV_TABLE[i] = 19595 * i; RGB_YUV_TABLE[(i+ 256)>>0] = 38470 * i; RGB_YUV_TABLE[(i+ 512)>>0] = 7471 * i + 0x8000; RGB_YUV_TABLE[(i+ 768)>>0] = -11059 * i; RGB_YUV_TABLE[(i+1024)>>0] = -21709 * i; RGB_YUV_TABLE[(i+1280)>>0] = 32768 * i + 0x807FFF; RGB_YUV_TABLE[(i+1536)>>0] = -27439 * i; RGB_YUV_TABLE[(i+1792)>>0] = - 5329 * i; } } // IO functions function writeBits(bs) { var value = bs[0]; var posval = bs[1]-1; while ( posval >= 0 ) { if (value & (1 << posval) ) { bytenew |= (1 << bytepos); } posval--; bytepos--; if (bytepos < 0) { if (bytenew == 0xFF) { writeByte(0xFF); writeByte(0); } else { writeByte(bytenew); } bytepos=7; bytenew=0; } } } function writeByte(value) { byteout.push(clt[value]); // write char directly instead of converting later } function writeWord(value) { writeByte((value>>8)&0xFF); writeByte((value )&0xFF); } // DCT & quantization core function fDCTQuant(data, fdtbl) { var d0, d1, d2, d3, d4, d5, d6, d7; /* Pass 1: process rows. */ var dataOff=0; var i; var I8 = 8; var I64 = 64; for (i=0; i<I8; ++i) { d0 = data[dataOff]; d1 = data[dataOff+1]; d2 = data[dataOff+2]; d3 = data[dataOff+3]; d4 = data[dataOff+4]; d5 = data[dataOff+5]; d6 = data[dataOff+6]; d7 = data[dataOff+7]; var tmp0 = d0 + d7; var tmp7 = d0 - d7; var tmp1 = d1 + d6; var tmp6 = d1 - d6; var tmp2 = d2 + d5; var tmp5 = d2 - d5; var tmp3 = d3 + d4; var tmp4 = d3 - d4; /* Even part */ var tmp10 = tmp0 + tmp3; /* phase 2 */ var tmp13 = tmp0 - tmp3; var tmp11 = tmp1 + tmp2; var tmp12 = tmp1 - tmp2; data[dataOff] = tmp10 + tmp11; /* phase 3 */ data[dataOff+4] = tmp10 - tmp11; var z1 = (tmp12 + tmp13) * 0.707106781; /* c4 */ data[dataOff+2] = tmp13 + z1; /* phase 5 */ data[dataOff+6] = tmp13 - z1; /* Odd part */ tmp10 = tmp4 + tmp5; /* phase 2 */ tmp11 = tmp5 + tmp6; tmp12 = tmp6 + tmp7; /* The rotator is modified from fig 4-8 to avoid extra negations. */ var z5 = (tmp10 - tmp12) * 0.382683433; /* c6 */ var z2 = 0.541196100 * tmp10 + z5; /* c2-c6 */ var z4 = 1.306562965 * tmp12 + z5; /* c2+c6 */ var z3 = tmp11 * 0.707106781; /* c4 */ var z11 = tmp7 + z3; /* phase 5 */ var z13 = tmp7 - z3; data[dataOff+5] = z13 + z2; /* phase 6 */ data[dataOff+3] = z13 - z2; data[dataOff+1] = z11 + z4; data[dataOff+7] = z11 - z4; dataOff += 8; /* advance pointer to next row */ } /* Pass 2: process columns. */ dataOff = 0; for (i=0; i<I8; ++i) { d0 = data[dataOff]; d1 = data[dataOff + 8]; d2 = data[dataOff + 16]; d3 = data[dataOff + 24]; d4 = data[dataOff + 32]; d5 = data[dataOff + 40]; d6 = data[dataOff + 48]; d7 = data[dataOff + 56]; var tmp0p2 = d0 + d7; var tmp7p2 = d0 - d7; var tmp1p2 = d1 + d6; var tmp6p2 = d1 - d6; var tmp2p2 = d2 + d5; var tmp5p2 = d2 - d5; var tmp3p2 = d3 + d4; var tmp4p2 = d3 - d4; /* Even part */ var tmp10p2 = tmp0p2 + tmp3p2; /* phase 2 */ var tmp13p2 = tmp0p2 - tmp3p2; var tmp11p2 = tmp1p2 + tmp2p2; var tmp12p2 = tmp1p2 - tmp2p2; data[dataOff] = tmp10p2 + tmp11p2; /* phase 3 */ data[dataOff+32] = tmp10p2 - tmp11p2; var z1p2 = (tmp12p2 + tmp13p2) * 0.707106781; /* c4 */ data[dataOff+16] = tmp13p2 + z1p2; /* phase 5 */ data[dataOff+48] = tmp13p2 - z1p2; /* Odd part */ tmp10p2 = tmp4p2 + tmp5p2; /* phase 2 */ tmp11p2 = tmp5p2 + tmp6p2; tmp12p2 = tmp6p2 + tmp7p2; /* The rotator is modified from fig 4-8 to avoid extra negations. */ var z5p2 = (tmp10p2 - tmp12p2) * 0.382683433; /* c6 */ var z2p2 = 0.541196100 * tmp10p2 + z5p2; /* c2-c6 */ var z4p2 = 1.306562965 * tmp12p2 + z5p2; /* c2+c6 */ var z3p2 = tmp11p2 * 0.707106781; /* c4 */ var z11p2 = tmp7p2 + z3p2; /* phase 5 */ var z13p2 = tmp7p2 - z3p2; data[dataOff+40] = z13p2 + z2p2; /* phase 6 */ data[dataOff+24] = z13p2 - z2p2; data[dataOff+ 8] = z11p2 + z4p2; data[dataOff+56] = z11p2 - z4p2; dataOff++; /* advance pointer to next column */ } // Quantize/descale the coefficients var fDCTQuant; for (i=0; i<I64; ++i) { // Apply the quantization and scaling factor & Round to nearest integer fDCTQuant = data[i]*fdtbl[i]; outputfDCTQuant[i] = (fDCTQuant > 0.0) ? ((fDCTQuant + 0.5)|0) : ((fDCTQuant - 0.5)|0); //outputfDCTQuant[i] = fround(fDCTQuant); } return outputfDCTQuant; } function writeAPP0() { writeWord(0xFFE0); // marker writeWord(16); // length writeByte(0x4A); // J writeByte(0x46); // F writeByte(0x49); // I writeByte(0x46); // F writeByte(0); // = "JFIF",'\0' writeByte(1); // versionhi writeByte(1); // versionlo writeByte(0); // xyunits writeWord(1); // xdensity writeWord(1); // ydensity writeByte(0); // thumbnwidth writeByte(0); // thumbnheight } function writeSOF0(width, height) { writeWord(0xFFC0); // marker writeWord(17); // length, truecolor YUV JPG writeByte(8); // precision writeWord(height); writeWord(width); writeByte(3); // nrofcomponents writeByte(1); // IdY writeByte(0x11); // HVY writeByte(0); // QTY writeByte(2); // IdU writeByte(0x11); // HVU writeByte(1); // QTU writeByte(3); // IdV writeByte(0x11); // HVV writeByte(1); // QTV } function writeDQT() { writeWord(0xFFDB); // marker writeWord(132); // length writeByte(0); for (var i=0; i<64; i++) { writeByte(YTable[i]); } writeByte(1); for (var j=0; j<64; j++) { writeByte(UVTable[j]); } } function writeDHT() { writeWord(0xFFC4); // marker writeWord(0x01A2); // length writeByte(0); // HTYDCinfo for (var i=0; i<16; i++) { writeByte(std_dc_luminance_nrcodes[i+1]); } for (var j=0; j<=11; j++) { writeByte(std_dc_luminance_values[j]); } writeByte(0x10); // HTYACinfo for (var k=0; k<16; k++) { writeByte(std_ac_luminance_nrcodes[k+1]); } for (var l=0; l<=161; l++) { writeByte(std_ac_luminance_values[l]); } writeByte(1); // HTUDCinfo for (var m=0; m<16; m++) { writeByte(std_dc_chrominance_nrcodes[m+1]); } for (var n=0; n<=11; n++) { writeByte(std_dc_chrominance_values[n]); } writeByte(0x11); // HTUACinfo for (var o=0; o<16; o++) { writeByte(std_ac_chrominance_nrcodes[o+1]); } for (var p=0; p<=161; p++) { writeByte(std_ac_chrominance_values[p]); } } function writeSOS() { writeWord(0xFFDA); // marker writeWord(12); // length writeByte(3); // nrofcomponents writeByte(1); // IdY writeByte(0); // HTY writeByte(2); // IdU writeByte(0x11); // HTU writeByte(3); // IdV writeByte(0x11); // HTV writeByte(0); // Ss writeByte(0x3f); // Se writeByte(0); // Bf } function processDU(CDU, fdtbl, DC, HTDC, HTAC){ var EOB = HTAC[0x00]; var M16zeroes = HTAC[0xF0]; var pos; var I16 = 16; var I63 = 63; var I64 = 64; var DU_DCT = fDCTQuant(CDU, fdtbl); //ZigZag reorder for (var j=0;j<I64;++j) { DU[ZigZag[j]]=DU_DCT[j]; } var Diff = DU[0] - DC; DC = DU[0]; //Encode DC if (Diff==0) { writeBits(HTDC[0]); // Diff might be 0 } else { pos = 32767+Diff; writeBits(HTDC[category[pos]]); writeBits(bitcode[pos]); } //Encode ACs var end0pos = 63; // was const... which is crazy for (; (end0pos>0)&&(DU[end0pos]==0); end0pos--) {}; //end0pos = first element in reverse order !=0 if ( end0pos == 0) { writeBits(EOB); return DC; } var i = 1; var lng; while ( i <= end0pos ) { var startpos = i; for (; (DU[i]==0) && (i<=end0pos); ++i) {} var nrzeroes = i-startpos; if ( nrzeroes >= I16 ) { lng = nrzeroes>>4; for (var nrmarker=1; nrmarker <= lng; ++nrmarker) writeBits(M16zeroes); nrzeroes = nrzeroes&0xF; } pos = 32767+DU[i]; writeBits(HTAC[(nrzeroes<<4)+category[pos]]); writeBits(bitcode[pos]); i++; } if ( end0pos != I63 ) { writeBits(EOB); } return DC; } function initCharLookupTable(){ var sfcc = String.fromCharCode; for(var i=0; i < 256; i++){ ///// ACHTUNG // 255 clt[i] = sfcc(i); } } this.encode = function(image,quality) // image data object { // var time_start = new Date().getTime(); if(quality) setQuality(quality); // Initialize bit writer byteout = new Array(); bytenew=0; bytepos=7; // Add JPEG headers writeWord(0xFFD8); // SOI writeAPP0(); writeDQT(); writeSOF0(image.width,image.height); writeDHT(); writeSOS(); // Encode 8x8 macroblocks var DCY=0; var DCU=0; var DCV=0; bytenew=0; bytepos=7; this.encode.displayName = "_encode_"; var imageData = image.data; var width = image.width; var height = image.height; var quadWidth = width*4; var tripleWidth = width*3; var x, y = 0; var r, g, b; var start,p, col,row,pos; while(y < height){ x = 0; while(x < quadWidth){ start = quadWidth * y + x; p = start; col = -1; row = 0; for(pos=0; pos < 64; pos++){ row = pos >> 3;// /8 col = ( pos & 7 ) * 4; // %8 p = start + ( row * quadWidth ) + col; if(y+row >= height){ // padding bottom p-= (quadWidth*(y+1+row-height)); } if(x+col >= quadWidth){ // padding right p-= ((x+col) - quadWidth +4) } r = imageData[ p++ ]; g = imageData[ p++ ]; b = imageData[ p++ ]; /* // calculate YUV values dynamically YDU[pos]=((( 0.29900)*r+( 0.58700)*g+( 0.11400)*b))-128; //-0x80 UDU[pos]=(((-0.16874)*r+(-0.33126)*g+( 0.50000)*b)); VDU[pos]=((( 0.50000)*r+(-0.41869)*g+(-0.08131)*b)); */ // use lookup table (slightly faster) YDU[pos] = ((RGB_YUV_TABLE[r] + RGB_YUV_TABLE[(g + 256)>>0] + RGB_YUV_TABLE[(b + 512)>>0]) >> 16)-128; UDU[pos] = ((RGB_YUV_TABLE[(r + 768)>>0] + RGB_YUV_TABLE[(g + 1024)>>0] + RGB_YUV_TABLE[(b + 1280)>>0]) >> 16)-128; VDU[pos] = ((RGB_YUV_TABLE[(r + 1280)>>0] + RGB_YUV_TABLE[(g + 1536)>>0] + RGB_YUV_TABLE[(b + 1792)>>0]) >> 16)-128; } DCY = processDU(YDU, fdtbl_Y, DCY, YDC_HT, YAC_HT); DCU = processDU(UDU, fdtbl_UV, DCU, UVDC_HT, UVAC_HT); DCV = processDU(VDU, fdtbl_UV, DCV, UVDC_HT, UVAC_HT); x+=32; } y+=8; } //////////////////////////////////////////////////////////////// // Do the bit alignment of the EOI marker if ( bytepos >= 0 ) { var fillbits = []; fillbits[1] = bytepos+1; fillbits[0] = (1<<(bytepos+1))-1; writeBits(fillbits); } writeWord(0xFFD9); //EOI var jpegDataUri = 'data:image/jpeg;base64,' + btoa(byteout.join('')); byteout = []; // benchmarking // var duration = new Date().getTime() - time_start; // console.log('Encoding time: '+ currentQuality + 'ms'); // return jpegDataUri }; function setQuality(quality){ if (quality <= 0) { quality = 1; } if (quality > 100) { quality = 100; } if(currentQuality == quality) return; // don't recalc if unchanged var sf = 0; if (quality < 50) { sf = Math.floor(5000 / quality); } else { sf = Math.floor(200 - quality*2); } initQuantTables(sf); currentQuality = quality; // console.log('Quality set to: '+quality +'%'); } function init(){ // var time_start = new Date().getTime(); if(!quality) quality = 50; // Create tables initCharLookupTable(); initHuffmanTbl(); initCategoryNumber(); initRGBYUVTable(); setQuality(quality); // var duration = new Date().getTime() - time_start; // console.log('Initialization '+ duration + 'ms'); } init(); }; JPEGEncoder.encode = function( data, quality ) { var encoder = new JPEGEncoder( quality ); return encoder.encode( data ); }; return JPEGEncoder; }); /** * @fileOverview Fix android canvas.toDataUrl bug. */ define('runtime/html5/androidpatch',[ 'runtime/html5/util', 'runtime/html5/jpegencoder', 'base' ], function( Util, encoder, Base ) { var origin = Util.canvasToDataUrl, supportJpeg; Util.canvasToDataUrl = function( canvas, type, quality ) { var ctx, w, h, fragement, parts; // 非android手机直接跳过。 if ( !Base.os.android ) { return origin.apply( null, arguments ); } // 检测是否canvas支持jpeg导出,根据数据格式来判断。 // JPEG 前两位分别是:255, 216 if ( type === 'image/jpeg' && typeof supportJpeg === 'undefined' ) { fragement = origin.apply( null, arguments ); parts = fragement.split(','); if ( ~parts[ 0 ].indexOf('base64') ) { fragement = atob( parts[ 1 ] ); } else { fragement = decodeURIComponent( parts[ 1 ] ); } fragement = fragement.substring( 0, 2 ); supportJpeg = fragement.charCodeAt( 0 ) === 255 && fragement.charCodeAt( 1 ) === 216; } // 只有在android环境下才修复 if ( type === 'image/jpeg' && !supportJpeg ) { w = canvas.width; h = canvas.height; ctx = canvas.getContext('2d'); return encoder.encode( ctx.getImageData( 0, 0, w, h ), quality ); } return origin.apply( null, arguments ); }; }); /** * @fileOverview Image */ define('runtime/html5/image',[ 'base', 'runtime/html5/runtime', 'runtime/html5/util' ], function( Base, Html5Runtime, Util ) { var BLANK = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs%3D'; return Html5Runtime.register( 'Image', { // flag: 标记是否被修改过。 modified: false, init: function() { var me = this, img = new Image(); img.onload = function() { me._info = { type: me.type, width: this.width, height: this.height }; // 读取meta信息。 if ( !me._metas && 'image/jpeg' === me.type ) { Util.parseMeta( me._blob, function( error, ret ) { me._metas = ret; me.owner.trigger('load'); }); } else { me.owner.trigger('load'); } }; img.onerror = function() { me.owner.trigger('error'); }; me._img = img; }, loadFromBlob: function( blob ) { var me = this, img = me._img; me._blob = blob; me.type = blob.type; img.src = Util.createObjectURL( blob.getSource() ); me.owner.once( 'load', function() { Util.revokeObjectURL( img.src ); }); }, resize: function( width, height ) { var canvas = this._canvas || (this._canvas = document.createElement('canvas')); this._resize( this._img, canvas, width, height ); this._blob = null; // 没用了,可以删掉了。 this.modified = true; this.owner.trigger( 'complete', 'resize' ); }, crop: function( x, y, w, h, s ) { var cvs = this._canvas || (this._canvas = document.createElement('canvas')), opts = this.options, img = this._img, iw = img.naturalWidth, ih = img.naturalHeight, orientation = this.getOrientation(); s = s || 1; // todo 解决 orientation 的问题。 // values that require 90 degree rotation // if ( ~[ 5, 6, 7, 8 ].indexOf( orientation ) ) { // switch ( orientation ) { // case 6: // tmp = x; // x = y; // y = iw * s - tmp - w; // console.log(ih * s, tmp, w) // break; // } // (w ^= h, h ^= w, w ^= h); // } cvs.width = w; cvs.height = h; opts.preserveHeaders || this._rotate2Orientaion( cvs, orientation ); this._renderImageToCanvas( cvs, img, -x, -y, iw * s, ih * s ); this._blob = null; // 没用了,可以删掉了。 this.modified = true; this.owner.trigger( 'complete', 'crop' ); }, getAsBlob: function( type ) { var blob = this._blob, opts = this.options, canvas; type = type || this.type; // blob需要重新生成。 if ( this.modified || this.type !== type ) { canvas = this._canvas; if ( type === 'image/jpeg' ) { blob = Util.canvasToDataUrl( canvas, type, opts.quality ); if ( opts.preserveHeaders && this._metas && this._metas.imageHead ) { blob = Util.dataURL2ArrayBuffer( blob ); blob = Util.updateImageHead( blob, this._metas.imageHead ); blob = Util.arrayBufferToBlob( blob, type ); return blob; } } else { blob = Util.canvasToDataUrl( canvas, type ); } blob = Util.dataURL2Blob( blob ); } return blob; }, getAsDataUrl: function( type ) { var opts = this.options; type = type || this.type; if ( type === 'image/jpeg' ) { return Util.canvasToDataUrl( this._canvas, type, opts.quality ); } else { return this._canvas.toDataURL( type ); } }, getOrientation: function() { return this._metas && this._metas.exif && this._metas.exif.get('Orientation') || 1; }, info: function( val ) { // setter if ( val ) { this._info = val; return this; } // getter return this._info; }, meta: function( val ) { // setter if ( val ) { this._meta = val; return this; } // getter return this._meta; }, destroy: function() { var canvas = this._canvas; this._img.onload = null; if ( canvas ) { canvas.getContext('2d') .clearRect( 0, 0, canvas.width, canvas.height ); canvas.width = canvas.height = 0; this._canvas = null; } // 释放内存。非常重要,否则释放不了image的内存。 this._img.src = BLANK; this._img = this._blob = null; }, _resize: function( img, cvs, width, height ) { var opts = this.options, naturalWidth = img.width, naturalHeight = img.height, orientation = this.getOrientation(), scale, w, h, x, y; // values that require 90 degree rotation if ( ~[ 5, 6, 7, 8 ].indexOf( orientation ) ) { // 交换width, height的值。 width ^= height; height ^= width; width ^= height; } scale = Math[ opts.crop ? 'max' : 'min' ]( width / naturalWidth, height / naturalHeight ); // 不允许放大。 opts.allowMagnify || (scale = Math.min( 1, scale )); w = naturalWidth * scale; h = naturalHeight * scale; if ( opts.crop ) { cvs.width = width; cvs.height = height; } else { cvs.width = w; cvs.height = h; } x = (cvs.width - w) / 2; y = (cvs.height - h) / 2; opts.preserveHeaders || this._rotate2Orientaion( cvs, orientation ); this._renderImageToCanvas( cvs, img, x, y, w, h ); }, _rotate2Orientaion: function( canvas, orientation ) { var width = canvas.width, height = canvas.height, ctx = canvas.getContext('2d'); switch ( orientation ) { case 5: case 6: case 7: case 8: canvas.width = height; canvas.height = width; break; } switch ( orientation ) { case 2: // horizontal flip ctx.translate( width, 0 ); ctx.scale( -1, 1 ); break; case 3: // 180 rotate left ctx.translate( width, height ); ctx.rotate( Math.PI ); break; case 4: // vertical flip ctx.translate( 0, height ); ctx.scale( 1, -1 ); break; case 5: // vertical flip + 90 rotate right ctx.rotate( 0.5 * Math.PI ); ctx.scale( 1, -1 ); break; case 6: // 90 rotate right ctx.rotate( 0.5 * Math.PI ); ctx.translate( 0, -height ); break; case 7: // horizontal flip + 90 rotate right ctx.rotate( 0.5 * Math.PI ); ctx.translate( width, -height ); ctx.scale( -1, 1 ); break; case 8: // 90 rotate left ctx.rotate( -0.5 * Math.PI ); ctx.translate( -width, 0 ); break; } }, // https://github.com/stomita/ios-imagefile-megapixel/ // blob/master/src/megapix-image.js _renderImageToCanvas: (function() { // 如果不是ios, 不需要这么复杂! if ( !Base.os.ios ) { return function( canvas ) { var args = Base.slice( arguments, 1 ), ctx = canvas.getContext('2d'); ctx.drawImage.apply( ctx, args ); }; } /** * Detecting vertical squash in loaded image. * Fixes a bug which squash image vertically while drawing into * canvas for some images. */ function detectVerticalSquash( img, iw, ih ) { var canvas = document.createElement('canvas'), ctx = canvas.getContext('2d'), sy = 0, ey = ih, py = ih, data, alpha, ratio; canvas.width = 1; canvas.height = ih; ctx.drawImage( img, 0, 0 ); data = ctx.getImageData( 0, 0, 1, ih ).data; // search image edge pixel position in case // it is squashed vertically. while ( py > sy ) { alpha = data[ (py - 1) * 4 + 3 ]; if ( alpha === 0 ) { ey = py; } else { sy = py; } py = (ey + sy) >> 1; } ratio = (py / ih); return (ratio === 0) ? 1 : ratio; } // fix ie7 bug // http://stackoverflow.com/questions/11929099/ // html5-canvas-drawimage-ratio-bug-ios if ( Base.os.ios >= 7 ) { return function( canvas, img, x, y, w, h ) { var iw = img.naturalWidth, ih = img.naturalHeight, vertSquashRatio = detectVerticalSquash( img, iw, ih ); return canvas.getContext('2d').drawImage( img, 0, 0, iw * vertSquashRatio, ih * vertSquashRatio, x, y, w, h ); }; } /** * Detect subsampling in loaded image. * In iOS, larger images than 2M pixels may be * subsampled in rendering. */ function detectSubsampling( img ) { var iw = img.naturalWidth, ih = img.naturalHeight, canvas, ctx; // subsampling may happen overmegapixel image if ( iw * ih > 1024 * 1024 ) { canvas = document.createElement('canvas'); canvas.width = canvas.height = 1; ctx = canvas.getContext('2d'); ctx.drawImage( img, -iw + 1, 0 ); // subsampled image becomes half smaller in rendering size. // check alpha channel value to confirm image is covering // edge pixel or not. if alpha value is 0 // image is not covering, hence subsampled. return ctx.getImageData( 0, 0, 1, 1 ).data[ 3 ] === 0; } else { return false; } } return function( canvas, img, x, y, width, height ) { var iw = img.naturalWidth, ih = img.naturalHeight, ctx = canvas.getContext('2d'), subsampled = detectSubsampling( img ), doSquash = this.type === 'image/jpeg', d = 1024, sy = 0, dy = 0, tmpCanvas, tmpCtx, vertSquashRatio, dw, dh, sx, dx; if ( subsampled ) { iw /= 2; ih /= 2; } ctx.save(); tmpCanvas = document.createElement('canvas'); tmpCanvas.width = tmpCanvas.height = d; tmpCtx = tmpCanvas.getContext('2d'); vertSquashRatio = doSquash ? detectVerticalSquash( img, iw, ih ) : 1; dw = Math.ceil( d * width / iw ); dh = Math.ceil( d * height / ih / vertSquashRatio ); while ( sy < ih ) { sx = 0; dx = 0; while ( sx < iw ) { tmpCtx.clearRect( 0, 0, d, d ); tmpCtx.drawImage( img, -sx, -sy ); ctx.drawImage( tmpCanvas, 0, 0, d, d, x + dx, y + dy, dw, dh ); sx += d; dx += dw; } sy += d; dy += dh; } ctx.restore(); tmpCanvas = tmpCtx = null; }; })() }); }); /** * @fileOverview Transport * @todo 支持chunked传输,优势: * 可以将大文件分成小块,挨个传输,可以提高大文件成功率,当失败的时候,也只需要重传那小部分, * 而不需要重头再传一次。另外断点续传也需要用chunked方式。 */ define('runtime/html5/transport',[ 'base', 'runtime/html5/runtime' ], function( Base, Html5Runtime ) { var noop = Base.noop, $ = Base.$; return Html5Runtime.register( 'Transport', { init: function() { this._status = 0; this._response = null; }, send: function() { var owner = this.owner, opts = this.options, xhr = this._initAjax(), blob = owner._blob, server = opts.server, formData, binary, fr; if ( opts.sendAsBinary ) { server += (/\?/.test( server ) ? '&' : '?') + $.param( owner._formData ); binary = blob.getSource(); } else { formData = new FormData(); $.each( owner._formData, function( k, v ) { formData.append( k, v ); }); formData.append( opts.fileVal, blob.getSource(), opts.filename || owner._formData.name || '' ); } if ( opts.withCredentials && 'withCredentials' in xhr ) { xhr.open( opts.method, server, true ); xhr.withCredentials = true; } else { xhr.open( opts.method, server ); } this._setRequestHeader( xhr, opts.headers ); if ( binary ) { // 强制设置成 content-type 为文件流。 xhr.overrideMimeType && xhr.overrideMimeType('application/octet-stream'); // android直接发送blob会导致服务端接收到的是空文件。 // bug详情。 // https://code.google.com/p/android/issues/detail?id=39882 // 所以先用fileReader读取出来再通过arraybuffer的方式发送。 if ( Base.os.android ) { fr = new FileReader(); fr.onload = function() { xhr.send( this.result ); fr = fr.onload = null; }; fr.readAsArrayBuffer( binary ); } else { xhr.send( binary ); } } else { xhr.send( formData ); } }, getResponse: function() { return this._response; }, getResponseAsJson: function() { return this._parseJson( this._response ); }, getStatus: function() { return this._status; }, abort: function() { var xhr = this._xhr; if ( xhr ) { xhr.upload.onprogress = noop; xhr.onreadystatechange = noop; xhr.abort(); this._xhr = xhr = null; } }, destroy: function() { this.abort(); }, _initAjax: function() { var me = this, xhr = new XMLHttpRequest(), opts = this.options; if ( opts.withCredentials && !('withCredentials' in xhr) && typeof XDomainRequest !== 'undefined' ) { xhr = new XDomainRequest(); } xhr.upload.onprogress = function( e ) { var percentage = 0; if ( e.lengthComputable ) { percentage = e.loaded / e.total; } return me.trigger( 'progress', percentage ); }; xhr.onreadystatechange = function() { if ( xhr.readyState !== 4 ) { return; } xhr.upload.onprogress = noop; xhr.onreadystatechange = noop; me._xhr = null; me._status = xhr.status; if ( xhr.status >= 200 && xhr.status < 300 ) { me._response = xhr.responseText; return me.trigger('load'); } else if ( xhr.status >= 500 && xhr.status < 600 ) { me._response = xhr.responseText; return me.trigger( 'error', 'server' ); } return me.trigger( 'error', me._status ? 'http' : 'abort' ); }; me._xhr = xhr; return xhr; }, _setRequestHeader: function( xhr, headers ) { $.each( headers, function( key, val ) { xhr.setRequestHeader( key, val ); }); }, _parseJson: function( str ) { var json; try { json = JSON.parse( str ); } catch ( ex ) { json = {}; } return json; } }); }); /** * @fileOverview Transport flash实现 */ define('runtime/html5/md5',[ 'runtime/html5/runtime' ], function( FlashRuntime ) { /* * Fastest md5 implementation around (JKM md5) * Credits: Joseph Myers * * @see http://www.myersdaily.org/joseph/javascript/md5-text.html * @see http://jsperf.com/md5-shootout/7 */ /* this function is much faster, so if possible we use it. Some IEs are the only ones I know of that need the idiotic second function, generated by an if clause. */ var add32 = function (a, b) { return (a + b) & 0xFFFFFFFF; }, cmn = function (q, a, b, x, s, t) { a = add32(add32(a, q), add32(x, t)); return add32((a << s) | (a >>> (32 - s)), b); }, ff = function (a, b, c, d, x, s, t) { return cmn((b & c) | ((~b) & d), a, b, x, s, t); }, gg = function (a, b, c, d, x, s, t) { return cmn((b & d) | (c & (~d)), a, b, x, s, t); }, hh = function (a, b, c, d, x, s, t) { return cmn(b ^ c ^ d, a, b, x, s, t); }, ii = function (a, b, c, d, x, s, t) { return cmn(c ^ (b | (~d)), a, b, x, s, t); }, md5cycle = function (x, k) { var a = x[0], b = x[1], c = x[2], d = x[3]; a = ff(a, b, c, d, k[0], 7, -680876936); d = ff(d, a, b, c, k[1], 12, -389564586); c = ff(c, d, a, b, k[2], 17, 606105819); b = ff(b, c, d, a, k[3], 22, -1044525330); a = ff(a, b, c, d, k[4], 7, -176418897); d = ff(d, a, b, c, k[5], 12, 1200080426); c = ff(c, d, a, b, k[6], 17, -1473231341); b = ff(b, c, d, a, k[7], 22, -45705983); a = ff(a, b, c, d, k[8], 7, 1770035416); d = ff(d, a, b, c, k[9], 12, -1958414417); c = ff(c, d, a, b, k[10], 17, -42063); b = ff(b, c, d, a, k[11], 22, -1990404162); a = ff(a, b, c, d, k[12], 7, 1804603682); d = ff(d, a, b, c, k[13], 12, -40341101); c = ff(c, d, a, b, k[14], 17, -1502002290); b = ff(b, c, d, a, k[15], 22, 1236535329); a = gg(a, b, c, d, k[1], 5, -165796510); d = gg(d, a, b, c, k[6], 9, -1069501632); c = gg(c, d, a, b, k[11], 14, 643717713); b = gg(b, c, d, a, k[0], 20, -373897302); a = gg(a, b, c, d, k[5], 5, -701558691); d = gg(d, a, b, c, k[10], 9, 38016083); c = gg(c, d, a, b, k[15], 14, -660478335); b = gg(b, c, d, a, k[4], 20, -405537848); a = gg(a, b, c, d, k[9], 5, 568446438); d = gg(d, a, b, c, k[14], 9, -1019803690); c = gg(c, d, a, b, k[3], 14, -187363961); b = gg(b, c, d, a, k[8], 20, 1163531501); a = gg(a, b, c, d, k[13], 5, -1444681467); d = gg(d, a, b, c, k[2], 9, -51403784); c = gg(c, d, a, b, k[7], 14, 1735328473); b = gg(b, c, d, a, k[12], 20, -1926607734); a = hh(a, b, c, d, k[5], 4, -378558); d = hh(d, a, b, c, k[8], 11, -2022574463); c = hh(c, d, a, b, k[11], 16, 1839030562); b = hh(b, c, d, a, k[14], 23, -35309556); a = hh(a, b, c, d, k[1], 4, -1530992060); d = hh(d, a, b, c, k[4], 11, 1272893353); c = hh(c, d, a, b, k[7], 16, -155497632); b = hh(b, c, d, a, k[10], 23, -1094730640); a = hh(a, b, c, d, k[13], 4, 681279174); d = hh(d, a, b, c, k[0], 11, -358537222); c = hh(c, d, a, b, k[3], 16, -722521979); b = hh(b, c, d, a, k[6], 23, 76029189); a = hh(a, b, c, d, k[9], 4, -640364487); d = hh(d, a, b, c, k[12], 11, -421815835); c = hh(c, d, a, b, k[15], 16, 530742520); b = hh(b, c, d, a, k[2], 23, -995338651); a = ii(a, b, c, d, k[0], 6, -198630844); d = ii(d, a, b, c, k[7], 10, 1126891415); c = ii(c, d, a, b, k[14], 15, -1416354905); b = ii(b, c, d, a, k[5], 21, -57434055); a = ii(a, b, c, d, k[12], 6, 1700485571); d = ii(d, a, b, c, k[3], 10, -1894986606); c = ii(c, d, a, b, k[10], 15, -1051523); b = ii(b, c, d, a, k[1], 21, -2054922799); a = ii(a, b, c, d, k[8], 6, 1873313359); d = ii(d, a, b, c, k[15], 10, -30611744); c = ii(c, d, a, b, k[6], 15, -1560198380); b = ii(b, c, d, a, k[13], 21, 1309151649); a = ii(a, b, c, d, k[4], 6, -145523070); d = ii(d, a, b, c, k[11], 10, -1120210379); c = ii(c, d, a, b, k[2], 15, 718787259); b = ii(b, c, d, a, k[9], 21, -343485551); x[0] = add32(a, x[0]); x[1] = add32(b, x[1]); x[2] = add32(c, x[2]); x[3] = add32(d, x[3]); }, /* there needs to be support for Unicode here, * unless we pretend that we can redefine the MD-5 * algorithm for multi-byte characters (perhaps * by adding every four 16-bit characters and * shortening the sum to 32 bits). Otherwise * I suggest performing MD-5 as if every character * was two bytes--e.g., 0040 0025 = @%--but then * how will an ordinary MD-5 sum be matched? * There is no way to standardize text to something * like UTF-8 before transformation; speed cost is * utterly prohibitive. The JavaScript standard * itself needs to look at this: it should start * providing access to strings as preformed UTF-8 * 8-bit unsigned value arrays. */ md5blk = function (s) { var md5blks = [], i; /* Andy King said do it this way. */ for (i = 0; i < 64; i += 4) { md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24); } return md5blks; }, md5blk_array = function (a) { var md5blks = [], i; /* Andy King said do it this way. */ for (i = 0; i < 64; i += 4) { md5blks[i >> 2] = a[i] + (a[i + 1] << 8) + (a[i + 2] << 16) + (a[i + 3] << 24); } return md5blks; }, md51 = function (s) { var n = s.length, state = [1732584193, -271733879, -1732584194, 271733878], i, length, tail, tmp, lo, hi; for (i = 64; i <= n; i += 64) { md5cycle(state, md5blk(s.substring(i - 64, i))); } s = s.substring(i - 64); length = s.length; tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; for (i = 0; i < length; i += 1) { tail[i >> 2] |= s.charCodeAt(i) << ((i % 4) << 3); } tail[i >> 2] |= 0x80 << ((i % 4) << 3); if (i > 55) { md5cycle(state, tail); for (i = 0; i < 16; i += 1) { tail[i] = 0; } } // Beware that the final length might not fit in 32 bits so we take care of that tmp = n * 8; tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/); lo = parseInt(tmp[2], 16); hi = parseInt(tmp[1], 16) || 0; tail[14] = lo; tail[15] = hi; md5cycle(state, tail); return state; }, md51_array = function (a) { var n = a.length, state = [1732584193, -271733879, -1732584194, 271733878], i, length, tail, tmp, lo, hi; for (i = 64; i <= n; i += 64) { md5cycle(state, md5blk_array(a.subarray(i - 64, i))); } // Not sure if it is a bug, however IE10 will always produce a sub array of length 1 // containing the last element of the parent array if the sub array specified starts // beyond the length of the parent array - weird. // https://connect.microsoft.com/IE/feedback/details/771452/typed-array-subarray-issue a = (i - 64) < n ? a.subarray(i - 64) : new Uint8Array(0); length = a.length; tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; for (i = 0; i < length; i += 1) { tail[i >> 2] |= a[i] << ((i % 4) << 3); } tail[i >> 2] |= 0x80 << ((i % 4) << 3); if (i > 55) { md5cycle(state, tail); for (i = 0; i < 16; i += 1) { tail[i] = 0; } } // Beware that the final length might not fit in 32 bits so we take care of that tmp = n * 8; tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/); lo = parseInt(tmp[2], 16); hi = parseInt(tmp[1], 16) || 0; tail[14] = lo; tail[15] = hi; md5cycle(state, tail); return state; }, hex_chr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'], rhex = function (n) { var s = '', j; for (j = 0; j < 4; j += 1) { s += hex_chr[(n >> (j * 8 + 4)) & 0x0F] + hex_chr[(n >> (j * 8)) & 0x0F]; } return s; }, hex = function (x) { var i; for (i = 0; i < x.length; i += 1) { x[i] = rhex(x[i]); } return x.join(''); }, md5 = function (s) { return hex(md51(s)); }, //////////////////////////////////////////////////////////////////////////// /** * SparkMD5 OOP implementation. * * Use this class to perform an incremental md5, otherwise use the * static methods instead. */ SparkMD5 = function () { // call reset to init the instance this.reset(); }; // In some cases the fast add32 function cannot be used.. if (md5('hello') !== '5d41402abc4b2a76b9719d911017c592') { add32 = function (x, y) { var lsw = (x & 0xFFFF) + (y & 0xFFFF), msw = (x >> 16) + (y >> 16) + (lsw >> 16); return (msw << 16) | (lsw & 0xFFFF); }; } /** * Appends a string. * A conversion will be applied if an utf8 string is detected. * * @param {String} str The string to be appended * * @return {SparkMD5} The instance itself */ SparkMD5.prototype.append = function (str) { // converts the string to utf8 bytes if necessary if (/[\u0080-\uFFFF]/.test(str)) { str = unescape(encodeURIComponent(str)); } // then append as binary this.appendBinary(str); return this; }; /** * Appends a binary string. * * @param {String} contents The binary string to be appended * * @return {SparkMD5} The instance itself */ SparkMD5.prototype.appendBinary = function (contents) { this._buff += contents; this._length += contents.length; var length = this._buff.length, i; for (i = 64; i <= length; i += 64) { md5cycle(this._state, md5blk(this._buff.substring(i - 64, i))); } this._buff = this._buff.substr(i - 64); return this; }; /** * Finishes the incremental computation, reseting the internal state and * returning the result. * Use the raw parameter to obtain the raw result instead of the hex one. * * @param {Boolean} raw True to get the raw result, false to get the hex result * * @return {String|Array} The result */ SparkMD5.prototype.end = function (raw) { var buff = this._buff, length = buff.length, i, tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], ret; for (i = 0; i < length; i += 1) { tail[i >> 2] |= buff.charCodeAt(i) << ((i % 4) << 3); } this._finish(tail, length); ret = !!raw ? this._state : hex(this._state); this.reset(); return ret; }; /** * Finish the final calculation based on the tail. * * @param {Array} tail The tail (will be modified) * @param {Number} length The length of the remaining buffer */ SparkMD5.prototype._finish = function (tail, length) { var i = length, tmp, lo, hi; tail[i >> 2] |= 0x80 << ((i % 4) << 3); if (i > 55) { md5cycle(this._state, tail); for (i = 0; i < 16; i += 1) { tail[i] = 0; } } // Do the final computation based on the tail and length // Beware that the final length may not fit in 32 bits so we take care of that tmp = this._length * 8; tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/); lo = parseInt(tmp[2], 16); hi = parseInt(tmp[1], 16) || 0; tail[14] = lo; tail[15] = hi; md5cycle(this._state, tail); }; /** * Resets the internal state of the computation. * * @return {SparkMD5} The instance itself */ SparkMD5.prototype.reset = function () { this._buff = ""; this._length = 0; this._state = [1732584193, -271733879, -1732584194, 271733878]; return this; }; /** * Releases memory used by the incremental buffer and other aditional * resources. If you plan to use the instance again, use reset instead. */ SparkMD5.prototype.destroy = function () { delete this._state; delete this._buff; delete this._length; }; /** * Performs the md5 hash on a string. * A conversion will be applied if utf8 string is detected. * * @param {String} str The string * @param {Boolean} raw True to get the raw result, false to get the hex result * * @return {String|Array} The result */ SparkMD5.hash = function (str, raw) { // converts the string to utf8 bytes if necessary if (/[\u0080-\uFFFF]/.test(str)) { str = unescape(encodeURIComponent(str)); } var hash = md51(str); return !!raw ? hash : hex(hash); }; /** * Performs the md5 hash on a binary string. * * @param {String} content The binary string * @param {Boolean} raw True to get the raw result, false to get the hex result * * @return {String|Array} The result */ SparkMD5.hashBinary = function (content, raw) { var hash = md51(content); return !!raw ? hash : hex(hash); }; /** * SparkMD5 OOP implementation for array buffers. * * Use this class to perform an incremental md5 ONLY for array buffers. */ SparkMD5.ArrayBuffer = function () { // call reset to init the instance this.reset(); }; //////////////////////////////////////////////////////////////////////////// /** * Appends an array buffer. * * @param {ArrayBuffer} arr The array to be appended * * @return {SparkMD5.ArrayBuffer} The instance itself */ SparkMD5.ArrayBuffer.prototype.append = function (arr) { // TODO: we could avoid the concatenation here but the algorithm would be more complex // if you find yourself needing extra performance, please make a PR. var buff = this._concatArrayBuffer(this._buff, arr), length = buff.length, i; this._length += arr.byteLength; for (i = 64; i <= length; i += 64) { md5cycle(this._state, md5blk_array(buff.subarray(i - 64, i))); } // Avoids IE10 weirdness (documented above) this._buff = (i - 64) < length ? buff.subarray(i - 64) : new Uint8Array(0); return this; }; /** * Finishes the incremental computation, reseting the internal state and * returning the result. * Use the raw parameter to obtain the raw result instead of the hex one. * * @param {Boolean} raw True to get the raw result, false to get the hex result * * @return {String|Array} The result */ SparkMD5.ArrayBuffer.prototype.end = function (raw) { var buff = this._buff, length = buff.length, tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], i, ret; for (i = 0; i < length; i += 1) { tail[i >> 2] |= buff[i] << ((i % 4) << 3); } this._finish(tail, length); ret = !!raw ? this._state : hex(this._state); this.reset(); return ret; }; SparkMD5.ArrayBuffer.prototype._finish = SparkMD5.prototype._finish; /** * Resets the internal state of the computation. * * @return {SparkMD5.ArrayBuffer} The instance itself */ SparkMD5.ArrayBuffer.prototype.reset = function () { this._buff = new Uint8Array(0); this._length = 0; this._state = [1732584193, -271733879, -1732584194, 271733878]; return this; }; /** * Releases memory used by the incremental buffer and other aditional * resources. If you plan to use the instance again, use reset instead. */ SparkMD5.ArrayBuffer.prototype.destroy = SparkMD5.prototype.destroy; /** * Concats two array buffers, returning a new one. * * @param {ArrayBuffer} first The first array buffer * @param {ArrayBuffer} second The second array buffer * * @return {ArrayBuffer} The new array buffer */ SparkMD5.ArrayBuffer.prototype._concatArrayBuffer = function (first, second) { var firstLength = first.length, result = new Uint8Array(firstLength + second.byteLength); result.set(first); result.set(new Uint8Array(second), firstLength); return result; }; /** * Performs the md5 hash on an array buffer. * * @param {ArrayBuffer} arr The array buffer * @param {Boolean} raw True to get the raw result, false to get the hex result * * @return {String|Array} The result */ SparkMD5.ArrayBuffer.hash = function (arr, raw) { var hash = md51_array(new Uint8Array(arr)); return !!raw ? hash : hex(hash); }; return FlashRuntime.register( 'Md5', { init: function() { // do nothing. }, loadFromBlob: function( file ) { var blob = file.getSource(), chunkSize = 2 * 1024 * 1024, chunks = Math.ceil( blob.size / chunkSize ), chunk = 0, owner = this.owner, spark = new SparkMD5.ArrayBuffer(), me = this, blobSlice = blob.mozSlice || blob.webkitSlice || blob.slice, loadNext, fr; fr = new FileReader(); loadNext = function() { var start, end; start = chunk * chunkSize; end = Math.min( start + chunkSize, blob.size ); fr.onload = function( e ) { spark.append( e.target.result ); owner.trigger( 'progress', { total: file.size, loaded: end }); }; fr.onloadend = function() { fr.onloadend = fr.onload = null; if ( ++chunk < chunks ) { setTimeout( loadNext, 1 ); } else { setTimeout(function(){ owner.trigger('load'); me.result = spark.end(); loadNext = file = blob = spark = null; owner.trigger('complete'); }, 50 ); } }; fr.readAsArrayBuffer( blobSlice.call( blob, start, end ) ); }; loadNext(); }, getResult: function() { return this.result; } }); }); /** * @fileOverview FlashRuntime */ define('runtime/flash/runtime',[ 'base', 'runtime/runtime', 'runtime/compbase' ], function( Base, Runtime, CompBase ) { var $ = Base.$, type = 'flash', components = {}; function getFlashVersion() { var version; try { version = navigator.plugins[ 'Shockwave Flash' ]; version = version.description; } catch ( ex ) { try { version = new ActiveXObject('ShockwaveFlash.ShockwaveFlash') .GetVariable('$version'); } catch ( ex2 ) { version = '0.0'; } } version = version.match( /\d+/g ); return parseFloat( version[ 0 ] + '.' + version[ 1 ], 10 ); } function FlashRuntime() { var pool = {}, clients = {}, destroy = this.destroy, me = this, jsreciver = Base.guid('webuploader_'); Runtime.apply( me, arguments ); me.type = type; // 这个方法的调用者,实际上是RuntimeClient me.exec = function( comp, fn/*, args...*/ ) { var client = this, uid = client.uid, args = Base.slice( arguments, 2 ), instance; clients[ uid ] = client; if ( components[ comp ] ) { if ( !pool[ uid ] ) { pool[ uid ] = new components[ comp ]( client, me ); } instance = pool[ uid ]; if ( instance[ fn ] ) { return instance[ fn ].apply( instance, args ); } } return me.flashExec.apply( client, arguments ); }; function handler( evt, obj ) { var type = evt.type || evt, parts, uid; parts = type.split('::'); uid = parts[ 0 ]; type = parts[ 1 ]; // console.log.apply( console, arguments ); if ( type === 'Ready' && uid === me.uid ) { me.trigger('ready'); } else if ( clients[ uid ] ) { clients[ uid ].trigger( type.toLowerCase(), evt, obj ); } // Base.log( evt, obj ); } // flash的接受器。 window[ jsreciver ] = function() { var args = arguments; // 为了能捕获得到。 setTimeout(function() { handler.apply( null, args ); }, 1 ); }; this.jsreciver = jsreciver; this.destroy = function() { // @todo 删除池子中的所有实例 return destroy && destroy.apply( this, arguments ); }; this.flashExec = function( comp, fn ) { var flash = me.getFlash(), args = Base.slice( arguments, 2 ); return flash.exec( this.uid, comp, fn, args ); }; // @todo } Base.inherits( Runtime, { constructor: FlashRuntime, init: function() { var container = this.getContainer(), opts = this.options, html; // if not the minimal height, shims are not initialized // in older browsers (e.g FF3.6, IE6,7,8, Safari 4.0,5.0, etc) container.css({ position: 'absolute', top: '-8px', left: '-8px', width: '9px', height: '9px', overflow: 'hidden' }); // insert flash object html = '<object id="' + this.uid + '" type="application/' + 'x-shockwave-flash" data="' + opts.swf + '" '; if ( Base.browser.ie ) { html += 'classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" '; } html += 'width="100%" height="100%" style="outline:0">' + '<param name="movie" value="' + opts.swf + '" />' + '<param name="flashvars" value="uid=' + this.uid + '&jsreciver=' + this.jsreciver + '" />' + '<param name="wmode" value="transparent" />' + '<param name="allowscriptaccess" value="always" />' + '</object>'; container.html( html ); }, getFlash: function() { if ( this._flash ) { return this._flash; } this._flash = $( '#' + this.uid ).get( 0 ); return this._flash; } }); FlashRuntime.register = function( name, component ) { component = components[ name ] = Base.inherits( CompBase, $.extend({ // @todo fix this later flashExec: function() { var owner = this.owner, runtime = this.getRuntime(); return runtime.flashExec.apply( owner, arguments ); } }, component ) ); return component; }; if ( getFlashVersion() >= 11.4 ) { Runtime.addRuntime( type, FlashRuntime ); } return FlashRuntime; }); /** * @fileOverview FilePicker */ define('runtime/flash/filepicker',[ 'base', 'runtime/flash/runtime' ], function( Base, FlashRuntime ) { var $ = Base.$; return FlashRuntime.register( 'FilePicker', { init: function( opts ) { var copy = $.extend({}, opts ), len, i; // 修复Flash再没有设置title的情况下无法弹出flash文件选择框的bug. len = copy.accept && copy.accept.length; for ( i = 0; i < len; i++ ) { if ( !copy.accept[ i ].title ) { copy.accept[ i ].title = 'Files'; } } delete copy.button; delete copy.id; delete copy.container; this.flashExec( 'FilePicker', 'init', copy ); }, destroy: function() { this.flashExec( 'FilePicker', 'destroy' ); } }); }); /** * @fileOverview 图片压缩 */ define('runtime/flash/image',[ 'runtime/flash/runtime' ], function( FlashRuntime ) { return FlashRuntime.register( 'Image', { // init: function( options ) { // var owner = this.owner; // this.flashExec( 'Image', 'init', options ); // owner.on( 'load', function() { // debugger; // }); // }, loadFromBlob: function( blob ) { var owner = this.owner; owner.info() && this.flashExec( 'Image', 'info', owner.info() ); owner.meta() && this.flashExec( 'Image', 'meta', owner.meta() ); this.flashExec( 'Image', 'loadFromBlob', blob.uid ); } }); }); /** * @fileOverview Transport flash实现 */ define('runtime/flash/transport',[ 'base', 'runtime/flash/runtime', 'runtime/client' ], function( Base, FlashRuntime, RuntimeClient ) { var $ = Base.$; return FlashRuntime.register( 'Transport', { init: function() { this._status = 0; this._response = null; this._responseJson = null; }, send: function() { var owner = this.owner, opts = this.options, xhr = this._initAjax(), blob = owner._blob, server = opts.server, binary; xhr.connectRuntime( blob.ruid ); if ( opts.sendAsBinary ) { server += (/\?/.test( server ) ? '&' : '?') + $.param( owner._formData ); binary = blob.uid; } else { $.each( owner._formData, function( k, v ) { xhr.exec( 'append', k, v ); }); xhr.exec( 'appendBlob', opts.fileVal, blob.uid, opts.filename || owner._formData.name || '' ); } this._setRequestHeader( xhr, opts.headers ); xhr.exec( 'send', { method: opts.method, url: server, forceURLStream: opts.forceURLStream, mimeType: 'application/octet-stream' }, binary ); }, getStatus: function() { return this._status; }, getResponse: function() { return this._response || ''; }, getResponseAsJson: function() { return this._responseJson; }, abort: function() { var xhr = this._xhr; if ( xhr ) { xhr.exec('abort'); xhr.destroy(); this._xhr = xhr = null; } }, destroy: function() { this.abort(); }, _initAjax: function() { var me = this, xhr = new RuntimeClient('XMLHttpRequest'); xhr.on( 'uploadprogress progress', function( e ) { var percent = e.loaded / e.total; percent = Math.min( 1, Math.max( 0, percent ) ); return me.trigger( 'progress', percent ); }); xhr.on( 'load', function() { var status = xhr.exec('getStatus'), readBody = false, err = '', p; xhr.off(); me._xhr = null; if ( status >= 200 && status < 300 ) { readBody = true; } else if ( status >= 500 && status < 600 ) { readBody = true; err = 'server'; } else { err = 'http'; } if ( readBody ) { me._response = xhr.exec('getResponse'); me._response = decodeURIComponent( me._response ); // flash 处理可能存在 bug, 没辙只能靠 js 了 // try { // me._responseJson = xhr.exec('getResponseAsJson'); // } catch ( error ) { p = window.JSON && window.JSON.parse || function( s ) { try { return new Function('return ' + s).call(); } catch ( err ) { return {}; } }; me._responseJson = me._response ? p(me._response) : {}; // } } xhr.destroy(); xhr = null; return err ? me.trigger( 'error', err ) : me.trigger('load'); }); xhr.on( 'error', function() { xhr.off(); me._xhr = null; me.trigger( 'error', 'http' ); }); me._xhr = xhr; return xhr; }, _setRequestHeader: function( xhr, headers ) { $.each( headers, function( key, val ) { xhr.exec( 'setRequestHeader', key, val ); }); } }); }); /** * @fileOverview Blob Html实现 */ define('runtime/flash/blob',[ 'runtime/flash/runtime', 'lib/blob' ], function( FlashRuntime, Blob ) { return FlashRuntime.register( 'Blob', { slice: function( start, end ) { var blob = this.flashExec( 'Blob', 'slice', start, end ); return new Blob( blob.uid, blob ); } }); }); /** * @fileOverview Md5 flash实现 */ define('runtime/flash/md5',[ 'runtime/flash/runtime' ], function( FlashRuntime ) { return FlashRuntime.register( 'Md5', { init: function() { // do nothing. }, loadFromBlob: function( blob ) { return this.flashExec( 'Md5', 'loadFromBlob', blob.uid ); } }); }); /** * @fileOverview 完全版本。 */ define('preset/all',[ 'base', // widgets 'widgets/filednd', 'widgets/filepaste', 'widgets/filepicker', 'widgets/image', 'widgets/queue', 'widgets/runtime', 'widgets/upload', 'widgets/validator', 'widgets/md5', // runtimes // html5 'runtime/html5/blob', 'runtime/html5/dnd', 'runtime/html5/filepaste', 'runtime/html5/filepicker', 'runtime/html5/imagemeta/exif', 'runtime/html5/androidpatch', 'runtime/html5/image', 'runtime/html5/transport', 'runtime/html5/md5', // flash 'runtime/flash/filepicker', 'runtime/flash/image', 'runtime/flash/transport', 'runtime/flash/blob', 'runtime/flash/md5' ], function( Base ) { return Base; }); /** * @fileOverview 日志组件,主要用来收集错误信息,可以帮助 webuploader 更好的定位问题和发展。 * * 如果您不想要启用此功能,请在打包的时候去掉 log 模块。 * * 或者可以在初始化的时候通过 options.disableWidgets 属性禁用。 * * 如: * WebUploader.create({ * ... * * disableWidgets: 'log', * * ... * }) */ define('widgets/log',[ 'base', 'uploader', 'widgets/widget' ], function( Base, Uploader ) { var $ = Base.$, logUrl = ' http://static.tieba.baidu.com/tb/pms/img/st.gif??', product = (location.hostname || location.host || 'protected').toLowerCase(), // 只针对 baidu 内部产品用户做统计功能。 enable = product && /baidu/i.exec(product), base; if (!enable) { return; } base = { dv: 3, master: 'webuploader', online: /test/.exec(product) ? 0 : 1, module: '', product: product, type: 0 }; function send(data) { var obj = $.extend({}, base, data), url = logUrl.replace(/^(.*)\?/, '$1' + $.param( obj )), image = new Image(); image.src = url; } return Uploader.register({ name: 'log', init: function() { var owner = this.owner, count = 0, size = 0; owner .on('error', function(code) { send({ type: 2, c_error_code: code }); }) .on('uploadError', function(file, reason) { send({ type: 2, c_error_code: 'UPLOAD_ERROR', c_reason: '' + reason }); }) .on('uploadComplete', function(file) { count++; size += file.size; }). on('uploadFinished', function() { send({ c_count: count, c_size: size }); count = size = 0; }); send({ c_usage: 1 }); } }); }); /** * @fileOverview Uploader上传类 */ define('webuploader',[ 'preset/all', 'widgets/log' ], function( preset ) { return preset; }); return require('webuploader'); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/webuploader/webuploader.noimage.js ================================================ /*! WebUploader 0.1.5 */ /** * @fileOverview 让内部各个部件的代码可以用[amd](https://github.com/amdjs/amdjs-api/wiki/AMD)模块定义方式组织起来。 * * AMD API 内部的简单不完全实现,请忽略。只有当WebUploader被合并成一个文件的时候才会引入。 */ (function( root, factory ) { var modules = {}, // 内部require, 简单不完全实现。 // https://github.com/amdjs/amdjs-api/wiki/require _require = function( deps, callback ) { var args, len, i; // 如果deps不是数组,则直接返回指定module if ( typeof deps === 'string' ) { return getModule( deps ); } else { args = []; for( len = deps.length, i = 0; i < len; i++ ) { args.push( getModule( deps[ i ] ) ); } return callback.apply( null, args ); } }, // 内部define,暂时不支持不指定id. _define = function( id, deps, factory ) { if ( arguments.length === 2 ) { factory = deps; deps = null; } _require( deps || [], function() { setModule( id, factory, arguments ); }); }, // 设置module, 兼容CommonJs写法。 setModule = function( id, factory, args ) { var module = { exports: factory }, returned; if ( typeof factory === 'function' ) { args.length || (args = [ _require, module.exports, module ]); returned = factory.apply( null, args ); returned !== undefined && (module.exports = returned); } modules[ id ] = module.exports; }, // 根据id获取module getModule = function( id ) { var module = modules[ id ] || root[ id ]; if ( !module ) { throw new Error( '`' + id + '` is undefined' ); } return module; }, // 将所有modules,将路径ids装换成对象。 exportsTo = function( obj ) { var key, host, parts, part, last, ucFirst; // make the first character upper case. ucFirst = function( str ) { return str && (str.charAt( 0 ).toUpperCase() + str.substr( 1 )); }; for ( key in modules ) { host = obj; if ( !modules.hasOwnProperty( key ) ) { continue; } parts = key.split('/'); last = ucFirst( parts.pop() ); while( (part = ucFirst( parts.shift() )) ) { host[ part ] = host[ part ] || {}; host = host[ part ]; } host[ last ] = modules[ key ]; } return obj; }, makeExport = function( dollar ) { root.__dollar = dollar; // exports every module. return exportsTo( factory( root, _define, _require ) ); }, origin; if ( typeof module === 'object' && typeof module.exports === 'object' ) { // For CommonJS and CommonJS-like environments where a proper window is present, module.exports = makeExport(); } else if ( typeof define === 'function' && define.amd ) { // Allow using this built library as an AMD module // in another project. That other project will only // see this AMD call, not the internal modules in // the closure below. define([ 'jquery' ], makeExport ); } else { // Browser globals case. Just assign the // result to a property on the global. origin = root.WebUploader; root.WebUploader = makeExport(); root.WebUploader.noConflict = function() { root.WebUploader = origin; }; } })( window, function( window, define, require ) { /** * @fileOverview jQuery or Zepto */ define('dollar-third',[],function() { var $ = window.__dollar || window.jQuery || window.Zepto; if ( !$ ) { throw new Error('jQuery or Zepto not found!'); } return $; }); /** * @fileOverview Dom 操作相关 */ define('dollar',[ 'dollar-third' ], function( _ ) { return _; }); /** * @fileOverview 使用jQuery的Promise */ define('promise-third',[ 'dollar' ], function( $ ) { return { Deferred: $.Deferred, when: $.when, isPromise: function( anything ) { return anything && typeof anything.then === 'function'; } }; }); /** * @fileOverview Promise/A+ */ define('promise',[ 'promise-third' ], function( _ ) { return _; }); /** * @fileOverview 基础类方法。 */ /** * Web Uploader内部类的详细说明,以下提及的功能类,都可以在`WebUploader`这个变量中访问到。 * * As you know, Web Uploader的每个文件都是用过[AMD](https://github.com/amdjs/amdjs-api/wiki/AMD)规范中的`define`组织起来的, 每个Module都会有个module id. * 默认module id为该文件的路径,而此路径将会转化成名字空间存放在WebUploader中。如: * * * module `base`:WebUploader.Base * * module `file`: WebUploader.File * * module `lib/dnd`: WebUploader.Lib.Dnd * * module `runtime/html5/dnd`: WebUploader.Runtime.Html5.Dnd * * * 以下文档中对类的使用可能省略掉了`WebUploader`前缀。 * @module WebUploader * @title WebUploader API文档 */ define('base',[ 'dollar', 'promise' ], function( $, promise ) { var noop = function() {}, call = Function.call; // http://jsperf.com/uncurrythis // 反科里化 function uncurryThis( fn ) { return function() { return call.apply( fn, arguments ); }; } function bindFn( fn, context ) { return function() { return fn.apply( context, arguments ); }; } function createObject( proto ) { var f; if ( Object.create ) { return Object.create( proto ); } else { f = function() {}; f.prototype = proto; return new f(); } } /** * 基础类,提供一些简单常用的方法。 * @class Base */ return { /** * @property {String} version 当前版本号。 */ version: '0.1.5', /** * @property {jQuery|Zepto} $ 引用依赖的jQuery或者Zepto对象。 */ $: $, Deferred: promise.Deferred, isPromise: promise.isPromise, when: promise.when, /** * @description 简单的浏览器检查结果。 * * * `webkit` webkit版本号,如果浏览器为非webkit内核,此属性为`undefined`。 * * `chrome` chrome浏览器版本号,如果浏览器为chrome,此属性为`undefined`。 * * `ie` ie浏览器版本号,如果浏览器为非ie,此属性为`undefined`。**暂不支持ie10+** * * `firefox` firefox浏览器版本号,如果浏览器为非firefox,此属性为`undefined`。 * * `safari` safari浏览器版本号,如果浏览器为非safari,此属性为`undefined`。 * * `opera` opera浏览器版本号,如果浏览器为非opera,此属性为`undefined`。 * * @property {Object} [browser] */ browser: (function( ua ) { var ret = {}, webkit = ua.match( /WebKit\/([\d.]+)/ ), chrome = ua.match( /Chrome\/([\d.]+)/ ) || ua.match( /CriOS\/([\d.]+)/ ), ie = ua.match( /MSIE\s([\d\.]+)/ ) || ua.match( /(?:trident)(?:.*rv:([\w.]+))?/i ), firefox = ua.match( /Firefox\/([\d.]+)/ ), safari = ua.match( /Safari\/([\d.]+)/ ), opera = ua.match( /OPR\/([\d.]+)/ ); webkit && (ret.webkit = parseFloat( webkit[ 1 ] )); chrome && (ret.chrome = parseFloat( chrome[ 1 ] )); ie && (ret.ie = parseFloat( ie[ 1 ] )); firefox && (ret.firefox = parseFloat( firefox[ 1 ] )); safari && (ret.safari = parseFloat( safari[ 1 ] )); opera && (ret.opera = parseFloat( opera[ 1 ] )); return ret; })( navigator.userAgent ), /** * @description 操作系统检查结果。 * * * `android` 如果在android浏览器环境下,此值为对应的android版本号,否则为`undefined`。 * * `ios` 如果在ios浏览器环境下,此值为对应的ios版本号,否则为`undefined`。 * @property {Object} [os] */ os: (function( ua ) { var ret = {}, // osx = !!ua.match( /\(Macintosh\; Intel / ), android = ua.match( /(?:Android);?[\s\/]+([\d.]+)?/ ), ios = ua.match( /(?:iPad|iPod|iPhone).*OS\s([\d_]+)/ ); // osx && (ret.osx = true); android && (ret.android = parseFloat( android[ 1 ] )); ios && (ret.ios = parseFloat( ios[ 1 ].replace( /_/g, '.' ) )); return ret; })( navigator.userAgent ), /** * 实现类与类之间的继承。 * @method inherits * @grammar Base.inherits( super ) => child * @grammar Base.inherits( super, protos ) => child * @grammar Base.inherits( super, protos, statics ) => child * @param {Class} super 父类 * @param {Object | Function} [protos] 子类或者对象。如果对象中包含constructor,子类将是用此属性值。 * @param {Function} [protos.constructor] 子类构造器,不指定的话将创建个临时的直接执行父类构造器的方法。 * @param {Object} [statics] 静态属性或方法。 * @return {Class} 返回子类。 * @example * function Person() { * console.log( 'Super' ); * } * Person.prototype.hello = function() { * console.log( 'hello' ); * }; * * var Manager = Base.inherits( Person, { * world: function() { * console.log( 'World' ); * } * }); * * // 因为没有指定构造器,父类的构造器将会执行。 * var instance = new Manager(); // => Super * * // 继承子父类的方法 * instance.hello(); // => hello * instance.world(); // => World * * // 子类的__super__属性指向父类 * console.log( Manager.__super__ === Person ); // => true */ inherits: function( Super, protos, staticProtos ) { var child; if ( typeof protos === 'function' ) { child = protos; protos = null; } else if ( protos && protos.hasOwnProperty('constructor') ) { child = protos.constructor; } else { child = function() { return Super.apply( this, arguments ); }; } // 复制静态方法 $.extend( true, child, Super, staticProtos || {} ); /* jshint camelcase: false */ // 让子类的__super__属性指向父类。 child.__super__ = Super.prototype; // 构建原型,添加原型方法或属性。 // 暂时用Object.create实现。 child.prototype = createObject( Super.prototype ); protos && $.extend( true, child.prototype, protos ); return child; }, /** * 一个不做任何事情的方法。可以用来赋值给默认的callback. * @method noop */ noop: noop, /** * 返回一个新的方法,此方法将已指定的`context`来执行。 * @grammar Base.bindFn( fn, context ) => Function * @method bindFn * @example * var doSomething = function() { * console.log( this.name ); * }, * obj = { * name: 'Object Name' * }, * aliasFn = Base.bind( doSomething, obj ); * * aliasFn(); // => Object Name * */ bindFn: bindFn, /** * 引用Console.log如果存在的话,否则引用一个[空函数noop](#WebUploader:Base.noop)。 * @grammar Base.log( args... ) => undefined * @method log */ log: (function() { if ( window.console ) { return bindFn( console.log, console ); } return noop; })(), nextTick: (function() { return function( cb ) { setTimeout( cb, 1 ); }; // @bug 当浏览器不在当前窗口时就停了。 // var next = window.requestAnimationFrame || // window.webkitRequestAnimationFrame || // window.mozRequestAnimationFrame || // function( cb ) { // window.setTimeout( cb, 1000 / 60 ); // }; // // fix: Uncaught TypeError: Illegal invocation // return bindFn( next, window ); })(), /** * 被[uncurrythis](http://www.2ality.com/2011/11/uncurrying-this.html)的数组slice方法。 * 将用来将非数组对象转化成数组对象。 * @grammar Base.slice( target, start[, end] ) => Array * @method slice * @example * function doSomthing() { * var args = Base.slice( arguments, 1 ); * console.log( args ); * } * * doSomthing( 'ignored', 'arg2', 'arg3' ); // => Array ["arg2", "arg3"] */ slice: uncurryThis( [].slice ), /** * 生成唯一的ID * @method guid * @grammar Base.guid() => String * @grammar Base.guid( prefx ) => String */ guid: (function() { var counter = 0; return function( prefix ) { var guid = (+new Date()).toString( 32 ), i = 0; for ( ; i < 5; i++ ) { guid += Math.floor( Math.random() * 65535 ).toString( 32 ); } return (prefix || 'wu_') + guid + (counter++).toString( 32 ); }; })(), /** * 格式化文件大小, 输出成带单位的字符串 * @method formatSize * @grammar Base.formatSize( size ) => String * @grammar Base.formatSize( size, pointLength ) => String * @grammar Base.formatSize( size, pointLength, units ) => String * @param {Number} size 文件大小 * @param {Number} [pointLength=2] 精确到的小数点数。 * @param {Array} [units=[ 'B', 'K', 'M', 'G', 'TB' ]] 单位数组。从字节,到千字节,一直往上指定。如果单位数组里面只指定了到了K(千字节),同时文件大小大于M, 此方法的输出将还是显示成多少K. * @example * console.log( Base.formatSize( 100 ) ); // => 100B * console.log( Base.formatSize( 1024 ) ); // => 1.00K * console.log( Base.formatSize( 1024, 0 ) ); // => 1K * console.log( Base.formatSize( 1024 * 1024 ) ); // => 1.00M * console.log( Base.formatSize( 1024 * 1024 * 1024 ) ); // => 1.00G * console.log( Base.formatSize( 1024 * 1024 * 1024, 0, ['B', 'KB', 'MB'] ) ); // => 1024MB */ formatSize: function( size, pointLength, units ) { var unit; units = units || [ 'B', 'K', 'M', 'G', 'TB' ]; while ( (unit = units.shift()) && size > 1024 ) { size = size / 1024; } return (unit === 'B' ? size : size.toFixed( pointLength || 2 )) + unit; } }; }); /** * 事件处理类,可以独立使用,也可以扩展给对象使用。 * @fileOverview Mediator */ define('mediator',[ 'base' ], function( Base ) { var $ = Base.$, slice = [].slice, separator = /\s+/, protos; // 根据条件过滤出事件handlers. function findHandlers( arr, name, callback, context ) { return $.grep( arr, function( handler ) { return handler && (!name || handler.e === name) && (!callback || handler.cb === callback || handler.cb._cb === callback) && (!context || handler.ctx === context); }); } function eachEvent( events, callback, iterator ) { // 不支持对象,只支持多个event用空格隔开 $.each( (events || '').split( separator ), function( _, key ) { iterator( key, callback ); }); } function triggerHanders( events, args ) { var stoped = false, i = -1, len = events.length, handler; while ( ++i < len ) { handler = events[ i ]; if ( handler.cb.apply( handler.ctx2, args ) === false ) { stoped = true; break; } } return !stoped; } protos = { /** * 绑定事件。 * * `callback`方法在执行时,arguments将会来源于trigger的时候携带的参数。如 * ```javascript * var obj = {}; * * // 使得obj有事件行为 * Mediator.installTo( obj ); * * obj.on( 'testa', function( arg1, arg2 ) { * console.log( arg1, arg2 ); // => 'arg1', 'arg2' * }); * * obj.trigger( 'testa', 'arg1', 'arg2' ); * ``` * * 如果`callback`中,某一个方法`return false`了,则后续的其他`callback`都不会被执行到。 * 切会影响到`trigger`方法的返回值,为`false`。 * * `on`还可以用来添加一个特殊事件`all`, 这样所有的事件触发都会响应到。同时此类`callback`中的arguments有一个不同处, * 就是第一个参数为`type`,记录当前是什么事件在触发。此类`callback`的优先级比脚低,会再正常`callback`执行完后触发。 * ```javascript * obj.on( 'all', function( type, arg1, arg2 ) { * console.log( type, arg1, arg2 ); // => 'testa', 'arg1', 'arg2' * }); * ``` * * @method on * @grammar on( name, callback[, context] ) => self * @param {String} name 事件名,支持多个事件用空格隔开 * @param {Function} callback 事件处理器 * @param {Object} [context] 事件处理器的上下文。 * @return {self} 返回自身,方便链式 * @chainable * @class Mediator */ on: function( name, callback, context ) { var me = this, set; if ( !callback ) { return this; } set = this._events || (this._events = []); eachEvent( name, callback, function( name, callback ) { var handler = { e: name }; handler.cb = callback; handler.ctx = context; handler.ctx2 = context || me; handler.id = set.length; set.push( handler ); }); return this; }, /** * 绑定事件,且当handler执行完后,自动解除绑定。 * @method once * @grammar once( name, callback[, context] ) => self * @param {String} name 事件名 * @param {Function} callback 事件处理器 * @param {Object} [context] 事件处理器的上下文。 * @return {self} 返回自身,方便链式 * @chainable */ once: function( name, callback, context ) { var me = this; if ( !callback ) { return me; } eachEvent( name, callback, function( name, callback ) { var once = function() { me.off( name, once ); return callback.apply( context || me, arguments ); }; once._cb = callback; me.on( name, once, context ); }); return me; }, /** * 解除事件绑定 * @method off * @grammar off( [name[, callback[, context] ] ] ) => self * @param {String} [name] 事件名 * @param {Function} [callback] 事件处理器 * @param {Object} [context] 事件处理器的上下文。 * @return {self} 返回自身,方便链式 * @chainable */ off: function( name, cb, ctx ) { var events = this._events; if ( !events ) { return this; } if ( !name && !cb && !ctx ) { this._events = []; return this; } eachEvent( name, cb, function( name, cb ) { $.each( findHandlers( events, name, cb, ctx ), function() { delete events[ this.id ]; }); }); return this; }, /** * 触发事件 * @method trigger * @grammar trigger( name[, args...] ) => self * @param {String} type 事件名 * @param {*} [...] 任意参数 * @return {Boolean} 如果handler中return false了,则返回false, 否则返回true */ trigger: function( type ) { var args, events, allEvents; if ( !this._events || !type ) { return this; } args = slice.call( arguments, 1 ); events = findHandlers( this._events, type ); allEvents = findHandlers( this._events, 'all' ); return triggerHanders( events, args ) && triggerHanders( allEvents, arguments ); } }; /** * 中介者,它本身是个单例,但可以通过[installTo](#WebUploader:Mediator:installTo)方法,使任何对象具备事件行为。 * 主要目的是负责模块与模块之间的合作,降低耦合度。 * * @class Mediator */ return $.extend({ /** * 可以通过这个接口,使任何对象具备事件功能。 * @method installTo * @param {Object} obj 需要具备事件行为的对象。 * @return {Object} 返回obj. */ installTo: function( obj ) { return $.extend( obj, protos ); } }, protos ); }); /** * @fileOverview Uploader上传类 */ define('uploader',[ 'base', 'mediator' ], function( Base, Mediator ) { var $ = Base.$; /** * 上传入口类。 * @class Uploader * @constructor * @grammar new Uploader( opts ) => Uploader * @example * var uploader = WebUploader.Uploader({ * swf: 'path_of_swf/Uploader.swf', * * // 开起分片上传。 * chunked: true * }); */ function Uploader( opts ) { this.options = $.extend( true, {}, Uploader.options, opts ); this._init( this.options ); } // default Options // widgets中有相应扩展 Uploader.options = {}; Mediator.installTo( Uploader.prototype ); // 批量添加纯命令式方法。 $.each({ upload: 'start-upload', stop: 'stop-upload', getFile: 'get-file', getFiles: 'get-files', addFile: 'add-file', addFiles: 'add-file', sort: 'sort-files', removeFile: 'remove-file', cancelFile: 'cancel-file', skipFile: 'skip-file', retry: 'retry', isInProgress: 'is-in-progress', makeThumb: 'make-thumb', md5File: 'md5-file', getDimension: 'get-dimension', addButton: 'add-btn', predictRuntimeType: 'predict-runtime-type', refresh: 'refresh', disable: 'disable', enable: 'enable', reset: 'reset' }, function( fn, command ) { Uploader.prototype[ fn ] = function() { return this.request( command, arguments ); }; }); $.extend( Uploader.prototype, { state: 'pending', _init: function( opts ) { var me = this; me.request( 'init', opts, function() { me.state = 'ready'; me.trigger('ready'); }); }, /** * 获取或者设置Uploader配置项。 * @method option * @grammar option( key ) => * * @grammar option( key, val ) => self * @example * * // 初始状态图片上传前不会压缩 * var uploader = new WebUploader.Uploader({ * compress: null; * }); * * // 修改后图片上传前,尝试将图片压缩到1600 * 1600 * uploader.option( 'compress', { * width: 1600, * height: 1600 * }); */ option: function( key, val ) { var opts = this.options; // setter if ( arguments.length > 1 ) { if ( $.isPlainObject( val ) && $.isPlainObject( opts[ key ] ) ) { $.extend( opts[ key ], val ); } else { opts[ key ] = val; } } else { // getter return key ? opts[ key ] : opts; } }, /** * 获取文件统计信息。返回一个包含一下信息的对象。 * * `successNum` 上传成功的文件数 * * `progressNum` 上传中的文件数 * * `cancelNum` 被删除的文件数 * * `invalidNum` 无效的文件数 * * `uploadFailNum` 上传失败的文件数 * * `queueNum` 还在队列中的文件数 * * `interruptNum` 被暂停的文件数 * @method getStats * @grammar getStats() => Object */ getStats: function() { // return this._mgr.getStats.apply( this._mgr, arguments ); var stats = this.request('get-stats'); return stats ? { successNum: stats.numOfSuccess, progressNum: stats.numOfProgress, // who care? // queueFailNum: 0, cancelNum: stats.numOfCancel, invalidNum: stats.numOfInvalid, uploadFailNum: stats.numOfUploadFailed, queueNum: stats.numOfQueue, interruptNum: stats.numofInterrupt } : {}; }, // 需要重写此方法来来支持opts.onEvent和instance.onEvent的处理器 trigger: function( type/*, args...*/ ) { var args = [].slice.call( arguments, 1 ), opts = this.options, name = 'on' + type.substring( 0, 1 ).toUpperCase() + type.substring( 1 ); if ( // 调用通过on方法注册的handler. Mediator.trigger.apply( this, arguments ) === false || // 调用opts.onEvent $.isFunction( opts[ name ] ) && opts[ name ].apply( this, args ) === false || // 调用this.onEvent $.isFunction( this[ name ] ) && this[ name ].apply( this, args ) === false || // 广播所有uploader的事件。 Mediator.trigger.apply( Mediator, [ this, type ].concat( args ) ) === false ) { return false; } return true; }, /** * 销毁 webuploader 实例 * @method destroy * @grammar destroy() => undefined */ destroy: function() { this.request( 'destroy', arguments ); this.off(); }, // widgets/widget.js将补充此方法的详细文档。 request: Base.noop }); /** * 创建Uploader实例,等同于new Uploader( opts ); * @method create * @class Base * @static * @grammar Base.create( opts ) => Uploader */ Base.create = Uploader.create = function( opts ) { return new Uploader( opts ); }; // 暴露Uploader,可以通过它来扩展业务逻辑。 Base.Uploader = Uploader; return Uploader; }); /** * @fileOverview Runtime管理器,负责Runtime的选择, 连接 */ define('runtime/runtime',[ 'base', 'mediator' ], function( Base, Mediator ) { var $ = Base.$, factories = {}, // 获取对象的第一个key getFirstKey = function( obj ) { for ( var key in obj ) { if ( obj.hasOwnProperty( key ) ) { return key; } } return null; }; // 接口类。 function Runtime( options ) { this.options = $.extend({ container: document.body }, options ); this.uid = Base.guid('rt_'); } $.extend( Runtime.prototype, { getContainer: function() { var opts = this.options, parent, container; if ( this._container ) { return this._container; } parent = $( opts.container || document.body ); container = $( document.createElement('div') ); container.attr( 'id', 'rt_' + this.uid ); container.css({ position: 'absolute', top: '0px', left: '0px', width: '1px', height: '1px', overflow: 'hidden' }); parent.append( container ); parent.addClass('webuploader-container'); this._container = container; this._parent = parent; return container; }, init: Base.noop, exec: Base.noop, destroy: function() { this._container && this._container.remove(); this._parent && this._parent.removeClass('webuploader-container'); this.off(); } }); Runtime.orders = 'html5,flash'; /** * 添加Runtime实现。 * @param {String} type 类型 * @param {Runtime} factory 具体Runtime实现。 */ Runtime.addRuntime = function( type, factory ) { factories[ type ] = factory; }; Runtime.hasRuntime = function( type ) { return !!(type ? factories[ type ] : getFirstKey( factories )); }; Runtime.create = function( opts, orders ) { var type, runtime; orders = orders || Runtime.orders; $.each( orders.split( /\s*,\s*/g ), function() { if ( factories[ this ] ) { type = this; return false; } }); type = type || getFirstKey( factories ); if ( !type ) { throw new Error('Runtime Error'); } runtime = new factories[ type ]( opts ); return runtime; }; Mediator.installTo( Runtime.prototype ); return Runtime; }); /** * @fileOverview Runtime管理器,负责Runtime的选择, 连接 */ define('runtime/client',[ 'base', 'mediator', 'runtime/runtime' ], function( Base, Mediator, Runtime ) { var cache; cache = (function() { var obj = {}; return { add: function( runtime ) { obj[ runtime.uid ] = runtime; }, get: function( ruid, standalone ) { var i; if ( ruid ) { return obj[ ruid ]; } for ( i in obj ) { // 有些类型不能重用,比如filepicker. if ( standalone && obj[ i ].__standalone ) { continue; } return obj[ i ]; } return null; }, remove: function( runtime ) { delete obj[ runtime.uid ]; } }; })(); function RuntimeClient( component, standalone ) { var deferred = Base.Deferred(), runtime; this.uid = Base.guid('client_'); // 允许runtime没有初始化之前,注册一些方法在初始化后执行。 this.runtimeReady = function( cb ) { return deferred.done( cb ); }; this.connectRuntime = function( opts, cb ) { // already connected. if ( runtime ) { throw new Error('already connected!'); } deferred.done( cb ); if ( typeof opts === 'string' && cache.get( opts ) ) { runtime = cache.get( opts ); } // 像filePicker只能独立存在,不能公用。 runtime = runtime || cache.get( null, standalone ); // 需要创建 if ( !runtime ) { runtime = Runtime.create( opts, opts.runtimeOrder ); runtime.__promise = deferred.promise(); runtime.once( 'ready', deferred.resolve ); runtime.init(); cache.add( runtime ); runtime.__client = 1; } else { // 来自cache Base.$.extend( runtime.options, opts ); runtime.__promise.then( deferred.resolve ); runtime.__client++; } standalone && (runtime.__standalone = standalone); return runtime; }; this.getRuntime = function() { return runtime; }; this.disconnectRuntime = function() { if ( !runtime ) { return; } runtime.__client--; if ( runtime.__client <= 0 ) { cache.remove( runtime ); delete runtime.__promise; runtime.destroy(); } runtime = null; }; this.exec = function() { if ( !runtime ) { return; } var args = Base.slice( arguments ); component && args.unshift( component ); return runtime.exec.apply( this, args ); }; this.getRuid = function() { return runtime && runtime.uid; }; this.destroy = (function( destroy ) { return function() { destroy && destroy.apply( this, arguments ); this.trigger('destroy'); this.off(); this.exec('destroy'); this.disconnectRuntime(); }; })( this.destroy ); } Mediator.installTo( RuntimeClient.prototype ); return RuntimeClient; }); /** * @fileOverview 错误信息 */ define('lib/dnd',[ 'base', 'mediator', 'runtime/client' ], function( Base, Mediator, RuntimeClent ) { var $ = Base.$; function DragAndDrop( opts ) { opts = this.options = $.extend({}, DragAndDrop.options, opts ); opts.container = $( opts.container ); if ( !opts.container.length ) { return; } RuntimeClent.call( this, 'DragAndDrop' ); } DragAndDrop.options = { accept: null, disableGlobalDnd: false }; Base.inherits( RuntimeClent, { constructor: DragAndDrop, init: function() { var me = this; me.connectRuntime( me.options, function() { me.exec('init'); me.trigger('ready'); }); } }); Mediator.installTo( DragAndDrop.prototype ); return DragAndDrop; }); /** * @fileOverview 组件基类。 */ define('widgets/widget',[ 'base', 'uploader' ], function( Base, Uploader ) { var $ = Base.$, _init = Uploader.prototype._init, _destroy = Uploader.prototype.destroy, IGNORE = {}, widgetClass = []; function isArrayLike( obj ) { if ( !obj ) { return false; } var length = obj.length, type = $.type( obj ); if ( obj.nodeType === 1 && length ) { return true; } return type === 'array' || type !== 'function' && type !== 'string' && (length === 0 || typeof length === 'number' && length > 0 && (length - 1) in obj); } function Widget( uploader ) { this.owner = uploader; this.options = uploader.options; } $.extend( Widget.prototype, { init: Base.noop, // 类Backbone的事件监听声明,监听uploader实例上的事件 // widget直接无法监听事件,事件只能通过uploader来传递 invoke: function( apiName, args ) { /* { 'make-thumb': 'makeThumb' } */ var map = this.responseMap; // 如果无API响应声明则忽略 if ( !map || !(apiName in map) || !(map[ apiName ] in this) || !$.isFunction( this[ map[ apiName ] ] ) ) { return IGNORE; } return this[ map[ apiName ] ].apply( this, args ); }, /** * 发送命令。当传入`callback`或者`handler`中返回`promise`时。返回一个当所有`handler`中的promise都完成后完成的新`promise`。 * @method request * @grammar request( command, args ) => * | Promise * @grammar request( command, args, callback ) => Promise * @for Uploader */ request: function() { return this.owner.request.apply( this.owner, arguments ); } }); // 扩展Uploader. $.extend( Uploader.prototype, { /** * @property {String | Array} [disableWidgets=undefined] * @namespace options * @for Uploader * @description 默认所有 Uploader.register 了的 widget 都会被加载,如果禁用某一部分,请通过此 option 指定黑名单。 */ // 覆写_init用来初始化widgets _init: function() { var me = this, widgets = me._widgets = [], deactives = me.options.disableWidgets || ''; $.each( widgetClass, function( _, klass ) { (!deactives || !~deactives.indexOf( klass._name )) && widgets.push( new klass( me ) ); }); return _init.apply( me, arguments ); }, request: function( apiName, args, callback ) { var i = 0, widgets = this._widgets, len = widgets && widgets.length, rlts = [], dfds = [], widget, rlt, promise, key; args = isArrayLike( args ) ? args : [ args ]; for ( ; i < len; i++ ) { widget = widgets[ i ]; rlt = widget.invoke( apiName, args ); if ( rlt !== IGNORE ) { // Deferred对象 if ( Base.isPromise( rlt ) ) { dfds.push( rlt ); } else { rlts.push( rlt ); } } } // 如果有callback,则用异步方式。 if ( callback || dfds.length ) { promise = Base.when.apply( Base, dfds ); key = promise.pipe ? 'pipe' : 'then'; // 很重要不能删除。删除了会死循环。 // 保证执行顺序。让callback总是在下一个 tick 中执行。 return promise[ key ](function() { var deferred = Base.Deferred(), args = arguments; if ( args.length === 1 ) { args = args[ 0 ]; } setTimeout(function() { deferred.resolve( args ); }, 1 ); return deferred.promise(); })[ callback ? key : 'done' ]( callback || Base.noop ); } else { return rlts[ 0 ]; } }, destroy: function() { _destroy.apply( this, arguments ); this._widgets = null; } }); /** * 添加组件 * @grammar Uploader.register(proto); * @grammar Uploader.register(map, proto); * @param {object} responseMap API 名称与函数实现的映射 * @param {object} proto 组件原型,构造函数通过 constructor 属性定义 * @method Uploader.register * @for Uploader * @example * Uploader.register({ * 'make-thumb': 'makeThumb' * }, { * init: function( options ) {}, * makeThumb: function() {} * }); * * Uploader.register({ * 'make-thumb': function() { * * } * }); */ Uploader.register = Widget.register = function( responseMap, widgetProto ) { var map = { init: 'init', destroy: 'destroy', name: 'anonymous' }, klass; if ( arguments.length === 1 ) { widgetProto = responseMap; // 自动生成 map 表。 $.each(widgetProto, function(key) { if ( key[0] === '_' || key === 'name' ) { key === 'name' && (map.name = widgetProto.name); return; } map[key.replace(/[A-Z]/g, '-$&').toLowerCase()] = key; }); } else { map = $.extend( map, responseMap ); } widgetProto.responseMap = map; klass = Base.inherits( Widget, widgetProto ); klass._name = map.name; widgetClass.push( klass ); return klass; }; /** * 删除插件,只有在注册时指定了名字的才能被删除。 * @grammar Uploader.unRegister(name); * @param {string} name 组件名字 * @method Uploader.unRegister * @for Uploader * @example * * Uploader.register({ * name: 'custom', * * 'make-thumb': function() { * * } * }); * * Uploader.unRegister('custom'); */ Uploader.unRegister = Widget.unRegister = function( name ) { if ( !name || name === 'anonymous' ) { return; } // 删除指定的插件。 for ( var i = widgetClass.length; i--; ) { if ( widgetClass[i]._name === name ) { widgetClass.splice(i, 1) } } }; return Widget; }); /** * @fileOverview DragAndDrop Widget。 */ define('widgets/filednd',[ 'base', 'uploader', 'lib/dnd', 'widgets/widget' ], function( Base, Uploader, Dnd ) { var $ = Base.$; Uploader.options.dnd = ''; /** * @property {Selector} [dnd=undefined] 指定Drag And Drop拖拽的容器,如果不指定,则不启动。 * @namespace options * @for Uploader */ /** * @property {Selector} [disableGlobalDnd=false] 是否禁掉整个页面的拖拽功能,如果不禁用,图片拖进来的时候会默认被浏览器打开。 * @namespace options * @for Uploader */ /** * @event dndAccept * @param {DataTransferItemList} items DataTransferItem * @description 阻止此事件可以拒绝某些类型的文件拖入进来。目前只有 chrome 提供这样的 API,且只能通过 mime-type 验证。 * @for Uploader */ return Uploader.register({ name: 'dnd', init: function( opts ) { if ( !opts.dnd || this.request('predict-runtime-type') !== 'html5' ) { return; } var me = this, deferred = Base.Deferred(), options = $.extend({}, { disableGlobalDnd: opts.disableGlobalDnd, container: opts.dnd, accept: opts.accept }), dnd; this.dnd = dnd = new Dnd( options ); dnd.once( 'ready', deferred.resolve ); dnd.on( 'drop', function( files ) { me.request( 'add-file', [ files ]); }); // 检测文件是否全部允许添加。 dnd.on( 'accept', function( items ) { return me.owner.trigger( 'dndAccept', items ); }); dnd.init(); return deferred.promise(); }, destroy: function() { this.dnd && this.dnd.destroy(); } }); }); /** * @fileOverview 错误信息 */ define('lib/filepaste',[ 'base', 'mediator', 'runtime/client' ], function( Base, Mediator, RuntimeClent ) { var $ = Base.$; function FilePaste( opts ) { opts = this.options = $.extend({}, opts ); opts.container = $( opts.container || document.body ); RuntimeClent.call( this, 'FilePaste' ); } Base.inherits( RuntimeClent, { constructor: FilePaste, init: function() { var me = this; me.connectRuntime( me.options, function() { me.exec('init'); me.trigger('ready'); }); } }); Mediator.installTo( FilePaste.prototype ); return FilePaste; }); /** * @fileOverview 组件基类。 */ define('widgets/filepaste',[ 'base', 'uploader', 'lib/filepaste', 'widgets/widget' ], function( Base, Uploader, FilePaste ) { var $ = Base.$; /** * @property {Selector} [paste=undefined] 指定监听paste事件的容器,如果不指定,不启用此功能。此功能为通过粘贴来添加截屏的图片。建议设置为`document.body`. * @namespace options * @for Uploader */ return Uploader.register({ name: 'paste', init: function( opts ) { if ( !opts.paste || this.request('predict-runtime-type') !== 'html5' ) { return; } var me = this, deferred = Base.Deferred(), options = $.extend({}, { container: opts.paste, accept: opts.accept }), paste; this.paste = paste = new FilePaste( options ); paste.once( 'ready', deferred.resolve ); paste.on( 'paste', function( files ) { me.owner.request( 'add-file', [ files ]); }); paste.init(); return deferred.promise(); }, destroy: function() { this.paste && this.paste.destroy(); } }); }); /** * @fileOverview Blob */ define('lib/blob',[ 'base', 'runtime/client' ], function( Base, RuntimeClient ) { function Blob( ruid, source ) { var me = this; me.source = source; me.ruid = ruid; this.size = source.size || 0; // 如果没有指定 mimetype, 但是知道文件后缀。 if ( !source.type && this.ext && ~'jpg,jpeg,png,gif,bmp'.indexOf( this.ext ) ) { this.type = 'image/' + (this.ext === 'jpg' ? 'jpeg' : this.ext); } else { this.type = source.type || 'application/octet-stream'; } RuntimeClient.call( me, 'Blob' ); this.uid = source.uid || this.uid; if ( ruid ) { me.connectRuntime( ruid ); } } Base.inherits( RuntimeClient, { constructor: Blob, slice: function( start, end ) { return this.exec( 'slice', start, end ); }, getSource: function() { return this.source; } }); return Blob; }); /** * 为了统一化Flash的File和HTML5的File而存在。 * 以至于要调用Flash里面的File,也可以像调用HTML5版本的File一下。 * @fileOverview File */ define('lib/file',[ 'base', 'lib/blob' ], function( Base, Blob ) { var uid = 1, rExt = /\.([^.]+)$/; function File( ruid, file ) { var ext; this.name = file.name || ('untitled' + uid++); ext = rExt.exec( file.name ) ? RegExp.$1.toLowerCase() : ''; // todo 支持其他类型文件的转换。 // 如果有 mimetype, 但是文件名里面没有找出后缀规律 if ( !ext && file.type ) { ext = /\/(jpg|jpeg|png|gif|bmp)$/i.exec( file.type ) ? RegExp.$1.toLowerCase() : ''; this.name += '.' + ext; } this.ext = ext; this.lastModifiedDate = file.lastModifiedDate || (new Date()).toLocaleString(); Blob.apply( this, arguments ); } return Base.inherits( Blob, File ); }); /** * @fileOverview 错误信息 */ define('lib/filepicker',[ 'base', 'runtime/client', 'lib/file' ], function( Base, RuntimeClent, File ) { var $ = Base.$; function FilePicker( opts ) { opts = this.options = $.extend({}, FilePicker.options, opts ); opts.container = $( opts.id ); if ( !opts.container.length ) { throw new Error('按钮指定错误'); } opts.innerHTML = opts.innerHTML || opts.label || opts.container.html() || ''; opts.button = $( opts.button || document.createElement('div') ); opts.button.html( opts.innerHTML ); opts.container.html( opts.button ); RuntimeClent.call( this, 'FilePicker', true ); } FilePicker.options = { button: null, container: null, label: null, innerHTML: null, multiple: true, accept: null, name: 'file' }; Base.inherits( RuntimeClent, { constructor: FilePicker, init: function() { var me = this, opts = me.options, button = opts.button; button.addClass('webuploader-pick'); me.on( 'all', function( type ) { var files; switch ( type ) { case 'mouseenter': button.addClass('webuploader-pick-hover'); break; case 'mouseleave': button.removeClass('webuploader-pick-hover'); break; case 'change': files = me.exec('getFiles'); me.trigger( 'select', $.map( files, function( file ) { file = new File( me.getRuid(), file ); // 记录来源。 file._refer = opts.container; return file; }), opts.container ); break; } }); me.connectRuntime( opts, function() { me.refresh(); me.exec( 'init', opts ); me.trigger('ready'); }); this._resizeHandler = Base.bindFn( this.refresh, this ); $( window ).on( 'resize', this._resizeHandler ); }, refresh: function() { var shimContainer = this.getRuntime().getContainer(), button = this.options.button, width = button.outerWidth ? button.outerWidth() : button.width(), height = button.outerHeight ? button.outerHeight() : button.height(), pos = button.offset(); width && height && shimContainer.css({ bottom: 'auto', right: 'auto', width: width + 'px', height: height + 'px' }).offset( pos ); }, enable: function() { var btn = this.options.button; btn.removeClass('webuploader-pick-disable'); this.refresh(); }, disable: function() { var btn = this.options.button; this.getRuntime().getContainer().css({ top: '-99999px' }); btn.addClass('webuploader-pick-disable'); }, destroy: function() { var btn = this.options.button; $( window ).off( 'resize', this._resizeHandler ); btn.removeClass('webuploader-pick-disable webuploader-pick-hover ' + 'webuploader-pick'); } }); return FilePicker; }); /** * @fileOverview 文件选择相关 */ define('widgets/filepicker',[ 'base', 'uploader', 'lib/filepicker', 'widgets/widget' ], function( Base, Uploader, FilePicker ) { var $ = Base.$; $.extend( Uploader.options, { /** * @property {Selector | Object} [pick=undefined] * @namespace options * @for Uploader * @description 指定选择文件的按钮容器,不指定则不创建按钮。 * * * `id` {Seletor|dom} 指定选择文件的按钮容器,不指定则不创建按钮。**注意** 这里虽然写的是 id, 但是不是只支持 id, 还支持 class, 或者 dom 节点。 * * `label` {String} 请采用 `innerHTML` 代替 * * `innerHTML` {String} 指定按钮文字。不指定时优先从指定的容器中看是否自带文字。 * * `multiple` {Boolean} 是否开起同时选择多个文件能力。 */ pick: null, /** * @property {Arroy} [accept=null] * @namespace options * @for Uploader * @description 指定接受哪些类型的文件。 由于目前还有ext转mimeType表,所以这里需要分开指定。 * * * `title` {String} 文字描述 * * `extensions` {String} 允许的文件后缀,不带点,多个用逗号分割。 * * `mimeTypes` {String} 多个用逗号分割。 * * 如: * * ``` * { * title: 'Images', * extensions: 'gif,jpg,jpeg,bmp,png', * mimeTypes: 'image/*' * } * ``` */ accept: null/*{ title: 'Images', extensions: 'gif,jpg,jpeg,bmp,png', mimeTypes: 'image/*' }*/ }); return Uploader.register({ name: 'picker', init: function( opts ) { this.pickers = []; return opts.pick && this.addBtn( opts.pick ); }, refresh: function() { $.each( this.pickers, function() { this.refresh(); }); }, /** * @method addButton * @for Uploader * @grammar addButton( pick ) => Promise * @description * 添加文件选择按钮,如果一个按钮不够,需要调用此方法来添加。参数跟[options.pick](#WebUploader:Uploader:options)一致。 * @example * uploader.addButton({ * id: '#btnContainer', * innerHTML: '选择文件' * }); */ addBtn: function( pick ) { var me = this, opts = me.options, accept = opts.accept, promises = []; if ( !pick ) { return; } $.isPlainObject( pick ) || (pick = { id: pick }); $( pick.id ).each(function() { var options, picker, deferred; deferred = Base.Deferred(); options = $.extend({}, pick, { accept: $.isPlainObject( accept ) ? [ accept ] : accept, swf: opts.swf, runtimeOrder: opts.runtimeOrder, id: this }); picker = new FilePicker( options ); picker.once( 'ready', deferred.resolve ); picker.on( 'select', function( files ) { me.owner.request( 'add-file', [ files ]); }); picker.init(); me.pickers.push( picker ); promises.push( deferred.promise() ); }); return Base.when.apply( Base, promises ); }, disable: function() { $.each( this.pickers, function() { this.disable(); }); }, enable: function() { $.each( this.pickers, function() { this.enable(); }); }, destroy: function() { $.each( this.pickers, function() { this.destroy(); }); this.pickers = null; } }); }); /** * @fileOverview 文件属性封装 */ define('file',[ 'base', 'mediator' ], function( Base, Mediator ) { var $ = Base.$, idPrefix = 'WU_FILE_', idSuffix = 0, rExt = /\.([^.]+)$/, statusMap = {}; function gid() { return idPrefix + idSuffix++; } /** * 文件类 * @class File * @constructor 构造函数 * @grammar new File( source ) => File * @param {Lib.File} source [lib.File](#Lib.File)实例, 此source对象是带有Runtime信息的。 */ function WUFile( source ) { /** * 文件名,包括扩展名(后缀) * @property name * @type {string} */ this.name = source.name || 'Untitled'; /** * 文件体积(字节) * @property size * @type {uint} * @default 0 */ this.size = source.size || 0; /** * 文件MIMETYPE类型,与文件类型的对应关系请参考[http://t.cn/z8ZnFny](http://t.cn/z8ZnFny) * @property type * @type {string} * @default 'application/octet-stream' */ this.type = source.type || 'application/octet-stream'; /** * 文件最后修改日期 * @property lastModifiedDate * @type {int} * @default 当前时间戳 */ this.lastModifiedDate = source.lastModifiedDate || (new Date() * 1); /** * 文件ID,每个对象具有唯一ID,与文件名无关 * @property id * @type {string} */ this.id = gid(); /** * 文件扩展名,通过文件名获取,例如test.png的扩展名为png * @property ext * @type {string} */ this.ext = rExt.exec( this.name ) ? RegExp.$1 : ''; /** * 状态文字说明。在不同的status语境下有不同的用途。 * @property statusText * @type {string} */ this.statusText = ''; // 存储文件状态,防止通过属性直接修改 statusMap[ this.id ] = WUFile.Status.INITED; this.source = source; this.loaded = 0; this.on( 'error', function( msg ) { this.setStatus( WUFile.Status.ERROR, msg ); }); } $.extend( WUFile.prototype, { /** * 设置状态,状态变化时会触发`change`事件。 * @method setStatus * @grammar setStatus( status[, statusText] ); * @param {File.Status|String} status [文件状态值](#WebUploader:File:File.Status) * @param {String} [statusText=''] 状态说明,常在error时使用,用http, abort,server等来标记是由于什么原因导致文件错误。 */ setStatus: function( status, text ) { var prevStatus = statusMap[ this.id ]; typeof text !== 'undefined' && (this.statusText = text); if ( status !== prevStatus ) { statusMap[ this.id ] = status; /** * 文件状态变化 * @event statuschange */ this.trigger( 'statuschange', status, prevStatus ); } }, /** * 获取文件状态 * @return {File.Status} * @example 文件状态具体包括以下几种类型: { // 初始化 INITED: 0, // 已入队列 QUEUED: 1, // 正在上传 PROGRESS: 2, // 上传出错 ERROR: 3, // 上传成功 COMPLETE: 4, // 上传取消 CANCELLED: 5 } */ getStatus: function() { return statusMap[ this.id ]; }, /** * 获取文件原始信息。 * @return {*} */ getSource: function() { return this.source; }, destroy: function() { this.off(); delete statusMap[ this.id ]; } }); Mediator.installTo( WUFile.prototype ); /** * 文件状态值,具体包括以下几种类型: * * `inited` 初始状态 * * `queued` 已经进入队列, 等待上传 * * `progress` 上传中 * * `complete` 上传完成。 * * `error` 上传出错,可重试 * * `interrupt` 上传中断,可续传。 * * `invalid` 文件不合格,不能重试上传。会自动从队列中移除。 * * `cancelled` 文件被移除。 * @property {Object} Status * @namespace File * @class File * @static */ WUFile.Status = { INITED: 'inited', // 初始状态 QUEUED: 'queued', // 已经进入队列, 等待上传 PROGRESS: 'progress', // 上传中 ERROR: 'error', // 上传出错,可重试 COMPLETE: 'complete', // 上传完成。 CANCELLED: 'cancelled', // 上传取消。 INTERRUPT: 'interrupt', // 上传中断,可续传。 INVALID: 'invalid' // 文件不合格,不能重试上传。 }; return WUFile; }); /** * @fileOverview 文件队列 */ define('queue',[ 'base', 'mediator', 'file' ], function( Base, Mediator, WUFile ) { var $ = Base.$, STATUS = WUFile.Status; /** * 文件队列, 用来存储各个状态中的文件。 * @class Queue * @extends Mediator */ function Queue() { /** * 统计文件数。 * * `numOfQueue` 队列中的文件数。 * * `numOfSuccess` 上传成功的文件数 * * `numOfCancel` 被取消的文件数 * * `numOfProgress` 正在上传中的文件数 * * `numOfUploadFailed` 上传错误的文件数。 * * `numOfInvalid` 无效的文件数。 * * `numofDeleted` 被移除的文件数。 * @property {Object} stats */ this.stats = { numOfQueue: 0, numOfSuccess: 0, numOfCancel: 0, numOfProgress: 0, numOfUploadFailed: 0, numOfInvalid: 0, numofDeleted: 0, numofInterrupt: 0 }; // 上传队列,仅包括等待上传的文件 this._queue = []; // 存储所有文件 this._map = {}; } $.extend( Queue.prototype, { /** * 将新文件加入对队列尾部 * * @method append * @param {File} file 文件对象 */ append: function( file ) { this._queue.push( file ); this._fileAdded( file ); return this; }, /** * 将新文件加入对队列头部 * * @method prepend * @param {File} file 文件对象 */ prepend: function( file ) { this._queue.unshift( file ); this._fileAdded( file ); return this; }, /** * 获取文件对象 * * @method getFile * @param {String} fileId 文件ID * @return {File} */ getFile: function( fileId ) { if ( typeof fileId !== 'string' ) { return fileId; } return this._map[ fileId ]; }, /** * 从队列中取出一个指定状态的文件。 * @grammar fetch( status ) => File * @method fetch * @param {String} status [文件状态值](#WebUploader:File:File.Status) * @return {File} [File](#WebUploader:File) */ fetch: function( status ) { var len = this._queue.length, i, file; status = status || STATUS.QUEUED; for ( i = 0; i < len; i++ ) { file = this._queue[ i ]; if ( status === file.getStatus() ) { return file; } } return null; }, /** * 对队列进行排序,能够控制文件上传顺序。 * @grammar sort( fn ) => undefined * @method sort * @param {Function} fn 排序方法 */ sort: function( fn ) { if ( typeof fn === 'function' ) { this._queue.sort( fn ); } }, /** * 获取指定类型的文件列表, 列表中每一个成员为[File](#WebUploader:File)对象。 * @grammar getFiles( [status1[, status2 ...]] ) => Array * @method getFiles * @param {String} [status] [文件状态值](#WebUploader:File:File.Status) */ getFiles: function() { var sts = [].slice.call( arguments, 0 ), ret = [], i = 0, len = this._queue.length, file; for ( ; i < len; i++ ) { file = this._queue[ i ]; if ( sts.length && !~$.inArray( file.getStatus(), sts ) ) { continue; } ret.push( file ); } return ret; }, /** * 在队列中删除文件。 * @grammar removeFile( file ) => Array * @method removeFile * @param {File} 文件对象。 */ removeFile: function( file ) { var me = this, existing = this._map[ file.id ]; if ( existing ) { delete this._map[ file.id ]; file.destroy(); this.stats.numofDeleted++; } }, _fileAdded: function( file ) { var me = this, existing = this._map[ file.id ]; if ( !existing ) { this._map[ file.id ] = file; file.on( 'statuschange', function( cur, pre ) { me._onFileStatusChange( cur, pre ); }); } }, _onFileStatusChange: function( curStatus, preStatus ) { var stats = this.stats; switch ( preStatus ) { case STATUS.PROGRESS: stats.numOfProgress--; break; case STATUS.QUEUED: stats.numOfQueue --; break; case STATUS.ERROR: stats.numOfUploadFailed--; break; case STATUS.INVALID: stats.numOfInvalid--; break; case STATUS.INTERRUPT: stats.numofInterrupt--; break; } switch ( curStatus ) { case STATUS.QUEUED: stats.numOfQueue++; break; case STATUS.PROGRESS: stats.numOfProgress++; break; case STATUS.ERROR: stats.numOfUploadFailed++; break; case STATUS.COMPLETE: stats.numOfSuccess++; break; case STATUS.CANCELLED: stats.numOfCancel++; break; case STATUS.INVALID: stats.numOfInvalid++; break; case STATUS.INTERRUPT: stats.numofInterrupt++; break; } } }); Mediator.installTo( Queue.prototype ); return Queue; }); /** * @fileOverview 队列 */ define('widgets/queue',[ 'base', 'uploader', 'queue', 'file', 'lib/file', 'runtime/client', 'widgets/widget' ], function( Base, Uploader, Queue, WUFile, File, RuntimeClient ) { var $ = Base.$, rExt = /\.\w+$/, Status = WUFile.Status; return Uploader.register({ name: 'queue', init: function( opts ) { var me = this, deferred, len, i, item, arr, accept, runtime; if ( $.isPlainObject( opts.accept ) ) { opts.accept = [ opts.accept ]; } // accept中的中生成匹配正则。 if ( opts.accept ) { arr = []; for ( i = 0, len = opts.accept.length; i < len; i++ ) { item = opts.accept[ i ].extensions; item && arr.push( item ); } if ( arr.length ) { accept = '\\.' + arr.join(',') .replace( /,/g, '$|\\.' ) .replace( /\*/g, '.*' ) + '$'; } me.accept = new RegExp( accept, 'i' ); } me.queue = new Queue(); me.stats = me.queue.stats; // 如果当前不是html5运行时,那就算了。 // 不执行后续操作 if ( this.request('predict-runtime-type') !== 'html5' ) { return; } // 创建一个 html5 运行时的 placeholder // 以至于外部添加原生 File 对象的时候能正确包裹一下供 webuploader 使用。 deferred = Base.Deferred(); this.placeholder = runtime = new RuntimeClient('Placeholder'); runtime.connectRuntime({ runtimeOrder: 'html5' }, function() { me._ruid = runtime.getRuid(); deferred.resolve(); }); return deferred.promise(); }, // 为了支持外部直接添加一个原生File对象。 _wrapFile: function( file ) { if ( !(file instanceof WUFile) ) { if ( !(file instanceof File) ) { if ( !this._ruid ) { throw new Error('Can\'t add external files.'); } file = new File( this._ruid, file ); } file = new WUFile( file ); } return file; }, // 判断文件是否可以被加入队列 acceptFile: function( file ) { var invalid = !file || !file.size || this.accept && // 如果名字中有后缀,才做后缀白名单处理。 rExt.exec( file.name ) && !this.accept.test( file.name ); return !invalid; }, /** * @event beforeFileQueued * @param {File} file File对象 * @description 当文件被加入队列之前触发,此事件的handler返回值为`false`,则此文件不会被添加进入队列。 * @for Uploader */ /** * @event fileQueued * @param {File} file File对象 * @description 当文件被加入队列以后触发。 * @for Uploader */ _addFile: function( file ) { var me = this; file = me._wrapFile( file ); // 不过类型判断允许不允许,先派送 `beforeFileQueued` if ( !me.owner.trigger( 'beforeFileQueued', file ) ) { return; } // 类型不匹配,则派送错误事件,并返回。 if ( !me.acceptFile( file ) ) { me.owner.trigger( 'error', 'Q_TYPE_DENIED', file ); return; } me.queue.append( file ); me.owner.trigger( 'fileQueued', file ); return file; }, getFile: function( fileId ) { return this.queue.getFile( fileId ); }, /** * @event filesQueued * @param {File} files 数组,内容为原始File(lib/File)对象。 * @description 当一批文件添加进队列以后触发。 * @for Uploader */ /** * @property {Boolean} [auto=false] * @namespace options * @for Uploader * @description 设置为 true 后,不需要手动调用上传,有文件选择即开始上传。 * */ /** * @method addFiles * @grammar addFiles( file ) => undefined * @grammar addFiles( [file1, file2 ...] ) => undefined * @param {Array of File or File} [files] Files 对象 数组 * @description 添加文件到队列 * @for Uploader */ addFile: function( files ) { var me = this; if ( !files.length ) { files = [ files ]; } files = $.map( files, function( file ) { return me._addFile( file ); }); me.owner.trigger( 'filesQueued', files ); if ( me.options.auto ) { setTimeout(function() { me.request('start-upload'); }, 20 ); } }, getStats: function() { return this.stats; }, /** * @event fileDequeued * @param {File} file File对象 * @description 当文件被移除队列后触发。 * @for Uploader */ /** * @method removeFile * @grammar removeFile( file ) => undefined * @grammar removeFile( id ) => undefined * @grammar removeFile( file, true ) => undefined * @grammar removeFile( id, true ) => undefined * @param {File|id} file File对象或这File对象的id * @description 移除某一文件, 默认只会标记文件状态为已取消,如果第二个参数为 `true` 则会从 queue 中移除。 * @for Uploader * @example * * $li.on('click', '.remove-this', function() { * uploader.removeFile( file ); * }) */ removeFile: function( file, remove ) { var me = this; file = file.id ? file : me.queue.getFile( file ); this.request( 'cancel-file', file ); if ( remove ) { this.queue.removeFile( file ); } }, /** * @method getFiles * @grammar getFiles() => Array * @grammar getFiles( status1, status2, status... ) => Array * @description 返回指定状态的文件集合,不传参数将返回所有状态的文件。 * @for Uploader * @example * console.log( uploader.getFiles() ); // => all files * console.log( uploader.getFiles('error') ) // => all error files. */ getFiles: function() { return this.queue.getFiles.apply( this.queue, arguments ); }, fetchFile: function() { return this.queue.fetch.apply( this.queue, arguments ); }, /** * @method retry * @grammar retry() => undefined * @grammar retry( file ) => undefined * @description 重试上传,重试指定文件,或者从出错的文件开始重新上传。 * @for Uploader * @example * function retry() { * uploader.retry(); * } */ retry: function( file, noForceStart ) { var me = this, files, i, len; if ( file ) { file = file.id ? file : me.queue.getFile( file ); file.setStatus( Status.QUEUED ); noForceStart || me.request('start-upload'); return; } files = me.queue.getFiles( Status.ERROR ); i = 0; len = files.length; for ( ; i < len; i++ ) { file = files[ i ]; file.setStatus( Status.QUEUED ); } me.request('start-upload'); }, /** * @method sort * @grammar sort( fn ) => undefined * @description 排序队列中的文件,在上传之前调整可以控制上传顺序。 * @for Uploader */ sortFiles: function() { return this.queue.sort.apply( this.queue, arguments ); }, /** * @event reset * @description 当 uploader 被重置的时候触发。 * @for Uploader */ /** * @method reset * @grammar reset() => undefined * @description 重置uploader。目前只重置了队列。 * @for Uploader * @example * uploader.reset(); */ reset: function() { this.owner.trigger('reset'); this.queue = new Queue(); this.stats = this.queue.stats; }, destroy: function() { this.reset(); this.placeholder && this.placeholder.destroy(); } }); }); /** * @fileOverview 添加获取Runtime相关信息的方法。 */ define('widgets/runtime',[ 'uploader', 'runtime/runtime', 'widgets/widget' ], function( Uploader, Runtime ) { Uploader.support = function() { return Runtime.hasRuntime.apply( Runtime, arguments ); }; /** * @property {Object} [runtimeOrder=html5,flash] * @namespace options * @for Uploader * @description 指定运行时启动顺序。默认会想尝试 html5 是否支持,如果支持则使用 html5, 否则则使用 flash. * * 可以将此值设置成 `flash`,来强制使用 flash 运行时。 */ return Uploader.register({ name: 'runtime', init: function() { if ( !this.predictRuntimeType() ) { throw Error('Runtime Error'); } }, /** * 预测Uploader将采用哪个`Runtime` * @grammar predictRuntimeType() => String * @method predictRuntimeType * @for Uploader */ predictRuntimeType: function() { var orders = this.options.runtimeOrder || Runtime.orders, type = this.type, i, len; if ( !type ) { orders = orders.split( /\s*,\s*/g ); for ( i = 0, len = orders.length; i < len; i++ ) { if ( Runtime.hasRuntime( orders[ i ] ) ) { this.type = type = orders[ i ]; break; } } } return type; } }); }); /** * @fileOverview Transport */ define('lib/transport',[ 'base', 'runtime/client', 'mediator' ], function( Base, RuntimeClient, Mediator ) { var $ = Base.$; function Transport( opts ) { var me = this; opts = me.options = $.extend( true, {}, Transport.options, opts || {} ); RuntimeClient.call( this, 'Transport' ); this._blob = null; this._formData = opts.formData || {}; this._headers = opts.headers || {}; this.on( 'progress', this._timeout ); this.on( 'load error', function() { me.trigger( 'progress', 1 ); clearTimeout( me._timer ); }); } Transport.options = { server: '', method: 'POST', // 跨域时,是否允许携带cookie, 只有html5 runtime才有效 withCredentials: false, fileVal: 'file', timeout: 2 * 60 * 1000, // 2分钟 formData: {}, headers: {}, sendAsBinary: false }; $.extend( Transport.prototype, { // 添加Blob, 只能添加一次,最后一次有效。 appendBlob: function( key, blob, filename ) { var me = this, opts = me.options; if ( me.getRuid() ) { me.disconnectRuntime(); } // 连接到blob归属的同一个runtime. me.connectRuntime( blob.ruid, function() { me.exec('init'); }); me._blob = blob; opts.fileVal = key || opts.fileVal; opts.filename = filename || opts.filename; }, // 添加其他字段 append: function( key, value ) { if ( typeof key === 'object' ) { $.extend( this._formData, key ); } else { this._formData[ key ] = value; } }, setRequestHeader: function( key, value ) { if ( typeof key === 'object' ) { $.extend( this._headers, key ); } else { this._headers[ key ] = value; } }, send: function( method ) { this.exec( 'send', method ); this._timeout(); }, abort: function() { clearTimeout( this._timer ); return this.exec('abort'); }, destroy: function() { this.trigger('destroy'); this.off(); this.exec('destroy'); this.disconnectRuntime(); }, getResponse: function() { return this.exec('getResponse'); }, getResponseAsJson: function() { return this.exec('getResponseAsJson'); }, getStatus: function() { return this.exec('getStatus'); }, _timeout: function() { var me = this, duration = me.options.timeout; if ( !duration ) { return; } clearTimeout( me._timer ); me._timer = setTimeout(function() { me.abort(); me.trigger( 'error', 'timeout' ); }, duration ); } }); // 让Transport具备事件功能。 Mediator.installTo( Transport.prototype ); return Transport; }); /** * @fileOverview 负责文件上传相关。 */ define('widgets/upload',[ 'base', 'uploader', 'file', 'lib/transport', 'widgets/widget' ], function( Base, Uploader, WUFile, Transport ) { var $ = Base.$, isPromise = Base.isPromise, Status = WUFile.Status; // 添加默认配置项 $.extend( Uploader.options, { /** * @property {Boolean} [prepareNextFile=false] * @namespace options * @for Uploader * @description 是否允许在文件传输时提前把下一个文件准备好。 * 对于一个文件的准备工作比较耗时,比如图片压缩,md5序列化。 * 如果能提前在当前文件传输期处理,可以节省总体耗时。 */ prepareNextFile: false, /** * @property {Boolean} [chunked=false] * @namespace options * @for Uploader * @description 是否要分片处理大文件上传。 */ chunked: false, /** * @property {Boolean} [chunkSize=5242880] * @namespace options * @for Uploader * @description 如果要分片,分多大一片? 默认大小为5M. */ chunkSize: 5 * 1024 * 1024, /** * @property {Boolean} [chunkRetry=2] * @namespace options * @for Uploader * @description 如果某个分片由于网络问题出错,允许自动重传多少次? */ chunkRetry: 2, /** * @property {Boolean} [threads=3] * @namespace options * @for Uploader * @description 上传并发数。允许同时最大上传进程数。 */ threads: 3, /** * @property {Object} [formData={}] * @namespace options * @for Uploader * @description 文件上传请求的参数表,每次发送都会发送此对象中的参数。 */ formData: {} /** * @property {Object} [fileVal='file'] * @namespace options * @for Uploader * @description 设置文件上传域的name。 */ /** * @property {Object} [method='POST'] * @namespace options * @for Uploader * @description 文件上传方式,`POST`或者`GET`。 */ /** * @property {Object} [sendAsBinary=false] * @namespace options * @for Uploader * @description 是否已二进制的流的方式发送文件,这样整个上传内容`php://input`都为文件内容, * 其他参数在$_GET数组中。 */ }); // 负责将文件切片。 function CuteFile( file, chunkSize ) { var pending = [], blob = file.source, total = blob.size, chunks = chunkSize ? Math.ceil( total / chunkSize ) : 1, start = 0, index = 0, len, api; api = { file: file, has: function() { return !!pending.length; }, shift: function() { return pending.shift(); }, unshift: function( block ) { pending.unshift( block ); } }; while ( index < chunks ) { len = Math.min( chunkSize, total - start ); pending.push({ file: file, start: start, end: chunkSize ? (start + len) : total, total: total, chunks: chunks, chunk: index++, cuted: api }); start += len; } file.blocks = pending.concat(); file.remaning = pending.length; return api; } Uploader.register({ name: 'upload', init: function() { var owner = this.owner, me = this; this.runing = false; this.progress = false; owner .on( 'startUpload', function() { me.progress = true; }) .on( 'uploadFinished', function() { me.progress = false; }); // 记录当前正在传的数据,跟threads相关 this.pool = []; // 缓存分好片的文件。 this.stack = []; // 缓存即将上传的文件。 this.pending = []; // 跟踪还有多少分片在上传中但是没有完成上传。 this.remaning = 0; this.__tick = Base.bindFn( this._tick, this ); owner.on( 'uploadComplete', function( file ) { // 把其他块取消了。 file.blocks && $.each( file.blocks, function( _, v ) { v.transport && (v.transport.abort(), v.transport.destroy()); delete v.transport; }); delete file.blocks; delete file.remaning; }); }, reset: function() { this.request( 'stop-upload', true ); this.runing = false; this.pool = []; this.stack = []; this.pending = []; this.remaning = 0; this._trigged = false; this._promise = null; }, /** * @event startUpload * @description 当开始上传流程时触发。 * @for Uploader */ /** * 开始上传。此方法可以从初始状态调用开始上传流程,也可以从暂停状态调用,继续上传流程。 * * 可以指定开始某一个文件。 * @grammar upload() => undefined * @grammar upload( file | fileId) => undefined * @method upload * @for Uploader */ startUpload: function(file) { var me = this; // 移出invalid的文件 $.each( me.request( 'get-files', Status.INVALID ), function() { me.request( 'remove-file', this ); }); // 如果指定了开始某个文件,则只开始指定文件。 if ( file ) { file = file.id ? file : me.request( 'get-file', file ); if (file.getStatus() === Status.INTERRUPT) { $.each( me.pool, function( _, v ) { // 之前暂停过。 if (v.file !== file) { return; } v.transport && v.transport.send(); }); file.setStatus( Status.QUEUED ); } else if (file.getStatus() === Status.PROGRESS) { return; } else { file.setStatus( Status.QUEUED ); } } else { $.each( me.request( 'get-files', [ Status.INITED ] ), function() { this.setStatus( Status.QUEUED ); }); } if ( me.runing ) { return; } me.runing = true; var files = []; // 如果有暂停的,则续传 $.each( me.pool, function( _, v ) { var file = v.file; if ( file.getStatus() === Status.INTERRUPT ) { files.push(file); me._trigged = false; v.transport && v.transport.send(); } }); var file; while ( (file = files.shift()) ) { file.setStatus( Status.PROGRESS ); } file || $.each( me.request( 'get-files', Status.INTERRUPT ), function() { this.setStatus( Status.PROGRESS ); }); me._trigged = false; Base.nextTick( me.__tick ); me.owner.trigger('startUpload'); }, /** * @event stopUpload * @description 当开始上传流程暂停时触发。 * @for Uploader */ /** * 暂停上传。第一个参数为是否中断上传当前正在上传的文件。 * * 如果第一个参数是文件,则只暂停指定文件。 * @grammar stop() => undefined * @grammar stop( true ) => undefined * @grammar stop( file ) => undefined * @method stop * @for Uploader */ stopUpload: function( file, interrupt ) { var me = this; if (file === true) { interrupt = file; file = null; } if ( me.runing === false ) { return; } // 如果只是暂停某个文件。 if ( file ) { file = file.id ? file : me.request( 'get-file', file ); if ( file.getStatus() !== Status.PROGRESS && file.getStatus() !== Status.QUEUED ) { return; } file.setStatus( Status.INTERRUPT ); $.each( me.pool, function( _, v ) { // 只 abort 指定的文件。 if (v.file !== file) { return; } v.transport && v.transport.abort(); me._putback(v); me._popBlock(v); }); return Base.nextTick( me.__tick ); } me.runing = false; if (this._promise && this._promise.file) { this._promise.file.setStatus( Status.INTERRUPT ); } interrupt && $.each( me.pool, function( _, v ) { v.transport && v.transport.abort(); v.file.setStatus( Status.INTERRUPT ); }); me.owner.trigger('stopUpload'); }, /** * @method cancelFile * @grammar cancelFile( file ) => undefined * @grammar cancelFile( id ) => undefined * @param {File|id} file File对象或这File对象的id * @description 标记文件状态为已取消, 同时将中断文件传输。 * @for Uploader * @example * * $li.on('click', '.remove-this', function() { * uploader.cancelFile( file ); * }) */ cancelFile: function( file ) { file = file.id ? file : this.request( 'get-file', file ); // 如果正在上传。 file.blocks && $.each( file.blocks, function( _, v ) { var _tr = v.transport; if ( _tr ) { _tr.abort(); _tr.destroy(); delete v.transport; } }); file.setStatus( Status.CANCELLED ); this.owner.trigger( 'fileDequeued', file ); }, /** * 判断`Uplaode`r是否正在上传中。 * @grammar isInProgress() => Boolean * @method isInProgress * @for Uploader */ isInProgress: function() { return !!this.progress; }, _getStats: function() { return this.request('get-stats'); }, /** * 掉过一个文件上传,直接标记指定文件为已上传状态。 * @grammar skipFile( file ) => undefined * @method skipFile * @for Uploader */ skipFile: function( file, status ) { file = file.id ? file : this.request( 'get-file', file ); file.setStatus( status || Status.COMPLETE ); file.skipped = true; // 如果正在上传。 file.blocks && $.each( file.blocks, function( _, v ) { var _tr = v.transport; if ( _tr ) { _tr.abort(); _tr.destroy(); delete v.transport; } }); this.owner.trigger( 'uploadSkip', file ); }, /** * @event uploadFinished * @description 当所有文件上传结束时触发。 * @for Uploader */ _tick: function() { var me = this, opts = me.options, fn, val; // 上一个promise还没有结束,则等待完成后再执行。 if ( me._promise ) { return me._promise.always( me.__tick ); } // 还有位置,且还有文件要处理的话。 if ( me.pool.length < opts.threads && (val = me._nextBlock()) ) { me._trigged = false; fn = function( val ) { me._promise = null; // 有可能是reject过来的,所以要检测val的类型。 val && val.file && me._startSend( val ); Base.nextTick( me.__tick ); }; me._promise = isPromise( val ) ? val.always( fn ) : fn( val ); // 没有要上传的了,且没有正在传输的了。 } else if ( !me.remaning && !me._getStats().numOfQueue && !me._getStats().numofInterrupt ) { me.runing = false; me._trigged || Base.nextTick(function() { me.owner.trigger('uploadFinished'); }); me._trigged = true; } }, _putback: function(block) { var idx; block.cuted.unshift(block); idx = this.stack.indexOf(block.cuted); if (!~idx) { this.stack.unshift(block.cuted); } }, _getStack: function() { var i = 0, act; while ( (act = this.stack[ i++ ]) ) { if ( act.has() && act.file.getStatus() === Status.PROGRESS ) { return act; } else if (!act.has() || act.file.getStatus() !== Status.PROGRESS && act.file.getStatus() !== Status.INTERRUPT ) { // 把已经处理完了的,或者,状态为非 progress(上传中)、 // interupt(暂停中) 的移除。 this.stack.splice( --i, 1 ); } } return null; }, _nextBlock: function() { var me = this, opts = me.options, act, next, done, preparing; // 如果当前文件还有没有需要传输的,则直接返回剩下的。 if ( (act = this._getStack()) ) { // 是否提前准备下一个文件 if ( opts.prepareNextFile && !me.pending.length ) { me._prepareNextFile(); } return act.shift(); // 否则,如果正在运行,则准备下一个文件,并等待完成后返回下个分片。 } else if ( me.runing ) { // 如果缓存中有,则直接在缓存中取,没有则去queue中取。 if ( !me.pending.length && me._getStats().numOfQueue ) { me._prepareNextFile(); } next = me.pending.shift(); done = function( file ) { if ( !file ) { return null; } act = CuteFile( file, opts.chunked ? opts.chunkSize : 0 ); me.stack.push(act); return act.shift(); }; // 文件可能还在prepare中,也有可能已经完全准备好了。 if ( isPromise( next) ) { preparing = next.file; next = next[ next.pipe ? 'pipe' : 'then' ]( done ); next.file = preparing; return next; } return done( next ); } }, /** * @event uploadStart * @param {File} file File对象 * @description 某个文件开始上传前触发,一个文件只会触发一次。 * @for Uploader */ _prepareNextFile: function() { var me = this, file = me.request('fetch-file'), pending = me.pending, promise; if ( file ) { promise = me.request( 'before-send-file', file, function() { // 有可能文件被skip掉了。文件被skip掉后,状态坑定不是Queued. if ( file.getStatus() === Status.PROGRESS || file.getStatus() === Status.INTERRUPT ) { return file; } return me._finishFile( file ); }); me.owner.trigger( 'uploadStart', file ); file.setStatus( Status.PROGRESS ); promise.file = file; // 如果还在pending中,则替换成文件本身。 promise.done(function() { var idx = $.inArray( promise, pending ); ~idx && pending.splice( idx, 1, file ); }); // befeore-send-file的钩子就有错误发生。 promise.fail(function( reason ) { file.setStatus( Status.ERROR, reason ); me.owner.trigger( 'uploadError', file, reason ); me.owner.trigger( 'uploadComplete', file ); }); pending.push( promise ); } }, // 让出位置了,可以让其他分片开始上传 _popBlock: function( block ) { var idx = $.inArray( block, this.pool ); this.pool.splice( idx, 1 ); block.file.remaning--; this.remaning--; }, // 开始上传,可以被掉过。如果promise被reject了,则表示跳过此分片。 _startSend: function( block ) { var me = this, file = block.file, promise; // 有可能在 before-send-file 的 promise 期间改变了文件状态。 // 如:暂停,取消 // 我们不能中断 promise, 但是可以在 promise 完后,不做上传操作。 if ( file.getStatus() !== Status.PROGRESS ) { // 如果是中断,则还需要放回去。 if (file.getStatus() === Status.INTERRUPT) { me._putback(block); } return; } me.pool.push( block ); me.remaning++; // 如果没有分片,则直接使用原始的。 // 不会丢失content-type信息。 block.blob = block.chunks === 1 ? file.source : file.source.slice( block.start, block.end ); // hook, 每个分片发送之前可能要做些异步的事情。 promise = me.request( 'before-send', block, function() { // 有可能文件已经上传出错了,所以不需要再传输了。 if ( file.getStatus() === Status.PROGRESS ) { me._doSend( block ); } else { me._popBlock( block ); Base.nextTick( me.__tick ); } }); // 如果为fail了,则跳过此分片。 promise.fail(function() { if ( file.remaning === 1 ) { me._finishFile( file ).always(function() { block.percentage = 1; me._popBlock( block ); me.owner.trigger( 'uploadComplete', file ); Base.nextTick( me.__tick ); }); } else { block.percentage = 1; me.updateFileProgress( file ); me._popBlock( block ); Base.nextTick( me.__tick ); } }); }, /** * @event uploadBeforeSend * @param {Object} object * @param {Object} data 默认的上传参数,可以扩展此对象来控制上传参数。 * @param {Object} headers 可以扩展此对象来控制上传头部。 * @description 当某个文件的分块在发送前触发,主要用来询问是否要添加附带参数,大文件在开起分片上传的前提下此事件可能会触发多次。 * @for Uploader */ /** * @event uploadAccept * @param {Object} object * @param {Object} ret 服务端的返回数据,json格式,如果服务端不是json格式,从ret._raw中取数据,自行解析。 * @description 当某个文件上传到服务端响应后,会派送此事件来询问服务端响应是否有效。如果此事件handler返回值为`false`, 则此文件将派送`server`类型的`uploadError`事件。 * @for Uploader */ /** * @event uploadProgress * @param {File} file File对象 * @param {Number} percentage 上传进度 * @description 上传过程中触发,携带上传进度。 * @for Uploader */ /** * @event uploadError * @param {File} file File对象 * @param {String} reason 出错的code * @description 当文件上传出错时触发。 * @for Uploader */ /** * @event uploadSuccess * @param {File} file File对象 * @param {Object} response 服务端返回的数据 * @description 当文件上传成功时触发。 * @for Uploader */ /** * @event uploadComplete * @param {File} [file] File对象 * @description 不管成功或者失败,文件上传完成时触发。 * @for Uploader */ // 做上传操作。 _doSend: function( block ) { var me = this, owner = me.owner, opts = me.options, file = block.file, tr = new Transport( opts ), data = $.extend({}, opts.formData ), headers = $.extend({}, opts.headers ), requestAccept, ret; block.transport = tr; tr.on( 'destroy', function() { delete block.transport; me._popBlock( block ); Base.nextTick( me.__tick ); }); // 广播上传进度。以文件为单位。 tr.on( 'progress', function( percentage ) { block.percentage = percentage; me.updateFileProgress( file ); }); // 用来询问,是否返回的结果是有错误的。 requestAccept = function( reject ) { var fn; ret = tr.getResponseAsJson() || {}; ret._raw = tr.getResponse(); fn = function( value ) { reject = value; }; // 服务端响应了,不代表成功了,询问是否响应正确。 if ( !owner.trigger( 'uploadAccept', block, ret, fn ) ) { reject = reject || 'server'; } return reject; }; // 尝试重试,然后广播文件上传出错。 tr.on( 'error', function( type, flag ) { block.retried = block.retried || 0; // 自动重试 if ( block.chunks > 1 && ~'http,abort'.indexOf( type ) && block.retried < opts.chunkRetry ) { block.retried++; tr.send(); } else { // http status 500 ~ 600 if ( !flag && type === 'server' ) { type = requestAccept( type ); } file.setStatus( Status.ERROR, type ); owner.trigger( 'uploadError', file, type ); owner.trigger( 'uploadComplete', file ); } }); // 上传成功 tr.on( 'load', function() { var reason; // 如果非预期,转向上传出错。 if ( (reason = requestAccept()) ) { tr.trigger( 'error', reason, true ); return; } // 全部上传完成。 if ( file.remaning === 1 ) { me._finishFile( file, ret ); } else { tr.destroy(); } }); // 配置默认的上传字段。 data = $.extend( data, { id: file.id, name: file.name, type: file.type, lastModifiedDate: file.lastModifiedDate, size: file.size }); block.chunks > 1 && $.extend( data, { chunks: block.chunks, chunk: block.chunk }); // 在发送之间可以添加字段什么的。。。 // 如果默认的字段不够使用,可以通过监听此事件来扩展 owner.trigger( 'uploadBeforeSend', block, data, headers ); // 开始发送。 tr.appendBlob( opts.fileVal, block.blob, file.name ); tr.append( data ); tr.setRequestHeader( headers ); tr.send(); }, // 完成上传。 _finishFile: function( file, ret, hds ) { var owner = this.owner; return owner .request( 'after-send-file', arguments, function() { file.setStatus( Status.COMPLETE ); owner.trigger( 'uploadSuccess', file, ret, hds ); }) .fail(function( reason ) { // 如果外部已经标记为invalid什么的,不再改状态。 if ( file.getStatus() === Status.PROGRESS ) { file.setStatus( Status.ERROR, reason ); } owner.trigger( 'uploadError', file, reason ); }) .always(function() { owner.trigger( 'uploadComplete', file ); }); }, updateFileProgress: function(file) { var totalPercent = 0, uploaded = 0; if (!file.blocks) { return; } $.each( file.blocks, function( _, v ) { uploaded += (v.percentage || 0) * (v.end - v.start); }); totalPercent = uploaded / file.size; this.owner.trigger( 'uploadProgress', file, totalPercent || 0 ); } }); }); /** * @fileOverview 各种验证,包括文件总大小是否超出、单文件是否超出和文件是否重复。 */ define('widgets/validator',[ 'base', 'uploader', 'file', 'widgets/widget' ], function( Base, Uploader, WUFile ) { var $ = Base.$, validators = {}, api; /** * @event error * @param {String} type 错误类型。 * @description 当validate不通过时,会以派送错误事件的形式通知调用者。通过`upload.on('error', handler)`可以捕获到此类错误,目前有以下错误会在特定的情况下派送错来。 * * * `Q_EXCEED_NUM_LIMIT` 在设置了`fileNumLimit`且尝试给`uploader`添加的文件数量超出这个值时派送。 * * `Q_EXCEED_SIZE_LIMIT` 在设置了`Q_EXCEED_SIZE_LIMIT`且尝试给`uploader`添加的文件总大小超出这个值时派送。 * * `Q_TYPE_DENIED` 当文件类型不满足时触发。。 * @for Uploader */ // 暴露给外面的api api = { // 添加验证器 addValidator: function( type, cb ) { validators[ type ] = cb; }, // 移除验证器 removeValidator: function( type ) { delete validators[ type ]; } }; // 在Uploader初始化的时候启动Validators的初始化 Uploader.register({ name: 'validator', init: function() { var me = this; Base.nextTick(function() { $.each( validators, function() { this.call( me.owner ); }); }); } }); /** * @property {int} [fileNumLimit=undefined] * @namespace options * @for Uploader * @description 验证文件总数量, 超出则不允许加入队列。 */ api.addValidator( 'fileNumLimit', function() { var uploader = this, opts = uploader.options, count = 0, max = parseInt( opts.fileNumLimit, 10 ), flag = true; if ( !max ) { return; } uploader.on( 'beforeFileQueued', function( file ) { if ( count >= max && flag ) { flag = false; this.trigger( 'error', 'Q_EXCEED_NUM_LIMIT', max, file ); setTimeout(function() { flag = true; }, 1 ); } return count >= max ? false : true; }); uploader.on( 'fileQueued', function() { count++; }); uploader.on( 'fileDequeued', function() { count--; }); uploader.on( 'reset', function() { count = 0; }); }); /** * @property {int} [fileSizeLimit=undefined] * @namespace options * @for Uploader * @description 验证文件总大小是否超出限制, 超出则不允许加入队列。 */ api.addValidator( 'fileSizeLimit', function() { var uploader = this, opts = uploader.options, count = 0, max = parseInt( opts.fileSizeLimit, 10 ), flag = true; if ( !max ) { return; } uploader.on( 'beforeFileQueued', function( file ) { var invalid = count + file.size > max; if ( invalid && flag ) { flag = false; this.trigger( 'error', 'Q_EXCEED_SIZE_LIMIT', max, file ); setTimeout(function() { flag = true; }, 1 ); } return invalid ? false : true; }); uploader.on( 'fileQueued', function( file ) { count += file.size; }); uploader.on( 'fileDequeued', function( file ) { count -= file.size; }); uploader.on( 'reset', function() { count = 0; }); }); /** * @property {int} [fileSingleSizeLimit=undefined] * @namespace options * @for Uploader * @description 验证单个文件大小是否超出限制, 超出则不允许加入队列。 */ api.addValidator( 'fileSingleSizeLimit', function() { var uploader = this, opts = uploader.options, max = opts.fileSingleSizeLimit; if ( !max ) { return; } uploader.on( 'beforeFileQueued', function( file ) { if ( file.size > max ) { file.setStatus( WUFile.Status.INVALID, 'exceed_size' ); this.trigger( 'error', 'F_EXCEED_SIZE', max, file ); return false; } }); }); /** * @property {Boolean} [duplicate=undefined] * @namespace options * @for Uploader * @description 去重, 根据文件名字、文件大小和最后修改时间来生成hash Key. */ api.addValidator( 'duplicate', function() { var uploader = this, opts = uploader.options, mapping = {}; if ( opts.duplicate ) { return; } function hashString( str ) { var hash = 0, i = 0, len = str.length, _char; for ( ; i < len; i++ ) { _char = str.charCodeAt( i ); hash = _char + (hash << 6) + (hash << 16) - hash; } return hash; } uploader.on( 'beforeFileQueued', function( file ) { var hash = file.__hash || (file.__hash = hashString( file.name + file.size + file.lastModifiedDate )); // 已经重复了 if ( mapping[ hash ] ) { this.trigger( 'error', 'F_DUPLICATE', file ); return false; } }); uploader.on( 'fileQueued', function( file ) { var hash = file.__hash; hash && (mapping[ hash ] = true); }); uploader.on( 'fileDequeued', function( file ) { var hash = file.__hash; hash && (delete mapping[ hash ]); }); uploader.on( 'reset', function() { mapping = {}; }); }); return api; }); /** * @fileOverview Runtime管理器,负责Runtime的选择, 连接 */ define('runtime/compbase',[],function() { function CompBase( owner, runtime ) { this.owner = owner; this.options = owner.options; this.getRuntime = function() { return runtime; }; this.getRuid = function() { return runtime.uid; }; this.trigger = function() { return owner.trigger.apply( owner, arguments ); }; } return CompBase; }); /** * @fileOverview Html5Runtime */ define('runtime/html5/runtime',[ 'base', 'runtime/runtime', 'runtime/compbase' ], function( Base, Runtime, CompBase ) { var type = 'html5', components = {}; function Html5Runtime() { var pool = {}, me = this, destroy = this.destroy; Runtime.apply( me, arguments ); me.type = type; // 这个方法的调用者,实际上是RuntimeClient me.exec = function( comp, fn/*, args...*/) { var client = this, uid = client.uid, args = Base.slice( arguments, 2 ), instance; if ( components[ comp ] ) { instance = pool[ uid ] = pool[ uid ] || new components[ comp ]( client, me ); if ( instance[ fn ] ) { return instance[ fn ].apply( instance, args ); } } }; me.destroy = function() { // @todo 删除池子中的所有实例 return destroy && destroy.apply( this, arguments ); }; } Base.inherits( Runtime, { constructor: Html5Runtime, // 不需要连接其他程序,直接执行callback init: function() { var me = this; setTimeout(function() { me.trigger('ready'); }, 1 ); } }); // 注册Components Html5Runtime.register = function( name, component ) { var klass = components[ name ] = Base.inherits( CompBase, component ); return klass; }; // 注册html5运行时。 // 只有在支持的前提下注册。 if ( window.Blob && window.FileReader && window.DataView ) { Runtime.addRuntime( type, Html5Runtime ); } return Html5Runtime; }); /** * @fileOverview Blob Html实现 */ define('runtime/html5/blob',[ 'runtime/html5/runtime', 'lib/blob' ], function( Html5Runtime, Blob ) { return Html5Runtime.register( 'Blob', { slice: function( start, end ) { var blob = this.owner.source, slice = blob.slice || blob.webkitSlice || blob.mozSlice; blob = slice.call( blob, start, end ); return new Blob( this.getRuid(), blob ); } }); }); /** * @fileOverview FilePaste */ define('runtime/html5/dnd',[ 'base', 'runtime/html5/runtime', 'lib/file' ], function( Base, Html5Runtime, File ) { var $ = Base.$, prefix = 'webuploader-dnd-'; return Html5Runtime.register( 'DragAndDrop', { init: function() { var elem = this.elem = this.options.container; this.dragEnterHandler = Base.bindFn( this._dragEnterHandler, this ); this.dragOverHandler = Base.bindFn( this._dragOverHandler, this ); this.dragLeaveHandler = Base.bindFn( this._dragLeaveHandler, this ); this.dropHandler = Base.bindFn( this._dropHandler, this ); this.dndOver = false; elem.on( 'dragenter', this.dragEnterHandler ); elem.on( 'dragover', this.dragOverHandler ); elem.on( 'dragleave', this.dragLeaveHandler ); elem.on( 'drop', this.dropHandler ); if ( this.options.disableGlobalDnd ) { $( document ).on( 'dragover', this.dragOverHandler ); $( document ).on( 'drop', this.dropHandler ); } }, _dragEnterHandler: function( e ) { var me = this, denied = me._denied || false, items; e = e.originalEvent || e; if ( !me.dndOver ) { me.dndOver = true; // 注意只有 chrome 支持。 items = e.dataTransfer.items; if ( items && items.length ) { me._denied = denied = !me.trigger( 'accept', items ); } me.elem.addClass( prefix + 'over' ); me.elem[ denied ? 'addClass' : 'removeClass' ]( prefix + 'denied' ); } e.dataTransfer.dropEffect = denied ? 'none' : 'copy'; return false; }, _dragOverHandler: function( e ) { // 只处理框内的。 var parentElem = this.elem.parent().get( 0 ); if ( parentElem && !$.contains( parentElem, e.currentTarget ) ) { return false; } clearTimeout( this._leaveTimer ); this._dragEnterHandler.call( this, e ); return false; }, _dragLeaveHandler: function() { var me = this, handler; handler = function() { me.dndOver = false; me.elem.removeClass( prefix + 'over ' + prefix + 'denied' ); }; clearTimeout( me._leaveTimer ); me._leaveTimer = setTimeout( handler, 100 ); return false; }, _dropHandler: function( e ) { var me = this, ruid = me.getRuid(), parentElem = me.elem.parent().get( 0 ), dataTransfer, data; // 只处理框内的。 if ( parentElem && !$.contains( parentElem, e.currentTarget ) ) { return false; } e = e.originalEvent || e; dataTransfer = e.dataTransfer; // 如果是页面内拖拽,还不能处理,不阻止事件。 // 此处 ie11 下会报参数错误, try { data = dataTransfer.getData('text/html'); } catch( err ) { } if ( data ) { return; } me._getTansferFiles( dataTransfer, function( results ) { me.trigger( 'drop', $.map( results, function( file ) { return new File( ruid, file ); }) ); }); me.dndOver = false; me.elem.removeClass( prefix + 'over' ); return false; }, // 如果传入 callback 则去查看文件夹,否则只管当前文件夹。 _getTansferFiles: function( dataTransfer, callback ) { var results = [], promises = [], items, files, file, item, i, len, canAccessFolder; items = dataTransfer.items; files = dataTransfer.files; canAccessFolder = !!(items && items[ 0 ].webkitGetAsEntry); for ( i = 0, len = files.length; i < len; i++ ) { file = files[ i ]; item = items && items[ i ]; if ( canAccessFolder && item.webkitGetAsEntry().isDirectory ) { promises.push( this._traverseDirectoryTree( item.webkitGetAsEntry(), results ) ); } else { results.push( file ); } } Base.when.apply( Base, promises ).done(function() { if ( !results.length ) { return; } callback( results ); }); }, _traverseDirectoryTree: function( entry, results ) { var deferred = Base.Deferred(), me = this; if ( entry.isFile ) { entry.file(function( file ) { results.push( file ); deferred.resolve(); }); } else if ( entry.isDirectory ) { entry.createReader().readEntries(function( entries ) { var len = entries.length, promises = [], arr = [], // 为了保证顺序。 i; for ( i = 0; i < len; i++ ) { promises.push( me._traverseDirectoryTree( entries[ i ], arr ) ); } Base.when.apply( Base, promises ).then(function() { results.push.apply( results, arr ); deferred.resolve(); }, deferred.reject ); }); } return deferred.promise(); }, destroy: function() { var elem = this.elem; // 还没 init 就调用 destroy if (!elem) { return; } elem.off( 'dragenter', this.dragEnterHandler ); elem.off( 'dragover', this.dragOverHandler ); elem.off( 'dragleave', this.dragLeaveHandler ); elem.off( 'drop', this.dropHandler ); if ( this.options.disableGlobalDnd ) { $( document ).off( 'dragover', this.dragOverHandler ); $( document ).off( 'drop', this.dropHandler ); } } }); }); /** * @fileOverview FilePaste */ define('runtime/html5/filepaste',[ 'base', 'runtime/html5/runtime', 'lib/file' ], function( Base, Html5Runtime, File ) { return Html5Runtime.register( 'FilePaste', { init: function() { var opts = this.options, elem = this.elem = opts.container, accept = '.*', arr, i, len, item; // accetp的mimeTypes中生成匹配正则。 if ( opts.accept ) { arr = []; for ( i = 0, len = opts.accept.length; i < len; i++ ) { item = opts.accept[ i ].mimeTypes; item && arr.push( item ); } if ( arr.length ) { accept = arr.join(','); accept = accept.replace( /,/g, '|' ).replace( /\*/g, '.*' ); } } this.accept = accept = new RegExp( accept, 'i' ); this.hander = Base.bindFn( this._pasteHander, this ); elem.on( 'paste', this.hander ); }, _pasteHander: function( e ) { var allowed = [], ruid = this.getRuid(), items, item, blob, i, len; e = e.originalEvent || e; items = e.clipboardData.items; for ( i = 0, len = items.length; i < len; i++ ) { item = items[ i ]; if ( item.kind !== 'file' || !(blob = item.getAsFile()) ) { continue; } allowed.push( new File( ruid, blob ) ); } if ( allowed.length ) { // 不阻止非文件粘贴(文字粘贴)的事件冒泡 e.preventDefault(); e.stopPropagation(); this.trigger( 'paste', allowed ); } }, destroy: function() { this.elem.off( 'paste', this.hander ); } }); }); /** * @fileOverview FilePicker */ define('runtime/html5/filepicker',[ 'base', 'runtime/html5/runtime' ], function( Base, Html5Runtime ) { var $ = Base.$; return Html5Runtime.register( 'FilePicker', { init: function() { var container = this.getRuntime().getContainer(), me = this, owner = me.owner, opts = me.options, label = this.label = $( document.createElement('label') ), input = this.input = $( document.createElement('input') ), arr, i, len, mouseHandler; input.attr( 'type', 'file' ); input.attr( 'name', opts.name ); input.addClass('webuploader-element-invisible'); label.on( 'click', function() { input.trigger('click'); }); label.css({ opacity: 0, width: '100%', height: '100%', display: 'block', cursor: 'pointer', background: '#ffffff' }); if ( opts.multiple ) { input.attr( 'multiple', 'multiple' ); } // @todo Firefox不支持单独指定后缀 if ( opts.accept && opts.accept.length > 0 ) { arr = []; for ( i = 0, len = opts.accept.length; i < len; i++ ) { arr.push( opts.accept[ i ].mimeTypes ); } input.attr( 'accept', arr.join(',') ); } container.append( input ); container.append( label ); mouseHandler = function( e ) { owner.trigger( e.type ); }; input.on( 'change', function( e ) { var fn = arguments.callee, clone; me.files = e.target.files; // reset input clone = this.cloneNode( true ); clone.value = null; this.parentNode.replaceChild( clone, this ); input.off(); input = $( clone ).on( 'change', fn ) .on( 'mouseenter mouseleave', mouseHandler ); owner.trigger('change'); }); label.on( 'mouseenter mouseleave', mouseHandler ); }, getFiles: function() { return this.files; }, destroy: function() { this.input.off(); this.label.off(); } }); }); /** * @fileOverview Transport * @todo 支持chunked传输,优势: * 可以将大文件分成小块,挨个传输,可以提高大文件成功率,当失败的时候,也只需要重传那小部分, * 而不需要重头再传一次。另外断点续传也需要用chunked方式。 */ define('runtime/html5/transport',[ 'base', 'runtime/html5/runtime' ], function( Base, Html5Runtime ) { var noop = Base.noop, $ = Base.$; return Html5Runtime.register( 'Transport', { init: function() { this._status = 0; this._response = null; }, send: function() { var owner = this.owner, opts = this.options, xhr = this._initAjax(), blob = owner._blob, server = opts.server, formData, binary, fr; if ( opts.sendAsBinary ) { server += (/\?/.test( server ) ? '&' : '?') + $.param( owner._formData ); binary = blob.getSource(); } else { formData = new FormData(); $.each( owner._formData, function( k, v ) { formData.append( k, v ); }); formData.append( opts.fileVal, blob.getSource(), opts.filename || owner._formData.name || '' ); } if ( opts.withCredentials && 'withCredentials' in xhr ) { xhr.open( opts.method, server, true ); xhr.withCredentials = true; } else { xhr.open( opts.method, server ); } this._setRequestHeader( xhr, opts.headers ); if ( binary ) { // 强制设置成 content-type 为文件流。 xhr.overrideMimeType && xhr.overrideMimeType('application/octet-stream'); // android直接发送blob会导致服务端接收到的是空文件。 // bug详情。 // https://code.google.com/p/android/issues/detail?id=39882 // 所以先用fileReader读取出来再通过arraybuffer的方式发送。 if ( Base.os.android ) { fr = new FileReader(); fr.onload = function() { xhr.send( this.result ); fr = fr.onload = null; }; fr.readAsArrayBuffer( binary ); } else { xhr.send( binary ); } } else { xhr.send( formData ); } }, getResponse: function() { return this._response; }, getResponseAsJson: function() { return this._parseJson( this._response ); }, getStatus: function() { return this._status; }, abort: function() { var xhr = this._xhr; if ( xhr ) { xhr.upload.onprogress = noop; xhr.onreadystatechange = noop; xhr.abort(); this._xhr = xhr = null; } }, destroy: function() { this.abort(); }, _initAjax: function() { var me = this, xhr = new XMLHttpRequest(), opts = this.options; if ( opts.withCredentials && !('withCredentials' in xhr) && typeof XDomainRequest !== 'undefined' ) { xhr = new XDomainRequest(); } xhr.upload.onprogress = function( e ) { var percentage = 0; if ( e.lengthComputable ) { percentage = e.loaded / e.total; } return me.trigger( 'progress', percentage ); }; xhr.onreadystatechange = function() { if ( xhr.readyState !== 4 ) { return; } xhr.upload.onprogress = noop; xhr.onreadystatechange = noop; me._xhr = null; me._status = xhr.status; if ( xhr.status >= 200 && xhr.status < 300 ) { me._response = xhr.responseText; return me.trigger('load'); } else if ( xhr.status >= 500 && xhr.status < 600 ) { me._response = xhr.responseText; return me.trigger( 'error', 'server' ); } return me.trigger( 'error', me._status ? 'http' : 'abort' ); }; me._xhr = xhr; return xhr; }, _setRequestHeader: function( xhr, headers ) { $.each( headers, function( key, val ) { xhr.setRequestHeader( key, val ); }); }, _parseJson: function( str ) { var json; try { json = JSON.parse( str ); } catch ( ex ) { json = {}; } return json; } }); }); /** * @fileOverview FlashRuntime */ define('runtime/flash/runtime',[ 'base', 'runtime/runtime', 'runtime/compbase' ], function( Base, Runtime, CompBase ) { var $ = Base.$, type = 'flash', components = {}; function getFlashVersion() { var version; try { version = navigator.plugins[ 'Shockwave Flash' ]; version = version.description; } catch ( ex ) { try { version = new ActiveXObject('ShockwaveFlash.ShockwaveFlash') .GetVariable('$version'); } catch ( ex2 ) { version = '0.0'; } } version = version.match( /\d+/g ); return parseFloat( version[ 0 ] + '.' + version[ 1 ], 10 ); } function FlashRuntime() { var pool = {}, clients = {}, destroy = this.destroy, me = this, jsreciver = Base.guid('webuploader_'); Runtime.apply( me, arguments ); me.type = type; // 这个方法的调用者,实际上是RuntimeClient me.exec = function( comp, fn/*, args...*/ ) { var client = this, uid = client.uid, args = Base.slice( arguments, 2 ), instance; clients[ uid ] = client; if ( components[ comp ] ) { if ( !pool[ uid ] ) { pool[ uid ] = new components[ comp ]( client, me ); } instance = pool[ uid ]; if ( instance[ fn ] ) { return instance[ fn ].apply( instance, args ); } } return me.flashExec.apply( client, arguments ); }; function handler( evt, obj ) { var type = evt.type || evt, parts, uid; parts = type.split('::'); uid = parts[ 0 ]; type = parts[ 1 ]; // console.log.apply( console, arguments ); if ( type === 'Ready' && uid === me.uid ) { me.trigger('ready'); } else if ( clients[ uid ] ) { clients[ uid ].trigger( type.toLowerCase(), evt, obj ); } // Base.log( evt, obj ); } // flash的接受器。 window[ jsreciver ] = function() { var args = arguments; // 为了能捕获得到。 setTimeout(function() { handler.apply( null, args ); }, 1 ); }; this.jsreciver = jsreciver; this.destroy = function() { // @todo 删除池子中的所有实例 return destroy && destroy.apply( this, arguments ); }; this.flashExec = function( comp, fn ) { var flash = me.getFlash(), args = Base.slice( arguments, 2 ); return flash.exec( this.uid, comp, fn, args ); }; // @todo } Base.inherits( Runtime, { constructor: FlashRuntime, init: function() { var container = this.getContainer(), opts = this.options, html; // if not the minimal height, shims are not initialized // in older browsers (e.g FF3.6, IE6,7,8, Safari 4.0,5.0, etc) container.css({ position: 'absolute', top: '-8px', left: '-8px', width: '9px', height: '9px', overflow: 'hidden' }); // insert flash object html = '<object id="' + this.uid + '" type="application/' + 'x-shockwave-flash" data="' + opts.swf + '" '; if ( Base.browser.ie ) { html += 'classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" '; } html += 'width="100%" height="100%" style="outline:0">' + '<param name="movie" value="' + opts.swf + '" />' + '<param name="flashvars" value="uid=' + this.uid + '&jsreciver=' + this.jsreciver + '" />' + '<param name="wmode" value="transparent" />' + '<param name="allowscriptaccess" value="always" />' + '</object>'; container.html( html ); }, getFlash: function() { if ( this._flash ) { return this._flash; } this._flash = $( '#' + this.uid ).get( 0 ); return this._flash; } }); FlashRuntime.register = function( name, component ) { component = components[ name ] = Base.inherits( CompBase, $.extend({ // @todo fix this later flashExec: function() { var owner = this.owner, runtime = this.getRuntime(); return runtime.flashExec.apply( owner, arguments ); } }, component ) ); return component; }; if ( getFlashVersion() >= 11.4 ) { Runtime.addRuntime( type, FlashRuntime ); } return FlashRuntime; }); /** * @fileOverview FilePicker */ define('runtime/flash/filepicker',[ 'base', 'runtime/flash/runtime' ], function( Base, FlashRuntime ) { var $ = Base.$; return FlashRuntime.register( 'FilePicker', { init: function( opts ) { var copy = $.extend({}, opts ), len, i; // 修复Flash再没有设置title的情况下无法弹出flash文件选择框的bug. len = copy.accept && copy.accept.length; for ( i = 0; i < len; i++ ) { if ( !copy.accept[ i ].title ) { copy.accept[ i ].title = 'Files'; } } delete copy.button; delete copy.id; delete copy.container; this.flashExec( 'FilePicker', 'init', copy ); }, destroy: function() { this.flashExec( 'FilePicker', 'destroy' ); } }); }); /** * @fileOverview Transport flash实现 */ define('runtime/flash/transport',[ 'base', 'runtime/flash/runtime', 'runtime/client' ], function( Base, FlashRuntime, RuntimeClient ) { var $ = Base.$; return FlashRuntime.register( 'Transport', { init: function() { this._status = 0; this._response = null; this._responseJson = null; }, send: function() { var owner = this.owner, opts = this.options, xhr = this._initAjax(), blob = owner._blob, server = opts.server, binary; xhr.connectRuntime( blob.ruid ); if ( opts.sendAsBinary ) { server += (/\?/.test( server ) ? '&' : '?') + $.param( owner._formData ); binary = blob.uid; } else { $.each( owner._formData, function( k, v ) { xhr.exec( 'append', k, v ); }); xhr.exec( 'appendBlob', opts.fileVal, blob.uid, opts.filename || owner._formData.name || '' ); } this._setRequestHeader( xhr, opts.headers ); xhr.exec( 'send', { method: opts.method, url: server, forceURLStream: opts.forceURLStream, mimeType: 'application/octet-stream' }, binary ); }, getStatus: function() { return this._status; }, getResponse: function() { return this._response || ''; }, getResponseAsJson: function() { return this._responseJson; }, abort: function() { var xhr = this._xhr; if ( xhr ) { xhr.exec('abort'); xhr.destroy(); this._xhr = xhr = null; } }, destroy: function() { this.abort(); }, _initAjax: function() { var me = this, xhr = new RuntimeClient('XMLHttpRequest'); xhr.on( 'uploadprogress progress', function( e ) { var percent = e.loaded / e.total; percent = Math.min( 1, Math.max( 0, percent ) ); return me.trigger( 'progress', percent ); }); xhr.on( 'load', function() { var status = xhr.exec('getStatus'), readBody = false, err = '', p; xhr.off(); me._xhr = null; if ( status >= 200 && status < 300 ) { readBody = true; } else if ( status >= 500 && status < 600 ) { readBody = true; err = 'server'; } else { err = 'http'; } if ( readBody ) { me._response = xhr.exec('getResponse'); me._response = decodeURIComponent( me._response ); // flash 处理可能存在 bug, 没辙只能靠 js 了 // try { // me._responseJson = xhr.exec('getResponseAsJson'); // } catch ( error ) { p = window.JSON && window.JSON.parse || function( s ) { try { return new Function('return ' + s).call(); } catch ( err ) { return {}; } }; me._responseJson = me._response ? p(me._response) : {}; // } } xhr.destroy(); xhr = null; return err ? me.trigger( 'error', err ) : me.trigger('load'); }); xhr.on( 'error', function() { xhr.off(); me._xhr = null; me.trigger( 'error', 'http' ); }); me._xhr = xhr; return xhr; }, _setRequestHeader: function( xhr, headers ) { $.each( headers, function( key, val ) { xhr.exec( 'setRequestHeader', key, val ); }); } }); }); /** * @fileOverview Blob Html实现 */ define('runtime/flash/blob',[ 'runtime/flash/runtime', 'lib/blob' ], function( FlashRuntime, Blob ) { return FlashRuntime.register( 'Blob', { slice: function( start, end ) { var blob = this.flashExec( 'Blob', 'slice', start, end ); return new Blob( blob.uid, blob ); } }); }); /** * @fileOverview 没有图像处理的版本。 */ define('preset/withoutimage',[ 'base', // widgets 'widgets/filednd', 'widgets/filepaste', 'widgets/filepicker', 'widgets/queue', 'widgets/runtime', 'widgets/upload', 'widgets/validator', // runtimes // html5 'runtime/html5/blob', 'runtime/html5/dnd', 'runtime/html5/filepaste', 'runtime/html5/filepicker', 'runtime/html5/transport', // flash 'runtime/flash/filepicker', 'runtime/flash/transport', 'runtime/flash/blob' ], function( Base ) { return Base; }); define('webuploader',[ 'preset/withoutimage' ], function( preset ) { return preset; }); return require('webuploader'); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/webuploader/webuploader.nolog.js ================================================ /*! WebUploader 0.1.5 */ /** * @fileOverview 让内部各个部件的代码可以用[amd](https://github.com/amdjs/amdjs-api/wiki/AMD)模块定义方式组织起来。 * * AMD API 内部的简单不完全实现,请忽略。只有当WebUploader被合并成一个文件的时候才会引入。 */ (function( root, factory ) { var modules = {}, // 内部require, 简单不完全实现。 // https://github.com/amdjs/amdjs-api/wiki/require _require = function( deps, callback ) { var args, len, i; // 如果deps不是数组,则直接返回指定module if ( typeof deps === 'string' ) { return getModule( deps ); } else { args = []; for( len = deps.length, i = 0; i < len; i++ ) { args.push( getModule( deps[ i ] ) ); } return callback.apply( null, args ); } }, // 内部define,暂时不支持不指定id. _define = function( id, deps, factory ) { if ( arguments.length === 2 ) { factory = deps; deps = null; } _require( deps || [], function() { setModule( id, factory, arguments ); }); }, // 设置module, 兼容CommonJs写法。 setModule = function( id, factory, args ) { var module = { exports: factory }, returned; if ( typeof factory === 'function' ) { args.length || (args = [ _require, module.exports, module ]); returned = factory.apply( null, args ); returned !== undefined && (module.exports = returned); } modules[ id ] = module.exports; }, // 根据id获取module getModule = function( id ) { var module = modules[ id ] || root[ id ]; if ( !module ) { throw new Error( '`' + id + '` is undefined' ); } return module; }, // 将所有modules,将路径ids装换成对象。 exportsTo = function( obj ) { var key, host, parts, part, last, ucFirst; // make the first character upper case. ucFirst = function( str ) { return str && (str.charAt( 0 ).toUpperCase() + str.substr( 1 )); }; for ( key in modules ) { host = obj; if ( !modules.hasOwnProperty( key ) ) { continue; } parts = key.split('/'); last = ucFirst( parts.pop() ); while( (part = ucFirst( parts.shift() )) ) { host[ part ] = host[ part ] || {}; host = host[ part ]; } host[ last ] = modules[ key ]; } return obj; }, makeExport = function( dollar ) { root.__dollar = dollar; // exports every module. return exportsTo( factory( root, _define, _require ) ); }, origin; if ( typeof module === 'object' && typeof module.exports === 'object' ) { // For CommonJS and CommonJS-like environments where a proper window is present, module.exports = makeExport(); } else if ( typeof define === 'function' && define.amd ) { // Allow using this built library as an AMD module // in another project. That other project will only // see this AMD call, not the internal modules in // the closure below. define([ 'jquery' ], makeExport ); } else { // Browser globals case. Just assign the // result to a property on the global. origin = root.WebUploader; root.WebUploader = makeExport(); root.WebUploader.noConflict = function() { root.WebUploader = origin; }; } })( window, function( window, define, require ) { /** * @fileOverview jQuery or Zepto */ define('dollar-third',[],function() { var $ = window.__dollar || window.jQuery || window.Zepto; if ( !$ ) { throw new Error('jQuery or Zepto not found!'); } return $; }); /** * @fileOverview Dom 操作相关 */ define('dollar',[ 'dollar-third' ], function( _ ) { return _; }); /** * @fileOverview 使用jQuery的Promise */ define('promise-third',[ 'dollar' ], function( $ ) { return { Deferred: $.Deferred, when: $.when, isPromise: function( anything ) { return anything && typeof anything.then === 'function'; } }; }); /** * @fileOverview Promise/A+ */ define('promise',[ 'promise-third' ], function( _ ) { return _; }); /** * @fileOverview 基础类方法。 */ /** * Web Uploader内部类的详细说明,以下提及的功能类,都可以在`WebUploader`这个变量中访问到。 * * As you know, Web Uploader的每个文件都是用过[AMD](https://github.com/amdjs/amdjs-api/wiki/AMD)规范中的`define`组织起来的, 每个Module都会有个module id. * 默认module id为该文件的路径,而此路径将会转化成名字空间存放在WebUploader中。如: * * * module `base`:WebUploader.Base * * module `file`: WebUploader.File * * module `lib/dnd`: WebUploader.Lib.Dnd * * module `runtime/html5/dnd`: WebUploader.Runtime.Html5.Dnd * * * 以下文档中对类的使用可能省略掉了`WebUploader`前缀。 * @module WebUploader * @title WebUploader API文档 */ define('base',[ 'dollar', 'promise' ], function( $, promise ) { var noop = function() {}, call = Function.call; // http://jsperf.com/uncurrythis // 反科里化 function uncurryThis( fn ) { return function() { return call.apply( fn, arguments ); }; } function bindFn( fn, context ) { return function() { return fn.apply( context, arguments ); }; } function createObject( proto ) { var f; if ( Object.create ) { return Object.create( proto ); } else { f = function() {}; f.prototype = proto; return new f(); } } /** * 基础类,提供一些简单常用的方法。 * @class Base */ return { /** * @property {String} version 当前版本号。 */ version: '0.1.5', /** * @property {jQuery|Zepto} $ 引用依赖的jQuery或者Zepto对象。 */ $: $, Deferred: promise.Deferred, isPromise: promise.isPromise, when: promise.when, /** * @description 简单的浏览器检查结果。 * * * `webkit` webkit版本号,如果浏览器为非webkit内核,此属性为`undefined`。 * * `chrome` chrome浏览器版本号,如果浏览器为chrome,此属性为`undefined`。 * * `ie` ie浏览器版本号,如果浏览器为非ie,此属性为`undefined`。**暂不支持ie10+** * * `firefox` firefox浏览器版本号,如果浏览器为非firefox,此属性为`undefined`。 * * `safari` safari浏览器版本号,如果浏览器为非safari,此属性为`undefined`。 * * `opera` opera浏览器版本号,如果浏览器为非opera,此属性为`undefined`。 * * @property {Object} [browser] */ browser: (function( ua ) { var ret = {}, webkit = ua.match( /WebKit\/([\d.]+)/ ), chrome = ua.match( /Chrome\/([\d.]+)/ ) || ua.match( /CriOS\/([\d.]+)/ ), ie = ua.match( /MSIE\s([\d\.]+)/ ) || ua.match( /(?:trident)(?:.*rv:([\w.]+))?/i ), firefox = ua.match( /Firefox\/([\d.]+)/ ), safari = ua.match( /Safari\/([\d.]+)/ ), opera = ua.match( /OPR\/([\d.]+)/ ); webkit && (ret.webkit = parseFloat( webkit[ 1 ] )); chrome && (ret.chrome = parseFloat( chrome[ 1 ] )); ie && (ret.ie = parseFloat( ie[ 1 ] )); firefox && (ret.firefox = parseFloat( firefox[ 1 ] )); safari && (ret.safari = parseFloat( safari[ 1 ] )); opera && (ret.opera = parseFloat( opera[ 1 ] )); return ret; })( navigator.userAgent ), /** * @description 操作系统检查结果。 * * * `android` 如果在android浏览器环境下,此值为对应的android版本号,否则为`undefined`。 * * `ios` 如果在ios浏览器环境下,此值为对应的ios版本号,否则为`undefined`。 * @property {Object} [os] */ os: (function( ua ) { var ret = {}, // osx = !!ua.match( /\(Macintosh\; Intel / ), android = ua.match( /(?:Android);?[\s\/]+([\d.]+)?/ ), ios = ua.match( /(?:iPad|iPod|iPhone).*OS\s([\d_]+)/ ); // osx && (ret.osx = true); android && (ret.android = parseFloat( android[ 1 ] )); ios && (ret.ios = parseFloat( ios[ 1 ].replace( /_/g, '.' ) )); return ret; })( navigator.userAgent ), /** * 实现类与类之间的继承。 * @method inherits * @grammar Base.inherits( super ) => child * @grammar Base.inherits( super, protos ) => child * @grammar Base.inherits( super, protos, statics ) => child * @param {Class} super 父类 * @param {Object | Function} [protos] 子类或者对象。如果对象中包含constructor,子类将是用此属性值。 * @param {Function} [protos.constructor] 子类构造器,不指定的话将创建个临时的直接执行父类构造器的方法。 * @param {Object} [statics] 静态属性或方法。 * @return {Class} 返回子类。 * @example * function Person() { * console.log( 'Super' ); * } * Person.prototype.hello = function() { * console.log( 'hello' ); * }; * * var Manager = Base.inherits( Person, { * world: function() { * console.log( 'World' ); * } * }); * * // 因为没有指定构造器,父类的构造器将会执行。 * var instance = new Manager(); // => Super * * // 继承子父类的方法 * instance.hello(); // => hello * instance.world(); // => World * * // 子类的__super__属性指向父类 * console.log( Manager.__super__ === Person ); // => true */ inherits: function( Super, protos, staticProtos ) { var child; if ( typeof protos === 'function' ) { child = protos; protos = null; } else if ( protos && protos.hasOwnProperty('constructor') ) { child = protos.constructor; } else { child = function() { return Super.apply( this, arguments ); }; } // 复制静态方法 $.extend( true, child, Super, staticProtos || {} ); /* jshint camelcase: false */ // 让子类的__super__属性指向父类。 child.__super__ = Super.prototype; // 构建原型,添加原型方法或属性。 // 暂时用Object.create实现。 child.prototype = createObject( Super.prototype ); protos && $.extend( true, child.prototype, protos ); return child; }, /** * 一个不做任何事情的方法。可以用来赋值给默认的callback. * @method noop */ noop: noop, /** * 返回一个新的方法,此方法将已指定的`context`来执行。 * @grammar Base.bindFn( fn, context ) => Function * @method bindFn * @example * var doSomething = function() { * console.log( this.name ); * }, * obj = { * name: 'Object Name' * }, * aliasFn = Base.bind( doSomething, obj ); * * aliasFn(); // => Object Name * */ bindFn: bindFn, /** * 引用Console.log如果存在的话,否则引用一个[空函数noop](#WebUploader:Base.noop)。 * @grammar Base.log( args... ) => undefined * @method log */ log: (function() { if ( window.console ) { return bindFn( console.log, console ); } return noop; })(), nextTick: (function() { return function( cb ) { setTimeout( cb, 1 ); }; // @bug 当浏览器不在当前窗口时就停了。 // var next = window.requestAnimationFrame || // window.webkitRequestAnimationFrame || // window.mozRequestAnimationFrame || // function( cb ) { // window.setTimeout( cb, 1000 / 60 ); // }; // // fix: Uncaught TypeError: Illegal invocation // return bindFn( next, window ); })(), /** * 被[uncurrythis](http://www.2ality.com/2011/11/uncurrying-this.html)的数组slice方法。 * 将用来将非数组对象转化成数组对象。 * @grammar Base.slice( target, start[, end] ) => Array * @method slice * @example * function doSomthing() { * var args = Base.slice( arguments, 1 ); * console.log( args ); * } * * doSomthing( 'ignored', 'arg2', 'arg3' ); // => Array ["arg2", "arg3"] */ slice: uncurryThis( [].slice ), /** * 生成唯一的ID * @method guid * @grammar Base.guid() => String * @grammar Base.guid( prefx ) => String */ guid: (function() { var counter = 0; return function( prefix ) { var guid = (+new Date()).toString( 32 ), i = 0; for ( ; i < 5; i++ ) { guid += Math.floor( Math.random() * 65535 ).toString( 32 ); } return (prefix || 'wu_') + guid + (counter++).toString( 32 ); }; })(), /** * 格式化文件大小, 输出成带单位的字符串 * @method formatSize * @grammar Base.formatSize( size ) => String * @grammar Base.formatSize( size, pointLength ) => String * @grammar Base.formatSize( size, pointLength, units ) => String * @param {Number} size 文件大小 * @param {Number} [pointLength=2] 精确到的小数点数。 * @param {Array} [units=[ 'B', 'K', 'M', 'G', 'TB' ]] 单位数组。从字节,到千字节,一直往上指定。如果单位数组里面只指定了到了K(千字节),同时文件大小大于M, 此方法的输出将还是显示成多少K. * @example * console.log( Base.formatSize( 100 ) ); // => 100B * console.log( Base.formatSize( 1024 ) ); // => 1.00K * console.log( Base.formatSize( 1024, 0 ) ); // => 1K * console.log( Base.formatSize( 1024 * 1024 ) ); // => 1.00M * console.log( Base.formatSize( 1024 * 1024 * 1024 ) ); // => 1.00G * console.log( Base.formatSize( 1024 * 1024 * 1024, 0, ['B', 'KB', 'MB'] ) ); // => 1024MB */ formatSize: function( size, pointLength, units ) { var unit; units = units || [ 'B', 'K', 'M', 'G', 'TB' ]; while ( (unit = units.shift()) && size > 1024 ) { size = size / 1024; } return (unit === 'B' ? size : size.toFixed( pointLength || 2 )) + unit; } }; }); /** * 事件处理类,可以独立使用,也可以扩展给对象使用。 * @fileOverview Mediator */ define('mediator',[ 'base' ], function( Base ) { var $ = Base.$, slice = [].slice, separator = /\s+/, protos; // 根据条件过滤出事件handlers. function findHandlers( arr, name, callback, context ) { return $.grep( arr, function( handler ) { return handler && (!name || handler.e === name) && (!callback || handler.cb === callback || handler.cb._cb === callback) && (!context || handler.ctx === context); }); } function eachEvent( events, callback, iterator ) { // 不支持对象,只支持多个event用空格隔开 $.each( (events || '').split( separator ), function( _, key ) { iterator( key, callback ); }); } function triggerHanders( events, args ) { var stoped = false, i = -1, len = events.length, handler; while ( ++i < len ) { handler = events[ i ]; if ( handler.cb.apply( handler.ctx2, args ) === false ) { stoped = true; break; } } return !stoped; } protos = { /** * 绑定事件。 * * `callback`方法在执行时,arguments将会来源于trigger的时候携带的参数。如 * ```javascript * var obj = {}; * * // 使得obj有事件行为 * Mediator.installTo( obj ); * * obj.on( 'testa', function( arg1, arg2 ) { * console.log( arg1, arg2 ); // => 'arg1', 'arg2' * }); * * obj.trigger( 'testa', 'arg1', 'arg2' ); * ``` * * 如果`callback`中,某一个方法`return false`了,则后续的其他`callback`都不会被执行到。 * 切会影响到`trigger`方法的返回值,为`false`。 * * `on`还可以用来添加一个特殊事件`all`, 这样所有的事件触发都会响应到。同时此类`callback`中的arguments有一个不同处, * 就是第一个参数为`type`,记录当前是什么事件在触发。此类`callback`的优先级比脚低,会再正常`callback`执行完后触发。 * ```javascript * obj.on( 'all', function( type, arg1, arg2 ) { * console.log( type, arg1, arg2 ); // => 'testa', 'arg1', 'arg2' * }); * ``` * * @method on * @grammar on( name, callback[, context] ) => self * @param {String} name 事件名,支持多个事件用空格隔开 * @param {Function} callback 事件处理器 * @param {Object} [context] 事件处理器的上下文。 * @return {self} 返回自身,方便链式 * @chainable * @class Mediator */ on: function( name, callback, context ) { var me = this, set; if ( !callback ) { return this; } set = this._events || (this._events = []); eachEvent( name, callback, function( name, callback ) { var handler = { e: name }; handler.cb = callback; handler.ctx = context; handler.ctx2 = context || me; handler.id = set.length; set.push( handler ); }); return this; }, /** * 绑定事件,且当handler执行完后,自动解除绑定。 * @method once * @grammar once( name, callback[, context] ) => self * @param {String} name 事件名 * @param {Function} callback 事件处理器 * @param {Object} [context] 事件处理器的上下文。 * @return {self} 返回自身,方便链式 * @chainable */ once: function( name, callback, context ) { var me = this; if ( !callback ) { return me; } eachEvent( name, callback, function( name, callback ) { var once = function() { me.off( name, once ); return callback.apply( context || me, arguments ); }; once._cb = callback; me.on( name, once, context ); }); return me; }, /** * 解除事件绑定 * @method off * @grammar off( [name[, callback[, context] ] ] ) => self * @param {String} [name] 事件名 * @param {Function} [callback] 事件处理器 * @param {Object} [context] 事件处理器的上下文。 * @return {self} 返回自身,方便链式 * @chainable */ off: function( name, cb, ctx ) { var events = this._events; if ( !events ) { return this; } if ( !name && !cb && !ctx ) { this._events = []; return this; } eachEvent( name, cb, function( name, cb ) { $.each( findHandlers( events, name, cb, ctx ), function() { delete events[ this.id ]; }); }); return this; }, /** * 触发事件 * @method trigger * @grammar trigger( name[, args...] ) => self * @param {String} type 事件名 * @param {*} [...] 任意参数 * @return {Boolean} 如果handler中return false了,则返回false, 否则返回true */ trigger: function( type ) { var args, events, allEvents; if ( !this._events || !type ) { return this; } args = slice.call( arguments, 1 ); events = findHandlers( this._events, type ); allEvents = findHandlers( this._events, 'all' ); return triggerHanders( events, args ) && triggerHanders( allEvents, arguments ); } }; /** * 中介者,它本身是个单例,但可以通过[installTo](#WebUploader:Mediator:installTo)方法,使任何对象具备事件行为。 * 主要目的是负责模块与模块之间的合作,降低耦合度。 * * @class Mediator */ return $.extend({ /** * 可以通过这个接口,使任何对象具备事件功能。 * @method installTo * @param {Object} obj 需要具备事件行为的对象。 * @return {Object} 返回obj. */ installTo: function( obj ) { return $.extend( obj, protos ); } }, protos ); }); /** * @fileOverview Uploader上传类 */ define('uploader',[ 'base', 'mediator' ], function( Base, Mediator ) { var $ = Base.$; /** * 上传入口类。 * @class Uploader * @constructor * @grammar new Uploader( opts ) => Uploader * @example * var uploader = WebUploader.Uploader({ * swf: 'path_of_swf/Uploader.swf', * * // 开起分片上传。 * chunked: true * }); */ function Uploader( opts ) { this.options = $.extend( true, {}, Uploader.options, opts ); this._init( this.options ); } // default Options // widgets中有相应扩展 Uploader.options = {}; Mediator.installTo( Uploader.prototype ); // 批量添加纯命令式方法。 $.each({ upload: 'start-upload', stop: 'stop-upload', getFile: 'get-file', getFiles: 'get-files', addFile: 'add-file', addFiles: 'add-file', sort: 'sort-files', removeFile: 'remove-file', cancelFile: 'cancel-file', skipFile: 'skip-file', retry: 'retry', isInProgress: 'is-in-progress', makeThumb: 'make-thumb', md5File: 'md5-file', getDimension: 'get-dimension', addButton: 'add-btn', predictRuntimeType: 'predict-runtime-type', refresh: 'refresh', disable: 'disable', enable: 'enable', reset: 'reset' }, function( fn, command ) { Uploader.prototype[ fn ] = function() { return this.request( command, arguments ); }; }); $.extend( Uploader.prototype, { state: 'pending', _init: function( opts ) { var me = this; me.request( 'init', opts, function() { me.state = 'ready'; me.trigger('ready'); }); }, /** * 获取或者设置Uploader配置项。 * @method option * @grammar option( key ) => * * @grammar option( key, val ) => self * @example * * // 初始状态图片上传前不会压缩 * var uploader = new WebUploader.Uploader({ * compress: null; * }); * * // 修改后图片上传前,尝试将图片压缩到1600 * 1600 * uploader.option( 'compress', { * width: 1600, * height: 1600 * }); */ option: function( key, val ) { var opts = this.options; // setter if ( arguments.length > 1 ) { if ( $.isPlainObject( val ) && $.isPlainObject( opts[ key ] ) ) { $.extend( opts[ key ], val ); } else { opts[ key ] = val; } } else { // getter return key ? opts[ key ] : opts; } }, /** * 获取文件统计信息。返回一个包含一下信息的对象。 * * `successNum` 上传成功的文件数 * * `progressNum` 上传中的文件数 * * `cancelNum` 被删除的文件数 * * `invalidNum` 无效的文件数 * * `uploadFailNum` 上传失败的文件数 * * `queueNum` 还在队列中的文件数 * * `interruptNum` 被暂停的文件数 * @method getStats * @grammar getStats() => Object */ getStats: function() { // return this._mgr.getStats.apply( this._mgr, arguments ); var stats = this.request('get-stats'); return stats ? { successNum: stats.numOfSuccess, progressNum: stats.numOfProgress, // who care? // queueFailNum: 0, cancelNum: stats.numOfCancel, invalidNum: stats.numOfInvalid, uploadFailNum: stats.numOfUploadFailed, queueNum: stats.numOfQueue, interruptNum: stats.numofInterrupt } : {}; }, // 需要重写此方法来来支持opts.onEvent和instance.onEvent的处理器 trigger: function( type/*, args...*/ ) { var args = [].slice.call( arguments, 1 ), opts = this.options, name = 'on' + type.substring( 0, 1 ).toUpperCase() + type.substring( 1 ); if ( // 调用通过on方法注册的handler. Mediator.trigger.apply( this, arguments ) === false || // 调用opts.onEvent $.isFunction( opts[ name ] ) && opts[ name ].apply( this, args ) === false || // 调用this.onEvent $.isFunction( this[ name ] ) && this[ name ].apply( this, args ) === false || // 广播所有uploader的事件。 Mediator.trigger.apply( Mediator, [ this, type ].concat( args ) ) === false ) { return false; } return true; }, /** * 销毁 webuploader 实例 * @method destroy * @grammar destroy() => undefined */ destroy: function() { this.request( 'destroy', arguments ); this.off(); }, // widgets/widget.js将补充此方法的详细文档。 request: Base.noop }); /** * 创建Uploader实例,等同于new Uploader( opts ); * @method create * @class Base * @static * @grammar Base.create( opts ) => Uploader */ Base.create = Uploader.create = function( opts ) { return new Uploader( opts ); }; // 暴露Uploader,可以通过它来扩展业务逻辑。 Base.Uploader = Uploader; return Uploader; }); /** * @fileOverview Runtime管理器,负责Runtime的选择, 连接 */ define('runtime/runtime',[ 'base', 'mediator' ], function( Base, Mediator ) { var $ = Base.$, factories = {}, // 获取对象的第一个key getFirstKey = function( obj ) { for ( var key in obj ) { if ( obj.hasOwnProperty( key ) ) { return key; } } return null; }; // 接口类。 function Runtime( options ) { this.options = $.extend({ container: document.body }, options ); this.uid = Base.guid('rt_'); } $.extend( Runtime.prototype, { getContainer: function() { var opts = this.options, parent, container; if ( this._container ) { return this._container; } parent = $( opts.container || document.body ); container = $( document.createElement('div') ); container.attr( 'id', 'rt_' + this.uid ); container.css({ position: 'absolute', top: '0px', left: '0px', width: '1px', height: '1px', overflow: 'hidden' }); parent.append( container ); parent.addClass('webuploader-container'); this._container = container; this._parent = parent; return container; }, init: Base.noop, exec: Base.noop, destroy: function() { this._container && this._container.remove(); this._parent && this._parent.removeClass('webuploader-container'); this.off(); } }); Runtime.orders = 'html5,flash'; /** * 添加Runtime实现。 * @param {String} type 类型 * @param {Runtime} factory 具体Runtime实现。 */ Runtime.addRuntime = function( type, factory ) { factories[ type ] = factory; }; Runtime.hasRuntime = function( type ) { return !!(type ? factories[ type ] : getFirstKey( factories )); }; Runtime.create = function( opts, orders ) { var type, runtime; orders = orders || Runtime.orders; $.each( orders.split( /\s*,\s*/g ), function() { if ( factories[ this ] ) { type = this; return false; } }); type = type || getFirstKey( factories ); if ( !type ) { throw new Error('Runtime Error'); } runtime = new factories[ type ]( opts ); return runtime; }; Mediator.installTo( Runtime.prototype ); return Runtime; }); /** * @fileOverview Runtime管理器,负责Runtime的选择, 连接 */ define('runtime/client',[ 'base', 'mediator', 'runtime/runtime' ], function( Base, Mediator, Runtime ) { var cache; cache = (function() { var obj = {}; return { add: function( runtime ) { obj[ runtime.uid ] = runtime; }, get: function( ruid, standalone ) { var i; if ( ruid ) { return obj[ ruid ]; } for ( i in obj ) { // 有些类型不能重用,比如filepicker. if ( standalone && obj[ i ].__standalone ) { continue; } return obj[ i ]; } return null; }, remove: function( runtime ) { delete obj[ runtime.uid ]; } }; })(); function RuntimeClient( component, standalone ) { var deferred = Base.Deferred(), runtime; this.uid = Base.guid('client_'); // 允许runtime没有初始化之前,注册一些方法在初始化后执行。 this.runtimeReady = function( cb ) { return deferred.done( cb ); }; this.connectRuntime = function( opts, cb ) { // already connected. if ( runtime ) { throw new Error('already connected!'); } deferred.done( cb ); if ( typeof opts === 'string' && cache.get( opts ) ) { runtime = cache.get( opts ); } // 像filePicker只能独立存在,不能公用。 runtime = runtime || cache.get( null, standalone ); // 需要创建 if ( !runtime ) { runtime = Runtime.create( opts, opts.runtimeOrder ); runtime.__promise = deferred.promise(); runtime.once( 'ready', deferred.resolve ); runtime.init(); cache.add( runtime ); runtime.__client = 1; } else { // 来自cache Base.$.extend( runtime.options, opts ); runtime.__promise.then( deferred.resolve ); runtime.__client++; } standalone && (runtime.__standalone = standalone); return runtime; }; this.getRuntime = function() { return runtime; }; this.disconnectRuntime = function() { if ( !runtime ) { return; } runtime.__client--; if ( runtime.__client <= 0 ) { cache.remove( runtime ); delete runtime.__promise; runtime.destroy(); } runtime = null; }; this.exec = function() { if ( !runtime ) { return; } var args = Base.slice( arguments ); component && args.unshift( component ); return runtime.exec.apply( this, args ); }; this.getRuid = function() { return runtime && runtime.uid; }; this.destroy = (function( destroy ) { return function() { destroy && destroy.apply( this, arguments ); this.trigger('destroy'); this.off(); this.exec('destroy'); this.disconnectRuntime(); }; })( this.destroy ); } Mediator.installTo( RuntimeClient.prototype ); return RuntimeClient; }); /** * @fileOverview 错误信息 */ define('lib/dnd',[ 'base', 'mediator', 'runtime/client' ], function( Base, Mediator, RuntimeClent ) { var $ = Base.$; function DragAndDrop( opts ) { opts = this.options = $.extend({}, DragAndDrop.options, opts ); opts.container = $( opts.container ); if ( !opts.container.length ) { return; } RuntimeClent.call( this, 'DragAndDrop' ); } DragAndDrop.options = { accept: null, disableGlobalDnd: false }; Base.inherits( RuntimeClent, { constructor: DragAndDrop, init: function() { var me = this; me.connectRuntime( me.options, function() { me.exec('init'); me.trigger('ready'); }); } }); Mediator.installTo( DragAndDrop.prototype ); return DragAndDrop; }); /** * @fileOverview 组件基类。 */ define('widgets/widget',[ 'base', 'uploader' ], function( Base, Uploader ) { var $ = Base.$, _init = Uploader.prototype._init, _destroy = Uploader.prototype.destroy, IGNORE = {}, widgetClass = []; function isArrayLike( obj ) { if ( !obj ) { return false; } var length = obj.length, type = $.type( obj ); if ( obj.nodeType === 1 && length ) { return true; } return type === 'array' || type !== 'function' && type !== 'string' && (length === 0 || typeof length === 'number' && length > 0 && (length - 1) in obj); } function Widget( uploader ) { this.owner = uploader; this.options = uploader.options; } $.extend( Widget.prototype, { init: Base.noop, // 类Backbone的事件监听声明,监听uploader实例上的事件 // widget直接无法监听事件,事件只能通过uploader来传递 invoke: function( apiName, args ) { /* { 'make-thumb': 'makeThumb' } */ var map = this.responseMap; // 如果无API响应声明则忽略 if ( !map || !(apiName in map) || !(map[ apiName ] in this) || !$.isFunction( this[ map[ apiName ] ] ) ) { return IGNORE; } return this[ map[ apiName ] ].apply( this, args ); }, /** * 发送命令。当传入`callback`或者`handler`中返回`promise`时。返回一个当所有`handler`中的promise都完成后完成的新`promise`。 * @method request * @grammar request( command, args ) => * | Promise * @grammar request( command, args, callback ) => Promise * @for Uploader */ request: function() { return this.owner.request.apply( this.owner, arguments ); } }); // 扩展Uploader. $.extend( Uploader.prototype, { /** * @property {String | Array} [disableWidgets=undefined] * @namespace options * @for Uploader * @description 默认所有 Uploader.register 了的 widget 都会被加载,如果禁用某一部分,请通过此 option 指定黑名单。 */ // 覆写_init用来初始化widgets _init: function() { var me = this, widgets = me._widgets = [], deactives = me.options.disableWidgets || ''; $.each( widgetClass, function( _, klass ) { (!deactives || !~deactives.indexOf( klass._name )) && widgets.push( new klass( me ) ); }); return _init.apply( me, arguments ); }, request: function( apiName, args, callback ) { var i = 0, widgets = this._widgets, len = widgets && widgets.length, rlts = [], dfds = [], widget, rlt, promise, key; args = isArrayLike( args ) ? args : [ args ]; for ( ; i < len; i++ ) { widget = widgets[ i ]; rlt = widget.invoke( apiName, args ); if ( rlt !== IGNORE ) { // Deferred对象 if ( Base.isPromise( rlt ) ) { dfds.push( rlt ); } else { rlts.push( rlt ); } } } // 如果有callback,则用异步方式。 if ( callback || dfds.length ) { promise = Base.when.apply( Base, dfds ); key = promise.pipe ? 'pipe' : 'then'; // 很重要不能删除。删除了会死循环。 // 保证执行顺序。让callback总是在下一个 tick 中执行。 return promise[ key ](function() { var deferred = Base.Deferred(), args = arguments; if ( args.length === 1 ) { args = args[ 0 ]; } setTimeout(function() { deferred.resolve( args ); }, 1 ); return deferred.promise(); })[ callback ? key : 'done' ]( callback || Base.noop ); } else { return rlts[ 0 ]; } }, destroy: function() { _destroy.apply( this, arguments ); this._widgets = null; } }); /** * 添加组件 * @grammar Uploader.register(proto); * @grammar Uploader.register(map, proto); * @param {object} responseMap API 名称与函数实现的映射 * @param {object} proto 组件原型,构造函数通过 constructor 属性定义 * @method Uploader.register * @for Uploader * @example * Uploader.register({ * 'make-thumb': 'makeThumb' * }, { * init: function( options ) {}, * makeThumb: function() {} * }); * * Uploader.register({ * 'make-thumb': function() { * * } * }); */ Uploader.register = Widget.register = function( responseMap, widgetProto ) { var map = { init: 'init', destroy: 'destroy', name: 'anonymous' }, klass; if ( arguments.length === 1 ) { widgetProto = responseMap; // 自动生成 map 表。 $.each(widgetProto, function(key) { if ( key[0] === '_' || key === 'name' ) { key === 'name' && (map.name = widgetProto.name); return; } map[key.replace(/[A-Z]/g, '-$&').toLowerCase()] = key; }); } else { map = $.extend( map, responseMap ); } widgetProto.responseMap = map; klass = Base.inherits( Widget, widgetProto ); klass._name = map.name; widgetClass.push( klass ); return klass; }; /** * 删除插件,只有在注册时指定了名字的才能被删除。 * @grammar Uploader.unRegister(name); * @param {string} name 组件名字 * @method Uploader.unRegister * @for Uploader * @example * * Uploader.register({ * name: 'custom', * * 'make-thumb': function() { * * } * }); * * Uploader.unRegister('custom'); */ Uploader.unRegister = Widget.unRegister = function( name ) { if ( !name || name === 'anonymous' ) { return; } // 删除指定的插件。 for ( var i = widgetClass.length; i--; ) { if ( widgetClass[i]._name === name ) { widgetClass.splice(i, 1) } } }; return Widget; }); /** * @fileOverview DragAndDrop Widget。 */ define('widgets/filednd',[ 'base', 'uploader', 'lib/dnd', 'widgets/widget' ], function( Base, Uploader, Dnd ) { var $ = Base.$; Uploader.options.dnd = ''; /** * @property {Selector} [dnd=undefined] 指定Drag And Drop拖拽的容器,如果不指定,则不启动。 * @namespace options * @for Uploader */ /** * @property {Selector} [disableGlobalDnd=false] 是否禁掉整个页面的拖拽功能,如果不禁用,图片拖进来的时候会默认被浏览器打开。 * @namespace options * @for Uploader */ /** * @event dndAccept * @param {DataTransferItemList} items DataTransferItem * @description 阻止此事件可以拒绝某些类型的文件拖入进来。目前只有 chrome 提供这样的 API,且只能通过 mime-type 验证。 * @for Uploader */ return Uploader.register({ name: 'dnd', init: function( opts ) { if ( !opts.dnd || this.request('predict-runtime-type') !== 'html5' ) { return; } var me = this, deferred = Base.Deferred(), options = $.extend({}, { disableGlobalDnd: opts.disableGlobalDnd, container: opts.dnd, accept: opts.accept }), dnd; this.dnd = dnd = new Dnd( options ); dnd.once( 'ready', deferred.resolve ); dnd.on( 'drop', function( files ) { me.request( 'add-file', [ files ]); }); // 检测文件是否全部允许添加。 dnd.on( 'accept', function( items ) { return me.owner.trigger( 'dndAccept', items ); }); dnd.init(); return deferred.promise(); }, destroy: function() { this.dnd && this.dnd.destroy(); } }); }); /** * @fileOverview 错误信息 */ define('lib/filepaste',[ 'base', 'mediator', 'runtime/client' ], function( Base, Mediator, RuntimeClent ) { var $ = Base.$; function FilePaste( opts ) { opts = this.options = $.extend({}, opts ); opts.container = $( opts.container || document.body ); RuntimeClent.call( this, 'FilePaste' ); } Base.inherits( RuntimeClent, { constructor: FilePaste, init: function() { var me = this; me.connectRuntime( me.options, function() { me.exec('init'); me.trigger('ready'); }); } }); Mediator.installTo( FilePaste.prototype ); return FilePaste; }); /** * @fileOverview 组件基类。 */ define('widgets/filepaste',[ 'base', 'uploader', 'lib/filepaste', 'widgets/widget' ], function( Base, Uploader, FilePaste ) { var $ = Base.$; /** * @property {Selector} [paste=undefined] 指定监听paste事件的容器,如果不指定,不启用此功能。此功能为通过粘贴来添加截屏的图片。建议设置为`document.body`. * @namespace options * @for Uploader */ return Uploader.register({ name: 'paste', init: function( opts ) { if ( !opts.paste || this.request('predict-runtime-type') !== 'html5' ) { return; } var me = this, deferred = Base.Deferred(), options = $.extend({}, { container: opts.paste, accept: opts.accept }), paste; this.paste = paste = new FilePaste( options ); paste.once( 'ready', deferred.resolve ); paste.on( 'paste', function( files ) { me.owner.request( 'add-file', [ files ]); }); paste.init(); return deferred.promise(); }, destroy: function() { this.paste && this.paste.destroy(); } }); }); /** * @fileOverview Blob */ define('lib/blob',[ 'base', 'runtime/client' ], function( Base, RuntimeClient ) { function Blob( ruid, source ) { var me = this; me.source = source; me.ruid = ruid; this.size = source.size || 0; // 如果没有指定 mimetype, 但是知道文件后缀。 if ( !source.type && this.ext && ~'jpg,jpeg,png,gif,bmp'.indexOf( this.ext ) ) { this.type = 'image/' + (this.ext === 'jpg' ? 'jpeg' : this.ext); } else { this.type = source.type || 'application/octet-stream'; } RuntimeClient.call( me, 'Blob' ); this.uid = source.uid || this.uid; if ( ruid ) { me.connectRuntime( ruid ); } } Base.inherits( RuntimeClient, { constructor: Blob, slice: function( start, end ) { return this.exec( 'slice', start, end ); }, getSource: function() { return this.source; } }); return Blob; }); /** * 为了统一化Flash的File和HTML5的File而存在。 * 以至于要调用Flash里面的File,也可以像调用HTML5版本的File一下。 * @fileOverview File */ define('lib/file',[ 'base', 'lib/blob' ], function( Base, Blob ) { var uid = 1, rExt = /\.([^.]+)$/; function File( ruid, file ) { var ext; this.name = file.name || ('untitled' + uid++); ext = rExt.exec( file.name ) ? RegExp.$1.toLowerCase() : ''; // todo 支持其他类型文件的转换。 // 如果有 mimetype, 但是文件名里面没有找出后缀规律 if ( !ext && file.type ) { ext = /\/(jpg|jpeg|png|gif|bmp)$/i.exec( file.type ) ? RegExp.$1.toLowerCase() : ''; this.name += '.' + ext; } this.ext = ext; this.lastModifiedDate = file.lastModifiedDate || (new Date()).toLocaleString(); Blob.apply( this, arguments ); } return Base.inherits( Blob, File ); }); /** * @fileOverview 错误信息 */ define('lib/filepicker',[ 'base', 'runtime/client', 'lib/file' ], function( Base, RuntimeClent, File ) { var $ = Base.$; function FilePicker( opts ) { opts = this.options = $.extend({}, FilePicker.options, opts ); opts.container = $( opts.id ); if ( !opts.container.length ) { throw new Error('按钮指定错误'); } opts.innerHTML = opts.innerHTML || opts.label || opts.container.html() || ''; opts.button = $( opts.button || document.createElement('div') ); opts.button.html( opts.innerHTML ); opts.container.html( opts.button ); RuntimeClent.call( this, 'FilePicker', true ); } FilePicker.options = { button: null, container: null, label: null, innerHTML: null, multiple: true, accept: null, name: 'file' }; Base.inherits( RuntimeClent, { constructor: FilePicker, init: function() { var me = this, opts = me.options, button = opts.button; button.addClass('webuploader-pick'); me.on( 'all', function( type ) { var files; switch ( type ) { case 'mouseenter': button.addClass('webuploader-pick-hover'); break; case 'mouseleave': button.removeClass('webuploader-pick-hover'); break; case 'change': files = me.exec('getFiles'); me.trigger( 'select', $.map( files, function( file ) { file = new File( me.getRuid(), file ); // 记录来源。 file._refer = opts.container; return file; }), opts.container ); break; } }); me.connectRuntime( opts, function() { me.refresh(); me.exec( 'init', opts ); me.trigger('ready'); }); this._resizeHandler = Base.bindFn( this.refresh, this ); $( window ).on( 'resize', this._resizeHandler ); }, refresh: function() { var shimContainer = this.getRuntime().getContainer(), button = this.options.button, width = button.outerWidth ? button.outerWidth() : button.width(), height = button.outerHeight ? button.outerHeight() : button.height(), pos = button.offset(); width && height && shimContainer.css({ bottom: 'auto', right: 'auto', width: width + 'px', height: height + 'px' }).offset( pos ); }, enable: function() { var btn = this.options.button; btn.removeClass('webuploader-pick-disable'); this.refresh(); }, disable: function() { var btn = this.options.button; this.getRuntime().getContainer().css({ top: '-99999px' }); btn.addClass('webuploader-pick-disable'); }, destroy: function() { var btn = this.options.button; $( window ).off( 'resize', this._resizeHandler ); btn.removeClass('webuploader-pick-disable webuploader-pick-hover ' + 'webuploader-pick'); } }); return FilePicker; }); /** * @fileOverview 文件选择相关 */ define('widgets/filepicker',[ 'base', 'uploader', 'lib/filepicker', 'widgets/widget' ], function( Base, Uploader, FilePicker ) { var $ = Base.$; $.extend( Uploader.options, { /** * @property {Selector | Object} [pick=undefined] * @namespace options * @for Uploader * @description 指定选择文件的按钮容器,不指定则不创建按钮。 * * * `id` {Seletor|dom} 指定选择文件的按钮容器,不指定则不创建按钮。**注意** 这里虽然写的是 id, 但是不是只支持 id, 还支持 class, 或者 dom 节点。 * * `label` {String} 请采用 `innerHTML` 代替 * * `innerHTML` {String} 指定按钮文字。不指定时优先从指定的容器中看是否自带文字。 * * `multiple` {Boolean} 是否开起同时选择多个文件能力。 */ pick: null, /** * @property {Arroy} [accept=null] * @namespace options * @for Uploader * @description 指定接受哪些类型的文件。 由于目前还有ext转mimeType表,所以这里需要分开指定。 * * * `title` {String} 文字描述 * * `extensions` {String} 允许的文件后缀,不带点,多个用逗号分割。 * * `mimeTypes` {String} 多个用逗号分割。 * * 如: * * ``` * { * title: 'Images', * extensions: 'gif,jpg,jpeg,bmp,png', * mimeTypes: 'image/*' * } * ``` */ accept: null/*{ title: 'Images', extensions: 'gif,jpg,jpeg,bmp,png', mimeTypes: 'image/*' }*/ }); return Uploader.register({ name: 'picker', init: function( opts ) { this.pickers = []; return opts.pick && this.addBtn( opts.pick ); }, refresh: function() { $.each( this.pickers, function() { this.refresh(); }); }, /** * @method addButton * @for Uploader * @grammar addButton( pick ) => Promise * @description * 添加文件选择按钮,如果一个按钮不够,需要调用此方法来添加。参数跟[options.pick](#WebUploader:Uploader:options)一致。 * @example * uploader.addButton({ * id: '#btnContainer', * innerHTML: '选择文件' * }); */ addBtn: function( pick ) { var me = this, opts = me.options, accept = opts.accept, promises = []; if ( !pick ) { return; } $.isPlainObject( pick ) || (pick = { id: pick }); $( pick.id ).each(function() { var options, picker, deferred; deferred = Base.Deferred(); options = $.extend({}, pick, { accept: $.isPlainObject( accept ) ? [ accept ] : accept, swf: opts.swf, runtimeOrder: opts.runtimeOrder, id: this }); picker = new FilePicker( options ); picker.once( 'ready', deferred.resolve ); picker.on( 'select', function( files ) { me.owner.request( 'add-file', [ files ]); }); picker.init(); me.pickers.push( picker ); promises.push( deferred.promise() ); }); return Base.when.apply( Base, promises ); }, disable: function() { $.each( this.pickers, function() { this.disable(); }); }, enable: function() { $.each( this.pickers, function() { this.enable(); }); }, destroy: function() { $.each( this.pickers, function() { this.destroy(); }); this.pickers = null; } }); }); /** * @fileOverview Image */ define('lib/image',[ 'base', 'runtime/client', 'lib/blob' ], function( Base, RuntimeClient, Blob ) { var $ = Base.$; // 构造器。 function Image( opts ) { this.options = $.extend({}, Image.options, opts ); RuntimeClient.call( this, 'Image' ); this.on( 'load', function() { this._info = this.exec('info'); this._meta = this.exec('meta'); }); } // 默认选项。 Image.options = { // 默认的图片处理质量 quality: 90, // 是否裁剪 crop: false, // 是否保留头部信息 preserveHeaders: false, // 是否允许放大。 allowMagnify: false }; // 继承RuntimeClient. Base.inherits( RuntimeClient, { constructor: Image, info: function( val ) { // setter if ( val ) { this._info = val; return this; } // getter return this._info; }, meta: function( val ) { // setter if ( val ) { this._meta = val; return this; } // getter return this._meta; }, loadFromBlob: function( blob ) { var me = this, ruid = blob.getRuid(); this.connectRuntime( ruid, function() { me.exec( 'init', me.options ); me.exec( 'loadFromBlob', blob ); }); }, resize: function() { var args = Base.slice( arguments ); return this.exec.apply( this, [ 'resize' ].concat( args ) ); }, crop: function() { var args = Base.slice( arguments ); return this.exec.apply( this, [ 'crop' ].concat( args ) ); }, getAsDataUrl: function( type ) { return this.exec( 'getAsDataUrl', type ); }, getAsBlob: function( type ) { var blob = this.exec( 'getAsBlob', type ); return new Blob( this.getRuid(), blob ); } }); return Image; }); /** * @fileOverview 图片操作, 负责预览图片和上传前压缩图片 */ define('widgets/image',[ 'base', 'uploader', 'lib/image', 'widgets/widget' ], function( Base, Uploader, Image ) { var $ = Base.$, throttle; // 根据要处理的文件大小来节流,一次不能处理太多,会卡。 throttle = (function( max ) { var occupied = 0, waiting = [], tick = function() { var item; while ( waiting.length && occupied < max ) { item = waiting.shift(); occupied += item[ 0 ]; item[ 1 ](); } }; return function( emiter, size, cb ) { waiting.push([ size, cb ]); emiter.once( 'destroy', function() { occupied -= size; setTimeout( tick, 1 ); }); setTimeout( tick, 1 ); }; })( 5 * 1024 * 1024 ); $.extend( Uploader.options, { /** * @property {Object} [thumb] * @namespace options * @for Uploader * @description 配置生成缩略图的选项。 * * 默认为: * * ```javascript * { * width: 110, * height: 110, * * // 图片质量,只有type为`image/jpeg`的时候才有效。 * quality: 70, * * // 是否允许放大,如果想要生成小图的时候不失真,此选项应该设置为false. * allowMagnify: true, * * // 是否允许裁剪。 * crop: true, * * // 为空的话则保留原有图片格式。 * // 否则强制转换成指定的类型。 * type: 'image/jpeg' * } * ``` */ thumb: { width: 110, height: 110, quality: 70, allowMagnify: true, crop: true, preserveHeaders: false, // 为空的话则保留原有图片格式。 // 否则强制转换成指定的类型。 // IE 8下面 base64 大小不能超过 32K 否则预览失败,而非 jpeg 编码的图片很可 // 能会超过 32k, 所以这里设置成预览的时候都是 image/jpeg type: 'image/jpeg' }, /** * @property {Object} [compress] * @namespace options * @for Uploader * @description 配置压缩的图片的选项。如果此选项为`false`, 则图片在上传前不进行压缩。 * * 默认为: * * ```javascript * { * width: 1600, * height: 1600, * * // 图片质量,只有type为`image/jpeg`的时候才有效。 * quality: 90, * * // 是否允许放大,如果想要生成小图的时候不失真,此选项应该设置为false. * allowMagnify: false, * * // 是否允许裁剪。 * crop: false, * * // 是否保留头部meta信息。 * preserveHeaders: true, * * // 如果发现压缩后文件大小比原来还大,则使用原来图片 * // 此属性可能会影响图片自动纠正功能 * noCompressIfLarger: false, * * // 单位字节,如果图片大小小于此值,不会采用压缩。 * compressSize: 0 * } * ``` */ compress: { width: 1600, height: 1600, quality: 90, allowMagnify: false, crop: false, preserveHeaders: true } }); return Uploader.register({ name: 'image', /** * 生成缩略图,此过程为异步,所以需要传入`callback`。 * 通常情况在图片加入队里后调用此方法来生成预览图以增强交互效果。 * * 当 width 或者 height 的值介于 0 - 1 时,被当成百分比使用。 * * `callback`中可以接收到两个参数。 * * 第一个为error,如果生成缩略图有错误,此error将为真。 * * 第二个为ret, 缩略图的Data URL值。 * * **注意** * Date URL在IE6/7中不支持,所以不用调用此方法了,直接显示一张暂不支持预览图片好了。 * 也可以借助服务端,将 base64 数据传给服务端,生成一个临时文件供预览。 * * @method makeThumb * @grammar makeThumb( file, callback ) => undefined * @grammar makeThumb( file, callback, width, height ) => undefined * @for Uploader * @example * * uploader.on( 'fileQueued', function( file ) { * var $li = ...; * * uploader.makeThumb( file, function( error, ret ) { * if ( error ) { * $li.text('预览错误'); * } else { * $li.append('<img alt="" src="' + ret + '" />'); * } * }); * * }); */ makeThumb: function( file, cb, width, height ) { var opts, image; file = this.request( 'get-file', file ); // 只预览图片格式。 if ( !file.type.match( /^image/ ) ) { cb( true ); return; } opts = $.extend({}, this.options.thumb ); // 如果传入的是object. if ( $.isPlainObject( width ) ) { opts = $.extend( opts, width ); width = null; } width = width || opts.width; height = height || opts.height; image = new Image( opts ); image.once( 'load', function() { file._info = file._info || image.info(); file._meta = file._meta || image.meta(); // 如果 width 的值介于 0 - 1 // 说明设置的是百分比。 if ( width <= 1 && width > 0 ) { width = file._info.width * width; } // 同样的规则应用于 height if ( height <= 1 && height > 0 ) { height = file._info.height * height; } image.resize( width, height ); }); // 当 resize 完后 image.once( 'complete', function() { cb( false, image.getAsDataUrl( opts.type ) ); image.destroy(); }); image.once( 'error', function( reason ) { cb( reason || true ); image.destroy(); }); throttle( image, file.source.size, function() { file._info && image.info( file._info ); file._meta && image.meta( file._meta ); image.loadFromBlob( file.source ); }); }, beforeSendFile: function( file ) { var opts = this.options.compress || this.options.resize, compressSize = opts && opts.compressSize || 0, noCompressIfLarger = opts && opts.noCompressIfLarger || false, image, deferred; file = this.request( 'get-file', file ); // 只压缩 jpeg 图片格式。 // gif 可能会丢失针 // bmp png 基本上尺寸都不大,且压缩比比较小。 if ( !opts || !~'image/jpeg,image/jpg'.indexOf( file.type ) || file.size < compressSize || file._compressed ) { return; } opts = $.extend({}, opts ); deferred = Base.Deferred(); image = new Image( opts ); deferred.always(function() { image.destroy(); image = null; }); image.once( 'error', deferred.reject ); image.once( 'load', function() { var width = opts.width, height = opts.height; file._info = file._info || image.info(); file._meta = file._meta || image.meta(); // 如果 width 的值介于 0 - 1 // 说明设置的是百分比。 if ( width <= 1 && width > 0 ) { width = file._info.width * width; } // 同样的规则应用于 height if ( height <= 1 && height > 0 ) { height = file._info.height * height; } image.resize( width, height ); }); image.once( 'complete', function() { var blob, size; // 移动端 UC / qq 浏览器的无图模式下 // ctx.getImageData 处理大图的时候会报 Exception // INDEX_SIZE_ERR: DOM Exception 1 try { blob = image.getAsBlob( opts.type ); size = file.size; // 如果压缩后,比原来还大则不用压缩后的。 if ( !noCompressIfLarger || blob.size < size ) { // file.source.destroy && file.source.destroy(); file.source = blob; file.size = blob.size; file.trigger( 'resize', blob.size, size ); } // 标记,避免重复压缩。 file._compressed = true; deferred.resolve(); } catch ( e ) { // 出错了直接继续,让其上传原始图片 deferred.resolve(); } }); file._info && image.info( file._info ); file._meta && image.meta( file._meta ); image.loadFromBlob( file.source ); return deferred.promise(); } }); }); /** * @fileOverview 文件属性封装 */ define('file',[ 'base', 'mediator' ], function( Base, Mediator ) { var $ = Base.$, idPrefix = 'WU_FILE_', idSuffix = 0, rExt = /\.([^.]+)$/, statusMap = {}; function gid() { return idPrefix + idSuffix++; } /** * 文件类 * @class File * @constructor 构造函数 * @grammar new File( source ) => File * @param {Lib.File} source [lib.File](#Lib.File)实例, 此source对象是带有Runtime信息的。 */ function WUFile( source ) { /** * 文件名,包括扩展名(后缀) * @property name * @type {string} */ this.name = source.name || 'Untitled'; /** * 文件体积(字节) * @property size * @type {uint} * @default 0 */ this.size = source.size || 0; /** * 文件MIMETYPE类型,与文件类型的对应关系请参考[http://t.cn/z8ZnFny](http://t.cn/z8ZnFny) * @property type * @type {string} * @default 'application/octet-stream' */ this.type = source.type || 'application/octet-stream'; /** * 文件最后修改日期 * @property lastModifiedDate * @type {int} * @default 当前时间戳 */ this.lastModifiedDate = source.lastModifiedDate || (new Date() * 1); /** * 文件ID,每个对象具有唯一ID,与文件名无关 * @property id * @type {string} */ this.id = gid(); /** * 文件扩展名,通过文件名获取,例如test.png的扩展名为png * @property ext * @type {string} */ this.ext = rExt.exec( this.name ) ? RegExp.$1 : ''; /** * 状态文字说明。在不同的status语境下有不同的用途。 * @property statusText * @type {string} */ this.statusText = ''; // 存储文件状态,防止通过属性直接修改 statusMap[ this.id ] = WUFile.Status.INITED; this.source = source; this.loaded = 0; this.on( 'error', function( msg ) { this.setStatus( WUFile.Status.ERROR, msg ); }); } $.extend( WUFile.prototype, { /** * 设置状态,状态变化时会触发`change`事件。 * @method setStatus * @grammar setStatus( status[, statusText] ); * @param {File.Status|String} status [文件状态值](#WebUploader:File:File.Status) * @param {String} [statusText=''] 状态说明,常在error时使用,用http, abort,server等来标记是由于什么原因导致文件错误。 */ setStatus: function( status, text ) { var prevStatus = statusMap[ this.id ]; typeof text !== 'undefined' && (this.statusText = text); if ( status !== prevStatus ) { statusMap[ this.id ] = status; /** * 文件状态变化 * @event statuschange */ this.trigger( 'statuschange', status, prevStatus ); } }, /** * 获取文件状态 * @return {File.Status} * @example 文件状态具体包括以下几种类型: { // 初始化 INITED: 0, // 已入队列 QUEUED: 1, // 正在上传 PROGRESS: 2, // 上传出错 ERROR: 3, // 上传成功 COMPLETE: 4, // 上传取消 CANCELLED: 5 } */ getStatus: function() { return statusMap[ this.id ]; }, /** * 获取文件原始信息。 * @return {*} */ getSource: function() { return this.source; }, destroy: function() { this.off(); delete statusMap[ this.id ]; } }); Mediator.installTo( WUFile.prototype ); /** * 文件状态值,具体包括以下几种类型: * * `inited` 初始状态 * * `queued` 已经进入队列, 等待上传 * * `progress` 上传中 * * `complete` 上传完成。 * * `error` 上传出错,可重试 * * `interrupt` 上传中断,可续传。 * * `invalid` 文件不合格,不能重试上传。会自动从队列中移除。 * * `cancelled` 文件被移除。 * @property {Object} Status * @namespace File * @class File * @static */ WUFile.Status = { INITED: 'inited', // 初始状态 QUEUED: 'queued', // 已经进入队列, 等待上传 PROGRESS: 'progress', // 上传中 ERROR: 'error', // 上传出错,可重试 COMPLETE: 'complete', // 上传完成。 CANCELLED: 'cancelled', // 上传取消。 INTERRUPT: 'interrupt', // 上传中断,可续传。 INVALID: 'invalid' // 文件不合格,不能重试上传。 }; return WUFile; }); /** * @fileOverview 文件队列 */ define('queue',[ 'base', 'mediator', 'file' ], function( Base, Mediator, WUFile ) { var $ = Base.$, STATUS = WUFile.Status; /** * 文件队列, 用来存储各个状态中的文件。 * @class Queue * @extends Mediator */ function Queue() { /** * 统计文件数。 * * `numOfQueue` 队列中的文件数。 * * `numOfSuccess` 上传成功的文件数 * * `numOfCancel` 被取消的文件数 * * `numOfProgress` 正在上传中的文件数 * * `numOfUploadFailed` 上传错误的文件数。 * * `numOfInvalid` 无效的文件数。 * * `numofDeleted` 被移除的文件数。 * @property {Object} stats */ this.stats = { numOfQueue: 0, numOfSuccess: 0, numOfCancel: 0, numOfProgress: 0, numOfUploadFailed: 0, numOfInvalid: 0, numofDeleted: 0, numofInterrupt: 0 }; // 上传队列,仅包括等待上传的文件 this._queue = []; // 存储所有文件 this._map = {}; } $.extend( Queue.prototype, { /** * 将新文件加入对队列尾部 * * @method append * @param {File} file 文件对象 */ append: function( file ) { this._queue.push( file ); this._fileAdded( file ); return this; }, /** * 将新文件加入对队列头部 * * @method prepend * @param {File} file 文件对象 */ prepend: function( file ) { this._queue.unshift( file ); this._fileAdded( file ); return this; }, /** * 获取文件对象 * * @method getFile * @param {String} fileId 文件ID * @return {File} */ getFile: function( fileId ) { if ( typeof fileId !== 'string' ) { return fileId; } return this._map[ fileId ]; }, /** * 从队列中取出一个指定状态的文件。 * @grammar fetch( status ) => File * @method fetch * @param {String} status [文件状态值](#WebUploader:File:File.Status) * @return {File} [File](#WebUploader:File) */ fetch: function( status ) { var len = this._queue.length, i, file; status = status || STATUS.QUEUED; for ( i = 0; i < len; i++ ) { file = this._queue[ i ]; if ( status === file.getStatus() ) { return file; } } return null; }, /** * 对队列进行排序,能够控制文件上传顺序。 * @grammar sort( fn ) => undefined * @method sort * @param {Function} fn 排序方法 */ sort: function( fn ) { if ( typeof fn === 'function' ) { this._queue.sort( fn ); } }, /** * 获取指定类型的文件列表, 列表中每一个成员为[File](#WebUploader:File)对象。 * @grammar getFiles( [status1[, status2 ...]] ) => Array * @method getFiles * @param {String} [status] [文件状态值](#WebUploader:File:File.Status) */ getFiles: function() { var sts = [].slice.call( arguments, 0 ), ret = [], i = 0, len = this._queue.length, file; for ( ; i < len; i++ ) { file = this._queue[ i ]; if ( sts.length && !~$.inArray( file.getStatus(), sts ) ) { continue; } ret.push( file ); } return ret; }, /** * 在队列中删除文件。 * @grammar removeFile( file ) => Array * @method removeFile * @param {File} 文件对象。 */ removeFile: function( file ) { var me = this, existing = this._map[ file.id ]; if ( existing ) { delete this._map[ file.id ]; file.destroy(); this.stats.numofDeleted++; } }, _fileAdded: function( file ) { var me = this, existing = this._map[ file.id ]; if ( !existing ) { this._map[ file.id ] = file; file.on( 'statuschange', function( cur, pre ) { me._onFileStatusChange( cur, pre ); }); } }, _onFileStatusChange: function( curStatus, preStatus ) { var stats = this.stats; switch ( preStatus ) { case STATUS.PROGRESS: stats.numOfProgress--; break; case STATUS.QUEUED: stats.numOfQueue --; break; case STATUS.ERROR: stats.numOfUploadFailed--; break; case STATUS.INVALID: stats.numOfInvalid--; break; case STATUS.INTERRUPT: stats.numofInterrupt--; break; } switch ( curStatus ) { case STATUS.QUEUED: stats.numOfQueue++; break; case STATUS.PROGRESS: stats.numOfProgress++; break; case STATUS.ERROR: stats.numOfUploadFailed++; break; case STATUS.COMPLETE: stats.numOfSuccess++; break; case STATUS.CANCELLED: stats.numOfCancel++; break; case STATUS.INVALID: stats.numOfInvalid++; break; case STATUS.INTERRUPT: stats.numofInterrupt++; break; } } }); Mediator.installTo( Queue.prototype ); return Queue; }); /** * @fileOverview 队列 */ define('widgets/queue',[ 'base', 'uploader', 'queue', 'file', 'lib/file', 'runtime/client', 'widgets/widget' ], function( Base, Uploader, Queue, WUFile, File, RuntimeClient ) { var $ = Base.$, rExt = /\.\w+$/, Status = WUFile.Status; return Uploader.register({ name: 'queue', init: function( opts ) { var me = this, deferred, len, i, item, arr, accept, runtime; if ( $.isPlainObject( opts.accept ) ) { opts.accept = [ opts.accept ]; } // accept中的中生成匹配正则。 if ( opts.accept ) { arr = []; for ( i = 0, len = opts.accept.length; i < len; i++ ) { item = opts.accept[ i ].extensions; item && arr.push( item ); } if ( arr.length ) { accept = '\\.' + arr.join(',') .replace( /,/g, '$|\\.' ) .replace( /\*/g, '.*' ) + '$'; } me.accept = new RegExp( accept, 'i' ); } me.queue = new Queue(); me.stats = me.queue.stats; // 如果当前不是html5运行时,那就算了。 // 不执行后续操作 if ( this.request('predict-runtime-type') !== 'html5' ) { return; } // 创建一个 html5 运行时的 placeholder // 以至于外部添加原生 File 对象的时候能正确包裹一下供 webuploader 使用。 deferred = Base.Deferred(); this.placeholder = runtime = new RuntimeClient('Placeholder'); runtime.connectRuntime({ runtimeOrder: 'html5' }, function() { me._ruid = runtime.getRuid(); deferred.resolve(); }); return deferred.promise(); }, // 为了支持外部直接添加一个原生File对象。 _wrapFile: function( file ) { if ( !(file instanceof WUFile) ) { if ( !(file instanceof File) ) { if ( !this._ruid ) { throw new Error('Can\'t add external files.'); } file = new File( this._ruid, file ); } file = new WUFile( file ); } return file; }, // 判断文件是否可以被加入队列 acceptFile: function( file ) { var invalid = !file || !file.size || this.accept && // 如果名字中有后缀,才做后缀白名单处理。 rExt.exec( file.name ) && !this.accept.test( file.name ); return !invalid; }, /** * @event beforeFileQueued * @param {File} file File对象 * @description 当文件被加入队列之前触发,此事件的handler返回值为`false`,则此文件不会被添加进入队列。 * @for Uploader */ /** * @event fileQueued * @param {File} file File对象 * @description 当文件被加入队列以后触发。 * @for Uploader */ _addFile: function( file ) { var me = this; file = me._wrapFile( file ); // 不过类型判断允许不允许,先派送 `beforeFileQueued` if ( !me.owner.trigger( 'beforeFileQueued', file ) ) { return; } // 类型不匹配,则派送错误事件,并返回。 if ( !me.acceptFile( file ) ) { me.owner.trigger( 'error', 'Q_TYPE_DENIED', file ); return; } me.queue.append( file ); me.owner.trigger( 'fileQueued', file ); return file; }, getFile: function( fileId ) { return this.queue.getFile( fileId ); }, /** * @event filesQueued * @param {File} files 数组,内容为原始File(lib/File)对象。 * @description 当一批文件添加进队列以后触发。 * @for Uploader */ /** * @property {Boolean} [auto=false] * @namespace options * @for Uploader * @description 设置为 true 后,不需要手动调用上传,有文件选择即开始上传。 * */ /** * @method addFiles * @grammar addFiles( file ) => undefined * @grammar addFiles( [file1, file2 ...] ) => undefined * @param {Array of File or File} [files] Files 对象 数组 * @description 添加文件到队列 * @for Uploader */ addFile: function( files ) { var me = this; if ( !files.length ) { files = [ files ]; } files = $.map( files, function( file ) { return me._addFile( file ); }); me.owner.trigger( 'filesQueued', files ); if ( me.options.auto ) { setTimeout(function() { me.request('start-upload'); }, 20 ); } }, getStats: function() { return this.stats; }, /** * @event fileDequeued * @param {File} file File对象 * @description 当文件被移除队列后触发。 * @for Uploader */ /** * @method removeFile * @grammar removeFile( file ) => undefined * @grammar removeFile( id ) => undefined * @grammar removeFile( file, true ) => undefined * @grammar removeFile( id, true ) => undefined * @param {File|id} file File对象或这File对象的id * @description 移除某一文件, 默认只会标记文件状态为已取消,如果第二个参数为 `true` 则会从 queue 中移除。 * @for Uploader * @example * * $li.on('click', '.remove-this', function() { * uploader.removeFile( file ); * }) */ removeFile: function( file, remove ) { var me = this; file = file.id ? file : me.queue.getFile( file ); this.request( 'cancel-file', file ); if ( remove ) { this.queue.removeFile( file ); } }, /** * @method getFiles * @grammar getFiles() => Array * @grammar getFiles( status1, status2, status... ) => Array * @description 返回指定状态的文件集合,不传参数将返回所有状态的文件。 * @for Uploader * @example * console.log( uploader.getFiles() ); // => all files * console.log( uploader.getFiles('error') ) // => all error files. */ getFiles: function() { return this.queue.getFiles.apply( this.queue, arguments ); }, fetchFile: function() { return this.queue.fetch.apply( this.queue, arguments ); }, /** * @method retry * @grammar retry() => undefined * @grammar retry( file ) => undefined * @description 重试上传,重试指定文件,或者从出错的文件开始重新上传。 * @for Uploader * @example * function retry() { * uploader.retry(); * } */ retry: function( file, noForceStart ) { var me = this, files, i, len; if ( file ) { file = file.id ? file : me.queue.getFile( file ); file.setStatus( Status.QUEUED ); noForceStart || me.request('start-upload'); return; } files = me.queue.getFiles( Status.ERROR ); i = 0; len = files.length; for ( ; i < len; i++ ) { file = files[ i ]; file.setStatus( Status.QUEUED ); } me.request('start-upload'); }, /** * @method sort * @grammar sort( fn ) => undefined * @description 排序队列中的文件,在上传之前调整可以控制上传顺序。 * @for Uploader */ sortFiles: function() { return this.queue.sort.apply( this.queue, arguments ); }, /** * @event reset * @description 当 uploader 被重置的时候触发。 * @for Uploader */ /** * @method reset * @grammar reset() => undefined * @description 重置uploader。目前只重置了队列。 * @for Uploader * @example * uploader.reset(); */ reset: function() { this.owner.trigger('reset'); this.queue = new Queue(); this.stats = this.queue.stats; }, destroy: function() { this.reset(); this.placeholder && this.placeholder.destroy(); } }); }); /** * @fileOverview 添加获取Runtime相关信息的方法。 */ define('widgets/runtime',[ 'uploader', 'runtime/runtime', 'widgets/widget' ], function( Uploader, Runtime ) { Uploader.support = function() { return Runtime.hasRuntime.apply( Runtime, arguments ); }; /** * @property {Object} [runtimeOrder=html5,flash] * @namespace options * @for Uploader * @description 指定运行时启动顺序。默认会想尝试 html5 是否支持,如果支持则使用 html5, 否则则使用 flash. * * 可以将此值设置成 `flash`,来强制使用 flash 运行时。 */ return Uploader.register({ name: 'runtime', init: function() { if ( !this.predictRuntimeType() ) { throw Error('Runtime Error'); } }, /** * 预测Uploader将采用哪个`Runtime` * @grammar predictRuntimeType() => String * @method predictRuntimeType * @for Uploader */ predictRuntimeType: function() { var orders = this.options.runtimeOrder || Runtime.orders, type = this.type, i, len; if ( !type ) { orders = orders.split( /\s*,\s*/g ); for ( i = 0, len = orders.length; i < len; i++ ) { if ( Runtime.hasRuntime( orders[ i ] ) ) { this.type = type = orders[ i ]; break; } } } return type; } }); }); /** * @fileOverview Transport */ define('lib/transport',[ 'base', 'runtime/client', 'mediator' ], function( Base, RuntimeClient, Mediator ) { var $ = Base.$; function Transport( opts ) { var me = this; opts = me.options = $.extend( true, {}, Transport.options, opts || {} ); RuntimeClient.call( this, 'Transport' ); this._blob = null; this._formData = opts.formData || {}; this._headers = opts.headers || {}; this.on( 'progress', this._timeout ); this.on( 'load error', function() { me.trigger( 'progress', 1 ); clearTimeout( me._timer ); }); } Transport.options = { server: '', method: 'POST', // 跨域时,是否允许携带cookie, 只有html5 runtime才有效 withCredentials: false, fileVal: 'file', timeout: 2 * 60 * 1000, // 2分钟 formData: {}, headers: {}, sendAsBinary: false }; $.extend( Transport.prototype, { // 添加Blob, 只能添加一次,最后一次有效。 appendBlob: function( key, blob, filename ) { var me = this, opts = me.options; if ( me.getRuid() ) { me.disconnectRuntime(); } // 连接到blob归属的同一个runtime. me.connectRuntime( blob.ruid, function() { me.exec('init'); }); me._blob = blob; opts.fileVal = key || opts.fileVal; opts.filename = filename || opts.filename; }, // 添加其他字段 append: function( key, value ) { if ( typeof key === 'object' ) { $.extend( this._formData, key ); } else { this._formData[ key ] = value; } }, setRequestHeader: function( key, value ) { if ( typeof key === 'object' ) { $.extend( this._headers, key ); } else { this._headers[ key ] = value; } }, send: function( method ) { this.exec( 'send', method ); this._timeout(); }, abort: function() { clearTimeout( this._timer ); return this.exec('abort'); }, destroy: function() { this.trigger('destroy'); this.off(); this.exec('destroy'); this.disconnectRuntime(); }, getResponse: function() { return this.exec('getResponse'); }, getResponseAsJson: function() { return this.exec('getResponseAsJson'); }, getStatus: function() { return this.exec('getStatus'); }, _timeout: function() { var me = this, duration = me.options.timeout; if ( !duration ) { return; } clearTimeout( me._timer ); me._timer = setTimeout(function() { me.abort(); me.trigger( 'error', 'timeout' ); }, duration ); } }); // 让Transport具备事件功能。 Mediator.installTo( Transport.prototype ); return Transport; }); /** * @fileOverview 负责文件上传相关。 */ define('widgets/upload',[ 'base', 'uploader', 'file', 'lib/transport', 'widgets/widget' ], function( Base, Uploader, WUFile, Transport ) { var $ = Base.$, isPromise = Base.isPromise, Status = WUFile.Status; // 添加默认配置项 $.extend( Uploader.options, { /** * @property {Boolean} [prepareNextFile=false] * @namespace options * @for Uploader * @description 是否允许在文件传输时提前把下一个文件准备好。 * 对于一个文件的准备工作比较耗时,比如图片压缩,md5序列化。 * 如果能提前在当前文件传输期处理,可以节省总体耗时。 */ prepareNextFile: false, /** * @property {Boolean} [chunked=false] * @namespace options * @for Uploader * @description 是否要分片处理大文件上传。 */ chunked: false, /** * @property {Boolean} [chunkSize=5242880] * @namespace options * @for Uploader * @description 如果要分片,分多大一片? 默认大小为5M. */ chunkSize: 5 * 1024 * 1024, /** * @property {Boolean} [chunkRetry=2] * @namespace options * @for Uploader * @description 如果某个分片由于网络问题出错,允许自动重传多少次? */ chunkRetry: 2, /** * @property {Boolean} [threads=3] * @namespace options * @for Uploader * @description 上传并发数。允许同时最大上传进程数。 */ threads: 3, /** * @property {Object} [formData={}] * @namespace options * @for Uploader * @description 文件上传请求的参数表,每次发送都会发送此对象中的参数。 */ formData: {} /** * @property {Object} [fileVal='file'] * @namespace options * @for Uploader * @description 设置文件上传域的name。 */ /** * @property {Object} [method='POST'] * @namespace options * @for Uploader * @description 文件上传方式,`POST`或者`GET`。 */ /** * @property {Object} [sendAsBinary=false] * @namespace options * @for Uploader * @description 是否已二进制的流的方式发送文件,这样整个上传内容`php://input`都为文件内容, * 其他参数在$_GET数组中。 */ }); // 负责将文件切片。 function CuteFile( file, chunkSize ) { var pending = [], blob = file.source, total = blob.size, chunks = chunkSize ? Math.ceil( total / chunkSize ) : 1, start = 0, index = 0, len, api; api = { file: file, has: function() { return !!pending.length; }, shift: function() { return pending.shift(); }, unshift: function( block ) { pending.unshift( block ); } }; while ( index < chunks ) { len = Math.min( chunkSize, total - start ); pending.push({ file: file, start: start, end: chunkSize ? (start + len) : total, total: total, chunks: chunks, chunk: index++, cuted: api }); start += len; } file.blocks = pending.concat(); file.remaning = pending.length; return api; } Uploader.register({ name: 'upload', init: function() { var owner = this.owner, me = this; this.runing = false; this.progress = false; owner .on( 'startUpload', function() { me.progress = true; }) .on( 'uploadFinished', function() { me.progress = false; }); // 记录当前正在传的数据,跟threads相关 this.pool = []; // 缓存分好片的文件。 this.stack = []; // 缓存即将上传的文件。 this.pending = []; // 跟踪还有多少分片在上传中但是没有完成上传。 this.remaning = 0; this.__tick = Base.bindFn( this._tick, this ); owner.on( 'uploadComplete', function( file ) { // 把其他块取消了。 file.blocks && $.each( file.blocks, function( _, v ) { v.transport && (v.transport.abort(), v.transport.destroy()); delete v.transport; }); delete file.blocks; delete file.remaning; }); }, reset: function() { this.request( 'stop-upload', true ); this.runing = false; this.pool = []; this.stack = []; this.pending = []; this.remaning = 0; this._trigged = false; this._promise = null; }, /** * @event startUpload * @description 当开始上传流程时触发。 * @for Uploader */ /** * 开始上传。此方法可以从初始状态调用开始上传流程,也可以从暂停状态调用,继续上传流程。 * * 可以指定开始某一个文件。 * @grammar upload() => undefined * @grammar upload( file | fileId) => undefined * @method upload * @for Uploader */ startUpload: function(file) { var me = this; // 移出invalid的文件 $.each( me.request( 'get-files', Status.INVALID ), function() { me.request( 'remove-file', this ); }); // 如果指定了开始某个文件,则只开始指定文件。 if ( file ) { file = file.id ? file : me.request( 'get-file', file ); if (file.getStatus() === Status.INTERRUPT) { $.each( me.pool, function( _, v ) { // 之前暂停过。 if (v.file !== file) { return; } v.transport && v.transport.send(); }); file.setStatus( Status.QUEUED ); } else if (file.getStatus() === Status.PROGRESS) { return; } else { file.setStatus( Status.QUEUED ); } } else { $.each( me.request( 'get-files', [ Status.INITED ] ), function() { this.setStatus( Status.QUEUED ); }); } if ( me.runing ) { return; } me.runing = true; var files = []; // 如果有暂停的,则续传 $.each( me.pool, function( _, v ) { var file = v.file; if ( file.getStatus() === Status.INTERRUPT ) { files.push(file); me._trigged = false; v.transport && v.transport.send(); } }); var file; while ( (file = files.shift()) ) { file.setStatus( Status.PROGRESS ); } file || $.each( me.request( 'get-files', Status.INTERRUPT ), function() { this.setStatus( Status.PROGRESS ); }); me._trigged = false; Base.nextTick( me.__tick ); me.owner.trigger('startUpload'); }, /** * @event stopUpload * @description 当开始上传流程暂停时触发。 * @for Uploader */ /** * 暂停上传。第一个参数为是否中断上传当前正在上传的文件。 * * 如果第一个参数是文件,则只暂停指定文件。 * @grammar stop() => undefined * @grammar stop( true ) => undefined * @grammar stop( file ) => undefined * @method stop * @for Uploader */ stopUpload: function( file, interrupt ) { var me = this; if (file === true) { interrupt = file; file = null; } if ( me.runing === false ) { return; } // 如果只是暂停某个文件。 if ( file ) { file = file.id ? file : me.request( 'get-file', file ); if ( file.getStatus() !== Status.PROGRESS && file.getStatus() !== Status.QUEUED ) { return; } file.setStatus( Status.INTERRUPT ); $.each( me.pool, function( _, v ) { // 只 abort 指定的文件。 if (v.file !== file) { return; } v.transport && v.transport.abort(); me._putback(v); me._popBlock(v); }); return Base.nextTick( me.__tick ); } me.runing = false; if (this._promise && this._promise.file) { this._promise.file.setStatus( Status.INTERRUPT ); } interrupt && $.each( me.pool, function( _, v ) { v.transport && v.transport.abort(); v.file.setStatus( Status.INTERRUPT ); }); me.owner.trigger('stopUpload'); }, /** * @method cancelFile * @grammar cancelFile( file ) => undefined * @grammar cancelFile( id ) => undefined * @param {File|id} file File对象或这File对象的id * @description 标记文件状态为已取消, 同时将中断文件传输。 * @for Uploader * @example * * $li.on('click', '.remove-this', function() { * uploader.cancelFile( file ); * }) */ cancelFile: function( file ) { file = file.id ? file : this.request( 'get-file', file ); // 如果正在上传。 file.blocks && $.each( file.blocks, function( _, v ) { var _tr = v.transport; if ( _tr ) { _tr.abort(); _tr.destroy(); delete v.transport; } }); file.setStatus( Status.CANCELLED ); this.owner.trigger( 'fileDequeued', file ); }, /** * 判断`Uplaode`r是否正在上传中。 * @grammar isInProgress() => Boolean * @method isInProgress * @for Uploader */ isInProgress: function() { return !!this.progress; }, _getStats: function() { return this.request('get-stats'); }, /** * 掉过一个文件上传,直接标记指定文件为已上传状态。 * @grammar skipFile( file ) => undefined * @method skipFile * @for Uploader */ skipFile: function( file, status ) { file = file.id ? file : this.request( 'get-file', file ); file.setStatus( status || Status.COMPLETE ); file.skipped = true; // 如果正在上传。 file.blocks && $.each( file.blocks, function( _, v ) { var _tr = v.transport; if ( _tr ) { _tr.abort(); _tr.destroy(); delete v.transport; } }); this.owner.trigger( 'uploadSkip', file ); }, /** * @event uploadFinished * @description 当所有文件上传结束时触发。 * @for Uploader */ _tick: function() { var me = this, opts = me.options, fn, val; // 上一个promise还没有结束,则等待完成后再执行。 if ( me._promise ) { return me._promise.always( me.__tick ); } // 还有位置,且还有文件要处理的话。 if ( me.pool.length < opts.threads && (val = me._nextBlock()) ) { me._trigged = false; fn = function( val ) { me._promise = null; // 有可能是reject过来的,所以要检测val的类型。 val && val.file && me._startSend( val ); Base.nextTick( me.__tick ); }; me._promise = isPromise( val ) ? val.always( fn ) : fn( val ); // 没有要上传的了,且没有正在传输的了。 } else if ( !me.remaning && !me._getStats().numOfQueue && !me._getStats().numofInterrupt ) { me.runing = false; me._trigged || Base.nextTick(function() { me.owner.trigger('uploadFinished'); }); me._trigged = true; } }, _putback: function(block) { var idx; block.cuted.unshift(block); idx = this.stack.indexOf(block.cuted); if (!~idx) { this.stack.unshift(block.cuted); } }, _getStack: function() { var i = 0, act; while ( (act = this.stack[ i++ ]) ) { if ( act.has() && act.file.getStatus() === Status.PROGRESS ) { return act; } else if (!act.has() || act.file.getStatus() !== Status.PROGRESS && act.file.getStatus() !== Status.INTERRUPT ) { // 把已经处理完了的,或者,状态为非 progress(上传中)、 // interupt(暂停中) 的移除。 this.stack.splice( --i, 1 ); } } return null; }, _nextBlock: function() { var me = this, opts = me.options, act, next, done, preparing; // 如果当前文件还有没有需要传输的,则直接返回剩下的。 if ( (act = this._getStack()) ) { // 是否提前准备下一个文件 if ( opts.prepareNextFile && !me.pending.length ) { me._prepareNextFile(); } return act.shift(); // 否则,如果正在运行,则准备下一个文件,并等待完成后返回下个分片。 } else if ( me.runing ) { // 如果缓存中有,则直接在缓存中取,没有则去queue中取。 if ( !me.pending.length && me._getStats().numOfQueue ) { me._prepareNextFile(); } next = me.pending.shift(); done = function( file ) { if ( !file ) { return null; } act = CuteFile( file, opts.chunked ? opts.chunkSize : 0 ); me.stack.push(act); return act.shift(); }; // 文件可能还在prepare中,也有可能已经完全准备好了。 if ( isPromise( next) ) { preparing = next.file; next = next[ next.pipe ? 'pipe' : 'then' ]( done ); next.file = preparing; return next; } return done( next ); } }, /** * @event uploadStart * @param {File} file File对象 * @description 某个文件开始上传前触发,一个文件只会触发一次。 * @for Uploader */ _prepareNextFile: function() { var me = this, file = me.request('fetch-file'), pending = me.pending, promise; if ( file ) { promise = me.request( 'before-send-file', file, function() { // 有可能文件被skip掉了。文件被skip掉后,状态坑定不是Queued. if ( file.getStatus() === Status.PROGRESS || file.getStatus() === Status.INTERRUPT ) { return file; } return me._finishFile( file ); }); me.owner.trigger( 'uploadStart', file ); file.setStatus( Status.PROGRESS ); promise.file = file; // 如果还在pending中,则替换成文件本身。 promise.done(function() { var idx = $.inArray( promise, pending ); ~idx && pending.splice( idx, 1, file ); }); // befeore-send-file的钩子就有错误发生。 promise.fail(function( reason ) { file.setStatus( Status.ERROR, reason ); me.owner.trigger( 'uploadError', file, reason ); me.owner.trigger( 'uploadComplete', file ); }); pending.push( promise ); } }, // 让出位置了,可以让其他分片开始上传 _popBlock: function( block ) { var idx = $.inArray( block, this.pool ); this.pool.splice( idx, 1 ); block.file.remaning--; this.remaning--; }, // 开始上传,可以被掉过。如果promise被reject了,则表示跳过此分片。 _startSend: function( block ) { var me = this, file = block.file, promise; // 有可能在 before-send-file 的 promise 期间改变了文件状态。 // 如:暂停,取消 // 我们不能中断 promise, 但是可以在 promise 完后,不做上传操作。 if ( file.getStatus() !== Status.PROGRESS ) { // 如果是中断,则还需要放回去。 if (file.getStatus() === Status.INTERRUPT) { me._putback(block); } return; } me.pool.push( block ); me.remaning++; // 如果没有分片,则直接使用原始的。 // 不会丢失content-type信息。 block.blob = block.chunks === 1 ? file.source : file.source.slice( block.start, block.end ); // hook, 每个分片发送之前可能要做些异步的事情。 promise = me.request( 'before-send', block, function() { // 有可能文件已经上传出错了,所以不需要再传输了。 if ( file.getStatus() === Status.PROGRESS ) { me._doSend( block ); } else { me._popBlock( block ); Base.nextTick( me.__tick ); } }); // 如果为fail了,则跳过此分片。 promise.fail(function() { if ( file.remaning === 1 ) { me._finishFile( file ).always(function() { block.percentage = 1; me._popBlock( block ); me.owner.trigger( 'uploadComplete', file ); Base.nextTick( me.__tick ); }); } else { block.percentage = 1; me.updateFileProgress( file ); me._popBlock( block ); Base.nextTick( me.__tick ); } }); }, /** * @event uploadBeforeSend * @param {Object} object * @param {Object} data 默认的上传参数,可以扩展此对象来控制上传参数。 * @param {Object} headers 可以扩展此对象来控制上传头部。 * @description 当某个文件的分块在发送前触发,主要用来询问是否要添加附带参数,大文件在开起分片上传的前提下此事件可能会触发多次。 * @for Uploader */ /** * @event uploadAccept * @param {Object} object * @param {Object} ret 服务端的返回数据,json格式,如果服务端不是json格式,从ret._raw中取数据,自行解析。 * @description 当某个文件上传到服务端响应后,会派送此事件来询问服务端响应是否有效。如果此事件handler返回值为`false`, 则此文件将派送`server`类型的`uploadError`事件。 * @for Uploader */ /** * @event uploadProgress * @param {File} file File对象 * @param {Number} percentage 上传进度 * @description 上传过程中触发,携带上传进度。 * @for Uploader */ /** * @event uploadError * @param {File} file File对象 * @param {String} reason 出错的code * @description 当文件上传出错时触发。 * @for Uploader */ /** * @event uploadSuccess * @param {File} file File对象 * @param {Object} response 服务端返回的数据 * @description 当文件上传成功时触发。 * @for Uploader */ /** * @event uploadComplete * @param {File} [file] File对象 * @description 不管成功或者失败,文件上传完成时触发。 * @for Uploader */ // 做上传操作。 _doSend: function( block ) { var me = this, owner = me.owner, opts = me.options, file = block.file, tr = new Transport( opts ), data = $.extend({}, opts.formData ), headers = $.extend({}, opts.headers ), requestAccept, ret; block.transport = tr; tr.on( 'destroy', function() { delete block.transport; me._popBlock( block ); Base.nextTick( me.__tick ); }); // 广播上传进度。以文件为单位。 tr.on( 'progress', function( percentage ) { block.percentage = percentage; me.updateFileProgress( file ); }); // 用来询问,是否返回的结果是有错误的。 requestAccept = function( reject ) { var fn; ret = tr.getResponseAsJson() || {}; ret._raw = tr.getResponse(); fn = function( value ) { reject = value; }; // 服务端响应了,不代表成功了,询问是否响应正确。 if ( !owner.trigger( 'uploadAccept', block, ret, fn ) ) { reject = reject || 'server'; } return reject; }; // 尝试重试,然后广播文件上传出错。 tr.on( 'error', function( type, flag ) { block.retried = block.retried || 0; // 自动重试 if ( block.chunks > 1 && ~'http,abort'.indexOf( type ) && block.retried < opts.chunkRetry ) { block.retried++; tr.send(); } else { // http status 500 ~ 600 if ( !flag && type === 'server' ) { type = requestAccept( type ); } file.setStatus( Status.ERROR, type ); owner.trigger( 'uploadError', file, type ); owner.trigger( 'uploadComplete', file ); } }); // 上传成功 tr.on( 'load', function() { var reason; // 如果非预期,转向上传出错。 if ( (reason = requestAccept()) ) { tr.trigger( 'error', reason, true ); return; } // 全部上传完成。 if ( file.remaning === 1 ) { me._finishFile( file, ret ); } else { tr.destroy(); } }); // 配置默认的上传字段。 data = $.extend( data, { id: file.id, name: file.name, type: file.type, lastModifiedDate: file.lastModifiedDate, size: file.size }); block.chunks > 1 && $.extend( data, { chunks: block.chunks, chunk: block.chunk }); // 在发送之间可以添加字段什么的。。。 // 如果默认的字段不够使用,可以通过监听此事件来扩展 owner.trigger( 'uploadBeforeSend', block, data, headers ); // 开始发送。 tr.appendBlob( opts.fileVal, block.blob, file.name ); tr.append( data ); tr.setRequestHeader( headers ); tr.send(); }, // 完成上传。 _finishFile: function( file, ret, hds ) { var owner = this.owner; return owner .request( 'after-send-file', arguments, function() { file.setStatus( Status.COMPLETE ); owner.trigger( 'uploadSuccess', file, ret, hds ); }) .fail(function( reason ) { // 如果外部已经标记为invalid什么的,不再改状态。 if ( file.getStatus() === Status.PROGRESS ) { file.setStatus( Status.ERROR, reason ); } owner.trigger( 'uploadError', file, reason ); }) .always(function() { owner.trigger( 'uploadComplete', file ); }); }, updateFileProgress: function(file) { var totalPercent = 0, uploaded = 0; if (!file.blocks) { return; } $.each( file.blocks, function( _, v ) { uploaded += (v.percentage || 0) * (v.end - v.start); }); totalPercent = uploaded / file.size; this.owner.trigger( 'uploadProgress', file, totalPercent || 0 ); } }); }); /** * @fileOverview 各种验证,包括文件总大小是否超出、单文件是否超出和文件是否重复。 */ define('widgets/validator',[ 'base', 'uploader', 'file', 'widgets/widget' ], function( Base, Uploader, WUFile ) { var $ = Base.$, validators = {}, api; /** * @event error * @param {String} type 错误类型。 * @description 当validate不通过时,会以派送错误事件的形式通知调用者。通过`upload.on('error', handler)`可以捕获到此类错误,目前有以下错误会在特定的情况下派送错来。 * * * `Q_EXCEED_NUM_LIMIT` 在设置了`fileNumLimit`且尝试给`uploader`添加的文件数量超出这个值时派送。 * * `Q_EXCEED_SIZE_LIMIT` 在设置了`Q_EXCEED_SIZE_LIMIT`且尝试给`uploader`添加的文件总大小超出这个值时派送。 * * `Q_TYPE_DENIED` 当文件类型不满足时触发。。 * @for Uploader */ // 暴露给外面的api api = { // 添加验证器 addValidator: function( type, cb ) { validators[ type ] = cb; }, // 移除验证器 removeValidator: function( type ) { delete validators[ type ]; } }; // 在Uploader初始化的时候启动Validators的初始化 Uploader.register({ name: 'validator', init: function() { var me = this; Base.nextTick(function() { $.each( validators, function() { this.call( me.owner ); }); }); } }); /** * @property {int} [fileNumLimit=undefined] * @namespace options * @for Uploader * @description 验证文件总数量, 超出则不允许加入队列。 */ api.addValidator( 'fileNumLimit', function() { var uploader = this, opts = uploader.options, count = 0, max = parseInt( opts.fileNumLimit, 10 ), flag = true; if ( !max ) { return; } uploader.on( 'beforeFileQueued', function( file ) { if ( count >= max && flag ) { flag = false; this.trigger( 'error', 'Q_EXCEED_NUM_LIMIT', max, file ); setTimeout(function() { flag = true; }, 1 ); } return count >= max ? false : true; }); uploader.on( 'fileQueued', function() { count++; }); uploader.on( 'fileDequeued', function() { count--; }); uploader.on( 'reset', function() { count = 0; }); }); /** * @property {int} [fileSizeLimit=undefined] * @namespace options * @for Uploader * @description 验证文件总大小是否超出限制, 超出则不允许加入队列。 */ api.addValidator( 'fileSizeLimit', function() { var uploader = this, opts = uploader.options, count = 0, max = parseInt( opts.fileSizeLimit, 10 ), flag = true; if ( !max ) { return; } uploader.on( 'beforeFileQueued', function( file ) { var invalid = count + file.size > max; if ( invalid && flag ) { flag = false; this.trigger( 'error', 'Q_EXCEED_SIZE_LIMIT', max, file ); setTimeout(function() { flag = true; }, 1 ); } return invalid ? false : true; }); uploader.on( 'fileQueued', function( file ) { count += file.size; }); uploader.on( 'fileDequeued', function( file ) { count -= file.size; }); uploader.on( 'reset', function() { count = 0; }); }); /** * @property {int} [fileSingleSizeLimit=undefined] * @namespace options * @for Uploader * @description 验证单个文件大小是否超出限制, 超出则不允许加入队列。 */ api.addValidator( 'fileSingleSizeLimit', function() { var uploader = this, opts = uploader.options, max = opts.fileSingleSizeLimit; if ( !max ) { return; } uploader.on( 'beforeFileQueued', function( file ) { if ( file.size > max ) { file.setStatus( WUFile.Status.INVALID, 'exceed_size' ); this.trigger( 'error', 'F_EXCEED_SIZE', max, file ); return false; } }); }); /** * @property {Boolean} [duplicate=undefined] * @namespace options * @for Uploader * @description 去重, 根据文件名字、文件大小和最后修改时间来生成hash Key. */ api.addValidator( 'duplicate', function() { var uploader = this, opts = uploader.options, mapping = {}; if ( opts.duplicate ) { return; } function hashString( str ) { var hash = 0, i = 0, len = str.length, _char; for ( ; i < len; i++ ) { _char = str.charCodeAt( i ); hash = _char + (hash << 6) + (hash << 16) - hash; } return hash; } uploader.on( 'beforeFileQueued', function( file ) { var hash = file.__hash || (file.__hash = hashString( file.name + file.size + file.lastModifiedDate )); // 已经重复了 if ( mapping[ hash ] ) { this.trigger( 'error', 'F_DUPLICATE', file ); return false; } }); uploader.on( 'fileQueued', function( file ) { var hash = file.__hash; hash && (mapping[ hash ] = true); }); uploader.on( 'fileDequeued', function( file ) { var hash = file.__hash; hash && (delete mapping[ hash ]); }); uploader.on( 'reset', function() { mapping = {}; }); }); return api; }); /** * @fileOverview Md5 */ define('lib/md5',[ 'runtime/client', 'mediator' ], function( RuntimeClient, Mediator ) { function Md5() { RuntimeClient.call( this, 'Md5' ); } // 让 Md5 具备事件功能。 Mediator.installTo( Md5.prototype ); Md5.prototype.loadFromBlob = function( blob ) { var me = this; if ( me.getRuid() ) { me.disconnectRuntime(); } // 连接到blob归属的同一个runtime. me.connectRuntime( blob.ruid, function() { me.exec('init'); me.exec( 'loadFromBlob', blob ); }); }; Md5.prototype.getResult = function() { return this.exec('getResult'); }; return Md5; }); /** * @fileOverview 图片操作, 负责预览图片和上传前压缩图片 */ define('widgets/md5',[ 'base', 'uploader', 'lib/md5', 'lib/blob', 'widgets/widget' ], function( Base, Uploader, Md5, Blob ) { return Uploader.register({ name: 'md5', /** * 计算文件 md5 值,返回一个 promise 对象,可以监听 progress 进度。 * * * @method md5File * @grammar md5File( file[, start[, end]] ) => promise * @for Uploader * @example * * uploader.on( 'fileQueued', function( file ) { * var $li = ...; * * uploader.md5File( file ) * * // 及时显示进度 * .progress(function(percentage) { * console.log('Percentage:', percentage); * }) * * // 完成 * .then(function(val) { * console.log('md5 result:', val); * }); * * }); */ md5File: function( file, start, end ) { var md5 = new Md5(), deferred = Base.Deferred(), blob = (file instanceof Blob) ? file : this.request( 'get-file', file ).source; md5.on( 'progress load', function( e ) { e = e || {}; deferred.notify( e.total ? e.loaded / e.total : 1 ); }); md5.on( 'complete', function() { deferred.resolve( md5.getResult() ); }); md5.on( 'error', function( reason ) { deferred.reject( reason ); }); if ( arguments.length > 1 ) { start = start || 0; end = end || 0; start < 0 && (start = blob.size + start); end < 0 && (end = blob.size + end); end = Math.min( end, blob.size ); blob = blob.slice( start, end ); } md5.loadFromBlob( blob ); return deferred.promise(); } }); }); /** * @fileOverview Runtime管理器,负责Runtime的选择, 连接 */ define('runtime/compbase',[],function() { function CompBase( owner, runtime ) { this.owner = owner; this.options = owner.options; this.getRuntime = function() { return runtime; }; this.getRuid = function() { return runtime.uid; }; this.trigger = function() { return owner.trigger.apply( owner, arguments ); }; } return CompBase; }); /** * @fileOverview Html5Runtime */ define('runtime/html5/runtime',[ 'base', 'runtime/runtime', 'runtime/compbase' ], function( Base, Runtime, CompBase ) { var type = 'html5', components = {}; function Html5Runtime() { var pool = {}, me = this, destroy = this.destroy; Runtime.apply( me, arguments ); me.type = type; // 这个方法的调用者,实际上是RuntimeClient me.exec = function( comp, fn/*, args...*/) { var client = this, uid = client.uid, args = Base.slice( arguments, 2 ), instance; if ( components[ comp ] ) { instance = pool[ uid ] = pool[ uid ] || new components[ comp ]( client, me ); if ( instance[ fn ] ) { return instance[ fn ].apply( instance, args ); } } }; me.destroy = function() { // @todo 删除池子中的所有实例 return destroy && destroy.apply( this, arguments ); }; } Base.inherits( Runtime, { constructor: Html5Runtime, // 不需要连接其他程序,直接执行callback init: function() { var me = this; setTimeout(function() { me.trigger('ready'); }, 1 ); } }); // 注册Components Html5Runtime.register = function( name, component ) { var klass = components[ name ] = Base.inherits( CompBase, component ); return klass; }; // 注册html5运行时。 // 只有在支持的前提下注册。 if ( window.Blob && window.FileReader && window.DataView ) { Runtime.addRuntime( type, Html5Runtime ); } return Html5Runtime; }); /** * @fileOverview Blob Html实现 */ define('runtime/html5/blob',[ 'runtime/html5/runtime', 'lib/blob' ], function( Html5Runtime, Blob ) { return Html5Runtime.register( 'Blob', { slice: function( start, end ) { var blob = this.owner.source, slice = blob.slice || blob.webkitSlice || blob.mozSlice; blob = slice.call( blob, start, end ); return new Blob( this.getRuid(), blob ); } }); }); /** * @fileOverview FilePaste */ define('runtime/html5/dnd',[ 'base', 'runtime/html5/runtime', 'lib/file' ], function( Base, Html5Runtime, File ) { var $ = Base.$, prefix = 'webuploader-dnd-'; return Html5Runtime.register( 'DragAndDrop', { init: function() { var elem = this.elem = this.options.container; this.dragEnterHandler = Base.bindFn( this._dragEnterHandler, this ); this.dragOverHandler = Base.bindFn( this._dragOverHandler, this ); this.dragLeaveHandler = Base.bindFn( this._dragLeaveHandler, this ); this.dropHandler = Base.bindFn( this._dropHandler, this ); this.dndOver = false; elem.on( 'dragenter', this.dragEnterHandler ); elem.on( 'dragover', this.dragOverHandler ); elem.on( 'dragleave', this.dragLeaveHandler ); elem.on( 'drop', this.dropHandler ); if ( this.options.disableGlobalDnd ) { $( document ).on( 'dragover', this.dragOverHandler ); $( document ).on( 'drop', this.dropHandler ); } }, _dragEnterHandler: function( e ) { var me = this, denied = me._denied || false, items; e = e.originalEvent || e; if ( !me.dndOver ) { me.dndOver = true; // 注意只有 chrome 支持。 items = e.dataTransfer.items; if ( items && items.length ) { me._denied = denied = !me.trigger( 'accept', items ); } me.elem.addClass( prefix + 'over' ); me.elem[ denied ? 'addClass' : 'removeClass' ]( prefix + 'denied' ); } e.dataTransfer.dropEffect = denied ? 'none' : 'copy'; return false; }, _dragOverHandler: function( e ) { // 只处理框内的。 var parentElem = this.elem.parent().get( 0 ); if ( parentElem && !$.contains( parentElem, e.currentTarget ) ) { return false; } clearTimeout( this._leaveTimer ); this._dragEnterHandler.call( this, e ); return false; }, _dragLeaveHandler: function() { var me = this, handler; handler = function() { me.dndOver = false; me.elem.removeClass( prefix + 'over ' + prefix + 'denied' ); }; clearTimeout( me._leaveTimer ); me._leaveTimer = setTimeout( handler, 100 ); return false; }, _dropHandler: function( e ) { var me = this, ruid = me.getRuid(), parentElem = me.elem.parent().get( 0 ), dataTransfer, data; // 只处理框内的。 if ( parentElem && !$.contains( parentElem, e.currentTarget ) ) { return false; } e = e.originalEvent || e; dataTransfer = e.dataTransfer; // 如果是页面内拖拽,还不能处理,不阻止事件。 // 此处 ie11 下会报参数错误, try { data = dataTransfer.getData('text/html'); } catch( err ) { } if ( data ) { return; } me._getTansferFiles( dataTransfer, function( results ) { me.trigger( 'drop', $.map( results, function( file ) { return new File( ruid, file ); }) ); }); me.dndOver = false; me.elem.removeClass( prefix + 'over' ); return false; }, // 如果传入 callback 则去查看文件夹,否则只管当前文件夹。 _getTansferFiles: function( dataTransfer, callback ) { var results = [], promises = [], items, files, file, item, i, len, canAccessFolder; items = dataTransfer.items; files = dataTransfer.files; canAccessFolder = !!(items && items[ 0 ].webkitGetAsEntry); for ( i = 0, len = files.length; i < len; i++ ) { file = files[ i ]; item = items && items[ i ]; if ( canAccessFolder && item.webkitGetAsEntry().isDirectory ) { promises.push( this._traverseDirectoryTree( item.webkitGetAsEntry(), results ) ); } else { results.push( file ); } } Base.when.apply( Base, promises ).done(function() { if ( !results.length ) { return; } callback( results ); }); }, _traverseDirectoryTree: function( entry, results ) { var deferred = Base.Deferred(), me = this; if ( entry.isFile ) { entry.file(function( file ) { results.push( file ); deferred.resolve(); }); } else if ( entry.isDirectory ) { entry.createReader().readEntries(function( entries ) { var len = entries.length, promises = [], arr = [], // 为了保证顺序。 i; for ( i = 0; i < len; i++ ) { promises.push( me._traverseDirectoryTree( entries[ i ], arr ) ); } Base.when.apply( Base, promises ).then(function() { results.push.apply( results, arr ); deferred.resolve(); }, deferred.reject ); }); } return deferred.promise(); }, destroy: function() { var elem = this.elem; // 还没 init 就调用 destroy if (!elem) { return; } elem.off( 'dragenter', this.dragEnterHandler ); elem.off( 'dragover', this.dragOverHandler ); elem.off( 'dragleave', this.dragLeaveHandler ); elem.off( 'drop', this.dropHandler ); if ( this.options.disableGlobalDnd ) { $( document ).off( 'dragover', this.dragOverHandler ); $( document ).off( 'drop', this.dropHandler ); } } }); }); /** * @fileOverview FilePaste */ define('runtime/html5/filepaste',[ 'base', 'runtime/html5/runtime', 'lib/file' ], function( Base, Html5Runtime, File ) { return Html5Runtime.register( 'FilePaste', { init: function() { var opts = this.options, elem = this.elem = opts.container, accept = '.*', arr, i, len, item; // accetp的mimeTypes中生成匹配正则。 if ( opts.accept ) { arr = []; for ( i = 0, len = opts.accept.length; i < len; i++ ) { item = opts.accept[ i ].mimeTypes; item && arr.push( item ); } if ( arr.length ) { accept = arr.join(','); accept = accept.replace( /,/g, '|' ).replace( /\*/g, '.*' ); } } this.accept = accept = new RegExp( accept, 'i' ); this.hander = Base.bindFn( this._pasteHander, this ); elem.on( 'paste', this.hander ); }, _pasteHander: function( e ) { var allowed = [], ruid = this.getRuid(), items, item, blob, i, len; e = e.originalEvent || e; items = e.clipboardData.items; for ( i = 0, len = items.length; i < len; i++ ) { item = items[ i ]; if ( item.kind !== 'file' || !(blob = item.getAsFile()) ) { continue; } allowed.push( new File( ruid, blob ) ); } if ( allowed.length ) { // 不阻止非文件粘贴(文字粘贴)的事件冒泡 e.preventDefault(); e.stopPropagation(); this.trigger( 'paste', allowed ); } }, destroy: function() { this.elem.off( 'paste', this.hander ); } }); }); /** * @fileOverview FilePicker */ define('runtime/html5/filepicker',[ 'base', 'runtime/html5/runtime' ], function( Base, Html5Runtime ) { var $ = Base.$; return Html5Runtime.register( 'FilePicker', { init: function() { var container = this.getRuntime().getContainer(), me = this, owner = me.owner, opts = me.options, label = this.label = $( document.createElement('label') ), input = this.input = $( document.createElement('input') ), arr, i, len, mouseHandler; input.attr( 'type', 'file' ); input.attr( 'name', opts.name ); input.addClass('webuploader-element-invisible'); label.on( 'click', function() { input.trigger('click'); }); label.css({ opacity: 0, width: '100%', height: '100%', display: 'block', cursor: 'pointer', background: '#ffffff' }); if ( opts.multiple ) { input.attr( 'multiple', 'multiple' ); } // @todo Firefox不支持单独指定后缀 if ( opts.accept && opts.accept.length > 0 ) { arr = []; for ( i = 0, len = opts.accept.length; i < len; i++ ) { arr.push( opts.accept[ i ].mimeTypes ); } input.attr( 'accept', arr.join(',') ); } container.append( input ); container.append( label ); mouseHandler = function( e ) { owner.trigger( e.type ); }; input.on( 'change', function( e ) { var fn = arguments.callee, clone; me.files = e.target.files; // reset input clone = this.cloneNode( true ); clone.value = null; this.parentNode.replaceChild( clone, this ); input.off(); input = $( clone ).on( 'change', fn ) .on( 'mouseenter mouseleave', mouseHandler ); owner.trigger('change'); }); label.on( 'mouseenter mouseleave', mouseHandler ); }, getFiles: function() { return this.files; }, destroy: function() { this.input.off(); this.label.off(); } }); }); /** * Terms: * * Uint8Array, FileReader, BlobBuilder, atob, ArrayBuffer * @fileOverview Image控件 */ define('runtime/html5/util',[ 'base' ], function( Base ) { var urlAPI = window.createObjectURL && window || window.URL && URL.revokeObjectURL && URL || window.webkitURL, createObjectURL = Base.noop, revokeObjectURL = createObjectURL; if ( urlAPI ) { // 更安全的方式调用,比如android里面就能把context改成其他的对象。 createObjectURL = function() { return urlAPI.createObjectURL.apply( urlAPI, arguments ); }; revokeObjectURL = function() { return urlAPI.revokeObjectURL.apply( urlAPI, arguments ); }; } return { createObjectURL: createObjectURL, revokeObjectURL: revokeObjectURL, dataURL2Blob: function( dataURI ) { var byteStr, intArray, ab, i, mimetype, parts; parts = dataURI.split(','); if ( ~parts[ 0 ].indexOf('base64') ) { byteStr = atob( parts[ 1 ] ); } else { byteStr = decodeURIComponent( parts[ 1 ] ); } ab = new ArrayBuffer( byteStr.length ); intArray = new Uint8Array( ab ); for ( i = 0; i < byteStr.length; i++ ) { intArray[ i ] = byteStr.charCodeAt( i ); } mimetype = parts[ 0 ].split(':')[ 1 ].split(';')[ 0 ]; return this.arrayBufferToBlob( ab, mimetype ); }, dataURL2ArrayBuffer: function( dataURI ) { var byteStr, intArray, i, parts; parts = dataURI.split(','); if ( ~parts[ 0 ].indexOf('base64') ) { byteStr = atob( parts[ 1 ] ); } else { byteStr = decodeURIComponent( parts[ 1 ] ); } intArray = new Uint8Array( byteStr.length ); for ( i = 0; i < byteStr.length; i++ ) { intArray[ i ] = byteStr.charCodeAt( i ); } return intArray.buffer; }, arrayBufferToBlob: function( buffer, type ) { var builder = window.BlobBuilder || window.WebKitBlobBuilder, bb; // android不支持直接new Blob, 只能借助blobbuilder. if ( builder ) { bb = new builder(); bb.append( buffer ); return bb.getBlob( type ); } return new Blob([ buffer ], type ? { type: type } : {} ); }, // 抽出来主要是为了解决android下面canvas.toDataUrl不支持jpeg. // 你得到的结果是png. canvasToDataUrl: function( canvas, type, quality ) { return canvas.toDataURL( type, quality / 100 ); }, // imagemeat会复写这个方法,如果用户选择加载那个文件了的话。 parseMeta: function( blob, callback ) { callback( false, {}); }, // imagemeat会复写这个方法,如果用户选择加载那个文件了的话。 updateImageHead: function( data ) { return data; } }; }); /** * Terms: * * Uint8Array, FileReader, BlobBuilder, atob, ArrayBuffer * @fileOverview Image控件 */ define('runtime/html5/imagemeta',[ 'runtime/html5/util' ], function( Util ) { var api; api = { parsers: { 0xffe1: [] }, maxMetaDataSize: 262144, parse: function( blob, cb ) { var me = this, fr = new FileReader(); fr.onload = function() { cb( false, me._parse( this.result ) ); fr = fr.onload = fr.onerror = null; }; fr.onerror = function( e ) { cb( e.message ); fr = fr.onload = fr.onerror = null; }; blob = blob.slice( 0, me.maxMetaDataSize ); fr.readAsArrayBuffer( blob.getSource() ); }, _parse: function( buffer, noParse ) { if ( buffer.byteLength < 6 ) { return; } var dataview = new DataView( buffer ), offset = 2, maxOffset = dataview.byteLength - 4, headLength = offset, ret = {}, markerBytes, markerLength, parsers, i; if ( dataview.getUint16( 0 ) === 0xffd8 ) { while ( offset < maxOffset ) { markerBytes = dataview.getUint16( offset ); if ( markerBytes >= 0xffe0 && markerBytes <= 0xffef || markerBytes === 0xfffe ) { markerLength = dataview.getUint16( offset + 2 ) + 2; if ( offset + markerLength > dataview.byteLength ) { break; } parsers = api.parsers[ markerBytes ]; if ( !noParse && parsers ) { for ( i = 0; i < parsers.length; i += 1 ) { parsers[ i ].call( api, dataview, offset, markerLength, ret ); } } offset += markerLength; headLength = offset; } else { break; } } if ( headLength > 6 ) { if ( buffer.slice ) { ret.imageHead = buffer.slice( 2, headLength ); } else { // Workaround for IE10, which does not yet // support ArrayBuffer.slice: ret.imageHead = new Uint8Array( buffer ) .subarray( 2, headLength ); } } } return ret; }, updateImageHead: function( buffer, head ) { var data = this._parse( buffer, true ), buf1, buf2, bodyoffset; bodyoffset = 2; if ( data.imageHead ) { bodyoffset = 2 + data.imageHead.byteLength; } if ( buffer.slice ) { buf2 = buffer.slice( bodyoffset ); } else { buf2 = new Uint8Array( buffer ).subarray( bodyoffset ); } buf1 = new Uint8Array( head.byteLength + 2 + buf2.byteLength ); buf1[ 0 ] = 0xFF; buf1[ 1 ] = 0xD8; buf1.set( new Uint8Array( head ), 2 ); buf1.set( new Uint8Array( buf2 ), head.byteLength + 2 ); return buf1.buffer; } }; Util.parseMeta = function() { return api.parse.apply( api, arguments ); }; Util.updateImageHead = function() { return api.updateImageHead.apply( api, arguments ); }; return api; }); /** * 代码来自于:https://github.com/blueimp/JavaScript-Load-Image * 暂时项目中只用了orientation. * * 去除了 Exif Sub IFD Pointer, GPS Info IFD Pointer, Exif Thumbnail. * @fileOverview EXIF解析 */ // Sample // ==================================== // Make : Apple // Model : iPhone 4S // Orientation : 1 // XResolution : 72 [72/1] // YResolution : 72 [72/1] // ResolutionUnit : 2 // Software : QuickTime 7.7.1 // DateTime : 2013:09:01 22:53:55 // ExifIFDPointer : 190 // ExposureTime : 0.058823529411764705 [1/17] // FNumber : 2.4 [12/5] // ExposureProgram : Normal program // ISOSpeedRatings : 800 // ExifVersion : 0220 // DateTimeOriginal : 2013:09:01 22:52:51 // DateTimeDigitized : 2013:09:01 22:52:51 // ComponentsConfiguration : YCbCr // ShutterSpeedValue : 4.058893515764426 // ApertureValue : 2.5260688216892597 [4845/1918] // BrightnessValue : -0.3126686601998395 // MeteringMode : Pattern // Flash : Flash did not fire, compulsory flash mode // FocalLength : 4.28 [107/25] // SubjectArea : [4 values] // FlashpixVersion : 0100 // ColorSpace : 1 // PixelXDimension : 2448 // PixelYDimension : 3264 // SensingMethod : One-chip color area sensor // ExposureMode : 0 // WhiteBalance : Auto white balance // FocalLengthIn35mmFilm : 35 // SceneCaptureType : Standard define('runtime/html5/imagemeta/exif',[ 'base', 'runtime/html5/imagemeta' ], function( Base, ImageMeta ) { var EXIF = {}; EXIF.ExifMap = function() { return this; }; EXIF.ExifMap.prototype.map = { 'Orientation': 0x0112 }; EXIF.ExifMap.prototype.get = function( id ) { return this[ id ] || this[ this.map[ id ] ]; }; EXIF.exifTagTypes = { // byte, 8-bit unsigned int: 1: { getValue: function( dataView, dataOffset ) { return dataView.getUint8( dataOffset ); }, size: 1 }, // ascii, 8-bit byte: 2: { getValue: function( dataView, dataOffset ) { return String.fromCharCode( dataView.getUint8( dataOffset ) ); }, size: 1, ascii: true }, // short, 16 bit int: 3: { getValue: function( dataView, dataOffset, littleEndian ) { return dataView.getUint16( dataOffset, littleEndian ); }, size: 2 }, // long, 32 bit int: 4: { getValue: function( dataView, dataOffset, littleEndian ) { return dataView.getUint32( dataOffset, littleEndian ); }, size: 4 }, // rational = two long values, // first is numerator, second is denominator: 5: { getValue: function( dataView, dataOffset, littleEndian ) { return dataView.getUint32( dataOffset, littleEndian ) / dataView.getUint32( dataOffset + 4, littleEndian ); }, size: 8 }, // slong, 32 bit signed int: 9: { getValue: function( dataView, dataOffset, littleEndian ) { return dataView.getInt32( dataOffset, littleEndian ); }, size: 4 }, // srational, two slongs, first is numerator, second is denominator: 10: { getValue: function( dataView, dataOffset, littleEndian ) { return dataView.getInt32( dataOffset, littleEndian ) / dataView.getInt32( dataOffset + 4, littleEndian ); }, size: 8 } }; // undefined, 8-bit byte, value depending on field: EXIF.exifTagTypes[ 7 ] = EXIF.exifTagTypes[ 1 ]; EXIF.getExifValue = function( dataView, tiffOffset, offset, type, length, littleEndian ) { var tagType = EXIF.exifTagTypes[ type ], tagSize, dataOffset, values, i, str, c; if ( !tagType ) { Base.log('Invalid Exif data: Invalid tag type.'); return; } tagSize = tagType.size * length; // Determine if the value is contained in the dataOffset bytes, // or if the value at the dataOffset is a pointer to the actual data: dataOffset = tagSize > 4 ? tiffOffset + dataView.getUint32( offset + 8, littleEndian ) : (offset + 8); if ( dataOffset + tagSize > dataView.byteLength ) { Base.log('Invalid Exif data: Invalid data offset.'); return; } if ( length === 1 ) { return tagType.getValue( dataView, dataOffset, littleEndian ); } values = []; for ( i = 0; i < length; i += 1 ) { values[ i ] = tagType.getValue( dataView, dataOffset + i * tagType.size, littleEndian ); } if ( tagType.ascii ) { str = ''; // Concatenate the chars: for ( i = 0; i < values.length; i += 1 ) { c = values[ i ]; // Ignore the terminating NULL byte(s): if ( c === '\u0000' ) { break; } str += c; } return str; } return values; }; EXIF.parseExifTag = function( dataView, tiffOffset, offset, littleEndian, data ) { var tag = dataView.getUint16( offset, littleEndian ); data.exif[ tag ] = EXIF.getExifValue( dataView, tiffOffset, offset, dataView.getUint16( offset + 2, littleEndian ), // tag type dataView.getUint32( offset + 4, littleEndian ), // tag length littleEndian ); }; EXIF.parseExifTags = function( dataView, tiffOffset, dirOffset, littleEndian, data ) { var tagsNumber, dirEndOffset, i; if ( dirOffset + 6 > dataView.byteLength ) { Base.log('Invalid Exif data: Invalid directory offset.'); return; } tagsNumber = dataView.getUint16( dirOffset, littleEndian ); dirEndOffset = dirOffset + 2 + 12 * tagsNumber; if ( dirEndOffset + 4 > dataView.byteLength ) { Base.log('Invalid Exif data: Invalid directory size.'); return; } for ( i = 0; i < tagsNumber; i += 1 ) { this.parseExifTag( dataView, tiffOffset, dirOffset + 2 + 12 * i, // tag offset littleEndian, data ); } // Return the offset to the next directory: return dataView.getUint32( dirEndOffset, littleEndian ); }; // EXIF.getExifThumbnail = function(dataView, offset, length) { // var hexData, // i, // b; // if (!length || offset + length > dataView.byteLength) { // Base.log('Invalid Exif data: Invalid thumbnail data.'); // return; // } // hexData = []; // for (i = 0; i < length; i += 1) { // b = dataView.getUint8(offset + i); // hexData.push((b < 16 ? '0' : '') + b.toString(16)); // } // return 'data:image/jpeg,%' + hexData.join('%'); // }; EXIF.parseExifData = function( dataView, offset, length, data ) { var tiffOffset = offset + 10, littleEndian, dirOffset; // Check for the ASCII code for "Exif" (0x45786966): if ( dataView.getUint32( offset + 4 ) !== 0x45786966 ) { // No Exif data, might be XMP data instead return; } if ( tiffOffset + 8 > dataView.byteLength ) { Base.log('Invalid Exif data: Invalid segment size.'); return; } // Check for the two null bytes: if ( dataView.getUint16( offset + 8 ) !== 0x0000 ) { Base.log('Invalid Exif data: Missing byte alignment offset.'); return; } // Check the byte alignment: switch ( dataView.getUint16( tiffOffset ) ) { case 0x4949: littleEndian = true; break; case 0x4D4D: littleEndian = false; break; default: Base.log('Invalid Exif data: Invalid byte alignment marker.'); return; } // Check for the TIFF tag marker (0x002A): if ( dataView.getUint16( tiffOffset + 2, littleEndian ) !== 0x002A ) { Base.log('Invalid Exif data: Missing TIFF marker.'); return; } // Retrieve the directory offset bytes, usually 0x00000008 or 8 decimal: dirOffset = dataView.getUint32( tiffOffset + 4, littleEndian ); // Create the exif object to store the tags: data.exif = new EXIF.ExifMap(); // Parse the tags of the main image directory and retrieve the // offset to the next directory, usually the thumbnail directory: dirOffset = EXIF.parseExifTags( dataView, tiffOffset, tiffOffset + dirOffset, littleEndian, data ); // 尝试读取缩略图 // if ( dirOffset ) { // thumbnailData = {exif: {}}; // dirOffset = EXIF.parseExifTags( // dataView, // tiffOffset, // tiffOffset + dirOffset, // littleEndian, // thumbnailData // ); // // Check for JPEG Thumbnail offset: // if (thumbnailData.exif[0x0201]) { // data.exif.Thumbnail = EXIF.getExifThumbnail( // dataView, // tiffOffset + thumbnailData.exif[0x0201], // thumbnailData.exif[0x0202] // Thumbnail data length // ); // } // } }; ImageMeta.parsers[ 0xffe1 ].push( EXIF.parseExifData ); return EXIF; }); /** * 这个方式性能不行,但是可以解决android里面的toDataUrl的bug * android里面toDataUrl('image/jpege')得到的结果却是png. * * 所以这里没辙,只能借助这个工具 * @fileOverview jpeg encoder */ define('runtime/html5/jpegencoder',[], function( require, exports, module ) { /* Copyright (c) 2008, Adobe Systems Incorporated All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of Adobe Systems Incorporated nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* JPEG encoder ported to JavaScript and optimized by Andreas Ritter, www.bytestrom.eu, 11/2009 Basic GUI blocking jpeg encoder */ function JPEGEncoder(quality) { var self = this; var fround = Math.round; var ffloor = Math.floor; var YTable = new Array(64); var UVTable = new Array(64); var fdtbl_Y = new Array(64); var fdtbl_UV = new Array(64); var YDC_HT; var UVDC_HT; var YAC_HT; var UVAC_HT; var bitcode = new Array(65535); var category = new Array(65535); var outputfDCTQuant = new Array(64); var DU = new Array(64); var byteout = []; var bytenew = 0; var bytepos = 7; var YDU = new Array(64); var UDU = new Array(64); var VDU = new Array(64); var clt = new Array(256); var RGB_YUV_TABLE = new Array(2048); var currentQuality; var ZigZag = [ 0, 1, 5, 6,14,15,27,28, 2, 4, 7,13,16,26,29,42, 3, 8,12,17,25,30,41,43, 9,11,18,24,31,40,44,53, 10,19,23,32,39,45,52,54, 20,22,33,38,46,51,55,60, 21,34,37,47,50,56,59,61, 35,36,48,49,57,58,62,63 ]; var std_dc_luminance_nrcodes = [0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0]; var std_dc_luminance_values = [0,1,2,3,4,5,6,7,8,9,10,11]; var std_ac_luminance_nrcodes = [0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,0x7d]; var std_ac_luminance_values = [ 0x01,0x02,0x03,0x00,0x04,0x11,0x05,0x12, 0x21,0x31,0x41,0x06,0x13,0x51,0x61,0x07, 0x22,0x71,0x14,0x32,0x81,0x91,0xa1,0x08, 0x23,0x42,0xb1,0xc1,0x15,0x52,0xd1,0xf0, 0x24,0x33,0x62,0x72,0x82,0x09,0x0a,0x16, 0x17,0x18,0x19,0x1a,0x25,0x26,0x27,0x28, 0x29,0x2a,0x34,0x35,0x36,0x37,0x38,0x39, 0x3a,0x43,0x44,0x45,0x46,0x47,0x48,0x49, 0x4a,0x53,0x54,0x55,0x56,0x57,0x58,0x59, 0x5a,0x63,0x64,0x65,0x66,0x67,0x68,0x69, 0x6a,0x73,0x74,0x75,0x76,0x77,0x78,0x79, 0x7a,0x83,0x84,0x85,0x86,0x87,0x88,0x89, 0x8a,0x92,0x93,0x94,0x95,0x96,0x97,0x98, 0x99,0x9a,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7, 0xa8,0xa9,0xaa,0xb2,0xb3,0xb4,0xb5,0xb6, 0xb7,0xb8,0xb9,0xba,0xc2,0xc3,0xc4,0xc5, 0xc6,0xc7,0xc8,0xc9,0xca,0xd2,0xd3,0xd4, 0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xe1,0xe2, 0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea, 0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8, 0xf9,0xfa ]; var std_dc_chrominance_nrcodes = [0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0]; var std_dc_chrominance_values = [0,1,2,3,4,5,6,7,8,9,10,11]; var std_ac_chrominance_nrcodes = [0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,0x77]; var std_ac_chrominance_values = [ 0x00,0x01,0x02,0x03,0x11,0x04,0x05,0x21, 0x31,0x06,0x12,0x41,0x51,0x07,0x61,0x71, 0x13,0x22,0x32,0x81,0x08,0x14,0x42,0x91, 0xa1,0xb1,0xc1,0x09,0x23,0x33,0x52,0xf0, 0x15,0x62,0x72,0xd1,0x0a,0x16,0x24,0x34, 0xe1,0x25,0xf1,0x17,0x18,0x19,0x1a,0x26, 0x27,0x28,0x29,0x2a,0x35,0x36,0x37,0x38, 0x39,0x3a,0x43,0x44,0x45,0x46,0x47,0x48, 0x49,0x4a,0x53,0x54,0x55,0x56,0x57,0x58, 0x59,0x5a,0x63,0x64,0x65,0x66,0x67,0x68, 0x69,0x6a,0x73,0x74,0x75,0x76,0x77,0x78, 0x79,0x7a,0x82,0x83,0x84,0x85,0x86,0x87, 0x88,0x89,0x8a,0x92,0x93,0x94,0x95,0x96, 0x97,0x98,0x99,0x9a,0xa2,0xa3,0xa4,0xa5, 0xa6,0xa7,0xa8,0xa9,0xaa,0xb2,0xb3,0xb4, 0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xc2,0xc3, 0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xd2, 0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda, 0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9, 0xea,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8, 0xf9,0xfa ]; function initQuantTables(sf){ var YQT = [ 16, 11, 10, 16, 24, 40, 51, 61, 12, 12, 14, 19, 26, 58, 60, 55, 14, 13, 16, 24, 40, 57, 69, 56, 14, 17, 22, 29, 51, 87, 80, 62, 18, 22, 37, 56, 68,109,103, 77, 24, 35, 55, 64, 81,104,113, 92, 49, 64, 78, 87,103,121,120,101, 72, 92, 95, 98,112,100,103, 99 ]; for (var i = 0; i < 64; i++) { var t = ffloor((YQT[i]*sf+50)/100); if (t < 1) { t = 1; } else if (t > 255) { t = 255; } YTable[ZigZag[i]] = t; } var UVQT = [ 17, 18, 24, 47, 99, 99, 99, 99, 18, 21, 26, 66, 99, 99, 99, 99, 24, 26, 56, 99, 99, 99, 99, 99, 47, 66, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99 ]; for (var j = 0; j < 64; j++) { var u = ffloor((UVQT[j]*sf+50)/100); if (u < 1) { u = 1; } else if (u > 255) { u = 255; } UVTable[ZigZag[j]] = u; } var aasf = [ 1.0, 1.387039845, 1.306562965, 1.175875602, 1.0, 0.785694958, 0.541196100, 0.275899379 ]; var k = 0; for (var row = 0; row < 8; row++) { for (var col = 0; col < 8; col++) { fdtbl_Y[k] = (1.0 / (YTable [ZigZag[k]] * aasf[row] * aasf[col] * 8.0)); fdtbl_UV[k] = (1.0 / (UVTable[ZigZag[k]] * aasf[row] * aasf[col] * 8.0)); k++; } } } function computeHuffmanTbl(nrcodes, std_table){ var codevalue = 0; var pos_in_table = 0; var HT = new Array(); for (var k = 1; k <= 16; k++) { for (var j = 1; j <= nrcodes[k]; j++) { HT[std_table[pos_in_table]] = []; HT[std_table[pos_in_table]][0] = codevalue; HT[std_table[pos_in_table]][1] = k; pos_in_table++; codevalue++; } codevalue*=2; } return HT; } function initHuffmanTbl() { YDC_HT = computeHuffmanTbl(std_dc_luminance_nrcodes,std_dc_luminance_values); UVDC_HT = computeHuffmanTbl(std_dc_chrominance_nrcodes,std_dc_chrominance_values); YAC_HT = computeHuffmanTbl(std_ac_luminance_nrcodes,std_ac_luminance_values); UVAC_HT = computeHuffmanTbl(std_ac_chrominance_nrcodes,std_ac_chrominance_values); } function initCategoryNumber() { var nrlower = 1; var nrupper = 2; for (var cat = 1; cat <= 15; cat++) { //Positive numbers for (var nr = nrlower; nr<nrupper; nr++) { category[32767+nr] = cat; bitcode[32767+nr] = []; bitcode[32767+nr][1] = cat; bitcode[32767+nr][0] = nr; } //Negative numbers for (var nrneg =-(nrupper-1); nrneg<=-nrlower; nrneg++) { category[32767+nrneg] = cat; bitcode[32767+nrneg] = []; bitcode[32767+nrneg][1] = cat; bitcode[32767+nrneg][0] = nrupper-1+nrneg; } nrlower <<= 1; nrupper <<= 1; } } function initRGBYUVTable() { for(var i = 0; i < 256;i++) { RGB_YUV_TABLE[i] = 19595 * i; RGB_YUV_TABLE[(i+ 256)>>0] = 38470 * i; RGB_YUV_TABLE[(i+ 512)>>0] = 7471 * i + 0x8000; RGB_YUV_TABLE[(i+ 768)>>0] = -11059 * i; RGB_YUV_TABLE[(i+1024)>>0] = -21709 * i; RGB_YUV_TABLE[(i+1280)>>0] = 32768 * i + 0x807FFF; RGB_YUV_TABLE[(i+1536)>>0] = -27439 * i; RGB_YUV_TABLE[(i+1792)>>0] = - 5329 * i; } } // IO functions function writeBits(bs) { var value = bs[0]; var posval = bs[1]-1; while ( posval >= 0 ) { if (value & (1 << posval) ) { bytenew |= (1 << bytepos); } posval--; bytepos--; if (bytepos < 0) { if (bytenew == 0xFF) { writeByte(0xFF); writeByte(0); } else { writeByte(bytenew); } bytepos=7; bytenew=0; } } } function writeByte(value) { byteout.push(clt[value]); // write char directly instead of converting later } function writeWord(value) { writeByte((value>>8)&0xFF); writeByte((value )&0xFF); } // DCT & quantization core function fDCTQuant(data, fdtbl) { var d0, d1, d2, d3, d4, d5, d6, d7; /* Pass 1: process rows. */ var dataOff=0; var i; var I8 = 8; var I64 = 64; for (i=0; i<I8; ++i) { d0 = data[dataOff]; d1 = data[dataOff+1]; d2 = data[dataOff+2]; d3 = data[dataOff+3]; d4 = data[dataOff+4]; d5 = data[dataOff+5]; d6 = data[dataOff+6]; d7 = data[dataOff+7]; var tmp0 = d0 + d7; var tmp7 = d0 - d7; var tmp1 = d1 + d6; var tmp6 = d1 - d6; var tmp2 = d2 + d5; var tmp5 = d2 - d5; var tmp3 = d3 + d4; var tmp4 = d3 - d4; /* Even part */ var tmp10 = tmp0 + tmp3; /* phase 2 */ var tmp13 = tmp0 - tmp3; var tmp11 = tmp1 + tmp2; var tmp12 = tmp1 - tmp2; data[dataOff] = tmp10 + tmp11; /* phase 3 */ data[dataOff+4] = tmp10 - tmp11; var z1 = (tmp12 + tmp13) * 0.707106781; /* c4 */ data[dataOff+2] = tmp13 + z1; /* phase 5 */ data[dataOff+6] = tmp13 - z1; /* Odd part */ tmp10 = tmp4 + tmp5; /* phase 2 */ tmp11 = tmp5 + tmp6; tmp12 = tmp6 + tmp7; /* The rotator is modified from fig 4-8 to avoid extra negations. */ var z5 = (tmp10 - tmp12) * 0.382683433; /* c6 */ var z2 = 0.541196100 * tmp10 + z5; /* c2-c6 */ var z4 = 1.306562965 * tmp12 + z5; /* c2+c6 */ var z3 = tmp11 * 0.707106781; /* c4 */ var z11 = tmp7 + z3; /* phase 5 */ var z13 = tmp7 - z3; data[dataOff+5] = z13 + z2; /* phase 6 */ data[dataOff+3] = z13 - z2; data[dataOff+1] = z11 + z4; data[dataOff+7] = z11 - z4; dataOff += 8; /* advance pointer to next row */ } /* Pass 2: process columns. */ dataOff = 0; for (i=0; i<I8; ++i) { d0 = data[dataOff]; d1 = data[dataOff + 8]; d2 = data[dataOff + 16]; d3 = data[dataOff + 24]; d4 = data[dataOff + 32]; d5 = data[dataOff + 40]; d6 = data[dataOff + 48]; d7 = data[dataOff + 56]; var tmp0p2 = d0 + d7; var tmp7p2 = d0 - d7; var tmp1p2 = d1 + d6; var tmp6p2 = d1 - d6; var tmp2p2 = d2 + d5; var tmp5p2 = d2 - d5; var tmp3p2 = d3 + d4; var tmp4p2 = d3 - d4; /* Even part */ var tmp10p2 = tmp0p2 + tmp3p2; /* phase 2 */ var tmp13p2 = tmp0p2 - tmp3p2; var tmp11p2 = tmp1p2 + tmp2p2; var tmp12p2 = tmp1p2 - tmp2p2; data[dataOff] = tmp10p2 + tmp11p2; /* phase 3 */ data[dataOff+32] = tmp10p2 - tmp11p2; var z1p2 = (tmp12p2 + tmp13p2) * 0.707106781; /* c4 */ data[dataOff+16] = tmp13p2 + z1p2; /* phase 5 */ data[dataOff+48] = tmp13p2 - z1p2; /* Odd part */ tmp10p2 = tmp4p2 + tmp5p2; /* phase 2 */ tmp11p2 = tmp5p2 + tmp6p2; tmp12p2 = tmp6p2 + tmp7p2; /* The rotator is modified from fig 4-8 to avoid extra negations. */ var z5p2 = (tmp10p2 - tmp12p2) * 0.382683433; /* c6 */ var z2p2 = 0.541196100 * tmp10p2 + z5p2; /* c2-c6 */ var z4p2 = 1.306562965 * tmp12p2 + z5p2; /* c2+c6 */ var z3p2 = tmp11p2 * 0.707106781; /* c4 */ var z11p2 = tmp7p2 + z3p2; /* phase 5 */ var z13p2 = tmp7p2 - z3p2; data[dataOff+40] = z13p2 + z2p2; /* phase 6 */ data[dataOff+24] = z13p2 - z2p2; data[dataOff+ 8] = z11p2 + z4p2; data[dataOff+56] = z11p2 - z4p2; dataOff++; /* advance pointer to next column */ } // Quantize/descale the coefficients var fDCTQuant; for (i=0; i<I64; ++i) { // Apply the quantization and scaling factor & Round to nearest integer fDCTQuant = data[i]*fdtbl[i]; outputfDCTQuant[i] = (fDCTQuant > 0.0) ? ((fDCTQuant + 0.5)|0) : ((fDCTQuant - 0.5)|0); //outputfDCTQuant[i] = fround(fDCTQuant); } return outputfDCTQuant; } function writeAPP0() { writeWord(0xFFE0); // marker writeWord(16); // length writeByte(0x4A); // J writeByte(0x46); // F writeByte(0x49); // I writeByte(0x46); // F writeByte(0); // = "JFIF",'\0' writeByte(1); // versionhi writeByte(1); // versionlo writeByte(0); // xyunits writeWord(1); // xdensity writeWord(1); // ydensity writeByte(0); // thumbnwidth writeByte(0); // thumbnheight } function writeSOF0(width, height) { writeWord(0xFFC0); // marker writeWord(17); // length, truecolor YUV JPG writeByte(8); // precision writeWord(height); writeWord(width); writeByte(3); // nrofcomponents writeByte(1); // IdY writeByte(0x11); // HVY writeByte(0); // QTY writeByte(2); // IdU writeByte(0x11); // HVU writeByte(1); // QTU writeByte(3); // IdV writeByte(0x11); // HVV writeByte(1); // QTV } function writeDQT() { writeWord(0xFFDB); // marker writeWord(132); // length writeByte(0); for (var i=0; i<64; i++) { writeByte(YTable[i]); } writeByte(1); for (var j=0; j<64; j++) { writeByte(UVTable[j]); } } function writeDHT() { writeWord(0xFFC4); // marker writeWord(0x01A2); // length writeByte(0); // HTYDCinfo for (var i=0; i<16; i++) { writeByte(std_dc_luminance_nrcodes[i+1]); } for (var j=0; j<=11; j++) { writeByte(std_dc_luminance_values[j]); } writeByte(0x10); // HTYACinfo for (var k=0; k<16; k++) { writeByte(std_ac_luminance_nrcodes[k+1]); } for (var l=0; l<=161; l++) { writeByte(std_ac_luminance_values[l]); } writeByte(1); // HTUDCinfo for (var m=0; m<16; m++) { writeByte(std_dc_chrominance_nrcodes[m+1]); } for (var n=0; n<=11; n++) { writeByte(std_dc_chrominance_values[n]); } writeByte(0x11); // HTUACinfo for (var o=0; o<16; o++) { writeByte(std_ac_chrominance_nrcodes[o+1]); } for (var p=0; p<=161; p++) { writeByte(std_ac_chrominance_values[p]); } } function writeSOS() { writeWord(0xFFDA); // marker writeWord(12); // length writeByte(3); // nrofcomponents writeByte(1); // IdY writeByte(0); // HTY writeByte(2); // IdU writeByte(0x11); // HTU writeByte(3); // IdV writeByte(0x11); // HTV writeByte(0); // Ss writeByte(0x3f); // Se writeByte(0); // Bf } function processDU(CDU, fdtbl, DC, HTDC, HTAC){ var EOB = HTAC[0x00]; var M16zeroes = HTAC[0xF0]; var pos; var I16 = 16; var I63 = 63; var I64 = 64; var DU_DCT = fDCTQuant(CDU, fdtbl); //ZigZag reorder for (var j=0;j<I64;++j) { DU[ZigZag[j]]=DU_DCT[j]; } var Diff = DU[0] - DC; DC = DU[0]; //Encode DC if (Diff==0) { writeBits(HTDC[0]); // Diff might be 0 } else { pos = 32767+Diff; writeBits(HTDC[category[pos]]); writeBits(bitcode[pos]); } //Encode ACs var end0pos = 63; // was const... which is crazy for (; (end0pos>0)&&(DU[end0pos]==0); end0pos--) {}; //end0pos = first element in reverse order !=0 if ( end0pos == 0) { writeBits(EOB); return DC; } var i = 1; var lng; while ( i <= end0pos ) { var startpos = i; for (; (DU[i]==0) && (i<=end0pos); ++i) {} var nrzeroes = i-startpos; if ( nrzeroes >= I16 ) { lng = nrzeroes>>4; for (var nrmarker=1; nrmarker <= lng; ++nrmarker) writeBits(M16zeroes); nrzeroes = nrzeroes&0xF; } pos = 32767+DU[i]; writeBits(HTAC[(nrzeroes<<4)+category[pos]]); writeBits(bitcode[pos]); i++; } if ( end0pos != I63 ) { writeBits(EOB); } return DC; } function initCharLookupTable(){ var sfcc = String.fromCharCode; for(var i=0; i < 256; i++){ ///// ACHTUNG // 255 clt[i] = sfcc(i); } } this.encode = function(image,quality) // image data object { // var time_start = new Date().getTime(); if(quality) setQuality(quality); // Initialize bit writer byteout = new Array(); bytenew=0; bytepos=7; // Add JPEG headers writeWord(0xFFD8); // SOI writeAPP0(); writeDQT(); writeSOF0(image.width,image.height); writeDHT(); writeSOS(); // Encode 8x8 macroblocks var DCY=0; var DCU=0; var DCV=0; bytenew=0; bytepos=7; this.encode.displayName = "_encode_"; var imageData = image.data; var width = image.width; var height = image.height; var quadWidth = width*4; var tripleWidth = width*3; var x, y = 0; var r, g, b; var start,p, col,row,pos; while(y < height){ x = 0; while(x < quadWidth){ start = quadWidth * y + x; p = start; col = -1; row = 0; for(pos=0; pos < 64; pos++){ row = pos >> 3;// /8 col = ( pos & 7 ) * 4; // %8 p = start + ( row * quadWidth ) + col; if(y+row >= height){ // padding bottom p-= (quadWidth*(y+1+row-height)); } if(x+col >= quadWidth){ // padding right p-= ((x+col) - quadWidth +4) } r = imageData[ p++ ]; g = imageData[ p++ ]; b = imageData[ p++ ]; /* // calculate YUV values dynamically YDU[pos]=((( 0.29900)*r+( 0.58700)*g+( 0.11400)*b))-128; //-0x80 UDU[pos]=(((-0.16874)*r+(-0.33126)*g+( 0.50000)*b)); VDU[pos]=((( 0.50000)*r+(-0.41869)*g+(-0.08131)*b)); */ // use lookup table (slightly faster) YDU[pos] = ((RGB_YUV_TABLE[r] + RGB_YUV_TABLE[(g + 256)>>0] + RGB_YUV_TABLE[(b + 512)>>0]) >> 16)-128; UDU[pos] = ((RGB_YUV_TABLE[(r + 768)>>0] + RGB_YUV_TABLE[(g + 1024)>>0] + RGB_YUV_TABLE[(b + 1280)>>0]) >> 16)-128; VDU[pos] = ((RGB_YUV_TABLE[(r + 1280)>>0] + RGB_YUV_TABLE[(g + 1536)>>0] + RGB_YUV_TABLE[(b + 1792)>>0]) >> 16)-128; } DCY = processDU(YDU, fdtbl_Y, DCY, YDC_HT, YAC_HT); DCU = processDU(UDU, fdtbl_UV, DCU, UVDC_HT, UVAC_HT); DCV = processDU(VDU, fdtbl_UV, DCV, UVDC_HT, UVAC_HT); x+=32; } y+=8; } //////////////////////////////////////////////////////////////// // Do the bit alignment of the EOI marker if ( bytepos >= 0 ) { var fillbits = []; fillbits[1] = bytepos+1; fillbits[0] = (1<<(bytepos+1))-1; writeBits(fillbits); } writeWord(0xFFD9); //EOI var jpegDataUri = 'data:image/jpeg;base64,' + btoa(byteout.join('')); byteout = []; // benchmarking // var duration = new Date().getTime() - time_start; // console.log('Encoding time: '+ currentQuality + 'ms'); // return jpegDataUri } function setQuality(quality){ if (quality <= 0) { quality = 1; } if (quality > 100) { quality = 100; } if(currentQuality == quality) return // don't recalc if unchanged var sf = 0; if (quality < 50) { sf = Math.floor(5000 / quality); } else { sf = Math.floor(200 - quality*2); } initQuantTables(sf); currentQuality = quality; // console.log('Quality set to: '+quality +'%'); } function init(){ // var time_start = new Date().getTime(); if(!quality) quality = 50; // Create tables initCharLookupTable() initHuffmanTbl(); initCategoryNumber(); initRGBYUVTable(); setQuality(quality); // var duration = new Date().getTime() - time_start; // console.log('Initialization '+ duration + 'ms'); } init(); }; JPEGEncoder.encode = function( data, quality ) { var encoder = new JPEGEncoder( quality ); return encoder.encode( data ); } return JPEGEncoder; }); /** * @fileOverview Fix android canvas.toDataUrl bug. */ define('runtime/html5/androidpatch',[ 'runtime/html5/util', 'runtime/html5/jpegencoder', 'base' ], function( Util, encoder, Base ) { var origin = Util.canvasToDataUrl, supportJpeg; Util.canvasToDataUrl = function( canvas, type, quality ) { var ctx, w, h, fragement, parts; // 非android手机直接跳过。 if ( !Base.os.android ) { return origin.apply( null, arguments ); } // 检测是否canvas支持jpeg导出,根据数据格式来判断。 // JPEG 前两位分别是:255, 216 if ( type === 'image/jpeg' && typeof supportJpeg === 'undefined' ) { fragement = origin.apply( null, arguments ); parts = fragement.split(','); if ( ~parts[ 0 ].indexOf('base64') ) { fragement = atob( parts[ 1 ] ); } else { fragement = decodeURIComponent( parts[ 1 ] ); } fragement = fragement.substring( 0, 2 ); supportJpeg = fragement.charCodeAt( 0 ) === 255 && fragement.charCodeAt( 1 ) === 216; } // 只有在android环境下才修复 if ( type === 'image/jpeg' && !supportJpeg ) { w = canvas.width; h = canvas.height; ctx = canvas.getContext('2d'); return encoder.encode( ctx.getImageData( 0, 0, w, h ), quality ); } return origin.apply( null, arguments ); }; }); /** * @fileOverview Image */ define('runtime/html5/image',[ 'base', 'runtime/html5/runtime', 'runtime/html5/util' ], function( Base, Html5Runtime, Util ) { var BLANK = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs%3D'; return Html5Runtime.register( 'Image', { // flag: 标记是否被修改过。 modified: false, init: function() { var me = this, img = new Image(); img.onload = function() { me._info = { type: me.type, width: this.width, height: this.height }; // 读取meta信息。 if ( !me._metas && 'image/jpeg' === me.type ) { Util.parseMeta( me._blob, function( error, ret ) { me._metas = ret; me.owner.trigger('load'); }); } else { me.owner.trigger('load'); } }; img.onerror = function() { me.owner.trigger('error'); }; me._img = img; }, loadFromBlob: function( blob ) { var me = this, img = me._img; me._blob = blob; me.type = blob.type; img.src = Util.createObjectURL( blob.getSource() ); me.owner.once( 'load', function() { Util.revokeObjectURL( img.src ); }); }, resize: function( width, height ) { var canvas = this._canvas || (this._canvas = document.createElement('canvas')); this._resize( this._img, canvas, width, height ); this._blob = null; // 没用了,可以删掉了。 this.modified = true; this.owner.trigger( 'complete', 'resize' ); }, crop: function( x, y, w, h, s ) { var cvs = this._canvas || (this._canvas = document.createElement('canvas')), opts = this.options, img = this._img, iw = img.naturalWidth, ih = img.naturalHeight, orientation = this.getOrientation(); s = s || 1; // todo 解决 orientation 的问题。 // values that require 90 degree rotation // if ( ~[ 5, 6, 7, 8 ].indexOf( orientation ) ) { // switch ( orientation ) { // case 6: // tmp = x; // x = y; // y = iw * s - tmp - w; // console.log(ih * s, tmp, w) // break; // } // (w ^= h, h ^= w, w ^= h); // } cvs.width = w; cvs.height = h; opts.preserveHeaders || this._rotate2Orientaion( cvs, orientation ); this._renderImageToCanvas( cvs, img, -x, -y, iw * s, ih * s ); this._blob = null; // 没用了,可以删掉了。 this.modified = true; this.owner.trigger( 'complete', 'crop' ); }, getAsBlob: function( type ) { var blob = this._blob, opts = this.options, canvas; type = type || this.type; // blob需要重新生成。 if ( this.modified || this.type !== type ) { canvas = this._canvas; if ( type === 'image/jpeg' ) { blob = Util.canvasToDataUrl( canvas, type, opts.quality ); if ( opts.preserveHeaders && this._metas && this._metas.imageHead ) { blob = Util.dataURL2ArrayBuffer( blob ); blob = Util.updateImageHead( blob, this._metas.imageHead ); blob = Util.arrayBufferToBlob( blob, type ); return blob; } } else { blob = Util.canvasToDataUrl( canvas, type ); } blob = Util.dataURL2Blob( blob ); } return blob; }, getAsDataUrl: function( type ) { var opts = this.options; type = type || this.type; if ( type === 'image/jpeg' ) { return Util.canvasToDataUrl( this._canvas, type, opts.quality ); } else { return this._canvas.toDataURL( type ); } }, getOrientation: function() { return this._metas && this._metas.exif && this._metas.exif.get('Orientation') || 1; }, info: function( val ) { // setter if ( val ) { this._info = val; return this; } // getter return this._info; }, meta: function( val ) { // setter if ( val ) { this._meta = val; return this; } // getter return this._meta; }, destroy: function() { var canvas = this._canvas; this._img.onload = null; if ( canvas ) { canvas.getContext('2d') .clearRect( 0, 0, canvas.width, canvas.height ); canvas.width = canvas.height = 0; this._canvas = null; } // 释放内存。非常重要,否则释放不了image的内存。 this._img.src = BLANK; this._img = this._blob = null; }, _resize: function( img, cvs, width, height ) { var opts = this.options, naturalWidth = img.width, naturalHeight = img.height, orientation = this.getOrientation(), scale, w, h, x, y; // values that require 90 degree rotation if ( ~[ 5, 6, 7, 8 ].indexOf( orientation ) ) { // 交换width, height的值。 width ^= height; height ^= width; width ^= height; } scale = Math[ opts.crop ? 'max' : 'min' ]( width / naturalWidth, height / naturalHeight ); // 不允许放大。 opts.allowMagnify || (scale = Math.min( 1, scale )); w = naturalWidth * scale; h = naturalHeight * scale; if ( opts.crop ) { cvs.width = width; cvs.height = height; } else { cvs.width = w; cvs.height = h; } x = (cvs.width - w) / 2; y = (cvs.height - h) / 2; opts.preserveHeaders || this._rotate2Orientaion( cvs, orientation ); this._renderImageToCanvas( cvs, img, x, y, w, h ); }, _rotate2Orientaion: function( canvas, orientation ) { var width = canvas.width, height = canvas.height, ctx = canvas.getContext('2d'); switch ( orientation ) { case 5: case 6: case 7: case 8: canvas.width = height; canvas.height = width; break; } switch ( orientation ) { case 2: // horizontal flip ctx.translate( width, 0 ); ctx.scale( -1, 1 ); break; case 3: // 180 rotate left ctx.translate( width, height ); ctx.rotate( Math.PI ); break; case 4: // vertical flip ctx.translate( 0, height ); ctx.scale( 1, -1 ); break; case 5: // vertical flip + 90 rotate right ctx.rotate( 0.5 * Math.PI ); ctx.scale( 1, -1 ); break; case 6: // 90 rotate right ctx.rotate( 0.5 * Math.PI ); ctx.translate( 0, -height ); break; case 7: // horizontal flip + 90 rotate right ctx.rotate( 0.5 * Math.PI ); ctx.translate( width, -height ); ctx.scale( -1, 1 ); break; case 8: // 90 rotate left ctx.rotate( -0.5 * Math.PI ); ctx.translate( -width, 0 ); break; } }, // https://github.com/stomita/ios-imagefile-megapixel/ // blob/master/src/megapix-image.js _renderImageToCanvas: (function() { // 如果不是ios, 不需要这么复杂! if ( !Base.os.ios ) { return function( canvas ) { var args = Base.slice( arguments, 1 ), ctx = canvas.getContext('2d'); ctx.drawImage.apply( ctx, args ); }; } /** * Detecting vertical squash in loaded image. * Fixes a bug which squash image vertically while drawing into * canvas for some images. */ function detectVerticalSquash( img, iw, ih ) { var canvas = document.createElement('canvas'), ctx = canvas.getContext('2d'), sy = 0, ey = ih, py = ih, data, alpha, ratio; canvas.width = 1; canvas.height = ih; ctx.drawImage( img, 0, 0 ); data = ctx.getImageData( 0, 0, 1, ih ).data; // search image edge pixel position in case // it is squashed vertically. while ( py > sy ) { alpha = data[ (py - 1) * 4 + 3 ]; if ( alpha === 0 ) { ey = py; } else { sy = py; } py = (ey + sy) >> 1; } ratio = (py / ih); return (ratio === 0) ? 1 : ratio; } // fix ie7 bug // http://stackoverflow.com/questions/11929099/ // html5-canvas-drawimage-ratio-bug-ios if ( Base.os.ios >= 7 ) { return function( canvas, img, x, y, w, h ) { var iw = img.naturalWidth, ih = img.naturalHeight, vertSquashRatio = detectVerticalSquash( img, iw, ih ); return canvas.getContext('2d').drawImage( img, 0, 0, iw * vertSquashRatio, ih * vertSquashRatio, x, y, w, h ); }; } /** * Detect subsampling in loaded image. * In iOS, larger images than 2M pixels may be * subsampled in rendering. */ function detectSubsampling( img ) { var iw = img.naturalWidth, ih = img.naturalHeight, canvas, ctx; // subsampling may happen overmegapixel image if ( iw * ih > 1024 * 1024 ) { canvas = document.createElement('canvas'); canvas.width = canvas.height = 1; ctx = canvas.getContext('2d'); ctx.drawImage( img, -iw + 1, 0 ); // subsampled image becomes half smaller in rendering size. // check alpha channel value to confirm image is covering // edge pixel or not. if alpha value is 0 // image is not covering, hence subsampled. return ctx.getImageData( 0, 0, 1, 1 ).data[ 3 ] === 0; } else { return false; } } return function( canvas, img, x, y, width, height ) { var iw = img.naturalWidth, ih = img.naturalHeight, ctx = canvas.getContext('2d'), subsampled = detectSubsampling( img ), doSquash = this.type === 'image/jpeg', d = 1024, sy = 0, dy = 0, tmpCanvas, tmpCtx, vertSquashRatio, dw, dh, sx, dx; if ( subsampled ) { iw /= 2; ih /= 2; } ctx.save(); tmpCanvas = document.createElement('canvas'); tmpCanvas.width = tmpCanvas.height = d; tmpCtx = tmpCanvas.getContext('2d'); vertSquashRatio = doSquash ? detectVerticalSquash( img, iw, ih ) : 1; dw = Math.ceil( d * width / iw ); dh = Math.ceil( d * height / ih / vertSquashRatio ); while ( sy < ih ) { sx = 0; dx = 0; while ( sx < iw ) { tmpCtx.clearRect( 0, 0, d, d ); tmpCtx.drawImage( img, -sx, -sy ); ctx.drawImage( tmpCanvas, 0, 0, d, d, x + dx, y + dy, dw, dh ); sx += d; dx += dw; } sy += d; dy += dh; } ctx.restore(); tmpCanvas = tmpCtx = null; }; })() }); }); /** * @fileOverview Transport * @todo 支持chunked传输,优势: * 可以将大文件分成小块,挨个传输,可以提高大文件成功率,当失败的时候,也只需要重传那小部分, * 而不需要重头再传一次。另外断点续传也需要用chunked方式。 */ define('runtime/html5/transport',[ 'base', 'runtime/html5/runtime' ], function( Base, Html5Runtime ) { var noop = Base.noop, $ = Base.$; return Html5Runtime.register( 'Transport', { init: function() { this._status = 0; this._response = null; }, send: function() { var owner = this.owner, opts = this.options, xhr = this._initAjax(), blob = owner._blob, server = opts.server, formData, binary, fr; if ( opts.sendAsBinary ) { server += (/\?/.test( server ) ? '&' : '?') + $.param( owner._formData ); binary = blob.getSource(); } else { formData = new FormData(); $.each( owner._formData, function( k, v ) { formData.append( k, v ); }); formData.append( opts.fileVal, blob.getSource(), opts.filename || owner._formData.name || '' ); } if ( opts.withCredentials && 'withCredentials' in xhr ) { xhr.open( opts.method, server, true ); xhr.withCredentials = true; } else { xhr.open( opts.method, server ); } this._setRequestHeader( xhr, opts.headers ); if ( binary ) { // 强制设置成 content-type 为文件流。 xhr.overrideMimeType && xhr.overrideMimeType('application/octet-stream'); // android直接发送blob会导致服务端接收到的是空文件。 // bug详情。 // https://code.google.com/p/android/issues/detail?id=39882 // 所以先用fileReader读取出来再通过arraybuffer的方式发送。 if ( Base.os.android ) { fr = new FileReader(); fr.onload = function() { xhr.send( this.result ); fr = fr.onload = null; }; fr.readAsArrayBuffer( binary ); } else { xhr.send( binary ); } } else { xhr.send( formData ); } }, getResponse: function() { return this._response; }, getResponseAsJson: function() { return this._parseJson( this._response ); }, getStatus: function() { return this._status; }, abort: function() { var xhr = this._xhr; if ( xhr ) { xhr.upload.onprogress = noop; xhr.onreadystatechange = noop; xhr.abort(); this._xhr = xhr = null; } }, destroy: function() { this.abort(); }, _initAjax: function() { var me = this, xhr = new XMLHttpRequest(), opts = this.options; if ( opts.withCredentials && !('withCredentials' in xhr) && typeof XDomainRequest !== 'undefined' ) { xhr = new XDomainRequest(); } xhr.upload.onprogress = function( e ) { var percentage = 0; if ( e.lengthComputable ) { percentage = e.loaded / e.total; } return me.trigger( 'progress', percentage ); }; xhr.onreadystatechange = function() { if ( xhr.readyState !== 4 ) { return; } xhr.upload.onprogress = noop; xhr.onreadystatechange = noop; me._xhr = null; me._status = xhr.status; if ( xhr.status >= 200 && xhr.status < 300 ) { me._response = xhr.responseText; return me.trigger('load'); } else if ( xhr.status >= 500 && xhr.status < 600 ) { me._response = xhr.responseText; return me.trigger( 'error', 'server' ); } return me.trigger( 'error', me._status ? 'http' : 'abort' ); }; me._xhr = xhr; return xhr; }, _setRequestHeader: function( xhr, headers ) { $.each( headers, function( key, val ) { xhr.setRequestHeader( key, val ); }); }, _parseJson: function( str ) { var json; try { json = JSON.parse( str ); } catch ( ex ) { json = {}; } return json; } }); }); /** * @fileOverview Transport flash实现 */ define('runtime/html5/md5',[ 'runtime/html5/runtime' ], function( FlashRuntime ) { /* * Fastest md5 implementation around (JKM md5) * Credits: Joseph Myers * * @see http://www.myersdaily.org/joseph/javascript/md5-text.html * @see http://jsperf.com/md5-shootout/7 */ /* this function is much faster, so if possible we use it. Some IEs are the only ones I know of that need the idiotic second function, generated by an if clause. */ var add32 = function (a, b) { return (a + b) & 0xFFFFFFFF; }, cmn = function (q, a, b, x, s, t) { a = add32(add32(a, q), add32(x, t)); return add32((a << s) | (a >>> (32 - s)), b); }, ff = function (a, b, c, d, x, s, t) { return cmn((b & c) | ((~b) & d), a, b, x, s, t); }, gg = function (a, b, c, d, x, s, t) { return cmn((b & d) | (c & (~d)), a, b, x, s, t); }, hh = function (a, b, c, d, x, s, t) { return cmn(b ^ c ^ d, a, b, x, s, t); }, ii = function (a, b, c, d, x, s, t) { return cmn(c ^ (b | (~d)), a, b, x, s, t); }, md5cycle = function (x, k) { var a = x[0], b = x[1], c = x[2], d = x[3]; a = ff(a, b, c, d, k[0], 7, -680876936); d = ff(d, a, b, c, k[1], 12, -389564586); c = ff(c, d, a, b, k[2], 17, 606105819); b = ff(b, c, d, a, k[3], 22, -1044525330); a = ff(a, b, c, d, k[4], 7, -176418897); d = ff(d, a, b, c, k[5], 12, 1200080426); c = ff(c, d, a, b, k[6], 17, -1473231341); b = ff(b, c, d, a, k[7], 22, -45705983); a = ff(a, b, c, d, k[8], 7, 1770035416); d = ff(d, a, b, c, k[9], 12, -1958414417); c = ff(c, d, a, b, k[10], 17, -42063); b = ff(b, c, d, a, k[11], 22, -1990404162); a = ff(a, b, c, d, k[12], 7, 1804603682); d = ff(d, a, b, c, k[13], 12, -40341101); c = ff(c, d, a, b, k[14], 17, -1502002290); b = ff(b, c, d, a, k[15], 22, 1236535329); a = gg(a, b, c, d, k[1], 5, -165796510); d = gg(d, a, b, c, k[6], 9, -1069501632); c = gg(c, d, a, b, k[11], 14, 643717713); b = gg(b, c, d, a, k[0], 20, -373897302); a = gg(a, b, c, d, k[5], 5, -701558691); d = gg(d, a, b, c, k[10], 9, 38016083); c = gg(c, d, a, b, k[15], 14, -660478335); b = gg(b, c, d, a, k[4], 20, -405537848); a = gg(a, b, c, d, k[9], 5, 568446438); d = gg(d, a, b, c, k[14], 9, -1019803690); c = gg(c, d, a, b, k[3], 14, -187363961); b = gg(b, c, d, a, k[8], 20, 1163531501); a = gg(a, b, c, d, k[13], 5, -1444681467); d = gg(d, a, b, c, k[2], 9, -51403784); c = gg(c, d, a, b, k[7], 14, 1735328473); b = gg(b, c, d, a, k[12], 20, -1926607734); a = hh(a, b, c, d, k[5], 4, -378558); d = hh(d, a, b, c, k[8], 11, -2022574463); c = hh(c, d, a, b, k[11], 16, 1839030562); b = hh(b, c, d, a, k[14], 23, -35309556); a = hh(a, b, c, d, k[1], 4, -1530992060); d = hh(d, a, b, c, k[4], 11, 1272893353); c = hh(c, d, a, b, k[7], 16, -155497632); b = hh(b, c, d, a, k[10], 23, -1094730640); a = hh(a, b, c, d, k[13], 4, 681279174); d = hh(d, a, b, c, k[0], 11, -358537222); c = hh(c, d, a, b, k[3], 16, -722521979); b = hh(b, c, d, a, k[6], 23, 76029189); a = hh(a, b, c, d, k[9], 4, -640364487); d = hh(d, a, b, c, k[12], 11, -421815835); c = hh(c, d, a, b, k[15], 16, 530742520); b = hh(b, c, d, a, k[2], 23, -995338651); a = ii(a, b, c, d, k[0], 6, -198630844); d = ii(d, a, b, c, k[7], 10, 1126891415); c = ii(c, d, a, b, k[14], 15, -1416354905); b = ii(b, c, d, a, k[5], 21, -57434055); a = ii(a, b, c, d, k[12], 6, 1700485571); d = ii(d, a, b, c, k[3], 10, -1894986606); c = ii(c, d, a, b, k[10], 15, -1051523); b = ii(b, c, d, a, k[1], 21, -2054922799); a = ii(a, b, c, d, k[8], 6, 1873313359); d = ii(d, a, b, c, k[15], 10, -30611744); c = ii(c, d, a, b, k[6], 15, -1560198380); b = ii(b, c, d, a, k[13], 21, 1309151649); a = ii(a, b, c, d, k[4], 6, -145523070); d = ii(d, a, b, c, k[11], 10, -1120210379); c = ii(c, d, a, b, k[2], 15, 718787259); b = ii(b, c, d, a, k[9], 21, -343485551); x[0] = add32(a, x[0]); x[1] = add32(b, x[1]); x[2] = add32(c, x[2]); x[3] = add32(d, x[3]); }, /* there needs to be support for Unicode here, * unless we pretend that we can redefine the MD-5 * algorithm for multi-byte characters (perhaps * by adding every four 16-bit characters and * shortening the sum to 32 bits). Otherwise * I suggest performing MD-5 as if every character * was two bytes--e.g., 0040 0025 = @%--but then * how will an ordinary MD-5 sum be matched? * There is no way to standardize text to something * like UTF-8 before transformation; speed cost is * utterly prohibitive. The JavaScript standard * itself needs to look at this: it should start * providing access to strings as preformed UTF-8 * 8-bit unsigned value arrays. */ md5blk = function (s) { var md5blks = [], i; /* Andy King said do it this way. */ for (i = 0; i < 64; i += 4) { md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24); } return md5blks; }, md5blk_array = function (a) { var md5blks = [], i; /* Andy King said do it this way. */ for (i = 0; i < 64; i += 4) { md5blks[i >> 2] = a[i] + (a[i + 1] << 8) + (a[i + 2] << 16) + (a[i + 3] << 24); } return md5blks; }, md51 = function (s) { var n = s.length, state = [1732584193, -271733879, -1732584194, 271733878], i, length, tail, tmp, lo, hi; for (i = 64; i <= n; i += 64) { md5cycle(state, md5blk(s.substring(i - 64, i))); } s = s.substring(i - 64); length = s.length; tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; for (i = 0; i < length; i += 1) { tail[i >> 2] |= s.charCodeAt(i) << ((i % 4) << 3); } tail[i >> 2] |= 0x80 << ((i % 4) << 3); if (i > 55) { md5cycle(state, tail); for (i = 0; i < 16; i += 1) { tail[i] = 0; } } // Beware that the final length might not fit in 32 bits so we take care of that tmp = n * 8; tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/); lo = parseInt(tmp[2], 16); hi = parseInt(tmp[1], 16) || 0; tail[14] = lo; tail[15] = hi; md5cycle(state, tail); return state; }, md51_array = function (a) { var n = a.length, state = [1732584193, -271733879, -1732584194, 271733878], i, length, tail, tmp, lo, hi; for (i = 64; i <= n; i += 64) { md5cycle(state, md5blk_array(a.subarray(i - 64, i))); } // Not sure if it is a bug, however IE10 will always produce a sub array of length 1 // containing the last element of the parent array if the sub array specified starts // beyond the length of the parent array - weird. // https://connect.microsoft.com/IE/feedback/details/771452/typed-array-subarray-issue a = (i - 64) < n ? a.subarray(i - 64) : new Uint8Array(0); length = a.length; tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; for (i = 0; i < length; i += 1) { tail[i >> 2] |= a[i] << ((i % 4) << 3); } tail[i >> 2] |= 0x80 << ((i % 4) << 3); if (i > 55) { md5cycle(state, tail); for (i = 0; i < 16; i += 1) { tail[i] = 0; } } // Beware that the final length might not fit in 32 bits so we take care of that tmp = n * 8; tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/); lo = parseInt(tmp[2], 16); hi = parseInt(tmp[1], 16) || 0; tail[14] = lo; tail[15] = hi; md5cycle(state, tail); return state; }, hex_chr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'], rhex = function (n) { var s = '', j; for (j = 0; j < 4; j += 1) { s += hex_chr[(n >> (j * 8 + 4)) & 0x0F] + hex_chr[(n >> (j * 8)) & 0x0F]; } return s; }, hex = function (x) { var i; for (i = 0; i < x.length; i += 1) { x[i] = rhex(x[i]); } return x.join(''); }, md5 = function (s) { return hex(md51(s)); }, //////////////////////////////////////////////////////////////////////////// /** * SparkMD5 OOP implementation. * * Use this class to perform an incremental md5, otherwise use the * static methods instead. */ SparkMD5 = function () { // call reset to init the instance this.reset(); }; // In some cases the fast add32 function cannot be used.. if (md5('hello') !== '5d41402abc4b2a76b9719d911017c592') { add32 = function (x, y) { var lsw = (x & 0xFFFF) + (y & 0xFFFF), msw = (x >> 16) + (y >> 16) + (lsw >> 16); return (msw << 16) | (lsw & 0xFFFF); }; } /** * Appends a string. * A conversion will be applied if an utf8 string is detected. * * @param {String} str The string to be appended * * @return {SparkMD5} The instance itself */ SparkMD5.prototype.append = function (str) { // converts the string to utf8 bytes if necessary if (/[\u0080-\uFFFF]/.test(str)) { str = unescape(encodeURIComponent(str)); } // then append as binary this.appendBinary(str); return this; }; /** * Appends a binary string. * * @param {String} contents The binary string to be appended * * @return {SparkMD5} The instance itself */ SparkMD5.prototype.appendBinary = function (contents) { this._buff += contents; this._length += contents.length; var length = this._buff.length, i; for (i = 64; i <= length; i += 64) { md5cycle(this._state, md5blk(this._buff.substring(i - 64, i))); } this._buff = this._buff.substr(i - 64); return this; }; /** * Finishes the incremental computation, reseting the internal state and * returning the result. * Use the raw parameter to obtain the raw result instead of the hex one. * * @param {Boolean} raw True to get the raw result, false to get the hex result * * @return {String|Array} The result */ SparkMD5.prototype.end = function (raw) { var buff = this._buff, length = buff.length, i, tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], ret; for (i = 0; i < length; i += 1) { tail[i >> 2] |= buff.charCodeAt(i) << ((i % 4) << 3); } this._finish(tail, length); ret = !!raw ? this._state : hex(this._state); this.reset(); return ret; }; /** * Finish the final calculation based on the tail. * * @param {Array} tail The tail (will be modified) * @param {Number} length The length of the remaining buffer */ SparkMD5.prototype._finish = function (tail, length) { var i = length, tmp, lo, hi; tail[i >> 2] |= 0x80 << ((i % 4) << 3); if (i > 55) { md5cycle(this._state, tail); for (i = 0; i < 16; i += 1) { tail[i] = 0; } } // Do the final computation based on the tail and length // Beware that the final length may not fit in 32 bits so we take care of that tmp = this._length * 8; tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/); lo = parseInt(tmp[2], 16); hi = parseInt(tmp[1], 16) || 0; tail[14] = lo; tail[15] = hi; md5cycle(this._state, tail); }; /** * Resets the internal state of the computation. * * @return {SparkMD5} The instance itself */ SparkMD5.prototype.reset = function () { this._buff = ""; this._length = 0; this._state = [1732584193, -271733879, -1732584194, 271733878]; return this; }; /** * Releases memory used by the incremental buffer and other aditional * resources. If you plan to use the instance again, use reset instead. */ SparkMD5.prototype.destroy = function () { delete this._state; delete this._buff; delete this._length; }; /** * Performs the md5 hash on a string. * A conversion will be applied if utf8 string is detected. * * @param {String} str The string * @param {Boolean} raw True to get the raw result, false to get the hex result * * @return {String|Array} The result */ SparkMD5.hash = function (str, raw) { // converts the string to utf8 bytes if necessary if (/[\u0080-\uFFFF]/.test(str)) { str = unescape(encodeURIComponent(str)); } var hash = md51(str); return !!raw ? hash : hex(hash); }; /** * Performs the md5 hash on a binary string. * * @param {String} content The binary string * @param {Boolean} raw True to get the raw result, false to get the hex result * * @return {String|Array} The result */ SparkMD5.hashBinary = function (content, raw) { var hash = md51(content); return !!raw ? hash : hex(hash); }; /** * SparkMD5 OOP implementation for array buffers. * * Use this class to perform an incremental md5 ONLY for array buffers. */ SparkMD5.ArrayBuffer = function () { // call reset to init the instance this.reset(); }; //////////////////////////////////////////////////////////////////////////// /** * Appends an array buffer. * * @param {ArrayBuffer} arr The array to be appended * * @return {SparkMD5.ArrayBuffer} The instance itself */ SparkMD5.ArrayBuffer.prototype.append = function (arr) { // TODO: we could avoid the concatenation here but the algorithm would be more complex // if you find yourself needing extra performance, please make a PR. var buff = this._concatArrayBuffer(this._buff, arr), length = buff.length, i; this._length += arr.byteLength; for (i = 64; i <= length; i += 64) { md5cycle(this._state, md5blk_array(buff.subarray(i - 64, i))); } // Avoids IE10 weirdness (documented above) this._buff = (i - 64) < length ? buff.subarray(i - 64) : new Uint8Array(0); return this; }; /** * Finishes the incremental computation, reseting the internal state and * returning the result. * Use the raw parameter to obtain the raw result instead of the hex one. * * @param {Boolean} raw True to get the raw result, false to get the hex result * * @return {String|Array} The result */ SparkMD5.ArrayBuffer.prototype.end = function (raw) { var buff = this._buff, length = buff.length, tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], i, ret; for (i = 0; i < length; i += 1) { tail[i >> 2] |= buff[i] << ((i % 4) << 3); } this._finish(tail, length); ret = !!raw ? this._state : hex(this._state); this.reset(); return ret; }; SparkMD5.ArrayBuffer.prototype._finish = SparkMD5.prototype._finish; /** * Resets the internal state of the computation. * * @return {SparkMD5.ArrayBuffer} The instance itself */ SparkMD5.ArrayBuffer.prototype.reset = function () { this._buff = new Uint8Array(0); this._length = 0; this._state = [1732584193, -271733879, -1732584194, 271733878]; return this; }; /** * Releases memory used by the incremental buffer and other aditional * resources. If you plan to use the instance again, use reset instead. */ SparkMD5.ArrayBuffer.prototype.destroy = SparkMD5.prototype.destroy; /** * Concats two array buffers, returning a new one. * * @param {ArrayBuffer} first The first array buffer * @param {ArrayBuffer} second The second array buffer * * @return {ArrayBuffer} The new array buffer */ SparkMD5.ArrayBuffer.prototype._concatArrayBuffer = function (first, second) { var firstLength = first.length, result = new Uint8Array(firstLength + second.byteLength); result.set(first); result.set(new Uint8Array(second), firstLength); return result; }; /** * Performs the md5 hash on an array buffer. * * @param {ArrayBuffer} arr The array buffer * @param {Boolean} raw True to get the raw result, false to get the hex result * * @return {String|Array} The result */ SparkMD5.ArrayBuffer.hash = function (arr, raw) { var hash = md51_array(new Uint8Array(arr)); return !!raw ? hash : hex(hash); }; return FlashRuntime.register( 'Md5', { init: function() { // do nothing. }, loadFromBlob: function( file ) { var blob = file.getSource(), chunkSize = 2 * 1024 * 1024, chunks = Math.ceil( blob.size / chunkSize ), chunk = 0, owner = this.owner, spark = new SparkMD5.ArrayBuffer(), me = this, blobSlice = blob.mozSlice || blob.webkitSlice || blob.slice, loadNext, fr; fr = new FileReader(); loadNext = function() { var start, end; start = chunk * chunkSize; end = Math.min( start + chunkSize, blob.size ); fr.onload = function( e ) { spark.append( e.target.result ); owner.trigger( 'progress', { total: file.size, loaded: end }); }; fr.onloadend = function() { fr.onloadend = fr.onload = null; if ( ++chunk < chunks ) { setTimeout( loadNext, 1 ); } else { setTimeout(function(){ owner.trigger('load'); me.result = spark.end(); loadNext = file = blob = spark = null; owner.trigger('complete'); }, 50 ); } }; fr.readAsArrayBuffer( blobSlice.call( blob, start, end ) ); }; loadNext(); }, getResult: function() { return this.result; } }); }); /** * @fileOverview FlashRuntime */ define('runtime/flash/runtime',[ 'base', 'runtime/runtime', 'runtime/compbase' ], function( Base, Runtime, CompBase ) { var $ = Base.$, type = 'flash', components = {}; function getFlashVersion() { var version; try { version = navigator.plugins[ 'Shockwave Flash' ]; version = version.description; } catch ( ex ) { try { version = new ActiveXObject('ShockwaveFlash.ShockwaveFlash') .GetVariable('$version'); } catch ( ex2 ) { version = '0.0'; } } version = version.match( /\d+/g ); return parseFloat( version[ 0 ] + '.' + version[ 1 ], 10 ); } function FlashRuntime() { var pool = {}, clients = {}, destroy = this.destroy, me = this, jsreciver = Base.guid('webuploader_'); Runtime.apply( me, arguments ); me.type = type; // 这个方法的调用者,实际上是RuntimeClient me.exec = function( comp, fn/*, args...*/ ) { var client = this, uid = client.uid, args = Base.slice( arguments, 2 ), instance; clients[ uid ] = client; if ( components[ comp ] ) { if ( !pool[ uid ] ) { pool[ uid ] = new components[ comp ]( client, me ); } instance = pool[ uid ]; if ( instance[ fn ] ) { return instance[ fn ].apply( instance, args ); } } return me.flashExec.apply( client, arguments ); }; function handler( evt, obj ) { var type = evt.type || evt, parts, uid; parts = type.split('::'); uid = parts[ 0 ]; type = parts[ 1 ]; // console.log.apply( console, arguments ); if ( type === 'Ready' && uid === me.uid ) { me.trigger('ready'); } else if ( clients[ uid ] ) { clients[ uid ].trigger( type.toLowerCase(), evt, obj ); } // Base.log( evt, obj ); } // flash的接受器。 window[ jsreciver ] = function() { var args = arguments; // 为了能捕获得到。 setTimeout(function() { handler.apply( null, args ); }, 1 ); }; this.jsreciver = jsreciver; this.destroy = function() { // @todo 删除池子中的所有实例 return destroy && destroy.apply( this, arguments ); }; this.flashExec = function( comp, fn ) { var flash = me.getFlash(), args = Base.slice( arguments, 2 ); return flash.exec( this.uid, comp, fn, args ); }; // @todo } Base.inherits( Runtime, { constructor: FlashRuntime, init: function() { var container = this.getContainer(), opts = this.options, html; // if not the minimal height, shims are not initialized // in older browsers (e.g FF3.6, IE6,7,8, Safari 4.0,5.0, etc) container.css({ position: 'absolute', top: '-8px', left: '-8px', width: '9px', height: '9px', overflow: 'hidden' }); // insert flash object html = '<object id="' + this.uid + '" type="application/' + 'x-shockwave-flash" data="' + opts.swf + '" '; if ( Base.browser.ie ) { html += 'classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" '; } html += 'width="100%" height="100%" style="outline:0">' + '<param name="movie" value="' + opts.swf + '" />' + '<param name="flashvars" value="uid=' + this.uid + '&jsreciver=' + this.jsreciver + '" />' + '<param name="wmode" value="transparent" />' + '<param name="allowscriptaccess" value="always" />' + '</object>'; container.html( html ); }, getFlash: function() { if ( this._flash ) { return this._flash; } this._flash = $( '#' + this.uid ).get( 0 ); return this._flash; } }); FlashRuntime.register = function( name, component ) { component = components[ name ] = Base.inherits( CompBase, $.extend({ // @todo fix this later flashExec: function() { var owner = this.owner, runtime = this.getRuntime(); return runtime.flashExec.apply( owner, arguments ); } }, component ) ); return component; }; if ( getFlashVersion() >= 11.4 ) { Runtime.addRuntime( type, FlashRuntime ); } return FlashRuntime; }); /** * @fileOverview FilePicker */ define('runtime/flash/filepicker',[ 'base', 'runtime/flash/runtime' ], function( Base, FlashRuntime ) { var $ = Base.$; return FlashRuntime.register( 'FilePicker', { init: function( opts ) { var copy = $.extend({}, opts ), len, i; // 修复Flash再没有设置title的情况下无法弹出flash文件选择框的bug. len = copy.accept && copy.accept.length; for ( i = 0; i < len; i++ ) { if ( !copy.accept[ i ].title ) { copy.accept[ i ].title = 'Files'; } } delete copy.button; delete copy.id; delete copy.container; this.flashExec( 'FilePicker', 'init', copy ); }, destroy: function() { this.flashExec( 'FilePicker', 'destroy' ); } }); }); /** * @fileOverview 图片压缩 */ define('runtime/flash/image',[ 'runtime/flash/runtime' ], function( FlashRuntime ) { return FlashRuntime.register( 'Image', { // init: function( options ) { // var owner = this.owner; // this.flashExec( 'Image', 'init', options ); // owner.on( 'load', function() { // debugger; // }); // }, loadFromBlob: function( blob ) { var owner = this.owner; owner.info() && this.flashExec( 'Image', 'info', owner.info() ); owner.meta() && this.flashExec( 'Image', 'meta', owner.meta() ); this.flashExec( 'Image', 'loadFromBlob', blob.uid ); } }); }); /** * @fileOverview Transport flash实现 */ define('runtime/flash/transport',[ 'base', 'runtime/flash/runtime', 'runtime/client' ], function( Base, FlashRuntime, RuntimeClient ) { var $ = Base.$; return FlashRuntime.register( 'Transport', { init: function() { this._status = 0; this._response = null; this._responseJson = null; }, send: function() { var owner = this.owner, opts = this.options, xhr = this._initAjax(), blob = owner._blob, server = opts.server, binary; xhr.connectRuntime( blob.ruid ); if ( opts.sendAsBinary ) { server += (/\?/.test( server ) ? '&' : '?') + $.param( owner._formData ); binary = blob.uid; } else { $.each( owner._formData, function( k, v ) { xhr.exec( 'append', k, v ); }); xhr.exec( 'appendBlob', opts.fileVal, blob.uid, opts.filename || owner._formData.name || '' ); } this._setRequestHeader( xhr, opts.headers ); xhr.exec( 'send', { method: opts.method, url: server, forceURLStream: opts.forceURLStream, mimeType: 'application/octet-stream' }, binary ); }, getStatus: function() { return this._status; }, getResponse: function() { return this._response || ''; }, getResponseAsJson: function() { return this._responseJson; }, abort: function() { var xhr = this._xhr; if ( xhr ) { xhr.exec('abort'); xhr.destroy(); this._xhr = xhr = null; } }, destroy: function() { this.abort(); }, _initAjax: function() { var me = this, xhr = new RuntimeClient('XMLHttpRequest'); xhr.on( 'uploadprogress progress', function( e ) { var percent = e.loaded / e.total; percent = Math.min( 1, Math.max( 0, percent ) ); return me.trigger( 'progress', percent ); }); xhr.on( 'load', function() { var status = xhr.exec('getStatus'), readBody = false, err = '', p; xhr.off(); me._xhr = null; if ( status >= 200 && status < 300 ) { readBody = true; } else if ( status >= 500 && status < 600 ) { readBody = true; err = 'server'; } else { err = 'http'; } if ( readBody ) { me._response = xhr.exec('getResponse'); me._response = decodeURIComponent( me._response ); // flash 处理可能存在 bug, 没辙只能靠 js 了 // try { // me._responseJson = xhr.exec('getResponseAsJson'); // } catch ( error ) { p = window.JSON && window.JSON.parse || function( s ) { try { return new Function('return ' + s).call(); } catch ( err ) { return {}; } }; me._responseJson = me._response ? p(me._response) : {}; // } } xhr.destroy(); xhr = null; return err ? me.trigger( 'error', err ) : me.trigger('load'); }); xhr.on( 'error', function() { xhr.off(); me._xhr = null; me.trigger( 'error', 'http' ); }); me._xhr = xhr; return xhr; }, _setRequestHeader: function( xhr, headers ) { $.each( headers, function( key, val ) { xhr.exec( 'setRequestHeader', key, val ); }); } }); }); /** * @fileOverview Blob Html实现 */ define('runtime/flash/blob',[ 'runtime/flash/runtime', 'lib/blob' ], function( FlashRuntime, Blob ) { return FlashRuntime.register( 'Blob', { slice: function( start, end ) { var blob = this.flashExec( 'Blob', 'slice', start, end ); return new Blob( blob.uid, blob ); } }); }); /** * @fileOverview Md5 flash实现 */ define('runtime/flash/md5',[ 'runtime/flash/runtime' ], function( FlashRuntime ) { return FlashRuntime.register( 'Md5', { init: function() { // do nothing. }, loadFromBlob: function( blob ) { return this.flashExec( 'Md5', 'loadFromBlob', blob.uid ); } }); }); /** * @fileOverview 完全版本。 */ define('preset/all',[ 'base', // widgets 'widgets/filednd', 'widgets/filepaste', 'widgets/filepicker', 'widgets/image', 'widgets/queue', 'widgets/runtime', 'widgets/upload', 'widgets/validator', 'widgets/md5', // runtimes // html5 'runtime/html5/blob', 'runtime/html5/dnd', 'runtime/html5/filepaste', 'runtime/html5/filepicker', 'runtime/html5/imagemeta/exif', 'runtime/html5/androidpatch', 'runtime/html5/image', 'runtime/html5/transport', 'runtime/html5/md5', // flash 'runtime/flash/filepicker', 'runtime/flash/image', 'runtime/flash/transport', 'runtime/flash/blob', 'runtime/flash/md5' ], function( Base ) { return Base; }); define('webuploader',[ 'preset/all' ], function( preset ) { return preset; }); return require('webuploader'); }); ================================================ FILE: public/vendor/dcat-admin/dcat/plugins/webuploader/webuploader.withoutimage.js ================================================ /*! WebUploader 0.1.5 */ /** * @fileOverview 让内部各个部件的代码可以用[amd](https://github.com/amdjs/amdjs-api/wiki/AMD)模块定义方式组织起来。 * * AMD API 内部的简单不完全实现,请忽略。只有当WebUploader被合并成一个文件的时候才会引入。 */ (function( root, factory ) { var modules = {}, // 内部require, 简单不完全实现。 // https://github.com/amdjs/amdjs-api/wiki/require _require = function( deps, callback ) { var args, len, i; // 如果deps不是数组,则直接返回指定module if ( typeof deps === 'string' ) { return getModule( deps ); } else { args = []; for( len = deps.length, i = 0; i < len; i++ ) { args.push( getModule( deps[ i ] ) ); } return callback.apply( null, args ); } }, // 内部define,暂时不支持不指定id. _define = function( id, deps, factory ) { if ( arguments.length === 2 ) { factory = deps; deps = null; } _require( deps || [], function() { setModule( id, factory, arguments ); }); }, // 设置module, 兼容CommonJs写法。 setModule = function( id, factory, args ) { var module = { exports: factory }, returned; if ( typeof factory === 'function' ) { args.length || (args = [ _require, module.exports, module ]); returned = factory.apply( null, args ); returned !== undefined && (module.exports = returned); } modules[ id ] = module.exports; }, // 根据id获取module getModule = function( id ) { var module = modules[ id ] || root[ id ]; if ( !module ) { throw new Error( '`' + id + '` is undefined' ); } return module; }, // 将所有modules,将路径ids装换成对象。 exportsTo = function( obj ) { var key, host, parts, part, last, ucFirst; // make the first character upper case. ucFirst = function( str ) { return str && (str.charAt( 0 ).toUpperCase() + str.substr( 1 )); }; for ( key in modules ) { host = obj; if ( !modules.hasOwnProperty( key ) ) { continue; } parts = key.split('/'); last = ucFirst( parts.pop() ); while( (part = ucFirst( parts.shift() )) ) { host[ part ] = host[ part ] || {}; host = host[ part ]; } host[ last ] = modules[ key ]; } return obj; }, makeExport = function( dollar ) { root.__dollar = dollar; // exports every module. return exportsTo( factory( root, _define, _require ) ); }, origin; if ( typeof module === 'object' && typeof module.exports === 'object' ) { // For CommonJS and CommonJS-like environments where a proper window is present, module.exports = makeExport(); } else if ( typeof define === 'function' && define.amd ) { // Allow using this built library as an AMD module // in another project. That other project will only // see this AMD call, not the internal modules in // the closure below. define([ 'jquery' ], makeExport ); } else { // Browser globals case. Just assign the // result to a property on the global. origin = root.WebUploader; root.WebUploader = makeExport(); root.WebUploader.noConflict = function() { root.WebUploader = origin; }; } })( window, function( window, define, require ) { /** * @fileOverview jQuery or Zepto */ define('dollar-third',[],function() { var $ = window.__dollar || window.jQuery || window.Zepto; if ( !$ ) { throw new Error('jQuery or Zepto not found!'); } return $; }); /** * @fileOverview Dom 操作相关 */ define('dollar',[ 'dollar-third' ], function( _ ) { return _; }); /** * @fileOverview 使用jQuery的Promise */ define('promise-third',[ 'dollar' ], function( $ ) { return { Deferred: $.Deferred, when: $.when, isPromise: function( anything ) { return anything && typeof anything.then === 'function'; } }; }); /** * @fileOverview Promise/A+ */ define('promise',[ 'promise-third' ], function( _ ) { return _; }); /** * @fileOverview 基础类方法。 */ /** * Web Uploader内部类的详细说明,以下提及的功能类,都可以在`WebUploader`这个变量中访问到。 * * As you know, Web Uploader的每个文件都是用过[AMD](https://github.com/amdjs/amdjs-api/wiki/AMD)规范中的`define`组织起来的, 每个Module都会有个module id. * 默认module id为该文件的路径,而此路径将会转化成名字空间存放在WebUploader中。如: * * * module `base`:WebUploader.Base * * module `file`: WebUploader.File * * module `lib/dnd`: WebUploader.Lib.Dnd * * module `runtime/html5/dnd`: WebUploader.Runtime.Html5.Dnd * * * 以下文档中对类的使用可能省略掉了`WebUploader`前缀。 * @module WebUploader * @title WebUploader API文档 */ define('base',[ 'dollar', 'promise' ], function( $, promise ) { var noop = function() {}, call = Function.call; // http://jsperf.com/uncurrythis // 反科里化 function uncurryThis( fn ) { return function() { return call.apply( fn, arguments ); }; } function bindFn( fn, context ) { return function() { return fn.apply( context, arguments ); }; } function createObject( proto ) { var f; if ( Object.create ) { return Object.create( proto ); } else { f = function() {}; f.prototype = proto; return new f(); } } /** * 基础类,提供一些简单常用的方法。 * @class Base */ return { /** * @property {String} version 当前版本号。 */ version: '0.1.5', /** * @property {jQuery|Zepto} $ 引用依赖的jQuery或者Zepto对象。 */ $: $, Deferred: promise.Deferred, isPromise: promise.isPromise, when: promise.when, /** * @description 简单的浏览器检查结果。 * * * `webkit` webkit版本号,如果浏览器为非webkit内核,此属性为`undefined`。 * * `chrome` chrome浏览器版本号,如果浏览器为chrome,此属性为`undefined`。 * * `ie` ie浏览器版本号,如果浏览器为非ie,此属性为`undefined`。**暂不支持ie10+** * * `firefox` firefox浏览器版本号,如果浏览器为非firefox,此属性为`undefined`。 * * `safari` safari浏览器版本号,如果浏览器为非safari,此属性为`undefined`。 * * `opera` opera浏览器版本号,如果浏览器为非opera,此属性为`undefined`。 * * @property {Object} [browser] */ browser: (function( ua ) { var ret = {}, webkit = ua.match( /WebKit\/([\d.]+)/ ), chrome = ua.match( /Chrome\/([\d.]+)/ ) || ua.match( /CriOS\/([\d.]+)/ ), ie = ua.match( /MSIE\s([\d\.]+)/ ) || ua.match( /(?:trident)(?:.*rv:([\w.]+))?/i ), firefox = ua.match( /Firefox\/([\d.]+)/ ), safari = ua.match( /Safari\/([\d.]+)/ ), opera = ua.match( /OPR\/([\d.]+)/ ); webkit && (ret.webkit = parseFloat( webkit[ 1 ] )); chrome && (ret.chrome = parseFloat( chrome[ 1 ] )); ie && (ret.ie = parseFloat( ie[ 1 ] )); firefox && (ret.firefox = parseFloat( firefox[ 1 ] )); safari && (ret.safari = parseFloat( safari[ 1 ] )); opera && (ret.opera = parseFloat( opera[ 1 ] )); return ret; })( navigator.userAgent ), /** * @description 操作系统检查结果。 * * * `android` 如果在android浏览器环境下,此值为对应的android版本号,否则为`undefined`。 * * `ios` 如果在ios浏览器环境下,此值为对应的ios版本号,否则为`undefined`。 * @property {Object} [os] */ os: (function( ua ) { var ret = {}, // osx = !!ua.match( /\(Macintosh\; Intel / ), android = ua.match( /(?:Android);?[\s\/]+([\d.]+)?/ ), ios = ua.match( /(?:iPad|iPod|iPhone).*OS\s([\d_]+)/ ); // osx && (ret.osx = true); android && (ret.android = parseFloat( android[ 1 ] )); ios && (ret.ios = parseFloat( ios[ 1 ].replace( /_/g, '.' ) )); return ret; })( navigator.userAgent ), /** * 实现类与类之间的继承。 * @method inherits * @grammar Base.inherits( super ) => child * @grammar Base.inherits( super, protos ) => child * @grammar Base.inherits( super, protos, statics ) => child * @param {Class} super 父类 * @param {Object | Function} [protos] 子类或者对象。如果对象中包含constructor,子类将是用此属性值。 * @param {Function} [protos.constructor] 子类构造器,不指定的话将创建个临时的直接执行父类构造器的方法。 * @param {Object} [statics] 静态属性或方法。 * @return {Class} 返回子类。 * @example * function Person() { * console.log( 'Super' ); * } * Person.prototype.hello = function() { * console.log( 'hello' ); * }; * * var Manager = Base.inherits( Person, { * world: function() { * console.log( 'World' ); * } * }); * * // 因为没有指定构造器,父类的构造器将会执行。 * var instance = new Manager(); // => Super * * // 继承子父类的方法 * instance.hello(); // => hello * instance.world(); // => World * * // 子类的__super__属性指向父类 * console.log( Manager.__super__ === Person ); // => true */ inherits: function( Super, protos, staticProtos ) { var child; if ( typeof protos === 'function' ) { child = protos; protos = null; } else if ( protos && protos.hasOwnProperty('constructor') ) { child = protos.constructor; } else { child = function() { return Super.apply( this, arguments ); }; } // 复制静态方法 $.extend( true, child, Super, staticProtos || {} ); /* jshint camelcase: false */ // 让子类的__super__属性指向父类。 child.__super__ = Super.prototype; // 构建原型,添加原型方法或属性。 // 暂时用Object.create实现。 child.prototype = createObject( Super.prototype ); protos && $.extend( true, child.prototype, protos ); return child; }, /** * 一个不做任何事情的方法。可以用来赋值给默认的callback. * @method noop */ noop: noop, /** * 返回一个新的方法,此方法将已指定的`context`来执行。 * @grammar Base.bindFn( fn, context ) => Function * @method bindFn * @example * var doSomething = function() { * console.log( this.name ); * }, * obj = { * name: 'Object Name' * }, * aliasFn = Base.bind( doSomething, obj ); * * aliasFn(); // => Object Name * */ bindFn: bindFn, /** * 引用Console.log如果存在的话,否则引用一个[空函数noop](#WebUploader:Base.noop)。 * @grammar Base.log( args... ) => undefined * @method log */ log: (function() { if ( window.console ) { return bindFn( console.log, console ); } return noop; })(), nextTick: (function() { return function( cb ) { setTimeout( cb, 1 ); }; // @bug 当浏览器不在当前窗口时就停了。 // var next = window.requestAnimationFrame || // window.webkitRequestAnimationFrame || // window.mozRequestAnimationFrame || // function( cb ) { // window.setTimeout( cb, 1000 / 60 ); // }; // // fix: Uncaught TypeError: Illegal invocation // return bindFn( next, window ); })(), /** * 被[uncurrythis](http://www.2ality.com/2011/11/uncurrying-this.html)的数组slice方法。 * 将用来将非数组对象转化成数组对象。 * @grammar Base.slice( target, start[, end] ) => Array * @method slice * @example * function doSomthing() { * var args = Base.slice( arguments, 1 ); * console.log( args ); * } * * doSomthing( 'ignored', 'arg2', 'arg3' ); // => Array ["arg2", "arg3"] */ slice: uncurryThis( [].slice ), /** * 生成唯一的ID * @method guid * @grammar Base.guid() => String * @grammar Base.guid( prefx ) => String */ guid: (function() { var counter = 0; return function( prefix ) { var guid = (+new Date()).toString( 32 ), i = 0; for ( ; i < 5; i++ ) { guid += Math.floor( Math.random() * 65535 ).toString( 32 ); } return (prefix || 'wu_') + guid + (counter++).toString( 32 ); }; })(), /** * 格式化文件大小, 输出成带单位的字符串 * @method formatSize * @grammar Base.formatSize( size ) => String * @grammar Base.formatSize( size, pointLength ) => String * @grammar Base.formatSize( size, pointLength, units ) => String * @param {Number} size 文件大小 * @param {Number} [pointLength=2] 精确到的小数点数。 * @param {Array} [units=[ 'B', 'K', 'M', 'G', 'TB' ]] 单位数组。从字节,到千字节,一直往上指定。如果单位数组里面只指定了到了K(千字节),同时文件大小大于M, 此方法的输出将还是显示成多少K. * @example * console.log( Base.formatSize( 100 ) ); // => 100B * console.log( Base.formatSize( 1024 ) ); // => 1.00K * console.log( Base.formatSize( 1024, 0 ) ); // => 1K * console.log( Base.formatSize( 1024 * 1024 ) ); // => 1.00M * console.log( Base.formatSize( 1024 * 1024 * 1024 ) ); // => 1.00G * console.log( Base.formatSize( 1024 * 1024 * 1024, 0, ['B', 'KB', 'MB'] ) ); // => 1024MB */ formatSize: function( size, pointLength, units ) { var unit; units = units || [ 'B', 'K', 'M', 'G', 'TB' ]; while ( (unit = units.shift()) && size > 1024 ) { size = size / 1024; } return (unit === 'B' ? size : size.toFixed( pointLength || 2 )) + unit; } }; }); /** * 事件处理类,可以独立使用,也可以扩展给对象使用。 * @fileOverview Mediator */ define('mediator',[ 'base' ], function( Base ) { var $ = Base.$, slice = [].slice, separator = /\s+/, protos; // 根据条件过滤出事件handlers. function findHandlers( arr, name, callback, context ) { return $.grep( arr, function( handler ) { return handler && (!name || handler.e === name) && (!callback || handler.cb === callback || handler.cb._cb === callback) && (!context || handler.ctx === context); }); } function eachEvent( events, callback, iterator ) { // 不支持对象,只支持多个event用空格隔开 $.each( (events || '').split( separator ), function( _, key ) { iterator( key, callback ); }); } function triggerHanders( events, args ) { var stoped = false, i = -1, len = events.length, handler; while ( ++i < len ) { handler = events[ i ]; if ( handler.cb.apply( handler.ctx2, args ) === false ) { stoped = true; break; } } return !stoped; } protos = { /** * 绑定事件。 * * `callback`方法在执行时,arguments将会来源于trigger的时候携带的参数。如 * ```javascript * var obj = {}; * * // 使得obj有事件行为 * Mediator.installTo( obj ); * * obj.on( 'testa', function( arg1, arg2 ) { * console.log( arg1, arg2 ); // => 'arg1', 'arg2' * }); * * obj.trigger( 'testa', 'arg1', 'arg2' ); * ``` * * 如果`callback`中,某一个方法`return false`了,则后续的其他`callback`都不会被执行到。 * 切会影响到`trigger`方法的返回值,为`false`。 * * `on`还可以用来添加一个特殊事件`all`, 这样所有的事件触发都会响应到。同时此类`callback`中的arguments有一个不同处, * 就是第一个参数为`type`,记录当前是什么事件在触发。此类`callback`的优先级比脚低,会再正常`callback`执行完后触发。 * ```javascript * obj.on( 'all', function( type, arg1, arg2 ) { * console.log( type, arg1, arg2 ); // => 'testa', 'arg1', 'arg2' * }); * ``` * * @method on * @grammar on( name, callback[, context] ) => self * @param {String} name 事件名,支持多个事件用空格隔开 * @param {Function} callback 事件处理器 * @param {Object} [context] 事件处理器的上下文。 * @return {self} 返回自身,方便链式 * @chainable * @class Mediator */ on: function( name, callback, context ) { var me = this, set; if ( !callback ) { return this; } set = this._events || (this._events = []); eachEvent( name, callback, function( name, callback ) { var handler = { e: name }; handler.cb = callback; handler.ctx = context; handler.ctx2 = context || me; handler.id = set.length; set.push( handler ); }); return this; }, /** * 绑定事件,且当handler执行完后,自动解除绑定。 * @method once * @grammar once( name, callback[, context] ) => self * @param {String} name 事件名 * @param {Function} callback 事件处理器 * @param {Object} [context] 事件处理器的上下文。 * @return {self} 返回自身,方便链式 * @chainable */ once: function( name, callback, context ) { var me = this; if ( !callback ) { return me; } eachEvent( name, callback, function( name, callback ) { var once = function() { me.off( name, once ); return callback.apply( context || me, arguments ); }; once._cb = callback; me.on( name, once, context ); }); return me; }, /** * 解除事件绑定 * @method off * @grammar off( [name[, callback[, context] ] ] ) => self * @param {String} [name] 事件名 * @param {Function} [callback] 事件处理器 * @param {Object} [context] 事件处理器的上下文。 * @return {self} 返回自身,方便链式 * @chainable */ off: function( name, cb, ctx ) { var events = this._events; if ( !events ) { return this; } if ( !name && !cb && !ctx ) { this._events = []; return this; } eachEvent( name, cb, function( name, cb ) { $.each( findHandlers( events, name, cb, ctx ), function() { delete events[ this.id ]; }); }); return this; }, /** * 触发事件 * @method trigger * @grammar trigger( name[, args...] ) => self * @param {String} type 事件名 * @param {*} [...] 任意参数 * @return {Boolean} 如果handler中return false了,则返回false, 否则返回true */ trigger: function( type ) { var args, events, allEvents; if ( !this._events || !type ) { return this; } args = slice.call( arguments, 1 ); events = findHandlers( this._events, type ); allEvents = findHandlers( this._events, 'all' ); return triggerHanders( events, args ) && triggerHanders( allEvents, arguments ); } }; /** * 中介者,它本身是个单例,但可以通过[installTo](#WebUploader:Mediator:installTo)方法,使任何对象具备事件行为。 * 主要目的是负责模块与模块之间的合作,降低耦合度。 * * @class Mediator */ return $.extend({ /** * 可以通过这个接口,使任何对象具备事件功能。 * @method installTo * @param {Object} obj 需要具备事件行为的对象。 * @return {Object} 返回obj. */ installTo: function( obj ) { return $.extend( obj, protos ); } }, protos ); }); /** * @fileOverview Uploader上传类 */ define('uploader',[ 'base', 'mediator' ], function( Base, Mediator ) { var $ = Base.$; /** * 上传入口类。 * @class Uploader * @constructor * @grammar new Uploader( opts ) => Uploader * @example * var uploader = WebUploader.Uploader({ * swf: 'path_of_swf/Uploader.swf', * * // 开起分片上传。 * chunked: true * }); */ function Uploader( opts ) { this.options = $.extend( true, {}, Uploader.options, opts ); this._init( this.options ); } // default Options // widgets中有相应扩展 Uploader.options = {}; Mediator.installTo( Uploader.prototype ); // 批量添加纯命令式方法。 $.each({ upload: 'start-upload', stop: 'stop-upload', getFile: 'get-file', getFiles: 'get-files', addFile: 'add-file', addFiles: 'add-file', sort: 'sort-files', removeFile: 'remove-file', cancelFile: 'cancel-file', skipFile: 'skip-file', retry: 'retry', isInProgress: 'is-in-progress', makeThumb: 'make-thumb', md5File: 'md5-file', getDimension: 'get-dimension', addButton: 'add-btn', predictRuntimeType: 'predict-runtime-type', refresh: 'refresh', disable: 'disable', enable: 'enable', reset: 'reset' }, function( fn, command ) { Uploader.prototype[ fn ] = function() { return this.request( command, arguments ); }; }); $.extend( Uploader.prototype, { state: 'pending', _init: function( opts ) { var me = this; me.request( 'init', opts, function() { me.state = 'ready'; me.trigger('ready'); }); }, /** * 获取或者设置Uploader配置项。 * @method option * @grammar option( key ) => * * @grammar option( key, val ) => self * @example * * // 初始状态图片上传前不会压缩 * var uploader = new WebUploader.Uploader({ * compress: null; * }); * * // 修改后图片上传前,尝试将图片压缩到1600 * 1600 * uploader.option( 'compress', { * width: 1600, * height: 1600 * }); */ option: function( key, val ) { var opts = this.options; // setter if ( arguments.length > 1 ) { if ( $.isPlainObject( val ) && $.isPlainObject( opts[ key ] ) ) { $.extend( opts[ key ], val ); } else { opts[ key ] = val; } } else { // getter return key ? opts[ key ] : opts; } }, /** * 获取文件统计信息。返回一个包含一下信息的对象。 * * `successNum` 上传成功的文件数 * * `progressNum` 上传中的文件数 * * `cancelNum` 被删除的文件数 * * `invalidNum` 无效的文件数 * * `uploadFailNum` 上传失败的文件数 * * `queueNum` 还在队列中的文件数 * * `interruptNum` 被暂停的文件数 * @method getStats * @grammar getStats() => Object */ getStats: function() { // return this._mgr.getStats.apply( this._mgr, arguments ); var stats = this.request('get-stats'); return stats ? { successNum: stats.numOfSuccess, progressNum: stats.numOfProgress, // who care? // queueFailNum: 0, cancelNum: stats.numOfCancel, invalidNum: stats.numOfInvalid, uploadFailNum: stats.numOfUploadFailed, queueNum: stats.numOfQueue, interruptNum: stats.numofInterrupt } : {}; }, // 需要重写此方法来来支持opts.onEvent和instance.onEvent的处理器 trigger: function( type/*, args...*/ ) { var args = [].slice.call( arguments, 1 ), opts = this.options, name = 'on' + type.substring( 0, 1 ).toUpperCase() + type.substring( 1 ); if ( // 调用通过on方法注册的handler. Mediator.trigger.apply( this, arguments ) === false || // 调用opts.onEvent $.isFunction( opts[ name ] ) && opts[ name ].apply( this, args ) === false || // 调用this.onEvent $.isFunction( this[ name ] ) && this[ name ].apply( this, args ) === false || // 广播所有uploader的事件。 Mediator.trigger.apply( Mediator, [ this, type ].concat( args ) ) === false ) { return false; } return true; }, /** * 销毁 webuploader 实例 * @method destroy * @grammar destroy() => undefined */ destroy: function() { this.request( 'destroy', arguments ); this.off(); }, // widgets/widget.js将补充此方法的详细文档。 request: Base.noop }); /** * 创建Uploader实例,等同于new Uploader( opts ); * @method create * @class Base * @static * @grammar Base.create( opts ) => Uploader */ Base.create = Uploader.create = function( opts ) { return new Uploader( opts ); }; // 暴露Uploader,可以通过它来扩展业务逻辑。 Base.Uploader = Uploader; return Uploader; }); /** * @fileOverview Runtime管理器,负责Runtime的选择, 连接 */ define('runtime/runtime',[ 'base', 'mediator' ], function( Base, Mediator ) { var $ = Base.$, factories = {}, // 获取对象的第一个key getFirstKey = function( obj ) { for ( var key in obj ) { if ( obj.hasOwnProperty( key ) ) { return key; } } return null; }; // 接口类。 function Runtime( options ) { this.options = $.extend({ container: document.body }, options ); this.uid = Base.guid('rt_'); } $.extend( Runtime.prototype, { getContainer: function() { var opts = this.options, parent, container; if ( this._container ) { return this._container; } parent = $( opts.container || document.body ); container = $( document.createElement('div') ); container.attr( 'id', 'rt_' + this.uid ); container.css({ position: 'absolute', top: '0px', left: '0px', width: '1px', height: '1px', overflow: 'hidden' }); parent.append( container ); parent.addClass('webuploader-container'); this._container = container; this._parent = parent; return container; }, init: Base.noop, exec: Base.noop, destroy: function() { this._container && this._container.remove(); this._parent && this._parent.removeClass('webuploader-container'); this.off(); } }); Runtime.orders = 'html5,flash'; /** * 添加Runtime实现。 * @param {String} type 类型 * @param {Runtime} factory 具体Runtime实现。 */ Runtime.addRuntime = function( type, factory ) { factories[ type ] = factory; }; Runtime.hasRuntime = function( type ) { return !!(type ? factories[ type ] : getFirstKey( factories )); }; Runtime.create = function( opts, orders ) { var type, runtime; orders = orders || Runtime.orders; $.each( orders.split( /\s*,\s*/g ), function() { if ( factories[ this ] ) { type = this; return false; } }); type = type || getFirstKey( factories ); if ( !type ) { throw new Error('Runtime Error'); } runtime = new factories[ type ]( opts ); return runtime; }; Mediator.installTo( Runtime.prototype ); return Runtime; }); /** * @fileOverview Runtime管理器,负责Runtime的选择, 连接 */ define('runtime/client',[ 'base', 'mediator', 'runtime/runtime' ], function( Base, Mediator, Runtime ) { var cache; cache = (function() { var obj = {}; return { add: function( runtime ) { obj[ runtime.uid ] = runtime; }, get: function( ruid, standalone ) { var i; if ( ruid ) { return obj[ ruid ]; } for ( i in obj ) { // 有些类型不能重用,比如filepicker. if ( standalone && obj[ i ].__standalone ) { continue; } return obj[ i ]; } return null; }, remove: function( runtime ) { delete obj[ runtime.uid ]; } }; })(); function RuntimeClient( component, standalone ) { var deferred = Base.Deferred(), runtime; this.uid = Base.guid('client_'); // 允许runtime没有初始化之前,注册一些方法在初始化后执行。 this.runtimeReady = function( cb ) { return deferred.done( cb ); }; this.connectRuntime = function( opts, cb ) { // already connected. if ( runtime ) { throw new Error('already connected!'); } deferred.done( cb ); if ( typeof opts === 'string' && cache.get( opts ) ) { runtime = cache.get( opts ); } // 像filePicker只能独立存在,不能公用。 runtime = runtime || cache.get( null, standalone ); // 需要创建 if ( !runtime ) { runtime = Runtime.create( opts, opts.runtimeOrder ); runtime.__promise = deferred.promise(); runtime.once( 'ready', deferred.resolve ); runtime.init(); cache.add( runtime ); runtime.__client = 1; } else { // 来自cache Base.$.extend( runtime.options, opts ); runtime.__promise.then( deferred.resolve ); runtime.__client++; } standalone && (runtime.__standalone = standalone); return runtime; }; this.getRuntime = function() { return runtime; }; this.disconnectRuntime = function() { if ( !runtime ) { return; } runtime.__client--; if ( runtime.__client <= 0 ) { cache.remove( runtime ); delete runtime.__promise; runtime.destroy(); } runtime = null; }; this.exec = function() { if ( !runtime ) { return; } var args = Base.slice( arguments ); component && args.unshift( component ); return runtime.exec.apply( this, args ); }; this.getRuid = function() { return runtime && runtime.uid; }; this.destroy = (function( destroy ) { return function() { destroy && destroy.apply( this, arguments ); this.trigger('destroy'); this.off(); this.exec('destroy'); this.disconnectRuntime(); }; })( this.destroy ); } Mediator.installTo( RuntimeClient.prototype ); return RuntimeClient; }); /** * @fileOverview 错误信息 */ define('lib/dnd',[ 'base', 'mediator', 'runtime/client' ], function( Base, Mediator, RuntimeClent ) { var $ = Base.$; function DragAndDrop( opts ) { opts = this.options = $.extend({}, DragAndDrop.options, opts ); opts.container = $( opts.container ); if ( !opts.container.length ) { return; } RuntimeClent.call( this, 'DragAndDrop' ); } DragAndDrop.options = { accept: null, disableGlobalDnd: false }; Base.inherits( RuntimeClent, { constructor: DragAndDrop, init: function() { var me = this; me.connectRuntime( me.options, function() { me.exec('init'); me.trigger('ready'); }); } }); Mediator.installTo( DragAndDrop.prototype ); return DragAndDrop; }); /** * @fileOverview 组件基类。 */ define('widgets/widget',[ 'base', 'uploader' ], function( Base, Uploader ) { var $ = Base.$, _init = Uploader.prototype._init, _destroy = Uploader.prototype.destroy, IGNORE = {}, widgetClass = []; function isArrayLike( obj ) { if ( !obj ) { return false; } var length = obj.length, type = $.type( obj ); if ( obj.nodeType === 1 && length ) { return true; } return type === 'array' || type !== 'function' && type !== 'string' && (length === 0 || typeof length === 'number' && length > 0 && (length - 1) in obj); } function Widget( uploader ) { this.owner = uploader; this.options = uploader.options; } $.extend( Widget.prototype, { init: Base.noop, // 类Backbone的事件监听声明,监听uploader实例上的事件 // widget直接无法监听事件,事件只能通过uploader来传递 invoke: function( apiName, args ) { /* { 'make-thumb': 'makeThumb' } */ var map = this.responseMap; // 如果无API响应声明则忽略 if ( !map || !(apiName in map) || !(map[ apiName ] in this) || !$.isFunction( this[ map[ apiName ] ] ) ) { return IGNORE; } return this[ map[ apiName ] ].apply( this, args ); }, /** * 发送命令。当传入`callback`或者`handler`中返回`promise`时。返回一个当所有`handler`中的promise都完成后完成的新`promise`。 * @method request * @grammar request( command, args ) => * | Promise * @grammar request( command, args, callback ) => Promise * @for Uploader */ request: function() { return this.owner.request.apply( this.owner, arguments ); } }); // 扩展Uploader. $.extend( Uploader.prototype, { /** * @property {String | Array} [disableWidgets=undefined] * @namespace options * @for Uploader * @description 默认所有 Uploader.register 了的 widget 都会被加载,如果禁用某一部分,请通过此 option 指定黑名单。 */ // 覆写_init用来初始化widgets _init: function() { var me = this, widgets = me._widgets = [], deactives = me.options.disableWidgets || ''; $.each( widgetClass, function( _, klass ) { (!deactives || !~deactives.indexOf( klass._name )) && widgets.push( new klass( me ) ); }); return _init.apply( me, arguments ); }, request: function( apiName, args, callback ) { var i = 0, widgets = this._widgets, len = widgets && widgets.length, rlts = [], dfds = [], widget, rlt, promise, key; args = isArrayLike( args ) ? args : [ args ]; for ( ; i < len; i++ ) { widget = widgets[ i ]; rlt = widget.invoke( apiName, args ); if ( rlt !== IGNORE ) { // Deferred对象 if ( Base.isPromise( rlt ) ) { dfds.push( rlt ); } else { rlts.push( rlt ); } } } // 如果有callback,则用异步方式。 if ( callback || dfds.length ) { promise = Base.when.apply( Base, dfds ); key = promise.pipe ? 'pipe' : 'then'; // 很重要不能删除。删除了会死循环。 // 保证执行顺序。让callback总是在下一个 tick 中执行。 return promise[ key ](function() { var deferred = Base.Deferred(), args = arguments; if ( args.length === 1 ) { args = args[ 0 ]; } setTimeout(function() { deferred.resolve( args ); }, 1 ); return deferred.promise(); })[ callback ? key : 'done' ]( callback || Base.noop ); } else { return rlts[ 0 ]; } }, destroy: function() { _destroy.apply( this, arguments ); this._widgets = null; } }); /** * 添加组件 * @grammar Uploader.register(proto); * @grammar Uploader.register(map, proto); * @param {object} responseMap API 名称与函数实现的映射 * @param {object} proto 组件原型,构造函数通过 constructor 属性定义 * @method Uploader.register * @for Uploader * @example * Uploader.register({ * 'make-thumb': 'makeThumb' * }, { * init: function( options ) {}, * makeThumb: function() {} * }); * * Uploader.register({ * 'make-thumb': function() { * * } * }); */ Uploader.register = Widget.register = function( responseMap, widgetProto ) { var map = { init: 'init', destroy: 'destroy', name: 'anonymous' }, klass; if ( arguments.length === 1 ) { widgetProto = responseMap; // 自动生成 map 表。 $.each(widgetProto, function(key) { if ( key[0] === '_' || key === 'name' ) { key === 'name' && (map.name = widgetProto.name); return; } map[key.replace(/[A-Z]/g, '-$&').toLowerCase()] = key; }); } else { map = $.extend( map, responseMap ); } widgetProto.responseMap = map; klass = Base.inherits( Widget, widgetProto ); klass._name = map.name; widgetClass.push( klass ); return klass; }; /** * 删除插件,只有在注册时指定了名字的才能被删除。 * @grammar Uploader.unRegister(name); * @param {string} name 组件名字 * @method Uploader.unRegister * @for Uploader * @example * * Uploader.register({ * name: 'custom', * * 'make-thumb': function() { * * } * }); * * Uploader.unRegister('custom'); */ Uploader.unRegister = Widget.unRegister = function( name ) { if ( !name || name === 'anonymous' ) { return; } // 删除指定的插件。 for ( var i = widgetClass.length; i--; ) { if ( widgetClass[i]._name === name ) { widgetClass.splice(i, 1) } } }; return Widget; }); /** * @fileOverview DragAndDrop Widget。 */ define('widgets/filednd',[ 'base', 'uploader', 'lib/dnd', 'widgets/widget' ], function( Base, Uploader, Dnd ) { var $ = Base.$; Uploader.options.dnd = ''; /** * @property {Selector} [dnd=undefined] 指定Drag And Drop拖拽的容器,如果不指定,则不启动。 * @namespace options * @for Uploader */ /** * @property {Selector} [disableGlobalDnd=false] 是否禁掉整个页面的拖拽功能,如果不禁用,图片拖进来的时候会默认被浏览器打开。 * @namespace options * @for Uploader */ /** * @event dndAccept * @param {DataTransferItemList} items DataTransferItem * @description 阻止此事件可以拒绝某些类型的文件拖入进来。目前只有 chrome 提供这样的 API,且只能通过 mime-type 验证。 * @for Uploader */ return Uploader.register({ name: 'dnd', init: function( opts ) { if ( !opts.dnd || this.request('predict-runtime-type') !== 'html5' ) { return; } var me = this, deferred = Base.Deferred(), options = $.extend({}, { disableGlobalDnd: opts.disableGlobalDnd, container: opts.dnd, accept: opts.accept }), dnd; this.dnd = dnd = new Dnd( options ); dnd.once( 'ready', deferred.resolve ); dnd.on( 'drop', function( files ) { me.request( 'add-file', [ files ]); }); // 检测文件是否全部允许添加。 dnd.on( 'accept', function( items ) { return me.owner.trigger( 'dndAccept', items ); }); dnd.init(); return deferred.promise(); }, destroy: function() { this.dnd && this.dnd.destroy(); } }); }); /** * @fileOverview 错误信息 */ define('lib/filepaste',[ 'base', 'mediator', 'runtime/client' ], function( Base, Mediator, RuntimeClent ) { var $ = Base.$; function FilePaste( opts ) { opts = this.options = $.extend({}, opts ); opts.container = $( opts.container || document.body ); RuntimeClent.call( this, 'FilePaste' ); } Base.inherits( RuntimeClent, { constructor: FilePaste, init: function() { var me = this; me.connectRuntime( me.options, function() { me.exec('init'); me.trigger('ready'); }); } }); Mediator.installTo( FilePaste.prototype ); return FilePaste; }); /** * @fileOverview 组件基类。 */ define('widgets/filepaste',[ 'base', 'uploader', 'lib/filepaste', 'widgets/widget' ], function( Base, Uploader, FilePaste ) { var $ = Base.$; /** * @property {Selector} [paste=undefined] 指定监听paste事件的容器,如果不指定,不启用此功能。此功能为通过粘贴来添加截屏的图片。建议设置为`document.body`. * @namespace options * @for Uploader */ return Uploader.register({ name: 'paste', init: function( opts ) { if ( !opts.paste || this.request('predict-runtime-type') !== 'html5' ) { return; } var me = this, deferred = Base.Deferred(), options = $.extend({}, { container: opts.paste, accept: opts.accept }), paste; this.paste = paste = new FilePaste( options ); paste.once( 'ready', deferred.resolve ); paste.on( 'paste', function( files ) { me.owner.request( 'add-file', [ files ]); }); paste.init(); return deferred.promise(); }, destroy: function() { this.paste && this.paste.destroy(); } }); }); /** * @fileOverview Blob */ define('lib/blob',[ 'base', 'runtime/client' ], function( Base, RuntimeClient ) { function Blob( ruid, source ) { var me = this; me.source = source; me.ruid = ruid; this.size = source.size || 0; // 如果没有指定 mimetype, 但是知道文件后缀。 if ( !source.type && this.ext && ~'jpg,jpeg,png,gif,bmp'.indexOf( this.ext ) ) { this.type = 'image/' + (this.ext === 'jpg' ? 'jpeg' : this.ext); } else { this.type = source.type || 'application/octet-stream'; } RuntimeClient.call( me, 'Blob' ); this.uid = source.uid || this.uid; if ( ruid ) { me.connectRuntime( ruid ); } } Base.inherits( RuntimeClient, { constructor: Blob, slice: function( start, end ) { return this.exec( 'slice', start, end ); }, getSource: function() { return this.source; } }); return Blob; }); /** * 为了统一化Flash的File和HTML5的File而存在。 * 以至于要调用Flash里面的File,也可以像调用HTML5版本的File一下。 * @fileOverview File */ define('lib/file',[ 'base', 'lib/blob' ], function( Base, Blob ) { var uid = 1, rExt = /\.([^.]+)$/; function File( ruid, file ) { var ext; this.name = file.name || ('untitled' + uid++); ext = rExt.exec( file.name ) ? RegExp.$1.toLowerCase() : ''; // todo 支持其他类型文件的转换。 // 如果有 mimetype, 但是文件名里面没有找出后缀规律 if ( !ext && file.type ) { ext = /\/(jpg|jpeg|png|gif|bmp)$/i.exec( file.type ) ? RegExp.$1.toLowerCase() : ''; this.name += '.' + ext; } this.ext = ext; this.lastModifiedDate = file.lastModifiedDate || (new Date()).toLocaleString(); Blob.apply( this, arguments ); } return Base.inherits( Blob, File ); }); /** * @fileOverview 错误信息 */ define('lib/filepicker',[ 'base', 'runtime/client', 'lib/file' ], function( Base, RuntimeClent, File ) { var $ = Base.$; function FilePicker( opts ) { opts = this.options = $.extend({}, FilePicker.options, opts ); opts.container = $( opts.id ); if ( !opts.container.length ) { throw new Error('按钮指定错误'); } opts.innerHTML = opts.innerHTML || opts.label || opts.container.html() || ''; opts.button = $( opts.button || document.createElement('div') ); opts.button.html( opts.innerHTML ); opts.container.html( opts.button ); RuntimeClent.call( this, 'FilePicker', true ); } FilePicker.options = { button: null, container: null, label: null, innerHTML: null, multiple: true, accept: null, name: 'file' }; Base.inherits( RuntimeClent, { constructor: FilePicker, init: function() { var me = this, opts = me.options, button = opts.button; button.addClass('webuploader-pick'); me.on( 'all', function( type ) { var files; switch ( type ) { case 'mouseenter': button.addClass('webuploader-pick-hover'); break; case 'mouseleave': button.removeClass('webuploader-pick-hover'); break; case 'change': files = me.exec('getFiles'); me.trigger( 'select', $.map( files, function( file ) { file = new File( me.getRuid(), file ); // 记录来源。 file._refer = opts.container; return file; }), opts.container ); break; } }); me.connectRuntime( opts, function() { me.refresh(); me.exec( 'init', opts ); me.trigger('ready'); }); this._resizeHandler = Base.bindFn( this.refresh, this ); $( window ).on( 'resize', this._resizeHandler ); }, refresh: function() { var shimContainer = this.getRuntime().getContainer(), button = this.options.button, width = button.outerWidth ? button.outerWidth() : button.width(), height = button.outerHeight ? button.outerHeight() : button.height(), pos = button.offset(); width && height && shimContainer.css({ bottom: 'auto', right: 'auto', width: width + 'px', height: height + 'px' }).offset( pos ); }, enable: function() { var btn = this.options.button; btn.removeClass('webuploader-pick-disable'); this.refresh(); }, disable: function() { var btn = this.options.button; this.getRuntime().getContainer().css({ top: '-99999px' }); btn.addClass('webuploader-pick-disable'); }, destroy: function() { var btn = this.options.button; $( window ).off( 'resize', this._resizeHandler ); btn.removeClass('webuploader-pick-disable webuploader-pick-hover ' + 'webuploader-pick'); } }); return FilePicker; }); /** * @fileOverview 文件选择相关 */ define('widgets/filepicker',[ 'base', 'uploader', 'lib/filepicker', 'widgets/widget' ], function( Base, Uploader, FilePicker ) { var $ = Base.$; $.extend( Uploader.options, { /** * @property {Selector | Object} [pick=undefined] * @namespace options * @for Uploader * @description 指定选择文件的按钮容器,不指定则不创建按钮。 * * * `id` {Seletor} 指定选择文件的按钮容器,不指定则不创建按钮。 * * `label` {String} 请采用 `innerHTML` 代替 * * `innerHTML` {String} 指定按钮文字。不指定时优先从指定的容器中看是否自带文字。 * * `multiple` {Boolean} 是否开起同时选择多个文件能力。 */ pick: null, /** * @property {Arroy} [accept=null] * @namespace options * @for Uploader * @description 指定接受哪些类型的文件。 由于目前还有ext转mimeType表,所以这里需要分开指定。 * * * `title` {String} 文字描述 * * `extensions` {String} 允许的文件后缀,不带点,多个用逗号分割。 * * `mimeTypes` {String} 多个用逗号分割。 * * 如: * * ``` * { * title: 'Images', * extensions: 'gif,jpg,jpeg,bmp,png', * mimeTypes: 'image/*' * } * ``` */ accept: null/*{ title: 'Images', extensions: 'gif,jpg,jpeg,bmp,png', mimeTypes: 'image/*' }*/ }); return Uploader.register({ name: 'picker', init: function( opts ) { this.pickers = []; return opts.pick && this.addBtn( opts.pick ); }, refresh: function() { $.each( this.pickers, function() { this.refresh(); }); }, /** * @method addButton * @for Uploader * @grammar addButton( pick ) => Promise * @description * 添加文件选择按钮,如果一个按钮不够,需要调用此方法来添加。参数跟[options.pick](#WebUploader:Uploader:options)一致。 * @example * uploader.addButton({ * id: '#btnContainer', * innerHTML: '选择文件' * }); */ addBtn: function( pick ) { var me = this, opts = me.options, accept = opts.accept, promises = []; if ( !pick ) { return; } $.isPlainObject( pick ) || (pick = { id: pick }); $( pick.id ).each(function() { var options, picker, deferred; deferred = Base.Deferred(); options = $.extend({}, pick, { accept: $.isPlainObject( accept ) ? [ accept ] : accept, swf: opts.swf, runtimeOrder: opts.runtimeOrder, id: this }); picker = new FilePicker( options ); picker.once( 'ready', deferred.resolve ); picker.on( 'select', function( files ) { me.owner.request( 'add-file', [ files ]); }); picker.init(); me.pickers.push( picker ); promises.push( deferred.promise() ); }); return Base.when.apply( Base, promises ); }, disable: function() { $.each( this.pickers, function() { this.disable(); }); }, enable: function() { $.each( this.pickers, function() { this.enable(); }); }, destroy: function() { $.each( this.pickers, function() { this.destroy(); }); this.pickers = null; } }); }); /** * @fileOverview 文件属性封装 */ define('file',[ 'base', 'mediator' ], function( Base, Mediator ) { var $ = Base.$, idPrefix = 'WU_FILE_', idSuffix = 0, rExt = /\.([^.]+)$/, statusMap = {}; function gid() { return idPrefix + idSuffix++; } /** * 文件类 * @class File * @constructor 构造函数 * @grammar new File( source ) => File * @param {Lib.File} source [lib.File](#Lib.File)实例, 此source对象是带有Runtime信息的。 */ function WUFile( source ) { /** * 文件名,包括扩展名(后缀) * @property name * @type {string} */ this.name = source.name || 'Untitled'; /** * 文件体积(字节) * @property size * @type {uint} * @default 0 */ this.size = source.size || 0; /** * 文件MIMETYPE类型,与文件类型的对应关系请参考[http://t.cn/z8ZnFny](http://t.cn/z8ZnFny) * @property type * @type {string} * @default 'application/octet-stream' */ this.type = source.type || 'application/octet-stream'; /** * 文件最后修改日期 * @property lastModifiedDate * @type {int} * @default 当前时间戳 */ this.lastModifiedDate = source.lastModifiedDate || (new Date() * 1); /** * 文件ID,每个对象具有唯一ID,与文件名无关 * @property id * @type {string} */ this.id = gid(); /** * 文件扩展名,通过文件名获取,例如test.png的扩展名为png * @property ext * @type {string} */ this.ext = rExt.exec( this.name ) ? RegExp.$1 : ''; /** * 状态文字说明。在不同的status语境下有不同的用途。 * @property statusText * @type {string} */ this.statusText = ''; // 存储文件状态,防止通过属性直接修改 statusMap[ this.id ] = WUFile.Status.INITED; this.source = source; this.loaded = 0; this.on( 'error', function( msg ) { this.setStatus( WUFile.Status.ERROR, msg ); }); } $.extend( WUFile.prototype, { /** * 设置状态,状态变化时会触发`change`事件。 * @method setStatus * @grammar setStatus( status[, statusText] ); * @param {File.Status|String} status [文件状态值](#WebUploader:File:File.Status) * @param {String} [statusText=''] 状态说明,常在error时使用,用http, abort,server等来标记是由于什么原因导致文件错误。 */ setStatus: function( status, text ) { var prevStatus = statusMap[ this.id ]; typeof text !== 'undefined' && (this.statusText = text); if ( status !== prevStatus ) { statusMap[ this.id ] = status; /** * 文件状态变化 * @event statuschange */ this.trigger( 'statuschange', status, prevStatus ); } }, /** * 获取文件状态 * @return {File.Status} * @example 文件状态具体包括以下几种类型: { // 初始化 INITED: 0, // 已入队列 QUEUED: 1, // 正在上传 PROGRESS: 2, // 上传出错 ERROR: 3, // 上传成功 COMPLETE: 4, // 上传取消 CANCELLED: 5 } */ getStatus: function() { return statusMap[ this.id ]; }, /** * 获取文件原始信息。 * @return {*} */ getSource: function() { return this.source; }, destroy: function() { this.off(); delete statusMap[ this.id ]; } }); Mediator.installTo( WUFile.prototype ); /** * 文件状态值,具体包括以下几种类型: * * `inited` 初始状态 * * `queued` 已经进入队列, 等待上传 * * `progress` 上传中 * * `complete` 上传完成。 * * `error` 上传出错,可重试 * * `interrupt` 上传中断,可续传。 * * `invalid` 文件不合格,不能重试上传。会自动从队列中移除。 * * `cancelled` 文件被移除。 * @property {Object} Status * @namespace File * @class File * @static */ WUFile.Status = { INITED: 'inited', // 初始状态 QUEUED: 'queued', // 已经进入队列, 等待上传 PROGRESS: 'progress', // 上传中 ERROR: 'error', // 上传出错,可重试 COMPLETE: 'complete', // 上传完成。 CANCELLED: 'cancelled', // 上传取消。 INTERRUPT: 'interrupt', // 上传中断,可续传。 INVALID: 'invalid' // 文件不合格,不能重试上传。 }; return WUFile; }); /** * @fileOverview 文件队列 */ define('queue',[ 'base', 'mediator', 'file' ], function( Base, Mediator, WUFile ) { var $ = Base.$, STATUS = WUFile.Status; /** * 文件队列, 用来存储各个状态中的文件。 * @class Queue * @extends Mediator */ function Queue() { /** * 统计文件数。 * * `numOfQueue` 队列中的文件数。 * * `numOfSuccess` 上传成功的文件数 * * `numOfCancel` 被取消的文件数 * * `numOfProgress` 正在上传中的文件数 * * `numOfUploadFailed` 上传错误的文件数。 * * `numOfInvalid` 无效的文件数。 * * `numofDeleted` 被移除的文件数。 * @property {Object} stats */ this.stats = { numOfQueue: 0, numOfSuccess: 0, numOfCancel: 0, numOfProgress: 0, numOfUploadFailed: 0, numOfInvalid: 0, numofDeleted: 0, numofInterrupt: 0, }; // 上传队列,仅包括等待上传的文件 this._queue = []; // 存储所有文件 this._map = {}; } $.extend( Queue.prototype, { /** * 将新文件加入对队列尾部 * * @method append * @param {File} file 文件对象 */ append: function( file ) { this._queue.push( file ); this._fileAdded( file ); return this; }, /** * 将新文件加入对队列头部 * * @method prepend * @param {File} file 文件对象 */ prepend: function( file ) { this._queue.unshift( file ); this._fileAdded( file ); return this; }, /** * 获取文件对象 * * @method getFile * @param {String} fileId 文件ID * @return {File} */ getFile: function( fileId ) { if ( typeof fileId !== 'string' ) { return fileId; } return this._map[ fileId ]; }, /** * 从队列中取出一个指定状态的文件。 * @grammar fetch( status ) => File * @method fetch * @param {String} status [文件状态值](#WebUploader:File:File.Status) * @return {File} [File](#WebUploader:File) */ fetch: function( status ) { var len = this._queue.length, i, file; status = status || STATUS.QUEUED; for ( i = 0; i < len; i++ ) { file = this._queue[ i ]; if ( status === file.getStatus() ) { return file; } } return null; }, /** * 对队列进行排序,能够控制文件上传顺序。 * @grammar sort( fn ) => undefined * @method sort * @param {Function} fn 排序方法 */ sort: function( fn ) { if ( typeof fn === 'function' ) { this._queue.sort( fn ); } }, /** * 获取指定类型的文件列表, 列表中每一个成员为[File](#WebUploader:File)对象。 * @grammar getFiles( [status1[, status2 ...]] ) => Array * @method getFiles * @param {String} [status] [文件状态值](#WebUploader:File:File.Status) */ getFiles: function() { var sts = [].slice.call( arguments, 0 ), ret = [], i = 0, len = this._queue.length, file; for ( ; i < len; i++ ) { file = this._queue[ i ]; if ( sts.length && !~$.inArray( file.getStatus(), sts ) ) { continue; } ret.push( file ); } return ret; }, /** * 在队列中删除文件。 * @grammar removeFile( file ) => Array * @method removeFile * @param {File} 文件对象。 */ removeFile: function( file ) { var me = this, existing = this._map[ file.id ]; if ( existing ) { delete this._map[ file.id ]; file.destroy(); this.stats.numofDeleted++; } }, _fileAdded: function( file ) { var me = this, existing = this._map[ file.id ]; if ( !existing ) { this._map[ file.id ] = file; file.on( 'statuschange', function( cur, pre ) { me._onFileStatusChange( cur, pre ); }); } }, _onFileStatusChange: function( curStatus, preStatus ) { var stats = this.stats; switch ( preStatus ) { case STATUS.PROGRESS: stats.numOfProgress--; break; case STATUS.QUEUED: stats.numOfQueue --; break; case STATUS.ERROR: stats.numOfUploadFailed--; break; case STATUS.INVALID: stats.numOfInvalid--; break; case STATUS.INTERRUPT: stats.numofInterrupt--; break; } switch ( curStatus ) { case STATUS.QUEUED: stats.numOfQueue++; break; case STATUS.PROGRESS: stats.numOfProgress++; break; case STATUS.ERROR: stats.numOfUploadFailed++; break; case STATUS.COMPLETE: stats.numOfSuccess++; break; case STATUS.CANCELLED: stats.numOfCancel++; break; case STATUS.INVALID: stats.numOfInvalid++; break; case STATUS.INTERRUPT: stats.numofInterrupt++; break; } } }); Mediator.installTo( Queue.prototype ); return Queue; }); /** * @fileOverview 队列 */ define('widgets/queue',[ 'base', 'uploader', 'queue', 'file', 'lib/file', 'runtime/client', 'widgets/widget' ], function( Base, Uploader, Queue, WUFile, File, RuntimeClient ) { var $ = Base.$, rExt = /\.\w+$/, Status = WUFile.Status; return Uploader.register({ name: 'queue', init: function( opts ) { var me = this, deferred, len, i, item, arr, accept, runtime; if ( $.isPlainObject( opts.accept ) ) { opts.accept = [ opts.accept ]; } // accept中的中生成匹配正则。 if ( opts.accept ) { arr = []; for ( i = 0, len = opts.accept.length; i < len; i++ ) { item = opts.accept[ i ].extensions; item && arr.push( item ); } if ( arr.length ) { accept = '\\.' + arr.join(',') .replace( /,/g, '$|\\.' ) .replace( /\*/g, '.*' ) + '$'; } me.accept = new RegExp( accept, 'i' ); } me.queue = new Queue(); me.stats = me.queue.stats; // 如果当前不是html5运行时,那就算了。 // 不执行后续操作 if ( this.request('predict-runtime-type') !== 'html5' ) { return; } // 创建一个 html5 运行时的 placeholder // 以至于外部添加原生 File 对象的时候能正确包裹一下供 webuploader 使用。 deferred = Base.Deferred(); this.placeholder = runtime = new RuntimeClient('Placeholder'); runtime.connectRuntime({ runtimeOrder: 'html5' }, function() { me._ruid = runtime.getRuid(); deferred.resolve(); }); return deferred.promise(); }, // 为了支持外部直接添加一个原生File对象。 _wrapFile: function( file ) { if ( !(file instanceof WUFile) ) { if ( !(file instanceof File) ) { if ( !this._ruid ) { throw new Error('Can\'t add external files.'); } file = new File( this._ruid, file ); } file = new WUFile( file ); } return file; }, // 判断文件是否可以被加入队列 acceptFile: function( file ) { var invalid = !file || !file.size || this.accept && // 如果名字中有后缀,才做后缀白名单处理。 rExt.exec( file.name ) && !this.accept.test( file.name ); return !invalid; }, /** * @event beforeFileQueued * @param {File} file File对象 * @description 当文件被加入队列之前触发,此事件的handler返回值为`false`,则此文件不会被添加进入队列。 * @for Uploader */ /** * @event fileQueued * @param {File} file File对象 * @description 当文件被加入队列以后触发。 * @for Uploader */ _addFile: function( file ) { var me = this; file = me._wrapFile( file ); // 不过类型判断允许不允许,先派送 `beforeFileQueued` if ( !me.owner.trigger( 'beforeFileQueued', file ) ) { return; } // 类型不匹配,则派送错误事件,并返回。 if ( !me.acceptFile( file ) ) { me.owner.trigger( 'error', 'Q_TYPE_DENIED', file ); return; } me.queue.append( file ); me.owner.trigger( 'fileQueued', file ); return file; }, getFile: function( fileId ) { return this.queue.getFile( fileId ); }, /** * @event filesQueued * @param {File} files 数组,内容为原始File(lib/File)对象。 * @description 当一批文件添加进队列以后触发。 * @for Uploader */ /** * @property {Boolean} [auto=false] * @namespace options * @for Uploader * @description 设置为 true 后,不需要手动调用上传,有文件选择即开始上传。 * */ /** * @method addFiles * @grammar addFiles( file ) => undefined * @grammar addFiles( [file1, file2 ...] ) => undefined * @param {Array of File or File} [files] Files 对象 数组 * @description 添加文件到队列 * @for Uploader */ addFile: function( files ) { var me = this; if ( !files.length ) { files = [ files ]; } files = $.map( files, function( file ) { return me._addFile( file ); }); me.owner.trigger( 'filesQueued', files ); if ( me.options.auto ) { setTimeout(function() { me.request('start-upload'); }, 20 ); } }, getStats: function() { return this.stats; }, /** * @event fileDequeued * @param {File} file File对象 * @description 当文件被移除队列后触发。 * @for Uploader */ /** * @method removeFile * @grammar removeFile( file ) => undefined * @grammar removeFile( id ) => undefined * @grammar removeFile( file, true ) => undefined * @grammar removeFile( id, true ) => undefined * @param {File|id} file File对象或这File对象的id * @description 移除某一文件, 默认只会标记文件状态为已取消,如果第二个参数为 `true` 则会从 queue 中移除。 * @for Uploader * @example * * $li.on('click', '.remove-this', function() { * uploader.removeFile( file ); * }) */ removeFile: function( file, remove ) { var me = this; file = file.id ? file : me.queue.getFile( file ); this.request( 'cancel-file', file ); if ( remove ) { this.queue.removeFile( file ); } }, /** * @method getFiles * @grammar getFiles() => Array * @grammar getFiles( status1, status2, status... ) => Array * @description 返回指定状态的文件集合,不传参数将返回所有状态的文件。 * @for Uploader * @example * console.log( uploader.getFiles() ); // => all files * console.log( uploader.getFiles('error') ) // => all error files. */ getFiles: function() { return this.queue.getFiles.apply( this.queue, arguments ); }, fetchFile: function() { return this.queue.fetch.apply( this.queue, arguments ); }, /** * @method retry * @grammar retry() => undefined * @grammar retry( file ) => undefined * @description 重试上传,重试指定文件,或者从出错的文件开始重新上传。 * @for Uploader * @example * function retry() { * uploader.retry(); * } */ retry: function( file, noForceStart ) { var me = this, files, i, len; if ( file ) { file = file.id ? file : me.queue.getFile( file ); file.setStatus( Status.QUEUED ); noForceStart || me.request('start-upload'); return; } files = me.queue.getFiles( Status.ERROR ); i = 0; len = files.length; for ( ; i < len; i++ ) { file = files[ i ]; file.setStatus( Status.QUEUED ); } me.request('start-upload'); }, /** * @method sort * @grammar sort( fn ) => undefined * @description 排序队列中的文件,在上传之前调整可以控制上传顺序。 * @for Uploader */ sortFiles: function() { return this.queue.sort.apply( this.queue, arguments ); }, /** * @event reset * @description 当 uploader 被重置的时候触发。 * @for Uploader */ /** * @method reset * @grammar reset() => undefined * @description 重置uploader。目前只重置了队列。 * @for Uploader * @example * uploader.reset(); */ reset: function() { this.owner.trigger('reset'); this.queue = new Queue(); this.stats = this.queue.stats; }, destroy: function() { this.reset(); this.placeholder && this.placeholder.destroy(); } }); }); /** * @fileOverview 添加获取Runtime相关信息的方法。 */ define('widgets/runtime',[ 'uploader', 'runtime/runtime', 'widgets/widget' ], function( Uploader, Runtime ) { Uploader.support = function() { return Runtime.hasRuntime.apply( Runtime, arguments ); }; return Uploader.register({ name: 'runtime', init: function() { if ( !this.predictRuntimeType() ) { throw Error('Runtime Error'); } }, /** * 预测Uploader将采用哪个`Runtime` * @grammar predictRuntimeType() => String * @method predictRuntimeType * @for Uploader */ predictRuntimeType: function() { var orders = this.options.runtimeOrder || Runtime.orders, type = this.type, i, len; if ( !type ) { orders = orders.split( /\s*,\s*/g ); for ( i = 0, len = orders.length; i < len; i++ ) { if ( Runtime.hasRuntime( orders[ i ] ) ) { this.type = type = orders[ i ]; break; } } } return type; } }); }); /** * @fileOverview Transport */ define('lib/transport',[ 'base', 'runtime/client', 'mediator' ], function( Base, RuntimeClient, Mediator ) { var $ = Base.$; function Transport( opts ) { var me = this; opts = me.options = $.extend( true, {}, Transport.options, opts || {} ); RuntimeClient.call( this, 'Transport' ); this._blob = null; this._formData = opts.formData || {}; this._headers = opts.headers || {}; this.on( 'progress', this._timeout ); this.on( 'load error', function() { me.trigger( 'progress', 1 ); clearTimeout( me._timer ); }); } Transport.options = { server: '', method: 'POST', // 跨域时,是否允许携带cookie, 只有html5 runtime才有效 withCredentials: false, fileVal: 'file', timeout: 2 * 60 * 1000, // 2分钟 formData: {}, headers: {}, sendAsBinary: false }; $.extend( Transport.prototype, { // 添加Blob, 只能添加一次,最后一次有效。 appendBlob: function( key, blob, filename ) { var me = this, opts = me.options; if ( me.getRuid() ) { me.disconnectRuntime(); } // 连接到blob归属的同一个runtime. me.connectRuntime( blob.ruid, function() { me.exec('init'); }); me._blob = blob; opts.fileVal = key || opts.fileVal; opts.filename = filename || opts.filename; }, // 添加其他字段 append: function( key, value ) { if ( typeof key === 'object' ) { $.extend( this._formData, key ); } else { this._formData[ key ] = value; } }, setRequestHeader: function( key, value ) { if ( typeof key === 'object' ) { $.extend( this._headers, key ); } else { this._headers[ key ] = value; } }, send: function( method ) { this.exec( 'send', method ); this._timeout(); }, abort: function() { clearTimeout( this._timer ); return this.exec('abort'); }, destroy: function() { this.trigger('destroy'); this.off(); this.exec('destroy'); this.disconnectRuntime(); }, getResponse: function() { return this.exec('getResponse'); }, getResponseAsJson: function() { return this.exec('getResponseAsJson'); }, getStatus: function() { return this.exec('getStatus'); }, _timeout: function() { var me = this, duration = me.options.timeout; if ( !duration ) { return; } clearTimeout( me._timer ); me._timer = setTimeout(function() { me.abort(); me.trigger( 'error', 'timeout' ); }, duration ); } }); // 让Transport具备事件功能。 Mediator.installTo( Transport.prototype ); return Transport; }); /** * @fileOverview 负责文件上传相关。 */ define('widgets/upload',[ 'base', 'uploader', 'file', 'lib/transport', 'widgets/widget' ], function( Base, Uploader, WUFile, Transport ) { var $ = Base.$, isPromise = Base.isPromise, Status = WUFile.Status; // 添加默认配置项 $.extend( Uploader.options, { /** * @property {Boolean} [prepareNextFile=false] * @namespace options * @for Uploader * @description 是否允许在文件传输时提前把下一个文件准备好。 * 对于一个文件的准备工作比较耗时,比如图片压缩,md5序列化。 * 如果能提前在当前文件传输期处理,可以节省总体耗时。 */ prepareNextFile: false, /** * @property {Boolean} [chunked=false] * @namespace options * @for Uploader * @description 是否要分片处理大文件上传。 */ chunked: false, /** * @property {Boolean} [chunkSize=5242880] * @namespace options * @for Uploader * @description 如果要分片,分多大一片? 默认大小为5M. */ chunkSize: 5 * 1024 * 1024, /** * @property {Boolean} [chunkRetry=2] * @namespace options * @for Uploader * @description 如果某个分片由于网络问题出错,允许自动重传多少次? */ chunkRetry: 2, /** * @property {Boolean} [threads=3] * @namespace options * @for Uploader * @description 上传并发数。允许同时最大上传进程数。 */ threads: 3, /** * @property {Object} [formData={}] * @namespace options * @for Uploader * @description 文件上传请求的参数表,每次发送都会发送此对象中的参数。 */ formData: {} /** * @property {Object} [fileVal='file'] * @namespace options * @for Uploader * @description 设置文件上传域的name。 */ /** * @property {Object} [method='POST'] * @namespace options * @for Uploader * @description 文件上传方式,`POST`或者`GET`。 */ /** * @property {Object} [sendAsBinary=false] * @namespace options * @for Uploader * @description 是否已二进制的流的方式发送文件,这样整个上传内容`php://input`都为文件内容, * 其他参数在$_GET数组中。 */ }); // 负责将文件切片。 function CuteFile( file, chunkSize ) { var pending = [], blob = file.source, total = blob.size, chunks = chunkSize ? Math.ceil( total / chunkSize ) : 1, start = 0, index = 0, len, api; api = { file: file, has: function() { return !!pending.length; }, shift: function() { return pending.shift(); }, unshift: function( block ) { pending.unshift( block ); } }; while ( index < chunks ) { len = Math.min( chunkSize, total - start ); pending.push({ file: file, start: start, end: chunkSize ? (start + len) : total, total: total, chunks: chunks, chunk: index++, cuted: api }); start += len; } file.blocks = pending.concat(); file.remaning = pending.length; return api; } Uploader.register({ name: 'upload', init: function() { var owner = this.owner, me = this; this.runing = false; this.progress = false; owner .on( 'startUpload', function() { me.progress = true; }) .on( 'uploadFinished', function() { me.progress = false; }); // 记录当前正在传的数据,跟threads相关 this.pool = []; // 缓存分好片的文件。 this.stack = []; // 缓存即将上传的文件。 this.pending = []; // 跟踪还有多少分片在上传中但是没有完成上传。 this.remaning = 0; this.__tick = Base.bindFn( this._tick, this ); owner.on( 'uploadComplete', function( file ) { // 把其他块取消了。 file.blocks && $.each( file.blocks, function( _, v ) { v.transport && (v.transport.abort(), v.transport.destroy()); delete v.transport; }); delete file.blocks; delete file.remaning; }); }, reset: function() { this.request( 'stop-upload', true ); this.runing = false; this.pool = []; this.stack = []; this.pending = []; this.remaning = 0; this._trigged = false; this._promise = null; }, /** * @event startUpload * @description 当开始上传流程时触发。 * @for Uploader */ /** * 开始上传。此方法可以从初始状态调用开始上传流程,也可以从暂停状态调用,继续上传流程。 * * 可以指定开始某一个文件。 * @grammar upload() => undefined * @grammar upload( file | fileId) => undefined * @method upload * @for Uploader */ startUpload: function(file) { var me = this; // 移出invalid的文件 $.each( me.request( 'get-files', Status.INVALID ), function() { me.request( 'remove-file', this ); }); // 如果指定了开始某个文件,则只开始指定文件。 if ( file ) { file = file.id ? file : me.request( 'get-file', file ); if (file.getStatus() === Status.INTERRUPT) { $.each( me.pool, function( _, v ) { // 之前暂停过。 if (v.file !== file) { return; } v.transport && v.transport.send(); }); file.setStatus( Status.QUEUED ); } else if (file.getStatus() === Status.PROGRESS) { return; } else { file.setStatus( Status.QUEUED ); } } else { $.each( me.request( 'get-files', [ Status.INITED ] ), function() { this.setStatus( Status.QUEUED ); }); } if ( me.runing ) { return; } me.runing = true; // 如果有暂停的,则续传 $.each( me.pool, function( _, v ) { var file = v.file; if ( file.getStatus() === Status.INTERRUPT ) { file.setStatus( Status.PROGRESS ); me._trigged = false; v.transport && v.transport.send(); } }); file || $.each( me.request( 'get-files', Status.INTERRUPT ), function() { this.setStatus( Status.PROGRESS ); }); me._trigged = false; Base.nextTick( me.__tick ); me.owner.trigger('startUpload'); }, /** * @event stopUpload * @description 当开始上传流程暂停时触发。 * @for Uploader */ /** * 暂停上传。第一个参数为是否中断上传当前正在上传的文件。 * * 如果第一个参数是文件,则只暂停指定文件。 * @grammar stop() => undefined * @grammar stop( true ) => undefined * @grammar stop( file ) => undefined * @method stop * @for Uploader */ stopUpload: function( file, interrupt ) { var me = this; if (file === true) { interrupt = file; file = null; } if ( me.runing === false ) { return; } // 如果只是暂停某个文件。 if ( file ) { file = file.id ? file : me.request( 'get-file', file ); if ( file.getStatus() !== Status.PROGRESS && file.getStatus() !== Status.QUEUED ) { return; } file.setStatus( Status.INTERRUPT ); $.each( me.pool, function( _, v ) { // 只 abort 指定的文件。 if (v.file !== file) { return; } v.transport && v.transport.abort(); me._putback(v); me._popBlock(v); }); return Base.nextTick( me.__tick ); } me.runing = false; if (this._promise && this._promise.file) { this._promise.file.setStatus( Status.INTERRUPT ); } interrupt && $.each( me.pool, function( _, v ) { v.transport && v.transport.abort(); v.file.setStatus( Status.INTERRUPT ); }); me.owner.trigger('stopUpload'); }, /** * @method cancelFile * @grammar cancelFile( file ) => undefined * @grammar cancelFile( id ) => undefined * @param {File|id} file File对象或这File对象的id * @description 标记文件状态为已取消, 同时将中断文件传输。 * @for Uploader * @example * * $li.on('click', '.remove-this', function() { * uploader.cancelFile( file ); * }) */ cancelFile: function( file ) { file = file.id ? file : this.request( 'get-file', file ); // 如果正在上传。 file.blocks && $.each( file.blocks, function( _, v ) { var _tr = v.transport; if ( _tr ) { _tr.abort(); _tr.destroy(); delete v.transport; } }); file.setStatus( Status.CANCELLED ); this.owner.trigger( 'fileDequeued', file ); }, /** * 判断`Uplaode`r是否正在上传中。 * @grammar isInProgress() => Boolean * @method isInProgress * @for Uploader */ isInProgress: function() { return !!this.progress; }, _getStats: function() { return this.request('get-stats'); }, /** * 掉过一个文件上传,直接标记指定文件为已上传状态。 * @grammar skipFile( file ) => undefined * @method skipFile * @for Uploader */ skipFile: function( file, status ) { file = file.id ? file : this.request( 'get-file', file ); file.setStatus( status || Status.COMPLETE ); file.skipped = true; // 如果正在上传。 file.blocks && $.each( file.blocks, function( _, v ) { var _tr = v.transport; if ( _tr ) { _tr.abort(); _tr.destroy(); delete v.transport; } }); this.owner.trigger( 'uploadSkip', file ); }, /** * @event uploadFinished * @description 当所有文件上传结束时触发。 * @for Uploader */ _tick: function() { var me = this, opts = me.options, fn, val; // 上一个promise还没有结束,则等待完成后再执行。 if ( me._promise ) { return me._promise.always( me.__tick ); } // 还有位置,且还有文件要处理的话。 if ( me.pool.length < opts.threads && (val = me._nextBlock()) ) { me._trigged = false; fn = function( val ) { me._promise = null; // 有可能是reject过来的,所以要检测val的类型。 val && val.file && me._startSend( val ); Base.nextTick( me.__tick ); }; me._promise = isPromise( val ) ? val.always( fn ) : fn( val ); // 没有要上传的了,且没有正在传输的了。 } else if ( !me.remaning && !me._getStats().numOfQueue && !me._getStats().numofInterrupt ) { me.runing = false; me._trigged || Base.nextTick(function() { me.owner.trigger('uploadFinished'); }); me._trigged = true; } }, _putback: function(block) { var idx; block.cuted.unshift(block); idx = this.stack.indexOf(block.cuted); if (!~idx) { this.stack.unshift(block.cuted); } }, _getStack: function() { var i = 0, act; while ( (act = this.stack[ i++ ]) ) { if ( act.has() && act.file.getStatus() === Status.PROGRESS ) { return act; } else if (!act.has() || act.file.getStatus() !== Status.PROGRESS && act.file.getStatus() !== Status.INTERRUPT ) { // 把已经处理完了的,或者,状态为非 progress(上传中)、 // interupt(暂停中) 的移除。 this.stack.splice( --i, 1 ); } } return null; }, _nextBlock: function() { var me = this, opts = me.options, act, next, done, preparing; // 如果当前文件还有没有需要传输的,则直接返回剩下的。 if ( (act = this._getStack()) ) { // 是否提前准备下一个文件 if ( opts.prepareNextFile && !me.pending.length ) { me._prepareNextFile(); } return act.shift(); // 否则,如果正在运行,则准备下一个文件,并等待完成后返回下个分片。 } else if ( me.runing ) { // 如果缓存中有,则直接在缓存中取,没有则去queue中取。 if ( !me.pending.length && me._getStats().numOfQueue ) { me._prepareNextFile(); } next = me.pending.shift(); done = function( file ) { if ( !file ) { return null; } act = CuteFile( file, opts.chunked ? opts.chunkSize : 0 ); me.stack.push(act); return act.shift(); }; // 文件可能还在prepare中,也有可能已经完全准备好了。 if ( isPromise( next) ) { preparing = next.file; next = next[ next.pipe ? 'pipe' : 'then' ]( done ); next.file = preparing; return next; } return done( next ); } }, /** * @event uploadStart * @param {File} file File对象 * @description 某个文件开始上传前触发,一个文件只会触发一次。 * @for Uploader */ _prepareNextFile: function() { var me = this, file = me.request('fetch-file'), pending = me.pending, promise; if ( file ) { promise = me.request( 'before-send-file', file, function() { // 有可能文件被skip掉了。文件被skip掉后,状态坑定不是Queued. if ( file.getStatus() === Status.PROGRESS || file.getStatus() === Status.INTERRUPT ) { return file; } return me._finishFile( file ); }); me.owner.trigger( 'uploadStart', file ); file.setStatus( Status.PROGRESS ); promise.file = file; // 如果还在pending中,则替换成文件本身。 promise.done(function() { var idx = $.inArray( promise, pending ); ~idx && pending.splice( idx, 1, file ); }); // befeore-send-file的钩子就有错误发生。 promise.fail(function( reason ) { file.setStatus( Status.ERROR, reason ); me.owner.trigger( 'uploadError', file, reason ); me.owner.trigger( 'uploadComplete', file ); }); pending.push( promise ); } }, // 让出位置了,可以让其他分片开始上传 _popBlock: function( block ) { var idx = $.inArray( block, this.pool ); this.pool.splice( idx, 1 ); block.file.remaning--; this.remaning--; }, // 开始上传,可以被掉过。如果promise被reject了,则表示跳过此分片。 _startSend: function( block ) { var me = this, file = block.file, promise; // 有可能在 before-send-file 的 promise 期间改变了文件状态。 // 如:暂停,取消 // 我们不能中断 promise, 但是可以在 promise 完后,不做上传操作。 if ( file.getStatus() !== Status.PROGRESS ) { // 如果是中断,则还需要放回去。 if (file.getStatus() === Status.INTERRUPT) { me._putback(block); } return; } me.pool.push( block ); me.remaning++; // 如果没有分片,则直接使用原始的。 // 不会丢失content-type信息。 block.blob = block.chunks === 1 ? file.source : file.source.slice( block.start, block.end ); // hook, 每个分片发送之前可能要做些异步的事情。 promise = me.request( 'before-send', block, function() { // 有可能文件已经上传出错了,所以不需要再传输了。 if ( file.getStatus() === Status.PROGRESS ) { me._doSend( block ); } else { me._popBlock( block ); Base.nextTick( me.__tick ); } }); // 如果为fail了,则跳过此分片。 promise.fail(function() { if ( file.remaning === 1 ) { me._finishFile( file ).always(function() { block.percentage = 1; me._popBlock( block ); me.owner.trigger( 'uploadComplete', file ); Base.nextTick( me.__tick ); }); } else { block.percentage = 1; me._popBlock( block ); Base.nextTick( me.__tick ); } }); }, /** * @event uploadBeforeSend * @param {Object} object * @param {Object} data 默认的上传参数,可以扩展此对象来控制上传参数。 * @param {Object} headers 可以扩展此对象来控制上传头部。 * @description 当某个文件的分块在发送前触发,主要用来询问是否要添加附带参数,大文件在开起分片上传的前提下此事件可能会触发多次。 * @for Uploader */ /** * @event uploadAccept * @param {Object} object * @param {Object} ret 服务端的返回数据,json格式,如果服务端不是json格式,从ret._raw中取数据,自行解析。 * @description 当某个文件上传到服务端响应后,会派送此事件来询问服务端响应是否有效。如果此事件handler返回值为`false`, 则此文件将派送`server`类型的`uploadError`事件。 * @for Uploader */ /** * @event uploadProgress * @param {File} file File对象 * @param {Number} percentage 上传进度 * @description 上传过程中触发,携带上传进度。 * @for Uploader */ /** * @event uploadError * @param {File} file File对象 * @param {String} reason 出错的code * @description 当文件上传出错时触发。 * @for Uploader */ /** * @event uploadSuccess * @param {File} file File对象 * @param {Object} response 服务端返回的数据 * @description 当文件上传成功时触发。 * @for Uploader */ /** * @event uploadComplete * @param {File} [file] File对象 * @description 不管成功或者失败,文件上传完成时触发。 * @for Uploader */ // 做上传操作。 _doSend: function( block ) { var me = this, owner = me.owner, opts = me.options, file = block.file, tr = new Transport( opts ), data = $.extend({}, opts.formData ), headers = $.extend({}, opts.headers ), requestAccept, ret; block.transport = tr; tr.on( 'destroy', function() { delete block.transport; me._popBlock( block ); Base.nextTick( me.__tick ); }); // 广播上传进度。以文件为单位。 tr.on( 'progress', function( percentage ) { var totalPercent = 0, uploaded = 0; // 可能没有abort掉,progress还是执行进来了。 // if ( !file.blocks ) { // return; // } totalPercent = block.percentage = percentage; if ( block.chunks > 1 ) { // 计算文件的整体速度。 $.each( file.blocks, function( _, v ) { uploaded += (v.percentage || 0) * (v.end - v.start); }); totalPercent = uploaded / file.size; } owner.trigger( 'uploadProgress', file, totalPercent || 0 ); }); // 用来询问,是否返回的结果是有错误的。 requestAccept = function( reject ) { var fn; ret = tr.getResponseAsJson() || {}; ret._raw = tr.getResponse(); fn = function( value ) { reject = value; }; // 服务端响应了,不代表成功了,询问是否响应正确。 if ( !owner.trigger( 'uploadAccept', block, ret, fn ) ) { reject = reject || 'server'; } return reject; }; // 尝试重试,然后广播文件上传出错。 tr.on( 'error', function( type, flag ) { block.retried = block.retried || 0; // 自动重试 if ( block.chunks > 1 && ~'http,abort'.indexOf( type ) && block.retried < opts.chunkRetry ) { block.retried++; tr.send(); } else { // http status 500 ~ 600 if ( !flag && type === 'server' ) { type = requestAccept( type ); } file.setStatus( Status.ERROR, type ); owner.trigger( 'uploadError', file, type ); owner.trigger( 'uploadComplete', file ); } }); // 上传成功 tr.on( 'load', function() { var reason; // 如果非预期,转向上传出错。 if ( (reason = requestAccept()) ) { tr.trigger( 'error', reason, true ); return; } // 全部上传完成。 if ( file.remaning === 1 ) { me._finishFile( file, ret ); } else { tr.destroy(); } }); // 配置默认的上传字段。 data = $.extend( data, { id: file.id, name: file.name, type: file.type, lastModifiedDate: file.lastModifiedDate, size: file.size }); block.chunks > 1 && $.extend( data, { chunks: block.chunks, chunk: block.chunk }); // 在发送之间可以添加字段什么的。。。 // 如果默认的字段不够使用,可以通过监听此事件来扩展 owner.trigger( 'uploadBeforeSend', block, data, headers ); // 开始发送。 tr.appendBlob( opts.fileVal, block.blob, file.name ); tr.append( data ); tr.setRequestHeader( headers ); tr.send(); }, // 完成上传。 _finishFile: function( file, ret, hds ) { var owner = this.owner; return owner .request( 'after-send-file', arguments, function() { file.setStatus( Status.COMPLETE ); owner.trigger( 'uploadSuccess', file, ret, hds ); }) .fail(function( reason ) { // 如果外部已经标记为invalid什么的,不再改状态。 if ( file.getStatus() === Status.PROGRESS ) { file.setStatus( Status.ERROR, reason ); } owner.trigger( 'uploadError', file, reason ); }) .always(function() { owner.trigger( 'uploadComplete', file ); }); } }); }); /** * @fileOverview 各种验证,包括文件总大小是否超出、单文件是否超出和文件是否重复。 */ define('widgets/validator',[ 'base', 'uploader', 'file', 'widgets/widget' ], function( Base, Uploader, WUFile ) { var $ = Base.$, validators = {}, api; /** * @event error * @param {String} type 错误类型。 * @description 当validate不通过时,会以派送错误事件的形式通知调用者。通过`upload.on('error', handler)`可以捕获到此类错误,目前有以下错误会在特定的情况下派送错来。 * * * `Q_EXCEED_NUM_LIMIT` 在设置了`fileNumLimit`且尝试给`uploader`添加的文件数量超出这个值时派送。 * * `Q_EXCEED_SIZE_LIMIT` 在设置了`Q_EXCEED_SIZE_LIMIT`且尝试给`uploader`添加的文件总大小超出这个值时派送。 * * `Q_TYPE_DENIED` 当文件类型不满足时触发。。 * @for Uploader */ // 暴露给外面的api api = { // 添加验证器 addValidator: function( type, cb ) { validators[ type ] = cb; }, // 移除验证器 removeValidator: function( type ) { delete validators[ type ]; } }; // 在Uploader初始化的时候启动Validators的初始化 Uploader.register({ name: 'validator', init: function() { var me = this; Base.nextTick(function() { $.each( validators, function() { this.call( me.owner ); }); }); } }); /** * @property {int} [fileNumLimit=undefined] * @namespace options * @for Uploader * @description 验证文件总数量, 超出则不允许加入队列。 */ api.addValidator( 'fileNumLimit', function() { var uploader = this, opts = uploader.options, count = 0, max = parseInt( opts.fileNumLimit, 10 ), flag = true; if ( !max ) { return; } uploader.on( 'beforeFileQueued', function( file ) { if ( count >= max && flag ) { flag = false; this.trigger( 'error', 'Q_EXCEED_NUM_LIMIT', max, file ); setTimeout(function() { flag = true; }, 1 ); } return count >= max ? false : true; }); uploader.on( 'fileQueued', function() { count++; }); uploader.on( 'fileDequeued', function() { count--; }); uploader.on( 'reset', function() { count = 0; }); }); /** * @property {int} [fileSizeLimit=undefined] * @namespace options * @for Uploader * @description 验证文件总大小是否超出限制, 超出则不允许加入队列。 */ api.addValidator( 'fileSizeLimit', function() { var uploader = this, opts = uploader.options, count = 0, max = parseInt( opts.fileSizeLimit, 10 ), flag = true; if ( !max ) { return; } uploader.on( 'beforeFileQueued', function( file ) { var invalid = count + file.size > max; if ( invalid && flag ) { flag = false; this.trigger( 'error', 'Q_EXCEED_SIZE_LIMIT', max, file ); setTimeout(function() { flag = true; }, 1 ); } return invalid ? false : true; }); uploader.on( 'fileQueued', function( file ) { count += file.size; }); uploader.on( 'fileDequeued', function( file ) { count -= file.size; }); uploader.on( 'reset', function() { count = 0; }); }); /** * @property {int} [fileSingleSizeLimit=undefined] * @namespace options * @for Uploader * @description 验证单个文件大小是否超出限制, 超出则不允许加入队列。 */ api.addValidator( 'fileSingleSizeLimit', function() { var uploader = this, opts = uploader.options, max = opts.fileSingleSizeLimit; if ( !max ) { return; } uploader.on( 'beforeFileQueued', function( file ) { if ( file.size > max ) { file.setStatus( WUFile.Status.INVALID, 'exceed_size' ); this.trigger( 'error', 'F_EXCEED_SIZE', max, file ); return false; } }); }); /** * @property {Boolean} [duplicate=undefined] * @namespace options * @for Uploader * @description 去重, 根据文件名字、文件大小和最后修改时间来生成hash Key. */ api.addValidator( 'duplicate', function() { var uploader = this, opts = uploader.options, mapping = {}; if ( opts.duplicate ) { return; } function hashString( str ) { var hash = 0, i = 0, len = str.length, _char; for ( ; i < len; i++ ) { _char = str.charCodeAt( i ); hash = _char + (hash << 6) + (hash << 16) - hash; } return hash; } uploader.on( 'beforeFileQueued', function( file ) { var hash = file.__hash || (file.__hash = hashString( file.name + file.size + file.lastModifiedDate )); // 已经重复了 if ( mapping[ hash ] ) { this.trigger( 'error', 'F_DUPLICATE', file ); return false; } }); uploader.on( 'fileQueued', function( file ) { var hash = file.__hash; hash && (mapping[ hash ] = true); }); uploader.on( 'fileDequeued', function( file ) { var hash = file.__hash; hash && (delete mapping[ hash ]); }); uploader.on( 'reset', function() { mapping = {}; }); }); return api; }); /** * @fileOverview Runtime管理器,负责Runtime的选择, 连接 */ define('runtime/compbase',[],function() { function CompBase( owner, runtime ) { this.owner = owner; this.options = owner.options; this.getRuntime = function() { return runtime; }; this.getRuid = function() { return runtime.uid; }; this.trigger = function() { return owner.trigger.apply( owner, arguments ); }; } return CompBase; }); /** * @fileOverview Html5Runtime */ define('runtime/html5/runtime',[ 'base', 'runtime/runtime', 'runtime/compbase' ], function( Base, Runtime, CompBase ) { var type = 'html5', components = {}; function Html5Runtime() { var pool = {}, me = this, destroy = this.destroy; Runtime.apply( me, arguments ); me.type = type; // 这个方法的调用者,实际上是RuntimeClient me.exec = function( comp, fn/*, args...*/) { var client = this, uid = client.uid, args = Base.slice( arguments, 2 ), instance; if ( components[ comp ] ) { instance = pool[ uid ] = pool[ uid ] || new components[ comp ]( client, me ); if ( instance[ fn ] ) { return instance[ fn ].apply( instance, args ); } } }; me.destroy = function() { // @todo 删除池子中的所有实例 return destroy && destroy.apply( this, arguments ); }; } Base.inherits( Runtime, { constructor: Html5Runtime, // 不需要连接其他程序,直接执行callback init: function() { var me = this; setTimeout(function() { me.trigger('ready'); }, 1 ); } }); // 注册Components Html5Runtime.register = function( name, component ) { var klass = components[ name ] = Base.inherits( CompBase, component ); return klass; }; // 注册html5运行时。 // 只有在支持的前提下注册。 if ( window.Blob && window.FileReader && window.DataView ) { Runtime.addRuntime( type, Html5Runtime ); } return Html5Runtime; }); /** * @fileOverview Blob Html实现 */ define('runtime/html5/blob',[ 'runtime/html5/runtime', 'lib/blob' ], function( Html5Runtime, Blob ) { return Html5Runtime.register( 'Blob', { slice: function( start, end ) { var blob = this.owner.source, slice = blob.slice || blob.webkitSlice || blob.mozSlice; blob = slice.call( blob, start, end ); return new Blob( this.getRuid(), blob ); } }); }); /** * @fileOverview FilePaste */ define('runtime/html5/dnd',[ 'base', 'runtime/html5/runtime', 'lib/file' ], function( Base, Html5Runtime, File ) { var $ = Base.$, prefix = 'webuploader-dnd-'; return Html5Runtime.register( 'DragAndDrop', { init: function() { var elem = this.elem = this.options.container; this.dragEnterHandler = Base.bindFn( this._dragEnterHandler, this ); this.dragOverHandler = Base.bindFn( this._dragOverHandler, this ); this.dragLeaveHandler = Base.bindFn( this._dragLeaveHandler, this ); this.dropHandler = Base.bindFn( this._dropHandler, this ); this.dndOver = false; elem.on( 'dragenter', this.dragEnterHandler ); elem.on( 'dragover', this.dragOverHandler ); elem.on( 'dragleave', this.dragLeaveHandler ); elem.on( 'drop', this.dropHandler ); if ( this.options.disableGlobalDnd ) { $( document ).on( 'dragover', this.dragOverHandler ); $( document ).on( 'drop', this.dropHandler ); } }, _dragEnterHandler: function( e ) { var me = this, denied = me._denied || false, items; e = e.originalEvent || e; if ( !me.dndOver ) { me.dndOver = true; // 注意只有 chrome 支持。 items = e.dataTransfer.items; if ( items && items.length ) { me._denied = denied = !me.trigger( 'accept', items ); } me.elem.addClass( prefix + 'over' ); me.elem[ denied ? 'addClass' : 'removeClass' ]( prefix + 'denied' ); } e.dataTransfer.dropEffect = denied ? 'none' : 'copy'; return false; }, _dragOverHandler: function( e ) { // 只处理框内的。 var parentElem = this.elem.parent().get( 0 ); if ( parentElem && !$.contains( parentElem, e.currentTarget ) ) { return false; } clearTimeout( this._leaveTimer ); this._dragEnterHandler.call( this, e ); return false; }, _dragLeaveHandler: function() { var me = this, handler; handler = function() { me.dndOver = false; me.elem.removeClass( prefix + 'over ' + prefix + 'denied' ); }; clearTimeout( me._leaveTimer ); me._leaveTimer = setTimeout( handler, 100 ); return false; }, _dropHandler: function( e ) { var me = this, ruid = me.getRuid(), parentElem = me.elem.parent().get( 0 ), dataTransfer, data; // 只处理框内的。 if ( parentElem && !$.contains( parentElem, e.currentTarget ) ) { return false; } e = e.originalEvent || e; dataTransfer = e.dataTransfer; // 如果是页面内拖拽,还不能处理,不阻止事件。 // 此处 ie11 下会报参数错误, try { data = dataTransfer.getData('text/html'); } catch( err ) { } if ( data ) { return; } me._getTansferFiles( dataTransfer, function( results ) { me.trigger( 'drop', $.map( results, function( file ) { return new File( ruid, file ); }) ); }); me.dndOver = false; me.elem.removeClass( prefix + 'over' ); return false; }, // 如果传入 callback 则去查看文件夹,否则只管当前文件夹。 _getTansferFiles: function( dataTransfer, callback ) { var results = [], promises = [], items, files, file, item, i, len, canAccessFolder; items = dataTransfer.items; files = dataTransfer.files; canAccessFolder = !!(items && items[ 0 ].webkitGetAsEntry); for ( i = 0, len = files.length; i < len; i++ ) { file = files[ i ]; item = items && items[ i ]; if ( canAccessFolder && item.webkitGetAsEntry().isDirectory ) { promises.push( this._traverseDirectoryTree( item.webkitGetAsEntry(), results ) ); } else { results.push( file ); } } Base.when.apply( Base, promises ).done(function() { if ( !results.length ) { return; } callback( results ); }); }, _traverseDirectoryTree: function( entry, results ) { var deferred = Base.Deferred(), me = this; if ( entry.isFile ) { entry.file(function( file ) { results.push( file ); deferred.resolve(); }); } else if ( entry.isDirectory ) { entry.createReader().readEntries(function( entries ) { var len = entries.length, promises = [], arr = [], // 为了保证顺序。 i; for ( i = 0; i < len; i++ ) { promises.push( me._traverseDirectoryTree( entries[ i ], arr ) ); } Base.when.apply( Base, promises ).then(function() { results.push.apply( results, arr ); deferred.resolve(); }, deferred.reject ); }); } return deferred.promise(); }, destroy: function() { var elem = this.elem; // 还没 init 就调用 destroy if (!elem) { return; } elem.off( 'dragenter', this.dragEnterHandler ); elem.off( 'dragover', this.dragOverHandler ); elem.off( 'dragleave', this.dragLeaveHandler ); elem.off( 'drop', this.dropHandler ); if ( this.options.disableGlobalDnd ) { $( document ).off( 'dragover', this.dragOverHandler ); $( document ).off( 'drop', this.dropHandler ); } } }); }); /** * @fileOverview FilePaste */ define('runtime/html5/filepaste',[ 'base', 'runtime/html5/runtime', 'lib/file' ], function( Base, Html5Runtime, File ) { return Html5Runtime.register( 'FilePaste', { init: function() { var opts = this.options, elem = this.elem = opts.container, accept = '.*', arr, i, len, item; // accetp的mimeTypes中生成匹配正则。 if ( opts.accept ) { arr = []; for ( i = 0, len = opts.accept.length; i < len; i++ ) { item = opts.accept[ i ].mimeTypes; item && arr.push( item ); } if ( arr.length ) { accept = arr.join(','); accept = accept.replace( /,/g, '|' ).replace( /\*/g, '.*' ); } } this.accept = accept = new RegExp( accept, 'i' ); this.hander = Base.bindFn( this._pasteHander, this ); elem.on( 'paste', this.hander ); }, _pasteHander: function( e ) { var allowed = [], ruid = this.getRuid(), items, item, blob, i, len; e = e.originalEvent || e; items = e.clipboardData.items; for ( i = 0, len = items.length; i < len; i++ ) { item = items[ i ]; if ( item.kind !== 'file' || !(blob = item.getAsFile()) ) { continue; } allowed.push( new File( ruid, blob ) ); } if ( allowed.length ) { // 不阻止非文件粘贴(文字粘贴)的事件冒泡 e.preventDefault(); e.stopPropagation(); this.trigger( 'paste', allowed ); } }, destroy: function() { this.elem.off( 'paste', this.hander ); } }); }); /** * @fileOverview FilePicker */ define('runtime/html5/filepicker',[ 'base', 'runtime/html5/runtime' ], function( Base, Html5Runtime ) { var $ = Base.$; return Html5Runtime.register( 'FilePicker', { init: function() { var container = this.getRuntime().getContainer(), me = this, owner = me.owner, opts = me.options, label = this.label = $( document.createElement('label') ), input = this.input = $( document.createElement('input') ), arr, i, len, mouseHandler; input.attr( 'type', 'file' ); input.attr( 'name', opts.name ); input.addClass('webuploader-element-invisible'); label.on( 'click', function() { input.trigger('click'); }); label.css({ opacity: 0, width: '100%', height: '100%', display: 'block', cursor: 'pointer', background: '#ffffff' }); if ( opts.multiple ) { input.attr( 'multiple', 'multiple' ); } // @todo Firefox不支持单独指定后缀 if ( opts.accept && opts.accept.length > 0 ) { arr = []; for ( i = 0, len = opts.accept.length; i < len; i++ ) { arr.push( opts.accept[ i ].mimeTypes ); } input.attr( 'accept', arr.join(',') ); } container.append( input ); container.append( label ); mouseHandler = function( e ) { owner.trigger( e.type ); }; input.on( 'change', function( e ) { var fn = arguments.callee, clone; me.files = e.target.files; // reset input clone = this.cloneNode( true ); clone.value = null; this.parentNode.replaceChild( clone, this ); input.off(); input = $( clone ).on( 'change', fn ) .on( 'mouseenter mouseleave', mouseHandler ); owner.trigger('change'); }); label.on( 'mouseenter mouseleave', mouseHandler ); }, getFiles: function() { return this.files; }, destroy: function() { this.input.off(); this.label.off(); } }); }); /** * @fileOverview Transport * @todo 支持chunked传输,优势: * 可以将大文件分成小块,挨个传输,可以提高大文件成功率,当失败的时候,也只需要重传那小部分, * 而不需要重头再传一次。另外断点续传也需要用chunked方式。 */ define('runtime/html5/transport',[ 'base', 'runtime/html5/runtime' ], function( Base, Html5Runtime ) { var noop = Base.noop, $ = Base.$; return Html5Runtime.register( 'Transport', { init: function() { this._status = 0; this._response = null; }, send: function() { var owner = this.owner, opts = this.options, xhr = this._initAjax(), blob = owner._blob, server = opts.server, formData, binary, fr; if ( opts.sendAsBinary ) { server += (/\?/.test( server ) ? '&' : '?') + $.param( owner._formData ); binary = blob.getSource(); } else { formData = new FormData(); $.each( owner._formData, function( k, v ) { formData.append( k, v ); }); formData.append( opts.fileVal, blob.getSource(), opts.filename || owner._formData.name || '' ); } if ( opts.withCredentials && 'withCredentials' in xhr ) { xhr.open( opts.method, server, true ); xhr.withCredentials = true; } else { xhr.open( opts.method, server ); } this._setRequestHeader( xhr, opts.headers ); if ( binary ) { // 强制设置成 content-type 为文件流。 xhr.overrideMimeType && xhr.overrideMimeType('application/octet-stream'); // android直接发送blob会导致服务端接收到的是空文件。 // bug详情。 // https://code.google.com/p/android/issues/detail?id=39882 // 所以先用fileReader读取出来再通过arraybuffer的方式发送。 if ( Base.os.android ) { fr = new FileReader(); fr.onload = function() { xhr.send( this.result ); fr = fr.onload = null; }; fr.readAsArrayBuffer( binary ); } else { xhr.send( binary ); } } else { xhr.send( formData ); } }, getResponse: function() { return this._response; }, getResponseAsJson: function() { return this._parseJson( this._response ); }, getStatus: function() { return this._status; }, abort: function() { var xhr = this._xhr; if ( xhr ) { xhr.upload.onprogress = noop; xhr.onreadystatechange = noop; xhr.abort(); this._xhr = xhr = null; } }, destroy: function() { this.abort(); }, _initAjax: function() { var me = this, xhr = new XMLHttpRequest(), opts = this.options; if ( opts.withCredentials && !('withCredentials' in xhr) && typeof XDomainRequest !== 'undefined' ) { xhr = new XDomainRequest(); } xhr.upload.onprogress = function( e ) { var percentage = 0; if ( e.lengthComputable ) { percentage = e.loaded / e.total; } return me.trigger( 'progress', percentage ); }; xhr.onreadystatechange = function() { if ( xhr.readyState !== 4 ) { return; } xhr.upload.onprogress = noop; xhr.onreadystatechange = noop; me._xhr = null; me._status = xhr.status; if ( xhr.status >= 200 && xhr.status < 300 ) { me._response = xhr.responseText; return me.trigger('load'); } else if ( xhr.status >= 500 && xhr.status < 600 ) { me._response = xhr.responseText; return me.trigger( 'error', 'server' ); } return me.trigger( 'error', me._status ? 'http' : 'abort' ); }; me._xhr = xhr; return xhr; }, _setRequestHeader: function( xhr, headers ) { $.each( headers, function( key, val ) { xhr.setRequestHeader( key, val ); }); }, _parseJson: function( str ) { var json; try { json = JSON.parse( str ); } catch ( ex ) { json = {}; } return json; } }); }); /** * @fileOverview FlashRuntime */ define('runtime/flash/runtime',[ 'base', 'runtime/runtime', 'runtime/compbase' ], function( Base, Runtime, CompBase ) { var $ = Base.$, type = 'flash', components = {}; function getFlashVersion() { var version; try { version = navigator.plugins[ 'Shockwave Flash' ]; version = version.description; } catch ( ex ) { try { version = new ActiveXObject('ShockwaveFlash.ShockwaveFlash') .GetVariable('$version'); } catch ( ex2 ) { version = '0.0'; } } version = version.match( /\d+/g ); return parseFloat( version[ 0 ] + '.' + version[ 1 ], 10 ); } function FlashRuntime() { var pool = {}, clients = {}, destroy = this.destroy, me = this, jsreciver = Base.guid('webuploader_'); Runtime.apply( me, arguments ); me.type = type; // 这个方法的调用者,实际上是RuntimeClient me.exec = function( comp, fn/*, args...*/ ) { var client = this, uid = client.uid, args = Base.slice( arguments, 2 ), instance; clients[ uid ] = client; if ( components[ comp ] ) { if ( !pool[ uid ] ) { pool[ uid ] = new components[ comp ]( client, me ); } instance = pool[ uid ]; if ( instance[ fn ] ) { return instance[ fn ].apply( instance, args ); } } return me.flashExec.apply( client, arguments ); }; function handler( evt, obj ) { var type = evt.type || evt, parts, uid; parts = type.split('::'); uid = parts[ 0 ]; type = parts[ 1 ]; // console.log.apply( console, arguments ); if ( type === 'Ready' && uid === me.uid ) { me.trigger('ready'); } else if ( clients[ uid ] ) { clients[ uid ].trigger( type.toLowerCase(), evt, obj ); } // Base.log( evt, obj ); } // flash的接受器。 window[ jsreciver ] = function() { var args = arguments; // 为了能捕获得到。 setTimeout(function() { handler.apply( null, args ); }, 1 ); }; this.jsreciver = jsreciver; this.destroy = function() { // @todo 删除池子中的所有实例 return destroy && destroy.apply( this, arguments ); }; this.flashExec = function( comp, fn ) { var flash = me.getFlash(), args = Base.slice( arguments, 2 ); return flash.exec( this.uid, comp, fn, args ); }; // @todo } Base.inherits( Runtime, { constructor: FlashRuntime, init: function() { var container = this.getContainer(), opts = this.options, html; // if not the minimal height, shims are not initialized // in older browsers (e.g FF3.6, IE6,7,8, Safari 4.0,5.0, etc) container.css({ position: 'absolute', top: '-8px', left: '-8px', width: '9px', height: '9px', overflow: 'hidden' }); // insert flash object html = '<object id="' + this.uid + '" type="application/' + 'x-shockwave-flash" data="' + opts.swf + '" '; if ( Base.browser.ie ) { html += 'classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" '; } html += 'width="100%" height="100%" style="outline:0">' + '<param name="movie" value="' + opts.swf + '" />' + '<param name="flashvars" value="uid=' + this.uid + '&jsreciver=' + this.jsreciver + '" />' + '<param name="wmode" value="transparent" />' + '<param name="allowscriptaccess" value="always" />' + '</object>'; container.html( html ); }, getFlash: function() { if ( this._flash ) { return this._flash; } this._flash = $( '#' + this.uid ).get( 0 ); return this._flash; } }); FlashRuntime.register = function( name, component ) { component = components[ name ] = Base.inherits( CompBase, $.extend({ // @todo fix this later flashExec: function() { var owner = this.owner, runtime = this.getRuntime(); return runtime.flashExec.apply( owner, arguments ); } }, component ) ); return component; }; if ( getFlashVersion() >= 11.4 ) { Runtime.addRuntime( type, FlashRuntime ); } return FlashRuntime; }); /** * @fileOverview FilePicker */ define('runtime/flash/filepicker',[ 'base', 'runtime/flash/runtime' ], function( Base, FlashRuntime ) { var $ = Base.$; return FlashRuntime.register( 'FilePicker', { init: function( opts ) { var copy = $.extend({}, opts ), len, i; // 修复Flash再没有设置title的情况下无法弹出flash文件选择框的bug. len = copy.accept && copy.accept.length; for ( i = 0; i < len; i++ ) { if ( !copy.accept[ i ].title ) { copy.accept[ i ].title = 'Files'; } } delete copy.button; delete copy.id; delete copy.container; this.flashExec( 'FilePicker', 'init', copy ); }, destroy: function() { this.flashExec( 'FilePicker', 'destroy' ); } }); }); /** * @fileOverview Transport flash实现 */ define('runtime/flash/transport',[ 'base', 'runtime/flash/runtime', 'runtime/client' ], function( Base, FlashRuntime, RuntimeClient ) { var $ = Base.$; return FlashRuntime.register( 'Transport', { init: function() { this._status = 0; this._response = null; this._responseJson = null; }, send: function() { var owner = this.owner, opts = this.options, xhr = this._initAjax(), blob = owner._blob, server = opts.server, binary; xhr.connectRuntime( blob.ruid ); if ( opts.sendAsBinary ) { server += (/\?/.test( server ) ? '&' : '?') + $.param( owner._formData ); binary = blob.uid; } else { $.each( owner._formData, function( k, v ) { xhr.exec( 'append', k, v ); }); xhr.exec( 'appendBlob', opts.fileVal, blob.uid, opts.filename || owner._formData.name || '' ); } this._setRequestHeader( xhr, opts.headers ); xhr.exec( 'send', { method: opts.method, url: server, forceURLStream: opts.forceURLStream, mimeType: 'application/octet-stream' }, binary ); }, getStatus: function() { return this._status; }, getResponse: function() { return this._response || ''; }, getResponseAsJson: function() { return this._responseJson; }, abort: function() { var xhr = this._xhr; if ( xhr ) { xhr.exec('abort'); xhr.destroy(); this._xhr = xhr = null; } }, destroy: function() { this.abort(); }, _initAjax: function() { var me = this, xhr = new RuntimeClient('XMLHttpRequest'); xhr.on( 'uploadprogress progress', function( e ) { var percent = e.loaded / e.total; percent = Math.min( 1, Math.max( 0, percent ) ); return me.trigger( 'progress', percent ); }); xhr.on( 'load', function() { var status = xhr.exec('getStatus'), readBody = false, err = '', p; xhr.off(); me._xhr = null; if ( status >= 200 && status < 300 ) { readBody = true; } else if ( status >= 500 && status < 600 ) { readBody = true; err = 'server'; } else { err = 'http'; } if ( readBody ) { me._response = xhr.exec('getResponse'); me._response = decodeURIComponent( me._response ); // flash 处理可能存在 bug, 没辙只能靠 js 了 // try { // me._responseJson = xhr.exec('getResponseAsJson'); // } catch ( error ) { p = window.JSON && window.JSON.parse || function( s ) { try { return new Function('return ' + s).call(); } catch ( err ) { return {}; } }; me._responseJson = me._response ? p(me._response) : {}; // } } xhr.destroy(); xhr = null; return err ? me.trigger( 'error', err ) : me.trigger('load'); }); xhr.on( 'error', function() { xhr.off(); me._xhr = null; me.trigger( 'error', 'http' ); }); me._xhr = xhr; return xhr; }, _setRequestHeader: function( xhr, headers ) { $.each( headers, function( key, val ) { xhr.exec( 'setRequestHeader', key, val ); }); } }); }); /** * @fileOverview 没有图像处理的版本。 */ define('preset/withoutimage',[ 'base', // widgets 'widgets/filednd', 'widgets/filepaste', 'widgets/filepicker', 'widgets/queue', 'widgets/runtime', 'widgets/upload', 'widgets/validator', // runtimes // html5 'runtime/html5/blob', 'runtime/html5/dnd', 'runtime/html5/filepaste', 'runtime/html5/filepicker', 'runtime/html5/transport', // flash 'runtime/flash/filepicker', 'runtime/flash/transport' ], function( Base ) { return Base; }); define('webuploader',[ 'preset/withoutimage' ], function( preset ) { return preset; }); return require('webuploader'); }); ================================================ FILE: public/vendor/dcat-admin/fonts/feather/iconfont.css ================================================ @font-face { font-family: "feather"; src: url('fonts/feather.eot?t=1525787366991'); /* IE9*/ src: url('fonts/feather.eot?t=1525787366991#iefix') format('embedded-opentype'), /* IE6-IE8 */ url('fonts/feather.woff?t=1525787366991') format('woff'), /* chrome, firefox */ url('fonts/feather.ttf?t=1525787366991') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/ url('fonts/feather.svg?t=1525787366991#feather') format('svg'); /* iOS 4.1- */ } .feather { /* use !important to prevent issues with browser extensions that change fonts */ font-family: 'feather' !important; speak: none; font-style: normal; font-weight: normal; font-variant: normal; text-transform: none; line-height: 1; /* Better Font Rendering =========== */ -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } .icon-alert-octagon:before { content: "\e81b"; } .icon-alert-circle:before { content: "\e81c"; } .icon-activity:before { content: "\e81d"; } .icon-alert-triangle:before { content: "\e81e"; } .icon-align-center:before { content: "\e81f"; } .icon-airplay:before { content: "\e820"; } .icon-align-justify:before { content: "\e821"; } .icon-align-left:before { content: "\e822"; } .icon-align-right:before { content: "\e823"; } .icon-arrow-down-left:before { content: "\e824"; } .icon-arrow-down-right:before { content: "\e825"; } .icon-anchor:before { content: "\e826"; } .icon-aperture:before { content: "\e827"; } .icon-arrow-left:before { content: "\e828"; } .icon-arrow-right:before { content: "\e829"; } .icon-arrow-down:before { content: "\e82a"; } .icon-arrow-up-left:before { content: "\e82b"; } .icon-arrow-up-right:before { content: "\e82c"; } .icon-arrow-up:before { content: "\e82d"; } .icon-award:before { content: "\e82e"; } .icon-bar-chart:before { content: "\e82f"; } .icon-at-sign:before { content: "\e830"; } .icon-bar-chart-2:before { content: "\e831"; } .icon-battery-charging:before { content: "\e832"; } .icon-bell-off:before { content: "\e833"; } .icon-battery:before { content: "\e834"; } .icon-bluetooth:before { content: "\e835"; } .icon-bell:before { content: "\e836"; } .icon-book:before { content: "\e837"; } .icon-briefcase:before { content: "\e838"; } .icon-camera-off:before { content: "\e839"; } .icon-calendar:before { content: "\e83a"; } .icon-bookmark:before { content: "\e83b"; } .icon-box:before { content: "\e83c"; } .icon-camera:before { content: "\e83d"; } .icon-check-circle:before { content: "\e83e"; } .icon-check:before { content: "\e83f"; } .icon-check-square:before { content: "\e840"; } .icon-cast:before { content: "\e841"; } .icon-chevron-down:before { content: "\e842"; } .icon-chevron-left:before { content: "\e843"; } .icon-chevron-right:before { content: "\e844"; } .icon-chevron-up:before { content: "\e845"; } .icon-chevrons-down:before { content: "\e846"; } .icon-chevrons-right:before { content: "\e847"; } .icon-chevrons-up:before { content: "\e848"; } .icon-chevrons-left:before { content: "\e849"; } .icon-circle:before { content: "\e84a"; } .icon-clipboard:before { content: "\e84b"; } .icon-chrome:before { content: "\e84c"; } .icon-clock:before { content: "\e84d"; } .icon-cloud-lightning:before { content: "\e84e"; } .icon-cloud-drizzle:before { content: "\e84f"; } .icon-cloud-rain:before { content: "\e850"; } .icon-cloud-off:before { content: "\e851"; } .icon-codepen:before { content: "\e852"; } .icon-cloud-snow:before { content: "\e853"; } .icon-compass:before { content: "\e854"; } .icon-copy:before { content: "\e855"; } .icon-corner-down-right:before { content: "\e856"; } .icon-corner-down-left:before { content: "\e857"; } .icon-corner-left-down:before { content: "\e858"; } .icon-corner-left-up:before { content: "\e859"; } .icon-corner-up-left:before { content: "\e85a"; } .icon-corner-up-right:before { content: "\e85b"; } .icon-corner-right-down:before { content: "\e85c"; } .icon-corner-right-up:before { content: "\e85d"; } .icon-cpu:before { content: "\e85e"; } .icon-credit-card:before { content: "\e85f"; } .icon-crosshair:before { content: "\e860"; } .icon-disc:before { content: "\e861"; } .icon-delete:before { content: "\e862"; } .icon-download-cloud:before { content: "\e863"; } .icon-download:before { content: "\e864"; } .icon-droplet:before { content: "\e865"; } .icon-edit-2:before { content: "\e866"; } .icon-edit:before { content: "\e867"; } .icon-edit-1:before { content: "\e868"; } .icon-external-link:before { content: "\e869"; } .icon-eye:before { content: "\e86a"; } .icon-feather:before { content: "\e86b"; } .icon-facebook:before { content: "\e86c"; } .icon-file-minus:before { content: "\e86d"; } .icon-eye-off:before { content: "\e86e"; } .icon-fast-forward:before { content: "\e86f"; } .icon-file-text:before { content: "\e870"; } .icon-film:before { content: "\e871"; } .icon-file:before { content: "\e872"; } .icon-file-plus:before { content: "\e873"; } .icon-folder:before { content: "\e874"; } .icon-filter:before { content: "\e875"; } .icon-flag:before { content: "\e876"; } .icon-globe:before { content: "\e877"; } .icon-grid:before { content: "\e878"; } .icon-heart:before { content: "\e879"; } .icon-home:before { content: "\e87a"; } .icon-github:before { content: "\e87b"; } .icon-image:before { content: "\e87c"; } .icon-inbox:before { content: "\e87d"; } .icon-layers:before { content: "\e87e"; } .icon-info:before { content: "\e87f"; } .icon-instagram:before { content: "\e880"; } .icon-layout:before { content: "\e881"; } .icon-link-2:before { content: "\e882"; } .icon-life-buoy:before { content: "\e883"; } .icon-link:before { content: "\e884"; } .icon-log-in:before { content: "\e885"; } .icon-list:before { content: "\e886"; } .icon-lock:before { content: "\e887"; } .icon-log-out:before { content: "\e888"; } .icon-loader:before { content: "\e889"; } .icon-mail:before { content: "\e88a"; } .icon-maximize-2:before { content: "\e88b"; } .icon-map:before { content: "\e88c"; } .icon-map-pin:before { content: "\e88e"; } .icon-menu:before { content: "\e88f"; } .icon-message-circle:before { content: "\e890"; } .icon-message-square:before { content: "\e891"; } .icon-minimize-2:before { content: "\e892"; } .icon-mic-off:before { content: "\e893"; } .icon-minus-circle:before { content: "\e894"; } .icon-mic:before { content: "\e895"; } .icon-minus-square:before { content: "\e896"; } .icon-minus:before { content: "\e897"; } .icon-moon:before { content: "\e898"; } .icon-monitor:before { content: "\e899"; } .icon-more-vertical:before { content: "\e89a"; } .icon-more-horizontal:before { content: "\e89b"; } .icon-move:before { content: "\e89c"; } .icon-music:before { content: "\e89d"; } .icon-navigation-2:before { content: "\e89e"; } .icon-navigation:before { content: "\e89f"; } .icon-octagon:before { content: "\e8a0"; } .icon-package:before { content: "\e8a1"; } .icon-pause-circle:before { content: "\e8a2"; } .icon-pause:before { content: "\e8a3"; } .icon-percent:before { content: "\e8a4"; } .icon-phone-call:before { content: "\e8a5"; } .icon-phone-forwarded:before { content: "\e8a6"; } .icon-phone-missed:before { content: "\e8a7"; } .icon-phone-off:before { content: "\e8a8"; } .icon-phone-incoming:before { content: "\e8a9"; } .icon-phone:before { content: "\e8aa"; } .icon-phone-outgoing:before { content: "\e8ab"; } .icon-pie-chart:before { content: "\e8ac"; } .icon-play-circle:before { content: "\e8ad"; } .icon-play:before { content: "\e8ae"; } .icon-plus-square:before { content: "\e8af"; } .icon-plus-circle:before { content: "\e8b0"; } .icon-plus:before { content: "\e8b1"; } .icon-pocket:before { content: "\e8b2"; } .icon-printer:before { content: "\e8b3"; } .icon-power:before { content: "\e8b4"; } .icon-radio:before { content: "\e8b5"; } .icon-repeat:before { content: "\e8b6"; } .icon-refresh-ccw:before { content: "\e8b7"; } .icon-rewind:before { content: "\e8b8"; } .icon-rotate-ccw:before { content: "\e8b9"; } .icon-refresh-cw:before { content: "\e8ba"; } .icon-rotate-cw:before { content: "\e8bb"; } .icon-save:before { content: "\e8bc"; } .icon-search:before { content: "\e8bd"; } .icon-server:before { content: "\e8be"; } .icon-scissors:before { content: "\e8bf"; } .icon-share-2:before { content: "\e8c0"; } .icon-share:before { content: "\e8c1"; } .icon-shield:before { content: "\e8c2"; } .icon-settings:before { content: "\e8c3"; } .icon-skip-back:before { content: "\e8c4"; } .icon-shuffle:before { content: "\e8c5"; } .icon-sidebar:before { content: "\e8c6"; } .icon-skip-forward:before { content: "\e8c7"; } .icon-slack:before { content: "\e8c8"; } .icon-slash:before { content: "\e8c9"; } .icon-smartphone:before { content: "\e8ca"; } .icon-square:before { content: "\e8cb"; } .icon-speaker:before { content: "\e8cc"; } .icon-star:before { content: "\e8cd"; } .icon-stop-circle:before { content: "\e8ce"; } .icon-sun:before { content: "\e8cf"; } .icon-sunrise:before { content: "\e8d0"; } .icon-tablet:before { content: "\e8d1"; } .icon-tag:before { content: "\e8d2"; } .icon-sunset:before { content: "\e8d3"; } .icon-target:before { content: "\e8d4"; } .icon-thermometer:before { content: "\e8d5"; } .icon-thumbs-up:before { content: "\e8d6"; } .icon-thumbs-down:before { content: "\e8d7"; } .icon-toggle-left:before { content: "\e8d8"; } .icon-toggle-right:before { content: "\e8d9"; } .icon-trash-2:before { content: "\e8da"; } .icon-trash:before { content: "\e8db"; } .icon-trending-up:before { content: "\e8dc"; } .icon-trending-down:before { content: "\e8dd"; } .icon-triangle:before { content: "\e8de"; } .icon-type:before { content: "\e8df"; } .icon-twitter:before { content: "\e8e0"; } .icon-upload:before { content: "\e8e1"; } .icon-umbrella:before { content: "\e8e2"; } .icon-upload-cloud:before { content: "\e8e3"; } .icon-unlock:before { content: "\e8e4"; } .icon-user-check:before { content: "\e8e5"; } .icon-user-minus:before { content: "\e8e6"; } .icon-user-plus:before { content: "\e8e7"; } .icon-user-x:before { content: "\e8e8"; } .icon-user:before { content: "\e8e9"; } .icon-users:before { content: "\e8ea"; } .icon-video-off:before { content: "\e8eb"; } .icon-video:before { content: "\e8ec"; } .icon-voicemail:before { content: "\e8ed"; } .icon-volume-x:before { content: "\e8ee"; } .icon-volume-2:before { content: "\e8ef"; } .icon-volume-1:before { content: "\e8f0"; } .icon-volume:before { content: "\e8f1"; } .icon-watch:before { content: "\e8f2"; } .icon-wifi:before { content: "\e8f3"; } .icon-x-square:before { content: "\e8f4"; } .icon-wind:before { content: "\e8f5"; } .icon-x:before { content: "\e8f6"; } .icon-x-circle:before { content: "\e8f7"; } .icon-zap:before { content: "\e8f8"; } .icon-zoom-in:before { content: "\e8f9"; } .icon-zoom-out:before { content: "\e8fa"; } .icon-command:before { content: "\e8fb"; } .icon-cloud:before { content: "\e8fc"; } .icon-hash:before { content: "\e8fd"; } .icon-headphones:before { content: "\e8fe"; } .icon-underline:before { content: "\e8ff"; } .icon-italic:before { content: "\e900"; } .icon-bold:before { content: "\e901"; } .icon-crop:before { content: "\e902"; } .icon-help-circle:before { content: "\e903"; } .icon-paperclip:before { content: "\e904"; } .icon-shopping-cart:before { content: "\e905"; } .icon-tv:before { content: "\e906"; } .icon-wifi-off:before { content: "\e907"; } .icon-minimize:before { content: "\e88d"; } .icon-maximize:before { content: "\e908"; } .icon-gitlab:before { content: "\e909"; } .icon-sliders:before { content: "\e90a"; } .icon-star-on:before { content: "\e90b"; } .icon-heart-on:before { content: "\e90c"; } .icon-archive:before { content: "\e90d"; } .icon-arrow-down-circle:before { content: "\e90e"; } .icon-arrow-up-circle:before { content: "\e90f"; } .icon-arrow-left-circle:before { content: "\e910"; } .icon-arrow-right-circle:before { content: "\e911"; } .icon-bar-chart-line-:before { content: "\e912"; } .icon-bar-chart-line:before { content: "\e913"; } .icon-book-open:before { content: "\e914"; } .icon-code:before { content: "\e915"; } .icon-database:before { content: "\e916"; } .icon-dollar-sign:before { content: "\e917"; } .icon-folder-plus:before { content: "\e918"; } .icon-gift:before { content: "\e919"; } .icon-folder-minus:before { content: "\e91a"; } .icon-git-commit:before { content: "\e91b"; } .icon-git-branch:before { content: "\e91c"; } .icon-git-pull-request:before { content: "\e91d"; } .icon-git-merge:before { content: "\e91e"; } .icon-linkedin:before { content: "\e91f"; } .icon-hard-drive:before { content: "\e920"; } .icon-more-vertical-:before { content: "\e921"; } .icon-more-horizontal-:before { content: "\e922"; } .icon-rss:before { content: "\e923"; } .icon-send:before { content: "\e924"; } .icon-shield-off:before { content: "\e925"; } .icon-shopping-bag:before { content: "\e926"; } .icon-terminal:before { content: "\e927"; } .icon-truck:before { content: "\e928"; } .icon-zap-off:before { content: "\e929"; } .icon-youtube:before { content: "\e92a"; } ================================================ FILE: public/vendor/dcat-admin/fonts/font-awesome/css/font-awesome.css ================================================ /*! * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) */ /* FONT PATH * -------------------------- */ @font-face { font-family: 'FontAwesome'; src: url('../fonts/fontawesome-webfont.eot?v=4.7.0'); src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'), url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg'); font-weight: normal; font-style: normal; } .fa { display: inline-block; font: normal normal normal 14px/1 FontAwesome; font-size: inherit; text-rendering: auto; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } /* makes the font 33% larger relative to the icon container */ .fa-lg { font-size: 1.33333333em; line-height: 0.75em; vertical-align: -15%; } .fa-2x { font-size: 2em; } .fa-3x { font-size: 3em; } .fa-4x { font-size: 4em; } .fa-5x { font-size: 5em; } .fa-fw { width: 1.28571429em; text-align: center; } .fa-ul { padding-left: 0; margin-left: 2.14285714em; list-style-type: none; } .fa-ul > li { position: relative; } .fa-li { position: absolute; left: -2.14285714em; width: 2.14285714em; top: 0.14285714em; text-align: center; } .fa-li.fa-lg { left: -1.85714286em; } .fa-border { padding: .2em .25em .15em; border: solid 0.08em #eeeeee; border-radius: .1em; } .fa-pull-left { float: left; } .fa-pull-right { float: right; } .fa.fa-pull-left { margin-right: .3em; } .fa.fa-pull-right { margin-left: .3em; } /* Deprecated as of 4.4.0 */ .pull-right { float: right; } .pull-left { float: left; } .fa.pull-left { margin-right: .3em; } .fa.pull-right { margin-left: .3em; } .fa-spin { -webkit-animation: fa-spin 2s infinite linear; animation: fa-spin 2s infinite linear; } .fa-pulse { -webkit-animation: fa-spin 1s infinite steps(8); animation: fa-spin 1s infinite steps(8); } @-webkit-keyframes fa-spin { 0% { -webkit-transform: rotate(0deg); transform: rotate(0deg); } 100% { -webkit-transform: rotate(359deg); transform: rotate(359deg); } } @keyframes fa-spin { 0% { -webkit-transform: rotate(0deg); transform: rotate(0deg); } 100% { -webkit-transform: rotate(359deg); transform: rotate(359deg); } } .fa-rotate-90 { -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)"; -webkit-transform: rotate(90deg); -ms-transform: rotate(90deg); transform: rotate(90deg); } .fa-rotate-180 { -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)"; -webkit-transform: rotate(180deg); -ms-transform: rotate(180deg); transform: rotate(180deg); } .fa-rotate-270 { -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)"; -webkit-transform: rotate(270deg); -ms-transform: rotate(270deg); transform: rotate(270deg); } .fa-flip-horizontal { -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)"; -webkit-transform: scale(-1, 1); -ms-transform: scale(-1, 1); transform: scale(-1, 1); } .fa-flip-vertical { -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"; -webkit-transform: scale(1, -1); -ms-transform: scale(1, -1); transform: scale(1, -1); } :root .fa-rotate-90, :root .fa-rotate-180, :root .fa-rotate-270, :root .fa-flip-horizontal, :root .fa-flip-vertical { filter: none; } .fa-stack { position: relative; display: inline-block; width: 2em; height: 2em; line-height: 2em; vertical-align: middle; } .fa-stack-1x, .fa-stack-2x { position: absolute; left: 0; width: 100%; text-align: center; } .fa-stack-1x { line-height: inherit; } .fa-stack-2x { font-size: 2em; } .fa-inverse { color: #ffffff; } /* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen readers do not read off random characters that represent icons */ .fa-glass:before { content: "\f000"; } .fa-music:before { content: "\f001"; } .fa-search:before { content: "\f002"; } .fa-envelope-o:before { content: "\f003"; } .fa-heart:before { content: "\f004"; } .fa-star:before { content: "\f005"; } .fa-star-o:before { content: "\f006"; } .fa-user:before { content: "\f007"; } .fa-film:before { content: "\f008"; } .fa-th-large:before { content: "\f009"; } .fa-th:before { content: "\f00a"; } .fa-th-list:before { content: "\f00b"; } .fa-check:before { content: "\f00c"; } .fa-remove:before, .fa-close:before, .fa-times:before { content: "\f00d"; } .fa-search-plus:before { content: "\f00e"; } .fa-search-minus:before { content: "\f010"; } .fa-power-off:before { content: "\f011"; } .fa-signal:before { content: "\f012"; } .fa-gear:before, .fa-cog:before { content: "\f013"; } .fa-trash-o:before { content: "\f014"; } .fa-home:before { content: "\f015"; } .fa-file-o:before { content: "\f016"; } .fa-clock-o:before { content: "\f017"; } .fa-road:before { content: "\f018"; } .fa-download:before { content: "\f019"; } .fa-arrow-circle-o-down:before { content: "\f01a"; } .fa-arrow-circle-o-up:before { content: "\f01b"; } .fa-inbox:before { content: "\f01c"; } .fa-play-circle-o:before { content: "\f01d"; } .fa-rotate-right:before, .fa-repeat:before { content: "\f01e"; } .fa-refresh:before { content: "\f021"; } .fa-list-alt:before { content: "\f022"; } .fa-lock:before { content: "\f023"; } .fa-flag:before { content: "\f024"; } .fa-headphones:before { content: "\f025"; } .fa-volume-off:before { content: "\f026"; } .fa-volume-down:before { content: "\f027"; } .fa-volume-up:before { content: "\f028"; } .fa-qrcode:before { content: "\f029"; } .fa-barcode:before { content: "\f02a"; } .fa-tag:before { content: "\f02b"; } .fa-tags:before { content: "\f02c"; } .fa-book:before { content: "\f02d"; } .fa-bookmark:before { content: "\f02e"; } .fa-print:before { content: "\f02f"; } .fa-camera:before { content: "\f030"; } .fa-font:before { content: "\f031"; } .fa-bold:before { content: "\f032"; } .fa-italic:before { content: "\f033"; } .fa-text-height:before { content: "\f034"; } .fa-text-width:before { content: "\f035"; } .fa-align-left:before { content: "\f036"; } .fa-align-center:before { content: "\f037"; } .fa-align-right:before { content: "\f038"; } .fa-align-justify:before { content: "\f039"; } .fa-list:before { content: "\f03a"; } .fa-dedent:before, .fa-outdent:before { content: "\f03b"; } .fa-indent:before { content: "\f03c"; } .fa-video-camera:before { content: "\f03d"; } .fa-photo:before, .fa-image:before, .fa-picture-o:before { content: "\f03e"; } .fa-pencil:before { content: "\f040"; } .fa-map-marker:before { content: "\f041"; } .fa-adjust:before { content: "\f042"; } .fa-tint:before { content: "\f043"; } .fa-edit:before, .fa-pencil-square-o:before { content: "\f044"; } .fa-share-square-o:before { content: "\f045"; } .fa-check-square-o:before { content: "\f046"; } .fa-arrows:before { content: "\f047"; } .fa-step-backward:before { content: "\f048"; } .fa-fast-backward:before { content: "\f049"; } .fa-backward:before { content: "\f04a"; } .fa-play:before { content: "\f04b"; } .fa-pause:before { content: "\f04c"; } .fa-stop:before { content: "\f04d"; } .fa-forward:before { content: "\f04e"; } .fa-fast-forward:before { content: "\f050"; } .fa-step-forward:before { content: "\f051"; } .fa-eject:before { content: "\f052"; } .fa-chevron-left:before { content: "\f053"; } .fa-chevron-right:before { content: "\f054"; } .fa-plus-circle:before { content: "\f055"; } .fa-minus-circle:before { content: "\f056"; } .fa-times-circle:before { content: "\f057"; } .fa-check-circle:before { content: "\f058"; } .fa-question-circle:before { content: "\f059"; } .fa-info-circle:before { content: "\f05a"; } .fa-crosshairs:before { content: "\f05b"; } .fa-times-circle-o:before { content: "\f05c"; } .fa-check-circle-o:before { content: "\f05d"; } .fa-ban:before { content: "\f05e"; } .fa-arrow-left:before { content: "\f060"; } .fa-arrow-right:before { content: "\f061"; } .fa-arrow-up:before { content: "\f062"; } .fa-arrow-down:before { content: "\f063"; } .fa-mail-forward:before, .fa-share:before { content: "\f064"; } .fa-expand:before { content: "\f065"; } .fa-compress:before { content: "\f066"; } .fa-plus:before { content: "\f067"; } .fa-minus:before { content: "\f068"; } .fa-asterisk:before { content: "\f069"; } .fa-exclamation-circle:before { content: "\f06a"; } .fa-gift:before { content: "\f06b"; } .fa-leaf:before { content: "\f06c"; } .fa-fire:before { content: "\f06d"; } .fa-eye:before { content: "\f06e"; } .fa-eye-slash:before { content: "\f070"; } .fa-warning:before, .fa-exclamation-triangle:before { content: "\f071"; } .fa-plane:before { content: "\f072"; } .fa-calendar:before { content: "\f073"; } .fa-random:before { content: "\f074"; } .fa-comment:before { content: "\f075"; } .fa-magnet:before { content: "\f076"; } .fa-chevron-up:before { content: "\f077"; } .fa-chevron-down:before { content: "\f078"; } .fa-retweet:before { content: "\f079"; } .fa-shopping-cart:before { content: "\f07a"; } .fa-folder:before { content: "\f07b"; } .fa-folder-open:before { content: "\f07c"; } .fa-arrows-v:before { content: "\f07d"; } .fa-arrows-h:before { content: "\f07e"; } .fa-bar-chart-o:before, .fa-bar-chart:before { content: "\f080"; } .fa-twitter-square:before { content: "\f081"; } .fa-facebook-square:before { content: "\f082"; } .fa-camera-retro:before { content: "\f083"; } .fa-key:before { content: "\f084"; } .fa-gears:before, .fa-cogs:before { content: "\f085"; } .fa-comments:before { content: "\f086"; } .fa-thumbs-o-up:before { content: "\f087"; } .fa-thumbs-o-down:before { content: "\f088"; } .fa-star-half:before { content: "\f089"; } .fa-heart-o:before { content: "\f08a"; } .fa-sign-out:before { content: "\f08b"; } .fa-linkedin-square:before { content: "\f08c"; } .fa-thumb-tack:before { content: "\f08d"; } .fa-external-link:before { content: "\f08e"; } .fa-sign-in:before { content: "\f090"; } .fa-trophy:before { content: "\f091"; } .fa-github-square:before { content: "\f092"; } .fa-upload:before { content: "\f093"; } .fa-lemon-o:before { content: "\f094"; } .fa-phone:before { content: "\f095"; } .fa-square-o:before { content: "\f096"; } .fa-bookmark-o:before { content: "\f097"; } .fa-phone-square:before { content: "\f098"; } .fa-twitter:before { content: "\f099"; } .fa-facebook-f:before, .fa-facebook:before { content: "\f09a"; } .fa-github:before { content: "\f09b"; } .fa-unlock:before { content: "\f09c"; } .fa-credit-card:before { content: "\f09d"; } .fa-feed:before, .fa-rss:before { content: "\f09e"; } .fa-hdd-o:before { content: "\f0a0"; } .fa-bullhorn:before { content: "\f0a1"; } .fa-bell:before { content: "\f0f3"; } .fa-certificate:before { content: "\f0a3"; } .fa-hand-o-right:before { content: "\f0a4"; } .fa-hand-o-left:before { content: "\f0a5"; } .fa-hand-o-up:before { content: "\f0a6"; } .fa-hand-o-down:before { content: "\f0a7"; } .fa-arrow-circle-left:before { content: "\f0a8"; } .fa-arrow-circle-right:before { content: "\f0a9"; } .fa-arrow-circle-up:before { content: "\f0aa"; } .fa-arrow-circle-down:before { content: "\f0ab"; } .fa-globe:before { content: "\f0ac"; } .fa-wrench:before { content: "\f0ad"; } .fa-tasks:before { content: "\f0ae"; } .fa-filter:before { content: "\f0b0"; } .fa-briefcase:before { content: "\f0b1"; } .fa-arrows-alt:before { content: "\f0b2"; } .fa-group:before, .fa-users:before { content: "\f0c0"; } .fa-chain:before, .fa-link:before { content: "\f0c1"; } .fa-cloud:before { content: "\f0c2"; } .fa-flask:before { content: "\f0c3"; } .fa-cut:before, .fa-scissors:before { content: "\f0c4"; } .fa-copy:before, .fa-files-o:before { content: "\f0c5"; } .fa-paperclip:before { content: "\f0c6"; } .fa-save:before, .fa-floppy-o:before { content: "\f0c7"; } .fa-square:before { content: "\f0c8"; } .fa-navicon:before, .fa-reorder:before, .fa-bars:before { content: "\f0c9"; } .fa-list-ul:before { content: "\f0ca"; } .fa-list-ol:before { content: "\f0cb"; } .fa-strikethrough:before { content: "\f0cc"; } .fa-underline:before { content: "\f0cd"; } .fa-table:before { content: "\f0ce"; } .fa-magic:before { content: "\f0d0"; } .fa-truck:before { content: "\f0d1"; } .fa-pinterest:before { content: "\f0d2"; } .fa-pinterest-square:before { content: "\f0d3"; } .fa-google-plus-square:before { content: "\f0d4"; } .fa-google-plus:before { content: "\f0d5"; } .fa-money:before { content: "\f0d6"; } .fa-caret-down:before { content: "\f0d7"; } .fa-caret-up:before { content: "\f0d8"; } .fa-caret-left:before { content: "\f0d9"; } .fa-caret-right:before { content: "\f0da"; } .fa-columns:before { content: "\f0db"; } .fa-unsorted:before, .fa-sort:before { content: "\f0dc"; } .fa-sort-down:before, .fa-sort-desc:before { content: "\f0dd"; } .fa-sort-up:before, .fa-sort-asc:before { content: "\f0de"; } .fa-envelope:before { content: "\f0e0"; } .fa-linkedin:before { content: "\f0e1"; } .fa-rotate-left:before, .fa-undo:before { content: "\f0e2"; } .fa-legal:before, .fa-gavel:before { content: "\f0e3"; } .fa-dashboard:before, .fa-tachometer:before { content: "\f0e4"; } .fa-comment-o:before { content: "\f0e5"; } .fa-comments-o:before { content: "\f0e6"; } .fa-flash:before, .fa-bolt:before { content: "\f0e7"; } .fa-sitemap:before { content: "\f0e8"; } .fa-umbrella:before { content: "\f0e9"; } .fa-paste:before, .fa-clipboard:before { content: "\f0ea"; } .fa-lightbulb-o:before { content: "\f0eb"; } .fa-exchange:before { content: "\f0ec"; } .fa-cloud-download:before { content: "\f0ed"; } .fa-cloud-upload:before { content: "\f0ee"; } .fa-user-md:before { content: "\f0f0"; } .fa-stethoscope:before { content: "\f0f1"; } .fa-suitcase:before { content: "\f0f2"; } .fa-bell-o:before { content: "\f0a2"; } .fa-coffee:before { content: "\f0f4"; } .fa-cutlery:before { content: "\f0f5"; } .fa-file-text-o:before { content: "\f0f6"; } .fa-building-o:before { content: "\f0f7"; } .fa-hospital-o:before { content: "\f0f8"; } .fa-ambulance:before { content: "\f0f9"; } .fa-medkit:before { content: "\f0fa"; } .fa-fighter-jet:before { content: "\f0fb"; } .fa-beer:before { content: "\f0fc"; } .fa-h-square:before { content: "\f0fd"; } .fa-plus-square:before { content: "\f0fe"; } .fa-angle-double-left:before { content: "\f100"; } .fa-angle-double-right:before { content: "\f101"; } .fa-angle-double-up:before { content: "\f102"; } .fa-angle-double-down:before { content: "\f103"; } .fa-angle-left:before { content: "\f104"; } .fa-angle-right:before { content: "\f105"; } .fa-angle-up:before { content: "\f106"; } .fa-angle-down:before { content: "\f107"; } .fa-desktop:before { content: "\f108"; } .fa-laptop:before { content: "\f109"; } .fa-tablet:before { content: "\f10a"; } .fa-mobile-phone:before, .fa-mobile:before { content: "\f10b"; } .fa-circle-o:before { content: "\f10c"; } .fa-quote-left:before { content: "\f10d"; } .fa-quote-right:before { content: "\f10e"; } .fa-spinner:before { content: "\f110"; } .fa-circle:before { content: "\f111"; } .fa-mail-reply:before, .fa-reply:before { content: "\f112"; } .fa-github-alt:before { content: "\f113"; } .fa-folder-o:before { content: "\f114"; } .fa-folder-open-o:before { content: "\f115"; } .fa-smile-o:before { content: "\f118"; } .fa-frown-o:before { content: "\f119"; } .fa-meh-o:before { content: "\f11a"; } .fa-gamepad:before { content: "\f11b"; } .fa-keyboard-o:before { content: "\f11c"; } .fa-flag-o:before { content: "\f11d"; } .fa-flag-checkered:before { content: "\f11e"; } .fa-terminal:before { content: "\f120"; } .fa-code:before { content: "\f121"; } .fa-mail-reply-all:before, .fa-reply-all:before { content: "\f122"; } .fa-star-half-empty:before, .fa-star-half-full:before, .fa-star-half-o:before { content: "\f123"; } .fa-location-arrow:before { content: "\f124"; } .fa-crop:before { content: "\f125"; } .fa-code-fork:before { content: "\f126"; } .fa-unlink:before, .fa-chain-broken:before { content: "\f127"; } .fa-question:before { content: "\f128"; } .fa-info:before { content: "\f129"; } .fa-exclamation:before { content: "\f12a"; } .fa-superscript:before { content: "\f12b"; } .fa-subscript:before { content: "\f12c"; } .fa-eraser:before { content: "\f12d"; } .fa-puzzle-piece:before { content: "\f12e"; } .fa-microphone:before { content: "\f130"; } .fa-microphone-slash:before { content: "\f131"; } .fa-shield:before { content: "\f132"; } .fa-calendar-o:before { content: "\f133"; } .fa-fire-extinguisher:before { content: "\f134"; } .fa-rocket:before { content: "\f135"; } .fa-maxcdn:before { content: "\f136"; } .fa-chevron-circle-left:before { content: "\f137"; } .fa-chevron-circle-right:before { content: "\f138"; } .fa-chevron-circle-up:before { content: "\f139"; } .fa-chevron-circle-down:before { content: "\f13a"; } .fa-html5:before { content: "\f13b"; } .fa-css3:before { content: "\f13c"; } .fa-anchor:before { content: "\f13d"; } .fa-unlock-alt:before { content: "\f13e"; } .fa-bullseye:before { content: "\f140"; } .fa-ellipsis-h:before { content: "\f141"; } .fa-ellipsis-v:before { content: "\f142"; } .fa-rss-square:before { content: "\f143"; } .fa-play-circle:before { content: "\f144"; } .fa-ticket:before { content: "\f145"; } .fa-minus-square:before { content: "\f146"; } .fa-minus-square-o:before { content: "\f147"; } .fa-level-up:before { content: "\f148"; } .fa-level-down:before { content: "\f149"; } .fa-check-square:before { content: "\f14a"; } .fa-pencil-square:before { content: "\f14b"; } .fa-external-link-square:before { content: "\f14c"; } .fa-share-square:before { content: "\f14d"; } .fa-compass:before { content: "\f14e"; } .fa-toggle-down:before, .fa-caret-square-o-down:before { content: "\f150"; } .fa-toggle-up:before, .fa-caret-square-o-up:before { content: "\f151"; } .fa-toggle-right:before, .fa-caret-square-o-right:before { content: "\f152"; } .fa-euro:before, .fa-eur:before { content: "\f153"; } .fa-gbp:before { content: "\f154"; } .fa-dollar:before, .fa-usd:before { content: "\f155"; } .fa-rupee:before, .fa-inr:before { content: "\f156"; } .fa-cny:before, .fa-rmb:before, .fa-yen:before, .fa-jpy:before { content: "\f157"; } .fa-ruble:before, .fa-rouble:before, .fa-rub:before { content: "\f158"; } .fa-won:before, .fa-krw:before { content: "\f159"; } .fa-bitcoin:before, .fa-btc:before { content: "\f15a"; } .fa-file:before { content: "\f15b"; } .fa-file-text:before { content: "\f15c"; } .fa-sort-alpha-asc:before { content: "\f15d"; } .fa-sort-alpha-desc:before { content: "\f15e"; } .fa-sort-amount-asc:before { content: "\f160"; } .fa-sort-amount-desc:before { content: "\f161"; } .fa-sort-numeric-asc:before { content: "\f162"; } .fa-sort-numeric-desc:before { content: "\f163"; } .fa-thumbs-up:before { content: "\f164"; } .fa-thumbs-down:before { content: "\f165"; } .fa-youtube-square:before { content: "\f166"; } .fa-youtube:before { content: "\f167"; } .fa-xing:before { content: "\f168"; } .fa-xing-square:before { content: "\f169"; } .fa-youtube-play:before { content: "\f16a"; } .fa-dropbox:before { content: "\f16b"; } .fa-stack-overflow:before { content: "\f16c"; } .fa-instagram:before { content: "\f16d"; } .fa-flickr:before { content: "\f16e"; } .fa-adn:before { content: "\f170"; } .fa-bitbucket:before { content: "\f171"; } .fa-bitbucket-square:before { content: "\f172"; } .fa-tumblr:before { content: "\f173"; } .fa-tumblr-square:before { content: "\f174"; } .fa-long-arrow-down:before { content: "\f175"; } .fa-long-arrow-up:before { content: "\f176"; } .fa-long-arrow-left:before { content: "\f177"; } .fa-long-arrow-right:before { content: "\f178"; } .fa-apple:before { content: "\f179"; } .fa-windows:before { content: "\f17a"; } .fa-android:before { content: "\f17b"; } .fa-linux:before { content: "\f17c"; } .fa-dribbble:before { content: "\f17d"; } .fa-skype:before { content: "\f17e"; } .fa-foursquare:before { content: "\f180"; } .fa-trello:before { content: "\f181"; } .fa-female:before { content: "\f182"; } .fa-male:before { content: "\f183"; } .fa-gittip:before, .fa-gratipay:before { content: "\f184"; } .fa-sun-o:before { content: "\f185"; } .fa-moon-o:before { content: "\f186"; } .fa-archive:before { content: "\f187"; } .fa-bug:before { content: "\f188"; } .fa-vk:before { content: "\f189"; } .fa-weibo:before { content: "\f18a"; } .fa-renren:before { content: "\f18b"; } .fa-pagelines:before { content: "\f18c"; } .fa-stack-exchange:before { content: "\f18d"; } .fa-arrow-circle-o-right:before { content: "\f18e"; } .fa-arrow-circle-o-left:before { content: "\f190"; } .fa-toggle-left:before, .fa-caret-square-o-left:before { content: "\f191"; } .fa-dot-circle-o:before { content: "\f192"; } .fa-wheelchair:before { content: "\f193"; } .fa-vimeo-square:before { content: "\f194"; } .fa-turkish-lira:before, .fa-try:before { content: "\f195"; } .fa-plus-square-o:before { content: "\f196"; } .fa-space-shuttle:before { content: "\f197"; } .fa-slack:before { content: "\f198"; } .fa-envelope-square:before { content: "\f199"; } .fa-wordpress:before { content: "\f19a"; } .fa-openid:before { content: "\f19b"; } .fa-institution:before, .fa-bank:before, .fa-university:before { content: "\f19c"; } .fa-mortar-board:before, .fa-graduation-cap:before { content: "\f19d"; } .fa-yahoo:before { content: "\f19e"; } .fa-google:before { content: "\f1a0"; } .fa-reddit:before { content: "\f1a1"; } .fa-reddit-square:before { content: "\f1a2"; } .fa-stumbleupon-circle:before { content: "\f1a3"; } .fa-stumbleupon:before { content: "\f1a4"; } .fa-delicious:before { content: "\f1a5"; } .fa-digg:before { content: "\f1a6"; } .fa-pied-piper-pp:before { content: "\f1a7"; } .fa-pied-piper-alt:before { content: "\f1a8"; } .fa-drupal:before { content: "\f1a9"; } .fa-joomla:before { content: "\f1aa"; } .fa-language:before { content: "\f1ab"; } .fa-fax:before { content: "\f1ac"; } .fa-building:before { content: "\f1ad"; } .fa-child:before { content: "\f1ae"; } .fa-paw:before { content: "\f1b0"; } .fa-spoon:before { content: "\f1b1"; } .fa-cube:before { content: "\f1b2"; } .fa-cubes:before { content: "\f1b3"; } .fa-behance:before { content: "\f1b4"; } .fa-behance-square:before { content: "\f1b5"; } .fa-steam:before { content: "\f1b6"; } .fa-steam-square:before { content: "\f1b7"; } .fa-recycle:before { content: "\f1b8"; } .fa-automobile:before, .fa-car:before { content: "\f1b9"; } .fa-cab:before, .fa-taxi:before { content: "\f1ba"; } .fa-tree:before { content: "\f1bb"; } .fa-spotify:before { content: "\f1bc"; } .fa-deviantart:before { content: "\f1bd"; } .fa-soundcloud:before { content: "\f1be"; } .fa-database:before { content: "\f1c0"; } .fa-file-pdf-o:before { content: "\f1c1"; } .fa-file-word-o:before { content: "\f1c2"; } .fa-file-excel-o:before { content: "\f1c3"; } .fa-file-powerpoint-o:before { content: "\f1c4"; } .fa-file-photo-o:before, .fa-file-picture-o:before, .fa-file-image-o:before { content: "\f1c5"; } .fa-file-zip-o:before, .fa-file-archive-o:before { content: "\f1c6"; } .fa-file-sound-o:before, .fa-file-audio-o:before { content: "\f1c7"; } .fa-file-movie-o:before, .fa-file-video-o:before { content: "\f1c8"; } .fa-file-code-o:before { content: "\f1c9"; } .fa-vine:before { content: "\f1ca"; } .fa-codepen:before { content: "\f1cb"; } .fa-jsfiddle:before { content: "\f1cc"; } .fa-life-bouy:before, .fa-life-buoy:before, .fa-life-saver:before, .fa-support:before, .fa-life-ring:before { content: "\f1cd"; } .fa-circle-o-notch:before { content: "\f1ce"; } .fa-ra:before, .fa-resistance:before, .fa-rebel:before { content: "\f1d0"; } .fa-ge:before, .fa-empire:before { content: "\f1d1"; } .fa-git-square:before { content: "\f1d2"; } .fa-git:before { content: "\f1d3"; } .fa-y-combinator-square:before, .fa-yc-square:before, .fa-hacker-news:before { content: "\f1d4"; } .fa-tencent-weibo:before { content: "\f1d5"; } .fa-qq:before { content: "\f1d6"; } .fa-wechat:before, .fa-weixin:before { content: "\f1d7"; } .fa-send:before, .fa-paper-plane:before { content: "\f1d8"; } .fa-send-o:before, .fa-paper-plane-o:before { content: "\f1d9"; } .fa-history:before { content: "\f1da"; } .fa-circle-thin:before { content: "\f1db"; } .fa-header:before { content: "\f1dc"; } .fa-paragraph:before { content: "\f1dd"; } .fa-sliders:before { content: "\f1de"; } .fa-share-alt:before { content: "\f1e0"; } .fa-share-alt-square:before { content: "\f1e1"; } .fa-bomb:before { content: "\f1e2"; } .fa-soccer-ball-o:before, .fa-futbol-o:before { content: "\f1e3"; } .fa-tty:before { content: "\f1e4"; } .fa-binoculars:before { content: "\f1e5"; } .fa-plug:before { content: "\f1e6"; } .fa-slideshare:before { content: "\f1e7"; } .fa-twitch:before { content: "\f1e8"; } .fa-yelp:before { content: "\f1e9"; } .fa-newspaper-o:before { content: "\f1ea"; } .fa-wifi:before { content: "\f1eb"; } .fa-calculator:before { content: "\f1ec"; } .fa-paypal:before { content: "\f1ed"; } .fa-google-wallet:before { content: "\f1ee"; } .fa-cc-visa:before { content: "\f1f0"; } .fa-cc-mastercard:before { content: "\f1f1"; } .fa-cc-discover:before { content: "\f1f2"; } .fa-cc-amex:before { content: "\f1f3"; } .fa-cc-paypal:before { content: "\f1f4"; } .fa-cc-stripe:before { content: "\f1f5"; } .fa-bell-slash:before { content: "\f1f6"; } .fa-bell-slash-o:before { content: "\f1f7"; } .fa-trash:before { content: "\f1f8"; } .fa-copyright:before { content: "\f1f9"; } .fa-at:before { content: "\f1fa"; } .fa-eyedropper:before { content: "\f1fb"; } .fa-paint-brush:before { content: "\f1fc"; } .fa-birthday-cake:before { content: "\f1fd"; } .fa-area-chart:before { content: "\f1fe"; } .fa-pie-chart:before { content: "\f200"; } .fa-line-chart:before { content: "\f201"; } .fa-lastfm:before { content: "\f202"; } .fa-lastfm-square:before { content: "\f203"; } .fa-toggle-off:before { content: "\f204"; } .fa-toggle-on:before { content: "\f205"; } .fa-bicycle:before { content: "\f206"; } .fa-bus:before { content: "\f207"; } .fa-ioxhost:before { content: "\f208"; } .fa-angellist:before { content: "\f209"; } .fa-cc:before { content: "\f20a"; } .fa-shekel:before, .fa-sheqel:before, .fa-ils:before { content: "\f20b"; } .fa-meanpath:before { content: "\f20c"; } .fa-buysellads:before { content: "\f20d"; } .fa-connectdevelop:before { content: "\f20e"; } .fa-dashcube:before { content: "\f210"; } .fa-forumbee:before { content: "\f211"; } .fa-leanpub:before { content: "\f212"; } .fa-sellsy:before { content: "\f213"; } .fa-shirtsinbulk:before { content: "\f214"; } .fa-simplybuilt:before { content: "\f215"; } .fa-skyatlas:before { content: "\f216"; } .fa-cart-plus:before { content: "\f217"; } .fa-cart-arrow-down:before { content: "\f218"; } .fa-diamond:before { content: "\f219"; } .fa-ship:before { content: "\f21a"; } .fa-user-secret:before { content: "\f21b"; } .fa-motorcycle:before { content: "\f21c"; } .fa-street-view:before { content: "\f21d"; } .fa-heartbeat:before { content: "\f21e"; } .fa-venus:before { content: "\f221"; } .fa-mars:before { content: "\f222"; } .fa-mercury:before { content: "\f223"; } .fa-intersex:before, .fa-transgender:before { content: "\f224"; } .fa-transgender-alt:before { content: "\f225"; } .fa-venus-double:before { content: "\f226"; } .fa-mars-double:before { content: "\f227"; } .fa-venus-mars:before { content: "\f228"; } .fa-mars-stroke:before { content: "\f229"; } .fa-mars-stroke-v:before { content: "\f22a"; } .fa-mars-stroke-h:before { content: "\f22b"; } .fa-neuter:before { content: "\f22c"; } .fa-genderless:before { content: "\f22d"; } .fa-facebook-official:before { content: "\f230"; } .fa-pinterest-p:before { content: "\f231"; } .fa-whatsapp:before { content: "\f232"; } .fa-server:before { content: "\f233"; } .fa-user-plus:before { content: "\f234"; } .fa-user-times:before { content: "\f235"; } .fa-hotel:before, .fa-bed:before { content: "\f236"; } .fa-viacoin:before { content: "\f237"; } .fa-train:before { content: "\f238"; } .fa-subway:before { content: "\f239"; } .fa-medium:before { content: "\f23a"; } .fa-yc:before, .fa-y-combinator:before { content: "\f23b"; } .fa-optin-monster:before { content: "\f23c"; } .fa-opencart:before { content: "\f23d"; } .fa-expeditedssl:before { content: "\f23e"; } .fa-battery-4:before, .fa-battery:before, .fa-battery-full:before { content: "\f240"; } .fa-battery-3:before, .fa-battery-three-quarters:before { content: "\f241"; } .fa-battery-2:before, .fa-battery-half:before { content: "\f242"; } .fa-battery-1:before, .fa-battery-quarter:before { content: "\f243"; } .fa-battery-0:before, .fa-battery-empty:before { content: "\f244"; } .fa-mouse-pointer:before { content: "\f245"; } .fa-i-cursor:before { content: "\f246"; } .fa-object-group:before { content: "\f247"; } .fa-object-ungroup:before { content: "\f248"; } .fa-sticky-note:before { content: "\f249"; } .fa-sticky-note-o:before { content: "\f24a"; } .fa-cc-jcb:before { content: "\f24b"; } .fa-cc-diners-club:before { content: "\f24c"; } .fa-clone:before { content: "\f24d"; } .fa-balance-scale:before { content: "\f24e"; } .fa-hourglass-o:before { content: "\f250"; } .fa-hourglass-1:before, .fa-hourglass-start:before { content: "\f251"; } .fa-hourglass-2:before, .fa-hourglass-half:before { content: "\f252"; } .fa-hourglass-3:before, .fa-hourglass-end:before { content: "\f253"; } .fa-hourglass:before { content: "\f254"; } .fa-hand-grab-o:before, .fa-hand-rock-o:before { content: "\f255"; } .fa-hand-stop-o:before, .fa-hand-paper-o:before { content: "\f256"; } .fa-hand-scissors-o:before { content: "\f257"; } .fa-hand-lizard-o:before { content: "\f258"; } .fa-hand-spock-o:before { content: "\f259"; } .fa-hand-pointer-o:before { content: "\f25a"; } .fa-hand-peace-o:before { content: "\f25b"; } .fa-trademark:before { content: "\f25c"; } .fa-registered:before { content: "\f25d"; } .fa-creative-commons:before { content: "\f25e"; } .fa-gg:before { content: "\f260"; } .fa-gg-circle:before { content: "\f261"; } .fa-tripadvisor:before { content: "\f262"; } .fa-odnoklassniki:before { content: "\f263"; } .fa-odnoklassniki-square:before { content: "\f264"; } .fa-get-pocket:before { content: "\f265"; } .fa-wikipedia-w:before { content: "\f266"; } .fa-safari:before { content: "\f267"; } .fa-chrome:before { content: "\f268"; } .fa-firefox:before { content: "\f269"; } .fa-opera:before { content: "\f26a"; } .fa-internet-explorer:before { content: "\f26b"; } .fa-tv:before, .fa-television:before { content: "\f26c"; } .fa-contao:before { content: "\f26d"; } .fa-500px:before { content: "\f26e"; } .fa-amazon:before { content: "\f270"; } .fa-calendar-plus-o:before { content: "\f271"; } .fa-calendar-minus-o:before { content: "\f272"; } .fa-calendar-times-o:before { content: "\f273"; } .fa-calendar-check-o:before { content: "\f274"; } .fa-industry:before { content: "\f275"; } .fa-map-pin:before { content: "\f276"; } .fa-map-signs:before { content: "\f277"; } .fa-map-o:before { content: "\f278"; } .fa-map:before { content: "\f279"; } .fa-commenting:before { content: "\f27a"; } .fa-commenting-o:before { content: "\f27b"; } .fa-houzz:before { content: "\f27c"; } .fa-vimeo:before { content: "\f27d"; } .fa-black-tie:before { content: "\f27e"; } .fa-fonticons:before { content: "\f280"; } .fa-reddit-alien:before { content: "\f281"; } .fa-edge:before { content: "\f282"; } .fa-credit-card-alt:before { content: "\f283"; } .fa-codiepie:before { content: "\f284"; } .fa-modx:before { content: "\f285"; } .fa-fort-awesome:before { content: "\f286"; } .fa-usb:before { content: "\f287"; } .fa-product-hunt:before { content: "\f288"; } .fa-mixcloud:before { content: "\f289"; } .fa-scribd:before { content: "\f28a"; } .fa-pause-circle:before { content: "\f28b"; } .fa-pause-circle-o:before { content: "\f28c"; } .fa-stop-circle:before { content: "\f28d"; } .fa-stop-circle-o:before { content: "\f28e"; } .fa-shopping-bag:before { content: "\f290"; } .fa-shopping-basket:before { content: "\f291"; } .fa-hashtag:before { content: "\f292"; } .fa-bluetooth:before { content: "\f293"; } .fa-bluetooth-b:before { content: "\f294"; } .fa-percent:before { content: "\f295"; } .fa-gitlab:before { content: "\f296"; } .fa-wpbeginner:before { content: "\f297"; } .fa-wpforms:before { content: "\f298"; } .fa-envira:before { content: "\f299"; } .fa-universal-access:before { content: "\f29a"; } .fa-wheelchair-alt:before { content: "\f29b"; } .fa-question-circle-o:before { content: "\f29c"; } .fa-blind:before { content: "\f29d"; } .fa-audio-description:before { content: "\f29e"; } .fa-volume-control-phone:before { content: "\f2a0"; } .fa-braille:before { content: "\f2a1"; } .fa-assistive-listening-systems:before { content: "\f2a2"; } .fa-asl-interpreting:before, .fa-american-sign-language-interpreting:before { content: "\f2a3"; } .fa-deafness:before, .fa-hard-of-hearing:before, .fa-deaf:before { content: "\f2a4"; } .fa-glide:before { content: "\f2a5"; } .fa-glide-g:before { content: "\f2a6"; } .fa-signing:before, .fa-sign-language:before { content: "\f2a7"; } .fa-low-vision:before { content: "\f2a8"; } .fa-viadeo:before { content: "\f2a9"; } .fa-viadeo-square:before { content: "\f2aa"; } .fa-snapchat:before { content: "\f2ab"; } .fa-snapchat-ghost:before { content: "\f2ac"; } .fa-snapchat-square:before { content: "\f2ad"; } .fa-pied-piper:before { content: "\f2ae"; } .fa-first-order:before { content: "\f2b0"; } .fa-yoast:before { content: "\f2b1"; } .fa-themeisle:before { content: "\f2b2"; } .fa-google-plus-circle:before, .fa-google-plus-official:before { content: "\f2b3"; } .fa-fa:before, .fa-font-awesome:before { content: "\f2b4"; } .fa-handshake-o:before { content: "\f2b5"; } .fa-envelope-open:before { content: "\f2b6"; } .fa-envelope-open-o:before { content: "\f2b7"; } .fa-linode:before { content: "\f2b8"; } .fa-address-book:before { content: "\f2b9"; } .fa-address-book-o:before { content: "\f2ba"; } .fa-vcard:before, .fa-address-card:before { content: "\f2bb"; } .fa-vcard-o:before, .fa-address-card-o:before { content: "\f2bc"; } .fa-user-circle:before { content: "\f2bd"; } .fa-user-circle-o:before { content: "\f2be"; } .fa-user-o:before { content: "\f2c0"; } .fa-id-badge:before { content: "\f2c1"; } .fa-drivers-license:before, .fa-id-card:before { content: "\f2c2"; } .fa-drivers-license-o:before, .fa-id-card-o:before { content: "\f2c3"; } .fa-quora:before { content: "\f2c4"; } .fa-free-code-camp:before { content: "\f2c5"; } .fa-telegram:before { content: "\f2c6"; } .fa-thermometer-4:before, .fa-thermometer:before, .fa-thermometer-full:before { content: "\f2c7"; } .fa-thermometer-3:before, .fa-thermometer-three-quarters:before { content: "\f2c8"; } .fa-thermometer-2:before, .fa-thermometer-half:before { content: "\f2c9"; } .fa-thermometer-1:before, .fa-thermometer-quarter:before { content: "\f2ca"; } .fa-thermometer-0:before, .fa-thermometer-empty:before { content: "\f2cb"; } .fa-shower:before { content: "\f2cc"; } .fa-bathtub:before, .fa-s15:before, .fa-bath:before { content: "\f2cd"; } .fa-podcast:before { content: "\f2ce"; } .fa-window-maximize:before { content: "\f2d0"; } .fa-window-minimize:before { content: "\f2d1"; } .fa-window-restore:before { content: "\f2d2"; } .fa-times-rectangle:before, .fa-window-close:before { content: "\f2d3"; } .fa-times-rectangle-o:before, .fa-window-close-o:before { content: "\f2d4"; } .fa-bandcamp:before { content: "\f2d5"; } .fa-grav:before { content: "\f2d6"; } .fa-etsy:before { content: "\f2d7"; } .fa-imdb:before { content: "\f2d8"; } .fa-ravelry:before { content: "\f2d9"; } .fa-eercast:before { content: "\f2da"; } .fa-microchip:before { content: "\f2db"; } .fa-snowflake-o:before { content: "\f2dc"; } .fa-superpowers:before { content: "\f2dd"; } .fa-wpexplorer:before { content: "\f2de"; } .fa-meetup:before { content: "\f2e0"; } .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); border: 0; } .sr-only-focusable:active, .sr-only-focusable:focus { position: static; width: auto; height: auto; margin: 0; overflow: visible; clip: auto; } ================================================ FILE: public/web.config ================================================ <!-- Rewrites requires Microsoft URL Rewrite Module for IIS Download: https://www.microsoft.com/en-us/download/details.aspx?id=47337 Debug Help: https://docs.microsoft.com/en-us/iis/extensions/url-rewrite-module/using-failed-request-tracing-to-trace-rewrite-rules --> <configuration> <system.webServer> <rewrite> <rules> <rule name="Imported Rule 1" stopProcessing="true"> <match url="^(.*)/$" ignoreCase="false" /> <conditions> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" /> </conditions> <action type="Redirect" redirectType="Permanent" url="/{R:1}" /> </rule> <rule name="Imported Rule 2" stopProcessing="true"> <match url="^" ignoreCase="false" /> <conditions> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" /> <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" /> </conditions> <action type="Rewrite" url="index.php" /> </rule> </rules> </rewrite> </system.webServer> </configuration> ================================================ FILE: resources/js/app.js ================================================ require('./bootstrap'); ================================================ FILE: resources/js/bootstrap.js ================================================ window._ = require('lodash'); /** * We'll load the axios HTTP library which allows us to easily issue requests * to our Laravel back-end. This library automatically handles sending the * CSRF token as a header based on the value of the "XSRF" token cookie. */ window.axios = require('axios'); window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; /** * Echo exposes an expressive API for subscribing to channels and listening * for events that are broadcast by Laravel. Echo and event broadcasting * allows your team to easily build robust real-time web applications. */ // import Echo from 'laravel-echo'; // window.Pusher = require('pusher-js'); // window.Echo = new Echo({ // broadcaster: 'pusher', // key: process.env.MIX_PUSHER_APP_KEY, // cluster: process.env.MIX_PUSHER_APP_CLUSTER, // forceTLS: true // }); ================================================ FILE: resources/lang/en/admin.php ================================================ <?php return [ 'scaffold' => [ 'header' => 'Scaffold', 'choose' => 'choose', 'table' => 'Table', 'model' => 'Model', 'controller' => 'Controller', 'repository' => 'Repository', 'add_field' => 'Add field', 'pk' => 'Primary key', 'soft_delete' => 'Soft delete', 'create_migration' => 'Create migration', 'create_model' => 'Create model', 'create_repository' => 'Create repository', 'create_controller' => 'Create controller', 'run_migrate' => 'Run migrate', 'create_lang' => 'Create lang', 'field' => 'field', 'translation' => 'translation', 'comment' => 'comment', 'default' => 'default', 'field_name' => 'field name', 'type' => 'type', 'nullable' => 'nullable', 'key' => 'key', 'translate_title' => 'Translate Title', 'sync_translation_with_comment' => 'Sync translation and comment', ], 'client' => [ 'delete_confirm' => 'Are you sure to delete this item ?', 'confirm' => 'Confirm', 'cancel' => 'Cancel', 'refresh_succeeded' => 'Refresh succeeded !', 'close' => 'Close', 'selected_options' => ':num options selected', 'exceed_max_item' => 'Maximum items exceeded.', 'no_preview' => 'No preview available.', '500' => 'Internal server error !', '403' => 'Permission deny !', '401' => 'Unauthorized !', '419' => 'Page expired !', ], 'online' => 'Online', 'login' => 'Login', 'logout' => 'Logout', 'setting' => 'Setting', 'name' => 'Name', 'username' => 'Username', 'user' => 'User', 'alias' => 'Alias', 'routes' => 'Routes', 'route_action' => 'Route Action', 'middleware' => 'Middleware', 'method' => 'Method', 'old_password' => 'Old password', 'password' => 'Password', 'password_confirmation' => 'Password confirmation', 'old_password_error' => 'Incorrect password', 'remember_me' => 'Remember me', 'user_setting' => 'User setting', 'avatar' => 'Avatar', 'list' => 'List', 'new' => 'New', 'create' => 'Create', 'delete' => 'Delete', 'remove' => 'Remove', 'edit' => 'Edit', 'quick_edit' => 'Quick Edit', 'view' => 'View', 'continue_editing' => 'Continue editing', 'continue_creating' => 'Continue creating', 'detail' => 'Detail', 'browse' => 'Browse', 'reset' => 'Reset', 'export' => 'Export', 'batch_delete' => 'Batch delete', 'save' => 'Save', 'refresh' => 'Refresh', 'order' => 'Order', 'expand' => 'Expand', 'collapse' => 'Collapse', 'filter' => 'Filter', 'search' => 'Search', 'close' => 'Close', 'show' => 'Show', 'entries' => 'entries', 'captcha' => 'Captcha', 'action' => 'Action', 'title' => 'Title', 'description' => 'Description', 'back' => 'Back', 'back_to_list' => 'Back to List', 'submit' => 'Submit', 'menu' => 'Menu', 'input' => 'Input', 'succeeded' => 'Succeeded', 'failed' => 'Failed', 'delete_confirm' => 'Are you sure to delete this item ?', 'delete_succeeded' => 'Delete succeeded !', 'delete_failed' => 'Delete failed !', 'update_succeeded' => 'Update succeeded !', 'update_failed' => 'Update failed !', 'save_succeeded' => 'Save succeeded !', 'save_failed' => 'Save failed !', 'refresh_succeeded' => 'Refresh succeeded !', 'login_successful' => 'Login successful', 'choose' => 'Choose', 'choose_file' => 'Select file', 'choose_image' => 'Select image', 'more' => 'More', 'deny' => 'Permission denied', 'administrator' => 'Administrator', 'no_data' => 'No data.', 'roles' => 'Roles', 'permissions' => 'Permissions', 'slug' => 'Slug', 'created_at' => 'Created At', 'updated_at' => 'Updated At', 'alert' => 'Alert', 'parent_id' => 'Parent', 'icon' => 'Icon', 'uri' => 'URI', 'operation_log' => 'Operation log', 'parent_select_error' => 'Parent select error', 'tree' => 'Tree', 'table' => 'Table', 'default' => 'Default', 'import' => 'Import', 'is_not_import' => 'No', 'selected_options' => ':num options selected', 'pagination' => [ 'range' => 'Showing :first to :last of :total entries', ], 'role' => 'Role', 'permission' => 'Permission', 'route' => 'Route', 'confirm' => 'Confirm', 'cancel' => 'Cancel', 'selectall' => 'Select all', 'http' => [ 'method' => 'HTTP method', 'path' => 'HTTP path', ], 'all_methods_if_empty' => 'All methods if empty', 'all' => 'All', 'current_page' => 'Current page', 'selected_rows' => 'Selected rows', 'upload' => 'Upload', 'new_folder' => 'New folder', 'time' => 'Time', 'size' => 'Size', 'between_start' => 'Start', 'between_end' => 'End', 'next_page' => 'Next', 'prev_page' => 'Previous', 'next_step' => 'Next', 'prev_step' => 'Previous', 'done' => 'Done', 'listbox' => [ 'text_total' => 'Showing all {0}', 'text_empty' => 'Empty list', 'filtered' => '{0} / {1}', 'filter_clear' => 'Show all', 'filter_placeholder' => 'Filter', ], 'responsive' => [ 'display_all' => 'Display all', 'display' => 'Display', 'focus' => 'Focus', ], 'uploader' => [ 'add_new_media' => 'Browse', 'drag_file' => 'Or drag file here', 'max_file_limit' => 'The :attribute may not be greater than :max.', 'exceed_size' => 'Exceeds the maximum file-size', 'interrupt' => 'Interrupt', 'upload_failed' => 'Upload failed! Please try again.', 'selected_files' => ':num files selected,size: :size。', 'selected_has_failed' => 'Uploaded: :success, failed: :fail, <a class="retry" href="javascript:"";">retry </a>or<a class="ignore" href="javascript:"";"> ignore</a>', 'selected_success' => ':num(:size) files selected, Uploaded: :success.', 'dot' => ', ', 'failed_num' => 'failed::fail.', 'pause_upload' => 'Pause', 'go_on_upload' => 'Go On', 'start_upload' => 'Upload', 'upload_success_message' => ':success files uploaded successfully', 'go_on_add' => 'New File', 'Q_TYPE_DENIED' => 'Sorry, the type of this file is not allowed!', 'Q_EXCEED_NUM_LIMIT' => 'Sorry, maximum number of allowable file uploads has been exceeded!', 'F_EXCEED_SIZE' => 'Sorry,the maximum file-size has been exceeded!', 'Q_EXCEED_SIZE_LIMIT' => 'Sorry, the maximum file-size has been exceeded!', 'F_DUPLICATE' => 'Duplicate file.', 'confirm_delete_file' => 'Are you sure delete this file from server?', ], 'import_extension_confirm' => 'Are you sure import the extension?', 'quick_create' => 'Quick create', 'grid_items_selected' => '{n} items selected', 'nothing_updated' => 'Nothing has been updated.', 'welcome_back' => 'Welcome back, please login to your account.', 'documentation' => 'Documentation', 'demo' => 'Demo', 'extensions' => 'Extensions', 'version' => 'Version', 'current_version' => 'Current version', 'latest_version' => 'Latest version', 'upgrade_to_version' => 'Upgrade to version :version', 'enable' => 'Enable', 'disable' => 'Disable', 'uninstall' => 'Uninstall', 'confirm_uninstall' => 'Please confirm that you wish to uninstall this extension. This may result in potential data loss.', 'marketplace' => 'Marketplace', 'theme' => 'Theme', 'application' => 'Application', 'install_from_local' => 'Install From Local', 'install_succeeded' => 'Install succeeded !', 'invalid_extension_package' => 'Invalid extension package !', 'copied' => 'Copied', 'auth_failed' => 'These credentials do not match our records.', 'validation' => [ 'match' => 'The :attribute and :other must match.', 'minlength' => 'The :attribute must be at least :min characters.', 'maxlength' => 'The :attribute may not be greater than :max characters.', ], ]; ================================================ FILE: resources/lang/en/auth.php ================================================ <?php return [ /* |-------------------------------------------------------------------------- | Authentication Language Lines |-------------------------------------------------------------------------- | | The following language lines are used during authentication for various | messages that we need to display to the user. You are free to modify | these language lines according to your application's requirements. | */ 'failed' => 'These credentials do not match our records.', 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.', ]; ================================================ FILE: resources/lang/en/pagination.php ================================================ <?php return [ /* |-------------------------------------------------------------------------- | Pagination Language Lines |-------------------------------------------------------------------------- | | The following language lines are used by the paginator library to build | the simple pagination links. You are free to change them to anything | you want to customize your views to better match your application. | */ 'previous' => '« Previous', 'next' => 'Next »', ]; ================================================ FILE: resources/lang/en/passwords.php ================================================ <?php return [ /* |-------------------------------------------------------------------------- | Password Reset Language Lines |-------------------------------------------------------------------------- | | The following language lines are the default lines which match reasons | that are given by the password broker for a password update attempt | has failed, such as for an invalid token or invalid new password. | */ 'reset' => 'Your password has been reset!', 'sent' => 'We have e-mailed your password reset link!', 'throttled' => 'Please wait before retrying.', 'token' => 'This password reset token is invalid.', 'user' => "We can't find a user with that e-mail address.", ]; ================================================ FILE: resources/lang/en/validation.php ================================================ <?php return [ /* |-------------------------------------------------------------------------- | Validation Language Lines |-------------------------------------------------------------------------- | | The following language lines contain the default error messages used by | the validator class. Some of these rules have multiple versions such | as the size rules. Feel free to tweak each of these messages here. | */ 'accepted' => 'The :attribute must be accepted.', 'active_url' => 'The :attribute is not a valid URL.', 'after' => 'The :attribute must be a date after :date.', 'after_or_equal' => 'The :attribute must be a date after or equal to :date.', 'alpha' => 'The :attribute may only contain letters.', 'alpha_dash' => 'The :attribute may only contain letters, numbers, dashes and underscores.', 'alpha_num' => 'The :attribute may only contain letters and numbers.', 'array' => 'The :attribute must be an array.', 'before' => 'The :attribute must be a date before :date.', 'before_or_equal' => 'The :attribute must be a date before or equal to :date.', 'between' => [ 'numeric' => 'The :attribute must be between :min and :max.', 'file' => 'The :attribute must be between :min and :max kilobytes.', 'string' => 'The :attribute must be between :min and :max characters.', 'array' => 'The :attribute must have between :min and :max items.', ], 'boolean' => 'The :attribute field must be true or false.', 'confirmed' => 'The :attribute confirmation does not match.', 'date' => 'The :attribute is not a valid date.', 'date_equals' => 'The :attribute must be a date equal to :date.', 'date_format' => 'The :attribute does not match the format :format.', 'different' => 'The :attribute and :other must be different.', 'digits' => 'The :attribute must be :digits digits.', 'digits_between' => 'The :attribute must be between :min and :max digits.', 'dimensions' => 'The :attribute has invalid image dimensions.', 'distinct' => 'The :attribute field has a duplicate value.', 'email' => 'The :attribute must be a valid email address.', 'ends_with' => 'The :attribute must end with one of the following: :values.', 'exists' => 'The selected :attribute is invalid.', 'file' => 'The :attribute must be a file.', 'filled' => 'The :attribute field must have a value.', 'gt' => [ 'numeric' => 'The :attribute must be greater than :value.', 'file' => 'The :attribute must be greater than :value kilobytes.', 'string' => 'The :attribute must be greater than :value characters.', 'array' => 'The :attribute must have more than :value items.', ], 'gte' => [ 'numeric' => 'The :attribute must be greater than or equal :value.', 'file' => 'The :attribute must be greater than or equal :value kilobytes.', 'string' => 'The :attribute must be greater than or equal :value characters.', 'array' => 'The :attribute must have :value items or more.', ], 'image' => 'The :attribute must be an image.', 'in' => 'The selected :attribute is invalid.', 'in_array' => 'The :attribute field does not exist in :other.', 'integer' => 'The :attribute must be an integer.', 'ip' => 'The :attribute must be a valid IP address.', 'ipv4' => 'The :attribute must be a valid IPv4 address.', 'ipv6' => 'The :attribute must be a valid IPv6 address.', 'json' => 'The :attribute must be a valid JSON string.', 'lt' => [ 'numeric' => 'The :attribute must be less than :value.', 'file' => 'The :attribute must be less than :value kilobytes.', 'string' => 'The :attribute must be less than :value characters.', 'array' => 'The :attribute must have less than :value items.', ], 'lte' => [ 'numeric' => 'The :attribute must be less than or equal :value.', 'file' => 'The :attribute must be less than or equal :value kilobytes.', 'string' => 'The :attribute must be less than or equal :value characters.', 'array' => 'The :attribute must not have more than :value items.', ], 'max' => [ 'numeric' => 'The :attribute may not be greater than :max.', 'file' => 'The :attribute may not be greater than :max kilobytes.', 'string' => 'The :attribute may not be greater than :max characters.', 'array' => 'The :attribute may not have more than :max items.', ], 'mimes' => 'The :attribute must be a file of type: :values.', 'mimetypes' => 'The :attribute must be a file of type: :values.', 'min' => [ 'numeric' => 'The :attribute must be at least :min.', 'file' => 'The :attribute must be at least :min kilobytes.', 'string' => 'The :attribute must be at least :min characters.', 'array' => 'The :attribute must have at least :min items.', ], 'not_in' => 'The selected :attribute is invalid.', 'not_regex' => 'The :attribute format is invalid.', 'numeric' => 'The :attribute must be a number.', 'password' => 'The password is incorrect.', 'present' => 'The :attribute field must be present.', 'regex' => 'The :attribute format is invalid.', 'required' => 'The :attribute field is required.', 'required_if' => 'The :attribute field is required when :other is :value.', 'required_unless' => 'The :attribute field is required unless :other is in :values.', 'required_with' => 'The :attribute field is required when :values is present.', 'required_with_all' => 'The :attribute field is required when :values are present.', 'required_without' => 'The :attribute field is required when :values is not present.', 'required_without_all' => 'The :attribute field is required when none of :values are present.', 'same' => 'The :attribute and :other must match.', 'size' => [ 'numeric' => 'The :attribute must be :size.', 'file' => 'The :attribute must be :size kilobytes.', 'string' => 'The :attribute must be :size characters.', 'array' => 'The :attribute must contain :size items.', ], 'starts_with' => 'The :attribute must start with one of the following: :values.', 'string' => 'The :attribute must be a string.', 'timezone' => 'The :attribute must be a valid zone.', 'unique' => 'The :attribute has already been taken.', 'uploaded' => 'The :attribute failed to upload.', 'url' => 'The :attribute format is invalid.', 'uuid' => 'The :attribute must be a valid UUID.', /* |-------------------------------------------------------------------------- | Custom Validation Language Lines |-------------------------------------------------------------------------- | | Here you may specify custom validation messages for attributes using the | convention "attribute.rule" to name the lines. This makes it quick to | specify a specific custom language line for a given attribute rule. | */ 'custom' => [ 'attribute-name' => [ 'rule-name' => 'custom-message', ], ], /* |-------------------------------------------------------------------------- | Custom Validation Attributes |-------------------------------------------------------------------------- | | The following language lines are used to swap our attribute placeholder | with something more reader friendly such as "E-Mail Address" instead | of "email". This simply helps us make our message more expressive. | */ 'attributes' => [], ]; ================================================ FILE: resources/lang/zh_CN/admin.php ================================================ <?php return [ 'scaffold' => [ 'header' => '代码生成器', 'choose' => '选择已有数据表', 'table' => '表名', 'model' => '模型', 'controller' => '控制器', 'repository' => '数据仓库', 'add_field' => '添加字段', 'pk' => '主键', 'soft_delete' => '软删除', 'create_migration' => '创建表迁移文件', 'create_model' => '创建模型', 'create_repository' => '创建数据仓库', 'create_controller' => '创建控制器', 'run_migrate' => '创建数据表', 'create_lang' => '创建翻译文件', 'field' => '字段', 'translation' => '翻译', 'comment' => '注释', 'default' => '默认值', 'field_name' => '字段名', 'type' => '类型', 'nullable' => '允许空值', 'key' => '索引', 'translate_title' => '翻译标题', 'sync_translation_with_comment' => '同步翻译与注释', ], 'client' => [ 'delete_confirm' => '确认删除?', 'confirm' => '确认', 'cancel' => '取消', 'refresh_succeeded' => '刷新成功 !', 'submit' => '提交', 'close' => '关闭', 'selected_options' => '已选中:num个选项', 'exceed_max_item' => '已超出最大可选数量', 'no_preview' => '预览失败', '500' => '系统繁忙,请稍后再试!', '403' => '对不起,您没有权限访问,请与管理员联系。', '401' => '请登录!', '419' => '对不起,当前页面已失效,请刷新浏览器。', ], 'home' => '主页', 'online' => '在线', 'login' => '登录', 'logout' => '登出', 'setting' => '设置', 'name' => '名称', 'username' => '用户名', 'old_password' => '旧密码', 'password' => '密码', 'password_confirmation' => '确认密码', 'old_password_error' => '请输入正确的旧密码', 'remember_me' => '记住我', 'user_setting' => '用户设置', 'avatar' => '头像', 'list' => '列表', 'new' => '新增', 'create' => '创建', 'delete' => '删除', 'remove' => '移除', 'edit' => '编辑', 'quick_edit' => '快捷编辑', 'continue_editing' => '继续编辑', 'continue_creating' => '继续创建', 'view' => '查看', 'detail' => '详细', 'browse' => '浏览', 'reset' => '重置', 'export' => '导出', 'batch_delete' => '批量删除', 'save' => '保存', 'refresh' => '刷新', 'order' => '排序', 'expand' => '展开', 'collapse' => '收起', 'filter' => '筛选', 'search' => '搜索', 'close' => '关闭', 'show' => '显示', 'entries' => '条', 'captcha' => '验证码', 'action' => '操作', 'title' => '标题', 'description' => '简介', 'back' => '返回', 'back_to_list' => '返回列表', 'submit' => '提交', 'menu' => '菜单', 'input' => '输入', 'succeeded' => '成功', 'failed' => '失败', 'delete_confirm' => '确认删除?', 'delete_succeeded' => '删除成功 !', 'delete_failed' => '删除失败 !', 'update_succeeded' => '更新成功 !', 'update_failed' => '更新失败 !', 'save_succeeded' => '保存成功 !', 'save_failed' => '保存失败 !', 'refresh_succeeded' => '刷新成功 !', 'login_successful' => '登录成功 !', 'choose' => '选择', 'choose_file' => '选择文件', 'choose_image' => '选择图片', 'more' => '更多', 'deny' => '无权访问', 'administrator' => '管理员', 'roles' => '角色', 'permissions' => '权限', 'slug' => '标识', 'created_at' => '创建时间', 'updated_at' => '更新时间', 'alert' => '注意', 'parent_id' => '父级', 'icon' => '图标', 'uri' => '路径', 'operation_log' => '操作日志', 'parent_select_error' => '父级选择错误', 'default' => '默认', 'table' => '表格', 'no_data' => '暂无数据', 'routes' => '路由', 'alias' => '别名', 'route_action' => '处理器', 'middleware' => '中间件', 'import' => '导入', 'is_not_import' => '未导入', 'selected_options' => '已选中:num个选项', 'method' => '方法', 'user' => '用户', 'pagination' => [ 'range' => '从 :first 到 :last ,总共 :total 条', ], 'role' => '角色', 'permission' => '权限', 'route' => '路由', 'confirm' => '确认', 'cancel' => '取消', 'selectall' => '全选', 'http' => [ 'method' => 'HTTP方法', 'path' => 'HTTP路径', ], 'all_methods_if_empty' => '为空默认为所有方法', 'all' => '全部', 'current_page' => '当前页', 'selected_rows' => '选择的行', 'upload' => '上传', 'new_folder' => '新建文件夹', 'time' => '时间', 'size' => '大小', 'between_start' => '起始', 'between_end' => '结束', 'next_page' => '下一页', 'prev_page' => '上一页', 'next_step' => '下一步', 'prev_step' => '上一步', 'done' => '完成', 'listbox' => [ 'text_total' => '总共 {0} 项', 'text_empty' => '空列表', 'filtered' => '{0} / {1}', 'filter_clear' => '显示全部', 'filter_placeholder' => '过滤', ], 'responsive' => [ 'display_all' => '显示全部', 'display' => '字段', 'focus' => '聚焦', ], 'uploader' => [ 'add_new_media' => '添加文件', 'drag_file' => '或将文件拖到这里', 'max_file_limit' => 'The :attribute may not be greater than :max.', 'exceed_size' => '文件大小超出', 'interrupt' => '上传暂停', 'upload_failed' => '上传失败,请重试', 'selected_files' => '选中:num个文件,共:size。', 'selected_has_failed' => '已成功上传:success个文件,:fail个文件上传失败,<a class="retry" href="javascript:"";">重新上传</a>失败文件或<a class="ignore" href="javascript:"";">忽略</a>', 'selected_success' => '共:num个(:size),已上传:success个。', 'dot' => ',', 'failed_num' => '失败:fail个。', 'pause_upload' => '暂停上传', 'go_on_upload' => '继续上传', 'start_upload' => '开始上传', 'upload_success_message' => '已成功上传:success个文件', 'go_on_add' => '继续添加', 'Q_TYPE_DENIED' => '对不起,不允许上传此类型文件', 'Q_EXCEED_NUM_LIMIT' => '对不起,已超出文件上传数量限制,最多只能上传:num个文件', 'F_EXCEED_SIZE' => '对不起,当前选择的文件过大', 'Q_EXCEED_SIZE_LIMIT' => '对不起,已超出文件大小限制', 'F_DUPLICATE' => '文件重复', 'confirm_delete_file' => '您确定要删除这个文件吗?', ], 'import_extension_confirm' => '确认导入拓展?', 'quick_create' => '快速创建', 'grid_items_selected' => '已选择 {n} 项', 'nothing_updated' => '没有任何数据被更改', 'welcome_back' => '欢迎回来,请登录您的账号。', 'documentation' => '文档', 'demo' => '示例', 'extensions' => '扩展', 'version' => '版本', 'current_version' => '当前版本', 'latest_version' => '最新版本', 'upgrade_to_version' => '更新至版本 :version', 'enable' => '启用', 'disable' => '禁用', 'uninstall' => '卸载', 'confirm_uninstall' => '您确定要卸载当前扩展吗?此操作将会移除扩展数据!', 'marketplace' => '应用市场', 'theme' => '主题', 'application' => '应用', 'install_from_local' => '本地安装', 'install_succeeded' => '安装成功', 'invalid_extension_package' => '安装包异常', 'copied' => '已复制', 'auth_failed' => '账号或密码错误', 'validation' => [ 'match' => '与 :attribute 不匹配。', 'minlength' => ':attribute 字符长度不能少于 :min。', 'maxlength' => ':attribute 字符长度不能超出 :max。', ], ]; ================================================ FILE: resources/lang/zh_CN/carmis.php ================================================ <?php return [ 'labels' => [ 'Carmis' => '卡密', 'carmis' => '卡密', ], 'fields' => [ 'goods_id' => '所属商品', 'status' => '状态', 'carmi' => '卡密内容', 'status_unsold' => '未售出', 'status_sold' => '已售出', 'is_loop' => '循环卡密', 'yes'=>'是', 'import_carmis' => '导入卡密', 'carmis_list' => '卡密列表', 'carmis_txt' => '卡密文本', 'are_you_import_sure' => '确定要导入卡密吗?', 'remove_duplication' => '是否去重', ], 'options' => [ ], 'helps' => [ 'carmis_list' => '一行一个,回车分隔。请勿导入单个文本长度过大的卡密,容易导致内存溢出。如果卡密过大建议修改商品为人工处理' ], 'rule_messages' => [ 'carmis_list_and_carmis_txt_can_not_be_empty' => '请填写需要导入的卡密或选择需要上传的卡密文件', 'import_carmis_success' => '导入卡密成功!' ] ]; ================================================ FILE: resources/lang/zh_CN/coupon.php ================================================ <?php return [ 'labels' => [ 'Coupon' => '优惠码', 'coupon' => '优惠码', ], 'fields' => [ 'type' => '优惠类型', 'discount' => '优惠金额', 'is_use' => '是否已经使用', 'is_open' => '是否启用', 'coupon' => '优惠码', 'ret' => '剩余使用次数', 'type_one_time' => '一次性使用', 'type_repeat' => '重复使用', 'status_use' => '已使用', 'status_unused' => '未使用', 'goods_id' => '可用商品' ], 'options' => [ ], ]; ================================================ FILE: resources/lang/zh_CN/dujiaoka.php ================================================ <?php /** * The file was created by Assimon. * * @author assimon<ashang@utf8.hk> * @copyright assimon<ashang@utf8.hk> * @link http://utf8.hk/ */ return [ 'official_website' => '官网', 'dashboard' => '仪表盘', 'dashboard_description' => '每个梦想的路上,一起前行....!', 'join_qq_group' => '加入qq群', 'join_telegram_group' => '加入tg群', 'is_open' => '是否启用', 'trashed' => '回收站', 'restore' => '恢复', 'are_you_restore_sure' => '确定恢复吗?', 'restored' => '已恢复', 'ord' => '数值越大,排名越靠前', 'status_open' => '启用', 'status_close' => '禁用', 'sales_data' => '销售数据', 'order_success_rate' => '订单成交率', 'order_count_number' => '总订单数', 'last_seven_days' => '最近7天', 'last_today' => '今天', 'last_month' => '最近一个月', 'last_year' => '最近一年', 'status_pending_number' => '待处理订单数', 'status_processing_number' => '处理中订单数', 'status_completed_number' => '已完成订单数', 'status_failure_number' => '失败订单数', 'status_abnormal_number' => '异常订单数', 'payment_chart' => '支付数据', 'payment_successful_number' => '支付成功数', 'unpaid_number' => '未支付数', 'sales_chart' => '销售额', 'popular_goods' => '受欢迎的商品', 'warning_title' => '请注意!!', 'error_title' => '出现错误了哟~', 'callback' => '返回', 'reset' => '重置', 'search_now' => '立即查询', 'home_page' => '首页', 'group_all' => '全部', 'order_search' => '订单查询', 'site_announcement' => '公告', 'price' => '价格', 'wholesale_discount' => '批发价', 'order_now' => '下单', 'not' => '无', 'close' => '关闭', 'discount' => '折', 'home_discount' => '折扣', 'share_qr' => '分享此商品', 'by_amount' => '购买', 'or_the_above' => '件或以上', 'each' => '每个', 'email' => '邮箱', 'payment_method' => '支付方式', 'search_password' => '订单查询密码', 'img_verify_code' => '图形验证码', 'coupon_code' => '优惠码', 'copy_text' => '复制', 'search_goods_name' => '商品名称...', 'behavior_verification' => '行为验证', 'click_to_behavior_verification' => '点击进行此处行为验证', 'success_behavior_verification' => '已完成行为验证', 'fail_behavior_verification' => '行为验证失败', 'please_complete_the_behavior_verification_correctly' => '请正确完成行为验证', 'confirm_order' => '确认订单', 'date_to_expired_order' => ':min分钟内未完成支付订单将作废', 'order_information' => '订单资料', 'pay_immediately' => '立即支付', 'amount_to_be_paid' => '需要支付金额', 'open_the_app_to_pay' => '打开 APP 支付', 'order_search_by_sn' => '订单号查询', 'order_search_by_email' => '下单邮箱查询', 'order_search_by_browser' => '浏览器查询', 'scan_qrcode_to_pay' => '扫码支付', 'pay_order_expiration_date_prompt' => '请打开 APP 扫码支付!有效期:min分钟', 'money_symbol' => '¥', 'purchase_limit' => '每单限', 'prompt' => [ 'server_illegal_request' => '非法请求!', 'the_goods_is_not_on_the_shelves' => '该商品未上架!', 'wholesale_price_format_error' => '批发价设置有误', 'by_amount_not_null' => '购买数量不能为0', 'inventory_shortage' => '库存不足', 'please_select_mode_of_payment' => '请选择支付方式', 'goods_does_not_exist' => '商品不存在', 'search_password_can_not_be_empty' => '请填写订单查询密码', 'image_verify_code_error' => '图形验证码错误', 'buy_amount_format_error' => '请正确填写购买数量', 'email_format_error' => '请正确填写邮箱', 'geetest_validate_fail' => '行为验证未通过', 'purchase_limit_exceeded' => '单笔购买数量超过限制', 'coupon_does_not_exist' => '优惠码不存在', 'coupon_lack_of_available_opportunities' => '优惠码可使用次数不足', 'can_not_be_empty' => '不能为空', 'order_does_not_exist' => '订单不存在', 'order_is_expired' => '订单已过期,请重新下单', 'order_already_paid' => '订单已经支付过了,请勿重复支付', 'order_status_completed' => '订单已经处理', 'order_inconsistent_amounts' => '订单金额不一致', 'order_carmis_insufficient_quantity_available' => '库存可使用卡密不足,请联系管理员核查', 'pay_gateway_does_not_exist' => '支付网关不存在', 'abnormal_payment_channel' => '支付网关异常!', 'payment_successful' => '支付成功!', 'copy_text_success' => '复制成功', 'copy_text_failed' => '复制失败', 'search_order_browser_tips' => '最多只能查询最近 5 笔订单', 'no_related_order_found_for_cache' => '未找到相关订单缓存!', 'no_related_order_found' => '未找到相关订单!', 'new_order_push' => '新订单通知', 'loop_carmis_limit' => '此商品最多购买一件!' ], 'equipment' => [ 'please_use_a_browser_to_open' => '请使用内置浏览器打开', 'does_not_support_wechat_or_qq_access' => '本站不支持 微信或QQ 内访问', 'please_follow_the_prompts_to_open' => '请按提示在手机 浏览器 打开', 'open_browser_tips' => '点击右上角···图标 or 复制网址自行打开', 'apple_device' => '苹果设备', 'android_device' => '安卓设备', 'click_on_the_upper_right_corner' => '点击右上角', 'open_the_browser' => '在 浏览器 打开', 'what_do_you_need_today' => '今天需要一点什么?', 'self_promotion' => '优质的商品和卓越的客户服务代表完美的交易流程体现。', ], 'page-title' => [ 'home' => '首页', 'bill' => '订单确认', 'order-detail' => '订单详情', 'order-search' => '订单查询' ] ]; ================================================ FILE: resources/lang/zh_CN/email-test.php ================================================ <?php /** * The file was created by Assimon. * * @author ZhangYiQiu<me@zhangyiqiu.net> * @copyright ZhangYiQiu<me@zhangyiqiu.net> * @link http://zhangyiqiu.net/ */ return [ 'labels' => [ 'success' => '发送成功', 'to' => '收件人', 'title' => '邮件标题', 'body' => '邮件内容', ], 'fields' => [ ], 'options' => [ ], 'rule_messages' => [ ] ]; ================================================ FILE: resources/lang/zh_CN/emailtpl.php ================================================ <?php return [ 'labels' => [ 'Emailtpl' => '邮件模板', 'emailtpl' => '邮件模板', ], 'fields' => [ 'tpl_name' => '邮件标题', 'tpl_content' => '邮件内容', 'tpl_token' => '邮件标识', ], 'options' => [ ], ]; ================================================ FILE: resources/lang/zh_CN/extension.php ================================================ <?php return [ 'labels' => [ 'Extensions' => '扩展', ], 'fields' => [ 'alias' => '别名', 'description' => '描述', 'authors' => '开发者', 'homepage' => '主页', 'require' => '依赖', 'require_dev' => '开发环境依赖', 'name' => '包名', 'version' => '版本', 'enable' => '启用', 'config' => '配置', 'imported' => '导入', ], 'options' => [ ], ]; ================================================ FILE: resources/lang/zh_CN/global.php ================================================ <?php return [ 'fields' => [ 'id' => 'ID', 'name' => '名称', 'username' => '用户名', 'email' => '邮箱', 'http_path' => 'HTTP路径', 'password' => '密码', 'password_confirmation' => '确认密码', 'created_at' => '创建时间', 'updated_at' => '更新时间', 'permissions' => '权限', 'slug' => '标识', 'user' => '用户', 'order' => '排序', 'ip' => 'IP', 'method' => '方法', 'uri' => 'URI', 'roles' => '角色', 'path' => '路径', 'input' => '输入', 'type' => '类型', ], 'labels' => [ 'list' => '列表', 'edit' => '编辑', 'detail' => '详细', 'create' => '创建', 'root' => '顶级', 'scaffold' => '代码生成器', ], 'options' => [ // ], ]; ================================================ FILE: resources/lang/zh_CN/goods-group.php ================================================ <?php return [ 'labels' => [ 'GoodsGroup' => '分类', 'goods-group' => '分类', ], 'fields' => [ 'gp_name' => '分类名称', 'is_open' => '是否启用', 'ord' => '排序权重 越大越靠前', ], 'options' => [ ], ]; ================================================ FILE: resources/lang/zh_CN/goods.php ================================================ <?php return [ 'labels' => [ 'Goods' => '商品', 'goods' => '商品', ], 'fields' => [ 'actual_price' => '实际售价', 'group_id' => '所属分类', 'api_hook' => '回调事件', 'buy_prompt' => '购买提示', 'description' => '商品描述', 'gd_name' => '商品名称', 'gd_description' => '商品描述', 'gd_keywords' => '商品关键字', 'in_stock' => '库存', 'ord' => '排序权重', 'other_ipu_cnf' => '其他输入框配置', 'picture' => '商品图片', 'retail_price' => '零售价', 'sales_volume' => '销量', 'type' => '商品类型', 'buy_limit_num' => '限制单次购买最大数量', 'wholesale_price_cnf' => '批发价配置', 'automatic_delivery' => '自动发货', 'manual_processing' => '人工处理', 'is_open' => '是否上架', 'coupon_id' => '可用优惠码' ], 'options' => [ ], 'helps' => [ 'retail_price' => '可以不填写,主要用于展示', 'picture' => '可不上传,为默认图片', 'in_stock' => '当商品类型为"人工处理"时,手动填写的库存数量才会生效。"自动发货"类型的商品系统会自动识别库存数量', 'buy_limit_num' => '防止恶意刷库存,0为不限制客户单次下单最大数量', 'other_ipu_cnf' => '格式为[唯一标识(英文)=输入框名字=是否必填],例如:填写 qq_account=QQ账号=true 表示产品详情页会新增一个 [QQ账号] 输入框,客户可在其中输入 [QQ账号],true 为必填,false 为选填。(一行一个)', 'wholesale_price_cnf' => '例如:填写 5=3 表示客户购买 5 件或以上时,每件价格为 3 元。一行一个', ] ]; ================================================ FILE: resources/lang/zh_CN/hyper.php ================================================ <?php return [ # Hyper Theme 'notice_announcement' => '公告', 'error_back_btn' => '返回', 'error_error' => '错误', 'order_search' => '查询订单', 'global_currency' => '¥', # home.blade.php 'home_title' => '主页', 'home_search_box' => '输入关键词搜索...', 'home_product_name' => '商品名称', 'home_product_class' => '类型', 'home_in_stock' => '库存', 'home_price' => '价格', 'home_place_an_order' => '操作', 'home_discount' => '折扣', 'home_automatic_delivery' => '自动发货', 'home_charge' => '人工发货', 'home_buy' => '购买', 'home_out_of_stock' => '缺货', 'home_whole' => '全部', 'home_tip' =>'提示', 'home_sell_out_tip' =>'商品缺货', # buy.blade.php 'buy_title' => '产品详细信息', 'buy_automatic_delivery' => '自动发货', 'buy_charge' => '人工发货', 'buy_purchase' => '购买', 'buy_the_above' => '件起', 'buy_each' => '元/件', 'buy_price' => '价格', 'buy_email' => '电子邮箱', 'buy_input_account' => '接收卡密或通知', 'buy_purchase_quantity' => '购买数量', 'buy_in_stock' => '库存', 'buy_purchase_restrictions' => '限购', 'buy_search_password' => '查询密码', 'buy_input_search_password' => '查询订单密码', 'buy_promo_code' => '优惠码', 'buy_input_promo_code' => '您有优惠码吗?', 'buy_choose_payment_method' => '请选择支付方式', 'buy_behavior_verification' => '行为验证', 'buy_verify_code' => '验证码', 'buy_payment_method' => '支付方式', 'buy_order_now' => '提交订单', 'buy_product_desciption' => '商品详情', 'buy_warning' => '警告!', 'buy_purchase_tips' => '提示', 'buy_empty_mailbox' => '邮箱不能为空!', 'buy_zero_quantity' => '购买数量不能为 0!', 'buy_exceeds_stock' => '数量不允许大于库存!', 'buy_exceeds_limit' => '已超过限购数量!', 'buy_empty_query_password' => '查询密码不能为空!', 'buy_empty_payment_method' => '未选择支付方式!', 'buy_empty_captcha' => '验证码不能为空!', 'buy_correct_verification' => '请正确完成行为验证!', # bill.blade.php 'bill_title' => '确认订单', 'bill_order_number' => '订单号', 'bill_product_name' => '订单名称', 'bill_commodity_price' => '商品单价', 'bill_purchase_quantity' => '购买数量', 'bill_promo_code' => '优惠码', 'bill_discounted_price' => '优惠金额', 'bill_actual_payment' => '商品总价', 'bill_email' => '邮箱', 'bill_order_information' => '订单资料', 'bill_payment_method' => '支付方式', 'bill_pay_immediately' => '立即支付', # orderinfo.blade.php 'orderinfo_title' => '订单详情', 'orderinfo_order_title' => '订单名称', 'orderinfo_number_of_orders' => '下单数量', 'orderinfo_order_time' => '下单时间', 'orderinfo_email' => '邮箱', 'orderinfo_order_class' => '订单类型', 'orderinfo_automatic_delivery' => '自动发货', 'orderinfo_charge' => '人工发货', 'orderinfo_total_order_price' => '订单总价', 'orderinfo_order_status' => '订单状态', 'orderinfo_status_expired' => '已过期', 'orderinfo_status_wait_pay' => '待支付', 'orderinfo_status_pending' => '待处理', 'orderinfo_status_processed' => '已处理', 'orderinfo_status_completed' => '已完成', 'orderinfo_status_failed' => '已失败', 'orderinfo_status_abnormal' => '状态异常', 'orderinfo_payment_method' => '支付方式', 'orderinfo_carmi' => '卡密', 'orderinfo_copy_carmi' => '复制卡密', 'orderinfo_tips' => '提示', 'orderinfo_copy_success' => '复制成功', 'orderinfo_copy_error' => '复制失败', 'orderinfo_order_information' => '没有找到订单信息', # qrpay.blade.php 'qrpay_title' => '扫码支付', 'qrpay_order_expiration_date' => '订单有效期', 'qrpay_expiration_date' => '分钟', 'qrpay_actual_payment' => '商品总价', 'qrpay_open_app_to_pay' => '打开app支付', 'qrpay_notice' => '通知', 'payment_successful' => '支付成功!', 'order_pay_timeout' => '支付超时!', # searchOrder.blade.php 'searchOrder_title' => '查询订单', 'searchOrder_query_tips' => '注意:最多只能查询近5笔订单。', 'searchOrder_order_search_by_number' => '订单', 'searchOrder_order_search_by_email' => '邮箱', 'searchOrder_order_search_by_ie' => '缓存', 'searchOrder_order_number' => '订单号', 'searchOrder_search_now' => '立即查询', 'searchOrder_reset_order' => '重置', 'searchOrder_email' => '邮箱', 'searchOrder_search_password' => '查询密码', 'searchOrder_input_order_number' => '请输入订单编号', 'searchOrder_input_email' => '请输入邮箱', 'searchOrder_input_query_password' => '请输入查询密码', ]; ================================================ FILE: resources/lang/zh_CN/luna.php ================================================ <?php return [ //luna模板 'home_choice_cate' => '选择分类', 'home_choice_goods' => '选择商品', 'order_search_m' => '查单', 'goods_num' => '商品数量', 'goods_disc_1' => '满', 'goods_disc_2' => '个 单价', 'goods_disc_3' => '元/件', 'goods_surplus' => '剩余', 'goods_unit' => '件', 'buy_goods_msg' => '商品详情', 'buy_num' => '购买数量', 'buy_email' => '邮        箱', 'buy_email_tips' => '填写你的邮箱', 'buy_disc' => '优  惠  码', 'buy_disc_tips' => '填写你的优惠码', 'buy_pass' => '查询密码', 'buy_pass_tips' => '请填写订单的查询密码', 'buy_code' => '验  证  码', 'buy_code_tips' => '请输入验证码', 'buy_loading_verification' => '正在加载验证码...', 'buy_order_m' => '手机下单', 'query_no_order' => '没有找到订单信息。', 'query_no_order_tips' => '或许可以检查核对下输入的订单号,邮箱,或者查询密码是否正确哦!!', 'order_number' => '订单编号', 'email' => '订单邮箱', 'order_status' => '订单状态', 'least_one' => '购买数量不能低于1件', 'exceeds' => '购买数量不能多于库存数量', 'exceeds_limit' => '购买数量不能多于限购数量', 'mobile_order' => '扫描二维码 手机下单' ]; ================================================ FILE: resources/lang/zh_CN/menu.php ================================================ <?php return [ 'titles' => [ 'index' => '主页', 'admin' => '系统', 'users' => '管理员', 'roles' => '角色', 'permission' => '权限', 'menu' => '菜单', 'operation_log' => '操作日志', 'helpers' => '开发工具', 'extensions' => '扩展', 'scaffold' => '代码生成器', 'icons' => '图标', 'goods_manage' => '商品管理', 'goods' => '商品列表', 'goods_group' => '商品分类', 'carmis_manage' => '卡密管理', 'carmis' => '卡密列表', 'import_carmis' => '导入卡密', 'coupon_manage' => '优惠管理', 'coupon' => '优惠码列表', 'configuration' => '配置', 'email_template_configuration' => '邮件模板配置', 'pay_configuration' => '支付配置', 'order_manage' => '销售数据', 'order' => '订单列表', 'system_setting' => '系统设置', 'email_test' => '邮件测试' ], ]; ================================================ FILE: resources/lang/zh_CN/order.php ================================================ <?php return [ 'labels' => [ 'Order' => '订单', 'order' => '订单', ], 'fields' => [ 'actual_price' => '实际支付价格', 'buy_amount' => '购买数量', 'buy_ip' => '购买者下单IP地址', 'coupon_discount_price' => '优惠码优惠价格', 'coupon_id' => '优惠码', 'email' => '下单邮箱', 'goods_id' => '所属商品', 'goods_price' => '商品单价', 'info' => '订单详情', 'order_id' => '订单ID', 'order_sn' => '订单号', 'pay_id' => '支付通道', 'status' => '订单状态', 'search_pwd' => '查询密码', 'title' => '订单名称', 'total_price' => '订单总价', 'trade_no' => '第三方支付订单号', 'type' => '订单类型', 'wholesale_discount_price' => '批发价优惠', 'status_wait_pay' => '待支付', 'status_pending' => '待处理', 'status_processing' => '处理中', 'status_completed' => '已完成', 'status_failure' => '失败', 'status_abnormal' => '异常', 'status_expired' => '已过期', 'order_created' => '订单创建时间', 'order_detail' => '订单详情', ], 'options' => [ ], ]; ================================================ FILE: resources/lang/zh_CN/pay.php ================================================ <?php return [ 'labels' => [ 'Pay' => '支付通道', 'pay' => '支付通道', ], 'fields' => [ 'merchant_id' => '商户 ID', 'merchant_key' => '商户 KEY', 'merchant_pem' => '商户密钥', 'pay_check' => '支付标识', 'pay_client' => '支付场景', 'pay_handleroute' => '支付处理路由', 'pay_method' => '支付方式', 'pay_name' => '支付名称', 'is_open' => '是否启用', 'method_jump' => '跳转', 'method_scan' => '扫码', 'pay_client_pc' => '电脑PC', 'pay_client_mobile' => '手机', 'pay_client_all' => '通用', ], 'options' => [ ], ]; ================================================ FILE: resources/lang/zh_CN/system-setting.php ================================================ <?php /** * The file was created by Assimon. * * @author assimon<ashang@utf8.hk> * @copyright assimon<ashang@utf8.hk> * @link http://utf8.hk/ */ return [ 'labels' => [ 'SystemSetting' => '系统设置', 'system_setting' => '系统设置', 'base_setting' => '基本设置', 'mail_setting' => '邮件服务', 'order_push_setting' => '订单推送配置', 'geetest' => '极验验证', ], 'fields' => [ 'title' => '网站标题', 'text_logo' => '文字LOGO', 'img_logo' => '图片LOGO', 'keywords' => '网站关键词', 'description' => '网站描述', 'notice' => '站点公告', 'footer' => '页脚自定义代码', 'manage_email' => '管理员邮箱', 'is_open_anti_red' => '是否开启微信/QQ防红', 'is_open_img_code' => '是否开启图形验证码', 'is_open_search_pwd' => '是否开启查询密码', 'is_open_google_translate' => '是否开启google翻译', 'is_open_server_jiang' => '是否开启server酱', 'server_jiang_token' => 'server酱通讯token', 'is_open_telegram_push' => '是否开启Telegram推送', 'telegram_userid' => 'Telegram用户id', 'telegram_bot_token' => 'Telegram通讯token', 'is_open_bark_push' => '是否开启Bark推送', 'is_open_bark_push_url' => '是否推送订单URL', 'bark_server' => 'Bark服务器', 'bark_token' => 'Bark通讯Token', 'is_open_qywxbot_push' => '是否开启企业微信Bot推送', 'qywxbot_key' => '企业微信Bot通讯Key', 'template' => '站点模板', 'language' => '站点语言', 'order_expire_time' => '订单过期时间(分钟)', 'driver' => '邮件驱动', 'host' => 'smtp服务器地址', 'port' => '端口', 'username' => '账号', 'password' => '密码', 'encryption' => '协议', 'from_address' => '发件地址', 'from_name' => '发件名称', 'geetest_id' => '极验id', 'geetest_key' => '极验key', 'is_open_geetest' => '是否开启极验', ], 'options' => [ ], 'rule_messages' => [ 'save_system_setting_success' => '系统配置保存成功!', 'change_reboot_php_worker' => '修改部分配置需要重启[supervisor]或php进程管理工具才会生效,例如邮件服务,server酱等。' ] ]; ================================================ FILE: resources/lang/zh_TW/admin.php ================================================ <?php return [ 'scaffold' => [ 'header' => '代碼生成器', 'choose' => '選取已有數據表', 'table' => '表名', 'model' => '模型', 'controller' => '控製器', 'repository' => '數據倉庫', 'add_field' => '加入欄位', 'pk' => '主鍵', 'soft_delete' => '軟刪除', 'create_migration' => '建立表遷移檔案', 'create_model' => '建立模型', 'create_repository' => '建立數據倉庫', 'create_controller' => '建立控製器', 'run_migrate' => '建立數據表', 'create_lang' => '建立翻譯檔案', 'field' => '欄位', 'translation' => '翻譯', 'comment' => '註解', 'default' => '預設值', 'field_name' => '欄位名', 'type' => '類型', 'nullable' => '允許null', 'key' => '索引', 'translate_title' => '翻譯標題', 'sync_translation_with_comment' => '同步翻譯與注解', ], 'client' => [ 'delete_confirm' => '確認刪除?', 'confirm' => '確認', 'cancel' => '取消', 'refresh_succeeded' => '重新整理成功 !', 'submit' => '提交', 'close' => '關閉', 'selected_options' => '已選取:num個選項', 'exceed_max_item' => '已超過最大可選數量', 'no_preview' => '預覽失敗', '500' => '系統繁忙,請稍後再試!', '403' => '對不起,您沒有權限存取,請洽詢管理員。', '401' => '請登入!', '419' => '對不起,目前頁面已失效,請重新整理瀏覽器。', ], 'home' => '首頁', 'online' => '線上', 'login' => '登入', 'logout' => '登出', 'setting' => '設定', 'name' => '名稱', 'username' => '使用者名稱', 'old_password' => '舊密碼', 'password' => '密碼', 'password_confirmation' => '確認密碼', 'old_password_error' => '請輸入正確的舊密碼', 'remember_me' => '記住我', 'user_setting' => '用戶設定', 'avatar' => '頭像', 'list' => '清單', 'new' => '新增', 'create' => '建立', 'delete' => '刪除', 'remove' => '移除', 'edit' => '編輯', 'quick_edit' => '快速編輯', 'continue_editing' => '繼續編輯', 'continue_creating' => '繼續建立', 'view' => '檢視', 'detail' => '詳細', 'browse' => '瀏覽', 'reset' => '重設', 'export' => '導出', 'batch_delete' => '批次刪除', 'save' => '儲存', 'refresh' => '重新整理', 'order' => '排序', 'expand' => '展開', 'collapse' => '收起', 'filter' => '過濾', 'search' => '搜尋', 'close' => '關閉', 'show' => '顯示', 'entries' => '條', 'captcha' => '驗證碼', 'action' => '操作', 'title' => '標題', 'description' => '描述', 'back' => '返回', 'back_to_list' => '返回清單', 'submit' => '提交', 'menu' => '選單', 'input' => '輸入', 'succeeded' => '成功', 'failed' => '失敗', 'delete_confirm' => '確認刪除?', 'delete_succeeded' => '刪除成功 !', 'delete_failed' => '刪除失敗 !', 'update_succeeded' => '更新成功 !', 'update_failed' => '更新失敗 !', 'save_succeeded' => '儲存成功 !', 'save_failed' => '儲存失敗 !', 'refresh_succeeded' => '重新整理成功 !', 'login_successful' => '登入成功 !', 'choose' => '選取', 'choose_file' => '選取檔案', 'choose_image' => '選取圖片', 'more' => '更多', 'deny' => '無權存取', 'administrator' => '管理員', 'roles' => '角色', 'permissions' => '權限', 'slug' => '標識', 'created_at' => '建立時間', 'updated_at' => '更新時間', 'alert' => '註意', 'parent_id' => '父級', 'icon' => '圖標', 'uri' => '路徑', 'operation_log' => '操作日誌', 'parent_select_error' => '父級選取錯誤', 'default' => '預設', 'table' => '表格', 'no_data' => '暫無數據', 'routes' => '路由', 'alias' => '別名', 'route_action' => '處理器', 'middleware' => '中間件', 'import' => '匯入', 'is_not_import' => '未匯入', 'selected_options' => '已選取:num個選項', 'method' => '方法', 'user' => '用戶', 'pagination' => [ 'range' => '從 :first 到 :last ,總共 :total 條', ], 'role' => '角色', 'permission' => '權限', 'route' => '路由', 'confirm' => '確認', 'cancel' => '取消', 'selectall' => '全選', 'http' => [ 'method' => 'HTTP方法', 'path' => 'HTTP路徑', ], 'all_methods_if_empty' => '為空預設為所有方法', 'all' => '全部', 'current_page' => '目前頁', 'selected_rows' => '選取的行', 'upload' => '上傳', 'new_folder' => '建立檔案夾', 'time' => '時間', 'size' => '大小', 'between_start' => '開始', 'between_end' => '結束', 'next_page' => '下一頁', 'prev_page' => '上一頁', 'next_step' => '下一步', 'prev_step' => '上一步', 'done' => '完成', 'listbox' => [ 'text_total' => '總共 {0} 項', 'text_empty' => '空清單', 'filtered' => '{0} / {1}', 'filter_clear' => '顯示全部', 'filter_placeholder' => '過濾', ], 'responsive' => [ 'display_all' => '顯示全部', 'display' => '欄位', 'focus' => '聚焦', ], 'uploader' => [ 'add_new_media' => '加入檔案', 'drag_file' => '或將檔案拖到這裏', 'max_file_limit' => 'The :attribute may not be greater than :max.', 'exceed_size' => '檔案大小超過', 'interrupt' => '上傳暫停', 'upload_failed' => '上傳失敗,請重試', 'selected_files' => '選取:num個檔案,共:size。', 'selected_has_failed' => '已成功上傳:success個檔案,:fail個檔案上傳失敗,<a class="retry" href="javascript:"";">重新上傳</a>失敗檔案或<a class="ignore" href="javascript:"";">忽略</a>', 'selected_success' => '共:num個(:size),已上傳:success個。', 'dot' => ',', 'failed_num' => '失敗:fail個。', 'pause_upload' => '暫停上傳', 'go_on_upload' => '繼續上傳', 'start_upload' => '開始上傳', 'upload_success_message' => '已成功上傳:success個檔案', 'go_on_add' => '繼續加入', 'Q_TYPE_DENIED' => '對不起,不允許上傳此類型檔案', 'Q_EXCEED_NUM_LIMIT' => '對不起,已超過檔案上傳數量限製,最多只能上傳:num個檔案', 'F_EXCEED_SIZE' => '對不起,目前選取的檔案過大', 'Q_EXCEED_SIZE_LIMIT' => '對不起,已超過檔案大小限製', 'F_DUPLICATE' => '檔案重復', 'confirm_delete_file' => '您確定要刪除這個檔案嗎?', ], 'import_extension_confirm' => '確認匯入拓展?', 'quick_create' => '快速建立', 'grid_items_selected' => '已選取 {n} 項', 'nothing_updated' => '沒有任何數據被更改', 'welcome_back' => '歡迎回來,請登入您的賬戶。', 'documentation' => '文檔', 'demo' => '範例', 'extensions' => '擴展', 'version' => '版本', 'current_version' => '目前版本', 'latest_version' => '最新版本', 'upgrade_to_version' => '更新至版本 :version', 'enable' => '啟用', 'disable' => '停用', 'uninstall' => '卸載', 'confirm_uninstall' => '您確定要卸載目前擴展嗎?此動作將會移除擴展數據!', 'marketplace' => '應用市場', 'theme' => '主題', 'application' => '應用', 'install_from_local' => '本地安裝', 'install_succeeded' => '安裝成功', 'invalid_extension_package' => '安裝包異常', 'copied' => '已復製', 'auth_failed' => '賬戶或密碼錯誤', 'validation' => [ 'match' => '與 :attribute 不符。', 'minlength' => ':attribute 字元長度不能少於 :min。', 'maxlength' => ':attribute 字元長度不能超過 :max。', ], ]; ================================================ FILE: resources/lang/zh_TW/carmis.php ================================================ <?php return [ 'labels' => [ 'Carmis' => '卡密', 'carmis' => '卡密', ], 'fields' => [ 'goods_id' => '所屬商品', 'status' => '狀態', 'carmi' => '卡密內容', 'status_unsold' => '未售出', 'status_sold' => '已售出', 'is_loop' => '循環卡密', 'yes'=>'是', 'import_carmis' => '匯入卡密', 'carmis_list' => '卡密清單', 'carmis_txt' => '卡密文字', 'are_you_import_sure' => '確定要匯入卡密嗎?', 'remove_duplication' => '是否去重', ], 'options' => [ ], 'helps' => [ 'carmis_list' => '一行一個,輸入鍵分隔。請勿匯入單個文字長度過大的卡密,容易導致記憶體溢出。如果卡密過大建議修改商品為人工處理' ], 'rule_messages' => [ 'carmis_list_and_carmis_txt_can_not_be_empty' => '請填寫需要匯入的卡密或選取需要上傳的卡密檔案', 'import_carmis_success' => '匯入卡密成功!' ] ]; ================================================ FILE: resources/lang/zh_TW/coupon.php ================================================ <?php return [ 'labels' => [ 'Coupon' => '折扣碼', 'coupon' => '折扣碼', ], 'fields' => [ 'type' => '折扣類型', 'discount' => '折扣金額', 'is_use' => '是否已經使用', 'is_open' => '是否啟用', 'coupon' => '折扣碼', 'ret' => '剩余使用次數', 'type_one_time' => '一次性使用', 'type_repeat' => '重復使用', 'status_use' => '已使用', 'status_unused' => '未使用', 'goods_id' => '可用商品' ], 'options' => [ ], ]; ================================================ FILE: resources/lang/zh_TW/dujiaoka.php ================================================ <?php /** * The file was created by Assimon. * * @author assimon<ashang@utf8.hk> * @copyright assimon<ashang@utf8.hk> * @link http://utf8.hk/ */ return [ 'official_website' => '官網', 'dashboard' => '儀表盤', 'dashboard_description' => '每個夢想的路上,一起前行....!', 'join_qq_group' => '加入qq群', 'join_telegram_group' => '加入tg群', 'is_open' => '是否啟用', 'trashed' => '回收桶', 'restore' => '恢復', 'are_you_restore_sure' => '確定恢復嗎?', 'restored' => '已恢復', 'ord' => '數值越大,排名越靠前', 'status_open' => '啟用', 'status_close' => '停用', 'sales_data' => '銷售數據', 'order_success_rate' => '訂單成交率', 'order_count_number' => '總訂單數', 'last_seven_days' => '最近7天', 'last_today' => '今天', 'last_month' => '最近一個月', 'last_year' => '最近一年', 'status_pending_number' => '待處理訂單數', 'status_processing_number' => '處理中訂單數', 'status_completed_number' => '已完成訂單數', 'status_failure_number' => '失敗訂單數', 'status_abnormal_number' => '異常訂單數', 'payment_chart' => '支付數據', 'payment_successful_number' => '支付成功數', 'unpaid_number' => '未支付數', 'sales_chart' => '銷售額', 'popular_goods' => '受歡迎的商品', 'warning_title' => '請註意!!', 'error_title' => '出現錯誤了喲~', 'callback' => '返回', 'reset' => '重設', 'search_now' => '立即查詢', 'home_page' => '首頁', 'group_all' => '全部', 'order_search' => '訂單查詢', 'site_announcement' => '公告', 'price' => '價格', 'wholesale_discount' => '批發價', 'order_now' => '下單', 'not' => '無', 'close' => '關閉', 'discount' => '折', 'home_discount' => '折扣', 'share_qr' => '分享此商品', 'by_amount' => '購買', 'or_the_above' => '件或以上', 'each' => '每個', 'email' => '信箱', 'payment_method' => '支付方式', 'search_password' => '訂單查詢密碼', 'img_verify_code' => '圖形驗證碼', 'coupon_code' => '折扣碼', 'copy_text' => '復製', 'search_goods_name' => '商品名稱...', 'behavior_verification' => '行為驗證', 'click_to_behavior_verification' => '點擊進行此處行為驗證', 'success_behavior_verification' => '已完成行為驗證', 'fail_behavior_verification' => '行為驗證失敗', 'please_complete_the_behavior_verification_correctly' => '請正確完成行為驗證', 'confirm_order' => '確認訂單', 'date_to_expired_order' => ':min分鐘內未完成支付訂單將作廢', 'order_information' => '訂單資料', 'pay_immediately' => '立即支付', 'amount_to_be_paid' => '需要支付金額', 'open_the_app_to_pay' => '打開 APP 支付', 'order_search_by_sn' => '訂單號查詢', 'order_search_by_email' => '下單信箱查詢', 'order_search_by_browser' => '瀏覽器查詢', 'scan_qrcode_to_pay' => 'QRcode掃碼支付', 'pay_order_expiration_date_prompt' => '請打開 APP 掃描 QRcode 支付!有效期:min分鐘', 'money_symbol' => '¥', 'purchase_limit' => '每單限', 'prompt' => [ 'server_illegal_request' => '非法請求!', 'the_goods_is_not_on_the_shelves' => '該商品未上架!', 'wholesale_price_format_error' => '批發價設定有誤', 'by_amount_not_null' => '購買數量不能為0', 'inventory_shortage' => '庫存不足', 'please_select_mode_of_payment' => '請選取支付方式', 'goods_does_not_exist' => '商品不存在', 'search_password_can_not_be_empty' => '請填寫訂單查詢密碼', 'image_verify_code_error' => '圖形驗證碼錯誤', 'buy_amount_format_error' => '請正確填寫購買數量', 'email_format_error' => '請正確填寫信箱', 'geetest_validate_fail' => '行為驗證未通過', 'purchase_limit_exceeded' => '單筆購買數量超過限製', 'coupon_does_not_exist' => '折扣碼不存在', 'coupon_lack_of_available_opportunities' => '折扣碼可使用次數不足', 'can_not_be_empty' => '不能為空', 'order_does_not_exist' => '訂單不存在', 'order_is_expired' => '訂單已逾期,請重新下單', 'order_already_paid' => '訂單已經支付過了,請勿重復支付', 'order_status_completed' => '訂單已經處理', 'order_inconsistent_amounts' => '訂單金額不一致', 'order_carmis_insufficient_quantity_available' => '庫存可使用卡密不足,請聯系管理員核查', 'pay_gateway_does_not_exist' => '支付網關不存在', 'abnormal_payment_channel' => '支付網關異常!', 'payment_successful' => '支付成功!', 'copy_text_success' => '復製成功', 'copy_text_failed' => '復製失敗', 'search_order_browser_tips' => '最多只能查詢最近 5 筆訂單', 'no_related_order_found_for_cache' => '未找到相關訂單快取!', 'no_related_order_found' => '未找到相關訂單!', 'new_order_push' => '新訂單通知' ], 'equipment' => [ 'please_use_a_browser_to_open' => '請使用內建瀏覽器打開', 'does_not_support_wechat_or_qq_access' => '本站不支持 Wechat或QQ 內存取', 'please_follow_the_prompts_to_open' => '請按提示在行動電話 瀏覽器 打開', 'open_browser_tips' => '點擊右上角···圖標 or 復製網址自行打開', 'apple_device' => '蘋果設備', 'android_device' => '安卓設備', 'click_on_the_upper_right_corner' => '點擊右上角', 'open_the_browser' => '在 瀏覽器 打開', 'what_do_you_need_today' => '今天需要一點什麽?', 'self_promotion' => '優質的商品和卓越的客戶服務代表完美的交易流程體現。', ], 'page-title' => [ 'home' => '首頁', 'bill' => '訂單確認', 'order-detail' => '訂單詳情', 'order-search' => '訂單查詢' ] ]; ================================================ FILE: resources/lang/zh_TW/emailtpl.php ================================================ <?php return [ 'labels' => [ 'Emailtpl' => '郵件模板', 'emailtpl' => '郵件模板', ], 'fields' => [ 'tpl_name' => '郵件標題', 'tpl_content' => '郵件內容', 'tpl_token' => '郵件標識', ], 'options' => [ ], ]; ================================================ FILE: resources/lang/zh_TW/extension.php ================================================ <?php return [ 'labels' => [ 'Extensions' => '擴展', ], 'fields' => [ 'alias' => '別名', 'description' => '描述', 'authors' => '開發者', 'homepage' => '首頁', 'require' => '依賴', 'require_dev' => '開發環境依賴', 'name' => '包名', 'version' => '版本', 'enable' => '啟用', 'config' => '配置', 'imported' => '匯入', ], 'options' => [ ], ]; ================================================ FILE: resources/lang/zh_TW/global.php ================================================ <?php return [ 'fields' => [ 'id' => 'ID', 'name' => '名稱', 'username' => '賬戶', 'email' => '信箱', 'http_path' => 'HTTP路徑', 'password' => '密碼', 'password_confirmation' => '確認密碼', 'created_at' => '建立時間', 'updated_at' => '更新時間', 'permissions' => '權限', 'slug' => '標識', 'user' => '用戶', 'order' => '排序', 'ip' => 'IP', 'method' => '方法', 'uri' => 'URI', 'roles' => '角色', 'path' => '路徑', 'input' => '輸入', 'type' => '類型', ], 'labels' => [ 'list' => '清單', 'edit' => '編輯', 'detail' => '詳細', 'create' => '建立', 'root' => '根', 'scaffold' => '代碼生成器', ], 'options' => [ // ], ]; ================================================ FILE: resources/lang/zh_TW/goods-group.php ================================================ <?php return [ 'labels' => [ 'GoodsGroup' => '分類', 'goods-group' => '分類', ], 'fields' => [ 'gp_name' => '分類名稱', 'is_open' => '是否啟用', 'ord' => '排序權重 越大越靠前', ], 'options' => [ ], ]; ================================================ FILE: resources/lang/zh_TW/goods.php ================================================ <?php return [ 'labels' => [ 'Goods' => '商品', 'goods' => '商品', ], 'fields' => [ 'actual_price' => '實際售價', 'group_id' => '所屬分類', 'api_hook' => '回調事件', 'buy_prompt' => '購買提示', 'description' => '商品描述', 'gd_name' => '商品名稱', 'gd_description' => '商品描述', 'gd_keywords' => '商品關鍵字', 'in_stock' => '庫存', 'ord' => '排序權重', 'other_ipu_cnf' => '其他輸入框配置', 'picture' => '商品圖片', 'retail_price' => '零售價', 'sales_volume' => '銷量', 'type' => '商品類型', 'buy_limit_num' => '限製單次購買最大數量', 'wholesale_price_cnf' => '批發價配置', 'automatic_delivery' => '自動發貨', 'manual_processing' => '人工處理', 'is_open' => '是否上架', 'coupon_id' => '可用折扣碼' ], 'options' => [ ], 'helps' => [ 'retail_price' => '可以不填寫,主要用於展示', 'picture' => '可不上傳,為預設圖片', 'in_stock' => '當商品類型為"人工處理"時,手動填寫的庫存數量才會生效。"自動發貨"類型的商品系統會自動識別庫存數量', 'buy_limit_num' => '防止惡意刷庫存,0為不限製客戶單次下單最大數量', 'other_ipu_cnf' => '格式為[唯一標識(英文)=輸入框名字=是否必填],例如:填寫 line_account=Line賬戶=true 表示產品詳情頁會新增一個 [Line賬戶] 輸入框,客戶可在其中輸入 [Line賬戶],true 為必填,false 為選填。(一行一個)', 'wholesale_price_cnf' => '例如:填寫 5=3 表示客戶購買 5 件或以上時,每件價格為 3 元。一行一個', ] ]; ================================================ FILE: resources/lang/zh_TW/hyper.php ================================================ <?php return [ # Hyper Theme 'notice_announcement' => '公告', 'error_back_btn' => '返回', 'error_error' => '錯誤', 'order_search' => '查詢訂單', 'global_currency' => '$', # home.blade.php 'home_title' => '首頁', 'home_search_box' => '輸入關鍵詞搜尋...', 'home_product_name' => '商品名稱', 'home_product_class' => '類型', 'home_in_stock' => '庫存', 'home_price' => '價格', 'home_place_an_order' => '操作', 'home_discount' => '折扣', 'home_automatic_delivery' => '自動發貨', 'home_charge' => '人工發貨', 'home_buy' => '購買', 'home_out_of_stock' => '售罄', 'home_whole' => '全部', 'home_tip' =>'提示', 'home_sell_out_tip' =>'商品缺貨', # buy.blade.php 'buy_title' => '產品詳細資訊', 'buy_automatic_delivery' => '自動發貨', 'buy_charge' => '人工發貨', 'buy_purchase' => '購買', 'buy_the_above' => '件起', 'buy_each' => '元/件', 'buy_price' => '價格', 'buy_email' => '電子信箱', 'buy_input_account' => '接收卡密或通知', 'buy_purchase_quantity' => '購買數量', 'buy_in_stock' => '庫存', 'buy_purchase_restrictions' => '限購', 'buy_search_password' => '查詢密碼', 'buy_input_search_password' => '查詢訂單密碼', 'buy_promo_code' => '折扣碼', 'buy_input_promo_code' => '您有折扣碼嗎?', 'buy_choose_payment_method' => '請選取支付方式', 'buy_behavior_verification' => '行為驗證', 'buy_verify_code' => '驗證碼', 'buy_payment_method' => '支付方式', 'buy_order_now' => '提交訂單', 'buy_product_desciption' => '商品詳情', 'buy_warning' => '警告!', 'buy_purchase_tips' => '提示', 'buy_empty_mailbox' => '信箱不能為空!', 'buy_zero_quantity' => '購買數量不能為 0!', 'buy_exceeds_stock' => '數量不允許大於庫存!', 'buy_exceeds_limit' => '已超過限購數量!', 'buy_empty_query_password' => '查詢密碼不能為空!', 'buy_empty_payment_method' => '未選取支付方式!', 'buy_empty_captcha' => '驗證碼不能為空!', 'buy_correct_verification' => '請正確完成行為驗證!', # bill.blade.php 'bill_title' => '確認訂單', 'bill_order_number' => '訂單號', 'bill_product_name' => '訂單名稱', 'bill_commodity_price' => '商品單價', 'bill_purchase_quantity' => '購買數量', 'bill_promo_code' => '折扣碼', 'bill_discounted_price' => '折扣金額', 'bill_actual_payment' => '商品總價', 'bill_email' => '信箱', 'bill_order_information' => '訂單資料', 'bill_payment_method' => '支付方式', 'bill_pay_immediately' => '立即支付', # orderinfo.blade.php 'orderinfo_title' => '訂單詳情', 'orderinfo_order_title' => '訂單名稱', 'orderinfo_number_of_orders' => '下單數量', 'orderinfo_order_time' => '下單時間', 'orderinfo_email' => '信箱', 'orderinfo_order_class' => '訂單類型', 'orderinfo_automatic_delivery' => '自動發貨', 'orderinfo_charge' => '人工發貨', 'orderinfo_total_order_price' => '訂單總價', 'orderinfo_order_status' => '訂單狀態', 'orderinfo_status_expired' => '已逾期', 'orderinfo_status_wait_pay' => '待支付', 'orderinfo_status_pending' => '待處理', 'orderinfo_status_processed' => '已處理', 'orderinfo_status_completed' => '已完成', 'orderinfo_status_failed' => '已失敗', 'orderinfo_status_abnormal' => '狀態異常', 'orderinfo_payment_method' => '支付方式', 'orderinfo_carmi' => '卡密', 'orderinfo_copy_carmi' => '復製卡密', 'orderinfo_tips' => '提示', 'orderinfo_copy_success' => '復製成功', 'orderinfo_copy_error' => '復製失敗', 'orderinfo_order_information' => '沒有找到訂單資訊', # qrpay.blade.php 'qrpay_title' => '掃碼支付', 'qrpay_order_expiration_date' => '訂單有效期', 'qrpay_expiration_date' => '分鐘', 'qrpay_actual_payment' => '商品總價', 'qrpay_open_app_to_pay' => '打開app支付', 'qrpay_notice' => '通知', 'payment_successful' => '支付成功!', 'order_pay_timeout' => '支付逾時!', # searchOrder.blade.php 'searchOrder_title' => '查詢訂單', 'searchOrder_query_tips' => '註意:最多只能查詢近5筆訂單。', 'searchOrder_order_search_by_number' => '訂單', 'searchOrder_order_search_by_email' => '信箱', 'searchOrder_order_search_by_ie' => '緩存', 'searchOrder_order_number' => '訂單號', 'searchOrder_search_now' => '立即查詢', 'searchOrder_reset_order' => '重設', 'searchOrder_email' => '信箱', 'searchOrder_search_password' => '查詢密碼', 'searchOrder_input_order_number' => '請輸入訂單編號', 'searchOrder_input_email' => '請輸入信箱', 'searchOrder_input_query_password' => '請輸入查詢密碼', ]; ================================================ FILE: resources/lang/zh_TW/luna.php ================================================ <?php return [ //luna模板 'home_choice_cate' => '選取分類', 'home_choice_goods' => '選取商品', 'order_search_m' => '查單', 'goods_num' => '商品數量', 'goods_disc_1' => '滿', 'goods_disc_2' => '個 單價', 'goods_disc_3' => '元/件', 'goods_surplus' => '剩余', 'goods_unit' => '件', 'buy_goods_msg' => '商品詳情', 'buy_num' => '購買數量', 'buy_email' => '信        箱', 'buy_email_tips' => '填寫你的信箱', 'buy_disc' => '折  扣  碼', 'buy_disc_tips' => '填寫你的折扣碼', 'buy_pass' => '查詢密碼', 'buy_pass_tips' => '請填寫訂單的查詢密碼', 'buy_code' => '驗  證  碼', 'buy_code_tips' => '請輸入驗證碼', 'buy_loading_verification' => '正在加載驗證碼...', 'buy_order_m' => '行動電話下單', 'query_no_order' => '沒有找到訂單資訊。', 'query_no_order_tips' => '或許可以檢查核實下輸入的訂單號,信箱,或者查詢密碼是否正確哦!!', 'order_number' => '訂單編號', 'email' => '訂單信箱', 'order_status' => '訂單狀態', 'least_one' => '購買數量不能低於1件', 'exceeds' => '購買數量不能多於庫存數量', 'exceeds_limit' => '購買數量不能多於限購數量', 'mobile_order' => '掃描QRcode 行動電話下單' ]; ================================================ FILE: resources/lang/zh_TW/menu.php ================================================ <?php return [ 'titles' => [ 'index' => '首頁', 'admin' => '系統', 'users' => '管理員', 'roles' => '角色', 'permission' => '權限', 'menu' => '選單', 'operation_log' => '動作日誌', 'helpers' => '開發工具', 'extensions' => '擴展', 'scaffold' => '代碼生成器', 'icons' => '圖標', 'goods_manage' => '商品管理', 'goods' => '商品清單', 'goods_group' => '商品分類', 'carmis_manage' => '卡密管理', 'carmis' => '卡密清單', 'import_carmis' => '匯入卡密', 'coupon_manage' => '折扣管理', 'coupon' => '折扣碼清單', 'configuration' => '配置', 'email_template_configuration' => '信箱模板配置', 'pay_configuration' => '支付配置', 'order_manage' => '銷售數據', 'order' => '訂單清單', 'system_setting' => '系統設定' ], ]; ================================================ FILE: resources/lang/zh_TW/order.php ================================================ <?php return [ 'labels' => [ 'Order' => '訂單', 'order' => '訂單', ], 'fields' => [ 'actual_price' => '實際支付價格', 'buy_amount' => '購買數量', 'buy_ip' => '購買者下單IP地址', 'coupon_discount_price' => '折扣碼折扣價格', 'coupon_id' => '折扣碼', 'email' => '下單信箱', 'goods_id' => '所屬商品', 'goods_price' => '商品單價', 'info' => '訂單詳情', 'order_sn' => '訂單號', 'pay_id' => '支付通道', 'status' => '訂單狀態', 'search_pwd' => '查詢密碼', 'title' => '訂單名稱', 'total_price' => '訂單總價', 'trade_no' => '第三方支付訂單號', 'type' => '訂單類型', 'wholesale_discount_price' => '批發價折扣', 'status_wait_pay' => '待支付', 'status_pending' => '待處理', 'status_processing' => '處理中', 'status_completed' => '已完成', 'status_failure' => '失敗', 'status_abnormal' => '異常', 'status_expired' => '已逾期', 'order_created' => '訂單建立時間', 'order_detail' => '訂單詳情', ], 'options' => [ ], ]; ================================================ FILE: resources/lang/zh_TW/pay.php ================================================ <?php return [ 'labels' => [ 'Pay' => '支付通道', 'pay' => '支付通道', ], 'fields' => [ 'merchant_id' => '商戶 ID', 'merchant_key' => '商戶 KEY', 'merchant_pem' => '商戶金鑰', 'pay_check' => '支付標識', 'pay_client' => '支付場景', 'pay_handleroute' => '支付處理路由', 'pay_method' => '支付方式', 'pay_name' => '支付名稱', 'is_open' => '是否啟用', 'method_jump' => '跳躍', 'method_scan' => '掃碼', 'pay_client_pc' => '計算機PC', 'pay_client_mobile' => '行動電話', 'pay_client_all' => '通用', ], 'options' => [ ], ]; ================================================ FILE: resources/lang/zh_TW/system-setting.php ================================================ <?php /** * The file was created by Assimon. * * @author assimon<ashang@utf8.hk> * @copyright assimon<ashang@utf8.hk> * @link http://utf8.hk/ */ return [ 'labels' => [ 'SystemSetting' => '系統設定', 'system_setting' => '系統設定', 'base_setting' => '基本設定', 'mail_setting' => '信箱服務', 'order_push_setting' => '訂單推送配置', 'geetest' => '極驗驗證', ], 'fields' => [ 'title' => '網站標題', 'text_logo' => '文字LOGO', 'img_logo' => '圖片LOGO', 'keywords' => '網站關鍵詞', 'description' => '網站描述', 'notice' => '站點公告', 'footer' => '頁尾自訂代碼', 'manage_email' => '管理員信箱', 'is_open_anti_red' => '是否開啟Wechat/QQ防紅', 'is_open_img_code' => '是否開啟圖形驗證碼', 'is_open_search_pwd' => '是否開啟查詢密碼', 'is_open_server_jiang' => '是否開啟server醬', 'server_jiang_token' => 'server醬通訊token', 'is_open_telegram_push' => '是否開啟Telegram推送', 'telegram_userid' => 'Telegram用戶id', 'telegram_bot_token' => 'Telegram通訊token', 'template' => '站點模板', 'language' => '站點語言', 'order_expire_time' => '訂單逾期時間(分鐘)', 'driver' => '信箱驅動', 'host' => 'smtp伺服器地址', 'port' => '通訊埠', 'username' => '賬戶', 'password' => '密碼', 'encryption' => '協議', 'from_address' => '發件地址', 'from_name' => '發件名稱', 'geetest_id' => '極驗id', 'geetest_key' => '極驗key', 'is_open_geetest' => '是否開啟極驗', ], 'options' => [ ], 'rule_messages' => [ 'save_system_setting_success' => '系統配置套用成功!', 'change_reboot_php_worker' => '修改部分配置需要重新啓動[supervisor]或php進程管理工具才會生效,例如信箱服務,server醬等。' ] ]; ================================================ FILE: resources/sass/app.scss ================================================ // ================================================ FILE: resources/views/admin/dashboard/title.blade.php ================================================ <style> .dashboard-title .links { text-align: center; margin-bottom: 2.5rem; } .dashboard-title .links > a { padding: 0 25px; font-size: 12px; font-weight: 600; letter-spacing: .1rem; text-decoration: none; text-transform: uppercase; color: #fff; } .dashboard-title h1 { font-weight: 200; font-size: 2.5rem; } .dashboard-title .avatar { background: #fff; border: 2px solid #fff; width: 70px; height: 70px; } </style> <div class="dashboard-title card bg-primary"> <div class="card-body"> <div class="text-center "> <img class="avatar img-circle shadow mt-1" src="/vendor/dujiaoka-admin/images/logo.jpg"> <div class="text-center mb-1"> <h1 class="mb-3 mt-2 text-white">独角数卡 V{{ config('dujiaoka.dujiaoka_version', '2.0.0') }}</h1> <div class="links"> <a href="https://github.com/assimon/dujiaoka" target="_blank">Github</a> <a href="//shang.qq.com/wpa/qunwpa?idkey=37b6b06f7c941dae20dcd5784088905d6461064d7f33478692f0c4215546cee0" id="qq-group-link" target="_blank"> <img border="0" src="//pub.idqqimg.com/wpa/images/group.png" alt="" title="{{ __('dujiaoka.join_qq_group') }}"> </a> <a href="http://t.me/dujiaoka" id="telegram-group-link" target="_blank">{{ __('dujiaoka.join_telegram_group') }}</a> <a href="https://dujiaoka.com" id="demo-link" target="_blank">{{ __('dujiaoka.official_website') }}</a> </div> </div> </div> </div> </div> ================================================ FILE: resources/views/common/install.blade.php ================================================ <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>独角数卡安装程序

                      独角数卡 「{{ config('dujiaoka.dujiaoka_version') }}」

                      每个梦想的路上,一起前行....! 👉🏻加入Telegram交流群

                      {{ csrf_field() }}
                      ================================================ FILE: resources/views/common/notencent.blade.php ================================================ {{ __('dujiaoka.equipment.please_use_a_browser_to_open') }}

                      {{ __('dujiaoka.equipment.click_on_the_upper_right_corner') }}{{ __('dujiaoka.equipment.open_the_browser') }}

                      {{ __('dujiaoka.equipment.apple_device') }}{{ __('dujiaoka.equipment.android_device') }}↗↗↗



                      1.{{ __('dujiaoka.equipment.does_not_support_wechat_or_qq_access') }}


                      2.{{ __('dujiaoka.equipment.please_follow_the_prompts_to_open') }}



                      {{ $nowUri }}


                      {{ __('dujiaoka.equipment.open_browser_tips') }}
                      ================================================ FILE: resources/views/email/mail.blade.php ================================================ {!! $body !!} ================================================ FILE: resources/views/hyper/errors/error.blade.php ================================================ @extends('hyper.layouts.default') @section('content')

                      {{ __('hyper.error_error') }}

                      error

                      {{ $content }}

                      @if(!$url) {{ __('hyper.error_back_btn') }} @else {{ __('hyper.error_back_btn') }} @endif
                      @stop ================================================ FILE: resources/views/hyper/layouts/_footer.blade.php ================================================ ================================================ FILE: resources/views/hyper/layouts/_header.blade.php ================================================ {{ isset($page_title) ? $page_title : '' }} | {{ dujiaoka_config_get('title') }} @if(\request()->getScheme() == "https") @endif ================================================ FILE: resources/views/hyper/layouts/_nav.blade.php ================================================ ================================================ FILE: resources/views/hyper/layouts/_script.blade.php ================================================ ================================================ FILE: resources/views/hyper/layouts/default.blade.php ================================================ @include('hyper.layouts._header')
                      @include('hyper.layouts._nav')
                      @yield('content')
                      @include('hyper.layouts._footer')
                      @include('hyper.layouts._script') @section('js') @show ================================================ FILE: resources/views/hyper/layouts/seo.blade.php ================================================ {{ isset($page_title) ? $page_title : '' }} | {{ dujiaoka_config_get('title') }} @if(\request()->getScheme() == "https") @endif
                      @include('hyper.layouts._nav')
                      @yield('content')
                      @include('hyper.layouts._footer')
                      @include('hyper.layouts._script') @section('js') @show ================================================ FILE: resources/views/hyper/readme.md ================================================ ## Hyper Theme for dujiaoka ### HTML framework Bootstrap Link: https://coderthemes.com/hyper/ ### Author 彼萌 ### Telegram https://t.me/bimoe ### Update 2022-4-1 ================================================ FILE: resources/views/hyper/static_pages/bill.blade.php ================================================ @extends('hyper.layouts.default') @section('content')
                      {{-- 确认订单 --}}

                      {{ __('hyper.bill_title') }}

                      {{-- 订单编号 --}}
                      {{ $order_sn }}
                      {{-- 商品名称 --}}
                      {{ $title }}
                      {{-- 商品单价 --}}
                      {{ $goods_price }}
                      {{-- 购买数量 --}}
                      x {{ $buy_amount }}
                      @if(!empty($coupon)) {{-- 优惠码 --}}
                      {{ $coupon['coupon'] }}
                      {{-- 优惠金额 --}}
                      {{ $coupon_discount_price }}
                      @endif {{-- 商品总价 --}}
                      {{ $actual_price }}
                      {{-- 电子邮箱 --}}
                      {{ $email }}
                      @if(!empty($info)) {{-- 订单资料 --}}
                      {{ $info }}
                      @endif {{-- 支付方式 --}}
                      {{ $pay['pay_name'] }}
                      @stop @section('js') @stop ================================================ FILE: resources/views/hyper/static_pages/buy.blade.php ================================================ @extends('hyper.layouts.seo') @section('content')
                      {{-- 产品详细信息 --}}

                      {{ __('hyper.buy_title') }}

                      {{ csrf_field() }}

                      {{-- 商品名称 --}} {{ $gd_name }}

                      @if($type == \App\Models\Goods::AUTOMATIC_DELIVERY) {{-- 自动发货 --}} {{ __('hyper.buy_automatic_delivery') }} @else {{-- 人工发货 --}} {{ __('hyper.buy_charge') }} @endif {{-- 库存 --}} {{ __('hyper.buy_in_stock') }}({{ $in_stock }}) @if($buy_limit_num > 0) {{__('hyper.buy_purchase_restrictions')}}({{ $buy_limit_num }}) @endif
                      @if(!empty($wholesale_price_cnf) && is_array($wholesale_price_cnf))
                      @endif

                      {{-- 价格 --}} {{ __('hyper.global_currency') }} {{ $actual_price }} {{-- 原价 --}} ¥ {{ $retail_price }}

                      {{-- 电子邮箱 --}}
                      {{ __('hyper.buy_email') }}
                      {{-- 接收卡密或通知 --}}
                      {{-- 购买数量 --}}
                      {{ __('hyper.buy_purchase_quantity') }}
                      @if(dujiaoka_config_get('is_open_search_pwd') == \App\Models\Goods::STATUS_OPEN)
                      {{-- 查询密码 --}}
                      {{ __('hyper.buy_search_password') }}
                      {{-- 查询订单密码 --}}
                      @endif @if(isset($open_coupon))
                      {{-- 优惠码 --}}
                      {{ __('hyper.buy_promo_code') }}
                      {{-- 您有优惠码吗? --}}
                      @endif @if($type == \App\Models\Goods::MANUAL_PROCESSING && is_array($other_ipu)) @foreach($other_ipu as $ipu)
                      {{ $ipu['desc'] }}
                      @endforeach @endif @if(dujiaoka_config_get('is_open_geetest') == \App\Models\Goods::STATUS_OPEN )
                      {{-- 极验证 --}}
                      {{ __('hyper.buy_behavior_verification') }}

                      loading...

                      @endif @if(dujiaoka_config_get('is_open_img_code') == \App\Models\Goods::STATUS_OPEN) {{-- 图形验证码 --}}
                      {{ __('hyper.buy_verify_code') }}
                      @endif
                      {{-- 支付方式 --}}
                      {{ __('hyper.buy_payment_method') }}
                      @foreach($payways as $key => $way)
                      @endforeach
                      {{-- 提交订单 --}}
                      {{-- 商品详情 --}}
                      {{ __('hyper.buy_product_desciption') }}
                      {!! $description !!}
                      @stop @section('js') @if(dujiaoka_config_get('is_open_geetest') == \App\Models\Goods::STATUS_OPEN ) @endif @stop ================================================ FILE: resources/views/hyper/static_pages/home.blade.php ================================================ @extends('hyper.layouts.default') @section('content')

                      @foreach($data as $group) @foreach($group['goods'] as $goods) @if($goods['in_stock'] > 0) @else
                      {{-- 缺货 --}} {{ __('hyper.home_out_of_stock') }}
                      @endif

                      {{ $goods['gd_name'] }}

                      {{ __('hyper.global_currency') }}{{ $goods['actual_price'] }}
                      @endforeach @endforeach
                      @foreach($data as $index => $group) @endforeach
                      @stop @section('js') @stop ================================================ FILE: resources/views/hyper/static_pages/orderinfo.blade.php ================================================ @extends('hyper.layouts.default') @section('content')
                      {{-- 订单详情 --}}

                      {{ __('hyper.orderinfo_title') }}

                      @foreach($orders as $order)

                      订单号:{{ $order['order_sn'] }}

                      {{-- 订单名称 --}}
                      {{ $order['title'] }}
                      {{-- 下单数量 --}}
                      {{ $order['buy_amount'] }}
                      {{-- 下单时间 --}}
                      {{ $order['created_at'] }}
                      {{-- 付款邮箱 --}}
                      {{ $order['email'] }}
                      {{-- 订单类型 --}} @if($order['type'] == \App\Models\Order::AUTOMATIC_DELIVERY) {{-- 自动发货 --}} {{ __('hyper.orderinfo_automatic_delivery') }} @else {{-- 人工发货 --}} {{ __('hyper.orderinfo_charge') }} @endif
                      {{-- 订单总价 --}} {{ $order['actual_price'] }}
                      {{-- 订单状态 --}} @switch($order['status']) @case(\App\Models\Order::STATUS_EXPIRED) {{-- 已过期 --}} {{ __('hyper.orderinfo_status_expired') }} @break @case(\App\Models\Order::STATUS_WAIT_PAY) {{-- 待支付 --}} {{ __('hyper.orderinfo_status_wait_pay') }} @break @case(\App\Models\Order::STATUS_PENDING) {{-- 待处理 --}} {{ __('hyper.orderinfo_status_pending') }} @break @case(\App\Models\Order::STATUS_PROCESSING) {{-- 已处理 --}} {{ __('hyper.orderinfo_status_processed') }} @break @case(\App\Models\Order::STATUS_COMPLETED) {{-- 已完成 --}} {{ __('hyper.orderinfo_status_completed') }} @break @case(\App\Models\Order::STATUS_FAILURE) {{-- 已失败 --}} {{ __('hyper.orderinfo_status_failed') }} @break @case(\App\Models\Order::STATUS_FAILURE) {{-- 状态异常 --}} {{ __('hyper.orderinfo_status_abnormal') }} @break @endswitch
                      {{-- 支付方式 --}} {{ $order['pay']['pay_name'] ?? '' }}
                      {{ __('hyper.orderinfo_carmi') }}
                      @endforeach
                      @if(!count($orders))

                      error

                      {{ __('hyper.orderinfo_order_information') }}

                      {{ __('hyper.error_back_btn') }}
                      @endif @stop @section('js') @stop ================================================ FILE: resources/views/hyper/static_pages/qrpay.blade.php ================================================ @extends('hyper.layouts.default') @section('content')
                      {{-- 扫码支付 --}}

                      {{ __('hyper.qrpay_title') }}

                      {{ __('hyper.qrpay_order_expiration_date') }} {{ dujiaoka_config_get('order_expire_time', 5) }} {{ __('hyper.qrpay_expiration_date') }}
                      {{-- 订单金额 --}}

                      {{ __('hyper.qrpay_actual_payment') }}: {{ $actual_price }}

                      @if(Agent::isMobile() && isset($jump_payuri))

                      {{ __('hyper.qrpay_open_app_to_pay') }}

                      @endif
                      @stop @section('js') @stop ================================================ FILE: resources/views/hyper/static_pages/searchOrder.blade.php ================================================ @extends('hyper.layouts.default') @section('content')
                      {{-- 查询订单 --}}

                      {{ __('hyper.searchOrder_title') }}

                      {{ __('hyper.searchOrder_query_tips') }}
                      {{ csrf_field() }}
                      {{-- 订单编号 --}}
                      {{-- 立即查询 --}} {{-- 重置 --}}
                      {{ csrf_field() }}
                      {{-- 邮箱 --}}
                      @if(dujiaoka_config_get('is_open_search_pwd', \App\Models\BaseModel::STATUS_CLOSE) == \App\Models\BaseModel::STATUS_OPEN)
                      {{-- 查询密码 --}}
                      @endif
                      {{-- 立即查询 --}} {{-- 重置 --}}
                      {{ csrf_field() }}
                      {{-- 立即查询 --}}
                      @stop ================================================ FILE: resources/views/luna/README.md ================================================ ## 独角数卡 - Luna模板 一套简洁的独角数卡模板 ## 特殊用法 #### 商品的其他输入框配置可以配置为下拉选项卡 ``` 使用方法:只需在输入框名字后面跟上选项即可 使用 | 分割选项 例子: service=所在区服[1号服务器|2号服务器|3号服务器]=true ``` ## 背景图 #### 设计能力有限,觉得背景图不好看的,可自行更换(建议尺寸:1920px*1224px) 背景图文件位置 ``` 你的部署路径/public/assets/luna/img/background.png ``` #### 也可去掉背景图 屏蔽_nav.blade.php中的一个div即可 _nav.blade.php位置 ``` 你的部署路径/resources/views/luna/layouts/_nav.blade.php ``` ``` /*屏蔽掉文件第一行的div标签即可去掉背景图。例:*/ {{--
                      --}} ``` ## 作者信息 [Julyssn](https://github.com/Julyssn) 七月 QQ:77322509 [发卡网](https://faka.win) TG: [@发卡网](https://t.me/super_faka_bot) 增加luna移动端公告、增加公告边框、为支付跳转按钮与支付二维码之间增加间距 ================================================ FILE: resources/views/luna/errors/error.blade.php ================================================ @extends('luna.layouts.default') @section('content') @include('luna.layouts._nav')
                      {{ $title }}
                      {{ $content }}
                      @if(!$url) @else @endif
                      @include('luna.layouts._footer') @endsection ================================================ FILE: resources/views/luna/layouts/_footer.blade.php ================================================ ================================================ FILE: resources/views/luna/layouts/_header.blade.php ================================================ {{ isset($page_title) ? $page_title : '' }} | {{ dujiaoka_config_get('title') }} @if(\request()->getScheme() == "https") @endif @if(dujiaoka_config_get('is_open_google_translate') == \App\Models\BaseModel::STATUS_OPEN) @include('luna.layouts.google_translate') @endif ================================================ FILE: resources/views/luna/layouts/_nav.blade.php ================================================
                      @yield('notice_min') ================================================ FILE: resources/views/luna/layouts/_notice.blade.php ================================================

                      {{ __('dujiaoka.site_announcement') }}:

                      {!! dujiaoka_config_get('notice') !!}
                      ================================================ FILE: resources/views/luna/layouts/_notice_sm.blade.php ================================================

                      {{ __('dujiaoka.site_announcement') }}:

                      {!! dujiaoka_config_get('notice') !!}
                      ================================================ FILE: resources/views/luna/layouts/_notice_xs.blade.php ================================================

                      {{ __('dujiaoka.site_announcement') }}:

                      {!! dujiaoka_config_get('notice') !!}
                      ================================================ FILE: resources/views/luna/layouts/_script.blade.php ================================================ ================================================ FILE: resources/views/luna/layouts/default.blade.php ================================================ @include('luna.layouts._header') @yield('content') @include('luna.layouts._script') @section('js') @show ================================================ FILE: resources/views/luna/layouts/google_translate.php ================================================
                      ================================================ FILE: resources/views/luna/layouts/seo.blade.php ================================================ {{ isset($page_title) ? $page_title : '' }} | {{ dujiaoka_config_get('title') }} @if(\request()->getScheme() == "https") @endif @yield('content') @include('luna.layouts._script') @section('js') @show ================================================ FILE: resources/views/luna/static_pages/bill.blade.php ================================================ @extends('luna.layouts.default') @section('content') @include('luna.layouts._nav')
                      {{ __('dujiaoka.confirm_order') }}

                      {{ __('dujiaoka.warning_title') }}{{ __('dujiaoka.date_to_expired_order', ['min' => dujiaoka_config_get('order_expire_time', 5)]) }}

                      @if(isset($coupon)) @endif @if($wholesale_discount_price > 0 ) @endif @if($info) @php preg_match_all('/(\[.*?\])/m', $info, $matches, PREG_SET_ORDER, 0); foreach ($matches as $item) { $str = $item[1] ?? ''; if($str){ $info = str_replace($str,'',$info); } } @endphp @endif
                      {{ __('order.fields.order_sn') }}: {{ $order_sn }}
                      {{ __('order.fields.title') }}: {{ $title }}
                      {{ __('order.fields.goods_price') }}: {{ __('dujiaoka.money_symbol') }}{{ $goods_price }}
                      {{ __('order.fields.buy_amount') }}: x {{ $buy_amount }}
                      {{ __('order.fields.coupon_id') }}: {{ $coupon['coupon'] }}
                      {{ __('order.fields.coupon_discount_price') }}: {{ __('dujiaoka.money_symbol') }}{{ $coupon_discount_price }}
                      {{ __('order.fields.wholesale_discount_price') }}: {{ __('dujiaoka.money_symbol') }}{{ $wholesale_discount_price }}
                      {{ __('order.fields.actual_price') }}: {{ __('dujiaoka.money_symbol') }}{{ $actual_price }}
                      {{ __('dujiaoka.email') }}: {{ $email }}
                      {{ __('dujiaoka.order_information') }}:

                      {{ $info }}

                      {{ __('dujiaoka.payment_method') }}: {{ $pay['pay_name'] }}

                      {{ __('dujiaoka.pay_immediately') }}

                      @include('luna.layouts._footer') @endsection ================================================ FILE: resources/views/luna/static_pages/buy.blade.php ================================================ @extends('luna.layouts.seo') @section('notice') @include('luna.layouts._notice') @endsection @section('content') @include('luna.layouts._nav')
                      {{ __('luna.buy_goods_msg') }}
                      {{ csrf_field() }}
                      {{ $gd_name }} @if($type == \App\Models\Goods::AUTOMATIC_DELIVERY) {{ __('goods.fields.automatic_delivery') }} @else {{ __('goods.fields.manual_processing') }} @endif {{__('goods.fields.in_stock')}}({{ $in_stock }}) @if($buy_limit_num > 0) {{__('dujiaoka.purchase_limit')}}({{ $buy_limit_num }}) @endif
                      {{ $actual_price }} @if((int)$retail_price) [¥{{ $retail_price }}] @endif
                      @if(!empty($wholesale_price_cnf) && is_array($wholesale_price_cnf))
                      @foreach($wholesale_price_cnf as $ws) {{ __('luna.goods_disc_1') }}{{ $ws['number'] }}{{ __('luna.goods_disc_2') }}{{ $ws['price'] }}{{ __('luna.goods_disc_3') }} @endforeach
                      @endif
                      {{ __('luna.buy_num') }}:
                      {{ __('luna.buy_email') }}:
                      @if(isset($open_coupon))
                      {{ __('luna.buy_disc') }}:
                      @endif @if($type == \App\Models\Goods::MANUAL_PROCESSING && is_array($other_ipu)) @foreach($other_ipu as $ipu) @php preg_match_all('/(.*?)\[(.*?)\]/m', $ipu['desc'], $matches, PREG_SET_ORDER, 0); $str = $matches[0][2] ?? ''; if($str){ $name = $matches[0][1] ?? ''; $option = explode('|',$str); }else{ $option = []; } @endphp @if(count($option))
                      {{ $name }}:
                      @else
                      {{ $ipu['desc'] }}:
                      @endif @endforeach @endif @if(dujiaoka_config_get('is_open_search_pwd') == \App\Models\Goods::STATUS_OPEN)
                      {{ __('luna.buy_pass') }}:
                      @endif @if(dujiaoka_config_get('is_open_img_code') == \App\Models\Goods::STATUS_OPEN)
                      {{ __('luna.buy_code') }}:
                      @endif @if(dujiaoka_config_get('is_open_geetest') == \App\Models\Goods::STATUS_OPEN)
                      {{ __('dujiaoka.behavior_verification') }}: {{ __('luna.buy_loading_verification') }}
                      @endif
                      @foreach($payways as $key => $way)
                      @endforeach
                      {{ __('goods.fields.description') }}
                      {!! $description !!}
                      size(300)->generate(Request::url())) !!}')"> {{ __('luna.buy_order_m') }}
                      @include('luna.layouts._footer') @endsection @section('js') @endsection ================================================ FILE: resources/views/luna/static_pages/home.blade.php ================================================ @extends('luna.layouts.default') @section('notice') @include('luna.layouts._notice_xs') @endsection @section('notice_min') @include('luna.layouts._notice_sm') @endsection @section('content') @include('luna.layouts._nav')
                      {{ __('luna.home_choice_cate') }}

                      {{ __('luna.home_choice_goods') }}

                      @include('luna.layouts._footer') @endsection ================================================ FILE: resources/views/luna/static_pages/orderinfo.blade.php ================================================ @extends('luna.layouts.default') @section('content') @include('luna.layouts._nav')
                      {{ __('order.fields.order_detail') }}
                      @foreach($orders as $order)
                      • {{ __('luna.order_number') }}: {{ $order['order_sn'] }}
                      • {{ __('order.fields.title') }}: {{ $order['title'] }}
                      • {{ __('order.fields.buy_amount') }} : {{ $order['buy_amount'] }}
                      • {{ __('order.fields.order_created') }} : {{ $order['created_at'] }}
                      • {{ __('order.fields.email') }}: {{ $order['email'] }}
                      • {{ __('order.fields.type') }}: @if($order['type'] == \App\Models\Order::AUTOMATIC_DELIVERY) {{ __('goods.fields.automatic_delivery') }} @else {{ __('goods.fields.manual_processing') }} @endif
                      • {{ __('order.fields.actual_price') }}: {{ __('dujiaoka.money_symbol') }}{{ $order['actual_price'] }}
                      • {{ __('order.fields.status') }}: @switch($order['status']) @case(\App\Models\Order::STATUS_EXPIRED) {{ __('order.fields.status_expired') }} @break @case(\App\Models\Order::STATUS_WAIT_PAY) {{ __('order.fields.status_wait_pay') }} @break @case(\App\Models\Order::STATUS_PENDING) {{ __('order.fields.status_pending') }} @break @case(\App\Models\Order::STATUS_PROCESSING) {{ __('order.fields.status_processing') }} @break @case(\App\Models\Order::STATUS_COMPLETED) {{ __('order.fields.status_completed') }} @break @case(\App\Models\Order::STATUS_FAILURE) {{ __('order.fields.status_failure') }} @break @case(\App\Models\Order::STATUS_ABNORMAL) {{ __('order.fields.status_abnormal') }} @break @endswitch
                      • {{ __('dujiaoka.payment_method') }} : {{ $order['pay']['pay_name'] ?? '' }}
                      @php $info =''; @endphp @if($order['info']) @php $info = $order['info']; preg_match_all('/(\[.*?\])/m', $info, $matches, PREG_SET_ORDER, 0); foreach ($matches as $item) { $str = $item[1] ?? ''; if($str){ $info = str_replace($str,'',$info); } } @endphp @endif
                      @endforeach @if(!count($orders))
                      {{ __('luna.query_no_order') }}
                      {{ __('luna.query_no_order_tips') }}
                      @endif
                      @include('luna.layouts._footer') @endsection @section('js') @endsection ================================================ FILE: resources/views/luna/static_pages/qrpay.blade.php ================================================ @extends('luna.layouts.default') @section('content') @include('luna.layouts._nav')
                      {{ __('dujiaoka.scan_qrcode_to_pay') }}

                      {{ __('dujiaoka.payment_method') }}:[{{ $payname }} ], {{ __('dujiaoka.pay_order_expiration_date_prompt', ['min' => dujiaoka_config_get('order_expire_time', 5)]) }}

                      {{ __('dujiaoka.amount_to_be_paid') }} : {{ __('dujiaoka.money_symbol') }}{{ $actual_price }}

                      @if(Agent::isMobile() && isset($jump_payuri))

                      {{ __('dujiaoka.open_the_app_to_pay') }}

                      @endif
                      @include('luna.layouts._footer') @endsection @section('js') @endsection ================================================ FILE: resources/views/luna/static_pages/searchOrder.blade.php ================================================ @extends('luna.layouts.default') @section('content') @include('luna.layouts._nav')
                      {{ __('dujiaoka.order_search') }}

                      {{ __('dujiaoka.prompt.search_order_browser_tips') }}

                      • {{ __('dujiaoka.order_search_by_sn') }}
                      • {{ __('dujiaoka.order_search_by_email') }}
                      • {{ __('dujiaoka.order_search_by_browser') }}
                      {{ csrf_field() }}
                      {{ __('order.fields.order_sn') }}:
                      {{ csrf_field() }}
                      {{ __('order.fields.email') }}:
                      @if(dujiaoka_config_get('is_open_search_pwd', \App\Models\BaseModel::STATUS_CLOSE) == \App\Models\BaseModel::STATUS_OPEN)
                      {{ __('order.fields.search_pwd') }}:
                      @endif
                      {{ csrf_field() }}
                      @include('luna.layouts._footer') @endsection @section('js') @endsection ================================================ FILE: resources/views/unicorn/errors/error.blade.php ================================================ @extends('unicorn.layouts.default') @section('content')

                       {{ $title }}:

                      似乎遇到了一点问题~
                      {{ $content }}
                      @stop ================================================ FILE: resources/views/unicorn/layouts/_footer.blade.php ================================================
                      Powered by:@独角数卡
                      {!! dujiaoka_config_get('footer') !!}
                      ================================================ FILE: resources/views/unicorn/layouts/_header.blade.php ================================================ {{ isset($page_title) ? $page_title : '' }} | {{ dujiaoka_config_get('title') }} @if(\request()->getScheme() == "https") @endif ================================================ FILE: resources/views/unicorn/layouts/_nav.blade.php ================================================
                      ================================================ FILE: resources/views/unicorn/layouts/_script.blade.php ================================================ ================================================ FILE: resources/views/unicorn/layouts/default.blade.php ================================================ @include('unicorn.layouts._header') @include('unicorn.layouts._nav') @yield('content') @include('unicorn.layouts._footer') @include('unicorn.layouts._script') @section('js') @show ================================================ FILE: resources/views/unicorn/layouts/seo.blade.php ================================================ {{ isset($page_title) ? $page_title : '' }} | {{ dujiaoka_config_get('title') }} @if(\request()->getScheme() == "https") @endif @include('unicorn.layouts._nav') @yield('content') @include('unicorn.layouts._footer') @include('unicorn.layouts._script') @section('js') @show ================================================ FILE: resources/views/unicorn/static_pages/bill.blade.php ================================================ @extends('unicorn.layouts.default') @section('content')

                      {{ __('dujiaoka.confirm_order') }}

                      {{ __('order.fields.order_sn') }}:{{ $order_sn }}
                      {{ $title }}
                      {{ $goods_price }}
                      {{ $buy_amount }}
                      {{ $email }}
                      @if($type == \App\Models\Order::AUTOMATIC_DELIVERY) {{ __('goods.fields.automatic_delivery') }} @else {{ __('goods.fields.manual_processing') }} @endif
                      @if(!empty($coupon))
                      {{ $coupon['coupon'] }}
                      {{ __('dujiaoka.money_symbol') }}{{ $coupon_discount_price }}
                      @endif @if($wholesale_discount_price > 0 )
                      {{ __('dujiaoka.money_symbol') }}{{ $wholesale_discount_price }}
                      @endif @if(!empty($info))

                      {{ $info }}

                      @endif
                      {{ __('dujiaoka.money_symbol') }}{{ $actual_price }}
                      {{ $pay['pay_name'] }}
                      {{ $created_at }}
                      @stop @section('js') @stop ================================================ FILE: resources/views/unicorn/static_pages/buy.blade.php ================================================ @extends('unicorn.layouts.seo') @section('content')
                      {{ $gd_name }} @if($type == \App\Models\Goods::AUTOMATIC_DELIVERY)
                      {{ __('goods.fields.automatic_delivery') }}
                      @else
                      {{ __('goods.fields.manual_processing') }}
                      @endif

                      {{ $gd_name }}

                      {{__('goods.fields.in_stock')}}:{{ $in_stock }}
                      @if($buy_limit_num > 0)
                      {{__('dujiaoka.purchase_limit')}}({{ $buy_limit_num }})
                      @endif @if(!empty($wholesale_price_cnf) && is_array($wholesale_price_cnf))
                      @foreach($wholesale_price_cnf as $ws) {{ __('dujiaoka.by_amount') }}{{ $ws['number'] }}{{ __('dujiaoka.or_the_above') }},{{ __('dujiaoka.each') }}:{{ $ws['price'] }}{{ __('dujiaoka.money_symbol') }} @endforeach
                      @endif
                      {{ csrf_field() }}
                      {{ __('dujiaoka.price') }}:{{ __('dujiaoka.money_symbol') }} {{ $actual_price }}
                      @if(isset($open_coupon))
                      @endif @if(dujiaoka_config_get('is_open_search_pwd') == \App\Models\Goods::STATUS_OPEN)
                      @endif @if(dujiaoka_config_get('is_open_img_code') == \App\Models\Goods::STATUS_OPEN)
                      {{ __('dujiaoka.img_verify_code') }}
                      @endif
                      @if($type == \App\Models\Goods::MANUAL_PROCESSING && is_array($other_ipu)) @foreach($other_ipu as $ipu)
                      @endforeach @endif
                      @foreach($payways as $index => $way)
                      @endforeach
                      {{ __('goods.fields.description') }}
                      {!! $description !!}
                      @stop @section('js') @stop ================================================ FILE: resources/views/unicorn/static_pages/home.blade.php ================================================ @extends('unicorn.layouts.default') @section('content')

                      {{ __('dujiaoka.site_announcement') }}:

                      {!! dujiaoka_config_get('notice') !!}

                      {{ __('dujiaoka.equipment.what_do_you_need_today') }}

                      {{ __('dujiaoka.equipment.self_promotion') }}

                      @foreach($data as $index => $group) @foreach($group['goods'] as $goods)
                      @if($goods['type'] == \App\Models\Goods::AUTOMATIC_DELIVERY) {{ __('goods.fields.automatic_delivery') }} @else {{ __('goods.fields.manual_processing') }} @endif {{ $goods['gd_name'] }}
                      {{ $goods['gd_name'] }}
                      @if($goods['wholesale_price_cnf']) @endif
                      {{__('goods.fields.in_stock')}}:{{ $goods['in_stock'] }}
                      {{ __('dujiaoka.order_now') }}
                      @endforeach @endforeach
                      @foreach($data as $index => $group)
                      @foreach($group['goods'] as $goods)
                      @if($goods['type'] == \App\Models\Goods::AUTOMATIC_DELIVERY) {{ __('goods.fields.automatic_delivery') }} @else {{ __('goods.fields.manual_processing') }} @endif {{ $goods['gd_name'] }}
                      {{ $goods['gd_name'] }}
                      @if($goods['wholesale_price_cnf']) @endif
                      {{__('goods.fields.in_stock')}}:{{ $goods['in_stock'] }}
                      {{ __('dujiaoka.order_now') }}
                      @endforeach
                      @endforeach
                      @stop @section('js') @stop ================================================ FILE: resources/views/unicorn/static_pages/orderinfo.blade.php ================================================ @extends('unicorn.layouts.default') @section('content')
                      @foreach($orders as $order)
                      {{ __('order.fields.order_sn') }}:{{ $order['order_sn'] }}
                      {{ $order['title'] }}
                      {{ $order['buy_amount'] }}
                      {{ $order['created_at'] }}
                      {{ $order['email'] }}
                      @if($order['type'] == \App\Models\Order::AUTOMATIC_DELIVERY) {{ __('goods.fields.automatic_delivery') }} @else {{ __('goods.fields.manual_processing') }} @endif
                      {{ $order['actual_price'] }}
                      @switch($order['status']) @case(\App\Models\Order::STATUS_EXPIRED) {{ __('order.fields.status_expired') }} @break @case(\App\Models\Order::STATUS_WAIT_PAY) {{ __('order.fields.status_wait_pay') }} @break @case(\App\Models\Order::STATUS_PENDING) {{ __('order.fields.status_pending') }} @break @case(\App\Models\Order::STATUS_PROCESSING) {{ __('order.fields.status_processing') }} @break @case(\App\Models\Order::STATUS_COMPLETED) {{ __('order.fields.status_completed') }} @break @case(\App\Models\Order::STATUS_FAILURE) {{ __('order.fields.status_failure') }} @break @case(\App\Models\Order::STATUS_ABNORMAL) {{ __('order.fields.status_abnormal') }} @break @endswitch
                      {{ $order['pay']['pay_name'] ?? '' }}
                      {{ __('order.fields.info') }}
                      @endforeach
                      @stop @section('js') @stop ================================================ FILE: resources/views/unicorn/static_pages/qrpay.blade.php ================================================ @extends('unicorn.layouts.default') @section('content')

                      {{ __('dujiaoka.scan_qrcode_to_pay') }}

                      {{ __('dujiaoka.payment_method') }}:[{{ $payname }}], {{ __('dujiaoka.pay_order_expiration_date_prompt', ['min' => dujiaoka_config_get('order_expire_time', 5)]) }}
                      {{ __('dujiaoka.scan_qrcode_to_pay') }}
                      {{ __('dujiaoka.amount_to_be_paid') }}: {{ $actual_price }}
                      @if(Agent::isMobile() && isset($jump_payuri)) {{ __('dujiaoka.open_the_app_to_pay') }} @endif
                      @stop @section('js') @stop ================================================ FILE: resources/views/unicorn/static_pages/searchOrder.blade.php ================================================ @extends('unicorn.layouts.default') @section('content')

                      {{ __('dujiaoka.order_search') }}

                      {{ __('dujiaoka.prompt.search_order_browser_tips') }}
                      {{ csrf_field() }}
                      {{ csrf_field() }}
                      @if(dujiaoka_config_get('is_open_search_pwd', \App\Models\BaseModel::STATUS_CLOSE) == \App\Models\BaseModel::STATUS_OPEN)
                      @endif
                      {{ csrf_field() }}
                      @stop @section('js') @stop ================================================ FILE: resources/views/vendor/geetest/geetest.blade.php ================================================

                      loading...

                      @define use Illuminate\Support\Facades\Config ================================================ FILE: routes/api.php ================================================ get('/user', function (Request $request) { return $request->user(); }); ================================================ FILE: routes/channels.php ================================================ id === (int) $id; }); ================================================ FILE: routes/common/pay.php ================================================ * @copyright assimon * @link http://utf8.hk/ */ use Illuminate\Support\Facades\Route; Route::get('pay-gateway/{handle}/{payway}/{orderSN}', 'PayController@redirectGateway'); // 支付相关 Route::group(['prefix' => 'pay', 'namespace' => 'Pay', 'middleware' => ['dujiaoka.pay_gate_way']], function () { // 支付宝 Route::get('alipay/{payway}/{orderSN}', 'AlipayController@gateway'); Route::post('alipay/notify_url', 'AlipayController@notifyUrl'); // 微信 Route::get('wepay/{payway}/{orderSN}', 'WepayController@gateway'); Route::post('wepay/notify_url', 'WepayController@notifyUrl'); // 码支付 Route::get('mapay/{payway}/{orderSN}', 'MapayController@gateway'); Route::post('mapay/notify_url', 'MapayController@notifyUrl'); // Paysapi Route::get('paysapi/{payway}/{orderSN}', 'PaysapiController@gateway'); Route::post('paysapi/notify_url', 'PaysapiController@notifyUrl'); Route::get('paysapi/return_url', 'PaysapiController@returnUrl')->name('paysapi-return'); // payjs Route::get('payjs/{payway}/{orderSN}', 'PayjsController@gateway'); Route::post('payjs/notify_url', 'PayjsController@notifyUrl'); // 易支付 Route::get('yipay/{payway}/{orderSN}', 'YipayController@gateway'); Route::get('yipay/notify_url', 'YipayController@notifyUrl'); Route::get('yipay/return_url', 'YipayController@returnUrl')->name('yipay-return'); // paypal Route::get('paypal/{payway}/{orderSN}', 'PaypalPayController@gateway'); Route::get('paypal/return_url', 'PaypalPayController@returnUrl')->name('paypal-return'); Route::any('paypal/notify_url', 'PaypalPayController@notifyUrl'); // V免签 Route::get('vpay/{payway}/{orderSN}', 'VpayController@gateway'); Route::get('vpay/notify_url', 'VpayController@notifyUrl'); Route::get('vpay/return_url', 'VpayController@returnUrl')->name('vpay-return'); // stripe Route::get('stripe/{payway}/{oid}','StripeController@gateway'); Route::get('stripe/return_url','StripeController@returnUrl'); Route::get('stripe/check','StripeController@check'); Route::get('stripe/charge','StripeController@charge'); // Coinbase Route::get('coinbase/{payway}/{orderSN}', 'CoinbaseController@gateway'); Route::post('coinbase/notify_url', 'CoinbaseController@notifyUrl'); // epusdt Route::get('epusdt/{payway}/{orderSN}', 'EpusdtController@gateway'); Route::post('epusdt/notify_url', 'EpusdtController@notifyUrl'); Route::get('epusdt/return_url', 'EpusdtController@returnUrl')->name('epusdt-return'); // tokenpay Route::get('tokenpay/{payway}/{orderSN}', 'TokenPayController@gateway'); Route::post('tokenpay/notify_url', 'TokenPayController@notifyUrl'); Route::get('tokenpay/return_url', 'TokenPayController@returnUrl')->name('tokenpay-return'); }); ================================================ FILE: routes/common/web.php ================================================ * @copyright assimon * @link http://utf8.hk/ */ use Illuminate\Support\Facades\Route; Route::group(['middleware' => ['dujiaoka.boot'],'namespace' => 'Home'], function () { // 首页 Route::get('/', 'HomeController@index'); // 极验效验 Route::get('check-geetest', 'HomeController@geetest'); // 商品详情 Route::get('buy/{id}', 'HomeController@buy'); // 提交订单 Route::post('create-order', 'OrderController@createOrder'); // 结算页 Route::get('bill/{orderSN}', 'OrderController@bill'); // 通过订单号详情页 Route::get('detail-order-sn/{orderSN}', 'OrderController@detailOrderSN'); // 订单查询页 Route::get('order-search', 'OrderController@orderSearch'); // 检查订单状态 Route::get('check-order-status/{orderSN}', 'OrderController@checkOrderStatus'); // 通过订单号查询 Route::post('search-order-by-sn', 'OrderController@searchOrderBySN'); // 通过邮箱查询 Route::post('search-order-by-email', 'OrderController@searchOrderByEmail'); // 通过浏览器查询 Route::post('search-order-by-browser', 'OrderController@searchOrderByBrowser'); }); Route::group(['middleware' => ['install.check'],'namespace' => 'Home'], function () { // 安装 Route::get('install', 'HomeController@install'); // 执行安装 Route::post('do-install', 'HomeController@doInstall'); }); ================================================ FILE: routes/console.php ================================================ comment(Inspiring::quote()); })->describe('Display an inspiring quote'); ================================================ FILE: routes/web.php ================================================ */ $uri = urldecode( parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH) ); // This file allows us to emulate Apache's "mod_rewrite" functionality from the // built-in PHP web server. This provides a convenient way to test a Laravel // application without having installed a "real" web server software here. if ($uri !== '/' && file_exists(__DIR__.'/public'.$uri)) { return false; } require_once __DIR__.'/public/index.php'; ================================================ FILE: storage/app/.gitignore ================================================ * !public/ !.gitignore ================================================ FILE: storage/framework/.gitignore ================================================ config.php routes.php schedule-* compiled.php services.json events.scanned.php routes.scanned.php down ================================================ FILE: storage/framework/cache/.gitignore ================================================ * !data/ !.gitignore ================================================ FILE: storage/framework/sessions/.gitignore ================================================ * !.gitignore ================================================ FILE: storage/framework/testing/.gitignore ================================================ * !.gitignore ================================================ FILE: storage/framework/views/.gitignore ================================================ * !.gitignore ================================================ FILE: storage/logs/.gitignore ================================================ * !.gitignore ================================================ FILE: tests/CreatesApplication.php ================================================ make(Kernel::class)->bootstrap(); return $app; } } ================================================ FILE: tests/Feature/ExampleTest.php ================================================ get('/'); $response->assertStatus(200); } } ================================================ FILE: tests/TestCase.php ================================================ assertTrue(true); } } ================================================ FILE: webpack.mix.js ================================================ const mix = require('laravel-mix'); /* |-------------------------------------------------------------------------- | Mix Asset Management |-------------------------------------------------------------------------- | | Mix provides a clean, fluent API for defining some Webpack build steps | for your Laravel application. By default, we are compiling the Sass | file for the application as well as bundling up all the JS files. | */ mix.js('resources/js/app.js', 'public/js') .sass('resources/sass/app.scss', 'public/css');